aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorno-author <no-author@gcc.gnu.org>1998-03-04 02:31:39 +0000
committerno-author <no-author@gcc.gnu.org>1998-03-04 02:31:39 +0000
commit6f2e5e8e475cd5c4b5072f1635ac1620161c7482 (patch)
tree037d2b28690a6a7550a8fd65feb2f9a81b748ba5
parent233e2067d43d11954fece50c4f4d221861a32e71 (diff)
This commit was manufactured by cvs2svn to create taggcc-2_8_1-RELEASE
'gcc-2_8_1-RELEASE'. git-svn-id: https://gcc.gnu.org/svn/gcc/tags/gcc-2_8_1-RELEASE@18395 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/COPYING340
-rw-r--r--gcc/COPYING.LIB482
-rw-r--r--gcc/ChangeLog15188
-rw-r--r--gcc/ChangeLog.06670
-rw-r--r--gcc/ChangeLog.19207
-rw-r--r--gcc/ChangeLog.1010110
-rw-r--r--gcc/ChangeLog.27229
-rw-r--r--gcc/ChangeLog.38063
-rw-r--r--gcc/ChangeLog.410783
-rw-r--r--gcc/ChangeLog.58954
-rw-r--r--gcc/ChangeLog.68173
-rw-r--r--gcc/ChangeLog.710376
-rw-r--r--gcc/ChangeLog.811080
-rw-r--r--gcc/ChangeLog.99968
-rw-r--r--gcc/Makefile.in519
-rw-r--r--gcc/NEWS276
-rw-r--r--gcc/README26
-rw-r--r--gcc/README.RS6000113
-rw-r--r--gcc/README.X112
-rw-r--r--gcc/TESTS.FLUNK39
-rw-r--r--gcc/acconfig.h21
-rw-r--r--gcc/aclocal.m46
-rw-r--r--gcc/basic-block.h6
-rw-r--r--gcc/bc-emit.c5
-rw-r--r--gcc/bc-optab.c6
-rw-r--r--gcc/bitmap.c82
-rw-r--r--gcc/bitmap.h80
-rw-r--r--gcc/c-aux-info.c20
-rw-r--r--gcc/c-common.c182
-rw-r--r--gcc/c-decl.c169
-rw-r--r--gcc/c-gperf.h186
-rw-r--r--gcc/c-iterate.c4
-rw-r--r--gcc/c-lang.c5
-rw-r--r--gcc/c-lex.c114
-rw-r--r--gcc/c-parse.in45
-rw-r--r--gcc/c-pragma.c6
-rw-r--r--gcc/c-tree.h11
-rw-r--r--gcc/c-typeck.c110
-rw-r--r--gcc/caller-save.c1
-rw-r--r--gcc/calls.c156
-rw-r--r--gcc/cccp.1674
-rw-r--r--gcc/cccp.c949
-rw-r--r--gcc/cexp.y168
-rw-r--r--gcc/choose-temp.c17
-rw-r--r--gcc/collect2.c131
-rw-r--r--gcc/combine.c255
-rwxr-xr-xgcc/config.guess89
-rwxr-xr-xgcc/config.sub69
-rw-r--r--gcc/config/1750a/1750a.c7
-rw-r--r--gcc/config/1750a/1750a.md2
-rw-r--r--gcc/config/a29k/a29k.c4
-rw-r--r--gcc/config/a29k/a29k.h9
-rw-r--r--gcc/config/a29k/t-vx29k2
-rw-r--r--gcc/config/alpha/alpha.c396
-rw-r--r--gcc/config/alpha/alpha.h108
-rw-r--r--gcc/config/alpha/alpha.md331
-rw-r--r--gcc/config/alpha/elf.h43
-rw-r--r--gcc/config/alpha/linux.h14
-rw-r--r--gcc/config/alpha/t-linux2
-rw-r--r--gcc/config/alpha/vms-tramp.asm22
-rw-r--r--gcc/config/alpha/vms.h244
-rw-r--r--gcc/config/alpha/xm-alpha.h8
-rw-r--r--gcc/config/alpha/xm-vms.h20
-rw-r--r--gcc/config/arc/arc.c2212
-rw-r--r--gcc/config/arc/arc.h1643
-rw-r--r--gcc/config/arc/arc.md1630
-rw-r--r--gcc/config/arc/initfini.c157
-rw-r--r--gcc/config/arc/lib1funcs.asm273
-rw-r--r--gcc/config/arc/t-arc72
-rw-r--r--gcc/config/arc/xm-arc.h47
-rw-r--r--gcc/config/arm/aof.h26
-rw-r--r--gcc/config/arm/aout.h15
-rw-r--r--gcc/config/arm/arm.c222
-rw-r--r--gcc/config/arm/arm.h85
-rw-r--r--gcc/config/arm/arm.md241
-rw-r--r--gcc/config/arm/coff.h2
-rw-r--r--gcc/config/arm/lib1funcs.asm19
-rw-r--r--gcc/config/arm/linux-gas.h3
-rw-r--r--gcc/config/arm/linux.h9
-rw-r--r--gcc/config/arm/netbsd.h23
-rw-r--r--gcc/config/arm/t-linux2
-rw-r--r--gcc/config/arm/t-netbsd4
-rw-r--r--gcc/config/arm/t-semi2
-rw-r--r--gcc/config/arm/x-riscix1
-rw-r--r--gcc/config/arm/xm-arm.h6
-rw-r--r--gcc/config/clipper/clipper.c42
-rw-r--r--gcc/config/clipper/clipper.md6
-rw-r--r--gcc/config/clipper/clix.h4
-rw-r--r--gcc/config/clipper/xm-clix.h9
-rw-r--r--gcc/config/convex/convex.c6
-rw-r--r--gcc/config/convex/x-convex2
-rw-r--r--gcc/config/convex/xm-convex.h7
-rw-r--r--gcc/config/dsp16xx/dsp16xx.c4
-rw-r--r--gcc/config/dsp16xx/dsp16xx.h6
-rw-r--r--gcc/config/dsp16xx/dsp16xx.md6
-rw-r--r--gcc/config/elxsi/elxsi.c4
-rw-r--r--gcc/config/float-i128.h96
-rw-r--r--gcc/config/fp-bit.c6
-rw-r--r--gcc/config/fx80/fx80.c4
-rw-r--r--gcc/config/gmicro/gmicro.c4
-rw-r--r--gcc/config/h8300/h8300.c6
-rw-r--r--gcc/config/h8300/h8300.h14
-rw-r--r--gcc/config/h8300/h8300.md5
-rw-r--r--gcc/config/h8300/t-h83002
-rw-r--r--gcc/config/i370/i370.c108
-rw-r--r--gcc/config/i370/i370.h106
-rw-r--r--gcc/config/i370/i370.md51
-rw-r--r--gcc/config/i370/xm-i370.h6
-rw-r--r--gcc/config/i386/bsd386.h8
-rw-r--r--gcc/config/i386/crtdll.h33
-rw-r--r--gcc/config/i386/cygwin32.h36
-rw-r--r--gcc/config/i386/dgux.c5
-rw-r--r--gcc/config/i386/dgux.h26
-rw-r--r--gcc/config/i386/freebsd-elf.h2
-rw-r--r--gcc/config/i386/freebsd.h8
-rw-r--r--gcc/config/i386/gmon-sol2.c27
-rw-r--r--gcc/config/i386/go32.h9
-rw-r--r--gcc/config/i386/i386.c1790
-rw-r--r--gcc/config/i386/i386.h24
-rw-r--r--gcc/config/i386/i386.md421
-rw-r--r--gcc/config/i386/isc.h4
-rw-r--r--gcc/config/i386/linux-aout.h9
-rw-r--r--gcc/config/i386/linux-oldld.h10
-rw-r--r--gcc/config/i386/linux.h6
-rw-r--r--gcc/config/i386/mingw32.h56
-rw-r--r--gcc/config/i386/rtems.h7
-rw-r--r--gcc/config/i386/sco5.h111
-rw-r--r--gcc/config/i386/sol2-c1.asm4
-rw-r--r--gcc/config/i386/sol2-gc1.asm2
-rw-r--r--gcc/config/i386/sol2.h17
-rw-r--r--gcc/config/i386/sol2dbg.h11
-rw-r--r--gcc/config/i386/t-freebsd3
-rw-r--r--gcc/config/i386/t-sco597
-rw-r--r--gcc/config/i386/t-sol21
-rw-r--r--gcc/config/i386/winnt.c4
-rw-r--r--gcc/config/i386/x-dgux2
-rw-r--r--gcc/config/i386/x-osfrose1
-rw-r--r--gcc/config/i386/x-sco55
-rw-r--r--gcc/config/i386/xm-aix.h8
-rw-r--r--gcc/config/i386/xm-cygwin32.h3
-rw-r--r--gcc/config/i386/xm-dos.h6
-rw-r--r--gcc/config/i386/xm-go32.h4
-rw-r--r--gcc/config/i386/xm-mingw32.h19
-rw-r--r--gcc/config/i386/xm-os2.h28
-rw-r--r--gcc/config/i386/xm-osf.h10
-rw-r--r--gcc/config/i386/xm-sco5.h10
-rw-r--r--gcc/config/i860/fx2800.h4
-rw-r--r--gcc/config/i860/i860.c10
-rw-r--r--gcc/config/i860/i860.h6
-rw-r--r--gcc/config/i860/i860.md17
-rw-r--r--gcc/config/i960/i960.c16
-rw-r--r--gcc/config/i960/i960.h2
-rw-r--r--gcc/config/i960/i960.md24
-rw-r--r--gcc/config/i960/rtems.h7
-rw-r--r--gcc/config/i960/t-vxworks9602
-rw-r--r--gcc/config/linux-aout.h6
-rw-r--r--gcc/config/linux.h31
-rw-r--r--gcc/config/m32r/m32r.c6
-rw-r--r--gcc/config/m32r/m32r.h12
-rw-r--r--gcc/config/m32r/m32r.md12
-rw-r--r--gcc/config/m68k/a-ux.h10
-rw-r--r--gcc/config/m68k/auxas.h4
-rw-r--r--gcc/config/m68k/linux-aout.h4
-rw-r--r--gcc/config/m68k/linux.h7
-rw-r--r--gcc/config/m68k/m68k.c100
-rw-r--r--gcc/config/m68k/m68k.h85
-rw-r--r--gcc/config/m68k/m68k.md137
-rw-r--r--gcc/config/m68k/m68kemb.h2
-rw-r--r--gcc/config/m68k/mot3300-crt0.S27
-rw-r--r--gcc/config/m68k/mot3300.h45
-rw-r--r--gcc/config/m68k/mot3300Mcrt0.S47
-rw-r--r--gcc/config/m68k/next.h2
-rw-r--r--gcc/config/m68k/rtems.h6
-rw-r--r--gcc/config/m68k/sun2o4.h4
-rw-r--r--gcc/config/m68k/sun3mach.h2
-rw-r--r--gcc/config/m68k/sun3n3.h2
-rw-r--r--gcc/config/m68k/sun3o3.h2
-rw-r--r--gcc/config/m68k/t-linux2
-rw-r--r--gcc/config/m68k/t-linux-aout2
-rw-r--r--gcc/config/m68k/t-vxworks682
-rw-r--r--gcc/config/m68k/x-hp3bsd443
-rw-r--r--gcc/config/m68k/xm-3b1.h6
-rw-r--r--gcc/config/m68k/xm-atari.h2
-rw-r--r--gcc/config/m68k/xm-crds.h7
-rw-r--r--gcc/config/m68k/xm-mot3300.h17
-rw-r--r--gcc/config/m68k/xm-plexus.h7
-rw-r--r--gcc/config/m88k/dgux.h24
-rw-r--r--gcc/config/m88k/dolph.h13
-rw-r--r--gcc/config/m88k/luna.h4
-rw-r--r--gcc/config/m88k/m88k.c47
-rw-r--r--gcc/config/m88k/m88k.h7
-rw-r--r--gcc/config/m88k/sysv3.h13
-rw-r--r--gcc/config/m88k/x-dgux3
-rw-r--r--gcc/config/m88k/x-dguxbcs3
-rw-r--r--gcc/config/m88k/xm-m88k.h15
-rw-r--r--gcc/config/m88k/xm-sysv3.h6
-rw-r--r--gcc/config/mips/abi64.h5
-rw-r--r--gcc/config/mips/elf.h2
-rw-r--r--gcc/config/mips/iris5.h5
-rw-r--r--gcc/config/mips/iris5gas.h4
-rw-r--r--gcc/config/mips/iris6.h29
-rw-r--r--gcc/config/mips/mips.c167
-rw-r--r--gcc/config/mips/mips.h71
-rw-r--r--gcc/config/mips/mips.md170
-rw-r--r--gcc/config/mips/netbsd.h12
-rw-r--r--gcc/config/mips/news4.h6
-rw-r--r--gcc/config/mips/r3900.h71
-rw-r--r--gcc/config/mips/rtems64.h7
-rw-r--r--gcc/config/mips/ultrix.h12
-rw-r--r--gcc/config/mips/x-dec-osf11
-rw-r--r--gcc/config/mips/x-iris8
-rw-r--r--gcc/config/mips/x-iris38
-rw-r--r--gcc/config/mips/x-netbsd3
-rw-r--r--gcc/config/mips/x-osfrose1
-rw-r--r--gcc/config/mips/xm-iris5.h10
-rw-r--r--gcc/config/mips/xm-iris6.h10
-rw-r--r--gcc/config/mips/xm-mips.h8
-rw-r--r--gcc/config/mn10200/mn10200.c18
-rw-r--r--gcc/config/mn10200/mn10200.h23
-rw-r--r--gcc/config/mn10200/mn10200.md68
-rw-r--r--gcc/config/mn10200/t-mn102002
-rw-r--r--gcc/config/mn10300/mn10300.c110
-rw-r--r--gcc/config/mn10300/mn10300.h40
-rw-r--r--gcc/config/mn10300/mn10300.md24
-rw-r--r--gcc/config/msdos/top.sed4
-rw-r--r--gcc/config/netbsd.h10
-rw-r--r--gcc/config/nextstep.h61
-rw-r--r--gcc/config/ns32k/ns32k.c4
-rw-r--r--gcc/config/pa/lib1funcs.asm8
-rw-r--r--gcc/config/pa/lib2funcs.asm8
-rw-r--r--gcc/config/pa/pa-hpux10.h4
-rw-r--r--gcc/config/pa/pa-hpux9.h4
-rw-r--r--gcc/config/pa/pa-pro-end.h4
-rw-r--r--gcc/config/pa/pa.c261
-rw-r--r--gcc/config/pa/pa.h9
-rw-r--r--gcc/config/pa/pa.md74
-rw-r--r--gcc/config/pa/rtems.h4
-rw-r--r--gcc/config/pa/x-pa2
-rw-r--r--gcc/config/pa/xm-pa.h3
-rw-r--r--gcc/config/pa/xm-pahpux.h9
-rw-r--r--gcc/config/pa/xm-papro.h3
-rw-r--r--gcc/config/pdp11/pdp11.c6
-rw-r--r--gcc/config/pdp11/pdp11.md24
-rw-r--r--gcc/config/ptx4.h10
-rw-r--r--gcc/config/pyr/pyr.c4
-rw-r--r--gcc/config/pyr/pyr.md6
-rw-r--r--gcc/config/romp/romp.c6
-rw-r--r--gcc/config/rs6000/cygwin32.h5
-rw-r--r--gcc/config/rs6000/linux.h9
-rw-r--r--gcc/config/rs6000/rs6000.c144
-rw-r--r--gcc/config/rs6000/rs6000.h43
-rw-r--r--gcc/config/rs6000/rs6000.md325
-rw-r--r--gcc/config/rs6000/rtems.h3
-rw-r--r--gcc/config/rs6000/sol2.h13
-rw-r--r--gcc/config/rs6000/sysv4.h125
-rw-r--r--gcc/config/rs6000/t-ppccomm4
-rw-r--r--gcc/config/rs6000/t-ppcos3
-rw-r--r--gcc/config/rs6000/tramp.asm8
-rw-r--r--gcc/config/rs6000/win-nt.h4
-rw-r--r--gcc/config/rs6000/x-aix312
-rw-r--r--gcc/config/rs6000/x-rs60001
-rw-r--r--gcc/config/rs6000/xm-cygwin32.h5
-rw-r--r--gcc/config/rs6000/xm-rs6000.h11
-rw-r--r--gcc/config/rs6000/xm-sysv4.h10
-rw-r--r--gcc/config/sh/elf.h49
-rw-r--r--gcc/config/sh/lib1funcs.asm452
-rw-r--r--gcc/config/sh/rtems.h28
-rw-r--r--gcc/config/sh/sh.c1763
-rw-r--r--gcc/config/sh/sh.h505
-rw-r--r--gcc/config/sh/sh.md1119
-rw-r--r--gcc/config/sh/xm-sh.h6
-rw-r--r--gcc/config/sparc/elf.h42
-rw-r--r--gcc/config/sparc/linux-aout.h27
-rw-r--r--gcc/config/sparc/linux.h49
-rw-r--r--gcc/config/sparc/linux64.h232
-rw-r--r--gcc/config/sparc/rtems.h7
-rw-r--r--gcc/config/sparc/sol2-sld.h11
-rw-r--r--gcc/config/sparc/sol2.h35
-rw-r--r--gcc/config/sparc/sp64-aout.h18
-rw-r--r--gcc/config/sparc/sp64-elf.h59
-rw-r--r--gcc/config/sparc/sparc.c1465
-rw-r--r--gcc/config/sparc/sparc.h925
-rw-r--r--gcc/config/sparc/sparc.md252
-rw-r--r--gcc/config/sparc/splet.h8
-rw-r--r--gcc/config/sparc/sun4gas.h27
-rw-r--r--gcc/config/sparc/sun4o3.h2
-rw-r--r--gcc/config/sparc/sunos4.h3
-rw-r--r--gcc/config/sparc/sysv4.h76
-rw-r--r--gcc/config/sparc/t-elf39
-rw-r--r--gcc/config/sparc/t-linux2
-rw-r--r--gcc/config/sparc/t-sp641
-rw-r--r--gcc/config/sparc/t-sparcbare2
-rw-r--r--gcc/config/sparc/t-vxsparc2
-rw-r--r--gcc/config/sparc/xm-linux.h11
-rw-r--r--gcc/config/sparc/xm-sol2.h6
-rw-r--r--gcc/config/sparc/xm-sp64.h25
-rw-r--r--gcc/config/sparc/xm-sparc.h4
-rw-r--r--gcc/config/spur/spur.c3
-rw-r--r--gcc/config/svr4.h12
-rw-r--r--gcc/config/t-svr43
-rw-r--r--gcc/config/tahoe/tahoe.c7
-rw-r--r--gcc/config/tahoe/tahoe.md6
-rw-r--r--gcc/config/v850/lib1funcs.asm1269
-rw-r--r--gcc/config/v850/t-v85052
-rw-r--r--gcc/config/v850/v850.c2284
-rw-r--r--gcc/config/v850/v850.h1475
-rw-r--r--gcc/config/v850/v850.md1273
-rw-r--r--gcc/config/v850/xm-v850.h49
-rw-r--r--gcc/config/vax/ultrix.h3
-rw-r--r--gcc/config/vax/vax.c2
-rw-r--r--gcc/config/vax/vax.h2
-rw-r--r--gcc/config/vax/vax.md13
-rw-r--r--gcc/config/vax/vms.h16
-rw-r--r--gcc/config/vax/xm-vms.h27
-rw-r--r--gcc/config/we32k/we32k.c4
-rw-r--r--gcc/config/winnt/config-nt.sed2
-rw-r--r--gcc/config/winnt/win-nt.h6
-rw-r--r--gcc/config/winnt/xm-winnt.h8
-rw-r--r--gcc/config/xm-gnu.h1
-rw-r--r--gcc/config/xm-std32.h34
-rw-r--r--gcc/configure.in536
-rw-r--r--gcc/configure.lang15
-rw-r--r--gcc/convert.c5
-rw-r--r--gcc/cp/ChangeLog10734
-rw-r--r--gcc/cp/ChangeLog.19451
-rw-r--r--gcc/cp/Make-lang.in42
-rw-r--r--gcc/cp/Makefile.in64
-rw-r--r--gcc/cp/NEWS189
-rw-r--r--gcc/cp/call.c842
-rw-r--r--gcc/cp/class.c403
-rw-r--r--gcc/cp/class.h2
-rw-r--r--gcc/cp/config-lang.in4
-rw-r--r--gcc/cp/cp-tree.def10
-rw-r--r--gcc/cp/cp-tree.h135
-rw-r--r--gcc/cp/cvt.c42
-rw-r--r--gcc/cp/decl.c492
-rw-r--r--gcc/cp/decl2.c336
-rw-r--r--gcc/cp/error.c229
-rw-r--r--gcc/cp/except.c579
-rw-r--r--gcc/cp/exception.cc112
-rw-r--r--gcc/cp/expr.c10
-rw-r--r--gcc/cp/friend.c32
-rw-r--r--gcc/cp/g++FAQ.texi2158
-rw-r--r--gcc/cp/g++spec.c31
-rw-r--r--gcc/cp/gxxint.texi93
-rw-r--r--gcc/cp/init.c253
-rw-r--r--gcc/cp/input.c22
-rw-r--r--gcc/cp/lang-options.h9
-rw-r--r--gcc/cp/lang-specs.h2
-rw-r--r--gcc/cp/lex.c263
-rw-r--r--gcc/cp/lex.h5
-rw-r--r--gcc/cp/method.c356
-rw-r--r--gcc/cp/parse.y372
-rw-r--r--gcc/cp/pt.c1504
-rw-r--r--gcc/cp/repo.c28
-rw-r--r--gcc/cp/rtti.c59
-rw-r--r--gcc/cp/search.c130
-rw-r--r--gcc/cp/sig.c18
-rw-r--r--gcc/cp/spew.c17
-rw-r--r--gcc/cp/tinfo2.cc12
-rw-r--r--gcc/cp/tree.c86
-rw-r--r--gcc/cp/typeck.c387
-rw-r--r--gcc/cp/typeck2.c18
-rw-r--r--gcc/cp/xref.c51
-rw-r--r--gcc/cplus-dem.c361
-rw-r--r--gcc/cpp.texi83
-rw-r--r--gcc/cppexp.c45
-rw-r--r--gcc/cpplib.c519
-rw-r--r--gcc/cpplib.h14
-rw-r--r--gcc/cppmain.c8
-rw-r--r--gcc/crtstuff.c90
-rw-r--r--gcc/cse.c162
-rw-r--r--gcc/dbxout.c12
-rw-r--r--gcc/defaults.h4
-rw-r--r--gcc/dwarf2.h10
-rw-r--r--gcc/dwarf2out.c851
-rw-r--r--gcc/dwarfout.c160
-rw-r--r--gcc/emit-rtl.c58
-rw-r--r--gcc/enquire.c141
-rw-r--r--gcc/except.c544
-rw-r--r--gcc/except.h30
-rw-r--r--gcc/explow.c67
-rw-r--r--gcc/expmed.c21
-rw-r--r--gcc/expr.c1015
-rw-r--r--gcc/expr.h42
-rw-r--r--gcc/extend.texi261
-rw-r--r--gcc/final.c92
-rw-r--r--gcc/fix-header.c26
-rw-r--r--gcc/fixinc.ptx4
-rwxr-xr-xgcc/fixinc.svr41
-rwxr-xr-xgcc/fixinc.wrap53
-rwxr-xr-xgcc/fixincludes135
-rwxr-xr-xgcc/fixproto13
-rw-r--r--gcc/flags.h10
-rw-r--r--gcc/floatlib.c2
-rw-r--r--gcc/flow.c235
-rw-r--r--gcc/fold-const.c580
-rw-r--r--gcc/frame.c605
-rw-r--r--gcc/frame.h56
-rw-r--r--gcc/function.c583
-rw-r--r--gcc/function.h25
-rw-r--r--gcc/gansidecl.h39
-rw-r--r--gcc/gbl-ctors.h4
-rw-r--r--gcc/gcc.14175
-rw-r--r--gcc/gcc.c388
-rw-r--r--gcc/gcc.hlp403
-rw-r--r--gcc/gcc.texi4785
-rw-r--r--gcc/gcov.c36
-rw-r--r--gcc/genattrtab.c86
-rw-r--r--gcc/genconfig.c6
-rw-r--r--gcc/genemit.c4
-rw-r--r--gcc/genextract.c6
-rw-r--r--gcc/genmultilib4
-rw-r--r--gcc/genopinit.c3
-rw-r--r--gcc/genoutput.c7
-rw-r--r--gcc/genpeep.c7
-rw-r--r--gcc/genrecog.c10
-rw-r--r--gcc/getopt.c23
-rw-r--r--gcc/getopt.h2
-rw-r--r--gcc/getpwd.c13
-rw-r--r--gcc/ginclude/ppc-asm.h2
-rw-r--r--gcc/ginclude/stdarg.h10
-rw-r--r--gcc/ginclude/va-arc.h111
-rw-r--r--gcc/ginclude/va-mips.h3
-rw-r--r--gcc/ginclude/va-sh.h124
-rw-r--r--gcc/ginclude/va-sparc.h111
-rw-r--r--gcc/ginclude/va-v850.h34
-rw-r--r--gcc/ginclude/varargs.h10
-rw-r--r--gcc/glimits.h8
-rw-r--r--gcc/global.c15
-rw-r--r--gcc/gstab.h17
-rw-r--r--gcc/halfpic.c4
-rw-r--r--gcc/halfpic.h26
-rw-r--r--gcc/input.h4
-rw-r--r--gcc/install.texi221
-rw-r--r--gcc/install1.texi15
-rw-r--r--gcc/integrate.c204
-rw-r--r--gcc/integrate.h8
-rw-r--r--gcc/intl/intl-compat.c76
-rwxr-xr-xgcc/intl/linux-msg.sed100
-rwxr-xr-xgcc/intl/po2tbl.sed.in102
-rwxr-xr-xgcc/intl/xopen-msg.sed104
-rw-r--r--gcc/invoke.texi969
-rw-r--r--gcc/jump.c115
-rw-r--r--gcc/libgcc2.c640
-rwxr-xr-xgcc/listing6
-rw-r--r--gcc/local-alloc.c80
-rw-r--r--gcc/longlong.h37
-rw-r--r--gcc/loop.c125
-rw-r--r--gcc/machmode.def4
-rw-r--r--gcc/make-cc1.com15
-rw-r--r--gcc/make-cccp.com8
-rw-r--r--gcc/make-gcc.com75
-rw-r--r--gcc/make-l2.com91
-rw-r--r--gcc/md.texi63
-rw-r--r--gcc/mips-tdump.c4
-rw-r--r--gcc/mips-tfile.c37
-rw-r--r--gcc/objc/Make-lang.in104
-rw-r--r--gcc/objc/Object.m2
-rw-r--r--gcc/objc/THREADS10
-rw-r--r--gcc/objc/archive.c30
-rw-r--r--gcc/objc/class.c1
-rw-r--r--gcc/objc/config-lang.in4
-rw-r--r--gcc/objc/encoding.c20
-rw-r--r--gcc/objc/init.c4
-rw-r--r--gcc/objc/misc.c2
-rw-r--r--gcc/objc/objc-act.c164
-rw-r--r--gcc/objc/objc-api.h2
-rw-r--r--gcc/objc/runtime.h13
-rw-r--r--gcc/objc/selector.c14
-rw-r--r--gcc/objc/sendmsg.c34
-rw-r--r--gcc/objc/thr-decosf1.c4
-rw-r--r--gcc/objc/thr-irix.c2
-rw-r--r--gcc/objc/thr-mach.c4
-rw-r--r--gcc/objc/thr-os2.c2
-rw-r--r--gcc/objc/thr-posix.c59
-rw-r--r--gcc/objc/thr-pthreads.c4
-rw-r--r--gcc/objc/thr-solaris.c2
-rw-r--r--gcc/objc/thr-win32.c2
-rw-r--r--gcc/obstack.c10
-rw-r--r--gcc/obstack.h176
-rw-r--r--gcc/optabs.c42
-rw-r--r--gcc/output.h19
-rwxr-xr-xgcc/patch-apollo-includes69
-rw-r--r--gcc/pexecute.c51
-rw-r--r--gcc/prefix.c310
-rw-r--r--gcc/print-rtl.c39
-rw-r--r--gcc/print-tree.c11
-rw-r--r--gcc/profile.c39
-rw-r--r--gcc/protoize.c138
-rw-r--r--gcc/pself.c1
-rw-r--r--gcc/pself1.c1
-rw-r--r--gcc/pself2.c1
-rw-r--r--gcc/pself3.c1
-rw-r--r--gcc/real.c10
-rw-r--r--gcc/real.h22
-rw-r--r--gcc/recog.c28
-rw-r--r--gcc/recog.h68
-rw-r--r--gcc/reg-stack.c93
-rw-r--r--gcc/regclass.c49
-rw-r--r--gcc/regs.h4
-rw-r--r--gcc/reload.c273
-rw-r--r--gcc/reload.h7
-rw-r--r--gcc/reload1.c504
-rw-r--r--gcc/reorg.c49
-rw-r--r--gcc/rtl.c20
-rw-r--r--gcc/rtl.def17
-rw-r--r--gcc/rtl.h85
-rw-r--r--gcc/rtl.texi2850
-rw-r--r--gcc/rtlanal.c188
-rw-r--r--gcc/scan-decls.c12
-rw-r--r--gcc/sched.c129
-rw-r--r--gcc/sdbout.c20
-rw-r--r--gcc/stmt.c180
-rw-r--r--gcc/stor-layout.c47
-rw-r--r--gcc/stupid.c9
-rw-r--r--gcc/texinfo.tex4935
-rw-r--r--gcc/tm.texi497
-rw-r--r--gcc/toplev.c255
-rw-r--r--gcc/tree.c383
-rw-r--r--gcc/tree.def6
-rw-r--r--gcc/tree.h84
-rw-r--r--gcc/unroll.c113
-rw-r--r--gcc/varasm.c202
-rw-r--r--gcc/vmsconfig.com49
-rw-r--r--gcc/xcoffout.c9
526 files changed, 185143 insertions, 27247 deletions
diff --git a/gcc/COPYING b/gcc/COPYING
new file mode 100644
index 00000000000..60549be514a
--- /dev/null
+++ b/gcc/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/gcc/COPYING.LIB b/gcc/COPYING.LIB
new file mode 100644
index 00000000000..161a3d1d47b
--- /dev/null
+++ b/gcc/COPYING.LIB
@@ -0,0 +1,482 @@
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL. It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it. You can use it for
+your libraries, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library. If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software. To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+ Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs. This
+license, the GNU Library General Public License, applies to certain
+designated libraries. This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+ The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it. Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program. However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+ Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries. We
+concluded that weaker conditions might promote sharing better.
+
+ However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves. This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them. (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.) The hope is that this
+will lead to faster development of free libraries.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+ Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License"). Each licensee is
+addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ c) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ d) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ MA 02111-1307, USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
new file mode 100644
index 00000000000..bbd60c7043d
--- /dev/null
+++ b/gcc/ChangeLog
@@ -0,0 +1,15188 @@
+Mon Mar 2 08:06:58 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * Version 2.8.1 released.
+
+ * Makefile.in (mostlyclean): Remove duplicate deletion of temp
+ files. Delete more stamp files and [df]p-bit.c
+ (clean): Don't delete stamp files here.
+ (VERSION_DEP): New variable.
+ (distdir-finish): Pass a value of null for it.
+ (version.c): Use it.
+ Avoid broken pipe with cvs log.
+
+ * objc/Make-lang.in (objc/runtime-info.h): Rename emptyfile to
+ tmp-runtime and delete at end.
+
+Sun Mar 1 05:50:25 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * tree.c (build_reference_type): Handle obstacks like
+ build_pointer_type.
+
+ * Makefile.in (tmp-gcc.xtar): Renamed from gcc.xtar.
+ (gcc.xtar.gz): Deleted; merged with `dist'.
+ (diff): Create gcc-$(oldversion)-$(version).diff.
+ (distdir): Depend on distdir-cvs.
+ (distdir-cvs): New rule.
+ (distdir-start): Depend on version.c and TAGS.
+ (TAGS): Use tmp-tags instead of temp.
+ (dist): Create gcc-$(version).tar.gz.
+
+ * varasm.c (compare_constant_1): Fix typo in previous change.
+
+ * objc/Make-lang.in (objc-distdir): Properly rebuild objc-parse.c.
+
+Sat Feb 28 16:58:08 1998 Tristan Gingold <gingold@rossini.enst.fr>
+
+ * stmt.c (expand_decl): If -fcheck-memory-usage, put vars in memory.
+ * expr.c (get_memory_usage_from_modifier): Convert
+ EXPAND_{CONST_ADDRESS, INITIALIZER} to MEMORY_USE_DONT.
+
+Sat Feb 28 08:13:43 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * i860/fx2800.h (DATA_ALIGNMENT): Use POINTER_TYPE_P.
+ * m68k/a-ux.h (FUNCTION_VALUE): Likewise.
+ * expr.c (get_pointer_alignment, compare, do_store_flag): Likewise.
+ (expand_builtin): Likewise.
+ * fold-const.c (force_fit_type, fold_convert, fold): Likewise.
+ * function.c (assign_parms): Likewise.
+ * integrate.c (expand_inline_function): Likewise.
+ * sdbout.c (sdbout_field_types): Likewise.
+ * tree.c (integer_pow2p, tree_log2, valid_machine_attribute): Likewise.
+ * stmt.c (expand_decl): Likewise.
+ ({,bc_}expand_decl_init): Also test for REFERENCE_TYPE.
+
+ * configure.in (version_dep): New variable; if srcdir is CVS working
+ directory, set to ChangeLog.
+ (version): Supply default if no version.c.
+ * Makefile.in (version.c): New rule.
+
+ * gcc.c (snapshot_warning): New function.
+ (main): Call it for snapshots.
+
+ * dwarf2out.c (expand_builtin_dwarf_reg_size): If reg_raw_mode
+ not valid for reg, use last size. Also refine range assertion.
+
+Sat Feb 28 05:04:47 1998 Michael P. Hayes <michaelh@ongaonga.chch.cri.nz>
+
+ * enquire.c (cprop): Don't perform exhaustive search for char_min
+ and char_max when bits_per_byte > 16.
+
+Thu Feb 26 15:12:03 1998 Christopher Taylor <cit@ckshq.com>
+
+ * fixincludes: Avoid using '0-~' in egrep.
+
+Thu Feb 26 08:04:05 1998 Tristan Gingold <gingold@messiaen.enst.fr>
+
+ * function.c (assign_parms): Call 'chkr_set_right' when DECL_RTL
+ is stack_parm.
+ * expr.c (get_memory_usage_from_modifier): Convert
+ EXPAND_{SUM, CONST_ADDRESS, INITIALIZER} to MEMORY_USE_RO.
+
+Thu Feb 26 07:33:53 1998 Paul Eggert <eggert@twinsun.com>
+
+ * c-lex.c (yylex): Don't munge errno before using it.
+ * cccp.c (error_from_errno, perror_with_name): Likewise.
+ * cpplib.c (cpp_error_from_errno): Likewise.
+ * gcc.c (pfatal_pexecute): Likewise.
+ * protoize.c (safe_write, find_file, process_aux_info_file): Likewise.
+ (rename_c_file, edit_file): Likewise.
+
+ * c-lex.c (yylex): Remove unused variable exceeds_double.
+
+Thu Feb 26 07:05:14 1998 Michael P. Hayes <michaelh@ongaonga.chch.cri.nz>
+
+ * reorg.c (fill_slots_from_thread): Don't steal delay list from target
+ if condition code of jump conflicts with opposite_needed.
+
+Thu Feb 26 06:45:23 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * Makefile.in (distdir-start): Don't copy CVS subdirectory of config.
+
+ * varasm.c ({compare,record}_constant_1, case CONSTRUCTOR):
+ Handle the case when we have TREE_PURPOSE values.
+
+Thu Feb 26 05:59:01 1998 Philippe De Muyter <phdm@macqel.be>
+
+ * fixincludes (sys/limits.h): Fix a nested comment problem with
+ HUGE_VAL definition on sysV68 R3V7.1.
+
+Wed Feb 25 21:09:38 1998 Philippe De Muyter <phdm@macqel.be>
+
+ * toplev.c (TICKS_PER_SECOND): Renamed from CLOCKS_PER_SECOND.
+
+Wed Feb 25 20:50:08 1998 Michael P. Hayes <michaelh@ongaonga.chch.cri.nz>
+
+ * reorg.c (fill_slots_from_thread): Mark resources referenced in
+ opposite_needed thread. Return delay_list even when cannot get
+ any more delay insns from end of subroutine.
+
+Wed Feb 25 19:50:01 1998 Mikael Pettersson <Mikael.Pettersson@sophia.inria.fr>
+
+ * gcc.c (lookup_compiler): Remove redundant test.
+
+Wed Feb 25 07:24:22 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * vax.md (call insns): Second operand to CALL rtl is SImode.
+
+ * configure.in (i[34567]86-*-mingw32): Support msv and crt suffix.
+ * i386/crtdll.h: New file.
+
+ * sparc.c (pic_setup_code): If -O0, write USE of pic_offset_table_rtx.
+
+ * expr.c (safe_from_p): Add new arg, TOP_P; all callers changed.
+
+Sat Feb 21 07:02:39 1998 Jim Wilson <wilson@cygnus.com>
+
+ * mips/iris5.h (DWARF2_UNWIND_INFO): Define to 0.
+ * mips/iris5gas.h (DWARF2_UNWIND_INFO): Define to 1.
+
+Fri Feb 20 08:27:46 1998 Paul Eggert <eggert@twinsun.com>
+
+ * sparc/sol2-sld.h: New file.
+ * configure.in (sparc-*-solaris2*): Use it when using system linker.
+ * toplev.c (main): Don't default to DWARF2_DEBUG with -ggdb
+ if LINKER_DOES_NOT_WORK_WITH_DWARF2 is defined.
+
+Fri Feb 20 08:21:49 1998 H.J. Lu (hjl@gnu.org)
+
+ * alpha/elf.h (STARTFILE_SPEC, ENDFILE_SPEC): Support shared library.
+ (LIB_SPEC, DEFAULT_VTABLE_THUNKS): Defined #ifndef USE_GNULIBC_1.
+ * sparc/linux.h (DEFAULT_VTABLE_THUNKS): Likewise.
+ (LIB_SPEC): Add -lc for -shared #ifndef USE_GNULIBC_1.
+ * linux.h (LIB_SPEC): Likewise.
+ * sparc/linux64.h (LIB_SPEC): Likewise; also updated for glibc 2.
+ (LIBGCC_SPEC): Removed.
+ (CPP_SUBTARGET_SPEC): Add %{pthread:-D_REENTRANT}.
+
+Fri Feb 20 05:22:12 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * Makefile.in (distdir-start): Add dependence on bi-parser.[ch].
+
+Thu Feb 19 18:07:11 1998 Jim Wilson <wilson@cygnus.com>
+
+ * m68k.h (TARGET_SWITCHES): For 68000, 68302, subtract MASK_68881.
+ For 68303, 68332, cpu32, subtract MASK_68040_ONLY.
+
+Wed Feb 18 09:37:29 1998 Paul Eggert <eggert@twinsun.com>
+
+ * fixincludes (stdlib.h): Do not double-wrap the size_t typedef.
+
+Wed Feb 18 07:32:11 1998 Jim Wilson <wilson@cygnus.com>
+
+ * i960.c (emit_move_sequence): Handle unaligned stores to pseudos.
+ * i960.md (store_unaligned_[dt]i_reg): Handle register dest.
+ (store_unaligned_ti_reg): Likewise.
+
+ * m68k.h (MACHINE_STATE_{SAVE,RESTORE} [MOTOROLA]): Add %# and %/;
+ add : to make them into extended asms.
+
+Wed Feb 18 07:08:05 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * reg-stack.c (compare_for_stack_reg): Only handle FP conditional
+ move as next insn specially.
+
+ * reload.c (find_reloads): Always convert address reload for
+ non-reloaded operand to RELOAD_FOR_OPERAND_ADDRESS.
+
+ * emit-rtl.c (hard-reg-set.h): Include.
+ (get_lowpart_common): Don't make new REG for hard reg in a
+ class that cannot change size.
+ * Makefile.in (emit-rtl.o): Depend on hard-reg-set.h.
+
+Sat Feb 14 09:59:00 1998 Richard Earnshaw (rearnsha@arm.com)
+
+ * arm.md (movsfcc): Also validate operands[3] for hard float.
+ (movdfcc): Only accept fpu_add_operand for operands[3].8
+
+Sat Feb 14 09:32:34 1998 Jim Wilson <wilson@cygnus.com>
+
+ * dwarf2out.c (expand_builtin_dwarf_reg_size): New variable mode.
+ Convert CCmode to word_mode before calling GET_MODE_SIZE.
+
+Sat Feb 14 09:27:42 1998 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.h (MY_ISCOFF): Check for U803XTOCMAGIC.
+
+Sat Feb 14 08:29:43 1998 Arvind Sankar <arvind@cse.iitb.ernet.in>
+
+ * t-svr4 (TARGET_LIBGCC_CFLAGS): New definition.
+
+Sat Feb 14 07:45:16 1998 Ken Rose (rose@acm.org)
+
+ * reorg.c (fill_slots_from_thread): New parameter, delay_list.
+ All callers changed.
+
+Sat Feb 14 07:14:02 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * reload.c (debug_reload): Properly output insn codes.
+
+ * pa.c (emit_move_sequence): If in reload, call find_replacement.
+
+ * gansidecl.h (bcopy, bzero, {,r}index): Don't define if IN_LIBGCC2.
+
+ * combine.c (distribute_notes, case REG_DEAD): When seeing if place
+ to put new note sets register, use reg_bitfield_target_p, as in
+ original code.
+
+ * gcc.c (process_command): If file is for linker, set lang to "*".
+ (lookup_compiler): Return 0 for language of "*".
+
+ * sched.c (attach_deaths, case SUBREG): Fix error in last change.
+
+ * i386.md (mov[sdx]fcc): Disable for now.
+ (mov[sd]fcc_1): Add earlyclobber for output on last alternative.
+
+Sat Feb 14 06:42:50 1998 Jason Merrill <jason@yorick.cygnus.com>
+
+ * except.c (get_dynamic_handler_chain): Only make call once per func.
+ (expand_fixup_region_{start,end}): New functions.
+ (expand_eh_region_start_tree): Store cleanup into finalization here.
+ * stmt.c (expand_cleanups): Use new functions to protect fixups.
+
+ * except.c (get_dynamic_handler_chain): Build up a FUNCTION_DECL.
+ * optabs.c (init_optabs): Don't init get_dynamic_handler_chain_libfunc.
+ * expr.h (get_dynamic_handler_chain_libfunc): Deleted.
+
+Sat Feb 14 06:34:41 1998 Peter Lawrence <Peter.Lawrence@Eng.Sun.COM>
+
+ * optabs.c (emit_conditional_move): Don't reverse condition for FP.
+
+Fri Feb 13 07:22:04 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * Makefile.in (mostlyclean): Only use s-* convention for stamp
+ files in main dir.
+
+ * configure.in: Add support for i786 (Pentium II); same as i686.
+
+Thu Feb 12 20:16:35 1998 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.md: Replace gen_rtx (CONST_INT,...) with GEN_INT.
+
+Thu Feb 12 10:08:14 1998 John Hassey <hassey@dg-rtp.dg.com>
+
+ * configure.in (i[3456]86-dg-dgux*): Don't need fixincludes.
+
+Thu Feb 12 07:27:39 1998 Mumit Khan <khan@xraylith.wisc.edu>
+
+ * i386/cygwin32.h (NO_IMPLICIT_EXTERN_C): Define.
+ about system headers.
+ (LIB_SPEC): Add -ladvapi32 -lshell32.
+
+Thu Feb 12 07:19:31 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * expr.c (expand_assignment): Fix typo in checking OFFSET.
+
+ * gbl-ctors.h (atexit): Don't define unless needed.
+
+ * combine.c (distribute_notes): Completely check for note operand being
+ only partially set on potential note target; adjust what notes
+ we make in that case.
+
+ * i386/xm-go32.h (HAVE_{BCOPY,BZERO,INDEX,RINDEX}): Deleted.
+
+Wed Feb 11 08:53:27 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * calls.c (emit_call_1): Size args now HOST_WIDE_INT.
+ (expand_call): struct_value_size now HOST_WIDE_INT.
+
+Tue Feb 10 09:04:39 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * integrate.c (initialize_for_inline): Ensure DECL_INCOMING_RTL
+ is always copied.
+
+Tue Feb 10 06:10:49 1998 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (rescan): Fix bug with macro name appearing
+ immediately after L'x'.
+
+Mon Feb 9 20:45:32 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * c-common.c (format_char_info): Add new field zlen.
+ (print_char_table): Remove entry for 'Z' as a format character.
+ Initialize zlen field as appropriate.
+ (scan_char_table): Set zlen field to NULL in each entry.
+ (check_format_info): Recognize 'Z' as a length modifier, with a
+ warning in pedantic mode.
+ Avoid infinite loop when a repeated flag character is detected.
+
+Mon Feb 9 09:24:04 1998 Paul Eggert <eggert@twinsun.com>
+
+ * c-parse.in (primary): Minor wording fix in diagnostic.
+
+Mon Feb 9 07:50:19 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * c-decl.c (grokdeclarator): Remove warning on inline of varargs.
+
+ * reload.c (find_reloads): Check for const_to_mem case before
+ checking for invalid reload; use force_const_mem if no_input_reloads.
+
+ * function.c (push_function_context_to): Call init_emit last.
+
+ * protoize.c (my_link): Define as -1 in mingw32.
+ (link): Remove declaration.
+
+ * rs6000.c (setup_incoming_varargs): Always set rs6000_sysv_varargs_p.
+
+ * integrate.c (expand_inline_function): Clear label_map with bzero.
+
+ * unroll.c (copy_loop_body, case JUMP_INSN): Correct error in last
+ change: call single_set on COPY, not INSN.
+
+Sun Feb 8 08:07:37 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * msdos/top.sed, winnt/config-nt.sed: Change version number to 2.8.1.
+
+ * configure.in (i[3456]86-*-sco3.2v5*): Use cpio for headers.
+
+Sat Feb 7 07:32:46 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * i386/mingw32.h (LIBGCC_SPEC, STARTFILE_SPEC, MATH_LIBRARY):
+ Use msvcrt, not crtdll.
+
+Fri Feb 6 20:32:06 1998 Geert Bosch <bosch@gnat.com>
+
+ * i386/xm-os2.h (EMX, USG, BSTRING, HAVE_{PUTENV,VPRINTF,STRERROR}):
+ Define ifdef __EMX__.
+ (strcasecmp): Define to be stricmp if __EMX__.
+ (spawnv{,p}): Don't define if EMX.
+ (OBJECT_SUFFIX): Don't define if EMX.
+ (MKTEMP_EACH_FILE): Define.
+
+Fri Feb 6 16:37:29 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * objc/Make-lang.in (objc.stage1): Depend on stage1-start.
+ (objc.stage2, objc.stage3, objc.stage4): Likewise for the
+ respective stageN-start targets.
+ (objc/sendmsg.o): Depend on objc/runtime-info.h.
+
+Fri Feb 6 16:27:09 1998 Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE>
+
+ * stmt.c (expand_asm_operands): Properly treat asm statement
+ statements with no operands as volatile.
+
+Fri Feb 6 16:03:25 1998 Greg McGary <gkm@gnu.org>
+
+ * c-decl.c (pushdecl): Set DECL_ORIGINAL_TYPE once only.
+
+Fri Feb 6 15:57:36 1998 Mumit Khan <khan@xraylith.wisc.edu>
+
+ * i386/cygwin32.h (STRIP_NAME_ENCODING): New macro.
+
+Fri Feb 6 15:50:42 1998 Paul Eggert <eggert@twinsun.com>
+
+ * libgcc2.c (__floatdi[xtds]f): Round properly even when rounding
+ large negative integer to plus or minus infinity.
+
+Fri Feb 6 15:45:16 1998 Philippe De Muyter <phdm@macqel.be>
+
+ * sdbout.c (plain_type_1): Return T_DOUBLE, not T_VOID, for
+ long double #ifndef EXTENDED_SDB_BASIC_TYPES.
+
+Fri Feb 6 15:23:49 1998 John David Anglin <dave@hiauly1.hia.nrc.ca>
+
+ * vax/ultrix.h (HAVE_ATEXIT): Define.
+ * x-vax: File deleted.
+
+Fri Feb 6 14:34:19 1998 Douglas Rupp <rupp@gnat.com>
+
+ * gcc.c (process_command, case "-dumpversion"): Print spec_version.
+
+Fri Feb 6 11:01:13 1998 Josh Littlefield <josh@american.com>
+
+ * i386/gmon-sol2.c (internal_mcount): Do set-up when program starts
+ and install hook to do clean-up when it exits.
+ * i386/sol2-c1.asm (_mcount): Make a weak instead of global symbol.
+ * i386/sol2dbg.h (ASM_SPEC): Support Solaris bundled assembler's -V
+ argument; pass -s argument to assembler.
+
+Fri Feb 6 09:13:21 1998 Jim Wilson (wilson@cygnus.com)
+
+ * function.c (assign_parms): New variable named_arg, with value
+ depending on STRICT_ARGUMENT_NAMING. Use instead of ! last_named.
+
+ * crtstuff.c (__frame_dummy): New function for irix6.
+ (__do_global_ctors): Call __frame_dummy for irix6.
+ * mips/iris6.h (LINK_SPEC): Hide __frame_dummy too.
+
+Fri Feb 6 09:08:21 1998 Mike Stump <mrs@wrs.com>
+
+ * rtlanal.c (dead_or_set_regno_p): Ignore REG_DEAD notes after reload.
+ * genattrtab.c (reload_completed): Define.
+
+ * configure.in (i960-wrs-vxworks): Same as i960-wrs-vxworks5*.
+
+Fri Feb 6 08:47:38 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * Makefile.in (diff): Add INSTALL, configure, and config.in;
+ remove objc-*.
+ * objc/config-lang.in (diff_excludes): Add objc-parse.[cy].
+
+ * i386/xm-mingw32.h (link): Delete macro.
+
+ * alpha.c (output_prolog): Write out frame sizes as longs and
+ print too large sizes as zero.
+
+ * function.c (combine_temp_slots): No need to allocate and free rtx.
+ Don't do anything if too many slots in the list.
+ (put_var_into_stack): Don't use ADDRESSOF if not optimizing.
+
+ * function.c (purge_addressof_1): Force into mem if VOLATILE reference.
+
+ * calls.c (expand_call): Show VAR_DECL made for structure return
+ address is used; remove bogus set of MEM_IN_STRUCT_P.
+ * expr.c (expand_expr, case SAVE_EXPR, case TARGET_EXPR): Show used.
+ (expand_builtin, case BUILT_IN_LONGJMP): Show __dummy used.
+ * function.c (put_reg_into_stack): New arg USED_P; all callers changed.
+
+ * expr.c (expand_expr, case SAVE_EXPR): assign_temp with KEEP of 3.
+ * function.c (var_temp_slot_level): New variable.
+ (push_function_context_to, pop_function_context_from): Save/restore
+ it and target_temp_slot_level.
+ (assign_stack_temp): Implement KEEP of 3.
+ (push_temp_slots_for_block): New function.
+ (init_temp_slots): Initialize var_temp_slot_level.
+ * function.h (struct function, fields {var,target}_temp_slot_level):
+ New fields.
+ * stmt.c (expand_start_bindings): Call push_temp_slots_for_block.
+
+ * function.c (struct temp_slot): SIZE, BASE_OFF_SET, and FULL_SIZE
+ now HOST_WIDE_INT.
+ (assign_{,outer_}stack_local, assign_{,stack_}temp): Size arg is
+ now HOST_WIDE_INT.
+ (assign_stack_temp): Do size computations in HOST_WIDE_INT.
+ (fixup_var_refs_1, optimize_bit_field, instantiate_decls): Likewise.
+ (instantiate_virtual_regs_1, fix_lexical_address): Likewise.
+ * rtl.h (assign_stack_{local,temp}): Size arg is HOST_WIDE_INT.
+ (assign_temp): Likewise.
+ * expr.h (struct args_size): Field CONSTANT is now HOST_WIDE_INT.
+
+ * sched.c (attach_deaths, case REG): Don't check for REG_UNUSED.
+ (attach_deaths, case SUBREG, STRICT_LOW_PART, {ZERO,SIGN}_EXTRACT):
+ Don't pass set_p of 1 if partial assignment.
+
+ * tree.h (size_in_bytes): Returns HOST_WIDE_INT.
+ * tree.c (size_in_bytes): Likewise.
+ Tighen up logic some to avoid returning a bogus value instead of -1.
+
+ * expr.c (get_inner_reference, case ARRAY_EXPR): Make WITH_RECORD_EXPR
+ just for index.
+ (expand_expr, case PLACEHOLDER_EXPR): Refine search again; look
+ at each expression and look for pointer to type.
+
+ * expr.c (safe_from_p, case ADDR_EXPR): If TREE_STATIC, no trampoline.
+ (expand_expr, case ADDR_EXPR): Likewise.
+
+ * expr.c (emit_block_move): Use conservative range for movstr mode.
+
+ * configure.in: See if "cp -p" works if "ln -s" doesn't; else "cp".
+
+ * combine.c (try_combine.c): Pass elim_i2 and elim_i1 to
+ distribute_notes for i3dest_killed REG_DEAD note.
+
+ * configure.in (mips-dec-netbsd*): Remove bogus setting of prefix.
+
+ * c-decl.c (duplicate_decls): Set DECL_IGNORED_P in newdecl if
+ different bindings levels.
+
+ * configure.in: Test ln -s by symlinking gcc.c.
+
+ * configure.in (i[3456]86-dg-dgux): Add wildcard for version.
+
+ * crtstuff.c (__do_global_ctors_aux): Switch back to text section
+ in proper place.
+
+ * rtlanal.c (rtx_varies_p, case REG): pic_offset_table_rtx is fixed.
+ * genattrtab.c (pic_offset_table_rtx): Define (dummy).
+ * cse.c (set_nonvarying_address_components): Understand PIC refs.
+
+ * loop.c (strength_reduce): When placing increment for auto-inc
+ case, do comparison in loop order.
+
+ * i860.c (output_delayed_branch): Add missing arg to recog.
+ (output_delay_insn): Add missing arg to constrain_operands.
+
+ * configure.in: Truncate target after finished comparing it with host.
+
+ * i386.h (MAX_FIXED_MODE_SIZE): Delete.
+
+ * c-parse.in (expr_no_comma): Clarify undefined error.
+
+ * prefix.c (get_key_value): Don't default to PREFIX here.
+ (translate_name): Remove bogus addition of "$" if getenv fails;
+ clean up application of default value of PREFIX.
+
+ * fold-const.c (fold_convert): Call force_fit_type even if input
+ already overflows.
+
+Fri Feb 6 07:45:01 1998 Robert Hoehne <robert.hoehne@gmx.net>
+
+ * i386/xm-go32.h (HAVE_{BCOPY,BZERO,BCMP,RINDEX,INDEX}): Define.
+
+ * gcc.c (main): Treat paths starting with '$' or DOS drives
+ as absolute in standard_startfile_prefix.
+
+Thu Feb 5 21:07:12 1998 John David Anglin <dave@hiauly1.hia.nrc.ca>
+
+ * cpplib.c (IS_INCLUDE_DIRECTIVE_TYPE): Add casts from enum to int.
+ * cccp.c (IS_INCLUDE_DIRECTIVE_TYPE, handle_directive): Likewise.
+
+Thu Feb 5 19:00:44 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * expr.c (expand_expr, case CONSTRUCTOR): Correct shift count
+ when making signed bit field; use EXPAND_NORMAL, not 0.
+
+Thu Feb 5 17:42:43 1998 Manfred Hollstein <manfred@s-direktnet.de>
+
+ * libgcc2.c (__clear_insn_cache): On sysV68 enable the memctl
+ stuff only if MCT_TEXT is #define'd.
+
+Thu Feb 5 17:32:01 1998 Robert Hoehne <robert.hoehne@gmx.net>
+
+ * Makefile.in: Changed most stamp-* to s-*.
+
+Tue Feb 3 19:45:50 1998 James Hawtin <oolon@ankh.org>
+
+ * i386/sol2.h (STARTFILE_SPEC, LIB_SPEC): Update -pg files.
+ * configure.in (i[3456]86-*-solaris2*): Add gcrt1.o and gmon.o
+ to extra_parts.
+
+Tue Feb 3 17:28:48 1998 Christopher C Chimelis <chris@classnet.med.miami.edu>
+
+ * configure.in (alpha*-*-linux-gnu*): Add extra_parts for crtstuff.
+
+Tue Feb 3 17:18:19 1998 Richard Earnshaw <rearnsha@arm.com>
+
+ * arm.c (find_barrier): Fix one-too-many bug if fail to find barrier.
+
+ * arm.c (arm_reload_in_hi): Handle cases where the MEM is too
+ complex for a simple offset.
+
+Tue Feb 3 16:14:21 1998 Robert Hoehne <robert.hoehne@gmx.net>
+
+ * i386/xm-go32.h (EXECUTABLE_SUFFIX): Define.
+
+ * configure.in (i[3456]86-pc-msdosdjgpp*): New entry.
+
+Tue Feb 3 07:33:58 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * explow.c (probe_stack_range): Properly check for small
+ number of probes.
+
+ * gcc.c (process_command, case 'V'): Validate arg.
+
+ * configure.in (sbrk): Add check for needed declaration.
+ * acconfig.h (NEED_DECLARATION_SBRK): New entry.
+ * toplev.c (sbrk): Update declaration conditional.
+ * mips-tfile.c (sbrk, free): Likewise.
+
+ * sparc/sysv4.h (DBX_REGISTER_NUMBER): Remove abort.
+
+ * mips.c (mips_expand_prologue): Pass reg 25 to gen_loadgp.
+ * mips.md (loadgp): Add second operand for register number to add.
+ (builtin_setjmp_receiver): Pass new label and reg 31 to loadgp.
+
+ * toplev.c: Include insn-codes.h, insn-config.h, and recog.h.
+ (compile_file): Try to emit nop to separate gcc_compiled symbol.
+ * Makefile.in (toplev.o): Depends on insn-{codes,config}.h, recog.h.
+
+Tue Feb 3 06:58:46 1998 Mark Mitchell <mmitchell@usa.net>
+
+ * integrate.c (get_label_from_map): New function.
+ (expand_inline_function): Use it.
+ Initialize label_map to NULL_RTX instead of gen_label_rtx.
+ (copy_rtx_and_substitute): Use get_label_from_map.
+ * integrate.h (get_label_from_map): New function.
+ (set_label_from_map): New macro.
+ * unroll.c (unroll_loop, copy_loop_body): Use them.
+
+Mon Feb 2 16:33:01 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * i386.md (mov{si,hi,sf,df,xf}cc{,_1}): Remove cases with branches.
+
+ * rs6000/x-aix31 (INSTALL): Deleted.
+ * mips/x-dec-osf1, mips/x-osfrose, i386/x-osfrose: Likewise.
+ * arm/x-riscix: Likewise.
+
+ * c-typeck.c (signed_or_unsigned_type): Properly handle pointer types.
+
+Mon Feb 2 15:33:58 1998 Michael P. Hayes <michaelh@ongaonga.chch.cri.nz>
+
+ * unroll.c (copy_loop_body): Use single_set instead of
+ PATTERN to detect increment of an iv inside a PARALLEL.
+
+Fri Jan 16 20:29:50 1998 Paul Eggert <eggert@twinsun.com>
+
+ * toplev.c (<unistd.h>): New include.
+ (get_run_time): Prefer CLK_TCK (if available) to HZ, and
+ prefer sysconf (_SC_CLK_TCK) (if available) to CLK_TCK.
+ * configure.in (sysconf): Call AC_CHECK_FUNCS.
+
+Wed Jan 14 20:10:51 1998 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c: (rescan): Don't report line 0 as the possible real start
+ of an unterminated string constant.
+ Don't mishandle backslash-newlines that in are the output of
+ a macro expansion. Properly skip // style comments between a function
+ macro name and '(', as well as backslash-newlines in comments there.
+ (handle_directive): Handle / \ newline * between # and directive name.
+ In #include directives, \ does not escape ".
+ (do_include): For `#include "file', do not bother expanding into temp
+ buffer. When error encountered when expanding, do not try result.
+ (skip_if_group): When skipping an include directive, use include
+ tokenization, not normal tokenization. Backslash-newline is still
+ special when skipping. Handle * \ newline / correctly in comments
+ when skipping.
+ (skip_quoted_string): After \ newline, set *backslash_newlines_p
+ even if count_newlines is 0.
+ (macroexpand): Newline space is not a special marker inside a string.
+ (macroexpand, macarg): Do not generate \ddd for control characters
+ when stringifying; the C Standard does not allow this.
+ (macarg1): New arg MACRO. All callers changed.
+ Do not treat /*, //, or backslash-newline specially when processing
+ the output of a macro.
+ (discard_comments): Don't go past limit if looking for end of comment.
+ Discard backslash-newline properly when discarding comments.
+ (change_newlines): \" does not end a string.
+ (make_definition): Do not treat backslash-newline specially, as it
+ has already been removed before we get here.
+
+ * profile.c (output_func_start_profiler): Don't fflush output
+ if -quiet.
+ * toplev.c (rest_of_compilation): Likewise.
+
+ * i386/x-sco5 (CC): Remove trailing white space.
+ * x-convex (CCLIBFLAGS): Likewise.
+ * arm/t-semi (LIBGCC2_CFLAGS): Likewise.
+
+Wed Jan 7 18:02:42 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * Version 2.8.0 released.
+
+Wed Jan 7 17:54:41 1998 J. Kean Johnston <jkj@sco.com>
+
+ * i386/sco5.h ({END,START}FILE_SPEC): Link with correct crtbegin.o
+ and crtend.o when using -static.
+
+Wed Jan 7 17:49:14 1998 Jan Christiaan van Winkel <Jan.Christiaan.van.Winkel@ATComputing.nl>
+
+ * cppexp.c (gansidecl.h): Include.
+
+Wed Jan 7 17:45:07 1998 Tristan Gingold <gingold@puccini.enst.fr>
+
+ * expr.c (get_push_address): Use copy_to_reg instead of force_operand.
+ (emit_push_insn): Avoid null pointer deference if aggregate has no
+ types.
+ (expand_expr): Avoid finite but useless recursion.
+ (expand_builtin): Fix typo in calling function.
+ * function.c (assign_parms): Avoid useless call to chkr_set_right.
+
+Wed Jan 7 17:31:13 1998 Christian Iseli <Christian.Iseli@lslsun.epfl.ch>
+
+ * combine.c (force_to_mode): Return if operand is a CLOBBER.
+
+Wed Jan 7 17:23:24 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * x-rs6000 (INSTALL): Remove.
+
+ * jump.c (jump_optimize): Don't use a hard reg as an operand
+ of a conditional move if small register classes.
+
+Wed Jan 7 17:09:28 1998 Jim Wilson <wilson@cygnus.com>
+
+ * cse.c (max_insn_uid): New variable.
+ (cse_around_loop): Use it.
+ (cse_main): Set it.
+
+Wed Dec 31 18:40:26 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * stmt.c (expand_asm_operands): Treat ASM with no outputs as volatile.
+
+Wed Dec 31 08:03:45 1997 Paul Eggert <eggert@twinsun.com>
+
+ * toplev.c (flag_verbose_asm): Default to 0, not 1.
+
+ * i386/bsd386.h (ASM_COMMENT_START): Define to " #".
+
+Tue Dec 30 17:38:55 1997 Jim Wilson <wilson@cygnus.com>
+
+ * unroll.c (find_splittable_givs): Handle givs with
+ dest_reg created by loop.
+
+Tue Dec 30 14:21:33 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * svr4.h (LINK_SPEC): Never specify -h.
+ * ptx4.h (LINK_SPEC): Likewise.
+ * rs6000/sysv4.h (LINK_SPEC): Likewise.
+ * sparc/sol2.h (LINK_SPEC): Likewise.
+
+Tue Dec 30 06:15:23 1997 Philippe De Muyter <phdm@macqel.be>
+
+ * libgcc2.c (_eh_compat): Do not include stdlib.h, but provide a
+ private extern declaration for malloc.
+
+Mon Dec 29 06:56:41 1997 Laurent Guerby <guerby@gnat.com>
+
+ * Makefile.in (stmp-int-hdrs): Add "touch".
+
+Sun Dec 28 19:36:05 1997 Stephen L Moshier <moshier@mediaone.net>
+
+ * mips.h (CACHE_FLUSH_FUNC): New, defaults to _flush_cache.
+ (INITIALIZE_TRAMPOLINE): Use it.
+ * mips/ultrix.h (CACHE_FLUSH_FUNC): Define as cacheflush.
+ * mips/news4.h (CACHE_FLUSH_FUNC): Likewise.
+
+Sun Dec 28 08:19:13 1997 Paul Eggert <eggert@twinsun.com>
+
+ * arm.c: Don't include assert.h.
+ * i960.c: Likewise.
+ (i960_arg_size_and_align): Rewrite to avoid assert.
+ * m88k.c: Don't include assert.h.
+ (expand_block_move): Rewrite to avoid assert.
+ * except.c: Don't include assert.h.
+ (scan_region): Rewrite to avoid assert.
+ (save_eh_status, restore_eh_status, scan_region): Don't bother
+ testing whether pointer is null.
+ * dwarfout.c, dwarf2out.c: Do not include assert.h.
+ (assert): New macro, since we can't use system assert.
+
+Sat Dec 27 19:08:17 1997 Stephen L Moshier <moshier@mediaone.net>
+
+ * mips/ultrix.h (DWARF2_UNWIND_INFO): Define as 0.
+
+Fri Dec 26 05:57:06 1997 Philippe De Muyter <phdm@macqel.be>
+
+ * m68k/mot3300.h (FINALIZE_TRAMPOLINE): Macro defined.
+ * libgcc2.c (__clear_insn_cache): New sysV68-specific helper function
+ for trampolines.
+
+Thu Dec 25 15:22:43 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * rs6000.c (function_arg_padding): All aggregates pad upward.
+
+Wed Dec 24 18:05:13 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * sparc.c: Add prototypes for static functions.
+ (check_pic): Check for form of pic_pc_rtx, not it itself.
+ (pic_setup_code): New function, from finalize_pic.
+ (finalize_pic): Call pic_setup_code and insert after nonlocal_receiver.
+ * sparc.md (nonlocal_goto_receiver): New pattern.
+
+Tue Dec 23 05:54:38 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * expr.c (expand_builtin_setjmp): Call builtin_setjmp_receiver.
+ * mips.md (builtin_setjmp_receiver): New pattern.
+
+ * crtstuff.c (__do_global_ctors_aux): Add missing call to
+ FORCE_INIT_SECTION_ALIGN and go back to text section.
+ * i386/sol2.h (FORCE_INIT_SECTION_ALIGN): Remove loop.
+
+ * expr.c (do_store_flag): For shift, get bit count using tree_pow2.
+
+Tue Dec 23 05:21:18 1997 Paul Eggert <eggert@twinsun.com>
+
+ * genattrtab.c (main): Check HAVE_{G,S}ETRLIMIT too.
+
+Mon Dec 22 19:30:59 1997 Michael P. Hayes <michaelh@ongaonga.chch.cri.nz>
+
+ * sdbout.c (plain_type_1): Add missing checks for named types "char"
+ and "int" and check for int by size first.
+
+Mon Dec 22 19:13:58 1997 Manfred Hollstein <manfred@s-direktnet.de>
+
+ * m68k/xm-mot3300.h (ADD_MISSING_{POSIX,XOPEN}): Define.
+ * m88k/xm-sysv3.h: Likewise.
+
+ * configure.in (getrlimit, setrlimit): Call AC_CHECK_FUNCS.
+ * cccp.c (main): Check HAVE_{G,S}ETRLIMIT in addition to RLIMIT_STACK.
+ * toplev.c (main): Likewise.
+
+ * fixincludes (target_canonical): New variable.
+ (size_t): Add support for Motorola's stdlib.h which fails to provide
+ a definition for size_t.
+ (str{len,spn,cspn} return value): Handle different layout on sysV88.
+ (fabs/hypot): Provide a fake for hypot which is broken on
+ m88k-motorola-sysv3; emit a prototype for fabs on m88k-motorola-sysv3.
+
+ * m68k/mot3300.h (ASM_BYTE_OP): Don't include '\t' in definition.
+ (ASM_OUTPUT_ASCII): Prefix ASM_BYTE_OP by one single '\t'.
+
+Mon Dec 22 19:05:49 1997 Richard Henderson <rth@cygnus.com>
+
+ * sparc.md (jump): Don't use the annul bit around an empty loop.
+
+Mon Dec 22 18:52:56 1997 Robert Lipe <robertl@dgii.com>
+
+ * i386/x-sco5 (CLIB) Deleted.
+ (ALLOCA) Added.
+ * i386/xm-sco5.h (USE_C_ALLOCA) Added.
+
+Mon Dec 22 18:42:16 1997 Philippe De Muyter <phdm@macqel.be>
+
+ * m68k/mot3300Mcrt0.S (mcount): Function removed.
+ (__stop_monitor): New function.
+ * m68k/mot3300-crt0.S (__stop_monitor): New (empty) function.
+ (mcount, mcount%, monitor): Common symbols removed.
+ * m68k/mot3300.h (FUNCTION_PROFILER): USE_GAS and !USE_GAS versions
+ fixed and merged.
+ (EXIT_BODY): Always call __stop_monitor without tricky tests.
+
+Mon Dec 22 18:35:05 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * objc/Make-lang.in (runtime-info.h, libobjc_entry.o): Create in
+ build directory.
+ (libobjc.a): Update dependency list.
+ (libobjc.dll): Likewise. Use libobjc_entry.o from build directory.
+ (objc/sendmsg.o): Add -Iobjc to find runtime-info.h.
+ (objc.mostlyclean): Remove runtime-info.h.
+
+Mon Dec 22 18:27:47 1997 Paul Eggert <eggert@twinsun.com>
+
+ * libgcc2.c (_eh_compat): New section.
+ * Makefile.in (LIB2FUNCS): Add _eh_compat.
+
+Mon Dec 22 17:52:37 1997 Marcus G. Daniels <mgd@wijiji.santafe.edu>
+
+ * objc/init.c (_objc_load_callback): Don't initialize.
+
+Sun Dec 21 15:06:00 1997 Paul Eggert <eggert@twinsun.com>
+
+ * mips/xm-iris5.h (HAVE_INTTYPES_H): Force undefined.
+
+Sun Dec 21 14:51:51 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * dwarf2out.c (add_bound_info, case COMPONENT_REF): New case.
+
+Sun Dec 14 06:49:05 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * expr.c (expand_expr, case PLACEHOLDER_EXPR): Use placeholder_list
+ expression in preference to any other if correct type.
+
+ * i386.h (INITIAL_ELIMINATION_OFFSET): Correctly test for PIC
+ register used.
+
+Sat Dec 13 06:11:32 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * frame.h (__register_frame_info_table): Fix typo in declaration.
+
+Fri Dec 12 07:55:18 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * function.c (purge_addressof_1): For (mem (address (mem ...)),
+ when collapsing, preserve mode of outer MEM.
+
+ * frame.c (__register_frame_info): Renamed from __register_frame.
+ (__register_frame_info_table, __deregister_frame_info): Similarly.
+ * frame.h (__{,de}register_frame_info): Likewise.
+ (__register_frame_info_table): New declaration.
+ * crtstuff.c (__do_global_dtors{,_aux}): Rename __deregister_frame.
+ (frame_dummy, __do_global_ctors): Likewise for __register_frame.
+ * collect2.c (write_c_file_{stat,glob}): Rename __register_frame
+ to __register_frame_info and similarly for __deregister_frame and
+ __register_frame_table.
+
+ * sched.c (remove_dependencies): Set RTX_INTEGRATED_P on dependency
+ we delete. Properly update prev for multiple consecutive deletions.
+ (priority): Skip deleted dependence.
+
+ * integrate.c (initialize_for_inline): In DECL_RTL of a PARM_DECL,
+ look inside a (mem (addressof (mem ...))).
+
+Fri Dec 12 05:49:58 1997 Paul Eggert <eggert@twinsun.com>
+
+ * collect2.c (write_c_file_glob):
+ Allocate initial frame object in static storage and pass its address.
+
+Thu Dec 11 18:01:31 1997 Philippe De Muyter <phdm@macqel.be>
+
+ * acconfig.h (NEED_DECLARATION_GETENV): Define slot added.
+
+Thu Dec 11 17:54:23 1997 Paul Eggert <eggert@twinsun.com>
+
+ * crtstuff.c (__do_global_ctors): Fix typo in last change.
+
+Wed Dec 10 18:38:28 1997 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * libgcc2.c (__bb_exit_func): Fix test of return value of fopen.
+
+Wed Dec 10 07:07:37 1997 Bernd Schmidt <crux@starsky.Informatik.RWTH-Aachen.DE>
+ * combine.c (simplify_rtx, case ABS): Don't get confused by a
+ VOIDmode operand.
+
+Tue Dec 9 17:44:14 1997 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.h (FUNCTION_ARG_PADDING): Define.
+ * rs6000.c (function_arg_padding): New function.
+
+Tue Dec 9 08:53:56 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * integrate.c (save_for_inline_copying): Make a new reg_parm_stack_loc.
+
+Mon Dec 8 19:23:58 1997 Pat Rankin <rankin@eql.caltech.edu>
+
+ * toplev.c (get_run_time): [#if VMS] Cast arg in times call.
+
+ * vax/xm-vms.h (HAVE_UNISTD_H): Define for DEC C.
+ * make-cccp.com [CC]: Add /Prefix=All for DEC C.
+
+Mon Dec 8 08:09:17 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * stmt.c (expand_decl_cleanup_no_eh): Properly return a value.
+
+ * fold-const.c (fold_convert): Don't flag overflow when converting
+ pointer to integer.
+
+Sun Dec 7 09:42:05 1997 Pat Rankin <rankin@eql.caltech.edu>
+
+ * make-gcc.com (@make-l2): Pass along any command line arguments.
+ * make-l2.com: Add latent support to compile cp/inc/* if `cc1plus'
+ is specified [currently disabled].
+ * make-cc1.com: When building with GNU C, use -O2.
+ * make-cccp.com: Likewise.
+
+Sun Dec 7 06:56:48 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * crtstuff.c (__do_global_ctors): Add missing arg to __register_frame.
+
+ * collect2.c (write_c_file_stat): Fix error in last change;
+ use __SIZE_TYPE__, not size_t.
+
+Sun Dec 7 05:50:43 1997 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (strings.h): Fix misspelling of `include' introduced
+ in last change to this file.
+
+Sat Dec 6 18:54:11 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * alpha/vms.h (CPP_PREDEFINES): Remove redundant setting
+ of GCC version and unneeded setting of __VMS_VER.
+
+Fri Dec 5 07:24:36 1997 Richard Stallman <rms@gnu.org>
+
+ * sparc/linux64.h (TARGET_VERSION): Write "GNU/Linux".
+ * sparc/linux.h, sparc/linux-aout.h, rs6000/linux.h: Likewise.
+ * m68k/linux.h, arm/linux.h, alpha/{linux,elf}.h: Likewise.
+ * listing: Change linux to gnu-linux.
+
+Fri Dec 5 06:23:22 1997 Paul Eggert <eggert@twinsun.com>
+
+ Alter C startup code so that it doesn't invoke malloc on Solaris.
+ * frame.h (struct object): Decl moved here from frame.c.
+ * frame.c (struct object): Move decl to frame.h.
+ ("frame.h"): Include after <stddef.h>, so that size_t is defined.
+ (__register_frame, __register_frame_table, __deregister_frame):
+ It's now the caller's responsibility to allocate storage for object.
+ * crtstuff.c (frame_dummy), collect2.c (write_c_file_stat):
+ Allocate initial frame object in static storage and pass its address.
+ * crtstuff.c (<stddef.h>, "frame.h"): Include.
+ * Makefile.in ($(T)crtbegin.o, $(T)crtend.o, stamp-crtS):
+ Depend on defaults.h and frame.h.
+
+ * Makefile.in (RTL_H, TREE_H): Add gansidecl.h.
+ (DEMANGLE_H): New macro. All dependencies on demangle.h
+ changed to $(DEMANGLE_H).
+ (RECOG_H): Likewise.
+ (libgcc2.a, stmp-multilib): Add dependencies on frame.h, gansidecl.h.
+ (collect.o): Add dependency on gansidecl.h.
+ (gcc.o, choose-temp.o, pexecute.o, prefix.o): Likewise.
+ (obstack.o, choose-temp.o, pexecute.o): Add dependency on $(CONFIG_H).
+
+Fri Dec 5 06:20:06 1997 Dean Deaver <deaver@amt.tay1.dec.com>
+
+ * arm.md (casesi_internal): Add USE of label.
+
+Fri Dec 5 05:59:44 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * configure.in (sys/times.h): Check for this instead of times.h.
+ * cpplib.c, toplev.c: Properly test for and include sys/times.h.
+
+Thu Dec 4 12:30:40 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.c (final_prescan_insn): Use local label prefix when emitting
+ .uses pseudo-ops.
+
+Thu Dec 4 07:00:48 1997 Richard Earnshaw <rearnsha@arm.com>
+
+ * arm.c (arm_finalize_pic): Use an offset of 4 when adjusting the
+ GOT address.
+
+Thu Dec 4 06:58:32 1997 Dean Deaver <deaver@amt.tay1.dec.com>
+
+ * genoutput.c (scan_operands): Treat format of "u" like "e".
+
+Thu Dec 4 06:28:33 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * msdos/top.sed, winnt/config-nt.sed: Change version to 2.8.0.
+
+ * stmt.c (pushcase_range): Clean up handling of "infinite" values.
+
+Wed Dec 3 09:03:35 1997 Bernd Schmidt <crux@ohara.Informatik.RWTH-Aachen.DE>
+
+ * i386.c (notice_update_cc): Remove bogus Pentium GCC code.
+
+Wed Dec 3 08:46:32 1997 Paul Eggert <eggert@twinsun.com>
+
+ * arm.h (CPP_ARCH_DEFAULT_SPEC): Fix misspelling: `TARGET_CPU_DEFUALT'.
+ (TARGET_SWITCHES): Fix misspelling: `no-apcs-rentrant'.
+ * pa.c (override_options): Fix misspelling: `compatable'.
+ * enquire.c (main): Fix misspelling in diagnostic: `mallocatable'.
+ * gcov.c (function_summary): Fix misspelling in diagnostic: `funcion'.
+ * objc/thr-decosf1.c (__objc_thread_id): Fix misspelling in code:
+ `pthread_getuniqe_np'.
+
+ * tahoe.c (extensible_operand): Renamed from extendable_operand.
+ All callers changed.
+ * dwarf2.h (enum dwarf_discrim_list): Renamed from dwarf_descrim_list.
+ * dwarf2out.c: Fix misspellings in forward static function
+ declarations: `add_AT_setion_offset', `add_sibling_atttributes'.
+ * dwarfout.c: Fix misspellings in forward static function
+ declarations: `langauge_attribute', `geneate_new_sfname_entry'.
+ * stmt.c, tree.h (start_cleanup_deferral):
+ Renamed from start_cleanup_deferal.
+ (end_cleanup_deferral): Renamed from end_cleanup_deferal.
+ * toplev.c (rest_of_compilation): Rename local var from
+ inlineable to inlinable.
+
+Wed Dec 3 06:17:03 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * stmt.c (expand_decl_cleanup): Update thisblock after eh_region_start.
+
+Wed Dec 3 06:06:38 1997 Jim Wilson <wilson@cygnus.com>
+
+ * dwarf2out.c (gen_type_die, case POINTER_TYPE): See TREE_ASM_WRITTEN
+ before the recursive call.
+
+Wed Dec 3 05:57:29 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * configure.in (AC_HEADER_{STDC,TIME}): Add calls.
+ (AC_CHECK_HEADERS): Add fcntl.h times.h, sys/times.h,
+ sys/resource.h, and sys/param.h.
+ (getenv): Check if need declaration.
+ * cccp.c: Remove obsolete ways of including headers and use autoconf
+ symbols instead.
+ Include gansidecl.h; remove things defined there.
+ See if getenv needs to be declared.
+ * cpplib.c: Likewise.
+ * cexp.y: Use autoconf symbols to select what include files are needed.
+ * genattrtab.c, toplev.c: Likewise.
+
+Tue Dec 2 21:44:25 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * reload1.c (reload): Make copy of MEM before setting
+ req_equiv_mem if the address is a PLUS.
+
+Tue Dec 2 07:03:47 1997 Pat Rankin <rankin@eql.caltech.edu>
+
+ * vax/xm-vms.h (STDC_HEADERS, HAVE_STDLIB, HAVE_STRING): Define.
+ (mesg_implicit_function_declaration): New macro.
+
+ * make-l2.com: Compile libgcc2.c with `-fexceptions' specified.
+
+Mon Dec 1 17:44:59 1997 Jeffrey A Law (law@cygnus.com)
+
+ * dwarf2out.c (output_call_frame_info): Use ASM_OUTPUT_ASCII to
+ output ASCII by default; only use ASM_OUTPUT_DWARF_STRING if
+ flag_debug_asm is on.
+ (output_die, output_pubnames, output_line_info): Likewise.
+
+Mon Dec 1 17:15:30 1997 Philip Blundell <pb@nexus.co.uk>
+
+ * arm/linux.h (SUBTARGET_CPU_DEFAULT): Define instead
+ of TARGET_CPU_DEFAULT.
+
+Mon Dec 1 16:51:23 1997 J.J. van der Heijden <J.J.vanderHeijden@student.utwente.nl>
+
+ * i386/mingw32.h (MATH_LIBRARY): Set to "-lcrtdll".
+
+Mon Dec 1 16:46:57 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * c-aux-info.c: Add prototypes for static functions.
+ * c-lex.c, emit-rtl.c, rtl.c, xcoffout.c: Likewise.
+
+ * i386.h (TARGET_SWITCHES): Add entries for "windows" and "dll".
+
+Mon Dec 1 16:42:20 1997 Jim Wilson <wilson@cygnus.com>
+
+ * mips.md (fix_trunc{dfsi,sfsi,dfsi}2): Add '*' in operand 3.
+
+Sun Nov 30 20:25:59 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * expr.c (get_inner_reference): For ARRAY_REF, if need
+ WITH_RECORD_EXPR, make it with the ARRAY_REF as exp.
+
+ * expr.c (store_constructor): Use TARGET, not EXP, for
+ WITH_RECORD_EXPR when offset has a placeholder.
+
+Sun Nov 30 11:19:00 1997 J.J. van der Heijden <J.J.vanderHeijden@student.utwente.nl>
+
+ * objc/Make-lang.in (libobjc.dll): Rename -dll flag to -mdll.
+
+Sun Nov 30 08:42:29 1997 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de>
+
+ * stmt.c (expand_end_bindings): Cleanups and incoming gotos are
+ not incompatible.
+
+Sun Nov 30 05:45:06 1997 Michael P. Hayes <michaelh@ongaonga.chch.cri.nz>
+
+ * jump.c (jump_optimize): Use find_insert_position in two more places.
+
+Sat Nov 29 13:47:40 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * alpha/vms.h (HAVE_STRERROR, HAVE_{LIMITS,STDDEF,TIME}_H): Define.
+
+Sat Nov 29 08:29:47 1997 J.J.van der Heijden <J.J.vanderHeijden@student.utwente.nl>
+
+ * configure.in: Add check for kill.
+ * gcc.c: Define kill as raise if not HAVE_KILL.
+
+Sat Nov 29 06:18:08 1997 Michael P. Hayes <michaelh@ongaonga.chch.cri.nz>
+
+ * jump.c (find_insert_position): New function.
+ (jump_optimize): Use it when making new copy of insn after test.
+
+Sat Nov 29 05:54:57 1997 Douglas Rupp <rupp@gnat.com>
+
+ * alpha/vms.h (BIGGEST_ALIGNMENT, ENCODE_SECTION_INFO): No longer
+ override.
+
+Sat Nov 29 05:43:37 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * getpwd.c (getpwd, [VMS]): Only add extra arg if VMS.
+
+ * alpha/xm-vms.h (HAVE_VPRINTF, HAVE_PUTENV): Define.
+
+ * cccp.c (index, rindex): Add conditional defs to strchr and strrchr.s
+ * cpplib.c: Likewise.
+ * gcov.c: Include gansidecl.h.
+
+Fri Nov 28 21:17:51 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * objc/objc-act.c: Include "output.h".
+
+ * objc/Make-lang.in (objc-parse.o, objc-act.o): Also depend on
+ $(srcdir)/output.h.
+
+ * objc/Object.m (+conformsTo:): Surround assignment with parentheses.
+
+ * objc/archive.c, objc/class.c, objc/encoding.c: Finish prototyping.
+ * objc/init.c, objc/objc-act.c, objc/objc-api.h: Likewise.
+ * objc/runtime.h, objc/sendmsg.c: Likewise.
+
+Fri Nov 28 19:15:53 1997 Mark Kettenis <kettenis@phys.uva.nl>
+
+ * objc/thr-posix.c (__objc_mutex_allocate): Allocate
+ mutex type instead of assuming it fits in a void * type.
+ (__objc_mutex_deallocate): Free mutex type.
+ (__objc_mutex_lock): Pass mutex type instead of pointer to it.
+ (__objc_mutex_{try,un}lock): Likewise.
+ (__objc_condition_allocate): Allocate condition type instead
+ of assuming it fits in a void * type.
+ (__objc_condition_deallocate): Free condition type.
+ (__objc_condition_wait): Pass condition type instead of pointer to it.
+ (__objc_condition_{broadcast,signal}): Likewise.
+
+Fri Nov 28 17:07:25 1997 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.c (function_arg_partial_nregs): Undo 11/26 change.
+
+Fri Nov 28 12:34:03 1997 Scott Christley <scottc@net-community.com>
+
+ * objc/Make-lang.in (runtime-info.h): Add comment in file.
+
+ * objc/selector.c: Replace all occurences of sarray_get
+ with sarray_get_safe.
+ * objc/sendmsg.c: Likewise.
+
+ * protoize.c (include_defaults): Add component element as in cccp.c.
+ * nextstep.h (INCLUDE_DEFAULTS): Add component element.
+ (ASM_COMMENT_START): Correct assembly comment string.
+ * objc/Make-lang.in (objc/{NXConstStr,Object,Protocol,linking):
+ Compile with GNU runtime.
+
+Fri Nov 28 12:27:50 1997 Ovidiu Predescu <ovidiu@net-community.com>
+
+ Generate platform information required by ObjC runtime.
+ * toplev.c (lang_options): New ObjC specific compiler flag.
+ * objc/Make-lang.in: Add target to generate runtime-info.h file.
+ * objc/objc-act.c (print_struct_values): New variable.
+ (generate_struct_by_value_array): New function.
+ (lang_init): Call generate_struct_by_value_array if requested.
+ (lang_decode_option): Check for new compiler flag.s
+ * objc/sendmsg.c (__objc_get_forward_imp): Check size of type
+ for determining proper forwarding function.
+
+Fri Nov 28 05:58:30 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * regclass.c (record_address_regs): Use REG_OK_FOR_{INDEX,BASE},
+ not the REGNO versions.
+
+Thu Nov 27 16:28:04 1997 Scott Snyder <snyder@d0sgif.fnal.gov>
+
+ * dwarf2out.c (outout_call_frame_info): Ensure info has proper
+ alignment.
+
+ * libgcc2.c (__throw): Initialize HANDLER.
+
+Thu Nov 27 16:23:25 1997 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * tree.h, rtl.h: See if need declarations for free.
+ * tree.c, bc-optab.c: Get the declaration of free from stdlib.h.
+
+Thu Nov 27 07:21:54 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * except.h: Add outer_context_label_stack.
+ * except.c: Likewise.
+ (expand_start_all_catch): Push the outer_context for the try block
+ onto outer_context_label_stack.
+ (expand_end_all_catch): Use it and pop it.
+
+ * except.c (expand_start_all_catch): One more do_pending_stack_adjust.
+
+ * expr.c (preexpand_calls): Don't look past a TRY_CATCH_EXPR.
+
+Thu Nov 27 07:15:10 1997 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.c (SMALL_DATA_REG): Register to use for small data relocs.
+ (print_operand{,_address}): Use SMALL_DATA_REG for register involved in
+ small data relocations.
+
+ * rs6000/linux.h (LINK_SPEC): Pass -dynamic-linker /lib/ld.so.1 if
+ -dynamic linker is not used.
+
+ * rs6000.md (call insns): For local calls, use @local suffix under
+ System V; don't use @plt under Solaris.
+
+Wed Nov 26 15:12:32 1997 Jeffrey A Law (law@cygnus.com)
+
+ * Makefile.in (LIBGCC2_CFLAGS): Add -fexceptions.
+
+ * toplev.c (flag_exceptions): Default value is 2.
+ (compile_file): If flag_exceptions still has the value 2, then
+ set it to 0.
+
+Wed Nov 26 14:58:42 1997 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.c (output_function_profiler): Put label address in r0, and
+ store LR in 4(sp) for System V/eabi.
+
+ * rs6000.h (ASM_OUTPUT_REG_{PUSH,POP}): Keep stack aligned to 16
+ byte boundary, and maintain stack backchain.
+
+ (Originally from Geoffrey Keating)
+ * rs6000.c (function_arg): Excess floating point arguments don't
+ go into GPR registers after exhausting FP registers under the
+ System V.4 ABI.
+ (function_arg_partial_nregs): Likewise.
+
+ * rs6000.md (call insns): If -fPIC or -mrelocatable, add @plt
+ suffix to calls.
+
+Wed Nov 26 14:09:01 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarfout.c (output_type): If finalizing, write out nested types
+ of types we've already written.
+
+ * toplev.c (main): Complain about -gdwarfn.
+
+Wed Nov 26 12:37:56 1997 J.J. van der Heijden <J.J.vanderHeijden@student.utwente.nl>
+
+ * mingw32.h (PATH_SEPARATOR): Moved to xm-mingw32.h
+ * xm-mingw32.h (PATH_SEPARATOR): Moved here from mingw32.h.
+
+ * getpwd.c (getpwd): Use VMS implementation of _WIN32 unless cygwin32.
+
+Wed Nov 26 12:26:44 1997 John Hassey <hassey@dg-rtp.dg.com>
+
+ * m88k/dgux.h (ASM_CPU_SPEC) : No whitespace allowed.
+
+ * m88k.h (SUPPORTS_ONE_ONLY) : Must be svr4.
+
+ * i386/dgux.h (ASM_OUTPUT_ALIGN): Deleted.
+
+ * i386/dgux.c (output_file_start) : Changed ix86_isa_string
+ to ix86_arch_string.
+
+ * cplus-dem.c (fancy_abort): Added.
+
+Wed Nov 26 06:07:50 1997 Richard Earnshaw <rearnsha@arm.com>
+
+ * arm/coff.h (TARGET_DEFAULT): Add ARM_FLAG_APCS_32 to defaults.
+
+ * configure.in (arm*-*-*): Recognize --with-cpu for ARM processors.
+
+Wed Nov 26 05:05:36 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * libgcc2.c (inhibit_libc): Define #ifdef CROSS_COMPILE.
+
+ * mips/xm-iris6.h (malloc, realloc, calloc): No longer declare.
+ (USG): Define here.
+ (xm-iris5.h): No longer include; just include xm-mips.h.
+
+ * mips-tfile.c (parse_def): Properly recognize bitfield and
+ count array dimensions.
+
+ * protoize.c: Remove declarations of void, exit, and free.
+
+ * i386/mingw32.h (LINK_SPEC, STARTFILE_SPEC): Change -dll to -mdll.
+
+ * configure.in: Check for sys/file.h.
+ * gcc.c (sys/file.h): Include if HAVE_SYS_FILE_H.
+
+ * configure.in: Only give error on bad --with-cpu value for target.
+
+Sat Nov 22 19:21:55 1997 Philippe De Muyter <phdm@macqel.be>
+
+ * dwarf2out.c (CIE_LENGTH_LABEL, FDE_LENGTH_LABEL): New macros.
+ (ASM_OUTPUT_DWARF_VALUE4): New macro.
+ (ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL): Define if SET_ASM_OP is
+ defined.
+ (output_call_frame_info): Don't output forward label differences
+ if ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL is defined.
+ Substitute instead simple label and define this label later to be
+ difference of desired labels after they have been defined.
+ * m68k/mot3300.h (SET_ASM_OP): Define when not using gas.
+
+ * gcc.c (process_command): Don't take address of function fatal when
+ calling lang_specific_driver.
+
+Sat Nov 22 17:08:03 1997 J. Kean Johnston <jkj@sco.com>
+
+ * i386/sco5.h (SELECT_RTX_SECTION): Redefine to work with -fpic.
+ (LIBGCC_SPEC, LIB_SPEC): Link with correct libgcc.a.
+ (HAVE_ATEXIT): Define.
+
+Sat Nov 22 12:20:22 1997 Richard Earnshaw <rearnsha@arm.com>
+
+ * arm.md (movsfcc{,_hard}_insn): Specify mode for all alternatives.
+
+Sat Nov 22 06:56:16 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * function.c (instantiate_decl): Only ignore ADDRESSOF if arg is REG.
+
+ * configure.in: Check for functions before checking which need decls.
+ (bcopy, bzero, bcmp, index, rindex): Add checks.
+ (vax-*-sysv*): Fix typo in setting of xm_file.
+ * aclocal.m4: Add conditional definitions of index and rindex.
+ * gansidecl.h (bcopy, bzero, bcmp, index, rindex): If don't
+ have one of these, define macro to use ANSI form.
+ * pa/xm-pahpux.h (bcopy, bzero, bcmp, rindex, index): No longer define.
+ * mips/xm-sysv.h, xm-m88k.h, m68k/xm-plexus.h: Likewise.
+ * m68k/xm-mot3300.h, m68k/xm-m68kv.h, m68k/xm-hp320.h: Likewise.
+ * winnt/xm-winnt.h, vax/xm-vms.h, m68k/xm-3b1.h: Likewise.
+ * i386/xm-os2.h, i386/xm-mingw32.h, alpha/xm-vms.h: Likewise.
+ * xm-svr4.h, xm-svr3.h: Likewise.
+ * clipper/xm-clix.h: Likewise.
+ (TARGET_MEM_FUNCTIONS): Define here.
+ * xm-linux.h (bcmp, bcopy, bzero, index, rindex): No longer undefine.
+ * xm-convex.h (bcopy, bzero): No longer define.
+ * vax/xm-vaxv.h, sparc/xm-pbd.h, mips/xm-iris{3,4,5}.h: Likewise.
+ * m68k/xm-crds.h, m68k/xm-altos3068.h, i386/xm-sun.h: Likewise.
+ * i386/xm-osf.h, i386/xm-aix.h, xm-i370.h, ns32k/xm-genix.h: Likewise.
+
+Sat Nov 22 06:46:26 1997 Paul Eggert <eggert@twinsun.com>
+
+ * c-typeck.c, collect2.c, cpplib.c, dwarfout.c, gcov.c, protoize.c:
+ Don't include <strings.h> unless there's no <string.h>.
+
+Fri Nov 21 06:46:50 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * configure.in (i[3456]86-*-freebsd{,elf}*): Delete i386/xm-freebsd.h.
+ * xm-freebsd.h, i386/xm-freebsd.h: Deleted.
+
+ * i386/xm-cygwin32.h (HAVE_RUSAGE, HAVE_FILE_H): Deleted.
+ * i386/xm-mingw32.h, rs6000/xm-cygwin32.h: Likewise.
+
+ * xm-std32.h: New file, so far unused.
+
+Fri Nov 21 05:50:54 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * m68k.c (legitimize_pic_address): Make sure pic register marked used.
+
+ * dwarf2out.c (output_call_frame_info): Call app_enable and
+ app_disable if flag_debug_asm, not if flag_verbose_asm.
+
+Thu Nov 20 16:37:36 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * expr.c (expand_builtin_apply): Fix typo in last change.
+
+ * expr.c (expand_assignment): If assigning to readonly field,
+ mark rtx as unchanging.
+
+ * configure.in: Add checks for functions putenv, popen, and vprintf.
+ (i[3456]86-*-netbsd*): No longer need i386/xm-netbsd.h.
+ (i860-alliant-*): No longer need i860/xm-fx2800.h.
+ (m68k-ncr-sysv*): Use xm-svr3.h instead of m68k/xm-tower.h.
+ (m68k-sun-sunos*): No longer need m68k/xm-sun3.h.
+ (m68k-*-netbsd*): No longer need m68k/xm-netbsd.h.
+ (mips-dec-netbsd*): No longer need mips/xm-netbsd.h.
+ (ns32k-pc532-netbsd*): No longer need ns32k/xm-netbsd.h.
+ (sparc-*-netbsd*): No longer need sparc/xm-netbsd.h.
+ (vax-*-netbsd*): No longer need config/xm-netbsd.h.
+ * arm/xm-netbsd.h: No longer include xm-netbsd.h.
+ * xm-linux.h (HAVE_VPRINTF, HAVE_POPEN, HAVE_PUTENV): Deleted.
+ * xm-mips.h (HAVE_VPRINTF, HAVE_PUTENV): Deleted.
+ * i386/xm-osf.h, xm-arm.h, xm-alpha.h: Likewise.
+ * xm-sparc.h (HAVE_POPEN): Deleted.
+ * xm-sh.h (HAVE_VPRINTF): Deleted.
+ * mips/xm-iris4.h, mips/xm-iris5.h, xm-m88k.h: Likewise.
+ * m68k/xm-crds.h, m68k/xm-atari.h, m68k/xm-amix.h: Likewise.
+ * xm-svr3.h, xm-svr4.h, i386/xm-mingw32.h: Likewise.
+ * i386/xm-os2.h (HAVE_PUTENV): Deleted.
+ * i386/xm-dos.h, i386/xm-aix.h: Likewise.
+ * arm/xm-netbsd.h (HAVE_VPRINTF, HAVE_STRERROR): No longer
+ need undefine.
+ * xm-netbsd.h, i386/xm-netbsd.h, m68k/xm-netbsd.h: Deleted.
+ * mips/xm-netbsd.h, ns32k/xm-netbsd.h, sparc/xm-netbsd.h: Likewise.
+ * i860/xm-fx2800.h, m68k/xm-sun3.h, m68k/xm-tower.h: Likewise.
+
+Thu Nov 20 16:04:24 1997 Richard Earnshaw <rearnsha@arm.com>
+
+ * explow.c (plus_constant_wide, case MEM): If about to call
+ force_const_mem, generate the rtl in a saveable obstack.
+
+ * arm.md (movhi): Pass the full MEM to storeinthi, storehi and
+ storehi_bigend.
+ (storeinthi, storehi, storehi_bigend): Be more conservative about
+ when not to force a PLUS or MINUS into a REG. Use change_address
+ to create new MEMs.
+
+Wed Nov 19 15:16:04 1997 Ulrich Drepper <drepper@cygnus.com>
+
+ * c-common.c (print_char_table): Add a and A to float formats.
+ (scan_char_table): Likewise.
+ (check_format_info): Recognize `a' as allocate flag only if used
+ in correct context.
+
+Wed Nov 19 12:56:54 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * configure.in: Fix check for <inttypes.h>.
+
+Tue Nov 18 19:27:01 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.md (attribute "type"): Add nil.
+ (movsi_ie): y/y alternative is type nil.
+ (movsf_ie): Replace ry/yr/X alternative by r/y/X , y/r/X and y/y/X.
+ (movsf_ie+1): Delete.
+
+Tue Nov 18 18:38:41 1997 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (warn_undef): Now static.
+ (eval_if_expression): Don't warn about undefined preprocessor symbols
+ in system headers.
+ * cexp.y (parse_c_expression):
+ Now takes new arg specifying whether to warn
+ about undefined preprocessor symbols.
+ (warn_undef): Now local and static; independent of warn_undef in cccp.c
+ (yylex): `register' -> `register int', needed for C9X.
+
+ The following changes are only if TEST_EXP_READER is defined:
+ (expression_signedp): New var.
+ (start): Set expression_signedp to signedness of expression.
+ (print_unsigned_host_wide_int): New function.
+ (main): Use it to print value of expression, instead of hoping that
+ `long' is long enough. Print "u" after unsigned values.
+
+Tue Nov 18 18:33:30 1997 Jim Wilson <wilson@cygnus.com>
+
+ * mips.c (save_restore_insns): If gp_offset or fp_offset are
+ large_int, emit two insns instead of one splitable insn.
+ * dwarf2out.c (dwarf2out_frame_debug): When set cfa_store_offset
+ from cfa_temp_value, use cfa_offset. Add assert checking that
+ cfa_reg is SP.
+
+Tue Nov 18 09:11:58 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * fold-const.c (div_and_round_double): Return overflow for
+ divide-by-zero instead of aborting.
+
+ * tree.c (substitute_in_expr, case TREE_LIST): Fix two typos.
+
+Tue Nov 18 05:03:52 1997 Jeffrey A Law <law@cygnus.com>
+
+ * arm.c (output_move_double): Allocate 3 entries in otherops array.
+
+Tue Nov 18 02:41:01 1997 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (quote_string_for_make): New function.
+ (deps_output): Use it to fix bug with file name quoting in -M output.
+
+Mon Nov 17 13:28:33 1997 Philip Blundell <Philip.Blundell@pobox.com>
+
+ * arm/lib1funcs.asm (__div0): Provide GNU/Linux implementation.
+ * arm/t-linux (LIB1ASMFUNCS): Use it.
+
+Mon Nov 17 09:13:59 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * function.c (purge_addressof_1): Make copy when substituting argument
+ of ADDRESSOF.
+ (fixup_var_refs_1): Likewise.
+
+ * m68k.c: Include tree.h.
+
+Mon Nov 17 09:01:05 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * getpwd.c (getpwd, [VMS]): Add extra arg of 0 to getcwd call.
+
+ * alpha/vms.h ({OPTIMIZATION,OVERRIDE}_OPTIONS): Delete, for now.
+ * alpha/xm-vms.h (DIR_SEPARATOR, PATH_SEPARATOR): Delete.
+
+Mon Nov 17 08:52:45 1997 Richard Earnshaw <rearnsha@arm.com>
+
+ * function.c (fixup_stack_1): Also fix-up refs via ARG_POINTER_REGNUM.
+
+ * configure.in (arm-*-netbsd*): Doesn't need collect2.
+
+Mon Nov 17 08:50:01 1997 Stephen L Moshier <moshier@world.std.com>
+
+ * i386/isc.h (DWARF2_UNWIND_INFO): Define as 0.
+
+Mon Nov 17 08:42:28 1997 Michael P. Hayes <michaelh@ongaonga.chch.cri.nz>
+
+ * flow.c (propagate_block): Look for pre-inc/dec within PARALLEL.
+
+Mon Nov 17 03:14:46 1997 Paul Eggert <eggert@twinsun.com>
+
+ * cpplib.c (file_size_and_mode): Remove.
+ (finclude): Don't assume long and off_t are same size or that
+ mode_t fits in int.
+ * cccp.c: (main, finclude, check_precompiled): Don't assume size_t
+ and off_t are same size.
+ * gcov.c (read_files): Don't assume off_t and unsigned are same size.
+
+Sun Nov 16 18:56:40 1997 Scott Christley <scottc@net-community.com>
+
+ * objc/objc-act.c (objc_demangle): New function.
+ (objc_printable_name): New function.
+ (init_objc): Change default function.
+
+ * expr.c (expand_builtin_apply): Prefer nonlocal over block.
+
+Sun Nov 16 18:10:13 1997 Fila Kolodny <fila@ibi.com>
+
+ * i370.c (i370_function_prolog): New function from i370.h.
+ * i370.h (FUNCTION_PROLOG): Just call i370_function_prolog.
+
+Sun Nov 16 08:40:35 1997 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de>
+
+ * calls.c (expand_call, store_one_arg): Don't pass QImode arguments
+ to emit_library_call.
+ * expr.c (emit_push_insn, expand_assignment, store_expr): Likewise.
+ (expand_expr, expand_builtin): Likewise.
+ * function.c (put_var_into_stack, assign_parms): Likewise.
+ * alpha.c (alpha_builtin_saveregs): Likewise.
+ * clipper.c (clipper_builtin_saveregs): Likewise.
+ * m88k.c (m88k_builtin_saveregs): Likewise.
+ * pa.c (hppa_builtin_saveregs): Likewise.
+ * sparc.c (sparc_builtin_saveregs): Likewise.
+
+Sun Nov 16 07:39:08 1997 Paul Eggert <eggert@twinsun.com>
+
+ * real.h (REAL_VALUES_IDENTICAL): New macro.
+ * expr.c (is_zeros_p): Don't consider -0.0 to be all zeros.
+ * fold-const.c (operand_equal_p): Don't consider -0.0 identical to 0.0.
+ * tree.c (simple_cst_equal): Likewise.
+ * varasm.c (immed_real_const_1): Use new REAL_VALUES_IDENTICAL macro.
+
+Sun Nov 16 07:29:12 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * acconfig.h (NEED_DECLARATION_{,R}INDEX): New cases.
+ * configure.in: See if need declarations for index and rindex.
+ * c-typeck.c, collect2.c, cpplib.c, dwarfout.c, gcov.c, protoize.c:
+ Include stdlib.h, string.h, and strings.h, if they exist.
+ Only declare index and rindex if needed.
+ * collect2.c: Only declare free if needed.
+
+ * regclass.c (record_address_regs): Refine choice of index and base
+ when have sum of two regs, one of which is a hard reg.
+
+Sun Nov 16 07:07:45 1997 Robert Lipe (robertl@dgii.com)
+
+ * i386/sco5.h (ASM_OUTPUT_ALIGNED_BSS): Define as in sysv4 and linux
+ (HAVE_ATEXIT): No longer define. This confused ELF destructors.
+ (DBX_DEBUGGING_INFO): Define.
+
+Sat Nov 15 09:55:11 1997 Richard Earnshaw (rearnsha@arm.com)
+
+ * arm.h (GO_IF_LEGITIMATE_ADDRESS): Don't accept MINUS (until reload
+ knows what to do with it).
+
+Thu Nov 13 11:07:41 1997 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.c (num_insns_constant): Use REAL_VALUE_FROM_CONST_DOUBLE to
+ pick apart floating point values, instead of using CONST_DOUBLE_LOW
+ and CONST_DOUBLE_HIGH.
+
+ * rs6000.md (define_splits for DF constants): Use the appropriate
+ REAL_VALUE_* interface to pick apart DF floating point constants in
+ a machine independent fashion.
+
+Thu Nov 13 07:30:53 1997 Richard Earnshaw (rearnsha@arm.com)
+
+ * arm/netbsd.h (LINK_SPEC): Redefine -- pass -X.
+
+ * arm.md (movsicc_insn): Add extra reload alternatives for better
+ register tying.
+ (movsfcc_hard_insn, movsfcc_soft_insn, movdfcc_insn): Likewise.
+
+Mon Nov 10 19:32:14 1997 Doug Evans <dje@cygnus.com>
+
+ * sparc.md (mov[sdt]f_const_insn): Fix condition to match what
+ instruction can handle.
+
+Mon Nov 10 03:02:19 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * stmt.c (expand_decl_cleanup_no_eh): New fn.
+
+ * except.c (expand_leftover_cleanups): do_pending_stack_adjust.
+
+Sun Nov 9 14:34:47 1997 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.md (lshrdi3_power): Delete '&' from first alternative and
+ swap instruction order.
+
+Sun Nov 9 09:51:08 1997 Michael P. Hayes <michaelh@ongaonga.chch.cri.nz>
+
+ * machmode.def (QCmode, HCmode): New modes.
+
+Sun Nov 9 09:24:21 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * combine.c (sets_function_arg_p): New function.
+ (combinable_i3pat): Check if combining with any but the first
+ argument register setting insn for a function call.
+
+ * a29k.h (ELIGIBLE_FOR_EPILOGUE_DELAY): Avoid sheduling load from
+ stack slot.
+
+Sun Nov 9 09:17:53 1997 Richard Earnshaw (rearnsha@arm.com)
+
+ * loop.c (strength_reduce): If initial value of BIV is equivalent to
+ a constant, record that as initial value.
+ (check_dbra_loop): Don't reverse loop if initial value isn't CONST_INT.
+
+Sun Nov 9 09:12:41 1997 Tristan Gingold <gingold@haendel.enst.fr>
+
+ * expr.c (emit_push_insn): Avoid infinite recursion
+ when -fcheck-memory-usage.
+
+Sun Nov 9 08:03:42 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * cse.c (simplify_binary_operation): Fix error in last change.
+
+Sun Nov 9 07:56:31 1997 Pat Rankin <rankin@eql.caltech.edu>
+
+ * vmsconfig.com [version.opt]: Parse version string more robustly.
+ [@variable@]: Discard configure tokens when using Makefile.in.
+ [libgcc2-cxx.list]: Generate this new file for CXX_LIB2FUNCS.
+ [cp/input.c]: Suppress it as workaround to avoid linker warning.
+ [objc-parse.y]: Now lives in the objc subdirectory.
+ * make-cc1.com [objc-parse.{c,y}]: Ditto.
+ * make-cccp.com [prefix.c]: Compile additional source file.
+
+ * cccp.c (VMS_freopen, VMS_fopen, VMS_open, VMS_fstat): Call
+ corresponding library routine specified via its ordinary name
+ rather than with a decc$ prefix. (Reverses Oct 19 change.)
+
+ * cccp.c, cexp.y [HOST_WIDE_INT]: Manually splice long lines
+ of avoid backslash+newline continuation on #if directives.
+
+Sun Nov 9 01:54:54 1997 Jeffrey A Law (law@cygnus.com)
+
+ * local-alloc.c (block_alloc): Don't lose if two SCRATCH expressions
+ are shared.
+
+Sat Nov 8 23:01:37 1997 Michael P. Hayes <michaelh@ongaonga.chch.cri.nz>
+
+ * cse.c (simplify_binary_operation): Don't simplify divide by zero
+ for targets that don't support a representation of INFINITY.
+
+Sat Nov 8 22:37:29 1997 Richard Earnshaw <rearnsha@arm.com>
+
+ * Makefile.in (cse.o): Depend on expr.h.
+ * cse.c: Include expr.h.
+ (fold_rtx, case MEM): For ADDRESSOF, create new MEM.
+
+Sat Nov 8 19:27:56 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * expr.c (expand_increment): When enqueing a postincrement for a MEM,
+ use copy_to_reg if address is not a general_operand.
+
+Sat Nov 8 18:39:56 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * libgcc2.c (L_eh): Define __eh_pc here.
+ Replace __eh_type with generic pointer __eh_info.
+
+Sat Nov 8 07:03:47 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * alpha.h (SECONDARY_OUTPUT_RELOAD_CLASS): If FLOAT_REGS,
+ need secondary reload for QImode and HImode even if BWX.
+
+ * expmed.c (store_split_bit_field): Force ADDRESSOF into register.
+
+ * cse.c (fold_rtx, case ADDRESSOF): New case (that does nothing).
+
+ * function.c (fixup_var_refs_1, case ADDRESSSOF): Check that
+ new value is valid for insn.
+
+ * stor-layout.c (get_best_mode): Refine test for field within
+ unit to work properly for negative positions.
+
+ * print-rtl.c (print_inline_rtx): Save and restore sawclose and indent.
+
+ * reload.c (find_replacement): If PLUS, MINUS, or MULT, see if
+ either arg contains a replacement.
+
+Fri Nov 7 10:22:24 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * frame.c (add_fdes, count_fdes): Go back to checking pc_begin for
+ linked once FDEs.
+
+Fri Nov 7 06:50:57 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * alpha.h (FUNCTION_VALUE): Take into account promotion of pointers.
+
+ * unroll.c (back_branch_in_range_p): Refine check for INSN at loop end.
+
+Wed Nov 5 18:17:50 1997 Paul Eggert <eggert@twinsun.com>
+
+ * fixinc.svr4: Replace `__STDC__ - 0 == 1'
+ with `defined (__STRICT_ANSI__)'.
+
+Tue Nov 4 18:32:44 1997 Jim Wilson <wilson@cygnus.com>
+
+ * mips.md (insv, extzv, extv): Add change_address call.
+ (movsi_ulw, movsi_usw): Change QImode to BLKmode in pattern.
+ * mips.c (mips_expand_epilogue): Emit blockage insn before call to
+ save_restore_insns if no FP and GP will be restored.
+
+ * acconfig.h (HAVE_INTTYPES_H): Undef.
+ * configure.in (inttypes.h): Check for conflicts between sys/types.h
+ and inttypes.h, and verify that intmax_t is defined.
+ * mips/x-iris (CC, OPT, OLDCC): Comment out.
+ * mips/x-iris3: Likewise.
+
+Tue Nov 4 17:28:31 1997 Doug Evans <dje@cygnus.com>
+
+ * c-lex.c (MULTIBYTE_CHARS): #undef if cross compiling.
+ (yylex): Record wide strings using target endianness, not host.
+
+Tue Nov 4 16:18:19 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * Makefile.in (distdir-start): Add dependency on $(srcdir)/config.in.
+
+Tue Nov 4 06:14:30 1997 Paul Eggert <eggert@twinsun.com>
+
+ * c-lex.c (yylex): Don't warn about constants like
+ 9223372036854775807 and 18446744073709551615U on an L32LL64 host
+ unless pedantic.
+
+Mon Nov 3 18:42:44 1997 Jim Wilson <wilson@cygnus.com>
+
+ * i386.c (load_pic_register): Call prologue_get_pc_and_set_got.
+ * i386.md (prologue_{set_got,get_pc}): Add UNSPEC_VOLATILE to pattern.
+ (prologue_get_pc_and_set_got): New pattern.
+
+Mon Nov 3 13:42:21 1997 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c, cpplib.c (compare_defs): Don't complain about arg name
+ respellings unless pedantic.
+ * cpplib.c (compare_defs): Accept pfile as new arg.
+ All callers changed.
+
+Fri Oct 31 07:10:09 1997 Jeffrey A Law (law@cygnus.com)
+
+ * global.c (global_alloc): Free the conflict matrix after
+ reload has finished.
+
+Thu Oct 30 17:30:42 1997 Doug Evans <dje@cygnus.com>
+
+ * configure.in (sparc-*-elf*): Use sparc/elf.h, sparc/t-elf.
+ Set extra_parts.
+ (sparc*-*-*): Recognize --with-cpu=v9.
+ * sparc/elf.h: New file.
+ * sparc/t-elf: New file.
+
+Thu Oct 30 16:36:17 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * stmt.c (expand_asm_operand): If error in matching constraint,
+ don't emit asm.
+
+Thu Oct 30 12:21:06 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * va-sh.h (__va_arg_sh1): Define.
+ (va_arg): Use it.
+ SH3E doesn't use any integer registers for subsequent arguments
+ once a non-float value was passed in the stack.
+ * sh.c (machine_dependent_reorg): If optimizing, put explicit
+ alignment in front label for ADDR_DIFF_VEC.
+ * sh.h (PASS_IN_REG_P): Fix SH3E case.
+ (ADJUST_INSN_LENGTH): If not optimizing, add two extra bytes length.
+
+Tue Oct 28 21:09:25 1997 Jim Wilson <wilson@cygnus.com>
+
+ * m68k.md (btst patterns): Add 5200 support.
+
+1997-10-28 Brendan Kehoe <brendan@cygnus.com>
+
+ * global.c (global_alloc): Use xmalloc instead of alloca for
+ CONFLICTS, since max_allocno * allocno_row_words alone can be more
+ than 2.5Mb sometimes.
+
+Tue Oct 28 15:06:44 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh/elf.h (PREFERRED_DEBUGGING_TYPE): Undefine before including
+ svr4.h.
+
+Tue Oct 28 10:19:01 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ From Brendan:
+ * dwarf2out.c (output_call_frame_info): Use l1 instead of ".".
+
+Mon Oct 27 16:01:14 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.h (GO_IF_LEGITIMATE_ADDRESS): Disable reg+reg.
+
+Mon Oct 27 16:11:52 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.c (machine_dependent_reorg): When -flag_delayed_branches,
+ put an use_sfunc_addr before each sfunc.
+ * sh.md (use_sfunc_addr, dummy_jump): New insns.
+ (casesi): For TARGET_SH2, emit a dummy_jump after LAB.
+
+Mon Oct 27 11:49:43 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2.h: Remove dwarf2out prototypes.
+ * tree.h: And put them here.
+ * m68k.c, i386.c: Don't include dwarf2.h.
+
+Mon Oct 27 00:02:13 1997 Paul Eggert <eggert@twinsun.com>
+
+ Remap include files with header.gcc only if user or configuration
+ file specifies "-remap".
+
+ * cccp.c (remap): New var.
+ (main): Set it if user specifies "-remap".
+ (open_include_file): Remap only if `remap' is nonzero.
+
+ * cpplib.h (struct cpp_options): New member `remap'.
+ * cpplib.c (cpp_options_init): Set remap to 0.
+ (open_include_file): Remap only if `remap' is nonzero.
+ (cpp_handle_options): Set remap if user specifies "-remap".
+
+ * i386/cygwin32.h, rs6000/cygwin32.h (CPP_SPEC): Define with -remap.
+
+Sun Oct 26 11:41:49 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c (output_call_frame_info): The CIE pointer is now a 32
+ bit PC-relative offset. The exception range table pointer is now in
+ the CIE.
+ * frame.c (dwarf_cie, dwarf_fde): Rename CIE_pointer to CIE_delta.
+ (count_fdes, add_fdes, get_cie): Adjust.
+ (cie_info, extract_cie_info, __frame_state_for): Adjust eh_ptr uses.
+
+ From H.J. Lu:
+ * frame.c (count_fdes, add_fdes): Skip linked once FDE entries.
+
+Sat Oct 25 20:29:39 1997 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * Makefile.in (float.h-nat): If float.h is to be empty, ensure it is.
+
+Sat Oct 25 20:16:52 1997 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * prefix.c: Use stdarg.h only ifdef __STDC__. Otherwise,
+ use varargs.h. Wrap header with <>, not "".
+
+Sat Oct 25 20:10:57 1997 Robert Lipe (robertl@dgii.com)
+
+ * i386/sco5.h (EH_FRAME_SECTION_ASM_OP{,_ELF,_COFF}): Define.
+ (DWARF2_UNWIND_INFO): Likewise.
+ (EXTRA_SECTIONS): Add in_eh.
+
+Sat Oct 25 12:20:58 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.h (TARGET_SWITCHES): Add -mmult-bug and -mno-mult-bug.
+ (TARGET_MULT_BUG): Define.
+ (TARGET_DEFAULT): Default to TARGET_MULT_BUG.
+ * mn10300.md (mulsi3): Handle TARGET_MULT_BUG.
+
+Fri Oct 24 15:43:57 1997 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.c (toplevel): Move include stdio.h before config.h.
+
+ (Patch from H.J. Lu, Aug 27, 1997)
+ * rs6000/linux.h (DEFAULT_VTABLE_THUNKS): New; defined as 1.
+
+ (Patch from Jeff Law, Oct 22, 1997)
+ * rs6000.c (struct machine_function): Add pic_offset_table_rtx.
+ (rs6000_{save,restore}_machine_status): Save/restore it.
+
+ * rs6000.md (movsi_got_internal_mem): New pattern to work around
+ case where GOT value did not get a register.
+ (movsi_got_internal_mem splitter): Split above pattern.
+
+ (Patch from Geoffrey Keating, Oct 21, 1997)
+ * rs6000.c (rs6000_stack_info): Avoid creating a stack
+ frame under System V ABI if we only need to save the LR.
+
+ (Patch from Joel Sherrill, Sep 1, 1997)
+ * rs6000/sysv4.h (SUBTARGET_SWITCHES): Add new macro
+ EXTRA_SUBTARGET_SWITCHES, which defaults to nothing.
+
+ (Patch from Geoffrey Keating, Oct 20, 1997)
+ * rs6000/t-ppccomm (CRTSTUFF_T_CFLAGS{,_S}): Add -msdata=none
+ switch.
+
+Fri Oct 24 15:25:50 1997 Doug Evans <dje@cygnus.com>
+
+ * sparc.h (ASM_SPEC): Delete.
+
+Fri Oct 24 13:16:24 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mn10200.c (indirect_memory_operand): Delete unused function.
+ * mn10200.h (EXTRA_CONSTRAINT): Handle 'R'.
+ * mn10200.md (bset, bclr insns): Handle output in a reg too.
+
+ * mn10300.c (symbolic_operand, legitimize_address): New functions.
+ * mn10300.h (LEGITIMIZE_ADDRESS): Call legitimize_address.
+ (GO_IF_LEGITIMATE_ADDRESS): Don't allow base + symbolic.
+
+Thu Oct 23 08:03:59 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * dbxout.c (dbxout_start_new_source_file): Use output_quoted_string
+ for FILENAME.
+
+Tue Oct 21 16:18:13 1997 Paul Eggert <eggert@twinsun.com>
+
+ * winnt/win-nt.h (CPP_SPEC): Remove reference to obsolete
+ option -lang-c-c++-comments.
+
+Tue Oct 21 10:00:20 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.md (movqi, movhi): Avoid using address registers as
+ destinations unless absolutely necessary.
+
+ * mn10200.c (expand_prologue): Fix typo.
+
+ * mn10200.h (GO_IF_LEGITIMATE_ADDRESS): Do not allow indexed addresses.
+ * mn10200.md (neghi2): Provide an alternative which works if
+ the input and output register are the same.
+
+ * mn10300.c (print_operand): Handle 'S'.
+ * mn10300.md (ashlsi3, lshrsi3, ashrsi3): Use %S for
+ shift amount in last alternative
+
+ * mn10300.c (expand_epilogue): Rework to handle register restores
+ in "ret" and "retf" instructions correctly.
+
+Tue Oct 21 07:35:19 1997 Richard Earnshaw (rearnsha@arm.com)
+
+ * arm.md (insv): Avoid writing result into a paradoxical subreg.
+
+Tue Oct 21 07:12:28 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh/elf.h (PREFERRED_DEBUGGING_TYPE): Don't redefine.
+
+Mon Oct 20 12:04:04 1997 Nick Clifton <nickc@cygnus.com>
+
+ * v850.h (CPP_SPEC): Define __v850__.
+ (CPP_PREDEFINES): Do not define __v850__.
+
+ * xm-v850.h: Use __v850 rather than __v850__ to identify v850 port.
+
+Mon Oct 20 17:29:55 1997 Doug Evans <dje@cygnus.com>
+
+ * sparc.h (SPARC_V9,SPARC_ARCH64): Delete.
+ (DEFAULT_ARCH32_P): New macro.
+ (TARGET_ARCH{32,64}): Allow compile time or runtime selection.
+ (enum cmodel): Declare.
+ (sparc_cmodel_string,sparc_cmodel): Declare.
+ (SPARC_DEFAULT_CMODEL): Provide default.
+ (TARGET_{MEDLOW,MEDANY}): Renamed to TARGET_CM_{MEDLOW,MEDANY}.
+ (TARGET_FULLANY): Deleted.
+ (TARGET_CM_MEDMID): New macro.
+ (CPP_CPU_DEFAULT_SPEC): Renamed from CPP_DEFAULT_SPEC.
+ (ASM_CPU_DEFAULT_SPEC): Renamed from ASM_DEFAULT_SPEC.
+ (CPP_PREDEFINES): Take out stuff now handled by %(cpp_arch).
+ (CPP_SPEC): Rewrite.
+ (CPP_ARCH{,32,64,_DEFAULT}_SPEC): New macros.
+ (CPP_{ENDIAN,SUBTARGET}_SPEC): New macros.
+ (ASM_ARCH{,32,64,_DEFAULT}_SPEC): New macros.
+ (ASM_SPEC): Add %(asm_arch).
+ (EXTRA_SPECS): Rename cpp_default to cpp_cpu_default.
+ Rename asm_default to asm_cpu_default.
+ Add cpp_arch32, cpp_arch64, cpp_arch_default, cpp_arch, cpp_endian,
+ cpp_subtarget, asm_arch32, asm_arch64, asm_arch_default, asm_arch.
+ (NO_BUILTIN_{PTRDIFF,SIZE}_TYPE): Define ifdef SPARC_BI_ARCH.
+ ({PTRDIFF,SIZE}_TYPE): Provide 32 and 64 bit values.
+ (MASK_INT64,MASK_LONG64): Delete.
+ (MASK_ARCH64): Renamed to MASK_64BIT.
+ (MASK_{MEDLOW,MEDANY,FULLANY,CODE_MODEL}): Delete.
+ (EMBMEDANY_BASE_REG): Renamed from MEDANY_BASE_REG.
+ (TARGET_SWITCHES): Always provide 64 bit options.
+ (ARCH64_SWITCHES): Delete.
+ (TARGET_OPTIONS): New option -mcmodel=.
+ (INT_TYPE_SIZE): Always 32.
+ (MAX_LONG_TYPE_SIZE): Define ifdef SPARC_BI_ARCH.
+ (INIT_EXPANDERS): sparc64_init_expanders renamed to sparc_init_....
+ (FUNCTION_{,BLOCK_}PROFILER): Delete TARGET_EMBMEDANY support.
+ (PRINT_OPERAND_PUNCT_VALID_P): Add '_'.
+ * sparc/linux-aout.h (CPP_PREDEFINES): Take out stuff handled by
+ CPP_SPEC.
+ (CPP_SUBTARGET_SPEC): Renamed from CPP_SPEC.
+ * sparc/linux.h: Likewise.
+ * sparc/linux64.h (SPARC_V9,SPARC_ARCH64): Delete.
+ (ASM_CPU_DEFAULT_SPEC): Renamed from ASM_DEFAULT_SPEC.
+ (TARGET_DEFAULT): Delete MASK_LONG64, MASK_MEDANY, add MASK_64BIT.
+ (SPARC_DEFAULT_CMODEL): Define.
+ (CPP_PREDEFINES): Take out stuff handled by CPP_SPEC.
+ (CPP_SUBTARGET_SPEC): Renamed from CPP_SPEC.
+ (LONG_DOUBLE_TYPE_SIZE): Define.
+ (ASM_SPEC): Add %(asm_arch).
+ * sparc/sol2.h (CPP_PREDEFINES): Take out stuff handled by CPP_SPEC.
+ (CPP_SUBTARGET_SPEC): Renamed from CPP_SPEC.
+ (TARGET_CPU_DEFAULT): Add ultrasparc case.
+ * sparc/sp64-aout.h (SPARC_V9,SPARC_ARCH64): Delete.
+ (TARGET_DEFAULT): MASK_ARCH64 renamed to MASK_64BIT.
+ (SPARC_DEFAULT_CMODEL): Define.
+ * sparc/sp64-elf.h (SPARC_V9,SPARC_ARCH64): Delete.
+ (TARGET_DEFAULT): MASK_ARCH64 renamed to MASK_64BIT. Delete
+ MASK_LONG64, MASK_MEDANY.
+ (SPARC_DEFAULT_CMODEL): Define.
+ (CPP_PREDEFINES): Delete.
+ (CPP_SUBTARGET_SPEC): Renamed from CPP_SPEC.
+ (ASM_SPEC): Add %(asm_arch).
+ (LONG_DOUBLE_TYPE_SIZE): Define.
+ (DWARF2_DEBUGGING_INFO): Define.
+ * sparc/splet.h (CPP_SPEC): Delete.
+ * sparc/sysv4.h (CPP_PREDEFINES): Take out stuff handled by CPP_SPEC.
+ (FUNCTION_BLOCK_PROFILER): Delete TARGET_EMBMEDANY support.
+ (BLOCK_PROFILER): Likewise.
+ * sparc.c (sparc_cmodel_string,sparc_cmodel): New globals.
+ (sparc_override_options): Handle code model selection.
+ (sparc_init_expanders): Renamed from sparc64_init_expanders.
+ * sparc.md: TARGET_<code_model> renamed to TARGET_CM_....
+ TARGET_MEDANY renamed to TARGET_CM_EMBMEDANY.
+ (sethi_di_embmedany_{data,text}): Renamed from sethi_di_medany_....
+ (sethi_di_fullany): Delete.
+
+Mon Oct 20 17:20:17 1997 Jim Wilson <wilson@cygnus.com>
+
+ * mips.c (compute_frame_size): Not a leaf function if profile_flag set.
+
+Sun Oct 19 17:46:02 1997 Douglas Rupp <rupp@gnat.com>
+
+ * cccp.c (OBJECT_SUFFIX): Add default definition.
+ (main): Use OBJECT_SUFFIX.
+ (VMS_{freopen,fopen,open}): Use instead of using macro on
+ unprefixed name.
+ (VMS_fstat): Use decc$fstat explicitly, not via macro.
+
+Sun Oct 19 09:07:38 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * prefix.c (get_key_value): Initialize prefix to null.
+ * Makefile.in (prefix.o): Properly pass in prefix.
+
+ * objc/Make-lang.in (objc.distdir): Make the objc directory.
+ * Makefile.in (distdir-start): No longer depend on objc-parse.[cy].
+ Don't copy objc files here.
+ (TAGS): Don't delete objc-parse.y
+
+ * i386/mingw32.h (LIB_SPEC): Add -ladvapi32.
+ (STARTFILE_SPEC): If -dll, use dllcrt1.o.
+ (INCOMING_RETURN_ADDR_RTX): Undefine.
+
+ * Makefile.in (float.h-nat): Avoid using /dev/null for input,
+ since it's not present on all systems.
+
+ * prefix.c : New file.
+ * Makefile.in (xgcc, cccp, cppmain, fix-header): Add prefix.o.
+ (prefix.o): New rule.
+ * cccp.c (update_path): Add extern definition.
+ (struct default_include): New field `component'.
+ (default_include): Add initializer for new field to all entries.
+ (new_include_prefix): Take new arg and call update_path;
+ all callers changed.
+ Add trailing "." before doing stat of file.
+ * cpplib.c (update_path): Add extern definition.
+ (struct default_include): New field `component'.
+ (default_include): Add initializer for new field to all entries.
+ (cpp_start_read): Call update_path.
+ * gcc.c (upate_path): Add extern definition.
+ (find_a_file): For MS-DOS-based, consider a drive spec as absolute.
+ (add_prefix): New arg component and pass to update_path;
+ all callers changed.
+ * netbsd.h (INCLUDE_DEFAULTS): Add `component' to values.
+ * i386/freebsd.h, mips/netbsd.h, winnt/win-nt.h: Likewise.
+ * i386/mingw32 (STANDARD_INCLUDE_COMPONENT): New macro.
+ * vax/vms.h (INCLUDE_DEFAULTS): New macro.
+ * vax/xm-vms.h (INCLUDE_DEFAULTS): Delete from here.
+
+ * sparc/sol2.h (WIDEST_HARDWARE_FP_SIZE): New macro.
+
+ * i386.c (ix86_prologue): Conditionalize Dwarf2 calls
+ on #ifdef INCOMING_RETURN_ADDR_RTX.
+ * i386.md (allocate_stack): Fix incorrect operand number.
+
+ * alpha.c (vmskrunch): Deleted.
+ (output_prolog, VMS): Use alloca for entry_label and don't
+ truncate to 64 characters.
+ * alpha/vms.h (vmskrunch): No longer define.
+ (ENCODE_SECTION_INFO): No longer call vmskrunch.
+ (ASM_DECLARE_FUNCTION_NAME): No longer override.
+
+ * toplev.c (output_quoted_string): Call new OUTPUT_QUOTED_STRING macro.
+ * i386/mingw32.h (OUTPUT_QUOTED_STRING): New macro.
+
+ * stmt.c (using_eh_for_cleanups_p): New variable.
+ (using_eh_for_cleanups): New function.
+ (expand_decl_cleanup): Don't call expand_eh_region_start_tree
+ unless using EH for cleanups.
+
+ * function.c (purge_addressof_1): When dealing with a
+ bare (address (mem)), verify that what's inside is valid in insn.
+ (instantiate_virtual_regs_1, case ADDRESSOF): If have MEM, just
+ do instantiation inside and leave alone here.
+
+ * fold-const.c (fold, case COND_EXPR): Allow creation
+ of {MIN,MAX}_EXPR, but preserve info on orginal comparison code.
+
+ * function.h (restore_tree_status): Update prototype.
+
+ * cse.c (cse_basic_block): Flush the hash table every 1,000 insns.
+
+Sat Oct 18 13:48:14 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * longlong.h (count_leading_zeros): Add missing casts to USItype.
+
+Sat Oct 18 13:35:09 1997 Marc Lehmann (pcg@goof.com)
+
+ * toplev.c (main): Don't execute "ps" under MSDOS.
+
+Sat Oct 18 13:26:42 1997 Richard Earnshaw (rearnsha@arm.com)
+
+ * function.c (instantiate_virtual_regs): Don't instantiate the
+ stack slots for the parm registers until after the insns have had
+ their virtuals instantiated.
+
+ * varargs.h (va_arg): For ARM systems, definition is endian-dependent.
+ * stdarg.h (va_arg): Likewise.
+
+Sat Oct 18 11:23:04 1997 Nick Clifton <nickc@cygnus.com>
+
+ * final.c (end_final): Use ASM_OUTPUT_ALIGNED_DECL_LOCAL if defined.
+ * varasm.c (assemble_static_space): Likewise.
+ (assemble_variable): Use ASM_OUTPUT_ALIGNED_DECL_{COMMON,LOCAL} if def.
+
+Sat Oct 18 11:02:19 1997 Doug Evans <dje@canuck.cygnus.com>
+
+ * expr.c (use_group_regs): Don't call use_reg unless REG.
+
+Sat Oct 18 10:39:22 1997 Jim Wilson <wilson@cygnus.com>
+
+ * cse.c (simplify_ternary_operation, case IF_THEN_ELSE): Collapse
+ redundant conditional moves to single operand.
+
+ * expmed.c (extract_bit_field): Don't make flag_force_mem disable
+ extzv for memory operands.
+
+Sat Oct 18 09:58:44 1997 Jeffrey A Law <law@cygnus.com>
+
+ * ptx4.h: Fix typo.
+
+ * integrate.c (save_for_inline_copying): Avoid undefined pointer
+ operations.
+ (expand_inline_function): Likewise.
+
+Sat Oct 18 09:49:46 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * tree.c (restore_tree_status): Also free up temporary storage
+ when we finish a toplevel function.
+ (dump_tree_statistics): Print stats for backend obstacks.
+
+ * libgcc2.c (__throw): Don't copy the return address.
+ * dwarf2out.c (expand_builtin_dwarf_reg_size): Ignore return address.
+
+ * tree.c (expr_tree_cons, build_expr_list, expralloc): New fns.
+ * tree.h: Declare them.
+
+ * except.c (exceptions_via_longjmp): Initialize to 2 (uninitialized).
+ * toplev.c (main): Initialize exceptions_via_longjmp.
+
+ * tree.c: Add extra_inline_obstacks.
+ (save_tree_status): Use it.
+ (restore_tree_status): If this is a toplevel inline obstack and we
+ didn't want to save anything on it, recycle it.
+ (print_inline_obstack_statistics): New fn.
+ * function.c (pop_function_context_from): Pass context to
+ restore_tree_status.
+
+Sat Oct 18 09:45:22 1997 Michael Meissner <meissner@cygnus.com>
+
+ * profile.c (get_file_function_name): Remove declaration.
+ * c-lang.c (finish_file): Likewise.
+
+Sat Oct 18 09:35:40 1997 Tristan Gingold <gingold@messiaen.enst.fr>
+
+ * expr.c (expand_assignment): If -fcheck-memory-usage, add call to
+ chkr_check_addr if size not zero.
+ (expand_expr, case COMPONENT_REF): Likewise.
+ (expand_builtin): If -fcheck_memory-usage, check memory usage
+ of operands for strlen, strcpy, and memcpy or don't use builtins
+ for memcmp and strcmp.
+ * expr.h (chkr_check_str_libfunc): Declare.
+ * optabs.c (chkr_check_str_libfunc): New variable.
+ (init_optabs): Initialize it.
+
+Sat Oct 18 09:29:21 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * i386/cygwin32.h (ASM_COMMENT_START): Redefine.
+
+Sat Oct 18 09:23:54 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * frame.c (__frame_state_for): Execute the FDE insns until the
+ current pc value is strictly bigger than the target pc value.
+
+ * expr.c (expand_expr, case TARGET_EXPR): If target and slot has
+ no DECL_RTL, then call mark_addressable again for the slot after
+ we give it RTL.
+
+Sat Oct 18 08:58:36 1997 Manfred Hollstein (manfred@lts.sel.alcatel.de)
+
+ * m88k/dolph.h (INITIALIZE_TRAMPOLINE): Delete here.
+ * m88k/sysv3.h (INITIALIZE_TRAMPOLINE): Unconditionally define.
+ * libgcc2.c (__enable_execute_stack): Check for __sysV88__ not
+ __DOLPHIN__.
+
+ * m68k/mot3300.h (ASM_OUTPUT_ALIGN): Accept any alignment.
+ * dwarf2out.c (output_call_frame_info): Call app_enable and
+ app_disable to let GNU as accept the generated comments.
+
+ * m88k.c (m88k_begin_prologue): Remove superfluous backslash.
+
+Sat Oct 18 08:50:04 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * flow.c (print_rtl_with_bb): Cast alloca return values.
+
+Sat Oct 18 08:47:46 1997 Douglas Rupp <rupp@gnat.com>
+
+ * alpha/vms.h (LITERALS_SECTION_ASM_OP, ASM_OUTPUT_DEF):
+ (EXTRA_SECTION_FUNCTIONS): Add literals_section.
+ (EXTRA_SECTIONS): Include in_literals.
+
+Sat Oct 18 08:40:55 1997 Nick Burrett <nick.burrett@btinternet.com>
+
+ * cpplib.c: (initialize_builtins): Cast all string constants for the
+ function install, to type U_CHAR *.
+ (eval_if_expression): Likewise.
+ * cppexp.c: (cpp_lex): Cast string, for cpp_lookup, to type U_CHAR *.
+
+Sat Oct 18 08:38:13 1997 Ken Raeburn <raeburn@cygnus.com>
+
+ * c-lex.c (check_newline) At `skipline', flush nextchar as well.
+
+Sat Oct 18 08:17:13 1997 Paul Russell <Paul.Russell@RustCorp.com.au>
+
+ * input.h (struct file_stack): Added indent_level.
+ * c-lex.c (check_newline): Add {}-count & balance warning.
+
+Sat Oct 18 06:54:39 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * regclass.c (record_address_regs, case PLUS): Refine how to choose
+ which is base and index.
+
+ * alpha.h (FUNCTION_VALUE): Use word_mode only for integral types,
+ not types with integral modes.
+
+ * final.c (alter_cond): Properly conditionalize forward decl.
+
+ * tree.h (SAVE_EXPR_NOPLACEHOLDER): New flag.
+ * tree.c (contains_placeholder_p, case SAVE_EXPR): Avoid
+ checking each SAVE_EXPR more than once.
+
+ * rs6000.md (nonlocal_goto_receiver): Don't test pool size.
+
+ * i386.c (load_pic_register): New function.
+ (ix86_prologue): Code to load PIC register moved to new function.
+ Don't emit blockage if not generating RTL.
+ * i386.md (nolocal_goto_receiver): New pattern.
+
+ * i386.c: Major cleanup, mostly reformatting.
+ Include dwarf2.h.
+ Remove many spurious casts.
+ (ix86_{pro,epi}logue): Use proper mode for SET rtx.
+
+Fri Oct 17 17:13:42 1997 David S. Miller <davem@tanya.rutgers.edu>
+
+ * sparc/linux64.h (LINK_SPEC): Dynamic linker is ld-linux64.so.2.
+ * sparc.h (FUNCTION_PROFILER): Fix format string when TARGET_MEDANY.
+ * sparc.c (output_double_int): Output DI mode values
+ correctly when HOST_BITS_PER_WIDE_INT is 64.
+ (output_fp_move_quad): If TARGET_V9 and not TARGET_HARD_QUAD, use
+ fmovd so it works if a quad float ends up in one of the upper 32
+ float regs.
+ * sparc.md (pic_{lo_sum,sethi}_di): New patterns for PIC support
+ on sparc64.
+
+Fri Oct 17 16:27:07 1997 Doug Evans <dje@cygnus.com>
+
+ * sparc/sp64-elf.h (TARGET_DEFAULT): Delete MASK_STACK_BIAS.
+ * sparc.h (PROMOTE_MODE): Promote small ints if arch64.
+ (PROMOTE_FUNCTION_ARGS,PROMOTE_FUNCTION_RETURN): Define.
+ (SPARC_FIRST_FP_REG, SPARC_FP_REG_P): New macros.
+ (SPARC_{OUTGOING,INCOMING}_INT_ARG_FIRST): New macros.
+ (SPARC_FP_ARG_FIRST): New macro.
+ (CONDITIONAL_REGISTER_USAGE): All v9 fp regs are volatile now.
+ (REG_ALLOC_ORDER,REG_LEAF_ALLOC_ORDER): Reorganize fp regs.
+ (NPARM_REGS): There are 32 fp argument registers now.
+ (FUNCTION_ARG_REGNO_P): Likewise.
+ (FIRST_PARM_OFFSET): Update to new v9 abi.
+ (REG_PARM_STACK_SPACE): Define for arch64.
+ (enum sparc_arg_class): Delete.
+ (sparc_arg_count,sparc_n_named_args): Delete.
+ (struct sparc_args): Redefine and use for arch32 as well as arch64.
+ (GET_SPARC_ARG_CLASS,ROUND_REG,ROUND_ADVANCE): Delete.
+ (FUNCTION_ARG_ADVANCE): Rewrite.
+ (FUNCTION_ARG,FUNCTION_INCOMING_ARG): Rewrite.
+ (FUNCTION_ARG_{PARTIAL_NREGS,PASS_BY_REFERENCE}): Rewrite.
+ (FUNCTION_ARG_CALLEE_COPIES): Delete.
+ (FUNCTION_ARG_{PADDING,BOUNDARY}): Define.
+ (STRICT_ARGUMENT_NAMING): Define.
+ (doublemove_string): Declare.
+ * sparc.c (sparc_arg_count,sparc_n_named_args): Delete.
+ (single_move_string): Use GEN_INT, and HOST_WIDE_INT.
+ (doublemove_string): New function.
+ (output_move_quad): Clean up some of the arch64 support.
+ (compute_frame_size): Add REG_PARM_STACK_SPACE if arch64.
+ Don't add 8 bytes of reserved space if arch64.
+ (sparc_builtin_saveregs): Combine arch32/arch64 versions.
+ (init_cumulative_args): New function.
+ (function_arg_slotno): New static function.
+ (function_arg,function_arg_partial_nregs): New functions.
+ (function_arg_{pass_by_reference,advance}): New functions.
+ (function_arg_padding): New function.
+ * ginclude/va-sparc.h: Rewrite v9 support.
+
+Fri Oct 17 13:21:45 EDT 1997 Philip Blundell <pb@nexus.co.uk>
+
+ * arm/netbsd.h (TYPE_OPERAND_FMT): use % not @ to avoid
+ problems with comments.
+
+Fri Oct 17 13:00:38 EDT 1997 Richard Earnshaw (rearnsha@arm.com)
+
+ * arm/aout.h (ASM_OUTPUT_LABEL): Define in place of ARM_OUTPUT_LABEL.
+ * arm/aof.h (ASM_OUTPUT_LABEL): Likewise.
+ * arm.h (ASM_OUTPUT_LABEL): Delete.
+ (ASM_OUTPUT_INTERNAL_LABEL): Call ASM_OUTPUT_LABEL directly.
+ * arm.c (arm_asm_output_label): Delete.
+
+ * arm/aout.h (ASM_OUTPUT_ALIGNED_LOCAL): Do what is needed inline.
+ * arm.c (output_lcomm_directive): Delete.
+
+ * arm.h (PUSH_ROUNDING): Delete; this is not what happens.
+ (ACCUMULATE_OUTGOING_ARGS): Define.
+ (PROMOTE_FUNCTION_ARGS): Define.
+ (INITIAL_ELIMINATION_OFFSET): Take current_function_outgoing_args_size
+ into account.
+ * arm.c (use_return_insn, output_func_epilogue,
+ arm_expand_prologue): Likewise.
+
+ * arm.c (const_ok_for_arm): If HOST_WIDE_INT more than 32 bits,
+ insist high bits are all zero or all one.
+ (output_move_double): Handle case where CONST_INT is more than 32 bits.
+
+ * arm.c (load_multiple_sequence): Support SUBREG of MEM.
+ (store_multiple_sequence): Likewise.
+
+ * arm.c (arm_gen_load_multiple): New args UNCHANGING_P and IN_STRUCT_P.
+ Use them if we create any new MEMs; all callers changed.
+ (arm_gen_store_multiple): Likewise.
+ (arm_gen_movstrqi): Preserve RTX_UNCHANGING_P and MEM_IN_STRUCT_P
+ on any MEMs created.
+
+ * arm.h (ASM_OUTPUT_MI_THUNK): Use branch instruction to jump to label.
+ (RETURN_ADDR_RTX): Use NULL_RTX rather than casting zero.
+ (output_move_double): Correct typo in prototype.
+
+ * arm.md (movsfcc): If not TARGET_HARD_FLOAT, ensure operand[3] valid.
+
+ * arm/netbsd.h (CPP_PREDEFINES): Always predefine __arm__.
+ * arm/xm-netbsd.h (SYS_SIGLIST_DECLARED, HAVE_STRERROR): Define these.
+
+ * arm/t-netbsd (CROSS_LIBGCC1, LIB1ASMSRC, LIB1ASMFUNCS) Don't define
+ these any more.
+ * configure.in (arm-*-netbsd*): Pick up t-netbsd before arm/t-netbsd.
+
+Thu Oct 16 19:31:22 1997 Jim Wilson <wilson@cygnus.com>
+
+ * v850.c (ep_memory_offset): New function.
+ (ep_memory_operand, substitute_ep_register, v850_reorg): Call it.
+
+ * v850.h (CONST_OK_FOR_*): Add and correct comments.
+ (CONSTANT_ADDRESS_P): Add comment.
+ (EXTRA_CONSTRAINT): Define 'U'.
+ * v850.md: Add comments on bit field instructions.
+ (addsi3): Delete &r/r/r alternative. Add r/r/U alternative.
+ (lshrsi3): Use N not J constraint.
+
+ * v850.md (v850_tst1+1): New define_split for tst1 instruction.
+
+ * v850.c (reg_or_0_operand): Call register_operand.
+ (reg_or_int5_operand): Likewise.
+ * v850.h (MASK_BIG_SWITCH, TARGET_BIG_SWITCH): New macros.
+ (TARGET_SWITCHES): Add "big-switch".
+ (ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT, CASE_VECTOR_MODE,
+ ASM_OUTPUT_BEFORE_BASE_LABEL): Add support for TARGET_BIG_SWITCH.
+ (CASE_DROPS_THROUGH): Comment out.
+ (CASE_VECTOR_PC_RELATIVE, JUMP_TABLES_IN_TEXT_SECTION): Define.
+ * v850.md (cmpsi): Delete compare mode.
+ (casesi): New pattern.
+
+ * v850.h (CONST_OK_FOR_N): Delete redundant compare against zero.
+ * v850.md (ashlsi3): Use SImode not QImode for shift count.
+ (lshrsi3): Likewise.
+
+ * v850.c (print_operand): Add 'c', 'C', and 'z' support. Delete
+ unreachable switch statement after 'b' support. Remove "b" from
+ strings for 'b' support.
+ * v850.md (branch_normal, branch_invert): Change %b to b%b.
+
+Thu Oct 16 13:08:45 1997 Doug Evans <dje@cygnus.com>
+
+ * configure.in (sparc-*-elf*): New target.
+
+Wed Oct 15 22:30:37 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * h8300.h (REG_CLASS_CONTENTS): AP is a general register.
+ (REG_OK_FOR_BASE_P, ! REG_OK_STRICT case): Reject special registers.
+
+Wed Oct 15 22:00:57 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.md (movhi+1): Add x/r alternative.
+
+ * sh/elf.h (HANDLE_SYSV_PRAGMA): Undefine.
+
+ * va-sh.h (va_arg): Fix big endian bugs for small integers.
+
+Wed Oct 15 21:34:45 1997 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.md (udivsi3, divsi3): Split into MQ and non-MQ cases for
+ PPC601.
+ (umulsidi3,umulsi3_highpart): Likewise.
+ (smulsi3_highpart_no_mq): Add !TARGET_POWER.
+
+Wed Oct 15 18:45:31 1997 Doug Evans <dje@cygnus.com>
+
+ * sparc/t-sp64 (LIBGCC2_CFLAGS): Delete.
+
+Wed Oct 15 17:17:33 1997 Jeffrey A Law (law@cygnus.com)
+
+ * pa.c (following_call): Fail if the CALL_INSN is an indirect call.
+
+Wed Oct 1 17:52:09 1997 Douglas Rupp <rupp@gnat.com>
+
+ * vms.h (UNALIGNED_{SHORT,INT,DOUBLE_INT}_ASM_OP): Define.
+
+Wed Oct 1 16:09:42 1997 Benjamin Kosnik <bkoz@melange.gnu.ai.mit.edu>
+
+ * fixincludes: Fix sys/param.h so that MAXINT will not be redefined
+ on HPUX.
+
+Wed Oct 1 08:08:21 1997 Jeffrey A Law <law@chunks.cygnus.com>
+
+ * cse.c (this_insn_cc0_mode): Initialize.
+
+Wed Oct 1 07:22:12 1997 Richard Henderson <rth@cygnus.com>
+
+ * i386.h (RETURN_ADDR_RTX): Use FRAME arg, not ap.
+
+Tue Sep 30 19:19:58 1997 Jim Wilson <wilson@cygnus.com>
+
+ * except.c (find_exception_handler_labels): Correct argument to free.
+
+Fri Sep 26 14:06:45 1997 Mike Stump <mrs@wrs.com>
+
+ * c-decl.c (start_struct): Ensure that structs with forward
+ declarations are in fact packed when -fpack-struct is given.
+
+Wed Sep 24 11:31:24 1997 Mike Stump <mrs@wrs.com>
+
+ * stor-layout.c (layout_record): Ignore STRUCTURE_SIZE_BOUNDARY if
+ packing structure. This allows a structure with only bytes to be
+ aligned on a byte boundary and have no padding on a m68k.
+
+Tue Sep 30 11:00:00 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * except.c (find_exception_handler_labels): Free LABELS when done.
+
+Tue Sep 30 10:47:33 1997 Paul Eggert <eggert@twinsun.com>
+
+ * cexp.y, cppexp.c (HOST_BITS_PER_WIDE_INT):
+ Define only if not already defined.
+
+Mon Sep 29 17:55:55 1997 Gavin Koch <gavin@cygnus.com>
+
+ * c-decl.c (warn_implicit): Deleted.
+ (warn_implicit_int, mesg_implicit_function_declaration}): New vars.
+ (c_decode_option): For -Wimplicit, set both new variables.
+ Add -Wimplicit-function-declarations, -Wimplicit-int,
+ and -Werror-implicit-function-declaration.
+ (implicitly_declare, grokdeclarator): Use new flags.
+ * toplev.c (lang_options): Add new -W options.
+
+Mon Sep 29 17:55:15 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * c-common.c (check_format_info): Add check for scanf into
+ constant object or via constant pointer type.
+
+Mon Sep 29 16:10:12 1997 Richard Henderson <rth@cygnus.com>
+
+ * alpha.md (beq): For registers and ints 0-255, use cmpeq+bne.
+ (bne): Likewise for cmpeq+beq.
+
+Mon Sep 29 15:58:22 1997 Doug Evans <dje@cygnus.com>
+
+ * reload1.c (reload_cse_simplify_set): Fix return values.
+
+Mon Sep 29 08:21:35 1997 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de>
+
+ * i386.c (notice_update_cc): Use reg_overlap_mentioned_p.
+
+Sun Sep 28 18:59:58 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * libgcc2.c (__throw): Fix thinko.
+
+Sun Sep 28 12:00:52 1997 Mark Mitchell <mmitchell@usa.net>
+
+ * cplus-dem.c (demangle_template): Add new parameter. Handle new
+ template-function mangling.
+ (consume_count_with_underscores): New function.
+ (demangle_signature): Handle new name-mangling scheme.
+
+Sun Sep 28 11:19:09 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * flow.c (print_rtl_with_bb): Reformat messages about BB boundaries.
+
+ * calls.c: Include regs.h.
+ * profile.c: Likewise.
+ * Makefile.in (calls.o, profile.o): Depend on regs.h.
+ * except.h (expand_builtin_dwarf_reg_size): Put in #ifdef TREE_CODE.
+
+ * tree.h (get_file_function_name): Add decl.
+ * dwarf2out.c (output_call_frame_info): Don't cast its result.
+
+Sun Sep 28 10:58:21 1997 Manfred Hollstein <manfred@s-direktnet.de>
+
+ * Makefile.in (sub-makes): Pass value of LANGUAGES.
+
+Sun Sep 28 10:52:59 1997 Ian Dall <ian.dall@dsto.defence.gov.au>
+
+ * regs.h (SMALL_REGISTER_CLASSES): Default to 0.
+ * calls.c (prepare_call_address, expand_call):
+ Remove #if test on SMALL_REGISTER_CLASSES.
+ * combine.c (can_combine_p, combinable_i3pat, try_combine): Likewise.
+ * cse.c (canon_hash): Likewise.
+ * function.c (expand_function_start): Likewise.
+ * jump.c (jump_optimize): Likewise.
+ * local-alloc.c (optimize_reg_copy_1): Likewise.
+ * loop.c (scan_loop, valid_initial_value_p): Likewise.
+ * profile.c (output_arc_profiler): Likewise.
+ * reload.c (push_secondary_reload, push_reload): Likewise.
+ (combine_reloads): Likewise.
+ * reload1.c (reload, scan_paradoxical_subregs): Likewise.
+ (order_regs_for_reload, reload_as_needed): Likewise.
+ (choose_reload_regs): Likewise.
+ (merge_assigned_reloads): Declare unconditionally.
+
+Sat Sep 27 11:02:38 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * c-decl.c (init_decl_processing): Add __builtin_dwarf_reg_size.
+ * tree.h (built_in_function): Likewise.
+ * expr.c (expand_builtin): Likewise.
+ * except.h: Likewise.
+ * dwarf2out.c (expand_builtin_dwarf_reg_size): New fn.
+ * libgcc2.c (copy_reg): New fn.
+ (__throw): Use it.
+
+Fri Sep 26 09:00:13 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * frame.c (gansidecl.h): New include, for PROTO.
+ * dwarf2out.c: Move inclusion of dwarf2.h down.
+ (dwarf2out_cfi_label): Don't declare here.
+ * dwarf2.h (dwarf2out_{do_frame,cfi_label,def_cfa}): New declarations.
+ (dwarf2out_{window_save,args_size,reg_save,return_save}): Likewise.
+ (dwarf2out_{return_reg,begin_prologue,end_epilogue}): Likewise.
+ * m68k.c (dwarf2.h): Include.
+ (output_function_prologue): Add dwarf2 support.
+ * m68k.h (INCOMING_RETURN_ADDR_RTX, DWARF_FRAME_REGNUM): New macros.
+ (INCOMING_FRAME_SP_OFFSET): Likewise.
+
+ * integrate.c (copy_rtx_and_substitute, case ADDRESSOF): New case.
+
+ * integrate.c (expand_inline_function): Make sure there is at
+ least one insn that can be used as an insertion point.
+
+Fri Sep 26 08:54:59 1997 Paul Eggert <eggert@twinsun.com>
+
+ * c-typeck.c (build_binary_op): Warn about comparing signed vs
+ unsigned if -W is specified and -Wno-sign-compare is not.
+ * c-decl.c (warn_sign_compare): Initialize to -1.
+ (c_decode_option): -Wall no longer implies -Wsign-compare.
+
+Wed Sep 24 21:34:06 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c: s/flag_verbose_asm/flag_debug_asm/
+
+Wed Sep 24 19:17:08 1997 Doug Evans <dje@cygnus.com>
+
+ * sparc.md (get_pc_via_call): Renamed from get_pc_sp32.
+ (get_pc_via_rdpc): Renamed from get_pc_sp64.
+ * sparc.c (finalize_pic): Update call to gen_get_pc_via_call.
+
+Wed Sep 24 18:38:22 1997 David S. Miller <davem@tanya.rutgers.edu>
+
+ * sparc.h (ASM_CPU_SPEC): Pass -Av9a for v8plus, ultrasparc.
+ (TARGET_OPTIONS): Add -malign-loops=, -malign-jumps=,
+ and -malign-functions=.
+ (sparc_align_{loops,jumps,funcs}_string): Declare.
+ (sparc_align_{loops,jumps,funcs}): Declare.
+ (DEFAULT_SPARC_ALIGN_FUNCS): New macro.
+ (FUNCTION_BOUNDARY): Use sparc_align_funcs.
+ (STACK_BIAS): Define.
+ (SPARC_SIMM*_P): Cast to unsigned HOST_WIDE_INT, then perform test.
+ (SPARC_SETHI_P): New macro.
+ (CONST_OK_FOR_LETTER_P): Use it.
+ (ASM_OUTPUT_ALIGN_CODE): Define.
+ (ASM_OUTPUT_LOOP_ALIGN): Define.
+ * sparc.c (sparc_align_{loops,jumps,funcs}_string): New globals.
+ (sparc_align_{loops,jumps,funcs}): New globals.
+ (sparc_override_options): Handle -malign-loops=, -malign-jumps=,
+ -malign-functions=.
+ (move_operand): Use SPARC_SETHI_P.
+ (arith_double_operand): Cast to unsigned HOST_WIDE_INT, then test.
+ (arith11_double_operand): Likewise.
+ (arith10_double_operand): Likewise.
+ (finalize_pic): Finish sparc64 support.
+ (emit_move_sequence): Use SPARC_SETHI_P. Simplify low part of
+ 64 bit constants if able.
+ (output_fp_move_quad): Don't use fmovq unless TARGET_HARD_QUAD.
+ (sparc_builtin_saveregs [sparc64]): Don't save fp regs if ! TARGET_FPU.
+ * sparc.md: Use GEN_INT instead of gen_rtx.
+ (get_pc_sp32): Use for sparc64 as well.
+ (lo_sum_di_sp{32,64}): Fix handling on 64 bit hosts.
+ (sethi_di_sp64_const): Likewise.
+ (movtf_cc_sp64): Check TARGET_HARD_QUAD.
+ (cmp_zero_extract_sp64): Use unsigned HOST_WIDE_INT in cast.
+ (ashlsi3, ashldi3, ashrsi3, ashrdi3, lshrsi3, lshrdi3): Likewise.
+
+Wed Sep 24 08:25:28 1997 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * i386.md (allocate_stack): Fix typo in last change.
+
+Tue Sep 23 19:02:46 1997 Doug Evans <dje@cygnus.com>
+
+ * sparc/linux-aout.h (COMMENT_BEGIN): Delete.
+ * sparc/linux.h (COMMENT_BEGIN): Likewise.
+ * sparc/linux64.h (COMMENT_BEGIN): Likewise.
+
+Tue Sep 23 14:48:18 1997 David S. Miller <davem@tanya.rutgers.edu>
+
+ Add sparc64 linux support.
+ * configure.in (sparc64-*-linux*): Recognize. Add sparc/xm-sparc.h
+ to xm_file list on 32-bit sparc-linux.
+ * sparc/xm-sp64.h: New file.
+ * sparc/linux64.h: New file.
+ * sparc/xm-linux.h: Include some standard headers if not inhibit_libc.
+ Don't include xm-sparc.h.
+ * config/xm-linux.h (HAVE_PUTENV, HAVE_ATEXIT): Define.
+ * glimits.h (LONG_MAX): Handle sparc64.
+
+Tue Sep 23 08:32:51 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * final.c (final_end_function): Also do dwarf2 thing if
+ DWARF2_DEBUGGING_INFO.
+ (final_start_function): Likewise.
+
+Tue Sep 23 06:55:40 1997 David S. Miller <davem@tanya.rutgers.edu>
+
+ * expmed.c (expand_divmod): If compute_mode is not same as mode,
+ handle case where convert_modes causes op1 to no longer be CONST_INT.
+
+Tue Sep 23 00:58:48 1997 Jim Wilson <wilson@cygnus.com>
+
+ * mips.c (save_restore_insns): Only set RTX_FRAME_RELATED_P if store_p.
+
+Mon Sep 22 18:26:25 1997 J. Kean Johnston <jkj@sco.com>
+
+ * i386/sco5.h: Make ELF default file format and add -mcoff/-melf..
+ (MULTILIB_DEFAULTS): Define.
+ (ASM_SPEC, CPP_SPEC): Handle -mcoff.
+ (STARTFILE_SPEC, ENDFILE_SPEC, LINK_SPEC): Likewise.
+ (LIBGCC_SPEC): Likewise.
+ (MASK_COFF, TARGET_COFF, TARGET_ELF): Define.
+ (SUBTARGET_SWITCHES): Add -mcoff and -melf.
+ * i386/t-sco5 (CRTSTUFF_T_CFLAGS): Add -fPIC.
+ (CRTSTUFF_T_CFLAGS_S): Tweak for COFF.
+ (EXTRA_PARTS, TAROUTOPTS): Delete.
+ (libgcc1-elf, libgcc2-elf, libgcc-elf targets): Delete.
+ (MULTILIB_OPTIONS): Define.
+ (MULTILIB_DIRNAMES, MULTILIB_EXCEPTIONS): Likewise.
+ (MULTILIB_MATCHE, MULTILIB_EXTRA_OPTS): Likewise.
+
+Mon Sep 22 14:42:11 1997 Jeffrey A Law (law@cygnus.com)
+
+ * reg-stack.c (find_blocks): Fix thinko in last change.
+
+Mon Sep 22 16:22:41 1997 David S. Miller <davem@tanya.rutgers.edu>
+
+ * combine.c (try_combine): Use NULL_RTX, not 0, in gen_rtx calls.
+ * cse.c (cse_main): Likewise.
+ * emit-rtl.c (gen_label_rtx): Likewise.
+ * expr.c (init_expr_once): Likewise.
+ * sched.c (schedule_insns): Likewise.
+ * varasm.c (immed_double_const): Likewise.
+
+ * sparc.h (INCOMING_FRAME_SP_OFFSET): Define as SPARC_STACK_BIAS.
+
+Mon Sep 22 16:13:21 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * alpha/linux.h (HANDLE_SYSV_PRAGMA): Define.
+
+Mon Sep 22 16:02:01 1997 Benjamin Kosnik <bkoz@rhino.cygnus.com>
+
+ * c-common.c (decl_attributes): Add support for TYPE_UNUSED on types.
+ * c-decl.c (finish_decl): Set TREE_USED on decls if TREE_USED on type.
+ * stmt.c (expand_end_bindings): Check DECL_NAME and DECL_ARTIFICIAL
+ before unused variable warning.
+
+Mon Sep 22 14:04:18 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * rtlanal.c (computed_jump_p): Fix typo in last change.
+
+ * clipper.md (movstrsi): Use change_address instead of making new MEM.
+ * dsp16xx.md (movstrqi): Likewise.
+ * i370.md (movstrsi): Likewise.
+ * i860.md (movstrsi): Likewise.
+ * pa.md (movstrsi): Likewise.
+ * mips.md (movstrsi): Fix (unused) pattern in define_expand.
+ * pdp11.md (movstrhi): Likewise.
+
+ * alpha.md (allocate_stack): Use virtual_stack_dynamic for result.
+ * i386.md (allocate_stack): Likewise.
+ * rs6000.md (allocate_stack): Likewise.
+
+ * alpha.h (FLOAT_STORE_FLAG_VALUE): Different for VAX and IEEE float.
+
+ * function.c (assign_parms): Make max_parm_reg handling more
+ precise and make it agree with size of parm_reg_stack_loc.
+ * integrate.c (save_for_inline_{nocopy,copying}): Remove
+ redundant assignment of max_parm_reg.
+
+ * function.c (assign_parms): Properly set RTX_UNCHANGING_P for
+ copy of parm.
+
+ * integrate.c (copy_rtx_and_substitute, case SET): Handle
+ a SET_DEST of the virtual fp or ap specially and undo
+ the adjustment into the local area as well.
+ (mark_stores): Don't wipe out map entries for virtual fp and ap.
+
+ * alpha.h (FLOAT_STORE_FLAG_VALUE): Different for VAX and IEEE float.
+
+ * emit-rtl.c (gen_lowpart): Handle ADDRESSOF.
+
+Mon Sep 22 13:35:56 1997 Doug Evans <dje@cygnus.com>
+
+ * rtlanal.c (replace_regs): Fix up lossage in last patch.
+
+Sun Sep 21 19:28:48 1997 Jeffrey A Law (law@cygnus.com)
+
+ * flow.c (jmp_uses_reg_or_mem): Deleted unused function.
+ (find_basic_blocks): Use computed_jump_p to determine if a
+ particular JUMP_INSN is a computed jump.
+ * reg-stack.c (find_blocks): Use computed_jump_p to determine
+ if a particular JUMP_INSN is a computed jump.
+ * rtlanal.c (jmp_uses_reg_or_mem): New function.
+ (computed_jump_p): Likewise.
+ * rtl.h (computed_jump_p): Declare.
+ * genattrtab.c (pc_rtx): Define and initialize.
+
+ * cse.c (simplify_relational_operation): Set h0u just like h0s.
+ Similarly for h1u and h1s.
+
+Sun Sep 21 14:13:31 1997 Doug Evans <dje@cygnus.com>
+
+ * function.c (instantiate_virtual_regs): Fix thinko in last patch.
+
+Sun Sep 21 10:33:26 1997 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c, cpplib.c (special_symbol): If STDC_0_IN_SYSTEM_HEADERS
+ is defined, expand __STDC__ to 0 in system headers.
+ * i386/sol2.h, rs6000/sol2.h, sparc/sol2.h:
+ (STDC_0_IN_SYSTEM_HEADERS): New macro.
+ (CPP_SPEC): Remove -D__STDC__=0; it's no longer needed.
+
+ * fixinc.math (_MATH_H_WRAPPER): Define at the end of the
+ wrapper, not the start, so that if #include_next gets another
+ instance of the wrapper, this will follow the #include_next
+ chain until we arrive at the real <math.h>.
+
+ * fixproto (subdirs_made): New var, to keep track of which
+ subdirectories we've made (in reverse order). At the end,
+ attempt to rmdir them all, so that we don't create any empty
+ directories.
+
+Sun Sep 21 10:02:07 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * pa.c (move_operand): Respect -mdisable-indexing.
+ * pa.h (GO_IF_LEGITIMATE_ADDRESS): Likewise.
+
+Sun Sep 21 09:29:23 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * function.c (purge_addressof_1): Don't convert (MEM (ADDRESSOF (REG)))
+ to (SUBREG (REG)) on big endian machines.
+ Don't fall through to substitute the inner (REG) unchanged
+ when the above conversion cannot be validated.
+
+Sat Sep 20 16:22:06 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * frame.c (__deregister_frame): Properly check for initialized object.
+
+ * function.c (instantiate_virtual_regs): Instantiate
+ parm_reg_stack_locs.
+
+Sat Sep 20 03:07:54 1997 Doug Evans <dje@cygnus.com>
+
+ * sparc/sysv4.h (ASM_COMMENT_START): Delete.
+ * sparc.h (ASM_COMMENT_START): Define.
+ * sparc.c (output_function_prologue): Use it.
+ (sparc_flat_output_function_{epi,pro}logue): Likewise.
+
+Fri Sep 19 19:43:09 1997 Jeffrey A Law (law@cygnus.com)
+
+ * loop.c (strength_reduce): Fix typo.
+
+ * m68k/xm-mot3300.h (alloca): Properly declare if __STDC__.
+ * mips.h, xm-rs6000.h, rs6000/xm-sysv4.h: Likewise.
+
+Fri Sep 19 20:10:30 1997 Doug Evans <dje@cygnus.com>
+
+ * rtl.h (find_use_as_address): Delete accidentally added decl.
+
+Fri Sep 19 08:36:16 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * jump.c (thread_jumps): Check can_reverse_comparison_p before
+ threading a reversed-condition jump.
+
+Fri Sep 19 08:16:12 1997 Andrew M. Bishop <amb@gedanken.demon.co.uk>.
+
+ * Add support for new -dI option for cxref,
+ * cccp.c (dump_includes): New variable.
+ (struct directive, directive_table): Remove members angle_brackets,
+ traditional_comments, pass_thru; all code using struct directive
+ now uses `type' member instead.
+ (IS_INCLUDE_DIRECTIVE_TYPE): New macro.
+ (main, handle_directive): Add support for new -dI option.
+ (do_ident): Avoid unnecessary alloca.
+ (do_pragma): Avoid unnecessary comparison to newline.
+
+ * cpplib.h (struct cpp_options): New member dump_includes.
+ * cpplib.c (struct directive, directive_table): Remove members
+ traditional_comments, pass_thru; all code using struct directive
+ now uses `type' member instead.
+ (IS_INCLUDE_DIRECTIVE_TYPE): New macro.
+ (handle_directive, cpp_handle_options): Add support for new -dI option.
+
+Fri Sep 19 07:57:19 1997 Pat Rankin <rankin@eql.caltech.edu>
+
+ * vax/xm-vms.h (expand_builtin_{extract,set}_return_addr): New macros.
+
+Fri Sep 19 07:47:29 1997 Nick Burrett <n.a.burrett@btinternet.com>
+
+ * cpplib.c (pcstring_used, pcfinclude): Delete unused declarations.
+ (check_preconditions, print_containing_files, pipe_closed): Likewise.
+ (dump_defn_1, dump_arg_n, make_undef): Likewise.
+ (trigraph_pcp): Pre-process out decl.
+ (quote_string): Cast CPP_PWRITTEN macro to char * for sprintf.
+ (output_line_command): Likewise.
+ (macro_expand): Likewise.
+ (do_line): Cast atoi argument to char *.
+ * genattrtab.c (simplify_by_alternatives): Pre-process out decl.
+ * genpeep.c (gen_exp): Remove decl.
+
+Fri Sep 19 07:29:40 1997 Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE>
+
+ * enquire.c (basic): Elminate dangling else warning.
+ * except.h (struct function, save_eh_status, restore_eh_status):
+ Don't declare.
+ * expr.c (clear_storage): Don't return without a value.
+ * function.h ({save,restore}_machine_status): Add proper prototype.
+ ({save,restore}_{tree,eh,stmt,expr,emit,storage}_status): Declare.
+ * real.h (real_value_truncate): Add proper prototype.
+ (target_isnan, target_isinf, target_negative, debug_real): Declare.
+ (assemble_real): Likewise.
+ * recog.c (strict_memory_address_p, memory_address_p): Don't declare.
+ (find_single_use_1): Add prototype.
+ * recog.h (init_recog, init_recog_no_volatile): Declare.
+ (check_asm_operands, constrain_operands, memory_address_p): Likewise.
+ (strict_memory_address_p, validate_replace_rtx): Likewise.
+ (reg_fits_class_p, find_single_use, general_operand): Likewise.
+ (address_operand, register_operand, scratch_operand): Likewise.
+ (immediate_operand, const_int_operand, const_double_operand): Likewise.
+ (nonimmediate_operand, nonmemory_operand, push_operand): Likewise.
+ (memory_operand, indirect_operand, mode_independent_operand): Likewise.
+ (comparison_operator, offsettable_{,nonstrict_}memref_p): Likewise.
+ (offsettable_address_p, mode_dependent_address_p, recog): Likewise.
+ (add_clobbers): Likewise.
+ * reload.h (strict_memory_address_p): Don't declare here.
+ * rtl.h (struct rtvec_def): Make num_elem an integer.
+ (PUT_NUM_ELEM): Delete cast to unsigned.
+ (rtx_unstable_p, rtx_varies_p, reg_mentioned_p): Declare.
+ (reg_{referenced,used_between,referenced_between}_p: Likewise.
+ ({reg_set,modified,no_labels}_between_p, modified_in_p): Likewise.
+ (reg_set_p, refers_to_regno_p, reg_overlap_mentioned_p): Likewise.
+ (note_stores, rtx_equal_p, dead_or_set{,_regno}_p): Likewise.
+ (remove_note, side_effects_p, volatile_{refs,insn}_p): Likewise.
+ (may_trap_p, inequality_comparison_p): Likewise.
+ * rtlanal.c (note_stores, reg_set_p): Don't declare.
+ (rtx_addr_can_trap_p): Add prototype, make static.
+ (reg_set_p_1): Add declaration for parameter pat.
+ * emit-rtl.c: Include recog.h.
+ * integrate.c: Likewise.
+ * jump.c: Likewise.
+ * unroll.c: Likewise.
+ * Makefile.in (emit-rtl.o, integrate.o, jump.o, unroll.o): Depend
+ on recog.h.
+
+Fri Sep 19 06:52:22 1997 Paul Eggert <eggert@twinsun.com>
+
+ * enquire.c (SYS_FLOAT_H_WRAP): New macro.
+ Include "float.h" if SYS_FLOAT_H_WRAP is nonzero.
+ (f_define): New argument `req'.
+ (main): Output `#include_next <float.h>' if wrapping float.h.
+ (i_define, f_define): Don't output anything if wrapping float.h
+ and if the system defn is already correct. Put other value tests
+ inside `#ifdef VERIFY'.
+ (UNDEFINED): New macro.
+ (I_MAX, I_MIN, U_MAX, F_RADIX, F_MANT_DIG, F_DIG, F_ROUNDS):
+ Define even if VERIFY isn't defined, because SYS_FLOAT_H_WRAP may need
+ these values. Give them the value UNDEFINED if not already defined.
+ (F_EPSILON, F_MIN_EXP, F_MIN, F_MIN_10_EXP, F_MAX_EXP): Likewise.
+ (F_MAX, F_MAX_10_EXP): Likewise.
+ (FPROP): Prefer system float.h definition of F_ROUNDS.
+ Pass system values to f_define.
+ * Makefile.in (FLOAT_H_TEST): New var.
+ (float.h-nat): Make it empty if we can use the system float.h without
+ change.
+ (enquire.o): Define SYS_FLOAT_H_WRAP=1 if we can build a wrapper
+ around the system <float.h>. Remove include/float.h before compiling.
+ (stmp-headers): Remove include/float.h if we would just be installing
+ an empty file (which is a placeholder that stands for no file).
+
+ * fix-header.c: Don't munge headers for POSIX and XOPEN,
+ as this is too error-prone.
+ (ADD_MISSING_POSIX, ADD_MISSING_XOPEN): New macros, normally undefed.
+ (POSIX1_SYMBOL, POSIX2_SYMBOL): Now 0 unless ADD_MISSING_POSIX.
+ (XOPEN_SYMBOL, XOPEN_EXTENDED_SYMBOL): Now 0 unless ADD_MISSING_XOPEN.
+ (main): Ignore symbols whose flags are 0.
+
+Thu Sep 18 10:43:07 1997 Nick Clifton <nickc@cygnus.com>
+
+ * v850.c (compute_register_save_size): Correct register number.
+ * v850.md (save_interrupt, return_interrupt): Likewise.
+ * v850/lib1funcs.asm (save_interrupt): Likewise.
+ (return_interrupt): Use stack pointer, not element pointer.
+
+Thu Sep 18 14:22:22 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * final.c (final_scan_insn): Hand BARRIERs to dwarf2 code.
+ * dwarf2out.c (dwarf2out_frame_debug): Pass the whole insn along.
+ (dwarf2out_stack_adjust): A BARRIER resets the args space to 0.
+
+ * except.c (end_eh_unwinder): Subtract 1 from return address.
+ * libgcc2.c (__throw): Likewise.
+ (find_exception_handler): Don't change PC here. Compare end with >.
+
+Thu Sep 18 14:01:20 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * configure.in: Make sure to create the stage* and include
+ symbolic links in each subdirectory.
+
+Thu Sep 18 13:20:37 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh/lib1funcs.asm (LOCAL): Define.
+ (whole file): Use it.
+
+Thu Sep 18 09:52:24 1997 Benjamin Kosnik <bkoz@beauty.cygnus.com>
+
+ * collect2.c (collect_execute): Specify name of new file when
+ redirecting stdout/stderr.
+
+Thu Sep 18 01:47:06 1997 Jeffrey A Law (law@cygnus.com)
+
+ * pa.md (reload_peepholes): Don't allow addresses with side
+ effects for the memory operand.
+
+Wed Sep 17 18:19:53 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * libgcc2.c (find_exception_handler): Subtract one from our PC when
+ looking for a handler, to avoid hitting the beginning of the next
+ region.
+
+ * except.c (expand_builtin_set_return_addr_reg): Use force_operand.
+
+Wed Sep 17 18:23:09 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mips/abi64.h (LONG_MAX_SPEC): Define.
+ * mips.h (LONG_MAX_SPEC): Define.
+ (CPP_SPEC): Include long_max_spec.
+ (EXTRA_SPECS): Include long_max_spec.
+
+Wed Sep 17 14:17:26 1997 Paul Eggert <eggert@twinsun.com>
+
+ * configure.in (AC_CHECK_HEADERS): Add inttypes.h, limits.h.
+ ({sparc,i[3456]86,powerpcle}-*-solaris2*): Use fixinc.math.
+
+ * fixinc.math (PWDCMD, ORIGDIR, LINKS): Remove.
+ Remove duplicate test for missing $1.
+ Don't cd to $INPUT.
+ Build wrapper around system <math.h> instead of copying it;
+ this is better if the system <math.h> is updated later by a software
+ patch or upgrade.
+
+ * cccp.c (HAVE_STDLIB_H, HAVE_UNISTD_H):
+ Do not define any more; now autoconfed.
+ <limits.h>: Include if HAVE_LIMITS_H.
+ (HOST_BITS_PER_WIDE_INT): Remove.
+ (HOST_WIDE_INT): Use intmax_t or long long if available.
+ (pcfinclude): Use size_t, not HOST_WIDE_INT, for cast from pointer;
+ this is less likely to annoy the compiler.
+
+ * cexp.y (HAVE_STDLIB_H): Do not define any more; now autoconfed.
+ <limits.h>: Include if HAVE_LIMITS_H.
+ (HOST_WIDE_INT): Use intmax_t or long long if available.
+ (unsigned_HOST_WIDE_INT, CHAR_BIT): New macros.
+ (HOST_BITS_PER_WIDE_INT): Define in terms of CHAR_BIT and sizeof.
+ (MAX_CHAR_TYPE_MASK, MAX_CHAR_TYPE_MASK): Rewrite so that we don't use
+ HOST_BITS_PER_WIDE_INT in a preprocessor expression, since it now
+ uses sizeof.
+
+ * cppexp.c: <limits.h>: Include if HAVE_LIMITS_H.
+ (HOST_WIDE_INT): Use intmax_t or long long if available.
+ (CHAR_BIT): New macro.
+ (HOST_BITS_PER_WIDE_INT): Define in terms of CHAR_BIT and sizeof.
+ * cpplib.c: <limits.h>: Include if HAVE_LIMITS_H.
+ (HOST_WIDE_INT): Use intmax_t or long long if available.
+ (HOST_BITS_PER_WIDE_INT): Remove.
+
+Wed Sep 17 14:11:38 1997 Jeffrey A Law (law@cygnus.com)
+
+ * v850.c (construct_save_jarl): Fix thinko in last change.
+
+Wed Sep 17 15:04:19 1997 Doug Evans <dje@cygnus.com>
+
+ * sparc/sysv4.h (ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}): Delete,
+ use sparc.h's copies.
+ * sparc.h (ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}): Print ascii form
+ as well.
+
+Wed Sep 17 14:08:20 1997 Nick Burrett <nick.burrett@btinternet.com>
+
+ * explow.c (allocate_dynamic_stack_space): Make allocate_stack
+ pass 'target' as an extra operand.
+ * expr.c (expand_builtin_apply): Use allocate_dynamic_stack_space
+ to push a block of memory onto the stack.
+ * alpha.md (allocate_stack): Alter in accordance with new operand.
+ * i386.md (allocate_stack): Likewise.
+ * rs6000.md (allocate_stack): Likewise.
+
+Wed Sep 17 13:34:43 1997 Robert Lipe <robertl@dgii.com>
+
+ * i386/xm-sco5.h (sys_siglist, SYS_SYGLIST_DECLARED): Define.
+
+Wed Sep 17 13:27:05 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * Makefile.in (native): Correct dependency to auto-config.h from
+ config.h.
+
+Tue Sep 16 10:02:02 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * libgcc2.c (find_exception_handler): Not found is -1.
+
+ * integrate.c (expand_inline_function): Move expand_start_bindings
+ after expanding the arguments.
+
+ * i386.c (ix86_prologue): Pass SYMBOL_REF to
+ gen_prologue_{get_pc,set_got}.
+ * i386.md (prologue_set_got, prologue_get_pc): Adjust.
+
+Tue Sep 16 07:33:15 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * fold-const.c (make_range): Correctly handle cases of converting
+ from unsigned to signed type.
+
+ * function.c (flush_addressof): New function.
+
+ * combine.c (num_sign_bit_copies): If asking about wider mode,
+ treat like paradoxical subreg.
+
+Tue Sep 16 00:26:52 1997 Jeffrey A Law (law@cygnus.com)
+
+ * cse.c (simplify_relational_operation): If MODE specifies mode wider
+ than HOST_WIDE_INT, high word of CONST_INT is derived from sign bit
+ of low word.
+
+Tue Sep 16 00:13:20 1997 Nick Clifton <nickc@cygnus.com>
+
+ * v850.c ({register,pattern}_is_ok_for_epilogue): New functions.
+ (construct_{save,restore}_jr, pattern_is_ok_for_prologue): Likewise.
+ * v850.h (pattern_is_ok_for_{pro,epi}logue): New predicates.
+ (register_is_ok_for_epilogue): Likewise.
+ * v850.md: Replace prologue and epilogue patterns with a
+ match_parallel pattern.
+ * v850.c (output_move_single_unsigned): Cope with zero
+ extending and moving between registers at the same time.
+
+Mon Sep 15 22:02:46 1997 Jeffrey A Law (law@cygnus.com)
+
+ * fixinc.math: New file to fix math.h on some systems.
+ * configure.in (*-*-freebsd*, *-*-netbsd*): Use fixinc.math on these
+ systems.
+
+Mon Sep 15 18:58:36 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sched.c (update_flow_info) When looking if to set found_split_dest
+ or found_orig_dest, look at all parts of a PARALLEL.
+
+ * sh.md (casesi_0): Reduce functionality, exclude insns from
+ mova onwards. Changed expander caller.
+ (casesi_worker_0): New insn.
+ (casesi_worker_0+[12]): New define_splits.
+ (casesi_worker): Need no gen_* function.
+ (casesi): Use casesi_worker_0 instead of casesi_worker.
+ * sched.c (update_flow_info): Don't pass SCRATCH to dead_or_set_p.
+
+Mon Sep 15 11:43:38 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ Support dwarf2 unwinding on PUSH_ROUNDING targets like the x86.
+ * dwarf2.h: Add DW_CFA_GNU_args_size.
+ * frame.c (execute_cfa_insn): Likewise.
+ * dwarf2out.c (dwarf_cfi_name, output_cfi): Likewise.
+ (dwarf2out_args_size, dwarf2out_stack_adjust): New fns.
+ (dwarf2out_frame_debug): If this isn't a prologue or epilogue
+ insn, hand it off to dwarf2out_stack_adjust.
+ (dwarf2out_begin_prologue): Initialize args_size.
+ * frame.h (struct frame_state): Add args_size.
+ * libgcc2.c (__throw): Use args_size.
+ * final.c (final_scan_insn): If we push args, hand off all insns
+ to dwarf2out_frame_debug.
+ * defaults.h (DWARF2_UNWIND_INFO): OK for !ACCUMULATE_OUTGOING_ARGS.
+
+ * dwarf2out.c (dwarf2out_frame_debug): Fix typo.
+ Handle epilogue restore of SP from FP.
+ * emit-rtl.c (gen_sequence): Still generate a sequence if the
+ lone insn has RTX_FRAME_RELATED_P set.
+
+ * frame.c (extract_cie_info): Handle "e" augmentation.
+ * dwarf2out.c (ASM_OUTPUT_DWARF_*): Provide definitions in the
+ absence of UNALIGNED_*_ASM_OP.
+ (UNALIGNED_*_ASM_OP): Only provide defaults if OBJECT_FORMAT_ELF.
+ (output_call_frame_info): Use "e" instead of "z" for augmentation.
+ Don't emit augmentation fields length.
+ (dwarf2out_do_frame): Move outside of #ifdefs.
+ * defaults.h (DWARF2_UNWIND_INFO): Don't require unaligned data
+ opcodes.
+
+ * sparc.h (UNALIGNED_INT_ASM_OP et al): Don't define here after all.
+ * sparc/sysv4.h (UNALIGNED_INT_ASM_OP): Define here.
+ * sparc/sunos4.h (DWARF2_UNWIND_INFO): Define to 0.
+ * sparc/sun4gas.h: New file.
+ * configure.in: Use sun4gas.h if SunOS 4 --with-gnu-as.
+
+ * collect2.c (write_c_file_stat, write_c_file_glob): Declare
+ __register_frame_table and __deregister_frame.
+
+Mon Sep 15 19:04:34 1997 Brendan Kehoe <brendan@cygnus.com>
+
+ * except.c (find_exception_handler_labels): Use xmalloc instead of
+ alloca, since MAX_LABELNO - MIN_LABELNO can be more than 1 million
+ in some cases.
+
+Sat Sep 13 23:13:51 1997 Paul Eggert <eggert@twinsun.com>
+
+ * cpplib.h (PARAMS): Fix misspelling of __STDC__.
+ (cpp_get_token): Arg is cpp_reader *, not struct parse_marker *.
+
+ * cpplib.c (cpp_fatal, cpp_file_line_for_message): New decls.
+ (ppp_hash_cleanup, cpp_message, cpp_print_containing_files): Likewise.
+ (copy_rest_of_line): Fix typo that prevented recognition of
+ C++ style comments.
+ (output_line_command, special_symbol): Use %ld for long, not %d.
+
+ * cppexp.c (xrealloc): Declare first arg as void *, not char *.
+ (cpp_lex): Cast 2nd arg of cpp_parse_escape from const char ** to
+ char **.
+
+Fri Sep 12 16:54:04 1997 Doug Evans <dje@cygnus.com>
+
+ * bitmap.h (bitmap_print): Don't use STDIO_PROTO.
+
+Fri Sep 12 13:49:58 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * except.h: Prototype dwarf2 hooks.
+ * expr.c: Adjust.
+
+Thu Sep 11 18:36:51 1997 Jim Wilson <wilson@cygnus.com>
+
+ * local-alloc.c (contains_replace_regs): New function.
+ (update_equiv_regs): When adding a REG_EQUIV note for a set of a MEM,
+ verify that there is no existing REG_EQUIV note, and add a call to
+ contains_place_regs.
+
+ * m68k.h (MACHINE_STATE_{SAVE,RESTORE}): Add __HPUX_ASM__ versions.
+
+Wed Sep 10 21:49:38 1997 Michael Meissner <meissner@cygnus.com>
+
+ * toplev.c (rest_of_compilation): For passes starting with
+ flow_analysis, use print_rtl_with_bb instead of print_rtl.
+ * print-rtl.c (print_rtl_single): Print a single rtl value to a
+ file.
+ * flow.c (print_rtl_with_bb): Print which insns start and end
+ basic blocks. For the start of a basic block, also print the live
+ information.
+ * bitmap.h (EXECUTE_IF_AND_IN_BITMAP): New macro, to iterate over
+ two bitmaps ANDed together.
+ (bitmap_print): Declare.
+ * bitmap.c (function_obstack): Don't declare any more.
+ (bitmap_obstack): Obstack for allocating links from.
+ (bitmap_obstack_init): New static to say whether to initialize
+ bitmap_obstack.
+ (bitmap_element_allocate): Use bitmap_obstack to allocate from.
+ (bitmap_release_memory): Free all memory allocated from
+ bitmap_obstack.
+ (toplevel): Conditionally include stdlib.h.
+ (free): Provide a declaration if NEED_DECLARATION_FREE.
+
+ * basic-block.h (EXECUTE_IF_AND_IN_REG_SET): New macro, invoke
+ EXECUTE_IF_AND_IN_BITMAP.
+
+Wed Sep 10 17:53:33 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.c (addr_diff_vec_adjust): Properly propagate considered
+ address changes through alignments.
+
+Wed Sep 10 13:10:52 1997 Per Bothner <bothner@cygnus.com>
+
+ * stor-layout.c (layout_type): Simplify special BOOLEAN_TYPE handling.
+
+Wed Sep 10 12:59:57 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * expr.c (expand_builtin): Only support __builtin_dwarf_fp_regnum()
+ if DWARF2_UNWIND_INFO.
+
+Wed Sep 10 15:43:10 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * cplus-dem.c (demangle_fund_type): Change "complex" to "__complex".
+
+Wed Sep 10 11:13:53 1997 Paul Eggert <eggert@twinsun.com>
+
+ Handle `extern int errno;' correctly when fixing <errno.h>.
+ * fix-header.c (recognized_extern): Use name_length when comparing.
+ * scan-decls.c (scan_decls): Don't ignore the first CPP_NAME in a
+ declaration, so that we see the `extern' in `extern int errno;'.
+
+Wed Sep 10 11:49:20 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ Add support for exception handling using DWARF 2 frame unwind info.
+ * libgcc2.c (get_reg, put_reg, get_return_addr, put_return_addr,
+ next_stack_level, in_reg_window): Helper fns.
+ (__throw): Implement for DWARF2_UNWIND_INFO.
+
+ * expr.c (expand_builtin): Handle builtins used by __throw.
+ * tree.h (enum built_in_function): Add builtins used by __throw.
+ * c-decl.c (init_decl_processing): Declare builtins used by __throw.
+ * dwarf2out.c (expand_builtin_dwarf_fp_regnum): Used by __throw.
+ * except.c (expand_builtin_unwind_init): Hook for dwarf2 __throw.
+ (expand_builtin_extract_return_addr): Likewise.
+ (expand_builtin_frob_return_addr): Likewise.
+ (expand_builtin_set_return_addr_reg): Likewise.
+ (expand_builtin_eh_stub): Likewise.
+ (expand_builtin_set_eh_regs): Likewise.
+ (eh_regs): Choose two call-clobbered registers for passing back values.
+
+ * frame.c, frame.h: New files for parsing dwarf 2 frame info.
+ * Makefile.in (LIB2ADD): New variable. Add $(srcdir)/frame.c.
+ (libgcc2.a): Use it instead of $(LIB2FUNCS_EXTRA) $(LANG_LIB2FUNCS)
+ (stmp-multilib): Likewise.
+ ($(T)crtbegin.o, $(T)crtend.o): Add -fno-exceptions.
+
+ * except.c: #include "defaults.h".
+ (exceptions_via_longjmp): Default depends on DWARF2_UNWIND_INFO.
+ (emit_throw): Don't defeat assemble_external if DWARF2_UNWIND_INFO.
+ (register_exception_table_p): New fn.
+ (start_eh_unwinder): Don't do anything if DWARF2_UNWIND_INFO.
+ (end_eh_unwinder): Likewise.
+
+ * crtstuff.c: Wrap .eh_frame section, use EH_FRAME_SECTION_ASM_OP,
+ call __register_frame and __deregister_frame as needed.
+ * varasm.c (eh_frame_section): New fn if EH_FRAME_SECTION_ASM_OP.
+ * dwarf2out.c (EH_FRAME_SECTION): Now a function-like macro. Check
+ EH_FRAME_SECTION_ASM_OP.
+ * sparc/sysv4.h (EH_FRAME_SECTION_ASM_OP): Define.
+ * mips/iris6.h: (EH_FRAME_SECTION_ASM_OP): Define.
+ (LINK_SPEC): Add __EH_FRAME_BEGIN__ to hidden symbols.
+
+ * dwarf2out.c (output_call_frame_info): If no support for
+ EXCEPTION_SECTION, mark the start of the frame info with a
+ collectable tag.
+ * collect2.c (frame_tables): New list.
+ (is_ctor_dtor): Recognise frame entries.
+ (scan_prog_file): Likewise.
+ (main): Pass -fno-exceptions to sub-compile. Also do collection
+ if there are any frame entries.
+ (write_c_file_stat): Call __register_frame_table and
+ __deregister_frame as needed.
+ (write_c_file_glob): Likewise.
+
+ * defaults.h (DWARF2_UNWIND_INFO): Default to 1 if supported.
+ Also require unaligned reloc support.
+ * sparc.h (UNALIGNED_SHORT_ASM_OP, UNALIGNED_INT_ASM_OP,
+ UNALIGNED_DOUBLE_INT_ASM_OP): Define here.
+ * sparc/sysv4.h: Not here.
+
+ * toplev.c (compile_file): Call dwarf2out_frame_{init,finish}.
+ * dwarf2out.c (dwarf2out_init): Don't call dwarf2out_frame_init.
+ (dwarf2out_finish): Don't call dwarf2out_frame_finish.
+
+ * libgcc2.c (L_eh): Reorganize, moving code shared by different
+ EH implementations to the top.
+ (find_exception_handler): Split out. Start from 0. Compare against
+ end with >=.
+ (__find_first_exception_table_match): Use it.
+ * except.c (output_exception_table): Don't do anything if there's
+ no table. Don't output a first entry of zeroes.
+ (eh_outer_context): Adjust properly.
+ (add_eh_table_entry): Use xrealloc.
+ * toplev.c (compile_file): Just call output_exception_table.
+
+Wed Sep 10 11:49:20 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * varasm.c (save_varasm_status): Take the target function context.
+ * function.c (push_function_context_to): Pass it in.
+
+ * rtl.def (ADDRESSOF): Add new field for original regno.
+ * function.c (put_reg_into_stack and callers): Add original_regno
+ argument.
+ (gen_mem_addressof): Remember the original regno.
+ * rtl.def (INLINE_HEADER): Add new field for parm_reg_stack_loc.
+ * rtl.h (PARMREG_STACK_LOC): New macro.
+ (ADDRESSOF_REGNO): New macro.
+ * emit-rtl.c (gen_inline_header_rtx): Add parm_reg_stack_loc.
+ * function.c (max_parm_reg, parm_reg_stack_loc): No longer static.
+ (assign_parms): Allocate parm_reg_stack_loc on saveable obstack.
+ * integrate.c (output_inline_function): Set max_parm_reg and
+ parm_reg_stack_loc from inline header.
+ (initialize_for_inline): Pass in parm_reg_stack_loc.
+
+Wed Sep 10 11:30:36 1997 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.c (override_options): Don't set TARGET_SCHEDULE_PROLOGUE
+ (ix86_expand_prologue, ix86_expand_epilogue): Emit rtl by default.
+
+Wed Sep 10 11:30:36 1997 Jason Merrill <jason@cygnus.com>
+
+ * i386.c (ix86_prologue): Add dwarf2 support for !do_rtl case.
+
+Wed Sep 10 08:48:44 1997 Jeffrey A Law (law@cygnus.com)
+
+ * xm-m88k.h (USG): Only define if it hasn't already been defined.
+
+ * i386.h (CPP_CPU_DEFAULT): Avoid using #elif.
+
+ * expr.c (do_jump_by_parts_equality_rtx): Don't clobber the
+ source operand when performing an IOR of the parts.
+
+ * expr.c (emit_block_move): Always return a value.
+
+ * expr.c (clear_storage): Use CONST0_RTX instead of const0_rtx.
+ when clearing non-BLKmode data.
+
+ * final.c (shorten_branches): Remove last change for ADDR_VEC
+ alignment computation. During first pass, assume worst
+ possible alignment for ADDR_VEC and ADDR_VEC_DIFF insns.
+
+Wed Sep 10 09:33:19 1997 Kamil Iskra <iskra@student.uci.agh.edu.pl>
+
+ * explow.c (emit_stack_save, emit_stack_restore): Correctly
+ handle HAVE_{save,restore}_stack_* evaluating to 0.
+
+Wed Sep 10 09:27:45 1997 Weiwen Liu <liu@hepvms.physics.yale.edu>
+
+ * Makefile.in (sdbout.o): Add dependency on insn-config.h.
+
+Wed Sep 10 09:24:56 1997 Nick Burrett <n.a.burrett@btinternet.com>
+
+ * sched.c (birthing_insn_p): Rename prototype decl from birthing_insn.
+ * final.c (leaf_renumber_regs, alter_cond): Declare prototype only
+ if LEAF_REGISTERS is defined.
+ * reload1.c (merge_assigned_reloads): Declare prototype only if
+ SMALL_REGISTER_CLASSES is defined.
+ * loop.c (replace_call_address): Pre-process out prototype decl.
+ * real.c (dectoe, etodec, todec): Declare proto if DEC is defined
+ (ibmtoe, etoibm, toibm): Declare proto if IBM is defined
+
+Wed Sep 10 09:13:51 1997 Manfred Hollstein <manfred@s-direktnet.de>
+
+ * configure.in (out_file): Emit definition to config.status.
+
+Wed Sep 10 08:37:56 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * final.c (shorten_branches): Fix alignment calculation.
+ Don't count the lengths of deleted instructions.
+
+Wed Sep 10 08:34:11 1997 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * cpplib.c (cpp_start_read): Make known_suffixes static.
+
+Wed Sep 10 08:27:05 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * m68k.c (print_operand_address) [MOTOROLA]: When compiling
+ with -fpic (not -fPIC) force the GOT offset to 16 bits.
+
+Wed Sep 10 08:22:51 1997 Christian Iseli <chris@lslsun.epfl.ch>
+
+ * expr.c (convert_move): Add missing use of trunctqtf2.
+
+Wed Sep 10 08:17:10 1997 Torbjorn Granlund <tege@pdc.kth..se>
+
+ * except.c (eh_outer_context): Do masking using expand_and.
+
+Wed Sep 10 07:52:21 1997 Joel Sherrill <joel@OARcorp.com>
+
+ * pa/rtems.h (subtarget_switches): Removed -mrtems subtarget_switch.
+ * configure.in (sh*-*-rtems*): New target.
+ * sh.h (TARGET_SWITCHES: Call SUBTARGET_SWITCHES.
+ (SUBTARGET_SWITCHES): Provide default definition.
+
+Wed Sep 10 06:33:47 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * i386/mingw32.h ({LIB,LINK}_SPEC): Check for -mwindows, not -windows.
+
+ * alpha/vms.h (ASM_OUTPUT_SECTION): Clear NAME if overlaid.
+
+ * c-parse.in (unary_expr): Test DECL_C_BIT_FIELD, not DECL_BIT_FIELD.
+ * c-typeck.c (default_conversion): Likewise.
+
+ * tree.c (contains_placeholder_p, substitute_in_expr):
+ Handle placeholders inside args of CALL_EXPR (and hence in TREE_LIST).
+
+ * expr.c (expand_expr, case PLACEHOLDER_EXPR): Check all
+ expressions in placeholder_list.
+
+Tue Sep 9 18:10:30 1997 Doug Evans <dje@cygnus.com>
+
+ Add port done awhile ago for the ARC cpu.
+ * arc.h, arc.c, arc.md, t-arc, xm-arc.h: New files.
+ * arc/initfini.c, arc/lib1funcs.asm: New files.
+ * ginclude/va-arc.h: New file.
+ * ginclude/stdarg.h: Include va-arc.h ifdef __arc__.
+ * ginclude/varargs.h: Likewise.
+ * Makefile.in (USER_H): Add va-arc.h.
+ * configure.in (arc-*-elf*): Recognize.
+ * longlong.h: Add ARC support.
+
+Tue Sep 9 01:30:37 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * mips.h (DWARF_FRAME_REGNUM): Use the same numbering regardless of
+ write_symbols.
+
+Mon Sep 8 15:15:11 1997 Nick Clifton <nickc@cygnus.com>
+
+ * v850.h (ASM_SPEC): Pass on target processor.
+ (CPP_PREDEFINES): Only define if not already specified.
+ (TARGET_VERSION): Only define if not already specified.
+ (MASK_CPU, MASK_V850, MASK_DEFAULT): Bits to specify target
+ processor.
+ (EXTRA_SWITCHES): Extra entries in the switches array.
+ (TARGET_DEFAULT): Set default target processor.
+
+Tue Sep 9 09:50:02 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * configure.in (alpha*-*-*): Support pca56 and ev6.
+
+ * varasm.c (named_section): Set in section after writing directive.
+ * dwarf2out.c (output_call_frame_info): Call named_section.
+
+Mon Sep 8 16:32:43 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * mips.c (function_prologue): Set up the CFA when ABI_32.
+
+ * sparc.c (save_regs): Check dwarf2out_do_frame instead of DWARF2_DEBUG
+ for dwarf2 unwind info.
+ (output_function_prologue, sparc_flat_output_function_prologue): Same.
+
+ * final.c (final_end_function): Check dwarf2out_do_frame instead
+ of DWARF2_DEBUG for dwarf2 unwind info.
+ (final_scan_insn): Likewise.
+ (final_start_function): Likewise. Initialize dwarf2 frame debug here.
+ (final): Not here.
+
+ * expr.c (expand_builtin_return_addr): Only SETUP_FRAME_ADDRESSES if
+ count > 0.
+
+ * varasm.c (exception_section): Check EXCEPTION_SECTION first.
+
+Mon Sep 8 14:58:07 1997 Jim Wilson <wilson@cygnus.com>
+
+ * toplev.c (main): Change #elif to #else/#ifdef
+
+ * i386/t-sol2 (TARGET_LIBGCC2_CFLAGS): Define to -fPIC.
+
+Mon Sep 8 08:45:19 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * alpha.h (processor_type): Add EV6.
+ ({TARGET,MASK}_BWX): Renamed from _BYTE_OPS.
+ ({TARGET,MASK}_{CIX,MAX}): New macros.
+ (MASK_CPU_EV5): Change bit number.
+ (MASK_CPU_EV6, {TARGET,MASK}_SUPPORT_ARCH): New macros.
+ (TARGET_OPTIONS): Rename "byte" to "bwx" and add "cix" and "max".
+ (MINIMUM_ATOMIC_ALIGNMENT): Rename TARGET_BYTE_OPS to TARGET_BWX.
+ (SECONDARY_{INPUT,OUTPUT}_RELOAD_CLASS, ASM_FILE_START): Likewise.
+ (SECONDARY_MEMORY_NEEDED): Not needed if CIX.
+ (ASM_FILE_START): Only write if TARGET_SUPPORT_ARCH.
+ Add "pca56" and "ev6".
+ * alpha.c (input_operand): Rename TARGET_BYTE_OPS to TARGET_BWX.
+ (override_options): Likewise; also add new CPU types and subset flags.
+ * alpha.md: Rename TARGET_BYTE_OPS to TARGET_BWX.
+ (cpu attr): Add "ev6".
+ (ev5 function units): Use for ev6 as well, for now.
+ (ffsdi2): New define_expand and define_insn, for TARGET_CIX.
+ (sqrt[sd]f2): New patterns, for TARGET_CIX.
+ (s{min,max}[qh]i3): New patterns, for TARGET_MAX.
+ (movsi): Use ldf/lsf when appropriate, instead of lds/sts.
+ (mov[sd]i): Add use of ftio/itof for TARGET_CIX.
+ * configure.in (alpha*-dec-osf*): Set MASK_SUPPORT_ARCH for >= 4.0B.
+ Rename MASK_BYTE_OPS to MASK_BWX.
+
+ * i386/mingw32.h (STANDARD_INCLUDE_DIR): New macros.
+ (STARTFILE_SPEC, PATH_SEPARATOR): Likewise.
+
+ * configure.in (AC_PROG_LN_S): Remove; unneeded.
+ (*cygwin32*, *mingw32*): Default prefix to /usr.
+ (symbolic_link): Set to "cp -p" if no "ln -s"; add AC_SUBST.
+ (configure.lang call): Change remaining use of config.h to auto-conf.h.
+
+ * Makefile.in (LN): Add new symbol.
+ (FLAGS_TO_PASS): Pass it down.
+ (stage[1-4]-start): Use $(LN), not "ln -s".
+
+ * mips.h (flag_omit_frame_pointer, frame_pointer_needed, optimize):
+ Remove declarations: no longer needed.
+ * pyr.md: Remove unneeded declarations of `optimize'.
+ * h8300.md: Likewise.
+ * sparc.c (dwarf2out_cfi_label): Add declaration.
+ (save_regs, output_function_prologue): Remove cast for it.
+ (sparc_flat_{save_restore,output_function_prologue): Likewise.
+ ({save,restore}_regs): No longer inline.
+
+Mon Sep 8 03:08:35 1997 Jim Wilson <wilson@cygnus.com>
+
+ * i960.h (LINK_SPEC): Handle -mjX and -mrp switches.
+
+ * mips.md (nonlocal_goto_receiver): Define.
+
+ * unroll.c (calculate_giv_inc): Handle increment with code PLUS.
+
+ * alpha.h (PREFERRED_RELOAD_CLASS): Return NO_REGS if NO_REGS
+ is passed in.
+ * emit-rtl.c (gen_lowpart_common): Add code to convert CONST_INT to
+ SFmode for 64 bit hosts.
+
+ * profile.c (output_arc_profiler): Verify next_insert_after is an
+ INSN before and after skipping a stack pop. Check next_insert_after
+ for non NULL before deferencing it.
+ (output_func_start_profiler): Set DECL_EXTERNAL to zero.
+
+ * va-mips.h: Add _VA_MIPS_H_ENUM ifdef/define/endif.
+
+ * m68k.md (iorsi_zexthi_ashl16): Disable.
+
+ * varasm.c (mark_constants): Don't look inside CONST_DOUBLEs.
+
+Sun Sep 7 18:30:46 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c (dwarf2out_frame_debug): Assume that in a PARALLEL
+ prologue insn, only the first elt is significant.
+ (output_call_frame_info): For exception handling, always use 4-byte
+ fields as specified by the dwarf2 spec.
+ Don't skip trivial FDEs.
+
+Sun Sep 7 03:35:28 1997 Paul Eggert <eggert@twinsun.com>
+
+ * fix-header.c (std_include_table): Remove bogus entry for popen
+ under stdio.h with ANSI_SYMBOL. popen is a POSIX2_SYMBOL.
+
+Fri Sep 5 17:19:58 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.md (movsf_ie+1): Typo fix.
+
+Fri Sep 5 10:08:44 1997 Jeffrey A Law (law@cygnus.com)
+
+ * v850: New directory for v850 port.
+ * v850/lib1funcs.asm: New file.
+ * t-v850, v850.c, v850.h, v850.md, xm-v850.h: New files.
+ * ginclude/va-v850.h: New file.
+ * varargs.h, stdarg.h: Include va-mn10200.h.
+ * configure.in (mn10200-*-*): New target.
+ * Makefile.in (USER_H): Add va-mn10200.h.
+
+ * xm-svr4.h (SYS_SIGLIST_DECLARED): Define.
+ * mips/xm-news.h (SYS_SIGLIST_DECLARED): Define.
+ * mips/xm-sysv4.h (SYS_SIGLIST_DECLARED): Define.
+
+Fri Sep 5 03:50:15 1997 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.md (fma patterns): Extend previous -mno-fused-madd
+ patch to DFmode patterns inadvertently omitted.
+
+Thu Sep 4 20:06:02 1997 Christian Kuehnke <Christian.Kuehnke@arbi.Informatik.Uni-Oldenburg.DE>
+
+ * sparc.md: Add ultrasparc scheduling support.
+ * sparc.h (RTX_COSTS): For MULT give v9 a cost of 25 insns.
+
+Wed Sep 3 20:56:24 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.h (UNALIGNED_SHORT_ASM_OP, UNALIGNED_INT_ASM_OP): Define.
+
+Wed Sep 3 20:52:07 1997 Joel Sherrill <joel@OARcorp.com>
+
+ * sh/rtems.h: New file.
+
+Wed Sep 3 17:30:36 1997 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * reg-stack.c (subst_stack_regs): Pop the stack register for a
+ computed goto which sets the same stack register.
+
+Wed Sep 3 17:30:36 1997 Jim Wilson <wilson@cygnus.com>
+
+ * i386.c (ix86_expand_epilogue): Emit blockage instruction when pic.
+
+Wed Sep 3 11:25:19 1997 Jeffrey A Law (law@cygnus.com)
+
+ * pa.md (reload peepholes): Fix typo in last change.
+
+Wed Sep 3 03:02:02 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.md (movsi_ie): Move t/r alternative after r/r alternative.
+
+Tue Sep 2 18:41:55 1997 Jeffrey A Law (law@cygnus.com)
+
+ * cccp.c (sys_errlist): Remove special 4.4bsd declaration.
+ * collect2.c (sys_errlist): Likewise.
+ * cpplib.c (sys_errlist): Likewise.
+ * gcc.c (sys_errlist): Likewise.
+ * protoize.c (sys_errlist): Likewise.
+ * configure.in: Check for strerror.
+ * xm-freebsd.h (HAVE_STRERROR): Remove definition.
+ * xm-gnu.h (HAVE_STRERROR): Likewise.
+ * xm-linux.h (HAVE_STRERROR): Likewise.
+ * xm-netbsd.h (HAVE_STRERROR): Likewise.
+ * alpha/xm-linux.h (HAVE_STRERROR): Likewise.
+ * i386/xm-bsd386.h (HAVE_STRERROR): Likewise.
+ * i386/xm-cygwin32.h (HAVE_STRERROR): Likewise.
+ * i386/xm-dos.h (HAVE_STRERROR): Likewise.
+ * i386/xm-mingw32.h (HAVE_STRERROR): Likewise.
+ * pa/xm-pa.h (HAVE_STRERROR): Likewise.
+ * pa/xm-papro.h (HAVE_STRERROR): Likewise.
+ * rs6000/xm-cygwin32.h (HAVE_STRERROR): Likewise.
+ * rs6000/xm-sysv4.h (HAVE_STRERROR): Likewise.
+
+ * collect2.c (SYS_SIGLIST_DECLARED): Renamed from
+ DONT_DECLARE_SYS_SIGLIST.
+ * mips-tfile.c (SYS_SIGLIST_DECLARED): Likewise.
+ * xm-linux.h (DONT_DECLARE_SYS_SIGLIST): Delete definition.
+ * xm-freebsd.h (DONT_DECLARE_SYS_SIGLIST): Likewise.
+ * alpha/xm-linux.h (DONT_DECLARE_SYS_SIGLIST): Delete definition.
+ * i386/xm-bsd386.h (DONT_DECLARE_SYS_SIGLIST): Likewise.
+ * i386/xm-sysv4.h (DONT_DECLARE_SYS_SIGLIST): Likewise.
+ * mips/xm-sysv4.h (DONT_DECLARE_SYS_SIGLIST): Likewise.
+ * rs6000/xm-sysv4.h (DONT_DECLARE_SYS_SIGLIST): Likewise.
+ * sparc/xm-sol2.h (DONT_DECLARE_SYS_SIGLIST): Likewise.
+ * configure.in: Check for sys_siglist declaration.
+
+ * Makefile.in (libgcc2.a): Add missing "else true" clause.
+ (stage{1,2,3,4}-start): Likewise.
+
+ * mn10200.h (INITIALIZE_TRAMPOLINE): PC relative instructions
+ are relative to the next instruction, not the current instruction.
+
+Tue Sep 2 14:15:32 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * toplev.c (xrealloc): Handle null ptr.
+
+Tue Sep 2 13:42:38 1997 Paul N. Hilfinger <hilfingr@CS.Berkeley.EDU>
+
+ * fixincludes: Permits spaces between # and define. Discard C++
+ comments in sys/pci.h on HP/UX 10.20.
+
+Tue Sep 2 09:28:31 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * rs6000.h (ROUND_TYPE_ALIGN): Don't blow up if no fields in record.
+
+Tue Sep 2 00:19:01 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * expr.c (expand_expr, case COND_EXPR): It's OK to merge two
+ SAVE_EXPRs.
+
+Mon Sep 1 23:36:45 1997 Jeffrey A Law (law@cygnus.com)
+
+ * pa.c (restore_unscaled_index_insn_codes): New function.
+ (record_unscaled_index_insn_codes): Likewise.
+ (output_function_prologue): Call restore_unscaled_index_insn_codes.
+ (output_function_epilogue): Free memory for unscaled_index_insn_codes.
+ (pa_reorg): Call record_unscaled_index_insn_codes.
+
+Mon Sep 1 14:46:09 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.md (casesi_jump_1, casesi_jump2): Generate expanders.
+ (casesi_jump): Delete.
+ (casesi) Use gen_casesi_jump_1 and gen_casesi_jump2 instead of
+ gen_casesi_jump.
+
+Mon Sep 1 14:36:36 1997 Paul Eggert <eggert@twinsun.com>
+
+ * sparc/sol2.h (CPP_SPEC): Add -D__STDC__=0 unless -ansi
+ or -traditional, for compatibility with Sun's practice.
+ * i386/sol2.h (CPP_SPEC), rs6000/sol2.h (CPP_SPEC): Likewise.
+ * configure.in ({sparc,i[3456]86,powerpcle}-*-solaris2*):
+ Set fixincludes=Makefile.in.
+
+Mon Sep 1 14:08:23 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * Makefile.in (config.status): Depend on version.c.
+
+Mon Sep 1 13:48:02 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * acconfig.h: Remove include of config2.h.
+ * configure.in: Build auto-config.h, not config.h, from autoconf data.
+ Add auto-conf.h in front of all other host_xm_file entries.
+ Make config.h, not config2.h, from host_xm_file.
+ * Makefile.in (auto-config.h): New rule; was config.h.
+ (distclean): Remove auto-config.h, not config2.h.
+
+ * expr.c (do_jump_by_parts_equality_rtx): Try to do by IOR of
+ all the words.
+
+Mon Sep 1 13:07:36 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * sparc/t-vxsparc (TARGET_LIBGCC2_CFLAGS): New definition.
+ (LIBGCC2_CFLAGS): Deleted.
+ * m68k/t-vxworks68: Likewise.
+ * i960/t-vxworks960: Likewise.
+ * a29k/t-vx29k: Likewise.
+
+Sun Aug 31 17:12:27 1997 Paul Eggert <eggert@twinsun.com>
+
+ * real.c (EMULONG): Correct typo in spelling of HOST_BITS_PER_LONGLONG.
+
+Fri Aug 29 16:13:51 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mips.md (movstrsi_internal[23]): Set insn type to "store" to
+ get more accurate schedules.
+
+ * pa.md (reload_peepholes): Make sure operand is a REG before
+ examining REGNO. Allow general registers too.
+
+Thu Aug 28 12:34:56 1997 Doug Evans <dje@seba.cygnus.com>
+
+ * reload1.c (reload_cse_no_longer_dead): Don't pass incremented regno
+ to SET_HARD_REG_BIT, it can be evaluated twice.
+
+Wed Aug 27 20:15:53 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh/elf.h: (LINK_SPEC): Use shlelf.
+ (USER_LABEL_PREFIX, LOCAL_LABEL_PREFIX, ASM_FILE_START): Redefine.
+ * sh/lib1funcs.asm (___ashrsi3, ___ashlsi3, ___lshrsi3):
+ Truncate shift count. Use braf if not SH1.
+ * sh.c (sfunc_uses_reg): No longer static.
+ Check for SImode inside the USE.
+ (shiftcosts, expand_ashiftrt, shl_sext_kind):
+ Use SH_DYNAMIC_SHIFT_COST.
+ (sh_dynamicalize_shift_p, output_branchy_insn): New functions.
+ (output_ieee_ccmpeq, mova_p, cache_align_p, fixup_aligns): Likewise.
+ (branch_offset, short_cbranch_p, med_branch_p): Likewise.
+ (braf_branch_p, align_length, fixup_addr_diff_vecs): Likewise.
+ (addr_diff_vec_adjust, get_dest_uid, gen_far_branch): Likewise.
+ (split_branches, regs_used, gen_block_redirect): Likewise.
+ (from_compare): Can't compare non-zero DImode constant directly.
+ Emit special code for TARGET_SH3E floating point with code == GE.
+ Force 0.0 into a register for SH3E.
+ (print_operand): Add ','.
+ Emit the actual comparison instruction.
+ (sh_builtin_saveregs): Save floating point registers in order that
+ allows pre-decrement.
+ (find_barrier): New arguments num_mova and mova. Changed caller.
+ When rewinding to before a mova, also restore the last found barrier.
+ Branch is now known to be shortened.
+ Prefer barriers where no new alignment is needed.
+ More generic alignment for cache lines.
+ Add checks for pieces of code that use more table space than their
+ own size.
+ Fix up the barrier we return so that the alignment will always be
+ after the table.
+ Remove limit adjustments for table alignment.
+ Handle PARALLELs correctly.
+ (machine_dependent_reorg): Add extra pass to split insns.
+ Don't scan instructions twice for broken moves.
+ Calculate insn length, call fixup_addr_diff_vecs.
+ Call split_branches.
+ Add alignment for loops and after BARRIERs.
+ Initialize max_uid_before_fixup_addr_diff_vecs.
+ Advance mdep_reorg_phase.
+ Clear insn_addresses.
+ (output_far_jump): Use braf and/or pre-allocated scratch register
+ when possible.
+ (expand_ashiftrt): Truncate shift count.
+ (push_regs): Push PR last.
+ (sh_expand_epilogue): Pop PR first.
+ (code_for_indirect_jump_scratch, mdep_reorg_phase): New variables.
+ (uid_align, uid_align_max): Likewise.
+ (max_uid_before_fixup_addr_diff_vecs, sh_addr_diff_vec_mode): Likewise.
+ (braf_label_ref_operand): New predicate.
+ (initial_elimination_offset): calculate offset from
+ RETURN_ADDRESS_POINTER_REGNUM starting with total_saved_regs_space.
+ (output_branch): Expect out-of-range condbranches to have been split.
+ * sh.md (rotlsi3_16): Named insn.
+ (rotlsi3): Rewritten to use superoptimizer patterns.
+ (adddi3, subdi3, ashrsi2_16, ashrsi2_31): Always split.
+ (movsi_i, movsi_ie): replace t/z alternative with t/r alternative.
+ Use pcload_si and load_si insn types.
+ (adddi3+1, subdi3+1, ashrsi2_16+1, ashrsi2_31+1) New define_splits.
+ (addc, subc, ashlsi_c): New insns.
+ (attribute "type"): New values dyn_shift, load_si, pcload_si, fmove,
+ jump_ind, arith3 and arith3b.
+ (function_unit "fp"): Take fmove into account.
+ (function_unit "int"): Uses one cycle for !dyn_shift.
+ (function_unit "memory"): Special case for load_si and pcload_si.
+ (attribute "in_delay_slot): handle pcload_si.
+ (cmpgtdi_t, cmpgedi_t, cmpgeudi_t, cmpgtudi_t): Type arith3.
+ (cmpsi+1, cmpeqdi_t) Type arith3b.
+ (movsf_ie, alternatives f/fGH/X, f/y/X, y/f/X): Type fmove.
+ (extendsidi2): Delete.
+ (cmpeqsi_t-2): Delete. (Redundant with movt.)
+ (*rotlhi3_8) Name.
+ (iorsi3, rotlsi3_1, rotlsi3_31, rotlsi3_16, (*rotlhi3_8): Type arith.
+ (ashlsi3_k, ashlhi3_ki, ashrsi2_16, ashrsi2_31, lshrsi3_m): Likewise.
+ (lshrsi3_k, lshrhi3_m, lshrhi3_k, ashldi3_k, lshrdi3_k): Likewise.
+ (ashrdi3_k, xtrct_left, xtrct_right, dect, mova, movt): Likewise.
+ (movt): Likewise.
+ (ashlsi3_d, ashrsi3_d, lshrsi3_d): Type dyn_shift.
+ (indirect_jump_scratch, *casesi_jump_1, *casesi_jump_2): Type jump_ind.
+ (ashlsi3, ashlsi3_n, lshrsi3, lshrsi3_n): Use sh_dynamicalize_shift_p.
+ (movsf_ie+1, movsf_ie+2): Exchange.
+ (cmpeqdi_t-1, cmpeqdi_t, cmpgtdi_t, cmpgedi_t): New insns.
+ (cmpgeudi_t, cmpgtudi_t, movsi_i_lowpart, ieee_ccmpeqsf_t): Likewise.
+ (cmpdi, movnegt): New define_expands.
+ (movsi_ie): Add y,y alternative.
+ (sge): Use it for ! TARGET_IEEE. Use special code for TARGET_IEEE.
+ (sle): Use sge.
+ (align_4, casesi_jump): Now define_expand.
+ (casesi_0, addr_diff_vec_adjust, align_log): New patterns.
+ (*casesi_jump_[12]): Likewise.
+ (casesi): Use casesi_0 and casesi_jump.
+ (casesi_worker): Depends on the mode used for the table.
+ (define_delay for cbranches): Test TARGET_SH2.
+ Changed all callers of from_compare.
+ (attribute "length"): Take use of braf and scratch registers into
+ account.
+ (indirect_jump_scratch, block_branch_redirect): New patterns.
+ (jump): Call output_far_jump for any jump larger than 4 bytes.
+ (inverse_branch_true, inverse_branch_false): Remove.
+ (bne, blt, ble, bltu, bleu): Canonicalize.
+ (attribute "cpu"): Remove "sh0" alternative.
+ * sh.h (ADJUST_COST): Lower cost of non-address sfunc dependencies.
+ Adjust cost of load_si / pcload_si insns when not used for call.
+ (enum reg_class): Move GENERAL_REGS after FPUL_REGS.
+ (REG_CLASS_NAMES, REG_CLASS_CONTENTS): Likewise.
+ (REGISTER_MOVE_COST): Add costs for fpul <-> mac, pr moves.
+ Fix to match default cost in regclass. Move to T reg not costly.
+ When checking for GENERAL_REGS, check for R0_REGS too.
+ (INITIALIZE_TRAMPOLINE): Include code for constant parts.
+ (SHIFT_COUNT_TRUNCATED): Not true for TARGET_SH3.
+ (CPP_SPEC): Define __sh1__ if no specific cpu is selected.
+ (FUNCTION_BOUNDARY): Align to cache line boundary.
+ (optimize, sh_addr_diff_vec_mode, machine_dependent_reorg): Declare.
+ (addr_diff_vec_adjust, code_for_indirect_jump_scratch): Declare.
+ (short_cbranch_p, med_branch_p, braf_branch_p, align_length): Declare.
+ (output_ieee_ccmpeq, output_branchy_insn, sfunc_uses_reg): Declare.
+ (ASM_OUTPUT_ADDR_DIFF_ELT): Depends on sh_addr_diff_vec_mode.
+ (PREDICATE_CODES): Add braf_label_ref_operand and register_operand.
+ (IEEE_BIT, TAGET_IEEE, LOCAL_LABEL_PREFIX, ASSEMBLER_DIALECT): Define.
+ (CACHE_LOG, enum mdep_reorg_phase_e, TRAMPOLINE_ALIGNMENT): Define.
+ (SH_DYNAMIC_SHIFT_COST): Define.
+ (TARGET_SWITCHES): Remove -m0 entry. Add -mieee, -mno-ieee.
+ (OVERRIDE_OPTIONS): sh_cpu defaults to CPU_SH1.
+ Initialize sh_addr_diff_vec_mode.
+ (REG_ALLOC_ORDER): Move FP0 behind FP7.
+ Move all FP registers in front of the general registers.
+ (SECONDARY_OUTPUT_RELOAD_CLASS): Add case for MAC_REGS / PR_REGS.
+ When checking for GENERAL_REGS, check for R0_REGS too.
+ Fix direction of compares to {FIR,LA}ST_FP_REG.
+ (SECONDARY_INPUT_RELOAD_CLASS): check for fp_one_operand.
+ (ASM_OUTPUT_ALIGN_CODE, ASM_OUTPUT_LOOP_ALIGN, SH0_BIT): Delete.
+ (TARGET_SH0, PUSH_ROUNDING, TRAMPOLINE_TEMPLATE): Delete.
+ (TRAMPOLINE_ALIGN): Delete.
+ (processor_type): Remove PROCESSOR_SH0.
+ (ADJUST_INSN_LENGTH): Remove check for preceding BARRIER.
+ Adjust ADDR_DIFF_VECs. Add code for alignment instructions.
+ Check if insn needing a delay slot is already inside a SEQUENCE.
+
+ * va-sh.h (__va_rounded_size): Delete.
+ (__LITTLE_ENDIAN_P, __SCALAR_TYPE, __PASS_AS_FLOAT): Define.
+ (va_arg): Unify big and little endian code.
+ Optimization for small integers.
+
+ From Fred Fish:
+ * sh.h (INITIAL_ELIMINATION_OFFSET): Proper bracketing.
+ (REGNO_REG_CLASS, PREFERRED_RELOAD_CLASS): Likewise.
+ (SECONDARY_{OUTPUT,INPUT}_RELOAD_CLASS, LIBCALL_VALUE): Likewise.
+ (ROUND_ADVANCE, FUNCTION_ARG, FUNCTION_ARG_PARTIAL_NREGS): Likewise.
+ (FUNCTION_PROFILE, FUNCTION_EPILOGUE, RETURN_ADDR_RTX): Likewise.
+ (REGNO_OK_FOR_INDEX_P, EXTRA_CONSTRAINT_Q, MODE_DISP_OK_4): Likewise.
+ (GO_IF_LEGITIMATE_{INDEX,ADDRES}, LEGITIMIZE_ADDRESS): Likewise.
+ (CONST_COSTS, REGISTER_MOVE_COST, ASM_OUTPUT_CONSTRUCTOR): Likewise.
+ (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): Likewise.
+ (ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP, ASM_OUTPUT_LABEL): Likewise.
+ (ASM_OUTPUT_ALIGN), ASM_DECLARE_FUNCTION_NAME): Likewise.
+ (ASM_GLOBALIZE_LABEL, ASM_OUTPUT_CASE_LABEL): Likewise.
+ (ASM_OUTPUT_ADDR_DIFF_ELT, ASM_OUTPUT_ADDR_VEC_ELT) Likewise.
+ (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT, ASM_OUTPUT_INT): Likewise.
+ (ASM_OUTPUT_SHORT, ASM_OUTPUT_CHAR, ASM_OUTPUT_BYTE): Likewise.
+ (ASM_OUTPUT_SKIP, FINAL_PRESCAN_INSN, PRINT_OPERAND): Likewise.
+ (PRINT_OPERAND_ADDRESS, HANDLE_PRAGMA, ADJUST_INSN_LENGTH): Likewise.
+ (PROMOTE_MODE): Likewise.
+ (ASM_GENERATE_INTERNAL_LABEL): Use LOCAL_LABEL_PREFIX.
+ (ASM_OUTPUT_INTERNAL_LABEL): Use %L.
+ * sh/elf.h: (ASM_OUTPUT_LABELREF): Use %U.
+ (ASM_GENERATE_INTERNAL_LABEL): Use LOCAL_LABEL_PREFIX.
+ (ASM_OUTPUT_INTERNAL_LABEL, ASM_OUTPUT_SOURCE_LINE): Use %L.
+
+Wed Aug 27 16:42:21 1997 Bob Manson (manson@cygnus.com)
+
+ * t-h8300 (TARGET_LIBGCC2_CFLAGS): New definit.
+ (LIBGCC2_CFLAGS): Deleted.
+ * t-mn10200: Likewise.
+
+Wed Aug 27 17:10:51 1997 Jim Wilson <wilson@cygnus.com>
+
+ * m68k.md (iorsi3_internal): Readd ! TARGET_5200 check lost in
+ last change.
+
+Wed Aug 27 15:19:55 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * dwarfout.c (dwarfout_start_new_source_file): Strip leading '*'s
+ from label names.
+
+Wed Aug 27 14:33:38 1997 Jim Wilson <wilson@cygnus.com>
+
+ * reload.c (find_reloads, case '0'): Reject matching a non-offsettable
+ address where an offsettable address is required.
+
+Wed Aug 27 10:38:32 1997 Jeffrey A Law (law@cygnus.com)
+
+ * reorg.c (dbr_schedule): Allow current_function_return_rtx
+ to be something other than a REG.
+ * function.c (expand_function_end): Fix current_function_return_rtx
+ if it was a pseudo.
+
+ * t-freebsd (USER_H): Include EXTRA_HEADERS and LANG_EXTRA_HEADERS.
+ * x-netbsd: Likewise
+ * x-dgux (USER_H): Include EXTRA_HEADERS and LANG_EXTRA_HEADERS
+ (INSTALL_HEADERS): Delete.
+ * x-dguxbcs: Likewise.
+ * x-hp3bsd44: Likewise
+ * x-pa: Likewise.
+
+Wed Aug 27 07:15:58 1997 Klaus Espenlaub <kespenla@hydra.informatik.uni-ulm.de>
+
+ * configure.in (AC_PROG_CC, AC_PROG_MAKE_SET): Check for gcc before
+ testing for flex.
+
+Wed Aug 27 02:24:35 1997 Jim Wilson <wilson@cygnus.com>
+
+ * dwarfout.c (dwarfout_file_scope_decl, case TYPE_DECL): Check
+ TYPE_DECL_IS_STUB instead of DECL_NAME.
+
+ * Makefile.in (install-info): Don't cd into srcdir. Add srcdir to
+ filenames. Use sed to extract base filename for install.
+
+Wed Aug 27 01:56:18 1997 Doug Evans <dje@seba.cygnus.com>
+
+ * loop.c (combine_movables): Earlier insns don't match later ones.
+
+ * c-decl.c (grokdeclarator): If array index or size calculations
+ overflow, issue an error.
+ * fold-const.c (int_const_binop): New static function.
+ (const_binop, size_binop): Call it.
+
+Tue Aug 26 17:51:56 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * collect2.c (main): Check SCAN_LIBRARIES instead of LDD_SUFFIX
+ to decide whether to always emit init and fini handles.
+
+Tue Aug 26 13:51:10 1997 Jim Wilson <wilson@cygnus.com>
+
+ * stor-layout.c (layout_record): Test DECL_PACKED instead of
+ TYPE_PACKED to determine alignment.
+
+ * combine.c (try_combine): Distribute REG_DEAD notes created for
+ i3dest_killed similar to the ones created for i2dest_in_i2src
+ and for i1dest_in_i1src.
+
+Tue Aug 26 11:36:34 1997 Jeffrey A Law (law@cygnus.com)
+
+ * loop.c (check_final_value): Don't miss a biv increment in a
+ parallel.
+
+ * loop.c (check_dbra_loop): If the loop biv is only used
+ for counting, then normalize it so that the initial
+ value is zero.
+
+Tue Aug 26 06:19:48 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarfout.c (*_LABEL): Add initial '*'.
+
+Tue Aug 26 05:27:28 1997 Richard Henderson <rth@cygnus.com>
+
+ * alpha/elf.h (LINK_SPEC): Conditionalize on USE_GNULIBC_1.
+ * configure.in (alpha-*-linux-gnulibc1): New target.
+ (alpha-*-linux-gnu*): Don't build crtbegin/end.
+
+Mon Aug 25 19:11:38 1997 Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE>
+
+ * reload1.c (reload_cse_simplify_operands): Fix typo.
+
+Mon Aug 25 19:04:42 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * c-typeck.c (common_type): Always prefer long double to double.
+
+Mon Aug 25 08:55:00 1997 Jeffrey A Law (law@cygnus.com)
+
+ * pa.c (secondary_reload_class): (mem (mem ... )) does not need
+ secondary reloads.
+
+ * pa.c (hppa_builtin_saveregs): Emit a blockage insn after the
+ store of the argument registers.
+
+Sun Aug 24 21:25:06 1997 Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE>
+
+ * reload1.c (reload_cse_mem_conflict_p, case MEM): Also check
+ for conflict with the address.
+
+Sat Aug 23 18:43:22 1997 Jim Wilson <wilson@cygnus.com>
+
+ * acconfig.h (NEED_DECLARATION_CALLOC): Add.
+ * configure.in: Add GCC_NEED_DECLARATION call for calloc.
+ * rs6000/xm-rs6000.h (malloc, realloc, calloc, free): Delete
+ declarations.
+
+ * m68k/m68kemb.h (LIB_SPEC): Add missing comment end before it.
+ * m68k/next.h (GO_IF_INDEXABLE_BASE): Fix typo in undef.
+
+Sat Aug 23 00:18:22 1997 Jeffrey A Law (law@cygnus.com)
+
+ * pa.c (pa_reorg): Always put begin_brtab and end_brtab insns
+ around branch tables.
+ * pa.md (begin_brtab, end_brtab): Only emit the .begin_brtab
+ and .end_brtab directives if TARGET_GAS.
+
+Fri Aug 22 19:17:25 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * function.c (instantiate_virtual_regs_1, case ADDRESSOF):
+ New case.
+ (fix_lexical_addr): Handle (addressof (mem ...)).
+
+Thu Aug 21 17:56:06 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * reload.c (push_secondary_reload): If SECONDARY_MEM_NEEDED,
+ call get_secondary_mem for input before adding reload and
+ for output after.
+ (push_reload): Likewise.
+
+Thu Aug 21 15:57:03 1997 Jim Wilson <wilson@cygnus.com>
+
+ * stmt.c (start_cleanup_deferal, end_cleanup_deferal): Test
+ block_stack before dereferencing it.
+
+Wed Aug 20 15:45:52 1997 Dave Love <d.love@dl.ac.uk>
+
+ * dwarf2.h (enum dwarf_call_frame_info): Remove trailing comma from
+ list.
+
+Wed Aug 20 15:30:36 1997 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.c (ix86_prologue, ix86_epilogue): New functions.
+ ({function,ix86_expand}_{pro,epi}logue, ix86_expand_prologue):
+ Use ix86_prologue.
+
+Wed Aug 20 14:57:11 1997 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.h (ISSUE_RATE): Define instead of MACHINE_issue_rate.
+
+Tue Aug 19 17:10:56 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * cplus-dem.c: Add 'extern' to prepends_underscore.
+
+Tue Aug 19 15:46:30 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mips/r3900.h (SUBTARGET_CC1_SPEC): Remove some unnecessary stuff.
+ (MIPS_CPU_STRING_DEFAULT, MIPS_ISA_DEFAULT): Define.
+
+Mon Aug 18 21:49:02 1997 Jim Wilson <wilson@cygnus.com>
+
+ * reload.c (find_reloads): Add code to convert RELOAD_FOR_OPADDR_ADDR
+ reloads to RELOAD_FOR_OPERAND_ADDRESS reloads.
+
+Mon Aug 18 17:39:02 1997 Mike Meissner <meissner@cygnus.com>
+
+ * configure.in ({powerpc,rs6000}*-*-*, --with-cpu): Remove single
+ quotes around the name.
+
+Mon Aug 18 17:26:42 1997 Doug Evans <dje@cygnus.com>
+
+ * mips.md (movsi_ulw,movsi_usw,loadgp): Give unspec a mode.
+
+Mon Aug 18 11:05:17 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mips/r3900.h (TARGET_DEFAULT): Turn on MASK_MIPS3900.
+
+Sun Aug 17 14:39:18 1997 Gavin Koch (gavin@cygnus.com)
+
+ * mips/elf.h (PREFERRED_DEBUGGING_TYPE): Only set if not already set.
+ * mips.c (TARGET_{SINGLE,SOFT}_FLOAT): Make sure both aren't set.
+ (PROCESSOR_R3900): Set flag from option.
+ * mips.h: Add m3900 option.
+ ({PROCESSOR,TARGET,MASK}_R3900): Define.
+ (GENERATE_{BRANCHLIKELY,MADD,MULT3): Likewise.
+ (debugj,MASK_DEBUG_J): Delete to make room for m3900.
+ (BRANCH_LIKELY_P): Redefine to include 3900.
+ (GAS_ASM_SPEC,CC1_SPEC): Add m3900 option.
+ (RTX_COSTS): Add 3900.
+ * mips.md: Add 3900, including three op madd and mult.
+ * configure.in (mipstx39{,el}-*-elf*): New cases.
+ * mips/r3900.h: New file.
+
+Fri Aug 15 07:34:12 1997 Richard Earnshaw (rearnsha@arm.com)
+
+ * arm.md (umulsi3_highpart, smulsi3_highpart): Add extra reloading
+ alternatives.
+
+Fri Aug 15 07:34:12 1997 Torbjorn Granlund <tege@tege.pdc.kth.se>
+
+ * arm.md (umulsi3_highpart, smulsi3_highpart): New patterns.
+ * arm.c (arm_rtx_costs, case TRUNCATE): New case.
+
+Fri Aug 15 06:40:03 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * genemit.c (main): Write an include for flags.h.
+ * genoutput.c (main): Likewise.
+
+ * alpha.c (override_options): Turn off byte insns for cpu=ev4 or ev5.
+
+ * alpha.md (allocate_stack): If stupid reg allocation, add USE
+ for loop variable.
+
+ * fold-const.c (fold, compare cases): Add calls to `fold' to
+ previous change.
+
+Wed Aug 13 17:32:38 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * rtl.h ({SET,}ADDRESSOF_DECL): op 1 of ADDRESSOF is now the decl.
+ * function.c (put_var_into_stack, gen_mem_addressof,
+ put_addressof_into_stack): Adjust.
+
+ * expr.c (expand_expr, case TARGET_EXPR): Call mark_addressable
+ again for the slot after we give it RTL.
+ (expand_expr, case VAR_DECL): Lose gen_mem_addressof case.
+
+Wed Aug 13 17:29:25 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * c-lex.c (check_newline): Pass finput again to HANDLE_PRAGMA.
+
+Wed Aug 13 16:51:35 1997 Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE>
+
+ * reload1.c (reload_cse_simplify_operands): New function.
+ (reload_cse_no_longer_dead,reload_cse_delete_death_notes): Likewise.
+ (no_longer_dead_regs): New static variable.
+ (reload_cse_simplify_set): Now returns int.
+ Don't delete death notes on previous insns, call
+ reload_cse_no_longer_dead instead.
+ Call validate_change with nonzero value for in_group.
+ (reload_cse_noop_set_p): Don't delete death notes on previous insns,
+ call reload_cse_no_longer_dead instead.
+ (reload_cse_regs): Initialize no_longer_dead_regs and call
+ reload_cse_delete_death_notes as appropriate.
+ Call apply_change_group after calling reload_cse_simplify_set.
+ Call reload_cse_simplify_set on elements of a PARALLEL.
+ Call reload_cse_simplify_operands if reload_cse_simplify_set could
+ not simplify things.
+
+Wed Aug 13 16:18:42 1997 Douglas Rupp <rupp@gnat.com>
+
+ * vms.h (LINK_SPEC): Echo -shared, not -share, to linker.
+
+Wed Aug 13 12:51:11 1997 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
+
+ * m68k.md: Add braces to clarify nesting.
+
+Wed Aug 13 12:51:11 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * calls.c (expand_call): Use assign_temp and mark_addressable
+ instead of calling gen_mem_addressof directly.
+
+Wed Aug 13 12:40:15 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * Makefile.in (install-man): Add missing $(exeext).
+
+ * configure.in (alpha*-dec-osf*): Merge various cases;
+ split off version-specific files in new case statement.
+ Include osf2or3.h even for OSF1.2.
+
+ * alpha.c (NUM_ARGS): New macro.
+ (CURRENT_FUNCTION_ARGS_INFO): Deleted.
+ (alpha_builtin_saveregs): Use new macro.
+ (function_arg): Deleted.
+ (alpha_arg_type, alpha_arg_info_reg_val): New functions.
+ * vms.h (enum avms_arg_type, avms_arg_info): New types.
+ (CUMULATIVE_ARGS, INIT_CUMULATIVE_ARGS): Update definitions
+ to use new types.
+ (SETUP_INCOMING_VARARGS): Likewise.
+ (FUNCTION_ARG{,_PARTIAL_NREGS}, FUNCTION_ARG_ADVANCE): Likewise.
+ Only update CUM in FUNCTION_ARG_ADVANCE.
+
+Tue Aug 12 19:27:32 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * integrate.c (save_for_inline_copying): Use 0, not NULL_PTR,
+ as initial value for real_label_map.
+ (copy_for_inline): Likewise.
+
+Tue Aug 12 16:15:36 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * rtl.h (BYTECODE_LABEL): Use XSTR, not XEXP.
+
+ * calls.c (expand_calls): Properly call any_pending_cleanups.
+
+Tue Aug 12 12:18:01 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * function.c (purge_addressof_1): Add force argument.
+ (purge_addressof): If there are any ASM_OPERANDS in an insn, always
+ put ADDRESSOFs into the stack.
+
+ * function.c (setjmp_protect): See through addressof.
+ (setjmp_protect_args): Likewise.
+ * calls.c (expand_call): For now, only use addressof if the type
+ doesn't promote.
+ * function.c (put_var_into_stack): Likewise.
+ * expr.c (expand_expr): Likewise.
+ * toplev.c (rest_of_compilation): Check inlineable instead of
+ DECL_INLINE.
+ * function.c (purge_addressof_1): Try recognizing the insn with
+ and without the SUBREG. If it doesn't work, just put the REG into
+ the stack.
+ (gen_mem_addressof): Set the mode of the MEM to the mode of the type.
+ (put_var_into_stack): Don't be fooled by addressof in an enclosing
+ scope.
+
+Sun Aug 10 22:19:19 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * explow.c (probe_stack_range): Add USE for test_addr if -O0.
+
+Sun Aug 10 22:15:40 1997 Jason Merrill <merrill@churchy.gnu.ai.mit.edu>
+
+ * toplev.c (rest_of_compilation): Move purge_addressof before loop.
+
+Sun Aug 10 15:25:51 1997 Jim Wilson <wilson@cygnus.com>
+
+ * toplev.c (main): In -g handling code, add code to set len.
+
+ * sdbout.c (plain_type_1, case ARRAY_TYPE): Verify that TYPE_DOMAIN
+ has integer TYPE_{MAX,MIN}_VALUE before using them.
+
+ * alpha.md (extendqihi2): Use HImode not QImode in force_reg call.
+
+Sun Aug 10 16:47:34 1997 Nick Burrett <nick.burrett@btinternet.com>
+
+ * arm/aof.h (COMMON_SECTION): New macro, define common_section.
+ (EXTRA_SECTION_FUNCTIONS): Add COMMON_SECTION.
+ (EXTRA_SECTIONS): Add in_common.
+ (ASM_OUTPUT_COMMON): Call common_section() to indicate we've
+ changed areas.
+
+Sat Aug 9 20:04:35 1997 Jim Wilson <wilson@cygnus.com>
+
+ * dwarf2out.c (gen_subprogram_die): Handle redefinition of an
+ extern inline function.
+
+Sat Aug 9 13:01:06 1997 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000/sysv4.h (*_SPEC): Add support for -mads and -myellowknife.
+ Use a common crt0.o for all embedded platforms. Use --start-group
+ and --end-group instead of -( and -) to allow better cut and pasting
+ when debugging the linker. Set default start for MVME text.
+ (TARGET_SWITCHES): Add -mads and -myellowknife.
+
+Fri Aug 8 20:12:43 1997 Per Bothner <bothner@cygnus.com>
+
+ * dwarf2out.c (gen_enumeration_type_die):
+ Make code work for a tag name, without a TYPE_STUB_DECL.
+ (gen_struct_or_union_type_die): Likewise.
+
+Fri Aug 8 18:10:40 1997 Marc Lehmann <pcg@goof.com>
+
+ * i386/go32.h (HAS_INIT_SECTION, HAVE_ATEXIT): New macros.
+
+Fri Aug 8 17:30:22 1997 H.J. Lu <hjl@gnu.ai.mit.edu>
+
+ * i386.c (output_pic_addr_const, case PLUS): Emit the constant first.
+
+Fri Aug 8 17:07:36 1997 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * m88k.c (m88k_expand_prologue): Set MEM_IN_STRUCT_P of va_list
+ template.
+
+ * reg-stack.c (compare_for_stack_reg): Swap only if the source and
+ destination are both on the regstack.
+ (subst_stack_regs_pat): Put the destination at the top of the regstack.
+
+Fri Aug 8 17:03:21 1997 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
+
+ * i386.md (pop): pop increments the stack pointer.
+ (prologue_set_stack_ptr): New pattern.
+ * i386.c (ix86_expand_prologue): Use prologue_set_stack_ptr
+ instead of subsi3.
+
+Fri Aug 8 17:00:36 1997 Paul Eggert <eggert@twinsun.com>
+
+ * gansidecl.h, halfpic.h (STDIO_PROTO): Remove.
+ * bitmap.h, c-tree.h, output.h, reload.h, rtl.h (STDIO_PROTO):
+ Replace with PROTO in include files.
+ * bc-emit.c: Include <stdio.h> before include files that formerly
+ used STDIO_PROTO.
+ * bc-optab.c, c-common.c, c-decl.c, caller-save.c, calls.c: Likewise.
+ * convex.c, i860.c, mips.c, spur.c, tahoe.c, emit-rtl.c: Likewise.
+ * explow.c, expmed.c, expr.c, genattrtab.c, halfpic.c: Likewise.
+ * jump.c, optabs.c, profile.c, recog.c, regclass.c: Likewise.
+ * rtlanal.c, sdbout.c, unroll.c: Likewise.
+ * genattrtab.c (main): Generate files that include <stdio.h>
+ before including files that formerly used STDIO_PROTO.
+ * genemit.c (main), genextract.c (main), genopinit.c (main): Likewise.
+ * genoutput.c (output_prologue), genpeep.c (main): Likewise.
+ * genrecog.c (main): Likewise.
+ * halfpic.h (PROTO): Use "gansidecl.h" to define this instead.
+ (half_pic_finish): Declare without prototype; FILE isn't defined.
+
+ * bitmap.c, c-aux-info.c, c-lex.c: Include "config.h" first.
+ * c-parse.in, c-pragma.c, 1750a.c, a29k.c, alpha.c: Likewise.
+ * arm.c, clipper.c, dsp16xx.c, elxsi.c, fx80.c, gmicro.c: Likewise.
+ * h8300.c, i370.c, i386.c, i386/winnt.c, i960.c: Likewise.
+ * m32r.c, m68k.c, m88k.c, mn10200.c, mn10300.c, ns32k.c: Likewise.
+ * pa.c, pdp11.c, pyr.c, romp.c, rs6000.c, sparc.c, vax.c: Likewise.
+ * we32k.c, cppmain.c, dbxout.c, flow.c, fold-const.c: Likewise.
+ * gcc.c, gcov.c, global.c, integrate.c, local-alloc.c: Likewise.
+ * loop.c, mips-tdump.c, mips-tfile.c, objc-act.c: Likewise.
+ * real.c, reg-stack.c, reload.c, reload1.c, reorg.c, sched.c: Likewise.
+ * stupid.c, tree.c, varasm.c, xcoffout.c: Likewise.
+
+Fri Aug 8 14:52:35 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * function.c (fixup_stack_1): Stack slots can also be relative to
+ the frame or stack pointers.
+
+Fri Aug 8 14:13:49 1997 Richard Henderson <richard@gnu.ai.mit.edu>
+
+ * dwarf2out.c (reg_loc_descriptor): Fix prototype.
+ (concat_loc_descriptor): New function.
+ (loc_descriptor): Call it.
+ (add_AT_location_description): Also elide the descriptor if both
+ halves of a CONCAT are pseudos.
+ (add_location_or_const_value_attribute): Recognize CONCAT too.
+
+Fri Aug 8 06:36:29 1997 Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE>
+
+ * c-common.c (if_stack{,_space,_pointer}): New static variables.
+ (c_expand_{start_cond,start_else,end_cond}): New functions.
+ * c-parse.in (compstmt_count): New static variable.
+ (compstmt_start): New rule.
+ (compstmt): Use new rule.
+ (do_stmt_start): Update compstmt_count.
+ (simple_if, stmt): Use new versions of start_cond, start_else,
+ and end_cond.
+
+Thu Aug 7 15:35:25 1997 Jim Wilson <wilson@cygnus.com>
+
+ * mips/iris6.h (TARGET_LONG64): Don't define here.
+ * mips.c (override_options): Set MASK_LONG64 for ABI_64.
+
+ * mips.c (function_prologue): Don't emit ".ent", ".frame",
+ ".mask", ".fmask" if flag_inhibit_size_directive is true.
+ (function_epilogue): Don't emit ".end" if
+ flag_inhibit_size_directive is true.
+
+ * mips/iris6.h (STARTFILE_SPEC, LIB_SPEC): Move
+ -L/usr/lib{32,64}/mips? from STARTFILE_SPEC to LIB_SPEC.
+
+Thu Aug 7 13:14:21 1997 Torbjorn Granlund <tege@tunnis.tmg.se>
+
+ * fold-const.c (fold): Optimize unsigned x <= 0x7fffffff.
+
+Thu Aug 7 12:46:31 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * explow.c (convert_memory_address, case LABEL_REF): Copy
+ LABEL_REF_NONLOCAL_P.
+
+ * expr.c (store_constructor): Use CONST0_RTX macro, not always
+ the integer version, when clearing a register.
+
+ * varasm.c (output_constructor): Correctly check for
+ multi-word constant.
+
+Thu Aug 7 10:04:42 1997 Douglas Rupp <rupp@gnat.com>
+
+ * alpha/vms-tramp.asm: New file.
+
+ * gcc.c (execute): Don't allow -pipe on VMS.
+
+ * alpha.c (vmskrunch): Don't strip off trailing digits.
+ (vms_valid_decl_attribute_p): New function.
+ * alpha/vms.h (TRAMPOLINE_TEMPLATE): Add another quadword of zeros.
+ (TRAMPOLINE_SIZE): Now 32 bytes.
+ (INITIALIZE_TRAMPOLINE): Put FNADDR at offset 16, CXT at 24.
+ (DBX_DEBUGGING_INFO, ASM_FORMAT_PRIVATE_NAME): Always undefine.
+ (STARTFILE_SPEC): Likewise.
+ (PREFERRED_DEBUGGING_TYPE): Define to be Dwarf-2.
+ (VALID_MACHINE_DECL_ATTRIBUTE, ASM_OUTPUT_SECTION{,_NAME}): New macros.
+ (ASM_OUTPUT_ALIGN{,ED_COMMON}): Redefine.
+ (LINK_SPEC): Pass -share and -v.
+ (ENDFILE_SPEC, LIBGCC2_SPEC): Don't redefine.
+
+Thu Aug 7 06:21:47 1997 Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE>
+
+ * Eliminate most -Wswitch warnings.
+ * c-common.c (binary_op_error): Add default case to switch.
+ (shorten_compare, truthvalue_conversion): Likewise.
+ * c-iterate.c (collect_iteratores): Likewise.
+ * c-typeck.c (comptypes, build_component_ref): Likewise.
+ (build_binary_op, lvalue_p, build_unary_op): Likewise.
+ (build_modify_expr, initializer_constant_valid_p): Likewise.
+ (c_expand_return): Likewise.
+ * calls.c (calls_function_1): Likewise.
+ * combine.c (find_split_point, simplify_rtx): Likewise.
+ (simplify_if_then_else, simplify_logical): Likewise.
+ (extract_left_shift, make_compound_operation, force_to_mode): Likewise.
+ (known_cond, nonzero_bits, num_sign_bit_copies): Likewise.
+ (merge_outer_ops, simplify_shift_const, simplify_comparison): Likewise.
+ (reversible_comparison_p, mark_used_regs_combine): Likewise.
+ * convert.c (convert_to_integer): Likewise.
+ * cse.c (canon_hash, exp_equiv_p): Likewise.
+ (set_nonvarying_address_components, canon_reg): Likewise.
+ (simplify_unary_operation, simplify_plus_minus): Likewise.
+ (simplify_relational_operation, fold_rtx): Likewise.
+ (cse_process_note, count_reg_usage): Likewise.
+ * dbxout.c (dbxout_symbol): Likewise.
+ * dwarf2out.c (lookup_cfa_1, print_die): Likewise.
+ * emit_rtl.c (copy_rtx_if_shared, reset_used_flags): Likewise.
+ * explow.c (plus_constant_wide, convert_memory_address): Likewise.
+ (promote_mode, emit_stack_save, emit_stack_restore): Likewise.
+ * expmed.c (expand_divmod, emit_store_flag): Likewise.
+ * expr.c (queued_subexp_p, is_zeros_p, safe_from_p): Likewise.
+ (bc_expand_expr, preexpand_calls, convert_move): Likewise.
+ * final.c (get_attr_length, final_scan_insn): Likewise.
+ (walk_alter_subreg, alter_cond): Likewise.
+ * flow.c (jmp_uses_reg_or_mem, mark_used_regs): Likewise.
+ * fold-const.c (operand_equal_p, twoval_comparison_p): Likewise.
+ (eval_subst, invert_truthvalue, range_binop): Likewise.
+ (make_range, fold): Likewise.
+ * function.c (fixup_var_refs_1, instantiate_virtual_regs_1): Likewise.
+ * genattrtab.c (attr_copy_rtx, make_canonical): Likewise.
+ (encode_units_mask, simplify_test_exp): Likewise.
+ (find_and_mark_used_attributes, write_test_expr): Likewise.
+ (simplify_with_current_value_aux, clear_struct_flag): Likewise.
+ (count_sub_rtxs, gen_insn walk_attr_value): Likewise.
+ (copy_rtx_unchanging): Likewise.
+ * genconfig.c (walk_insn_part): Likewise.
+ * genextract.c (walk_rtx): Likewise.
+ * genoutput.c (scan_operands): Likewise.
+ * genpeep.c (match_rtx): Likewise.
+ * genrecog.c (add_to_sequence): Likewise.
+ * integrate.c (copy_for_inline, copy_rtx_and_substitute): Likewise.
+ (subst_constants): Likewise.
+ * jump.c (duplicate_loop_exit_test, comparison_dominates_p): Likewise.
+ (mark_jump_label, rtx_renumbered_equal_p): Likewise.
+ (rtx_equal_for_thread_p): Likewise.
+ * local-alloc.c (memref_referenced_p): Likewise.
+ * loop.c (record_excess_regs, reg_in_basic_block_p): Likewise.
+ (get_condition, replace_call_address): Likewise.
+ (count_nonfixed_reads, find_and_verify_loops, find_mem_givs): Likewise.
+ (maybe_eliminate_biv_1, invariant_p, simplify_giv_expr): Likewise.
+ * optabs.c (emit_float_lib_cmp): Likewise.
+ * print-tree.c (print_node): Likewise.
+ * recog.c (validate_replace_rtx_1, find_single_use_1): Likewise.
+ * reload.c (subst_reg_equivs, find_reloads_address_1): Likewise.
+ (refers_to_regno_for_reload_p, find_equiv_reg): Likewise.
+ * reload1.c (set_label_offsets, eliminate_regs): Likewise.
+ (scan_paradoxical_subregs, count_occurrences): Likewise.
+ * rtl.c (copy_rtx, copy_most_rtx): Likewise.
+ * rtlanal.c (rtx_varies_p, rtx_addr_can_trap_p): Likewise.
+ (reg_mentioned_p, reg_referenced_p, modified_between_p): Likewise.
+ (modified_in_p, refers_to_regno_p, volatile_insn_p): Likewise.
+ (volatile_refs_p, side_effects_p): Likewise.
+ (inequality_comparison_p, replace_regs): Likewise.
+ * sched.c (sched_analyze_2): Likewise.
+ * stmt.c (expand_return): Likewise.
+ * tree.c (staticp, unsave_expr_now, contains_placeholder_p): Likewise.
+ (substitute_in_expr, build_type_attribute_variant): Likewise.
+ (simple_cst_equal): Likewise.
+ * unroll.c (remap_split_bivs): Likewise.
+ * varasm.c (const_hash, compare_constant_1): Likewise.
+ (decode_rtx_const, output_addressed_constants): Likewise.
+ (output_constant): Likewise.
+ * print-tree.c (print_node): Convert switch with one case into an if.
+ * sched.c (memrefs_conflict_p): Likewise.
+ * genrecog.c (write_tree_1): Output default case for every switch.
+
+ * profile.c (output_arc_profiler) [SMALL_REGISTER_CLASSES]:
+ Apply PATTERN only to insns.
+
+Thu Aug 7 06:13:20 1997 Robert Lipe <robertl@dgii.com>
+
+ * i386/t-sco5 (libgcc2-elf.a): Resync with Makefile.in.
+
+Wed Aug 6 19:28:05 1997 Jim Wilson <wilson@cygnus.com>
+
+ * dwarf2out.c (build_abbrev_table): Use xrealloc not xmalloc.
+
+Wed Aug 6 12:57:24 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c (output_call_frame_info): Always emit the info.
+ (dwarf2out_frame_debug): We can initialize the temp reg in the
+ epilogue, too.
+
+ * rtl.def: Add ADDRESSOF.
+ * rtl.h (ADDRESSOF_TYPE, SET_ADDRESSOF_TYPE): New macros.
+ * Makefile.in (mostlyclean): Remove *.addressof.
+ * toplev.c (rest_of_compilation): Set DECL_DEFER_OUTPUT on
+ non-nested inlines. Run purge_addressof after CSE.
+ (various): Add .addressof RTL dump file.
+ * rtl.c (copy_rtx): No need to copy ADDRESSOF.
+ * reload1.c (eliminate_regs): Elide ADDRESSOF.
+ * recog.c (general_operand): (MEM (ADDRESSOF ())) is a valid operand.
+ So is (ADDRESSOF ()).
+ (memory_address_p): (ADDRESSOF ()) is a valid memory address.
+ * integrate.c (expand_inline_function): If the structure_value_addr
+ is an ADDRESSOF, we can use it as a constant.
+ (copy_rtx_and_substitute): Copy a '0' operand over unchanged.
+ * function.c (fixup_var_refs_1): Remove (ADDRESSOF (MEM ())).
+ (gen_mem_addressof): New fn.
+ (put_addressof_into_stack): New fn.
+ (purge_addressof_1): New fn.
+ (purge_addressof): New fn.
+ (instantiate_decl): Don't bother looking into an ADDRESSOF.
+ (put_var_into_stack): Call gen_mem_addressof for local REGs instead
+ of calling put_reg_into_stack.
+ * expr.c (expand_expr, case TARGET_EXPR): Put the temp in a register
+ if it will fit.
+ (expand_expr, case ADDR_EXPR): Call gen_mem_addressof to take the
+ address of a REG.
+ * explow.c (memory_address): An ADDRESSOF is a valid memory address.
+ * dwarfout.c (location_or_const_value_attribute): Handle ADDRESSOF.
+ * dwarf2out.c (add_location_or_const_value_attribute): Handle
+ ADDRESSOF.
+ * cse.c (FIXED_BASE_PLUS_P): Add ADDRESSOF.
+ (NONZERO_BASE_PLUS_P): Add ADDRESSOF.
+ (canon_hash): Ignore '0' operands.
+ (find_best_addr): Don't try to replace an ADDRESSOF.
+ (fold_rtx): If our address has a const equiv of an ADDRESSOF, use it.
+ * calls.c (expand_call): Put the struct value in a register if
+ it fits.
+
+Tue Aug 5 16:10:45 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * mips.c (function_arg): Handle passing a struct
+ containing a double in a DFmode register without the PARALLEL.
+
+Tue Aug 5 12:27:31 1997 Doug Evans <dje@cygnus.com>
+
+ * configure.in (sparc-*-solaris2): Set float_format to i128.
+ * config/float-i128.h: New file.
+
+Mon Aug 4 17:45:19 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * combine.c (try_combine): If have PARALLEL of independent SETs
+ and have cc0, ensure insn using CC0 come first.
+
+Mon Aug 4 15:22:41 1997 Mike Meissner <meissner@cygnus.com>
+
+ * rs6000/sysv4.h (JUMP_TABLES_IN_TEXT_SECTION): Undef for System V
+ environments.
+
+Mon Aug 4 12:34:41 1997 Philip Blundell <pb@nexus.co.uk>
+
+ * configure.in (arm-*-aout): Set tmake_file correctly.
+
+Mon Aug 4 08:06:48 1997 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
+
+ * reload.c (find_reloads_address_1): Don't pass VOIDmode for an
+ integer argument of push_reload.
+
+ * rtlanal.c (may_trap_p): Fix unintended fall-through so divisions by
+ non-zero constants are handled properly. Return 1 for FP divisions.
+
+Mon Aug 4 06:52:20 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * c-common.c (check_format_info): Store each flag character only
+ once in the flag_chars array.
+
+Sun Aug 3 21:57:31 1997 Jim Meyering <meyering@eng.ascend.com>
+
+ * objc/Make-lang.in (objc/*.o): Depend on $(GCC_PASSES).
+
+Sun Aug 3 21:54:51 1997 Nick Burrett <n.a.burrett@btinternet.com>
+
+ * cpplib.c (cpp_start_read): Recognise suffixes 'cp' and 'c++'.
+
+Sun Aug 3 19:18:27 1997 Ralf Baechle <ralf@uni-koblenz.de>
+
+ * Makefile.in (mostlyclean): Remove libgcc1-test.
+
+Sun Aug 3 19:10:27 1997 Klaus Espenlaub <kespenla@hydra.informatik.uni-ulm.de>
+
+ * Makefile.in (T): Move to place where it can be overridden.
+ (install_common): Fix permissions of specs and EXTRA_PARTS files.
+
+Sun Aug 3 19:07:04 1997 Jan-Jaap van der Heijden <J.J.vanderHeijden@student.utwente.nl>
+
+ * gcc.c (default_compilers): Add default entries for Pascal.
+
+Sun Aug 3 18:38:41 1997 Richard Henderson <rth@cygnus.com>
+
+ * alpha.c (alpha_return_addr): New function.
+ (output_epilog): Zero alpha_return_addr_rtx.
+ * alpha.h (RETURN_ADDR_RTX): Call alpha_return_addr.
+
+Sun Aug 3 17:27:44 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * Makefile.in (INSTALL): Build in $(srcdir).
+
+ * config/linux.h (DEFAULT_VTABLE_THUNKS): New macro.
+
+Sun Aug 3 17:18:31 1997 Richard Earnshaw (rearnshaw@cambridge.arm.com)
+
+ * expr.c (expand_builtin, case BUILT_IN_RETURN_ADDRESS): Emit warning
+ if return address cannot be determined.
+
+Sun Aug 3 17:04:00 1997 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
+
+ * stupid.c (stupid_life_analysis): If function receives non-local
+ goto, don't let any registers live across calls.
+
+ * fold-const.c (merge_ranges): Make sure that if one range is subset
+ of another, it will always be the second range. Correct (+,-) case to
+ account for this.
+
+Sun Aug 3 16:48:30 1997 Paul Eggert <eggert@twinsun.com>
+
+ * c-lex.c (yylex): Remove duplicate check on high bit before
+ invoking int_fits_type_p.
+
+Sun Aug 3 16:44:41 1997 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
+
+ * reload.c (find_equiv_reg): If goal is a pseudo that got memory, a
+ store into memory makes it invalid. This was handled in the single
+ set case, but missing in the PARALLEL case.
+
+Sun Aug 3 09:13:47 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * expr.c (store_field): Return quickly if EXP is ERROR_MARK.
+
+ * c-typeck.c (unary_complex_lvalue): Don't warn about COMPOUND_EXPR
+ or COND_EXPR if FUNCTION_TYPE.
+
+ * alpha.h (ASM_SPEC): Add -O0.
+
+ * expr.h (clear_storage): Now returns rtx.
+ (emit_block_move): Likewise; delete duplicate declaration.
+ * expr.c (clear_storage, emit_block_move): Return address of
+ dest if calling memset/memcpy.
+ (expand_builtin, BUILT_IN_MEM{CPY,SET}): Return value from
+ clear_storage or emit_block_move if present.
+
+ * c-decl.c (start_function): Reset immediate_size_expand on
+ error return.
+
+Sat Aug 2 18:50:43 1997 Paul Eggert <eggert@twinsun.com>
+
+ * tree.c (int_fits_type_p): Negative ints never fit unsigned
+ types, and unsigned ints with top-bit-set never fit signed types.
+
+Sat Aug 2 16:25:43 1997 Per Bothner <bothner@frobnitz.gnu.ai.mit.edu>
+
+ * Makefile.in (EXTRA_C_OBJS): Removed.
+ (C_AND_OBJC_OBJS): New. Subsumes EXTRA_C_OBJS and OBJC_CCOMMON.
+ * objc/Make-lang.in (OBJC_CCOMMON): Removed.
+
+Sat Aug 2 16:11:57 1997 Doug Evans <dje@cygnus.com>
+
+ * configure.in: Build .gdbinit for top level build dir here.
+ (AC_OUTPUT): Pass oldstyle_subdirs to configure.lang.
+ * configure.lang: Fix building of .gdbinit for oldstyle lang subdirs.
+
+Sat Aug 2 13:48:15 1997 Ken Raeburn <raeburn@cygnus.com>
+
+ * cse.c (cse_insn): Ignore paradoxical SUBREGs unless we are
+ looking for such.
+
+Sat Aug 2 13:25:33 1997 Tristan Gingold (gingold@email.enst.fr)
+
+ * calls.c (expand_call): If -fcheck-memory-usage, use pseudo-register,
+ check indirectly called function is executable, and set rights of
+ memory for aggregate as write only.
+ (store_one_arg): If -fcheck-memory-usage, set rights for pushed
+ stack argument.
+ * c-decl.c (init_decl_processing): Add
+ __builtin_aggregate_incoming_address.
+ * explow.c (expr_size): Call expand_expr with appropriate flag.
+ * expr.c (expand_builtin, case BUILT_IN_AGGREGATE_INCOMING_ADDRESS):
+ New case.
+ (expand_assignment, expand_expr, emit_push_insn, store_expr):
+ Insert calls to chkr_check_addr, chkr_set_right, and chkr_copy_bitmap
+ when -fcheck-memory-usage.
+ (get_push_address, get_memory_usage_from_modifier): New functions.
+ * expr.h: Add expand_modifier flags.
+ (chkr_*_libfunc): New decls.
+ (memory_use_mode): New declaration.
+ * flags.h (flag_check_memory_usage, flag_prefix_function_name): New
+ declaration.
+ * function.c (put_var_into_stack, assign_parms): If
+ -fcheck-memory-usage, set the rights of pushed variable.
+ * optabs.c (chkr_{check_addr,set_right}_libfunc): New definitions.
+ (chkr_{copy_bitmap,check_exec}_libfunc): Likewise.
+ (init_optabs): Initialize these chkr_*_libfunc.
+ * stmt.c (expand_computed_goto): If -fcheck-memory-usage, check that
+ computed address of a goto is executable.
+ (expand_asm, expand_asm_operands): If -fcheck-memory-usage,
+ disallow asm statments.
+ * toplev.c (flag_check_memory_usage, flag_prefix_function_name): New
+ variable.
+ (f_options): Add `check-memory-usage' and `prefix_function_name'.
+ (main): Disable `-fomit-frame-pointer' if `-fcheck-memory-usage' is set
+ and the machine can't debug without the frame pointer.
+ * tree.h (built_in_function): Add BUILT_IN_AGGREGATE_INCOMING_ADDRESS.
+ * varasm.c (make_function_rtl, make_decl_rtl): Add a prefix when
+ flag_prefix_function_name_usage is set.
+ (assemble_name): Strip the CHKR_PREFIX.
+ * alpha.c (alpha_builtin_saveregs): If -fcheck-memory-usage,
+ set rights of saved registers.
+ * clipper.c (clipper_builtin_saveregs): Likewise.
+ * m88k.c (m88k_builtin_saveregs): Likewise.
+ * pa.c (hppa_builtin_saveregs): Likewise.
+ * sparc.c (sparc_builtin_saveregs): Likewise.
+
+Sat Aug 2 08:01:12 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * c-decl.c (grokdeclarator): Give error for `long double' and
+ refine text of some error messages.
+
+ * alpha.h (FLOAT_VALUE_TYPE, INTIFY, FLOATIFY, FLOAT_ARG_TYPE): Define.
+ * i860.h (FLOAT_VALUE_TYPE): Fix typo; was FLOAT_TYPE_VALLUE.
+
+ * calls.c (store_one_arg): Allow stack_slot to be SP in
+ ARGS_GROW_DOWNWARD case.
+
+ * c-decl.c (parmlist_tags_warning): Only suppress warning on
+ union if anonymous.
+
+ * libgcc2.c (_trampoline): Rework last change; both getpagesize
+ and mprotect are in cygwin32.
+
+ * reload1.c (reload): Add IN_ADDR to IN_ADDR_ADDR when computing
+ needs since they conflict.
+
+ * print-rtl.c (indent): Move to file level; was static in print_rtx.
+ (print_inline_rtx): New function.
+ * reload.c (debug_reload): Rework to make output more compact.
+
+ * dwarfout.c (output_compile_unit_die): Add support for Pascal.
+ * dwarf2out.c (gen_compile_unit_die): Likewise.
+
+ * c-typeck.c (lvalue_p, case BIND_EXPR, RTL_EXPR): Return 1 if array.
+
+ * Makefile.in (OBJC_OBJC): Delete from here.
+
+ * varasm.c (compare_constant_1, case STRING_CST): Compare TYPE_MODE.
+ (record_constant_1, case STRING_CST): Record TYPE_MODE.
+
+ * tree.c (contains_this_placeholder_p): Delete.
+ (contains_placeholder_p): Now contains code from above function.
+ (contains_placeholder_p, case 'r'): Don't look at offset info.
+ * expr.c (expand_expr, case PLACEHOLDER_EXPR): Find innermost
+ matching and don't check contains_placeholder_p.
+
+Fri Aug 1 17:15:07 1997 Per Bothner <bothner@cygnus.com>
+
+ * objc/objc-act.c (lang_init): Don't check_newline #if USE_CPPLIB.
+ * c-lex.c (lang_init): Remove (recently moved here).
+ * c-lang.c (lang_init): Restore, but add #if !USE_CPPLIB.
+
+Fri Aug 1 11:26:45 1997 Jeffrey A Law (law@cygnus.com)
+
+ * pa.c (pa_reorg): Explode ADDR_DIFF_VEC insns too.
+
+Thu Jul 31 19:37:22 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * libgcc2.c (getpagesize): Don't compile if __CYGWIN32__.
+
+Thu Jul 31 16:04:42 1997 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.c (output_to_reg, output_fix_trunc): Use scratch memory,
+ if available, instead of dynamically extending the stack.
+ (put_condition_code, print_operand): Added reverse_cc to reverse the
+ comparison when $ah is accessed directly instead of using eflags
+
+ * i386.md (*trunc*): Use scratch memory for output_fix_trunc.
+ (movsicc_1, movhicc_1) Change alternative 3 to:
+ jCC L1; mov; jmp L2; L1:mov; L2:
+ (movsfcc, movdfcc, movxfcc): Force constant operands to memory.
+ (movsfcc_1, movdfcc_1, movxfcc_1): Change alternative 3 as above.
+
+Thu Jul 31 16:04:42 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * i386.h (MAX_FIXED_MODE_SIZE): Define.
+
+Thu Jul 31 16:04:42 1997 Robert Lipe <robertl@dgii.com>
+
+ * i386/sco5.h (SWITCHES_NEED_SPACES) Define.
+ Required by the COFF (but not ELF) linker.
+
+Wed Jul 30 15:03:52 1997 Per Bothner <bothner@cygnus.com>
+
+ * demangle.h (DMGL_JAVA): New option to request Java demangling.
+ * cplus-dem.c: Various changes to produce Java output when passed
+ DMGL_JAVA. Thus "::" becomes "." and "JArray<Foo>" becomes "Foo[]".
+ (main): Support --java and -j flags to set DMGL_JAVA.
+
+Wed Jul 30 08:56:08 1997 Philip Blundell <Philip.Blundell@pobox.com>
+
+ * configure.in (arm-*-*): Replace with arm-*-aout.
+ * arm/aout.h (SET_ASM_OP): Define by default.
+ * arm/riscix.h (SET_ASM_OP: Undefine.
+ * arm.h (CPP_SPEC): Add %(subtarget_cpp_spec).
+ (SUBTARGET_CPP_SPEC): New macro.
+ * arm/linux.h: Include aout.h rather than arm.h directly.
+ (TARGET_CPU_DEFAULT): Define.
+ ({ASM,CPP}_SPEC): Remove.
+ * arm/t-linux (MULTILIB_OPTIONS): Use -mapcs-NN instead of -mN.
+ (LIB1ASMSRC): Use generic ARM version.
+ (CROSS_LIBGCC1): Define.
+ * arm/lib1funcs-linux.asm: Remove.
+
+Tue Jul 29 17:57:47 1997 Per Bothner <bothner@cygnus.com>
+
+ * Add hooks for using autconf-style Makefile.in in language subdirs.
+ * configure.in (all_outputs, oldstyle_subdirs): New variables.
+ Pass all_outputs to AC_OUTPUT.
+ * configure.lang: Only iterate over oldstyle_subdirs.
+
+ * Patches to use cpplib with cc1 #if USE_CPPLIB.
+ * configure.in (--enable-c-cpplib): New option.
+ (extra_c_flags, extra_c_objs): New variables.
+ * Makefile.in (EXTRA_C_OBJS): New variable.
+ (INTERNAL_CFLAGS): Add @extra_c_flags@.
+ (C_OBJS): Add $(EXTRA_C_OBJS).
+ * c-lex.c (generally): Replace getc and ungetc by macros GETC and
+ UNGETC. Avoid explicit references to finput.
+ (yy_get_token): New function, that calls cpp_get_token.
+ (init_parse): New function - calls init_lex.
+ (finish_parse): New function (called by compile_file).
+ (GET_DIRECTIVE_LINE): New macro wrapper replaces get_directive_line.
+ (lang_init): Don't check_newline - already know main_input_filename.
+ (handle_sysv_pragma): Remove FILE* parameter.
+ * toplev.c (finput): Remove #if USE_CPPLIB.
+ (compile_file): #if USE_CPPLIB don't open input file here,
+ do it in cpp_start_read. Call init_parse instead of init_lex.
+ At end, call finish_parse instead of fclose(finput).
+
+Mon Jul 28 15:48:29 1997 Brendan Kehoe <brendan@cygnus.com>
+
+ * integrate.c (expand_inline_function): Use xmalloc instead of
+ alloca for the LABEL_MAP.
+ (save_for_inline_copying): Likewise.
+
+Mon Jul 28 11:22:16 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * toplev.c (compile_file): Also emit any deferred TREE_PUBLIC inlines.
+ (rest_of_compilation): Use decl_printable_name instead of DECL_NAME
+ to identify functions in the RTL dump files.
+
+ * dwarf2out.c (add_location_or_const_value_attribute):
+ leaf_renumber_regs_insn. Also eliminate_regs here.
+ (add_AT_location_description): Not here. Don't emit anything
+ for a variable that has been optimized away.
+ (add_const_value_attribute): Likewise.
+
+ * dwarfout.c (location_or_const_value_attribute):
+ leaf_renumber_regs_insn. Also eliminate_regs here.
+ (location_attribute): Not here.
+
+ * stor-layout.c (layout_type): Fix ancient code to match ancient
+ comment. Use mode of field for one-field structs.
+
+Sun Jul 27 12:09:02 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * function.c (put_var_into_stack, trampoline_address): Treat
+ inline_function_decl like current_function_decl.
+ * expr.c (expand_expr, case LABEL_DECL): Likewise.
+ (expand_expr, case SAVE_EXPR): Handle top-level SAVE_EXPR by
+ moving into current function; abort if in incorrect context.
+ * fold-const.c (fold_range_test, fold): Avoid making SAVE_EXPR
+ if at top level.
+
+ * dwarfout.c (ASM_OUTPUT_SOURCE_FILENAME): Delete default value.
+
+ * alpha.h (TARGET_SWITCHES): Add -mno-byte.
+
+ * expr.c (get_inner_unaligned_p): Deleted.
+ (expand_assignment): Remove special-case of constant array.
+ (expand_expr, case ARRAY_REF): Likewise, and clean up remaining code.
+
+ * explow.c (probe_stack_range): Do probing with loop if more
+ than a small number.
+
+Fri Jul 25 15:42:34 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * configure.in: Finish fixing calculation if default thread
+ support is enabled.
+
+Fri Jul 25 15:30:09 1997 Doug Evans <dje@cygnus.com>
+
+ * Makefile.in (native): Depend on config.h.
+ (gcc.o): Depend on Makefile, not config.status.
+
+Fri Jul 25 10:56:50 1997 Jeffrey A Law (law@cygnus.com)
+
+ * pa.c (pa_reorg): If TARGET_BIG_SWITCH, then do not explode
+ ADDR_VEC insns. Slightly rework code which explodes ADDR_VEC
+ insns.
+ * pa.h (TARGET_BIG_SWITCH): Define.
+ (TARGET_SWITCHES): Add "big-switch" and "no-big-switch".
+ (CASE_VECTOR_MODE): Use TI or DI depending on TARGET_BIG_SWITCH.
+ (CASE_DROPS_THROUGH): Remove definition.
+ (ASM_OUTPUT_ADDR_VEC_ELT): Rewrite to handle TARGET_BIG_SWITCH.
+ (ASM_OUTPUT_ADDR_DIFF_ELT): Likewise.
+ * pa.md (casesi): Rework to avoid some potential long branch
+ problems (also makes generated code faster!). Handle
+ TARGET_BIG_SWITCH.
+ (casesi0): Corresponding changes.
+
+Fri Jul 25 08:36:47 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * calls.c: (expand_call): If -fstack-check and temp needed
+ for arg is too large, use alloca.
+ * expr.c (expand_expr, case MODIFY_EXPR): Don't preexpand calls
+ if LHS is an indirect via a constant pointer.
+
+Thu Jul 24 21:49:11 1997 Pat Rankin <rankin@eql.caltech.edu>
+
+ * bitmap.c (bitmap_operation): Reset CURRENT on deferred deletion.
+
+Wed Jul 23 23:52:14 1997 Chris Smith <csmith@convex.hp.com>
+
+ * convex.h (CHECK_FLOAT_VALUE): Fix OVERFLOW capitalization.
+
+Wed Jul 23 13:00:47 1997 Richard Earnshaw <rearnsha@cambridge.arm.com>
+
+ * configure.in (arm-*-netbsd*): Fix typo setting tmake_file.
+
+Wed Jul 23 06:39:35 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * configure.in (alpha*): Put quotes around MASK_GAS.
+
+Tue Jul 22 15:24:45 1997 Brendan Kehoe <brendan@cygnus.com>
+
+ * tree.c (array_type_nelts): Make sure the domain of TYPE is set
+ before we try to use it.
+
+Tue Jul 22 12:26:13 1997 Doug Evans <dje@cygnus.com>
+
+ * sparc.c (gen_v9_scc): Handle early clobber of result.
+ * sparc.md (seqdi_special): Don't clobber %xcc.
+ (snedi_special, seqdi_special_trunc, snedi_special_trunc): Likewise.
+ (snedi_zero, neg_snedi_zero, seqdi_zero, neg_seqdi_zero): Likewise.
+ (snedi_zero_trunc, seqdi_zero_trunc): Likewise. Renamed from ..._sp64.
+ (snedi_zero_trunc_sp32, seqdi_zero_trunc_sp32): Delete.
+
+ * Makefile.in (Makefile): Pass xmake_file, tmake_file to
+ configure.frag
+ (distclean): Delete Make-host, Make-target.
+ * configure.in (host_overrides): Set to Make-host.
+ (dep_host_xmakefile): Loop over all elements in host_make_file.
+ (target_overrides): Set to Make-target.
+ (dep_tmake_file): Loop over all elements in tmake_file.
+ (configure.frag): Pass dep_host_xmake_file, dep_tmake_file.
+ * configure.frag: New arguments xmake_files, tmake_files.
+ Build Make-host, Make-target.
+
+Mon Jul 21 23:17:44 1997 Paul Eggert <eggert@twinsun.com>
+
+ * objc/Make-lang.in, objc/Makefile.in: Comment out lines containing
+ just formfeeds.
+
+Mon Jul 21 14:05:46 1997 Doug Evans <dje@cygnus.com>
+
+ * Makefile.in (Makefile): Depend on config.status instead
+ of configure.
+ (config.status): Depend on configure. Run config.status --recheck
+ if out of date.
+ (cstamp-h.in): Use echo instead of touch.
+
+ * reload1.c (reload_cse_mem_conflict_p): Restore handling of
+ (mem:BLK const0_rtx) meaning all memory is clobbered.
+
+Mon Jul 21 06:20:10 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * m68k.md (iorsi_zexthi_ashl16): Mark output operand as earlyclobber.
+
+Sun Jul 20 06:11:30 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * configure.in (alpha*-*-*): Set cpu_type to alpha.
+ Change "alpha-" to "alpha*-" in all entries.
+ Set target_cpu_default for ev5 and ev56 systems.
+ Use symbolic names for target_cpu_default.
+ * alpha.c (override_options): Set default for alpha_cpu
+ from TARGET_CPU_DEFAULT.
+ * alpha.h (MASK_CPU_EV5): New macro.
+
+ * tree.c (contains_placeholder_p): Call contains_this_placeholder_p.
+ (contains_this_placeholder_p): Renamed from contains_placeholder_p.
+ Added new arg, PL.
+ Rework to make more consistent, check more codes, and avoid
+ undefined fields.
+ * expr.c (expand_expr, case PLACEHOLDER_EXPR): Pick outermost
+ object in placeholder_list of right type without a PLACEHOLDER_EXPR.
+
+Sat Jul 19 18:00:01 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * alpha.c (override_options): Allow processor of ev56 or 21164a.
+ (input_operand, case MEM): Correct test involving TARGET_BYTE_OPS.
+ * alpha.h (SECONDARY_{IN,OUT}PUT_RELOAD_CLASS): Don't need for
+ QImode or HImode if TARGET_BYTE_OPS.
+ (ASM_FILE_START): Write a .arch directive.
+ (STACK_CHECK_BUILTIN): New macro.
+ * alpha.md ({zero_,}extend[qh]i[dsh]i2): Rework TARGET_BYTE_OPS cases.
+ (mov[hq]i): Likewise.
+ (extend[qh]i[hsd]i2x): Add missing cases and fix typo in constraint.
+ (reload_{in,out}[qh]i): Disable for TARGET_BYTE_OPS.
+
+Fri Jul 18 23:24:57 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * varasm.c (make_decl_rtl): Don't use ASM_FORMAT_PRIVATE_NAME for
+ local decls with TREE_PUBLIC set.
+ (bc_make_decl_rtl): Likewise.
+
+Fri Jul 18 22:16:28 1997 Doug Evans <dje@cygnus.com>
+
+ * configure.in: Invoke AC_CONFIG_HEADER.
+ Check for string.h, strings.h, stdlib.h, time.h, unistd.h.
+ Check for whether malloc/realloc/free need to be declared.
+ (links): Rename config.h to config2.h.
+ (AC_OUTPUT): Create cstamp-h.
+ * Makefile.in (config.in,cstamp-h.in): Add rules for.
+ (config.h,cstamp-h): Add rules for.
+ (distclean): Delete config2.h, cstamp-h.
+ (ALL_CFLAGS): Add @DEFS@.
+ * aclocal.m4, acconfig.h: New files.
+
+ * Makefile.in (distclean): Delete Make-host, Make-target.
+ * configure.in (host_overrides): Set to host_xmake_file, don't create
+ Make-host.
+ (target_overrides): Set to tmake_file, don't create Make-target.
+ (language subdir support): Keep together.
+
+ * c-decl.c (duplicate_decls): Set DECL_ABSTRACT_ORIGIN to olddecl
+ if inline function and not new definition.
+
+ * configure.in: Don't loop trying to configure language subdirs.
+ Don't pass to configure.lang variables it doesn't use.
+ * configure.lang: Delete top level directory from loop.
+ Delete code not useful for language subdirs.
+
+Fri Jul 18 08:12:53 1997 Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE>
+
+ * toplev.c (rest_of_compilation): Call reload_cse_regs here.
+ * reload1.c (reload): Don't call it here.
+ (reload_cse_mem_conflict_p): Remove MEM_OFFSET and MEM_MODE args.
+ (reload_cse_mem_conflict_p, case MEM): Call anti_dependence.
+ (reload_cse_invalidate_mem): Update call to reload_cse_mem_conflict_p.
+ (reload_cse_regs): No longer static.
+ Call init_alias_analysis.
+ Ignore CLOBBER in a PARALLEL.
+
+Fri Jul 18 06:44:22 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * objc/Make-lang.in (objc-headers): Fix command for the new build
+ directory layout, don't pass srcdir variable.
+ * objc/Makefile.in (copy-headers): Use $(srcdir) from this
+ makefile, not the parent's.
+
+Thu Jul 17 16:03:03 1997 Doug Evans <dje@cygnus.com>
+
+ * configure.lang (EXTRA_HEADERS,EXTRA_PASSES,EXTRA_PARTS): Delete.
+ (EXTRA_PROGRAMS,EXTRA_OBJS,EXTRA_GCC_OBJS,MD_DEPS): Delete.
+ (version) Delete duplicate entry.
+ * configure.in (merged_frags): Delete unused variable.
+ (extra_headers_list): Move setting outside of subdir loop.
+ (extra_headers,extra_passes): Don't pass to configure.lang.
+ (extra_programs,extra_parts,extra_objs): Likewise.
+ (host_extra_gcc_objs,gxx_include_dir,md_cppflags): Likewise.
+
+Thu Jul 17 07:00:43 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * expr.h (STACK_CHECK_*): Provide default values.
+ (probe_stack_range): New declaration.
+ * flags.h (flag_stack_check): Likewise.
+ * explow.c (allocate_dynamic_stack_space): Call probe_stack_range.
+ (emit_stack_probe, probe_stack_range): New functions.
+ * function.c (expand_function_end): If function is non-leaf and stack
+ checking is requested, emit needed probes.
+ * reload1.c (reload): If checking stack, verify frame small enough.
+ * stmt.c (expand_decl): If stack checking, use alloca for large vars.
+ * toplev.c (flag_stack_check): New variable.
+ (f_options): Add "stack-check".
+
+ * reorg.c (mark_target_live_regs): Pass FIRST_PSEUDO_REGISTER to
+ call to EXECUTE_IF_SET_IN_REG_SET.
+
+Wed Jul 16 14:51:00 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * i960.h (ASM_OUTPUT_ALIGNED_BSS): Define.
+ (ASM_OUTPUT_ALIGNED_LOCAL): Use standard method to convert ALIGN
+ to power-of-two of bytes.
+
+ * sparc.h (ASM_OUTPUT_ALIGNED_BSS): Define.
+ * sparc/sysv4.h (ASM_OUTPUT_ALIGNED_BSS): Undef before definition.
+
+Wed Jul 16 14:34:09 1997 Klaus Espenlaub (kespenla@hydra.informatik.uni-ulm.de)
+
+ * calls.c (emit_library_call_value): Initialize all argvec elements.
+
+Wed Jul 16 14:31:39 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * global.c (global_conflicts): Pass FIRST_PSEUDO_REGISTER to
+ call to EXECUTE_IF_SET_IN_REG_SET.
+
+Wed Jul 16 10:57:03 1997 Richard Earnshaw (rearnsha@cambridge.arm.com)
+
+ * From Rob Black (r.black@ic.ac.uk) and Mark Brinicombe
+ (amb@physig.ph.kcl.ac.uk):
+ * configure.in (arm-*-netbsd*): New configuration.
+ * arm/netbsd.h, arm/t-netbsd, arm/xm-netbsd.h: New files.
+
+Wed Jul 16 10:57:03 1997 Richard Earnshaw (rearnsha@cambridge.arm.com)
+
+ * arm.c (tune_flags): New variable.
+ (target_{cpu,fpe}_name): Delete.
+ (arm_fpu_arch): New variable.
+ (arm_select): Also allow -march=... to configure just the
+ architecture.
+ (all_procs): Allow armv{2,2a,3,3m,4,4t} for use with -march=.
+ (arm_override_options): Handle -march=, but don't let -mcpu=
+ and -mtune= match the architecture names, since we can only
+ tune for an implementation. Rework selection of tuning options
+ for floating point.
+ (use_return_insn): Support interworking with Thumb code.
+ (arm_rtx_costs): Rework multiply costs so that cost is based on
+ the tune, not the architecture.
+ (f_register_operand): New function.
+ (output_return_instruction): Support interworking with Thumb code.
+ (output_func_epilogue): Support interworking with Thumb code.
+ Remove redundant calculation of code_size. Use floating-point
+ load-multiples if permitted.
+ (emit_sfm): New function.
+ (arm_expand_prologue): Use floating-point store-multiples if
+ permitted.
+
+ * arm.h (CPP_CPU_ARCH_SPEC): Handle -march=...
+ (TARGET_OPTIONS): Add arch= and fp=. Delete fpe=.
+ (enum processor_type): Add PROCESSOR_NONE, for use in all_procs table.
+ (FP_DEFAULT): Default floating point architecture for generic
+ back-end.
+ (PREDICATE_CODES): Add f_register_operand.
+
+ * arm.md (*push_fp_multi): New pattern.
+
+
+Tue Jul 15 22:08:47 1997 Jim Wilson <wilson@cygnus.com>
+
+ * Makefile.in (exeext): Set to build_exeext not exeext.
+ * configure.in (exeext): Delete redundant set and AC_SUBST call.
+ Change remaining AC_SUBST to use build_exeext instead of exeext.
+
+Tue Jul 15 15:48:25 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * configure.in: Fix calculation if default thread support is enabled.
+
+Tue Jul 15 13:38:46 1997 Mike Meissner <meissner@cygnus.com>
+
+ * rtl.h (replace_regs): Declare.
+
+Mon Jul 14 16:18:19 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * i960.h (ASM_OUTPUT_MI_THUNK): Define.
+
+ * dwarf2out.c (gen_subprogram_die): Remove unreachable and redundant
+ code.
+
+Mon Jul 14 14:22:45 1997 Jeffrey A Law (law@cygnus.com)
+
+ * calls.c (emit_library_call): Use right index into argvec array
+ when iterating over arguments which need to be pushed on the stack.
+ (emit_library_call_value): Likewise.
+
+Mon Jul 14 08:17:41 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * gcc.c (convert_filename): Fix typo.
+
+Mon Jul 14 08:10:12 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * configure.in: Clear headers and lib2funcs before re-reading
+ config-lang.in.
+
+ * m68k/linux.h (LINK_SPEC): Fix last change.
+
+Mon Jul 14 08:03:38 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * configure.in (sparc-*-linux-gnu{*,libc1*}): Add sparc/t-linux.
+ * sparc/t-linux: New file.
+
+ * alpha/elf.h (LINK_SPEC): Fix typo.
+ * configure.in (alpha-*-linux-gnu*): Set tmake_file.
+ * alpha/t-linux: New file.
+
+Mon Jul 14 07:41:37 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * m68k.c (output_{and,ior,xor}si3): New functions from patterns bodies.
+ * m68k.h (output_{and,ior,xor}si3): New extern declarations.
+ * m68k.md (adddi3, subdi3): Allow constant operand.
+ (anddi3, iordi3, xordi3): New patterns.
+ ({and,ior,xor}si3_internal): Use corresponding output_???si3 function.
+
+Mon Jul 14 07:33:11 1997 Fila Kolodny <fila@ibi.com>
+
+ * configure.in (*-*-gnu*): Add crt{begin,end}S.o to extra_parts.
+
+Mon Jul 14 07:26:36 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * varasm.c (assemble_variable): If low part of size
+ doesn't fit in an int, variable is too large.
+
+Mon Jul 14 06:51:37 1997 Mike Meissner <meissner@cygnus.com>
+
+ * bitmap.{h,c}: New files.
+ * Makefile.in (OBJS): Add bitmap.o.
+ (BASIC_BLOCK_H): New make variable for basic-block.h, bitmap.h.
+ ({flow,combine,regclass,local-alloc,reload1,reorg,sched}.o): Use
+ BASIC_BLOCK_H variable instead of basic-block.h.
+ * basic-block.h (*REG_SET): Delete old implementation; use bitmap.h.
+ (regset_{size,bytes}): Delete.
+ (regs_live_at_setjmp): Declare.
+ (EXECUTE_IF_SET_AND_RESET_IN_REG_SET): Delete.
+ * flow.c (init_regset_vector): Make global; don't take basic block
+ times # of pseduos as argument.
+ (life_analysis): Change all init_regset_vector calls.
+ Use free_regset_vector to release arrays only flow uses at end.
+ (allocate_for_life_analysis): Change init_regset_vector call.
+ Don't set regset_{size,bytes}.
+ (free_regset_vector): Call FREE_REG_SET to release any
+ memory allocated by each vector.
+ (propagate_block): Call FREE_REG_SET on dead/live.
+ (mark_used_regs): Don't use REGSET_ELT_TYPE anymore.
+ * output.h (allocate_for_life_analysis): Add declaration.
+ (regno_uninitialized, regno_clobbered_at_setjmp): Likewise.
+ (dump_flow_info, flow_analysis): Likewise.
+ * regclass.c (init_reg_sets): Invoke INIT_ONCE_REG_SET.
+ (allocate_reg_info): Invoke MAX_REGNO_REG_SET.
+ (regset_release_memory): Free basic_block_live_at_start storage.
+ * reorg.c (mark_target_live_regs): Delete unused variables.
+ * sched.c (schedule_block): Free space associated with
+ reg_pending_sets and old_live_regs.
+ (schedule_insns): Free bb_{dead,live}_regs on first pass.
+ (sched_analyze_insn): Use EXECUTE_IF_SET_IN_REG_SET and then clear.
+ * toplev.c (rest_of_compilation): Call regset_release_memory.
+
+Mon Jul 14 00:14:13 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * toplev.c (main): Prefer DWARF 2 or stabs with -ggdb.
+ * ns32k/tek6000.h (PREFERRED_DEBUGGING_TYPE): DBX_DEBUG.
+ * alpha.h (PREFERRED_DEBUGGING_TYPE): SDB_DEBUG.
+ * mips.h (PREFERRED_DEBUGGING_TYPE): SDB_DEBUG.
+
+Sun Jul 13 15:11:08 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * stupid.c (stupid_mark_refs): If setting reg set only in this
+ insn and not referenced, make REG_UNUSED note.
+
+Sun Jul 13 14:03:19 1997 Michael Meissner <meissner@cygnus.com>
+
+ * gcc.c (process_command): If -save-temps and -pipe were specified
+ together, don't do -pipe.
+
+Sun Jul 13 12:27:03 1997 Doug Evans <dje@cygnus.com>
+
+ * gcc.c (main): Handle blank in version_string when comparing
+ with compiler_version.
+
+Sat Jul 12 01:53:55 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * sparc.c (output_function_prologue): Fix offset from CFA.
+ (sparc_flat_output_function_prologue): Likewise.
+
+Fri Jul 11 09:49:15 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mips.c (epilogue_reg_mentioned_p): Delete unused function.
+ (mips_epilogue_delay_slots): Likewise.
+ (function_epilogue): Greatly simplify.
+ (mips_expand_epilogue): If we have a null prologue/epilogue,
+ then use a normal return insn. Emit blockage insns before
+ stack pointer adjustments.
+ (mips_can_use_return_insn): Renamed from simple_epilogue_p. All
+ callers changed. Do not use return insns if $31 is live in the
+ function or if generating profiling information.
+ * mips.h (DELAY_SLOTS_FOR_EPILOGUE): Delete.
+ (ELIGIBLE_FOR_EPILOGUE_DELAY): Likewise.
+ * mips.md (return): Remove expander and change the pattern to
+ look like a standard "return" insn.
+ (return_internal): Show use of $31 explictly.
+ (epilogue expander): Enable.
+
+Thu Jul 10 13:04:53 1997 Doug Evans <dje@cygnus.com>
+
+ * cccp.c (INO_T_EQ): Return 0 for MSDOS.
+
+ * Makefile.in (CC): Use autoconf value.
+
+Tue Jul 8 18:08:00 1997 Jim Wilson <wilson@cygnus.com>
+
+ * dwarf2out.c (gen_subprogram_die): When handling declarations, test
+ DECL_CONTEXT not decl_class_context before equate_decl_number_to_die.
+
+Tue Jul 8 16:47:13 1997 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.md (movsi define_split): Use unsigned HOST_WIDE_INT,
+ not unsigned.
+
+Sat Jul 7 00:01:41 1997 Jim Meyering <meyering@eng.ascend.com>
+
+ * i386/t-sol2 (crt[1in].o): Also depend on $(GCC_PASSES).
+
+Fri Jul 4 11:45:39 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c (DWARF_CIE_HEADER_SIZE, DWARF_FDE_HEADER_SIZE,
+ size_of_cfi, size_of_fde, calc_fde_sizes, next_fde_offset,
+ cie_size): Lose.
+ (ASM_OUTPUT_DWARF_STRING): Move earlier.
+ (INCOMING_FRAME_SP_OFFSET): Provide default.
+ (initial_return_save): Adjust for CFA offset.
+ (dwarf2out_frame_debug): Lookup initial CFA offset when setting up.
+ (output_call_frame_info): Use label subtraction for length fields.
+ Add pointer to exception region information in for_eh case.
+ (dwarf2out_do_frame): New fn.
+ (dwarf2out_frame_init): Use INCOMING_FRAME_SP_OFFSET.
+ (dwarf2out_frame_finish): Don't bother emitting .debug_frame for
+ non-Irix targets. Just emit .eh_frame.
+ (output_die): Refer to an FDE with label subtraction.
+ * i386.h (INCOMING_FRAME_SP_OFFSET): Define.
+ * defaults.h (DWARF2_UNWIND_INFO): Define if
+ INCOMING_RETURN_ADDR_RTX is provided.
+ * final.c (final): Don't call dwarf2out_frame_debug unless we are
+ doing dwarf 2.
+
+Thu Jul 3 17:37:52 1997 Jim Wilson <wilson@cygnus.com>
+
+ * fp-bit.c (unpack_d): Check fraction not sign to distinquish QNaN.
+
+Wed Jul 2 09:48:03 1997 Michael Meissner <meissner@cygnus.com>
+
+ * loop.c (strength_reduce): Make sure register does not exceed the
+ table size when looking up the last UID.
+
+Wed Jul 2 07:47:44 1997 Nick Burrett <n.a.burrett@btinternet.com>
+
+ * genoutput.c (process_template): Place increment expression
+ outside of putchar function call.
+
+Wed Jul 2 06:56:52 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * sparc/linux.h (LIBGCC_SPEC): Removed.
+ (CC1_SPEC): Add %{profile:-p}.
+ ({CPP,LIB,LINK}_SPEC): Choose glibc 1 or 2 depending on USE_GNULIBC_1.
+ * configure.in (sparc-*-linux-gnulibc1*): New configuration.
+
+ * configure.in (powerpc-*-linuxgnu*): Default thread_file is posix.
+ Set xmake_file to x-linux. Add extra_parts.
+ * rs6000/linux.h (LINK_SPEC): Defined.
+
+ * m68k/linux.h (LINK_SPEC): Pass -shared for -shared.
+ ({CPP,LINK}_SPEC): Choose for glibc 1 or 2 depending on USE_GNULIBC_1.
+ * configure.in (m68k-*-linux-gnu*): Default thread_file is `posix'.
+ (m68k-*-linux-gnulibc1): New configuration.
+
+ * alpha/elf.h (LINK_SPEC): Change ld-gnu.so.1 to ld-linux.so.2.
+ * configure.in (alpha-*-linux-gnu*): Default thread_file is `posix'.
+
+Wed Jul 2 06:12:37 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * alpha.md (divsi3, modsi3, udivsi3): Comment out.
+ (extendsfsd2_no_tp): Add alternative with output in MEM, input in REG.
+
+ * configure.in (*-linux*): Add "-gnu" to names to match.
+
+ * libgcc2.c (_trampoline): Add stdcall attribute to VirtualProtect
+ on i386.
+
+ * objc/objc.gperf: Renamed from gperf.
+
+Wed Jul 2 05:42:19 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * objc/Make-lang.in ($(srcdir)/objc/objc-parse.c): Fix command
+ to use the right file names.
+
+Tue Jul 1 23:25:42 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * reorg.c (redundant_insn): If INSN or possible match has REG_UNUSED
+ note, don't have match.
+
+Tue Jul 1 18:36:24 1997 Doug Evans <dje@cygnus.com>
+
+ * mips.c (mips_output_external): Don't output .extern's for
+ variables in user specified sections unless they're .sbss/.sdata.
+
+Tue Jul 1 18:30:26 1997 Jim Wilson <wilson@cygnus.com>
+
+ * cse.c (find_best_addr): Add missing rtx_cost arguments.
+
+ * fp-bit.c (float_to_usi): Move code for negative numbers before code
+ for infinity. Modify infinty code to only handle positive infinities.
+
+Tue Jul 1 11:16:41 1997 Robert Lipe <robertl@dgii.com>
+
+ * fixinc.sco: Restore pwd after copy.
+ Convert declaration of abs in math.h to prototype.
+ Fix static functions in sys/stat.h for C++.
+
+Tue Jul 1 10:55:47 1997 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.md ({add,ior,xor}si3): Change to use define_expand wrapper
+ and split add/ior/xor of large constants early.
+ (andsi3): Remove 6/29 code to do and of large constants.
+ (nor, nand, eqv, maskir): Add names to all logical define_insns.
+
+Tue Jul 1 09:03:35 1997 Jeffrey A Law (law@cygnus.com)
+
+ * h8300.h (BIGGEST_FIELD_ALIGNMENT): Remove definition.
+ * mips.h (BIGGEST_FIELD_ALIGNMENT): Likewise.
+
+Mon Jun 30 14:58:00 1997 Jeffrey A Law (law@cygnus.com)
+
+ * sh.c (sh_expand_epilogue): Emit blockage insn before cutting
+ back stack.
+
+Sun Jun 29 11:27:07 1997 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.h (TARGET_FLAGS): Add -m{,no-}update to suppress
+ creating load/store with update instructions, and also
+ -m{,no-}fused-madd to suppress the generation of fused add and
+ multiply instructions. Move debug flags to TARGET_OPTIONS.
+ (GO_IF_LEGITIMATE_ADDRESS): Don't allow PRE_{INC,DEC} if -mno-update.
+ (GO_IF_MODE_DEPENDENT_ADDRESS): Ditto.
+ (rs6000_debug_{name,stack,arg}): Add declarations.
+ (toc_initialized): Likewise.
+ (got_no_const_operand): Likewise.
+ (PREDICATE_CODES): Add got_no_const_operand.
+ (toc_section): Make toc_initialized a global.
+ (RTX_COSTS): Set appropriate costs for add, logical operators that
+ are really two instructions.
+
+ * rs6000.c (rs6000_debug_{name,stack,arg}): Add definitions.
+ (rs6000_override_options): Process debug flags.
+ (toc_initialized): Global to say toc initialized.
+ (small_data_operand): Use #if TARGET_ELF, not #ifdef TARGET_SDATA.
+ (rs6000_init_expanders): Likewise.
+ (SMALL_DATA_RELOC): Likewise.
+ (got_no_const_operand): Recognize SYMBOL_REF and LABEL_REF.
+ (rs6000_makes_calls): System V profiling doesn't count as a call.
+ (rs6000_stack_info): Likewise.
+ (rs6000_output_load_toc_table): Take register number argument to
+ determine register to load. Generate correct code if more than
+ one toc table is done in System V due to profiling or non-local
+ gotos. If System V toc is not initialized, initialize it now.
+ (rs6000_allocate_stack_space): Move code from output_prolog to
+ allocate stack space. Take -mno-update into account.
+ (output_prolog): Call rs6000_allocate_stack_space. Only set
+ rs6000_pic_func_labelno if not profiling.
+ (output_function_profiler): Implement System V profiling.
+ (and_operand): Don't call reg_or_short_operand.
+ (rs6000_finalize_pic): If not optimizing, insert a USE of the GOT
+ register as the last insn.
+
+ * rs6000.md (load/store update): Take -mno-update into account.
+ If -msoft-float, support SF load/store with update to GPR regs.
+ (allocate_stack): Take -mno-update into account.
+ (add/subtract + multiply instructions): Take -mno-fused-madd into
+ account.
+ (nonlocal_goto_receiver): Specify register # to load.
+ ({add,and,ior,xor}si3): Recognize operation done with full 32 bit
+ constant, splitting latter if need be.
+ (andsi3 define_split): Fix up splitting andsi3 of large constant.
+ ({ior,xor}si3 define_split): Use GEN_INT to create integer rtx
+ values.
+ (movsi_got{,_internal}): Split the load of a CONST into load of
+ the SYMBOL_REF/LABEL_REF and an add.
+ (movsi): Know that addsi3 can handle large values now for NT.
+
+ * sysv4.h (TARGET_SDATA): Remove explicit bit for -msdata.
+ (SUBTARGET_OVERRIDE_OPTIONS): Likewise.
+ (ASM_OUTPUT_ALIGNED_LOCAL): Likewise.
+ (SUBTARGET_SWITCHES): Indicate -m{,no-}sdata doesn't set any flags.
+ (ASM_SPEC): Only pass -m{,no-}reg-names if assembling .s/.S files.
+ (CC1_SPEC): If -msdata, invoke compiler with -msdata=default.
+ (PROFILE_BEFORE_PROLOGUE): Likewise.
+ (RS6000_MCOUNT): Define as "_mcount".
+ (toc_section): Make toc_initialized a global.
+
+Fri Jun 27 19:01:11 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * config/t-linux-gnulibc1: New file.
+ * configure.in (i[3456]86-*-linux*): Default thread_file is `posix'.
+ (i[3456]86-*-linux*gnulibc1): New case.
+ * config/linux.h (LIB_SPEC): Choose for glibc 1 or 2 depending
+ on USE_GNULIBC_1.
+ * i386/linux.h (CPP_SPEC, LINK_SPEC): Likewise.
+
+Fri Jun 27 19:00:52 1997 Ralf Baechle <ralf@waldorf-gmbh.de>
+
+ * config/linux.h (PREFERRED_DEBUGGING_TYPE): Undefine before define.
+
+Fri Jun 27 18:35:04 1997 Alan Modra <alan@spri.levels.unisa.edu.au>
+
+ * configure.in: Clean up Make-{host,target,hooks} in all
+ subdirs, not just '.'.
+ * Makefile.in (distclean): Delete */Make-{host,target,lang,hooks}.
+
+Fri Jun 27 18:27:11 1997 Fila Kolodny <fila@ibi.com>
+
+ * config/xm-gnu.h (fcntl.h): Only include if not building libgcc.a.
+
+Fri Jun 27 18:17:44 1997 Doug Evans <dje@cygnus.com>
+
+ * configure.frag: Rewrite.
+
+ * objc/Make-lang.in (OBJC_CCOMMON): Object files don't go in srcdir.
+ (OBJC_OBJS): Likewise.
+ (OBJC_O): Likewise.
+ (objc-parse.o, objc-act.o): Fix rules.
+ (objc/libobjc files): Fix rules.
+
+Fri Jun 27 13:23:38 1997 Andrew Cagney <cagney@tpgi.com.au>
+
+ * fp-bit.c (float_to_si): Correct return value when Inf.
+
+Fri Jun 27 10:47:09 1997 Scott Christley <scottc@net-community.com>
+
+ * Makefile.in (DLLTOOL): Define.
+ * objc/Make-lang.in (libobjc_entry.o, libobjc_s.a, libobjc.dll):
+ New targets.
+ (objc.install-normal): Install Objective-C runtime as a DLL.
+ (objc.mostlyclean): Clean up files used to build DLL.
+ * objc/libobjc.def: New file.
+ * objc/libobjc_entry.c: New file.
+
+ * objc/sendmsg.c (search_for_method_in_list): No longer static.
+
+ * Makefile.in (GCC_THREAD_FILE): Renamed from OBJC_THREAD_FILE.
+ * configure.lang (GCC_THREAD_FILE): Likewise.
+ * configure.in (--enable-threads): New parameter.
+ * objc/Make-lang.in (OBJC_THREAD_FILE): New definition.e
+ * objc/config-lang.in: Print message about ObjC thread file.
+
+ * cccp.c (INO_T_EQ): Define for Win32 but not Cygwin32.
+ * i386/mingw32.h: New file.
+ * i386/xm-mingw32.h: New file.
+ * configure.in (i[3456]86-*-mingw32): New target.
+ * protoize.c (link): Eliminate definition on Win32.
+
+ * objc/thr-posix.c (__objc_thread_yield): Use sched_yield instead.
+
+Fri Jun 27 10:36:41 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * stor-layout.c (layout_record, PCC_BITFIELD_TYPE_MATTERS):
+ Round up when calculating possible end address.
+
+Wed Jun 25 19:54:29 1997 Jim Wilson <wilson@cygnus.com>
+
+ * unroll.c (final_giv_value): Verify that bl->initial_value is
+ invariant before trying to use it.
+
+Wed Jun 25 18:13:05 1997 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000/sysv4.h (WCHAR_TYPE{,_SIZE}): Make wchar_t long as per
+ ABI spec.
+
+Wed Jun 25 16:56:16 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * sparc.h (INCOMING_RETURN_ADDR_RTX): Define.
+ (DBX_REGISTER_NUMBER): Fix frame pointer regno for -mflat.
+ * sol2.h (DBX_REGISTER_NUMBER): Likewise.
+ * sparc.c (save_regs): Emit dwarf2 frame debug info.
+ (output_function_prologue, sparc_flat_save_restore,
+ sparc_flat_output_function_prologue): Likewise.
+
+ * dwarf2.h (enum dwarf_call_frame_info): Add DW_CFA_GNU_window_save.
+ * dwarf2out.c (dwarf_cfi_name, output_cfi): Support it.
+ (dwarf2out_cfi_label): Make non-static.
+ (initial_return_save): Support PLUS.
+ (dwarf2out_window_save, dwarf2out_return_save,
+ dwarf2out_return_reg): New fns.
+
+ * dwarf2out.c (SECTION_FORMAT): Use PUSHSECTION_FORMAT, if defined.
+ (DEBUG_INFO_SECTION): Rename from DEBUG_SECTION.
+ (DEBUG_LINE_SECTION): Rename from LINE_SECTION.
+ * mips/iris6.h: Likewise.
+
+Wed Jun 25 16:25:41 1997 Scott Christley <scottc@net-community.com>
+
+ * Makefile.in (GCC_PASSES): Don't define with $(exeext).
+ * configure.in ({cc,stage_prefix}_set_by_configure): Eliminate extra
+ comma and don't pass value to configure.lang.
+ * objc/Make-lang.in (objc-runtime): Add objc-headers.
+
+ * configure.in: Execute configure.frag in a shell.
+
+ * configure.in (cross_overrides, build_overrides): Default to
+ /dev/null to help platforms where sed cannot handle empty filenames.
+
+ * Reorganize thread implementation to make a clearly defined
+ front-end/back-end interface.
+ * objc/thr-{decosf1,irix,mach,os2,posix,pthreads,single}.c: Completely
+ rework according to new interface.
+ * objc/thr-{solaris,win32}.c: Likewise.
+ * objc/thr.c: Likewise.
+ * objc/thr.h: Define front-end/back-end interface functions and
+ structures.
+
+Wed Jun 25 16:14:10 1997 Ovidiu Predescu <ovidiu@net-community.com>
+
+ * Complete implementation of +load.
+ * objc/init.c (objc_send_load): New function.
+ (objc_class_tree): New structure.
+ (create_tree_of_subclasses_inherited_from): New function.
+ (__objc_tree_insert_class): New function.
+ (objc_tree_insert_class): New function.
+ (objc_preorder_traverse): New function.
+ (objc_postorder_traverse): New function.
+ (__objc_tree_print): New function.
+ (__objc_destroy_class_tree_node): New function.
+ (class_is_subclass_of_class): New function.
+ (__objc_exec_class): Allocate class tree list and load hash table.
+ (__objc_send_message_in_list): Rewrite using hash table.
+ (__objc_send_load): Remove calls to _objc_load_callback.
+ (objc_send_load): Make static. Create Tree of classes resembling
+ class hierarchy for all modules. Call __objc_send_load on all of
+ the modules in __objc_module_list.
+ (__objc_create_classes_tree): New function.
+
+ * objc/encoding.h (method_get_sizeof_arguments): Fix typo.
+ * objc/objc-api.h (OBJC_ERR_BAD_STATE): New error code.
+ On NeXT redefine object_copy and object_dispose to avoid
+ a conflict with those defined in system library.
+ * objc/selector.c (__objc_register_instance_methods_to_class): New
+ function.
+ * objc/runtime.h: Likewise. Add missing function prototypes.
+
+Wed Jun 25 15:09:01 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * Makefile.in (Makefile): Execute configure.frag from srcdir.
+
+ * Makefile.in (configure): Target is $(srcdir)/configure.
+
+Tue Jun 24 15:18:14 1997 Jim Wilson <wilson@cygnus.com>
+
+ * m68k.h (LIMIT_RELOAD_CLASS): Define.
+
+ * recog.c (constrain_operands): When checking earlyclobbers, use
+ operands_match_p instead of rtx_equal_p.
+
+ * dwarfout.c (field_byte_offset): Check for object_offset_in_bits
+ greater than bitpos_int and recompute object_offset_in_bytes if true.
+
+ * mips.md (movdi_internal): Add x/J alternative.
+ (movdi_internal2): Add x/J alternative; change a/I to a/J.
+ (movsi_internal1, movsi_internal2): Change x/I alternative to x/J.
+
+Tue Jun 24 08:49:56 1997 Jeffrey A Law (law@cygnus.com)
+
+ * pa.h (ASM_OUTPUT_SECTION_NAME): Fix typo.
+
+Mon Jun 23 22:48:00 1997 Jim Wilson <wilson@cygnus.com>
+
+ * unroll.c (find_splittable_givs): Set splittable_regs_updates to
+ biv_count for reduced givs.
+
+Mon Jun 23 10:51:53 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mn10200.c, mn10200.h, mn10200.md: New files for mn10200 port.
+ * lib1funcs.asm, divmod.c, udivmod.c, udivmodsi4.c: Likewise.
+ * t-mn10200, xm-mn10200.h, va-mn10200.h: Likewise.
+ * Makefile.in (USER_H): Add va-mn10200.h.
+ * varargs.h, stdarg.h: Include va-mn10200.h.
+ * configure.in (mn10200-*-*): New target.
+
+Sun Jun 22 06:47:19 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * combine.c (force_to_mode): Don't do anything for ASM_OPERANDS insn.
+
+Sun Jun 22 06:29:28 1997 J. Kean Johnston <jkj@sco.com>
+
+ * ginclude/stdarg.h: Protect va_list definition from SCO headers.
+ * ginclude/varargs.h: Likewise.
+
+Sat Jun 21 20:56:23 1997 Scott Christley <scottc@net-community.com>
+
+ * Make ObjC a front-end language.
+ * Makefile.in (LANGUAGES, COMPILERS, .PHONY, stmp-int-hdrs): Remove
+ specific references to ObjC compiler and source files.
+ ({mostly,dist,maintainer,}clean, install-normal): Likewise
+ (OBJC_OBJS, OBJC, OBJECTIVE-C, cc1obj, objc-runtime): Rules deleted.
+ (libobjc.a, sublibobjc.a, objc-parse.{o, c, y}): Rules deleted.
+ (objc-headers, install-libobjc): Rules deleted.
+ * objc/Make-lang.in: New file; from rules deleted above.
+ * objc/config-lang.in: New file.
+ * objc/Makefile.in: Changes to support ObjC as a front-end language;
+ renamed from Makefile.in.
+ * objc-act.{c,h}, objc-parse.{c,y}, objc-tree.def: Moved to objc dir.
+
+Sat Jun 21 07:54:36 1997 Robert Lipe <robertl@dgii.com>
+
+ * fixinc.sco (math.h): Correct the collision of "exception".
+
+Sat Jun 21 06:51:40 1997 Peter Gerwinski <peter@agnes.dida.physik.uni-essen.de>
+
+ * rs6000.c (output_epilog): Name is "GNU Pascal", not all caps.
+
+Sat Jun 21 06:29:19 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * gcc.c (main): Check for and read ${libdir}/gcc-lib/specs to
+ override the default specs.
+
+Fri Jun 20 17:20:15 1997 Jim Wilson <wilson@cygnus.com>
+
+ * mips.c (output_block_move): When loading addresses into registers,
+ add checks for ABI_N32 and ABI_64.
+ (mips_expand_prologue): Add check for SImode in code splitting
+ tsize_rtx when it is large_int.
+
+Fri Jun 20 09:07:31 1997 Russell King <rmk92@ecs.soton.ac.uk>
+
+ * configure.in (arm-*-linuxaout): New target.
+ * arm/lib1funcs-linux.asm, arm/linux-gas.h: New files.
+ * arm/linux.h, arm/t-linux, arm/xm-linux.h: New file.
+ * xm-linux.h: Undef some macros before defining them.
+
+Thu Jun 19 21:18:20 1997 Jim Wilson <wilson@cygnus.com>
+
+ * dwarf2out.c (output_line_info): Always use DW_LNE_set_address instead
+ of DW_LNS_fixed_advance_pc for line number addresses.
+ (size_of_line_info): Adjust size calculation as per above change.
+ (text_end_label): Make it static.
+
+Thu Jun 19 14:55:49 1997 Brendan Kehoe <brendan@cygnus.com>
+
+ * toplev.c (xmalloc): Only give the fatal msg if SIZE is non-zero.
+
+Sun Apr 27 23:19:13 1997 Ulrich Drepper <drepper@cygnus.com>
+
+ * libgcc2.c (__eh_type): Remove `extern' to make this a definition.
+
+Wed Jun 18 18:10:16 1997 Per Bothner <bothner@cygnus.com>
+
+ * dbxout.c (dbxout_type_fields): Skip field if DECL_IGNORED_P.
+
+Wed Jun 18 18:04:33 1997 Mike Stump <mrs@cygnus.com>
+
+ * except.c (end_eh_unwinder): If we have a return instruction, we
+ have to make sure we use it and don't fall off the end of the
+ function in the unwinder.
+
+Wed Jun 18 14:27:58 1997 Mike Stump <mrs@cygnus.com>
+
+ * flow.c (find_basic_blocks): Fix end case bug.
+
+Tue Jun 17 18:35:57 1997 Mike Stump <mrs@cygnus.com>
+
+ * libgcc2.c (__eh_pcnthrow): Add support -fno-sjlj-exceptions
+ -fPIC exception handling on the SPARC.
+ * sparc.h (DONT_ACCESS_GBLS_AFTER_EPILOGUE): Likewise.
+ * libgcc2.c (__eh_ffetmnpc): Remove.
+
+Mon Jun 16 20:28:51 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * collect2.c (extract_string): Null-terminate.
+
+Mon Jun 16 14:38:44 1997 Michael Meissner <meissner@cygnus.com>
+
+ * combine.c (set_nonzero_bits_and_sign_copies): Use REG_SET macros
+ instead of doing bit operations directly.
+ (try_combine,reg_dead_at_p): Ditto.
+ * caller-save.c (save_call_clobbered_regs): Ditto.
+ * reload1.c (reload): Ditto.
+ * local-alloc.c (update_equiv_regs,block_alloc): Ditto.
+ * sched.c (schedule_block): Dito.
+
+Sun Jun 15 20:46:12 1997 Jim Wilson <wilson@cygnus.com>
+
+ * dwarf2out.c (dwarf2out_frame_debug): Handle IOR.
+ (struct limbo_die_struct): Define.
+ (TYPE_DECL_IS_STUB): Call decl_ultimate_origin if DECL_ABTRACT_ORIGIN
+ is set.
+ (limbo_die_count): Delete.
+ (libmo_die_list): Define.
+ (new_die): Add die to limbo_die_list instead of incrementing
+ limbo_die_count.
+ (add_AT_location_description): Renamed from add_location_attribute.
+ New parameter attr_kind.
+ (add_location_or_const_value_attribute, gen_subprogram_die,
+ add_bound_info): Change call to add_AT_location_description.
+ (add_bound_info): Add call to contains_placeholder_p. Ignore
+ MAX_EXPR and VAR_DECL.
+ (add_subscript_info): Ignore the index type if it is an unnamed
+ integral type.
+ (scope_die_for): Move check for function-local tags after code setting
+ containing_scope, and add check for non-NULL containing_scope
+ (add_type_attribute): If unnamed type, use TREE_TYPE instead.
+ (gen_enumeration_type_die, gen_struct_or_union_type_die): Call
+ add_child_die if die_parent is NULL.
+ (gen_subprogram_die): Ifdef out DW_AT_static_link code.
+ (decls_for_scope): Delete decrement of limbo_die_count.
+ (dwarf2out_finish): Add code to traverse the limbo_die_list, and
+ call add_child_die if die_parent is NULL. Delete limbo_die_count code.
+ * mips.c (mips_expand_prologue): If tsize_rtx is large_int, emit two
+ insns instead of one splitable insn, setting RTX_FRAME_RELATED_P.
+
+Fri Jun 13 19:33:35 1997 Brendan Kehoe <brendan@cygnus.com>
+
+ * fixincludes: Also fix AIX NULL macro in sys/{dir,param,types}.h.
+
+Thu Jun 12 22:53:12 1997 Jim Wilson <wilson@cygnus.com>
+
+ * m68k.md (mov[qhs]i): Remove pair of constraints which allow
+ offsetable memory addresses to be moved to the same for TARGET_5200.
+
+Thu Jun 12 15:33:01 1997 Jeffrey A Law (law@cygnus.com)
+
+ * pa.h (SELECT_RTX_SECTION): Place symbolic operands into the
+ data section.
+
+ * pa.c (emit_move_sequence): Rewrite code to handle arithmetic
+ involving plabels.
+
+Wed Jun 11 08:57:14 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * tree.c (unsave_expr_now): Avoid recursing into the parts of
+ the tree that are RTL.
+
+Thu Jun 12 09:43:55 1997 Jeffrey A Law (law@cygnus.com)
+
+ * reorg.c (emit_delay_sequence): Call set_new_first_and_last_insn
+ after the new sequence insn has been spliced into the insn chain.
+
+Wed Jun 11 23:10:49 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.md (call, call_value): Use "call" instead of "calls"
+ for calls to named functions.
+
+Wed Jun 11 00:22:34 1997 Jim Wilson <wilson@cygnus.com>
+
+ * configure, configure.in: Restore changes from Feb 15 to Apr 13
+ lost during conversion to autoconf.
+
+Tue Jun 10 18:23:35 1997 Mike Stump <mrs@cygnus.com>
+
+ * stmt.c (expand_decl_cleanup): Avoid core dumping when exceptions
+ aren't on.
+
+Tue Jun 10 18:22:30 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * collect2.c (extract_string): New fn.
+ (main): Use it.
+
+Tue Jun 10 17:40:15 1997 Jim Wilson <wilson@cygnus.com>
+
+ * expr.c (emit_group_load): Add case using gen_lowpart.
+
+Tue Jun 10 17:14:58 1997 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.c (rs6000_override_options): If -mcpu=403, set -mstrict-align.
+
+ * rs6000/t-ppc{,gas} (MULTILIB_EXTRA_OPTS): Build libraries with
+ -mstrict-align.
+
+ * configure.in ({powerpc,rs6000}*-*-*): Add embedded targets to
+ --with-cpu=n support.
+
+Tue Jun 10 07:06:12 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * flow.c (mark_used_regs): Fix typo in Jun 4 change.
+
+Mon Jun 9 20:26:26 1997 Jim Wilson <wilson@cygnus.com>
+
+ * Makefile.in (MAYBE_USE_COLLECT2): Renamed from MAYBE_USE_COLLECT.
+
+Mon Jun 9 19:42:21 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * fold-const.c (fold): Don't do COND_EXPR -> MIN_EXPR folding if it
+ loses information that might be needed by a later use as an lvalue.
+
+Mon Jun 9 19:10:50 1997 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * configure.in: Don't override a user's setting for prefix
+ on platforms that use the native prefix.
+
+Mon Jun 9 19:00:49 1997 Brendan Kehoe <brendan@melange.gnu.ai.mit.edu>
+
+ * integrate.c (expand_inline_function): Use the mode of FNDECL's
+ result rtl, not the result type itself, in setting ARRIVING_MODE.
+
+ * reload1.c (reload): Use xmalloc instead of alloca for the label
+ offsets in OFFSETS_AT and OFFSETS_KNOWN_AT.
+
+Mon Jun 9 15:16:52 1997 Mike Stump <mrs@cygnus.com>
+
+ * flow.c (find_basic_blocks): Eliminate more dead code, enables
+ dead throws to be eliminated.
+
+Mon Jun 9 17:15:50 1997 Stephen L Moshier <moshier@world.std.com>
+
+ * alpha.c (check_float_value): Underflow and overflow constants
+ are different for FLOAT_VAX and default targets.
+
+Mon Jun 9 16:48:21 1997 Scott Christley <scottc@net-community.com>
+
+ * Makefile.in (Makefile): Process language fragments.
+ * configure.frag: New file.
+ * configure.in: Move language fragment processing to configure.lang.e
+
+ * Makefile.in (GCC_PASSES): Prevent all compilers from being
+ built when only the C compiler is needed.
+
+ * configure.in (cross_overrides, build_overrides): Use absolute
+ path to GCC top-level source directory.
+
+ * configure.in: Save target alias for language directories.
+
+ * configure.in (with-gxx-include-dir): New parameter for
+ setting the g++ header file directory.
+ * Makefile.in (gxx_include_dir): Use autoconf variable.
+
+ * configure.in: Add parameter for setting local prefix.
+
+ * configure.lang: New file.
+ * configure.in: Move language subdirectory Makefile processing
+ into configure.lang.
+
+Mon Jun 9 16:44:47 1997 Jim Wilson <wilson@cygnus.com>
+
+ * sched.c (attach_deaths): Fix typo in Jun 4 change.
+
+Mon Jun 9 15:13:00 1997 Marc Lehmann (pcg@goof.com)
+
+ * varasm.c (assemble_end_function): Switch back to function
+ section after outputting constant pool.
+
+Mon Jun 9 14:47:22 1997 Paul Eggert <eggert@twinsun.com>
+
+ * tree.c (change_main_variant): Remove unused function.
+ (build_array_type): Remove obsolete references to
+ change_main_variant.
+ * c-decl.c (complete_array_type): Likewise.
+
+ * c-common.c (c_build_type_variant): Don't futz with main type
+ variant of array since C Standard requires main type variant of
+ array-of-const also be array-of-const.
+
+ * Makefile.in: Comment out lines containing just formfeeds.
+
+ * Makefile.in (distclean): Remove config.bak.
+ (maintainer-clean): Output warning.
+ Do not remove `configure'.
+
+Mon Jun 9 14:44:17 1997 J.T. Conklin <jtc@netbsd.org>
+
+ * configure.in (*-*-netbsd): Restore changes of Apr 13th lost in
+ autoconf conversion: tmake_file now t-netbsd; delete xmake_file.
+
+Mon Jun 9 14:39:29 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * expr.c (expand_builtin, case BUILT_IN_FRAME_ADDRESS):
+ Use correct function name in error message.
+
+ * Makefile.in (diff): Exclude bi-parser.h.
+
+ * i386.h (CC1_CPU_SPEC): Renamed, was CC1_SPEC.
+ (CC1_SPEC): New macro.
+ (EXTRA_SPECS): Add "cc1_cpu".
+ * i386/linux.h (CC1_SPEC): New macro.
+
+Mon Jun 9 13:23:06 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * m68k/next.h (TARGET_DEFAULT): Use MASK_68040,
+ not MASK_68040_ALSO.
+ * m68k/mot3300.h, m68k/ccur-GAS.h (TARGET_DEFAULT): Likewise.
+
+ * m68k.h (MACHINE_STATE_{SAVE,RESTORE}): Test #ifdef __mcf52000__,
+ not if (TARGET_52000); fixed for mc68000 case.
+
+ * m68k/mot3300.h (CPP_SPEC): Define __mc68020__ if no -m[c]68000
+ command-line option given.
+
+Mon Jun 9 09:19:17 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * Makefile.in (target_alias): Substitute with target_alias.
+
+ * final.c (final_scan_insn): Use single_set to check cc_status.flags.
+
+Mon Jun 9 09:09:07 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * c-common.c (check_format_info): Correct handling of the 'a' flag
+ which adds another pointer level.
+
+Sun Jun 8 00:34:25 1997 Jeffrey A Law (law@cygnus.com)
+
+ * pa.md (conditional branch insns): Get length right for branches
+ to targets which can not be reached with a "bl" instruction.
+ * pa.c (output_cbranch): Handle branches to targets which can not
+ be reached with a "bl" instruction.
+
+ * pa.md (alternate dbra pattern): Remove incorrect pattern.
+
+Sat Jun 7 23:30:25 1997 Jeffrey A Law (law@cygnus.com)
+
+ * pa.c (struct defer_plab): Renamed to struct deferred_plabel.
+ Remove "symbol" field and replace with "name" field.
+ (output_function_epilogue): Don't output deferred plabels here.
+ (output_deferred_labels): New function. Output them here instead.
+ (output_call): Rewrite long call support.
+ * pa.h (ASM_FILE_END): Define.
+ (LEGITIMATE_CONSTANT_P): Never accept a function_label_operand.
+ * pa.md (HIGH and LO_SUM of function address): Remove patterns.
+
+Fri Jun 6 16:09:04 1997 Mike Stump <mrs@cygnus.com>
+
+ * libgcc2.c (__eh_ffetmnpc): Add support for machines that cannot
+ access globals after throw's epilogue when -fno-sjlj-exceptions is
+ used.
+ * rs6000.c (DONT_ACCESS_GBLS_AFTER_EPILOGUE): Likewise.
+ * mips.h (DONT_ACCESS_GBLS_AFTER_EPILOGUE): Likewise.
+ (INITIAL_ELIMINATION_OFFSET): Fix RETURN_ADDRESS_POINTER_REGNUM
+ for 64 bit words, with 32 bit pointers and variable endianness.
+
+Fri Jun 6 17:27:58 1997 Mike Meissner <meissner@cygnus.com>
+
+ * regclass.c (allocate_reg_info): Fix off by one error.
+
+Fri Jun 6 17:17:41 1997 Doug Evans <dje@cygnus.com>
+
+ * basic-block.h (EXECUTE_IF_SET_IN_REG_SET): Fix setting of scan_rs_.
+ (EXECUTE_IF_SET_AND_RESET_IN_REG_SET): Likewise.
+ (EXECUTE_IF_AND_IN_REG_SET): Likewise.
+ (EXECUTE_IF_AND_COMPL_IN_REG_SET): Likewise.
+
+Fri Jun 6 15:42:59 1997 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.c (notice_cc_update): Set CC_FCOMI is this is a float compare.
+
+Fri Jun 6 15:12:38 1997 Jim Wilson <wilson@cygnus.com>
+
+ * basic-block.h (REG_SET_TO_HARD_REG_SET): Fix typo.
+
+ * sched.c (update_flow_info): When add extra REG_DEAD note for original
+ dest, handle case where last insn both uses and sets dest.
+
+Thu Jun 5 22:19:36 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * fixinc.irix: Add declaration of __vfork to unistd.h.
+
+ * i960/vx960-coff.h (CPP_SPEC): Always define CPU, even if they
+ use -ansi; the VxWorks headers assume it's always present.
+ * sparc/vxsparc.h (CPP_SPEC): Define, adding the CPU definition to
+ what came from sparc.h.
+ (CPP_PREDEFINES): Don't define it here.
+
+Thu Jun 5 13:40:33 1997 Mike Meissner <meissner@cygnus.com>
+
+ * basic-block.c (OBSTACK_ALLOC_REG_SET): Rename from
+ OBALLOC_REG_SET. Add obstack pointer parameter.
+
+ * flow.c (function_obstack): Add declaration.
+ (life_analysis): Don't allocate the space to hold to vector of
+ regsets here.
+ (init_regset_vector): Add pointer parameter and delete space
+ paramter. Use OBSTACK_ALLOC_REG_SET to allocate. Change callers.
+ (propagate_block): Use ALLOCA_REG_SET instead of bare alloca.
+
+ * sched.c (schedule_block): Fix typo in yesterday's changes.
+ * reorg.c (mark_target_live_regs): Ditto.
+
+Thu Jun 5 09:44:49 1997 Jeffrey A Law (law@cygnus.com)
+
+ * sh.c (trap_exit, sp_switch): New variables.
+ (print_operand, case '@'): If trap_exit is nonzero, then use
+ a trapa instead of an rte/rts to exit the current function.
+ (sh_expand_prologue): Switch stacks at function entry as needed.
+ (sh_expand_epilogue): Similarly at function exit.
+ (function_epilogue): Clear trap_exit and sp_switch too.
+ (sh_valid_machine_decl_attribute): New function.
+ * sh.h (VALID_MACHINE_DECL_ATTRIBUTE): Define.
+ (sp_switch): Declare.
+ * sh.md (sp_switch_1, sp_switch_2): New named patterns.
+
+Wed Jun 4 18:11:14 1997 Michael Meissner <meissner@cygnus.com>
+
+ * basic-block.h (REGSET_ELT_BITS): Make this explicitly unsigned, so
+ that division and modulus of REGSET_ELT_BITS uses a pure shift.
+ (*_REG_SET): New macros to abstract the register set interface.
+
+ * caller-save.c (save_call_clobbered_regs): Use new *_REG_SET
+ macros.
+ * flow.c (life_analysis,propagate_block,insn_dead_p): Ditto.
+ (regno_uninitialized,regno_clobbered_at_setjmp,mark_set_1): Ditto.
+ (mark_used_regs,dump_flow_info,global_conflicts): Ditto.
+ global.c (mark_elimination): Ditto.
+ * reorg.c (mark_target_live_regs): Ditto.
+ * sched.c (sched_{analyze_{1,insn},note_set}): Ditto.
+ (birthing_insn_p,attach_deaths,unlink_notes,schedule_block): Ditto.
+
+ * sched.c (sometimes structure): Delete offset, bit fields, replace
+ with regno.
+ (new_sometimes_live): Take regno argument, not offset and bit.
+ Change all callers.
+
+Tue Jun 3 19:18:36 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * fixincludes: Fix AIX NULL macro use of void*.
+
+Tue Jun 3 15:21:04 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * sparc.h (ASM_OUTPUT_MI_THUNK): Handle -fpic.
+
+Mon Jun 2 16:53:53 1997 Michael Meissner <meissner@cygnus.com>
+
+ * loop.c (n_times_{set,used}): Make type int, not short.
+ (scan_loop): n_times{set,used} are now int pointers.
+
+ * sched.c (sched_reg_n_deaths): Remove unused variable.
+ (struct sometimes): Make fields int sized, not short.
+ (schedule_insns): Don't set sched_reg_n_deaths, nobody uses it.
+
+ * regclass.c (allocate_reg_info): Allocate space for reg_renumber,
+ but don't set unless new argument RENUMBER_P is set. If this is first
+ call for function and we need to grow space, use free/xmalloc instead
+ of realloc since we will be initializing the whole array. If number
+ of registers is < 0, just free up space.
+ (reg_scan): Update allocate_reg_info call.
+ * regs.h (allocate_reg_info): Change prototype.
+ * flow.c (allocate_for_life_analysis): Update allocate_reg_info call.
+ * local-alloc.c (local_alloc): Call allocate_reg_info to allocate
+ and initialize the reg_renumber array.
+ * stupid.c (stupid_life_analysis): Likewise.
+
+Mon Jun 2 14:50:06 1997 Dave Miller <davem@jenolan.rutgers.edu>
+
+ * sparc.md (v9 eq/ne cond move patterns): Add early clobber
+ constraint to destination.
+
+Fri May 30 11:00:44 1997 Michael Meissner <meissner@cygnus.com>
+
+ * regs.h (reg_info): New structure to group the arrays indexed by
+ register number created by reg_scan and flow_analysis that are
+ globally visiable.
+ (reg_n_info): Pointer to the register information array.
+ (reg_n_{refs,sets,deaths,calls_crossed}): Delete variables.
+ (reg_changes_size): Likewise.
+ (REG_N_{REFS,SETS,DEATHS,CALLS_CROSSED}): New macros to reference
+ reg_n_info.
+ (REG_{CHANGES_SIZE,{FIRST,LAST,LAST_NOTE}_UID}): Likewise.
+ (allocate_reg_info): Add declaration.
+
+ * basic-block.h (reg_basic_block): Delete.
+ (REG_BASIC_BLOCK): Use reg_n_info structure.
+
+ * caller-save.c: Change all references to the above arrays to use
+ the corresponding macro to access the reg_n_info array.
+ * combine.c, cse.c, flow.c, global.c, jump.c, local-alloc.c: Likewise.
+ * loop.c, regclass.c, reload1.c, sched.c, stupid.c, unroll.c: Likewise.
+
+ * regclass.c (allocate_reg_info): New function to allocate the
+ reg_info array and initialize the appropriate fields.
+ (reg_scan): Call it.
+ * flow.c (allocate_for_life_analysis): Call allocate_reg_info to do
+ the actual allocation.
+
+Thu May 29 15:42:59 1997 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.md (movsfcc_1, movdfcc_1, movxfcc_1): Use singlemove_string
+ for float conditional move when destination and operands all differ.
+
+ * i386.h (ASM_OUTPUT_REG_{PUSH,POP}): add %% before register name.
+
+ * go32.h (ASM_OUTPUT_ALIGN): Use .p2align, not byte alignments.
+
+Wed May 28 20:44:00 1997 Mike Stump <mrs@cygnus.com>
+
+ * except.c (push_eh_entry): Eliminate start of exception region
+ label, as it isn't used. Rename end_label to outer_context.
+ (expand_eh_region_start_for_decl): Likewise.
+ (expand_leftover_cleanups): Likewise.
+ (expand_start_all_catch): Likewise.
+ * except.h (eh_entry): Likewise.
+ * except.c (expand_eh_region_end): Likewise. Jump around the nop
+ that we insert, so that we can optimize it away, if it is unused,
+ also so that flow analysis can tell if we fall through to the end
+ of a function or not so that it can know if a function that returns
+ a value, in fact does or not.
+
+Wed May 28 10:50:09 1997 Jeffrey A Law (law@cygnus.com)
+
+ * pa.md (jump): Handle out of range unconditional jump
+ when not optimizing.
+
+Thu May 22 00:57:07 1997 Jeffrey A Law (law@cygnus.com)
+
+ * reload1.c (reload_cse_record_set): Ignore values for SREG if
+ their mode is narrower than DEST_MODE.
+
+ * pa.h (DFMODE_RETURN_STRING): Define.
+ (SFMODE_RETURN_STRING): Likewise.
+ (ASM_DECLARE_FUNCTION_NAME): Use them.
+
+Wed May 21 23:32:02 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.md (reload_insi): Handle SUBREG properly.
+
+Tue May 20 22:32:13 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c (dwarf2out_def_cfa): Set cfa_reg at the top.
+
+Tue May 20 16:57:50 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * cplus-dem.c (do_type): Handle `J'.
+ (demangle_fund_type): Print "complex" for it.
+
+Mon May 19 21:01:53 1997 Jim Wilson <wilson@cygnus.com>
+
+ * m68k.c (output_move_qimode): Add coldfire support.
+ * m68k.h (PUSH_ROUNDING): Add coldfire support.
+ * m68k.md (scc{,0}_di, seq, sne, sgt, sgtu, slt, sltu, sge, sgeu,
+ sle, sleu): Add coldfire support.
+
+Mon May 19 17:53:34 1997 Mike Meissner <meissner@cygnus.com>
+
+ * rs6000.c: (rs6000_pic_func_labelno): New variable.
+ (rs6000_output_load_toc_table): Use it.
+ (output_prolog): Store current value.
+
+Sun May 18 16:32:08 1997 Michael Meissner <meissner@cygnus.com>
+
+ * dbxcoff.h (ASM_OUTPUT_SOURCE_LINE): Use macros
+ ASM_{GENERATE,OUTPUT}_INTERNAL_LABEL to create/output line
+ number label.
+
+Sun May 18 13:55:12 1997 John Vickers (john@rhizik.demon.co.uk)
+
+ * m68k.h (TARGET_SWITCHES): Add new target name, cpu32.
+
+Sun May 18 13:50:10 1997 Pat Rankin <rankin@eql.caltech.edu>
+
+ * cccp.c (VMS_write, VMS_read): Delete.
+ (safe_write): If MAX_WRITE_LEN is defined, limit
+ incremental write attempts to that amount.
+ (safe_read): Analogous situation for MAX_READ_LEN.
+ * cpplib.c (safe_read): Likewise.
+ * vax/xm-vms.h (MAX_WRITE_LEN, MAX_READ_LEN): Define.
+
+ * vax/xm-vms.h (get_dynamic_handler_chain_libfunc): New macro.
+ (protect_cleanup_actions_with_terminate): New macro.
+
+Sun May 18 08:50:25 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * m68k/linux.h (ASM_COMMENT_START): Define.
+ * m68k/linux-aout.h (ASM_COMMENT_START): Define.
+
+ * reload1.c (reload_cse_regno_equal_p): Check for value using more
+ than one register on a big endian machine.
+
+Sun May 18 08:39:59 1997 Vince Del Vecchio <vdelvecc@spd.analog.com>
+
+ * loop.c (maybe_eliminate_biv_1): In (set (cc0) <biv>) case,
+ swap compare operands when mult_val < 0 in one additional place.
+
+Sun May 18 08:33:30 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * dwarf2out.c (ASM_COMMENT_START): Add default definition.
+
+ * Makefile.in (maintainer-claean): Delete configure.
+
+Sun May 18 08:31:59 1997 Scott Christley <scottc@net-community.com>
+
+ * configure.in: New file.
+ * Makefile.in: Change to utilize autoconf variables.
+ * configure: Now an output file.
+
+Sun May 18 07:48:31 1997 J.T. Conklin <jtc@netbsd.org>
+
+ * m68k.md (mov[qhs]i,movstrict[qs]i, mulsi3): Use 'Q' constraint
+ for TARGET_5200.
+ * m68k.h (EXTRA_CONSTRAINT): New macro.
+
+ * m68k.h (TARGET_SWITCHES): Add 68020-60.
+ Mask out bits which indicate a particular processor when a different
+ processor is selected.
+ (MASK_68040_ALSO): Remove.
+ (MASK_68040): Change to be a single bit.
+
+ * m68k.h (TARGET_ALIGN_INT, MASK_ALIGN_INT): New macros.
+ (BIGGEST_ALIGNMENT): Determine according to TARGET_ALIGN_INT.
+ (TARGET_SWITCHES): Add align-int and no-align-int.
+
+ * m68k.md (mov[qhs]i}): Add pair of constraints which allow
+ offsetable memory addresses to be moved to the same for TARGET_5200.
+
+ * m68k.c (output_move_strict{hi,qi}): New functions.
+ * m68k.h (output_move_strict{hi,qi}): Declare.
+ * m68k.md (movstrict*): Changed into define_expands.
+ Split insns into m68k and coldfire specific versions with appropriate
+ constraints.
+
+Sun May 18 07:26:40 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * libgcc2.c (atexit): Cast malloc and realloc calls.
+
+Sat May 17 16:26:51 1997 Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE>
+
+ * final.c (profile_function): Call function_section, not
+ text_section.
+
+Sat May 17 16:01:00 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * cse.c (notreg_cost): New function, extracted from COST macro.
+ (COST): Use notreg_cost.
+
+Sat May 17 15:13:23 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * cse.c (cse_insn): Don't record a SRC that's a MEM and the same
+ as a REG_EQUIV note if DEST is set more than once.
+
+Fri May 16 14:50:57 1997 Jeffrey A Law (law@cygnus.com)
+
+ * pa.c (output_move_double): Handle loading a general register
+ from a scaled indexed memory address.
+ * pa.md (movdf, movdi): Allow scaled loads into general registers.
+
+Fri May 16 13:31:08 1997 Mike Stump <mrs@cygnus.com>
+
+ * rs6000.c (rs6000_stack_info): Only do eabi setup for "main",
+ when main is the global main, not some nested routine that
+ happens to be called main.
+
+Thu May 15 17:19:50 1997 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_start_all_catch): If the machine needs to
+ perform any actions at the start of an expcetion handler that
+ hasn't already been done, use gen_exception_receiver to emit it.
+ (expand_leftover_cleanups): Likewise.
+ * alpha.md (exception_receiver): Use it.
+ * pa.h (exception_receiver): Use it.
+
+Thu May 15 08:36:59 1997 Jeffrey A Law (law@cygnus.com)
+
+ * dbxout.c (dbxout_function_end): Don't subtract one from
+ the end of function scoping stab.
+
+Wed May 14 23:27:09 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.md (adddi3, subdi3): Remove expanders and patterns.
+
+Wed May 14 18:51:35 1997 Mike Stump <mrs@cygnus.com>
+
+ * function.c (expand_function_end): Make sure we finish off any
+ leftover exception handlers.
+
+Tue May 13 14:07:01 1997 Mike Stump <mrs@cygnus.com>
+
+ * expr.c (expand_builtin_setjmp): Remove setting of
+ current_function_has_nonlocal_goto, as this isn't a goto.
+
+Tue May 13 14:47:40 1997 Richard Earnshaw (rearnsha@cambridge.arm.com)
+
+ * arm.h (CPP_SPEC): Fix typo invoking cpp_endian.
+ * arm/t-semi (LIB2FUNCS_EXTRA): Build fp-bit.c when compiling
+ with -msoft-float.
+ * arm.c: Add prototypes for all static functions.
+ (output_multi_immediate, int_log2): Make static.
+
+ * arm.h (*_SPEC): Remove all references to mle/mbe.
+ * arm/coff.h (MULTILIB_DEFAULTS): Likewise.
+ * arm/t-bare (MULTILIB_OPTIONS): Change options mbe/mle to mbig-endian
+ and mlittle-endian.
+ (MULTILIB_MATCHES): Nothing matches that matters.
+
+Mon May 12 20:42:20 1997 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_start_all_catch): If need nonlocal_goto_receiver,
+ add one at the start of exception handler.
+ (expand_leftover_cleanups): Likewise.
+
+Mon May 12 17:36:28 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mips.c (move_operand): Accept any general operand after reload
+ has started.
+
+Fri May 9 14:29:33 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.md (udivmodhi4, divmodhi4): Remove expander, give
+ corresponding pattern [u]divmodhir4 name. Clear MDR register
+ in the udivmodhi4 pattern itself.
+ (clear_mdr): Delete pattern.
+
+Thu May 8 18:20:30 1997 Richard Earnshaw (rearnshaw@cambridge.arm.com)
+
+ * arm/aout.h (ASM_OUTPUT_LONG_DOUBLE): Delete call to
+ arm_increase_location.
+ (ASM_OUTPUT_{DOUBLE,FLOAT,INT,SHORT,CHAR,BYTE,ASCII,SKIP}): Likewise.
+ (ASM_OUTPUT_ALIGN): Delete all code refering to arm_text_location.
+
+ * arm.c (arm_increase_location, get_prologue_size): Delete.
+ (arm_naked_function_p): Add declaration.
+ (arm_pic_register): Define.
+ (all_procs): Delete entries for arm{60,620,70,7d,7di,700i,710c}; add
+ entries for arm{7m,7500fe,8}, strongarm and strongarm110.
+ (arm_override_options): Rework so that configure can properly set
+ the default processor type. Add a warning that PIC code is not yet
+ supported.
+ (legitimate_pic_operand_p, legitimize_pic_address): New functions.
+ (is_pic, arm_finalize_pic): New functions.
+ (arm_adjust_cost): New function.
+ (const_pool_offset, arm_backwards_branch, short_branch): Delete.
+ (arm_insn_not_targeted): Delete.
+ (add_constant): If generating AOF syntax, then handle pic specially.
+ (output_ascii_pseudo_op): Delete calls to arm_increase_location.
+ (function_really_clobbers_lr): Calls followed by a barrier don't
+ clobber the link register.
+ (output_func_prologue): Handle AOF syntax pic code.
+ (output_func_epilogue): Handle cases where lr_save_eliminated is set.
+ Delete call to arm_increase_location.
+ (arm_asm_output_label): Simplify, since we no-longer need to cache the
+ label's address.
+ (aof_pic_entry): New function to keep track of pic symbols.
+ (aof_dump_pic_table): New function.
+
+ * arm.h (TARGET_CPU_arm*, TARGET_CPU_strongarm*, TARGET_CPU_generic):
+ define.
+ (CPP_ARCH_DEFAULT_SPEC): Set up based on setting of TARGET_CPU_DEFAULT.
+ (CPP_SPEC): Split up into sub-rule calls.
+ (CPP_CPU_SPEC): Add default definition.
+ (CPP_APCS_PC_SPEC, CPP_APCS_PC_DEFAULT_SPEC): Add definitions.
+ (CPP_FLOAT_SPEC, CPP_FLOAT_DEFAULT_SPEC): Add definitions.
+ (CPP_ENDIAN_SPEC, CPP_ENDIAN_DEFAULT_SPEC): Add definitions.
+ (CC1_SPEC): Map legacy -m[236] onto -mcpu=.. and -mapcs-{26,32} as
+ appropriate. Similarly for -mbe and -mle to -m{big,little}-endian.
+ (EXTRA_SPECS): Define.
+ (enum processor_type): New types for arm8 and strongarm.
+ (CONDITIONAL_REGISTER_USAGE): Handle flag_pic.
+ (LEGITIMIZE_ADDRESS): Likewise.
+ (ADJUST_COST): Define.
+ (PIC_OFFSET_TABLE_REGNUM): Define.
+ (FINALIZE_PIC): Define.
+ (LEGITIMATE_PIC_OPERAND_P): Define.
+ (OUTPUT_INT_ADDR_CONST): Define.
+ (ASM_OUTPUT_MI_THUNK): Delete calls to arm_increase_location.
+ (MASK_RETURN_ADDR): Use TARGET_APCS_32 not TARGET_6.
+
+ * arm.md (attr cpu): Add new cpu types for arm8 and strongarm.
+ (attr ldsched): New attribute, set if processor has a load_delay slot.
+ (function_unit core): Rework to handle load delay slots.
+ (function_unit loader): New function unit.
+ (movsi): Handle pic.
+ (pic_load_addr): New expand.
+ (*pic_load_addr_based_insn, pic_add_dot_plus_eight): New patterns.
+ (peepholes to cause flow to return to a label after a function call):
+ Delete, these have been disabled for a while now.
+
+ * arm/riscix.h (CPP_SPEC): Rewrite using new sub-components.
+ (SUBTARGET_CPU_DEFAULT): Set to TARGET_CPU_arm2.
+ * arm/riscix1-1.h (CPP_SPEC): Rewrite using new sub-components.
+ (SUBTARGET_CPU_DEFAULT): Set to TARGET_CPU_arm2.
+ * arm/semi.h: (CPP_SPEC): Delete.
+ (PROCESSOR_DEFAULT): Delete.
+ (CPP_APCS_PC_DEFAULT_SPEC): Define.
+ * arm/semiaof.h (CPP_SPEC): Delete.
+ (CPP_APCS_PC_DEFAULT_SPEC): Define.
+ * arm/t-semi (LIBGCC1_TEST): Don't build it.
+ (MULTILIB_{OPTIONS,DIRNAMES,EXCEPTIONS}): Build a suitable set of
+ cross libraries.
+ (LIBGCC): Set to stmp-multilib.
+ (INSTALL_LIBGCC): Set to install-multilib.
+
+Thu May 8 15:20:46 1997 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.c (output_float_compare): For pentiumpro use fcomip
+ followed by a float stack pop for "compare;pop;pop" cases.
+
+Thu May 8 13:20:20 1997 Chris Torek <torek@elf.bsdi.com>
+
+ * fold-const.c (fold, truth_andor): Disable optimization for
+ side effects on RHS.
+
+Wed May 7 15:43:57 1997 Mike Stump <mrs@cygnus.com>
+
+ * except.c (start_dynamic_handler): Fix so we can use __builtin_setjmp,
+ and default to using __builtin_setjmp instead of setjmp.
+ * expr.c (expand_builtin_setjmp): New routine, split out from
+ existing inline code from expand_builtin.
+ (expand_builtin): Split out code into expand_builtin_setjmp.
+ * expr.h (expand_builtin_setjmp): Add declaration.
+ * libgcc2.c (__sjthrow): Default to using __builtin_setjmp instead
+ of setjmp.
+ (__sjpopnthrow): Likewise.
+ * optabs.c (init_optabs): Likewise.
+
+Wed May 7 18:01:24 1997 Samuel Figueroa <Samuel_Figueroa@next.com>
+
+ * rs6000.md (insv): Only combine insert with shift if
+ remaining source bits >= destination field size.
+
+Tue May 6 15:48:52 1997 Jason Merrill <jason@gerbil.cygnus.com>
+
+ * dwarf2out.c (dwarf2out_begin_prologue): Increment
+ current_funcdef_number here.
+ (dwarf2out_end_epilogue): Not here.
+
+Mon May 5 18:52:32 1997 Jeffrey A Law (law@cygnus.com)
+
+ * h8300.c (notice_update_cc): Use CC_SET_ZN and CC_SET_ZNV.
+ (shift_one, shift_two): Set CC_NO_CARRY as needed. Remove
+ references to CC_OVERFLOW_0.
+ (emit_a_shift): Similarly.
+ * h8300.h (CC_OVERFLOW_0): Remove.
+ * h8300.md: Use set_zn and set_znv for cc0 tracking.
+ (bCC): Restore the comparison is CC_OVERFLOW_UNUSABLE is set and
+ the comparison needs the overflow bits.
+
+ * mn10300.c (notice_update_cc): Use CC_SET_ZN and CC_SET_ZNV.
+ * mn10300.h (CC_NO_CARRY): Define.
+ * mn10300.md: Use "set_zn" and "set_znv" to more accurately
+ describe cc0 status.
+
+Fri May 2 17:00:33 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c: Reorganize, moving .debug_frame support to the top
+ of the file, and compile it if INCOMING_RETURN_ADDR_RTX is defined
+ even if DWARF2_DEBUGGING_INFO isn't.
+ (EH_FRAME_SECTION): New macro.
+ (output_call_frame_info): Handle .eh_frame variant.
+ (dwarf2out_def_cfa): Update cfa_*{reg,offset}.
+ (dwarf2out_frame_debug): Move cfa_*{reg,offset} to file scope.
+ (dwarf2out_end_epilogue): Increment current_funcdef_number here.
+ (dwarf2out_decl): Not here.
+ (dwarf2out_frame_init, dwarf2out_frame_finish): New fns.
+ (dwarf2out_init, dwarf2out_finish): Call them.
+ (output_die): Add missing 'case 8:'
+ (dwarf2out_decl): Revert other context_die = NULL change.
+ (add_bound_info): Restore default case.
+
+Fri May 2 15:30:16 1997 Doug Evans <dje@seba.cygnus.com>
+
+ * m32r.h (LIT_NAME_P): New macro.
+ (SMALL_NAME_P): Use it.
+ (ASM_OUTPUT_ALIGNED_COMMON): Don't output to scommon if -msdata=none.
+ * m32r.c (addr24_operand): Handle literals.
+ (m32r_output_function_prologue): Use IMMEDIATE_PREFIX.
+ (m32r_output_function_epilogue): Likewise. Use shorter add insn if
+ able.
+
+Fri May 2 14:40:44 1997 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.h (RS6000_ALIGN): Macro renamed from ALIGN.
+ * rs6000.c (rs6000_stack_info): Use it.
+
+Fri May 2 14:15:54 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * reload1.c (reload_cse_noop_set_p): When checking the values
+ equivalent to sreg, make sure the mode is right.
+
+Fri May 2 12:53:03 1997 Jeffrey A Law (law@cygnus.com)
+
+ * reload1.c (reload_cse_invalidate_regno): Properly set
+ the mode for invalidate_regno_rtx.
+
+Thu May 1 14:57:35 1997 Jeffrey A Law (law@cygnus.com)
+
+ * pa.md (call_internal_symref): Fix typo.
+
+Thu May 1 14:44:17 1997 Jim Wilson <wilson@cygnus.com>
+
+ * mips.c (mips_asm_file_start): Use new macro TARGET_FILE_SWITCHING.
+ (mips_asm_file_end): Likewise.
+ * mips.h (TARGET_FILE_SWITCHING): Define.
+ (NO_DBX_FUNCTION_END): Define.
+
+Thu May 1 09:08:40 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * m68k.c (output_addsi3): Replace "\\;" by "\n\t" in
+ assembler templates.
+
+Thu May 1 09:00:42 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * integrate.c (subst_constants, case SUBREG): Cancel changes once
+ done with result.
+
+Wed Apr 30 19:45:56 1997 Jim Wilson <wilson@cygnus.com>
+
+ * mips.c (override_options): Set mips_split_addresses only if
+ TARGET_SPLIT_ADDRESSES is set.
+ * mips.h (MASK_SPLIT_ADDR, TARGET_SPLIT_ADDRESSES): New macros.
+ (TARGET_SWITCHES): Add -msplit-addresses, -mno-split-addresses.
+ * configure (mips*-*-ecoff*, mips*-*-elf*): Set MASK_SPLIT_ADDR
+ bit in target_cpu_default2.
+
+ * flags.h (current_function_is_thunk): Add extern to declaration.
+
+ * dbxout.c (dbxout_function): Test NO_DBX_FUNCTION_END at run time
+ instead of compile time.
+
+ * unroll.c (set_dominates_use): In second loop, add check for copy_end.
+
+ * mips.md (paradoxical_extendhidi2, paradoxical_extendqidi2): New
+ patterns.
+
+Wed Apr 30 02:23:24 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * output.h (named_section): Add reloc argument.
+ (DECL_READONLY_SECTION): New macro.
+ * varasm.c (named_section): Add reloc argument, pass it to
+ ASM_OUTPUT_SECTION_NAME.
+ (UNIQUE_SECTION, UNIQUE_SECTION_P): Provide defaults.
+ (function_section): Pass reloc argument to named_section.
+ (variable_section, exception_section): Likewise.
+ (output_constant_def_contents): Likewise.
+ (assemble_start_function): Use UNIQUE_SECTION_P. UNIQUE_SECTION is
+ now a statement.
+ (assemble_variable): Likewise.
+ * mips/iris6.h (ASM_OUTPUT_SECTION_NAME): Add reloc arg,
+ use DECL_READONLY_SECTION.
+ * psos.h, ptx4.h, a29k.h, alpha/elf.h, arm/coff.h, h8300.h: Likewise.
+ * i386/go32.h, i386/sco5.h, m68k/coff.h, mips/elf64.h: Likewise.
+ * mips/netbsd.h, pa.h, rs6000/sysv4.h, sh.h, sparc/sysv4.h: Likewise.
+ * config/svr4.h (SELECT_SECTION): Use DECL_READONLY_SECTION.
+ (ASM_OUTPUT_SECTION_NAME): Likewise, add reloc argument.
+ (MAKE_DECL_ONE_ONLY): Just set DECL_WEAK.
+ (UNIQUE_SECTION, UNIQUE_SECTION_P): Define.
+ * i386/cygwin32.h (UNIQUE_SECTION_P): Define.
+ (SUPPORTS_ONE_ONLY): Define.
+ (MAKE_DECL_ONE_ONLY): Lose.
+ (ASM_OUTPUT_SECTION_NAME): Add reloc arg, use DECL_READONLY_SECTION.
+ * i386/winnt.c (i386_pe_unique_section): Add reloc arg,
+ use DECL_READONLY_SECTION.
+
+ * mips/iris6.h (CTORS_SECTION_ASM_OP): Change aligment based on ABI.
+ (DTORS_SECTION_ASM_OP): Likewise.
+
+Tue Apr 29 16:08:07 1997 Jeffrey A Law (law@cygnus.com)
+
+ * pa/lib1funcs.asm (divnorm, modnorm, exitdiv): Fix code to
+ negate SImode values.
+
+Tue Apr 29 12:54:14 1997 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_eh_region_start_tree): Add DECL argument so we
+ can better track why the region was made for error reporting.
+ * except.h (expand_eh_region_start_tree): Likewise.
+ * tree.h (expand_dhc_cleanup): Likewise.
+ (expand_dcc_cleanup): Likewise.
+ * except.c (expand_eh_region_start_for_decl): New routine.
+ * except.h (expand_eh_region_start_for_decl): Likewise.
+ * stmt.c (expand_decl_cleanup): Add DECL to call of
+ expand_eh_region_start_tree.
+ (expand_dcc_cleanup): Likewise.
+ (expand_dhc_cleanup): Likewise.
+ (expand_start_case): Switches introduce conditional contexts.
+ (expand_start_case_dummy): Likewise.
+ (expand_start_case_dummy): Likewise.
+ (expand_end_case): Likewise.
+
+Tue Apr 29 11:45:09 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c (dwarf2out_decl): Undo earlier change.
+ (constant_size): Likewise.
+ (gen_subprogram_die): Handle NULL context_die.
+
+ * mips/iris6.h (ASM_OUTPUT_CONSTRUCTOR): Fix for -mabi=64.
+ (ASM_OUTPUT_DESTRUCTOR): Likewise.
+
+Mon Apr 28 09:10:19 1997 Jeffrey A Law (law@cygnus.com)
+
+ * h8300.c (push_order, pop_order): Add missing initializer entries.
+
+Fri Apr 25 19:39:43 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * h8300.c (output_adds_subs): Check for adding 0.
+
+Fri Apr 25 14:52:31 1997 Jim Wilson <wilson@cygnus.com>
+
+ * configure (i[3456]86-*-freebsdelf*, i[3456]86-*-freebsd*): Use
+ t-freebsd instead of x-freebsd.
+ * i386/t-freebsd: Renamed from x-freebsd.
+
+Fri Apr 25 12:16:20 1997 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * go32.h (DBX_*): Use definitions from config/dbxcoff.h instead.
+
+Fri Apr 25 11:55:54 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * i386/cygwin32.h (MULTIPLE_SYMBOL_SPACES): Define.
+
+Thu Apr 24 18:32:56 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * i386/winnt.c (i386_pe_unique_section): New fn.
+ * i386/cygwin32.h (UNIQUE_SECTION): Define.
+ (MAKE_DECL_ONE_ONLY): Define.
+ (ASM_OUTPUT_SECTION_NAME): Support DECL_ONE_ONLY.
+
+ * c-decl.c (implicitly_declare): Don't set DECL_ARTIFICIAL.
+
+Thu Apr 24 17:11:23 1997 Jim Wilson <wilson@cygnus.com>
+
+ * m68k.h (MACHINE_STATE_SAVE, MACHINE_STATE_RESTORE): Add
+ TARGET_5200 support.
+
+Thu Apr 24 16:39:25 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * stmt.c (pushcase_range): Check for null range first.
+
+Wed Apr 23 23:06:28 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * reload1.c (reload_cse_record_set): Use push_operand to check for
+ changes to the stack pointer.
+
+Wed Apr 23 19:56:01 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * calls.c (expand_call): If we're in a thunk, pass through invisible
+ references instead of making a copy.
+ * flags.h: Add current_function_is_thunk.
+ * function.c: Likewise.
+ (init_function_start): Initialize it.
+ (push_function_context_to): Save it.
+ (pop_function_context_from): Restore it.
+ * function.h (struct function): Add is_thunk.
+
+Wed Apr 23 17:47:25 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.c (secondary_reload_class): Handle more cases where we
+ need secondary reloads.
+ (impossible_plus_operand): Accept anything that involves addition
+ of the stack pointer.
+ * mn10300.md (reload_insi): Always load the stack pointer into
+ the destination (which is always an address register).
+ * mn10300.h (STORE_FLAG_VALUE): Remove definition.
+ * xm-mn10300.h: Declare malloc, realloc, calloc and free.
+
+Wed Apr 23 14:28:30 1997 Mike Stump <mrs@cygnus.com>
+
+ * expr.h (sjthrow_libfunc): Add support for setjmp/longjmp based
+ exception handling.
+ ({sjpopnthrow,terminate,setjmp,longjmp}_libfunc): Likewise.
+ (get_dynamic_handler_chain_libfunc): Likewise.
+ * expr.c (expand_expr, case TRY_CATCH_EXPR): Likewise.
+ (expand_expr, case POPD{C,H}C_EXPR): Likewise.
+ * stmt.c (mark_block_as_eh_region): Likewise.
+ (mark_block_as_not_eh_region): Likewise.
+ (is_eh_region, conditional_contex, expand_start_bindings): Likewise.
+ (expand_end_bindings, expand_{decl,dcc,dhc}_cleanup): Likewise.
+ (expand_cleanups): Likewise.
+ * tree.h (mark_block_as_eh_region): Likewise.
+ (mark_block_as_not_eh_region, is_eh_region): Likewise.
+ conditional_context, expand_dhc_cleanup): Likewise.
+ * except.c (exception_via_longjmp): Likewise.
+ (protect_cleanup_actions_with_terminate): Likewise.
+ (current_function_d{h,c}c, add_partial_entry): Likewise.
+ (get_dynamic_{handler,cleanup}_chain): Likewise.
+ (start_dynamic_{cleanup, handler}): Likewise.
+ (expand_eh_region_start{,_tree}, expand_eh_region_end): Likewise.
+ (emit_throw, expand_leftover_cleanups): Likewise.
+ (expand_{start,end}_all_catch, protect_with_terminate): Likewise.
+ ({start,end}_eh_unwinder, init_eh_for_function): Likewise.
+ ({save,restore}_eh_status, exception_optimize): Likewise.
+ * optabs.c ({sjthrow,sjpopnthrow,terminate,setjmp}_libfunc): Likewise.
+ ({longjmp,get_dynamic_handler_chain}_libfunc): Likewise.
+ (init_optabs): Likewise.
+ * except.h: Likewise.
+ * libgcc2.c (__default_terminate): Likewise.
+ (__terminate, __get_dynamic_handler_chain, __sjthrow): Likewise.
+ (__sjpopnthrow): Likewise.
+ * toplev.c (f_options): Likewise.
+ * tree.def (TRY_CATCH_EXPR, POPDHC_EXPR, POPDCC_EXPR): Likewise.
+ * pa.h (JMP_BUF_SIZE): Define.
+ * sparc.h (JMP_BUF_SIZE): Define.
+
+ * expr.h (cleanups_this_call): Transform uses of cleanups_this_call
+ into uses of the cleanups managed by the block code
+ (expand_start_bindings and friends). Remove defer_cleanups_to and
+ expand_cleanups_to, and use start_cleanup_deferal and
+ end_cleanup_deferal instead. Add exception_region,
+ target_temp_slot_level, conditional_code,
+ last_unconditional_cleanup and cleanup_ptr to struct nesting to
+ facilitate conditional cleanups.
+ * expr.c (cleanups_this_call, init_expr): Likewise.
+ ({save,restore}_expr_status, store_expr): Likewise.
+ (expand_expr, {defer,expand}_cleanups_to): Likewise.
+ (do_jump, case TRUTH_{AND,OR}IF_EXPR): Likewise.
+ (do_jump, case COND_EXPR): Likewise.
+ * stmt.c (struct nesting): Likewise.
+ (expand_return, expand_start_bindings, expand_end_bindings): Likewise.
+ (expand_cleanups, {start,end}_cleanup_deferal): Likewise.
+ * tree.h (start_cleanup_deferal): Likewise.
+ (end_cleanup_deferal): Likewise.
+ * calls.c (expand_call): Likewise.
+ * function.h (struct function): Likewise.
+ * except.c (asynchronous_exceptions): Support
+ -fasynchronous_exceptions.
+ (can_throw): Likewise.
+ * toplev.c (f_options): Likewise.
+
+ * flags.h (flag_short_temps): Remove support for short temps.
+ * calls.c (expand_call): Likewise.
+ * toplev.c (flag_short_temps): Likewise.
+
+ * stmt.c (expand_start_target_temps): Add for convenience.
+ (expand_end_target_temps): Likewise.
+ * except.c (jumpif{,not}_rtx): Likewise.
+
+ * stmt.c: Remove all traces of empty_cleanup_list.
+
+Wed Apr 23 17:26:40 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * reload1.c (reload_cse_mem_conflict_p): Don't assume that a
+ SUBREG can not conflict with a MEM.
+
+Wed Apr 23 09:48:58 1997 Oliver Kellogg (oliver.kellogg@space.otn.dasa.de)
+
+ * 1750a.md (cmphi): Fixed when next CC user is unsigned.
+ (mov[hq]i-[23]): New patterns for mem-indirect moves.
+ (movhf,movtqf): Corrected.
+ * 1750a.c (memop_valid): Memory indirection now valid.
+ (nonindirect_operand): Remove.
+ (print_operand): Fix the 'J' output modifier.
+ * 1750a.h (FRAME_POINTER_REQUIRED): Not required.
+ (INITIAL_FRAME_POINTER_OFFSET,FIX_FRAME_POINTER_ADDRESS): Undefine.
+ (FUNCTION_PROLOGUE,FUNCTION_EPILOGUE): Honor -fomit-frame-pointer.
+ (ELIMINABLE_REGS,CAN_ELIMINATE,INITIAL_ELIMINATION_OFFSET): Defined.
+ (PREFERRED_RELOAD_CLASS): Corrected.
+ (CONST_COSTS,ADDRESS_COST,REGISTER_MOVE_COST,MEMORY_MOVE_COST):
+ Slight adjustments.
+ (ASM_APP_ON,ASM_APP_OFF): Corrected.
+ * ms1750.inc (DUCR.M,DUC.M): Defined.
+
+Wed Apr 23 09:41:35 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * reload.c (push_reload): Fix last arg of call to find_dummy_reload.
+
+Wed Apr 23 09:29:14 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * configure (i[3456]86-next-*, m68k-next-nextstep{2,3}*):
+ Remove out_file and add extra_objs.
+ * config/nextstep.c: Add includes for config.h, stdio.h, and flags.h.
+ * {i386,m68k}/t-next (nextstep.o): New rule.
+ * m68k/next.h: Remove include of machmode.h.
+ * {i386,m68k}/next.c: Files deleted.
+
+Tue Apr 22 20:45:29 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * sparc.h (DBX_CONTIN_LENGTH): Shrink to 1000.
+
+Tue Apr 22 18:21:20 1997 Jim Wilson <wilson@cygnus.com>
+
+ * dwarf2out.c (gen_variable_dir): Add test for DW_AT_declaration to
+ the old_die if statement, and delete assertion for it.
+ (decl_ultimate_origin): Remove last change.
+
+Tue Apr 22 10:22:27 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.c (expand_prologue): End the current sequence before
+ counting the tst insns in the current function. Start a new
+ one before emitting any prologue instructions.
+
+ * mn10300.h (REGISTER_MOVE_COST): Bump up cost of moves in the
+ same class.
+
+ * mn10300.md (untyped_call): New expander.
+
+Mon Apr 21 16:30:21 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * cse.c (fold_rtx, case PLUS): When seeing if negative of constant
+ is around, make sure not dealing with largest negative.
+
+Mon Apr 21 13:57:53 1997 Jim Wilson <wilson@cygnus.com>
+
+ * mips/t-ecoff: Set TARGET_LIBGCC2_CFLAGS instead of LIBGCC2_CFLAGS.
+
+ * m68k.c (output_addsi3): New function. From addsi3 pattern.
+ * m68k.h (output_addsi3): Add declaration.
+ * m68k.md (movqi+2): Add address registers.
+ (movxf+1): Disable for TARGET_5200.
+ (movxf+2): New pattern for TARGET_5200.
+ (addsi3): Add define_expand. Move code to output_addsi3.
+ (addsi3_internal): Renamed from addsi3. Disable for TARGET_5200.
+ (addsi3_5200): New pattern for TARGET_5200.
+
+Sun Apr 20 10:45:35 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * fold-const.c (operand_equal_p): Constants are not equal if there
+ has been an overflow.
+
+ * toplev.c (compile_file): Shorten "branch-probabilities" in
+ output of times.
+
+ * alpha/vms.h (MOD[SD]I3_LIBCALL): Call ots$rem, not ots$mod.
+ (DWARF2_DEBUGGING_INFO): Define.
+
+ * alpha.c (alpha_need_linkage): Call get_identifier.
+
+ * rs6000.c (rs6000_output_load_toc_table): New function.
+ (output_prolog): Call it instead of doing it directly.
+ * rs6000.md (nonlocal_goto_receiver): New pattern.
+
+ * dwarf2out.c: Major cleanup; mostly reformatting.
+ Include expr.h.
+ Undefine inline ifndef __GNUC__; never define to include static.
+ Add "static" to header of all inlined functions.
+ Add declarations for all static functions, with prototypes.
+ (addr_const_to_string): Use HOST_WIDE_INT_PRINT_* macros.
+ (add_AT_*, new_{die,loc_descr,cfi): Don't check for xmalloc
+ returning zero.
+ (modified_type_die): Add missing parm on recursive call.
+ ({reg,based}_loc_descriptor): Add missing arg to call to new_loc_descr.
+ (add_const_value_attribute): Use REAL_VALUE_TYPE for fp calculations.
+ (output_call_frame_info): Add missing arg to output_cfi call.
+ (dwarf2out_def_cfa): Local variable OLD_REG must be unsigned long.
+ * Makefile.in (dwarf2out.o): Includes expr.h.
+
+ * dwarf2out.c: Cast first arg in all calls to bzero to char *.
+ (decl_ultimate_origin): Return NULL if equal to decl.
+ (constant_size): Never return more than 4.
+ (value_format, case 8): New case.
+ (dwarf2out_frame_debug): Use HARD_FRAME_POINTER_REGNUM.
+ (based_loc_descr): Likewise.
+ (add_bound_info): Delete default case.
+ Add cases for CONVERT_EXPR and NON_LVALUE_EXPR; treat like NOP_EXPR.
+ Change NOP_EXPR to to recursive call.
+ (add_type_attribute): Ignore unnamed subtype of integral or FP.
+ (gen_subprogram_die): Use reg_loc_descriptor.
+ (dwarf2out_decl): Ignore nested functions.
+
+ * fix-header.c, protoize.c, gcov.c: Use symbolic codes for exit.
+
+ * final.c (profile_function): Only call ASM_OUTPUT_REG_{PUSH,POP}
+ if defined.
+
+ * expr.c ({move,clear}_by_pieces_1, expand_assignment): Ensure
+ we have unshared rtx before changing flags.
+ (store_{constructor,field}): Likewise.
+ (expand_expr, case COMPONENT_REF): Likewise.
+ (store_expr): Check if TEMP and TARGET are same with rtx_equal_p.
+
+ * emit-rtl.c (change_address, init_emit): Delete forward references.
+ (rtl_obstack, stack_depth, max_stack_depth): Delete extern decls.
+
+Fri Apr 18 18:25:52 1997 Jim Wilson <wilson@cygnus.com>
+
+ * function.c (instantiate_decls): For DECL_INCOMING_RTL, use max
+ of type size and mode size in instantiate_decl call.
+
+ * fixincludes (sys/lc_core.h): Fix OSF1/4.x namespace pollution.
+
+Wed Apr 16 19:36:53 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c (add_bound_info): Use a DIE instead of a location
+ expression for variable bounds. Trust a MEM rtx even when
+ optimizing.
+ (DWARF_FRAME_RETURN_COLUMN): Default to FIRST_PSEUDO_REGISTER.
+
+ * expr.c (expand_expr, case RTL_EXPR): If there is no sequence,
+ don't set it to const0_rtx.
+ * tree.c (array_type_nelts): Don't return any SAVE_EXPRs.
+
+Mon Apr 14 18:12:57 1997 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.h (RS6000_ITRUNC, RS6000_UITRUNC): Prepend underscores.
+ (RS6000_MCOUNT): New macro.
+ (ASM_FILE_START): Use RS6000_MCOUNT.
+ * rs6000.c (output_function_profiler): Use RS6000_MCOUNT.
+ * rs6000/aix31.h (RS6000_{ITRUNC,UITRUNC,MCOUNT}): New macros.
+
+Mon Apr 14 14:37:27 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.c (can_use_return_insn): Include outgoing argument
+ area in size computation.
+ (expand_prologue): Likewise. No longer diddle with sequences.
+ Put register saves just before outgoing argument area.
+ (expand_epilogue): Similarly.
+ (impossible_plus_operand): New function.
+ * mn10300.h (FRAME_POINTER_REQUIRED): Never require a frame pointer.
+ (ACCUMULATE_OUTGOING_ARGS, OUTGOING_REG_PARM_STACK_SPACE): Define.
+ (impossible_plus_operand): Declare.
+ * mn10300.md (reload_insi): New expander to handle pathological
+ reload cases.
+ (addsi3): Fix CC status.
+
+ * mn10300.h (FUNCTION_VALUE): Return addresses in $a0.
+ (FUNCTION_VALUE_REGNO_P): Corresponding changes.
+ * mn10300.md (call_value_internal): Allow output to be in an
+ address register.
+
+ * calls.c (emit_library_call): Handle saving of stack slots when
+ ACCUMULATE_OUTGOING_ARGS is defined.
+ (emit_library_call_value): Likewise.
+
+Mon Apr 14 14:48:15 1997 Jim Wilson <wilson@cygnus.com>
+
+ * sh.md (xtrct_left, xtrct_right): New patterns.
+
+ * combine.c (get_last_value_validate): New argument insn.
+ Add check for memory reference clobbered by later store.
+ (record_value_for_reg, get_last_values): Pass in new argument.
+
+Mon Apr 14 14:03:18 1997 Mike Meissner <meissner@cygnus.com>
+
+ * configure (powerpc --with-cpu=x): Add embedded powerpcs and 604e.
+
+ * rs6000.c (rs6000_override_options): Recognize -mcpu=801, -mcpu=823,
+ and -mcpu=604e.
+
+Sun Apr 13 18:43:16 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * reload1.c (invalidate_regno_rtx): New static variable.
+ (reload_cse_invalidate_regno): Check whether any earlier registers
+ have a multi-register value which includes the register we are
+ invalidating.
+ (reload_cse_regs): Initialize invalidate_regno_rtx.
+
+ * reload1.c (reload_cse_record_set): When setting reg_values for a
+ copy from one register to another, use gen_lowpart_common to
+ adjust the value correctly if the mode changes.
+
+Sun Apr 13 17:24:48 1997 Doug Evans <dje@cygnus.com>
+
+ * expr.c (move_block_from_reg): Try using integral mov operation first.
+
+ * calls.c (expand_call): When copying unaligned values into a register,
+ zero out the register first rather than emitting a clobber.
+
+ * integrate.c (copy_rtx_and_substitute): If FRAME_GROWS_DOWNWARD
+ and regno == VIRTUAL_STACK_VARS_REGNUM, round size of stack slot up
+ before calling assign_stack_temp.
+
+Sun Apr 13 15:29:38 1997 Ulrich Drepper <drepper@cygnus.com>
+
+ * enquire.c (fake_f_rep): Add missing element name in cast.
+
+Sun Apr 13 15:20:05 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * stor-layout.c (layout_record, PCC_BITFIELD_TYPE_MATTERS):
+ Fix sign bug in last change.
+
+Sun Apr 13 15:03:38 1997 J.T. Conklin <jtc@netbsd.org>
+
+ * m68k.md (movstricthi): Remove extraneous comparisons.
+
+ * configure (*-*-netbsd): tmake_file now t-netbsd; delete xmake_file.
+ * config/t-netbsd: New file.
+ * config/x-netbsd: Removed.
+
+Sun Apr 13 14:51:25 1997 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ * cse.c (canon_reg, cse_insn): Don't examine insn_n_dups if
+ recog_memoized fails to find a match.
+
+Sun Apr 13 14:17:26 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * reload1.c (reload_cse_noop_set_p): Add insn parameter. Change
+ all callers. If deleting the instruction, remove any earlier
+ REG_DEAD note for DREG.
+ (reload_cse_simplify_set): If simplifying, remove any earlier
+ REG_DEAD note for the new source register.
+
+Sun Apr 13 14:12:08 1997 Pat Rankin <rankin@eql.caltech.edu>
+
+ * libgcc2 (L_bb, L_exit): Use 0 rather than NULL for null pointers.
+
+Sun Apr 13 12:53:03 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * m68k/linux.h (ASM_SPEC): Define.
+ (STRUCT_VALUE_REGNUM, STATIC_CHAIN_REGNUM, INITIALIZE_TRAMPOLINE):
+ Remove definitions, undoing the change of Mar 20 1996.
+
+ * m68k.c (output_move_qimode): Optimize pushing one byte if source
+ operand does not use stack pointer.
+
+ * m68k.md (rotl[shq]i3, rotl[hq]i3+1): Don't directly modify operand.
+
+ * m68k.md (tstdi): Add missing parallel around the pattern.
+
+Sun Apr 13 12:51:00 1997 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c, cpplib.c (do_include): Diagnose #import and
+ #include_next if pedantic and if not in a system header.
+ (do_warning): #warning now causes an error if -pedantic-errors
+ is given; this is needed since #warning isn't ANSI.
+
+ * toplev.c (lang_options): Add -Wundef, -Wno-undef.
+ * c-decl.c (c_decode_option): Ignore -Wundef, -Wno-undef.
+
+ * cccp.c, cexp.y (warn_undef): New variable.
+ * cpplib.h (struct cpp_options): New member warn_undef.
+ (CPP_WARN_UNDEF): New macro.
+
+ * cccp.c (main), cpplib.c (cpp_handle_options): Set warn_undef
+ from -Wundef and -Wno-undef.
+
+ * cppexp.c (cpp_lex) New arg skip_evaluation.
+ (cpp_parse_expr): Pass skip_evaluation to cpp_lex.
+ Abort if cpp_lex returns NAME.
+
+ * cexp.y (exp), cppexp.c (cpp_lex): Optionally warn about undefined
+ identifiers that evaluate to 0.
+
+Sun Apr 13 11:43:16 1997 Joel Sherrill <joel@OARcorp.com>
+
+ * configure (hppa1.1-*-rtems*): New target.
+ * mips/rtems.h: New file.
+
+Sun Apr 13 09:48:26 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * gcov.c (print_usage, open_files): Use FATAL_EXIT_CODE.
+ * collect2.c (fatal_perror, fatal, collect_wait): Likewise.
+
+ * sparc.c (eligible_for_delay_slot): Clean up and make to agree
+ precisely with patterns in MD file.
+ * sparc.md (*return_addsi): Change condition to exclude both ints.
+ (*return_adddi): Likewise.
+ (*return_subsi): New pattern.
+
+ * recog.c (validate_replace_rtx_1, case MINUS): New case.
+
+Sun Apr 13 08:20:24 1997 Thomas Bushnell <thomas@gnu.ai.mit.edu>
+
+ * i386/gnu.h (TARGET_VERSION): Redefine.
+
+Sun Apr 13 08:15:31 1997 Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE>
+
+ * c-typeck.c (lookup_field): Don't recurse unless FIELD is
+ a RECORD_TYPE or UNION_TYPE.
+
+ * final.c (profile_function): Save the static chain register
+ around the call to the profiler function.
+
+ * loop.c (invariant_p, case REG): Pointers into frame are not
+ invariants if function has nonlocal gotos.
+ * reload1.c (reload): If function has nonlocal label, mark all
+ caller-saved regs as used.
+
+Fri Apr 11 16:49:06 1997 Doug Evans <dje@seba.cygnus.com>
+
+ * m32r.h (REG_ALLOC_ORDER): Restore to original setting.
+
+ * m32r.h (UPPER16_P): Fix calculation.
+ * m32r.c (two_insn_const_operand): New function.
+ (m32r_print_operand): Handle 'X'.
+ * m32r.md (movsi): Tweak.
+ (*movsi_insn): Output hex value of constants too.
+ (movsi define_split): Add.
+ (andsi3,orsi3,xorsi3): Output hex value of constants too.
+
+Thu Apr 10 18:39:33 1997 Jim Wilson <wilson@cygnus.com>
+
+ * sh.md (sne): Modified to use negc instead of xor.
+ (sne+1): New define_split for new sne pattern.
+ * sh.c (output_stack_adjust): Reorganize code for readability.
+ If size is negative, negate and subtract it instead of adding it.
+
+Wed Apr 9 13:51:07 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.c (output_stack_adjust): When splitting an adjustment into two
+ parts, make sure the stack is aligned at all times.
+
+Tue Apr 8 12:34:38 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.h (RETURN_ADDR_RTX): Define.
+
+Mon Apr 7 19:19:57 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.c (count_tst_insns): New function.
+ (expand_prologue): Load zero into data and/or address registers
+ if any are free and the function has optimizable tst insns.
+ (output_tst): If a suitable register is known to have the
+ value zero, use it instead of searching for a suitable register.
+ * mn10300.h (zero_dreg, zero_areg): Declare.
+ (FRAME_POINTER_NEEDED): Frame pointers are not needed if the
+ outgoing argument size is zero.
+ * mn10300.md (movXX): Optimize loading zero into an address
+ register if possible. Optimize loading a DF/DI mode value
+ into an address register from a constant memory address.
+ (addsi3): Provide alternative which doesn't require a matching
+ inout operand.
+ (return): Optimize consecutive return instructions.
+
+Mon Apr 7 17:30:35 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * mips/iris5.h (SUBTARGET_CC1_SPEC): Define.
+ (LINK_SPEC, STARTFILE_SPEC): Support -static.
+ * mips/iris6.h (SUBTARGET_CC1_SPEC): Define.
+ (STARTFILE_SPEC, LINK_SPEC): Support -static.
+ * mips.h: (SUBTARGET_CC1_SPEC): Define.
+ (CC1_SPEC): Add subtarget_cc1_spec.
+ (EXTRA_SPECS): Add subtarget_cc1_spec.
+
+Sun Apr 6 12:24:53 1997 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ * arm.md (incscc): Use a match_operand with cc_register to match
+ the condition code register.
+ (decscc, *condbranch, *condbranch_reversed, *mov_scc): Likewise.
+ (*mov_negscc, *mov_notscc, *cond_return): Likewise.
+ (*cond_return_inverted, *ior_scc, *cond_move): Likewise.
+ (insv): New expand.
+ (andsi_notsi_si): Renamed from *andsi_notsi_si.
+ (andsi_not_shiftsi_si): New insn.
+ (*minmax_arithsi): Don't match this insn if operand1 is an
+ eliminable register.
+ ({sin,cos}*): Delete, since the ARM always emulates these its
+ faster to call a library function.
+ (movsicc, *movsicc_insn): Make operand0 an s_register_operand,
+ and operand3 an arm_not_operand. Use cc_register to match the
+ condition code register.
+ (mov[sd]fcc*): Make operand[0,2] s_register_operands, and operand3
+ the nonmemory_operand. Use cc_register to match the condition
+ code register.
+ (*ifcompare_plus_move): Move before *ifcompare_arith_move. Just do
+ a split for the output.
+ (*ifcompare_move_plus): Similarly, but relative
+ to *ifcompare_move_arith.
+ (*if_plus_move, *if_move_plus): New patterns.
+ (*ifcompare_arith_arith): Simplify the alternatives down to just one,
+ and split the insn before output.
+ (*if_arith_arith, *if_arith_move, *if_move_arith): New patterns.
+ (*ifcompare_move_not, *ifcompare_not_move): Simplify and split the
+ insn before output.
+ (*if_move_not, *if_not_move): New patterns.
+ (*ifcompare_shift_move, *ifcompare_move_shift): Simplify and split the
+ insn before output.
+ (*if_shift_move, *if_move_shift): New patterns.
+ (*ifcompare_shift_shift): Simplify and split the insn before output.
+ (*if_shift_shift): New pattern.
+ (*ifcompare_not_arith, *ifcompare_arith_not): Simplify and split the
+ insn before output.
+ (*if_not_arith, *if_arith_not): New patterns.
+ (*ifcompare_neg_move, *ifcompare_move_neg): Simplify and split the
+ insn before output.
+ (*if_neg_move, *if_move_neg): New patterns.
+
+Sat Apr 5 20:17:43 1997 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000/sol-ci.asm (_environ): Don't make _envrion a common
+ variable, the lastest assembler doesn't let common variables also
+ be a weak symbol.
+
+Fri Apr 4 18:30:12 1997 Jim Wilson <wilson@cygnus.com>
+
+ * rs6000.md (adddi3): Use non_short_cint_operand instead of
+ non_add_cint_operand.
+
+Thu Apr 3 15:08:39 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.c (can_use_return_insn): Add size of fixed stack space
+ for function calls into the size of the frame.
+ (expand_prologue, expand_epilogue): Likewise.
+ (initial_offset): Corresponding changes..
+ * mn10300.h (OUTGOING_REG_PARM_STACK_SPACE): No longer define.
+ (STACK_POINTER_OFFSET): Define.
+ * mn10300.md (call, call_value expanders): Don't adjust the stack
+ pointer here anymore.
+
+ * mn10300.md (ashlsi3): Remove some alternatives which are no longer
+ needed or desired.
+
+Thu Apr 3 15:06:53 1997 Jim Wilson <wilson@cygnus.com>
+
+ * local-alloc.c (no_conflict_p): Reject sequences with foreign insns.
+
+ * combine.c (move_deaths): Handle partial REG_DEAD note for
+ multi-reg hard register.
+
+ * function.c (expand_function_start): Emit queue after expanding
+ each dynamic parameter type.
+
+ * mips.c (mips_move_2words): Add SIGN_EXTEND support for SYMBOL_REF,
+ LABEL_REF, and CONST operands.
+
+ * dwarf2out.c: Delete comment referring to README.DWARF.
+
+Wed Apr 2 17:21:23 1997 Jim Wilson <wilson@cygnus.com>
+
+ * rs6000.md (ashrdi3_power): Mark alternative 0 as early_clobber
+ output.
+
+ * rs6000.md (abssi3_nopower define_split): Switch operands of MINUS.
+ (nabssi3_nopower define_split): Likewise.
+
+Tue Apr 1 19:30:01 1997 Mike Stump <mrs@cygnus.com>
+
+ * libgcc2.c (find_exception_table): Fix to logic to deal with
+ functions that are in their own section, such as template
+ instantiations, that cause overlapping EH tables.
+
+Tue Apr 1 17:16:22 1997 Jeffrey A Law (law@cygnus.com)
+
+ * Makefile.in (USER_H): Add va-mn10300.h
+
+ * ginclude/stdarg.h: Include va-mn10300.h.
+ * ginclude/varargs.h: Likewise.
+ * ginclude/va-mn10300.h: New file.
+ * mn10300.c (expand_prologue): If current_function_varargs is nonzero,
+ flush d0/d1 back into stack.
+ (mn10300_builtin_saveregs): New function.
+ (function_arg, function_arg_partial_nregs): New functions.
+ (initial_offset): Tweak now that the RP save area is allocated
+ and deallocated around each call again.
+ * mn10300.h (FIRST_PARM_OFFSET): Now 4.
+ (FRAME_POINTER_REQUIRED): Require frame pointer for all non-leaf fcns.
+ (REG_PARM_STACK_SPACE): Now 8 bytes.
+ (FUNCTION_ARG_REGNO_P): Update for new parameter passing conventions.
+ (CUMULATIVE_ARGS, INIT_CUMULATIVE_ARGS): Likewise.
+ (FUNCTION_ARG_ADVANCE, FUNCTION_ARG): Likewise.
+ (FUNCTION_ARG_PARTIAL_NREGS): Likewise.
+ (TRAMPOLINE_TEMPLATE): Don't clobber d0 anymore.
+ (TRAMPOLINE_SIZE, INITIALIZE_TRAMPOLINE): Corresponding changes.
+ (EXPAND_BUILTIN_SAVEREGS): Define.
+ * mn10300.md (call, call_value patterns): Allocate and deallocate
+ stack slot for return pointer around each call.
+
+ * mn10300.h (RTX_COSTS): Refine.
+ (CASE_VALUES_THRESHHOLD, NO_FUNCTION_CSE): Likewise.
+ * mn10300.c (output_tst): New function.
+ * mn10300.md (movdi, movdf): Improve code to load constants into regs.
+ (tst insns): Use output_tst to optimize some cases. Add versions to
+ encourage more zero extensions instead of sign extensions of HImode
+ and QImode values.
+ (divsi3, udivsi3): Remove patterns. Replaced by...
+ (divmodsi4, udivmodsi4): New expanders/patterns.
+ (andsi3): Optimize "and" operations with certain constants.
+
+Tue Apr 1 09:14:29 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.h: (ADJUST_COSTS): Define.
+
+Fri Mar 28 17:46:13 1997 Jim Wilson <wilson@cygnus.com>
+
+ * Makefile.in (LANGUAGES): Add gcov.
+ (OBJS): Add profile.o.
+ (STAGESTUFF): Add gcov.
+ (profile.o, gcov.o, gcov): Add rules to build them.
+ (install-common): Install gcov.
+ * combine.c (distribute_notes): Handle REG_BR_PROB and REG_EXEC_COUNT
+ REG_NOTES.
+ * sparc.h (OVERRIDE_OPTIONS): Check profile_arc_flag.
+ * final.c (LONG_TYPE_SIZE): Define.
+ (count_instrumented_arcs): New variable.
+ (end_final, profile_after_prologue, leaf_function_p): Add support
+ for profile_arc_flag.
+ (add_bb): Only call CC_STATUS_INIT if HAVE_cc0.
+ * flags.h (profile_arc_flag, flag_test_coverage,
+ flag_branch_probabilities): Declare.
+ * function.c (expand_function_end): Output NOTE_REPEATED_LINE_NUMBER
+ for last line of function.
+ * integrate.c (expand_inline_function): Output
+ NOTE_REPEATED_LINE_NUMBER after inlined call.
+ * jump.c (jump_optimize, follow_jumps, mark_jump_label): Disable some
+ optimizations when flag_test_coverage and there is a line number note
+ in the way.
+ (invert_jump): Add REG_BR_PROB when flag_branch_probabililties.
+ * libgcc2.c (__bb_exit_func): Support gcov style output.
+ * reorg.c (mostly_true_jump): Use REG_BR_PROB notes when
+ flag_branch_probabilities.
+ * rtl.c (note_insn_name): Add NOTE_REPEATED_LINE_NUMBER.
+ (reg_note_name): Add REG_BR_PROB and REG_EXEC_COUNT.
+ * rtl.h (enum reg_note): Add REG_BR_PROB and REG_EXEC_COUNT.
+ (REG_BR_PROB_BASE): Define.
+ (NOTE_REPEATED_LINE_NUMBER): Define.
+ * sched.c (update_flow_info): Handle REG_EXEC_COUNT and REG_BR_PROB
+ notes.
+ * toplev.c (branch_prob_dump, profile_arc_flag, flag_test_coverage,
+ flag_branch_probabilities, branch_prob_dump_file, branch_prob_time):
+ New variables.
+ (f_options): Add profile-arcs, test-coverage, and
+ branch-probabilities.
+ (compile_file): Set branch_prob_time. Pass flag_test_coverage to
+ init_emit_once. Handle branch_prob_dump. Call init_branch_prob.
+ Call end_branch_prob. Call output_func_start_profiler.
+ (rest_of_compilation): Handle branch_prob_dump. Call new
+ branch_prob pass.
+ (main): Set branch_prob_dump.
+ * gcov.c, profile.c, gcov-io.h, gcov.texi: New files.
+
+Thu Mar 27 16:52:52 1997 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.h (CPP_CPU_DEFAULT): Define if TARGET_CPU_DEFAULT is not set.
+ * i386.h (STACK_BOUNDARY): Define to always be 32.
+
+ From J"orn Rennecke <amylaar@cygnus.co.uk>
+ * i386.md: (zero_extendhisi2+[12]): Use true_regnum instead of
+ REGNO for operand 0.
+ (zero_extendqisi2+3): Use reg_overlap_mentioned_p instead of REGNO
+ comparison; use true_regnum instead of REGNO for rtx generation.
+
+Wed Mar 26 12:34:21 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * reload1.c (reload): Call reload_cse_regs.
+ (reg_values): New static variable.
+ (reload_cse_invalidate_regno): New static function.
+ (reload_cse_mem_conflict_p): New static function.
+ (reload_cse_invalidate_mem): New static function.
+ (reload_cse_invalidate_rtx): New static function.
+ (reload_cse_regs): New static function.
+ (reload_cse_regno_equal_p): New static function.
+ (reload_cse_noop_set_p): New static function.
+ (reload_cse_simplify_set): New static function.
+ (reload_cse_check_clobbered): New static variable.
+ (reload_cse_check_src): New static variable.
+ (reload_cse_check_clobber): New static function.
+ (reload_cse_record_set): New static function.
+
+Wed Mar 26 07:34:06 1997 Ulrich Drepper <drepper@cygnus.com>
+
+ * ginclude/stdarg.h (__va_copy): New definition.
+
+Tue Mar 25 13:43:36 1997 Michael Meissner <meissner@cygnus.com>
+
+ * gcc.c (init_spec): If -v, print out that the default spec values
+ were being used. Fix prototype to reflect no arguments.
+ (set_spec): If specs has not been set, set it up with the default
+ specs.
+ (read_specs): Move to later in the file so that startfile_prefixes
+ has been declared. Process "%include <file>" to include another
+ specs file, aborting if the file can't be found. Process
+ "%include_noerr <file>: to include another specs file, giving no
+ error if the file can't be found. Process "%rename var1 var2" to
+ rename a specs variable. Take new argument that indicates whether
+ we are processing the main file. Only process % commands if this
+ is not the main specs file. Change callers.
+ (main): Do not call init_spec if a specs file was found.
+ (set_spec,read_specs,do_spec_1): If DEBUG_SPECS is defined, print
+ debug information.
+
+Tue Mar 25 14:43:58 1997 Doug Evans <dje@cygnus.com>
+
+ * expr.c (emit_push_insn): Delete emission of CLOBBER
+ when doing partial push, no longer necessary.
+
+ * c-decl.c (grokdeclarator): Pedwarn qualified void function return
+ type.
+
+Tue Mar 25 14:28:15 1997 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ * reload.c (find_dummy_reload): New parameter earlyclobber. If set
+ then don't use IN for the reload if it also appears elsewhere in
+ the insn. All callers changed.
+
+Tue Mar 25 13:20:18 1997 J.T. Conklin <jtc@cygnus.com>
+
+ * m68k/lb1sf68.asm (udivsi3): Fix hunk from previous patch that
+ did not apply correctly.
+
+ * m68k.md (tablejump): Use extl to explicitly sign extend
+ index registeron TARGET_5200.
+ * m68k/{apollo68.h,coff.h,linux.h,mot3300.h,pbb.h}
+ (ASM_RETURN_CASE_JUMP): Likewise.
+
+ * m68k.md (mulsi3): Changed into define_expand. Split insn into
+ m68k and coldfire specific versions with appropriate constraints.
+
+ * m68k.md (movqi): Disable use of address registers for
+ TARGET_5200.
+
+ * m68k/lb1sf68.asm (__modsi3, __umodsi3): Use mulsl instruction
+ instead of __mulsi3 function call on the coldfire.
+
+ * m68k.md (bne0_di): Fix typo in last change.
+
+ * m68k.md (xorsi3_5200): Correct constraints.
+
+ * m68k.c (output_move_{si,hi,qi}mode): New functions.
+ * m68k.h (output_move_{si,hi,qi}mode): Declare.
+
+ * m68k.md (move{si,hi,qi,di}): Changed into define_expands. Split
+ insns into m68k and coldfire specific versions with appropriate
+ constraints.
+
+Tue Mar 25 12:18:41 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * Makefile.in (GCC_PASSES): Revert previous change; use cc1$(exeext).
+
+Mon Mar 24 16:12:20 1997 Doug Evans <dje@cygnus.com>
+
+ * m32r/*: New files.
+ * config.sub: Add m32r.
+ * configure: Add m32r.
+ * longlong.h: Add m32r support.
+ * ginclude/{stdarg.h,varargs.h}: Add m32r support.
+ * ginclude/va-m32r.h: New file.
+
+Mon Mar 24 15:53:15 1997 Joel Sherrill <joel@OARcorp.com>
+
+ * rs6000/rtems.h: Change to a near clone of the powerpc-eabi target.
+ * configure (powerpc*-*-rtems): Move before GNU/Linux configuration.
+
+Mon Mar 24 14:26:37 1997 Gavin Koch <gavin@cygnus.com>
+
+ * ginclude/va-mips.h: For little endian, eabi, objects
+ less than __va_reg_size are passed in registers.
+
+Fri Mar 21 00:48:02 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.c (print_operand): Handle 'N'.
+
+ * mn10300.c (expand_epilogue): Correctly handle functions
+ with large frames, but no callee register saves.
+
+ * mn1300.md (movdf, movdi): Handle overlapping moves.
+
+ * pa.c (compute_movstrsi_length): Handle residuals correctly.
+
+Thu Mar 20 13:53:30 1997 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.c (easy_fp_constant): If -mrelocatable, consider all fp
+ constants to be hard.
+
+Mon Mar 20 13:53:30 1997 Jim Wilson <wilson@cygnus.com>
+
+ * rs6000.md (movdf/movsf define_splits): Add SUBREG support.
+
+ * rs6000.c (fp_reg_or_mem_operand): Delete.
+ * rs6000.h (PREDICATE_CODES): Remove fp_reg_or_mem_operand.
+ (fp_reg_or_mem_operand): Delete declaration.
+ * rs6000.md (movsf_hardfloat): Use nonimmediate_operand instead
+ of fp_reg_or_mem_operand.
+
+Thu Mar 20 08:52:27 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.md (cmpsi): Handle comparing a register with
+ itself by adding zero to the reg. Z bit for such an insn is
+ inverted.
+ * mn10300.c (notice_update_cc): Handle CC_INVERT.
+
+ * pa.c (emit_move_sequence): Don't lose for a secondary reload
+ to the SAR register if the input is a MEM with an offset that won't
+ fit in 14bits.
+
+Wed Mar 19 17:10:44 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * m68k/linux.h (ASM_OUTPUT_MI_THUNK): Define.
+
+Wed Mar 19 16:59:34 1997 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c, cpplib.c (do_error, do_warning): Fix memory leak.
+
+ * cccp.c (output_line_directive): Do not output negative line
+ numbers when analyzing directives like `#line 0'.
+
+ * cexp.y (parse_number, yylex), cccp.c (rescan), cpplib.c
+ (cpp_get_token): Unless -lang-c89 is specified, allow C9X-style
+ hexadecimal floating-point numbers as preprocessor numbers.
+ * cccp.c (c89): New decl.
+ (main): Set it to 1 if -lang-c89.
+ * cpplib.h (struct cpp_options): New member c89.
+ (CPP_C89): New macro.
+ * cpplib.c (unsafe_chars): `p' is unsafe before `-' or `+', since it
+ might generate a C9X-style hexadecimal floating-point number.
+ (cpp_handle_options): Set c89 option to 1 if -lang-c89.
+
+Tue Mar 18 17:05:57 1997 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.h (STACK_BOUNDARY): Determine according to TARGET_ALIGN_DOUBLE.
+
+ * i386.c (override_options) Make the default alignment 4 for 486,
+ otherwise 2.
+
+ * i386/freebsd-elf.h (CPP_SPEC): Remove TARGET_CPU_DEFAULT reference.
+ * i386/linux{,-aout,-oldld}.h (CPP_SPEC): Likewise.
+
+ * i386/go32.h (DBX_DEBUGGING_INFO, PREFERRED_DEBUGGING_TYPE,
+ NO_STAB_H, ASM_FILE_START, DBX_BLOCKS_FUNCTION_RELATIVE,
+ DBX_FUNCTION_FIRST, DBX_OUTPUT_MAIN_SOURCE_FILE_END,
+ ASM_OUTPUT_SOURCE_LINE): Added to support stabs.
+ (ASM_OUTPUT_SECTION_NAME): Support section attribute.
+
+Tue Mar 18 16:12:28 1997 Jim Wilson <wilson@cygnus.com>
+
+ * final.c (shorten_branches): Split all insns before computing insn
+ lengths.
+ (final_scan_insn, case default): If HAVE_ATTR_length defined, call
+ abort for any insn that has a '#' output template.
+
+ * expr.c (emit_group_load): Call operand_subword instead of creating
+ an explicit SUBREG.
+
+ * reload1.c (reload_reg_free_before_p, case
+ RELOAD_FOR_OPERAND_ADDRESS): Conflicts with RELOAD_FOR_OPADDR_ADDR
+ reloads.
+
+ * configure (alpha-dec-osf[23456789]*): Use install-headers-cpio
+ for osf4.
+
+ * gcc.c (init_spec): Delete parameter. Always initialize extra_specs.
+ (process_command, main): Change all callers.
+
+ * combine.c (if_then_else_cond): Call copy_rtx to prevent sharing.
+
+Tue Mar 18 14:59:12 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * function.c (assign_parms): Add a REG_EQUIV note to the
+ instruction which copies a parameter into a pseudo-register
+ whenever there is an associated stack slot, even if the parameter
+ actually arrived in a register.
+
+Tue Mar 18 14:24:48 1997 Doug Evans <dje@cygnus.com>
+
+ * configure (alpha-dec-osf[23]): Separate osf[23] case.
+ * alpha.h (LIB_SPEC): -lprof1 requires -lpdf for OSF 4.
+ * alpha/osf2or3.h: New file.
+
+Tue Mar 18 11:32:10 1997 Jeffrey A Law (law@cygnus.com)
+
+ * m68k.c (m68k_last_compare_had_fp_operands): New variable.
+ * m68k.h (m68k_last_compare_had_fp_operands): Declare it.
+ * m68k.md (tst*, cmp*): Turn into define_expand/define_insn pairs.
+ Keep track of whether test/compare has fp operands.
+ (seq, sne, sgt, slt, sge, sle): Turn into define_expand/define_insn
+ pairs. Make expanders FAIL if TARGET_68060 and last comparison/test
+ had fp operands.
+
+Tue Mar 18 04:29:29 1997 Richard Earnshaw <rearnsha@armltd.co.uk>
+
+ * arm.md (movhi): Handle generation of large constants during
+ and after reload.
+
+Mon Mar 17 17:30:24 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * gmicro.h (RETURN_POPS_ARGS): Make sure FUNDECL is non-nil
+ before we try to use it.
+ * m68k.h (RETURN_POPS_ARGS): Likewise.
+ * ns32k.h (RETURN_POPS_ARGS): Likewise.
+ * pyr.h (RETURN_POPS_ARGS): Likewise.
+
+Mon Mar 17 17:13:44 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * stor-layout.c (layout_record, PCC_BITFIELD_TYPE_MATTERS):
+ Only add padding if a bit field would otherwise span more units
+ of alignment than its base type.
+
+Mon Mar 17 17:03:55 1997 J.T. Conklin <jtc@cygnus.com>
+
+ * m68k.md (beq0_di, bne0_di, bge0_di, blt0_di): Use cmpw #0
+ instead of tstl when testing address registers on the 68000.
+
+ * m68k/lb1sf68.asm: Fix prologues/epilogues to deal with the lack
+ of predecrement/postincrement addressing modes in the coldfire
+ moveml instruction.
+
+Mon Mar 17 17:00:14 1997 Scott Christley <scottc@net-community.com>
+
+ * Fix long standing bug where first method call for a class could
+ result in a garbled stack or produce an incorrect return value.
+ * objc/sendmsg.c (__objc_block_return): Remove function.
+ (__objc_word_return, __objc_double_return): Remove functions.
+ (__objc_get_forward_imp): New function.
+ (__objc_init_dispatch_tables): Install zero instead of
+ __objc_init_install_dtable.
+ (__objc_init_install_dtable): No longer call the method but
+ allow objc_msg_lookup return it for normal execution.
+ (obj_msg_lookup): Differentiate between when a method isn't
+ implemented and when the dispatch table needs to be installed.
+ Return the IMP when the dispatch table is installed versus
+ having __objc_init_install_dtable call it.
+ (get_imp): Install dispatch table if needed and return IMP
+ from the newly installed dispatch table.
+ (__objc_responds_to): Install dispatch table if needed before
+ checking if method is implemented.
+
+Mon Mar 17 16:29:38 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * tree.c (build_{index,range}_type): Ensure expressions for min
+ and max value are in same obstack as type.
+
+Mon Mar 17 15:44:18 1997 Pat Rankin <rankin@eql.caltech.edu>
+
+ * cccp.c [#if VMS] (O_RDONLY, O_WRONLY): Delete (redundant).
+ (BSTRING): Delete (obsolete; usage occurs prior to definition).
+ (do_include): Handle old VAX C style includes better.
+
+Mon Mar 17 13:46:47 1997 Paul Eggert <eggert@twinsun.com>
+
+ * cexp.y, cppexp.c (parse_number): Invalid integer constants are
+ errors if pedantic.
+ * cexp.y (yylex): Invalid multibyte characters are errors if pedantic.
+ * cppexp.c (cpp_lex): Likewise.
+ * cppexp.c (cpp_parse_escape): Character constants that do not fit are
+ errors if pedantic.
+
+ * c-parse.in (expr_no_commas): Do not store temporary
+ skip_evaluation increments on yacc value stack.
+
+Sun Mar 16 19:54:49 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * expr.c (expand_expr, case PLACEHOLDER_EXPR): Refine which
+ object is picked.
+
+Sun Mar 16 15:45:45 1997 Jeffrey A Law (law@cygnus.com)
+
+ * loop.c (strength_reduce): Adjust BENEFIT appropriately if an
+ autoincrement memory reference will eliminate add insns.
+
+Sun Mar 16 08:41:40 1997 Scott Christley <scottc@net-community.com>
+
+ * i386.md (untyped_call): Re-enable code.
+ * objc/sendmsg.c (__objc_block_return): New function.
+ (__objc_word_return, __objc_double_return): New functions.
+ (__objc_init_install_dtable): Call appropriate return function
+ based upon method type.
+ * objc/thr-pthreads.c: Correct include path.
+
+Sat Mar 15 07:58:33 1997 Scott Christley <scottc@net-community.com>
+
+ * objc-act.c (OBJC_VERSION): Increment version.
+ * objc/init.c (OBJC_VERSION): Likewise.
+
+Sat Mar 15 07:58:00 1997 Ovidiu Predescu <ovidiu@net-community.com>
+
+ * Implement +load.
+ * objc/init.c (objc_send_load, __objc_send_load): New functions.
+ (__objc_send_message_in_list): New function.
+ (__objc_force_linking): New function.
+ (__objc_exec_class): Don't call _objc_load_callback here.
+ * objc/linking.m: New file.
+ * objc/sendmsg.c (class_add_method_list): Check for the +load method
+ when adding a methods list to a class.
+ * objc/Makefile (OBJC_O): Add linking.m.
+
+ * Allow methods defined in categories to override methods that are
+ defined in the class implementation.
+ * objc/sendmsg.c (__objc_install_methods_in_dtable): New function.
+ (class_add_method_list): Don't check anymore for duplicate methods.
+
+ * config/nextstep.h (INCLUDE_DEFAULTS): Define to something useful
+ when cross-compiling.
+
+ * The static instances list moved from the objc_module struct to
+ objc_symtab struct, at the end of defs array. This now allows the NeXT
+ gdb to work with binaries generated for the GNU ObjC runtime.
+ * objc-act.c (build_objc_symtab_template): Make sure
+ defs in objc_symtab is a NULL terminated array.
+ (init_def_list): Attach statics to end of def list.
+ (init_objc_symtab): Take statics list into account.
+ (init_module_descriptor, build_module_descriptor): Don't add statics.
+ (generate_static_references): Indicate that statics are used.
+ (finish_objc): Process statics in the beginning.
+ * objc/objc-api.h (objc_module): Eliminate statics variable.
+ * objc/init.c (__objc_exec_class): Access statics from their
+ new place in the defs variable.
+
+Sat Mar 15 07:29:15 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * reload.c: Include expr.h.
+ (find_reloads_address, find_reloads_address_1): New argument INSN.
+ (find_reloads_address_1): Reload inside of p{re,ost}_{in,de}c
+ instead of entire p{re,ost}_{in,de}c where appropriate.
+ * Makefile.in (reload.o): Added expr.h to dependencies list.
+
+Sat Mar 15 07:17:12 1997 Richard Henderson <rth@tamu.edu>
+
+ * reload.h (eliminate_regs): Add STORING arg.
+ * reload1.c (eliminate_regs): Likewise.
+ (eliminate_regs, case SET): Pass that we are storing to recursive call.
+ (eliminate_regs, case SUBREG): If storing and same number of words,
+ use larger mode.
+ * caller-save.c, dbxout.c, dwarfout.c, dwarf2out.c, reload.c, sdbout.c:
+ Change all calls to eliminate_regs.
+
+Fri Mar 14 14:18:49 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * cplus-dem.c: Add prototypes for all static functions.
+ (mystrstr): Make static. Make arguments and result const.
+ (cplus_match): Remove; not used.
+
+Fri Mar 14 10:15:35 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.c (const_costs): Remove unused function.
+ * mn10300.h (CONST_COSTS): Rework to generate better code.
+
+ * mn10300.c (print_operand): Handle 'H' and 'L' output
+ modifers for high/low part of a 64bit value.
+ * mn10300.h (CONST_DOUBLE_OK_FOR_LETTER_P): Handle 'G'
+ (LEGITIMATE_CONSTANT_P): Allow any constant.
+ * mn10300.md (movdi, movdf): Implement.
+ (adddi3, subdi3): New expanders and patterns.
+
+ * mn10300.c (print_operand): Handle 'A' modifier for an
+ address which can't be simple register indirect.
+ * mn10300.h (EXTRA_CONSTRAINT): Handle 'R' for bit ops.
+ * mn10300.md: Add patterns to test, set and clear bitfields.
+
+ * mn10300.c (can_use_return_insn): New function.
+ (expand_epilogue): Emit a RETURN insn if possible.
+ * mn10300.md (return): New pattern.
+
+ * mn10300.h (CONST_OK_FOR_LETTER_P): Handle 'N'.
+ * mn10300.md (andsi3): Catch "and 255,dn" and "and 65535,dn"
+ which were not turned into zero_extend patterns.
+
+ * mn10300.h (GO_IF_LEGITIMATE_ADDRESS): Handle symbolic
+ constant as an index/base too.
+
+ * mn10300.md (movsi): Allow SP to be loaded/saved with
+ reg+d8 addresses.
+
+ * mn10300.md (cmpsi): Allow second operand to be a constant.
+ (subsi3): Likewise.
+
+ * mn10300.md (sign extension patterns): Fix thinko when
+ extending from memory.
+
+ * mn10300.md (tst peepholes): Add peepholes for test/branch
+ based on N bit being set/clear and the data value being tested dies.
+
+Tue Mar 11 17:07:51 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.c (expand_prologue): Rework so that eliminating
+ the frame pointer produces faster/smaller code.
+ (expand_epilogue): Likewise.
+ (initial_offset): New function for argument pointer and frame pointer
+ elimination.
+ * mn10300.h (FIRST_PSEUDO_REGISTER): Bump to 10.
+ (FIXED_REGISTERS): Add argument pointer register, it's a fake fixed
+ register.
+ (CALL_USED_REGISTERS, REG_ALLOC_ORDER): Corresponding changes.
+ (REGNO_REG_CLASS, REG_CLASS_CONTENTS): Likewise.
+ (REG_OK_FOR_BASE_P, REGISTER_NAMES): Likewise.
+ (reg_class, REG_CLASS_NAMES): Delete unwanted DATA_OR_SP_REGS class.
+ (PREFERRED_OUTPUT_RELOAD_CLASS): Define.
+ (FIRST_PARM_OFFSET): No longer include register save area in
+ computation.
+ (STACK_POINTER_REGNUM): Is now register 9.
+ (ARG_POINTER_REGNUM): Is now register 8.
+ (FRAME_POINTER_REQUIRED): Refine.
+ (ELIMINABLE_REGS, INITIAL_ELIMINATION_OFFSET): Define.
+ (CAN_DEUG_WITHOUT_FP): Define.
+ * mn10300.md (return_internal): Break into two patterns.
+
+ * mn10300.h (CONST_OK_FOR_LETTER_P): Handle 'M' too.
+ (REGISTER_MOVE_COST): Fix errors and refine.
+
+ * mn10300.c (notice_update_cc): SET_ZN_C0 insns leave the
+ overflow bit in an unuseable state. Rename CC_SET to CC_TST.
+ * mn10300.md (cc attributes): "set" is gone, replaced by
+ "tst". Update attributes on various insns.
+
+ * mn10300.md: Improve sign and zero extension instructions.
+ (ashlsi3): Improve. Handle address registers too.
+ (add peephole): Combine two consecutive adjustments of a register
+ into a single adjustment.
+
+Tue Mar 11 17:18:40 1997 Brendan Kehoe <brendan@melange.gnu.ai.mit.edu>
+
+ * cplus-dem.c (gnu_special): Call demangled_fund_type for other
+ __t* symbols.
+
+Mon Mar 10 16:10:34 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * emit-rtl.c (subreg_lowpart_p): Return 0 if SUBREG_REG is VOIDmode.
+ * combine.c (simplify_rtx, case SUBREG): Fix direction of test when
+ calling operand_subword; use inline code intead of subreg_lowpart_p.
+
+Fri Mar 7 09:22:28 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.c (expand_{pro,epi}logue): Rework to avoid
+ unnecessary "add" operations.
+ (expand_epilogue): Likewise.
+ * mn10300.h (STARTING_FRAME_OFFSET): Is zero after the last
+ round of prologue/epilogue changes.
+ (FIRST_PARM_OFFSET): Is now 16 (-4 for REG_PARM_STACK_SPACE + 20 for
+ register save area).
+ (REG_PARM_STACK_SPACE): Define as 4 bytes.
+ (OUTGOING_REG_PARM_STACK_SPACE): Define so caller allocates it.
+ * mn10300.md (call{,_value} expander): Don't emit insns to adjust the
+ stack here anymore.
+
+ * mn10300.md (bCC patterns): Just use "bCC target".
+
+Tue Mar 4 13:21:41 1997 Jim Wilson <wilson@cygnus.com>
+
+ * rs6000.md (movsi): Don't emit a USE insn for LABEL_REFs.
+
+Thu Mar 6 16:29:13 1997 Jim Wilson <wilson@cygnus.com>
+
+ * dwarf2out.c (modified_type_die): Initialize item_type to NULL.
+ Move equate_type_number_to_die call before use of sub_die, and move
+ recursive modified_type_die calls on item_type after it.
+
+ * dwarfout.c (root_type_1, write_modifier_bytes_1): New functions.
+ (root_type): Call root_type_1.
+ (write_modifier_bytes): Call write_modifier_bytes_1.
+ (output_type, case POINTER_TYPE): Set TREE_ASM_WRITTEN before
+ recursive call.
+
+Wed Mar 5 14:30:49 1997 Torbjorn Granlund <tege@quiet.matematik.su.se>
+
+ Partially undo Jan 11 changes (nor takes only register ops):
+ * mips.md (*norsi3_const, *nordi3_const): Delete bogus patterns.
+ * mips.c (complemented_arith_operand): Delete function.
+ (print_operand): Don't handle `e' for CONST_INT.
+ * mips.h (PREDICATE_CODES): Delete complemented_arith_operand.
+
+Tue Mar 4 16:38:13 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * i386.c (i386_return_pops_args): Make sure FUNDECL is non-nil
+ before we try to use it.
+ * i386/{isc,next,sco,sco5,scodbx}.h (RETURN_POPS_ARGS): Likewise.
+
+Mon Mar 3 20:17:54 1997 Gavin Koch <gavin@cygnus.com>
+
+ * ginclude/va-mips.h: __mips_single_float should have
+ the same effect on vararg lists as __mips_soft_float.
+
+Mon Mar 3 18:12:01 1997 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.h (DBX_CONTIN_LENGTH): Undo 2/26 change.
+
+Mon Mar 3 13:08:20 1997 Jeffrey A Law (law@cygnus.com)
+
+ * combine.c (simplify_rtx): Do nothing with (truncate:mode) if
+ mode is a partial integer mode.
+
+Sun Mar 2 17:41:18 1997 Ulrich Drepper <drepper@cygnus.com>
+
+ * ginclude/varargs.h: Add definition of __va_copy.
+ * va-alpha.h, va-clipper.h, va-h8300.h, va-i860.h: Likewise.
+ * va-i960.h, va-m88k.h, va-mips.h, va-pa.h, va-ppc.h: Likewise.
+ * va-sh.h, va-sparc.h, va-spur.h: Likewise.
+
+Sun Mar 2 13:25:49 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-typeck.c (process_init_element): Warn and truncate if upper
+ bound of index is out of range.
+
+Fri Feb 28 16:08:47 1997 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000/sol-c0.c (_start): Disable loading up r13 and r2 with the
+ SDA base registers for now.
+
+ * rs6000.md (movsi): Emit a USE insn when putting the
+ label of constants into the TOC, so that the constant is still
+ emitted when expensive optimizations are used.
+
+Thu Feb 27 17:54:42 1997 Karl Heuer <kwzh@gnu.ai.mit.edu>
+
+ * fixinc.ptx: Fix sed expression looking for <sys/types.h> in pwd.h.
+
+Thu Feb 27 12:11:16 1997 Dennis Glatting <dennis.glatting@plaintalk.bellevue.wa.us>
+
+ * fixincludes: Remove more cases of __const__ from math.h on NeXT.
+
+Wed Feb 26 14:52:27 1997 Michael Meissner <meissner@cygnus.com>
+
+ * reload.c (debug_reload): Remove extra argument to fprintf.
+ * rs6000.c (output_toc): Make fprintf calls type correct.
+
+ * rs6000.h (DBX_CONTIN_LENGTH): Define as 4000 to avoid AIX
+ assembler line limit.
+
+Mon Feb 24 17:56:17 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * fixincludes: Fix need of prototypes for C++ in rpc/xdr.h on SunOS4.
+
+Mon Feb 24 17:33:57 1997 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000/xm-sysv4.h (HAVE_STRERROR): Define.
+
+Sun Feb 23 17:18:28 1997 Jim Wilson <wilson@cygnus.com>
+
+ * rs6000.md (floatsidf2_loadaddr): Correct syntax for cau instruction.
+ (load_multiple, store_multiple): Call change_address instead of
+ creating MEM from scratch.
+
+Thu Feb 20 16:39:15 1997 Jim Wilson <wilson@cygnus.com>
+
+ * unroll.c (unroll_loop): Add check for naive loop that ends with
+ conditional branch that does not branch back to loop start.
+
+ * reload1.c (reload): Move assign_stack_local call into main loop.
+
+Thu Feb 20 11:40:46 1997 Jeffrey A Law (law@cygnus.com)
+
+ * pa.md (zero extension patterns): Turn into define_expand and
+ define_insn pair.
+
+Wed Feb 19 17:05:38 1997 Jeffrey A Law (law@cygnus.com)
+
+ * pa.c (emit_move_sequence): Don't copy 0.0 (double precision)
+ directly to memory, go through a reg if reload hasn't started.
+ * pa.md (main movdf pattern): Don't allow 0.0 (double precision)
+ to be copied directly to memory.
+
+ * pa/pa-hpux10.h (MD_EXEC_PREFIX): Define appropriately for hpux10.
+ (MD_STARTFILE_PREFIX): Similarly.
+
+ * pa.h (ASM_OUTPUT_SECTION_NAME): Surround the section name
+ with '$' if not using GAS.
+
+Wed Feb 19 16:43:47 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sched.c (schedule_insns): If there was no first scheduling pass,
+ split instructions after reload.
+ (update_flow_info): Tolerate some idiosyncrasies after reload.
+
+Wed Feb 19 11:13:51 1997 Jeffrey A Law (law@cygnus.com)
+
+ * combine.c (find_split_point): Don't turn a SIGN_EXTEND into
+ a series of shifts if either mode is a partial integer mode.
+
+Mon Feb 17 08:06:02 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.c ({,non_}short_cint_operand): Use (unsigned HOST_WIDE_INT).
+ (non_add_cint_operand, includes_rshift_p): Likewise.
+ * rs6000.h (CONST_OK_FOR_LETTER_P): Likewise.
+ (LEGITIMATE_ADDRESS_INTEGER_P, LEGITIMIZE_ADDRESS): Likewise.
+
+Sun Feb 16 07:55:19 1997 J"orn Rennecke (amylaar@cygnus.co.uk)
+
+ * libgcc2.c (__negdi2, __lshrdi3, __ashldi3, __ashrdi3, __ffsdi2):
+ Use ANSI style definition with full prototype.
+ (__muldi3, __udiv_w_sdiv, __udivmoddi4, __divdi3, __moddi3) : Likewise.
+ (__udivmoddi4, __udivdi3, __cmpdi2, __ucmpdi2) : Likewise.
+ (__fixunstfdi, __fixtfdi, __fixunsxfdi, __fixxfdi) : Likewise.
+ (__fixunsdfdi, __fixdfdi, __floatdixf, __floatditf) : Likewise.
+ (__floatdidf, __floatdisf, __fixunsxfsi, __fixunsdfsi) : Likewise.
+ (__gcc_bcmp, __eprintf, gopen, gclose, __bb_init_file) : Likewise.
+ (__bb_init_trace_func, __clear_cache, mprotect) : Likewise.
+ (__enable_execute_stack, cacheflush, exit) : Likewise.
+ (find_exception_table, __find_first_exception_table_match) : Likewise.
+
+Sun Feb 16 07:52:02 1997 Oliver Kellogg (oliver.kellogg@space.otn.dasa.de)
+
+ * 1750a.md (mulqihi3): Corrected.
+ (tst{hf,tqf}): Simplified.
+ (movqi): Removed redundant alternative.
+ (addqi-3,addqi-2,addqi-1): Set/Reset Bit patterns by C. Nettleton.
+ (many patterns): Introduced operand output modifiers d,t,b,B,w.
+ * 1750a.c (print_operand): New operand output modifiers d,t,b,B,w.
+ (simple_memory_operand): Removed.
+ (one_bit_set_p, which_bit): Added from C. Nettleton's m1750 config.
+
+Sun Feb 16 07:43:37 1997 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (special_symbol): Don't treat "L" in "L'...'" as identifier.
+ (check_macro_name, collect_expansion, rescan): Likewise.
+ * cpplib.c (special_symbol, check_macro_name, collect_expansion):
+ Likewise.
+
+ * cexp.y (parse_c_expression): Don't check for null lexptr
+ or *lexptr == 0. If yyparse returns nonzero value, abort.
+
+ * cexp.y (yylex): Use is_space, not is_hor_space, to find keyword end.
+ (is_space): New decl.
+ (is_hor_space): Removed.
+ * cccp.c (is_space): Now external.
+ (is_hor_space): Now static.
+
+Sun Feb 16 04:55:11 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * toplev.c, tree.h (decl_printable_name): Change arguments.
+ * c-common.c (declare_function_name): Reflect above change.
+ * final.c (final_start_function): Likewise.
+ * function.c (init_function_start): Likewise.
+ * toplev.c (decl_name): Likewise.
+ (announce_function): Likewise.
+ (v_message_with_decl): Likewise.
+ * dwarf2out.c (dwarf2_name): New fn, uses decl_printable_name.
+ (add_pubname): Use it.
+ (add_name_and_src_coords_attributes): Use it, add
+ DW_AT_MIPS_linkage_name if appropriate.
+ (output_aranges): Use DW_AT_MIPS_linkage_name if present.
+
+Sat Feb 15 18:45:30 1997 J.T. Conklin <jtc@cygnus.com>
+
+ * m68k.md (cmpsi): Added insn with appropriate constraints for
+ TARGET_5200; changed condition of existing insn to !TARGET_5200.
+
+Sat Feb 15 18:26:50 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * m68k/hp320.h (PRINT_OPERAND_FLOAT): Removed.
+ (ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}_OPERAND): Defined.
+ (PRINT_OPERAND): Turned off: use default.
+ * m68k/news.h (PRINT_OPERAND): Turned off: use default.
+ (ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}_OPERAND): Defined.
+ * m68k/tower-as.h (PRINT_OPERAND): Turned off: use default.
+ (ASM_OUTPUT_{FLOAT,DOUBLE}_OPERAND): Defined.
+ * m68k/crds.h (PRINT_OPERAND): Turned off: use default.
+ (ASM_OUTPUT_{FLOAT,DOUBLE}_OPERAND): Defined.
+ (SGS_NO_LI,STRUCTURE_SIZE_BOUNDARY,IMMEDIATE_PREFIX): Defined.
+ (NEED_PROBE): Defined instead of HAVE_probe and gen_probe.
+ (FUNCTION_{PRO,EPI}LOGUE): Do not access FPA registers.
+ * m68k.c (output_function_prologue): Add CRDS and MOTOROLA probe code.
+ (print_operand): Do not output '.' if CRDS.
+
+ * gcc.c (set_spec): Fix comment-in-comment typo.
+
+Sat Feb 15 17:54:23 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * Makefile.in (COMPILERS): Moved before GCC_PASSES.
+ (GCC_PASSES): Use $(COMPILERS) instead of cc1$(exeext).
+
+Sat Feb 15 17:25:44 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * gcc.c (process_command): Allocate space for terminating null.
+
+Sat Feb 15 17:21:34 1997 Pat Rankin <rankin@eql.caltech.edu>
+
+ * vax.h (FUNCTION_PROLOGUE): Adjust size by STARTING_FRAME_OFFSET.
+ * vax/vms.h (FUNCTION_PROLOGUE): Delete.
+
+Sat Feb 15 08:48:14 1997 Douglas B. Rupp (rupp@gnat.com)
+
+ * configure: Fix setting of CC in no-symlink case.
+
+Sat Feb 15 08:42:17 1997 Oliver Kellogg (oliver.kellogg@space.otn.dasa.de)
+
+ * expmed.c (expand_divmod): Prefer divmod in same mode over div
+ in wider mode.
+
+Sat Feb 15 08:27:50 1997 J"orn Rennecke (amylaar@cygnus.co.uk)
+
+ * fold-const.c (fold): Don't assume a nonexplicit constant cannot
+ equal an explicit one.
+
+ * i386.md (zero_extendqi[hs]i2+3): Ensure operating on REG.
+
+Sat Feb 15 08:11:04 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * configure (i[3456]86-*-solaris2*): Correct tm.h filename in
+ stabs case.
+
+ * a29k.h (STORE_FLAG_VALUE): Write so works on both 32 and 64-bit host.
+
+Fri Feb 14 16:03:37 1997 Robert Lipe <robertl@dgii.com>
+
+ * i386/t-sco5 (libgcc{1,2}-elf.a): correct target dependencies.
+
+Fri Feb 14 16:00:23 1997 H.J. Lu <hjl@gnu.ai.mit.edu>
+
+ * config/svr4.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Set
+ current-section variable to text.
+
+Wed Feb 12 16:07:34 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * fixinc.irix: New file.
+ * configure (mips-sgi-irix[56]): Set fixincludes to fixinc.irix.
+
+Wed Feb 12 15:40:20 1997 Jim Wilson <wilson@cygnus.com>
+
+ * Makefile.in (LIBGCC2_DEBUG_CFLAGS): New macro.
+ (LIBGCC2_CFLAGS): Use it.
+
+ * dwarfout.c (output_type): Do early exit only if TYPE_CONTEXT is NULL
+ or if TYPE_CONTEXT is another type (e.g. a nested type).
+
+Tue Feb 11 15:53:51 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.c (calc_live_regs): Exclude RETURN_ADDRESS_POINTER_REGNUM.
+ Need not save MACL/MACH when not live or in leaf function.
+
+Mon Feb 10 14:46:32 1997 Jeffrey A Law (law@cygnus.com)
+
+ * stmt.c (group_case_nodes): Recognize more opportunities to
+ group case nodes.
+
+Sun Feb 9 14:05:48 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (assign_stack_temp): Clear MEM flags from reuse.
+
+Sat Feb 8 17:37:47 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * local-alloc.c (update_equiv_regs): Fix error in last change.
+
+Fri Feb 7 12:42:34 1997 Mike Stump <mrs@cygnus.com>
+
+ * pa.h (RETURN_ADDR_RTX): Fix to ignore export stubs.
+ * pa.c (return_addr_rtx): Define.
+
+Fri Feb 7 13:56:56 1997 Doug Evans <dje@cygnus.com>
+
+ * cse.c (invalidate_from_clobbers): Delete unnecessary test for
+ (clobber nil).
+
+ * toplev.c (main): Delete redundant settings of flag_no_inline
+ and warn_inline if not optimizating.
+
+Fri Feb 7 10:45:02 1997 Jeffrey A Law (law@cygnus.com)
+
+ * Makefile.in (stmp-multilib-sub): Add missing "else true"
+ clauses to work around make bug on some systems.
+
+Fri Feb 7 08:19:43 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (const_binop): Don't call size_int if low < 0.
+
+ * function.c (instantiate_virtual_regs_1, case USE, CLOBBER):
+ Fix error in last change.
+
+Thu Feb 6 17:09:17 1997 Mike Stump <mrs@cygnus.com>
+
+ * except.c (find_exception_handler_labels): Initialize label array
+ with zeroes.
+
+Wed Feb 5 22:11:55 1997 Jeffrey A Law (law@cygnus.com)
+
+ * pa.md (post_ldwm): Fix typos.
+
+Wed Feb 5 15:57:42 1997 Doug Evans <dje@cygnus.com>
+
+ * m68k/vxm68k.h (WCHAR_TYPE,WCHAR_TYPE_SIZE,SIZE_TYPE): Fix.
+ (PTRDIFF_TYPE): Define.
+
+Wed Feb 5 11:19:13 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * reload1.c (alter_reg): Don't ask assign_stack_local to round up
+ to a multiple of BIGGEST_ALIGNMENT, unless a register appears in a
+ paradoxical subreg.
+
+Tue Feb 4 19:29:40 1997 Jim Wilson <wilson@cygnus.com>
+
+ * reload.c (find_reloads_address_1, case POST_INC): Don't use
+ ADDR_TYPE here.
+
+Tue Feb 4 12:33:45 1997 Jeffrey A Law (law@cygnus.com)
+
+ * flow.c (life_analysis): Delete obvious no-op moves
+ which use SUBREGs.
+
+Mon Feb 3 20:00:35 1997 Jim Wilson <wilson@cygnus.com>
+
+ * jump.c (find_cross_jump): Don't allow old-style and volatile asms
+ to match.
+
+Mon Feb 3 15:51:31 1997 Doug Evans <dje@cygnus.com>
+
+ * sparc/sol2.h (ASM_SHORT,ASM_LONG): Set to .uahalf/.uaword.
+ * sparc/sysv4.h (ASM_LONG): Define.
+ (ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}): Use ASM_LONG.
+
+Mon Feb 3 13:01:46 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * reload.h (enum reload_type): Add RELOAD_FOR_INPADDR_ADDRESS and
+ RELOAD_FOR_OUTADDR_ADDRESS.
+ * reload.c (ADDR_TYPE): New macro.
+ (push_secondary_reload): Check for new reload types.
+ (combine_reloads): Likewise.
+ (find_reloads): Likewise. Convert INPADDR_ADDRESS and
+ OUTADDR_ADDRESS to OPADDR_ADDR. Check OPADDR_ADDR when looking
+ for merges.
+ (find_reloads_address): When reloading an address, use the
+ ADDR_TYPE macro to get the type of the new reload.
+ (find_reloads_address_1): Likewise.
+ (reload_when_needed_name): Add new reload types.
+ * reload1.c (reload): Add in_addr_addr and out_addr_addr fields to
+ insn_needs struct. Use them for new reload types, and when
+ computing in_max and out_max.
+ (reg_used_in_inpaddr_addr): New static array.
+ (reg_used_in_outaddr_addr): New static array.
+ (mark_reload_reg_in_use): Handle new reload types.
+ (clear_reload_reg_in_use, reload_reg_free_p): Likewise.
+ (reload_reg_free_before_p, reload_reg_reaches_end_p): Likewise.
+ (reloads_conflict, merge_assigned_reloads): Likewise.
+ (emit_reload_insns): Likewise.
+ (choose_reload_regs): Save arrays for new reload types.
+
+Sun Feb 2 19:43:17 1997 Scott Christley <scottc@net-community.com>
+
+ * objc/selector.c (__sel_register_typed_name): Eliminate compiler
+ warnings with explicit cast.
+
+ * Add condition mutex support to the objc runtime.
+ * objc/thr-mach.c (objc_condition_{,de}allocate): New functions.
+ (objc_condition_{wait,broadcast,signal}): New functions.
+ * objc/thr-pthreads.c (objc_condition_{,de}allocate): New functions.
+ (objc_condition_{wait,broadcast,signal}): New functions.
+ * objc/thr-solaris.c (objc_condition_{,de}allocate): New functions.
+ (objc_condition_{wait,broadcast,signal}): New functions.
+ * objc/thr.h: Prototypes for new functions.
+
+ * objc/init.c (__objc_runtime_mutex): Eliminate leading underscore
+ from name of objc mutex and thread structures.
+ * objc/runtime.h: Likewise.
+ * objc/thr-{decosf1,irix,mach,os2,posix,pthreads,single}.c: Likewise.
+ * objc/thr-{solaris,win32}.c: Likewise.
+ * objc/thr.{c,h}: Likewise.
+
+ * Major reorganization of objc error handling.
+ * objc/Object.m (-error:): Call objc_error function instead of
+ using function pointer.
+ * objc/archive.c: Replace call to abort or __objc_fatal functions
+ with call to objc_error function throughout the complete file.
+ * objc/class.c (objc_get_class): Replace call to abort function
+ with call to objc_error function.
+ * objc/encoding.c (objc_sizeof_type, objc_alignof_type): Replace
+ call to abort function with call to objc_error function.
+ (objc_skip_typespec): Likewise.
+ * objc/init.c (init_check_module_version): Replace call to
+ abort function with call to objc_error function.
+ * objc/misc.c (objc_verror): New function.
+ (objc_fatal): Remove function.
+ (objc_set_error_handler): New function.
+ (_objc_error_handler): New global variable.
+ (__alpha__): Remove unneeded code.
+ (objc_error): Allow user specified error handler function to
+ trap and handle the objc error. Added an error code parameter
+ which indicates the specific error that occured.
+ (objc_malloc, objc_atomic_malloc): Replace call to objc_fatal
+ function with call to objc_error function.
+ (objc_valloc, objc_realloc, objc_calloc): Likewise.
+ * objc/objc-api.h: Declare error handling functions and typedef
+ for user specified error handler function. Define error codes
+ used by the runtime library.
+ * objc/runtime.h: Remove error handling declarations.
+ * objc/sendmsg.c (__objc_forward): Replace call to abort function
+ with call to objc_error function.
+
+Sun Feb 2 19:42:52 1997 Thomas Baier <baier@ci.tuwien.ac.at>
+
+ * objc/hash.c (hash_delete): Step through the hash nodes
+ versus using hash_next to increase efficiency.
+ * objc/archive.c (__objc_finish_read_root_object): Use hash
+ table instead of list.
+
+Sun Feb 2 08:25:05 1997 Ovidiu Predescu <ovidiu@net-community.com>
+
+ * objc-act.c (encode_aggregate_within): New function.
+ (encode_aggregate): Generates encodings for unions similar
+ to those for structs except surrounded by parenthesis instead
+ of braces.
+
+Sun Feb 2 07:15:54 1997 Mat Hostetter (mat@lcs.mit.edu)
+
+ * c-decl.c (start_function): Fix improper installation of last change.
+
+Sun Feb 2 06:50:55 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * m68k.c (output_scc_di): Add missing CC_STATUS_INIT.
+
+Sun Feb 2 06:39:55 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-typeck.c (process_init_element): When popping levels, don't
+ blow up if constructor_max_index not set due to previous error.
+
+ * combine.c (find_split_point, case SET): Fix error in last change.
+
+Sun Feb 2 06:28:56 1997 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (rescan): Insert a space after `.' as well,
+ to prevent accidental token-pasting (e.g. `.x' -> `.10').
+
+Sun Feb 2 06:08:14 1997 Oliver Kellogg (oliver.kellogg@space.otn.dasa.de)
+
+ * 1750a.c (modregno_adjust): Fixed case when reg_renumber invalid.
+
+Sat Feb 1 19:11:08 1997 J.T. Conklin <jtc@rhino.cygnus.com>
+
+ * m68k.md (movqi): Enable use of clr and st insns on TARGET_5200.
+ * m68k.c (output_move_simode_const): Likewise.
+
+Sat Feb 1 18:54:00 1997 Douglas B. Rupp (rupp@gnat.com)
+
+ * gcc.c (process_command): Fix improper use of strncpy.
+
+Fri Jan 31 15:35:08 1997 Mike Stump <mrs@cygnus.com>
+
+ * libgcc2.c: Remove extern for malloc and realloc.
+
+Fri Jan 31 17:08:11 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * local-alloc.c (update_equiv_regs): If register which is equivalent
+ to some value is only used in one place, and we can't substitute value
+ for use, move register assignment to just before use.
+
+Fri Jan 31 15:57:25 1997 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.md (idiv,imul,fpmul): Added new functional units for pentiumpro.
+
+ * i386.c (pentiumpro_cost): Added new cost structure for pentiumpro.
+ (override_options): Set ix86_cost to appropriate cost structure.
+
+Thu Jan 30 09:34:26 1997 J.T. Conklin <jtc@rhino.cygnus.com>
+
+ * m68k.md (stack adjust peepholes): Use lea instead of
+ add.w when adding 16 bit constants on all but TARGET_68040.
+
+Thu Jan 30 08:58:08 1997 Ralf Baechle <ralf@waldorf-gmbh.de>
+
+ * function.c (TRAMPOLINE_ALIGNMENT): Provide default.
+ (expand_function_end): Use TRAMPOLINE_ALIGNMENT instead
+ of FUNCTION_BOUNDARY.
+ * varasm.c (TRAMPOLINE_ALIGNMENT): Provide default.
+ (assemble_trampoline_template): Use TRAMPOLINE_ALIGNMENT instead
+ of FUNCTION_BOUNDARY.
+
+Wed Jan 29 18:16:02 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.h (REG_CLASS_CONTENTS): Add rap to GENERAL_REGS and its
+ superclasses.
+
+ * sh.md (movsi_i, movsi_ie, movhi_i, movhi+1): Use type pcload for
+ immediate operands where appropriate.
+ (movsf_ie+1): Fail when loading anything but a MEM into
+ a floating point reguister.
+
+Wed Jan 29 16:00:31 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * varasm.c (force_const_mem): Set MARK instead of clearing it.
+ (output_constant_pool): Only mark constant pool if -O.
+ Check mark flag unconditionally.
+ (mark_constant_pool): Start by clearing all mark flags.
+
+ * tree.c (copy_node): Clear TREE_ASM_WRITTEN.
+
+ * flow.c (regno_uninitialized): Return 0 if reg is used for args.
+
+Wed Jan 29 15:23:59 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * combine.c (try_combine): Clear reg_n_refs if i2dest is not
+ mentioned in newi2pat.
+
+Tue Jan 28 16:00:23 1997 Stan Cox (coxs@dg-rtp.dg.com)
+
+ From Robert Lipe <robertl@dgii.com>
+ * i386/sco5.h (SCO_DEFAULT_ASM_COFF): Remove bytecode stuff.
+ (ASM_OUTPUT_ASCII): Use .ascii in both ELF and COFF modes.
+ (ASM_OUTPUT_SECTION_NAME): Handle alternate sections for COFF.
+ The OpenServer 5.0.0 assembler gives an error for section
+ names over 6 characters long, so we catch the "obvious" case
+ and shorten it.
+
+ * m88k.h (ASM_OUTPUT_SECTION_NAME): Undefine; fails
+ for exception sections. The 88k ABI specifies 'section'
+ instead of '.section'.
+
+Mon Jan 27 13:32:46 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.c (shl_and_kind): Fix typo.
+ * sh.md (and_shl_scratch): Fix typo for length 8.
+
+Mon Jan 27 08:56:03 1997 Jeffrey A Law (law@cygnus.com)
+
+ * fixincludes (sys/time.h): Fix incorrect forward structure
+ declaration on hpux10.20.
+
+Mon Jan 27 09:05:35 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (simplify_rtx): Don't do anything with if_then_else_cond
+ result if both one arm and the input are a comparison.
+ (simplify_{rtx,if_then_else,logical,shift_const}): Don't
+ test STORE_FLAG_VALUE with #if; properly test for just sign bit.
+ (num_sign_bit_copies, if_then_else_cond): Likewise.
+ * expmed.c (emit_store_flag): Properly test for STORE_FLAG_VALUE
+ of just sign bit.
+ * fold-const.c (fold): Don't make COND_EXPR when both expr and
+ one part are comparisons.
+ * a29k.h (STORE_FLAG_VALUE): Make negative.
+
+Fri Jan 24 16:42:26 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * varasm.c (struct pool_constant): Add mark field.
+ (force_const_mem): Clear mark field in new constant pool entry.
+ (output_constant_pool): Call mark_constant_pool.
+ (mark_constant_pool, mark_constants): New static functions.
+
+Thu Jan 23 15:04:17 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * cse.c (COST): Get the right cost for a SUBREG of a register when
+ truncation is free.
+
+Thu Jan 23 11:19:40 1997 Mike Stump <mrs@cygnus.com>
+
+ * Makefile.in (objc-headers): Don't try and install the headers if
+ the objc directory has been removed.
+
+Wed Jan 22 13:26:25 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * i960.c (process_pragma): Call ungetc on the last character
+ that was read by the while loop, to make sure the parser sees it.
+
+Tue Jan 21 17:20:30 1997 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.c (output_toc): Move STRIP_NAME_ENCODING to common
+ code, so the test for vt's works with -mminimal-toc.
+
+Tue Jan 21 16:03:35 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (mark_all_temps_used): Set KEEP as well.
+
+Tue Jan 21 12:16:15 1997 Doug Evans <dje@seba.cygnus.com>
+
+ * stor-layout.c (layout_record): Correct test for whether field spans
+ its unit of alignment in case where field_size == type_align.
+
+Mon Jan 20 20:27:54 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * mips.md (probe): Comment out.
+
+Sun Jan 19 20:54:45 1997 John F. Carr <jfc@mit.edu>
+
+ * integrate.c (expand_inline_function): Handle a PARALLEL containing
+ a RETURN the same as a RETURN.
+
+Sun Jan 19 20:35:28 1997 Pat Rankin <rankin@eql.caltech.edu>
+
+ * vmsconfig.com: Change all hardcoded references of "vax" to
+ use variable expansion instead.
+ (arch_indx, arch): New variables.
+
+ * vax.c (not_qsort): Don't declare alloca.
+ * vax/xm-vms.h: Declare alloca here.
+ Do most of the VAX C-specific set up for DEC C.
+ #if DEC C, undefine QSORT_WORKAROUND and qsort.
+ * make-gcc.com, make-cccp.com, make-cc1.com: Support building
+ with GNU C vs VAX C vs DEC C from the DCL command line.
+
+Sun Jan 19 17:20:50 1997 Oliver Kellogg (oliver.kellogg@space.otn.dasa.de)
+
+ * 1750a.md (movh[if]-1): Corrected.
+ (movtqf-1): Deleted.
+ * 1750a.c (add_1_to_mem): Deleted.
+ (output_operand_address): Added output modifier 'A'.
+
+Sun Jan 19 17:17:54 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * m68k.md (ashrdi_const, ashrdi3): Allow 31 as shift count.
+
+ * m68k.h (CONST_OK_FOR_LETTER_P): Recognize 'N', 'O' and 'P'.
+ * m68k.md (rotl[shq]i3, strict_low_part rotl): Allow 'N', 'O'
+ or 'P' operands.
+
+Sun Jan 19 17:09:17 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * m68k.md (addsi3): Fix previous change: {add,sub}qw should
+ be {add,sub}ql. For other uses of {add,sub}q don't check for address
+ register and always use {add,sub}ql.
+
+Sun Jan 19 15:05:42 1997 Peter Seebach <seebs@solon.com>
+
+ * c-decl.c (start_decl): Add code for -Wmain.
+ (c_decode_option): Add -fhosted, -ffreestanding, and -Wmain.
+ * toplev.c (lang_options): Likewise.
+ * c-tree.h (warn_main, flag_hosted): New variables.
+
+Sun Jan 19 14:35:41 1997 Alex Garthwaite (alex@samwise.cis.upenn.edu)
+
+ * fixinc.svr4: Fix problems with symlinks to ".".
+
+Sun Jan 19 14:21:46 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * loop.c (check_final_value): Handle insns with no luid's.
+
+Sun Jan 19 08:57:26 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.md (arg_home): Add CLOBBER of MEM and USE of arg regs.
+ * vms.h (SETUP_INCOMING_VARARGS): Delete duplicate definition.
+
+ * toplev.c (set_float_handler): Set up signal catcher on first call
+ in case a front end has disabled it.
+
+ * cccp.c, cexp.y: #define __attribute__ to be null if
+ compiling with GCC older than 2.7, not 2.6.
+
+ * toplev.c (main): If PREFERRED_DEBUGGING_TYPE used and set
+ to NO_DEBUG, say debugging not supported.
+ * mips/sni-svr4.h (PREFERRED_DEBUGGING_TYPE): Undefine.
+
+ * i386/xm-cygwin32.h (DIR_SEPARATOR): Define.
+
+ * explow.c (convert_memory_address, case SYMBOL_REF):
+ Copy CONSTANT_POOL_ADDRESS_P.
+ * integrate.c (save_constants): Make (address (const ..)) to record
+ both modes.
+ (copy_for_inline, copy_rtx_and_substitute, restore_constants): Use
+ both modes when restoring constant pool entry for ADDRESS.
+
+ * alpha.h (MINIMUM_ATOMIC_ALIGNMENT): New macro.
+
+ * function.c (instantiate_virtual_regs_1, case USE, case CLOBBER):
+ Properly handle case of shared MEM whose replacement is not valid.
+
+Sat Jan 18 14:08:31 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.c (get_unwidened): Don't crash if FIELD_DECL not layed out.
+
+ * varasm.c (const_hash): Treat NON_LVALUE_EXPR like CONVERT_EXPR.
+ (compare_constant_1, copy_constant, bc_assemble_integer): Likewise.
+ (const_hash, compare_constant_1): Use switch, not if-then-else.
+
+Fri Jan 17 17:10:20 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * mips.h (STACK_POINTER_OFFSET): Don't define.
+
+Thu Jan 16 14:51:03 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * cplus-dem.c: Fix indenting; note that this file also lives in
+ libiberty.
+ (do_type, case 'M'): Check for a template as well as a class.
+
+Thu Jan 16 15:08:26 1997 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * gcc.c (cross_compile): Change to be a char * like all of the
+ other specs.
+ (process_command): Change how cross_compile is tested.
+ (main): Likewise.
+ (struct spec_list): Merge with the format used by EXTRA_SPECS.
+ Add name length field to speed up repeated calls to strcmp. Add
+ flag to say spec was allocated. Add pointer to char * so that
+ static spec fields can be updated.
+ (extra_specs): Use struct spec_list as type.
+ (static_specs): Static list of predefined specs.
+ (init_specs): New function, initialize the specs list. Link in
+ the default specs and any specs defined via EXTRA_SPECS.
+ (set_spec): No longer special case predefined specs.
+ (process_command,validate_all_switches): Ditto.
+ (process_command): Call init_specs for -dumpspecs.
+ (do_spec_1): Use name length field to avoid calling strncmp when
+ it is going to fail.
+ (main): Call init_spec. Don't handle EXTRA_SPECS here.
+
+Thu Jan 16 17:07:54 1997 Eddie C. Dost <ecd@skynet.be>
+
+ * configure: Add sparc-linux{,aout} support.
+ * ginclude/va-sparc.h: Likewise.
+ * sparc/linux.h: New file.
+ * sparc/linux-aout.h: New file.
+ * sparc/xm-linux.h: New file.
+
+Thu Jan 16 16:19:13 1997 Jim Wilson <wilson@cygnus.com>
+
+ * configure (sparc-*-aout*): Add libgloss.h to tm_file.
+ (sparclite-*-coff*): Change "= to =".
+
+Thu Jan 16 12:53:15 CST 1997 Joel Sherrill <joel@OARcorp.com>
+
+ * rs6000/rtems.h: Change from being sysv4 based to being eabi based.
+
+Thu Jan 16 13:40:51 1997 Jim Wilson <wilson@cygnus.com>
+
+ * mips.h (LINKER_ENDIAN_SPEC): Define.
+ (LINK_SPEC): Add linker_endian_spec.
+ (EXTRA_SPECS): Add linker_endian_spec.
+
+Thu Jan 16 08:02:13 1997 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.md (bCC, inverted bCC): Use bCC .+X instead of bCC 0f.
+
+Wed Jan 15 14:06:28 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * reload.h (reload_address_base_reg_class): Declare.
+ (reload_address_index_reg_class): Declare.
+ * reload1.c (reload_address_base_reg_class): Define.
+ (reload_address_index_reg_class): Define.
+ (init_reload): Initialize reload_address_{base,index}_reg_class.
+ * reload.c (find_reloads_address): Use
+ reload_address_base_reg_class rather than BASE_REG_CLASS. Use
+ reload_address_index_reg_class rather than INDEX_REG_CLASS.
+ (find_reloads_address_1): Likewise.
+
+Tue Jan 14 15:26:33 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * reload.c (REGNO_MODE_OK_FOR_BASE_P): Define if not defined.
+ (REG_MODE_OK_FOR_BASE_P): Define if not defined.
+ (find_reloads_address): Use REG[NO]_MODE_OK_FOR_BASE_P rather than
+ REG[NO]_OK_FOR_BASE_P.
+ (find_reloads_address_1): Likewise.
+ Add mode parameter; change all callers.
+
+ * reload1.c (eliminate_regs_in_insn): Handle more cases when
+ eliminating the frame pointer to the hard frame pointer.
+
+ * varasm.c (force_const_mem): Copy a CONST_INT rtx like a CONST rtx.
+
+ * varasm.c (assemble_end_function): Call
+ output_after_function_constants.
+ (after_function_constants): New static variable.
+ (output_after_function_constants): New static function.
+ (output_constant_def): Check CONSTANT_AFTER_FUNCTION_P.
+
+Mon Jan 13 16:44:40 1997 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000/aix41.h (CPP_PREDEFINES): Add -D_AIX41.
+
+Sun Jan 12 20:54:01 1997 Jim Wilson <wilson@cygnus.com>
+
+ * libgloss.h (LINK_SPEC): Delete.
+ (STARTFILE_SPEC): Delete spurious newline.
+
+Sat Jan 11 00:13:03 1997 Torbjorn Granlund <tege@quiet.matematik.su.se>
+
+ * mips.md (norsi3, nordi3): Use canonical RTL. Prepend `*' to pattern
+ name. Don't match immediates.
+ (norsi3_const, nordi3_const): New patterns.
+ (anddi3, iordi3, xordi3): Test TARGET_64BIT, not mips_isa
+ in length attribute calculation.
+ * mips.c (complemented_arith_operand): New function.
+ (print_operand): Handle `e' for CONST_INT.
+ * mips.h (PREDICATE_CODES): Add complemented_arith_operand.
+
+Fri Jan 10 14:11:53 1997 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000/aix41.h (SUBTARGET_SWITCHES): Add threads and pe.
+ (CPP_SPEC): Add mpe and mthreads cases.
+ (LIB_SPEC): Add mpe and mthreads cases to variant from rs6000.h.
+ (STARTFILE_SPEC): Add mpe and mthreads support.
+
+Fri Jan 10 07:12:26 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * i386/cygwin32.h (LINK_SPEC): New definition.
+
+ * Makefile.in (FLAGS_TO_PASS): Add STAGE_PREFIX, set by configure.
+ * configure: Initialize exeext.
+ Update STAGE_PREFIX in Makefile.
+
+ * dwarfout.c (dwarfout_line): Push to LINE_SECTION after calling
+ lookup_filename.
+
+Thu Jan 9 12:06:04 1997 Jim Wilson <wilson@cygnus.com>
+
+ * i386.md (addsidi3_2): Add & to operand 0 of alternative 5.
+
+Thu Jan 9 12:06:04 1997 Stan Cox <coxs@dg-rtp.dg.com>
+
+ From Linus Torvalds and Mat Hostetter:
+ * i386.c (i386_sext16_if_const): Added to sign extend HImode constant.
+ (i386_aligned_reg_p): Added to tell if an rtx is aligned.
+ (i386_cc_probably_useless_p): Don't trust cc bits.
+ * i386.h (TARGET_ZERO_EXTEND_WITH_AND): Don't do this for p6.
+ * i386.md (cmpsf_ccfpeq+2): Use SImode test instruction.
+ (movhi+1): Use movz instead of mov on p6.
+ (addsi3): Add 128 by subtracting -128.
+ (zero_extendhisi2): Use SImode move if aligned.
+ ({add,sub,and,ior,xor}hi3): Likewise.
+
+Tue Jan 7 16:58:27 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * c-parse.in (extension): New rule for __extension__.
+ (extdef, unary_expr, decl, component_decl): Use it.
+
+Mon Jan 6 15:44:37 1997 Oliver Kellogg (oliver.kellogg@space.otn.dasa.de)
+
+ * 1750a.c: Now includes regs.h.
+ ({movcnt,mod}_regno_adjust): Corrected typos.
+ * 1750a.md (movhi): Corrected case of moving constant to memory.
+
+Mon Jan 6 08:00:57 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * mips.h: Delete redundant definitions of compiler and library fns.
+
+ * dwarfout.c (type_attribute): Ignore any subtype for now.
+
+ * fold-const.c (operand_equal_p): Rework to consider two
+ expressions that have embedded identical SAVE_EXPRs as
+ equivalent; also handle some more cases.
+
+Sun Jan 5 23:54:34 1997 Jeffrey A Law (law@cygnus.com)
+
+ * pa.md (pic_load_label): Fix test for using just an
+ ldo rather than an addil;ldo sequence to load the label's
+ address.
+
+Sun Jan 5 07:26:47 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case COMPONENT_REF): Fix error in last
+ change: don't suppress conversion if just EXPAND_SUM.
+
+Sat Jan 4 18:44:01 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.h (struct tree_decl): saved_insns.i is HOST_WIDE_INT.
+
+ * fold-const.c (const_binop): Rework to only make constants in
+ one place; always use size_int if small enough and of sizetype.
+ (size_int): Call force_fit_type.
+ (fold): Avoid ever changing type of input tree.
+
+ * expr.c (get_inner_reference): Fix type error.
+ (expand_expr, case COMPONENT_REF): Don't convert if modifier
+ is EXPAND_CONST_ADDRESS, EXPAND_SUM, or EXPAND_INITIALIZER.
+ * tree.c (staticp, case COMPONENT_REF, BIT_FIELD_REF): Not
+ static if bitfield.
+
+ * expr.c (expand_expr, case COMPONENT_REF): If taking value
+ from a CONSTRUCTOR, must mask/sign-extend if bitfield.
+ (expand_builtin, case BUILT_IN_LONGJMP): Pass type, not IDENTIFIER,
+ to second arg of RETURN_POPS_ARGS.
+
+ * expr.c (expand_expr, case COND_EXPR): Add additional cases
+ to "singleton" cases.
+ * tree.c (integer_pow2): Mask value to width of type.
+ (tree_log2): New function.
+
+ * expmed.c (store_fixed_bit_field): If not SLOW_UNALIGNED_ACCESS,
+ treat everything as maximally aligned.
+
+ * combine.c (find_split_point, case SET): If SET_SRC is NE and
+ STORE_FLAG_VALUE is -1, see if we can convert into NEG of shift.
+ (force_to_mode, case NE): Make condition stricter.
+
+ * calls.c (emit_library_call_value): Remove redundant check for
+ outmode != VOIDmode.
+
+Sat Jan 4 08:12:16 1997 J.T. Conklin <jtc@rhino.cygnus.com>
+
+ * Optimizations from John Vickers (john@rhizik.demon.co.uk):
+ * m68k.c (output_function_{pro,epi}logue): Use addq/subq when
+ adjusting stack pointer by small displacements.
+ * m68k.md (addsi3, addhi3): Use two addqw (or subqw) insns when
+ adding (or subtracting) small integer constants (8 < N <= 16) to
+ both address and data registers.
+
+Sat Jan 4 07:06:07 1997 Kamil Iskra <iskra@student.uci.agh.edu.pl>
+
+ * loop.c (basic_induction_var): Return 0 if SUBREG is not a
+ promoted variable.
+
+Sat Jan 4 06:22:36 1997 Doug Rupp (rupp@gnat.com)
+
+ * alpha.c (vmskrunch): Try to not chop trailing uppercase letters.
+ * alpha/vms.h (ENDFILE_SPEC): Use "gnu", not "gnu_cc".
+
+ * cccp.c (PRINTF_PROTO): Use __printf__ in __attribute__, not printf.
+ * cexp.y (PRINTF_PROTO): Likewise.
+
+Fri Jan 3 09:01:00 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * alpha.md (cmov): Fix operand numbers in case involving DF target,
+ DF comparison, and SF source.
+
+Fri Jan 3 08:19:46 1997 Paul Eggert <eggert@twinsun.com>
+
+ * cpplib.c (macroexpand): Delete any no-reexpansion marker following
+ identifier at beginning of an argu concatenated with what precedes it.
+
+Fri Jan 3 07:59:21 1997 Ken Rose (rose@netcom.com)
+
+ * reorg.c (fill_slots_from_thread): Skip moved insn in all three cases.
+
+Fri Jan 3 07:51:44 1997 Bob Manson <manson@cygnus.com>
+
+ * function.c ({push,pop}_function_context_to): Save and restore
+ current_function_args_info.
+ * function.h (struct function): New field args_info.
+
+Fri Jan 3 06:55:09 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * jump.c (rtx_equal_for_thread_p): Return 0 for floating-point.
+
+ * reload.c (find_reloads): If replaced a PLUS or MULT with a
+ simple operand, start over again.
+
+ * va-alpha.h: Check for __VMS__, not VMS.
+
+Thu Jan 2 08:52:51 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * configure: Finish restoring change of default of objc threads to
+ "single" for Linux-based GNU systems.
+
+Mon Dec 30 17:03:46 1996 Jeffrey A Law (law@cygnus.com)
+
+ * pa.c (fmpy_operands): Remove. No longer needed.
+ (combinable_add, combinable_copy, combinable_fmpy): Likewise.
+ (combinable_fadd, combineable_fsub): Likewise.
+ (pa_reorg): Call pa_combine_instructions.
+ (pa_combine_instructions): Combine instructions to make things
+ like fmpyadd and fmpysub.
+ (pa_can_combine_p): Helper function for pa_combine_instructions.
+ * pa.md (pa_combine_type): New attribute. Set it appropriately
+ for various insns.
+ (define_delays): Use a separate define_delay for unconditional
+ branches.
+ (fmpyadd, fmpysub peepholes): Remove, no longer needed.
+ (fmpyadd, fmpysub insns): Add variant with fadd/fsub first,
+ then the fmpy.
+
+Mon Dec 30 14:43:51 1996 Jim Wilson <wilson@cygnus.com>
+
+ * reg-stack.c (subst_stack_regs_pat): Set src_note explicitly, instead
+ of using invalid aggregate initialization.
+
+ * print-tree.c (print_node): Don't try to print nonexistent
+ TYPE_ATTRIBUTES field of a decl node.
+
+Mon Dec 30 10:30:25 1996 Richard Stallman <rms@ethanol.gnu.ai.mit.edu>
+
+ * config.sub: Handle hiuxmpp as system type.
+
+Thu Dec 26 13:33:27 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.md (init_v4_pic): Explicitly set the length.
+
+Mon Dec 23 19:39:38 1996 Jim Wilson <wilson@cygnus.com>
+
+ * mips.h (FUNCTION_ARG_REGNO_P): Correct for TARGET_SOFT_FLOAT and
+ TARGET_FLOAT64 cases.
+
+ * integrate.c (function_cannot_inline_p): Reject function with
+ PARALLEL result.
+ (expand_inline_function): Abort if function result not handled.
+
+Sat Dec 21 04:02:46 1996 Jason Merrill <jason@gerbil.cygnus.com>
+
+ * mips.c (save_restore_insns): Mark large frame setup insns
+ as frame-related.
+ (mips_expand_prologue): Likewise.
+
+ * dwarf2out.c (dwarf2out_frame_debug): Support MIPS large frames.
+ (add_bound_info): Use default lower bounds.
+ Handle simple variable bounds with a DIE ref.
+ Don't generate a NULL loc descr.
+ (add_subscript_info): Always add lower bound.
+ (gen_formal_parameter_die): Always equate_decl_number_to_die.
+ (gen_variable_die): Likewise. Don't use the old die for automatic
+ variables.
+
+Wed Dec 18 10:23:46 1996 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.c (notice_update_cc): Enable this code.
+ * mn10300.h (CC_OVERFLOW_UNUSABLE): Define.
+ * mn10300.md (tstsi): Use "set_zn_c0" instead of "set" for cc status.
+ (addsi3 pattern): Break "inc" into two different alternatives
+ since "inc dn" sets cc0, but "inc an" does not.
+ (multiply and divide patterns): Fix cc status.
+ (bCC, inverted bCC): Restore any comparison which needs the
+ overflow bits when CC_OVERFLOW_UNUSABLE is set.
+ (zero and sign extensions): Fix cc status.
+ (movm_store): Likewise.
+
+Tue Dec 17 15:02:44 1996 Jim Wilson <wilson@cygnus.com>
+
+ * sched.c (update_flow_info): When add REG_DEAD notes for dest of
+ last insn, add check for global_regs.
+
+Tue Dec 17 11:07:26 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/win-nt.h (HAS_INIT_SECTION): Delete, so that __main is
+ called from main.
+
+Mon Dec 16 15:28:44 1996 Jim Wilson <wilson@cygnus.com>
+
+ * combine.c (nonzero_bits): Ifdef out calls to num_sign_bit_copies.
+ Add dummy define/undef for num_sign_bit_copies.
+
+ * dwarfout.c (location_or_const_value_attribute, case CONCAT): Add.
+
+ * combine.c (simplify_comparison): Use mode_width as shift count
+ only if it is less than or equal to HOST_BITS_PER_WIDE_INT.
+
+Mon Dec 16 10:10:11 1996 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.c (expand_epilogue): Restore registers in the
+ "ret" instruction instead of a separate movm instruction.
+ Support possible stack deallocation in "ret" instruction too.
+ * mn10300.md (return_internal): Use "ret" instead of "rets";
+ restore registers and deallocate stack as needed.
+ (load_movm): Delete unused pattern.
+
+ * mn10300.h (SMALL_REGISTER_CLASSES): Define.
+
+Fri Dec 13 14:46:54 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.md (dect): Rewrite pattern so that it can be combined.
+
+Fri Dec 13 13:14:51 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * varasm.c (output_constant_pool): If ASM_OUTPUT_POOL_EPILOGUE is
+ defined, call it.
+
+Thu Dec 12 20:04:55 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * rtl.h (RTX_FRAME_RELATED_P): New macro.
+ (struct rtx_def): Add frame_related bitfield.
+ * final.c (final_scan_insn): Call dwarf2out_frame_debug.
+ Don't call dwarf2out_begin_function.
+ (final): Initialize dwarf2out_frame_debug.
+ * dwarf2out.c (dwarf2out_begin_function): Remove.
+ (dwarf2out_init): Use INCOMING_RETURN_ADDR_RTX.
+ (DWARF_CIE_DATA_ALIGNMENT): Generalize.
+ (DWARF_FRAME_REGNUM): Don't add 1.
+ (decode_cfi_rtl): Lose.
+ (dwarf2out_def_cfa): Now takes reg and offset directly.
+ (reg_save): Likewise.
+ (dwarf2out_reg_save): Now takes offset.
+ (initial_return_save): Grok INCOMING_RETURN_ADDR_RTX.
+ Replaces dwarf2out_return_save.
+ (dwarf2out_cfi_label): New fn.
+ (add_fde_cfi): Use it.
+ (dwarf2out_frame_debug): New fn.
+ * mips.h (DWARF_FRAME_REGNUM): Tweak r31.
+ (INCOMING_RETURN_ADDR_RTX): Define.
+ * mips.c (mips_expand_prologue): Set RTX_FRAME_RELATED_P as needed.
+ (save_restore_insns): Likewise.
+ * i386.c (ix86_expand_prologue): Likewise.
+ * i386.h (INCOMING_RETURN_ADDR_RTX): Define.
+ (DWARF_FRAME_RETURN_COLUMN): Define.
+
+ * dwarf2out.c (add_AT_long_long): Renamed from add_AT_double fo
+ clarity.
+ (print_die): Adjust.
+ (add_AT_float): New fn.
+ (add_const_value_attribute): Support fp values.
+ (size_of_die): Use blocks for long_long and fp values.
+ (value_format, output_die): Likewise.
+ (output_loc_operands): Don't support DW_OP_const8?.
+
+Thu Dec 12 19:49:09 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * varasm.c (CONSTANT_POOL_BEFORE_FUNCTION): Define if not
+ defined.
+ (assemble_start_function): Check CONSTANT_POOL_BEFORE_FUNCTION
+ to decide whether to call output_constant_pool.
+ (assemble_end_function): Likewise.
+
+ * calls.c: Check SMALL_REGISTER_CLASSES at run time, not just
+ compile time.
+ * combine.c, cse.c, function.c, jump.c, local-alloc.c: Likewise.
+ * loop.c, reload.c, reload1.c: Likewise.
+ * dsp16xx.h (SMALL_REGISTER_CLASSES): Define with value.
+ * h8300.h (SMALL_REGISTER_CLASSES): Likewise.
+ * i386.h (SMALL_REGISTER_CLASSES): Likewise.
+ * pdp11.h (SMALL_REGISTER_CLASSES): Likewise.
+ * sh.h (SMALL_REGISTER_CLASSES): Likewise.
+
+Thu Dec 12 15:25:39 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.md (sysv call insns): If flag_pic add @plt suffix.
+
+ * rs6000.md (fix_truncdfsi2_store): Fix offsets > 32k.
+
+ * rs6000/t-ppccomm: New file for common parts of embedded and
+ System V target Makefile support.
+
+ * rs6000/t-ppcos: New file for System V OS target Makefile
+ support.
+
+ * rs6000/t-solaris: Delete, merge into rs6000/t-ppcos.
+
+ * rs6000/t-{ppc,ppcgas}: Only keep the multilib specific parts,
+ moving the rest to rs6000/t-ppccomm.
+
+ * configure (powerpc*-*-*): For embedded and System V
+ configurations, add rs6000/t-ppccomm.
+ For GNU/Linux and Solaris, use t-ppcos.
+
+ * ginclude/ppc-asm.h (cr*, f*): Add new macros for register names.
+
+ * rs6000/sol-c0.c (_start): Fix uninitialized data bug.
+
+ * rs6000.md (init_v4_pic): Add @local to call.
+ (icbi,dcbst,sync,isync): Delete PowerPC cache control insns.
+
+ * rs6000/sysv4.h (ASM_SPEC): On explicit -mcall-solaris, pass
+ -msolaris to the assembler.
+
+ * rs6000.c (rs6000_sync_trampoline): Delete.
+ (rs6000_trampoline_template): Aix & System V don't need template now.
+ (rs6000_initialize_trampoline): For System V, call the function
+ __trampoline_setup to set up the trampoline.
+
+ * rs6000.h (TRAMPOLINE_TEMPLATE): Delete here.
+ * rs6000/win-nt.h (TRAMPOLINE_TEMPLATE): Add it here.
+
+ * rs6000/tramp.asm: New file, setup trampolines properly on System
+ V systems, properly flushing the caches.
+
+Thu Dec 12 10:53:10 1996 Jeffrey A Law (law@cygnus.com)
+
+ * reorg.c (fill_slots_from_thread): Don't call eligible_for_delay
+ with an insn with asm operands.
+
+ * expmed.c (emit_store_flag_force): Fix typos/thinkos.
+
+Thu Dec 12 08:09:20 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * i386.c (i386_return_pops_args): Libcalls ignore TARGET_RTD.
+
+Thu Dec 12 07:56:03 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.h (maybe_get_identifier): New declaration.
+
+ * calls.c (emit_library_call): Don't pass VOIDmode to type_for_mode.
+
+ * va-alpha.h: Add definitions for VMS; they differ from Unix.
+
+ * Makefile.in (stamp-objlist): Handle first character of object
+ file being a digit.
+
+ * 1750a.h (function_arg, {movcnt,mod}_regno_adjust): Add decls.
+ (branch_or_jump): Likewise.
+ (FUNCTION_ARG): Remove cast of function_arg result to rtx.
+ * 1750a.md: Remove unneeded casts to char *.
+
+Thu Dec 12 05:55:27 1996 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ * arm.c (arm_gen_constant, case [IX]OR): Don't invert constant if
+ loading into temporary.
+
+Wed Dec 11 18:57:21 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * toplev.c (rest_of_compilation): Make sure unwinder RTL is saved.
+
+ * collect2.c (write_c_file): Wrap the ctor/dtor lists and fns
+ with `extern "C" { ... }'.
+
+Wed Dec 11 17:46:48 1996 John F. Carr <jfc@mit.edu>
+
+ * tree.h (tree_decl): Reorder field declarations to reduce size
+ on 64 bit machines.
+
+ * combine.c (try_combine): When splitting an insn, check for the
+ new I2 setting a SUBREG.
+
+Wed Dec 11 17:00:47 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.c (print_operand): Use HOST_WIDE_INT_PRINT_DEC instead of
+ using "%ld".
+ (output_prolog): Don't print useless comment for VMS.
+
+ * alpha.c (output_prolog): SIZE is now HOST_WIDE_INT.
+ * alpha.md (mov[hq]i unnamed): Split up for TARGET_BYTE_OPS and not.
+
+ * function.c (fixup_var_refs_1, case ZERO_EXTRACT): Don't call
+ fixup_memory_subreg if no longer SUBREG of MEM.
+
+Wed Dec 11 14:10:48 1996 Jeffrey A Law (law@cygnus.com)
+
+ * mn10300.c: New file for Matsushita MN10300 port.
+ * mn10300.h, mn10300.md, t-mn10300, xm-mn10300.h: Likewise.
+ * config.sub: Recognize mn10300 as a basic machine type.
+ * configure: Similarly.
+ * ginclude/stdarg.h: mn10300 is little endian.
+ * ginclude/varargs.h: Likewise.
+
+Wed Dec 11 09:09:10 1996 Nagai Takayuki <nagai@ics.es.osaka-u.ac.jp>
+
+ * libgcc2.c (cacheflush): Add SONY NEWS-OS 4.2 version.
+
+Wed Dec 11 09:01:39 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * calls.c (emit_library_call, emit_library_call_value):
+ Don't pass an identifier node as function type for
+ library functions, but rather build a function type that
+ has a return type with the correct mode.
+ * i386.c (i386_return_pops_args): Don't test for IDENTIFIER_NODE.
+ * i386/isc.h (obsolete RETURN_POPS_ARGS): Test first argument
+ for IDENTIFIER_NODE.
+ * i386/next.h (RETURN_POPS_ARGS): Likewise.
+ * i386/sco.h (RETURN_POPS_ARGS): Likewise.
+ * i386/sco5.h (RETURN_POPS_ARGS): Likewise.
+ * i386/scodbx.h (RETURN_POPS_ARGS): Likewise.
+ * m68k.h (RETURN_POPS_ARGS): Likewise.
+ * ns32k.h (RETURN_POPS_ARGS): Likewise.
+ * pyr.h (RETURN_POPS_ARGS): Likewise.
+ * gmicro.h (RETURN_POPS_ARGS): Likewise; fix typo.
+
+Tue Dec 10 17:36:47 1996 J.T. Conklin <jtc@rhino.cygnus.com>
+
+ * Add optimizations from John Vickers (john@rhizik.demon.co.uk)
+ * m68k.h (TARGET_CPU32): New macro.
+ * m68k.md (add[hs]i3): Only use two addq.w or subq.w instructions
+ when adding or subtracting constants 8 < N < 16 on TARGET_CPU32.
+ Use lea instead of add.w when adding 16 bit constants to address
+ registers on all but TARGET_68040.
+ * m68k.c (output_function_{pro,epi}logue): Use lea instead of add.w
+ when adjusting stack pointer on all but TARGET_68040.
+
+Tue Dec 10 15:55:23 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * optabs.c (emit_unop_insn): Treat ZERO_EXTEND like SIGN_EXTEND.
+
+Tue Dec 10 13:47:24 1996 Joern Rennecke <amylaar@cygnus.co.uk>
+
+ * combine.c (combinable_i3pat): Bring back to sync with can_combine_p.
+
+ * sh.h (ADJUST_INSN_LENGTH): Don't break from loop when LOOP_BEG found.
+ Calculate padding in new variable pad.
+
+Mon Dec 9 18:00:38 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c (output_uleb128): Output value in human-readable comment.
+ (output_sleb128): Likewise.
+ (various): Adjust.
+ (output_call_frame_info): Only output info if it's interesting.
+ (add_src_coords_attributes): New fn.
+ (add_name_and_src_coords_attributes): Split out from here.
+ (gen_enumeration_type_die): Add src coordinates.
+ (gen_struct_or_union_type_die): Likewise.
+ (dwarf2out_finish): Call output_call_frame_info for all targets.
+
+Thu Dec 5 11:25:30 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c (add_pure_or_virtual_attribute): Only add
+ AT_containing_type if -g2 or higher.
+
+ * dwarf2out.c (gen_struct_or_union_type_die): Make sure that
+ the type for AT_containing_type has been generated.
+ (gen_decl_die): Likewise.
+
+ * dwarf2out.c (type_tag): Check DECL_IGNORED_P.
+ (add_pure_or_virtual_attribute): Check DECL_VINDEX instead.
+ (scope_die_for): Likewise.
+ * dwarfout.c (type_tag): Likewise.
+
+Wed Dec 4 22:51:38 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c (decode_cfi_rtl): Support getting a CONST_INT.
+ (dwarf2out_begin_function): Adjust.
+ (reg_save): Divide offset by the alignment.
+ (output_cfi): Support having more than one advance_loc.
+ (output_call_frame_info): Re-initialize current_label.
+ (dwarf2out_begin_prologue): Initialize current_label to NULL.
+ (lookup_cfa, lookup_cfa_1): New fns.
+ (dwarf2out_def_cfa): Call lookup_cfa.
+ (dwarf2out_finish): Don't generate CIE CFIs.
+ (dwarf2out_init): Generate them here.
+ (DWARF_FRAME_RETURN_COLUMN): Use PC_REGNUM.
+
+ (add_pure_or_virtual_attribute): Note virtual context.
+ (gen_formal_parameter_die): Return the die.
+ (gen_formal_types_die): Set AT_artificial on `this'.
+ (gen_subprogram_die): Add AT_accessibility.
+ (gen_variable_die): Likewise.
+ (gen_field_die): Likewise. Don't generate location attribute for
+ union members.
+ (gen_struct_or_union_type_die): Note where our vtable lives.
+ (gen_decl_die): Handle anonymous union fields.
+ (dwarf2out_decl): Always output `bool'.
+
+Mon Dec 2 03:55:15 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * final.c (final_end_function): Don't call dwarf2out_end_function.
+
+ * dwarf2out.c (output_line_info): Emit special opcodes for each line
+ entry, even if the line number doesn't change.
+ (pend_type, output_pending_types_for_scope): New fns.
+ (gen_struct_or_union_type_die): Use them to defer generating member
+ dies if we're in the middle of some other context.
+ (gen_type_die): Still put nested types in the right place.
+ (dwarf2out_decl): Call output_pending_types_for_scope.
+
+ * dwarf2out.c (dw_fde_struct): Replace end_prologue, begin_epilogue
+ with current_label.
+ (DWARF_CIE_INSN_SIZE, DWARF_CIE_SIZE): Remove.
+ (DWARF_CIE_HEADER_SIZE): The size without the initial insns.
+ (size_of_cfi): Revert.
+ (decode_cfi_rtl, add_fde_cfi, dwarf2out_def_cfa, reg_save,
+ dwarf2out_reg_save, dwarf2out_return_save): New fns.
+ (dwarf2out_begin_function): Use them to generate CFIs.
+ (dwarf2out_finish): Use them to generate E CFIs.
+ Don't set next_fde_offset.
+ (calc_fde_sizes): Initialize cie_size.
+ (output_call_frame_info): Don't generate CIE CFIs.
+ (dwarf2out_end_function): Remove.
+
+ * tree.c (maybe_get_identifier): New fn.
+ * varasm.c (assemble_name): Use it instead of get_identifier.
+
+Fri Nov 29 15:13:39 1996 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * jump.c (jump_optimize): Don't move initialization if there is a
+ label between it and the jump for if (foo) bar++ to bar += (foo !=0)
+
+Wed Nov 27 16:21:14 1996 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * Remove change of Oct 4.
+ * i386.h (outer_function_chain): Remove.
+ (current_function_calls_alloca): Remove.
+ (rtx_equal_function_value_matters): Remove.
+ (N_REGS_USED, N_ALLOCATABLE_REGISTERS): Remove.
+ * i386.md (adddi3_1, subdi3_1): Remove.
+ (adddi3, subdi3): Revert.
+ (movsf, movsf_mem, movsf_normal, movdf, movdf_mem, movdf_mem+1):
+ Likewise.
+ (movxf, movxf_mem, movxf_mem+1, addsidi3_1, addsidi3_2): Likewise.
+ (adddi3_1, subsidi3, subdi3_1): Likewise.
+ (addsidi3_1, addsidi3_2, subsidi3): Likewise.
+ (addsidi3_1, addsidi3_2, adddi3, subsidi3): Disable the problem
+ reload alternatives.
+
+Wed Nov 27 16:21:14 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * i386.md (ashldi3_non_const_int, ashrdi3_non_const_int):
+ Use a hidden branch to handle shifts > 32 bit.
+ (lshrdi3_non_const_int): Likewise.
+ (floatdixf2): Don't use unnecessary XFmode operation.
+
+Wed Nov 27 15:23:41 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * varasm.c (assemble_variable): Don't emit DWARF.
+
+ * toplev.c (rest_of_type_compilation): Don't emit DWARF.
+ (main): Just let -gdwarf mean DWARF v1; remove -gdwarf-1.
+
+ * dwarfout.c (decl_class_context): New fn.
+ (output_global_subroutine_die): Fix declaration case.
+ (output_global_variable_die): Likewise.
+ (output_type): Note when we are in a class defn. If we're a nested
+ type and our context hasn't been written, do that. Do early exit
+ for nested types.
+ (output_decl): Output the class context for fns and vars.
+ Don't emit detailed parm info for a fn declaration.
+ Use TYPE_DECL_IS_STUB, is_redundant_typedef.
+ (type_ok_for_scope): Support emitting nested types later.
+ (is_redundant_typedef): New fn.
+ (TYPE_DECL_IS_STUB): New macro.
+ (output_compile_unit_die): Check use_gnu_debug_info_extensions.
+ (output_local_subroutine_die, output_global_subroutine_die,
+ dwarfout_begin_function, dwarfout_end_function, dwarfout_line,
+ generate_macinfo_entry, dwarfout_init, dwarfout_finish): Likewise.
+
+ * dwarf2out.c (decl_class_context): Static.
+ (lookup_type_die): Use TYPE_SYMTAB_POINTER.
+ (equate_type_number_to_die): Likewise.
+ (gen_subprogram_die): If we're in class context, it's a decl.
+ (gen_variable_die): Likewise.
+ (gen_decl_die): Output the containing type.
+ (dwarf2out_init): Lose type_die_table code.
+
+Wed Nov 27 08:30:54 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * Makefile.in (DRIVER_DEFINES): New macro, with the macro
+ definitions for the driver.
+ (gcc.o): Make rule use $(DRIVER_DEFINES).
+ * gcc.c (process_command) [LANG_SPECIFIC_DRIVER]: Call
+ lang_specific_driver, passing along the addr of FATAL for errors
+ along with our ARGC and ARGV.
+
+Wed Nov 27 08:21:13 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * m68k.md (iorsi_zexthi_ashl16): New pattern.
+ (ashrsi_16): New name for old unnamed pattern.
+
+ * objc/misc.c (stdlib.h): Define __USE_FIXED_PROTOTYPES__ before
+ including stdlib.h.
+
+Wed Nov 27 08:17:34 1996 Joern Rennecke <amylaar@cygnus.co.uk>
+
+ * i386.md (decrement_and_branch_until_zero+[3-8]): Add missing
+ CC_STATUS_INIT.
+ (decrement_and_branch_until_zero+[5-8]): Delete redundant assignment.
+
+Wed Nov 27 07:56:27 1996 J.T. Conklin <jtc@rhino.cygnus.com>
+
+ * m68k.md ({and,ior,xor}si3_internal): Removed !TARGET_5200 from
+ conditionals now that entire insn is disabled when !TARGET_5200.
+
+Wed Nov 27 07:52:32 1996 Oliver Kellogg <kellogg@space.otn.dasa.de>
+
+ * 1750a.md (movhi pattern): Fixed MEM to MEM move problem.
+
+Tue Nov 26 14:50:54 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (move_by_pieces): Abort only if length positive at end.
+ * function.c (frame_offset, get_frame_size): Make HOST_WIDE_INT.
+ * function.h (struct function): Make frame_offset be HOST_WIDE_INT.
+ (get_frame_size): Add definition.
+ * reload1.c (reload): Make starting_frame_size be HOST_WIDE_INT.
+
+Mon Nov 25 16:55:14 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c (dwarf2out_finish): Don't emit call frame info
+ for non-MIPS targets.
+ (is_redundant_typedef): New fn.
+ (modified_type_die): Refer to typedef DIEs where appropriate.
+ (gen_typedef_die): Support DECL_ORIGINAL_TYPE.
+ (gen_type_die): Likewise. Use is_redundant_typedef.
+ (gen_subprogram_die): Don't force a spec DIE for local class methods.
+
+Mon Nov 25 15:09:12 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * gcc.c (handle_braces): Rework last change.
+
+Mon Nov 25 13:49:51 1996 Jim Wilson <wilson@cygnus.com>
+
+ * configure (build_exeext, exeext): New variables. Use sed to insert
+ build_exeext value into Makefile exeext rule.
+ (*-*-cygwin32): Set exeext.
+ * i386/x-cygwin32 (exeext): Delete.
+ * rs6000/x-cygwin32 (exeext): Delete.
+
+ * dwarf.h (enum dwarf_location_atom): Add OP_MULT.
+ * dwarfout.c (output_mem_loc_descriptor, case MULT): Add.
+ * dwarfout2.c (mem_loc_descriptor, case MULT): Add.
+
+ * dwarfout.c (dwarf_fund_type_name, case FT_unsigned_int64): Fix typo.
+
+Sun Nov 24 21:42:01 1996 J.T. Conklin <jtc@rhino.cygnus.com>
+
+ * m68k.md (andsi3): Changed into define_expand.
+ (andsi3_internal): Rename from old andsi3, changed condition
+ to !TARGET_5200.
+ (andsi2_5200): New insn.
+ (iorsi3): Change into define_expand.
+ (iorsi2_internal): Rename from old iorsi3, changed condition
+ to !TARGET_5200.
+ (iorsi2_5200): New insn.
+ (xorsi3): Change into define_expand.
+ (xorsi2_internal): Rename from old xorsi3, changed condition
+ to !TARGET_5200.
+ (xorsi2_5200): New insn.
+
+Sun Nov 24 21:31:32 1996 John F. Carr <jfc@mit.edu>
+
+ * i386.h (N_ALLOCATABLE_REGISTERS): Remove extra backslash at
+ end of macro definition.
+
+ * cpplib.c (LOCAL_INCLUDE_DIR): Remove default definition.
+ (include_defaults_array): Do not use LOCAL_INCLUDE_DIR or
+ TOOL_INCLUDE_DIR if they are not defined.
+ * cccp.c: Likewise.
+
+ * Makefile.in (cppmain.o): New rule.
+
+Sun Nov 24 19:14:50 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * fold-const.c (merge_ranges): In (+,-) case, if lower bounds are
+ the same the result is always false.
+
+Sun Nov 24 18:48:31 1996 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * c-typeck.c (build_indirect_ref): Don't give warning for
+ dereferencing void * if evaluation is being skipped.
+
+ * c-decl.c (poplevel): Don't call output_inline_function if
+ DECL_SAVED_INSNS is not set.
+
+ * gcc.c (give_switch): Add new arg, INCLUDE_BLANKS.
+ (handle_braces): All callers changed.
+ Add support for new construct: %{S*^}.
+
+Sun Nov 24 18:44:48 1996 Paul Eggert <eggert@twinsun.com>
+
+ * c-parse.in (unary_expr, expr_no_commas): Increment skip_evaluation
+ when analyzing an expression that is known not to be evaluated.
+ (sizeof, alignof): New rules.
+ * c-tree.h (skip_evaluation): New variable.
+ * c-common.c (skip_evaluation): Likewise.
+ (overflow_warning, unsigned_conversion_warning): Don't warn about
+ potential runtime errors when skipping evaluation.
+ * c-typeck.c (build_binary_op): Likewise.
+ (build_conditional_expr): op1 now always nonnull.
+
+Sun Nov 24 17:06:58 1996 Bernd Schmidt (crux@Pool.Informatik.RWTH-Aachen.DE)
+
+ * toplev.c (rest_of_compilation): Call regscan before each
+ jump threading pass.
+
+Sun Nov 24 16:37:18 1996 Dave Love <d.love@dl.ac.uk>
+
+ * configure (objc_thread_file): Set conditionally in each case so
+ may be overidden with `--enable-objcthreads=posix'.
+ Change GNU/Linux default to `single'.
+
+Fri Nov 22 17:53:15 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * varasm.c (assemble_variable): Output DWARF in the third case, too.
+
+ * dwarf2out.c (decls_for_scope): Only add DIEs with no parents to
+ our scope.
+ (gen_subroutine_type_die): Parm types go under the fn type DIE.
+
+ * Makefile.in ($(T)crt{begin,end}.o): Move CRTSTUFF_T_CFLAGS after
+ general flags.
+
+ * mips/t-iris6 (CRTSTUFF_T_CFLAGS): Define.
+ * mips.c (compute_frame_size): Fix fp_save_offset.
+
+ * dwarf2out.c (new_die): If we get a NULL parent, inc limbo_die_count.
+ (decls_for_scope): Decrement limbo_die_count as appropriate.
+ (dwarf2out_finish): Check for good limbo_die_count.
+ (size_of_cfi): If regno too big for DW_CFA_offset, use offset_extended
+ instead.
+ (output_call_frame_info): Add disabled code for specifying ABI.
+ (dwarf2out_begin_function): Note all saved regs.
+
+ * dwarf2out.c (gen_subprogram_die): Have a DIE for each fn at
+ toplevel.
+ (scope_die_for): Only use the NULL for fns and tags.
+
+Tue Nov 21 15:53:51 1996 Joern Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.c (output_stack_adjust): New argument TEMP. Changed all callers.
+ If the adjust cannot be done with one, but can be done with two
+ CONST_OK_FOR_I constants, do it that way.
+
+Thu Nov 21 14:25:55 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * fixincludes: Include <stdio.h> in <assert.h> even if not C++ if
+ stderr needs to be defined.
+
+Wed Nov 20 15:38:13 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * toplev.c (rest_of_type_compilation): Do output function-scope tags
+ for DWARF 2.
+ * c-decl.c (pushtag): Set TYPE_CONTEXT on the tag.
+ * toplev.c, varasm.c: s/dwarf2out_file_scope_decl/dwarf2out_decl/g.
+ * dwarf2out.c (add_prototyped_attribute): Use a value of 1.
+ (gen_subprogram_die): Support AT_static_link.
+ (dwarf2out_decl): Rename from dwarf2out_file_scope_decl.
+ Give nested fns and tags a die_parent of NULL.
+ (decls_for_scope): Fix the die_parent for nested fns and tags.
+ (scope_die_for): If we get a context of NULL, just return it.
+
+Tue Nov 19 18:21:11 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c (gen_subprogram_die): Support block extern decls.
+ (gen_variable_die): Likewise.
+ (gen_decl_die): Emit block extern function decls.
+
+ * c-decl.c (implicitly_declare): Set DECL_ARTIFICIAL.
+
+Tue Nov 19 16:50:32 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * configure (powerpc*-{sysv,elf,eabi{,aix,sim}}): Set
+ extra_headers to ppc-asm.h.
+ (powerpc*-{linux,solaris,rtems,vxworks}): Likewise.
+ (powerpc*-{winnt,pe,cygwin32}): Likewise.
+
+ * rs6000/t-{ppc,ppcgas,solaris,winnt} (EXTRA_HEADERS): Don't set here.
+
+Mon Nov 18 14:51:46 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c (DWARF_CIE_INSN_SIZE): New macro.
+ (DWARF_CIE_HEADER_SIZE): Use it.
+ (DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM): New macros.
+ (output_call_frame_info, dwarf2out_begin_function): Use them.
+ For the MIPS, output the first CFA insn in the CIE.
+ * dwarf2.h (enum dwarf_call_reg_usage): Lose.
+ (dwarf_macinfo_record_type): Fix spelling.
+ * mips/mips.h (DWARF_FRAME_REGNUM, DWARF_FRAME_RETURN_COLUMN): Define.
+
+ * dwarf2out.c (base_type_die): Just generate the DIEs as needed,
+ rather than building up some table.
+ (init_base_type_table): Lose.
+ (add_subscript_info): Use add_type_attribute. Don't give an upper
+ bound for an array of unknown size.
+ (gen_unspecified_parameters_die): Remove DWARF-1 kludge.
+ (dwarf2out_init): Lose call to init_base_type_table.
+ (is_c_family, is_fortran): New fns.
+ (gen_compile_unit_die): Recognize GNU F77.
+ (gen_array_type_die): Use AT_declaration for an array of unknown size.
+ (modified_type_die): Take TYPE_MAIN_VARIANT before passing it
+ to build_type_variant, so we ignore named variants.
+ (dwarf2out_file_scope_decl): Don't generate DIEs for built-in structs,
+ either; they will be emitted if they are used.
+ From wilson:
+ (gen_array_type_die): Force the element type out first on IRIX 6.
+
+Sun Nov 17 20:23:11 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (get_inner_reference): Fix error in previous change.
+
+Sat Nov 16 06:08:27 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (operand_subword): Avoid confusion if sizeof (float)
+ is less than a full word.
+
+ * alpha.h (MASK_BYTE_OPS): Now define as 1024.
+ * alpha/vms.h (TARGET_DEFAULT): Use symbolic values.
+
+ * expr.c (get_inner_reference): Add new arg PALIGNMENT and compute it.
+ (expand_assignment, do_jump): Pass new arg to get_inner_reference.
+ (expand_expr, case COMPONENT_REF): Likewise.
+ * fold-const.c (optimize_bit_field_compare, decode_field_reference):
+ Likewise.
+ * tree.h (get_inner_reference): Add new arg.
+
+ * Add support for Alpha/VMS, mostly from
+ Klaus Kaempf (kkaempf@progis.de)
+ * configure (alpha-dec-vms*): New target.
+ * alpha.c (override_options): Handle VAX format floating-point.
+ (print_operand, case ',', '-'): New cases.
+ (alpha_builtin_saveregs): Handle VMS convention.
+ (alpha_sa_{mask,size}, alpha_pv_save_size, alpha_using_fp):
+ New versions for VMS.
+ (output_{pro,epi}logue, function_arg): Likewise.
+ (direct_return): Never true on VMS.
+ (check_float_value): Return 0 for VMS.
+ (vmskrunch, alpha_{need,write}_linkage): New function.
+ * alpha.h ({MASK,TARGET}_{OPEN_VMS,FLOAT_VAX}): New macros.
+ (TARGET_SWITCHES): Add float-vax and float-ieee.
+ ({FUNCTION,LIBCALL}_VALUE, FUNCTION_VALUE_REGNO_P): R1 and R33
+ are also return registers.
+ (ASM_OUTPUT_DOUBLE): Support both floating-point formats.
+ (PRINT_OPERAND_FUNCT_VALID_P): Add ',' and '-'.
+ * alpha.md ({div,mod}[sd]i3): Only for VMS.
+ (fp operations): Add modifiers for multiple floating-point formats.
+ (call patterns): Handle new calling sequence for VMS.
+ (tablejump): Make new pattern for VMS.
+ (nonlocal_goto_receiver, arg_home): New patterns.
+ * alpha/t-vms, alpha/vms.h, alpha/xm-vms.h: New files.
+
+Fri Nov 15 17:38:20 1996 Doug Evans <dje@seba.cygnus.com>
+
+ * sdbout.c (current_file): New global.
+ (PUT_SDB_SRC_FILE): New PUT_SDB_FOO macro.
+ (sdbout_init): Initialize current_file ifdef MIPS_DEBUGGING_INFO.
+ (sdbout_{start_new,resume_previous}_source_file): New functions.
+ * toplev.c (debug_{start,end}_source_file): Call them if SDB_DEBUG.
+ * mips.h (PUT_SDB_SRC_FILE): Define.
+
+Fri Nov 15 16:11:25 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarfout.c (dwarfout_line): Don't emit line number info for
+ functions outside of .text.
+
+Fri Nov 15 15:52:42 1996 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386/386bsd.h (COMMENT_BEGIN): Delete.
+ * i386/freebsd.h (COMMENT_BEGIN): Likewise.
+ * i386/netbsd.h (COMMENT_BEGIN): Likewise.
+ * i386/unix.h (COMMENT_BEGIN): Likewise.
+
+Fri Nov 15 13:22:42 1996 Jim Wilson <wilson@cygnus.com>
+
+ * fold-const.c (unextend): Rewrite type conversions to avoid overflow.
+
+Fri Nov 15 12:11:28 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): Properly copy an rtvec.
+ * emit-rtl.c (gen_rtvec_vv): New function.
+ (copy_rtx_if_shared): Call it.
+ * integrate.c (copy_for_inline): Likewise.
+ * reload1.c (eliminate_regs): Likewise.
+ * rtl.h (gen_rtvec_vv): Declare.
+ * genattrtab.c (simplify_cond): Make TESTS an array of rtunions.
+ * genextract.c (main): Use loop, not bcopy, to set recog_operands
+ from an rtvec.
+ * rtl.c (rtvec_alloc): Clear rtwint instead of rtvec.
+
+ * machmode.h (HOST_PTR_PRINTF): Handle char * wider than long.
+ (HOST_WIDE_INT_PRINT_{DEC,UNSIGNED,HEX,DOUBLE_HEX}): New macros.
+ * final.c (asm_fprintf): Use "ll" prefix for a long long HOST_WIDE_INT.
+ (output_{asm_insn,addr_const}): Use HOST_WIDE_INT_PRINT_*.
+ * print-tree.c (print_node{,_brief}, case INTEGER_CST): Likewise.
+ * print-rtl.c (print_rtx, case 'w'): Use HOST_WIDE_INT_PRINT_DEC.
+
+ * unroll.c (iteration_info): Fix code so that it knows iteration_var
+ is a HOST_WIDE_INT, not a long.
+
+ * fold-const.c (operand_equal_p): Do comparison with REAL_VALUES_EQUAL.
+ (make_range): Properly decide when to get TREE_TYPE of arg0.
+ Handle EXP being an INTEGER_CST at end.
+ (fold_range_test): Handle return of 0 from make_range.
+ (fold, case TRUTH_AND_EXPR): Handle first arg of 0.
+ (fold, case TRUTH_OR_EXPR): Handle first arg of 1.
+
+ * c-common.c (decl_attributes, case A_ALIAS): Add missing parens.
+
+Fri Nov 15 06:37:54 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * fold-const.c (range_binop): Set SNG1 to zero if ARG1 is a
+ not a lower or upper bound.
+
+Thu Nov 14 23:08:25 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * flags.h (debug_info_type): Add DWARF2_DEBUG.
+ * toplev.c (main): Support DWARF2_DEBUG. Add -gdwarf-1, -gdwarf-2
+ options. Check debug level after choosing type.
+ (debug_{start,end}_source_file, debug_{define,undef}): New functions.
+ (compile_file): Support dwarf2 separately from dwarf1.
+ (rest_of_type_compilation, rest_of_compilation): Likewise.
+ * final.c (final_start_function): Likewise.
+ (final_end_function, final_scan_insn, output_source_line): Likewise.
+ * varasm.c (assemble_variable): Likewise.
+ * dwarfout.c: Don't check DWARF_VERSION.
+ * dwarf2out.c: s/dwarfout/dwarf2out/g. Check DWARF2_DEBUGGING_INFO.
+ * c-lex.c (check_newline): Use debug_* instead of calling *out
+ functions directly.
+ * svr4.h (DWARF2_DEBUGGING_INFO): Define.
+ * mips/iris6.h (PREFERRED_DEBUGGING_TYPE): DWARF2_DEBUG.
+ (DWARF2_DEBUGGING_INFO): Define instead of DWARF_DEBUGGING_INFO.
+ (LINK_SPEC): Pass -w through.
+ * mips.h (PREFERRED_DEBUGGING_TYPE): Don't check `len'.
+
+Thu Nov 14 17:25:47 1996 Jeffrey A Law (law@cygnus.com)
+
+ * h8300.c (dosize): Don't clobber static chain reg if needed by
+ current function.
+
+Wed Nov 13 17:05:19 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * Makefile.in (stage?-start): Keep a copy of EXTRA_MULTILIB_PARTS
+ in the build directory.
+
+Tue Nov 12 23:17:17 1996 Jeffrey A Law (law@cygnus.com)
+
+ * pa.c (print_operand, case 'Y'): Fix comparisons to handle
+ NaNs properly in all cases.
+
+Tue Nov 12 18:47:24 1996 Jim Wilson <wilson@cygnus.com>
+
+ * expr.c (emit_group_store): For REG case, call gen_lowpart if
+ modes are different.
+
+Tue Nov 12 18:24:40 1996 Doug Rupp (rupp@gnat.com)
+
+ * gcc.c (exit): If VMS, define as __posix_exit.
+ (option_map): Add define-macro and undefine-macro.
+
+Tue Nov 12 17:55:10 1996 Torbjorn Granlund <tege@tege.pdc.kth.se>
+
+ * alpha.c (input_operand): If TARGET_BYTE_OPS accept HImode and QImode.
+ * alpha.h (MASK_BYTE_OPS): New define.
+ (TARGET_BYTE_OPS): New define.
+ (TARGET_SWITCHES): Handle -mbyte.
+ (LOAD_EXTEND_OP): When MODE is not SImode, return ZERO_EXTEND.
+ * alpha.md (zero_extendqidi2): Handle TARGET_BYTE_OPS.
+ (zero_extend{hidi,qisi,hisi}2): Likewise.
+ (extendqisi2): Use extendqidi2x if TARGET_BYTE_OPS.
+ (extendqidi2): Likewise.
+ (extendqidi2x): New pattern.
+ (extendhisi2): Use extendhidi2x if TARGET_BYTE_OPS.
+ (extendhidi2): Likewise.
+ (extendhidi2x): New pattern.
+ (movhi): Handle TARGET_BYTE_OPS.
+ (movhi matcher): Output ldwu and stw.
+ (movqi): Handle TARGET_BYTE_OPS.
+ (movqi matcher): Output ldbu and stb.
+
+Tue Nov 12 16:53:37 1996 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * configure (hppa1.1-pro*, i960-*-coff*,m68k-*-aout*): Add libgloss.h.
+ (m68k-*-coff*, mips*-*-elf*, sparc*-*-aout*, sparc*-*-coff*): Likewise.
+ * config/libgloss.h: New file.
+
+Tue Nov 12 16:21:45 1996 Joern Rennecke <amylaar@cygnus.com>
+
+ * jump.c (jump_optimize): Fix bug in Sep 23 change.
+
+Tue Nov 12 16:15:31 1996 Andrew Cagney (cagney@tpgi.com.au)
+
+ * global.c (prune_references): Add missing symmetic CONFLICTP call.
+
+Tue Nov 12 14:34:40 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * m68k.c (output_function_{pro,epi}logue): Save and restore
+ fp-registers only if TARGET_68881.
+
+ * m68k/mot3300.h (ASM_OUTPUT_INTERNAL_LABEL): Prefix labels with "L%".
+ (ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_CASE_LABEL): Likewise.
+ (ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Likewise.
+
+ * m68k/mot3300.h (TARGET_DEFAULT): Use MASK_68040_ALSO, not MASK_68040.
+ * m68k/next.h, m68k/ccur-GAS.h (TARGET_DEFAULT): Likewise.
+
+ * fixproto (std_files): Add sys/socket.h.
+
+ * m68k.md (movqi): Emit 'st' for INTVAL & 255 == 255, not INTVAL == -1.
+ (seq,sne,sgt,sgtu,slt,sltu,sge,sgeu,sle,sleu): Allow "m" as operand 0.
+
+Tue Nov 12 14:17:45 1996 Paul Eggert <eggert@twinsun.com>
+
+ * c-decl.c (grokdeclarator): Generate a warning if -Wimplicit,
+ unless a warning was already generated by -Wreturn-type.
+
+Tue Nov 12 14:11:02 1996 Pat Rankin <rankin@eql.caltech.edu>
+
+ * Make qsort callback routines conform to the ANSI/ISO standard.
+ * c-decl.c (field_decl_cmp): Use `const void *' arguments.
+ * global.c (allocno_compare): Likewise.
+ * reload1.c (hard_reg_use_compare, compare_spill_regs): Likewise.
+ (reload_reg_class_lower): Likewise.
+ * stupid.c (stupid_reg_compare): Likewise.
+ * local-alloc.c (qty_compare_1, qty_sugg_compare_1): Likewise.
+ (QTY_CMP_PRI, QTY_CMP_SUGG): New macros.
+ (qty_compare_1, qty_sugg_compare_1): Use them.
+
+Tue Nov 12 13:20:25 1996 Jim Wilson <wilson@cygnus.com>
+
+ * fold-const.c (merge_ranges): In (+,-) case, treat subset specially
+ if lower bounds are the same.
+
+Tue Nov 12 13:10:01 1996 J.T. Conklin <jtc@cygnus.com>
+
+ * m68k.md (addsi3): If TARGET_5200, use the lea insn to add small
+ constants to address registers.
+ (negsi2): Change into define_expand.
+ (negsi2_internal): Rename from old negsi2, changed condition
+ to !TARGET_5200.
+ (negsi2_5200): New insn.
+ (one_cmplsi2): Change into define_expand.
+ (one_cmplsi2_internal): Rename from old one_cmplsi2, changed
+ condition to !TARGET_5200.
+ (one_cmplsi2_5200): New insn.
+ (negdi2_5200): Corrected constraints.
+ (one_cmpldi2): Changed condition to !TARGET_5200.
+
+ * m68k.c (m68k_align_loops_string, m68k_align_jumps_string): New vars.
+ (m68k_align_funcs_string, m68k_align_loops): Likewise.
+ (m68k_align_jumps, m68k_align_funcs): Likewise.
+ (override_options): New function.
+ * m68k.h (TARGET_OPTIONS): Added alignment options.
+ (MAX_CODE_ALIGN, ASM_OUTPUT_LOOP_ALIGN, ASM_OUTPUT_ALIGN_CODE):
+ New macros.
+ (FUNCTION_BOUNDARY): Use value derrived from m68k_align_funcs
+ instead of constant.
+
+ * m68k.c (output_function_{pro,epi}logue): Fix typo in last change.
+
+Tue Nov 12 09:26:51 1996 Torbjorn Granlund <tege@wombat.gnu.ai.mit.edu>
+
+ * i386.md (parallel inc/dec and branch-if-zero/nonzero): Use `+' in
+ constraint.
+
+Mon Nov 11 15:12:22 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * libgcc2.c: Also define WEAK_ALIAS if ASM_OUTPUT_WEAK_ALIAS.
+ * mips/iris6.h (ASM_OUTPUT_WEAK_ALIAS): Define.
+ * varasm.c (assemble_alias): Use ASM_OUTPUT_WEAK_ALIAS.
+
+ * dwarf2out.c (TYPE_USED_FOR_FUNCTION): Lose.
+ (gen_compile_unit_die): Only append -g with -g2 or better.
+ (scope_die_for): Don't emit any type info with -g1.
+ (gen_subprogram_die): Likewise.
+ (gen_decl_die): Likewise.
+ (dwarfout_file_scope_decl): Likewise.
+ (dwarfout_init): Likewise.
+
+ * mips/iris6.h (TYPE_ASM_OP): Define.
+ (SIZE_ASM_OP): Define.
+ (ASM_WEAKEN_LABEL): Define.
+ (BSS_SECTION_ASM_OP): Define.
+ (ASM_OUTPUT_ALIGNED_LOCAL): Don't use ASM_DECLARE_OBJECT_NAME.
+ (ASM_OUTPUT_ALIGNED_BSS): Define.
+ (ASM_DECLARE_OBJECT_NAME): Redefine to emit .size directive.
+ (ASM_FINISH_DECLARE_OBJECT): Define.
+ (ASM_OUTPUT_DEF): Don't define.
+
+Fri Nov 8 20:38:51 1996 Jim Wilson <wilson@cygnus.com>
+
+ * function.c (expand_function_end): Handle BLKmode structures returned
+ in registers.
+
+Fri Nov 8 20:27:07 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * stor-layout.c (layout_record): Check for VAR_DECL instead
+ of TREE_STATIC.
+
+ * varasm.c (assemble_variable): Do write out DWARF for
+ record-scope variables.
+ * toplev.c (rest_of_type_compilation): Do write out DWARF for
+ record-scope types.
+
+ * dwarf2out.c (gen_enumeration_type_die): Set TREE_ASM_WRITTEN on a
+ complete enum type.
+ (gen_struct_or_union_type_die): Don't recurse between nested classes.
+ (gen_type_die): Write out nested classes by writing out their context.
+
+Fri Nov 8 17:40:27 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (change_address): If MEMREF isn't changing,
+ return the old one.
+
+ * expr.c (expand_assignment): Remove bogus resetting of alignment
+ to inner alignment.
+ (expand_expr, case COMPONENT_REF): Likewise.
+
+Fri Nov 8 16:31:31 1996 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * reg-stack.c (compare_for_stack_reg, subst_stack_regs_pat):
+ Add support for float conditional move.
+
+Thu Nov 7 07:46:07 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * stor-layout.c (layout_record): Treat constant size as variable if
+ it overflows.
+ * fold-const.c (const_binop, case *_DIV_EXPR): Don't do special
+ sizetype case if a constant overflows.
+ (size_binop): Use integer_{zero,one}p instead of explicit test.
+ * tree.c (integer_{zero,one,all_ones,pow2}p, real_{zero,one,two}p):
+ Return 0 if TREE_CONSTANT_OVERFLOW.
+
+Wed Nov 6 17:53:33 1996 Torbjorn Granlund <tege@wombat.gnu.ai.mit.edu>
+
+ * i386.md (parallel inc and branch-if-zero/nonzero): Add two
+ new pattern variants. Change incrementing pattern to use incl/jnz.
+
+Wed Nov 6 09:46:10 1996 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.c (override_options): Set defaults for -march and -mcpu.
+ (output_float_compare): Use cc_status.flags to mark if this
+ comparison can be done with fcomi.
+ (output_fp_cc0_set): A conditional move may be in a PARALLEL.
+
+ * i386.h (CC_FCOMI): Define
+
+ * i386.md (sgt,sgtu,sge,sle,bgt,blt,bge,ble): Use CC_FCOMI
+ (movsicc_1,movhicc_1): Use correct size suffix.
+ (movsfcc_1,movdfcc_1): Cleanup default move case.
+
+Wed Nov 6 09:46:10 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * i386.h (HARD_REGNO_MODE_OK): If long double isn't XFmode, can't
+ allow XFmode.
+
+Tue Nov 5 22:49:56 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.md (define_split for and_shl_scratch):
+ Use rtx_equal_p on the operands to find out which alternative is used.
+ * sh.c (gen_shl_and): Try to generate shorter constant for and.
+
+Mon Nov 4 19:13:52 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c: Clean up unused variables.
+ Use ASM_{GENERATE,OUTPUT}_INTERNAL_LABEL, shorten label names.
+ (loc_descriptor): Use reg_loc_descriptor.
+ (TYPE_DECL_IS_STUB): New macro.
+ (gen_decl_die): Use it.
+ (dwarfout_file_scope_decl): Use it.
+
+Mon Nov 4 10:23:46 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * ginclude/va-ppc.h (__va_regsave_t,va_start,va_end): Wrap macro
+ and structures inside #ifndef __VA_PPC_H__ to allow reinclusion.
+
+ * rs6000.h (LEGITIMATE_SMALL_DATA_P): Don't allow -fpic or TARGET_TOC.
+ (LEGITIMATE_LO_SUM_ADDRESS_P, LEGITIMIZE_ADDRESS): Likewise.
+
+ * rs6000.md (movsi): Don't call elf_{high,low} if -fpic.
+
+ * rs6000/cygwin32.h (STARTFILE_SPEC): Eliminate empty %{}.
+
+Sun Nov 3 15:56:35 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/sysv4.h (TARGET_TOC): Plain -fpic does not require a TOC.
+ ({MINIMAL_TOC,CONST}_SECTION_ASM_OP): -fpic should be treated like
+ -mrelocatable in these cases.
+ (ASM_OUTPUT_INT, ASM_OUTPUT_SECTION_NAME): Likewise.
+ (ASM_OUTPUT_ALIGNED_LOCAL): Use sdata_section, not sbss_section.
+
+Fri Nov 1 19:57:13 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c (based_loc_descr): Use DBX_REGISTER_NUMBER. The
+ "frame base" is just the frame or stack reg without an offset.
+ (gen_subprogram_die): Likewise.
+ (dwarfout_begin_function): Use DBX_REGISTER_NUMBER.
+
+Fri Nov 1 09:50:05 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (make_range): Don't merge unsigned case with range
+ containing upper bound; instead merge just with zero and convert
+ a range with no upper bound to opposite one with no lower bound.
+ (merge_ranges): In (+,-) case, don't treat subset specially if
+ the upper bounds are the same; fix typo in others case here.
+
+Thu Oct 31 20:12:13 1996 Jeffrey A Law (law@cygnus.com)
+
+ * fold-const.c (make_range, case PLUS_EXPR): Correct
+ normalization of an unsigned range that wraps around zero.
+
+Thu Oct 31 21:06:37 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * mips/t-iris6 (EXTRA_MULTILIB_PARTS): Define.
+ (EXTRA_PARTS): Don't define.
+
+ * dwarf2out.c (gen_struct_or_union_type_die): Use AT_specification
+ for nested types defined outside their containing class. Lose
+ is_complete.
+ (gen_enumeration_type_die): Lose is_complete.
+ (gen_type_die): Lose is_complete.
+ (add_name_and_src_coords_attributes): Tweak.
+ (gen_subroutine_type_die): Use scope_die_for.
+ (gen_ptr_to_mbr_type_die): Likewise.
+ (gen_subprogram_die): Support AT_artificial.
+ (gen_variable_die): Likewise.
+ (dwarfout_file_scope_decl): Lose finalizing.
+
+Thu Oct 31 18:43:18 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * pa.c (emit_move_sequence): Refine previous change.
+
+Thu Oct 31 13:25:32 1996 Jim Wilson <wilson@cygnus.com>
+
+ * crtstuff.c: Put HAS_INIT_SECTION ifdefs around Irix6 support.
+
+ * tree.c (decl_function_context): Handle QUAL_UNION_TYPE.
+
+ * calls.c (expand_call): Disable special handling for const calls
+ that return a PARALLEL rtx.
+ * expr.c (expand_expr, case CONSTRUCTOR): Don't use a PARALLEL
+ target.
+
+Thu Oct 31 11:45:00 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/t-{ppcgas,ppc,solaris} (EXTRA_MULTILIB_PARTS): Add
+ {e,s}crt{i,n,0}.o.
+ ({stmp,install}-crt): Delete, no longer used.
+ ({,INSTALL_}LIBGCC): Remove {stmp,install}-crt rule.
+
+Thu Oct 31 02:49:58 1996 Torbjorn Granlund <tege@nada.kth.se>
+
+ * i386.md (parallel inc and branch-if-zero/nonzero):
+ Check for -1, not zero.
+
+Wed Oct 30 15:50:49 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (range_binop): Strip NOPs from result and
+ verify it's an INTEGER_CST.
+ (make_range, case BIT_NOT_EXPR): Fix typo in constant for PLUS_EXPR.
+
+ * stor-layout.c (layout_record): Use HOST_WIDE_INT for size.
+
+ * stmt.c (expand_asm_operands): Disallow matching constraints
+ on output and validate the numbers on inputs.
+
+Tue Oct 29 16:21:59 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * gcc.c (process_command,main): Process -specs=file and -specs
+ file after reading the main specs file to allow the user to
+ override the default.
+ (DEFAULT_WORD_SWITCH_TAKES_ARG): Add specs to list.
+ (option_map): Likewise.
+
+Tue Oct 29 15:49:18 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * Makefile.in (stmp-multilib): Pass $flags to s-m-sub in
+ MULTILIB_CFLAGS.
+ (stmp-multilib-sub): Build EXTRA_MULTILIB_PARTS.
+ ($(T)crt*.o): Add $(T), lose stamp-crt rule, use MULTILIB_CFLAGS.
+ (install-multilib): Install EXTRA_MULTILIB_PARTS.
+
+Mon Oct 28 20:09:39 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.md (shl_sext_ext): Don't accept simple left/right shift variant.
+ * sh.c (EXT_SHIFT_SIGNED): New macro.
+ (shl_sext_kind, gen_shl_sext): try left shift - sign extend -
+ left shift - arithmetic right shift in case 2.
+
+Mon Oct 28 14:55:42 1996 Jim Wilson <wilson@cygnus.com>
+
+ * configure (sh-*-*): Set float_format to sh.
+ * config/float-sh.h: New file.
+
+Mon Oct 28 14:26:08 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * mips/mips.h (RTX_COSTS): Add cases for SIGN_EXTEND and ZERO_EXTEND.
+
+ * m68k/lb1sf68.asm: Change # to IMM in udivsi3 __mcf5200__.
+
+ * combine.c (simplify_rtx): Add some optimizations for TRUNCATE.
+ (expand_compound_operation): Add some optimizations for ZERO_EXTEND.
+
+Mon Oct 28 14:11:20 1996 Gavin Koch <gavin@cygnus.com>
+
+ * varasm.c (make_decl_rtl,assemble_variable):
+ Allow named sections for uninitialized variables.
+
+Mon Oct 28 13:08:51 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * pa.c (emit_move_sequence): If reload in progress, replace
+ reference to pseudo with reference to corresponding MEM.
+
+ * c-typeck.c ({un,}signed_type): If can't do anything, call
+ signed_or_unsigned_type.
+ (signed_or_unsigned_type): If already right signedness, return.
+
+Mon Oct 28 13:05:26 1996 Stephen Williams (steve@icarus.com)
+
+ * i960.h: Add specification for -Jx types.
+ * i960/t-960bare: Include multilib support for Jx types.
+
+Mon Oct 28 10:06:00 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/t-{ppc{,gas},solaris} (install-crt): Depend on
+ installdirs, not install-dir.
+
+ * rs6000/sysv4.h (TARGET_TOC): -fpic does not use a TOC area.
+
+Mon Oct 28 09:07:42 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * reload1.c (delete_output_reload): Don't use delete_insn
+ when deleting all stores into a replaced pseudo.
+
+ * sh.md (movsf_ieq, movsf_ie): Merged the former into the latter.
+ Changed matching define_split appropriately.
+ (movsf): Changed appropriately.
+ (reload_insf) Define.
+ * sh.h (SECONDARY_INPUT_RELOAD_CLASS): Define.
+
+Mon Oct 28 08:38:23 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * dsp16xx.h (ASM_OUTPUT_BYTE): Adjust definition to actual type of
+ VALUE, which is HOST_WIDE_INT.
+
+Mon Oct 28 07:36:07 1996 Ulrich Drepper <drepper@cygnus.com>
+
+ * ginclude/stddef.h: Make sure file is processed if some of the
+ known __need_* macros is defined.
+
+Sun Oct 27 21:37:59 1996 J.T. Conklin <jtc@cygnus.com>
+
+ * m68k.c (output_function_prologue): Adjust SP then use movmel with
+ plain address indirect mode for TARGET_5200.
+ (output_function_epilogue): Disable moveml and use several movel's
+ instead for TARGET_5200.
+ (output_function_{pro,epi}logue): Use lea instruction to adjust
+ stack pointer for short displacements for TARGET_5200.
+
+Sun Oct 27 15:27:45 1996 Jeffrey A Law (law@cygnus.com)
+
+ * fold-const.c (merge_ranges): Fix thinko/typo.
+
+Sat Oct 26 22:07:04 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * expr.c (convert_modes): Before returning a const_double for a
+ large unsigned value, zero extend an integer value if necessary.
+
+Sat Oct 26 15:24:55 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * m68k/x-mot3300 (XCFLAGS): Disable native assembler's jump
+ optimization for expr.o and cp/decl.o.
+
+Sat Oct 26 14:04:09 1996 Ben Harris <bjh21@cam.ac.uk>
+
+ * m68k.c (output_function_prologue): Add REGISTER_PREFIX to stack
+ probe instruction.
+
+Sat Oct 26 13:59:05 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * explow.c (allocate_dynamic_stack_space): Delete reference to
+ nonexistant macro ALLOCATE_OUTGOING_ARGS.
+
+ * next.h (CPP_PREDEFINES): Add -D_NEXT_SOURCE.
+
+Sat Oct 26 13:50:49 1996 Mark Mitchell (mitchell@centerline.com)
+
+ * configure (i486-ncr-sysv4*): Use i386/sysv4gdb if stabs and gas.
+
+Sat Oct 26 12:20:35 1996 John F. Carr <jfc@mit.edu>
+
+ * configure: Support --with-cpu=* for SPARC. Or target default
+ values instead of adding them.
+ * sparc.c (cpu_default): Add entries for v8 and supersparc.
+ * sparc.h: Define TARGET_CPU values for v8 and supersparc.
+
+Sat Oct 26 11:38:01 1996 Kamil Iskra <iskra@student.uci.agh.edu.pl>
+
+ * collect2.c (dump_file): Call fclose for opened files.
+
+Sat Oct 26 11:29:29 1996 J"orn Rennecke (amylaar@cygnus.co.uk)
+
+ * jump.c (jump_optimize): Fix second error in last change.
+
+ * svr3.h: Fix typo which makes comment text be non-comment.
+
+Fri Oct 25 16:18:39 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/t-winnt (LIBGCC1): Don't build libgcc1.
+ (EXTRA_PARTS): Build crti.o, crtn.o.
+ (stmp-crt): Remove old multilib support.
+
+Thu Oct 24 15:09:14 1996 Jim Wilson <wilson@cygnus.com>
+
+ * fold-const.c (make_range, case PLUS_EXPR): Normalize an unsigned
+ range that wraps around 0.
+
+Thu Oct 24 14:37:17 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * mips.md: Change predicates for 64 bit arithmetic operations
+ so that they accept sign extended registers as operands.
+ (extendsidi2): Accept hi or lo as input.
+ * mips.c (movdi_operand, se_register_operand,
+ se_reg_or_0_operand, se_uns_arith_operand, se_arith_operand,
+ se_nonmemory_operand, se_nonimmediate_operand): New functions.
+ (mips_move_2words): Handle a SIGN_EXTEND source.
+ (print_operand): Handle a SIGN_EXTEND operand.
+ (mips_secondary_reload_class): Handle a SIGN_EXTEND rtx.
+ * mips.h: Declare new mips.c functions.
+ (PREDICATE_CODES): Add new functions.
+
+Thu Oct 24 07:41:14 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (make_range, comparison cases): When making range
+ for unsigned to merge in, use full range.
+
+ * stor-layout.c (GET_MODE_ALIGNMENT): Delete definition; duplicate.
+
+Thu Oct 24 07:28:53 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * reload1.c (emit_reload_insns): Check for second_reloadreg
+ in SECONDARY_OUTPUT_RELOAD_CLASS / PRESERVE_DEATH_INFO_REGNO_P case.
+
+Wed Oct 23 14:27:43 1996 Mike Stump <mrs@cygnus.com>
+
+ * crtstuff.c (__do_global_dtors_aux): Allow finalization code to
+ be run more than once.
+ * libgcc2.c (__do_global_dtors): Ditto.
+
+Wed Oct 23 20:42:23 1996 Joern Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.c (dump_table): handle SFmode and DFmode.
+ (broken_move): handle simple PARALLEL.
+ (machine_dependent_reorg, pc-relative move generation): Likewise.
+ * sh.h (CONST_DOUBLE_OK_FOR_LETTER_P): always true for 'F' .
+ (LEGITIMATE_CONSTANT_P): accept SFmode and DFmode.
+ * sh.md (movdf_k, movsf_i, movsf_ie): new alternative for
+ pc-relative load.
+ (movsf_ieq): new define_insn with matching define_split.
+ (movsf): use it where appropriate.
+ (consttable_sf, consttable_df): new define_insns.
+
+Wed Oct 23 17:48:32 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * svr4.h (MAKE_DECL_ONE_ONLY): Fix typo in use of macro parameter.
+
+Wed Oct 23 17:46:13 1996 Pat Rankin <rankin@eql.caltech.edu>
+
+ * cexp.y (yylex): Cast string literal to U_CHAR* for lookup() call.
+
+Wed Oct 23 14:50:04 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * stmt.c (expand_return): Expand cleanups. Make sure we get pseudo
+ and provide target in non-BLKmode case. Get proper return type of fn.
+
+Wed Oct 23 14:16:06 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * reload.c (find_reloads): Handle any unary operator.
+ * recog.c (constrain_operands): Likewise.
+
+ * mips.md: Remove extendsidi2 define_expand.
+ Rename extendsidi2_internal define_insn to extendsidi2, and add a
+ register to register case.
+
+Wed Oct 23 14:08:31 1996 Jim Wilson <wilson@cygnus.com>
+
+ * a29k.c (a29k_makes_calls): New global variable.
+ (compute_regstack_size, a29k_compute_reg_names): New functions.
+ (output_prolog): Much code moved to two new functions.
+ Use a29k_makes_calls instead of makes_calls.
+ * a29k.h (ASM_DECLARE_FUNCTION_NAME): Call a29k_compute_reg_names.
+
+ * calls.c (expand_call): In target code, move PARALLEL case above
+ target != case.
+
+ * mips.c (block_move_load_store, block_move_sequence): Delete.
+ (block_move_loop): New parameter orig_dest. Call change_address to
+ create new MEM instead of gen_rtx.
+ (expand_block_move): New local orig_dest. Pass it to block_move_loop.
+ Call change_address to create new MEM instead of gen_rtx.
+
+Wed Oct 23 10:30:32 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * loop.c (combine_givs): When combining a DEST_REG giv with its
+ only use, always set the benefit of the combined giv to that of
+ the DEST_REG giv.
+
+ * emit-rtl (gen_lowpart_common): When converting a floating
+ point value into an integer, use WORD as (first) word.
+
+ * combine.c (can_combine_p): When SMALL_REGISTER_CLASSES is defined,
+ avoid substituting a return register into I3.
+
+ * optabs.c (emit_libcall_block): Before adding an REG_EQUAL note,
+ check that it will really apply to a single instruction.
+ (expand_binop, expand_fix): Likewise.
+
+Wed Oct 23 10:20:52 1996 Stephen L Moshier (moshier@world.std.com)
+
+ * real.c (exact_real_inverse): New function, if REAL_ARITHMETIC.
+ * fold-const.c (exact_real_inverse): Likewise, if no REAL_ARITHMETIC.
+ (fold, case RDIV_EXPR): Turn divide by constant into multiplication
+ by the reciprocal, if optimizing and result is exact.
+ * real.h (exact_real_inverse): Declare.
+
+Wed Oct 23 00:12:52 1996 Torbjorn Granlund <tege@nada.kth.se>
+
+ * expr.h (emit_store_flag_force): Declare.
+
+Tue Oct 22 18:32:20 1996 Jim Wilson <wilson@cygnus.com>
+
+ * unroll.c (unroll_loop): Always reject loops with unbalanced blocks.
+
+Tue Oct 22 18:27:06 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * config/fp-bit.c (float_to_usi): Correct thinko: avoid negative shift.
+ (df_to_sf): Remember any discarded nonzero bits in the low order
+ guard bit.
+
+ * ginclude/va-mips.h: Add support for -mips1 and -msoft-float when
+ using -mabi=eabi.
+ * mips/abi64.h (SETUP_INCOMING_VARARGS): When MIPS EABI, handle
+ TARGET_SINGLE_FLOAT or ! TARGET_FLOAT64 correctly when saving
+ floating point registers to the stack.
+ * mips/mips.c (mips_function_value): If TARGET_SINGLE_FLOAT, use
+ GP_RETURN for floating point types larger than 4 bytes.
+
+Tue Oct 22 09:43:49 1996 Geoffrey Noer <noer@cygnus.com>
+
+ * rs6000/cygwin32.h (LIB_SPEC): Add -lkernel32 all of the time,
+ and {user,gdi,comdlg}32 if -mwindows.
+
+Tue Oct 22 05:24:05 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c (scope_die_for): Don't skip lexical blocks.
+ (gen_lexical_block_die): Call push_decl_scope.
+ (gen_subprogram_die): Never refer to the function symbol.
+ (dwarfout_begin_prologue): Likewise.
+
+Mon Oct 21 20:22:49 1996 Torbjorn Granlund <tege@nada.kth.se>
+
+ * expmed.c (emit_store_flag_force): New function.
+ * optabs.c (expand_binop): Use it.
+
+ * expr.c (do_store_flag): Don't check if target is 0 in code
+ emitting store flag as compare-branch.
+
+Mon Oct 21 17:58:33 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * mips.c (override_options): Correct typo (MASK_64BIT should
+ have been TARGET_64BIT).
+
+Mon Oct 21 13:58:54 1996 Jim Wilson <wilson@cygnus.com>
+
+ * unroll.c (loop_comparison_code): New static variable.
+ (unroll_loop): Add check for loop_comparison_code
+ (loop_iterations): Set loop_comparison_code.
+
+ * sh.c (gen_shl_sext): Add missing parameter to shl_sext_kind call.
+
+ * mips.h (INITIAL_FRAME_POINTER_OFFSET): Delete.
+
+ * loop.c (strength_reduce): Add check for ! bl->reversed to
+ auto_inc_opt code.
+
+Mon Oct 21 12:28:15 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * jump.c (jump_optimize): Fix bug in Oct. 14 change.
+
+Mon Oct 21 07:59:16 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (store_expr): Disable optimization of using convert
+ if exp's type is a subtype.
+
+ * c-typeck.c (build_array_ref): If -Wchar-subscripts, also warn
+ in case when pointer is being indexed.
+
+Mon Oct 21 07:39:31 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * jump.c (jump_optimize): Use emit_store_flag even if branches
+ are cheap, if the store is even cheaper.
+
+Sun Oct 20 20:01:09 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload_reg_free_p, reloads_conflict): RELOAD_OTHER
+ and RELOAD_FOR_OTHER_ADDRESS conflict.
+
+ * i386.md (ffs[sh]i2): Add missing CC_STATUS_INIT.
+
+Fri Oct 18 13:32:13 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.md (float conversion insns): Generate correct code
+ if the bit 15 of rs6000_fpmem_offset is non-zero.
+
+Thu Oct 17 23:22:03 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarfout.c (data_member_location_attribute): Support binfos.
+ (output_inheritance_die): New fn.
+ (output_type): Use it.
+
+ * dwarf2out.c (value_format): Split out from...
+ (output_value_format): Here.
+ (build_abbrev_table): Use value_format.
+ (size_of_locs): New fn.
+ (size_of_die): Don't assume a loc needs a 2-byte length.
+ (value_format, output_die): Likewise.
+
+Thu Oct 17 14:46:14 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * mips.c (override_options): In 64 bit EABI mode, set TARGET_LONG64.
+
+Thu Oct 17 11:34:51 1996 Bob Manson <manson@cygnus.com>
+
+ * expr.c (do_jump): Conditionalize cleanups for the COND_EXPR case,
+ similarly to the way TRUTH_ANDIF_EXPR and TRUTH_ORIF_EXPR are
+ handled.
+
+Thu Oct 17 01:20:16 1996 Jim Wilson <wilson@cygnus.com>
+
+ * m68k.h (MASK_68040_ALSO): New macro.
+ (TARGET_SWITCHES): Option -m68020-40 includes MASK_68040_ALSO.
+
+Wed Oct 16 16:25:38 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c (scope_die_for): Also support decls, add asserts.
+ (modified_type_die): Modified types all go under comp_unit_die.
+ (add_type_attribute): Just pass context_die through.
+ (various): Revert useless lookup_type_die change.
+ (gen_subprogram_die): Use scope_die_for. Call push_decl_scope.
+ (gen_inlined_subroutine_die): Call push_decl_scope.
+ (gen_struct_or_union_type_die): Likewise.
+ (gen_decl_die): Don't call push_decl_scope.
+
+ * mips/iris6.h (*_SPEC): Replace enumeration of !mabi= with !mabi*.
+ (ASM_OUTPUT_{CON,DE}STRUCTOR): Enable.
+ (STARTFILE_SPEC): Support -mips4, -shared.
+ (ENDFILE_SPEC): Likewise.
+ (LIB_SPEC): Support -shared, avoid warning 84.
+ (LIBGCC_SPEC): Define.
+ (LINK_SPEC): Support -shared, remove -woff 84.
+ * mips/t-iris6 (EXTRA_PARTS): Add crtstuff.
+ * crtstuff.c: Support Irix 6.
+ * configure: Don't use collect2 for Irix 6.
+ * libgcc2.c (__main): Don't use any of this stuff if HAS_INIT_SECTION.
+
+Wed Oct 16 11:46:37 1996 Mike Stump <mrs@cygnus.com>
+
+ * elxsi.h (CHECK_FLOAT_VALUE): Removed.
+
+Wed Oct 16 14:19:38 1996 Jim Wilson <wilson@cygnus.com>
+
+ * iris6.h (CPP_PREDEFINES): Add -D_LONGLONG.
+ (CPP_SPECS): Remove -D_LONGLONG.
+
+Wed Oct 16 03:34:42 1996 Torbjorn Granlund <tege@nada.kth.se>
+
+ * i386.md (parallel inc/dec and branch-if-zero/nonzero): New patterns.
+
+Tue Oct 15 22:28:11 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * mips.h (enum mips_abi_type): Add ABI_EABI.
+ (CPP_SPEC): Define __mips_soft_float if -msoft-float, and
+ __mips_eabi if -mabi=eabi.
+ (INITIAL_ELIMINATION_OFFSET, CUMULATIVE_ARGS,
+ GO_IF_LEGITIMATE_ADDRESS, CONSTANT_ADDRESS_P, LEGITIMATE_CONSTANT,
+ LEGITIMIZE_ADDRESS): Add support for MIPS EABI.
+ * mips/abi64.h (STACK_BOUNDARY, MIPS_STACK_ALIGN,
+ FUNCTION_ARG_PADDING, RETURN_IN_MEMORY, SETUP_INCOMING_VARARGS):
+ Add support for MIPS EABI.
+ (FUNCTION_ARG_PASS_BY_REFERENCE): Define.
+ (FUNCTION_ARG_CALLEE_COPIES): Define.
+ * mips.c (mips_const_double_ok, function_arg_advance,
+ function_arg, function_arg_partial_nregs, override_options,
+ compute_frame_size): Add support for MIPS EABI.
+ (function_arg_pass_by_reference): New function.
+ * ginclude/va-mips.h: Add support for MIPS EABI.
+
+Tue Oct 15 19:10:08 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * toplev.c (rest_of_type_compilation): Don't write out
+ DWARF for function-scope types yet.
+ (compile_file): Do send vars with no RTL to the DWARF code.
+
+Tue Oct 15 17:54:43 1996 Doug Evans <dje@cygnus.com>
+
+ * loop.c (strength_reduce): Avoid taking PATTERN of a label.
+
+Tue Oct 15 16:52:33 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * mips/iris6.h: (SUBTARGET_CPP_SIZE_SPEC): Define.
+ (SUBTARGET_CPP_SPEC): Remove definitions of __SIZE_TYPE__ and
+ __PTRDIFF_TYPE__, now in SUBTARGET_CPP_SIZE_SPEC.
+
+Tue Oct 15 11:19:17 1996 Lee Iverson <leei@Canada.AI.SRI.COM>
+
+ * mips.h (CPP_SPEC): Restore -D_LANGUAGE_C for Objective C.
+
+Mon Oct 14 18:03:35 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c (gen_decl_die): Do generate dies for classes with -g1.
+ (dwarfout_file_scope_decl): Likewise.
+
+Mon Oct 14 16:31:44 1996 Joern Rennecke <amylaar@cygnus.co.uk>
+
+ * jump.c (jump_optimize): Check for if (...) { x = a; goto l; } x = b;
+
+Mon Oct 14 14:19:49 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c (modified_type_die): Don't bother with AT_address_class.
+ (add_data_member_location_attribute): Handle getting a binfo.
+ (add_location_or_const_value_attribute): Handle a decl with no RTL.
+ (add_pure_or_virtual_attribute): Add AT_vtable_elem_location.
+ (add_name_and_src_coords_attributes): Only use DECL_ASSEMBLER_NAME
+ for staticp things.
+ (gen_subprogram_die): Set up AT_inline for abstract decls.
+ (gen_inheritance_die): New fn.
+ (gen_member_die): Also emit info for base classes.
+
+Sat Oct 12 00:07:00 1996 Doug Evans <dje@cygnus.com>
+
+ * fold-const.c (make_range): Handle NULL operand 0 like in BIND_EXPRs.
+
+Fri Oct 11 15:42:22 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * toplev.c (rest_of_compilation): If we did a
+ save_for_inline_copying, reset DECL_ABSTRACT_ORIGIN for the
+ function when we're done.
+
+ * toplev.c (main): DWARF works with C++ now.
+
+ * dwarf2out.c (gen_subprogram_die): Disable MIPS_AT_has_inline
+ support for now.
+
+Fri Oct 11 14:31:10 1996 Torbjorn Granlund <tege@nada.kth.se>
+
+ * dwarfout.c: (output_bound_representation): Fix typo in prototype.
+
+Fri Oct 11 12:19:21 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * mips.h ({,SUBTARGET_}MIPS_AS_ASM_SPEC): Define.
+ ({GAS,TARGET,SUBTARGET}_ASM_SPEC): Define.
+ (SUBTARGET_ASM_{OPTIMIZING,DEBUGGING}_SPEC): Define.
+ (ASM_SPEC): Rewrite to use above specs.
+ (SUBTARGET_CPP{,_SIZE}_SPEC): Define.
+ (CPP_SPEC): Use above specs. Don't define _LANGUAGE_C if C++ or
+ Objective C.
+ ({,SUBTARGET_}EXTRA_SPECS): Define.
+ * mips/dec-bsd.h ({CPP,ASM}_SPEC): Don't define.
+ * mips/dec-osf1.h (CPP_SPEC): Don't define.
+ (SUBTARGET_CPP_SIZE_SPEC): Define.
+ * mips/elf64.h (CPP_SPEC): Don't define.
+ (SUBTARGET_CPP_SPEC): Define.
+ * mips/gnu.h (TARGET_DEFAULT): Define.
+ (ASM_SPEC): Don't define.
+ * mips/iris3.h (CPP_SPEC): Don't define.
+ (SUBTARGET_CPP_SPEC): Define.
+ * mips/iris4loser.h (ASM_SPEC): Don't define.
+ (SUBTARGET_MIPS_AS_ASM_SPEC): Define.
+ (SUBTARGET_ASM_OPTIMIZING_SPEC): Define.
+ * mips/iris5.h (CPP_SPEC): Don't define.
+ (SUBTARGET_CPP_SPEC): Define.
+ * mips/iris6.h ({CPP,ASM}_SPEC): Don't define.
+ (SUBTARGET_{CPP,ASM,MIPS_AS_ASM,ASM_DEBUGGING}_SPEC): Define.
+ * mips/netbsd.h ({CPP,ASM}_SPEC): Don't define.
+ (SUBTARGET_CPP_SPEC): Define.
+ * mips/osfrose.h ({CPP,ASM,ASM_FINAL}_SPEC): Don't define.
+ (SUBTARGET_CPP{,_SIZE}_SPEC): Define.
+ * mips/sni-svr4.h (CPP_SPEC): Don't define.
+ (SUBTARGET_CPP_SIZE_SPEC): Define.
+
+Thu Oct 10 17:58:49 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * mips/iris6.h (ASM_OUTPUT_SECTION_NAME): Define.
+ (DWARF_OFFSET_SIZE): Define.
+
+ * dwarf2out.c (most everywhere): Support SGI/MIPS -mabi=64 by fixing
+ code which assumed pointers are 4 bytes long, parameterizing many
+ sizes on DWARF_OFFSET_SIZE and using DELTA instead of DELTA4,
+ DATA instead of DATA4, FORM_ref instead of FORM_ref4.
+ (DWARF_ROUND, UNALIGNED_DOUBLE_INT_ASM_OP): New macros.
+ (UNALIGNED_WORD_ASM_OP, ASM_OUTPUT_DWARF_DELTA): Likewise.
+ (ASM_OUTPUT_DWARF_DATA, DW_FORM_data, DW_FORM_ref): New macros.
+ (gen_variable_die): Only equate_decl_number_to_die if
+ decl is TREE_STATIC.
+ (get_AT): Fix thinko.
+
+ * dwarf2out.c (constant_size): New fn.
+ (size_of_die): Use it instead of assuming 4 bytes.
+ (output_value_format, output_die): Likewise.
+ (build_abbrev_table): Need new abbrev if size of constant differs.
+ (dwarf_attr_name): Add new SGI/MIPS extensions.
+ (gen_subprogram_die): Support DW_AT_MIPS_has_inlines.
+ (gen_inlined_subroutine_die): Likewise.
+
+Thu Oct 10 16:38:58 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * mips.md (mov[sd]fcc): Use register_operand, not reg_or_0_operand,
+ for source predicates.
+
+Thu Oct 10 15:19:38 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.md (floatsidf2_load): For large stack frames, do not
+ generate an illegal memory reference.
+ (movdi, movdf define_splits): Fix code so that it works for either
+ big or little endian hosts generating code for either big or
+ little endian targets.
+
+ (from Jim Wilson)
+ * rs6000.c (rs6000_save_toc_p): Delete global variable.
+ (rs6000_{save,restore}_machine_status): Do not save/restore it.
+ (rs6000_init_expanders): Do not initialize it.
+ (rs6000_stack_info): Always create TOC save space.
+
+ * rs6000.md (NT indirect call insns): Do not set
+ rs6000_save_toc_p.
+
+ * rs6000.h (rs6000_save_toc_p): Delete declaration.
+
+Wed Oct 9 18:06:54 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * mips.h (EMPTY_FIELD_BOUNDARY): Define as 32.
+ * mips/abi64.h (EMPTY_FIELD_BOUNDARY): Don't define.
+
+ * mips/abi64.h (TARGET_DEFAULT, TARGET_LONG64, CPP_PREDEFINES,
+ CPP_SPEC): Move from here...
+ * mips/iris6.h: ...to here.
+
+Wed Oct 9 16:43:51 1996 Jim Wilson <wilson@cygnus.com>
+
+ * configure (i[3456]86-dg-dgux): Use install-headers-cpio.
+
+ * expr.c (store_constructor): Delete unnecessary increment.
+
+Wed Oct 9 16:29:22 1996 Gavin Koch <gavin@cetus.cygnus.com>
+
+ * cccp.c (do_include): Treat ENOTDIR like ENOENT when an open fails.
+
+Wed Oct 9 16:26:57 1996 Paul Eggert <eggert@twinsun.com>
+
+ * gcc.c (default_compilers): -ansi no longer implies -$ to cpp.
+ * c-lex.c (yylex): Treat `$' just like `_', except issue a
+ diagnostic if !dollars_in_ident or if pedantic.
+ * c-decl.c (dollars_in_ident): DOLLARS_IN_IDENTIFIERS is now Boolean.
+ (c_decode_option): -fdollars-in-identifiers is now independent
+ of -ansi, of -traditional, and of DOLLARS_IN_IDENTIFIERS.
+ * cexp.y (initialize_random_junk): Ignore DOLLARS_IN_IDENTIFIERS.
+ * cccp.c (dollars_in_ident): Remove; replaced by is_idchar['$'].
+ (main): Initialize is_idchar and is_idstart directly when given -$.
+ Ignore DOLLARS_IN_IDENTIFIERS.
+ (rescan): Diagnose $ in identifier if pedantic.
+ (initialize_char_syntax): Assume $ is allowed in identifier;
+ `main' will change this if -$ is given.
+ * cpplib.h (DOLLARS_IN_IDENTIFIERS): Remove.
+ * cpplib.c (cpp_options_init): Ignore DOLLARS_IN_IDENTIFIERS.
+ (parse_name): Diagnose $ in identifier if pedantic.
+ (cpp_handle_options): -traditional no longer messes with
+ dollars_in_ident.
+ * i386/dgux.h, m68k/apollo68.h (DOLLARS_IN_IDENTIFIERS): Remove.
+ * m88k.h, mips.h, nextstep.h, pa.h (DOLLARS_IN_IDENTIFIERS): Remove.
+ * vax/ultrix.h, vax/vms.h (DOLLARS_IN_IDENTIFIERS): Remove.
+ * convex.h (OVERRIDE_OPTIONS): Don't need to set
+ dollars_in_ident any more, since -ansi doesn't change it.
+
+Wed Oct 9 07:35:47 1996 Doug Evans <dje@cygnus.com>
+
+ * Allow prefix attributes in more places.
+ * c-parse.in: Update number of shift/reduce conflicts.
+ ({typed_declspecs,reserved_declspecs,declmods}_no_prefix_attr): New.
+ (current_declspecs): Initialize to NULL_TREE.
+ (fndef): Pass current_declspecs, not $1, to start_function.
+ (old_style_parm_decls): Renamed from xdecls.
+ (datadecl, declmods): Add references to new rules.
+ (setspecs): Call split_specs_attrs.
+ (absdcl1): Remove case with setattrs.
+ * c-common.c (split_specs_attrs): New function.
+
+Wed Oct 9 05:48:43 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * sdbout.c: Include defaults.h.
+ * Makefile.in (sdbout.o): Make dependency list match included files.
+
+ * fold-const.c (range_test): Function deleted.
+ (range_binop, make_range, build_range_check): New functions.
+ (merge_ranges, fold_range_test): Likewise.
+ (fold_truthop): No longer call range_test.
+ (fold, case TRUTH_{AND,OR}{,IF}_EXPR): Call fold_range_test.
+
+Tue Oct 8 22:03:32 1996 Torbjorn Granlund <tege@nada.kth.se>
+
+ * configure: Set cpu_type for pyramid.
+
+Tue Oct 8 21:54:04 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * final.c (final_start_function): Call dwarfout_begin_prologue.
+
+ * dwarf2out.c (pubname_*, arange_*): New data for .debug_pubnames
+ and .debug_aranges sections.
+ (add_pubname): New fn.
+ (size_of_pubnames): Reimplement.
+ (output_pubnames): Likewise.
+ (add_arange): New fn.
+ (size_of_aranges): Include function sections.
+ (output_aranges): Likewise.
+ (gen_variable_die): Call add_pubname.
+ (add_name_and_src_coords_attributes): Use DECL_ASSEMBLER_NAME for now.
+ (decl_start_label): Renamed from function_start_label.
+ (gen_subprogram_die): If weak or one_only, use a local label for
+ AT_low_pc. Call add_pubname and add_arange.
+ (dwarfout_begin_prologue): New fn. Start up FDE here.
+ (dwarfout_begin_function): Not here.
+ (get_AT): Split out. Look in specification and abstract_origin DIEs.
+ (get_AT_low_pc, get_AT_string, get_AT_flag, get_AT_unsigned,
+ get_AT_hi_pc): Use it.
+ (dwarfout_finish): Variables can produce pubnames, too.
+
+Tue Oct 8 19:35:40 1996 Torbjorn Granlund <tege@nada.kth.se>
+
+ * m88k/dgux.h (CPP_SPEC): Avoid newline in the string.
+
+ * final.c (final): Update insn_current_address before calling
+ final_scan_insn.
+
+Tue Oct 8 17:52:02 1996 Jim Wilson <wilson@cygnus.com>
+
+ * unroll.c (unroll_loops): Set local_regno only if set_dominates_use
+ returns true.
+ (set_dominates_use): New function.
+
+Tue Oct 8 16:01:37 1996 Doug Evans <dje@cygnus.com>
+
+ * c-typeck.c (decl_constant_value): Delete test for ! TREE_PUBLIC.
+
+Tue Oct 8 10:36:44 1996 Jeffrey A Law (law@cygnus.com)
+
+ * pa.c (hppa_legitimize_address): Remove test code accidentally left
+ in during last change.
+
+Mon Oct 7 19:55:02 1996 Jim Wilson <wilson@cygnus.com>
+
+ * sched.c (schedule_block): Before scheduling, add code to make all
+ call used regs not fixed or global live when we see a CALL_INSN.
+ During scheduling, change existing code to use same test.
+
+ * varasm.c (bss_section): Delete unused parameters.
+
+Mon Oct 7 16:24:21 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2.h: Add new SGI/MIPS attributes.
+
+ * dwarf2out.c (*_separate_line_info_*): Parallel line number
+ information for functions defined in sections other than .text.
+ (size_of_line_info): Support it.
+ (output_line_info, dwarfout_line): Likewise.
+ (gen_compile_unit_die): Don't add high/low_pc or stmt_list
+ attributes here.
+ (dwarfout_finish): Add them here if appropriate.
+ (remove_AT): Free removed attribute properly.
+ (gen_type_die): Don't assume a nested type is complete.
+ (dwarfout_finish): Don't emit line info if it would be empty.
+
+ * dwarfout.c (output_block): Don't emit a DIE for a body block.
+ (output_decls_for_scope): Don't increment next_block_number for the
+ outer block.
+ (output_decl): Start from the outer block, not
+ the first inner block since there can be more than one in C++.
+ (type_tag): Handle C++ TYPE_NAME.
+ (output_type): Fix handling of TYPE_METHODS.
+ (output_decl): Don't output a DIE for artificial typedefs.
+
+Mon Oct 7 15:47:29 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.md (movdi define_splits): Fix previous change to work
+ on both little and big endian hosts.
+
+Sun Oct 6 16:52:34 1996 Jeffrey A Law (law@cygnus.com)
+
+ * pa.h (combinable_fsub): Don't return without a value.
+
+Sun Oct 6 14:05:39 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.md (mov{df,di} define_splits): Use split_double to
+ properly split CONST_DOUBLEs.
+ (movdi): Likewise.
+
+Sat Oct 5 08:43:14 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * i386/cygwin32.h (LIB_SPEC): Add support for -mwindows.
+ Always pass -lkernel32.
+ (LIBGCC_SPEC): Don't delete.
+ (STARTFILE_SPEC): Remove always-true conditionalization.
+ (LONG_DOUBLE_TYPE_SIZE): Use default.
+
+Fri Oct 4 17:22:53 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * toplev.c (rest_of_type_compilation): Don't emit DWARF for member
+ types of a type we haven't emitted yet.
+ (compile_file): Still emit DWARF for pending tagged types.
+
+ * final.c (final_scan_insn): Do emit DWARF labels for level 1 blocks.
+
+ * dwarf2out.c (gen_subprogram_die): Start from the outer block, not
+ the first inner block since there can be more than one in C++.
+ (gen_lexical_block_die): Keep track of the block depth.
+ (gen_block_die): Don't emit a DIE for a body block.
+ (gen_inlined_subroutine_die): Don't emit anything for an
+ abstract instance.
+ (decls_for_scope): Don't increment next_block_number for the
+ outer block.
+
+Fri Oct 4 15:27:55 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.h (PRESERVE_DEATH_INFO_REGNO_P): Define.
+
+ * sh.c (sfunc_uses_reg): New function.
+ (noncall_uses_reg, machine_dependent_reorg, final_prescan_insn):
+ Handle special functions like function calls for purposes of relaxing.
+ (noncall_uses_reg): Added some missing cases of registers
+ being used in non-call instructions.
+
+Fri Oct 4 10:51:40 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c: Tear out backchaining brain damage.
+ (remove_AT, remove_children): New functions.
+ (modified_type_die): Call gen_type_die instead of backchaining.
+ (gen_subprogram_die): Don't generate a new specification DIE for
+ member functions defined in the class; use the declaration DIE instead.
+ (gen_struct_or_union_type_die): Support DW_AT_declaration.
+ (gen_type_die): Don't set TREE_ASM_WRITTEN on incomplete structs.
+ (gen_decl_die): Revert previous change; it's much simpler to emit
+ the class from rest_of_type_compilation.
+
+Fri Oct 4 09:54:21 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * Make sure we have enough registers for the insns we recognize.
+ * i386.h (flag_omit_frame_pointer, outer_function_chain): Declare.
+ (current_function_calls_alloca): Likewise
+ (rtx_equal_function_value_matters): Likewise
+ (N_REGS_USED, N_ALLOCATABLE_REGISTERS): Define.
+
+ * i386.md (adddi3_1, subdi3_1): Insns renamed from adddi3 and subdi3;
+ added missing earlyclobbers.
+ (adddi3_1): Removed duplicates from commutativity.
+ (adddi3, subdi3): New define_expands.
+ (movsf, movsf_mem, movsf_normal, movdf, movdf_mem , movdf_mem+1): Take
+ number of used vs. available registers into account.
+ (movxf, movxf_mem, movxf_mem+1, addsidi3_1, addsidi3_2): Likewise.
+ (adddi3_1, subsidi3, subdi3_1): Likewise.
+ (addsidi3_1, addsidi3_2, subsidi3): Need no generate function.
+
+ * i386.c (asm_output_function_prefix): Don't use
+ ASM_DECLARE_FUNCTION_NAME if it is not defined.
+
+Fri Oct 4 07:01:55 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * stor-layout.c (layout_decl): Don't turn off DECL_BIT_FIELD
+ if DECL's alignment is less than its type.
+
+Thu Oct 3 19:42:30 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * toplev.c (rest_of_type_compilation): Also do this for DWARF.
+ (compile_file): Don't try to write out DWARF for vars with no RTL.
+
+Thu Oct 3 18:31:28 1996 Doug Evans <dje@cygnus.com>
+
+ * ginclude/{stdarg.h,varargs.h}: Use #include "", not #include <>.
+
+Wed Oct 2 17:29:53 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * fixincludes: Add a hack to the big sed script to work around a
+ bug in the sed implementation on HP/UX 10.20.
+
+Wed Oct 2 16:53:56 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c (modified_type_die): Don't generate redundant DIEs.
+ (gen_{array,pointer,reference,ptr_to_mbr}_type_die): Likewise.
+ (gen_{subroutine,string,set}_type_die): Likewise.
+
+ * dwarf2out.c: Undo text_end_label, add_src_coords changes.
+ (addr_const_to_string): Fix typos.
+ (decl_class_context, get_AT_unsigned): New functions.
+ (gen_subprogram_die): Only emit src coords info for a specification
+ if they changed.
+ (gen_variable_die): Support DW_AT_declaration and DW_AT_specification.
+ (gen_decl_die): Avoid generating redundant DIEs for member functions
+ and variables.
+
+Wed Oct 2 11:22:50 1996 Jeffrey A Law (law@cygnus.com)
+
+ * pa.h (EXTRA_CONSTRAINT): Loosen conditions for match of
+ 'Q' and 'T' while reload is running.
+ * pa.c (hppa_legitimize_address): Rework to generate more
+ indexed and scaled indexed addressing.
+ * pa.md (scaled indexed store): Add define_splits to undo
+ pessimizations created by hppa_legitimize_address for integer stores.
+
+ * pa.c (remove_useless_addtr_insns): New function.
+ (pa_reorg): Delete code to remove useless add,tr insns.
+ Instead call remove_useless_addtr_insns.
+ (output_function_prologue): Call remove_useless_addtr_insns
+ to catch any add,tr insns created by reorg.
+
+ * pa.c (secondary_reload_class): Remove duplicate/useless code.
+
+ * pa.h (PARSE_LDD_OUTPUT): Handle output from hpux10.20 "chatr".
+
+Tue Oct 1 17:23:32 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dwarf2out.c (text_end_label): New static.
+ (size_of_line_info): The final entry is smaller.
+ (output_aranges): Use TEXT_SECTION instead of TEXT_BEGIN_LABEL and
+ text_end_label instead of TEXT_END_LABEL.
+ (gen_compile_unit_die): Likewise.
+ (output_line_info): Likewise. Use a fixed advance for the last entry.
+ (dwarfout_init): Don't output starting labels.
+ (dwarfout_finish): Set up text_end_label. Don't output ending labels.
+
+ (add_pure_or_virtual_attribute): Don't say pure virtual for now.
+ (type_tag): Handle C++ TYPE_NAME.
+ (gen_formal_parameter_die): Support DW_AT_artificial.
+ (gen_formal_types_die): Do emit the type for 'this'.
+ (gen_member_die): Fix handling of TYPE_METHODS.
+ (gen_decl_die): Do output a DIE for member function declarations.
+ Don't output a DIE for artificial typedefs.
+
+ (add_member_attribute): Remove, not in DWARF-II.
+ (gen_array_type_die): Remove ref to add_member_attribute.
+ (gen_set_type_die, gen_entry_point_die, gen_enumeration_type_die,
+ gen_subprogram_die, gen_variable_die, gen_field_die,
+ gen_pointer_type_die, gen_reference_type_die, gen_ptr_to_mbr_type_die,
+ gen_string_type_die, gen_struct_or_union_type_die,
+ gen_subroutine_type_die, gen_typedef_die): Likewise.
+
+ (get_AT_flag): New fn.
+ (add_src_coords_attributes): Split out...
+ (add_name_and_src_coords_attributes): From here.
+ (gen_subprogram_die): Support DW_AT_declaration and
+ DW_AT_specification.
+
+ (gen_compile_unit_die): Don't emit full pathname for source file;
+ comment claimed that SGI required it, but they don't emit it either.
+ Append -g to producer rather than replacing it.
+
+Tue Oct 1 14:19:23 1996 Jim Wilson <wilson@cygnus.com>
+
+ * gcc.c (used_arg): When call xmalloc for mswitches, pass 1 if
+ n_switches is zero.
+
+Mon Sep 30 17:46:26 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.c (gen_shl_and, gen_shl_sext): Use gen_lowpart to
+ generate rtx in the appropriate mode for zero/sign-extension.
+ Don't generate a zero bit shift.
+ (gen_shl_sext) Directly use gen_ashift instead of gen_ashrsi3.
+
+Mon Sep 30 17:17:56 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * fixinc.svr4: In math.h, redefine exception to __math_exception
+ for C++, to avoid conflict with <exception>.
+ * fixincludes: Likewise.
+ Fix check for class in math.h to not match fp_class.
+
+Mon Sep 30 17:15:19 1996 Jim Wilson <wilson@cygnus.com>
+
+ * iris6.h (ASM_SPEC): Add -w.
+ (STARTFILE_SPEC): Add mips3 to n32 pathnames.
+ Add -L/usr/lib32/mips for n32 cases.
+ (ENDFILE_SPEC): Add mips3 to n32 pathnames.
+
+Mon Sep 30 13:20:31 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * genopinit.c (gen_insn): Look through the modes in reverse order,
+ to avoid stopping early on CC when EXTRA_CC_MODES is used.
+
+ * fixincludes: Add extern "C" to <sys/mman.h> on HP/UX.
+
+Sun Sep 29 12:39:18 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * c-typeck.c (pointer_diff): Do not do default conversions when
+ doing the minus expression, in case restype is a short type.
+
+Sun Sep 29 11:22:10 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.c (build_complex): Add new argument, TYPE.
+ * tree.h (build_complex): Likewise.
+ * c-lex.c (yylex): Add new arg, TYPE, to call to build_complex.
+ * fold-const.c (const_binop): Likewise.
+ (fold, case CONJ_EXPR, COMPLEX_EXPR): Likewise.
+ * varasm.c (copy_constant, case COMPLEX_CST): Likewise.
+ * expr.c (expand_expr, case COMPONENT_REF): Don't try to directly
+ load a complex.
+ * recog.c (register_operand): Don't reject subreg of complex mode.
+ * emit-rtl.c (mark_user_reg): New function.
+ * function.c (assign_parms): Use it.
+ * stmt.c (expand_decl): Likewise, and simplify code.
+
+ * tree.c (contains_placeholder): Return 1 for PLACEHOLDER_EXPR.
+
+ * expr.c (store_expr): memset/bzero gets ptr_mode, not Pmode.
+
+ * stmt.c (expand_asm_operands): Fix errors in previous patches.
+
+ * x-linux: Simplify, but ensure headers aren't changed.
+
+ * getpwd.c: No longer include direct.h for _WIN32.
+
+ * configure (i[3456]86-*-isc*): Remove bogus echo.
+ (m68k-apple-aux*): a-ux.h renamed from aux.h.
+ (CC): Escape "$" char in "no-symlink" case for bash/cygwin32 bug.
+
+ * Makefile.in (installdirs): Renamed from install-dir.
+ Create $(prefix) and $(exec_prefix) if doesn't exist.
+ (install-float): Reflect new name for installdirs.
+ (install-{common,info,man,libgcc,multilib,libobjc}): Likewise.
+ (install-{include-dir,assert-h,collect2}): Likewise.
+
+ * reload1.c (gen_reload): Handle SUBREG in PLUS specially too.
+ Change calls to emit_move_insn to recursive calls.
+
+ * stmt.c (fixup_gotos): When running undefined labels, if no cleanup
+ actions for this block, don't clear BEFORE_JUMP.
+
+Fri Sep 27 13:48:21 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * c-decl.c (init_decl_processing): Create short int types before
+ creating size_t in case a machine description needs to use
+ unsigned short for size_t.
+
+Fri Sep 27 12:28:54 1996 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * gcc.c (do_spec_1): Allow -A in %[Spec].
+
+ * i386.h (CPP_CPU_SPEC): New. Added for defining the submodel.
+
+ * i386.c (asm_output_function_prefix, function_prologue,
+ ix86_expand_prologue): Make the routine that sets the GOT (when pic
+ is enabled) a function, to assist debugging.
+
+ * i386.md (gen_prologue_get_pc): Call the function created above.
+ (divdf3): Added.
+
+ * i386/dgux.h (CPP_PREDEFINES, CPP_SPEC): Reference CPP_CPU_SPEC.
+ Use svr4 assembler directive .backalign instead of .align.
+ (align to x bytes if it takes no more than y bytes to do so.)
+
+ * i386/{aix386ng.h,dgux.h} (CPP_SPEC): Use %[cpp_cpu].
+ * i386/{freebsd-elf,gas,isc,linux-aout}.h: Likewise.
+ * i386/{linux-oldld,linux,osfelf,osfrose,sco,sco4}.h: Likewise.
+ * i386/{sco4dbx,sco5,sol2,sysv3}.h: Likewise.
+
+Thu Sep 26 17:58:34 1996 Torbjorn Granlund <tege@matematik.su.se>
+
+ * m68k.md (mulsidi3 matcher): Change predicate const_int_operand
+ to const_sint32_operand. Get rid of bogus range condition.
+
+Thu Sep 26 17:12:00 1996 Jim Wilson <wilson@cygnus.com>
+
+ * Makefile.in (stmp-int-hdrs): Don't cd to srcdir before copying
+ header files to objdir.
+
+Wed Sep 25 21:22:57 1996 Jeffrey A Law (law@cygnus.com)
+
+ * h8300.h (FIRST_PSEUDO_REGISTER, ARG_POINTER_REGNUM): Bump up by one.
+ (FIXED_REGISTERS): Add entry for MAC register.
+ (CALL_USED_REGISTERS, REG_ALLOC_ORDER): Likewise.
+ (HARD_REGNO_NREGS): Handle MAC register.
+ (HARD_REGNO_MODE_OK, REGNO_OK_FOR_BASE_P, REGISTER_NAMES): Likewise.
+ (enum reg_class): New MAC_REGS register class.
+ (REG_CLASS_CONTENTS, REGNO_REG_CLASS): Corresponding changes.
+ (REG_CLASS_FROM_LETTER): Likewise.
+ (REGISTER_MOVE_COST): Make copies to/from MAC register expenseive.
+ (CONDITIONAL_REGISTER_USAGE): Define.
+ * h8300.md (movsi_h8300hs): Renamed from movsi_h8300h.
+ Handle moves to/from the MAC register.
+ (mac): Two new patterns to use the mac instruction.
+
+ * h8300.c (notice_update_cc): Fix CC_SET case.
+ (restore_compare_p): Remove unused function.
+ * h8300.md: Handle "set" vs "set_zn_c0" correctly.
+ (bCC patterns): No longer need to call restore_compare_p.
+
+ * h8300.c (get_shift_alg): Fix HImode ASHIFTRT by 13 or 14 bits.
+
+Wed Sep 25 18:52:19 1996 Joern Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.md (insv): New pattern.
+
+Wed Sep 25 16:47:26 1996 Doug Evans <dje@seba.cygnus.com>
+
+ * sparc/t-sunos41 (MULTILIB_{OPTIONS,DIRNAMES,MATCHES}): Create
+ multilib versions of -fpic and -fPIC.
+ (TARGET_LIBGCC2_CFLAGS): Comment out.
+
+ * sparc.c (print_operand): Handle new codes H/L.
+ * sparc.md (lo_sum_di_sp32): Add little endian support.
+ (adddi3_sp32,subdi3_sp32,mulsidi3_sp32,const_mulsidi3): Likewise.
+ (umulsidi3_sp32,const_umulsidi3,smacdi,umacdi,anddi3_sp32): Likewise.
+ (iordi3_sp32,xordi3_sp32,negdi2_sp32): Likewise.
+
+Wed Sep 25 15:32:35 1996 Jim Wilson <wilson@cygnus.com>
+
+ * expmed.c (store_bit_field): Don't make flag_force_mem disable insv
+ for memory operands.
+
+ * function.c (instantiate_decl): Always store addr back into x.
+
+Tue Sep 24 19:37:00 1996 Jim Wilson <wilson@cygnus.com>
+
+ * reload.c (push_secondary_reload): Do strip paradoxical SUBREG
+ even if reload_class is CLASS_CANNOT_CHANGE_SIZE. Change reload_mode
+ to mode in SECONDARY_MEMORY_NEEDED and get_secondary_mem calls.
+
+ * reload1.c (emit_reload_insns): For output part of RELOAD_OTHER,
+ emit after RELOAD_FOR_OUTPUT, in reverse order of reload number,
+ but not separately.
+
+Tue Sep 24 18:13:07 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * expr.c (emit_group_load): Allow target to be smaller than source.
+
+Tue Sep 24 17:40:39 1996 Doug Evans <dje@cygnus.com>
+
+ * m68k/a-ux.h: Renamed from aux.h because of MSDOS.
+
+Tue Sep 24 08:33:53 1996 David S. Miller (davem@caip.rutgers.edu)
+
+ * tree.c (copy_node): Fix error in last change.
+
+Tue Sep 24 08:29:03 1996 James G. Smith <jsmith@cygnus.co.uk>
+
+ * gcc.c (used_arg): Fix multilib_matches parsing to not corrupt
+ entry parameter.
+
+Tue Sep 24 08:22:18 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * loop.c (get_condition): Use rtx_equal_p to compare rtx.
+
+Tue Sep 24 08:14:01 1996 Christian Iseli <Christian.Iseli@lslsun.epfl.ch>
+
+ * integrate.c (expand_inline_function): Avoid creating paradoxical
+ subreg wider than BITS_PER_WORD as inlined function result.
+
+Tue Sep 24 08:00:15 1996 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (struct directive, directive_table, handle_directive):
+ pass_thru now 1 for #define and 2 for #pragma.
+ (handle_directive): When deciding whether to suppress comment at end
+ of directive, ignore tabs and spaces after comment. Remove redundant
+ limit test. With -dD -C, copy comment when isolating definition.
+ (skip_to_end_of_comment): With -C, don't copy newline at end
+ of C++ comment.
+
+ * fixinc.ptx, fixinc.svr4, fixincludes: Insert newlines just before
+ end of 'sed' command strings if last 'sed' command is 'a' or 'i'.
+
+Tue Sep 24 07:28:58 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * toplev.c (PREFERRED_DEBUGGING_TYPE): If no debugging formats are
+ supported, set to NO_DEBUG.
+ (main): Don't do setting of PREFERRED_DEBUGGING_TYPE here.
+
+Mon Sep 23 22:45:15 1996 Sean McNeil <sean@mcneil.com>
+
+ * rs6000/vxppc.h, sparc/vxsim.h: New files.
+ * configure (powerpc-*-vxworks*, sparc-*-vxsim*): New targets.
+ * objc/objc.h (BOOL): Define BOOL as int for VxWorks.
+
+Mon Sep 23 21:23:27 1996 Klaus K"ampf (kkaempf@progis.de)
+
+ * explow.c (promote_mode, case REFERENCE_TYPE): New case.
+
+Mon Sep 23 21:15:43 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * c-decl.c (finish_struct): Check PCC_BITFIELD_TYPE_MATTERS value.
+
+ * dbxout.c (dbxout_symbol): Fix forgotten case in last change:
+ check DECL_ARTIFICIAL also when using the short cut way.
+
+Mon Sep 23 15:55:24 1996 David S. Miller (davem@caip.rutgers.edu)
+
+ * tree.c (copy_node): Abort if don't know size of node.
+
+ * tree.c (build1): Clean up initialization of OBSTACK.
+
+Mon Sep 23 15:35:33 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * Makefile.in (stmp-multilib): Depend on $(LANG_LIB2FUNCS).
+
+ * dbxout.c (dbxout_function): Don't check DECL_SECTION_NAME before
+ calling dbxout_function_end.
+
+Mon Sep 23 14:41:12 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * combine.c (can_combine_p): Even if SMALL_REGISTER_CLASSES,
+ know lifetime not extended if all_adjacent set.
+
+ * stmt.c (expand_asm_operands): Handle '+' constraint.
+ * cse.c (fold_rtx): Fold inside ASM_OPERANDS.
+
+ * expr.c (expand_increment): If postincrement for MEM can't use add
+ directly, load address in reg and enqueue increment and store of reg.
+
+ * loop.c (check_dbra_loop): Don't assume label must be second part of
+ if_then_else in condjump.
+
+ * jump.c (jump_optimize): In no-nop move deletion, don't test
+ PRESERVE_DEATH_INFO_REGNO_P; instead test if optimization is performed.
+ Check for REG_UNUSED note on to-be deleted insn before searching for
+ preceding instruction to delete note from.
+ If PRESERVE_DEATH_INFO_REGNO_P is true for SREG, replace INSN with USE.
+
+ * reload1.c (reload): Initialize the previous_offset fields
+ in reg_eliminate before calling setup_save_areas.
+
+ * reload1.c (emit_reload_insns): Declare and set this_reload_insn.
+
+ * expr.c (var_rtx): New function.
+ (expand_expr, case COND_EXPR): Also use target if same as singleton.
+
+Mon Sep 23 14:22:34 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * recog.c (constrain_operands): Don't test clobbered constraints.
+
+ * reload1.c (emit_reload_insns): For output part of RELOAD_OTHER,
+ put in front of anything previous for that output, but not separately.
+
+Sun Sep 22 21:06:46 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-common.c (decl_attribtes, case A_SECTION): Allow for static
+ local variable.
+
+Sun Sep 22 11:30:27 1996 Christian Iseli (christian.iseli@di.epfl.ch)
+
+ * expr.c (convert_move): Replace explicit checks for FP extend ops
+ with use of can_extend_p.
+ Add missing tests for FP trunc operations.
+
+Sun Sep 22 11:20:02 1996 Pat Rankin <rankin@eql.caltech.edu>
+
+ * dwarfout.c (DWARF_VERSION): Define as 1 if not already defined.
+ * dwarf2out.c (DWARF_VERSION): Likewise.
+
+Sun Sep 22 11:12:20 1996 Joern Rennecke <amylaar@cygnus.co.uk>
+
+ * c-decl.c (pushdecl): Check new declaration actually conflicts before
+ warning about implicit external vs. static declarations.
+
+ * loop.c (combine_givs): Improve combining DEST_REG giv with only use.
+
+Sun Sep 22 10:50:03 1996 Scott Christley <scottc@net-community.com>
+
+ * Create consistent mechanism for memory allocation and release
+ so that garbage collection routines can be easily subsititued
+ for the ANSI standard malloc, realloc, free, etc.
+ * objc/archive.c: Replace use of __objc_xmalloc and free
+ with objc_malloc and objc_free.
+ * objc/hash.c: Replace use of __objc_xcalloc and free
+ with objc_calloc and objc_free.
+ * objc/init.c: Replace use of free with objc_free.
+ * objc/misc.c (objc_malloc): Renamed from __objc_xmalloc.
+ (objc_realloc): Renamed from __objc_realloc.
+ (objc_atomic_malloc, objc_valloc): New functions.
+ (objc_calloc): Renamed from __objc_calloc.
+ (objc_free): New function.
+ * objc/objc-api.h (_objc_malloc): New function pointer.
+ (_objc_atomic_malloc, _objc_valloc): Likewise.
+ (_objc_realloc, _objc_calloc, _objc_free): Likewise
+ * objc/objc-list.h: Replace use of __obj_xmalloc and free
+ with objc_malloc and objc_free.
+ * objc/objects.c: Likewise.
+ * objc/sarray.c: Replace use of __objc_xmalloc and free
+ with objc_malloc and objc_free.
+ * objc/sarray.h (__objc_xmalloc, __objc_xrealloc): Delete.
+ * objc/selector.c: Replace use of __objc_xcalloc, __objc_xrealloc,
+ and __objc_xmalloc with objc_calloc, objc_realloc, and objc_malloc.
+ * objc/thr-decosf1.c: Replace use of __objc_xmalloc and free
+ with objc_malloc and objc_free.
+ * objc/thr-irix.c, objc/thr-mach.c, objc/thr-os2.c: Likewise.
+ * objc/thr-posix.c, objc/thr-pthreads, objc/thr-single: Likewise.
+ * objc/thr-solaris.c, objc/thr-win32.c, objc/thr.c: Likewise.
+
+Sun Sep 22 05:26:01 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * configure: Set up LANG_LIB2FUNCS and LANG_EXTRA_HEADERS.
+ * Makefile.in (libgcc2.a): Include LANG_LIB2FUNCS.
+ (USER_H): Add LANG_EXTRA_HEADERS.
+ (LANG_LIB2FUNCS): New macro.
+ (LANG_EXTRA_HEADERS): New macro.
+ (stmp-int-hdrs): Don't hardwire ginclude.
+ (stamp-objlist): Don't depend on Makefile.
+
+Sat Sep 21 18:00:10 1996 Stephen L Moshier (moshier@world.std.com)
+
+ * alpha.md (alpha_swapped_comparison_operator pattern): Fix asm
+ operand typo in last change.
+
+Sat Sep 21 07:11:51 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * defaults.h (ASM_OUTPUT_LABELREF): Provide default definition
+ if not already defined.
+ * 1750a.h (USER_LABEL_PREFIX): Define instead of ASM_OUTPUT_LABELREF.
+ * a29k.h, alpha.h, convex.h, dsp16xx.h, elxsi.h, fx80.h: Likewise.
+ * gmicro.h, h8300.h, i386/sun386.h, i860.h, i960.h, ns32k.h: Likewise.
+ * pdp11.h, pyr.h, romp.h, sh.h, sparc.h, spur.h, tahoe.h: Likewise.
+ * vax.h, we32k.h: Likewise.
+ * i386/att.h (USER_LABEL_PREFIX): Redefine, not ASM_OUTPUT_LABELREF.
+ * i386/bsd.h, i386/lynx.h, i386/sco5.h, i860/fx2800.h: Likewise.
+ * m68k/3b1.h, m68k/mot3300.h, m68k/tower-as.h, m68k/tower.h: Likewise.
+ * ptx4.h, sparc/pbd.h, svr3.h, svr4.h: Likewise.
+ * i386/osfrose.h, m88k.h (USER_LABEL_PREFIX): Redefine.
+ * nextstep.h (USER_LABEL_PREFIX): Redefine.
+ (ASM_OUTPUT_LABELREF) Use USER_LABEL_PREFIX.
+ * arm/aout.h, mips.h (ASM_OUTPUT_LABELREF): Delete.
+ * rs6000/lynx.h (USER_LABEL_PREFIX): Undefine.
+ * rs6000.h, rs6000/win-nt.h (USER_LABEL_PREFIX): Define.
+
+Thu Sep 19 00:05:53 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * configure: Move i[3456]86-*-gnu* case after linux and don't
+ treat linux-gnu like other gnu systems.
+
+Wed Sep 18 20:51:09 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * cplus-dem.c (demangle_template): Fix handling of address args.
+ (gnu_special): Handle type_info stuff.
+
+Wed Sep 18 17:57:55 1996 Patrik Lantto (patrik@opq.se)
+
+ * jump.c (jump_optimize): Insert conditional move after jump
+ insn instead of before.
+
+Wed Sep 18 17:33:36 1996 Richard Henderson <rth@tamu.edu>
+
+ * alpha.h (PREDICATE_CODES): Add alpha_swapped_comparison_operator.
+ * alpha.c (alpha_swapped_comparison_operator): New function.
+ (print_operand): Support unsigned codes for %D, %c, and %d.
+ * alpha.md: Add pattern for b%c with swapped comparisons with 0.
+ Delete three unnamed cmp patterns that are strict subsets of it.
+
+ * alpha.c (alpha_emit_set_long_const): Save one instruction
+ when -O2 and high word == low word.
+
+Tue Sep 17 22:46:15 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * i386/unix.h (ASM_OUTPUT_MI_THUNK): Handle functions
+ returning an aggregate.
+
+ * varasm.c (supports_one_only): New function.
+ (make_decl_one_only): Likewise.
+ * svr4.h (MAKE_DECL_ONE_ONLY): Define.
+ * tree.h (DECL_ONE_ONLY): New macro.
+
+ * varasm.c (assemble_variable): Fix setting of
+ first_global_object_name.
+ (assemble_start_function): Likewise.
+
+Tue Sep 17 19:42:39 1996 Doug Evans <dje@wabamun.cygnus.com>
+
+ * i386/t-cygwin32 (winnt.o): Compile properly.
+
+Tue Sep 17 15:47:20 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * Add support for R5000, and finish MIPS4 support.
+ * mips.h (enum processor_type): Add PROCESSOR_R5000.
+ (gen_conditional_move): Declare.
+ (CONDITIONAL_REGISTER_USAGE): Mark ST_REGS as fixed if not
+ HARD_FLOAT, or if mips_isa < 4.
+ (FIRST_PSEUDO_REGISTER): Change to 76.
+ (FIXED_REGISTERS): Add condition code registers.
+ (CALL_USED_REGISTERS): Likewise.
+ (ST_REG_LAST): Change to 74.
+ (RAP_REG_NUM): Change to 75.
+ (ST_REG_P): Look for any condition code register.
+ (REG_CLASS_CONTENTS): Update for new condition code registers.
+ (RTX_COSTS): Add cases for R5000.
+ (REGISTER_MOVE_COST): Add cases for condition code registers.
+ (PREDICATE_CODES): Add "const_float_1_operand".
+ (EXTRA_CC_{MODES,NAME}, SELECT_CC_MODE): Remove.
+ (REGISTER_NAMES): Add entries for new condition code registers.
+ (DEBUG_REGISTER_NAMES): Likewise.
+ (ADDITIONAL_REGISTER_NAMES): Remove FPSW_REGNUM.
+ * mips.md (cpu attribute): Add R5000.
+ (function units): Add cases for the R5000.
+ ({madd,msub,nmadd,nmsub}.d): Only available if TARGET_DOUBLE_FLOAT.
+ (recip.d, recip.s, rsqrt.d, rsqrt.s): New define_insn patterns.
+ (movcc): New pattern to move condition code values.
+ (reload_incc, reload_out_cc): New define_expand patterns.
+ (lwxc1, ldxc1, swxc1, sdxc1): Several new define_insn patterns.
+ (various): Replace CC_FP with CC.
+ (branch_fp_ne, branch_fp_eq): Match any condition code register.
+ (branch_fp_ne_rev, branch_fp_eq_rev): Remove.
+ (seq_df, slt_df, sle_df): Match any condition code register.
+ (sgt_df, sge_df, seq_sf, slt_sf, sle_sf, sgt_sf, sge_sf): Likewise.
+ (sne_df, sne_sf): Remove.
+ (FP conditional moves): Match any condition code register.
+ Require TARGET_HARD_FLOAT and, if appropriate, TARGET_DOUBLE_FLOAT.
+ (movsicc): Just call gen_conditional_move.
+ (movdicc, movsfcc, movdfcc): New define_expand patterns.
+ * mips.c (mips_reg_names): Add condition code registers.
+ (mips_sw_reg_names, mips_regno_to_class): Likewise.
+ (const_float_1_operand): New function.
+ (mips_move_1word): Treat CCmode as SImode. Handle move from
+ ST_REG to GR_REG if mips_isa >= 4. Only permit move from GR_REG
+ to ST_REG is mips_isa < 4.
+ (gen_conditional_branch): Rewrite. Just use CCmode, not extra
+ condition modes.
+ (gen_conditional_move): New function.
+ (override_options): Recognize vr5000. Look for just CCmode, not
+ extra condition modes. If mips_isa >= 4, permit CCmode in GR_REGS
+ and FP_REGS.
+ (print_operand): Handle %Z.
+ (mips_secondary_reload_class): Require a data register to copy a
+ value out of a condition code register. Require a floating point
+ register to copy a value into a condition code register.
+
+Tue Sep 17 15:10:29 1996 Joern Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.md: New define_splits to recombine output from LEGITIMIZE_ADDRESS.
+ * sh.h (LEGITIMIZE_ADDRESS): Typo fixes (x -> X).
+
+Mon Sep 16 23:00:35 1996 Jim Wilson <wilson@cygnus.com>
+
+ * configure (build_broken_install): Renamed from host_broken_install.
+ Set from build not host.
+ (build_install_headers): Renamed from host_install_headers. Set from
+ build not host.
+
+Mon Sep 16 22:38:55 1996 Stu Grossman (grossman@critters.cygnus.com)
+
+ * configure (m68k-*-coff*): Use dbx debug format by default.
+ * gcc.c (link_command_spec): Move -T to end of link command line.
+ * m68k/m68kemb.h (LINK_SPEC, SUBTARTGET_SWITCHES): Delete.
+ (LIB_SPEC): Define to just -lc.
+ (STARTFILE_SPEC): Define to empty.
+
+Mon Sep 16 13:12:27 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.c (ext_shift_insns, ext_shift_amounts): New arrays.
+ (gen_ashift_hi, gen_shifty_hi_op, shl_and_kind): New functions.
+ (rtx_equal_function_value_matters): Declare.
+ (shl_and_length, shl_and_src_length, gen_shl_and): New functions.
+ (shl_sext_kind, shl_sext_length, gen_shl_sext): Likewise.
+ * sh.md (ashlhi3_k, lshrhi3_m): New patterns.
+ (lshrhi3, shl_sext_ext, shl_sext_sub):
+ New insn patterns with matching define_split.
+ (and_shl_scratch): Likewise, but also with unnamed variants.
+
+Sat Sep 14 17:05:07 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * gcc.c (convert_filename): Don't start looking for '.' until
+ after last directory separator.
+
+ * i386.md (clrstrsi): Correct check for constant size.
+
+ * Based on code by sac@cygnus.com.
+ * i386/cygwin32.h (CHECK_STACK_LIMIT): Make consistent with MD file.
+ * i386.c ({function,ix86_expand}_prologue): Use __alloca to allocate
+ stack if desired and beyond CHECK_STACK_LIMIT in size.
+ * i386.h ({MASK,TARGET}_STACK_PROBE): New macros.
+ (TARGET_SWITCHES): Add -mstack-arg-probe.
+ * i386.md (allocate_stack{,_worker}): New patterns.
+
+Fri Sep 13 18:23:18 1996 Joel Sherrill <joel@OARcorp.com>
+
+ * sparc/lb1spc.asm (.div, .rem): Fixed typo so sign is returned
+ correctly. TOPBITS was 2 and should have been 4.
+
+Thu Sep 12 21:51:56 1996 Jim Wilson <wilson@cygnus.com>
+
+ * mips.md (call_value_multiple_internal0): Change from define_insn to
+ define_expand.
+
+Thu Sep 12 19:22:14 1996 Doug Evans <dje@seba.cygnus.com>
+
+ * sparc.md (move_pic_label_si): Operand one is label_ref now.
+ * sparc.c (emit_move_sequence): Pass label_ref to
+ gen_move_pic_label_si to not lose flags.
+
+Wed Sep 11 12:10:08 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * Makefile.in (GCC_PASSES): Add $(exeext) to names.
+ (FLAGS_TO_PASS): Add CLIB.
+ (c-pragma.o): Add dependencies on except.h, function.h, defaults.h.
+
+Tue Sep 10 22:25:03 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * configure (i[3456]86-*-cygwin32): Use xm-cygwin32.h and xm-i386.h.
+ Set fixincludes to Makefile.in and objc_thread_file to win32.
+ * i386/xm-cywin32.h: Don't include xm-i386.h.
+ * i386/x-cygwin32, rs6000/x-cygwin32 (STMP_FIXPROTO, exeext): New defs.
+
+ * gcc.c (HAVE_EXECUTABLE_SUFFIX): New macro.
+ (convert_filename): New function.
+ (process_command, case 'o'): Call it.
+ (process_command, default case): Likewise; delete old code.
+
+Tue Sep 10 21:08:43 1996 Torbjorn Granlund <tege@albert.gnu.ai.mit.edu>
+
+ * i386.md (decrement_and_branch_until_zero matcher): Fix typo.
+
+Tue Sep 10 19:04:19 1996 Jim Wilson <wilson@cygnus.com>
+
+ * mips.c (mips_move_2words): Rewrite 32 bit shifts as 16 bit shifts.
+
+Tue Sep 10 10:39:07 1996 Jeffrey A Law (law@cygnus.com)
+
+ * pa/pa-gas.h (DBX_DEBUGGING_INFO): Remove all #define
+ and #undef statements related to debugging information.
+ * pa/pa-hpux.h, pa-hpux7.h: Likewise
+ * pa.c (override_options): Disable "-g" and issue a warning
+ if it's used when !TARGET_GAS.
+
+Mon Sep 9 17:57:49 1996 Doug Evans <dje@wabamun.cygnus.com>
+
+ * sparc.h ({MASK,TARGET}_FPU_SET): Define.
+ (TARGET_SWITCHES): Record if -m{,no-}fpu passed.
+ * sparc.c (sparc_override_options): Don't clobber explicit
+ -m{,no-}fpu setting with cpu default.
+
+Mon Sep 9 15:57:57 1996 Joel Sherrill <joel@OARcorp.com>
+
+ * configure (mips64orion-*-rtems*): New target.
+ * mips/rtems64.h: New file.
+
+Sat Sep 7 22:07:53 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (store_field): If storing a record on big endian targets,
+ set up so we store the high-order bits.
+ (expand_expr, case COMPONENT_REF): Likewise for loads.
+
+Thu Sep 5 14:59:47 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * sh.h (LEGITIMIZE_ADDRESS): Define nonempty.
+
+Thu Sep 5 10:43:36 1996 Jeffrey A Law (law@cygnus.com)
+
+ * pa.md (mov{si,di,sf}): Handle 'R' constraints as needed.
+
+Wed Sep 4 17:13:28 1996 Bob Manson <manson@charmed.cygnus.com>
+
+ * except.c: (add_partial_entry): New routine.
+ (expand_start_try_stmts): Moved from cp/except.c.
+ (expand_start_all_catch): Move functionality of expand_end_try_stmts
+ here.
+
+Wed Sep 4 12:30:02 1996 Mike Stump <mrs@cygnus.com>
+
+ * except.c (emit_unwinder): Ensure CLOBBER and USE insns come last,
+ if present.
+
+Tue Sep 3 12:01:43 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure (sh-*-elf*): New target.
+ * sh/elf.h: New file.
+
+Fri Aug 30 17:52:26 1996 Jim Wilson <wilson@cygnus.com>
+
+ * dwarf2out.c (gen_formal_types_die): Delete extra argument from
+ gen_type_die call.
+
+Fri Aug 30 15:40:40 1996 James G. Smith <jsmith@cygnus.co.uk>
+
+ * mips/elf64.h: Allow MULTILIB_DEFAULTS to be defined
+ before this file is included.
+
+Fri Aug 30 15:00:06 1996 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.md: (movsicc,movhicc): Allow reload from memory.
+
+ * i386.c (override_options): Don't thread the prologue if profiling.
+
+Fri Aug 30 15:00:06 1996 James Hawtin <cgjwh@sunrise.co.uk>
+
+ * i386/t-sol2 (gcrt1.o): Added for profiling Solaris 2
+ * i386/sol2.h (STARTFILE_SPEC): New.
+ * i386/gmon-sol2.c, i386/sol2-gc1.asm: New files.
+
+Thu Aug 29 22:08:03 1996 Jim Wilson <wilson@cygnus.com>
+
+ * except.c (add_eh_table_entry): Multiply realloc size by sizeof int.
+
+Thu Aug 29 15:15:31 1996 Jeffrey A Law (law@cygnus.com)
+
+ * pa.md (fcmp patterns): Don't try to eliminate useless add,tr
+ insns here.
+ * pa.c (pa_reorg): Do elimination of useless add,tr insns here instead.
+ (print_operand, case 'y'): Remove this code.
+
+Wed Aug 28 16:19:34 1996 Doug Evans <dje@cygnus.com>
+
+ * toplev.c (print_single_switch): Ultrix fprintf returns 0 for success.
+
+ * toplev.c (main): Rewrite -g parsing.
+
+Mon Aug 26 16:15:49 1996 Fred Fish <fnf@cygnus.com>
+
+ * Makefile.in (objc-parse.y): Fix typo in name of temp file.
+
+Mon Aug 26 14:08:37 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (mark_all_temps_used): Fix error in last change.
+
+Sun Aug 25 22:27:19 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (mark_all_temps_used): New function.
+
+Fri Aug 23 11:34:57 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Fixes to make -fPIC
+ really the same as -mrelocatable.
+ (ASM_SPEC): Pass -K PIC to the assembler if -fpic/-fPIC.
+
+ * rs6000/sol2.h (ASM_CPU_SPEC): Remove passing -K PIC to the
+ assembler if -fpic/-fPIC.
+
+ * bi-{arity,opcode,opname}.c (fancy_abort): Define, so that
+ -Dabort=fancy_abort works again.
+
+Thu Aug 22 11:39:34 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/t-ppcgas ({stmp,install}-crt): Only build and install the
+ eabi ecrt[in].o object files in eabi multilib directories, only
+ build and install the solaris scrt[in0].o object files in solaris
+ directories.
+ (MULTILIB_MATCHES): Remove matches for solaris, linux to other
+ switches.
+
+Tue Aug 20 18:49:55 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/sysv4.h (ASM_OUTPUT_SECTION_NAME): If -mrelocatable or
+ -mrelocatable-lib, don't make read-only sections.
+
+Mon Aug 19 18:42:13 1996 Doug Evans <dje@cygnus.com>
+
+ * sparc.h ({MASK,TARGET}_LITTLE_ENDIAN): Define.
+ (LIBGCC2_WORDS_BIG_ENDIAN): Add little endian support.
+ * sparc/sp64-elf.h ({CPP,ASM,LINK}_SPEC): Add little endian support.
+ (SUBTARGET_SWITCHES): Recognize -m{big,little}-endian.
+ ({BYTES,WORDS}_BIG_ENDIAN): Likewise.
+ * sparc/splet.h (SUBTARGET_SWITCHES): Recognize -m{big,little}-endian.
+ ({CPP,ASM,LINK}_SPEC): Add little endian support.
+ ({BYTES,WORDS}_BIG_ENDIAN): Likewise.
+ * sparc/t-splet (MULTILIB_{OPTIONS,DIRNAMES}): Likewise.
+
+ * sparc/lynx-ng.h (CPP_SPEC): Use %(cpp_cpu).
+
+Sat Aug 17 15:23:39 1996 Geoffrey Noer <noer@cygnus.com>
+
+ * i386/cygwin32.h (CPP_PREDEFINES): Define _WIN32, not WIN32.
+ Define only __CYGWIN32__, not CYGWIN32 or __CYGWIN32.
+ * rs6000/cygwin32.h (CPP_PREDEFINES): Likewise.
+ * cccp.c (absolute_filename): Drive specifiers make the pathname
+ absolute in cygwin32.
+ * choose-temp.c: Delete !defined(_WIN32) condition when including
+ sys/file.h (NO_SYS_FILE_H is still used).
+ * gcc.c: Change ifndef _WIN32 to ifndef NO_SYS_FILE_H when deciding
+ whether to include sys/file.h.
+ (execute): -pipe is supported for cygwin32.
+ * getopt.c: Change win32 test from WIN32 to _WIN32.
+ * pexecute.c: Update test for win32 (&& ! cygwin32).
+ * protoize.c: Likewise.
+ (kill): Delete decl.
+ * toplev.c: Update test for win32 (&& ! cygwin32).
+ * ginclude/stdarg.h: Change __WIN32__ to _WIN32.
+ * ginclude/varargs.h: Likewise.
+ * ginclude/va-ppc.h: Likewise.
+
+Fri Aug 16 16:02:09 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.c (rs6000_got_register): Make sure pic_offset_table_rtx
+ allocated, even if current_function_uses_pic_offset_table set.
+
+Fri Aug 16 15:56:04 1996 J. Kean Johnston <hug@netcom.com>
+
+ * i386/sco5.h (CLASS_LIKELY_SPILLED_P): Deleted.
+ (STARTFILE_SPEC): Insert crtbegin.o in correct place, and correct
+ versions of values-X?.o.
+ (SWITCH_TAKES_ARG): Extend DEFAULT_SWITCH_TAKES_ARG, not replace.
+ (CPP_SPEC): Add -Di386, and correctly include extra directories.
+ Define HAVE_ATEXIT in ELF mode for global destructors.
+
+Thu Aug 15 16:42:44 1996 Doug Evans <dje@cygnus.com>
+
+ * sparc.c (label_ref_operand): New function.
+ (emit_move_sequence): Pass label_ref to gen_move_label_di to not
+ lose flags.
+ * sparc.md (move_label_di): Operand one is label_ref now.
+ * genattrtab.c (write_test_expr): Allow label_ref in match_dup.
+
+ * sys-protos.h (gethostid): Make return type `int' ifdef __alpha__.
+ * gen-protos.c: Delete support for SYS_PROTO_OVERRIDES.
+ * alpha.h (SYS_PROTO_OVERRIDES): Delete.
+
+Thu Aug 15 17:36:09 1996 Mike Stump <mrs@cygnus.com>
+
+ * libgcc2.c (__throw): New routine.
+ (__eh_pc): New data object for exception handling.
+
+ * except.c (eh_saved_pc): New object so we can call
+ assemble_external.
+ (expand_internal_throw_indirect): Call assemble_external for __eh_pc.
+ (end_eh_unwinder): Likewise.
+ (init_eh): Initialize eh_saved_pc.
+
+Thu Aug 15 13:02:42 1996 Mike Stump <mrs@cygnus.com>
+
+ * arm.h (RETURN_ADDR_RTX): Define.
+
+ * expr.c (expand_builtin_return_addr): Fix order of parameters.
+
+Wed Aug 14 19:48:00 1996 Torbjorn Granlund <tege@spiff.gnu.ai.mit.edu>
+
+ * stmt.c (expand_return): In code for doing scc with jumps,
+ stick to default handling if we have corresponding scc pattern.
+
+Wed Aug 14 10:31:28 1996 Jeffrey A Law (law@cygnus.com)
+
+ * pa.c (override_options): Treat TARGET_FAST_INDIRECT_CALLS
+ just like TARGET_NO_SPACE_REGS.
+ (output_millicode_call): Likewise.
+ * pa.h (TARGET_FAST_INDIRECT_CALLS): Define.
+ (TARGET_SWITCHES): Add "fast-indirect-calls".
+ * pa.md (TARGET_FAST_INDIRECT_CALLS): Treat just like
+ TARGET_NO_SPACE_REGS in various call/millicode call patterns.
+
+ * pa.c (print_operand): Use the right comparison operator
+ for reversed EQ and NE comparisons.
+
+ * pa.h (OUTPUT_MI_THUNK): Define.
+
+Wed Aug 14 11:40:49 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * ginclude/va-ppc.h: Add Windows NT support.
+ * ginclude/{varargs,stdarg}.h: For PowerPC Windows NT, include
+ va-ppc.h, instead of using the default handling.
+
+Tue Aug 13 18:30:10 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * fixincludes: Remove duplicate volatile from sig_atomic_t in AIX
+ sys/signal.h
+
+Tue Aug 13 16:51:37 1996 Jim Wilson <wilson@cygnus.com>
+
+ * i960-coff.h (LIB_SPEC): Undef.
+
+ * sh.h (PROFILE_BEFORE_PROLOGUE): Define.
+
+Tue Aug 13 11:36:02 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * gcc.c (set_spec,process_command): Dump and load the compiler
+ version number in the specs file.
+
+ * rs6000.c (output_toc): Fix last change, so that it doesn't use
+ an uninitialized variable if -mminimal-toc.
+ (output_prolog): Increment probe_labelno after last use.
+
+ * rs6000/t-ppcgas (MULTILIB_*): Build far fewer multilib
+ libraries. Build all libraries with -mrelocatable-lib and
+ -mno-eabi. Build special GNU/Linux and Solaris libraries.
+ * rs6000/eabi{,aix,le}.h (MULTILIB_DEFAULTS): Adapt to changes in
+ t-ppcgas.
+ * rs6000/(linux,sol2,sysv4,sysv4le).h (MULTILIB_DEFAULTS): Likewise.
+
+Tue Aug 13 11:36:02 1996 Jeffrey A Law (law@cygnus.com)
+
+ * rs6000.c (handle_mac_pragma): Initialize "psize".
+
+Mon Aug 12 18:14:35 1996 Jim Wilson <wilson@cygnus.com>
+
+ * gcc.c (used_arg): Initialize cnt to zero.
+
+Mon Aug 12 14:03:16 1996 Jim Wilson <wilson@cygnus.com>
+
+ From Mike Stump:
+ * sh.c (regno_reg_class): Change entry 23 from NO_REGS to GENERAL_REGS.
+ (initial_elimination_offset): New variable live_regs_mask. Add
+ code to handle RETURN_ADDRESS_POINTER_REGNUM.
+ * sh.h (RAP_REG, RETURN_ADDRESS_POINTER_REGNUM): Define.
+ (ELIMINABLE_REGS): Add RETURN_ADDRESS_POINTER_REGNUM support.
+ (RETURN_ADDR_RTX): Define.
+ (REGISTER_NAMES): Add rap.
+
+ * iris5.h (DOLLARS_IN_IDENTIFIERS): Undefine.
+
+ * m68kemb.h (LIB_SPEC): Always emit -lc.
+
+Mon Aug 12 12:30:25 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.c (rs6000_got_register): Test variable
+ current_function_uses_pic_offset_table to see whether or not a GOT
+ register has been created already.
+
+ * Makefile.in (multilib.h): Move to stamp-mlib.
+ (stamp-mlib): Use move-if-change to conditionally update
+ multilib.h. Pass MULTILIB_EXTRA_OPTS to genmultilib.
+ (STAGESTUFF): Add stamp-mlib.
+ (mostlyclean): Delete tmp-mlib.h.
+
+ * genmultilib: Take fifth argument for options to all multilib builds.
+ Restructure output so we pass synonym switches and extra arguments
+ separately, and not exponentially slow down genmultilib.
+
+ * gcc.c (toplevel): Rearrange multilib support so we support passing
+ synonyms separately from normal switches. Add support for passing
+ additional switches for all multilib builds. Dump and restore value
+ of MULTILIB_DEFAULTS.
+ (setspec, process_command, main): Likewise.
+ (used_arg,default_arg,print_multilib_info): Likewise.
+
+Mon Aug 12 07:46:47 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_builtin, case BUILT_IN_SETJMP): Add test
+ and call for nonlocal_goto_receiver pattern.
+ * stmt.c (expand_end_bindings): Likewise.
+
+ * stmt.c (expand_asm_operands): Fix off-by-one error when
+ scanning constraints.
+
+Sun Aug 11 22:48:02 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * expr.c (store_expr): Handle COND_EXPR cleanups like expand_expr.
+
+Sun Aug 11 22:42:36 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * optabs.c (expand_abs): When OP0 and TARGET are the same
+ pseudo register, it is safe to use TARGET.
+
+ * local-alloc.c (reg_equiv_replace): New variable.
+ (update_equiv_regs): Set reg_equiv_replacement for all REG_EQUIV
+ notes encountered or generated.
+
+Sun Aug 11 22:27:14 1996 Scott Christley <scottc@net-community.com>
+
+ * objc/hash.c (hash_is_key_in_hash): Function somehow got lost.
+
+Sun Aug 11 21:43:15 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * ginclude/stddef.h (__need_wint_t): Move #undef to right place.
+
+Sun Aug 11 17:46:22 1996 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * c-decl.c (finish_struct): If pedantic, also warn if struct/union
+ has no named members.
+
+Sun Aug 11 17:32:52 1996 Joel Sherrill <joel@OARcorp.com>
+
+ * i386/rtems.h: Renamed from i386/i386-rtems.h
+ * i960/rtems.h: Renamed from i960/i960-rtems.h
+ * m68k/rtems.h: Renamed from m68k/m68k-rtems.h
+ * rs6000/rtems.h: Renamed from rs6000/powerpc-rtems.h
+ * sparc/rtems.h: Renamed from sparc/sparc-rtems.h
+ * config/t-rtems: New file.
+ * configure (i386-*-rtems*): Added t-rtems to tmake_file.
+ Renamed i386/i386-rtems.h to i386/rtems.h.
+ (i960-*-rtems*): Added t-rtems to tmake_file.
+ Renamed i960/i960-rtems.h to i960/rtems.h.
+ Added original tm.h file and dbxcoff.h.
+ (m68k-*-rtems*): Added t-rtems to tmake_file.
+ Renamed m68k/m68k-rtems.h to m68k/rtems.h.
+ (powerpc-*-rtems*): Added t-rtems to tmake_file.
+ Renamed rs6000/powerpc-rtems.h to rs6000/rtems.h.
+ (sparc-*-rtems*): Added t-rtems to tmake_file.
+ Renamed sparc/sparc-rtems.h to sparc/rtems.h.
+
+Fri Aug 9 16:05:13 1996 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.md: (untyped_call) Avoid SIGFPE.
+
+ * i386.c (output_float_compare): Don't try to initialize
+ aggregate local variable; use assignment statements instead.
+
+ * i386.h (RTX_COSTS): rtx_cost should pass two parameters.
+
+ * i386/go32.h (ASM_OUTPUT_SECTION_NAME): New.
+
+Fri Aug 9 16:00:11 1996 Jim Wilson <wilson@cygnus.com>
+
+ * winnt.c (gen_stdcall_suffix): Round parameter size to PARM_BOUNDARY.
+
+Thu Aug 8 17:42:35 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.c (output_toc): If we are emitting a reference to a
+ vtable, don't put in the section name, just use the symbol.
+
+Wed Aug 7 19:03:36 1996 Jim Wilson <wilson@cygnus.com>
+
+ * sh.md (casesi_jump): New pattern.
+ (casesi): Generate RTL to match it.
+
+Wed Aug 7 14:10:07 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * ginclude/stddef.h (NULL): Use __null for G++.
+
+Tue Aug 6 17:37:53 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/sysv4.h (STACK_BOUNDARY): Always define as 64.
+ (ABI_STACK_BOUNDARY): Define as 64/128 based on the -mno-eabi
+ switch.
+
+ * rs6000.c (rs6000_stack_info): Use ABI_STACK_BOUNDARY, not
+ STACK_BOUNDARY. Define ABI_STACK_BOUNDARY as STACK_BOUNDARY #ifndef.
+
+Tue Aug 6 14:29:43 1996 Doug Evans <dje@fallis.cygnus.com>
+
+ * gen-protos.c (overrides): New static local.
+ (add_hash,parse_fn_proto): New static functions.
+ (main): Add prototypes from SYS_PROTO_OVERRIDES to hash table before
+ parsing sys-protos.h. Reserve entry 0 in std_protos.
+ * alpha.h (SYS_PROTO_OVERRIDES): Define.
+
+Mon Aug 5 16:53:36 1996 Doug Evans <dje@fallis.cygnus.com>
+
+ * sparc/t-splet (MULTILIB_OPTIONS): Add mbroken-saverestore.
+ (MULTILIB_DIRNAMES): Add brknsave.
+
+ * stor-layout.c (layout_record): Correct overflow test for 0 sized
+ fields.
+
+Mon Aug 5 16:12:19 1996 Jim Wilson <wilson@cygnus.com>
+
+ * alpha.c (alpha_output_filename): When emitting stabs, don't
+ disable them if using GNU as.
+ (alpha_output_lineno): Likewise, when not using GNU as.
+
+ * sh.c (arith_reg_operand): Reject SUBREG of an invalid hard reg.
+
+ * sparc/lite.h (aoutos.h): Don't include it.
+ * configure (sparclite-*-aout*): Add aoutos.h to tm_file.
+
+Sat Aug 3 23:13:55 1996 Jeffrey A Law (law@cygnus.com)
+
+ * combine.c (rtx_equal_for_field_assignment_p): Check for
+ get_last_value returning (CLOBBER (CONST_INT 0)).
+
+Sat Aug 3 20:19:14 1996 Jim Wilson <wilson@cygnus.com>
+
+ * i960.md (subsi3+1): Handle case where first operand is constant
+ but second operand is not.
+
+ * m68k/vxm68k.h (WCHAR_TYPE_SIZE): Undef, then define to 16.
+
+Fri Aug 2 15:46:19 1996 Jeffrey A Law (law@cygnus.com)
+
+ * pa/pa-hpux.h (LINK_SPEC): Don't link in PA1.1 specific
+ libraries when creating shared libraries.
+ * pa/pa-hpux9.h, pa/pa-hpux10.h: Likewise.
+
+Fri Aug 2 13:36:42 1996 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.c (output_float_compare): fcomi should be followed by the
+ correct conditional jump instead of fcom/pfstsw/and/jne
+ (override_options): Added -mbranch-cost to set BRANCH_COST.
+
+ * i386.md (sgt+1,slt+1,sge+1,sle+1,bgt+1,blt+1,bge+1,ble+1,bleu+4)
+ Added TARGET_CMOVE check for fcomi.
+ (movsicc_1+1,movhicc_1+1): Added to handle the general case.
+
+ * i386.h (i386_branch_cost, i386_branch_cost_string): Added.
+
+Fri Aug 2 11:53:55 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * sparc/vxsparc.h (CPP_PREDEFINES): Add `-DCPU=SPARC'.
+
+Thu Aug 1 23:56:01 1996 Jeffrey A Law (law@cygnus.com)
+
+ * pa.h (ASM_OUTPUT_INT): Remove all hacks for exception table.
+
+Thu Aug 1 10:08:14 1996 Torbjorn Granlund <tege@spiff.gnu.ai.mit.edu>
+
+ * m68k.h (RTX_COSTS, case PLUS): Get operand order right.
+
+Wed Jul 31 15:06:46 1996 Doug Evans <dje@cygnus.com>
+
+ * sparc.md (negtf2,abstf2): Fix v9 case.
+
+Wed Jul 31 09:49:25 1996 Jeffrey A Law (law@cygnus.com)
+
+ * pa.h (ASM_OUTPUT_INT): Use an 'E%' prefix for items in
+ the exception table if TARGET_GAS && ! TARGET_PORTABLE_RUNTIME.
+
+Tue Jul 30 15:37:31 1996 Jim Wilson <wilson@cygnus.com>
+
+ * i386/cygwin32.h (dbxcoff.h): Include.
+ (DBX_DEBUGGING_INFO, SDB_DEBUGGING_INFO, PREFERRED_DEBUGGING_TYPE):
+ Move definitions before include of dbxcoff.h.
+ (ASM_OUTPUT_SOURCE_LINE, DBX_OUTPUT_MAIN_SOURCE_FILE_END): Delete.
+ (DBX_BLOCKS_FUNCTION_RELATIVE, DBX_FUNCTION_FIRST): Delete.
+
+Tue Jul 30 15:03:53 1996 Torbjorn Granlund <tege@spiff.gnu.ai.mit.edu>
+
+ * i960.md (eq reg (const_int 0)): New pattern.
+
+Tue Jul 30 11:15:44 1996 Jeffrey A Law (law@cygnus.com)
+
+ * pa.h (RETURN_ADDR_RTX): Offset is -20 from the frame, not +20!
+
+Mon Jul 29 12:16:17 1996 Jeffrey A Law (law@cygnus.com)
+
+ * pa.h (GO_IF_LEGITIMATE_ADDRESS): Fix thinko in last change.
+
+Fri Jul 26 18:19:47 1996 Doug Evans <dje@cygnus.com>
+
+ * dwarfout.c (output_bound_representation): Fix typo.
+
+Thu Jul 25 16:00:10 1996 Mike Stump <mrs@cygnus.com>
+
+ * expr.c (do_jump, case TRUTH_ORIF_EXPR): Ensure end of an
+ exception region comes after its start.
+ (do_jump, case TRUTH_ANDIF_EXPR): Likewise.
+
+Thu Jul 25 13:36:42 1996 Stan Cox <coxs@equinox>
+
+ * i386.c (output_float_compare): Added support for Pentium Pro
+ fcomi instruction which sets EFLAGS instead of FPU Status Word.
+
+Wed Jul 24 21:48:08 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (canon_hash, cse_insn): MEM is not unchanging if it is
+ in the frame (since the temp slot might be reused).
+
+Wed Jul 24 17:34:06 1996 J"orn Rennecke (amylaar@cygnus.com)
+
+ * sh.md (branch_true, branch_false, inverse_branch_true): Express
+ tests of the T bit as comparisons against zero, rather than one.
+ (inverse_branch_false, beq, bne, bgt, blt, ble, bge, bgtu): Likewise.
+ (bltu, bgeu, bleu, casesi): Likewise.
+
+Wed Jul 24 15:58:06 1996 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.md: (mov{sf,df,xf}cc{,_1}): New patterns for P6 FP cmove.
+ * i386.c (put_condition_code, print_operand, output_fp_cc0_set):
+ Support fcmov suffixes.
+
+Wed Jul 24 10:53:38 1996 Jeffrey A Law (law@cygnus.com)
+
+ * pa.c (move_operand): Relax "mode" test. Allow scaled
+ indexed addressing modes.
+ (output_fp_move_double): Tweak output strings to work with updated
+ 'F' and 'M' output modifiers.
+ (print_operand): Collapse 'F' and 'M' into a single hunk of code.
+ For auto-increment modes output "s,ma" and "s,mb".
+ For scaled indexing modes output "x,s"
+ For other addresses, output nothing for 'M' and "s" for 'F'.
+ * pa.h (EXTRA_CONSTRAINT): Don't accept scaled indexed addresses
+ for 'Q' and 'T'. Do accept scaled indexed addresses for 'R'.
+ (GO_IF_LEGITIMATE_ADDRESS): Accept scaled indexed addresses
+ for SFmode and DFmode.
+ * pa.md: Remove all scaled indexed load patterns.
+ (movsi patterns): Accept scaled indexed addresses in some
+ cases. Update output strings for updated 'M' and 'F' output modifiers.
+ (movhi, movqi, movsf, movdf, movdi patterns): Likewise.
+
+Tue Jul 23 23:10:41 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.h (struct tree_int_cst): Add field for TREE_CST_RTL.
+ * varasm.c (decode_addr_const, output_constant_def): AllowINTEGER_CST.
+
+Tue Jul 23 16:42:09 1996 Jim Wilson <wilson@cygnus.com>
+
+ * sh.c (reg_unused_after): Handle JUMP_INSN inside a sequence.
+
+Tue Jul 23 16:33:25 1996 Mike Stump <mrs@cygnus.com>
+
+ * Make exception handling work better when optimizations are on.
+ * except.c, except.h: New files.
+ * Makefile.in (OBJS): Add except.o.
+ (except.o): Add.
+ (stmt.o, final.o): Add except.h.
+ * rtl.c (note_insn_name): Add NOTE_INSN_EH_REGION_{BEG,END}.
+ * rtl.h: Likewise.
+ * arm.h (MASK_RETURN_ADDR): Define.
+ * pa.h (MASK_RETURN_ADDR, RETURN_ADDR_RTX): New macros.
+ * sparc.h (DOESNT_NEED_UNWINDER): Define if not doing a flat function.
+ * mips.h (RETURN_ADDR_RTX): Improve.
+ * vax.h (RETURN_ADDR_RTX): Improve.
+ * toplev.c (rest_of_compilation): Use find_handler_labels.
+ (main, interim_eh{,_hook}): Remove interim_eh_hook support.
+ (flag_exceptions): New flag; also add to table.
+ (compile_file): Emit the exception table in the backend now.
+ * final.c (final_scan_insn): Support ASM_OUTPUT_EH_REGION_{BEG,END}.
+ (final_scan_insn): Redo handler labels, implement
+ NOTE_INSN_EH_REGION_BEG and NOTE_INSN_EH_REGION_END and use them
+ instead of CODE_LABELs.
+ (final): Add call to check_handler_labels.
+ * libgcc2.c (L_eh): Add support for EH_TABLE_LOOKUP.
+ * sparc.md (return): Add a reference to the return address register.
+ * flow.c (find_basic_blocks): Add support for handler_labels.
+ * loop.c (find_and_verify_loops): Likewise.
+ * jump.c (jump_optimize): Likewise.
+ Add call to check_handler_labels. Add call to exception_optimize.
+ * sched.c (sched_analyze): Smuggle exception region notes around.
+ (unlink_notes, reemit_notes, schedule_block): Likewise.
+ (sched_analyze): Add extra element since we remove two at a time.
+ * integrate.c (save_for_inline_copying): Add support for exception
+ regions.
+ (expand_inline_function): Likewise.
+ (function_cannot_inline_p): Don't inline functions that have EH
+ regions before NOTE_INSN_FUNCTION_BEG.
+ (finish_inline): Use FIRST_FUNCTION_INSN, not NEXT_INSN.
+ * function.c (expand_start_all_catch): New function.
+ * function.h: Add exception handling support information.
+ * expr.c (expand_expr, {defer,expand}_cleanups_to, do_jump): Transform
+ interim_eh_hook into calls to expand_ehregion_{start,end}.
+ * stmt.c (expand_{decl_cleanup,cleanups}): Likewise.
+ (init_stmt_for_function): Call init_eh.
+ (save_stmt_status): Call save_eh_status.
+ (restore_stmt_status): Call restore_eh_status.
+ * expr.h (throw_libfunc): Add.
+ * optabs.c (throw_libfunc): Initialize.
+ * print-rtl.c (print_rtx): Add support for exception regions.
+ * rs6000.c (EXCEPTION_SECTION): Define.
+ * output.h (exception_section): Declare.
+ * varasm.c (exception_section): Define.
+ * i386.c, i960.c, rs6000.c: Include except.h for function.h.
+ * c-pragma.c, emit-rtl.c, expr.c, final.c, flow.c: Include except.h.
+ * function.c, integrate.c, jump.c, loop.c, objc-act.c: Likewise.
+ * stmt.c, stor-layout.c, toplev.c, tree.c, varasm.c: Likewise.
+
+Tue Jul 23 12:32:54 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.c (rs6000_replace_regno): Set pic_offset_table_rtx so
+ that other phases will use the PIC register instead of the
+ placeholder.
+
+ * rs6000.md (movsi_got*): Eliminate -fPIC code, keep -fpic code.
+ (movsi): Only call movsi_got if -fpic, not -fPIC.
+
+ * sysv4.h (OVERRIDE_OPTIONS): Improve error messages. Always set
+ -msdata=data by default, even if -fpic/-fPIC/-mrelocatable. Treat
+ -fPIC the same as -mrelocatable-lib and vica versa.
+
+ * t-ppcgas: (MULTILIB_*): Use -mreloctable-lib, instead of
+ -mrelocatable. Map Solaris into mcall-sysv-noeabi case. Build
+ -mrelocatable-lib libraries under non-eabi case. When linking, if
+ -fpic, -fPIC, or -shared, link in the -mrelocatable-lib libraries.
+
+Mon Jul 22 19:34:20 1996 Jim Wilson <wilson@cygnus.com>
+
+ * iris6.h (ASM_SPEC): Change {% to %{.
+
+ * dwarf2out.c (output_call_frame_info): Change FDE CIE offset to
+ be section name rather than 0.
+ (gen_subprogram_die): Only emit DW_AT_external if origin is NULL.
+ Only call equate_decl_number_to_die if origin is NULL.
+ (dwarfout_begin_function): In code that computes offset of frame
+ pointer, change 4 to UNITS_PER_WORD.
+
+ * combine.c (undo_all): Clear previous_undos field.
+
+Mon Jul 22 19:10:45 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure: Don't change target_alias to target in Makefile.
+
+Sat Jul 20 09:28:38 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * dwarfout.c (output_bound_representation): Treat default case
+ as variable bounds, then look inside for SAVE_EXPR.
+
+ * mips.h (INITIALIZE_TRAMPOLINE): Use `_flush_cache'; flush data
+ cache too.
+
+Sat Jul 20 09:24:13 1996 Marco Walther (Marco.Walther@mch.sni.de).
+
+ * configure (mips-sni-sysv4): New target.
+ * mips/sni-gas.h, mips/sni-svr4.h, mips/x-sni-svr4: New files.
+
+Fri Jul 19 17:44:13 1996 Stan Coxs <coxs@dg-rtp.dg.com>
+
+ * i386.md: (leave): Clobbers esp and ebp.
+
+ * i386.h: (TARGET_USE_Q_REG): Support inline strlen on PentiumPro
+
+Fri Jul 19 15:56:18 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * m68k/t-m68kbare (MULTILIB_OPTIONS): Add m5200.
+ (MULTILIB_EXCEPTIONS): Define.
+ * m68k/lb1sf68.asm: Add MCF5200 support.
+ * m68k.md (adddi_sexthishl32): Set condition to !TARGET_5200.
+ (subdi_sexthishl32, ashrdi3, ashrhi3): Likewise.
+ (negdi2): Change into define_expand.
+ (negdi2_internal): Rename from old negdi2; condition now !TARGET_5200.
+ (negdi2_5200): New insn.
+ * m68k.c (output_function_prologue): Don't use add.w if TARGET_5200.
+ (output_function_epilogue): Likewise.
+
+ * m68k.md (movqi): Remove complex cases which move between address reg
+ and memory; rely on secondary reloads instead.
+
+Fri Jul 19 12:22:50 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * fixproto (std_files): Add utime.h.
+
+Fri Jul 19 10:59:46 1996 Jeffrey A Law (law@cygnus.com)
+
+ * m68k/m68kemb.h: Remove '\' at EOF.
+
+Fri Jul 19 09:59:00 1996 Joel Sherrill <joel@OARcorp.com>
+
+ * m68k/coff.h (STARTFILE_SPEC): Add #undef before definition.
+
+Fri Jul 19 09:44:45 1996 J.T. Conklin <jtc@rtl.cygnus.com>
+
+ * m68k.h (LEGITIMATE_INDEX_P): Coldfire does not have scale
+ by 8 addressing modes.
+
+ * m68k-none.h: Use MASK_* macros instead of explicit constants.
+
+Fri Jul 19 09:08:53 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * m68k.md (negdi2): Undo last change: don't apply neg to address regs.
+
+Fri Jul 19 09:03:01 1996 Robert Wilhelm (rwilhelm@Physik.TU-Muenchen.DE)
+
+ * toplev.c (main): Correct typo in error message.
+
+Thu Jul 18 20:29:33 1996 Jim Wilson <wilson@cygnus.com>
+
+ * Makefile.in (OBJS): Add dwarf2out.o.
+ (dwarf2out.o): New rule.
+ * dwarf2.h, dwarf2out.c: New files.
+ * dwarfout.c: Check DWARF_VERSION macro.
+
+ * mips/iris6.h (DWARF_DEBUGGING_INFO, PREFERRED_DEBUGGING_TYPE):
+ Move after header files are included.
+ (iris5.h): Include instead of iris5gas.h.
+ (MACHINE_TYPE): Change 5.x to 6.x.
+ (DEBUG_SECTION, LINE_SECTION): Add debug_ to name, fix attributes.
+ (SFNAMES_SECTION, SRCINFO_SECTION, MACINFO_SECTION, PUBNAMES_SECTION,
+ ARANGES_SECTION): Fix attributes.
+ (DWARF_VERSION, MIPS_DEBUGGING_INFO, ASM_DECLARE_FUNCTION_NAME,
+ ASM_DECLARE_FUNCTION_SIZE, FUNCTION_NAME_ALREADY_DECLARED,
+ FRAME_SECTION, ABBREV_SECTION): Define.
+ (DBX_DEBUGGING_INFO, SDB_DEBUGGING_INFO, MIPS_DEBUGGING_INFO,
+ DWARF_DEBUGGING_INFO, PREFERRED_DEBUGGING_INFO): Delete undefs at
+ end of file.
+ * mips.c (function_{pro,epi}logue): Use FUNCTION_NAME_ALREADY_DECLARED.
+
+Thu Jul 18 19:24:19 1996 David Mosberger-Tang <davidm@azstarnet.com>
+
+ * alpha/elf.h (INT_ASM_OP): Change from ".long" to ".quad".
+
+Thu Jul 18 19:20:58 1996 Ulrich Drepper <drepper@myware.rz.uni-karlsruhe.de>
+
+ * stddef.h: Undefine __need_wint_t.
+
+Thu Jul 18 19:06:35 1996 J.T. Conklin <jtc@hippo.cygnus.com>
+
+ * longlong.h (mc680x0): Define umul_ppmm, udiv_qrnnd, sdiv_qrnnd
+ for the '020, '030, '040, and '332. Define count_leading_zeros
+ for the '020, '030, '040, and '060.
+
+ * m68k.md: Add TARGET_5200 to conditions which determine whether
+ the extbl instruction is emitted.
+ (mulsi3): Enable pattern with TARGET_5200.
+
+ * m68k.md (add patterns): Don't use two addqw instructions when
+ adding small (8 < N <= 16) integers to address registers on 68040.
+
+Thu Jul 18 18:06:15 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * configure: Write target_alias in Makefile.
+ (i[3456]86-*-sco3.2v4*): Set truncate_target.
+ * Makefile.in (target_alias): New and used for all current uses
+ of `target'.
+
+Thu Jul 18 17:46:02 1996 Dave Love <d.love@dl.ac.uk>
+
+ * gcc.c (default_compilers): Extra Fortran extensions.
+
+Wed Jul 17 10:28:10 1996 Torbjorn Granlund <tege@spiff.gnu.ai.mit.edu>
+
+ * expmed.c (expand_mult_highpart): Revert last change.
+
+Tue Jul 16 12:51:59 1996 Doug Evans <dje@cygnus.com>
+
+ * sparc/sparc-rtems.h: #include "sparc/sparc-aout.h" -> sparc/aout.h.
+
+Mon Jul 15 14:42:06 1996 Jim Wilson <wilson@cygnus.com>
+
+ * mips/iris6.h (LINK_SPEC): Add -woff 84.
+
+Fri Jul 12 17:34:01 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/eabi.asm (__eabi): Convert pointers in the Global Offset
+ Table if -mrelocatable. Move loops into separate subroutines for
+ ease of debugging. Reorganize code somewhat.
+
+ * rs6000/rs6000.c (small_data_operand): Allow small data under
+ Solaris.
+
+ * rs6000/sol-c0.c (_start): Initialize r13 to point to the small
+ data operand.
+
+ * rs6000/sol-c{i,n}.asm (_init, _fini): Enable shared library
+ support.
+
+ * rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Default to
+ -msdata=data, even if -fpic or -mrelocatable. Allow -mrelocatable
+ and -mno-eabi.
+ (CPP_SYSV_SPEC): If -fpic, define __PIC__ and __pic__ to 1. If
+ -fPIC, define them to 2.
+ (CPP_ENDIAN_SPEC): Push definition of macros for specific endian
+ targets to new specs.
+ (CPP_ENDIAN_DEFAULT_SPEC): Define to use CPP_ENDIAN_BIG_SPEC.
+ (CPP_ENDIAN_{LITTLE,BIG,SOLARIS}_SPEC): New specs for little
+ endian mode, big endian mode, and Solaris, which can't define
+ _LITTLE_ENDIAN. Define __LITTLE_ENDIAN__ in all cases for little
+ endian systems. Define __BIG_ENDIAN__ in all cases for big endian
+ systems.
+ (SUBTARGET_EXTRA_SPECS): Add new specs.
+
+ * rs6000/{eabile,sysv4le}.h (CPP_ENDIAN_DEFAULT_SPEC): Define to
+ use CPP_ENDIAN_LITTLE_SPEC.
+
+ * rs6000/sol2.h (CPP_ENDIAN_LITTLE_SPEC): Define as
+ CPP_ENDIAN_SOLARIS_SPEC so that _LITTLE_ENDIAN is not define.
+
+Fri Jul 12 17:34:01 1996 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.c (function_arg): Add IBM AIX XL compiler broken FP arg
+ passing compatibility mode.
+ * rs6000.h (TARGET_XL_CALL): Define default.
+ * aix3newas.h (TARGET_XL_CALL, SUBTARGET_SWITCHES): Define.
+ * aix41.h (TARGET_XL_CALL, SUBTARGET_SWITCHES): Define.
+
+Fri Jul 12 15:04:43 1996 Doug Evans <dje@cygnus.com>
+
+ * arm.h (ASM_OUTPUT_MI_THUNK): Handle fns returning structures.
+
+ * ptx4.h ({ASM,LINK}_SPEC): %{V} %{v:%{!V:-V}} -> %{v:-V}.
+ * svr4.h ({ASM,LINK}_SPEC): Likewise.
+ * dsp16xx/dsp16xx.h ({ASM,LINK}_SPEC): Likewise.
+ * i386/dgux.h (LINK_SPEC): Likewise.
+ * i386/sol2.h (LINK_SPEC): Likewise.
+ * m88k/dgux.h ({LINK,ASM_CPU}_SPEC): Likewise.
+ * sparc/sol2.h ({ASM,LINK}_SPEC): Likewise.
+ * sparc/sp64-elf.h ({ASM,LINK}_SPEC): Likewise.
+ * sparc/sysv4.h (ASM_SPEC): Likewise.
+
+Thu Jul 11 17:29:33 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.h (GOT_TOC_REGNUM): New macro for r2, which is used as a
+ marker for the GOT/TOC register to be allocated later.
+ (MACHINE_DEPENDENT_REORG): Call rs6000_reorg.
+ (rs6000_reorg): Add declaration.
+
+ * rs6000.c (rs6000_got_register): Return REG 2, not a pseudo
+ register in order to work with inlined functions.
+ (rs6000_replace_regno): New function to replace a register with a
+ new pseudo register.
+ (rs6000_finalize_pic): Loop through all insns, replacing any
+ GOT_TOC_REGNUM registers with new pseudo register, and adding
+ initialization of GOT register if it was created.
+ (rs6000_reorg): New function to check whether the GOT_TOC register
+ marker was removed.
+
+Thu Jul 11 10:12:50 1996 Jeffrey A Law (law@cygnus.com)
+
+ * h8300.h (OK_FOR_U): If generating H8/S code, accept
+ SYMBOL_REF and SYMBOL_REF + CONST_INT.
+
+ * h8300.c ({shift,rotate}_one): Emit tabs between opcode and
+ operands to be consistent with the rest of the compiler.
+ (shift_two, rotate_two): Define.
+ (get_shift_alg): Accept new argument "assembler2_p" for
+ rotate/shift by two insns. All callers changed. Rework
+ to generate more efficient code on the H8/300, H8/300H, and H8/S.
+ Try to simplify somewhat.
+ (emit_a_shift): Use shift-by-two insns when they're available.
+ Emit tabs between opcode and operands to be consistent with
+ the rest of the compiler.
+
+Wed Jul 10 19:32:17 1996 Jim Wilson <wilson@cygnus.com>
+
+ * mips/iris6.h (ASM_SPEC): Correct typos in Jun 18 change.
+
+Wed Jul 10 18:56:38 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * sh.c (machine_dependent_reorg): When looking for instruction that
+ sets register in LOG_LINKS, skip link if REG_NOTE_KIND is not zero.
+
+Wed Jul 10 15:02:18 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.c (rs6000_got_register): New function to return a pseudo
+ register to hold the pic register. Abort if reload is in progress
+ or done.
+ (num_insns_constant): Allow SFmode and DFmode.
+
+ * rs6000.h (CONST_DOUBLE_OK_FOR_LETTER_P): Redo 'G' so that it
+ means a constant that takes exactly two insns.
+ (rs6000_got_register): Add declaration.
+
+ * rs6000.md (movsi_got): Move setup of pic register to
+ rs6000_got_register.
+ (movsf): If -msoft-float, don't force constants to memory.
+ (mov{sf,df} insns): If soft floating point, allow any constant to
+ be loaded. Add define_splits that allow the 604 to use both
+ integer units for loading constants. Make sure insn length is
+ correct.
+
+Tue Jul 9 17:05:10 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.c (easy_fp_constant): All FP constants are considered
+ hard for -fpic and hardware floating point, so that the GOT
+ register is created.
+
+Tue Jul 9 15:21:27 1996 Jim Wilson <wilson@cygnus.com>
+
+ * x-iris6 (FIXPROTO_DEFINES): Add -D_SGI_SOURCE.
+
+Mon Jul 8 18:00:33 1996 Jim Wilson <wilson@cygnus.com>
+
+ * sh.h (enum reg_class): Add new class GENERAL_FP_REGS.
+ (REG_CLASS_NAMES, REG_CLASS_CONTENTS): Likewise.
+
+ * cse.c (note_mem_written): Varying structure memory access with
+ AND address can alias scalars.
+ * sched.c ({true,anti,output}_dependence): Likewise.
+
+ * sh.c (calc_live_regs): For pragma_interrupt case, exclude call
+ clobbered regs that are fixed, explicitly add MACH_REG and MACL_REG.
+
+ * calls.c (expand_call): For assign_stack_temp call in PARALLEL case,
+ get mode from type instead of using BLKmode.
+ * function.c (aggregate_value_p): If hard_function_value returns
+ a non-REG, then return 0.
+
+ * mips.c (function_arg): Add explicit checks for FIELD_DECLs.
+ (mips_function_value): Add explicit checks for FIELD_DECLs, and save
+ them in the array FIELDS. When returning structure with 1 float field,
+ enclose it in a PARALLEL and set the PARALLEL mode correctly.
+ * mips.md (call_value): Call gen_call_value_multiple_internal0
+ only if there are multiple return values. Strip the PARALLEL off
+ if there there is only one return value.
+
+Mon Jul 8 16:27:33 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * First cut at support for the H8/S.
+ * h8300.c (h8300_init_once): Handle the H8/S (treat it
+ like the H8/300H).
+ (dosize, adds_subs_operand, one_insn_adds_subs_operand): Likewise.
+ (output_adds_subs, const_costs, print_operand): Likewise.
+ (output_simode_bld, h8300_adjust_insn_length): Likewise.
+ (push_order, pop_order): Reverse.
+ (function_prologue): Try to use ldm.l and stm.l insns
+ on the H8/S. Minor cleanups.
+ (function_epilogue): Likewise.
+ (asm_file_start): Emit ".h8300s" when compiling for the H8/S.
+ * h8300/h8300.h (CPP_SPEC): Handle the H8/S.
+ (TARGET_H8300S): New target.
+ (TARGET_SWITCHES): Add "-ms" and "-mno-s".
+ (BITS_PER_WORD): Handle the H8/S (treat it like the H8/300H).
+ (UNITS_PER_WORD, POINTER_SIZE, PARM_BOUNDARY): Likewise.
+ (BIGGEST_ALIGNMENT, BIGGEST_FIELD_ALIGNMENT): Likewise.
+ (INITIALIZE_TRAMPOLINE, MOVE_MAX, Pmode): Likewise.
+ * h8300.md: Handle H8/S just like H8/300H
+ throughout the entire file.
+ * t-h8300 (MULTILIB_OPTIONS): Build "-ms" libraries too.
+ (MULTILIB_DIRNAMES): Put H8/S libraries in "h8300s" directory.
+ * h8300/lib1funcs.asm: Emit ".h8300s" pseudo-op when generating
+ h8300s object files. Otherwise treat the H8/S just like the H8/300H.
+ * ginclude/stdarg.h: Handle the H8/S.
+ * ginclude/varargs.h: Likewise.
+
+Mon Jul 8 14:50:58 1996 Doug Evans <dje@cygnus.com>
+
+ * sparc/sol2.h (LINK_SPEC): Don't pass `-z text' if
+ -shared -mimpure-text.
+
+Sun Jul 7 18:03:46 1996 Torbjorn Granlund <tege@noisy.tmg.se>
+
+ * m68k/lb1sf68.asm (__udivsi3): Use faster tstw instead of btst.
+
+Thu Jul 4 11:44:39 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (get_inner_reference): Delete using alternate mode for
+ bitfield; we don't make bitfields anymore if not needed.
+
+Wed Jul 3 18:23:17 1996 Stephen L Moshier (moshier@world.std.com)
+
+ * c-common.c (record_function_format): Define as static.
+
+ * collect2.c (at SUNOS4_SHARED_LIBRARIES): Fix reference to unistd.h.
+
+Wed Jul 3 17:35:20 1996 Gavin Koch <gavin@cygnus.com>
+
+ * c-typeck.c (default_conversion): Add bitfield promotions.
+
+Wed Jul 3 17:09:22 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * gcc.c (default_compilers): Add null entries for languages we
+ heard of.
+ (main): If found one of those entries, say compiler not installed.
+
+Wed Jul 3 12:52:53 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * pa.c (fmpy_operands): Define.
+ (combinable_{fmpy,add,fsub}): New function.
+ * pa.md (parallel_addb, parallel_movb): New patterns.
+ (fmpyadd, fmpysub): New patterns.
+
+ * pa.c (fmpy{add,sub}operands): Tighten checks. Allow SFmode.
+
+Tue Jul 2 18:57:15 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * pa.c (ireg_or_int5_operand): New function.
+ (output_parallel_movb, output_parallel_addb): Likewise.
+ (combinable_copy, combinable_add, following_call): Likewise.
+ (pa_adjust_insn_length): Handle parallel unconditional branches.
+ (output_movb): Handle case were destination is %sar.
+ * pa.h: Declare new functions.
+ * pa.md (parallel_branch): New "type" attribute.
+ (delay slot descriptions): Don't allow "parallel_branches" in
+ delay slots. Fill "parallel_branches" like "branch" insns.
+ (movb patterns): Handle %sar as destination register.
+
+ * expr.c (compare): If function pointers need canonicalization
+ before comparisons, canonicalize them.
+ (do_store_flag): Do not use an sCC insn for a function pointer
+ comparison if function pointers need canonicalization before
+ comparing.
+
+Tue Jul 2 17:56:37 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/sysv4.h ({START,END}FILE_LINUX_SPEC): If -mnewlib is not
+ used, use the crtbegin/crtend that 2.7.2 used.
+
+Sat Jun 29 07:10:02 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.h (INIT_EXPANDERS): Define, call rs6000_init_expanders.
+ (RS6000_VARARGS_OFFSET): fpmem area no longer next to outgoing
+ argument area.
+ (STARTING_FRAME_OFFSET, STACK_DYNAMIC_OFFSET): Likewise.
+ (frame_pointer_needed): Add external declaration.
+ (rs6000_{save,restore}_machine_status): Ditto.
+ (rs6000_init_expanders): Likewise.
+
+ * rs6000.c (rs6000_{save,restore}_machine_status): New functions
+ to save and restore the globals needed on a per function basis.
+ (rs6000_init_expanders): Initialize globals needed on a per
+ function basis, and set up so the above save/restore functions are
+ called when processing nested functions.
+ (output_epilog): Don't initialize per function globals here.
+ (rs6000_stack_info): Change where fpmem save area is to below local
+ variables, and not just below the outgoing argument area.
+
+ * rs6000.md (floatsidf2*, fix_truncdfsi2*): Rewrite conversion
+ routines to track new location of the fpmem save area. Allocate a
+ new base register temp for the routines in case the stack frame is
+ more than 32k in size.
+
+Sat Jun 29 05:44:37 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * explow.c (convert_memory_address, case PLUS): Fix error in
+ last change.
+
+Fri Jun 28 23:30:48 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * reload1.c (choose_reload_regs): Properly mark spill registers
+ as in use for inherited reloads.
+
+Fri Jun 28 18:37:20 1996 Stephen L Moshier <moshier@world.std.com>
+
+ * objc/sarray.c (ifdef __alpha__): Don't declare `free'.
+ * objc/thr-decosf1.c (objc_thread_id): Use pthread_getunique_np
+ to obtain a thread ID value.
+ (objc_mutex_allocate): Cast mutex->owner to _objc_thread_t.
+ (objc_mutex_{deallocate,unlock}): Likewise.
+ (objc_mutex_{try,un,}lock): Declare thread_id as _objc_thread_t.
+
+ * real.c (asctoeg): `0.0eX' is zero, regardless of the exponent X.
+
+Fri Jun 28 18:33:13 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * vax.md (rotl): Remove extraneous `$'.
+
+ * combine.c (previous_num_undos): Deleted variable.
+ (MAX_UNDO): Deleted macro.
+ (struct undo): New field, next.
+ (struct undobuf): Deleted num_undos and undo.
+ New fields undos, frees, and previous_undos.
+ (SUBST, SUBST_INT): Rework to allocate memory and chain undo entries.
+ (combine_instructions): Initialize undobuf.{undos,previous_undos},
+ not undobuf.num_undo and previous_num_undos.
+ (try_combine): Likewise.
+ (undo_all, gen_rtx_combine): Rework to use new data structures.
+
+Fri Jun 28 16:48:25 1996 Scott Christley <scottc@net-community.com>
+
+ * objc/sendmsg.c (__objc_block_forward): New function.
+ (get_imp, objc_msg_lookup): Use different forwarding function
+ when the returning a floating point value.
+
+Fri Jun 28 16:25:25 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * configure: Allow multiple makefile frags.
+ (i[3456]86-*-linux*oldld*): Add i386/t-crtstuff as target frag.
+ (i[3456]86-*-linux*aout*, i[3456]86-*-linux*): Likewise.
+ (m68k-*-linux*aout*): Add t-linux-aout as target frag.
+ (m68k-*-linux*): Add t-linux as target frag.
+ * Makefile.in (Makefile): xmake_file and tmake_file now already
+ contain the $(srcdir)/config prefix.
+
+ * config/t-linux (BOOT_CFLAGS): Removed, no longer necessary.
+ (CRTSTUFF_T_CFLAGS): Don't define.
+ (CRTSTUFF_T_CFLAGS_S): Define this instead.
+ * config/t-linux-aout (BOOT_CFLAGS): Removed.
+ * m68k/t-linux: Remove variables now in t-linux.
+
+Fri Jun 28 15:06:05 1996 John F. Carr <jfc@mit.edu>
+
+ * alpha.c (alpha_emit_conditional_move): Emit correct code when
+ incoming comparison code is NE.
+
+Fri Jun 28 14:35:45 1996 J.T. Conklin <jtc@hippo.cygnus.com>
+
+ * c-decl.c (init_decl_processing): Register __builtin_memset
+ and memset as builtin functions.
+ * expr.c (expand_builtin, case BUILTIN_MEMSET): Open code memset
+ where val == 0.
+
+Fri Jun 28 14:10:03 1996 Richard Henderson <rth@tamu.edu>
+
+ * alpha/linux.h (FUNCTION_PROFILER): _mcount has non-standard linkage.
+ * alpha/elf.h (LINK_SPEC): Bring emulation name into sync
+ with Cygnus snapshot.
+
+ * alpha.h ({MASK,TARGET}_BUILD_CONSTANTS): New macros.
+ (TARGET_SWITCHES): New target option build-constants.
+ * alpha.c (alpha_emit_set_long_const): New function.
+ * alpha.md (movdi): Call it.
+ * expmed.c (expand_mult_highpart): Use op1 not wide_op1 in
+ expansion of mul_highpart.
+
+ * alpha.c (output_{pro,epi}log): Flag_inhibit_size_directive
+ should supress .ent, .end, and accompanying directives.
+ (alpha_output_lineno): Fix polarity on GAS test.
+ * alpha.h (NO_DBX_FUNCTION_END): New macro.
+ * dbxout.c (dbxout_function): Respect NO_DBX_FUNCTION_END.
+ * alpha/elf.h: New file.
+ * alpha/linux.h (INITIALIZE_TRAMPOLINE): New definition.
+ * alpha/xm-linux.h (HAVE_STRERROR): Define.
+ * configure (alpha*-linux*ecoff*): New target, was alpha-*-linux*.
+ (alpha-*-linux*): Use elf.h.
+ * crtstuff.c (init_dummy): Only i386-linux (at most)
+ needs ___brk_addr hack.
+
+Thu Jun 27 20:23:30 1996 Jon Buller (jonb@metronet.com)
+
+ * ns32k.c (split_di): New; from i386.c.
+ * ns32k.md (adddi3, subdi3, negdi3): New patterns.
+
+Thu Jun 27 19:42:50 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (force_to_mode, case NE): Fix typo and logical error.
+ (simplify_comparison): Don't swap args if op1 is CONST_INT.
+
+Thu Jun 27 18:49:35 1996 Jim Wilson <wilson@cygnus.com>
+
+ * expmed.c (extract_bit_field): Check TRULY_NOOP_TRUNCATION before
+ making a SUBREG of a REG.
+
+Thu Jun 27 11:03:59 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * mips.h (CC1_SPEC): Put spaces between the -mips* cases.
+ * mips/osfrose.h (CC1_SPEC): Likewise.
+
+ * sh.c (output_branch): Don't call ADJUST_INSN_LENGTH if insn is
+ inside sequence.
+
+Wed Jun 26 19:09:43 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * pa.h (CMP_PSI): Delete.
+ (FUNCTION_POINTER_COMPARISON_MODE): Likewise.
+ * pa.md (cmppsi): Delete expander.
+ (canonicalize_funcptr_for_compare): Renamed from plabel_dereference,
+ turned into an expander + anonymous pattern.
+
+Tue Jun 25 22:36:11 1996 Doug Evans <dje@seba.cygnus.com>
+
+ * gcc.c (PEXECUTE_VERBOSE): Define.
+ (execute): Pass PEXECUTE_VERBOSE to pexecute if -v.
+
+Tue Jun 25 12:23:54 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.h (FINALIZE_PIC): Define to call rs6000_finalize_pic.
+ (rs6000_finalize_pic): Add declaration.
+ (svr4_traceback): Delete unused declaration.
+
+ * rs6000.md (movsi_got): Don't emit gen_init_v4_pic insn.
+ (V.4 call insns): Do not use @plt for PIC calls.
+
+ * rs6000.c (print_operand_address): Handle LABEL_REF just like
+ SYMBOL_REF.
+ (rs6000_finalize_pic): Define, emit the gen_init_v4_pic insn
+ before all other insns if needed for V.4 PIC calls.
+
+ * eabi-ci.asm (_GLOBAL_OFFSET_TABLE_): Do not provide a default
+ definition, since it interferes with the linker generated version.
+
+Tue Jun 25 01:17:50 1996 Jeffrey A. Law <law@cygnsu.com>
+
+ * h8300.c (function_prologue): Update "monitor" prologues.
+ (function_epilogue): Similarly.
+
+ * pa.h (PARSE_LDD_OUTPUT): Handle dynamic libraries that are
+ loaded "statically".
+
+Mon Jun 24 19:48:36 1996 Joel Sherrill <joel@merlin.gcs.redstone.army.mil>
+
+ * configure ({i386,i960,m68k,powerpc,sparc}-rtems): New targets.
+ * i386/go32-rtems.h, i386/i386-rtems.h: New files.
+ * i960/i960-rtems.h: New file.
+ * m68k/m68k-rtems.h: New file.
+ * rs6000/powerpc-rtems.h: New file.
+ * sparc/sparc-rtems.h: New file.
+
+Mon Jun 24 23:09:22 1996 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c: (create_definition): Diagnose `#define #' only once.
+
+Mon Jun 24 11:42:58 1996 Jim Wilson <wilson@cygnus.com>
+
+ * i386/cygwin32.h, rs6000/cygwin32.h (CPP_PREDEFINES): For consistency,
+ change to define WIN32, WINNT, and CYGWIN32.
+
+Mon Jun 24 10:46:50 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.md (floatsidf2*): Move the xor of the argument into the
+ define_insn, since it confuses inline function expands.
+
+Fri Jun 21 20:40:17 1996 Jim Wilson <wilson@cygnus.com>
+
+ * mips.md (call_internal1, call_value_internal1): Delete obsolete code.
+ (call_internal2, call_value_internal2, call_value_multiple_internal2):
+ Delete obsolete code. Explicitly load SYMBOL_REF into register.
+ (call_value): Change Pmode to SImode in gen_call_value_internal0 call.
+
+Thu Jun 20 12:20:33 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * configure (*-aix*): If building a cross compiler, use t-xnewas
+ instead of t-newas.
+
+ * rs6000.c (num_insns_constant_wide): Fix typo if HOST_WIDE_INT
+ has more than 32 bits.
+
+Wed Jun 19 17:50:33 1996 Richard Henderson <richard@atheist.tamu.edu>
+
+ * combine.c (move_deaths): New parameter maybe_kill_insn.
+ Don't move note if reg killed by maybe_kill_insn.
+ (try_combine): Pass new arg to move_deaths.
+
+Wed Jun 19 10:44:47 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * toplev.c (flag_keep_static_consts): Define.
+ (f_options): Add "keep-static-consts" entry.
+ (compile_file): Check it in addition to !optimize for emitting
+ static const variables.
+
+Tue Jun 18 23:37:20 1996 Doug Evans <dje@cygnus.com>
+
+ * i386/cygwin32.h (ASM_OUTPUT_SOURCE_LINE): Local symbols begin with L.
+
+Tue Jun 18 12:00:11 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * varasm.c (asm_output_aligned_bss): Don't emit a skip of size 0.
+
+Tue Jun 18 06:24:28 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * integrate.c (expand_inline_function): Add missing call to
+ force_operand when getting structure_value_addr into reg.
+
+ * alpha.c (override_options): Allow EV4/5 or 21064/21164 for cpu.
+ Clean up handling of floating-point options.
+ * alpha.h (TARGET_SWITCHES): Have all -mieee options turn
+ on MASK_IEEE_CONFORMANT.
+ (TARGET_DEFAULT): Use symbolic value.
+ * alpha.md: When not involving named pattern, update condition
+ to include alpha_tp != ALPHA_TP_INSN.
+ Don't do float_extend as part of other pattern when ALPHA_TP_INSN.
+ (extendsfsd2): Split into two patterns, depending on
+ value of alpha_tp.
+
+ * mips/iris6.h (ASM_SPEC): Treat -o32 as -32 and -n64 same as -64.
+ * mips.c (override_options): Likewise.
+
+ * genattrtab.c (fatal): Declare A1 and A2 as char *.
+
+ * function.c (find_temp_slot_from_address): Check for overlap
+ from BASE_OFFSET if X is PLUS of virtual_stack_vars_rtx and const.
+
+ * flow.c (flow_analysis): Fix typo in last change.
+
+ * expr.c (expand_builtin, case BUILT_IN_{SET,LONG}JMP): Properly
+ handle case when ptr_mode != Pmode.
+
+ * combine.c (try_combine): Don't use split if dest of new I2
+ is used between I2 and I3.
+
+ * c-typeck.c (pointer_int_sum): Convert integer to both signedness
+ and precision of sizetype.
+ * explow.c (convert_memory_address, case PLUS, MULT): Don't commute
+ operation with extension if not adding small integer.
+
+ * Makefile.in (BOOT_LANGUAGES): New variable.
+ (bootstrap): Use it to select languages for stage1.
+ * configure (extra_host_objs): New variable.
+ Separate files needed for target and host and concatenate list.
+ (extra_gcc_objs): Use setting for host, not target.
+ (objc_thread_file): Start with it as null, then don't include "thr-".
+ Print name of file after others and in same format.
+ (alpha-*-winnt*, i[3456]86-*-winnt): oldnames.o is in extra_host_objs.
+ (all_boot_languages): New variable.
+ Set from boot_language variable in config-lang.in.
+ Defines value of BOOT_LANGUAGES in Makefile.
+ (Makefile): Set target to the canonical form of target.
+
+Mon Jun 17 22:37:07 1996 Mike Meissner <meissner@rtl.cygnus.com>
+
+ * rs6000/win-nt.h (ASM_DECLARE_FUNCTION_NAME): Put function
+ descriptor in .reldata, not .text.
+
+Mon Jun 17 16:05:34 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * ginclude/stddef.h (wint_t): Don't wrap with #ifndef __cplusplus.
+
+Mon Jun 17 15:03:20 1996 Jim Wilson <wilson@cygnus.com>
+
+ * mips.c (mips_split_addresses): New variable.
+ (simple_memory_operand): Add comment about mode check. Add check
+ for LO_SUM.
+ (call_insn_operand): OP is now an addresses instead of a MEM.
+ (move_operand, mips_check_split): New functions.
+ (mips_count_memory_refs): Add check for LO_SUM.
+ (mips_move_1word): Add HIGH support.
+ (mips_address_cost): Delete check for HIGH.
+ (output_block_move): Handle LO_SUM addresses.
+ (override_options): Set mips_split_addresses.
+ (print_operand_address): Add LO_SUM support.
+ * mips.h (mips_split_addresses, mips_check_split, move_operand):
+ New declarations
+ (GO_IF_LEGITIMATE_ADDRESS): Reject constant addresses when
+ mips_split_addresses is TRUE. Add LO_SUM support.
+ (LEGITIMIZE_ADDRESS): Add LO_SUM support.
+ (PREDICATE_CODES): Modify call_insn_operand support. Add
+ move_operand.
+ * mips.md (memory): Change r4100/r4300 support.
+ (imuldiv): Add r4300 support.
+ (high, low): New patterns.
+ (movsi, movdi): Add LO_SUM support.
+ (movsi_internal1, movsi_internal2): Use move_operand instead of
+ general_operand.
+ (movstrsi_internal, movstrsi_internal2): Delete R constraint.
+ (call, call_value): Pass address instead of MEM to call_insn_operand.
+ Call gen_call_{value_}internal0 instead of internal1.
+ (call_internal0, call_value_internal0, call_multiple_internal0):
+ New patterns.
+ (call_internal1, call_internal2, call_value_internal1,
+ call_value_internal2, call_value_multiple_internal2): Add explicit
+ MEM before target address.
+
+Sun Jun 16 23:05:16 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * configure (hppa*-hp-hpux10*): Use new pa-hpux10 configuration file.
+ (hppa*-hp-hpux*): Use hpux9 configuration files by default.
+ * pa/pa-hpux10.h: New file.
+ * pa/pa-ghpux9.h: Deleted. No longer used.
+
+Sat Jun 15 04:35:51 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
+
+ * i386/gnu.h (LINK_SPEC): Remove -rpath /lib/ option.
+ Ignore -ibcs option.
+
+Thu Jun 13 14:49:41 1996 Jim Wilson <wilson@cygnus.com>
+
+ * gen-protos.c (main): Change argv[i] to argv[0][i].
+
+Thu Jun 13 10:46:24 1996 Doug Evans <dje@cygnus.com>
+
+ * gcc.c (pfatal_pexecute): Delete code to check errno < sys_nerr.
+
+Wed Jun 12 21:47:10 1996 Eliot Dresselhaus <dresselh@rft30.nas.nasa.gov>
+
+ * alpha.c (alpha_cpu, alpha_cpu_string): New variables.
+ (override_options): Process -mcpu= value.
+ (alpha_adjust_cost): Handle adjustments for EV5.
+ * alpha.h (enum processor_type): New enum.
+ (alpha_cpu, alpha_cpu_string): New declarations.
+ (target_options): Add "cpu=".
+ (RTX_COSTS): Adjust values for EV5.
+ * alpha.md: Add scheduling rules for EV5.
+
+Tue Jun 11 17:51:03 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-common.c (check_format_info): Change text of message about use
+ of `0' with precision.
+
+Tue Jun 11 15:14:10 1996 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.h (TARGET_SCHEDULE_PROLOGUE): New. Allows prologue to
+ be emitted as asm or rtl.
+
+ * i386.c (function_prologue): Emit prologue as asm.
+ (override_options): Don't emit rtl for prologue if -fpic.
+
+Tue Jun 11 14:41:01 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/eabi.asm (__eabi): Fix normal code so that it properly
+ loads up r2/r13 if needed again.
+
+ * rs6000/sysv4.h (CPP_ENDIAN_SPEC): Call cpp_endian_default, not
+ cpp_endian_default_spec.
+
+Mon Jun 10 15:10:56 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * local-alloc.c (update_equiv_regs): Ignore insns that read or
+ write registers that are likely to be spilled.
+
+ * pa.h (cmp_type): Add CMP_PSI.
+ (FUNCTION_POINTER_COMPARISON_MODE): Define.
+ * pa.md (cmppsi): New expander.
+ (plabel_dereference): New pattern
+
+Mon Jun 10 14:56:14 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/sol2.h (SKIP_ASM_OP): Delete, Solaris accepts .space,
+ like rest of PowerPC V4 ports.
+
+ * rs6000/sysv4.h (ASM_OUTPUT_ALIGNED_LOCAL): Emit .lcomm if not
+ using the .sbss area. If using the .sbss area, put out
+ appropriate .size directive.
+
+Mon Jun 10 14:53:38 1996 Doug Evans <dje@cygnus.com>
+
+ * Move fork/exec/wait handling into file of its own.
+ * pexecute.c: New file.
+ * Makefile.in (pexecute.o): Add rule.
+ (xgcc): Link in pexecute.o.
+ (protoize,unprotoize): Likewise.
+ * gcc.c (_WIN32): Don't include process.h or declare spawnv{,p}.
+ (pexecute,pwait): Add prototypes.
+ (PEXECUTE_{FIRST,LAST,SEARCH}): Define.
+ (execv,execvp): Delete decls.
+ (perror_exec): Delete.
+ (pfatal_pexecute): New function.
+ (pexecute support): Delete.
+ (execute): -pipe not supported if _WIN32 or OS2.
+ Update call to pexecute. Fatal error if pexecute fails. Call pwait.
+ * protoize.c: Include gansidecl.h.
+ (my_execvp): Delete.
+ (choose_temp_base,pexecute,pwait): Declare.
+ (PEXECUTE_{FIRST,LAST,SEARCH}): Define.
+ (execvp): Delete decl.
+ (usage): Fix typo.
+ (gen_aux_info_file): Rewrite to use pexecute/pwait.
+
+ * gcc.c (do_spec_1): Allow leading text in version string.
+ Delete support for default minor number = 0.
+
+Mon Jun 10 11:49:53 1996 Scott Christley <scottc@net-community.com>
+
+ * objc/Makefile (libobjc.a): Don't delete the library.
+
+ * objc/thr.h (objc_set_thread_callback): New function.
+ (objc_thread_callback): Typedef for the hook function.
+ * objc/thr.c (__objc_thread_detach_function): Clear thread storage.
+ Call the thread hook function when first becoming multi-threaded.
+ (objc_set_thread_callback): New function.
+
+ * objc/selector.c (__sel_register_typed_name): Additional parameter
+ that indicates whether name and type parameters are constant or not.
+ * objc/runtime.h (__sel_register_typed_name): Likewise.
+ * objc/init.c (__sel_register_typed_name): Likewise.
+
+ * objc/init.c (__objc_init_protocols): Need to unlock mutex.
+
+Mon Jun 10 11:44:44 1996 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * sparc/t-sol2 (gmon.o): Depend on stmp-int-hdrs.
+ (crt1.o, crti.o, crtn.o, gcrt1.o): Depend on $(GCC_PASSES).
+
+Mon Jun 10 11:29:46 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * flow.c (flow_analysis, find_basic_blocks): Ignore
+ nonlocal_label_list for CALL_INSN that has a REG_RETVAL.
+
+ * c-common.c (decl_attributes, case A_T_UNION): Don't look at fields
+ of union if there aren't any.
+
+Sat Jun 8 22:13:33 1996 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.c (ix86_expand_prologue): Keep pic register load ahead
+ of reference which may use a pic register.
+
+Sat Jun 8 22:13:33 1996 Jim Wilson <wilson@cygnus.com>
+
+ * i386.md (strlensi_unroll4, strlensi_unroll5): Use + not =& for
+ constraint for input/output operand 2.
+
+Sat Jun 8 22:13:33 1996 J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+ * i386.h (CONST_COSTS): Even integer constants have a cost.
+ (RTX_COSTS): Take costs of subexpressions into account.
+ If a multiply is actually a shift, use the cost of the shift.
+ * i386/unix.h (SHIFT_DOUBLE_OMITS_COUNT): New macro.
+ * i386/{gas, next, seq-gas}.h (SHIFT_DOUBLE_OMITS_COUNT): Redefine
+ as zero.
+ * i386.c (print_operand): new letter 's'.
+
+Sat Jun 8 15:13:33 1996 Jim Wilson <wilson@cygnus.com>
+
+ * mips.c (override_options): Add vr4100 and vr4300 support.
+ * mips.h (enum processor_type): Likewise.
+ (MASK_4300_MUL_FIX, TARGET_4300_MUL_FIX): New macros.
+ (TARGET_SWITCHES): Add -mfix4300 option.
+ * mips.md (cpu, memory, imuldiv, adder, mult, divide): Add
+ vr4100 and vr4300 support.
+ (muldf3, mulsf3): Add vr4300 support.
+ (muldf3_internal, muldf_r4300, mulsf3_internal, mulsf_r4300): New
+ patterns.
+
+Sat Jun 8 14:35:23 1996 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * toplev.c (main): Re-enable -gxcoff+.
+
+Sat Jun 8 14:20:14 1996 J.T. Conklin <jtc@rtl.cygnus.com>
+
+ * m68k/lb1sf68.asm (__{eq,ne,gt,lt,ge,le}{df,sf}2): Removed
+ extraneous comments, constants, labels, etc.
+
+ * m68k/altos3068.h (TARGET_DEFAULT): Use MASK_* macros
+ instead of explicit constants in definitions or conditionals.
+ * m68k/{apollo68, aux, ccur-GAS, dpx2, hp320, hp3bsd}.h: Likewise.
+ * m68k/{hp3bsd44, isi-nfp, isi, linux-aout, linux}.h): Likewise.
+ * m68k/{lynx-ng, lynx, m68k-none, m68k-psos, m68kv4}.h): Likewise.
+ * m68k/{mot3300, netbsd, news, next, pbb, plexus, sun2o4}.h): Likewise.
+ * m68k/{sun3, sun3n, tower}.h): Likewise.
+
+Sat Jun 8 13:55:23 1996 Matthias Pfaller (leo@marco.de)
+
+ * ns32k.md (define_insns for ffs[qhs]i2): Deleted.
+ (define_expand for ffssi2): New pattern.
+
+Sat Jun 8 13:44:14 1996 Stephen L Moshier (moshier@world.std.com)
+
+ * reload.c (find_equiv_reg): Set need_stable_sp if GOAL is the
+ stack pointer.
+
+Sat Jun 8 13:36:05 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (fixup_var_refs_1, case SIGN_EXTEND): Handle
+ paradoxical SUBREGs as first operand.
+ (fixup_var_regs_1, case SET): Handle paradoxical SUBREGs as
+ first operand of a ZERO_EXTRACT in SET_DEST.
+
+ * c-common.c (enum attrs): Add A_FORMAT_ARG.
+ (init_attribute): Initialize it.
+ (decl_attributes, case A_FORMAT): Clean up error messages.
+ (decl_attributes, case A_FORMAT_ARG): New case.
+ (struct international_format_info): New structure and typedef.
+ (international_format_list): New variable.
+ (record_international_format): New function.
+ (init_format_info): Call it for gettext, dcgettext, and dcgettext.
+ (check_format_info): See if format arg is call to
+ internationalization function.
+
+Fri Jun 7 20:04:40 1996 Jim Wilson <wilson@cygnus.com>
+
+ * gcc.c (MULTILIB_SELECT): Delete definition.
+ (multilib_select): Delete static initializer.
+ (multilib_obstack, multilib_raw): New global variables.
+ (multilib.h): Include inside multilib_raw definition.
+ (main): Set multilib_select from multilib_raw.
+ * genmultilib: Change output to be a sequence of short strings
+ separated by commas rather than a single long macro definition.
+
+ * cse.c (simplify_binary_operation, case MULT): Check for case
+ where width is larger than HOST_BITS_PER_WIDE_INT, and upper most
+ bit is set. We can not generate a simple shift in this case.
+
+ * gsyms.h (enum sdb_type): Add T_LNGDBL if EXTENDED_SDB_BASIC_TYPES.
+ (enum sdb_masks): Add EXTENDED_SDB_BASIC_TYPES masks.
+ * sdbout.c (gsyms.h): Include if CROSS_COMPILE is defined.
+ (plain_type_1): Use TYPE_PRECISION instead of TYPE_SIZE.
+ Add check for LONG_DOUBLE_TYPE_SIZE if EXTENDED_SDB_BASIC_TYPES.
+ * i960.h (EXTENDED_SDB_BASIC_TYPES): Define.
+ (PUT_SDB_TYPE): Delete now unnecessary shifting and masking.
+
+ * i960.h (i960_output_move_{double,quad}): Declare.
+
+Fri Jun 7 19:22:09 1996 Scott Christley <scottc@net-community.com>
+
+ * Makefile.in (OBJC_THREAD_FILE): New variable.
+ * configure (objc_thread_file): Set new variable to appropriate
+ values based upon target operating system; default is `thr-single'.
+ * objc/Makefile (OBJC_THREAD_FILE): Add target and dependency.
+ (thr.o): Remove OS specific thread files as dependencies.
+ * objc/thr-decosf1.c: Now compiles as a separate source file, so
+ include appropriate Objective-C headers.
+ * objc/thr-{mach,os2,posix,irix,single,solaris,win32}.c: Likewise.
+ * objc/thr.c: Remove inclusion of source files.
+ * objc/thr.h (__objc_thread_exit_status): Declare global variable.
+ * objc/thr-pthreads.c: New file.
+
+Fri Jun 7 19:04:04 1996 J.T. Conklin <jtc@rtl.cygnus.com>
+
+ * m68k.h (TARGET_SWITCHES): Treat -m68302 like -m68000 and -m68332
+ like -m68020; remove -mno-68302 and -mno-68332.
+
+Fri Jun 7 12:06:12 1996 Per Bothner <bothner@deneb.cygnus.com>
+
+ * expr.c (safe_from_p): Allow Chill-style variable-sized arrays.
+
+Thu Jun 6 23:11:11 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * h8300.c (h8300_monitor_function_p): New function.
+ (h8300_os_task_function_p): Likewise.
+ (os_task, monitor): Variables to note if the current
+ function is an os_task or monitor.
+ (function_prologue): Set monitor and/or os_task as needed. Handle
+ os_task and monitor functions.
+ (function_epilogue): Clear monitor and os_task. Handle os_task and
+ monitor functions.
+ (h8300_valid_machine_decl_attribute): Accept "OS_Task" and
+ "monitor".
+
+Thu Jun 6 20:01:54 1996 Per Bothner <bothner@cygnus.com>
+
+ * gen-protos.c (progname): New variable (needed by cppalloc.c).
+ (main): Set progname.
+
+ * cpplib.h (struct parse_file): Removed.
+ (CPP_FATAL_LIMIT, CPP_FATAL_ERRORS, CPP_OUT_BUFFER): New macros.
+ * cpphash.c (cpp_lookup): Change struct parse_file -> cpp_reader.
+
+ * cpplib.c (init_parse_option): Renamed to cpp_options_init.
+ (push_parse_file): Renamed to ...
+ (cpp_start_read): Change to return 1 on success, 0 on failure.
+ (init_parse_file): Renamed to cpp_reader_init.
+ * cppmain.c (main): Use CPP_SET_WRITTEN and cpp_fatal.
+ Use renamed function names, and return protocols.
+ * fix-header.c (read_scan_file): Likewise.
+
+ * cpperror.c (cpp_message): Generalize for "fatal" errors.
+ (cpp_fatal): New function (just calls cpp_message).
+ * cpplib.c (cpp_start_read, cpp_handle_options, cpp_finish,
+ parse_goto_mark, parse_move_mark): Use cpp_fatal rather than fatal.
+
+ * fix-header.c (check_macro_names): Fix struct parse_file->cpp_reader.
+ * cpplib.c (newline_fix): Remove unused function.
+
+Thu Jun 6 19:47:26 1996 Jim Wilson <wilson@cygnus.com>
+
+ Changes to support parameters and return values in multiple
+ non-contiguous locations.
+ * calls.c (expand_call): Handle NIL in PARALLEL. Handle PARALLEL
+ parameter in REG. Handle PARALLEL return value in VALREG.
+ (emit_library_call, emit_library_call_value): Abort for PARALLEL.
+ (store_one_arg): Delete code for handling EXPR_LIST.
+ * expr.c (emit_group_load, emit_group_store): New functions.
+ (use_group_regs): New function.
+ (emit_push_insn): Handle PARALLEL parameter in REG.
+ (expand_assignment): Handle PARALLEL to_rtx.
+ (store_expr): Handle PARALLEL target.
+ * expr.h (emit_group_load, emit_group_store, use_group_regs): New
+ declarations.
+ * function.c (assign_parms): Handle PARALLEL parameter in ENTRY_PARM.
+ * stmt.c (expand_value_return): Handle PARALLEL return_reg.
+
+ * mips/abi64.h (TYPE_DEPENDENT_REG): Delete.
+ * mips.c (function_arg): Return PARALLEL for structure with
+ aligned double fields.
+ (type_dependent_reg): Delete.
+ (mips_function_value): Return PARALLEL for structure
+ with two floating point fields.
+ * mips/mips.md (call_value): Handle PARALLEL in operands[0].
+ (call_value_multiple_internal2): New pattern.
+ * pa.h (FUNCTION_ARG): General PARALLEL instead of EXPR_LIST.
+ * rs6000.c (init_cumulative_args): Change EXPR_LIST to PARALLEL
+ in comments.
+ (function_arg): Generate PARALLEL instead of EXPR_LIST.
+
+Thu Jun 6 18:21:27 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (assign_parms): Tighten up code that makes REG_EQUIV
+ notes for parms.
+
+ * fold-const.c (fold): Don't do anything with evaluated SAVE_EXPR.
+
+Thu Jun 6 17:54:07 1996 J.T. Conklin <jtc@cygnus.com>
+
+ * m68k.h (TARGET_SWITCHES): Group all floating point options.
+ When an fp option is selected, unset bits used for other mutually
+ exclusive fp options.
+ (OVERRIDE_OPTIONS): Remove special case for SUPPORT_SUN_FPA;
+ bits used for 68881 and SKY are now cleared by TARGET_SWITCHES.
+
+ * m68k.md (movsi_const0, movhi): Favor clr with TARGET_5200.
+ (add[qhs]3): Don't use two addqw/subqw insns to add small integers to
+ an address register with TARGET_68060.
+ (stack push peephole): Use moveq.l with TARGET_5200 (when appropriate).
+
+ * m68k.h (MASK_5200, TARGET_5200): New macros.
+ (TARGET_SWITCHES): Add "m5200".
+ (LEGITIMATE_INDEX_P): Add TARGET_5200 to conditional expression.
+ * m68k.c (const_method): Do not synthesize long constants
+ with byte or word operations with TARGET_5200.
+ * m68k.md: Disable byte and word arithmetic, rotate, integer
+ divide, dbcc, etc. insns for TARGET_5200.
+ * m68k-none.h: (CPU_FPU_SPEC, CPP_SPEC, ASM_SPEC): Support m5200.
+
+Thu Jun 6 17:32:32 1996 Paul Eggert <eggert@twinsun.com>
+
+ * fixproto (subdirs): Work around Solaris 2.5
+ /usr/xpgr/bin/sed problem with \+\+.
+
+Thu Jun 6 15:06:27 1996 Jim Wilson <wilson@cygnus.com>
+
+ * c-decl.c (grokdeclarator): Call pop_obstacks after creating
+ TYPE_DECL.
+
+ * loop.c (strength_reduce): If HAVE_cc0 defined, disable auto_inc_opt
+ if it would put an insn between a cc0 setter/user pair.
+
+Thu Jun 6 13:06:54 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/sysv4.h (LIBGCC2_WORDS_BIG_ENDIAN): If __sun__ is
+ defined, treat that as little endian.
+
+Wed Jun 5 20:04:53 1996 Jim Wilson <wilson@cygnus.com>
+
+ * i960.h (ROUND_TYPE_ALIGN): Add check for TYPE_PACKED.
+
+ * sh.h (SHORT_IMMEDIATES_SIGN_EXTEND): Define.
+ * sh.md (branch_true): Add comment about T-bit compares.
+
+Tue Jun 4 23:08:34 1996 Per Bothner <bothner@deneb.cygnus.com>
+
+ * cpplib.h, cpplib.c: Remove support for !STATIC_BUFFERS.
+ * cpplib.h: Use unsigned char rather than U_CHAR.
+ * cpplib.h (cpp_reader): Add destructor #ifdef __cplusplus.
+ (cpp_cleanup): New prototype.
+ * cpplib.c (special_symbol, do_once, do_include, cpp_get_token):
+ Compare cpp_buffer against CPP_NULL_BUFFER, not NULL.
+
+ * cpplib.c (dump_special_to_buffer): New function.
+ (initialize_builtins): Use it.
+
+Wed Jun 5 19:10:22 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * pa/pa.h (TEXT_SPACE_P): Fix thinko in last change.
+
+Wed Jun 5 16:25:51 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.h (ASM_DEFAULT_SPEC): Default to "", not -mpwr.
+
+ * sysv4.h (SUBTARGET_SWITCHES): Add -mshlib.
+ (LINK_PATH_SPEC): Add -compat-bsd support from Solaris.
+ (LINK_SPEC): Eliminate %{b} and %{G}, since they conflict with GCC
+ switches. Defer shared library support to LINK_SHLIB_SPEC. Defer
+ target selection to LINK_TARGET_SPEC.
+ (LINK_SHLIB_SPEC): Provide two different versions, depending on
+ whether shared libraries are default or not. Make shared
+ libraries not default until linker is fixed.
+ (LINK_OS_*_SPEC): New specs for OS specific linker switches.
+ (SUBTARGET_EXTRA_SPECS): Add new specs.
+
+ * {sol2,sysv4}.h (LINK_SPEC): Move Solaris link into general link spec.
+
+ * {sysv4,sysv4le,eabile}.h (LINK_TARGET_SPEC): Only pass -oformat
+ to the linker if the user is changing the default endian format.
+
+ * {sol2,linux,eabisim,eabilesim}.h (LINK_OS_DEFAULT_SPEC): Define
+ to use the appropriate OS link spec.
+
+Wed Jun 5 16:35:10 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * ginclude/stddef.h: Fix typo: TYPE_ptrdiff_t to _TYPE_ptrdiff_t.
+
+Wed Jun 5 15:52:57 1996 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * varasm.c (output_constructor): Handle RANGE_EXPR in array index.
+
+Wed Jun 5 13:45:54 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * sparc.md (*call_{address,symbolic}_struct_value_sp32): Allow
+ operand 2 to be const0_rtx.
+
+Tue Jun 4 16:43:44 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * varasm.c (make_decl_rtl): Don't update DECL_ASSEMBLER_NAME for
+ local statics.
+
+ * c-decl.c (start_decl): Always set DECL_COMMON on statics.
+ * varasm.c (assemble_variable): Only treat vars with DECL_COMMON
+ as common.
+
+Tue Jun 4 14:55:49 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * pa.c (reloc_needed): New function.
+ * pa.h (TEXT_SPACE_P): Variables/constants with initializers
+ requiring relocs never live in the text space.
+
+Tue Jun 4 14:10:46 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * sh.c (fp_zero_operand): Do not accept minus zero.
+
+ * sh.h (ASM_OUTPUT_LOOP_ALIGN): Define.
+ (ASM_OUTPUT_ALIGN_CODE): Define.
+ (ADJUST_INSN_LENGTH): Add in bytes that may be added by
+ alignment.
+ * sh.c (output_branch): Run ADJUST_INSN_LENGTH in reverse to get
+ correct length. Just call abort rather than returning "bad".
+ (find_barrier): Adjust limits for possible alignment.
+
+Tue Jun 4 09:35:05 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/t-solaris: New target config file for PowerPC Solaris
+ without gas.
+
+ * rs6000/t-ppc: Eliminate all multilib varients except for
+ software floating point.
+
+ * configure (powerpcle-*-solaris*): If not --with-gnu-as, use
+ t-solaris, not t-ppc.
+
+ * rs6000/sol2.h (MULTILIB_DEFAULTS): Add correct defaults for
+ Solaris.
+
+ * rs6000/sysv4.h (ASM_OUTPUT_SECTION_NAME): Clone from svr4.h, omit
+ @progbits, since Solaris assembler doesn't like it.
+ (LIB_SOLARIS_SPEC): If -msolaris-cclib, add libabi.a.
+ ({START,END}FILE_SOLARIS_SPEC): If -msolaris-cclib, use explicit
+ pathnames for the Solaris compiler start/end files.
+ (ASM_SPEC): Pass -mno-regnames to the assembler.
+
+Mon Jun 3 19:40:10 1996 Jim Wilson <wilson@cygnus.com>
+
+ * mips/abi64.h (CPP_SPEC): Make -mabi=n32 the default.
+ * mips/iris6.h (MIPS_ISA_DEFAULT, MIPS_ABI_DEFAULT, MULTILIB_DEFAULTS,
+ ASM_SPEC, STARTFILE_SPEC, ENDFILE_SPEC, LINK_SPEC): Likewise.
+ * mips.md (tablejump_internal4+1): Fix typo in condition.
+ * mips/x-iris6 (CC, OLDCC): Define to be `cc -32'.
+
+Mon Jun 3 07:57:35 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.def ([LR]SHIFT_EXPR): Remove `a' from printed names.
+
+ * sparc.md (call): Mask unimp operand to 12 bits, just like Sun.
+
+ * expr.c (store_field): Fix typo in last change; update TARGET addr.
+
+ * c-decl.c (start_struct): Set TYPE_PACKED from flag_pack_struct.
+ (start_enum): Likewise but from flag_short_enums.
+ (finish_enum): Test TYPE_PACKED, not flag_short_enums.
+ * stor-layout.c (layout_decl): Test DECL_PACKED and TYPE_PACKED
+ instead of flag_pack_struct.
+ (layout_record): Likewise.
+
+Sun Jun 2 19:41:14 1996 Jim Wilson <wilson@cygnus.com>
+
+ * mips.md (tablejump_internal3, tablejump_internal4): New patterns.
+ (tablejump): Use them for PIC code.
+
+Fri May 31 17:26:53 1996 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.c (ix86_expand_epilogue): Don't generate references to an
+ exposed vacated stack.
+ * i386.md (epilogue_set_stack_ptr): New.
+
+Fri May 31 15:07:49 1996 Jim Wilson <wilson@cygnus.com>
+
+ * mips/abi64.h: Add -mabi=n32 support.
+ (ABI_64BIT): Delete.
+ (TARGET_LONG64, CPP_SPEC, STACK_BOUNDARY, MIPS_STACK_ALIGN,
+ GP_ARG_LAST, FP_ARG_LAST, SUBTARGET_CONDITIONAL_REGISTER_USAGE,
+ MAX_ARGS_IN_REGISTER, FUNCTION_ARG_PADDING, RETURN_IN_MEMORY,
+ SETUP_INCOMING_VARARGS): Modify.
+ (REG_PARM_STACK_SPACE): Ifdef out.
+ (TARGET_DEFAULT, SUBTARGET_TARGET_OPTIONS): Define.
+ * mips/iris6.h: Add -mabi=n32 support.
+ (TARGET_DEFAULT, ASM_OUTPUT_INTERNAL_LABEL,
+ ASM_GENERATE_INTERNAL_LABEL): Delete.
+ (MULTILIB_DEFAULTS, ASM_SPEC, EXTRA_SECTION_FUNCTIONS,
+ ASM_OUTPUT_ALIGNED_LOCAL, STARTFILE_SPEC, ENDFILE_SPEC, LINK_SPEC):
+ Modify.
+ (MIPS_ABI_DEFAULT, LOCAL_LABEL_PREFIX): Define.
+ * mips.c: Add -mabi=n32 support.
+ (mips_const_double_ok, mips_move_1word, mips_move_2words,
+ function_arg, override_options, mips_asm_file_start,
+ compute_frame_size, save_restore_insns, function_prologue,
+ mips_expand_prologue, function_epilogue, mips_function_value): Modify.
+ (mips_abi, mips_abi_string): Define
+ * mips.h: Add -mabi=n32 support.
+ (ABI_64BIT): Delete.
+ (TARGET_OPTIONS, INITIAL_ELIMINATION_OFFSET, GO_IF_LEGITIMATE_ADDRESS,
+ CONSTANT_ADDRESS_P, LEGITIMATE_CONSTANT_P, LEGITIMIZE_ADDRESS,
+ ASM_OUTPUT_ADDR_DIFF_ELT): Modify.
+ (enum mips_abi_type, SUBTARGET_TARGET_OPTIONS): Define.
+ (mips_abi, mips_abi_string): Declare.
+ * mips.md (jump, tablejump_internal1, tablejump_internal2): Add
+ -mabi=n32 support.
+ * mips/t-iris6 (MULTILIB_OPTIONS): Add -mabi=n32 support.
+ * mips/xm-irix6.h (HOST_BITS_PER_LONG): Use _MIPS_SZLONG not 64.
+ * ginclude/va-mips.h (va_start): Add -mabi=n32 support.
+
+Fri May 31 14:45:30 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/sysv4.h (SUBTARGET_SWITCHES): Add -msolaris-cclib to use
+ the Sun compiler's crt files instead of ours.
+ ({START,END}FILE_SOLARIS_SPEC): If -msolaris-cclib, use the Sun
+ compiler's crt files instead of ours.
+ (SUBTARGET_OVERRIDE_OPTIONS): Don't set -msdata=data for Solaris.
+ (SBSS_SECTION_ASM_OP): For Solaris, don't use @nobits.
+ (CPP_OS_SOLARIS_SPEC): Remove -Asystem(unix) and -Asystem(svr4).
+
+ * rs6000/t-ppc{,gas} (MULTILIB*): Add Solaris specific multilibs.
+
+ * rs6000/eabi{,le}sim.h (*_DEFAULT_SPEC): Rather than using
+ duplicate definitions, just use %(...) so that there is only one
+ place in the specs file where the switches are defined.
+ * rs6000/{linux,sol2}.h (*_DEFAULT_SPEC): Ditto.
+
+ * rs6000/sol2.h (CPP_PREDEFINES): Use the standard one in sysv4.h.
+ (RS6000_ABI_NAME): Default is solaris.
+ (ASM_OUTPUT_ALIGNED_LOCAL): Don't redefine.
+
+ * rs6000/sol-c{i.asm,n.asm,c0.c}: Provide more things that Solaris
+ needs for program startup.
+
+Thu May 30 21:57:34 1996 Mike Stump <mrs@cygnus.com>
+
+ * tree.def (OFFSET_REF): Remove.
+ * expr.c (expand_expr, case OFFSET_REF): Likewise.
+ * tree.c (substitute_in_expr): Remove OFFSET_REF code.
+
+Wed May 29 14:54:44 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/eabi.asm (__eabi): If not -mrelocatable, don't assemble
+ relocatable functions, so that it can be assembled with the
+ Solaris assembler.
+
+ * rs6000/sysv4.h (CPP_SYSV_SPEC): Define _RELOCATABLE if
+ -mrelocatable-lib as well as -mrelocatable.
+
+ * rs6000.c (rs6000_file_start): New function to print some more
+ information to the asm file.
+ * rs6000/{sysv4,win-nt,rs6000}.h (ASM_FILE_START): Call it.
+
+Tue May 28 15:21:24 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.h (FIRST_PSEUDO_REGISTER): Bump to 77.
+ ({FIXED,CALL_USED}_REGISTERS): Add support for fpmem pseudo register.
+ (REG_ALLOC_ORDER, HARD_REGNO_{NREGS,MODE_OK}): Likewise.
+ (REGISTER_MOVE_COST, reg_class, REG_CLASS_{NAMES,CONTENTS}): Likewise.
+ (REGNO_REG_CLASS, PREFERRED_RELOAD_CLASS): Likewise.
+ (CLASS_{MAX_NREGS,CANNOT_CHANGE_SIZE,MAX_NREGS}): Likewise.
+ (rs6000_stack, {,DEBUG_}REGISTER_NAMES): Ditto.
+ (FPMEM_{REGNO_P,REGNUM}): New macros for fpmem register.
+ (rs6000_fpmem_{offset,size}): New global variables.
+ (RS6000_VARARGS_OFFSET): Fpmem temporary storage is located
+ between outgoing arg area and varargs save area.
+ (STARTING_FRAME_OFFSET, STACK_DYNAMIC_OFFSET): Likewise.
+ (PREDICATE_CODES): Add fpmem_operand.
+ ({count_register,fpmem}_operand): Add declarations.
+
+ * rs6000.c ({rs6000,alt}_reg_names): Add support for fpmem 'register'.
+ (rs6000_fpmem_{offset,size}): New global variables.
+ (fpmem_operand): Return true for fpmem registers.
+ (gpc_reg_operand): The fpmem register is not general purpose.
+ (includes_rshift_p): Add casts to silence warnings from Solaris
+ PowerPC host compiler.
+ (print_operand): Add 'v' operand type for the upper 16 bits of
+ signed constants, to placate the Solaris assembler.
+ ({rs6000,debug}_stack_info): Add support for fpmem 'register'.
+ (output_epilog): Likewise.
+
+ * rs6000.md (addsi3,movsi,movsf,movdi): Use %v for constants with
+ the upper 16 bits, to get the sign correct for PowerPC Solaris.
+ (float{,uns}sidf2,fix_truncdfsi2): Rewrite to use 'register' 76
+ for the memory location used to convert between float and integer.
+
+ * sysv4.h (ASM_OUTPUT_{CON,DE}STRUCTOR): Use code laid down in
+ .init and .fini for making constructors and destructors under
+ Solaris.
+ (ASM_SPEC): Do not pass -u to the assembler.
+ (CC1_SPEC): -mrelocatable implies -meabi.
+
+ * sol2.h (RS6000_ABI_NAME): Default ABI is Solaris, not System V.4.
+ (ASM_OUTPUT_ALIGNED_LOCAL): Don't define Solaris specific method.
+
+Mon May 27 06:39:13 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_builtin, case BUILT_IN_{LONG,SET}JMP):
+ Convert block address from ptr_mode to Pmode.
+
+Sun May 26 20:05:43 1996 Doug Evans <dje@cygnus.com>
+
+ * gcc.c (MSDOS pexecute): Call xmalloc, not malloc.
+
+Sun May 26 08:31:54 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * configure (vax-*-{sysv}): tm_file and xm_file now list.
+ (vax-*-ultrix): tm_file is now list.
+ (we32k-att-sysv*): xm_file now list.
+ * vax/xm-netbsd.h: Deleted.
+ * vax/netbsd.h: No longer include vax.h and config/netbsd.h.
+ * vax/ultrix.h, vax/vaxv.h: No longer include vax.h.
+ * vax/xm-vaxv.h: No longer include xm-vax.h.
+ * xm-we32k.h: No longer include xm-svr3.h.
+
+ * configure: Separately set target_cpu_default for two
+ case statements and then combine if both set.
+ (alpha-*-winnt3): tm_file and xm_file are now list.
+ Set target_cpu_default to 64.
+ * winnt/config-nt.bat: Make .h files properly for Alpha.
+ * alpha.h (WINDOWS_NT): No longer defined and used.
+ (MASK_WINDOWS_NT, TARGET_WINDOWS_NT): New macros.
+ (ASM_OUTPUT_ADDR_DIFF_ELT): Use TARGET_WINDOWS_NT.
+ * alpha.c (output_prolog): Test TARGET_WINDOWS_NT, not WINDOWS_NT.
+ * alpha.md: Likewise.
+ * alpha/config-nt.sed: Properly set tm_file and {build,host}_xm_file.
+ * alpha/win-nt.h: Don't include alpha.h
+ (WINDOWS_NT): No longer define.
+ * alpha/xm-winnt.h: Don't include xm-alpha.h and winnt/xm-winnt.h.
+
+Fri May 24 12:34:22 1996 Doug Evans <dje@seba.cygnus.com>
+
+ * configure (cpu_type): Add case for arm.
+ (sparclet-*-aout*): Delete extra_headers.
+
+ * varasm.c (asm_output_bss): New argument DECL.
+ Use ASM_DECLARE_OBJECT_NAME if defined.
+ (asm_output_aligned_bss): Likewise.
+ (assemble_variable): Pass DECL to ASM_OUTPUT{,_ALIGNED}_BSS.
+ * arm/aout.h (ASM_OUTPUT_ALIGNED_BSS): Update.
+ * h8300.h (ASM_OUTPUT_BSS): Update.
+ * i386/linux.h (ASM_OUTPUT_ALIGNED_BSS): Update.
+ * i386/sysv4.h (ASM_OUTPUT_ALIGNED_BSS): Update.
+ * m68k/coff.h (ASM_OUTPUT_ALIGNED_BSS): Update.
+ * m68k/linux.h (ASM_OUTPUT_ALIGNED_BSS): Update.
+ * m68k/m68k-aout.h (ASM_OUTPUT_BSS): Update.
+ * rs6000/sysv4.h (ASM_OUTPUT_ALIGNED_BSS): Update.
+ * rs6000/win-nt.h (ASM_OUTPUT_ALIGNED_BSS): Update.
+ * sparc/sysv4.h (ASM_OUTPUT_ALIGNED_BSS): Update.
+
+Thu May 23 19:55:52 1996 Jim Wilson <wilson@cygnus.com>
+
+ * combine.c (set_nonzero_bits_and_sign_copies): Set reg_sign_bit_copies
+ to one not zero to indicate value is unknown.
+
+Thu May 23 18:39:24 1996 J.T. Conklin <jtc@rtl.cygnus.com>
+
+ * config/netbsd.h (SWITCH_TAKES_ARG): Add -R.
+ (LINK_SPEC): Add %{R*}.
+
+ * m68k/lb1sf68.asm: Construct exception masks at compile time
+ instead of or'ing in bits at run time.
+
+Thu May 23 15:53:06 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * sh.md: Add new instruction types fp and fpdiv. Set new
+ instruction types where appropriate. Add function unit fp.
+ Claim that store instructions use function unit memory.
+
+Thu May 23 00:36:19 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * h8300.h (CONSTANT_ADDRESS_P): Don't accept CONST or HIGH on H8/300H.
+ * h8300.md: Use "m" rather than "o" constraint everywhere appropriate.
+ Cleanup use of "i" and "n" constraints.
+
+Wed May 22 17:43:37 1996 Jim Wilson <wilson@cygnus.com>
+
+ * fixincludes (pthread.h): Add extern to __page_size* declarations
+ for AIX 4.1.x.
+
+ * combine.c (nonzero_bits): Don't assume arg pointer has same
+ alignment as stack pointer.
+
+Wed May 22 16:09:05 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/sysv4.h (LINK_START_DEFAULT_SPEC): Spell macro correctly.
+ (LIB_DEFAULT_SPEC): Provide default version.
+
+Wed May 22 11:23:57 1996 J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+ * i386.md (return_pop_internal): new pattern.
+ (pop): disable emitting of bogus move instruction.
+ * i386.c (ix86_expand_epilogue): use gen_return_pop_internal to
+ simultanously return and pop args; removed stray semicolon.
+ * config/linux-aout.h, config/linux.h (SET_ASM_OP): Added for
+ __attribute__ ((alias ())) support.
+
+Wed May 22 08:06:42 1996 Richard Kenner <kenner@vlsi1.ultra.nyu.edu.edu>
+
+ * combine.c (init_reg_last_arrays, setup_incoming_promotions):
+ Correct prototypes.
+
+Tue May 21 13:42:17 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * h8300.md (div and mode patterns): Rewrite.
+
+ * pa.c (basereg_operand): Never accept a CONST_INT.
+
+Tue May 21 12:26:40 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * pa/pa-hpux9.h, pa-osf.h (LINK_SPEC): Provide version for Snake.
+
+Tue May 21 07:20:48 1996 Pat Rankin <rankin@eql.caltech.edu>
+
+ * vax.h (TARGET_NAME): Define unless already defined.
+ (TARGET_VERSION): Print TARGET_NAME.
+ * vax/vms.h (TARGET_NAME): Always redefine.
+ (TARGET_VERSION): Delete; retain vax.h definition.
+
+Mon May 20 14:00:44 1996 Jim Wilson <wilson@cygnus.com>
+
+ * sh.c (output_file_start): Delete misplaced semicolon.
+
+Mon May 20 11:58:15 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * reorg.c (relax_delay_slots): Call update_block before
+ redirecting a branch past a redundant insn.
+
+Sun May 19 16:40:53 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * Makefile.in (libobjc.a, sublibobjc.a): 'specs' added to
+ dependencies.
+
+Sun May 19 12:25:48 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * configure: Add new switch to provide default for cpu_type;
+ delete numerous settings of it in main switch.
+ (hppa): Reflect rerrangements below; use new configure features.
+ * pa/pa-gas.h, pa/pa-pro-end.h: New files.
+ * pa/pa1.h, pa/pa1-osf.h, pa/pa1-ghpux.h, pa/pa1-oldas.h: Deleted.
+ * pa/pa1-ghpux9.h, pa/pa1-hpux9.h, pa/pa1-hpux.h: Deleted.
+ * pa/pa1-ghiux.h, pa/pa1-hiux.h, pa/pa-ghpux.h: Deleted.
+ * pa/pa-gux7.h, pa/pa-ghiux.h: Deleted.
+ * pa/pa-hiux.h: No longer include pa-hpux.h.
+ * pa/pa-hpux.h: No longer include pa.h.
+ (TARGET_DEFAULT): Unset before setting.
+ (LINK_SPEC): Provide option for pa1.
+ * pa/pa-hpux7.h: No longer include pa.h.
+ (HP_FP_ARG_DESCRIPTOR_REVERSED): Don't define here.
+ * pa/pa-hpux9.h, pa/pa-oldas.h: No longer include pa-hpux.h.
+ (TARGET_DEFAULT): Don't need to set here.
+ * pa/pa-osf.h: No longer include pa.h.
+ (TARGET_DEFAULT): Don't define; identical to default.
+ * pa/pa-pro.h: No longer include pa.h.
+ Move definitions after include to new file pa-pro-end.h.
+ * pa.h (TARGET_SWITCHES): Include TARGET_CPU_DEFAULT.
+ (TARGET_CPU_DEFAULT): Provide default value.
+ (CPP_SPEC): Test TARGET_CPU_DEFAULT too.
+
+ * Makefile.in (function.o): Includes bc-emit.h.
+ (reg-stack.o): Includes insn-flags.h.
+ * expr.h (function_value): Deleted; no such function.
+ (bc_build_calldesc, bc_runtime_type_code): New declarations.
+ * c-decl.c: Add prototypes for all static functions.
+ * c-iterate.c: Likewise.
+ * dbxout.c: Likewise.
+ (adspath): Delete; never used and has numerous parse errors.
+ * dwarfout.c: If not GNUC, make `inline' null; otherwise, leave alone.
+ Add `static' to inline functions.
+ Add prototypes for static function.
+ * expr.c (bc_runtime_type_code): Delete redundant declaration.
+ * function.c: Include bc-emit.h.
+ ({save,restore}_machine_status): Add prototype for args.
+ (bc_runtime_type_code, bc_build_calldesc): Delete redundant decls.
+ (bc_emit_trampoline, bc_end_function): Likewise.
+ * reg-stack.c: Include insn-flags.h.
+ Add prototypes for static functions.
+ (gen_jump, gen_movdf, gen_movxf): Delete redundant declarations.
+ (find_regno_note, emit_jump_insn_before, emit_label_after): Likewise.
+ (swap_rtx_condition): Now static.
+ * sdbout.c: Add prototypes for static functions.
+ (sdbout_parms, sdbout_reg_parms): Delete extra parm to plain_type.
+
+Sun May 19 11:50:10 1996 John Carr <jfc@mit.edu>
+
+ * alpha.c (alpha_emit_conditional_move): Compare to 0 in correct mode.
+
+Sat May 18 20:17:27 1996 Jim Wilson <wilson@cygnus.com>
+
+ * sh.c (prepare_move_operands): If source is r0, and dest is reg+reg
+ MEM, then copy source to a pseudo-reg.
+ * sh.md (untyped_call): New pattern.
+
+ * unroll.c (copy_loop_body): When update split DEST_ADDR giv,
+ check to make sure it was split.
+ (find_splittable_givs): Fix reversed test of verify_addresses result.
+
+Sat May 18 10:26:04 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.c (unsave_expr_now): Avoid use of NULL_RTX since no rtl.h.
+
+ * configure: Set cpu_default, tm_file, and xm_file early.
+ Remove redundant settings of those, tmake_file, and xmake_file.
+ Use ${tm_file} and ${xm_file} to refer to the main files.
+ Sort some entries for consistency and reformat some others.
+ (rs6000, powerpc): Remove bogus test on host == target.
+ (alpha-*-linux): xm-linux.h no longer includes xm-alpha.
+ (alpha-*-osf*): Remove redundant setting of target_cpu_default.
+ (*-convex-*): Use target_cpu_default instead of separate .h files.
+ (clipper-intergraph-clix*): clix.h no longer includes any files.
+ (i860, i960, pdp11): Reflect removal of includes listed below.
+ * alpha/xm-linux.h: No longer include xm-alpha.h.
+ * clipper/clix.h: No longer include clipper.h and svr3.h.
+ * convex.h: Provide a default for TARGET_DEFAULT.
+ Take "or" of TARGET_DEFAULT and TARGET_CPU_DEFAULT everywhere.
+ * convex/convex{1,2,32,34,38}.h: Deleted.
+ * i860/bsd-gas.h: No longer include bsd.h.
+ * i860/bsd.h: No longer include i860.h.
+ * i860/fx2800.h: No longer include i860/sysv4.h.
+ (OUTPUT_TDESC): No longer define.
+ (ASM_FILE_END): Move redefinition to here.
+ * i860/mach.h: No longer include i860.h.
+ * i860/paragon.h, i860/sysv3.h: No longer include i860.h and svr3.h.
+ * i860/sysv4.h: No longer include i860.h and svr4.h.
+ (ASM_FILE_END): Delete redefinition from here.
+ * i860/xm-fx2800.h: No longer include xm-i860.h.
+ * i860/xm-paragon.h, i860/xm-sysv{3,4}.h: Deleted.
+ * i960/i960-coff.h: No longer include i960.h and dbxcoff.h.
+ * i960/vx960-coff.h: No longer include i960-coff.h.
+ * i960/vx960.h: No longer include i960.h.
+ * pdp11/2bsd.h: No longer include pdp11.h.
+
+ * i370/i370.h: Renamed from mvs.h.
+ * i370/i370.c: Renamed from mvs370.c.
+ * i370/t-i370: Renamed from t-mvs.
+ * i370/xm-i370.h: Renamed from xm-mvs.h.
+ * configure (i370-*-mvs*): Use default names for all files.
+
+ * c-parse.in: Update number of shift/reduce conflicts for objc.
+
+Sat May 18 08:20:17 1996 Dennis Glatting (dennisg@plaintalk.bellevue.wa.us)
+
+ * m68k/next.h (FINALIZE_TRAMPOLINE): Add missing backslashes.
+
+Fri May 17 19:57:20 1996 Pat Rankin <rankin@eql.caltech.edu>
+
+ * vax/xm-vms.h (dbxout_resume_previous_source_file): New macro.
+
+Fri May 17 14:20:13 1996 Mike Stump <mrs@cygnus.com>
+
+ * expr.c (expand_expr, cond TARGET_EXPR): Make TARGET_EXPRs
+ redoable for UNSAVE_EXPR.
+ * stmt.c (expand_decl_cleanup): Wrap the cleanup in an UNSAVE_EXPR
+ to that we can redo it.
+ * tree.c (unsave_expr_now): Handle TARGET_EXPRs fully now.
+ * tree.def (TARGET_EXPR): Add a fourth field so that TARGET_EXPRs
+ are redoable.
+
+ * expr.c (expand_expr, cond UNSAVE_EXPR): Move from the C++
+ frontend to the backend where it belongs.
+ * tree.c (unsave_expr{,_now}): Likewise.
+ * tree.def (UNSAVE_EXPR): Likewise.
+ * tree.h (unsave_expr{,_now}): Likewise.
+
+Fri May 17 15:04:40 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.md (lshrsi3 insns): Add special case code for shifting by
+ 0 to avoid bad code generated with no optimization.
+
+Fri May 17 13:50:55 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * i386/unix.h (ASM_OUTPUT_MI_THUNK): Define.
+ * i386/{att.h,bsd.h,sun386.h} (ASM_OUTPUT_MI_THUNK): Delete.
+
+Fri May 17 13:34:28 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * fp-bit.c (_fpdiv_parts): Correct sign handling when
+ dividing zero or infinity by something.
+
+Fri May 17 12:36:36 1996 Doug Evans <dje@seba.cygnus.com>
+
+ Standardize option output in assembler files.
+ * Makefile.in (toplev.o): Pass -DTARGET_NAME.
+ * arm/aout.h (ASM_OUTPUT_OPTIONS): Delete.
+ (ASM_FILE_START): Delete option output support.
+ * arm.c (output_option, output_options, m_options): Delete.
+ * m88k.c (output_file_start): Delete option output support.
+ * m88k.h (ASM_COMMENT_START): Define.
+ * mips.c (target_switches, print_options): Delete.
+ (mips_asm_file_start): Put output of -G,Cpu,ISA here.
+ * mips.h (ASM_COMMENT_START): Change from "\t\t#" to " #".
+ * rs6000.c (output_option, m_options, output_options): Delete.
+ * rs6000.h (ASM_OUTPUT_OPTIONS): Delete.
+ (ASM_COMMENT_START): Define.
+ (ASM_FILE_START): Delete option output support.
+ * rs6000/sysv4.h (ASM_FILE_START): Likewise.
+ * rs6000/win-nt.h (ASM_FILE_START): Likewise. Delete duplicate.
+ * sh.c (output_option, m_options, output_options): Delete.
+ (output_file_start): Delete option output support.
+ * sh.h (ASM_FILE_START): Likewise.
+ (ASM_COMMENT_START): Define.
+ * dwarfout.c (*): flag_verbose_asm renamed to flag_debug_asm.
+ * flags.h (flag_debug_asm): Declare.
+ * toplev.c (print_version): New function.
+ (print_single_switch): New arguments pos, max, indent, sep, term.
+ (print_switch_values): New arguments pos, max, indent, sep, term.
+ Update call to print_single_switch. Output options passed and
+ options enabled.
+ (MAX_LINE): New macro.
+ (flag_debug_asm): Define.
+ (compile_file): Output options to assembler file.
+ (main): Recognize -dA. Call print_version. Update call to
+ print_switch_values.
+ (line_position): Deleted.
+
+Fri May 17 10:50:44 1996 Stan Cox (coxs@dg-rtp.dg.com)
+
+ * i386.c (function_prologue, ix86_expand_prologue,
+ function_epilogue, ix86_expand_epilogue): Generate prologue and
+ epilogue as RTL (prior to scheduling) instead of emitting asm.
+ (override_options): If only -march is given, make it the default -mcpu.
+ * i386.h (FUNCTION_BEGIN_EPILOGUE): Renamed from FUNCTION_EPILOGUE.
+ * i386.md (return, return_internal, prologue, prologue_set_got,
+ prologue_get_pc, epilogue, leave, pop): New patterns for emitting
+ asm from prologue and epilogue RTL.
+ * m88k/t-dgux (T_CFLAGS): Delete.
+ * m88k/x-dgux (X_CFLAGS): New.
+
+Fri May 17 09:54:23 1996 Jim Meyering (meyering@asic.sc.ti.com)
+
+ * Makefile.in (stamp-crt{,S}): Use -o to avoid conflicts if
+ both of these are built in parallel.
+
+Fri May 17 08:55:19 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expmed.c (store_split_bit_field): Don't assume the alignment
+ of VALUE is the same as the record.
+
+ * configure: Write #define TARGET_CPU_DEFAULT into tm.h
+ instead of defining MAYBE_TARGET_DEFAULT in Makefile.
+ (alpha-*-linux): Set target_cpu_default to 4 and xmake_file to none.
+ (alpha-*-osf*): Set target_cpu_default to 4 if --gas.
+ * Makefile.in (gcc.o, toplev.o, $(out_object_file)):
+ Remove MAYBE_TARGET_DEFAULT.
+
+ * combine.c (insn_cuid): New function.
+ (INSN_CUID): Sometimes call it.
+
+Fri May 17 08:12:37 1996 Scott Christley <scottc@net-community.com>
+
+ * objc/sendmsg.c (objc_get_uninstalled_dtable): New function.
+ * objc/objc-api.h (objc_get_uninstalled_dtable): New declaration.
+
+ * objc/thr-os2.c, objc/thr-posix.c, objc/thr-mach.c: New files.
+ * objc/THREADS.MACH: New file.
+
+ * objc/sendmsg.c (nil_method): Deleted from here.
+ * objc/nil_method.c: New file.
+ * Makefile (OBJC_O): Add dependency for nil_method.c.
+
+ * objc/hash.c (hash_is_key_in_hash): New function.
+ * objc/hash.h: Include objc/objc.h here instead of in objc/hash.c
+ to get BOOL typedef.
+
+Fri May 17 08:01:48 1996 Doug Rupp (rupp@gnat.com)
+
+ * msdos/configur.bat: If Ada subdirectory present, adjust Makefile.
+
+Fri May 17 07:40:04 1996 Ulrich Drepper (drepper@cygnus.com)
+
+ * stddef.h: If need_wint_t defined, nothing in this file is needed.
+ (_WINT_T, __WINT__TYPE__, wint_t): Define under certain circumstances.
+
+Thu May 16 18:53:25 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (fold, case EQ_EXPR): When folding VAR++ = CONST,
+ mask the new const if VAR is a bitfield reference; also for VAR--.
+
+Thu May 16 18:29:03 1996 Doug Evans <dje@seba.cygnus.com>
+
+ * varasm.c (function_section): Delete flag_function_sections support.
+ (assemble_start_function): Put it here. Use UNIQUE_SECTION if defined.
+
+Wed May 15 13:35:11 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.{h,c,md} (rs6000_pic_register): Delete all uses, use
+ pic_offset_table_rtx instead.
+
+ * rs6000.md (move_to_float): Rewrite so that it uses the register
+ allocator to allocate the stack temp, instead of calling
+ rs6000_stack_temp.
+ (fix_truncdfsi2): Likewise.
+
+ * rs6000.c (rs6000_stack_temp): Delete, no longer used.
+
+Wed May 15 10:39:27 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * h8300.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Define.
+
+Sat May 11 07:42:59 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (store_field): Support BLKmode bitfield if aligned on
+ byte boundary using emit_block_move.
+ (expand_expr, case COMPONENT_REF): Likewise.
+
+Fri May 10 18:33:39 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * configure (alpha-*-linux): Reverse order in tm_file list.
+ Delete xmake_file.
+ * alpha/x-linux: Deleted.
+ * alpha/linux.h (ASM_FINAL_SPEC): Add #undef.
+ * alpha/xm-linux.h: Remove bogus trailing #endif.
+
+ * loop.c (maybe_eliminate_biv_1): Disable all but two cases
+ of biv elimination with givs and restrict those two cases to
+ an ADD_VAL that is an address.
+
+ * flow.c (mark_set_1, mark_used_regs): Clean up usages
+ of ALL_NEEDED; change to SOME_NOT_NEEDED and set properly.
+
+Fri May 10 11:37:38 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * toplev.c (compile_file): Don't warn about artificial functions
+ declared static and not defined.
+
+Thu May 9 22:03:28 1996 Doug Evans <dje@cygnus.com>
+
+ * varasm.c (assemble_start_function): ASM_DECLARE_FUNCTION_NAME
+ needn't consider bytecodes.
+ (assemble_variable): ASM_DECLARE_OBJECT_NAME needn't
+ consider bytecodes.
+ * toplev.c (rest_of_decl_compilation): Likewise with
+ ASM_FINISH_DECLARE_OBJECT.
+ * arm/aof.h (ASM_DECLARE_{FUNCTION,OBJECT}_NAME): Delete bytecode
+ support.
+ * vax/vms.h (ASM_DECLARE_OBJECT_NAME): Likewise.
+
+Thu May 9 19:36:13 1996 Jim Wilson <wilson@cygnus.com>
+
+ * sh.h (SET_ASM_OP): Define.
+
+Thu May 9 13:31:58 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/sysv4.h (SUBTARGET_{SWITCHES,OPTIONS}): Add support for
+ finer grain control on -msdata, so that eabi people can specify to
+ compile sdata code to only use r13 instead of r2/r13. Make
+ -mrelocatable-lib turn off -msdata, just like -m relocatable does.
+ (SUBTARGET_OVERRIDE_OPTIONS): Ditto.
+ (ENCODE_SECTION_INFO): Move to rs6000.c.
+ (ASM_SPEC): -msdata=eabi sets -memb also.
+ (CC1_SPEC): -mno-sdata gets converted to -msdata=none.
+
+ * rs6000.c (rs6000_sdata{,_name}): Add support for finer grain
+ control on -msdata.
+ (output_options, small_data_operand, print_operand): Likewise.
+ (rs6000_select_section): Likewise.
+ (rs6000_encode_section_info): Move here from sysv4.h, section
+ names are stored as STRING nodes, not IDENTIFIER.
+
+Wed May 8 21:04:49 1996 Doug Evans <dje@cygnus.com>
+
+ * function.c (aggregate_value_p): Return 1 if TREE_ADDRESSABLE.
+ * pa.h (RETURN_IN_MEMORY): No longer test for TREE_ADDRESSABLE.
+
+Tue May 7 13:42:57 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * h8300.c: Include obstack.h.
+ (bit_memory_operand): New function.
+ (print_operand): Append ":16" to a memory reference to
+ the tiny data area.
+ (h8300_tiny_data_p): New function.
+ (h8300_valid_machine_decl_attribute): Accept "tiny_data". Fix typo.
+ (h8300_encode_label): New function.
+ (h8300_adjust_insn_length): References to the tiny data section
+ are two bytes shorter than normal accesses on the H8/300H.
+ * h8300.h (OK_FOR_U): Fix thinko.
+ (ENCODE_SECTION_INFO): Encode info for tiny data variables.
+ (STRIP_NAME_ENCODING): Define.
+ * h8300.md (movqi insn): Fix length for a constant load.
+ (movstrictqi, movhi, movstricthi): Likewise.
+ (memory btst patterns): Add register to the constraints to keep
+ reload happy.
+
+ * h8300.h (OK_FOR_U): (const (plus (symbol_ref) (const_int)))
+ is valid U operand if SYMBOL_REF_FLAG is set on SYMBOL_REF.
+ * h8300.md (memory btst patterns): New patterns.
+
+ * h8300.c (h8300_eightbit_data_p): Renamed from h8300_tiny_data_p.
+ (h8300_eightbit_data_p): Check for the "eightbit_data"
+ attribute instead of "tiny_data".
+ (h8300_valid_machine_decl_attribute): Likewise.
+ * h8300.h (ENCODE_SECTION_INFO): Call h8300_eightbit_data_p
+ instead of h8300_tiny_data_p.
+
+ * h8300.h (READONLY_DATA_SECTION): Define.
+ (EXTRA_SECTIONS): Add in_readonly_data.
+ (READONLY_DATA_SECTION_ASM_OP): Define.
+ (EXTRA_SECTION_FUNCTINOS): Add readonly_data.
+
+Tue May 7 09:26:24 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * varasm.c (make_decl_rtl): Update DECL_ASSEMBLER_NAME for local
+ statics. Remove reference to flag_no_common.
+
+Mon May 6 21:38:36 1996 Paul Eggert <eggert@twinsun.com>
+
+ * cpplib.c (skip_comment, handle_directive): Don't use uninit vars.
+
+Mon May 6 18:47:36 1996 Doug Evans <dje@cygnus.com>
+
+ * dbxout.c (dbxout_function): When deciding to call dbxout_function_end
+ change test from flag_function_sections to DECL_SECTION_NAME != NULL.
+
+ * varasm.c (named_section): Accept any decl.
+
+Mon May 6 16:41:08 1996 Stan Cox (coxs@dg-rtp.dg.com)
+
+ * final.c (final_scan_insn): Modify conditional moves whose cc is
+ nonstandard.
+
+ * c-common.c (decl_attributes): Chain multiple attributes correctly.
+
+Mon May 6 15:41:43 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * stmt.c (expand_decl): Don't deduce alignment of SIZE from
+ DECL_ALIGN; use TYPE_ALIGN instead.
+
+ * function.c (assign_parms): Set RTX_UNCHANGING_P in stack_parm
+ if parm is read-only.
+
+ * c-common.c (truthvalue_conversion, case ADDR_EXPR): Don't
+ treat address of external decl as always nonzero.
+
+Mon May 6 11:33:57 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * c-decl.c (start_decl): Check -fno-common here.
+ * varasm.c (assemble_variable): Instead of here.
+ * final.c (end_final): Likewise.
+ * c-common.c (init_attributes, decl_attributes): Add A_COMMON.
+
+Mon May 6 11:12:39 1996 Mike Stump <mrs@cygnus.com>
+
+ * expr.c (expand_increment): Add third parameter to know when to
+ ignore the result value.
+ (store_constructor): Likewise
+ (expand_expr, case {PRE,POST}{INC,DEC}REMENT_EXPR): Likewise.
+ * tree.c (stabilize_reference): Always ignore the first operand of
+ COMPOUND_EXPRs.
+
+Mon May 6 13:14:45 1996 Jim Wilson <wilson@cygnus.com>
+
+ * sh.c (gen_shifty_op): Truncate VALUE to avoid out of bounds array
+ access.
+
+ * expr.c (expand_expr, case INDIRECT_REF): Delete obsolete code
+ to special case a SAVE_EXPR operand.
+
+Mon May 6 10:00:12 1996 Pat Rankin <rankin@eql.caltech.edu>
+
+ * vax.h (ASM_OUTPUT_MI_THUNK): Define.
+
+Mon May 6 09:49:10 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * m68k/linux.h: Use the new trampoline definition.
+ (TRAMPOLINE_TEMPLATE, TRAMPOLINE_SIZE): Deleted.
+ (INITIALIZE_TRAMPOLINE): Changed.
+ (FINALIZE_TRAMPOLINE, CLEAR_INSN_CACHE): New.
+
+Mon May 6 09:43:55 1996 Patrick J. LoPresti (patl@lcs.mit.edu)
+
+ * rtlanal.c (rtx_addr_varies_p): Scan operands of type `E'.
+
+Mon May 6 09:04:40 1996 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * x-linux{,-aout} (BOOT_CFLAGS, STMP_FIXPROTO, STMP_FIXPROTO): Deleted.
+ * config/t-linux (BOOT_CFLAGS, STMP_FIXPROTO, STMP_FIXPROTO): New,
+ moved from x-linux.
+ * t-linux-aout: New file.
+ * configure (i[3456]86-*-linux*oldld*, i[3456]86-*-linux*aout*):
+ Set tmake_file to t-linux-aout.
+
+Sun May 5 22:13:22 1996 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * Makefile.in (gxx_include_dir): Change to $(prefix)/include/g++.
+ (old_gxx_include_dir): New - defined as $(libdir)/g++-include.
+ (cccp.o, cpplib.o): Also pass OLD_GPLUSPLUS_INCLUDE_DIR (set
+ from $(old_gxx_include_dir)).
+ * cccp.c (include_defaults_array): For C++, also search
+ OLD_GPLUSPLUS_INCLUDE_DIR.
+ * cpplib.c (default_include): Likewise.
+ * configure: Remove no-longer-needed support for --gxx-include-dir.
+
+Sun May 5 21:59:53 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * c-lex.c (check_newline): Fix #pragma parsing; issue error message
+ for directive that starts with `p' but isn't `pragma'.
+
+Sun May 5 13:13:40 1996 Jeremy Bettis <jeremy@hksys.com>
+
+ * objc/hash.c (hash_value_for_key): Prevent endless loop when 0 was
+ stored in a hashtable.
+
+Sun May 5 13:09:54 1996 Satoshi Adachi (adachi@wisdom.aa.ap.titech.ac.jp)
+
+ * m68k/newsgas.h (SET_ASM_OP, ASM_WEAKEN_LABEL): Define.
+
+Sun May 5 12:48:08 1996 Stephen L Moshier (moshier@world.std.com)
+
+ * tree.c (build_real_from_int_cst): Remove spurious test for
+ REAL_IS_NOT_DOUBLE.
+
+Sat May 4 12:17:58 1996 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ * arm.h (ASM_OUTPUT_MI_THUNK): Moved here from aout.h. Rewrite to be
+ independent of the selected assembler, and to use optimal number of
+ instructions.
+ * arm/aout.h (ASM_OUTPUT_MI_THUNK): Delete.
+
+ * arm/aout.h (ASM_OUTPUT_OPTIONS): Define.
+ (ASM_FILE_START): Call ASM_OUTPUT_OPTIONS.
+ (BSS_SECTION_OP): Define.
+ (ASM_OUTPUT_ALIGN): Don't output anything if byte alignment is wanted.
+ (ASM_OUTPUT_ALIGNED_BSS): Define.
+ * arm.h (target_cpu_name): Delete.
+ (TARGET_SWITCHES): Delete "be" and "le".
+ (TARGET_OPTIONS): Delete "cpu-", add "tune=".
+ (struct arm_cpu_select): New struct.
+ (PROCESSOR_DEFAULT, TARGET_CPU_DEFAULT): Define.
+ (EXTRA_CC_MODES, EXTRA_CC_NAMES): Add CC_Cmode.
+ (CANONICALIZE_COMPARISON): Define.
+ * arm.c (arm_select): Declare and initialize.
+ (all_procs): Add arm7100.
+ (arm_override_options): Parse arm_select structure to determine
+ selected architecture and tuning parameters.
+ (output_option, output_options): New functions.
+ (arm_canonicalize_comparison): New function.
+ (arm_gen_movstrqi): Don't add a writeback of the index registers for
+ the last instructions.
+ (arm_select_cc_mode): Detect case where mode is carry out of unsigned
+ arithmetic.
+ (output_lcomm_directive): Use bss_section (), and use alignment
+ rather than rounding.
+ (get_arm_condition_code): Handle CC_Cmode.
+ (final_prescan_insn): Avoid boundary case where we would occasionally
+ inline MAX_INSNS_SKIPPED+1 insns. Allow call_insns to be inlined in
+ APCS_32 mode if they are the last insn in the block.
+ * arm.md (*addsi3_compareneg): Delete potentially unsafe insn.
+ (*addsi3_compare_op[12]): New insns.
+ (*compare_addsi2_op[01]): New insns.
+ (*addsi3_carryin, *addsi3_carryin_alt[12]): New insns.
+ (*cmp_ite1): Use arm_add_operand instead of arm_rhs_operand.
+ * semi.h (PROCESSOR_DEFAULT): Default to PROCESSOR_ARM6.
+
+Fri May 3 10:52:11 1996 1996 Stan Cox (coxs@dg-rtp.dg.com)
+
+ * i386.md (movesicc, movehicc) Pentium Pro conditional move insns.
+
+ * i386.h (TARGET_PENTIUMPRO, TARGET_CMOVE, BRANCH_COST,
+ ASM_OUTPUT_FUNCTION_PREFIX): New macros for conditional move.
+
+ * i386.c (asm_output_function_prefix, function_prologue): Setup
+ pic on Pentium Pro so a return will match the call.
+ (print_operand, put_condition_code): Output conditional move suffixes.
+
+Fri May 3 10:52:11 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * i386/{att.h,gas.h,bsd.h,sub386.h} (ASM_OUTPUT_MI_THUNK): Define.
+
+Wed May 1 17:54:51 1996 Doug Evans <dje@cygnus.com>
+
+ * sparc.h (ASM_OUTPUT_MI_THUNK): Fix for sparc64, optimize.
+
+Wed May 1 13:28:32 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * i386/linux.h (ASM_OUTPUT_ALIGNED_BSS): Define.
+ * i386/sysv4.h: Likewise.
+ * sparc/sysv4.h: Likewise.
+
+Wed May 1 01:44:47 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * h8300.c (h8300_adjust_insn_length): Adjust the cost of
+ shifts by small constant values.
+ * h8300.md: Remove names from many patterns which don't need them.
+ (compare insns): Don't underestimate lengths.
+ (andqi3 expander): Remove constrains.
+ (andhi3): Don't underestimate length.
+ (andsi3): Don't underestimate length. Improve code when upper
+ or lower half of destination is being cleared.
+ (indirect_jump_h8300, indirect_jump_h8300h): Simplify.
+ (shift insns): Remove useless "I" constraint.
+
+ * h8300.md (bcs type): Remove "bcs" type attribute and all references.
+ (bcs insns): Delete. No longer needed.
+ (setcc from bitfield): Rewrite to use zero_extract. Provide
+ QImode, HImode and SImode variants.
+
+Tue Apr 30 18:13:09 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * svr4.h (SELECT_SECTION): If RELOC is true, put it in data.
+
+Tue Apr 30 17:26:30 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * fold-const.c (fold): Don't call convert to recreate tree nodes
+ we already have.
+
+Tue Apr 30 16:52:41 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * h8300.c (one_insn_adds_subs_operand): New function.
+ (h8300_adjust_insn_length): New function.
+ * h8300.h (ADJUST_INSN_LENGTH): Define.
+ * h8300.md: Remove obsolete comments.
+ (move patterns): Tweak constraints.
+ (tst patterns): Use "register_operand" for predicate.
+ (adds pattern): Use one_insn_adds_subs_operand to get length
+ computation correct.
+ (subs pattern): Similarly.
+ (movstrhi): Remove unused expander.
+ (fancy*, pxor, and-not patterns): Remove. No longer needed.
+
+Tue Apr 30 13:35:06 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/sol-c0.c (_start): Temporarily display calling
+ __do_global_ctors, since the Solaris linker doesn't handle the
+ relocations properly.
+
+Mon Apr 29 13:03:12 1996 Doug Evans <dje@cyguns.com>
+
+ * sparc/vxsparc.h: sparc-aout.h renamed to aout.h.
+
+Mon Apr 29 00:35:15 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * h8300.c (names_small): Remove "BAD" postfix from %r7 byte registers.
+ (rtx_equal_function_value_matters): Remove extra declaration.
+ (output_simode_bld): New function.
+ * h8300.h (NO_FUNCTION_CSE): Do define this.
+ (reg_class): Remove LONG_REGS, SP_REG, SP_AND_G_REGS.
+ (REG_CLASS_{NAMES,CONTENTS,FROM_LETTER}): Corresponding changes.
+ (REGNO_REG_CLASS): Corresponding changes.
+ (output_simode_bld): Declare.
+ * h8300.md: Nuke comments for stuff which has been fixed.
+ (all patterns): Remove references to register class "a" (SP_REGS)
+ which no longer exists.
+ (many patterns): Accept auto-inc auto-dec addresses in more cases.
+ (zero_extendqisi2): New pattern for the H8/300.
+ (zero_extendhisi2): Only use zero_extendhisi2_h8300 when not
+ optimizing.
+ (extendhisi2): Only use extendhisi2_h8300 when not optimizing.
+ (extendqisi2): New pattern for the H8/300.
+ (bitfield related patterns): Completely rewrite.
+ (fancy_bclr, fancy_btst): Deleted.
+ (addhi3 pattern for h8300): Handle case where we can't make matching
+ constraints (works around hard to fix reload problem).
+ (stack_pointer_manip): Delete.
+ (and not patterns): New combiner patterns.
+
+ * pa.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Make sure the
+ final $CODE$ subspace is in the $TEXT$ space.
+
+Sun Apr 28 14:52:21 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * svr4.h (ASM_OUTPUT_SECTION_NAME): If no decl is specified,
+ make the section read/write data.
+
+Sat Apr 27 10:28:59 1996 Michael Meissner <meissner@wogglebug.tiac.net>
+
+ * rs6000/t-ppcgas (MULTILIB_EXCEPTIONS): Don't allow -mrelocatable
+ and -mcall-sysv-noeabi.
+
+ * rs6000/sysv.h (SUBTARGET_OVERRIDE_OPTIONS): The -mcall-aix
+ option sets -meabi. Don't allow -mrelocatable without -meabi.
+
+Fri Apr 26 16:10:46 1996 Doug Evans <dje@cygnus.com>
+
+ * sparc.md (*smacsi,*smacdi,*umacdi): Fix constraint on
+ operand 0.
+
+Fri Apr 26 14:36:33 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * i960/t-{960bare,vxworks960} (MULTILIB*): Add
+ soft-float multilib support.
+
+Fri Apr 26 06:38:56 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * stor-layout.c (layout_decl): Turn off DECL_BIT_FIELD for BLKmode
+ that's properly aligned and a multiple of a byte.
+
+Thu Apr 25 22:43:19 1996 Doug Evans <dje@cygnus.com>
+
+ * i386/gas.h (ASM_OUTPUT_ALIGN): #if 0 out again.
+ Undoes change of Apr. 9.
+ * i386/go32.h (ASM_OUTPUT_ALIGN): Define.
+
+Thu Apr 25 14:05:33 1996 Richard Kenner (kennervlsi1.ultra.nyu.edu)
+
+ * calls.c (expand_call): In inlining case, if BEFORE_CALLS is
+ zero, start looking at first insn (one more place).
+
+ * expr.c (expand_builtin, case BUILT_IN_SETJMP): CLOBBER the
+ static chain after label at setjmp point.
+
+Thu Apr 25 09:02:24 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.c (print_operand{,_address}): Correct compile error if
+ TARGET_EABI is not defined. Also, just call small_data_operand,
+ without testing the ABI.
+ (rs6000_select_section): Ditto.
+
+ * rs6000/sysv4.h (CC1_SPEC): For -mcall-solaris, don't pass
+ -mno-main-init.
+
+Wed Apr 24 18:26:48 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * collect2.c (handler): Delete export_file when we get a signal.
+
+Wed Apr 24 14:54:44 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * pa/pa1-ghpux.h (LINK_SPEC): Define. Link in PA1.1 libraries
+ by default.
+ * pa/{pa1-ghpux9.h, pa1-hpux.h, pa1-hpux9.h}: Likewise.
+
+Wed Apr 24 11:12:06 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * configure (powerpc{,le}-*-eabi*): Use t-ppc{,gas}, instead of
+ t-eabi{,gas}.
+ (powerpc-*-linux,powerpcle-*-solaris): Add definitions.
+ (MULTILIB_DIRNAMES): Pick shorter names for the multilib
+ directories.
+ (MULTILIB_*): Do not build -msdata versions of the library. Build
+ both system V and eabi versions of the libraries.
+
+ * rs6000/t-ppc{,gas} (MULTILIB*): Don't build -msdata versions of
+ the libraries. Split -mcall-sysv libraries into
+ -mcall-sysv-{eabi,noeabi} varients.
+ (LIB2FUNCS_EXTRA): Add eabi.S, eabi-ctors.c.
+ (eabi.S): Use eabi.S, not eabi.s for eabi.asm.
+ (crt files): Add support for Solaris crt files.
+
+ * rs6000/sol{2.h,-c0.c,-ci.asm,-cn.asm}: New files for Solaris.
+
+ * rs6000/linux.h: New file for Linux-based GNU system support.
+
+ * rs6000/eabi-ci.asm (ppc-asm.h): Include.
+ (.got section): Correct attribute.
+
+ * rs6000/eabi-c{i,n}.asm (.init,.finit): Add support for System V
+ style .init/.fini sections, that constructors and destructors
+ place a bl <func> in the appropriate section.
+
+ * rs6000/eabi-ctors.c (__do_global_{c,d}tors): Call __init, and
+ __fini to handle constructors/destructors in the .init, .fini
+ sections.
+
+ * rs6000/{eabi,sysv}.h: Move most eabi configuration stuff from
+ eabi.h to sysv.h.
+
+ * rs6000/sysv.h (TARGET_*): Convert -mcall-xxx from switch into option.
+ Add -mcall-{solaris,linux,sysv-eabi,sysv-noeabi} options.
+ Add -m{,no-}eabi options to control whether we adhere to
+ the System V spec or the EABI spec. Add -m{,no-}regnames to
+ control whether registers are printed out as %r0 instead of 0.
+ (SUBTARGET_OVERRIDE_OPTIONS): Add support for new -mcall options.
+ (FP_ARG_MAX_REG): Use new macros for ABI conformance.
+ (RS6000_REG_SAVE): Likewise.
+ (STACK_BOUNDARY,BIGGEST_ALIGNMENT): If eabi, align to 8 byte
+ boundary, otherwise 16 byte.
+ (EXTRA_SECTIONS): Add .init, .fini sections.
+ (*_SPEC): Reorganize so that the different targets all have sub
+ specs that go in the specs file. Add support for linux and
+ Solaris targets.
+
+ * rs6000/{sysv4,eabi}*.h (*_SPECS): Only override the default
+ spec, all other specs moved to sysv4.h.
+ (RS6000_ABI_NAME): Use RS6000_ABI_NAME to set the default ABI
+ name, not TARGET_DEFAULTS.
+
+ * rs6000/xm-sysv4.h (alloca): Properly declare alloca if compiler
+ is not GCC.
+ (DONT_DECLARE_SYS_SIGLIST): Define.
+
+ * rs6000.c (rs6000_abi_name): New global for getting the results
+ of -mcall-xxx.
+ (rs6000_reg_names): New global for holding the normal register names.
+ (alt_reg_names): Alternate register names for -mregnames.
+ (rs6000_override_options): If -mregnames, copy alt_reg_names into
+ rs6000_reg_names.
+ (input_operand): Recognize ABI_SOLARIS.
+ (small_data_operand, init_cumulative_args): Likewise.
+ (function_arg{,_boundary,_advance,_partial_nregs}): Likewise.
+ (function_arg_pass_by_reference, setup_incoming_varargs): Likewise.
+ ({rs6000,debug}_stack_info, output_{prolog,epilog}): Likewise.
+ (print_operand): %$ prints '.' on Solaris, '$' elsewhere.
+ (print_operand{,_address}): If not eabi, use @sdarel for small
+ data references.
+ (rs6000_stack_info): Only emit __eabi call if TARGET_EABI.
+
+ * rs6000.h (*_SPECS): Move the System V specs to svr4.h.
+ (ABI_SOLARIS): New ABI, mostly like System V.
+ (EXTRA_CONSTRAINT): Use ABI_SOLARIS like ABI_V4.
+ (RETURN_ADDRESS_OFFSET, (LEGITIMATE_SMALL_DATA_P): Likewise.
+ (RETURN_IN_MEMORY): On Solaris, small structures are returned in regs.
+ (REGISTER_NAMES): Use rs6000_reg_names array, instead of string
+ literals.
+ (DEBUG_REGISTER_NAMES): Define.
+ (ADDITIONAL_REGISTER_NAMES): Add sp, toc aliases.
+ (PRINT_OPERAND_PUNCT_VALID_P): Recognize $ as a punctuation char.
+
+ * rs6000.md (got & call patterns): Use ABI_SOLARIS to mean the
+ same as ABI_V4.
+ (branch patterns): Use %$ for the current location, not just $.
+
+ * va-ppc.h: Add Solaris support.
+
+Tue Apr 23 20:02:13 1996 Doug Evans <dje@cygnus.com>
+
+ * sparc.c (output_function_prologue): In -mbroken-saverestore
+ case, %sp = %fp - size.
+ * sparc/t-splet (TARGET_LIBGCC2_CFLAGS): Delete.
+ * sparc.md (isa attribute): Add sparclet.
+ (*smacsi,*smacdi,*umacdi): Use match_operand, not match_dup
+ for third arg.
+ (*mulsidi3_sp32,const_mulsidi3,*umulsidi3_sp32,const_umulsidi3): Use
+ smuld,umuld for sparclet.
+
+Tue Apr 23 16:28:28 1996 Michael Meissner <meissner@wombat.gnu.ai.mit.edu>
+
+ * m68k/m68kemb.h: Add {LINK,STARTFILE,LIB,SUBTARGET}_SPEC, so
+ gcc will use libgloss for supported target boards {idp,mvme,bcc}.
+
+Tue Apr 23 16:00:28 1996 Per Bothner <bothner@cygnus.com>
+
+ * expr.c (store_constructor): Fix test for missing array elements.
+
+Tue Apr 23 11:21:09 1996 Stephen L Moshier (moshier@world.std.com)
+
+ * i386/sco5.h (BSS_SECTION_ASM_OP): Use `data' directive.
+ (ASM_OUTPUT_ALIGNED_LOCAL): Generate an `lcomm' directive.
+ (TARGET_DEFAULT): Include TARGET_IEEE_FP.
+ (CPP_PREDEFINES): Include Di386.
+
+Mon Apr 22 12:00:46 1996 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.h (BIGGEST_FIELD_ALIGNMENT): Delete.
+ (ADJUST_FIELD_ALIGN, ROUND_TYPE_ALIGN): Define.
+ * sysv4.h (BIGGEST_FIELD_ALIGNMENT): Delete.
+ (ADJUST_FIELD_ALIGN, ROUND_TYPE_ALIGN): Undefine.
+ * win-nt.h (ADJUST_FIELD_ALIGN, ROUND_TYPE_ALIGN): Undefine.
+
+Sun Apr 21 17:52:36 1996 Jim Wilson <wilson@cygnus.com>
+
+ * m68k/coff.h (ASM_OUTPUT_SECTION): Test DECL before
+ dereferencing it.
+
+ * cse.c (cse_process_notes): Handle SUBREG like ZERO_EXTEND.
+
+Sun Apr 21 12:57:12 1996 Doug Evans <dje@cygnus.com>
+
+ * arm/aout.h (ASM_OUTPUT_MI_THUNK): Define.
+
+Sun Apr 21 09:50:09 1996 Stephen L Moshier (moshier@world.std.com)
+
+ * choose-temp.c: Include sys/types.h before sys/file.h for sco3.2v5.
+
+Sun Apr 21 08:42:13 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.c (check_float_value): Cast args of bcopy to avoid warnings.
+
+Sat Apr 20 21:22:21 1996 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * stor-layout.c (layout_record): Use ADJUST_FIELD_ALIGN to modify
+ alignment of fields within records.
+
+Sat Apr 20 19:55:33 1996 Niels Moller <nisse@lysator.liu.se>
+
+ * c-parse.in (typespec): Made <SomeProtocol> equivalent
+ to (id <SomeProtocol>).
+ (non_empty_protocolrefs): New nonterminal.
+
+Sat Apr 20 08:34:02 1996 J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+ * stmt.c (check_for_full_enumeration_handling): Call case_tree2list
+ before checking for case expressions not corresponding to enumerators.
+ (mark_seen_cases): If SPARSENESS == 2, exploit AVL order.
+ Else, convert tree to list.
+ Set xlo to -1 if SPARSENESS == 1 search failed.
+ (expand_end_case): Avoid calling case_tree2list on list.
+
+Fri Apr 19 16:54:57 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/win-nt.h (BIGGEST_FIELD_ALIGNMENT): Set to 64, not
+ 32 that AIX uses.
+
+Fri Apr 19 16:40:38 1996 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.md (movqi): Handle QImode values in %si and %di.
+
+Thu Apr 18 20:56:56 1996 Jim Wilson <wilson@cygnus.com>
+
+ * sh.md (lshrsi3): Change gen_ashlsi3_d to gen_lshrsi3_d.
+
+Thu Apr 18 15:49:28 1996 Per Bothner <bothner@cygnus.com>
+
+ * sparc.h (ASM_OUTPUT_MI_THUNK): Define.
+
+Thu Apr 18 15:19:26 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * h8300.md: Remove "type" attribute from all patterns except those
+ which have varying length branches. Eliminate obsolete "type"
+ attributes. Add "length" and "cc" attributes to insns without them;
+ fix some length computations. Remove patterns which are commented out.
+
+ * h8300.md (zero extension expanders and insns): Simplify, fix various
+ length problems, provide optimized versions for the h8300 and h8300h.
+ (sign extension expanders and insns): Likewise. Make them
+ nearly identical to zero_extension patterns and insns.
+
+Wed Apr 17 18:50:16 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * pa.h (SELECT_SECTION): Define. Never place a something
+ into the read-only data section if it requires a reloc.
+
+ * pa.md (rotlsi3): Delete unnecessary and incorrect pattern.
+
+Wed Apr 17 17:15:40 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.md (movdi): Never FAIL, even if operand[1] is not a
+ general operand, due to being in volatile memory.
+
+Wed Apr 17 15:20:10 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * c-lex.c (check_newline): Rewrite to use tokens.
+ (handle_sysv_pragma): Take a token instead of a character.
+ * i960.c (process_pragma): Take the IDENTIFIER_POINTER tree
+ node instead of a character.
+ * sh.c (handle_pragma): Likewise.
+ * config/nextstep.c (handle_pragma): Likewise.
+ * h8300.c (handle_pragma): Likewise.
+ * i960.h (HANDLE_PRAGMA): Expect/pass 2nd arg of NODE, not CH.
+ * sh.h (HANDLE_PRAGMA): Likewise.
+ * config/nextstep.h (HANDLE_PRAGMA): Likewise.
+ * h8300.h (HANDLE_PRAGMA): Likewise.
+
+Wed Apr 17 14:28:43 1996 Doug Evans <dje@cygnus.com>
+
+ * choose-temp.c: Don't include sys/file.h ifdef NO_SYS_FILE_H.
+ #include <stdio.h>.
+ (choose_temp_base): Make tmp,usrtmp, static locals.
+
+Wed Apr 17 08:41:02 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.c (alpha_emit_conditional_move): Fix some bugs in previous
+ change and do some cleanup.
+
+Tue Apr 16 18:53:05 1996 Jim Wilson <wilson@cygnus.com>
+
+ * reload.c (push_reload): Add extra reload for inside of SUBREG if
+ it is CONSTANT_P.
+
+ * expr.c (do_store_flag): Rewrite last change to avoid compiler
+ warnings.
+
+ * reload.c (push_reload): When reuse an old reload, set the modes
+ to be the larger of the old and new modes.
+
+ * i960/t-960bare (xp-bit.c): Fix typo in source file name.
+
+Tue Apr 16 18:09:16 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * h8300.md (andhi3): If 2nd operand is a CONST_INT that meets 'J'
+ constraint, then only two bytes are needed for this insn. Improve
+ code generated for the h8300h when both operands are registers.
+ (iorhi3, xorhi3): Likewise. Rework to be nearly identical to andhi3.
+ (andsi3): If 2nd operand is a CONST_INT that meets the 'J'
+ constraint, then only two bytes are need for this insn.
+ Improve code generated for the h8300h regardless of the
+ type of the 2nd operand. Make this pattern work on the h8300 too.
+ (iorsi3, xorsi3): Likewise. Rework to be nearly identical to andsi3.
+ (iorqi3_internal): Make this pattern look more like andqi3_internal.
+ (one_cmplhi2, one_cmplsi2): Fix length computation for H8300H.
+
+Tue Apr 16 17:43:25 1996 J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+ * i386.md (addsidi3_2): Handle non-MEM overlap case.
+
+Tue Apr 16 16:59:49 1996 Richard Henderson <rth@tamu.edu>
+
+ * function.c (expand_function_end): Allow TRAMPOLINE_TEMPLATE
+ to be omitted on systems for which it is not cost effective.
+ * varasm.c (assemble_trampoline_template): No such function
+ if no TRAMPOLINE_TEMPLATE.
+ * m68k.h: Greatly simplify the run-time trampoline code:
+ (TRAMPOLINE_TEMPLATE, TRANSFER_FROM_TRAMPOLINE): Delete define.
+ (TRAMPOLINE_SIZE, INITIALIZE_TRAMPOLINE): Changed.
+ (TRAMPOLINE_ALIGN): No point aligning to cache line.
+ (FINISH_INIT_TRAMPOLINE): New define.
+ * m68k/next.h: Instead of redefining INITIALIZE_TRAMPOLINE,
+ make use of the new FINISH_INIT_TRAMPOLINE.
+ * m68k/{m68k.h,next.h,aux.h} (FINISH_INIT_TRAMPOLINE):
+ Rename to FINALIZE_TRAMPOLINE.
+ * m68k/{linux.h,m68kv4.h}: Override trampoline macros.
+
+Tue Apr 16 16:02:50 1996 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * combine.c (make_field_assignment): Allow XOR in final case.
+
+Tue Apr 16 11:33:53 1996 J.T. Conklin <jtc@rtl.cygnus.com>
+
+ * m68k.h (TARGET_SWITCHES): Don't remove MASK_68060 with -msoft-float.
+
+ * m68k.h (MULL_COST, MULW_COST, RTX_COSTS): Add costs for TARGET_68060.
+ * m68k.md (ashlsi_16, lshrsi_16): Disable pattern for TARGET_68060;
+ this special case is not faster for that cpu.
+
+Tue Apr 16 10:54:55 1996 Eliot Dresselhaus <dresselh@rft30.nas.nasa.gov>
+
+ * alpha.c (alpha_emit_conditional_move): New function.
+ * alpha.h (alpha_emit_conditional_move): Declare it.
+ * alpha.md (cmov* define_expands): Use it.
+
+Tue Apr 16 09:06:17 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * function.h (struct function): New field returns_pointer.
+ * function.c (push_function_context_{to,from}): Save and restore
+ current_function_returns_pointer.
+
+ * config/svr4.h (ENDFILE_SPEC): Add missing `%s'.
+
+ * configure (m68k-*-linux*aout*): Set tmake_file to m68k/t-linux-aout.
+ (m68k-*-linux*): Set extra_parts.
+ * m68k/t-linux (INSTALL_ASSERT_H): New definition.
+ (CRTSTUFF_T_CFLAGS_S, TARGET_LIBGCC2_CFLAGS): New definitions.
+ * m68k/t-linux-aout: New file.
+ * m68k/linux.h (LIB_SPEC): Deleted.
+ (BSS_SECTION_ASM_OP, ASM_OUTPUT_ALIGNED_BSS): Define.
+
+ * m68k.h (TRAMPOLINE_ALIGNMENT): Specify alignment in bits, not bytes.
+
+Tue Apr 16 08:53:17 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * final.c (final_scan_insn): Allow removal of redundant test and
+ compare instructions that use clobbers.
+
+Tue Apr 16 06:22:00 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-decl.c (clear_limbo_values): New function.
+ (pushdecl): Call it for function body blocks.
+
+ * objc/thr-decosf1.c (_objc_thread_id): Correct return type from
+ int to _objc_thread_id.
+
+ * expr.c (expand_builtin, case BUILT_IN_LONGJMP): Make a decl
+ for __dummy, so we can call make_function_rtl on it.
+
+ * expr.c (expand_assignment): Don't pre-evaluate RHS if a CALL_EXPR
+ with a variable-size return.
+
+Mon Apr 15 17:38:45 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * fixincludes: Fix undefined VOIDFUNCPTR in VxWorks 5.2 <time.h>.
+
+Mon Apr 15 15:12:16 1996 Jim Wilson <wilson@cygnus.com>
+
+ * expr.c (do_store_flag): Before calling exact_log2, remove any
+ sign extension bits.
+
+ * reload1.c (emit_reload_insns): Call reload_reg_reaches_end_p for
+ every reg of multi-reg spill register. Invalidate old info for multi
+ reg spill registers when only part survives to the end.
+
+Mon Apr 15 14:49:12 1996 Mike Stump <mrs@cygnus.com>
+
+ * function.c (preserve_temp_slots): Only preserve temporaries that
+ happen to be at the current level.
+
+Mon Apr 15 14:08:12 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * gansidecl.h: New file.
+ * choose-temp.c: New file.
+ * Makefile.in (xgcc): Depend on and link in choose-temp.o.
+ (collect2): Likewise.
+ (choose-temp.o): Add rule for.
+ * collect2.c: #include "gansidecl.h".
+ (const,PROTO): Delete.
+ (P_tmpdir): Delete.
+ (choose_temp_base): Declare as extern, delete internal copy.
+ (main): Update call to choose_temp_base.
+ * cpphash.c: #include "gansidecl.h".
+ (NULL,const,volatile): Delete.
+ * demangle.h: #include "gansidecl.h".
+ (PROTO,PTR,const): Delete.
+ * expr.h (const): Delete.
+ * fix-header.c: #include "gansidecl.h".
+ (const): Delete.
+ * gcc.c: #include "gansidecl.h".
+ (PROTO,VPROTO,PVPROTO,VPROTO,VA_START,NULL): Delete.
+ (GENERIC_PTR,NULL_PTR,P_tmpdir): Delete.
+ (choose_temp_base): Declare as extern, delete internal copy.
+ (concat): Rewrite to take a variable number of arguments.
+ (choose_temp_base_try,concat[346]): Delete.
+ (translate_options,set_spec,process_command,do_spec_1,
+ is_directory,main): Always use concat, not concat[346]. Pass
+ NULL_PTR as trailing arg to concat.
+ * genattr.c (main): Delete printing of "#define PROTO".
+ * machmode.h: #include "gansidecl.h".
+ (PROTO): Delete.
+ (HAVE_MACHINE_MODES): Move definition to standard place.
+ * recog.h: #include "gansidecl.h".
+ (PROTO,const): Delete.
+ * rtl.h: #include "gansidecl.h".
+ (PROTO,VPROTO,PVPROTO,VPROTO,VA_START,STDIO_PROTO): Delete.
+ (NULL,GENERIC_PTR,NULL_PTR): Delete.
+ * tree.h: Likewise.
+
+Mon Apr 15 08:49:20 1996 Tom May (ftom@netcom.com)
+
+ * cse.c (invalidate_skipped_set): Ignore CLOBBER after calling
+ note_mem_written, not before.
+
+Mon Apr 15 08:22:03 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * m68k.md (tstdi): Optimized for "d" case.
+ (movqi): Allow moving "i" into "a".
+ (zero_extendsidi2): Alternatives merged.
+ (extendplussidi): Fixed when operands 0 and 1 share a register.
+ (adddi_sexthishl32): Constraints reordered for better reload.
+ (adddi3,subdi_sexthishl32,subdi3,negdi2): Likewise.
+ (ashldi_sexthi): Accept "m" as operand 0.
+ (ashldi_const32): Alternatives merged.
+ (ashift patterns): Output "lsl" instead of "asl".
+ (beq0_di): If condition codes already set, output only branch insn.
+ (bne0_di,bge0_di,blt0_di): Likewise.
+ * m68k.c (notice_update_cc, case ASHIFT{,RT}, LSHIFTRT, ROTATE{,RT}):
+ Don't set CC_NO_OVERFLOW.
+ * m68k.h (TARGET_SWITCHES): Fix typo in "c68000" entry.
+
+Mon Apr 15 08:06:17 1996 Stephen L Moshier (moshier@world.std.com)
+
+ * real.c (eadd1): Check for overflow on X plus X.
+
+Mon Apr 15 08:02:24 1996 J.T. Conklin <jtc@cygnus.com>
+
+ * i386/netbsd.h (HAVE_SYSV_PRAGMA): Removed definition.
+ * config/netbsd.h (HAVE_SYSV_PRAGMA): Define.
+ (SET_ASM_OP): Define.
+
+Mon Apr 15 07:28:54 1996 Fila Kolodny <fila@ibi.com>
+
+ * configure: Add definition for host= into Makefile.
+ * build-make (CC): Pass -b $(host), not target.
+
+Mon Apr 15 05:12:39 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (bc_expand_increment): Change declaration to return void.
+
+ * toplev.c (max_label_num_after_reload): New variable.
+ (rest_of_compilation): Set it.
+ * reorg.c (find_dead_or_set_registers): Only kill spill regs after
+ label made before jump2.
+
+ * combine.c (expand_field_assignment): Take SUBREG_WORD into
+ account when have STRICT_LOW_PART.
+ (make_extraction): Make a STRICT_LOW_PART at any low-order word.
+
+Mon Apr 15 03:43:11 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * flags.h (flag_function_sections): Declare.
+ * toplev.c (flag_function_sections): Define.
+ (compile_file): Add warnings when -ffunction-sections is
+ used with -g, or profiling. Disable -ffunction-sections
+ when profiling is used. Add warning when -ffunction-sections
+ is used on a target that doesn't support it.
+ * varasm.c (named_section): Make a copy of the section name
+ in case the original is in temporary storage.
+ (function_section): Set DECL_SECTION_NAME for each function
+ if flag_function_sections is on and the target supports it.
+ * dbxout.c (dbxout_function_end): New function.
+ (dbxout_function): Call dbxout_function_end if using extensions
+ and flag_function_sections is on.
+ * sparc/sysv4.h (ASM_OUTPUT_SECTION_NAME): Prefix a function
+ section's name with ".text%" when -ffunction-sections.
+
+Sun Apr 14 19:37:43 1996 Doug Evans <dje@cygnus.com>
+
+ * toplev.c (main): Delete redundant test for -p used with -fbytecode.
+
+Sun Apr 14 19:01:59 1996 John F. Carr <jfc@mit.edu>
+
+ * c-decl.c (finish_enum): Don't crash if no type can represent all
+ enumeration values.
+
+Sun Apr 14 18:56:40 1996 J.T. Conklin <jtc@rtl.cygnus.com>
+
+ * m68k.md (ftruncdf2): Enable for m68060 systems.
+
+Sun Apr 14 18:49:30 1996 David L. Reese (david.reese@east.sun.com)
+
+ * fold-const.c (range_test): Don't convert hi_cst or lo_cst
+ to unsigned when folding signed range tests.
+
+Sun Apr 14 08:56:27 1996 Stephen L Moshier <moshier@world.std.com>
+
+ * real.h (ereal_from_{int,uint}): Add new arg, MODE.
+ (REAL_VALUE_FROM{,_UNSIGNED}_INT): New arg, MODE.
+ * real.c (ereal_from_{int,uint}): New arg, MODE.
+ * cse.c (simplify_unary_operation): Add new arg to REAL_VALUE_FROM_INT.
+ * fold-const.c (fold_convert): Likewise.
+ * tree.c (real_value_from_int_cst): New arg, TYPE.
+ Pass mode to REAL_VALUE_FROM_INT.
+ (build_real_from_int_cst): Properly deal with truncation.
+
+Sun Apr 14 08:21:29 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): When substituting in output of I2,
+ ensure dest isn't clobbered in I2.
+
+ * combine.c (combine_instructions): In initial scan of insns,
+ handle a REG_INC note's affect on sign bit copies and nonzero bits.
+ (set_nonzero_bits_and_sign_copies): Treat a zero SET arg as a CLOBBER.
+
+Sun Apr 14 07:52:28 1996 Manor Askenazi <manor@santafe.edu>
+
+ * objc/encoding.c (objc_skip_typespec): Don't abort for _C_UNDEF.
+
+Sat Apr 13 20:35:36 1996 Richard Henderson (richard@atheist.tamu.edu)
+
+ * configure (m68k-apple-aux*): Rework to take advantange
+ of list of tm.h files and support all four gas/gld options.
+ * m68k/auxas.h, m68k/auxgas.h, m68k/auxgld.h, m68k/auxld.h: New files.
+ * m68k/auxstd.h, m68k/auxgnu.h: Deleted.
+
+Sat Apr 13 20:18:11 1996 Stephen L Moshier <moshier@world.std.com>
+
+ * alpha.c (check_float_value): New function.
+ * alpha.h (CHECK_FLOAT_VALUE): Define.
+ (ASM_OUTPUT_FLOAT): Print the value in hex.
+
+Sat Apr 13 15:08:45 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * configure: New target arm{,el}-*-coff*.
+ (cpu_default): Sort alphabetically.
+ * arm/coff.h: New file.
+ * arm/t-bare: New file.
+ * arm/arm.c (use_return_insn): Don't use return for naked functions.
+ (arm_valid_machine_decl_attribute): New function.
+ (arm_naked_function_p): New function.
+ (output_func_prologue): Naked functions don't have prologues.
+ (arm_expand_prologue): Likewise.
+ (output_func_epilogue): Likewise with epilogues.
+
+Sat Apr 13 11:31:32 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * h8300.c (adds_subs_operand): Fix thinko in last change.
+
+ * h8300.md (subhi3): Turn into a define_expand.
+ (subhi3 using adds_subs): New pattern.
+ (H8300 subhi): Derived from old subhi pattern. Simplified.
+ (H8300H subhi): Likewise.
+ (subsi using adds_subs): New pattern. Only used on H8300H.
+ (subsi_h8300): Allow "a" registers as destination.
+ (subsi_h8300h): Allow "a" registers as destination. Simplify.
+
+ * h8300.md (bcs_qiqi, bcs_hihi, bs_hiqi): Fix thinkos
+ in last change.
+
+Sat Apr 13 08:59:48 1996 Fila Kolodny <fila@ibi.com>
+
+ * i370/mvs.h (ASM_DECLARE_FUNCTION_NAME): Don't write anything to
+ asm file, because everything is handled in FUNCTION_PROLOGUE.
+
+Sat Apr 13 07:55:38 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.c (alpha_emit_set_const_1): Renamed from
+ alpha_emit_set_const and static.
+ Remove change of Nov 26; again use normal mechanism for SImode.
+ (alpha_emit_set_const): New function.
+
+Fri Apr 12 18:19:39 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * h8300.c (adds_subs_operand, output_adds_subs): New functions.
+ * h8300.md (addhi3): Turn into a define_expand.
+ (addhi3 using adds_subs): New pattern.
+ (H8300 addhi): Derived from old addhi pattern. Simplified.
+ (H8300H addhi): Likewise.
+ (addsi using adds_subs): New pattern. Only used on H8300H.
+ (addsi_h8300): Allow "a" registers as destination.
+ (addsi_h8300h): Simplify. Allow "a" registers as destination.
+
+ * h8300.md (bcs): New attribute type.
+ (default_length): Compute correct length for bcs insns.
+ (bcs_qiqi, bcs_hihi, bs_hiqi): Use new type and update
+ to account for correct length computation.
+
+ * h8300.md (movhi_internal): Demand at least one operand to be reg.
+ (movsi_h8300{{,h}): Optimize loading certain constants.
+
+ * h8300.h (NO_FUNCTION_CSE): Comment out.
+ (FUNCTION_ARG_REGNO_P): Properly define for TARGET_QUICKCALL.
+ (RETURN_IN_MEMORY): Don't return small structs in regs.
+
+ * h8300.c (const_costs): -4 and 4 are cheap on the h8300h.
+ (notice_update_cc): Remove references to "value2" field.
+
+ * h8300.c (dosize): Remove unused "fped" argument. All callers
+ changed. Handle add/sub of 5-8 bytes efficiently on the h8300h.
+
+ * h8300.c (print_operand): Handle new 'R' case for accessing
+ the 8-bit area. Make code for 'Y' fall into code for 'R' when
+ operand is not a register. Update some comments.
+ (h8300_tiny_data_p): New function.
+ (h8300_valid_machine_decl_attribute): Handle "tiny_data" attribute.
+ * h8300.h (OK_FOR_U): Handle memory references into 8-bit area.
+ (ENCODE_SECTION_INFO): Mark SYMBOL_REFs which refer to 8-bit area.
+ * h8300.md (many patterns): Use 'R' rather than 'X' for
+ operands that may be memory accesses into the 8-bit area.
+ (btst pattern): New pattern to set the cc0 (zbit) based on
+ data in the 8-bit area.
+
+ * h8300.md (one_cmplsi2): Fix length computation for h8300h.
+
+Fri Apr 12 14:34:39 1996 Doug Evans <dje@cygnus.com>
+
+ * arm.md (*ldmsi,*stmsi): Use (mem (match_operand ...))
+ to avoid using indirect_operand (reload problems).
+ * arm/semi.h (CPP_PREDEFINES): Define __semi__ instead of semi.
+ * arm/aout.h (ASM_GENERATE_INTERNAL_LABEL): Use LOCAL_LABEL_PREFIX.
+ (ASM_OUTPUT_ADDR_{VEC,DIFF_ELT}): Likewise.
+
+Fri Apr 12 09:43:30 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * dbxout.c (dbxout_typedefs): Don't emit incomplete types yet.
+ (dbxout_symbol): Use DECL_ARTIFICIAL to recognize C++ implicit
+ typedefs.
+
+Thu Apr 11 21:56:26 1996 Doug Evans <dje@cygnus.com>
+
+ * i386/t-winnt (winnt.o): Rewrite based on .c.o rule.
+ (oldnames.o,spawnv.o): Add rules for.
+
+Thu Apr 11 07:25:06 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * calls.c (expand_call): In inlining case, if BEFORE_CALLS is
+ zero, start looking at first insn.
+
+ * expr.c (preexpand_calls, case CALL_EXPR): Rework to properly
+ avoid expanding functions returning variable size objects.
+
+ * integrate.c (expand_inline_function): When comparing types
+ of formal and actual, use TYPE_MAIN_VARIANT.
+
+Thu Apr 11 00:48:29 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * h8300/lib1funcs.asm (modnorm): New function(s). Like divnorm,
+ but gets the sign bit right for modulo operations.
+ (__modhi3, modsi3): Use modnorm.
+
+ * h8300.c (dosize): On h8300h, do 4 byte adjusts using adds and subs.
+ * h8300.h (LONG_LONG_TYPE_SIZE): Always make this 32bits.
+ Reverses change from Apr 2, 1996.
+
+Wed Apr 10 18:39:52 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * sparc.h (ASM_OUTPUT_INTERNAL_LABELREF): Delete.
+ (FUNCTION_PROFILER): Use ASM_GENERATE_INTERNAL_LABEL instead.
+
+ * sparc.c (sparc_override_options): 90c701 renamed to tsc701.
+ (eligible_for_epilogue_delay_slot): Don't allow anything if
+ -mbroken-saverestore.
+ (output_function_prologue): Only use trivial save's if
+ -mbroken-saverestore.
+ * sparc.h (CPP_SPEC): Handle -mcpu={sparclet,tsc701}.
+ (ASM_SPEC): Likewise.
+ ({MASK,TARGET}_BROKEN_SAVERESTORE): Define.
+ (enum processor_type): 90C701 renamed to TSC701.
+ * sparc.md (attr cpu): 90c701 renamed to tsc701.
+ * sparc/splet.h (SUBTARGET_SWITCHES): Recognize -mbroken-saverestore.
+
+Wed Apr 10 17:56:02 1996 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * m88k/dgux.h (EXTRA_SPECS): Define.
+ (ASM_SPEC,CPP_SPEC,STARTFILE_SPEC): Use EXTRA_SPECS.
+ * m88k/dguxbcs.h (ASM_SPEC,CPP_SPEC,STARTFILE_SPEC): Use EXTRA_SPECS.
+ * m88k/m88k.c (output_ascii) Output literal HT.
+
+Wed Apr 10 17:28:37 1996 James Carlson (carlson@xylogics.com)
+
+ * configure: Work around AIX bug when defining SUBDIRS.
+
+Wed Apr 10 17:22:42 1996 Paul Eggert <eggert@twinsun.com>
+
+ * cexp.y (parse_number): Don't reject long long constants unless
+ pedantic.
+
+Wed Apr 10 17:19:56 1996 Stephen L. Moshier (moshier@world.std.com)
+
+ * real.c (e64toe): Properly distinguish between NaN and infinity
+ bit patterns for real-words-big-endian targets.
+
+Wed Apr 10 17:17:26 1996 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ * real.c (endian): Add two explicit casts.
+ (e64toe): Support ARM extended precision fp format.
+ Check negative infinities properly for NaNs.
+ (toe64): Support ARM extended precision fp format.
+
+Tue Apr 9 12:53:31 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * i386/gas.h (ASM_OUTPUT_ALIGN): Define and use .balign.
+
+Tue Apr 9 12:48:45 1996 Stephen L Moshier (moshier@world.std.com)
+
+ * sparc.c (fp_zero_operand): Exclude -0.0.
+
+Tue Apr 9 07:11:24 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.c: Fix typo in last change.
+
+ * tree.c (substitute_in_expr): Don't return new expression if
+ nothing changed.
+ (substitute_in_type): Deleted, not used.
+ * tree.h (substitute_in_type): Delete declaration.
+
+Mon Apr 8 16:30:18 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * flow.c (find_auto_inc): Also make sure there aren't
+ any sets of the incremented register between the memory
+ reference and increment insn.
+
+Mon Apr 8 15:41:14 1996 John Polstra (jdp@polstra.com)
+
+ * configure (i[3456]86-*-freebsdelf*): New target.
+ * i386/freebsd-elf.h: New file.
+ * i386/x-freebsd (USER_H): New define; to null.
+
+Mon Apr 8 14:44:41 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-decl.c (finish_function): Always warn if main doesn't return int.
+
+Mon Apr 8 13:01:37 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.c (got_operand): New function, returns true if the
+ operand can go in V.4's GOT.
+ (rs6000_pic_register): New variable.
+ (output_epilog): Reset rs6000_pic_register.
+
+ * rs6000.h (rs6000_pic_register, got_operand, flag_pic): Add decls.
+ (PREDICATE_CODES): Add got_operand.
+
+ * rs6000.md (movsi): Add support for V.4's -fpic and -FPIC.
+ (init_v4_pic): Initialize the V4 pic register if needed.
+ (call patterns): If -fpic/-fPIC, call function with @plt suffix.
+
+ * t-eabigas (MULTILIB_DIRNAMES): Remove errant pic directory.
+
+ * rs6000.c (output_prolog): Correctly store & restore the
+ arguments to main in their correct save location, when calling the
+ start function.
+
+Mon Apr 8 13:01:37 1996 David Reese <Dave.Reese@East.Sun.COM>
+
+ * rs6000.c (print_operand): Use reg_names to print registers.
+
+Fri Apr 5 00:40:19 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * h8300.c (h8300_valid_machine_decl_attribute): Use underscores,
+ not dashes in attributes.
+ (h8300_funcvec_function_p): Corresponding changes.
+ (h8300_interrupt_function_p): Likewise.
+
+ * pa.h (INIT_CUMULATIVE_INCOMING_ARGS): Initialize "indirect"
+ field to zero.
+
+Thu Apr 4 12:52:11 1996 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * loop.c (combine_givs): Use new macro GIV_SORT_CRITERION.
+ New variable giv_array. Loop over giv_array instead of following
+ next_iv links.
+ (giv_sort): New function.
+ * sh.h (GIV_SORT_CRITERION): Define.
+
+ * c-typeck.c (push_init_level): When output alignment for structure
+ field, add check to verify it is the next field to be output.
+
+Thu Apr 4 12:19:26 1996 David Mosberger-Tang <davidm@AZStarNet.com>
+
+ * alpha.c: Don't include stamp.h for Linux-based GNU systems.
+
+Thu Apr 4 12:17:08 1996 Richardg Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * objc/Makefile: Rename thread* to thr*.
+ * objc/thread.c: Rename thread-* to thr-*.
+ * objc/thr-decosf1.c: Renamed from thread-decosf1.c
+ * objc/thr-irix.c: Renamed from thread-irix.c.
+ * objc/thr-single.c: Renamed from thread-single.c.
+ * objc/thr-solarius.c: Renamed from thread-solaris.c.
+ * objc/thr-win32.c: Renamed from thread-win32.c.
+ * objc/objc-api.h: Include thr.h, not thread.h.
+ * objc/runtime.h, objc/sarray.h: Likewise.
+
+ * i386.md (ashldi3_const_int): Don't recognize if won't match
+ constraint of operand 2.
+
+Thu Apr 4 11:40:55 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * config/fp-bit.c (EXTENDED_FLOAT_STUBS): If EXTENDED_FLOAT_STUBS
+ is defined, define all of the XF/TF functions that might be
+ generated that we don't have code for yet.
+
+ * i960/t-(vxworks960,960bare): (LIB2FUNCS_EXTRA): Make and
+ compile xp-bits.c that defines EXTENDED_FLOAT_STUBS.
+
+ From: steve chamberlain <sac@slash.cygnus.com>
+ * i386/x-cygwin32 (LANGUAGES): Delete.
+ * i386/xm-cygwin32.h (EXECUTABLE_SUFFIX): Set to .exe.
+ * rs6000/xm-cygwin32.h (EXECUTABLE_SUFFIX): Set to .exe.
+
+Wed Apr 3 14:10:16 1996 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * expr.c (emit_push_insn): Clobber register only if it is non-zero.
+
+Wed Apr 3 11:31:55 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * h8300.h (h8300_funcvec_function_p): Declaration moved here.
+ * h8300.c (h8300_funcvec_function_p): Declaration removed from here.
+ * h8300.md (tstqi): Tweak to work like other tstXX patterns.
+ (cmphi): Turn into a define_expand. Add two anonymous
+ matterns to match the output of the cmphi expander.
+ (cmpsi): Accept constants as the second input operand.
+
+Tue Apr 2 13:52:30 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * h8300.md (movqi_internal): Remove useless alternative(s). Fix
+ lengths and simplify by reordering remaining alternatives.
+ (movstrictqi, movhi_internal, movstricthi): Likewise.
+ (movsi_h8300h, movsf_h8300h): Likewise.
+
+ * h8300/h8300.c (extra_pop): Remove unused variable.
+ (current_function_anonymous_args): Likewise.
+ (function_prologue): Remove incorrect varargs/stdarg
+ related code.
+ (function_epilogue): Likewise.
+ (function_arg): Never pass unnamed arguments in registers.
+ * h8300.h (LONG_LONG_TYPE_SIZE): Use 64bits when ints are 32bits.
+ (SETUP_INCOMING_VARARGS): Remove definition.
+
+Mon Apr 1 16:59:48 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * fixincludes: Fix signal prototype on SunOS to avoid pedantic C++
+ error.
+
+Mon Apr 1 16:16:34 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (get_inner_reference): When finding mode to access bitfield
+ that ends up properly aligned, use mode class of its type unless
+ type's mode was BLKmode.
+
+Mon Apr 1 13:45:30 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * h8300.c (interrupt_handler): Renamed from pragma_interrupt.
+ All references changed.
+ (function_prologue): Set interrupt_handler if the current
+ function has the "interrrupt-handler" attribute.
+ (small_call_insn_operand): New function.
+ (h8300_interrrupt_function_p): New function.
+ (h8300_funcvec_function_p): New function.
+ (h8300_valid_machine_decl_attribute): New function.
+ * h8300.h (VALID_MACHINE_DECL_ATTRIBUTE): Define.
+ * h8300.md (call insns): Handle calls through the
+ function vector. Indirect calls and calls through
+ the function vector have a length of two bytes.
+
+See ChangeLog.10 for earlier changes.
+
+Use a consistent time stamp format in ChangeLog entries.
+Not everyone has Emacs 20 yet, so stick with Emacs 19 format for now.
+
+Local Variables:
+add-log-time-format: current-time-string
+End:
diff --git a/gcc/ChangeLog.0 b/gcc/ChangeLog.0
new file mode 100644
index 00000000000..461a66a4e2e
--- /dev/null
+++ b/gcc/ChangeLog.0
@@ -0,0 +1,6670 @@
+Wed Dec 21 02:46:34 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Version 1.32 released.
+
+ * toplev.c (main): Vax pcc enforces goto-less programming
+ with fatal error.
+
+ * stmt.c (fixup_memory_subreg): New arg INSN says where to emit insns.
+ (walk_fixup_memory_subreg): Likewise. All callers changed.
+
+Tue Dec 20 01:26:56 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (start_function): Don't clear TREE_PERMANENT in fn decl.
+ Make the result decl a permanent node.
+ (finish_function): Don't clear DECL_RESULT in an inline function.
+ (duplicate_decls): Don't lose DECL_RESULT or DECL_SAVED_INSNS
+ or old decl, when defn is followed by redeclaration.
+ Likewise DECL_ARGUMENTS and DECL_RESULT_TYPE.
+
+ * stmt.c (expand_function_end): End any sequences left unterminated.
+
+ * cse.c (predecide_loop_entry): If "loop" has no label, do nothing.
+
+ * recog.c (asm_noperands): Now return -1 if not that kind of insn.
+ All callers changed.
+ * combine.c (check_asm_operands): Calling changes not quite trivial.
+ * final.c (final): Likewise.
+ * reload.c (find_reloads): Likewise.
+ * recog.c (asm_noperands): Other changes:
+ Loop computing # of SETs in a PARALLEL was off by 1.
+ Validate all elts of any PARALLEL, to block invalid combinations.
+
+ * ns32k.md (andsi3, andhi3): Make new CONST_INTs; don't clobber old.
+
+ * integrate.c (copy_rtx_and_substitute): When looking in `parm_map',
+ if our mode mismatches parm's mode, use change_address to extract part.
+ On BYTES_BIG_ENDIAN machines, adjust the offset.
+
+Mon Dec 19 23:50:14 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cexp.y ('/' and '%' ops): If divide by 0, print error, don't die.
+
+Sun Dec 18 14:03:02 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * toplev.c (main): Avoid shadowing I in inner block.
+
+ * flow.c (propagate_block): The insn at the end of a libcall
+ may be dead, but the libcall might still be needed if the
+ hard return reg is used later. Detect this case.
+ (libcall_dead_p): New fn used to check that the libcall is dead.
+
+ * output-m68k.c, tm-m68k.h (standard_sun_fpa_constant_p): Fn renamed.
+
+Sat Dec 17 13:23:51 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stmt.c (expand_end_bindings): error_with_file_and_line => ..._decl.
+
+ * combine.o (try_combine): Accept combination making a valid
+ asm with operands.
+ (check_asm_operands): Recognize asm with operands that are valid.
+
+ * loop.c (strength_reduce): Don't accept a reg as a giv
+ if the reg was made by loop-optimize.
+
+ * stmt.c (balance_case_nodes): A list of 3 always splits in middle.
+
+Fri Dec 16 17:22:07 1988 Tiemann (rms at sugar-bombs.ai.mit.edu)
+
+ * sparc.md (fetch from constant address): Split into two patterns,
+ one fixed point and one floating.
+ (store at constant address): Handle remembered hi-half differently.
+ Other bug fixes.
+ (fix_truncsfsi2): Use f1, not f0, as temp.
+ (fix_truncdfsi2): Don't clear CC_F1_IS_0.
+
+ * output-sparc.c (singlemove_string): Changed handling of case
+ where op1 is not memory and op0 has varying address.
+ (output_fp_move_double): Avoid reloading high half address
+ in the ldd and std cases with constant address.
+ (make_f0_contain_0): Handle f0 and f1 individually.
+
+ * tm-sparc.h (GO_IF_LEGITIMATE_ADDRESS): CONST is now illegitimate.
+
+ * rtl.c (note_stores): Pass entire SET rtx, not flag, as 2nd arg to FN.
+ * local-alloc.c (reg_is_set): New type for 2nd arg.
+
+ * Makefile: Comment out cc1plus, since not ready for release.
+
+Thu Dec 15 16:39:47 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * local-alloc.c (reg_is_set): If a hard reg is clobbered, make it free
+ before and after the insn.
+ * stupid.c (stupid_mark_refs): Likewise.
+ * global-alloc.c (global_conflicts): Likewise.
+ Use note_stores to call mark_reg_{store,clobber}.
+ (mark_reg_store): Changed calling conventions
+ All work done on set/clobbered regs is now done here.
+ Ignore CLOBBERs.
+ (mark_reg_clobber): Similar fn, but ignore SETs and handle CLOBBERs.
+ (regs_set, n_regs_set): New static vars for comm. among the above.
+
+ * stmt.c (expand_asm_operands): call protect_from_queue on operands.
+ This requires preexpanding the outputs into a vector of rtx's.
+
+ * Makefile (install): cd to $(libdir) before ranlib.
+
+ * c-typeck.c (c_expand_asm_operands): emit_queue at the end.
+
+ * reload.c (find_reloads): Count # alternatives properly for
+ an asm insn, and check that all operands correspond.
+
+ * loop.c (verify_loop): Reject loops containg setjmps.
+ * cse.c (cse_main): Don't cse across a call to setjmp.
+
+ * expr.c (expand_expr): Permit any non0 DECL_RTL for a VAR_DECL.
+
+ * stmt.c (balance_case_nodes): Count ranges double when balancing.
+
+Wed Dec 14 13:50:45 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * final.c (output_addr_const): Output just `-', not `+-'.
+
+ * make-cc1.com: Update filenames changed to `c-'.
+ * make-cccp.com: Pass needed -D options when compiling cccp.c.
+ Use /nomap when linking.
+
+ * loop.c (strength_reduce): Paraphrase setting NEW_REG, for Iris cc.
+
+ * output-m68k.c (output_move_const_single): %'s must be doubled twice.
+
+ * loop.c (record_giv): A giv can be replaceable if its uses are
+ all in the same basic block as its sole setting.
+ (last_use_this_basic_block): Subroutine to test that.
+
+Tue Dec 13 13:41:57 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (do_store_flag): Allow for COMPARISON to be a const_int.
+
+ * c-decl.c (pushdecl): Warn if type mismatch with another external decl
+ in a global scope.
+
+ * fixincludes: Fix typo in msg of deleting unchanged file.
+
+ * Makefile (insn-*): Use two-step rules with a separate time-stamp file
+ to avoid rerunning gen* unless md has changed again.
+
+Mon Dec 12 13:32:05 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * i386.md (tstsf, tstdf, cmpsf, cmpdf): Use fnstsw, not fstsw. Faster.
+
+ * tm-vax.h (ASM_OUTPUT_REG_POP): Use correct asm syntax for pop insn.
+
+ * combine.c (subst): Handle (subreg (mem)) by making a changed mem.
+ This avoids producing any (subreg (mem))s except in the special
+ case they are supposed to be made here.
+ Also set undo_storage in a couple of cases that forgot to.
+
+ * reload.c (push_reload): When handling (SUBREG (MEM)) for IN,
+ if there is an OUT, make that a separate reload.
+ Return its number in `output_reloadnum'
+ (find_reloads): When pushing matching-reloads, note that the
+ two operands can have different reload-numbers.
+
+ * tm-3b1.h (ASM_OUTPUT_CASE_END): Test flag on TABLE, not its pattern.
+ (ASM_OUTPUT_CASE_LABEL): If /i flag set, don't output the dummy entry
+ since the fetcher-insn will not be off by 2 in this case.
+ * m68k.md (casesi_2 recognizer): For 3b1 syntax, compensate for that.
+
+Sun Dec 11 12:51:49 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * genrecog.c (try_merge_2): No longer put all explicit decompositions
+ before all predicates. Patterns are now tested in the order written.
+ * vax.md: Move the push-or-move-address patterns to the end.
+ * m68k.md: Move load-address pattern to end.
+ Rearrange the special-case movsi patterns.
+ * ns32k.md: Move special load-reg-17 pattern before movsi.
+ * i386.md: Move the QI and DI push patterns to logical places.
+ This should not actually change anything.
+
+ * stmt.c: Add Andy Hitchins's binary-tree case statement code.
+ (struct case_stmt): case_list field is now a case_node chain.
+ Replace has_default field with default_label field.
+ (pushcase, pushcase_range): Build case_list in its new type,
+ and keep it sorted.
+ (expand_end_case): Use case_list in its new type.
+ Count a range of > 1 as two cases, when choosing strategy.
+ (group_case_nodes, balance_case_nodes): New fns, rearrange case_list.
+ (node_has_{low,high}_bound, node_is_bounded): New fns test
+ relationships of values of various case_list tree nodes.
+ (emit_jump_if_reachable): New fn.
+ (emit_case_nodes): Emit compares and jumps based on tree of case_list.
+
+ * cccp.c (finclude): Handle nonordinary files (stat doesn't give size).
+
+ * tm-3b1.h (PRINT_OPERAND_ADDRESS): Handle case of breg and no ireg.
+
+Sat Dec 10 16:30:32 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * sparc.md (movstrsi): Separate define_expand and define_insn;
+ clobber some pseudos to get temp regs to use in the output.
+ * output-sparc.c (output_block_move): Use those temp regs,
+ guaranteed to be free.
+
+ * sparc.md (andcc patterns for bitfields from memory):
+ Test immed. arg for being in range.
+ (load DFmode constant): Use %m for output in one case.
+ * output-sparc.c (singlemove_string, output_move_double): Likewise.
+
+ * output-sparc.c (singlemove_string): New case for mem-to-mem move.
+
+Fri Dec 9 11:42:15 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stupid.c (stupid_mark_refs): for CLOBBER of a pseudo,
+ it is born just before this insn and dies just after.
+
+ * tm-vax.h (NOTICE_UPDATE_CC): For aob, sob insns, forget the cc's.
+
+ * basic-block.h (REG_BLOCK_UNKNOWN, REG_BLOCK_GLOBAL): Move defn here.
+ * local-alloc.c: Use them.
+
+ * c-decl.c (store_parm_decls): Additional explanatory message
+ for some prototype mismatches.
+
+ * gnulib.c (SItype): New macro used instead of `int'
+ for SImode operands and values. Definition is `long int'.
+
+Thu Dec 8 18:45:48 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload.c (operands_match_p): Move the label `slow' so that
+ it doesn't cause a REG and a SUBREG to be compared wrong.
+
+ * toplev.c (compile_file): Output a label `gcc_compiled.' for GDB.
+ If new macro ASM_IDENTIFY_GCC is defined, run that instead.
+ * tm-3b1.h (ASM_IDENTIFY_GCC): Define this as no-op.
+
+Wed Dec 7 12:20:42 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * i386.md (adddf3): Typo: paren was in a constraint.
+
+ * c-decl.c (grokparms): Avoid duplicate msgs for incomplete type ptrs.
+
+ * gnulib.c: Rename all fns to start with `__'.
+ * optabs.c, expr.c: Rename all references.
+
+ * gnulib.c (__cmpdi2, __ucmpdi2): New fns.
+ * optabs.c (emit_cmp_insn): Use them.
+
+ * Makefile (stage*): Ignore errors on the main `mv' (for cc1plus).
+ Run ranlib if we have to copy gnulib.
+
+ * expmed.c (expand_divmod): Split `label' into several local vars.
+
+ * jump.c (jump_back_p): Do nothing unless cc's were set from integers.
+
+Tue Dec 6 12:00:21 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-parse.y (extend_token_buffer): Use xrealloc, not realloc.
+
+ * integrate.c (output_inline_function): fix args of expand_function_end
+ (expand_inline_function): Add missing arg to expand_end_bindings.
+
+ * cse.c (cse_insn): Add missing MODE arg to canon_hash.
+
+ * reload1.c (reload_as_needed): Del. extra arg of choose_reload_targets
+ (reload): Add missing MODE arg to immediate_operand.
+
+ * expmed.c (expand_mult): Delete extra arg to expand_unop.
+
+ * c-typeck.c (default_conversion):
+ Add missing NOCONVERT arg to build_unary_op.
+
+ * c-decl.c (duplicate_decls, finish_struct): Add missing arg
+ KNOWN_ALIGMENT to layout_decl.
+ * stor-layout.c (layout_record): Likewise.
+ * varasm.c (assemble_variable): Likewise.
+
+ * dbxout.c (dbxout_init): Add missing LOCAL arg to dbxout_symbol.
+
+ * expr.c (clear_storage): Remove excess arg to emit_move_insn.
+
+ * loop.c (consec_sets_invariant_p): Add parens in hairy if-condition.
+
+ * fold-const.c (fold): Typo, missing `case'.
+
+ * cccp.c (main): Typo handling `-I-' option.
+
+ * tm-i386.h (NO_FUNCTION_CSE): Define this; cse is said to slow
+ things down with less than 7 calls.
+
+ * stmt.c (fixup_var_refs_insn): When scanning the reg-notes,
+ don't touch other insns they point at.
+
+ * expr.c (do_jump): Use invert_exp, not reverse_condition,
+ to invert sense of a jump.
+ * jump.c reverse_condition now static, invert_exp now global.
+
+Mon Dec 5 10:51:39 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-sun386.h (ASM_FILE_START): In the .file arg, exclude directories.
+
+ * stmt.c (expand_expr_stmt): If -W, warn if stmt has no side effect.
+
+ * cccp.c (monthnames): Capitalize each name.
+
+ * rtl.def: New code MATCH_OPERATOR.
+ * genconfig.c (walk_insn_part): Handle it.
+ * genextract.c (walk_rtx): Handle it.
+ * genpeep.c (match_rtx): Handle it.
+ * genrecog.c (add_to_sequence): Handle it.
+ * genemit.c (max_operand_1, gen_exp, gen_expand): Handle it.
+ * genoutput.c (scan_operands): Handle it.
+ (insn_n_alternatives): New array in the output.
+ (struct data): New slots n_alternatives and op_n_alternatives.
+ (scan_operands, gen_insn, gen_peephole):
+ Record op_n_alternatives for each operand.
+ (output_epilogue): Verify that all operands have same # of alternatives
+ Also output insn_n_alternatives.
+
+ * reload.c (find_reloads): use insn_n_alternatives to control
+ the loop over all alternatives.
+ An empty constraint or empty alternative in a constraint
+ is always satisfied.
+ * recog.c (constrain_operands): Likewise.
+
+ * c-decl.c (lang_decode_option): For each -f option, recognize a form
+ with `no-' and a form without, as contraries.
+
+ * toplev.c (main): Decode -f options using a table
+ so that each option automatically has a `no-' variant.
+
+ * combine.c (try_combine): Give up if I1 or I2 follows a compare insn.
+
+Sun Dec 4 12:00:36 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * varasm.c (data_section): If flag_shared, use SHARED_SECTION_ASM_OP
+ if that is defined.
+
+ * cccp.c (include_default): Add /usr/local/include.
+
+ * Makefile (install): Install the makefile.
+
+ * varasm.c (assemble_external): New fn to declare an external.
+ (assemble_variable): Output nothing for externals.
+ * c-parse.y (primary => identifier): Call assemble_variable on 1st use.
+
+ * toplev.c (main): Print version info on stderr, not stdout.
+ * tm-*.h (TARGET_VERSION): Likewise.
+
+ * tm-isi68.h, tm-news800.h: Rename __HAVE_FPU__ to __HAVE_68881__.
+
+ * sparc.md (seq, etc): Entire page rewritten by Tiemann
+ to avoid incorrect use of PARALLEL.
+ * output-sparc.c (gen_scc_insn): Corresponding changes.
+
+Sat Dec 3 00:03:19 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gcc.c (do_spec_1): %P is an ANSIfied form of %p:
+ put __ at beg and end of each predefined macro name.
+
+ * tm-sun3.h (CPP_SPEC): Don't define -Dmc68010, etc., if -ansi.
+ * tm-sun2.h (CPP_SPEC): Likewise.
+
+ * c-decl.c (shadow_tag): Don't complain if declare a new tag
+ at top level, or if redeclare a tag.
+
+ * c-decl.c (grokparms): Warn if parm points to incomplete type.
+ (We already err if its own type is incomplete.)
+
+ * stmt.c (fixup_var_refs_insns): Fix any (SUBREG (MEM)) in REG_NOTES.
+ (walk_fixup_memory_subreg): New subroutine used for this.
+
+ * integrate.c (copy_rtx_and_substitute): Handle MEM refs to the middle
+ of a stack-parm--at least in the case of reading the parm.
+
+ * rtl.c (rtx_equal_p): REG_FUNCTION_VALUE_P is significant
+ only until end of reload pass.
+ * toplev.c (rest_of_compilation):
+ Control that by setting new var rtx_equal_function_value_matters.
+
+ * c-decl.c (init_decl_processing): Don't declare the builtins
+ that aren't really implemented.
+
+ * output-sparc.c (output_move_double): "in structure" implies
+ 8-byte alignment only for DFmode, not for DImode.
+
+ * final.c (output_operand_lossage): Cleaner text for error msg.
+ No longer need to write text into .s file, now that linenum is correct.
+
+ * c-decl.c (pushdecl): -traditional stops warning
+ about "declared extern, later static".
+
+ * c-typeck.c (build_indirect_ref): Don't handle flag_volatile here.
+ * expr.c (expand_expr): Handle it here, in INDIRECT_REF case.
+ This prevents -fvolatile from causing additional warnings.
+
+ * output-sparc.c (output_load_address): Allow REG+REG for operands[3].
+
+ * m68k.md (movsi): If we output the label LIn,
+ set the RTL_INTEGRATED flag in the switch table's pattern.
+ * tm-3b1.h (ASM_OUTPUT_CASE_END): Define LD%n only if LI%n was output.
+
+ * i386.md (push-and-add pattern): Comment it out.
+ It's said to result in slower code.
+
+ * i386.md (tstqi, tsthi, tstsi): Output real `test' insn if op is reg.
+
+ * i386.md (push for DI): Allow `oiF' for 2nd operand.
+
+Fri Dec 2 13:57:35 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * i386.md (movdi): Allow F constraint for 2nd operand.
+
+ * i386.md (push for QI): define pattern to push a QImode
+ which really uses pushw and therefore really pushes a halfword.
+ * tm-i386.h (PUSH_ROUNDING): Round up to multiple of 2.
+
+ * gcc.c (do_spec_1): Handle %e, which means report an error.
+ Use it to prohibit -pg with -fomit-frame-pointer.
+
+ * tree.h (DECL_RESULT_TYPE): New field in FUNCTION_DECL holds the type
+ of the widened returned value (not nec. the declared return type).
+ * c-decl.c (start_function): Set DECL_RESULT_TYPE.
+ * integrate.c (expan_inline_function): Use that, not DECL_RESULT.
+
+Thu Dec 1 16:44:10 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cse.c (fold_rtx): When reordering constant args, insist on
+ manifest constants; regs with known contents won't do.
+
+ * i386.md (mulsi3): Don't use rtx_equal_p to compare regs.
+
+ * expr.c (move_by_pieces_1): Don't call change_address
+ if address is autoinc, since that may not be memory_address_p.
+ Subroutine-macro add_offset deleted.
+
+ * optabs.c (bcc_gen_fctn, setcc_gen_fctn): Moved to this file.
+ (init_optabs): Init those tables here.
+ * expr.c (init_conditions): Not here.
+
+ * stmt.c (assign_stack_local): Make a list of all stack slots.
+ * emit-rtl.c (unshare_all_rtl): Unshare all the stack slots.
+
+ * final.c (final): Handle BARRIER with ASM_OUTPUT_ALIGN_CODE.
+ * tm-ns32k.h (ASM_OUTPUT_ALIGN_CODE): Align to 4-byte bdry.
+?? * tm-sequent.h (ASM_OUTPUT_ALIGN_CODE): Override: just 2-byte bdry.
+
+ * tm-m68k.h (PRINT_OPERAND): use new macros to print floats.
+ (ASM_OUTPUT_FLOAT_OPERAND): New macro.
+ (ASM_OUTPUT_DOUBLE_OPERAND): New macro.
+ * tm-sun3.h: Override those macros, to check for infinities.
+
+Wed Nov 30 06:35:47 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-ns32k.h (FUNCTION_{PRO,EPI}LOGUE): if no frame pointer,
+ do explicit push or pop insns.
+
+ * tm-genix.h (PRINT_OPERAND): Fix typo `file'.
+ Extedn decl for paren_base_reg_printed.
+ (MAIN_FUNCTION_PROLOGUE): Deleted.
+ (ASM_OUTPUT_EXTERNAL): Defined.
+
+ * c-parse.y (yyerror): Better error msg for unprintable char in token.
+ (primary => identifier): Set TREE_USED if implicit decl made.
+
+ * Makefile (cleanlinks): New target.
+ (INSTALL): New variable, has program used for installing files in sys.
+
+ * output-ns32k.c (print_operand_address): If addr is sum of 2 consts,
+ output ADDR first, then OFFSET.
+
+ * ns32k.md (addsi3): Allow adding const+reg with result in another reg.
+
+ * tm-seq386.h (FUNCTION_PROFILER): Provide overriding definition.
+
+ * tm-hp9k320.h: Alternate ASM_SPEC if using GAS.
+ Define STANDARD_STARTFILE_PREFIX if using GAS.
+ (FUNCTION_PROLOGUE): on 68020 for big stack frame use link.l.
+
+ * gcc.c (STANDARD_STARTFILE_PREFIX): New cust. macro replaces `/lib/'.
+
+ * va-sparc.h, va-spur.h: Prefix non-interface identifiers with `__'.
+
+ * optabs.c (init_optabs): Don't set up libcalls for ftrunc_optab
+ because (1) they aren't supported and (2) they are never used.
+
+ * gnulib.c (__builtin_saveregs): If not sparc, define the symbol anyway
+ to avoid a warning in ranlib.
+
+Mon Nov 28 01:46:12 1988 Michael Tiemann (mdt at choctaw)
+
+ * c-parse.y (yylex): Typo, `=' for `==' making wide strings.
+
+ * sparc.md (various places): make sure that all patterns which store
+ can store using const0_rtx (i.e., make all operands to `st' %rx).
+
+ * output-sparc.c (various places): changed dispatches on SYMBOL_REF
+ to dispatches on CONSTANT_ADDRESS_P since we now recognize any CONST
+ (and not just SYMBOL_REFs). Don't recognize special case CONST for
+ output_block_move. Compiler doesn't have enough information to use
+ it.
+
+ * stmt.c (expand_fixup): If the control stack is nested within the
+ nesting stack, then no fixup is needed. Otherwise, compiler must
+ check for possible fixups between the current nesting stack and the
+ nesting stack that immediately contains the control stack.
+
+ * stmt.c (expand_function_start): functions which are nested use
+ DECL_CONTEXT. For these functions, test that their DECL_CONTEXT is
+ a LET_STMT node.
+
+ * tree.h: declare `build_offset_type'.
+
+Sun Nov 27 10:34:53 1988 Richard Stallman (mdt at yahi)
+
+ * output-sparc.c (output_move_double):
+ Don't try to use ldd/std if OP1 is a constant.
+ * sparc.md (movdi): Allow immediate args moved into general regs.
+
+ * c-decl.c (grokparms): Reject incomplete parm types even if just
+ declarating, not defining. Change types to error_mark_node
+ in both the PARM_DECL and the list of types.
+
+ * dbxout.c (dbxout_type): It's not a bug if a RECORD_TYPE
+ has a typedef as its TYPE_NAME. That happens in C++.
+
+ * Make each `asm' with operands record its source file/line
+ with reg-notes. It doesn't work to emit a special note before the insn
+ because the insn can be moved by loop_optimize.
+ * stmt.c (expand_asm_operands): New args FILENAME, LINE.
+ Record them in the insn, in reg notes.
+ * c-typeck.c (c_expand_asm_operands): New args, passed along.
+ * c-parse.y: Pass those args.
+ (maybe_type_qual): Line #s for asm stmts emitted like all others.
+ * rtl.h (REG_ASM_FILE, REG_ASM_LINE): New kinds of reg notes.
+ * toplev.c (error_for_asm): Get the info from those notes.
+
+ * reload.c (find_reloads): Don't clear BADOP for a reg letter
+ if the alternative ultimately doesn't allow any regs.
+
+ * reload.c (find_reloads): If an `asm' insn gets an error,
+ change it to a USE to avoid duplicate error msgs or later trouble.
+
+ * reload.c (find_reloads_address): Reloading a constant address,
+ specify Pmode as the mode for push_reloads, in case of CONST_INT.
+
+ * expr.c (emit_push_insn): Fix calc. of space needed when PARTIAL > 0.
+ Both scalar case and BLKmode case needed fixing.
+
+ * sparc.md (load/store constant address):
+ Moving DF from mem to cpu regs, don't go via %f0.
+ Don't use std/ltd if alignment is wrong or uncertain.
+
+Sun Nov 27 10:34:53 1988 Michael Tiemann (mdt at yahi)
+
+ * reload.c (push_reload): Allow VOIDmode for INMODE, OUTMODE;
+ default the mode from the operand values.
+
+ * sparc.md: remove patterns which generate annulled branch insns.
+ They are correct, but those insns confuse GDB.
+
+ * tm-sparc.h (GO_IF_LEGITIMATE_ADDRESS):
+ Treat any constant address like a SYMBOL_REF.
+ * sparc.md: Check for CONSTANT_ADDRESS_P rather than SYMBOL_REF.
+
+ * sparc.md: Peepholes now accept SYMBOL_REF addresses.
+ The output routine can now split them properly even as delay insns.
+
+ * print-tree.c (dump): added entry for METHOD_TYPE and
+ METHOD_CALL_EXPR. Also added entry for WITH_CLEANUP_EXPR. Suggest
+ that we make first_rtl of WITH_CLEANUP_EXPR 2 instead of 1.
+
+Sun Nov 27 00:15:33 1988 Michael Tiemann (mdt at yahi)
+
+ * print-tree.c (dump): added entry for OP_IDENTIFIER.
+
+ * tree.c (build_op_identifier): new function. Needed because
+ `build_nt' expects an "e" node, but OP_IDENTIFIER is an "x" node.
+
+ * store_layout.c (layout_record): use DECL_FIELD_CONTEXT instead of
+ DECL_CONTEXT.
+
+ * tree.h (DECL_FIELD_CONTEXT): new macro. Points to the type that a
+ FIELD_DECL is a member of. For C, this is just DECL_CONTEXT.
+
+ * tree.c (build_method_type): typo used "==" to assign basetype to
+ TYPE_METHOD_BASETYPE with predictably poor results.
+
+Sat Nov 26 22:55:32 1988 Michael Tiemann (mdt at yahi)
+
+ * output-sparc.c (output_sized_memop): new function to output a load
+ or store insn based on the size of the operand loaded or stored.
+ (make_f0_contain_0): use info from condition codes to decide whether
+ the register %f0 needs to have 0 loaded from memory or not in order
+ to contain zero.
+ (gen_scc_insn): new function used by define_expands for
+ set-on-condition-code insns.
+ (output_delay_insn): now knows how to handle load and store
+ scheduling when the load or store operation takes two insns instead
+ of one. The rewrite is now understands is this:
+
+ sethi %hi(address),%g1 -> sethi %hi(address),%g1
+ ld/st [%g1+%lo(address)],%reg -> b target
+ b target -> ld/st [%g1+%lo(address)],%reg
+ nop -> ;; gone
+
+ * jump.c (reverse_condition): make this function publicly visible,
+ now needed in expr.c.
+
+ * output-sparc.c (reg_or_0_operand): new function, returns nonzero
+ if operand is const0_rtx or a register of specified mode.
+ (hardreg): deleted.
+
+ * expr.c, stmt.c: fixed random syntax errors.
+
+ * tree.c (build_method_type): now corresponds to defn in tree.def
+ expr.c (expand_call): removed code to get FUNCTION_TYPE from
+ METHOD_TYPE. This should probably be looked at harder.
+
+ * tree.def (METHOD_TYPE): Changed definition so that TREE_TYPE (m)
+ (where m is a METHOD_TYPE) is the type of the return value of the
+ method, not the FUNCTION_TYPE from which the METHOD_TYPE is derived.
+
+ * Makefile: Changed target of BINDIR from /usr/local to
+ /usr/local/bin.
+
+Sat Nov 26 16:29:22 1988 Michael Tiemann (mdt at chickasaw)
+
+ * tm-sparc.h (GO_IF_LEGITIMATE_ADDRESS): Allow any SYMBOL_REF.
+ (NOTICE_UPDATE_CC): Remember high half of %g1 as a "condition code"
+ to avoid reloading it if it does not change.
+ (NOTICE_UPDATE_CC): Test SET_SRC, not SET_DEST, for a CALL rtx.
+ (PRINT_OPERAND): New code-letter `m' says output operand as an address.
+
+ * toplev.c (flag_syntax_only): New flag variable.
+ * flags.h: Likewise.
+
+ * toplev.c (error_with_decl): Extra arg, passed to fprintf.
+ (warning_with_decl): Likewise.
+
+ * tree.c (build_offset_type): New function.
+
+ * tree.h (TYPE_METHOD_BASETYPE): New name for TYPE_METHOD_CLASS.
+ Uses in tree.c and... renamed.
+
+ * combine.c (SUBST_INT): New macro, for replacing an int.
+ (subst): Collapse nested SUBREGs even if SUBREG_WORDs are not 0.
+
+ * expr.c (bcc_gen_fctn, setcc_gen_fctn): new tables,
+ initialized in init_comparisons.
+ Used in expand_expr, do_jump, do_store_flag
+ instead of explicit construction of a jump.
+
+ * expr.c (save_noncopied_parts): New function.
+
+ * expr.c (expand_expr):
+ ARRAY_REF: Special case for array of constants.
+ WITH_CLEANUP_EXPR: Handle it.
+ INIT_EXPR: Case deleted.
+ MODIFY_EXPR: Use save_noncopied_parts.
+
+ * expr.c (expand_call): blkmode_parms_forced can be >0
+ even when no stack arg space otherwise needed.
+ Don't use a hard reg as a target if there are cleanups.
+
+ * stmt.c (struct block): New elt. outer_cleanups.
+ (struct case): New elt. num_ranges.
+ (struct fixup): Changed meaning of cleanup_list_list.
+ Changes in expand_fixup, fixup_gotos.
+ (expand_fixup): Detect some internal forward-jumps
+ that need no fixups--for speed.
+ (fixup_gotos): New arg THISBLOCK.
+ (expand_expr_stmt): Handle flag_syntax_only.
+ (use_variable): No longer static.
+ (use_variable_after): new fn.
+ (expand_end_bindings): handle cleanups like a stack level.
+ (expand_decl): Handle a cleanup with no decl.
+ (move_cleanups_up): Preserve relative order of cleanups.
+ (expand_anon_union_decl): New fn.
+ (pushcase): New fast clause if no ranges yet.
+ (pushcase_range): Turned on.
+ (expand_function_start): New temp var `fntype'.
+ Set TREE_USED for a parm we are ignoring.
+ (expand_function_end): Really use the `filename' arg.
+ Use use_variable_after for SAVE_EXPR regs.
+
+ * dbxout.c (dbxout_type): Handle OFFSET_TYPE.
+
+ * gnulib.c (__builtin_new, etc.): Support for C++.
+
+ * emit-rtl.c (next_insn, prev_insn): New fns.
+
+Sat Nov 26 16:29:22 1988 Richard Stallman (mdt at chickasaw)
+
+ * tree.h (TREE_LANG_FLAG_[1234]): New attributes.
+ (TYPE_METHOD_BASETYPE): New name for TYPE_METHOD_CLASS.
+ (TYPE_OFFSET_BASETYPE): New macro.
+ (NUM_TREE_CODE): New macro.
+ (TYPE_NONCOPIED_PARTS): new field in a type-node.
+
+ * varasm.c (make_decl_rtl): Split out from assemble_variable.
+ (assemble_variable): No longer creates the rtl.
+ No longer handles policy of whether to output tentative decl yet.
+ (output_constant_def): Don't lose if wasn't temp allocation
+ when this was called.
+ (output_constant): Handle REFERENCE_EXPR.
+
+ * Makefile (BISONFLAGS): new variable.
+ (prefix): New variable, used in bindir and libdir.
+ (C_OBJS, CPLUS_OBJS): New vars, split off from OBJS.
+ (LIBFUNCS): C++ support functions added.
+ (CPLUS_TREE_H): New variable.
+ (cc1plus): New target.
+ (lang_c, lang_cplus): Combines all targets for one language.
+ (gplus.info): New target.
+ (cplus-*.o): New targets.
+ (realclean): Handle new C++ files and recent renamings.
+ (install, TAGS): Likewise.
+
+ * print-tree.c (prtypeinfo): Handle TREE_LANG_FLAG_[1-4].
+
+ * tm-sparc.h (ASM_OUTPUT_DOUBLE): Special case for infinity.
+ (ASM_OUTPUT_FLOAT): Likewise.
+
+ * gcc.c: Don't define __GNU__.
+ For .cc files, pass -+ to cpp, and don't handle -ansi.
+ Use cc1plus as name of compiler for .cc files.
+
+ * stor-layout.c (layout_type): abort if given a LANG_TYPE node.
+ (layout_union): Complain if union has basetypes or static members.
+ (layout_record): Handle anonymous union members.
+
+ * tree.def (LANG_TYPE): New tree code for language-specific purposes.
+ (WITH_CLEANUP_EXPR): New tree code for expressions whose values
+ need to be cleaned up when they are deallocated.
+ (OP_IDENTIFIER): New tree code for certain C++ purposes.
+
+ * toplev.c (rest_of_decl_compilation): Call make_var_rtl
+ before assemble_variable.
+
+Wed Nov 23 02:15:45 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * xm-sunos4.h: Rename included config files to xm-*.
+ * xm-*.h: Likewise.
+
+ * fixincludes: Avoid altering args to names other than CTRL
+ that end in ...CTRL.
+ If a file isn't actually changed, delete the copy.
+
+Mon Nov 21 12:48:22 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * loop.c (move_movables): Never move a reg w/ # > old_max_reg.
+ (strength_reduce): For nonreplaceable giv, put insn to load it
+ after the insn that used to compute it, in case the latter
+ is the last of a libcall sequence.
+
+ * stmt.c (expand_function_end): If returning BLKmode, also copy
+ address where value is returned to the place that GDB will
+ expect to see it after the return.
+
+ * c-parse.y (readescape): Warn about hex constant out of range
+ for a target integer.
+ (yylex): Warn about escape out of range for non-wide char or string.
+ Use a buffer of ints to read a wide string.
+
+Sat Nov 19 02:18:02 1988 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
+
+ * Version 1.31 released.
+
+ * sparc.md: Change `K' to `I' in all constraints.
+
+ * loop.c (gen_iv_mult): Handle TARGET==0.
+
+ * c-decl.c (duplicate_decls): Undo last change.
+
+ * c-decl.c (pushdecl): Instead of that change,
+ save old-decl's file/line before calling duplicate_decls,
+ and pass them later to warning_with_file_and_line.
+ * toplev.c (warning_with_file_and_line): New fn.
+
+Fri Nov 18 13:07:06 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stmt.c (fixup_var_refs_1): (SUBREG (MEM)) was slipping through
+ in case where a SET was writing in the variable being fixed.
+
+ * recog.c (register_operand, nonmemory_operand, memory_operand):
+ Changes to handle new var reload_completed: 1 means that
+ (SUBREG (MEM)) now counts as a mem-ref, since alter_subreg
+ will make it one.
+ * toplev.c (rest_of_compilation): Set and clear reload_completed.
+
+ * sparc.md (call patterns): If TARGET_SUN_ASM, and address in reg,
+ output a jmpl rather than a call.
+ * tm-sun4os3.h: Like tm-sparc.h but turn on TARGET_SUN_ASM.
+
+ * reload.c (push_reloads): Reinstate handling of reg_equiv_constant.
+
+Thu Nov 17 09:48:14 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c (constraint_accepts_reg_p): Name changed from
+ constraint_all_regs_p; new arg is reg we are concerned with,
+ and condition tested takes some advantage of that reg.
+
+ * gcc.c (main): Rename var `error' to `error_count' for name conflict.
+
+ * emit-rtl.c (emit_note): Output line #s even if no debug info wanted.
+ (emit_line_note): New fn, does what emit_note did.
+ (emit_line_note_force): New name for emit_note_force.
+ * stmt.c, c-parse.y: Call emit_line_note instead of emit_note.
+
+ * c-parse.y (maybe_type_qual): Call emit_note instead of emit_line_note
+ Now we can find the line # of every `asm' from the RTL.
+ * toplev.c (error_for_asm): New fn, gets line # by searching for NOTE.
+ * reload.c (find_reloads): Use error_for_asm.
+ * reload1.c (choose_reload_targets): Likewise.
+ * final.c (output_operand_lossage): Likewise.
+ Variable this_is_asm_operands is now current insn if it's nonzero.
+
+ * loop.c (move_movables): When a reg is moved, update regno_first_uid
+ and regno_last_uid; say life span includes entire loop.
+ * Decrement THRESHOLD per reg moved, not per insn moved.
+
+Wed Nov 16 08:41:32 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gnulib.c (___builtin_saveregs): New fn, for sparc.
+
+ * tm-sparc.h (GO_IF_LEGITIMATE_ADDRESS): Don't recognize
+ SYMBOL_REFs, except for the constants pool.
+ But do recognize REG+REG and SMALLINT+REG.
+ * sparc.md: New patterns for fetching and storing memory
+ whose address is symbolic and not "legitimate".
+
+ * sparc.md (movsi): Add `f' to op1 constraint.
+ New output clause for result in fp reg.
+ (Floating point fetch patterns): Output sethi insns.
+ (call_value, related patterns): value-register has `register_operand'.
+
+ * output-sparc.c (hardreg): New function.
+ (COMPATIBLE): Clause added for n_regs == 2.
+ (single_insn_src_p): Return 0 for MEM whose address is absolute.
+
+ * tm-genix.h (GO_IF_LEGITIMATE_ADDRESS subroutines):
+ Redefine, to exclude any possibility of SB-referencing addresses.
+
+ * loop.c (strength_reduce): Can't eliminate a biv if used before
+ start of the loop. Used before is same as used after, if contained
+ in another loop.
+
+ * recog.c (asm_noperands, decode_asm_operands):
+ Handle case of no outputs, but some clobbers.
+ * stmt.c (expand_asm_operands): Generate right stuff for that case.
+
+ * tm-sun3.h (CPP_SPEC): Don't define __HAVE_68881__ if using fpa.
+
+Tue Nov 15 00:10:26 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * loop.c (gen_iv_mult): Arg OP0 may not be a constant.
+ Pay attention to return value of expand_mult.
+ (eliminate_biv): Call changed.
+
+ * output-m88k.c, output-sparc.c (output_move_double):
+ Fix typo `optype0' for `optype1'.
+
+ * c-decl.c (duplicate_decls): Don't alter file, line of old decl.
+
+ * c-parse.y (skip_white_space): Don't recognize comments; rely on cpp.
+
+ * rtl.c (rtx_equal_p): Handle vectors.
+
+ * loop.c (scan_loop): Change elts of n_times_set back to positive
+ for candidates that weren't moved, before doing strength reduction.
+
+ * ns32k.md (movdi, movdf): Use `&' constraint for first operand.
+
+ * reload1.c (reload): Initialize spill_indirect_ok here.
+
+ * config-sun4.h: Recognize `-static' switch.
+
+ * global-alloc.c (set_preference): Avoid using nonsense hard reg #s
+ that result from adding OFFSET.
+
+ * sdbout.c (sdbout_end_function): Line # in .ef should be relative.
+
+ * final.c (output_source_line): For SDB, don't output negative #s.
+
+ * tm-encore.h (ASM_OUTPUT_LOCAL): Don't ignore SIZE arg.
+
+Mon Nov 14 11:03:16 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload.c: Don't declare refers_to_regno_p.
+
+ * gcc.c (main): Warn if any input files are for the linker
+ but the linker is not being run.
+
+ * jump.c (sets_cc0_p): Dumb bug fetching elts of a PARALLEL.
+
+ * local-alloc.c: qty_birth, qty_death elements are now -1, not 0,
+ when the value is not known.
+
+ * expmed.c (extract_bit_field): Bug computing xbitpos, xoffset
+ when changing units from bytes to words.
+
+ * loop.c: Rename `times_used' field in `struct movable' to `savings'.
+ (scan_loop): When scanning the consecutive sets, for each libcall,
+ increment `savings'--leave `consec'.
+ When making movable for (SET (REG) 0) which is part of zero-extension,
+ set `savings' to 1 initially, since only 1 insn will be moved.
+ And don't let any other reg force that insn.
+ Reduce initial THRESHOLDs.
+ (move_movables): Don't add `consec' into `savings'
+ since the initial `savings' was proportional to `consec'.
+ Decrement THRESHOLD by 3 (not 2) for each move done.
+
+ * reload1.c (choose_reload_targets): Strip subregs from OLD
+ before writing the output-reload move-insn.
+
+ * reload1.c (reload): counted_for_groups and counted_for_nongroups
+ are now file-scope. Update them both when spilling.
+ (new_spill_reg): No need for counted_for_nongroups as arg.
+ (choose_reload_targets): Don't use for a group
+ any spill regs for which counted_for_nongroups is set.
+
+ * dbxout.c (dbxout_symbol): Indirect-symbol case checked erroneously
+ for PARM_DECL.
+
+Sun Nov 13 08:13:49 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cse.c (fold_rtx): Don't alter MULT by -1 if arg mode != result mode.
+
+ * loop.c (move_movables): If moving a CALL_INSN, make a new CALL_INSN.
+ * emit-rtl.c (emit_call_insn_before): New fn.
+
+ * config-sun4.h (LINK_SPEC): Avoid shared libraries if -g.
+
+ * expr.c (store_one_arg): Stabilize ARG->stack so it doesn't use SP
+ before computing the arg value.
+
+ * combine.c (use_crosses_set_p): Moving a ref to stack ptr
+ is always forbidden if machine has push insns, since might cross one.
+
+ * vax.md (movqi): Avoid out-of-range immed ops in mcomb.
+
+ * expmed.c (extract_bit_field): Don't say `extzv' in the
+ clause for `extv'.
+
+ * emit-rtl.c (copy_rtx_if_shared): Even if a MEM can be shared,
+ unshare its address from everything outside that MEM.
+
+ * expr.c (expand_builtin): Fix omitted arg to `convert_to_mode'.
+
+ * expr.c (store_expr): In case where will not return TARGET
+ and must do type conversion, don't fail to store into TARGET.
+
+ * dbxout.c (FORCE_TEXT): New macro used before output `.stabs'
+ to go to the text section on targets that require it.
+ (DEBUG_SYMS_TEXT): Target macro which turns on that feature.
+
+ * reload1.c (reload): Index in spill_regs was wrong
+ when checking counted_for_groups.
+ (choose_reload_targets): When calling find_equiv_reg looking for
+ a reload reg, reject all spill regs, even those not in use now.
+
+ * tm-sun386.h, tm-sun386i.h, config-sun386i.h: New files.
+
+ * cccp.c (main): Don't die if no output file arg given.
+
+ * fixincludes: Tell `find' to find only ordinary files.
+
+ * config.gcc: If symlink fails, make a hard link.
+
+Sat Nov 12 20:43:20 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Makefile (gnulib): Use cp to make the temporary .c files;
+ less likely to fail than ln.
+
+Sat Nov 5 12:46:39 1988 Randall Smith (randy at sugar-bombs.ai.mit.edu)
+
+ * tm-m68k.h (HARD_REGNO_MODE_OK): Disallowed d7:a0 as an allowable
+ pair of registers to hold a double value. This is correct for the
+ fpa but incorrect for the 68881. It was, however, simpler than
+ defining a new regclass.
+
+Tue Oct 25 12:03:49 1988 Randall Smith (randy at gluteus.ai.mit.edu)
+
+ * m68k.md: Added some thoughts (comments) on best method to allow
+ 68881 code with fpa code.
+
+Thu Oct 13 14:19:17 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Version 1.30 released.
+
+ * stupid.c (stupid_life_analysis): Init last_call_suid with
+ largest possible value, not 0.
+
+Wed Oct 12 04:40:18 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * output-i386.c (output_asm_insn_double_reg_op): Compensate for
+ assembler bug that interchanges fsub and fsubr.
+
+ * reload1.c (order_regs_for_reload): Undo 29 Sept change.
+ It breaks the 386.
+
+ * varasm.c (decode_rtx_const): Don't example value->addr
+ if what was stored in was value->d.
+
+ * toplev.c (set_float_handler): New fn, specify where to jump
+ on floating exception signal.
+ * fold-const.c (combine): Use that to handle overflow in arithmetic.
+
+ * c-decl.c (grokdeclarator): Don't clear CONSTP, VOLATILEP
+ when making an array type.
+
+ * dbxout.c (dbxout_symbol): Ignore VAR_DECLs in memory whose
+ addresses we can't represent.
+
+ * fold-const.c (fold): don't convert >= to > if both args are constant.
+ When converting >= to >, don't fail to change CODE.
+
+Tue Oct 11 04:13:40 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * vax.md (movhi): Error in truncating mcomw, addh3 args to 16 bits.
+
+ * final.c: Better error checking for %-specs in templates.
+ (output_operand_lossage): new fn to report errors.
+ (insn_noperands): new var: # operands in current fn.
+ (this_insn_asm_operands): new var: 1 for `asm', 0 otherwise.
+ (output_asm_insn): Check for operand # out of range.
+ (output_asm_label, output_operand): Call new fn to report errors.
+
+ * reload.c (push_reloads): An input reload for (REG N) can match one
+ for (POST_INC (REG N)) or (PRE_INC (REG N)), since the value
+ reloaded is the same in any case.
+
+Mon Oct 10 06:19:05 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * recog.c (next_insns_test_no_inequality): Like next_insn_tests...
+ but check all insns that follow this one and can use it's cc's.
+ * output-m68k.c (output_btst): Use that.
+
+ * vax.md (movsf, movdf): Undo last change; movq/movl set the cc wrong.
+
+ * expr.c (expand_call): Set current_function_calls_setjmp if appro.
+ * stmt.c (setjmp_protect): New fn: move all vars into stack
+ unless declared `register'.
+ * c-decl.c (finish_function): Call it if -traditional and setjmp used.
+
+ * cccp.c (main): Open output after the input.
+ Handle `-o -'.
+
+Sun Oct 9 00:28:06 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-sun3.h (CPP_SPEC): Define __HAVE_FPA__ if appropriate.
+
+ * c-decl.c (pushdecl): After duplicate_decls, maybe warn about
+ "declared extern and later static".
+
+ * expmed.c (store_bit_field): In insv case, avoid turning
+ VALUE into a subreg of a subreg.
+
+ * loop.c (move_movables): When moving a libcall,
+ un-cse the function address; put it into the call insn.
+
+Sat Oct 8 01:48:03 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cse.c (equiv_constant): Subroutine to find the constant equivalent
+ of a reg. Now handles SUBREGs too.
+ (fold_rtx, fold_cc0): Use that function.
+ Don't handle SUBREGs like arithmetic.
+
+ * reload1.c (choose_reload_targets): Don't call reg_overlap_mentioned_p
+ if arg is 0.
+
+Fri Oct 7 01:00:19 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * assert.h: Typo declaring __eprintf.
+
+ * config.gcc: New file for making the links.
+ Fixed bugs for sun-[23]-os4. Added sun-[234] for sunos 3.
+ Added sequent-i386.
+
+ * emit-rtl.c (gen_rtx): Return const0_rtx for 0 in DImode.
+ * varasm.c (immed_double_const): Don't be confused by this.
+
+ * expmed.c (negate_rtx): New 1st arg MODE.
+ * expr.c (push_block): Calls changed.
+ * m68k.md, ns32k.md, vax.md: Calls changed.
+
+ * c-decl.c (duplicate_decls): Don't discard DECL_BLOCK_SYMTAB_ADDRESS.
+
+ * tree.c (staticp): INDIRECT_REF with constant address is static.
+ COMPONENT_REF may not be, if component offset isn't constant.
+
+ * c-typeck.c (default_conversion): Converting array to ptr, if array
+ isn't a VAR_DECL, go through build_unary_op so that COMPONENT_REFs
+ will be simplified away.
+
+ * ns32k.md (tbitd patterns): op 0 constraint: reject constants.
+ * ns32k.md (extzv for SImode and HImode):
+ Use adj_offsetable_operand; plus_constant was the wrong thing.
+
+Thu Oct 6 00:10:41 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Version 1.29 released.
+
+ * loop.c (scan_loop): Don't think a `return' insn enters the loop.
+
+ * ns32k.md (ashrsi3, etc): New define_expands for right shift.
+
+ * reload1.c (choose_reload_targets): Change in the `force_group'
+ logic to avoid crashes.
+
+Wed Oct 5 04:09:19 1988 Richard Stallman (rms at corn-chex.ai.mit.edu)
+
+ * expr.c (expand_expr, MINUS_EXPR): When negating integer op1,
+ truncate it to its mode.
+
+ * expmed.c (extract_bit_field): SUBREG error check was wrong;
+ SImode SUBREGs are possible and ok in extzv, extv.
+
+ * tm-ns32k.h (REGISTER_NAMES): Had two excess elements; deleted.
+
+Mon Oct 3 01:15:51 1988 Richard Stallman (rms at corn-chex.ai.mit.edu)
+
+ * toplev.c (main, compile_file): If no files spec'd, use stdin, stdout.
+
+ * flow.c (propagate_block): When checking for stack-adjust insns,
+ exclude non-SET patterns.
+
+ * jump.c (jump_optimize): When changing jump=>return to return,
+ must rerecognize the insn.
+
+ * toplev.c (compile_file): Allow `-' for main input or output filename.
+
+Sun Oct 2 10:30:09 1988 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
+
+ * final.c (final): NOTICE_UPDATE_CC has extra arg, INSN.
+ * tm-*.h: Change definitions.
+
+ * stmt.c (optimize_bit_field): Use gen_lowpart to make subregs.
+
+ * stmt.c (assign_parms): Don't obey regdecls in inline function.
+ Don't lose existing REG_NOTES when adding one.
+
+ * stmt.c (expand_function_start): Make return rtx before
+ marking parms live.
+ (expand_function_end): Use use_variable to emit USEs for SAVE_EXPRs.
+
+ * stmt.c (expand_return): Handle TRUTH_AND_EXPR like ANDIF; OR also.
+
+ * stmt.c (expand_end_stmt_expr): Always set TREE_VOLATILE,
+ sometimes TREE_THIS_VOLATILE.
+
+ * jump.c (delete_insn): When finding PREV, skip deleted insns.
+
+ * varasm.c (output_constant): WORDS_BIG_ENDIAN test was backwards.
+
+ * emit-rtl.c (gen_lowpart): Allow MODE > 1 word if X is same size.
+
+ * final.c (final): Don't delete no-op moves (jump did it if appro.).
+
+ * final.c: Support prescan pass.
+ (final_start_function): init_recog and CC_STATUS_INIT mvd to `final'.
+ (final): New arg PRESCAN. Do no output if prescanning.
+ Don't alter conditionals if PRESCAN < 0 (prescan already done).
+ If jump becomes no-op, change it to a NOTE.
+ Remember to free the temp space for ASM_OPERANDS.
+
+ * final.c (final): Altering store-flag must check STORE_FLAG_VALUE.
+ Don't try to do it if that isn't defined.
+ Don't try it if condition doesn't test CC0.
+ (alter_cond): No need to check COND != 0.
+ Handle CC_Z_IN_NOT_N and CC_Z_IN_N.
+ (m68k.md): Delete code that handled CC_Z_IN_NOT_N.
+
+ * conditions.h: New flag CC_Z_IN_N.
+ * tm-*.h: Renumber all CC_... flags to make room.
+
+ * combine.c (use_crosses_set_p): Loop start was 1 off.
+
+ * local-alloc.c (reg_is_set): When a reg is CLOBBERed and dies in
+ one insn, make it live immediately before and after that insn.
+
+ * global-alloc.c: Hard reg preferences for global pseudos.
+ Var allocno_preferred_reg deleted; new vars hard_reg_preferences
+ and regs_someone_prefers.
+ (global_alloc): Init those vars. Pass hard_reg_preferences elt
+ to find_reg.
+ (set_preference): New function makes entries in those vars.
+ (global_conflicts): new arg to mark_reg_store. Call set_preference.
+ (find_reg): Last arg now a preferred hard_reg_set.
+ Scan that set first of all.
+ (mark_reg_store): New arg is offset for renumbered regno.
+ But the code to use it is turned off.
+
+ * global_alloc (check_frame_pointer_required): Handle reg_equiv_address
+ like reg_equiv_mem. Don't try to allocate pseudos with equiv mems
+ that don't use the frame pointer.
+ * reload1.c (reload): Call changed.
+
+ * jump.c (sets_cc0_p): Tests whether rtx sets cc0, and whether
+ it does nothing but set cc0.
+ (find_cross_jump, delete_jump): Use that fn for these tests.
+ * loop.c (loop_skip_over): Likewise.
+ * reload.c (push_reload): Likewise.
+
+ * genoutput.c: Output `const' before the data arrays.
+ Define it as nothing if not __STDC__.
+
+Sat Oct 1 02:19:29 1988 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
+
+ * expr.c (store_one_arg): 3rd arg to emit_block_move is in bytes.
+
+ * cse.c (fold_rtx): Handling ZERO_EXTEND or SIGN_EXTEND of constant,
+ if the arg width is too wide to handle, return safely.
+
+ * combine.c (FAKE_EXTEND_SAFE_P): Don't allow extend to > 1 word.
+
+ * rtl.c (refers_to_regno_p): Moved from reload.c. Not static.
+ (reg_overlap_mentioned_p): New function, calls the above.
+ * output-*.c: Use that instead of reg_mentioned_p.
+ * tm-*.h (NOTICE_UPDATE_CC): Likewise.
+ * reload.c (push_reload, combine_reloads): Likewise.
+ * reload1.c (choose_reload_targets): Use it to check earlyclobbers.
+
+ * reload1.c (choose_reload_targets): Elimination of previous
+ output-reload feeding our input now limited to pseudo-regs.
+
+ * flow.c (life_analysis): Delete any insn copying reg to itself.
+ (propagate_block): Move update of OLD after special life and death
+ for CALL_INSNs.
+
+ * vax.md (ashrsi3, ashrdi3, rotrsi3): define_expands to negate
+ the shift count.
+ * expmed.c (expand_shift): Eliminate negate-the-shift-count feature.
+
+ * vax.md (and*i3): define_expands which use complement and bit-clear.
+ * expmed.c (expand_bit_and): Eliminate feature to do that.
+ This function could be eliminated.
+
+ * expmed.c (store_bit_field): Handle nested subregs.
+ Allow gen_insv to fail; if it does, delete what we did and then
+ use store_fixed_bit_field.
+ (store_fixed_bit_field): Use gen_lowpart to make SUBREGs.
+ Do that for SUBREGs just as for REGs.
+ Error check OFFSET must be 0 for REGs.
+ (store_split_bit_field): Error check OP0 is a SUBREG when expected.
+ (extract_bit_field): Allow gen_ext{,z}v to fail.
+ Use gen_lowpart to make subregs.
+ (expand_shift): If a try fails, delete any insns it made.
+
+ * expmed.c (expand_mult): Use expand_unop to negate.
+ When adding 2 powers of 2, do serial shifts, not parallel.
+ Handle absval==1 like other powers of 2.
+
+ * explow.c (force_reg): Don't lose any existing reg notes.
+
+ * stmt.c (expand_start_stmt_expr): Eliminate return value.
+ (expand_end_stmt_expr): No need for argument.
+ * c-parse.y (primary): Change calls.
+
+Fri Sep 30 01:50:22 1988 Richard Stallman (rms at corn-chex.ai.mit.edu)
+
+ * integrate.c (copy_rtx_and_substitute, copy_address):
+ 'u' case erroneously returned the translated single element.
+ (copy_address): Special cases for frame-ptr and sums containing it.
+ MEM and LABEL_REF cases passed wrong arg to copy_rtx_and_substitute.
+ (copy_rtx_and_substitute): adjust mode of inline_target for context.
+
+ * jump.c (true_regnum): For SUBREG of pseudo, use pseudo's # unchanged.
+
+Thu Sep 29 02:50:46 1988 Richard Stallman (rms at corn-chex.ai.mit.edu)
+
+ * i386.md (movsi, mov{q,h}i): Use find_reg_note to look for REG_WAS_0.
+ * vax.md (movsi, movhi): Likewise.
+
+ * varasm.c (decode_rtx_const): Was setting un.addr.base wrong
+ for a CONST. Should be symbol name, not the SYMBOL_REF.
+
+ * rtl.c (rtx_equal_p): When comparing registers, check
+ REG_FUNCTION_VALUE_P. If there are `u'-slots in the rtx, ignore them.
+
+ * rtl.c (reg_mentioned_p): Some rtx types were mistakenly treated
+ as uniquified (various constants).
+
+ * rtl.c (read_rtx): Element type 'S' is string that may be omitted.
+ * rtl.def (define_insn, define_peephole): Add a last element, type 'S'.
+ * genoutput.c: Collect these optional last elements and output as
+ array `insn_machine_info' of structs `INSN_MACHINE_INFO'.
+ The last must be defined as a macro.
+ * recog.h (insn_machine_info): Declare it if appropriate.
+
+ * regclass.c (record_address_regs): In PLUS case, look inside SUBREGs.
+
+ * reload1.c (reload): Use reg_equiv_address for REG_EQUIVs with
+ invalid memory addresses.
+ When changing pseudos to mem refs at end, do FIX_FRAME_POINTER_ADDRESS
+ on their addresses.
+ (alter_reg): Check that with reg_equiv_mem.
+ (spill_hard_reg): If fp reg, spill regardless of basic_block_needs.
+
+ * reload1.c (order_regs_for_reload): Don't put invalid regs into
+ potential_reload_regs at all. (They used to go at the end.)
+
+ * reload.c (find_reloads): Store all earlyclobber operand in
+ reload_earlyclobbers (# in n_earlyclobbers):
+ * reload1.c (choose_reload_targets): Don't use value of find_equiv_reg
+ if it matches an earlyclobber operand.
+
+ * reload.c (find_reloads_address for REG):
+ No need for explicitly excluding hard regs in these tests.
+ (find_reloads, find_reloads_address_1 for REG): likewise.
+
+ * reload.c (push_reload): Code testing reg_equiv_constant should
+ be obsolete; add error check to verify this.
+
+ * reload.c (hard_reg_set_here_p): Handle CLOBBERs, SUBREGs, overlap.
+ (refers_to_regno_p): Handle CLOBBERS. Handle overlap.
+ New arg ENDREGNO specs end of range to check for;
+ all callers changed (all in this file).
+
+ * reload.c (find_reloads): SUBREG like REG in alternate recovery
+ for earlyclobber conflict.
+ The operands to unswap are those that are supposed to commute.
+ When operands match, copy the regclass of earlier one for later one.
+
+ * stmt.c (optimize_bit_field): Don't use gen_extend_insn;
+ use convert_move, then reorder the insns.
+ * optabs.c (gen_extend_insn): Deleted.
+
+ * optabs.c (emit_cmp_insn): Don't emit queue before recursion.
+ Don't convert size to SImode for cmpstrqi.
+
+ * optabs.c (expand_binop): Keep any old REG_NOTES when adding them.
+ Always delete_insns_since if returning failure.
+ (expand_unop, emit_unop_insn): Keep any old REG_NOTES when adding them.
+ * spur.md (movhi): likewise.
+
+ * RTL_EXPR_SEQUENCE is now a chain of insns, not a SEQUENCE.
+ * emit-rtl.c (emit_insns): New fn, emit a chain of insns.
+ * expr.c (expand_expr): Use that.
+ Also put const0_rtx in the RTL_EXPR_SEQUENCE (mark RTL_EXPR as output).
+ * stmt.c (expand_end_stmt_expr): Use get_insns to get the chain.
+
+ * stmt.c (expand_end_stmt_expr): Put the RTL_EXPR on rtl_expr_chain.
+ (fixup_var_refs): Scan all waiting RTL_EXPRs not yet output.
+ Also scan all stacked sequences on sequence_stack.
+
+ * genemit.c (gen_expand): Generate calls to {start,end}_sequence.
+ Use `emit' to handle a PARALLEL.
+ (FAIL, DONE): Change to fit gen_expand changes.
+
+ * emit-rtl.c (change_address): abort if arg isn't a MEM.
+
+ * emit-rtl.c: Sequences work now by saving and restoring first_insn
+ and last_insn. So these variables are used even when in a sequence.
+ emit_to_sequence has been deleted.
+ (start_sequence, end_sequence): Save and restore first_insn, last_insn.
+ (get_last_insn, add_insn): Sequences no longer need special treatment.
+ (delete_insns_since, reorder_insns): likewise.
+ (push_to_sequence): Set up to emit to a given existing insn chain.
+
+ * emit-rtl.c (copy_rtx_if_shared): Don't copy INSNs.
+ Insert missing return stmt in MEM case (for MEMs ok to share).
+ (unshare_all_rtx): Now can copy the REG_NOTES simply.
+ Copy the LOG_LINKS too.
+
+ * emit-rtl.c (make_safe_from): Treat SUBREG as X like a REG.
+ (delete_insns_since): Don't lose if FROM is the first insn.
+ (emit): Declare void, since no useful value.
+ Call simplejump_p properly.
+ (restore_reg_data_1): When a reg is an address, do mark_reg_pointer.
+
+ * dbxout.c (dbxout_types): Call dbxout_symbol to do the work.
+ (dbxout_type_def): Deleted.
+ (dbxout_symbol): Set TREE_ASM_WRITTEN when a TYPE_DECL is output.
+ Don't output the same one twice.
+
+ * cse.c (fold_cc0): LABEL_REF is not zero.
+
+ * cse.c (cse_insn): Don't insert src, dest if they are the same place.
+
+ * cse.c (lookup_as_function): Return entire rtx, not just operand.
+ (cse_insn): Caller changed. Also, copy the result before inserting it.
+
+ * cse.c (fold_rtx): Put constant arg last if commutative op.
+ Handle idempotents and identities for mult, div, booleans, shifts.
+
+ * cse.c (canon_hash): Parens were missing around shifts in "rotates".
+
+ * c-convert.c (convert_to_integer): Truncate TRUTH_ANDIF_EXPR
+ like TRUTH_AND_EXPR; OR also.
+
+ * c-typeck.c (build_binary_op_nodefault): Do truthvalue_conversion
+ for TRUTH_ANDIF, etc.
+ (build_unary_op): More simplifications for TRUTH_NOT_EXPR;
+ uses new fn `invert_truthvalue'.
+
+ * recog.c (reg_fits_class_p): New name for reg_renumbered_fits_class_p
+ since it no longer needs to renumber. Also it now really assumes
+ arg is a REG. Callers changed.
+ * reload.c: Callers changed.
+
+ * recog.c (general_operand): (SUBREG (MEM...)) need not alter mode.
+ (register_operand, nonmemory_operand): (SUBREG (MEM...)) is allowed.
+ (memory_operand): (SUBREG (MEM...)) is *not* allowed.
+ (mode_independent_operand): Operand names were backwards!
+ (No change in effect of this function.)
+
+ * print-tree.c (dump): Some expr nodes contain rtx's. Print as rtx's.
+
+Wed Sep 28 18:51:12 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c (choose_reload_targets): If a reload wanted a group,
+ don't allow a single register for it.
+
+Tue Sep 27 11:43:56 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * final.c (output_addr_const): Handle DImode CONST_DOUBLEs.
+ * tm-*.h (PRINT_OPERAND): Treat DImode CONST_DOUBLE like a CONST_INT.
+
+ * vax.md (rotldi3): Insn deleted; it doesn't really exist.
+
+ * toplev.c (report_error_function): Also mention the file name,
+ for parallel makes. New arg FILE; all callers changed.
+
+Mon Sep 26 15:44:18 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expmed.c (expand_shift): When using extzv, convert OP1 to SImode.
+ * c-typeck.c (build_binary_op_nodefault): Convert shift-count
+ to int regardless of result type.
+
+ * output-spur.c (output_move_double): Fix typo, optype0=>optype1.
+
+ * expr.c (expand_call): Avoid null deref on result of FUNCTION_ARG.
+
+ * tm-i386.h (FUNCTION_PROFILER): Use correct assembler syntax.
+
+Sun Sep 25 12:13:56 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * fixincludes: Handle some files in netdnet, netdna, vaxif, vaxuba.
+
+ * reload.c (find_reloads): Make no optional reloads if not -O.
+
+ * loop.c (strength_reduce): Can't eliminate a biv if it's used
+ to compute a DEST_ADDR giv. Only DEST_REG givs are safe.
+
+ * loop.c (general_induction_var): Shift & divide ops are linear
+ only in 1st operand; don't look for biv or giv in 2nd operand.
+
+ * vax.md (fix_truncdfqi2): Use `%#'.
+
+Sat Sep 24 00:25:48 1988 Richard Stallman (rms at gluteus.ai.mit.edu)
+
+ * loop.c (n_times_set, n_times_used): Now file-scope;
+ no longer passed as args to several functions.
+
+ * loop.c (basic_induction_var): Accept reg as source value
+ only if it's invariant.
+ (strength_reduce): Benefit calculation and threshold changed.
+ Check reducibility of givs before trying to reduce them.
+ Check eliminability of biv before considering the givs;
+ let this affect the threshold.
+ (record_giv): New subroutine adds a giv to the chain.
+
+ * ns32k.md (incrementing sp): Use cmpd insns to increment by 4 or 8.
+
+ * integrate.c (expand_inline_function): Rename return_label
+ to local_return_label; avoid shadowing.
+
+Fri Sep 23 13:57:52 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * loop.c (loop_skip_over): Put the new label after the note that ends
+ the loop.
+
+ * loop.c: New function strength_reduce and subroutines.
+ * toplev.c: New var flag_strength_reduce, set from -fstrength-reduce.
+
+ * vax.md (sob insns): They were broken, with plus in one place
+ and minus in another. Use plus consistently.
+
+ * rtl.h (REG_LIBCALL, REG_NONNEG): Two new kinds of reg-note.
+ * optabs.c (expand_binop, expand_unop): Make REG_LIBCALL notes.
+ * loop.c (scan_loop, move_movables): Move entire library calls.
+ Use m->set_src to get the expression, in case it's from a REG_EQUAL.
+ (consec_sets_invariant_p): Likewise.
+
+ * loop.c (scan_loop): Start scan from loop_top, if entry is rearranged.
+ Watch out for pseudo regs created by strength_reduce;
+ they can't index regno_last_uid.
+ (replace_regs): # regs mapped is now an arg.
+
+ * loop.c (count_loop_regs_set): Don't increment n_times_set past 127.
+ (consec_sets_invariant_p): Reject if N_SETS arg is 127.
+
+ * toplev.c (rest_of_compilation): NREGS arg of loop_optimize deleted.
+
+ * c-decl.c (store_parm_decls): Anything but an IDENTIFIER_NODE
+ in SPECPARMS indicates a parmlist, not an identifier list.
+ (get_parm_info): Use only PARM_DECLs when making the list of arg types.
+
+ * combine.c (try_distrib): Boolean ops can't distribute through PLUS.
+ MULT can distribute through PLUS and only PLUS.
+
+Thu Sep 22 15:57:41 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * jump.c (jump_optimize): uncond jump to a return becomes a return.
+
+ * integrate.c (copy_parm_decls, copy_decl_tree): Set TREE_USED.
+ Avoid inevitable "unused" warning for these decls.
+
+ * c-typeck.c (comptypes): When comparing array types,
+ ignore qualifiers of element type.
+
+ * tm-*.h (ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP): Define new macros.
+ * final.c (final_start_function): Use them to protect around
+ the call to the profiling function.
+ * stmt.c (expand_function_start): Set current_function_needs_context
+ and current_function_returns_struct.
+
+ * stmt.c (expand_null_return_1): If clear_pending_stack_adjust
+ doesn't clear it, do the adjust now.
+ * expr.c (clear_pending_stack_adjust): No-op if -finline-functions.
+
+ * cccp.c (macarg1, skip_if_group): Backslash makes next char ordinary.
+
+ * reload.c (find_reloads): Delete code to look for an equiv reg
+ for a reg being input-reloaded. This isn't safe.
+ * reload1.c (choose_reload_targets): Do it here.
+
+Wed Sep 21 00:36:22 1988 Richard Stallman (rms at hobbes.ai.mit.edu)
+
+ * tm-sun3.h (CPP_SPEC): Define it based on TARGET_DEFAULT.
+ (STARTFILE_SPEC): Likewise.
+
+ * reload1.c (choose_reload_targets): When redirecting prev insn
+ into this insn's reload-reg, check this doesn't break the prev insn
+ by giving it a reg it can't accept. Use new fn constraint_all_regs_p.
+
+ * tm-sparc.h (ASM_OUTPUT_LOCAL): Use .reserve, not .common.
+
+ * tree.h (TREE_USED): New attribute macro.
+ * c-parse.y (primary): Set TREE_USED in ..._DECL nodes.
+ * toplev.c, flags.h: Define and set warn_unused.
+ * stmt.c (expand_end_bindings): Warn if any var is unused.
+ * print-tree.c (prtypeinfo): Print this attribute.
+
+Tue Sep 20 15:29:01 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * assert.h: `assert' must expand to an expression.
+ Error message should show arg before expansion, not after.
+
+ * c-decl.c (implicitly_declare): Make decl perm if !warn_implicit
+ since start_function needs to look inside it in that case.
+
+ * toplev.c (announce_function): If we don't print, don't record we did.
+
+Mon Sep 19 15:21:11 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-parse.y (structsp): If pedantic, warn if comma at end of enumlist.
+
+ * reload.c (find_reloads): Check insn_code_number >= 0 when
+ looking in insn_operand_strict_low.
+
+ * tm-sun[23].h (CPP_SPEC): Rename __HAVE_FPU__ to __HAVE_68881__
+ and put a space after that option.
+
+Sun Sep 18 01:12:56 1988 Richard Stallman (rms at hobbes.ai.mit.edu)
+
+ * reload.c (find_reloads): Make optional reloads for explicit MEMs.
+
+ * tm-m68k.h (MODES_TIEABLE_P): If no 68881, can tie fixed to floating.
+ * m68k.md (movdi): Allow F's (can be DImode now).
+ Don't allow f-regs (experiment). Don't preference x-regs.
+ (DImode push): Allow y-regs.
+ (DFmode push): Allow y-regs, not x-regs.
+
+ * reload1.c (modes_equiv_for_class_p): New function.
+ (reload): Compare multiple modes for reg group with that function.
+ Allows differing modes in some cases when not tieable.
+
+ * c-parse.y (check_newline): Let ASM_OUTPUT_IDENT override .ident.
+ * tm-3b1.h (ASM_OUTPUT_IDENT): Define this as no-op.
+
+ * emit-rtl.c (reorder_insns): Update sequence_{first,last}_insn if nec.
+ (get_last_insn): If in a sequence, return last insn of sequence.
+ (delete_insns_since): If in a sequence, set sequence_last_insn.
+
+ * spur.md (CONST_DOUBLE load insn): Use & for most dests.
+ (cond branches): pass additional args to output_compare.
+ (movdf, movdi): Use & loading reg from mem.
+ (trunc*): Enable these.
+ (add): New pattern for adding large immediate operand.
+ (shifts): A define_expand for each kind of shift,
+ plus a recognizer which outputs repeated insns if necessary.
+ (call*): Use r9 as temp, not r2.
+
+ * output-spur.c (output_compare): New args NEG_{EXCHANGE_,}OPCODE.
+ (singlemove_string): Handle reg as operand 1.
+ (output_add_large_offset): Fake add insn with large immediate arg.
+ (big_immediate_operand): Match such an arg.
+
+ * tm-spur.h (FUNCTION_PROLOGUE): Align the stack pointer.
+ Handle bigger frames.
+ (TARGET_LONG_JUMP, TARGET_EXPAND_SHIFT): New target flags.
+
+ * va-spur.h: Track position in regs and stack separately.
+
+ * c-decl.c (duplicate_decls): Warn if prototype follows
+ non-prototype definition.
+
+Sat Sep 17 14:30:23 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (expand_builtin): Avoid crash if arg isn't integer type.
+
+ * c-decl.c (duplicate_decls): Just warn if redeclaring a builtin,
+ and leave it built in unless it is redefined.
+
+ * vax.md (ashlsi3): Use addl3, moval or movad when useful.
+ (addsi3): Avoid pushab, movab for constants < 64.
+ Do use movab when > 64 when operands match.
+ (mov*i): Use mcom* rather than mneg*.
+ Use add*3 with two quick immediate args when useful.
+ (movhi): Don't use movzbw or cvtbw; said to be slow.
+
+ * rtl.h: New macros MEM_VOLATILE_P, MEM_IN_STRUCT_P,
+ INSN_DELETED_P, REG_USER_VAR_P, RTX_UNCHANGING_P, RTX_INTEGRATED_P,
+ CONSTANT_POOL_ADDRESS_P.
+ Most places changed to use them.
+
+Fri Sep 16 11:50:15 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * jump.c (jump_optimize): Was testing volatil on non-MEMs erroneously
+ when looking for no-op move insns.
+
+ * cccp.c (handle_directive): Ignore comments between # and directive.
+
+ * integrate.c (copy_rtx_and_substitute): Stack-push memrefs need
+ to be copied.
+
+ * tm-bsd386.h (ASM_OUTPUT_DOUBLE): Undef previous def.
+
+ * reload1.c (alter_reg): Don't reuse spill_stack_slot
+ if it isn't big enough for this reg's mode.
+
+ * expr.c (emit_move_insn): After force_const_mem, ensure
+ mem address is valid.
+ (move_block_to_reg, move_block_from_reg): Likewise.
+
+ * expr.c (expand_call): Spurious TREE_VALUE on args[i].tree_value.
+
+ * m68k.md (zero_extend*): Require register_operand for operand 0.
+
+ * stdarg.h (va_start): Alternate defn for sparc.
+
+Thu Sep 15 11:39:06 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-parse.y (yylex): When atof gives ERANGE, check for "0.0", etc.
+
+ * assert.h (__assert): Alternative definition for -traditional.
+
+ * output-sparc.c (output_block_move): Initialize xoperands.
+
+ * combine.c (try_combine): Never subst for a reg that is incremented.
+
+ * m68k.md (cmpm pattern): Make the match_operands match memrefs
+ and check that they are pushes in the extra condition.
+ This makes reloading handle the pushes properly.
+
+ * expr.c (MOVE_RATIO): Make it 15. Allow overriding it.
+
+Wed Sep 14 09:50:08 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (build_enumerator): Use saveable_tree_cons.
+
+ * vax.md (movdf): Use movq when safe.
+
+ * Version 1.28 released.
+
+ * tm-sparc.h (FIRST_PARM_CALLER_OFFSET): Defined.
+
+Tue Sep 13 00:11:37 1988 Richard Stallman (rms at corn-chex.ai.mit.edu)
+
+ * tree.c (saveable_tree_cons): New function.
+ * c-decl.c (pushtag): Use it; lists of tags needed for inlining.
+ (get_parm_info): Likewise.
+
+ * print-tree.c (dump): Handle each kind of statement node individually.
+
+ * integrate.c (copy_decl_tree): Don't pass DECL_RTL through
+ copy_rtx_and_substitute if it's a memref with constant address.
+
+ * sdbout.c (sdbout_symbol): Don't output garbage when DECL_RTL
+ has a form we don't understand.
+
+ * reload.c (find_reloads_address_1): Don't reload an autoincrement
+ if it has a suitable hard reg already.
+
+ * c-typeck.c (process_init_constructor): Error check after digest_init.
+
+ * c-parse.y (is_reserved_word): Now static.
+
+Mon Sep 12 19:19:28 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * i386.md (all push insns): Use `<' for the constraint,
+ since a push_operand won't fit an `m' constraint on this machine.
+
+ * expr.c (expand_call): If fn name is `__builtin_alloca',
+ it may be alloca. This case arises if the user redeclares
+ `__builtin_alloca'.
+
+Sun Sep 11 01:47:01 1988 Richard Stallman (rms at gluteus.ai.mit.edu)
+
+ * Eliminate MAX_SETS_PER_INSN.
+ * cse.c (cse_insn): Combine all the tables and dynamically allocate.
+ (cse_main): Count the actual number of SETs; don't estimate.
+ * genconfig.c: Don't calculate MAX_SETS_PER_INSN.
+ * stmt.c (expand_asm_operands): No limit on # of output operands.
+
+ * expr.c (expand_call):
+ Store all non-reg parms first, then store all partially-in-reg
+ parms, then all the (precomputed) wholly-in-reg parms.
+ Special hair for BLKmode parms which must be passed entirely
+ in memory; also for BLKmode parms initialized from function calls,
+ for which it is best to allocate the space before computing value.
+ Use macro FIRST_PARM_CALLER_OFFSET to handle machines where reg
+ parms "take up space" on the stack below the stack pointer.
+ (store_one_arg): Handle case of preallocated stack loc for BLKmode.
+ Update current_args_size here, not in caller.
+
+Sat Sep 10 19:58:03 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * output-sparc.c (output_scc_insn): Changed asm templates.
+ Use common code to emit the move insns and label at the end of fn.
+ (output_mul_by_constant): Use %g1 as temporary reg.
+
+ * sparc.md (indexed load pattern): Deleted.
+ (fix_truncdfsi2): Don't ignore value of output_fp_move_double.
+ (cse'd multiply): Operand 1 predicate is general_operand.
+ (return peepholes): Conditionalize on ! TARGET_EPILOGUE.
+
+ * tm-sparc.h (INIT_CUMULATIVE_ARGS,FUNCTION_ARG...):
+ Use partial regs for args that start in regs but won't entirely fit.
+
+ * tm-sparc.h (CONST_COSTS): 0 for args that can be immediate.
+ (STRUCTURE_SIZE_BOUNDARY): Now 8.
+ (STRUCT_VALUE_OFFSET): Defined as symbolic name for `64'.
+
+ * expr.c (struct arg_data): New component `stack' says where in the
+ stack to put a BLKmode arg (if it's nonzero).
+ (store_one_arg): Handle case where it's nonzero.
+ (target_for_arg): New fn, precompute stack locn for BLKmode arg.
+
+Fri Sep 9 01:41:13 1988 Richard Stallman (rms at corn-chex.ai.mit.edu)
+
+ * cse.c (fold_rtx): Misnested ifs screwed SUBREG case.
+
+ * reload.c (find_reloads_toplev): Special case for (SUBREG REG)
+ where REG is equivalent to a CONST_INT.
+ (find_reloads): Don't ignore the value returned by find_reloads_toplev.
+ Treat a (SUBREG constant) like a (SUBREG MEM): set force_reload.
+
+ * reload.c (push_reload): Abort if memory subreg is not
+ paradoxical; the MEM mode should be narrower than the SUBREG.
+
+ * stmt.c (fixup_var_ref_1): Fixup memory subregs in an insn
+ copying VAR to or from a register.
+
+ * m68k.md (movdi, movdf): the x-reg constraint accidentally allowed
+ moving rm to rm with no &.
+
+ * vax.md (call_value): Typo.
+
+ * expr.c (emit_block_move, emit_push_insn): prefer movstrqi to movstrsi
+
+ * m68k.md (FPA multiply): bad opcodes for 3-operand multiply insns.
+
+Thu Sep 8 18:22:14 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-parse.y: Use YYERROR instead of synonym YYFAIL.
+ BISON VERSIONS PRIOR TO THIS DATE WON'T WORK!
+
+ * c-typeck.c (digest_init): Use TYPE_MAIN_VARIANT of array elt type.
+
+ * tm-sun[23].h (CPP_SPEC, ASM_SPEC): Let -m(c|)680[12]0 control
+ options for CPP and assembler.
+
+Wed Sep 7 13:44:59 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * New handling of reloading of PRE_DEC, etc.
+ Now reload_in is the PRE_DEC, etc, and reload_inc is always positive.
+ * reload.c (push_reloads): Old code to set reload_inc deleted.
+ (find_reloads_address_1): Call push_reload the new way.
+ (find_inc_amount): Value always positive.
+ * reload1.c (choose_reload_targets): Detect this case.
+ (inc_for_reload): New fn; does the real work for this case.
+ * m68k.md (call, call_value): Fn address must be offsetable.
+
+ * combine.c (try_distrib): Reject strange cases such as if
+ result of PREV1 or PREV2 is used in a memory address in INSN.
+
+ * vax.md (movsf): Generate movl instead of movf.
+
+ * expr.c (expand_call): If have regparms, store all BLKmode args
+ before all the other args.
+ (store_one_arg): New subroutine broken out.
+
+ * output-sparc.c (output_block_move): Complete rewrite.
+
+ * sparc.md (cse'd multiply insn): Typo in asm-output code.
+
+Tue Sep 6 20:05:48 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-parse.y (yylex, etc.) Install Schmidt's perfect hash table.
+
+ * gcc.c: handle extension `.cc'.
+
+Mon Sep 5 12:09:58 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Version 1.27 released.
+
+ * tm-i386.h (PREFERRED_RELOAD_REG): When reloading a QImode,
+ make sure the class doesn't include %esi or %edi.
+ * i386.md (movqi): Eliminate only use of the class `x',
+ for which PREFERRED_RELOAD_REG cannot work.
+ (In next version, get rid of INDEX_CLASS).
+ Also use `*' to cause preferencing of Q_REGS.
+ * tm-m68k.h (PREFERRED_RELOAD_REG): When reloading a QImode,
+ use DATA_REGS.
+
+ * reload.c (push_reloads): Braino in last change when IN == 0.
+
+ * flow.c (mark_used_regs, mark_set_1): Bug if HARD_REGNO_NREGS
+ returns 0 for VOIDmode reg (inside a CLOBBER).
+
+ * c-parse.y (asm_operand): Handle `("REGNAME")' as an operand.
+ * recog.c (decode_asm_operands, asm_noperands): Ignore any CLOBBERs.
+ * regclass.c (reg_names): Variable now global.
+ * stmt.c (expand_asm_operands): Generate CLOBBERS when appropriate.
+
+ * stmt.c (assign_parms): Ignore parms that aren't PARM_DECLs.
+
+ * varasm.c (assemble_variable): Do ASM_OUTPUT_EXTERNAL for functions.
+
+ * c-parse.y (yylex): floatflag is now an enum.
+ Detect invalid use of decimal points (> 1, or in exponent)
+ and multiple exponent letters.
+
+ * expr.c (expand_call): If inlining fails, set TREE_ADDRESSABLE.
+
+Sun Sep 4 00:36:30 1988 Richard Stallman (rms at corn-chex.ai.mit.edu)
+
+ * c-decl.c (grokdeclarator): A const array becomes an array of consts.
+ * c-typeck.c (build_array_ref): Array ref is const if array elts are.
+
+ * output-sparc.c (output_move_double): Change criteria for ldd, std.
+ (output_fp_move_double): New alternatives avoid ldd, std for
+ stack refs that aren't aligned.
+ (output_block_move): Use %g1 as temp reg.
+
+ * sparc.md (floating point load from constant mem address):
+ Use %g1 as temp reg. Use output_move_double in DF case, not ldd.
+ (movsf): Asm insn typo in FPreg to FPreg case.
+ (floatsi{s,d}f2): Constraint changed.
+ Also new special case pattern in front of it.
+ (fix_truncdfsi2): Use output_move_double, not ldd.
+ (addsi3, subsi3): Use %g1 as temp reg.
+ (cse-optimized multiply): Constraint now `g'; output generalized.
+ (andsi3, orsi3, xorsi3): Use %g1 as temp reg.
+
+ * reload.c (find_reloads): Force int constants into memory just
+ like floating ones, if memory is allowed and no regs are.
+
+ * expr.c (expand_call): Don't treat structure_value_addr like a parm
+ if the first parm would be passed in a register.
+ Also, write comments for all local vars.
+
+ * tm-386v.h (START_SPEC): Use {g,m}crt1.o, not {g,m}crt0.o.
+ (LIB_SPEC): Always use crtn.o.
+
+Sat Sep 3 13:05:50 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * explow.c (plus_constant): Don't put CONST around lone SYMBOL_REF.
+
+ * combine.c (subst): Simplify zero- or sign-extend of a constant.
+
+ * expr.c (expand_expr): for REAL_CST, etc., check for invalid
+ memory addresses and copy into registers.
+
+ * integrate.c (expand_inline_function): If incoming struct value addr
+ is in memory, map it like a memory parameter.
+
+ * tm-*.h (FIRST_PARM_OFFSET): Now takes fndecl as argument.
+ * integrate.c (expand_inline_function): Calc., use and save
+ this fns value of FIRST_PARM_OFFSET.
+ (copy_rtx_and_substitute): Use that value.
+ * stmt.c (assign_parms): Likewise.
+
+ * tm-sparc.h (FIRST_PARM_OFFSET): Make it 64 if value is BLKmode.
+ (STRUCT_VALUE{,_INCOMING}): Put the value in 64(fp).
+
+ * tm-sparc.h (PRINT_OPERAND_ADDRESS): Print offsets in decimal.
+ Avoid excess `+' before a negative offset.
+
+ * stmt.c (expand_function_start): Create the return value rtl
+ before making the tail-recursion loop point.
+
+ * combine.c (gen_lowpart_for_combine): Generate a paradoxical subreg
+ rather than a wider memref.
+
+ * reload.c (push_reload): Extend last change to case where OUT != 0.
+
+Fri Sep 2 11:43:20 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stmt.c (fixup_var_refs): Adjust last_parm_insn when deleting insns.
+
+ * expr.c (emit_push_insn): calling memcpy, bump TEMP 2 pointers worth.
+
+Thu Sep 1 16:39:57 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c (choose_reload_targets): Test for canceled reload
+ before looking inside reload_out.
+
+ * jump.c (jump_optimize): Bug in last change.
+
+ * m68k.md (return): Pattern disabled; confuses Aug 29 stmt.c change.
+ * ns32k.md, i386.md: likewise.
+
+ * emit-rtl.c (emit_note_force): New, like emit_note but always do it.
+ * stmt.c (expand_function_end): Use emit_note_force.
+
+Wed Aug 31 11:34:08 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c (alter_reg): New arg FROM_REG is hard reg that the pseudo
+ was spilled from. Works with spill_stack_slot. Callers changed.
+ Now all pseudos spilled from one hard reg get the same slot.
+ (reload): Initialize new variable spill_stack_slot.
+
+ * cse.c (cse_insn): Don't insert floating point mems if -ffloat-store.
+
+ * reload.c (find_equiv_reg): Allow no equivs for volatile memrefs.
+ Also none for floating mem refs if -ffloat-store.
+
+ * output-sparc.c (output_mul_by_constant): make `p' and `log' unsigned.
+
+Tue Aug 30 13:47:12 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * jump.c (jump_optimize): Ignore other NOTEs while looking for
+ a NOTE_INSN_FUNCTION_END.
+
+ * integrate.c (save_for_inline): Flush extra call to max_reg_num.
+ Don't copy NOTEs that are NOTE_INSN_FUNCTION_END.
+ (copy_for_inline): Don't copy NOTEs that are NOTE_INSN_FUNCTION_END.
+
+ * stmt.c (optimize_bit_field): If bit field is SRC, strip subregs
+ from the DEST.
+
+ * expmed.c (expand_mult): Special case for -1 as one operand.
+
+Mon Aug 29 12:14:51 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stmt.c (expand_goto_internal, expand_fixup): New arg LAST_INSN.
+ (expand_return): Pass that arg in tail-recursive case.
+ (other callers): Pass 0 for that arg.
+ (expand_null_return): Handle HAVE_return nonzero w/ FUNCTION_EPILOGUE.
+ (expand_null_return_1): New fn, has guts of old expand_null_return.
+ (expand_return): Call expand_null_return_1 to pass LAST_INSN arg.
+ (expand_return): Handle HAVE_return nonzero w/ FUNCTION_EPILOGUE.
+ (expand_function_{start,end}): Likewise.
+ (expand_cleanups): Fix typo in recursive-list case.
+ (move_cleanups_up): New fn.
+
+ * expr.c (expand_call): Execute cleanups_of_this_call on exiting.
+ Notice calls to __builtin_new (but don't do anything about them yet).
+
+ * reload.c (push_reload): If reloading a (SUBREG (MEM ...) ...),
+ really reload just the MEM in the MEM's own mode.
+
+ * sparc.md: Define patterns for insns that set the ccs.
+ Define set-flag insns.
+ New patterns for indexed load, and for optimizing signed bit fields.
+ (mulsi3, umulsi3): Give "r" constraint to operand 0.
+ Peephole optimizers recognize some cases where delay insns are safe.
+ Changed patterns for call and return insns as well.
+
+ * output-sparc.c (single_insn_src_p): New fn.
+ (output_delay_insn): New fn.
+
+ * tm-sparc.h (TARGET_EPILOGUE): New target flag.
+ (NOTICE_UPDATE_CC): New clause for funny PARALLEL with a REG in it.
+
+ * m68k.md (movqi): Use *'s to ensure preferencing d-regs.
+
+ * c-parse.y (datadef): If traditional, no warning about no specs.
+
+Sun Aug 28 14:34:33 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-i386.h: Define PROMOTE_PROTOTYPES.
+ POINTER_BOUNDARY now 32.
+
+ * regclass.c (reg_scan): Compute `max_parallel', max # of sets and
+ clobbers in any insn in this function.
+ * global-alloc.c (global_conflicts): Use that, not MAX_SETS_PER_INSN.
+
+ * stmt.c (expand_asm_operands): MAX_SETS_PER_INSN limits # output ops.
+
+ * emit-rtl.c (init_emit_once): Make elt 2 of {f,d}const0_rtx nonzero.
+
+ * c-decl.c (lang_decode_option): Handle -Wwrite-string.
+ * c-parse.y (combine_strings): If that flag, make array of const char.
+
+ * expr.c (expand_expr): for INTEGER_CST, always use immed_double_const;
+ never do output_constant_def (it didn't work).
+ Also heed WORDS_BIG_ENDIAN.
+
+ * varasm.c (output_constant): Handle integer CONST_DOUBLEs.
+ (output_constant_def): Abort if arg is an INTEGER_CST.
+
+ * emit-rtl.c (gen_rtx): Don't return {f,d}const0_rtx for DImode.
+
+Sat Aug 27 12:37:23 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (pushdecl): Global extern decls set TREE_PUBLIC
+ like local ones.
+
+ * integrate.c (expand_inline_function): Handle parms that were
+ passed in registers but whose homes are on the stack.
+
+ * varasm.c (force_const_mem): Output ints according to spec'd mode.
+ ({record,compare}_constant_rtx,const_hash_rtx,decode_rtx_const):
+ Take mode as argument; pass it along.
+
+ * c-parse.y (read_escape): No warning for `\{' or `\['.
+
+Fri Aug 26 12:23:07 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stmt.c (fixup_memory_subreg): Typo calculating big-endian adjust.
+
+ * vax.md (call_value): Handle >255 args as in `call'.
+
+Thu Aug 25 16:00:51 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * jump.c (delete_jump): Don't delete the cc-setter if it has autoinc.
+
+Wed Aug 24 16:33:37 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (expand_expr): For sun with a COND_EXPR, use SUBTARGET
+ if validate_subtarget says ok.
+
+ * tree.c (build_index_type): make_index_type moved here and renamed.
+
+ * combine.c (move_deaths_2): New function.
+ (try_distrib): Use that, not move_deaths.
+
+ * tm-sparc.h (SHIFT_COUNT_TRUNCATED, STORE_FLAG_VALUE): Define them.
+
+ * tm-sparc.h: FUNCTION_{PRO,EPI}LOGUE: Save room for ins and
+ locals to spill to the frame if any ins *or* locals are live.
+
+ * tm-sparc.h (NOTICE_UPDATE_CC): Delete the clause that always
+ cleared the cc's for unrecognized insns.
+
+ * reload1.c (reload_as_needed): Don't try to use a spill-reg
+ in a basic block that wasn't spilled: ignore optional reloads.
+
+Tue Aug 23 09:45:05 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * output-sparc.c (output_scc_insn): New function.
+
+ * expr.c (expand_builtin, alloca): Round result of alloca
+ up to a multiple of STACK_BYTES.
+
+ * toplev.c (compile_file): Default main_input_filename is cc1 input.
+
+ * tm-i386.h (FUNCTION_BOUNDARY): 32 avoids extra prefetch.
+
+ * i386.md (movdi, movdf): Add `&' where needed in constraints.
+
+Mon Aug 22 11:57:51 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * symout.c (symout_finish): Allocate typevector after the symout_types.
+
+Sun Aug 21 16:10:54 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-3b1.h (ASM_FORMAT_PRIVATE_NAME): Use a `_' as well as `%'.
+
+ * expr.c (expand_expr): Typo setting MODE for MAX_EXPR.
+
+ * Makefile (stage*): If ln fails, copy gnulib to stage*.
+ (realclean): Do `clean' and then some.
+ (install): new var USER_H specifies headers to copy.
+
+ * c-typeck.c (build_binary_op_nodefault): LT_EXPR, etc.
+ on ptr vs int failed to set result_type.
+ (build_conditional_expr): Don't replace nonzero int
+ with null_pointer_node.
+
+ * combine.c (remove_links, try_distrib): New fns.
+ (subst): New simplifications for ZERO_EXTEND, SIGN_EXTEND.
+ (combine_instructions): Call try_distrib.
+ (FAKE_EXTEND_SAFE_P): Allow SUBREGs.
+
+ * m68k.md (non-FPA pattern for floatsisf2): Typo, had DF for SF.
+
+Sat Aug 20 12:04:37 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * integrate.c (copy_address): Variant of copy_rtx_and_substitute.
+ (copy_rtx_and_substitute): Use copy_address for MEM address that
+ doesn't satisfy memory_address_p.
+
+ * reload.c (find_reloads): If force_reload set, don't set WIN
+ for a MEM even if `m', `o' or `g' in constraint.
+
+ * i386.md (expendqihi2): Typo in asm template.
+
+ * toplev.c (rest_of_compilation): Call clear_const_double_mem.
+ * varasm.c (init_const_rtx_hash_table): Don't call it here.
+ (immed_real_const): Don't record the rtx in the REAL_CST node.
+ (force_const_double_mem, clear_const_double_mem): Use cc0_rtx, not 0,
+ as flag for a CONST_DOUBLE not on the chain.
+
+ * cccp.c (handle_directive): If traditional, do scan strings
+ but accept unterminated ones.
+ (collect_expansion): -traditional: Don't recognize comments in strings.
+ Stringify arguments that appear within strings.
+ (skip_quoted_string): -traditional: Always exit at newline.
+ (macroexpand): -traditional: Don't put `"'s around stringified arg.
+ (macarg): Set stringified_length accordingly.
+
+ * c-decl.c (duplicate_decls): Avoid error redeclaring fcn after
+ implicit decl if -traditional.
+
+ * toplev.c (announce_function, report_error_function):
+ Change communication logic between these fcns.
+
+ * c-decl.c (lang_decode_options): Handle -Wall here.
+ * toplev.c (main): not here.
+
+ * tm-bsd386.h: Don't include tm-i386.h--be like tm-att386.h
+
+Fri Aug 19 11:08:36 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * config-sun4.h: If sparc, include config-sparc.h.
+ Never include alloca.h.
+
+ * tm-m68k.h (TARGET_SWITCHES): Define `-mc68020', `-mc68000'.
+
+ * c-decl.c (init_decl_processing): If traditional, use signed sizetype.
+
+ * gcc.c (main): Use stderr for printing version.
+
+Thu Aug 18 14:42:36 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Version 1.26 released.
+
+ * m68k.md (movsi): Constraint change for fpa regs.
+
+ * reload1.c (choose_reload_targets): Clear reg_reloaded_contents
+ for all regs of a multi-reg group.
+
+ * reload.c (find_equiv_reg): HARD_REGNO_NREGS wants mode, not size.
+ Check properly for overlap against multiword reload regs.
+
+Tue Aug 16 14:54:18 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * varasm.c, expr.c (immed_double_const): immed_real_const_2 renamed.
+
+ * tm-i386.h (SFVALUE): Should be `double'.
+ * tm-i386v.h (SFVALUE): Don't override it.
+
+ * tm-i386.h (ASM_OUTPUT_ASCII): Don't define it.
+ * tm-att386.h: Definition moved here.
+
+ * tm-bsd386.h: New file, for Sequent.
+ * tm-seq386.h: New file, for Sequent.
+ * config-i386.h: New file, for Sequent.
+
+ * expr.c (push_block): Take account of STACK_POINTER_OFFSET.
+ (expand_call): Therefore need not do so here.
+
+ * optabs.c (expand_fix): Typo if going via DImode.
+
+ * reload1.c (choose_reload_targets): Don't * reload_reg_rtx if 0.
+
+Mon Aug 15 01:11:49 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * integrate.c (copy_for_inline): Don't try copying 0-length vector.
+ (copy_rtx_and_substitute): Likewise.
+
+ * m68k.md (andsi3): use clrw instead of andw #0.
+
+ * print-tree.c (walk): Don't omit permanent nodes reach from temps.
+
+ * m68k.md (zero_extend...): Reinstall the old zero-extend insns
+ without names, so they can help the combiner.
+
+ * expr.c (expand_expr): Don't use hard regs as subtargets.
+ * combine.c (FAKE_EXTEND_SAFE_P): Always consider MEMs safe.
+ * reload.c (find_reloads): For (SUBREG (MEM ...)) set force_reload.
+
+ * c-parse.y (redescape): Don't warn for `\('.
+
+ * reload.c (find_reloads_address): #if was backwards.
+
+Sun Aug 14 16:52:22 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-typeck.c (shorten_compare): Change switch to chain of ifs.
+
+ * tm-ns32k.h (PRINT_OPERAND): CONST_DOUBLE contains a double
+ even if it's SFmode.
+ (FUNCTION_PROLOGUE): If MAIN_FUNCTION_PROLOGUE defined, run it.
+
+ * cccp.c (file_buf): Rename field `free' to `free_ptr'.
+
+ * Makefile (ALLOCA, MALLOC, LIBDEPS): New variables for easier
+ customization. Executables depend on LIBDEPS instead of OBSTACK1.
+ (cccp): Deps and libs now work like the others.
+
+ * output-i386.c (notice_update_cc): Rewritten for clarity.
+
+ * tm-i386.h (OUTPUT_JUMP): If CC_IN_OVERFLOW, abort.
+
+ * recog.c (push_operand): Test for stack_pointer_rtx.
+
+ * integrate.c (copy_rtx_and_substitute): Don't submit push-operands
+ to `memory_address'--it would lose on machines where pushing is
+ a special insn, not an addressing mode.
+
+ * output-i386.c (top_dead_p): No more redundancy--that didn't work.
+ Now one method if optimized, one for call_insns if noopt, one for
+ other insns if noopt.
+ (call_top_dead_p): fp_top_dead_p renamed
+ and only the call-insn clause remains.
+
+ * i386.md (cmpsf, cmpdf): Output was backwards.
+ (", tstsf, tstdf): Set CC_IN_80387.
+ (incb pattern): Restrict allowable registers.
+ (movsf, movdf): Call top_dead_p only when absolutely necessary.
+ (call_value): Use top_dead_p, not subroutine.
+
+Sat Aug 13 15:19:23 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stupid.c (stupid_life_analysis): If only 1 reg class,
+ call stupid_find_reg only once.
+
+ * stmt.c (expand_function_start):
+ Clear current_function_pretend_args_size.
+
+ * expr.c (store_constructor): If target is hard reg, go via a pseudo.
+
+ * varasm.c (real_constant_chain): Now static in this file.
+ (force_const_double_mem): Put R on chain if not already on.
+ (clear_const_double_mem): Set XEXP (,2) to 0;
+ also clear real_constant_chain and the chain links.
+ * emit-rtl.c (init_emit_once): Put 0 in XEXP (,2) of {d,f}const0_rtx.
+ * cse.c (canon_hash): For CONST_DOUBLE, ignore elts other than 0,1.
+
+Fri Aug 12 11:48:38 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c (order_regs_for_reload): Handle REG_ALLOC_ORDER more spots.
+
+ * global-alloc.c (find_reg): error handling REG_ALLOC_ORDER;
+ also error skipping regs known to be hopeless.
+ * local-alloc.c (find_free_reg): error skipping hopeless regs.
+ * stupid.c (stupid_find_reg): likewise.
+
+ * local-alloc.c (qty_compare_1): typo, had q1 for q2.
+
+ * expr.c (expand_expr): Don't use supplied target when optimizing
+ arithmetic using a comparison or conditional; that target could be
+ needed for the result of the comparison.
+
+ * reload1.c (reload): Don't set reg_equiv_constant for hard regs.
+
+ * stupid.c (stupid_life_analysis): Ignore reg R if regno_reg_rtx[R]==0.
+
+ * symout.c (symout_finish): Use perm. links in permanent_fwd_refs.
+
+ * i386.md (movhi, movqi): Check no_labels_between_p.
+
+Thu Aug 11 10:44:46 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-parse.y (yylex): Out-of-range float is just a warning.
+
+ * tm-gnx-v3.h: New file for Genix.
+ * ns32k.md (movsi, call, call_value): GNX_V3 conditionals.
+ * tm-ns32k.h (PRINT_OPERAND_ADDRESS): Changes for Genix.
+
+ * ns32k.md (insv patterns): Operand 0 is read-write.
+
+ * i386.md (tstsf, tstdf): Don't push the arg if already in st(0).
+
+ * varasm.c (output_constant_def): If EXP is permanent, the rtl is too.
+
+ * tm-*.h (ASM_OUTPUT_{LOCAL,COMMON}): New 4th arg, rounded size
+ vs unrounded size.
+ * varasm.c (assemble_variable): Pass new arg.
+ * symout.c (symout_init): Likewise.
+
+ * cccp.c (rescan): Don't let char const cross lines.
+ (skip_quoted_string, macarg1, discard_comments): Likewise.
+
+ * expr.c (expand_expr, VAR_DECL case): handle flag_force_addr.
+
+ * tm-i386v.h (TAREGT_DEFAULT): Assume 80387.
+ * config-i386v.h (alloca): Use __builtin_alloca under GNU C.
+
+Wed Aug 10 11:23:06 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload.c (find_reloads): Alternative loses
+ if it has no regs for a reg operand.
+
+ * tm-sun3.h (STARTFILE_SPEC): Define, for fpa's sake.
+ * tm-m68k.h: New hard regs, reg classes, reg class letters,
+ target flag and switch, operand syntax and CC handling for fpa.
+ * m68k.md: Add fpa insn patterns.
+ * output-m68k.c (standard_SunFPA_constant_p): New fn.
+ (output_move_const_{single,double}): Handle fpa regs.
+ (singlemove_string): Handle fpa regs.
+
+ * stmt.c (fixup_memory_subreg): Result had wrong mode.
+
+ * ns32k.md (insv patterns): Adjust bit-number along with address.
+
+ * sparc.md (negdf2, absdf2): Order of the words was backwards.
+
+ * reload1.c (new_spill_reg): End confusion about meaning of 1st arg.
+ Arg counted_for_nongroups had wrong type.
+
+ * tm-m68k.h (FUNCTION_{PRO,EPI}LOGUE): Round frame size to word bdry.
+
+Tue Aug 9 07:53:59 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-i386.h (ASM_OUTPUT_ASCII): Don't lose the sign bit.
+
+ * tm-i386v.h (STARTFILE_SPEC, LIB_SPEC): Use crt1.o, crtn.o.
+
+ * stmt.c (fixup_var_refs_1): fixup all memory subregs.
+
+ * reload1.c (choose_reload_targets): Don't strip paradoxical
+ subregs from values to be reloaded.
+
+ * cccp.c: Comment out text after #endif.
+
+ * c-parse.y (init): Allow empty braces as init; warn if pedantic.
+
+ * c-decl.c: Move C-specific options from toplev.c.
+ * c-tree.h: Move their externs from flags.h.
+ * c-decl.c (lang_decode_option): New fn called by `main'.
+ * toplev.c (sorry, really_sorry): New error reporting fns.
+ * c-decl.c (language_string): New var, name of this language.
+
+ * c-parse.y: Don't include flags.h.
+ * dbxout.c: Do include it.
+
+ * dbxout.c (dbxout_type): Handle function fields and static fields
+ and basetypes. Handle METHOD_TYPE and REFERENCE_TYPE.
+ Abort on unexpected tree code.
+ (dbxout_args): New fn to output prototype arg types.
+ (everywhere): Use IDENTIFIER_LENGTH instead of strlen.
+ (dbxout_type_name): Cleanup; avoid strlen.
+
+ * local-alloc.c (reg_is_set): Don't call {post_,}mark_life for pseudos.
+
+ * tree.h (TYPE_BASECLASSES): New field in type nodes.
+
+ * ns32k.md (insv patterns): Was adjusting the address wrong.
+
+ * c-decl.c (grokdeclarator): Just a warning for inline varargs fn.
+
+Mon Aug 8 08:16:46 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * varasm.c (immed_real_const_2): Guts of creating a CONST_DOUBLE.
+ * expr.c (expand_expr): Use that for 64-bit int constants.
+
+ * loop.c (invariant_p): Don't check x->unchanging; it's not safe.
+
+ * c-typeck.c (build_indirect_ref): Handle flag_volatile here
+ so that it propagates to component_refs.
+ * expr.c (expand_expr): No need to handle it here.
+
+ * integrate.c (save_for_inline, expand_inline_function):
+ Set up insn_map to record mapping of old uids to copied insns.
+ (copy_for_inline, copy_rtx_and_substitute): Map 'u' refs via insn_map.
+
+ * emit-rtl (emit_label, emit_barrier): Return what was emitted.
+
+ * sdbout.c (sdbout_filename): Split off from sdbout_init.
+ * tm-encore.h, tm-3b1.h, tm-vaxv.h, tm-att386.h (ASM_FILE_START):
+ Call sdbout_filename.
+
+ * toplev.c: Better messages for invalid options.
+
+ * tm-m68k.h (PRINT_OPERAND_ADDRESS): Handle labelref+basereg.
+
+ * tm-3b1.h (PUT_SDB_DIM): Override sdbout's definition.
+ (ASM_FORMAT_PRIVATE_NAME): Override tm-hp...s definition.
+ (PUT_SDB_PLAIN_DEF): Prepend `~' to specified name.
+ (SDB_GENERATE_FAKE): Prepend `~'.
+
+ * gcc.c: Include config.h before obstack.h.
+
+Sun Aug 7 11:17:56 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stor-layout.c (layout_decl): Do nothing with CONST_DECL.
+ Treat FRIEND_DECLs like variables.
+ (layout_record): Handle VAR_DECLs and FUNCTION_DECLs in the fieldlist.
+ Handle basetypes (almost like fields).
+ (layout_type): Handle REFERENCE_TYPE and METHOD_TYPE.
+
+ * tree.c (temp_tree_cons): New fn.
+ (array_type_nelts, simple_cst_equal): New fns.
+ (lvalue_p): CALL_EXPR is an lvalue if it returns REFERENCE_TYPE.
+ () Manage TYPE_REFERENCE_TO.
+ (TYPE_HASH_SIZE): Bigger.
+ (type_list_equal): Compare the TREE_PURPOSE fields.
+ (build_reference_type, build_method_type): New fns.
+
+ * stmt.c (block_stack): Add field `cleanups' to each element.
+ (expand_{start,end}_bindings, expand_decl): Update that field.
+ (stack_block_stack): Now includes blocks that have cleanups.
+ (goto_fixup_chain): Add field `cleanup_list_list'.
+ (expand_goto_internal): Execute cleanups for blocks being exited.
+ (expand_fixup): Make a fixup if any block has cleanups.
+ (fixup_gotos): New args CLEANUPS and DONT_JUMP_IN.
+ Execute cleanups for blocks being exited, or add to cleanup_list_list.
+ (expand_end_bindings): New arg DONT_JUMP_IN. Execute any cleanups.
+ (expand_decl): New arg CLEANUP.
+ (expand_cleanups, fixup_cleanups): New functions.
+ * c-decl.c: Calls to expand_decl pass new arg.
+ * c-parse.y: Calls to expand_end_bindings pass new arg.
+
+ * stmt.c (expand_return): Handle INIT_EXPR, or bare RESULT_DECL.
+
+ * stmt.c (case_stack): Add field `has_default' to each element.
+ (pushcase,expand_end_case): Maintain and use that field.
+
+ * stmt.c (pushcase): Handle RANGE_EXPR cases.
+ (pushcase_range): Create RANGE_EXPR cases.
+
+ * final.c (final): Always pass 3 args to ASM_OUTPUT_CASE_END.
+ * tm-3b1.h: Delete offending spaces.
+
+Fri Aug 5 16:17:16 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * integrate.c (copy_rtx_and_substitute): Don't make fp+reg+const
+ without an intermediate temporary reg.
+
+ * print-tree.c (dump): Don't print an identifier's chain.
+
+ * toplev.c (compile_file): Treat `.i' suffix like `.co'.
+
+ * gcc.c: New config macro CC1_SPEC: extra switches for cc1.
+ Make a new spec for `.i' files.
+
+ * c-decl.c (pushdecl, finish_decl): Delete duplicate tests.
+
+ * varargs.h: Maybe include va-sparc.h or va-spur.h.
+ * va-sparc.h: New file.
+ * va-spur.h: renamed file.
+
+ * tree.h ({TYPE,DECL}_LANG_SPECIFIC): Types and decls can point to
+ language-specific structures containing other info.
+ * print-tree.c (dump): Hooks for printing the language-specific
+ data in types and decls.
+
+Thu Aug 4 08:54:30 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tree.def: Add some tree codes for C++.
+
+ * Rename files: parse.[yh] -> c-parse.[yh], decl.c -> c-decl.c,
+ typecheck.c -> c-typeck.c.
+ Part of tree.c split out to c-convert.c.
+
+ * expr.c (push_block): No longer static.
+ (expand_expr): Handle REFERENCE_EXPR and INIT_EXPR.
+ (expand_call): Turn a METHOD_TYPE to a FUNCTION_TYPE.
+ This is probably not all that is required.
+
+ * parse.y (yylex): Use p->rid to check for `signed' and `inline'.
+
+ * tm-sparc.h (ASM_OUTPUT_SOURCE_LINE): typo.
+
+ * sparc.md: Add a pattern for andcc.
+ (cmpsf): Clobber reg 32 in DFmode.
+ (branches): There are no unsigned floating branches; abort.
+ (bgt): Correct name of floating variant.
+ (mov?i): Load small constants via mov.
+ (movdf for constants): Use mov, not add, to move regs.
+ (movsf, floatsi*, fix*): Simplify reg-to-reg-via-mem move generation.
+ (trunc*): Use mov, not or, to move regs.
+ (negsi2, one_cmplsi2): Avoid "neg" and "not" assembler syntax.
+ (call...): Generate "call" insns; handle #-reg-parms value.
+ * Define some peepholes for return insns.
+
+ * tm-sparc.h (TARGET_SUN_ASM): New target flag.
+ (TARGET_DEFAULT): Now 1.
+ (FRAME_POINTER_REQUIRED): Now 1.
+ (STARTING_FRAME_OFFSET): Now -16.
+ (LEGITIMATE_CONSTANT_P): Only CONST_DOUBLEs fail.
+ (FUNCTION_{PROLOGUE,EPILOGUE}): Rewritten.
+
+ * output-sparc.c (small_int): Test for int that mov can load.
+ (singlemove_string): Use mov, not add.
+ (output_move_double): Changes for overlap and for use of ldd, std.
+ (output_fp_move_double): Use ldd, std when safe.
+ (make_f0_contain_0): Simplify.
+
+ * integrate.c (expand_inline_function): Some special CALL_INSN
+ handling no longer needed due to REG_FUNCTION_VALUE_P.
+
+ * m68k.md (movqi): Constraints allow moving areg to areg.
+
+Wed Aug 3 08:29:31 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Version 1.25 released.
+
+ * integrate.c (expand_inline_function): Don't let MEM be inline_target.
+
+Tue Aug 2 09:13:37 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * integrate.c (INTEGRATE_THRESHOLD): New macro, default dfn here.
+ (function_cannot_inline_p): Use it.
+
+ * rtl.h (REG_FUNCTION_VALUE_P): New macro.
+ * stmt.c (expand_function_start): Set that flag in the return reg.
+ * integrate.c (expand_inline_function, copy_rtx_and_substitute):
+ Test that flag to test for the return value.
+ * expmed.c (expand_fixed_bit_field, expand_mult, expand_divmod): ditto.
+ FUNCTION_VALUE_OUTGOING_REGNO_P no longer needed.
+
+Mon Aug 1 02:46:08 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * integrate.c (copy_rtx_and_substitute): If NO_FUNCTION_CSE,
+ don't break out constant fcn addresses here.
+
+ * expmed.c (expand_fixed_bit_field): Tests of FUNCTION_VALUE_REGNO_P
+ were backwards.
+
+Sun Jul 31 13:10:07 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * recog.c (indirect_operand): New function.
+
+ * output-i386.c (print_operand): define %*. eliminate %s.
+ (fp_top_dead_p): In nonopt case, skip stack-adjusts while looking
+ for the insn that uses the function value.
+
+ * varasm.c (text_section, data_section): New functions.
+ Replaced explicit printfs elsewhere with calls to them.
+ * final.c (final_start_function): Use these fns.
+ * sdbout.c (sdbout_one_type): Use text_section.
+ * tm-att386.h (ASM_OUTPUT_LOCAL): Use data_section.
+
+ * expr.c (prepare_call_address): Don't pass const via reg if no -O.
+
+ * tm-sparc.h (FUNCTION_{PROLOGUE,EPILOGUE}) Round the size of saved
+ registers. Fix bug counting saved registers.
+
+ * tm-sparc.h (ASM_OUTPUT_SOURCE_LINE): Define this macro.
+
+ * tm-sparc.h (DEFAULT_SIGNED_CHAR): Now 1.
+
+ * expr.c (expand_builtin, alloca case): Adding stack offset needs
+ special code if TARGET is a MEM.
+
+ * dbxout.c (dbxout_init): Define Ltext: after the reference to it.
+
+ * tm-3b1.h (ASM_OUTPUT_CASE_LABEL): `short 0' triggers assembler bug;
+ `short L%nn-L%nn' supposedly works.
+
+Sat Jul 30 00:25:52 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * sparc.md (floatsidf2): Minor change in output.
+ (fix_trunc{sf,df}si2): Similar.
+
+ * output-sparc.c (output_fp_move_double): Minor change in output.
+
+ * stmt.c (assign_parms): Don't count stack space for struct value
+ address if the function does not have one.
+
+ * sdbout.c: Output .dim's and total size for arrays.
+ Detect bit-fields properly.
+ Changed handling of structure tags.
+
+ * reload1.c (new_spill_reg): counted_for_nongroups is a new arg;
+ store 1 in it if this reg is needed for max_nongroups.
+
+ * reload1.c (choose_reload_targets): Allow inheritance of DFmode
+ if it needs only one register.
+
+ * reload1.c (choose_reload_targets): Delete the death-note from the
+ store-insn of an inherited reload if PRESERVE_DEATH_INFO_REGNO_P.
+
+ * reload.c (push_reload): Crash if PREFERRED_RELOAD_CLASS is NO_REGS.
+ (find_reloads): Smarter handling of forcing CONST_DOUBLE into mem.
+ Check PREFERRED_RELOAD_CLASS & do this if it says NO_REGS.
+
+ * reload.c (subst_indexed_address): Handle case with 2 regs
+ and no constant term.
+
+ * local-alloc.c: New variable qty_n_refs, set from reg_n_refs
+ and tested in qty_compare{,_1}.
+ (combine_regs): Update qty_n_refs.
+ Update qty_preferred_or_nothing more intelligently.
+
+ * regclass.c (regclass, reg_class_record, record_address_regs):
+ Count the number of refs to each reg along with the costs,
+ and use it when computing the preferred_or_nothing flag.
+ (Can't use reg_n_refs since that is weighted by loop depth).
+
+ * global-alloc.c (global_alloc): Enable test of OVERLAPPING_REGNO_P
+ for setting no_global_alloc_regs.
+
+ * expr.c (prepare_call_address): Use force_reg, so it gets a REG_EQUIV.
+
+ * optabs.c (can_{fix,float}_p): Return enum insn_code, not a function.
+ (init_{fix,float}_tab): Store enum insn_code's in fixtab and floattab.
+ (expand_{fix,float}): Change calls to can_{fix,float}_p.
+ Also, use emit_unop_insn to make the actual insns.
+
+Fri Jul 29 02:42:40 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (initialize_char_syntax): If dollars_in_identifiers is 0,
+ set entries for `$' to 0.
+ Set entries to 1 rather than incrementing them.
+
+Tue Jul 26 11:14:22 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * varasm.c (assemble_variable): Make SDB output only if top-level.
+
+ * local-alloc.c (reg_is_set): Arg to mark_life is regno, not qty.
+
+ * output-ns32k.c (print_operand_address): New flag SEQUENT_BASE_REGS
+ * tm-sequent.h: Define that flag.
+
+ * Makefile: add some missing deps.
+
+ * tm-encore.h (ASM_FILE_START): Changed to do nothing.
+
+ * sdbout.c (sdbout_init): Fix two dumb errors.
+
+ * sdbout.c (sdbout_end_epilogue): No longer takes arg.
+ Examine current_function_decl here, not in caller.
+ * final.c: Call changed.
+
+Mon Jul 25 01:32:54 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stor-layout.c (layout_record): Handle PCC_BITFIELD_TYPE_MATTERS.
+
+ * tm-3b1.h (__PTR_TO_INT, __INT_TO_PTR): Define these, to alter
+ parts of obstack.h.
+
+Sun Jul 24 17:56:53 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Padding for an arg may now go below or above it; new macro
+ FUNCTION_ARG_PADDING can now choose which, or can inhibit padding.
+ This makes for compatibility with PCC.
+ * expr.h: Default definition of that macro.
+ * expr.c (emit_push_insn): Put the padding above or below.
+ (expand_call): Don't count the padding if none wanted.
+ * stmt.c (assign_parms): Adjust parm stack addr if padded below.
+ Don't count the padding if none wanted.
+ * tm-3b1.h: Define FUNCTION_ARG_PADDING: no padding for > 4 bytes.
+
+ * final.c (alter_subreg): Now returns the altered value
+ (but may still modify the original structure).
+ Handles (SUBREG:DI (CONST_DOUBLE:DF...)) by returning the CONST_DOUBLE.
+
+ * m68k.md (DImode push): now allows `F'.
+ * ns32k.md (movdi): now allows `F'.
+
+ * tm-m68k.h (FIX_FRAME_POINTER_ADDRESS):
+ Handle indexed references to frame pointer.
+ * tm-i386.h, tm-m88k.h, tm-sparc.h: Likewise.
+
+ * cse.c (predecide_loop_entry): Must search for the loop top label.
+
+Sat Jul 23 08:53:01 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * parse.y (yylex): typo in wide strings.
+
+ * tm-vaxv.h, config-vaxv.h: New files for sysV on vax.
+
+ * config-sun4.h: If sparc and not compiling with GCC, include alloca.h.
+
+Fri Jul 22 02:38:02 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * tree.c (build_real_from_int_cst): CHECK_FLOAT_VALUE at proper place.
+
+ * tm-hp9k320.h ({TEXT,DATA}_SECTION_ASM_OP): Should not include a tab.
+ * final.c (final_start_function): Don't output a tab before those.
+
+ * sdbout.c (PUT_SDB_EPILOGUE_END): New macro.
+ * sdbout.c (sdbout_end_epilogue): New function to output the C_EFCN.
+ Like former sdbout_mark_end_function. Uses that macro.
+ * final.c (final_end_function): Call that function.
+ * tm-3b1.h: Override PUT_SDB_EPILOGUE_END like the other PUT_SDB...
+
+ * tm-3b1.h (PRINT_OPERAND_ADDRESS, ASM_OUTPUT_INTERNAL_LABEL,
+ ASM_OUTPUT_CASE_{LABEL,END}): Put a % in names of internal labels.
+ (ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_ADDR_{VEC,DIFF}_ELT):
+ New macros, for same reason.
+ (FUNCTION_PROFILER): New macro, for % and also to put addr in a0.
+
+ * final.c (output_source_line): For fcn's first line, use lineno 1.
+ * sdbout.c (sdbout_end_function): Clear sdb_begin_function_line
+ so can recognize first line of next function.
+
+ * sdbout.c (sdbout_init): Output the .file pseudo here.
+ * tm-3b1.h, tm-att386.h (ASM_FILE_START): Don't do it here.
+
+ * sdbout.c (PUT_SDB_VAL): Output leading tab, like the other macros.
+ * tm-3b1.h (PUT_SDB_VAL): Likewise.
+
+ * regclass.c (regclass): Cast enums to int, not char.
+ * varasm.c (record_constant): Likewise. Avoids 3b1 PCC bug.
+
+ * decl.c (pushdecl): Better choice of error message for extern/static.
+
+ * emit-rtl.c: Do look for STRUCT_VALUE_INCOMING_REGNUM.
+
+Thu Jul 21 02:13:03 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cse.c (canon_hash): CONST_INT case failed to add to prev. value
+ of HASH; was inconsistent with cse_insn mem address hashing.
+
+ * m68k.md (divide insns): Alternate 3B1 syntax for `swap' insn.
+
+Wed Jul 20 18:27:10 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * m68k.md: In shift-by-24 patterns, rejects autoincrement memrefs
+ since they are mode-dependent.
+
+Tue Jul 19 13:01:38 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * parse.y (check_newline): Handle #ident by writing .ident to output.
+ * cccp.c: Don't handle #ident; delete IDENT_DIRECTIVE conditionals.
+
+ * stmt.c (expand_end_case): In compares, put constant arg second.
+
+ * jump.c (jump_optimize): Delete conditional jump if followed by
+ an unconditional jump to the same place.
+
+Mon Jul 18 17:49:13 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * emit-rtl.c (init_emit_once): Now STRUCT_VALUE_INCOMING is an
+ expression for an rtx. It can make a MEM. Likewise STRUCT_VALUE
+ for outgoing structure value addresses.
+
+ * stmt.c (assign_parms): If incoming struct addr on stack, leave room.
+ * expr.c (expand_call): If outgoing addr on stack, push it like an arg.
+
+ * PROMOTE_PROTOTYPES means if proto says `char', pass `int'.
+ * decl.c (get_parm_info): Alter DECL_ARG_TYPE to do this.
+ * typecheck.c (actualparameterlist): Convert value for this.
+ * tm-m68k.h: Define PROMOTE_PROTOTYPES.
+
+Sun Jul 17 14:25:47 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * jump.c (jump_optimize): peephole can delete insns following INSN.
+ Set NEXT after peephole.
+
+ * decl.c (finish_decl): Always restart perm alloc if global.
+
+ * stmt.c (assign_parms): When a float is passed as double, store the
+ float in low-numbered word. Avoids trouble with parm_map in integrate.
+
+ * vax.md: New pattern for decrement and compare against -1.
+
+Sat Jul 16 14:18:00 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * decl.c (pushdecl): Ignore previous decl if it's really an error_mark.
+
+ * stmt.c (expand_start_case): Make sure case_stmt.start is a NOTE.
+
+ * combine.c (subst): In the simplification for
+ (set (zero_extract ...) (and/or/xor (zero_extract ...) const)),
+ require same memory location in both extracts.
+
+ * *386*: New files.
+
+ * cse.c (fold_rtx): Save time in memory address if it didn't change.
+ Don't replace cheaper expression with coslier one.
+ (cse_insn): Reenable generation of REG_WAS_0. It wasn't obsolete.
+
+ * cccp.c: `ident' has 5 letters.
+
+ * final.c (output_source_line): SDB can't handle multiple source
+ files, so ignore line-NOTEs for other files.
+
+ * hard-reg-set.h: New var reg_class_size (# regs in the class).
+ * regclass.c (init_reg_class): Set it up.
+
+ * reload.c (find_reloads): If an earlyclobber is in a class of size 1
+ as an output, reload it as input instead of as output.
+
+ * reload1.c (choose_reload_targets): Improve elimimation of spilled
+ pseudos made dead by reloading: if pseudo is limited to one block
+ and that block contains just stores, delete all the stores.
+
+ * reload1.c (choose_reload_targets): reg_has_output_reload is now
+ static and survives through reload pass.
+ (forget_old_reloads): Don't cancel data on spilled regs of output
+ reloads of the insn just made.
+
+ * sdbout.c (sdbout_one_type): Go to .text before defining a type.
+ (sdbout_block): Test against do_block was backwards.
+
+ * stmt.c (expand_end_function): New args to make a NOTE for last line.
+ * decl.c (finish_function): Pass the args.
+
+ * rtl.c (no_labels_between): New function.
+ * vax.md (movsi): Call it.
+
+ * print-tree.c (dump): Don't follow chain of a decl.
+
+ * rtl.c (volatile_refs_p): Moved from flow.c.
+
+Fri Jul 15 13:36:20 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * sdbout.c (PUT_SDB...): Allow config to override any of them.
+ * sdbout.c (PUT_SDB_{BLOCK,FUNCTION}_{START,END}): New macros.
+ * tm-3b1.h: Override all of them.
+ * sdbout.c (SDB_GENERATE_FAKE): New macro to create dummy tag name.
+ (gen_fake_label): Use SDB_GENERATE_FAKE.
+ * tm-3b1.h: Override its defn.
+
+ * sdbout.c (sdbout_mark_function_end): Unused; deleted.
+
+ * tm-3b1.h: Define SDB_DEBUGGING_INFO.
+
+Thu Jul 14 01:55:15 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * config-sunv4.h: New file for Sunos version 4.
+
+ * tm-sun3.h (CPP_SPEC): Define mc68010 or mc68020, depending.
+
+Tue Jul 12 15:31:30 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stmt.c (expand_fixup, expand_goto_internal): New functions to
+ emit a jump that can restore the stack level, even without tree node.
+ (expand_null_return, expand_exit_loop, etc.): Use expand_goto_internal.
+ (expand_end_function): Do fixup_gotos after emitting return_label.
+
+ * cse.c (predecide_loop_entry): Avoid using JUMP_LABEL.
+ * flow.c (find_basic_blocks): Avoid using JUMP_LABEL.
+
+ * flow.c (insn_dead_p): Delete special case for stack-adjust insns.
+ (life_analysis): Mark those insns with INSN_VOLATILE here.
+ (mark_used_regs): a SET of a hard reg, in a volatile insn,
+ always makes its source live.
+
+Mon Jul 11 10:46:26 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * ns32k.md (floatqidf2): Commented out since assemblers warn about it.
+
+Sun Jul 10 11:49:23 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * decl.c (xref_tag): Default the TYPE_MODE of enum xrefs
+ to avoid making MEM and REG with VOIDmode.
+
+ * vax.md (call): If > 255 args, pop them explicitly.
+
+Sat Jul 9 10:53:47 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * symout.c (symout_types): Fix up forward refs to previously
+ undefined structure types.
+ (filter_undefined_types): New function.
+ (symout_finish, symout_function_end): Output any never-defined structs.
+ * toplev.c (rest_of_compilation): call symout_function_end.
+
+ * parse.y: Don't declare errno if it's a macro.
+
+ * tm-hp9k320 (FUNCTION_PROFILER): Pass ptr in a0, not d0.
+
+ * typecheck.c (truthvalue_conversion): Flush unnec recursive call.
+ (build_cond_expr): Bug testing zeroness of IFEXP with TREE_LITERAL.
+
+ * cse.c (fold_cc0): Constants not CONST_INT are certainly nonzero.
+ * fold-const.c (fold): ADDR_EXPR is not equal to zero.
+
+ * cccp.c (macroexpand): Disable the macro even if traditional.
+ (rescan): Error if use a disabled macro.
+
+ * combine.c (try_combine): Don't substitute a different reg into
+ an auto-increment. Handle multiple REG_INC notes in I1 or I2.
+
+ * decl.c (implicitly_declare): Don't reuse old implicit decl.
+
+ * varasm.c (assemble_variable): Avoid syntax err if no DBX and no SDB.
+ * final.c (output_source_line): likewise.
+
+ * fold-const.c (fold): PLUS/MINUS_EXPR: in case of cancellation,
+ convert result to original type.
+
+ * regclass.c (reg_class_record): Changed arguments include address
+ of entire vector of constraints.
+
+Fri Jul 8 07:59:00 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c (reload): Find groups of more than 2 registers.
+
+Thu Jul 7 08:33:07 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (emit_push_insn): Typo adjusting arg for bcopy
+ if not STACK_GROWS_DOWNWARD.
+
+ * gnulib.c (_cmpsf2): Value is int, not SFVALUE.
+
+Wed Jul 6 11:53:46 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-encore.h, tm-3b1.h: Replace ASM_FILE_START; output a .file.
+
+ * *m88*: New files for Motorola 88000. They don't really work.
+
+Tue Jul 5 14:40:03 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * local-alloc.c (combine_regs): Don't tie a reg to itself.
+
+ * finxincludes: Make a variable LIB for the target dir.
+
+ * m68k.md (movhi, addhi3, addsi3): Micro-optimize choice of asm insns.
+
+ * expr.c (expand_expr): Use new macros NO_DEFER_POP, OK_DEFER_POP
+ in several places, to keep stack predictable.
+
+Mon Jul 4 09:50:18 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * integrate.c (function_cannot_inline_p): Increase threshold size.
+
+ * flags.h (use_gdb_dbx_extensions): New variable.
+ * toplev.c:
+
+ * sdbout.c (PUT_SDB_TAG): Delete duplicate defn.
+
+ * expr.c (expand_expr): For FIX_TRUNC_EXPR to unsigned short/char,
+ REALLY go via signed int.
+
+ * loop.c (may_trap_p): Was detecting floating arithmetic incorrectly.
+
+ * tm-news800.h (CPP_PREDEFINES): Add sony and sony_news.
+
+ * parse.y (check_newline): Avoid infinite loop at eof.
+
+Sat Jul 2 10:35:17 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Version 1.24 released.
+
+ * stmt.c (expand_asm_operands): Produce proper no-outputs insn.
+ * recog.c (asm_noperands): Detect no-outputs insns.
+ (decode_asm_operands): Likewise.
+ * reload.c (find_reloads): Likewise (add case ASM_OPERANDS:).
+
+ * local-alloc.c (block_alloc): Tests of qty_compare were backwards.
+
+ * flow.c (life_analysis): Turn off code that finds regs live at
+ function start and marks them not local to any basic block.
+
+ * cse.c (insert_regs): Fix typo (UNITS_PER_WORD).
+
+ * cccp.c: Define max.
+
+ * expr.c (expand_expr): Put each SAVE_EXPR's reg on save_expr_regs,
+ if not optimizing.
+ * stmt.c (expand_function_end): Mark each of those regs live
+ at the end and also retroactively at the beginning of the function.
+
+ * output-vax.c (print_operand_address): New function from old macro.
+ * tm-vax.h (PRINT_OPERAND_ADDRESS): Call that function.
+
+ * config-vms.h: If not under GNU C, define X_OK, etc.
+
+ * expr.c (move_by_pieces_1): Use * to call GENFUN.
+ (expand_expr): Compare DECL_FUNCTION_CODE against an enum const.
+ (preexpand_calls): Likewise.
+ * genrecog.c (write_tree): Likewise.
+ * final.c (final): Use * to call the output function.
+ * reload.c (push_reload): Rename `noshare' to `dont_share'.
+
+ * genoutput.c (output_epilogue): Put more newlines in insn_outfun.
+ * genemit (gen_exp): Put in more newlines.
+
+Fri Jul 1 00:23:57 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * global-alloc.c (allocno_compare): Avoid comparisons of floats
+ since that is sensitive to roundoff errors.
+
+Thu Jun 30 09:25:40 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * sdbout.c (PUT_SDB_{DEF,TAG}): Use ASM_OUTPUT_LABELREF.
+ (PUT_SDB_PLAIN_DEF): New name for old defn of PUT_SDB_DEF
+ (sdbout_one_type): Use PUT_SDB_PLAIN_DEF for `.eos'.
+
+ * tree.c (allocation_temporary_p): New fcn.
+ (all_types_permanent): New variable.
+ (make_node): If that's set, make each ...TYPE node permanent.
+ * decl.c (grokdeclarator): If traditional, make decl data permanent.
+ (finish_decl): Make the rtl permanent too.
+ * stor-layout.c (layout_type): If type is permanent,
+ make its layout data permanent too.
+
+ * cccp.c: Choose C++ or C at run time via var `cplusplus'.
+ Separate cplusplus_include_default from include_default.
+ Get GNU-specific include directory names from macros
+ GCC_INCLUDE_DIR and GPLUSPLUS_INCLUDE_DIR.
+ (main): Initialize based on CPLUSPLUS; `-+' sets it.
+ * Makefile: Set *_INCLUDE_DIR based on $(libdir).
+
+Tue Jun 28 09:25:49 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tree.c (copy_node): Round LENGTH up to multiple of sizeof (int).
+
+ * expr.c (emit_push_insn): Avoid using PUSH_ROUNDING if not defined.
+
+ * sparc.md (floatsisf2): Insert missing brace.
+ (mulsi3): Replace reg_o0_rtx, reg_o1_rtx.
+
+ * tm-sparc.h: Define DBX_DEBUGGING_INFO.
+
+ * parse.y (yylex): If traditional, no error for out-of-range float.
+
+ * Makefile: Comment saying how to compile on an Apollo.
+
+ * tm-sparc.h (ASM_FILE_START): Switch to new calling convention.
+
+ * decl.c (init_decl_processing): Create type nodes for 64-bit ints.
+ (grokdeclarator): use them for `long long'. Warn only if pedantic.
+
+ * optabs.c (init_optabs): Add missing DImode insn names.
+
+ * expr.c (emit_block_move, emit_push_insn): Use movstrqi if appro.
+
+ * expr.c (convert_move): use extendsidi if appropriate.
+
+ * cccp.c (initialize_builtins): Don't install __STDC__ if traditional.
+ (main): Call initialize_builtins after option processing.
+
+ * integrate.c (output_inline_function): Set current_function_decl.
+
+ * cse.c (fold_rtx): Typo in avoiding 32-bit shifts.
+
+ * cccp.c: Add forward-decl.
+
+Mon Jun 27 18:06:42 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * hard-reg-set.h (reg_alloc_order): New variable
+ based on REG_ALLOC_ORDER, a new machine-description macro.
+ * regclass.c (reg_alloc_order): Define it.
+ * local-alloc.c (find_free_reg): Handle reg_alloc_order.
+ * global-alloc.c (find_reg): Likewise.
+ * stupid.c (stupid_find_reg): Likewise.
+
+Sun Jun 26 10:47:47 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Version 1.23 released.
+
+ * tm-3b1.h: Define IDENT_DIRECTIVE.
+
+ * tm-encore.h: Define SDB_DEBUGGING_INFO.
+ Define SCCS_DIRECTIVE and IDENT_DIRECTIVE.
+
+ * output-ns32k.c: Decl of paren_base_reg_printed must be outside fcns.
+
+ * tm-encore.h (ASM_OUTPUT_DOUBLE): Do 0f, not 0l.
+ (CPP_PREDEFINES): No -Dns32032.
+
+ * sdbout.c: Include syms.h, not storclass.h.
+ (unnamed_struct_member): Decl was missing.
+ (PUT_SDB_INT_VAL, PUT_SDB_VAL): Fix typos.
+ (sdbout_types, sdbout_one_type, sdbout_parms): Fix typos.
+
+ * Makefile: Add file sdbout.o.
+ Changed comments pertaining to sysV.
+ Make a separate target `doc' to make the info files.
+
+ * m68k.md (bit-field insns): Use nonimmediate_operand for the thing
+ to extract from.
+ * vax.md (QImode bit-field insns): Likewise.
+
+ * recog.c (nonimmediate_operand): Accept any nonconst general operand.
+
+Sat Jun 25 07:54:42 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cse.c (lookup_as_function): arg to exp_equiv_p was missing.
+
+Fri Jun 24 09:14:47 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * recog.c (memory_operand): Allow (subreg (mem...)).
+
+Thu Jun 23 07:34:07 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * decl.c (finish_enum): Compute minimum value like maximum.
+ If minimum is negative, install it in the type and make it signed.
+
+ * stor-layout.c (layout_record): STRUCTURE_SIZE_BOUNDARY is minimum.
+ (layout_type): A RECORD_TYPE or UNION_TYPE must be BLKmode if
+ any member is BLKmode. This is to prevent putting it in a register.
+ (layout_decl): If decl's type is BLKmode, the decl *must* be BLKmode.
+
+ * local-alloc.c (find_free_reg): Never allocate the frame pointer reg.
+
+ * tm-sequent.h (PRINT_OPERAND): Bug in SFmode CONST_DOUBLE.
+ * tm-encore.h: Likewise.
+
+ * flow.c (flow_analysis): Bug in n_basic_blocks error check.
+
+ * stmt.c (expand_asm_operands): Emit no insn if an arg is erroneous.
+
+Tue Jun 21 08:34:24 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload.c (find_reloads_address): Write back *loc even if
+ subst_reg_equivs makes no change, in case subst_index_address did.
+
+ * flow.c: Define macros for -1 and -2 as values of reg_basic_block.
+ (mark_used_regs): Add an `else'; no change in behavior.
+ (mark_label_ref): Abort if LABEL_REF doesn't contain a CODE_LABEL.
+ (find_basic_blocks): Extra error check.
+
+ * output-ns32k.c (print_operand_address): Changes in handling of
+ register-indirect, and of indexing by sb register.
+
+Mon Jun 20 04:55:38 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (collect_definition): Compute needed space more accurately.
+ Abort if use more space than was allocated.
+ (rescan) [USE_C_ALLOCA]: Do alloca (0) after handle_directive.
+
+ * genflags.c (gen_insn): Put parens around defns of HAVE_... macros.
+
+Sun Jun 19 02:52:53 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (emit_push_insn): Consider PARM_BOUNDARY when compensating
+ for size of a pushed arg to bcopy.
+
+Sat Jun 18 07:20:54 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * New files sparc.md, tm-sparc.h, config-sparc.h, output-sparc.c.
+
+ * final.c (final): After an ADDR_{,DIFF_}VEC, do ASM_OUTPUT_CASE_END.
+ * tm-3b1.h: Define ASM_OUTPUT_CASE_END.
+ (PRINT_OPERAND_ADDRESS): Ref the case tables via an intermediate symbol
+ `LDnnn' whose def. is output by ASM_OUTPUT_CASE_END.
+ (ASM_OUTPUT_CASE_LABEL): Add missing newline.
+
+ * reload.c (find_equiv_reg): Reject a MEM containing an autoincrement.
+
+Fri Jun 17 06:58:37 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * genpeep.c (main): Write `extern' in the decl for `peep_operand'.
+
+ * flow.c (propagate_block): When a dead insn has a REG_RETVAL note,
+ call mark_set_regs anyway, so that `significant' is updated.
+
+ * jump.c (follow_jumps): New arg IGNORE_LOOPS. If 0, don't follow
+ the insn at the beginning of a loop that enters the loop; this avoids
+ interference with loop optimizer.
+ (jump_optimize, tension_vector_labels): Pass that arg.
+
+ * loop.c (loop_optimize): Mention invalid multiple-entry loops in log.
+
+ * m68k.md (extv, extzv): Fix # of alternatives mismatch in constraints.
+
+Thu Jun 16 03:06:48 1988 Richard Stallman (rms at corn-chex.ai.mit.edu)
+
+ * genrecog.c (change_state): Was mishandling printing XVECEXP indices
+ greater than 9.
+
+ * combine.c (subst, simplify_and_const_int): Avoid making SUBREG
+ of a non-REG.
+
+ * expr.c (expand_expr): For FIX_TRUNC_EXPR to unsigned short/char,
+ go via signed int.
+
+ * optabs.c (expand_fix): Copy hard_libcall_value reg only once.
+
+ * reload1.c (order_regs_for_reload): Init all elements
+ of potential_reload_regs to -1.
+
+ * Prevent generation of (set (reg) (plus ... (label_ref ...))).
+ * explow.c (memory_address_noforce): Like `memory_address' but
+ never force it into a register.
+ * expr.c (do_tablejump): Use that.
+ * m68k.md (casesi): Use that.
+
+ * rtl.h (struct rtx_def, GET_CODE, PUT_CODE): If SHORT_ENUM_BUG,
+ define the `code' field as a short.
+
+Wed Jun 15 01:25:57 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gcc.c (CPP_SPEC): New spec set by config.h gives flags to cpp.
+ * tm-*.h for m68k: Define CPP_SPEC to define __HAVE_FPU__ on
+ appropriate conditions.
+
+ * combine.c (subst): Simplify (not (minus x 1)) and (neg (minus x y)).
+
+Mon Jun 13 02:22:43 1988 Richard Stallman (rms at corn-chex.ai.mit.edu)
+
+ * typecheck.c (build_array_ref): Avoid duplicate errmsg if index
+ is an error-mark.
+
+Sun Jun 12 23:04:39 1988 Richard Stallman (rms at corn-chex.ai.mit.edu)
+
+ * cccp.c (handle_directive): If -traditional, quotes aren't special.
+ (rescan): Assume newline ends a string constant.
+
+ * cccp.c, cexp.y: Make all fcns non-static; add some forward decls.
+
+ * various: add static forward-decls for various functions.
+
+Fri Jun 10 00:25:18 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c (choose_reload_targets): When writing back an incremented
+ value (handling reload_inc), write back to the real place, not to
+ OLDEQUIV (a register that holds the same value).
+
+ * tm-m68k.h (LEGITIMIZE_ADDRESS): Don't give force_operand a target.
+ This can cause the use of multiple insns with same output reg,
+ which can confuse cse.
+
+ * loop.c (consec_sets_invariant_p):
+ If invariant_p ever returns 2, we return 2.
+ New arg is # of consecutive sets to look for,
+ since this info is no longer in n_times_set at move_movables.
+ (scan_loop): If consec_sets_invariant_p returns 2, set m->cond.
+ (move_movables): check consecutive insns if m->consec && m->cond.
+
+ * tm*.h: ASM_DECLARE_FUNCTION_NAME now takes 3rd arg,
+ the FUNCTION_DECL node.
+ * varasm.c (assemble_function): Pass this arg.
+
+ * expr.c (expand_call, expand_builtin [alloca]):
+ If STACK_POINTER_OFFSET is defined, add it to stack pointer contents
+ before using it as address of actual data on the stack.
+ * stmt.c (expand_decl): Likewise.
+
+ * stmt.c (assign_parms): If 1st parm named `__builtin_va_alist'
+ came in regs, pretend it came on stack.
+ Handle pretending a BLKmode var came on the stack.
+ If REG_PARM_STACK_SLOT, count stack space for each parm
+ even if the parm came in a register; and use that stack space
+ if the parm needs to be addressable or is BLKmode.
+ Rearrange to simplify conditionals.
+
+Thu Jun 9 01:21:29 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * local-alloc.c:
+ `qty_...' vectors' elements for hard-reg-numbers now aren't used.
+ `reg_qty' elements for hard-reg numbers now aren't used,
+ and the element for a pseudo is never a hard-reg number.
+ (local_alloc): No need to reset those elements.
+ No need to reset elements out of range of prev block's NEXT_QTY.
+ (reg_is_born, reg_is_set, wipe_dead_reg):
+ Divide labor in same way for hard regs and pseudos;
+ simplify using fact that locality-to-basic-block has been precomputed
+ and recorded in reg_qty; avoid refs to reg_qty[HARDREG].
+ (reg_is_born, wipe_dead_regs): Block-number arg no longer needed.
+
+ * local-alloc.c (combine_regs): Remove old code for tying hard regs
+ to pseudos; great simplification results.
+ Use find_regno_note, not regno_dead_p.
+
+Wed Jun 8 00:18:04 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload.c (subst_reg_equivs): Set a flag if anything is changed.
+ (find_reloads_address): Check that flag to avoid extra work.
+ Also check early for safe reg+const address and avoid work.
+
+ * reload.c (find_reloads): Use loops instead of bcopy.
+ Check early for insn with no real constraints, and return.
+ Also check for move from hard reg to hard reg and return.
+
+ * cse.c (canon_reg): Rewrite for speed; use a switch.
+ (cse_insn): Don't call find_reg_note if REG_NOTES is 0.
+
+ * cse.c (cse_insn): Store modified SET_SRC even if there's a REG_EQUIV.
+ Inhibition was needed when the SET_SRC was the only place to find the
+ equivalent value; now it is in the REG_EQUIV note.
+
+ * stmt.c (expand_asm_operands): If NINPUTS is 0, make vec of no elts.
+ * regclass.c (reg_scan_mark_refs): Don't lose if XVEC (x,i) is 0.
+
+Tue Jun 7 03:51:28 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stmt.c (assign_stack_local): If big-endian and MODE is narrow,
+ the bytes actually used are the least significant.
+
+ * parse.y (skip_white_space): Accept char as arg; let caller read it.
+ (yylex): Change call.
+ (check_newline): Return 1st nonwhite char after skipping lines.
+ (skip_white_space): Change call.
+ * toplev.c (compile_file): Change call.
+
+ * gcc.c: Pass -traditional to cc1.
+
+ * cse.c (cse_insn): Return very early for (set (reg) (call...)).
+ Mainly to save time.
+ (cse-insn) Old code to add REG_WAS_0 note wasted time but did nothing.
+
+ * expr.c (clear_pending_stack_adjust): Really do clear it,
+ if current fcn doesn't want to be inline.
+
+ * cse.c (cse_insn): Speedup: instead of safe_hash, use canon_hash
+ or HASHREG.
+
+Mon Jun 6 21:47:23 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * jump.c (rtx_renumbered_equal_p): Reject ADDR_VEC fast.
+
+ * cse.c (cse_insn): Ignore a REG_EQUIV or REG_EQUAL note if the
+ equivalent value is the same as the SET_SRC of the insn.
+
+ * flow.c (life_analysis): Don't call volatile_refs_p for a CALL_INSN;
+ just assume value is 1.
+ (propagate_block): Don't call mark_{used,set}_regs for a stack-pop
+ since if it isn't dead it has no effect on any useful life data.
+ (mark_set_1): Return quickly if setting stack-ptr, and almost as
+ quickly if setting any hard reg.
+ (mark_used_regs): Likewise for refs.
+ Also don't scan the vector of an ADDR_VEC or ADDR_DIFF_VEC.
+ (volatile_refs_p): Likewise.
+
+ * varasm.c (output_constant): Discard NOP_EXPR and CONVERT_EXPR
+ in integer case (they were for casting a pointer).
+
+ * parse.y (compstmt_or_error): Parse a compstmt after ignoring error.
+ Use this for fctn body so that an error after store_parm_decls
+ won't recover to xdecls and call store_parm_decls again.
+ Typical cause was missing semi at end of last parmdecl.
+
+ * parse.y: Add missing semicolons in actions.
+ (yylex): Don't use yylloc.
+
+Sun Jun 5 16:14:40 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * typecheck.c (build_array_ref): Check arg types here, to make
+ error message more accurate (not about "addition").
+
+Thu Jun 2 02:41:40 1988 Richard Stallman (rms at rice-krispies.ai.mit.edu)
+
+ * cccp.c (collect_expansion): `#' isn't special if -traditional.
+
+ * dbxout.c (dbxout_parms): Don't output a regparm symbol
+ unless the parm got a hard reg assigned.
+
+ * tm-encore.h (ASM_OUTPUT_DOUBLE): Use 0f... not 0d...
+
+ * tm-vax.h (CHECK_FLOAT_VALUE): Define this.
+
+Wed Jun 1 17:13:00 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (expand_call): Have sequence points between args.
+
+Tue May 31 00:27:06 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expmed.c (store_fixed_bit_field): Avoid shifting by 32.
+ * cse.c (fold_rtx):
+ * symout.c (subrange_p): likewise.
+
+ * local-alloc.c (block_alloc): If operands 1 and 2 commute,
+ try tying output to operand 2 if operand 1 won't do.
+
+ * toplev.c (compile_file): Pass main_input_file to symout_init.
+
+ * tree.c (build_real, build_real_from_int_cst):
+ Call CHECK_FLOAT_VALUE if it's defined, to report out-of-range values.
+
+ * tree.c (build_real, build_real_from_int_cst): New 1st arg TYPE.
+ * parse.y (yylex): Pass this arg; requires parsing suffixes first.
+ * fold-const.c (fold, combine, fold_convert): Pass this arg.
+ Handling of float binops in `combine' simplified.
+
+ * tm-encore.h (CPP_PREDEFINES): Remove -Dencore since CC lacks it.
+
+ * final.c (output_source_line): Let ASM_OUTPUT_SOURCE_LINE
+ be used for SDB also.
+
+Mon May 30 00:21:15 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cse.c (insert): Was inserting in wrong place in list.
+ (exp_equiv_p): Was failing to check validity when x == y.
+
+ * tree.c (build_pointer_type): Handle saveable_obstack
+ like current_obstack.
+
+ * decl.c (finish_decl): Error in test for zero-size array warning.
+
+ * reload.c (find_equiv_reg): New arg MODE specifies mode in which
+ an equivalent value is needed. Equivalence must be good in that mode.
+ In addition, notice overlap with multiword register modes.
+ Simplify, knowing that registers have already been renumbered.
+ It was invalidating memory-goals too easily; setting a reg
+ only invalidates memory-goal if its address varies.
+ * reload.c, reload1.c, jump.c: Calls pass the new argument.
+
+ * cccp.c: For correct ANSI, must reject `$' in identifiers.
+ (dollars_in_ident): Variable says whether to allow them.
+ (rescan): Handle `$' as randomchar if that's 0.
+ (main): dollars_in_ident is set to 0 by -$, to 1 by -traditional.
+ (rescan, do_define): Delete former pedantic warnings for `$'.
+ (initialize_char_syntax, initialize_builtins): Inits split to two
+ functions; former is called after options are scanned
+ so `$' is in is_idchar conditionally.
+ * gcc.c: For -ansi, pass -$ to cccp.
+ * toplev.c, flags.h: Define dollars_in_ident.
+ * parse.y (yylex): Treat $ as punctuation unless dollars_in_ident.
+ Delete old pedantic warning about $.
+ * tm-vms.h: Define DOLLARS_IN_IDENTIFIERS as 1.
+
+ * cccp.c (rescan): Preprocessing numbers can have signs, after `e'.
+
+ * integrate.c (expand_inline_function): Abort, don't return failure,
+ if max_regno is too low. I believe this can't happen.
+
+ * typecheck.c (build_binary_op_nodefault):
+ For ordered comparisons, no pedantic warning about void *.
+ For MAX, MIN, ditto, and also don't allow pointer vs 0.
+
+ * typecheck.c (build_unary_op): Don't allow pointer for +.
+
+ * typecheck.c (convert_for_assignment):
+ Add missing warning for case of unrelated pointer types.
+ Change criteria for new ANSI C draft.
+
+ * optabs.c (expand_binop): Don't set unused target_is_not_an_operand.
+
+ * fold-const.c (fold_convert): Don't set unused inprec, outprec.
+
+ * emit-rtl.c, parse.y: Delete unused var.
+
+ * stor-layout.c (add_vc_sizes): Unused function deleted.
+ * loop.c (constant_high_bytes): #if 0 this unused function.
+
+ * gcc.c (fatal): Add missing arg to delete_temp_files.
+
+ * cccp.c (dump_defn_1): Add missing arg to skip_quoted_string.
+
+ * reload.c (find_reloads): If constraints don't fit in an `asm',
+ print error instead of aborting.
+
+ * regclass.c (reg_class_record): Ignore `&' in constraint.
+
+Sun May 29 00:20:23 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Makefile: Run ranlib only if /usr/bin/ranlib exists.
+ Add comment saying what to do on system V.
+
+ * tree.c (suspend_momentary): Switch to the saveable_obstack
+ for the sake of inline functions.
+
+ * flags.h (enum debugger): New enum for write_symbols.
+ * toplev.c, varasm.c, final.c: Use the enum constants where appro.
+ Add calls to sdbout paralleling the calls to dbxout;
+ put each in the appropriate conditional {SDB,DBX}_DEBUGGING_INFO.
+
+ * toplev.c (main): Delete -noreg option; it's now the default.
+ Make -O an alias for -opt. Rename -g to -gg. -g is alias for -G.
+ Accept and ignore -Wtrigraphs.
+ * gcc.c: Simplify the specs.
+
+ * toplev.c (compile_file), tm-*.h:
+ ASM_FILE_START is now a statement, not just a string to be output.
+ Output it *after* determining the real source file name.
+
+ * fold-const.c (fold): Simplify x >= CST to x > CST-1 (CST positive).
+ To simplify this, canonicalize relationals to put constat last.
+
+ * decl.c (duplicate_decls): Make a 2nd errmsg to show previous decl.
+
+ * cccp.c (file_size_and_mode): Delete temporary VMS bootstrap patch.
+
+ * tm-att386.h: New file.
+
+ * decl.c (pushdecl): Warn if a local `extern' decl precedes
+ a file-scope `static' decl.
+
+ * expr.c (expand_call): No warning for failure to inline.
+
+ * expmed.c (extract_bit_field): copy operand 1 of extv or extzv
+ into register if memory isn't allowed.
+
+Sat May 28 02:10:56 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gnulib.c, Makefile: Delete va_end.
+
+ * final.c, symout.c: Check DBX_DEBUGGING_INFO, not NO_DBX_FORMAT.
+
+ * genemit.c (gen_expand): Notice a CALL inside a PARALLEL.
+
+ * regclass.c (init_reg_sets_1): Part of init_reg_set is put in this
+ new fn which is called after options are scanned.
+ Now CONDITIONAL_REGISTER_USAGE can depend on the options.
+ (fix_register): Just alter the data that init_reg_sets_1 will look at.
+
+ * reload1.c (reload): Don't complain if two different but tieable
+ modes require groups of the same regclass (assuming same size group).
+
+ * cccp.c: Add 3rd arg to all `open' calls.
+
+ * parse.y (check_newline): Typo prevented ignoring whitespace.
+
+ * cccp.c (perror_with_name): fprintf had harmful extra arg.
+
+ * cccp.c (main, trigraph_pcp): -Wtrigraphs means warn if any trigraphs.
+
+ * emit-rtl.c (gen_sequence): If LEN is 1, avoid looking at PATTERN
+ of something that doesn't have one.
+
+ * reload1.c (alter_frame_pointer_addresses): frame pointer can
+ occur by itself, not just inside a PLUS.
+ (reload): Call eliminate_frame_pointer before reload_as_needed.
+ Otherwise the latter can make reload insns that copy the frame ptr
+ to a data reg, but 68k can't copy sp+const to a data reg.
+
+ * decl.c (implicitly_declare): Always save the implicit decl
+ permanently. Reuse an old one if it exists.
+ * tree.c (resume_temporary_allocation): Used after `end_temporary...'
+ to go back to temporary allocation.
+
+ * stor-layout (layout_{type,decl}): Call variable_size.
+ (variable_size): Turn a size into a SAVE_EXPR and either compute
+ it right away or put it on a list to be computed later.
+ (get_pending_sizes): Return that list and clear it out.
+ * stmt.c (expand_start_function): Tell `variable_size' to compute
+ sizes right away, and compute those saved on the list.
+ (expand_end_function): Tell it to put them on a list.
+
+Fri May 27 00:02:34 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * dbxout.c (dbxout_symbol): For local static var, use 'V', not 'v'.
+
+ * gcc.c (main): Don't handle SIGHUP or SIGTERM if shell ignored it.
+
+ * Makefile, gcc.c: Propagate Make var `libdir' to gcc search path.
+
+ * expr.c (expand_expr): a PARM_DECL with no rtl can occur in size of
+ `a' in `foo (a,i) int i; struct {int x[i];} a;', so report an error.
+
+ * flow.c (insn_dead_p): insn that makes stack bigger is never dead.
+ * combine.c (try_combine): Don't splice out stores into stack ptr.
+
+ * reload.c (find_equiv_reg): Test given regno for OVERLAPPING_REGNO_P.
+
+ * varasm.c (assemble_variable): Use saveable_obstack for allocation.
+
+Thu May 26 01:17:00 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * integrate.c (save_for_inline): Clear unused slots in parmdecl_map.
+ (There may be some non-parm regs below max_parm_regno.)
+ * integrate.c (copy_for_inline): Don't crash if parmdecl_map elt is 0.
+
+ * Don't fail to output a static inline function that was referenced
+ via a local extern decl before its definition.
+ * expr.c (expand_call): If need to mark a fcn decl addressable,
+ mark the identifier addressable also.
+ * typecheck.c (mark_addressable): If marking fcn addressable,
+ mark the identifier as well.
+ * decl.c (start_function): If identifier was marked addressable,
+ propagate it to the function.
+
+ * parse.y (yylex): Check for ERANGE after atof is called.
+ (Sun doesn't report ERANGE.)
+
+ * loop.c (may_trap_p): Any floating arithmetic may trap.
+
+Wed May 25 00:03:34 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * parse.y: Delete `noalias'.
+ (asm_operand): Don't allow this to be empty.
+ (asm_operands): Do allow this to be empty.
+
+ * reload.c (operands_match_p): Don't let REG and SUBREG match
+ if the reg isn't a hard reg.
+ No longer nec. to check reg_renumber, now that reload
+ substitutes the hard regno.
+
+ * reload1.c (reload): Counting existing spilled groups,
+ check HARD_REGNO_MODE_OK so we don't get fooled by an odd-even pair.
+ Spill entire need for new groups before spilling any solitary regs.
+ Reg already counted against max_nongroups can't become part of a group.
+ (new_spill_reg): Do bookkeeping associated with a new spill-reg.
+ (n_spills): This var is now static, no longer passed as arg
+ within the file.
+
+ (reload_reg_class_lower): Handle all group-reloads before solitaries.
+ (choose_reload_targets): therefore #if 0 the special code for
+ finding solitary registers that aren't suitable for groups.
+ But fix two bugs in it: braino deciding whether a reload
+ is looking for 1 register (not a group). Use CLASS_MAX_NREGS.
+ Also braino deciding whether a spill reg can be in a group.
+ Did not fix bug that it fails to test HARD_REGNO_MODE_OK,
+ so it might split up an even-odd pair.
+
+ * vax.md: Special patterns for 8 and 16-bit fields, to make
+ move-insns (like the ones for the 68k).
+
+ * tree.c (convert_to_integer): Pass truncation down thru COND_EXPR
+ as through a binary operator.
+
+ * typecheck.c (build_cond_expr): If unpromoted operand types match,
+ don't promote them--let containing expression promote (just once).
+
+Tue May 24 14:46:26 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * combine.c (subst): Simplify (subreg (sign_extend X) 0).
+
+ * tm-hp9k320.h: Delete NO_DBX_FORMAT.
+ * Most tm...h files: Define DBX_DEBUGGING_INFO.
+ * dbxout.c: Change conditional to DBX_DEBUGGING_INFO.
+
+ * integrate.c (expand_inline_function): If inline fcn was declared to
+ return QI, but actually computes an SI, use SImode for INLINE_TARGET
+ but actually return a QI.
+
+ * varasm.c (force_const_mem): Failed to determine alignment bdry
+ from machine mode.
+
+ * jump.c (jump_optimize): Don't delete (move X Y) if X or Y is a
+ PRESERVE_DEATH_INFO_REGNO_P register.
+
+ * final.c (output_addr_const): In PLUS, output constant term last.
+
+ * final.c (final): Before outputting an insn, do FINAL_PRESCAN_INSN.
+
+ * final.c (next_block_index): No longer static.
+ (final): Add SDB_DEBUGGING_INFO cases for outputing NOTEs
+ for beginning and end of a block.
+ (output_source_line): Add SDB_DEBUGGING_INFO case for line number.
+ * varasm.c (assemble_function): Add code for SDB symbol output.
+
+ * gnulib.c: Allow config to override INTIFY.
+ New macro SFVALUE for data type to return a single-float in.
+
+ * combine.c (remove_death): No longer `static'.
+
+ * reload1. (choose_reload_targets): PRESERVE_DEATH_INFO_REGNO_P
+ selects hard regs for which death info should be updated for final.
+
+ * reload1.c (reload_as_needed): Let INSN_CLOBBERS_REGNO_P
+ prevent inheritance of certain reloads.
+
+ * reload.c (find_equiv_reg): Let OVERLAPPING_REGNO_P reject
+ an equiv reg. Needed for funny float regs on 80387.
+
+ * cccp.c (do_ident): Define #ident as a no-op if IDENT_DIRECTIVE.
+ Warn if pedantic.
+ (do_sccs): Warn if pedantic.
+
+ * emit-rtl.c (restore_reg_data): Set cur_insn_uid--prevent duplicates.
+
+Sun May 22 12:25:06 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * Version 1.22 released.
+
+ * reload1.c (reload): Spilling isn't finished till max_nongroups is 0.
+
+ * tm-encore.h (PRINT_OPERAND): No `$' before a CONST.
+
+Sat May 21 13:08:54 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * fold-const.c (combine): Typo in MIN_EXPR, MAX_EXPR.
+
+ * reload1.c (reload): Was counting insn_groups as total size of groups,
+ not number of groups.
+ A new spilled group counts against group-needs of superclasses.
+
+ * parse.y (parmlist{,_or_identifiers}_1): In error case,
+ return a tree list just as in the other cases.
+
+Fri May 20 02:14:51 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * config-vax.h, config-m68k.h: If __GNUC__, use builtin-alloca.
+
+ * genpeep.c (match_rtx): Generated code was testing the wrong rtx
+ when testing an int or string at a nonzero index in the rtx.
+
+ * reload.c (find_reloads): Typo checking `modified' for conflict
+ with an earlyclobber.
+
+ * reload.c (find_equiv_reg): Reject stack ptr as return value.
+
+ * expr.c (expand_builtin): Alloca must do pending stack adjust.
+
+Thu May 19 13:01:01 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * flow.c (propagate_block): Skipping back across libcall didn't happen
+ due to failing to set PREV.
+
+ * expr.c (emit_library_call): Code to increment and decrement
+ current_args_size broke since emit_call_1 was changed to restore it.
+
+ * combine.c (try_combine): When i1 or i2 auto-incs a reg, don't combine
+ if i3 uses that reg.
+
+ * config-hp9k3.h: #define bcopy, bcmp, bzero here.
+ * conf-hp9k320.h: Delete file.
+
+ * integrate.c: Don't include strings.h--no need.
+
+ * stmt.c (expand_asm_operands): Don't make zero-length vectors.
+
+ * loop.c (scan_loop): After a fcn call, maybe-trap insns can't move.
+ The fcn call might exit and that would prevent the trap.
+
+ * reload1.c (reload): Set reload_first_uid to next uid to be used.
+ * reload.c (find_equiv_reg): Use reload_first_uid to ignore insns
+ that are due to reloading--only if reload_reg_p is not 0 or 1.
+
+Wed May 18 22:11:20 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * typecheck.c (build_unary_op): Don't complain about array
+ as argument to `!'.
+
+ * decl.c (pushdecl): If locally declaring an extern function,
+ check the identifier's global value in case it's an inline function.
+
+Mon May 16 03:06:08 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * output-ns32k.c (output_shift_insn): New fn, maybe turn shift to adds.
+ (reg_or_mem_operand): Predicate for a non-immediate general_operand.
+ * tm-ns32k.h (CONST_OK_FOR_LETTER_P): Define letter K.
+ * ns32k.md: Use output_shift_insn for various addr insns that shift.
+ Don't allow nonexplicit constants in lprd, multiply or truncate insns.
+ Use reg_or_mem_operand for constraint in op1 of divide insns;
+ a constant there causes regclass to screw up.
+ Split alternative constraints on the bit-field insns to avoid
+ out-of-range operands in exts, inss. Some cases of extraction
+ can be done faster via memory.
+
+ * flow.c (mark_set_1): When adding a REG_DEAD note, inc reg_n_deaths.
+
+ * dbxout.c (dbxout_type_def): Do nothing for {integer,char}_type_node.
+
+Sun May 15 00:56:44 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * tm-sequent.h, tm-ns32k.h, tm-encore.h (PRINT_OPERAND):
+ Was treating SF's as SI's.
+
+ * expr.c (emit_move_insn): Check all CONST_DOUBLEs for
+ LEGITIMATE_CONSTANT_P and put them in memory if not.
+
+ * local-alloc.c (combine_regs): Allow a reg to be tied to a qty
+ if the reg's class is contained in the qty's class
+ (as well as if the reg's class contains the qty's class as before).
+ Rename qty_reg_class to qty_min_class and make it the smallest
+ class of any reg tied to the qty.
+ (reg_class_subset_p, reg_meets_class_p, update_qty_class):
+ New subroutines to implement this.
+ (local_alloc): Init reg_qty to -1 for pseudos not in cur. basic block.
+ (reg_is_born): Abort if pseudo not in basic block has -2 in reg_qty.
+
+ * jump.c (rtx_renumbered_equal_p): Insist that modes of REGs match.
+
+Sat May 14 01:05:35 1988 Richard Stallman (rms at lucky-charms.ai.mit.edu)
+
+ * stmt.c (expand_return): Empty frame frame_offset isn't nec. 0.
+
+ * expr.c (emit_call_1): Use stack_size_rtx everywhere appropriate.
+
+ * decl.c (init_decl_processing): Set sizetype to `unsigned long'
+ if `int' is less than a word.
+
+ * stddef.h (size_t, ptrdiff_t): Both are now long.
+
+Fri May 13 01:06:00 1988 Richard Stallman (rms at lucky-charms.ai.mit.edu)
+
+ * emit-rtl.c (gen_lowpart): Handle non-lowpart subreg as arg.
+
+ * recog.c (register_operand): VOIDmode means allow any mode.
+ (immediate_operand, nonmemory_operand): Likewise.
+
+ * emit-rtl.c (classify_insn): Update for changed CALL_INSN format.
+ (emit): New function to emit an rtl pattern as the right kind of insn.
+ * jump.c (simplejump_p): No longer static.
+
+ * genemit.c (gen_expand): For match_operand at top level, call `emit'.
+ Use `emit_call_insn' when appropriate.
+ (gen_exp): Handle rtx's that contain strings.
+
+ * final.c, symout.c: If not NO_DBX_FORMAT, include stab.h to get the
+ N_... symbols. Use their default definitions only if they're undef.
+
+ * expr.c (expand_call) [no PUSH_ROUNDING]: Always set argblock
+ if there are any stack-passed arguments.
+
+ * typecheck.c (build_unary_op): Mark all increment-exprs volatile.
+
+ * recog.c (reg_renumbered_fits_class_p): Delete private copy of
+ reg_class_contents.
+
+ * reload1.c (forget_old_reloads): Handle PARALLEL case by recursion.
+ Explicit store into a spilled reg invalidates old reloaded contents;
+ this can occur when we drop through into a basic block whose need was 0
+ (and so whose local pseudos were not spilled).
+
+ * gcc.c (main): If -v, print gcc's own version; also no error msg
+ if no input files.
+
+ * loop.c (may_trap_p): Mem ref to nonconstant address may trap.
+ (scan_loop): Check may_trap_p only when insn is in other respects ok.
+
+ * cexp.y: #include config.h (for decl of alloca on some machines).
+
+Thu May 12 17:24:19 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * regclass.c (regclass): When inserting an insn at start of block,
+ update basic_block_head.
+
+Wed May 11 00:47:09 1988 Richard Stallman (rms at corn-chex.ai.mit.edu)
+
+ * stmt.c (assign_parms): DECL_OFFSET should be offset as passed
+ (not including big-endian width-change correction).
+
+ * typecheck.c (shorten_compare): Set unsignedp[01] right in case
+ where get_narrower makes no change.
+ (build_binary_op_nodefault): Likewise for shortening shifts.
+
+ * stmt.c (expand_end_case): Use type_for_size to get the type
+ to convert the index to, since `int' is wrong if -mshort.
+
+ * decl.c (grokdeclarator): Don't check PARM type for completeness.
+ (grokparms): If fn definition, check all parm types for completeness.
+ (store_parm_decls): Likewise.
+
+Tue May 10 22:42:13 1988 Richard Stallman (rms at corn-chex.ai.mit.edu)
+
+ * typecheck.c (store_init): For invalid init, store error_mark_node.
+ * varasm.c (assemble_variable): Ignore error_mark as an init.
+ * stmt.c (expand_decl): If init is error_mark, init to 0 if possible.
+ This avoids a spurious "uninitialized variable" warning.
+
+Sun May 8 17:08:07 1988 Richard Stallman (rms at lucky-charms.ai.mit.edu)
+
+ * tm-hp9k320.h: Define STRUCTURE_SIZE_BOUNDARY.
+
+ * decl.c (get_parm_info): Replaces get_parm_types. Returns a tree_list
+ containing parmdecls and tag list as well as type list.
+ (grokparms): Accept that tree_list as argument.
+ (grokdeclarator): Calling grokparms, say "not a definition" for the
+ function declarators for arg or value types within a definition.
+
+ * parse.y: Call get_parm_info.
+ (parmlist_or_identifiers): If identifiers, make a tree_list
+ like the one get_parm_info returns.
+
+Fri May 6 16:44:19 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * m68k.md (casesi): Delete template aside from match_operand's.
+
+ * tm-encore.h: New file from Robert Brown.
+
+ * ns32k.md: Use %c in some addr insns.
+ (tst*): Use {d,f,}const0_rtx to make the constant 0; OS-independent.
+ (call, call_value): Use %? before address in a bsr.
+
+ * output-ns32k.c (print_operand_address): To output a local label,
+ use `output_asm_label'.
+ Make SEQUENT_ADDRESS_BUG conditionals happen at compile time.
+
+ * tm-ns32k.h: Delete SEQUENT_HAS_FIXED_THEIR_BUG.
+ (PRINT_OPERAND): Output nothing for `%?'.
+ * tm-sequent.h: (PRINT_OPERAND): Output nothing for `%?'.
+
+ * final.c (output_asm_label): No longer `static'.
+
+Thu May 5 09:03:37 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * explow.c (memory_address): Ignore flag_force_reg unless optimize.
+ Also ignore it for addresses of stack slots (avoid invalid REG_EQUIVs).
+
+ * typecheck.c (digest_init): If traditional, allow `char x[100]=0;'.
+
+ * tree.c (get_unwidened): Don't alter a COMPONENT_REF if
+ innerprec equals the precision of the existing type.
+ It was changing pointers to integers.
+
+ * m68k.md (movdi): Put all fpregs in separate constraint alternatives
+ and handicap them so spill reg won't be an fp reg.
+
+ * parse.y (yyerror): Use the arg as part of the error message.
+
+ * decl.c (start_function): Give the RESULT_DECL type int rather
+ than char or short.
+ * typecheck.c (c_expand_return): Convert value from fn's return type
+ to the RESULT_DECL's type.
+
+ * Avoid generating dbx xrefs to enums, since dbx loses on them.
+ Do this by outputting all types in order of definition.
+ This is done only for top-level types; problem remains for local ones.
+
+ * decl.c (finish_decl): Do rest_of_decl_compilation for TYPE_DECLs.
+ * toplev.c (rest_of_decl_compilation): Do dbxout_symbol for them.
+
+ * dbxout.c (dbxout_symbol): Check DECL_RTL only for fns and variables.
+ For a TYPE_DECL, ignore it if the type was already output
+ and its preferred name is the TYPE_DECL. Else output type in full.
+
+ * decl.c (pushdecl): Don't prefer typedef names to type tag names.
+
+ * stor-layout.c (chain_type): Build chain in forward order.
+
+
+ * tm-3b1.h (ASM_OUTPUT_CASE_LABEL): Error getting length of table.
+
+ * tm-3b1.h: #define SGS_3B1 was missing.
+
+ * typecheck.c (build_compound_expr): Ignore non-volatile subexprs.
+
+ * fold-const.c (fold): Simplify (unsigned) foo >= 0, etc.
+
+ * stor-layout.c (layout_type): Set TYPE_PRECISION of ptr types.
+
+Wed May 4 08:06:25 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * parse.y: Don't use the Bison @ construct, since it makes parser slow.
+
+ * decl.c (finish_function): Delete FILENAME and LINE args.
+
+ * typecheck.c (digest_init): No pedantic warning for array="string".
+
+Tue May 3 09:09:30 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * toplev.c (main): Ignore `-Wcomment'.
+ * gcc.c: Pass -Wall to cpp (which treats it like -Wcomment).
+
+ * tm-isi68.h: Greatly simplified; now works only with GAS.
+
+ * tm-m68k.h (EMPTY_FIELD_BOUNDARY): now 16 (right on Sun, ISI and HP).
+ * tm-sun3.h: No need to redefine it.
+
+ * decl.c (finish_struct): Don't ever make DECL_ALIGN smaller.
+
+ * decl.c: Rename min, max to MIN, MAX.
+
+ * typecheck.c (convert_for_assignment): Avoid warning if assigning
+ a `void *' from a `const void *'.
+
+ * combine.c (FAKE_EXTEND_SAFE_P): Turn off for mem refs; avoid faults.
+
+Mon May 2 07:28:27 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * tm-vax.h: Support -mg switch to use g-float instead of d-float.
+ New macros TARGET_G_SWITCH, ASM_DOUBLE_CHAR.
+ Changes in TARGET_SWITCHES, ASM_OUTPUT_DOUBLE.
+ Define code `#' for PRINT_OPERAND.
+ * vax.md: use `#' in opcodes for doubleword float.
+
+ * tm-vax.h: Define UDIVSI3_LIBCALL and UMODSI3_LIBCALL.
+
+ * cccp.c (main, do_include): Implement -I- switch.
+
+ * jump.c (jump_optimize): When hunting NOTE_INSN_FUNCTION_END,
+ skip final RETURN (found on the vax).
+
+ * toplev.c (main): -Wall is equiv to all -W switches combined.
+
+ * stmt.c (expand_decl, expand_end_bindings,
+ expand_{start,end}_function). The -noreg treatment of `register' vars
+ is extended to vars used as addresses of vars in memory (varying-size
+ structures).
+ (use_variable): Emit USE for regs used in specified rtx.
+
+ * cse.c (fold_cc0): Stack-frame addresses are always nonzero.
+ (fold_rtx): 0200 bit in prev_insn_cc0 means only zeroness is known.
+
+ * parse.y (parmlist): poplevel needs 3 args.
+
+Sun May 1 07:20:34 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * decl.c (start_function): typo checking for incomplete return type.
+
+ * emit-rtl.c (restore_reg_data): If a pseudo appears nowhere,
+ don't leave its slot empty; create a pseudo for that slot.
+
+ * Version 1.21 released.
+
+ * expr.c (expand_call): Merge duplicate code for structure_value_addr.
+
+ * emit-rtl.c (restore_reg_data): Delete error check; it's legit for
+ a pseudo reg to appear nowhere in the rtl.
+
+Sat Apr 30 07:35:31 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * integrate.c (copy_rtx_and_substitute): Fix typo for arg_pointer_rtx.
+
+ * decl.c (poplevel): Undo previous change with #if 0.
+
+ * stmt.c: `struct nesting' now records the depth on the stack.
+ Each expand_start... must update and record the depth;
+ each expand_end... uses macro POPSTACK to pop.
+ This way, if a level isn't explicitly popped, it won't cause
+ circular structure.
+
+ * dbxout.c (dbxout_type): Replace with main variant only if incomplete.
+
+ * typecheck.c (build_unary_op): Test of `pedantic' was backwards.
+
+ * expr.c (STACK_BYTES): Typo in definition.
+
+ * typecheck.c (build_binary_op_nodefault): Rename code1 to code0,
+ and likewise for code2, tt1, tt2.
+
+ * expr.c (expand_call): Wrong arg order for warning_with_decl.
+
+Fri Apr 29 08:41:06 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * integrate.c (copy_decl_tree): New arg is depth in recursion.
+ Always discard the outermost LET_STMT being copied; never discard any
+ others. This way the copied LET_STMTs correspond to the copied NOTEs.
+
+ * varasm.c (decode_rtx_const): For SYMBOL_REF, use string address
+ not address of the rtx. Library fns have only one copy of the name
+ but many copies of the SYMBOL_REF.
+
+ * expr.c (emit_call_1): New arg OLD_ARGS_SIZE is used to reset
+ current_args_size.
+ (emit_library_call, expand_call): Pass new arg; don't restore it here.
+
+ * flow.c (life_analysis): Don't mark sp live at end if fn is empty.
+
+ * parse.y (parse_or_identifiers_1): Handle `error' in here, not in
+ callers notype_declarator etc. Also read the closeparen here.
+
+Thu Apr 28 12:43:52 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * expmed.c (expand_shift): In extzv strategy, handle the operand
+ predicates for operands 0, 1 and 3. (Not needed for 2.)
+ * vax.md: extzv pattern for SImode op1 must recognize general_operand
+ since the pattern named "extzv" allows them.
+
+Wed Apr 27 00:52:44 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * expr.c (emit_call_1): New arg NEXT_ARG_REG describes # regs
+ used for passing args.
+ (emit_library_call, expand_call): Provide that argument.
+
+ * explow.c (round_push): New fn: round arg up to STACK_BOUNDARY.
+ * expr.c (expand_builtin): Use round_push on size for __builtin_alloca.
+ * stmt.c (expand_decl): Likewise for variable-size objects.
+ * expr.c (expand_call): Likewise for args_size.var.
+ Also use STACK_BOUNDARY to round a constant arg-block size.
+ Pass emit_call_1 that rounded value.
+ (emit_library_call): Round arg_size with STACK_BOUNDARY.
+ * tm-spur.h: Define STACK_BOUNDARY instead of ROUND_CALL_BLOCK_SIZE.
+ * tm-m68k.h: Define STACK_BOUNDARY as 16.
+
+ * expr.c (emit_call_1): Don't change current_args_size.
+ (emit_library_call, expand_call): Always restore current_args_size
+ to ambient value, after calling emit_call_1.
+
+ * tm-hp9k320.h: Don't define USG here.
+ * config-hp9k3.h: New file. USG defined here.
+
+ * tm-3b1.h: #undef ASM_OUTPUT_ASCII (a defn came from tm-hp9k320.h).
+
+ * decl.c (grokdeclarator primarily): Cast all RID_... to (int) before
+ using them in arithmetic. Placates CC on Sequent.
+
+ * emit-rtl.c (emit_jump_insn): Return proper value, for a SEQUENCE.
+ * emit-rtl.c (emit_call_insn): Handle SEQUENCE like emit_jump_insn.
+
+Tue Apr 26 02:41:26 1988 Richard Stallman (rms at lucky-charms.ai.mit.edu)
+
+ * cccp.c (macroexpand): If traditional, don't disable called macro.
+ (macarg1): Was failing to count backslash-newline inside a string
+ in a macro arg as part of file's linenumber.
+
+Mon Apr 25 18:46:53 1988 Richard Stallman (rms at lucky-charms.ai.mit.edu)
+
+ * jump.c (jump_optimize): Don't do April 20 optimization on first
+ iteration; let other simpler opts be done before this is considered.
+
+Sun Apr 24 02:45:28 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * tree.c (staticp): a CONSTRUCTOR can be static.
+
+ * varasm.c (output_constant_def): Always return memref, not address.
+
+ * decl.c (complete_array_type): New fn, make an array type complete
+ based on an initializer.
+ (finish_decl): Use complete_array_type.
+ * parse.y (expr_no_commas): When parsing a constructor,
+ Use complete_array_type on constructors for incomplete array types.
+
+ * typecheck.c (digest_init, store_init_value,process_init_constructor):
+ It's now TREE_STATIC, not TREE_ADDRESSABLE, that records that all elts
+ in a CONSTRUCTOR are simple constants.
+ (digest_init): A CONSTRUCTOR with non-null type is treated as ordinary
+ expression, not as a braced initializer.
+ Allow init of an array from an array-valued expr; warn if pedantic.
+ * expr.c (expand_expr, CONSTRUCTOR case): Put in memory only if static.
+ Was making an extraneous level of MEM; output_constant_def does it all.
+
+ * typecheck.c (build_unary_op): Allow ADDR_EXPR of static CONSTRUCTOR.
+ (default_conversion): Likewise.
+ (initializer_constant_valid_p): Constructor is ok if static.
+
+ * gcc.c: Change -fnostd... to -nostd...
+ * cccp.c (main): Likewise.
+
+ * Everywhere: Use REG_NOTE_KIND to get the kind of a reg note.
+
+ * rtl.c (find_regno_note): New function.
+ * flow.c (flow_deadp): Deleted; caller uses find_regno_note.
+ * global-alloc.c (reg_dead_p): Deleted.
+ (global_conflicts): Use find_regno_note instead of reg_dead_p.
+
+ * final.c (final) Use find_reg_note to look for a REG_INC.
+ * combine.c (insn_has_inc_p): deleted; callers use find_reg_note.
+ (try_combine): Use find_reg_note whenever looking for a REG_INC.
+ (regno_dead_p, remove_death): Check the REG_NOTE_KIND before assuming
+ that the datum in it is a REG.
+ * reload1.c (reload): Use find_reg_note to find a REG_EQUIV.
+
+ * gcc.c: Don't delete .o files if not all compilations succeed.
+ (record_temp_file): New arg SUCCESS_ONLY--delete file only if succeed.
+ (delete_temp_files): New arg SUCCESS says compilation succeeded.
+ (store_arg): Now 3 possibilities for arg TEMPNAMEP; 2 = del on success.
+ (do_spec_1): For %d, set delete_this_arg to 2.
+
+ * decl.c (poplevel): Warn about any still-incomplete type-tags.
+
+Sat Apr 23 02:54:16 1988 Richard Stallman (rms at rice-krispies.ai.mit.edu)
+
+ * expr.c (expand_builtin): For alloca, round arg up to multiple
+ of PARM_BOUNDARY. Also to convert it to Pmode unless it already is.
+
+ * stor-layout.c (layout_union): Bug in 14 April change:
+ use caller-specified alignment as minimum, not as maximum.
+
+ * parse.y (skip_white_space): Avoid infinite loop on unterm. comment.
+
+Fri Apr 22 00:22:59 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * cccp.c: Text following #else or #endif is just a warning.
+ (rescan): Digit-case was dropping into the $-case; reorder.
+
+ * cccp.c (rescan): Comment start when -traditional was output as
+ `/*'; should be nothing.
+
+ * jump.c (jump_optimize): Fix prev change:
+ do nothing if range1end == range2end;
+ don't lose any NOTEs when splicing.
+
+ * flow.c (propagate-block): For CALL_INSN, clobber the call-used regs
+ only after mark_set_regs is done; avoids confusion about lifespan
+ of function value reg.
+
+ * gcc.c: Pass -Wcomment to cpp.
+
+ * cccp.c (main, rescan): If -Wcomment, warn if `/*' inside comment.
+
+ * decl.c (duplicate_decls): Ignore `inline' decl following definition.
+
+ * m68k.md (casesi): Split it up into subroutines, so insns emitted
+ by the call to memory_address (on 68000) come in the right place.
+
+ * combine.c (record_dead_and_set_regs): Notice storing in a SUBREG.
+
+ * integrate.c (expand_inline_function): Insn to copy a subroutine's
+ return-value was being output twice, once incorrectly.
+
+ * reload.c (find_equiv_reg): A stack-push insn does not invalidate
+ an equiv for a goal in memory.
+ Any other write to memory does invalidate any goal in memory
+ (PARALLEL case failed to check for this).
+
+ * expmed.c (expand_shift): In the extzv clause, force shifted value
+ out of memory if -fforce-mem.
+
+ * print-tree.c (prtypeinfo): Some attributes were missing.
+ (dump): In ..._TYPE nodes, ignore the TREE_CHAIN field.
+
+ * cse.c (note_mem_written): Pushing on stack does not invalidate mem.
+
+ * vax.md (extv/andl peephole opt): Made incorrect code if output was
+ pushed on stack. Added special case code.
+ (extv, extzv for SImode operand): Require register_operand.
+
+Thu Apr 21 00:24:52 1988 Richard Stallman (rms at corn-chex.ai.mit.edu)
+
+ * stmt.c (assign_parms): Round current_function_pretend_args_size up.
+
+ * integrate.c: `pushlevel' arg was missing.
+
+ * dbxout.c (dbxout_type): Undo rest of March 29 change:
+ When a named type is first seen inside another type, output an xref
+ and let the real definition come out later.
+ It is strange that Sun dbx has sometimes appeared to demand
+ one strategy and sometimes appeared to demand the other.
+
+ * typecheck.c (convert_for_assignment): Allow conversion to or from
+ `const void *', etc., unless pedantic.
+
+ * decl.c (get_parm_types): For `foo (void){}', set last_function_parms
+ to nil so store_parm_decls won't lose.
+
+ * combine.c (subst): (plus (plus X N) -N) => X.
+
+ * explow.c ({anti_,}adjust_stack): Don't make a copy of
+ `stack_pointer_rtx'.
+
+ * integrate.c (expand_inline_function): Typo testing for the
+ USE that indicates a CALL_INSN's value is being returned.
+
+ * expr.c (expand_builtin, alloca case): Copy arg to reg before
+ adjusting stack, to avoid invalid insns on some machines.
+
+Wed Apr 20 00:15:14 1988 Richard Stallman (rms at rice-krispies.ai.mit.edu)
+
+ * typecheck.c (build_binary_op_nodefault): When shortening,
+ get_narrower may make no change because ARGn is already narrow.
+ In this case, set UNSIGNEPn from ARGn's type.
+
+ * typecheck.c: Rename ARG1,ARG2 to ARG0,ARG1, etc. in several fns.
+
+ * tm-vax.h: Turn off continuation on DBX output.
+
+ * typecheck.c (build_function_call): Don't change __builtin_ffs to an
+ FFS_EXPR. Note that __builtin_alloca has always made a CALL_EXPR.
+ * expr.c (expand_builtin): New function expands all CALL_EXPRs that
+ are really built-in functions.
+ (preexpand_calls): Do nothing to a CALL_EXPR for a built-in function.
+
+ * loop.c (count_loop_regs_set): Don't move a reg that is in a CLOBBER.
+
+ * stupid.c (stupid_mark_refs): Was getting hard reg's mode from
+ the wrong place.
+
+ * rtl.c (note_stores): Typo in checking vector elt for SET vs CLOBBER.
+
+ * stmt.c (expand_end_bindings): If restoring stack level,
+ first do pending stack adjust (so it won't be done erroneously after).
+ (expand_goto): likewise.
+
+ * rtl.h: LABEL_NUSES was an rtx. It should be an int.
+ * stmt.c (expand_label, expand_goto): Delete frobbing with LABEL_NUSES;
+ the value stored there was the same as the CODE_LABEL rtx.
+
+ * jump.c (jump_optimize): Detect if (foo) ...; else { ... break;}
+ and change to if (! foo) { ... break;} else ...; so can drop out.
+ (next_label): New fn returns the next label after given insn.
+
+Tue Apr 19 21:30:05 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * flow.c (insn_dead_p): Delete special handling for stack ptr.
+ (mark_set_regs, mark_used_regs): Likewise.
+ (life_analysis): Mark stack ptr live at end of fn if necessary.
+ (propagate_block): Mark stack ptr live leading up to a CALL_INSN.
+
+ * jump.c (jump_optimize): #if 0 around stack-adjust-deletion code.
+
+ * cse.c (fold_rtx): Change const_arg from an array to 3 separate
+ scalars for the first three operands.
+ Handle SIGN_EXTEND and ZERO_EXTEND.
+
+ * integrate.c (copy_rtx_and_substitute): If arg is 0, return 0.
+ (expand_inline_function): Separate vars for old pattern and new insn.
+
+ * expr.c (expand_call): Set TREE_ADDRESSABLE if call is not inlined.
+
+Tue Apr 19 02:25:22 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * Version 1.20 released.
+
+ * tm-ns32k.h: Define new reg class GEN_OR_FLOAT_REGS
+ so that GENERAL_REGS and FLOAT_REGS have a union.
+
+ * tm-ns32k.h (GO_IF_LEGITIMATE_ADDRESS): Recognize a stack-push.
+ * ns32k.md: Many constraints must now allow or reject pushes.
+ Delete the special patterns for pushing.
+
+Mon Apr 18 06:02:39 1988 Richard Stallman (rms at rice-krispies.ai.mit.edu)
+
+ * reload1.c (forget_old_reloads): For a multiword hard reg,
+ forget old reloads for each word.
+
+ * reload.c (find_reloads): Typo in calling push_replacement.
+
+ * tm-ns32k.h (HARD_REGNO_MODE_OK): Failed to allow fp regs for SFmode.
+
+Sun Apr 17 01:21:35 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * tm-sequent.h (PRINT_OPERAND): Handle absolute integer memaddress.
+
+ * ns32k.md: Add DImode push insns. Add QImode and HImode push insns.
+ Supply missing statement in movsf.
+
+ * dbxout.c (dbxout_type): Don't contin before 1st field of struct.
+
+ * dbxout.c (dbx_continue): Use DBX_CONTIN_CHAR instead of backslash.
+
+ * loop.c (scan_loop): Ov vax, the "loop-entry jump" can be a return,
+ in which case perhaps there is no label following it.
+ Detect phoniness of loop before looking for that label.
+
+ * decl.c (init_decl_processing): Builtin fn names start with `__'.
+
+ * typecheck.c (shorten_compare): Warn about constant result only in
+ cases like (char)x < 0x80, where old C compilers made it -0x80.
+
+ * vax.md: All jbs/jbc/jlbs/jlbc patters with op0 in SImode
+ must reject mode-dependent memory addresses.
+
+ * recog.c (mode_independent_operand): Test for general operand
+ that doesn't have a mode-dependent memory address.
+
+ * varasm.c (assemble_function): ASM_DECLARE_FUNCTION_NAME, if def,
+ is now responsible for outputting the function name as a label.
+
+Sat Apr 16 05:02:55 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * cccp.c (do_xifdef): Warn about punctuation or other junk in argument.
+ Warn about no argument. If pedantic, warn if arg starts with digit.
+ If traditional, ignore all after first non-idchar and never warn.
+
+Thu Apr 14 01:12:59 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * integrate.c (expand_inline_function): Typo for addressable parms.
+
+ * cse.c (insert_regs): Copying half a DImode into half of another
+ does not make the two DImode regs equivalent.
+
+ * recog.c (general_operand): Was failing to accept symbol_ref:SI
+ when MODE arg was VOIDmode.
+
+ * expr.c (preexpand_calls): For RTL_EXPR, do nothing.
+
+ * decl.c (start_enum, build_enumerator): Remember default for next one
+ as a tree node (so the high-half isn't lost in a negative one).
+
+ * stor-layout.c (layout_{record,union}): Pay attn to initial value
+ of TYPE_ALIGN in computing final alignment.
+ (layout_union): Round size up to multiple of the alignment.
+
+ * decl.c (finish_struct): Don't alter size after type is laid out.
+ Instead, set TYPE_ALIGN before layout_type.
+
+ * reload1.c (choose_reload_targets): Introduce reg_has_output_reload.
+ If there are two separate reloads (one in and one out)
+ for the same (hard or pseudo) reg, always set reg_last_reload_reg
+ based on the output reload.
+
+Wed Apr 13 21:26:16 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * reload.c (find_reloads_address_1): Always barf if a "constant"
+ register is autoincremented.
+
+ * parse.y (structsp): suspend_momentary before start_enum;
+ else some nodes made by start_enum might be momentary.
+
+ * stmt.c (expand_start_case): New arg is nominal type for comparison
+ (which is the promoted type of the index expression).
+ (pushcase): Always convert VALUE to that nominal type
+ before validating it.
+ * parse.y (case stmt): Promote each case-value before pushcase.
+ * typecheck.c (c_expand_start_case): Promote the index-expr
+ to determine the nominal type, before get_narrower.
+
+Wed Apr 13 12:43:08 1988 Chris Hanson (cph at kleph)
+
+ * tm-hp9k320.h: Define ASM_FORMAT_PRIVATE_NAME. HPUX asm forbids
+ `.' in identifiers, so use `___' (there is some danger in this choice).
+
+Tue Apr 12 23:26:48 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * local-alloc.c (block_alloc): Make 1 extra slot in regs_live_at.
+
+ * stmt.c (optimize_bit_field): Function moved from reload1.c.
+ When need to generate a SIGN_EXTEND or ZERO_EXTEND, make it a separate
+ insn and use gen_extend_insn to make it.
+ * optabs.c (gen_extend_insn): New fn, construct body of an insn
+ to extend Y and store in X.
+
+Mon Apr 11 19:20:57 1988 Richard Stallman (rms at rice-krispies.ai.mit.edu)
+
+ * decl.c (finish_decl): Error if static var has variable size.
+
+ * parse.y (yylex): Warn if int const is out of range.
+
+ * parse.y: New keyword __alignof.
+ * typecheck.c (c_alignof): Given a type, return its alignment in bytes.
+
+ * typecheck.c (c_sizeof{,_nowarn)): Don't return integer_one_node;
+ use build_int to make sure we get something with type `sizetype'.
+
+ * Support variable-sized structures (containing var-sized arrays).
+
+ * stmt.c (assign_parms): Handle parms whose size varies.
+ Use `memory_address' when constructing memrefs to args;
+ no need to set `invalid_stack_slot'.
+ Don't make a REG_EQUIV note for a scalar arg at variable offset.
+ * stor-layout.c (genop, build_int): No longer `static'.
+
+ * stor-layout.c (convert_units): Optimize ceil (ceil(x,2)*2, 4) etc.
+
+ * stmt.c (expand_decl): Don't abort if var-sized object has init.
+ Convert variable size from units of DECL_SIZE_UNIT to units of bytes.
+
+ * expr.c (emit_push_insn): Arg ARGS_SO_FAR is now an rtx.
+ Pay attention to ARGS_ADDR even if machine has push insns.
+ (expand_call): Handle variable-sized arguments.
+ If have any such, push entire arg-block in advance.
+ Record each arg's offset during first loop and don't change args_size
+ during the actual pushing loop; this way the actual pushing loop
+ works regardless of arg-order if arg-block was pushed in advance.
+ (push_block): Copy SIZE to reg unless it's a reg or constant.
+
+ * expmed.c (expand_divmod): If converting CEIL_DIV to FLOOR_DIV,
+ make new pseudo for incremented value, to help cse understand.
+
+Sun Apr 10 00:07:45 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * expr.c (emit_library_call): Two dumb bugs calling emit_call_1.
+
+ * dbxout.c (dbxout_symbol): Handle case of (MEM (REG frameptr)).
+
+ * cccp.c (skip_if_group): Ignore quote-chars if -traditional.
+ (rescan): If -traditional, don't output a space for a comment.
+ (handle_directive): If not -traditional, output a space for a comment.
+
+Sat Apr 9 21:26:51 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * decl.c (get_parm_types): `void' type is error, except as entire list.
+ * parse.y (parmlist_1): `void,...' is error.
+
+ * typecheck.c (pointer_int_sum, pointer_diff):
+ Use an integer type with at least POINTER_SIZE bits.
+ * expr.c (expand_expr, ARRAY_REF): Likewise.
+ * tree.c (type_precision): Prec of a pointer is POINTER_SIZE.
+ (convert_to_pointer): Directly convert any int w/ width==POINTER_SIZE.
+ Other int types convert via an int of that width.
+ (convert_to_integer): Pointers convert via an int of that width.
+
+ * decl.c (init_decl_processing): Use INT_TYPE_SIZE, if def,
+ to set width of `int' and `unsigned int'.
+ (make_index_type): Give new type the width of a long int.
+
+ * tm-m68k.h: Add new -mshort which controls TARGET_SHORT.
+ * tm-m68k.h: Define INT_TYPE_SIZE depending on TARGET_SHORT.
+
+Fri Apr 8 05:02:59 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * typecheck.c (require_complete_type): Fix typo in detection of `void'.
+ (build_function_call): Fix backward test to allow `void' values.
+
+ * dbxout.c (dbxout_tags): Output each tag once even if type is defined.
+
+ * m68k.md (movstrictqi): Reject addr-reg always, for both operands.
+
+ * tm-vax.h (STRUCTURE_SIZE_BOUNDARY): Make this always 8, for BSD.
+ * tm-ultrix.h: New file, overriding STRUCTURE_SIZE_BOUNDARY.
+ [This change has been taken out; tm-ultrix.h is now equivalent to
+ tm-vax.h. I must have been confused when testing PCC.]
+
+ * integrate.c (expand_inline_function): Don't let inline_target
+ be nonzero in BLKmode.
+
+ * decl.c (grokdeclarator): Const array parm becomes ptr-to-const.
+
+Thu Apr 7 05:02:41 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * genoutput.c (bcopy, bzero): Renamed to mybcopy, mybzero
+ so variation in C library and config.h won't affect the results.
+ * genrecog.c (bzero): likewise.
+ * genextract.c (bcopy): Fn deleted; used only in a string constant.
+
+ * varasm.c (force_const_mem): Fix typo in arg decl.
+
+ * toplev.c (compile_file): init_file with main_input_filename
+ so dbx output doesn't lack N_SOL symbols.
+
+ * cccp.c (rescan) [CPLUSPLUS]: Put out // comments as // comments.
+
+Wed Apr 6 14:06:38 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * expr.c: Delete SLOW_ZERO_EXTEND conditionals added March 3.
+ Now that enums types can be unsigned, this isn't needed.
+
+ * emit-rtl.c (emit_jump_insn): Handle SEQUENCEs.
+
+ * genemit.c (gen_expand): Use emit_jump_insn, emit_label, emit_barrier
+ when the insn rtl requires it.
+
+ * m68k.md (subsi3): Prefer to avoid reverse-subtraction alternative.
+
+ * stmt.c (expand_end_case): Let CASE_DROPS_THROUGH control what to
+ emit after the table.
+ * tm-vax.h: Define CASE_DROPS_THROUGH.
+
+Tue Apr 5 15:47:10 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * genemit.c (gen_exp): Handle vectors within exprs.
+
+ * stmt.c (expand_end_case): Pass 5th arg (default_label) to gen_casesi.
+ * m68k.md: Define casesi insn rather than tablejump insn.
+
+ * cccp.c (skip_if_group): For validate_else, pass BP (end of cmd name).
+ Don't call validate_else if do_else or do_endif will detect error.
+
+ * Bug: inline fcns can refer to the return reg with a strict_low_part
+ which confuses expand_inline_function. Fix is to change return reg
+ into inline_target *everywhere* except in or right after a call.
+ * integrate.c (copy_rtx_and_substitute): Delete special case for SET.
+ Replace return-value hard regs with INLINE_TARGET in all contexts.
+ (expand_inline_function): special handling for insn after a CALL_INSN
+ if it copies the function value out.
+ Allow notes and stack adjust insns to intervene
+ between the CALL_INSN and the value-copy.
+
+ * expr.c (emit_call_1): New name for gen_call_1.
+
+ * Bug: ({...}) insns were in wrong place for a subexpression
+ after a sequence point, as in x ? y : ({...}).
+ * tree.def: New tree-code RTL_EXPR holds a sequence.
+ * expr.c (expand_expr): Handle RTL_EXPR by emitting the sequence.
+ * stmt.c (expand_{start,end}_stmt_expr): Use emit_to_sequence
+ to make a sequence from everything within the ({...}).
+ (expand_{start,end,emit}_delayed_expr): Delete these functions.
+ * parse.y (`for'-statements): Don't call them; nothing special needed.
+
+ * parse.y (yylex): Handle syntax L"..." and L'...'
+ (combine_strings): Handle wide strings being combined.
+ * typecheck.c (digest_init): Reject wide string as init for char array.
+ Allow it for an int array, but don't allow a narrow string.
+ * decl.c (init_decl_processing): New var int_array_type_node.
+
+ * parse.y: Define keyword `noalias'.
+ * parse.h: Define RID_NOALIAS.
+
+ * typecheck.c (compparms): Not all parmlists match an empty one;
+ call `compparms1' to filter them.
+
+ * decl.c (groktypename): Remove special case for `void' as parameter.
+ (get_parm_types): Special case for list of one decl with type void.
+
+ * decl.c (build_enumerator): Give enum constants the type `int'.
+ Variable `current_enum_type' eliminated.
+ (finish_enum): No need to repeat `fixup_unsigned_type'
+ since the precision has not changed.
+ * stor-layout.c (layout_type): Allow enum types to be unsigned.
+
+ * emit-rtl.c (unshare_all_rtl): Unshare contents of all reg-notes.
+
+ * parse.y (check_newline): filename is optional in #-lines.
+
+Mon Apr 4 14:36:54 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * typecheck.c (shorten_compare): When data type determines the value,
+ eval the nonconstant arg anyway if it has side effects.
+ (build_conditional_expr): When merging `foo *' with `void *',
+ also allow `const void *'. Result type has merged set of qualifiers.
+ (qualify_type): Merge qualifiers of two types.
+
+ * decl.c (get_parm_types): Store any tags defined in parmlist
+ into `last_function_parm_types'.
+ (store_parm_decls): Add those tags into the current binding level.
+
+ * parse.y (parmlist, parmlist_or_identifier): Pass 0 to pushlevel;
+ no binding levels in C should be transparent to tags.
+
+ * 3b1 support:
+ * tm-3b1.h: New file.
+
+ * m68k.md: Add HPUX_ASM conditionals for shift-by-24-and-compare.
+ In one of the dbra patterns, a HPUX_ASM conditional was backwards.
+ (movhi) [SGS_3B1]: Define the LI... label as in MIT syntax.
+ (addsi3) [SGS]: Syntax for base-displacement differs from MOTOROLA.
+ (subsi3) [SGS]: likewise.
+ (tablejump) [ASM_OUTPUT_CASE_LABEL]: Use 6, not 2, as displacement.
+ This assumes ASM_OUTPUT_CASE_LABEL on 68k is used for a `swbeg'.
+
+ * final.c (final): Use ASM_OUTPUT_CASE_LABEL (if defined) to output
+ any CODE_LABEL followed by an ADDR_VEC or ADDR_DIFF_VEC.
+ It has 4 args; 4th is the insn which is the ADDR_VEC or ADDR_DIFF_VEC.
+
+ * tm-*.h for 68000 (PRINT_OPERAND_ADDRESS): For unscaled indexing in
+ fetch from a branch table, use L and LI symbols as in the scaled case.
+
+ * cccp.c: If SCCS_DIRECTIVE, define #sccs as no-op.
+
+ * integrate.c (output_inline_function): Real start of function
+ is FIRST_PARM_INSN, not FIRST_FUNCTION_INSN.
+
+ * tree.c (build_string): String contents must be saveable (for
+ inline fcn).
+
+ * cse.c (cse_insn): Don't forget to set dest_hash_code when dest
+ is a stack slot (and so its address is not being optimized).
+
+ * emit-rtl.c (restore_reg_data_1): reg_rtx_no must be 1+ largest REGNO.
+
+ * m68k.md (non-SImode bit-field insns): Change constraint to "o,d"
+ so a nonoffsetable memref is handled by reloading its address
+ but a register can still be handled.
+
+ * toplev.c (main): Execute OVERRIDE_OPTIONS, if it's defined.
+
+Sat Apr 2 00:55:21 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * expr.c (convert_move): Handle a SUBREG in direct truncation case.
+
+ * cse.c (lookup_for_remove): Don't test machine mode of registers:
+ Storing in (REG:SI 0) invalidates (REG:DF 0).
+
+ * decl.c (pushlevel): New arg, nonzero means this level is for
+ variables only, not for tags. All calls changed.
+ (lookup_tag): Even if THIS_LEVEL_ONLY, skip variables-only levels.
+ (pushtag): Define it in the first non-variables-only level.
+
+ * dbxout.c (dbxout_type): Undo Mar 29 change, in the DBX_NO_XREFS case.
+ So now each struct or union will contain only nameless cross-refs
+ to any others it uses. The prior change is still in effect when
+ DBX_NO_XREFS is not defined.
+
+ * Implement variable array bounds for parameters.
+ * decl.c (poplevel): Don't crash if DECL_NAME gives 0.
+ * typecheck.c (comptypes): A variable array bound matches anything.
+ * parse.y (parmlist): Call pushlevel, then pushdecl each parm as it
+ is parsed; then poplevel after using get_parm_types to extract the
+ results of the parmlist.
+ * decl.c (get_parm_types): New function; reverse the current decls,
+ put them in last_function_parms, and return a list of their types.
+ (grokparms): Arg is now an idlist or a typelist. Do nothing if latter.
+ (push_parm_decl): New function, like {start,finish}_decl combined
+ for a parm in a parmlist.
+
+ * dbxout.c (dbxout_symbol): Ignore sym if its DECL_RTL is 0.
+
+ * symout.c (symout_block_symbols): Ignore sym if type is error_mark.
+
+Fri Apr 1 11:41:21 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * expr.c (prepare_call_address): New function; given two rtx's
+ for function and context, copy the context to the right hard reg,
+ put the function address in the right place and return an rtx for it.
+ (gen_call_1): No longer do those things. Delete args CONTEXT, PROTECT.
+ (emit_library_call, expand_call): Call `prepare_call_address'.
+ In between that and `gen_call_1', USE the parm registers.
+
+ * tm-hp9k320.h (ASM_OUTPUT_*): Flush uses of output_arith_constant.
+
+ * varasm.c (assemble_variable): Use ASM_FORMAT_PRIVATE_NAME
+ to make the name for a local static variable.
+ * tm-m68k.h, tm-vax.h, tm-ns32k.h, tm-spur.h:
+ Define ASM_FORMAT_PRIVATE_NAME. Use `.', not `$', to separate.
+
+ * tm-m68k.h, tm-ns32k.h (FIX_FRAME_POINTER_ADDRESS):
+ To refer to stack ptr, use stack_pointer_rtx, not a copy.
+
+ * tree.c (build_real_from_string): Function deleted.
+ * parse.y (yylex): Use build_real and atof.
+
+ * parse.y: Allow string concatenation in arg of asm.
+
+ * parse.y (yylex): Always allow `$' in ident, but warn if pedantic.
+ * tm-vms.h: Delete DOLLARS_IN_IDENTIFIERS (no longer tested).
+
+ * cccp.c (rescan, do_define, initialize_random_junk):
+ Always allow `$', but warn if pedantic.
+ (main): If -t, set `traditional'.
+ (collect_expansion): If `traditional', no special handling for quotes
+ and no whitespace added at end of macro definition.
+
+ * expr.c (compare, compare1): Last arg to compare_constants
+ must be a size in bits.
+
+Thu Mar 31 00:31:52 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * expmed.c (expand_mult, expand_divmod, extract_fixed_bit_field):
+ Reject function return register as target if may need to read it.
+ (Reading the return register in an inline function doesn't work.)
+
+ * decl.c (start_function): Delete extra arg to `error'.
+
+ * emit-rtl.c (last_parm_insn): Delete this unused var.
+
+ * make-cc1.com: New version from Kashtan.
+
+ * integrate.c (expand_inline_function): Always set up an INLINE_TARGET
+ for a function that returns a nonvoid nonBLK value.
+ Since `pushlevel' and `poplevel' are called, must also call
+ `expand_{start,end}_bindings' to make a pair of NOTEs.
+ Let them handle USEs at end of scope of formal parameter copies.
+
+ * integrate.c (expand_inline_function): In a new-style CALL_INSN,
+ don't change the result reg into INLINE_TARGET. Also,
+ generate a move insn after the call only if INLINE_TARGET is non-0.
+
+ * integrate.c (copy_decl_tree): Don't crash if DECL_RTL is 0.
+
+ * integrate.c (copy_for_inline): Don't treat `return' rtx's specially.
+
+ * stmt.c (expand_{start,end,emit}_delayed_expr):
+ New fns to handle ({...})'s in expressions output not where parsed
+ (such as third expression in a `for' statement).
+ * parse.y: Call them to handle third expression in a `for'.
+
+ * decl.c (duplicate_decls): Result is `inline' if either OLD or NEW is.
+
+ * emit-rtl.c (emit_note): Return the note, or 0 if none.
+ * stmt.c (expand_start_bindings): Use emit_note's value.
+
+Wed Mar 30 12:48:22 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * obstack.c (_obstack_begin): If ALIGNMENT is 0, use default.
+ Compute default for the alignment of a `double'.
+ * obstack.h (obstack_{begin,init}): Pass 0 for the alignment.
+
+ * flow.c (mark_used_regs): Discard multiple SUBREGs, STRICT_LOW_PARTs.
+
+ ** Call insns that return values are now represented as
+ (set (reg ...) (call ...)), not just (call ...).
+
+ * *.md: Define a "call_value" insn pattern.
+
+ * tm-m68k.h, tm-vax.h, tm-ns32k.h: (NOTICE_UPDATE_CC):
+ These insns invalidate the CC.
+
+ * local-alloc.c (combine_regs): #if 0 special treatment of
+ function value hard reg.
+ (wipe_dead_reg): If hard reg, call reg_is_born so that the death
+ will not be ignored.
+ (reg_is_set): For reg that dies in this insn, mark it dead from now on
+ and post_mark it live after this insn only.
+
+ * combine.c (try_combine): Don't allow a call insn as I1 or I2.
+
+ * loop.c (count_loop_regs_set): Move CALL_INSN into a separate
+ clause. When finding regs that are function addresses, handle
+ both old and new format call insns.
+
+ * flow.c (insn_dead_p): A SET that contains a CALL can't be dead.
+ (volatile_refs_p): Any CALL constitutes a volatile ref.
+ (mark_used_regs): If setting a reg from a volatile ref,
+ treat it like setting a reg whose value will be used.
+
+ * expr.c (gen_call_1): New arg VALREG if nonzero means generate
+ a call_value insn which stores in VALREG.
+ (expand_call): Use `hard_function_value' to make the VALREG arg
+ unless expression has type `void'.
+
+ * expr.c (emit_library_call): New 2nd arg OUTMODE is mode of result.
+ (So can give gen_call_1 the proper value-register.)
+ All callers (here and optabs.c) pass this arg.
+
+ * cse.c (canon_hash): Consider all CALL rtx's volatile.
+
+ ** end of change in representation of call insns.
+
+ * stmt.c (expand_asm_operands): Replace complex lvalues with
+ SAVE_EXPRs here
+ * typecheck.c (c_expand_asm_operands): rather than here.
+
+ * typecheck.c (pointer_diff): Fix typo preventing use of FLOOR_DIV_EXPR
+ when dividing by power of 2.
+ (build_c_cast): Flush unused locals.
+ (store_init_value): likewise.
+ (process_init_constructor): Delete unused 4th arg `for_static'.
+
+ * toplev.c (fatal_io_error): Arg to fprintf was missing.
+
+ * tm-m68k.h (LEGITIMIZE_ADDRESS): Flush extra arg to `emit_move_insn'.
+
+ * decl.c: Delete some unused local vars.
+
+ * stor-layout.c (layout_decl): `packed_size' now unsigned.
+
+Tue Mar 29 14:47:07 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * Version 1.19 released.
+
+ * loop.c (may_trap_p): Nonzero if X is a division that might trap.
+ (scan_loop): If insn might trap, move only if loop always executes it.
+
+ * dbxout.c (dbxout_type): Never output a cross-ref for
+ a type whose definition is known. Sun dbx won't accept them.
+
+Mon Mar 28 12:34:46 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * tm-vms.h (TARGET_DEFAULT): Default is PCC alignment.
+ The VMS compile driver controls the real default.
+
+ * typecheck.c (c_expand_return): Don't ignore return value
+ when its type is void.
+
+ * final.c (final): Forget the condition codes after an `asm'.
+
+ * typecheck.c (build_binary_op_nodefault): Warn about ptr < 0
+ even if not pedantic, but not if traditional.
+
+ * typecheck.c (convert_for_assignment): Don't warn about
+ pointers volatile * vs nonvolatile * if -fvolatile specified.
+
+ * decl.c (store_parm_decls): Among the old-style parm decls
+ there can legitiately be other decls! For example, if a parm
+ is declared `enum {foo, bar} x;', there are decls for `foo' and `bar'.
+ Don't let anything but a PARM_DECL match a parm name;
+ pass all the other decls through into the lexical context.
+
+ * jump.c (jump_optimize): When deleting stack adjusts before a
+ jump-to-return, don't be fooled by intervening NOTEs.
+
+ * tm-sequent.h (PRINT_OPERAND): Output (MEM (MEM (REG))) properly.
+ * output-ns32k.c (print_operand_address): Output (MEM (REG))
+ properly; output stack-pointer as `tos'.
+
+ * flow.c (find_use_as_address): Reject uses within operand 0
+ of a ZERO_EXTRACT or SIGN_EXTRACT reference. It's hard to reload
+ an autoincrement inside these because they can refer to multiple bytes.
+
+ * reload.c (find_reloads): `o' in constraint means any memref
+ (except auto-increment) is acceptable with reloading.
+ Braino: Clear BADOP, not BAD.
+
+ * reload.c (push_reloads): Use rtx_equal_p (via macro MATCHES)
+ when considering reuse of an old reload. Otherwise equal values
+ may get reloaded into different registers, and two MEMs that
+ originally matched may fail to match once reloaded.
+
+ * m68k.md (sign_extract and zero_extract insns):
+ If operand 0 is QI or HImode, don't allow register--only `o'
+ (except in some bftst patterns where bitpos is < 8).
+ And change `m' to `o' in all these patterns.
+
+Sun Mar 27 15:32:54 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * expr.c (expand_expr, case CONSTRUCTOR):
+ Not all aggregates are BLKmode; use the type's mode.
+
+ * gcc.c: Pass -y* to ld.
+
+ * cse.c (struct hash): New member `equivalence_only'.
+ (insert): Initialize it.
+ (cse_insn): Set it to 1 when src_eqv is inserted.
+ When finding cheapest equivalent of something,
+ skip elts that are marked with `equivalence_only'.
+
+ * decl.c (duplicate_decls): Don't call `layout_type'
+ if the type is `error_mark_node'.
+
+ * decl.c (implicitly_declare): If decl will be file-scope,
+ make sure it's a permanent node, and its associated data too.
+
+Sat Mar 26 15:48:50 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * flow.c (insn_dead_p, mark_used_regs): Storing a reg via a
+ ZERO_EXTRACT or SIGN_EXTRACT is dead if the reg isn't needed afterward.
+
+ * stmt.c (expand_start_function): Set current_function_name
+ to the name of this function.
+ * tm-vms.h (MAYBE_VMS_FUNCTION_PROLOGUE): Use current_function_name.
+
+ * expr.c (expand_increment): A SUBREG in op0 can also a be a copy.
+
+ * ns32k.md: Correct range of args for `adjspb' insn.
+ Use `adjspw' when appropriate.
+ New pattern for `lprd' insn.
+ Change some `const_int' predicates to GET_CODE tests.
+
+ * expr.c (expand_call): Eval function before copying args to hard regs.
+
+ * tree.c (make_node, copy_node): Don't get length of a REAL_CST
+ from tree_code_length.
+
+ * expmed.c (extract_fixed_bit_field): In memory-word case, abort
+ if tm.h parms say word could fail to be well-aligned.
+ * tm-ns32k.h: Define STRUCTURE_SIZE_BOUNDARY so they will be aligned.
+ * tm-vax.h: Define STRUCTURE_SIZE_BOUNDARY since Unix CC seems to.
+
+ * tm-vms.h (CPP_PREDEFINES): Predefine __GNU__ and __GNUC__.
+
+Fri Mar 25 13:23:27 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * gcc.c (main): Handle SIGHUP, SIGTERM.
+
+ * expmed.c (expand_bit_and): Don't clobber OP1 when trying andcb.
+
+Thu Mar 24 21:59:09 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * stmt.c (assign_parms): Get size of BLKmode local from the type,
+ not the mode.
+ (expand_function_start): Init frame_offset before calling assign_parms.
+
+Wed Mar 23 23:50:37 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * expr.c (emit_push_insn): When making a move insn,
+ go via emit_move_insn; else fails to put constants into memory.
+
+Tue Mar 22 15:45:10 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * expr.c (expand_increment): Flush special case for register_operand;
+ actually call the predicate whatever it is.
+
+ * genemit.c (gen_expand): Make `operands' a local variable,
+ not a global static one, in the `gen_...' function.
+ Avoids lossage when one `gen_...' fcn calls another indirectly.
+
+ * genoutput.c (output_epilogue): Don't give printf a null string.
+
+Mon Mar 21 15:41:42 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * expmed.c (store_bit_field) [HAVE_insv]:
+ Force VALUE1, not VALUE, into a register.
+
+ * expmed.c (store_fixed_bit_field): Width of mask for clearing
+ the bit-field depends on mode of OP0.
+
+ * ns32k.md (branch and store-flag insns):
+ Test cc_prev_status, not cc_status.
+
+ * expmed.c (extract_bit_field): Delete unused var `omode'.
+
+ * dbxout.c (dbxout_type, dbxout_tag): Use the main variant
+ of the specified type.
+
+ * reload.c (find_reloads): When an alternative succeeds without reload,
+ initialize goal_alternative_matches from this_alternative_matches.
+
+Sun Mar 20 17:58:00 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * tm-sun*.h: Don't predefine `m68k'; Sun's compiler does not.
+
+Fri Mar 18 13:48:29 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * reload.c (find_reloads): Set up goal_alternative_matches
+ *after* the label `finish'.
+
+ * stmt.c (assign_parms): GET_MODE_SIZE needs a mode, not an rtx.
+
+ * recog.c (constrain_operands): Set global var `which_alternative'
+ to indicate which of the alternatives this insn matches.
+
+ * typecheck.c (commontype): long int vs unsigned int
+ gives long unsigned, if long and int are the same width.
+
+Thu Mar 17 15:39:45 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * emit-rtl.c, tree.c: include local version of varargs.h.
+
+ * decl.c (start_function): Clear TREE_EXTERNAL and set TREE_STATIC
+ here rather than in finish_function. Affects the case of
+ `extern foo (); static foo (a) {...}'
+
+ * gcc.c: Handle -fnostdinc and -fnostdlib switches in specs.
+
+ * cccp.c (main): Handle -fnostdinc: don't put default dirs
+ on the chain to be searched.
+
+ * cccp.c (error, warning, error_with_line): No longer print
+ charpos within file; lineno is enough.
+
+Wed Mar 16 16:56:36 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * expmed.c (expand_inc, expand_dec): Handy new subroutines
+ to generate x+=y or x-=y, given x and y as rtl.
+ * expmed.c (expand_divmod): Use them instead of gen_{add2,sub2}_insn.
+
+ * expr.c (emit_move_insn): Return the move insn emitted.
+ Eliminate the code here to move a DImode or DFmode by pieces.
+
+ * emit-rtl.c (emit_insn): Return-value was wrong if emit_to_sequence;
+ cannot use `last_insn' in that case.
+
+ * regclass.c, stupid.c, local-alloc.c, global-alloc.c:
+ Some vars of type HARD_REG_SET should be `register' only
+ if HARD_REG_SET is a macro (ie a scalar).
+
+ * expr.c (move_block_from_reg): New function, converse of
+ move_block_from_reg.
+ * stmt.c (assign_parms): If a BLKmode arrives in regs,
+ copy to a stack slot using move_block_from_reg.
+
+Tue Mar 15 17:33:22 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * regclass.c (regclass): Don't convert to two-operand insns
+ unless optimizing.
+
+ * varasm.c (decode_rtx_const, const_hash_rtx): Fix typos.
+
+ * stmt.c (fixup_var_1): Don't alter insn moving VAR to or from
+ a subreg of a register.
+
+ * cse.c (fold_rtx): Don't fold if result is not LEGITIMATE_CONSTANT_P.
+ Construct all results in new local variable NEW; then test that
+ and decide whether to return it or the original rtx.
+
+ * cse.c (cse_insn): When SRC_EQV is non-0 but set[0] has been
+ cleared, don't insert SRC_EQV in hash table.
+
+ * All insns emitted by a define_expand become part of the SEQUENCE:
+ * SEQUENCE now contains a vector of insns, not of bodies.
+ * insn-emit.c (add_insn): If `emit_to_sequence' nonzero, add the
+ insn to a separate chain, `sequence_first_insn'.
+ (gen_sequence): Take everything on that chain and make a SEQUENCE.
+ (emit_insn): Handle SEQUENCE differently since elts are now insns.
+ (emit_insn_{before,after}): Handle SEQUENCE.
+ (classify_insn): #if 0.
+ * genemit.c (gen_expand): emit all the insns, then call gen_sequence
+ to make the return value.
+ Define two macros DONE and FAIL for use in a DEFINE_EXPAND:
+ Use DONE to inhibit emission of the pattern of the DEFINE_EXPAND.
+ Use FAIL to make the gen_... function return 0.
+
+Mon Mar 14 12:47:28 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * expr.c (expand_expr): Extend the don't-sign-extend-enums hack
+ to COMPONENT_REF. (See 3 March.)
+
+ * tm-*.h (FUNCTION_ARG, etc.) New argument NAMED
+ is nonzero for a named arg, zero for an anonymous extra arg.
+ * expr.c (expand_call): Pass 1 for NAMED if appropriate.
+ * expr.c (emit_library_call): Pass 1 for NAMED.
+ * stmt.c (assign_parms): Pass 1 for NAMED.
+
+ * cccp.c: Test __GNUC__, not __GNU__.
+
+ * integrate.c (copy_and_substitute_rtx):
+ Replacing a MEM parm with the parm value, convert mode if mismatch.
+ Always use VOIDmode when generating SETs.
+ Take heed of FIRST_PARM_OFFSET and distinguish arg-pointer
+ from frame-pointer when they are different.
+ (expand_inline_function): Handle (RETURN) insns, by creating a
+ return_label which is output after the integrated code.
+
+ * parse.y (yylex): Condition for ignoring `inline' was backwards.
+
+ * flow.c (mark_used_regs): Ignore STRICT_LOW_PART, so that
+ an insn that sets STRICT_LOW_PART (and its source values) may be dead.
+ (propagate_block): Always pass 1 for strict_low_ok to insn_dead_p.
+
+ * optabs.c (emit_unop_insn): Don't make a REG_RETVAL note.
+ Change above deletes dead STRICT_LOW_PART stores without one.
+
+ * optabs.c (expand_binop, expand_unop): If the library address
+ is to be put in a pseudoreg, do it here, and make the REG_RETVAL
+ note point after that.
+
+ * expr.c (emit_library_call): Never defer stack-pops.
+ Deletion of the library call by flow.c loses if they are deferred.
+
+ * cse.c (cse_insn): Handling of 68k's zero-extend was broken:
+ it made the actual source and the REG_EQUAL source equivalent.
+ * If dest is a STRICT_LOW_PART, ignore the actual source and use
+ the REG_EQUAL source in its place. src_eqv's mode may be different
+ from src's, so use proper mode in lookups or inserts for src_eqv.
+ * Don't forget to set src_eqv_elt if src_eqv already has an elt.
+ * On use_related_value for src_eqv, use src_eqv_elt.
+
+ * toplev.c (main_input_filename): Name of file mentioned in first
+ #-line in the input.
+ (compile_file): Pass it to dbxout_init as 2nd arg.
+ * dbxout.c (dbxout_init): Use 2nd arg to make the N_SO symbol.
+ * parse.y (check_newline): Store main_input_filename.
+
+ * expr.c (move_block_to_reg): New function, copies a MEM:BLK
+ to consecutive registers.
+ (use_regs): New function to emit a USE for each reg in a series.
+ (expand_call): Use the two new functions when a precomputed BLKmode
+ arg is passed entirely in regs.
+ (emit_push_insn): Use move_block_to_reg when PARTIAL > 0.
+ Also, don't subtract USED from SIZE twice.
+ Use plus_constant to add ARGS_SO_FAR so can use indexing on stack ptr.
+
+ * varasm.c (assemble_integer_zero): Use rtx 0, not tree 0,
+ to go with prev change in ASM_OUTPUT_INT.
+
+Sun Mar 13 01:16:17 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * varasm.c (const_hash, compare_constant_1, record_constant_1):
+ Handle NOP_EXPR and CONVERT_EXPR in constant expressions.
+
+ * optabs.c (expand_binop, expand_unop): When widening operands,
+ those with VOIDmode (like CONST_INT) may be left alone.
+
+Sat Mar 12 01:09:24 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * varasm.c (assemble_variable): When making a .comm or .lcomm,
+ round size up to multiple of BIGGEST_ALIGNMENT.
+
+ * obstack.c (_obstack_newchunk): Eliminate fencepost causing copying
+ to access the word past the end of the existing object.
+
+ * tm-vax.h, tm-ns32k.h: Define {INIT_,}CUMULATIVE_ARGS
+ and upgrade FUNCTION_ARGS for new calling convention.
+
+ * gcc.c: If -O, define __OPTIMIZE__.
+ (do_spec_1): %c now scans SIGNED_CHAR_SPEC: define __CHAR_UNSIGNED__
+ when appropriate whether or not it is the default.
+
+Fri Mar 11 16:49:25 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * parse.y: Define YYDEBUG.
+
+ * rtl.c (rtx_unstable_p): New function, same as old rtx_varies_p.
+ * explow.c (stabilize): Use rtx_unstable_p.
+ * rtl.c (rtx_varies_p): Ignore `unchanging' (undoing previous change
+ in this function) because `unchanging' doesn't enable cse to compare
+ the value with any particular constant value.
+ * rtl.c (insn_store_addr_varies_p): Delete, since not used.
+
+ * hard-reg-set.h (COPY_HARD_REG_SET, etc.) non-scalar case:
+ Rename and rearrange temp variables to avoid name conflicts with args.
+
+ * regclass.c (reg_class_record): Don't smash class to GENERAL_REGS
+ and don't exit prematurely, when `r' or `g' is seen. Must merge
+ GENERAL_REGS with previously determined desired class.
+
+ * expr.c (expand_call) [no PUSH_ROUNDING]: When pushing the arg
+ block, try to reuse some of the pending_stack_adjust.
+
+ * cse.c: qty_const can now hold values (PLUS frame_pointer integer).
+ Effect is that storing into a structure doesn't invalidate
+ mem refs to scalar stack variables via addresses in registers.
+ (insert): Load such values into qty_const, like true constants.
+ (fold_rtx): Ignore qty_const if it isn't really a constant.
+
+ * expr.c (expand_expr) VAR_DECL: Copy DECL_RTL before calling
+ change_address, so it isn't permanently clobbered.
+
+ * stmt.c (fixup_var_refs_1): Make sure the stack slot address
+ is valid by calling fixup_stack_1 each time it is substituted.
+
+ * stmt.c (fixup_stack_1): Return the altered rtx.
+ If it's a MEM in the stack, return a copy of it.
+
+ * stmt.c (fixup_stack_slots): #if 0.
+ * stmt.c (expand_finish_function): Don't call fixup_stack_slots
+ because fixup_stack_1 is called elsewhere when necessary.
+
+ * reload.c (find_reloads_address): New arg is location of the MEM
+ whose address is being reloaded. So we copy the MEM if it
+ is one that can be shared. New arg 0 means no need to copy the MEM.
+ All callers pass the new arg.
+
+ * stmt.c (assign_parms): Determine parm stack-size from
+ the DECL_ARG_TYPE, not from the TREE_TYPE.
+ Else loses when parm is declared `float' but passed as `double'.
+
+ * emit-rtl.c (make_safe_from): Constants are already safe.
+ Use proper machine mode for temp reg when needed.
+
+Thu Mar 10 14:35:14 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * expr.c (emit_push_insn): Don't pass wrong type to plus_constant
+ (case where there is no PUSH_ROUNDING).
+
+ * expr.c (expand_call): Round partial[i] down to multiple of
+ PARM_BOUNDARY before subtracting it from arg size on stack.
+ Compute these sizes just once and keep them in vector `arg_size'.
+ * expr.c (emit_push_insn): Handle `partial' uniformly, in accord
+ with this new convention for how it affects the stack size.
+ * stmt.c (assign_parms): Round NREGS down to PARM_BOUNDARY likewise.
+
+ * obstack.h (obstack_free macro) [Not __GNUC__ but __STDC__]:
+ Don't cast result of (obstack_free) to (int); just ignore it.
+
+ * reload.c (find_reloads): Initialize operand_reloadnum.
+
+ * optabs.c (emit_unop_insn): New argument CODE, used to make
+ a REG_EQUAL note from operand OP0 if more than one insn results.
+ Also a REG_RETVAL note.
+ * expr.c (convert_move): Pass CODE arg to emit_unop_insn.
+ * flow.c (propagate_block): Use insn_dead_p to decide whether
+ to handle a REG_RETVAL note by skipping some insns.
+ Always pass 1 for STRICT_LOW_OK for an insn that has a REG_RETVAL note.
+ Handle case where REG_RETVAL points at an insn that's deleted.
+ * flow.c (insn_dead_p): New operand STRICT_LOW_OK says an insn
+ that sets STRICT_LOW_PART may be considered dead.
+
+ * expr.c (expand_expr): Once again canonicalize X-C to X+(-C).
+ Change on March 1 made it stop doing this.
+
+Wed Mar 9 01:25:35 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * loop.c (move_movables): Don't always mark the moved reg
+ as equivalent to a constant value: not if it is being cleared
+ to zero-extend something or if it is used outside the loop.
+
+ * expr.c (move_by_pieces_1): Finish last change.
+
+ * stmt.c (assign_parms): Update stack_args_size properly.
+ Figure FIRST_PARM_OFFSET when making the stack mem refs.
+
+ * cse.c (insert): Build the related_value lists in the opposite order
+ so that the oldest element in the chain is the one that follows
+ the most basic element.
+
+ * expr.c (expand_expr): COMPONENT_REF case: criterion for
+ converting the the result is if MODE1 (its mode of arrival) isn't
+ a mode we want.
+
+ * toplev.c (rest_of_compilation): Fix typo setting TREE_ASM_WRITTEN.
+
+Tue Mar 8 13:18:37 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * cse'ing of library calls.
+
+ * expr.h: type `optab' is now a ptr to a struct.
+ The old contents are now the `handlers' element.
+ The `code' element gives the RTL code for the kind of expression
+ this optab makes (PLUS for add_optab, etc.)
+ Every var formerly declared `struct optab *' is now just `optab'.
+
+ * optabs.c (init_optab, init_optabs): New function to init an optab
+ and set its `code'. Used in init_optabs.
+
+ * optabs.c (expand_binop, expand_unop): Use the `code' field
+ to add a REG_EQUAL note to the insn that copies a libcall's
+ value into a pseudo. Also a REG_RETVAL note pointing at the
+ first insn for setting up args for the call.
+
+ * cse.c (cse_insn): Process REG_EQUIV and REG_EQUAL datum almost like
+ another set-src; put the actual src into the equivalence class of that.
+
+ * flow.c (propagate_block): If a dead insn has a REG_RETVAL reg-note,
+ either ignore or delete all the insns back to the insn the REG_ARG
+ note points to.
+
+ * local-alloc.c (block_alloc): Don't refrain from allocating a
+ "constant" register if the constant value isn't ok for an immediate op.
+
+
+ * dbxout.c (CONTIN): If DBX_CONTIN_LENGTH is <= 0, do nothing.
+
+ * cccp.c: Extra default include dirs for C++.
+ * cccp.c (main): For -M, strip dirs from object file name.
+
+ * rtl.c (find_reg_note): New function.
+
+ * expmed.c (store_fixed_bit_field): Don't AND with VALUE
+ if VALUE's original mode had no more bits than we want.
+
+ * expr.c (emit_library_call): Use varargs.
+
+ * integrate.c (copy_and_substitute_rtx): Recognize arg_pointer_rtx
+ and translate it just like frame_pointer_rtx.
+
+Mon Mar 7 00:48:33 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * expmed.c (extract_fixed_bit_field):
+ Shift counts were wrong for narrow MODE in signed case.
+ Do the sign-extending shifts in the narrowest mode possible.
+ Reduce big-endian case to little-endian case.
+ Delete SLOW_ZERO_EXTEND conditional.
+
+ * Implement constants in memory for RISC machines
+ with limited abilities for immediate args and constant addresses.
+
+ * genoutput.c (output_epilogue): Empty predicate-name
+ is output as 0 in insn_operand_predicate.
+
+ * expr.c (expand_expr): Change 4th arg to an `enum expand_modifier'
+ Value EXPAND_SUM corresponds to old nonzero 4th arg.
+ Value EXPAND_CONST_ADDRESS means ok to return an invalid MEM
+ whose address is a constant. Changes for this case in ADDR_EXPR,
+ COMPONENT_REF and ..._DECL.
+
+ * varasm.c (output_arith_constant): Function deleted.
+ * tm-*.h: (ASM_OUTPUT_{INT,SHORT,CHAR}): 2nd arg is now an RTX
+ and output it using `output_addr_const'.
+ * varasm.c (output_constant): Change uses of those macros.
+
+ * varasm.c (init_const_rtx_hash_table): Initialize constant pool
+ for a new function. Called from `expand_function_start'.
+ * varasm.c (force_const_mem): Turn a constant rtx into a MEM rtx
+ which refers to the constant pool. Other new subroutines too.
+ (force_const_double_mem): Use force_const_mem to make the MEM.
+ (immed_real_const): No longer record the REAL_CST node in the rtx.
+
+ * explow.c (force_reg): If arg is a constant and not legitimate,
+ put it in the constant pool with force_const_mem.
+ Mark the register as equivalent to the constant value.
+ * expr.c (emit_move_insn): Likewise.
+ * explow.c (break_out_mem_refs): Use force_reg to put into a reg.
+ * explow.c (memory_address): Likewise.
+ * expr.c (expand_expr): ADDR_EXPR case: likewise.
+
+ * expr.c (expand_call): Do force_reg on each register-operand
+ so it will go through a pseudo and can be cse'd.
+
+ * recog.c (immediate_operand, nonmemory_operand, general_operand):
+ For constant operands, use LEGITIMATE_CONSTANT_P to decide value.
+ * tm-*.h: Define LEGITIMATE_CONSTANT_P.
+
+ * reload1.c (reload): Invalid constants can't go in reg_equiv_constant.
+
+Sun Mar 6 22:49:06 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * reload.c (push_reloads): If IN occurs within OUT,
+ don't reuse an existing input-only reload. Otherwise would lose on
+ (set (mem (plus R C)) (plus R C1)) if R is available in a spill reg.
+
+ * reload1.c (choose_reload_targets): Don't choose an inherited
+ reload register that's in use for another reload.
+ Without this, above change doesn't have an effect.
+
+ * Implement the `unchanging' flag in MEM and REG rtx's.
+ Also simplify code with a new subroutine `change_address'.
+
+ * emit-rtl.c (change_address): Return new memory ref like an old
+ one but with specified mode and address.
+ * expmed.c (extract{,_split,_fixed}_bit_field): Use change_address.
+ (store{,_split,_fixed}_bit_field): Likewise.
+ * expr.c (store_expr, expand_expr): Likewise.
+
+ * expr.c (move_by_pieces): Args now memrefs, not addresses.
+ Eliminate the FROM_VOL and TO_VOL args since the memrefs indicate.
+ Change the structure `struct move_by_pieces' similarly.
+ (move_by_pieces_1): Same changes; use change_address.
+ (emit_block_move, emit_push_insn): Calls to move_by_pieces changed.
+
+ * integrate.c (copy_rtx_and_substitute): Use change_address;
+ handle ->unchanging field.
+
+ * rtl.c (rtx_varies_p): Regs or memrefs with ->unchanging don't vary.
+ (copy_rtx): Perserve ->unchanging.
+ (print_rtx): Print ->unchanging as /u.
+
+ * stmt.c (expand_decl): Set ->unchanging on `const' decls.
+ (fixup_memory_subreg): Use change_address.
+ (assign_parms): Record in the rtl which parms are volatile or const.
+
+ * varasm.c (assemble_variable): Set ->unchanging on `const' decls.
+ (output_constant_def): Always set ->unchanging for constant refs.
+
+ * cse.c (canon_hash): Don't treat a MEM as "in memory"
+ if its ->unchanging bit is set.
+
+ * loop.c (invariant_p): A REG or MEM with ->unchanging is invariant
+ (for a MEM, the address must be invariant).
+
+Sat Mar 5 13:22:11 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * genconfig.c (walk_insn_part): DO consider MATCH_DUPs
+ when calculating MAX_RECOG_OPERANDS.
+ (gen_expand): define_expand is now different from define_insn.
+ Compute max # SETs or CLOBBERs for any one sub-insn in a define_expand,
+ instead of summing them all. And don't count the MATCH_DUPs at all.
+
+ * genemit.c (max_operand_1): Record largest opno in a MATCH_DUP
+ separately from largest in a MATCH_OPERAND.
+ (gen_expand): An operand # with only MATCH_DUPs gets
+ a local variable in the gen_ function we output.
+
+ * integrate.c (save_for_inline): Delete vestige of NOTE_INSN_IS_DECL.
+
+ * cse.c (invalidate): Handle subregs.
+ (cse_ins, invalidate_from_clobbers): Do call `invalidate' for subregs.
+ (insert_regs): When assigning one subreg from a like one,
+ make the two regs equivalent.
+ (cse_insn): Do call insert_regs when dest is a subreg.
+
+ * expr.c (expand_call): Precompute all args going via hard regs
+ since even arithmetic could require a library call.
+
+Fri Mar 4 15:48:17 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * stor-layout.c (layout_parms): Function deleted.
+ * stmt.c (expand_function_start): Don't call it.
+
+ * stmt.c (assign_parms):
+ stack_args_size counts size of args so far passed on stack.
+ Use PARM_BOUNDARY when counting it; derive stack offsets from it.
+ Set current_function_args_size from it.
+
+ When an arg is split between regs and stack, make stack space
+ for the rest of it, and count it.
+ In a varargs function, push the last arg onto the stack.
+ When an arg is passed in regs alone, don't remember a stack slot
+ for it, and if it needs one, use assign_stack_local.
+
+ Set DECL_OFFSET to the stack offset, or -1 if parm came in regs.
+
+ * expr.c (expand_call): Anonymous args of a varargs function
+ are always passed on the stack.
+
+ * varasm.c (force_const_double_mem): Copy the MEM rtx
+ if it may need to be smashed by reloading.
+
+ * genemit.c (gen_expand): define_expand must have nonempty pattern
+ even though, due to `return' statements in the code-to-run,
+ that pattern may not be used to generate code.
+
+Thu Mar 3 17:08:43 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * expr.c (expand_expr): If supposed to sign-extend an enum
+ which is never negative, zero-extend instead (unless SLOW_ZERO_EXTEND).
+ (store_expr): Likewise.
+
+ * reload.c (find_reloads): 'm' for CONST_DOUBLE: clear BADOP, not BAD.
+ After force_const_double_mem, do find_reloads_toplev on the MEM.
+ (find_reloads_address): Handle constant addresses (on machines
+ that don't allow them).
+
+ * final.c (set_current_gdbfile): New fn, get the gdbfile structure
+ for specified filename.
+ (output_source_line): Use set_current_gdbfile for the file.
+ * varasm.c (assemble_variable): Call set_current_gdbfile
+ for the declaration's source file, so GDB won't ignore the file.
+
+ * varasm.c (force_const_double_mem): Build a new REAL_CST node
+ and get its data type from the machine mode of the CONST_DOUBLE.
+ (immed_real_const): Don't save the REAL_CST tree node.
+ * typecheck.c (get_floating_type): Return float type for given mode.
+
+ * integrate.c (expand_inline_function): Ignore the (USE (REG...))
+ (for the return-register) at the end of the inline function.
+ After a CALL_INSN, imagine the (SET (REG ...) (REG ...)) for
+ the return-register if the return-register isn't explicitly used.
+
+Wed Mar 2 22:08:49 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * typecheck.c (build_array_ref): Do default_conversion on INDEX.
+
+Tue Mar 1 15:49:34 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * expr.c (expand_call): Always get a SYMBOL_REF for a fixed function.
+ If may be alloca, set may_call_alloca.
+ (gen_call_1): Never put a SYMBOL_REF through `memory_address';
+ but if function cse is wanted, just copy it to a register.
+ If NO_FUNCTION_CSE is defined, never do function cse.
+
+ * expr.c (init_expr): New function, does init_queue and inits
+ other things.
+
+ * stmt.c (expand_function_start): Call init_expr, not init_queue.
+
+ * optabs.c (expand_binop): Don't clobber OP0 and OP1
+ if may call delete_insns_since later.
+
+ * expr.c (emit_library_call): PUSH_ARGS_REVERSE test was backwards.
+
+ * cse.c (cse_insn): Do canon_reg on the size and position operands
+ in a ZERO_EXTEND or SIGN_EXTEND that is a destination.
+
+ * tm-*.h: Define SLOW_BYTE_ACCESS.
+ * expmed.c ({store,extract}_fixed_bit_field):
+ If SLOW_BYTE_ACCESS, get/set all bit fields from full words.
+
+ * combine.c (subst): Simplify
+ (zero_extend:SI (subreg:QI (zero_extract ...))).
+ * combine.c (simplify_and_const_int): Simplify
+ (and (zero_extract ...) (const_int ...)).
+
+ * local-alloc.c (qty_compare{,_1}): Test of qty_phys_sugg was reversed.
+ (combine_regs): If one pseudo gets two suggested hard regs
+ (one at birth and one at death), prefer the one from birth
+ unless we see at death that it's no good.
+
+ * expr.c (expand_expr): Ignore sum_ok unless mode is Pmode.
+ Don't use force_operand unless sum_ok is set.
+
+Mon Feb 29 19:23:50 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * expr.c (emit_move_insn): When a CONST_DOUBLE needs moving
+ by pieces, force it into memory, unless it is dconst0_rtx,
+ in which case each piece is const0_rtx.
+ (emit_push_insn): Likewise. Also, write code for pushing a
+ non-BLK mode which has no "mov" insn defined, but only
+ in the case where there is no PUSH_ROUNDING.
+
+ * expr.c (do_tablejump): Put constant term in address last.
+
+ * toplev.c (xrealloc): On error, call fatal instead of abort.
+
+ * optabs.c (emit_cmp_insn): If genning from tst_optab,
+ make the operand fit its predicate.
+
+ * optabs.c (expand_float): Don't adjust stack between cmp and jump.
+
+ * optabs.c (expand_binop): Recursive calls can return 0; handle
+ that event by deleting any preparatory insns. Also don't smash
+ TARGET when this happens.
+
+ * reload.c (push_reload): If IN != *INLOC, set reload_nocombine.
+ (combine_reloads): Don't combine an input reload with reload_nocombine.
+
+ * jump.c (jump_optimize): Don't delete stack adjusts unless
+ EXIT_IGNORE_STACK is nonzero.
+ * expr.c (clear_pending_stack_adjust): Likewise.
+ * tm-*.h: When EXIT_IGNORE_STACK is defined, give it `1' as defn.
+
+ * expr.c (expand_call): Initialize args_size.
+ Don't push a block if args_size is 0.
+ (emit_library_call): Don't include register-args (or reg-parts
+ of partial ones) in args_size.
+ Don't push a block if args_size is 0.
+
+ * expr.c (expand_expr): For DECLs in memory, check the address
+ validity with memory_address_p, and preserve volatility info.
+
+ * stmt.c (expand_function_end): fixup_gotos needs 2 args.
+
+ * jump.c (mark_jump_label): If INSN is 0, don't set its JUMP_LABEL.
+ Inside an ADDR_VEC or ADDR_DIFF_VEC, recurse with 0 for INSN.
+
+ * varasm.c (force_const_double_mem): Must zero TREE_CST_RTL
+ before output, or nothing will happen.
+
+Sun Feb 28 01:08:53 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * optabs.c (emit_unop_insn): Generate and emit an insn
+ given the insn-code and the two operands (one out, one in).
+ Can move the operands into registers when needed for various
+ reasons.
+ * expr.c (convert_move): Use emit_unop_insn for outputting the
+ conversion insns.
+
+ * expr.c (emit_library_call): Use arg's nominal mode to choose
+ a reg to pass it in, not actual mode (which can be VOIDmode).
+
+ * insn-emit.c (emit_insn): If arg is empty SEQUENCE, do nothing.
+
+ * genemit.c (gen_expand): Scan the rtl-pattern for predicates
+ and machine modes of the operands.
+
+ * m68k.d (dbra patterns): Add HPUX_ASM conditionals.
+
+ * rtl.c (reg_mentioned_p): Use "equal", not "eq", when
+ REG isn't a register.
+ * reload.c (combine_reloads): Verify not reg_mentioned_p even if
+ the input reload's value isn't a register.
+
+ * reload.c (operands_match_p): If successful and 2nd arg
+ has a pre-increment that matches a non-increment, return 2.
+
+ * reload1.c (reload): At end, clobber a pseudoreg to a MEM
+ even if it's an out-of-range address. It doesn't affect the
+ assembler code in this case, but it makes the dbx output correct.
+
+ * recog.c (constrain_operands): When operands_match_p returns 2,
+ in the constraint alternative that is ultimately successful,
+ copy the output operand from the input that it matched
+ so that the assembler insn that is output shows the pre-increment.
+
+Sat Feb 27 15:16:47 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * combine.c (subst): When optimizing
+ (set (zero_extract ...) (and (zero_extract ...) const))
+ must arrange to have 1's, not 0's, shifted into low bits of const.
+
+ * decl.c (grokdeclarator): When return-type defaults to int,
+ don't warn, just set warn_about_return_type.
+ (start_function): See that variable and warn, after starting function.
+
+ * toplev.c (count_error): No longer print newline if not quiet.
+ (report_error_function): If not quiet, print a newline if
+ printing anything, and don't print the function name.
+
+ * reload1.c (choose_reload_targets):
+ Fix the loop that checks for consecutive available spill regs.
+ Set `have_groups' nonzero if any reload wants a group.
+ In that case, for non-group reloads, prefer a reg that can't be in
+ group, or else one that has only one available neighbor.
+
+ * reload1.c (reload): Find separately the max need for each class
+ for single registers, groups of registers, and single registers
+ not in any group. (The last one counts non-group reloads
+ in insns that have at least one group reload.)
+ Then make sure enough of each kind are found.
+
+ * expmed.c: Now needs flags.h and recog.h (therefore insn-config.h).
+
+ * expmed.c (store_bit_field):
+ Delete redundant protect_from_queue.
+ Force VALUE out of memory if -fforce-mem.
+ If insv's predicate for VALUE wants a register, put it there.
+
+ * expmed.c (extract_bit_field):
+ Force TARGET out of memory if -fforce-mem.
+ If insv's predicate for TARGET wants a register, put it there.
+
+Fri Feb 26 00:12:48 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * reload1.c (eliminate_frame_pointer): Don't check for pushes
+ unless PUSH_ROUNDING is defined.
+
+ * reload.c: Don't define REG_OK_FOR_{INDEX,BASE}_P
+ (since the tm file is supposed to do it).
+
+ * expr.c (emit_push_insn, expand_call):
+ Don't use PUSH_ROUNDING if it's not defined.
+
+ * expr.c (preexpand_calls): Do nothing for constants and decls.
+
+ * expr.c (expand_call, emit_library_call): When PUSH_ROUNDING
+ is not defined, use ROUND_CALL_BLOCK_SIZE to round the size
+ of the block of arguments.
+
+ * expr.c (expand_call): Don't count register-args in ARGS_SIZE.
+
+ * rtl.h, emit-rtl.c: Create static_chain_incoming_rtx
+ and struct_value_incoming_rtx.
+ * stmt.c (expand_function_start): Use ..._incoming_rtx where needed.
+
+ * expr.c (expand_call): Use new macros INIT_CUMULATIVE_ARGS,
+ CUMULATIVE_ARGS and FUNCTION_ARG_ADVANCE to update data
+ on args scanned so far.
+ (emit_library_call): Likewise.
+ * stmt.c (assign_parms): Likewise.
+ * tm-spur.h, tm-m68k.h: Define these macros.
+
+ * rtl.h (NUM_MACHINE_MODES): NUM_MACHINE_MODE renamed.
+ * rtl.c, genrecog.c: Change places it is used.
+
+ * cccp.c (output_line_command): line_cmd_buf should be chars, not ints.
+
+Thu Feb 25 13:33:29 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * genemit.c (gen_expand): Don't lose if pattern is empty-vector.
+
+ * genconfig.c (gen_insn): Don't lose if pattern is empty-vector.
+
+ * expr.c (expand_expr): For COMPONENT_REF, don't convert to tmode
+ unless the mode we get is unacceptable.
+
+ * loop.c (scan_loop, move_movables): New field `partial' is 1 for
+ zero-extending clr insn; don't make the reg invariant when it's moved.
+
+ * optabs.c (expand_unop, expand_binop, emit_cmp_insn):
+ mode-argument to predicates was missing.
+
+ * optabs.c (expand_binop): If gen-function returns 0, this means
+ the insn wasn't available.
+
+ * reload.c (find_reloads): Don't make optional reloads for operands
+ that match other operands.
+
+ * reload.c (combine_reloads): Reject optional output reload.
+
+ * reload.c (find_equiv_reg): Know that CALL_INSNs clobber memory.
+
+ * typecheck.c (build_binary_op_nodefault):
+ If doing a short shift, leave the shift-count as a fullword.
+
+Tue Feb 23 14:43:46 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * combine.c (subst): Count, in n_occurrences, # times FROM is seen.
+ (try_combine): Refuse to combine x=*y++ into z = x*x.
+
+ * loop.c (invariant_p): Frame pointer and arg pointer are invariant.
+ (move_movables): Don't forget to set ->done!
+ When moving the matching movables, don't forget to set n_times_set.
+
+ * expmed.c (expand_shift): Reorder strategies for logical shift;
+ if widening, try all ashift strategies before extzv.
+
+ * typecheck.c (build_binary_op_nodefault):
+ Always return error_mark if either operand is one.
+
+ * recog.c (nonmemory_operand): New predicate.
+
+ * optabs.c (expand_unop, expand_binop, emit_cmp_insn):
+ Don't treat `register_operand' as special. Apply the predicate
+ to the rtx; if the predicate fails, use a register instead.
+
+Mon Feb 22 22:37:32 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * expr.c (expand_calls): Preexpand all calls in arguments
+ that are passed in regs before copying any of them into the regs.
+
+ * expr.c (emit_push_insn): Three more args.
+ EXTRA for extra space to leave.
+ ARGS_ADDR and ARGS_SO_FAR for using move-insns on machines
+ that lack true push insns.
+
+ * expr.c (emit_library_call, expand_call):
+ Use the new arguments of `emit_push_insn'.
+
+ * expr.c (PUSH_ARGS_REVERSED): defined if handle args last-to-firs.
+
+Sun Feb 21 12:17:59 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * toplev.c (rest_of_compilation): Set TREE_ASM_WRITTEN
+ when a function is really output as assembler code.
+ Don't do inlining of a function that is already made inline;
+ instead, output it as assembler code, because this must be
+ the second call for that function.
+
+ * decl.c (finish_compilation): Delete it.
+ * toplev.c (compile_file): Output pending inline functions at the end
+ in the same way tentative-defined variables are output.
+
+ * emit-rtl.c (restore_reg_data): New fn: given chain of insns,
+ restore emit-rtl's data on registers from the regs they use.
+
+ * integrate.c (output_inline_function): Use restore_reg_data.
+ (fill_regno_reg_rtx_as_needed): Now restore_reg_data_1 in emit-rtl.c.
+
+ * tree.c (build_decl): Function moved from decl.c.
+ No longer set attributes of function decls specially.
+
+ * decl.c (implicitly_declare, builtin_function, grokdeclarator):
+ Don't expect build_decl to set attributes of FUNCTION_DECL.
+
+ * tree.c (preserve_data): New fn, make all data now on
+ maybepermanent_obstack last permanently.
+
+ * cse.c (cse_insn): Remove a STRICT_LOW_PART from the dest rtx
+ before putting it in the hash table.
+
+ * symout.c (symout_block): Fix the args to `symout_block_symbols'.
+
+Sat Feb 20 00:07:52 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ Start of changes for inline functions.
+ Changes received from Tiemann, then slightly rearranged for simplicity.
+
+ * integrate.c: New file (Tiemann's rtl2.c).
+ * integrate.c (function_cannot_integrate_p):
+ New fn, only checks whether current fn is safe and good to inline.
+ Returns an error message string if not.
+
+ * expr.c (current_args_size): Var made static.
+ (store_expr): Fn no longer static.
+ (stack_pointer_rtx): Use this var for all refs to the stack pointer.
+ (struct_value_rtx, static_chain_rtx): Likewise
+
+ * expr.c (expand_call): Detect calls to integrable functions
+ and integrate them.
+ **If fn is not named "alloca" then assume it is not `alloca'. **
+
+ * emit-rtl.c (max_label_num): New fn, returns number for next label.
+ (get_first_label_num): New fn, returns first label of current fn.
+ (init_emit): Save first label number of this fn.
+
+ * emit-rtl.c (gen_inline_header_rtx): New fn, make an INLINE_HEADER.
+
+ * emit-rtl.c (emit_declaration): New fn to emit new kind of NOTE.
+
+ * emit-rtl.c (init_emit_once): New fn.
+ Move inits of unique rtl objects here, from init_emit.
+
+ * decl.c (finish_compilation): New fn to compile separately
+ any nonglobal inline functions that need to be addressable.
+
+ * decl.c (grokdeclarator): Handle `inline' kwd among the declspecs.
+ Set TREE_INLINE if it's safe.
+
+ * decl.c (finish_function): If fn was inlined, don't clear
+ the DECL_ARGUMENTS or DECL_RESULT or DECL_INITIAL.
+
+ * gen*.c: Provide rtl_obstack, not current_obstack.
+
+ * rtl.c (rtl_obstack): Variable: ptr to obstack to use for making rtl.
+ * rtl.c (rtx_alloc, rtvec_alloc): Use that obstack.
+ * rtl.c (copy_rtx): Copy the `integrated' flag.
+ * rtl.c (print_rtx): Print that flag as `/i'.
+
+ * rtl.def: New rtx code INLINE_HEADER.
+
+ * rtl.h (struct rtx_def): Add `integrated' field.
+ * rtl.h: Define macros for fields in an inline_header rtx.
+
+ * stmt.c (max_parm_reg_num, get_first_function_insn):
+ New fns, return info on parm regs and the insns that init them.
+
+ * stmt.c (expand_decl): Simplify with new local `type'.
+
+ * stmt.c (stack_pointer_rtx): Replace all refs to stack pointer
+ with this shared rtx.
+ * stmt.c (struct_value_rtx): Likewise.
+
+ * stmt.c (expand_start_function): Call init_pending_stack_adjust
+ instead of clear_pending_stack_adjust.
+ If not using a return-label, set `return_label' to 0.
+
+ * stmt.c (expand_null_return, expand_end_function):
+ Call clear_pending_stack_adjust unconditionally.
+
+ * expr.c (clear_pending_stack_adjust): Move the conditionals here.
+ For now, this fn is a no-op, since it's not safe in an inline fn
+ and the stack adjusts are deleted by jump.c in if optimizing.
+
+ * expr.c (init_pending_stack_adjust): New fn.
+
+Fri Feb 19 14:30:13 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * toplev.c (main): Decode -finline-functions, -fkeep-inline-functions.
+
+ * toplev.c (rest_of_compilation):
+ At start, save the rtl if function should be inline.
+ For inline function, if we don't yet know whether it should be
+ compiled on its own, don't do so.
+
+ * toplev.c (compile_file): Clear, and later print, `integration_time'.
+ Call `init_emit_rtl' when starting.
+ Call `finish_compilation' at the end.
+
+ [Add an extra arg to the error and warning functions?]
+
+ * tree.c ({push,pop,clear}_momentary):
+ Change momentary_stack from a char ** to a struct momentary_level *.
+
+ * tree.c (build_pointer_type): Put temporary type in `saveable_obstack'
+ * tree.c (build_type_variant): Likewise.
+ * tree.c (make_node): Likewise. Also put decls and LET_STMTs there.
+ * tree.c (type_hash_canon): Free a temporary type in `saveable_obstack'
+
+ * tree.c (perm_tree_cons): Like `tree_cons' but on perm. obstack.
+
+ * tree.c (init_tree, {{end_,}temporary,permanent}_allocation):
+ Handle `maybepermanent_obstack' and `saveable_obstack' and
+ `rtl_obstack'.
+
+ * tree.h (TREE_INLINE): New attribute macro.
+ * tree.h (DECL_SAVED_INSNS, DECL_FRAME_SIZE):
+ New components in a FUNCTION_DECL.
+ Delete the `unused` slot in a `struct tree_decl'.
+
+ * typecheck.c (mark_addressable): Set TREE_ADDRESSABLE
+ even in FUNCTION_DECLs.
+
+ * typecheck.c (build_function_call):
+ If function is a FUNCTION_DECL, avoid setting TREE_ADDRESSABLE
+ when taking its address.
+
+ * parse.h: Define RID_INLINE.
+ * parse.y: Define keyword `inline'; set up ridpointers for it.
+ (yylex): Don't recognize `inline' of -fno-asm or -ftraditional.
+
+ * flags.h: New vars flag_inline_functions
+ and flag_keep_inline_functions.
+
+ End of changes for inline functions.
+
+ * tree.c (convert): If EXPR's type is an error_mark, return error_mark.
+
+ * Makefile (install): Don't strip the executables.
+
+ * jump.c (delete_insn): Deleting a label's target
+ can delete either NEXT and PREV! So must search for a
+ following nondeleted insn to return.
+
+ * typecheck.c (build_function_call): Typo in validating
+ data type of function.
+
+ * genoutput.c (gen_expand): Must create a `struct data' even
+ for a define_expand, so we can output the proper insn_gen_function
+ and leave zeros in the other tables.
+
+ * loop.c (scan_loop): Replace the code for handling zero-extends
+ with unconditional code that checks for a pair of insns.
+
+ * m68k.md: Do zero-extend using define_expand to generate
+ a pair of insns, to set all to zero and then copy the low part.
+
+Thu Feb 18 15:54:00 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * emit-rtl.c (emit_insn): If arg is a SEQUENCE, emit several insns.
+ * emit-rtl.c (classify_insn): Given an RTX, return the rtx-code for
+ an insn containing it: CODE_LABEL, INSN, JUMP_INSN or CALL_INSN.
+
+ * rtl.def: New RTX types DEFINE_EXPAND and SEQUENCE.
+ * gen*.c: Handle DEFINE_EXPAND. Only genemit.c does real work.
+
+ * make.com, make-cc1.com, make-cccp.com: New, VMS command files.
+
+ * tm-vms.h: New file, used as tm.h to generate VMS code.
+
+ * tm-vax.h (FUNCTION_PROLOGUE): Turn off no bits in the mask;
+ let call_used_registers alone control this.
+ Call MAYBE_VMS_FUNCTION_PROLOGUE, and define that as no-op.
+
+ * tm-vax.h (TARGET_VAXC_ALIGNMENT): New target-flag bit.
+ BIGGEST_ALIGNMENT, EMPTY_FIELD_BOUNDARY and POINTER_BOUNDARY use it.
+
+ * varasm.c (assemble_function): Use ASM_DECLARE_FUNCTION_NAME
+ if it is defined.
+
+ * varasm.c (assemble_variable): On an external,
+ use ASM_OUTPUT_EXTERNAL if defined. Default is do nothing, as before.
+
+ * toplev.c:
+ Use FATAL_EXIT_CODE and SUCCESS_EXIT_CODE.
+ Don't include time.h and resource.h on VMS.
+ (main) Define __VERSION__ if not already defined.
+ Conditionalize setrlimit on RLIMIT_STACK.
+ Test __GNUC__, not __GNU__.
+ Don't do `ps v' on VMS.
+ (gettime): Conditional code for VMS.
+
+ * gcc.c: Define __GNUC__ as well as __GNU__.
+ __GNU__ will be deleted in a future version.
+
+ * symout.c (symout_finish) [VMS]: Don't refer to `getwd' on VMS.
+ * symout.c (symout_init) [VMS]: Fatal error; GDB syms not supported.
+
+ * parse.y (yylex): Handle DOLLARS_IN_IDENTIFIERS.
+
+ * genoutput.c (gen_insn): Workaround for VMS printf %s bug.
+
+ * gen*.c: Include config.h. Whenever exiting, use
+ SUCCESS_EXIT_CODE or FATAL_EXIT_CODE.
+
+ * config-*.h: Define SUCCESS_EXIT_CODE and FATAL_EXIT_CODE.
+ * config-vms.h: New file, mostly like config-vax.h.
+
+Wed Feb 17 13:35:34 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * cccp.c: VMS support from Kashtan.
+ Some #include files are conditional.
+ Use file_size_and_mode instead of fstat.
+ When reading file contents, the size we get from that
+ is just an upper bound; don't assume it must match.
+ Replacement definitions of read and write for VMS.
+ Different default include directories.
+ Conditionalize the setrlimit code on RLIMIT_STACK.
+ Use SUCCESS_EXIT_CODE when exiting if no errors;
+ both that and FATAL_EXIT_CODE are not #defined if already defined.
+
+ Treat $ as an identifier-character if DOLLARS_IN_IDENTIFIERS.
+ Rename the `delete' function as `delete_macro'
+ to avoid VMS name conflict.
+
+ * cexp.y: Treat $ as an identifier-character if DOLLARS_IN_IDENTIFIERS.
+
+ * stmt.c (fixup_memory_offset): Do big-endian compensation
+ only within a word, not for DImode vs SImode.
+
+ * stmt.c (fixup_var_refs): Don't fix up the insn to load the var
+ from its own stack slot; delete it instead.
+
+ * tm-ns32k.h (MODES_TIEABLE_P): DImode is like DFmode.
+
+ * tree.c (MAX_HASH_TABLE): 1009 (more prime) instead of 1008.
+
+ * decl.c (duplicate_decls): If merged type is OLD's type,
+ keep OLD's DECL_SIZE and DECL_SIZE_UNIT.
+
+ * gen*.c (xmalloc, xrealloc): Call `fatal' if memory is full.
+
+ * reload1.c (choose_reload_targets): If a mode doesn't fit the
+ reload register, and the insn is an ASM_OPERANDS, ignore the reload.
+ Otherwise, final would crash.
+
+ * expmed.c (expand_shift): Two new strategies for lshr on short/char:
+ widen and do ashr, or widen and do extzv.
+
+ * vax.md (peepholes): Use dead_or_set_p to check for eliminable
+ intermediate result, rather than requiring a match with final result.
+
+ * local-alloc.c (block_alloc): Testing frame_pointer_needed is
+ enough; no need to test FRAME_POINTER_REQUIRED, etc.
+ * global-alloc.c (find_reg): Likewise.
+ * reload1.c (reload): Likewise for flag_omit_frame_pointer
+
+ * jump.c (delete_insn): If not `optimize', don't complain
+ about finding an already-deleted insn in the chain.
+
+Tue Feb 16 17:14:54 1988 Richard Stallman (rms at wheaties.ai.mit.edu)
+
+ * final.c: Don't define N_SOL and N_SLINE if already defined.
+
+ * final.c (output_source_line):
+ Typo calling ASM_OUTPUT_SOURCE_FILENAME.
+
+ * flow.c (INSN_VOLATILE): fix a typo.
+
+Fri Feb 12 16:48:16 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * final.c (final): for `asm' without operands, output literally.
+
+Thu Feb 11 12:44:41 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * symout.c (symout_record_fields): Handle nameless fields.
+ * symout.c (symout_record_field_names): Likewise.
+
+ * typecheck.c (require_complete_type): `void' is a complete type.
+ * typecheck.c (build_function_call): Don't complain if result is void.
+
+ * tm-hp9k320.h: Change definition of ASM_SPEC to +X, not -X.
+
+ * cccp.c (main): Expected object file name for foo.cc is foo.o.
+
+Wed Feb 10 16:04:58 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * reload1.c (reload): Initialize `regmask' to zero.
+ Class number is in I, not in CLASS, when setting its elements.
+ Don't let J+K be too large.
+
+ * reload1.c (potential_reload_regs): Make it a `short'
+ since that can't be unsigned.
+
+ * cccp.c (warning): New function, called like `error'.
+ * cccp.c (do_define): Make redefinition just a warning.
+
+Tue Feb 9 13:28:00 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * decl.c (grokdeclarator): Don't be fooled by ERROR_MARK as a declspec.
+
+ * toplev.c (compile_file): Strip final .c or .co from .sym file name.
+
+ * gcc.c: When running `as', specify the .sym file if -gg.
+
+Mon Feb 8 11:26:26 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * expmed.c (store_fixed_bit_field): Don't try gen_lowpart on VALUE
+ if it's a subreg since it might lose; use convert_to_mode instead.
+
+ * tm-hp9k320.h: Define TARGET_MEM_FUNCTIONS.
+ * expr.c (emit_block_move, emit_push_insn, clear_storage):
+ If TARGET_MEM_FUNCTIONS, generate calls to memcpy and memset
+ instead of bcopy and bzero.
+ * optabs.c (emit_cmp_insn): Likewise for memcmp vs bcmp.
+
+ * stmt.c (expand_goto): New temp var to avoid RT/PC compiler bug.
+
+Sun Feb 7 12:20:23 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * flow.c (mark_used_regs, mark_set_regs):
+ Handle hard regs in multiword modes: set the bits for each
+ distinct register-number that makes up the multiword mode.
+ Necessary because function arg registers can inevitably
+ live across basic blocks.
+
+ * cse.c (canon_hash): Function arg and value registers no longer
+ considered volatile, because flow should now handle the code that
+ can result from cse'ing them.
+
+ * cse.c (make_regs_eqv): Abort if OLD is invalid.
+ * cse.c (reg_invalidate): Abort if reg already invalid has eqvs.
+
+Sat Feb 6 16:25:32 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * gcc.c (main): Specific error msg if no input files.
+
+Fri Feb 5 17:56:00 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * stmt.c (expand_decl, put_var_into_stack, assign_parms):
+ Set in_struct on a MEM if the variable is an aggregate or union.
+ * varasm.c (assemble_variable): Set in_struct on aggregate vars.
+
+Thu Feb 4 11:52:30 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * m68k.md (movsf): Correct two fmove.x to fmove.s.
+
+ * expmed.c (extract_fixed_bit_field):
+ Must always generate an `and' to mask the bitfield
+ unless its width is the same as the output machine mode.
+
+ * version 1.18 released.
+
+Wed Feb 3 08:41:20 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * fold-const.c (fold): Convert EXPR's operands before returning them.
+
+Tue Feb 2 15:35:18 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * reload.c (find_reloads_address_1):
+
+ * typecheck.c (default_conversion): Handle COMPOUND_EXPR arrays.
+
+Mon Feb 1 18:53:05 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * ns32k.md: operand 0 of all unsigned divide/modulus insns
+ is now register_operand.
+
+ * stdarg.h: Make va_list be char *, not char *[1].
+ Latest draft doesn't say it must be an array type.
+
+Sun Jan 31 11:14:07 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * flow.c (find_basic_blocks): Add temp var to avoid Sequent
+ compiler bug.
+
+ * tm-ns32k.h (GO_IF_LEGITIMATE_ADDRESS): Don't allow pushes or pops
+ since there are special insn patterns for them.
+ Resubroutinize and add temp vars to make expressions smaller.
+ * ns32k.md: Add a few more special stack insns; now there are enough.
+
+ * tm-sequent.h: Definitions of DBX_NO_XREFS and DBX_CONTIN_LENGTH.
+
+ * reload1.c (choose_reload_targets): Handling of reload_strict_low
+ is needed for input reloads as well as output, since a strict_low_part
+ operand is normally a read-write operand.
+
+ * reload1.c (reload): The mode a reload needs is the wider of
+ the input and output modes--just as it is in choose_reload_targets.
+
+ * reload.c (find_dummy_reload): If IN and OUT have different widths
+ and one of them exceeds a word, don't find any dummy reload.
+
+ * toplev.c (compile_file): Allocate enough space for .jump2 filename.
+
+Sat Jan 30 10:35:46 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * output-ns32k.c (print_operand_address):
+ Print addresses of the form C1+(N*REG+C2) which currently
+ are accepted as legitimate memory addresses.
+
+ * tm-sequent.h: Simple bugs in PRINT_OPERAND, TARGET_DEFAULT
+ and SEQUENT_ADDRESS_BUG.
+
+ * gen*.c: Must explicitly exit; returning from `main' fails
+ to indicate nonzero status due to bug in Unix.
+
+ * parse.y (check_line_number): Ignore entire line of unrecognized
+ #-directive; no error if it is `pragma'.
+
+Fri Jan 29 06:46:01 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * genrecog.c, genextract.c, genoutput.c: Define bcopy and/or bzero.
+
+ * cccp.c (do_define): Make defn->argnames long enough in no-args case.
+
+ * reload1.c (reload): Make basic_block_needs 0 until after the
+ frame pointer reg is spilled, so that ALL pseudos in it are spilled.
+
+ * typecheck.c (truthvalue_conversion):
+ Strip a NOP_EXPR only if it extends, not if it truncates.
+ (build_unary_op): For TRUTH_NOT_EXPR, call invert_truthvalue
+ to simplify.
+
+ * Fixes for HPUX support from cph:
+ * tm-hp9k320.h: Correct names of floating-point registers.
+ Fix typos in ASM_OUTPUT_OPCODE; also convert `fmove' to `fmov'.
+ * Makefile (comments for HPUX):
+ cph says -Wd,-X isn't needed in CFLAGS, nor -lBSD in CLIB.
+ Also that -g can't be used in CFLAGS with HP's pcc.
+ * conf-hp9k320.h: New file, like config-m68k.h but with
+ #defines for the bstring functions.
+ * m68k.md: Add else-clauses to the HPUX_ASM conditionals on cmp insns.
+ Reinsert mistakenly-deleted MOTOROLA conditionals around
+ some OUTPUT_JUMPs.
+
+Thu Jan 28 09:51:41 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * jump.c (jump_back_p): If TARGET is unconditional, return 0.
+
+Wed Jan 27 04:18:29 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * combine.c (subst): Simplify (plus (plus x c1) c2).
+
+ * expr.c (emit_push_insn): Don't use small-block push-insns for BLKmode
+ when one of them would be affected by PUSH_ROUNDING.
+ Instead, make all the space and then copy.
+ * expr.c (expand_call): Don't apply PUSH_ROUNDING if BLKmode.
+
+ * Allow `asm' with operands to be marked volatile.
+ * cse.c (canon_hash): Don't record ASM_OPERANDS that has `volatil'.
+ * loop.c (invariant_p): ASM_OPERANDS with `volatil' can't be invariant.
+ * flow.c (volatile_refs_p): Note ASM_OPERANDS that are volatile.
+ * stmt.c (expand_asm_operands): New arg VOL; mark ASM_OPERANDS as vol.
+ * typecheck.c (c_expand_asm_operands): New arg VOL.
+ * parse.y: allow a TYPE_QUAL after ASM.
+
+ * Make cse handle `asm' with operands:
+ * cse.c (canon_hash): Hash string operands by contents, not address.
+ * cse.c (exp_equiv_p): Compare string operands with strcmp.
+ * rtl.c (rtx_equal_p): Compare string operands with strcmp.
+
+ * decl.c (init_decl_processing): Once sizetype is set,
+ correct the type of the sizes of types already made.
+
+ * cccp.c (do_defines): Don't reject #define foo{a}.
+
+Tue Jan 26 04:53:16 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * reload.c (find_reloads): Now that `asm' is limited to
+ MAX_RECOG_OPERANDS, eliminate dynamic allocation of `constraints'
+ and `constraints1', and go back to `recog_operand' instead of
+ `operands'.
+
+ * typecheck.c (c_expand_asm_operands): New fn to handle `asm' for C.
+ Calls expand_asm_operands, and handles output operands that
+ the other function cannot handle.
+
+ * parse.y: Call that function.
+
+ * stmt.c (expand_asm_operands): Error if too many operands.
+ #include insn-config.h to get MAX_RECOG_OPERANDS.
+
+ * expr.c (expand_assignment): Use store_field to handle
+ structure fields and array elements.
+
+ * output-m68k.c (output_move_double): PUSHOP and POPOP were swapped.
+ Handle insns that push an sp-relative address onto sp;
+ these can arise with -fomit-frame-pointer.
+ BUG? Do unoffsetable mem refs using sp and fp lose?
+
+ * m68k.md (movdi,movdf): Allow unoffsetable mem refs
+ only if the other operand is a register.
+
+ * m68k.md (zero_extendqisi2): SGS conditionals deleted.
+ Supposedly the MOTOROLA syntax works for those addresses.
+
+ * typecheck.c (default_conversion):
+ If flag_traditional, preserve unsignedness when promoting ints,
+ and promote float to double.
+
+ * typecheck.c (build_binary_op_nodefault):
+ Allow comparisons between pointers and ints.
+ If not -traditional, warn about them.
+
+Mon Jan 25 02:11:18 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * expmed.c ({extract,store}_split_bit_field):
+ Functions {extract,store}_split_reg_bit_field now work for memory
+ also, and therefore are renamed.
+ * ({extract,store}_fixed_bit_field): Call those fns when a field
+ is split across two words.
+ Also, preserve the `volatil' bit on memory refs.
+
+ * output-m68k.c (output_move_double): Handle nonoffsetable mem refs.
+ * m68k.md: Relax constraints on movdi, movdf.
+
+ * decl.c (init_decl_processing): Define `int' and `char' first.
+ Set `sizetype' explicitly.
+
+ * stmt.c (fixup_var_refs_1): May not just return when a SET
+ doesn't have VAR as its src or dest.
+
+ * varasm.c: Don't include c-tree.h.
+
+ * decl.c (build_struct): Split this function into three:
+ `xref_tag', `start_struct' and `finish_struct'.
+ `xref_tag' subsumes `xref_enum'.
+
+ * parse.y (structsp): When parsing `struct foo {...}', define the tag
+ as a cross-ref before parsing the components. Use the three new fns.
+
+ * regclass.c (regclass): Recognize new-format ASM_OPERANDS insns
+ with `asm_noperands', and scan their operands as usual.
+
+ * cse.c: In numerous functions such as canon_hash, rtx_cost, etc.
+ that do tree-walk on rtx, handle vectors of subexpressions.
+
+ * loop.c (invariant_p): Likewise.
+
+ * jump.c (delete_insn): Two bugs:
+ If insn already deleted, return the first following nondeleted.
+ Deleting a jump's label can delete NEXT. Make sure return value
+ is always the first insn following INSN and not yet deleted.
+
+Sun Jan 24 02:27:49 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * rtl.def (ASM_OPERANDS): Change the rtl expression of an
+ `asm' with operands so it looks like this for one output operand:
+ (set OUTPUT (asm_operands:OUTPUTMODE INSNSTRING OUTPUTCONSTRAINT
+ 0 INPUTS INPUTCONSTRAINTS)).
+ and like this for multiple outputs:
+ (PARALLEL [
+ (set OUTPUT0 (asm_operands:OUTPUTMODE INSNSTRING OUTPUTCONSTRAINT
+ 0 INPUTS INPUTCONSTRAINTS)).
+ (set OUTPUT1 (asm_operands:OUTPUTMODE1 INSNSTRING OUTPUTCONSTRAINT1
+ 1 INPUTS INPUTCONSTRAINTS))])
+
+ * parse.y: Change parsing of `asm' to distinguish input and output
+ operands. Separate them with colon; separate the string with colon.
+
+ * stmt.c (expand_asm_operands): Receive inputs and outputs separately.
+ Generate the new rtl format.
+
+ * recog.c (asm_noperands, decode_asm_operands): New fns
+ for extracting the operands and constraints from these insns.
+
+ * final.c (final): Recognize and output the new rtl format
+ using those new functions.
+
+ * reload.c (find_reloads): Recognize and get constraints
+ from the new rtl format using those new functions.
+ New variable `operand_modes' holds the machine modes of the
+ operands, obtained one way for ASM_OPERANDS insns and another
+ for other insns.
+
+ * rtl.c (note_stores): Calling convention
+ is changed: the first arg FUNCTION now receives as its 2nd arg
+ 1 if clobbering, 0 if setting. Used to be the CLOBBER or SET rtx.
+
+ * local-alloc.c (reg_is_set): This fn is called from note_stores;
+ change its arguments.
+
+ * tm-m68k.h (FIXUP_FRAME_POINTER_ADDRESSES):
+ Use frame_pointer_rtx to recognize intended frame-pointer refs
+ and not recognize pseudo-regs that were allocated to the frame
+ pointer register.
+
+ * emit-rtl.c: All refs to frame pointer use a single rtx, in
+ frame_pointer_rtx. Likewise arg_pointer_rtx for the arg pointer.
+ If they are the same register, these are the same rtx.
+ Initialize them in init_emit.
+ * rtl.h: Declare these vars.
+
+ * stmt.c (assign_parms, assign_stack_local): Use those rtx's.
+
+Sat Jan 23 00:32:10 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
+
+ * reload.c (find_reloads): Don't combine_reloads if `&' constraint
+ was used.
+
+ * parse.y: Parse `asm' with operands.
+ * stmt.c (expand_asm_params): New fn: generate an ASM_OPERANDS for
+ `asm' with operands.
+ * final.c (final): Output an ASM_OPERANDS insn-body.
+ * regclass.c (regclass): Ignore ASM_OPERANDS, like ASM_INPUT.
+
+ * reload.c (find_reloads): Handle reloading of ASM_OPERANDS.
+ The number of operands can no longer be bounded.
+ For example we can't always put the operands in recog_operands.
+
+ New locals OPERANDS and OPERAND_LOCS point to alloca'd vectors of
+ operands and their locations. New locals CONSTRAINTS and CONSTRAINTS1
+ hold alloca'd vectors of constraints.
+
+ Unfortunately this isn't enough; every vector with length
+ MAX_RECOG_OPERANDS needs to be dynamically allocated.
+ Would this be too slow? For now, a cheap "solution" is to delete
+ any insn that has too many operands.
+
+ * rtl.def: Delete VOLATILE, UNCHANGING and UNDESCRIBED.
+ Add ASM_OPERANDS.
+
+ * regclass.c (reg_class_record): Delete ref to UNCHANGING.
+ * loop.c (invariant_p):
+ * rtl.c (rtx_varies_p):
+
+ * cccp.c: Define __VERSION__.
+
+ * decl.c (shadow_tag): TYPE_NAME doesn't work to get the tag-name
+ of a struct, so use new function lookup_tag_reverse.
+ * decl.c (lookup_tag_reverse): Given a type, return its tag name.
+
+ * symout.c (symout_source_file): Output one `struct source'.
+ * symout.c (symout_lines): Output all of them, and the sourcevector.
+ * gdbfiles.h: New file for communication between final.c and symout.c.
+
+ * final.c (output_source_line): New arg WRITE_SYMBOLS says write
+ new GDB-format linenumber info. Assigns a filenum to each source
+ file name and keeps track of the correspondence.
+
+ * cccp.c (do_include): Output the -M info after searching the dirs;
+ include the actual dir name. Don't generate "./" for current dir.
+
+Fri Jan 22 04:10:10 1988 Richard Stallman (rms at frosted-flakes)
+
+ * tm-news800.h: Delete override of INDIRECTABLE_1_ADDRESS.
+ Output is faster if it doesn't use 32-bit displacements.
+
+ * reload.c (combine_reloads): New function.
+ If possible, find an input reload
+ and an output reload that can be turned into one input-output reload.
+ The old output-reload is marked as inoperative: reload_out
+ and reload_in both zero. This is called from find_reloads.
+
+ * reload1.c (reload, choose_reload_targets): Ignore inoperative
+ reloads.
+
+ * Print warnings for variables that could be clobbered by `longjmp'.
+ * expr.c (expand_call): Generate a NOTE_INSN_SETJMP whenever
+ `setjmp' or `_setjmp' is called.
+ * flow.c (propagate_block): When NOTE_INSN_SETJMP is seen,
+ record the live regs in `regs_live_at_setjmp'.
+ * stmt.c (uninitialized_vars_warning): Warn about vars that have regs
+ that are set more than once and are marked in `regs_live_at_setjmp'.
+ Works through function `regno_clobbered_by_longjmp'.
+ * rtl.h: Define NOTE_INSN_SETJMP.
+
+ * genrecog.c (try_merge_2): When enforce_modes, keep all the
+ alternatives segregated by modes and keep the modes in numerical order.
+ * genrecog.c (write_tree): Make conditions for switch-on-modes
+ know what difference enforce_mode makes.
+
+Thu Jan 21 00:12:35 1988 Richard Stallman (rms at frosted-flakes)
+
+ * tm-ns32k.h: Use Stein's definitions of PRINT_OPERAND{,_ADDRESS};
+ move the Sequent definitions info tm-sequent.h.
+ Handle %$ in both old and new PRINT_OPERAND.
+ Define CPP_PREDEFINES.
+
+ * ns32k.md: Merge some features from Jan Stein's port:
+ strict_low_part insns, smart output of booleans with small
+ constant args, acbd insns generalized for other increments.
+ Use %$ wherever there is an explicit immediate.
+ Fix shortcomings of adjsp insns: use adjspd in general,
+ and use adjspb in all the cases that allow it.
+ Don't bother explicitly clearing CC_REVERSED.
+ For tstsf/tstdf, output the floating-zero constants
+ using {f,d}const0_rtx.
+
+ A problem still remains, which is that the Sequent and the
+ other ns32k assembler syntax require different
+
+ * typecheck.c (unary_complex_value): Use correct datatype for
+ compound-exprs.
+
+ * gen*.c (main): Use obstack_init instead of obstack_begin.
+
+ * vax.md: define_peephole for andl3 x,y,z; extzv z,....,z
+
+ * m68k.md (tstsi): Use cmpw instead of cmpl to test addr reg.
+
+ * tm-m68k.h: Bugs for 68000 when frame size is over 64k.
+ For FUNCTION_PROLOGUE, just subtract from sp instead of fp.
+ For FUNCTION_EPILOGUE, must put the size into a0 and then
+ all insns must be indexed by a0. And do this even on 68020.
+
+ * tm-isi68.h: Similar changes.
+ * tm-news800.h, tm-hp9k320.h: Similar changes.
+
+Wed Jan 20 04:38:21 1988 Richard Stallman (rms at frosted-flakes)
+
+ * cccp.c (error_with_line): New function.
+ Use it to report the "unterminated whatever" errors.
+
+ * typecheck.c (build_unary_op): Recursive call had missing arg.
+
+ * m68k.md (movhi): If MOTOROLA, the insn that fetches from a
+ case-dispatch table now defines the LI label as .+2.
+ * tm-news800.el, tm-hp9k320.h (PRINT_OPERAND_ADDRESS):
+ Don't subtract 2 when outputting the address in that insn.
+
+Tue Jan 19 00:02:33 1988 Richard Stallman (rms at frosted-flakes)
+
+ * cse.c (cse_basic_block): Abort if more qtys were used than allocated.
+
+Mon Jan 18 04:44:28 1988 Richard Stallman (rms at frosted-flakes)
+
+ * cccp.c (special_symbol): tm_mon is origin-0, not origin-1.
+
+ * final.c (output_asm_insn): If %LETTER with no digits,
+ pass null pointer as the operand.
+
+ * output-m68k.c (singlemove_string): Get rid of %e.
+
+ * stmt.c (fixup_memory_subreg): Convert (SUBREG (MEM a)) to (MEM a').
+ * stmt.c (fixup_var_ref_1): Use that fn for operands of
+ SIGN_EXTRACT and ZERO_EXTRACT, since (SUBREG:SI (REG:QI...))
+ could have turned into (SUBREG:SI (MEM:QI...)), which is unsafe.
+
+ * rtl.c (debug_rtx): Print an rtx on stderr, for debugging.
+
+Sun Jan 17 04:37:20 1988 Richard Stallman (rms at frosted-flakes)
+
+ * gcc.c: options -M* treated like -M.
+
+ * stmt.c (pushcase): Do nothing if the case index has error_mark type.
+
+ * expr.c (expand_increment): Don't use queue for post-inc on memory
+ if the add insn requires register args. (Better code for RISCs.)
+
+Sat Jan 16 02:10:22 1988 Richard Stallman (rms at frosted-flakes)
+
+ * ns32k.md: Change register_operand to general_operand.
+ * ns32k.md (udivmoddisi4): Use match_dup where required.
+ Comment it out because it can't accept two independent output args.
+
+Fri Jan 15 00:02:35 1988 Richard Stallman (rms at frosted-flakes)
+
+ * toplev.c: Include sys/time.h only for BSD. For USG, use time.h.
+ This is correct for HPUX; don't know about others.
+
+ * gcc.c (execute): Eliminate `union wait'. Make `status' an int.
+ * gcc.c (execute) [USG]: Use fork instead of vfork.
+
+ * final.c (output_source_line): Use ASM_OUTPUT_SOURCE_{FILENAME,LINE}
+ if they are defined.
+
+ * tm-hp9k320.h: New name for tm-hpux.h.
+ * tm-hp9k320.h (ASM_OUTPUT_LOCAL): Add 3rd arg to `lcomm' statements.
+ * tm-hp9k320.h (ASM_OUTPUT_{DOUBLE,FLOAT}): Use `double' and `float'.
+ * tm-hp9k320.h (CALL_USED_REGISTERS): Don't save any 68881 regs.
+ * tm-hp9k320.h (CPP_PREDEFINES): different names defined.
+ * tm-hp9k320.h (HPUX_ASM, NO_DBX_FORMAT, ASM_SPEC): define these.
+ * tm-hp9k320.h (ASM_OUTPUT_OPCODE): Convert `ftst' to `ftest'.
+ * tm-hp9k320.h: Define ASM_OUTPUT_SOURCE_{FILENAME,LINE}.
+
+ * m68k.md: Rename `hpux' conditionals to `HPUX_ASM'.
+ * m68k.md: Reverse `fcmp' args if HPUX_ASM.
+
+ * cccp.c (print_deps): 2 means give all files, 1 means only user files.
+ * cccp.c (do_include): Support that.
+ * cccp.c (main): -MM sets 1, -M alone sets 2.
+ * cccp.c (main): Give fatal error if I/O error in writing.
+
+ * toplev.c (fatal_io_error): Report I/O error on given filename,
+ and exit.
+
+ * toplev.c (compile_file): Detect error writing asm_out_file.
+ Always put asm file's name in asm_file_name for err msg.
+ * symout.c (symout_finish): Detect error writing symfile.
+ * symout.c (symout_init): Save filename in symfile_name for err msg.
+
+ * gen*.c: Return 1 if ferror (stdout)--in case disk is full.
+
+ * local-alloc.c (block_alloc): Don't crash if 1st rtx
+ in a PARALLEL is not a SET.
+
+ * tm-m68k.h, tm-news800.h (PRINT_OPERAND). Eliminate code `%e'.
+ * m68k.md: Change `%e' to `e' everywhere.
+ * tm-hpux.h (ASM_OUTPUT_OPCODE): Output `move' as `mov'.
+
+ * tm-m68k.h, tm-news800.h, tm-hpux.h (PRINT_OPERAND):
+ New code `%!' is output as the name for the cc register.
+ * m68k.md (insns that use andi to ccr): Use `%!' to avoid
+ conditionals.
+
+ * cse.c: Record in qty_const_insn the insn that stored the
+ constant value of a qty. When making a REG_WAS_0 note,
+ store in it the insn that established the value 0.
+
+ * vax.md (movsi): When checking a REG_WAS_0 note,
+ verify that the insn it points to hasn't been deleted or made a NOTE.
+
+Thu Jan 14 00:01:35 1988 Richard Stallman (rms at frosted-flakes)
+
+ * toplev.c: Eliminate error_with_line and warning_with_line.
+ * parse.y, decl.c: Change remaining calls to those two.
+
+ * tree.c (get_unwidened, get_narrower): To see if a COMPONENT_REF
+ is unsigned, look at the FIELD_DECL, not at the COMPONENT_REF.
+
+ * rtl.c (print_rtx): Print /v for the `volatil' bit.
+ * expr.c (expand_assignment expand_expr): If handling a COMPONENT_REF,
+ note whether it is volatile.
+
+ * fold-const.c (fold): a call to split_tree missed an argument.
+
+ * flow.c (volatile_refs_p): Scan an rtx for volatile mem refs.
+ * flow.c (life_analysis): Record in INSN_VOLATILE which insns
+ have any volatile mem refs.
+ * flow.c (mark_used_regs): Always mark an insn with volatile mem refs.
+ Always pass INSN as an arg. New arg FINAL now says whether
+ this is the last time scanning.
+ * flow.c (propagate_block): Don't delete insns with volatile mem refs.
+
+ * flow.c: Remove all refs to `obey_regdecls'.
+ Calling this with -noreg just doesn't help -W.
+
+Wed Jan 13 01:13:07 1988 Richard Stallman (rms at frosted-flakes)
+
+ * decl.c (finish_decl): Error if auto var's size isn't known.
+ Change type to error_mark_node to avoid crash if the var
+ is used in an expression, since it has no DECL_RTL.
+
+ * output-m68k.c (output_move_const_single): % -> %% for sprintf.
+
+ * parse.y (yylex): Store token_buffer properly after ellipsis.
+
+ * decl.c (duplicate_decls): Don't call layout_decl
+ for FUNCTION_DECL or TYPE_DECL.
+
+ * toplev.c (warning_with_decl): New warning function with decl as arg.
+ * (error_with_decl): similar.
+
+ * decl.c: Replace most `yylinerror' calls with `error_with_decl'.
+
+ * decl.c (build_struct): Reform code to detect erroneous bit-fields.
+ All such errors are now detected here.
+ Promote bit-fields to int if appropriate.
+ If traditional, make all int bit-fields unsigned.
+ Set DECL_ALIGN for members that are not bit-fields.
+
+ * decl.c (grokfield): Don't set DECL_ALIGN here.
+
+ * stor-layout.c (layout_decl): Don't promote the type of a bit-field.
+ Use TREE_PACKED to distinguish a bit-field.
+ Don't check the width because build_struct did that.
+
+ * m68k.md (cmpm): Reject if either operand (address) is a constant.
+
+Tue Jan 12 15:11:20 1988 Richard Stallman (rms at frosted-flakes)
+
+ * cse.c (canon_reg): Never replace ANY hard reg from reg_rtx
+ because that could alter the machine mode.
+
+ * tm-news800.h: Redefine INDIRECTABLE_1_ADDRESS only if MOTOROLA.
+
+Mon Jan 11 13:15:45 1988 Richard Stallman (rms at frosted-flakes)
+
+ * jump.c (follow_jumps): If we find a cycle, make it a jump to self.
+
+ * cse.c (predecide_loop_entry): Give up if chase more than 10 jumps.
+
+Sun Jan 10 14:52:42 1988 Richard Stallman (rms at frosted-flakes)
+
+ * reload1.c (reload): basic_block_needs (new vector) gets 1
+ for each basic block that needs a reload.
+ * reload1.c (spill_hard_reg): Don't spill pseudos that are
+ confined to a basic block which has no need for any reloads.
+ * reload1.c (reload): Each cycle that any element of basic_block_needs
+ changes from 0 to 1, must re-spill all previously spilled regs.
+
+ * regclass.c (record_address_regs):
+ Skip the charging of ICOST if it is 0.
+
+ * flags.h, toplev.c: New flag -fvolatile.
+ * typecheck.c (build_indirect_ref): If flag_volatile,
+ every INDIRECT_REF is marked with TREE_THIS_VOLATILE.
+
+ * fold-const.c (fold): Test in TRUTH_NOT_EXPR case was backward.
+ Also result type is always `int'.
+
+Sat Jan 9 04:16:11 1988 Richard Stallman (rms at rice-krispies)
+
+ * flags.h (flag_traditional): New flag.
+ * toplev.c: recognize -ftraditional and -traditional.
+ * parse.y (yylex): If flag_traditional, don't recognize
+ `signed', `const' or `volatile'.
+
+ * decl.c (pushdecl): If flag_traditional, any extern decl
+ takes effect at top level.
+
+ * tree.c (lvalue_or_else): New 2nd arg for use in error message.
+ * typecheck.c: All callers pass 2nd arg.
+
+ * global-alloc.c: allocno_preferred_reg can specify a preferred
+ hard reg for each allocno. If so, try it first (new call to find_reg).
+
+ * global-alloc.c (find_reg): New arg PREFREG specifies reg to try
+ first.
+
+ * decl.c (build_struct): if :0 bit field at the end, round the
+ structure size to multiple of EMPTY_FIELD_BOUNDARY.
+
+ * cse.c (make_regs_eqv): Was testing for reg_next_eqv[lastr] == 0
+ and should be == -1.
+
+ * reload1.c (reload_as_needed): Fix invalid optimization deleting
+ the previous store into a pseudo-reg that feeds an input-reload.
+ It is not safe because a later insn may look in the pseudo's stack
+ slot for the value. Delete the store only if we can eliminate the
+ pseudo entirely or if the current insn stores a new value there.
+ Also verify that reload_in[j] is a REG.
+
+ * reload1.c (reload_as_needed): When doing an input reload from a
+ pseudo that was stored by the previous insn (not as a reload),
+ redirect the previous insn into the reload register, if this lets
+ us eliminate the pseudo entirely.
+
+ * reload1.c (reload_as_needed): In both of the above cases, it's
+ impossible to prevent a stack slot since one was already assigned,
+ so don't alter reg_n_refs. Instead, set reg_renumber to record
+ that this pseudo did get a hard reg.
+
+ * stmt.c: Set `volatil' in pseudo-regs for the user's variables.
+
+ * jump.c (delete_insn): Do nothing if insn already deleted.
+
+ * tm-sun{2,3}.h: #define STRUCTURE_SIZE_BOUNDARY 2
+ for compatibility with Sun PCC. Note that 4.3 vax PCC
+ does not want this.
+
+ * fold-const.c: Replace truncate_unsigned with force_fit_type
+ which truncates unsigned types and sign-extends signed types.
+
+ * expr.c (do_jump): emit_queue before outputting the jump insns
+ that use the comparison.
+
+ * stmt.c: Error message for any goto that jumps into a
+ binding contour that restores a stack level.
+
+ TREE_PACKED (label) means label was defined inside
+ such a binding contour that is now exited. Using such a label
+ is an error.
+
+ TREE_ADDRESSABLE (label) means label was used from a place
+ outside all such binding contours. If this is 1 when
+ TREE_PACKED is set to 1, it is an error.
+
+ Any other invalid goto must have a fixup. fixup_gotos detects
+ such invalid gotos. fixup_gotos takes a second arg, which
+ is the first insn of the contour now being exited.
+
+ * GNU C version 1.17.
+
+Local Variables:
+mode: indented-text
+left-margin: 8
+fill-column: 76
+version-control: never
+End:
diff --git a/gcc/ChangeLog.1 b/gcc/ChangeLog.1
new file mode 100644
index 00000000000..b0f29ab6c01
--- /dev/null
+++ b/gcc/ChangeLog.1
@@ -0,0 +1,9207 @@
+Thu May 10 22:48:31 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rtl.def (DEFINE_DELAY): Change description to describe annulling.
+
+ * genattr.c (main): Write out definitions for annulling, if present.
+
+ * genattrab.c (expand_delays): Build internal attributes for
+ which insns can be annulled in a delay slot.
+ (gen_delay): Validate number of elements in DEFINE_DELAY list.
+ (write_eligible_delay): Write out routines for validating annulled
+ insns as well as those in normal delay slot.
+ (main): Call write_eligible_delays to output annulling information,
+ if it exists for this machine.
+
+ * out-m68k.c (not_sp_operand): New function.
+ * m68k.md (andsi3): Don't allow sp as ourput to avoid reload
+ inefficiency.
+
+ * calls.c (struct arg_data): Delete field STORED; add fields
+ PASS_ON_STACK and SAVE_AREA.
+ (prepare_call_address): Static chain value can't have QUEUED.
+ (expand_call): Rework to support additional calling sequence options.
+
+ Major changes include:
+ Call FUNCTION_ARG_PASS_BY_REFERENCE to determine whether an
+ object should be passed by invisible reference.
+ Handle arguments passed both on stack and in a register; this can be
+ used to allow arguments that are hard to compute directly into
+ registers to be passed.
+ Support option (ACCUMULATE_OUTGOING_ARGS) where the largest amount
+ of stack for outgoing arguments is computer and pushed during the
+ function prologue. Stack space usage is tracked and any location
+ that would need to be reused will be saved and restored.
+ If preallocating arg block, compute address where each arg will be
+ placed and pass it as target to expand_expr.
+
+ Other changes:
+ Use virtual regs to see if structure value address isn't stable.
+ If inlined, return TARGET if TARGET and TEMP are equivalent.
+ UNNAMED_ARGS_IN_REGISTERS is redundant with the NAMED parameter to
+ FUNCTION_ARG and has been deleted.
+ Use virtual_outgoing_stack_rtx instead of FIRST_PARM_CALLER_OFFSET.
+ Use locate_and_pad_parm to compute any needed padding for argument.
+ If REG_PARM_STACK_SPACE is defined, allocate backing stack locations
+ for args passed in registers; these are not included in the length
+ of stack space required unless OUTGOING_REG_PARM_STACK_SPACE is also
+ defined.
+ When precomputing register parameters, can stop computation when we
+ obtain any rtx, not necessarily a register.
+ No longer need code to protect data written below bottom of stack;
+ this is taken care of by preexpanding calls in argument.
+ target_for_arg no longer needed; its function is performed by
+ store_one_arg.
+ Always copy function return result to our target since they cannot
+ possibly be the same.
+ (target_for_arg): No longer used.
+ (store_one_arg): Save and restore in-use argument list location.
+ Support args passed both in register and on stack.
+ No need for explicit code for preallocated area; now pass location
+ as target to expand_expr; only copy if result in different place.
+ Put sequence point after expanding one value.
+
+ * cse.c (struct write_data): Add bit to indicate stack pointer changed.
+ (canon_hash): Allow recording of stack pointer.
+ (cse_insn): Indicate stack pointer invalidated by subroutine calls.
+ Pass stack push and pop operations to note_mem_written.
+ Process stack pointer assignment as normal operation.
+ Finish change of April 7th that excludes ap and fp from being marked
+ as clobbered by calls. Also exclude sp; if it is clobbered by a
+ call, an explicit CLOBBER will be written.
+ (note_mem_written): Look for adjustment of stack pointer.
+ (invalidate_from_clobbers): Invalidate stack pointer, if required.
+
+ * emit-rtl.c (gen_inline_header_rtx): Add field for outgoing args size.
+ (copy_rtx_if_shared): Check for any virtual register instead of frame
+ or argument pointer.
+ (init_emit): Start normal pseudos after virtual pseudos.
+ Copy the unique virtual regs into regno_reg_rtx.
+ (init_emit_once): Incoming and outgoing static chain can be the same;
+ inlining of nested functions won't need the distinction.
+ Create unique copies of virtual registers.
+
+ * explow.c (memory_address): Don't worry about refs to fp or ap;
+ force_reg knows how to handle them correctly.
+ (fix_lexical_addr): Moved to function.c
+ (adjust_stack, anti_adjust_stack): Do nothing for adjustment of zero.
+ (allocate_dynamic_stack_space): New function copied from
+ expand_builtin. Handle STACK_POINTER_OFFSET via
+ virtual_stack_dynamic_rtx. When STACK_POINTER_OFFSET is defined,
+ perform alignment by always reserving a multiple of STACK_BOUNDARY
+ stack bits. This avoids concern about whether sp itself or the top of
+ stack needs to be aligned; if we start with an aligned stack, we keep
+ it aligned.
+ (round_push): Use ADD and AND rather than DIV and MULT.
+
+ * expr.c (init_expr): Initialize some more vars.
+ (push_block): Use virtual_outgoing_args_rtx so don't need
+ STACK_POINTER_OFFSET here.
+ Merge extra and size more efficiently; no need to call force_operand
+ since memory_address is called.
+ (emit_push_insn): Pass type for FUNCTION_ARG_PADDING.
+ Use REG_PARM_STACK_SPACE instead of FIRST_PARM_CALLER_OFFSET.
+ To see if must copy address, check if it is a virtual register that
+ will be mapped to sp; only need check if not accumulating space
+ space for outgoing parms.
+ Ignore EXTRA if argument block has already been allocated.
+ (emit_library_call): Major rework to support calling sequences similar
+ to expand_call in calls.c, but only support a very small subset of
+ the conventions; abort if something outside our subset occurs.
+ Abort if incorrect mode is passed; we can't convert here since we don't
+ know the signedness.
+ (store_field): Check for virtual registers instead of hard registers
+ when seeing if stable.
+ (safe_from_p): Location in outgoing stack area is known to be safe.
+ (expand_builtin, BUILT_IN_ALLOCA): Use allocate_dynamic_stack_space.
+
+ * expr.h: Define current_function_outgoing_args_size and
+ locate_and_pad_parm; delete definition of get_structure_value_addr.
+ (ARGS_SIZE_RTX): Always return a valid operand.
+ (ARGS_SIZE_TREE): New macro.
+ (FUNCTION_ARG_PADDING): Accept MODE and TYPE like other
+ FUNCTION_ARG_... macros.
+ (FUNCTION_ARG_BOUNDARY): Provide default for new macro.
+ (MUST_PASS_IN_STACK): New macro.
+ (allocate_dynamic_stack_space): New function.
+ * tm-3b1.h, tm-3b1g.h, tm-apollo68.h, tm-crds.h, tm-mot3300.h:
+ Change definition of FUNCTION_ARG_PADDING to use TYPE instead of SIZE.
+
+ * function.c (current_function_outgoing_args_size): New var.
+ (arg_pointer_save_area, virtuals_instantiated): Likewise.
+ (invalid_stack_slot): No longer used.
+ (push_function_context, pop_function_context): Save and restore
+ outgoing args size and arg pointer save area.
+ No longer save or restore invalid_stack_slot.
+ (pop_function_context): Set up variables whose value is constant
+ throughout rtl generation.
+ (get_frame_size): No longer adjust by STARTING_FRAME_OFFSET.
+ (assign_stack_local): Use virtual_stack_vars_rtx instead of fp
+ until virtuals have been instantiated, then use fp.
+ Remove reference to obsolete invalid_stack_slot.
+ Can no longer be called with size == 0.
+ (assign_outer_stack_loc): Use virtual_stack_vars_rtx instead of fp.
+ Remove references to obsolete invalid_stack_slot.
+ Push to obstack of containing function when allocating rtx.
+ (put_var_into_stack): Only switch obstacks around making of
+ queue entry.
+ Replace call to parm_stack_loc with reference to info in proper
+ function.
+ (fixup_stack_1): Handle any virtual register instead of handling
+ just fp.
+ (instantiate_virtual_regs, instantiate_virtual_regs_1): New functions.
+ (use_variable, use_variable_after): Check for virtual register
+ instead of checking against ap and fp.
+ (parm_stack_loc): Function deleted.
+ (assign_parms): No longer need internal_arg_pointer.
+ Accept SECOND_TIME argument that suppresses rtl generation and
+ assignments to DECL_RTL. Used by integrate.c to recompute vars.
+ Don't use FIRST_PARM_OFFSET here; use virtual_incoming_args_rtx.
+ Replace test for nonstable incoming arg pointer.
+ If structure value address is treated as the first argument, add
+ it into the list of arguments; this means we can have a RESULT_DECL
+ in with the PARM_DECL's.
+ DECL_OFFSET is no longer needed by integrate.c.
+ Handle args passed by invisible reference.
+ Support new macro, SETUP_INCOMING_VARARGS, to save all registers used
+ for args including and beyond those for the current arg. Used for
+ non-ANSI varargs.
+ Pass locate_and_pad_parm data it needs to handle reg->stack boundary
+ if register parameters have assigned stack space.
+ If we received the function's incoming structure pointer as a
+ normal argument, update DECL_RTL of DECL_RESULT.
+ Round total argument size if required; similarly, always use at
+ least REG_PARM_STACK_SPACE bytes if defined.
+ (locate_and_pad_parm): Do not need PARM.
+ Major rework to do much of the job of aligning and padding stack
+ location. Now a void function wich is passed pointers to struct
+ args_size vars that are set to the argument position, size, and
+ initial offset.
+ Accept flag denoting if a parm was passed in a register and also
+ the current function declaration.
+ If register parameters are assigned stack locations and there is a
+ minimum required size for the area assigned to register parameters,
+ pad the stack position when a parameter not assigned to a register
+ is encountered.
+ Remove redundant code in MAX_PARM_BOUNDARY case.
+ (lookup_static_chain): Use virtual_stack_vars_rtx instead of fp.
+ (fix_lexical_addr): Move from explow.c.
+ If referencing variable that lives in the incoming argument area
+ of its parent and a separate ap is required, allocate a save area in
+ the parent for it and use it here. If no separate ap is require,
+ compute offset between ap and fp.
+ (trampoline_address): No need to push obstacks here.
+ (init_function_start): Initialize new vars; delete obsolete vars.
+ (expand_function_start): Don't need to handle case where incoming
+ structure return address is passed as hidden parameter here; now done
+ completely in assign_parms.
+ (expand_function_end): Save ap if a save area was made for it.
+ Set REG_FUNCTION_VALUE_P when copying address of returned
+ structure.
+ Be consistent in use of FUNCTION_... macros vs. hard_function_value.
+
+ * function.h (outgoing_args_size, arg_pointer_save_area): New fields.
+ (invalid_stack_slot): Obsolete, deleted.
+
+ * integrate.c: Major rework and simplification.
+ Split up vars into two classes. Those used for expand_inline_function
+ and children are now part of struct inline_remap. Most of the others
+ are for save_for_inline and its children.
+ (function_cannot_inline_p): The only type of arguments that will
+ cause us to reject inlining are variable-sized arguments; also
+ reject functions that return variable-sized objects.
+ For now, don't inline a nested function. We'll support this shortly.
+ Use current_function_returns_pcc_struct instead of duplicating test.
+ (save_for_inline): No need to set TREE_VOLATILE for parms.
+ Save outgoing args size in header.
+ Use unique copy of virtual reg rtx's.
+ Handle any required fixups for INSN_LIST forward-references.
+ Don't bother resetting dead static vars when we are done.
+ Need not save current_function_pretend_args_size.
+ (copy_for_inline): First copy all insns, then all REG_NOTES to avoid
+ problems with forward references.
+ (struct inline_remap): Move all previously-static vars used by
+ expand_inline_function and children into this structure. This avoids
+ potential problems due to recursive calls to expand_inline_function.
+ (expand_inline_function and children): Allocate a struct inline_remap
+ and pass to all children.
+ (expand_inline_function): Rework parameter handling by looking at
+ DECL_RTL and using it to determine what types of mappings need to be
+ done. Support objects passed by invisible reference. Put any
+ constant memory addresses into const_equiv_map. parm_map is no longer
+ used.
+ Likewise for the return value: consult DECL_RTL (DECL_RESULT)).
+ Don't allocate space for called function's frame until referenced.
+ No longer need special handling for insn following CALL.
+ Ignore USE whose argument has REG_FUNCTION_VALUE_P true.
+ Ignore setting function register if we don't have a mapping for it
+ (e.g., we are ignoring the result of the call).
+ Look at new SET_SRC for constant equivalences. Some new ones may
+ have resulted from constant folding.
+ Pass both new and old rtx to try_constants.
+ Discard NOTE_INSN_DELETED notes.
+ Copy insns first, then REG_NOTES, to avoid problems with forward refs.
+ (copy_parm_decls): Compute new address of parameter using the
+ constant equivalence map, which will contain the remapping of
+ the frame and argument pointer.
+ (copy_decl_tree): Likewise.
+ (copy_rtx_and_substitute): Handle references to frame and argument
+ pointers by allocating a space equal to the size of the frame and
+ incoming arguments, respectively, and setting a pseudo to point to
+ the start of each area. Set up an equivalence in CONST_EQUIV_MAP
+ between fp or ap and the actual address. Return the pseudo.
+ Don't need to deal with possibility of (SUBREG (CONST_INT)) since
+ we are only replacing register with other registers here.
+ No longer need to special-case PLUS and MEM; subst_constants will do
+ this work.
+ Update detection of sets of ap and fp.
+ (try_constants, subst_constants): Accept old and new rtx. They will
+ be isomorphic, with only register numbers changed. Use old rtx to
+ look up register in CONST_EQUIV_MAP and new rtx for substitution.
+ Correctly handle SUBREG of CONST_INT and CONST_DOUBLE.
+ Fix typos in handling of PLUS.
+ (access_parm_map, copy_address): Delete functions.
+ (try_fold_cc0): Handle both compare and test.
+ (fold_out_cnst_cc0): Rework to simplify and remove dubious cases.
+ (output_inline_function): Call assign_parms to perform any needed
+ setups.
+ Need not restore pretend arg size (will be computed by assign_parms).
+ Restore outgoing argument size.
+
+ * output.h (current_function_outgoing_args_size): New var.
+
+ * rtl.h (OUTGOING_ARGS_SIZE): New field in INLINE_HEADER.
+ (PRETEND_ARGS_SIZE): No longer needed.
+ (virtual_..., VIRTUAL_...): Define virtual register numbers and rtx.
+
+ * rtlanal.c (rtx_equal_p): Update comment on use of
+ REG_FUNCTION_VALUE_P.
+
+ * stmt.c (expand_goto): Just restore fp; non-local goto handler
+ will restore ap if needed.
+ (expand_return): Don't use STARTING_FRAME_OFFSET here.
+ (expand_end_bindings): Adjust fp in nonlocal-goto handler. If needed,
+ reload ap from its save area in the frame; allocate save area if none.
+ (expand_decl): Use new function allocate_dynamic_stack_space.
+
+ * toplev.c (rest_of_compilation): Instantiate virtual registers.
+ Clear rtx_equal_function_value_matters immediately after possibly
+ saving current routine for inlining.
+
+ * stupid.c (stupid_life_analysis): Don't try to allocate virtual
+ registers (which don't exist any more).
+
+Thu May 10 13:59:11 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c (modes_equiv_for_class_p): Don't compare HARD_REGNO_NREGS.
+
+ * combine.c (subst): Simplify
+ (sign_extend:M (subreg:N (ashiftrt:M (sign_extend:M (any:N ...))))).
+
+ * fixincludes: Verify that a link leads back to /usr/include
+ by checking name of dir it arrives in. If so, use rest of dirname
+ as target for new link.
+
+ * Makefile.in (tmpgnulib): Put dummy entry in loop with LIBFUNCS_EXTRA
+ so loop is never null. Then ignore that entry when it comes up.
+
+ * gcc.c (default_compilers): Add explicit suffix to arg of -dumpbase.
+
+Tue May 8 13:54:37 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-ultrix.h: New file.
+
+Mon May 7 18:47:47 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * i386.md (test... recognizers): Output symbolic constant first.
+
+Sun May 6 22:51:06 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * function.c (fixup_memory_subreg): Make a sequence if -fforce-addr.
+
+ * fixincludes: When going to directory of link name, don't lose
+ if name has no directory.
+ Move the code to fix netinet/ip.h; was in the middle of something.
+
+ * Makefile.in (tmpgnulib): Test LIBFUNCS_EXTRA for nonempty.
+
+Sun May 6 08:29:27 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * Makefile.in (LIBFUNCS): Remove extraneous "\".
+
+ * Makefile.in (stamp-gnulib2): Move "-" to proper line.
+
+ * gnulib2.c (clear_cache): Ignore routine unless INSN_CACHE_SIZE
+ is defined (avoids cpp-detected divide-by-zero).
+
+ * expr.c (safe_from_p): Don't blow up when passed a null tree.
+
+ * varasm.c (get_pool_size): New function to return constant pool size.
+
+Fri May 4 16:11:54 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (safe_from_p): If EXP has some rtx, just check it.
+ Handle TREE_LIST, RTL_EXPR, and WITH_CLEANUP_EXPR.
+ Note that CALL clobbers memory and hard registers.
+ Look at enclosed object for SUBREG, but SUBREG of a hard reg is unsafe.
+
+ * expr.c (store_constructor): Now that safe_from_p has been applied
+ to the target, need not avoid hard register targets.
+ Abort if called with neither ARRAY_TYPE or RECORD_TYPE.
+
+ * reload.c (find_equiv_reg): Handle goal of (plus (sp) (const)).
+
+ * Makefile.in (STAGESTUFF): Include hard-params.
+
+Fri May 4 15:33:22 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gcc.c (add_prefix): New arg WARN. Record in prefix_list.
+ (main): Calls changed. Pass nonzero for -B prefixes.
+ Later, call unused_prefix_warning.
+ (unused_prefix_warning): Warn about prefixes never used.
+
+Thu May 3 16:56:43 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * print-tree.c (print_node): Align the `align' line with the others.
+
+ * expmed.c (store_bit_field): Maximum size for loading mem struct
+ into reg comes from the mode of the value to be stored.
+ Alignment is no restriction if it matches BIGGEST_ALIGNMENT.
+ Always do the real work in SImode if couldn't use MEM.
+ (extract_bit_field): Likewise.
+
+ * combine.c (subst): Handle (sign_extend:M (subreg (sign_extract:M)))
+ on big-endian machine like corresponding zero_extend case.
+
+ * combine.c (try_combine): Use rtl_equal_p instead of == when
+ testing for sources and destinations that match.
+
+ * pyr.md (bitw recognizer): Set CC_NO_OVERFLOW.
+
+Thu May 3 13:03:02 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case COND_EXPR): Can always use original
+ target if specified.
+ In "X ? A + B : A" case, use safe_from_p to see if target conflicts
+ with B.
+
+ * cse.c (cse_insn): Don't rewrite (set REG0 REG1) if REG1 is a hard
+ register even if is REG0 cheaper.
+
+Thu May 3 12:04:19 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c (reload): Handle multiple size groups for one class.
+
+ * stdarg.h: Typo in conditional.
+
+Wed May 2 16:34:25 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-sun3.h (CC1_SPEC): Ignore -target.
+ (WORD_SWITCH_TAKES_ARG): Define it.
+ * tm-sparc.h (CC1_SPEC): Ignore -target and -dalign.
+ (WORD_SWITCH_TAKES_ARG): Define it.
+
+Wed May 2 09:38:33 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_insn): Always replace registers with oldest equivalent,
+ including the case when the destination is present in the source.
+
+Tue May 1 15:55:52 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gnulib2.c (__adddi3, __subdi3): New, simpler algorithm.
+
+Tue May 1 14:48:03 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * Makefile.in: Insert "else true;" in *_ALLOCA macros.
+
+ * stor-layout.c (mode_for_size): No longer static.
+ Accept LIMIT parameter to limit mode to MAX_FIXED_MODE_SIZE.
+ (layout_decl, layout_type): Pass appropriate limit parameter to
+ mode_for_size.
+
+Tue May 1 13:09:43 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stmt.c (assign_parms): Don't make entry_parm and stack_parm valid.
+ Leave them explicit stack slots.
+ * explow.c (validize_mem): Copy it, don't alter it.
+
+ * out-m68k.c (standard_68881_constant_p): Handle HOST_WORDS_BIG_ENDIAN.
+
+ * integrate.c (save_for_inline): Copy reg notes after all insns.
+
+ * combine.c (subst): When checking reg_last_set, verify nonzero.
+
+ * gcc.c (default_compilers): Use %b, not %i, after -dumpbase.
+
+ * stor-layout.c (make_unsigned_type): Change like make_signed_type.
+
+Tue May 1 07:36:21 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * tm-m68k.h (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE): Allocate space
+ for local variables even if no frame pointer; adjust size to account
+ for place where old frame pointer would have been placed.
+ (INITAL_FRAME_POINTER_OFFSET): Add frame size instead of subtracting
+ it and perform adjustment described above.
+
+ * expr.c (validate_subtarget): Deleted.
+ (expand_expr): Replace calls to validate_subtarget with safe_from_p.
+
+Mon Apr 30 01:39:14 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Makefile.in (install-headers): Simplify loop by cd'ing to srcdir.
+
+ * stor-layout.c (layout_type): Get alignment of all scalar types
+ from the mode.
+ (make_signed_type): Get rid of ptr_size_node, function_size_node.
+ * tm-*.h (POINTER_BOUNDARY): Deleted.
+
+ * c-typeck.c (build_unary_op): For ADDR_EXPR of COMPONENT_REF,
+ mark the PLUS_EXPR constant if appropriate.
+ (parser_build_binary_op): Record C_SET_EXP_ORIGINAL_CODE here.
+ (build_binary_op): Not here.
+
+ * fold-const.c (size_int): Make arg unsigned.
+
+ * varasm.c (output_addressed_constants): Fixed typo.
+
+ * cccp.c (macarg1): `\' not special outside strings.
+
+ * c-typeck.c (build_unary_op): In increment ops,
+ typo checking for ptr to void/function.
+ Check original type for this and for amount of increment.
+
+Sat Apr 28 16:43:08 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-typeck.c (build_indirect_ref): Error if target is incomplete type.
+
+Fri Apr 27 13:56:22 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c (order_regs_for_reload): Count multi-word pseudos right.
+
+Thu Apr 26 17:52:17 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (handle_directive): Don't pass directive through if no_output.
+
+ * c-parse.y (yylex): Large hex constants are signed if -traditional.
+
+Tue Apr 24 13:57:22 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * i860.md, m88k.md: Add missing = in some output constraints.
+
+ * tm-ns32k.h (POINTER_BOUNDARY): Now 32.
+
+ * out-*.c (output_move_double): Use split_double.
+ * final.c (split_double): New function, handles byte-order differences.
+
+ * stmt.c (expand_decl): Check size for integer, not "constant".
+ * stor-layout.c (layout_decl, layout_type): Likewise.
+ * c-decl.c (finish_decl): Likewise.
+ * c-typeck.c (digest_init): Likewise.
+ * varasm.c (assemble_variable, output_constructor): Likewise.
+ (decode_addr_const): Distinguish getting rtl by code alone.
+ (output_addressed_constants): No need to abort.
+ In ADDR_EXPR case, check TREE_CODE_CLASS.
+
+ * c-tree.h (C_DECLARED_LABEL_FLAG): New flag.
+ * c-parse.y (label declarations): Set it.
+ * c-decl.c (pop_label_level, lookup_label): Use it.
+
+ * expr.c (string_constant): Accept variable offsets.
+ (expand_expr): Check for explicit integers, not constants, in sizes.
+ (safe_from_p): No need to check TREE_CONSTANT.
+
+ * Makefile.in (prefix): Now replaces /usr/local instead of adding on.
+
+Mon Apr 23 02:01:11 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cplus-tree.h (DECL_FRIENDLIST): Use DECL_INITIAL.
+
+ * expr.c (expand_assignment): Use expr_size to compute size.
+
+Sun Apr 22 21:53:55 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (expand_assignment, expand_expr): Check for COMPONENT_REF
+ before testing DECL_BIT_FIELD.
+
+ * stor-layout.c (convert_units): Deleted. All calls eliminated.
+
+ * TREE_CONSTANT renamed from TREE_LITERAL.
+ * TYPE_READONLY split off from TREE_READONLY.
+ * TREE_SIDE_EFFECTS renamed from TREE_VOLATILE.
+ * TYPE_VOLATILE split off from TREE_VOLATILE/TREE_THIS_VOLATILE.
+
+Sun Apr 22 15:26:50 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * loop.c (strength_reduce): Avoid problems in biv elimination by not
+ being forced to use giv's that have complex new_reg values while the
+ underlying giv is marked maybe_dead; clear maybe_dead in this case.
+
+ * loop.c: Make verification of loops take linear, not quadratic, time.
+ (verify_loop, can_jump_in_range_p): Deleted.
+ (prescan_loop): New function, contents are from old verify_loop.
+ (scan_loop): Call prescan_loop.
+ (find_and_verify_loops, mark_loop_jump): New functions.
+ (loop_optimize): Allocate new tables and call find_and_verify_loops
+ once instead of calling verify_loop for each loop.
+ Use data from find_and_verify_loops instead of scanning all insns.
+
+ * expr.c (safe_from_p): New function.
+ (validate_subtarget): Use safe_from_p.
+ (expand_expr, case CONSTRUCTOR): Likewise.
+
+ * expr.c (store_expr): Handle cases where EXP is a compound
+ or conditional expression specially to avoid unnecessary temporaries.
+
+Sun Apr 22 00:15:58 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tree.h (struct tree_type): Delete size_unit.
+ (struct tree_decl): Delete size_unit and voffset_unit.
+ Reduce lang_flags to save 1 word.
+
+ * function.c (init_function_start): Don't use DECL_RESULT_TYPE.
+ * integrate.c (expand_inline_function): Likewise.
+ * c-decl.c (start_function, duplicate_decls): Likewise.
+ * tree.h (struct tree_decl): Delete voffset.
+ (DECL_RESULT_TYPE): Deleted.
+
+ * objc-actions.c (encode_field_decl, objc_copy_list):
+ Switch to DECL_FRAME_SIZE.
+ * cplus-class.c (finish_struct): Likewise.
+ * cplus-decl2.c (grokbitfield): Switch to DECL_BIT_FIELD.
+ * c-parse.y, cplus-parse.y, objc-parse.y: Likewise.
+
+ * tree.h (TYPE_NO_FORCE_BLK): New flag in types.
+ * stor-layout.c (layout_type): Use it.
+ * tree.h (DECL_TOO_LATE): New flag.
+ * stmt.c (expand_end_bindings, expand_goto_internal): Use it.
+ * tree.h (TREE_PACKED): Deleted.
+
+ * cplus-typeck.c (unary_complex_lvalue): Confusing use of
+ DECL_SIZE_UNIT; not clear what to do.
+ * cplus-tree.c (layout_vbasetypes): Likewise.
+ * cplus-class.c (modify_vtable_entry): Likewise.
+
+ * cplus-parse.y (YYDEBUG): Force it on.
+ (print_parse_statistics, init_parse): No-op if not YYDEBUG.
+
+ * fold-const.c (fold): REAL_INFINITY affects reals, not ints.
+
+ * protoize.c (edit_fn_declaration): Make arg volatile to stop warning.
+
+Sat Apr 21 03:04:32 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expmed.c (store_bit_fields): Adjust for elimination of BImode.
+
+ * c-parse.y (simple_if, stmt): Store stmt_count in proper place,
+ which is slot 1 of the if.
+ (simple_if, lineno_stmt, stmt): Output the note at beginning of
+ stmt, not in lineno_stmt. Use emit_line_note.
+ (simple_if): Set if_stmt_*, then use lineno_stmt directly.
+ (lineno_stmt): Before most uses, call skip_white_space.
+ (finput): Move to top of file.
+
+ * cplus-class.c (build_instantiated_decl): Fix typo.
+
+ * cplus-tree.h (C_TYPE_FIELDS_READONLY): Use lang_flag_1.
+ (TYPE_HAS_CONSTRUCTOR, TYPE_HAS_DESTRUCTOR, TYPE_NEEDS_CONSTRUCTOR):
+ (TYPE_NEEDS_DESTRUCTOR): Advance each to next lang_flag.
+ * tree.h (TREE_LANG_FLAG_5, TREE_LANG_FLAG_6): Define them.
+
+ * config.gcc: Delete ./Makefile.in iff not in the source dir.
+
+ * Makefile.in (for-bootstrap): New target.
+
+ * dbxout.c (dbxout_finish_symbol, dbxout_type, dbxout_prepare_symbol):
+ Add temporary conditionals on WINNING_GDB.
+
+ * print-tree.c (print_node): Print the TYPE_SYMTAB_ADDRESS.
+
+ * Makefile.in (protoize.o, unprotoize.o, SYSCALLS.c.X):
+ Include from or look in dir $(srcdir).
+
+Fri Apr 20 16:30:11 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * varasm.c (output_constructor): Backward test for bit-field.
+
+ * Makefile.in (stamp-*): Delete .c or .h from these names.
+
+Fri Apr 20 15:56:21 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cplus-typeck.c (compparms, comp_target_parms, build_modify_expr_1):
+ (build_modify_expr): Clean parens in complicated if.
+ * cplus-decl.c (finish_decl, grokdeclarator): Likewise.
+
+Fri Apr 20 14:42:36 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-3b1.h (ASM_SPEC, PRINT_OPERAND_ADDRESS): Support 68020, 68881.
+ Useful even though this isn't one.
+ (ASM_OUTPUT_OPCODE): Convert fbne to fbneq. Don't change ftst.
+ (REGISTER_NAMES): Define it. Fpreg names not same as hp.
+
+ * stor-layout.c (mode_for_size): Don't check MAX_FIXED_MODE_SIZE.
+ (layout_type): Check it here when appropriate.
+
+ * loop.c (strength_reduce): Clean parens in complicated if.
+
+ * fold-const.c (mul_double, const_binop): Add parens around shifts.
+
+Thu Apr 19 03:03:39 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * machmode.def: Delete unused modes.
+
+ * stor-layout.c (mode_for_size): Accepts mode class as arg.
+ Calls changed.
+ (layout_type): Can now use mode_for_size for floating types.
+
+ * stor-layout.c (layout_type): Get mode of function type from size.
+ * c-decl.c, cplus-decl.c (grokdeclarator): Don't worry about
+ mode of a function type.
+ * calls.c (prepare_call_address): No values contain static chains.
+
+ * tree.h (struct tree_decl, struct tree_common): Rename the flag bits.
+ * cplus-tree.h: References here changed.
+
+ * tree.h (DECL_BIT_FIELD): New macro, with new flag.
+ * print-tree.c: Print it.
+ * stor-layout.c (layout_decl): Use on input instead of TREE_PACKED.
+ Clear it if field happens to be aligned.
+ * expr.c, tree.c, varasm.c, symout.c, objc-actions.c, c-typeck.c:
+ Use this to distinguish bit-fields.
+ * c-decl.c, cplus-class.c (finish_struct): Set this for bit-fields.
+
+ * c-typeck.c (build_binary_op): Make NON_LVALUE_EXPR, not NOP_EXPR.
+
+ * out-sparc.c (find_addr_reg): Avoid using frame pointer.
+
+ * config.gcc: Delete all formfeeds from Makefile.
+
+ * stor-layout.c (layout_decl): Delete `bitsize'.
+ (layout_record): Test size for CONST_INT, not TREE_LITERAL.
+ (layout_type): Simplify array case.
+
+ * fold-const.c (size_binop): Division not special case.
+
+Wed Apr 18 16:05:23 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-typeck.c (datatype): Function deleted.
+ (build_binary_op_nodefault, pointer_int_sum, pointer_diff):
+ Don't use it.
+ * cplus-typeck.c (build_binary_op_nodefault, pointer_int_sum):
+ (pointer_diff): Likewise.
+ (convert_for_assignment): Likewise. Took some work.
+ (datatype): Function deleted.
+
+ * c-typeck.c (common_type): Renamed from commontype.
+ (function_types_compatible_p): New function.
+ (compparms): Deleted.
+ (self_promoting_args_p): Renamed from compparms1.
+ * cplus-typeck.c (common_type, self_promoting_args_p): Likewise.
+ * c-typeck.c (build_function_call): Eliminate local value_type.
+
+ * c-typeck.c (parser_build_binary_op): Detect +/- within boolean.
+
+ * c-typeck.c (convert_arguments): Renamed from actualparameterlist.
+ Push results on front, and reverse at end.
+ * cplus-typeck.c: Likewise. All calls changed.
+
+ * tree.h (STMT_BIND_SIZE): Deleted.
+ (struct tree_bind_stmt): Deleted that slot.
+ * tree.c (build_let_stmt): Don't set it.
+
+ * print-tree.c (print_node): Call print_lang_identifier.
+ * c-decl.c, cplus-ptree.c (print_lang_identifier): New function.
+
+ * gnulib2.c (__clear_cache): New function.
+
+Tue Apr 17 16:57:17 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cplus-tree.c (build_member_type): Use TYPE_HASH, not TREE_UID.
+ (TYPE_HASH): Use the address. Delete the duplicate definition.
+
+ * c-typeck.c (build_unary_op): Bug in pedantic warning about ++.
+
+ * tree.h (TYPE_SEP, TYPE_SEP_UNIT): Deleted.
+ * stor-layout.c (layout_type): Don't set them.
+ (mode_for_size): New name for agg_mode; code cleaned up.
+ * c-tree.h (C_TYPE_FIELDS_READONLY): Use TREE_LANG_FLAG_1.
+
+ * fold-const.c (size_int, size_binop): New names for build_int
+ and genop, moved here. All callers changed.
+ (const_binop): New name for combine, and now static.
+ * stmt.c (expand_end_case, group_case_nodes, node_has_low_bound):
+ (node_has_high_bound): Don't call `combine' directly.
+
+ * tree.h (DECL_VOFFSET, DECL_VOFFSET_UNIT): Deleted.
+ * tree.c (staticp): Don't use DECL_VOFFSET.
+ * stor-layout.c (layout_*): Don't use it or set it.
+ (layout_record): Simplify: Keep all sizes in units of 1.
+
+ * tree.c (debug_tree, print_node, print_node_brief, indent_to):
+ New functions to print a tree.
+ * c-decl.c (print_lang_decl, print_lang_type): Define as no-op.
+ * cplus-ptree.c (print_lang_type): Complete rewrite.
+ Most other functions deleted.
+ * tree.c (print_node): Call print_lang_* unconditionally.
+
+ * tree.c (TYPE_HASH): Now use the address.
+
+Mon Apr 16 16:27:28 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * final.c: Check LEAF_REGISTERS, not LEAF_REGS.
+
+ * real.h (*_FLOAT_FORMAT): Change enums to macros.
+ (REAL_INFINITY): Define it if IEEE format.
+
+ * c-decl.c (c_decode_options): Handle -Wconversion here.
+ * toplev.c (main): Not here.
+
+ * tm-*.h (INITIAL_FRAME_POINTER_OFFSET): Count get_frame_size.
+
+Mon Apr 16 15:05:49 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * loop.c (eliminate_biv): Build COMPARE with VOIDmode, not mode
+ of operands.
+
+Mon Apr 16 14:55:58 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * jump.c: Include real.h.
+
+Sun Apr 15 20:30:24 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * c-typeck.c (pedantic_lvalue_warning): New function.
+ (build_component_ref): Handle COMPOUND_VALUE and COND_EXPR by moving
+ reference inside it and calling pedantic_lvalue_warning.
+ (build_unary_op): Incrementing a cast-expression is warning, not
+ error; call new pedantic_lvalue_warning.
+ (unary_complex_lvalue): Use of compound or conditional expression as
+ lvalue is warning, not error.
+ (build_modify_expr): Likewise.
+ * cplus-typeck.c: Likewise.
+
+Sun Apr 15 12:27:11 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cse.c (fold_rtx, fold_cc0): Check TARGET_FLOAT_FORMAT,
+ not FLOAT_NOT_IEEE.
+ * jump.c (jump_back_p): Likewise. FLOAT_NOT_IEEE is now gone.
+
+ * cccp.c (collect_expansion): Handle warn_stringify.
+ (main): Set it for -Wtraditional.
+
+ * function.c (init_function_start):
+ Set current_function_returns_pointer here.
+ (expand_function_start): Not here.
+
+ * expr.c (emit_library_call): Precompute reg and partial of all parms,
+ to do it in proper order.
+
+ * final.c (final_scan_insn): Typo in deleting obvious no-ops.
+
+ * expr.c (emit_push_insn): Change #if to ordinary if.
+
+Sat Apr 14 13:20:40 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (do_jump): In COMPONENT_REF, check TYPE is nonzero.
+
+ * tm-i386.h (ASM_OUTPUT_ADDR_DIFF_ELT): Delete spurious `abort ()'.
+
+ * emit-rtl.c (reverse_comparison): New function.
+ (get_last_insn_anywhere): New function.
+ * i386.md (ble, blt): New define_expands.
+
+ * Makefile.in (LANGUAGES): New parameter chooses languages to build.
+ (native): Use that.
+ (c, c++, objc): Targets for use in LANGUAGES.
+
+ * Makefile.in (install): Split up.
+ (install-cross, install-headers, install-gnulib, install-proto):
+ (install-man, $(libsubdir)): New targets.
+
+ * Makefile.in (native): New target, split from start.encap.
+ (tmpgnulib): Split out from gnulib.portable.
+ (gnulib.convert): Makes tmpgnulib, then converts.
+ (LIBCONVERT): New parameter.
+ (GCC_FOR_TARGET): New parameter.
+ (hard-params.o, hard-params, stamp-gnulib2): Use that.
+
+ * cse.c (fold_cc0): Compare equivalence classes of non-constants.
+ Waiting for papers from Steven McCanne.
+
+Fri Apr 13 14:12:46 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stor-layout.c (layout_type): If record is BLKmode because not
+ aligned, set TREE_PACKED. Don't force BLKmode due to field
+ with TREE_PACKED.
+
+ * cse.c (fold_rtx): Use dconst1, not atof.
+ * varasm.c (output_constant): Likewise.
+
+ * c-parse.y (yylex): Handle SIGFPE in atof.
+
+ * tm-tti68k.h: New file.
+
+ * toplev.c, flags.h (flag_pretend_float): New flag.
+
+ * regclass.c (reg_class_record): Handle `E' constraint, for float
+ constants but only if can examine their bits.
+ * reload.c (find_reloads): Likewise.
+ * recog.c (constrain_operands): Likewise.
+ * out-m68k.c (output_move_double): Abort on float constant
+ if can't examine the bits.
+ (standard_68881_constant_p): Fail if can't examine the bits.
+ (standard_sun_fpa_constant_p): Likewise.
+
+ * m68k.md (DFmode move recognizers): Use `E', not `F'.
+ * tm-m68k.h (PREFERRED_RELOAD_CLASS): Handle float constants.
+
+ * tm-next.h (ASM_OUTPUT_FLOAT, ASM_OUTPUT_FLOAT_OPERAND):
+ (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_DOUBLE_OPERAND): Use REAL_VALUE_ISINF.
+ * tm-sun3.h, tm-sparc.h: Likewise.
+
+ * xm-vax.h (HOST_FLOAT_FORMAT): Define it.
+ * tm-vax.h (TARGET_FLOAT_FORMAT): Define it.
+
+ * real.h (enum float_format): Define codes for formats.
+ (HOST_FLOAT_FORMAT, TARGET_FLOAT_FORMAT): New macros, defaulted here.
+ (REAL_IS_NOT_DOUBLE, REAL_VALUE_TYPE): Override if formats differ.
+ (REAL_VALUE_ISINF): New macro.
+ * xm-vax.h (isinf): Define as macro.
+
+ * Makefile.in (LIBFUNCS_EXTRA): New variable.
+ (gnulib.portable): Compile those files.
+
+ * Makefile.in (AUX_OUTPUT2): New variable.
+ (OBJS): Use it.
+ (aux-output2.o): New target.
+
+ * Makefile.in (RANLIB, RANLIB_TEST): New variables.
+
+ * Makefile.in (AR_FLAGS, OLDAR_FLAGS): New variables.
+ (gnulib.portable, stamp-gnulib2): Use them.
+
+ * i386.md: Add patterns for `bt' insns.
+
+Fri Apr 13 12:54:14 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * c-decl.c (builtin_function): Now returns decl that was made.
+
+ * config.gcc: Support both -host= and +host=.
+
+Thu Apr 12 22:39:10 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Changes from Data General.
+
+ * syms.h: New file.
+ * sdbout.c: Include that if not USG.
+
+ * tree.h (enum built_in_function): Added BUILT_IN_STRCPY and
+ BUILT_IN_STRCMP.
+ * c-decl.c (init_decl_processing): Create additional pointer and
+ function types. Declare strcpy, strcmp, memcpy, memcmp built-in.
+ * expr.c (expand_builtin): Support strcpy, strcmp, memcpy, memcmp.
+ If special handler breaks out of switch, do library call.
+ By default, print error message and do library call.
+ (get_pointer_alignment, string_constant): New functions.
+
+ * dbranch.c: Put entire contents in conditional on HAVE_DELAYED_BRANCH.
+ (init_flags, enote): Clear and set memr.
+ (enote): Don't move a store across a fetch.
+ (insn_eligible_p): Check enote before volatility and dependencies.
+ Check for volatility if memw or memr.
+ (loads_from_mem_p): New function.
+
+ * Makefile.in (dbranch.o): New target.
+ (OBJS): Add dbranch.o.
+
+Thu Apr 12 22:39:10 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * calls.c (expand_call): Count args in order written, with argpos.
+
+Thu Apr 12 22:01:16 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expmed.c (synth_mult): Ensure OPS is always valid in returned alg.
+
+ * local-alloc.c (block_alloc): If we have an operand that is an
+ address, look inside it for registers to combine with.
+
+ * reload.c (combine_reloads): If the output reload is for an
+ earlyclobber operand, can't combine it.
+ Try to use a register that dies in an insn for a single output reload
+ if the insn has only one output.
+
+Thu Apr 12 21:27:18 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (duplicate_decls): Preserve DECL_INITIAL from old
+ function def to new one.
+
+Thu Apr 12 07:55:14 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_assignment): Order of source and destination to
+ bcopy/memcpy was reversed.
+
+Wed Apr 11 17:29:18 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-i386.h (ABC_REGS): New register class.
+ (REG_CLASS_CONTENTS, REG_CLASS_NAMES, enum reg_class): Changed.
+ * i386.md (divsi3, etc.): Exclude register d from constraints.
+
+ * c-parse.y (save_filename, save_lineno): New nonterminals
+ to record text location at start of statement.
+ (lineno_stmt): New nonterminal, outputs line note before statement.
+ (lineno_decl): Likewise for decl, to avoid conflicts.
+ (stmt): Don't emit line notes at start of statement.
+ (simple_if): Collect file and line using save_filename, save_lineno.
+
+ * Changes from Data General.
+
+ * cccp.c (main, do_include): Implement -H to print header names.
+
+ * c-parse.y (component_decl_list): Parse even if final `;' missing.
+
+Wed Apr 11 16:49:16 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * gcc.c: Fix miscellaneous typos.
+
+Wed Apr 11 12:59:57 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * config.gcc: Typos in setting pass1done, testing it,
+ and calling sed for usage msg.
+
+ * cccp.c (macroexpand): Count Newline Space as part of whitespace
+ sequence when stringifying.
+
+ * expmed.c (expand_mult): Handle synth_mult returning no operations.
+
+Tue Apr 10 21:08:06 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (do_line): No error if string follows number without space.
+
+Tue Apr 10 20:52:02 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * recog.c (apply_change_group): Return a zero if rejected changes.
+
+ * loop.c (update_giv_derive): If a giv is only set conditionally, it
+ may only derive other givs in its own basic block.
+
+Tue Apr 10 13:09:40 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-ctix.h: New file. Waiting for papers from Ronald Cole.
+ csusac!unify!dbrus.rjc@ucdavis.ucdavis.edu.
+
+ * cse.c (rtx_cost): Use new macro RTX_COSTS.
+ (COSTS_N_INSNS): New macro for use in RTX_COSTS.
+
+ * config.gcc: Fix typos in conditionals and case. Also usage message.
+ Missing backslashes in `echo | tee'.
+ Unset various vars after pass 1.
+
+ * c-typeck.c (build_c_cast): Complain if function type specified.
+
+ * expmed.c (synth_mult): Accept max_cost as arg and cut off there.
+ Pass it along recursively, making it smaller.
+ Eliminate quadratic loop, thus postponing powers of 2.
+ Costs are now signed. Initialize best_alg->cost from max_cost
+ and change to -1 only before returning.
+ (expand_mult): Pass cost of multiply as max cost.
+ Use synth_mult only if optimizing.
+ In alg_compound case, sign was backward.
+ Use TEM as target for force_operand there, to get better output.
+
+Tue Apr 10 07:09:51 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case COND_EXPR): Add missing argument to
+ operand_equal_p.
+ Check for (X ? unop A : A) in addition to (X ? A + B : A).
+
+ * Makefile.in (protoize, unprotoize): Compile with GCC, not just link.
+
+ * fold-const.c (fold): Fix typo in converting conditional to COND.
+
+ * expr.c (expand_expr): Treat (A ? 1 : 0) as A when A is a comparison.
+ (do_jump): Special-case (A ? 1 : 0) and (A ? 0 : 1).
+
+ * expr.c (store_expr): Fix typo in checking mode of target.
+
+Mon Apr 9 18:33:55 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * integrate.c (expand_inline_function): Clear out parm_copies.
+
+Mon Apr 9 18:00:40 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * tree.def: SAVE_EXPR now has three operands.
+ * tree.h: Add new field SAVE_EXPR_CONTEXT; SAVE_EXPR_RTL remains last.
+ * tree.c (save_expr): Set context to current function.
+ (decl_function_context): Context is in SAVE_EXPR_CONTEXT if SAVE_EXPR.
+ * calls.c (expand_call): Call make_tree to build an RTL_EXPR instead
+ of explicitly making SAVE_EXPR.
+ * cplus-typeck.c (c_expand_return): Use make_tree instead of SAVE_EXPR.
+ * c-parse.y, objc-parse.y: Don't call mark_addressable here.
+ * expr.c (expand_expr, ..._DECL cases): If non-local, make addressable.
+ (expand_expr, case SAVE_EXPR): If defined in containing function, put
+ put into stack.
+ * function.c (put_var_into_stack): Use SAVE_EXPR_RTL for SAVE_EXPR.
+ * print-tree.c (dump): SAVE_EXPR_RTL is now third operand.
+ * stmt.c (expand_asm_operands): Call save_expr instead of making
+ tree node directly.
+
+Mon Apr 9 00:08:15 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Makefile.in (install): Turn off x bit on SYSCALLS.c.X.
+
+ * i860.md (cmpeqsf, etc.): Change opcode name to pfeq.ss, etc.
+
+ * tm-m68k.h (PRINT_OPERAND_PRINT_FLOAT): Delete spurious backslash.
+
+ * c-decl.c (store_parm_decls): Don't do storedecls in prototype case.
+ That was discarding the enumerators already pushdecl'd.
+
+ * gcc.c (exec_prefix, startfile_prefix): Record prefix search paths.
+ (find_a_file): New function to search a path.
+ (find_exec_file): Deleted; find_a_file used instead.
+ (find_file): Just call find_a_file.
+ (add_prefix): Add name to a prefix path.
+ (process_command): Call that.
+
+ * gcc.c (spec_list): Generalize asm_spec, etc., to arbitrary names.
+ (set_spec): New function. Set the old specific vars and spec list.
+ (do_spec_1): Handle `%(' and `%[' for general specs.
+
+ * ns32k.md (ashlhi3): Use %0, not %1.
+
+ * cplus-tree.h (TREE_ANON_UNION_ELEM, DECL_ANON_UNION_ELEM):
+ regdecl_attr is now in decl, not common.
+ (TREE_PARMLIST): Use external_attr.
+ (TREE_VIA_PUBLIC): Use static_attr.
+
+Sun Apr 8 23:43:59 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * fold-const (fold): Two conversions in a row are needed if from a
+ pointer type to an integer type of a different precision.
+
+ * flow.c (mark_used_regs): When replacing addition with register
+ in auto-increment creation, mark that insn must be re-recognized.
+
+Sun Apr 8 13:56:17 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-m68k.h (ASM_OUTPUT_FLOAT): Defn depends on CROSS_COMPILER.
+ (PRINT_OPERAND): Depends on CROSS_COMPILER and HOST_WORDS_BIG_ENDIAN.
+ (PRINT_OPERAND_EXTRACT_FLOAT, PRINT_OPERAND_PRINT_FLOAT):
+ These new subroutines contain the code that depends.
+
+ * xm-m68k.h, xm-mips.h, xm-pyr.h, xm-tahoe.h (HOST_WORDS_BIG_ENDIAN):
+ New macro, defined in these files.
+
+ * config.gcc: Define macro CROSS_COMPILE if making cross-compiler.
+ * Makefile.in (INTERNAL_CFLAGS): Include CROSS.
+
+ * config.gcc: Decode -host argument. Set $host and $target.
+ Rename vars for files to link to, to tm_file, xm_file, etc.
+ Let $host override xm_file value.
+ Mention $host in messages and config.status if diff from $target.
+ Check for errors in args at beginning of processing.
+
+ * expmed.c (expand_shift): Make no insns if count is 0.
+
+ * cse.c (rtx_cost): Increase default cost of mult and div.
+
+ * expmed.c (synth_mult): New function. Finds best way to multiply
+ by given constant, and the cost.
+ (expand_mult): Use that.
+ (init_expmed): Init new vars add_cost, shift_cost, mult_cost,
+ and negate_cost. mult_is_cheap has been deleted.
+
+ * expmed.c (store_bit_field): Don't use insv if unit for copying
+ mem to reg won't hold the entire field.
+
+Sun Apr 8 12:54:07 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case COND_EXPR): Add OK_DEFER_POP to path with
+ only OK_DEFER_POP.
+
+Sun Apr 8 12:50:54 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * i386.md (insv): Use SImode for operand 0.
+
+Sat Apr 7 15:24:56 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * emit-rtl.c (gen_lowpart, gen_highpart): When checking mode class,
+ check for not MODE_FLOAT.
+ * cse.c (fold_rtx): Likewise when avoiding x-x -> 0 for IEEE float.
+ * jump.c (jump_back_p): Likewise.
+ * optabs.c (emit_cmp_insn): Likewise, comparing result of libcall.
+ * expr.c (move_block_to_reg, emit_push_insn): Likewise,
+ when putting floats in memory.
+
+ * machmode.def (PSImode, PDImode): Class is now MODE_PARTIAL_INT.
+ * expr.c (convert_to_mode): Don't treat them as ints.
+
+ * fixincludes: When making directory links, assume any relative path
+ is within /usr/include.
+
+Sat Apr 7 14:56:27 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * function.c (assign_stack_local, assign_outer_stack_local):
+ Don't use division for rounding to avoid problems with negative
+ dividends; use logical operations instead.
+ No need to ever align stricter than BIGGEST_ALIGNMENT.
+
+Sat Apr 7 14:38:36 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (expand_expr, case CONSTRUCTOR:): Finish Jan 12 change
+ in store_expr by calling store_constructor if target is a temp.
+
+ * cse.c (cse_insn): For regs invalidated by calls, go back to
+ checking for fp and ap explicitly, not fixed_regs.
+
+Sat Apr 7 14:06:43 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * recog.h: Define num_validated_changes and cancel_changes.
+ * recog.c (validate_change, apply_change_group, cancel_changes):
+ Support changes both within an insn and within a MEM.
+
+Sat Apr 7 00:45:49 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * sparc.md (addcc and subcc patterns): Set CC_NO_OVERFLOW.
+
+Fri Apr 6 15:20:51 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cccp.c (lookup_import): Return -1 for not found to agree with
+ the open system call. Use -2 for duplicate.
+ (do_include): -2 now means duplicate; previously, -1 meant not found
+ from open and duplicate from lookup_import.
+
+Fri Apr 6 00:06:08 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (poplevel): Use DECL_INITIAL to detect undef label.
+
+ * sparc.md (peephole for returning sum): Use more restrictive preds.
+
+ * reload1.c (choose_reload_regs): When testing reload reg
+ for HARD_REGNO_MODE_OK, use SImode instead of VOIDmode.
+
+Thu Apr 5 14:00:41 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (main, include_defaults): Use STANDARD_INCLUDE_DIR
+ instead of /usr/include.
+ * Makefile.in (cccp.o): Specify STANDARD_INCLUDE_DIR.
+
+ * varasm.c (assemble_variable): No sdb output for initialized global.
+ * toplev.c (compile_file): Output it here, at end of run.
+
+ * stdarg.h (va_start): Round initial pointer value down
+ to double boundary. This is to eliminate big-endian adjustment.
+
+ * fixincludes: Delete netinet/ip.h and sundev/vuid_event.h
+ if no changes are needed.
+
+ * c-typeck.c (build_c_cast): Reject array types for result.
+ * cplus-typeck.c (build_c_cast): Likewise.
+
+ * tm-*.h (ASM_OUTPUT_SKIP): Print size as unsigned.
+ (ASM_OUTPUT_COMMON, ASM_OUTPUT_LOCAL): Likewise.
+
+ * fold-const.c (fold): Simplify double truncation, double extension,
+ or extension followed by truncation.
+
+ * fixincludes: Don't ignore errors when making dirs.
+ But check whether dir already exists.
+
+ * cse.c (fold_rtx): Don't simplify real*0, because of nans.
+
+ * real.h (dconst0, dconst1, dconstm1): Declare them.
+ * tree.c (real_zerop, real_onep): New functions.
+ * fold-const.c (fold): Check for trivial +, -, * with reals.
+ Also use dconst0 instead of computing with REAL_VALUE_ATOF.
+
+Tue Apr 3 22:52:26 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * m68k.md (32-bit bit fields): Special patterns added.
+ (push byte and adjust stack by 2): New peephole.
+ These from Bruce Robertson.
+
+ * c-decl.c (grokdeclarator): Complain if fn defn has `typedef' etc.
+
+Tue Apr 3 21:39:54 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (preexpand_calls): Reinsert check to not expand calls
+ already preexpanded.
+
+Mon Apr 2 07:05:34 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * c-typeck.c (digest_init): Don't blow up on null list.
+
+ * Makefile.in (cc1obj): Link OBJC_OBJS instead of C_OBJS.
+ * objc-actions.c: Correct compilation errors.
+ * objc-parse.y: Likewise.
+
+Mon Apr 2 03:33:14 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * objc-actions.h: Define the objc tree codes.
+ Declare doing_objc_thang.
+
+Fri Mar 30 17:28:30 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * sdbout.c (PUT_SDB_EPILOGUE_END): Write out assembler name for
+ function (i.e., usually include leading "_").
+
+ * sdbout.c (PUT_SDB_...): Use new macro SDB_DELIM; it defaults to ";".
+
+Fri Mar 30 15:25:20 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * jump.c (prev_active_insn, next_active_insn): New functions.
+ These skip USEs and CLOBBERs.
+ (jump_optimize): Use them instead of ..._real_insn
+ for the simple optimizations.
+
+ * integrate.c (expand_inline_function): Always index const_equiv_map
+ with regno from current function. And set up the map only after
+ creating all the pseudos we will need for the parms.
+ This requires intermediate tables parm_equivs and parm_copies.
+ Make const_equiv_map big enough to handle all the pseudos we
+ expect to make. Record actual size, and don't look in it
+ for regnos too large.
+ (subst_constants, const_equiv): Don't access const_equiv_map
+ if regno is too large.
+
+ * function.c (trampoline_address): Push and pop obstacks around
+ call to assign_outer_stack_local.
+
+ * function.c (push_function_context, pop_function_context):
+ Save and restore max_parm_reg and parm_reg_stack_loc.
+ * function.h (struct function): Make slots.
+
+ * c-decl.c (c_build_type_variant): New function.
+ (grokdeclarator): Call that, for ARRAY_TYPE only, in fields and vars.
+ * c-decl.c, c-typeck.c: All calls to build_type_variant use that now.
+
+ * emit-rtl.c (reinstate_emit_status): Unused function deleted.
+
+Thu Mar 29 15:35:47 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tree.c (rtl_in_current_obstack): New function.
+ * toplev.c (rest_of_compilation): Call that.
+ This makes it true that rtl is allocated in current_obstack
+ during optimization.
+
+ * reload1.c (eliminate_frame_pointer): Scan equivalent addresses
+ of pseudo-regs, and eliminate frame-pointer there too.
+ (reload): Don't do this here.
+
+ * c-decl.c (build_enumerator): Return pair of decl and value.
+ (finish_enum): Go through the list replacing decls with names.
+
+ * function.c (fixup_var_refs): Eliminate all but first arg.
+ Use current sequence_stack, insn chain and rtl_expr_chain.
+ (put_var_into_stack): Don't pass those args.
+ If var is nonlocal, don't do it now; put it on fixup_var_refs_queue.
+ (pop_function_context): Do fixup_var_refs on vars queued up.
+
+ * tree.c (function_maybepermanent_obstack): Make a separate
+ saveable obstack for each nested function level.
+ (init_tree): Init this variable.
+ (save_tree_status, restore_tree_status): Save and restore it.
+ Create and free a new obstack for the purpose.
+ (temporary_allocation, resume_temporary_allocation): Use this var.
+ (preserve_data, preserve_initializer): Use this var.
+ (make_node): Use this var for PARM_DECL nodes.
+
+ * tree.c (push_obstacks): New name for push_obstack.
+ Additional arg specifies saveable_obstack. All calls changed.
+ (pop_obstacks): New name for pop_obstack. All calls changed.
+
+ * config.gcc: Add `3300'.
+ (genix): Fix typo in name of makevar file.
+ * tm-mot3300.h, xm-mot3300.h: New files.
+ * math-3300.h: New file.
+
+ * output.h: Fix typo in SDB_DEBUGGING_INFO.
+
+ * tm-sun386i.h (LINK_SPEC): Moved here, and -static handled.
+ * xm-sun386i.h: Moved from here.
+ * tm-alliant.h (LINK_SPEC): Moved here, from xm-alliant.h.
+
+ * tm-convex.h, tm-i860.h, tm-spur.h, tm-vax.h, tm-tahoe.h, tm-pyr.h:
+ Delete FIX_FRAME_POINTER_ADDRESS.
+
+ * tm-sparc.h, tm-m88k.h: Turn off FIX_FRAME_POINTER_ADDRESS.
+ INITIAL_FRAME_POINTER_OFFSET could be written later.
+
+ * tm-m68k.h, tm-ns32k.h, tm-alliant.h, tm-i386.h, tm-mips.h:
+ Define INITIAL_FRAME_POINTER_OFFSET.
+
+ * toplev.c (compile_file): Remove .m and .cc suffixes, like .c.
+
+ * final.c (end_final): For basic block profiling, don't output
+ source file name. Instead, append ".d", and remove ".c".
+ * gnulib2.c (__bb_init_func): New name for __bb_init_function.
+ Conditionalize on mc68000, not m68k.
+ Fix other typos.
+
+Wed Mar 28 16:07:15 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c, cplus-decl.c (duplicate_decls): Preserve DECL_FRAME_SIZE
+ from definition past subsequent declarations.
+
+ * c-decl.c (xref_tag): If global_binding_level, make nodes permanent.
+
+ * expmed.c (init_expmed): Set up mult_is_very_cheap.
+ (expand_mult): Never use shifts if mult_is_very_cheap.
+
+ * expr.c (store_expr): When copying through new temporary,
+ allocate temporary first and use as target.
+
+ * tm-m68k.h (HARD_REGNO_MODE_OK): Abort on VOIDmode.
+
+ * reload1.c (fix_frame_pointer_address): New function.
+ (alter_frame_pointer_addresses): New arg INSN. Calls changed.
+ Use that function instead of macro FIX_FRAME_POINTER_ADDRESS
+ which is now obsolete.
+ (eliminate_frame_pointer): Use macro INITIAL_FRAME_POINTER_OFFSET
+ to initialize depth. Abort if that macro is missing.
+
+ * expmed.c (store_bit_field): If loading MEM into a reg, use the
+ mode of the MEM if that is not BLKmode.
+ (extract_bit_field): Likewise.
+
+ * tm-mips.h (STRUCTURE_SIZE_BOUNDARY): Changed from 16 to 8.
+
+ * calls.c (expand_call): Handle STACK_BOUNDARY when using push insns.
+
+ * function.c (assign_parms): Note how PUSH_ROUNDING affects stack
+ parm size.
+
+Tue Mar 27 19:40:11 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (poplevel): Output inline nested functions if needed.
+ * cplus-decl.c: Likewise.
+
+ * i386.md (insv): New pattern added for the moment.
+
+Tue Mar 27 17:47:35 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * function.c (lookup_outer_static_chain): Deleted, no longer used.
+ (trampoline_address): RTL for trampoline, rather than its address, is
+ stored in trampoline list.
+ Just add entry to list; don't fill in the trampoline here.
+ (expand_function_end): Fill in any required trampolines here.
+ (expand_function_start): Move tail recursion entry to after
+ creation of display list; size computations come next.
+
+Tue Mar 27 14:09:31 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * m68k.md (movsi, movhi, movstricthi, movqi, movstrictqi):
+ Avoid both clr and st on volatile mem, but only on 68000.
+ (SImode store 0 recognizer): Likewise.
+
+ * stor-layout.c (agg_mode): Don't consider PSImode, etc.
+
+Mon Mar 26 21:12:16 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * local-alloc.c (combine_regs): Only set suggested bit for first
+ register if multi-word quantity.
+ (find_free_reg): Look at suggested regs for first in set, then use
+ all available for subsequent regs.
+
+Mon Mar 26 15:01:02 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (start_enum): Don't lay out the type.
+ (finish_enum): Always lay it out, and always set the precision.
+ Change the type of the enumerators if int is too narrow.
+
+ * tm-m68k.h (NOTICE_UPDATE_CC): addq and subq do update cc's
+ even if destination is an address register.
+
+ * c-parse.y, objc-parse.y (check_newline): Call HANDLE_PRAGMA if def.
+ * out-next.c: New file.
+ (handle_pragma): New function.
+ * tm-next.h (HANDLE_PRAGMA): Define it.
+
+ * Makefile.in (GNULIB2): New variable.
+ (gnulib2): Use it.
+ (gnulib2.portable): New name for old rule.
+ (install-headers): Split out part of install rule.
+ (INSTALL_HEADERS): New variable.
+
+ * make-next: New file.
+
+ * function.c (assign_parms): Get type from proper place.
+ internal_arg_pointer is now an arg. Compute arg_pointer_copied
+ from that. Fix typos.
+ (expand_function_start): Compute internal_arg_pointer here.
+ Fix typos handling incoming struct value address.
+
+ * cccp.c (do_include): Ignore null strings found in stackp.
+
+ * cccp.c (discard_comments): Handle backslash-newline.
+
+Mon Mar 26 07:18:58 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * function.h (temp_slot, temp_slot_level): Now saved by function.c.
+ * function.c (struct temp_slot): Move from stmt.c.
+ (push_function_context, pop_function_context): Save/restore temp slots.
+ (assign_parms): Pass type to locate_and_pad_parms.
+ (locate_and_pad_parms): Accept TYPE.
+ Don't need STACK_OFFSET.
+ (expand_function_start): Pass type to locate_and_pad_parms.
+ (init_function_start): Initialize temp_slot info.
+ * stmt.c (temp_slot, init_stmt_for_function, save_stmt_status,
+ restore_stmt_status): Delete temp_slot stuff from here.
+
+Sun Mar 25 20:21:58 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (emit_move_insn): Turn memory address checking back on,
+ but allow push_operand for x.
+
+ * ns32k.md (movstrsi): If UTEK_ASM, output $0 operand in movsd.
+ (movsi): Handle UTEK_ASM like GNX_V3.
+ * out-ns32k.c (print_operand_address): Add UTEK_ASM conditionals.
+ * tm-merlin.h: New file.
+
+ * tm-ns32k.h (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE):
+ Use save and restore insns if no frame pointer.
+
+ * cccp.c (handle_directive): Discard backslash-newline within <...>.
+
+Sat Mar 24 13:23:52 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gcc.c (default_compilers): Add entry for .m files, for Objective C.
+ Always pass some -lang... option to cpp.
+
+ * cccp.c (do_include): Support #import as well as #include.
+ (lookup_import, add_import, import_hash): New functions.
+ (main): Handle options -lang-c++ and -lang-objc and -lang-c.
+ Set variables cplusplus and objc.
+ (enum node_type, directive_table): Add #import.
+ (handle_directive): Treat #import as undefined unless objc is nonzero.
+ (initialize_builtins): If objc, define __OBJC__.
+
+ * Makefile.in (lang-objc, cc1obj): New targets.
+ (objc-parse.o, objc-parse.c, objc-actions.o): New targets.
+ (C_OBJS): Add c-lang.o.
+
+ * objc.gperf: New file.
+ * objc-parse.y, objc-actions.c, objc-actions.h: New files.
+
+ * c-lang.c: New file.
+ * c-decl.c (c_decode_option): New name for lang_decode_option.
+ Used from c-lang.c and objc-actions.c.
+
+ * toplev.c (compile_file): Call lang_init and lang_finish.
+ * c-lang.c, objc-actions.c, cplus-decl.c: Define those functions.
+
+ * c-typeck.c (comptypes): Call maybe_objc_comptypes for record types.
+ * c-lang.c, objc-actions.c (maybe_objc_comptypes): New functions.
+
+ * c-decl.c (implicitly_declare, finish_decl, finish_struct):
+ Call maybe_objc_check_decl before rest_of_decl_compilation.
+ * c-lang.c, objc-actions.c (maybe_objc_check_decl): New functions.
+
+ * function.c (assign_stack_local): Align each slot only as needed.
+ Normally don't round size up, just align first.
+ New argument ALIGN specifies alignment, or 0 for that of MODE.
+ All callers changed.
+ (assign_outer_stack_local): Likewise.
+ * final.c (final_start_function): Round frame size to STACK_BOUNDARY.
+
+ * function.c (assign_stack_temp, preserve_temp_slots):
+ (free_temp_slots): Moved from stmt.c.
+
+ * stmt.c (expand_decl): Use convert_units to avoid overflow.
+
+Fri Mar 23 00:52:34 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (grokdeclarator): Warn if array element is incomplete.
+
+ * varasm.c (assemble_variable): Use convert_units to compute
+ size in bytes.
+ (output_constructor): Likewise, for non-bit fields.
+
+ * c-typeck.c (check_format, my_strchr): New functions.
+ (build_function_call): Call check_format.
+ * c-decl.c (lang_decode_options): Handle -Wformat.
+ * c-tree.h (warn_format): New flag.
+
+ * xm-hp9k320.h (USE_C_ALLOCA): Define if not compiling with GCC.
+
+Thu Mar 22 23:35:33 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (get_parm_info): Void parm is special only if no name.
+
+ * loop.c (may_not_optimize): Static var replaces local `may_not_move'.
+ (strength_reduce): Don't accept those regs as givs.
+
+Thu Mar 22 06:45:16 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * integrate.c (expand_inline_function): Compute delta to frame
+ from the address at which it was allocated.
+
+Wed Mar 21 17:36:40 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * recog.c: Increase number of changes saved for validate_change.
+ (validate_change): If INSN == 0 and in group, add to group; if not,
+ always OK.
+ (apply_change_group): If INSN == 0, change is always OK.
+
+ * cse.c (cse_basic_block): If extending block, don't call
+ cse_end_of_basic_block with null insn if we got to end of function.
+
+Wed Mar 21 14:08:35 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * calls.c (expand_call): Don't reuse pending_stack_adjust for argblock
+ if inhibit_defer_pop.
+
+ * expr.c (push_block): New argument EXTRA. All callers changed.
+ (emit_push_insn): Use that for the padding when using push_block.
+
+ * tm-sparc.h (FUNCTION_ARG, FUNCTION_INCOMING_ARG):
+ Only word-aligned BLKmodes can go in registers.
+ (FUNCTION_ARG_PARTIAL_NREGS): Likewise.
+ * tm-spur.h (FUNCTION_ARG, FUNCTION_INCOMING_ARG): Likewise.
+ * expr.c (expand_call): If encounter a stack parm before offset
+ gets up to zero, make it zero.
+ * function.c (assign_parms): Likewise.
+
+ * ns32k.md (stack adjust insn): Don't use cmpd or cmpqd on Sequent.
+ * tm-sequent.h (SEQUENT_ADJUST_STACK): Define this.
+
+ * make-hp9k320g (AR): Define it.
+ * Makefile.in (gnulib): Use OLDAR.
+ (OLDAR): New variable.
+
+ * make-iris: New file.
+
+ * xm-iris.h: Undef alloca before defining it.
+
+ * Makefile.in (stage1, ...): Always copy gnulib, never link.
+
+ * cccp.c (main): Use -d...M... as option for macro dump.
+ * gcc.c (default_compilers): Pass -d* to cpp.
+
+Tue Mar 20 01:41:49 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-parse.y (datadef): Error message fix.
+ * cplus-parse.y: Likewise.
+
+Mon Mar 19 15:26:27 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * integrate.c (expand_inline_function): Save static chain value.
+ (copy_rtx_and_substitute): Substitute it where called function
+ copies its static chain.
+ * emit-rtl.c (init_emit_once): Make static_chain_incoming_rtx
+ distinct.
+
+ * function.c (current_function_contains_functions): New variable.
+ (init_function_start): Initialize it.
+ (pop_function_context): Set it to 1.
+ * integrate.c (function_cannot_inline_p):
+ Don't inline fn with nested fns.
+
+ * integrate.c (copy_rtx_and_substitute): Don't replace fp
+ as destination of assignment.
+
+ * assert.h (__assert) [not __GNUC__]: Rename arg to avoid stringify.
+
+ * function.c (expand_function_start): If struct_value_incoming_rtx
+ is 0, get the address from first parm reg or first stack slot.
+ (assign_parms): In that case, skip the space it occupies.
+
+ * calls.c (expand_call): If STRUCT_VALUE is 0, pass address as parm
+ even if that means using a register.
+
+Mon Mar 19 07:43:46 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * integrate.c (function_cannot_inline_p): Check for non-ANSI varargs
+ as well as ANSI varargs.
+ Allow inlining of functions with large frames now that we can share
+ them between inlined functions.
+ (expand_inline_function): Save static vars in case we were called
+ recursively.
+ Make sure we don't free temporary stack slot used for argument.
+
+ * tree.def: Add new code types '<', '1', and '2' for comparison,
+ unary arith, and binary arith, resp. Change some 'e' types to those.
+ * expr.c (init_comparisons): Delete fn.
+ (expand_expr): Handle X ? A binop B : A with copy and conditional op.
+ In X ? A : B, if A and B both simply, do with only one jump.
+ Remove existing test for things like x = y | (a == b).
+ (preexpand_calls): Handle new code types for expressions.
+ * optabs.c (init_optabs): No longer call init_comparisons.
+ * fold-const.c (operand_equal_p): No longer static.
+ Ignore NON_LVALUE_EXPR.
+ Only require constants if new operand ONLY_CONST is non-zero.
+ (fold): Treat tree code types '<', '1', and '2' as 'e'.
+ Handle cases where an arithmetic operation is applied to a compound,
+ conditional, or comparison operation by distributing the arithmetic
+ operation inside the compound, conditional, or comparison operation.
+ Update calls to operand_equal_p.
+ Convert A ? B : B to (A, B).
+ * expmed.c (make_tree): No longer static.
+ * tree.h: Define new macro TREE_CODE_CLASS.
+ Define extern make_tree.
+ * print-tree.c (prtypeinfo): New new macro TREE_CODE_CLASS.
+ (dump): Use new macro and treat types '<', '1', and '2' as 'e'.
+ * cplus-lex.c (init_lex): Likewise.
+ * tree.c (make_node, copy_node): Ditto.
+
+Mon Mar 19 00:05:50 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gcc.c (main): Trap SIGPIPE.
+
+Sat Mar 17 13:09:46 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * jump.c (jump_optimize): Also delete no-op insns to store bit fields.
+
+ * sparc.md (patterns for addcc, subcc, andcc, andncc, orcc, orncc):
+ (and xorcc, xorncc): Use arith32_operand as predicate.
+
+Fri Mar 16 15:19:21 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-vms.h (NO_DOLLAR_IN_LABEL): Define this.
+
+ * function.c (assign_parms): Use INIT_CUMULATIVE_INCOMING_ARGS
+ if that is defined.
+
+ * c-decl.c (duplicate_decls): `static' always prevails, for functions.
+ * cplus-decl.c (duplicate_decls): Likewise.
+
+ * sparc.md (patterns for andncc, orncc, xorncc):
+ Delete `%' from constraint.
+ (patterns for addcc, andcc, orcc, xorcc): Use symmetrical predicates.
+ (peephole for returning sum): Likewise.
+
+Thu Mar 15 22:02:02 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expmed.c (expand_mult_add): Handle either x or mult having VOIDmode.
+ Always pass both args to type_for_mode.
+
+ * expmed.c (extract_bit_field, store_bit_field):
+ When changing mode of a reg to SImode, also do big-endian correction.
+ Consistently use BYTES_BIG_ENDIAN to decide how bits are numbered.
+ Fix stray ref to CODE_FOR_extzv in case for extv.
+
+ * c-typeck.c (build_unary_op): Allow function type args to `!',
+ since they convert to pointers.
+ * cplus-typeck.c (build_unary_op): Likewise.
+
+Thu Mar 15 06:30:21 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (convert_to_mode): Don't copy constant to register.
+ Use GET_MODE_CLASS instead of integer_mode_p.
+ (integer_mode_p): Delete obsolete fn (only use above).
+
+ * loop.c (product_cheap_p): Don't crash if no insns need to multiply;
+ that case is cheap.
+
+Thu Mar 15 02:11:34 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * regclass.c (init_reg_sets_1): Set n_non_fixed_regs.
+ * loop.c (scan_loop, strength_reduce): Set threshold from num of regs.
+
+Wed Mar 14 19:31:18 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * integrate.c (function_cannot_inline_p): Allow BLKmode parms.
+ Allow address of aggregate parm.
+ (expand_inline_function): Create and maintain const_equiv_map
+ and const_age_map. Increment const_age at basic blocks.
+ Don't substitute constant values for parm regs;
+ instead, call try_constants for each insn copied.
+ When structure_value_addr in't 0, check aggregate_value_p too.
+ Round size of parm_map up.
+ Don't init inline_fp_rtx unless it is used.
+ Don't use emit_move_insn when copying a SET insn.
+ (copy_rtx_and_substitute): Handle inline_target being used when 0.
+ Don't build a SUBREG of a CONST_INT.
+ For PLUS of constant, do plus_constant whether mem address or not.
+ Set up inline_fp_rtx if we need it.
+ Clear RTX_UNCHANGING_P in all MEMs.
+ (try_constants, subst_constants): New functions.
+ (access_parm_map): No big-endian offset for BLKmode parms.
+ Do change_address if mode doesn't match.
+ (const_equiv): New function.
+ (try_fold_cc0): Use that function.
+ In "small win" case, extract CODE_LABEL out of LABEL_REF for emit_jump.
+ (output_inline_function): Set return_label to 0.
+
+ * recog.c (cancel_changes, num_validated_changes): New functions.
+
+Tue Mar 13 17:30:08 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * recog.c (constrain_operands): Define `V' constraint.
+
+Tue Mar 13 17:10:40 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cplus-lex.c (operator_name_string, init_lex): Cast enums to ints
+ to avoid errors from some C compilers.
+
+ * cplus-init.c (expand_aggr_vbase_init): Make declarations consistent.
+
+Sun Mar 11 18:37:43 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * ns32k.md (movsi): Flush spurious arg to abort.
+
+ * Makefile.in (gnulib.portable, stamp-gnulib2): Ignore error in ranlib.
+
+Sat Mar 10 19:38:36 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * function.h: Add new fields temp_slots and temp_slot_level.
+ * stmt.c (struct temp_slot): New structure.
+ (init_stmt_for_function): Initialize temp slot info.
+ (save_stmt_status, restore_stmt_status): Save and restore temp slots.
+ (expand_asm_operands): Remove redundant assignment to LAST_EXPR_TYPE.
+ Free any temporaries made.
+ (assign_stack_temp, preserve_temp_slots, free_temp_slots): New fns.
+ (expand_expr_stmt): If last expression had a value (i.e., in ({..})
+ grouping), maybe preserve temporaries.
+ (expand_return, tail_recursion_args): Free any temporaries allocated.
+ (expand_start_bindings): Push temporary stack level.
+ (expand_end_bindings): Pop temporary stack level.
+ (expand_decl): Use kept temporary slots for automatic variables.
+ Free temporary slots after computing size.
+ (expand_decl_init, expand_cleanups, expand_end_case): Free any
+ allocated temporaries.
+ * calls.c (expand_call): Use assign_stack_temp instead of
+ get_structure_value_addr.
+ Make a new temporary level while expanding a call and free
+ temporaries as soon as we know they aren't going to be reused.
+ (store_one_arg): Free any temporary slots made for arg being stored.
+ * function.c (get_structure_value_addr): Delete fn.
+ (init_function_start): No longer initialize structure value addr.
+ * integrate.c (expand_inline_function): Use temporary slot for
+ inlined function's frame.
+ Free temporaries needed while evaluating arguments.
+ * expr.c (expand_assignment, do_jumps): Free temps no longer needed.
+ (store_expr): Don't check for structure value addr.
+ (save_noncopied_parts, expand_expr): Call assign_stack_temp
+ instead of assign_stack_local.
+ (preexpand_calls): No longer special-case fns returning structures.
+ * c-typeck.c (c_expand_asm_operands): Free any temporaries made.
+ * cplus-typeck.c (c_expand_asm_operands): Ditto.
+ * cplus-decl2.c (finish_file): Ditto.
+ * cplus-init.c (expand_aggr_init_1): Ditto.
+ * cplus-type2.c (make_merged_ref): Preserve result and free
+ other temporaries.
+ * cplus-parse.y (stmt): Free any temporaries in EXCEPT clause.
+
+Sat Mar 10 16:07:27 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * loop.c (other_reg_use_p): New name for only_reg_use_p.
+ Return 0 if IN == EXPR.
+ (check_eliminate_biv): Re-invert the test using other_reg_use_p.
+
+Fri Mar 9 18:34:11 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * optabs.c (init_optabs): Handle PSImode insns.
+
+Fri Mar 9 18:24:11 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * local-alloc.c (local_alloc): Clear qty_phys_sugg and _has_sugg
+ when doing loop, not just when doing bzero.
+ Add new vars qty_phys_copy_sugg and _has_copy_sugg.
+ (block_alloc): Rework detection of possible tied registers to use
+ extracted insn operands rather than trying to parse operands from
+ RTL description.
+ Don't tie registers if output has earlyclobber.
+ For REG_NO_CONFLICT, check commutativity of expression in REG_EQUAL,
+ rather than of operation of attached insn.
+ If insn is a simple copy, pass that info to combine_regs.
+ (combine_regs): For multi-word items, mark all registers actually
+ used as preferred.
+ If the insn is a simple copy, record hard reg suggestions in
+ qty_phys_copy_sugg instead of qty_phys_sugg.
+ (find_free_reg): Correctly check for all registers used.
+ If qty_phys_has_copy_sugg is non-zero, use that register set. If
+ none of them couldn't be allocated, try the other suggest set if
+ it exists.
+
+Thu Mar 8 02:17:50 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * jump.c (jump_optimize): Detect tablejumps that always go to
+ the same place, and change to unconditional jumps.
+
+ * fold-const.c (fold): Simplify comparison of integer value with self.
+
+ * rtl.h (FUNCTION_FLAGS...): Additional flag bits for saving
+ current_function_returns_pointer, and several others.
+ (FUNCTION_PRETEND_ARGS_SIZE): New component in inline header.
+ * integrate.c (save_for_inline): Record these flags.
+ (output_inline_function): Get them out again.
+ Also restore current_function_args_size and ..._pretend_...
+
+ * ns32k.md (movsi, movdi): Handle floating point registers.
+
+ * dbxout.c (dbxout_prepare_symbol): New function, output N_SOL stab.
+ (dbxout_symbol, dbxout_parms, dbxout_reg_parms): Call it.
+ * final.c (output_source_file): New function.
+
+ * reload.c (find_reloads_toplev): Do BYTES_BIG_ENDIAN offset
+ only within a word.
+
+ * stdarg.h: Use _VA_LIST_ as macro to indicate already loaded.
+
+ * fixincludes: Supply missing semicolon in netinet/ip.h.
+
+ * tm-alliant.h (FUNCTION_PROLOGUE): Use `linkl' on 68020.
+
+ * regclass.c (init_reg_sets): For subunion, keep largest candidate.
+
+Wed Mar 7 00:37:22 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * emit-rtl.c (in_sequence_p): New function.
+
+ * expr.c (expand_builtin): For BUILT_IN_SAVEREGS, insert after
+ the initial NOTE insn.
+
+ * dbxout.c (dbxout_finish_symbol): New argument is a decl or 0.
+ Output line number in desc field.
+ All callers changed to pass the argument.
+
+ * tree.h (TREE_PUBLIC): Move back to tree_common.
+
+ * dbxout.c (dbxout_init): Output working dir in a N_SO symbol.
+
+ * expr.c (emit_library_call): Handle PUSH_ROUNDING.
+
+ * explow.c (break_out_memory_refs): Use same mode as the MEM has.
+
+ * out-mips.c (output_load_immediate): Let the assembler do the work.
+
+Tue Mar 6 22:20:49 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (macroexpand): Fix bug in scanning strings for stringify.
+
+ * stmt.c (expand_goto_internal): Adjust stack after cleanups.
+ (expand_end_bindings, fixup_cleanups): Likewise.
+
+ * tm-alliant.h (STATIC_CHAIN_REGNUM): Use 10.
+
+Tue Mar 6 15:23:11 1990 Jim Kingdon (kingdon at pogo.ai.mit.edu)
+
+ * config.gcc: Accept srcdir & vint with either '-' or '+'.
+
+ * c-parse.y (hash, is_reserved_word): Use __inline so it can
+ be compiled with `gcc -traditional'.
+
+Tue Mar 6 14:52:12 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * c-parse.y (compstmt): Don't return null tree for empty group. This
+ will cause the compiler to dump core on a ({}) construct.
+ * cplus-parse.y (compstmt): Ditto.
+
+Tue Mar 6 14:33:42 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tree.h (TREE_STATIC): Move back to common.
+
+Tue Mar 6 06:04:30 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * function.h (expr_stmts_for_value): New field.
+ * stmt.c (init_stmt_for_function): Initialize vars for expression
+ statements.
+ (save_stmt_status, restore_stmt_status): Save and restore value of
+ expr_stmts_for_value.
+
+ * cse.c (record_jump_equiv): Ensure previous insn is an INSN before
+ testing it (it might be a NOTE).
+
+Tue Mar 6 00:26:20 1990 Richard Stallman (rms at geech)
+
+ * tm-ns32k.h (NOTICE_UPDATE_CC): Use abort in case
+ that shouldn't happen.
+
+Mon Mar 5 23:11:57 1990 Richard Stallman (rms at geech)
+
+ * Makefile.in (cplus-tab.h): Say expect 12 reduce/reduce conflicts.
+
+ * genoutput.c (output_prologue): Include insn-attr.h.
+
+ * pyr.md (addsi3, mulsi3, umulsi3, andsi3, iorsi3, xorsi3):
+ Make input arg predicates symmetrical.
+ (adddi3, anddi3, iordi3, xordi3): Likewise.
+ (addsi3): Use immediate subtract if suitable.
+
+Sat Mar 3 21:08:25 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (move_block_to_reg, emit_push_insn): Don't treat double 0.0
+ as two words of zero.
+ Handle DImode constants as two integers.
+ Support CONST_INT (currently only called with const0_rtx).
+
+ * expr.c (convert_move): Can only use slt if STORE_FLAG_VALUE == -1.
+
+Sat Mar 3 15:03:00 1990 Richard Stallman (rms at geech)
+
+ * function.c (setjmp_protect_args, setjmp_args_warning): New functions.
+ * toplev.c (rest_of_compilation): Call setjmp_args_warning.
+ * c-decl.c (finish_function): Call setjmp_protect_args.
+
+ * flow.c (regno_clobbered_at_setjmp): Argument registers
+ are in effect set at start of function.
+
+ * tm-sparc.h (ASM_OUTPUT_DOUBLE): Replace missing line.
+
+ * print-tree.c (prtypeinfo): Don't check DECL-only
+ flags for other nodes.
+
+ * toplev.c: Eliminate `#ifdef 0'.
+
+ * dbxout.c (print_int_cst_octal): New function.
+ (dbxout_type): Use that for long long types.
+
+ * Makefile.in (start.encap, rest.encap): Split all.internal.
+
+ * tahoe.md: Adjust formatting.
+
+ * tahoe.md (ashlsi3, lshlsi3): Don't clobber a const_int.
+ Instead, use %s to convert shift count to multiplier.
+ * tm-tahoe.h (PRINT_OPERAND): Handle %s.
+
+ * tm-tahoe.h (CONST_COSTS): Specify cost of MULT.
+
+Fri Mar 2 01:00:11 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cse.c (rtx_cost): By default, multiply and divide are expensive.
+
+ * expmed.c (expand_mult_add): Use type_for_mode.
+ Allow ADD to have a different mode.
+ * c-typeck.c (type_for_mode): New function.
+ (get_floating_type): Function deleted.
+ * cplus-typeck.c: Likewise.
+
+ * jump.c (jump_optimize): Simplify `if (x) goto foo; else goto foo;'.
+
+Thu Mar 1 17:41:22 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * out-mips.c (tree_code_name): Declaration deleted.
+
+ * stmt.c (expand_expr_stmt): No "no side effects" warning for (void)0.
+
+ * assert.h (__assert): Don't call abort; use 0 as value.
+ * gnulib2.c (__eprintf): Call abort here.
+
+ * c-decl.c (pushdecl): Don't warn if shadowing error_mark_node.
+
+ * optabs.c: Use GET_MODE_WIDER_MODE instead of INC_MODE.
+
+ * machmode.def: Set up next-wider-mode for floating modes.
+
+Wed Feb 28 18:58:22 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * stmt.c (expand_goto_internal): Add missing stack adjust.
+ (expand_fixup): Don't do stack adjust if fixup isn't for current pos.
+
+ * stmt.c (expand_start_stmt_expr, expand_end_stmt_expr): No need to
+ save result from start_sequence in RTL_EXPR.
+
+ * stmt.c (expand_end_loop): Correctly see if NOTE_INSN_LOOP_CONT
+ was written.
+
+ * stmt.c (expand_decl): Omit move to OLDADDR if it would be noop.
+
+ * expr.c (expand_expr): Don't use variable TYPE in subblocks that
+ hides TYPE at function level.
+
+ * expr.c (force_operand): Always generate PLUS for constant.
+ Use negate_rtx to negate constant.
+
+ * expr.c (expand_expr): Ensure that type is not wider than
+ HOST_BITS_PER_INT when assuming that constant is entirely in
+ TREE_INT_CST_LOW.
+ Simplify EXPAND_SUM code for PLUS_EXPR and MINUS_EXPR.
+ Call preexpand_calls at binop instead of all places that branch to it.
+
+ * expmed.c (expand_shift): Skip widening try for rotates; avoid
+ passing UNSIGNEDP == -1 to expand_binop.
+
+ * expr.c (expand_builtin): Use a sequence instead of reorder_insns.
+
+ * tree.c (save_expr): Ignore NON_LVALUE_EXPRs.
+ Mark as TREE_VOLATILE so won't be inadvertently deleted.
+ (build): Special-case LENGTH == 1 also.
+
+Wed Feb 28 12:57:16 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (convert_move): Handle conversions to and from PSImode.
+
+ * stor-layout.c (layout_type): For integer types, don't consider
+ PSImode, etc.
+
+ * expmed.c (init_expmed): Typo: test was backwards.
+
+ * Makefile (install): When installing $${eachfile}, use basename.
+
+Tue Feb 27 14:48:46 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tree.h (struct tree_common): Delete certain attributes.
+ external, public, static, nonlocal, regdecl, inline.
+ (struct tree_decl): Insert them here.
+
+ * combine.c (try_combine): Avoid generating nested SUBREGs for
+ operands when handling case where I2 or I1 is a SUBREG assignment.
+ Never combine with an insn that sets a register to itself if it has
+ a REG_EQUAL note.
+ (subst): Correct errors in changing (minus (x) (c)) to (plus (x) (-c)).
+ Recompute CODE before second switch.
+ Case NOT: in second switch failed to set undobuf.storage.
+ (gen_lowpart_for_combine): Don't allow multi-word modes; do allow
+ null conversions.
+
+Tue Feb 27 07:13:17 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): Don't combine when doing so would
+ replace destination that is being modified, as opposed to replaced.
+
+ * function.c (fixup_var_refs_1): Rework to correctly support
+ bit-field insns that don't allow memory operands.
+ Correctly detect insns that simply copy a variable to or from a
+ register.
+ (optimize_bit_field): Use a sequence rather than reorder_insns.
+ * Makefile.in (function.o): Update dependancies.
+
+ * recog.h: Delete obsolete insn_machine_info.
+
+ * function.c (assign_parms): Use move_block_from_regs to place
+ first part of parameter partially in registers into memory.
+
+Mon Feb 26 19:02:56 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * fixincludes: Find only .h files when looking for headers.
+
+ * function.c (expand_function_start): Save arg ptr reg
+ if there are nonlocally-referenced parms.
+
+Fri Feb 23 13:21:27 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-parse.y (readescape): For x, avoid overflow when shifting in if.
+
+Thu Feb 22 19:14:17 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * fixincludes: Delete directories before creating them.
+ When making internal symbolic directory links, chase
+ chain of existing links to the end.
+
+ * dbxout.c (dbxout_type): Always use main variant (until
+ there is code to report the distinctions usefully).
+
+Wed Feb 21 13:20:33 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * math-68881.h (hypot): New function.
+
+ * optabs.c (expand_binop): Swap operands if that makes modes match.
+
+ * expr.c (expand_expr): For ARRAY_EXPR, when converting to
+ multiplication and addition, use type of index for product.
+
+ * gcc.c (LIB_SPEC): Link with -lg if -g specified.
+ * tm-isi68.h, tm-next.h, tm-sparc.h, tm-sun3.h, tm-sun386i.h: Likewise.
+ * tm-mips.h (LIB_SPEC): Override to avoid using -lg.
+
+ * toplev.c (main): Warn for -g if not supported.
+
+ * c-decl.c (grokdeclarator): Do pedantic checks for const functions
+ where function decls and variant function types are made.
+
+Mon Feb 19 20:06:48 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * optabs.c: Restore Feb 13 change.
+
+ * varasm.c (readonly_data_section): New fn.
+ (assemble_variable, get_or_assign_label, output_constant_pool):
+ Use new fn instead of text_section.
+ * final.c (end_final): Write profiling table to read-only section.
+ (get_attr_length, shorten_branches): Address vectores take no space
+ if not in text section.
+ Vectors are in operand 0 for ADDR_VEC but 1 for ADDR_DIFF_VEC.
+ (final_scan_insn): Merge cases for ADDR_VEC and ADDR_DIFF_VEC.
+ Put vector tables in read-only section.
+
+Sun Feb 18 13:58:04 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gnulib2.c (__shtab): New vector.
+ * Makefile.in (LIB2FUNCS): Add that member.
+
+ * *tahoe*: New versions of these files.
+
+ * optabs.c: File was deleted. Copied last backup.
+ Feb 13 change lost.
+
+ * tm-sparc.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): Handle nans.
+ Don't output more digits than the numbers have.
+ * tm-sun3.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): Likewise.
+ (ASM_OUTPUT_DOUBLE_OPERAND): Don't output excess digits.
+
+ * m68k.md (movqi): Don't use clrb or st if dest is volatile.
+
+ * expmed.c (expand_mult): Don't use sum of shifts if mult is cheaper.
+ (init_expmed): Set mult_is_cheap based on rtx_cost.
+ * toplev.c (compile_file): Call init_expmed.
+ * cse.c (rtx_cost): Not static.
+
+ * tm-mips.h (ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_INTERNAL_LABEL):
+ Start name with $.
+
+ * tm-alliant.h, tm-convex.h, tm-hp9k3bsd.h, tm-news.h, tm-seq386.h:
+ * tm-sequent.h, tm-spur.h, tm-sun2.h, tm-tahoe.h, tm-vax.h:
+ (LIB_SPEC): Put in -lc with appropriate alternatives.
+
+ * toplev.c (rest_of_compilation):
+ Clear rtx_equal_function_value_matters just before final.
+
+ * cccp.c (rescan): If don't find paren after macro, back up over space.
+
+Sat Feb 17 20:58:21 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-hp9k320.h (CPP_SPEC): Remove _INCLUDE__STDC__.
+
+Wed Feb 14 09:06:26 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * loop.c (struct movable): Add SET_DEST and SET_EQUAL fields.
+ (single_set): New fn.
+ (scan_loop, force_movables, move_movables, consec_set_invariant_p):
+ Use new fn to look for insns that contain a single set.
+ Use new fields in struct movable.
+ (scan_loop, strength_reduce): Pass number of registers to
+ strength_reduce.
+ (libcall_benefit): New fn.
+ (scan_loop, strength_reduce, consec_sets_giv): Use it.
+ (skip_consec_insns): Correctly count insns to be skipped when
+ NOTEs are present.
+ (combine_movables): In some cases, combine regs that load CONST_INTs
+ even if the modes of the destination differ. This requires starting
+ the inner loop from the start of the movable list.
+ Use find_reg_note to search for notes.
+ Don't choose a use of an equivalence instead of the insn that sets
+ the register directly (hence setting up the equivalence).
+ Set DONE for the matched movable to ensure it isn't duplicated.
+ (replace_call_address): No longer used.
+ (move_movables): When moving a LIBCALL block where the address of
+ the fn is in a register, emit an insn to move the actual address
+ in case the original move was CSE'ed out of the block.
+ Emit AND insn via expand_binop instead of explicit RTL.
+ Search for matching from start of list, not from movable being matched.
+ If mode of combined movables differ, use SUBREG to replace narrower.
+ (replace_regs): Don't replace register if it is the destination.
+ (count_nonfixed_reads): Mem ref is fixed if addres is loop invariant.
+ (can_jump_into_range_p): Speed up common cases.
+ (count_loop_regs_set): Do same thing for parts of PARALLEL as when
+ they occur standalone.
+ (struct induction): Delete fields forces, forces2, and consec.
+ Store dest and src reg rtx instead of register number.
+ Add new fields always, cant_derive, combined_with, maybe_dead, and
+ derive_adjustment.
+ (struct iv_class): Add new fields initial_test, init_set, incremented.
+ (all strength reduction routines): Use single_set and use new
+ struct induction fields; forces is no longer used.
+ (record_biv): New fn.
+ (strength_reduce): Use it.
+ (record_initial, valid_initial_value_p): New fns.
+ (strength_reduce): Scan for bivs in loop order.
+ Refine handling of maybe_never.
+ A reg isn't a biv if it is never incremented.
+ Use note_stores and record_initial to correctly note all changes
+ to a biv's register prior to the start of the loop.
+ We may know biv's initial value if it was tested NE before the loop.
+ Use new valid_initial_value_p.
+ Ensure giv's insn is the last in a LIBCALL block or if consec.
+ Don't set maybe_never on jump back to top of loop.
+ Don't delete any insns setting givs; flow will eliminate them as
+ dead. Ditto for biv updates when biv can be eliminated.
+ If giv's last use is in a computation of another giv, mark that it
+ might be dead.
+ Make two passes over givs. In first pass, handle non-matched
+ givs. In second pass, handle the matched givs.
+ (only_reg_use_p): Now static.
+ (delete_insn_forces): Fn deleted; no longer used.
+ (update_giv_derive): New fn.
+ (strength_reduce): Call it for every insn and label.
+ (record_giv): If giv never used, ignore it.
+ (basic_induction_var): Always set *MULT_VAL to something.
+ A set of a biv from an invariant MEM is allowed.
+ (simplify_giv_expr, expr_cost): New fns.
+ (general_induction_var): Rewrite to use them. More types of
+ expressions are now recognized as givs.
+ Use results produced by update_giv_derive to ensure that giv derivation
+ works correctly when spanning biv update.
+ (consec_sets_giv): Can allocate temporary induction struct on stack.
+ Skip insns that set irrelevant items between two updates to giv.
+ (gen_iv_mult, emit_iv_init_code): Replace with emit_iv_add_mult.
+ (update_reg_last_use): New fn.
+ (emit_iv_add_mult): Call it for all operands.
+ (express_from, combine_givs_p, combine_givs): New fns.
+ (strength_reduce): Call them to combine givs.
+ (product_cheap_p): Rewrite to handle more cases.
+ Free any memory allocated.
+ (get_condition): New fn.
+ (strength_reduce, check_dbra_loop): Use it.
+ (check_dbra_loop): Use emit_move_insn instead of writing explicit SET.
+ Use emit_cmp_insn/emit_jump_insn to write out replacement test.
+ (check_eliminate_biv): Use single_set.
+ Refine test for insns that use biv only to calculate giv.
+ Return non-zero if can eliminate biv; don't set eliminable.
+ (can_eliminate_biv_p): Remove some duplicate code and allow
+ all constants in some cases where only CONST_INT was allowed.
+ Don't replace biv with giv that might be dead.
+ (eliminate_biv): Compute whether to put an invariant before insn
+ in which the biv is being eliminated or at the start of loop.
+ Allow more types of constants.
+ Don't replace biv with giv that might be dead.
+ Use validate_change when substituting into insn.
+ (strength_reduce): Change calls to check_eliminate_biv and
+ eliminate_biv. Call the former again after maybe_dead has possibly
+ been set on some givs.
+
+Tue Feb 13 19:58:46 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tree.c (function_obstack): New variable.
+ (init_allocation): Init it to temporary_obstack.
+ (save_tree_status): Save it, make new obstack for it.
+ (restore_tree_status): Free new obstack, restore old.
+ (temporary_allocation, resume_temporary_allocation): Use that one.
+ * function.h (struct function): Slot for saved function_obstack.
+ * tree.c (push_obstack, pop_obstack): New functions.
+ These implement a stack for obstack selection.
+ * function.c (put_var_into_stack): If var is nonlocal,
+ switch to obstacks of the function it is in.
+
+Tue Feb 13 17:52:15 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * optabs.c (emit_no_conflict_block): During reload, don't do
+ any encapsulation or add notes.
+ Allow single insn or no insns in sequence.
+
+Tue Feb 13 12:51:45 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stor-layout.c (build_int): Increase limits of cache size.
+
+ * sdbout.c (sdbout_symbol): Force output of symbol's type.
+
+Tue Feb 13 08:28:37 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * toplev.c (rest_of_compilation): Don't skip compilation of function
+ if TREE_INLINE but no saved insns (e.g., if not -O).
+
+ * rtlanal.c (replace_rtx): New function.
+ * rtl.h: Define it.
+
+Tue Feb 13 00:02:17 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (finish_struct): Lay out any existing array types
+ of newly completed struct.
+ (layout_array_type): New subroutine.
+
+Mon Feb 12 11:33:31 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * function.c (assign_parms): If not -O, keep all parms in memory.
+
+ * expr.c (clear_pending_stack_adjust): Ignore TREE_INLINE if not -O.
+
+ * out-i386.c (output_fix_trunc): New function.
+ (fp_pop_int): Re-enabled. Handle more modes, individually.
+ (print_operand): Handle %D.
+ * i386.md (fix_truncdfdi2, fixuns_truncdfdi2): New patterns.
+ These changes from James Van Artsdalen.
+
+ * gnulib2.c (__builtin_vec_delete): Use __builtin_delete, not free.
+
+ * sdbout.c (sdbout_field_types): Do look through pointer types.
+
+Sat Feb 10 19:31:16 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * sdbout.c (plain_type_1): Don't output tag until known.
+ (sdbout_one_type): Don't record tag in KNOWN_TYPE_TAG until end.
+ Reenable output of member types before original structure.
+
+ * expr.c (expand_expr): Convert post-inc to pre-inc if result ignored.
+
+Sat Feb 10 14:35:03 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * ns32k.md (movsf): Convert double constant to float.
+
+Fri Feb 9 00:02:43 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (duplicate_decls): Don't lose alignment of OLDDECL.
+
+ * cccp.c (handle_directive): Keep comments by copying them explicitly.
+
+ * cccp.c (rescan): When scanning for open-paren after macro name,
+ discard comments if appropriate.
+
+Fri Feb 9 18:26:34 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_insn): Suppress infinite loop when associating
+ operations in cases where a reg, R, is equal to "R OP const1" and
+ we are looking at "R OP const2" for some associative operator OP.
+
+Thu Feb 8 14:19:41 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (build_enumerator): Pedantic warning if value not an int.
+ Access default value after checking for constant specified,
+ as it should no longer be possible to have NON_LVALUE_EXPR
+ in the default.
+
+ * c-typeck.c (default_conversion): Don't truncate wide enums.
+
+ * tm-hp9k320.h (CPP_SPEC): Define _INCLUDE__STDC__ if not traditional.
+ * tm-hp9k310.h (CPP_SPEC): Likewise.
+
+Wed Feb 7 12:59:07 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (emit_insns_before): New fn.
+ (init_emit_once): Add uses of new macros to support static chain
+ passed in memory.
+ * calls.c (prepare_call_address): Rework to set static chain for
+ languages that have EPmode function addresses and for nested
+ functions in C.
+ Emit USE insn for static_chain_rtx into list of USE insns to be
+ placed later.
+ (emit_call_1): USE_INSNS is now a list of insns, not a SEQUENCE.
+ (expand_call): Remove gratuitous forcing of FUNEXP to Pmode (it
+ might have been EPmode).
+ Make USE_INSNS a list, rather than a SEQUENCE.
+ Use prepare_call_address to emit load into static chain.
+ * expr.c (emit_library_call): Update call to prepare_call_address.
+ * function.c (expand_function_start): Use incoming static chain rtx
+ instead of outgoing form (was correct in one place, wrong in one).
+ * stmt.c (expand_goto): Set static_chain rtx after stack pointer
+ in case it uses the stack pointer.
+ Only write one USE for stack_pointer_rtx.
+
+Tue Feb 6 17:26:14 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (jump_optimize): Suppress optimization of `if (...) x = 1;
+ else {...} if (x) ...', when a label is present between the
+ assignment to X and the unconditional jump.
+
+Mon Feb 5 23:22:30 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): If I2 or I1 is a PARALLEL, ignore only
+ CLOBBER parts when combining. Previously used to ignore USE parts
+ also but the latter can indicate that the insn needs some setup that
+ isn't shown in its rtl.
+
+Mon Feb 5 13:32:32 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * vax.md (addhi3, addqi3): Fix typo checking for dec insn.
+
+ * cccp.c (struct file_buf): New field `nominal_fname' is name spec'd
+ in #line command; `fname' is name of actual input file.
+ Many functions now use or set this field as well or instead.
+
+ * c-decl.c (grokdeclarator): Fix missing paren.
+
+Sun Feb 4 12:37:00 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-3b1g.h: New file.
+ * config.gcc (3b1g, 3b1-gas): New alternative.
+
+ * loop.c (move_movables): Skip USE insns when checking for
+ the insn that loads the address of a library function.
+
+ * combine.c (combine_instructions): Compute total_distrib_*.
+
+ * final.c (final): Do basic block profiling at end of function.
+ (final, final_scan_insn): Run CC_STATUS_INIT after block profiling.
+ (final_scan_insn): Detect cond jumps that use PARALLEL.
+
+Sun Feb 4 00:04:22 1990 Richard Kenner (rms at sugar-bombs.ai.mit.edu)
+
+ * function.c (assign_stack_local): Use plus_constant to avoid
+ PLUS when offset is zero.
+ (assign_outer_stack_local): Ditto.
+
+Sun Feb 4 00:04:22 1990 Ron Guilmette (rms at sugar-bombs.ai.mit.edu)
+
+ * explow.c (fix_lexical_addr): Fix typo.
+
+ * tree.c (build_type_variant): Special handling for protoize.
+
+ * protoize.c: New file.
+
+ * toplev.c (flag_gen_aux_info): Define it.
+ (f_options): Recognize the flag.
+ (compile_file): Open and close the aux_info file.
+
+ * flags.h (flag_gen_aux_info): Declare it.
+
+ * c-typeck.c (comptypes): Handle equivalent variant types for protoize.
+
+ * c-decl.c (implicitly_declare): Call gen_aux_info_record.
+ (start_decl, store_parm_decls): Likewise.
+ (pushdecl): For protoize, distinguish different names for same type.
+ (grokdeclarator): For protoize, don't always get main variant.
+ (finish_function): Take the main variant here.
+
+ * c-aux-info.c, SYSCALLS.c: New files.
+
+ * Makefile.in (proto, protoize, unprotoize): New targets.
+ (protoize.o, unprotoize.o, SYSCALLS.c.X, test-protoize): More new.
+ (c-aux-info.o): Also new.
+ (STAGESTUFF): Add protoize, unprotoize.
+ (install): Install protoize, unprotoize and SYSCALLS.c.X.
+
+Sat Feb 3 17:09:58 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-typeck.c (digest_init): Allow conversion of array exp to pointer.
+ Constructors with types are simply expressions, so don't treat as
+ initializers.
+
+ * Makefile.in (uninstall): New target.
+
+ * Makefile.in (include/README): Target deleted.
+ (include): Deleted.
+ (INSTALL): Create include dir here.
+
+ * Makefile.in (all.internal): Enable compiling cc1plus.
+ (lang-cplus): New target.
+ (*.o): Add some missing dependencies.
+ (STAGESTUFF): Add cc1plus.
+
+Fri Feb 2 18:21:22 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * tree.c (decl_function_context): Don't abort when passed ERROR_MARK.
+
+Fri Feb 2 17:04:37 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * integrate.c (copy_for_inline): Use real width of rtunion in bcopy.
+ * emit-rtl.c (copy_rtx_if_shared): Likewise.
+
+ * assert.h (assert) [__STDC__]: Use comma operator to avoid warning.
+
+ * c-decl.c (grokdeclarator): Traditionally change return type float
+ to double.
+
+ * cse.c (predecide_loop_entry): Give up unless simple jump enters loop.
+
+Thu Feb 1 19:32:28 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-parse.y (yylex, skip_white_space): CR is not whitespace.
+
+Thu Feb 1 17:18:33 1990 Richard Kenner (kenner at sugar-bombs.ai.mit.edu)
+
+ * tm-m68k.h (PREFERRED_RELOAD_CLASS): Never return DATA_REGS for
+ ADDR_REGS, even for QImode.
+
+ * cse.c (cse_insn): If source equivalent is not in table, but
+ source is, put equivalent in same class as source. But do not
+ do this if the destination has a STRICT_LOW_PART.
+ (cse_main): Call init_recog instead of init_recog_no_volatile.
+
+Thu Feb 1 17:18:33 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Makefile.in (cplus-tab.c, cplus-tab.h): Renamed from cplus-parse.*.
+ (TAGS, realclean): Renamed these files.
+ (cplus-decl2.o, cplus-type2.o, cplus-search.o): New targets.
+ (cplus-except.o, cplus-expr.o): New targets.
+ (new-method.o): Target deleted.
+ (CPLUS_OBJS): Add and delete object files.
+ (CPLUS_TREE_H): Change header names.
+ (INTERNAL_CFLAGS): Set the MERGED flag.
+
+ * calls.c (expand_call): Flush junk in assign of CONTEXT.
+
+ * expr.c (expand_expr): LOOP_STMT is just an infinite loop.
+ Handle EXIT_STMT.
+ * tree.def (EXIT_STMT): Change meaning: exit if expression is true.
+ * stmt.c (warn_if_unused_value): Do nothing for EXIT_STMT.
+
+Thu Feb 1 14:10:57 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * optabs.c (emit_no_conflict_block): Accept optional expression
+ to be placed in REG_EQUAL note on last insn emitted.
+ Just emit insns if TARGET is not a register.
+ (expand_binop, expand_unop): Change calls.
+
+Thu Feb 1 01:03:17 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tree.def (NON_LVALUE_EXPR): New tree code.
+ * fold-const.c (non_lvalue): No longer static.
+ Make NON_LVALUE_EXPR. Do nothing if arg certainly not lvalue.
+ * c-typeck.c (build_c_cast): Call non_lvalue.
+ (default_conversion, build_function_call, actualparameterlist):
+ (build_binary_op_nodefault, truthvalue_conversion, build_modify_expr):
+ (convert_for_assignment, digest_init): Strip NON_LVALUE_EXPR from args.
+ (build_unary_op, build_modify_expr): No longer need to check for
+ NOP_EXPR that indicates not an lvalue.
+ (build_compound_expr, build_c_cast): Don't strip NON_LVALUE_EXPR
+ * expr.c (expand_expr, do_jump): Handle NON_LVALUE_EXPR.
+ * c-decl.c (build_enumerator, grokdeclarator): Strip them.
+ * c-parse.y (case label): Strip them.
+
+ * limits.h (INT_MIN): Define so it has type `int', not unsigned.
+ (CHAR_MIN, SCHAR_MIN, SHRT_MIN): Put arens around value.
+
+ * reload1.c (inc_for_reload): Forget reg_last_reload_reg
+ for the reg being inc'd.
+
+Wed Jan 31 17:37:53 1990 Michael Tiemann (rms at sugar-bombs.ai.mit.edu)
+
+ * cplus-*: New files.
+
+ * tree.def (TARGET_EXPR): New name for NEW_EXPR.
+ * tree.c (simple_cst_equal): Change NEW_EXPR to TARGET_EXPR.
+
+ * stmt.c (estimate_case_costs): Check all nodes against ASCII range.
+
+ * stmt.c (warn_if_unused_value): Delete obsolete node types.
+
+ * recog.c (validate_change): Fix one-off bug testing recog_memoized.
+
+ * local-alloc.c (local_alloc): Initialize qty_phys_reg.
+
+ * fold-const.c (non_lvalue): Propagate TREE_LITERAL, TREE_VOLATILE.
+
+ * expr.c (expand_expr): Delete DELETE_EXPR.
+ Call lang_expand_expr for any unknown tree code.
+ Handle IF_STMT, LOOP_STMT, LET_STMT for real.
+
+ * dbxout.c (dbxout_type): Output args for method type.
+ Treat OFFSET_TYPE as int if not using GDB extensions.
+
+Wed Jan 31 17:32:35 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * stmt.c (node_has_high_bound, node_has_low_bound):
+ Use integer_one_node, not new node.
+
+ * expr.c (do_jump): In comparisons against zero, used unsigned, rather
+ than signed, extensions, as that is more likely to be the faster one.
+
+Wed Jan 31 14:09:40 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * toplev.c (rest_of_compilation): Ignore TREE_INLINE if not -O.
+
+ * out-mips.c (mips_prologue): Handle big stack frames > 2**16.
+
+ * tree.h (struct tree_type): Rename `max' field to `maxval'.
+ (TYPE_MAX_VALUE, TYPE_OFFSET_BASETYPE, TYPE_METHOD_BASETYPE):
+ Use new name.
+
+ * reload1.c (reload): Reject fixed regs when spilling large groups.
+
+ * c-decl.c (start_function):
+ Optionally warn if non-proto defn without previous prototype.
+
+ * Makefile.in: New rule to make .../include subdir.
+ New rule to run fixincludes into it.
+ Rule `install' depends on them.
+
+ * assert.h (assert) [no NDEBUG]: Split into versions with/out __STDC__
+ (_assert) [__STDC__]: Pass expression and file separately to _eprintf.
+ (_assert) [not __STDC__]: Likewise, but implemented differently.
+ * gnulib2.c (__eprintf): Handle 3 args plus format string.
+
+ * tm-i386.h (STACK_BOUNDARY): Define it.
+
+Tue Jan 30 16:24:14 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * Makefile.in (install): Fix typo in name of varargs file.
+
+ * combine.c (try_combine): Don't allow combine to violate machine's
+ alignment restriction.
+
+Sun Jan 28 03:53:28 1990 Michael Tiemann (tiemann at rio)
+
+ * stmt.c (warn_if_unused_value): Don't warn for LOOP_STMT, IF_STMT,
+ or LET_STMT.
+
+ * toplev.c (compile_file): Code to mention symbol that was not
+ written to asm file is now #if 0'd out. What good is it telling the
+ debugger about a symbol it cannot see?
+
+ * dbxout.c (dbxout_type): Change METHOD_TYPE print character from
+ '@' to '#'. Also, don't try to output CONST_DECLs. GDB doesn't
+ understand them, and they don't have DECL_OFFSETs.
+
+ * sparc.md (floatsidf2): Changed constraint from "rfm" to "rm" for
+ second operand.
+
+ * toplev.c (lang_expand_expr): New variable is pointer-to-function
+ which expands language-specific tree codes. Its default is
+ `fancy_abort'.
+
+Sat Jan 27 10:18:44 1990 Michael Tiemann (tiemann at rio)
+
+ * gcc.c (main): Initialize COMPILERS before calling
+ `validate_all_switches'.
+
+ * tree.c (decl_{type,function}_context): Handle LET_STMT.
+
+ * stmt.c (expand_decl_cleanup): New function.
+
+ * stmt.c (expand_decl): No longer takes CLEANUP parameter.
+ All callers changed.
+
+ * tree.c (build_{loop,if,goto,compound}, etc): Turn these tree
+ constructors back on.
+
+ * tree.def: Delete DELETE_EXPR, PUSH_EXPR, POP_EXPR.
+
+ * c-typeck.c (max): New macro.
+
+ * c-decl.c (maybe_build_cleanup): New function.
+
+ * tree.c ({value,purpose}_member): New functions. Returns first
+ element of LIST that matches respective components with ELEM.
+
+ * varasm.c (first_global_object_name): Variable defined.
+
+Sat Jan 27 23:31:02 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload): Reject fixed regs when completing group of 2.
+
+Fri Jan 26 17:28:33 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (do_jump): Don't use CONST0_RTX when value to be tested is
+ CONST_INT.
+
+Fri Jan 26 13:39:01 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gcc.c (main): Warn about bad switches at beginning, not at end.
+
+Thu Jan 25 22:03:37 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * loop.c (general_induction_var): Reject widening multiply.
+
+ * cccp.c (grow_outbuf): Always return 0.
+
+Thu Jan 25 07:04:31 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (subst): Correctly reference length in
+ (zero_extract (zero_extend ... )) combinations.
+
+ * c-decl.c: Define warn_traditional.
+ (build_enumerator): Remove NOP_EXPRs from default value also.
+
+ * fold-const.c (fold): Strip NOP_EXPRs when looking for constants.
+
+Thu Jan 25 01:57:34 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Makefile.in (install): Clear execute bit for nonexecutable files.
+
+ * i860.md (andsi3): Truncate xop2 constant to 16 bits.
+
+Wed Jan 24 22:32:47 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * genemit.c (main): Include output.h in insn-emit.c.
+ * genpeep.c (main): Similar.
+ * genrecog.c (main): Ditto.
+ * Makefile.in (insn-emit.h, insn-peep.h, insn-recog.h): Add dependancy.
+
+Wed Jan 24 20:13:08 1990 Richard Stallman (rms at albert.ai.mit.edu)
+
+ * cccp.c (do_define): Report error for duplicate macro args.
+
+Mon Jan 22 07:52:28 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (alter_reg): Rework change of January 7th to allow
+ for no previous insn and clear equivalence information of correct
+ pseudo.
+
+Mon Jan 22 01:22:00 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * fold-const.c (fold): Don't simplify non-lvalue to an lvalue.
+ (non_lvalue): New fn; makes a NOP_EXPR with readonly flag.
+ * c-typeck.c (build_unary_op, build_modify_expr): Reject such.
+
+Sun Jan 21 20:53:49 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-typeck.c (lvalue_p): Don't call language_lvalue_valid.
+ Don't bother with looking for NEW_EXPR or REFERENCE_TYPE.
+ (language_lvalue_valid): Deleted.
+
+Sat Jan 20 19:50:15 1990 Michael Tiemann (mtiemann at apple-gunkies.ai.mit.edu)
+
+ * expr.c (expand_expr): Implemented language-independent expansion
+ for NEW_EXPR.
+
+Thu Jan 18 14:29:10 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (rescan): Set beg_of_line when string ends at newline.
+ (skip_quoted_string): Don't swallow newline that ends a string.
+ (handle_directive): No need to back up here.
+ Pass LIMIT as second arg to skip_quoted_string.
+
+Thu Jan 18 12:50:09 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (gen_lowpart): Verify CONST_DOUBLE is integer mode.
+ (gen_highpart): Add support for CONST_INT and CONST_DOUBLE.
+
+ * recog.c (general_operand): Don't allow nested SUBREGs.
+ (nonmemory_operand, memory_operand, register_operand): Ditto.
+
+ * emit-rtl.c (gen_reg_rtx): Don't allow creation of pseudos
+ during or after reload.
+
+Thu Jan 18 11:41:14 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-typeck.c (actualparameterlist): -Wconversion warns if
+ representation or width is changed.
+
+Thu Jan 18 01:09:47 1990 Michael Tiemann (mtiemann at apple-gunkies.ai.mit.edu)
+
+ * dbxout.c (various places): Don't assume that DECL_NAME of a
+ PARM_DECL is non-zero. It might be empty for anonymous parms.
+
+Thu Jan 18 00:06:58 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * local-alloc.c (local_alloc): qty_phys_sugg is now an array of
+ HARD_REG_SETs. Initialize new variable qty_phys_has_sugg.
+ (block_alloc): Don't test for nonlocal gotos here.
+ Test qty_phys_has_sugg instead of qty_phys_sugg to see if
+ quantity needs early allocation.
+ (qty_compare, qty_compare_1): No longer consider whether a quantity
+ has a hard register suggestion as part of its priority.
+ (combine_regs): We now record multiple hard register suggestions
+ in qty_phys_sugg.
+ (find_free_reg): Test here for nonlocal gotos.
+ Support new meaning of qty_phys_sugg by restricting to those
+ registers if just_try_suggested.
+ Check for no registers available prior to looping over registers.
+
+ * global-alloc.c (prune_preferences): New fn.
+ (global_alloc): No longer keep a single vector of which registers
+ someone prefers; instead keep this record one per allocation number.
+ Record registers not saved over calls as already used for register
+ allocation purposes, so we can feel free to allocate them with no
+ cost.
+ Call new fn to prune preferences and build list of registers
+ preferred by earlier allocnos.
+ find_reg no longer gets preference information as argument.
+ (find_reg): Don't take preferred registers as argument; get the
+ info from global variables.
+ (set_preference): Remove regs_someone_prefers.
+ (dump_conflicts): Print register preferences in dump file.
+
+Wed Jan 17 16:00:59 1990 Michael Tiemann (mtiemann at apple-gunkies.ai.mit.edu)
+
+ * tree.c (decl_function_context): New function, returns the
+ innermost DECL_CONTEXT of FNDECL when that context is a
+ FUNCTION_DECL.
+ * tree.c (decl_type_context): New function, returns the
+ innermost DECL_CONTEXT of FNDECL when that context is a
+ TYPE_DECL.
+ * All callers changed to use `decl_function_context' when handling
+ nested functions.
+ * All C++ callers changed to use `decl_type_context' when handling
+ member functions.
+
+ * expr.c (fixed_type_p): New function says whether the compiler
+ guarantees that it knows the true type of an object.
+ * expr.c (expand_expr): Call that function for INIT_EXPR and
+ MODIFY_EXPR. Also, for MODIFY_EXPR, check both RHS and LHS.
+
+ * tree.h (DECL_ARG_TYPE): Use INITIAL, not ARGUMENTS slot in
+ `tree_decl. Now reserving ARGUMENTS slot for VAR_DECL and
+ PARM_DECL for language-specific features.
+
+ * tree.c (build_decl): Don't set DECL_PRINT_NAME by default.
+
+ * assert.h: Assume that undefined __GNUC__ implies `assert' must
+ rely on printf.
+
+Wed Jan 17 15:31:40 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (rescan): If traditional, end preproc number after expt sign.
+
+Wed Jan 17 15:18:25 1990 Michael Tiemann (mtiemann at apple-gunkies.ai.mit.edu)
+
+ * stmt.c: Extended struct nesting to hold exception handling
+ contours. New functions:
+
+ expand_start_try, expand_end_try, in_try_block
+ expand_start_except, expand_end_except, in_except_block
+ expand_start_catch, expand_end_catch, expand_catch_default
+ expand_raise, expand_escape_except, in_exception_handler
+
+Wed Jan 17 13:48:01 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (main): Typo, had `includes' for `include'.
+ Always increment p.
+
+ * reload1.c (alter_reg): Delete spurious `break'.
+
+ * local-alloc.c (block_alloc): Delete ref to undef var first_time.
+
+Wed Jan 17 13:35:47 1990 Michael Tiemann (tiemann at apple-gunkies.ai.mit.edu)
+
+ * toplev.c: Unmerge all changes of Bryan Boreham--no papers (yet).
+
+Wed Jan 17 12:33:52 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stor-layout.c (layout_type): Struct requires BLKmode if any field
+ crosses a word boundary.
+
+Wed Jan 17 12:04:18 1990 Michael Tiemann (tiemann at apple-gunkies.ai.mit.edu)
+
+ * stor-layout.c (layout_type): Unterminate comment terminated.
+
+ * tree.c (lvalue_p,lvalue_or_else): Remove these functions from this
+ file.
+ * c-typeck.c (lvalue_p,lvalue_or_else): Put them in this file.
+
+Wed Jan 17 00:46:24 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (pushdecl): Delete garbage accidentally added before.
+
+ * tree.c (set_identifier_size): SIZE is size in bytes.
+ * tree.c (get_identifier): If `set_identifier_size' has not been
+ called, abort.
+ * c-decl.c (init_decl_processing): Don't call `set_identifier_size'
+ from here.
+ * c-parse.y (init_lex): Call `set_identifier_size' from here.
+
+ * varasm.c (force_const_mem): Save DESC's label on the
+ saveable_obstack. (Note, saveable is misspelled.)
+
+ * listing: New file.
+
+Tue Jan 16 20:43:55 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-typeck.c (convert_sequence): Put in #if 0.
+
+Tue Jan 16 17:25:43 1990 Michael Tiemann (tiemann at apple-gunkies.ai.mit.edu)
+
+ * toplev.c: Merged Bryan Boreham's undumping code.
+
+ * print-tree.c (dump): Handle TREE_VEC.
+
+ * varasm.c (output_constant_pool): When done, set FIRST_POOL,
+ LAST_POOL to zero.
+
+ * varasm.c (first_global_object_name): New variable. Records the
+ name of the first global declaration (variable or function) whichi
+ is written to the assembly file.
+
+ * tree.h (tree_code_name): Add declaration.
+
+Tue Jan 16 17:06:29 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * local-alloc.c (block_alloc): Make an initial pass to try to
+ allocate registers that have suggested hard registers.
+ (find_free_reg): Add new argument to only try suggested hard register.
+
+Tue Jan 16 15:54:06 1990 Michael Tiemann (tiemann at apple-gunkies.ai.mit.edu)
+
+ * tree.h (tree_vec): Added.
+
+ * tree.def (IDENTIFIER_NODE): Default length is 2.
+ * tree.def (TREE_VEC): Define it.
+ * tree.def ({NEW_,DELETE_,REFERENCE_}EXPR): fixed comments.
+
+ * tree.c (preserve_initializer): New function. Like
+ `preserve_data', but saves nodes on momentary_obstack as well.
+ * tree.c (make_tree_vec): New function. Allocates a TREE_VEC node.
+ * tree.c (copy_node): Support added for TREE_VEC.
+ * tree.c (build_parse_node): New function. Builds tree node on
+ TEMP_DECL_OBSTACK.
+
+Tue Jan 16 15:23:16 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.h: Eliminate definitions of andcb_optab and expand_bit_and.
+ * expmed.c (expand_bit_and): Eliminate function.
+ (store_fixed_bit_field, extract_fixed_bit_field, expand_divmod):
+ Replace expand_bit_and with call to expand_binop.
+ * expr.c (expand_expr): Handle TRUTH_AND_EXPR and BIT_AND_EXPR
+ as normal binary operations.
+ (do_store_flag): Replace expand_bit_and with expand_binop.
+ * optabs.c (expand_binop, init_optabs): Eliminate andcb_optab.
+
+ * expmed.c (expand_shift): Don't use extzv for rotate.
+ If all three tries at a shift operation failed, delete the
+ insns made during the last try.
+ Handle failure of extzv operation.
+ Call protect_from_queue before convert_to_mode for op1.
+
+Tue Jan 16 10:38:28 1990 Michael Tiemann (tiemann at apple-gunkies.ai.mit.edu)
+
+ * tree.c: Added temp_decl_obstack for building declarators without
+ needing to use permanent_obstack at top level.
+ * tree.c (init_tree): Init temp_decl_obstack.
+ * tree.c (permanent_allocation): Free nodes allocated on
+ temp_decl_obstack.
+ * tree.c (build_decl_list,decl_tree_cons): New functions. Like
+ `build_tree_list' and `tree_cons', but for building on
+ temp_decl_obstack.
+ * tree.c (build1): New function. Builds tree node for unary tree
+ node kinds; doesn't use varargs.
+ * tree.c (simple_cst_equal): Interface changed to return 1 if
+ arguments are equal, 0 if not, and -1 if arguments were not
+ understood by the function.
+ * tree.c (build_{method,offset}_type): TYPE_*_BASETYPE is the
+ TYPE_MAIN_VARIANT of BASETYPE.
+
+Mon Jan 15 01:50:51 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cexp.y (exp): Accept unary +.
+
+ * Makefile.in (hard-params): Compile with GCC.
+ (hard-params.o): Likewise, and depend on the GCC executables.
+
+ * tm-sparc.h (CONST_COSTS): Give 1, not 0, for immed consts.
+
+Sun Jan 14 14:38:10 1990 Michael Tiemann (tiemann at apple-gunkies.ai.mit.edu)
+
+ * stmt.c (estimate_case_costs): New function. Case code no longer
+ assumes that all case values are equally likely for all types. In
+ particular, when the type of argument for the switch statement does
+ not look like it is not ASCII text, we assume that it might be, and
+ assign a weight to its value based on frequency distribution of
+ characters in ASCII text.
+ * stmt.c (balanace_case_nodes): If case values look like ASCII text,
+ then use the cost table. Otherwise, do not. Using the cost table
+ means that the otherwise almost-balanced binary tree may be skewed
+ in hopes of picking up common values more quickly than just
+ log(n). This is done at the direct expense of the less common
+ values, which will be reached at more than log(n).
+ * stmt.c (emit_case_nodes): If using COST_TABLE and the most likely
+ case value is on one side of the tree or another, hand-pick boundary
+ tests so that condition codes can be reused (if possible).
+ * stmt.c (expand_end_cast): If optimizing, and the type of
+ ORIG_INDEX is not an enumeral type, then call `estimate_case_costs.'
+
+Sun Jan 14 12:18:49 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * fold-const.c (lshift_double, rshift_double, lrotate_double):
+ (rrotate_double): Don't shift more than width of operand.
+
+Fri Jan 12 12:17:06 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * recog.c (next_insns_test_no_inequality): Return 1 at end of rtl.
+
+ * expr.c (store_expr): No special handling for constructor
+ unless value is going in struct value block.
+
+ * stor-layout.c (layout_type): Use common nodes for sizes of ptrs, fns.
+ (make_signed_type, make_unsigned_type): Create those nodes.
+ (layout_record): Just ignore VAR_DECL if not static.
+
+Thu Jan 11 14:09:47 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (lang_decode_option): Decode -Wtraditional.
+ * c-decl.c (implicitly_declare): Warn if extern decl previously seen.
+ * c-typeck.c (c_expand_start_case): Warn if switch exp is long.
+
+ * c-typeck.c (actualparameterlist): Optionally warn on truncation.
+ * toplev.c (main): Handle -Wconversion.
+
+ * cccp.c (skip_if_group): Skip strings even if -traditional.
+ (handle_directive): Likewise, when handling copy_command.
+
+Thu Jan 11 14:15:50 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_insn): Only check for REG_EQUAL notes and make
+ REG_EQUAL notes instead of REG_EQUIV notes.
+ * explow.c (force_reg): Make REG_EQUAL note instead of REG_EQUIV
+ note. Check for and reuse old note if present.
+ * local-alloc.c (block_alloc): Convert REG_EQUAL to REG_EQUIV for
+ constant when register is only set once.
+ * loop.c (combine_movables, move_movables): Check for REG_EQUAL notes
+ instead of REG_EQUIV notes.
+ * optabs.c (expand_binop): Correct typo in writing REG_EQUAL note.
+ (emit_no_conflict_block): Suppress REG_NO_CONFLICT notes for
+ non-registers.
+
+Thu Jan 11 14:09:47 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * i860.md (movsf): Ensure F to f is reloaded via r.
+
+ * expr.c (expand_increment): Don't call stabilize.
+
+Wed Jan 10 15:03:08 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (duplicate_decls): If old fn decl follows new ellipsis decl,
+ warn only if pedantic.
+
+ * loop.c (loop_skip_over): Do nothing if don't find expected compare.
+
+Tue Jan 9 21:31:46 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (jump_optimize): Don't delete USE and CLOBBER insns.
+ The later call to find_equiv_reg can malfunction if CLOBBERs are
+ deleted.
+
+Mon Jan 8 17:48:20 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gcc.c (link_command_spec): Always check gnulib both first and last.
+
+Mon Jan 8 17:07:25 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * optabs.c (expand_unop): Perform multi-word logical negation one
+ word at a time.
+ (expand_binop, expand_unop): Insert REG_EQUAL note on last insn of
+ multi-insn sequence.
+ Use TARGET_PIECE instead of TARGET in multi-word logical operations.
+ (emit_no_conflict_block): New fn.
+ (expand_binop, expand_unop): Call it.
+ (gen_add2_insn, gen_sub2_insn): Abort if operands do not match those
+ of the predicates for the appropriate generators.
+
+ * expr.h: Fix typo and define emit_no_conflict_block.
+
+Mon Jan 8 15:33:19 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * rtl.h (REG_UNSET): Fix the code.
+ * rtl.c (reg_note_name): Add REG_UNSET.
+
+ * c-decl.c (struct binding_level): parm_flag now 2 for def, 1 for decl.
+ (declare_parm_level): New parm distinguishes them. All calls changed.
+ (pushdecl): Don't warn about shadowing with parm name in fn decl.
+
+Mon Jan 8 15:15:07 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_basic_block): Allow NOTEs between LOOP_BEG and jump to
+ end test.
+ (predecide_loop_entry): Accept JUMP_INSN rather than LOOP_BEG NOTE.
+
+ * reload1.c (gen_input_reload): When adding constant to register,
+ move the constant into the output, then add the register, rather than
+ the other way around.
+
+Mon Jan 8 12:20:26 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-parse.y (components): Don't allow to be empty.
+ (component_decl): Special cases if empty, to call shadow_tag.
+ Recognize the semicolon here.
+ (component_decl_list): No semicolon here.
+
+ * c-decl.c (shadow_tag): Print warning if nameless structure defined.
+
+Sun Jan 7 19:09:33 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * varasm.c (output_constant): Use size of machine mode
+ to choose how to output the constant.
+
+ * varasm.c (immed_real_const_1): Detect 1 as well as 0.
+
+ * reload1.c (reload): When deleting reg_equiv_init insn,
+ also delete the prev insn if it is no longer needed.
+
+ * real.h (REAL_VALUE_FROM_CONST_DOUBLE, CONST_DOUBLE_FROM_REAL_VALUE):
+ New macros.
+
+ * reload.c (find_reloads_address_1): Preserve original X value
+ in case we replace it with new memory reference.
+
+ * optabs.c (expand_binop): Handle case of no previous insns.
+
+ * jump.c (jump_back_p): Check for floating point if not IEEE.
+
+ * global-alloc.c (dump_global_regs): Break the line occasionally.
+
+ * flow.c (mark_used_regs): Recognize post-decrement properly.
+ It looks like (plus REG -CONST), not (minus REG CONST).
+ Also, patch out old insn as a note in the usual way.
+
+ * calls.c (emit_call_1): Arg to RETURN_POPS_ARGS is FUNTYPE itself.
+
+ * expr.c (STACK_PUSH_CODE): New macro, which config.h can override.
+ (gen_push_operand): Use it.
+ (emit_push_insn): Reverse padding if pushing is post-increment.
+ (expand_expr): For MINUS, sign-extend negated value.
+
+ * emit-rtl.c (init_emit_once): Initialize new variables
+ fconst1_rtx, dconst1_rtx, dconst0, dconst1, dconstm1.
+
+ * cse.c (fold_rtx): For COMPARE and MINUS, test for floating zero arg.
+ Also handle equal floating args if FLOAT_NOT_IEEE.
+ For NEG, eliminate silly temp var.
+ For MULT and DIV, handle more cases with floating point.
+ Change division by floating constant into multiplication.
+
+ * config.gcc: Add i386-mach.
+ * xm-i386.h: Use built-in alloca if compiling with GCC.
+
+ * Makefile.in (c-parse.tab.o): Delete -o switch.
+ (cexp.o): Put in explicit command.
+
+ * combine.c (record_dead_and_set_regs): Ignore stack pushes.
+
+Sat Jan 6 15:33:32 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * out-mips.c (function_arg, function_arg_advance):
+ Define typedef for CUMULATIVE_ARGS, and use it here.
+
+ * c-parse.y (yylex): Put 0 at end of wide string.
+
+ * tm-mips.h (CC1_SPEC): Don't distort meaning of -O.
+
+Fri Jan 5 12:12:31 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * optabs.c, expr.h: All use of umul_optab deleted.
+ * gnulib.c (__umulsi3): Deleted.
+
+ * gcc.c (link_command_spec): If LIBS_COMPILED_WITH_GCC, gnulib is last.
+
+ * Makefile.in (INTERNAL_CFLAGS): New parameter.
+ (ALL_CFLAGS): New variable, replaces CFLAGS when compiling.
+ (HOST_CFLAGS): Define from ALL_CFLAGS.
+
+ * Makefile.in (insn-*.o, cccp.o, others): Use CPPFLAGS.
+
+ * Makefile.in (gnulib): Add null command.
+
+Fri Jan 5 08:11:20 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (subst): When applying De`Morgan's law, compute NOT
+ of constant.
+
+ * integrate.c (save_constants, restore_constants): Clean up fns
+ by passing in a pointer to an rtx so that insns can be modified
+ in place.
+ (save_for_inline): Change call to save_constants.
+ Apply save_constants to REG_NOTES.
+ (expand_inline_function): Use emit_move_insn instead of generating
+ an explicit SET.
+ Apply copy_rtx_and_substitute to REG_NOTES.
+ (output_inline_function): Change call to restore_constants.
+ Apply restore_constants to REG_NOTES.
+
+Thu Jan 4 23:58:59 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Makefile (c-parse.tab.o): Add explicit compilation cmd.
+
+Thu Jan 4 22:48:01 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (insert_regs, insert, use_related_value): Don't assume REG is
+ first in class.
+ (HASH): Handle register with HASHREG macro for speed.
+ (insert): No longer need equivalence_only.
+ Use COST macro.
+ (use_related_value): No longer need to check for valid address.
+ (find_best_addr): New function.
+ (fold_rtx): Remove copyflag argument and replace with insn.
+ Check for common cases before making recursive call.
+ Call validate_change to ensure change is valid, but always return
+ simplified expression.
+ Replace operand with folded operand, or constant operand, whichever
+ is cheaper and is valid.
+ Call find_best_addr for MEMs.
+ (fold_cc0): Add insn operand to pass to calls to fold_rtx.
+ (cse_insn): Rework to enumerate all possible equivalences and replace
+ source with cheapest valid.
+ Simplify associative operations with constants where an operand is
+ equivalent to the same operation with another constant.
+ Use validate_change for all changes.
+
+Thu Jan 4 17:58:28 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stmt.c (expand_end_loop): Put NOTE_INSN_LOOP_CONT at top by default.
+
+ * c-typeck.c (actualparameterlist):
+ Convert parmnum to origin-1 to print.
+
+ * Makefile.in (USER_H): Add float.h.
+
+Wed Jan 3 00:27:53 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gnulib.c (__extendsfdf2): Delete unused var.
+
+ * reload1.c (alter_reg): Undo big-endian conversion from
+ assign_stack_local.
+
+ * calls.c (store_one_arg): Round size up for move_block_to_reg.
+ (expand_call): Round up when emitting USE insns.
+ * function.c (assign_parms): Round size up for move_block_from_reg.
+
+ * Makefile (install): Use nested foreach-loop to expand va*.h.
+
+Tue Jan 2 16:01:47 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * mips.md (call_value): Ignore calls to __builtin_saveregs.
+
+ * tm-mips.h (STARTING_FRAME_OFFSET): Change from -8 to 0.
+ (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE): Use new fns in out-mips.c.
+ * out-mips.c (prologue_looks, mips_prologue, mips_epilogue): New.
+
+ * gnulib2.c: Everything except arithmetic support moved from gnulib.c.
+ * Makefile.in (LIB2FUNCS, LIBFUNCS): Likewise.
+
+Sun Dec 31 20:10:52 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tree.h (struct tree_common): Declare `code' as char, not int.
+
+Thu Dec 28 13:49:43 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Makefile.in (includes): Set variable LIB. Run from `./'.
+
+Wed Dec 27 18:54:25 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c (eliminate_frame_pointer): Special case for reg = reg2+fp.
+
+ * loop.c (can_eliminate_biv_p, eliminate_biv): If add_val non zero,
+ it must be a constant or register.
+
+Wed Dec 27 18:11:23 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * i860.md (load DF constant to reg): Typo: extra percent sign.
+ (floatsidf2): Two words of a double were backwards.
+
+Mon Dec 25 16:32:50 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * emit-rtl.c (emit_note_before): New function.
+ * stmt.c (expand_end_loop): Output NOTE_INSN_LOOP_CONT if none.
+ ** Above change turned off.
+
+Mon Dec 25 00:02:31 1989 Torbj|rn Granlund (tege at zevs.sics.se)
+
+ * tm-pyr.h (CONST_COSTS): Define more optimal costs.
+
+ * tm-pyr.h (FIXUNS_TRUNC_LIKE_FIX_TRUNC): Should not be defined.
+ The cvtdw instruction causes a trap for floating point values
+ that are out-of-range for a signed int.
+
+ * tm-pyr.h (CONST_DOUBLE_OK_FOR_LETTER_P): Don't accept any
+ special constraint chars, since we don't use any.
+
+ * tm-pyr.h (CONSTANT_ALIGNMENT): Correct comment.
+
+ * out-pyr.c (weird_memory_memory): Flush decl of unused variables.
+
+ * out-pyr.c (has_direct_base): Don't accept 0 as a base, if there
+ is a register displacement. This is a workaround of a bug in
+ /bin/as. (/bin/as changes things like "cmpw 8(reg),0(reg)" into
+ "cmpw 8(reg),(reg)", which is invalid assembler.)
+
+Sun Dec 24 12:01:05 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (finish_struct): Ok to define nameless union in parms.
+ * c-typeck.c (compparms): Allow union vs its member's type,
+ but only if same size & union is nameless.
+ (comptypes): In that case, for a parm, prefer the member's type.
+ (actualparameterlist): Nameless union parm casts all its memb types.
+
+ * integrate.c (copy_decl_tree, copy_parm_decls): Set TREE_INLINE.
+ * c-decl.c (pushdecl): No shadow-warning if TREE_INLINE is set.
+
+ * dbxout.c (current_sym_code): Declare as enum; avoid warnings.
+
+Sat Dec 23 10:54:22 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * combine.c (subst): Under NOT, move it inside AND and IOR.
+ Under XOR, move NOT out.
+
+ * toplev.c (set_target_switch): Handle multiple entries for one name.
+
+ * ns32k.md (adjust stack): Distinguish processor subtype at run-time.
+ (extract byte from register): Likewise.
+ * tm-ns32k.h (TARGET_32532, TARGET_32332): New target options.
+ * tm-encore.h, tm-sequent.h (TARGET_DEFAULT): Default them.
+
+Fri Dec 22 20:33:15 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Makefile.in (all): Move above where make-MACHINE is inserted.
+ (all.internal): Definition of `all' indirects through this.
+ (GNULIB): Variable allows rule for gnulib to be redirected.
+ (gnulib.portable): Name for the standard rule for gnulib.
+
+ * tm-mips.h (ASM_OUTPUT_SOURCE_FILENAME): New macro.
+ (REG_CLASS_SUBUNION, REG_CLASS_SUBCLASSES, REG_CLASS_SUPERCLASSES):
+ Obsolete macros deleted.
+
+Thu Dec 21 16:20:00 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * fold-const.c (fold): Bug taking assignments out of conversions:
+ Use language-independent method.
+
+ * reload1.c (alter_reg):
+ Always do big-endian correction on slot address.
+
+ * i386.md (float push recognizers): Don't pop fpreg if not dead.
+
+Wed Dec 20 10:54:54 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * assert.h: Cast value to void.
+
+Tue Dec 19 09:42:13 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gcc.c (link_command_spec): Put %l first.
+
+Tue Dec 19 08:59:43 1989 Richard Kenner (rms at sugar-bombs.ai.mit.edu)
+
+ * genattrtab.c (get_attr_value): Initialize has_asm_insn field when
+ making a new attr_value.
+
+Sun Dec 17 12:06:37 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-typeck.c (digest_init, process_init_constructor, store_init_value):
+ Give error for each invalid element seen in an initializer.
+ New arguments say whether context wants error messages.
+ * c-parse.y (cast_expr): Pass new args.
+ * Unfortunately, this doesn't do the job, since the whole initializer
+ is parsed before any is digested.
+
+ * c-decl.c (duplicate_decls): Source loc of definition is
+ more important than that of declaration.
+
+ * cccp.c (include_defaults): On unos, also search /include.
+
+ * m68k.md (movsi, movhi, store-0 recognizer): Conditional for CRDS.
+ (mulhi3, mulhisi3, umulhi3, umulhisi3): Add % and CRDS conditional.
+ (zero-extend recognizers): Put % before period in clr insns.
+ (divide and modulus recognizers): Likewise for and, ext, swap and div.
+ (dbra recognizers): Likewise for sub and clr insns.
+ (tablejump recognizer): Conditional for CRDS.
+ * tm-crds.h, xm-crds.h: New files.
+
+ * gcc.c (read_specs): Don't include trailing newline in data
+ read from specs file.
+ (skip_whitespace): Empty line is a delimiter in specs data.
+
+ * cccp.c (grow_outbuf): Change value back to int.
+
+ * cse.c (cse_end_of_basic_block): Fix unterminated comment.
+
+ * cccp.c (main): Add `.C' as known suffix for deps output.
+
+ * expr.c (do_jump): Cast vector length to int in case will subtract.
+
+ * tm-att386.h (ASM_OUTPUT_LOCAL): Revert last change: put it data seg.
+
+ * reload.c (decompose): Make a separate case for SUBREG.
+
+ * Makefile.in (HOST_RTLANAL): Define like HOST_RTL.
+ (genattrtab): Use that to get at rtlanal.o.
+ ($(HOST_PREFIX_1)rtlanal.o): New rule for cross-compilation.
+ (STAGESTUFF): Typo in stamp-attrtab.c.
+
+ * tm-hp9k320.h (CPP_PREDEFINES): Add __hp9000s300, _HPUX_SOURCE.
+
+ * stupid.c (reg_order): Make it int, in case reg # is large.
+ (stupid_reg_compare, stupid_life_analysis): Implement this.
+
+ * gnulib2.c (__floatdidf): Define WORD_SIZE.
+
+ * flow.c (find_basic_blocks): Don't clobber stack if no basic
+ blocks.
+
+Sat Dec 16 12:38:07 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * loop.c (can_eliminate_biv_p, eliminate_biv): Check in case
+ neither side of a compare is the biv by itself.
+ (check_eliminate_biv): Test of only_reg_use_p was backwards.
+ (general_induction_var): If V is 0 and G is not,
+ combine additive terms with plus_constant, provided
+ either one of them is an integer.
+ Check both operands of a sum for being givs in their own right.
+ (strength_reduce): When eliminating a biv, don't mung insns that use
+ it via a giv that will be handled later.
+ (loop_skip_over): Duplicate an endtest that takes several insns.
+
+ * loop.c (strength_reduce): When writing insn to init a biv,
+ update life range of reg used to init it.
+
+ * combine.c (try_combine): Do combine (y = x, x = y).
+
+ * loop.c (strength_reduce): When finding initial value of a biv,
+ notice assignments to subregs of it, etc.
+
+ * m68k.md (all shift patterns): Require register_operand for ops 0, 1.
+
+ * reload1.c (alter_reg):
+ Don't set spill_stack_slot_width if from_reg is -1.
+
+ * cse.c (cse_main): Delete local redef of flag_cse_follow_jumps.
+
+ * reload1.c (new_spill_reg): Fatal error if fixed reg is spilled.
+ (order_regs_for_reload): Make sure all the regs are in spill_regs.
+
+ * mips.md (movsf): Fix wrong opcode moving genreg to fpreg.
+
+ * toplev.c: Undef FFS after including param.h.
+
+ * final.c (final_scan_insn): Delete label reinsert_compare.
+
+ * expmed.c (store_bit_field): Move var value1 inside HAVE_insv.
+ (extract_bit_field): Similar for bitsize_rtx, bitpos_rtx.
+
+ * c-typeck.c (pointer_diff): Delete unused var.
+ * expr.c (emit_push_insn): Likewise.
+ * gcc.c (execute): Likewise.
+ * genrecog.c (try_merge_2):
+ * loop.c (skip_consec_insns, scan_loop):
+ * recog.c (asm_noperands, memory_operand):
+ * function.c (expand_function_end):
+ * stmt.c (emit_jump_if_reachable):
+ * toplev.c (error_for_asm):
+ * varasm.c (assemble_string):
+
+ * integrate.c (fp_addr_p): Var deleted.
+
+ * regclass.c (regclass_init): Now returns void.
+ * emit-rtl.c (emit_insns): Likewise.
+ * stmt.c (emit_nop): Likewise.
+ * out-sparc.c (output_eager_then_insn): Likewise.
+
+ * reload1.c (reload_reg_reaches_end_p, reload_reg_free_before_p):
+ (reload_reg_free_p): Abort if switch drops through.
+
+ * cccp.c: Supply a return type for every function (usually void).
+ (grow_outbuf): Now returns void.
+ (line_for_error): Abort if the loop terminates.
+ * gcc.c: Supply a return type for every function (usually void).
+
+ * jump.c (jump_optimize): Leave block-beg, block-end notes
+ in old context when swapping two ranges of insns.
+ (squeeze_block_notes): New function.
+
+ * calls.c (expand_call): Compute valreg from pointer type
+ in case of pcc struct return.
+
+ * gnulib2.c (__builtin_saveregs): Use __ names for machine types.
+
+ * fold-const.c (fold):
+ Move constant out of assignment, within conversion.
+
+Fri Dec 15 00:42:31 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * varasm.c (assemble_variable): Use new macro DATA_ALIGNMENT if def.
+ (get_or_assign_label): Use this instead of CONSTANT_ALIGNMENT.
+
+ * integrate.c (save_constant, restore_constant): Handle naked
+ constant-pool SYMBOL_REF.
+ (copy_for_inline, copy_rtx_and_substitute): Ditto.
+
+ * integrate.c (expand_inline_function):
+ Put caller's line number after inline stuff.
+ Put callee's line number before parm manipulation.
+
+ * tree.c (make_node): Have a DECL_SOURCE_FILE in every decl.
+
+ * m68k.md (fpa float and float-trunc): Accept general_operand.
+
+ * calls.c (expand_call): Do INIT_CUMULATIVE_ARGS just once.
+
+ * calls.c (expand_call): If struct ret addr is passed as parm,
+ count it in structure_value_addr_parm.
+
+ * If local-alloc assumes a reg does not conflict,
+ don't use it as dummy reload.
+ * local-alloc.c (wipe_dead_reg): Add REG_UNSET note.
+ * reload.c (find_dummy_reload): Check for that note.
+
+ * jump.c (jump_optimize): Realize that more things can follow
+ the NOTE_INSN_FUNCTION_END note. Change in two places,
+ for optimized and one for unoptimized.
+
+Thu Dec 14 23:40:23 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Makefile.in (install, libsubdir): Change $(machine) to $(target).
+
+Tue Dec 5 07:35:57 1989 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rtl.h: Declare emit_jump_insn_before and emit_jump_insn_after.
+
+ * reload.c (reg_class_subset_p): Delete duplicate copy.
+ local-alloc.c (reg_class_subset_p): Move from here.
+ regclass.c (reg_class_subset_p): Move to here.
+
+ * combine.c (try_combine): Fix placement and content of LAST_CALL_CUID
+ test to elminate memory faults.
+
+ * final.c (asm_insn_count): New fn.
+ (get_length_attr, shorten_branches): Rework length
+ computation of insns with INSN_CODE == -1. Call above fn to more
+ accurately obtain length of ASM insn.
+
+ * genattrtab.c (check_attr_value): Allow CONST_INT to specify
+ numeric values for attributes. Also, prevent memory faults
+ on errors when ATTR is null.
+ (make_canonical): Convert CONST_INT to appropriate CONST_STRING.
+ (write_attr_case): Correctly check for ASM insns.
+ (make_numeric_value): Generalize to all positive integers.
+
+ * jump.c (jump_optimize): Set JUMP_LABEL on jump added
+ in "{ ... x = 1;} if (x)" optimization and add to jump_chain.
+
+ * local-alloc.c (no_conflict_p): Tighten up code to prevent
+ memory faults.
+
+ * reload.c (find_reloads): Fix typo in EXTRA_CONSTRAINT call.
+
+Tue Nov 28 11:20:47 1989 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
+
+ * expr.c (save_noncopied_parts): Rename stack_loc as target.
+ Make the stack slot address correct.
+
+Mon Nov 27 15:39:40 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * math-convex.h: New file.
+
+ * c-decl.c (grokdeclarator): Don't test size of error_mark_node
+ as type of a field.
+
+Sun Nov 26 12:36:01 1989 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
+
+ * tm-mips.h (CONST_OK_FOR_LETTER_P): Delete extra paren.
+
+Fri Nov 24 12:36:29 1989 Chris Smith (csmith at mozart)
+
+ * tm-convex.h (OVERRIDE_OPTIONS): remove target=host default.
+ * out-convex.c (override_options): remove.
+
+ * tm-convex.h (*_TYPE_SIZE): define type sizes as the usual values.
+ * convex.md (movstrictsi): new, for field insertion in DImode regs.
+
+ * tm-convex.h (LEGITIMATE_CONSTANT_P): allow all CONST_DOUBLES.
+ (PREFERRED_RELOAD_CLASS): reload nonimmediates from memory (NO_REGS).
+ * convex.md (movdi, movdf): use 'G' to handle nonimmediates.
+ (anddi3, iordi3, xordi3): allow immediates if high word is identity.
+
+ * convex.md (tstdi): Finally figure out how to allocate a temp reg
+ in a way that won't get optimized away; remove hardwired use of s1.
+
+ * convex.md (cmpqi): don't sign extend to SImode because operands
+ might be unsigned. Must compare bytes in registers instead.
+
+ * convex.md (movtf): new.
+
+ * convex.md (ash*, lsh*): rewrite to use shift vs. shiftrt.
+ Better code because no need to sign or zero extend when going left.
+ (shift, mask & test peephole): test next_insn_tests_no_inequality.
+ (similar with lshiftrt): New peephole.
+
+ * tm-convex.h: add g++ defines FASCIST_ASSEMBLER, VTABLE_USES_MASK.
+
+Sun Nov 26 11:39:13 1989 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
+
+ * reload.c (decompose): Handle SUBREGs.
+
+Wed Nov 22 11:26:00 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * pyr.md (mode conversion peepholes): Set CC_NO_OVERFLOW.
+ * out-pyr.c (consecutive_operands): Don't expect wrap from reg15 to 16.
+
+ * make-pyr: Find the alloca which comes with the system.
+
+ * tm-mips.h (CONST_OK_FOR_LETTER_P): Define `K'.
+ (SMALL_INT): Range is 16 bits, not 17.
+ (SMALL_INT_UNSIGNED): New macro.
+ * mips.md (andsi3, iorsi3, xorsi3): Use `K', not `I'.
+
+ * mips.md (negsi2): Accept general_operand as input.
+
+ * stor-layout.c (build_int): Defend against negative arguments.
+
+ * varasm.c (MAX_HASH_TABLE): Change to a prime.
+
+Tue Nov 21 10:58:28 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * mips.md (one_cmpl*): Accept general_operand as input.
+
+Mon Nov 20 11:18:58 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * optabs.c (emit_cmp_insn): New arg, COMPARISON.
+ (emit_float_lib_cmp): New subroutine, handles soft-float comoare
+ of floating point values. Chooses ibrary fn from COMPARISON.
+ * expr.c, expmed.c, stmt.c, optabs.c: All calls changed.
+ * gnulib.c (__eqdf2, __nedf2, __gtdf2, etc.): New functions.
+ (__eqsf2, __nesf2, __gtsf2, etc.): New functions.
+
+ * cse.c (fold_rtx): Simulate negative shift counts.
+
+Sun Nov 19 14:36:18 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * out-pyr.c (notice_update_cc): Set CC_NO_OVERFLOW in many cases.
+
+ * cse.c (fold_rtx, fold_cc0): Handle float trap.
+
+Sat Nov 18 00:17:47 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * varasm.c (output_constant): Handle float trap in fprintf.
+ * toplev.c (float_signal): Don't print message.
+ * fold-const.c (combine): Print it here.
+
+ * sparc.md (extend patterns): Handle CONST_INT as operand.
+ * out-sparc.c (output_block_move, output_mul_by_constant):
+ (output_eager_then_insn): Delete unused vars.
+
+ * varasm.c (decode_rtx_const): Add a cast in SYMBOL_REF case.
+
+ * tm-i386.h (TRAMPOLINE_TEMPLATE, TRAMPOLINE_SIZE)
+ (INITIALIZE_TRAMPOLINE): New macros.
+ * i386.md (indirect_jump): New pattern.
+
+ * out-i386.c (singlemove_string): Fix paren error.
+
+Fri Nov 17 12:19:56 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (expand_increment): For pre-increment, copy the rtx to return.
+
+ * c-parse.y (compstmt): There may be implicit decls, so check
+ and maybe keep the level.
+
+ * tm-mips.h (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE):
+ Use call_used_regs, not a private copy.
+
+Thu Nov 16 00:28:29 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c: Keep track of paradoxical subregs of each pseudo,
+ and make extra stack space for their sake.
+ (reload): Record max size paradoxical subreg for each pseudo.
+ (scan_paradoxical_subreg): New subroutine for that.
+ (reload): Make stack slots big enough for that size.
+
+ * tm-i860.h (ASM_DECLARE_FUNCTION_NAME): Define it,
+ so we can output a no-op before each function.
+
+ * tm-pyr.h (INIT_CUMULATIVE_ARGS): Simplify.
+ Pass function type to aggregate_value_p.
+
+ * fold-const.c (fold):
+ For foo++ > const, don't change if foo++ could overflow.
+
+ * loop.c (eliminate_biv):
+ Fix typo; check both coeffs when comparing givs.
+
+Wed Nov 15 00:12:59 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * sdbout.c (sdbout_end_function, sdbout_end_block, sdbout_begin_block):
+ Don't allow line numbers < 1.
+
+ * integrate.c (copy_for_inline): `break' was missing for case 'u':.
+
+ * sdbout.c (plain_type_1): Output .dim X,Y...; for multi-dim array.
+ (sdbout_array_dim): New recursive subroutine.
+ (PUT_SDB_DIM): Macro eliminated.
+ (PUT_SDB_START_DIM, PUT_SDB_NEXT_DIM, PUT_SDB_LAST_DIM): New macros.
+ * tm-3b1.h: Override PUT_SDB_START_DIM.
+
+ * jump.c (delete_insn): Extra test for PREV != 0.
+
+Tue Nov 14 17:31:08 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-m68k.h (WORDS_BIG_ENDIAN): Define it.
+ * out-m68k.c (output_move_double): Adapt CONST_DOUBLE case to that.
+
+ * varasm.c (decode_rtx_const): For SYMBOL_REF, use addr of string.
+
+ * tm-pyr.h (INIT_CUMULATIVE_ARGS):
+ If -fpcc-struct-return, always do the scalar thing.
+
+ * tm-sun3.h (LINK_SPEC): Specify -L to control choice of -lm.
+
+ * function.c (expand_function_end): Use FUNCTION_OUTGOING_VALUE.
+
+Sat Nov 11 00:18:54 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * calls.c (prepare_call_address): If NO_RECURSIVE_FUNCTION_CSE,
+ don't do function cse on calls to same function.
+ (emit_call_1): Don't call memory_address for SYMBOL_REF.
+
+ * tm-att386.h (ASM_OUTPUT_COMMON): Use ROUNDED, not SIZE.
+ (ASM_OUTPUT_LOCAL): Likewise. Also, generate .lcomm
+ rather than a .data area symbol.
+ * tm-sun386.h: Likewise.
+
+ * tm-bsd386.h (ASM_OUTPUT_COMMON): Use ROUNDED, not SIZE.
+ (ASM_OUTPUT_LOCAL): Likewise.
+
+ * cexp.y (parse_escape): Delete unused var `count' from case 'x'.
+
+Fri Nov 10 15:04:15 1989 Richard Stallman (rms at rice-chex)
+
+ * caller-save.c (emit_mult_restore, emit_mult_save):
+ Improve arithmetic for address to save at.
+
+Thu Nov 9 00:14:19 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-pyr.h (ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP):
+ Don't use obsolete pushw and popw insns.
+ (ASM_OUTPUT_ALIGN): Ensure arg in range 2 to 5.
+ * pyr.md (tstdi): Pattern deleted.
+ (SImode test recognizer): Output ucmpw if jump is unsigned.
+
+ * out-sparc.c (operands_satisfy_eager_branch_peephole):
+ Check for moves between FP and non-FP regs; they take two insns.
+ * sparc.md (eager branch peepholes): Likewise.
+ (Ordinary delayed branch peepholes): Similar check.
+ * out-sparc.c (single_insn_extra_test): New subroutine.
+
+ * final.c (final_scan_insn):
+ Rearrange to avoid calling BLOCK_PROFILER for a jump table.
+
+ * reload1.c (choose_reload_regs): Split up a hairy if.
+
+Wed Nov 8 00:48:50 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * calls.c (expand_call): Handle UNNAMED_ARGS_IN_REGISTERS.
+
+ * toplev.c (main): Handle -gsdb to make sdb output when that and dbx
+ are both supported.
+
+ * combine.c (subst): In (sign_extend:M (subreg:N (and:M .. <const>) 0))
+ insist that constant be positive in mode N.
+ Also test mode N in similar zero_extend case.
+
+ * c-typeck.c (build_modify_expr): When assigning to COND_EXPR
+ put cast to void around precomputed rhs.
+
+ * calls.c (emit_call_1): Make funexp a valid address.
+
+Tue Nov 7 18:57:17 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (emit_move_insn): If args in memory, make addresses valid.
+
+ * rtl.h: Undefine FFS in case it was defined by the system.
+
+ * c-parse.y (combine_strings): Ignore warn_write_strings
+ if -traditional or -fwritable-strings.
+
+ * Makefile.in (gnulib2): Fix syntax in shell conditionals.
+
+ * stmt.c (expand_return): Handle COND_EXPR specially.
+
+Mon Nov 6 14:43:55 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * optabs.c (expand_float): Check sign of FROM; may be faster than TO.
+
+ * fold-const.c (fold): If REAL_INFINITY, allow division by zero.
+ * tm-sun3.h (REAL_INFINITY): Define it.
+
+ * tm-i860.h, tm-m88k.h, tm-pyr.h, tm-spur.h (INIT_CUMULATIVE_ARGS):
+ Test aggregate_value_p, not just BLKmode.
+
+ * gnulib2.c (__builtin_saveregs): Moved from gnulib.c.
+ Code added for mips.
+
+ * pyr.md (conditional branch recognizers): Don't simplify if not -O.
+
+ * out-pyr.c (extend_and_branch): Handle two constant operands.
+
+ * integrate.c (function_cannot_inline_p): Don't inline if alloca used.
+
+Sun Nov 5 02:59:23 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Always make a LET_STMT and notes for the top level of a function
+ if it has any subblocks.
+ * c-decl.c (struct binding_level): New field keep_if_subblocks.
+ (poplevel): Obey the new field.
+ (keep_next_if_subblocks): New variable.
+ (pushlevel): Use that variable.
+ (store_parm_decls): Set that variable.
+ (compstmt): Pass nonzero to expand_end_bindings
+ for the new kept binding levels.
+ (kept_level_p): New function.
+
+ * xm-mips.h: Define USE_C_ALLOCA if compiling with CC.
+
+ * tm-alliant.h (CHECK_FLOAT_VALUE): Define this.
+
+ * calls.c (expand_call): Make valreg 0 if passing structure address.
+
+Sat Nov 4 23:27:02 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * caller-save.c (emit_mult_save, emit_mult_restore):
+ Test regs for suitability as address before using as temps.
+
+ * cccp.c (make_definition, do_define): Better error checks for name.
+
+Fri Nov 3 01:05:04 1989 Torbj|rn Granlund (tege at echnaton)
+
+ * pyr.md (tstdi): New pattern. Use 64-bit shift with count zero.
+
+ * tm-pyr.h: -mretd pops args with the retd insn.
+
+ * pyr.md (peep-holes for loop optimizations): Use the R output
+ format in PRINT_OPERAND, don't use output_branch.
+ * out-pyr.c: No need for functions output_branch, output_inv_branch.
+
+ * tm-pyr.h (ASM_OUTPUT_ALIGN): Don't truncate alignment to two.
+
+Wed Nov 1 00:38:27 1989 Torbj|rn Granlund (tege at echnaton.sics.se)
+
+ * out-pyr.c (output_inv_branch): When reversing test operands, ne
+ remains ne, and eq eq eq.
+
+ * pyr.md: Cleanup output code for compare patterns.
+
+ * pyr.md (return): Adjust frame pointer if
+ current_function_pretend_args_size != 0.
+
+ * pyr.md (extendsidi2): Use general_operand for the input operand.
+
+ * pyr.md, out-pyr.c: Output shift insns with output_shift.
+
+ * tm-pyr.h, out-pyr.c: Make NOTICE_UPDATE_CC understand how
+ condition codes are really set. Define flag CC_VALID_FOR_UNSIGNED
+ with to make it possible not to reset cc after each compare or
+ test.
+ * pyr.md: Don't use CC_STATUS_INIT for most patterns.
+
+ * out-pyr.c (already_sign_extended): Cleanup, correct, optimize.
+
+ * out-pyr.c: rename radr_diff to constant_diff.
+
+ * out-pyr.c (movdi_possible): Don't combine moves from memory to
+ memory, because of possible address aliasing. Don't combine moves
+ with register destination if the source operands are depending on
+ the destination of the first move, as in
+
+ movw (pr3),pr3
+ movw 4(pr3),pr4.
+
+ * out-pyr.c (consecutive_operands): Handle SUBREG in addition to REG.
+
+ * out-pyr.c (output_move_double): movl of immediate *sign* extends.
+
+Tue Oct 31 22:51:39 1989 Torbj|rn Granlund (tege at echnaton.sics.se)
+
+ * pyr.md (cmpsi): Don't expand this. It's just slower.
+
+ * out-pyr.c (extend_and_branch): Handle only QImode and HImode.
+ Flush code specific for SImode.
+
+ * out-pyr.c (extend_and_branch): To make zero extensions to HImode
+ of constants not crash:
+ * out-pyr.c (ensure_extended): Call extend_const if it's a
+ CONST_INT. Don't call extend_const from extend_and_branch.
+ * pyr.md, out-pyr.md: Use global variable test_mode to determine the
+ mode of tests and compares. Set in define_expands for tests and
+ compares. Used in extend_and_branch.
+ * out-pyr.c: Pass mode between extend_and_branch and ensure_extended.
+
+ * out-pyr.c (extend_and_branch): Accept SUBREG whereever REG is
+ accepted.
+ * out-pyr.c (weird_memory_memory): Accept SUBREG whereever REG is
+ accepted.
+
+Thu Nov 2 16:23:57 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gnulib2.c (lshrdi2, and other shifts): Take second arg as long long.
+
+ * combine.c (subst):
+ Simplify (zero_extract (subreg:SI (lshift:QI (mem:QI ...)) 0) ...)
+
+ * expr.c (do_jump): Don't discard NOP_EXPR from around COMPONENT_REF.
+ Put one on, if that allows extracting the component in natural mode.
+
+ * final.c (get_attr_length): Omit the body if no length attribute.
+
+ * Makefile.in (genattrtab): Use host-rtlanal.c as dep and to link.
+ (insn-attrtab.o): Use $(INCLUDES).
+
+ * cse.c: Include stdio.h.
+
+ * c-decl.c (finish_enum): Local `value' was declared and set wrong.
+
+ * Makefile.in (gen*.o): Find source files in $(srcdir).
+ (LIBDEPS, HOST_LIBDEPS): Don't use USE_ALLOCA.
+
+Wed Nov 1 00:05:59 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stmt.c (init_function_start): Init max_parm_reg.
+
+ * varasm.c (compare_constant_1): For ADDR_EXPR, compare symbol name.
+ For PLUS_EXPR, etc., don't record code twice.
+ (record_constant_1): Likewise.
+
+ * expr.c (expand_assignment): Allow for overlap when storing into a
+ structure value area supplied by the caller.
+
+ * cse.c (remove): Handle an elt in the wrong bucket.
+
+ * function.c (fixup_stack_1): Avoid using move insn for address arith.
+
+ * out-sparc.c (output_mul_by_constant): Constant zero is legitimate.
+
+ * caller-save.c (emit_mult_restore, emit_mult_save):
+ Handle stack addresses which are invalid.
+
+ * cse.c (use_related_value): Don't abort if offset is 0.
+
+Tue Oct 31 15:12:54 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * config.gcc (pyramid): Set $machine to pyr.
+
+ * calls.c (expand_call): Don't OK_DEFER_POP in is_const case.
+
+Mon Oct 30 17:00:44 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * final.c (shorten_branches, init_insn_lengths):
+ Define unconditionally; conditionalize the contents, perhaps.
+
+Mon Oct 30 03:23:52 1989 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * final.c (shorten_branches): New function.
+ (init_insn_lengths, get_attr_length): New functions.
+ * function.c (init_function_start): Call init_insn_lengths.
+ * recog.c (constrain_operands): Call alter_subreg if nec.
+ * toplev.c (rest_of_compilation): Call shorten_branches.
+ (compile_file): Init and print shorten_branch_time.
+
+Mon Oct 30 03:23:52 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c (spill_regs): Make it short, not char.
+
+Sun Oct 29 00:53:46 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * final.c (final_scan_insn): Delete no-op moves, even without -O.
+
+ * c-parse.y (yylex): Prevent warning for numbers that underflow.
+
+ * stmt.c (assign_parms): Convert stack addresses to valid addresses.
+ (validize_mem): New subroutine.
+
+ * c-decl.c (finish_enum): If -fshort-enums, round size up to match
+ some ordinary C integer type.
+ Compute precision properly when some values are negative.
+ Make type double precision when necessary.
+
+ * c-decl.c (lang_decode_option): Accept and ignore -fnotraditional.
+
+ * gcc.c (default_compilers): Pass -ftraditional to cpp as -traditional.
+
+ * DOLLARS_IN_IDENTIFIERS now has three values. 1 is now the default.
+ It means enable $ only with -traditional. 2 means enable unless -ansi.
+ * c-decl.c (lang_decode_option): Implement that.
+ * cccp.c (main): Likewise.
+ * tm-vms.h, tm-apollo68.h, tm-convex.h, tm-next.h:
+ Define DOLLARS_IN_IDENTIFIERS as 2.
+ * tm-pyr.h: Define it as 0.
+ * cexp.y (initialize_random_junk): Test DOLLARS_IN_IDENTIFIERS
+ for nonzeroness.
+
+ * stmt.c (check_for_full_enumeration_handling): Accept enum type
+ as argument (since was finding it incorrectly).
+ Delete special case for constant index.
+ (expand_end_case): Pass enum type; check for constant index.
+
+Sun Oct 29 00:53:46 1989 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * varasm.c (force_const_double_mem): Remove redundant code.
+ (record_constant_rtx): Use normal obstack since temporary data.
+ (force_const_mem): Don't output constant immediately. Instead,
+ save it for new fn to write. Also, make hash table mapping
+ internal label to desired constant.
+ (output_constant_pool): New fn to write constant pool.
+ (assemble_function): Call it.
+ (init_const_rtx_hash_table): Initialize new hash table and pool
+ chain and offset.
+ (find_pool_constant): New fn to map internal label SYMBOL_REF to
+ data about constant.
+ (get_pool_constant, get_pool_mode, get_pool_offset): New fns
+ using above fn to return data about constant pool labels.
+ * rtl.h: Define last three new fns.
+
+ * integrate.c (save_constants): New fn to convert constant pool
+ references to recognizable representation of constant that was
+ being used.
+ (save_for_inline): Call it.
+ (copy_for_inline, output_inline_function): Undo this for copy to
+ be compiled.
+ (restore_constants): New fn used in output_inline_function.
+ (copy_rtx_and_substitute): Make new constant pool entries for
+ constants in pool when fn was inlined.
+
+ * cse.c (cse_end_of_basic_block): Optionally make a "basic block"
+ that follows branches. Now takes previous block as argument and
+ computes which branch to follow/fall through next.
+ (cse_main, cse_basic_block): Make compatible with above.
+
+ * toplev.c: Add new flag, -fcse-follow-jumps.
+ (rest_of_compilation): Pass dump file to cse_main.
+
+ * flags.h: Add flag_cse_follow_jumps.
+
+Sat Oct 28 01:24:14 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * optabs.c (emit_cmp_insn): Default MODE before computing CLASS.
+
+Fri Oct 27 16:25:19 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-next.h (__inline): define as macro for old 1.34 Next uses.
+
+Thu Oct 26 01:05:09 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * mips.md (compare/branch peepholes): Combine using match_operator.
+ * out-mips.c (relop, frelop, frelop_reversed): New functions.
+ * tm-mips.h (PRINT_OPERAND): New codes `C' and `N' for comparisons.
+ (ASM_OUTPUT_SOURCE_LINE): Output .loc--MIPS likes that.
+ (EXTENDED_COFF, NO_UNDERSCORES, USE_COLLECT): Define, for collect.c.
+ (COFF): Undefine, for collect.c.
+
+ * getattrtab.c: Rename define_asm_insn to define_asm_attributes.
+ * rtl.def: Likewise.
+
+Wed Oct 25 00:52:12 1989 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rtl.def: Add new RTL codes for insn attributes.
+ Change last operand of DEFINE_INSN and DEFINE_PEEPHOLE.
+
+ * rtlanal.c (rtx_equal_p): Add support for "V", "n", and "s" types.
+
+ * genoutput.c (output_epilogue): No longer output machine_info
+ stuff.
+ (process_template): New function.
+ (gen_insn, gen_peephole): Call process_template.
+ (fatal): Add more args.
+
+ * final.c: Allow called configuration macros to use attribute data.
+
+Wed Oct 25 00:52:12 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * rtlanal.c (rtx_equal_p): Handle operand types n, V, S.
+
+ * optabs.c (floattab): Record unsigned-float insns.
+ (can_float_p): New arg UNSIGNEDP.
+ (expand_float): Use those insns if available.
+
+Tue Oct 24 19:23:11 1989 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * genattr.c, genattrtab.c: New files.
+ * Makefile.in (insn-attr.h, insn-attrtab.c):
+ New files made by those two.
+
+ * Makefile.in (insn-*.[ch]): Name the temp file `tmp-foo.c', etc.,
+ not `tmp-insn-foo.c'.
+
+ * combine.c (subst): Generalize simplification of
+ (zero_extend:M (subreg:N (zero_extract:M ...) 0)) and similar.
+
+Tue Oct 24 19:23:11 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * combine.c (try_combine): Don't move a volatile asm.
+
+Mon Oct 23 01:45:34 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * combine.c (try_combine): Don't install a subreg relating two modes
+ that aren't tieable.
+
+ * gnulib2.c (__fixdfdi): Declare __fixunsdfdi.
+
+ * combine.c: Make uid_cuid an int *.
+ (combine_instructions): Allocate as such.
+ * loop.c: Make uid_luid an int *.
+ (loop_optimize): Allocate as such.
+
+Sun Oct 22 20:35:55 1989 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): Call simplify_set_cc0_and for SIGN_EXTEND.
+ (subst): Start by putting constant last in commutative operations
+ and convert MINUS of a constant to PLUS.
+ Put CONST around any PLUS with 2 constants.
+ Simplify (minus <foo> (and <foo> (const_int -pow2))).
+ Handle (zero_extend (and ...)) when the and is nontrivial.
+ Convert (XOR (NOT x) (NOT y)) to (XOR x y).
+ Simplify (abs (neg <foo>)).
+ Simplify abs of something known positive.
+ Handle (zero_extend (truncate...)) using gen_lowpart.
+ Do it for sign_extend too.
+ Simplify (ZERO_EXTRACT (AND x) ...).
+ Simplify (ZERO_EXTRACT (ZERO_EXTEND z) ...), etc.
+ Extend "Extracting a single bit from result of shift" to SIGN_EXTRACT.
+ (ashiftrt (*shift <X> <c1>) <c1>) can be (sign_extend <X>)
+ (lshiftrt (*shift <X> <c1>) <c1>) can be (zero_extend (subreg <X>))
+ Do (lshift <X> (sign_extend <Y>)) on non-regs using gen_lowpart.
+ Eliminate AND in (lshift (and <X> <C1>) <C2>).
+ Use gen_lowpart in (lshift:m1 (zero_extend:m2 <X>) <C>).
+ Use gen_lowpart in (and x const) => (zero_extend (subreg x 0)).
+ (simplify_set_cc0_and): Ignore outermost SIGN_ or ZERO_EXTEND.
+ Handle constant bit number.
+ Try to get into SImode for bitfield jumps.
+
+ * recog.c (apply_change_group, validate_change): New functions.
+
+Sat Oct 21 00:51:49 1989 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_end_of_basic_block): Optionally make a "basic block"
+ that follows branches. Now takes previous block as argument and
+ computes which branch to follow/fall through next.
+ (cse_main, cse_basic_block): Make compatible with above.
+
+ * cse.c (new_basic_block): Don't assume sizeof (rtx) == sizeof (int).
+
+ * cse.c (make_new_qty, canon_hash): Add sanity checks.
+
+ * cse.c (lookup_as_function): Don't assume VOIDmode == 0.
+
+ * cse.c (exp_equiv_p): For commutative operations, check both orders.
+ Detect unexpected operand-type letters.
+ Mode is significant for all codes.
+
+ * cse.c (fold_rtx): CONST_DOUBLE can also appear in DImode. Verify
+ that floating-point is used before folding it.
+ Verify that the host's INT width is wide enough to do folding.
+
+ * cse.c (cse_insn): Treat each component of PARALLEL exactly the same
+ way as if it were standing alone.
+
+ * combine.c (combine_instructions): If an insn explicitly references
+ CC0, try to combine it with the previous insn. Also, enable
+ combining an insn with two different insns whose results it uses.
+
+ * combine.c (try_combine): Ignore USE or CLOBBER parallel parts in
+ I2 and I1 as they are not functional.
+
+Sat Oct 21 00:51:49 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * out-pyr.c (extend_and_branch): Allow SUBREG like REG.
+ * pyr.md (mem-reg and reg-mem HI, QI patterns):
+ Don't match unless one arg is MEM.
+
+Sat Oct 21 00:28:48 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stor-layout.c (layout_decl): No more need to avoid >1 wd in one reg.
+
+ * tree.c (build_index_type): Copy precision from sizetype.
+
+ * reload.c (find_reloads_toplev): Don't truncate constant if bigger
+ than host word size.
+
+ * gnulib2 (__floatdidf, __fixunsdfdi): Use WORD_SIZE, not BITS_PER...
+ (WORD_SIZE): # of bits in a `long' on the target.
+
+ * genextract.c (gen_peephole): Use sizeof (rtx) copying operands.
+
+ * fold-const.c (force_fit_type): Use POINTER_SIZE for pointers.
+
+ * final.c (end_final, final_scan_insn): In sizes and aligns of
+ profiling vars and tbls, use INT_TYPE_SIZE for size of an int,
+ or give max alignment.
+
+ * expr.c (do_jump): Comparing constant arg vs 0, take # sig bits
+ from mode of data type.
+
+ * gcc.c: Add CC1PLUS_SPEC like CC1_SPEC.
+ (validate_all_switches, do_spec_1, process_command, read_specs):
+ Handle it. Use %2 to use it.
+ (default_compilers): Pass %2 to cc1plus.
+
+ * out-sparc.c (output_fp_move_double): Use ldd only when safe,
+ on same conditions used for std.
+
+ * Makefile.in (USE_ALLOCA): New var is $(ALLOCA) if compiling with
+ cc, null otherwise. Use this to refer to alloca.
+
+ * Makefile.in (gnulib): Test vrbl HPUX_GAS to decide whether to run
+ hpxt instead of ranlib.
+ (stamp-gnulib2): Don't ranlib if HPUX_GAS.
+ * make-hp9kgas: New file, sets HPUX_GAS.
+
+Fri Oct 20 13:33:34 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expmed.c (store_bit_field, extract_bit_field):
+ Use mode whose size is UNITS_PER_WORD for struct in reg.
+ (store_fixed_bit_field, extract_fixed_bit_field):
+ Handle bigger constant masks.
+ (mask_rtx, lshift_value): New subroutines.
+
+ * c-parse.y (combine_strings): Use correct width of `int'.
+
+ * varasm.c (make_decl_rtl): Warn for volatile explicit register vars.
+
+Fri Oct 20 00:27:00 1989 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload_as_needed): Set new variable reload_in_progress
+ and clear it after reload complete.
+
+ * reload1.c (choose_reload_regs):
+ Don't count deleted reloads vs number of spill regs.
+
+ * reload1.c (choose_reload_regs): Arg of HARD_REGNO_MODE_OK
+ was the pseudo; should be the reload reg.
+
+ * reload1.c (gen_input_reload): Don't generate a move with a PLUS
+ as an operand.
+
+ * reload.c (find_reloads): Ignore unconstrained operands
+ when looking for conflict with an earlyclobber.
+
+ * reload.c (subst_indexed_address):
+ Replace and canonicalize more thoroughly.
+ (form_sum): New subroutine.
+
+ * out-i386.c (singlemove_string): Handle ordinary constants as input.
+
+ * tm-decstatn.h (CPP_PREDEFINES): Add bsd4_2, ultrix, MIPSEL,
+ host_mips, R3000, LANGUAGE_C, SYSTYPE_BSD.
+ * tm-mips.h (CPP_PREDEFINES): Add host_mips, R3000, MIPSEB, LANGUAGE_C.
+ (CPP_SPEC): Remove those from here.
+ Define __SYSTYPE_*__ always. Define SYSTYPE_* only if not -ansi.
+ No CPP_SPEC needed for decstation.
+ Correct typos in option tests.
+
+ * c-parse.y (unary_expr): Handle EXTENSION here, not in primary.
+
+Thu Oct 19 18:16:40 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-m68k.h, tm-alliant.h (PRINT_OPERAND):
+ Don't print :l for address if :w was already printed.
+
+ * Allow elided braces with unions.
+ * c-typeck.c (digest_init): Treat unions more like records.
+ (process_init_constructor): Handle union types.
+
+ * c-parse.y (program): Pedantic warning for empty file.
+
+Wed Oct 18 22:28:21 1989 Torbj|rn Granlund (tege at echnaton.sics.se)
+
+ * out-pyr.c (extend_const, extend_and_branch): Make sure all const
+ are CONST_INT.
+
+ * out-pyr.c (movdi_possible): Handle combination of two immediate
+ moves correctly. (Pyramid immediate move to a DImode operand
+ (movl) work by SIGN extension of the 32 bit immediate source.)
+ * Handle CONST tagged addresses.
+
+ * out-pyr.c (already_sign_extended): Skip harmless JUMP_INSN when
+ scanning after extension insn.
+ * Check for right mode of extension.
+ * Delete redundant register number test.
+
+ * pyr.md (anonymous SImode test pattern): Predicate need to accept
+ any operand that can be generated for corresponding compare. Used
+ to reject "foo(p) int *p {int a=0; return *p==a;}".
+
+ * pyr.md (shift patterns): Condition bogus if no insn really output.
+
+ * pyr.md: Flush obsolete comment about conversion.
+
+ * tm-pyr.h (FUNCTION_PROLOGUE): Don't really set up a frame pointer
+ if it's never referenced. Also, don't round up frame size to a
+ multiple of 32, since input args and alloca nevertheless breaks
+ such alignment attempts.
+ * tm-pyr.h (FUNCTION_EPILOGUE): Goodbye. Use (define_insn "return"
+ ..) in md instead.
+ * pyr.md (return): Use "ret" or "retd" depending on the existense
+ of a freme pointer.
+ * tm-pyr.h (EXIT_IGNORE_STACK): Ensure the stack pointer is
+ preserved even when the frame pointer is not really set up.
+
+ * pyr.md: Reinsert move-and-test peep-hole optimization.
+
+ * pyr.md: Flush silly peep-hole optimizations for loops. They were
+ inverted optimizations.
+
+ * tm-pyr.h (NOTICE_UPDATE_CC): Make it identify the most important
+ cases when set conditions codes can be used, without an explicit
+ test.
+
+Wed Oct 18 13:01:24 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gcc.c (default_compilers): Support -E on .h file.
+
+ * tm-mips.h (FUNCTION_PROLOGUE): Get rid of __0__gcc macro.
+ Store that value in frame_stack_difference.
+ (FUNCTION_EPILOGUE): Get rid of __0__gcc macro.
+ (FIX_FRAME_POINTER_ADDRESS): Use frame_stack_difference.
+ * out-mips.c (frame_stack_difference): Define here.
+
+ * gcc.c (default_compilers): Define __GNUG__ for g++.
+
+Tue Oct 17 01:17:07 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-i860.h (HAVE_PRE_INCREMENT): Undefine this.
+
+ * mips.md (movsf): New alternatives for r registers.
+ * tm-mips.h (FUNCTION_PROLOGUE): Handle big stack frames.
+ * out-mips.c (function_arg): Handle mode distinction for floating args.
+
+ * pyr.md (mtstsw pattern): Accept general_operand.
+
+ * Makefile.in (gcc): Force-move when installing new gcc.
+ (realclean): Delete Makefile.
+
+ * i860.md (movsf): New alternatives: allow loading r from F.
+ Prefer f-reg as reload when moving m from F.
+ * tm-i860.h (PRINT_OPERAND): Handle CONST_DOUBLE if SFmode.
+
+Sun Oct 15 14:27:48 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * i860.md (movhi, movqi): Support moves to/from fp regs.
+
+ * stmt.c (expand_goto): USE both stack ptr and static_chain_rtx
+ just before jumping.
+
+ * sparc.md (tablejump peepholes): Fix paren error that no-op'd them.
+
+ * tm-sparc.h (*TRAMPOLINE*): Defined macros, but defns are wrong.
+ * sparc.md (indirect_jump): New pattern; plus peepholes.
+
+ * sparc.md (cse'd multiply): New pattern for mult. by -1.
+
+ * out-i860.c (load_opcode, store_opcode): Handle DImode and fp reg.
+
+ * toplev.c (compile_file): Always test TREE_USED and TREE_ADDRESSABLE
+ in identifier as well as in decl.
+ * c-decl.c (poplevel): Preserve TREE_ADDRESSABLE from local externs.
+ * c-typeck.c (mark_addressable): Don't set bit in identifier here.
+
+Fri Oct 13 00:12:46 1989 Richard Kenner (rms at sugar-bombs.ai.mit.edu)
+
+ * flow.c (life_analysis): No need to think abt CONSIDER on first pass.
+
+ * flow.c (propagate_block): Remove duplicated code to update OLD.
+
+ * flow.c (mark_set_1): Handle nested SUBREG, SIGN_EXTRACT,
+ STRICT_LOW_PART, etc. Also, always set subreg_p when setting
+ a bit field, even if modes are same.
+
+ * expr.c (expand_expr): Check for |= or &= of two bitfields of size 1.
+ Convert to test followed by assignment.
+
+ * rtl.def (INLINE_HEADER): Correct erroneous field types.
+
+ * rtl.h: Add definitions for saving flags in INLINE_HEADER.
+
+ * emit-rtl.c (gen_inline_header): Correct out-of-date arguments.
+ Add support for saving flags.
+
+ * integrate.c (save_for_inline): Save function flags.
+ Update comments.
+ (expand_inline_function, output_inline_function): Let machine-dependant
+ code view (or possibly modify) inlined insn, if desired.
+
+ * function.c (assign_stack_local): Don't set frame_pointer_needed or
+ invalid_stack_slot if assigning zero-sized area.
+
+ * stmt.c (fixup_var_refs_1): If the machine's SIGN_EXTRACT or
+ ZERO_EXTRACT insns can't accept a memory operand, fix them up.
+
+ * expr.c (do_jump): Look inside EQ_EXPR or NE_EXPR if one arg is 0.
+ Be smart about PLUS_EXPR, MINUS_EXPR, ABS_EXPR, REFERENCE_EXPR,
+ NEGATE_EXPR, rotation, CONVERT_EXPR.
+
+ * jump.c (reverse_condition): Make non-static.
+ (swap_condition): New routine.
+
+ * final.c (alter_cond): Use new swap_condition.
+
+ * expr.c (expand_expr): In cases where a jump will be generated, use
+ original_target because the registers won't be able to be merged due
+ to the jump.
+
+ * expr.c (expand_expr): Put constant last for PLUS.
+
+Fri Oct 13 00:12:46 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * recog.c (constrain_operands): Add case for `&'.
+
+ * tm-vax.h (TRAMPOLINE_TEMPLATE): Add a .word 0 at beginning.
+ (TRAMPOLINE_SIZE): Increase by 2.
+ (INITIALIZE_TRAMPOLINE): Copy reg mask from pure code to trampoline.
+ Jump into the pure code after the reg mask.
+
+ * expmed.c (expand_divmod): Use divmod insn for quotient if no div.
+
+ * expmed.c (extract_bit_field): With structure reg fetched from mem,
+ don't put in subreg if mode already correct.
+ (store_bit_field): Typo: had extzv, wanted insv.
+
+ * recog.c (init_recog): Set volatile_ok to 1.
+ (init_recog_no_volatile): Similar, but set volatile_ok to 0.
+ (recog_memoized): Don't set volatile_ok.
+ * reload1.c (reload): Call init_recog.
+ * combine.c (combine_instructions): Call init_recog_no_volatile.
+ * loop.c (loop_optimize): Likewise.
+ * cse.c (cse_main): Likewise.
+ * function.c (expand_function_start): Call init_recog_no_volatile
+ for the sake of predicates called from optabs.c.
+
+ * toplev.c (compile_file): Warn if fun declared static and used
+ but never defined.
+
+Thu Oct 12 01:48:30 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (macarg1): Count newlines even after backslash.
+
+ * c-decl.c (pushdecl): Don't warn for explicit extern
+ followed by static. That case is useful for incomplete arrays.
+
+ * c-decl.c (grokdeclarator): Delete some junk about Pmode vs EPmode.
+
+ * tm-sparc.h (SELECT_RTX_SECTION): Test was backwards.
+
+ * reload.c (reg_class_subset_p): New function.
+
+Wed Oct 11 00:35:25 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * vax.md (indirect_jump): New pattern.
+
+ * c-parse.y (primary): Turn off pedantic after `__extension__'.
+ (hash, is_reserved_word, etc.): Recognize `__extension__'.
+
+ * expr.c (emit_library_call, expand_call): Make a SEQUENCE for
+ any needed USE insns and pass them to emit_call_1.
+ (emit_call_1): Place the passed SEQUENCE immediately before the
+ generated CALL_INSN even if gen_call made more than one insn.
+
+ * tm-seq386.h (DBX_DEBUGGING_INFO): Override this.
+ (HARD_REGNO_MODE_OK): Override this.
+
+ * c-typeck.c (build_conditional_expr): Supply missing layout_decl arg.
+
+ * dbxout.c (dbxout_symbol): Handle nested functions.
+
+Wed Oct 11 00:35:25 1989 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c: Update jump_chain when insns change.
+ (jump_optimize): Leave room in jump_chain for some extra labels.
+ Record length in max_jump_chain. Check this when updating.
+ When optimizing jump-to-return, delete from one chain and add to other.
+ When cross-jumping turns cond jump to simple one, add to new chain.
+ Zero jump_chain at end, so redirect_jump won't change it further.
+ (redirect_jump): Delete from one chain, add to another.
+ (do_cross_jump): Likewise.
+ (delete_from_jump_chain): New subroutine.
+
+ * cse.c: If `if (x != y) goto l;' fails to jump, assume x==y.
+ (reg_invaliate): Add new argument for when value isn't
+ changing, just its class.
+ (invalidate): Update reg_invalidate call.
+ (record_jump_equiv): New function.
+ (cse_insn): Call it.
+
+ * cse.c (cse_insn): Delete previous test based on
+ prev_insn_explicit_cc0 just as based on prev_insn_cc0.
+
+Tue Oct 10 00:14:35 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload.c (push_reload, combine_reloads): Let two reloads share
+ if one's regclass is a subset of the other.
+
+ * Makefile.in: What depends in expr.h, depends on insn-codes.h also.
+
+Mon Oct 9 19:11:38 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (finclude): Close descriptor as soon as text is read.
+ Eliminate `success'; return directly after successful processing.
+ (do_include): Don't close descriptor here.
+
+ * tm-i386.h (REG_CLASS_FROM_LETTER): Don't define `S' letter.
+ It wasn't used; and now it means something else.
+
+ * tm-ns32k.h (REG_CLASS_FROM_LETTER): Don't define `r' here.
+ `r' is standard.
+
+Mon Oct 9 01:09:25 1989 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * flow.c (life_analysis): Ignore USEs and CLOBBERs when finding
+ redundant register copies.
+ * jump.c (jump_optimize): Do the same thing here.
+
+ * jump.c (mark_jump_label): Loop NOTEs aren't relevant after loop
+ optimization.
+
+ * integrate.c (copy_for_inline): Correctly handle RTL type "u".
+ * final.c (output_operand_lossage): Make non-static.
+
+ * recog.c (constrain_operands): Treat N, O, P like I, J, K, L, M.
+ For Q...U, use EXTRA_CONSTRAINTS if defined.
+ * reload.c (find_reloads): Likewise.
+
+ * rtl.c (copy_rtx, read_rtx, print_rtx): Handle operand type `V'.
+
+ * rtlanal.c (note_stores): Use variable Y instead of equivalent
+ slower expression.
+
+ * rtlanal.c (dead_or_set_p): Hard regs don't always have same RTX.
+
+ * rtlanal.c (may_trap_p): Don't use const0_rtx here.
+ So we can use this file in programs that don't have const0.
+
+Mon Oct 9 01:09:25 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Support language-specific tree codes.
+ * tree.c (standard_tree_code_type, standard_tree_code_length):
+ Renamed tables. tree_code_type and tree_code_length are now pointers.
+ * tree.c (init_tree): Copy the tables to allocated memory.
+ * tree.c (tree_code_name): Move here from print-tree.c
+ and define like tree_code_type.
+
+ * rtl.c (print_rtl): Handle 0 as operand.
+
+ * emit-rtl.c (save_emit_status): Don't call init_emit here.
+ * function.c (push_function_context): Do it here.
+
+ * emit-rtl.c (reinstate_emit_status): New function.
+ * function.c (trampoline_address): Use this around
+ INITIALIZE_TRAMPOLINE.
+
+ * function.c (trampoline_address): Use fp->tail_recursion_reentry
+ when trampoline is in outer function.
+
+ * Save and restore stack levels in nonlocal gotos.
+ * function.c: New variable nonlocal_goto_stack_level.
+ (init_function_start, push_function_context, pop_...): Init, push, pop.
+ (delete_handlers): Delete insns to set or use this slot.
+ * stmt.c (declare_nonlocal_label): Create this stack slot.
+ (expand_goto): Restore stack ptr from it.
+ (expand_end_bindings, expand_decl): When setting stack ptr,
+ store new value here.
+ * expr.c (expand_builtin): Likewise, for alloca.
+ * calls.c (expand_call): Likewise.
+
+ * varasm.c (make_function_rtl): Rename nested functions for assembler.
+ * c-decl.c (start_function): Clear TREE_PUBLIC for nested function.
+
+ * tm-i860.h (*TRAMPOLINE*): Define macros.
+
+ * i860.md (movdi): accept F source in 2nd alternative.
+ Accept G source in 3rd.
+ (adddi3, subdi3): Typo in opcode of output.
+
+ * i860.md (indirect_jump): Added pattern.
+
+ * c-decl.c (lookup_label): Shadow label if it's wrongly inherited.
+ Set DECL_CONTEXT here, since nondeclared labels must be local.
+
+Sun Oct 8 01:38:27 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * function.c (expand_function_start): Copy static chain to pseudo
+ reg if chain is used.
+
+ * tm-mips.h (ASM_SPEC): Pass -nocpp to as.
+
+ * c-decl.c (grokdeclarator): Ignore variant differences
+ when preserving typedef types from being altered.
+
+ * Allow inner label scopes for ({...}).
+ * c-decl.c (push_label_level, pop_label_level): New functions.
+ * c-parse.y (stmt exprs): Call them.
+
+ * c-decl.c (lookup_label): Set DECL-SOURCE-LINE to locus of reference.
+ (poplevel): Use locus of reference in err msg for undef label.
+ (define_label): Use DECL_INITIAL as flag that label has been defined.
+
+ * function.c (expand_end_function): Delete nonlocal goto handlers
+ if no nonlocal gotos are actually received.
+ (delete_handlers): New function.
+
+ * flow.c (find_basic_blocks): Treat blocks as reachable
+ if headed by labels with LABEL_PRESERVE_P.
+ (insn_dead_p): Don't delete insns to set the frame pointer or arg ptr.
+
+ * m68k.md (indirect_jump): New pattern.
+
+Sat Oct 7 00:46:18 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (lookup_label): If label is nonlocal and wasn't declared so,
+ report error and return 0.
+ (shadow_label): New function.
+ * c-parse.y (goto stmt): Handle 0 returned by lookup_label.
+ (label_decl, label_decls): Parse forward-declarations of labels.
+ (pushlevel): Allow label declarations at start of compound stmt.
+
+ * rtl.h (LABEL_PRESERVE_P): New flag in CODE_LABEL.
+ * jump.c (jump_optimize): Increment LABEL_NUSES if that flag is set.
+
+ * stmt.c (any_pending_stack_level): New function.
+ (expand_end_bindings): If block has stack level or cleanups,
+ and this function has any nonlocal labels, make a nonlocal goto handler
+ for the block, and put it in effect during the block.
+ Set LABEL_PRESERVE_P on the handler's label.
+ (expand_goto): For a nonlocal label, restore its stack frame
+ and jump to current handler.
+
+ * function.c: New var nonlocal_labels lists labels ok for nonlocal.
+ Initted in init_function_start, pushed and popped with fcn context.
+ * stmt.c (declare_nonlocal_label): Put a LABEL_DECL on this list.
+
+ * output.h: Declare current_function_has_nonlocal_label
+ and sdb_begin_function_line.
+ * final.c: Don't declare them.
+
+ * function.c (current_function_has_nonlocal_label): New var.
+ (init_function_start): Init it.
+ (push_function_context, pop...): Save and restore it.
+ * flags.h: Declare current_function_has_nonlocal_label.
+ * stmt.c (expand_goto): Set it if nonlocal label.
+ * local-alloc.c (combine_regs): Don't tie call-crossing reg
+ to a non-call-crossing reg, if receive nonlocal gotos.
+ (block_alloc): Don't allocate pseudos that cross calls,
+ if receive nonlocal gotos.
+ * global-alloc.c (global_alloc): Don't even make an allocno for
+ a reg that crosses calls, if receive nonlocal gotos.
+
+ * function.c (init_function_start): Init function_call_count.
+ (push_function_context, pop_...): Save and restore it.
+ * calls.c (expand_call): Increment function_call_count.
+ * stmt.c (expand_{start,end}_bindings): Use this var
+ to determine whether there are any function calls in a block.
+ No need for a nonlocal goto handler if block has no calls.
+
+ * c-decl.c (define_label): Set DECL_CONTEXT.
+ Maybe push label on shadowed_labels.
+ (pop_c_function_context): Clear out labels in named_labels
+ and reinstall those in shadowed_labels.
+ Restore shadowed_labels.
+ (push_c_function_context): Push shadowed_labels.
+ (start_function): Clear shadowed_labels.
+
+ * function.c: New file, split from stmt.c.
+
+ * xm-mips.h: Use __builtin_alloca.
+
+Fri Oct 6 00:30:42 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * jump.c (jump_optimize): Optimization of
+ `if (...) x = 1; else {...} if (x) ...' got sense wrong sometimes.
+
+ * Makefile.in (stamp-gnulib2): depend on gcc, cc1, cpp via
+ gnulib2-indirect.
+
+ * tm-vax.h (TRAMPOLINE_SIZE,INITIALIZE_TRAMPOLINE,TRAMPOLINE_TEMPLATE):
+ Define macros.
+
+ * m68k.md (addsi3): Change ! to ? in lea alternatives.
+ Put them before the add-to-register alternative.
+
+ * reload.c (find_dummy_reload): Use PREFERRED_RELOAD_CLASS here
+ as in push_reload, so we make accurate predictions.
+
+ * c-decl.c (pushdecl): Don't set DECL_CONTEXT for function declaration
+ that isn't a definition.
+
+ * explow.c (fix_lexical_addr): Handle address that's just a base reg.
+
+ * expr.c (expand_expr, case VAR_DECL): No need for static chain
+ if var is static.
+
+ * reload.c (find_equiv_reg): Do let xregno be a pseudo reg,
+ but don't call HARD_REGNO_NREGS in that case.
+
+ * local-alloc.c (combine_regs): Set reg_qty[sreg] even if it was <0.
+
+ * c-decl.c (start_function): Clear named_labels.
+
+Thu Oct 5 00:30:39 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload.c (find_equiv_reg): Don't let xregno be a non-hard reg.
+ Don't do OVERLAPPING_REGNO_P on a pseudo reg number.
+
+ * Handle addresses of nested functions.
+ * New tm macros TRAMPOLINE_SIZE, INITIALIZE_TRAMPOLINE,
+ ALLOCATE_TRAMPOLINE, TRAMPOLINE_TEMPLATE.
+ * expr.c (expand_expr, case ADDR_EXPR): Handle addresses of nested fns.
+ * stmt.c (trampoline_address): New function.
+ * varasm.c (assemble_trampoline_template): New function.
+
+ * i386.md (trunchiqi2, etc.): Output %1 with size of destination.
+ * out-i386.c (PRINT_REG): Support 'b' as CODE.
+
+ * combine.c (try_distrib): Make sure we don't move a reg use
+ across a store into that reg.
+
+ * reload1.c (order_regs_for_reload): Rate fixed regs at LARGE+2,
+ and explicitly used regs at LARGE+1.
+
+ * stor-layout.c (layout_record): Support BIGGEST_FIELD_ALIGNMENT.
+ * tm-vax.h (BIGGEST_FIELD_ALIGNMENT): Define it.
+ (BIGGEST_ALIGNMENT): Now always 32.
+
+ * stor-layout.c (build_int): When memoizing, make permanent nodes.
+
+Wed Oct 4 19:40:37 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * xm-i860.h: Missing file added.
+
+ * integrate.c (function_cannot_inline_p): Don't inline if > 100 bytes
+ of stack space, unless declared inline.
+
+Tue Oct 3 00:16:08 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stmt.c (assign_outer_stack_local): New function.
+ (put_var_into_stack): Allocate stack slot in fn the variable is in.
+
+ * stmt.c (put_var_into_stack): If variable-size object is nonlocal,
+ put the pseudo with its address into the stack.
+
+ * calls.c: New file, split out from expr.c.
+ (expand_call): Pass static chain if fn wants it.
+
+ * Make put_var_into_stack handle vars of containing function.
+ * stmt.c (put_var_into_stack): Find the rtl chains for the
+ function that the variable belongs to.
+ (fixup_var_refs): New args FIRST_INSN, STACK and RTL_EXPS.
+
+ * Make DECL_CONTEXT the function a var is in, and set it right away.
+ * c-decl.c (store_parm_decls): Use DECL_RESULT, not DECL_CONTEXT,
+ as the flag for duplicate names or missing names.
+ * c-decl.c (start_function): Don't set current_function_decl
+ till after calling pushdecl.
+ * c-decl.c (pushdecl): Set DECL_CONTEXT to current_function_decl.
+ (poplevel): Used to set it here, to the LET_STMT. Don't.
+ * stmt.c (init_function_start): Test for a FUNCTION_DECL in
+ DECL_CONTEXT, not for a LET_STMT.
+
+ * c-parse.y (primary <- identifier): Set TREE_NONLOCAL if appro.
+ Also call mark_addressable.
+
+ * stmt.c (expand_function_start): Store static chain into stack frame.
+ Fetch static chains of containing functions into pseudos.
+ (lookup_static_chain): Moved here; and really does something.
+ * expr.c (expand_expr): Handle nonlocal variable.
+ * explow.c (fix_lexical_addr): New function.
+
+ * out-i386.c (fp_pop_int): Use %L0 in fistp insn.
+
+ * global-alloc (find_reg): Fix typo marking new hard reg conflicts.
+
+ * stmt.c (pushcase, pushcase_range, expand_end_case):
+ When warning about insns at start of case, don't mind NOTEs.
+
+ * local-alloc.c (combine_regs):
+ Transfer all pseudos from SREG's old qty to its new qty.
+
+ * Support nested functions:
+ * stmt.c (push_function_context, pop_function_context): New functions.
+ * tree.c (save_tree_status, restore_tree_status): New functions.
+ * stor-layout.c (save_storage_status, restore_storage_status): Ditto.
+ * expr.c (save_expr_status, restore_expr_status): Ditto.
+ * emit-rtl.c (save_emit_status, restore_emit_status): Ditto.
+ * c-decl.c (push_c_function_context, pop_c_function_context): Ditto.
+ (start_function, finish_function): New arg NESTED.
+ * c-parse.y (nested_function, notype_nested_function): New nonterms.
+ (decl): New alternative to use them.
+
+ * tree.h: Declare lineno.
+ * c-decl.c (finish_function): Don't expect lineno as arg.
+ * c-parse.y (fndecl, *nested_function): Don't pass it.
+
+ * expr.c (init_expr, expand_call): Delete may_call_alloca.
+ * tm-m88k.h, tm-sparc.h, tm-spur.h: Use current_function_calls_alloca.
+ * tm-mips.h: It wasn't really used; delete its declaration.
+
+Mon Oct 2 16:26:33 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c (emit_reload_insns): Reject any OLDEQUIV that is
+ in use in any other reload of this insn.
+
+ * expr.c (expand_call): Don't put on notes for const functions
+ if there aren't real insns to hold them.
+
+Sun Oct 1 19:50:59 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * integrate.c (expand_inline_function): Handle PARALLEL in CALL_INSNs
+ when setting follows_call.
+
+ * mips.md (call_value): Change to a straightforward define_insn
+ with just one action--no PARALLEL.
+
+ * i860.md (pfeq, pfgt and pfle patterns): Add f0 as 3rd arg.
+
+ * integrate.c (save_for_inline): Don't delete NOTE_INSN_FUNCTION_END.
+
+ * c-parse.y (simple_if): Return $$ as value of stmt_count.
+ (stmt (if statement)): Warn if $$ was not incremented in the body.
+ (stmt (else statement)): Likewise.
+ (stmt): All alternatives except null statement increment stmt_count.
+
+Fri Sep 29 08:56:30 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * regclass.c (reg_class_record): If move between CLASS and GENERAL_REGS
+ is costly, charge that cost to GENERAL_REGS and its subclasses.
+ * tm-alliant.h, tm-m68k.h (REGISTER_MOVE_COST): New macro.
+
+ * regclass.c (regclass): When a reg is a parm equiv to a stack slot,
+ decrease its memcost, since the insn to load it would go away.
+
+ * global-alloc.c (find_reg): Rewrite two-pass hard reg preference code.
+ Uses regs_used_so_far to avoid allocating a reg not used elsewhere
+ in the first pass. Also updates regs_used_so_far.
+ (global_alloc): Initialize regs_used_so_far.
+
+ * tm-next.h (LINK_SPEC): Typo for -Z option. Don't pass -M option
+ to ld, since that is for cpp.
+
+ * Support -MD and -MMD options.
+ * gcc.c (default_compilers): Pass them to cpp in special way.
+ Don't inhibit compilation for them, only for -M and -MM.
+ * cccp.c (main): Handle them like -M and -MM except take arg
+ which is file name to write deps in.
+
+ * toplev.c: #if 0 around everything for GDB_DEBUG.
+ * symout.c: File removed from distribution.
+ * Makefile.in: Don't try to compile or link it.
+
+ * tm-hp9k320.h (ASM_FILE_START): Output a `version' pseudo-op.
+ [! HPUX_ASM] (ASM_SPEC): Don't use the -V option. Recognize -mc68000.
+ (CALL_USED_REGISTERS): Redefinition deleted. HPUX 6.5 doesn't need it.
+ * tm-hp9k310.h, tm-hp9k310g.h: New files.
+
+Thu Sep 28 12:57:11 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stmt.c (pushcase, pushcase_range): Warn if code was emitted inside
+ case stmt before 1st label is seen.
+ (expand_start_case): New arg is string to use in that warning.
+ (struct nesting): New fields printname and seenlabel.
+ * c-typeck.c (c_expand_start_case): Pass new arg to expand_start_case.
+
+ * gcc.c: Can now read compilation specs, and asm_spec (etc), from file.
+ (cpp_spec, asm_spec, etc.): New variables, initted to corresp. macros.
+ (do_spec_1, validate_all_switches): Use the variables, not the macros.
+ (link_command_spec): New name for old link_spec.
+ (compilers, n_compilers): Now a pointer, with size of vector ptd to.
+ (default_compilers): New name for old `compilers' vector.
+ (read_specs): Given file name, read specs and add to `compilers'.
+ Also set cpp_spec, asm_spec, etc.
+ (skip_whitespace): New subroutine.
+ (main): Initialize `compilers' from `default_compilers'.
+ Find a specs file and call read_specs.
+ Search thru `compilers' from back to front.
+ * Makefile.in (install): Use gcc -dumpspecs to write a specs file.
+
+ * Support multiple installed compilers; find them by
+ target machine and version.
+ (STANDARD_EXEC_PREFIX): Change to `.../gcc/'.
+ (standard_exec_prefix_1): Change to `.../gcc/'.
+ (process_command): Options -b and -V set spec_machine, spec_version.
+ Option -dumpspecs writes specs file to define cpp_spec, asm_spec, etc.
+ Option -dumpversion writes version number.
+ (main): Set machine_suffix from spec_machine and spec_version.
+ * Makefile.in (libsubdir): New variable, made from libdir.
+ (gcc.o): Define DEFAULT_TARGET_MACHINE macro in compilation.
+ Change value of STANDARD_EXEC_PREFIX as above.
+ (cccp.o): Use libsubdir.
+ (install): Install files under $(libsubdir), after making that dir.
+
+ * reload.c (decompose): Handle case of pseudo with no hard reg.
+
+Wed Sep 27 01:20:36 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * global-alloc.c: #if 0 handling of REG_NO_CONFLICT notes.
+
+ * c-typeck.c (build_c_cast): Implement cast to union type.
+
+ * Edit the makefile automatically when necessary.
+ * config.gcc: Produce Makefile by editing Makefile.in with sed.
+ * Makefile.in: New name for file `Makefile'.
+ Comments on editing the file deleted.
+ * config/make-*: Various files are inserted by sed into Makefile.
+
+ * Provide a way for languages to control printing of function names.
+ * toplev.c (error, fatal, announce_function, etc.):
+ Use value of decl_printable_name to compute what name to print.
+ * stmt.c (init_function_start): Likewise.
+ * toplev.c (main): Init that variable.
+ (decl_name): New function, used by default.
+
+ * explow.c (round_push): Fix typo: return fast if ALIGN is 1.
+
+ * flow.c (dump_flow_info): Delete excess arg to fprintf.
+ * gcc.c (fatal): Delete excess arg to delete_temp_files.
+
+ * expr.c (convert_move): Handle absence of integer truncate insns
+ by copying value to a reg (and then using subreg).
+
+ * final.c (final_start_function): Do leaf-function register renumbering
+ if that is defined for this machine.
+ (leaf_renumber_regs, only_leaf_regs_used, leaf_function_p): New fns.
+
+ * varasm.c (in_text_section): New function.
+ * tm-3b1.h (ASM_OUTPUT_SKIP): Use that.
+
+ * stmt.c (case_index_expr_type): New function.
+
+ * c-parse.y (maybe_attribute): Don't fail to return a value.
+
+Tue Sep 26 02:40:23 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Do auto-increments for hard regs.
+ * flow.c (mark_used_regs): Do set reg_next_use for hard regs.
+ When making an auto-increment for a hard reg, don't mess with
+ reg_n_refs or reg_n_sets.
+ (try_pre_increment_1): Likewise.
+
+ * gcc.c (compilers): -undef inhibits predefined symbols.
+
+ * combine.c (subst): In case EQ, prefer ZERO_EXTRACT, not SIGN_EXTRACT.
+ * vax.md (jbs, jbc patterns): Write with ZERO_EXTRACT.
+ * m88k.md: Likewise.
+
+ * Merge C++ changes in stmt.c:
+ * Set up an obstack, stmt_obstack.
+ (ALLOC_NESTING): Allocate a `struct nesting' on that. Callers changed.
+ (POPSTACK): Use the obstack.
+ (init_stmt): New fn: init the obstack.
+ (any_pending_cleanup): New fn.
+ (expand_start_bindings): Leave outer_cleanups 0 if nothing in it.
+ (expand_end_bindings): Preserve some global vars around cleanups.
+ After cleanups, if no stack level to restore, do pending pops.
+ (fixup_cleanups): Do pending pops after the cleanups.
+ (expand_start_case): Don't output a NOTE if already have one.
+ (assign_parms): Speed up sizetree computations in common case.
+ (init_function_start): Use lang_printable_name for current_function_name.
+ (expand_function_end): Don't set REG_FUNCTION_VALUE_P
+ for a pseudo reg used to copy into the real return.
+ * toplev.c (compile_file): Call init_stmt.
+
+ * c-typeck.c (commontype): If one arg is error_mark_node, return other.
+
+Mon Sep 25 12:13:07 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * optabs.c (expand_binop): Handle boolean ops on >SImode with
+ several one-word insns. Put out REG_EQUAL and REG_NO_CONFLICT notes.
+ * global-alloc.c (global_conflicts): For each insn, record
+ in no_conflict_pairs all the REG_NO_CONFLICT notes of the insn.
+ (record_one_conflict): Don't mark a conflict between such a pair.
+ * local-alloc.c (block_alloc): Do combine_regs on the sequences
+ made by expand_binop for multi-word boolean ops.
+ (combine_regs): New arg ALREADY_DEAD is 1 if UREG died prior to INSN.
+ (no_conflict_p): New subroutine.
+ * combine.c (try_combine): Move REG_NO_CONFLICT notes like REG_INC.
+ * flow.c (life_analysis): Don't delete no-op moves
+ if they carry REG_EQUAL notes. These insns are needed later.
+ * reload.c (find_dummy_reload): Use actual operands (which may be
+ subregs) for most purposes, including checking for overlap.
+ (hard_reg_set_here_p): Handle a range of regnos, not just one.
+
+ * loop.c (move_movables): Use special techniques to move regs
+ used for zero-extension. Don't combine matching regs; instead,
+ just record them in pairs in regs_may_share.
+ * global-alloc.c (global_alloc): Digest regs_may_share into a
+ vector, reg_may_share. Then assign matching regs the same allocno.
+ (global_alloc): Initialize allocno_n_refs, allocno_live_length,
+ allocno_calls_crossed.
+ (allocno_compare): Use those new vectors; don't use allocno_reg.
+ (find_reg): Use those new vectors.
+ Assign hard reg to all the pseudos that share the allocno.
+
+ * jump.c (jump_optimize): Two new cases simplify jumping to or
+ falling into a test-and-branch after setting the register being tested.
+ * jump.c (get_label_before, get_label_after): New functions.
+ (do_cross_jump): Use get_label_before.
+
+Sun Sep 24 00:21:24 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gnulib2.c (__fixunsdfsi): Defined here, not in gnulib.c.
+ * Makefile (LIBFUNCS, LIB2FUNCS): Corresponding change.
+
+ * tm-i860.h (SDB_DEBUGGING_INFO): Define this, not SDB_...
+
+ * gcc.c (link_spec): Don't specify -lg.
+ * tm-alliant.h, tm-convex.h, tm-hp9k3bsd.h, tm-isi68.h, tm-news.h
+ * tm-pyr.h, tm-seq386.h, tm-sequent.h, tm-sparc.h, tm-spur.h
+ * tm-sun2.h, tm-sun3.h, tm-sun386i.h, tm-tahoe.h, tm-vax.h:
+ Make LIB_SPEC link with -lg.
+ * tm-harris.h, tm-vaxv.h, tm-vms.h: Turn off inherited LIB_SPEC.
+
+ * recog.h (insn_*): Declare these tables `const'.
+ (const): Define this as nothing, if not __STDC__.
+ * expr.h (insn_gen_function): Declare `const'.
+ (const): Define this as nothing, if not __STDC__.
+ * genoutput.c (main): In insn-output.c, don't define `const' if
+ already defined.
+
+ * recog.c (offsettable_nonstrict_memref_p): New function.
+ * stmt.c (fixup_var_refs_1): Use that, not offsettable_memref_p.
+ * reload.c (find_reloads): Likewise.
+
+ * integrate.c (save_for_inline): Set in_nonparm_insns when arrive
+ at the first nonparm insn.
+ (copy_for_inline): Set TREE_READONLY only if in_nonparm_insns.
+
+ * Makefile (float.h): Make hard-params an ordinary dependency.
+
+ * c-decl.c (poplevel): When popping a local extern decl,
+ save the TREE_USED bit in the identifier.
+ * toplev.c (compile_file): Check that, printing "not used" warnings.
+
+ * c-parse.y (init_lex): Discard undesired reserved words from table.
+ (yylex): No need to check for them at lookup time.
+
+ * tree.c (make_node): Always put PARM_DECL in saveable_obstack.
+
+ * toplev.c (floor_log2, exact_log2): Rewritten for speed.
+
+ * tree.c (listify): New function.
+
+ * c-typeck.c (convert_for_assignment): New args for function being
+ called and argument number. Used in error messages.
+ (actualparameterlist): Pass those args usefully.
+ (wrn_for_assignment): New function.
+
+ * loop.c (general_induction_var): Handle give copied from a biv.
+
+ * i386.md (div*i3, udiv*i3): New patterns.
+ (divmodhi4, udivmodhi4): New patterns.
+
+ * combine.c (subst):
+ Simplify (sign_extend:M (subreg:N (lshiftrt:M REG CONST) 0))
+ when REG was assigned from (zero_extend:M (any:N ...)).
+ Make the similar (zero_extend:M ...) case share code.
+
+ * expr.c (store_field): A frame-pointer-relative address is stable.
+
+ * expr.c (expand_expr): Effectively pass on IGNORE for 2nd op of comma.
+
+Sun Sep 24 00:21:24 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Version 1.36 released.
+
+ * genextract.c (main): Pass `insn' as arg to `fatal_insn_not_found'.
+
+ * tahoe.md (casel patterns): Use %@ for operand of .align.
+ * tm-tahoe.h (PRINT_OPERAND): %@ prints `1'.
+ * tm-harris.h (PRINT_OPERAND): Redefine it; %@ prints `2'.
+
+ * config.gcc (decstation): New entry.
+
+ * tm-harris.h: New file, using tm-tahoe.h.
+
+ * tm-decstatn.h, tm-mips-bsd.h, tm-mips-sysv.h: New files.
+
+Sat Sep 23 00:28:14 1989 Alain Lichnewsky (lich at glenlivet)
+
+ * added -Zxxx flag in tm-mips.h. (-Z stands for systype)
+
+ used as -ZSYSV or -ZBSD43 on RISC_OS. I suppose
+ that at somepoint -ZPOSIX might be required for Ultrix.
+
+ * changed command issued to loader to set -systype and to get
+ crt1 crtn instead of crt0.
+
+ * changed predefines for cpp to agree with RISC-OS
+
+ * tm-mips.h checks for machine type ( defined(ultrix) == DECSTATION)
+ so that user does not have to go in and change tm-mips.h anymore
+
+ * cpp defines mips host_mips unix and SYSTYPE_SYSV
+ or SYSTYPE_BSD43.
+
+Fri Sep 22 00:31:29 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * pyr.md (andsi3): Flush spurious paren.
+
+ * Makefile (hard-params): Don't use LIBS or LIBDEPS.
+
+ * rtl.c (init_rtl):
+ Use malloc to allocate the string for format of CONST_DOUBLE.
+ Don't fail to store in rtx_format.
+
+Thu Sep 21 00:33:13 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * print-tree.c (dump): Move decl of P in REAL_CST case.
+
+ * fold-const.c (fold): For ABS_EXPR, handle REAL_IS_NOT_DOUBLE.
+
+ * c-convert.c (convert_to_real): Use REAL_VALUE_ATOF to make 0.
+
+ * mips.md (movdi): Handle constant with or without WORDS_BIG_ENDIAN.
+ For alternative 2, output just 2 store insns, not 3.
+
+ * dbxout.c (dbxout_symbol): Optionally go to .data for
+ a static file-scope variable.
+ * tm-vax.h: Define DBX_STATIC_STAB_DATA_SECTION to request this.
+
+ * varasm.c (output_constant, force_const_mem):
+ ASM_OUTPUT_DOUBLE_INT now takes rtx as argument.
+
+ * gvarargs.h [__NeXT__]: Undefine macros defined by stdardg.h.
+ Define _VARARGS_H.
+
+ * stddef.h (size_t): Don't define it if _SIZE_T macro is defined.
+ (NULL): Undef any previous defn.
+
+ * cexp.y (NULL): Don't define if already defined.
+
+ * emit-rtl.c (force_next_line_note): New function.
+ * stmt.c (expand_function_start): Call that just before returning.
+
+Wed Sep 20 01:22:16 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-parse.y (asm_clobbers):
+ Allow string concatenation: call combine_strings.
+
+Mon Sep 18 00:04:06 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (expand_call): If calling const function, don't defer
+ pops for this call.
+
+ * c-parse.y (yylex): When float constant ends in `f',
+ actually truncate to a single-float.
+
+Sun Sep 17 01:36:43 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gcc.c (SWITCH_TAKES_ARG): -A takes an arg.
+ (link_spec): Inhibit start files when -A.
+
+ * convex.md (call, call_value): Supply dummy arg to RETURN_POPS_ARGS.
+
+ * gnulib2.c (__fixunsdfdi): After removing top half, A can be neg.
+ (__cmpdi2, __ucmpdi2): Was misusing macros HIGH and LOW--
+ use .s.high and .s.low to extract words from long_long.
+
+ * Makefile (gnulib2): Run `./gcc'.
+
+ * Makefile (float.h): Use `make', not `$(MAKE)'.
+ (hard-params.o): Use `$(srcdir)' in deps as in commands.
+
+ * out-tahoe.c (output_move_double): Handle constant operand 1.
+
+Sat Sep 16 01:15:24 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c (emit_reload_insns): Put death note for input reload reg
+ even if reload was inherited.
+
+ * out-i860.c (output_block_move): Typo loading size of block.
+
+ * m68k.md (dbra patterns): Do CC_STATUS_INIT.
+
+ * cse.c (fold_rtx): Check GET_MODE_CLASS before floating negate.
+
+Fri Sep 15 00:39:44 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * combine.c (subst): Don't combine (subreg (mem))
+ if subreg's mode is wider than mem's mode.
+
+Thu Sep 14 04:33:51 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Makefile (clean): Delete temp files used in making gnulib.
+
+ * tm-next.h (LINK_SPEC): Pass -Z and -seglinkedit options.
+
+Tue Sep 12 01:06:39 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stor-layout.c (layout_type): Ignore MAX_FIXED_MODE_SIZE for ints.
+
+ * mips.md (cmpsi + bleu peephole): Should output unsigned insn.
+
+ * expmed.c (store_bit_field, extract_bit_field): If loading mem
+ into reg for bit field insn, don't use a larger mode than insn wants.
+
+ * Makefile (stamp-gnulib2): Depend on gcc, cc1, cpp to avoid
+ wrong order of making when parallel.
+
+ * Makefile (float.h): Do use $(MAKE) to run recursive make.
+
+Mon Sep 11 00:49:11 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (main): Test for missing arg after -o, etc.
+
+ * tm-next.h: Nearly completely new.
+
+ * gcc.c (SWITCH_TAKES_ARG, WORD_SWITCH_TAKES_ARG): Move after config.h.
+
+ * cccp.c: Cast some args to strcpy and strcat.
+
+ * genoutput.c (error): Declare arg S.
+
+ * tm-pyr.h, pyr.md, out-pyr.c, xm-pyr.h: New files.
+ * config.gcc: New item for pyr.
+
+ * gvarargs.h: If __pyr__, use va-pyr.h.
+
+Sun Sep 10 00:48:43 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c (inc_for_reload): Really return the first of the insns.
+
+ * stor-layout.c (build_int): Memoize size nodes for sizes <= 32.
+
+ * loop.c (check_dbra_loop): Don't reverse a biv that is used
+ in between its update and the loop endtest insn.
+
+Sat Sep 9 02:10:49 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stor-layout.c (genop): Don't use `combine' for nonexplicit constants.
+ Handle some identity elements, etc., directly.
+ (layout_basetypes): Function deleted.
+ (layout_record): Ignore any TYPE_DECLs in the fieldlist.
+ Don't do PCC_BUTFIELD_TYPE_MATTERS hack on field with ERROR_MARK type.
+ (layout_union): Delete error check for base types.
+ Ignore any TYPE_DECLs in the fieldlist.
+ (layout_type): Copy layout info directly into all variants of type.
+ Delete unused local `x'.
+
+ * mips.md (movdi): Handle constant source operand.
+ (movsi): Some output code moved to output_load_immediate.
+ * out-mips.c (output_load_immediate): New function.
+
+ * config.gcc (iris): Use tm-iris.h and xm-iris.h.
+
+ * integrate.c (copy_for_inline): Copy all nonconstant MEM addresses.
+
+ * tm-3b1.h (ASM_OUTPUT_SPACE): New override defn, to output explicit
+ bytes of 0 if in text segment.
+
+Fri Sep 8 19:15:08 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * combine.c (try_combine): Don't do i3dest stuff if i3 isn't a SET.
+
+Thu Sep 7 00:16:32 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * integrate.c (function_cannot_inline_p): Fn is "not even close"
+ only if > 3 * max_insns.
+
+ * toplev.c (fatal_insn_not_found): New fn.
+ * genextract.c (main): Make insn_extract call that fn.
+
+ * integrate.c (expand_inline_function): Don't abort about bad offset
+ in a parm whose type is error_mark_node.
+ Make another syntax level to hold parm destructors.
+
+ * tm-mips.h (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE):
+ Increment push_loc after, not before, each reg save or restore.
+ When storing reg 9 or 29, use offset tsize-4.
+ Make tsize larger by 4 initially.
+ (STARTING_FRAME_OFFSET): -8, not -4.
+
+ * gcc.c (choose_temp_base): Make use of TMPDIR and P_tmpdir
+ if they exist.
+
+ * toplev.c, gcc.c, cccp.c, gen*.c (fancy_abort):
+ New function which can be used to replace `abort'.
+
+ * toplev.c (main): Save argv, argc in save_argv, save_argc.
+
+ * jump.c (delete_insn): Always advance NEXT across deleted insns,
+ in case not optimizing. Fixes setting current_function_returns_null.
+
+ * symout.c: Include stddef.h with <...>.
+
+Wed Sep 6 00:39:35 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gcc.c (find_exec_file): Was using `argbuf[0]' where wanted `prog'.
+
+ * combine.c (combine_instructions): Dont call record_dead_and_set_regs
+ if insn has become a NOTE.
+
+ * reload.c (combine_reloads): Update reload_when_needed.
+
+ * jump.c (delete_insn): If delete label on ADDR_VEC, delete table too.
+ (jump_optimize): If ADDR_DIFF_VEC label has 1 ref, delete it and table.
+
+ * gunlib2.c (__fixunsdfdi, __floatdfdi): Make the long long,
+ and/or its two halves, unsigned.
+
+ * reload1.c (reload): When setting double_reg_address_ok,
+ require it to be offsettable.
+ * out-sparc.c (output_fp_move_double): Now safe to use std
+ for all reg+reg addresses.
+
+ * vax.md: Add another simplified-casesi pattern for operand 0 constant.
+
+ * cse.c (fold_rtx): Don't truncate VAL at end if WIDTH is 0.
+ Don't alter WIDTH for that purpose based on the operands.
+
+ * stmt.c (warn_if_unused_value): && or || is ok if 2nd op has effect.
+
+ * c-parse.y (ALIGNOF unary_expr): Find a larger value if possible.
+
+ * reload.c (combine_reloads): Don't combine an output address reload.
+ (find_reloads): Call combine_reloads after setting reload_when_needed.
+ (find_reloads_address): Update OPERAND if copy the operand.
+
+ * cccp.c (macroexpand): Missing arg no error in 1-arg macro if -trad.
+
+Tue Sep 5 14:12:23 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload.c (find_dummy_reload): Don't use the output reg if it is
+ a fixed reg which can overlap with other regs.
+
+ * cse.c (exp_equiv_p): Two vectors must have same length.
+
+ * tree.def (WITH_CLEANUP_EXPR): Print-name string was wrong.
+
+ * optabs.c (expand_fix): Undo previous change (unsigned conversion).
+ It doesn't work.
+
+ * gcc.c: Pass -i option to cpp. It takes an arg.
+
+ * cccp.c (cplusplus_include_defaults) [VMS]: Typo in array indices.
+
+ * Makefile (gnulib): Create it in tmpgnulib, then rename at the end.
+
+ * i860.md (movdi from constant pattern): Fix `st' opcode typos.
+
+ * Makefile (hard-params*): Use CCLIBFLAGS, not CFLAGS.
+
+Fri Sep 1 03:43:50 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-i386gas.h (ASM_OUTPUT_ALIGN): .align arg isn't a log, in gas.
+ (ASM_OUTPUT_ALIGN_CODE): Align labels, etc. to 4-byte boundary.
+
+ * integrate.c (save_for_inline): Delete NOTE_INSN_DELETED notes.
+
+ * Makefile (clean): Delete dbr and jump2 dumps.
+
+ * Makefile (gnulib, gnulib2): Compile in main dir, not libtemp subdir.
+ This avoids trouble with -I options, etc.
+
+Thu Aug 31 15:07:19 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c (emit_reload_insns):
+ Be specific moving REG_DEAD notes to an output reload.
+ Sometimes move them to output-operand-address reloads.
+
+ * out-sparc.c (output_fp_move_double): Very cautious about std.
+ Use it only for something visibly aligned, or for an array element.
+
+ * cccp.c (main) [VMS]: Remove dirs and extension from PROGNAME.
+ (pfatal_with_name) [VMS]: Return VMS system call error code as status.
+ (cplusplus_include_defaults) [VMS]: Add GNU_GXX_INCLUDE.
+
+ * xm-vms.h (FATAL_EXIT_CODE): Now (44 | 0x10000000).
+
+ * expr.c (do_store_flag): Allow more values of STORE_FLAG_VALUE.
+
+ * gnulib2.c (__fixunsdfdi): Explicitly cast doubles to `long int'
+ to avoid infinite recursion.
+
+Wed Aug 30 13:28:54 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * loop.c (skip_consec_insns): Skip NOTEs.
+
+ * loop.c (general_induction_var): If G or V is a nonreplaceable giv,
+ give up. If G is allocated here, consider it replaceable.
+
+ * stupid.c: Make uid_suid, reg_where_born and reg_where_dead
+ vectors of ints, not short.
+
+Tue Aug 29 00:21:13 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-iris.h: Fix typo in formfeed char.
+
+ * out-i860.c (singlemove_string): Add missing `.l' to `st', `ld'.
+
+ * loop.c (general_induction_var): Don't set G from 2nd op. of MINUS,
+ since that would negate the result.
+
+Mon Aug 28 00:16:36 1989 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
+
+ * dbxout.c (dbxout_symbol): When we need a pointer type, don't
+ record it in TYPE_POINTER_TO, lest it not live as long as its target.
+
+ * tm-hp9k320.h (CPP_PREDEFINES): Delete __hp9000s300 and _HPUX_SOURCE.
+
+ * Makefile (gnulib): Deleted stamp-gnulib2 in wrong dir.
+ (hard-params.o): Copy it into current dir before compiling.
+ (STAGESTUFF): Include the stamp-*.[ch] files.
+
+Sun Aug 27 13:59:39 1989 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
+
+ * out-i860.c (output_size_for_block_move): Typo in CC_KNOW_HI_R31.
+
+ * integrate.c (expand_inline_function): Ignore insns to set value reg
+ if we don't want the value.
+
+ * varasm.c (make_function_rtl, make_decl_rtl): Use DECL_ASSEMBLER_NAME.
+
+ * Makefile (stamp-gnulib2): Don't explicitly delete old members,
+ just replace them.
+
+ * m68k.md, alliant.md (trunchiqi): Use movew if moving from memory
+ or from a const_int.
+
+ * integrate.c (expand_inline_function): Set first_parm_offset
+ later on, after computing the args, in case those args
+ contain inline function calls.
+
+ * alliant.md (movqi): Like recent change in m68k.md.
+
+Sat Aug 26 00:26:03 1989 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
+
+ * tm-hp9k320.h (CPP_PREDEFINES): Take out m68k and mc68000.
+ * tm-news.h (CPP_PREDEFINES): Add mc68000.
+
+Fri Aug 25 15:37:35 1989 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
+
+ * optabs.c (expand_fix): Can convert to unsigned int
+ by subtracting 2**(N-1), converting to signed, and adding 2**(N-1).
+
+ * reload.c (find_reloads_address): For out-of-range stack slot,
+ reload the displacement into a reg.
+ (find_reloads_toplev): For subreg of a reg with a reg_equiv_address,
+ turn the whole thing into a memref.
+
+Thu Aug 24 14:07:03 1989 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
+
+ * c-decl.c (grokdeclarator): If function is declared `extern inline',
+ set current_extern_inline.
+ (start_function): In that case, set TREE_EXTERN in function decl.
+ * toplev.c (rest_of_compilation): In that case, don't really compile.
+ (compile_file): Don't output such functions at the end either.
+
+ * c-typeck.c (build_function_call): Do set NAME if we have one.
+
+ * Prevent any variability in results of qsort.
+ * stupid.c (stupid_reg_compare): Compare by regno as last resort.
+ * global-alloc.c (allocno_compare): Same idea.
+ * local-alloc.c (qty_compare_1): Same idea.
+ * reload1.c (hard_reg_use_compare, reload_reg_class_lower): Same idea.
+
+ * cccp.c (macroexpand): If read one arg, but it's whitespace,
+ consider that 0 args for checking number of args.
+ Improve plurals in error messages.
+
+ * expr.h (inhibit_defer_pop): New name for current_args_size,
+ now declared here.
+ (NO_DEFER_POP, OK_DEFER_POP): Moved here.
+ * expr.c: Names related to current_args_size renamed.
+ (clear_current_args_size): Deleted.
+ * stmt.c (expand_function_start): Init inhibit_defer_pop here.
+
+ * stmt.c (expand_start_stmt_expr): Do NO_DEFER_POP.
+ (expand_end_stmt_expr): Do OK_DEFER_POP, and don't do deferred pops.
+
+ * Makefile (c-parse.tab.c): Pass -o option to Bison.
+
+Wed Aug 23 23:14:06 1989 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
+
+ * expmed.c (store_bit_field, extract_bit_field):
+ Use GET_MODE_WIDER_MODE to scan possible modes for bestmode.
+
+ * Makefile (stamp-gnulib2): Discard error messages from `ar d'.
+
+Tue Aug 22 00:31:51 1989 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
+
+ * final.c (output_source_line): In COFF, don't output `.ln 0'.
+
+ * Makefile (stamp-gnulib2): Depend on gnulib. For parallel make.
+
+ * stmt.c (uninitialized_vars_warning): Don't crash if DECL_RTL is 0.
+
+ * i386.md (truncdfsf2): Pay attention whether stack top is dead.
+
+Mon Aug 21 22:02:40 1989 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
+
+ * reload1.c (choose_reload_regs): Don't use regno uninitialized,
+ in the code that does find_equiv_reg.
+
+Sun Aug 20 00:06:47 1989 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
+
+ * m68k.md (movqi): Was outputting bad code for areg->mem and mem->areg.
+
+ * explow.c (memory_address): Handle a hard reg in wrong reg class.
+
+ * stmt.c (expand_function_end): Set REG_FUNCTION_VALUE_P in return
+ reg when returning address of structure value block.
+
+ * integrate.c (save_for_inline): Preserve integrated bit on insns.
+
+Sat Aug 19 14:20:07 1989 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
+
+ * combine.c (subst): Don't change (subreg:M (mem:N ...)) to
+ (mem:M ...) if address is mode-dependent.
+
+ * config.gcc: Copy and alter Makefile for any srcdir except `.'.
+ In that case, make a .gdbinit as well.
+
+ * sparc.md (andcbsi3, iorcbsi3, xorcbsi3): These are not commutative.
+
+ * vax.md (cmpv and cmpzv patterns): Use COMPARE, not MINUS.
+
+Fri Aug 18 12:24:52 1989 Richard Stallman (rms at hobbes.ai.mit.edu)
+
+ * alliant.md (movqi): Change move to mov in assembler code.
+
+ * integrate.c (expand_inline_function):
+ Handle args passed in regs and copied to slots reached via arg ptr.
+
+ * out-sparc.c (output_delayed_branch):
+ Do alter_subreg on operands of delay insn.
+
+ * reload1.c (choose_reload_regs): Look for a reg to share
+ before one that we won't share.
+
+ * expr.h: Define OPTAB_MUST_WIDEN.
+ * optabs.c (expand_binop): Handle that case.
+ * expmed.c (expand_shift): Use that when widening lshift to ashift.
+
+ * optabs.c (emit_cmp_insn): Use CONST0_RTX, not individual vars.
+
+ * gnulib2.c (lsh*di3, ash*di3): Return right away if count is zero.
+ Otherwise tried to shift by 32.
+ Also replace constant 32 by something symbolic.
+
+ * final.c (output_source_line): Output line number in COFF
+ even if wrong file.
+
+Thu Aug 17 15:16:34 1989 Richard Stallman (rms at hobbes.ai.mit.edu)
+
+ * Makefile (version.o): Make this a target; specify source file.
+ (obstack.o): Likewise.
+
+ * config.gcc (i860): New alternative.
+
+ * i860.md (movstrsi): Record the alignment as operand 3.
+ Renumber following (internal) operands.
+ * out-i860.c (output_block_move): Rewrite as in out-sparc.c.
+ (output_size_for_block_move): Likewise. And don't
+ subtract alignment from the size.
+
+Wed Aug 16 13:27:12 1989 Richard Stallman (rms at hobbes.ai.mit.edu)
+
+ * loop.c (combine_movables): Don't combine zero-extend
+ registers that live outside the loop.
+
+ * integrate.c (expand_inline_function): Use copy_to_mode_reg
+ to set up this_struct_value_rtx, to handle sums right.
+
+ * Makefile: Use $(srcdir) in bison output files used as deps.
+ Supply some missing deps.
+ (*.info, doc): *.info files go in srcdir.
+
+Tue Aug 15 00:11:12 1989 Richard Stallman (rms at hobbes.ai.mit.edu)
+
+ * i860.md, tm-i860.h, out-i860.c: New files.
+
+ * c-decl.c (duplicate_decls): Fix bug determining whether NEWDECL
+ is a definition or just a decl.
+ Combine code to preserve various things from old definition
+ through a declaration.
+
+ * config.gcc: Scan all args at beginning, setting variables.
+ Arg of form -srcdir=... sets srcdir explicitly.
+ srcdir now doesn't contain a slash, and is used with a slash.
+
+ * Makefile (install): Copy header files and gcc.1 from srcdir.
+ But copy float.h from current dir. (Remove that from USER_H.)
+ (various): Use new variable INCLUDES to get the -I options.
+ Add -I. at the beginning of these.
+ (gnulib, gnulib2): Likewise, use SUBDIR_INCLUDES.
+ Also, get source file from srcdir.
+ Also, depend on $(CONFIG_H).
+ (alloca.o): Get alloca.c from srcdir.
+
+ * reload1.c (emit_reload_insns): Bug in last change:
+ don't fail to set this_reload_insn.
+
+ * Makefile (Bison rules): Specify $(srcdir) for target and source.
+ (Explicit C rules): Specify $(srcdir)/ for source in commands.
+ Use sed to eliminate `./' in normal case.
+ (insn-*.c): Use $(srcdir) to run move-if-change.
+
+ * config.gcc: Check . and .. for the sources.
+ If in .., use that when making links.
+ Also, copy Makefile, alter srcdir in it, and add a VPATH.
+
+ * stmt.c (expand_end_case): When converting CONST_INT index
+ to an INTEGER_CST, sign-extend if signed type.
+
+Mon Aug 14 13:51:08 1989 Richard Stallman (rms at hobbes.ai.mit.edu)
+
+ * c-decl.c (duplicate_decls): Warn for qualifier mismatch
+ only if pedantic; don't consider it a type mismatch.
+ Merge the qualifiers of the two decls if the types match.
+
+ * expmed.c (store_bit_field): For insv, memref displacement
+ always counts in bytes, regardless of unit fetched.
+ When checking predicate of op0, accept any mode.
+
+ * optabs.c (expand_float): One call to can_float_p had args backwards.
+
+ * loop.c (check_dbra_loop): Set the JUMP_LABEL of the new jump insn.
+ Increment label's use count rather than storing 2.
+
+ * Makefile: Instead of $<, which fails in certain makes,
+ use $@ and then substitute in the name with sed.
+
+ * out-sparc.c (output_scc_insn): Handle CC_REVERSED for ordered tests.
+ Use orcc insns to store the result and set cc's for it.
+
+ * sparc.md (scc combination patterns):
+ Use operands[0] as basis for recorded cc value.
+
+ * gnulib2.c (floatdidf, fixdfdi, fixunsdfdi): New functions.
+
+ * gnulib.c (floatdidf, fixdfdi, fixunsdfdi): Deleted.
+ (union longlong, union double_di): Deleted.
+ (HIGH, LOW): Deleted.
+ These were deleted because most did not handle full range of DI
+ and they didn't use the right calling convention for DI.
+
+Sun Aug 13 13:06:45 1989 Richard Stallman (rms at hobbes.ai.mit.edu)
+
+ * c-typeck.c (comptypes): Qualifiers must match.
+ (Was already true for scalars.)
+ Also, array elt qualifiers must match.
+
+ * tm-apollo68.h (STRUCT_VALUE): Make it 0.
+ (This was done before and lost.)
+ * out-i386.c (function_epilogue): Use ret $4 to pop structure address.
+ (This was done before and lost.)
+
+ * out-i386.c (call_top_dead_p): Don't fail to check
+ the rtx code of the insns themselves.
+ (This was done before and lost.)
+
+ * out-sparc.c (output_block_move): If align is 8, make it 4.
+
+ * typeclass.h: New file.
+ * expr.c: Include it.
+ (expand_builtin): Use those codes in __builtin_classify_type.
+
+ * Makefile (all, lang-c): Reinstall gnulib2.
+
+ * Makefile (gnulib2): Don't give up if `ar d' fails.
+
+ * expr.c (emit_library_call): New 2nd arg NO_QUEUE.
+ All callers changed to pass it.
+ * optabs.c (expand_binop, expand_unop): Don't call emit_queue.
+ Instead, pass 1 for NO_QUEUE to emit_library_call.
+
+Sat Aug 12 12:05:22 1989 Richard Stallman (rms at hobbes.ai.mit.edu)
+
+ * reload1.c (emit_reload_insns): Decision for where to put input
+ reload insn is now common to ordinary case and auto-increment.
+ Likewise, updating these positions afterward.
+
+ * stmt.c (assign_parms): Treat last named arg as nameless.
+ * expr.c (expand_call): Likewise.
+
+ * explow.c (copy_to_mode_reg): Use force_operand for PLUS or MULT.
+ (copy_addr_to_reg): Use copy_to_mode_reg.
+
+ * expmed.c (store_bit_field): Handle case where insv rejects memrefs.
+
+ * tm-convex.h (ASM_OUTPUT_ALIGN): Magic to handle the fact
+ that this is not called when LOG is 0.
+
+Fri Aug 11 16:39:51 1989 Richard Stallman (rms at hobbes.ai.mit.edu)
+
+ * emit-rtl.c (get_lowpart): For multi-word, in error check,
+ test the unit size of the containing mode.
+
+ * cccp.c (macroexpand, dump_all_macros): Return void.
+ (macroexpand): Cast sprintf arg to char*.
+ (error, warning, error_with_line): Declare first arg char*.
+
+Thu Aug 10 21:42:13 1989 Richard Stallman (rms at hobbes.ai.mit.edu)
+
+ * expr.c (expand_call):
+ Use force_operand to copy arithmetic to register.
+
+ * dbxout.c (dbxout_symbol): Go back to N_FUN for const variable.
+
+ * integrate.c (expand_inline_function): Use proper machine mode
+ for a structure value in memory at address passed by caller.
+
+Wed Aug 9 15:21:36 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * config.gcc: Delete unnecessary variable assignments in case stmt.
+ (isi68-nfp): New alternative.
+
+ * combine.c (try_combine): Don't substitute for a register
+ which is being explicitly clobbered.
+
+ * This change was requested for C++.
+ * varasm.c (decode_reg_name, make_decl_rtl): Arg ASMSPEC now char *.
+ * toplev.c (rest_of_decl_compilation): Likewise.
+ * c-decl.c (finish_decl): Change call to rest_of_decl_compilation.
+
+ * tree.h (struct tree_decl): Pack machine_mode into 8 bits.
+
+ * explow.c (memory_address, copy_to_reg):
+ Use force_operand to copy arithmetic to register.
+
+ * tm-isi68-nfp.h: New file.
+ * tm-isi68.h: Allow overriding TARGET_DEFAULT, and let that
+ change CPP_SPEC and LINK_SPEC.
+ (ASM_FILE_START): No `.globl fltused' if soft-float.
+
+Tue Aug 8 21:50:52 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * varasm.c (const_hash): For constructor, mask TREE_TYPE to HASHBITS
+ bits and take modulo, so we don't get negative numbers.
+
+ * varasm.c (record_constant_1, compare_constant_1):
+ Record and compare the width of an integer.
+
+ * varasm.c (assemble_function, assemble_variable, get_or_assign_label):
+ (force_const_mem): Don't call ASM_OUTPUT_ALIGN if boundary is 1.
+
+ * c-decl.c (duplicate_decls): Consider const and volatile as part of
+ type when checking for match and when installing new type into OLDDECL.
+
+ * expr.c (do_store_flag): Make sure target fits operand predicate.
+ Also, omit the AND insn when true-value is 1
+ and the mode we get is wider than the one we want.
+
+ * genrecog.c (main): Make insn-recog.c include real.h.
+
+Mon Aug 7 16:58:56 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * genemit.c (main): Define `operands' as `emit_operands',
+ not `recog_operands'.
+
+ * reload1.c (emit_reload_insns): Don't copy back a dead output reg.
+
+Sun Aug 6 13:56:53 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * sdbout.c (plain_type_1, sdbout_one_type): Use the main variant.
+ (sdbout_type_fields): No need to check TREE_ASM_WRITTEN here,
+ since sdbout_one_type does that.
+
+ * expr.c (do_store_flag): Ensure the CLOBBER doesn't clobber an input.
+
+ * fold-const.c (fold_convert): Attempt to avoid overflow
+ when converting real to integer. Use unsigned conversion for
+ low part; always convert as positive and then change sign;
+ subtract high part before converting low part.
+ Also, check for real values out of range for chosen int type;
+ warn and do not convert.
+
+ * tm-hp9k320.h (CPP_SPEC) [not HPUX_ASM]: Don't define mc68000 here.
+ (CPP_PREDEFINES): Remove mc68k, add m68k and mc68000.
+ [HPUX_ASM]: Define CPP_SPEC here as in the other case,
+ but add __HPUX_ASM__ to each alternative.
+
+ * tm-m68k.h (FUNCTION_EPILOGUE): Call new hook FUNCTION_EXTRA_EPILOGUE.
+ * tm-altos3068.h (FUNCTION_EXTRA_EPILOGUE): Define it.
+
+ * Makefile: Use $< wherever appropriate.
+ Also put definitions of customization vars before the comments
+ saying how to override them.
+
+Sat Aug 5 14:15:39 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * i386.md (sne): Typo in opcode name.
+
+ * tree.h (struct tree_identifier): Delete redundant/unused error_locus.
+
+Fri Aug 4 00:04:10 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * varasm.c (const_hash, compare_constant_1, record_constant_1):
+ Compare types only for record constructors, not for array constructors.
+
+ * dbxout.c (dbxout_parms): When outputing parm from home in local slot,
+ with address from the RTL, don't do big-endian correction on it.
+
+ * c-typeck.c (build_unary_op): Do default conversion for unary +.
+
+ * cccp.c (rescan): Accept comments between macro and its args.
+
+ * c-decl.c (lang_decode_option): -traditional implies writable strings.
+
+ * cccp.c (trigraph_pcp): Make warning msg more accurate.
+
+ * c-typeck.c (c_expand_asm_operands): Delete the default promotion
+ which was inserted mysteriously since 1.35.
+
+ * global-alloc.c (global_conflicts): Allocate regs_set only once.
+ Make it twice as big since clobbers are stored twice.
+
+ * sparc.md (block move patterns): Record and use alignment operand.
+ * out-sparc.c (output_block_move): Get alignment from there.
+ (output_size_for_block_move): Greatly simplified.
+
+ * tm-i386v.h (PCC_BITFIELD_TYPE_MATTERS): Define it.
+
+ * stor-layout.c (layout_record): Anonymous bitfields don't affect
+ overall structure alignment, in PCC_BITFIELD_TYPE_MATTERS case.
+
+ * loop.c (strength_reduce): Prevent hard reg from becoming biv or giv.
+
+ * combine.c (subst): Simplify (eq (neg ...) (const_int 0)).
+
+Thu Aug 3 13:08:05 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cse.c (fold_rtx): For (op var const) special cases, also check
+ for constant as first argument.
+
+ * c-decl.c (pushtag): For global_binding_level, make permanent nodes.
+
+ * expr.c (do_store_flag): Put the CLOBBER before the comparison.
+
+ * expr.c (emit_push_insn): Conditionalize recent changes
+ on no FIRST_PARM_CALLER_OFFSET, so they don't happen on sparc.
+
+ * out-sparc.c (gen_scc_insn):
+ Don't be confused by CLOBBER emitted by do_store_flag.
+ Skip past such insns looking for last_insn.
+ Don't alter last_insn; instead, patch it to a NOTE and emit new insn.
+
+ * varasm.c (const_hash, compare_constant_1, record_constant_1):
+ For a CONSTRUCTOR, hash/compare/record type as well as elts.
+
+ * cse.c (cse_insn): July 18 change was wrong.
+ Now, invalidate at the beginning any regs explicitly clobbered
+ so they will not be substituted for if they appear as inputs.
+ * sparc.md (movstrsi): Copy addresses to temp regs, then use them.
+
+ * loop.c (record_giv): When comparing life spans for setting
+ ->forces, use luids consistently, not uids.
+
+ * sparc.md (ashlsi3, ashrsi3, lshrsi3): Truncate constants mod 32.
+
+Wed Aug 2 17:50:30 1989 Richard Stallman (rms at sugar-bombs)
+
+ * mips.md (patterns to move a subreg): Deleted.
+
+Sun Jul 30 19:23:13 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gcc.c (process_command): Skip `-b' like `-B', in 2nd scan.
+
+ * xm-sunos4.h: Deleted.
+ * tm-sparc.h, tm-sun3.h: Define LINK_SPEC here instead.
+ * tm-sun4os3.h: Undef it here.
+ * tm-sun3os3.h, tm-sun3os3nf.h: New files to undef LINK_SPEC.
+ * config.gcc: Use those new files where needed.
+
+ * config.gcc: Delete sun3-fpa and sun3-os4-fpa.
+ * tm-sun3-fpa.h: Deleted.
+
+ * cccp.c (do_include): Mention even non-ex files for -M.
+
+ * out-mips.c (addr_compensate): Handle HImode.
+ * mips.md (Set HI from subreg of SI rule):
+ Allow operand in memory.
+
+ * mips.md (cmpqi, cmphi): Patterns deleted.
+ (cmpsi, cmpsf, cmpdf): Change predicates to register_operand.
+
+ * cexp.y (rule for ?:): Result is unsigned if either operand is.
+
+ * expr.c (emit_push_insn): If PARTIAL > 0, load the partial regs
+ at the end, in case the rest of the push does a function call.
+
+ * reload1.c (alter_frame_pointer_addresses):
+ After altering a PLUS, re-fetch CODE before scanning subexps.
+
+ * stmt.c (assign_parms): Don't copy the arg pointer value
+ if it is also the frame pointer. If we do copy it,
+ inhibit REG_EQUIV notes for parms copied into pseudo regs
+
+ * integrate.c (copy_for_inline, copy_rtx_and_substitute):
+ Set up filename and lineno fields of copy of ASM_OPERANDS.
+
+Sat Jul 29 18:58:49 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * integrate.c (expand_inline_function): Handle struct-value-addr
+ passed in memory just like that passed in reg:
+ in either case, translate the pseudo-reg made in
+ expand_function_start.
+ (function_cannot_inline_p): Permit inlining in that case.
+ But reject it if using pcc-style return convention.
+
+ * stor-layout.c (layout_type): Consider STRICT_ALIGNMENT
+ for ARRAY_TYPE just as for RECORD_TYPE.
+
+Wed Jul 26 12:54:59 1989 Richard M. Stallman (rms at mipos3)
+
+ * cse.c (fold_rtx): If WIDTH is zero for binary operator,
+ look at the modes of the original operands.
+
+ * cse.c (cse_insn): Set prev_insn_explicit_cc0, for (set (cc0) INT).
+ (predecide_loop_entry): Likewise.
+ (fold_rtx): Look at it, for (if_then_else (cc0) ...).
+
+ * expr.c (expand_builtin): Pass back return value from
+ __builtin_saveregs.
+
+ * stmt.c (assign_parms): Allow arg pointer reg not to be fixed.
+ If it is not, copy it to a pseudo reg and use that later on.
+
+Tue Jul 25 15:42:04 1989 Richard M. Stallman (rms at mipos3)
+
+ * expr.c (expand_builtin): New builtin __builtin_classify_type.
+ * tree.h, c-decl.c: Additional support.
+
+ * flow.c (mark_used_regs): Treat arg pointer like stack pointer.
+
+ * expr.c (emit_library_call):
+ Pass (tree)0 as TYPE arg to FUNCTION_ARG, etc.
+
+Mon Jul 24 11:18:10 1989 Richard M. Stallman (rms at mipos3)
+
+ * loop.c (regs_match_p): Fix braino.
+
+ * integrate.c (copy_for_inline, copy_rtx_and_substitute):
+ Make ASM_OPERANDS constraint vector be shared like operand vector.
+
+ * xm-iris.h: New file.
+
+ * Makefile (stage4): New target.
+
+ * gnulib2.c (badd, bsub, bmul, bdiv): If want long value from
+ arithmetic, widen the operands first.
+ (__div_internal aka bdiv): Rename to __bdiv.
+
+ * sparc.md (seq combination patterns): Fully initialize cc_status.
+
+ * expr.c (emit_push_insn): Like July 19 change, for BLKmode.
+
+ * stmt.c (expand_function_end): Stack-restore for alloca
+ is now done after the return_label.
+
+ * loop.c (scan_loop): Set MAYBE_NEVER for conditional jump to loopbeg.
+
+ * integrate.c (copy_rtx_and_substitute): Allow mapping of hard regs.
+ (expand_inline_function): Always create parm_map.
+ Handle structure value that way if nec. even if no parms.
+ Otherwise, find the pseudo used in the function to hold the
+ structure address, and map it to a new pseudo.
+
+ * expr.c (expand_call):
+ Use mark_addressable to make FNDECL addressable.
+ * c-typeck.c (mark_addressable): No longer static.
+
+ * cse.c (cse_insn): Modify last change: don't canon_reg
+ for hard regs inside clobbers.
+
+ * expr.c (expand_assignment): ALIGN arg to store_field comes from
+ the structure, not from the value stored.
+
+Fri Jul 21 16:23:45 1989 Richard M. Stallman (rms at mipos3)
+
+ * stmt.c (warn_if_unused_value): Don't warn for a cast
+ around a MODIFY_EXPR.
+
+ * tm-hp9k320.h (PCC_STATIC_STRUCT_RETURN): Undefine it.
+ (CPP_PREDEFINES): Add some.
+
+ * combine.c (simplify_and_const_int):
+ Simplify (and (ashiftrt (zero_extend FOO) N) M).
+
+ * optabs.c (expand_binop): When widening,
+ for some operations we need not actually extend.
+
+Thu Jul 20 16:16:35 1989 Richard M. Stallman (rms at mipos3)
+
+ * Makefile (insn-emit.o): Depend on insn-codes.h.
+
+ * stmt.c (check_for_full_enumeration_handling):
+ Handle all cases for TYPE_NAME of enum type.
+
+Wed Jul 19 17:00:39 1989 Richard M. Stallman (rms at mipos3)
+
+ * fold-const.c (fold_convert): Don't fail to force_fit_type.
+
+ * expr.c (emit_push_insn): When pushing only part of scalar on stack,
+ adjust stack offset not to count the words not pushed.
+
+ * stmt.c (expand_function_end): Always put return structure address
+ in return register.
+
+ * c-typeck.c (process_init_constructor): Assume 0 for nameless field.
+
+ * recog.c (general_operand, memory_operand):
+ Check validity of mem address using the mode of the MEM.
+
+ * fixincludes: When calling egrep, use redirect, not -s.
+
+Tue Jul 18 11:18:55 1989 Richard M. Stallman (rms at mipos3)
+
+ * Makefile (bootstrap*): Pass value of libdir down.
+
+ * cse.c (cse_insn): Do canon_reg on any CLOBBERs and USEs.
+
+ * cse.c (cse_insn): Don't use no_labels_between_p to check
+ for jump to following label; find following label and compare.
+
+ * combine.c (try_combine): Don't substitute into subreg(x)=y
+ if modes of x and y are not tieable.
+
+ * out-i386.c (call_top_dead_p): Don't fail to check
+ the rtx code of the insns themselves.
+
+ * i386.md (tstsf, tstdf): Don't discard TOS if not dead.
+
+ * stupid.c: Don't use regs with PRESERVE_DEATH_INFO_REGNO_P
+ for pseudos which live across jumps or labels.
+ (stupid_life_analysis): Update last_jump_suid, last_label_suid.
+ (stupid_mark_refs): Use those to set reg_crosses_blocks.
+ (stupid_find_reg): Check that data, passed from stupid_life_analysis.
+
+ * toplev.c (main): Avoid using caddr_t.
+
+ * mips.md (inverted bgeu peephole): Typo in opcode.
+
+Mon Jul 17 12:29:45 1989 Richard M. Stallman (rms at mipos3)
+
+ * i386.md (mulb patterns): Turned off due to assembler bug.
+
+ * rtl.c (read_name): Use 0, not NULL, for character.
+
+ * alliant.md (movqi): Typos in mov opcodes.
+
+ * tm-sparc.h, tm-spur.h (CONST_DOUBLE_OK_FOR_LETTER_P):
+ Use CONST_DOUBLE_LOW, etc.
+
+ * stmt.c (expand_function_end): Check value of EXIT_IGNORE_STACK,
+ not just whether defined.
+
+ * i386.md (seq, etc.): New patterns.
+ * expr.c (do_store_flags): If result is wrong mode,
+ ensure rest of bits are cleared.
+ Before storing low part of TARGET, emit a CLOBBER for it.
+
+ * i386.md (load address): Use an immediate add if possible.
+
+ * i386.md (ashlsi3): Don't generate leal; shift is faster.
+
+ * Now struct_value_rtx is 0 to treat it as a parm.
+ * expr.c (expand_call): Implement that.
+ * integrate.c (expand_inline_function): Don't freak out.
+ * tm-apollo68.h (STRUCT_VALUE): Make it 0.
+
+ * On 386, called function must pop the structure value address.
+ * tm-i386.h (STRUCT_VALUE): Don't change this.
+ Address is now pushed but not counted as a parm.
+ * out-i386.c (function_epilogue): Use ret $4 to pop that address.
+ * output.h: Declare the current_function_... variables.
+ * final.c: Include output.h.
+
+ * varasm.c (make_decl_rtl): Insert missing `else', validating reg decl.
+
+Fri Jul 14 14:12:17 1989 Richard M. Stallman (rms at mipos3)
+
+ * out-sparc.c, out-spur.c (output_move_double):
+ Fixed typo, addreg0 => addreg1.
+
+ * c-decl.c (lang_decode_option): Handle -fshort-enums.
+ (finish_enum): In that case, give enum minimum number of bytes.
+ * toplev.c (main): Default flag_short_enums.
+ * toplev.c, flags.h (flag_short_enums, flag_signed_char):
+ Define those flags here, not in c-decl.c and c-tree.h.
+
+ * i386.md (mulqi3, umulqi3): New patterns.
+
+ * c-convert.c (convert_to_integer): Tighter restrictions on
+ distributing truncation through max, min, and multiplication.
+ If operands were extended from unsigned, make the operation
+ unsigned.
+
+ * cccp.c (main): Fix bug where #include <...>, when -I- was used,
+ failed to search standard dirs and/or searched some dirs
+ intended only for #include "...".
+
+ * tm-mips.h (FUNCTION_PROLOGUE,FUNCTION_EPILOGUE):
+ Increment push_loc after store or load, not before.
+
+Thu Jul 13 11:24:30 1989 Richard M. Stallman (rms at mipos3)
+
+ * emit-rtl.c (add_insn_after): Don't update last_insn
+ if insn is in a sequence. Instead, update end of sequence.
+
+ * stmt.c (fixup_var_refs): Update end of stacked sequence.
+
+ * stmt.c (expand_function_start): Set result rtl before assign_parms.
+
+ * optabs.c (emit_unop_insn): Set PREV_INSN after preliminaries.
+
+ * stmt.c (warn_if_unused_value): Do CONVERT_EXPR like NOP_EXPR.
+
+ * stmt.c (expand_function_start): Make sure parm_birth_insn
+ is a NOTE.
+
+ * Makefile (clean): Delete tmp-insn-*.
+
+Wed Jul 12 14:24:12 1989 Richard M. Stallman (rms at mipos3)
+
+ * i386.md (mulqi3): Restrict operand 2 to `q' reg.
+
+ * reload1.c (choose_reload_regs): Check HARD_REGNO_MODE_OK
+ for regs to be inherited.
+ Also check HARD_REGNO_MODE_OK at end for modes of both
+ reload_in and reload_out as well as reload_mode.
+
+ * Makefile (maketest): Update for config subdir.
+
+Tue Jul 11 16:29:57 1989 Richard M. Stallman (rms at mipos3)
+
+ * integrate.c (copy_decl_tree): Copy TREE_USED of each LET_STMT.
+
+ * make-cc1.com: Changes by Angel Li.
+ Define variables CC, CFLAGS, LDFLAGS, LIBS.
+ Use LIBR library, not LIB. Specify a /INC in CFLAGS.
+ Use MCR to run the gen* files. Add some comments.
+ * make-cccp.com: Similar.
+ * config-gcc.com: New file.
+
+ * stmt.c (assign_parms): Compute parm alignment from passed type.
+
+ * c-typeck.c (actualparameterlist): Instead of truncating
+ and then promoting for PROMOTE_PROTOTYPES, go straight to int.
+
+ * c-parse.y (setspecs): Save old current_declspecs on a stack.
+ (decl, component_decl): Restore from that stack.
+
+Wed Jul 5 15:01:00 1989 Richard Stallman (tiemann at yahi)
+
+ * tm-aix386.h, xm-aix386.h: New files.
+
+ * loop.c (check_dbra_loop): Handle either test or compare
+ for insn two before loop end; detect and reject anything else.
+
+ * expr.c (expand_call, expand_builtin): If alloca is done,
+ set current_function_calls_alloca.
+ * stmt.c (expand_function_end): If so, generate code to save and
+ restore the stack pointer, if not EXIT_IGNORE_STACK.
+
+ * ns32k.md (movsi): Fixes for moving from fp or sp.
+
+ * tm-mips.h (ASM_OUTPUT_ASCII): Start new .ascii every 256 chars.
+
+Tue Jul 4 11:01:00 1989 Richard Stallman (tiemann at yahi)
+
+ * reload1.c (choose_reload_targets): Don't depend on
+ reload_spill_index when cancelling invalid inheritance.
+ Also, abort if trying to preserve death info
+ on a spill reg used in operand addressing.
+
+ * fold-const.c (fold): Don't fold "foo"[n] here.
+ * expr.c (expand_expr): Do it here.
+ Handle wide strings correctly.
+
+ * i386.md (movsf,movdf): Disallow mem-mem moves.
+ Enable mem-to-reg moves.
+
+ * c-decl.c (finish_{struct,enum}): Warn if inside parm decls.
+ (in_parm_level_p, declare_parm_level): Record when inside.
+ * c-parse.y (parmlist, parmlist_or_identifiers): Call
+ declare_parm_level.
+
+ * c-decl.c (parmlist_tags_warning): Revise warning message text.
+
+ * tm-hp9k320.h (ASM_SPEC): Pass -V switch to assembler.
+
+ * tm-sun386.h (ASM_START_FILE): Truncate filename to 14 chars.
+
+ * c-typeck.c (decl_constant_value): Use only literal values.
+
+Sat Jul 1 17:29:54 1989 Richard Stallman (tiemann at yahi)
+
+ * integrate.c (copy_rtx_and_substitute): Don't make nested SUBREGs.
+
+ * stmt.c (expand_function_start): Set new global
+ current_function_returns_pointer.
+
+ * stmt.c (get_frame_size): Return the size, not the offset.
+ * integrate.c (expand_inline_function): When setting FP_DELTA,
+ compensate for this change.
+ * tm-alliant.h,tm-mips.h,tm-sparc.h,tm-tahoe.h
+ (FUNCTION_PROLOGUE,FUNCTION_EPILOGUE): Compensate.
+
+ * out-mips.c (function_arg): Return 0 for BLKmode.
+
+ * tm-mips.h (FUNCTION_INCOMING_ARG): Delete; no register windows.
+ * out-mips.c (function_inarg): Delete; no longer used.
+
+ * mips.md (addsi3): Use register_operand for operands 0,1.
+ (load address): New pattern, following movsi.
+ (fix_trunc*): Use trunc insn, not cvt.
+ (cmpfs + bgt peephole): Operands were backwards in template.
+
+ * gcc.c (main): Record in explicit_link_files which input files go
+ straight to linker. If linker is not run, complain about them.
+ (execute): Increment execution_count, to show we were called.
+
+ * gcc.c (validate_all_switches): Check ASM_SPEC, CC1_SPEC, etc.,
+ so we find all switches that could be valid.
+
+ * varasm.c (output_constructor): Position fields according to
+ DECL_OFFSET; don't try to compute alignment here.
+
+ * tm-sparc.h (PCC_BITFIELD_TYPE_MATTERS): Define this.
+
+ * reload1.c (emit_reload_insns): Fix stupid error in last change.
+
+ * c-decl.c (duplicate_decls): If redeclaring builtin, give error is
+ type mismatched; otherwise warn only if -W.
+
+ * jump.c (jump_back_p): Verify that PREV is not null.
+
+Mon Jun 26 13:50:28 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c (choose_reload_regs): If number of reloads needing
+ spill regs exceeds n_spills, don't inherit any reloads.
+
+ * sdbout.c (sdbout_record_type_name): Dumb error in last change.
+
+ * reload1.c (emit_reload_insns): Extend last change: don't use
+ equiv reg if reg is in use at same stage of insn, either.
+
+Sun Jun 25 00:00:56 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c (emit_reload_insns): Don't use an equivalent register
+ to reload from, if that register was used for reloading
+ earlier in this insn.
+
+ * sdbout.c (sdbout_record_type_name): Handle a TYPE_DECL as the
+ type name. Get rid of TYPE_TAG_NAME as separate macro.
+
+ * optabs.c (emit_cmp_insn): Args to memcmp are addresses, not blocks.
+
+ * reload1.c (choose_reload_regs): Typo, clearing reload_override_in.
+
+ * tm-i386.h: Add register classes SIREG and DIREG.
+ (enum reg_class, REG_CLASS_NAMES): Define class names.
+ (REGNO_REG_CLASS, REG_CLASS_CONTENTS): Define their contents.
+ (REG_CLASS_FROM_LETTER): Define letters `S' and `D'.
+
+Sat Jun 24 00:17:16 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (keep_next_level): New function.
+ (struct binding): New slot `keep' says make a LET_STMT for this level.
+ (pushlevel, poplevel): Implement that.
+ * c-parse.y (stmt exprs): Call keep_next_level.
+
+ * sdbout.c (plain_type_1): Handle REFERENCE_TYPE, METHOD_TYPE.
+ Correct for size less than 0.
+ (plain_type): Correct for size less than 0.
+
+ * global-alloc.c (mark_reg_set): For CLOBBERs, call mark_reg_clobber.
+
+ * reload1.c (order_regs_for_reload): Among regs explicitly used,
+ prefer those used less often.
+
+ * reload1.c (choose_reload_regs): If we find alternate place
+ to reload from, verify it after all reloads assigned.
+ New variable reload_override_in used for this.
+
+ * combine.c (record_dead_and_set_regs): Look inside SIGN_EXTEND and
+ STRICT_LOW_PART for place being set.
+ (subst): When using reg_last_set to find what a register contains,
+ verify the entire register was set.
+
+ * toplev.c (rest_of_decl_compilation): Report invalid register name.
+
+Fri Jun 23 13:19:41 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-hp9k3bsd.h: New file.
+ * config.gcc: New target hp9k320-bsd.
+
+ * gcc.c (record_temp_file): Don't add a name twice to one queue.
+
+ * stmt.c (expand_expr_stmt): Call warn_if_unused_value.
+ (warn_if_unused_value): Code extracted from expand_expr_stmt.
+ Recurse to handle COMPOUND_EXPR. Don't warn about COND_EXPR.
+
+ * tm-encore.h (DBX_REGISTER_NUMBER): Override tm-ns32k.h;
+ return operand unchanged.
+
+ * reload1.c (emit_reload_insns): Don't use recog_memoized
+ on an asm.
+
+ * jump.c (delete_insn): Update last_insn.
+ * emit-rtl.c (set_last_insn): New function.
+
+ * reload1.c (reload): Put a note at end of insn chain.
+
+ * gcc.c: Put cpp output of .S file into a .s file.
+
+Thu Jun 22 22:14:35 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * optabs.c (expand_binop, expand_unop): Emit queue before library call.
+ It is done within emit_library_call, and cse screws up if there is a
+ queued insn in the middle of a cse-able sequence.
+
+Wed Jun 21 11:57:22 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-mips.h (CPP_PREDEFINES): Define -Dunix.
+
+ * reload.c (combine_reloads): Combined reload needed for entire insn.
+
+ * c-parse.y (yylex): Braino checking for out-of-range escape seq.
+
+ * stor-layout.c (layout_union): Handle PCC_BITFIELD_TYPE_MATTERS.
+ (layout_struct): Don't let a bitfield cross the storage unit
+ of its type, if PCC_BITFIELD_TYPE_MATTERS.
+
+Tue Jun 20 00:03:48 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * varasm.c (get_or_assign_label): Let CONSTANT_ALIGNMENT specify
+ alignment of the constant.
+ CONSTANT_ALIGNMENT is a new optional macro.
+
+ * varasm.c (force_const_mem, get_or_assign_label):
+ Make buffer bigger.
+
+ * toplev.c (print_target_switch_defaults): New fn called for -version.
+
+ * toplev.c (compile_file): Detect error closing output file.
+
+ * stor-layout.c (fixup_unsigned_type): Don't shift by 32.
+
+ * stmt.c (emit_case_nodes): Pass UNSIGNEDP along to emit_cmp_insn.
+
+ * stmt.c (expand_end_case): If index is narrow and cannot be
+ directly compared, widen it just once.
+
+ * c-parse.y (yylex): Support multi-character constants.
+ Thorough rewrite of char constant parsing.
+
+ * c-decl.c (pushdecl): Replace local extern function decl with
+ previous global decl if latter is inline, or builtin, or has
+ more arg type info.
+
+ * hard-params.c (xmalloc): Define it, for alloca.c.
+
+ * tm-hp9k320.h (STANDARD_STARTFILE_PREFIX): Override -D in Makefile.
+
+ * expmed.c (store_fixed_bit_field): Avoid shift by 32.
+
+ * stmt.c (expand_function_start): Emit a NOTE_INSN_FUNCTION_BEG.
+ * final.c (final_scan_insn): For SDB output, do the
+ sdbout_begin_function at that note.
+
+ * reload1.c (choose_reload_regs): If a reload reg inherits
+ from a previous reload, verify safety after all reloads are assigned.
+
+ * c-decl.c (build_enumerator): Remove no-op casts.
+
+ * reload.c (find_reloads): If an earlyclobber operand matches
+ an input operand it is constrained to match, that's not a problem.
+ If an earlyclobber operand loses due to earlyclobber, its matching
+ input operand also loses.
+
+ * reload1.c (choose_reload_regs): Don't use result of find_equiv_reg
+ if that reg is used for reloading in an earlier part of the insn.
+
+ * cse.c (fold_rtx): If WIDTH is 0, don't try sign-extending ARG0, ARG1.
+
+ * Makefile (hard-params*): Use $(OLDCC).
+
+ * c-typeck.c (c_alignof): No warning for -pedantic.
+
+ * c-parse.y (readescape): Don't have both error and warning
+ on one hex escape.
+
+ * c-parse.y (yylex): Treat vertical tab as white space.
+ (skip_white_space): Likewise.
+
+ * c-parse.y (datadef): If pedantic, warn for stray semicolon.
+
+ * expr.c (expand_increment): Pass accurate unsignedp arg
+ to expand_binary_op.
+
+Mon Jun 19 13:36:20 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * config.gcc (news, news-gas): Use xm-m68k.h.
+
+ * final.c (output_asm_label, output_addr_const): Make buf bigger.
+
+ * cexp.y (main): Handle EOF on input.
+ (lookup, warning): Provide as a dummy.
+ (is_idchar, is_idstart): Declare as unsigned char.
+
+ * cexp.y (parse_escape): Use TARGET_NEWLINE, etc., as values.
+ Support hex escapes. Warn if octal or hex escape doesn't fit in char.
+
+ * cexp.y (yylex): Sign-extend char constants if appropriate.
+
+ * genemit.c: Make insn-emit.c include insn-flags.h.
+
+ * gcc.c: Move record_temp_file past page which declares vflag.
+
+ * integrate.c (expand_inline_function): If copying an insn with
+ a REG_EQUIV note, make a similar note.
+
+ * Allow reload regs to be reused for parts of an insn.
+ * reload.c (find_reloads): Classify each reload for which part
+ of the insn it is needed in.
+ (find_reloads_address, etc.): Pass down the overall operand
+ that this is part of, to record it on address reloads.
+ (push_reload): Record that for each reload.
+ * reload1.c (reload): Compute maximum needs of any part of the insn.
+ (choose_reload_regs): Part of old choose_reload_targets.
+ Hairier criteria for inheriting reloads and for which ones are
+ available for the next insn to inherit.
+ (emit_reload_insns): The rest of old choose_reload_targets.
+ Emit reload insns in proper order according to where they are needed.
+ * Record `reload_reg_in_use' separately for each part of the insn.
+ (mark_reload_reg_in_use): New function.
+ (reload_reg_free_p, reload_reg_free_before_p): New functions.
+ (reload_reg_reaches_end_p): New function.
+
+ * expr.c (expand_expr): Emit queue in X+=(Y?Z:A) optimization.
+
+ * rtlanal.c (rtx_equal_p): Check vectors have same length.
+
+Sun Jun 18 12:16:14 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stmt.c (expand_expr_stmt): Maybe warn if top-level operator
+ makes an unused result.
+
+ * gcc.c (delete_temp_files, delete_failure_queue):
+ If -v, report failures in unlink.
+
+ * Makefile (includes): New target to run fixincludes.
+ (install): Swap arms of if-statement.
+
+Sat Jun 17 12:41:53 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stor-layout.c (layout_union): Arg to error_with_decl was missing.
+
+ * ns32k.md (movsf): Use CONST_DOUBLE_LOW to extract from CONST_DOUBLE.
+
+ * loop.c (consec_sets_giv): Change type of force, force2.
+
+ * combine.c (dump*): Declare arg as FILE*.
+
+ * Makefile (clean): Delete hard-params.
+
+ * flow.c (life_analysis): Use a special obstack for the temporary
+ regsets.
+
+ * m68k.md (clr pattern): On 68000, use moveq to clear data reg.
+
+ * gvarargs.h: File varargs.h renamed.
+ The old name conflicted with <varargs.h>, now that -I. is used.
+ * tree.c, expr.c, emit-rtl.c: Change #include commands.
+ * Makefile (install): Install gvarargs.h under name varargs.h.
+ * gcc.c: Include gvarargs.h, not system's varargs.h.
+
+ * Makefile: Use -I$(srcdir) before -I$(srcdir)/config.
+ * config/tm.h: Deleted; didn't work if config was a symlink.
+
+ * cse.c (cse_insn): Record location of inner_dest
+ so it can be replaced properly if a new MEM rtx is made.
+
+Fri Jun 16 14:17:20 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * make-cc1.com: Compile and link rtlanal.c.
+
+ * c-typeck.c (build_array_ref): Call fold on the array ref.
+ * fold-const.c (fold): Simplify array ref of string constant.
+
+ * stmt.c (expand_asm_operands): Fix error message.
+
+ * Makefile (gnulib2): Remove old members before compiling new.
+ Fix stupid errors.
+ * gnulib2.c (__cmpdi2, __ucmpdi2): Typos in names of interface unions.
+
+ * genconfig.c (main): Don't write MAX_CLOBBERS_PER_INSN; obsolete.
+ Add 3 to MAX_RECOG_OPERANDS.
+
+ * cse.c (fold_cc0): Extra arg specifies machine mode.
+ Callers changed.
+ (cse_insn): Record original mode of each src for this purpose.
+
+Thu Jun 15 12:35:18 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gnulib2.c (_cmpdi2, _ucmpdi2): Moved here from gnulib.c.
+ Use long long for argument type.
+
+ * rtlanal.c (may_trap_p): Moved here from loop.c.
+ Return 1 for division by explicit zero.
+
+ * reload1.c (eliminate_frame_pointer, alter_frame_pointer_addresses):
+ Rerecognize insns which are changed by this.
+
+ * i386.md (call_value): Don't return prematurely.
+
+ * alliant.md (movqi): Handle moving Aregs to mem and vice versa.
+ (bftst -> btst): Restrict to bitpos less than 8
+ so operand may be non-offsettable.
+ (nop): New pattern.
+ (return): Was disabled; now deleted.
+ * tm-alliant.h (PRINT_OPERAND_PUNCT_VALID_P): Define it.
+ * out-alliant.c (output_btst): Same change as in out-m68k.c
+
+ * alliant.md, out-alliant.c: Offsetable -> offsettable.
+
+ * c-parse.y (rule for stmt_exprs): Make the LET_STMT volatile.
+
+ * c-decl.c (duplicate_decls): Don't save inline function data
+ from previous definition if a new *definition* is seen.
+
+ * integrate.c (access_parm_map): Handle subregs and constants.
+
+ * stmt.c (expand_return): Don't crash if DECL_RTL (DECL_RESULT()) is 0.
+
+ * tm-tahoe.h (LONGJMP_RESTORE_FROM_STACK): Define it.
+
+ * tm-mips.h (CONSTANT_P): Deleted; duplicates rtl.h.
+
+Fri Jun 9 01:39:30 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Makefile (float.h): Avoid using $(MAKE).
+
+ * Don't cram two things into STMT_BODY of a LET_STMT.
+ * tree.h (struct bind_stmt): New field, subblocks.
+ (STMT_SUBBLOCKS): New macro to access it.
+ * print-tree.c (walk): Print new field.
+ * tree.c (build_let_stmt): Store the old BODY arg into subblocks field.
+ * c-parse.y (stmt expr rule): Put rtl expr alone into body field.
+ * dbxout.c (dbxout_block): Recurse on subblocks, not body.
+ * sdbout.c, symout.c: Likewise.
+ * integrate.c (copy_decl_tree): Likewise.
+ * stmt.c (setjmp_protect, uninitialized_vars_warning): Likewise.
+ * expr.c (expand_expr): For LET_STMT, simply use its body.
+
+ * machmode.def: Add sixth arg to each entry.
+ * tree.h, rtl.h, rtl.c: Add arg to DEF_MACHMODE.
+ * rtl.h (GET_WIDER_MODE): New macro; table in rtl.c.
+ * expr.c (expand_expr): Use that for widening multiply.
+
+ * stmt.c (fixup_var_refs_1): When converting MEM to QImode for
+ bit field, adjust the address if possible to make bitpos
+ less than 8.
+ * m68k.md (bftst -> btst): Restrict to bitpos less than 8
+ so operand may be non-offsettable.
+
+ * cccp.c (do_line): Accept and pass on 3rd arg for enter or leave file.
+
+ * out-m68k.c (output_btst): Handle COUNT bigger than size of unit.
+
+ * cccp.c (CHECK_DEPTH): Macro to detect instack overflow.
+ (finclude, macroexpand, expand_to_temp_buffer): Use that.
+
+ * cccp.c (rescan): Don't check for disabled macro if traditional.
+ (macroexpand): Don't disable macro if traditional.
+
+ * sdbout.c (sdbout_one_type): Take out last change; assembler barfs.
+
+ * c-parse.y (maybe_attribute): Eliminate #-syntaxes.
+ Make ATTRIBUTE the name for __attribute.
+
+ * c-parse.gperf: Add __attribute{,__} and __signed{,__}.
+ * c-parse.y: Install results of that change.
+
+ * Fix bug in sizeof ({...}).
+ * c-decl.c (poplevel): Set TREE_USED. Return the LET_STMT.
+ * c-parse.y (stmt-expr rule): Put the RTL_EXPR in the LET_STMT,
+ clear its TREE_USED, and use it as the result.
+ * expr.c (expand_expr): Allow LET_STMT as an expr.
+ Set its TREE_USED and expand the TREE_VALUE of its body.
+ * dbxout.c (dbxout_block): Ignore LET_STMT if TREE_USED not set.
+ * sdbout.c, symout.c: Likewise.
+
+Thu Jun 8 00:06:36 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-parse.y (yylex): Extend ERANGE-inhibitor for 0.0
+ to 0.0e0 as well.
+
+ * flow.c (life_analysis): Prevent allocation of regs live at setjmp
+ on certain machines. Controlled by LONGJMP_RESTORE_FROM_STACK.
+ Sets reg_live_length to -1.
+ * local-alloc.c (block_alloc): Be prepared for that.
+ * tm-vax.h (LONGJMP_RESTORE_FROM_STACK): Define it.
+
+ * gnulib2.c (all interfaces): Declare args and values as long long,
+ and split them using unions.
+
+ * loop.c (check_dbra_loop): Don't reverse loop if there are two
+ refs to varying addresses. Consider foo[i] = foo[i-1].
+ (count_nonfixed_refs): Subroutine to count them.
+
+ * cexp.y: Distinguish signed and unsigned.
+ An integer value is now represented by a struct.
+ All rules for arithmetic changed.
+ (yylex): Adapt to change in yylval data type.
+
+ * limits.h (LONG_MIN): Make sure it's a signed long.
+
+ * sdbout.c (sdbout_one_type): Output types of fields first,
+ if they are structs. Don't go through pointers.
+ (sdbout_field_types): Subroutine for that
+
+Wed Jun 7 13:00:44 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * fixincludes: Switch to /usr/include before doing vuid_event.h.
+ Use $2 as output directory for sed.
+
+ * tm-i386.h (FUNCTION_PROFILER): Put counter address in %edx.
+ * tm-i386v.h (LIB_SPEC): Use -L/usr/lib/libp if profiling.
+
+ * expr.c (expand_increment): Typo testing for BImode component.
+
+ * convex changes from csmith:
+ * tm-convex.h: use EXTRA_SECTIONS to do .bss.
+ out-convex.c: set_section, align_section are now unused.
+ * convex.md: add pattern to pick an A-reg destination for sums
+ whose source involves a dedicated A reg (frame or arg pointer)
+ * convex.md: immediate and, or, xor instructions store a 32-bit
+ result. Fix instructions that assumed it was 64.
+
+ * mips.md (probe): New pattern to create stack space.
+
+ * Makefile (float.h): Ignore errors from hard-params.
+ Specify ./ to run it.
+
+Tue Jun 6 15:45:27 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * out-tahoe.c: Rename `offsetable' to `offsettable'.
+
+ * tahoe.md (nop): New pattern.
+
+ * i386.md (umul...): Constrain operand 1 as `0', not `a'.
+ `a' sometimes wanted two a-regs for operands 0 and 1.
+
+ * cccp.c: Forward-declare some structs.
+
+ * c-decl.c: Rearrange fcn fwd decls and struct decls.
+
+ * expr.c: Move some fcn fwd decls after structs their args use.
+ * genpeep.c, genextract.c: Likewise.
+
+ * loop.c: Forward-declare some structs.
+
+ * stmt.c: Move decls of structs before those of static functions.
+
+ * loop.c (strength_reduce): Delete extra arg to check_eliminate_biv.
+
+ * integrate.c (expand_inline_function): Supply missing arg
+ to convert_to_mode.
+
+ * gcc.c (handle_braces): Supply missing arg to do_spec_1.
+
+ * explow.c (lookup_static_chain): Accept a context arg.
+
+ * expmed.c (store_split_bit_field): Pass ALIGN arg
+ to extract_fixed_bit_field.
+
+ * expr.c (expand_assignment): Convert TYPE_ALIGN to bytes.
+ (store_constructor, expand_expr): Likewise.
+
+ * tm-m68k.h: NO_ADDSUB_Q conditionals turn off all addq, subq insns.
+ (Fully supported only with MOTOROLA and HPUX_ASM flags.)
+
+ * jump.c (do_cross_jump): Don't die if LABEL is 0.
+
+ * tm-mips.h (PRINT_OPERAND_PUNCT_VALID_P): New macro.
+ * tm-iris.h: New file. Unsplit lines accidentally split.
+
+Mon Jun 5 15:39:30 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * integrate.c (output_inline_function): Call init_function_start,
+ not expand_function_start.
+ * emit-rtl.c (restore_reg_data): No need to init reg_rtx_no.
+
+ * stmt.c (init_function_start): Set current_function_returns_struct.
+
+ * rtlanal.c (reg_set_between_p): New fn analogous to reg_used_between_p
+ * loop.c (strength_reduce): Reject biv initial value which is altered
+ subsequently before actual loop start.
+
+ * rtlanal.c: New file split out from rtl.c.
+ Has things not used in the gen files.
+
+ * loop.c (strength_reduce): Reject biv initial value in a hard reg
+ clobbered by an intervening function call.
+
+ * tree.c (get_identifier): New flag needed to enable id-clash warnings.
+ (start_identifier_warnings): Set that flag.
+ * c-decl.c (init_decl_processing): Call that, after making built-ins.
+
+Sat Jun 3 14:41:34 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * final.c (final_scan_insn): No basic block profiling at jump tables.
+
+ * stmt.c (expand_decl): Probe the stack to make pages exist.
+ * expr.c (expand_builtin): Likewise, for alloca.
+
+ * move-if-change: Specify /bin/sh.
+
+ * tm-ns32k.h (INDIRECTABLE_2_ADDRESS_P): Don't accept PLUS
+ with constant operands but not inside CONST.
+
+ * integrate.c (output_inline_function, save_for_inline):
+ Save stack_slot_list, and restore it for actual output.
+ * emit-rtl.c (gen_inline_header_rtx): New arg for this.
+
+ * emit-rtl.c (restore_reg_data): Initialize reg_rtx_no.
+ (restore_reg_data_1): Handle reg_rtx_no jumping past
+ reg_pointer_flag_length.
+
+ * reload1.c (alter_reg): Do nothing if regno_reg_rtx has 0.
+
+ * integrate.c (copy_rtx_and_substitute): Typos for stack parm
+ addresses in PLUS case.
+
+ * genoutput.c (gen_insn, gen_peephole): Make output_n fns static.
+ (output_prologue): Use new macro DEFAULT_MACHINE_INFO if defined.
+
+ * tree.h (enum machine_mode): Define MAX_MACHINE_MODE as in rtl.h.
+
+Fri Jun 2 15:40:47 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (do_include): A file included via a system header file
+ counts as a system header file for -M.
+
+ * gnulib2.c: Support boolean ops and shifts.
+
+ * loop.c (emit_iv_inc): Use emit_iv_init_code.
+
+ * rtl.h (CONST0_RTX): Don't try to cast abort.
+
+ * tm-news.h (PRINT_OPERAND_ADDRESS): Fix typo `reg_name'.
+ Delete two garbage lines.
+
+ * loop.c (eliminate_biv): Use emit_iv_init_code to compute comparison
+ value. If value is constant, recognize the insn, and if that fails,
+ put the value in a register.
+
+Thu Jun 1 16:56:39 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * print-tree.c (dump): Don't die if rtx components are null.
+
+ * expmed.c (expand_mult_add): New fn to do A * X + B.
+ (make_tree): New subroutine.
+ * loop.c (emit_iv_init_code): Use that. Much simpler now.
+
+Tue May 30 17:20:40 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * fold-const.c (fold): Use TREE_SET_CODE to store in tree codes.
+
+ * tree.h (struct tree_common): Make `code' an unsigned int.
+ (TREE_CODE, TREE_SET_CODE): Put in casts.
+
+ * optabs.c (emit_cmp_insn): Supply all the args in recursive calls.
+
+ * toplev.c (report_error_function): Fix typo; METHOD_TYPE missing.
+
+ * fixincludes: Add code to make internal non-directory links.
+
+Mon May 29 21:36:28 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gcc.c (find_exec_file): Try both with and without machine_suffix.
+ (find_file): Use machine_suffix here too.
+
+Sat May 27 00:02:26 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload.c (decompose): OFFSET wasn't initialized.
+
+ * cse.c (cse_main): Assign monotonic cuids.
+ (make_regs_eqv, CHEAPER): Use cuids, not uids.
+ (cse_end_of_basic_block): Return a cuid, not a uid.
+
+ * expr.c (expand_builtin): For BUILTIN_SAVEREGS, range of regs
+ moved included one extra previous insn.
+
+ * emit-rtl.c (emit_line_note): Don't check -g here.
+ (emit_note): For line number when no -g, increment cur_insn_uid anyway.
+ * stmt.c (expand_start_case): Always output a NOTE_INSN_DELETED.
+
+ * loop.c (loop_optimize): Don't count line-number NOTEs for luids.
+ Prevents -g from affecting optimization decisions.
+
+Fri May 26 17:31:15 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * local-alloc.c (block_alloc): Don't count notes in insn_number.
+ Prevents -g from affecting order of allocation.
+
+Thu May 25 14:12:19 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * local-alloc.c (block_alloc): Clear full length of regs_live_at.
+
+ * ns32k.md (cmpsi): Make this the first cmp pattern.
+
+ * jump.c (do_cross_jump): Skip NOTEs while checking for existing label.
+
+ * cse.c (cse_insn): When no-oping a jump, decrement use count of label.
+ (cse_basic_block): If label use count is 0, go past it.
+
+ * integrate.c (access_parm_map): New fn, broken out of
+ copy_rtx_and_substitute, handles case of mem ref to stack arg.
+ (copy_rtx_and_substitute): Call it.
+ Also use it for address of a stack arg.
+
+ * gen*.c (fatal): Declare 1st arg as string.
+
+Wed May 24 00:13:36 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * optabs.c (init_optabs): Handle movdi and movdf insns.
+
+ * final.c (end_final): Realign locn ctr after outputting string.
+
+ * tm-sparc.h (LINK_SPEC): Link bb_link.o before standard lib.
+
+ * tm-sun386i.h (LINK_SPEC): Accept and ignore -sun386.
+
+ * gcc.c (find_exec_file): Use machine_suffix.
+ (process_command): Set that for -b option.
+
+ * integrate.c (function_cannot_inline_p): No size limit
+ for functions declared inline.
+
+ * loop.c (skip_consec_insns): New fn, skip several insns or libcalls.
+ (force_movables): New fn, part of scan_loop broken out.
+ (ignore_some_movables): New fn, ignore a movable whose insn
+ is within another movable's libcall.
+ (scan_loop): Call those three.
+ Don't handle m->consec for zero-extend movables, since always 0.
+
+Tue May 23 12:58:24 1989 Joe Weening (weening at gang-of-four.stanford.edu)
+
+ * config/alliant.md:
+ Removed operand classes 'x', 'y', 'G', 'H'.
+ Added "%." to many opcodes to simplify comparison with m68k.md.
+ Changed TARGET_68881 to TARGET_CE.
+ Changed floating-point insns to better describe the Alliant CE.
+ Most args to floating-point insns are now nonimmediate_operand.
+ Removed special insns for pushing doublewords onto stack.
+ Added non-CE versions of movsf and movdf to avoid using FP
+ registers in this case.
+ (float*i*f2): Don't allow immediate ops.
+ (sne): Fix typo, fsne => fsneq.
+ (call, call_value): Changed to always pop args from stack
+ upon return; this gives better code than before and conforms
+ to Alliant calling standard.
+ Incorporated some recent changes to m68k.md.
+
+ * config/out-alliant.c:
+ (regno_reg_class): Removed FPA reg classes.
+ (output_move_const_double): Function not needed, removed.
+
+ * config/tm-alliant.h:
+ Removed FPA registers and reg classes.
+ Target flags: changed TARGET_68881 to TARGET_CE, removed
+ TARGET_RTD, TARGET_REGPARM, TARGET_FPA.
+ Removed TARGET_CE test in several places since we need to
+ use FP regs even for non-CE programs.
+ (TARGET_VERSION, CPP_SPEC): Define for Alliant.
+ (CONDITIONAL_REGISTER_USAGE): Removed, not needed.
+ (FRAME_POINTER_REQUIRED): Defined.
+ (RETURN_POPS_ARGS): Defined.
+ (FUNCTION_VALUE, LIBCALL_VALUE, FUNCTION_VALUE_REGNO_P):
+ Use fp0 to return floating-point values.
+ (FUNCTION_ARG): Remove TARGET_REGPARM code.
+ (FUNCTION_ARG_PARTIAL_NREGS): Always 0.
+ (FUNCTION_PROFILER): Define for Alliant.
+ (FUNCTION_EPILOGUE): Remove use of rtd instruction.
+ Renamed CC_IN_68881 to CC_IN_FP.
+ (NOTICE_UPDATE_CC): Incorporate changes that were made
+ in tm-m68k.h.
+
+ * config/xm-alliant.h (LINK_SPEC): Pass -X to linker.
+
+Tue May 23 12:58:24 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * sdbout.c: Don't include c-tree.h.
+
+ * tree.c (build_index_type): Use sizetype for min and max values.
+ Convert maxval rather than clobbering it.
+
+ * tm-hp9k320.h: Finish unterminated comment.
+
+ * sdbout.c (sdbout_parms): Use gen_fake_label for anonymous parm.
+
+Sun May 21 12:58:06 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stmt.c (aggregate_value_p): New fn says whether expression is a type
+ that functions cannot return as a scalar.
+ (assign_parms, expand_function_start): Use that.
+ * expr.c (expand_call): Likewise.
+
+ * gcc.c (delete_failure_queue): New subroutine.
+ (delete_temp_files): No longer delete the failure queue.
+ (main): Delete failure queue after each failing compilation.
+
+Sat May 20 13:16:23 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * varasm.c (force_const_mem): New optional macro SELECT_RTX_SECTION.
+
+ * mips.md: Change %u0 to %:.
+ (movsi): Add constraint alternative accepting address arg.
+
+ * fold-const.c (mul_double): Special case for 2nd arg 2, 4, 8.
+ (combine): Special case shortcuts for plus, minus, mult, div.
+
+ * stmt.c (expand_function_start): Simplify hairy statement for 3B1.
+ * expr.c (expand_call): Likewise.
+
+ * math-68881.h: New file.
+
+ * m68k.md (movqi): Handle moving aregs to mem and vice versa.
+
+ * dbxout.c (dbxout_type): Don't test use_gdb_dbx_extensions
+ in cases that occur in C.
+
+ * stmt.c (expand_function_{start,end}): Make DECL_RESULT's rtl 0
+ when function returns no value.
+
+ * tree.c (build_decl): Initialize DECL_PRINT_NAME, DECL_ASSEMBLER_NAME.
+
+ * c-decl.c (store_parm_decls): Call init_function_start.
+
+Thu May 18 00:41:37 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stmt.c (expand_null_return_1): New arg USE_GOTO says jump to
+ return_label even if could otherwise use a return insn.
+ Make a return_label if we need one and don't have one already.
+ If have parm cleanups, always jump to cleanup_label.
+ (expand_null_return): Pass 1 for USE_GOTO if cleanups pending.
+ (expand_return): Set LAST_INSN if have local cleanups or parm cleanups.
+ Use that if jumping to tail-recursion label.
+ Optimization for returning a comparison is safe for local cleanups
+ but don't do it if there are parm cleanups.
+ Calling expand_null_return_1, pass 1 for USE_GOTO if local cleanups.
+ (this_contour_has_cleanups_p): New function.
+
+ * stmt.c (init_function_start): New function, beginning of
+ expand_function_start broken out.
+ Use DECL_PRINT_NAME to get function's name.
+ (expand_function_start): Now two args, function and PARMS_HAVE_CLEANUPS
+ Compute RETURN_LABEL sooner; make one if parm cleanups.
+ If parms have cleanups, put scalar return value in pseudo-reg.
+ Don't mark that pseudo with REG_FUNCTION_VALUE_P.
+ (expand_function_end): Simplify decisions about output of return_label
+ and return insn.
+ If DECL_RESULT is pseudo-reg, copy it to real return reg.
+
+ * stmt.c (expand_function_end): Handle ordinary struct values
+ like pcc, but only if unoptimized.
+ (expand_function_start): Make a return_label for ordinary struct value.
+
+ * stor-layout.c (layout_type): Handle METHOD_TYPE like FUNCTION_TYPE.
+ (layout_decl): Allow TYPE_DECL.
+
+ * stor-layout.c (layout_basetypes): Code for basetypes broken
+ out of layout_record. Sets the type size tentatively.
+ (layout_record): Start with that tentative size.
+ Also, don't do anything with CONST_DECL members.
+
+ * stor-layout.c (layout_union): Simpler error report for static memb.
+
+ * reload1.c (eliminate_frame_pointer): Reduce PUSH_ROUNDING
+ conditional to apply only to push instructions.
+
+ * expr.c (expand_call): Fix stupid errors handling MAX_PARM_BOUNDARY.
+ * stmt.c (assign_parms): Likewise.
+
+ * toplev.c (announce_function, report_error_function):
+ (error_with_decl, warning_with_decl): Use DECL_PRINT_NAME.
+
+ * toplev.c (compile_file): Subtract integration_time from parse_time.
+
+ * toplev.c (compile_file): Don't output read-only static variables
+ at end of compilation if address was not used.
+
+ * toplev.c (rest_of_compilation): Handle flag_syntax_only.
+
+ * toplev.c (main): Handle -g0 and -G0 options.
+ For -g and -G, set use_gdb_dbx_extensions.
+
+ * toplev.c (main): Set `progname'.
+ (pfatal_with_name, fatal_io_error, {error,warning}_with_file_and_line):
+ (sorry): Print value of `progname', not "cc1".
+
+ * tree.def: Delete FRIEND_DECL. Add PUSH_EXPR and POP_EXPR.
+
+ * tree.c (simple_cst_equal): Handle INDIRECT_REF.
+
+ * tree.c (lvalue_p): Handle METHOD_TYPE. Handle NEW_EXPR.
+
+ * tree.c (copy_list): New function.
+
+ * tree.h (struct tree_decl): New fields print_name and assembler_name.
+ (DECL_PRINT_NAME, DECL_ASSEMBLER_NAME): New accessors.
+
+ * c-decl.c (LONG_DOUBLE_TYPE_SIZE): New compilation parameter.
+
+Wed May 17 22:07:17 1989 Randall Smith (randy at apple-gunkies.ai.mit.edu)
+
+ * dbranch.c (emit_delay_sequence): Reset insn code to -1 when
+ turning insn into a sequence so that it won't think that it matches
+ something in the md file.
+
+ * dbranch.c (insn_eligible_p): Call refers_to_regno_p with a
+ non-zero range.
+
+ * dbranch.c (pnote): Modified to make sure instruction clobbered
+ register is a set, rather than, say, a clobber.
+
+Wed May 17 14:01:20 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * sdbout.c (sdbout_parms): Handle parm with no name.
+
+ * loop.c (combine_movables): Test for overlap of zero-extend regs
+ was screwed up.
+
+ * c-typeck.c (c_sizeof{,_nowarn}): Convert from bytes to chars,
+ since c defines sizeof (char) as 1.
+ (pointer_int_sum, pointer_diff): Use c_sizeof{,_nowarn}.
+
+Tue May 16 16:27:32 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c (choose_reload_targets): Don't reuse regs
+ mentioned in reload_reg_rtx.
+
+ * tm-tahoe.h, tahoe.md, out-tahoe.c, xm-tahoe.h: New files.
+
+Mon May 15 16:25:12 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * fixincludes: Exit with explicit status 0 at end.
+ cd to /usr/include before cd to subtree root in case of relative link.
+ Create dir $LIB earlier.
+ When checking for a link, treat .. like an absolute target.
+
+ * symout.c (symout_block_symbols): Give every local decl a typespec.
+ * cexp.y (parse_number):
+ * flow.c (life_analysis, dump_flow_info):
+
+ * loop.c (consec_sets_invariant_p): Logic error accepted consec sets
+ of which only one was invariant.
+
+ * expr.c (expand_expr): Use no subtargets inside loops.
+ * stmt.c (inside_loop): New function.
+
+Sun May 14 00:11:07 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tree.h: Declare long long types.
+
+ * c-parse.y (combine_strings): Make string contents saveable.
+
+ * tree.c (savealloc): New function.
+
+ * m68k.md (movdi): % missing in fmove%.d.
+
+ * c-parse.y (yylex): Detect overflow past 64-bits.
+ Detect specially numbers not fitting in signed long long.
+
+Sat May 13 13:16:05 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c (alter_frame_pointer_addresses): Preserve volatility.
+
+ * varasm.c (output_constructor): Die if BITS_PER_UNIT is too big
+ for this function to work.
+
+ * genpeep.c (match_rtx): For match_operator, match the operands, too.
+
+ * varasm.c (output_constant): Use ASM_OUTPUT_DOUBLE_INT for DImode.
+
+ * stor-layout.c (make_signed_type, make_unsigned_type):
+ (fixup_unsigned_type): Use HOST_BITS_PER_INT.
+
+ * stor-layout.c (layout_type): Use TFmode if appro.
+
+ * optabs.c (emit_cmp_insn): Use mode sizes to check cmpstrqi, cmpstrhi.
+
+ * c-typeck.c (get_floating_type): Compare MODE against modes of types.
+ (signed_type, unsigned_type, signed_or_unsigned_type, type_for_size):
+ Handle long long types.
+ (digest_init): Don't assume width of `char' is BITS_PER_UNIT.
+
+ * c-parse.y (yylex): For truncating chars, use width of `char' type.
+ Allow `ll' in int constants and make long long.
+ Also make long long if constant won't fit in an int.
+
+ * c-decl.c (SHORT_TYPE_SIZE): Round up when dividing.
+
+Fri May 12 22:36:21 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * real.h: Allow multiple inclusion.
+
+ * tm-sun386i.h (DBX_REGISTER_NUMBER): Bizarre renumbering.
+
+Thu May 11 00:36:21 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * fixincludes: Fix non-ansi declaration of sprintf in X11/Xmu.h
+
+ * c-parse.y (stmt from expr): Do default conversion if useful
+ for sake of ({...}).
+
+ * sparc.md (andcc recognizer): Operand missing in subreg.
+
+Wed May 10 17:20:38 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * rtl.c (read_name): Error if name is missing.
+ (dump_and_abort): Don't print char args if -1.
+
+ * i386.md (umulqihi3): Operand numbers were missing.
+
+ * reload1.c (choose_reload_targets): Allow spill reg in find_equiv_reg
+ if it's free and correct class.
+
+ * cse.c (canon_hash): Handle empty strings.
+
+ * cccp.c (macroexpand): Newline newline treated like real white space
+ when stringifying.
+
+ * Rename *offsetable* to *offsettable*.
+
+Tue May 9 22:54:58 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (finish_type): Layout any variants of the type.
+
+Tue May 9 12:30:28 1989 Randall Smith (randy at apple-gunkies.ai.mit.edu)
+
+ * final.c (final_scan_insn, final): Added an argument to
+ final_scan_insn to disallow peephole processing (to turn it off
+ during delayed branch scheduling).
+
+ * final.c (final_scan_insn): Made insn not matching any MD rtl a
+ criteria for delayed branch case. Moved delayed branch case to just
+ before real insn recognition to reduce the number of insns on which
+ recog_memoized is called.
+
+Mon May 8 15:02:42 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * fixincludes (LIB): Allow overriding.
+
+ * cccp.c: Don't search /usr/include/CC by default.
+
+Mon May 8 13:09:21 1989 Randall Smith (randy at apple-gunkies.ai.mit.edu)
+
+ * print-tree.c (dump): Fixed typo; IDENTIFIER ==> IDENTIFIER_NODE.
+
+Sun May 7 12:44:53 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * print-tree.c (dump): TYPE_NAME may be IDENTIFIER or TYPE_DECL.
+
+Sat May 6 00:13:47 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tree.def: Define EXACT_DIV_EXPR, for when remainder known as 0.
+ * fold-const.c (combine, fold, div_and_round_double): Handle new code.
+ * expr.c (expand_expr): Likewise.
+ * c-typeck.c (pointer_diff): Use EXACT_DIV_EXPR.
+
+ * integrate.c (expand_inline_function): Use size of passed type
+ for allocating stack slot with that type.
+
+ * c-parse.y (maybe_attribute, attribute*): New syntax for Apollos.
+ These tokens currently not generated.
+
+Fri May 5 18:43:01 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * toplev.c [USG]: Undefine FLOAT for sake of sys/param.h on hpux.
+
+ * optabs.c (expand_binop): If backtracking, don't delete insns made
+ for -fforce-mem.
+
+Thu May 4 01:57:23 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload.c (find_reloads): Don't compare an earlyclobber operand
+ with itself.
+
+ * reload.c (immune_p): Constants and stack slots don't overlap.
+
+ * Put no-ops in front of loops and labels,
+ to prevent confusion in the debugger.
+ * c-parse.y (loops and labels): Call emit_nop.
+ * stmt.c (emit_nop): New function--sometimes emit a no-op.
+ * *.md (nop): New insn.
+
+ * expr.c (expand_call): Typo in arg to FIRST_PARM_CALLER_OFFSET.
+
+Wed May 3 01:34:58 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * loop.c (scan_loop): Scanning around end of loop
+ should not set maybe_never.
+
+ * Rename SELECT_VARIABLE_SECTION to SELECT_SECTION.
+ * varasm.c (get_or_assign_label): Use SELECT_SECTION if defined.
+ * varasm.c: Use EXTRA_SECTION_FUNCTIONS if defined (new macro).
+
+ * mips.md: Change %u to %u0 to avoid error check.
+
+ * tm-mips.h (TARGET_VERSNUM): Inc. to 1 08.
+ (TARGET_VERSION): Change strings.
+ (AL_DEBUG): Don't define it.
+ (HARD_REGNO_MODE_OK): Add some casts to int.
+ (STACK_ARGS_ADJUST): Name was misspelled.
+ (PRINT_OPERAND_ADDRESS): Just abort for MEM, POST_INC, etc.
+ (EXTRA_SECTIONS, SELECT_VARIABLE_SECTION, SELECTORS_EXTRA_SECTIONS,
+ SELECT_VARIABLE_CONST_SECTION): New macros.
+ (ASM_FILE_END): Change function name.
+ * out-mips.c (function_arg_advance): Delete debugging printfs.
+ (function_inarg, function_arg): Likewise.
+ (compare_collect, compare_restore): Add some.
+
+ * reload1.c (reload): Fix handling of caller_save_needed.
+
+ * stmt.c (expand_function_start): Clear caller_save_needed.
+
+ * stmt.c (emit_case_nodes): Some compiler has trouble with calling
+ a function pointer.
+ * gnulib.c: likewise.
+
+Tue May 2 15:32:25 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * loop.c (combine_movables): For zero extend,
+ do each from-mode separately.
+
+Mon May 1 00:18:47 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-apollo68.h: New file.
+
+ * c-parse.y (is_reserved_word, hash): Add keywords `__asm__', etc.
+ * c-parse.gperf: Corresponding changes.
+
+ * c-parse.y (check_newline): Set main_input_filename before
+ considering optional arguments.
+
+ * final.c (final_scan_function): Return next insn to process.
+ Usually that's the following insn; occasionally, previous compare.
+
+ * c-decl.c (DOUBLE_TYPE_SIZE): Wrong value.
+
+ * reload.c (decompose): Failed to return value.
+
+ * Support local specified-register variables.
+ * varasm.c (decode_reg_name): New function, cvt asmspec to regnum.
+ (make_decl_rtl): Call that.
+ * toplev.c (rest_of_decl_compilation): Handle local specified-register
+ declarations.
+
+ * i386.md (tstqi, trunc*qi): Constrain to `q' regs.
+
+ * loop.c (scan_loop, move_movables): ->global for zero-extend register
+ now means register is used outside range from where it is set
+ to the following label. Non-global zero-extend regs
+ may be entirely cleared.
+
+ * loop.c (combine_movables): Loop that combines matching movables
+ broken out from scan_loop.
+ Now also combine non-global zero-extend registers with each other
+ if their lifespans don't overlap.
+
+ * c-typeck.c (build_unary_op, ADDR_EXPR of a COMPONENT_REF):
+ Always convert to desired result type.
+
+Sun Apr 30 12:58:58 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (init_decl_processing): New macros parameterize int types.
+ CHAR_TYPE_SIZE, SHORT_TYPE_SIZE, LONG_TYPE_SIZE, LONG_LONG_TYPE_SIZE,
+ FLOAT_TYPE_SIZE, DOUBLE_TYPE_SIZE.
+
+ * fixincludes: Use sed instead of ex. No problem with split lines.
+
+ * print-tree.c (dump): Print type's name, if any.
+
+ * c-parse.y: Use __inline, not plain inline.
+
+ * toplev.c: New option -fdelayed-branch.
+ (compile_file): Open and close dbranch dump file.
+ Collect and print dbranch time.
+ (rest_of_compilation): Optionally do dbranch scheduling,
+ only if HAVE_DELAYED_BRANCH.
+ (main): Handle -dd.
+
+ * rtl.c (copy_rtx): Handle null pointers as code `e'.
+
+ * final.c (dbr_sequence_length): New function.
+ (final_scan_insn): Most of `final' broken out.
+ Add support for SEQUENCE insns.
+ last_ignored_compare and new_block now top-level static.
+
+ * c-parse.y (MAX_WORD_LENGTH): Long enough for __volatile.
+
+Sat Apr 29 13:03:20 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-parse.y (asm statements): Output line numbers.
+
+ * loop.c (emit_iv_init_code, emit_iv_inc, eliminate_biv): Copy
+ additive term rtx's to prevent sharing between insns.
+
+ * c-parse.y (check_newline): Increment input_file_stack_tick.
+ * toplev.c (report_error_function): Describe input stack only if
+ changed.
+
+ * c-decl.c (finish_struct): Reject zero width for named field.
+
+ * tm-sun3.h (CC1_SPEC): Prevent error on `-sun3'.
+ * tm-sparc.h (CC1_SPEC): Prevent error on `-sun4'.
+
+ * Makefile (cleanconfig): cleanlinks renamed; also delete gnulib.
+ (gnulib): Delete stamp-gnulib2 since gnulib2 should be redone after.
+
+Fri Apr 28 00:38:32 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * config.gcc (genix): Correct xm file name.
+
+ * tm-genix.h: Undefine ASM_SPEC inherited from tm-encore.h.
+
+ * Makefile: Make float.h using hard-params.
+ (clean): Delete float.h.
+
+ * hard-params.c: New program.
+
+ * varasm.c (assemble_variable): Use SELECT_VARIABLE_SECTION if defined.
+ (in_section): Use EXTRA_SECTIONS if defined.
+
+ * toplev.c (compile_file): Call ASM_FILE_END if defined.
+
+ * gcc.c (SWITCH_TAKES_ARG, WORD_SWITCH_TAKES_ARG): Let config override.
+
+ * loop.c (emit_iv_init_code): Force A to a reg if it isn't.
+
+Thu Apr 27 12:51:14 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-mips.h (ASM_START_FILES): Don't call print_options.
+ Don't call the funny abort-functions.
+ * out-mips.c: Delete funny debugging functions and aborts.
+ (print_options): #if 0.
+ (compare_restore): Test for COMPARE, not MINUS.
+ (mips_section_get, mips_output_external, mips_asm_final): New fns.
+
+ * input.h: New file with *input_filename, lineno and input_file_stack.
+ Included in toplev.c and c-parse.y.
+ * c-decl.c (finish_function): LINENO is now arg.
+ * c-parse.y: Calls changed.
+
+ * c-parse.y (check_newline): Handle `1' or `2' from cpp
+ by pushing or popping input_file_stack.
+ * toplev.c (compile_file): Push main input file on input_file_stack.
+ (report_error_function): If in include file, print the chain
+ of include-locations.
+
+ * cccp.c (output_line_command): New arg says whether entering or
+ leaving a file. Output `1' or `2' on #-line if so. Callers changed.
+
+ * gnulib2.c: Little-endian fixes from csmith@convex.com.
+
+ * fixincludes: Wrong quoting in `echo' command.
+
+ * tm-mips.h (REG_P): Duplicate defn deleted.
+ (PRINT_OPERAND): `\' was missing.
+
+Wed Apr 26 02:44:59 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (handle_directive): Preprocess even #pragma, but copy
+ to output file afterward.
+ (do_pragma): Use standard calling convention.
+ (install_builtins, special_symbol): Define __INCLUDE_LEVEL__.
+
+ * cccp.c (do_include): Don't forget to close file.
+
+ * final.c (output_asm_insn): Use PRINT_OPERAND_PUNCT_VALID_P
+ to validate punctuation after percent.
+ * tm-m68k.h, tm-alliant.h, tm-ns32k.h, tm-vax.h, tm-i386.h:
+ Define PRINT_OPERAND_PUNCT_VALID_P.
+
+ * Version 1.35 released.
+
+ * c-decl.c (grokdeclarator): Use INT_CST_LT only on int constants.
+
+Tue Apr 25 15:47:11 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload.c (find_reloads_address_1): Always return a value.
+
+ * flow.c (mark_set_1): Look inside zero_extract, sign_extract.
+
+ * expr.c (emit_library_call) [STACK_ARGS_ADJUST]:
+ Fix typo for `struct args_size'.
+
+Mon Apr 24 00:12:18 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * flow.c (mark_set_1): Look inside strict_low_part.
+
+ * c-typeck.c (decl_constant_value): Don't use var's init if volatile.
+
+ * print-tree.c (dump): Don't call walk on rtx's.
+
+ * integrate.c (expand_inline_function): Convert expanded arg from
+ passed mode to nominal mode.
+
+Sun Apr 23 13:14:47 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * fixincludes: fix _IO macros if split across two lines.
+ Fix typo: EOF was indented.
+
+ * gnulib2.c: New file with DImode library routines.
+ * Makefile (gnulib2): Put them into gnulib.
+ Must be explicitly requested.
+
+Fri Apr 21 13:45:45 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (main): Don't turn on trigraphs for -Wtrigraphs or -Wall;
+ use -trigraphs for that.
+
+ * cccp.c (main): Use -trigraphs to enable trigraphs.
+ * gcc.c: Pass -trigraphs to cpp; don't pass -T.
+
+ * Makefile: Variable srcdir relates location of sources
+ to current directory. Default is `.'.
+
+ * integrate.c (expand_inline_function): When copying expanded arg,
+ use mode it's passed in, not arg's nominal mode.
+
+ * dbxout.c (dbxout_block): Print generated name with assemble_name.
+
+Thu Apr 20 12:36:09 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stdarg.h: check __sparc__ instead of sparc.
+
+Tue Apr 18 18:58:03 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-next.h (STARTFILE_SPEC): Define it.
+
+Mon Apr 17 19:56:05 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * dbxout.c (dbxout_block): Use ASM_GENERATE_INTERNAL_LABEL to format
+ the labels LBB... and LBE...
+
+Sun Apr 16 23:57:47 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * mips.md: Change MINUS to COMPARE where appropriate.
+
+Sat Apr 15 16:11:49 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (finish_struct, redeclaration_error_message):
+ Rename variables named OLD and NEW.
+
+ * sparc.md (cse'd mult pattern): Handle memory operands.
+ Optimize small integer operands.
+
+ * stmt.c (expand_decl): On sparc, ensure dynamic arrays of doubles
+ are properly aligned, despite unaligned STACK_POINTER_OFFSET.
+
+Fri Apr 14 10:59:56 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (expand_call): Bugs treating struct value address as param:
+ do so only if it's supposed to be pushed;
+ decode value of FUNCTION_ARG properly.
+
+ * tm-altos3068.h (CPP_SPEC): Some braces were dropped.
+
+ * gcc.c (pexecute): Print message when exec fails.
+ (perror_exec): New fn.
+ (perror_with_name,pfatal_with_name): Change message syntax.
+
+ * tm-hp9k320.h (ASM_IDENTIFY_GCC): Define as no-op.
+
+Wed Apr 12 00:20:31 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cse.c (cse_insn): Can record constant value being stored in
+ a bit field, if we can tell that truncation won't change it.
+
+ * m68k.md (bfset, bfclr, bfchg insns): Do CC_STATUS_INIT
+ since the cc's are set from the old contents.
+
+ * gcc.c (compilers): Running `as', put -o option before input file.
+
+ * gcc.c: Delete output file only if that file's compilation fails.
+ * gcc.c (record_temp_file): Changed args: always_delete, fail_delete.
+ (store_arg): Likewise. Callers changed.
+ (clear_failure_queue): Called after each compilation.
+
+Tue Apr 11 01:18:53 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * combine.c (subst): (SET (ZERO_EXTRACT) (OR (ZERO_EXTRACT) const))
+ optimization was sometimes invalid.
+
+ * tm-m68k.h (NOTICE_UPDATE_CC): A doubleword move that requires 2 insns
+ does not set the cc's usefully.
+
+ * Makefile (cleanlinks): Just do `clean', not `realclean'.
+ (realclean): Delete config links also.
+
+ * expr.c (expand_call): Handle case where return value is in memory
+ but TARGET is a register.
+
+ * c-typeck.c (build_binary_op_nodefault): New arg ERROR_CODE
+ is passed to binary_op_error instead of CODE.
+ All callers changed.
+ (binary_op_error): CODE = NOP_EXPR is new special case.
+ (truthvalue_conversion): Call build_binary_op_nodefault directly
+ and specify NOP_EXPR for the error code.
+
+ * c-decl.c (xref_tag): If pedantic, warn on fwd ref to enum.
+
+Mon Apr 10 19:44:48 1989 Chris Smith (csmith at mozart)
+
+ * tm-convex.h (PCC_BITFIELD_TYPE_MATTERS): It doesn't,
+ but set it anyway. It makes for better code on this
+ word machine.
+
+ * convex.md (one_compl*): add not:QI and not:HI, which
+ do get used after all.
+
+ * tm-convex.h (A_REG_P, S_REG_P): define new macros
+ convex.md: use them
+
+ * convex.md (addsi3): tidy up constraints.
+
+ * tm-convex.h (REG_OK_FOR_INDEX_P): stack pointer is not ok.
+
+ * convex.md: add a pattern to push REG+CONST so we can
+ prefer an A reg.
+
+ * tm-convex.h (tstqi): should sign extend, not zero extend.
+
+ * expr.c (convert_move): Extending narrow to DI via SI,
+ operand of extendsidi2 was wrong.
+
+ * emit-rtl.c (gen_lowpart): Handle CONST_DOUBLE.
+
+Mon Apr 10 05:19:39 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * recog.c (nonmemory_operand): Test constant operands
+ as general_operand does.
+
+ * tm-m68k.h (PRINT_OPERAND): Limit effect of code `d'
+ to constant addresses.
+
+ * loop.c (can_eliminate_biv_p, eliminate_biv): Don't rely on givs with
+ nonconstant coefficients, since the coeffs could be zero.
+
+ * loop.c (can_eliminate_biv_p): Check each giv for ! ignore
+ before assuming it can be used.
+ (check_eliminate_biv): New fn, a piece of strength_reduce broken out.
+
+ * cccp.c (error_from_errno): New fn, like error and perror_with_name.
+ (do_include): Call that if open fails.
+ (finclude): Print I/O error msg before closing desc.
+
+ * c-decl.c (shadow_tag): If more than one tag or structure,
+ or anything other than a tag, warning.
+
+ * c-parse.y (components): Just warn if memb decl has no member,
+ and only if pedantic.
+
+ * loop.c (strength_reduce): Print uids, not luids, for dump.
+ (record_giv): giv_count field counts only DEST_REG givs.
+ (check_dbra_loop): src_two_before_end was set wrong.
+
+ * loop.c (record_giv): New arg LOOP_END; all callers changed.
+ Don't mark giv replaceable if used past LOOP_END.
+ (find_mem_givs): New arg LOOP_END; all callers changed.
+
+ * out-i386.c (FP_CALL): Make this a `return' stmt.
+
+Fri Apr 7 11:56:58 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (expand_expr, case ..._DECL): Preserve mode thru
+ calling change_address.
+
+ * expr.c (emit_library_call): Typo: ARGNUM => COUNT.
+
+ * expr.c (preexpand_calls, expand_call): Take note of RETURN_IN_MEMORY.
+ * stmt.c (assign_parms): Likewise.
+ * integrate.c (function_cannot_inline_p): Likewise.
+
+ * STACK_ARGS_ADJUST: Arg is now a `struct arg_data' and it should
+ be updated in place.
+ * tm-mips.h: Define it.
+ * expr.c (expand_call): Adapt to this. Assume padding comes after args
+ so turn off the feature of changing the args' offsets.
+ (emit_library_call): Adapt to this.
+
+ * tm-mips.h (PRINT_OPERAND): Use CONST_DOUBLE_{LOW,HIGH}.
+ Truncate SFmode constants to single precision.
+
+ * c-typeck.c (mark_addressable): Fix test for local vs global reg var.
+
+ * config.gcc: Change `:-' to `-' in var refs.
+ Shell on convex doesn't handle `:-'.
+
+Thu Apr 6 00:09:01 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * integrate.c (expand_inline_function): Compare actual's mode
+ against formal's DECL_ARG_TYPE's mode, not TREE_TYPE's mode.
+
+ * c-decl.c (implicitly_declare): Make the decl permanent if
+ in global binding level. (Can happen for certain invalid input.)
+
+ * c-typeck.c (build_modify_expr): Block path that made a MODIFY_EXPR
+ containing an ERROR_MARK.
+
+ * config/tm.h: New file.
+
+ * loop.c (only_reg_use_p): Fix bugs in recursion, add some fast
+ special cases. Comment on return value was backwards.
+ (strength_reduce): Negate the value of only_reg_use_p.
+
+ * genoutput.c (output_prologue): Output `#include hard-reg-set.h'.
+ * Makefile: insn-output.o depends on that.
+
+ * toplev.c (main): Typo recognizing -Wswitch.
+
+ * config.gcc (mips): New alternative.
+ * tm-mips.h, out-mips.c, mips.md, va-mips.h: New files.
+ * varargs.h: Include va-mips.h if on mips.
+
+Wed Apr 5 16:58:04 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (duplicate_decls): Rename OLD, NEW to OLDDECL, NEWDECL.
+
+ * stmt.c (expand_function_start): Ref subr instead of
+ current_function_decl; should make no difference.
+
+ * stmt.c (assign_parms): Do extra padding for some parms,
+ controlled by MAX_PARM_BOUNDARY.
+ * expr.c (expand_call): Same thing for caller side.
+ Note this is implemented only for machines that lack push insns.
+ Also, in both cases, it doesn't handle variable-size args.
+
+Tue Apr 4 12:22:06 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gcc.c (find_file): Try STANDARD_EXEC_PREFIX for startfiles too.
+
+ * varasm.c (make_decl_rtl): Delete never-executed clause.
+
+ * spur.md (movqi, loadhi, extend*, zero_extendhisi):
+ Make subregs with C code, not RTL patterns, so we can
+ avoid generating subreg of subreg.
+
+ * optabs.c (emit_cmp_insn): Not all clauses always succeed,
+ so stop using `else' structure.
+
+ * stmt.c (expand_return): Avoid moving void to void, in cleanups case.
+
+Mon Apr 3 18:04:33 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * m68k.md (cmphi): Don't allow a-reg vs a-reg, since that sign-extends.
+ If there is one a-reg, make sure it is not last.
+
+Sun Apr 2 13:02:26 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stor-layout.c (agg_mode): Use highest mode that has desired size.
+ Allow all integer modes, but reject sizes > MAX_FIXED_MODE_SIZE.
+ (That defaults to the size of DImode.)
+
+ * machmode.def: Add PSI, PDI and XF, CXF modes.
+
+Sat Apr 1 00:50:11 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * ns32k.md (ashd, lshd): Delete patterns that logand the count with 31.
+ The shift count is not truncated on this machine.
+
+ * combine.c (subst): Simplify nested or's, nested xor's.
+ (try_distrib): XOR doesn't distribute through anything.
+
+ * rtl.c (rtx_equal_p): Don't die on null pointers.
+
+ * loop.c (eliminate_biv): Use COMPARE, not MINUS, in generated compare.
+
+ * loop.c (invariant_p): Mem refs in constant pool are invariant.
+
+ * c-decl.c (redeclaration_error_message): If -traditional, allow
+ redeclarations of typedef provided they agree.
+
+ * c-decl.c (start_decl): Do expand_decl on the decl that pushdecl
+ returns. If there was a prev. decl with a different type,
+ we have changed its type and cleared its old rtl, so it need new rtl.
+
+Sat Apr 1 00:50:11 1989 Matthew Self (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (convert_move): Modified to use mode classes
+ instead of refering to specific machine modes.
+
+ * expr.c (do_jump): Converted to use CONST0_RTX macro.
+ do_jmp no longer refers to any machine modes directly except
+ for VOIDmode!
+
+ * expr.c (compare, compare1): Modified to use CONST0_RTX
+ macro. No longer refers to any machine modes directly
+ except VOIDmode and BLKmode!
+
+ * machmode.def: Documented assumptions made about the order
+ of machine modes during mode widening.
+
+ * optabs.c (expand_binop, expand_twoval_binop, expand_unop,
+ emit_cmp_insn): Added mode widening which is independent of
+ specific machine modes. It assumes that we may widen to any
+ higher numbered mode of the same mode class.
+ NOTE: the checks for VOIDmode ops which were present in
+ QI and HI to SI widening are now present in all widening.
+ I assume this is correct. Also, widening is now possible
+ from QI to HI. This may or may not be a good thing....
+
+ * rtl.h (CONST0_RTX): Added definition of new macro
+ CONST0_RTX (mode).
+
+ * rtl.h (GET_NOTE_INSN_NAME, GET_REG_NOTE_NAME): New macros.
+ * rtl.c (note_insn_name, reg_note_name): New tables.
+ * rtl.def (NOTE): Change last field from `i' to `n'.
+ * rtl.c (print_rtx): Print mode of INSN_LIST or EXPR_LIST as reg-note.
+ Print operand code `n' as name of kind of note.
+ (read_rtx): treat `n' like `i'.
+
+ * loop.c (struct induction): Add `mode' field.
+ (strength_reduce, record_giv): Set the `mode' field in V.
+ (can_eliminate_biv_p, eliminate_biv): Use that field.
+
+ * loop.c (struct iv_class): `init_insn' records what inits the biv.
+ Replaces `init_val_set' flag.
+ (strength_reduce): Update and test `init_insn' instead.
+ Use of a biv between its init and the start of the loop
+ does not preclude its elimination from the loop.
+ Setting a giv is ok for eliminating a biv, even if giv is "ignore",
+ since that just means giv will be combined with another.
+ Handle some DEST_ADDR givs for that purpose.
+ Test for giv-setting before check can_eliminate_biv_p.
+ New error check for replaceable giv whose value needed after loop.
+ (only_reg_use_p): New fn.
+
+ * expr.c (expand_expr): PLUS, MINUS with EXPAND_SUM:
+ Associate even harder.
+
+ * loop.c (strength_reduce): Treat all constant biv init vals like ints.
+
+ * loop.c (strength_reduce): Clear all_reduced when v->ignore is set;
+ the code to check this later didn't always do the job.
+
+ * loop.c (verify_loop): Set loop_continue.
+ (scan_loop): mention its value.
+ * rtl.h: Define NOTE_INSN_LOOP_CONT.
+ * stmt.c (expand_loop_continue_here): Output one.
+
+Fri Mar 31 10:08:29 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-typeck.c (pointer_int_sum, pointer_diff): Treat const void * like
+ void *.
+
+ * rtl.c (rtx_addr_varies_p): Don't die on null exp.
+ * cse.c (refers_to_mem_p, refers_to_p): Likewise.
+
+ * gcc.c (validate_switches, validate_all_switches): New fns.
+ Mark a switch as valid if any compiler spec or the linker spec
+ matches it, even for languages not being used.
+
+Thu Mar 30 00:22:14 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * loop.c (loop_optimize, move_movables): when moving a `clr' insn used
+ in zero-extension, sometimes change it to an `and' so that the
+ significant low bits are not clobbered.
+
+ * cccp.c: Implement __BASE_FILE__ and #once.
+ (savestring): New fn.
+ (struct file_name_list): new name for struct directory_stack.
+ (enum node_type): Add T_ONCE, T_BASE_FILE.
+ (directive_table): Add #pragma once.
+ (initialize_builtins): Add __BASE_FILE__.
+ (special_symbol): Handle __BASE_FILE__, together with __FILE__.
+ (do_include): Ignore the file if it's on the #pragma once list.
+ (do_once): New fn; add current file to #pragma once list.
+
+ * cccp.c (do_include): Don't add non-ex files to list of deps.
+
+ * config.gcc: Use {...:-...}, not {...=...}.
+
+ * c-parse.y: Add precedence for IF/ELSE, and for parens;
+ avoids some conflicts.
+
+ * tm-newsgas.h: Include tm-news.h and define USE_GAS.
+
+ * tm-news.h: New name for tm-news800.h.
+ If not USE_GAS, define SONY_ASM.
+ Don't define USE_GAS by default.
+ (CPP_PREDEFINES): Various alternatives depending on processor type.
+ (ASM_FORMAT_PRIVATE_NAME): Override this.
+ (ASM_IDENTIFY_GCC): Override; output nothing.
+ (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE): Round fsize up to % 4.
+ Max for halfword link insn is 32k, not 64k.
+ (FUNCTION_EPILOGUE): Don't output move.l if no regs to restore.
+ (PRINT_OPERAND_ADDRESS): Change handling of tableref pc-rel addresses.
+ * m68k.md (movhi): Add SONY_ASM conditional.
+
+ * cse.c (cse_insn): If replacing a dest address, preserve MEM_IN_STRUCT
+
+ * gcc.c (error, fatal): alternate varargs defns if HAVE_VPRINTF.
+
+Wed Mar 29 09:54:13 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gcc.c (process_command): Check WORD_SWITCH_TAKES_ARG, so that
+ -Tdata can be handled right.
+
+ * stmt.c (check_for_full_enumeration_handling): new fn, for warn_switch
+ (expand_end_case): Call it, if orig index was enum.
+ * toplev.c (main): Handle -Wswitch.
+ * c-parse.y (SWITCH stmt): Pass orig switch expr to expand_end_case.
+
+ * tm-*.h, out-*.c: Uniformly use reg_names, not reg_name, and don't
+ define any duplicates.
+ * final.c: Delete reg_name.
+
+ * c-parse.y (is_reserved_word): Add keywords __asm and __inline;
+ also __const and __volatile.
+ (yylex): Keywords that start with `__' are recognized regardless of
+ -traditional or -ansi.
+
+ * c-parse.y (check_newline): Always recognize #ident.
+ Macro IDENT_DIRECTIVE is no more.
+ If ASM_OUTPUT_IDENT is undefined, don't output anything for #ident.
+ * tm-3b1.h: Don't define IDENT_DIRECTIVE or ASM_OUTPUT_IDENT.
+ * tm-encore.h, tm-i386gas.h, tm-i368v.h, tm-sun386i.h, tm-vaxv.h:
+ Don't define IDENT_DIRECTIVE; define ASM_OUTPUT_IDENT to output in
+ default way.
+
+ * expr.h (RETURN_IN_MEMORY): New macro, default defn here.
+ * expr.c (expand_call): Use it to control where to return value.
+ * stmt.c (expand_function_start): Likewise.
+
+ * out-sparc.c (find_addr_reg): Abort if none found.
+ Eliminate confusion; do only one change between tests for PLUSness.
+ (output_move_double): Arg to find_addr_reg is address, not mem ref.
+ * out-m68k.c, out-spur.c, out-i386.c, out-alliant.c: Likewise.
+
+ * jump.c (find_cross_jump): Don't let either E1 or E2 be included
+ in the range of matching insns preceding the other (E2 or E1).
+
+ * c-parse.y (check_newline): No error for `#pragma\n'.
+
+ * Makefile (gcc.o): Control STANDARD_STARTFILE_PREFIX here.
+
+ * stmt.c (walk_fixup_memory_subreg): handle null.
+
+ * tm-sparc.h (FUNCTION_BLOCK_PROFILER): Change LPBnn to LPYnn,
+ to avoid conflict with final.c.
+
+Tue Mar 28 15:23:17 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (do_include): If fail, print system error message.
+ (perror_with_name): Use more standard error format. Inc. `errors'.
+
+ * dbxout.c (dbxout_function): Output any temporary types
+ that were made by dbxout itself.
+
+ * stmt.c: always use an epilogue if pcc-struct-return.
+ (expand_function_start): Compute return_label after testing that.
+ (expand_function_end): Output a return insn after pcc-struct-return
+ processing, if there is a return insn.
+ (expand_null_return): Don't output a return insn, in that case.
+ Simplify the conditions--depends entirely on HAVE_return.
+
+ * tm-m68k.h (FUNCTION_BLOCK_PROFILER): Use jsr, not call.
+
+ * reload.c (find_reloads): Certain mem addresses will be offsetable
+ after reloading; in particular, those where reg_equiv_address applies.
+
+ * loop.c (check_dbra_loop): Change MINUS to COMPARE.
+
+ * c-typeck.c (convert_for_assignment): Return THE standard error_mark.
+
+Thu Mar 23 09:39:02 1989 Richard M. Stallman (rms at watson)
+
+ * c-parse.y (components): Error if empty.
+
+ * dbxout.c (dbxout_symbol): Output const variables as N_STSYM.
+
+ * varasm.c (force_const_mem): Use ASM_OUTPUT_DOUBLE_INT if defnd.
+
+ * c-decl.c (grokdeclarator): Warn about `long long long'.
+
+ * reload1.c (reload): When changing REG to MEM, clear REG_USERVAR_P.
+ * final.c (alter_subreg): Preserve volatile bit of MEM.
+
+ * m68k.md (cmpsi, cmphi): Permit cmpm.
+
+ * gcc.c (find_file): Use standard_startfile_prefix_2.
+ Now search /usr/local/lib/, /lib/ and /usr/lib/.
+
+ * tm-m68k.h (PRINT_OPERAND): Support code `d'.
+ * m68k.md (cmpsi, cmphi, cmpqi): Use it for all mem addresses.
+
+ * final.c (output_asm_insn): Don't allow %LETTER without an
+ operand number.
+ * tm-m68k.h, m68k.md, tm-hp9k320.h, tm-news*.h: Use %@ instead of %s.
+ * tm-alliant.h, alliant.md: Likewise.
+ * i386.md, out-i386.h: Put `0' after each %L, %W, %B, %S, %Q, %R.
+
+ * stmt.c (expand_end_stmt_expr): Pop pending stack args.
+
+ * varasm.c (assemble_variable): For 0-size common variable,
+ allocate at least 1 byte.
+
+ * tm-encore.h (ASM_OUTPUT_DOUBLE, PRINT_OPERAND): Use 0f, not 0l,
+ for doubles.
+
+Mon Mar 13 10:24:56 1989 Richard M. Stallman (rms at ccvi)
+
+ * out-i386.h (function_prologue, function_epilogue):
+ Use call_used_regs, not a copy, so -f options work.
+ Save regs in the opposite order.
+ Save regs even starting from 0 if they happen to be call-saved.
+
+ * Bug fixes from Rob McMahon.
+
+ * loop.c (strength_reduce): When inserting insn to set
+ nonreplaceable giv, put it after all the consecutive insns
+ that compute it.
+
+ * reload.c (find_reloads): When forcing const to mem,
+ use the insn's operand mode, not the const's mode.
+
+ * reload1.c (choose_reload_targets): Use wider of inmode and outmode
+ when determining have_groups.
+
+ * reload1.c (choose_reload_targets): typo checked wrong insn with
+ constraint_accepts_reg_p.
+
+ * reload1.c (choose_reload_targets): Enable #if-0'd code for
+ forgetting old reloads in case of output reload from a non-spill-reg.
+
+Sun Mar 12 00:04:49 1989 Richard M. Stallman (rms at ccvi)
+
+ * c-parse.y (yyerror): Add forward-decl here.
+ * c-tree.h: Delete decl here.
+
+ * New macro USE_C_ALLOCA.
+ * cse.c (cse_main): Do alloca (0) to clear out C alloca.
+ * flow.c (life_analysis):
+ * local-alloc.c (local_alloc):
+ * reload1.c (reload_as_needed): likewise.
+
+ * loop.c (emit_iv_init_code, eliminate_biv):
+ Always put constant in a PLUS last.
+
+ * gcc.c (make_switch): Unused function deleted.
+
+ *gcc.c (switches): Each switch has a `used' field.
+ (process_command): Init it to 0 when making `switches'.
+ (do_spec_1, handle_braces, give_switch): Set to 1 when switch is used.
+ (main): If it remains 0 at the end, print error message.
+
+ * expr.c (convert_move, convert_to_mode): Don't truncate a MEM in
+ place if it is volatile.
+
+ * loop.c (strength_reduce): When reducing a giv, if the biv is
+ incremented between the giv's creation and its use, increment
+ the reduced giv var *after* its use.
+
+ * c-decl.c (duplicate_decls): Warn about proto vs nonproto
+ only if no other errors apply.
+
+ * jump.c (invert_exp): Don't crash if arg is null.
+
+ * alliant.md (float*i*f2): Don't allow immediate ops.
+ (sne): Fix typo, fsne => fsneq.
+
+ * expr.c (store_one_arg, expand_call): When size doesn't matter,
+ pass const0_rtx, not (rtx) 0.
+
+ * expr.c (do_jump): Args to invert_exp were missing.
+
+ * gcc.c (store_arg): Now 2 separate args for delete-on-success
+ and delete-on-failure. All calls changed.
+ (do_spec_1): DELETE_THIS_FILE is meaningful for output files.
+
+ * config/xm-alliant.h (LINK_SPEC): Pass -X to linker.
+
+Sat Mar 11 10:30:41 1989 Richard M. Stallman (rms at ccvi)
+
+ * tm-*.h, xm-*.h, *.md: Moved to subdir `config'.
+ * output-*.c: Moved to `config/out-*.c'.
+ * Makefile (.c.o): Define rule to use -Iconfig when compiling.
+ (various): Delete the commands from some compilation rules.
+ Put -Iconfig in other compilation commands.
+ Also some reordering of variable defs and comments for cleanliness.
+ (realclean): Change a shell comment to a Make comment.
+
+ * fold-const.c (fold): Simplify and extend TRUTH_... operators
+ knowing that args must be ints and values will be 0 or 1.
+
+ * gcc.hlp: New file (for VMS).
+
+ * reload1.c (reload): Don't let two 2-groups overlap.
+
+ * reload.c (push_reloads): When a plain reg matches a reload
+ for an increment, don't change the reload_in to a plain reg.
+ Leave the increment there.
+
+ * integrate.c (expand_inline_function): Don't try to inline
+ unless the parm machine modes really match what's expected.
+
+ * stmt.c (emit_case_nodes): default_label is an rtx, not tree.
+
+ * tm-next.h (DOLLARS_IN_IDENTIFIERS): Define it as 1.
+
+ * output-sparc.c (output_move_double): Don't trust random structs
+ to be double-word aligned.
+
+ * gcc.c: Pass -Wcomments to cpp.
+
+ * rtl.def (ASM_OPERANDS): New operands, source file and line.
+ * rtl.h (ASM_OPERANDS_*): New macros for components of ASM_OPERANDS.
+ * stmt.c (expand_asm_operands): Use new fields, not REG_ASM_* notes.
+ * toplev.c (error_for_asm): likewise.
+ * rtl.h (enum reg_note): Delete REG_ASM_FILE, REG_ASM_LINE.
+
+ * combine.c (try_combine): Check explicitly for volatility in I2, I1.
+
+Fri Mar 10 19:30:10 1989 Richard M. Stallman (rms at ccvi)
+
+ * c-parse.y (GOTO stmt): Set TREE_USED for the label.
+ * c-decl.c (poplevel): Warn about unused label.
+
+ * c-decl.c (warn_pointer_arith, warn_strict_prototypes): New vars.
+ (lang_decode_options): Options to set them.
+ * c-typeck.c (pointer_int_sum, c_sizeof): Maybe warn if bad target.
+ * c-decl.c (grokparms): Maybe warn if nonprototype fn decl.
+
+ * flags.h, toplev.c (warn_shadow): New flag.
+ * toplev.c (main): Decode it.
+ * c-decl.c (pushdecl): Maybe warn about any shadowing.
+ Existing parm-shadowing warning now disabled if shadowing decl
+ is also a parm.
+
+ * flags.h, toplev.c (warn_id_clash, id_clash_len): New flags.
+ * toplev.c (main): Decode -Wid-clash-LEN.
+ * tree.c (get_identifier): Implement warning if two idents match.
+
+ * toplev.c (compile_file): Warn about statics defined and unused.
+
+ * rtl.h (CONST0_RTX): New macro.
+
+ * recog.c (offsetable_address_p): New 1st arg says whether to demand
+ a strictly valid address.
+ (offsetable_memref_p): Pass nonzero.
+ * stmt.c (optimize_bit_field): Pass zero.
+
+ * cccp.c (main): Allow -Wcomment like -Wcomments.
+ * c-decl.c (lang_decode_options): Likewise.
+
+Sun Mar 5 15:02:59 1989 Randall Smith (randy at apple-gunkies.ai.mit.edu)
+
+ * m68k.md [tstdf, cmp[sd]f, truncdfsf2, floatsi[sd]f2, add[sd]f3,
+ sub[sd]f3, mul[sd]f3, div[sd]f3, neg[sd]f2, abs[sd]f2]: Made sure
+ that the test function's in the match_operands of the define_expand
+ and define_insn's matched, and made that test function
+ "register_operand" when both define_insn's really needed registers
+ in that spot.
+
+Sat Mar 4 00:25:37 1989 Richard M. Stallman (rms at c2v)
+
+ * expr.c (emit_push_insn): Don't ever bypass the big-endian
+ padding at the end.
+
+ * cccp.c (deps_output): Break line if would otherwise exceed 75 chars.
+ Make a name for that value 75.
+
+ * combine.c (subst): Handle general case of (subreg (sign_extend X)).
+
+ * tm-sun386i.h (CPP_PREDEFINES): Define `sun'.
+
+ * fixincludes: change `find' calls to find dirs thru symlinks.
+
+ * flow.c (mark_set_1): (set (subreg (reg N))...)
+ does make reg N significant for this basic block.
+
+Fri Mar 3 13:55:25 1989 Richard M. Stallman (rms at c2v)
+
+ * c-decl.c (parmlist_tags_warning): Print an explanation
+ for the first such warning.
+
+ * i386.md (extendsfdf): Let op 1 match op0 if that is an fp reg.
+
+ * expr.c (expand_call): Fix stupid errors copying pcc struct value.
+
+ * varasm.c (output_constructor): Discard NOP_EXPRs from build_c_cast.
+
+Thu Feb 23 05:55:57 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Version 1.34 released.
+
+ * c-typeck.c (build_c_cast): If EXPR is an error mark, return that.
+
+ * fold-const.c (div_and_round_double): Abort if divisor is 0.
+ (combine): Likewise, for real constants.
+ (real_zerop): New subroutine.
+ (fold): Don't try to fold division if divisor is 0.
+ Don't try to fold reals if can't do arithmetic on them.
+ Don't try to compare reals for TRUTH_..._EXPR if can't do arith.
+ Use real_zerop to test reals for zeroness.
+ For TRUTH_ANDIF_EXPR and TRUTH_ORIF_EXPR, can simplify based on
+ first operand alone.
+
+ * c-typeck.c (store_init_value): Fix error msg text.
+
+ * tm-sparc.h (FUNCTION_PROFILER): Use `mcount'.
+ * tm-sun4os3.h (FUNCTION_PROFILER): Override it; use `.mcount'.
+
+Wed Feb 22 04:33:22 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-hp9k320.h (CPP_SPEC, CPP_PREDEFINES): Make handling of
+ -Dmc68000 depend on TARGET_DEFAULT.
+
+ * tm-sparc.h (FUNCTION_PROFILER): Missing newline in fprintf.
+
+ * integrate.c (expand_inline_function): Don't map struct-value-address
+ in memory if fn does not use it.
+
+ * c-parse.y (check_newline): At skipline, detect eof.
+
+ * stmt.c (uninitialized_vars_warning): Change text of warning.
+
+Tue Feb 21 03:58:50 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * output-sparc.c (output_mul_insn): Handle case of both args
+ in reg 8, or both in reg 9.
+
+ * tm-sparc.h (ASM_SPEC): Define, to handle -pipe.
+
+ * tm-sparc.h (FUNCTION_PROFILER): Add omitted fprintf args.
+ (BLOCK_PROFILER): Likewise. Use tempvar.
+
+ * m68k.md (QImode btst): Allow nonoffsetable mem refs.
+
+Mon Feb 20 00:32:42 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * flow.c (mark_used_regs): Don't record about global reg vars.
+
+ * config.gcc (convex-*): tm file names are tm-convex1.h, tm-convex2.h.
+
+ * tm-vax.h, tm-ns32k.h, tm-alliant.h: Define PCC_STATIC_STRUCT_RETURN.
+
+ * gcc.c (compilers): Pass `-a' to cc1.
+ * tm-sun3.h, tm-sparc.h (LIB_SPEC): Define, to handle `-a'.
+
+ * expr.c (emit_push_insn): Copy stack addresses to be passed to bcopy;
+ old method of preadjustment is broken by changes in emit_library_call.
+
+ * c-decl.c (finish_decl): New temp `temporary'; don't get confused
+ about whether allocation was temporary.
+
+Sun Feb 19 17:03:35 1989 Chris Smith (csmith at mozart)
+
+ * tm-convex.h: define PCC_STATIC_STRUCT_RETURN
+
+ * convex.md:
+ remove pshea patterns, movsi does it better.
+ add ashift:DI abs:DF abs:SF
+ (tstdi): use a clobbered register instead of a bogus DImode zero.
+ (trunchiqi2): delete noninstruction cvth.b
+ (udivsi3, udivhi3, udivqi3): deleted, expand_divmod does it now.
+ (call, call_value): delete stupid call/ret -> jump optimization.
+ (call, call_value): flush call_ap_check, use reg_mentioned_p instead.
+
+ * convex.md: (movxx): swap constraint alternatives so that the
+ leftmost alternative is (set =g r). This makes (set mem const)
+ get combinable input reloads of const instead of uncombinable
+ output reloads to mem. They still do not combine, but wtf,
+ I'll inch up on it.
+
+ * output-convex.c: (const_double_{high,low}_int): new routines
+ to pick apart const_doubles for assembler.
+
+Sun Feb 19 01:40:17 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * sparc.md (shift memory right 24 bits): Another `a1' typo.
+
+ * config.gcc (convex-*): Delete troublesome whitespace.
+
+ * c-decl.c (grokparms): Delete redundant `parm != 0' tests.
+
+ * stmt.c (fixup_memory_subreg): Slight simplification.
+
+ * tm-sparc.h (FUNCTION_PROFILER): Fill delay slot.
+ (FUNCTION_BLOCK_PROFILER): Use sethi.
+ (BLOCK_PROFILER): Use %g2, not %g0. Use sethi.
+
+Sat Feb 18 02:11:25 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (expand_expr): Ignore const array's initial value
+ if it's an error_mark.
+ * c-decl.c (finish_decl): Set DECL_INITIAL to an error_mark
+ if the decl is a permanent node.
+
+ * cccp.c (rescan): If traditional, if macro ends inside string,
+ keep scanning for the end of the string.
+ (handle_directive): A line of just `#' becomes blank.
+ (collect_expansion): \ in strings traditionally doesn't hide macro arg.
+
+ * m68k.md, alliant.md (addsi3): New alternative a=r+a, in addition
+ to old a=a+r, needed since reload-insns are not commuted.
+
+Fri Feb 17 03:15:23 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-m68k.h (PCC_STATIC_STRUCT_RETURN): Define it.
+ * toplev.c, flags.h: New var flag_pcc_struct_return.
+ * stmt.c (expand_function_start): Obey new flag and new variable.
+ * expr.c (expand_call): Obey new flag and new variable.
+ * varasm.c (assemble_static_space): New function.
+
+ * stmt.c (expand_return): If we need cleanups, compute retval first
+ into pseudo reg, then do the cleanups, then copy it to return reg.
+
+Thu Feb 16 02:59:52 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * regclass.c (init_reg_sets_1): Win if STATIC_CHAIN_REGNUM undefined.
+
+ * expr.c (expand_call): Handle conflict between two precomputed
+ args that are both function calls returning structures.
+
+ * loop.c (move_movables): Bkwds test of m->partial, for a matching reg.
+
+ * expr.c (emit_library_call, expand_call): Handle STACK_ARGS_ADJUST.
+
+Wed Feb 15 01:59:15 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * toplev.c (flag_caller_saves): New var, for -fcaller-saves.
+ DEFAULT_CALLER_SAVES controls initial value.
+ * global-alloc.c (find_reg): Do caller saves only if flag set.
+ * local-alloc.c (find_free_reg): Do caller saves only if flag set.
+ * tm-alliant.h, tm-convex.h: Define DEFAULT_CALLER_SAVES.
+
+Wed Feb 15 01:59:15 1989 Chris Smith (rms at sugar-bombs.ai.mit.edu)
+
+ * caller-save.c: New file.
+ * regs.h (CALLER_SAVE_PROFITABLE): New macro.
+ (reg_n_calls_crossed): new int-vector replaces reg_crosses_calls.
+ * flow.c (allocate_for_life_analysis, propagate_block, dump_flow_info):
+ Use reg_n_calls_crossed.
+ * stupid.c (stupid_mark_refs, stupid_life_analysis): Likewise.
+ * global-alloc.c (find_reg): Sometimes allocate call-clobbered regs
+ for call-crossing pseudos.
+ New arg ACCEPT_CALL_CLOBBERED; callers changed.
+ * local-alloc.c (find_free_reg): Similar changes.
+ (qty_n_calls_crossed): New int-vector replaces qty_crosses_calls.
+ (alloc_qty, local_alloc, combine_regs, find_free_reg): change that var.
+ * regclass.c (call_fixed_regs, call_fixed_reg_set): new vars.
+ (init_reg_sets_1): Initialize them.
+ * reload1.c (reload): Call caller-saves processing if needed.
+
+Wed Feb 15 01:59:15 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (expand_expr): INTEGER_CST for DImode: don't handle
+ endianness here. So CONST_DOUBLE_LOW is always the low word.
+ * varasm.c (force_const_mem): Handle it here.
+
+ * expr.c (convert_move): widening followed by extendsidi2 had braino.
+
+ * integrate.c: Don't include ctype.h; not needed and kills Sun cpp.
+
+ * m68k.md (cmpsf, cmpdf and their recognizers):
+ Replace MINUS with COMPARE.
+ Also, use VOIDmode for COMPAREs, not SF or DF.
+
+ * optabs.c (sign_expand_binop): Handle ops such as division where
+ an unsigned char could be widened and handled with signed int insns.
+ * expmed.c (expand_divmod): Use that.
+
+ * c-typeck.c (digest_init): Allow for type variants in validating
+ initialization from a string constant.
+
+ * c-typeck.c (decl_constant_value): Disable opt. if pedantic or
+ outside functions, so that validity of program is never affected.
+
+ * fold-const.c (fold): Signedness-test for ABS_EXPR was backwards.
+
+Tue Feb 14 01:30:47 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (main): Don't omit normal output, if we want deps on
+ a separate stream.
+
+ * c-decl.c (grokdeclarator): Don't record any arg types for functions
+ if -traditional.
+
+ * print-tree.c (prtypeinfo): Mention permanent attribute.
+
+ * tm-next.h: New file.
+
+ * c-typeck.c (decl_constant_value): The DECL_INITIAL may be ERROR_MARK.
+
+ * c-decl.c (duplicate_decls): For fns, new static decl overrides
+ old non-static one.
+
+ * emit-rtl.c (gen_lowpar, gen_highpart): Use change_address, so we
+ preserve volatility, etc.
+
+ * stmt.c (expand_expr_stmt): Use emit_filename, emit_lineno
+ as file and line for any warning.
+ * emit-rtl.c (emit_line_note): Set those vars.
+
+ * c-decl.c (store_parm_decls): If -Wimplicit, warn of arg with no decl.
+
+ * recog.c (offsetable_address_p): Use strict_memory_address_p,
+ since called from reload.c.
+
+Mon Feb 13 03:11:50 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * sparc.md (compare-to-reg patterns): Some still had MINUS.
+
+ * toplev.c (main): Warn if `-a' on system that can't handle it.
+
+ * stmt.c (expand_asm_operands): Delete unused local `val'.
+ (pushcase_range): Likewise for `value'.
+ (fixup_var_refs): Likewise for `insn'.
+ * emit-rtl.c (start_sequence): Likewise for `save'.
+ * loop.c (scan_loop): Likewise for `before_start'.
+ * expr.c (expand_expr): Delete label `binop1'.
+
+ * reload1.c (constraint_accepts_reg_p): Handle SUBREGs of REGs.
+
+Sun Feb 12 05:37:46 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gnulib.c (__bb_init_func): New function
+
+ * tm-m68k.h (BLOCK_PROFILER, FUNCTION_BLOCK_PROFILER): Defined.
+
+Sat Feb 11 00:05:55 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-sparc.h (FUNCTION_PROFILER): Make it really work.
+ (BLOCK_PROFILER, FUNCTION_BLOCK_PROFILER): New macros.
+
+ * final.c (final): Use BLOCK_PROFILER at start of each basic block.
+ (final_start_function): Use FUNCTION_BLOCK_PROFILER if -a.
+ (end_final): New fn to output the block-profiling tables.
+ * toplev.c (profile_block_flag): Set if -a.
+ (compile_file): Call end_final.
+
+ * combine.c (try_combine): Avoid combining in most cases if I3
+ has an inc or dec and I1 or I2 uses the same register.
+
+ * tree.c (size_in_bytes, int_size_in_bytes): Use type's main variant.
+
+ * c-typeck.c (actualparameterlist): Error if parm type is incomplete.
+
+ * expr.c (expand_call): Ignore args that have incomplete type.
+
+Fri Feb 10 02:26:02 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-parse.y (case stmts): strip dummy NOP_EXPRs.
+
+ * reload1.c (reload_as_needed): Clear reg_{has,is}_output_reload here,
+ (choose_reload_targets): not here.
+
+Thu Feb 9 01:35:55 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * output-sparc.c (output_mul_by_constant): Forget cc status.
+
+ * stmt.c (assign_parms): Don't put volatile parms in regs.
+
+ * vax.md (jlbs/jlbc recognizers): Move them before jbc/jbs recognizers.
+
+ * cse.c (fold_rtx): Handle (EQ (COMPARE ...) (CONST_INT 0)).
+
+ * c-typeck.c (default_conversion, digest_init): For static const
+ nonvolatile scalar variable, use its initial value if known.
+
+ * expr.c (expand_expr: case COMPONENT_REF): If containing structure
+ comes out volatile, leave the component MEM volatile too.
+
+ * hard-reg-set.h: Fix multi-word case macros to swallow semicolon.
+
+ * c-typeck.c (default_conversion): In array=>ptr, volatility
+ of target type comes from TREE_THIS_VOLATILE, not TREE_VOLATILE.
+
+ * reload1.c (forget_old_reload_1, choose_reload_targets):
+ New array reg_is_output_reload is converse of reg_has_output_reload.
+ forget_old_reload_1 needs both.
+
+Wed Feb 8 01:26:24 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reload1.c (forget_old_reloads_1): New fn, guts of forget_old_reloads.
+ Do process a spill reg if it isn't used for reloading in this insn.
+ (forget_old_reloads): Deleted, replaced with note_stores.
+ (reload_as_needed): Undo Feb 1 change.
+ Call forget_old_reloads_1 on pseudos autoincremented and not reloaded.
+
+ * c-typeck.c (convert_for_assignment): Handle variant types.
+
+ * c-decl.c (lang_decode_option): -Wall implies -Wunused.
+
+Tue Feb 7 01:32:28 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * combine.c (try_combine): Don't try adding outputs to an asm_operands.
+
+ * cse.c (CHEAPER): Don't ever let a hard reg get ahead of a pseudo.
+
+ * stmt.c (fixup_gotos): Don't crash on undef label if THISBLOCK is 0.
+
+ * c-decl.c (parmlist_tags_warning): New fn.
+ * c-parse.y (parmlist, parmlist_or_identifiers): Call it,
+ to warn about any tags defined inside the parmlist.
+ * c-decl.c (grokparms): Don't warn about ptr to incomplete type.
+ The new warning is better.
+
+Mon Feb 6 01:11:36 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (store_constructor): Incorrect ALIGN arg in store_field calls.
+
+ * c-parse.y (%union): Delete unused alternative.
+
+ * c-decl.c (grokparms): Use main variant to test for ptr to incomplete.
+
+ * c-decl.c (finish_enum): Delete superfluous init for `pair'.
+
+ * cse.c (fold_rtx): Optimize X+0, X-0 in floating point.
+ Fix typo in PLUS case; omitted value to compare GET_MODE_CLASS against.
+ (equiv_constant): Allow CONST_DOUBLE.
+
+ * cse.c: Optimize past if-statements that are known to fail.
+ (cse_insn): If condjump becomes uncond to end of this block,
+ set cse_skip_to_next_block.
+ (cse_basic_block): If that happens, ignore rest of block, and maybe
+ treat next block as part of this one (if tables have room).
+ Resume insn that starts next basic block to be scanned.
+ (cse_main): Make room for at least 500 qtys.
+ (cse_end_of_basic_block): Subroutine broken out of cse_main.
+
+ * c-parse.y (hash, is_reserved_word): Rewrite: new hash technique.
+
+ * c-decl.c (duplicate_decls): Be smart about proto vs nonproto mismatch
+ involving a function definition.
+
+Sun Feb 5 17:31:12 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * alliant.md (movdi): Typo in `fmoved'.
+ (ftruncsf2): Handle moving into fp reg.
+
+ * jump.c (jump_optimize): Typo in testing PRESERVE_DEATH_INFO_REGNO_P.
+
+ * reload1.c (choose_reload_targets): Move all death notes to the
+ output reload insn.
+
+ * m68k.md (fix_truncsfsi2,fix_truncdfsi2): Use accurate rtl pattern.
+
+ * loop.c (delete_insn_forces): Use presence of REG_RETVAL to check
+ for value-of-library-call insn.
+
+Sat Feb 4 18:17:56 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * integrate.c (expand_inline_function): Make addresses of stack
+ slots valid somehow.
+
+ * tm-3b1.h (DIVSI3_LIBCALL, etc.): Define these macros; avoid gnulib.
+
+ * expmed.c (store_bit_field): Avoid (subreg (mem)) when converting
+ VALUE1 to SImode.
+
+ * jump.c (jump_optimize): Do delete USE and CLOBBER insns.
+ This is needed for proper jump optimization.
+
+ * rtl.def (COMPARE): New code.
+ * *.md (compare and related patterns): Use COMPARE, not MINUS:VOID.
+ * loop.c (eliminate_biv, can_eliminate_biv_p): Likewise.
+ * cse.c (fold_rtx, fold_cc0, cse_insn):
+ * output-m88k.c (output_{f,}compare, output_store):
+ * output-sparc.c (strict_single_insn_op_p, single_insn_src_p, safe_insn_src_p):
+ * combine.c (subst):
+ * jump.c (jump_back_p):
+
+Fri Feb 3 18:34:27 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * output-i386.c (notice_update_cc): If arith insn sets the cc's,
+ discard all remnants of previous cc value and flags.
+
+ * sparc.md (ashiftrt mem by 24): Fix typo `a1'.
+
+Thu Feb 2 14:55:44 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * output-sparc.c (output_mul_insn): Clear the CC status.
+
+Wed Feb 1 20:01:54 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Version 1.33 released.
+
+ * reload1.c (reload_as_needed): On entering new basic block,
+ if it didn't need reload regs, forget all inherited contents of those.
+
+ * tm-alliant.h (NOTICE_UPDATE_CC): Floating moves don't set the cc's.
+ Also delete the clauses and tests for FPA regs.
+
+Tue Jan 31 21:51:05 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * config.gcc: Handle convex-c1, convex-c2.
+ * tm-convex1.h, tm-convex2.h: New files that include tm-convex.h.
+ * tm-convex.h: Define switches -mnoc1, -mnoc2.
+
+ * config.gcc: rename `nofp' to `nfp', to match the file names.
+
+Mon Jan 30 22:12:15 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * output-sparc.c (output_delay_insn): Extract the operands,
+ call alter_subreg, constrain_operands and NOTICE_UPDATE_CC.
+ So callers other than output_eager_then_insn don't lose.
+ (output_eager_then_insn): No need to do that stuff.
+
+ * symout.c (symout_block_symbols): Handle (MEM (REG)) for
+ variable-sized arrays.
+
+ * tm-encore.h (ASM_SPEC): Always pass -j; avoid jump-range lossage.
+
+Sun Jan 29 17:06:26 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * alliant.md: Fix refs to CONST_DOUBLEs to use CONST_DOUBLE_{HIGH,LOW}.
+
+ * combine.c (subst): (minus (zero_extend ...) (const_int ...)) opt.
+ now limited to within the context of (set (cc0) ...).
+
+Sat Jan 28 14:26:08 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cse.c (fold_cc0): Missing `&' extracting CONST_DOUBLEs.
+ (fold_rtx): Don't put CONST_DOUBLEs together into a (CONST (PLUS...)).
+
+ * output-convex.c (gen_cmp): Recognize CONST_DOUBLE as a constant.
+
+ * tree.c (build_real_from_int_cst): Typo in REAL_ARITHMETIC case.
+
+ * Makefile (bootstrap2): Don't use bootstrap3 as subroutine.
+
+ * varasm.c (force_const_mem): Put the CONST_DOUBLE on the chain
+ if its MEM is stored in it; so it can be cleared at end of function.
+
+ * stmt.c (emit_case_nodes): Put a compare before each cond-jump.
+ Two cond-jumps after one cond is invalid and makes cse produce garbage.
+
+Fri Jan 27 01:05:01 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-sun2.h (CPP_SPEC): Define __HAVE_68881__ only if -m68881.
+
+ * c-decl.c (start_decl): Don't expand_decl if DECL already has rtl.
+ (grokparms): If just declaring fcn, incomplete parm type is just
+ a warning, and don't discard the specified type.
+
+ * expmed.c (expand_divmod): Be smarter about not clobbering args
+ with intermediate results; one mem can clobber another, and a reg
+ can clobber a mem.
+
+ * tm-i386.h (FUNCTION_PROFILER): Use LPREFIX. May actually work now.
+ * tm-i386gas.h: Include tm-bsd386.h, not tm-att386.h.
+ This means changing asm syntax.
+ #undef DBX_NO_XREFS and DBX_CONTIN_LENGTH.
+
+ * sparc.md (eager branch peepholes): Don't forget 2nd arg to
+ safe_insn_src_p.
+ Don't print warnings.
+ * output-sparc.c: (strict_single_insn_op_p): Return 0 for floating
+ REG or MEM, since copying that may take 2 insns.
+ (operands_satisfy_eager_branch_peephole): require delay insn to
+ be strict_single_insn_op_p as well as safe_insn_src_p.
+ (operand_clobbered_before_used_after): Don't print warnings.
+
+ * varasm.c (decode_rtx_const): Clear entire structure incl. gaps.
+ Avoids spurious hash mismatches.
+ (force_const_mem): If CONST_DOUBLE, store its CONST_DOUBLE_MEM field.
+ Also look in that field rather than hashing, to save time.
+
+ * c-typeck.c (build_c_cast): If value is literal, mark NOP_EXPR as so.
+ (store_init_value): Change error msg.
+
+ * c-decl.c (duplicate_decls): Classify prototype vs nonprototype
+ mismatches better.
+
+ * tm-3b1.h: Fix comment.
+
+Wed Jan 25 12:46:50 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Makefile (cleanlinks): Use -f.
+
+Tue Jan 24 17:54:16 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cse.c (canon_hash): Fix paren error in last change.
+
+ * varasm.c (immed_real_const_1): Missing arg to bcmp.
+
+Mon Jan 23 02:43:45 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stor-layout.c (layout_type): BLKmode elts force array to be BLKmode.
+
+ * genpeep.c, genoutput.c, genemit.c: Put `#include "real.h"' in output.
+
+ * stmt.c (expand_expr_stmt): No "no effect" warning for error-mark.
+
+ * varargs.h: Rename implicit arg name to __builtin_va_alist
+ which triggers code in assign_parms. Does this really matter?
+
+ * sparc.md (sne): New define_expand.
+ (seq recognizers): Handle sne as well.
+ * output-sparc.c ({strict_,}single_insn_src_p):
+ Some NEG and MINUS insns are actually 2 asm insns.
+ (safe_insn_src_p): No floating arith is safe; they can trap.
+ (eq_or_neq): New fn, for seq/sne recognizers.
+
+ * c-decl.c (grokdeclarator, size of array type):
+ Strip from SIZE any NOP_EXPRs that don't change anything.
+
+ * reload.c, recog.c: Include real.h so constraint macros can examine
+ CONST_DOUBLEs.
+
+Sun Jan 22 04:12:54 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (init_decl_processing): Define __builtin_saveregs.
+ * tree.h: likewise.
+ * expr.c (expand_builtin): Handle it.
+
+ * tm-sparc.h: Define TARGET_EAGER and -meager.
+ * sparc.md (eager branch peepholes): Reenable, but test TARGET_EAGER.
+ Change fb insns to use %F. Delete `,a' from some of them.
+ * jump.c (jump_optimize): Don't delete USE and CLOBBER insns.
+
+ * xm-vms.h (const): Define it as empty.
+
+ * make-cccp.com: Move the rename of cexp_tab.c.
+ Compile cccp.c with no macro definitions.
+
+ * cccp.c (main): VMS conditional for setting max_include_len.
+
+Sat Jan 21 12:53:00 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * varargs.h (va_start): On sparc, call __builtin_saveregs.
+ Delete the old conditional that used va-sparc.h.
+ Rename macros and locals to start with two underscores.
+ * va-sparc.h: File deleted.
+
+ * c-decl.c (store_parm_decls): Initialize OTHERS.
+
+ * stmt.c (assign_parms): Obey layout_decl.
+
+Fri Jan 20 02:19:32 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cse.c (fold_rtx): For SYMBOL_REF and LABEL_REF, mask address
+ to 16 bits.
+
+ * tree.h (NUM_TREE_CODES): NUM_TREE_CODE renamed.
+
+Thu Jan 19 13:53:24 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-typeck.c (mark_addressable): For global reg var, report error.
+ Now returns an int; value of 0 means caller should fail.
+ All calls (in this file) changed.
+
+ * stor-layout.c (layout_decl): Don't let an more than 1 word
+ of any aggregate go in any 1 register. (Needed for machines whose
+ integer regs are 64 bits).
+
+ * tm-convex.h, xm-convex.h, convex.md, output-convex.c: new files.
+
+ * expr.c (convert_move): Use extendqidi2, etc. for converting
+ small ints to double ints. Use zero_extendsidi2 rather than
+ clearing the high half.
+
+Wed Jan 18 01:20:52 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * varasm.c (make_decl_rtl): If global `register' decl is invalid,
+ make ordinary non-register rtl.
+
+ * output-sparc.c (operand_clobbered_before_used_after): new fn.
+ (reg_clobbered_p, safe_insn_src_p): New fns.
+ (single_insn_src_p): Treat constants all as ok, even though not
+ always literally so. Also accept some SIGN_EXTENDs and ZERO_EXTENDs.
+ (strict_single_insn_src_p): New fn, like above but is strict
+ about constants and constant memory addresses.
+ (relop): New fn.
+ (output_move_double): Don't make a MEM, and don't use %m.
+ (output_delayed_branch): New name for output_delay_insn.
+ Now handle non-small constant operands.
+ Avoid duplicate loads of g1 for constant addresses.
+ Use recog_operand directly for output of the delay insn.
+ (output_delay_insn): Now a completely new fn.
+ (output_eager_then_insn, next_real_insn_no_labels): New fns.
+ (operands_satisfy_eager_branch_peephole): New fn.
+
+ * sparc.md: New peepholes for testing a recently used operand.
+ New peepholes for delayed branches, incl. conditional ones.
+ ** Some of them commented out because they seem not to work.
+ (andcc recognizer): Fix typo, missing %.
+ (bgt): Change bgt to bg in output.
+ (reversed jumps): Replace with one pattern using match_operand.
+ It uses %F to output the condition.
+ (movsi): For round-valued immed const, use just a sethi.
+ For other immed, use explicit sethi and or.
+ (movhi, movqi): use `move' for reg source or small int source.
+ For other immed, use explicit sethi and or.
+ (movsi, etc.): Handle all constant addresses like SYMBOL_REFs.
+ (movsf): Delete never-used duplicate code for constant addresses.
+ (addsi3, subsi3, cse'd multiply): Use sethi and or, rather than set.
+ (andsi3, iorsi3, xorsi3): Likewise.
+ (jump): Make an annulled branch.
+
+ * tm-sparc.h (PROMOTE_PROTOTYPES): Define this.
+ (GO_IF_LEGITIMATE_ADDRESS): Now accept all constant addresses;
+ also cleaned up.
+ (NOTICE_UPDATE_CC): Don't change the G1 status when storing in memory.
+ Assume all PARALLEL insns are peepholes.
+ (PRINT_OPERAND): New codes C and N for outputting conditions,
+ either forward or reversed. Also F for reversed floating.
+
+ * jump.c (delete_for_peephole): New function to delete range of insns.
+ * genpeep.c (gen_peephole): Output code to use this.
+
+ * Makefile (install): Fix typo, had $${name} for $${file}.
+
+Tue Jan 17 00:00:12 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * i386.md (ashlsi3): Use addl or leal for special cases.
+
+ * c-decl.c (grokdeclarator): Make a non-global VAR_DECL public
+ if it is external.
+
+ * masm386.c: Clean up formatting.
+
+ * cse.c (fold_rtx): Typo simplifying x|0 or x^0
+ when the 0 comes second.
+
+ * expmed.c (store_fixed_bit_field): For halfwords, verify that
+ the field fits in an *aligned* halfword.
+ (extract_fixed_bit_field): likewise.
+
+ * expmed.c (store_split_bit_field): New arg align, passed in from
+ store_fixed_bit_field and passed back to it.
+ (extract_split_bit_field): likewise.
+
+ * expr.c: Reinsert changes from Jan 2, mysteriously deleted Jan 3.
+ Also changes from Dec 23, Dec 28 and Dec 29.
+
+ * tm-i386.h: Likewise for changes from Dec 30.
+
+ * c-typeck.c (build_component_ref): If field's type is error-mark,
+ return an error-mark.
+
+Mon Jan 16 14:16:54 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * genpeep.c (main): Output code to exit early if insn is followed
+ by a barrier.
+ (gen_peephole): Reject barriers just like labels.
+
+ * stmt.c (do_jump_if_equal): New arg UNSIGNEDP, for emit_cmp_insn.
+ Caller changed. Now static.
+
+ * final.c (final): Set INSN_DELETED_P in insns when output.
+
+ * final.c (final): Re-set BODY if peephole does anything.
+
+ * c-decl.c (grokparms): Ignore anything but PARM_DECLs in the list.
+ (store_parm_decls): If we had a prototype, separate out anything other
+ than a PARM_DECL declared in it, and pushdecl those at the end,
+ after DECL_ARGUMENTS is set.
+
+ * stmt.c (expand_end_case): Do stack adjusts after computing index.
+
+ * expr.c (store_one_arg): Handle padding for case of BLKmode
+ for which space was preallocated.
+
+ * integrate.c (copy_rtx_and_substitute): When copying asm insn,
+ preserve sharing of the input-operand vectors.
+ (expand_inline_function): Clear {orig,copy}_asm_operands_vector
+ to make that mechanism work.
+ (save_for_inline, copy_for_inline): Likewise.
+
+ * stmt.c (expand_asm_operands): Reject `+' in constraints.
+ Every output constraint requires `='; inputs reject it.
+
+ * stmt.c (expand_function_end): Arg to fixup_gotos was missing.
+
+Sun Jan 15 00:28:23 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c, gcc.c (main): Handle SIGPIPE.
+ (pipe_closed): New fn; report suitable fatal error.
+
+ * loop.c (loop_optimize): Initialize moved_once.
+
+ * gcc.c (do_spec): Don't call `execute' if value != 0.
+ Delete redundant second call to do_spec_1.
+
+ * toplev.c (compile_file): Make declared-but-not-defined warnings
+ only if -Wunused.
+
+ * stmt.c (emit_case_nodes): Fix typo setting gen_ble_pat.
+
+ * tm-sparc.h ({U,}MODSI3_LIBCALL): Name was wrong.
+
+ * gcc.c (env_exec_prefix refs): Don't try to open via it if it's null.
+
+ * output-sparc.c (output_store, output_load_{fixed,floating}):
+ Fixed confusions between the mem ref and its address.
+
+ * cse.c (canon_hash): global_regs has entries only for hard regs.
+ * flow.c (insn_dead_p, mark_set_p, mark_used_regs): Likewise.
+
+ * cse.c (fold_rtx): More simplifications for MULT, IOR, AND, XOR
+ DIV and shifts with one arg 0 or 1.
+
+Sat Jan 14 11:41:11 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-typeck.c (build_array_ref): If pedantic, check for regdecl arrays.
+
+ * fixincludes: Make all subdirs in advance, so no need for `dirname'.
+
+ * genpeep.c (gen_peephole): Delete code to increment LABEL_NUSES;
+ instead, clear JUMP_LABEL for any jumps being deleted.
+ No need to test INSN1 for being a label, since not called then.
+ [If any of the matched insns is a JUMP_INSN, set want_jump,
+ and in that case make the matched peephole a JUMP_INSN itself.]
+ That's in an #if 0 now; it's good in jump, but not in final.
+
+ * jump.c (jump_optimize): Don't do peepholes here.
+ * final.c (final): Do them here.
+
+ * jump.c (jump_optimize): In optimizing `if (foo) bar; else break;',
+ don't try to invert anything but a standard-looking conditional jump.
+
+ * jump.c (jump_optimize): Do peepholes on ALL BUT the first pass.
+
+ * gcc.c (env_exec_prefix): New var used like user_exec_prefix
+ but set from envvar GCC_EXEC_PREFIX.
+
+Fri Jan 13 13:21:59 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * genpeep.c (gen_peephole): Test INSN1 for a label at the very start,
+ then test following insns at the end of the loop.
+
+ * sparc.md (call recognizers): do CC_STATUS_INIT, for %g1.
+
+Thu Jan 12 02:13:49 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * varasm.c (make_decl_rtl): Recognize more error cases for reg vars:
+ BLKmode, or initializer given.
+ Distinguisn missing asm from invalid name.
+
+ * expr.c (expand_call): Never return 0; return const0_rtx instead.
+ This makes expand_expr more uniform.
+
+ * c-decl.c (grokparms): For ptr to incomplete type, just warn;
+ don't change the parm's type.
+
+ * stmt.c (expand_return): Set RETVAL_RHS so as to recognize
+ tail-recursive fcn returning void.
+ Unconditionally test value of expand_expr for being a REG.
+
+ * reload.c (find_reloads): Don't process insns that have
+ no constraint alternatives. No more need for have_constraints.
+
+ * recog.c (constrain_operands): New local var nalternatives.
+ Don't bother checking the insn if nalternatives is 0.
+
+Wed Jan 11 01:27:48 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Implement global register decls.
+
+ * varasm.c (make_decl_rtl): Handle global register vars.
+ (make_function_rtl): Set function_defined: after 1st function dfn.
+ (assemble_variable): Ignore global register vars.
+
+ * c-decl.c (grokdeclarator): Don't reject global register decls.
+ (builtin_function): Use make_decl_rtl, not make_function_rtl,
+ to avoid setting function_defined.
+
+ * regclass.c (init_reg_class{,_1}): Init and process global_regs.
+ They are fixed, and call-clobbered.
+
+ * flow.c (insn_dead_p): Storing one of global_regs is never dead.
+ (mark_used_regs, mark_set_1): A global reg is never dead.
+
+ * cse.c (canon_hash): Consider global regs volatile.
+
+
+ * expr.c (do_jump): Know how to invert jumps which are sequences.
+
+ * dbxout.c, symout.c, final.c: On USG, use our own stab.h.
+
+ * tm-i386gas.h: New file for GAS on sysV (with DBX debugging info).
+
+ * m68k.md (bfchg and bfins patterns): Make # alternatives uniform.
+ * alliant.md: Likewise; also in movdf patterns.
+
+ * genoutput.c (output_epilogue): Spurious `break' disabled
+ error check for mismatched # of alternatives.
+ (output_epilogue, scan_operands): Errors in input are not fatal.
+
+ * flow.c (regno_uninitialized): Avoid crash if no basic blocks.
+
+ * sparc.md (move insns): Delete special patterns that handled
+ symbolic constant addresses. The main move patterns now do this.
+ * output-sparc.c (output_store, output_load_{fixed,floating}):
+ Subroutines to do the work for this; has the code from those
+ special patterns. Also fixed bugs in testing against cc_status.mdep.
+
+ * output-sparc.c (output_delay_insn): Clear the CC status.
+ This is necessary for %g1 in the case of a call insn.
+
+ * tm-i386.h (REG_CLASS_CONTENTS): INDEX_REGS is now all but ESP.
+ (REGNO_REG_CLASS): Corresponding change.
+ (REG_CLASS_FROM_LETTER): Eliminate `x' letter since not used.
+
+ * optabs.c (emit_cmp_insn): New arg ALIGN, used for BLKmode.
+ All callers changed.
+ Pass alignment (as rtx) as 4th arg to cmpstr gen functions.
+ Use cmpstrhi if available.
+ * expr.c (compare): Only this call passes a nonzero ALIGN.
+
+ * expr.c (emit_push_insn, emit_block_move): Pass alignment (as rtx)
+ as 4th arg to movstr gen functions.
+
+Tue Jan 10 23:43:05 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stor-layout.c (layout_type): Use BLKmode, if a struct isn't
+ aligned well enough for a scalar mode.
+
+ * expr.c (expand_expr): For static CONSTRUCTOR, ensure memory
+ address is made valid.
+
+ * genpeep.c (match_rtx): For MATCH_OPERATOR, set max_opno, n_operands.
+
+Mon Jan 9 17:07:56 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * varasm.c (output_constant): Split strings every 2000 chars.
+
+ * stmt.c (expand_end_case): Test bkwds, handling constant switch arg.
+
+Fri Jan 6 09:11:20 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * output-sparc.c (output_delay_insn): Add parens to first if test.
+ (output_move_double): Turn addr for `sethi' into MEM for %m.
+
+ * c-typeck.c (convert_for_assignment): move test for ERROR_MARK.
+
+ * c-parse.y (unary_expr): Allow cast_expr as arg of unary op.
+
+ * stmt.c (expand_decl): Don't abort if FUNCTION_DECL lacks rtl;
+ assemble_variable is called after this.
+
+ * c-parse.y (primary -> identifier): Separate case for undeclared
+ identifier outside of functions; avoids confusing error msgs.
+
+Thu Jan 5 01:24:47 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Makefile (install): Ignore errors in all `if' commands.
+ Create $(libdir) if nec.
+
+ * Makefile (insn-*.[ch]): Put in empty commands. May help Ultrix Make.
+
+ * stmt.c (emit_case_nodes): New arg UNSIGNEDP says do unsigned jumps.
+ Arg INDEX is an rtx, not a tree.
+ (expand_end_case): Pass that arg.
+ (node_has_{low,high}_bound): check for overflow, avoid confusion.
+
+Wed Jan 4 02:24:21 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * sparc.md (movdi, movdf): Use `&' constraint when loading reg from;
+ otherwise can lose on (set (reg X) (mem (plus (reg X) (reg X+1)))).
+
+ * expr.c (emit_push_insn): For memory scalar partially going in regs,
+ copy each word to reg before pushing. Avoids memory-to-memory move.
+ Make the displaced address valid.
+ Also delete unfinished STACK_OFFSET variable.
+
+ * c-parse.y (check_newline): Read just one #-directive and return.
+ This prevents lossage when toplev.c calls it to get the main input file
+ name, and it gets a following #ident as well.
+
+ * c-decl.c (lang_decode_option): Set warn_cast_qual for -Wcast-qual.
+ * c-typeck.c (build_c_cast): Issue some warnings if set.
+
+ * tm-3b1.h (ASM_OUTPUT_CASE_LABEL): Missing `;'.
+
+Tue Jan 3 18:07:31 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (emit_library_call): Do force_operand on each operand
+ if it isn't a REG, MEM or constant.
+ Do this, or mode conversions, earlier, before loading any hard regs.
+
+ * m68k.md (addsi3) [SGS]: Put a zero displacement in the `lea'.
+
+ * c-typeck.c (default_conversion): Don't lose `const' or `volatile'
+ when converting array type to pointer.
+
+Mon Jan 2 01:18:01 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expmed.c (store_bit_field, store_fixed_bit_field): New arg,
+ alignment in bytes the structure is known to have.
+ (store_fixed_bit_field): Handle working in halfwords,
+ in case the pointer isn't known to have fullword alignment.
+ * expmed.c (extract_bit_field, extract_fixed_bit_field): likewise.
+ (extract_bit_field): fix unsignedp arg to extract_fixed_bit_field.
+ * expr.c (store_field): New arg, passed to {store,extract}_bit_field
+ (expand_assignment, store_constructor): Pass that arg.
+ (expand_expr): Pass new arg to extract_bit_field.
+
+ * m68k.md (casesi_2 recognizer): Offset always 6 for 3b1.
+
+ * c-typeck.c (convert_for_assignment): Strip from rhs no-op NOP_EXPRs
+ put on by build_c_cast (to make the result not an lvalue).
+ (build_modify_expr, build_compound_expr): likewise.
+ (build_conditional_expr): likewise.
+ (actualparameterlist, build_function_call): likewise.
+ (default_conversion, truthvalue_conversion): likewise.
+
+ * loop.c (move_movables): If reg has moved out of one loop,
+ divide `savings' by 2.
+
+Sun Jan 1 03:00:07 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-typeck.c (truthvalue_conversion): Distribute the conversion
+ into the arms of a COND_EXPR.
+
+ * cse.c (fold_rtx): Don't fold a MINUS with VOIDmode
+ into a symbolic constant--it's incorrect.
+
+ * cse.c (cse_insn): If SRC is a subreg with known value, simplify it.
+
+ * integrate.c (copy_rtx_and_substitute): Allow a ref to a part of
+ MEM parm whose actual parm is a reg, provided it refs
+ the low part of the MEM.
+ (function_cannot_inline_p): Don't inline functions which have
+ aggregate parameters and take their addresses. This could produce
+ refs to non-low-parts, which copy_rtx_and_substitute can't handle.
+
+ * c-typeck.c (build_modify_expr): If lhs is COND_EXPR,
+ make a COMPOUND_EXPR to ensure the rhs is computed before the branch.
+
+ * Implement -pipe.
+ * gcc.c (do_spec_1): `|' is now a special delimiter
+ which goes in the argbuf.
+ When a newline is preceded by a `|', delete it if no -pipe.
+ Otherwise, don't execute yet, and keep scanning.
+ (do_spec): At end, if we have stuff with no newline, execute it.
+ (handle_braces): Implement %{|foo:...}.
+ (execute): If argbuf contains some `|'s, run several processes
+ and pipe them together.
+ (pexecute): new subroutine to make one of the processes.
+ (find_exec_file): new fn to search for program to execute.
+ (record_temp_file): new arg FAIL_ONLY.
+ (store_arg): 2nd arg == 3 means delete file on failure.
+ This is used for output files.
+ (delete_temp_files): delete certain files only if fail.
+
+ * cccp.c (include_defaults): /usr/include before /usr/local/include.
+
+ * recog.c (asm_noperands): 1-off in loop checking CLOBBERS
+ when no output operands and PARALLEL.
+
+ * expmed.c (negate_rtx): Sign-extend the high bits rather than clear.
+
+ * cse.c (fold_rtx): fold negation of real values.
+ (fold_cc0): fold comparisons on real values.
+
+ * Makefile (install): Use $(INSTALL) for gcc.1 and files in USER_H.
+
+ * Handle floating-point problems for cross-compilation.
+
+ * real.h (CONST_DOUBLE_LOW, etc.): new macros to access CONST_DOUBLE.
+ * varasm.c (immed_double_const, decode_rtx_const): Use these.
+ ({force,clear}_const_double_mem): Likewise.
+ * output-*.c (output_move_double): Use these.
+ * output-m68k.c (standard_{68881,sun_fpa}_constant_p): Likewise.
+ * tm-*.h (PRINT_OPERAND): Use these.
+ * output-i386.c (print_operand): Use these.
+ * final.c (output_addr_const): Likewise.
+ * emit-rtl.c (gen_rtx): Delete special code for CONST_DOUBLE.
+
+ * real.h (union real_extract): Portable type for storing real as ints.
+ * varasm.c (immed_double_const, decode_rtx_const): Use these.
+
+ * varasm.c (immed_real_const_1, decode_rtx_const):
+ Don't assume REAL_VALUE_TYPE is 2 ints long.
+ * emit-rtl.c (init_emit_once): Likewise.
+
+ * real.h (REAL_VALUE_TYPE): Define as `double' if not defined.
+ (REAL_IS_NOT_DOUBLE): Define this if default REAL_VALUE_TYPE not used.
+ (REAL_VALUES_EQUAL, REAL_VALUES_LESS): Define, if not already defined.
+ (REAL_VALUE_LDEXP, REAL_VALUE_ATOF): Likewise.
+ * tree.h (struct tree_real_cst): Use REAL_VALUE_TYPE for the value.
+
+ * rtl.c (init_rtl): Increase length of CONST_DOUBLE if REAL_VALUE_TYPE
+ needs more space. Change the rtx_format element to match.
+ * varasm.c (immed_real_const_1): 1st arg now has REAL_VALUE_TYPE.
+ (force_const_mem): Assume a CONST_DOUBLE contains REAL_VALUE_TYPE.
+ * emit-rtl.c (init_emit_once): Likewise.
+ And use REAL_VALUE_ATOF to get a floating zero.
+ * optabs.c (expand_float): Use REAL_VALUE_TYPE, REAL_VALUE_LDEXP.
+ * c-parse.y (yylex): Likewise, and use REAL_VALUE_ATOF.
+ * fold-const.c (split_tree): Don't accept REAL_CSTs.
+ (combine, fold_convert, fold): Use REAL_ARITHMETIC if defined;
+ else don't fold reals if they are not doubles.
+ * tree.c (build_real_from_int_cst): Likewise.
+ * print-tree.c (dump) [REAL_IS_NOT_DOUBLE]: output float value
+ in hex, since we don't know how to do it right.
+
+Sat Dec 31 14:15:13 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * optabs.c (init_optabs): Handle new macros {U,}MULSI3_LIBCALL,
+ DIVSI3_LIBCALL, MODSI3_LIBCALL.
+ * tm-sparc.h: Define {,U}{MUL,DIV,MOD}SI3 to call Sun's library direct.
+
+ * tm-sun3-nfp.h, tm-sun3-fpa.h: New files.
+
+Fri Dec 30 00:14:36 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (main): Certain envvars specify a file to write deps info to.
+
+ * toplev.c (compile_file): Warn about undefined fns declared static.
+
+ * m68k.md (casesi_2 recognizer) [SGS] RTX_INTEGRATED_P test backwards.
+ * tm-3b1.h (ASM_OUTPUT_CASE_LABEL): Likewise. Also missing `\'.
+
+ * reload1.c (count_occurrences): New function.
+ (choose_reload_targets): Don't delete a reload if the same reg
+ is used elsewhere in the current insn.
+ (delete_output_reload): code split out from choose_reload_targets.
+
+ * c-typeck.c (build_c_cast): Always put on some operator,
+ so the cast is never an lvalue for strict ANSI.
+
+ * c-typeck.c (initializer_constant_valid_p): Don't depend on
+ distinction between NOP_EXPR and CONVERT_EXPR.
+
+ * c-convert.c: Fns reordered; new comments.
+
+ * fold-const.c (fold): If simplifying a NOP_EXPR within a BIT_AND_EXPR,
+ return a NOP_EXPR.
+ New var TYPE holds type of expr.
+
+ * c-parse.y (expr_no_commas): Split off cast_expr and unary_expr,
+ to reject `sizeof (int) foo'.
+
+ * toplev.c (main): Treat plain `-' as input filename.
+
+ * final.c (final): If an insn's output routine returns 0,
+ it means to output the deleted compare insn immediately preceding.
+
+ * m68k.md (branch insns): Use 0 as 3rd arg for OUTPUT_JUMP
+ rather than explicitly clearing the overflow flag.
+
+ * tm-i386.h (OUTPUT_JUMP): Really use NO_OV; don't abort.
+ * i386.md (branch insns): Put real data (sometimes 0) in 3rd arg
+ of OUTPUT_JUMP. 0 means preceding test may not be deleted.
+ (lea pattern): Clear the cc's.
+ * output-i386.c (notice_update_cc): various arith insns set the cc's.
+
+Thu Dec 29 13:22:01 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stmt.c (expand_decl_init): Do nothing for static decls.
+
+ * reload.c (find_reloads_address{,_1}): Return 1 iff entire arg
+ was reloaded as a whole, else 0.
+ (find_reload): If find_reloads_address returns 1, don't let that MEM
+ satisfy a `>' or `<' constraint.
+
+ * m68k.md (cmpmb): Delete special pattern, make cmpqi handle it.
+ The special pattern couldn't handle reloading the incremented register.
+
+ * integrate.c (copy_rtx_and_substitute): Test BYTES_BIG_ENDIAN,
+ not BITS...
+
+ * combine.c (subst): Consider big-endian correction
+ when simplifying (subreg (mem ...) ...).
+
+ * reload.c (find_reloads): Don't crash if matching operands in `asm'
+ are both read or both write.
+
+ * expr.c (emit_push_insn): Address for movstr must be XINNER, not X.
+
+ * toplev.c (main): Typo parsing `-fno...'.
+
+Wed Dec 28 13:07:21 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * toplev.c (rest_of_compilation): `volatile' fns need jump_optimize
+ for warnings, as if -Wreturn-type.
+ * c-typeck.c (c_expand_return): Warn about `return' in a `volatile' fn.
+ * c-decl.c (finish_function): Warn if `volatile' fn can drop thru end.
+
+ * cse.c (canon_reg): Handle nulls as subexpressions.
+ (fold_rtx, canon_hash, mention_regs, exp_equiv_p): Likewise.
+ * loop.c (invariant_p, replace_regs, replace_call_address, may_trap_p,
+ {basic,general}_induction_var): Likewise.
+
+ * expr.c (expand_call): Handle `const' functions:
+ Local IS_CONST is 1 if function is const.
+ Attach REG_RETVAL and REG_LIBCALL notes around the call.
+ Copy fn address to register outside of those notes.
+ Likewise precompute all parms outside them.
+
+ * expr.c (expand_call): If fn is volatile, emit barrier after the call.
+
+ * c-decl.c (grokdeclarator): Allow function declared const or volatile.
+
+Sat Dec 24 18:40:12 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * integrate.c (function_cannot_inline_p): If STRUCT_VALUE_INCOMING
+ or STRUCT_VALUE is defined, can't inline functions returning BLKmode.
+
+Fri Dec 23 13:26:26 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (store_constructor): Compute array's size
+ with int_size_in_bytes.
+
+ * varasm.c (assemble_variable): If shared data, go to data section
+ before outputting an uninitialized symbol.
+
+ * tm-sequent.h (ASM_OUTPUT_ALIGN_CODE): Missing backslash.
+ (SHARED_SECTION_ASM_OP): Macro defined.
+ * tm-seq386.h (SHARED_SECTION_ASM_OP): Macro defined.
+
+ * c-typeck.c (c_expand_asm_operands): Warn if output op is `const'.
+
+ * Fix problem where a stmt expr in an initialization
+ refers to the variable it is initializing.
+ * stmt.c (expand_decl_init): New fn split out from `expand_decl'.
+ * c-decl.c (finish_decl): Call that.
+ Don't call expand_decl if already done.
+ (start_decl): Call expand_decl if type is complete already.
+
+ * Makefile (install): Typo in ranlib command.
+
+Thu Dec 22 15:57:12 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tree.h (tree_identifier): New field.
+ (IDENTIFIER_ERROR_LOCUS): Accessor for it.
+ * c-parse.y (primary => IDENTIFIER):
+ Undeclared variable gets one err msg per function it appears in.
+
+ * ns32k.md (andsi3): Delete extra brace.
+
+ * alliant.md, xm-alliant.h, tm-alliant.h, output-alliant.c: New files.
+
+ * combine.c (SUBST, SUBST_INT): Store new field `is_int'.
+ (copy_substitutions): Don't copy an int as an rtx.
+
+ * Makefile (INSTALL): Install gcc.1 properly.
+
+ * tm-ns32k.h (FUNCTION_PROLOGUE, ASM_OUTPUT_ALIGN_CODE):
+ Add missing backslashes.
+
+See file ChangeLog.0.
diff --git a/gcc/ChangeLog.10 b/gcc/ChangeLog.10
new file mode 100644
index 00000000000..a7d3837d103
--- /dev/null
+++ b/gcc/ChangeLog.10
@@ -0,0 +1,10110 @@
+Sun Mar 31 05:10:10 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * stor-layout.c (layout_decl): Don't make a bitfield an integral mode
+ if the mode of the field type is not MODE_INT.
+
+ * sched.c (schedule_block): CALL_INSNs don't affect fixed regs.
+ * flow.c (propagate_block): CALL_INSNs don't kill fixed regs.
+
+Sat Mar 30 03:32:48 1996 Torbjorn Granlund <tege@noisy.tmg.se>
+
+ * expmed.c (expand_divmod, case TRUNC_DIV_EXPR): Move some code
+ to avoid shifting by a too large count.
+
+Fri Mar 29 15:45:51 1996 Doug Evans <dje@cygnus.com>
+
+ * configure (i[3456]86-*-sunos5*): Delete, config.sub converts
+ sunos5 to solaris2.
+ (sparc-*-sunos5*): Likewise.
+ (sparc64-*-{solaris2*,sunos5*}): Delete. Stick with sparc-*-solaris2*.
+
+ * sparc.h (FUNCTION_PROFILER): Save/restore %g2 around mcount call.
+
+Fri Mar 29 14:20:31 1996 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.c (notice_update_cc): Clear cc_status if ref modified MEM.
+
+Fri Mar 29 09:37:52 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * calls.c (expand_call): Remove current_call_is_indirect nonsense.
+ Add additional argument to INIT_CUMULATIVE_ARGS.
+ (emit_library_call): Likewise.
+ (emit_library_call_value): Likewise.
+ * expr.c (expand_builtin): Likewise.
+ * function.c (assign_parms): Likewise.
+ * pa.h (hppa_args): New field "indirect".
+ (INIT_CUMULATIVE_ARGS): Initialize "indirect" field.
+ (FUNCTION_ARG): Check "indirect" field, rather than
+ "current_call_is_indirect".
+ * a29k.h (INIT_CUMULATIVE_ARGS):New arg, INDIRECT.
+ * alpha.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * arm.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * clipper.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * convex.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * dsp16xx.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * elxsi.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * fx80.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * gmicro.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * h8300.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * i370/mvs.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * i386.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * i860.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * i960.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * m68k.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * m68k/mot3300.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * m88k.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * mips.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * ns32k.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * pdp11.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * pyr.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * romp.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * rs6000.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * sh.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * sparc.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * spur.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * tahoe.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * vax.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * we32k.h (INIT_CUMULATIVE_ARGS): Likewise.
+ * mips.c (mips_expand_prologue): Add extra arg to
+ INIT_CUMULATIVE_ARGS call.
+
+Thu Mar 28 18:45:49 1996 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * alpha.c (summarize_insn): Fix three "off-by-one" bugs in loop bounds.
+
+Thu Mar 28 16:50:10 1996 Doug Evans <dje@cygnus.com>
+
+ * ginclude/inl-sparc.h: Deleted.
+
+Thu Mar 28 12:07:31 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * va-h8300.h (va_arg): Don't assume sizeof (int) == 4.
+
+ * pa.c (hppa_legitimize_address): Don't lose for
+ (plus (plus (mult (A) (shadd_const)) (B)) (C)) if
+ B + C isn't a valid address for indexing.
+ (basereg_operand): Only accept base registers after
+ cse has completed. Don't accept the frame pointer if
+ it's likely to be eliminated.
+ * pa.md (unscaled indexing patterns): Add variants with
+ basereg and index register reversed.
+ (HImode and QImode loads): Add zero extended variants.
+
+Wed Mar 27 07:45:27 1996 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * expmed.c (negate_rtx): Fix typo in previous change.
+
+Tue Mar 26 13:50:43 1996 Jim Wilson <wilson@mole.gnu.ai.mit.edu>
+
+ * calls.c (expand_call): In convert_to_mode call, use word_mode
+ not SImode.
+
+Tue Mar 26 13:44:34 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * configure: Delete unnecessary special handling of --with-cpu.
+
+Tue Mar 26 10:41:57 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * expr.c (emit_push_insn): When doing a partial push, emit
+ a CLOBBER so that flow doesn't think the entire register
+ is live.
+
+Tue Mar 26 10:00:52 1996 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * alpha.c (summarize_insn, default case): Properly use format_ptr.
+
+Tue Mar 26 09:51:09 1996 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k.h (output_move_simode_const): New extern declaration.
+ * m68k.c (output_move_simode_const): New function.
+ (singlemove_string): Call it.
+ * m68k.md (fullword move): Likewise.
+
+Tue Mar 26 05:43:06 1996 Torbjorn Granlund <tege@noisy.tmg.se>
+
+ * vax.md (insv matcher): Call CC_STATUS_INIT.
+ * vax.h (NOTICE_UPDATE_CC): Handle ZERO_EXTRACT destination.
+
+Mon Mar 25 19:18:08 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * function.c (expand_function_start): Don't set up context_display
+ unless current_function_needs_context.
+
+Mon Mar 25 18:48:18 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * fold-const.c (fold, case BIT_IOR_EXPR): Recognize rotates
+ with variable count.
+
+Mon Mar 25 18:05:28 1996 Jim Wilson <wilson@cygnus.com>
+
+ * Makefile.in (libgcc1-test): Undo Feb 12 change.
+
+Mon Mar 25 08:09:59 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * objc/thread-single.c (objc_mutex_unlock): Properly declare thread_id.
+
+Mon Mar 25 08:02:50 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * configure (m68k-motorola-sysv*): Fixed indentation.
+
+Sun Mar 24 08:16:42 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expmed.c (negate_rtx): Don't try to negate a constant ourself;
+ instead call simplify_unary_operation.
+
+Sun Mar 24 07:29:06 1996 Richard Henderson <rth@tamu.edu>
+
+ * gcc.c (process_command): Instead of hardcoding non-empty
+ switches_need_spaces to turn on "o" and "L", make the string
+ contain the switches that need the spaces.
+ * m68k/ccur-GAS.h (SWITCHES_NEED_SPACES): Change definition
+ correspondingly.
+
+Sat Mar 23 18:34:44 1996 Harry Dolan <dolan@ssd.intel.com>
+
+ * i860/paragon.h (LIB_SPEC): Always output -lmach.
+
+Sat Mar 23 18:25:39 1996 J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+ * c-typeck.c (set_init_index): Check for use outside an array
+ initializer.
+
+ * defaults.h (ASM_OUTPUT_ADDR_DIFF_ELT): Delete.
+ * pdp11.h (ASM_OUTPUT_ADDR_DIFF_ELT): Don't define.
+
+Sat Mar 23 15:55:35 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * combine.c (make_extraction): In BITS_BIG_ENDIAN correction of POS,
+ need to treat MEM and REG differently.
+
+ * sparc.h (SPARC_SIMM{10,11,13}_P): Define.
+ (SMALL_INT): Use SPARC_SIMM13_P.
+ (CONST_OK_FOR_LETTER_P): Support new letters L,M.
+ * sparc.c (arith11_operand): Use SPARC_SIMM11_P.
+ (arith10_operand): Use SPARC_SIMM10_P.
+ * sparc.md (*mov{qi,hi,si,di}_cc_sp64): Fix constraints.
+ (*mov{qi,hi,si,di}_cc_reg_sp64): Likewise.
+
+Sat Mar 23 07:47:19 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * m68k/linux.h (TRAMPOLINE_TEMPLATE): Correct first instruction.
+ * m68k/m68kv4.h (TRAMPOLINE_TEMPLATE): Likewise.
+
+Sat Mar 23 07:06:55 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * bc-emit.c (bc_emit_instruction): Add missing va_end call.
+
+ * c-typeck.c (build_array_ref): Give error if subscripting a function.
+
+Fri Mar 22 09:11:45 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * local-alloc.c (optimize_reg_copy_1): Only update reg_live_length
+ if it is non-negative.
+
+Thu Mar 21 14:42:26 1996 Doug Evans <dje@cygnus.com>
+
+ * sparc/splet.h (STARTFILE_SPEC,LINK_SPEC): Define.
+
+Wed Mar 20 17:23:18 1996 Jim Wilson <wilson@cygnus.com>
+
+ * cse.c (note_mem_written): Delete obsolete code for handling
+ (mem (scratch)).
+
+ * mips.c (mips_expand_prologue): In initialization of fnargs, delete
+ special treatment of METHOD_TYPE.
+
+Wed Mar 20 17:07:45 1996 Doug Evans <dje@cygnus.com>
+
+ * sparc/sol2.h (ASM_CPU_SPEC): Recognize -mcpu=v8plus, not v9.
+ Fix typo in ultrasparc entry.
+ * sparc.h (CPP_CPU_SPEC): Add v8plus entry.
+ (ASM_CPU_SPEC): Likewise.
+
+ * sparc.c (fcc_reg_operand): Ensure correct mode.
+ (icc_or_fcc_reg_operand): Likewise.
+ (gen_v9_scc): IF_THEN_ELSE must have a mode.
+ (print_operand): New operand code `x' for all condition codes.
+ New operand codes `c,d' for reversed conditional moves.
+ * sparc.md (movqicc,movhicc): New named patterns.
+ (movdicc): if_then_else must have a mode.
+ (movsicc,movsfcc,movdfcc,movtfcc): Likewise.
+ Change condition to TARGET_V9, not TARGET_ARCH64.
+ Fail if DImode compare and ! TARGET_ARCH64.
+ (conditional move matchers): Rewrite.
+
+Wed Mar 20 16:12:29 1996 Stan Cox <coxs@wombat.gnu.ai.mit.edu>
+
+ * i386.h (HARD_REGNO_MODE_OK): Relax QImode constraint to
+ avoid a reload problem.
+
+Wed Mar 20 13:12:22 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * pa.c (hppa_legitimize_address): Don't lose for x[n-const]
+ when n-const will not be shifted. Don't pessimize code for
+ x[n-const] when const is small.
+
+Wed Mar 20 11:42:32 1996 Markus Theissinger <Markus.Theissinger@gmd.de>
+
+ * m68k/sun3.h (LIB_SPEC): Don't link /usr/lib/bb_link.o with `gcc -a'.
+ (__bb_init_func): Deleted.
+ (BLOCK_PROFILER_CODE): Don't set macro to nothing.
+
+ * m68k/xm-sun3.h: New file.
+ * configure (m68k-sun-sunos*): Use it.
+
+ * xm-linux.h (HAVE_POPEN): New define.
+
+Wed Mar 20 11:28:37 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * m68k/linux.h (ASM_SPEC): Deleted.
+ (STRUCT_VALUE_REGNUM): Redefine as register a0.
+ (STATIC_CHAIN_REGNUM): Redefine as register a1.
+ (TRAMPOLINE_TEMPLATE): Redefine to use the right register.
+
+Wed Mar 20 08:04:34 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * libgcc2.c (__dummy): New function.
+ * Makefile.in (LIB2FUNCS): Add __dummy.
+ * expr.c (expand_builtin, case BUILT_IN_SETJMP): Call "setjmp"
+ pattern, if any.
+ Call dummy function pointed to by static chain pointer.
+ (expand_builtin, case BUILT_IN_LONJMP): Ignore second expression.
+ Set address of __dummy into static chain pointer.
+ Copy the label to return to into a pseudo earlier.
+
+ * stupid.c (last_setjmp_suid, regs_crosses_setjmp): New variables.
+ (stupid_life_analysis, stupid_mark_refs): Use them to track which
+ regs are live over a setjmp; don't allocate such regs.
+
+Tue Mar 19 22:02:07 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * cplus-dem.c (demangle_template): Fix for non-mangled pointer
+ arguments.
+
+Tue Mar 19 13:54:06 1996 Jeffrey A. Law <law@wombat.gnu.ai.mit.edu>
+
+ * pa.c (compute_frame_size): Update comments to reflect reality.
+ (hppa_expand_prologue): Don't save registers which aren't
+ used, even if it creates holes. Partially undoes changes from
+ early March.
+ (hppa_expand_epilogue): Likewise.
+
+Tue Mar 19 08:25:17 1996 J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+ * stmt.c (struct case_node): New member balance.
+ (add_case_node): New function.
+ (pushcase, pushcase_range): Use it.
+ (case_tree2list): New function.
+ (expand_end_case): Use it.
+
+Tue Mar 19 07:44:22 1996 Stephen L Moshier (moshier@world.std.com)
+
+ * regstack.c (move_for_stack_reg): Avoid stack overflow while
+ storing XFmode from fp reg to memory.
+
+Tue Mar 19 07:38:03 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * m68k.h (MASK_*): New macros.
+ (OVERRIDE_OPTIONS): Use them.
+ (TARGET_SWITCHES): Likewise.
+ Treat -m68332 like -m68000.
+
+Mon Mar 18 20:04:13 1996 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ * expmed.c (emit_store_flag): If expanding (GE X 0) will need two
+ insns, don't use subtarget for the result of the first insn.
+ Move a likely constant to the start of a condition.
+
+Mon Mar 18 19:48:14 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * m68k.h (CONST_OK_FOR_LETTER_VALUE): New constraint 'M'.
+ * m68k.c (output_function_epilogue): Restore registers using sp+
+ instead of fp(n) in leaf functions.
+ (USE_MOVQ, use_movq): Function replaced by macro.
+ * m68k.md (pushexthisi_const, movsi_const0): New names.
+ (andsi3, iorsi3): Allow only 'M', not 'K' constants, if dest is 'd'.
+
+Mon Mar 18 19:33:20 1996 Fila Kolodny <fila@ibi.com>
+
+ * i370/t-mvs: New file.
+ * configure (i370-*-mvs*): Use it.
+ * i370/mvs.h (FUNCTION_PROLOGUE): LE/370 takes 120 bytes for DSA.
+ Have only one copy of timestamp and PPA2 per object module.
+ Only have unnamed CSECT to match IBM C.
+
+Mon Mar 18 19:26:21 1996 Paul Russell (Rusty.Russell@adelaide.maptek.com.au)
+
+ * combine.c (simplify_if_then_else): Allow for case that
+ condition might no longer be a condition.
+
+Mon Mar 18 19:14:42 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-typeck.c (build_conditional_expr): If OP1 is null, set
+ both OP1 and ORIG_OP1 to IFEXP.
+
+ * c-iterate.c (iterator_loop_epilogue): Don't clear DECL_RTL
+ for a static decl.
+
+Mon Mar 18 08:02:25 1996 Stephen L Moshier <moshier@world.std.com>
+
+ * alpha.c (summarize_insn, case SUBREG, CONST_*): New cases.
+
+Sun Mar 17 16:55:00 1996 Doug Evans <dje@cygnus.com>
+
+ * combine.c (find_split_point): Handle NULL return from
+ make_extraction.
+ (make_field_assignment): Likewise.
+
+Sat Mar 16 18:56:47 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.c (substitute_in_expr, case COMPONENT_REF): Ignore
+ if inner PLACEHOLDER_EXPR has not yet been initialized.
+
+ * i386.c (standard_80386_constant_p): -0.0 is not 0.0.
+ * i386.md (insv): Restore missing end of comment.
+
+ * combine.c (make_extraction): Correct typo in force_to_mode
+ call in previous change.
+ Return 0 if pos+len out of range of want desired mode.
+
+Sat Mar 16 16:20:43 1996 David Mosberger-Tang <davidm@azstarnet.com>
+
+ * alpha.md (trap): New attribute.
+ Modify patterns for all floating-point trap generating instructions.
+ * alpha.h (CPP_SPEC): Added -mieee and -mieee-with-inexact.
+ (alpha_trap_precision, alpha_fp_rounding_mode, alpha_fp_trap_mode):
+ New enum types.
+ (target_flags, alpha_tp, alpha_fprm, alpha_fptm): New external vars.
+ (alpha_fprm_string, alpha_fptm_string, alpha_tp_string): Likewise.
+ (TARGET_IEEE{,_WITH_INEXACT,_CONFORMANT}): New macros.
+ (MASK_IEEE{,_WITH_INEXACT,_CONFORMANT}): Likewise.
+ (MASK_FP, MASK_FPREGS,
+ (TARGET_SWITCHES): Added "ieee-conformant", "ieee", and
+ "ieee-with-inexact"; use MASK symbols.
+ (TARGET_OPTIONS): New macro.
+ (OVERRIDE_OPTIONS, FINAL_PRESCAN_{INSN,LABEL}): New macros.
+ (PRINT_OPERAND_PUNCT_VALID_P): Allow operand codes for FP insns.
+ (CC1_SPEC): New macro.
+ * alpha.c (alpha_tp, alpha_fprm, alpha_fptm): New variables.
+ (alpha_tp_string, alpha_fprm_string, alpha_fptm_string
+ (trap_pending): Likewise.
+ (override_options, summarize_insn, final_prescan_insn): New functions.
+ (print_operand): Handle cases '&', '\'', ')', and '+'.
+ (output_prolog): Emit ".eflag 48" if TARGET_IEEE_CONFORMANT.
+ (output_epilog): Call final_prescan_insn before emitting epilog.
+
+ * final.c (final_scan_insn, case CODE_LABEL): Invoke
+ FINAL_PRESCAN_INSN if FINAL_SCAN_LABEL is defined.
+
+ * alpha/{linux.h,x-linux,xm-linux.h}: New files.
+ * configure (alpha-*-linux*): New case.
+ * alpha.c (output_prolog): Set alpha_function_needs_gp if profiling
+ and TARGET_PROFILING_NEEDS_GP defined.
+
+Thu Mar 14 22:28:20 1996 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.h (LEGITIMATE_OFFSET_ADDRESS_P): Fix last change.
+ * aix41.h (LINK_SPEC): add -bnoentry if shared and no explicit entry.
+
+Thu Mar 14 12:47:33 1996 Jim Wilson <wilson@cygnus.com>
+
+ * mips.h (ASM_OUTPUT_DOUBLE_INT): Use 'X' if CONST_INT and
+ HOST_BITS_PER_WIDE_INT == 64.
+
+ * mips.c (mips_expand_prologue): Change TYPE_NEEDS_CONSTRUCTING to
+ TREE_ADDRESSABLE;
+
+Thu Mar 14 11:21:37 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.h (LEGITIMATE_OFFSET_ADDRESS_P): For 32-bit mode,
+ allow TImode variables with int offsets, so that structures
+ greater than 8 bytes and less than or equal to 16 bytes can be
+ instantiated correctly.
+
+ * rs6000.c (rs6000_valid_type_attribute_p): Add exception
+ attribute for Windows NT.
+
+ * win-nt.h (ASM_OUTPUT_FUNCTION_PREFIX): Delete, merge into
+ ASM_DECLARE_FUNCTION_NAME.
+ (ASM_DECLARE_FUNCTION_NAME): Add support for exception attribute
+ setting fields 3 & 4 of the structured exception handling table.
+
+Thu Mar 14 01:53:19 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * pa.h (ASM_DECLARE_FUNCTION_NAME): Change TYPE_NEEDS_CONSTRUCTING
+ to TREE_ADDRESSABLE. From Jim Wilson.
+
+Wed Mar 13 13:40:32 1996 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * c-tree.h (warn_sign_compare): Add extern to declaration.
+
+Wed Mar 13 13:37:00 1996 Doug Evans <dje@cygnus.com>
+
+ * configure: Use cross-make and build-make if building
+ cross compiler with cross compiler.
+
+Wed Mar 13 12:00:34 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * i386/cygwin32.h (ASM_OUTPUT_ALIGN): Correct defination.
+
+ * rs6000/{win-nt,cygwin32}.h (STARTFILE_SPEC): Add crti.o before
+ all objects.
+ (ENDFILE_SPEC): Add crtn.o after all objects.
+
+ * configure (powerpcle-*-cygwin32): Use t-winnt, not t-cygin32
+ * rs6000/t-cygwin32: Delete, no longer used.
+
+ * rs6000/t-winnt ({,INSTALL_}LIBGCC): Build and install crti.o and
+ crtn.o.
+
+ * rs6000/win-nt.h (EXTRA_SECTION_FUNCTIONS): Add ctors_section and
+ dtors_section.
+ (INVOKE__main): Define, so that __main is called.
+ (ASM_OUTPUT_{CONSTRUCTOR,DESTRUCTOR}): Define to put pointers to
+ the constructor/destructor in the appropriate section.
+
+ * nt-c{i,n}.asm: New files to be linked before/after all of the users'
+ objects.
+
+Wed Mar 13 00:42:17 1996 Per Bothner <bothner@cygnus.com>
+
+ * dbxout.c (dbxout_type): Better "variant" handling to ignore
+ const/volatile but not typedef names. Improves Feb 12 change.
+
+Tue Mar 12 17:25:14 1996 David Mosberger-Tang <davidm@azstarnet.com>
+
+ * glimits.h (__LONG_MAX__): On Alpha, use 64 bit value.
+
+Tue Mar 12 15:07:49 1996 Torbjorn Granlund <tege@tmg.se>
+
+ * m68k.c (valid_dbcc_comparison_p): Don't test cc_prev_status here.
+ (flags_in_68881): New function.
+ * m68k.md (dbra peepholes): Use flags_in_68881.
+
+Tue Mar 12 13:54:15 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * sparc.md (nonlocal_goto): Emit barrier after jump.
+ (setjmp{,_64,_32}): New patterns.
+
+Tue Mar 12 12:43:27 1996 Jim Wilson <wilson@cygnus.com>
+
+ * i960.h (ROUND_TYPE_SIZE): Return round_up result instead of
+ COMPUTED.
+
+ * expr.c (expand_expr, case COMPONENT_REF): For unaligned object in
+ an aligned union, delete check for EXPAND_SUM.
+
+ * expr.h (clear_storage): Add comment terminator.
+
+Mon Mar 11 19:07:50 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * recog.c (constrain_operands, case 'V'): Don't call
+ offsettable_memref_p before reload has completed.
+
+Mon Mar 11 16:06:13 1996 Doug Evans <dje@cygnus.com>
+
+ * h8300.h (SP_AND_G_REGS): Renamed from SP_AND_G_REG.
+ (CC_DONE_CBIT): Delete.
+ (CC_OVERFLOW_0,CC_OVERFLOW_UNUSABLE,CC_NO_CARRY): Define.
+ * h8300.c (cond_string): Delete CC_DONE_CBIT handling.
+ (notice_update_cc): Delete CC_CBIT, CC_WHOOPS. Add CC_SET_ZN_C0.
+ (restore_compare_p): New function.
+ (shift_one): Use shll instead of shal so overflow bit is usable.
+ Set cc_valid bits to cc_status.flags values.
+ (emit_a_shift): Set cc_status.flags.
+ * h8300.md (attr cc): Delete whoops,cbit. Add set_zn_c0.
+ (all patterns) Update cc attr setting.
+ (tstqi,tsthi,tstsi): Delete CC_DONE_CBIT handling.
+ (addhi3,subhi3): Change define_expand to define_insn.
+ (branch_true,branch_false): Check if compare needs to be restored.
+
+Mon Mar 11 13:55:23 1996 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.h (CONST_DOUBLE_OK_FOR_LETTER_P): Add 'H' for movdi
+ patterns in 32 bit that generate 3 instructions.
+ (num_insns_constant): Add declaration.
+
+ * rs6000.c (num_insns_constant{,_wide}) Functions to determine the
+ number of insns it takes to generate an integer constant.
+ (easy_fp_constant): Allow DImode in easy constants. Use
+ num_insns_constant_wide.
+ (input_operand): Allow any CONST_{INT,DOUBLE}'s for {SI,DI}mode.
+
+ * rs6000.md (movdi): Generate a normal movdi using a CONST_DOUBLE
+ for 32 bit mode rather than using SUBREG's. For 64 bit mode,
+ break large integer constants into smaller pieces. Add various
+ define_splits to handle loading the various DImode constants.
+
+Mon Mar 11 06:54:19 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (make_extraction): Use proper mode for INNER in all cases.
+ (simplify_comparison, case ZERO_EXTRACT): For bits big endian and
+ no extzv, use BITS_PER_WORD.
+ * fx80.md, gmicro.md, i386.md, m68k.md, tahoe.md, vax.md:
+ Use proper modes and predicates for {sign,zero}_extract.
+
+Sun Mar 10 06:23:52 1996 J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+ * emit-rtl.c (free_insn): New variable.
+ (init_emit, restore_emit_status): Clear it.
+ (gen_sequence): Store insn in free_insn when sequence length is 1.
+ (make_insn_raw): Use free_insn if available and still in the
+ rtl generation phase.
+
+Fri Mar 8 15:37:31 1996 Mike Stump <mrs@cygnus.com>
+
+ * expr.c (expand_expr, case TARGET_EXPR): Delay putting the cleanup
+ on the cleanup chain until after the subexpression has been expanded.
+
+Fri Mar 8 16:14:51 1996 J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+ * i386.c (ix86_binary_operator_ok): One memory operand is OK.
+ This is independent of commutativity.
+
+Fri Mar 8 14:07:43 1996 Jim Wilson <wilson@cygnus.com>
+
+ * expr.c (store_constructor_field): Call store_field if bitpos is
+ nonzero and target is not a MEM.
+
+ * jump.c (jump_optimize): When handle a USE insn before an
+ unconditional jump, disable the optimization if the USE is the
+ only insn in the loop.
+
+ * sh.c (reg_unused_after): Return 0 if see a JUMP_INSN.
+
+Fri Mar 8 12:08:36 1996 Doug Evans <dje@cygnus.com>
+
+ * sparc/lynx.h (CPP_SPEC): Use %(cpp_cpu).
+
+ * sparc/sparc.md (move_pic_label_si,move_label_di): Rewrite length
+ attr calcs to be more conservative.
+
+Thu Mar 7 19:14:21 1996 Doug Evans <dje@cygnus.com>
+
+ * sparc/t-splet: New file.
+ * sparc/splet.h: New file.
+ * configure (sparclet-*-aout*): Use them.
+
+ * sparc.h (MASK_LIVE_G0,TARGET_LIVE_G0): Define.
+ (FIRST_PSEUDO_REGISTER): Add 1 for %icc (now 101).
+ (FIXED_REGISTERS,CALL_USED_REGISTERS): Update.
+ (FIXED_REGISTERS): %g0 is fixed by default.
+ (SPARC_{FIRST,LAST}_V9_FCC_REG): Define.
+ (SPARC_{ICC,FCC}_REG): Define.
+ (CONDITIONAL_REGISTER_USAGE): Don't fix %fcc0 if v8.
+ (REG_CLASS_CONTENTS): Reg 0 is an int reg, reg 100 is %icc.
+ (REGNO_REG_CLASS): Rewrite to use global `sparc_regno_reg_class'.
+ (REG_ALLOC_ORDER,REG_LEAF_ALLOC_ORDER,LEAF_REGISTERS): Add %icc.
+ (REG_CLASS_FROM_LETTER): Handle 'c' for FPCC_REGS in non-v9 case.
+ (REGNO_OK_FOR_{BASE,INDEX}_P): Treat %g0 as a normal reg.
+ (REG_OK_FOR_{BASE,INDEX}_P,EXTRA_CONSTRAINT): Likewise.
+ (REGISTER_NAMES): Add %icc.
+ (ADDITIONAL_REGISTER_NAMES): Use SPARC_ICC_REG.
+ * sparc.c (leaf_reg_remap): Add %icc=100.
+ (reg_or_0_operand): Don't allow 0 if TARGET_LIVE_G0.
+ (fcc_reg_operand): Renamed from ccfp_reg_operand.
+ Use SPARC_FCC_REG. Don't treat reg 0 as an fcc reg. Don't match
+ modes if `mode' argument is VOIDmode.
+ (icc_or_fcc_reg_operand): New function.
+ (gen_compare_reg): Use SPARC_FCC_REG for v8 fp compares.
+ Use SPARC_ICC_REG for int compares.
+ (eligible_for_epilogue_delay): Don't allow anything if TARGET_LIVE_G0.
+ Delete unnecessary test for %g0.
+ (emit_move_sequence): Don't emit (set (mem) (const_int 0)) if
+ TARGET_LIVE_G0.
+ (output_scc_insn): Label moved to operand 3. Condition code reg
+ moved to operand 2.
+ (sparc_mode_class): Enum C_MODE renamed to CC_MODE.
+ (hard_32bit_mode_classes): Set reg 0 to S_MODES. Add entry for %icc.
+ (hard_64bit_mode_classes): Set reg 0 to D_MODES. Add entry for %icc.
+ (sparc_regno_reg_class): New global.
+ (sparc_init_modes): Initialize it.
+ (output_cbranch): Delete fp_cond_reg argument.
+ (print_operand, MEM op): Don't print "%g0+" if TARGET_LIVE_G0.
+ (sparc_flat_eligible_for_epilogue_delay): Don't allow anything if
+ TARGET_LIVE_G0.
+ * sparc.md (live_g0): New attribute.
+ (*): Integer condition code register is now reg 100.
+ Use SPARC_ICC_REG instead of hardcoding reg 100 where possible.
+ Non-v9 floating point condition code register is now reg 96.
+ (*cmp{sf,df,tf}_{fpe,fp}_sp{32,64}): Combine v9/non-v9 cases.
+ (*{normal,inverted}_{,fp,fpe}_branch): Update call to output_cbranch.
+ (*mov{qi,hi,si}_insn): Don't use if TARGET_LIVE_G0.
+ (*mov{qi,hi,si}_insn_liveg0): New patterns.
+ (*mov{si,di,sf,df,tf}_ccfp{,e}_sp64): ccfp_reg_operand renamed to
+ fcc_reg_operand.
+ (*negdi2_sp32,negsi2,one_cmplsi2,ffssi2): Ensure %%g0 is 0 if
+ TARGET_LIVE_G0.
+ (*one_cmpldi2_sp32): Move operand 1 to rs1 and use 0 as rs2.
+ (patterns that use %g0 in rs2): Use 0 immediate value instead.
+ (patterns that read %g0): Don't use if TARGET_LIVE_G0.
+
+Thu Mar 7 15:39:16 1996 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * sh.h (PASS_IN_REG_P): Change < to <=.
+ * va-sh.h (va_start): Change __SH3E___ to __SH3E__.
+ (va_arg): Add little-endian SH3E support. Fix big-endian version
+ to work for arguments smaller than the word size.
+
+Thu Mar 7 10:37:37 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * lib2funcs.asm: Remove entry/exit routines. Move them into...
+ * ee.asm: New file. Entry/exit code.
+ * ee_fp.asm: New file. Entry/exit code with frame pointer.
+ * t-pa: Corresponding changes.
+ * t-pro: Corresponding changes.
+
+ * pa.c: Fix misc small typos/thinkos in recent changes.
+
+Wed Mar 6 17:36:03 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * cplus-dem.c (demangle_template): Fix for address-of-extern arguments.
+
+Wed Mar 6 15:12:55 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * t-pro (dp-bit rule): Fix typo.
+
+ * lib2funcs.asm (__outline_prologue): Remove frame pointer
+ support.
+ (__outline_prologue_fp): Out of line prologue with frame pointer.
+ (__outline_epilogue, outline_epilogue_fp): Similarly.
+ * pa.c (compute_frame_size): Allocate enough space to avoid holes
+ in the callee register saves. Remove some special handling of %r3.
+ (hppa_expand_prologue): Don't do an out of line prologue/epilogue
+ if it would take more insns than an inline prologue/epilogue.
+ Don't leave holes in the callee register save set.
+ (hppa_expand_prologue): Corresponding changes. Pass stack size
+ to out of line epilogue code.
+ * pa.h (FRAME_POINTER_REQUIRED): Revert last change.
+ * pa.md (outline_prologue_call): Handle outline prologues which
+ don't need frame pointers.
+ (outline_epilogue_call): Similarly.
+ * t-pro: Reenable multilib code. Build a set of libraries that
+ optimize for space.
+
+Wed Mar 6 14:28:14 1996 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * Makefile.in (USER_H): Add ginclude/va-sh.h.
+ * ginclude/stdarg.h, ginclude/varargs.h: Use va-sh.h.
+ * ginclude/va-sh.h: New file.
+
+ * sh.h (PASS_IN_REG_P): Fix typo in last change.
+
+Wed Mar 6 11:42:06 1996 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.h (enum processor_type): Remove PROCESSOR_PPC602.
+ (RTX_COSTS): Remove PROCESSOR_PPC602. PPC603 MULT cost depends
+ on constant and domain.
+ * rs6000.c (processor_target_table): 602 uses PROCESSOR_PPC603.
+ (get_issue_rate): Remove CPU_PPC602.
+ * rs6000.md (function units): Remove PPC602. Add store and
+ fpstore type attribute values. Update patterns.
+
+Tue Mar 5 18:43:43 1996 Richard Henderson <rth@tamu.edu>
+
+ * m68k/coff.h (ASM_OUTPUT_SECTION_NAME): New define.
+
+ * m68k/{aux-crt1.c,aux-crt[2n].asm}: New files.
+ * m68k/{aux-exit.c,aux-low.gld,aux-mcount.c}: More new files.
+ * m68k/{aux.h,auxgnu.h,auxstd.h}: Even more new files.
+ * m68k/{t-aux,xm-aux.h}: The rest of the new files.
+ * m68k/sgs.h (ASM_OUTPUT_CASE_END): Add missing semicolon.
+ (switch_table_difference_label_flag): Make extern.
+ * fixincludes (sys/param.h): Fix c89 __asm statements.
+ * configure (m68k-apple-aux*): New target.
+
+Tue Mar 5 17:38:19 1996 Doug Evans <dje@cygnus.com>
+
+ * sparc.md (*mov{qi,hi,si}_insn): Simplify length attribute.
+ (*movsi_insn): Use fpload/fpstore attributes for fp loads/stores.
+ %r1 -> %1 for fpstore alternative.
+ (*movsf_insn,*movsf_no_f_insn): %r1 -> %1.
+
+Tue Mar 5 17:19:17 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * expr.c (expand_expr, case *_DECL): If we make a non-local
+ reference from a function with DECL_NO_STATIC_CHAIN set, abort.
+ (expand_expr, case ADDR_EXPR): We don't need a trampoline for a
+ function with DECL_NO_STATIC_CHAIN set.
+ * function.c (lookup_static_chain): If we're checking on a function
+ that doesn't need a static chain, return 0.
+ (init_function_start): We don't need context if DECL_NO_STATIC_CHAIN
+ is set.
+ * tree.c (staticp): Check DECL_NO_STATIC_CHAIN on nested functions.
+
+Tue Mar 5 15:04:29 1996 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * sh.md (push_e, pop_e): Add TARGET_SH3E to condition.
+ * sh.h (JUMP_TABLES_IN_TEXT_SECTION): Define.
+ * sh.c (find_barrier): Set si_limit to 1018 instead of 1020, and
+ hi_limit to 510 instead of 512.
+
+Tue Mar 5 13:39:44 1996 Doug Evans <dje@cygnus.com>
+
+ * loop.c (init_loop): Use pseudo reg in add_cost computation
+ so cost doesn't vary depending on whether reg 0 happens to be
+ fixed or not.
+
+Tue Mar 5 09:32:24 1996 J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+ * reg-stack.c (record_label_references): Check for undefined label.
+
+Tue Mar 5 09:22:20 1996 Scott Christley (scottc@net-community.com)
+
+ * objc/objc-api.h, objc/runtime.h: Include objc/thread.h.
+ * objc/class.c (__objc_init_class_tables): Surround sarray access
+ with mutex lock/unlock.
+ (__objc_add_class_to_hash, objc_lookup_class): Likewise.
+ (objc_get_class, objc_get_next_class): Likewise.
+ (__objc_resolve_class_links, class_pose_as): Likewise.
+ * objc/init.c (__objc_runtime_mutux, __objc_runtime_thread_alive):
+ New variables.
+ (objc_init_statics, __objc_init_protocols): Surround sarray access
+ with mutex lock/unlock
+ (__objc_exec_class): Likewise.
+ Initialization for thread-safe global variables.
+ Declarations for thread-safe functions and global variables
+ * objc/sendmsg.c (get_imp, __objc_responds_to):
+ Surround sarray access with mutex lock/unlock.
+ (__objc_init_install_dtable): Likewise.
+ (__objc_update_dispatch_table_for_class): Likewise.
+ (__objc_print_dtable_stats): Likewise.
+ * objc/selector.c (sel_get_typed_uid, sel_get_any_typed_uid): Likewise.
+ (sel_get_any_uid, sel_get_name, sel_register_name): Likewise.
+ (sel_register_typed_name): Likewise.
+ * objc/sarray.h (union sversion): New.
+ (struct sarray): Maintain multiple versions.
+ (sarray_remove_garbage): Add prototype.
+ * objc/sarray.c (sarray_{remove,free}_garbage): New functions.
+ (sarray_at_put, sarray_new, sarray_lazy_copy):
+ Modify/copy sarray structure/data in a thread-safe manner
+ (sarray_{realloc,free}): Reallocate/free sarray structure/data in a
+ thread-safe manner.
+
+ * objc/THREADS, objc/thread.c, objc/thread.h: New files.
+ * objc/thread-{decosf1,irix,solaris,win32,single}.c: New files.
+ * objc/objc-list.h: Renamed from objc/list.h.
+ * objc/Makefile: Changes to compile new files and name renaming.
+ * objc/makefile.dos: Likewise.
+
+Tue Mar 5 07:51:31 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * bc-emit.c, bc-optab.c (free): Delete declaration of library function.
+
+ * c-decl.c (duplicate_decl): If making decl non-external, copy
+ context from old to new.
+
+Tue Mar 5 02:27:35 1996 Jeffrey A. Law <law@cygnus.com
+
+ * lib2funcs.asm (__outline_prologue): New "function".
+ (__outline_epilogue): New "function".
+ * pa.h (TARGET_SPACE): Define.
+ (target_flags): Add -mspace and -mno-space. Enable/disable
+ space saving optimizations.
+ (FRAME_POINTER_REQUIRED): Frame pointers are always required
+ when generating out of line prologues and epilogues.
+ * pa.c (compute_frame_size): Handle out of line prologues/epilogues.
+ (hppa_expand_prologue): If optimizing for space, emit an out of
+ line prologue.
+ (hppa_expand_epilogue): Similarly.
+ (override_options): Optimizing for space is not compatable with
+ either profiling or PIC code generation.
+ * pa.md (outline_prologue_call): New pattern.
+ (outline_epilogue_call): Likewise.
+
+Tue Mar 5 02:17:32 1996 Doug Evans <dje@cygnus.com>
+
+ * sparc.md (*cmp{si,di}_insn): %r0 -> %0.
+ (DFmode move define_split): Ensure registers not extended v9 fp regs.
+ (*mov{sf,df,tf}_cc_reg_sp64): %r3 -> %3.
+
+Mon Mar 4 18:46:37 1996 Manfred Hollstein <manfred@lts.sel.alcatel.de>
+
+ * Makefile.in (CRT0STUFF_T_CFLAGS): New macro.
+ (stamp-crt0, crt0.o, mcrt0.o): New goals.
+ (STAGESTUFF): stamp-crt0 added.
+
+ * collect2.c (main): Check new define DEFAULT_A_OUT_NAME.
+
+ * m68k.c (print_operand): Emit .l as scale factor #ifdef MOTOROLA.
+ * m68k/mot3300-crt0.S, m68k/mot3300Mcrt0.S: New files.
+ * m68k/mot3300g.h: Deleted.
+ * m68k/mot3300.h (FUNCTION_PROFILER): Emit label references
+ corresponding to those generated by ASM_OUTPUT_INTERNAL_LABEL.
+ (MOTOROLA, MOTOROLA_BSR, ...): Define #ifndef USE_GAS.
+ (ASM_SPEC): Define properly #ifdef USE_GAS.
+ (LIB_SPEC): -L/usr/lib/libp deleted.
+ (STARTFILE_SPEC): -L/usr/lib/libp added.
+ (DEFAULT_A_OUT_NAME): Define.
+ (LINK_SPEC): Pass -v if GNU ld is used.
+ (LOCAL_LABEL_PREFIX): Local labels start with .L using GAS, else L%.
+ (USER_LABEL_PREFIX): Undefine.
+ (FUNCTION_PROFILER): Call asm_fprintf instead of normal fprintf.
+ (ASM_APP_ON, ASM_FILE_START): GAS supports it.
+ (CTORS_.../DTORS_...): Define if GNU ld is used.
+ (ASM_FILE_START): Define properly for Motorola and GNU as syntax.
+ (TARGET_VERSION): Re-define only #ifndef USE_GAS.
+ (CALL_USED_REGISTERS): Deleted.
+ (GLOBAL_ASM_OP): Re-define only #ifndef USE_GAS.
+ (ASM_{LONG,SHORT,CHAR,BYTE,BYTE_OP}): New macros.
+ (ASM_OUTPUT_{DOUBLE,LONG_DOUBLE,FLOAT,INT,SHORT}): Use them.
+ (ASM_OUTPUT_{CHAR,BYTE,ASCII,FLOAT_OPERAND,DOUBLE_OPERAND}): Likewise.
+ (ALIGN_ASM_OP, SKIP_ASM_OP): New macros.
+ (ASM_OUTPUT_{ALIGN,SKIP}): Use them.
+ (ASM_OUTPUT_SOURCE_FILENAME): Define only if not using GNU as.
+ (ASM_{GENERATE,OUTPUT}_INTERAL_LABEL): Provide proper definitions for
+ Motorola and GNU as syntax.
+ (ASM_OUTPUT_ADDR_{VEC,DIFF}_ELT): Changed for portability between
+ Motorola and GNU as syntax.
+ (ASM_OUTPUT_{CASE_LABEL,OPCODE}): Define only if not using GNU as.
+ (ASM_OUTPUT_CASE_FETCH, ASM_RETURN_CASE_JUMP): New macros.
+ (ASM_OUTPUT_{COMMON,LOCAL}): Proper defns for Motorola and gas syntax.
+ (SDB_...): Define only for Motorola as.
+ (ALT_LIBM): New define to tell g++.c about an alternative name for
+ `-lm'.
+ (MATH_LIBRARY, NEED_ATEXIT, HAVE_ATEXIT, EXIT_BODY): New macros.
+ * m68k/t-mot3300, m68k/t-mot3300-{gald,gas,gld}: New files.
+ * m68k/x-mot3300-gas: New file.
+ * m68k/xm-mot3300.h (USG): Set to 1.
+ * configure (m68k-motorola-sysv*): Keep track of new different
+ combinations (--with-gnu-...), and provide proper definitions for
+ tm_file, xmake_file, tmake_file, use_collect2, and extra_parts.
+
+ * gbl-ctors.h (HAVE_ATEXIT): Define if NEED_ATEXIT is defined.
+ (atexit): Use `int atexit' prototype also if NEED_ATEXIT is defined.
+ (on_exit): According to man on_exit on the Sun it returns int not void.
+ * libgcc2.c (L_bb/atexit, onexit): Declarations replaced by
+ #include'ing "gbl-ctors.h".
+ (L_exit/atexit): New function.
+ (L_exit/exit): Call any registered functions.
+
+Mon Mar 4 18:03:38 1996 Bryan Ford (baford@cs.utah.edu)
+
+ * configure (i[3456]86-moss-msdos*): New target.
+ * i386/moss.h: New file.
+
+Mon Mar 4 17:38:50 1996 Jim Wilson <wilson@cygnus.com>
+
+ * sh.h (PASS_IN_REG_P): Don't reject BLKmode for SH3e.
+ For SH3e, do reject parameter that won't fit entirely in registers.
+
+ * sh.md (mulhisi3-2, mulhisi3-1, mulsidi3_i, umulsidi3_i,
+ smulsi3_highpart, umulsi3_highpart): Renames operands 1/2 to 0/1.
+ (mulsidi3, umulsidi3): Add support for TARGET_LITTLE_ENDIAN.
+
+ * sh.c (machine_dependent_reorg): In TARGET_RELAX code, when scan
+ forward from LINK, fail if pass a CODE_LABEL before finding INSN.
+ Fail if SCAN not INSN is a JUMP_INSN.
+
+Mon Mar 4 11:27:10 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.h (CALL_LONG): Change CALL_xx values from an enumeration
+ to bitmasks. Add CALL_LONG to support longcall attributes.
+ (rs6000_args): Call_cookie field is now an int.
+ (rs6000_longcall_ref): Add declaration.
+
+ * rs6000.c (init_cumulative_args): Add support for longcall
+ attributes to always call through a pointer.
+ (function_arg): Ditto.
+ (rs6000_valid_type_attribute_p): Ditto.
+ (rs6000_longcall_ref): New function for long calls.
+
+ * rs6000.md (call insns): Add support for longcall attributes.
+
+Mon Mar 4 08:42:14 1996 J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+ * real.c (significand_size): Don't test the modes, but their sizes.
+
+ * dwarfout.c (xstrdup): Moved from here.
+ * toplev.c (xstrdup): New function.
+ * tree.h (xstrdup): Declare.
+ * bc-emit.c (bc_xstrdup): Delete.
+ * expr.c (bc_strdup): Delete.
+ (bc_load_externaddr_id): Use xstrdup instead of bc_xstrdup.
+ * function.c (bc_expand_function_start): Likewise.
+ * 1750a.c (strdup): Delete.
+ (float_label): Use xstrdup instead of strdup.
+ * 1750a.h (xstrdup): Declare instead of instead of strdup.
+ (ASM_OUTPUT_LABEL): Use xstrdup instead of strdup.
+ (FIX_FRAME_POINTER_ADDRESS): Don't use DEPTH in string.
+
+Mon Mar 4 08:23:23 1996 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * xm-we32k.h (NO_WAIT_H): Deleted.
+
+ * collect2.c: Never include wait.h.
+
+Sat Mar 2 22:43:07 1996 Torbjorn Granlund <tege@spiff.gnu.ai.mit.edu>
+
+ * configure (code for making links): Work around sh bug on FreeBSD.
+
+Sat Mar 2 13:40:29 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * h8300.h (BIGGEST_FIELD_ALIGNMENT): Replace uses of
+ TARGET_ALIGN_STRUCT_300 with TARGET_ALIGN_300.
+ (BIGGEST_ALIGNMENT): Likewise.
+
+Sat Mar 2 08:04:50 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * calls.c (expand_call): If passing by invisible ref, not const.
+
+ * sparc.c (SKIP_CALLERS_UNIMP_P): Make agree with test used in call.
+
+ * expr.c (do_jump, case COMPOUND_EXPR): Call preserve_temp_slots.
+
+ * fold-const.c (fold, case *_DIV_EXPR): Ignore SAVE_EXPR if has RTL.
+
+Fri Mar 1 17:59:17 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * optabs.c (emit_cmp_insn): Immediately copy the return
+ value from the library call into a pseudo register.
+ (emit_float_lib_cmp): Likewise.
+
+Fri Mar 1 14:37:40 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/sysv4.h (BSS_SECTION_ASM_OP): Define.
+ (*_SECTION_ASM_OP): Change tab after .section into a space.
+ (ASM_OUTPUT_INT): Ditto.
+ (ASM_OUTPUT_ALIGNED_LOCAL): Rewrite to use bss_section.
+ (ASM_OUTPUT_ALIGNED_BSS): Define to use ASM_GLOBALIZE_LABEL and
+ ASM_OUTPUT_ALIGNED_LOCAL.
+
+ * rs6000/win-nt.h (BSS_SECTION_ASM_OP): Define.
+ (ASM_OUTPUT_ALIGNED_LOCAL): Define.
+ (ASM_OUTPUT_LOCAL): Don't define any more.
+ (ASM_OUTPUT_ALIGNED_BSS): Define to use ASM_GLOBALIZE_LABEL and
+ ASM_OUTPUT_ALIGNED_LOCAL.
+
+Thu Feb 29 17:33:12 1996 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * c-typeck.c (push_init_level): When output padding to align structure
+ field, set constructor_unfilled_fields.
+
+ * dbxout.c (dbxout_type, case METHOD_TYPE): Add CHARS (1) call
+ after emitting second '#' character.
+
+Thu Feb 29 13:59:27 1996 Doug Evans <dje@charmed.cygnus.com>
+
+ * h8300.h (ASM_OUTPUT_BSS): Define.
+ * m68k/coff.h (BSS_SECTION_ASM_OP): Define.
+ (ASM_OUTPUT_ALIGNED_BSS): Define.
+ * m68k/m68k-aout.h (BSS_SECTION_ASM_OP): Define.
+ (ASM_OUTPUT_BSS): Define.
+
+Thu Feb 29 13:39:39 1996 Per Bothner <bothner@cygnus.com>
+
+ * varasm.c (compare_constant_1): For a SET_TYPE CONSTRUCTOR,
+ first extract and compare the set length.
+
+ * varasm.c (record_constant_1): For SET_TYPE CONSTRUCTOR,
+ permanent_obstack.next_free is *end* of available space.
+
+Thu Feb 29 13:14:14 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * pa.h (TARGET_SWITCHES): Add new flags "-mlong-load-store" and
+ "-mno-long-load-store".
+ (TARGET_LONG_LOAD_STORE): Define.
+ * pa.md (symbolic high part): Handle TARGET_LONG_LOAD_STORE.
+
+Thu Feb 29 11:39:30 1996 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.md (cmpxf*): XF compare cannot have mem operands.
+ (casesi expand): Put (minus:SI..) into subsi3 format.
+ * i386.c (i386_return_pops_args): Cleanup extra argument
+ used as address of a returned structure.
+
+Wed Feb 28 22:24:28 1996 Doug Evans <dje@cygnus.com>
+
+ * varasm.c (enum in_section): Define in_bss if BSS_SECTION_ASM_OP
+ is defined.
+ (bss_section,asm_output_bss,asm_output_aligned_bss): New functions.
+ (assemble_variable): Delete redundant test for too large an object.
+ Rewrite test for uninitialized variables. Use new macros
+ ASM_OUTPUT{,_ALIGNED}_BSS if defined to output global uninitialized
+ but not common variables.
+ * bytecode.h (BC_OUTPUT_BSS): Define.
+ * lynx.h (EXTRA_SECTIONS): Delete in_bss.
+ (EXTRA_SECTION_FUNCTIONS): Delete BSS_SECTION_FUNCTION.
+ * svr3.h (EXTRA_SECTIONS): Likewise.
+ (BSS_SECTION_FUNCTION): Delete.
+ * convex.h (EXTRA_SECTIONS,EXTRA_SECTIONS_FUNCTIONS): Delete.
+ * dsp16xx.h (EXTRA_SECTIONS): Delete in_bss.
+ (EXTRA_SECTION_FUNCTIONS): Delete bss_section.
+ * gmicro.h (EXTRA_SECTIONS,EXTRA_SECTIONS_FUNCTIONS): Delete.
+ * i386/aix386ng.h (EXTRA_SECTION_FUNCTIONS): Delete
+ BSS_SECTION_FUNCTION.
+ * i386/att.h (BSS_SECTION_FUNCTION): Delete.
+ * i386/sco5.h (EXTRA_SECTIONS): Delete in_bss.
+ (EXTRA_SECTION_FUNCTIONS): Delete BSS_SECTION_FUNCTION.
+ (BSS_SECTION_FUNCTION): Delete.
+ * i386/seq-sysv3.h (BSS_SECTION_FUNCTION): Delete.
+ * i386/svr3gas.h (EXTRA_SECTIONS): Delete in_bss.
+ (EXTRA_SECTION_FUNCTIONS): Delete BSS_SECTION_FUNCTION.
+ (BSS_SECTION_FUNCTION): Delete.
+ * i860/paragon.h (EXTRA_SECTIONS,EXTRA_SECTIONS_FUNCTIONS): Undef.
+ * m68k/crds.h (EXTRA_SECTIONS,EXTRA_SECTIONS_FUNCTIONS): Delete.
+ (BSS_SECTION_ASM_OP): Define.
+ * m68k/m68k.h (BC_OUTPUT_BSS): Define.
+ * mips/iris6.h (EXTRA_SECTIONS): Delete in_bss.
+ * pa.h (EXTRA_SECTIONS): Delete in_bss.
+ (EXTRA_SECTION_FUNCTIONS): Delete bss_section.
+ * sparc/litecoff.h (EXTRA_SECTIONS): Delete in_bss.
+
+Wed Feb 28 14:12:25 1996 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * sh.h (FUNCTION_VALUE_REGNO_P, FUNCTION_ARG_REGNO_P): Include FP
+ registers only when TARGET_SH3E.
+ (PASS_IN_REG_P): Exclude BLKmode only when ! TARGET_SH3E.
+
+Wed Feb 28 12:03:26 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.c (rs6000_trampoline_{template,size}): Change Windows NT
+ trampoline template so it doesn't require making stack executable.
+ Add support for 64 bit systems.
+ (rs6000_initialize_trampoline): Ditto.
+
+Tue Feb 27 16:42:00 1996 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.c (print_operand): New code 'H'.
+ * rs6000.md (insv, extzv): Add DImode patterns. Use 'h'
+ consistently for masking SImode shifts.
+ (rotldi3, ashldi3, lshrdi3, ashrdi3): Use 'H'.
+ (movsf split): Generate CONST_INT instead of SUBREG.
+
+Tue Feb 27 15:02:17 1996 Doug Evans <dje@cygnus.com>
+
+ * sh.h (HANDLE_PRAGMA): Delete `return'.
+
+Tue Feb 27 08:18:12 1996 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ * arm.c (aof_text_section): Remove pseudo read-only hack. Doesn't
+ take a parameter any more.
+ * arm/aof.h (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS): Remove
+ readonly data sections.
+ (READONLYDATA_SECTION, READONLY_DATA_SECTION): Delete.
+
+ * arm.h (enum arm_cond_code): New enum.
+ (ARM_INVERSE_CONDITION_CODE): Moved here from arm.c.
+ (SELECT_CC_MODE): Call arm_select_cc_mode to do the work.
+ (PREDICATE_CODES): Add dominant_cc_register; delete
+ reversible_cc_register.
+ * arm.c (arm_current_cc): Now an enum.
+ (ARM_INVERSE_CONDITION_CODE): Moved to arm.h
+ (revsersible_cc_register): Delete.
+ (dominant_cc_register): New function.
+ (select_dominance_cc_mode): New function.
+ (arm_select_cc_mode): New function.
+ (output_return_instruction): New parameter REVERSE, used to
+ reverse the condition of a conditional return. All callers
+ changed.
+ (arm_print_operand case 'D'): Only suppress condition printing
+ if the operand is a NULL pointer.
+ (get_arm_condition_code): Now a static function returning
+ enum arm_cond_code. Handle dominance expressions. Return enum
+ values rather than integers.
+ * arm.md (*addsi3_compare0_scratch): New insn.
+ (*movsi_compare0, *cmpsi_insn, *cmpsi_shiftsi): Make sure the
+ compare has mode CC.
+ (cmp{si,sf,df,xf} expands): Just provide sufficient information
+ to allow the parameters to be matched properly.
+ (*cmpsi_negsi): Delete (of dubious validity).
+ (*cmpsi_shiftsi_swp): New pattern.
+ (*condbranch_reversed): No longer needs to check REVERSIBLE_CC_MODE.
+ (mov{si,sf,df}cc, *mov{si,sf,df}{,_hard,_soft}_insn): The mode of the
+ IF_THEN_ELSE must be appropriate to the target (not void).
+ (*and_scc): Match cc_register, not reversible_cc_register.
+ (*ior_compare_compare): Delete.
+ (split for ior_compare_compare + condjump): Delete.
+ (*impossible_cond_compare): Delete.
+ (*condition_compare_ior): Delete.
+ (*cond_move): Mode for the IF_THEN_ELSE must be SImode.
+ (*and_scc_scc): Delete.
+ (split for and_scc_scc + condjump): Delete.
+ (*impossible_cond_branch_and): Delete.
+ (*cmp_ite0, *cmp_ite1): New patterns.
+ (if_compare_not): Should be an anonymous pattern.
+ (Peephole for move and compare): Compare mode must be mode CCmode.
+ (Split pattern for comparing shifted reg then branch): Delete.
+ (*loadqi_compare): Delete, replaced with a split pattern to do
+ the same thing.
+ (*cond_move_not): Match cc_register, not reversible_cc_register.
+
+ * arm.c ({load,store}_multiple_sequence): New functions.
+ (emit_{ldm,stm}_seq): New functions.
+ * arm.md (load/store multiple peepholes): Rewrite using the above
+ functions.
+ (all patterns taking immediate_operand): If the code later assumes
+ this is a CONST_INT, then match const_int_operand instead.
+
+Mon Feb 26 17:26:13 1996 Doug Evans <dje@cygnus.com>
+
+ * sparc.md: Add sparclet scheduling parameters.
+ (compare define_insn's): Move closer to compare define_expand's.
+ (32 bit multiply patterns): Use for TARGET_SPARCLET.
+ (*smacsi,*smacdi,*umacdi): Multiply/accumulate patterns for the
+ sparclet.
+
+Sat Feb 24 19:13:29 1996 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.md (movsf split): Fix typo in last patch.
+
+Sat Feb 24 10:02:55 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * toplev.c (fatal_insn): Flush stdout/stderr.
+
+Sat Feb 24 02:03:28 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * pa.md (abssi2): Rework to avoid matching constraints.
+
+Fri Feb 23 11:21:43 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * pa.c (override_options): Warn if both PIC code generation and
+ profiling are requested.
+
+Fri Feb 23 08:47:38 1996 Richard Kenner (kenner at vlsi1)
+
+ * expr.c (expand_builtin, case BUILT_IN_SETJMP): Set CONST_CALL_P
+ on NOTE_INSN_SETJMP instead of emitting USE insns for call-saved regs.
+ * reload1.c (reload): For special CONST_CALL_P NOTE_INSN_SETJMP,
+ mark all call-saved regs as used.
+ * sched.c (sched_analyze): Record NOTE_INSN_SETJMP if no
+ CALL_INSN as prev; preserve CONST_CALL_P bit.
+ (reemit_notes): Restore CONST_CALL_P.
+
+Thu Feb 22 17:45:12 1996 Doug Evans <dje@cygnus.com>
+
+ * configure (sparclet-*-aout*): Set extra_headers.
+ * ginclude/inl-sparc.h: New file.
+
+Wed Feb 21 20:39:53 1996 Doug Evans <dje@cygnus.com>
+
+ * configure (sparc64-*-solaris2*): Merge with sparc-*-solaris2*.
+ * sparc.h (enum processor_type): Declare.
+ (sparc_cpu_attr): Define.
+ (TARGET_OPTIONS): Add -mtune=.
+ (sparc_select): Declare.
+ (sparc_cpu_string): Delete.
+ (FIRST_PSEUDO_REGISTER): Set to 100.
+ ({FIXED,CALL_USED}_REGISTERS): Merge !v9/v9 cases.
+ (CONDITIONAL_REGISTER_USAGE): Mark %g5 as fixed if !v9.
+ Mark %g1 as fixed if v9. Fix v9-only regs if !v9.
+ Mark fp{16..47} as call-saved if v9.
+ (enum reg_class): Merge !v9/v9 cases.
+ (REG_CLASS_NAMES,REG_CLASS_CONTENTS,REGNO_REG_CLASS): Likewise.
+ (REG_ALLOC_ORDER,REG_LEAF_ALLOC_ORDER,LEAF_REGISTERS): Likewise.
+ (FP_REG_CLASS_P,SPARC_REGISTER_NAMES): Likewise.
+ (REG_CLASS_FROM_LETTER): Test TARGET_V9 at runtime.
+ * sparc.c (sparc_cpu_string): Delete.
+ (sparc_select): New global.
+ (sparc_override_options): Handle -mtune=xxx.
+ * sparc.md (cpu attr): Add sparc{lite,let} implementations.
+ * sparc/sp64-sol2.h: Deleted.
+
+ * arm.md (consttable_end): Delete call to text_section.
+ (align_4): Delete call to readonly_data_section.
+
+Wed Feb 21 14:29:06 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * cplus-dem.c (demangle_template): Initialize is_bool. Correctly
+ handle 0 as a pointer value parameter.
+
+Wed Feb 21 14:13:29 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * tree.c (decl_function_context): Do decl_function_context right for
+ function-local classes.
+
+Wed Feb 21 12:42:52 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * c-typeck.c (initializer_constant_valid_p): Don't dereference
+ a null pointer on partial structure initialization.
+
+Wed Feb 21 11:49:58 1996 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.h (ASM_OUTPUT_EXTERNAL): Append section info
+ even when verbatim symbol prefix '*' present.
+ * rs6000/aix3newas.h (ASM_OUTPUT_EXTERNAL): Same.
+ * rs6000/aix41.h (ASM_OUTPUT_EXTERNAL): Same.
+ * rs6000/powerpc.h (ASM_OUTPUT_EXTERNAL): Same.
+ * rs6000/win-nt.h (ASM_OUTPUT_EXTERNAL): Same.
+
+Wed Feb 21 03:55:32 1996 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (validate_else): Don't loop given `#endif /'.
+ Handle multiple adjacent backslash-newlines correctly.
+ Accept a new parameter LIMIT to specify end of input;
+ this prevents confusion when the input contains '\0' characters.
+ (collect_expansion): Fix off-by-1 error when searching for `*/'
+ at end of a comment used for traditional token concatenation.
+ (macarg1): Fix off-by-1 error when skipping past `*/'
+ at end of comment.
+
+Tue Feb 20 16:12:31 1996 Doug Evans <dje@cygnus.com>
+
+ * hard-reg-set.h (twice unrolled GO_IF_HARD_REG_EQUAL): Add missing \.
+
+Tue Feb 20 14:21:16 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * pa.h (DBX_CONTIN_LENGTH): Define to 4000 characters.
+
+ * pa.c (hppa_expand_epilogue): Always emit a blockage insn
+ before cutting back the stack.
+
+Mon Feb 19 19:42:15 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * sparc.h (TARGET_SWITCHES): Add -m{,no-}impure-text.
+ (MASK_IMPURE_TEXT, TARGET_IMPURE_TEXT): Define.
+ (LINK_SPEC): Only add `-assert pure-text' if -mimpure-text wasn't used.
+
+Mon Feb 19 19:20:15 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * configure (sparc-aout): sparc-aout.h renamed to aout.h.
+ (sparclet-aout): Likewise.
+ (sparclite-*-aout*): Renamed from sparclite-*-*.
+ Don't set use_collect2.
+ (target_cpu_default): Set to TARGET_CPU_<cpu> for sparc.
+
+ * sparc.h (TARGET_CPU_sparc{,let,lite,64}): Define.
+ ({CPP,ASM}_DEFAULT_SPEC): Set from TARGET_CPU_foo.
+ (SPARC_ARCH64 CPP_PREDEFINES): Define __arch64__.
+ (CPP_SPEC): Add %(cpp_cpu).
+ (CPP_CPU_SPEC): Define.
+ (CC1_SPEC): Convert -m<cpu> to -mcpu=<cpu>.
+ (ASM_SPEC): Add %(asm_cpu).
+ (ASM_CPU_SPEC): Define.
+ (EXTRA_SPECS,SUBTARGET_EXTRA_SPECS): Define.
+ (OVERRIDE_OPTIONS): Call SUBTARGET_OVERRIDE_OPTIONS after
+ sparc_override_options.
+ ({MASK,TARGET}_SUPERSPARC): Delete.
+ ({MASK,TARGET}_SPARCLET): Define.
+ (MASK_ISA): Renamed from MASK_CPUS.
+ (TARGET_SWITCHES): Delete no-{v8,sparclite}.
+ (sparc_cpu,sparc_cpu_string): Declare.
+ ({SUB,}TARGET_OPTIONS): Define.
+ (FIXED_REGISTERS): Add definitions for sparc64 in 32 bit mode.
+ (CONDITIONAL_REGISTER_USAGE): Don't set fixed_regs[234] if sparc64.
+ Don't set call_used_regs[48..80] for sparc64 in 32 bit mode.
+ Don't clobber fixed_regs[234] if -ffixed- was passed.
+ (ADJUST_COST): Change test for supersparc.
+ * sparc.c (sparc_cpu_string,sparc_cpu): New globals.
+ (sparc_override_options): Set ISA and CPU from sparc_cpu_string.
+ Delete tests for v9 only switches if not v9.
+ Error if -mcpu=v9 and v9 support not compiled in.
+ * sparc/sol2.h (CPP_SPEC): Use %(cpp_cpu).
+ (ASM_SPEC): Likewise.
+ (ASM_{DEFAULT,CPU}_SPEC): Use Solaris syntax for sparc64.
+ * sparc/sysv4.h (ASM_SPEC): Add %(asm_cpu).
+ * sparc/t-sparcbare (MULTILIB_*): -mv8 renamed to -mcpu=v8.
+ * sparc/t-sparclite (MULTILIB_*): Delete msoft-float and mno-flat,
+ they're the defaults. Add -mcpu=f934 as synonym for -mfpu.
+ * va-sparc.h (__arch64__): Renamed from __sparc_v9__.
+
+ * sparc/lite.h: #include aoutos.h.
+ (TARGET_DEFAULT): Use MASK_FOO values.
+ * sparc/sp64-aout.h: #include aoutos.h.
+ (TARGET_DEFAULT): Add MASK_APP_REGS.
+ (JUMP_TABLES_IN_TEXT_SECTION,READONLY_DATA_SECTION): Delete.
+ * sparc/sp64-elf.h (TARGET_DEFAULT): Add MASK_APP_REGS.
+ (CPP_PREDEFINES): Define __arch64__.
+ * sparc/sp64-sol2.h (TARGET_DEFAULT, SUBTARGET_SWITCHES): Delete.
+ (ASM_SPEC): Delete.
+
+ * sparc.h ({MASK,TARGET}_FRW): Delete.
+ (FRAME_POINTER_REQUIRED,INITIAL_FRAME_POINTER_OFFSET,
+ BASE_{INCOMING_ARG,OUTGOING_VALUE}_REG,INCOMING_REGNO,OUTGOING_REGNO,
+ FUNCTION_{PROLOGUE,EPILOGUE},DELAY_SLOTS_FOR_EPILOGUE): TARGET_FRW
+ renamed to TARGET_FLAT.
+
+ * sparc.md (cpu attr): Add all cpu variants.
+ (negtf2,negdf2,abstf2,absdf2): Use isa attr, not arch attr, in
+ determining insn lengths.
+
+ * sparc/aout.h: Renamed from sparc-aout.h.
+ (CPP_PREDEFINES): Delete __GCC_NEW_VARARGS__.
+ Add -Acpu(sparc) -Amachine(sparc).
+
+Mon Feb 19 17:49:08 1996 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.md (movsf split): Use SUBREG, not operand_subword.
+ (movdf split): operand_subword TARGET_32BIT and new split using
+ SUBREG for TARGET_64BIT.
+ * rs6000.c (easy_fp_constant): Rewrite to not use operand_subword.
+ (input_operand): Remove final add_operand test made irrelevant by
+ Dec. 8 change.
+ (output_toc): Handle DImode values.
+
+Mon Feb 19 13:38:00 1996 Lee Iverson <leei@Canada.AI.SRI.COM>
+
+ * i386/sol2.h (SWITCH_TAKES_ARG): Restore -R.
+ * sparc/sol2.h (SWITCH_TAKES_ARG): Likewise.
+
+Mon Feb 19 08:19:00 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * hard-reg-set.h (HARD_REG macros): If more than
+ HOST_BITS_PER_WIDE_INT hard registers and less than or equal to
+ 4*HOST_BITS_PER_WIDE_INT hard registers, unroll loops by hand.
+
+Mon Feb 19 07:35:07 1996 Torbjorn Granlund <tege@tmg.se>
+
+ * rs6000.md (not:SI with assign and compare): Fix typo.
+ (not:DI with assign and compare): Likewise.
+
+Mon Feb 19 07:17:25 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * sparc.md (nonlocal_goto): No longer need USE of %o0.
+ (goto_handler_and_restore): Show uses %o0.
+
+ * combine.c (force_to_mode, case IOR): Fix typo in commuting
+ IOR and LSHIFTRT.
+
+ * alpha.c (call_operand): If in REG, only reg 27 valid.
+
+Mon Feb 19 06:57:34 1996 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ * emit-rtl.c (operand_subword): For 32-bit targets, return
+ the appropriate subword of extended precision CONST_DOUBLEs.
+
+ * arm.c (offsettable_memory_operand): New function.
+ (alignable_memory_operand): New function.
+ (gen_rotated_half_load): New function.
+ (get_arm_condition_code): Extract the mode of the comparison and
+ use it to generate the correct return value.
+ * arm.h (EXTRA_CC_MODES, EXTRA_CC_NAMES): Add CC_Zmode.
+ (SELECT_CC_MODE): return CC_Zmode if the operand is QImode. Allow LT
+ and GE comparisons in CC_NOOVmode.
+ (PREDICATE_CODES): add offsettable_memory_operand and
+ alignable_memory_operand.
+ * arm.md (*zeroextract[qs]i_compare0_scratch): Use const_int_operand
+ for operands 1 and 2.
+ (split patterns for aligned memory half-word operations): New patterns.
+ (movhi): Handle memory accesses where the alignment is known in a more
+ efficient manner.
+ (*compareqi_eq0): Use CC_Zmode.
+
+Mon Feb 19 05:34:08 1996 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * toplev.c (lang_options): Add -W{no-,}sign-compare.
+
+ * c-tree.h: Declare warn_sign_compare.
+
+ * c-typeck.c (build_binary_op): Check warn_sign_compare rather
+ than extra_warnings to decide whether to warn about comparison of
+ signed and unsigned.
+
+ * c-decl.c (c_decode_option): Handle warn_sign_compare. -Wall
+ implies -Wsign-compare.
+
+Sun Feb 18 21:13:44 1996 Pat Rankin (rankin@eql.caltech.edu)
+
+ * c-lex.c (yylex, case '0'..'9','.'): For cases '0' and '1',
+ check for single digit constant before resorting to general
+ number processing.
+
+Sun Feb 18 19:29:44 1996 J.T. Conklin <jtc@netbsd.org>
+
+ * m68k.h (TARGET_68060): New macro.
+ (TARGET_SWITCHES): Add -m68060.
+ * m68k.md (const_umulsi3_highpart): Disable for TARGET_M68060.
+ (ftruncdf2, ftruncsf2, muldf3, mulsidi3): Likewise.
+ (smulsi3_highpart, umulsi3_highpart, umulsidi3): Likewise.
+
+ * {m68k,ns32k,sparc}/netbsd.h (DBX_NO_XREFS): Removed.
+
+Sun Feb 18 13:29:56 1996 Charles M. Hannum (mycroft@netbsd.org)
+
+ * c-common.c (check_format_info): Warn about `L' if -pedantic.
+
+Fri Feb 16 20:13:23 1996 Paul Eggert <eggert@twinsun.com>
+
+ * c-typeck.c (convert_for_assignment):
+ Bring back conversion to union without a cast,
+ undoing the Jan 16 change, but with the following differences:
+ - The union must have the transparent_union attribute.
+ - The conversion must be for a function argument.
+ - Warn consistently about such conversions if pedantic.
+ - Do not warn about an assignment incompatibility for one union member
+ if another union member is compatible with no warning.
+
+Fri Feb 16 12:06:21 1996 Stan Cox <coxs@spiff.gnu.ai.mit.edu>
+
+ * i386.c (ix86_*_binary_operator*): Allow CONST_INT as operand1
+ of MINUS.
+ * i386/dgux.h (OPTIMIZATION_OPTIONS): Call optimization_options.
+
+Fri Feb 16 08:39:47 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * configure: Change stdout report when have multiple files in
+ tm_file, host_xm_file, or build_xm_file.
+ (a29k-*-bsd): Use both a29k.h and unix.h.
+ (a29k-*-udi): Rename a29k-udi.h to udi.h;
+ use a29k.h, dbxcoff.h, and it.
+ (a29k-*-vxworks): Use a29k.h, dbxcoff.h, a29k/udi.h, and a29k/vx29k.h.
+ (alpha-dec-osf[23456789]*): Use alpha.h, not osf2.h.
+ (alpha-dec-osf1.2): Use alpha.h and alpha/osf12.h.
+ (alpha-*-osf*): Add explicit assignment of tm_file.
+ * a29k/udi.h: Renamed from a29k-udi.h.
+ Don't include a29k.h or dbxcoff.h.
+ * a29k/unix.h: Don't include a29k.h.
+ * a29k/vx29k.h: Don't include a29k-udi.h.
+ * alpha.h (WCHAR_TYPE, WCHAR_TYPE_SIZE): Use unsigned int.
+ * alpha/osf2.h: Deleted.
+ * alpha/osf12.h: Don't include alpha.h.
+ (WCHAR_TYPE, WCHAR_TYPE_SIZE): Use short unsigned int.
+ * alpha/win-nt.h (WCHAR_TYPE, WCHAR_TYPE_SIZE): Use short unsigned int.
+
+Thu Feb 15 18:26:04 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/ntstack.asm (__allocate_stack): Round up length to 16
+ byte boundary.
+
+ * rs6000.md (allocate_stack): On Windows NT, call set_sp to
+ indicate to CSE stack pointer changes with call to __allocate_stack.
+ (set_sp): New pattern.
+
+Thu Feb 15 16:49:15 1996 Jim Wilson <wilson@cygnus.com>
+
+ * integrate.c (save_for_inline_copying): Allocate reg_map with size
+ based on regno_pointer_flag_length instead of max_reg+1.
+
+Thu Feb 15 07:48:34 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fixincludes (rpc/types.h): Remove spurious "ls" command.
+
+ * reload1.c (eliminate_regs, case USE): If using a register that
+ is source of elimination, show can't be eliminated.
+
+ * expr.c (expand_builtin, case BUILT_IN_SETJMP): Shows clobbers FP
+ and all caller-save registers.
+ Set current_function_has_nonlocal_goto.
+
+Wed Feb 14 13:51:55 1996 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.md (fix_truncdfsi2): Use SUBREG not operand_subword.
+ (movdi): Test HOST_BITS_PER_WIDE_INT at build time.
+ * collect2.c (scan_libraries): Append '/' to import path if missing.
+
+Wed Feb 14 09:01:55 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.md (movdi): Use HOST_WIDE_INT, not long long.
+
+Tue Feb 13 19:36:21 1996 Per Bothner <bothner@cygnus.com>
+
+ * expr.c (store_constructor): Fix flow control thinko (merge error).
+ * expr.c (store_constructor): Pass correct value to recursive call.
+
+Wed Jan 31 11:34:45 1996 Mike Stump <mrs@cygnus.com>
+
+ * expr.c (expand_expr, case TARGET_EXPR): We must always store
+ into the allocated slot for TAREGT_EXPRs.
+
+Tue Feb 13 18:27:05 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * configure (powerpc-ibm-aix3): Look for 3.2.x, not 3.2x.
+
+ * fixincludes (memory.h): Fix it also on sysV68.
+
+Tue Feb 13 17:59:03 1996 Lee Iverson <leei@Canada.AI.SRI.COM>
+
+ * gcc.c (DEFAULT_SWITCH_TAKES_ARG): New macro, from SWITCH_TAKES_ARG.
+ (SWITCH_TAKES_ARG): Use it.
+ * i386/{osfrose,sol2}.h (SWITCH_TAKES_ARG): Likewise.
+ * mips/{gnu,mips}.h (SWITCH_TAKES_ARG): Likewise.
+ * sparc/sol2.h (SWITCH_TAKES_ARG): Likewise.
+ * config/svr4.h (SWITCH_TAKES_ARG): Likewise.
+
+Tue Feb 13 17:43:46 1996 Jim Wilson <wilson@cygnus.com>
+
+ * integrate.c (save_constants_in_decl_trees): New function.
+ (save_for_inline_copying, save_for_inline_nocopy): Call it.
+
+Tue Feb 13 17:40:27 1996 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * expr.c (convert_move): Fix typo in extendqfh2 case.
+
+ * reload1.c (reload): Make some non-group code no longer
+ conditional on SMALL_REGISTER_CLASSES.
+
+Tue Feb 13 17:30:45 1996 J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+ * pdp11.c: #include flags.h
+ (output_function_prologue, function_epilogue): Remove declarations
+ of call_used_regs and frame_pointer_needed.
+
+ * c-common.c (overflow_warning): Fix typo in warning message.
+
+ * c-decl.c (finish_decl): TREE_ASM_WRITTEN says if duplicate_decls
+ modified declaration to match an outside file scope declaration.
+
+ * stmt.c (expand_end_case): Don't use ADDR_DIFF_VEC for PIC if
+ ASM_OUTPUT_ADDR_DIFF_ELT is not defined.
+ * a29k.h, romp.h (ASM_OUTPUT_ADDR_DIFF_ELT): Remove.
+
+Tue Feb 13 13:36:36 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/cygwin32.h (CPP_PREDEFINES): Do not define PPC, just
+ define __PPC__. Also define _ARCH_PPC to be compatible with the
+ other rs6000/powerpc ports.
+ * rs6000/win-nt.h (CPP_PREDEFINES): Ditto.
+
+ * rs6000/cygwin32.h (LIBGCC_SPEC): Don't define, always link in.
+ (SDB_DEBUGGING_INFO): Undef.
+ (DBX_DEBUGGING_INFO): Define.
+ (PREFERRED_DEBUGGING_TYPE): Define as DBX_DEBUG.
+
+ * rs6000/t-{cygwin32,winnt} (MULTILIB*): Remove multilib support.
+
+ * rs6000/x-cygwin32 (LANGUAGES): Delete, don't override.
+
+ * rs6000/ntstack.asm: New file to provide __allocate_stack, which
+ guarantees all pages in a dynamically allocated stack frame are
+ touched in order, so that the stack is properly grown.
+
+ * rs6000/cgywin32.asm: Delete unused file.
+
+ * rs6000/t-{cygwin32,winnt} (LIB2FUNCS_EXTRA): Add ntstack.S
+ to libgcc2 build.
+
+ * rs6000.md (allocate_stack): For NT, call __allocate_stack to
+ bump the stack if the size is large or variable.
+
+ * libgcc1-test.c (mainCRTStartup,__start): New startup functions
+ to silence more linkers.
+
+Tue Feb 13 13:30:53 1996 Jim Wilson <wilson@cygnus.com>
+
+ * expr.c (store_constructor_field): Only call change_address if
+ bitpos is nonzero.
+
+Tue Feb 13 08:21:01 1996 Fila Kolodny <fila@ibi.com>
+
+ * i370/mvs.h (CPP_SPEC): Add '-trigraphs' because IBM's h files
+ contain them.
+
+Tue Feb 13 08:17:52 1996 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
+
+ * c-typeck.c (quality_type prototype): Typo, rename as
+ qualify_type.
+ (build_binary_op): Fix precedence errors.
+ * combine.c (force_to_mode, num_sign_bit_copies, simplify_comparison):
+ Fix precedence errors.
+ * emit-rtl.c (gen_lowpart): Could return without a value.
+ * jump.c (jump_optimize): Fix potential infinite loop.
+ * reg-stack.c (record_reg_life_pat): Fix precedence error.
+ * reload1.c (emit_reload_insns): Fix precedence errors.
+ * stmt.c (bc_pushcase): Fix precedence error.
+
+Mon Feb 12 23:14:02 1996 Jason Merrill <jason@yorick.cygnus.com>
+
+ * toplev.c (rest_of_compilation): Also set RTX_INTEGRATED_P when
+ we aren't going to emit the inline just yet.
+
+Mon Feb 12 21:31:02 1996 Jim Wilson <wilson@cygnus.com>
+
+ * rtl.h (INLINE_REGNO_POINTER_FLAG, INLINE_REGNO_POINTER_ALIGN):
+ Add one to array index.
+
+Mon Feb 12 20:55:39 1996 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * configure (i[345]86-*-linux*): Set tmake_file t-linux.
+ Add crtbeginS.o and crtendS.o to extra_parts.
+ * i386/linux.h (CC1, LIB_SPEC): Deleted.
+ * config/linux.h (STARTFILE_SPEC): Add crtbeginS.o if -shared.
+ (CC1_SPEC): New.
+ (LIB_SPEC): Remove %{mieee-fp:-lieee}; use -lc_p for -profile.
+ * config/t-linux: New file.
+
+Mon Feb 12 20:42:11 1996 Randy Smith <randys@camaro.osf.org>
+
+ * i386/x-osfrose (XCFLAGS{,_NODEBUG}): Remove $(SHLIB).
+ (XCFLAGS): New variable.
+ (libdir, mandir, bindir): Delete.
+ * i386/t-osf: New file.
+ * i860/paragon.h (STARTFILE_SPEC): Make gcc find crt0.o, not loader.
+ (LIB_SPEC): Remove /usr/lib.
+ * Makefile.in (TCFLAGS): New variable.
+ (GCC_CFLAGS): Add $(TCFLAGS).
+ (LIBGCC2_CFLAGS): Add -D for __GCC_FLOAT_NOT_NEEDED.
+ (libgcc1-test): Remove -nostdlib.
+ (float.h-cross): Don't give error #ifdef __GCC_FLOAT_NOT_NEEDED.
+ * enquire.c: Define __GCC_FLOAT_NOT_NEEEDED.
+ * configure (i[3456]86-*-osfrose): Add t-osf as tmake_file.
+
+Mon Feb 12 18:43:54 1996 Oliver Kellogg (oliver.kellogg@space.otn.dasa.de)
+
+ * 1750a.c (add_1_to_mem): Corrected.
+
+Mon Feb 12 18:23:35 1996 Doug Evans <dje@cygnus.com>
+
+ * configure (sparclet-*-aout*): New configuration.
+
+Mon Feb 12 14:43:50 1996 Per Bothner <bothner@cygnus.com>
+
+ Changes to distinguish typedef from original type in debug output.
+ * tree.h (DECL_ORIGINAL_TYPE): New macro.
+ * tree.c (copy_node): Zero out type.symtab union.
+ * c-decl.c (pushdecl): Set DECL_ORIGINAL_TYPE for typedef origin.
+ * dbxout,c (dbxout_type): Don't canonicalize typedef type to base.
+
+Mon Feb 12 12:01:16 1996 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ * arm.h: (CPP_SPEC): Define __ARMEB__, __ARMEL__, and
+ __ARMWEL__ depending on the endian flags passed to the compiler.
+ (ARM_FLAG_LITTLE_WORDS): Define.
+ (TARGET_SWITCHES): Add option -mwords-little-endian.
+ (TARGET_LITTLE_WORDS): Define.
+ (WORDS_BIG_ENDIAN): Select based on the endian switches.
+ (LIBGCC2_WORDS_BIG_ENDIAN): Define based on run-time endian
+ defines.
+ * arm.c (output_move_double): Cope with both word-endian
+ alternatives. Remove extraneous parameters from calls to
+ output_mov_immediate.
+ (arm_print_operand): New print code 'Q' for the least significant
+ register of a DImode operand. Make code 'R' always print the
+ most significant register, rather than the highest numbered.
+ * arm.md (all DImode output patterns): Use print code
+ 'Q' to access the least significant word. Make sure the
+ patterns are fully aware of the word endianness.
+
+ * arm/semi.h (CPP_SPEC): Define __ARMEB__, __ARMEL__, and
+ __ARMWEL__ depending on the endian flags passed to the compiler.
+ (LINK_SPEC): Pass -EB to the linker if compiling for big-endian
+ mode.
+ (ASM_SPEC): Likewise for the assembler.
+ * arm/semiaof.h (CPP_SPEC): Define __ARMEB__, __ARMEL__, and
+ __ARMWEL__ depending on the endian flags passed to the compiler.
+
+Mon Feb 12 10:15:29 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * configure: Permit tm_file and xm_file to be a list of header
+ file names, rather than just a single file. For many targets,
+ handle --with-stabs by adding dbx.h to tm_file, rather than using
+ a different tm_file.
+ * dbx.h: New file.
+ * alpha/gdb-osf2.h, alpha/gdb-osf12.h, alpha/gdb.h: Deleted.
+ * i386/sysv4gdb.h, mips/iris{5gdb,4gl,4gdb,3gdb}.h: Likewise.
+ * mips/dec-gosf1.h, mips/news{4,5}-gdb.h, mips/svr4-t-gdb.h: Likewise.
+ * mips/ultrix-gdb.h, mips/bsd-{4,5}-gdb.h: Likewise.
+ * mips/svr{4-5,4-4,3-5,3-4}-gdb.h, mips/mips-5-gdb.h: Likewise.
+ * mips/ecoff{,l}-gdb.h, mips/mips-4-gdb.h: Likewise.
+
+Mon Feb 12 07:22:20 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * integrate.c (save_for_inline_copying): Put virtual regs into
+ new regno_reg_rtx copy.
+
+Sun Feb 11 18:53:12 1996 Torbjorn Granlund <tege@noisy.tmg.se>
+
+ * i386.md: Delete spurious integer subtract patterns.
+ Delete % from subtract operand constraints.
+
+Sun Feb 11 19:17:24 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * m68k.md (movqi): Call CC_STATUS_INIT when loading to/from
+ an address register via a data register.
+
+Sun Feb 11 08:44:49 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-common.c (check_format_info): Handle missing type in format
+ when terminated by a new `%'.
+
+Sat Feb 10 15:14:22 1996 J.T. Conklin <jtc@rtl.cygnus.com>
+
+ * cross-make (STMP_FIXPROTO): Moved from here to build-make.
+ * build-make (STMP_FIXPROTO): Moved here from cross-make.
+
+Sat Feb 10 08:39:05 1996 Oliver Kellogg (oliver.kellogg@space.otn.dasa.de)
+
+ * 1750a.md (movstrqi): Corrected.
+ (zero_extendqihi2): Taken out, let GCC synthesize.
+ (movhi-1): Added insn to move HImode small constant to memory.
+ (movhf-1): Added insn to move HFmode zero to memory.
+ (movtqf-1): Added insn to move TQFmode zero to memory.
+ (numerous insns): Taken out B (Base Reg with Index) mode.
+
+ * 1750a.c (movcnt_regno_adjust): Corrected.
+ (mov_memory_operand, zero_operand): Added.
+ (b_mode_operand): Corrected.
+ (simple_memory_operand, add_1_to_mem): Added.
+ (print_operand_address): Corrected case of 'Q' output modifier.
+
+ * 1750a.h (REG_ALLOC_ORDER): Changed back to natural order.
+ (CONST_DOUBLE_OK_FOR_LETTER_P): Added letter 'G'.
+ (EXIT_IGNORE_STACK): Set to 0.
+ (REG_OK_FOR_BASE_P, REG_OK_FOR_INDEX_P): Use corresponding REGNO_OK.
+ (MOVE_MAX, MOVE_RATIO): Defined.
+
+Sat Feb 10 08:28:12 1996 Martin Anantharaman <martin@goofy.imech.uni-duisburg.de>
+
+ * configure (m68k-*-psos*): New configuration.
+ * psos.h: New file.
+ * m68k/m68k-psos.h: New file.
+
+Sat Feb 10 08:07:52 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * sched.c (flush_pending_lists): Add new arg, ONLY_WRITE.
+ (sched_analyze_{1,2,insn}): Add new arg to flush_pending_lists.
+ (sched_analyze): Always flush pending write list for call, even const.
+
+ * integrate.c (save_for_inline_copying): Put reg_map in function's
+ maybepermanent obstack instead of using alloca; set regno_reg_rtx
+ to it; delete recently-added copying of this later.
+
+Sat Feb 10 00:49:58 1996 Doug Evans <dje@cygnus.com>
+
+ * sched.c (add_dependence): Add test for next != CODE_LABEL.
+
+Fri Feb 9 16:10:04 1996 Stan Cox (coxs@dg-rtp.dg.com)
+
+ * i386.md (fp, integer): Added function units for pentium.
+ (cmp*,mov*,add*,sub*,mul*,div*,extend*,trunc*,and*,ior*,xor*,neg*,
+ abs*,sqrt*,sin*,cos*,not*,ash*,lsh*,rot*,sub): Tightened constraints,
+ added attribute support, and made changes for new `binary' and
+ `unary' functions.
+
+ * i386.c (processor_costs): New variable.
+ (optimization_options, ix86_expand_binary_operator,
+ ix86_binary_operator_ok, ix86_expand_unary_operator,
+ ix86_unary_operator_ok, is_mul, is_div, copy_all_rtx, rewrite_address,
+ last_to_set_cc, doesnt_st_condition_code, sets_condition_code,
+ str_immediate_operand, is_fp_insn, is_fp_dest, is_fp_store,
+ agi_dependent, reg_mentioned_in_mem): New functions.
+
+ * i386.h (OPTIMIZATION_OPTIONS, ALIGN_DFmode, IS_STACK_MODE,
+ IX86_EXPAND_BINARY_OPERATOR): New macros.
+ (RTX_COSTS, REGISTER_MOVE_COST, ADJUST_BLOCKAGE) Changed for pentium.
+
+Fri Feb 9 14:47:27 1996 Doug Evans <dje@cygnus.com>
+
+ * sparc.c (sp64_medium_pic_operand): New function.
+ (move_pic_label): Delete.
+ (legitimize_pic_address): Simplify using some named patterns.
+ (finalize_pic): Add preliminary sparc64 support.
+ (emit_move_sequence): Reorganize.
+ * sparc.md (pic_lo_sum_si,pic_sethi_si,get_pc_sp32,get_pc_sp64,
+ move_pic_label_si,move_label_di,sethi_di_sp64): Make named patterns.
+ (sethi_di_sp64_const,sethi_di_medium_pic): New anonymous patterns.
+ (move_pic_label_si,move_label_di): Optimize for near labels.
+ (tablejump): Use for TARGET_MEDANY.
+ (casesi): Delete.
+
+Fri Feb 9 13:48:45 1996 Jim Wilson <wilson@cygnus.com>
+
+ * mips.md (probe+2, probe+4): New conditional move patterns.
+ (movsicc): Don't truncate comparison if it is DImode.
+
+ * sh.h (CPP_SPEC): Add defines for -m1, -m2, and -m3.
+
+Fri Feb 9 09:11:28 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * toplev.c (rest_of_compilation): Set RTX_INTEGRATED_P in
+ INLINE_HEADER iff function is inlineable.
+ * calls.c (expand_call): Test RTX_INTEGRATED_P in DECL_SAVED_INSNS.
+
+Thu Feb 8 01:11:15 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * pa.md (floatunssisf2 expander): Don't use "general_operand".
+ (floatunssidf2 expander): Likewise.
+
+Wed Feb 7 16:59:31 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/{sysv4,win-nt,netware,cygwin32}.h ({ASM,LINK}_SPEC):
+ Don't use %{V} for either linker or assembler.
+
+Tue Feb 6 17:22:29 1996 Per Bothner <bothner@cygnus.com>
+
+ * dbxout.c (dbxout_range_type): Emit non-range INTEGER_TYPE
+ as a sub-range of itself (so gdb can tell the difference).
+
+Tue Feb 6 17:01:44 1996 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.md (addsi3 and adddi3 split): Use cleaner computation
+ and portable HOST_WIDE_INT.
+ (iordi3 split): Use HOST_WIDE_INT.
+ (movdi): Add TARGET_64BIT support and generate 64 bit constants.
+ (movdi matcher, TARGET_POWERPC64): Add immediate constraint handled
+ by new define_split.
+ (allocate_stack): Use TARGET_32BIT.
+ (tablejump): Add TARGET_64BIT support using ...
+ (tablejumpsi): Rename original tablejump pattern.
+ (tablejumpdi): New pattern.
+
+Tue Feb 6 15:29:22 1996 Per Bothner <bothner@cygnus.com>
+
+ * stor-layout.c (layout_type): Use same code to layout CHAR_TYPE
+ as for INTEGER_TYPE (instead of hard-wiring in QImode).
+
+Tue Feb 6 15:13:38 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * pa.md (various patterns): Avoid using "general operand" in
+ define_insn patterns.
+
+Sun Feb 4 21:37:05 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/eabi{,sim}.h (LINK_START_SPEC): Bump the default start address
+ for the simulator to 0x10000074 so that we don't waste a page in the
+ linked file.
+
+Fri Feb 2 19:44:10 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/eabi-c{i,n}.asm (.sdata2, .sbss2): Put these in the
+ read-only section, not read-write.
+
+ * libgcc2.c (__unwind_function, rs6000/powerpc): Use _ARCH_PPC
+ being defined to indicate to use PowerPC mnemonics.
+
+ * config/rs6000/t-cygwin32 (MULTILIB*): Add software floating
+ point support.
+
+Thu Feb 1 09:10:02 1996 Steve Chamberlain <sac@slash.cygnus.com>
+
+ * {i386,rs6000}/cygwin32.{asm,h}: New templates.
+ * {i386,rs6000}/{t,x}-cygwin32: Ditto.
+ * {i386,rs6000}/xm-cygwin32.h: Ditto.
+ * configure (powerpcle-*-cygwin32, i[3456]86-*-cygwin32): New.
+
+Fri Feb 2 17:42:40 1996 Paul Eggert <eggert@twinsun.com>
+
+ * c-decl.c (finish_struct):
+ Fix typo in transparent union warning that led to core dump.
+
+ * c-parse.in (stmt): Warn about `goto *expr;' if pedantic.
+ (label): Warn about `case expr ... expr:' if pedantic.
+
+Fri Feb 2 11:05:27 1996 Doug Evans <dje@cygnus.com>
+
+ * h8300.h (TARGET_ALIGN_300): Renamed from TARGET_ALIGN_STRUCT_300.
+ (TARGET_SWITCHES): Rename -malign-struct-300 to -malign-300.
+ (BIGGEST_ALIGNMENT): Use TARGET_ALIGN_300.
+
+Fri Feb 2 08:25:49 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * flow.c (jmp_uses_reg_or_mem): Renamed from uses_reg_or_mem.
+ Don't look into condition of an IF_THEN_ELSE; also make faster.
+ (find_basic_blocks): Use new name.
+
+Fri Feb 2 06:49:56 1996 J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+ * reload.c (debug_reload): Fix typo for reload_noncombine.
+
+Thu Feb 1 21:49:02 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * pa-pro.h (TARGET_DEFAULT): Turn on TARGET_SOFT_FLOAT by
+ default for all pro targets.
+ * t-pro: Delete all multilib references.
+
+Thu Feb 1 17:50:02 1996 Doug Evans <dje@cygnus.com>
+
+ * c-lex.c (check_newline): Return result of HANDLE_PRAGMA.
+ * h8300.h (HANDLE_PRAGMA): Pass result back to caller.
+ * i960/i960.h (HANDLE_PRAGMA): Likewise.
+ * sh.h (HANDLE_PRAGMA): Likewise.
+ * nextstep.h (HANDLE_PRAGMA): Likewise.
+
+Wed Jan 31 19:26:03 1996 Doug Evans <dje@cygnus.com>
+
+ * m68k/m68k-none.h: Rewrite to use EXTRA_SPECS.
+ * m68k/vxm68k.h (CPP_SPEC): Delete.
+ (SUBTARGET_EXTRA_SPECS): Define.
+
+Wed Jan 31 15:10:59 1996 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.c (output_epilog): Fix PPC64 typos and use TARGET_32BIT.
+ (output_prolog): Same.
+ (rs6000_trampoline_template, rs6000_trampoline_size): Use TARGET_32BIT.
+ * rs6000.md (movdf TARGET_POWERPC64 matcher): Fix std typo.
+ (movdi TARGET_POWERPC64 matcher): Same.
+
+Wed Jan 31 09:46:11 1996 Richard Earnshaw (rearnshaw@armltd.co.uk)
+
+ * regs.h (regno_pointer_align, REGNO_POINTER_ALIGN): Delete from here.
+ * rtl.h (regno_pointer_align, REGNO_POINTER_ALIGN): Put them here.
+
+Wed Jan 31 08:26:12 1996 Andreas Schwab (schwab@issan.informatik.uni-dortmund.de)
+
+ * m68k/linux.h (STRICT_ALIGNMENT): Define to zero.
+ (LEGITIMATE_PIC_OPERAND_P): Match definition from m68kv4.h.
+
+ * m68k.h (TRAMPOLINE_{TEMPLATE,SIZE}): Avoid need for helper function.
+ (INITIALIZE_TRAMPOLINE): Likewise.
+ (TRAMPOLINE_ALIGNMENT): Renamed from TRAMPOLINE_ALIGN.
+ * m68k/next.h (INITIALIZE_TRAMPOLINE): Adjusted accordingly.
+
+ * m68kv4.h (STATIC_CHAIN_REGNUM): Redefine to use register a1.
+ (TRAMPOLINE_TEMPLATE): Likewise.
+
+ * m68k/linux.h, m68kv4.h (LIBCALL_VALUE): Return XFmode value in fp0.
+ * m68k.c (init_68881_table): Use SFmode for the first six
+ constants and DFmode for the seventh.
+
+ * m68k.md (movqi): Use moveq if possible.
+
+Wed Jan 31 08:18:15 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_builtin, case BUILT_IN_NEXT_ARG): Strip off
+ INDIRECT_REF when checking second arg.
+
+ * calls.c (struct arg_data, expand_call): Test STRICT_ALIGN with #if.
+
+Wed Jan 31 07:47:56 1996 Tim Wright (timw@sequent.com)
+
+ * configure (i[345]-sequent-sysv*): Change to sysv3*; add i686.
+ (i[3456]86-sequent-ptx4*, i[3456]86-sequent-sysv4*): New cases.
+ * fixinc.ptx (sys/mc_param.h): Remove embedded asm.
+ * fixinc.svr4 (__STDC__): Add one more case.
+ * i386/ptx4-i.h, ptx4.h: New files.
+
+Wed Jan 31 07:15:23 1996 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k.h (MACHINE_STATE_{SAVE,RESTORE}): Allow MOTOROLA syntax.
+
+ * m68k.md ({adddi,subdi}_sexthishl32): 'a' and 'd' versions merged
+ and fixed; do not generate 'add/sub a,m'.
+
+ * gcc.c (warn_std_ptr): Initialize with 0 instead of NULL_PTR.
+
+Tue Jan 30 13:29:05 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * dbxout.c: Don't include <string.h>.
+ Don't compare strchr result to NULL.
+
+ * config/svr4.h (ASM_FINAL_SPEC): Use %|, not ${pipe:-}.
+
+Tue Jan 30 06:48:43 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (nonzero_bits, case REG): Ignore REG_POINTER_ALIGNMENT.
+ Restore old code for SP, but use it for all pointers to
+ defined locations in the frame.
+
+Mon Jan 29 11:25:28 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * dbxout.c (dbxout_type_methods): Don't use #ifndef inside call to
+ strchr.
+
+Sun Jan 28 14:44:09 1996 Doug Evans <dje@cygnus.com>
+
+ * config/dbxcoff.h (*): #undef first.
+
+Sat Jan 27 21:46:16 1996 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.c (rs6000_sync_trampoline): Add cmpdi to 64bit case.
+ (rs6000_initialize_trampoline): CSE of Pmode to pmode.
+ * rs6000.md (movdf): Handle move between FPR and 64 bit GPR.
+ (movdi matcher): Handle SPR move to itself and add "mr." combiner.
+
+Sat Jan 27 10:06:31 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/sysv4.h (ASM_OUTPUT_ALIGNED_LOCAL): Redefine, put small
+ data items in .sbss if -msdata.
+ (SWITCH_TAKES_ARG): Add 'B', 'b', and 'V'.
+
+Sat Jan 27 07:59:25 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.h (enum built_in_function): Add BUILT_IN_{SET,LONG}JMP.
+ * expr.c: Include hard-reg-set.h.
+ (arg_pointer_save_area): New declaration.
+ (expand_builtin, case BUILT_IN_{SET,LONG}JMP): New cases.
+ * Makefile.in (expr.o): Includes hard-reg-set.h.
+ * c-decl.c (init_decl_processing): Add definitions for
+ __builtin_setjmp and __builtin_longjmp.
+ * cccp.c (initialize_builtins): Add def of __HAVE_BUILTIN_SETJMP__.
+
+ * expr.c (expand_expr, case COMPONENT_REF): Pass EXPAND_INITIALIZER
+ to recursive call.
+
+Fri Jan 26 17:24:07 1996 Doug Evans <dje@cygnus.com>
+
+ * sparc.h (sparc_arch_type): Delete.
+ ({,TARGET_}MASK_DEPRECATED_V8_INSNS): Define.
+ (ARCH64_SWITCHES): Renamed from V9_SWITCHES.
+ * sparc.c (sparc_arch_type): Delete.
+ (sparc_init_modes): Likewise.
+ (output_move_quad): Don't use ldq/stq unless TARGET_HARD_QUAD.
+ * sparc/sp64-sol2.h (TARGET_DEFAULT): Add MASK_DEPRECATED_V8_INSNS.
+ (SUBTARGET_SWITCHES): Add -m{no-,}deprecated-v8-insns.
+ * sparc.md (arch attribute): Rewrite.
+ (isa): New attribute.
+ (32 bit multiply/divide patterns): Use if TARGET_DEPRECATED_V8_INSNS.
+ (32 bit divide patterns): V9 doesn't require delay after y reg write.
+
+Fri Jan 26 12:08:43 1996 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.h (TARGET_32BIT): Define.
+ (BITS_PER_WORD, UNITS_PER_WORD): Invert so 32bit expected case.
+ (LONG_TYPE_SIZE, POINTER_BOUNDARY, PARM_BOUNDARY): Likewise.
+ (RS6000_REG_SAVE, RS6000_SAVE_AREA, RS6000_VARARGS_SIZE): Likewise.
+ (RETURN_ADDRESS_OFFSET, CASE_VECTOR_MODE, MOVE_MAX): Likewise.
+ (Pmode, FUNCTION_MODE): Likewise.
+ (LEGITIMATE_OFFSET_ADDRESS_P): Handle TARGET_64BIT.
+ (GO_IF_LEGITIMATE_ADDRESS, LEGITIMIZE_ADDRESS): Likewise.
+ (GO_IF_MODE_DEPENDENT_ADDRESS): Same.
+
+Fri Jan 26 10:37:52 1996 Stan Coxs <coxs@dg-rtp.dg.com>
+
+ * m88k.md (umulsidi3): Added for the 88110
+
+Fri Jan 26 09:35:42 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/sysv4.h (STRIP_NAME_ENCODING): Deal with names that have
+ both @ and * prefix characters.
+ (ASM_OUTPUT_LABELREF): Ditto.
+
+Thu Jan 25 10:03:34 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.h (LEGITIMIZE_ADDRESS): Rewrite to use HOST_WIDE_INT, not
+ plain int.
+ (optimize,flag_expensive_optimizations): Provide declaration for
+ expander functions.
+
+ * rs6000.md (movsi): Correct code in splitting an address into
+ load from the TOC, and add low/high integer parts. If expensive
+ optimizations, and reload hasn't started, use separate pseudo regs
+ for each step.
+
+ * rs6000.c (small_data_operand): Don't use the function
+ eliminate_constant_term, unwind code directly.
+ (input_operand): SYMBOL_REF/CONST of small data operand is valid.
+ (print_{,address_}operand): Add @sda21(0) in appropriate cases for
+ small data.
+ %L, etc. so that if the item is in small memory, the appropriate
+ relocation is used.
+ (rs6000_select{,_rtx}_section): Don't put floating point constants
+ or small strings in .sdata2 since we can't tell from the pointer
+ whether it is in the small data area or not.
+
+ * rs6000.h (EXTRA_CONSTRAINT): Add 'U' for small data references.
+ (LEGITIMATE_SMALL_DATA_P): Test explicitly for SYMBOL_REF or CONST
+ before calling small_data_operand.
+
+ * rs6000.md (movsi): Handle the addresses of small data items.
+
+ * rs6000/sysv4.h (g_switch_{value,set}): Add declarations.
+ (SDATA_DEFAULT_SIZE): Default to 8.
+ (SUBTARGET_OVERRIDE_OPTIONS): If -G was not set, set it to
+ SDATA_DEFAULT_SIZE.
+ (CC1_SPEC): Pass -G nn to the compilers.
+ (SWITCH_TAKES_ARG): Add -G nn support.
+ (LINK_SPEC): Pass -G nn to the linker.
+
+Thu Jan 25 09:16:34 1996 Doug Evans <dje@cygnus.com>
+
+ * configure (sparc64-*-solaris2*): New target.
+ * sparc.h (SPARC_{V9,ARCH64}): Default value is 0.
+ (*): Replace SPARCV9 with SPARC_{V9,ARCH64}.
+ (MASK_CPUS): Define.
+ ({MASK,TARGET}_ENV32): Delete.
+ ({MASK,TARGET}_ARCH64,TARGET_ARCH32): Define.
+ (TARGET_SWITCHES): Reset cpu flags first for each variant.
+ (CONDITIONAL_REGISTER_USAGE): If 32 bit v9 system, unfix g1-g4,
+ fix g5, and make %f48-%f80 call used.
+ * sparc/sp64-aout.h (SPARC_{V9,ARCH64}): Define.
+ (TARGET_VERSION): Define.
+ (TARGET_DEFAULT): Add MASK_ARCH64, delete MASK_ENV32.
+ (JUMP_TABLES_IN_TEXT_SECTION): Define.
+ (READONLY_DATA_SECTION): Make text_section.
+ * sparc/sp64-elf.h (SPARC_{V9,ARCH64}): Define.
+ (TARGET_DEFAULT): Add MASK_ARCH64.
+ (ENDFILE_SPEC): No longer need to check for -nostartfiles.
+ (ASM_IDENTIFY_GCC): Define as empty.
+ * sparc/sp64-sol2.h: New file.
+ * sparc.c (*): Replace TARGET_V9 with TARGET_ARCH64.
+ (hard_32bit_mode_classes): Add v9 regs.
+ (gen_v9_scc): Handle 32 bit v9 case. Call v9_regcmp_p.
+ * sparc.md (*): Replace TARGET_V9 with TARGET_ARCH64 in places
+ requiring 64 bit environment.
+ (multf3_extend): Require TARGET_HARD_QUAD.
+
+Thu Jan 25 00:33:25 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * dbxcoff.h (DBX_USE_BINCL): Define.
+ (DBX_CONTIN_LENGTH): Define if not defined.
+
+Wed Jan 24 18:00:12 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * alpha.c (alpha_write_verstamp): Only emit MS_STAMP and LS_STAMP,
+ not the extra numbers.
+
+Wed Jan 24 15:18:15 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.c (init_cumulative_args): Rewrite to use DEFAULT_ABI
+ runtime tests, instead of V.4 #ifdefs.
+ (function_arg{,_advance,_partial_nregs,_pass_by_reference}): Ditto.
+ (setup_incoming_varargs): Ditto.
+ (init_cumulative_args): Set call_cookie field to CALL_NORMAL or
+ CALL_NT_DLLIMPORT.
+ (function_arg): Add support for DLL imports.
+ (rs6000_valid_{decl,type}_attribute_p): New functions for NT
+ attributes cdecl, stdcall, dllimport, and dllexport.
+ (rs6000_comp_type_attributes): New attribute support.
+ (rs6000_set_default_type_attributes): Ditto.
+ (rs6000_dll_import_ref): Ditto.
+
+ * rs6000.h (FP_ARG_{AIX,SYSV}_MAX_REG): Move here from sysv4.h.
+ * sysv4.h (FP_ARG_{AIX,SYSV}_MAX_REG): Move to rs6000.h.
+
+ * rs6000.h (rs6000_call_cookie): New enum to describe the integer
+ that is the 2nd argument to call insns and 3rd argument to
+ call_value insns. Add support for NT DLL imports.
+ (rs6000_args): Add call_cookie field.
+ (VALID_MACHINE_{DECL,TYPE}_ATTRIBUTE): Define to call C functions.
+ ({COMP_TYPE,SET_DEFAULT_TYPE}_ATTRIBUTES): Ditto.
+ (rs6000_valid_{decl,type}_attribute_p): Add declarations.
+ (rs6000_comp_type_attributes): Ditto.
+ (rs6000_set_default_type_attributes): Ditto.
+ (rs6000_dll_import_ref): Ditto.
+
+ * win-nt.h (ASM_DECLARE_FUNCTION_NAME): Add support for dllexport
+ attribute.
+
+ * rs6000.md (call insns): Add support for NT dllimport functions,
+ and fix up NT indirect calls. Also correctly set the flag
+ rs6000_save_toc_p on NT indirect calls.
+
+ * aix41.h (LINK_SPEC): Use new extra specs to avoid separate
+ versions for native and cross compilation.
+ * rs6000.h (LINK_SPEC): Ditto.
+ * sysv4.h (LINK_SPEC): Ditto.
+
+ * rs6000.h (EXTRA_SPECS): Add link_syscalls, link_libg, link_path,
+ link_specs, and also allow target to define more with the macro
+ SUBTARGET_EXTRA_SPECS.
+ (LINK_{LIBG,SYSCALLS}_SPEC): Define as fixed pathnames if native
+ compilation, and currently nothing if cross compiling.
+ (LINK_START_SPEC): If not defined, define as empty.
+ * eabi{,sim}.h (LINK_START_SPEC): Add default -Ttext for
+ simulator.
+
+ * eabi{aix,le}.h (MULTILIB_DEFAULTS): Add -mno-sdata default.
+ * sysv4{,le}.h (MULTILIB_DEFAULTS): Ditto.
+
+ * rs6000.c (small_data_operand): New function to return true if
+ the operand lives in small data under eabi.
+ (rs6000_select{,_rtx}_section): New functions to determine whether
+ to put global and static items in the V.4/eabi small data areas if
+ -msdata.
+
+ * rs6000.h (LEGITIMATE_SMALL_DATA_P): Call small_data_operand it
+ if V.4.
+ (GO_IF_LEGITIMATE_ADDRESS): If LEGITIMATE_SMALL_DATA_P, the item
+ is a valid address.
+ (ASM_OUTPUT_LABELREF): Use fputs, not fprintf.
+ (small_data_operand): Declare function.
+
+ * sysv4.h (TARGET_SWITCHES): New switch -msdata to use V.4 and
+ eabi defined small data sections.
+ (SUBTARGET_OVERRIDE_OPTIONS): Don't allow -msdata and
+ -mrelocatable or -mcall-aix options.
+ (EXTRA_SECTION{S,_FUNCTIONS}): Add .sdata, .sdata2, and .sbss
+ sections.
+ (SELECT{,_RTX}_SECTION): Call (rs6000_select{,_rtx}_section).
+ (ASM_SPEC): The -msdata switch passes -memb to the assembler.
+ (ENCODE_SECTION_INFO): Prepend a '@' to the name, if the item
+ lives in a small data region.
+ (STRIP_NAME_ENCODING): Strip '@' in addition to '*'.
+ (ASM_OUTPUT_LABELREF): Strip a leading '@'.
+
+ * t-{ppc,eabi}gas (MULTILIB*): Add support for libraries built
+ with/without -msdata. Drop support for -mcall-aixdesc libraries.
+
+Wed Jan 24 15:18:15 1996 Kim Knuttila <krk@cygnus.com>
+
+ * rs6000/win-nt.h (LIB_SPEC): Change options to GNU ld style.
+ (From Jason Molenda)
+
+Wed Jan 24 14:32:48 1996 Jim Wilson <wilson@cygnus.com>
+
+ * reload1.c (used_spill_regs): New variable.
+ (reload): Set it.
+ * reorg.c (find_dead_or_set_registers): New function.
+ (mark_target_live_regs): Delete loop looking forward from target
+ and instead call find_dead_or_set_registers.
+ (fix_reg_dead_note): New function.
+ (fill_slots_from_thread): Call it.
+
+ * loop.c (scan_loop): Correct comment.
+ (strength_reduce): Correct comments. Don't set maybe_multiple when
+ pass branch to scan_start. Don't set not_every_iteration after
+ passing a CODE_LABEL, or after passing a branch out of the loop.
+ When outputting DEST_ADDR giv increments, put them next to the memory
+ address on machines with auto-increment addresses.
+ (record_biv): Set new field always_executed.
+ (record_giv): Set new fields always_executed and auto_inc_opt.
+ (maybe_eliminate_biv_1): Reject biv with auto_inc_opt optimization
+ in some cases.
+ * loop.h (struct induction): New fields always_executed and
+ auto_inc_opt.
+
+ * c-typeck.c (pointer_int_sum): Use TYPE_PRECISION (sizetype) not
+ POINTER_SIZE to agree with expr.c.
+
+Tue Jan 23 15:17:30 1996 Doug Evans <dje@cygnus.com>
+
+ * sparc/sol2.h (ASM_OUTPUT_ALIGNED_LOCAL): Delete, use svr4.h's.
+
+Tue Jan 23 03:28:01 1996 Paul Eggert <eggert@twinsun.com>
+
+ * cexp.y: Use preprocessor arithmetic instead of C arithmetic
+ to avoid warnings on some compilers.
+ (HOST_WIDE_INT_MASK): Remove.
+ (MAX_CHAR_TYPE_MASK, MAX_WCHAR_TYPE_MASK): New macros.
+ (yylex): Use them.
+
+Mon Jan 22 18:39:21 1996 Per Bothner <bothner@cygnus.com>
+
+ * cppexp.c (cpp_parse_expr): Set HAVE_VALUE flag for unary
+ minus, even if skip_evaluation is true.
+
+Mon Jan 22 16:53:48 1996 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.h (BIGGEST_ALIGNMENT): Increase to 64 always.
+ (BIGGEST_FIELD_ALIGNMENT): Define.
+ (GO_IF_LEGITIMATE_ADDRESS): Merge PRE_INC and PRE_DEC cases.
+ (LEGITIMIZE_ADDRESS): Use Pmode not SImode.
+ (CASE_VECTOR_MODE): Depend on TARGET_64BIT.
+ (ASM_OUTPUT_COMMON): Delete.
+ (ASM_OUTPUT_ALIGNED_COMMON): Define.
+ * rs6000/sysv4.h (BIGGEST_FIELD_ALIGNMENT): Undefine.
+ * rs6000.md (adddi3, subdi3, negsi2): New PowerPC64 patterns.
+ (ashldi3, lshrdi3, ashrdi3, anddi3, iordi3, xordi3): Same.
+ (moddi3, cmpdi, tablejump matchers): Same.
+ (divdi3): Update PowerPC64 patterns.
+ * rs6000.c (rs6000_initialize_trampoline, case ABI_AIX): Use Pmode
+ not SImode.
+
+Sun Jan 21 23:33:24 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * dbxout.c: Include <string.h>
+
+Fri Jan 19 17:17:00 1996 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * tree.h (CONSTRUCTOR_TARGET_CLEARED_P): Removed.
+ * expr.c (is_zeros_p, mostly_zeros_p): Handle SET_TYPE CONSTRUCTORs.
+ (store_constructor_field): New helper function.
+ (store_constructor): Take 'cleared' parameter.
+ (expand_expr): Fix store_constructor_call to pass 'cleared' of 0.
+
+ * expr.c (store_constructor, SET_TYPE): Fix off-by-one-error.
+ Also, devide start byte by BITS_PER_UNIT before passing to memset.
+ (store_constructor): `continue' in wrong place.
+
+ * expr.c (store_constructor): If storing into a range of array
+ elements, and the range is small, or the target it not memory,
+ unroll the loop (and use store_field, which handles REGs).
+ (store_constructor): Handle RANGE_EXPR in array index.
+
+Fri Jan 19 16:52:25 1996 Doug Evans <dje@charmed.cygnus.com>
+
+ * svr4.h (SWITCH_TAKES_ARG): Add 'x'.
+ * sparc/sol2.h (SWITCH_TAKES_ARG): Likewise.
+
+Fri Jan 19 15:18:38 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * dbxout.c (flag_minimal_debug): Initialize to 0 if both
+ NO_DOLLAR_IN_LABEL and NO_DOT_IN_LABEL are defined.
+ (dbxout_type_methods): If the mangled method name uses the special
+ C++ marker character, pass show_arg_types as 1 when calling
+ dbxout_type.
+
+Fri Jan 19 11:48:28 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/eabi-ci.asm (_SDA_BASE_): Move the default definition
+ from the .got section to the .sdata section. Do not add 32768.
+ (_SDA2_BASE_): Provide a default definition.
+
+ * rs6000/eabi-cn.asm (.got.blrl): Don't define this section any
+ more, linker now directly creates the blrl instruction at
+ _GLOBAL_OFFSET_TABLE_-4.
+
+Fri Jan 19 05:12:31 1996 Richard Earnshaw <rearnsha@armltd.co.uk>
+
+ * arm/lib1funcs.asm (__divsi3, __modsi3, __udivsi3, __umodsi3):
+ Replace with smaller, faster versions.
+
+Thu Jan 18 17:41:46 1996 Jim Wilson <wilson@cygnus.com>
+
+ * sh.c (ctype.h): Delete.
+ (regno_reg_class, reg_class_from_letter): Add SH3e support.
+ (prepare_scc_operands, broken_move, push, pop, push_regs): Likewise.
+ (calc_live_regs, sh_expand_prologue, sh_expand_epilogue): Likewsie.
+ (initial_elimination_offset, arith_reg_operand): Likewise.
+ (sh_builtin_saveregs, fp_zero_operand, fp_one_operand): New functions.
+ (sh_function_arg, sh_function_arg_partial_nregs): Delete.
+ * sh.h (CPP_SPEC, CONDITIONAL_REGISTER_USAGE): Add SH3E support.
+ (TARGET_SWITCHES, OVERRIDE_OPTIONS, FIRST_PSEUDO_REGISTER): Likewise.
+ (FIXED_REGISTERS, CALL_USED_REGISTERS, HARD_REGNO_MODE_OK): Likweise.
+ (enum reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS): Likewise.
+ (REG_ALLOC_ORDER, CONST_DOUBLE_OK_FOR_LETTER_P, NPARM_REGS): Likewise.
+ (FUNCTION_VALUE, LIBCALL_VALUE, FUNCTION_VALUE_REGNO_P): Likewise.
+ (FUNCTION_ARG_REGNO_P, CUMULATIVE_ARGS, ROUND_REG): Likewise.
+ (INIT_CUMULATIVE_ARGS, FUNCTION_ARG_ADVANCE, FUNCTION_ARG): Likewise.
+ (FUNCTION_ARG_PARTIAL_NREGS, LEGITIMATE_CONSTANT_P): Likewise.
+ (MODE_DISP_OK_4, REGISTER_MOVE_COST, REGISTER_NAMES): Likewise.
+ (DBX_REGISTER_NUMBER, enum processor_type): Likewise.
+ (SH3E_BIT, TARGET_SH3E, FPUL_REG, FIRST_FP_REG, LAST_FP_REG): New.
+ (FIRST_FP_PARM_REG, FIRST_FP_RET_REG, BASE_RETURN_VALUE_REG): New.
+ (BASE_ARG_REG, enum sh_arg_class, struct sh_args): New.
+ (GET_SH_ARG_CLASS, PASS_IN_REG_P, sh_builtin_saveregs): New.
+ (EXPAND_BUILTIN_SAVEREGS, DOUBLE_TYPE_SIZE): New.
+ (TARGET_SWITCHES): Delete broken -m3l option.
+ * sh.md (cpu, movsi_i, movsf_i, blt, bge, sle, sge): Add SH3E support.
+ (push_e, pop_e, movsi_ie, movsf_ie, addsf3, subsf3): New patterns.
+ (mulsf3, macsf3, divsf3, floatsisf2, fix_truncsfsi2): New patterns.
+ (cmpgtsf_t, cmpqesf_t, cmpsf, negsf2, sqrtsf2, abssf2): New patterns.
+ (abssf2+9, abssf2+10): Add SH3e support to peepholes
+ (abssf2+11, abssf2+12): New peepholes for SH3e.
+ * t-sh (MULTILIB_OPTIONS): Add SH3E support.
+ (MULTILIB_DIRNAMES): Define to empty.
+
+Thu Jan 18 11:29:11 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * cplus-dem.c (cplus_demangle_opname): Change type of opname
+ parameter to const char *.
+ (cplus_mangle_opname): Change return type and type of opname
+ parameter to const char *. Don't cast return value.
+ * demangle.h (cplus_demangle_opname): Update declaration.
+ (cplus_mangle_opname): Likewise.
+
+Thu Jan 18 10:07:33 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * gcc.c (extra_specs): If EXTRA_SPECS is defined, define
+ extra_specs array to hold the extra specs the machine description
+ defines.
+ (set_spec): If EXTRA_SPECS is defined, handle the extra
+ specifications.
+ (process_command, main, validate_all_switches): Likewise.
+
+ * rs6000/{rs6000.h,powerpc.h,aix41.h} ({CPP,ASM}_SPEC): Use common
+ specs with EXTRA_SPECS, only modifying things in the target that
+ needs to be modified, rather than having tons of mostly duplicate
+ definitions.
+ * rs6000/{sysv4{,le}.h,}netware.h,lynx.h,} ({CPP,ASM}_SPEC): Ditto.
+ * rs6000/eabi{le,aix}.h,aix3newas.h}} ({CPP,ASM}_SPEC): Ditto.
+
+Wed Jan 17 19:38:24 1996 Paul Eggert <eggert@twinsun.com>
+
+ * cexp.y (HOST_WIDE_INT_MASK): Renamed from LONG_MASK;
+ use HOST_WIDE_INT.
+ (HOST_WIDE_INT, HOST_BITS_PER_WIDE_INT): Put back.
+ (parse_c_expression, expression_value, parse_escape, left_shift,
+ right_shift, struct constant, exp, parse_number, yylex):
+ Replace `long' with `HOST_WIDE_INT'.
+ * cccp.c (PTR_INT_TYPE): Remove obsolete define to `long'.
+ (parse_escape, parse_c_expression, eval_if_expression, get_lintcmd,
+ do_line, do_if, do_elif): Replace `long' with `HOST_WIDE_INT'.
+ (trigraph_pcp): Don't assume a pointer difference fits in an int.
+
+Wed Jan 17 18:56:31 1996 Jim Wilson <wilson@cygnus.com>
+
+ * expmed.c (extract_bit_field): For multi-word bitfield, clobber
+ target before storing to it.
+
+Wed Jan 17 14:19:34 1996 J.T. Conklin <jtc@slave.cygnus.com>
+
+ * sparc/{t-sol2,t-sunos40,t-sunos41}: Define away LIBGCC1_TEST
+ so that cross compilers targeted at these systems will build.
+
+Wed Jan 17 09:51:58 1996 Doug Evans <dje@cygnus.com>
+
+ * sparc.h (v9 INIT_CUMULATIVE_ARGS): Fix typos.
+
+ * gcc.c (process_command): New local lang_n_files, and use
+ it in test of -c with -o. Move test of -save-temps.
+ Test for trailing NUL in -c.
+
+ * i386/t-go32: New file.
+ * i386/xm-go32.h: New file.
+ * configure (i[345]86-*-go32*): Define xm_file and tmake_file.
+
+Wed Jan 17 07:47:43 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cccp.c (HOST_BITS_PER_WIDE_INT, HOST_WIDE_INT): Put back.
+ (pcfinclude): Use HOST_WIDE_INT for casting pointer to integer.
+
+Wed Jan 17 05:25:06 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * va-pa.h (__gnuc_va_list): Use a "void *".
+
+Tue Jan 16 18:45:23 1996 Per Bothner <bothner@cygnus.com>
+
+ * cppexp.c (cpp_lex): Do cpp_pop_buffer after CPP_POP so retried
+ cpp_skip_hspace will actually work.
+
+ * cppexp.c (SKIP_OPERAND): New macro.
+ (cpp_parse_expr): Suppress evaluation and diagnostics in
+ unevaluated subexpressions.
+ Corresponds to Eggert's Fri Jun 9 17:58:29 1995 change.
+
+Tue Jan 16 11:59:07 1996 Mike Stump <mrs@cygnus.com>
+
+ * expr.c (expand_expr, case COND_EXPR): Make sure cleanups live on
+ the function_obstack as they are used by the exception handling code.
+ (defer_cleanups_to): Ditto.
+ (TRUTH_ANDIF_EXPR): Ditto.
+ (TRUTH_ORIF_EXPR): Ditto.
+
+Tue Jan 16 13:57:13 1996 Jim Wilson <wilson@cygnus.com>
+
+ * cccp.c (new_include_prefix): Ignore ENOTDIR error from stat.
+
+Tue Jan 16 12:18:56 1996 Doug Evans <dje@cygnus.com>
+
+ * i386/t-sol2 (crt[1in].o): Add missing -c.
+ * sparc/t-sol2 (crt[1in].o,gcrt1.o): Likewise.
+ Source files are assembler.
+
+ * gcc.c (do_spec_1, case 'W'): Rename local `index' to `cur_index' to
+ avoid warning on solaris.
+
+Tue Jan 16 11:42:09 1996 Ian Lance Taylor <ian@cygnus.com>
+
+ * dbxcoff.h: New file for stabs in COFF support.
+ * a29k/a29k-udi.h: Use dbxcoff.h.
+ * h8300.h, i960/i960-coff.h, m68k/coff.h, m88k/m88k-coff.h: Likewise.
+ * sh.h, sparc/litecoff.h: Likewise.
+
+Tue Jan 16 08:21:45 1996 Hans-Peter Nilsson <Hans-Peter.Nilsson@axis.se>
+
+ * optabs.c (expand_fix): Don't copy TARGET to TO if same.
+
+ * expr.c (emit_move_insn_1): Don't emit clobber when moving
+ by parts and source equals destination.
+
+Tue Jan 16 08:08:29 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expmed.c (extract_bit_field): Don't abort if not MEM_IN_STRUCT_P.
+
+ * local-alloc.c (memref_referenced_p, case REG): Fix last change.
+
+ * fold-const.c (const_binop): Strip NOPS from both args.
+
+ * regclass.c (regclass): Remove useless cast.
+
+Tue Jan 16 07:06:03 1996 Paul Eggert <eggert@twinsun.com>
+
+ * cexp.y: General code cleanup in the style of 1995-04-01 change.
+ Add prototypes for static functions.
+ Add parentheses suggested by `gcc -Wparentheses'.
+ Use `long' uniformly, instead of long, int, HOST_WIDE_INT mess.
+ (struct constant): Use `signedp' flag (with sign bit) instead of
+ `unsignedp' flag; it's a little more convenient.
+
+ (HAVE_STDLIB_H, STDC_HEADERS, LONG_MASK, __attribute__, PROTO,
+ VA_START, PRINTF_ALIST, PRINTF_DCL, PRINTF_PROTO, PRINTF_PROTO_1,
+ vfprintf, SIGNED, UNSIGNED): New symbols.
+ <stdlib.h>: Include if HAVE_STDLIB_H.
+ <string.h>: New include.
+ (HOST_BITS_PER_WIDE_INT, HOST_WIDE_INT): Remove.
+ (yylex, yyerror, expression_value, parse_number,
+ initialize_random_junk): Now static.
+
+ (overflow_sum_sign): Renamed from possible_sum_sign, with an
+ extra arg SIGNEDP.
+ (parse_number): Inline strcmp when checking for "0x".
+ (yylex): Keep track of mask needed when decoding wide characters.
+ (parse_escape): New arg RESULT_MASK; use it instead of
+ assuming char width.
+ (yylex, parse_escape, parse_c_expression): Store all host
+ integers as long, not int or HOST_WIDE_INT.
+ (left_shift): No need to do signed left shifts separately.
+
+ These changes are for the test program (if TEST_EXP_READER):
+ (pedantic, traditional): Allocate storage.
+ (main): Set pedantic, traditional, yydebug depending on args.
+ (is_hor_space, warning, lookup): Change types and implementation
+ to match rest of program.
+ (pedwarn, check_assertion, xmalloc): New functions.
+
+ * cccp.c (HOST_BITS_PER_WIDE_INT, HOST_WIDE_INT): Remove.
+ (parse_escape, parse_c_expression, eval_if_expression):
+ Change return type to `long'; all callers changed.
+ (pcfinclude): Use `int', not HOST_WIDE_INT; any integral type will do.
+
+ * cccp.c (skip_quoted_string): If pedantic and not pedantic_errors,
+ skipped multiline strings elicit a warning, not an error.
+ (rescan): Minor code reorg to keep it parallel with skip_quoted_string.
+
+ * fold-const.c (left_shift_overflows): Remove; unused.
+
+ * c-typeck.c (convert_for_assignment): Don't automatically convert
+ from a union member to the union.
+
+Tue Jan 16 06:26:00 1996 Stefan Vogel (stefan@ssw.de)
+
+ * config/svr4.h (ASM_OUTPUT_SECTION_NAME): Define section attributes
+ only when a section is defined the first time.
+
+Tue Jan 16 06:03:27 1996 Thomas Graichen <graichen@omega.physik.fu-berlin.de>
+
+ * i386/freebsd.h (ASM_WEAKEN_LABEL): Deleted; not supported.
+
+Mon Jan 15 20:59:49 1996 J. Kean Johnston <hug@netcom.com>
+
+ * Makefile.in (LIBGCC2_CLFAGS): Add -DIN_LIBGCC2.
+ (libgcc1.a): Add -DIN_LIBGCC1.
+ (stamp-crtS): Remove -fpic, use CRTSTUFF_CFLAGS_S.
+ * config/t-libc-ok: Add CRTSTUFF_CFLAGS_S.
+
+ * configure (i[3456]86-*-sco3.2v5*): New case.
+ * i386/sco5.h, i386/t-sco5, i386/x-sco5, i386/xm-sco5.h: New files.
+ * ginclude/stdarg.h, ginclude/varags.h: Add test for SCO Open Server 5.
+
+Mon Jan 15 20:44:13 1996 J.T. Conklin <jtc@netbsd.org>
+
+ * m68k/netbsd.h (ASM_SPEC): New macro.
+
+Mon Jan 15 17:01:16 1996 Doug Evans <dje@cygnus.com>
+
+ * c-lex.c (check_newline): Pass character after `#pragma' to
+ HANDLE_PRAGMA. Don't call get_directive_line if at end of line.
+ * c-common.c (get_directive_line): Watch for EOF.
+ * h8300.h (HANDLE_PRAGMA): New argument `c'.
+ Must issue `return' now.
+ * i960.h (HANDLE_PRAGMA): Likewise.
+ * sh.h (HANDLE_PRAGMA): Likewise.
+ * nextstep.h (HANDLE_PRAGMA): Likewise.
+ * h8300.c (handle_pragma): New argument `ch'.
+ Simplify pragma processing. Delete support for `#pragma section'.
+ * i960.c (process_pragma): New argument `c'. Change result to
+ terminating character.
+ * nextstep.c (handle_pragma): Likewise.
+ * sh.c (handle_pragma): Likewise. Also simplified.
+
+ * sched.c (reemit_notes): Add prototype.
+ (sched_analyze_2): Reorganize comments. Call prev_nonnote_insn.
+ (sched_analyze): Add abort call.
+ (schedule_block): Call prev_nonnote_insn.
+ Move call of reemit_notes to after SCHED_GROUP_P scheduling.
+ Set `head' to `last'.
+
+Mon Jan 15 16:12:25 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * configure (*-*-gnu*): Use tmake_file=t-gnu.
+ * config/t-gnu (CRTSTUFF_T_CFLAGS): New file.
+ * configure (*-*-gnu*): Remove crtbeginS.o and crtendS.o frmo
+ $extra_parts. Use xmake_file=x-linux.
+
+Mon Jan 15 15:30:49 1996 Gran Uddeborg <gvran@uddeborg.pp.se>
+
+ * i386/svr3{,z}.ifile: Allocate address areas for the "stab"
+ and "stabstr" sections.
+
+Mon Jan 15 14:39:14 1996 Paul Eggert <eggert@twinsun.com>
+
+ * c-decl.c (finish_incomplete_decl): Warn if completing an
+ array that wasn't declared extern. Simplify test for whether
+ completion is needed.
+
+ * cccp.c (do_xifdef): Warn about `#ifdef 0' if not traditional;
+ formerly the warning was issued if not pedantic.
+
+Mon Jan 15 13:24:12 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.md ({add,sub}di3): Make it work on little endian PowerPC
+ systems.
+
+ * rs6000/eabi-c{i,n}.asm (.sbss2 section): Don't make .sbss2 a
+ .bss section just yet, because it confused the linker.
+
+Mon Jan 15 08:50:31 1996 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k.md (pushdi): Allow "i" for operand 1.
+ (extendqidi2): Improve 68000 code generation.
+ (adddi_lshrdi_63): New pattern.
+
+Mon Jan 15 08:38:40 1996 H.J. Lu {hjl@gnu.ai.mit.edu)
+
+ * configure (i[3456]86-*-linux*): Add extra_parts.
+ * i386/linux.h (LIB_SPEC): Remove %{mieee-fp:-lieee}.
+ Use -lc_p for -profile.
+ (CC1_SPEC): New macro.
+ * linux.h (STARTFILE_SPEC): Use crtbegin.o for both shared llibrary
+ and normal executable; use gcrt1.o for -profile.
+ (ENDFILE_SPEC): Use crtend.o for shared llibrary and normal executable.
+ * x-linux (INSTALL_ASSERT_H): Unset it.
+ * configure (i[3456]86-*-linux*oldld*): Set xmake_file to x-linux-aout.
+ (i[3456]86-*-linux*aout*): Likewise.
+ * x-linux-aout: New file, copied from config/x-linux.
+
+Mon Jan 15 07:41:05 1996 Dmitry K. Butskoy (buc@stu.spb.su)
+
+ * varasm.c (in_data_section): New function.
+
+Mon Jan 15 07:37:13 1996 Andreas Schwab (schwab@issan.informatik.uni-dortmund.de)
+
+ * c-typeck.c (build_c_cast): Don't warn about alignment when we
+ have an opaque type.
+
+Mon Jan 15 07:22:59 1996 Michel Delval (mfd@ccv.fr)
+
+ * reload.c (find_equiv_reg): Apply single_set, not PATTERN, to WHERE.
+
+Mon Jan 15 07:02:21 1996 John F. Carr <jfc@mit.edu>
+
+ * reorg.c (mark_referenced_resources, case TRAP_IF): Set volatil.
+
+Mon Jan 15 06:20:38 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * gcc.c (process_commands): Remove inadvertant fallthrough.
+
+ * function.c ({,round_}trampoline_address): TRAMPOLINE_ALIGNMENT is
+ in bits, not bytes.
+
+ * objc/archive.c (objc_{write,read}_type, case _C_STRUCT_B): Fix typo.
+
+ * expr.c (expand_expr, case COMPONENT_REF): Don't make recursive
+ call on object with EXPAND_SUM.
+
+ * stmt.c (save_expr_regs): Delete declaration; unused.
+
+Sun Jan 14 21:44:26 1996 Michael Meissner <meissner@wogglebug.tiac.net>
+
+ * rs6000/eabi-ci.asm (__EXCEPT_START__): Provide label for start
+ of g++ exception pointers.
+
+ * rs6000/eabi-cn.asm (__EXCEPT_END__): Provide label for end of
+ g++ exception pointers.
+
+ * rs6000/eabi.asm (__eabi): Relocate exception pointers unless
+ they are NULL.
+
+ * va-ppc.h (va_arg): Long longs are always passed in odd registers.
+
+ * rs6000.c (function_arg_boundary): On V.4, long longs are always
+ passed in odd registers.
+
+ * rs6000.md ({add,sub}di3): Remove restriction for POWER only,
+ since all of the instructions used are common to both
+ architectures.
+
+Sun Jan 14 20:34:03 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * expr.c (expand_assignment): Fix alignment parm in emit_block_move.
+
+Sun Jan 14 19:00:25 1996 Jim Wilson <wilson@cygnus.com>
+
+ * sched.c (schedule_block): Copy RTX_INTEGRATE_P bit when create
+ a new note.
+
+ * integrate.c (save_for_inline_copying, case NOTE): Copy
+ RTX_INTEGRATED_P bit.
+
+Sun Jan 14 17:57:52 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * stupid.c (stupid_find_reg): Don't try to allocate reg if live
+ over more than 5,000 insns.
+
+Sat Jan 13 23:09:07 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * pa.h (STACK_BOUNDARY): Bring back down to 64bits.
+
+ * pa.md (pre_ldwm): Fix bug exposed by recent changes.
+ Simplify.
+ (pre_stwm, post_ldwm, post_stwm): Likewise.
+ (HImode and QImode variants): Likewise.
+ * pa.c (hppa_expand_prologue): Corresponding changes.
+ (hppa_expand_epilogue): Likewise.
+
+ * pa.c (hppa_legitimize_address): Generate more indexing
+ address modes.
+
+Fri Jan 12 19:03:21 1996 Doug Evans <dje@cygnus.com>
+
+ * sparc/sol2.h (COMMON_ASM_OP): Delete, use sysv4.h's.
+
+ * sched.c (schedule_block): Maintain a valid chain so
+ emit_note_before works.
+
+Fri Jan 12 13:20:01 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/eabi{,-ci,-cn}.asm: Add support for V.4 .sbss/.sdata, and
+ eabi .sbss2/.sdata2 sections, loading up r13 and r2 respectively
+ if the sections were used, and we don't need to relocate the
+ pointers.
+
+Thu Jan 11 19:41:07 1996 Per Bothner <bothner@cygnus.edu>
+
+ * sparc.h (FUNCTION_ARG_PASS_BY_REFERENCE): Use AGGREGATE_TYPE_P so
+ QUAL_UNION_TYPE and SET_TYPE are also passed by invisible reference.
+ * sparc.h (INIT_CUMULATIVE_ARGS for SPARCV9): Return types of
+ QUAL_UNION_TYPE and SET_TYPE also make invisible 1st argument.
+
+Thu Jan 11 18:33:50 1996 Doug Evans <dje@cygnus.com>
+
+ * h8300.h (TARGET_ALIGN_STRUCT_300): New macro.
+ (TARGET_SWITCHES): Add -malign-struct-300.
+ (BIGGEST_FIELD_ALIGNMENT): Update.
+
+Thu Jan 11 12:07:44 1996 J.T. Conklin <jtc@cygnus.com>
+
+ * h8300.h (CPP_PREDEFINES): Delete -D_DOUBLE_IS_32BITS.
+
+Thu Jan 11 11:09:33 1996 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.md (mulsf3 !POWERPC): Use dmul attribute.
+ (divsf3 !POWERPC): Use ddiv attribute.
+
+Thu Jan 11 11:09:33 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/eabi-ctors.c (__do_global_ctors): If global variable
+ __atexit is non-NULL, call it with __do_global_dtors address to
+ register the function to run destructors.
+ (__do_global_{c,d}tors): Guard against NULL pointers.
+
+ * rs6000/eabi.asm (__eabi): If the __eabi function was already
+ called, do nothing.
+
+Thu Jan 11 11:29:09 1996 Doug Evans <dje@cygnus.com>
+
+ * fixincludes: Wrap rpc/types.h in extern "C", for osf2.0.
+
+Wed Jan 10 13:16:03 1996 Doug Evans <dje@cygnus.com>
+
+ * varasm.c (variable_section): New function.
+ (assemble_variable): Call it.
+
+Wed Jan 10 11:27:28 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/eabi-c{i,n}.asm (__DTOR_{LIST,END}__): Fix typo.
+ * rs6000/eabi{,sim}.h ({START,END}FILE_SPEC): Add %s to object
+ files.
+
+ * rs6000/t-{eabi,eabigas,ppc,ppcgas} (MULTILIB_MATCHES): Drop
+ support for obsolete -mcpu=mpc403.
+ Add -mcpu=821 and -mcpu=860 to soft-float defaults.
+
+ * rs6000/t-eabi{,gas} (LIBGCC): Add stmp-crt.
+ (INSTALL_LIBGCC): Add install-crt.
+ (EXTRA_PARTS): Delete.
+ (stmp-crt{,-sub}): New rules to build crti.o and crtn.o in a
+ multilib fashion.
+ (install-crt): Install the multilib crt values.
+
+Tue Jan 9 17:30:16 1996 Doug Evans <dje@cygnus.com>
+
+ * c-tree.h (merge_attributes): Moved from here.
+ * tree.h (merge_attributes): To here.
+ * c-typeck.c (merge_attributes): Moved from here.
+ * tree.c (merge_attributes): To here.
+
+Mon Jan 8 18:27:38 1996 Arne H. Juul <arnej@pvv.unit.no>
+
+ * mips/netbsd.h (LINK_SPEC): Change nostdlib to nostartfiles.
+ (LOCAL_LABEL_PREFIX): Delete.
+ (ASM_OUTPUT_SECTION_NAME): Define.
+
+Sun Jan 7 17:11:11 1996 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * collect2.c (scan_libraries): Correct Import File ID interpretation.
+
+Sun Jan 7 16:56:56 1996 Michael Meissner <meissner@wombat.gnu.ai.mit.edu>
+
+ * {svr4,mips/elf{,64}}.h (MAX_OFILE_ALIGNMENT): Define as 32768*8.
+
+Sat Jan 6 15:52:36 1996 Doug Evans <dje@cygnus.com>
+
+ * a29k/vx29k.h (CPP_SPEC): Define.
+
+ * configure: Recognize any --with/--without option.
+
+ * Makefile.in (MAKEINFOFLAGS): New variable.
+ (cpp.info,gcc.info): Use it.
+
+ * sparc/t-sol2 (crt1.o,crti.o,crtn.o,gcrt1.o): Use $(GCC_FOR_TARGET).
+ * i386/t-sol2 (crt1.o,crti.o,crtn.o): Likewise.
+
+Fri Jan 5 10:44:25 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/aix{3newas,41}.h ({ASM,CPP}_SPEC): Update for new
+ processors.
+ * rs6000/eabi{aix,le}.h ({ASM,CPP}_SPEC): Ditto.
+ * rs6000/{lynx,netware,powerpc,sysv4}.h ({ASM,CPP}_SPEC): Ditto.
+
+ * rs6000.c (rs6000_override_options): Remove requirement that
+ -mcpu=common be big endian.
+ (rs6000_stack_info): If NAME__main is defined, mark this function
+ as doing a call, even if there are no arguments.
+
+ * rs6000.md (SI*SI->DI splitters): Add reload_completed
+ condition.
+ (mulsidi3): If big endian, do move directly, rather than moving by
+ pieces.
+
+ * rs6000/eabi{,sim}.h (STARTFILE_SPEC): Add crti.o before any
+ other objects.
+ (ENDFILE_SPEC): Add crtn.o after any objects.
+ * rs6000/t-eabi{,gas}: Build crt{i,n}.o from eabi-crt{i,n}.asm.
+ * rs6000/eabi-crt{i,n}.asm: New files to provide begin/end labels
+ for all special sections used by eabi as opposed to relying on GLD
+ to set all of these symbols.
+ * rs6000/eabi.asm (__eabi): Change to use the new labels provided
+ above. Don't assume that the .got2, .ctors, .dtors, and .fixup
+ sections are contiguous.
+
+Fri Jan 5 10:40:37 1996 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.md (mulh_call): Remove r4 clobber.
+ (quoss_call): Remove cr0 and cr1 clobbers.
+
+ * rs6000.md (function units): Add MPC505/821/860 support.
+ (SF multiply add combiner patterns): Use dmul attribute when limited
+ to DFmode POWER instructions.
+ * rs6000.c (processor_target_table): Add MPC505/821/860 support.
+ Remove MASK_POWER and add MASK_PPC_GFXOPT for PPC602. Always use
+ new mnemonics for common mode.
+ (rs6000_override_options): Don't set SOFT_FLOAT based upon
+ PROCESSOR_DEFAULT.
+ * rs6000.h (processor_type): Add PROCESSOR_MPCCORE.
+ (RTX_COSTS): Add PROCESSOR_MPCCORE cases.
+ (CPP_SPEC): Add new processor support.
+
+Fri Jan 5 00:32:49 1996 Doug Evans <dje@cygnus.com>
+
+ * sparc.h (MACHINE_STATE_RESTORE): Add missing .align.
+
+Wed Jan 3 18:29:32 1996 Doug Evans <dje@cygnus.com>
+
+ * arm/lib1funcs.asm (__USER_LABEL_PREFIX__): Define if not already.
+ (CONCAT1,CONCAT2,SYM): Define.
+ (__udivsi3,__divsi3,__umodsi3,__modsi3,__div0): Use SYM to define
+ global labels.
+
+Wed Jan 3 02:41:39 1996 Jeffrey A. Law <law@cygnus.com>
+
+ * pa.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Call text_section.
+
+Tue Jan 2 16:12:13 1996 Jim Wilson <wilson@cygnus.com>
+
+ * sh.c (gen_shifty_op): Output a NOP for a shift by 0.
+ (find_barrier): New variables si_limit, hi_limit. Set them depending
+ on whether we are optimizing. Set found_hi if the destination is
+ HImode.
+ (machine_dependent_reorg): If not optimizing, then change scan to a
+ note instead of calling delete_insn.
+ * sh.h (OVERRIDE_OPTIONS): Don't set optimize or flag_delayed_branch.
+
+ * dbxout.c (gstab.h): Include if cross compiling.
+
+Mon Jan 1 21:13:43 1996 Arkady Tunik <Arkady_Tunik@comverse.com>
+
+ * configure (i[3456]-*-solaris2*): Support stabs.
+ * i386/sol2dbg.h: New file.
+
+Mon Jan 1 09:08:01 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-typeck.c: Use DECL_C_BIT_FIELD, not DECL_BIT_FIELD in all tests.
+
+ * global.c (reg_allocno): No longer static.
+ * reload1.c (reg_allocno): Declare.
+ (order_regs_for_reload): New arg, GLOBAL.
+ Bias against regs allocated in local-alloc.
+ (reload): Pass new parm to order_regs_for_reload.
+
+ * local-alloc.c (reg_equiv_replacement): New variable.
+ (memref_referenced_p, case REG): Check for reg_equiv_replacement.
+ (update_equiv_regs): reg_equiv_replacement now file-scope.
+
+ * c-decl.c (finish_struct): Warn if field with enumeral type is
+ narrower than values of that type.
+
+ * combine.c (rtx_equal_for_field_assignment_p): New function.
+ (make_field_assignment): Use it.
+ Expand compound operations on both sides of an IOR.
+ Properly adjust constand in IOR when computing bit position.
+
+Sun Dec 31 18:47:22 1995 Doug Evans <dje@cygnus.com>
+
+ * m68k-none.h (MULTILIB_DEFAULTS): Define.
+
+Sun Dec 31 15:47:20 1995 Jeffrey A. Law <law@cygnus.com>
+
+ * hard-reg-set.h (losing_caller_save_reg_set): Declare.
+ * regclass.c (losing_caller_save_reg_set): Define.
+ (init_reg_sets_1): Initialize losing_caller_save_reg_set.
+ * global.c (find_reg): Avoid caller-saving registers in
+ losing_caller_save_reg_set.
+ * local-alloc.c (find_free_reg): Avoid caller-saving registers
+ in losing_caller_save_reg_set.
+ (CLASS_LIKELY_SPILLED_P): Delete definition. Moved into regs.h.
+ * regs.h (CLASS_LIKELY_SPILLED_P): Define if not already defined.
+
+ * reorg.c (fill_simple_delay_slots): Try to fill from the
+ target of an unconditional branch if necessary.
+
+ * pa.h (REG_ALLOC_ORDER): Allocate PA1.1 caller-saved FP regs
+ before PA1.0 caller-saved FP regs.
+
+ * sched.c (adjust_priority): Use ADJUST_PRIORITY if its defined.
+
+ * pa.h (ADJUST_PRIORITY): Define to keep lifetimes of registers
+ that will be allocated to %r1 shorter.
+
+Sun Dec 31 14:20:49 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rtl.h (assign_temp): Add extra arg.
+ * function.c (assign_temp): Add extra arg, DONT_PROMOTE.
+ Don't return (const_int 0) for VOIDmode.
+ * stmt.c (expand_asm_operands): Call assign_temp with extra arg.
+ * expr.c (save_nocopied_parts, expand_expr): Likewise.
+ (expand_expr, case SAVE_EXPR): Set TEMP to (const_int 0)
+ if MODE is VOIDmode.
+ (expand_expr): Don't use assign_temp for pseudos when might
+ want to be TMODE.
+
+ * stmt.c (tail_recursion_args): Compare TYPE_MAIN_VARIANTs.
+
+ * calls.c (expand_call): Don't warn about not being able to
+ inline if -O0.
+ * expr.c (clear_pending_stack_adjust): Don't do optimization if -O0.
+ * function.c (instantiate_decls): Check DECL_SAVED_INSNS to see
+ if obstack change is needed.
+ * toplev.c (rest_of_compilation): Leave DECL_INLINE set even if
+ won't inline.
+
+ * tree.h: Add documentation on uses of common area flags.
+ (DECL_ERROR_ISSUED): New macro.
+ (DECL_NO_STATIC_CHAIN): New macro; currently unused.
+ * c-aux-info.c (gen_decl): DECL_REGISTER isn't defined
+ for FUNCTION_DECL.
+ * toplev.c (compile_file): Likewise.
+ * stmt.c (fixup_gotos): Use DECL_ERROR_ISSUED instead
+ of DECL_REGISTER.
+ * varasm.c ({bc_,}make_decl_rtl): Don't look at DECL_REGISTER
+ for functions.
+
+Sat Dec 30 07:57:11 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * sdbout.c (plain_type_1, case ARRAY_TYPE): Subtract lower bound
+ when writing dimension.
+
+Fri Dec 29 18:23:58 1995 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (eval_if_expression): End expression with '\n', not '\0'
+ so '\0' can be diagnosed properly.
+ * cexp.y (yylex, parse_c_expression, main): Likewise.
+
+Thu Dec 28 18:24:54 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * tree.h (TYPE_ARRAY_MAX_SIZE): New macro (used by Chill).
+ * function.c (assign_temp): New function. Can handle Chill-style
+ variable-sized array with static maximum size.
+ * rtl.h (assign_temp): New declaration.
+ * stmt.c (expand_asm_operands): Use new assign_temp function.
+ * expr.c (save_noncopied_parts, expand_expr): Likewise.
+
+Thu Dec 28 15:28:47 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * function.c (assign_parms): Fix thinko for struct value arg.
+
+Fri Dec 29 12:41:47 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.md (movdf): Reinstate 12/24 change accidently dropped in
+ undoing 12/27 changes.
+
+Thu Dec 28 22:24:53 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.h: (reg_class): Undo 12/27 changes, except for formatting.
+ (REG_NAMES, REG_CLASS_CONTENTS, REGNO_REG_CLASS): Likewise.
+ (REG_CLASS_FROM_LETTER): Likewie.
+ (PREDICATE_CODES): Delete predicate functions.
+ (gpc_reg{0,3,4,34}_operand): Delete declaration.
+ (cc_reg{0,1}_operand): Likewise.
+ * rs6000.c (gpc_reg{0,3,4}_operand): Delete.
+ (cc_reg{0,1}_operand): Likewise.
+
+ * rs6000.md (common mode functions): Undo 12/27 changes,and add
+ appropriate clobbers for common mode calls. Keep define_splits for
+ powerpc SI*SI->DI.
+
+Thu Dec 28 11:08:11 1995 Mike Stump <mrs@cygnus.com>
+
+ * sparc.h (RETURN_ADDR_OFFSET): Rename from NORMAL_RETURN_ADDR_OFFSET;
+ returns offset for the current function specifically.
+
+Thu Dec 28 07:07:14 1995 Paul Eggert <eggert@twinsun.com>
+
+ * c-lex.c (yylex): Improve error message for bogus numbers.
+ Consolidate duplicated code.
+
+ * cexp.y (parse_number): Improve error message for bogus numbers.
+ (yylex): Consider `0xe-1' to be a (bogus) number if not traditional.
+
+ * cccp.c (do_include): In VMS, worry only about EACCES when open fails.
+ (new_include_prefix): Don't try to stat dir prefixes in VMS.
+
+Wed Dec 27 14:02:54 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * fix-header.c: Add EXIT_FAILURE and EXIT_SUCCESS to stdlib.h if
+ missing. Re-write how errno is added to be done similarly.
+ (XOPEN_SYMBOL, XOPEN_EXTENDED_SYMBOL): New macros, to mark XPG4
+ functions.
+ (std_include_table): Add a number of functions (mostly XPG4).
+
+Tue Dec 26 23:18:34 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * sys-types.h: Add dummy definition for ssize_t.
+ * sys-protos.h (bcmp, bcopy, gethostname, lockf, read, readlink,
+ write): Fix prototypes to match Posix and XPG4.
+ (socket, strcasecmp, strncasecmp): New prototypes (from XPG4).
+
+Wed Dec 27 15:30:04 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * libgcc2.c (_bb_init_prg): Cast arg to bzero to (char *).
+
+ * regs.h (reg_rtx_no, regno_pointer_{flag_length,align): New decls.
+ (REGNO_POINTER_ALIGN): New macro.
+ * emit-rtl.c (regno_pointer_align): New variable.
+ (gen_reg_rtx): Extend regno_pointer_align table.
+ Allocate tables in saveable obstack.
+ (mark_reg_pointer): New arg, ALIGN.
+ (gen_inline_header): New args for reg info.
+ (set_new_first_and_last_insn): Set cur_insn_uid.
+ ({save,restore}_emit_status): Save and restore regno_pointer_align.
+ (restore_reg_data{,_1}): Deleted.
+ (init_emit): Allocate register tables in saveable obstack.
+ Set REGNO_POINTER_ALIGN for regs pointing into frame.
+ * function.c (assign_parms): Set REGNO_POINTER_ALIGN for
+ parms that are pointers.
+ * function.h (struct function): New field regno_pointer_align.
+ * expr.c (expand_expr, case VAR_DECL): Set REGNO_POINTER_ALIGN
+ when copying address into memory.
+ (expand_expr, case COMPONENT_REF, case ADDR_EXPR): Set alignment
+ of register when result or result's address.
+ (expand_expr, case CONVERT_EXPR): Don't handle -fforce-mem here.
+ * combine.c (set_nonzero_bits_and_sign_copies): Handle reg even
+ if only set once and in one basic block.
+ (nonzero_bits, case REG): Use REGNO_POINTER_ALIGN instead of
+ explicit alignment of registers pointing into frame.
+ * stmt.c (expand_decl): Set alignment of register for pointer
+ variable.
+ * optabs.c (emit_unop_insn): Don't do -fforce-mem for SIGN_EXTEND.
+ * cse.c (find_best_addr): Make sure folded address better before using.
+ * rtl.h (INLINE_REGNO_{RTX,POINTER_FLAG,POINTER_ALIGN}): New macros.
+ (gen_inline_header): Add three new parms.
+ * rtl.def (INLINE_HEADER): Add three new fields.
+ * integrate.c: Include regs.h.
+ (initialize_for_inline): Pass additional args to gen_inline_header.
+ (save_for_inline_copying): Make new regno_reg_rtx, regno_pointer_flag,
+ and regno_pointer_align arrays.
+ (expand_inline_function): Set alignment of reg for parm if passed
+ by hidden pointer.
+ Set regno_pointer_{flag,align} into remap table.
+ (copy_rtx_and_substitute): Set alignment of pointers into
+ stack frame.
+ Copy pointer flag and alignment to regs that are copies of
+ pointer registers from the original regs.
+ (output_inline_function): Don't call restore_reg_data.
+ Restore reg_rtx_no, regno_{reg_rtx,pointer_flag,pointer_align}.
+ * integrate.h (struct inline_remap): New fields regno_pointer_flag
+ and regno_pointer_align.
+ * unroll.c (unroll_loop): Set regno_pointer_{flag,align} in
+ remap table.
+ * explow.c (memory_address, allocate_dynamic_stack_space):
+ Pass additional arg to mark_reg_pointer.
+ * Makefile.in (integrate.o): Includes regs.h.
+
+ * alpha.c ({non,}aligned_memory_operand): Test REGNO_POINTER_ALIGN.
+ (reg_or_unaligned_mem_operand): New function.
+ (get_unaligned_address): Add new arg, EXTRA_OFFSET.
+ * alpha.h ({CONSTANT,DATA}_ALIGNMENT): Align to at least BITS_PER_WORD.
+ (PREDICATE_CODES): Add reg_or_unaligned_mem_operand.
+ * alpha.md (extend{qihi,qisi,hisi}2): Allow unaligned memory
+ as arg 1 and pass to extend_{q,h}idi2.
+ (unaligned_extend{q,h}idi): New patterns.
+ (extend{q,h}idi2): If unaligned memory, call above new patterns.
+ (ext{q,l,w}h recognizer): Update to proper RTL.
+ (ext define_split): Comment out for now; wrong and maybe useless.
+ (unaligned_{load,store}hi): Do similarly to QImode.
+ (movhi, reload_{in,out}hi): Call unaligned case differently.
+
+Wed Dec 27 11:38:20 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.md (mulsidi3{,_common}): Undo previous change using
+ register classes instead of fixed registers for SI*SI->DI common
+ mode multiplies.
+
+ * rs6000.c (gpc_reg34_operand): Delete unused function.
+ * rs6000.h (gpc_reg34_operand): Likewise.
+
+ * rs6000.c (gpc_reg{3,4}_operand): Reorganize code and don't allow
+ SUBREG's.
+
+ * rs6000.c (rs6000_override_options): Do not allow -mcpu=common on
+ little endian PowerPC's.
+ (gpc_reg{0,3,4,34}_operand): New functions to match a specific
+ register.
+ (cc_reg{0,1}_operand): Likewise.
+
+ * rs6000.h (reg_class): Add register classes for register 3 by
+ itself, register 4 by itself, registers 3&4, and CR1.
+ (REG_NAMES): Add support for new register classes.
+ (REG_CLASS_CONTENTS, REGNO_REG_CLASS, REG_CLASS_FROM_LETTER): Likewise.
+ (PREDICATE_CODES): Add new predicate functions.
+ (gpc_reg{0,3,4,34}_operand): Add declaration.
+ (cc_reg{0,1}_operand): Likewise.
+
+ * rs6000.md (common mode multiplication/division): Move/rename common
+ mode calls so they are closer to define_expands that call them.
+ Set attribute type to be jmpreg, rather than integer, so optimizer
+ knows branch processing unit is used; make SI*SI->DI multiplier use
+ register classes instead of hardwired registers.
+ Add appropriate clobbers of CR0/CR1 as mandated by PowerOpen spec.
+ (PowerPC SI*SI->DI multipliers): Add appropriate define_splits.
+
+ * rs6000/t-{,x}newas (MULTILIB*): Don't build power2 or 601
+ specific libraries.
+
+Tue Dec 26 21:52:18 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (fold_convert): When converting a NaN to
+ another type, change the type of the node before returning it.
+
+Mon Dec 25 17:12:10 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * c-typeck.c (mark_addressable): Fix error in last change.
+
+Sun Dec 24 22:19:49 1995 Jeffrey A. Law <law@cygnus.com>
+
+ * pa.c (output_function_epilogue): Use assemble_integer rather
+ than calling ASM_OUTPUT_INT directly.
+ * pa.h (ASM_OUTPUT_INT): Use labels for everything in the
+ exception table section.
+
+ * pa.c (print_operand): Don't call fprintf to output a register
+ name. Use fputs instead.
+
+ * pa.h (ASM_OUTPUT_FUNCTION_PREFIX): Strip any name encoding
+ on the section name.
+
+Sun Dec 24 17:46:03 1995 Markus Theissinger <Markus.Theissinger@gmd.de>
+
+ * toplev.c (main): Add -ax option.
+ * gcc.c (struct compilers): Likewise.
+ * final.c (end_final): Extended header increased to 11 words.
+ (profile_after_prologue): FUNCTION_BLOCK_PROFILER uses
+ count_basic_blocks instead of profile_label_no.
+
+ * libgcc2.c (struct bb): Add flags field.
+ (HAVE_POPEN): Test new define.
+ (struct __bb, struct bb_{edge,func}): New structs.
+ (__bb_init_{prg,file},__bb_{init,exit}_trace_func,__bb_trace_ret,
+ (__bb_trace_func{,_ret},gopen,gclose): New functions.
+
+ * sparc.h, i386.h, m68k.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER):
+ Extension for -ax option (profile_block_flag == 2).
+ (MACHINE_STATE_SAVE,MACHINE_STATE_RESTORE): New macros.
+ (FUNCTION_BLOCK_PROFILER_EXIT): New macro.
+ * sparc.c (output_function_epilogue), i386.c (function_epilogue):
+ Use FUNCTION_BLOCK_PROFILER_EXIT.
+ * m68k.c (output_function_epilogue): Likewise.
+ * xm-sparc.h: Define HAVE_POPEN.
+
+Sun Dec 24 06:50:30 1995 Barrett Richardson (barrett@iglou.com)
+
+ * floatlib.c (__divdf3): Rewrite to do software divide of two
+ doubles instead of using __divsf3.
+
+Sun Dec 24 06:38:15 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.md (movdf): Don't copy a word at a time; nearly always loses.
+
+ * c-tree.h (DECL_C_BIT_FIELD): New macro.
+ * c-decl.c (finish_struct): Set it when set DECL_BIT_FIELD.
+ * c-typeck.c (mark_addressable, case COMPONENT_REF):
+ Give error if taking address of a bit field.
+
+ * gcc.c (unused_prefix_warning): Include machine_suffix if
+ require_machine_suffix.
+ (warn_B, warn_std, warn_std_ptr): New variables.
+ (process_commands): Use them and NULL_PTR as WARN arg to add_prefix.
+
+ * gcc.c (process_command): Give error for -c with -o and
+ multiple compilations.
+ (handle_braces): Rename variable "pipe" to "pipe_p".
+
+ * expr.h (clrstr_optab): New declaration.
+ (clear_storage): New parm, ALIGN.
+ * tree.h (CONSTRUCTOR_TARGET_CLEARED_P): New macro.
+ * genopinit.c (optabs): Add "clrstr%a%".
+ * optabs.c (init_optabs): Initialize clrstr_optab.
+ * expr.c (struct clear_by_pieces): New structure.
+ (clear_by_pieces{,_1}, {is,mostly}_zeros_p): New functions.
+ (clrstr_optab): New optab.
+ (clear_storage): Rework to try to use clear_by_pieces, then
+ new clrstr insn, then library call.
+ (store_constructor): Track if target is already cleared.
+ Clear target first if CONSTRUCTOR is mostly zeros.
+ Don't write zeros if target has been cleared.
+ Add new arg to clear_storage call.
+ (expand_expr, case CONSTRUCTOR): Don't put static constructor
+ in memory if mostly zero.
+ * i386.md (clrstrsi): New pattern and associate anonymous pattern.
+
+Sat Dec 23 12:21:53 1995 Jeffrey A. Law <law@cygnus.com>
+
+ * pa.c (output_move_double): Correctly identify and handle
+ overlapping moves.
+ * pa.md (movdi patterns): Eliminate earlyclobbers in mem<->gr cases.
+ (movdf patterns): Likewise.
+
+Fri Dec 22 17:29:42 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (store_constructor): Don't call change_address on REG.
+ (expand_expr, case CONSTRUCTOR): Likewise.
+
+ * mips.c (expand_block_move): Preserve MEM flags in call to
+ movstrsi_internal.
+
+ * pa.c (emit_move_sequence): Don't try to set REGNO_POINTER_FLAG
+ for a SUBREG.
+
+ * reload.c (find_valid_class): New function.
+ (push_reload): Use it in cases where a SUBREG and its contents
+ both need to be reloaded.
+
+ * toplev.c (rest_of_compilation): Never defer functions that
+ contain nested functions.
+
+Fri Dec 22 15:55:00 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.md (function units): Add 403 support which deleted
+ by accident on Nov 21st. Mark all compares from 602, 603, 604,
+ 620, 403, like was done for rios{1,2} and 601 as needing the bpu,
+ so that compares are hoisted far enough branches for zero cycle
+ branch support.
+
+Fri Dec 22 15:13:47 1995 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.h (TARGET_UNROLL_STRLEN): New macro.
+ * i386.c (output_strlen_unroll): New function.
+ * i386.md (strlensi): New pattern.
+
+Thu Dec 21 18:53:31 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * /gnu.h (GNU_CPP_PREDEFINES): Add missing space after -Amachine(CPU).
+
+Thu Dec 21 12:23:42 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * configure ({powerpc,rs6000}*): Change --enable-cpu to --with-cpu.
+ * rs6000.c (rs6000_select): Likewise.
+
+ * rs6000/aix41.h (LINK_SPEC): Do not pass -bexport to the linker
+ if -g and -shared.
+
+Wed Dec 20 11:23:39 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * configure ({powerpc,rs6000}-ibm-aix*): Merge these two into the
+ same case statement. Aix 4 now generates -mcpu=common by default.
+ ({powerpc,rs6000}*): Add support for --enable-cpu=<value> to
+ select the default cpu to compile for.
+
+ * rs6000/aix41.h (TARGET_DEFAULT): Make -mcpu=common default behavior.
+ (PROCESSOR_DEFAULT): Likewise.
+ (MULTILIB_DEFAULTS): Set mcpu=common.
+
+ * rs6000.h (TARGET_CPU_DEFAULT): Define to be NULL if not defined.
+ (PROCESSOR_COMMON): Set this to PROCESSOR_601.
+ (PROCESSOR_POWERPC): Set this to PROCESSOR_604.
+ (TARGET_OPTIONS): Add -mtune= switch.
+ (rs6000_select): New structure to hold -mcpu=, -mtune= switches
+ and the result of configuring --enable-cpu=.
+ (OVERRIDE_OPTIONS): Pass TARGET_CPU_DEFAULT to
+ rs6000_override_options.
+
+ * rs6000.c (rs6000_cpu_string): Delete global variable.
+ (rs6000_select): Define new global variable.
+ (rs6000_override_options): Take default_cpu argument, and provide
+ support for it and -mtune= in addition to -mcpu=.
+
+ * rs6000/{aix{3newas,41},lynx,netware,powerpc}.h (ASM_SPEC): Add
+ support for -mcpu=power2.
+ * rs6000/{rs6000,sysv4}.h (ASM_SPEC): Likewise.
+
+ * rs6000/{aix41,eabiaix,eabile,lynx,powerpc}.h (CPP_SPEC): Make
+ sure all -mcpu=xxx targets are supports.
+ * rs6000/{rs6000,sysv4,sysv4le}.h (CPP_SPEC): Likewise.
+
+ * rs6000/t-x{newas,rs6000}: New files to be used when making a
+ cross compiler, to prevent libgcc1-test from being made.
+
+ * rs6000/t-{x,}newas (MULTILIB_*): Build multlilib libraries for
+ power, power2, 601, powerpc, and common mode processors.
+
+ * rs6000/aix41ppc.h: Delete, no longer used.
+
+Tue Dec 19 18:31:21 1995 Jim Wilson <wilson@cygnus.com>
+
+ * mips.c (mips_reg_names, mips_sw_reg_names, mips_regno_to_class):
+ Add entry for new RAP reg.
+ * mips.h (FIRST_PSEUDO_REGISTER): Increment.
+ (FIXED_REGISTERS, CALL_USED_REGISTERS, REGISTER_NAMES,
+ DEBUG_REGISTER_NAMES): Add entry for new RAP reg.
+ (RAP_REG_NUM, RETURN_ADDRESS_POINTER_REGNUM): New macros.
+ (RETURN_ADDR_RTX): Define.
+ (ELIMINABLE_REGS, CAN_ELIMINATE, INITIAL_ELIMINATION_OFFSET):
+ Add RETURN_ADDRESS_POINTER_REGNUM support.
+ * emit-rtl.c (return_address_pointer_rtx): New global variable.
+ (gen_rtx, init_emit_once): Add support for it.
+
+Tue Dec 19 15:08:31 1995 Jason Merrill <jason@yorick.cygnus.com>
+
+ * collect2.c: Remove auto_export functionality.
+
+Tue Dec 19 10:57:23 1995 Kim Knuttila <krk@cygnus.com>
+
+ * ppc-asm.h: Do not compile the register macros under winnt.
+
+Mon Dec 18 19:31:23 1995 Adam Fedor <fedor@wilma.Colorado.EDU>
+
+ * objc/encoding.c (objc_alignof_type): Handle _C_PTR case.
+
+Mon Dec 18 18:40:34 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * combine.c (simplify_rtx, case SUBREG): For SUBREG of a constant,
+ use <= instead of < when comparing mode sizes.
+ (force_to_mode, case NOT): Use full mask inside the NOT operation.
+
+ * expr.c (emit_block_move): When call emit_libary_call for bcopy,
+ pass arguments using correct types and modes.
+ (emit_push_insn, expand_assignment): Likewise.
+ (clear_storage, store_expr): Likewise for memset and bzero.
+ (store_constructor): Likewise for memset.
+ * optabs.c (emit_cmp_insn): Likewise for memcmp and bcmp.
+ * convex.c (expand_movstr_call): Likewise for memcpy.
+ * m88k.c (expand_block_move): Likewise for memcpy and bcopy.
+ * mips.c (block_move_call): Likewise for memcpy and bcopy.
+ * mips.h (INITIALIZE_TRAMPOLINE): Likewise for cacheflush.
+
+ * c-common.c (WCHAR_TYPE_SIZE): Add a default definition.
+
+ * sdbout.c (sdbout_symbol, case FUNCTION_DECL): Use DECL_INITIAL
+ instead of DECL_EXTERNAL to identify declarations.
+
+ * svr4.h (ASM_IDENTIFY_GCC): Don't output stab here.
+ (ASM_IDENTIFY_GCC_AFTER_SOURCE): Output stab here instead of above.
+
+ * stmt.c (expand_asm_operands): Handle numeric constraints in
+ with the default case.
+
+Mon Dec 18 16:49:43 1995 John F. Carr <jfc@mit.edu>
+
+ * expr.h (expand_mult_highpart_adjust): Declare.
+
+Mon Dec 18 16:39:41 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (store_constructor): Fix error in last change: just
+ copy MEM, but be sure to share address.
+ (expand_expr, case CONSTRUCTOR): Likewise.
+
+Mon Dec 18 16:22:46 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.h (ASM_GENERATE_INTERNAL_LABEL): Put leading '*' in label
+ string so as to not confuse dbxout.c.
+
+Mon Dec 18 09:44:56 1995 Mike Stump <mrs@cygnus.com>
+
+ * libgcc2.c (__empty): An empty function used by the C++ frontend for
+ defaulting cleanup actions.
+
+ * tree.c (save_tree_status, restore_tree_status): Save and restore
+ temporary_firstobj.
+
+Mon Dec 18 07:49:34 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (fixup_var_refs_1): Fix error in last change (when
+ mode of VAR is not the same as PROMOTED_MODE).
+
+Sun Dec 17 12:14:37 1995 Jeffrey A. Law <law@cygnus.com>
+
+ * pa.h (ASM_OUTPUT_FUNCTION_PREFIX): Don't surround section names
+ with '$'; that confuses collect2.
+ (ASM_OUTPUT_SECTION_NAME): Likewise.
+
+ * sched.c (canon_rtx): Recursively look for equivalences;
+ look for expressions equivalent to MEMs.
+ (true_dependence): Canonicalize inputs before operating
+ on their values.
+ (anti_dependence, output_dependence): Likewise.
+
+ * jump.c (follow_jumps): Don't follow an unconditional jump
+ that is not a simple_jump.
+
+ * pa.c (override_options): Make 7100 scheduling the default.
+
+ * pa.md: Add 2nd reload peephole somehow omitted from Nov27 changes.
+
+ * regclass.c (regclass): Use SECONDARY_RELOAD_CLASS if it's
+ defined to avoid useless work.
+
+ * combine.c (find_split_point): Try to split SET_DEST
+ just like we do for SET_SRC.
+
+Sun Dec 17 11:37:25 1995 Torbjorn Granlund <tege@noisy.tmg.se>
+
+ * expmed.c (expand_mult_highpart): When doing widening multiply,
+ put constant in a register.
+ (expand_mult_highpart): When mode is word_mode use gen_highpart
+ instead of right shift by size.
+
+ * expr.c (expand_expr, case MULT_EXPR): Generalize code for widening
+ multiply to handle signed widening multiply when only unsigned optab
+ is defined, and vice versa.
+
+Sun Dec 17 07:35:50 1995 Pat Rankin <rankin@eql.caltech.edu>
+
+ * vax/vms.h (WCHAR_TYPE_SIZE): Define.
+
+Sun Dec 17 07:08:34 1995 Ronald F. Guilmette <rfg@monkeys.com>.
+
+ * fp-test.c: New file.
+
+Sun Dec 17 07:06:03 1995 Peter Flass <flass@lbdc.senate.state.ny.us>
+
+ * i370.md (cmpqi): Fix generation of literal operand of CLM instruction
+ to avoid double literals (=X'=F'...).
+
+Sun Dec 17 06:57:02 1995 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c: Try harder not to open or stat the same include file twice.
+ Simplify include file names so that they are more likely to match.
+ E.g. simplify "./a//b" to "a/b". Represent directories with simplified
+ prefixes, e.g. replace "./a//b" with "a/b/", and "." with "".
+ (absolute_filename): New function.
+ (do_include): Use it.
+ (read_name_map): Likewise; this makes things more consistent for DOS.
+ (main, do_include, open_include_file): -M output now contains
+ operands of -imacros and -include.
+ (skip_to_end_of_comment): When copying a // comment, don't try to
+ change it to a /* comment.
+ (rescan, skip_if_group, skip_to_end_of_comment, macarg1): Tune.
+ (rescan, skip_if_group, skip_to_end_of_comment, macarg1):
+ If warn_comments is nonzero, warn if backslash-newline appears
+ in a // comment. Simplify method for finding /* /* */ comment.
+ (skip_if_group): Optionally warn if /* /* */ appears between # and
+ a directive inside a skipped if group.
+ (macarg): Optionally warn if /* /* */ appears in a macro argument.
+ (strncat, VMS_strncat, vms_ino_t, ino_t): Remove.
+ (INCLUDE_LEN_FUDGE): Add 2 if VMS, for trailing ".h".
+ (INO_T_EQ, INO_T_HASH): New macros.
+ (struct file_buf): New member `inc'.
+ (expand_to_temp_buffer): Initialize it.
+ (struct file_name_list): New member `inc'.
+ (struct file_name_list): New member `st'.
+ c_system_include_path is now 1 if not 0.
+ fname is now an array, not a pointer.
+ (struct include_file): New members `next_ino', `deps_output', `st'.
+ Remove members `inode' and `dev'; they are now in `st'.
+ (INCLUDE_HASHSIZE): Rename from INCLUDE_HASH_SIZE.
+ (include_hashtab): Rename from include_hash_table.
+ (include_ino_hashtab): New variable.
+ (main): Store file status in struct stat, not in long and int pieces.
+ Use base_name to strip prefixes from file names.
+ When printing directory prefixes, omit trailing / and print "" as ".".
+ Fatal error if the input file is a directory.
+ (main, path_include): Regularize operands of -include, -imacros,
+ -isystem, -iwithprefix, and -iwithprefixbefore.
+ Regularize default include directories.
+ (do_include):
+ Allocate dsp with alloca, since fname is now dynamically allocated.
+ Use -3 to represent a never-opened file descriptor.
+ Make copy of file name, and simplify the copy.
+ Use base_name to identify the end of fname's directory.
+ Do not prepend dir for "..." if it matches the search list's first dir.
+ open_include_file now subsumes redundant_include_p and lookup_import.
+ Use bypass_slot to remember when to skip directories when including
+ a file that has already been seen.
+ Instead of using 0 to represent the working directory, and ""
+ to represent a directory to be ignored, use "" for the former,
+ and assume the latter has been removed before we get here.
+ Assume the directory prefixes have already been simplified.
+ Report as errors all open failures other than ENOENT.
+ Fatal error if fstat fails.
+ Use new deps_output member to avoid printing dependencies twice.
+ (bypass_hashtab): New variable.
+ (do_include, open_control_file, record_control_macro): New convention:
+ control_macro is "" if the file was imported or had #pragma once.
+ (pragma_once_marker): Remove.
+ (redundant_include_p, include_hash, lookup_include, lookup_import,
+ add_import, file_size_and_mode): Remove; subsumed by open_include_file.
+ (skip_redundant_dir_prefix): Remove; subsumed by simplify_filename.
+ (is_system_include, read_name_map, remap_include_file):
+ Assume arg is a directory prefix.
+ (base_name, simplify_filename, remap_include_file,
+ lookup_ino_include, new_include_prefix): New functions.
+ (open_include_file): New arguments `importing' and `pinc'.
+ Move filename mapping into new remap_include_file function.
+ First try to find file by name in include_hashtab;
+ if that doesn't work, open and fstat it and try to find it
+ by inode and dev in include_ino_hashtab.
+ (finclude): Get file status from inc->st instead of invoking fstat.
+ Store inc into fp->inc so that record_control_macro doesn't
+ need to do a table lookup.
+ (finclude, record_control_macro): Accept struct include_file *
+ instead of char * to identify include file. All callers changed.
+ (check_precompiled): Get file status from new argument `st'.
+ (do_pragma): Output at most one warning about #pragma implementation.
+ Always return 0 instead of returning garbage sometimes.
+ (do_pragma, hack_vms_include_specification):
+ Use base_name for consistency, and remove redundant code.
+
+ From Per Bothner:
+ Unify the 3 separate mechanisms for avoiding processing
+ of redundant include files: #import, #pragma once, and
+ redundant_include_p to use a single more efficient data structure.
+ (struct file_name_list): Remove no-longer needed field control_macro.
+ (dont_repeat_files, all_include_files): Remove, no longer used.
+ (struct import_file): Renmed to struct include_file, moved earlier
+ in file, renamed field name to fname, and added control_macro field.
+ (pragma_once_marker): New constant.
+ (import_hash_table): Renamed to include_hash_table.
+ (import_hash): Renamed to include_hash.
+ (IMPORT_HASH_SIZE): Renamed to INCLUDE_HASH_SIZE.
+ (main, path_include): Don't clear removed control_macro field.
+ (lookup_include): New function - look up fname in include_hash_table.
+ (redundant_include_p): Re-write to use lookup_include.
+ (lookup_import, record_control_macro): Likewise.
+ (add_import): Defer fstat to caller. Combine two xmallocs into one.
+ (do_once): Use pragma_once_marker in include_hash_table.
+ (do_pragma): Re-implement to scan include_hash_table.
+ (do_include): Use new lookup_include and add_import.
+
+Sun Dec 17 06:45:43 1995 John F. Carr <jfc@mit.edu>
+
+ * configure (savesrcdir): Do not create paths with trailing "/.".
+
+ * combine.c (try_combine): When checking for two sets of the same
+ register in a split insn, also test for setting a ZERO_EXTRACT,
+ STRICT_LOW_PART, or SUBREG.
+
+Sun Dec 17 06:37:00 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload.c (push_secondary_reload): Don't strip paradoxical SUBREG
+ if reload_class is CLASS_CANNOT_CHANGE_SIZE.
+
+Sat Dec 16 18:24:20 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_assignment): Fix alignment parm in emit_block_move.
+
+Sat Dec 16 18:16:08 1995 John Hassey (hassey@rtp.dg.com)
+
+ * local-alloc.c (optimize_reg_copy_2): Don't attempt
+ optimization if destination register dies.
+
+Sat Dec 16 08:31:16 1995 Paul Eggert <eggert@twinsun.com>
+
+ * fold-const.c (fold): Don't record overflow when negating
+ unsigned constants.
+
+Sat Dec 16 07:45:11 1995 Gran Uddeborg (uddeborg@carmen.se)
+
+ * configure (i[3456]-*-isc, gas, stabs): Remove crt* from extra_files
+
+Sat Dec 16 07:03:33 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * stor-layout.c (layout_record): When PCC_BITFIELD_TYPE_MATTERS,
+ compute bitpos using field_size % type_align instead of field_size.
+
+ * fixincludes (stdio.h): Fix return type of fread and fwrite
+ on sysV68.
+
+Sat Dec 16 06:57:14 1995 Thomas Lundqvist (d0thomas@dtek.chalmers.se)
+
+ * function.c (fixup_var_refs_1): Fix two incorrect calls to single_set.
+
+Fri Dec 15 22:30:27 1995 Torbjorn Granlund <tege@noisy.tmg.se>
+
+ * i386.h (REGISTER_MOVE_COST): Simplify.
+
+Fri Dec 15 22:30:27 1995 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * i386.h (TARGET_CPU_DEFAULT*, PROCESSOR_*,
+ TARGET_{LEAVE,386_ALIGNMENT,PUSH_MEMORY,ZERO_EXTEND_WITH_AND,
+ DOUBLE_WITH_ADD,BIT_TEST}): New macros.
+ * i386.c (ix86_cpu*, ix86_isa*): New global variables.
+ (override_options): Add -mcpu and -misa support
+ * i386.md: Use TARGET* macros.
+ * i386/dgux.{c,h}: New files.
+ * m88k/t-dgux: (GCC_FOR_TARGET, T_CFLAGS): New macros.
+ * m88k/t-dguxbcs: New file.
+ * m88k/x-{dgux,dguxbcs}: (GCC_FOR_TARGET, X_CFLAGS): Removed.
+
+Fri Dec 15 18:41:50 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * fixincludes (sys/wait.h): Add forward declaration of struct rusage
+ on AIX 3.2.5.
+
+Fri Dec 15 18:39:36 1995 Marco S Hyman (marc@dumbcat.sf.ca.us)
+
+ * xm-bsd386.h (DONT_DECLARE_SYS_SIGLIST): Defined.
+
+Fri Dec 15 18:36:42 1995 Gran Uddeborg (uddeborg@carmen.se)
+
+ * i386/svr3dbx.h (DO_GLOBAL_DTORS_BODY): Delete; obsolete.
+
+Fri Dec 15 18:21:34 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * i386/i386iscgas.h, i386/t-iscscodbx: Deleted; long dead.
+
+Fri Dec 15 10:01:27 1995 Stan Cox <coxs@dg-rtp.dg.com>
+
+ * configure (target_cpu_default) Set for 486/586/686
+ (m88k-dg-dgux) Use t-dguxbcs instead of x-dguxbcs
+ (i*86*) Change [345] to [3456]
+ (i[3456]86-dg-dgux) Added
+ * Makefile.in (out_object_file) Add MAYBE_TARGET_DEFAULT
+
+Fri Dec 15 08:05:49 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (init_temp_slots): New function.
+ (init_function_start): Code moved to new function and called here.
+ * toplev.c (rest_of_compilation): Call init_temp_slots.
+
+ * expmed.c (store_bit_field): Don't use insv for BLKmode value.
+ (store_split_bit_field): Set total_bits to BITS_PER_FOR for
+ BLKmode value.
+
+Fri Dec 15 06:35:36 1995 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * xcoffout.h (DBX_STATIC_BLOCK_END): Use macro arguments.
+ (xcoff_begin_function_line, xcoff_current_function_file): Remove
+ unused extern declarations.
+ (DBX_OUTPUT_MAIN_SOURCE_FILENAME): Use macro argument.
+ * xcoffout.c (xcoff_begin_function_line): Make static.
+ (xcoff_inlining): Likewise.
+ (xcoff_current_function_file): Likewise.
+ (xcoff_output_standard_types): Remove TARGET_64BIT dependencies from
+ int and unsigned int.
+
+Mon Oct 16 12:25:52 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * fix-header.c: Support different kinds of functions (ANSI and
+ Posix1). Enable ANSI proptotypes if __STRICT_ANSI__.
+ (namelist_end): Removed.
+ (std_include_table): Divide up functions into kinds.
+ (add_symbols): New function.
+ (read_scanfile, write_rbrac, main): Use new data structures.
+
+Thu Dec 14 19:17:12 1995 Torbjorn Granlund <tege@noisy.tmg.se>
+
+ * rs6000.md (umulsidi3): New pattern.
+
+Thu Dec 14 18:08:59 1995 Torbjorn Granlund <tege@noisy.tmg.se>
+
+ * expmed.c (expand_divmod, case TRUNC_DIV_EXPR): Only reject
+ larger-than-HOST_BITS_PER_WIDE_INT modes for general constants,
+ not for powers-of-2.
+
+ * i960.md (andsi3): Match op2 with logic_operand, change constraints
+ accordingly. Output andnot for negative op2.
+ (iorsi3, xorsi3): Analogous changes.
+ * i960.c (logic_operand): New function.
+ (i960_print_operand): Handle code `C'.
+ * i960.h (PREDICATE_CODES): Add logic_operand.
+ (CONST_OK_FOR_LETTER_P): Handle `M'.
+ * i960.md: Move all plain logical patterns together.
+ * i960.h (SHIFT_COUNT_TRUNCATED): Define as 0 as appropriate.
+
+ * clipper.md (untyped_call): New pattern.
+
+ * m68k.md (ashrsi_31): New pattern.
+
+Thu Dec 14 17:22:14 1995 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ * arm.c (output_move_double): Extract DFmode constants using
+ REAL_VALUE_TO_TARGET_DOUBLE.
+
+Thu Dec 14 15:05:13 1995 Doug Evans <dje@cygnus.com>
+
+ * Makefile.in (distclean): Delete float.h.
+ * configure: Set CROSS_FLOAT_H from float_format.
+ * config/float-i64.h: New file.
+ * config/float-i32.h: New file.
+ * config/float-vax.h: New file.
+ * arm/cross-float.h: Delete.
+ * arm/t-semi (CROSS_FLOAT_H): Delete.
+
+Wed Dec 13 19:16:57 1995 Mike Stump <mrs@cygnus.com>
+
+ * expr.c (expand_expr, case ADDR_EXPR): Ensure op0 isn't QUEUED.
+
+Wed Dec 13 19:12:21 1995 Paul Eggert <eggert@twinsun.com>
+
+ * gcc.c (my_strerror): Return "cannot access" if errno is 0.
+ (perror_with_name, pfatal_with_name, perror_exec): Don't assume that
+ the returned value from my_strerror contains no '%'s.
+ (sys_nerr): Declare only if HAVE_STRERROR is not defined.
+
+Wed Dec 13 19:05:47 1995 Alan Modra (alan@spri.levels.unisa.edu.au)
+
+ * Makefile.in (c-parse.y, objc-parse.y): Add warning that file is
+ automatically generated.
+
+Wed Dec 13 15:40:30 1995 Mike Stump <mrs@cygnus.com>
+
+ * function.c (identify_blocks): Start with chain of BLOCKs to match
+ rest of backend (dbxout.c), instead of just one BLOCK.
+ (reorder_blocks, all_blocks): Likewise.
+
+ * stmt.c (find_loop_tree_blocks): Pass the toplevel list of
+ blocks, not just the first subblock.
+
+Wed Dec 13 16:11:18 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expmed.c (expand_divmod): Don't use TARGET if it's the wrong mode.
+
+Wed Dec 13 15:02:39 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * dbxout.c (struct typeinfo): Define.
+ (typevec): Change to be struct typeinfo *. Change other uses as
+ appropriate.
+ (struct dbx_file): Define if DBX_USE_BINCL.
+ (current_file): New static variable if DBX_USE_BINCL.
+ (next_file_number): Likewise.
+ (dbxout_init): If DBX_USE_BINCL, initialize new variables.
+ (dbxout_start_new_source_file): New function.
+ (dbxout_resume_previous_source_file): New function.
+ (dbxout_type_index): New function.
+ (dbxout_range_type): Use dbxout_type_index.
+ (dbxout_type): Likewise. If DBX_USE_BINCL, initialize new typevec
+ fields.
+ * c-lex.c (check_newline): If DBX_DEBUGGING_INFO and write_symbols
+ == DBX_DEBUG, call dbxout_start_new_source_file and
+ dbxout_resume_previous_source_file when appropriate.
+ * sparc/sunos4.h (DBX_USE_BINCL): Define.
+ * svr4.h (DBX_USE_BINCL): Define.
+
+Wed Dec 13 06:52:40 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000/win-nt.h (ASM_OUTPUT_EXTERNAL): Do not emit .extern for
+ builtin functions.
+
+Tue Dec 12 15:37:48 1995 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.c: Replace many uses of fprintf with putc and fputs.
+ (output_function_profiler): Use more efficient mnemonics, target
+ dependent mnemonics, asm_fprintf, and reg_names array.
+
+ * rs6000.h: Replace many uses of fprintf with putc and fputs.
+
+ * rs6000.h (INT_TYPE_SIZE): Remove TARGET_64BIT dependency.
+ (MAX_INT_TYPE_SIZE): Delete.
+
+Tue Dec 12 13:58:57 1995 Doug Evans <dje@cygnus.com>
+
+ * t-h8300 (MULTILIB_{OPTIONS,DIRNAMES}): Add -mint32 support.
+
+Sun Dec 10 18:51:21 1995 Torbjorn Granlund <tege@noisy.tmg.se>
+
+ * rs6000.md (matcher for neg:SI (geu:SI ..)): Get ppc syntax right.
+
+Sun Dec 10 08:47:16 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (simplify_if_then_else): Convert "a == b ? b : a" to "a".
+
+ * expr.c (expand_expr, case CONSTRUCTOR): If TREE_READONLY,
+ set RTX_UNCHANGING_P in TARGET.
+ (expand_expr, case COMPONENT_REF): If result is BLKmode,
+ use that to access object too.
+
+Sun Dec 10 01:06:57 1995 Jeffrey A. Law <law@cygnus.com>
+
+ * pa.md (millicode delay slot description): Remove reference
+ to defunct TARGET_MILLICODE_LONG_CALLS.
+
+Sat Dec 9 18:05:03 1995 Jim Wilson <wilson@cygnus.com>
+
+ * expr.c (expand_expr, case INDIRECT_REF): Correct typo in May 8
+ change.
+
+ * sh.h (ADDRESS_COST): Define.
+ * sh.md (subsi3): Rename to subsi3_internal. Add new define_expand
+ to handle subtracting a register from a constant.
+
+Fri Dec 8 19:17:30 1995 Mike Meissner <meissner@beauty.cygnus.com>
+
+ * rs6000.c (input_operand): Allow any integer constant, not
+ just integers that fit in 1 instruction.
+
+Fri Dec 8 10:45:07 1995 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ * arm/lib1funcs.asm (RET, RETCOND): Define according to whether we
+ are compiling for 32 or 26 bit mode.
+ (all return instructions): Use RET or RETCOND as appropriate.
+
+Wed Dec 6 06:58:23 1995 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ * arm.c (arm_gen_constant): New function.
+ (arm_split_constant): Split most of the functionality into
+ arm_gen_constant. Try to decide which way of handling the constant
+ is optimal for the target processor.
+
+ * arm.c (arm_prgmode): New enum.
+ (target_{cpu,fpe}_name, arm_fast_multiply, arm_arch4): New variables.
+ (all_procs): New table describing processors and capabilities.
+ (arm_override_options): New function.
+ (arm_return_in_memory): New function.
+ (arm_rtx_costs): Adjust the multiply costs to cope with processors
+ with fast multiplication instructions.
+ (output_move_double): Use the ldm/stm variants more efficiently.
+ Delete cases that can no-longer occur.
+ (output_return_instruction, output_func_epilogue): Use TARGET_APCS_32,
+ not TARGET_6 for determining the type of return instruction to emit.
+ (final_prescan_insn case CALL_INSN): Use TARGET_APCS_32, not TARGET_6
+ to determine condition preservation.
+ * arm.h (CPP_SPEC): Add defines for the cpu type, hard or soft floating
+ point, and the APCS PC size.
+ (TARGET_*): Restructure.
+ (ARM_FLAG_*): Many new definitions for different target options, not
+ all of which are supported yet.
+ (TARGET_SWITCHES): Use the ARM_FLAG_* definitions instead of explicit
+ numbers.
+ (prog_mode_type): New enum.
+ (floating_point_type): Split emulated floating point into FP_SOFT[23].
+ (OVERRIDE_OPTIONS): Call arm_override_options.
+ (ARM_CPU_NAME): Default to NULL if not defined by a subtarget.
+ (BYTES_BIG_ENDIAN): Can now be set as a compilation option.
+ (RETURN_IN_MEMORY, DEFAULT_PCC_STRUCT_RETURN): New definitions.
+ (GO_IF_LEGITIMATE_OFFSET): Use different HImode offsets if compiling
+ for an architecture 4 target. The offsets for floating point
+ constants are the same as for integers if compiling TARGET_SOFT_FLOAT.
+ (GO_IF_LEGITIMATE_ADDRESS): Don't allow PRE_INC and POST_DEC if
+ the size is more than 4 bytes. Restrict the range offsets for DImode;
+ likewise for DFmode when TARGET_SOFT_FLOAT.
+ (LEGITIMIZE_ADDRESS): Use symbol_mentioned_p, not LEGITIMATE_CONSTANT_P
+ to determine if a constant address might be better in a register.
+ Handle DFmode addresses in the same way as DImode if TARGET_SOFT_FLOAT.
+ (LOAD_EXTEND_OP): If arm_arch4, then HImode also zero-extends.
+ * arm.md (attributes): Rearrange order, so that condition clobbering
+ can be automatically determined for call insns.
+ (attribute cpu): Add new cpu ARM7.
+ (attribute type): Add new type MULT.
+ (attribute prog_mode): New attribute.
+ (attribute conds): Clobbering of call insns can now be determined
+ using prog_mode attribute.
+ (function units "write_buf", "write_blockage"): Model the write buffer
+ as two function units, so that conflicts are avoided more often.
+ (funcion unit "core"): New function unit, so that elapsed cycles can
+ be more accurately determined.
+ (all anonymous patterns): Add names.
+ (mulsidi3, umulsidi3): New patterns available with fast multiply
+ variants.
+ (all call insns): The conds attribute is now determined automatically.
+ (zero_extendhisi): Expand for architecture 4 variants if appropriate.
+ (*zero_extendhisi_insn): New pattern.
+ (extendqi{hi,si}, extendhisi): Expand for architecture 4 variants if
+ appropriate.
+ (*extendhisi_insn, *extendqihi, *extendqisi): New patterns.
+ (storehi_single_op): New expand.
+ (movhi): Handle architecture 4 expansion.
+ (*movhi_insn_arch4): New pattern.
+ (*movhi_*): Adjust applicability conditions to handle architecture 4.
+ (reload_outdf): Handle pre/post inc/dec reloads.
+ (tablejump): Delete.
+ (matcher for optimized tablejump): delete.
+ (casesi): New expand.
+ (casesi_internal): New pattern.
+ * semi.h (EXIT_BODY): Delete.
+ (TARGET_DEFAULT): Set to ARM_FLAG_APCS_32.
+ (CPP_SPEC): Define.
+ arm/cross-float.h: New file, used when building a cross-compiler.
+ * t-semi: Don't define inhibit_libc when building libgcc2.a.
+ (CROSS_FLOAT_H): Define.
+
+ * arm.c ({symbol,label}_mentioned_p): New functions.
+ (add_constant, dump_table, fixit, find_barrier, broken_move): New
+ support functions for handling constant spilling.
+ (arm_reorg): New constant spilling pass, for putting unhandlable
+ constants into the rtl where we can load them efficiently.
+ (output_load_symbol): Delete.
+ * arm.h (SECONDARY_OUTPUT_RELOAD_CLASS): No need to handle floating
+ point constants any more, since arm_reorg will deal with them.
+ (LEGITIMATE_CONSTANT_P): Is now anything that doesn't contain a
+ LABEL.
+ (GO_IF_LEGITIMATE_ADDRESS): Recognize address expressions generated
+ by arm_reorg, but only after reload has completed.
+ (MACHINE_DEPENDENT_REORG): Define.
+ (ASM_OUTPUT_SPECIAL_POOL_ENTRY): There should be nothing left in
+ the pool, even if it might look like it.
+ * arm.md (*movsi_insn): Much simpified now that constants are handled
+ properly.
+ (movaddr): New expand.
+ (movsf, movdf): No need to force constants into the pool any more.
+ (*movdf_hard_insn): Much simplified.
+ (consttable_4, consttable_8, consttable_end, align_4): New patterns
+ for supporting embedded constants.
+
+ * configure: New target arm-semi-aof.
+ * arm.c (strings_fpa): Use a form which is common to both GAS and
+ ARMASM.
+ (output_return_instruction, output_func_epilogue): Call
+ assemble_external_libcall, before trying to generate an abort call
+ in the assembler.
+ (arm_asm_output_label): Call ARM_OUTPUT_LABEL, rather than assuming
+ that labels are followed by a colon.
+ (aof_text_section, aof_add_import, aof_delete_import,
+ aof_dump_imports): New functions to support ARMASM assembler
+ generation.
+ * arm/aout.h: New file.
+ * arm/aof.h: New file.
+ * arm.h (most assembler-specific defines): Move to arm/aout.h.
+ (CONSTANT_ADDRESS_P): Can't directly access constant strings when
+ generating assembler for ARMASM.
+ (ENCODE_SECTION_INFO): Don't define if generating ARMASM assembler.
+ (ASM_OUTPUT_INTERNAL_LABEL): Generalize, so that it can be used
+ with all targeted assemblers.
+ (ASM_OUTPUT_LABEL): Call arm_asm_output_label.
+ * riscix.h: Include arm/aout.h, not arm/arm.h.
+ * riscix1-1.h: Likewise.
+ * semi.h: Likewise.
+ * arm/semiaof.h: New file.
+ * arm/t-semiaof: New file.
+
+Mon Dec 4 22:17:37 1995 Jason Merrill <jason@yorick.cygnus.com>
+
+ * gcc.c (LIBGCC_SPEC): Do link with libgcc when -shared.
+ * alpha.h (LIBGCC_SPEC): Remove.
+ * linux.h (LIBGCC_SPEC): Remove.
+ * svr4.h (LIBGCC_SPEC): Remove.
+ * i386/t-crtpic (TARGET_LIBGCC2_CFLAGS): Use -fPIC.
+ * t-pa (TARGET_LIBGCC2_CFLAGS): Use -fPIC.
+ * sparc/t-sunos41 (TARGET_LIBGCC2_CFLAGS): Use -fPIC.
+ * sparc/t-sol2 (TARGET_LIBGCC2_CFLAGS): Use -fPIC.
+ * configure (i386-linux): Use i386/t-crtpic.
+
+ * i386/xm-sco.h: #define NO_SYS_SIGLIST.
+
+Mon Dec 4 21:30:37 1995 Jim Wilson <wilson@mole.gnu.ai.mit.edu>
+
+ * sh.c (shiftcosts): For SH3, max cost of arithmetic right shift is 3.
+ (expand_ashiftrt): For SH3, if shift cost is more than 3, then
+ call gen_ashrsi3_d to use shad instruction.
+
+Mon Dec 4 18:29:08 1995 Jason Merrill <jason@yorick.cygnus.com>
+
+ * c-decl.c (finish_struct): Don't mess with the type of bitfields.
+
+Mon Dec 4 15:28:02 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (store_constructor, record): If field is READONLY,
+ set RTX_UNCHANGING_P in TO_RTX.
+
+Mon Dec 4 12:59:33 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * sparc/t-sol2 (CRTSTUFF_T_CFLAGS): Use -fPIC unconditionally.
+
+Sun Dec 3 20:55:43 1995 Jeffrey A. Law <law@cygnus.com>
+
+ * pa.h (ASM_OUTPUT_FUNCTION_PREFIX): Handle arbitrary sections.
+ (ASM_OUTPUT_SECTION_NAME): Define.
+
+Sat Dec 2 22:19:16 1995 Jeffrey A. Law (law@cygnus.com)
+
+ * pa.h: Replace many uses of fprintf with fputs.
+ * pa.c: Likewise.
+ * pa-pro.h: Likewise.
+
+ * pa.h (SECONDARY_RELOAD_CLASS): Don't call secondary_reload_class
+ to handle trivial cases.
+ * pa.c (secondary_reload_class): Rework to be more efficient.
+
+Sat Dec 2 07:52:46 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.md (movsi): Don't split large constants in the
+ movsi pattern, let the define_split split it later as needed.
+
+Fri Dec 1 16:00:42 1995 Brendan Kehoe <brendan@cygnus.com>
+
+ * sparc.c (output_double_int): Handle CODE_LABEL's if v9.
+
+Fri Dec 1 09:13:23 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * m68k.md (decrement_and_branch_until_zero): Split into a
+ define_expand and an anonymous define_insn.
+ * fx80.md (decrement_and_branch_until_zero): Ditto.
+ * m88k.md (decrement_and_branch_until_zero): Ditto.
+
+Thu Nov 30 15:02:16 1995 Jim Wilson <wilson@mole.gnu.ai.mit.edu>
+
+ * sh.c (noncall_uses_reg): New function.
+ (machine_dependent_reorg): Add support for TARGET_RELAX.
+ (final_prescan_insn): Likewise.
+ * sh.h (ASM_SPEC, LINK_SPEC): Pass on -mrelax.
+ (RELAX_BIT, TARGET_RELAX): New macros.
+ (TARGET_SWITCHES): Add -mrelax.
+
+ * sh.c (insn-attr.h): Include.
+ (pragma_nosave_low_regs): New global variable.
+ (calc_live_regs): If SH3 and pragma_nosave_low_regs, then don't
+ save registers r0 through r7 for interrupt functions.
+ (function_epilogue): Clear pragma_nosave_low_regs.
+ (handle_pragma): Set pragma_nosave_low_regs if see pragma for it.
+
+ * sh.h (FUNCTION_PROFILER): Use trap #33 instead of trap #5.
+ Put additional .align before trapa instruction.
+
+Thu Nov 30 14:45:13 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * sparc.md (seqdi_special_trunc, snedi_special_trunc,
+ seqsi_special_extend, snesi_special_extend): Delete uses of SUBREG.
+ Make compare modes match modes of operands.
+ (snesi_zero_extend, snedi_zero_trunc_sp32, snedi_zero_trunc_sp64,
+ seqsi_zero_extend, seqdi_zero_trunc_sp32, seqdi_zero_trunc_sp64):
+ New patterns.
+
+Thu Nov 30 12:27:22 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * genmultilib: Take a 4th argument that says are the exceptions to
+ the multilibs, so illegal combinations can be eliminated.
+
+ * Makefile.in (multilib.h): Pass $(MULILIB_EXCEPTIONS) as the 4th
+ argument to genmultilib.
+
+ * configure (powerpc*): Remove little endian and eabiaix versions
+ of the t-* files. Accept powerpc{,le}-*-sysv in addition to
+ *-sysv4.
+ (powerpc{,le}-*-eabisim): Use standard t-eabigas instead of
+ t-eabisim.
+ (powerpcle-*-{winnt3,pe}): Add support for Windows NT on PowerPC.
+ * rs6000/t-{eabiaix,eabisim,eabilegas,ppclegas}: Delete.
+
+ * rs6000/{t-winnt,win-nt.h}: New files for PowerPC Windows NT.
+
+ * ginclude/ppc-asm.h: New file to provide common macros for the
+ various PowerPC calling sequences.
+ * rs6000/eabi.asm: Use ppc-asm.h.
+
+ * rs6000/aix3newas.h (CPP_SPEC): Add support for -mcpu=603e, 602,
+ and 620.
+ * rs6000/{aix41,powerpc,rs6000,eabi{aix,le}}.h (CPP_SPEC): Ditto.
+ * rs6000/sysv4{,le}.h (CPP_SPEC): Ditto.
+
+ * rs6000/aix3newas.h (LINK_SPEC): If cross compiling, don't use
+ absolute paths.
+ * rs6000/{aix41,aixppc,rs6000}.h (LINK_SPEC): Ditto.
+
+ * rs6000/eabi.h (INVOKE__main): Don't define any more.
+ (ASM_OUTPUT_INT): Move to sysv4.h.
+ ({STARTFILE,LIB}_SPEC): If -msim or -mmvme add the appropriate
+ libraries.
+
+ * rs6000/{eabiaix,eabile,sysv4{,le}}.h (CPP_SPEC): Add support for
+ -mcall-{aixdesc,nt} directives.
+ (MULTILIB_DEFAULTS): Define.
+
+ * rs6000/eabi{,le}sim.h (TARGET_DEFAULT, CPP_SPEC): No longer
+ define, simulator supports floating point.
+ ({STARTFILE,LIB}_SPEC): If -mvme, use mvme libraries, not
+ simulator libraries.
+
+ * rs6000/{mach,netware}.h (TARGET_AIX): Define as 0.
+
+ * rs6000/netware.h (RS6000_OUTPUT_BASENAME): Don't redefine
+ anymore.
+ (STRIP_NAME_ENCODING): Undef.
+
+ * rs6000.c (rs6000_save_toc_p, rs6000_abi): New globals.
+ (rs6000_override_options): Add 602, 603e, and 620 support.
+ (count_register_operand): New function to return true if operand
+ is the count register.
+ (easy_fp_constant): All constants are easy if -msoft-float.
+ (volatile_mem_operand): New function to return true if operand is
+ in volatile memory.
+ ({fp_,}reg_or_mem_operand): Call volatile_mem_operand.
+ (input_operand): Allow support for Windows NT loading SYMBOL_REFs
+ and LABEL_REFs from the TOC.
+ (function_arg_boundary): On Windows NT, any argument >= 8 bytes
+ must be double word aligned.
+ (function_arg{_advance,}): Call function_arg_boundary to determine
+ if we need to align to an odd register for large arguments.
+ Changes to accomidate new method of determining which ABI we're
+ adhering to.
+ (expand_block_move_mem): Copy RTX_UNCHANGING_P, and if
+ MEM_UNALIGNED_P is defined, copy that too.
+ (expand_block_move): Copy dest/src to registers using
+ copy_addr_to_reg.
+ (print_operand): Changes to accomidate Windows NT.
+ (first_reg_to_save): Ditto.
+ (rs6000_stack_info): Ditto.
+ (debug_stack_info): Ditto.
+ (output_{prolog,epilog,toc,function_profiler}): Ditto.
+ (rs6000_stack_info): Save main's arguments around __eabi call.
+ (svr4_traceback): Delete, current V.4 ABI no longer wants
+ tracebacks in this format.
+ (output_prolog): Call __eabi here, saving and restoring main's
+ args if needed. Save the toc pointer if needed.
+ (get_issue_rate): New function to return # of instructions a
+ machine can issue at once.
+ (rs6000_sync_trampoline): Emit instructions to synchronize the
+ PowerPC caches after a trampoline.
+ (rs6000_trampoline_{template,size}): New functions to provide
+ common trampoline support for all ABI's.
+ (rs6000_initialize_trampoline): Ditto.
+
+ * rs6000.h (TARGET_{WINDOWS_NT,AIX,MACOS}): Define.
+ (processor_type): Add 602.
+ (PROCESSOR_COMMON): Assume current processor is a 604, not a 601.
+ (SUBTARGET_OPTIONS): Define if not defined.
+ (TARGET_OPTIONS): Include SUBTARGET_OPTIONS.
+ (COUNT_REGISTER_REGNUM): Define as 66.
+ (EXTRA_CONTRAINT): Add 'S' and 'T' for Windows NT.
+ (rs6000_abi): Add ABI_AIX_NODESC, ABI_NT.
+ (DEFAULT_ABI): Define if not defined.
+ (rs6000_stack): Add fields for Windows NT support.
+ (RS6000_SAVE_TOC): Add for Windows NT support.
+ (FUNCTION_ARG_BOUNDARY): Call function_arg_boundary.
+ (trampoline macros): Call trampoline functions in rs6000.c.
+ (RETURN_ADDRESS_OFFSET): Add Windows NT support.
+ (toc_section): Skip leading '*'.
+ (PREDICATE_CODES): Add volatile_mem_operand,
+ count_register_operand.
+ (MACHINE_issue_rate): Define.
+ (function decls): Add new function decls from rs6000.c.
+
+ * rs6000.md (cpu attribute): Add 602.
+ (function units): Update to match reality better.
+ (calls through pointer): Rework to support Windows NT.
+ (movsi): Add Windows NT support.
+ (movstrsi): Remove match_operand predicates, since
+ expand_block_move does the checking.
+ (sync_isync): Delete.
+ (icbi, dcbst, sync, isync): New insns to generate named instruction
+ for making trampolines on eabi/V.4 properly flush the caches.
+ (decrement_and_branch_on_count): Rename from
+ decrement_and_branchsi. Add update of count in insn pattern.
+
+ * rs6000/sysv4.h (TARGET_SWITCHES): Drop -mtraceback. Keep
+ -mno-traceback but don't do anything with it. Add
+ -mcalls-{nt,aixdesc}. Add -m{,no-}relocatable-lib. Add -msim,
+ -mmvme, and -memb.
+ (TARGET_TOC): Update for use with -mcalls-{nt,aixdesc}.
+ (SUBTARGET_OVERRIDE_OPTIONS): Update for new switches.
+ (RS6000_OUTPUT_BASENAME): Delete.
+ (toc_section): Add support for -mcall-{nt,aixdesc}.
+ (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): Ditto.
+ (ASM_DECLARE_FUNCTION_NAME): Use STRIP_NAME_ENCODING instead of
+ RS6000_OUTPUT_BASENAME. For -mcall-{nt,aixdesc} emit the proper
+ function descriptor.
+ (ASM_SPEC): Pass appropriate -mxxx switches to the assembler based
+ on the -mcpu=xxx options.
+ (ASM_OUTPUT_INT): Move here from eabi.h.
+ (ENCODE_SECTION_INFO): If -mcall-{nt,aixdesc} add approriate magic
+ so function name has two or one leading periods.
+ (ASM_OUTPUT_SOURCE_LINE): Delete, use version in svr4.h.
+ (trampoline macros): Call trampoline functions in rs6000.c.
+
+ * t-{eabi,ppc}{,gas} (EXTRA_HEADERS): Add ginclude/ppc-asm.h.
+ (LIB2FUNCS_EXTRA): Depend on eabi.S, not eabi.s.
+ (eabi.S): Rename from eabi.asm.
+
+ * t-{eabi,ppc}gas (MULTILIB_*): Add -mcall-aixdesc libraries, but
+ don't build either little endian or -mrelocatable versions of
+ those libraries.
+
+Tue Nov 28 00:10:27 1995 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.md (divsi3): Reorder so common mode does not negate
+ power-of-2 shift optimization.
+
+Wed Nov 29 22:06:11 1995 J.T. Conklin <jtc@rtl.cygnus.com>
+
+ * configure (sparc-*-solaris2*): Add gcrt1.o to extra_parts.
+ * sparc/sol2.h (STARTFILE_SPEC): Link with gcrt1.o with -pg.
+ * sparc/sol2-g1.asm: New file, startup code for profiled
+ executables.
+ * sparc/t-sol2: Add make rule for gcrt1.o.
+ * sparc/gmon-sol2.c (_mcleanup): Add support for PROFDIR
+ environment variable.
+
+Wed Nov 29 21:41:13 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * mips/abi64.h (CPP_SPEC): If -msingle-float and not
+ -msoft-float, pass -D__mips_single_float. Likewise for -m4650 and
+ not -msoft-float.
+ * mips/dec-bsd.h (CPP_SPEC): Likewise.
+ * mips/dec-osf1.h (CPP_SPEC): Likewise.
+ * mips/elf64.h (CPP_SPEC): Likewise.
+ * mips/iris3.h (CPP_SPEC): Likewise.
+ * mips/iris5.h (CPP_SPEC): Likewise.
+ * mips/mips.h (CPP_SPEC): Likewise.
+ * mips/netbsd.h (CPP_SPEC): Likewise.
+ * mips/osfrose.h (CPP_SPEC): Likewise.
+ * mips/t-ecoff (MULTILIB_OPTIONS, MULTILIB_DIRNAMES,
+ MULTILIB_MATCHES): Add -msingle-float support.
+
+Wed Nov 29 17:57:48 1995 Doug Evans <dje@cygnus.com>
+
+ * toplev.c (main): Invoke OPTIMIZATION_OPTIONS after target_flags
+ has been initialized so sets of target_flags aren't clobbered.
+
+ * cccp.c (do_include): Recognize c:\foo as absolute path name in DOS.
+
+ * svr4.h (MD_EXEC_PREFIX): Don't use if cross compiling.
+ (MD_STARTFILE_PREFIX): Likewise.
+ (LINK_SPEC): Don't use absolute path names if cross compiling.
+ * svr3.h (LIB_SPEC): Likewise.
+
+ * gcc.c (do_spec_1): Fix typos in version calculation.
+
+Wed Nov 29 14:06:13 1995 Jim Wilson <wilson@cygnus.com>
+
+ * sh.md (ashrsi3_d): Use %0 not %1 in output pattern.
+
+ * svr4.h (MAX_OFILE_ALIGNMENT): Define.
+
+ * mips/iris5.h (WORD_SWITCH_TAKES_ARG): Define.
+ (LINK_SPEC): Add rpath.
+ * mips/iris6.h (LINK_SPEC): Likewise.
+
+ * stupid.c (stupid_mark_regs): For hard registers, use regno+j
+ instead of just regno in MARK_LIVE_AFTER and SET_HARD_REG_BIT calls.
+
+ * c-common.c (combine_strings): Add support for WCHAR_TYPE as short.
+
+Wed Nov 29 13:59:58 1995 J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+ * c-decl.c (duplicate_decls): Add new paramter different_binding_level.
+ Lots of changes to use new new parameter.
+ (pushdecl): Delete variable declared_global. New variable
+ different_binding_level and code to set it. Move extern/static
+ warning before duplicate_decls call. Don't let global typedefs
+ conflict with nested extern declarations. Move oldglobal test
+ inside code for setting IDENTIFIER_LIMBO_VALUE.
+ (lookup_name_current_level_global): Delete.
+ * c-tree.h (merge_attributes): New declaration.
+ * c-typeck.c (merge_attributes): New function. Move code from
+ common_type to here.
+ (common_type): Call merge_attributes instead of having inline code.
+ * integrate.c (integrate_decl_tree): Delete variable newd.
+ Always set DECL_ABSTRACT_ORIGIN before calling pushdecl.
+
+Tue Nov 28 21:57:04 1995 Jim Wilson <wilson@cygnus.com>
+
+ * mips.c (mips_function_value): Add check for i > 0 when deciding
+ if structure should be return in FP registers.
+
+Tue Nov 28 12:47:52 1995 Jeffrey A. Law <law@cygnus.com>
+
+ * pa.md (define split for (plus (reg) (large_constant)): Try
+ another way to handle this with only 2 insns. From Tege.
+
+Mon Nov 27 02:05:18 1995 Jeffrey A. Law <law@cygnus.com>
+
+ * lib1funcs.asm, pa-pro.h, t-pro.h, xm-papro.h: New PA
+ target files.
+ * configure (hppa*-*-pro*): Use new target files.
+
+ * toplev.c (rest_of_compilation): Always call jump_optimize
+ at least once.
+
+ * pa.h (ASM_OUTPUT_EXTERNAL): Don't let assemble_name clobber
+ the value of TREE_SYMBOL_REFERENCED.
+
+ * pa-ghpux9.h (LINK_SPEC): Pass "-z" to the linker to enable
+ trap on null pointer dereference for programs built on hpux9.
+ * pa-hpux9.h, pa1-ghpux9.h, pa1-hpux9.h: Likewise.
+
+ * pa.c (output_function_prologue): No longer need to keep
+ track of the total number code bytes when TARGET_GAS &&
+ not TARGET_PORTABLE_RUNTIME.
+ * pa.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Use .NSUBSPA when
+ not TARGET_PORTABLE_RUNTIME.
+ (ASM_OUTPUT_FUNCTION_PREFIX): Define. Prefix functions with
+ .NSUBSPA when TARGET_GAS and not TARGET_PORTABLE_RUNTIME.
+
+ * pa.md (symbolic high patterns): Use 'H' to print the symbolic
+ address so that the constant part gets rounded.
+ * pa.c (print_operand): Handle 'H' operand for high part of a
+ symbolic address with a rounded constant.
+ (output_global_address): New argument "rounded_constant". All
+ callers changed appropriately.
+
+ * x-pa-hpux (FIXPROTO_DEFINES): Add -D_HPUX_SOURCE.
+
+ * pa.h (CPP_SPEC): Only pass -D_HPUX_SOURCE and -D_HIUX_SOURCE if
+ -ansi is not present.
+ (CPP_PREDEFINES): Remove -D_HPUX_SOURCE and/or -D_HIUX_SOURCE.
+ * pa-ghiux.h (CPP_PREDEFINES): Likewise.
+ * pa-gux7.h (CPP_PREDEFINES): Likewise.
+ * pa-hiux.h (CPP_PREDEFINES): Likewise.
+ * pa-hpux.h (CPP_PREDEFINES): Likewise.
+ * pa-hpux7.h (CPP_PREDEFINES): Likewise.
+ * pa1-ghiux.h (CPP_PREDEFINES): Likewise.
+ * pa1-hiux.h (CPP_PREDEFINES): Likewise.
+
+ * pa-hpux.h (LINK_SPEC): If -mlinker-opt, then pass -O to the
+ linker.
+ * pa-ghpux.h, pa-hpux9.h, pa-ghpux9.h: Likewise.
+ * pa1-ghpux9.h, pa1-hpux9.h: Likewise.
+ * pa.h (LINK_SPEC): Likewise.
+ (TARGET_SWITCHES): Add -mlinker-opt.
+
+ * pa.md (all peepholes): Disable if TARGET_SOFT_FLOAT.
+
+ * pa.c (pa_reorg): If TARGET_GAS, then emit insns to mark
+ the beginning and end of the branch table.
+ * pa.md (begin_brtab): New insn. Just a marker so GCC knows
+ where to put the .begin_brtab pseudo-op.
+ (end_brtab): Similarly.
+
+ * pa.h (EXTRA_SECTIONS): Add in_ctors and in_dtors if
+ CTORS_SECTION_FUNCTION is defined. Else define dummy
+ versions of CTORS_SECTION_FUNCTION and DTORS_SECTION_FUNCTION.
+ (EXTRA_SECTION_FUNCTIONS): Add CTORS_SECTION_FUNCTION and
+ DTORS_SECTION_FUNCTION.
+
+ * pa.md: Add peepholes to improve spill code generated
+ by reload when we run out of FP registers.
+
+ * xm-pa.h: Remove spurious double-quote.
+
+ * pa.md (call expanders): For indirect calls, load %r22 with the
+ function's address.
+ (indirect call patterns): No need to copy the call address into
+ %r22 anymore.
+
+ * pa.c (output_cbranch): Fix buglet in length handling of
+ backwards branches with unfilled delay slots.
+ (output_bb, output_bvb, output_dbra, output_movb): Likewise.
+
+ * pa.md: Fix off-by-one error in length computations for all
+ conditional branch patterns.
+
+ * pa.h (output_bvb): Declare.
+ * pa.c (output_bvb): New function to output branch on variable
+ bit insns.
+ * pa.md (branch-on-variable-bit): New patterns.
+
+ * pa.h (TARGET_MILLICODE_LONG_CALLS): Delete swtich and all
+ references.
+ (output_millicode_call): Declare new function
+ * pa.md (millicode calls): Update length computation to handle
+ variable length millicode calls.
+ (call pattners): Likewise.
+ (indirect call patterns): Update length compuations and output
+ templates to handle variable length millicode calls.
+ (plabel_dereference): Likewise.
+ * pa.c (override_options): Give warnings when incompatable
+ options are used.
+ (output_mul_insn): Call output_millicode_call instead of
+ output_call, eliminate last argument to output_millicode_call.
+ (output_div_insn): Likewise.
+ (output_mod_insn): Likewise.
+ (output_call): Rewrite long call code to handle variable length
+ millicode calls. Eliminate support for calling mul, div and mod
+ millicode routines.
+ (output_millicode_call): New function for calling mul, div and mod
+ millicode routines.
+
+ * pa.md (abssi2): New pattern.
+
+ * pa.c (secondary_reload_class): Loads from reg+d addresses into
+ FP registers don't need secondary reloads.
+ * pa.h: Delete soem #if 0 code. Update some comments.
+ (EXTRA_CONSTRAINT, case 'Q'): Only accept valid memory addresses.
+
+ * pa.h (RTX_COSTS): Tege's rewrite.
+
+ * pa.c (hppa_legitimize_address): Generate unscaled indexed
+ addressing for (plus (symbol_ref) (reg)).
+ (emit_move_sequence): Set REGNO_POINTER_FLAG appropriately
+ to encourage unscaled indexing modes.
+ (basereg_operand): New function for unscaled index address support.
+ * pa.md (unscaled indexing patterns): New patterns for unscaled
+ index address support.
+
+ * pa.h (MOVE_RATIO): Define.
+ * pa.md (movstrsi expander): Refine tests for when to use the
+ library routine instead of an inlined loop copy. Provide an
+ additional scratch register for use in the inlined loop copy.
+ (movstrsi_internal): Name the pattern for ease of use. Add
+ additional scratch register.
+ * pa.c (output_block_move): Greatly simplify. Use 2X unrolled
+ copy loops to improve performance.
+ (compute_movstrsi_length): Corresponding changes.
+
+ * pa.c (print_operand): Handle 'y' case for reversed FP
+ comparisons. Delete some #if 0 code. Fix various comment typos.
+ * pa.md (fcmp patterns): Try and reverse the comparison to avoid
+ useless add,tr insns.
+
+Sun Nov 26 14:47:42 1995 Richard Kenner <kenner@mole.gnu.ai.mit.edu>
+
+ * Version 2.7.2 released.
+
+ * function.c (fixup_var_refs_1): Make pseudo for DEST
+ in PROMOTED_MODE unless in a SUBREG.
+
+ * cse.c (insert): Don't put a REG into qty_const.
+
+ * msdos/top.sed: Change version to 2.7.2.
+ * winnt/config-nt.sed: Likewise.
+
+Sun Nov 26 14:41:49 1995 Douglas Rupp (drupp@cs.washington.edu)
+
+ * Makefile.in (stamp-objlist): Change .o to $objext.
+
+ * alpha/win-nt.h (CPP_PREDEFINES): Set __unaligned and __stdcall
+ to null.
+ (ASM_SPEC): Add a translation for -g to -Zi.
+ * winnt/ld.c (main): Don't pass -g to link.
+ * winnt/oldnames.c: Reformat and add some new functions for gnat1.
+ * winnt/win-nt.h (LINK_SPEC): Pass -g to ld.exe.
+ Increase default stack size.
+ * configure ({alpha-dec,i386-ibm}-winnt3.5): Add oldnames.o
+ to extra_objs.
+ * libgcc2.c (trampoline): Add getpagesize and mprotect for WINNT.
+
+Sun Nov 26 14:25:26 1995 Uwe Seimet (seimet@chemie.uni-kl.de)
+
+ * atari.h (FUNCTION_VALUE): Deleted; incorrect.
+
+Sun Nov 26 14:23:03 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * fixincludes (curses.h): Allow space or tab after bool keyword,
+ instead of tab or tab.
+
+Sun Nov 26 14:14:11 1995 Oliver Kellogg (oliver.kellogg@space.otn.dasa.de)
+
+ * 1750a.md (pattern for HImode PSHM): Corrected.
+ (trunchiqi2, zero_extendqihi2, extendhftqf2): Corrected.
+ (pattern for movhi of CONST_INT to REG): Corrected.
+ (divmodqi pattern for DISN): Corrected.
+ (all shift patterns): Corrected.
+
+ * 1750a.h (REG_OK_FOR_INDEX_P, REG_OK_FOR_BASE_P): Corrected.
+ (ASM_OUTPUT_[datatype]): Corrected datalbl[].size computation
+ for output of arrays.
+
+Sun Nov 26 14:08:57 1995 Dave Love <d.love@dl.ac.uk>
+
+ * mips/iris5.h (NO_IMPLICIT_EXTERN_C): Define this again so
+ that unistd.h doesn't get badly `fixed' for C++. libg++ will now
+ build with this definition.
+
+Sun Nov 26 14:02:43 1995 Robert E. Brown (brown@grettir.bibliotech.com)
+
+ * configure: Better workaround for Nextstep bug.
+
+Sun Nov 26 13:55:07 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
+
+ * rs6000.md (load_multiple matcher): Fix typo in opcode.
+
+Sun Nov 26 13:51:08 1995 Lee Iverson <leei@Canada.AI.SRI.COM>
+
+ * final.c (final_start_function): Move call to sdbout_begin_function
+ back to final_scan_insn on MIPS systems so parameter descriptions are
+ recognized.
+
+Sun Nov 26 13:43:06 1995 DJ Delorie (dj@delorie.com)
+
+ * msdos/top.sed: Don't insert "go32".
+
+Sun Nov 26 12:08:23 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * combine.c (nonzero_bits, case REG): Put POINTERS_EXTEND_UNSIGNED
+ code before stack pointer code. Return nonzero at end of stack
+ pointer code.
+
+ * sparc.h (PRINT_OPERAND_ADDRESS): Handle CONST inside PLUS.
+
+ * Makefile.in (cppalloc.o): Add a rule to build it.
+
+ * alpha.c (alpha_emit_set_const): Don't output SImode sequences
+ that rely on invisible overflow. Sign extend new when SImode.
+ Don't recur if new == c. Don't allow shift outside mode. Make
+ logical right shift be unsigned.
+
+Sun Nov 26 11:37:50 1995 Arne H. Juul (arnej@idt.unit.no)
+
+ * Makefile.in (compare*): Add "|| true" to avoid spurious
+ failure messages from some versions of make.
+
+Sun Nov 26 11:20:09 1995 Dmitry K. Butskoy (buc@stu.spb.su)
+
+ * expr.c (truthvalue_conversion): Add declaration.
+
+Sun Nov 12 18:09:35 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * Version 2.7.1 released.
+
+ * function.c (put_reg_into_stack): New arg volatile_p.
+ (put_var_into_stack): Call with new arg.
+
+Sat Nov 11 08:25:34 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * reload.c (output.h): Include it.
+ * Makefile.in (reload.o): Add dependence on output.h.
+
+Thu Nov 9 11:24:20 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * mips.h (HARD_REGNO_NREGS): If FP_REG_P, always use UNITS_PER_FPREG
+ to calculate number of words needed.
+
+Thu Nov 9 11:04:50 1995 Oliver Kellogg (Oliver.Kellogg@space.otn.dasa.de)
+
+ * 1750a.md (cmphf): Addd Base Reg with Offset address mode (LB,STB,..)
+ (movqi,movhi,movhf,addqi3,addhf3,subqi3,subhf3,mulqihi3): Likewise.
+ (mulhf3,divhf3,andqi3,iorqi3): Likewise.
+ (define_peephole): Remove the Base mode peepholes. Replace the
+ special addqi define_insn for "LIM Ra,sym,Rb" by a define_peephole.
+ (ashlqi3): Took out futile 0th alternative.
+ (lshrqi3, lshrhi3, ashrqi3, ahsrhi3): Correct case of non-constant
+ shift count.
+
+ * 1750a.h (REG_ALLOC_ORDER): Define.
+ (REGNO_OK_FOR_BASE_P): Include stack pointer in test against
+ reg_renumber[REGNO].
+ (ASM_OUTPUT_DESTRUCTOR): Remove bogus assembler comment.
+
+Thu Nov 9 11:01:33 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case ARRAY_REF): Properly convert types
+ of index, size, and multiplication.
+
+Wed Nov 8 09:00:22 1995 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ * arm.md (mov*cc_{,soft_}insn): Use match_operator to test the
+ comparison and check that the condition code register is used.
+
+Wed Nov 8 08:49:35 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/sysv4.h (ASM_OUTPUT_{CONSTRUCTOR,DESTRUCTOR}): Undef before
+ including svr4.h.
+
+Tue Nov 7 10:58:12 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
+
+ * m68k.md (subxf3): Properly name pattern.
+
+Tue Nov 7 10:53:09 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * libgcc2.c (__{C,D}TOR_LIST): For AIX, initialize these arrays to
+ 0,0, just like NeXT to avoid a warning message from the AIX 4.1
+ linker.
+
+Tue Nov 7 09:58:34 1995 John F. Carr <jfc@mit.edu>
+
+ * cppexp.c (cpp_lex): Correctly parse character constants.
+
+Tue Nov 7 09:52:15 1995 Jason Merrill <jason@yorick.cygnus.com>
+
+ * rs6000.h (ASM_OUTPUT_{DES,CONS}TRUCTOR): Define.
+
+Mon Nov 6 10:27:15 1995 Doug Evans <dje@cygnus.com>
+
+ * combine.c (force_to_mode): Fix typo.
+
+Sun Nov 5 18:37:02 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
+
+ * m68k.md (cmpxf): Don't call force_const_mem, it looses for PIC;
+ get predicates right instead. Get rid of separate DEFINE_EXPAND.
+ (addxf3, subxf3, mulxf3, divxf3): Likewise.
+ (All XFmode patterns): Delete `F' and `G' constraints.
+ (absxf2, negxf2): Delete spurious condition on TARGET_FPA.
+
+Sun Nov 5 11:05:44 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * fixincludes (malloc.h): Fix return type of {m,re}alloc.
+
+Sun Nov 5 11:02:26 1995 J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+ * cse.c (invalidate): For a pseudo register, do a loop to
+ invalidate all table entries, irrespective of mode.
+
+Sun Nov 5 10:57:43 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * combine.c (force_to_mode): Put in last change properly.
+
+Sun Nov 5 10:53:49 1995 Jeffrey A Law (law@cygnus.com)
+
+ * pa.h (CONDITIONAL_REGISTER_USAGE): Make sure FP regs
+ get disabled regardless of PA1.0 vs PA1.1 code generation
+ when TARGET_SOFT_FLOAT or TARGET_DISABLE_FPREGS is on.
+
+Sun Nov 5 10:49:43 1995 Doug Evans <dje@lisa.cygnus.com>
+
+ * i960.c (emit_move_sequence): Add a scratch register to
+ multi-reg stores.
+ (i960_output_move_{double,quad}): New functions.
+ (i960_print_operand): Handle new operand types E, F.
+ * i960.md (movdi matchers): Rewrite.
+ (store_unaligned_di_reg): New pattern.
+ (movti matchers): Rewrite.
+ (store_unaligned_ti_reg): New pattern.
+
+Sun Nov 5 10:45:24 1995 Ian Lance Taylor (ian@cygnus.com)
+
+ * mips.h (MULTILIB_DEFAULTS): Define.
+ * mips/elf64.h, mips/iris6.h (MULTILIB_DEFAULTS): Define.
+
+Sun Nov 5 10:41:48 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * reload.c (push_reload): Delete abort for RELOAD_OTHER case added
+ in last change.
+ * reload1.c (emit_reload_insns): For RELOAD_OTHER output reloads,
+ output the reload insns in descending order of reloads.
+
+ * sh.md (mulsidi3-1, mulsidi3, umulsidi3-1, umulsidi3): Enable.
+ (smulsi3_highpart-1, smulsi3_highpart): New patterns.
+ (umulsi3_highpart-1, umulsi3_highpart): Likewise.
+ (movdi-1): Add r/x constraint.
+ * t-sh (MULTILIB_OPTIONS): Add m2.
+ (MULTILIB_DIRNAMES): Add m2.
+ (MULTILIB_MATCHES): Define.
+
+ * sparc.h (RTX_COSTS, case MULT): Check for TARGET_SPARCLITE.
+
+ * abi64.h, elf64.h (CPP_SPEC): Add -EB and -EL support.
+
+Sat Nov 4 10:36:26 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * sh.md (casesi_worker): Change constraint from = to +.
+
+ * svr4.h (ASM_IDENTIFY_GCC_AFTER_SOURCE): Delete.
+ (ASM_IDENTIFY_GCC): Output stab here.
+
+Sat Nov 4 10:32:37 1995 John Carr <jfc@mit.edu>
+
+ * cpplib.c (finclude): Set current input pointer when input
+ is not a regular file.
+
+ * cppmain.c: Define progname, required by cpplib.
+
+Sun Oct 29 07:48:36 1995 Michael Meissner <meissner@cygnus.com>
+
+ * xcoffout.h (DBX_FINISH_SYMBOL): Deal with names created via
+ the __asm__ construct that start with a leading '*'.
+ * xcoffout.c (xcoff_declare_function): Likewise.
+
+Sun Oct 29 07:45:41 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * stupid.c (stupid_mark_refs): Handle SUBREG of pseudo-reg in a
+ SET_DEST same as we handle a pseudo-reg in a SET_DEST.
+
+Sun Oct 29 07:43:15 1995 Pat Rankin <rankin@eql.caltech.edu>
+
+ * libgcc2.c (L_eh: __unwind_function): Implement for VAX.
+ * vax.h (RETURN_ADDRESS_OFFSET, RETURN_ADDR_RTX): Define.
+
+Sun Oct 29 12:39:08 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>a
+
+ * i386/sol2.h (CPP_PREDEFINES): Add -D__SVR4.
+
+Sun Oct 29 07:14:36 1995 J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+ * reload.c (find_equiv_reg): Check for nonsaving setjmp.
+
+Fri Oct 27 15:15:56 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * Makefile.in (out_object_file): Depend on TREE_H.
+
+Fri Oct 27 06:42:36 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.c (call_operand): Only allow reg 27 on NT too.
+ * alpha.md (call_value_nt, call_nt): Force non-SYMBOL_REF
+ into reg 27, just like for OSF.
+
+ * rs6000.c (struct asm_option): Changed from struct option.
+ (expand_block_move_mem): Remove erroneously-added line.
+
+ * expr.c (clear_storage): SIZE is now rtx, not int.
+ (store_constructor): Call clear_storage with rtx.
+ (get_inner_reference): Convert index to precision of
+ sizetype, not POINTER_SIZE.
+ (expand_expr, case ARRAY_REF): Likewise.
+ * expr.h (clear_storage): Second arg is rtx, not int.
+
+Fri Oct 27 05:45:58 1995 J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+ * combine.c (force_to_mode, case ASHIFTRT): Properly handle
+ mask wider than HOST_WIDE_INT.
+
+ * c-decl.c (pushdecl): Don't test TREE_PUBLIC when deciding whether
+ to register a duplicate decl in the current block.
+
+Thu Oct 26 21:55:39 1995 Jason Merrill <jason@sethra.cygnus.com>
+
+ * calls.c (expand_call): Don't trust the callee to copy a
+ TREE_ADDRESSABLE type.
+ * function.c (assign_parms): Likewise.
+
+Thu Oct 26 19:25:05 1995 Mike Stump <mrs@cygnus.com>
+
+ * libgcc2.c (__unwind_function): Provide a default definition for
+ implementations that don't yet have a function unwinder.
+
+Thu Oct 26 18:08:19 1995 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (handle_directive): Don't treat newline as white
+ space when coalescing white space around a backslash-newline.
+
+Thu Oct 26 17:57:34 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * mips-tdump.c (enum st): Define st_Struct, st_Union, and st_Enum.
+ (st_to_string): Handle them.
+ (type_to_string): Add fdp argument; pass it to emit_aggregate.
+ (print_symbol): Add fdp argument; pass it to type_to_string.
+ Handle st_Struct, st_Union, and st_Enum.
+ (emit_aggregate): Add fdp argument. Handle opaque types. Map
+ through RFD entries.
+ (print_file_desc): Pass FDR to print_symbol.
+ (main): Pass null FDR to type_to_string.
+
+Thu Oct 26 08:07:10 1995 Michael Meissner <meissner@cygnus.com>
+
+ * configure (powerpc-ibm-aix[456789]*): Use rs6000/t-newas,
+ not rs6000/t-rs6000.
+ (rs6000-ibm-aix3.2.[456789]*): Likewise.
+ (rs6000-ibm-aix[456789]*): Likewise.
+
+ * rs6000/t-newas: Copy from t-rs6000.
+ * t-rs6000: Don't build -mcpu=common multilib variants of libgcc.a.
+
+ * rs6000.md (load_multiple insn): If address register is among regs,
+ don't load it with a lwsi instruction, which is undefined on PowerPC.
+
+Thu Oct 26 08:01:32 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * dwarfout.c (output_compile_unit_die): Handle language_string
+ of "GNU F77".
+
+ * reload.c (find_reloads_address): When check for out of range constant
+ plus register, accept any hard register instead of just fp, ap, sp.
+
+ * combine.c (distribute_notes): For Oct 19 change, add additional
+ check to verify that place has a valid INSN_CUID.
+
+ * sparc/t-vxsparc (LIBGCC1_TEST): Define.
+
+ * sh.md (negdi2): Use TARGET_LITTLE_ENDIAN.
+
+ * combine.c (force_to_mode, case ASHIFTRT): Verify mode bitsize is
+ within HOST_BITS_PER_WIDE_INT before shifting by it.
+
+ * final.c (final_scan_insn): When recur for instruction in delay slot,
+ add loop around recursive call in case the instruction gets split.
+
+Thu Oct 26 07:28:45 1995 J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+ * genrecog.c (write_tree_1): Avoid emitting '-2147483648'.
+
+ * jump.c (duplicate_loop_exit_test): Return 0 if found
+ a NOTE_INSN_LOOP_CONT.
+
+Tue Oct 24 15:30:14 1995 Jeffrey A Law <law@cygnus.com>
+
+ * calls.c (expand_call): Make sure valreg is at least
+ a full word.
+
+Sun Oct 22 19:35:41 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * sh.h (INIT_SECTION_ASM_OP): Delete.
+ (HAVE_ATEXIT): Define.
+
+Sun Oct 22 07:46:04 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * libgcc2.c (__fixuns[xds]fsi): #undef MIN and MAX before #include
+ of limits.h.
+
+ * pa.c (pa_adjust_cost): Use pa_cpu, not pa_cpu_attr.
+
+Sun Oct 22 07:38:58 1995 J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+ * alpha.h (CONST_OK_FOR_LETTER_P): Use 'U' for unsigned constants.
+ * alpha.c (alpha_emit_set_const): Likewise.
+ * mips.c (gen_int_relational): Likewise.
+
+Sun Oct 22 07:14:35 1995 Douglas Rupp (drupp@cs.washington.edu)
+
+ * i386.c (i386_return_pops_args): Don't need a FUNDECL to
+ check for type attributes in FUNTYPE.
+
+Sat Oct 21 18:17:42 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * sh.md (define_delay): Don't accept any instruction for an annulled
+ slot, only accept those for which in_delay_slot is yes.
+ * sh.c (find_barrier): When hi_const returns true, increment count_si
+ by two if found_si is true.
+ Always use get_attr_length to compute length of instructions.
+ If count_hi or count_si out of range at end, need two PREV_INSN calls
+ not one.
+ When create new label, set LABEL_NUSES to 1.
+ (reg_unused_after): Ifdef out code for handling labels.
+ (prepare_scc_operands): New local variable mode. Set it from
+ sh_compare_op0 or sh_compare_op1. Use it instead of SImode in
+ force_reg calls.
+
+ * optabs.c (expand_float): Emit missing barrier after unconditional
+ jump.
+
+Sat Oct 21 14:16:46 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
+
+ * alpha.md (cmpdf): Make conditional on TARGET_FP.
+
+Fri Oct 20 19:11:12 1995 J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+ * combine.c (distribute_notes): Delete instructions without
+ side effect that set a subreg of an unused register.
+
+ * m68k.h (PREFERRED_RELOAD_CLASS): Check for !G constants
+ for DATA_OR_FP_REGS also.
+
+Fri Oct 20 18:57:10 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * genmultilib: Output negations of unused alternatives, even if
+ one of the alternatives is selected.
+
+Fri Oct 20 18:48:50 1995 Jeff Law (law@hurl.cygnus.com)
+
+ * integrate.c (output_inline_function): Turn on flag_no_inline
+ to avoid function integration once we begin writing deferred
+ output functions.
+
+Fri Oct 20 18:46:33 1995 Michael Meissner <meissner@wogglebug.tiac.net>
+
+ * rs6000.c (float_conv_temp): Delete global variable.
+ (stack_temps): New static array to hold stack temps.
+ (offsettable_mem_operand): Delete function.
+ (offsettable_addr_operand, rs6000_stack_temp): New functions.
+ (output_epilog): Zero stack_temps.
+
+ * rs6000.h (offsettable_addr_operand): Declare instead of
+ offsettable_mem_operand.
+ (PREDICATE_CODES): Use offsettable_addr_operand.
+ (float_conv_temp): Delete variable.
+
+ * rs6000.md (move_to_float insns): Change move_to_float so
+ that it doesn't have a clobber of the memory address, and instead
+ passes the stack temp's memory address as one of the unspec args.
+ (fix_truncdfsi2): Use rs6000_stack_temp to allocate the temp.
+ (multiply, shift insns): Fix all cases of multiply and shift insns so
+ that the right mnemonics are used for -mcpu=common with both
+ -m{old,new}-mnemonics.
+
+Fri Oct 20 17:58:19 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * expr.c (safe_from_p, case RTL_EXPR): Return 0 if RTL_EXPR_SEQUENCE
+ exists. Delete code to return 0 if exp_rtl is zero.
+
+ * function.c (init_function_start): Don't call init_insn_lengths here.
+ * toplev.c (rest_of_compilation): Call it here.
+
+Thu Oct 19 19:19:06 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-common.c (check_format_info): Make test for null pointer
+ more general.
+
+Thu Oct 19 18:56:16 1995 Satoshi Adachi (adachi@wisdom.aa.ap.titech.ac.jp)
+
+ * fixincludes (stdlib.h): Be more general in edit to change
+ declaration of {c,m,re}alloc.
+
+Thu Oct 19 18:48:53 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
+
+ * libgcc2.c (__udiv_w_sdiv): If we don't have sdiv_qrnnd, define
+ dummy variant of __udiv_w_sdiv.
+
+Thu Oct 19 18:45:21 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * alpha.h (ASM_SPEC): If GNU as is the default, then pass -g to
+ the assembler if -malpha-as. If GNU as is not the default, then pass
+ -g to the assembler is not -mgas.
+
+ * combine.c (distribute_notes): When search for new place to put
+ REG_DEAD note, call distribute_links if this new place is between
+ i2 and i3, and i2 uses the register.
+
+Thu Oct 19 18:41:36 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.md (float{,uns}sidf2): Rewrite to break the conversion
+ process into several general insns.
+ (move_to_float): New insns to move 2 integer regs into a float register
+ through memory, taking endianess into account. Make sure that the
+ floating temporary is a valid address. Use one temporary for all
+ floats converted.
+ (fix_truncdfsi2): Take endianess into account.
+
+ * rs6000.c ({low_32_bit,offsettable_mem}_operand): The function
+ low_32_bit_operand is now unused, delete it. New function
+ offsettable_mem_operand to determine if a memory address is
+ offsettable.
+ * rs6000.h ({low_32_bit,offsettable_mem}_operand): Ditto.
+ (PREDICATE_CODES): Ditto.
+
+ * rs6000.{c,h} (float_conv_temp): New global.
+ * rs6000.c (output_epilog): Zero out float_conv_temp.
+
+ * Makefile.in (libgcc{1,2}.a): Allow LIB{1,2}FUNCS_EXTRA files to
+ end in .S as well as .c and .asm.
+
+Wed Oct 18 17:56:45 1995 Jose Alonso (sidinf@fpsp.fapesp.br)
+
+ * c-typeck.c (parser_build_binary_op): Warn about x^y==z, etc.
+
+Mon Oct 9 12:38:06 1995 Michael Meissner <meissner@cygnus.com>
+
+ * protoize.c (reverse_def_dec_list): Silence compiler warnings.
+
+Mon Oct 9 12:35:54 1995 Andrew Cagney <cagney@highland.com.au>
+
+ * ginclude/va-ppc.h (va_arg): Deal with long longs that would be
+ passed in the 7th register, and are passed in the stack instead.
+
+Fri Oct 6 13:47:10 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * alpha.h (ASM_SPEC): Add -g.
+
+Fri Oct 6 13:42:50 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * alpha.h (alpha_{arg,auto}_offset): Make extern.
+
+Fri Oct 6 13:24:43 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.h (RETURN_ADDRESS_OFFSET): Correct previous change.
+
+Fri Oct 6 13:14:43 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * rtlanal.c (reg_set_last): Fix call to reg_set_between_p.
+
+Tue Oct 3 12:31:38 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * stor-layout.c (layout_type, case ARRAY_TYPE): Strip MAX_EXPR
+ from upper bound when computing length if it just protects against
+ negative length.
+
+ * expr.c (emit_move_insn_1): When doing multi-word move, show
+ output is clobbered.
+
+Tue Oct 3 12:26:07 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * cse.c (set_nonvarying_address_components, case AND): Add *pend to
+ end. Add constant to start instead of subtracting it.
+
+Tue Oct 3 12:23:28 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
+
+ * combine.c (simplify_rtx): In code that attempts to simplify
+ conditional expressions, if the result is an NE around another
+ comparison, return the original expression.
+
+ * longlong.h (mips umul_ppmm): Use `l' and `h' constraints;
+ remove mflo and mfhi instructions.
+
+Tue Oct 3 12:21:29 1995 Michael Meissner <meissner@cygnus.com>
+
+ * ginclude/va-ppc.h (va_start, stdarg case): Call
+ __builtin_next_arg, and ignore the result, so that the compiler
+ can report the proper error, if the second argument is not the
+ last argument.
+
+Tue Oct 3 12:02:51 1995 Kohtala Marko <Marko.Kohtala@ntc.nokia.com>
+
+ * function.c (assign_stack_temp): Adjust full_size field of
+ temp_slot when splitting an unused slot.
+
+Tue Oct 3 11:51:59 1995 Mike Stump <mrs@cygnus.com>
+
+ * expr.c (expand_builtin_return_addr): Break out functionality
+ from expand_builtin.
+ (expand_builtin): Call expand_builtin_return_addr.
+ * rs6000.h (RETURN_ADDR_RTX): Remove call to copy_to_reg.
+ Offset to return address is 4 when !TARGET_64BIT and v4_call_p,
+ 8 otherwise.
+ * sparc.h (RETURN_ADDR_RTX): Remove call to copy_to_reg.
+ * alpha.h (RETURN_ADDR_RTX): New definition.
+
+Sun Oct 1 21:23:30 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.c (staticp, case INDIRECT_EXPR): Disable case.
+
+ * expr.c (expand_expr, case COMPONENT_REF): If getting component
+ of union of variable size, propagate TARGET.
+
+Fri Sep 29 07:48:09 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (store_expr): When storing promoted value, don't return
+ MEM if address contains target.
+
+Thu Sep 28 14:30:03 1995 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (rescan): Expand `#if foo && #bar' without a bogus
+ complaint about preprocessor directives within macro args.
+ Expand `foo' in `foo#bar' without requiring a space before `#'.
+
+Thu Sep 28 14:24:26 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k.md (anonymous DImode shift patterns setting cc0): Turned
+ off due to reload problems.
+
+Thu Sep 28 14:05:22 1995 Niklas Hallqvist (niklas@appli.se)
+
+ * Makefile.in (USER_H): Move up so can override.
+ (INSTALL_ASSERT_H): New definition.
+ (install-headers): Use it.
+ (stmp-int-hdrs): Handle USER_H being empty.
+ * config/x-netbsd (INSTALL_ASSERT_H): Define as empty.
+
+ * i386/netbsd.h (WCHAR_{TYPE,UNSIGNED,TYPE_SIZE}): Now int.
+ * m68k/netbsd.h, ns32k/netbsd.h, sparc/netbsd.h: Likewise.
+ * vax/netbsd.h: Likewise.
+ (SIZE_TYPE): Use unsigned int.
+
+ * m68k.c (output_scc_di): Swap operands when needed.
+ * m68k.h (LEGITIMATE_PIC_OPERAND): Allow SYMBOL_REF_FLAG symref.
+ * m68k.md: Make both assembler syntaxes do the same for PIC calls.
+
+Tue Sep 26 16:51:44 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * mips.c (override_options): Don't allow anything but integers to
+ go in the HI/LO registers.
+
+Tue Sep 26 16:36:18 1995 John F. Carr <jfc@mit.edu>
+
+ * c-common.c (check_format_info): Don't warn about format type
+ mismatch if the argument is an ERROR_MARK.
+
+Mon Sep 25 17:50:50 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * stor-layout.c (put_pending_sizes): New function.
+ * tree.h (put_pending_sizes): Add declaration.
+ * tree.c (save_expr): Return original for ERROR_MARK.
+
+Fri Sep 22 19:20:01 1995 Jeff Law (law@hurl.cygnus.com)
+
+ * expr.c (expand_builtin, case BUILT_IN_MEMCPY): Strip off
+ all NOP exprs from the source and destination nodes, then
+ set MEM_IN_STRUCT_P.
+
+Fri Sep 22 18:50:31 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000/eabi.h (ASM_OUTPUT_INT): Test for whether the integer
+ being output is also a constant so &sym - &sym2 is not fixed up.
+
+Fri Sep 22 18:49:07 1995 Peter Flass (FLASS@LBDRSCS.BITNET)
+
+ * i370.md (cmpsi): Add missing constraints to operand 1.
+
+Fri Sep 22 18:27:33 1995 Torbjorn Granlund <tege@matematik.su.se>
+
+ * i386.h (CONST_OK_FOR_LETTER_P): Make `N' match range 0..255
+ for `outb' instruction.
+
+ * pyr.h (PRINT_OPERAND): Handle code `R' for REG.
+ * longlong.h (pyr umul_ppmm): Use it.
+
+Fri Sep 22 18:24:38 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-parse.in (enumlist): Propagate error_mark_node.
+
+ * c-aux-info.c (gen_type): Handle ERROR_MARK.
+
+ * alpha.md (movdi): Avoid memory sharing problem when in reload.
+
+Wed Sep 20 14:27:09 1995 Peter Flass <flass@lbdrscs.bitnet>
+
+ * mvs.h (FUNCTION_PROLOGUE): Maintain savearea forward chain
+ per MVS standards.
+
+Wed Sep 20 14:20:52 1995 Torbjorn Granlund <tege@matematik.su.se>
+
+ * pyr.md (cmphi recognizer): Make condition match constraints.
+ (cmpqi recognizer): Likewise.
+
+Wed Sep 20 12:42:59 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * integrate.c (expand_inline_function): Do copy something setting
+ the result register if it is setting it to itself and has a REG_NOTE.
+
+ * integrate.c (set_decl_{origin_self,abstract_flags}): Treat
+ a DECL_INITIAL of error_mark_node the same as one of NULL_TREE.
+
+Tue Sep 19 19:30:18 1995 Dave Pitts (dpitts@nyx.cs.du.edu)
+
+ * i370.md (cmphi, movhi, movstricthi, extendhisi2): Correct generation
+ of short integer (Halfword)
+ ({add,sub,mul,and,ior,xor}hi3): Likewise.
+ * i370/mvs.h (MACROPROLOGUE): New macro.
+ (FUNCTION_{PRO,EPI}LOGUE): Added ability to use IBM supplied function
+ prologue macros.
+ (FUNCTION_PROLOGUE): Corrected function "in-line" prologue alignment
+ problems.
+ (ASM_DECLARE_FUNCTION_NAME): Changed alignment to FullWord.
+ (ASM_OUTPUT_{SHORT,ASCII}): Reworked.
+
+Tue Sep 19 19:22:15 1995 Douglas Rupp (drupp@cs.washington.edu)
+
+ * winnt/win-nt.h: Renamed from winnt/win-nt.h.
+ (LINK_SPEC): Add -noinhibit-exec.
+ * {alpha,i386}/win-nt.h: Renamed from {alpha,i386}/winnt.h.
+ Include winnt/win-nt.h, not winnt/winnt.h.
+ * winnt/oldnames.c: New file.
+ * winnt/headers.mak (fixinc-nt.obj): Fix typo.
+ * winnt/config-nt.bat: Change winnt.h to win-nt.h.
+ * i386/config-nt.sed: Likewise.
+ * configure ({alpha,i386}-*-winnt3*): Likewise.
+
+Mon Sep 18 14:00:45 1995 Oliver Kellogg (Oliver.Kellogg@space.otn.dasa.de)
+
+ * 1750a.h (enum reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS):
+ Added R2 and R0_1.
+ (REG_CLASS_FROM_LETTER): New letters 't' and 'z'.
+ (EXTRA_CONSTRAINT): New letter 'Q'.
+
+Sun Sep 17 12:39:22 1995 Jeff Law (law@snake.cs.utah.edu)
+
+ * pa.h (ASM_DECLARE_FUNCTION_NAME): If a parameter's type
+ has TYPE_NEEDS_CONSTRUCTING on, then it's passed by invisible
+ reference.
+
+Sat Sep 16 17:42:33 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * loop.c (find_and_verify_loops): Fix error in last change.
+
+Sat Sep 16 08:38:22 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.h (GO_IF_LEGITIMATE_ADDRESS): Disallow SYMBOL_REF for
+ current function.
+
+ * cse.c (recorded_label_ref): New variable.
+ (insert): Set instead of cse_jumps_altered.
+ (cse_main): Initialize it and return 1 if nonzero at end.
+
+Fri Sep 15 18:26:49 1995 Torbjorn Granlund (tege@matematik.su.se)
+
+ * fold-const (div_and_round_double): Change `carry', `quo_est',
+ and `scale' from plain int to `unsigned HOST_WIDE_INT'.
+
+Fri Sep 15 18:24:24 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (insert): Set cse_jumps_altered when inserting a LABEL_REF.
+
+Fri Sep 15 17:29:41 1995 Oliver Kellogg (Oliver.Kellogg@space.otn.dasa.de)
+
+ * 1750a.c (b_mode_operand): New function.
+ (print_operand): Added code 'Q'.
+
+Fri Sep 15 17:27:23 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * loop.c (find_and_verify_loops): When moving exit blocks out of
+ the loop, verify that the target of P is within the current loop.
+
+ * reorg.c (fill_slots_from_thread): Update thread if it is split.
+
+Fri Sep 15 17:06:51 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.md (decrement_and_branchsi and related insns): Don't use
+ a "2" to select a register preference for operand 1 if operand 2
+ hasn't been seen yet.
+ Add appropriate clobbers in decrement_and_branchsi.
+ Add patterns where the pc/label_ref are interchanged.
+
+ * Makefile.in (gnucompare, stmp-multilib-sub): Remove extra . in
+ front of $(objext).
+
+ * rs6000.c (output_toc): Align DF constants if STRICT_ALIGNMENT.
+
+ * config/fp-bit.c (FLO_union_type): Add words field if double
+ precision to get at the separate words.
+ (FLO_union_type, pack_d, unpack_d): Use FLOAT_BIT_ORDER_MISMATCH
+ to determine when the bitfields need to be reversed, and
+ FLOAT_WORD_ORDER_MISMATCH when the words need to be reversed.
+
+Fri Sep 15 16:41:43 1995 Jeff Law (law@snake.cs.utah.edu)
+
+ * reorg.c (fill_simple_delay_slots): When filling insn's delay slot
+ with JUMP_INSN, don't assume it immediately follows insn on
+ unfilled slots obstack.
+
+ * Makefile.in (caller-save.o): Depend on insn-codes.h.
+
+Thu Sep 14 17:41:49 1995 Jim Meyering (meyering@comco.com)
+
+ * protoize.c (do_cleaning): Don't blank out backslash-escaped
+ newlines in double quoted strings.
+
+Thu Sep 14 16:20:35 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (gen_lowpart): If gen_lowpart_common fails
+ for a REG, load it into a pseudo and try again.
+
+Thu Sep 14 14:15:16 1995 Stan Cox (coxs@dg-rtp.dg.com)
+
+ * m88k.h (VERSION_INFO1): Removed BCS reference.
+ * m88k/dgux.h (ASM_SPEC, *_LEGEND):
+ Added -mno-legend option. -mstandard no longer implies that legend
+ legend information not be produced.
+ (LINK_SPEC): Removed -z text
+
+Tue Sep 12 19:05:39 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * cccp.c (is_system_include): Call skip_redundant_dir_prefix.
+
+Tue Sep 12 18:58:21 1995 John Carr <jfc@mit.edu>
+
+ * sparc.md: Change `*return "string"' to "string" in patterns.
+
+Tue Sep 12 18:48:47 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * function.c (put_var_into_stack): For CONCAT case, order of
+ placement depends on FRAME_GROWS_DOWNWARD, not STACK_GROWS_DOWNWARD.
+
+Tue Sep 12 18:34:10 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * va-sparc.h (v9 varargs va_start): Handle __builtin_va_alist
+ being stack argument.
+
+ * sparc.h (STATIC_CHAIN_REGNUM): Use %g5 for sparc64.
+ (TRAMPOLINE_TEMPLATE): Rewrite for sparc64.
+ (TRAMPOLINE_SIZE): Is 40 for sparc64.
+ * sparc.c (sparc64_initialize_trampoline): Rewrite.
+
+Tue Sep 12 18:30:22 1995 Douglas Rupp (drupp@cs.washington.edu)
+
+ * cp/Make-lang.in (cc1plus) : Removed unnecessary $(exeext).
+
+ * configure: Added code to handle gcc_extra_objs.
+ (alpha-winnt): Changed xmake_file to winnt/x-winnt.
+ Added extra_gcc_objs=spawnv.o; changed extra_programs to ld.exe.
+ (i386-winnt): Changed xmake_file to winnt/x-winnt.
+ Added extra_gcc_objs=spawnv.o; changed extra_programs to ld.exe.
+ * configure.bat: Changed to used common winnt/config-nt.bat.
+ * Makefile.in: Changed various .o's to .$(objext)'s
+ (specs): Removed unnecessary $(exeext).
+ (EXTRA_GCC_OBJS): New variable.
+ (clean): Removed $(LIB2FUNCS_EXTRA)
+ * objc/Makefile: Changed archive command for libobjc.a to use $?
+ for objects.
+
+ * alpha/x-winnt, i386/x-winnt: Deleted.
+ * alpha/config-nt.bat, i386/config-nt.bat: Deleted.
+ * alpha/config-nt.sed, i386/config-nt.sed: Moved architecture
+ independent commands to config/winnt/config-nt.sed.
+ * alpha/winnt.h: Added -D_M_ALPHA to CPP_PREDEFINES.
+ Changed LIB_SPEC to be compatible with Gnu ld for NT.
+ * i386/winnt.h: Added -D_cdecl=__attribute__((__cdecl__)).
+ Change LIB_SPEC to be compatible with Gnu ld for NT.
+ * winnt/config-nt.bat, winnt/config-nt.sed: New files.
+ * winnt/dirent.{c,h}, winnt/fixinc-nt.c, winnt/headers.mak: New files.
+ * winnt/ld.c: Changed precedence of libraries to look for
+ libfoo.lib before libfoo.a
+ Changed to work like Gnu ld for NT.
+ * winnt/libgcc.mak, winnt/mklibgcc.c: New files.
+ * winnt/spawnv.c: Changed spawn function entry points to __spawn*
+ instead of spawn*.
+ * winnt/x-winnt: New file.
+ * fixinc-nt.sed: New file.
+ * fixinc.winnt: Rewritten to use fixinc-nt.sed.
+
+ * gcc.c: Remove fix_argv kludge.
+
+Tue Sep 12 13:24:17 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.md (power subdi3 pattern): Fix pattern to have 5
+ alternatives, and correct 4th alternative to match reality.
+
+ * rs6000.md (adddi3, subdi3, negdi2): Add constraints so output reg
+ does not overlap one reg with one of the inputs.
+
+Tue Sep 12 13:09:48 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k.c (output_scc_di): Fixed for non-SGS_CMP_ORDER syntax.
+
+ * collect2.c (scan_libraries): Cast lsyms' alloca to LDSYM*.
+
+Tue Sep 12 13:04:12 1995 Niklas Hallqvist (niklas@appli.se)
+
+ * stmt.c (expand_start_stmt_expr): Do stack adjust in right place.
+
+ * stdarg.h (__gnuc_va_list): Make char * for NetBSD.
+
+Tue Sep 12 12:44:46 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * ginclude/va-ppc.h (va_arg): Reorganize to avoid BIND_EXPRs of
+ aggregate or array type.
+
+Tue Sep 12 12:42:27 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * fixincludes: Fix HP/UX <sys/file.h> for g++ -pedantic-errors.
+
+ * fixincludes (curses.h): typedef bool need not take up entire line.
+
+Mon Sep 11 19:05:42 1995 Stan Cox (coxs@dg-rtp.dg.com)
+
+ * c-typeck.c (digest_init): Don't recursively call digest_init
+ when in traditional mode if the type is invalid.
+
+Mon Sep 11 18:58:26 1995 Oliver Kellogg (Oliver.Kellogg@space.otn.dasa.de)
+
+ * 1750a.md: Added DLB/DSTB peepholes for HFmode.
+ Corrected mnemonics for HImode DSTB peephole.
+
+Mon Sep 11 18:48:06 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * config/fp-bit.c (FLO_union_type): Remove bitfields to set sign,
+ exponent, and mantissa, and add value_raw field, which is an
+ integer of the appropriate type. If _DEBUG_BITFLOAT is defined,
+ provide little and big endian bitfields. If the macro
+ FLOAT_BIT_ORDER_MISMATCH is defined, use explicit bitfields.
+ (pack_d, unpack_d): Switch to use value_raw and explicit shifts
+ and masks so that we don't have to worry about whether the target
+ is big or little endian unless FLOAT_BIT_ORDER_MISMATCH is
+ defined. If single precision floating point, rename to pack_f and
+ unpack_f, so there is no confusion in the debugger.
+
+ * rs6000.h (rs6000_abi): New enumeration to describe which
+ ABI we're conforming to.
+ (rs6000_stack): Use abi enum, not AIX vs. V.4 boolean.
+ (ASM_OUTPUT_OPTIONS): New macro to print output options in .s file.
+ (ASM_FILE_START): Use it.
+ (output_options,rs6000_float_const): Declare new functions.
+
+ * rs6000.c (output_option{,s}): New functions to write -f, -m,
+ and -W options to the asm file.
+ (rs6000_float_const): New function to generate floating point
+ constants portably used in signed,unsigned -> double conversions.
+ (rs6000_stack_info,debug_stack_info): Use ABI enumeration instead
+ of AIX vs. V.4 boolean.
+
+ * rs6000.md (float{,uns}sidf2): Call rs6000_float_const to
+ portably build the proper floating point constant for conversions.
+ (movdi): Properly handle movdi of CONST_{INT,DOUBLE} on little
+ endian systems.
+
+ * rs6000/sysv4.h (LIBGCC2_WORDS_BIG_ENDIAN): Define to be 0/1
+ depending on the target endianess.
+ (ASM_FILE_START): Define, to call output_options in addition to
+ output_file_directive.
+ (TRAMPOLINE_SIZE): Correct size to match code.
+
+ * rs6000/eabi{,le}sim.h (CPP_SPEC): Define the correct endian
+ macro for varargs/stdargs use.
+
+Mon Sep 11 18:41:58 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * c-decl.c (redeclaration_error_message): For TYPE_DECLs, return 0
+ if TYPE_MAIN_VARIANT of old type is same as new type.
+
+Mon Sep 11 17:39:35 1995 Rob Ryan (robr@cmu.edu)
+
+ * xcoffout.c (xcoff_inlining): New variable, used in place of
+ xcoff_current_include_file when determining whether to use
+ absolute line numbers.
+ (xcoffout_source_file): Switched to using xcoff_inlining to
+ determine when to emit .bi/.ei directives.
+
+Mon Sep 11 16:55:06 1995 Torbjorn Granlund <tege@matematik.su.se>
+
+ * m68k.md (cmpdi): Change patterns to allocate scratch register at
+ RTL generation time.
+ (tstdi): Likewise.
+
+Sun Sep 3 09:03:50 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (size_binop): Don't pass 1 to NOTRUNC.
+
+Thu Aug 31 19:27:00 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * libgcc2.c: Include longlong.h.
+ [L_udivdi3 || L_divdi3 || L_umoddi3 || L_moddi3] (__udivmoddi4):
+ Define this `static inline' when defining these, so they all
+ remain leaf functions.
+
+Thu Aug 31 18:38:21 1995 Paul Eggert <eggert@twinsun.com>
+
+ * c-parse.in (ends_in_label): New %union member.
+ (stmts, stmt_or_label): Use new member to avoid lexical lookahead hack.
+ (lineno_stmt_or_labels): New rule.
+ (lineno_stmt_or_label, stmt_or_label): Yield nonzero if it ends
+ in a label.
+
+Thu Aug 31 08:31:40 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (canon_hash, CONST_DOUBLE): Hash integer and real
+ differently.
+ * varasm.c (struct rtx_const): Add new field DI to union.
+ (decode_rtx_const, case CONST_DOUBLE): Use to hash CONST_DOUBLE
+ representing an integer.
+
+ * va-alpha.h (__gnuc_va_list): Make __offset an int.
+ * alpha.c (alpha_builtin_saveregs): Properly compute address
+ of __offset both both OSF and WINNT.
+
+ * xm-alpha.h (sbrk): Don't define here.
+ * gmon.c (sbrk): Define here for __alpha.
+ * toplev.c (sbrk): Likewise.
+ * mips-tfile.c (malloc, calloc, realloc): Don't define for anybody.
+
+ * reload.c (push_reload): Add case for output reload of a SUBREG
+ of a hard reg when output mode is invalid for that mode.
+ In both that case and existing case for in, don't remove SUBREG.
+ * reload1.c (emit_reload_insns): Emit RELOAD_OTHER output reloads last.
+
+Tue Aug 29 19:16:06 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-common.c (decl_attribute, case A_PACKED): Check is_type first.
+ (decl_attribute, case A_T_UNION): Likewise.
+ Don't access TYPE_FIELDS if DECL is zero.
+ * c-decl.c (finish_struct): If transparent_union attribute
+ specified, validate it once we finish laying the union out.
+
+Mon Aug 28 05:58:03 1995 Paul Eggert <eggert@twinsun.com>
+
+ * arm.c (arm_gen_movstrqi): Remove unused variable const_sxteen.
+
+ * bi-lexer.c (buffer, inpoint): Remove unused variables.
+
+ * i370/mvs.h, i370/mvs370.c (mvs_label_emitted): Renamed
+ from mvs_label_emited.
+
+ * msdos/configur.bat: Fix misspelling of `maintainer-clean'.
+
+Sat Aug 26 06:57:17 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload.c (push_secondary_reload): If X is a paradoxical SUBREG,
+ get mode and thing to reload from inside.
+ * reload1.c (emit_reload_insns): Do nothing for SUBREG whose
+ operand is unused subsequently.
+ In secondary reload case, if paradoxical SUBREG for output, reload
+ thing inside SUBREG, just like gen_reload.
+
+Fri Aug 25 19:26:53 1995 Paul Eggert <eggert@twinsun.com>
+
+ * c-typeck.c (set_init_label): Don't die if an entire
+ brace-pair level is superfluous in the containing level.
+
+Fri Aug 25 19:22:46 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * configure (powerpc{,le}-eabisim): Add support for a new target
+ that works under the PSIM simulator.
+ * rs6000/eabisim.h, rs6000/eabilesim.h, rs6000/t-eabisim: New files.
+
+ * rs6000/eabi.h (STRICT_ALIGNMENT): If little endian, always set
+ strict alignment to 1.
+
+Fri Aug 25 19:22:23 1995 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.md ({add,sub,mulsi}di3): Support both endian possibilities.
+ (negdi2): Likewise.
+
+Fri Aug 25 19:10:41 1995 Oliver Kellogg (Oliver.Kellogg@space.otn.dasa.de)
+
+ * 1750a.md: Added peephole definitions for Load/Store Base insns
+ and eliminating redundant load in an equivalent store/load sequence.
+
+Fri Aug 25 18:33:27 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * toplev.c (report_error_function): Don't attempt to use input
+ file stack to identify nesting of #include's if file name oflocation
+ diagnosed is not same as input_filename.
+
+Fri Aug 25 07:31:47 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * integrate.c (output_inline_function): Switch to function obstack.
+
+Mon Aug 21 13:29:54 1995 J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+ * i386.c (arithmetic_comparison_operator): New function.
+ (print_operand): Take into account that overflow flag is not
+ set the same as after a compare instruction.
+ * i386.md (decrement_and_branch_until_zero): Use
+ arithmetic_comparison_operator to decide if there is comparison
+ suitable to be expressed by condition code from an arithmetic op.
+
+Mon Aug 21 13:26:13 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k.md (adddi3, subdi3): "&" added to clobber's constraints.
+
+Mon Aug 21 12:11:14 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * t-sparclite (MULTILIB_*, LIBGCC, INSTALL_LIBGCC): Define.
+
+ * sh.md (movdi-1, movdf-1): Make conditional on reload_completed,
+ delete conditions checking for pseudo registers and Q addresses.
+ Add code to handle SUBREG.
+
+ * local-alloc.c (wipe_dead_reg): Make a register mentioned in a
+ REG_INC note die after the instruction.
+
+ * m68k.md: For all dbra pattern, change constraint from 'g' to 'd*g'.
+
+ * Makefile.in: (underscore.c): Rename rule to stamp-under, and
+ touch stamp-under at the end. Add new rule for underscore.c that
+ depends on stamp-under.
+
+ * sh.c (reg_unused_after): For a SEQUENCE, make sure all insns are
+ safe before returning 1.
+
+ * sh.h (PROMOTE_FUNCTION_ARGS, PROMOTE_FUNCTION_RETURN): Define.
+
+ * sh.c (output_stack_adjust): Add new argument reg. Use it instead
+ of stack_pointer_rtx.
+ (sh_expand_prologue, sh_expand_epilogue): Pass new argument to
+ output_stack_adjust.
+
+Sat Aug 19 17:34:15 1995 Jim Wilson <wilson@phydeaux.cygnus.com>
+
+ * sparc/gmon-sol2.c (_mcount): Define.
+ * sparc/sol2.h (STARTFILE_SPEC, ENDFILE_SPEC): Delete superfluous
+ -pg tests.
+ (LINK_SPEC): Add libp directories to -Y when -pg.
+
+ * unroll.c (calculate_giv_inc): Handle increment computed by ASHIFT.
+
+Sat Aug 19 17:28:56 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k.md (subdi3): Should not be commutative.
+ (one_cmpldi2): Fixed typo with register operand.
+
+Sat Aug 19 17:20:43 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.c (output_prolog): Fixup code to set stack pointer
+ if stack size > 32k.
+ * rs6000.md (sync_isync): Renamed from sync; added an isync insn
+ after the sync to properly deal with PowerPC's with split I/D caches.
+ * sysv4.h (INITIALIZE_TRAMPOLINE): Sync function now named sync_isync.
+
+Sat Aug 19 17:07:09 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * h8300.h (STATIC_CHAIN_REGNUM): Use r3.
+ (REGISTER_NAMES): Print r7 as sp.
+ (ADDITIONAL_REGISTER_NAMES): Recognize r7.
+ (ASM_OUTPUT_ALIGN): Alignment is power of 2.
+ * h8300.md (fancy_btst,fancy_btst1): Branch target must be
+ operand 0 for length attribute to work.
+
+Sat Aug 19 16:43:11 1995 Paul Franklin <paul@cs.washington.edu>
+
+ * assert.h: Declare __eprintf with attribute noreturn.
+
+Sat Aug 19 16:40:12 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * stddef.h: Don't define wchar_t if __cplusplus is defined.
+
+Tue Aug 15 18:01:01 1995 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (warning_with_line): Fix typo in declaration when
+ !HAVE_VPRINTF and defined (__STDC__).
+
+Tue Aug 15 17:57:54 1995 Stephen L Moshier <moshier@world.std.com>
+
+ * real.c (ediv, emul): Set sign bit of IEEE -0.0 result.
+
+Tue Aug 15 17:49:47 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (safe_from_p): Only safe if EXP is variable-size and X
+ is BLKmode.
+
+ * stmt.c (fixup_gotos): When some fixups done, reset to point
+ to next instead of zeroing TREE_VALUE, which may be shared.
+
+Mon Aug 14 09:15:45 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * m68k/m68kemb.h (STARTFILE_SPEC): Define as empty.
+
+Mon Aug 14 09:08:57 1995 Pat Rankin <rankin@eql.caltech.edu>
+
+ * vax.c (vms_check_external): Update `pending_head' properly
+ when the first list element is removed.
+
+Mon Aug 14 09:01:32 1995 Jeffrey A. Law <law@adder.cygnus.com>
+
+ * pa.md (call expanders): Emit a blockage insn after restoring
+ %r19 when generating PIC.
+
+Sun Aug 13 21:58:49 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * toplev.c (main): Change text of unsupported -g option warning.
+
+Sun Aug 13 21:47:57 1995 Andrew McCallum <mccallum@graphite.cs.rochester.edu>
+
+ * objc/selector.c (sel_get_any_typed_uid): New function.
+ * objc/objc-api.h (sel_get_any_typed_uid): Declare new function.
+
+Sun Aug 13 21:43:17 1995 John Carr <jfc@mit.edu>
+
+ * c-typeck.c (c_expand_asm_operands): Check for read-only output
+ operand where the variable is read-only but the type is not.
+
+Sun Aug 13 21:16:12 1995 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.c (direct_return): Epilogue required if CR saved.
+
+Sun Aug 13 19:09:25 1995 Jeff Law (law@snake.cs.utah.edu)
+
+ * configure (hppa1.?-hp-hpux10): Recognize and treat just like hpux9.
+
+Sun Aug 13 19:07:23 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * i960.md (movdi matchers): Fix src/dest order in unaligned
+ reg->reg case.
+
+Sun Aug 13 18:49:01 1995 DJ Delorie <dj@delorie.com>
+
+ * i386/xm-dos.h (HAVE_STRERROR): New definition.
+
+ * msdos/configur.bat: Add missing carriage return.
+
+Sun Aug 13 18:40:55 1995 Andrew Cagney <cagney@highland.com.au>
+
+ * Makefile.in (USER_H): Add va-ppc.h.
+
+Sun Aug 13 18:36:17 1995 M. Warner Losh <imp@village.org>
+
+ * stmt.c (expand_asm_operands): Type '0'..'4' operands may
+ allow regs, so move them to the default case.
+
+Sun Aug 13 18:32:35 1995 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (warning_with_line): New function.
+ (trigraph_pcp): Use it, to avoid reporting line number.
+ (vwarning_with_line): Don't report line number if zero.
+
+Sun Aug 13 18:23:08 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * toplev.c (vmessage): Support four arguments.
+
+Sun Aug 13 18:19:51 1995 Michael Meissner <meissner@cygnus.com>
+
+ * ginclude/stdarg.h: Add ppc svr4 calling sequence support.
+ * ginclude/varargs.h: Likewise.
+ * ginclude/va-ppc.h: New file.
+
+Sun Aug 13 18:05:20 1995 Michael Gschwind <mike@donoussa.vlsivie.tuwien.ac.at>
+
+ * configure (pdp-*-*): Add support for t-pdp11.
+ * t-pdp11: New file.
+ * Makefile.in (LIBGCC2_CFLAGS): Add TARGET_LIBGCC2_CFLAGS.
+
+Sun Aug 13 14:50:58 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * final.c (final_start_function): Always call sdbout_begin_function
+ and xcoffout_begin_function, even if no line number info.
+
+ * mips/abi64.h (SETUP_INCOMING_VARARGS): In if statement, only
+ subtract one for stdarg. Don't subtract PRETEND_SIZE from
+ argument pointer when calculating stack address.
+ * mips.h (INITIAL_ELIMINATION_OFFSET): For 64 bit ABI, subtract
+ current_function_pretend_args_size when converting from argument
+ pointer.
+ * va-mips.h (va_start): For stdarg, delete separate define for
+ 64 bit ABI. For varargs, don't subtract 64, and only add -8 when
+ all argument registers are used.
+
+ * gcc.c (main): When concat gcc_exec_prefix and
+ standard_startfile_prefix, put machine_suffix in the middle.
+
+ * iris6.h (INIT_SECTION_ASM_OP): Don't define.
+ (LD_INIT_SWITCH, LD_FINI_SWITCH, HAS_INIT_SECTION): Don't undef.
+ (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): Ifdef out.
+ * configure (mips-sgi-irix6, mips-sgi-irix5cross64): Define
+ use_collect2 to yes.
+
+ * combine.c (move_deaths): When have a multi-reg hard register,
+ if don't find a note, then recur for each individual hard register.
+
+ * cse.c (set_nonvarying_address_components): Handle addresses
+ which are the sum of two constant pseudo regs.
+ (cse_rtx_addr_varies_p): Likewise.
+
+ * Makefile.in (gfloat.h): Add a - before the rm command.
+
+ * loop.c (find_and_verify_loops): Set dest_loop only if
+ JUMP_LABEL (insn) is non-zero.
+
+Mon Jul 31 14:31:53 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * fixincludes: Avoid clobbering VxWorks drv/netif/if_med.h file.
+
+Sat Jul 29 16:21:42 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * collect2.c: (XCOFF_SCAN_LIBS): Define if OBJECT_FORMAT_COFF and
+ XCOFF_DEBUGGING_FORMAT.
+ (SCAN_LIBRARIES): Also define if XCOFF_SCAN_LIBS.
+
+Sat Jul 29 16:19:42 1995 Stuart D. Gathman <stuart@bmsi.com>
+
+ * collect2.c (scan_libraries): Implement for AIX.
+
+Sat Jul 29 09:59:33 1995 Michael Gschwind <mike@lanai.vlsivie.tuwien.ac.at>
+
+ * configure: (pdp11-*-bsd) New target.
+ * 2bsd.h: New file.
+
+ * pdp11.c (output_move_double): Handle CONST_INT parameters properly.
+ * pdp11.h (RTX_COSTS): Fill in missing default values.
+ * pdp11.md (truncdfsf2, extendsfdf2, floatsidf2, fix_truncdfsi2):
+ Allow register parameters, required by gcc to generate correct code.
+ * xm-pdp11.h: Include tm.h.
+
+Sat Jul 29 09:55:17 1995 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * configure (m68k-*-linux*aout*, m68k-*-linux*): New targets.
+ * m68k/linux-aout.h, m68k/linux.h, m68k/t-linux, m68k/xm-linux.h: New.
+ * m68k.md [USE_GAS]: Output `jbsr' instead of `jsr' for normal
+ function calls and `bsr.l' instead of `bsr' for pic function calls.
+
+Sat Jul 29 09:44:13 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * sh.h (CAN_DEBUG_WITHOUT_FP): Comment out.
+
+ * reload.c (find_reloads_address_1, case PLUS): When handle SUBREG,
+ add SUBREG_WORD offset to SUBREG_REG register number.
+ (find_reloads_address_1, case SUBREG): If a pseudo register inside
+ a SUBREG is larger than the class, then reload the entire SUBREG.
+ * sh.h (SUBREG_OK_FOR_INDEX_P): New macro.
+ (INDEX_REGISTER_RTX_P): Use it.
+
+Sat Jul 29 09:33:19 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * mips/netbsd.h (CPP_SPEC): Fix typo.
+
+ * configure (a29k-*-vxworks*): Define extra_parts for crt{begin,end}.o.
+ * t-a29k, t-a29kbase, t-vx29k ({,CROSS_}LIBGCC1): Define as empty.
+
+Sat Jul 29 09:15:17 1995 Jeffrey A. Law <law@rtl.cygnus.com>
+
+ * pa/lib2funcs.asm (gcc_plt_call): Rewrite to avoid the need
+ for being called by _sr4export. Inline expand $$dyncall to
+ avoid the need for long-call and PIC support.
+
+Sat Jul 29 07:30:04 1995 Oliver Kellogg (Oliver.Kellogg@space.otn.dasa.de)
+
+ * ms1750.inc (ucim.m, ucr.m, uc.m): New.
+ * 1750a.md (cmpqi): Account for unsigned comparisons.
+ (rotrqi3, rotrhi3): Reworked.
+ * 1750a.c (notice_update_cc): INCM and DECM set condition codes.
+ (unsigned_comparison_operator, next_cc_user_is_unsigned): New fcns.
+ * 1750a.h (FUNCTION_EPILOGUE): Local variables freed from SP, not FP.
+ (ASM_OUTPUT_BYTE): Make distinct from ASM_OUTPUT_CHAR.
+ (ASM_OUTPUT_CONSTRUCTOR): Add FILE arg to assemble_name.
+
+Fri Jul 28 09:40:07 1995 Jeffrey A. Law <law@rtl.cygnus.com>
+
+ * pa.h (DO_GLOBAL_DTORS_BODY): Use an asm statement to keep optimizer
+ from deleting an assignment it believes dead.
+
+Fri Jul 28 08:47:51 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * unroll.c (unroll_loop): When preconditioning, output code to
+ execute loop once if initial value is greater than or equal to final
+ value.
+
+ * configure (lang_specs_files, lang_options_files): Add $srcdir to
+ file names when adding them to these variables.
+
+ * c-typeck.c (pointer_int_sum): Don't distribute if intop is unsigned
+ and not the same size as ptrop.
+
+ * function.c (assign_stack_temp): When split a slot, set base_offset
+ and full_size in the newly created slot.
+ (combine_temp_slots): Update full_size when slots are combined.
+
+ * sh.c (reg_unused_after): New function.
+ * sh.md (define_peephole): Add peepholes to use r0+rN addressing mode
+ for some address reloads.
+
+ * final.c (final_start_function): If SDB_DEBUG, call
+ sdbout_begin_function. If XCOFF_DEBUG, call xcoffout_begin_function
+ instead of xcoffout_output_first_source_line.
+ (final_scan_insn): Don't call sdbout_begin_function or
+ xcoffout_begin_function.
+ * xcoffout.c (xcoffout_output_first_source_line): Delete.
+ (xcoffout_begin_function): Call dbxout_parms and
+ ASM_OUTPUT_SOURCE_LINE.
+
+ * va-mips.h: Change every occurance of #if __mips>=3 to
+ #ifdef __mips64.
+ * mips/abi64.h (CPP_SPEC): Output -D__mips64 when -mips3, or -mips4,
+ or -mgp64. Output -U__mips64 when -mgp32.
+ * mips/dec-bsd.h, mips/elf64.h, mips/iris3.h: Likewise.
+ * mips/iris5.h, mips/mips.h, mips/netbsd.h, mips/osfrose.h: Likewise.
+
+ * i960.c (i960_function_epilogue): Don't clear g14 for functions with
+ an argument block.
+ (i960_output_reg_insn): Likewise.
+ (i960_output_call_insn): Clear g14 for functions wtih an argument
+ block.
+
+Fri Jul 28 08:43:52 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * i960.c (i960_arg_size_and_align): Correct alignment of XFmode
+ values in library calls.
+ * i960.md (movdi matchers): Support odd numbered regs.
+
+Fri Jul 28 08:37:25 1995 Michael Gschwind <mike@lanai.vlsivie.tuwien.ac.at>
+
+ * pdp11.md (divhi3, modhi3, divmodhi4): Rewrite.
+
+Wed Jul 26 10:15:52 1995 Hallvard B Furuseth (h.b.furuseth@usit.uio.no)
+
+ * collect2.c (end_file): Fix typo in error message text.
+
+Wed Jul 26 09:22:22 1995 Jeff Law (law@snake.cs.utah.edu)
+
+ * xm-pa.h (USE_C_ALLOCA): Always define.
+ * xm-pahpux.h (USE_C_ALLOCA): Likewise.
+
+ * x-pa (CC): Remove useless definition.
+ * xm-pa.h (HAVE_STRERROR): Define.
+ (__BSD_NET2__): Define.
+
+Wed Jul 26 09:10:25 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * expr.c (preexpand_calls): Don't look past a CLEANUP_POINT_EXPR.
+
+Wed Jul 26 08:43:42 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * cse.c (cse_insn): When do special handling for (set REG0 REG1),
+ must delete REG_EQUAL note from insn if it mentions REG0.
+
+ * loop.c (find_and_verify_loops): When moving blocks of code, verify
+ that the just destination is not in an inner nested loop.
+ (mark_loop_jump): Don't mark label as loop exit if it jumps to
+ an inner nested loop.
+
+Wed Jul 26 08:40:31 1995 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (do_include, read_name_map): Omit leading "./" and
+ trailing "/" when it makes sense.
+ (skip_redundant_dir_prefix): New function.
+
+Wed Jul 26 08:36:41 1995 Michael Meissner <meissner@cygnus.com>
+
+ * stmt.c (emit_nop): Do not emit a nop if there is a single
+ insn before a label or at the start of a function.
+
+Wed Jul 26 08:21:21 1995 Doug Evans <dje@cygnus.com>
+
+ * Makefile.in (gfloat.h): Delete previous copy before updating.
+
+Wed Jul 26 08:18:29 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * Makefile.in (STAGESTUFF): Add stamp-crtS.
+ (crtbeginS.o, crtendS.o, stamp-crtS): New rules; just like
+ crtbegin.o et al, but compiled using -fPIC.
+ * configure (*-*-gnu*): Add crtbeginS.o and crtendS.o to $extra_parts.
+
+Wed Jul 26 08:11:52 1995 Michael Gschwind <mike@java.vlsivie.tuwien.ac.at>
+
+ * pdp11.md: Fixed typos ('bhos' -> 'bhis').
+
+Wed Jul 26 08:05:41 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * hp320.h, m68k.h, m68kv4.h (LEGITIMATE_PIC_OPERAND_P): Reject
+ CONST_DOUBLE with MEM with invalid pic address.
+ * reload1.c (real.h): Include it.
+ * Makefile.in (reload1.o): Depends on real.h.
+
+Wed Jul 26 07:58:22 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * gcc.c (MULTILIB_DIRS): Provide default if not defined.
+ (multilib_defaults): New static variable.
+ (default_arg): New static function.
+ (set_multilib_dir): Ignore default arguments.
+ (print_multilib_info): Ignore entries which use default arguments.
+
+Tue Jul 25 10:06:09 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.md (allocate_stack): Don't copy the LR register to
+ the new stack end.
+ * rs6000.c (rs6000_stack_info): Correctly store the LR in
+ the caller's frame, not the current frame, for V.4 calls.
+ * rs6000/eabi.asm (_save*, _rest*): Provide all mandated V.4 save
+ and restore functions, except for the save*_g functions which
+ return the GOT address.
+
+Fri Jul 21 14:24:25 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000/eabi.h (__eabi): Load up r13 to be the small data
+ pointer, unless -mrelocatable.
+
+ * rs6000/aix3newas.h (LINK_SPEC): Import machine independent
+ functions if -mcpu=common.
+ * rs6000/milli.exp: Import file referenced in aix3newas.h.
+
+ * rs6000/eabi.asm (__eabi): Support for fixing up user initialized
+ pointers when -mrelocatable is used.
+ * rs6000/eabi.h (ASM_OUTPUT_INT): Record any pointers initialized
+ by the user if -mrelocatable, to be fixed up by __eabi.
+ (CONST_SECTION_ASM_OP): If -mrelocatable, put read-only stuff in .data,
+ not .rodata, to allow user initialized pointers to be updated by __eabi.
+
+ * rs6000.h (TARGET_SWITCHES): Add -mdebug-{stack,arg}.
+ (TARGET_{ELF,NO_TOC,TOC}): Add defaults for non system V.
+ (rs6000_stack): New structure to describe stack layout.
+ (RS6000_{REG_SAVE,SAVE_AREA,VARARGS_*}): New macros used to
+ support both AIX and V.4 calling sequences.
+ (FP_ARG_*, GP_ARG_*): Ditto.
+ (FP_SAVE_INLINE): Ditto.
+ (STARTING_FRAME_OFFSET): Modify to support both AIX and V.4
+ calling sequences.
+ (FIRST_PARM_OFFSET): Ditto.
+ (REG_PARM_STACK_SPACE): Ditto.
+ (STACK_POINTER_OFFSET): Ditto.
+ (FUNCTION_ARG_REGNO_P): Ditto.
+ ({,INIT_}CUMULATIVE_ARGS): Ditto.
+ (LEGITIMATE_LO_SUM_ADDRESS_P): Ditto.
+ (FUNCTION_ARG{,_ADVANCE,PARTIAL_NREGS,PASS_BY_REFERENCE}): Ditto.
+ (SETUP_INCOMING_VARARGS): Ditto.
+ (EXPAND_BUILTIN_SAVEREGS): Ditto.
+ (CAN_ELIMINATE): Ditto.
+ (INITIAL_ELIMINATION_OFFSET): Ditto.
+ (LEGITIMATE_CONSTANT_POOL_{BASE,ADDRESS}_P): Ditto.
+ (GO_IF_{LEGITIMATE_ADDRESS,MODE_DEPENDENT_ADDRESS}): Ditto.
+ (LEGITIMIZE_ADDRESS): Ditto.
+ (CONST_COSTS): Ditto.
+ (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): Ditto.
+ (ASM_OUTPUT_REG_{PUSH,POP}): Use reg_names to print registers.
+ (function declarations): Add new rs6000.c function declarations,
+ and delete decls of deleted functions.
+ (SHIFT_COUNT_TRUNCATED): Parenthesize the expression.
+
+ * rs6000.c (init_cumulative_args): New function to support AIX
+ and V.4 calling sequences.
+ (function_arg{,_advance,partial_nregs,pass_by_reference}): Ditto.
+ (setup_incoming_varargs): Ditto.
+ (expand_builtin_saveregs): Ditto.
+ (rs6000_stack_info): Ditto.
+ (debug_stack_info): Ditto.
+ (direct_return): Changes to support AIX and V.4 calling sequences.
+ (first_reg_to_save): Ditto.
+ (svr4_traceback): Ditto.
+ (output_{prolog,epilog}): Ditto.
+ (print_operand): Use reg_names to print registers. Add support
+ for V.4 HIGH/LO_SUM address modes.
+ (must_save_cr): Function deleted, in rewrite of AIX/V.4 calling
+ sequence support.
+ (rs6000_sa_size): Ditto.
+ (rs6000_pushes_stack): Ditto.
+ (output_toc): Add abort if no toc.
+
+ * rs6000.md (call insns): Add a new argument to flag a V.4
+ function needs to set bit 6 of the CR.
+ (elf_{low,high}): New V.4 functions to create addresses via HIGH
+ and LO_SUM patterns.
+ (movsi): Use elf_{low,high} if appropriate.
+ (mov{si,di}_update): Name these patterns for allocate_stack.
+ (allocate_stack): Support for V.4 stack layout.
+ (sync): New pattern for V.4 trampolines to issue the sync
+ instruction.
+
+ * rs6000/sysv4.h (TARGET_SWTICHES): Add -mcall-{aix,sysv}, and
+ -mprototype. Remove separate flag bit for -mno-toc.
+ (SUBTARGET_OVERRIDE_OPTIONS): Don't test for -mno-toc.
+ (FP_ARG_*): Adjust for V.4 calling sequences.
+ (RS6000_*): Ditto.
+ (FP_SAVE_INLINE): Ditto.
+ (toc_section): Eliminate use of AIX style full TOC.
+ (TRAMPOLINE_{TEMPLATE,SIZE}): Redefine for V.4 support.
+ (INITIALIZE_TRAMPOLINE): Ditto.
+
+ * rs6000/eabi.h (CPP_SPEC): Define _CALL_SYSV or _CALL_AIX,
+ depending on whether -mcall-sysv or -mcall-aix was used.
+ * rs6000/eabile.h (CPP_SPEC): Ditto.
+ * rs6000/sysv4le.h (CPP_SPEC): Ditto.
+
+ * rs6000/t-eabigas (MULTILIB_{OPTIONS,DIRNAMES}): Delete no-toc
+ libraries, explicit big endian libraries.
+ * rs6000/t-ppcgas (MULTILIB_{OPTIONS,DIRNAMES}): Ditto.
+
+ * rs6000/t-eabiaix: New file for eabi, using -mcall-aix as the
+ default.
+ * rs6000/eabiaix.h: Ditto.
+
+ * rs6000/t-eabilegas: New file for eabi on little endian systems.
+ * rs6000/t-ppclegas: New file for V.4 on little endian systems.
+
+ * rs6000/t-rs6000 (MULTILIB_{OPTIONS,DIRNAMES}): Build libgcc.a
+ for -mcpu=common.
+
+ * configure (powerpc-*-eabiaix): New configuration for defaulting
+ to old-style AIX calling sequence.
+ (powerpcle*): Use new t-{eabi,ppc}legas files, to avoid building
+ explicit little endian multilib libraries.
+
+Fri Jul 21 13:23:06 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * toplev.c (main): Don't define sbrk #ifdef __alpha__.
+
+Tue Jul 18 19:23:44 1995 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (do_include): Prefix -H output lines with spaces, not dots.
+ (output_dots): Remove.
+
+ * cccp.c (main): cplusplus_comments now defaults to 1.
+ But clear it if -traditional or the new option -lang-c89 is given.
+ * gcc.c (default_compilers, cpp): Specify -lang-c89 if -ansi is given.
+ This turns off C++ comment recognition.
+
+Tue Jul 18 19:16:38 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * va-sparc.h (va_arg): Add support for 128 bit long double type.
+
+Tue Jul 18 19:11:18 1995 Jorn Rennecke (amylaar@meolyon.hanse.de)
+
+ * c-common.c (decl_attributes, case A_ALIGNED): Handle is_type
+ case properly.
+
+Tue Jul 18 19:03:02 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (fold, case CONVERT_EXPR): Don't merge conversions
+ if outer is to handle a type with differing precision.
+
+Mon Jul 17 14:37:35 1995 Pat Rankin (rankin@eql.caltech.edu)
+
+ * vax/vms.h (HAVE_ATEXIT): Define.
+ (DO_GLOBAL_CTORS_BODY): Don't call atexit; let __do_global_ctors do it.
+ * vax/xm-vms.h (HAVE_VPRINTF): Define.
+
+Mon Jul 17 06:41:19 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-typeck.c ({unsigned,signed}_type): Handle intXX_type_node types.
+
+ * xm-alpha.h (sbrk): Add declaration.
+
+ * convert.c (convert_to_integer): If TYPE is a enumeral type or
+ if its precision is not the same as the size of its mode,
+ convert in two steps.
+
+ * m68k.md (tstdi, cmpdi): Use match_scratch, not match_operand.
+
+Fri Jul 14 19:23:42 1995 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * c-decl.c (field_decl_cmp): Rewritten to make sure that a null
+ name always sorts low against other names.
+ * c-typeck.c (lookup_field): Change name comparison to match what
+ field_decl_cmp does.
+
+Fri Jul 14 18:46:24 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.md (movsi): Convert a CONST_DOUBLE into a CONST_INT of
+ the low part.
+
+Fri Jul 14 18:30:52 1995 Doug Evans <dje@cygnus.com>
+
+ * toplev.c (main): Reword dwarf/c++/-g warning.
+
+Fri Jul 14 18:19:34 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.h (NO_DEFER_POP): Remove last change.
+ * expr.c (stor_expr): Force stack adjust before NO_DEFER_POP.
+ (expand_expr, case COND_EXPR): Likewise.
+ * stmt.c (expand_start_stmt_expr): Likewise.
+
+Fri Jul 14 07:58:35 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * function.c (struct temp_slot): New fields base_offset, full_size.
+ (assign_stack_temp): For !FRAME_GROWS_DOWNWARD, set p->size to size.
+ Set new fields base_offset and full_size.
+ (combine_temp_slots): Use new fields base_offset and full_size instead
+ of slot and size.
+
+ * loop.c (loop_number_exit_count): New global variable.
+ (loop_optimize): Allocate space for it.
+ (find_and_verify_loops, mark_loop_jump): Set it.
+ (strength_reduce, check_dbra_loop): Use loop_number_exit_count
+ instead of loop_number_exit_labels.
+ * loop.h (loop_number_exit_count): Declare it.
+ * unroll.c (find_splittable_{regs,givs}, final_[bg]iv_value): Use
+ loop_number_exit_count instead of loop_number_exit_labels.
+ (reg_dead_after_loop): Check loop_number_exit_count, and fail
+ if the count doesn't match loop_number_exit_labels.
+
+ * cse.c (cse_insn): Ifdef out code that pre-truncates src_folded.
+
+ * sparc.md (sethi_di_sp64): Return null string at end.
+
+ * function.h (struct function): Add stdarg field.
+ * function.c (current_function_stdarg): New global variable.
+ (push_function_context_to): Save it.
+ (pop_function_context_from): Restore it.
+ (assign_parms): Set it.
+ (init_function_start): Clear it.
+ * output.h (current_function_stdarg): Declare it.
+ * i960.md: Modify all patterns which handle stores to memory to also
+ check current_function_varargs and current_function_stdarg.
+
+ * reorg.c (fill_simple_delay_slots): When trying to take instruction
+ from after the branch, don't continue past target label. Local
+ variables passed_label and target_uses are no longer necessary.
+
+Thu Jul 13 19:30:04 1995 Jeff Law (law@snake.cs.utah.edu)
+
+ * pa.c (output_bb): Fix error in long backwards branch with
+ nullified delay slot.
+
+Thu Jul 13 19:26:13 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * expmed.c (SHIFT_COUNT_TRUNCATED): Use #ifdef not #if.
+
+Mon Jul 10 20:16:44 1995 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (rescan): Don't address outside of array when
+ preprocessing C++ comments.
+
+Mon Jul 10 20:05:46 1995 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * rs6000.c (expand_block_move): Remove #if 0 conditionals
+ against using larger block moves.
+
+ * t-rs6000 (EXTRA_PARTS): Copy milli.exp to release dir.
+ (milli.exp): Copy to build dir from machine dependend dir.
+
+Mon Jul 10 20:03:29 1995 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ * arm.md (matcher for (shiftable_op (cond-exp) (reg))): If
+ shiftable_op is minus, then subtract from zero when cond fails.
+
+Mon Jul 10 19:58:26 1995 John F. Carr <jfc@mit.edu>
+
+ * sparc.h (SELECT_SECTION): Use TREE_CODE_CLASS instead of directly
+ referencing tree_code_type.
+
+Mon Jul 10 19:54:31 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * protoize.c (reverse_def_dec_list): Delete const qualifiers from
+ local variables, and delete casts which were casting away const.
+
+Mon Jul 10 19:14:39 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-lang.c (finish_file): Add missing parm to start_function call.
+
+ * jump.c (jump_optimize): Pass outer_code arg to rtx_cost.
+
+ * varasm.c (assemble_name, bc_assemble_integer): Call
+ bc_emit_labelref with proper args.
+
+ * function.c (setjmp_args_warning): Remove bogus arg.
+
+Mon Jul 10 18:20:54 1995 Fergus Henderson (fjh@cs.mu.oz.au)
+
+ * gcc.c (p{fatal,error}_with_name, perror_exec): Quote filename.
+
+Mon Jul 10 18:12:51 1995 Gran Uddeborg (uddeborg@carmen.se)
+
+ * i386/iscdbx.h (STARTFILE_SPEC): Handle -Xp.
+
+Wed Jul 5 02:42:17 1995 Per Bothner (bothner@spiff.gnu.ai.mit.edu)
+
+ * cpphash.h (enum node_type): Remove unneeded and non-standard
+ forward declaration.
+
+Sat Jul 1 20:15:39 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * mips/t-mips, mips/t-mips-gas (MULTILIB_*, LIBGCC, INSTALL_LIBGCC):
+ Delete.
+
+ * sparc/sol2.h (LINK_SPEC): Revert March 16 change. Do not add -R
+ for each -L.
+
+ * collect2.c (libcompare): Verify that file name extensions are valid.
+ Put files with invalid extensions last in the sort.
+
+ * integrate.c (integrate_decl_tree): Set DECL_ABTRACT_ORIGIN before
+ pushdecl call for local variables.
+
+Sat Jul 1 08:13:38 1995 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ * cpplib.c (output_line_command): If not emitting #line directives
+ delay returning until after adjust_position has been called.
+
+ * arm.md (mov{si,sf,df}cc): Call gen_compare_reg to generate
+ the condition code register.
+
+Sat Jul 1 06:55:09 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (decode_field_reference): New parm PAND_MASK.
+ (unextend): New parm MASK.
+ (fold_truthop): Pass new parms to decode_field_reference and unextend.
+
+ * va-alpha.h (__va_tsize): Use __extension__ to avoid warning
+ on use of `long long'.
+
+ * expr.h (NO_DEFER_POP): Do any pending stack adjusts.
+
+ * recog.c (register_operand): Disallow subreg of reg not allowed to
+ change size.
+
+Thu Jun 29 05:51:57 1995 Jeff Law (law@snake.cs.utah.edu)
+
+ * pa.md (reload addsi3): New pattern to avoid reload lossage
+ with register eliminations.
+
+ * pa.c (output_cbranch): When checking for a jump to the given
+ insn's delay slot, handle the case where JUMP_LABEL for the
+ given insn does not point to the first label in a series of
+ labels.
+ (output_bb, output_dbra, output_movb): Likewise.
+
+Wed Jun 28 18:04:56 1995 Jeff Law (law@snake.cs.utah.edu)
+
+ * pa.h (PIC_OFFEST_TABLE_REGNUM_SAVED): Define to %r4.
+ (CONDITIONAL_REGISTER_USAGE): Make it fixed when compiling
+ PIC code.
+ (INIT_EXPANDERS): Delete.
+ * pa.c (hppa_save_pic_table_rtx): Delete variable.
+ (hppa_expand_prologue): For PIC generation, copy the PIC
+ register into a fixed callee register at the end of the
+ prologue of non-leaf functions.
+ * pa.md (call expanders): Reload the PIC register from the
+ fixed callee saved register. Don't try to save the PIC
+ register before the call.
+
+Wed Jun 28 18:01:14 1995 Stan Cox (coxs@dg-rtp.dg.com)
+
+ * m88k/dguxbcs.h (ASM_SPEC): Removed -h flag.
+ * m88k/dgux.h (ASM_SPEC): Likewise.
+
+Wed Jun 28 17:01:58 1995 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.c (processor_target_table): Remove CPU name synonyms.
+ * rs6000.h (CPP_SPEC): Likewise.
+ * rs6000/sysv4.h (CPP_SPEC): Likewise.
+ (ASM_SPEC): Likewise.
+ * rs6000/sysv4le.h (CPP_SPEC): Likewise.
+ * rs6000/eabile.h (CPP_SPEC): Likewise.
+ * rs6000/powerpc.h (CPP_SPEC): Likewise.
+ (ASM_SPEC): Set assembler target according to compiler target.
+ * rs6000/aix3newas.h (CPP_SPEC): Likewise.
+ (ASM_SPEC): Likewise.
+ * rs6000/aix41.h (CPP_SPEC): Likewise.
+ (ASM_SPEC): Likewise.
+
+Wed Jun 28 16:25:53 1995 Gran Uddeborg (uddeborg@carmen.se)
+
+ * i386/x-isc3 (INSTALL_HEADERS_DIR): Delete; done by configure.
+
+Wed Jun 28 16:10:47 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * xm-rs6000.h (alloca): Extern decl added for non-GNU compiler.
+
+Wed Jun 28 11:31:30 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cpplib.c (progname): Remove definition from here.
+
+ * final.c (final_scan_insn): Fix error in last change.
+
+ * rtlanal.c (reg_set_p_1): Now static; add extra parm.
+
+ * stmt.c: Delete redundant forward decls.
+ (expand_anon_union_decl): Correctly call expand_decl.
+
+ * toplev.c (strip_off_ending): Strip off any ending; don't
+ pretend we know what valid endings are.
+
+ * svr4.h (ASM_OUTPUT_SECTION_NAME): Don't crash if DECL is null.
+
+ * rs6000.md ({load,store}_multiple): Don't use indirect_operand
+ in define_insn; use explicit MEM of register_operand instead.
+
+Tue Jun 27 11:42:56 1995 Stephen L Moshier <moshier@world.std.com>
+
+ * i386/i386.c (print_operand, case `J'): Use jns for GE and js for
+ LT.
+
+Tue Jun 27 07:58:55 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * expr.c (expand_expr, TARGET_EXPR): Only use original_target
+ if !ignore.
+
+Tue Jun 27 07:27:26 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (fold_truthop): Commute unextend and convert on
+ l_const and r_const.
+
+ * c-common.c (decl_attributes, case A_CONSTRUCTOR, A_DESTRUCTOR):
+ Set TREE_USED.
+
+ * final.c (final_scan_insn): Don't call alter_cond unless
+ condition is on cc0.
+
+ * stmt.c (expand_asm_operands): Handle input operands that may not
+ be in a register.
+
+Mon Jun 26 19:23:05 1995 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ * arm/lib1funcs.asm (L_dvmd_tls): Renamed from L_divmodsi_tools.
+ * arm/t-semi (LIB1ASMFUNCS): Rename _dvmd_tls from _divmodsi_tools.
+
+Mon Jun 26 19:18:06 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * unroll.c (find_splittable_regs): When completely unrolling loop,
+ check for non-invariant initial biv values.
+
+Mon Jun 26 19:13:54 1995 Gran Uddeborg <uddeborg@carmen.se>
+
+ * configure (i[345]86-*-isc*): Fix misspelled "rfile" to "ifile".
+
+Mon Jun 26 18:58:22 1995 Mike Stump <mrs@cygnus.com>
+
+ * expr.c (expand_expr, case COND_EXPR): Protect the condition from
+ being evaluated more than once.
+ (do_jump, case TRUTH_ANDIF_EXPR, TRUTH_ORIF_EXPR): Likewise.
+
+Mon Jun 26 18:52:36 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * fixincludes (string.h): Fix return value for mem{ccpy,chr,cpy,set}
+ and str{len,spn,cspn} on sysV68.
+
+Mon Jun 26 06:54:50 1995 Michael Meissner (meissner@cygnus.com)
+
+ * i386/osfrose.h (LONG_DOUBLE_TYPE_SIZE): Go back to making long
+ double == double.
+
+Thu Jun 22 19:14:41 1995 Pat Rankin (rankin@eql.caltech.edu)
+
+ * make-cc1.com (if DO_LINK): Skip c-parse.* processing when
+ only relinking.
+ (gas_message): Update to reflect current version, and give
+ a different message if/when no version of gas is found.xo
+
+Thu Jun 22 18:52:37 1995 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ * arm/lib1funcs.asm (___modsi3): Correctly set SIGN register for
+ modulo involving negative numbers.
+
+Thu Jun 22 18:32:27 1995 Uwe Seimet (seimet@chemie.uni-kl.de)
+
+ * xm-atari.h (HZ): Now 100 and don't define if already defined.
+
+Thu Jun 22 18:26:12 1995 Jeffrey A Law (law@snake.cs.utah.edu)
+
+ * calls.c (expand_call): Correctly handle returning BLKmode
+ structures in registers when the size of the structure is not
+ a multiple of word_size.
+ * stmt.c (expand_return): Likewise.
+
+ * pa-gux7.h (LIB_SPEC): Undefine before redefining.
+ * pa-hpux.h (LIB_SPEC): Likewise.
+ * pa-hpux7.h (LIB_SPEC): Likewise.
+
+ * genmultilib: Work around hpux8 /bin/sh case bug.
+
+ * pa.h (LIB_SPEC): Define to avoid -lg.
+
+Thu Jun 22 18:19:09 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * expr.c (expand_expr, TARGET_EXPR): Use original_target.
+
+ * collect2.c (locatelib): Fix parsing of LD_LIBRARY_PATH.
+
+Thu Jun 22 18:15:54 1995 Paul Eggert <eggert@twinsun.com>
+
+ * configure: Create an empty Makefile.sed first, to work
+ around a Nextstep 3.3 bug.
+
+Thu Jun 22 18:03:44 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * Makefile.in (STAGESTUFF): Add stamp-crt.
+ (crtbegin.o, crtend.o): Now depend on stamp-crt.
+ (stamp-crt): New rule, to actually build crt{begin,end}.o.
+
+ * collect2.c (main): Unlink export_file before we return.
+
+Thu Jun 22 14:25:56 1995 Michael Meissner (meissner@cygnus.com)
+
+ * rs6000.h (STRIP_NAME_ENCODING): Store NAME and strlen(NAME) into
+ local variables; cast result of alloca to avoid compiler warnings.
+
+Tue Jun 20 18:25:29 1995 Douglas Rupp (drupp@cs.washington.edu)
+
+ * alpha/config-nt.sed, i386/config-nt.sed: Edit to add
+ a missing $(exeext) for CCCP.
+
+Tue Jun 20 18:18:00 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * protoize.c (default_include): Use name and two ints to be
+ compatible with definition of INCLUDE_DEFAULTS.
+
+Mon Jun 19 19:24:29 1995 Ted Lemon <mellon@toccata.fugue.com>
+
+ * mips/netbsd.h (ASM_DECLARE_FUNCTION_NAME): Don't emit function label.
+
+Mon Jun 19 18:34:55 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * fixincludes: Don't define wchar_t under C++.
+
+Mon Jun 19 17:12:41 1995 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (collect_expansion): Work around enum bug in vax
+ ultrix 4.3 pcc.
+ * tree.c (simple_cst_equal): Likewise.
+
+Mon Jun 19 16:53:00 1995 Douglas Rupp (drupp@cs.washington.edu)
+
+ * winnt/spawnv.c: New file.
+
+Mon Jun 19 16:30:29 1995 Glenn Brown <glenn@mars.myri.com>
+
+ * caller-save.c (save_call_clobbered_regs): If AUTO_INC_DEC, mark
+ register indicated by REG_INC notes as live so they will be saved.
+
+Mon Jun 19 16:21:12 1995 Jeffrey A Law (law@snake.cs.utah.edu)
+
+ * pa.h (PRINT_OPERAND_ADDRESS, case LOW_SUM): Fix logic bug
+ in last change.
+
+Mon Jun 19 14:11:49 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * integrate.c (integrate_decl_tree): Only set DECL_ABSTRACT_ORIGIN
+ if the decl returned by pushdecl is the one we started with.
+
+ * mips.h (current_function_name): Delete declaration.
+ (ASM_DECLARE_FUNCTION_NAME): Don't set current_function_name.
+ * gnu.h (ASM_DECLARE_FUNCTION_NAME): Likewise.
+ * mips.c (current_function_decl): Delete declaration.
+ (function_prologue): New variable fnname. Use it instead of
+ current_function_name.
+ (function_epilogue): Likewise.
+
+Mon Jun 19 13:13:15 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * alpha.h (ASM_OUTPUT_ASCII): Always reset line count when
+ starting new line.
+
+ * scan-decls.c (scan_decls): Fix typo when resetting PREV_ID_START.
+
+ * i386/config-nt.sed, alpha/config-nt.sed: Change version to 2.7.1.
+
+Mon Jun 19 13:06:14 1995 DJ Delorie (dj@delorie.com)
+
+ * msdos/top.sed: Support new build variables.
+ * msdos/configur.bat: Make options.h and specs.h.
+ Change realclean to maintainer-clean.
+
+Fri Jun 16 06:54:03 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * Version 2.7.0 Released.
+
+ * obstack.c: Always enable this code for now.
+
+ * alpha.c (alpha_builtin_saveregs): Use ptr_mode and conversions
+ when need so works for both OSF and NT.
+ * va-alpha.h (__va_tsize): Round to long long not long.
+
+Thu Jun 15 17:54:52 1995 Bdale Garbee <bdale@gag.com>
+
+ * configure (a29k-*-coff): Synonym for a29k-*-udi.
+
+Thu Jun 15 17:51:21 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (assign_parms): Do all conversions in CONVERSION_INSNS.
+
+Thu Jun 15 17:36:49 1995 Michael Meissner <meissner@cygnus.com>
+
+ * reg-stack.c (record_reg_life): Call record_reg_life_pat with 0
+ for douse argument so that USE's created to mark variables within
+ blocks don't get marked as set.
+
+Thu Jun 15 06:28:15 1995 Dennis Glatting (dennisg@CyberSAFE.COM)
+
+ * configure: Change one sed command to work around m68k-next bug.
+
+Wed Jun 14 22:14:39 1995 Jason Merrill <jason@deneb.cygnus.com>
+
+ * collect2.c (main): Don't turn off auto_export because of -g.
+ (main): Ignore the argument to -o.
+
+ * alpha.h (LINK_SPEC): Don't pass -init __main anymore.
+ * alpha/osf12.h (LINK_SPEC): Ditto.
+ * mips/iris5.h (LINK_SPEC): Ditto.
+
+ * collect2.c (main): Place o_file after an initial .o (like crt0.o).
+ If we have LD_INIT_SWITCH, use init and fini functions for
+ executables, too. Specify the unique function names.
+ (write_c_file_stat): Fix the case of destructors but no constructors.
+ Don't include the generic-named functions for executables.
+ (write_c_file): If we have LD_INIT_SWITCH, always use
+ write_c_file_stat.
+
+ * collect2.c (main): Also add _GLOBAL__D? to export list.
+
+ * ginclude/iso646.h: Do nothing if compiled as C++.
+
+Wed Jun 14 17:39:10 1995 Roland McGrath (roland@gnu.ai.mit.edu)
+
+ * c-common.c (format_char_info, case 'm'): Set type to void.
+ (check_format_info): If type is void, ignore operand.
+
+Wed Jun 14 17:04:10 1995 Paul F. Kunz (Paul_Kunz@SLAC.Stanford.EDU)
+
+ * expr.c (expand_builtin_apply_args): Put back original
+ register save and restore order.
+
+Wed Jun 14 16:56:22 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000/eabi.h (INVOKE__main): Define, so __eabi is called after
+ main's arguments are saved.
+
+ * rs6000.c (output_prolog): Don't call __eabi here, let
+ compiler call it after the arguments to main are saved.
+ (output_{prolog,epilog}): Don't use functions under V.4 to save
+ and restore floating point registers.
+
+Wed Jun 14 16:52:12 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k/mot3300.h (PCC_BITFIELD_TYPE_MATTERS): Defined.
+
+Wed Jun 14 16:48:53 1995 Jerry Frain (jerry@tivoli.com)
+
+ * Makefile.in (stage[1-4]): Correctly link `as', `ld', and `collect2'.
+
+Wed Jun 14 05:52:04 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * objc-act.c (hack_method_prototype): Set DECL_CONTEXT of parms.
+
+ * expmed.c (emit_store_flag): Always set LAST.
+
+ * c-decl.c (start_function): New parameter for attributes.
+ * c-tree.h (start_function): Likewise.
+ * c-lang.c (finish_file): Pass extra parm to start_function.
+ * objc-act.c (build_module_descriptor, really_start_method): Likewise.
+ * c-parse.in (fndef, nested_function, notype_nested_function):
+ Likewise.
+
+ * function.c (assign_parms): Use convert_to_mode instead of
+ gen_lowpart when converting incoming parm.
+
+Tue Jun 13 19:10:32 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * rs6000.md (decrement_and_branch): Finish last fix; update matching
+ constraint.
+
+Tue Jun 13 18:32:51 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
+
+ * fold-const.c (fold): When converting a COND_EXPR to an ABS_EXPR,
+ get the types right for ABS_EXPR to work.
+
+Mon Jun 12 17:09:55 1995 Michael Tiemann (tiemann@axon.cygnus.com)
+
+ * reorg.c (fill_simple_delay_slots): Set MAYBE_NEVER according to
+ code of TRIAL_DELAY, not TRIAL.
+
+Mon Jun 12 15:02:37 1995 Doug Evans <dje@cygnus.com>
+
+ * configure: Restore code to make ld symlink if ! use_collect2.
+
+ * gcc.c (link_command_spec): Undo patch of May 11.
+ -nostdlib implies -nostartfiles again.
+ * dsp16xx.h (CROSS_LINK_SPEC): Likewise.
+ * i386/freebsd.h (LINK_SPEC): Undo patch of May 24.
+ Don't pass "-e start" if nostdlib.
+ * i386/sun.h (LINK_SPEC): Likewise.
+ * m68k/sun2o4.h (LINK_SPEC): Likewise.
+ * m68k/sun3.h (LINK_SPEC): Likewise.
+ * m68k/vxm68k.h (LINK_SPEC): Likewise.
+ * mips/netbsd.h (LINK_SPEC): Likewise.
+ * config/netbsd.h (LINK_SPEC): Likewise.
+ * rs6000/mach.h (LINK_SPEC): Likewise.
+ * sparc.h (LINK_SPEC): Likewise.
+ * sparc/vxsparc.h (LINK_SPEC): Likewise.
+
+ * gcc.c (link_command_spec): New argument -nodefaultlibs.
+
+Sun Jun 11 20:47:53 1995 Stephen L Moshier (moshier@world.std.com)
+
+ * Makefile.in (fix-header.o): Depends on xsys-protos.h.
+
+Sun Jun 11 15:07:58 1995 Tim Carver (timc@ibeam.intel.com)
+
+ * reload1.c (emit_reload_insns): Don't call HARD_REGNO_NREGS
+ on psuedo when clearing reg_last_reload_reg.
+
+Sun Jun 11 14:07:05 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k.md ({add,sub}di{_mem,3}): Patterns merged.
+
+Sun Jun 11 13:43:26 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
+
+ * m68k.md (cmpdi matcher): Set cc_status before returning.
+
+ * config/xm-freebsd.h (DONT_DECLARE_SYS_SIGLIST): Define.
+
+Sun Jun 11 13:38:49 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * fixincludes (math.h): Keep declaration of abs on HPUX.
+
+Sun Jun 11 12:31:42 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * stor-layout.c (variable_size): Do nothing if SIZE is constant.
+
+ * stmt.c (expand_asm_operands): See if output operand permits
+ register. If not, mark output addressable, call expand_operand
+ on it, and give error if not MEM.
+
+ * function.c (assign_parms): Handle promotions of both
+ passed and nominal modes separately and insert needed conversions.
+ (promoted_input_arg): Return 0 if nominal and passed modes differ.
+
+ * stmt.c (all_cases_count, case INTEGER_TYPE): Fix typo in checking
+ for integer bounds.
+
+Sat Jun 10 08:55:25 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * libgcc2.c (_floatdidf): Correctly set float sizes.
+
+ * c-decl.c (c_decode_option, case "-Wall"): Don't set extra_warnings.
+
+ * Makefile.in (cpplib.o, fix-header.o): Update dependencies.
+ (cpperror.o, cppexp.o, cpphash.o): New rules, to show .h dependencies.
+
+Fri Jun 9 18:06:10 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * cse.c (cse_basic_block): Fix test for whether block ends with a
+ barrier. Return next insn, not 0, if block ends in a barrier.
+
+Fri Jun 9 17:58:29 1995 Paul Eggert <eggert@twinsun.com>
+
+ * fold-const.c (lshift_double): Replace `&' with `%' to fix typo.
+ ([lr]shift_double): Truncate shift count only if SHIFT_COUNT_TRUNCATED.
+ Remove unnecessary `count >= prec' test.
+
+ * cexp.y (left_shift): Ignore integer overflow.
+
+ * cexp.y (skip_evaluation): New variable.
+ (&&, ||, ?:): Increment it in unevaluated subexpressions.
+ (/, %, integer_overflow): Suppress diagnostics if skip_evaluation != 0.
+ (yyerror): Clear skip_evaluation.
+
+Fri Jun 9 17:49:05 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
+
+ * m68k.md (tstdi): Rewrite.
+
+Fri Jun 9 17:28:55 1995 Per Bothner <bothner@cygnus.com>
+
+ * scan-decls.c (scan_decls): Handle declarations with
+ multiple comma-separated declarators.
+
+Thu Jun 8 19:16:12 1995 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ * arm.md (mov[sd]f expands): Don't allow fp constants in pseudos
+ when TARGET_SOFT_FLOAT.
+
+Thu Jun 8 19:11:43 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * expmed.c (store_split_bit_field): When adjust arg in
+ BYTES_BIT_ENDIAN case, use number of bits in arg for MEM operands
+ and BITS_PER_WORD for other operands.
+ (extract_fixed_bit_field): Undo last change.
+
+ * unroll.c (verify_addresses): New function.
+ (find_splittable_givs): Use it instead of memory_address_p.
+
+Thu Jun 8 18:58:18 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
+
+ * expmed.c (expand_divmod): Always check result of emit_store_flag.
+
+Thu Jun 8 12:02:34 1995 David D Zuhn (zoo@armadillo.com)
+
+ * cpplib.c (cpp_push_buffer): Include filename in error message.
+
+Thu Jun 8 11:53:45 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (assign_parms): Don't call promote_mode on arg
+ unless PROMOTE_FUNCTION_ARGS defined.
+
+ * rs6000.md (decrement_and_branch): Ensure label is operand 0.
+
+ * rs6000.md (aux_truncdfsf2): New pattern.
+ (movsf): Use it instead of invalid SUBREG and truncdfsf2.
+
+ * varasm.c (assemble_name): Disable warn_id_clash around
+ get_identifier call.
+
+Wed Jun 7 17:22:25 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * configure (gdb_needs_out_file_path): New variable.
+ (m68k-motorola-sysv): Set gdb_needs_out_file_path if not using gas.
+ (.gdbinit): If gdb_needs_out_file_path is set, add a 'dir' command
+ for $(out_file).
+
+Wed Jun 7 17:17:19 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
+
+ * fold-const.c (fold): When folding `<' type nodes, make true_value
+ and false_value have correct types.
+
+Wed Jun 7 05:06:42 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * collect2.c (COFF scan_prog_file): Use the AIX duplicate entry.
+
+Tue Jun 6 18:43:09 1995 Jeffrey A Law (law@snake.cs.utah.edu)
+
+ * pa.h (FUNCTION_ARG_CALLEE_COPIES): Define.
+
+Tue Jun 6 18:21:18 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case PLACEHOLDER_EXPR): Consider two types
+ identical if their TYPE_MAIN_VARIANTs are the same.
+
+ * c-decl.c (start_decl): Set DECL_COMMON before calling
+ decl_attributes.
+
+ * a29k.c (print_operands): Cast args to bcopy to char *.
+
+ * c-decl.c (duplicate_decls): Don't clear DECL_CONTEXT of
+ new decl if it is a function.
+
+Tue Jun 6 17:57:44 1995 Eberhard Mattes (mattes@azu.informatik.uni-stuttgart.de)
+
+ * gcc.c (do_spec_1, case 'g'): Handle %O as suffix if MKTEMP_EACH_FILE.
+
+Tue Jun 6 17:53:05 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.c (expand_block_move): Update source and destination pointers
+ inside the loop moving the bytes, not outside.
+
+Tue Jun 6 14:58:37 1995 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * m68k.h (CONDITIONAL_REGISTER_USAGE): Don't mark pic reg as fixed.
+ * m68k.c (finalize_pic): Emit USE insn at start and end of function.
+
+Tue Jun 6 13:46:57 1995 Jim Wilson <wilson@mole.gnu.ai.mit.edu>
+
+ * sh.c (print_operand): Check for annulled branches.
+ (output_movedouble): Handle SUBREG addresses.
+ (output_branch): Handle annulled branches.
+ (sh_expand_prologue): Correct number of saved registers for
+ varargs functions.
+ * sh.h: Add some comments.
+ * sh.md: Add some comments. Cleanup formatting.
+ (type attribute): Add pstore and call.
+ (return define_delay): Reorganize to make clearer.
+ (call/sfunc define_delay): Define.
+ (cbranch define_delay): Define to have annul-true delay slot.
+ (subsi3): Use arith_reg_operand for operand 2.
+ (shift patterns): Use const_int_operand instead of immediate_operand
+ for shift counts.
+ (push): Add pstore constraint case.
+ (movsi_i): Move t/z constraint pair to the front of the list.
+ (calli, call_valuei): Add "call" attribute.
+
+Mon Jun 5 19:23:13 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * sched.c (attach_deaths): In last change, use find_reg_note instead
+ of find_regno_note.
+
+Mon Jun 5 19:17:31 1995 Tom Quiggle (quiggle@lovelace.engr.sgi.com)
+
+ * mips/iris5.h (MACHINE_TYPE): Say "IRIX 5.x", not "5.0".
+ (NO_DOLLAR_IN_LABEL): Undefine.
+ * mips.h (sdb_begin_function_line): New declaration.
+ (PUT_SDB_FUNCTION_END): New definition.
+
+Mon Jun 5 18:56:10 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.c (expand_block_move): Don't do block moves where we clobber
+ fixed numbers of regs, instead move just 1-8 bytes at a time.
+
+ * Makefile.in (STAGESTUFF): Copy files produced by -da and
+ -save-temps to the stage subdirectories.
+
+Mon Jun 5 08:18:46 1995 Torbjorn Granlund <tege@bozo.matematik.su.se>
+
+ * combine.c (reg_dead_at_p): When scanning backwards, stop at BARRIER.
+
+ * m68k.c (print_operand): Handle 'R' for registers.
+ * m68k.md (cmpdi): Rewrite to avoid bogus matching constraints.
+
+ * optabs.c (expand_binop): In last change, don't defererence TARGET
+ if it is 0.
+
+ * pa.md (movsicc): Use MATCH_DUP for operand 4 and 5.
+
+Mon Jun 5 08:14:56 1995 Jeffrey A Law (law@cs.utah.edu)
+
+ * pa.c (hppa_encode_label): Allocate stuff on permanent_obstack
+ rather than via malloc.
+
+ * c-common.c (decl_attributes): Fix typo in size passed to alloca.
+
+Mon Jun 5 08:10:55 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.md: Use "some_operand" for patterns valid only during
+ reload and meant to handle adding more PLUS operators during
+ register elimination.
+
+Mon Jun 5 07:31:53 1995 Stephen L Moshier (moshier@world.std.com)
+
+ * cse.c (simplify_unary_operation, case FLOAT, UNSIGNED_FLOAT):
+ Truncate to requested mode.
+
+Sat Jun 3 22:08:51 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * sched.c (attach_deaths): Don't add a REG_DEAD note if a REG_UNUSED
+ note is already present.
+
+Sat Jun 3 18:36:57 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * pa.h (hppa_builtin_saveregs): Add declaration.
+
+Sat Jun 3 18:11:26 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * Makefile.in (scan-decls.o): Depends on cpplib.h.
+
+Fri Jun 2 19:23:47 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * optabs.c (expand_binop): Don't use non-REG TARGET in 2-word case.
+
+Thu Jun 1 19:30:30 1995 Tor Egge (tegge@flipper.pvv.unit.no)
+
+ * m88k.h (RETURN_POPS_ARGS): New argument.
+ * m88k/dolphin.ld: Added start of comment.
+
+Thu Jun 1 19:12:28 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * configure (a29k-*-bsd*): Fix typo in last change.
+
+Thu Jun 1 18:51:53 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * expmed.c (extract_fixed_bit_field): For REG case, compute total_bits
+ from mode instead of assuming BITS_PER_WORD.
+
+Thu Jun 1 18:34:31 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.h (FIXED_R13): Default to 0.
+ ({FIXED,CALL_USED}_REGISTERS): Use FIXED_R13 for register 13.
+ * sysv4.h (FIXED_R13): Define to be 1.
+
+Wed May 31 20:57:26 1995 Torbjorn Granlund <tege@matematik.su.se>
+
+ * m68k.md ([su]mulsi3_highpart): Pass correct number of arguments to
+ const_uint32_operand.
+ * m68k.c (const_uint32_operand): Reject negative numbers.
+
+ * expmed.c (expand_mult_highpart): Use wide_op1 for all multiplies.
+ (expand_divmod): Undo Nov 12 change. Instead, add special case
+ for division by MIN_INT in signed TRUNC_DIV_EXPR case.
+
+Wed May 31 20:44:21 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k.md (one_cmpldi2): New pattern.
+ ({a,l}shrdi{3,_const}): Allow 63 as shift count.
+
+Wed May 31 14:56:31 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * varasm.c (assemble_start_function, assemble_variable):
+ Make sure first_global_object_name is in permanent obstack.
+
+ * reload1.c (alter_reg): Clean up setting of RTX_UNCHANGING_P
+ when making a MEM.
+
+ * reorg.c (struct resources): New field unch_memory.
+ (CLEAR_RESOURCES, mark_target_live_regs, dbr_schedule): Clear it.
+ (mark_{referenced,set}_resources, redundant_insn): Set it.
+ (fill_simple_delay_slots): Likewise.
+ (resource_conflicts_p): Test it.
+
+ * unroll.c (copy_loop_body): Fix typo in call to sets_cc0_p.
+
+ * integrate.c (output_inline_function): Don't call expand_function_end.
+
+ * calls.c (prepare_call_address): Only call use_reg on
+ static_chain_rtx if it is a REG.
+
+ * configure (a29k-*-bsd*): Use t-a29k.
+ * t-a29k: New file.
+ * a29k/t-a29kbare (LIBGCC1_TEST): New null definition.
+ * a29k/t-vx29k (LIBGCC1_TEST): Likewise.
+
+Wed May 31 14:17:42 1995 Jeffrey A Law (law@snake.cs.utah.edu)
+
+ * configure (hppa*-*-bsd*): Do not run fixincludes.
+ (hppa*-*-osf*): Likewise.
+ (hppa*-*-lites*): Likewise.
+
+ * pa.h (PRINT_OPERAND_ADDRESS): Use "RR'" rather than "R'" for
+ symbolic addresses.
+ * pa.md (symbolic HIGH patterns): Likewise.
+ (symbolic LO_SUM pattern): Likewise.
+
+Wed May 31 14:11:53 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.md (all movstri recognizers): Eliminate updating the pointers.
+ * rs6000.c (expand_block_move): Don't pass argument of # bytes to
+ increment pointers by to movstrsi expanders.
+
+ * rs6000.c (rs6000_override_options): Fix typo with -mstring handling.
+
+ * rs6000.h (TARGET_SWITCHES): Set MASK_STRING_SET explicitly
+ if -mno-string, so that it can override the processor default.
+
+Wed May 31 07:31:53 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * c-common.c (truthvalue_conversion, BIT_AND_EXPR): Make sure that
+ the result has boolean_type_node.
+
+Tue May 30 19:03:21 1995 J.T. Conklin <jtc@cygnus.com>
+
+ * stddef.h: Undefine _BSD_XXX_T_ if _GCC_XXX_T is defined on BSD
+ Net/2 derived systems.
+
+Tue May 30 08:17:37 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k.md (decrement_and_branch_until_zero): Operand 0 constraint
+ changed from "+g" to "+d*am".
+ (similar anonymous HImode pattern): Likewise.
+
+ * m68k.md (tstdi): Use tst/subx #0 instead of neg/negx.
+ Allow "a" and ">" for operand 0.
+
+Mon May 29 19:24:43 1995 Niklas Hallqvist (niklas@appli.se)
+
+ * m68k.md (addsi_lshrsi_31): Use match_dup, not constraint "1",
+ for matching inputs.
+
+Mon May 29 12:39:58 1995 Allen Briggs <briggs@rrinc.com>
+
+ * i386/isc.h ({STARTFILE,LIB,CPP}_SPEC): Handle -Xp like -posix.
+ * i386/x-isc3 (X_CFLAGS): Add -Xp.
+
+Mon May 29 12:28:41 1995 J.T. Conklin (jtc@cygnus.com)
+
+ * configure (sparc-*-netbsd): Add missing asterisk at end.
+
+Mon May 29 08:55:48 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (recog_for_combine): New parm PADDED_SCRATCHES; set it.
+ (try_combine): Accumulate number of scratches and update max_scratch.
+ (simplify_set): Add extra parm to recog_for_combine.
+
+ * romp.md (call): Put USE for r0 in CALL_INSN; call call_internal
+ to emit insn.
+ (call_internal): New name for anonymous call.
+ (call_value, call_value_internal): Likewise.
+
+ * winnt/xm-winnt.h: Protect most definitions with #ifndef.
+ * alpha/xm-winnt.h: Include alpha/xm-alpha.h, then winnt/xm-winnt.h.
+ (POSIX): Undefine.
+ * xm-alpha.h: Don't include alloca.h for winnt.
+
+Sun May 28 18:34:01 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * configure: Make sed commands more uniform.
+
+ * Makefile.in: Properly use $(srcdir) for files that have it
+ in their reference as a target of a rule.
+ (libgcc1.a): Add missing RANLIB_TEST use.
+
+ * stmt.c (expand_computed_goto): Call do_pending_stack_adjust.
+
+Sun May 28 18:08:41 1995 Torbjorn Granlund <tege@mole.gnu.ai.mit.edu>
+
+ * m68k.md (divmodhi4, udivmodhi4): Use "dmsK" for operand 2.
+
+Fri May 26 17:01:22 1995 Paul Eggert <eggert@twinsun.com>
+
+ * fixincludes: Fix bogus recursive <stdlib.h> in NEWS-OS 4.0C.
+
+Fri May 26 08:02:14 1995 Michael Meissner (meissner@cygnus.com)
+
+ * c-typeck.c (initializer_constant_valid_p): For the CONSTRUCTOR
+ case, if the type is a record, recurse, just like for unions.
+
+Thu May 25 07:56:14 1995 Paul Eggert <eggert@twinsun.com>
+
+ * fixincludes: Add `sel', `tahoe', `r3000', `r4000' to the
+ list of pre-ANSI symbols that need to be surrounded with __ __.
+ Allow white space between `#' and `if' when looking for lines to patch.
+
+ * objc/sarray.h (PRECOMPUTE_SELECTORS, struct soffset):
+ Use #ifdef __sparc__, not sparc.
+
+ * m68k.md (addsi_lshrsi_31, ashldi_const, ashrdi_const, lshrdi_const):
+ Replace `mov' with `move'.
+
+Thu May 25 07:35:37 1995 Allen Briggs <briggs@rrinc.com>
+
+ * libgcc2.c (L_eh, i386): Remove in-line comments in assembly
+ code--the '#' character is not valid for the SYSV as.
+
+Thu May 25 07:28:54 1995 Pat Rankin (rankin@eql.caltech.edu)
+
+ * Makefile.in (BC_ALL): Restore it from May 22 change; vms uses it.
+ (STAGESTUFF): Use it.
+
+Thu May 25 07:11:56 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.c (alpha_emit_set_const): Don't call expand_binop for
+ other than add if SImode and can't create pseudos.
+
+Wed May 24 21:38:24 1995 Jim Wilson <wilson@cygnus.com>
+
+ * sched.c (reemit_notes): New function.
+ (schedule_block): Call reemit_notes twice. Reorganize code for
+ handling SCHED_GROUP_P insns, so that reemit_notes works.
+
+ * sh/sh.c (shiftcosts, genshifty_op): Add SH3 support.
+ * sh/sh.md (ashlsi3, lshrsi3): Add SH3 support.
+ (ashlsi3_d, ashrsi3_d, lshrsi3_d): New patterns for SH3.
+ (ashrsi2_31): Remove r/!r constraint.
+
+Wed May 24 17:00:47 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * tree.c (type_list_equal): Call simple_cst_equal before checking
+ types.
+
+Wed May 24 16:49:49 1995 Douglas Rupp (drupp@cs.washington.edu)
+
+ * Makefile.in (libgcc2.a): Handle case of separate srcdir.
+
+Wed May 24 16:22:01 1995 Paul Eggert <eggert@twinsun.com>
+
+ * configure: Define $(MAKE) if `make' doesn't.
+
+Wed May 24 15:50:51 1995 Doug Evans <dje@cygnus.com>
+
+ * dsp16xx.h (CROSS_LINK_SPEC): ENDFILE_SPEC moved to -nostartfiles.
+ * i386/freebsd.h (LINK_SPEC): Don't pass "-e start" if nostartfiles
+ rather than nostdlib.
+ * i386/sun.h (LINK_SPEC): Likewise.
+ * m68k/sun2o4.h (LINK_SPEC): Likewise.
+ * m68k/sun3.h (LINK_SPEC): Likewise.
+ * m68k/vxm68k.h (LINK_SPEC): Likewise.
+ * mips/netbsd.h (LINK_SPEC): Likewise.
+ * config/netbsd.h (LINK_SPEC): Likewise.
+ * rs6000/mach.h (LINK_SPEC): Likewise.
+ * sparc.h (LINK_SPEC): Likewise.
+ * sparc/vxsparc.h (LINK_SPEC): Likewise.
+
+ * m88k/m88k.h (FUNCTION_ARG_BOUNDARY): Use GET_MODE_BITSIZE.
+
+Wed May 24 15:44:04 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * fold-const.c (fold): Make sure that a folded TRUTH_NOT_EXPR
+ retains the same type.
+
+ * c-common.c (truthvalue_conversion): Also accept TRUTH_NOT_EXPR.
+
+Wed May 24 15:41:51 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cplus-dem.c (strstr, strncmp, strlen): Remove declarations.
+
+ * tree.c (type_list_equal, simple_cst_list_equal, index_type_equal):
+ Check for simple_cst_equal return value of -1.
+
+Wed May 24 10:05:24 1995 Michael Meissner <meissner@cygnus.com>
+
+ * libgcc1-test.c (start, _start): Provide declarations, so that
+ the GNU linker doesn't give a warning message about defaulting the
+ start address.
+
+ * rs6000/sysv4.h (STRIP_NAME_ENCODING): Redefine back to the
+ original defination, rather than the defination used in rs6000.h.
+ (ASM_OUTPUT_SOURCE_LINE): Use STRIP_NAME_ENCODING.
+ * rs6000.h (STRIP_NAME_ENCODING): Skip leading '*'.
+
+ * rs6000.h (MASK_STRING_SET, TARGET_STRING_SET): Add target
+ flags bit for whether -mstring was actually used.
+ (TARGET_SWITCHES): Add MASK_STRING to all power targets. Set
+ MASK_STRING_SET for -mstring and -mno-string.
+ (TARGET_DEFAULT): Add MASK_STRING.
+
+ * rs6000.c (rs6000_override_options): Add MASK_STRING to
+ all power targets. Make an explicit -mstring/-mno-string override
+ the -mcpu=processor default.
+
+ * rs6000/eabile.h (CPP_SPEC): Copy from sysvle.h to provide the
+ appropriate little endian defaults.
+
+ * rs6000/sysv4.h (ASM_OUTPUT_SOURCE_LINE): Use assemble_name to
+ output the canonical name.
+
+Wed May 24 01:21:15 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * rs6000.h (STRIP_NAME_ENCODING): Define.
+ (RS6000_OUTPUT_BASENAME): Use it.
+
+Tue May 23 19:54:21 1995 Doug Evans <dje@cygnus.com>
+
+ * gcc.c (link_command_spec): Move ENDFILE_SPEC from -nostdlib
+ to -nostartfiles.
+
+Tue May 23 17:01:50 1995 Jim Wilson <wilson@cygnus.com>
+
+ * alpha.md (negsi2-2): Change output pattern to #.
+
+ * mips.c (embedded_pic_offset): Output RTL to initialize
+ embedded_pic_fnaddr_rtx.
+ (mips_finalize_pic): Delete.
+ * mips.h (mips_finalize_pic): Delete declaration.
+ (FINALIZE_PIC): Delete.
+ (INIT_EXPANDERS): Clear embedded_pic_fnaddr_rtx.
+ * mips.md (get_fnaddr): Add = to output contraint.
+
+ * sh.c (shift_amounts): Correct entry for shifts by 29.
+ * sh.md (sett): New pattern.
+ (movsi_i): Change source constraint for move to T reg to be 'z'.
+
+ * mips/ecoff.h (STARTFILE_SPEC): Define to null string.
+ * mips/elfl.h, mips/elfl64.h: Correct typo in comment.
+
+ * mips/elflorion.h, mips/elforion.h (MIPS_CPU_DEFAULT): Delete.
+ * mips.c (override_options): Delete #ifdef MIPS_CPU_DEFAULT code.
+ Add #ifdef MIPS_CPU_DEFAULT_STRING code before the first
+ mips_cpu_string test.
+
+Tue May 23 07:22:36 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * romp.c (hash_rtx): Avoid warning on int-to-pointer conversion.
+ (output_fpops): Cast args to bcopy to char *.
+
+ * cpplib.c (initialize_builtins): Add missing parm to timestamp call.
+
+ * Makefile.in (install-libobjc): Don't depend on libobjc.a.
+
+ * c-parse.in: Objc shift/reduce conflicts now 48.
+ (parm): Use setspecs/restore here.
+ (parmlist_or_identifiers): Not here.
+
+Mon May 22 19:30:30 1995 Doug Evans <dje@cygnus.com>
+
+ * h8300.md (movsf_h8300h): Add missing post-inc case to constraints.
+
+Mon May 22 14:38:36 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.c (rs6000_override_options): Do SUBTARGET_OVERRIDE_OPTIONS
+ here.
+ * rs6000.h (OVERRIDE_OPTIONS): Not here.
+
+ * rs6000.c (expand_block_move): Handle moves without string
+ instructions by generating a series of loads and stores.
+ (output_prolog): Support -mno-toc on V.4 and eabi systems.
+
+ * rs6000/sysv4.h (TARGET_SWITCHES): Add -mtoc and -mno-toc.
+ (SUBTARGET_OVERRIDE_OPTIONS): Add some warnings for incompatible
+ switches.
+ (TOC_SECTION_FUNCTION): Make -mno-toc like -mrelocatable in that
+ we don't put the minimal toc pointer in the global toc section.
+ (LINK_SPEC): Use -oformat to set link output format, not -m.
+
+ * rs6000/t-eabigas (MULTILIB_OPTIONS, MULTILIB_DIRNAMES): Build
+ libgcc.a variants with -mno-toc support.
+ * rs6000/t-ppcgas (MULTILIB_OPTIONS, MULTILIB_DIRNAMES): Ditto.
+
+Mon May 22 07:10:52 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cplus-dem.c (mystrstr): Replacement for strstr.
+
+ * configure: Split up long sed command.
+ * Makefile.in (SYMLINK): Deleted; unused.
+ (oldobjext): Deleted; no longer used.
+ (FLAGS_TO_PASS): Include objext and exeext.
+ (STAGESTUFF, protoize.o, unprotoize.o): Use $(objext), not .o.
+ (test_protoize_simple, compare{,3}, gnucompare{,3}): Likewise.
+ (STAGESTUFF, specs, gcc-cross, collect2): Add missing $(exeext).
+ (libgcc1.null, libgcc[12].a, stage[1-4]): Likewise.
+ (xgcc, cc1, cc1obj, enquire): Use $@ instead of filename for -o value.
+ (collect2, mips-tfile, mips-tdump, gen*): Likewise.
+ (bi-arity, bi-opcode, bi-opname, cccp, cppmain): Likewise.
+ (protoize, unprotoize, gen-protos, fix-header): Likewise.
+ (crtbegin.o, crtend.o): Don't use -o; move output to proper
+ filename (using objext) instead.
+ (BI_ALL, BC_ALL, bytecode): Deleted; unused.
+ (bi-*.o, cexp.o, stamp-{proto,fixinc}): Remove unneeded $(srcdir).
+ (getopt{,1}.o, SYSCALLS.c.X): Likewise.
+ (install-driver): New target.
+ (install-normal): Depend on it.
+ (install-common): Don't depend on xgcc.
+ (maketest): Deleted; no longer used.
+ (stage[1-4]): Use name collect-ld, not real-ld.
+ (risky-stage[1-4]): Use stage[1-4] as dependencies; don't copy.
+ * alpha/config-nt.bat, i386/config-nt.bat: Make {,h,t}config.h
+ and tm.h by writing a single #include line.
+ Update way specs.h and options.h are written.
+ * alpha/config-nt.sed, i386/config-nt.sed: Set new variables
+ into Makefile.
+ Build winnt.obj.
+ Edit CCCP definition.
+ * alpha/x-winnt, i386/x-winnt (oldobjext): Deleted.
+ Add rules for .c.obj, .adb.obj, and .ads.obj.
+ (LIB2FUNCS_EXTRA, spawnv.o): New rules.
+ * i386/x-winnt (objext): Now .obj, not .o.
+
+ * gcc.c (HAVE_OBJECT_SUFFIX): New macro.
+ (process_command): Convert x.o to x.foo for OBJECT_SUFFIX of ".foo".
+ (do_spec_1): Avoid shadow variable "i" and always use for loop var.
+
+ * c-decl.c (finish_decl_top_level): Removed; no longer used.
+ * objc-act.c: Numerous formatting changes.
+ (NULLT): Deleted; all uses changed to NULL_TREE.
+ (get_{static,object}_reference, objc_add_static_instance):
+ Use push_obstacks instead of saving obstacks manually.
+ (build_{selector,class}_reference_decl): Likewise.
+ (build_objc_string_decl, build_protocol_reference): Likewise.
+ (comp_{method,proto}_with_proto): Likewise.
+ (create_builtin_decl, synth_module_prologue): Set DECL_ARTIFICIAL
+ for internal objects.
+ (build_{selector,class}_reference_decl, add_objc_decls): Likewise.
+ (generate_objc_symtab_decl, build_module_descriptor): Likewise.
+ (build_protocol_reference): Likewise.
+ (build_objc_string_decl, synch_forward_declarations): Likewise.
+ Delete call to end_temporary_allocation.
+ (generate_static_references, generate_strings): Likewise.
+ (build_selector_translation_table, generate_category): Likewise.
+ (generate_{ivars,protocol}_list, build_protocol_reference): Likewise.
+ (build_objc_string_object): If next_runtime, put everything in
+ permanent obstack.
+ (objc_add_static_instance): Use build_decl instead of start_decl
+ and finish_decl_top_level.
+ (build_{class_reference,objc_string}_decl): Clear DECL_CONTEXT.
+ (start_class): Exit with FATAL_EXIT_CODE, not 1.
+ (add_objc_decls): Don't set DECL_IN_SYSTEM_HEADER.
+
+ * tree.c (valid_machine_attribute): Handle attribute on
+ pointer-to-function types.
+
+Sun May 21 17:16:37 1995 J. T. Conklin <jtc@cygnus.com>
+
+ * mips/netbsd.h (HAVE_STRERROR): Remove.
+ * mips/xm-netbsd.h: New file.
+ * mips/t-mips-netbsd: Deleted.
+ * configure (mips-dec-netbsd): Use xm-netbsd.h and t-libc-ok.
+
+Sun May 21 17:16:37 1995 Arne H. Juul (arnej@pvv.unit.no)
+
+ * mips/netbsd.h: Use __start as entry point. Ifdef some
+ paths on CROSS_COMPILE.
+
+Sun May 21 08:39:26 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-parse.in (datadef, fndef, ivar_decl, mydecls):
+ Restore declspec_stack since setspecs is used.
+ (parmlist_or_identifiers): Use setspecs before parsing parms
+ and restore after parsing parms.
+
+Sun May 21 01:04:52 1995 Jeffrey A. Law <law@snake.cs.utah.edu>
+
+ * pa.c (hppa_encode_label): New variable "permanent" to
+ where/how memory is allocated for the new label. All
+ callers changed.
+
+Sat May 20 16:53:30 1995 Mike Meissner <meissner@cygnus.com>
+
+ * rs6000.md (insv, extz): Fail if the structure is QI or HI reg to
+ avoid paradoxical subreg's being created in RTL phase, which uses
+ SImode to load from memory if structure is later moved to stack.
+
+Sat May 20 06:44:59 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k.md (udivmodhi4): Output "divu" instead of "divs".
+
+Sat May 20 06:11:32 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload.c (push_reload): Don't reload inside a SUBREG
+ when SUBREG_WORD is nonzero.
+
+ * c-decl.c (shadow_tag_warned): Don't warn about useless keyword
+ if in system header file.
+
+ * tree.c (simple_cst_equal): Don't look at language-specific
+ nodes since we don't know what's in them.
+
+ * cpperror.c: #include config.h before any other .h file.
+ * collect2.c: Likewise.
+
+ * i386/config-nt.bat: Add missing ^M on two lines.
+ Add case for Fortran; fix typo in Ada case.
+ * alpha/config-nt.bat: Add case for Fortran; fix typo in Ada case.
+
+ * m68k/t-next (LIBGCC1, CROSS_LIBGCC1): Make not, not "libgcc1.null".
+ (OTHER_FIXINCLUDES_DIRS, LIMITS_H_TEST): Delete from here.
+ * m68k/x-next (OTHER_FIXINCLUDES_DIR, LIMITS_H_TEST): Move to here.
+
+Fri May 19 19:30:20 1995 Stan Cox (gcc@dg-rtp.dg.com)
+
+ * crtstuff.c: Added reference to INIT_SECTION_PREAMBLE for systems that
+ do something which must be undone prior to __do_global_ctors.
+
+Fri May 19 19:27:08 1995 Alan Modra <alan@SPRI.Levels.UniSA.Edu.Au>
+
+ * i386/linux-aout.h (CPP_SPEC): Add defines for -fPIC.
+ * i386/linux-oldld.h (CPP_SPEC): Likewise.
+
+Fri May 19 17:46:28 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * collect2.c (strstr): Deleted.
+ * cplus-dem.c (strstr): Define ifndef POSIX.
+
+Fri May 19 11:16:51 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * cpplib.c (collect_expansion): Don't escape '@' inside string.
+
+Fri May 19 06:59:21 1995 Pat Rankin (rankin@eql.caltech.edu)
+
+ * vmsconfig.com (process_objc_lib, configure_makefile): New routines.
+ (bc_all.list, ./vax.md, objc-objs.opt, objc-hdrs.list): New files
+ created at config time.
+ (bc_all.opt, ./md.): No longer created.
+ * make-cc1.com: Handle revised filenames from vmsconfig.com;
+ (DO_OBJCLIB): New variable, plus code to compile objc/*.{c,m}.
+
+Wed May 17 16:15:31 1995 Torbjorn Granlund <tege@cygnus.com>
+
+ * i960.c (i960_output_ldconst): New code for XFmode.
+ Also, move SFmode code to immediately after DFmode code.
+ (S_MODES, D_MODES): Handle XFmode.
+ (XF_MODES): Was TF_MODES, handle XFmode instead of TFmode.
+ (hard_regno_mode_ok): Replace TFmode with XFmode.
+ (i960_output_long_double): New function.
+
+ * i960.h (DATA_ALIGNMENT): Define.
+ (ROUND_TYPE_ALIGN): Align XFmode scalars at 128 bit boundaries.
+ (ROUND_TYPE_SIZE): Round up the size of XFmode objects to 128 bits.
+ (CONST_DOUBLE_OK_FOR_LETTER_P): Use CONST0_RTX and CONST1_RTX
+ so that all FP modes are recognized.
+ (ASM_OUTPUT_LONG_DOUBLE): Define.
+
+ * i960.md: Change all TFmode patterns to have XFmode.
+ (movxf recognizer, frame version): Use movt, ldt, and stt.
+ (movxf recognizer, non-frame version): Delete.
+ (extenddfxf2): Delete * before f constraint.
+ (extendsfxf2): Likewise.
+
+Wed May 17 17:53:35 1995 Jim Wilson <wilson@mole.gnu.ai.mit.edu>
+
+ * unroll.c (unroll_loop): Increment copy_start_luid if copy_start
+ is loop_start.
+
+Wed May 17 17:44:57 1995 Lee Iverson <leei@Canada.AI.SRI.COM>
+
+ * fold-const.c (invert_truthvalue, case CLEANUP_POINT_EXPR): New case.
+
+Tue May 16 18:51:16 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000/rs6000.h (TARGET_SWITCHES): Add -mstring to enable string
+ instructions, and -mno-string to disable them.
+ (MOVE_MAX): Don't test TARGET_MULTIPLE anymore.
+ (MAX_MOVE_MAX): Set to 8, not 16.
+ (expand_block_move): Add declaration.
+
+ * rs6000/rs6000.c (expand_block_move): New function to expand
+ block moves when -mstring is used.
+
+ * rs6000/rs6000.md (movti): Use TARGET_STRING, not TARGET_MULTIPLE.
+ (load_multiple, store_multiple): Ditto.
+ (string insns): Add 8, 6, 4, 2, and 1 register variants for using
+ the native string instructions if -mstring.
+
+ * rs6000/sysv4.h (CPP_SPEC): If little endian, define
+ _LITTLE_ENDIAN and set littleendian assertion. If big endian,
+ define _BIG_ENDIAN and set bigendian assertion.
+ * rs6000/sysv4le.h (CPP_SPEC): Copy from sysv4.h, and change
+ default to little endian.
+
+ * rs6000/rs6000.c (override_options): Check for -mmultiple and
+ -mstring on little endian systems here.
+ * rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Don't do the check
+ here.
+
+Tue May 16 18:36:41 1995 Douglas Rupp (drupp@cs.washington.edu)
+
+ * alpha.c: Changed WINNT to _WIN32.
+ * alpha/config-nt.bat, i386/config-nt.bat: Added commands to
+ generate specs.h and options.h.
+ * i386/config-nt.sed: Changed link32 to link.
+ * winnt/ld.c (main): Removed call to free.
+ * configure.bat: Added line to echo usage on invalid input.
+ * gcc.c (fix_argv): Removed call to free.
+ * gcc.c, getpwd.c, protoize.c, sdbout.c: Changed WINNT to _WIN32.
+ * toplev.c: Likewise.
+
+Tue May 16 18:04:47 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * toplev.c (pfatal_with_name, fatal_io_error, vfatal):
+ Use FATAL_EXIT_CODE instead of magic number.
+ * cccp.c, cpplib.c, cpplib.h: Use FATAL_EXIT_CODE instead
+ of FAILURE_EXIT_CODE.
+ * fix-header.c, gen-protos.c: Likewise.
+ * cpperror.c, cppmain.c: Likewise.
+ Include config.h #ifndef EMACS.
+ * xm-alpha.h, xm-rs6000.h, xm-vms.h (FAILURE_EXIT_CODE): Remove.
+
+Tue May 16 17:46:57 1995 Adam Fedor <fedor@colorado.edu>
+
+ * objc/archive.c (__objc_write_class): Write class version.
+ (__objc_write_selector, objc_{write,read}_selector): Handle null
+ selector.
+
+ * objc/sarray.h (struct sarray): Make capacity size_t.
+ * objc/sarray.c (sarray_realloc): Make array index variables size_t.
+
+Tue May 16 06:59:08 1995 Paul Eggert <eggert@twinsun.com>
+
+ * dsp16xx.c (print_operand_address): Fix misspellings in messages.
+ * i370/mvs.h (FUNCTION_PROFILER): Likewise.
+ * mips-tdump.c (type_to_string): Likewise.
+ * print-tree.c (print_node): Likewise.
+
+ * protoize.c (edit_fn_definition): Fix mispelled local `have_flotsam'.
+
+ * objc/sendmsg.c (__objc_init_install_dtable): Fix misspelling
+ in name of local label `already_initialized'.
+
+ * winnt/winnt.h (STDC_VALUE): Was misspelled.
+
+ * m68k/ccur-GAS.h (FUNCTION_BOUNDARY): Was misspelled.
+
+ * 1750a.h (DEFAULT_PCC_STRUCT_RETURN): Was misspelled.
+
+Mon May 15 23:41:25 1995 Jeffrey A. Law <law@snake.cs.utah.edu>
+
+ * pa.h (ASM_OUTPUT_EXTERNAL_LIBCALL): Make sure to encode section
+ info for all libcalls.
+
+Mon May 15 20:58:00 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * collect2.c (strstr): Define ifndef POSIX.
+
+ * defaults.h (SUPPORTS_WEAK): Provide default.
+ * aoutos.h, sparc/sunos4.h: Don't support weak symbols.
+ * netbsd.h, svr4.h, i386/freebsd.h, i386/osfrose.h,
+ m88k/m88k.h: Define ASM_WEAKEN_LABEL instead of WEAK_ASM_OP.
+ * c-pragma.h: Check ASM_WEAKEN_LABEL instead of WEAK_ASM_OP.
+ HANDLE_PRAGMA_WEAK is never defined in a tm.h file.
+ * c-decl.c (duplicate_decls): Propagate DECL_WEAK.
+ * tree.h (DECL_WEAK): New macro.
+ (tree_decl): Add weak_flag.
+ * varasm.c (assemble_start_function): Declare the symbol weak if
+ appropriate.
+ (assemble_variable): Ditto.
+ (assemble_alias): Ditto. Mark the decl as written.
+ (declare_weak): Check for weak declaration after definition.
+ Set DECL_WEAK.
+ (weak_finish): Use ASM_WEAKEN_LABEL.
+ * libgcc2.c: The C++ free-store management functions are weak
+ aliases on targets that always support them.
+
+Mon May 15 19:01:43 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * configure (out_object_file): New variable; put value in Makefile.
+ * Makefile.in (out_object_file): Use in place of aux-output.o.
+
+ * fold-const.c (const_binop): Don't pass OVERFLOW to force_fit_type
+ if type is unsigned.
+
+Mon May 15 18:48:26 1995 Paul Eggert <eggert@twinsun.com>
+
+ * install.sh (transformbasename): Fix misspelling.
+
+ * tahoe.h (CHECK_FLOAT_VALUE): Fix misspelling of OVERFLOW parameter.
+
+ * i386.h (VALID_MACHINE_{DECL,TYPE_ATTRIBUTE): Fix typo.
+
+ * fx80.h (CHECK_FLOAT_VALUE): Fix misspelled use of parameter.
+
+ * a29k.c (spec_reg_operand): Fix misspelling of `default:'.
+
+Mon May 15 18:36:41 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k.md (b{eq,ne,ge,lt}0_di): Fixed for non-MOTOROLA syntax.
+ * m68k/xm-mot3300.h (alloca): Extern decl added for non-GNU compiler.
+
+Mon May 15 13:14:29 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * cppexp.c (cpp_reader): Test for '#' (start of assertion) *after*
+ skipping hspace, not before.
+
+Mon May 15 08:13:54 1995 Pat Rankin (rankin@eql.caltech.edu)
+
+ * vmsconfig.com: Construct options.h and specs.h to #include
+ all "*/lang-{options|specs}.h" files found.
+
+Sun May 14 21:32:49 1995 Doug Evans <dje@cygnus.com>
+
+ * alpha/alpha.md (movsicc, case NE): Don't generate unrecognizable
+ insn.
+ (movdicc, case NE): Likewise.
+
+Sun May 14 15:44:54 1995 Jim Wilson <wilson@mole.gnu.ai.mit.edu>
+
+ * unroll.c (unroll_loop): Make local_regno have size
+ max_reg_before_loop. Don't do local register optimization if
+ copy_end has no INSN_LUID.
+
+Sun May 14 10:38:23 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * objc-act.c (start_method_def): Mark _self as possibly unused.
+
+ * configure: Create specs.h and options.h from */lang-specs.h
+ and */lang-options.h.
+ Set lang_specs_files and lang_options_file variables in Makefile.
+ * Makefile.in (lang_{specs,options}_files): New variables.
+ (gcc.o): Depends on $(lang_specs_files).
+ (toplev.o): Depends on $(lang_options_file); merge two dep lists.
+ (distclean): Remove spes.h and options.
+ * gcc.c (default_compilers): Remove entries for Ada, C++, Chill,
+ and Fortran; #include specs.h instead.
+ * toplev.c (lang_options): Remove entries for Ada, C++, and Fortran;
+ include options.h instead.
+
+Sat May 13 23:11:21 1995 DJ Delorie <dj@delorie.com>
+
+ * configure (i[345]86-go32-msdos, i[345]86-*-go32): New targets.
+
+Sat May 13 10:58:38 1995 Jim Wilson <wilson@cygnus.com>
+
+ * loop.c (record_giv): When computing replaceable, use
+ back_branch_in_range_p instead of looking for branches to named
+ labels.
+ * loop.h (back_branch_in_range_p): Declare.
+ * unroll.c (back_branch_in_range_p): No longer static.
+
+Sat May 13 06:47:11 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (simplify_shift_count, case LSHIFTRT): Don't merge
+ shifts of different modes if first is any right shift.
+
+Sat May 13 05:39:09 1995 Richard Earnshaw (rearnsha@armltd.co.uk)
+
+ * configure (arm-semi-aout): New configuration.
+ * config.sub: Add support for semi-hosted ARM.
+ * arm/t-semi, arm/semi.h: New files.
+
+Fri May 12 21:51:22 1995 Doug Evans <dje@cygnus.com>
+
+ * flow.c (find_basic_blocks): Only perform n_basic_blocks sanity
+ check on first pass, and on second pass ensure it has the correct
+ value.
+
+Fri May 12 19:23:11 1995 Jim Wilson <wilson@cygnus.com>
+
+ * c-typeck.c (build_binary_op): Warn when ~unsigned is compared
+ against unsigned, and type promotions result in an unexpected
+ answer.
+
+Fri May 12 19:10:21 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * configure (*-*-gnu*): Always use ELF; set tm_file=${cpu_type}/gnu.h.
+ * config/i386/gnu.h: Contents replaced with old i386/gnuelf.h.
+ * config/i386/gnuelf.h: File removed.
+
+Fri May 12 17:29:57 1995 Ken Raeburn (raeburn@cygnus.com)
+
+ * m68k/lb1sf68.asm (__IMMEDIATE_PREFIX__): Default to #.
+ (IMM): New macro.
+ (all code): Use IMM macro instead of hardcoding # for immediate
+ operands.
+
+Fri May 12 16:52:10 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k.c (output_scc_di): New function.
+ (extend_operator) : Allow DImode target.
+ * m68k.h (HARD_REGNO_MODE_OK): Don't allow d7/a0 as DImode reg pair.
+ * m68k.md (tstdi, cmpdi, addsi_lshrsi_31, ashldi_extsi): New patterns.
+ (extendqidi2, extendhidi2, extendsidi2): Allow "general_operand"
+ instead of "register_operand" 0.
+ (adddid_sexthishl32, subdid_sexthishl32, subdi_dishl32): Likewise.
+ (adddi_dilshr32): Operand 0 constraint changed from "ro" to "do";
+ Code generation fixed.
+ (adddi_mem, subdi_mem): Fixed for "<" and ">" operand 0.
+ (adddi3, subdi3): Operand 2 constraint changed from "ao" to "*ao"
+ (ashldi_sexthi, ashrdi_const32): Allow only "register_operand"
+ instead of "general_operand" 0.
+ (ash[lr]di_const, ash[lr]di3): Allow also 8 and 16 as shift count.
+ (subreg1ashrdi_const32): Pattern deleted.
+ (subreghi1ashrdi_const32, subregsi1ashrdi_const32): New pattern.
+ (lshrsi_31): New implementation.
+ (scc0_di, scc_di, beq0_di, bne0_di, bge0_di, blt0_di): New patterns.
+
+Fri May 12 16:50:49 1995 Jeffrey A. Law <law@mole.gnu.ai.mit.edu>
+
+ * pa.md (bb patterns): Fix bugs in length computation exposed by
+ recent branch shortening and genattrtab changes.
+
+Fri May 12 16:22:27 1995 Ken Raeburn <raeburn@cygnus.com>
+
+ * cccp.c (enum node_type): Add T_IMMEDIATE_PREFIX_TYPE.
+ (special_symbol): Handle it; emit value of IMMEDIATE_PREFIX.
+ (IMMEDIATE_PREFIX): Default to empty string.
+ (initialize_builtins): Install __IMMEDIATE_PREFIX__ builtin,
+ parallel to __REGISTER_PREFIX__.
+
+Fri May 12 14:40:03 1995 Pat Rankin (rankin@eql.caltech.edu)
+
+ * cccp.c: #if VMS, don't define `stat' macro to be VMS_stat.
+ Compare enums explicitly to 0 to work around VAX C bug.
+ (do_include): Cast alloca's value.
+
+ * make-cc1.com (bc_loop): Process comma-separated list rather
+ than space-separated one; restore .h suffix stripped by vmsconfig;
+ (loop1): More robust handling of directory prefix on file names.
+ * vmsconfig.com (TPU makefile.in): Reorganize and reformat code.
+ Make generated .opt files have more consistent format (all comma
+ separated, excess whitespace eliminated);
+ (additional_compiler): New routine.
+ (process_makefile): Use it to handle cc1plus via cp/Make-lang.in.
+
+Fri May 12 13:35:07 1995 Doug Evans <dje@cygnus.com>
+
+ * arm.h: Replace ARM_REG_PREFIX with REGISTER_PREFIX.
+ Replace ARM_COMMENT_CHAR with ASM_COMMENT_START.
+ (REGISTER_PREFIX): Define.
+ (USER_LABEL_PREFIX, LOCAL_LABEL_PREFIX): Define.
+ (SECONDARY_OUTPUT_RELOAD_CLASS): Handle DFmodes only if
+ TARGET_HARD_FLOAT.
+ (PREDICATE_CODES): Add soft_df_operand.
+ * arm.c: Replace ARM_REG_PREFIX with REGISTER_PREFIX.
+ Replace ARM_COMMENT_CHAR with ASM_COMMENT_START.
+ (arm_asm_output_label): Use USER_LABEL_PREFIX.
+ (soft_df_operand): New function.
+ * arm.md (movsicc): New pattern.
+ (movsfcc, movdfcc, *movsicc_insn, *movsfcc_hard_insn): Likewise.
+ (*movsfcc_soft_insn, *movdfcc_insn): Likewise.
+ (*movdf_soft_insn): Rewrite.
+ (movsi matcher): Fix typo in type attribute.
+
+Fri May 12 10:25:40 1995 Michael Meissner (meissner@cygnus.com)
+
+ * i386.h (TARGET_RTD): Use MASK_RTD, not MASK_REGPARM.
+ (TARGET_SWITCHES): Add -m{,no-}align-double switch.
+ (TARGET_OPTIONS): Add -mregparm= switch to set number of registers
+ to use for passing arguments. Add -malign-loops= switch to set
+ the alignment for loops. Add -malign-jumps= switch to set the
+ alignment for code that is jumped to. Add -malign-functions=
+ switch to set the initial alignment of functions.
+ (TARGET_REGPARM): Delete, in favor of -mregparm=
+ (TARGET_SWITCHES): Delete -mregparm, add -mdebug-arg switches.
+ (RETURN_POPS_ARGS): Call i386_return_pops_args to do the real work.
+ (VALID_MACHINE_DECL_ATTRIBUTE): Define as function call.
+ (VALID_MACHINE_TYPE_ATTRIBUTE): Define as function call.
+ (COMP_TYPE_ATTRIBUTES): Define as function call.
+ (REGPARM_MAX): Maximum number of regs to use for passing arguments.
+ (CUMULATIVE_ARGS): Make this a structure, not an int.
+ (INIT_CUMULATIVE_ARGS, FUNCTION_ARG{,_ADVANCE}): Call function.
+ (FUNCTION_ARG_PARTIAL_NREGS): Likewise.
+ (MAX_CODE_ALIGN): Maximum value to align loops/jumps to.
+ (BIGGEST_ALIGNMENT): Return 64 if -malign-double, 32 otherwise.
+ (ASM_OUTPUT_ALIGN_CODE): Use value of -malign-jumps= switch.
+ (ASM_OUTPUT_LOOP_ALIGN): Use value of -malign-loops= switch.
+ (toplevel): Declare all new functions and external variables added
+ in i386.c.
+
+ * i386.c (i386_regparm_string, i386_regparm): New variables
+ for -mregparm= switch to set the number of registers to use for
+ passing arguments.
+ (i386_align_loops_string, i386_align_loops): New variables for
+ -malign-loops= switch to set alignment to use for loops.
+ (i386_align_jumps_string, i386_align_jumps): New variables for
+ -malign-jumps= switch to set alignment to use for labels that are
+ jumped to.
+ (override_options): Support new switches.
+ (i386_valid_decl_attribute_p): New function to validate decl
+ specific attributes. Presently returns 0.
+ (i386_valid_type_attribute_p): New function to validate type
+ specific attributes. Recognize "stdcall", which says function
+ with fixed numbers of arguments is responsible for popping stack,
+ "cdecl", which says to use the normal C calling sequence, even if
+ -mrtd is used, and "regparm", which specifies the number of
+ registers to use for passing arguments.
+ (i386_comp_type_attributes): New function, to validate whether
+ attributes are compatible.
+ (i386_return_pops_args): New function, to return whether or not
+ the function pops its argument list or not, taking into account
+ -mrtd, and the stdcall/cdecl attributes.
+ (init_cumulative_args): Rewrite as a function, taking variable
+ argument functions, and regparm support into account.
+ (function_arg{,_advance,_partial_nreg}): Likewise.
+ (print_operand): Support %J, to print appropriate jump insn.
+
+ * i386.md (decrement_and_branch_until_zero): Define pattern,
+ so that loops that count down to zero, don't have an unneeded
+ compare after the decrement. Add a general insn recognizer for
+ add to a value and compare against zero.
+
+ * i386/go32.h, i386/winnt.h (VALID_MACHINE_DECL_ATTRIBUTE):
+ Delete, code folded into the mainline.
+ (RETURN_POPS_ARGS): Likewise.
+
+ * i386/winnt.h (ENCODE_SECTION_INFO): The stdcall attribute is now
+ stored on the type field, rather than the decl.
+
+ * i386/gas.h (ASM_OUTPUT_ALIGN_CODE, ASM_OUTPUT_LOOP_ALIGN): Use
+ i386_align_{loops,jumps} variables to do alignment.
+ * i386/osfrose.h, i386/svr3dbx.h: Likewise.
+
+Fri May 12 12:48:19 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * stor-layout.c (layout_type, case ARRAY_TYPE): Compute length using
+ MAX of length and zero if sizetype signed and neither bound constant.
+
+ * i386/gnuelf.h, i386/linux-oldld.h, i386/lynx-ng.h, i386/v3gas.h:
+ Use <...> in #include instead of "...".
+ * m68k/lynx-ng.h, sparc/lynx-ng.h: Likewise.
+
+ * c-parse.in (myparm): Handle attributes.
+ * objc-act.c (unused_list): New variable.
+ (build_tmp_function_decl): Call push_parm_decl with new format.
+ (start_class): Initialize unused_list.
+ (start_method_def): Call push_parm_decl with new format and
+ mark _cmp as possibly unused.
+
+ * combine.c (simplify_shift_const): Don't change SHIFT_MODE
+ for LSHIFTRT either.
+
+ * unroll.c (unroll_loop): Don't move reg if used in copy_end and
+ that is a JUMP_INSN.
+
+Fri May 12 12:31:37 1995 Doug Evans <dje@cygnus.com>
+
+ * arm/lib1funcs.asm: New file.
+
+Fri May 12 11:52:03 1995 Kung Hsu <kung@cygnus.com>
+
+ * configure (a29k-*-vxworks*): New target.
+ * config.sub (vxworks29k): New alias.
+ * a29k/t-vx29k: New file.
+ * a29k/vx29k.h: New file.
+
+Fri May 12 11:17:28 1995 Jim Wilson <wilson@mole.gnu.ai.mit.edu>
+
+ * loop.c (check_dbra_loop): When reversing loop when
+ no_use_except_counting is false, there must be only one biv.
+
+Fri May 12 07:10:00 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * unroll.c (unroll_loop): Only use local_regno for pseudos.
+
+ * genattrtab.c (write_test_expr, case MATCH_DUP): Use operands[N]
+ instead of JUMP_LABEL (which may not be set).
+ (walk_attr_value, case MATCH_DUP): Set must_extract.
+
+ * c-parse.in: Adjust number of shift/reduce conflicts.
+ (parm): Support attributes.
+ * c-decl.c (push_parm_decl): Pass any attributes to decl_attributes.
+
+Fri May 12 00:36:26 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * cpplib.c (skip_quoted_string): Removed - no longer needed.
+ (skip_if_group): Use cpp_get_token instead of skip_quoted_string.
+
+ * cpplib.h (struct cpp_reader): Remove start_line field.
+ Add multiline_string_line field.
+
+ * cpplib.c (cpp_error_with_line, cpp_warning_with_line,
+ cpp_pedwarn_with_line): Take extra column number parameter.
+ (macroexpand, cpp_get_token): Fix reporting of unterminated strings.
+ (line_for_error): Removed - no longer needed.
+
+Fri May 12 02:21:34 1995 Jim Wilson <wilson@cygnus.com>
+
+ * mips/svr4-t.h (MD_STARTFILE_PREFIX, MD_EXEC_PREFIX,
+ STARTFILE_SPEC, LINK_SPEC): Define.
+ * configure (mips-tandem-sysv4): Use t-mips not t-svr4.
+
+Thu May 11 19:18:54 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * cpplib.c (line_for_error): Make it work; add extra parameter.
+ (skip_quoted_string, cpp_get_token): Update calls to line_for_error.
+ (macroexpand): Remember initial line so we can report it if the
+ call is unterminated. Also, simplify error logic slightly.
+ (do_include): Cast alloca return value, to avoid pcc warning.
+
+ * cppexp.c (parse_number): Cleanup some Cygnus crud for MPW.
+
+Thu May 11 21:35:23 1995 Torbjorn Granlund <tege@cygnus.com>
+
+ From Moshier:
+ * i960.c (i960_output_ldconst): Let split_double handle DImode.
+ (i960_print_operand): Use REAL_VALUE_TO_DECIMAL for decimal strings.
+ (i960_output_double, i960_output_float): Likewise; also change arg
+ VALUE from `double' to `REAL_VALUE_TYPE'.
+
+Thu May 11 21:09:25 1995 Per Bothner (bothner@wombat.gnu.ai.mit.edu)
+
+ * cpperror.c (cpp_print_containing_files): Remove some
+ Cygnus-local stuff.
+
+Thu May 11 21:06:47 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * gcc.c (link_command_spec): Make -nostdlib no longer imply
+ -nostartfiles.
+
+Thu May 11 18:48:57 1995 Paul Eggert <eggert@twinsun.com>
+
+ * c-common.c (convert_and_check): Don't diagnose overflow in constant
+ expression merely because conversion overflowed.
+
+Thu May 11 18:43:59 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-decl.c (grokdeclarator): Use PARM_FLAG to see if should
+ make PARM_DECL.
+ * c-parse.in (nested_function, notype_nested_function):
+ Allow old-style arg definitions (use xdecls).
+
+ * c-decl.c (finish_struct): Properly update DECL_PACKED.
+
+Thu May 11 15:24:15 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * fold-const.c (fold): Also fold CLEANUP_POINT_EXPRs into
+ TRUTH_*_EXPRs and into the first operand.
+ (operand_equal_for_comparison_p): Also make sure the second operand
+ is integral.
+
+Thu May 11 14:22:03 1995 Ted Lemon <mellon@toccata.fugue.com>
+
+ * config/mips/netbsd.h: New file.
+ * config/mips/t-mips-netbsd: New file.
+ * config/mips/x-netbsd: New file.
+
+ * configure (mips-dec-netbsd*): Add entry.
+
+ * mips.h (LOCAL_LABEL_PREFIX, USER_LABEL_PREFIX): Define.
+ (PUT_SDB_BLOCK_START, PUT_SDB_BLOCK_END, ASM_OUTPUT_LABEL_REF,
+ ASM_OUTPUT_INTERNAL_LABEL, ASM_GENERATE_INTERNAL_LABEL,
+ ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Use them.
+
+ * mips.c (mips_output_lineno): Use LOCAL_LABEL_PREFIX.
+
+Thu May 11 14:22:03 1995 Stan Cox (gcc@dg-rtp.dg.com)
+
+ * dwarfout.c (output_decl): Don't output DIE for struct or union type
+ with no name or with ERROR_MARK for the fields.
+
+Thu May 11 06:36:34 1995 Michael Meissner (meissner@cygnus.com)
+
+ * flow.c (mark_used_regs): If a SUBREG does not have a REG in the
+ SUBREG_REG position, recursively call mark_used_regs, instead of
+ segfaulting.
+
+Thu May 11 06:44:34 1995 Pat Rankin (rankin@eql.caltech.edu)
+
+ * expr.c (do_jump, case EQ_EXPR, NE_EXPR): Fix typo for complex.
+
+Wed May 10 12:34:46 1995 Michael Meissner <meissner@cygnus.com>
+
+ * configure: Add support for the little endian variant of the
+ PowerPC System V.4 and Eabi targets. If the GNU assembler was not
+ specified, don't build libgcc.a variants on the PowerPC systems
+ that use -mrelocatable, -mlittle, and -mbig.
+
+ * genmultilib: For MULTILIB_MATCHES arguments, map question marks
+ into equal signs after spliting the left and right side of
+ equivalent options, to all support for options like: -mcpu=403.
+
+ * rs6000/rs6000.md (rs6000_immed_double_const): New function that
+ is like immed_double_const, except that it reverses the two words
+ in the constant if the target is little endian.
+
+ * rs6000/rs6000.md (floatsidf2): Use rs6000_immed_double_const,
+ not immed_double_const.
+ (floatunssidf2): Ditto.
+
+ * rs6000/rs6000.h: Add declarations for all functions in rs6000.c.
+
+ * rs6000/sysv4.h (TARGET_SWITCHES): Add -mlittle, -mlittle-endian,
+ -mbig, and -mbig-endian for bi-endian support.
+ (ASM_SPEC): Pass -mlittle/-mbig to the assembler if it was passed
+ to us.
+ (LINK_SPEC): If explicit little or big endian support was
+ requested, tell the GNU linker to use the appropriate target
+ format.
+
+ * rs6000/t-eabi (MULTILIB_*): Build libgcc.a variants for software
+ floating point. Remove mrelocatable libgcc.a variant.
+
+ * rs6000/t-eabigas: New file, cloned from t-eabi. Build
+ mrelocatable libgcc.a variant in addition to the other variants.
+
+ * rs6000/t-ppc: New file, for PowerPC System V.4 support without
+ the GNU assembler.
+
+ * rs6000/t-ppcgas: New file, for PowerPC System V.4 support with
+ the GNU assembler.
+
+ * rs6000/eabile.h: New file, little endian eabi config file.
+ * rs6000/sysv4le.h: New file, little endian V.4 config file.
+
+Wed May 10 14:22:28 1995 Doug Evans <dje@cygnus.com>
+
+ * libgcc1-test.c (main_without__main): Renamed from `main'.
+ * Makefile.in (libgcc1-test): Tell the user to ignore warnings.
+
+ * configure: Support --enable-foo, --disable-foo.
+
+Wed May 10 10:34:00 1995 Lee Iverson <leei@Canada.AI.SRI.COM>
+
+ * unroll.c: Add declarations of static functions.
+ (unroll_loop): Renumber regs local to loop for each unrolled iteration.
+
+Wed May 10 08:27:03 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.c (alpha_set_emit_const): Cleanups to work properly
+ when run on 32-bit host.
+
+ * configure: Instead of symlinking tm.h and {h,t,}config.h,
+ make them files that #include the proper file; pass to Makefile.
+ Pass out_file and md_file to Makefile instead of making symlinks.
+ * Makefile.in (out_file, md_file, tm_file, {build,host}_xm_file):
+ New symbols, to be overridden by configure.
+ (insn-*): Use $(md_file), not md.
+ (aux-output.o): Use $(out_file), not aux-output.c.
+ ($(MD_FILE)): Rework to use new conventions.
+ (gen*.o, bi-*.o): Depend on $(build_xm_file), not hconfig.h.
+ (scan.o, fix-header.o, scan-decls.o): Likewise.
+ (distclean): Adjust files removed for new convention.
+
+Tue May 9 19:26:42 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * rs6000/rs6000.h (LIBGCC_SPEC): Do link with libgcc when -shared.
+
+ * Makefile.in (STAGESTUFF): Add underscore.c.
+ (underscore.c): Rename temporary files to begin with 'tmp-' so that
+ they will be removed by 'make mostlyclean'.
+
+Tue May 9 19:19:55 1995 Mike Stump <mrs@cygnus.com>
+
+ * toplev.c (lang_options): Add new flag -ffor-scope.
+
+Tue May 9 19:11:47 1995 Lee Iverson (leei@ai.sri.com)
+
+ * objc/init.c (objc_init_statics): Fix missing part of last change.
+
+Tue May 9 18:25:34 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * i386/gnu.h, i386/linux.h, i386/linux-aout.h, i386/lynx.h:
+ Use <...> in #include instead of "..." to avoid recursion.
+ * i386/netbsd.h, i386/xm-gnu.h, i386/xm-linux.h: Likewise.
+ * i386/xm-lynx.h, i386/xm-freebsd.h, i386/xm-netbsd.h: Likewise.
+ * m68k/lynx.h, m68k/netbsd.h, m68k/xm-lynx.h: Likewise.
+ * m68k/xm-netbsd.h, mips/gnu.h, ns32k/netbsd.h: Likewise.
+ * ns32k/xm-netbsd.h, rs6000/lynx.h, rs6000/xm-lynx.h: Likewise.
+ * sparc/lynx.h, sparc/netbsd.h, sparc/xm-lynx.h: Likewise.
+ * sparc/xm-netbsd.h, vax/netbsd.h, vax/xm-netbsd.h: Likewise.
+
+Tue May 9 15:52:05 1995 Michael Meissner <meissner@cygnus.com>
+
+ * config.sub: Recognize powerpcle as the little endian varient of
+ the PowerPC. Recgonize ppc as a PowerPC variant, and ppcle as a
+ powerpcle variant. Convert pentium into i586, not i486. Add p5
+ alias for i586. Map new x86 variants p6, k5, nexgen into i586
+ temporarily.
+
+Tue May 9 15:43:27 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * rs6000/rs6000.h (LINK_SPEC, LIB_SPEC): Don't mess with libg
+ if -shared.
+ * rs6000/aix41ppc.h (LINK_SPEC): Ditto.
+
+ * rs6000/powerpc.h: Don't emit .extern directives.
+
+Tue May 9 14:08:09 1995 Jim Wilson <wilson@cygnus.com>
+
+ * sh/lib1funcs.asm (__ashrsi3, __ashlsi3, __lshrsi3): Use .byte
+ instead of .word offsets in switch table.
+
+Tue May 9 11:44:47 1995 Jeremy Bettis <jbettis@cse.unl.edu>
+
+ * objc/sendmsg.c (__objc_send_initialize): Call superclass if object
+ does not implement +initialize.
+
+Tue May 9 02:44:16 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * rs6000/xm-rs6000.h (COLLECT_EXPORT_LIST): Define if not
+ cross-compiling.
+ * rs6000/xm-mach.h: #undef COLLECT_EXPORT_LIST.
+ * rs6000/rs6000.h (COLLECT_SCAN_OBJECTS): Lose.
+
+ * collect2.c (collect_exit): Unlink export_file.
+ (prefix_from_string): Broken out from prefix_from_env.
+ (prefix_from_env): Call it.
+ (main): Under AIX, recognize -bE: and -bexport:, and don't
+ automatically export everything if we see one. Otherwise, scan the
+ objects individually and add all their symbols to an export file to be
+ passed to the linker.
+ (write_export_file): New function.
+ (scan_prog_file): Ignore symbols starting with '.'
+
+ * c-common.c (declare_hidden_char_array): Mark decl artificial.
+
+Mon May 8 18:13:57 1995 Adam Fedor <fedor@colorado.edu>
+
+ * objc/init.c (_objc_load_callback): Add declaration.
+ (__objc_exec_class): Call _objc_load_callback after every Class
+ or Category is added.
+ * objc/objc-api.h (_objc_load_callback): Add declaration.
+
+Mon May 8 17:56:28 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case INDIRECT_REF): Set RTX_UNCHANGING_P
+ if both TREE_READONLY and TREE_STATIC set.
+
+ * c-typeck.c (convert_for_assignment): Don't give errors about
+ adding const or volatile unless both sides point to functions.
+
+Mon May 8 11:48:23 1995 Michael Meissner <meissner@cygnus.com>
+
+ * configure: If ../ld/Makefile, symlink ../ld/ld.new to collect-ld,
+ not real-ld. Don't test for $use_collect2 any more.
+
+Sun May 7 17:52:23 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * calls.c (expand_call): Improve -Winline warnings.
+
+Sun May 7 17:28:27 1995 DJ Delorie (dj@delorie.com)
+
+ * configure.bat: Use "go32" instead of "msdos" for future expansion.
+
+ * i386/go32.h: Add support for win32's stdcall functions.
+
+ * configure.bat: Add ^M to end of each line.
+ * i386/config-nt.bat, alpha/config-nt.bat: Likewise.
+
+Sun May 7 02:12:26 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * tree.h (DECL_ARTIFICIAL): New macro.
+
+ * function.c (expand_function_end): Don't warn about unused
+ anonymous or artificial parms.
+
+Fri May 5 18:41:22 1995 Jim Meyering (meyering@comco.com)
+
+ * configure: Fix typo in name of "maintainer-clean".
+
+Fri May 5 14:58:01 1995 Jeffrey A. Law <law@snake.cs.utah.edu>
+
+ * pa.c (emit_move_sequence): Force problematical constants
+ into memory during the reload pass when generating PIC.
+
+Fri May 5 13:30:33 1995 Doug Evans <dje@cygnus.com>
+
+ * objc/NXConstStr.m: NXConstantString.h renamed to NXConststr.h.
+
+Fri May 5 07:10:15 1995 Stephen L Moshier (moshier@world.std.com)
+
+ * real.c (emdnorm, toe64, etoe64): Significand of Intel long double
+ denormals is shifted down one bit.
+
+Fri May 5 07:04:12 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-typeck.c (process_init_element): Don't clear_momentary if
+ constructor_stack is not empty.
+
+ * objc/Makefile (SHELL): Now /bin/sh.
+
+ * c-typeck.c (build_binary_op): Also warn about ordered
+ comparison of pointer with zero if -Wall.
+
+ * expr.c (do_jump, case EQ_EXPR, NE_EXPR): Properly compare complex.
+
+Thu May 4 18:01:25 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * objc/Makefile: NXConstantString renamed to NXConstStr.
+ * objc/NXConstStr.m: Renamed from objc/NXConstantString.m.
+ * objc/NXConstStr.h: Renamed from objc/NXConstantString.h.
+
+Thu May 4 17:38:21 1995 J.T. Conklin <jtc@netbsd.org>
+
+ * configure (vax-*-netbsd*): New configuration.
+ * vax/netbsd.h, vax/xm-netbsd.h: New files.
+
+Thu May 4 16:39:05 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * collect2.c (main): Add check for 'collect-ld', just like
+ 'real-ld', except that old versions won't be looking for it in the
+ path. Don't look for 'real-ld' in the path anymore. Sigh.
+
+ * collect2.c: #include demangle.h and obstack.h.
+ (obstack_chunk_alloc): Define.
+ (obstack_chunk_free): Define.
+ (generic): Don't define. Don't use.
+ (main): Initialize obstacks and demangling.
+
+ * collect2.c (dump_file): Adjust space padding in output to
+ maintain tabulation with Solaris ld. Don't demangle if the
+ environment variable COLLECT_NO_DEMANGLE is set.
+
+ * collect2.c (main): Redirect the output of the first link and
+ demangle it. Don't collect static c/dtors unless USE_COLLECT2 is
+ defined. Null-terminate the list of objects.
+ (dump_file): New function.
+ (file_exists): New function.
+ (collect_exit): Renamed from my_exit. Dump and remove the temporary
+ ld output file.
+ (collect_execute): Break out from fork_execute. Support redirection.
+ (fork_execute): Call it.
+ (fatal_perror, fatal, error): Make non-static.
+ (xcalloc, xmalloc): Don't use generic.
+ (xrealloc): Define.
+ (collect_wait): Break out for do_wait. Just return the exit status.
+ (do_wait): Call it.
+
+ * collect2.c: Check SUNOS4_SHARED_LIBRARIES using #if, not #ifdef.
+
+ * Makefile.in (collect2): Now uses cplus-dem.o and underscore.o.
+ (collect2.o): Pass MAYBE_USE_COLLECT2 to compile.
+ (underscore.c): Rules for creation.
+
+ * cplus-dem.c, demangle.h: Copy from libiberty.
+
+Thu May 4 14:12:35 1995 Jim Wilson <wilson@cygnus.com>
+
+ * sdbout.c (plain_type): Pass additional argument to plain_type_1.
+ (plain_type_1): New parameter level. Increment it when making
+ recursive calls. Force the type to void_type_mode before starting
+ a 7th level of recursion.
+
+ * sh.c (general_movsrc_operand, general_movdst_operand): Delete
+ references to POST_DEC and PRE_INC.
+ * sh.h: Clean up whitespace, comments, etc.
+ (TARGET_SH, RTL_BIT, DT_BIT, C_BIT, R_BIT, TARGET_DUMP_RTL,
+ TARGET_DUMP_R, TARGET_CDUMP): Delete.
+ (TARGET_SWITCHES): Delete -mR, -mc, -mr options.
+ (CONST_DOUBLE_OK_FOR_LETTER_P): Delete 'G' contraint.
+ (FUNCTION_VALUE): Simplify.
+ (REG_OK_FOR_PRE_POST_P, IS_INDEX): Delete.
+ (BASE_REGISTER_RTX_P, INDEX_REGISTER_RTX_P): Rewrite to allow
+ SUBREGs.
+ (GO_IF_LEGITIMATE_INDEX): Delete unused REGNO argument.
+ (GO_IF_LEGITIMATE_ADDRESS): Use BASE_REGISTER_RTX_P instead of
+ REG_OK_FOR_PRE_POST_P. Don't accept PRE_INC or POST_DEC addresses.
+ (PREDICATE_CODES, PROMOTE_MODE): Define.
+
+Wed May 3 09:57:55 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000/rs6000.md (non power abs insns): If not powerpc, use
+ sf/subfc instructions, not subf.
+
+Wed May 3 08:49:06 1995 Alan Modra <alan@SPRI.Levels.UniSA.Edu.Au>
+
+ * protoize.c (gen_aux_info_file): Use strerror #ifdef HAVE_STRERROR.
+
+Wed May 3 01:06:01 1995 Jeffrey A. Law <law@mole.gnu.ai.mit.edu>
+
+ * pa.c (output_call): Fix typo/thinko in last change.
+ (output_function_epilogue): Align the data section before
+ emitting deferred plabels.
+
+ From Torbjorn:
+ * pa.c (before functions): Declare deferred_plabels and
+ n_deferred_plabels.
+ (output_call): When generating pic, don't use LP and RP. Use 32 bit
+ plabel instead.
+ (output_function_epilogue): Output plabels accumulated in output_call.
+
+Tue May 2 17:15:08 1995 Jeffrey A. Law <law@mole.gnu.ai.mit.edu>
+
+ * pa.c (hppa_expand_epilogue): Fix thinko in last change.
+
+Tue May 2 16:54:35 1995 Doug Evans <dje@cygnus.com>
+
+ * jump.c (jump_optimize, can_reach_end determination): A barrier can
+ follow the return insn.
+
+Tue May 2 12:39:55 1995 Mike Stump <mrs@cygnus.com>
+
+ * fold-const.c (fold): Ensure that we don't alter the expression's
+ type when folding CLEANUP_POINT_EXPRs.
+
+Tue May 2 13:36:08 1995 Michael Meissner <meissner@cygnus.com>
+
+ * expmed.c (emit_store_flag): When creating store flag
+ instructions from simpler parts, such as XOR, ABS, etc. do not
+ reuse pseudo registers if expensive optimizations, instead create new
+ pseudos for each insn result.
+
+Tue May 2 01:25:29 1995 Jeffrey A. Law <law@snake.cs.utah.edu>
+
+ * pa.c (hppa_expand_epilogue): Correctly handle restore of %rp
+ for functions with a stack size of exactly 8kbytes and no frame
+ pointer.
+
+Mon May 1 19:27:08 1995 Jim Wilson <wilson@cygnus.com>
+
+ * sdbout.c (sdbout_one_type): Don't switch to text section if
+ in function with section attribute.
+
+ * combine.c (combine_instrutions): Set subst_prev_insn to zero.
+ (try_combine, undo_all): Likewise.
+ (get_last_value): Return zero if subst_prev_insn set.
+
+ * sparc.h (INIT_TARGET_OPTABS): Move INIT_SUBTARGET_OPTABS to end.
+
+ * Makefile.in (install-dir): chmod a+rx all newly created directories.
+
+ * expr.c (expand_expr, case SAVE_EXPR): Handle the case where
+ mode is VOIDmode.
+
+Fri Apr 28 15:39:38 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * cpplib.h (cpp_buffer): Note new escape combination "@ ".
+ * cpplib.c (macroexpand): Delete "@ " if stringifying.
+ (cpp_skip_hspace): Also skip "@ " if input buffer has_escapes.
+ (collect_expansion): Cleanup white-space handling.
+ (create_definition): Remove all leading spaces, not just first one.
+ (cpp_expand_to_buffer): Set has_escapes on resulting input buffer.
+ (macroexpand): Set output_escapes during whole function (and
+ specifically during calls of macarg).
+ (macroexpand): Set "@ " before and after expansion result.
+ (push_macro_expansion): Remove unneeded initial "@ ", not " ".
+ (cpp_get_token): Remove unneeded "@ " (not " ") at end of expansion.
+ (cpp_get_token): Handle "@ ".
+
+ * cpplib.c (read_name_map): Add cpp_reader parameter. Access
+ map_list from former (instead of having it be static).
+ (open_include_file): Extra parameter (because of above changes).
+ (do_include, lookup_import): Update calls of open_include_file.
+
+ * cpplib.c (do_include): Fix memory leak.
+
+ * cpplib.c (delete_assertion): Also delete tokenlist.
+ (do_unassert): Don't delete tokenlist (handled by delete_assertion).
+ (cpp_cleanup): New function. Frees resources used by a cpp_reader.
+ * cpphash.c (cpp_hash_cleanup): New function.
+ (delete_macro): Enable commented-out code.
+ (file_cleanup): Free actual buffer.
+
+ * cpplib.c (cpp_options): Add map_list.
+
+ * cpplib.h (PARSE_GETC): Removed. Bogus and unused.
+ * cppmain.c (main): Remove commented-out code that used PARSE_GETC.
+
+ * cpplib.c: Don't #include <string.h>. Causes clashes
+ on Nextstep (when index/rindex are macros).
+ (cpp_grow_buffer, int_parse_file): Cast to U_CHAR*, rather than char*.
+
+Sun Apr 30 08:11:23 1995 Alan Modra (alan@spri.levels.unisa.edu.au)
+
+ * stdarg.h, varargs.h (va_arg): Don't assume __va_rounded_size (char)
+ has the value of 4.
+
+Sun Apr 30 07:13:43 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * vax.h (NOTICE_UPDATE_CC): Correctly handle aob insns.
+
+ * expr.c (expand_expr, case CONSTRUCTOR): Don't set target to
+ zero if more then one word.
+ Pass size and alignment to move_by_pieces_ninsns in bytes, not bits.
+
+ * cse.c (cse_insn): Properly set IN_MEMORY for SET_DEST.
+
+ * tree.c (substitute_in_expr): Preserve TREE_READONLY.
+
+ * c-common.c (enum attrs): Add A_UNUSED.
+ (init_attributes): Initialize it.
+ (decl_attributes, case A_UNUSED): New case.
+
+Sat Apr 29 15:42:03 1995 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (do_include): Re-fix minor memory leak by using
+ alloca instead of xmalloc and free.
+
+ * cccp.c (macarg): Except for reporting error, treat unterminated
+ macro call as if it were terminated, since `macroexpand' relies
+ on *argptr being filled in.
+
+Sat Apr 29 06:09:35 1995 Torbjorn Granlund <tege@cygnus.com>
+
+ * pa.c (output_mul_insn): Simplify, it is never called with
+ UNSIGNEDP set.
+
+ * pa.md (divsi3, udivsi3, modsi3, umodsi3): Simplify.
+ (ashlsi3): Clean up indentation and commentary.
+
+Fri Apr 28 12:48:01 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * integrate.c (expand_inline_function): Don't emit any notes until
+ after we've expanded the actual parameters.
+
+Fri Apr 28 11:51:06 1995 Stan Cox (gcc@dg-rtp.dg.com)
+
+ * m88k/dgux.h: (ENDFILE_SPEC, LIB_SPEC) Fix crtbegin and crtend
+ (SELECT_RTX_SECTION) Put relocatable pic constants in data section
+
+ * m88k/dguxbcs.h: (LIB_SPEC) Likewise
+
+ * m88k/m88k.c: (symbolic_operand) Put relocatable pic constants in data
+
+ * m88k/m88k.h: (FRAME_POINTER_REQUIRED) Add -momit-leaf-frame-pointer
+
+ * m88k/m88k.md: (umulsidi3) Doesn't work for 88110 with mod/div changes
+
+ * m88k/x-dgux: (GCC_FOR_TARGET) tdesc gets mixed up for crtbegin/crtend
+
+Fri Apr 28 06:36:47 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-typeck.c (pop_init_level, output_init_element): Pass
+ require_constant_* to digest_init.
+
+ * alpha.c (alpha_emit_set_const): Now returns rtx and take MODE arg.
+ Rework to use a new pseudo for intermediate values if high opt level.
+ Also use expand_{bin,un}op.
+ * alpha.h (alpha_emit_set_const): Add declaration.
+ * alpha.md (mov[sd]i and splits): Change call to alpha_emit_set_const.
+
+ * reg-stack.c (stack_result): Fix bug in last change.
+
+Fri Apr 28 01:08:43 1995 Doug Evans <dje@cygnus.com>
+
+ * objc-act.c: Update calls to start_decl, finish_struct,
+ pass NULLs for attributes.
+
+Thu Apr 27 21:13:14 1995 Doug Evans <dje@cygnus.com>
+
+ * sparc.md (tablejump): Only if ! TARGET_MEDANY.
+ (casesi): New pattern for TARGET_MEDANY case.
+
+ * c-common.c (decl_attributes): Always continue if attribute not found.
+ * c-typeck.c (common_type): Call lookup_attribute instead of
+ value_member.
+ * tree.c (attribute_hash_list): New function.
+ (build_type_attribute_variant): Call it.
+ (valid_machine_attribute): Handle attributes with arguments.
+ (is_attribute_p): New function.
+ (lookup_attribute): New function.
+ (attribute_in_list): Deleted.
+ (attribute_list_contained): Check TREE_PURPOSE and TREE_VALUE.
+ * tree.h (valid_machine_attribute): Add prototype.
+ (is_attribute_p, lookup_attribute): Likewise.
+ * i386/winnt.h (RETURN_POPS_ARGS): Call lookup_attribute.
+ (ENCODE_SECTION_INFO): Likewise.
+ (CPP_PREDEFINES): Use __stdcall__, __cdecl__.
+ (VALID_MACHINE_DECL_ATTRIBUTE): Call is_attribute_p.
+ `args' must be NULL.
+
+Thu Apr 27 21:10:41 1995 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.md (insv): New anonymous patterns to combine insert with
+ arbitrary ashift, ashiftrt, lshiftrt, or zero_extract. (Based on
+ patch from John Brooks <jbrooks@ea.com>.)
+ (ashlsi3): Remove extraneous operand processing.
+
+Thu Apr 27 18:47:24 1995 Jim Wilson <wilson@cygnus.com>
+
+ * sh/ashlsi3.c, sh/ashrsi3.c, sh/lshrsi3.c: Delete.
+ * sh/lib1funcs.asm (ashiftrt_r4_*): Rewrite for efficiency.
+ (ashrsi3, lshrsi3, lshrsi3): Add.
+ * t-sh (LIB1ASMFUNCS): Add new functions.
+ (LIBGCC2_CFLAGS): Delete.
+ (LIB2FUNCS_EXTRA): Remove deleted files.
+ (ashlsi3.c, ashrsi3.c, lshrsi3.c): Remove rules for deleted files.
+
+ * stmt.c (expand_return): When returning BLKmode structure, use
+ operand_subword instead of doing arithmetic on the register number.
+ Also, for structures smaller than word_mode, copy it into a word_mode
+ temporary and then subreg it.
+
+ * sparc.md: Delete two define_peepholes which print `bad peephole'.
+
+Thu Apr 27 16:17:01 1995 Torbjorn Granlund <tege@cygnus.com>
+
+ * toplev.c (rest_of_compilation): Call shorten_branches even when
+ !optimize.
+ * final.c (shorten_branches): For non-optimizing compiles, break
+ after first pass.
+
+Thu Apr 27 14:22:50 1995 Michael Meissner <meissner@cygnus.com>
+
+ * i386/linux-oldld.h: New file, that is cloned from linux-aout.h,
+ except that it does not pass -m i386linux to the linker. This is
+ to support the original GNU/Linux ld that is on most distributions.
+
+ * configure (i[345]86-*-linux*oldld*): Use i386/linux-oldld.h as
+ the target file.
+
+Thu Apr 27 08:56:50 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.c (valid_machine_attribute): Update last change.
+
+Thu Apr 27 08:06:33 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * fix-header.c, cpplib.c: Don't include <sys/stat.h> twice.
+ * cpplib.c (cpp_grow_buffer, init_parse_file): Cast {xmalloc,xrealloc}
+ for token_buffer to U_CHAR* instead of char*.
+
+ * m68k/x-mot3300: New file.
+ * configure (m68k-motorola-sysv*): Use x-mot3300 instead of x-alloca.
+
+Thu Apr 27 07:04:09 1995 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (do_include): Fix minor memory leak.
+
+ * cccp.c (struct argdata): Remove unused `comments' member.
+ (macarg): Don't set `comments' member.
+
+ * cccp.c (collect_expansion): Assume leading white space
+ already removed.
+ Don't allocate unnecessary space for expansion.
+
+ * cccp.c (deps_output): Don't generate overly long output lines.
+ Do not invoke self recursively with spacer == 0; this simplifies
+ the code a bit.
+
+Wed Apr 26 19:20:02 1995 Andrew McCallum <mccallum@leopard.cs.rochester.edu>
+
+ * objc/Object.h: Changed Class * to Class in order to match NEXTSTEP
+ and OpenStep runtime.
+ * objc/Object.m, objc/Object.h, objc/archive.c, objc/class.c: Likewise.
+ * objc/encoding.c, objc/init.c, objc/objc-api.h, objc/objc.h: Likewise.
+ * objc/objects.c, objc/runtime.h, objc/selector.c: Likewise.
+ * objc/sendmsg.c, objc/typedstream.h: Likewise.
+
+Wed Apr 26 19:18:52 1995 Pieter Schoenmakers <tiggr@es.ele.tue.nl>
+
+ * objc/objc-api.h (objc_static_instances): New struct to record
+ static instances of a certain class.
+ (objc_module): New tag STATICS to point to the table of
+ objc_statics_instances.
+
+ * objc/init.c (OBJC_VERSION): Version 7.
+ (objc_init_statics): New function.
+ (__objc_exec_class): Invoke objc_init_statics if needed.
+
+ * objc/NXConstantString.m, objc/NXConstantString.h: New files.
+ * objc/Makefile (OBJC_O): Added bare-bones implementation of
+ NXConstantString.
+
+ * objc-act.c (OBJC_VERSION): Version 7.
+ (build_objc_string_object): Build a full declaration if not using
+ the next runtime.
+ (objc_add_static_instance): New function.
+ (init_module_descriptor): Add reference to static instances table.
+ (build_module_descriptor): Add field for static instances table.
+ (get_objc_string_decl): New function.
+ (generate_static_references): New function.
+ (finish_objc): Call generate_static_references if needed.
+
+ * c-tree.h (finish_decl_top_level): New declaration.
+ * c-decl.c (finish_decl_top_level): New function.
+
+Wed Apr 26 18:04:32 1995 Dirk Steinberg (Dirk.Steinberg@gmd.de)
+
+ * stddef.h: Treat _MACHINE_ANSI_H_ like _ANSI_H_.
+
+Wed Apr 26 14:09:59 1995 Jim Wilson <wilson@cygnus.com>
+
+ * sparc.h (NEGTF2_LIBCALL): Define.
+ (INIT_TARGET_OPTABS): Add support for all TFmode *_LIBCALL macros.
+ * optabs.c (init_optabs): Delete all uses of undocumented TImode and
+ TFmode *_LIBCALL macros.
+
+ * combine.c (simplify_rtx, case TRUNCATE): Add. Use force_to_mode.
+ (force_to_mode, case AND): Allow some simplifications when GET_MODE (x)
+ has more bits than HOST_BITS_PER_WIDE_INT.
+ * mips/mips.md (truncdiqi2+[456]): Add patterns to simplify ZERO_EXTEND
+ of a TRUNCATE.
+
+Wed Apr 26 13:01:22 1995 Doug Evans <dje@cygnus.com>
+
+ * sparc.md (memop define_splits): Rewrite to not use memop.
+ Preserve MEM_IN_STRUCT_P, MEM_VOLATILE_P, RTX_UNCHANGING_P bits.
+ * sparc.c (memop): Deleted.
+ (splittable_symbolic_memory_operand): New function.
+ (splittable_immediate_memory_operand): New function.
+
+Wed Apr 26 12:54:26 1995 Jeffrey A. Law <law@snake.cs.utah.edu>
+
+ * configure: Add hppa1.1-hp-lites support.
+
+Wed Apr 26 08:04:46 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * sh.md (ashrsi2_31): Don't use dead_or_set_p after reload.
+ * pyr.md: Remove bad peepholes that improperly use dead_or_set_p.
+
+ * function.c (expand_function_end): Warn about unused parms
+ if both -Wunused and -W.
+
+ * tree.h (TYPE_PARSE_INFO): Delete unused field.
+ (TYPE_PACKED): Add new macro.
+ (struct tree_type): Delete unused field `parse_info'.
+ Add new field `packed_flag'.
+ * c-tree.h (finish_enum, finish_struct): Add ATTRIBUTES argument.
+ * c-common.c (init_attributes): Don't require decl for A_PACKED.
+ (decl_attributes, case A_PACKED): Set TYPE_PACKED for type.
+ * c-parse.in: Update number of shift/reduce conflicts.
+ (structsp): Pass attribute arg to finish_struct.
+ Support attributes on enums and pass to finish_enum.
+ * c-decl.c (finish_struct): Add ATTRIBUTES argument, call
+ decl_attributes and set DECL_PACKED from TYPE_PACKED.
+ (finish_enum): Add ATTRIBUTES argument, call decl_attributes,
+ and make enum narrow if TYPE_PACKED.
+ * print-tree.c (print_node): Print TYPE_PACKED.
+
+ * c-decl.c (init_decl_processing): Don't give builtin__constant_p an
+ argument type.
+ * expr.c (expand_builtin, case BUILT_IN_CONSTANT_P): A pointer to a
+ string constant is a constant.
+
+ * c-typeck.c (output_init_element): Constructor is not simple if
+ a bitfield is being assigned a non-integer.
+
+ * c-typeck.c (push_init_level): Update constructor_depth when we
+ push spelling level.
+
+Tue Apr 25 19:50:06 1995 Jeffrey A. Law <law@snake.cs.utah.edu>
+
+ * pa.c (emit_move_sequence): Handle function label arithmetic for
+ PIC code generation too.
+
+Tue Apr 25 18:52:43 1995 Stephen R. van den Berg (berg@pool.informatik.rwth-aachen.de)
+
+ * reg-stack.c (current_function_returns_real): Deleted (unused).
+ (FP_mode_reg): Trimmed to a smaller size, less overhead.
+ (FP_MODE_REG): New macro over which FP_mode_reg will be accessed.
+ (mark_regs_pat, straighten_stack): New functions.
+ (reg_to_stack): Amend initialisation of FP_mode_reg.
+ Mark FP registers mentioned in USE insns before NOTE_INSN_FUNCTION_BEG.
+ (get_true_reg): Eliminate FP subreg accesses in favour of the
+ actual FP register in use.
+ (record_reg_life_pat): Make it work on SUBREGs as well. Make use of
+ the new mark_regs_pat function. Handle USE insns if called unnested.
+ (record_reg_life): Don't check for QImode again, we know that it
+ is there. Process CALL_INSNs like all other insns, they might `use'
+ some FP argument registers if register passing.
+ (stack_result_p): Changed in stack_result and returning an rtx.
+ (stack_reg_life_analysis): Take a new stackentry state argument.
+ Use stack_result and the rtx to mark using mark_regs_pat. This ensures
+ that types that need multiple FP registers are handled correctly.
+ Delete the no_live_regs shortcut to save space.
+ Use stackentry state to determine filled registers.
+ (replace_reg): Accept COMPLEX_FLOAT as well.
+ (move_for_stack_reg): Optimise away some pointer dereferencing.
+ (subst_stack_regs): Make sure the stack is in the right order
+ and of the right size for register passing.
+ (goto_block_pat): Make sure the stack is in the right order
+ to return possible multi-register values from the function.
+ (convert_regs): Fix comment about CALL_INSN, it's no longer valid.
+ Make sure the stack is of the right size and in the right order
+ to return possible multi-register values from the function.
+
+ * function.c (assign_parms): If STACK_REGS is defined, generate USE
+ insns before the function body, thus showing which registers are filled
+ with parameters.
+ * expr.c (expand_builtin_apply_args): Likewise.
+ Reverse order of saving registers, more compact code for i387.
+ (expand_builtin_apply): Likewise.
+ * emit-rtl.c (gen_highpart): Add comment about broken implementation.
+ * i386.md (untyped_call): Make it return a complex double.
+
+ * c-parse.in (attrib): Permit null-length argument list to attributes.
+
+ * tree.c (valid_machine_attribute): Use new function attribute_in_list,
+ makes sure type_attribute_variants are reused even when attributes have
+ parameters.
+ Assign any new type to TREE_TYPE (decl).
+ (attribute_in_list): New function.
+ (attribute_list_contained): Use it.
+ * tree.h (attribute_in_list): New declaration.
+
+Tue Apr 25 18:25:53 1995 Jim Wilson <wilson@cygnus.com>
+
+ * expr.c (struct move_by_pieces): Add to_struct and from_struct fields.
+ (move_by_pieces): Set to_struct and from_struct fields.
+ (move_by_pieces_1): Set MEM_IN_STRUCT_P of to1 and from1.
+ (expand_builtin, case BUILT_IN_MEMCPY): New variable type.
+ Set MEM_IN_STRUCT_P of src_mem and dest_mem.
+
+ * Makefile.in (clean): Delete libgcc1-asm.a.
+
+ * m68k/vxm68k.h (CPP_SPEC): Define.
+
+ * c-decl.c (pushdecl): Don't test DECL_EXTERNAL when deciding whether
+ to register a duplicate decl in the current block.
+
+ * cross64.h (INIT_ENVIRONMENT): Define as string not putenv call.
+ * gcc.c (main): Pass INIT_ENVIRONMENT to putenv.
+
+ * stmt.c (expand_return): When returning BLKmode structure in
+ registers, copy it to a psuedo-reg instead of to hard registers.
+
+Tue Apr 25 15:14:58 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.h (LEGITIMIZE_ADDRESS): Don't create a DF address using two
+ regs if -msoft-float or -mcpu=403.
+
+Tue Apr 25 15:45:44 1995 Richard Henderson (richard@atheist.tamu.edu)
+
+ * m68k.md (divhi3, udivhi3, modhi3, umodhi3): Deleted
+ these insns plus some surrounding trash.
+ (divmodhi4, udivmodhi4): Added these insns.
+
+Tue Apr 25 10:12:40 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.c (alpha_builtin_saveregs): Refine last change to work
+ for both stdarg and varargs.
+
+ * tree.c (chain_member_purpose): Make similar to chain_member_value.
+
+ * Makefile.in, configure: Change "realclean" to "maintainer-clean".
+
+ * protoize.c: Removed __NetBSD__ from conditional.
+ Declare strerror if HAVE_STRERROR is defined; otherwise
+ declare sys_errlist and sys_nerr.
+ (my_strerror): New function.
+ (errno): Don't define if already defined as a macro.
+
+ * alpha.c (current_file_function_operand): Return false if profiling.
+
+ * expr.c (convert_move): Don't access a hard reg in an invalid
+ mode when doing a truncation.
+
+ * alpha.c (add_operand): Test for exactly the constants allowed by
+ the constraints.
+ * alpha.h (CONST_OK_FOR_LETTER_P, case 'L'): Reject 0x80000000.
+
+ * c-parse.in (initdcl, notype_initdcl): Pass attributes to
+ start_decl; delete call to decl_attributes.
+ * c-tree.h (start_decl): Two new tree parameters.
+ * c-decl.c (start_decl): New args for attributes; call decl_attributes.
+
+ * c-decl.c (duplicate_decls): Don't look at TYPE_ACTUAL_ARG_TYPES
+ if it is not set.
+
+ * xm-1750a.h: New file.
+
+ * alpha.c (alpha_builtin_saveregs): Add to incoming args addr
+ if less than 6 named args, not less than or equal to.
+
+Mon Apr 24 15:25:19 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * mips-tfile.c (fatal, error): Make first arg const to avoid warning.
+
+ * stmt.c (expand_end_bindings): Write a BARRIER after call
+ to abort in nonlocal handler.
+
+ * stmt.c (expand_decl_init): Call preserve_temp_slots to keep
+ around any temp whose address was taken.
+
+Fri Apr 21 16:26:15 1995 Torbjorn Granlund <tege@adder.cygnus.com>
+
+ * pa.md (call_internal_reg): Fix typos in length calculation.
+ (call_value_internal_reg): Likewise.
+
+Fri Apr 21 13:17:15 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * config/gnu.h (STANDARD_INCLUDE_DIR): New macro.
+ * config/mips/gnu.h (STANDARD_INCLUDE_DIR): Macro moved there.
+
+Fri Apr 21 08:23:58 1995 Tom Quiggle (quiggle@lovelace.engr.sgi.com)
+
+ * toplev.c (lang_options): Add -I for GNAT.
+ * gcc.c (default_compilers): Pass -I to gnat1.
+
+Fri Apr 21 07:58:06 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.c (integer_all_onesp): Test to size of mode, not TYPE_PRECISION.
+
+ * toplev.c (main): Turn on -fforce-mem for -O2.
+
+ * fold-const.c ([lr]rotate_double): Replace; old versions were bogus.
+ (fold, shift and rotate): Don't call tree_int_cst_sgn on non-integer.
+ (fold, case LROTATE_EXPR): If constant count, convert to RROTATE_EXPR.
+ (fold, case RROTATE_EXPR): Sometimes commute logical op with rotate.
+ Delete pair of counteracting shifts.
+
+ * combine.c (simplify_logical, case AND): If still an AND, get
+ new values for op0 and op1.
+
+Thu Apr 20 17:52:10 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * sh.c: Completely rewritten.
+ * sh.h (FAST_BIT, CONSTLEN_2_BIT, CONSTLEN_3_BIT, CONSTLEN_0_BIT,
+ TARGET_FASTCODE, TARGET_CLEN3, TARGET_CLEN0, TARGET_OPTIONS): Delete.
+ (TARGET_SWITCHES): Delete -mclen3 and -mclen0 options.
+ (TARGET_DEFAULT): Is zero.
+ (OVERRIDE_OPTIONS): Delete code to set max_count_si and max_count_hi.
+ (SPECIAL_REG): New macro.
+ (HARD_REGNO_MODE_OK): Allow any mode in any general register.
+ (GO_IF_LEGITIMATE_ADDRESS): Delete constant + reg address case.
+ (MOVE_RATIO): Define to 2 when TARGET_SMALLCODE.
+ (max_si, max_hi, max_count_si, max_count_hi): Delete.
+ * sh.md: Delete spurious constraints from all define_expands.
+ (rotlsi3_1): Set T reg instead of clobbering it.
+ (ashrsi3): Use expand_ashiftrt instead of gen_shifty_op.
+ (movsi_i, movhi_i, movsf_i): Add conditions to reject patterns
+ needing a reload.
+ (movdi-2, movdf_k): Correct conditions to reject patterns needing
+ a reload.
+ ([inverse_]branch_{true,false}): Pass operands to output_branch.
+ (jump): Delete unnecessary braces.
+ (call, call_value): Don't use expand_acall. Force operand0 into
+ a register.
+
+Thu Apr 20 12:57:16 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * function.c (assign_parms): Use TREE_ADDRESSABLE rather than
+ TYPE_NEEDS_CONSTRUCTING to decide whether a parameter needs to be
+ passed by invisible reference.
+
+ * calls.c (expand_call): Ditto. Abort if we try to pre-evaluate a
+ parameter of TREE_ADDRESSABLE type.
+
+Wed Apr 19 17:50:24 1995 Torbjorn Granlund <tege@cygnus.com>
+
+ * pa.h (TARGET_SWITCHES): Fix typo.
+
+Tue Apr 18 18:06:03 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * expr.c (store_constructor): Use BYTES_BIG_ENDIAN rather
+ than BITS_BIG_ENDIAN to layout bits within bitstring.
+ * tree.c (get_set_constructor_bytes): Likewise.
+
+Tue Apr 18 17:22:46 1995 Per Bothner (bothner@wombat.gnu.ai.mit.edu)
+
+ * config/m68k/{x-hp320,x-hp320g} (FIXPROTO_DEFINES):
+ Define _HPUX_SOURCE so putenv and other functions get seen.
+
+Tue Apr 18 03:57:35 1995 Michael Meissner (meissner@cygnus.com)
+
+ * varasm.c (weak_decls): Make this a unique structure, instead of
+ a tree structure.
+ (handle_pragma_weak): Don't redeclare asm_out_file. Use new weak
+ structure to copy name and value to. Protect name and value by
+ copying them to the permanent obstack.
+ (declare_weak): Call handle_pragma_weak, instead of duplicating
+ the code.
+ (finish_weak): Rewrite to use new weak symbols list structure.
+
+ * c-pragma.h: New file to define the c-pragma.c interfaces.
+ * c-pragma.c: Include it.
+ * varasm.c: Include it.
+ * c-lex.c: Include it.
+ * cp/lex.c: Include it.
+
+ * varasm.c (handle_pragma_weak): No longer pass output file
+ stream, since weak pragmas are delayed until the end of the
+ compilation.
+ * c-pragma.c (handle_pragma_token): Call handle_pragma_weak
+ without file stream argument.
+
+ * Makefile.in (varasm.o, c-lex.o, c-pragma.o): Add dependencies on
+ c-pragma.h.
+
+ * config/rs6000.md (movdf): If -msoft-float, do not generate
+ memory to memory references, like is already done for the
+ -mhard-float case. Remove an extra test for -mhard-float inside
+ of -mhard-float code.
+
+Tue Apr 18 06:19:50 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (size_int): Arg is unsigned HOST_WIDE_INT.
+ * tree.h (size_int): Likewise.
+
+Mon Apr 17 23:36:57 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * rs6000/aix41.h: Restore March 11th changes, plus
+ (ASM_OUTPUT_EXTERNAL): Do add [DS] or [RW], just don't emit
+ anything.
+ * rs6000/aix3newas.h (ASM_OUTPUT_EXTERNAL): Ditto.
+
+Mon Apr 17 15:58:52 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * config/mips/x-iris (FIXPROTO_DEFINES): Add -D_LANGUAGE_C_PLUS_PLUS.
+ * config/mips/x-iris6: Likewise.
+
+ * cpplib.c: Rename make_definition to cpp_define.
+ * cpplib.h (cpp_define): New declaration.
+
+ * cpplib.c (special_symbol): For T_SPECLINE, calculate __LINE__
+ in enclosing file buffer, not current buffer (if macro expanding).
+ (cpp_get_token): Fix thinko (in code for chopping unneeded space).
+
+Mon Apr 17 11:36:07 1995 Jim Wilson <wilson@cygnus.com>
+
+ * abi64.h (CPP_SPECS): Define and use _ABI64 instead of
+ _MIPS_SIM_ABI64.
+ (SETUP_INCOMING_VARARGS): Set MEM_IN_STRUCT_P if big endian target.
+ * iris6.h (ASM_IDENTIFY_GCC, ASM_IDENTIFY_LANGUAGE): Define.
+
+ * combine.c (get_last_value): Ignore BARRIER when scanning backwards.
+ (move_deaths): New variables before_dead and after_dead. Set them
+ to instructions that have valid INSN_CUID values and use in test.
+
+ * combine.c (subst_prev_insn): New variable.
+ (try_combine): Set it.
+ (get_last_value): Use it.
+
+ * reload.c (find_reloads): Recompute reg_equiv_address from
+ reg_equiv_memory_loc before using it.
+ (find_reloads_toplev, make_memloc): Likewise.
+
+ * expr.c (expand_builtin, case BUILT_IN_MEMCPY): Call force_operand
+ on dest_rtx before returning it.
+
+ * function.c (instantiate_decls): Use temporary allocation if
+ DECL_DEFER_OUTPUT is set.
+
+Sat Apr 15 23:19:03 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * aoutos.h (ASM_OUTPUT_DEF): Define instead of SET_ASM_OP.
+ * sparc/sunos4.h (ASM_OUTPUT_DEF): Ditto.
+
+ * varasm.c (weak_finish): Don't handle aliases.
+ (declare_weak): Ditto.
+ (assemble_alias): Handle aliases.
+
+ * c-common.c (enum attrs): Add A_ALIAS.
+ (init_attributes): Ditto.
+ (decl_attributes): Ditto.
+
+Sat Apr 15 13:26:34 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * calls.c (expand_call): Call preserve_temp_slots on temps
+ made for BLKmode args returned in registers.
+
+ * pa.c (override_options): Fix typo.
+
+Sat Apr 15 12:11:46 1995 Brendan Kehoe <brendan@cygnus.com>
+
+ * alpha/alpha.c (output_epilog): Initialize fp_offset to 0, and
+ make sure it's non-zero before we try to use it to restore the
+ frame pointer.
+
+Fri Apr 14 19:45:05 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * ginclude/va-{clipper,pa,pyr,sparc,spur}.h (va_arg): Reorganize
+ to avoid BIND_EXPRs and COND_EXPRs of aggregate type.
+
+Fri Apr 14 19:31:14 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * config/svr4.h (ASM_OUTPUT_SECTION_NAME): Make the section
+ read-only executable "ax" if DECL is a FUNCTION_DECL; read-only
+ "a" (previously the case always) if DECL is TREE_READONLY;
+ otherwise writable "aw".
+
+Fri Apr 14 18:49:11 1995 Linus Torvalds <Linus.Torvalds@cs.Helsinki.FI>
+
+ * alpha.md (probe_stack): Probe with write, not read.
+ (allocate_stack): Update and correct stack probe code.
+ * alpha.c (output_prolog): Changed stack probe at function entry.
+
+Fri Apr 14 18:42:34 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * jump.c (delete_insn): When deleting after label, delete
+ a BARRIER as well.
+
+Fri Apr 14 14:40:48 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * toplev.c (compile_file): Call weak_finish.
+
+ * c-common.c (enum attrs): Add A_WEAK.
+ (init_attributes): Ditto.
+ (decl_attributes): Support __attribute__ ((weak)) by
+ calling declare_weak.
+
+ * sparc/sunos4.h (HANDLE_PRAGMA_WEAK, WEAK_ASM_OP, SET_ASM_OP):
+ Define to support weak symbols with -fgnu-linker.
+ * aoutos.h: Ditto.
+
+ * varasm.c (handle_pragma_weak): Add declared weak symbols to
+ weak_decls rather than emitting them immediately.
+ (declare_weak): Add the indicated declaration to weak_decls.
+ (weak_finish): Emit .weak directives for any weak symbols.
+
+ * libgcc2.c: The C++ free-store management functions are weak.
+
+Fri Apr 14 13:00:29 1995 Michael Meissner (meissner@cygnus.com)
+
+ * rs6000/rs6000.c (output_prolog): For eabi systems, emit main's
+ call to __eabi before setting up the minimal TOC used with the
+ -mrelocatable support.
+
+ * rs6000/eabi.h (INVOKE__main): Don't define any more,
+ output_prolog will emit the call.
+
+Fri Apr 14 09:09:03 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.c (call_operand): Any reg is valid for NT.
+ (output_prologue): Never need GP for Windows/NT.
+ Set SYMBOL_REF_FLAG in current function decl.
+
+Thu Apr 13 20:19:30 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * alpha/xm-alpha.h (HAVE_VPRINTF): Define.
+ (HAVE_PUTENV): Define.
+ (POSIX): Define.
+
+Thu Apr 13 19:57:44 1995 Doug Evans <dje@cygnus.com>
+
+ * emit-rtl.c (gen_sequence): If the insn has a non-null
+ CALL_INSN_FUNCTION_USAGE field, output it as a sequence so the
+ latter isn't discarded.
+
+ * c-parse.in: Update expected conflict count.
+
+Thu Apr 13 08:10:20 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * configure.bat: Arg 2 is which machine (i386 or alpha).
+ * configure (alpha-*-winnt3*): New configuration.
+ * alpha.c: Don't #include stamp.h for WINNT.
+ (input_operand, case CONST): Allow ptr_mode and DImode.
+ * alpha.h (WINDOWS_NT): Provide default definition.
+ (ASM_OUTPUT_INT): Use output_addr_const.
+ (ASM_OUTPUT_ADDR_DIFF_ELT): Use .long for NT.
+ * alpha.md (calll, tablejump, movsi): New variants for NT.
+ * alpha/winnt.h, alpha/xm-winnt.h, alpha/x-winnt: New files.
+ * alpha/config-nt.bat, alpha/config-nt.sed: New files.
+ * i386/config-nt.bat: Add Ada fragments to Makefile.
+ * i386/config-nt.sed: Adjust for deletion of config.run in Makefile.in
+ Change version to 2.6.3.
+ Add some missing tabs.
+ * winnt/winnt.h (TARGET_MEM_FUNCTIONS): Define.
+ (LINK_SPEC): Delete "align:0x1000".
+ * winnt/xm-winnt.h (OBJECT_SUFFIX): Define.
+ * ginclude/stdarg.h, ginclude/varargs.h: Clean up code that
+ defines *DEFINED* symbols.
+
+ * configure (a29k-*-sym1*): Same as a29k-*-bsd*.
+ * a29k.h (ASM_OUTPUT_SECTION_NAME): New macro.
+
+Wed Apr 12 14:36:03 1995 Jim Wilson <wilson@cygnus.com>
+
+ * dbxout.c (dbxout_type_fields): Correct arguments to CHARS macro
+ in flag_minimal_debug case.
+ (dbxout_symbol_name): Use DECL_ASSEMBLER_NAME unconditionally.
+ * sdbout.c (sdbout_record_type_name): Correct indentation.
+ (sdbout_symbol): Use DECL_ASSEMBLER_NAME unconditionally.
+ (sdbout_one_type): Likewise.
+
+Tue Apr 11 13:24:13 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * fix-header.c (main): Fix loop over required_functions_list.
+ (fatal): Also print inc_filename.
+
+ * cpplib.c (cpp_push_buffer): Added missing initializatuon of buf.
+ (cpp_file_buffer): Compare against CPP_NULL_BUFFER, not NULL.
+ (finclude): No longer call cpp_push_buffer - let callers do it.
+ (do_include): Add call to cpp_push_buffer.
+ (push_parse_file): Call cpp_push_buffer early, so initial
+ defines can use file and line from a valid cpp_buffer.
+ (nreverse_pending): New function.
+ (push_parse_file): Use nreverse_pending.
+ (push_parse_file): For -include files, just push them in reverse
+ order - we don't need to scan them now.
+ (cpp_error_from_errno, cpp_perror_with_name): Don't emit extra '\n'.
+
+Tue Apr 11 13:36:44 1995 Jim Wilson <wilson@cygnus.com>
+
+ * configure (mips-dec-mach3): Add.
+
+ * sh.c (shiftby_operand): Delete.
+ * sh.h (TARGET_SWITCHES): -m3 and -m3l also set SH2_BIT.
+ (OVERRIDE_OPTIONS): Don't add CPU_SH2 to CPU_SH3 when TARGET_SH3.
+ * sh.md (ashlsi3): Use nonmemory_operand as a predicate instead of
+ shiftby_operand. Don't use shiftby_operand in the output statement.
+ (lshrsi3): Likewise.
+
+ * c-decl.c (poplevel): Do output inline function if
+ DECL_ABSTRACT_ORIGIN points to itself.
+
+ * varasm.c (output_constant): Cast assemble_string argument to char *.
+
+Mon Apr 10 14:29:28 1995 Torbjorn Granlund <tege@adder.cygnus.com>
+
+ * recog.c (constrain_operands, case 'E'): Make this work like
+ constraint character `F' when REAL_ARITHMETIC is defined.
+ * regclass.c (record_reg_classes, case 'E'): Likewise.
+ * reload.c (find_reloads, case 'E'): Likewise.
+
+Mon Apr 10 14:30:31 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000/aix3newas.h, rs6000/aix41.h: Eliminate March 11th changes
+ to undefine ASM_OUTPUT_EXTERNAL{,_LIBCALL}, since this causes the
+ compiler not to bootstrap.
+
+Mon Apr 10 07:17:39 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cppalloc.c: #include config.h.
+ * cppexp.c: Add declarations of xmalloc and xrealloc.
+ (cpp_parse_expr): Cast args to bcopy to char *.
+ * cpphash.c: Add declaration of xmalloc.
+ * cpplib.c (init_parse_options, cpp_reader): Cast args to bcopy,
+ bcmp, and bzero to char *.
+ (add_import, push_parse_file, init_parse_file): Likewise.
+
+ * c-common.c (enum attrs): New attribute, A_NOCOMMON.
+ (init_attribute): Initialize it.
+ (decl_attributes): Implement it.
+ * varasm.c (make_decl_rtl): Allow section attribute if -fno-common
+ or variable is not to be placed in common for some other reason.
+
+ * combine.c (simplify_set): Don't move a SUBREG to dest if it
+ is changing the size of a hard reg in CLASS_CANNOT_CHANGE_SIZE.
+
+ * reload.c (find_equiv_reg): If goal is a pseudo that got memory,
+ a store into memory makes it invalid.
+ * reload1.c (reload_as_needed): Call forget_old_reloads_1 on
+ pattern before reg elimination.
+
+Mon Apr 10 00:26:14 1995 Jeffrey A. Law <law@snake.cs.utah.edu>
+
+ * pa.c (pa_reorg): Bump label use count for each entry in an
+ exploded ADDR_VEC.
+
+Sun Apr 9 09:22:51 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * i386.md (adddi3, subdi3): Need scratch reg whenever operand 0 in
+ mem and operands 1 not '0'.
+ (subdi3): Don't treat two non-equal MEMs as non-aliasing.
+
+Sat Apr 8 22:53:38 1995 Jeffrey A. Law <law@snake.cs.utah.edu>
+
+ * pa.c (pa_reorg): Fix typo.
+
+Sat Apr 8 19:36:36 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000/rs6000.h (SELECT_SECTION): TREE_CODE_CLASS must be called
+ with a tree code, not a tree value.
+
+Sat Apr 8 12:41:01 1995 Mike Stump <mrs@cygnus.com>
+
+ * cpphash.c: Don't use const on compilers that don't support it.
+
+Sat Apr 8 16:32:22 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_increment): Handle case where INCREMENTED
+ has a non-trivial conversion.
+
+Fri Apr 7 19:33:21 1995 Phil Nelson (phil@cs.wwu.edu)
+
+ * ns32k.h (TRAMPOLINE_TEMPLATE, TRANSFER_FROM_TRAMPOLINE):
+ Fix assembler syntax errors.
+
+Fri Apr 7 19:27:23 1995 Pat Rankin (rankin@eql.caltech.edu)
+
+ * cccp.c (VMS_fstat, VMS_stat): New functions.
+
+Fri Apr 7 19:25:21 1995 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (collect_expansion): If traditional, set stringify
+ member to SHARP_TOKEN regardless of the value of
+ stringify_sharp_token_type.
+
+Fri Apr 7 07:48:35 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (simplify_unary_operation): #ifdef POINTERS_EXTEND_UNSIGNED,
+ handle sign- or zero-extending addresses.
+
+ * optabs.c (init{,_integral,_floating,_complex}_libfuncs):
+ Change SUFFIX to "char" to avoid confusion with prototype.
+
+ * explow.c (convert_memory_address): No longer static.
+ New arg, TO_MODE.
+ Do something special for SYMBOL_REF, LABEL_REF, and CONST.
+ (memory_address): Add extra arg to call to convert_memory_address.
+ * rtl.h (convert_memory_address): Add extra arg.
+ * expr.c (expand_expr, case ADDR_EXPR): Always call
+ convert_memory_address when converting; add extra arg.
+ * stmt.c (expand_computed_goto): Convert from ptr_mode to Pmode.
+
+ * gcc.c (OBJECT_SUFFIX): Default now ".o", not "o".
+ (all specs): Remove "." before %O; use %O in a few missing cases.
+ * i386/os2.h (OBJECT_SUFFIX): Delete from here.
+ * i386/xm-os2.h (OBJECT_SUFFIX): Move to here; now has period.
+
+ * Makefile.in (STAGESTUFF): Use $(exeext) for executables.
+
+Fri Apr 7 03:32:29 1995 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * config.sub: Accept -lites* as op sys.
+
+Thu Apr 6 23:08:50 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * cpplib.c (bcopy, bzero, bcmp): Remove #undefs.
+ * cppalloc.c (xcalloc): Re-implement using calloc,
+ rather than malloc+bzero.
+ * cpplib.c (SELF_DIR_DUMMY): New macro.
+ (do_include): Don't pass searchptr to finclude if it is dsp,
+ since that is on the stack, and would cause a dangling pointer.
+ If handling #include_next, recognize SELF_DIR_DUMMY.
+
+Fri Apr 7 00:54:24 1995 Jeffrey A. Law <law@snake.cs.utah.edu>
+
+ * pa.h (MACHINE_DEPENDENT_REORG): Define.
+ * pa.md (switch_jump): New pattern for jumps which implement
+ a switch table.
+ * pa.c (pa_reorg): New function to explode jump tables.
+ (pa_adjust_insn_length): Account for jumps in switch tables with
+ unfilled delay slots.
+
+Thu Apr 6 14:31:10 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * c-typeck.c (build_binary_op): Don't call common_type for
+ uncommon pointer types.
+
+Wed Apr 5 13:53:17 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ Re-write fixproto/fix-header/etc to use cpplib:
+ * fix-header.c: Comment out support for adding missing extern "C"
+ using #ifdef ADD_MISSING_EXTERN_C instead of #if 0.
+ * fixproto: Removed case of required functions. Instead use ...
+ * fix-header.c (std_include_table): ... new required-functions table.
+ (cpp_file_line_for_message, cpp_print_containing_files, cpp_message):
+ New stub functions, to intercept cpplib error message.
+ * fixproto: Don't call $CPP, since fix-header now incorporates cpplib.
+ * gen-protos.c (fatal, hashf): New functions.
+ (main): Use hashf, instead of hash.
+ * scan-decls.c (scan_decls, skip_to_closing_brace): Re-write to
+ take a cpp_reader* as argument, not a FILE*.
+ * scan.h (hash): Make parameter const.
+ * scan.c (hash): Removed.
+ * scan.c (memory_full, xmalloc, xrealloc): Removed.
+ Use functions from cppalloc.c instead.
+ * Makefile.in (gen-prtos, fix-header, stmp-fixproto): Update.
+
+Wed Apr 5 13:24:14 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * cpplib.c (cpp_get_token): If traditional, return after comment,
+ instead of reading more, so end-of-line can be peeked at.
+ * cpperror.c (cpp_file_line_for_message, cpp_message): New
+ functions, that do the actual printing of error messages.
+ (cpp_print_file_and_line, cpp_error, cpp_warning, cpp_pedwarn,
+ cpp_error_with_line, cpp_warning_with_line, cpp_pedwarn_with_line,
+ cpp_pedwarn_with_file_and_line, cpp_error_from_errno, my_strerror,
+ cpp_perror_with_name): Re-write to use cpp_file_line_for_message
+ and cpp_message, and move to cpplib.c.
+
+Tue Apr 4 23:35:49 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * config/gnu.h (GNU_CPP_PREDEFINES): Remove -D__HURD__.
+
+Tue Apr 4 17:15:54 1995 Jeffrey A. Law <law@mole.gnu.ai.mit.edu>
+
+ * pa.h (DO_GLOBAL_DTORS_BODY): Fix pointer -> integer assignment
+ problem.
+
+ * reorg.c (fill_simple_delay_slots): Don't use a JUMP_INSN
+ a the target of another JUMP_INSN to fill a delay slot.
+
+Mon Apr 3 19:03:48 1995 Torbjorn Granlund <tege@adder.cygnus.com>
+
+ * cse.c (simplify_unary_operation): Sign-extend constants when
+ they have the most significant bit set for the target.
+
+ * m68k.md (umulsi3_highpart): Test for CONST_INT and CONST_DOUBLE,
+ not CONSTANT_P.
+ (smulsi3_highpart): Likewise.
+ * m68k.c (const_uint32_operand): New function.
+ (const_sint32_operand): New function.
+ * m68k.md (const_umulsi3_highpart): Use const_uint32_operand instead
+ of immediate_operand for op3. Delete mode.
+ (const_smulsi3_highpart): Analogous change.
+
+Mon Apr 3 19:03:48 1995 Jim Wilson <wilson@cygnus.com>
+
+ * cse.c (simplify_binary_operation): Sign-extend constants when
+ they have the most significant bit set for the target.
+
+ * combine.c (force_to_mode, case PLUS): Sign extend masks that are
+ negative in OP_MODE.
+ (simplify_and_const_int): Sign-extend constants when they have the
+ most significant bit set for the target.
+ (merge_outer_ops): Likewise.
+ (simplify_shift_const): Likewise.
+
+Mon Apr 3 18:23:48 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * toplev.c (lang_options): Add -f{no-,}repo.
+
+Mon Apr 3 18:13:15 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (nonzero_bits, case REG): Check POINTERS_EXTEND_UNSIGNED.
+ (num_sign_bit_copies, case REG): Likewise.
+ * explow.c (convert_memory_address): New function.
+ (memory_address): Call if it needed.
+ (promote_mode, case POINTER_TYPE): Use Pmode and pointer extension.
+ (allocate_dynamic_stack_space): Convert size from ptr_mode.
+ * expr.c (clear_storage, expand_assignment, store_{expr,constructor}):
+ Use ptr_mode instead of Pmode in some places.
+ (expand_expr, expand_builtin): Likewise.
+ (push_block, store_expr): Convert size to Pmode.
+ (expand_expr, case ADDR_EXPR): Convert from Pmode to ptr_mode.
+
+Mon Apr 3 18:00:52 1995 Jim Wilson <wilson@cygnus.com>
+
+ * explow.c (allocate_dynamic_stack_space): Correct typo in last
+ change.
+
+ * sh.c (gen_shifty_op, case ASHIFTRT): Return 0 if shift count is not
+ a constant.
+
+Mon Apr 3 12:17:10 1995 Michael Meissner (meissner@cygnus.com)
+
+ * expmed.c (extract_bit_field): When converting a SUBREG into a
+ REG, if the system is big endian, adjust the bit offset
+ appropriately.
+
+Mon Apr 3 00:08:45 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * config/i386/linux.h: Include "config/linux.h" instead of
+ "linux.h", to avoid recursion.
+
+Sun Apr 2 23:50:27 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * config/i386/gnuelf.h: Include i386/linux.h instead of
+ i386/linuxelf.h.
+
+Sun Apr 2 17:35:10 1995 Jim Wilson <wilson@cygnus.com>
+
+ * cse.c (simplify_relational_operation): Don't simplify A-B for
+ compare of A and B when the compare is unsigned.
+
+Sun Apr 2 08:23:38 1995 Paul Eggert <eggert@twinsun.com>
+
+ * fixincludes (stdio.h): BSDI 2.0 changed the spelling of _VA_LIST_
+ to _BSD_VA_LIST_.
+
+Sun Apr 2 07:57:28 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * i386/xm-bsd386.h: New file.
+ * configure (i[345]86-*-bsd*): Add xm_file.
+
+ * gcc.c (default_compilers): Pass -W and -w to gnat1.
+
+ * winnt/winnt.h (STDC_VALUE): Add #undef.
+ * i386/winnt.h (LIB_SPEC): Likewise.
+
+Sun Apr 2 07:55:25 1995 Douglas Rupp (drupp@cs.washington.edu)
+
+ * i386/winnt.h (RETURN_POPS_ARGS, ENCODE_SECTION_INFO): Call
+ chain_member_purpose, not chain_member_value.
+ (ASM_FILE_START, LIB_SPEC): Move to here.
+ * winnt/winnt.h (ASM_FILE_START, LIB_SPEC): Delete from here.
+ * tree.c (chain_member_purpose): New function.
+
+Sat Apr 1 12:19:14 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * c-typeck.c (build_binary_op): New variable build_type controls
+ type given to expression when created. Set to integer_type_node for
+ comparison ops instead of result_type so result_type still holds type
+ in which comparison is done. When checking for comparison between
+ signed and unsigned, use result_type rather than (possibly shortened)
+ type of op0. Don't warn about equality comparison of signed operand
+ to unsigned constant that fits in signed type.
+
+Sat Apr 1 09:47:02 1995 Douglas Rupp (drupp@cs.washington.edu)
+
+ * i386/winnt.h (CPP_PREDEFINES): Add definitions for __stdcall
+ and __cdecl.
+ * winnt/winnt.h (LIB_SPEC): Add OLDNAMES.LIB.
+ * winnt/xm-winnt.h: Remove unneeded #define's for non-ANSI functions.
+ * fixinc.winnt: Remove unneeded fixes relating to __stdcall.
+
+ * objc/Makefile (SHELL): New definition.
+
+Sat Apr 1 08:25:26 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_insn): When emitting a BARRIER, don't put it after
+ a deleted insn.
+
+ * reload.c (push_reload): Initialize secondary_{in,out}_icode.
+
+ * gcc.c (print_multilib_info): Don't use LAST_PATH if not set.
+
+Sat Apr 1 08:15:59 1995 Pat Rankin (rankin@eql.caltech.edu)
+
+ * vax.md (extv, extzv): Don't use immediate value for operand 1.
+
+Sat Apr 1 07:48:29 1995 Yury Shevchuk (sizif@botik.yaroslavl.su)
+
+ * stmt.c (expand_asm_operands): Properly ignore invalid reg in clobber.
+
+Sat Apr 1 07:02:24 1995 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c: General code cleanup.
+ Add prototypes for static functions.
+ Remove unnecessary casts to (char *); add casts to (U_CHAR *).
+ Add parentheses suggested by `gcc -Wparentheses'.
+ Rename local variables as suggested by `gcc -Wshadow'.
+ <fcntl.h>, <stdlib.h>, <string.h>, <unistd.h>: New includes.
+ <sys/time.h>, <sys/resource.h>: Include only if defined(RLIMIT_STACK).
+ <time.h>: Include, unless <sys/time.h> already does.
+ (HAVE_FCNTL_H, HAVE_STDLIB_H, HAVE_SYS_TIME_H): New symbols.
+ (HAVE_UNISTD_H, STDC_HEADERS, TIME_WITH_SYS_TIME): Likewise.
+ (__attribute__, PROTO, VA_START, PRINTF_ALIST, PRINTF_DCL): New macros.
+ (PRINTF_PROTO{,_1,_2,_3}, DO_PROTO): Likewise.
+ (bcopy, bzero, bcmp): If #defined by configuration file, use that.
+ If STDC_HEADERS is defined, use standard C functions.
+ If BSTRING is defined, or USG and VMS are not defined, use
+ the C library. Otherwise, use my_bcopy, my_bzero, my_bcmp.
+ (localtime): Remove no-longer-necessary explicit declaration.
+ (getenv, index, rindex): Don't declare explicitly if the
+ appropriate system header should declare it.
+ (fdopen): Remove no-longer-used declaration.
+ (vprintf): Define a subsitute macro if !defined(HAVE_VPRINTF).
+ (main): Replace `fdopen (dup (fileno (stdout)), "w"))'
+ with `stdout'.
+ (get_lintcmd, rescan, create_definition): Use bcmp instead of strncmp
+ when both operands are known to be free of null bytes.
+ (check_macro_name, compare_defs, collect_expansion): Likewise.
+ (do_assert, compare_token_lists, assertion_lookup, do_line): Likewise.
+ (skip_if_group, lookup): Likewise.
+ (rescan): Remove unused label `startagain'.
+ Abort instead of printing nonsense if the stack is corrupted
+ when there was an unterminated successful conditional.
+ (pcfinclude): Include explicit double-cast through GENERICPTR
+ to identify particularly egregious type puns.
+ (create_definition, do_define, check_macro_name): Use %.*s
+ printf format to avoid painful copying-and-casting.
+ (do_once): Return void, not (unused) int.
+ (do_ident, do_pragma, do_sccs): Accept extra arguments so that
+ all directive-handler's types match.
+ (do_sccs): Define only if SCCS_DIRECTIVE is defined.
+ (skip_if_group, dump_single_macro): Add `default: break;' to
+ keep -Wswitch happy.
+ (error, warning, error_with_line, vwarning_with_line, pedwarn): Use
+ stdarg/vararg/vfprintf instead of passing bogus char * args around.
+ (pedwarn_with_line, pedwarn_with_file_and_line, fatal): Likewise.
+ (verror, vwarning, verror_with_line, vwarning_with_line): New fcns.
+ (dump_single_macro): Abort if ap points to garbage.
+ (make_definition, make_undef, make_assertion): Parameter now char *.
+ (xmalloc, xrealloc, xcalloc, savestring, index0): Make sizes size_t
+ instead of unsigned; make pointer parameters GENERICPTR, not char *.
+ (xcalloc): Use bzero to clear memory instead of using own loop.
+
+Fri Mar 31 08:33:07 1995 Ken Raeburn (raeburn@wombat.gnu.ai.mit.edu)
+
+ * longlong.h (umul_ppmm mc68000): Use %# instead of #.
+
+Fri Mar 31 06:37:54 1995 Michael Meissner (meissner@cygnus.com)
+
+ * stor-layout.c (layout_decl): Implment -fpack-struct.
+ (layout_record): Ditto.
+
+ * flags.h (flag_pack_struct): New flag variable.
+
+ * toplev.c (flag_pack_struct): New flag variable.
+ (f_options): Add -fpack-struct support.
+
+ * Makefile.in (stor-layout.o): Add flags.h dependency.
+
+Fri Mar 31 08:40:16 1995 Douglas Rupp (drupp@cs.washington.edu)
+
+ * configure (i[345]86-*-winnt3*): Add tmake_file.
+ * i386/x-winnt (winnt.o): Deleted.
+ * i386/t-winnt: New file.
+
+Fri Mar 31 07:26:37 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * m68k/netbsd.h, m68k/hp3bsd44.h: Remove #include of machine/ansi.h.
+
+ * configure (a29k-*-bsd): Set tmake_file to t-libc-ok.
+
+ * stmt.c (expand_asm_operands): Properly handle output that can't
+ be directly written into.
+
+ * c-parse.in (structsp): Correct error in last change.
+ * c-common.c (init_attributes): A_FORMAT is only for decls.
+
+Thu Mar 30 18:27:34 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * libgcc2.c: Remove explicit 0-initializations of static variables.
+
+Thu Mar 30 18:22:39 1995 Fergus Henderson <fjh@cs.mu.oz.au>
+
+ * c-typeck.c (internal_build_compound_expr): Warn if LHS of comma
+ expression has no side effects, or computes value which is not used.
+ * stmt.c (make warn_if_unused_value): No longer static.
+ * tree.h (warn_if_unused_value): Add declaration.
+
+Thu Mar 30 18:15:11 1995 Jim Wilson <wilson@cygnus.com>
+
+ * combine.c (get_last_value): Revert back to use prev_nonnote_insn
+ instead of prev_real_insn. Modify test that ignores USE insns.
+
+ * rs6000.h (SELECT_SECTION): Apply constant DECL_INITIAL test
+ only to DECLs.
+
+ * explow.c (allocate_dynamic_stack_space): Test STACK_BOUNDARY against
+ BIGGEST_ALIGNMENT at run time instead of at compile time.
+ Give MUST_ALIGN macro a value, and test this value in if statements.
+
+Thu Mar 30 08:59:56 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-parse.in: Now have 27 shift/reduce conflicts.
+ (attribute_list): Just make chain of all attributes.
+ (attrib): Consistently put name as PURPOSE, args, if any, as VALUE.
+ (structsp): Allow attributes on any struct or union.
+ * c-common.c (enum attrs): New enum class.
+ (attrtab, attrtab_idx): New variables.
+ (add_attribute, init_attributes): New functions.
+ (decl_attributes): Major rewrite.
+ * tree.c (valid_machine_attribute): Now receive name and args.
+
+Thu Mar 30 07:20:14 1995 Paul Eggert <eggert@twinsun.com>
+
+ * protoize.c: Use the phrase `preprocessing directive' consistently.
+ * cccp.c (handle_directive, do_line, skip_if_group): Likewise.
+ (output_line_directive): Renamed from output_line_command.
+ (no_line_directives): Renamed from no_line_commands.
+
+ * cccp.c (rescan): Don't recognize preprocessing directives
+ within macro args. Warn if one is found.
+
+Thu Mar 30 06:20:36 1995 H.J. Lu (hjl@nynexst.com)
+
+ * configure (i[345]86-*-linux*): Set xmake_file=x-linux,
+ tm_file=i386/linux.h, and don't set extra_parts.
+ (i[345]86-*-linux*aout*): New configuration.
+ (i[345]86-*-linuxelf): Deleted.
+ * config/linux{,-aout}.h, config/x-linux, config/xm-linux.h: New files.
+ * config/i386/linux-aout.h: New file.
+ * config/i386/linux.h: Extensive modifications to use ELF format
+ as default.
+ (LIB_SPEC): Don't use libc_p.a for -p. don't use libg.a
+ unless for -ggdb.
+ (LINUX_DEFAULT_ELF): Defined.
+ * config/i386/linuxelf.h,config/i386/x-linux: Files deleted.
+ * config/i386/xm-linux.h: Just include xm-i386.h and xm-linux.h.
+
+Wed Mar 29 19:09:36 1995 Mike Stump <mrs@cygnus.com>
+
+ * libgcc2.c (__throw_type_match): Update to use new calling convention.
+
+Wed Mar 29 14:53:23 1995 Jim Wilson <wilson@cygnus.com>
+
+ * gcc.c (process_command): Delete code modifying gcc_exec_prefix.
+ (main): Put it here after last use of gcc_exec_prefix. For cross
+ compiler, set startfile_prefixes if gcc_exec_prefix is set and
+ standard_startfile_prefix is a relative path.
+
+ * combine.c (make_compound_operation, AND case): Undo July 7, 1994
+ change.
+
+ * mips/mips.md (call_internal1, call_value_internal1): Move %* from
+ start of assembler output to immediately before the jal.
+
+ * mips/mips.c (function_prologue): Put SDB_DEBUGGING_INFO ifdef around
+ code for SDB_DEBUG support.
+ (mips_select_rtx_section, mips_select_section): Change rdata_section
+ to READONLY_DATA_SECTION and sdata_section to SMALL_DATA_SECTION.
+ * mips/mips.h (SMALL_DATA_SECTION): Define.
+
+ * reorg.c (mark_referenced_resources): Make setjmp use all registers.
+
+ * flow.c (mark_used_regs, case SUBREG): Only fall through to REG case
+ if operand is a REG.
+
+ * i960/i960.h (TARGET_SWITCHES): Make -mold-align set
+ TARGET_FLAG_STRICT_ALIGN.
+ (STRICT_ALIGNMENT): Test TARGET_STRICT_ALIGN.
+
+ * sh/sh.c (andcosts): Modify costs to match the hardware, and add
+ explanatory comments.
+
+ * sparc/sol2.h (CPP_PREDEFINES): Add -D__SVR4.
+
+Wed Mar 29 14:30:30 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000/rs6000.md (movsf): When moving to/from integer registers,
+ don't move floating point to memory if it is being simulated with
+ -msoft-float.
+
+Wed Mar 29 06:47:36 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-parse.in (initdcl): Only call decl_attributes once.
+ * c-common.c (decl_attributes): Clean up test for __mode__.
+
+Tue Mar 28 08:34:37 1995 John Hassey (hassey@dg-rtp.dg.com)
+
+ * i386.md (adddi3): Don't treat two non-equal MEMs as non-aliasing.
+
+Tue Mar 28 08:20:49 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * a29k.h (CONSTANT_ADDRESS_P): Provide consistent definition.
+
+Tue Mar 28 07:26:41 1995 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (do_xifdef, do_endif): Remove unnecessary pointer comparisons.
+
+Mon Mar 27 20:45:15 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * calls.c (expand_call, store_one_arg): Don't set KEEP in calls
+ to assign_stack_temp.
+ * function.c (preserve_temp_slots): Clear ADDR_TAKEN on item
+ that we are preserving.
+
+Mon Mar 27 14:39:35 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * mips/mips.h (FIRST_PSEUDO_REGISTER): Increment.
+ (FIXED_REGISTERS, CALL_USED_REGISTERS): Add new register.
+ (MD_REG_LAST): Increment.
+ (ST_REG_FIRST, ST_REG_LAST): Increment.
+ (HILO_REGNUM): Define.
+ (enum reg_class): Add HILO_REG.
+ (REG_CLASS_NAMES): Add "HILO_REG".
+ (REG_CLASS_CONTENTS): Add HILO_REG initializer, and adjust ST_REGS
+ and ALL_REGS initializers.
+ (SECONDARY_RELOAD_CLASS): Remove.
+ (SECONDARY_INPUT_RELOAD_CLASS): Define.
+ (SECONDARY_OUTPUT_RELOAD_CLASS): Define.
+ (REGISTER_MOVE_COST): Treat HILO_REG as MD_REGS.
+ (REGISTER_NAMES): Add initialization line.
+ (DEBUG_REGISTER_NAMES): Add "accum".
+ * mips/mips.md: For each instruction which sets HI or LO, clobber
+ HILO_REGNUM with (clobber (match_scratch:MODE N "=a")). Change
+ each explicit reference to register 66 to register 67.
+ (mulsidi3): Change to define_expand.
+ (mulsidi3_internal): New name of old mulsidi3.
+ (mulsidi3_64bit): New insn.
+ (umulsidi3): Change to define_expand.
+ (umulsidi3_internal): New name of old umulsidi3.
+ (umulsidi3_64bit): New insn.
+ (madddi_64bit, umaddi_64bit): New insns.
+ (movdi_internal2): Add case for setting HILO_REG to zero.
+ (reload_indi, reload_outdi): New define_expands.
+ (movsi_internal1, movsi_internal2): Add cases for setting MD_REGS
+ to zero, and for setting a general reg to HILO_REG.
+ (reload_outsi): New define_expand.
+ * mips/mips.c (mips_reg_names): Add "accum".
+ (mips_sw_reg_names): Likewise.
+ (mips_regno_to_class): Map HILO_REGNUM to HILO_REG.
+ (mips_move_1word): Handle moving HILO_REGNUM to a general
+ register. Make sure that the normal MD_REG cases aren't used for
+ HILO_REGNUM. Handle moving zero to a MD_REG.
+ (mips_move_2words): Make sure that the normal MD_REG cases aren't
+ used for HILO_REGNUM. Handle moving zero to a MD_REG.
+ (override_options): Set mips_char_to_class for 'a' and 'b'.
+ (mips_secondary_reload_class): Add in_p argument. Handle
+ HILO_REGNUM.
+
+Mon Mar 27 07:16:05 1995 Warner Losh <imp@village.org>
+
+ * gcc.c: Removed __NetBSD__ from conditional.
+ Declare strerror if HAVE_STRERROR is defined; otherwise
+ declare sys_errlist and sys_nerr.
+ (my_strerror): New function.
+
+Fri Mar 24 18:08:14 1995 Jason Merrill <jason@python.cygnus.com>
+
+ * i386/linux.h (LIB_SPEC): Don't try to link with libraries we
+ know only exist in archive form unless -static.
+
+Fri Mar 24 16:12:16 1995 Doug Evans <dje@cygnus.com>
+
+ * Makefile.in (multilib.h): Depend on Makefile, not config.status.
+
+Fri Mar 24 15:01:17 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000/rs6000.h (TARGET_MULTIPLE_SET): New target_flags bit that
+ indicates -mmultiple or -mno-multiple was explicitly passed by the
+ user, and not set as part of the cpu defaults.
+ (TARGET_SWITCHES): Set TARGET_MULTIPLE_SET bit for both -mmultiple
+ and -mno-multiple.
+
+ * rs6000/rs6000.c (rs6000_override_options): If -mmultiple or
+ -mno-multiple was explicitly used, don't override the setting with
+ the processor default.
+
+Wed Mar 22 21:42:13 1995 Doug Evans <dje@cygnus.com>
+
+ * i960/i960.c (i960_function_arg_advance): Ensure all regs marked
+ as used if stack is also used (for va_start).
+ (i960_setup_incoming_varargs): Rewrite to be similar to Intel's
+ version, but don't allocate reg block unless necessary.
+ * ginclude/va-i960.h (varargs va_start): Save g14 explicitly.
+ Account for arguments preceding va_alist.
+
+Wed Mar 22 13:24:55 1995 Torbjorn Granlund <tege@adder.cygnus.com>
+
+ * pa.c (singlemove_string): Handle SFmode constants again. Simplify.
+ (zdepi_cint_p): Make some variables HOST_WIDE_INT.
+ (lhs_lshift_cint_operand): Likewise.
+ (output_and): Likewise.
+ (output_ior): Likewise.
+
+Wed Mar 22 12:40:09 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * sh.md (udivsi3): Don't clobber register 6.
+ (udivsi3, divsi3, mulsi3_call): Use a pseudo-reg with regclass 'z'
+ for output rather than hard register 0.
+ (block_move_real): Don't clobber registers 4 and 5.
+
+ * mips.c (mips_select_section): Apply constant DEC_INITIAL tests
+ only to VAR_DECLs.
+
+Wed Mar 22 03:53:17 1995 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * config.sub (rm400, rm600): New machine names.
+ (sinix5.*, sinix): New os aliases.
+ (mips-siemens): Default os to sysv4.
+
+Mon Mar 20 21:56:47 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ Merged Paul Eggert's patch to cccp.c of Wed Mar 8 18:21:51 1995:
+ * cpplib.c (do_include): Fix type typo: pcfbuflimit is char *, not int.
+
+ Merged Doug Evans' patch to cccp.c of Mon Feb 27 17:06:47 1995:
+ * cpplib.c (do_include): Check for redundant file before opening in
+ relative path case. Don't call fstat unnecessarily.
+
+ Merged J.T. Conklin's patch to cccp.c of Wed Feb 22 20:29:31 1995:
+ * cpperror.c: Removed __NetBSD__ from conditional.
+
+ Merged Kenner's patch to cccp.c & cexp.y of Tue Sep 20 17:49:47 1994:
+ * cppexp.c (struct operation): Make value by HOST_WIDE_INT.
+ (cpp_parse_expr): Change return type to HOST_WIDE_INT.
+ * cpplib (eval_if_expr): Likewise.
+ (do_if, do_elif): Update appropriately.
+ * cpplib.h (cpp_parse_expr): Removed, to avoid defining HOST_WIDE_INT.
+
+ Merged Paul Eggert's patch to cccp.c of Mon Aug 8 19:42:09 1994:
+ * cpplib.c (create_definition): Warn about `#define a@', since a
+ diagnostic is now required (see ISO TC1's addition to subclause 6.8).
+ Also warn about `#define is-empty(x) (!x)'.
+
+Tue Mar 21 00:10:50 1995 Jeffrey A. Law <law@mole.gnu.ai.mit.edu>
+
+ * x-pa (CC): Add "-Dbsd4_4".
+
+Mon Mar 20 18:40:31 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * toplev.c (print_error_function): New function hook.
+ (default_print_error_function): New function. Default value
+ of print_error_function. Code moved here from report_error_function.
+ (report_error_function): Use print_error_function hook.
+
+Mon Mar 20 20:27:43 1995 Doug Evans <dje@cygnus.com>
+
+ * cccp.c (do_xifdef): Handle c++ comments.
+ (do_endif): Likewise.
+
+Mon Mar 20 15:31:45 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * configure (i386 configurations): Prepend i386/ to t-crt*.
+
+Mon Mar 20 07:58:04 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * stmt.c (fixup_gotos): Add missing call from last change.
+
+ * objc/misc.c: Put Alpha-specific decls before #include of runtime.h.
+
+ * alpha.h (EXTRA_SECTIONS): Write zeros first time in .rdata.
+
+Sat Mar 18 16:37:24 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * flow.c (mark_used_regs, case SUBREG): Set reg_changes_size even
+ for integer modes.
+ (mark_used_regs): Set reg_changes_size for RHS, if necessary.
+ * combine.c (gen_lowpart_for_combine): Set reg_changes_size, if needed.
+ * reload.c (push_reload): Reload a SUBREG if paradoxical and
+ class is CLASS_CANNOT_CHANGE_SIZE.
+ * reload1.c (gen_reload): Handle paradoxical SUBREGs.
+ * alpha.h (SECONDARY_{INPUT,OUTPUT}_RELOAD_CLASS): Need GENERAL_REGS
+ for paradoxical SUBREG and FLOAT_REGS.
+ (SECONDARY_NEEDED_MODE): Use actual mode for 4 bytes or wider.
+ * alpha.md (movsi): Allow FP regs and add case for store of FP reg.
+ Remove cvtlq from MEM to FP reg case.
+
+ * rtl.h (emit_insns_after): Add declaration.
+ * stmt.c (fixup_gotos): Do a cleanup for a block when it is exited
+ even if label if not defined yet.
+
+ * function.c (pop_function_context): Fix error in last change;
+ reference old value of current_function_decl before we modify it.
+
+Fri Mar 17 21:57:44 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * toplev.c (rest_of_compilation): Handle -Wreturn-type properly
+ for inlines we aren't compiling yet.
+
+Fri Mar 17 21:26:48 1995 Mike Stump <mrs@cygnus.com>
+
+ * libgcc2.c (__register_exceptions): Handle empty tables.
+
+Fri Mar 17 11:48:31 1995 Douglas Rupp (drupp@cs.washington.edu)
+
+ * i386/winnt.c (winnt_function_prologue): Deleted.
+ (gen_stdcall_suffix): New function.
+
+Thu Mar 16 17:36:52 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * svr4.h (LINK_SPEC): If the user did not specify -h name, use the
+ output file name, if any.
+ * sparc/sol2.h (LINK_SPEC): Ditto. Also, if the user did not
+ specify -R path, add an -R for each -L.
+
+ Move SunOS 4-specific assembler switches into the appropriate place.
+ * m68k/sun[23].h (ASM_SPEC): Add %{R} %{j} %{J} %{h} %{d2}
+ %{keep-local-as-symbols:-L}.
+ * i386/sun.h (ASM_SPEC): Add %{R} %{keep-local-as-symbols:-L}.
+ * sparc/sparc.h (ASM_SPEC): Ditto.
+ * gcc.c (default_compilers): Remove %{R} %{j} %{J} %{h} %{d2}
+ %{keep-local-as-symbols:-L} from assembler rules.
+
+Thu Mar 16 16:58:09 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000/eabi-ctors.c: New file, handle C++ static constructors
+ and destructors without requiring anything else from a libc.
+
+ * rs6000/t-eabi (LIB2FUNCS_EXTRA): Build eabi-ctors.c.
+
+ * rs6000/eabi.asm: Do not load up register 2 if there is no .got
+ section. Jump to the __do_global_ctors function at the end of
+ processing to call C++ static constructors, and it will return to
+ __eabi's caller. Use normal volatile registers, instead of saving
+ and restoring registers 30 and 31.
+
+ * rs6000/eabi.h (STARTFILE_SPEC): Define as null.
+ (LIB_SPEC): Ditto.
+ (ENDFILE_SPEC): Ditto.
+ (LIBGCC_SPEC): Always look for libgcc.a.
+
+Thu Mar 16 17:05:14 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * stmt.c (warn_if_unused_value, case SAVE_EXPR): New case.
+ (warn_if_unused_value, case NOP_EXPR): OK if CALL_EXPR inside.
+
+ * c-common.c (decl_attributes): Allow alignment for TYPE_DECLs.
+
+ * Makefile.in (xsys-protos.h): Fix typo in -U operand.
+
+Thu Mar 16 13:49:10 1995 Per Bothner <bothner@rtl.cygnus.com>
+
+ * cpplib.c, cpplib.h: New files - a C PreProcessor library.
+ * cpphash.c, cpphash.h, cppalloc.c, cpperror.c, cppexp.c:
+ New files - utility features used by cpplib.
+ * cppmain.c: New file - cpp replacement main program for cpplib.
+ * Makefile.in: New rules to build cppmain.
+
+Thu Mar 16 16:11:05 1995 Douglas Rupp (drupp@cs.washington.edu)
+
+ * i386/winnt.h (FUNCTION_PROLOGUE, HAVE_probe, gen_probe): Deleted.
+ (ENCODE_SECTION_INFO, VALID_MACHINE_DECL_ATTRIBUTE): New macro.
+
+Thu Mar 16 15:58:24 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (apply_distributive_law, case SUBREG): Fix typo when
+ checking for paradoxical SUBREG.
+
+Wed Mar 15 18:45:08 1995 Doug Evans <dje@cygnus.com>
+
+ * libgcc1-test.c: Renamed from cross-test.c.
+ * Makefile.in (LIBGCC1_TEST): Renamed from CROSS_TEST.
+ (all.cross): Delete $(ENQUIRE) dependency.
+ (libgcc1-test): Renamed from cross-test.
+ Delete unnecessary gcc-cross and $(LIBGCC) dependencies.
+ Link with -nostartfiles -nostdlib
+ `$(GCC_FOR_TARGET) --print-libgcc-file-name`.
+ (libgcc1-test.o): Renamed from cross-test.o.
+ Change gcc-cross dependency to xgcc since the latter is used.
+
+Wed Mar 15 13:49:21 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * tree.c (save_tree_status): Now takes a tree 'context' instead of
+ a boolean 'toplevel' as an argument. If 'context' is not
+ current_function_decl, create a new obstack for the new function.
+ Also save inline_obstacks.
+ (restore_tree_status): No longer takes a second argument. Also
+ restore inline_obstacks.
+ (temporary_allocation): Clear inline_obstacks.
+ (permanent_allocation): Free up the obstacks in inline_obstacks.
+
+ * function.h (struct function): New fields contains_functions and
+ inline_obstacks.
+
+ * function.c (push_function_context_to): Now takes a tree
+ 'context' instead of a boolean 'toplevel' as an argument.
+ Also save current_function_contains_functions.
+ (push_function_context): Pass current_function_decl to it.
+ (pop_function_context_from): Takes 'context' instead of 'toplevel'.
+ Set current_function_contains_functions properly.
+ (pop_function_context): Pass current_function_decl to it.
+
+Wed Mar 15 14:53:09 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000/rs6000.md (abssi2): Turn into a define_expand. If
+ TARGET_POWER, do old code that uses the abs instruction. If not,
+ do abs in three instructions, using a temporary register, which
+ enables generating more reasonable code for sne. Add a recognizer
+ for negative of the absolute value. Add define_splits for the
+ PowerPC.
+ (sne insn): Add a recognizer for sne on the PowerPc to use two
+ instructions, compared to the four generated using the absolute
+ value insn.
+
+Tue Mar 14 18:38:40 1995 J.T. Conklin <jtc@cygnus.com>
+
+ * m68k.md ({add,sub,mul,div}[sdx]f3): Add new patterns for recognizing
+ SImode, HImode, and QImode operands.
+
+Mon Mar 13 18:59:36 EST 1995 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.h (CPP_SPEC): Add PPC403.
+ (processor_type): Add PPC403.
+ (RTX_COSTS): Add PPC403.
+ * powerpc.h (CPP_SPEC): Add PPC403.
+ * sysv4.h (CPP_SPEC): Add PPC403.
+ * rs6000.c (processor_target_table): Add PPC403.
+ * rs6000.md (define_attr cpu and function units): Add PPC403.
+
+Mon Mar 13 14:40:23 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000/rs6000.md (call, call_value insns): Do not put a nop
+ after a bl instruction on System V.4 and eABI.
+
+ * rs6000/sysv.4 (SUBTARGET_SWITCHES): Add support for
+ -mno-traceback to suppress the V.4 traceback word.
+ (ASM_DECLARE_FUNCTION_NAME): Don't put out a traceback work if
+ -mno-traceback.
+
+Mon Mar 13 13:36:37 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * t-svr4, i386/t-{crtpic,sol2}, m88k/t-svr4, sparc/t-sol2:
+ Use -fPIC, rather than -fpic, for building crtstuff.
+
+Sat Mar 11 17:27:08 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * configure: Use aix3newas.h for AIX 3.2.4 and 5.
+ * rs6000/aix41.h: Undefine ASM_OUTPUT_EXTERNAL{,_LIBCALL}.
+ * rs6000/aix3newas.h: New file. Define ASM_SPEC to -u, and
+ undefine ASM_OUTPUT_EXTERNAL{,_LIBCALL}.
+
+Sat Mar 11 06:42:50 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * dbxout.c (dbxout_symbol): Properly handle decl whose DECL_NAME
+ points to a TYPE_DECL with a zero TYPE_NAME.
+
+Fri Mar 10 18:18:33 1995 Torbjorn Granlund <tege@cygnus.com>
+
+ * pa.h (PROMOTE_MODE): Define.
+
+Fri Mar 10 14:37:58 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * sdbout.c (sdbout_record_type_name): If TYPE_NAME is
+ a TYPE_DECL, get name from DECL_NAME.
+
+Fri Mar 10 14:09:26 1995 Doug Evans <dje@cygnus.com>
+
+ * arm/riscix.h (SUBTARGET_SWITCHES): Renamed from
+ ARM_EXTRA_TARGET_SWITCHES.
+ * arm/riscix1-1.h (SUBTARGET_SWITCHES): Likewise.
+ * arm.h (SUBTARGET_SWITCHES): Likewise.
+ (TARGET_HARD_FLOAT, TARGET_SOFT_FLOAT): Define.
+ (TARGET_SWITCHES): Add -msoft-float, -mhard-float.
+ (BYTES_BIG_ENDIAN): Delete #ifndef/#endif.
+ (CONDITIONAL_REGISTER_USAGE): If -msoft-float, disable fp regs.
+ (FUNCTION_VALUE): R16 is return reg only if !-msoft-float.
+ (LIBCALL_VALUE): Likewise.
+ * arm.md (all fp patterns): Conditionalize on TARGET_HARD_FLOAT.
+ (*movsf_soft_insn, *movdf_soft_insn): New patterns.
+
+Fri Mar 10 13:53:46 1995 Jim Wilson <wilson@cygnus.com>
+
+ * reorg.c (steal_delay_list_from_target): Exit at the top if the
+ branch in SEQ is not a single set.
+
+ * sh.md (movdi define_split, movdf define_split): Correct indentation
+ and formatting. Make the condition fail if an operand is a MEM
+ with an auto-inc address.
+
+ * varasm.c (copy_constant): Copy operand of ADDR_EXPR if it is a
+ constant.
+
+ * mips/abi64.h (SETUP_INCOMING_VARARGS): Correct arguments to
+ move_block_from_reg call.
+
+ * expr.c (expand_assignment): When offset is zero, make new MEM
+ before setting MEM_VOLATILE_P.
+
+ * reload.c (find_reloads, case 'o'): Accept a fully reloaded
+ auto-increment address.
+
+ * combine.c (max_uid_cuid): New static variable.
+ (INSN_CUID): Call abort if INSN is out of range.
+ (combine_instructions): Set max_uid_cuid. Set uid_cuid directly
+ instead of through INSN_CUID.
+ (get_last_value): Use prev_real_insn instead of prev_nonnote_insn.
+ Ignore USE insns generated by combine.
+
+Fri Mar 10 13:47:08 1995 Rod Barman <rodb@cs.ubc.ca>
+
+ * m68k/fpgnulib.c (__fixdfsi): Catch values < 0.5 in magnitude.
+
+Fri Mar 10 12:02:33 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * fixincludes: Fix `typedef struct term;' on hppa1.1-hp-hpux9.
+
+Fri Mar 10 05:50:11 1995 Oliver Kellogg (Oliver.Kellogg@RST13.DASA.DBMAIL.d400.de)
+
+ * 1750a.c (sectname): Reverse Init and Normal.
+ (print_operand_address, case PLUS): Add case for LABEL_REF.
+ (print_operand_address, case LABEL_REF): Split fom SYMBOL_REF.
+ (print_operand_address, case CODE_LABEL): New case.
+ (ASM_FILE_END): Delete.
+ * 1750a.h (FUNCTION_EPILOGUE): Restore stack before freeing local vars.
+ (DEFAULT_SIGNED_CHAR): Now 1.
+ (DATA_SECTION_ASM_OP): Use pseudo-op for read-only data (later copied).
+ (JUMP_TABLES_IN_TEXT_SECTION): Define.
+ (ASM_OUTPUT_ASCII): Split into multiple lines if long.
+ (ASM_OUTPUT_{CHAR,SHORT,INT,LONG_INT}): Split up.
+ (ASM_OUTPUT_COMMON): Call check_section.
+
+Thu Mar 9 12:46:53 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000.md (movsf): Do not call truncdfsf2 for non PowerPC
+ when expanding a store to memory and -msoft-float was used.
+
+Thu Mar 9 08:51:35 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-decl.c (start_function): Handle new parameter ATTRIBUTES.
+ * c-tree.h (start_function): Add new parameter.
+ * c-lang.c (finish_file): Pass new parm to start_function.
+ * objc-act.c (build_module_descriptor, really_start_method): Likewise.
+ * c-parse.in (fndef, nested_function): Pass prefix_attributes
+ to start_function.
+ (setspecs): Save prefix_attributes in declspec_stack.
+ (decl rules): Restore prefix_attributes along with current_declspecs.
+ (setattrs): Concatenate prefix_attributes to previous value.
+ * c-common.c (decl_attributes): Handle prefix and suffix attributes
+ the same way.
+
+ * print-tree.c (print_node): Fix typo in printing large INTEGER_CST.
+
+ * varasm.c (assemble_variable): Consistently use DECL_SIZE for
+ everything.
+
+ * c-typeck.c (convert_for_assignment): Fix typo in testing for
+ pointer to function type.
+
+ * varasm.c (record_constant_1): Handle NON_LVALUE_EXPR.
+ Rewrite to use switch instead of if/then/elseif/else.
+
+Wed Mar 8 18:21:51 1995 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (do_include): Fix type typo: pcfbuflimit is char *, not int.
+
+Wed Mar 8 17:30:29 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (force_fit_type): Always propagate OVERFLOW.
+
+ * rtl.def (INLINE_HEADER): Add new "e" field.
+ * rtl.h (FORCED_LABELS): New field; other fields adjusted.
+ (gen_inline_header_rtx): New parm FORCED_LABELS.
+ * emit-rtl.c (gen_inline_header): Add new parm FORCED_LABELS.
+ * integrate.c (initialize_for_inline, output_inline_function):
+ Handle FORCED_LABELS.
+
+Wed Mar 8 13:47:20 1995 Jason Merrill (jason@cygnus.com)
+
+ * alpha.h (WORD_SWITCH_TAKES_ARG): Add -rpath.
+ (LINK_SPEC): Pass through -taso and -rpath.
+ * alpha/osf12.h (LINK_SPEC): Ditto.
+
+Wed Mar 8 09:59:56 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000/eabi.asm: Rewrite so that the initialized pointers go
+ into the .got2 section, which allows eabi.asm to be assembled with
+ the -mrelocatable option. Move the data picked up from the bl
+ instruction to before the traceback tag.
+
+ * rs6000/sysv4.h (CPP_SPEC): Define _RELOCATABLE if -mrelocatable
+ switch is used.
+
+ * libgcc2.c (__new_handler): Don't initialize the pointer variable
+ with the address of __default_new_handler, which may not work in
+ some shared library mechanisms.
+ (__builtin_new): If __new_handler is NULL, call the function
+ __default_new_handler.
+
+Tue Mar 7 17:34:59 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * i960.h (PROCESS_PRAGMA): Define.
+ (ROUND_TYPE_ALIGN): Pass maximum of COMPUTED and SPECIFIED to
+ i960_round_align.
+ (ROUND_TYPE_SIZE): Delete.
+ * i960.c (process_pragma): Uncomment, and rewrite for gcc 2.
+ (i960_round_size): Delete.
+ (i960_round_align): Don't adjust suggested alignment downward.
+ Restrict alignment to value set by #pragma align.
+
+Tue Mar 7 12:14:46 1995 Doug Evans <dje@cygnus.com>
+
+ * configure (sparc64-*-elf): Add crtbegin.o, crtend.o to extra_parts.
+ * sparc/sp64-elf.h (TARGET_VERSION): Define.
+ (CPP_PREDEFINES): Delete sun, sparc, unix. Delete OS assertions.
+ (ASM_SPEC): Define.
+ (LINK_SPEC): Delete solaris stuff, this is an embedded target.
+ (STARTFILE_SPEC, ENDFILE_SPEC): Define.
+
+Mon Mar 6 17:54:01 1995 Doug Evans <dje@cygnus.com>
+
+ * Makefile.in (install-common): Fix typo in installation of cpp.
+ Likewise with gcc-cross.
+
+Mon Mar 6 02:29:05 1995 Jeffrey A. Law <law@mole.gnu.ai.mit.edu>
+
+ * pa.md (movsicc): New expander.
+
+Fri Mar 3 13:34:20 1995 Michael Meissner (meissner@cygnus.com)
+
+ * rs6000/sysv4.h (ASM_SPEC): If -mrelocatable was passed to
+ compiler, pass it on to the assembler.
+
+Fri Mar 3 12:11:28 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * fixincludes: Add fixes for VxWorks header files.
+ * ginclude/stddef.h: If VxWorks typedef macros are defined, invoke
+ them as appropriate.
+
+Fri Mar 3 05:48:54 1995 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (dump_single_macro): Fix typo: % wasn't properly
+ doubled in printf formats.
+
+Thu Mar 2 19:44:02 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * expr.c (expand_expr, CLEANUP_POINT_EXPR): Force the operand out
+ of memory before running cleanups.
+
+Thu Mar 2 19:15:24 1995 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (rescan): Prevent accidental token-pasting to
+ get !=, *=, /=, ==, or ^=.
+
+Thu Mar 2 15:37:13 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * c-typeck.c (build_binary_op): Avoid spurious warning
+ comparing enumerator to unsigned variable.
+
+Thu Mar 2 18:18:38 1995 J.T. Conklin <jtc@netbsd.org>
+
+ * m68k.md (sqrtsf2,sqrtdf2): Use fp precision specifiers.
+
+Thu Mar 2 18:09:01 1995 Stephen L Moshier (moshier@world.std.com)
+
+ * c-lex.c (yylex, case !NOT_FLOAT): Remove previous change.
+
+Thu Mar 2 15:26:50 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * Makefile.in (bootstrap*): Pass new STAGE_PREFIX to recursive makes.
+
+Wed Mar 1 14:52:16 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * i960/i960-coff.h (ASM_FILE_START): Define.
+ (CTORS_SECTION_ASM_OP, DTORS_SECTION_ASM_OP): Define.
+ (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS): Define.
+ (CTORS_SECTION_FUNCTION, DTORS_SECTION_FUNCTION): Define.
+ (INT_ASM_OP): Define.
+ (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): Define.
+ * i960/vx960-coff.h (CPP_PREDEFINES): Define.
+ (CPP_SPEC): Define.
+ (CC1_SPEC): Default to -mca.
+
+Wed Mar 1 11:10:54 1995 Michael Meissner (meissner@cygnus.com)
+
+ * rs6000/rs6000.c (output_prologue): Do not emit the word that
+ gives the PC relative location to the local GOT table for the
+ -mrelocatable option here.
+ * rs6000/sysv4.h (ASM_DECLARE_FUNCTION_NAME): Emit it here.
+
+ * t-eabi (MULTILIB_OPTIONS, MULTILIB_DIRNAMES): Build -msoft-float
+ and -mrelocatable versions of the library.
+
+ * rs6000/powerpc.h (CPP_PREDEFINES): Define the cpu and machine as
+ powerpc, not rs6000.
+
+ * libgcc2.c (_unwind_function): Clone for powerpc, using the
+ PowerPC mnemonics.
+
+ * rs6000/rs6000.md (uminsi3, umaxsi3): Silence warnings that
+ -2147483648 is too large to fit in a signed integer on 32-bit
+ hosts.
+
+Wed Mar 1 06:48:31 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * fold-const.c (decode_field_reference): Don't check TREE_CODE
+ of EXP; let get_inner_reference decide if have reference.
+ Allow no bit reference if have AND_MASK.
+ (all_ones_mask_p): Use tree_int_cst_equal, not operand_equal_p.
+ (unextend): New function.
+ (fold_truthop): For constant cases, use new function, rework
+ conversion, and warn if comparison can never be true.
+
+ * expr.c (store_expr): Do conversion in two steps for promoted lhs.
+
+See ChangeLog.9 for earlier changes.
diff --git a/gcc/ChangeLog.2 b/gcc/ChangeLog.2
new file mode 100644
index 00000000000..a5e092c26a7
--- /dev/null
+++ b/gcc/ChangeLog.2
@@ -0,0 +1,7229 @@
+Thu Jan 31 00:33:33 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * loop.c (scan_loop): Check each libcall for regs it uses
+ but does not mention in the equivalent value.
+ To move the libcall, we must have at most one such reg
+ and it must be moved as well.
+ (libcall_other_reg): New subroutine.
+ * rtlanal.c (record_excess_regs): New function.
+
+ * tree.c (gcc_obstack_init): New function.
+ (init_obstacks, save_tree_context): Use that.
+ (OBSTACK_CHUNK_SIZE): New parameter.
+ * xm-next.h: New file.
+ * configure (m68k/next): Use that file.
+
+ * flags.h (flag_no_common): Declare new flag to treat external defs
+ as ANSI specifies (i.e. not as common).
+ * toplev.c (flag_no_common, f_options): Support -fno-common.
+ * varasm.c (assemble_variable): Don't output a common if
+ flag_no_common is set. Treat as if initialized to 0.
+
+ * gcc.c (default_compilers): Define __ASSEMBLER__ for .S file.
+
+ * tm-aix386.h (ASM_OUTPUT_LOCAL): Ok to use bss, since no shared libs.
+ (LINK_SPEC): Pass through all -K and -T options.
+ * xm-aix386.h (TRUE, FALSE): Undef if already def, to avoid warning.
+
+ * tm-m68k.h (TARGET_68040, TARGET_68040_ONLY): New machine flags.
+ (TARGET_SWITCHES): Alternatives to set them.
+ * tm-next.h (TARGET_DEFAULT): Changed to 0407 for 68040.
+
+ * out-m68k.h (standard_68881_constant_p): Always return 0
+ for TARGET_68040 since fmovecr is no longer implemented in hardware.
+
+ * m68k.md (ftruncdf2, ftruncsf2): Don't emit fintrz for
+ TARGET_68040, since it is no longer implemented in hardware.
+ (muldf3): Don't use fscale on 68040, since not implemented in hardware.
+
+ * toplev.c (optimize): Now stores specified optimization level.
+ (main): Keep the largest optimization level specified.
+ Handle any integer.
+
+ * c-decl.c (pushdecl): Don't make an extern global for -traditional
+ if it uses any local types.
+
+ * tm-sun386i.h (PCC_BITFFIELD_TYPE_MATTERS): Use 1 as value.
+
+Wed Jan 30 12:41:15 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * fixincludes (sys/systypes.h): Edit this to handle _SIZE_T, etc.
+
+ * function.c (put_var_into_stack): Allocate var ref chain link
+ while in the proper function's obstack.
+
+ * fold-const.c (const_binop): Don't crash for real/0 if have infinity.
+
+ * flow.c (mark_set_1): Don't make log link for hard reg in asm insn.
+
+Wed Jan 30 07:45:33 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * sched.c (schedule_block): Indicate what insns constitute each
+ basic block.
+
+Tue Jan 29 12:35:42 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * Makefile.in (gnulib1.*, gnulib2.*): Declare them phony targets.
+
+ * print-tree.c (print_node): Print message if TREE_PERMANENT is wrong.
+ * tree.c (object_permanent_p): New function.
+
+ * print-tree.c (print_node): Remove DECL_LANG_FLAG_10.
+
+Tue Jan 29 10:07:48 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md (minus/xor/and, neg/ne/compare/and): Delete these. This
+ should be done by combine.
+ (compare operator): Eliminate except when a SET_SRC.
+ * tm-m88k.h (OPTIMIZATION_OPTIONS): -fomit-frame-pointer is a
+ default optimization.
+
+Mon Jan 28 12:52:11 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * tree.h (DECL_VIRTUAL_P): Renamed from TREE_VIRTUAL.
+ (struct tree_common): Eliminate virtual_flag.
+ (struct tree_decl): Add virtual_flag.
+
+ * Makefile.in (enquire.o): Pass -DNO_STDDEF.
+
+ * m68k.md (tablejump): Now have a define_expand that does
+ different things depending on CASE_VECTOR_PC_RELATIVE,
+ and a separate define_insn for each case.
+
+ * function.h (outer_function_chain): Declare the variable.
+
+ * tree.c (debug_obstack): Fix typos.
+ * tree.h (struct tree_common): Fix typo.
+
+ * Makefile.in (GNULIB1_TARGET, GNULIB2_TARGET): Variables deleted.
+ (gnulib): Depend on gnulib1.target and gnulib2.target explicitly.
+
+ * dbxout.c (dbxout_type): Use DECL_VIRTUAL_P, not TREE_VIRTUAL.
+
+ * cplus-tree.h (TREE_PRIVATE, TREE_PROTECTED): #if 0.
+
+ * cexp.y (keywords): Cast names for parens to U_CHAR *.
+
+ * gcc.c (process_command): Fix typo setting switches[n_switches].arg.
+
+ * loop.c (loop_reg_used_before_p): Check insns before INSN, not after.
+
+ * objc-actions.c (objc_finish): Renamed from lang_finish.
+ * objc-parse.y (program): Call objc_finish at the end.
+
+ * Changes from Matthew Self (mself@next.com):
+
+ * objc-parse.y: Since objc-parse.y was so out of date with
+ respect to c-parse.y, I started over with c-parse.y and
+ reintegrated the Objective-C modifications. Now that
+ Objective-C is working I hope that objc-parse.y will be kept
+ more up to date.... I did not re-integrate the lexer since I
+ don't have gperf working. I simply cut and pasted what
+ Stallman had in objc-parse.y. Someone with access to gperf
+ should re-generate this stuff.
+
+ * objc-actions.c (comp_method_with_proto,
+ comp_proto_with_proto): Stallman's change to use the
+ functions end_temporary_allocation and
+ resume_temporary_allocation is incorrect, since it always
+ leaves allocation temporary, whether it was before or not.
+
+ Perhaps the push and pop functions would do the trick....
+
+ * objc-actions.c (get_arg_type_list): Use new function
+ groktypename_in_parm_context.
+
+ * objc-actions.c (_OBJC_SELECTOR_REFERENCES_decl,
+ _OBJC_SELECTOR_REFERENCES_id): Removed.
+
+ * objc-actions.c (synth_module_prologue): Eliminated code to
+ forward declare the selector references array.
+
+ * objc-actions.c (init_objc_symtab): Eliminated code to
+ initialize "refs" field in objc_symtab structure (which is
+ now vestigial).
+
+ * objc-actions.c (build_selector_translation_table): Rewrote.
+
+ * objc-actions.c (build_selector_reference): New routine.
+
+ * objc-actions.c (build_message_expr, build_selector_expr):
+ Use new routine.
+
+ * config/tm-next.h (GO_IF_INDEXABLE_BASE): Don't use pc
+ relative addressing for LABEL_REF's. Since branch tables are
+ in the const section, we treat LABEL_REF's like SYMBOL_REF's
+ here. Otherwise invalid addresses were being generated.
+
+ * config/tm-next.h (CASE_VECTOR_PC_RELATIVE, CASE_VECTOR_MODE):
+ Use absolute branch tables rather than relative ones.
+
+ * config/tm-next.h (ASM_OUTPUT_MAIN_SOURCE_FILE_END): Output
+ an N_SO symbol with no name to mark the end of the module.
+ This is needed to support scattered loading on the NeXT.
+
+ * config/out-next.c (handle_pragma): Call to xrealloc had wrong args.
+
+ * configure: Entry for NeXT must set out_file to out-next.c.
+
+ * config/out-next.c: Typo: "flags" -> "flags.h"
+
+ * config/tm-next.h (LIB_SPEC): Brought up-to-date. There
+ are probably more changes needed here.
+
+ * c-decl.c (pushdecl_top_level): New function. This was
+ copied from an older version of g++.
+
+ * c-decl.c (init_decl_processing): Make alloca first arg sizetype.
+
+ * c-decl.c (groktypename_in_parm_context): New function.
+
+Mon Jan 28 07:07:01 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * loop.c (loop_reg_used_before_p): Don't use INSN_LUID since INSN
+ might have been made by loop.c for an outer loop.
+
+ * loop.c (move_movables, strength_reduce): Replace register references
+ in REG_NOTES as well as PATTERN.
+
+ * loop.c (strength_reduce): Call maybe_eliminate_biv twice, not
+ three times.
+ (maybe_eliminate_biv): Don't abort if elimination fails even though
+ we thought it wouldn't. This can happen if certain insn patterns
+ aren't valid.
+ (maybe_eliminate_biv_1): Ensure that we do not change the insn at
+ all if all the required changes can't be done.
+
+Sun Jan 27 21:26:29 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * Makefile.in: Rename config-dir back to config.
+
+Sat Jan 26 17:48:22 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * objc-parse.y (program): Call objc_finish.
+ * objc-actions.c (objc_finish): Renamed from lang_finish.
+
+ * objc-actions.c, objc-parse.y: New version from NeXT.
+
+Sat Jan 26 17:37:48 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case COND_EXPR): Disable special-case of
+ A ? B : C when B and C are simple. This is now done better by jump.
+
+Sat Jan 26 13:16:58 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * tree.h (TREE_PRIVATE, TREE_PROTECTED, TREE_VIRTUAL): New macros.
+ (struct tree_common): New flag fields.
+ * dbxout.c (dbxout_type): Get rid of conditional; can always use these.
+
+ * cccp.c (lookup_import): Do return -2 if file found.
+ (main): Handle `.m' suffix like `.S'.
+
+ * configure (m68k/next): Use out-next.c.
+
+ * WORD_SWITCH_TAKES_ARG and SWITCH_TAKES_ARG now give # of args.
+ * gcc.c (struct switchstr): New field `args' replaces `part2'.
+ (process_command): Record all the args a switch has.
+ (give_switch): Pass all the strings in `args'.
+
+ * tree.h (struct tree_common): Normally make `code' an enum tree_code.
+
+ * m68k.md (tablejump): New pattern.
+ (casesi, etc.): Deleted.
+
+ * tree.c (debug_obstack): New function.
+
+ * toplev.c (compile_file): Call dbxout_finish near the end.
+ * dbxout.c (dbxout_finish): New function.
+
+ * print-tree.c (print_node): Always print ERROR_MARK node briefly.
+
+ * objc-actions.h (METHOD_ENCODING, CLASS_CATEGORY_LIST): New macros.
+
+ * gcc.c (execute): Make fatal signal message clearer.
+ (default_compilers): For .m file, define __OBJC__,
+ and pass -lang-objc and -gen-decls to cc1.
+
+ * dwarfout.c: Include output.h.
+ (current_function_decl, asm_out_file): Explicit extern decls deleted.
+ (abort, fatal): Explicit extern decls deleted.
+ (NO_RETURN): Definition deleted.
+ (named_labels): Don't declare it.
+ (output_symbol): Don't use it.
+ (MAXPATHLEN): Don't define this. Don't include sys/param.h.
+ (output_source_file_die): Avoid limit on file name size.
+ (output_symbols_for_stmt): Deleted.
+ (output_symbols_for_block): Adapt to using BLOCK, not LET_STMT.
+
+ * configure: Renamed from `config'.
+ * config: Directory renamed back from config-dir.
+
+Sat Jan 26 1990 Ron Guilmette (rfg at ncd.com)
+
+ * README.DWARF: updated to reflect changes to dwarfout.c, the
+ inclusion of dwarf.h (and its changes) and the fact that the
+ DWARF support is no longer directly tied to the DG versions of
+ GCC.
+
+ * dwarfout.c: included a patch (provided by Ray Essick) to allow
+ dwarfout.c to properly get a value for MAXPATHLEN even on (old)
+ System V.3 systems.
+
+ * dwarfout.c: added support for long long types (as suggested by
+ Ray Essick).
+
+ * dwarfout.c: added support for the AT_comp_dir attribute. Also,
+ as part of this change, the name of the compilation directory is
+ no longer placed into in the .sources section.
+
+ * dwarfout.c: added support for the AT_addr_ranges attribute.
+
+ * dwarfout.c: added support for the AT_prototyped attribute.
+
+ * dwarfout.c: added support for the AT_src_info attribute. Also,
+ as part of this change, there is no longer a "special" entry
+ at the start of the .srcinfo section for each compilation unit,
+ and the contents of the "special" final entry in the .srcinfo
+ section have changed (to { -1, -1 }).
+
+ * dwarfout.c: modified to allow additional GNU DWARF extensions
+ to be generated whenever the corresponding extended attribute
+ codes are defined (presumably within a modified dwarf.h file).
+
+ * dwarfout.c: use the section names .srcinfo and .sources rather
+ than .finfo and .files. The additional specificity is warranted
+ because the DWARF information may someday include information
+ about object files as well as source files.
+
+ * dwarfout.c: fixed a bug where a type attribute was being generated
+ for functions and function types even when the return type was
+ void. "Standard" dwarf says that if the return type for a function
+ or function type is void then no type attribute should be generated
+ for the corresponding DIE.
+
+Sat Jan 26 04:22:08 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-lex.c (interface_strcmp): Handle String.String.Map.cc and
+ friends.
+
+ * cplus-typeck.c (build_unary_op): Merge change to generate better
+ code from simple cast expression.
+
+Fri Jan 25 10:06:28 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-decl.c (pushtag): Don't call `pushdecl' if the type's name
+ is anonymous, lest we recurse ad infinitum.
+
+Thu Jan 24 23:56:55 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * optabs.c (expand_binop, expand_unop): Word at a time only for ints.
+
+Thu Jan 24 09:40:37 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * sdbout.c (sdbout_symbol): Apply changes in dbxout.c to deal with
+ SUBREG. Don't emit a symbolic definition for variables that can't
+ be represented.
+
+Thu Jan 24 21:18:15 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * config: Conditional for setting $os was backward.
+ Also mention name of make-var file if one exists.
+
+ * out-i386.c: Delete a large piece of accidental insertion.
+
+ * dwarfout.c: Don't include c-tree.h or cplus-tree.h.
+ (INT_TYPE_SIZE, etc.): Define them if not overridden.
+ (fundamental_type_code): Distinguish types by TYPE_PRECISION.
+ But also check for the built-in C type names.
+
+Thu Jan 24 15:23:17 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * gcc.c (default_compilers): Pass all args starting with "O" to
+ cc1 so that -O2 is passed along.
+
+Thu Jan 24 13:10:27 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * stmt.c (expand_expr_stmt): Don't warn for any casts to void.
+
+ * config: Fix typos setting shell vars.
+ Rename config to config-dir.
+ Insert missing \ in case for delta.
+
+Wed Jan 23 16:31:27 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (emit_jump_insn_{before,after}): Allow PATTERN to be
+ a SEQUENCE.
+
+ * loop.c (check_dbra_loop): Use emit_jump_insn_before when writing
+ out compare and jump sequence, not emit_insn_before, to ensure that
+ if we only write one insn that it is a JUMP_INSN.
+
+ * toplev.c (flag_rerun_cse_after_loop): New: -frerun-cse-after-loop.
+ (rest_of_compilation): Rerun cse after loop if desired.
+ (main): Add support for -O2.
+ Prescan args for -O and -O2 to set default values for many -f options.
+ Add call to new macro OPTIMIZATION_OPTIONS.
+ Save status of -version until all args have been processed; then
+ write out the info.
+ (print_single_switch): New function.
+ (print_switch_values): Renamed from print_target_switch_defaults.
+ Now prints out currently enabled -f, -m, and -W switches. Calls
+ print_single_switch to write out switch and handle long lines.
+
+ * rtl.def (SUBREG): Change rtx class from 'o' to 'x'.
+
+ * cse.c (find_comparison_args): Ignore hash table entry if not valid.
+
+Wed Jan 23 00:12:24 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * config: File renamed from config.gcc.
+ Allow abbreviations for +-options.
+ Allow config HOST TARGET.
+ Support +gas and +nfp as separate options.
+ Rename all the machine alternatives to general scheme:
+ cpu/company-system. Allow abbreviations for cpu/company pairs.
+ * config-dir: Dir renamed from config.
+
+ * Makefile.in (install-dir): Create bindir here.
+
+ * cccp.c (main): Delete duplicat p++ left in last change.
+
+ * Makefile.in (GNULIB1, GNULIB1_TARGET): Renamed from GNULIB*.
+ (gnulib1.portable, gnulib1.target): Renamed from gnulib.*.
+ They now make a file named gnulib1, from gnulib1.c.
+ (LIB1FUNCS, LIB1FUNCS_EXTRA): Renamed from LIBFUNCS*.
+ (for-bootstrap, rest.encap): Depend on gnulib, not GNULIB2_TARGET.
+ (stamp-gnulib2): This file is no longer used.
+ (gnulib2.portable): Old stamp-gnulib2 rule renamed to this.
+ Now create a file named gnulib2, from gnulib2.c alone.
+ (gnulib): New target, combines gnulib1 and gnulib2 into gnulib.
+ (mostlyclean): Delete additional temporary files.
+ No need to avoid deleting stamp-gnulib2.
+ (clean): Delete gnulib1 and gnulib2, but not stamp-gnulib2.
+ (realclean): No need to delete gnulib here.
+ (install-gnulib): Changed dependencies.
+ * gnulib1.c: File gnulib.c renamed.
+
+ * Makefile.in (install-dir): Create bindir here.
+
+ * cccp.c (main): Delete duplicat p++ left in last change.
+
+Sun Jan 20 14:00:16 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-class.c (finish_struct): Conditionalize EMPTY_FIELD_BOUNDARY
+ on whether or not it is defined. Similarly for PCC_BIT_FIELD_MATTERS.
+
+Wed Jan 16 18:56:30 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cse.c (fold_rtx): When folding dispatch table, stay inside bounds.
+
+Wed Jan 16 08:11:48 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload.c (find_reloads_toplev): Fix typo in recent change.
+
+ * reload1.c (eliminate_regs): If we have a non-paradoxical
+ (subreg (pseudo)) and the pseudo has an equivalent memory
+ location, replace the SUBREG because find_reloads may do it.
+
+Tue Jan 15 01:41:28 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * loop.c (scan_loop): Condition for movability was wrong.
+ A reg that isn't necessarily set may be unsafe
+ even if used only inside the loop.
+ However, a reg used only in the same basic block after the set is safe.
+ So is a reg that isn't a user-level variable.
+
+ * loop.c (loop_optimize): Reverse order of scanning loops.
+
+ * loop.c (scan_loop): After skipping the insns of a libcall sequence,
+ ignore notes when searching back to find the last insn of the seq.
+
+ * cccp.c (main): Use envvar GCC_EXEC_PATH to specify translation
+ of prefixe in default include dirs.
+
+ * cccp.c (main): Do path_includes after explicit options.
+
+ * combine.c (try_distrib): Don't push + thru negative count shifts.
+
+Mon Jan 14 09:40:28 1991 Ken Raeburn (raeburn at watch.com)
+
+ * cplus-lex.c (yylex): Even in `extern "C"', the keywords are the
+ same.
+
+ * cplus-lex.c (input_from_saved_text): New function. Set string
+ source for FILE pointer.
+ (yylex, do_pending_inlines): Call it.
+
+ * cplus-parse.y (stmts, stmt): Type is now `tree'. Some actions
+ fixed to return it.
+
+ * cplus-lex.c (reinit_parse_for_block): New function, with most of
+ the guts of reinit_parse_for_method. Magic argument IS_TEMPLATE
+ chooses a set of error messages.
+ (reinit_parse_for_method): Call it.
+ cplus-template.c (reinit_parse_for_template): New function, also
+ calls reinit_parse_for_block.
+
+Mon Jan 14 07:20:36 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * loop.c (skip_consec_insns, move_movables, strength_reduce): Don't
+ call find_reg_note on a NOTE.
+
+Sun Jan 13 15:45:23 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cccp.c: Separate namespace for assertions. Don't expand macros
+ inside assertions in #if. Allow arbitrary token sequences.
+ (rescan): Special handling after `#' if assertions_flag.
+ (expand_to_temp_buffer): New arg sets assertions_flag. Callers changed.
+ (eval_if_expression): Pass 1 for that arg.
+ (skip_paren_group): New function.
+ (assertion_hashtab, ASSERTION_HASHSIZE, ASSERTION_HASHNODE): New.
+ (assertion_install, assertion_lookup, delete_assertion): New functions.
+ (T_ASSERTION): Deleted.
+ (tokenlist_list): Renamed from arglist_list.
+ (read_token_list): Renamed from read_keyword_list. Much changed.
+ Copy the strings into the heap.
+ (free_token_list): Renamed from free_keyword_list. Free the strings.
+ (do_assert, do_unassert): Considerably changed.
+ (check_assertion): Somewhat changed.
+ (check_macro_name): Extra arg contributes to error message.
+ * cexp.y (yylex): Parse everything as a name if keyword_parsing.
+ (rule for assertions): Set, then clear, keyword_parsing.
+ (keywords): Allow empty sequence. Allow nested parens.
+
+Sat Jan 12 12:18:00 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-typeck.c (build_unary_op): Make better code for simple casts.
+
+ * reload.c (find_reloads): Computing reload_when_needed, don't neglect
+ operands that don't have output reloads.
+
+ * cse.c (refers_to_mem_p): At check_addr, handle PLUS inside CONST.
+
+Sat Jan 12 06:30:56 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c (steal_delay_list_from_*): Add missing argument to calls to
+ insn_sets_resource_p.
+ (fill_eager_delay_slots, relax_delay_slots): Add missing argument
+ to calls to mostly_true_jump.
+ (relax_delay_slots): Correctly handle case where we can't invert jump.
+
+ * reload.c (find_reloads_toplev): If we have a SUBREG of a
+ pseudo that resides in memory and the address is not offsettable,
+ substitute for the pseudo now so we can generate a reload for the
+ address.
+
+Fri Jan 11 14:39:09 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * tm-next.h (LIB_SPEC, STARTFILE_SPEC): Don't support -p.
+
+Thu Jan 10 12:26:49 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * tm-sun2.h (CC1_SPEC): Define to ignore -sun2 and -target.
+ (WORD_SWITCH_TAKES_ARG): Define to recognize -target.
+ (LIB_SPEC): Define; handle -a.
+ * tm-sun2os4.h: New file.
+ * tm-m68k.h (TARGET_SWITCHES): Handle -msky and -mnosky.
+ (TARGET_SKY): New macro.
+
+ * tm-next.h (LIB_SPEC): Use -lsys_s, not -lc.
+
+ * c-parse.y (yylex): Fix typo.
+
+ * genoutput.c (output_prologue): Make insn-output.c use insn-codes.h.
+ * Makefile.in (insn-output.o): Depend on insn-codes.h.
+
+ * Makefile.in (install-headers): Save $(libsubdir) before cd.
+
+ * Makefile.in (gnulib): Depend on config.status.
+
+ * gnulib2.c (__umulsidi3): Use #else around inline function.
+ Use __-style names for all machines.
+
+Wed Jan 9 17:06:18 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * out-sparc.c (various places): Change \; to \n\t in printf
+ strings.
+
+ * sparc.md: Change PIC initialization pattern to recognize pattern
+ that doesn't involve a clobber.
+ * out-sparc.c: Rest of change is here, where PIC initialization is
+ emitted.
+
+ * cse.c (simplify_unary_operation, simplify_binary_operation):
+ Correctly adjust VAL for bits outside MODE.
+
+Wed Jan 9 15:45:26 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * flow.c (libcall_dead_p): Handle a CALL in a PARALLEL.
+
+Tue Jan 8 13:35:50 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expmed.c (emit_store_flag): Correct UNSIGNEDP value passed to
+ convert_to_mode and expand_unop.
+
+Mon Jan 7 11:56:31 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * gplus.gperf: New keywords for templates and other extensions.
+
+ * cplus-lex.c: Incorprate new gperf code.
+
+ * cplus-class.c (resolve_scope_to_name): New function.
+ (build_scoped_method_call): Call `resolve_scope_to_name' instead of
+ handling by itself.
+ * cplus-decl.c (pushdecl_class_level): Give forward declaration.
+ (lookup_nested_type): New function.
+ (pushtag,lookup_tag,xref_tag): Handle nested classes.
+ (finish_function): Add comment about obscure argument passing
+ convention for static method calls (at the call site). Also, don't
+ call operator delete with NULL pointer. Call it with
+ `current_class_decl' instead.
+ (globalize_nested_type): New function. Used when we learn that a
+ type which initially appeared to be nested should be defined in the
+ global scope instead.
+ (grokdeclarator): Call `globalize_nested_type' when grokking an
+ as-yet undefined class type.
+ * cplus-dem.c: Updated to handle qualified (i.e. nested) types.
+ This means handling the new letter `Q' in mangled names.
+ * cplus-init.c (build_member_call): Handle nested classes using
+ `resolve_scope_to_name' instead of handling itself.
+ * cplus-lex.c (typename_scope_in_progress): New static variable to
+ allow the lexer to figure out what are nested class typenames,
+ scoped member references, etc., without getting the parser too
+ involved.
+ (yylex): Recognize SCOPED_TYPENAME and TYPENAME_SCOPE tokens.
+ Also, recognize '<' and '>' separately from ARITHCOMPARE so we can
+ implement templates.
+ No longer recognizes (X::*) or (X::&) as single tokens.
+ * cplus-method.c (build_overload_nested_name): New function to build
+ internal names for nested typenames.
+ * cplus-parse.y: Handle parameterized type syntax (more or less).
+ (dummy_decl): Gone!
+ Nested types are now handled.
+ * cplus-tree.h (DECL_UNDEFINED_FRIENDS): Moved out of DECL_CONTEXT
+ slot of TYPE_DECLs. DECL_CONTEXT of typename is now the enclosing
+ type for nested types.
+ (DECL_NESTED_TYPENAME): An identifier pointer that makes the name of
+ the type unique for the compilation.
+ (IDENTIFIER_*): When initializing, call `perm_calloc', not
+ permalloc, since non-zero values actually mean something,
+ and we don't guarantee to initialize everything in one go.
+ * tree.c (perm_calloc): New function.
+ * cplus-typeck.c (default_conversion): Don't defaultly convert a
+ naked METHOD_REF such that it becomes a virtual function table
+ index. Only let this happen if user requests it with `&'.
+
+ * Makefile.in: Handle new source file cplus-template.c.
+
+Mon Jan 7 15:03:53 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-typeck.c (process_init_constructor): Error if values
+ provided for an array of empty elements.
+
+ * out-i386.c (fp_top_dead_p1): Follow jump only if optimizing.
+ (fp_call_internal): Discard result if unused. Use fp_top_dead_p1.
+
+ * cse.c (cse_insn): In special case for (set REG0 REG1),
+ change any REG_EQUIV notes to REG_EQUAL.
+
+ * tm-sun386i.h (PCC_BITFIELD_TYPE_MATTERS): Define it.
+
+ * tm-att386.h (ASM_OUTPUT_LOCAL): Change back to data section.
+
+ * genrecog.c (write_tree_1): Typo in printf string.
+
+ * flow.c (libcall_dead_p): New arguments NOTE and INSN.
+ Now test that the hard return reg in the call is dead.
+ Callers changed.
+
+Mon Jan 7 12:27:07 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * recog.c (cancel_changes): Cancel changes in opposite order we made
+ them.
+
+ * integrate.c (subst_constants): Only commute operands if op0 is const.
+
+ * rtl.def (INLINE_HEADER): Add new integer field.
+ * rtl.h (POPS_ARGS): New macro for place to save
+ current_function_pops_args.
+ (FUNCTION_FLAG_POPS_ARGS): Deleted; no longer a single bit.
+ * emit-rtl.c (gen_inline_header_rtx): Add new arg for "pops args".
+ * integrate.c (initialize_for_inline, output_inline_function):
+ Correctly save and restore current_function_pops_args.
+
+Sun Jan 6 14:10:44 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rtl.h (ASM_OPERANDS_INPUT_LENGTH): New macro.
+ * reload1.c (eliminate_regs): Use ASM_OPERANDS_... macros.
+ * recog.c (asm_noperands, decode_asm_operands): Likewise.
+
+ * rtl.def (IF_THEN_ELSE): Set class to '3'.
+
+ * cse.c (simplify_{unary,binary,ternary}_operation): New functions,
+ from fold_rtx.
+ (fold_rtx): Call these function to do the bulk of the work.
+ Use GET_RTX_CLASS to find commutative and comparison operations.
+ Swap folded_arg[01] when commuting operands.
+ * rtl.h: Define new functions.
+ * integrate.c (try_constants): Replace constant folding code with
+ calls to new functions above.
+ In commutative operations, put constants last.
+
+ * genemit.c (struct clobber_pat): New data structure.
+ (gen_insn): If pattern ends with a group of CLOBBERs of hard
+ registers, store this information in a struct clobber_pat.
+ (output_add_clobbers): New function.
+ (main): Call it to write code to add CLOBBERs.
+ * genrecog.c (struct decision): Add new field num_clobbers_to_add.
+ (make_insn_sequence): If pattern ends with a group of CLOBBERs,
+ set up to recognize it without the CLOBBERs but to indicate the
+ number of CLOBBERs omitted.
+ (add_to_sequence): Initialize num_clobbers_to_add.
+ Remove unnecessary conditionalization on STORE_FLAG_VALUE.
+ (break_out_subroutines, write_subroutine, write_tree): Remove
+ RETURN_PREFIX parameter; TYPE is sufficient.
+ (write_subroutine): Add extra parameter for recog_* functions.
+ (write_tree_1): Pass TYPE instead of string for return.
+ Write out code to return number of CLOBBERs needed.
+ (write_tree): Add new parameter to recog_*.
+ (main): Add new parameter to recog.
+ Don't pass return string to break_out_subroutines and write_tree.
+ * recog.c (recog_memoized): Pass extra (0) parameter to recog.
+ * combine.c (recog_for_combine): New function.
+ (try_combine, simplify_and_cc0, try_distrib): Use it instead of recog.
+ (reg_dead_at_p, reg_dead_at_p_1): New functions.
+
+ * flow.c (mark_set_1): Count in reg_n_sets when a part of a register
+ is modified.
+ Update SIGNIFICANT correctly when subreg_p and multiple hard regs.
+ Compute reg_n_sets for hard registers.
+
+Sun Jan 6 13:41:49 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * function.c (locate_and_pad_parm): Do REG_PARM_STACK_SPACE just once.
+
+ * Changes by wilson@cygnus.com.
+ * calls.c (expand_call): Test value of REG_PARM_STACK_SPACE instead
+ of assuming that it will always be greater than zero.
+ * function.c (assign_parms): Same as above. Also, correct
+ calculation of STACK_BYTES.
+
+ * reload1.c (reload_reg_free_p): Old input reload blocks input_addr.
+
+Sat Jan 5 18:32:15 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * Makefile.in (mostlyclean): New name for old `clean'.
+ (clean): Deletes gnulib also.
+ (cleanconfig): Need not delete gnulib here.
+
+ * reload.c (push_reload): Don't use dying reg unless operand fits.
+
+ * c-parse.y (yylex): Hex and octal constants now traditionally signed.
+
+Sat Jan 5 18:03:50 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * regclass.c (regclass): reg_n_sets is one per set. It does not
+ take into account loop_depth. So don't adjust by loop_depth here.
+
+Fri Jan 4 13:18:07 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * function.c (put_var_into_stack): Don't mung virtual reg.
+ (fix_lexical_addr): Accept the virtual arg pointer.
+ * function.h (struct var_refs_queue): New structure.
+ (struct function): Use that for the pending var refs queue.
+
+ * print-tree.c (print_node): Nicer format for rtl of decls.
+
+ * c-decl.c (push_c_function_context, pop_c_function_context):
+ No need to deal with current_function_decl.
+
+ * c-parse.y (nested_function): Delete spurious nonterminal.
+
+Fri Jan 4 12:13:14 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-class.c (modify_vtable_entries): In case we are modifying
+ the main vtable, start with the vtable that comes from the immediate
+ baseclass, not the most base class. This is needed because later
+ fixups (for non-first and virtual baseclasses) do not fix up this
+ case.
+
+Fri Jan 4 06:55:00 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * optabs.c (expand_binop): Fix typo in testing for SImode operation.
+ Generalize to apply in more cases by calling emit_store_flag rather
+ than doing the gen_sltu explicitly.
+
+ * expmed.c (store_bit_field, extract_bit_field): When insv/extv
+ don't allow MEM and we need to load the field into a register, don't
+ use the mode of OP0 if it is wider than the mode to be used for
+ insv/extv operating on a register.
+
+ * expmed.c (emit_stor_flag): Try to convert some comparisons with
+ 1 and -1 to comparisons with zero.
+ Explicitly test sign bit of STORE_FLAG_VALUE rather than testing it
+ for being less than zero.
+
+ * cse.c (find_comparison_args): Don't compute STORE_FLAG_VALUE < 0;
+ instead, test the relevant sign bit.
+ Use GET_RTX_CLASS instead of comparison_code_p.
+ * loop.c (get_condition): Likewise.
+
+ * recog.c (validate_change): Eliminate duplicate code by always
+ saving the change. If in_group == 0, call apply_change_group.
+ (apply_change_group): If recog_memoized fails, see if we have a
+ CLOBBER at the end. Use validate_change to replace the pattern
+ with one without the CLOBBER if so; later we will verify that change.
+
+ * tree.c (stabilize_reference_1): Now static; also, define as forward
+ reference at start of file.
+
+ * rtl.def: Add new field in DEF_RTL_EXPR macro to give the "class"
+ of the rtx operation.
+ * rtl.h: DEF_RTL_EXPR has one additional arg.
+ (rtx_class, GET_RTX_CLASS): New var and macro.
+ * rtl.c: DEF_RTL_EXPR has one additional arg.
+ (rtx_class): Initialize table.
+
+ * reload.c (push_reload): If an input operand contains a dead
+ register used nowhere else in the insn, try to use it as a reload reg.
+ * reload1.c (reload_as_needed): If cancelling optional reload,
+ clear reload_reg_rtx.
+ (choose_reload_regs): If we can find reload value lying around,
+ use that register unless choice made by find_reloads would also save
+ an insn (the new choice added above won't).
+
+ * genoutput.c: Update comments on things written. Change order to
+ agree with the order written.
+ (output_epilogue): Remove extraneous tests.
+
+Thu Jan 3 13:32:54 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * rtl.c (read_rtx): Cast NULL vector.
+
+ * By Jim Wilson.
+ * tree.c (stabilize_reference): Modified to call stabilize_reference_1
+ instead of save_expr.
+ (stabilize_reference_1): New function. For arithmetic operator trees,
+ recurse on the subtrees. Otherwise, put a SAVE_EXPR around the
+ tree if it has side-effects.
+
+Thu Jan 3 12:37:56 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (choose_reload_regs): Only set reload_when_needed to
+ RELOAD_FOR_OUTPUT or RELOAD_FOR_INPUT when it used to be RELOAD_OTHER.
+
+Wed Jan 2 18:28:23 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * emit-rtl.c (init_emit_once): Fix typo setting constm1_rtx.
+
+Wed Jan 2 07:53:04 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * sparc.md (fix_truncdfsi2 recognizer): xoperands must have 3
+ elements because `output_fp_move_double' can write to operands[2].
+
+Wed Jan 2 17:16:20 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * calls.c (emit_call_1): If we have call_pop, use it if we have
+ no stack arguments.
+
+ * out-vax.c (relational_op): Deleted, redundant.
+ * vax.md (branch): Use comparison_operator (in recog.c) instead of
+ relational_op.
+ * tm-vax.h (PRINT_OPERAND_PUNCT_VALID_P): "C" is not punctuation.
+
+ * reload1.c (reload_as_needed, forget_old_reloads_1): Don't clear
+ reg_has_output_reload and reg_is_output_reload for each insn, just
+ ones that need reload. Instead, interpret each entry as zero if
+ n_reloads == 0.
+
+Wed Jan 2 15:52:13 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * optabs.c (expand_binop): Fix typos.
+
+ * toplev.c (rest_of_compilation): Clear cse_not_expected after loop.
+ * rtl.h (cse_not_expected): Declare here.
+ * expr.h: Not here.
+
+Tue Jan 1 21:55:11 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * emit-rtl.c (constm1_rtx): New standard constant.
+ (gen_rtx): Use it when appropriate.
+ (init_emit_once): Initialize it.
+
+ * out-vax.c (split_quadword_operands): New function.
+ (relational_op): Likewise.
+ * vax.md (extendsidi2, adddi3, subdi3): New patterns.
+ (movdi): Use clrq when appropriate.
+ (movaq recognizer): New pattern.
+
+ * recog.h (OUT_FCN): New macro.
+ * genoutput.c: Include recog.h in output file. No
+ longer define "const", since that happens in recog.h.
+
+ * tm-vax.h (PRINT_OPERAND): Add 'C' to print a reversed condition.
+ * out-vax.c (rev_cond_name): Return its name.
+ * vax.md (unnamed patterns): Combine several reversed branch patterns
+ into one, using match_operator with relational_op and "%C".
+
+ * optabs.c (expand_binop): Handle multi-word addition and subtraction.
+
+ * Makefile.in (install-gnulib): Use RANLIB_TEST. Use libg_dir.
+ (libg_dir): New customization variable.
+
+ * assert.h (__assert): Use standard GNU format for error messages.
+
+Tue Jan 1 21:25:00 1991 Richard Kenner (kenner at vlsi1)
+
+ * reload1.c (eliminate_regs, case PLUS): Always move constant to the
+ outside of a PLUS expression.
+
+Tue Jan 1 11:45:22 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * ecoff-cmp: Specify `c' in option to tail.
+
+ * stor-layout.c (layout_record, layout_union, layout_type):
+ Use ROUND_TYPE_ALIGN and ROUND_TYPE_SIZE to compute
+ alignment and size of records, unions and arrays.
+ * ROUND_TYPE_ALIGN: New. Args are type, spec'd align, other min align.
+ * ROUND_TYPE_SIZE: New. Args are type, size of contents, align.
+
+ * reload1.c (emit_reload_insns) [PRESERVE_DEATH_INFO_REGNO_P]:
+ Scan output and output-address reloads together.
+ Check for matching hard reg.
+
+ * config.gcc: Set proper shell vars in big dispatch. Not `machine'.
+ (i386-isc): New alternative.
+
+Tue Jan 1 08:29:49 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c (update_block): Turn bb_tick update back on; it is needed,
+ after all.
+
+Mon Dec 31 18:12:07 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * genattrtab.c (write_test_expr, case EQ_ATTR): Use correct expression
+ number for attribute value.
+
+ * cse.c (cse_insn): Use single_set when looking for an insn that sets
+ cc0 followed by one that no longer does.
+
+ * recog.c (find_single_use): If the next insn after one that sets
+ cc0 is not an INSN or JUMP_INSN, return 0; don't blow up on a NOTE.
+
+ * emit-rtl.c (emit_insn_before, emit_insn_after, emit_insn): Return
+ something sensible if a SEQUENCE of length zero was passed.
+ We no longer make a SEQUENCE with XVEC == 0, so don't test for it.
+
+ * reload1.c (emit_reload_insns): Handle gen_move_insn returning
+ no insns (occurs on RT for dummy registers).
+
+ * rtl.h (reg_cc0_rtx, find_cc): No longer needed.
+ * emit-rtl.c: Likewise.
+ * conditions.h: Entire file is #ifdef HAVE_cc0.
+ * final.c (CC_STATUS_INIT): Make a null default #ifndef HAVE_cc0.
+ (cc_status): No longer exists #ifndef HAVE_cc0.
+ (final_scan_insn): Do CC processing only #ifdef HAVE_cc0.
+ (alter_cond): Only exists #ifdef HAVE_cc0.
+ * genemit.c (gen_exp): No longer have CC0_REGNUM or reg_cc0_rtx.
+ * genoutput.c (main): Include insn-config.h before conditions.h.
+ * reorg.c: Likewise.
+ * jump.c (rtx_equal_for_thread_p): Remove reference to CC0_REGNUM;
+ we'll have to do this optimization some other way later.
+ * tm-a29k.h (NOTICE_UPDATE_CC): Deleted.
+
+Mon Dec 31 14:44:31 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * reload.h (enum_reload_when_needed):
+ New alternatives RELOAD_FOR_OUTPUT, RELOAD_FOR_INPUT.
+ * reload1.c (choose_reload_regs): Use those when appropriate.
+ (mark_reload_reg_in_use): Record this usage specially.
+ (reload_reg_free_p, reload_reg_free_before_p): Handle this usage.
+ (reload_reg_reaches_end_p): Likewise.
+ (emit_reload_insns): Treat RELOAD_FOR_INPUT like RELOAD_OTHER.
+
+ * i386.md (push for SFmode): Operand of fst was missing.
+
+Mon Dec 31 08:50:17 1990 Craig Burley (burley at pogo.ai.mit.edu)
+
+ * stor-layout.c (layout_type): For ARRAY_TYPE case, don't try
+ and compute a size if there is no TYPE_MAX_VALUE for the index.
+ * tree.c, tree.h (build_index_2_type): New function, like
+ build_index_type except it accepts the low value as an arg instead
+ of assuming 0.
+
+Mon Dec 31 08:09:10 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-typeck.c (c_expand_return): Handle case when we try
+ to return a void value (such as a void function call) in a
+ function returning void, and there are cleanups to run.
+
+Sun Dec 30 21:08:32 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * tm-a29k.h (TARGET_VERSION): Can't use target_flags since we can
+ be called from gcc.c.
+
+ * tm-rs6000.h (REG_ALLOC_ORDER): Put r12 after r13; it might be
+ holding a DImode value and so might be very expensive (we won't
+ worry about TImode).
+
+ * rs6000.md (subtract patterns): Fix incorrect operand number in %I.
+ (movti): Disallow indexed memory operands.
+
+ * out-rs6000.c (print_operand, case 'm'): Fix typo.
+ (includes_rshift_p): Correctly compute mask.
+
+ * out-a29k.c (output_operand): Add missing parentheses.
+ (print_operand): Replace if/then/else structure with switch statement.
+
+ * a29k.md (beq, bne): Try to use NE test whenever possible; it
+ will produce better code if we have bit-tests.
+
+Sun Dec 30 12:02:03 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * tm-sparc.h (PRINT_OPERAND): Put 'R' case before REG so that it
+ takes when 'R' is passed in as CODE. Also, handle 'B' letter.
+
+ * sparc.md: (pattern for converting DFmode to SImode): Second
+ argument to `output_asm_insn' should be `operands', not zero.
+ (tablejump): The jump insn is "jmp", not "jump".
+ (gen_fixtruncdfsi2): operands[2] should get the pseudo, not
+ operands[3] (which is nonexistent).
+ (call): Fix typo which had %o7 being emitted as %o.
+ (various patterns): Fixed places where match_operand had the wrong
+ operand number.
+
+Sat Dec 29 17:27:00 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * sparc.md: cc_status no longer handles condition code updates.
+ Instead, condition codes are explicitly set and used via
+ hard register 0. Special attributes specific to condition codes
+ (such as whether conditional branches should test the integer or
+ floating-point condition codes, or that the condition codes cannot
+ be tested for a condition which would test the overflow bit) are
+ handled by encoding the attribute in the mode for the condition
+ code register.
+ (type attributes): type "unary" insns have one input operand (1)
+ and one output operand (0)
+ type "binary" insns have two input operands (1,2) and one output (0)
+ type "compare" insns have one or two input operands (0,1) and no output
+ type "move" and type "arith" have been deleted.
+ (prescan attribute): Deleted. Machine description now puts
+ floating-point zero in registers when needed.
+ (use_cc attribute): Deleted.
+ (fpcc define_delay): No longer depend on "use_cc" attribute.
+ Also, fpcc delay characteristics hold for "fpcc" type insns.
+ (cc attribute): Deleted.
+ (cmpxx patterns): Now written as `define_expand's so we can stow
+ away operands. When the pattern that will use the results of the
+ conditional test is emitted, it can use these operands to figure
+ out the right way to emit the compare.
+ (bcc patterns): Rewritten to emit comparison (based on stowed-away
+ info) before emitting branch.
+ (scc patterns): Handle all the cases with branch-free code.
+ Added new pattern to recognize (x + (i == 0)).
+ (movsi pattern recognizer): Split into two patterns so that e.g.
+ "(set:SI (mem:SI ...) (const_int 5))" is never considered valid.
+ Instead this has to be a two-insn sequence.
+ (mov{hq}i pattern recognizers): Ditto.
+ (movstrsi): Force operands[2] out of memory if it was in memory.
+ ({zero,sign}_extendXY): Now written as `define_expand's instead of
+ `define_insn's for more accurate machine modeling.
+ Added new pattern to optimize bit-field compares.
+ (floatsisf2 patterns): Delete redundant setting of "in_call_delay"
+ attribute.
+ (fix_trunc{sf,df}si2 pattern): Use clobberable register in which
+ the conversion can take place. Used to use %f30,%f31.
+ ({add,sub}di3 pattern): Put explicit clobber of (reg 0) in the
+ pattern.
+ (negdi2 pattern): Ditto.
+ Added new patterns to handle merging of addition/subtraction with
+ condition code testing (with (reg:CC_NOOV 0)).
+ ({and,ior,xor}cbsi3 pattern): Obsolete. Deleted.
+ Added patterns to represent setting of condition codes in addition
+ to performing logical operations.
+ ({neg,abs}df2 pattern): Use `R' print letter to overcome the need
+ to use a C action instead of a simple template.
+ (ash{l,r}{hi,qi}3): Define patterns for shifts on sub-SImode
+ operands.
+ (jump pattern): Use `*' print code to obviate the need for a C
+ action when a template can do.
+ (tablejump pattern): Ditto, with `^' code as well.
+ Deleted `define_split's that were used to handle mem-mem moves in
+ the case of PIC generation. Since all move insns are emitted and
+ maintained as SPARC-valid insns, these should no longer be needed.
+ (various patterns): (HI ...) is spelled (HI:SI ...). Also, use
+ `gen_lowpart' instead of building subregs directly.
+ New `define_split's were added to split scc insns into simpler
+ components which have single-insn templates.
+ Fixed a return peephole when returning a SFmode value (it was
+ missing the "ret"!).
+ Lots of complicated peepholes that brought cc testing and
+ arithmetic operations together were deleted. This is because the
+ combiner should now handle all these cases.
+
+ * out-sparc.c (sparc_compare_op{0,1}): New global variables.
+ Used to hold the operand(s) to compare insns in lieu of emitting a
+ compare.
+ (reg_or_cc0_operand): Deleted.
+ (normal_comp_operator): New function.
+ (cc_arithop): Now returns 0 for PLUS and MINUS.
+ (cc_arithopn): Now returns 0 for XOR.
+ (gen_compare_reg): New function.
+ (sparc_address_cost): Simplified because it turns out it doesn't
+ matter what is returned for illegitimate addresses.
+ (hard_regno_mode_ok): Updated to use these new #defines.
+ (C_MODES): New #define, for condition code modes.
+ (S_MODES): Ditto, for single-word (and smaller) quantities.
+ (D_MODES): Ditto, for double-word (and smaller) quantities.
+ (T_MODES): Ditto, for tetra-word (and smaller) quantities.
+ (SF_MODES): Ditto, for SFmode quantities.
+ (DF_MODES): Ditto, for SF_MODE, DFmode, SCmode, etc.
+ (TF_MODES): Ditto, for DF_MODE, TFmode, DCmode, etc.
+ (output_floatsi{df,sf}2): Greatly simplified.
+ (output_pic_sequence,output_pic_sequence_2,fp_zero_hook,
+ output_tail_call): Turned off.
+
+ * tm-sparc.h (ASM_SPEC): Pass `-k' to assembler if compiling PIC.
+ (WORDS_BIG_ENDIAN): Define as 1, not 0.
+ (FIXED_REGISTERS): %f30 and %f31 are now allocatable.
+ (REG_CC0_RTX, CC0_REGNUM): Deleted.
+ (EXTRA_CC_MODES): New modes CC_NOOVmode and CCFPmode. The former
+ is for when the overflow bit it not to be tested; the latter is
+ for when the condition is sitting in the floating point unit.
+ (SELECT_CC_MODE): New macro.
+ (FINAL_PRESCAN_INSN): Deleted.
+ (CC_* macros): Deleted.
+ (PRINT_OPERAND_PUNCT_VALID_P): New valid chars are '#' (for
+ whether to print a noop or not), '*' (for whether to print a ",a"
+ or not), and '^' (for whether to emit code for PIC branch or not).
+ (PRINT_OPERAND{,_ADDRESS}): Replace calls to fprintf by calls to
+ fputs where that is convenient.
+
+ * expr.h, cplus-dbxout.c: #ifdef BYTES_BIG_ENDIAN should be #if.
+
+ * reload.c (struct replacement): Add new field subreg_loc.
+ (push_reload): If reloading SUBREG_REG of a paradoxical SUBREG,
+ store the location of the SUBREG in subreg_loc in REPLACEMENTS.
+ (push_replacement): Initialize subreg_loc.
+ (subst_reloads): Don't produce nested SUBREGs; use subreg_loc.
+
+ * regclass.c (regclass): Handle (set X (op CONST Y)) properly when
+ the modes of operands 0 and 1 are different.
+
+Sat Dec 29 16:37:10 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cccp.c (macroexpand): Test traditional when computing expansion size.
+
+ * toplev.c (compile_file):
+ If profiling, leave some space after `gcc_compiled.'.
+ * tm-m88k.h, tm-sparc.h, tm-sun386i.h (ASM_IDENTIFY_GCC): Deleted.
+
+ * reload1.c (emit_reload_insns): Set reg_reloaded_contents, etc, here.
+ (choose_reload_regs): Not here--except for reg_has_output_reload.
+
+ * c-parse.y (nested_function, notype_nested_function):
+ Use compstmt for body, not compstmt_or_error.
+
+ * Makefile.in (install-headers): Use basename on
+ * stupid.c (stupid_mark_refs): Really do mark clobbered hardreg
+ live before the insn.
+
+Fri Dec 28 05:44:10 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (subreg_lowpart_p): Use correct modes in
+ WORDS_BIG_ENDIAN case.
+
+ * reload.c (combine_reloads): Don't try to reference
+ insn_operand_constraint for an ASM insn.
+ Fix typo in testing for modified operand.
+
+Thu Dec 27 19:02:54 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_insn): Ensure we invalidate SET_DEST if SET_SRC is a CALL.
+
+ * cse.c (fold_rtx): Save mode of original first operand in case this
+ is becoming (sign_extend (const_int)).
+
+Thu Dec 27 16:15:56 1990 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md, out-m88k.c (CCmode): Use it.
+ (emit_bcnd): Avoid loosing when bcnd is changed into sxx.
+ (hi16/lo16): Don't use these to form 16-bit immediate values.
+ Introduce and use %X/%x.
+ (length attribute): Make better use of defaults.
+
+ * tm-v88r32.h (LIB_SPEC): Goes here rather than in xm-v88r32.h.
+ * xm-*88*.h: Clean these up. Most differences go away by relying
+ on the 88open standards.
+
+Thu Dec 27 12:48:26 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * expmed.c (store_bit_field, extract_bit_field):
+ Change #ifdef to #if, testing BYTES_BIG_ENDIAN.
+
+Thu Dec 27 07:36:45 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c (find_end_label): Ignore USE and CLOBBERs when looking for
+ label at end of function.
+
+Wed Dec 26 22:35:59 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (sequence_element_free_list, sequence_result): New vars.
+ (restore_emit_status, init_emit): Initialize them.
+ (emit_insn_before, emit_insn_after, emit_insn): Save SEQUENCE in
+ sequence_result.
+ Make these three routines more alike in structure.
+ (start_sequence, end_sequence, push_to_sequence): Cache INSN_LIST pairs
+ in sequence_element_free_list rather than making new ones.
+ (start_sequence): No longer return unused rtx; only one caller
+ needed to be changed (in function.c, see below).
+ (end_sequence): No longer has argument.
+ (gen_sequence): Try obtaining a pre-built SEQUENCE from
+ sequence_result; no longer special-case length 0 vectors.
+ * function.c (fixup_memory_subreg): start_sequence no longer
+ returns an rtx and end_sequence no longer has an argument.
+ * rtl.h (start_sequence): Now void.
+ (push_to_sequence, end_sequence): Define.
+
+Wed Dec 26 13:19:40 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * gnulib.c: No longer #undef perform_* if not __GNUC__.
+ (perform_*): Define each if not already def.
+
+Tue Dec 25 17:31:17 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * loop.c (get_condition): Rework scan that looks for sets of things
+ being compared to allow intervening insns; check to ensure that
+ they don't set something that we need. Return 0 if the best we can
+ do is find something whose mode is in class MODE_CC.
+
+ * calls.c (emit_call_1): RETURN_POPS_ARGS now gets the length of
+ arguments on the stack and returns the number of bytes popped by the
+ called function.
+ * output.h (current_function_pops_args): Change description.
+ * function.c (current_function_pops_args): Likewise.
+ (assign_parms): Initialize current_function_pops_args here.
+ (init_function_start): Not here.
+ * tm-*.h (RETURN_POPS_ARGS): Reflect new meaning.
+ (FUNCTION_EPILOGUE): Use new meaning of current_function_pops_args.
+ * out-i386.c (function_epilogue): Likewise.
+
+Tue Dec 25 15:52:06 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * gnulib.c (all functions): Support a hook for redefining contents.
+ These hooks are called perform_addsi3, and so on.
+ They are used only if compiling with GCC.
+
+ * rtlanal.c (single_set): Moved from loop.c.
+
+ * cse.c (fold_rtx): For a MEM, fold address when looking for constant.
+ (cse_insn): When fetch a constant label from a dispatch,
+ substitute into following tablejump.
+ (find_best_addr): Clear do_not_record before hashing.
+ * jump.c (mark_jump_label): Don't record table-labels on non-jumps.
+
+ * m68k.md (casesi_2 recognizer): Use register_operand as predicate.
+
+Mon Dec 24 17:54:42 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cse.c (fold_rtx): Handle ADDR_DIFF_VEC like ADDR_VEC,
+ when the index in it is constant.
+
+ * c-decl.c (start_function): Handle new option -Wmissing_prototypes.
+ (c_decode_option): Likewise.
+
+Mon Dec 24 07:21:06 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rtl.h (reload_completed, reload_in_progress): Now defined here.
+ * output.h (reload_completed): No longer defined here.
+ * emit-rtl.c, optabs.c, recog.c, sched.c, toplev.c, out-a29k.c:
+ Don't define reload_in_progress or reload_completed.
+ * a29k.md, romp.md, rs6000.md: Likewise.
+
+ * machmode.def: Terminate GET_MODE_WIDER_MODE chains with VOIDmode,
+ not zero.
+ (CCmode): New mode.
+ * machmode.h (enum machine_mode): Includes modes in EXTRA_CC_MODES,
+ if defined.
+ (enum mode_class): New class MODE_CC; delete MODE_FUNCTION.
+ * rtl.c (mode_name): Define to be known size; add names for extra
+ CC modes, if present.
+ (mode_class, mode_size, mode_unit_size, mode_wider_mode): Define
+ to be known size.
+ (init_rtl): Initialize extra CC modes.
+
+Sat Dec 22 19:33:54 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * tm-i386v.h (MAXPATHLEN): Define if not already defined.
+ * tm-i386vgas.h: New file.
+
+ * out-i386.c (print_operand_address): Handle scaled indexing.
+
+Sat Dec 22 11:15:03 1990 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md, out-m88k.c, tm-m88k.h (swapped cmpsi): Don't rely on
+ NOTICE_UPDATE_CC doing the job. Instead, compliment the swapped
+ compare. Also, make COMPARE SImode.
+ (and/cmpsi/sxx/neg): Add patterns to do this in one instruction.
+ Change sign_extend/sxx to neg/sxx for other cases.
+ (iorsi3/xorsi3): Use alternatives and explicit patterns.
+ (casesi): Make the constant the second operand to cmpsi.
+ (output_and): Must compliment value to use the clr instruction.
+ (output_reg_adjust): Simplify the interface and use TEMP_REGNUM.
+ (TARGET_SWITCHES): Eliminate needless no-* options.
+
+Fri Dec 21 05:46:34 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * recog.c (find_single_use{,_1}): New functions.
+ * rtl.h (find_single_use): Declare it.
+
+Thu Dec 20 21:27:36 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * optabs.c (init_optabs): Add __ to names of floating compare fcns.
+
+Thu Dec 20 18:21:38 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_builtin, case BUILTIN_FFS): Get mode for arg from
+ tree, not rtx, in case arg was CONST_INT.
+
+Thu Dec 20 17:31:46 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-decl.c (init_decl_processing): Don't define `ffs'.
+
+Wed Dec 19 16:59:38 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * gcc.c (main): Handle if SIGPIPE not defined.
+
+ * cccp.c (xmalloc, xrealloc, xcalloc): Don't declare malloc or realloc.
+
+Wed Dec 19 06:50:17 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (gen_lowpart_for_combine): Avoid making a nested SUBREG
+ when we are being passed a paradoxical SUBREG of MEM.
+
+ * cse.c (new_basic_block): Compilations spend about 5% of their time
+ in this function so replace loop initializing qty_{first,last}_reg
+ with copy from a larger consec_ints. Only loop over extra entries.
+ (cse_main): Allocate consec_ints to be default size of max_qty large.
+
+ * reorg.c (get_branch_condition): Fix typos when reversing condition.
+ (condition_dominates_p): Fix typo in comparison.
+ (redundant_insn_p): This function was taking about 4% of the
+ compilation time. Rework so it doesn't split, only looks at resource
+ usage if it finds a matching insn (since it usually won't), and
+ improve code that looks at resources. Now takes about 0.5% of
+ compilation time.
+ (fill_simple_delay_slots): Always call mark_target_live_regs with an
+ active insn; currently being called with a CODE_LABEL.
+
+Tue Dec 18 14:08:11 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * out-sparc.c: Fix uninitiated comment.
+
+ * final.c (end_final): Call strip_off_ending to remove the file
+ name suffix.
+ (final_start_function): Execute SDB_DEBUGGING_INFO code only if
+ generating SDB symbol info.
+
+ * Makefile.in (cccp.o): Depend on gcc.
+
+ * tm-sparc.h, xm-sparc.h: Make this machine big-endian.
+
+ * expr.c (expand_builtin): Pass correct arguments to gen_cmpstrsi4.
+
+ * recog.c (nonmemory_operand): Reject reg whose class is NO_REGS.
+
+ * c-decl.c (finish_struct, grokdeclarator):
+ Strip NON_LVALUE_EXPR more than once.
+
+ * combine.c (combine_instructions): Check that a jump insn uses CC0
+ before trying to combine it with an insn that sets CC0.
+
+ * cplus-decl.c, cplus-search.c, gcc.c, objc-actions.c, rtl.c, stmt.c,
+ symout.c, toplev.c: Use xmalloc instead of malloc.
+
+ * cccp.c (do_include): Check for truncation of precompiled file name.
+
+Mon Dec 17 16:53:46 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-typeck.c (build_binary_op_nodefault, build_conditional_expr):
+ Fix indentation.
+ * reload1.c (choose_reload_regs): Fix indentation.
+ (gen_input_reload): Fix typo in comment.
+
+ * reload.c (find_reloads): Call abort when the last operand is
+ marked commutative, to make it easier to find this error.
+
+ * rtlanal.c (refers_to_regno_p): Don't crash if X is 0.
+
+Mon Dec 17 15:29:34 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * local-alloc.c (combine_regs): No need to see if suggested hard reg
+ is suitable; if it isn't, it won't end up being used. Existing tests
+ were too conservative.
+
+ * jump.c (delete_jump): When searching for the SET of the condition
+ codes for a jump insn, give up if we hit a SEQUENCE.
+
+Mon Dec 17 02:14:06 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-typeck.c (c_size_in_bytes): New function.
+ (pointer_int_sum, pointer_diff): Use that.
+ (pointer_diff): Handle warn_pointer_arith.
+
+Sun Dec 16 22:27:11 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-decl.c (start_decl): Ignore with error any init for a parm.
+ (finish_decl): Likewise.
+
+Sun Dec 16 01:02:57 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * jump.c (rtx_equal_for_thread_p): Treat the special CC register as
+ equivalent for the two threads we are looking at.
+
+ * combine.c (try_combine): Fix typo in loop over I1 with PARALLEL
+ body. Also, don't test HARD_REGNO_MODE_OK for hard registers we are
+ thinking about combining. This screws up using registers to
+ represent the condition codes, and probably doesn't save anything in
+ the general case.
+
+ * expmed.c (expand_and): Comment says that result is always stored
+ in target, so the code now does this.
+
+Sat Dec 15 18:09:46 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * loop.c (get_condition): Try a little harder to find the setter of
+ the register used in a conditional test. On the SPARC it is vital
+ to either find the setter of the register used for the condition
+ codes or for this function to return 0. Also, have test for
+ non-NULL, matching `set' govern both normal and reversed cases of
+ comparisons.
+
+ * jump.c (jump_optimize): When moving USE insns from before jumps to
+ after BARRIERs, put the label for the redirected jump after the
+ BARRIER instead of just before the PREV_INSN of the original target.
+ This gets around problems when there are NOTEs between the BARRIER
+ and the original target.
+
+Sat Dec 15 10:16:29 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * sparc.md (cmpdf,cmpsf): No longer a define expand. Now depends
+ on fp zero being loaded into a register.
+ (tstsi,tstdf,tstsf): Deleted.
+ (seq,sne): Fail if we are not testing operands of integer mode.
+ (movsi): Split recognizers into two parts. The first handles
+ [reg,mem,zero] <=> [reg,mem]; the second handles [reg,const] =>
+ [reg].
+ (adddf,subdf,negdf): Simplify output routines using 'R' as an
+ output letter.
+ (tail_call): Turn this off. It is never used, and it depends on
+ routines which are about to become broken.
+ (various places): Add USE_CC attribute where appropriate.
+ (various places): Change (use (reg:SI 0)) to (clobber (reg:SI 0))
+ and delete CC_CLOBBER attribute from the pattern.
+ * out-sparc.c (move_operand): No longer recognize certain
+ immediates as a `move_operand'.
+ (move_reg_or_immed_operand): New recognizer for immediates no
+ longer recognized by `move_operand'.
+ (output_pic_sequence*): Turned off.
+ (sparc_address_cost): Simplified, since the value returned is not
+ used if the address is not legitimate.
+ (emit_move_sequence): Use `gen_lowpart' instead of building
+ SUBREGs explicitly.
+ (make_f30_contain_zero): Deleted.
+ (output_tail_call): Turned off.
+ * tm-sparc.h (PRINT_OPERAND): Recognize 'R' code letter, which
+ means print the name of REGNO (X)+1. No longer recognizes the 'G'
+ letter.
+ (PRINT_OPERAND,PRINT_OPERAND_ADDRESS): Replace various calls to
+ fprintf with calls to fputs or fputc.
+ (FINAL_PRESCAN_INSN): No longer defined.
+
+Sat Dec 15 14:37:51 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * recog.c (offsettable_address_p): Check validity in narrower modes.
+
+Sat Dec 15 11:21:55 1990 Tom Wood (wood at dg-rtp.dg.com)
+
+ * syms.h sdbout.c (T_VOID): Ensure that T_VOID is provided a
+ default meaning if <syms.h> is used.
+
+Fri Dec 14 14:39:10 1990 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md (increment and test peephole): Updated so it would apply
+ with the new method for doing cmpsi/bxx.
+ * m88k.md (function units): Replace decode with alu and update
+ accordingly.
+ * out-m88k.c (emit_test): Add a mode parameter.
+ * tm-m88k.h (GO_IF_LEGITIMATE_ADDRESS): Constrain how the arg
+ pointer can be used.
+
+Fri Dec 14 06:48:07 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (convert_move): Add missing argument to some recursive calls.
+
+ * jump.c (invert_jump): Pass new label to recursive call.
+
+ * expr.h (setcc_gen_code): Replaces setcc_gen_fctn; stores insn_code.
+ (expand_and, emit_store_flag, label_rtx): Add definitions.
+ (get_condition, compare_from_rtx): Likewise.
+ * rtl.h (STORE_FLAG_VALUE): Provide a default value of 1.
+ (reg_set_last): Add definition.
+ (const_true_rtx): New variable.
+ * cse.c: Remove defaulting of STORE_FLAG_VALUE from here.
+ (const_true_rtx): Remove static version; now global.
+ * emit-rtl.c (const_true_rtx): Define here.
+ (gen_rtx): Return const_true_rtx for CONST_INT of STORE_FLAG_VALUE.
+ (init_emit_once): Initialize const_true_rtx.
+ * expmed.c (emit_store_flag): Rewritten. Is passed the operands
+ to compare in addition to the compare operation and emits both the
+ comparison and the store-flag insn.
+ Handles special-case of testing for A < 0 and A >= 0.
+ If result is constant, just return it.
+ Accepts an argument saying how to normalize the result and does
+ appropriate normalization.
+ Give preference to using the sign bit rather than the low-order bit.
+ Allow sxx insns to fail.
+ If don't have seq or sne insns, can sometimes do with abs.
+ * expr.c (expand_expr, case COND_EXPR): For X ? A + 1 : A, only
+ do store_flag if it is cheap.
+ (do_jump): True comparisons return STORE_FLAG_VALUE, not 1.
+ (compare_constants): Correctly handle unsigned comparisons.
+ Return STORE_FLAG_VALUE, not 1, for true comparison.
+ (compare_from_rtx): New name for compare1.
+ Accept size and alignment, for BLKmode.
+ No longer statuc.
+ (compare, compare_from_rtx): No need to pass forward and reverse codes;
+ can trivially derive the reverse code from the forward one.
+ All callers changed.
+ If one operand is constant, make it the second one.
+ (compare): Let compare1 do most of the work.
+ (do_store_flag): Rewritten, now lets emit_store_flag do most of
+ the work.
+ Handles the special-case of comparing a single bit with zero.,
+ Add additional argument ONLY_CHEAP; if non-zero, fail if it looks like
+ this will be an expensive operation; all callers changed.
+ If it looks like it will be possible to do a store-flag operation,
+ call emit_store_flag; if it can't do it, emit as assignments and a
+ jump. If it doesn't look possible to do a store-flag operation, return
+ zero before expanding anything.
+ * final.c: (final_scan_insn): Don't check STORE_FLAG_VALUE; if the
+ insn doesn't exist, we won't try to change it.
+ * genemit.c (gen_exp): Use const_true_rtx when appropriate.
+ * genrecog.c (add_to_sequence): Likewise.
+ (try_merge_1): Two nodes aren't identical if they are to test
+ different modes or if they have different values of EXACT.
+ * integrate.c: Don't supply a default value for STORE_FLAG_VALUE here.
+ * jump.c: Now includes expr.h (for emit_store_flag and get_condition).
+ (jump_optimize): Split optimization that made store-flag insn
+ into three separate optimizations, the first two of which are useful
+ even in the absence of store-flag operations.
+ (can_reverse_comparison): Set and use of cc0 must be immediately
+ adjacent.
+ (mark_jump_label): Abort if LABEL_REF codesn't contain a CODE_LABEL.
+ Consider two labels adjacent after reload if separated by just USE or
+ CLOBBER insns.
+ * loop.c: Now includes real.h.
+ (get_condition_for_loop): New function. All callers of get_condition
+ in this file now call this function.
+ (strength_reduce): no_labels_between_p now skips FROM.
+ (get_condition): No longer static.
+ Refine cases when we can't reverse a comparison operation.
+ * optabs.c (init_optabs): Initialize and define setcc_gen_code
+ instead of setcc_gen_fctn.
+ * rtlanal.c (no_labels_between_p): Skip FROM, like as ..._between_...
+ functions do.
+ (no_labels_between): Deleted.
+ (reg_set_last, reg_set_last_1): New functions.
+ * Makefile.in (jump.o): Now include expr.h.
+ (loop.o): Now includes real.h.
+
+ * c-tree.h (int_ftype_cptr_cptr_sizet, ptr_ftype_ptr_cptr_sizet):
+ New names.
+
+ * alliant.md, i386.md, m68k.md, m88k.md, ns32k.md, sparc.md: Add mode
+ to comparison operators (EQ, NE, etc.) to agree with the mode of the
+ destination.
+ * out-m88k.c (emit_test): Likewise.
+
+Fri Dec 14 00:12:46 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-decl.c (finish_struct): Strip NON_LVALUE_EXPR from field width.
+
+Thu Dec 13 13:10:47 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cplus-init.c (expand_vec_init): Add missing arg to
+ expand_exit_loop_if_false.
+
+ * config.gcc (tron): Alias for gmicro.
+
+ * c-decl.c (int_ftype_cptr_cptr_sizet): Variable renamed.
+ (ptr_ftype_ptr_cptr_sizet): Likewise.
+
+ * gcc.c (default_compilers): Handle .C.
+
+ * Makefile.in (enquire.o): Add -I. so can find stddef.h.
+ (install-cross): Install cc1obj like the others.
+
+ * Makefile.in (gnulib.target): Renamed from gnulib.
+ (gnulib): Renamed from tmpgnulib. Rename that file in this rule.
+ Also delete stamp-gnulib2 here.
+ (gnulib.portable, gnulib.convert): Input now is named gnulib.
+ (GNULIB_TARGET, GNULIB2_TARGET): Define these vars (already in use).
+ (gnulib2.target): Renamed from gnulib2.
+ (gnulib2): New rule, alias for gnulib2.target.
+
+ * local-alloc.c (local_alloc): Cast an enum used as index.
+ * optabs.c (emit_indirect_jump): Likewise.
+ * reload1.c (choose_reload_regs): Likewise.
+
+Thu Dec 13 12:38:31 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expmed.c (store_bit_field): Verify that operand 1 of movstrict
+ satisfies its predicate.
+
+Wed Dec 12 17:26:21 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * gvarargs.h: Avoid duplicate inclusion using _VARARGS_H.
+
+Wed Dec 12 14:11:30 1990 Tom Wood (wood at dg-rtp.dg.com)
+
+ * tm-m88k.h, out-m88k.c, m88k.md: Eliminated the fixed condition
+ code register. As a temporary measure, NOTICE_UPDATE_CC is used
+ to track swapped cmpsi cases.
+
+ * m88k.md (shift patterns): Deal with TARGET_*_LARGE_SHIFT
+ uniformly with define_expand. Make gen_lshlsi3 generate ASHIFT
+ and eliminate the optimization patterns using ASHIFT. Eliminate
+ other optimization patterns that will be handled by combine.
+
+Tue Dec 11 22:13:48 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * expr.c (convert_move): With slt, handle dest that's invalid.
+
+ * stmt.c, tree.h (stmt_nesting):
+ Typedef deleted; use `struct nesting *'.
+ * stmt.c (expand_start_cond): If exitable, make an exit label.
+
+Tue Dec 11 21:28:56 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (subst, case SUBREG): Update TO for earlier
+ changes so we can always detect (subreg (mem ...)).
+
+Tue Dec 11 10:56:53 1990 Craig Burley (burley at pogo.ai.mit.edu)
+
+ * stmt.c (expand_start_loop{,_continue_elsewhere}): Return pointer
+ to nesting structure (new type stmt_nesting).
+ (expand_exit_loop{,_if_false},expand_continue_loop): Accept pointer
+ to nesting structure, substitute loop_stack if 0 (same behavior as
+ before when there was no argument), so F90 CYCLE and EXIT statements
+ (like C's continue and break stmts) can refer to other than the
+ innermost loop.
+ (expand_start_cond): Uses new names for if-related labels that
+ reflect addition of "elseif" call, and sets endif_label to whatever
+ exit_label gets set to (so we don't generate two identical labels
+ for languages from which if is exitable via expand_exit_something).
+ (expand_start_elseif): New function, used by Fortran.
+ (expand_start_else): Moved above _end_cond so these four functions
+ appear in the order they get called; uses new names, and fills in
+ only endif_label if needed, not exit_label.
+ (expand_end_cond): Handles end of any if, not just if-without-else.
+ Generates both labels for next else/elseif pending (there was none)
+ and the endif itself, if they exist (and there will always be at least
+ one).
+ (expand_end_else): Gone, call expand_end_cond instead.
+ * c-parse.y, cplus-parse.y, objc-parse.y: Pass new 0 argument to
+ expand_..._loop_... to indicate the innermost loop; call
+ expand_end_cond instead of expand_end_else.
+ * tree.h: Typedef for stmt_nesting returned by expand_start_loop...
+ and change their return types accordingly.
+
+Mon Dec 10 06:59:14 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (check_asm_operands): Delete from here.
+ * recog.c (check_asm_operands): Move to here; no longer static.
+ (validate_change): Don't assume change is valid is asm_noperands >= 0.
+ If recog_memoized returns < 0, accept change if asm_noperands >= 0
+ and check_asm_operands returns non-zero.
+ (apply_change_group): Likewise.
+ (validate_replace_rtx_1): Swap operands on commutative operation
+ if first is constant.
+ Use plus_constant to simplify a PLUS with CONST_INT as second operand.
+
+ * reload.c (find_equiv_reg): We must have a stable SP if GOAL is
+ a MEM that uses SP.
+
+ * combine.c (try_combine): Don't do anything if I2 or I1
+ has an ASM_OPERANDS and CLOBBERS; we'll need those clobbers
+ and it is too messy to try to get things set up correctly.
+
+Sun Dec 9 22:07:41 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cccp.c (collect_expansion): Don't check for /* */ concat here.
+ (macroexpand): Always use raw arg if traditional.
+
+ * c-parse.y (unary): Mark address of label as constant.
+
+Sun Dec 9 14:45:34 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-class.c (propagate_basetype_offsets): Take effect on ASSOC
+ before recursive calling.
+ (finish_struct): Call `layout_decl' with zero for KNOWN_ALIGN
+ when laying out TYPE_DECL.
+ * cplus-tree.c (assoc_value): Change recursion condition to compare
+ ASSOC_VALUE (assoc) against TYPE_MAIN_VARIANT (type) instead of just
+ against type.
+
+Sat Dec 8 10:40:00 1990 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md (attributes): Reorganize and include a block diagram.
+ Make better use of defaults.
+ * m88k.md (peephole), out-m88k.c, tm-m88k.h (short_branch): Add
+ the sparc peepholes for changing bsr/br into bsr.n/addu or
+ bsr.n/subu. Install the length attribute for this. Requires the
+ use of `def' to accomodate broken assemblers in the bsr.n/addu
+ case.
+
+Fri Dec 7 06:12:43 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c (find_end_label): Increment usage count of label we return
+ so we know it won't go away.
+ (dbr_schedule): Decrement count of end label and delete it if dead.
+
+Wed Dec 5 17:36:23 1990 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md: Add instruction attributes for scheduling and delay
+ slot information.
+ * m88k.md (addsi pattern): Adding large constants does arise.
+ (udivsi pattern): Wrong predicate.
+ * tm-m88k.h, out-m88k.c (NOTICE_UPDATE_CC): Do so using
+ attributes.
+
+ * make-m88k, make-m88kdgux: Say how to create m88k-trace.asm.
+
+Wed Dec 5 13:52:16 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * optabs.c (expand_binop): Support insn_before == 0.
+
+ * function.c (optimize_bit_field): Fix wrong arg to validate_change.
+
+ * Makefile (includes): Export LIB.
+
+Wed Dec 5 13:31:57 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): Don't discard CLOBBERs from an insn
+ with ASM_OPERANDS.
+
+Tue Dec 4 16:12:21 1990 Tom Wood (wood at dg-rtp.dg.com)
+
+ * tm-m88k.h, out-m88k.c, m88k.md: More cleanups: introduce
+ POWER_OF_2 for tests (x && (x & (x-1) == 0); rename predicate
+ functions *_p instead of *_operand; cleanup addsi3 insns; simplify
+ udivsi3 insns; simplify memory shift insns; make LOW_SUM and HIGH
+ SImode instead of VOIDmode; add a predicate to the increment and
+ test peephole insn; deal with setting SFmode to zero; delete bogus
+ pattern for divide-by-power-of-2.
+ * make-m88k, make-m88kdgux: dg88k-trace.asm is now m88k-trace.asm.
+ Move movstr-m88k.sh to config/m88k-movstr.sh.
+
+Mon Dec 3 19:08:03 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * Makefile.in (gnulib2.ready): New target.
+ (stamp-gnulib2): Depend on that.
+ Avoids recompiling gnulib2 each time cc1 changes.
+
+Mon Dec 3 16:17:56 1990 Tom Wood (wood at dg-rtp.dg.com)
+
+ * tm-m88kdgux.h, xm-m88kdgux.h (SEPARATE_AUX_OUTPUT): Should be in
+ xm-m88kdgux.h.
+ * tm-m88k.h, out-m88k.c, m88k.md: Eliminated the fixed literal
+ synthesis register. Reworked the addressing method to be like the
+ sparc (uses HIGH and LO_SUM). Numerous cleanups. These changes
+ are based on work done by Steve Chamberlain (steve@cygnus).
+ * tm-m88k.h, out-m88k.c (BLOCK_PROFILER, FUNCTION_BLOCK_PROFILER):
+ Implemented.
+
+Mon Dec 3 15:19:04 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cccp.c (special_symbol): Use time_t as type of t.
+
+ * m88k-movstr.sh, m88k-trace.asm, va-m88k.h: New files.
+
+ * gcc.c: Don't define R_OK, etc. if already defined.
+
+ * out-sparc.c (finalize_pic, emit_move_sequence, output_arc_profiler):
+ Finish change to emit HIGH and LO_SUM as Pmode instead of VOIDmode.
+
+Sun Dec 2 22:13:53 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * config.gcc (tower): New alternative.
+ (mips-news): Adapt for version 2.
+
+ * tm-tower.h, tm-tower-as.h, xm-tower.h: New files.
+
+Sun Dec 2 17:47:28 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (eliminate_regs, case ASM_OPERANDS): Fix typo in testing
+ for changed vector.
+
+ * out-rs6000.c (output_epilogue): Fix typo restoring general registers.
+ (print_operand): Add new option %H.
+ * rs6000.md: Add (clobber (reg:SI 64)) to many patterns even though
+ they don't clobber MQ to allow combining to work well. This will be
+ removed once combine knows how to add clobbers when required.
+ Change patterns to reflect new canonicalization rules.
+ Where we have (and (xshift)), add patterns for (zero_extend (xshift)).
+ (andsi3, xorsi3): Fix bug in case where two insns are needed.
+ (moveti): Don't call change_address when in reload.
+ (sign_extend): Add patterns for sign extend preceeded or followed by
+ one of the shifts it will do. Use %H to output the merged shift.
+
+ * out-romp.c (print_operand): Allow exact_log2 result to be zero.
+ * romp.md: Likewise.
+ * tm-romp.h (CONST_OK_FOR_LETTER): Likewise.
+
+ * a29k.md (type attribute): Add types for floating-point insns.
+ (in_delay_slot attribute): Update to allow for new types.
+ (function_unit definitions): Add definitions for floating-point units.
+ (andcb*3): Delete obsolete names.
+ (convert insn): Use register_operand instead of gen_reg_operand for
+ floating-point operand.
+ (cpeq, feq, deq, etc): New patterns.
+ (floating-point arithmetic): Add support for 29050 insns and
+ accumulators; indicate function unit usage.
+ (ior/and patterns): Put NOT as second operand.
+ (orn insn): New, for 29050.
+ (load patterns): If using match_operator, make it the highest operand
+ number.
+ (loadm insns): Add workaround for rev A1 bug on 29050.
+ (negsf2, negdf2): Don't use XOR to negate on 29050.
+ (movsf, movdf): Add support for accumulators on 29050.
+ (movsi, movhi, movqi): No need to support special->special copies.
+ Support consthz insn on 29050.
+ (compare, scc, and branch insns): Rework to not use cc0. Use a pseudo
+ register instead. Compare doesn't generate any code, but merely
+ saves the operands. scc and branch then emit the appropriate compare
+ and jump (if branch) insns.
+ (tstsi): Delete pattern; not used when no cc0.
+ (peepholes): Remove peepholes to convert jumps to scc insns; now
+ done in jump.c.
+ * out-a29k.c (a29k_compare_*): New variables.
+ (long_const_operand): Anything with low-order 16 bits zero is not a
+ long constant on the 29050.
+ (accum_reg_operand): New function.
+ (gen_reg_operand): Returns false for accumulator registers.
+ (output_operand): Allow accumulators.
+ (ne_comparison_p, fp_comparison_p, return_peep_operand): Deleted.
+ (fp_comparison_operator, branch_operator): New functions.
+ (output_compare): Deleted.
+ (print_operand): Change meaning of %b and %B.
+ Add new code %J.
+ * tm-a29k.h (TARGET_VERSION): Say if compiling for 29050.
+ (TARGET_FLAGS): Add -29000 to turn off support for 29050; this is
+ still the default.
+ (various register macros): Add support for the floating-point
+ accumulators on the 29050.
+ (CONST_OK_FOR_LETTER): Use 'O' for a constant that can be set using
+ conthz on the 29050; keep old definition for 29000.
+ (STORE_FLAG_VALUE): Now 0x80000000.
+ (ASM_FILE_START): Write ".cputype 29050" when compiling for 29050.
+
+ * combine.c (subst): Put NOT, NEG, MULT, PLUS, and MINUS as the
+ first operand of commutative operations. Note that NOT used to be
+ put as the second operand but it has always been assumed that
+ MULT would be the first operand in address expressions, so we have
+ to change the previous canonicalization. This is possible now that we
+ have eliminated the andcbm3 operations.
+ * i860.md (andnot): Remove obsolete andcbsi3 name and place NOT
+ as first operand.
+ * m68k.md (fpm*): Delete patterns with MULT as second operand and
+ use "@" construct when possible.
+ * m88k.md (and.c, ior.c): Remove obsolete andcbsi3 and iorcbsi3 names.
+ Delete patterns with NOT as second operand.
+ (xor.c): Rewrite in new canonical form.
+ * mips.md (nor): Rewrite in new canonical form.
+ * pyr.md (bicw): Remove pattern with NOT as first operand, removing
+ obsolete name andcbsi3 in the process.
+ * sparc.md: Remove patterns with NOT as first operand.
+ Remove obsolete names andcbsi3, iorcb3, and xorcbsi3.
+ Rewrite xnor into new canonicalized form.
+ Add mode to HIGH and LO_SUM operations.
+ * vax.md (bic*): Remove obsolete andcbm3 names.
+ Put NOT as first operand when both generating and recognizing RTL.
+ (jlbc): Rewrite with NOT as first operand.
+
+Sun Dec 2 17:08:16 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * m68k.md (recognizer for casesi_2): Handle ASM_RETURN_CASE_JUMP.
+
+ * stddef.h (ptrdiff_t): Prevent definition, as with size_t.
+
+Sat Dec 1 16:31:30 1990 Ron Guilmette (rfg at ncd.com)
+
+ * dwarfout.c (lookup_filename, dwarfout_finalize): changed from
+ maintaining a linked list of filename entries to maintaining an
+ (expandable) array of filename entries instead. Also, changed
+ code so that *all* filename strings are output (to the .files
+ section of the asm file) in one swell foop just as the asm file is
+ being finalized rather than writing out new filenames one-by-one
+ as they arise (as previously). This circumvents a problem caused
+ by rfg's naive assumption that assemblers kept a stack of prior
+ section names (of depth > 1) which could be successively popped
+ via multiple `previous' directives. For some assemblers, the
+ depth of the stack is only 1 and they can get confused if you do
+ two (or more) `previous' directives in a row. Anyway, it is no
+ longer either necessary or useful to do that, so who cares.
+
+ * dwarfout.c: added code to output newlines to the asm file just
+ prior to each and every change of section (for better readability
+ of the asm files).
+
+ * dwarfout.c: changed code so that if DWARF_DESCRIBE_USED_EXTERNS
+ is defined, it forces DWARF_LOCATION_ATTRIBUTES to also be defined.
+
+ * dwarfout.c: changed code so that if DWARF_LOCATION_ATTRIBUTES
+ is defined, it forces DWARF_DESCRIBE_FILES to be defined (to `1').
+
+ * dwarfout.c: changed code so that if DWARF_DESCRIBE_FILES is not
+ already defined (in the user's tm.h file) it will automatically be
+ defined (by default) to `1'. Also changed all instances of
+ `#ifdef DWARF_DESCRIBE_FILES' to `#if DWARF_DESCRIBE_FILES'.
+ The user must now intentionally *disable* this feature (by
+ defining DWARF_DESCRIBE_FILES to `0' in his tm.h file) if he
+ wishes to have the additional information about files suppressed.
+
+ * dwarfout.c: changed comments relating to optional defines for
+ extended GNU DWARF features to include more information and to
+ add some additional clarity.
+
+Sat Dec 1 16:00:34 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (subst): Call reverse_condition instead of
+ reverse_comparison.
+ We are allowed to reverse floating-point EQ and NE comparisons.
+
+ * combine.c (subst): Call simplify_and_const_int for all AND
+ and ZERO_EXTEND cases and all cases where we make one of them.
+ Remove all other code in AND and ZERO_EXTEND cases.
+ (simplify_and_const_int): Rewritten to follow a consistent model
+ of tracking what AND's need to be done and which bits are not
+ significant. Consistently try a ZERO_EXTEND for all cases where
+ the result is an AND with a mode-wide mask. Move all remaining
+ cases from AND any ZERO_EXTEND cases from subst.
+
+Sat Dec 1 09:13:17 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-tree.h (lang_type): Remove any_assigns_this,
+ none_assigns_this from type_flags.
+ * cplus-decl2.c (get_temp_name): If the initializer is a
+ pointer to zero, cache it in EMPTY_TABLE.
+ (finish_builtin_type): New function, to factor common code
+ arising from building internal structures.
+ * cplus-decl.c (init_decl_processing): Call it.
+
+Fri Nov 30 10:39:04 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-decl.c (finish_function): Use CLASSTYPE_ASM_WRITTEN instead
+ of TREE_USED to indicate that we need debugging info for
+ TTYPE.
+ Note that nobody ever sets EXTENDED_DBX_DEBUG. For now,
+ change to test DBX_DEBUG. For later, change everything to
+ key off of EXTENDED_DBX_DEBUG.
+ Also, set `warn_return_type' to one always, since this warning
+ is too valuable to lose.
+ * cplus-tree.c (lang_output_debug_info): Don't test TREE_USED. That
+ field is already used by other routines, and we have all we need now
+ in CLASSTYPE_ASM_WRITTEN.
+ * cplus-dbxout.c (dbxout_type_method_1): Handle const,
+ volatile, and const/volatile member functions.
+
+Fri Nov 30 04:51:46 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (reg_last_set_value): New variable.
+ (combine_instructions): Allocate and initialize it.
+ (record_dead_and_set_regs): Set reg_last_value to source
+ of assignment; clear it for a CLOBBER or partial assignment.
+ (subst): Use reg_last_set_value instead of interpreting the
+ insn in reg_last_set as if it was a single SET.
+
+ * combine.c (gen_lowpart_for_combine): Call gen_lowpart for CONST_INT.
+ When making a new MEM, copy MEM_VOLATILE_P and MEM_IN_STRUCT_P.
+ If cannot recognize the argument, just form a SUBREG; usually,
+ it won't be recognized, but sometimes will allow further
+ simplifications.
+
+ * regclass.c (reg_scan): Save size of uid map; reallocate if
+ we have more registers than we allocated.
+ Leave some extra room in map.
+
+ * stmt.c (emit_case_nodes): Supply missing argument to emit_cmp_insn.
+
+ * fold-const.c (decode_field_reference): Add missing arg declaration.
+
+ * expmed.c (store_bit_field): Add missing last argument to
+ recursive call.
+
+ * cse.c (cse_insn): Remove extra arg passed to rtx_equal_p.
+
+ * Makefile.in (proto): Make protoize.1 and unprotoize.1.
+ (protoize.1, unprotoize.1): New targets.
+ (install_man): Install protoize.1 and unprotoize.1./
+ * proto-unproto.1: New file.
+
+ * loop.c (scan_loop): Properly set SET_SRC in movables entry for
+ MOVE_INSN == 1 and CONSEC > 0 case.
+ (force_movables): Don't look at SET_SRC when CONSEC > 0.
+
+ * expr.c (expand_expr, case ARRAY_REF): Ensure TYPE_POINTER_TO
+ gets initialized after we build a variant type.
+
+Fri Nov 30 00:35:06 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * m68k.md (ashr of 16 to 24 bits): Use extl, not extw.
+
+Thu Nov 29 21:41:03 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * tm-vax.h (BLOCK_PROFILER, FUNCTION_BLOCK_PROFILER): New macros.
+
+ * gcc.c (add_prefix): Add new element, don't replace old first elt.
+
+ * dwarfout.c (dwarfout_finalize): Go to DEBUG_SECTION first thing.
+
+Thu Nov 29 17:50:43 1990 Richard Kenner (kenner at vlsi1.ultra.nyu)
+
+ * stmt.c (expand_end_loop): Stop looking for branch to the loop
+ exit when we hit a NOTE_INSN_BLOCK_{BEG,END}.
+ * jump.c (duplicate_loop_exit_test): Likewise.
+ Also, only copy line-number notes.
+
+ * integrate.c (expand_inline_function): Call expand_expr for the
+ arguments before allocating maps that are based on register numbers.
+
+ * loop.c (loop_reg_used_before_p): Accept new argument, SET, to
+ indicate which part of INSN is setting the relevant register.
+ (scan_loop): Pass new arg to loop_reg_used_before_p.
+
+ * function.c (optimize_bit_field): Don't assume ZERO_EXTRACT can
+ be replaced by MEM; use validate_change to check.
+
+ * reload.c (find_reloads_toplev): Add missing arg to recursive call.
+
+ * calls.c (expand_call): Correct two cases of missing mode to gen_rtx.
+
+Thu Nov 29 02:42:35 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * version.c: Bump version number to 1.90.04.
+
+ * toplev.c (rest_of_compilation): If FLAG_PIC is nonzero, emit any
+ special PIC code once we start really compiling a function (i.e., we
+ are not in an inline function). Inline functions cannot
+ meaningfully hold PIC code because there is no notion of position
+ independence in code that isn't really being written down.
+
+ * Makefile.in: Don't build cplus-cadillac.o by default. Build
+ cplus-edsel.o instead. Until Lucid frees their programming
+ environment, their Cadillac will always be an Edsel to GNUsers.
+
+ * stmt.c (fixup_gotos): Change loop to run in two passes so that
+ cleanups don't experience a race condition.
+ (expand_cleanups): Replace Nov 5 word-around with consistency check.
+ The same cleanups should never be run twice.
+
+ * cplus-decl.c (lang_{init,finish}): Move these functions...
+ cplus-lex.c: ...to here. Also, make change to lang_init analogous
+ to Nov 27 change for C compiler.
+
+ * cplus-decl.c (pushdecl): Don't warn about static/extern conflicts
+ if X is a TYPE_DECL.
+ (build_enumerator): Certain CONST_INT nodes cannot be coopted to be
+ the constant for enumerator. Mark them as non-shareable and don't
+ coopt them.
+
+ * cplus-decl.c (lang_{init,finish}): Declare these to be void
+ functions to match new tree.h.
+
+Wed Nov 28 18:48:33 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (eliminate_regs): Convert (subreg (mem)) to (mem) when
+ not a paradoxical SUBREG.
+
+Wed Nov 28 17:15:43 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * emit-rtl.c (gen_label_rtx): Clear LABEL_NAME via gen_rtx.
+
+Tue Nov 27 21:54:15 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * varasm.c (assemble_external): Never write a .extern for a static
+ name.
+
+ * recog.c (validate_replace_rtx_1): Handle making a SUBREG of a MEM
+ by trying a new MEM.
+
+Tue Nov 27 11:54:28 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-lang.c, objc-action.c: Include input.h.
+ (lang_init): Call check_newline here.
+ * toplev.c (compile_file): Not here.
+ Call lang_init after setting input_filename.
+
+ * tree.h: Declare numerous functions that the front end must provide.
+
+ * rtl.h (LABEL_REFS): Use operand 5, same as LABEL_NUSES.
+
+ * toplev.c (warn_return_type, W_options): Handle -Wreturn-type here.
+ * c-decl.c: Not here.
+ * flags.h: Declare it here, not in c-tree.h.
+
+ * gcc.c (pexecute): Wait and retry if fork fails.
+
+ * expr.c (do_jump): Pass all args to get_inner_reference.
+ (expand_assignment): Fix typo in arg to get_inner_reference.
+
+ * tm-hp9k320.h (STANDARD_STARTFILE_PREFIX): Don't alter if already set.
+
+Mon Nov 26 18:28:51 1990 Michael I Bushnell (mib at churchy.ai.mit.edu)
+
+ * cccp.c (handle_directive): Do backslash-newlines inside of
+ strings.
+
+Mon Nov 26 15:39:29 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cccp.c (main): Handle -w.
+ (warning): Do nothing if -w.
+ * gcc.c (compilers): Pass -w to cpp.
+
+ * c-decl.c (grokdeclarator): Don't discard arg types
+ for prototype even if traditional.
+
+Sun Nov 25 20:52:31 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * protoize.c: Undef CHAR_BIT, etc, before including limits.h.
+
+ * reload1.c (old_asm_operands_vec, new_asm_operands_vec):
+ Type should point to a vector.
+ (Eliminate_regs): For asm_operands, copy the vector properly.
+
+Sun Nov 25 20:35:12 1990 Richard Kenner (kenner at vlsi1.ultra.nyu)
+
+ * jump.c (jump_optimize): Fix typo in stack push combining code.
+
+ * reload1.c (eliminate_regs): Ensure we share operands 3 and 4
+ of ASM_OPERANDS operations if they were originally shared.
+ Copy all rtx flags when making a new MEM.
+ (eliminate_regs_in_insn): Initialize for ASM_OPERANDS sharing check.
+
+Sun Nov 25 16:37:10 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * Makefile.in (stamp-gnulib2): Don't depend on gnulib2-indirect.
+
+ * gcc.c (do_spec_1): Handle %W{...}.
+ (default_compilers): Use %W{...} when passing -o option.
+
+Sat Nov 24 16:39:56 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cplus-lex.c (init_lex, do_pending_inlines, reinit_lang_specific):
+ Add conditionals for __GNU_LIBRARY__.
+
+Thu Nov 22 13:48:06 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (optimize_bit_field_compare): Pass additional
+ arg to get_inner_reference; it gets set if something was volatile.
+ (decode_field_reference): New arg PVOLATILEP; passed to
+ get_inner_reference.
+ (merge_component_references): Add pointer to place to store if
+ something is volatile to calls to decode_field_reference; don't
+ do anything if it gets set (this may be very conservative).
+
+ * stmt.c (expand_end_loop): Skip initial CODE_LABEL at start of
+ loop when looking for qualified conditional exit.
+
+ * reload.c (push_reload): If (subreg:M1 (reg:M2 ....)) and we
+ have trouble access the register in M1, reload the reg, not subreg.
+ Fix typo in testing for memory.
+ (reload): Force reload of the operand in the above cases.
+
+Wed Nov 21 17:39:42 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * loop.c (strength_reduce, combine_givs): Don't penalize
+ non-replaceable givs unless they are user variables; temporaries
+ are probably dead even though we can't prove it.
+
+ * integrate.c (save_constants): Don't get confused by looking
+ inside CONST_DOUBLE_MEM.
+ Call recursively on what get_pool_constant returned, in case it
+ was itself the address of a pool constant.
+ (copy_for_inline, copy_rtx_and_substitute, restore_constants):
+ Remake CONST_DOUBLE so it gets chained in correctly and we don't use
+ obsolete CONST_DOUBLE_MEM values. Call recusively on operand we are
+ about to pass to force_const_mem; it might have been a case of a
+ constant value being an address of another constant.
+
+ * loop.c (find_mem_givs): Don't make a DEST_ADDR giv with mult_val == 1
+ and add_val == 0.
+ (maybe_eliminate_biv_1): Turn off elimination in (compare biv1 biv2)
+ cases; they have problems.
+
+Wed Nov 21 16:06:14 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * dwarfout.c (location_attribute): Offset for bitfields is special.
+
+ * expr.c (get_inner_reference): New arg pvolatilep.
+ (expand_expr, expand_assignment): Use to set MEM_VOLATILE_P.
+
+Wed Nov 21 10:34:25 1990 Tom Wood (wood at dg-rtp.dg.com)
+
+ * stor-layout.c (layout_decl): Record whether a FIELD_DECL is a
+ bit-field and if so its original type.
+ * tree.h (DECL_BIT_FIELD_TYPE): New.
+ * dbxout.c (dbxout_type): Use DECL_BIT_FIELD_TYPE.
+ * dwarfout.c (output_member_die, bit_offset_attribute,
+ bit_size_attribute, member_declared_type): Use DECL_BIT_FIELD_TYPE.
+ * sdbout.c (sdbout_one_type): Use DECL_BIT_FIELD_TYPE.
+
+ * sdbout.c (DEBUGGER_ARG_OFFSET, DEBUGGER_AUTO_OFFSET): New
+ interfaces to compute the location of arguments and automatic
+ variables.
+ * dbxout.c (DEBUGGER_ARG_OFFSET, DEBUGGER_AUTO_OFFSET): Likewise.
+
+ * dbxout.c (dbxout_parms): Describe a parameter passed in
+ registers but living on the stack as N_PSYM rather than N_LSYM.
+ These are typically arg_pointer based locations.
+
+ * out-m88k.c (m88k_debugger_offset): New function.
+ * tm-m88k.h (DEBUGGER_ARG_OFFSET, DEBUGGER_AUTO_OFFSET): Replaces
+ SDB_AUTO_NORMALIZE_OFFSET.
+ * tm-m88k.h (STACK_BOUNDARY): Update to 16 byte aligned stacks.
+
+Tue Nov 20 23:48:57 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * dwarfout.c (dwarfout_init): Set stack depth to 1 at start.
+ (output_padded_null_die): New function.
+ (dwarfout_finalize): Use that to ensure length divisible by 4.
+
+ * ns32k.md (addsi3): Don't use `addr' for very large displacements.
+
+Tue Nov 20 05:48:42 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (can_reverse_comparison_p): It is safe to reverse an EQ
+ or NE comparison, even if IEEE floating-point.
+
+ * integrate.h (struct inline_remap): const_*_map now maps registers
+ in calling function, not called function.
+ Add fields to save values recorded from SETs.
+ * integrate.c: Now includes insn-config.h and real.h.
+ (expand_inline_function): New meaning for const_*_map.
+ Don't fill in constant equivalences here; now done in try_constants.
+ Show CALL_INSNs potentialy clobber all hard registers since we
+ now record equivalences for hard registers.
+ (try_constants): No longer need original RTL; all callers changed.
+ Call note_stores to kill any known equivalences for registers changed.
+ Record equivalences for PC, CC0, and registers set by this insn.
+ (subst_constants): No longer need original RTL; all callers changed.
+ Reflect new meaning of const_*_map.
+ Perform more extensive constant folding, basically a subset of
+ fold_rtx in cse.c; specifically, fold the result of comparison
+ operations and IF_THEN_ELSE operations.
+ Record the constant equivalences of SETs, if any.
+ (try_fold_condition, const_equiv, fold_out_const_cc0): Deleted.
+ * Makefile.in (integrate.o): Now includes insn-config.h and real.h.
+
+Sat Nov 17 07:48:45 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * local-alloc.c (local_alloc): Don't allocate a reg that wants a
+ class that has only one register; let global-alloc do it so that it
+ can be given a GENERAL_REG if reload needs a spill reg of that class.
+
+ * regclass.c (regclass, reg_class_record): Count savings in loops as
+ being greater the same way we adjust reg_n_refs for loops in flow.c.
+
+ * expmed.c (store_bit_field, extract_bit_field): Remove change of
+ Oct 16; it causes problems with long long bit fields.
+
+ * rtlanal.c (reg_overlap_mentioned_p): If called with a constant,
+ return zero. If called with a MEM, return 1 iff the second arg
+ contains a MEM.
+ * reload.c (push_reload): Call reg_overlap_mentioned_p only if OUT
+ is a MEM and then pass it the address of OUT.
+
+ * cse.c (cse_insn): Refine when SRC_EQV, SRC, and DEST are added
+ to the hash table. SRC_EQV is not added to the hash table if it
+ is volatile or equal to DEST and similarly for SRC. DEST is not
+ added to the hash table unless either SRC_EQV or SRC is.
+
+Thu Nov 15 23:43:20 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-typeck.c (convert_for_assignment): Change warning message.
+
+Thu Nov 15 18:44:49 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * stmt.c (expand_end_loop): Generalize code to look for more
+ than one branch to the exit and include unconditional branches
+ to the exit; move the whole range to the end of the loop.
+ * jump.c (duplicate_loop_exit_test): New function.
+ (jump_optimize): Call it.
+ Don't allocate jump_chain until we have finished deleting dead code.
+ Leave some more room in jump_chain.
+ (simplejump_p): Reject if not JUMP_INSN.
+ (delete_insn): If simplejump_p, remove from jump chain.
+ * loop.c (loop_skip_over): Deleted.
+ (scan_loop): No longer call it.
+ * cse.c (predecide_loop_entry): Deleted.
+ (cse_basic_block): No longer call it.
+
+Thu Nov 15 18:00:20 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * math-68881.h (HUGE_VAL): Add extra braces for Sun.
+
+ * stor-layout.c (layout_type): Don't let array have less
+ alignment than its mode calls for.
+
+Thu Nov 15 13:05:30 1990 Tom Wood (wood at dg-rtp.dg.com)
+
+ * sdbout.c (sdbout_parms, sdbout_reg_parms): Reimplemented based
+ on dbxout_parms and dbxout_reg_parms.
+
+Wed Nov 14 08:48:43 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (emit_...): All of these now return the last insn
+ emitted; previously some of them returned void.
+ (emit_barrier_before): New function, similar to others.
+ * rtl.h: All emit_... functions now return an rtx; reorder so
+ declarations are in the same order as definitions in emit-rtl.c.
+
+ * reorg.c (steal_delay_list_from_{target,fallthrough}): Add missing
+ test when checking candidate insn for resource conflicts.
+
+Wed Nov 14 07:08:19 1990 Tom Wood (wood at dg-rtp.dg.com)
+
+ * c-parse.y (pushlevel, compstmt): Place a line note at the first
+ token beginning a block and at the close brace ending a block.
+ These are the conventional locations for SDB and DWARF debugging
+ information.
+
+Tue Nov 13 18:16:47 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * function.c (assign_stack_local): If alignment not specified
+ and not BLKmode, use at least word alignment.
+ (assign_outer_stack_local): Likewise.
+
+ * sparc.md: Turn off patterns that specify no_ov or CC_NO_OVERFLOW.
+
+ * dwarfout.c (file_attribute): Fix arg to ASM_OUTPUT_DWARF_ATTRIBUTE.
+ (AT_line, AT_file): New definitions.
+
+ * out-i860.c (output_block_move): Move .Lm%3 down one insn.
+
+ * c-decl.c (grokdeclarator): -funsigned-bit-field doesn't affect enums.
+
+Tue Nov 13 09:28:27 1990 Tom Wood (wood at dg-rtp.dg.com)
+
+ * gcc.c (default_compilers): Report an error if -C is used without
+ -E. Pass -H to cpp.
+
+ * sdbout.c (plain_type, plain_type1): save and output the
+ rightmost array dimensions.
+
+ * syms.h (enum sdb_type): Add T_VOID, equal in value to T_ARG.
+ * sdbout.c (plain_type_1): Use T_VOID for VOID_TYPE and define it
+ to be T_INT if not present in <syms.h>.
+
+ * sdbout.c (sdbout_toplevel_data): Use abort rather than fatal.
+
+Mon Nov 12 08:49:33 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * expr.c (compare): Fix use of GET_MODE_CLASS so we don't abort if
+ MODE is VOIDmode.
+ * optabs.c (init_optab): Call `xmalloc' instead of `malloc'.
+
+ * out-sparc.c (hard_regno_mode_ok): Change initialization of array
+ to match behavior of Nov 11 change for complex modes.
+
+ * jump.c (delete_labelref_insn): Chase all LOG_LINKS of insn to try
+ to delete references to LABEL. This is needed for machines like
+ SPARC which use multiple insns to get the value of LABEL into a
+ register.
+
+Mon Nov 12 16:07:27 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * machmode.def (SCmode, ...): Class is MODE_COMPLEX_FLOAT.
+
+Sun Nov 11 00:27:34 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * tm-i860.h (HARD_REGNO_MODE_OK): Handle values more than 2 regs long.
+ * tm-m68k.h (HARD_REGNO_MODE_OK): Likewise, for d7/a0 boundary.
+ * tm-spur.h (HARD_REGNO_MODE_OK): Likewise, for 31/32 boundary.
+ * tm-*.h (HARD_REGNO_NREGS): Use GET_MODE_NUNITS to handle
+ complex values in fp registers on machines where one reg holds a DF.
+
+ * sdbout.c (sdbout_one_type): Do nothing for incomplete type.
+
+ * c-decl.c (duplicate_decls): Warning only when redefining built-in fn.
+
+ * c-decl.c (init_decl_processing): Use sizetype, not unsigned long,
+ in prototypes for memcpy and memcmp.
+
+ * c-parse.y (component_decl): Don't read the semicolon here.
+
+ * toplev.c (compile_file): Reverse top-level decls before output.
+
+Sat Nov 10 22:27:47 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * stor-layout.c (layout_type): Use MODE_COMPLEX_{INT,FLOAT}.
+
+Sat Nov 10 20:34:55 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload.c: Provide a default definition of REGISTER_MOVE_COST.
+
+Sat Nov 10 01:43:09 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-init.c (emit_base_init): Don't use CLASSTYPE_ASSOC as a list
+ of only immediate basetypes anymore. Use `get_base_distance' to
+ check whether a type is an immediate basetype or not.
+
+ * stmt.c (expand_return): Don't emit a USE if VAL is a
+ pseudo-register.
+
+ * integrate.c (function_cannot_inline_p): Call to strcmp for
+ "__builtin_va_alist" must use IDENTIFIER_POINTER not
+ DECL_NAME.
+
+ * genattrtab.c (check_attr_test): Use XSTR macro instead of
+ XEXP macro in places where strings are used.
+
+ * tree.c (type_hash_lookup): Have to check TYPE_DOMAIN for non-zero
+ before comparing the equality of the possible lists.
+
+ * cplus-typeck.c (build_c_cast): Check TREE_TYPE before checking
+ that the TREE_TYPE is an OFFSET_TYPE.
+
+ * cplus-typeck.c (c_expand_return): Use DECL_RESULT of
+ current_function_decl instead of `result' since `result' might be
+ set to zero.
+
+ * cplus-decl.c (xref_tag): Fixed typo in setting
+ TYPE_USES_COMPLEX_INHERITANCE.
+
+ * cplus-tree.c (assoc_value): Changed interface to take COPYING
+ parameter.
+ * cplus-{class,init,search,tree}.c All callers changed.
+
+ * cplus-typeck.c (build_c_cast): Resolve OFFSET_REFs if the type we
+ are converting to is not an OFFSET_TYPE.
+
+Thu Nov 8 15:26:27 1990 Craig Burley (burley at pogo.ai.mit.edu)
+
+ * tm-*.h: Try to change HARD_REGNO_NREGS, HARD_REGNO_OK, and other
+ macro defs to handle new complex type stuff. Mostly guesswork; needs
+ checking by people who really know each machine.
+ * machmode.def (SCmode, DCmode, XCmode, TCmode): New complex modes.
+ * machmode.h (GET_MODE_ALIGNMENT): New macro from stor-layout.c.
+ * tree.c (build_complex_type): New function.
+ * stor-layout.c (layout_type): Handle COMPLEX_TYPE.
+ * expr.c (compare1, compare, move_block_to_reg, emit_push_insn):
+ Change uses of GET_MODE_CLASS.
+ * optabs.c (expand_binop, expand_twoval_binop, expand_unop):
+ (emit_cmp_insn): Likewise.
+
+Thu Nov 8 06:19:57 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * local-alloc.c (no_conflict_p): Initialize *WHERE_DEAD; previously
+ uninitialized.
+
+Thu Nov 8 01:08:45 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-parse.y (yylex): Size of wide STRING_CST counted terminator wrong.
+
+Wed Nov 7 14:55:38 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * gnulib2.c (L_trampoline): Put it inside a dummy function.
+
+ * enquire.c: Renamed from hard-params.c; new vers from steven@cwi.nl.
+ Modified to undef CHAR_BIT, etc. if defined in stdio.h.
+ * Makefile.in (enquire): Targets renamed.
+ (enquire.o): Define NO_MEM.
+
+Wed Nov 7 14:18:34 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (invert_jump): If it is going to fail (i.e., redirect_jump
+ fails), don't invert the jump.
+
+ * expr.c (expand_expr, case COND_EXPR): Don't accept a hard register
+ as a target if we are going to store into it before testing the
+ condition because that evaluation may involve a subroutine call
+ which might clobber it.
+
+ * jump.c (delete_jump): reg_set_p should be called with PATTERN (insn).
+ (thread_jumps): Add omitted last argument to rtx_equal_for_thread_p.
+
+ * reload.c (find_reloads): Only skip insns which set one hard register
+ to another if the cost of doing so is low; if not, there may not be
+ a single insn to do the copy and we may need a reload register.
+
+Wed Nov 7 00:01:18 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-parse.y (component_decl_list): Allow missing semi at end.
+
+ * loop.c (move_movables): When moving and deleting library call,
+ don't be confused if an insn is deleted.
+
+Tue Nov 6 20:49:57 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * tm-m68k.h (TRANSFER_TO_TRAMPOLINE): Fix asm syntax.
+
+ * xm-iris.h (alloca): Delete redundant definition.
+ * tm-iris.h (CPP_SPEC): Define variant symbols starting with _.
+ Define __EXTENSIONS__.
+
+ * config.gcc (editing .gdbinit): Search current dir, not just srcdir.
+
+Tue Nov 6 22:24:09 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case COND_EXPR): Generate efficient code for
+ A ? A : FOO and similar.
+
+ * combine.c (subst): If we have, e.g., (lt CONST FOO), convert it
+ to (gt FOO CONST).
+
+ * recog.c (comparison_operand): Use comparison_code_p.
+
+ * genconfig.c (walk_insn_part): Add operand to indicate if PART is
+ going to be used to recognize an insn (as opposed to emitting rtl).
+ If not, ignore CC0.
+ (gen_insn, gen_expand, gen_split, gen_peephole): Add new operand to
+ walk_insn_part calls.
+
+ * cse.c (find_comparison_args): Correctly compute rtx_code of
+ comparison; if we find another comparison code inside, use it.
+ * loop.c (get_condition): Likewise.
+
+ * expr.c (expand_builtin): For ffs, don't pass VOIDmode to expand_unop.
+
+Mon Nov 5 12:55:00 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * final.c (output_addr_const): Don't print parens for CONST.
+
+ * reload1.c (choose_reload_regs): Handle case where find_equiv_reg
+ returns a SUBREG. Also, use variable `regno' uniformly throughout
+ code that finds equivalent register.
+
+ * gnulib2.c (__floatdisf, __fixunssfsi): New functions.
+ (__fixsfdi, __fixunssfdi): New functions.
+ * gnulib.c (__floatsisf, __fixsfsi): New functions.
+
+Mon Nov 5 06:37:02 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (fold, case EQ_EXPR and NE_EXPR): Convert, e.g.,
+ (A & 2) == 2 to (A & 2) != 0. This eliminates the need for these
+ patterns in MD files.
+ Detect more general cases of comparing something with itself.
+
+Mon Nov 5 00:09:55 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * stmt.c (expand_cleanups): Don't run any cleanup twice.
+
+Sun Nov 4 23:49:22 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (convert_move): Use emit_no_conflict_block when converting
+ SImode to DImode.
+ If have slt insn, emit a compare insn; we must not have a use of
+ cc0 without a set; normally, the compare will be deleted as
+ redundant in final.c.
+ Use shift rather than clear/test/negate for high-order word when
+ doing sign extension.
+
+ * optabs.c (emit_no_conflict_block): Don't put REG_NO_CONFLICT
+ notes on the trailing copy insn; nobody looks there.
+
+ * combine.c (try_combine): Don't combine a reg-reg copy if the
+ destination is used in a REG_NO_CONFLICT note.
+
+ * reload.c (find_equiv_reg): Use true_regnum to support SUBREGs
+ as well as REGs.
+
+Sun Nov 4 12:55:03 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * i386.md (extend*): Take out last change.
+ Unix assembler rejects movsx...
+
+ * expr.c (expand_expr): Special case for ignored volatile
+ failed to return.
+
+Sat Nov 3 14:42:34 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (do_jump, case PLUS_EXPR): Turn off this case; it was a
+ pessimization.
+
+Fri Nov 2 01:51:31 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * stmt.c (expand_return): Don't emit a USE if VAL is a
+ pseudo-register.
+
+Fri Nov 2 15:30:48 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * gnulib2.c (__builtin_saveregs): Add version for i860.
+
+ * out-i860.c (output_block_move): Rearrange the copy loop.
+ Now uses two labels and a more complicated lead-in.
+
+Fri Nov 2 14:17:24 1990 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md (extendsidi2): New define_expand.
+
+ * out-m88k.c: Converted various constructs to use conventinal
+ formatting.
+
+ * m88k.md (ext pattern): Must have parens.
+ * m88k.md (mul/div patterns): Added better documentation. Removed
+ unfounded restriction on immediate values.
+ * m88k.md (increment and test peephole): Don't use %L.
+
+ * out-m88k.c (m88k_layout_frame): Must allocate space for the
+ addressing base register (-mpic).
+ * out-m88k.c (output_tdesc): Use version 2 tdesc with PIC.
+
+ * tm-m88k.h, tm-m88kdgux.h,: Don't predefine memcpy and others.
+ * tm-m88k.h: Fixes for dwarf.
+ * tm-m88ksvr4.h: Dwarf changes.
+ * xm-m88k.h xm-m88kdgux.h xm-v88r32.h: Update comments.
+
+Fri Nov 2 12:30:15 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (comparison_dominates_p): Return 1 if codes are the same.
+ (thread_jumps): Use get_label_after.
+
+ * a29k.md (movdi): Handle CONST_INT as well as CONST_DOUBLE.
+ (comparisons): Fix typo in define_split for floating-point NE.
+
+ * reorg.c (fill_slots_from_thread): Don't mark as annulled if no
+ delay list.
+
+ * loop.c: Allow use of any register to store comparison results.
+ (loop_skip_over): Don't treat comparison specially; copy all insns
+ preceeding the jump.
+ (check_for_endtest, other_reg_use_p): Deleted.
+ (can_eliminate_biv_p, eliminate_biv): Deleted; code merged and
+ placed into new maybe_eliminate_p_1.
+ (may_eliminate_biv, may_eliminate_biv_1): New functions; recursively
+ look at all rtx to see if every occurrence of a biv can be
+ eliminated.
+ (check_eliminate_biv): Deleted; callers changed to call
+ may_eliminate_biv.
+ (get_condition): Rework to look into previous insns to find insns
+ that set the first operand of comparison insns.
+
+Thu Nov 1 22:07:42 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (fold_rtx, case COMPARE): Only convert compare to test if
+ HAVE_cc0 is defined.
+ * combine.c (subst): Copy COMPARE case from fold_rtx.
+ Simplify things like (ne (eq FOO BAR) (const_int 0)).
+
+Thu Nov 1 18:06:56 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * math-68881.h (HUGE_VAL): Alternate definition for Suns.
+
+ * config.gcc (sun3, etc.): Assume os4 as default for Sun 3 and Sun 4.
+
+ * tm-i386v.h (STARTFILE_SPEC, LIB_SPEC): Handle -posix.
+ (CPP_SPEC): New macro.
+ (LIB_SPEC): Handle -shlib.
+
+ * c-decl.c (init_decl_processing): Make last arg to memcpy and memcmp
+ an unsigned long, to be like size_t.
+
+ * Makefile.in (hard-params): Depend on gnulib2, not gnulib.
+
+Wed Oct 31 22:12:33 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * config.gcc (ultrix): New alternative.
+
+ * i386.md (extend*): Change opcode to movsx. Was movs.
+
+Wed Oct 31 09:41:27 1990 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md: Deleted an old pattern for subtracting 0.
+ * m88k.md: Deleted patterns for aligned bit-field insns.
+ * m88k.md: Changed define_expand to define_insn for mulsi3 and
+ umulsi3.
+ * m88k.md: Converted various constructs to use conventional
+ formatting.
+ * m88k.md (mak patterns): Fixed transcription errors.
+
+Wed Oct 31 00:05:54 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-decl.c (init_decl_processing): Predefine the ordinary names
+ of alloca, abs, memcpy, etc.
+
+ * c-decl.c (duplicate_decls): Allow redefining built-in as static,
+ but optionally warn.
+
+Tue Oct 30 14:39:17 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-decl.c (finish_function): Use DEFAULT_MAIN_RETURN in `main'.
+ * tm-vms.h (DEFAULT_MAIN_RETURN): Define this.
+
+ * c-parse.y (yylex): Base is not 8 for just `0'.
+
+ * cccp.c (do_define): Invert test of compare_defs.
+
+ * cccp.c (make_definition): Convert newline to newline-newline.
+
+ * Makefile.in (hard-params): Depend on gnulib.
+
+ * m88k.md (divsi3): Delete declarations of gen_... functions.
+
+Tue Oct 30 14:26:20 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c: Rework handling of comparisons to generalize better to
+ machines that use registers to hold condition code information.
+ (prev_insn_cc0*): Just store last rtx assigned to cc0 in prev_insn_cc0.
+ (find_comparison_args): New function.
+ (fold_rtx): Folded value of cc0 is the value previously stored into it.
+ Rework handling of comparisons: use find_comparison_args to see what
+ is being compared. If they are constants, compute the result of the
+ comparison. If not, see if the two operands are equivalent (only for
+ non FP or non-IEEE FP). Then see if we have already seen a comparison
+ involving these operands that lets us give a value to this comparison.
+ True comparisons return STORE_FLAG_VALUE, not 1.
+ (fold_cc0): Deleted.
+ (predecide_loop_entry): Call cse_insn on a copy of each insn at the
+ loop test to propagate the values of items at the start of the loop.
+ Then use fold_rtx to see if we know the result of the jump.
+ (record_jump_equiv): Use new function find_comparison_args.
+ (cse_insn): Just record value of CC0 if set; don't call fold_cc0.
+ Don't modify PREV_INSN (insn) if INSN is a copy.
+ (cse_main): Initialize const_true_rtx to rtx for STORE_FLAG_VALUE.
+
+ * jump.c (comparison_code_p, comparison_dominates_p): New functions.
+ (thread_jumps): Use comparison_dominates_p.
+ Remove debugging code.
+ * reorg.c (condition_dominates_p): Use new function
+ comparison_dominates_p.
+
+ * emit-rtl.c (next_cc0_user): Don't get confused by being call with a
+ copy of an insn; use INSN_UID to check for an insn in a delay slot.
+
+ * rtl.c (reg_note_name): Add name for new REG_LABEL note.
+
+ * emit-rtl.c (make_insn_raw): No longer have JUMP_LABEL for INSN.
+
+Tue Oct 30 09:26:15 1990 Tom Wood (wood at dg-rtp.dg.com)
+
+ * Update what strings in files edited so far.
+ * tm-m88k.h, tm-m88kdgux.h, tm-m88ksv4r.h: Introduce VERSION_STRING
+ and VERSION_INFO to more appropriately identify the compiler.
+
+ * tm-m88k.h (ASM_OUTPUT_OPCODE): Stop processing the opcode if `%'
+ is encountered.
+ * out-m88k.c (print_operand): Add a tab to %L output. Delete
+ unused cases.
+
+ * m88k.md: Rework the movstrsi pattern and provide call_block_move
+ and call_block_move_loop to support expand_block_move.
+ * out-m88k.c: Rework the block move functions.
+ * make-m88k, make-m88kdgux: Eliminate movstr.h.
+
+ * m88k.md, out-m88k.c: Eliminate assembler comments.
+
+ * m88k.md (ashlsi3 ashrsi3 lshlsi3 lshrsi3): Eliminate warnings
+ about out of range shifts.
+
+ * tm-m88k.h, out-m88k.c: Rename CONDITION_CODE_REGNUM CC0_REGNUM.
+
+Mon Oct 29 18:06:54 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * final.c (final_end_function): Handle dwarf output.
+ (final_scan_insn): Likewise.
+ (output_source_line): Likewise, using ASM_OUTPUT_DWARF_LINE.
+ * toplev.c (rest_of_decl_compilation): Likewise.
+ (rest_of_compilation, main): Likewise.
+ * varasm.c (assemble_variable): Likewise.
+ * flags.h (enum debugger): Define DWARF_DEBUG.
+
+ * cccp.c (do_define): Rewrite criterion for warning.
+ Don't warn if -D redefining symbol with constant numeric value.
+
+ * toplev.c (output_file_directive): New function.
+ * sdbout.c (sdbout_filename): Deleted.
+ * tm-3b1.h, tm-att386.h, tm-encore.h, tm-m88k.h,
+ tm-mot3300.h, tm-tahoe.h, tm-vaxv.h (ASM_FILE_START): Use that.
+
+ * c-decl.c (named_labels): No longer static.
+ (pushlevel): Clear named_labels.
+ (poplevel): Don't clear it here.
+
+Mon Oct 29 13:32:57 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * Makefile.in: Update dependencies for various files, mostly cplus-*
+ files.
+
+ * rtl.def: Remove Sep 26 that added JUMP_LABELs to INSN and
+ CALL_INSN.
+ * rtl.h: Add REG_LABEL register note. For INSN and CALL_INSN, the
+ presence of this register note has the same meaning that a non-NULL
+ JUMP_LABEL would have with the Sep 26 change.
+ * jump.c (jump_optimize): Revert to clearing JUMP_LABEL field of
+ JUMP_INSNs only.
+ (mark_jump_label): If INSN is an INSN or a CALL_INSN, add a
+ REG_LABEL note if a LABEL appears (and no such note already exists).
+ ??? Once recorded, this information appears never to be used.
+
+ * jump.c (delete_jump): The deletion of INSN must take place when
+ INSN is a simple jump. Also, don't try to optimize if we come
+ across an insn with the reorg-generated pattern (USE (INSN ...)).
+
+ * cplus-lex.c, cplus-dbxout.c: Remove vestigial support for dumping
+ and undumping the compiler.
+
+ * Merge cplus diffs from Kenner.
+ * cplus-cvt.c (convert_to_integer): Fold the COND_EXPR we construct.
+ * cplus-typeck.c (build_conditional_expr): Ditto in three places.
+ * cplus-lex.c (yylex,do_pending_inlines): Add conditionals for
+ _IBMR2. This hair will disappear when pcccp support is merged, but
+ needed for now.
+ * cplus-tree.h: Conditionalize use of non-int bitfield types on
+ ONLY_INT_FIELDS. Also, remove duplication declarations of
+ get_temp_name, get_temp_aggr, and get_temp_regvar; add declaration
+ of build_decl_list.
+
+Mon Oct 29 11:45:03 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * fixincludes: Fix missing semi in rusers.h.
+
+Mon Oct 29 07:07:47 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * flow.c (mark_used_regs): When converting "...*p...; q = p + size"
+ to "q = p, ...*q..., q = q + size", show that Q is needed after INSN.
+
+ * romp.md (negdi): Directly generate assembly code rather than
+ converting this into a MINUS.
+
+ * fold-const.c (fold, case COND_EXPR): Add missing condition in test
+ for (A ? 0 : A).
+
+Sun Oct 28 15:01:19 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * flow.c (find_basic_blocks): An indirect jump can go
+ to any label whose address is used as data.
+
+ * m68k.md (zero-extend QI): Use gen_rtx, not change_address.
+
+ * Makefile.in (USER_H): List va-*.h explicitly.
+ (toplev.o): Depend on RTL_H.
+ (stamp-*): Depend on move-if-change.
+ (install-headers): Depend on various header files.
+ (install-man): Depend on gcc.1.
+ (gcc.o): Depend on gvarargs.h and obstack.h.
+
+ * Makefile.in: Make sure every `if' has an `else'.
+
+ * c-typeck.c (build_binary_op_nodefault): Prevent warning for
+ variable shift count.
+
+ * i860.md (movsf): Handle moving from CONST_DOUBLE to reg or mem.
+
+Sun Oct 28 09:39:14 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * jump.c (delete_jump): The deletion of INSN must take place when
+ INSN is a simple jump. Also, don't try to optimize if we come
+ across an insn with the reorg-generated pattern (USE (INSN ...)).
+
+ * sparc.md, tm-sparc.h, out-sparc.c: Significantly rewritten to take
+ advantage of new 2.0 optimization capabilities.
+ * old-sparc.md, tm-old-sparc.h, out-old-sparc.c: These are copies of
+ the above files before the rewrite. They may be interesting for
+ measuring performance of old vs. new machine description idioms.
+
+Sun Oct 28 00:22:40 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * loop.c (scan_loop): Don't think that a branch to an end-test of
+ a containing look is actually the branch to the end-test of the
+ outer loop.
+
+ * reload.c (indirect_ok): Deleted.
+ (find_reloads): Accept new arg IND_LEVELS instead of old IND_OK;
+ pass this to find_reloads_address and find_reloads_toplev.
+ (find_reloads_toplev): Accept IND_LEVELS and pass to
+ find_reloads_address.
+ (find_reloads_address): Accept IND_LEVELS and pass it on to
+ find_reloads_address_1.
+ When calling ourself recursively for a MEM as an address, show
+ one indirect level has been used.
+ (find_reloads_address_1): Accept IND_LEVELS and pass it to ourselves
+ in recursive calls and to find_reloads_address.
+ * reload1.c (spill_indirect_levels): New var; used to be
+ spill_indirect_ok.
+ (reload): Compute number of levels of indirection and set it into
+ spill_indirect_levels.
+ (reload, reload_as_needed): Pass spill_indirect_levels not
+ spill_indirect_ok.
+
+ * reload.c (find_reloads): Make similar change to "V" as "O".
+
+ * reload1.c (eliminate_regs): For binary operations, don't call
+ recursively on second arg if null (for EXPR_LIST).
+ (eliminate_regs_in_insn): Perform register elmination in the
+ REG_NOTES of an insn when we are doing it for the last time.
+
+ * vax.md (call_value_pop): Use correct operand number for number
+ of bytes popped.
+
+ * tm-romp.h (EXTRA_CONSTRAINT): Ensure we ignore reg_renumber if
+ register allocation hasn't been done yet.
+
+ * function.c (init_function_start): Initialize reg_renumber to zero;
+ it is checked in rtx_renumbered_equal_p.
+
+ * loop.c (loop_optimize): Ensure we assign a new LUID to all
+ special notes, including NOTE_INSN_FUNCTION_BEG (0).
+
+Sat Oct 27 12:22:46 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * out-a29k.c (print_operand, output_prolog): Don't try to fill delay
+ slots with parts of epilogue or prologue unless -O -fdelayed-branch.
+
+ * tm-rs6000.h (STRUCTURE_SIZE_BOUNDARY): Should be 8.
+
+ * reorg.c (mark_target_live_regs): Ignore REG_DEAD notes for pseudos;
+ they must not have gotten hard registers.
+
+Fri Oct 26 11:30:28 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * gcc.c (main): Set machine_suffix before reading specs file.
+
+ * c-typeck.c (build_binary_op_nodefault): Warn for bad shift counts.
+
+ * stor-layout.c (layout_record):
+ BITFIELD_NBYTES_LIMITED affects bitfields only.
+
+ * loop.c (note_addr_stored): Don't assume PLUS in address is aggregate.
+
+Fri Oct 26 00:46:09 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-tree.h: Declare `build_type_conversion' once instead of
+ three times.
+
+ * loop.c (loop_skip_over): Handle machines without cc0.
+ (labels_in_range_p): Fixed typo where this function returned 0 when
+ it meant to return 1.
+ (check_for_endtest): New function. Returns non-zero when
+ argument is a simple conditional test insn (suitable for being the
+ endtest of a loop).
+ (strength_reduce): Use `check_for_endtest' to identify the endtest.
+ Also fixed some typos in comments.
+ (can_eliminate_biv): Use `check_for_endtest' here, too.
+ (get_condition): Generalized to handle machines without cc0. Now
+ THIS_CC_RTX is the value of the cc rtx.
+
+ * integrate.c (expand_inline_function): Conditionalize away
+ cc0-specific code with HAVE_cc0.
+ (try_constants): Add appropriate declaration for ORIG.
+ (try_fold_condition): Generalized to work for non-cc0 condition
+ values.
+
+ * cplus-type2.c (digest_init): Add missing declaration of FIELD.
+ * rtl.h: Add missing declaration of plus_constant_for_output.
+ * jump.c (can_reverse_comparison): Fixed typo.
+ (delete_jump): Made to work without cc0_rtx.
+
+Fri Oct 26 00:01:27 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c: Conditionalize references to CC0_RTX on HAVE_cc0.
+
+ * reload.c (find_reloads): For the `o' constraint, if IND_OK is
+ true, use offsettable_memref_p instead of the nonstrict version.
+
+ * jump.c (delete_jump): If HAVE_cc0 is not defined, it is not safe to
+ delete previous insn that sets a condition code register, because it
+ might not be dead. Rework to look at all registers dying in this insn
+ and delete the first previous insn that sets any such register if that
+ is all it does.
+
+ * jump.c (jump_optimize): Remove extraneous call to next_active_insn
+ in optimization of "if (...) x = 1; else ...; if (x) ...".
+
+ * cse.c (predecide_loop_entry): Don't set cc_value to null and then
+ stick it in the rtl.
+
+ * rtlanal.c (find_next_ref): Deleted from here.
+ * explow.c: Include hard-reg-set.h for find_next_ref.
+ (find_next_ref): Moved to here.
+ * Makefile.in (explow.o): Includes hard-reg-set.h.
+
+Thu Oct 25 21:37:15 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * va-mips.h (va_list): Put __ in member names.
+ (va_dcl): Rename _va_alist to __va1_alist.
+ * va-i860.h (__va_struct): Put __ in member names.
+ * gvarargs.h, va-*.h: (__va_ellipsis): New macro.
+ (va_dcl): Use that.
+
+ * c-typeck.c (convert_for_assignment): For functions, reverse the
+ usual criterion for warning about const vs non-const. Volatile also.
+
+ * m88k.md, tm-m88k.h, out-m88k.c: Rewrites by wood@dg-rtp.dg.com.
+ * tm-m88kdgux.h, tm-v88r32.h, tm-m88ksvr4.h: New files.
+ * xm-m88kdgux.h, xm-v88r32.h, xm-m88ksvr4.h: New files.
+ * make-m88k, make-m88kdgux: New files.
+ * config.gcc (m88k-dgux, m88k-v88r32, m88k-svr4): New alternatives.
+
+ * gvarargs.h, gstdarg.h: Include alternate file for m88k.
+
+ * expr.c (expand_expr): For ARRAY_REF, preserve const and volatile.
+
+ * expr.c (expand_builtin): Handle strcmp and memcmp with function calls
+ if can't be open coded.
+
+ * function.c (expand_function_end): Round trampoline addr to init.
+ (round_trampoline_addr): Fix braino in alignment.
+
+Thu Oct 25 14:54:18 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c: Now includes insn-config.h.
+ (jump_optimize): inequality_comparisons_p takes only one operand again.
+ (can_reverse_comparison_p): Handle case where a register is used
+ for the condition code; if we can't easily find the COMPARE that
+ was used to set the register, say we can't reverse the comparison.
+ * Makefile.in (jump.o): Now includes insn-config.h.
+
+ * jump.c (jump_optimize): Put back change removed on Oct 21st;
+ emit_store_flag has now been updated.
+
+ * rtlanal.c (inequality_comparisons_p): Reject any ordered
+ comparison; we need not just reject when comparing against
+ cc0_rtx.
+ * recog.c (next_insn{,s}_test_no_inequality): inequality_comparisons_p
+ again has only one operand.
+ * genattrtab.c (cc0_rtx): No longer needed; remove change of Oct 21.
+
+ * genconfig.c (have_cc0_flag): New variable.
+ (walk_insn_part): Set it when we see CC0.
+ (main): Write #define HAVE_cc0 when it is set.
+ * flow.c: Now includes insn-config.h.
+ * Makefile.in (flow.o): Likewise.
+
+ * combine.c (subst): If X and FROM are the same register number,
+ but in different modes, force the combine not to be done.
+ Add missing initialization of undobuf.storage.
+
+Thu Oct 25 11:34:35 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * sched.c (new_sometimes_live): Protect this function in case it is
+ called with (OFFSET,BIT) that evaluates to >= MAX_REGNO.
+
+ * jump.c (sets_cc0_p): Conditionalized to abort if called when
+ machine does not support cc0.
+
+ * rtlanal.c (reg_set_p): Now non-static.
+ * rtlanal.c (rtx_varies_p): Handle LO_SUM more accurately.
+ * rtlanal.c (find_next_ref): New function. Returns the insn that
+ next references REG after INSN, or 0 if REG is clobbered before next
+ referenced or it cannot easily find a reference to REG.
+
+ * recog.c (next_insn_tests_no_inequality): Conditionalized on
+ HAVE_cc0.
+
+ * rtlanal.c (inequality_comparisons_p): Takes new argument
+ THIS_CC0_RTX which is the rtl for the condition code value we are
+ concerned about testing. All callers changed.
+
+ * flow.c (propagate_block,mark_used_regs): Conditionalize
+ specialized cc0 handling only if HAVE_cc0 is defined.
+
+ * genemit.c (gen_exp): In REG case, If CC0_REGNUM is defined,
+ save space by using REG_CC0_RTX instead of allocating a new
+ (REG, mode, CC0_REGNUM) rtx if the mode is SImode.
+
+ * final.c (output_addr_const): Handle PC for P.I.C. code generation.
+ Also, put parens around CONST expressions so that precedence can be
+ maintained.
+ * final.c (final_scan_insn): Don't look for redunant compares
+ except when HAVE_cc0 is defined.
+ Also, use `find_cc' to locate the rtx functioning as the
+ condition code register in order to perform appropriate calls
+ to `alter_cond'.
+
+ * expr.c (expand_expr): Supply missing arg in calls to `store_expr'.
+
+ * expmed.c (emit_store_flag): New argument COMPARISON is the
+ comparison operation whose result we store.
+
+ * recog.c (offsettable_address_p,adj_offsettable_operand): Use
+ `plus_constant_for_output' instead of `plus_constant' since we
+ are testing conditions which rely on being able to add small
+ offsets to e.g. LO_SUM operands.
+ * explow.c (plus_constant): No special handling for LO_SUM. It is
+ not valid to add a constant to a term with LO_SUM, since the
+ constant may need to be added to the high bits that form the sum,
+ and those high bits are not readily available.
+ * explow.c (plus_constant_for_output): Same as `plus_constant'
+ except that we do allow adding constants to LO_SUM terms. This
+ function works only in special cases such as for
+ `adj_offsettable_operand' and `offsettable_address_p'.
+
+ * emit-rtl.c: Declare reg_cc0_rtx which is like cc0_rtx, but
+ is a register instead of a special form. reg_cc0_rtx should
+ be used when representing the condition code register on a
+ machine where condition codes are only set if explicitly set.
+ For machines which allow arbitrary registers to be used as
+ condition code registers (such as the MIPS and 88k), normal
+ pseudo registers should be used instead.
+ * emit-rtl.c (next_cc0_user,prev_cc0_setter): Conditionalized
+ on HAVE_cc0.
+ * emit-rtl.c (find_cc): New function. Given INSN, returns
+ the rtx of what functions as the condition code register for
+ INSN. On machines which use cc0_rtx, this is always cc0_rtx.
+ On machines which have a dedicated register for cc0, this is
+ that register. On machines which allocate pseudos for holding
+ condition codes, this is the pseudo found in a REG_CC0 note.
+ Otherwise, this function returns 0.
+ * emit-rtl.c (init_emit_once): Allocate `reg_cc0_rtx' if
+ CC0_REGNUM is defined.
+
+ * cse.c (make_regs_equiv): Don't consider making a reg
+ equivalent to another reg whose class is NO_REGS.
+ * cse.c (canon_reg): Don't canonicalize a register to
+ one whose class is NO_REGS.
+ * cse.c (fold_rtx): Conditionalize code for handling cc0_rtx
+ with HAVE_cc0.
+ * cse.c (predecide_loop_entry): Generalize code to use either
+ a register or cc0_rtx.
+ * cse.c (cse_insn): Conditionalize code for handling cc0_rtx
+ with HAVE_cc0.
+
+ * combine.c (combine_instructions,try_combine,subst):
+ Conditionalize code handling cc0_rtx with HAVE_cc0.
+ * combine.c (simplify_set_cc0_and): Abort if HAVE_cc0 is not
+ defined.
+ * combine.c (try_distrib): Add break at end of switch cases. It is
+ dangerous to leave the last cases of a switch statement to fall
+ through since new cases added after will get fallen into.
+
+ * recog.c (validate_change): Always succeed for an asm insn,
+ since recog always fails to recognize asm insns. This is
+ needed for virtual register instantiation in asm insns.
+
+ * cse.c (cse_main): When following jumps, notice whether a
+ particular basic block causes CSE_JUMPS_ALTERED to become set. When
+ this happens, repeat the scan.
+ * cse.c (refers_to_mem_p): Changed parameter name REG to BASE,
+ which is more accurate. Also, taught it how to cope with
+ LO_SUM rtl constructs.
+
+Wed Oct 24 15:36:12 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * calls.c (store_one_arg): Accept additional arg, FNDECL.
+ Don't save argument area if it is within the REG_PARM_STACK_SPACE
+ area, but mark the area in use.
+ (expand_call): If ACCUMULATE_OUTGOING_ARGS and REG_PARM_STACK_SPACE,
+ treat the stack area for the registers as be clobbered by the called
+ routine (e.g., if it was compiled without -O) and save and restore
+ it if it was previously used for arguments in a similar manner to
+ the remainder of the argument area (done by store_one_arg).
+
+ * calls.c (expand_call): Support new description macro,
+ STACK_PARMS_IN_REG_PARM_AREA.
+ * function.c (assign_parms): Likewise.
+
+Wed Oct 24 12:47:21 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-typeck.c (build_array_ref): Use main variant for value type.
+
+ * genoutput.c (output_prologue): Let SEPARATE_AUX_OUTPUT
+ cause aux-output.c not to be included.
+ Makefile.in (aux-output2.c): Copy aux-output.c and then compile it.
+
+ * reload.c (subst_reg_equivs): Treat HIGH like other constants.
+
+ * reload.c (push_reload): When testing hard reg for validity,
+ test subsequent regs only against class, not for HARD_REGNO_MODE_OK.
+
+Tue Oct 23 22:49:33 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cccp.c (collect_expansion): Skip ## at start after the error.
+
+ * gcc.c (default_compilers): Handle - as suffix.
+ (main): Make that a special case; it matches only exactly `-'.
+
+Tue Oct 23 22:40:33 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * romp.md (store{s,h,q}i pattern): Allow "b" for clobbered pseudo
+ in addition to "d" in first alternative.
+
+ * reload1.c (eliminate_regs): IF_THEN_ELSE isn't a unary operation.
+
+Tue Oct 23 20:35:13 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * m68k.md (zero-extend QI): When pushing, store value at 1(sp).
+
+Mon Oct 22 12:27:08 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cccp.c (rescan): In the loop that handles numbers, discard \newline.
+ Also make `..' terminate a preprocessing number.
+
+ * Makefile.in (tmpgnulib, stamp-gnulib2): Do `set -e'.
+
+ * gcc.c (default_compilers): Give __GNUC__ value 2.
+ Don't define it for .S files.
+
+Mon Oct 22 07:33:42 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * optabs.c (emit_indirect_jump): New function; now checks predicate
+ of indirect_jump.
+ * stmt.c (expand_computed_goto, expand_goto): Use new function instead
+ of directly emitting indirect jump.
+
+ * flow.c (mark_set_1): Make LOG_LINKS for hard registers.
+ * combine.c (subst): Make new macro COMBINE_RTX_EQUAL_P which
+ considers things equal if they are the identical RTX or the same
+ register with the same mode; use to see if something changed and
+ if we have a match.
+
+ * cccp.c (S_ISREG): Use argument instead of global.
+ (main): Correct sense of S_ISREG usage.
+ (check_precompiled): Use S_ISREG.
+
+ * flow.c (mark_used_regs): Don't allow reg_next_use to point to
+ a NOTE; either point it to replacement insn or invalidate it.
+
+Mon Oct 22 00:13:12 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-parse.y (xdecls): No warning unless -pedantic.
+
+Sun Oct 21 17:49:24 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * genattrtab.c (cc0_rtx): Define, referenced in rtlanal.c.
+
+ * jump.c (jump_optimize): Remove code that depends on changes to
+ emit_store_flag that haven't been made yet.
+
+ * expmed.c (extract_bit_field): Correctly check for bitfield
+ completely filling a mode.
+
+ * out-romp.c (output_epilogue): Correctly write number of words of
+ arguments into trace table.
+
+ * calls.c (store_one_arg): Fix error in change of Oct 19th.
+
+ * reorg.c (mark_target_live_regs): Revert back to old behavior
+ of scanning all insns, even those in delay slots.
+ (fill_simple_delay_slots): Need only call update_block if we move
+ an insn across a label.
+
+ * Makefile.in (LIBFUNCS): Use consistent naming convention for
+ comparison routines; gnulib.c was always correct.
+
+ * function.c (assign_parms): Don't overwrite DECL_INCOMING_RTL when
+ we are called for the second time.
+
+ * integrate.c (initialize_for_inline): Don't make a new return label
+ here; the maximum label number has already been computed.
+ (save_for_inline_copying, save_for_inline_no_copy): Do it here instead.
+
+ * reload.c (find_reloads_address): For indirect address where the
+ underlying address is also invalid, ensure that we substitute into
+ the MEM that we will use.
+
+Sun Oct 21 14:12:47 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * reload.c (find_equiv_regs): Reject reg that overlaps goal.
+
+ * expmed.c (extract_bit_field): For big fields, make sure
+ value really goes in the target.
+
+ * expr.c (expand_builtin): Delete __builtin_varargs.
+ (EXPAND_BUILTIN_SAVEREGS): New macro says how to do __builtin_saveregs.
+
+ * calls.c (expand_call): No "can't inline" warning if -fno-inline.
+
+ * stddef.h: Add missing #endif.
+
+Sat Oct 20 14:33:14 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * function.c (round_trampoline_addr): New function.
+ (trampoline_address): Use that.
+
+Fri Oct 19 15:13:31 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * calls.c (store_one_arg): Don't mark stack area used until after
+ we have written into it; if we do it before, the restore might
+ clobber a function result being put into that stack area.
+
+ * objc-actions.c (print_lang_statistics): Add empty function.
+
+ * recog.c (inequality_comparisons_p): Deleted from here.
+ * rtlanal.c (inequality_comparisons_p): Moved to here; not static.
+
+ * a29k.md (extendhisi2): Fix typo in define_split.
+
+ * Makefile.in (integrate.o): Includes integrate.h.
+ (reorg.o): Includes insn-flags.h.
+
+Fri Oct 19 14:49:26 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * sdbout.c (sdbout_symbol): If a variable belongs to an inline
+ function, the decl's rtl may not be rewritten by alter_reg. So if
+ we have a variable allocated to a pseudo, just get the hard register
+ number from `reg_renumber'. ?? But I thought that COFF was so
+ losing that it was decided one could not represent debug info for
+ inline functions in COFF.
+
+Fri Oct 19 13:21:25 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * fold-const.c (split_tree): Use NEGATE_EXPR to negate *conp.
+
+Fri Oct 19 00:15:21 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * version.c: Bumped to 1.90.03.
+
+ * tree.c: Added facility for gathering statistics on the number of
+ tree nodes allocated and the size in bytes they occupy. The
+ statistics are by tree_node_kind, which is almost like using the
+ tree code letter, but has more resolution for dealing with different
+ kinds of `x' nodes. The facility is enabled by compiling the
+ compiler with -DGATHER_STATISTICS and using the -fstats flag.
+
+ * expr.c (do_tablejump): Emit a BARRIER after the jump that performs
+ the tablejump.
+
+ * cplus-typeck.c (c_expand_return): Rewritten so that the function
+ value return register is not used except as a target of the function
+ return value.
+
+ * cplus-tree.c (build_cplus_new): New argument WITH_CLEANUP_P
+ controls whether this functino should build its result with a
+ cleanup or not. All callers changed.
+
+ * cplus-lex.c: File updated to latest changes to c-parse.y's lexical
+ analyzer.
+
+ * cplus-except.c (cplus_expand_raise): New parameter FOR_RERAISE
+ is used to control whether to output extra gotos or not. When
+ nonzero, the compiler can avoid writing out the extra gotos that are
+ otherwise needed to avoid warning messages.
+
+ * cplus-decl2.c (flag_short_double): Add support for this option.
+
+ * cplus-decl.c (finish_function): Always cause returns to jump to
+ the return label. This allows -Wreturn to give meaningful error
+ messages.
+
+ * jump.c (invert_exp): Make this non-static.
+ (jump_optimize): Reorganization and simplification of main inner
+ loop. Comments added explaining what the optimizers are looking
+ for. New optimization added that optimizes for consecutive testing
+ of an inequality test followed by an equality test (or vice-versa).
+ Changes made to accommodate reorg.c on Sparc. Code for
+ cross-jumping return statements was previously dead in this
+ function; as a result of the reorganization, it is now live.
+ (find_cross_jump): Added temporary variable PREV1 to hold return
+ value of `prev_nonnote_insn' instead of calling the function 3 times
+ in a row. Also changed so that USE or CLOBBERS are not cross-jumped
+ unless some real insns are also cross-jumped. This helps reorg.
+ (redirect_jump): Fixed a return that returned no value so that it
+ returns 1.
+ (rtx_renumbered_equal_p): Test that reg_renumber is nonzero before
+ using it. We may want to call this function earlier than by the
+ time that array has been initialized.
+
+ * integrate.c (save_for_inline_{copying,nocopy}): New functions to
+ replace `save_for_inline'. save_for_inline_copying saves the rtl
+ for inline functions by copying the rtl to the
+ maybepermanent_obstack. It is called when the rtl of the current
+ function is going to be compiled immediately.
+ save_for_inline_nocopy takes advantage of the fact that inline
+ function rtl is already allocated to the maybepermanent_obstack, and
+ need therefore not be copied if it's not going to be modified by the
+ compiler (such as by `rest_of_compilation').
+ ({initialize_for,finish}_inline): New helper routines for
+ save_for_inline_... functions.
+ (note_modified_parmregs): Function called by `mark_stores' to note
+ whether parameters are assigned to in the body of an inline
+ function.
+ New interface, integrate.h, provides declarations for functions used
+ by other routines that might want to copy chunks of rtl.
+ ({save,try}_constants): Now global (for integrate.h).
+ (mark_stores): Ditto.
+ (try_fold_condition): Ditto.
+
+ * dbxout.c (dbxout_symbol): If a variable belongs to an inline
+ function, the decl's rtl may not be rewritten by alter_reg. So if
+ we have a variable allocated to a pseudo, just get the hard register
+ number from `reg_renumber'.
+
+ * varasm.c (output_const_pool): No longer static.
+ (assemble_variable): Do output debugging information for global
+ register variables. GDB does the right thing for global register
+ variables.
+
+ * toplev.c: New flag `warn_inline' for warning when a function
+ declared inline was not in fact inlined. Also, new flag
+ `flag_no_inline' which disables function inlining, but retains
+ other properties of inline functions (such as lazy compilation
+ and write-only-if-needed).
+ * toplev.c (compile_file): Changed logic for inline function
+ handling to work with `warn_inline' and `flag_no_inline'.
+ Also modified to call `save_for_inline_nocopy' when insns are to be
+ saved but not immediately compiled.
+
+ * function.c (instantiate_decls): If instantiating a function
+ which was saved for inline expansion, preserve the rtl created
+ by the instantiation as well.
+
+ * flags.h (flag_no_inline): New flag; if nonzero, then no
+ calls are inlined, regardless of their declaration. We still
+ save the insns for these functions in DECL_SAVED_INSNS so that
+ the functions need not be written if they are never called.
+
+ * calls.c (expand_call): If `flag_no_inline' is set, don't
+ inline the call, regardless of whether it was declared inline
+ or not.
+
+Thu Oct 18 13:10:26 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * rtl.def (CODE_LABEL): Add new string field.
+ * rtl.h (LABEL_NAME): Define macro for access.
+ * emit-rtl.c (gen_label_rtx): Initialize it to 0.
+ * stmt.c (expand_label): Store proper name of label.
+ * final.c (final_scan_insn): Call sdbout_label.
+
+ * tree.h (built_in_function): Add BUILT_IN_VARARGS.
+ * c-decl.c (init_decl_processing): Declare __builtin_varargs.
+ * expr.c (expand_builtin): Generate code for it.
+ Uses new macro EXPAND_BUILTIN_VARARGS.
+
+ * sdbout.c (SDB_IS_FAKE): Macro deleted.
+ (MAKE_LINE_SAFE): New macro.
+ (sdbout_begin_block, sdbout_end_block, sdbout_end_function): Use it.
+ (sdbout_one_type): Delete spurious second arg in all callers.
+ (sdbout_types, sdbout_end_function):
+ Use sdbout_dequeue_anonymous_types.
+ (sdbout_label): New function.
+
+ * expr.h (FUNCTION_ARG_BOUNDARY): Default is now PARM_BOUNDARY.
+
+ * gvarargs.h, va-*.h (va_dcl):
+ Add ellipsis so current_function_varargs is set.
+
+ * jump.c (jump_optimize): Exit push-optimize loop at end of insns.
+
+Thu Oct 18 07:09:06 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c: Major reorganization. Many special cases have been moved
+ into more general code and an overall restructuring has been done.
+ Numerous bugs have been fixed. Highlights:
+ (dbr_schedule): First make list of all insns needing filling. Then
+ iterate for two passes. In each pass, try two methods of filling
+ delay slots, then do some canonicalizations, which may create more
+ insns to fill.
+ (fill_simple_delay_slots): Now uses list of insns that need filling,
+ rather than making such a list.
+ Enhance code that finds insns when code paths merge to allow multiple
+ uses of the label as long as all uses are in the skipped code.
+ (struct resource): Notice volatile memrefs.
+ (stop_search_p): Allow option to continue when label is reached.
+ (find_end_label, make_return_insns): New functions; when we have a
+ filled branch that is really a RETURN, first convert it to a jump
+ to a return label and then later see if the insns in the delay slots
+ are also valid for a RETURN.
+ (mostly_true_jump): Test for branch to loop beginning rather than
+ branch at end of loop. Also, conditional return insns predict false.
+ (own_thread_p): New function to replace fall_through_to_p.
+ (try_merge_delay_insns): Only support merging insns already in an
+ insns delay list.
+ (get_branch_condition, condition_dominates_p): New functions.
+ (steal_delay_list_from_{target,fallthrough}): New functions to
+ replace steal_delay_list.
+ (redundant_insn_p): New function.
+ (update_block, mark_target_live_regs, dbr_schedule): When moving
+ an insn not at the front of the basic block to a delay slot,
+ leave a "ghost" USE so that we can track things livened and killed.
+ (fill_slots_from_thread): Eliminate use of static vars for number
+ of slots to fill and already filled.
+ Try to modify an insn that follows a register-register copy to use
+ the original register; this may create a delay-slot opportunity.
+ (try_hoist_target{,_1}): Deleted.
+ (relax_delay_slots): Rewritten to just perform canonicalizations
+ previously done elsewhere. No actual delay slot filling is done
+ here. Any new delay slots created will hopefully be filled in the
+ next pass around the loop in dbr_schedule.
+
+ * expr.c (emit_push_insn): Don't try to compute a SUBREG of a
+ hard register in a non-integer mode when pushing a "partial" arg.
+
+ * recog.c (validate_change, apply_change_group): After reload, ensure
+ that operands meet the constraints by calling constrain_operands.
+ (validate_replace_rtx_1): Consider two rtx equal if they refer to
+ the same register.
+
+ * jump.c (jump_optimize): Extend change of Oct 16th to handle
+ the other usage of find_equiv_reg; remove invalid death notes there.
+
+ * rs6000.md, tm-rs6000.h, out-rs6000.c, xm-rs6000.h, make-rs6000:
+ New files.
+
+ * out-a29k.c (extract_subword): Use gen_{high,low}part from
+ an FP CONST_DOUBLE if host and target float formats are the same
+ or REAL_IS_NOT_DOUBLE.
+
+ * out-romp.c (output_fpop, output_fpops): Provide fr0 as a scratch
+ register unless it is used in the insn.
+
+ * romp.md: In combined set CC0 and move, optimize case where move
+ is nop.
+ (DF moves): Fix typo in generation of `get' insn.
+ Don't split if input is CONST_DOUBLE because we can't easily
+ generate the proper constants.
+ (call patterns): Copy data area address via a pseudo to allow
+ better CSE'ing.
+
+ * tm-romp.h (RTX_COSTS): Memory is expensive, except for a reference
+ to our own data area, which is very cheap.
+ (ADDRESS_COST): References to the constant pool are as cheap as
+ register + offset, since that's what it will be.
+
+ * emit-rtl.c (gen_{low,high}part): Can often extract word from FP
+ CONST_DOUBLE when host and target floating formats agree.
+ (add_insn_after): No longer static.
+
+ * reload1.c (reg_equiv_memory_loc): Renamed from reg_equiv_stack_slot
+ and now static.
+ (reload): If have equivalence with constant that is not a legitimate
+ constant operand, force it into memory and handle this as an
+ equivalence to memory.
+ * reload.h (reg_equiv_stack_loc): Deleted.
+
+Wed Oct 17 20:50:58 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * gcc.c, cccp.c (main): Use TARGET_VERSION if -v.
+
+ * expmed.c (extract_bit_field): Typo in last change.
+
+ * Makefile.in (tmpgnulib): Support assembler files named *.asm.
+
+ * gcc.c (do_spec_1): Null-terminate error message.
+
+ * sdbout.c (sdbout_symbol): Handle subreg as DECL_RTL.
+ This happens for vars from the parms of inline functions.
+ * dbxout.c (dbxout_symbol): Likewise.
+
+ * genattr.c (fancy_abort): New function, as in gen*.c.
+
+Wed Oct 17 14:53:48 1990 Michael I. Bushnell (mib at geech.ai.mit.edu)
+
+ * pcp.h: New file.
+
+ * cccp.c: Support use of precompiled files
+ Include "pcp.h".
+ (no_precomp, stringlist, stringlist_tailp): New variables.
+ (union hashval): New field `keydef'.
+ (enum nodetype): New alternative `T_PCSTRING'.
+ (main): Support -noprecomp.
+ Use write_output to write output.
+ (rescan): Call pcstring_used for T_PCSTRING symbols.
+ (do_include): New local variables pcftry, pcfname, pcf, pcfbuf,
+ pcfbuflimit, and pcfnum.
+ Check for possible use of precompiled files.
+ (check_precompiled): New function.
+ (check_preconditions): New function.
+ (pcfinclude): New function.
+ (pcstring_used): New function.
+ (write_output): New function.
+ (create_definition): New function.
+ (do_define): Moved most of the work into create_definition.
+ (dump_single_macro): New function.
+ (dump_all_macros): Moved most of the work into dump_single_macro.
+ (dump_defn_1): New argument OF.
+ (dump_arg_n): New argument OF.
+
+ * cccp.c: Support generation of precompiled files
+ (pcp_outfile, pcp_inside_if): New variables.
+ (struct definition): New field `predefined'.
+ (main): Support -pcp.
+ (rescan): Don't expand macros outside #if during -pcp.
+ (special_symbol): Error for most special symbols during #if in -pcp.
+ Output precondition for T_CONST and T_SPEC_DEFINED symbols.
+ (eval_if_expression): Set and clear pcp_inside_if.
+ (do_ifxdef): Output preconditions.
+
+Tue Oct 16 13:22:05 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * stor-layout.c (layout_record): For PCC_BITFIELD_TYPE_MATTERS,
+ make it true that zero-length field affects alignment of next field.
+
+ * rtlanal.c (get_integer_term, get_related_value): Moved from cse.c.
+
+ * jump.c (jump_optimize): When reusing value via find_equiv_reg,
+ delete obsolete death note.
+
+ * expmed.c (extract_bit_field, store_bit_field):
+ Handle fields wider than a word.
+ Restrict special case for word-sized field to aligned words.
+
+ * expmed.c (extract_bit_field, store_bit_field): Don't let
+ BESTMODE be bigger than the insn can handle.
+
+ * Makefile.in (tmpgnulib): Fix typos handling LIBFUNCS_EXTRA.
+
+ * cccp.c (handle_directive): Turn on code to handle # LINENUM,
+ and move initializations past the label `old_linenum'.
+
+ * c-decl.c (grokdeclarator): If traditional, make bitfields unsigned.
+ (finish_struct): Don't do that here.
+
+ * fixincludes (CTRL): Don't put quotes around a quote.
+
+ * stddef.h (size_t): Also inhibit if _SIZE_T_.
+
+Mon Oct 15 13:15:30 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-decl.c (grokdeclarator): Make flag_signed_bitfields work
+ for int and for typedefs.
+
+Sun Oct 14 21:28:32 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * flow.c (life_analysis): No hard regs for any pseudos live at setjmp.
+
+ * c-decl.c (duplicate_decls): Don't suppress warning for fn defn
+ after implicit declaration, if fn has already been defined.
+
+Fri Oct 12 15:54:11 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-parse.y (xdecls): Allow ellipsis after parm decls.
+ Call c_mark_varargs.
+ * c-decl.c (start_function): Clear c_function_varargs.
+ (c_mark_varargs): New function. Set it.
+ (store_parm_decls): Maybe call mark_varargs.
+ * function.c (init_function_start): Clear current_function_varargs.
+ (mark_varargs): New function. Set it.
+
+Thu Oct 11 13:15:36 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * genattrtab.c (fancy_abort): New function, as in gen*.c.
+
+ * expr.c (saveregs_value): New variable.
+ (init_expr, save_expr_status, restore_expr_status):
+ Init, save, restore the variable.
+ (expand_builtin): Don't call __builtin_saveregs twice in one function.
+
+ * va-*.h: Rename all structure fields to start with __.
+ * va-pyr.h: Rename variables also.
+ (va_start): Delete the unmatched {.
+ (va_end): Now a nop.
+
+Wed Oct 10 22:03:20 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * va-sparc.h (__va_ctl): Rename fields to start with __.
+
+Tue Oct 9 12:55:48 1990 Michael Meissner (meissner at osf.org)
+
+ * Allow configuration to specify size of a wide character.
+ (WCHAR_TYPE_SIZE): New parameter.
+ (WCHAR_UNSIGNED): New parameter, says whether type is signed.
+
+ * c-decl.c (WCHAR_TYPE_SIZE): Define if not defined.
+ (WCHAR_UNSIGNED): Likewise.
+ (wchar_type_node, signed_wchar_type_node, unsigned_wchar_type_node):
+ (wchar_array_type_node): New variables.
+ (init_decl_processing): Init them.
+ * c-tree.h: Make them extern.
+
+ * c-common.c (WCHAR_TYPE_SIZE, WCHAR_BYTES): Define them.
+ (combine_strings): Handle them.
+ * c-parse.y (init_lex, yylex): Likewise.
+
+ * c-typeck.h (digest_init): Use wchar_type_node and
+ signed_wchar_type_node to get the base type of wide strings, rather
+ than using int and unsigned.
+
+Tue Oct 9 14:16:37 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * expmed.c (extract_bit_field): Typo; section for extv used extzv.
+
+ * c-typeck.c (digest_init): Error if union has no name field.
+ (process_init_constructor): For union, use first named field.
+
+ * flow.c (propagate_block): Include NOTE at end of block in scan.
+
+ * fixincludes: Fix missing semicolon in rstat.h.
+
+ * cccp.c (main): Record the option names used for assertions.
+ Call make_assertion properly.
+
+Tue Oct 9 06:18:38 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (fold_rtx): Call find_best_addr before seeing if we know
+ what is located at that address.
+ Don't try to return the contents of an ADDR_DIFF_VEC table; we have
+ no simple way of representing it.
+ (cse_insn): Detect SRC == DEST even when DEST is not the canonicalized
+ form of the value represented by SRC.
+
+ * loop.c (scan_loop): Don't set THRESHOLD until LOOP_HAS_CALL
+ has been set.
+ (struct induction): Add field MEM_MODE.
+ (find_mem_givs, combine_givs_p): Record mode used to access memory
+ when making DEST_ADDR giv and use it to test validity of
+ derived address.
+
+ * jump.c (delete_jump): No longer static.
+ (invert_jump): Allow changing RETURNs to branches and vice versa.
+ Now returns success/failure indication like redirect_jump.
+ * rtl.h (delete_jump): Define.
+
+ * calls.c (store_one_arg): Don't expand a `partial' arg into
+ arg->stack and don't set arg->value to arg->stack_slot for
+ such args.
+ Clean up by breaking out common code.
+
+Mon Oct 8 15:09:31 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * loop.c (can_eliminate_biv_p): Insist that mult_val be positive.
+
+ * Makefile.in (insn-*): Remove semicolon from these rules.
+ (INSTALL_PROGRAM, INSTALL_FILE): New variables.
+ (install-*): Use those variables.
+ (mandir): Default based on manext.
+
+Mon Oct 8 10:57:14 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * stmt.c (expand_catch_default): Return 1 if EXCEPT_STACK is
+ nonzero.
+
+ * c-decl.c (finish_enum): Argument to floor_log2 in
+ calculation of negprecision was not negated.
+
+Mon Oct 8 06:50:15 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rtl.h (INSN_ANNULLED_BRANCH_P, INSN_FROM_TARGET_P): New fields.
+
+Sun Oct 7 23:33:24 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * tm-i386v.h (STARTFILE_SPEC): Handle -p here.
+ (LIB_SPEC): Not here.
+
+Thu Oct 4 05:06:02 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * gcc.c (default_compilers): Define __OPTIMIZE__ for %{O*}, not just
+ %{O}. This permits the use of -O2, -O3, etc., with predictable
+ results.
+
+ * expr.c (expand_expr): Do not build new cleanups for
+ TARGET_EXPRs. Their cleanups are now handled entirely by the
+ language-specific code that causes them to be generated.
+
+ * function.c ({push,pop}_temp_slots): Do not change
+ temp_slot_level if within a sequence. GNU C++ must be able to
+ emit a sequence it is building anywhere at the level the sequence
+ was initiated. If the level is changed when building a sequence,
+ temporaries could be unwittingly shared.
+
+ * cplus-tree.def: change print strings for NEW_EXPR and
+ CPLUS_CATCH_DECL.
+
+ * cplus-dem.c (do_type): Support `long long' types.
+
+ * cplus-decl.c (finish_file): No longer try to emit _init,_fini
+ records for GNU C++. This was supposed to help the SunOS dynamic
+ linker link C++ code, but it turned out not to work.
+
+ * cplus-decl.c ({start,finish}_function): Don't emit an extra
+ binding contour if not in a constructor or destructor. It is not
+ needed, and saves writing out unneeded debugging info.
+
+ * cplus-class.c (build_method_call): Conditionalize handling of
+ wrappers and operator->(); these are now only compiled if ESKIT is
+ #defined.
+
+ * cplus-decl.c (define_label): Updated to treat labels in the same
+ new fashion that c-decl.c treats them.
+
+ * cplus-*.c: C++ front-end files now support a generic
+ class-browser interface. It is up to some adventurous hacker to
+ implement the class browser.
+
+ * cplus-*.c: C++ front-end files no longer #include rtl.h.
+
+Sun Sep 30 15:53:02 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cccp.c (make_assertion): New function.
+ (main): Handle -A by calling make_assertion.
+ -A- gets rid of predefined macros and those specified earlier.
+
+ * print-tree.c (print_node_brief): Declare i for printing REAL_CST.
+
+ * recog.c (immediate_operand, nonmemory_operand): Don't accept
+ integer constants if caller wants a floating mode.
+
+Sat Sep 29 18:40:08 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * reload1.c (emit_reload_insns): Handle preserving death info
+ with find_equiv_reg.
+
+ * reload.c (find_equiv_reg): Handle INSN_CLOBBERS_REGNO_P.
+
+ * fixincludes: For link pointing outside /usr/include,
+ use $x rather than $dest.
+
+ * optabs.c (expand_float, expand_fix): Use dconst1, not 1.0.
+
+Sat Sep 29 06:38:38 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (try_split): Use emit_insn_after and delete_insn to
+ ensure that the correct insn chain is maintained in the presence of
+ SEQUENCEs; be careful if the insn being split has a following BARRIER.
+ * jump.c (delete_insn): Correctly update insn chain when deleting
+ insn following or preceeding a SEQUENCE.
+
+Fri Sep 28 16:07:42 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-parse.y (yylex): Use REAL_VALUE_TRUNCATE for `f' suffix.
+
+ * fold-const.c (const_binop): Don't initialize REAL_VALUE_TYPE decls.
+
+Thu Sep 27 14:06:37 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * expr.c (expand_expr): Set MEM_VOLATILE_P from TREE_THIS_VOLATILE.
+
+Wed Sep 26 00:21:23 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * tm-mips-news.h: New file.
+
+ * out-i860.c (output_size_for_block_move): Don't decrement.
+ (output_block_move): Decrement initial storing address instead.
+
+ * c-parse.y (yylex): Always try unsigned int if `u' is written.
+
+ * c-typeck.c (build_unary_op): Don't let &* make an lvalue.
+
+ * c-parse.y (initlist): Use [N] rather than case N: for array index.
+
+ * tm-seq386.h (LINK_SPEC): Define it.
+
+ * c-parse.y (yylex): Don't try signed int for nondecimal constant
+ if -traditional. Improve messages for -Wtraditional.
+
+ * stor-layout.c (layout_record): Avoid using DECL_SIZE_UNIT.
+
+ * jump.c (jump_optimize): Scan all insns for label refs.
+ (mark_jump_label): Quickly ignore uninteresting rtl types.
+ * rtl.def (INSN, CALL_INSN): Add a slot for JUMP_LABEL.
+
+ * jump.c (jump_optimize): Try combining stack adjusts with pushes.
+
+Mon Sep 24 07:31:40 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * stmt.c (expand_computed_goto): Emit barrier after jump.
+
+ * expr.c (case LABEL_DECL): Return a MEM, so we can take its
+ address; correctly form LABEL_REF.
+
+Sun Sep 23 22:54:38 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * loop.c (struct movable): Delete field SET_EQUAL; new field MOVE_INSN.
+ (scan_loop): Only use REG_EQUAL note under very restricted
+ cirsumstances. Set MOVE_INSN field in movables when appropriate.
+ (combine_movables): Simplify matching test now that we only have one
+ source field.
+ (move_movables): Handle MOVE_INSN movables by emitting a new move
+ insn in front of the loop.
+ Correct typo in checking for CALL_INSN.
+ Don't try to make a REG_EQUAL note.
+ (count_loop_regs_set): Remove extraneous assignment to MAY_NOT_MOVE.
+
+Sun Sep 23 14:59:21 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cccp.c (S_ISREG): Define it unless overridden.
+ (main, finclude): Use that.
+
+ * reload1.c (reload): If insn after a function call uses the
+ function value, and that reg is spilled, and the insn might
+ use it for reloading, add an extra need.
+ (reload_as_need): Detect such insns for new arg to choose_reload_regs.
+ (choose_reload_regs): In that case, don't choose function value reg.
+
+ * tm-convex1.h, tm-convex2.h (CPP_SPEC): Define __NO_INLINE_MATH.
+
+Sun Sep 23 07:52:32 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * version.c (version_string): Bumped to 1.90.02.
+
+ * final.c (leaf_function): Variable now non-static.
+ * final.c (only_leaf_regs_used): Function now non-static.
+ * final.c (leaf_function_p): Move initialization of
+ `leaf_function' from here...
+ * toplev.c (compile_file): ...to here. We want to know the
+ value of `leaf_function' when we perform code reorginization.
+ * final.c (leaf_function_p): If profiling arcs, we cannot have
+ a leaf function. Also, we have to look at insns in
+ `epilogue_delay_list' to know that all our constraints are
+ satisfied.
+ * final.c (only_leaf_regs_used): Have to look in
+ `epilogue_delay_list' to know that all our constraints are
+ satisfied.
+
+ * toplev.c (warning_with_file_and_line,warning): Declare third
+ argument V3 for warnings that require 3 `%' expressions in S.
+ * toplev.c (strip_off_ending): New helper function that removes
+ a GCC-recognized filename extension. Call this function in
+ GCC instead of expanding it inline in C code everywhere.
+
+ * sched.c (schedule_block): The last basic block does not have
+ no live registers. Also, check that we don't copy from an
+ entry in `basic_block_live_at_start' that does not exist.
+ * sched.c (update_reg_first_use): When splitting insns, the
+ insn that is in REG_FIRST_USE might become a NOTE, and a new
+ insn become the insn that should be considered the first use.
+ `update_first_use' keeps REG_FIRST_USE up to date.
+ * sched.c (update_links): Call note_stores with
+ `update_first_use' when an insn splits.
+
+Sun Sep 23 00:05:49 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-decl.c (grokdeclarator): Put var array bound in save_expr.
+
+Sat Sep 22 14:01:00 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * tree.c (build_index_type): Don't hash variable-bound type.
+
+ * c-decl.c (start_decl): Error here if var-size object initialized.
+ (grokdeclarator, finish_struct): Record types & decls
+ with array sizes not written as constants.
+ * c-tree.h (C_TYPE_VARIABLE_SIZE, C_DECL_VARIABLE_SIZE): New macros.
+
+ * tm-aix386.h (LIB_SPEC): Different library name for -p. Always -lc.
+ (LINK_SPEC): Don't pass -lg or -g.
+ (CPP_PREDEFINES): Define _I386 and _AIX. Don't define unix.
+ (SDB_DEBUGGING_INFO): Define it.
+ (DBX_DEBUGGING_INFO): Undefine it.
+ (ASM_FILE_START): Output .noopt if not optimizing.
+ (PCC_BITFIELD_TYPE_MATTERS): Define it.
+ (FUNCTION_PROFILER): Add definition.
+
+Fri Sep 21 16:26:51 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * function.c (current_function_epilogue_list): Define this here.
+ * reorg.c: Not here.
+
+Fri Sep 21 13:11:11 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * varasm.c (assemble_external_libcall): Frob SYMBOL_REF_USED here.
+
+Thu Sep 20 15:29:44 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * expr.h (struct optab): Field libfunc, an rtx, replaces lib_call.
+ * rtl.h (SYMBOL_REF_USED): New macro.
+ * optabs.c (init_optabs): Initialize that field properly.
+ Also initialize new variables *_libfunc.
+ (various functions): Use those vars; use libfunc field.
+ * expr.c (convert_move, emit_block_move, clear_storage): Use the vars.
+ (emit_push_insn, expand_assignment): Likewise.
+
+Thu Sep 20 13:51:18 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * out-a29k.c (current_function_epilogue_delay_slot): Renamed from
+ epilogue_delay_slot.
+
+ * romp.md (movdi): Fix missing short/long qualifier on memory ref.
+ (SFmode/DFmode move patterns): Add explicit alternatives for
+ storing and loading general registers from memory; also add
+ DEFINE_SPLITs for these cases for DFmode.
+ (negsf2,negdf2): Don't use XOR if an operand is a hard FP register.
+
+ * tm-romp.h (FIXED_REGISTERS, CALL_USED_REGISTERS): Use correct
+ register numbers for FP registers.
+
+ * output.h (current_function_epilogue_delay_list): New var.
+ * function.c: Include output.h and initialize new var above.
+ * Makefile.in (function.o): Now includes output.h.
+ * reorg.c (epilogue_delay_list): Renamed to
+ current_function_epilogue_delay_list.
+
+ * final.c (final_scan_insn): Don't delete no-op insn if in delay slot
+ or if we have already pre-scanned.
+
+ * genconfig.c (max_insns_per_split): Rename from
+ max_insns_per_split_flag and default to 1 instead of 0.
+
+ * genattrtab.c (n_comma_elts): Return zero for null string.
+
+ * sdbout.c (MIN,MAX): Add to here; required by recent changes.
+
+ * expr.c (safe_from_p): A MEM rtx is not safe from an INDIRECT_REF.
+
+ * c-parse.y (ridpointers): Move definition in front of first use.
+
+ * reorg.c (mark_referenced_resources): Allow for CODE_LABELs between a
+ CALL_INSN and USE insns preceeding it.
+ (mark_set_resources): Likewise, for following CLOBBERs.
+
+Wed Sep 19 17:45:49 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * assert.h (printf): Don't define; should be in stdio.h.
+
+ * rtl.h (PUT_REG_NOTE_KIND): New macro.
+ * sched.c (attach_deaths): Use it.
+
+ * reorg.c (mark_referenced_resources): If we put insns to load
+ parameters into the delay slot of a CALL, ignore the USE insns
+ for those parameters.
+
+ * function.c (fixup_var_refs_1): Don't call fixup_memory_subreg unless
+ its would-be operand is a SUBREG.
+
+Wed Sep 19 00:26:59 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * print-tree.c (print_node): Indent before printing RTL.
+
+ * Makefile.in (protoize.o, unprotoize.o): Look for SYSCALLS.c.X
+ in libsubdir.
+
+Tue Sep 18 21:55:01 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (fold_rtx): For MEM with constant address, split the
+ address into possible base and offset; ensure constant pool
+ value is same mode as our reference unless we are getting a
+ word of a DImode CONST_INT.
+ Treat SYMBOL_REF and LABEL_REF as constants.
+ If we are getting a word at a constant offset from a jump table,
+ replace with the contents of that jump table entry.
+ (cse_insn): When folding jump to variable location (e.g., tablejump),
+ LABEL_REF is the cheapest of all, since the branch would be simple.
+ Special-case changing variable branch to normal unconditional
+ because the RTL may be different (e.g., the variable branch may
+ include a USE).
+
+Tue Sep 18 18:33:19 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * toplev.c (count_error): Handle warnings_are_errors.
+ (W_options): Handle -Werror.
+
+Mon Sep 17 00:02:12 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-decl.c (lookup_label): Use void as type of label.
+ * stmt.c (label_rtx): No longer static.
+ * expr.c (expand_expr): Handle LABEL_DECL.
+
+Sun Sep 16 16:27:29 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * expr.c (expand_builtin): Error for __builtin_nextarg
+ if function definition doesn't have `...'.
+
+ * expmed.c (store_bit_field): Adjust BITPOS to UNIT all at once.
+ for insv, use mode of operand 3 instead of SImode. Define MAXMODE.
+ Adjust XBITPOS along with mode of XOP0.
+ (extract_bit_field): Adjust XBITPOS along with mode of XOP0.
+ for extv and extzv, use mode of operand 3 thoroughly instead of SImode.
+
+ * sdbout.c (CHAR_TYPE_SIZE,...): Default definitions of these macros.
+ (plain_type_1): Use those macros to distinguish int and floating types.
+
+ * toplev.c (rest_of_decl_compilation): Output TYPE_DECL here for sdb
+ only if top_level.
+
+ * c-parse.y (unary): Don't forget to look up the label.
+
+ * c-typeck.c (build_conditional_expr): Don't skip arg promotion.
+
+Sun Sep 16 14:54:03 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): If we don't recognize the combined insn,
+ try it without any CLOBBERs.
+
+ * final.c (final_scan_insn): Prevent CC tracking from thinking
+ that the CC was set by an insn in the delay slot of a CALL_INSN.
+
+ * expmed.c (init_expmed, expand_divmod): Allow machine to have
+ low cost specified for divides by powers of two if it can do it by
+ a method that if cheaper than the normal shift/branch/adjust mechanism.
+
+ * cse.c (fold_rtx): When putting constant last, ensure that the
+ resulting insn is valid.
+
+ * objc-actions (finish_objc): Remove dup defn of gen_declaration_file.
+
+ * objc-parse.y (ridpointers, token_buffer): Define before use.
+
+ * reload1.c (scan_paradoxical_subregs): Declare correctly.
+
+ * tm-romp.h (ENCODE_SEGMENT_INFO): Use INTEGRATED bit to mark
+ SYMBOL_REFs that are addresses of functions (really their data blocks).
+ (LEGITIMATE_CONSTANT_P): Data block addresses of functions are not
+ valid operands.
+ * out-romp.c (symbolic_operand): Likewise.
+ * romp.md (call*): emit_move_insn will now do force_const_mem
+ so it needn't be done explicitly.
+
+ * out-romp.c (output_fpop): Work around yet another RT fp bug;
+ cannot merge output and first operand for SFmode if general reg.
+
+ * romp.md: Add new pattern to match combination of copy and test.
+ Use nilo instruction to set CC.
+
+Fri Sep 14 07:07:01 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * c-tree.h: Define all *_type_node trees defined in c-decl.c, in the
+ same order as defined there.
+
+Fri Sep 14 08:39:17 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-typeck.c (build_c_cast): Convert READONLY_DECLs to make up
+ for the fact that we do not call `default_conversion' anymore.
+
+ * function.c (instantiate_virtual_regs): If the function is inline,
+ we don't need to worry about making valid rtl, but we do need to
+ worry about instantiating all virtual registers. Otherwise we must
+ make the rtl valid, and we have other opportunities to eliminate the
+ virtual registers during the compilation.
+
+Thu Sep 13 16:00:05 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * reload.c (MATCHES): Check for different rtx's with same reg number.
+
+ * fixincludes: Discard `.' from value of `files'.
+
+ * c-parse.y (unary_expr): Use unary && to get address of label.
+ (stmt): Handle `goto *EXPRESSION;'.
+ * stmt.c (expand_computed_goto): New function.
+
+ * gstdarg.h: New name for stdarg.h.
+ * Makefile (install-headers): Rename gstdarg.h while installing it.
+
+ * sdbout.c (PUT_SDB_LAST_DIM): Get rid of SDB_DELIM.
+ (plain_type): Output accumulated array dims and size.
+ (plain_type_1): Eliminate arg NOSIZE. Save up dims and size.
+ Call self rather than plain_type for pointers and functions.
+ (sdbout_array_type, sdbout_array_depth): Functions deleted.
+
+Thu Sep 13 16:12:15 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-class.c (build_method_call): Fix typo in deciding whether to
+ do hairy or trivial pointer conversions on `this'.
+
+ * cplus-tree.c (layout_vbasetypes): Don't double-count space taken
+ up by virtual baseclasses.
+
+Wed Sep 12 18:14:19 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * tm-m68k.h: Use asm_fprintf widely.
+ (REG_PREFIX, IMMEDIATE_PREFIX, LOCAL_LABEL_PREFIX, USER_LABEL_PREFIX):
+ New macros.
+
+ * final.c (asm_fprintf): New function.
+
+Wed Sep 12 06:07:50 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-dbxout.c (dbxout_type): Output basetype size and offset info
+ in bits, not bytes.
+
+ * cplus-decl.c (finish_{decl,function}): Set CLASSTYPE_ASM_WRITTEN
+ bit of types used by non-extern VAR_DECLs. Set it also for types of
+ PARM_DECLs and return types of functions defined in the file being
+ compiled.
+
+Tue Sep 11 13:21:40 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * sdbout.c (plain_type_1): New argument NOSIZE. Inhibits size output.
+ (sdbout_array_type): Call plain_type_1 directly; set NOSIZE.
+
+ * sdbout.c (sdbout_array_type): New argument DEPTH.
+ Don't output more than SDB_MAX_DIM dimensions.
+ (sdbout_array_depth): New function.
+ (plain_type_1): Start DEPTH by calling sdbout_array_depth.
+
+ * gnulib2.c (_bb_init_func): Library member now named _bb.
+
+ * tree.h: Add comments.
+
+Mon Sep 10 17:20:06 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * Makefile.in (install): Fix typo.
+
+ * cccp.c (macarg1): With -traditional, backslash quotes chars.
+
+Mon Sep 10 16:37:01 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (jump_optimize): Don't swap THEN and ELSE parts during jumps
+ runs after reload.
+
+Mon Sep 10 13:07:39 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cccp.c (collect_expansion): Don't actually substitutee into a
+ string if ANSI; just consider warning.
+
+ * gnulib2.c (div_qrrnd for i386): Fix typo. Rename some args.
+
+ * sdbout.c (sdbout_array_type): New argument DEPTH.
+ Don't output more than SDB_MAX_DIM dimensions.
+ (plain_type_1): Start DEPTH at 1.
+
+Sun Sep 9 22:02:24 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * out-a29k.c (gen_reg_operand): Exclude SUBREG of a special
+ register.
+
+ * cse.c: (fold_rtx): Get equivalent for register before seeing if
+ memory reference is to constant pool.
+ (cse_ins): Only call force_const_mem if we actually try to use
+ the constant (i.e., we haven't found anything cheaper).
+
+Sun Sep 9 21:49:18 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * ..._BIG_ENDIAN: Now expect definition to be 0 or 1.
+ All refs and defs changed.
+
+ * tm-mips.h (CPP_SPEC): Error for -EL (for -EB, if DECSTATION).
+
+ * sdbout.c (sdbout_one_type): Set TREE_ASM_BEING_WRITTEN before
+ recursion, and TREE_ASM_WRITTEN after.
+
+Sat Sep 8 16:47:27 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * hard-params.c (main): Don't try to malloc all memory.
+
+Sat Sep 8 16:38:53 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload): Set reg_equiv_constant if the equivalence
+ is any constant, not just a legitimate constant operand.
+
+ * final.c (get_attr_length, shorten_branches, final_scan_insn):
+ If JUMP_TABLES_IN_TEXT_SECTION is defined, don't put jump tables
+ in readonly data section, even if it exists.
+
+Sat Sep 8 14:07:05 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * Makefile.in (bootstrap*): Pass null ALLOCA definition to recursive
+ makes when compiling with GCC since it never needs alloca.c.
+
+ * c-typeck.c (build_binary_op_nodefault): Warn for signed < unsigned.
+ Controlled by -W.
+
+ * tm-i386v4.h: New file.
+
+Fri Sep 7 13:10:24 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cccp.c (STDC_VALUE): New macro, defaulting to 1.
+ (intialize_builtins): Use that.
+
+ * m68k.md (movqi): `st' does not set cc's.
+
+Fri Sep 7 07:49:23 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * genemit.c (gen_expand): Fix test for no C code.
+ If no C code, no MATCH_DUPs, and only one insn to write, handle
+ like DEFINE_INSN and return that insn rather than making a sequence.
+
+ * emit-rtl.c (add_insn_after): If previous or next insn is a
+ SEQUENCE, update the NEXT_INSN in the last insn in the SEQUENCE or
+ PREV_INSN of the first, as appropriate.
+ (emit_insn_before, emit_jump_insn_before, emit_note_before):
+ Call add_insn_after.
+
+ * stmt.c (check_for_full_enumeration_handling): If a switch whose index
+ is an enumerated type contains labels for every enumeration value,
+ make the label for the last value the default label since such a
+ switch can never fall through.
+
+ * genattr.c (fatal): Declare first arg correctly.
+
+ * combine.c (try_combine): No longer check REG_FUNCTION_VALUE_P;
+ its value shouldn't matter once RTL generation is complete.
+ (subst): If NOT is present as an operand in commutative operation,
+ put it last to reduce the number of required patterns.
+
+ * out-romp.c (output_fpops): Align to word boundary before writing
+ any floating-point blocks.
+
+ * function.c (instantiate_virtual_regs_1): Fix typo in previous change.
+ When a MEM must be copied, use copy_rtx; the PLUS may also be shared.
+
+Thu Sep 6 15:19:42 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * gcc.c (do_spec_1): Don't add __ to -D if __ already present.
+
+ * c-typeck.c (convert_for_assignment):
+ Better warning for FCN * vs. void *
+ Specific warning for char * vs. unsigned char *.
+
+Thu Sep 6 14:52:08 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c (find_basic_block): Return -1, not 0, if we can't find
+ the basic block.
+ (mark_target_live_regs): Clear PENDING_DEAD_REGS unconditionally.
+ (relax_delay_slots): Don't call optimize_skip for unconditional jump.
+ Only try to remove jump if it is a simple conditional or
+ unconditional jump (but not a tablejump or similar such).
+
+ * cse.c (invalidate, refers_to_mem_p, cse_rtx_addr_varies_p):
+ Consider (plus (reg) (const_int)) to be a fixed address if REG
+ is constant; old code just handled REG.
+
+ * genrecog.c (enum routine_type): Use to distinguish two types of
+ routines that we write: recog and split_insns.
+ (make_split_sequence): Write out extern for gen_split_ function.
+ (break_out_subroutines, write_subroutine, write_tree, main):
+ Use new enum routine_type instead of passing "split" or "recog".
+ (write_subroutine): Write correct type for splitting functions and
+ return 0, not -1.
+ (main): Write includes before declarations of gen_split_ functions
+ since "rtx" is needed for them.
+ * rtl.h (try_split, split_insns): Added definitions.
+
+Wed Sep 5 16:20:07 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * Makefile.in (includes): Use proper directory.
+
+Tue Sep 4 13:59:31 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-decl.c (store_parm_decls): Let extra_warnings control
+ warnings about parms not declared.
+
+ * flow.c (life_analysis): Move code to detect stack-adjust insns.
+ It was unreachable.
+
+ * gnulib.c, gnulib2.c (abort): #undef in case config.h defines it.
+
+Mon Sep 3 17:50:16 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * calls.c (expand_call): If SETUP_INCOMIMG_VARARGS is defined, pass
+ unnamed args in registers.
+ * function.c (assign_parms): Call SETUP_INCOMING_VARARGS for
+ stdargs as well as varargs; ensure we only call it once.
+
+ * function.c (instantiate_virtual_regs_1): Don't assume all memory
+ addresses are valid for all insns.
+
+Sun Sep 2 22:17:40 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * expr.c (emit_library_call): Push all stack args, then load regs.
+
+ * c-decl.c (c_build_type_variant): For an ARRAY_TYPE,
+ put the qualifier into the array as well as the element.
+ (grokdeclarator): When a field or variable is supposed to be
+ a const or volatile array, make the array elements const or
+ volatile, but also make the field or variable so.
+
+ * c-decl.c (grokdeclarator): Turn off the warning for const or volatile
+ function type when making an array. It was useless.
+
+Fri Aug 31 16:26:40 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-common.c (truthvalue_conversion): Let the
+ language-specific code decide how to convert EXPR
+ if it is not one of the special forms we recognize.
+
+Fri Aug 31 15:08:19 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * gcc.c (execute): Use I instead of undefined var J if DEBUG defined.
+
+Fri Aug 31 14:37:36 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * sdbout.c (sdbout_begin_block): Delete excess arg to sdbout_block.
+
+Thu Aug 30 21:31:55 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expmed.c (extract_bit_field): Fix typos in computations of UNIT.
+
+Wed Aug 29 12:33:33 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * sdbout.c (sdbout_reg_parms): Don't advance parm twice.
+
+Tue Aug 28 22:49:41 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cccp.c (delete_newlines): New function.
+ (macroexpand): Remove newlines from args used more than once.
+
+Tue Aug 28 22:16:50 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * Makefile.in (sched.o): Add to list of files to compile.
+
+ * c-parse.y (position_after_white_space): Declare with correct type.
+
+ * fold-const.c (optimize_bit_field_compare): Fix typo.
+
+ * reorg.c (split_insns): No longer need extern for this here.
+
+ * toplev.c (sched_dump_file): Define.
+ (compile_file): Initialize and print sched_time and sched2_time.
+
+ * local-alloc.c (block_alloc): Fix typo in allocation of insn_map.
+
+ * cse.c (cse_insn): Try related value in case where CONST is seen
+ first and SYMBOL_REF later.
+
+Tue Aug 28 16:26:50 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cccp.c (main): Don't modify or validate arg of -D here.
+ (make_definition): Do it all here.
+
+ * function.c (assign_parms): Reenable `register' for parms.
+
+Tue Aug 28 07:12:19 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * tm-a29k.h (CONST_COSTS): All CONST_INTs are cost zero; adjust
+ SYMBOL_REF and CONST_DOUBLE costs to reflect their actual cost.
+
+ * expr.c (expand_expr): Don't suppress EXPAND_SUM here if not Pmode.
+ (expand_expr, case *_DECL): Return constant address if
+ EXPAND_SUM or EXPAND_INTO_STACK in addition to EXPAND_CONST_ADDRESS;
+ all of these cases will later call memory_address.
+ (expand_expr, case COMPONENT_REF): Always make recursive call with
+ EXPAND_SUM.
+ (expand_expr, case PLUS_EXPR): Try to form constant if X + CONST and
+ mode is Pmode without EXPAND_SUM; if not EXPAND_SUM, use force_operand.
+ Check for MODE != Pmode with EXPAND_SUM here.
+ (expand_expr, case MINUS_EXPR): Always process X - CONST_INT as
+ X + (-CONST_INT)).
+
+Sun Aug 26 23:10:10 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-decl.c (c_decode_option): Handle -funsigned-bitfields.
+ (grokdeclarator): Do the real work.
+ (grokfield): Pass either FIELD or BITFIELD to grokdeclarator.
+
+ * tm-att386.h (asm_output_common): Use SIZE, not ROUNDED.
+
+Sat Aug 25 17:17:27 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-parse.y (unary_expr): Turn off handling of &...
+ * c-decl.c (store_parm_decls): Turn off extra dummy parameter.
+
+ * tm-att386.h (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS): New macros.
+ (BSS_SECTION_ASM_OP): New macro.
+ (ASM_OUTPUT_LOCAL): Call bss_section, don't just print .bss.
+
+ * combine.c (subst): Handle shift within mem, as multiplication.
+
+Sat Aug 25 11:43:09 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * final.c (alter_cond): Handle CC_INVERTED.
+
+ * conditions.h (CC_INVERTED): New flag indicating that the condition
+ tested leaves the falgs set opposite to the condition tested. This
+ is unsafe for IEEE floating point operations, but useful for integer
+ operations which can combine with condition-code setting operations.
+
+ * c-parse.y (position_after_white_space): New function. Skips
+ all of the whitespace at the current location in the input
+ file, taking NEXTCHAR into account. Changed all callers of
+ `skip_white_space' in grammar to use this function instead.
+
+ * genrecog.c (main): Generate code which is more easily optimized by
+ GCC's cse. In particular, start each recognizer with the address of
+ `recog_operands' in a register.
+
+ * reload.c (combine_reloads): Can only combine reloads if the
+ register we find can hold the entire output reload (i.e., SFmode
+ register may not be suitable for combining with DFmode register).
+
+ * optabs.c (have_sub2_insn): Fixed typo.
+ * combine.c (combine_instructions): Fixed typo in comment.
+
+ * function.c (expand_function_end): Emit a barrier after a RETURN
+ jump.
+
+ * Added diffs for new instruction scheduling code.
+ * emit-rtl.c (try_split): Moved here from reorg.c and made
+ public. Both instruction scheduling and delayed branch
+ filling now use the same code to split insns.
+ * flags.h: Add new flags FLAG_SCHEDULE_INSNS for instruction
+ scheduling before register allocation and
+ FLAG_SCHEDULE_INSNS_AFTER_RELOAD for insn scheduling after
+ register allocation.
+ * recog.c (constrain_operands): Recognize pseudo registers as
+ registers for the purpose of insn constraint matching before
+ register allocation. Otherwise, the insn scheduler assumes
+ the operands will be memory, which is usually wrong (and
+ causes it to build bad schedules).
+ * sched.c (order_calls): New function. For two CALL_INSNS in
+ the rtl chain, we set up a constraint that the second
+ CALL_INSN may not be scheduled to run before the first.
+ (sched_analyze_*): Three kinds of dependencies (true, anti,
+ and output) constrain the order in which insns can be
+ rearranged and still preserve their execution semantics.
+ We now handle dependencies for pseudo and hard register usage
+ and for memory usage in these functions.
+ (launch_links): The ordering of which newly ready insns to
+ execute is now preserved according to their `priority' in the
+ insn chain, and no longer on their order in the dependency
+ list from which they were launched.
+ (schedule_block): Removed support for trying to schedule insns
+ taking branch delays into account. Reorg.c should be hacked
+ to understand which insns to pull into delay slots and which
+ insns to leave alone.
+ (schedule_block): (Re-)compute all register life information here.
+ No longer dependent on flow to keep `basic_block_live_at_end'
+ allocated.
+ (schedule_insns): Recompute LABEL->BASIC BLOCK mapping, so we
+ can compute register life information.
+ * rtl.c (add_dependence): New function to add and remove insn
+ dependencies. If an insn (I2) must execute after another
+ (I1), we add an INSN_LIST containing I1 to I2's LOG_LINKS.
+ If such an INSN_LIST is already in I2's LOG_LINKS, we don't
+ add a second.
+ (remove_dependence): Similar, but removes dependencies. May
+ not actually be needed.
+ * toplev.c (compile_file,rest_of_compilation): Added code for
+ dumping info about insn scheduling.
+
+Fri Aug 24 17:24:03 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * Implement `aligned (INTEGER)' attribute for real.
+ * c-parse.y (attrib): Really record info for `aligned' attribute.
+ Don't warn for any integer alignment.
+ (attribute_list): Make a list.
+ (initdcl, notype_initdcl, component_declarator): Handle that info.
+ * c-common.c (decl_attributes): New function.
+
+Fri Aug 24 07:12:05 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * genattrtab.c (insn-config.h): This is really needed after all.
+ * Makefile.in (genattrab.o): Show dependency on insn-config.h.
+
+ * local-alloc.c (block_alloc): Don't update qty_birth for a
+ register whose quantity is <= 0.
+
+ * fold-const.c (decode_field_reference): Actually obtain unsigned
+ type where one is wanted.
+ (merge_component_references): Correctly test for mutually exclusive
+ conditions.
+
+Thu Aug 23 14:56:44 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-typeck.c (digest_initializer): No pedantic warning for string
+ and array of unsigned char.
+
+ * tree.c (get_identifier): Do id_clash_len stuff if length equals that.
+
+Thu Aug 23 10:30:10 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-tree.h (CLASSTYPE_CID): Key off of TYPE_MAIN_VARIANT.
+
+Thu Aug 23 06:44:33 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * out-romp.c (romp_pushes_stack): Don't count
+ current_function_pretend_args_size in size of stack.
+
+Wed Aug 22 18:00:07 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * tm-a29k.h, tm-a29kunix.h, xm-a29k.h, a29k.md, out-a29k.c: New files.
+
+ * config.gcc (a29k-unix): New target.
+
+ * calls.c (expand_call): Allow FUNCTION_ARG to return an EXPR_LIST
+ specifying multiple registers to load.
+ (store_one_arg): Likewise; also delete handling of fully-in-register
+ case, which hasn't been handled here for a while.
+ * expr.c (emit_library_call): Our subset of calling sequence for
+ library routines does not include multiple registers for an arg.
+
+Tue Aug 21 17:44:49 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * make-cc1.com: Compile and link version.c.
+
+ * Makefile.in (install-gnulib): Create libg.a if none already.
+
+ * expr.c (convert_move): Handle expand_unop retval not same as target.
+
+ * reload.c (find_reloads): For register letters, don't win if BLK.
+
+ * sdbout.c (sdbout_toplevel_data): Fix error message.
+
+ * protoize.c (open): Prototype deleted.
+
+ * flow.c (mark_set_1, mark_used_regs): Update reg_first_use.
+ (allocate_for_life_analysis): Allocate and clear it.
+ * local-alloc.c (block_alloc): Calculate INSN_MAP.
+ Get first use of each reg from reg_first_use.
+
+ * tm-vms.h (MAYBE_VMS_FUNCTION_PROLOGUE): Distinguish C from C++.
+ (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS): Add a const data section.
+ (ASM_OUTPUT_EXTERNAL): Use that section.
+ (SELECT_SECTION): Go to that section when appropriate.
+
+Tue Aug 21 18:26:47 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c (fill_simple_delay_slots): Mark anything referenced by an
+ insn that will be placed in a delay slot in the epilogue as being
+ needed at the end of the function.
+
+ * cse.c (constant_pool_entries_found): New static var.
+ (cse_main): Initialize it.
+ (use_related_value): Correctly look for registers in hash table.
+ (fold_rtx): Fold constant pool entries to their constants and
+ set constant_pool_entries_found.
+ (cse_insn): If we weren't able to place a constant in an insn
+ and we have previously seen constant pool entries used, set up
+ to try the constant pool entry also.
+
+Mon Aug 20 12:14:27 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * function.c (assign_parms): Set LAST_NAMED for parm before dummy.
+ See August 9 change in c-parse.y.
+
+ * gcc.c (process_command): Split -oFOO into two arguments.
+
+ * stmt.c (expand_asm_operands): Handle COMPONENT_REF and
+ ARRAY_REF directly as output operands. Avoids crash if BLKmode.
+
+ * c-parse.y, cplus-parse.y, objc-parse.y: Include stdio before input.h.
+ * input.h: Declare finput.
+
+ * expr.c (emit_push_insn): Don't adjust for EXTRA separately
+ if will have to adjust the stack anyway.
+
+ * m68k.md (*sh*si3): On 68000, optimize case of >= 16 bits.
+
+ * varasm.c (decode_rtx_const): Don't dereference a PLUS
+ subexpression of a CONST twice.
+
+Sun Aug 19 21:51:51 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * toplev.c (finput): Define here.
+ * *-parse.y (lineno, finput): Duplicate definitions deleted.
+
+ * global-alloc.c (find_reg): Test best_reg against 0,
+ not first_pseudo_register.
+
+Sun Aug 19 17:48:22 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * explow.c (plus_constant): If adding to constant pool constant,
+ return a new one.
+
+ * genattrtab.c: Need not include insn-config.h.
+
+Sun Aug 19 17:23:10 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * tm-hp9k320bsd.h (CPP_SPEC): Def __HAVE_68881__ like __HAVE_FPU__.
+
+ * Makefile.in (USE_ALLOCA): Test was backwards.
+ (USE_HOST_ALLOCA): Likewise.
+
+Sun Aug 19 09:58:16 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * stmt.c: Fixes from 2.0 for fixup_goto incorporated here.
+
+ * cplus-decl2.c (write_vtable_entries): Don't test TREE_EXTERNAL
+ of DECL_CONTEXT (FN). TREE_EXTERNAL is not meaningful for types.
+
+Fri Aug 17 22:14:09 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * optabs.c (emit_cmp_insn): Don't abort after floating lib cmp.
+
+Thu Aug 16 23:16:40 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * varasm.c (assemble_variable, assemble_static_space): Don't
+ call data section if -fshared-data. If this section is needed,
+ it should be entered from elsewhere, and this is believe to be
+ done in all known cases.
+ (output_constant_pool): Add support for ASM_OUTPUT_SPECIAL_POOL_ENTRY
+ which writes certain constant pool entries specially; used for TOC
+ on RS/6000.
+ (assemble_external_libcall): New function.
+ * expr.c (emit_library_call): Call it.
+
+ * reorg.c (mark_target_live_regs): Don't follow around infinite loops.
+
+ * varasm.c (struct rtx_cont): Don't use enums in bit fields if
+ ONLY_INT_FIELDS is defined.
+
+ * cse.c (remove): Rename to remove_from_table to avoid conflict
+ with `remove' defined in stdio.h.
+
+Thu Aug 16 22:44:35 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * stmt.c: fixup_gotos must ignore blocks started after the goto.
+ (block_start_count): New variable, and slot in some structures.
+ (expand_function_start): Initialize it.
+ (expand_start_bindings): Increment it and store in struct nesting.
+ (expand_goto): Store it in struct goto_fixup.
+ (fixup_gotos): Compare fixup's count with block's count.
+ (save_stmt_status, restore_stmt_status): Handle block_start_count.
+ * function.h (struct function): Make slot to save it.
+
+Thu Aug 16 18:02:03 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * obtabs.c (expand_fix, expand_float): Support direct conversion
+ between SFmode and fixed modes by library call.
+
+Wed Aug 15 18:36:28 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cccp.c (main): Allow -M to work on .s files by checking for .s
+ and .S suffixes when writing dependencies.
+
+ * reorg.c (optimize_skip, fill_eager_delay_slots, try_host_target):
+ Don't need to call can_reverse_comparison_p because invert_jump is
+ safe for floating-point; only reverse_condition isn't.
+
+Wed Aug 15 15:50:36 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * dbxout.c (dbxout_type): Skip past const and volatile qualifiers
+ that might appear in method names.
+
+Wed Aug 15 15:44:17 1990 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-parse.y (hash, is_reserved_word): Use __inline.
+
+ * cccp.c (main): Support -dN and -dD. Support -lint.
+ (dump_macros): Two new alternatives.
+ (handle_directive): Output macro definitions if -dN or -dD.
+ (rescan): Check comments if -lint.
+ (get_lintcmd): New subroutine.
+
+ * c-decl.c (c_decode_option): Handle -fshort-double.
+ (init_decl_processing): Create double_type_node accordingly.
+
+ * c-decl.c (c_decode_option): Handle -Wno...
+
+Tue Aug 14 23:10:40 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * explow.c (break_out_memory_refs): Don't break out reference if
+ constant but not legitimate constant for a machine insn.
+ (memory_address): Only put legitimate constants, rather than all
+ constants, into registers if they are used as an address.
+
+Tue Aug 14 14:34:02 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * reorg.c (steal_delay_list): Can't put something in a
+ non-annulled delay slot that can trap.
+
+ * tm-i860.h (GO_IF_LEGITIMATE_ADDRESS): Typo testing offset alignment.
+
+ * cccp.c (do_assert, do_unassert, check_assertion): New functions.
+ (compare_keyword_lists, read_keyword_list, free_keyword_list):
+ New functions.
+ * cexp.y (yylex): Allow `#' as token.
+ Return name and length of symbol.
+ (keywords): New nonterminal.
+ (expr): Recognize # to test an assertion.
+ (U_CHAR, struct arglist): Data types copied from cccp.c.
+ (%union): New alternatives `keywords' and `name'.
+
+Mon Aug 13 22:26:19 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * tm-romp.h (SLOW_BYTE_ACCESS): Set to 0.
+
+ * expmed.c (store_bit_field, extract_bit_field): Use get_best_mode
+ to select mode to use for accessing memory when bitfield insns don't
+ accept memory.
+
+ * c-common.c (rewrite_for_merged_ref, make_merged_ref): Deleted.
+ (merge_component_comparisons): Delete from here.
+ * c-tree.h (merge_component_comparisons): No longer global.
+ * c-convert.c (build_binary_op_nodefault): Don't try to merge component
+ references here; now done in fold.
+ * cplus-typeck.c (build_binary_op_nodefault): Likewise.
+ * Makefile.in (fold-const.o): Now includes flags.h.
+ * fold-const.c: Likewise.
+ (STRIP_NOPS): New macro.
+ (decode_field_reference, all_ones_mask): New functions.
+ (merge_component_references): Put rewritten version here.
+ This fixes bugs in the way that comparisons with non-equal
+ constants (!p->a && p->b) are handled and in endianness checking.
+ Also accepts more general comparisons, and, in particular, its
+ own output so more than a pair of operations can be merged.
+ (fold): Call it for TRUTH_{AND*,OR*}_EXPR.
+
+ * tree.def (BIT_FIELD_REF): New tree code.
+ * expr.c (get_inner_reference): Support BIT_FIELD_REF.
+ If bitfield is a complete mode-sized unit, return that mode; if it
+ is a subset of bits within a mode-sized unit, return VOIDmode.
+ (expand_assignment): Check for BIT_FIELD_REF.
+ Use mode returned from get_inner_reference to see if bit field.
+ (store_constructor): Likewise.
+ (store_field): Don't pass arg BIT_FIELD; use MODE == VOIDmode
+ instead. All callers changed.
+ (expand_expr, case BIT_FIELD_REF): New case. Handled same as
+ COMPONENT_REF.
+ Use mode returned from get_inner_reference rather than DECL_BIT_FIELD.
+ (expand_increment): Must stabilize BIT_FIELD_REF.
+ (do_jump, case NOP_EXPR): Check for inner BIT_FIELD_REF and ARRAY_REF.
+ (do_jump, case COMPONENT_REF): Generalize to handle BIT_FIELD_REF
+ and some ARRAY_REFs also.
+ * fold-const.c (operand_equal_p): Handle BIT_FIELD_REF.
+ * tree.c (staticp): Rework to use switch instead of if-then-else.
+ Add support for BIT_FIELD_REF.
+ (stabilize_reference, simple_cst_equal): Support BIT_FIELD_REF.
+
+ * c-common.c (truthvalue_conversion): Rework to use switch rather
+ than if-then-else.
+ Generate either TRUTH_{OR*|AND*}_EXPR or comparison operations as
+ much as possible.
+ Handle REAL_CST, ADDR_EXPR, ABS_EXPR, FLOAT_EXPR, FFS_EXPR,
+ LROTATE_EXPR, RROTATE_EXPR, BIT_XOR_EXPR, and MINUS_EXPR.
+ Call fold for COND_EXPRs that we make.
+ * c-convert.c (build_unary_op): invert_truthvalue can't return 0,
+ so don't check for it.
+ (invert_truthvalue): Delete from here.
+ (convert_to_integer, build_conditional_expr): Try to fold COND_EXPR.
+ * c-plus-cvt.c (convert_to_integer): Likewise.
+ * cplus-typeck.c (build_conditional_expr): Likewise.
+ (build_unary_op): invert_truthvalue can't return 0.
+ (invert_truthvalue): Delete from here.
+ * fold-const.c (invert_truthvalue): Move to here.
+ Don't invert floating-point test.
+ Look inside conversions.
+ Use recursive call to negate inside logical operations rather than
+ building a TRUTH_NOT_EXPR.
+ Allow only certain TREE_CODEs as operands; abort for the rest.
+ (fold_convert): Accept second argument that is item being
+ converted to ensure that NOPs have been stripped.
+ (operand_equal_p): Return 0 if either operand has side effects.
+ If both integer or real constants, check the values.
+ Do a more thorough test to see if two items are identical;
+ specifically, compare the operands of simple TREE_CODEs.
+ (omit_one_operand, distribute_bit_expr): New functions.
+ (make_bit_field_ref, optimize_bit_field_compare): Likewise.
+ (fold): Remove LOSES; now done explicitly or by calling
+ omit_one_operand. Some previous uses weren't needed.
+ Try to fold any COND_EXPRs and some COMPOUND_EXPRs we make.
+ Remove pair of NEGATE_EXPRs and BIT_NOT_EXPRs.
+ Convert "- (a - b)" to "b - a" for non-floating-point.
+ ABS_EXPR applied to ABS_EXPR or NEGATE_EXPR is ABS_EXPR of inner arg.
+ Convert "a + (-b)" to "a - b" and "a - (-b)" to "a + b".
+ If adding ANDs with constants that have no bits, in common, try
+ bitwise-or, since we may then be able to distribute the operation,
+ e.g., (a & 7) + (a & 0x70) -> a & 0x77.
+ Add missing last arg to operand_equal_p call.
+ Call distribute_bit_expr for BIT_AND_EXPR and BIT_IOR_EXPR.
+ Exclusive-or with all ones is bit negation.
+ If second arg of BIT_AND_TC_EXPR is constant, convert to BIT_AND_EXPR.
+ Handle TRUTH_NOT_EXPR by calling invert_truthvalue.
+ Call optimize_bit_field_compare for comparisons of bitfields.
+ Handle "a ? 1 : 0" and "a ? 0 : 1" as test or negated test.
+ Simplify "a & 4 ? a & 4 : 0" and "a ? a : 0" to remove conditonal.
+ * stor-layout.c (get_best_mode): New function.
+ * machmode.h: Define it.
+ * tree.c (integer_pow2p): New function.
+ * tree.h: Declare new functions and functions no longer static.
+
+Mon Aug 13 17:45:13 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * config.gcc (sun3-mach): New alternative.
+ * tm-sun3mach.h: New file.
+
+ * m68k.md (bfextu patterns): Set CC_NOT_NEGATIVE.
+
+Mon Aug 13 10:14:37 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-decl2.c (flag_minimal_debug): Now is default is
+ -fflag-minimal-debug.
+
+ * cplus-tree.c (virtual_member): Return the assoc of a non-virtual
+ basetype that comes from a virtual baseclass. Changed callers
+ which used to call `value_member' to call virtual_member instead.
+
+Mon Aug 13 06:54:04 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * optabs.c (expand_twoval_binop): Fix typo.
+
+ * cse.c (lookup_as_function): Don't assume CODE is a unary
+ operation. It might be a binary op or REG.
+
+Sun Aug 12 21:42:55 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case COND_EXPR): Don't abort if first arg of
+ COND_EXPR isn't a comparison; just suppress the do_store_flag call.
+
+Sun Aug 12 14:26:45 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tree.h (enum built_in_function): Delete comma after last name.
+ * c-parse.h (enum rid): Likewise.
+ * expr.h (enum optab_methods): Likewise.
+ * stab.h: Add dummy enum name at end.
+
+ * config.gcc (genix): Set tm_file.
+ * tm-genix.h (ASM_OUTPUT_DOUBLE): New overriding definition.
+
+ * tree.h (struct tree_type, struct tree_decl): Handle ONLY_INT_FIELDS.
+ * rtl.h (struct rtx_def): Likewise. That macro goes in xm-*.h.
+
+Sat Aug 11 16:56:19 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cplus-decl.c (finish_function): Check value of HAVE_return before
+ calling gen_return.
+
+ * reorg.c (optimize_skip): Don't reject skip when we jump around an
+ insn and merge at the return point.
+
+Fri Aug 10 17:00:31 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * dbxout.c (dbxout_parms, dbxout_reg_parms): Ignore nameless parms.
+ * sdbout.c (sdbout_parms, sdbout_reg_parms): Ignore nameless parms.
+
+Fri Aug 10 14:14:08 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * recog.c (indirect_operand): Modes need not agree if MODE == VOIDmode;
+ remove test from here since it is in memory_operand, which this calls.
+
+Thu Aug 9 15:19:17 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (store_parm_decls): If function has variable number of args,
+ put a dummy decl at end of parmlist.
+ * c-parse.y (unary_expr): Handle &... with address of dummy decl.
+
+ * tm-*.h (LEGITIMIZE_ADDRESS): Go to WIN instead of returning.
+
+ * cccp.c (handle_directive): Add code to support `# DIGIT'
+ but disable it for the time being.
+
+ * tm-hp9k320.h (CPP_SPEC): Define _HPUX_SOURCE if not ANSI.
+ (CPP_PREDEFINES): Don't define it here.
+ Do define alternatives with __ prepended.
+
+Wed Aug 8 14:00:26 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * out-romp.c: Don't include hard-reg-set; already in insn-output.c.
+
+ * explow.c: insn-flags.h is needed to see if "probe" insn exists.
+ * Makefile.in (explow.o): Likewise.
+
+Wed Aug 8 13:35:00 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (check_macro_name): Warn if name is `defined'.
+
+ * tm-sun386i.h (ASM_IDENTIFY_GCC): If profiling, put a NOP after
+ gcc_compiled.
+
+Tue Aug 7 23:51:38 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * toplev.c (main): Handle -W options like -f options.
+ This supports -Wnounused, and such like.
+ (warn_uninitialized): New variable, controls those warnings.
+ Set it for -Wuninitialized, and for -W.
+
+Tue Aug 7 13:24:58 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * genextract.c (walk_rtx): Fix typo in MATCH_PARALLEL case.
+
+ * explow.c (allocate_dynamic_stack_space): Pass size of allocated stack
+ to gen_probe.
+
+Tue Aug 7 12:19:46 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * pyr.md (extendsfdf2, truncsfdf2, float*, fix*): Use `&'.
+
+Tue Aug 7 07:13:54 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (find_cross_jump): Include a USE or CLOBBER in cross jump
+ but don't count it against minimum size.
+ Never return when cross-jump hasn't actually been done.
+
+Mon Aug 6 18:50:12 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * varasm.c: Include regs.h.
+ (decode_reg_name): Remove extern for reg_names; it is in regs.h.
+ * Makefile.in (varasm.o): Depends on regs.h.
+
+Mon Aug 6 12:46:07 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (grokdeclarator): Don't warn if initialized fcn is extern.
+ (start_decl): Don't warn at all for initialized extern.
+
+ * final.c (final_start_function): Handle PROFILE_BEFORE_PROLOGUE.
+ (profile_function): New subroutine.
+
+ * tm-i386sco.h: New file.
+ * config.gcc (i386-sco): New alternative.
+
+ * gcc.c (ENDFILE_SPEC): New macro.
+ (do_spec_1): Handle %E.
+ (link_spec): Use %E.
+
+ * xm-i386.h (alloca): Define without arg.
+
+ * Makefile.in (stage*): Use RANLIB_TEST.
+ (LIMITS_H): New variable.
+ (USER_H): Use that.
+ * make-i386sco: New file.
+
+Sun Aug 5 13:11:04 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rtl.h: Delete all machine mode defns; include machmode.h instead.
+ * tree.h: Likewise.
+ * machmode.h: New file.
+ * stor-layout.c: No longer include rtl.h.
+ * Makefile.in: (RTL_H, TREE_H): Add machmode.h.
+ (stor-layout.o): No longer depends on RTL_H.
+
+ * c-common.c (binary_op_error, shorten_compare): Should no longer
+ have been static when moved here.
+
+Sun Aug 5 12:57:02 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stor-layout.c (layout_record, layout_union): Test value of
+ PCC_BITFIELD_TYPE_MATTERS for being nonzero, if it is defined.
+ * tm-*.h: Define with value 1.
+ * tm-vax.h (PCC_BITFIELD_TYPE_MATTERS): Depends on -mvaxc-alignment.
+
+ * proto.h: New file.
+ * Makefile.in (USER_H): Add that file.
+
+Sun Aug 5 00:04:08 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-decl2.c (grokfield): It is no longer legal to specify
+ the initializer for a static const member in the class
+ declaration. Dealing with default initializers is basically
+ impossible.
+
+ * cplus-init.c (build_delete): Don't wrap `addr' in a SAVE_EXPR
+ until it is in fact an address. This allows us to call
+ destructors on the return values of function calls.
+
+ * cplus-typeck.c (commontype): Fixed bug in OFFSET_TYPE case which
+ led to infinite recursion (since we did not reduce the types
+ before we recursed).
+
+ * cplus-lex.c (check_newline): Make `#pragma implementation' more
+ forgiving.
+
+ * cplus-init.c (expand_aggr_init): Changed Jan 20th change so that
+ we test whether TYPE has a constructor defined, and we do not test
+ at all whether INIT was from a GNU constructor expression or not.
+
+ * cplus-typeck.c (build_modify_expr_1): Don't return
+ `error_mark_node' unless there really was an error. If there is
+ no work to do, return `integer_zero_node'.
+
+ * cplus-class.c (propagate_basetype_offsets): Count the space
+ between baseclasses, not just the space they occupy.
+
+ * cplus-typeck.c (commontype): Don't drop the exceptions that are
+ raised by functions and methods.
+
+ * cplus-cvt.c (convert_to_real): Fix if/else level problem in
+ case where EXPR is of aggregate type.
+
+ * cplus-decl.c (finish_decl): Emit a line-number note to give
+ users a chance to set a breakpoint before the initialization of an
+ object takes place.
+
+ * cplus-class.c (build_method_call): If the function we get is not
+ directly from the object we have, call `convert_pointer_to' if the
+ object uses multiple inheritance or virtual baseclasses.
+
+ * cplus-typeck.c (build_binary_op_nodefault): Don't call
+ `convert_to_pointer' with an argument that might be
+ the integer zero.
+
+ * cplus-method.c (hack_identifier): Look for DECL_REFERENCE_SLOT
+ in RESULT_DECLs as well.
+
+ * cplus-init.c (build_vec_delete): Don't forget to deallocate the
+ container if requested. Really use AUTO_DELETE and
+ AUTO_DELETE_VEC with the same interpretation as `build_delete'
+ gives to its AUTO_DELETE parameter.
+
+Sat Aug 4 22:08:44 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (find_cross_jump): Use prev_nonnone_insn.
+ Don't cross-jump into the middle of a USE-CALL_INSN-CLOBBER
+ block; doing so can confuse reorg.c.
+
+ * optabs.c (expand_binop, expand_binop, expand_twoval_binop):
+ If predicate doesn't match, ensure that operand is in a pseudo
+ register. Current code assumes that any register will suffice,
+ but an insn may want to reject certain hard registers.
+ (expand_unop, emit_unop_insn, emit_cmp_insn): Likewise.
+
+Sat Aug 4 15:29:09 1990 Michael Tiemann (rms at sugar-bombs.ai.mit.edu)
+
+ * function.c (assign_parms): For parms passed by reference,
+ make the memory object's mode agree with the parm's original
+ type mode.
+ * calls.c (expand_call): Fixed braino in building argument
+ reference when FUNCTION_ARG_PASS_BY_REFERENCE is defined.
+
+ * varasm.c (assemble_variable): Hack our way around the problem
+ that static class members look like initialized variables for the
+ purposes of establishing FIRST_GLOBAL_OBJECT_NAME.
+
+ * cplus-lex.c (reinit_parse_for_method): Give error message for
+ common mistake of forgetting the function body.
+
+ * cplus-typeck.c (build_component_ref): Make better error message
+ when field is not found.
+
+ * cplus-class.c (finish_struct): TYPE_GETS_*_INIT_REF comes from
+ members as well.
+
+ * cplus-typeck.c (c_expand_return): Give warning about returning
+ non-lvalues that come from functional casts.
+
+ * cplus-search.c (get_base_distance): Changed to follow leftmost
+ path only when PARENT == TYPE_MAIN_VARIANT (PARENT).
+
+ * cplus-class.c (modify_vtable_entries): Call get_base_distance
+ with 0 path_ptr, since we do not appear to use the path computed.
+
+Fri Aug 3 07:37:30 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * final.c (leaf_function_p): Delete line advertently retained
+ after change of July 29.
+
+ * reorg.c (optimize_skip, try_hoist_target): Don't invert jump
+ unless can_reverse_comparison_p says it is OK. Use invert_jump
+ to do it.
+ (fill_simple_delay_slots): Another way flow of control can merge is
+ for two insns to jump to the same place; try to get insns from there.
+ (mostly_true_jump): Return 2 for a jump very likely to be true (the
+ branch back to the start of a loop).
+ (fill_slots_from_thread): Accept new arg LIKELY. If true, see if can
+ put increment in delay slot and undo it after the end of the loop.
+ (fill_eager_delay_slots): Pass new arg to fill_slots_from_thread.
+ If previous insn is conditional jump that also didn't get a delay
+ slot, see if swapping targets helps.
+
+Fri Aug 3 00:18:35 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (MAKE_POS): Avoid constant of uncertain signedness.
+
+ * gnulib2.c (__bb_init_func): Add dummy function to prevent warning.
+
+Thu Aug 2 17:44:59 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * output.h (current_function_return_rtx): Add new variable.
+ * function.h (return_rtx): Likewise.
+ * function.c (push_function_context, pop_function_context): Save
+ and restore current_function_return_rtx.
+ (assign_parms, expand_function_start): Set current_function_return_rtx
+ to what is put in DECL_RTL (DECL_RESULT (current_function_decl)).
+ * reorg.c: No longer uses tree.h.
+ (dbr_schedule): Get result RTL from current_function_return_rtx instead
+ of reading it from current_function_decl.
+ * Makefile.in (reorg.o): No longer depends on TREE_H.
+
+ * cse.c (remove_invalid_refs): Only invalidate an entry if it
+ references the actual register, not merely something sharing its
+ quantity.
+ (cse_insn): Don't abort if SRC and SRC_EQUIV map to different
+ hash classes. Merge them instead.
+
+ * romp.md (mulsi3): Emit call to lmul$$ as a regular insn
+ rather than a CALL_INSN.
+ (divsi3, modsi3, udivsi3, umodsi3, call_libfcn): Deleted.
+ (divmodsi4, udivmodsi4): New patterns to call ldiv$$ and uldiv$$
+ as a normal insn to allow CSE'ing of MOD with DIV.
+
+Wed Aug 1 21:56:08 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-parse.y (yylex): Don't warn about non-decimal unsigned by default
+ if `u' was specified. Add similar warning for long and long long.
+
+Tue Jul 31 23:31:46 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-encore.h (FUNCTION_PROFILER): Override, putting `.' in label.
+
+ * xm-vms.h (const): Delete the definition.
+
+Mon Jul 30 18:33:04 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-typeck.c (convert_for_assignment): Normally no warning
+ between char * and unsigned char *, etc.
+ (convert_arguments): Include arg number in incomplete type warning.
+
+Mon Jul 30 07:38:55 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (invert_jump): Don't do anything with labels if NLABEL
+ equals JUMP_LABEL.
+ (redirect_jump): Don't try to reference LABEL_NUSES if olabel is
+ zero (meaning this is a return insn).
+ (redirect_exp): Handle case of converting return to jump to
+ label.
+
+ * dbxout.c (dbxout_parms): Allow parameter at zero offset from
+ AP to be represented as (MEM (REG ...)).
+ * sdbout.c (sdbout_parms): Likewise.
+
+Sun Jul 29 22:51:00 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * optabs.c (expand_twoval_binop_convert): Deleted.
+ (expand_twoval_binop): Rework to be handle predicates, modes, and
+ failures in a manner consistent with expand_binop.
+ Move code from expand_twoval_binop_convert inline and rework to
+ no longer hard-wire SImode and to handle failure.
+
+ * config.gcc: Finish change of July 24th to have make_var_file depend
+ on host machine.
+
+ * jump.c: Now includes insn-flags.h.
+ (jump_optimize): Try to put a RETURN at the end of the function if
+ control flows through to it.
+ JUMP_LABEL can now be zero for a RETURN or conditional RETURN.
+ Try to convert jump to end of function into (possibly conditional)
+ RETURN.
+ Use next_active_insn instead of next_real_insn; these do the same
+ thing prior to reload, after which USE and CLOBBERs don't matter.
+ redirect_jump may now fail so don't set CHANGED if it does.
+ Delete optimization of jump to RETURN; now subsumed by follow_jumps.
+ Reset INSN_CODE if changing conditional jump to unconditional.
+ (cond_jump_p): Conditional RETURN is conditional jump.
+ (follow_jumps): Change argument name to AFTER_RELOAD.
+ If not after reload, do not chain across a USE or CLOBBER.
+ Recognize RETURN insns.
+ (tension_vector_labels): Likewise.
+ (redirect_jump, redirect_exp): If NLABEL is zero, turn JUMP into a
+ (possibly conditional) RETURN; use validate_change to see if such an
+ insn exists.
+ Now returns non-zero if succeeds, 0 otherwise.
+ Unconditional RETURN looks like (RETURN), not (SET (PC) (RETURN)).
+ (thread_jumps): Ignore any type of RETURN insn.
+ * Makefile.in (jump.o): Depends on insn-flags.h.
+ * loop.c (strength_reduce): Don't confuse conditional return with
+ jump to top of loop when LOOP_TOP == 0.
+ * final.c (leaf_function_p): No longer static; no longer takes an arg.
+ (final_start_function): Don't pass START to leaf_function_p.
+ * romp.md (return pattern): Convert to a named pattern.
+
+Sun Jul 29 16:05:27 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-vms.h (ASM_OUTPUT_EXTERNAL): Check TREE_READONLY.
+
+ * xm-vms.h (alloca): Use built-in alloca.
+
+Sun Jul 29 06:47:33 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c (fill_slots_from_thread): Restore inadvertantly deleted
+ lines.
+
+Fri Jul 27 19:53:18 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * Makefile.in (reorg.o): Depends on tree.h, basic-block.h, regs.h,
+ and output.h
+
+Fri Jul 27 16:30:03 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * varasm.c (assemble_variable): Handle ASM_OUTPUT_SHARED_COMMON
+ and ASM_OUTPUT_SHARED_LOCAL.
+
+ * tm-encore.h (SHARED_SECTION_ASM_OP): New macro.
+ (ASM_OUTPUT_SHARED_COMMON, ASM_OUTPUT_SHARED_LOCAL): New.
+ All this waiting for papers from pabuhr@watmsg.waterloo.edu.
+
+Fri Jul 27 16:10:02 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * make-romp (CC): Set up to allow use of hc.
+
+Fri Jul 27 15:07:00 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * combine.c (subst): Handle (ASHIFT 1 x) in (EQ (AND ... y) 0)
+ only if little-endian.
+
+Thu Jul 26 23:19:15 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expmed.c (expand_shift): Consistently call protect_from_queue
+ before doing anything else.
+ Always put operand1 of extzv into a register because it is SImode
+ and we assume that this means a register.
+
+Thu Jul 26 14:18:11 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * varasm.c (assemble_variable): Delete dead code.
+ DATA_ALIGNMENT takes tree and current alignment and gives new
+ alignment for a non-automatic variable of that type.
+ Also apply CONSTANT_ALIGNMENT to the initial value; it now takes
+ the constant and old alignment and gives the new alignment.
+ Adjust DECL_ALIGN to the resulting alignment.
+ Use floor_log2 consistently instead of duplicating its function.
+ (get_or_assign_label): Use CONSTANT_ALIGNMENT instead of DATA_ALIGNMENT
+ and pass type instead of decl.
+ * expr.c (get_pointer_alignment): Rework to: distinguish reliably
+ between expressions giving the address and those giving the item being
+ addressed; use the alignment from the type of the object being
+ pointer to; return 0 if the type is not a pointer; and other
+ miscellaneous changes.
+ (string_constant): Skip CONVERT_EXPR and NON_LVALUE_EXPR as well
+ as NOP_EXPR.
+ (expand_builtin): Allow get_pointer_alignment to fail, in which case
+ we call the actual function.
+ * stmt.c (expand_decl): Set actual alignment obtained into DECL_ALIGN
+ since it may be better aligned than required and get_pointer_alignment
+ can take advantage of this.
+ * tm-gmicro.h, tm-pyr.h, tm.romp-h: Add or replace definitions of
+ CONSTANT_ALIGNMENT to word-align string constants and
+ DATA_ALIGNMENT to word-align character arrarys for builtin memory
+ functions.
+
+ * fold-const.c (rshift_double): Reset carry after each shift of
+ one bit.
+
+ * vax.md (ashrsi3): If right shift by constant, emit as ASHIFTRT.
+ (ashrsi3_const): New pattern to match it.
+ (casel): Delete patterns no longer needed.
+ * cse.c (cse_insn): Remove unneeded part of change of July 23.
+ (fold_rtx): Convert shift with negative constant count to shift in
+ the opposite direction.
+ * combine.c (subst): Likewise.
+
+ * emit-rtl.c (init_emit_once): Initialize arg_pointer_rtx before
+ struct pointer and static chain values in case they want to use it.
+
+Thu Jul 26 12:31:02 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * final.c (final_scan_insn): Align label table to boundary appropriate
+ for items of its size.
+ (get_attr_length, shorten_branches): Allow for label table alignment.
+
+Wed Jul 25 15:06:44 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * fixincludes: Handle uses of _IO* followed by spaces.
+ Change redirections for cd when testing that directory exists.
+
+ By Tiemann:
+
+ * emit-rtl.c (next_cc0_user): Handle insns in which cc0
+ is set and used in the same insn.
+
+ * final.c (leaf_function_p): Look inside INSNs which contain
+ a delayed-call sequence.
+ (final_start_function): Test `only_leaf_regs_used' before
+ `leaf_function_p', since that is likely to be faster.
+ (final_scan_insns): Normally we don't have NOTICE_UPDATE_CC
+ take action when processing the path of an annulled branch,
+ since that path does not affect the cc's of the fall-through
+ insns at all. However, we cannot always ignore the effect of
+ the cc's when processing a delayed annulled branch: when the
+ delayed annulled branch follows a label and carries a
+ REG_CC_STATUS note, that note must be processed.
+
+ * genattr.c (main): Generate #defines for annulled branches
+ which are consistent with documentation.
+
+ * reorg.c: Finish recent rework by modifying code specific to
+ machines that have annulling branches.
+
+ * c-common.c (merge_component_comparisons): Previous logic did
+ not handle cases of (A == 1) && (B == 1), (A != 0) && (B != 0),
+ and (A != 1) || (B != 1). Fixed by expanding the logic out
+ longhand and letting the compiler do the proper cross-jumping.
+
+ * tm-vms.h (ASM_OUTPUT_EXTERNAL): Use assemble_name.
+
+ * expr.c (expand_expr): For BIND_EXPR, do the init for all vars.
+
+ * stupid.c: Include flags.h.
+ * genrecog.c (main): Make insn-recog.c include flags.h.
+
+Sun Jul 22 12:04:43 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-except.c (cplus_expand_end_except): If the user gives a
+ default handler, the exception is considered caught in that
+ handler.
+ * cplus-parse.y (except_stmts): Rest of fix went here, in DEFAULT
+ case.
+
+ * cplus-decl.c (finish_decl): Don't emit cleanups twice.
+
+ * cplus-class.c (finish_struct_bits): Don't call
+ `fixup_vbase_offsets'.
+ * cplus-tree.c (fixup_vbase_offsets): #if 0 this function.
+
+ * cplus-cvt.c (build_default_binary_type_conversion): Handle
+ arguments which are REFERENCE_TYPE.
+
+ * cplus-method.c (prepare_inline): Set DECL_CONTEXT of this
+ function's parameters.
+
+ * cplus-decl.c (grokfndecl): When adding a new virtual function
+ entry, RAISES may change a second time.
+
+Thu Jul 5 10:44:39 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-decl2.c (grokfield): Static consts need not be initialized
+ in the class definition.
+
+Mon Jul 2 06:12:49 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-init.c (resolve_offset_ref): If BASETYPE is not a base
+ type for the current class, give error and return.
+
+Sun Jul 1 00:18:47 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-decl.c (finish_function): Throw away more code if we have
+ an inline function from the interface.
+
+ * cplus-class.c (add_virtual_function): Set DECL_VINDEX from the
+ virtual function which comes from the vtable shared by
+ CURRENT_CLASS_TYPE, if possibe.
+
+ * cplus-typeck.c (build_binary_op): Call `default_conversion'
+ after doing type instantiation.
+
+ * cplus-init.c (build_new): New 2.0 interpretation: `new int (10)'
+ means allocate an int, and initialize it with 10.
+
+ * cplus-init.c (emit_base_init): Completion of fix for virtual
+ function table initialization. @@ BTW, this may now cause extra
+ virtual function table initializations. They will all be correct,
+ but they may also be redundant. GCC's optimizer doesn't know how
+ to remove even the simplest such redundancy.
+
+Sat Jun 30 13:54:30 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-class.c (finish_base_struct): Store BASETYPE in the
+ VFIELDS chain (in its TREE_TYPE).
+
+Fri Jun 29 09:26:17 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-class.c (build_vtable,prepare_fresh_vtable): Stash the
+ type that caused this vtable to be defined in DECL_CONTEXT
+ * cplus-search.c (bfs_unmark_finished_struct): Work around
+ DECL_CONTEXT conflict for vtables. @@ NOT A SOLUTION.
+
+ * cplus-lex.c: Extend meaning of `#pragma implementation'
+ to allow files to `implement' types from general headers.
+
+Tue Jul 24 22:18:23 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c: Major rework. Changes includes:
+ (mark_target_live_regs): Scan code to compute which registers are
+ live at particular insns. Uses tables created by flow, REG_DEAD
+ notes, and registers set before they are used.
+ (emit_delay_sequence): Always write SEQUENCE as INSN. Many routines
+ changed to reflect this.
+ (fill_simple_delay_slots): Loop for merge point when target of jump
+ comes back to fallthrough code. Try to get insns from there.
+ (fill_eager_delay_slots): Fallthrough and target case merged into new
+ function fill_slots_from_thread.
+
+ * tm-romp.h, romp.md, out-romp.c, xm-romp.h, make-romp: New files to
+ support the ROMP microprocessor, used in the IBM PC RT.
+
+ * recog.c (comparison_operator): New function.
+
+ * jump.c (jump_optimize): If putting constant into register, see
+ if it is already present in the register.
+
+Tue Jul 24 15:35:04 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-typeck.c (build_binary_op_nodefault): Allow compare of any
+ pointer with const void *, etc.
+
+Tue Jul 24 17:10:59 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (get_inner_reference): New function.
+ (expand_assignment): Use it to find out about our target.
+ (expand_expr, case COMPONENT_REF): Likewise.
+ (expand_expr, case COND_EXPR): If can do store-flag, convert
+ X ? A+1 : A to A + (X!=0); fold-const made the former from the latter.
+ Only create label when we know we will need it.
+ Simplify unnessarily complex call to safe_from_p.
+ (expand_expr): Make new variable UNSIGNEDP and use it instead
+ of TREE_UNSIGNED (type). Also, consistently use existing
+ variable TYPE instead of TREE_TYPE (exp) and similarly for MODE.
+
+Tue Jul 24 13:50:33 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (collect_expansion): Error if ## at beg or end.
+
+ * c-decl.c (grokdeclarator): Error for long, etc. with nonarith type.
+ Error for signed or unsigned with floating type.
+ Error for initialized parm.
+
+ * config.gcc: Make make_var_file depend on host machine, not target.
+
+Tue Jul 24 13:40:35 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * varasm.c (decode_reg_name): Make TABLE static for non-GCC compilers.
+
+ * c-typeck.c (type_for_size, type_for_mode): Delete from here.
+ (binary_op_error, shorten_compare, truthvalue_conversion): Likewise.
+ * cplus-typeck.c: Delete second copy from here.
+ * c-common: Move above functions to here.
+
+Tue Jul 24 12:20:04 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (path_include): Fix typo in var name.
+
+Mon Jul 23 17:46:57 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * config.gcc: Remove redundant assignment to tm_file for 88000.
+ Fix typo when assigning to make_var_file.
+
+ * function.c (optimize_bit_field): Fix typo in change_address call.
+
+Mon Jul 23 16:59:27 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * varasm.c (decode_reg_name): Ignore % at beginning of name.
+ Support extra names defined by ADDITIONAL_REGISTER_NAMES.
+ * tm-i386.h (ADDITIONAL_REGISTER_NAMES): Define it.
+
+ * dbxout.c (dbxout_init): Handle new macros
+ ASM_OUTPUT_MAIN_SOURCE_FILENAME and ASM_OUTPUT_MAIN_SOURCE_DIRECTORY.
+ * sdbout.c (sdbout_filename): Handle ASM_OUTPUT_MAIN_SOURCE_FILENAME.
+
+Mon Jul 23 16:50:32 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * tm-vax.h (NOTICE_UPDATE_CC): CALL clobbers CC if inside PARALLEL too.
+
+ * vax.md (call_value_pop): Fix typo in argument number.
+
+ * cse.c (cse_insn): Shift's aren't associative if in different
+ directions, even if same rtx_code.
+ Try to fold result of associating the operation in case it is now
+ trivial.
+
+ * jump.c (mark_modified_reg): New function.
+ (thread_jumps): Look at insns between target of first jump and the
+ second jump. Mark any registers that they modify and record if they
+ modify memory.
+ Don't go past a CODE_LABEL.
+ If we pass an unconditional jump, follow it.
+ Use prev_nonnote_insn instead of explicit loop.
+ (rtx_equal_for_thread_p): Consult recorded information to see if
+ memory of registers were modified prior to second jump.
+ * Makefile.in (jump.o): Now needs hard-reg-set.h.
+
+Sat Jul 21 13:58:16 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (O_RDONLY): Define it if not defined.
+
+ * c-decl.c (finish_decl): No error for nonstatic incomplete array.
+
+Sat Jul 21 08:24:04 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * alliant.md (call patterns): Function address must be memory operand.
+ * convex.md, m68k.md, mips.md, ns32k.md, tahoe.md, vax.md: Likewise.
+
+Thu Jul 19 16:06:02 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (path_include): New function.
+ (main): Call that to handle CPATH envvar.
+
+ * varasm.c (assemble_variable): Error if size exceeds 2**32-1.
+
+ * emit-rtl.c (init_emit_once): Pass write_symbols to this function
+ (init_emit): Not this one. All callers changed.
+
+Tue Jul 17 21:24:08 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * local-alloc.c (update_equiv_regs): Don't replace a register with
+ an equivalence if the insn making the equivalence has a source
+ different from the equivalent value.
+
+Tue Jul 17 16:47:42 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (emit_block_move): Allow movstr* to fail.
+
+Tue Jul 17 15:19:18 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (change_address): Don't call memory_address if reload
+ is in progress, not just after it has completed.
+
+Mon Jul 16 00:34:27 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (can_reverse_comparison_p): New function.
+ (jump_optimize): In if (x) ... else x = 0; reverse comparison
+ if second operand of IF_THEN_ELSE is PC; use new function to
+ validate the reversal.
+ (jump_back_p): Use new function to see if safe to reverse comparison.
+
+Sun Jul 15 17:03:31 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * jump.c (jump_optimize): Bug in last change; reject uncond jump
+ where conditional is expected.
+
+ * flow.c (mark_used_regs): Handle autoincrement for *p
+ followed by q = p+size (neither one dead).
+
+Sat Jul 14 22:37:45 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * combine.c (subst): Remove (zero_extend (subreg)) around lshiftrt.
+ Remove (and...) from second arg of shift.
+ Remove (and...) from around shift.
+
+Sat Jul 14 21:35:50 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * local-alloc.c (update_equiv_regs): New function.
+ (local_alloc): Call it.
+ (block_alloc): Don't handle REG_EQUIV notes here; now done in
+ update_equiv_reg.
+
+ * calls.c: Include insn-flags.h.
+ * Makefile.in (calls.o): Likewise.
+
+Sat Jul 14 13:28:28 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (duplicate_decls): Don't set DECL_FRAME_SIZE for builtins.
+
+ * vax.md (SImode bit-field patterns): Use nonmemory_operand.
+
+ * jump.c (jump_optimize):
+ For if (...) x = 1; else x = 0; x must be integer.
+
+ * gcc.c (default_compilers): Pass -P to cpp.
+
+Thu Jul 12 23:38:14 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stor-layout.c (layout_record): Handle BITFIELD_NBYTES_LIMITED.
+
+ * sparc.md (call recognizers): Don't allow address arithmetic.
+
+Thu Jul 12 21:47:45 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (change_address): If reload has completed, don't call
+ memory_address. Instead, abort if address is not valid.
+
+Thu Jul 12 20:41:32 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * calls.c (emit_call_1): Handle vax, without call and call_value.
+
+Thu Jul 12 20:39:33 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (merge_equiv_classes): New function, from record_jump_equiv.
+ (record_jump_equiv): Use new function.
+ (gen_lowpart_if_possible): New function, based on gen_lowpart.
+ (cse_insn): In some cases of (set (subreg (FOO) 0) (BAR)), note
+ that (subreg BAR) is an equivalent of FOO.
+ * integrate.c (expand_inline_function): Likewise.
+
+ * combine.c (subst): Check for constant in merge of shift into
+ ZERO_EXTRACT.
+ (gen_lowpart_for_combine): Look for SIGN_EXTEND or ZERO_EXTEND:
+
+ * emit-rtl.c (gen_lowpart, gen_highpart): If passed a hard register,
+ return a new rtx for it in the proper mode, rather than a SUBREG.
+
+Wed Jul 11 17:05:04 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_insn): If already have a REG_WAS_0 note, don't make
+ another one.
+ Rework some loops on SETs to eliminate duplicate code and clean up
+ a bit.
+
+ * rtlanal.c (refers_to_regno_p, reg_overlap_mentioned): Allow these
+ to work on pseudos as well as hard registers.
+
+ * optabs.c (emit_no_conflict_block): Use reg_overlap_mentioned
+ to see if register is mentioned in insn.
+
+Wed Jul 11 16:56:01 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * jump.c (jump_optimize): Don't optimize jumps to store-flags
+ if after register allocation. And don't do it if memref is used.
+
+Wed Jul 11 16:12:55 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c ({next,prev}_nonnote_insn, prev_label, prev_cc0_setter):
+ New functions.
+ ({next,prev}_{real,active}_insn, next_label): Rework to allow
+ argument of zero; return zero in that case.
+ (next_active_insn, prev_active_insn): If reload is not yet complete,
+ do the same thing as next_real_insn and prev_real_insn.
+ (next_cc0_user): Fix some bugs and typos.
+
+ * rtlanal.c (reg_mentioned_p): Allow searches for labels to work.
+
+Wed Jul 11 12:25:27 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (duplicate_decls): In prev fix, use TREE_PUBLIC both times.
+
+Tue Jul 10 22:54:31 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * rtl.def (trap): New code.
+
+Tue Jul 10 17:48:26 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * tree.c (integer_zerop, integer_onep, integer_all_onesp): Look inside
+ a NON_LVALUE_EXPR.
+ (real_zerop, real_onep, simple_cst_equal): Likewise.
+
+Tue Jul 10 17:05:50 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-parse.y, objc-parse.y, cplus-lex.c (yylex):
+ Terminate token_buf after integer.
+
+Mon Jul 9 15:22:22 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * c-decl.c (duplicate_decls): Correct test for extern followed by
+ static function declaration.
+
+Mon Jul 9 14:13:06 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (grokdeclarator): Move warning and error
+ about initializer with extern to the same place. Do one or the other.
+
+ * rltanal.c (reg_mentioned_p): Don't look inside a CONST_DOUBLE.
+
+Sun Jul 8 14:12:21 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * toplev.c (pedwarn, pedwarn_with_file_and_line, pedwarn_with_decl):
+ New functions.
+ (flag_pedantic_errors): New variable controls them.
+ * c-decl.c, c-parse.y, c-typeck.c: Use new functions for many warnings.
+ * varasm.c: Likewise.
+ * gcc.c (default_compilers): Pass -pedantic* to cc1, cpp, etc.
+ * cccp.c (pedwarn): New function. Many calls to `warning' changed.
+
+ * c-common.c (c_expand_expr_stmt): New function.
+ Error about incomplete type moved here.
+ * expr.c (expand_expr): Error deleted from here.
+ * c-parse.y: Use c_expand_expr_stmt where suitable.
+
+ * flow.c (propagate_block): Set following_insn_dead on insn after test.
+ (mark_used_regs): Test that var; don't call insn_dead_p here.
+
+Fri Jul 6 13:05:01 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-typeck.c (build_indirect_ref):
+ No error if result is incomplete array.
+
+ * expmed.c (store_bit_field, extract_bit_field): New arg TOTAL_SIZE.
+ Don't extract a bigger unit from memory than this.
+ * expr.c: Callers changed.
+ (store_field): New arg TOTAL_SIZE; callers changed.
+
+ * out-ns32k.c (print_operand_address): Changes from Ian Dall.
+ * xm-ns32k.h: Use built in alloca.
+ * ns32k.md (ashlsi3): Don't forget to return a value.
+ (movsf): Output floating constants only if GAS_SYNTAX.
+ (call, call_value): Support JSR_ALWAYS.
+ Change handling of bsr if GAS_SYNTAX.
+ (bit test patterns): Use g constraint for op1 and rm for op0.
+
+Thu Jul 5 21:53:10 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-typeck.c (build_c_cast): Don't do implicit arithmetic conversions.
+ * fold-const.c (fold): Don't combine two conversions if one is
+ signed and the other is unsigned.
+ * integrate.c (copy_parm_decls): Finish making last change.
+
+Thu Jul 5 18:26:03 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (safe_from_p): If EXP is readonly memory, any memory location
+ is safe from it.
+
+Thu Jul 5 15:05:19 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gnulib2.c (__fixunsdfsi): Change > to >=.
+
+ * c-decl.c (start_struct, start_enum): Set C_TYPE_BEING_DEFINED.
+ (grokdeclarator): Don't warn of array if elt type being defined.
+
+ * c-typeck.c (build_conditional_expr): Handle ((void *) 0).
+ Allow 0 versus function pointer.
+
+Thu Jul 5 08:05:09 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_insn): If machine has post-increment, don't associate
+ PLUS operations if they are both adding the same constant that is
+ a power of two. Similarly for post-decrement.
+
+Wed Jul 4 19:04:20 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * flow.c (mark_used_regs): Don't scan a comparison if the following
+ insn that uses the cc's is dead.
+
+ * flow.c (propagate_block): If cc-using insn is dead, so is previous.
+
+ * expmed.c (emit_store_flag): New function.
+
+Wed Jul 4 18:45:04 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * c-typeck.c (common_type, comptypes, default_conversion):
+ Use TYPE_READONLY in type to indicate const type; use TREE_READONLY
+ in decl to indicate object will never change.
+ (build_unary_op, readonly_warning, build_modify_expr): Likewise.
+ (c_expand_asm_operands): Likewise.
+ * cplus-class.c (finish_struct_bits): Likewise.
+ * cplus-cvt.c (build_type_conversion): Likewise.
+ * cplus-type2.c (readonly_warning_or_error): Likewise.
+ * cplus-typeck.c (default_conversion, build_unary_op): Likewise
+ (build_modify_expr, c_expand_asm_operands): Likewise.
+
+ * cplus-cvt.c (popclass): When making INDIRECT_REF, don't set
+ TREE_READONLY from TYPE_READONLY.
+
+Wed Jul 4 15:16:37 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * jump.c (jump_optimize): Fix bugs in last change.
+
+Wed Jul 4 07:52:53 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case COMPONENT_REF): Delete extraneous test
+ for structure-value stack slot, which no longer exists.
+
+ * reload1.c (bad_spill_regs): Should be static.
+
+ * combine.c (subst, gen_lowpart_for_combine): Propagate
+ RTX_UNCHANGING_P when making a new MEM.
+ * c-typeck.c, cplus-typeck.c (build_indirect_ref): ANSI says that
+ de-reference of pointer-to-const is not readonly so don't set
+ RTX_UNCHANGING_P.
+ * explow.c (validize_mem): Use change_address so flags get copied
+ to new MEM.
+ * expr.c (convert_move, block_block_{to,from}_reg, emit_move_insn):
+ Likewise.
+ (do_tablejump): Set RTX_UNCHANGING_P in MEM accessing address table.
+ * function.c (optimize_bit_field, instantiate_virtual_regs_1):
+ Preserve flags when making new MEM.
+ * loop.c (invariant_p): Memory references to an invariant address
+ are invariant if RTX_UNCHANGING_P is set.
+ * recog.c (adj_offsettable_operand): Propagate RTX_UNCHANGING_P
+ when making new MEM.
+ * reload.c (find_reloads_toplev): Likewise.
+ * reload1.c (alter_reg): Stack slot is readonly if pseudo was.
+ (eliminate_regs): Propagate RTX_UNCHANING_P in new MEM.
+ * varasm.c (force_const_double_mem): Set RTX_UNCHANGING_P in new MEM.
+
+Tue Jul 3 21:50:58 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expmed.c (expand_and): New function.
+
+ * stmt.c (expand_expr_stmt):
+ If value is volatile, fetch it and then ignore it.
+
+ * expr.c (expand_expr): Error if variable type is incomplete.
+
+ * c-decl.c (grokdeclarator): Don't warn of incomplete array in typedef.
+
+Tue Jul 3 18:03:24 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (fold): Convert "(1 << foo) & bar" to "(bar >> foo) & 1"
+ In "(a & 1) != 0", can convert to simply "a & 1".
+ * combine.c (subst): Convert branch on sign bit to signed comparison
+ with zero (possibly adding a SUBREG).
+ Convert ZERO_EXTRACT of the low-order bit of a right shift into a
+ ZERO_EXTRACT of the proper bit.
+
+Mon Jul 2 12:07:08 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * jump.c (jump_optimize): Convert conditionals for storing one
+ value into a store-flags insn.
+
+ * vax.md (call_pop, call_value_pop): New names for call patterns.
+ Include the popping explicitly in the rtl.
+
+ * jump.c (jump_optimize): Delete case for condjump followed
+ by unconditional to same label; was special case of another case.
+ Switch back to next_active_insn or prev_active_insn in a few cases.
+
+ * function.c (init_function_start): Initialize
+ frame_pointer_needed to zero.
+
+ * i386.md (tstsf): Clobber reg 0 in SImode.
+
+Sun Jul 1 14:31:14 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * jump.c: Use next_real_insn instead of next_active_insn.
+ Likewise for prev_active_insn. USE insns make a difference!
+
+ * function.c (assign_stack_temp): Use largest alignment if BLKmode.
+
+ * stddef.h: Check __SIZE_T also.
+
+ * toplev.c: Include types.h first.
+
+ * i386.md (trunc*2): Don't allow moving symbolic constant to memory.
+ Use wider move only for symbolic constant.
+
+ * tm-convex.h (LINK_SPEC): Posix link flags.
+ * tm-convex.h (STARTFILE_SPEC): Posix start files.
+ * tm-convex[12].h (CPP_SPEC): Posix defines.
+ * tm-convex[12].h (LIB_SPEC): Posix libraries.
+ * tm-conv[12]os7.h: New files.
+ * config.gcc: use tm-conv*os7 if /usr/include/stdlib.h isn't there.
+
+ * xm-convex.h (S_IFMT, S_IFREG): make visible if hidden for posix.
+ * xm-convex.h (_PROTO): define to keep 8.0 includes from screwing up.
+
+ * tm-convex.h (ASM_OUTPUT_{FLOAT,DOUBLE}, PRINT_OPERAND):
+ use %e instead of %#g, which is broken or non-posix.
+
+ * tm-convex.h (current_section_is_text): make extern.
+ * out-convex.c (current_section_is_text): define here.
+ * tm-convex.h (OVERRIDE_OPTIONS), out-convex.c (override_options):
+ useless; remove.
+ * tm-convex.h (CPP_PREDEFINES): remove parsec, long gone from
+ system includes.
+
+Sat Jun 30 14:01:52 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (pending_xref_error): Fix typo in arg order.
+
+ * cccp.c (do_include): Mention non-ex system headers for -M.
+ Guess the directory.
+ (check_macro_name): Should not be static.
+
+ * rtl.def (inline_header): Add a vector at the end.
+ * rtl.h (ORIGINAL_ARG_VECTOR): New macro.
+ (RTVEC_ELT): New macro.
+ * emit-rtl.c (gen_inline_header_rtx): New argument for that vector.
+ * integrate.c (save_for_inline): Copy arg rtls if nec, then make
+ an arg vector to put in the header.
+ (expand_inline_function): Look in that vector for the rtl.
+ (copy_parm_decls): Likewise.
+
+ * c-decl.c (duplicate_decls): Warn if function declared external
+ and later static.
+
+Fri Jun 29 13:29:24 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cccp.c (handle_directive): Supply missing *.
+
+Thu Jun 28 21:39:43 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * m68k.md (muldf3 for 68881): Generate fscale if appropriate.
+ * out-m68k.c (floating_exact_log2): New function.
+
+Wed Jun 27 17:19:36 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (finish_struct): New handling of zero-width bit fields.
+ Store appropriate data in them like other bit fields.
+ Don't delete them until after layout.
+ Don't mess with alignment of following field; set its own.
+ If PCC_BITFIELD_TYPE_MATTERS, get alignment from type.
+ * stor-layout.c (layout_record): For zero-width field, if
+ PCC_BITFIELD_TYPE_MATTERS, alignment does not affect that of structure.
+ (layout_decl): Don't abort for zero-width if no name.
+
+ * function.c (expand_function_start):
+ Output ...FUNCTION_BEG note here, after assign_parms.
+ (init_function_start): Not here.
+
+ * sdbout.c (sdbout_record_type_name): Conditionalize for
+ SDB_ALLOW_FORWARD_REFERENCES. Don't use typedef names, just tags.
+ (sdbout_begin_block): Likewise.
+ (plain_type_1): Likewise. Also move code to output structure size.
+ (sdbout_symbol): Output the type if not yet output.
+ Don't output top-level initialized variables yet.
+ Avoid crash if variable never got any rtl.
+ Add conditional for SDB_AUTO_NORMALIZE_OFFSET.
+ (sdbout_toplevel_data, sdbout_queue_anonymous_type):
+ (sdbout_dequeue_anonymous_type): New functions.
+ (sdbout_tags): Reverse the list first.
+ Output enums before other things.
+ (sdbout_reg_parm): Fake a name if necessary. Use C_REGPARM.
+ * toplev.c (compile_file): Call sdbout_toplevel_data.
+
+ * c-typeck.c (convert_for_assignment): Disable warnings for pointers
+ to const and volatile functions.
+
+ * expr.c (expand_expr): Mark variable as used.
+
+Tue Jun 26 17:05:00 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-sparc.h (LINK_SPEC): Delete spurious `-'.
+
+ * tm-sun3.h (ASM_OUTPUT_FLOAT_OPERAND): Handle minus zero.
+ (ASM_OUTPUT_DOUBLE_OPERAND): Likewise.
+
+ * stor-layout.c (layout_type): Check TYPE_NO_FORCE_BLK in union fields.
+
+Tue Jun 26 01:48:57 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * tree.c (dump_tree_statistics): Dummy function. To be filled in
+ later when we decide what tree statistics should be measured.
+ (build): Now ok to take arguments of length 1. `build1' cannot be
+ used to allocate 's' tree nodes whcih might have length 1.
+
+ * All GNU C++ files updated to 1.37.2 (alpha 2). NOTE: cplus-decl.c
+ needs to be fixed to not us RTL. I'm leaving this file in its
+ current state so that the GNU C++ compiler at least compiles.
+
+ * All SPARC files: modified to use registers %f30 and %f31 as
+ temporaries for holding floating-point zero. Used to use %f0 and
+ %f1, which made it impossible to compare function return values with
+ zero.
+
+Mon Jun 25 16:54:13 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * function.c (init_function_start): New args give file/line for first note.
+ * c-decl.c (store_parm_decls): Pass them.
+ * integrate.c (output_inline_function): Pass dummies for them.
+ * final.c (final_start_function): For sdb, don't output a line number,
+ just set last_linenum.
+
+ * c-parse.y (hash, is_reserved_word): New keyword __label__.
+
+ * stddef.h: Check _T_SIZE as well as _SIZE_T.
+
+Sun Jun 24 16:09:17 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (expand_expr): Do preserve_temp_slots for TARGET_EXPR.
+
+Sat Jun 23 09:52:40 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * genpeep.c (gen_peephole): Ignore USE and CLOBBER insn as well as
+ NOTE when matching peephole.
+
+Fri Jun 22 17:40:56 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-typeck.c (process_init_constructor): Set up TREE_PURPOSE
+ in record constructor elements.
+
+ * cexp.y (exp1): If pedantic, warn about commas.
+ (tokentab2): Add entries for ++ and --.
+ (yylex): Error if those are used.
+
+ * c-decl.c (lookup_tag): For wrong kind of type, just set flag.
+ (shadow_tag): Clear the flag.
+ (pending_xref_error): Print the error message here if flag set.
+ * c-parse.y (setspecs): Call that.
+
+ * calls.c (emit_call_1): Use call_pop and call_value_pop insns
+ to record when the called function pops its args.
+
+Fri Jun 22 16:43:12 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * local-alloc.c (wipe_dead_reg): Remove REG_DEAD note for unset reg.
+
+ * tm-sparc.h: Replace FIX_FRAME_POINTER_ADDRESS with
+ INITIAL_FRAME_POINTER_OFFSET.
+
+ * tm-vax.h (RTX_COSTS): Show shifts are relatively expensive.
+
+Fri Jun 22 15:05:24 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * Makefile.in (GEN): New variable.
+ (P): New variable.
+ (cc1, cc1plus, cc1obj): Use $(P).
+
+ * cccp.c (check_macro_name): New subroutine taken from do_define.
+ (do_define, do_undef): Use this.
+ (do_undef): Warn if junk follows name.
+ (handle_directive): Always ignore empty directive.
+ Warn if \f or \v in directive. Error for malformed directive name.
+
+ * tree.h (BUILT_IN_NEXT_ARG): Define it.
+ * c-decl.c (init_decl_processing): Declare __builtin_next_arg.
+ * expr.h (current_function_arg_offset_rtx): Declare it.
+ * function.c (assign_parms): Set that variable at end.
+ * expr.c (expand_builtin): Implement __builtin_next_arg.
+ * stdarg.h (va_start): Use __builtin_next_arg.
+
+ * c-decl.c (grokdeclarator): Check for TRADITIONAL_RETURN_FLOAT.
+
+Fri Jun 22 07:07:53 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * final.c (final_scan_insn): Put label for jump table in same section
+ (read-only data) as jump table.
+
+ * loop.c: Allow tm.h to define ..._BENEFIT and COPY_PENALTY.
+
+Wed Jun 20 13:03:53 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-apollo68.h (FUNCTION_ARG_PADDING): Never pad.
+ (STACK_BOUNDARY): Make it 32.
+ (CPP_SPEC): Add spaces. Define _APOLLO_SOURCE if not -ansi.
+
+ * c-common.c (check_case_value): New function.
+ * c-parse.y (stmt, when parsing case): Use that.
+ Add new rule for case range.
+
+ * reload1.c (reload_inheritance_insn): New variable.
+ (reg_reloaded_insn): New variable.
+ (choose_reload_regs): Update those variables.
+ (emit_reload_insns): Use them to remove deaths from insns
+ that used input reloads.
+ (reload_as_needed): Clear reg_reloaded_insn when necessary.
+
+ * m68k.md (ashlsi3, lshlsi3): Use add to self to shift one bit.
+
+ * dbxout.c (STAB_CODE_TYPE): New macro defined as type for stab codes.
+ Use in place of enum __stab_debug_code.
+
+Tue Jun 19 22:56:40 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (expand_increment): For preincrement, don't load value twice:
+ use TEMP as input to addition.
+
+Tue Jun 19 06:53:13 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * explow.c (adjust_stack, anti_adjust_stack): Use expand_binop instead
+ of gen_{add,sub}2_insn since the latter will abort if the constant is
+ out of range for the machine.
+
+Tue Jun 19 00:35:16 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * local-alloc.c (post_mark_life): Don't decrement DEATH
+ if it equals BIRTH. Don't ever increment DEATH.
+
+ * varasm.c (output_constructor): Discard non_lvalue_expr, not nop_expr.
+ Handle missing values. Use field in the tree_list, if any.
+ (output_addressed_constants): Don't die if value is missing.
+ * c-typeck.c (process_init_constructor): Handle index and field specs.
+ * c-parse.y (initlist): Parse them.
+
+Mon Jun 18 15:58:48 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c, cplus-decl.c (duplicate_decls):
+ Types don't "match" if one is error.
+
+ * c-parse.y (label_decl): Use new keyword __label__, not colon.
+
+ * c-parse.gperf (__label__): New keyword.
+
+ * mips.md (probe): Make a single insn, just a memref.
+
+Mon Jun 18 14:27:55 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * loop.c (loop_optimize): Set max_luid to last luid + 1, as documented.
+
+ * local-alloc.c (qty_clobber): New variable.
+ (local_alloc): Allocate and initialize it.
+ (reg_is_set): Set qty_clobber for a clobber of a pseudo used only
+ in this insn.
+ (find_free_reg): Pass qty_clobber to post_mark_life.
+ (post_mark_life): If CLOBBER if non-zero, register isn't live after
+ its death insn.
+
+ * integrate.c (expand_inline_function): Don't call try_constants on
+ an insn that sets CC0 until we have processed the next insn. Then
+ call it on both. This is because the recognizer for these insns
+ may want to look at the user of CC0.
+
+Mon Jun 18 13:25:59 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * mips.md (ashlqi3, ashlhi3, one_cmplqi2, one_cmplhi2): Deleted.
+ (ashlsi3, ashrsi3, lshrsi3, neg*, one_cmplsi2): Simplified.
+ Don't output comments. Use more specific predicates.
+
+ * mips.md (movsf, movdf): Use L, M codes to avoid #ifdef's.
+ Also simplify and don't output comments.
+ (anonymous patterns for those insns): Deleted.
+ (loading floating constant): New patterns added.
+ (move qi to si pattern): Deleted; ridiculous.
+ (movdi, movsi, movhi, movqi): No need to check for moving reg to self.
+
+ * mips.md (nop): Use .set noreorder to placate assembler.
+
+Sun Jun 17 20:01:38 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * gcc.c (set_spec): Don't use `name' for both old spec and name of
+ spec. Use new var old_spec for the former use.
+ Don't use (char *) 0 for null spec; use a null string instead.
+
+ * jump.c (jump_optimize): Don't special-case deleting an ADDR_DIFF_VEC.
+ Merge code to detect trivial ADDR_VEC and ADDR_DIFF_VEC.
+ (mark_jump_label): Don't count the use of a vector table label in
+ ADDR_DIFF_VEC.
+ (delete_insn): Can now handle ADDR_DIFF_VEC.
+ (delete_labelref_insn): New function.
+ (redirect_tablejump): Call new function to delete insn that references
+ the jump table.
+
+Sun Jun 17 01:19:26 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * genemit.c (gen_expand): Don't generate `operands' if size is 0.
+
+ * tm-i860.h (GO_IF_LEGITIMATE_ADDRESS): Displacement must be multiple
+ of the alignment of the operand.
+
+ * i860.md (signed bit field recognizers): Don't shift by >31 bits.
+
+ * out-i860.c (output_delayed_branch): Pass register properly to
+ load_opcode.
+
+ * mips.md (general/fp reg move patterns): Use codes L, M, D.
+ (movdi): Likewise. And don't output useless comments.
+ Use the assembler temp reg for non-offsettable address.
+ (movsi, movhi, movqi): Output nothing for move from reg to itself.
+ Output li to load a constant. Use `move' instead of `add'.
+ Don't output useless comments.
+ (load-address pattern): Deleted; handled by addsi3 pattern.
+
+ * mips.md (addsi3, mulsi3): Make both input predicates arith_operand
+ since they are commutative.
+ (andsi3, iorsi3, xorsi3): Likewise.
+
+ * tm-mips.h (MOST_SIGNIFICANT_WORD, LEAST_SIGNIFICANT_WORD): New.
+
+ * tm-mips.h (PRINT_OPERAND): New codes D, L, M.
+ * mips.md (anddi3, iordi3, xordi3): Use earlyclobber to stop overlap.
+ Use new print code D.
+
+ * mips.md (andsi3, iorsi3, xorsi3): Make predicates more specific.
+ (andhi3, ..., andqi3, ...): Patterns deleted.
+ (patterns for nor): New anonymous patterns.
+ * out-mips.c (uns_arith_operand): New function.
+
+ * mips.md (trunc*, zero_extend*, extend*, fix_trunc*, float*):
+ Use more specific predicates.
+
+ * mips.md (addhi3, ..., addqi3, ...): Patterns deleted.
+ (addsi3, subsi3, mulsi3, divsi3): Make predicates more specific.
+ Delete useless comments from assembler code.
+ Use more generic op codes rather than special cases such as addiu.
+ (divmodsi4, udivmodsi4, udivsi3, modsi3, umodsi3): New patterns.
+ (abssf2, absdf2): New patterns.
+
+Sun Jun 17 06:56:10 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (COST, rtx_cost, make_regs_eqv): Indicate that hard registers
+ in fixed_regs are even cheaper than pseudos.
+
+ * function.c (instantiate_virtual_regs_1): If valid, replace PLUS
+ whose second operand would be zero with its first operand.
+
+Sun Jun 17 00:17:03 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * sdbout.c (sdbout_symbol): Get right regno for var-length object.
+
+ * combine.c (simplify_set_cc0_and): Strip SUBREGs, but only if
+ they truncate. Handle ASHIFTRT like LSHIFTRT.
+ (try_combine): Call simplify_set_cc0_and in all those cases.
+ (subst): Handle (zero_extract (subreg (lshift (reg )))).
+
+Sat Jun 16 23:11:52 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tree.c (get_narrower, get_unwidened): Bit field test was backwards.
+
+Sat Jun 16 19:07:16 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (fold): Fix typo in test for distributing binary
+ operator over conditional and compound expressions.
+
+ * genoutput.c: Remove vestiges of obsolete and never used
+ INSN_MACHINE_INFO.
+
+ * rtl.def (MATCH_PARALLEL): Add new RTL code.
+ * genconfig.c (walk_insn_part): Support MATCH_PARALLEL.
+ * genemit.c (max_operand_1): Likewise.
+ (gen_exp): Just write operand for MATCH_PARALLEL.
+ (gen_expand, gen_split): Support MATCH_PARALLEL.
+ * genrecog.c (walk_rtx): Add support for MATCH_PARALLEL.
+ * genoutput.c (scan_operands): Suppport MATCH_PARALLEL
+ like MATCH_OPERATOR.
+ * genpeep.c (match_rtx): Add code to support MATCH_PARALLEL.
+ Don't write unnecessary cast to `rtx'.
+ * genrecog.c (add_to_sequence): Simplify handling of mode.
+ Support MATCH_PARALLEL.
+
+ * expr.c (move_block_{to,from}_reg): Support load/store multiple.
+ * function.c (instantiate_virtual_regs_1): If can't substitute
+ new pseudo for virtual register, try doing the substitution
+ globally throughout the entire insn. This lets load/store multiple
+ insns refer to virtual registers in their addresses.
+
+ * genrecog.c (write_split_tree, write_split_subroutine): Deleted.
+ (break_out_subroutines, write_subroutine, write_tree): Accept
+ parameters that indicate whether we are making gen_split or gen_recog.
+ (main): Pass new parameters to break_out_subroutines and write_tree.
+
+ * final.c (final_scan_insn): Process insns that set CC whenever a
+ REG_CC_STATUS note is found; not only JUMP_INSNs can use CC.
+ When scanning REG_CC_STATUS insns, set cc_prev_status from cc_status
+ each time.
+
+ * recog.c (validate_replace_rtx): New function that tries to
+ replace all occurrences of an object within an insn and see if the
+ resulting insn is valid.
+
+Thu Jun 14 06:58:26 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * optabs.c (emit_no_conflict_block): Write REG_NO_CONFLICT notes all
+ all insns in the block that modify the output. Write them on the
+ final insn even if we don't put a REG_EQUAL note there.
+
+ * stmt.c (expand_return): Only distribute return down a conditional
+ expression if tail recursion is possible in a branch.
+
+ * expr.c (expand_expr): Remove obsolete reference to when we had
+ a shared structure-value slot.
+
+ * jump.c (get_label_before, get_label_after, follow_jumps): No longer
+ static.
+ * rtl.h: Define them.
+
+Mon Jun 11 17:35:40 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * loop.c (INSN_LUID): Check for INSN_UID above the area that we
+ know about.
+ (loop_optimize): Cannot use INSN_LUID as lhs.
+ (scan_loop): If first jump is to label made by loop, we can't
+ tell if it is in range or not, so reject loop.
+ Reject loop if SCAN_START was an insn previously made by loop since
+ we won't know its luid.
+ Only call loop_reg_used_before if argument has known luid.
+ Mark partial invariant as global if its insn was made by loop.
+ (ignore_some_movables): Don't assume all invariants have luids.
+ (strength_reduce): Use no_labels_between_p instead of
+ labels_in_range_p.
+ Don't look at luid of insns for which one doesn't exist.
+ (valid_initial_value_p): Reject initializations in insns whose
+ luid we don't know.
+
+ * loop.c (product_cheap_p): Put all our rtl into a separate obstack
+ and free memory from it. If we use current_obstack, we may free
+ memory allocated by gen_reg_rtx, which must be preserved.
+
+ * c-common.c (rewrite_for_merged_ref): A non-zero one-bit signed field
+ is -1, not 1.
+ * c-typeck.c, cplus-typeck.c (build_binary_op_nodefault): If can't
+ merge comparisons, don't use result of rewrite_for_merged_ref;
+ comparisons with zero are more efficient.
+
+ * protoize.c (main): Don't declare as extern.
+
+ * c-aux-info.c (gen_aux_info_record): Don't declare extern.
+
+ * genemit (gen_split): Rework to fix numerous bugs and typos.
+
+ * function.c (assign_parms): Avoid generating (PLUS foo (const_int 0)).
+
+Wed Jun 6 20:03:31 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * gencodes.c (main): Count a code number for DEFINE_SPLIT.
+
+ * rtlanal.c (note_store): Pass SUBREG of a hard register to function.
+ (reg_overlap_mentioned_p): Handle receiving SUBREG of hard register.
+ * integrate.c (mark_stores): Likewise.
+ * local-alloc.c (reg_is_set, reg_is_born): Likewise.
+ * reload1.c (mark_not_eliminable): Likewise.
+
+ * loop.c (move_movables): Don't blow up if moving last real insn
+ in function.
+
+Wed Jun 6 19:44:04 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gcc.c (default_compilers): Pass -traditional before -f*.
+ Delete -gg option.
+
+Sun Jun 3 22:44:12 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (grokdeclarator): Warn about extern with initializer.
+
+Sun Jun 3 22:32:19 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * genrecog.c (main): Don't call write_tree with null if no insns
+ were in file.
+
+Sat Jun 2 21:49:24 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, cases ABS_EXPR, MAX_EXPR, MIN_EXPR): Use target
+ unless zero or safe_from_p rejects it.
+ (expand_expr, conditional cases): Likewise.
+
+Sat Jun 2 14:46:18 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (grokdeclarator): Handle const and volatile with parm
+ specified as function type.
+
+Fri Jun 1 16:13:39 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rtl.def (DEFINE_FUNCTION_UNIT): Change specifications so
+ it now is one per operation type, rather than one per
+ function unit.
+ * genattr.c (write_units): Write out new function names and
+ function unit table structure.
+ * genattrtab.c (struct function_unit_op): New structure.
+ (struct function_unit): Updated for new definition of
+ DEFINE_FUNCTION_UNIT.
+ (SIMPLIFY_TEST_EXP): New macro to reduce number of function calls
+ to simplify_test_exp. Replace all call to the function with
+ uses of the macro.
+ (check_attr_test, make_alternative_compare): Show that EQ_ATTR with
+ attribute of "alternative", MATCH_OPERAND, and comparison cases can't
+ be simplified.
+ (expand_units, gen_unit, write_function_unit_info): Support new
+ meaning of DEFINE_FUNCTION_UNIT.
+ (simplify_test_expr): Rework AND and IOR cases to reduce rescans.
+ Once an expression has been simplified, set RTX_UNCHANGING_P so
+ we won't try simplifying it again. Don't do this if INSN_CODE == -2.
+ (write_attr_set): Don't make a recursive call if we know that
+ the test we are writing will always be false. Also clean up a bit.
+ (main): true_rtx and false_rtx don't need to be simplified.
+ Write gen_attr_... routines before special routines.
+
+Fri Jun 1 14:17:48 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-sparc.h (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE):
+ Round frame size to multiple of STACK_BOUNDARY.
+
+Fri Jun 1 09:38:51 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * optabs.c (emit_no_conflict_block): Place REG_NO_CONFLICT notes on
+ insn that contains REG_EQUAL note instead of insn doing computation.
+
+ * cplus-decl2.c, cplus-lex.c: Rename gettime to get_run_time.
+ Likewise for my_gettime to my_get_run_time.
+
+ * Makefile.in (varasm.o, calls.o, explow.o, integrate.o, loop.o):
+ These do not depend on insn-codes.h.
+ * function.c: Explicitly include insn-codes.h to make it clear that it
+ is needed for the values of the CODE_FOR_... macros.
+
+Thu May 31 12:59:28 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gnulib2.c (__trampoline): New function.
+ * Makefile.in (LIB2FUNCS): Compile it.
+ * tm-m68k.h (TRAMPOLINE_ALIGN): Define it.
+ * function.c (trampoline_address): Handle extra alignment.
+ * tm-m68k.h (TRAMPOLINE_TEMPLATE, INITIALIZE_TRAMPOLINE):
+ Redefine to transfer via __trampoline.
+ (TRANSFER_FROM_TRAMPOLINE): Define it, for gnulib2.c.
+
+ * fold-const.c (fold): Preserve sign on constant when other terms
+ cancel (after call to split_tree).
+
+Thu May 31 12:39:51 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (preexpand_calls): Ignore BLOCK to avoid infinite recursion.
+
+ * function.c (assign_parms): Fix typo getting mode of result.
+
+ * cse.c (cse_basic_block): Don't go past TO if it is target of
+ followed jump.
+
+Wed May 30 21:31:16 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-parse.y (fndef, nested_function, notype_nested_function):
+ Use YYERROR1 instead of YYERROR.
+ (YYERROR1): New macro.
+ * cplus-parse.y, objc-parse.y: Likewise.
+
+Tue May 29 21:53:19 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * optabs.c (expand_float): Don't use hard reg as intermediate.
+
+ * c-parse.y, objc-parse.y (yylex): Fix typo checking for ERANGE.
+ * cplus-lex.c (yylex): Copy current code for ERANGE from c-parse.y.
+
+ * toplev.c (get_run_time): Renamed from gettime.
+
+Mon May 28 15:47:48 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (emit_push_insn): Don't push by pieces if alignment
+ forces use of small pushes that do problematical padding.
+
+ * tm-sparc.h (SELECT_SECTION): Use TREE_SIDE_EFFECTS.
+ (STACK_POINTER_OFFSET): Now 68; does not include REG_PARM_STACK_SPACE.
+ (REG_PARM_STACK_SPACE): Now takes arg and has value.
+ (ACCUMULATE_OUTGOING_ARGS): Define this.
+ (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE, EXIT_IGNORE_STACK): Use
+ current_function_outgoing_args_size, not ..._pretend_...
+ (INITIALIZE_TRAMPOLINE): Use size_int.
+
+ * varasm.c (make_decl_rtl, make_function_rtl): Run ENCODE_SEGMENT_INFO
+ if it is defined.
+
+ * tree.def (BIND_EXPR): Add operand, which holds the BLOCK.
+ * expr.c (expand_expr): When BIND_EXPR is seen, flag the BLOCK.
+ * dbxout.c (dbxout_block): Test the flag in the BLOCK.
+ * sdbout.c (sdbout_block): Likewise.
+ * symout.c (symout_function): Likewise.
+ * c-parse.y (stmt expr rule): Corresponding change.
+
+Sun May 27 20:53:16 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * caller-save.c (save_call_clobbered_regs): Correctly mark registers
+ live for multi-word pseudos.
+
+Sat May 26 13:42:04 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * sdbout.c (sdb_begin_function_line): Now -1 if not in use.
+ (sdbout_end_function): Set it to -1.
+
+ * tree.def: Rename EXIT_STMT to EXIT_EXPR and likewise for LOOP_STMT.
+ Also LET_STMT to BIND_EXPR, and GOTO_STMT, LABEL_STMT, RETURN_STMT
+ to ..._EXPR.
+ (struct tree_stmt, struct tree_if_stmt, struct tree_bind_stmt):
+ (struct tree_case_stmt): Types deleted.
+
+ * tree.c (make_node, copy_node): Treat 's' like 'e' for size of node.
+ In make_node, make BLOCK and BIND_EXPR savable.
+ * expr.c (expand_expr): Rename, and use TREE_OPERAND to get body.
+ * cplus-init.c (build_vec_delete): Likewise, and build appropriately.
+ * print-tree.c (print_node): No special handling for these and IF_STMT.
+ * stmt.c (warn_if_unused_value): Likewise.
+
+ * tree.def (BLOCK): New tree code for binding blocks.
+ * tree.h (BLOCK_VARS, BLOCK_TYPE_TAGS):
+ (BLOCK_SUBBLOCKS, BLOCK_SUPERCONTEXT): Renamed from STMT_...
+ (STMT_...): Except for those, all deleted.
+ (BLOCK_CONTROLLER): Points to corresponding BIND_EXPR, if any.
+ (BLOCK_CHAIN): New macro.
+ * tree.c (build_block): Renamed from build_let.
+ (decl_type_context, decl_function_context): Corresponding change.
+ * print-tree.c (print_node): Likewise.
+ * c-decl.c, cplus-decl.c (poplevel): Likewise.
+ * integrate.c (copy_decl_tree): Likewise.
+ * function.c (setjmp_protect, uninitialized_vars_warning):
+ (instantiate_decls_1): Likewise.
+ * c-parse.y, cplus-parse.y, objc-parse.y (stmt expr rule): Likewise.
+ * dbxout.c (dbxout_block): Expect only BLOCKs in this tree.
+ Ignore those with controllers that are not marked used.
+ * sdbout.c (sdbout_block): Likewise.
+ * symout.c (symout_function): Likewise.
+
+ * tree.def: Delete IF_STMT, COMPOUND_STMT, WITH_STMT.
+ * expr.c (expand_expr): Delete handling of IF_STMT.
+ * tree.c (build_if, build_loop, build_case, build_goto): Deleted.
+ (build_expr_stmt, build_asm_stmt, build_return, build_exit): Likewise.
+ (build_compound): Likewise.
+ * cplus-init.c (build_vec_delete): Use COND_EXPR instead of IF_STMT.
+
+Sat May 26 13:23:12 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * calls.c (struct arg_data): Add new fields slot_offset and stack_slot.
+ (expand_call): Compute both location of start of stack slot and the
+ place in the stack slot where the first byte of the argument will be
+ placed.
+ Use stack_slot when loading a BLKmode object into registers.
+ When loading into registers, don't check reg_parm_seen, just look
+ at args[i].reg.
+ (expand_call, store_one_arg): Save and restore stack slot starting
+ from beginning of slot, not begining location where arg is stored.
+ (store_one_arg): After calling emit_push_insn, argument is really
+ at arg->stack_slot instead of arg->stack because if we want to
+ load it into registers, we include any padding.
+
+Sat May 26 01:37:27 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tree.h (struct tree_type): Rename sep=>minval, sep_unit=>precision.
+
+ * tree.c (init_obstacks, init_tree_codes): init_tree split in two.
+ * toplev.c (compike_file): Call them.
+
+Fri May 25 16:40:45 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stor-layout.c (layout_record): Nuke excess set of DECL_FIELD_BITPOS.
+ * varasm.c (output_constructor): Bitpos is zero for array (field == 0).
+
+Fri May 25 00:48:45 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * final.c (final_scan_insn): Restore inadvertent deletion in change
+ of May 24th.
+
+Fri May 25 00:13:12 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * print-tree.c (print_node): Print some missing fields for decls.
+ (print_node_brief): Always print value of integer or real constant.
+
+Thu May 24 21:28:36 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * fold-const.c (real_zerop): Function deleted; was redundant.
+
+ * tree.h (DECL_OFFSET): Macro deleted.
+ (struct tree_decl): Field deleted.
+
+ * c-typeck.c (build_unary_op): For ADDR_EXPR of COMPONENT_REF,
+ use DECL_FIELD_BITPOS and handle non-constant values.
+ * stor-layout.c (layout_record, layout_union): Likewise.
+ * expr.c (expand_assignment, store_constructor, expand_expr): Likewise.
+ * dbxout.c (dbxout_type): Likewise.
+ * sdbout.c (sdbout_one_type): Likewise.
+ * c-common.c (merge_component_comparisons, make_merged_ref): Likewise.
+ * print-tree.c (print_node): Likewise.
+ * varasm.c (decode_addr_const, output_constructor): Likewise.
+ * objc-actions.c (build_ivar_list_initializer): Likewise.
+ * cplus-typeck.c (build_component_addr): Likewise.
+ And preserve TREE_CONSTANT flag.
+ (unary_complex_lvalue): Likewise.
+
+ * tree.h (DECL_FUNCTION_CODE): Use the frame_size field, not `offset'.
+ Now meaningful only if function is built in.
+ (DECL_BUILT_IN): New flag macro.
+ * c-decl.c (builtin_function): Set the flag.
+ (pushdecl, duplicate_decls): Use and set it.
+ * c-typeck.c, cplus-typeck.c (build_function_call): Test it.
+ * cplus-decl.c (define_function): Set the flag.
+ (pushdecl, duplicate_decls): Use and set it.
+ * expr.c (expand_expr, preexpand_calls): Test it.
+
+ * tree.h (DECL_INCOMING_RTL): New macro.
+ * function.c (assign_parms): Set up that field.
+ * dbxout.c (dbxout_parms, dbxout_reg_parms): Don't try to use
+ DECL_OFFSET for a parm; it is not set. Use DECL_INCOMING_RTL.
+ (PARM_PASSED_IN_MEMORY): New macro.
+ * sdbout.c (sdbout_parms, sdbout_reg_parms): Likewise.
+ (PARM_PASSED_IN_MEMORY): New macro.
+
+ * cccp.c (macarg): When popping frame, free via free_ptr, not buf.
+
+Thu May 24 18:04:06 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (next_cc0_user): New function.
+ * recog.c (next_insn_tests_no_inequality): Use next_cc0_user.
+ * rtl.h: Define next_cc0_user.
+
+ * cse.c (cse_insn): Make canon_reg calls in separate loop over the
+ SETs to avoid problems when MATCH_DUPs are present in an insn
+ pattern.
+ Don't canon CLOBBER in PARALLEL. Instead, canon MEM of CLOBBER,
+ both within a PARALLEL and standalone. Also, call note_mem_clobbered
+ only for MEM.
+
+Thu May 24 13:08:25 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * gnulib2.c (__negdi2): Make this inline for other functions.
+
+Thu May 24 07:15:04 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (no_labels_between_p, prev_real_insn, next_real_insn):
+ (prev_active_insn, next_active_insn, next_label): Delete from here.
+ * rtlanal.c (no_labels_between_p): Put here.
+ * emit-rtl.c (prev_real_insn, next_real_insn, prev_active_insn):
+ (next_active_insn, next_label): Add to here.
+
+ * c-common.c: Define NULL so NULL_TREE macro will work.
+
+ * cplus-typeck.c (common_parms): Use oballoc and obfree to
+ avoid external current_obstack.
+
+ * cse.c (fold_cc0, cse_insn): Use HASH macro instead of call to
+ canon_hash.
+ (cse_insn): When just recording jump insn, show it doesn't set CC0
+ and set it as previous insn.
+
+ * genoutput.c (gen_split): Fix typo in comment.
+
+ * reorg.c: No longer need define next_label and next_real_insn as
+ extern.
+
+ * toplev.c (rest_of_compilation): Use DELAY_SLOTS instead of
+ obsolete HAVE_DELAYED_BRANCH; include insn-attr.h.
+
+ * final.c (dbr_sequence_length): Now present #ifdef DELAYED_BRANCHES.
+ Eliminate references to obsolete DBR_INSN_SLOTS.
+ (get_attr_length): Support ADJUST_INSN_LENGTH.
+ (get_attr_length, shorten_branches): Handle a SEQUENCE built for an
+ insn with filled delay slots.
+ (final_scan_insn): Avoid unnecessary call to recog_memoized.
+ Use validate_change instead of assuming replacement of CC0 by
+ STORE_FLAG_VALUE or const0_rtx is valid.
+
+Wed May 23 16:32:32 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * out-m68k.c, out-alliant.c (output_btst):
+ Use next_insn_tests_no_inequality, not next_insns_test_...
+ * recog.c (next_insns_test_no_inequality): Function deleted.
+
+Wed May 23 13:26:57 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expmed.c (store_bit_field): Don't bother making a SUBREG when we
+ call ourself recursively; the recursive call will just strip it off.
+
+ * reorg.c: Include insn-attr.h before testing DELAY_SLOTS.
+ (emit_delay_sequence): Assign new INSN_UID to the SEQUENCE.
+ Chain insns through the sequence via NEXT_INSN and PREV_INSN.
+ * emit-rtl.c (next_insn, prev_insn): Go inside a SEQUENCE to
+ find the next or previous insn.
+ (make_insn_raw): No longer static.
+ * rtl.h: Define make_insn_raw, prev_active_insn, next_active_insn,
+ next_insn, and previous_insn.
+
+ * genattrtab.c (write_eligible_delay): Always use "*delay_type";
+ annuling only applies to candidate insn, not insn needing slot.
+
+ * tree.c (init_tree): tree_node_counter doesn't exist any more.
+ (make_node, copy_node, make_tree_vec, build1): No longer set TREE_UID.
+
+Wed May 23 00:48:57 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * genemit.c, genextract.c: Add support for MATCH_OP_DUP and
+ DEFINE_SPLIT.
+
+ * cplus-init.c (build_delete): TREE_SIDE_EFFECTS can be
+ nonzero when address to be deleted is a cast of something
+ with side-effects (like a call).
+ (build_vec_delete): Simplify code now that `make_node' does the
+ right thing for _STMT nodes.
+
+Tue May 22 22:59:43 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_end_basic_block): Don't crash if NEXT_INSN of
+ our branch target is zero.
+ Don't skip scanning first insn after destination label of branch.
+
+ * expr.c (emit_move_insn): Abort if modes differ.
+ (expand_expr, comparison cases): Use TMODE when convenient.
+ (expand_expr, case COND): When optimizing (C ? 1 : 0), ensure
+ we return a result of the correct mode.
+
+ * integrate.c (expand_inline_function): Can't call try_constants for
+ JUMP_INSN since we may have changed RETURN to jump.
+
+Tue May 22 22:40:22 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tree.h (struct tree_common): Delete field `uid'.
+ (TREE_UID): Macro deleted.
+
+ * c-decl.c (finish_decl): Discard any variable sizes in the decl.
+
+ * calls.c (expand_call): When making reg_notes for const function,
+ don't test is_const twice, and take account of order of pushing.
+
+Tue May 22 21:41:48 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (eliminate_regs): Ensure we process pseudo that is first
+ operand of PLUS.
+
+ * expmed.c (store_bit_field): When stripping a SUBREG, adjust the
+ bit position to correspond to the change in modes.
+
+ * cse.c (rtx_cost): Use COSTS_N_INSNS macro.
+
+ * cse.c (qty_comparison_*): New vars.
+ (new_basic_block): Initialize qty_comparison_code.
+ (fold_rtx): If we see a comparison, check if we have seen the
+ same comparison before. If so, we know the result.
+ (record_jump_equiv): Save the comparison being passed in the
+ qty_comparison_* variables for possible later use by fold_rtx.
+ (cse_insn): If the current insn doesn't reference cc0, but the
+ previous insn sets it, delete the previous insn; presumably we
+ used to test it.
+ (cse_basic_block): Allocate new qty_comparison_* vars.
+
+ * reload1.c (eliminate_regs): Second arg is now mode of enclosing
+ MEM, if any, rather than simply flag indicating inside MEM.
+ Use this mode to determine amount that, e.g., PRE_DEC adjusts by.
+
+ * reload1.c (reload): Set regs_ever_live for a register that couldn't
+ be eliminated.
+ * final.c (only_leaf_regs_used): Don't do it here.
+
+ * reorg.c: Eliminate obsolete macros *_REORG_FUNCTION.
+ Entire file is conditional on #ifdef DELAY_SLOTS.
+
+ * Makefile.in: Use reorg.c instead of dbranch.c.
+
+Tue May 22 20:40:30 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-decl.c (complete_array_type): Get string elt size in bytes.
+
+Tue May 22 00:42:07 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * toplev.c (rest_of_compilation): Turn off VERBOSE arg to thread_jumps.
+
+ * objc-parse.y, objc-actions.c: Replaces uses of build with build1
+ when being used for 1-operand nodes.
+
+Mon May 21 23:59:21 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * global-alloc.c (hard_reg_full_preferences): New variable.
+ (global_alloc): Allocate and initialize it.
+ (prune_preferences): Include in regs_someone_prefers all words
+ of multi-word items that have preferences. Don't includes registers
+ we also prefer unless they are prefered by an allocno that needs
+ more registers.
+ (set_preference): Set hard_reg_full_preferences also.
+
+Mon May 21 21:36:29 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tree.c (make_node): All ..._STMT nodes have side effects, type void.
+
+Mon May 21 16:03:23 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * integrate.c (expand_inline_function): Set insns_at_start before
+ processing parameters since it might be needed during that processing.
+ Set RTX_INTEGRATED_P in all insns emitted, including labels and
+ barriers.
+ Ensure COPY is set correctly when replacing RETURN and avoid
+ duplicate barriers by calling emit_jump_insn instead of emit_jump.
+ Call note_stores for JUMP_INSNs and CALL_INSNs in case they have
+ side-effects we care about.
+ (copy_rtx_and_substitute): Convert (use (subreg FOO)) to (use FOO).
+ (subst_constants): Don't crash if we see a SUBREG replaced by a
+ REG or vice versa; we have no work to do in that case.
+ Fix typo in case MULT.
+
+ * recog.c (constrain_operands): Call reg_fits_class_p with original
+ mode of OP, not mode of SUBREG_REG (op) when OP is SUBREG.
+
+Mon May 21 14:25:14 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expmed.c (extract_bit_field): Use class of TMODE for simple reg case.
+
+ * flags.h (flag_pic): Declare it.
+ * tree.h (mode_for_size): Declare it.
+ * c-tree.h (merge_component_comparisons): Declare it.
+
+Mon May 21 07:27:12 1990 Michael Tiemann (tiemann at cygnus.com)
+
+ * jump.c (thread_jumps): New function to optimize the case where one
+ conditional jump jumps to another testing the same condition. This
+ function usefully optimzies code both before common subexpression
+ elimination (where it "finds" common subexpressions that cse won't
+ find) and after loop optimization (where the loop optimizer
+ introduces new conditional jumps after rearranging loops).
+ (rtx_equal_for_thread_p): cheaply builds equivalences between
+ register so that jump threading can be effectively run before cse.
+
+ * emit-rtl.c (init_emit_once): Initialize PIC_OFFSET_TABLE_RTX if
+ PIC_OFFSET_TABLE_REGNUM is defined.
+
+ * tree.c (build,build1,build_nt): Set TREE_RAISES in addition to
+ TREE_SIDE_EFFECTS.
+ ({temp,saveable,perm}_tree_cons): Call `tree_cons' with arguments
+ instead of calling `make_node' directly. Eventually, `tree_cons'
+ could be faster than `make_node'.
+ (get_identifier): Use `bcmp' instead of `strcmp', since it's
+ faster. Also, test the first letter of each string before calling
+ the string comparison function.
+
+ * toplev.c: Add new flags FLAG_THREAD_JUMPS and FLAG_PIC. The
+ former gives better common sub-expression elimination while the
+ latter tells the compiler to emit position-independent code.
+ (rest_of_compilation): Thread jumps if requested.
+
+ * stor-layout.c (layout_{record,union}): For loop bodies meant only
+ for FIELD_DECLs, make sure we have a FIELD_DECL before proceeding.
+
+ * stmt.c (expand_end_case): Use ADDR_DIFF_VEC if FLAG_PIC is
+ nonzero.
+ @@ NOTE: This would look a lot nicer if CASE_VECTOR_PC_RELATIVE were
+ an expression (like zero/nonzero) instead of soley a #define.
+ (fixup_cleanups): If cleanups emitted no code, don't call
+ `reorder_insns'.
+ (expand_decl_cleanup): Return 0 in case we are not in a block
+ (but instead at top-level).
+
+ * stack.h: New GNU C++ file.
+
+ * rtl.c (REG_NOTE_NAMES): Add REG_CC_STATUS and REG_TAIL_CALL.
+ * rtl.h: Ditto. Also make external declaration of
+ pic_offset_table_rtx.
+ * rtl.def: Add the following new RTL codes: DEFINE_SPLIT,
+ MATCH_OP_DUP, LO_SUM and HIGH.
+
+ * reorg.c: New file. Performs instruction reorganizations
+ (primarily branch scheduling) after register allocation.
+
+ * local-alloc.c (local_alloc): If defined, execute
+ ORDER_REGS_FOR_LOCAL_ALLOC.
+
+ * genrecog.c (struct decision): Extended to handle DEFINE_SPLITs.
+ (write_tree): Split into three subroutines: `write_tree_1' which
+ does the main work, `write_tree' which does the original job, and
+ `write_split_tree' which builds the recognizer for insn splitting.
+ (add_to_sequence): Handle MATCH_OP_DUP.
+ (main): Bui.Build both insn->insn_code and insn->insn_list
+ recognizers.
+ Also, fixed comment at the top of the file.
+ * genpeep.c (main): Handle DEFINE_SPLIT.
+ (match_rtx): Handle MATCH_OP_DUP.
+ * genoutput.c (main): Handle DEFINE_SPLIT.
+ * genconfig.c (main): Handle DEFINE_SPLIT and MATCH_OP_DUP.
+ * genattrtab.c (main): Handle DEFINE_SPLIT.
+
+ * fold-const.c (various places): Use `build1' constructor instead of
+ `build' constructor whenever possible.
+
+ * final.c (final_scan_insn): If we know the status of the condition
+ codes at a particular JUMP_INSN (by dint of the fact that it has a
+ REG_CC_STATUS note), set CC_STATUS to reflect that value.
+ (only_leaf_regs_used): @@ For some reason the frame pointer register
+ is not marked live, even when it is. If FRAME_POINTER_NEEDED is
+ nonzero, set REGS_EVER_LIVE[FRAME_POINTER_REGNUM] to 1.
+
+ * expr.c (emit_library_call): Round ARGS_SIZE.CONSTANT up, not down.
+ Use new macro MAX to accomplish this.
+ (safe_from_p): Don't check that EXP is nonzero. Instead, make
+ caller check (only in one place) that argument to `safe_from_p' is
+ non-zero.
+ (expand_expr): In COND_EXPR case, make sure that the predicate is
+ safe from the two conditions. Lossage occured in a construct of the
+ form (c = c < 0 ? d : -d).
+
+ * explow.c (plus_constant): Handle LO_SUM rtl.
+
+ * c-typeck.c (build_binary_op_nodefault): If optimizing, try merging
+ component refs and/or comparisons into larger operations.
+
+ * c-common.c (rewrite_for_merged_ref): New function. Canonicallizes
+ expressions to be recognizable as candidates for merged
+ COMPONENT_REF operations.
+ (make_merged_ref): Builds custom FIELD_DECLs for accessing multiple
+ bits in a byte simultaneously.
+ (merge_component_comparisons): Optimize COMPONENT_REFs in
+ expressions that look like (x.p == y.p && x.q == y.q) or
+ (x.p != y.p || x.q != y.q). Also optimize (x.p == c1 && x.q == c2),
+ where C1 and C2 are known constants.
+
+ * c-lang.c (print_lang_statistics): Added new hook function.
+ Currently does nothing for C.
+
+ * c-convert.c: Use `build1' constructor instead of `build'
+ constructor whenever possible.
+
+ * cplus-typeck.c (build_binary_op_nodefault): Call this function for
+ better applicability of the merged component ref optimization.
+ Also, add more recognized cases.
+
+ * cplus-type2.c (merge_component_comparisons): Code improved, and
+ moved to c-common.c.
+
+ * cplus-parse.y (operator_name): Recognize `operator,'.
+ (expr): On parsing ',', call `build_x_compound_expr' instead of
+ `build_compound_expr'.
+ (various places): Call `note_decl_list_got_semicolon' instead of
+ `note_decl_got_semicolon' where object in question is a list instead
+ of a type.
+ (component_declarator0): Set CURRENT_DECLSPECS from the bitfield
+ type.
+
+ * cplus-method.c (hack_wrapper): Rename parameter TYPE to CNAME,
+ since it is a type name we pass in, not a type.
+
+ * cplus-lex.c (opname_tab): Add `operator,'.
+ (note_decl_list_got_semicolon): Make notation that a list of
+ declarations should be considered as having "gotten a semicolon".
+ (extract_interface_info,interface_strcmp): Commented.
+
+ * cplus-init.c (build_delete): Rest of changes to reimplement new
+ destructor mechanism.
+ (build_vbase_delete): Fix bug whereby arrays of length 0 and 1 were
+ not being correctly handled. Also, where elsements were not being
+ deleted. Use new destrouct calling convention.
+ (various places): Change TYPE_HAS_CONSTRUCTOR to
+ TREE_HAS_CONSTRUCTOR where appropriate.
+
+ * cplus-expr.c (cplus_expand_expr): Use `emit_block_move' to copy
+ data from RETURN_TARGET to CALL_TARGET in case they do not line up
+ normally.
+
+ * cplus-decl2.c (finish_file): No need to call `build_vbase_delete'
+ on top-level objects anymore, since destructors now do the right
+ thing.
+
+ * cplus-decl.c (finish_function): Implement new destructor
+ mechanism: destroy virtual baseclass objects if (in$charge & 2) is
+ nonzero. Deallocate if (in$charge & 1) is nonzero.
+
+ * cplus-cvt.c (build_up_reference): Use TREE_HAS_CONSTRUCTOR, not
+ TYPE_HAS_CONSTRUCTOR on non-TYPE tree nodes.
+ (build_up_reference): Only build up references between compatible
+ types. I.e., don't build a char& to an int object.
+ (convert_to_aggr): Set the TREE_SIDE_EFFECTS bit if the result is a
+ CALL_EXPR.
+
+ * cplus-class.c (build_vbase_path): Recover from bad parse errors.
+ (build_method_call): Implement new ctor/dtor semantics to allow
+ differentiation between tearing an object down and deallocating it.
+ This also means that ctors and dtors can now aviod going through the
+ virtual function table mechanism as they construct/destruct their
+ objects.
+
+ * ALL GNU C++ files: Use new macro IDENTIFIER_TYPE_VALUE to lookup
+ type value of an identifier. Also implement related macros
+ IDENTIFIER_HAS_TYPE_VALUE, and IDENTIFIER_TYPEDECL_VALUE.
+
+ * cplus-cadillac.c (cadillac_switch_source): Change Prototype
+ declaration to non-prototype declaration.
+ (readable_p): Ditto.
+
+Sun May 20 20:23:39 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-typeck.c (c_sizeof): For incomplete type, warn and return 0.
+ (c_sizeof): Similar.
+
+Sun May 20 17:20:48 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (gen_highpart): Support SUBREG like gen_lowpart.
+
+Sun May 20 16:59:17 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * c-typeck.c (build_c_cast): Warn about pointer-integer casts
+ where size differs.
+
+ * stor-layout.c (layout_type): Multi-word field doesn't force BLKmode.
+
+ * expmed.c (extract_bit_field): Use mode_for_size for lsb-aligned
+ fields in regs. No longer knows explicit modes for this.
+
+Sun May 20 15:12:38 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * Makefile.in: (reload1.o): Now depends on output.h.
+
+ * calls.c (expand_call): No need to set frame_pointer_needed.
+
+ * emit-rtl.c (gen_rtx): If reference to sp, ap, or fp, use
+ appropriate already-made rtx (e.g., stack_pointer_rtx).
+
+ * expr.c (expand_builtin, case BUILT_IN_ALLOCA): No need to set
+ frame_pointer_needed.
+
+ * final.c (final_start_function): No longer round size of frame here.
+ (final_scan_insn): Call constrain_operands with new operand.
+
+ * flow.c (life_analysis): Change test on whether sp is live or
+ not to depend on FRAME_POINTER_REQUIRED and -fomit-frame-pointer.
+ (This code may not be relevant any more.)
+
+ * function.c (push_function_context, pop_function_context): No need
+ to save and restore frame_pointer_needed.
+ (assign_{outer_,}stack_local): No need to set frame_pointer_needed.
+ (assign_parms): Likewise.
+ (init_function_start): Don't initialize frame_pointer_needed here.
+
+ * function.h (frame_pointer_needed): Deleted.
+
+ * genattrtab.c (write_attr_case): Write call to constrain_operands
+ with new second argument (reload_completed).
+
+ * global-alloc.c (global_alloc): Don't left fp be allocated if we
+ already know we can't eliminate it.
+ (find_reg): Argument LOSERS is now a HARD_REG_SET instead of an array.
+ Precompute HARD_REG_SETs before loop over registers to speed up
+ allocation.
+ (retry_global_alloc): Argument FORBIDDEN_REGS is now a HARD_REG_SET.
+ (check_frame_pointer_required): Deleted; no longer needed.
+
+ * integrate.c (save_for_inline, output_inline_function): No longer
+ need to save and restore frame_pointer_needed.
+
+ * local-alloc.c (block_alloc): No longer have to worry that having
+ a stack variable might cause a frame pointer to be needed when it
+ might otherwise not be.
+ (find_free_reg): Don't allocate into registers that may be eliminated
+ later even if they are not FIXED_REGS.
+
+ * output.h: Define reload_completed.
+
+ * recog.c (constrain_operands): Add new argument, STRICT. If zero
+ and the constraints could not be matched, try again with a less
+ strict view (i.e., assume that reload will fix those things that
+ it can). This allows attribute values to be obtained prior to
+ reload.
+ Don't call alter_subreg or assume it has been called. Instead,
+ look inside SUBREGs.
+
+ * reload.c (find_reloads_address{,_1}): Handle an address that
+ is a MEM; it may have been produced by register elimination.
+ (find_reloads_address): sp can also be the base register for a
+ stack slot.
+ (form_sum): No longer static.
+
+ * reload1.c: Rewrite code that performs frame pointer elimination. Do
+ it during reload to ensure that all addresses and operands remain
+ valid; also generalize to support more than one pair of eliminations.
+ (reg_equiv_stack_slot, bad_spill_regs): New vars.
+ (forbidden_regs): Now a HARD_REG_SET.
+ (struct elim_table): New structure to describe register eliminations.
+ (reload): Start scanning registers after virtual registers.
+ Initialize reg_equiv_stack_slot for each register. Compute
+ reg_equiv_{mem,address} during register scan only if not eliminating
+ registers.
+ Compute initial default value of frame_pointer_needed.
+ Round frame size to BIGGEST_ALIGNMENT.
+ Create obstack for scratch rtl created by register elmination.
+ Initialize elimination table and spill registers that we know can't
+ be eliminated.
+ On each scan of the insns: Reset all elimination entries to initial
+ offsets, compute reg_equiv_{mem,address}, and see if any potentially
+ eliminable register changed status.
+ Try to eliminate registers from each insn unless we know that none
+ can be eliminated.
+ Don't complete groups for spill registers from registers that
+ shouldn't be used as spill registers.
+ Call reload_as_needed if register eliminations can be done, even if
+ no reloads are needed.
+ (new_spill_reg): Don't allow spilling an eliminable register.
+ Don't set forbidden_regs here.
+ Indicate something changed if a register that wasn't ever used before
+ was made a spill register.
+ (eliminate_frame_pointer, {alter,fix}_frame_pointer_address): Deleted.
+ (delete_dead_insn): New function.
+ (alter_reg): Call it.
+ Always set reg_equiv_stack_slot; if not eliminating registers, also
+ set reg_equiv_{mem,address}.
+ (eliminate_regs, eliminate_regs_in_insn): New functions.
+ (spill_hard_reg): Add new argument, CANT_ELIMINATE.
+ Set bit for register being spilled in forbidden_regs.
+ Use new argument instead of seeing if we are spilling fp.
+ No longer need to have frame pointer just because a reg needs a
+ stack slot.
+ (order_regs_for_reload): Set bad_spill_regs to contain those registers
+ that can't be used for spill registers.
+ Consider any eliminable register as bad to use as a spill register.
+ Rework initialization of potential_reload_regs.
+ (reload_as_needed): Handle register elimination in a similar manner
+ as function reload.
+ (gen_input_reload): When generating a reload for a PLUS, first try to
+ use a three-operand add insn. If that fails, emit two two-operand
+ insns.
+
+ * rtl.h (FUNCTION_FLAGS_FRAME_POINTER_NEEDED): Deleted; all others
+ renumbered.
+
+ * stmt.c (expand_decl): No longer have to set frame_pointer_needed
+ for variable-sized decl.
+
+ * stupid.c (stupid_find_reg): Don't try to allocate an eliminable
+ register.
+
+ * tm-vax.h (INITIAL_FRAME_POINTER_OFFSET): Add definition.
+
+ * recog.c (next_insn_tests_no_inequality): If no next insn, return 0.
+
+ * print-tree.c (print_node): Set length for TREE_VEC.
+
+ * calls.c (store_one_arg): Set arg->value to location where argument
+ was placed (either register or stack).
+
+ * recog.c: Needs flags.h (for flag_pretend_float):
+ * Makefile.in (recog.o): Likewise.
+
+ * expr.c (convert_move): Add missing RETURN statements.
+
+Sat May 19 14:26:31 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case EXIT_STMT): Return rather than falling
+ out of switch statement (and into `binop').
+
+ * cse.c (cse_insn): Allow conditional branches to be turned into
+ noops when the condition is known false by not calling validate_change.
+
+ * cse.c (fold_rtx): Add LABEL_REF to list of fast RTL codes.
+
+Sat May 19 12:41:44 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-i386gas.h (ASM_OUTPUT_ALIGN): Use log as arg to .align.
+ (ASM_OUTPUT_ALIGN_CODE): Likewise.
+
+ * gcc.c (default_compilers): For .cc, pass -g* to cc1.
+
+Sat May 19 06:51:26 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * tree.c (push_obstacks, pop_obstacks): Put struct obstack_stack
+ in obstack instead of using xmalloc/free.
+ (init_tree): Initialize new obstack for {push,pop}_obstacks.
+
+ * tree.c (simple_cst_list_equal): No longer static.
+
+Fri May 18 19:38:01 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.h (MUST_PASS_IN_STACK): Refine test for case where padding
+ requirement prohibits passing in register.
+
+Fri May 18 18:14:18 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * fixincludes: Fix CAT macro in memvar.h.
+
+Fri May 18 16:13:59 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (do_jump): Don't explicitly copy item being tested from
+ MEM to REG. If needed, this will be done later.
+
+Thu May 17 14:33:50 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * Makefile.in (bootstrap): Pass LANGUAGES to inner makes.
+
+Thu May 17 13:57:34 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * fixincludes: Handle _CTRL like CTRL.
+
+Wed May 16 21:09:42 1990 Richard Kenner (kenner at vlsi1.ultra.edu)
+
+ * fold-const (fold): Two conversions in a row are needed if from an
+ integer type to a pointer type of a different precision.
+
+Wed May 16 16:09:47 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * expr.c (expand_expr): Make sure a volatile value is referenced
+ even if value is ignored.
+
+ * c-typeck.c (truthvalue_conversion): Result COND_EXPR gets type int.
+ (invert_truthvalue): Simplify COND_EXPR.
+
+Tue May 15 00:25:03 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * stor-layout.c (layout_record): Do set TYPE_SIZE if size is var.
+
+ * reload.c (push_reload): If insn is an asm, verify that CLASS
+ is at least possible for the specified mode.
+
+ * c-decl.c (complete_array_type): Compensate for wide string constant.
+
+ * final.c (leaf_function_p): Reject everything if profiling.
+
+ * function.c (optimize_bit_field): Adjust OFFSET if
+ BITS_BIG_ENDIAN != BYTES_BIG_ENDIAN.
+
+ * expmed.c (store_bit_field, extract_bit_field): Rework the code
+ to adjust XBITPOS for the size within which to count.
+ (extract_bit_field): When converting MEM to REG, don't make SUBREG
+ immediately; fall through and let this happen in the code that
+ handles original registers of the wrong mode.
+
+Mon May 14 16:01:13 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * cexp.y (yylex): Ignore carriage return.
+ * cccp.c (initialize_char_syntax): Likewise.
+ (newline_fix, name_newline_fix): Likewise.
+
+ * c-common.c: New file.
+ (combine_strings): Moved here. Fix errors for wide string length.
+ * c-parse.y, objc-parse.y, cplus-lex.c: Function deleted here.
+
+Sun May 13 08:08:41 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * integrate.c (subst_constants): Fix typo in case 'E'.
+
+Sat May 12 17:14:26 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * combine.c (subst): Don't change -(y-x) to x-y for IEEE floats.
+ Include real.h.
+
+ * cse.c (fold_rtx): Don't simplify float+0, float-0, float*0
+ if using IEEE floating point.
+ Don't simplify float-self even if not IEEE.
+ * fold-const.c (fold): Likewise.
+
+ * i386.md (trunc**): Use long move if source is constant.
+ * out-i386.c (PRINT_REG): Handle CODE == 'k'.
+
+ * fixincludes: Use rm -fr to delete before making link.
+
+ * optabs.c (init_optabs): Support MULDI3_LIBCALL, etc.
+
+Sat May 12 17:04:58 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (find_best_addr): Don't modify constant address MEMs; they
+ are shared.
+
+Sat May 12 15:17:37 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * ns32k.md (signed bitfield extract): Don't output assembler comment.
+
+Fri May 11 15:23:55 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * Makefile.in: Don't use $(libsubdir) as a target since it involves
+ shell `...` constructs.
+
+ * genattr.c (fatal, main): Remove relics of old program name.
+ * genattrtab.c: Likewise.
+
+ * expr.c (expand_expr, case COND_EXPR): Add missing argument to
+ operand_equal_p.
+
+ * reload.c (form_sum): Handle case where second operand is
+ (plus foo (const_int ...)).
+
+ * c-typeck.c (c_sizeof{,_nowarn}, c_alignof): Don't blow up for
+ ERROR_MARK.
+ * cplus-typeck.c (c_sizeof{,_nowarn}, c_alignof): Likewise.
+
+ * cplus-typeck.c (c_sizeof{,_nowarn}): Convert from bytes to chars,
+ since c defines sizeof (char) as 1.
+
+ * loop.c (mark_loop_jump): RETURN, SIGN_EXTEND, and ZERO_EXTEND can
+ also occur in JUMP_INSN's.
+
+ * reload.c (find_reloads, find_reloads_address): Correct errors where
+ an arg to find_reloads is "VOIDmode" instead of "0" and vice versa.
+ (find_reloads_address_1): Likewise.
+
+ * global-alloc.c (global_alloc): Avoid divide-by-zero for allocnos
+ where all regs have reg_live_length == -2.
+
+Fri May 11 14:45:06 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * tm-i860.h (ASM_OUTPUT_CASE_LABEL): Align to multiple of 4.
+
+Thu May 10 23:43:31 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
+
+ * out-i860.c (single_insn_src_p, strict_single_insn_src_p):
+ Correct conditions for needing multiple instructions.
+ (output_delayed_branch): Likewise.
+
+See file ChangeLog.1.
+
+Local Variables:
+mode: indented-text
+left-margin: 8
+fill-column: 76
+version-control: never
+End:
diff --git a/gcc/ChangeLog.3 b/gcc/ChangeLog.3
new file mode 100644
index 00000000000..346311a4267
--- /dev/null
+++ b/gcc/ChangeLog.3
@@ -0,0 +1,8063 @@
+Fri Jul 19 18:56:14 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (canon_reg): Allow for recursive call returning 0 (if we had
+ an EXPR_LIST).
+ * sched.c (init_aliases_analysis): Ignore REG_EQUAL note when its value
+ is an EXPR_LIST.
+ * unroll.c (loop_iterations): Likewise.
+
+ * rs6000.md (andsi3): Fix typo in and-with-cc pattern.
+
+Fri Jul 19 11:23:22 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * toplev.c (set_target_switch): For TARGET_OPTIONS, set the
+ variable to the variable part of the actual option.
+ * tm-m88k.h, out-m88k.c: Change the use of m88k_short_data.
+
+ * varasm.c (output_constant_def): Merge get_or_assign_label and
+ delete it. Ensure that ENCODE_SEGMENT_INFO is evaluated before
+ SELECT_SECTION.
+
+Thu Jul 18 19:57:45 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * expr.h (MUST_PASS_IN_STACK_BAD_PADDING): Definitions were backwards.
+
+Thu Jul 18 17:52:46 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * unroll.c: Fix typos in comments.
+ (splittable_regs_updates): New static global variable.
+ Indicates the number of instructions that modify a split biv
+ remaining during the last iteration of a loop, so that the last one
+ can be handled specially.
+ (unroll_loop): Allocate and clear it.
+ (copy_loop_body): Use it to determine how to rewrite an insn
+ modifying a split iv.
+ (find_splittable_regs): When a splittable biv is identified, set it
+ equal to the number of insn modifying the biv.
+ (find_splittable_givs): When a splittable giv is identified, set
+ it to one if this giv is a reg.
+
+ * unroll.c (copy_loop_body): Instead of trying to special case
+ insns that use start_label, use the label_map to map the start
+ label to the appropriate label for all insns except those that
+ must be inverted and redirected. The former code did not handle
+ tablejumps that used the start_label correctly.
+
+ * integrate.c (copy_rtx_and_substitute): Don't legitimize an
+ address inside of an ADDRESS rtx. This fails, because this need
+ not be a validate address, but it is always valid in the context
+ it appears in.
+
+Thu Jul 18 08:13:56 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * toplev.c (set_target_switch): Support TARGET_OPTIONS for command
+ options with values.
+
+ * varasm.c (output_constant_def): Set flags with
+ ENCODE_SEGMENT_INFO for strings and constructors.
+ * tm-mips.h (ENCODE_SEGMENT_INFO): Must be a VAR_DECL.
+
+ * out-m88k.c, tm-m88k.h, m88k.md: Implement a global pool approach
+ to short addressing.
+
+ * m88k.md (extendsfdf2, truncdfsf2): Use fsub rather than fadd.
+ This conforms to IEEE 754 in all rounding modes except round to
+ negative infinity whereas fadd conforms only in that mode.
+
+Thu Jul 18 01:01:37 1991 Eric Youngdale (youngdale at v6550c.nrl.navy.mil)
+
+ * make-cc1.com: Add command line to compile reg-stack.c, and add
+ reg-stack.obj to the list of files passed to the VMS linker.
+
+Thu Jul 18 00:11:00 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * Makefile.in (enquire.o): Need not depend on gnulib.
+ (gnulib2): Renamed from gnulib2.portable.
+ Don't do ranlib.
+ (gnulib2.portable): Just refers to gnulib2.
+ (gnulib1.portable): Don't do ranlib.
+
+Wed Jul 17 11:19:09 1991 Michael Meissner (meissner at geech.gnu.ai.mit.edu)
+
+ * Makefile.in (gcc): Do a -dumpspecs after building gcc so that -B./
+ will override any installed specs in /usr/local/lib.
+ (mostlyclean): Delete *.cpp files which are left if you use
+ -save-temps.
+
+Wed Jul 17 06:08:33 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): When putting I2 and/or I1 into NEWPAT,
+ check for a PARALLEL; if so, just put in the relevant SET instead
+ of making a PARALLEL containing a PARALLEL.
+
+Tue Jul 16 18:58:51 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (record_value_for_reg): Show we haven't seen the death
+ of a register once we have seen it modified.
+
+ * reload1.c (reload): If we decide to put a pseudo which used to have
+ a MEM equiv onto the stack, set SOMETHING_CHANGED and reprocess all
+ eliminations and pseudos without scanning the insns.
+
+Tue Jul 16 13:17:14 1991 Michael Meissner (meissner at wookumz.gnu.ai.mit.edu)
+
+ * cplus-decl.c (sigsegv): Make signal handler void for full
+ prototyping systems.
+
+Tue Jul 16 12:25:18 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * dbxout.c (dbxout_symbol): Ignore types with no names of any kind.
+
+Tue Jul 16 07:12:52 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * stmt.c (pushcase, pushcase_range): Return label in *DUPLICATE,
+ not integer value.
+
+ * rtlanal.c (reg_referenced_p, reg_overlap_mentioned_p): Allow X to
+ be (cc0) or (pc).
+
+ * combine.c (subst, case SET): Delete code to remove "unnecessary"
+ SUBREG; code was incorrect and this is done (corrected below) in
+ simplify_comparison.
+ (simplify_comparison): Can only remove SUBREG for equality comparisons.
+
+ * expr.c (expand_expr, case COND_EXPR): If condition has side effects,
+ ensure we evaluate it before evaluating an arm of the COND_EXPR.
+
+Mon Jul 15 21:59:36 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * rtl.h (FUNCTION_FLAGS_RETURNS_STRUCT): Fix typo in value.
+
+Mon Jul 15 22:18:40 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * cccp.c (main): Ignore CPATH if -nostdinc.
+
+Mon Jul 15 22:00:02 1991 Michael Meissner (meissner at churchy.gnu.ai.mit.edu)
+
+ * reload.c (find_reloads): Fix typo (reg_sets_p instead of
+ reg_set_p).
+
+Mon Jul 15 21:49:09 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-parse.y (stmt): Emit the nop for the start of a loop
+ only after the line number.
+
+Mon Jul 15 16:50:51 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edn)
+
+ * rtlanal.c (reg_set_p): If we are passed an insn, only pass the
+ pattern to note_stores.
+
+ * local-alloc.c (validate_equiv_mem): A CALL_INSN invalidates all
+ memory.
+
+Sun Jul 14 06:34:47 1991 Richard Kenner (kenner at vlsi1.ultra.hyu.edu)
+
+ * cse.c (last_jump_equiv_class): New variable.
+ (record_jump_equiv): Set it.
+ (cse_insn): Clear it.
+ (cse_around_loop): Invalidate all entries in last_jump_equiv_class.
+ (cse_set_around_loop): Ensure our replacement is cheaper.
+
+Sat Jul 13 17:15:30 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * cplus-decl.c (finish_enum): Fix typo in arguments for finish_decl.
+ * cplus-class.c (finish_struct): Likewise.
+
+Fri Jul 12 16:45:02 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * dbxout.c (dbxout_symbol): Don't crash when DECL_NAME is 0.
+
+Fri Jul 12 15:38:24 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (do_tablejump): Don't write BARRIER between jump and table
+ if they must remain adjacent.
+
+ * varasm.c (make_decl_rtl): Set REG_USERVAR_P when register name
+ is specified.
+ * integrate.c (subst_constants): Don't substitute for a user
+ variable assigned to a hard register.
+
+ * reload.c (find_reloads): Add new vars no_{input,output}_reloads to
+ indicate when the corresponding reload type is not permitted; reject
+ an alternative that would try such a reload.
+ * rs6000.md (decrement-and-branch): No longer need kludges to
+ avoid output reloads.
+ Use '0' instead of 'c' for input 1 in alternative 0.
+ Allow operand 0 to be in non-general register.
+
+Fri Jul 12 10:54:39 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * c-decl.c (finish_struct, finish_enum): Fix typo in arguments for
+ finish_decl.
+
+ * i386.md (bit test patterns): Delete bit tests using implicitly
+ masked bit number operand: the hardware doesn't work like that.
+
+Fri Jul 12 09:50:43 1991 Michael Meissner (meissner at spiff.gnu.ai.mit.edu)
+
+ * tm-hp9k2bsd.h (toplevel): Remove RCS HISTORY log.
+
+Thu Jul 11 00:46:48 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-parse.y (yylex): Do try signed int for ANSI nondecimal constants.
+
+ * c-typeck.c (record_format_info): The first time, use xmalloc.
+
+Wed Jul 10 18:54:26 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (jump_optimize): Fix typo in "if (...) x = a; else x = b;"
+ case: had temp3 instead of temp4.
+
+ * cplus-lex.c (lineno, end_of_file): Move definition to before
+ first use.
+ (reinit_parse_for_block): Variable `c' must be int to ensure EOF fits.
+ * cplus-input.c (getch): Remove extraneous declaration of end_of_file.
+
+ * reload1.c: Include insn-flags.h.
+ (emit_reload_insns): Handle the case where we reload an entire
+ address; use "reload_load_address" pattern, if it exists.
+ Remove explicit SImode reference; should have been Pmode, but
+ IN can be used instead of rebuilding it.
+ * Makefile.in (reload1.o): Includes insn-flags.h.
+
+ * reload.c (find_reloads): If replacing an output REG with a MEM,
+ write a CLOBBER for the REG after the insn.
+ * reload1.c (eliminate_regs): Add new arg INSN; if nonzero, add a
+ CLOBBER when replacing a REG in SET_DEST with a MEM.
+ (reload, eliminate_regs_in_insn): Add new arg to eliminate_regs.
+ * dwarfout.c (output_bound_representation, location_attribute):
+ Likewise.
+
+ * reload1.c (reload): If a reg_equiv_memory_loc isn't strictly valid
+ and isn't sufficiently simple, use a stack slot instead.
+ (alter_regs): Don't delete reg_equiv_init insns here.
+ (reload_as_needed): Do it here.
+
+ * stor-layout.c (get_best_mode): Correct test for alignment.
+
+ * loop.c (move_movables): Don't get confused by NOTE insns in gnulib
+ call sequence.
+
+Wed Jul 10 18:40:32 1991 Matthew Self (mself at geech.gnu.ai.mit.edu)
+
+ * cccp.c (enum node_type): Added T_WARNING.
+
+ * cccp.c (directive_table): Added #warning.
+
+ * cccp.c (do_warning): Print warning message and continue.
+
+Wed Jul 10 18:38:28 1991 Matthew Self (mself at geech.gnu.ai.mit.edu)
+
+ * c-parse.y, objc-parse.y (attrib): Pass "format" attribute
+ through. Takes one identifier and two constants as args.
+ identifier must be either printf or scanf.
+
+ * c-common.c (decl_attributes): Process "format" attributes.
+ Call new routine record_format_info().
+
+ * c-typeck.c (struct function_info): Changed function_ident field;
+ store identifier node rather than char * to speed lookup.
+ Renamed arg_num field to format_num. Replaced is_varargs field
+ with new first_arg_num field.
+
+ * c-typeck.c (check_format): Modified to use new arg_num and
+ first_arg_num fields.
+
+ * c-typeck.c (record_format_info): New routine. Replaces static
+ table of functions to check.
+
+ * cplus-typeck.c (record_format_info): New stub routine so c++
+ will link. Someone should implement format checking for c++.
+
+ * c-typeck.c (init_format_info_table): New routine to add
+ entries for ANSI functions to table.
+
+ * c-decl.c (init_decl_processing): Call init_format_info_table().
+
+ * c-typeck.c (build_function_call): Modified to use dynamic table
+ rather than static one. Compare identifier nodes rather than
+ using strcmp().
+
+ * gcc.texinfo (): Document "format" attribute.
+
+ * c-typeck.c (check_format): Call warning() directly rather than
+ returning the warning string. This way we can give multiple warnings
+ by continuing. Several changes to make continuing safe.
+
+ * c-typeck.c (build_function_call): Incorporated changed return
+ value of check_format().
+
+ * c-typeck.c (check_format): Check for NULL format string.
+
+Wed Jul 10 16:40:54 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * sdbout.c (sdbout_tags): Delete this and use the TYPE_DECL
+ representation of tagged types. Types are now output in their
+ original lexical order.
+ (sdbout_symbol): Return early (only using sdbout_one_type) when a
+ tagged type is encountered.
+ (sdbout_block, sdbout_symbol): Don't use sdbout_tags.
+ * toplev.c (compile_file): Don't use sdbout_tags.
+ * varasm.c (assemble_function): Don't use sdbout_tags.
+
+Wed Jul 10 15:13:33 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * dbxout.c (dbxout_tags): Function deleted. Calls deleted too.
+ (dbxout_tagged_type): New function.
+ (dbxout_symbol): Call that.
+ * toplev.c (compile_file): Call to dbxout_tags deleted.
+
+ * c-parse.y (yylex): Simplify choice of type for integers.
+ When traditional, all integers are signed unless explicitly unsigned.
+
+Wed Jul 10 13:35:27 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * configure (m88k-svr4): Needs make-m88ksvr4.
+ * make-m88ksvr4: New file.
+
+Wed Jul 10 13:18:03 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-decl.c (duplicate_decls): Warn if `inline' is not consistent.
+
+ * cccp.c (hack_vms_include_specification): Fix typos.
+
+Tue Jul 9 22:21:22 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * loop.c (find_and_verify_loops): RETURN insns aren't listed in
+ loop_number_exit_labels, so don't try to remove JUMP_LABEL of a
+ RETURN from that list.
+
+ * rtlanal.c (reg_referenced_between_p): New function.
+ * jump.c (jump_optimize): Use it instead of reg_used_between_p when
+ checking for "if (...) x = a; else x = b;" case.
+
+Tue Jul 9 13:03:53 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * expr.c (move_block_to_reg): Don't force_const_mem on non-constant.
+
+Tue Jul 9 09:13:32 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * c-decl.c (finish_struct): Record tagged types as a TYPE_DECL
+ with a NULL DECL_NAME.
+ (finish_enum): Ditto.
+ * cplus-decl.c (finish_enum): Ditto.
+ * cplus-class.c (finish_struct): Ditto.
+
+ * dbxout.c (dbxout_symbol): Ignore TYPE_DECLs for tagged types.
+ * cplus-dbxout.c (dbxout_symbol): Ditto.
+ * sdbout.c (sdbout_symbol): Ditto.
+
+ * toplev.c (compile_file): DECL_NAME may be null.
+
+ * dwarfout.c (output_symbol): Use output_dies_for_tagged_type for
+ TYPE_DECLs of tagged types.
+ (dwarfout_output_tagged_type): Deleted.
+ (output_dies_for_tagged_type): Mark TREE_ASM_WRITTEN early.
+
+Mon Jul 8 19:36:44 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * jump.c (jump_optimize): Check for extra labels when detecting
+ "if (...) x = a; else x = b;". Include the insn for "x = a;" when
+ testing for data conflict.
+
+Mon Jul 8 19:34:14 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * integrate.c (copy_for_inline, case MEM): Must copy a MEM even if
+ it has a constant address if that address involves a LABEL_REF.
+
+ * rtlanal.c (reg_set_p): Only check for REG_INC notes and a CALL_INSN
+ if we are passed an insn.
+ * local-alloc.c (optimize_reg_copy): Remove tests now done in
+ reg_set_p.
+
+Mon Jul 8 16:38:49 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-parse.y (yylex): Pedantic warning here for `asm'.
+ No warning for `__asm__'.
+ (maybe_type_qual, maybeasm, extdef): No warning here.
+
+ * objc-actions.c: Rename OBJC_SELS_R_INTS to OBJC_INT_SELECTORS.
+ Rename OBJC_UNIQUE_SELS to OBJ_NONUNIQUE_SELECTORS, reversing sense.
+ Eliminate OBJC_SELS_R_STRUCT_PTRS.
+
+Mon Jul 8 06:37:00 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rtlanal.c (reg_{used,set}_between_p): Allow FROM_INSN == TO_INSN;
+ return 0 in that case.
+
+ * jump.c (mark_jump_label): Fix typo in use of GET_RTX_LENGTH.
+
+ * reload.c (reload_strict_low): Change comment to say that this is
+ always zero; we don't use it any more.
+
+Sun Jul 7 22:14:13 1991 Michael Meissner (meissner@churchy.gnu.ai.mit.edu)
+
+ * tm-mips.h (FRAME_POINTER_REQUIRED): Fix typo that required a frame
+ if alloca was not called, instead of the reverse.
+
+Sun Jul 7 17:14:17 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * cccp.c (struct file_buf): New field system_header_p.
+ Everything that pushes on instack now initializes this field.
+ (finclude): New arg to set that field. Callers changed.
+ (do_include): Pass that arg as 1 for <...>, else 0.
+
+ * cccp.c (do_include): Warn for first use of #import
+ except in system header files.
+ (handle_directive): Support #import if compiling for Next.
+
+ * cccp.c (do_pragma): For #pragma once, warn it is obsolete.
+
+Sun Jul 7 14:29:04 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * tm-att386.h (NO_DOLLAR_IN_LABEL): Define this here,
+ * tm-i386sco.h (NO_DOLLAR_IN_LABEL): not here.
+
+Sun Jul 7 06:20:03 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rtlanal.c (reg_set_p): Return 1 if REG is found in a REG_INC
+ note or if INSN is a CALL_INSN and REG is a hard reg.
+ (reg_set_last): Only return a register or constant; if returning a
+ register, ensure it isn't modified between the SET we found and INSN.
+
+ * jump.c (jump_optimize): If SMALL_REGISTER_CLASSES, don't make a
+ store-flag insn if any register involved is a hard reg.
+
+Sat Jul 6 14:51:15 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * expr.c (expand_assignment): Don't abort for volatile structure field
+ even if the structure is in a register.
+ NOTE: This leaves the problem of implementing whatever meaning
+ a volatile field should actually have.
+
+ * fold-const.c (div_and_round_double): Make lnum and lden unsigned.
+ Use the small-denominator algorithm only for denom < 2**24.
+ Fix backward conditionals in ?: operators in general case.
+ Change i + j to i - 1 + j when indexing num.
+
+Fri Jul 5 21:36:57 1991 Ken Raeburn (raeburn at watch.com)
+
+ * genpeep.c (match_rtx, case MATCH_OP_DUP): Output semicolon after
+ "goto" statement.
+
+Fri Jul 5 09:45:56 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rs6000.md (andsi3): Bias alternatives so we always prefer constants.
+ (define_splits of DImode, SFmode, and DFmode): Don't split
+ unless after reload.
+ (ashldi3, lshrdi3): Fix bugs in instruction order; use & in
+ output constraint so can't conflict with operand 2; use '0'
+ constraint to allow operands 0 and 1 to be the same register.
+
+ * regclass.c (reg_n_sets): Move definition before use.
+
+ * reorg.c (fill_simple_delay_slots): Candidate for delay slot cannot
+ set anything set between it and the delay insn.
+
+ * jump.c (jump_optimize): In "if (...) x = a; else x = b;", correctly
+ specify range to check if X is used or set.
+ Use rtx_equal_p to check for matching X.
+
+Thu Jul 4 15:55:45 1991 Tom Wood (wood at geech.gnu.ai.mit.edu)
+
+ * cccp.c (default_include): Add /usr/mach/include for MACH systems.
+
+ * configure (m88k-luna): Needs make-m88kluna.
+ * make-m88kluna: New file.
+
+ * dwarf.h: New file derived from the UNIX International
+ Programming Languages Special Interest Group DWARF specification.
+ * dwarfout.c (includes): Include "dwarf.h".
+ (subscript_data_attribute): Use FMT_CODE to encode array subscripts.
+ (languagribute): LANG type no longer provided by dwarf.h.
+ (output_source_file_die): Determine proper language attribute.
+
+Thu Jul 4 12:14:16 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * cplus-xref.c: define rindex if USG
+
+Thu Jul 4 12:36:55 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * gcc.c (process_command): Correctly split -L from its arg.
+ * SWITCHES_NEED_SPACES: New host machine option.
+ This really ought to be defined now for certain hosts,
+ but I don't know which ones they are.
+
+Wed Jul 3 23:31:00 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * tm-m68k.h (ASM_OUTPUT_FLOAT): Check CROSS_COMPILE (there was a typo).
+
+Wed Jul 3 22:05:55 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (simplify_binary_operation, case MINUS): Fix typo in op number.
+
+ * cse.c (cse_basic_block): Correctly handle the case where TO
+ was a label with zero uses at the end of the function.
+
+ * combine.c (significant_valid): New variable.
+ (combine_instructions): Turn significant_valid off until after
+ we finished computing reg_significant.
+ (significant_bits): Ignore reg_significant when significant_valid
+ is zero.
+
+ * rtlanal.c (reg_set_last): Go past CALL_INSN as long as we are not
+ looking for a hard register.
+
+Wed Jul 3 21:07:18 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * sched.c (schedule_block): When computing what registers are dead
+ at the end of the current block, correctly handle REG_DEAD notes
+ that refer to multi-word hard registers.
+
+ * loop.c (mark_loop_jump): When invalidating loops with multiple
+ entries, must invalidate every nested loop containing the target
+ of a loop entry jump, except for those that also contain the jump
+ itself.
+
+ * loop.c (record_giv): When computing whether a giv is
+ replaceable, check whether the biv update has a valid luid, and
+ mark it as not replaceable if not.
+
+ * combine.c (gen_rtx_combine): Call rtx_alloc instead of gen_rtx,
+ because it is much faster, especially on some RISC machines.
+
+ * fixincludes: Add optional argument which indicates where to put
+ the fixed include files. Echo the directory name where the
+ include files will be put.
+
+ * cccp.c (struct default_include): Don't examine
+ STANDARD_INCLUDE_DIR or /usr/local/include when
+ NO_STANDARD_INCLUDE_DIR is defined. This is useful when building
+ cross compilers.
+ (main): Only send SIGPIPE signal if the SIGPIPE signal exists on
+ the host.
+ (rescan, handle_directive, skip_if_group, validate_else,
+ skip_to_end_of_comment, macarg1, discard_comments): Accept '//' as
+ a comment in Objective-C as well as C++. The Objective C language
+ specifies that '//' starts a comment.
+
+ * .gdbinit (ptn): Define new macro to print out the name of a type
+ node.
+
+ * stab.def: Correct errors in table for values of DSLINE and
+ BSLINE. Document the conflict between BROWS and BSLINE. Document
+ the value of the BROWS field.
+
+Tue Jul 2 23:26:20 1991 Michael Meissner (meissner at pogo.gnu.ai.mit.edu)
+
+ * mips-tfile.c (toplevel): Add a comment explaining the MIPS ECOFF
+ file format at the start of the file.
+
+Tue Jul 2 14:00:39 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_array_ref): Report error here if the "array"
+ is not an array or pointer. Don't leave this for the PLUS_EXPR.
+
+ * cccp.c: Inlcude containing file names/lines in error messages.
+ (print_containing_files): New function.
+ (error*, warning): Call it.
+ (finclude): Increment input_file_stack_tick when file changes.
+
+ * cccp.c: Include descrip.h.
+
+Tue Jul 2 07:44:19 1991 Tom Wood (wood at geech.gnu.ai.mit.edu)
+
+ * tm-m88k.h (ASM_OUTPUT_SOURCE_LINE): Define only for SDB.
+ * tm-m88kdgux.h (AS_BUG_*): Support these for now.
+
+ * c-decl.c (finish_struct): Invoke dwarfout_output_tagged_type
+ only when producing DWARF debugging info.
+ * cplus-class.c (finish_struct): Ditto.
+
+Mon Jul 1 23:03:34 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * toplev.c (compile_file): Close stack_reg_dump_file iff STACK_REGS.
+
+Mon Jul 1 15:17:57 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (set_significant): Ignore CLOBBERs.
+ (simplify_and_const_int, case SUBREG): Only ignore paradoxical SUBREGs
+ if BYTE_LOADS_ZERO_EXTEND.
+ (record_value_for_reg): Fix typo; had I for REGNO.
+
+Mon Jul 1 08:28:09 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * final.c (output_source_line): Output DWARF line numbers.
+
+ * dwarfout.c (dwarfout_output_tagged_type): New function.
+ * c-decl.c (finish_struct): Call it.
+ * cplus-class.c (finish_struct): Call it.
+
+ * dwarfout.c (includes): Need insn-config.h and reload.h.
+ (location_attribute): Use eliminate_regs for correct expression.
+ (output_bound_representation): Use SAVE_EXPR_RTL to get rtl and
+ then use eliminate_regs.
+
+ * reload1.c (reload): When finished, indicate reg_equiv_constant
+ and reg_equiv_memory_loc are no longer valid.
+ (eliminate_regs): Don't attempt use of reg_equiv_constant or
+ reg_equiv_memory_loc if they aren't valid. No longer static.
+ * reload.h: Declare eliminate_regs.
+
+ * toplev.c (compile_file): Only call dwarfout_file_scope_symbol
+ for VAR_DECLs.
+
+Sun Jun 30 15:49:39 1991 Ken Raeburn (raeburn at watch.com)
+
+ * expr.c (expand_builtin, case BUILT_IN_MEMCPY): If alignment test
+ fails, and function was really BUILT_IN_STRCPY, zero out length
+ parameter before expanding call.
+
+Sun Jun 30 18:27:14 1991 Richard Kenner (kenner at vlsi1.ultra.nyu)
+
+ * jump.c (jump_optimize): In "if (...) x = a; else x = b;", don't
+ move the "x = b;" if the test modifies X or if X is a hard register
+ and SMALL_REGISTER_CLASSES is defined.
+ Turn "if (...) x = 1; else {...} if (x) ..." code on when we have cc0.
+
+Sun Jun 30 13:49:03 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * gnulib2.c (__builtin_saveregs):
+ For i860, make data structure fit in with va-i860.h.
+
+ * tree.c (gcc_obstack_init):
+ Support OBSTACK_CHUNK_ALLOC and OBSTACK_CHUNK_FREE.
+
+ * calls.c (prepare_call_address): 3rd arg now address of chain var.
+ (expand_call): Call changed.
+ * expr.c (emit_library_call): Call changed.
+
+ * function.c (fix_lexical_addr): In recursive call, pass slot address.
+
+ * Makefile.in (cse.o): Added deps.
+
+ * Makefile.in (GNULIB2_CFLAGS): Use -O2.
+
+ * gnulib1.c, gnulib2.c (abort): Undefine only if defined.
+
+ * genattr.c (main): Fix typo in comment end.
+
+Sat Jun 29 21:57:28 1991 Torbjorn Granlund (tege at zevs.sics.se)
+
+ * longlong.h (__sparc8__ umul_ppmm): Insert 3 nop:s for wr delay.
+ * longlong.h (___IBMR2__): Define umul_ppmm, add_ssaaaa, sub_ddmmss..
+ * longlong.h (__sparc__): Don't call .umul; expand asm instead.
+ Don't define __umulsidi3 (i.e. use default definition).
+
+Sat Jun 29 06:25:19 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * tm-vax.h (CPP_SPEC): New macro.
+ (LIB_SPEC): Handle -mg.
+
+ * cccp.c (install_builtins): Fix backward test of objc.
+
+ * fold-const.c (size_int): No need to test sign of NUMBER.
+
+ * gcc.c (process_command): Split -L from its arg.
+
+ * gcc.c (S_ISREG): Define if not defined.
+ (delete_temp_files): Use it.
+
+ * limits.h (UCHAR_MAX, CHAR_MAX, USHRT_MAX): Delete `U'.
+ (LONG_MAX, ULONG_MAX): Add `L'.
+
+Fri Jun 28 22:22:58 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * Makefile (realclean): Delete stage1, stage2, stage3.
+
+ * gcc.c (fatal) [HAVE_VFPRINTF]: Do print program name.
+
+Fri Jun 28 15:34:08 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * out-sparc.c (output_block_move): Correctly handle the case where
+ the size is not a CONST_INT, and has a value of 0.
+
+ * flags.h (flag_no_inline): Modify comment to match the one in
+ toplev.c.
+
+ * integrate.c (copy_rtx_and_substitute): When creating new rtx,
+ make sure all of the new bitfields are copied, e.g.
+ REG_LOOP_TEST_P, LABEL_OUTPUT_LOOP_P, etc.
+
+ * loop.c (loop_optimize): Call reg_scan after
+ find_and_verify_loops, because it may change register lifetimes.
+ (find_and_verify_loops): After moving a block of code outside the
+ loop, must readjust the loop_number_exit_label and
+ LABEL_OUTSIDE_LOOP_P data of the modified jump and the moved jump.
+ toplev.c (rest_of_compilation): Delete reg_scan call before
+ loop_optimize.
+
+Fri Jun 28 13:16:37 1991 Michael Meissner (meissner at osf.org)
+
+ * tm-mips.h (toplevel): Add target_flags to externals declared.
+ (toplevel): Add dslots_number_nops, mips_load_reg{,2},
+ mips_fill_delay_slot external declarations for delay slot reorg.
+ (CC1PLUS_SPEC): By default, pass -fno-gnu-binutils to cc1plus.
+ (TARGET_FLAGS): Add -mwc8, -mwc16, -mwc32 to set size of wchar_t,
+ though the switches are not used right now.
+ (TARGET_FLAGS): Add -msoft-float code from rfg@ncd.com to compile
+ on systems w/o floating point.
+ (TARGET_FLAGS): -mdebugf suppresses filling load delay slots.
+ (HARD_REGNO_OK): Relax constraints, allow anything in GP
+ registers, anything in even FP registers, int's only in multiply
+ and divide registers, int/CC in the FPSW register.
+ (FRAME_POINTER_REQUIRED): Require frame if alloca is called for
+ now.
+ (REG_CLASS_FROM_LETTER): Index from an array (mips_char_to_class)
+ instead of having lots of ?:'s. Also, allow 'd' to signify GP
+ registers.
+ (ENCODE_SEGMENT_INFO): Only record things being in small data/bss
+ if -mgpOPT (-O sets by default), -O, and -G xx where xx > 0.
+ (FINAL_PRESCAN_INSN): Rework to automatically not fill the
+ previous instruction's load delay slots with nop's if it is safe.
+ (ASM_OUTPUT_LABEL): If compiling collect, don't use assemble_name.
+ (ASM_GLOBALIZE_LABEL): If compiling collect, don't use
+ assemble_name.
+ (ASM_OUTPUT_LABELREF_AS_INT): Define this for collect.
+ (ASM_OUTPUT_INT): If collect, don't use output_addr_const.
+
+ * mips.md (all floating point): If -msoft-float, don't allow any
+ floating point builtin operations.
+ (all patterns): Use 'd' constraint to limit things to GP
+ registers, rather than 'r'. This allows unions of
+ float/int/double to occupy any registers.
+ (*extend*): Call mips_move_1word to handle loads, which in turn
+ sees if we can omit the load nop.
+ (fix_trunc*): Redo, since register allocator can handle moving to
+ the appropriate register set.
+ (movdf_xfer*): Use explicit return's instead of falling through
+ and having the appropriate value in a register from the previous
+ call.
+ (movsf_xfer*): New patterns to accomidate unions of floats and
+ int's.
+ (movsi_unaligned): New define_expand to call either movsi_ulw or
+ movsi_usw. Also, if not a memory operation, use movsi.
+ (movsi_ulw): Set up to omit load delay nop if we can.
+ (movsi_usw): Use memory_operand instead of simple_memory_operand.
+ Also, allow storing 0 to an unaligned location.
+ (various move patterns): mips_move_1word now takes a third
+ argument to specify whether a load should sign or zero extend.
+ (call_value): Use register_operand on return value.
+ (probe): Turn into define_expand, and set a register to the
+ contents of memory pointed to by the stack pointer with volatil
+ set.
+
+ * out-mips.c (toplevel): Add new global variables:
+ dslots_number_nops, mips_load_reg{,2}, mips_regno_to_class,
+ mips_char_to_class.
+ (simple_memory_operand): If not optimizing, no global memory
+ reference is assumed to be in the GP area.
+ (mips_fill_delay_slot): New function to tell FINAL_PRESCAN_INSN
+ the current insn is a load and may need a nop.
+ (mips_move_1word): Take a third argument to say whether load byte
+ and load half-word sign extend or zero extend. Change all
+ callers. If this is a load, call mips_fill_delay_slots to
+ schedule the nops. Change all return's to setting a variable, and
+ falling through to the end.
+ (mips_move_2words): If this is a load, call mips_fill_delay_slots
+ to schedule the nops. Change all return's to setting a variable,
+ and falling through to the end.
+ (function_arg): if -msoft-float, floating point is passed in GP
+ registers.
+ (override_options): Initialize mips_char_to_class.
+ (print_operand): %( and %) no longer do .set nomacro.
+ (print_operand): %# prints #nop if gas or -mstats.
+ (print_operand): Check for too many %), %], and %>'s.
+ (compute_frame_size): Allocate space in stack to hold FP, just in
+ case we later need a FP and previously thought we could eliminate
+ it.
+ (save_restore): Take a string to indicate the 2word load/store to
+ use, but don't use it at present. Change all callers. Home
+ varargs registers with sd if we can.
+ (function_epilogue): Deal with one or more outstanding nop's from
+ FINAL_PRESCAN_INSN.
+ (function_epilogue): Revamp -mstats output format.
+ (function_epilogue): Zero new global variables.
+
+ * make-decrose (toplevel): Sort make variables.
+ (CLIB): Add -lld library.
+ (LANGUAGES): Add build of collect-osf and g++.
+ (ULTRIX_DIR): Change internal work directory location.
+ (cplus-lex.o): Don't optimize to avoid problem with 1.39 compiler.
+ (collect-osf): Add rules to build OSF/rose version of collect.
+
+ * make-mips (LANGUAGES): Add build of g++.
+
+ * tm-decrose.h (SIZE_TYPE): Specify to be long unsigned int.
+ (PTRDIFF_TYPE): Specify to be long int.
+ (WCHAR_TYPE): Specify to be long unsigned int.
+
+ * sdbout.c (plain_type_1): Add support for unknown tags if
+ SDB_ALLOW_UNKNOWN_REFERENCES is defined. The MIPS ECOFF support
+ needs this, but standard COFF typically doesn't allow unknown
+ references.
+
+ * gcc.texinfo (Debugging Info): Document
+ SDB_ALLOW_UNKNOWN_REFERENCES and SDB_ALLOW_FORWARD_REFERENCES.
+
+ * collect-osf.c (whole file): New file to provide collect support
+ on OSF/rose.
+
+Fri Jun 28 09:20:18 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * configure (m88k-luna): New target.
+ * tm-m88kluna.h: New file for the Omron Luna/88k.
+ * xm-m88k.h: Don't use USG for the luna88k.
+
+ * tm-m88kdgux.h: DG/UX implements coff and elf. Currently elf is
+ a strange variant of coff that's non-standard (it uses SDB
+ debugging info for example). Soon, the DG/UX elf will support
+ DWARF. These changes provide transitional support for all three.
+ (DWARF_DEBUGGING_INFO, SDB_DEBUGGING_INFO): Define both.
+ (VERSION_0300_SYNTAX): True when -msvr4 and -mversion-03.00.
+ * tm-m88ksvr4.h (ASM_FILE_END, ASM_OUTPUT_DWARF_LINE): Move these
+ to tm-m88k.h. They are dwarf specific.
+ * tm-m88k.h (TARGET_SWITCHES): Add -mversion-03.00 and -mdwarf.
+ (OVERRIDE_OPTIONS): If using version 03.00 syntax, assume DWARF_DEBUG.
+
+ * tm-m88k.h (REG_ALLOC_ORDER): Adapt slightly for using r26-r29.
+
+ * out-m88k.c (m88k_debugger_offset): Don't complain if the base
+ register is optimized away.
+
+Thu Jun 27 21:43:36 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * local-alloc.c (memref_referenced_p, memref_used_between_p):
+ New functions.
+ (update_equiv_regs): Call memref_used_between_p.
+
+Thu Jun 27 19:59:36 1991 Ken Raeburn (raeburn at watch.com)
+
+ * print-tree.c (print_node): Changed the various "lang_#" strings to
+ indicate which of several possible fields are being examined; new
+ strings are "tree_#", "decl_#", "type_#".
+
+Thu Jun 27 15:05:43 1991 Michael Meissner (meissner at churchy.gnu.ai.mit.edu)
+
+ * xm-mips.h (ONLY_INT_FIELDS): Define if not compiling with GCC
+ since the MIPS compiler treats enum bitfields as signed.
+
+Wed Jun 26 19:48:16 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * sched.c (memrefs_conflict_p): Explicitly handle case where both
+ X and Y are CONST.
+ (sched_analyze_2): Do create dependencies for insns with REG_EQUIV
+ notes.
+ (sched_note_set): Correctly handle the case where the destination
+ register is a multi-word hard register.
+ (attach_deaths): Don't add a REG_DEAD note to an insn with a
+ REG_UNUSED note that mentions the same register. Correctly handle
+ the case where the destination register is a multi-word hard
+ register.
+ (schedule_block): Also call sched_note_set for CLOBBERs when
+ computing which registers are dead at the end of the basic block.
+ Also call sched_note_set for USEs when computing what registers
+ are still live after a just scheduled insn.
+ (regno_use_in): New function, subroutine of split_hard_reg_notes.
+ Searches an rtx for any reference to the given register, and
+ returns the register rtx used if any.
+ (split_hard_reg_notes): New function. Handles the case where a
+ multi-word hard register with a REG_DEAD note gets split. Creates
+ a new REG_DEAD note for each part of the original hard register
+ used by the split insns.
+ (new_insn_dead_notes): Don't add a REG_DEAD note to an insn with a
+ REG_UNUSED note which mentions the same register.
+ (update_links): Add call to new function split_hard_reg_notes.
+ Correctly handle the case when the dest of the original insn was a
+ multi-word register which was split in the split insns. In this
+ case, the dest is no longer killed here, so must remove the
+ REG_DEAD on the last previous insn in this basic block which used
+ dest, if any such exists.
+
+ * unroll.c (reg_dead_after_loop): Check that a CODE_LABEL which is
+ the target of a JUMP_INSN has a non-zero PREV_INSN field before
+ trying to derefence it. Fail if there is no previous insn.
+
+ * loop.c (scan_loop): Fix typo.
+ * local-alloc.c (optimize_reg_copy): Likewise.
+ * global-alloc (hard_reg_copy_preferences): Likewise.
+ * gcc.texinfo (REG_LOOP_TEST_P): Likewise.
+ * optabs.c (expand_float): Likewise.
+ * tm-vaxv.h (ASM_OUTPUT_ASCII): Likewise.
+
+ * out-sparc.c (output_move_double): Sign extend CONST_INTs that
+ feed DImode targets.
+ * tm-sparc.h (GO_IF_LEGITIMATE_ADDRESS): Don't accept a LABEL_REF
+ as a legal address. Also, delete obsolete parts of preceeding
+ comment.
+
+ * reload1.c (alter_reg): Only try to delete the reg_equiv_init
+ insn if it hasn't already been deleted by a previous call to
+ delete_dead_insn.
+
+ * toplev.c (main): Handle -gdbx in addition to -gsdb for
+ orthogonality.
+ * gcc.texinfo: Document -gdbx.
+
+Tue Jun 25 09:57:08 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md (casesi): Don't emit a barrier; the dispatch code must
+ adjoin the table.
+ * tm-m88k.h (DONT_REDUCE_ADDR): Don't use this.
+ (CONDITIONAL_REGISTER_USAGE): The PIC register is also call-used.
+ * out-m88k.c (m88k_layout_frame): Save the PIC register.
+
+Tue Jun 25 07:40:43 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * function.c (expand_function_end): FNDECL should
+ be CURRENT_FUNCTION_DECL.
+
+ * combine.c (find_split_point): If we see an AND operation as the
+ first operand of some non-AND operation, use it as a split point.
+ (subst): Add counter to limit restarts, go to restart more often.
+ (subst, case AND): If we get (ior (and (X C1) C2)) and can't
+ restart more than once, rewrite with C1 as small as possible and exit.
+
+ * cse.c (cse_end_of_basic_block): Don't put branch in our path more
+ than once.
+ (cse_main): Clear PATH_SIZE when skipping a block.
+ (cse_basic_block): Use GET_RTX_CLASS.
+
+Tue Jun 25 07:39:29 1991 Matthew Self (mself at next.com)
+
+ * varasm.c (const_hash, compare_constant_1, record_constant_1):
+ For ADDR_EXPR's, don't hash address of SYMBOL_REF. Only use
+ offset and name of symbol. This allows constructors which
+ contain pointers to identical string literals to be uniqued.
+
+ * loop.c (loop_optimize, init_loop): Moved call to
+ gcc_obstack_init() from loop_optimize() to init_loop().
+
+ * reload1.c (reload, init_reload): Moved call to
+ gcc_obstack_init() from reload() to new function init_reload().
+
+ * toplev.c (compile_file): Call new function init_reload().
+
+Mon Jun 24 16:05:57 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * stmt.c (expand_end_stmt_expr): Fix typo in comment.
+
+ * reload1.c (modes_equiv_for_class_p): Only fail if registers in
+ CLASS that can hold ALLOCATE_MODE can't also hold OTHER_MODE. Do
+ not fail for the reverse test. ALLOCATE_MODE is always a larger
+ or same size mode as OTHER_MODE, and will be the mode that reload
+ uses when allocating spill registers. Rewrite comments to explain
+ new behaviour.
+ (reload): Change call to modes_equiv_for_class_p to match new
+ semantics.
+
+ * combine.c (simplify_shift_const): When simplifying (ashiftrt
+ (ashift inner_const_int) const_int), was checking the wrong number of
+ high order bits of inner_const_int. Also correct typos in comments.
+
+ * c-convert.c (convert_to_integer): Must also check ARG1 for
+ unsignedness, because ARG0 could be a constant when EXPR is a
+ MINUS_EXPR.
+
+ * combine.c (try_combine): When splitting, it is not safe to use
+ I2DEST if it is referenced by NEWPAT.
+
+ * combine.c (distribute_notes): After converting REG_DEAD notes to
+ REG_UNUSED notes, clear PLACE if it already has a REG_UNUSED note,
+ to prevent adding a duplicate REG_UNUSED note.
+
+ * gcc.texinfo (SIGNED_CHAR_SPEC): Document.
+
+Mon Jun 24 10:02:32 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_set_around_loop): Ensure the insn we find in front
+ of the loop does the set in the proper mode.
+
+ * optabs.c (expand_float): Always do conversions to FMODE in the
+ signedness of the input.
+
+ * reload.c (find_reloads, find_reloads_toplev): If reg_equiv_address
+ is not a constant address, copy it in case it is shared.
+
+ * reload1.c (eliminate_regs): Copy reg_equiv_memory_loc in case
+ it is shared and we make a reload inside it.
+
+ * stupid.c (stupid_mark_refs): Registers that aren't used must die
+ in the insn after their birth so they conflict with other outputs.
+
+ * vax.md: Replace patterns to convert (and (ashiftxx))
+ into (and (rotatexx)) with the patterns that are actually made
+ by combine.
+ We can allow offsettable addresses for operand 0 and it is not
+ early-clobber.
+
+ * out-rs6000.c (secondary_reload_class): Correctly interpret result of
+ true_regnum.
+
+ * out-rs6000.c (output_toc): Write FP constants in TOC.
+ * tm-r6000.h (TARGET_FP_IN_TOC): New flag.
+ (TARGET_SWITCHES): Add -mfp-in-toc and -mno-fp-in-toc.
+ (TARGET_DEFAULT): -mfp-in-toc is the default.
+ (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): FP constants may be put in the TOC.
+
+Mon Jun 24 00:52:44 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * out-i386.c (output_fix_trunc): If the dest operand mentions the
+ stack pointer, then we must adjust it to account for the temporary
+ space we allocate on the stack here.
+
+Sat Jun 22 07:24:33 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_set_around_loop): Fix typo in call to note_mem_written.
+
+ * emit-rtl.c (reorder_insns): Correctly handle case when AFTER is last
+ insn.
+
+ * expr.c (expand_expr, case COND_EXPR): Correctly handle X ? A : X + 1.
+ Previous change called invert_truthvalue which can modify EXP; we now
+ call it a second time to undo its action if do_store_flag fails.
+
+Sat Jun 22 02:37:59 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * cse.c (cse_set_around_loop): Don't try to initialize an
+ automatic structure.
+
+ * reg-stack.c (compare_for_stack_reg): If both operands to a
+ compare are the same stack reg, don't process death on the second.
+
+ * i386.md (all float patterns): Don't allow constants in the
+ operand predicates.
+ (all patterns using convert_387_op): Split patterns into one using
+ FLOAT and another using FLOAT_EXTEND.
+
+Fri Jun 21 20:37:03 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * sched.c (line_note, line_note_head): New vectors for use when
+ dealing with line-number notes.
+ (unlink_notes): Put line-number notes in LINE_NOTE for reuse.
+ (schedule_block): Just before reordering the insns, walk the insns
+ and record the line-number note in effect for each one. When
+ reordering is complete, restore the line-number notes as needed.
+ (schedule_insns): When debugging information is present, allocate
+ and initialize line_note and line_note_head. After scheduling,
+ walk the insns to delete redundant line-number notes.
+
+Fri Jun 21 19:54:29 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * old-sparc.c, out-old-sparc.c, tm-old-sparc.h: Delete obsolete
+ files.
+
+ * loop.c (loop_number_exit_labels): Expand comment. Mention that
+ returns are not included because all bivs and givs are pseudos and
+ hence must be dead after a return.
+
+Fri Jun 21 07:10:56 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (subst, case PLUS, MINUS): Remove cases for things like
+ (x-y)+y; now done in simplify_binary_operation.
+ * cse.c (simplify_unary_operation): Handle (sign_extend (truncate ..))
+ as used in casesi patterns.
+ (simplify_binary_operation, case PLUS, MINUS): Don't do most
+ simplifications if IEEE floating-point.
+ Add cases for things like (x-y)+y.
+ (fold_rtx): Replace PC with LABEL_REF if we are immediately in
+ front of a jump table.
+ Move code to apply associative law to after we have folded the
+ operands.
+ (fold_rtx, case MEM): Fix errors in checking for index of jump
+ table being out of range.
+ For ADDR_DIFF_VEC, return a MINUS or (truncate (minus L1 L2)).
+ (fold_rtx, case PLUS): If we have (plus X (label_ref L)), see
+ if X is equivalent to (minus L1 L2).
+ (cse_insn): Put (minus L1 L2) in `src_const' so it gets in a
+ REG_EQUAL note and gets put in the hash table.
+ If we are branching to a jump table, we are really branching to
+ immediately after the jump table
+ Remove special-case kludge for ADDR_DIFF_VEC; now handled properly.
+
+ * vax.md (casesi): Make pattern agree with machine instruction;
+ specifically, index is multiplied by two and the comparison is LEU,
+ not LE.
+
+ * cse.c (equiv_constant): If X is a one-word SUBREG of a larger
+ quantity, use `lookup_as_function' to see if it is equivalent
+ to a CONST_INT.
+
+ * jump.c (squeeze_notes): No longer static.
+ * loop.c (find_and_verify_loops): Need to call squeeze_notes when
+ moving block of code (see last change).
+
+ * reload.c (find_reloads): When forcing constant to memory,
+ set recog_operand to the result of find_reloads_toplev.
+
+ * combine.c (subst, case PLUS): Add (c1 - a) + c2 -> (c1+c2) - a.
+ (subst, case MINUS): Use simplify_binary_operation rather than
+ making CONST_INT from subtraction of two INTVAL's to ensure it
+ gets truncated as appropriate for its mode.
+ Add (c1 - (c2 - a)) -> (c1-c2) + a.
+
+ * a29k.md (negdf2): Use operand_subword_force, not operand_subword.
+ (movsf): Use operand_subword, not gen_lowpart.
+
+ * out-rs6000.c (u_short_cint_operand): New function.
+ (print_operand): Support auto-decrement.
+
+ * tm-rs6000.h (OVERRIDE_OPTIONS): Force profiling off.
+ (PREFERRED_RELOAD_CLASS): Return NO_REGS for real CONST_DOUBLE.
+ (HAVE_PRE_DECREMENT): Define this.
+ (GO_IF_LEGITIMATE_ADDRESS, GO_IF_MODE_DEPENDENT_ADDRESS):
+ Support PRE_DEC.
+
+ * rs6000.md (zero_extendxx): Use rlinm, not andil so we avoid
+ clobbering cr0.
+ (arith-and-record patterns): Correct some bad operand numbers.
+ Put SImode output as operand 0 to improve register tying.
+ (andsi): Prefer rlinm over andil and andiu.
+ (load/store-with-update): Add patterns for these instructions.
+ (allocate_stack): New, replaces stack probe.
+ (add-and-compare): New patterns, with define_split.
+ (subtract-one-and-jump): Allow outputs anywhere; handle with
+ match_scratch and define_split.
+
+ * stmt.c (expand_end_stmt_expr): If `last_expr_value' is 0, set it
+ to const0_rtx.
+
+ * regclass.c (reg_n_sets): Move definition to before use.
+
+ * jump.c (find_cross_jump): Don't try to substitute REG_EQUAL
+ values unless they are constants.
+
+Fri Jun 21 02:37:59 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * reload1.c (reload): Don't clear after_call for each insn.
+
+Sun Jun 16 17:28:43 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * reload1.c (reload, reload_as_needed, choose_reload_regs): Enable
+ code to avoid return register when SMALL_REGISTER_CLASSES defined.
+
+ * final.c (final_scan_insn): Don't look for no-op moves if
+ processor has STACK_REGS.
+
+ * hard-reg-set.h (GO_IF_HARD_REG_EQUAL): New macro.
+
+ * jump.c (cross_jump_death_matters): New variable.
+ (find_cross_jump): If processor has STACK_REGS, compare death
+ notes if they matter.
+
+ * toplev.c (compile_file, rest_of_compilation): Support new
+ stack-regs conversion pass.
+ (main, compile_file, rest_of_compilation): Add support for -dk to
+ dump after stack-regs conversion.
+ * reg-stack.c: New file. Implements stack-regs conversion pass.
+ * Makefile.in (reg-stack.o): New file.
+
+ * tm-i386.h (STACK_REGS): New macro.
+ (all register macros): Define all eight float point registers.
+ (HARD_REGNO_NREGS): Only one float reg is needed for any mode.
+ (HARD_REGNO_MODE_OK): Move code here from out-i386.c.
+ (FIRST_STACK_REG,LAST_STACK_REG): New macros.
+ (ARG_POINTER_REGNUM): Move to reg 16.
+ (FP_REGNO_P): Recognize all float regs.
+ (QI_REG_P): New macro.
+ (STACK_REG_P,NON_STACK_REG_P,STACK_TOP_P): New macros.
+ (PRESERVE_DEATH_INFO_REGNO_P): Delete.
+ (OVERLAPPING_REGNO_P): Delete.
+ (CONST_OK_FOR_LETTER_P): Recognize constant mask for byte or word.
+ Recognize constant 0..3 for `lea' shifts.
+ (CONST_DOUBLE_OK_FOR_LETTER_P):
+ (PREFERRED_RELOAD_CLASS): Don't put CONST_DOUBLE in float regs.
+ QImode must go in class Q_REGS. Float regs can't hold MODE_INT.
+ (MOVE_RATIO): New macro.
+ (SHIFT_COUNT_TRUNCATED): Delete. Bit opcodes don't truncate.
+ (RTX_COSTS): New macro.
+ (CONST_COSTS): Make constants cheaper.
+ (QI_HIGH_REGISTER_NAMES): Renamed from QI_REGISTER_NAMES_TOP.
+ (INSN_CLOBBERS_REGNO_P): Delete.
+ (FP_TOP,RETCOM,POP_ONE_POP,FP_CALL1,FP_CALL): Delete.
+
+ * out-i386.c (fp_pop_level): Delete.
+ (fp_call_internal, output_asm_insn_double_reg_op, via_memory,
+ fp_store_sf,fp_pop_sf,fp_store_df,fp_pop_df,fp_pop_int,
+ fp_push_sf,fp_push_df,output_movsf,output_movdf,output_movf,
+ top_dead_p,call_top_dead_p,fp_top_dead_p1,mentioned_fp_top): Delete.
+ (hard_regno_mode_ok): Moved to tm-i386.h.
+ (qi_high_reg_name): New variable.
+ (output_op_from_reg, output_to_reg): New function.
+ (singlemove_string,output_move_const_single): No longer static.
+ (singlemove_string): Use correct operand number in `push' string.
+ (standard_80387_constant_p): Use recommended method to extract
+ float from CONST_DOUBLE.
+ (PRINT_REG): Add 'h' for "high" register names, 'y' for "st(0)".
+ (print_operand): Code 'z' prints no size suffix for stack regs.
+ Print DImode suffix as "ll", not just "l".
+ (output_fix_trunc): New argument `insn'. Generalize to output to
+ MEM or REG. Return "char *" like other output routines.
+ Generalize for SImode or DImode output.
+ (binary_387_op,convert_387_op,float_op,fix_op,shift_op): New
+ match_operator predicates.
+ (output_387_binary_op,output_float_compare): New functions.
+
+ * i386.md (all MODE_FLOAT patterns): Replace with new code to use
+ all FPU registers.
+ (all patterns): Use AS2 and AS1 macros where possible, for
+ eventual support of Intel syntax output.
+ (tstM): Don't initialize operands unless we need to.
+ (cmpM): Choose operange order in output for speed on i386.
+ (logical test patterns): The operands commute. If possible,
+ SImode tests should use just QImode.
+ (movstrictM): New patterns.
+ (movqi): Don't allow a constant of unknown value into Q_REGS.
+ (`lea' pattern): Move after addsi3.
+ (addsi3): Do three operand adds with `lea'.
+ (divsi3,divhi3,udivsi3,udivhi3): Delete in favor of u?divmodM4.
+ (divqi3,udivqi3): Remove earlyclobber for operand 0.
+ (andM3): Define three operand ANDs for 255 and 65535 using zero
+ extend opcode. Also directly do an AND in the second byte of a
+ register.
+ (iorM3,xorM3): Do byte ior instead of word where possible.
+ (xorqi3): Allow operands[2] from MEM.
+ (ashlsi3): Allow three-operand shift of 0..3 with `lea' opcode.
+ (lshlM3): Redundant, delete.
+ (shift & rotate patterns): Print %0 as destination operand.
+ (bit recognizers): New patterns to set, clear and compliment.
+ (call insns): Use "%P" code for targets to support Intel syntax.
+ (movstrsi): Express changes to the operands instead of just
+ clobbering them. Don't accept non-constant move count, as our
+ code isn't as efficient as a library call.
+
+Thu Jun 20 13:51:02 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_insn): If we fold a conditional or computed branch to an
+ unconditional branch, it is now not in the normal format for an
+ unconditional branch, and it only has one set, delete it and
+ re-emit it.
+ Whenever we make an unconditional branch, set `cse_skip_to_next_block'
+ and do nothing else.
+ (cse_basic_block): Increment LABEL_NUSES on TO if it is a label
+ so it won't go away while we are using it as a stopping point.
+ If we are done with this block (`cse_skip_to_next_block' nonzero),
+ pretend we just did the insn before TO.
+ Decrement LABEL_NUSES of TO if it is a label; if it became zero,
+ delete it and try to extend the basic block.
+
+ * reload.c (find_reloads): Fix typo in check for no alternatives
+ found.
+
+ * combine.c (reg_significant, significant_mode): New vars.
+ (combine_instructions): Allocate and initialize reg_significant.
+ (set_significant): New function.
+ (significant_bits, case REG): Use reg_significant, if non-zero
+ as the significant bits of a register.
+
+ * loop.c (n_times_set): Define -2 to mean that a register is
+ an candidate to be moved and is a constant.
+ (scan_loop): Set n_times_set to -1 or -2 as appropriate.
+ (regs_match_p): No need to check REG_FUNCTION_VALUE_P.
+ A register and a constant can be equal if the register is known
+ equivalent to the constant.
+ (invariant_p): Check n_times_set < 0, not == -1.
+
+ * rtl.h (REG_LOOP_TEST_P): New macro.
+ * jump.c (duplicate_loop_exit_test): Mark registers used only in
+ loop exit test.
+ * cse.c (cse_around_loop, cse_check_loop_start, cse_set_around_loop):
+ New functions.
+ (cse_end_of_basic_block): Add new arg to say if we are being called
+ after loop.c has run; if we are being called after loop.c, we can
+ ignore NOTE_INSN_LOOP_ENDs.
+ (cse_main): Accept new AFTER_LOOP arg; pass to cse_end_of_basic_block.
+ If we are called before loop.c, see if we can cse around to the
+ start of a loop.
+ * toplev.c (rest_of_compilation): Tell cse_main if it is being called
+ before or after loop.c.
+
+ * rtl.h (LABEL_OUTSIDE_LOOP_P): New macro.
+ * loop.h (uid_loop_num): Renamed from luid_loop_num and now
+ maps INSN_UID to loop number instead of INSN_LUID.
+ * loop.c (loop_optimize): Modifications for the above.
+ (find_and_verify_loop): Change luid_loop_num to uid_loop_num.
+ Look for blocks of code ending in an unconditional branch out
+ of the loop surrounded by a conditional branch and try to move
+ such a block out of the loop.
+ (mark_loop_jump): Change luid_loop_num to uid_loop_num.
+ Mark all LABEL_REFs that are outside the current loop, for
+ branch prediction.
+ (strength_reduce, check_dbra_loop): Change luid_loop_num to
+ uid_loop_num.
+ * unroll.c (unroll_loop, find_splittable_{regs,givs}): Likewise.
+ (reg_dead_after_loop, final_{biv,giv}_value): Likewise.
+
+ * flow.c (reg_n_sets): Don't define this here.
+ * regclass.c (reg_n_sets): Define it here.
+ (reg_scan): Allocate and initialize reg_n_sets.
+ (reg_scan_mark_refs): Count sets of a register in reg_n_sets.
+
+ * sched.c (reg_known_value_size): New variable.
+ (canon_rtx): Don't look in reg_known_value outside its allocated space.
+ (init_alias_analysis): Initialize reg_known_value_size.
+
+ * loop.c ({unknown,fixed}_aggregate_altered): Deleted.
+ (loop_store_mems): Replaces loop_store_addrs and loop_store_widths.
+ (loop_optimize): Call init_alias_analysis.
+ (prescan_loop, note_addr_stored): Save all MEMs stored into, rather
+ than just those that appear fixed; save MEMs rather than addresses
+ and widths.
+ (invariant_p): Use true_dependence to see if a MEM is invariant;
+ compare it with all MEMs stored during the loop.
+
+ * sched.c (memrefs_conflict_p): If XSIZE or YSIZE is zero
+ the object conflict if they have the same base, irregardless
+ of the offsets.
+
+ * reorg.c (dbr_schedule): Reallocate unfilled_firstobj after
+ freeing memory from the obstack.
+
+ * reload.c (push_reload): Always reload object inside SUBREG if
+ STRICT_LOW_PART is present.
+ Always set RELOAD_STRICT_LOW to zero; maybe we should get rid of it.
+
+ * reload.c (make_memloc): Copy the address if it varies to avoid
+ potential sharing problems.
+
+ * global-alloc.c (hard_reg_copy_preferences): New var.
+ (global_alloc): Allocate and initialze it.
+ (prune_preferences): Prune it.
+ (find_reg): Try preferences in hards_reg_copy_preferences first,
+ then hard_reg_preferences.
+ (set_preference): Set bit in hard_reg_copy_references, if appropriate.
+
+ * emit-rtl.c (try_split): If we are splitting a JUMP_INSN, copy
+ JUMP_LABEL from the old to new insn update the count of that label.
+
+ * cse.c (lookup): Always call exp_equiv_p unless we have a REG.
+
+ * cse.c (insert): If we are making a register equivalent to a
+ constant that was already equivalent to a constant, update
+ qty_const_insn.
+ (cse_insn): Don't do it here.
+ * cse.c (fold_rtx): Always call simplify_unary_operation.
+
+ * cse.c (record_jump_equiv): Don't get primary elements for OP0 and
+ OP1 since they might not be valid.
+
+ * loop.c (get_condition): Accept new arg, EARLIEST that is a pointer
+ to where we place the earliest insn used to form the condition.
+ Check for comparison with CC0 in main loop, not earlier.
+ Never return condition involving CC0.
+ (get_condition_for_loop): Call get_condition with new arg.
+ * jump.c (jump_optimize): When we make store-flag insn, put new
+ insns before earliest insn used to form condition and use new
+ psuedo as target, which we copy into VAR immediately after the insn
+ that currently sets VAR.
+ Turn off "if (...) x = 1; else {...} if (x) ..." code; it is not
+ correct and can't be easily fixed.
+ (get_label_{before_after}): Use {prev,next}_nonnote_insn.
+
+ * jump.c (jump_optimize): Don't interpret NOOP_MOVES as meaning
+ "after_reload"; check reload_completed instead. Don't pass NOOP_MOVES
+ to functions that aren't actually trying to noop moves.
+ (follow_jumps, tension_vector_labels): Don't accept AFTER_RELOAD arg;
+ check reload_completed instead.
+
+ * combine.c (try_combine): Don't check that we don't have a
+ single_set when trying to replace a SET_DEST in a PARALLEL in I2.
+ (simplify_and_const_int): Always do the AND in the mode passed.
+ (significant_bits, case DIV and UDIV): Nothing special known
+ about low-order bits here.
+ (simplify_shift_const, shift cases): Don't go into infinite loop if
+ we combine two shifts in the same direction.
+
+ * c-parse.y, cplus-parse.y, objc-parse.y (set_yydebug): Move to
+ end of file so we don't have a reference to yydebug after its
+ definition; also delete duplicate declaration.
+
+Thu Jun 20 09:08:21 1991 Tom Wood (wood at geech.gnu.ai.mit.edu)
+
+ * local-alloc.c (block_alloc): Fixed typo in last edit.
+
+Wed Jun 19 17:05:52 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * reload.c (push_reload): Verify reload_in[i] exists before using
+ GET_CODE on it.
+
+ * m88k.md: USE insns must be immediately before CALL_INSNs to work
+ properly, otherwise sched.c and reorg.c will not associate them will
+ the CALL.
+
+ * unroll.c (calculate_giv_inc): Accept constant increments
+ represented as a LO_SUM.
+
+ * flow.c (mark_used_regs): Don't put a REG_DEAD note on insns that
+ already have a REG_UNUSED note. This makes it consistent with
+ combine.c.
+ * combine.c (distribute_notes): If a REG_UNUSED reg is no longer
+ set by an insn, but is still used by the insn, then must convert
+ the REG_UNUSED note to a REG_DEAD note.
+
+ * gcc.c (SIGNED_CHAR_SPEC): Put ifndefs around it, so that it can
+ be overriden by a definition in the tm.h file.
+
+ * cse.c (cse_insn): Add missing third parameter to find_reg_note calls.
+
+ * tm-arm.h (INIT_CUMULATIVE_ARGS): Take LIBNAME as third argument.
+
+ * combine.c (can_combine_p): Remove extra argument in call to
+ find_reg_note.
+
+ * rtlanal.c (find_regno_note): Verify that the note contains a
+ REG before checking its REGNO.
+
+ * cse.c (canon_reg): Fix spacing/punctuation error.
+ * recog.c (constrain_operands): Likewise.
+ * tree.h: Likewise.
+ * varasm.c (Assemble function): Likewise.
+
+Wed Jun 19 13:14:22 1991 Tom Wood (wood at geech.gnu.ai.mit.edu)
+
+ * local-alloc.c (block_alloc): When counting instructions, abort if
+ a loop is detected. Improperly threaded insns are easy to produce
+ when working on the scheduler.
+
+Sat Jun 15 06:13:11 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (simplify_and_const_int, case ASHIFTRT): Avoid infinite
+ loop if simplify_shift_const doesn't do anything.
+
+Thu Jun 13 09:05:12 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md (decrement_and_branch_until_zero): Add this insn.
+
+Thu Jun 13 07:32:37 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * explow.c (plus_constant): Fix error in last change; CONST case
+ wasn't handled correctly.
+
+ * tm-m68k.h (CONST_CONSTS): Constants between -7 and -1 are cheap
+ because of subq.
+
+ * m68k.md (dbra): Operand 0 should have '+' constraint, not '='.
+
+ * expmed.c (store_fixed_bit_field): Clean up some confusion between
+ targets and results in expand_binop calls.
+
+ * local-alloc.c (optimize_reg_copy): Fix several typos relating to
+ status updating.
+ Correctly handle the case where DEST dies before SRC.
+ Fix some comments that had SRC and DEST backwards.
+
+ * combine.c (can_combine_p): Swap order of args of && to avoid
+ unnecessary calls to use_crosses_set_p.
+ (simplify_and_const_int, case SUBREG): Make code agree with comment.
+
+ * emit-rtl.c (operand_subword): Avoid compilation warning.
+
+ * expmed.c (store_fixed_bit_field): Don't use OP0 as SUBTARGET
+ if it is a MEM and -fforce_mem was specified.
+
+ * expmed.c (emit_store_flag): After scc insns, convert to wider
+ mode using unsigned conversion if STORE_FLAG_VALUE is positive.
+
+ * expmed.c (init_expmed): Use mode of size BITS_PER_WORD instead
+ of SImode.
+ (store_bit_field, extract_bit_field): Replace references to SImode
+ with MAXMODE.
+ (store_fixed_bit_field, extract_fixed_bit_field): Don't use explicit
+ modes; use get_best_mode instead.
+ (store_split_bit_field, extract_split_bit_field): Use operand_subword
+ and mode_for_size instead of making SUBREGs and using SImode.
+
+ * stor-layout.c (get_best_mode): Allow LARGEST_MODE to be VOIDmode,
+ in which case we can use any appropriate mode.
+
+Wed Jun 12 16:32:37 1991 Michael Tiemann (tiemann at pogo.gnu.ai.mit.edu)
+
+ * cplus-decl.c (init_decl_processing): Compensate for tm-sparc.h
+ change to WCHAR_TYPE handling.
+
+Wed Jun 12 10:19:13 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * tm-sparc.h (WCHAR_TYPE): Must be "short unsigned int".
+
+ * combine.c (subst, make_extraction, simplify_shift_const): Don't
+ change mode of volatile MEM; replaces similar change of June 1st.
+ * function.c (fixup_var_refs_1, optimize_bit_field): Likewise.
+ * recog.c (validate_replace_rtx_1): Likewise.
+
+Tue Jun 11 22:09:28 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * expr.c (expand_expr, case COND_EXPR): Expressions of both the form
+ X ? A + 1 : A and X ? A : A + 1 were being done, but only the former
+ was being handled correctly.
+
+Tue Jun 11 12:13:53 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * recog.c (validate_replace_rtx_1): If putting a CONST_INT in a
+ ZERO_EXTEND or SIGN_EXTEND, try to simplify the operation or fail;
+ the semantics of the operation require a non-VOIDmode argument.
+
+ * cse.c (delete_dead_from_cse): Don't delete last insn in a libcall.
+
+ * explow.c (allocate_dynamic_stack_space): Don't clobber SIZE when
+ rounding it.
+
+ * fold-const.c (fold, case COND_EXPR): Ensure we always return an
+ expression in the correct type.
+
+ * expr.c (emit_push_insn): Don't need to put X in register if it
+ is constant; operand_subword_force can do so if needed.
+
+ * reload.c (find_reloads): Simplify nested `if' statements.
+ * recog.c (constrain_operands): Likewise.
+
+ * jump.c (mark_jump_label): Fix typo (extra paren) in last change.
+
+Tue Jun 11 10:03:08 1991 Micheal Tiemann (tiemann at pogo.gnu.ai.mit.edu)
+
+ * collect2.c: New file.
+
+ * sched.c (memrefs_conflict_p): Finish removing ASHIFT case.
+
+ * emit-rtl.c (operand_subword): Change test of BITS_PER_WORD <
+ HOST_BITS_PER_WORD from compile-time to run-time.
+ * expr.c (emit_push_insn): Ditto.
+ * recog.c (constrain_operands): Ditto.
+ * reload.c (find_reloads): Ditto.
+
+ * jump.c (jump_optimize): Add `continue' after deleting INSN in case
+ where further attempts to optimize the insn are invalid.
+ (mark_jump_label): Don't crash if NEXT == 0.
+
+Tue Jun 11 09:14:05 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * out-m88k.c (legitimize_operand): New function to convert
+ CONST_DOUBLE to SFmode when possible.
+ * m88k.md (cmpdf, adddf3, subdf3, muldf3, divdf3): Use it.
+ * tm-m88k.h: Declare it.
+
+ * xm-m88k.h (OBSTACK_CHUNK_SIZE): For DG/UX at least, the default
+ value results in a perfect checkerboard.
+
+Tue Jun 11 07:23:45 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case FLOAT_EXPR, FIX_EXPR): Don't try to
+ do any partial conversions here; expand_fix and expand_float now
+ handle all modes.
+ * optabs.c (fixtab, fixtrunctab, floattab): Table now contains
+ all modes.
+ (can_fix_p, can_float_p): Use mode as index in tables.
+ (init_fixtab, init_floattab): Likewise.
+ Add support for QImode and HImode operations.
+ (expand_float): Rework to remove dependendence on specific modes.
+ Can only use REAL_VALUE_LDEXP in certain configurations.
+ (expand_fix): Likewise.
+ If can't do operation unsigned, or signed into wider mode, emit a
+ sequence that compares operand with 2**(N-1) and, if larger,
+ subtracts 2**(N-1), converts, and adds it back.
+ Protect from queue and force not memory at start.
+ * m88k.md (fixuns_truncdfsi2, fixuns_truncsfsi2): Deleted; now done
+ in expand_fix in optabs.c.
+
+ * combine.c (expand_field_assignment): Convert SET_SRC to mode of
+ INNER.
+ (simplify_shift_const, case ASHIFTRT): Don't use undefined initial
+ value of MASK.
+
+ * explow.c: Include insn-config.h, recog.h, and insn-codes.h.
+ (allocate_dynamic_stack_space): Rework to be more precise in required
+ alignment. Must maintain alignment of stack to STACK_BOUNDARY at
+ all times (it must not be momentarily misaligned) and must align
+ returned address to BIGGEST_ALIGNMENT.
+ * Makefile.in (explow.o): Show new includes.
+
+Tue Jun 11 07:22:54 1991 Matthew Self (mself at next.com)
+
+ * m68k.md: Change incorrect reference to -m68040-fp to -m68040-only.
+ Fix several spelling errors.
+
+ * m68k.md (fix_trunc*f*i2): New insn's to replace fintrz on the
+ '040. These emit a sequence of insn's to change the rounding mode
+ to round-to-zero, perform the truncation, and restore the rounding
+ mode.
+
+Mon Jun 10 09:57:31 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * c-lang.c (GNU_xref_{begin,end}): Add stub functions for xref info.
+
+ * cplus-decl.c (record_builtin_type): Add support for handling
+ builtin types' nicknames (e.g. "unsigned long" for "long unsigned
+ int").
+
+ * expmed.c (struct algorithm): Change array size from BITS_PER_WORD
+ to MAX_BITS_PER_WORD.
+ gcc.texinfo: Document MAX_BITS_PER_WORD.
+
+Mon Jun 10 07:45:17 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): When making an I1 from an I2 that is
+ a PARALLEL, give the new I1 the same INSN_UID as I2.
+
+ * recog.c (constrain_operands, case 'p'): Pass operand mode
+ (from match_operand) to strict_memory_address_p.
+
+ * m68k.md (andsi3): bclr does not set the condition codes in the
+ standard way.
+
+Sun Jun 9 11:16:24 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload.c (find_reloads): Swap preferred_class and pref_or_nothing
+ when we swap commutative operands.
+
+ * combine.c (subst, simplify_shift_const): Treat UDIV and MULT
+ with a second operand of a constant that is a power of two as the
+ appropriate shift if it feeds or is fed by a shift.
+
+ * expmed.c (expand_divmod): When searching for the best mode to
+ perform the computation, take into account the fact that we sometimes
+ do a shift, not a divide.
+
+ * expmed.c (emit_store_flag): Correctly handle "a = b < 0;" if A
+ is narrower than B.
+ Don't check for STORE_FLAG_VALUE equal to just the sign bit of
+ OP0 if the width of its mode is larger than HOST_BITS_PER_INT.
+ Use switch rather than if/elseif/elseif.
+
+ * combine.c (simplify_shift_const, shift cases): We were not forming
+ the mask correctly when VAROP is a LSHIFTRT and narrower than X;
+ simplify the mask formation by using significant_bits and
+ simplify_binary_operation.
+
+ * reload.c (make_memloc): Copy RTX_UNCHANGING_P from REG to MEM.
+ (find_reloads_address, find_reloads_address_1): Don't shortcut
+ reloading the address in reg_equiv_address; always call
+ find_reloads_address on it.
+
+ * recog.c (constrain_operands, case 'p'): Validate address if
+ testing strictly.
+
+ * out-alliant.c, out-m68k.md (output_move_double): Extraction of
+ parts of CONST_INT was backwards; these machines are words-big-endian.
+
+Sat Jun 8 12:19:26 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * sparc.md: Remove special-case shift insns which load and shift
+ memory-based operands. Combine now does this for us. Also change
+ abs patterns so that they consistently print the negation followed
+ by the mov on a single line.
+
+ * reload1.c (choose_reload_regs): Cast `enum reg_class' values to
+ `int' when using them as array indicies.
+
+ * gnulib2.c (LONG_TYPE_SIZE): Don't inherit the definition of
+ LONG_TYPE_SIZE from tm.h, since that may be target_flag-specific.
+ Instead synthesize the value from `sizeof (long)'.
+
+ * cplus-gc.c (build_m_desc): Figure out whether the i_desc should
+ constitute a defn of its type or not. Analogous to May 26 change
+ for instance variables.
+
+Sat Jun 8 07:11:26 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (simplify_and_const_int): Detect and remove redundant
+ alignment operation.
+ (significant_bits, case REG): Realize that the stack pointer might
+ be aligned.
+ (significant_bits, case PLUS, MUNUS, MULT, DIV, UDIV): Track low-order
+ bits of zero as well as high-order zero bits (so we detect alignment
+ operations).
+ (record_value_for_reg): If updating a register, try to substitute its
+ old value into the expression for better tracking of values.
+
+ * a29k.md (fmac/dmac): Delete incorrect patterns.
+
+Thu Jun 6 19:08:29 1991 Sean Fagan (sef at cygint.cygnus.com)
+
+ * final.c (output_source_line): Say we are on line number 1 if
+ sdb_begin_function_line is -1, not 0.
+
+Thu Jun 6 08:01:05 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * stor-layout.c (get_best_mode): Don't assume GET_MODE_SIZE (SImode)
+ is UNITS_PER_WORD; if SLOW_BYTE_ACCESS defined, try to return the
+ mode whose size is UNITS_PER_WORD.
+
+ * sparc.md (floatsisf2, floatsidf2): Add missing mode for
+ operand 1; use const_int_operand as predicate.
+
+ * cse.c (canon_reg): Add arg INSN; if replacing a pseudo with a hard
+ register or vice versa, use validate_change to ensure the insn
+ remains valid.
+ All callers changed; most pass zero since they validate replacement.
+ (cse_insn): Use validate_change on result of canon_reg when
+ required.
+
+ * c-common.c (combine_strings): Use WCHAR_BYTES instead of
+ UNIT_PER_WORD for the size of a wide char.
+
+ * emit-rtl.c (gen_lowpart_common): Always extract integral modes
+ from integer CONST_INTs and CONST_DOUBLEs.
+
+ * integrate.c (copy_for_inline, copy_rtx_and_substitute): Don't
+ try to extract a float from a fixed-mode CONST_DOUBLE.
+ (copy_for_inline, copy_rtx_and_substitute, restore_constants):
+ Declare target of REAL_VALUE_FROM_CONST_DOUBLE to be REAL_VALUE_TYPE.
+
+ * local-alloc.c (update_equiv_regs): Fix typo in testing
+ reg_basic_block.
+
+Wed Jun 5 09:15:09 1991 Ken Raeburn (raeburn at watch.com)
+
+ * Eliminate unneeded binding levels when overloading template class
+ names:
+ * cplus-pt.c (overload_template_name): Accept second argument
+ classlevel, indicating that new decl should be pushed into current
+ class binding level; otherwise, assume current level is okay to use.
+ Callers changed.
+ (undo_template_name_overload): New second argument classlevel
+ indicates where binding for variable was made. Callers changed.
+
+ * cplus-parse.y (structsp): Call undo_template_name_overload in all
+ appropriate cases.
+
+ * Get interface/implementation flags set properly on methods in
+ class templates, and use it:
+ * cplus-lex.c (store_pending_inline): If inside a class, walk up
+ through nested classes to top level looking for template parameters.
+ For class methods, use current interface flag settings rather than
+ flags for class.
+ (extract_interface_info): No longer static.
+ (do_pending_inlines, process_next_inline): Call
+ extract_interface_info to get interface flags set properly after
+ changing file names.
+ * cplus-pt.c (instantiate_class_template): Ditto.
+ (end_template_instantiation): Ditto.
+ (do_pending_expansions): If interface/implementation flags of
+ containing class are set, use them.
+ * cplus-tree.h (interface_unknown): Added declaration.
+
+Wed Jun 5 07:36:44 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload.c (find_reloads_address): Unshare a MEM if its address is
+ the address of a constant pool location.
+
+ * optabs.c (expand_binop): Fix typos in multi-word addition; had
+ MODE for SUBMODE.
+
+ * reload1.c (alter_reg): Correctly delete insn that makes a REG
+ equivalent to a MEM in the case where the MEM is the SET_DEST.
+
+ * a29k.md (negdf2): Add missing alternative in operands 2.
+ (movdi): Change "i" constraint to "n".
+ Split for constant integer as input; split cannot fail.
+ Correct typo in DEFINE_SPLIT (DFmode for DImode).
+ * out-a29k.c (gen_reg_or_integer_constant_operand): New function.
+
+ * configure: Fix typo in reference to tm-sun3-nfp.h.
+
+Wed Jun 5 06:56:10 1991 Matthew Self (mself at next.com)
+
+ * c-parse.y, objc-parse.y (attrib): Always pass aligned attribute
+ through. Return $1 on failure rather than NULL_TREE for consistency.
+
+ * c-common.c (decl_attributes): Warn if requested alignment is not
+ a power of two. Also warn if decl is not a VAR_DECL or a FIELD_DECL,
+ since specifying alignment makes no sense for a TYPE_DECL, and is
+ not implemented for a FUNCTION_DECL.
+
+ * c-parse.y, objc-parse.y (initdcl, notype_initdcl): Call
+ decl_attributes before finish_decl in order for alignment attribute
+ to take effect.
+
+ * varasm.c (assemble_variable): Warn if DECL_ALIGN is greater than
+ MAX_OFILE_ALIGNMENT, if defined. This allows errors to be
+ detected with formats like a.out which support a maximum alignment
+ of 4.
+
+ * c-parse.y, objc-parse.y (component_declarator): Call decl_attributes
+ with correct args.
+
+ * stor-layout.c (layout_record, layout_union): Do not clamp struct
+ alignment at BIGGEST_ALIGNMENT, since individual fields may have
+ requested greater alignment than this. This check shouldn't have
+ done anything anyway.
+
+ * c-parse.y (unary_expr): When alignof is applied to an expression,
+ call c_alignof_expr so that we can check DECL_ALIGN instead of calling
+ c_alignof (TYPE_ALIGN (TREE_TYPE (expr))).
+
+ * c-typeck.c (c_alignof_expr): New function to compute alignof for
+ expr's. Returns DECL_ALIGN for VAR_DECL's and FIELD_DECL's. Also
+ return 1 after reporting error about applying alignof to bitfields.
+
+ * c-tree.h (c_alignof_expr): Add declaration.
+
+ * varasm.c (assemble_variable): MAX_OFILE_ALIGNMENT defaults to
+ BIGGEST_ALIGNMENT if not defined in config.h.
+
+Wed Jun 5 06:55:12 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md (mov*): Change the interface to emit_move_sequence.
+ * out-m88k.c (emit_move_sequence): Similar to the sparc version.
+
+ * tm-m88k.h (SIZE_TYPE): Specify as unsigned int.
+
+ * xm-m88k.h (HOST_BITS_PER_LONGLONG): Define.
+
+Wed Jun 5 01:45:07 1991 Sean Fagan (sef at cygint.cygnus.com)
+
+ * sdbout.c (sdbout_symbol): don't output definition information for
+ a nested function inside the parent function; this makes COFF
+ assemblers upset.
+
+Tue Jun 4 17:35:13 1991 Sean Fagan (sef at cygint.cygnus.com)
+
+ * function.c (trampoline_address): make the RTL_EXPR node temporary,
+ not momentary, so that the trampoline_list doesn't become garbage.
+ Fix made by jim wilson (wilson@cygnus.com).
+
+Tue Jun 4 09:40:59 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (move_block_to_reg): Fix typo in last change.
+
+ * local-alloc.c (update_equiv_regs): Check for reg_n_refs == 2,
+ not loop_depth * 2.
+
+ * reorg.c (fill_simple_delay_slots): Clear INSN_DELETED_P on insns
+ placed in current_function_epilogue_delay_list.
+
+ * make-rs6000 (ALLOCA_FLAGS, ALLOCA_FINISH): Add override to
+ compensate for the fact that the RS/6000 C compiler has no -S.
+
+ * out-rs6000.c (easy_fp_constant): Use operand_subword.
+ (print_operand): Use INT_P and INT_LOWPART to allow accepting both
+ CONST_INT and CONST_DOUBLE for integers.
+
+ * rs6000.md (floatsidf2, floatunssidf2): Rework these to emit only
+ two insns, each of which has DImode or DFmode operands. Then
+ split the funny DImode insn to generate it.
+ (fix_truncdfsi2, fixuns_truncdfsi2): Surround our call with
+ REG_LIBCALL/REG_RETVAL notes.
+ Use operand_subword.
+ (movsf, movdf): Correctly handle a pseudo passed during reload.
+ Use operand_subword.
+ Split moves involving "easy" FP constants.
+ (subtract-and-branch): Disable for now, to avoid output reload in jump.
+
+ * tm-rs6000.h (WCHAR_TYPE): Add definition.
+ (INT_REGNO_P): Fix typo; register 31 is a normal register.
+ (LEGITIMATE_CONSTANT_P): The only FP constants that are valid are
+ the "easy" ones.
+
+ * a29k.md (negdf2): Use XOR when not involving accumulator.
+ Add SCRATCH so we dont use gr122.
+ Handle case where input and output are same register.
+ (negsf2): Use SCRATCH.
+ (DImode operations): Use operand_subword, not gen_{low,high}_part.
+ (movsf, movdf, movdi): Always split if we can look inside CONST_DOUBLE.
+ Use operand_subword.
+ Don't split into separate words in DEFINE_EXPAND.
+ * out-a29k.c (in_operand): Account for fact that integer CONST_DOUBLE
+ is VOIDmode.
+ (extract_subword): Deleted.
+ (print_operand): Add macros INT_P and INT_LOWPART so we can accept
+ either CONST_INT or CONST_DOUBLE.
+
+ * romp.md (movdi, movdf, negsf2, negdf2): Use operand_subword and
+ operand_subword_force, instead of gen_{high,low}part.
+ Use force_const_mem instead of force_const_double_mem.
+
+ * m88k.md (movdi): Remove 'F' constraint; 'n' now includes integer
+ CONST_DOUBLE.
+ (anddi3, iordi3, xordi3): Likewise.
+ Use operand_subword to extract individual words.
+ * out-m88k.c (output_load_const_{float,double,dimode}): Use
+ operand_subword.
+
+ * Makefile.in (emit-rtl.o): Now includes expr.h.
+ * calls.c (expand_call): Pass mode to move_block_to_reg.
+ * combine.c (subst, case SUBREG): Simplify SUBREG of hard register
+ and some SUBREGs of constants.
+ (gen_lowpart_for_combine): If object is desired mode, always return it.
+ Use gen_lowpart_common for most cases; just support MEM and
+ surrounding with a SUBREG here.
+ * cse.c (insert): CONSTANT_P includes CONST_DOUBLE.
+ (fold_rtx): Use MODE for GET_MODE (X).
+ (fold_rtx, case SUBREG): Handle simple cases of folding SUBREGs.
+ (fold_rtx, case MEM): Use operand_subword and gen_lowpart_if_possible
+ to get parts of constant instead of gen_lowpart and gen_highpart.
+ (gen_lowpart_if_possible): Use gen_lowpart_common for most cases.
+ * expr.c: Include expr.h.
+ (gen_lowpart_common): New function, from gen_lowpart.
+ (gen_lowpart): Use gen_lowpart_common for most cases; just handle MEM.
+ (gen_highpart): Deleted.
+ (subreg_lowpart_p): Test WORDS_BIG_ENDIAN in `if', not `#if'.
+ (operand_subword, operand_subword_force): New functions.
+ * explow.c (plus_constant): Handle adding CONST_INT to CONST_DOUBLE.
+ Rework to use switch statement.
+ Remove obsolete OLD_INDEXING code.
+ (plus_constant_for_output): Use plus_constant for most cases.
+ (break_out_memory_refs): Refine which constants get broken out.
+ * expmed.c (store_bit_field, extract_bit_field): Don't use
+ gen_highpart for multi-word fields; instead, loop and use
+ operand_subword. We now support fields more than two words long.
+ (mask_rtx, lshift_value): Just pass high and low words to
+ immed_double_const; it will mask and choose CONST_INT vs. CONST_DOUBLE.
+ * expr.c (convert_move): Use operand_subword instead of gen_highpart.
+ Don't assume GET_MODE_SIZE (DImode) > UNITS_PER_WORD.
+ (move_block_to_reg): Add MODE arg.
+ Use operand_subword_force.
+ (move_block_from_reg): Use operand_subword.
+ (move_block_from_reg, move_block_to_reg, use_rgs):
+ Don't assume GET_MODE_SIZE (SImode) == UNITS_PER_WORD.
+ (emit_move_insn, emit_push_insn): Likewise.
+ Use operand_subword and operand_subword_force.
+ (expand_expr, case INTEGER_CST): Just call immed_double_const.
+ (expand_expr, cases FIX_TRUNC_EXPR, FLOAT_EXPR): Don't assume
+ GET_MODE_SIZE (SImode) == UNITS_PER_WORD.
+ (expand_builtin): Likewise.
+ (do_jump_by_parts_{greater,equality): Likewise.
+ Use operand_subword_force.
+ * expr.h (operand_subword): Remove declaration from here.
+ (validize_mem): Add missing declaration.
+ * final.c (final_scan_insn): If assembler code string is "#",
+ try to split insn.
+ Ignore insns with INSN_DELETED_P set.
+ (alter_subreg): Remove erroneous code for CONST_DOUBLE.
+ (output_addr_const): Integer CONST_DOUBLEs are now VOIDmode.
+ * fold-const.c (add_double): No longer static.
+ * integrate.c (copy_for_inline, copy_rtx_and_substitute):
+ Use validize_mem to validate force_const_mem's result.
+ (subst_constants, case SUBREG): Use operand_subword and
+ gen_lowpart_common instead of gen_lowpart and gen_highpart.
+ (restore_constants): Don't assume all CONST_DOUBLEs are floating.
+ Use validize_mem to validate force_const_mem's result.
+ * optabs.c (expand_binop,, expand_unop): Don't assume
+ GET_MODE_SIZE (SImode) == UNITS_PER_WORD.
+ Use operand_subword_force.
+ (operand_subword): Deleted from here. New version in emit-rtl.c.
+ * recog.c (validate_replace_rtx_1): Check for any constant,
+ not just CONST_INT.
+ (constrain_operands, case 'm', 'o'): Any constant OK if strict < 0.
+ (constrain_operands, case 'E'): Must have host and target word sizes
+ the same.
+ (constrain_operands, case 's', 'n'): CONST_DOUBLE can be integer.
+ * reload.c (find_reloads, case 'm', 'o', 'E', 's', 'n'): Likewise.
+ Don't call force_const_double_mem; use force_const_mem instead.
+ (find_reloads_toplev): Likewise.
+ Use gen_lowpart_common to get low part of constant.
+ * rtl.h (gen_highpart, force_const_double_mem): Deleted.
+ (gen_lowpart_common, operand_subword, operand_subword_force):
+ New declarations.
+ * varasm.c (const_double_chain): Renamed from real_constant_chain.
+ (immed_double_const): For integer constants, perform any needed
+ masking and make either CONST_INT or CONST_DOUBLE.
+ (force_const_double_mem): Deleted; would need a mode arg added
+ which would make it almost identical to force_const_mem.
+ * out-vax.c (split_quadword_operands): Use operand_subword instead
+ of gen_lowpart and gen_highpart.
+
+ * function.c (find_replacement): New function.
+ (fixup_var_refs_insns): Pass pointer to listhead of (new)
+ fixup_replacement structures; if any entries were pseudos, copy from
+ memory to the pseudo.
+ (fixup_var_refs_1): New arg REPLACEMENTS; provide that arg in
+ recursive calls.
+ Use find_replacements to ensure we don't break any MATCH_DUPs.
+
+Tue Jun 4 05:07:53 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * stmt.c (pushcase, pushcase_range): Take new parameter DUPLICATE.
+ Use this to store existing LABEL_DECL if LABEL is a duplicate.
+ * c-parse.y, cplus-parse.y, objc-parse.y, stmt.c: All callers
+ changed.
+
+Mon Jun 3 17:19:40 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-expr.c (decl_in_memory_p): New function.
+ * cplus-typeck.c (mark_addressable): Test `decl_in_memory_p' instead
+ of testing memory_operand, since the DECL_RTL of a decl may be a
+ (MEM ...) by not a valid memory address.
+
+ * cplus-typeck.c (mark_addressable): When we decide that a static
+ const variable must go to memory, make sure that its rtl is
+ allocated from the correct obstack.
+
+ * cplus-decl.c (grokdeclarator): Replace undocumented BREAK_C_TAGS
+ #define control with comments explaining why or how it is correct
+ for GNU C++ to break C's notions of what a tag is.
+
+ * cplus-call.c (convert_harshness): Replace undocumented #if
+ AMBIGUOUS_WORKING control with a comment explaining the actions
+ where this control used to be.
+
+Mon Jun 3 15:07:47 1991 Sean Eric Fagan (sef at kithrup)
+
+ * tm-i386.h (TRAMPOLINE_TEMPLATE): Changed a 040 to 0xe0;
+ this is the proper code for a jmp [%eax] instruction.
+
+Mon Jun 3 08:07:42 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cccp.c (initialize_builtins): Install __SIZE__TYPE__,
+ __PTRDIFF_TYPE__, and __WCHAR__TYPE__ as builtins.
+
+Sun Jun 2 18:18:19 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * flow.c (mark_set_1): Don't set LAST_MEM_SET from a MEM that has any
+ side-effects (such as auto-inc), not just volatile MEMs.
+
+ * rtlanal.c (reg_referenced_p): New function.
+ * combine.c (try_combine): Correct test for added_sets_1 to account
+ for case where I1 and I2 both feed I3.
+ (distribute_notes): Don't interpret setting a reg as a use of the
+ reg; use new reg_referenced_p and simplify code.
+
+ * flow.c (propagate_block): Ensure that LOOP_DEPTH is correct at all
+ insns in a basic block, otherwise reg_n_refs will be set incorrectly.
+
+ * recog.c (validate_replace_rtx_1): Don't change mode of memory
+ reference that is mode-dependent.
+ Don't make a MEM with a larger mode than original.
+
+ * combine.c (try_combine): Disable code to check MODES_TIEABLE_P
+ added May 20th and 22nd; this should not be needed now that
+ LIMIT_RELOAD_CLASS has been added to reload.
+
+ * flow.c (mark_set_1): Allow for the fact that stack pushes don't have
+ REG_INC notes.
+ * local-alloc.c (optimize_reg_copy): Likewise.
+ Don't change lives of hard registers #ifdef SMALL_REGISTER_CLASSES.
+ A USE of a register must not be changed.
+ (validate_equiv_mem): Don't make an equivalence to volatile MEMs.
+
+ * reorg.c (mark_set_resources): #ifdef PUSH_ROUNDING, mark SP as always
+ set since the insn might have a (pre_dec sp).
+
+Sun Jun 2 16:03:31 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * Makefile.in (libg_dir): Variable deleted.
+ (install-gnulib): Don't bother creating libg.a.
+
+ * cccp.c (size_type_string, etc.): Variables deleted.
+ (special_symbol): Use macros SIZE_TYPE, etc., directly.
+
+Sat Jun 1 12:54:05 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * Let tm.h specify types for size_t, ptrdiff_t and wchar_t.
+ (SIZE_TYPE, PTRDIFF_TYPE, WCHAR_TYPE): New params.
+ * cccp.c, c-decl.c: Provide default definitions of the new params.
+ * cccp.c (__SIZE_TYPE__, __PTRDIFF_TYPE__, __WCHAR_TYPE__): Builtins.
+ (special_symbol): Implement them based on new params.
+ * stddef.h (size_t, ptrdiff_t, wchar_t): Declare using those builtins.
+ * c-tree.h (ptrdiff_type_node): Declare variable.
+ * c-decl.c (init_decl_processing): Use *_TYPE params
+ to control setting of sizetype, wchar_type_node and ptrdiff_type_node.
+ * c-typeck.c (pointer_diff): Take result type from ptrdiff_type_node.
+
+ * configure (target1): Really change / to -.
+
+Sat Jun 1 02:49:04 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-lex.c (extract_interface_info): Now non-static. Called
+ whenever INPUT_FILENAME changes.
+ * cplus-pt.c (instantiate_class_template): Call
+ `extract_interface_info' when switching files.
+ * cplus-input.c (getch): Ditto.
+
+ * combine.c (subst): Don't change the mode of memory access for
+ volatile memory.
+
+ * tm-sparc.h (CONST_COSTS): Fix typo in computing cost of
+ CONST_DOUBLE for DImode integers.
+
+Fri May 31 16:11:57 1991 Ken Raeburn (raeburn at watch.com)
+
+ * cplus-lex.c (process_next_inline): Set line number and filename if
+ more inline data is to be processed.
+ (store_pending_inline): Treat FUNCTION_TYPE like METHOD_TYPE. Use
+ current_class_type instead of extracting it from method type; the
+ two should be the same, and the latter doesn't work for statics.
+
+ * cplus-decl.c (start_decl): When constructing templates, use
+ original name of function rather than "mangled" name. Look for
+ FUNCTION_DECL, not FUNCTION_TYPE, when deciding how to push the
+ new decl.
+ (start_method): Default inlining does not apply to template
+ expansions.
+
+ * cplus-pt.c (pending_template_expansions): Moved declaration to
+ start of file.
+ (tsubst): For FUNCTION_DECL, use original name of source, not
+ mangled name.
+ (instantiate_template): Local variables now non-static. Fill in
+ pending-inline field of new decl, rather than template-info, and
+ chain into either pending-inlines or pending-template-expansions.
+
+ * cplus-typeck.c (build_x_function_call): If a template is found,
+ treat it as an overloaded declaration.
+
+Fri May 31 14:20:45 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * Makefile.in (all.cross): New target.
+ * configure: If cross-compiling, change `ALL' to use all.cross.
+
+Fri May 31 11:43:31 1991 Matthew Self (mself at next.com)
+
+ * tm-next.h (EXTRA_SECTION_FUNCTIONS):
+ Add new constructor and destructor sections.
+ (MAX_OFILE_ALIGNMENT): Define as 2^15 for Mach-O.
+ (ASM_OUTPUT_ALIGN): Use .align, not .even. Allow alignments > 2.
+ (CPP_PREDEFINES): Added -Dm68k since some code expects this.
+
+Fri May 31 05:41:51 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-class.c (pushclass): New argument value for MODIFY accepted.
+ * cplus-decl2.c (build_push_scope): Call `pushclass' with MODIFY == 3.
+
+ * cplus-decl.c (finish_function): Set TREE_PUBLIC and TREE_EXTERNAL
+ bits on functions according to #pragma interface/implementation,
+ regardless of whether or not the function's inline. This fixes the
+ bug of needless code replication with -fno-inline.
+
+Thu May 30 17:39:53 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * expr.c (expand_expr):
+ Don't lose volatility of fields in COMPONENT_REF.
+
+Thu May 30 17:36:45 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (count_reg_usage, delete_dead_from_cse): New functions.
+ * toplev.c (rest_of_compilation): Call delete_dead_from_cse immediately
+ after the first cse pass.
+
+ * local-alloc.c (validate_equiv_mem_from_store, validate_equiv_mem):
+ New functions, to find cases where a REG is equivalent to a MEM.
+ (optimize_reg_copy): New function.
+ (update_equiv_regs): Call these new functions.
+ Look for a register used in only one basic block being stored into
+ memory.
+ Keep track of loop depth so we can find regs used only once, but
+ inside a loop.
+ * reload1.c (reload): Use single_set when looking for an insn
+ that initializes a register.
+ If making a REG equivalent to a MEM, the insn with SET_DEST being
+ the register isn't always the one making the equivalence, since the
+ equivalence might be occurring due to a store into MEM; in that
+ case set reg_equiv_init to the latter insn.
+
+Thu May 30 14:23:01 1991 Ken Raeburn (raeburn at watch.com)
+
+ * Pending expansions processed at end-of-file can be processed out
+ of order, so freeing the associated data from the obstacks is not
+ possible.
+ * cplus-tree.h (struct pending_inline): New field can_free
+ indicates whether to free the text after processing it.
+ * cplus-lex.c (do_pending_inline, process_next_inline): If
+ can_free flag is set, specify inline-text obstack, otherwise null
+ pointer.
+ (cons_up_default_function): Clear flag.
+ (reinit_parse_for_method): Set it.
+ (store_pending_inline): Clear it when changing obstacks.
+ (pending_template_obstack): Deleted. References changed to use
+ permanent_obstack.
+
+ * cplus-lex.c (store_pending_inline): Set DECL_PENDING_INLINE_INFO
+ value after swapping obstacks, not before.
+
+Thu May 30 07:23:18 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * va-sparc.h: Has to be a char * to be compatible with Sun.
+ i.e., we have to pass a `va_list' to vsprintf. Also, fixed
+ bug in passing vararg structs.
+
+Thu May 30 00:32:18 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * configure: Delete Makefile.tem before writing it.
+
+ * stor-layout.c (layout_record):
+ Ignore PCC_BITFIELD_TYPE_MATTERS for incomplete type.
+
+ * fixincludes (stdtypes.h): Handle wchar_t like the other types.
+
+ * function.c (assign_parms): Don't declare args_so_far register.
+
+Wed May 29 15:13:05 1991 Ken Raeburn (raeburn at watch.com)
+
+ * cplus-tree.def (TEMPLATE_PARM_IDX): Deleted.
+ (TEMPLATE_TYPE_PARM): New node type, looks like a type node.
+ (TEMPLATE_CONST_PARM): New node type, looks like a const node.
+
+ * cplus-tree.h (IDENTIFIER_TYPE_VALUE_PTR): Inlined under gcc.
+ (TYPE_IDENTIFIER_PTR): Ditto.
+ (DECL_NESTED_TYPENAME_PTR): Ditto.
+ (struct lang_type): New bitfield `use_template'.
+ (CLASSTYPE_USE_TEMPLATE): Accessor macro for above.
+ (struct lang_decl): New field `template_info'.
+ (DECL_TEMPLATE_INFO): Accessor macro for above.
+ (TEMPLATE_EXPANSION_NAME_P): Deleted.
+ (push_overloaded_decl_top_level): Added declaration.
+ (TEMPLATE_TYPE_TPARMLIST, TEMPLATE_TYPE_IDX,
+ TEMPLATE_TYPE_SET_INFO, TEMPLATE_CONST_TPARMLIST,
+ TEMPLATE_CONST_IDX, TEMPLATE_CONST_SET_INFO): New macros for
+ accessing fields of TEMPLATE_..._PARM nodes.
+ (struct pending_inline): New fields for names and values to bind
+ to them while processing.
+ (struct template_info): Definition moved here from cplus-pt.c.
+ (instantiate_template): Added declaration.
+ (instantiate_class_template): Ditto.
+ (processing_template_{decl,defn}): New variable declarations.
+
+ * print-tree.c (print_node): Provide missing argument to
+ print_node for `bitpos' field. Display `virtual' flag, and (for
+ function and method types) `class' field; these are only used by
+ C++ that I'm aware of, but are defined in common code, so they
+ should be displayed here.
+
+ * cplus-parse.y (template_def): Separate set of derivations, for
+ class and function templates. Template_def is a type of extdef;
+ extern_lang_string before template_def is not permitted.
+ (fn_tmpl_end): New nonterminal, anything that signals the end of
+ the portion of a template that we should parse.
+ (yyprint): Define only if YYDEBUG. Handle TYPESPEC.
+ (datadef): Complain at class template override declaration if that
+ specialization has already been produced by expansion. Template
+ definitions no longer belong here.
+ (tmpl.2): Always call instantiate_class_template; let it decide
+ whether or not to go through with it.
+ (template_instantiation): Put decl in global scope only if not
+ already there.
+ (typespec, scoped_typename): Scoped typename inside template type
+ should be a scoped_typename, not a typespec. However, a
+ template_type should be allowed as a typespec.
+ (structsp): Don't undo template name overload here. Deleted
+ derivation from template_type.
+ (named_class_head_sans_basetype): Don't overload template name.
+ (LC): Do it here.
+ (notype_declarator): For scoped_id derivations, don't call
+ build_push_scope if the scoped_id is a SCOPE_REF.
+ (scoped_id): Moved old typespec-from-template_type rule here.
+ Call resolve_scope_to_name only if template parms aren't involved.
+
+ * cplus-pt.c (struct template_info): Definition deleted.
+ (templates, current_template_info): Variables deleted.
+ (processing_template_{decl,defn}): New variables.
+ (push_template_decls, pop_template_decls): Accept parmlist and
+ arglist as separate arguments, instead of deriving both from the
+ template. If class_level is non-zero, push and pop a level,
+ making it transparent to tags. Removed some pointless checks from
+ pop_template_decls that are only needed in push_template_decls,
+ and some assertions from both. Callers changed.
+ (uses_template_parms): Return non-zero iff argument refers to any
+ TEMPLATE_*_PARM nodes.
+ (tsubst): Walk tree, substituting for template parms, returning
+ new tree.
+ (type_unification): Rewritten a bit, to make it work. New
+ argument nsubsts is pointer to place to record number of
+ substitutions made when matching.
+ (unify): Renamed from unify1. Rewritten completely, to work.
+ Still may need extending for some tree node types.
+ (do_pending_expansions): At end-of-file, expand any templates not
+ yet expanded which were actually needed. Needs work to accomodate
+ latest specs.
+ (process_template_parm): Simplified slightly. Non-type parms
+ should be marked read-only; aggregate types are not allowed, since
+ equality checks don't work.
+ (end_template_parm_list): Moved to after process_template_parm.
+ Push a level, and push decls for TEMPLATE_*_PARMs. Set
+ processing_template_decl flag.
+ (end_template_decl): For non-class templates, build a
+ TEMPLATE_DECL and store the regular decl in its result field.
+ Context and other values get copied over too. Call poplevel to
+ get rid of the TEMPLATE_*_PARM decls, and call
+ dont_forget_overload to avoid losing the declaration later. Clear
+ processing_template_decl flag. Call get_pending_sizes, so later
+ function compilation doesn't try to evaluate sizes of templates.
+ (mangle_class_name_for_template): Convert type/non-type check from
+ switch to if test. Added support for ENUMERAL_TYPE, REAL_TYPE,
+ and POINTER_TYPE parms.
+ (instantiate_class_template): Renamed from old
+ instantiate_template. Don't expand if type size is set, or if
+ being-defined flag is set, or use-template flag is non-zero. If
+ other-template parms are used in the parm list, construct a simple
+ RECORD_TYPE node and return it. Catch case of template declared
+ but not defined before use. Renamed argument from class to
+ classname. Set processing_template_defn flag.
+ (instantiate_template): New routine; constructs new decl node
+ given TEMPLATE_DECL node and template arg vector.
+ (end_template_instantiation): Set use-template field to 2 ("did
+ use template"). Clear processing_template_defn flag.
+ (reinit_parse_for_template): Get template-info ptr from decl node.
+ Store template parm vector in it.
+ (pending_template_expansions): List of templates that may need
+ expanding later for function or class data definitions.
+
+ * cplus-method.c (build_overload_value): Ensure tree code is
+ PARM_DECL. Handle ENUMERAL_TYPE like INTEGER_TYPE. For DImode
+ values, compare against integer_zero_node instead of constructing
+ another one. Added support for POINTER_TYPEs. If not
+ REAL_IS_NOT_DOUBLE, support real values as well.
+ (build_overload_name): Accept TEMPLATE_*_PARM nodes, but generate
+ a string that should cause some assembler errors.
+
+ * cplus-ptree.c (print_lang_decl): Retrieve template-info from its
+ new place.
+ (print_lang_type): For TEMPLATE_TYPE_PARM, print its (short) info
+ and return. For RECORD_TYPE, print use-template and interface-*
+ fields.
+
+ * cplus-search.c (push_class_decls): Don't call
+ push_template_decls; the bindings of template parameter names
+ should be associated with the template body, not with the class.
+ Do overload the template name, however.
+ (pop_class_decls): Don't call pop_template_decls.
+
+ * cplus-call.c (build_method_call): Changed to recognize
+ constructor of template class.
+ (build_overload_call): Add in number of template substitutions as
+ extra cost of a candidate function. For template decls, try
+ unification and instantiation before evaluating cost of result.
+ This too is incorrect in terms of the spec, but it's a starting
+ point for later work.
+
+ * cplus-class.c (finish_struct): If structure is named, undo
+ overload of its name as a template.
+ (pushclass): If prev_class_type was a template class, pop it; the
+ decls are handled wrong and should be re-entered.
+
+ * cplus-decl.c (poplevel): Assert that the current level is not
+ global.
+ (push_to_top_level): Include global scope when looking for old
+ values, because class bindings aren't listed in any other one
+ place.
+ (push_overloaded_decl_top_level): New function; like
+ push_overloaded_decl, but places decl in global binding level.
+ (dont_forget_overload): New function; removes decl from list of
+ overloads to be forgotten when scope is exited.
+ (start_decl): If template parms are used, construct a
+ TEMPLATE_DECL node referencing the current decl. For function
+ templates, call push_overloaded_decl; for class template members,
+ chain them into the class template definition.
+ (grokdeclarator): Don't try determining size of a
+ TEMPLATE_CONST_PARM node. For template class-data decls,
+ construct a phony VAR_DECL node and return it.
+
+ * cplus-decl2.c (grokfield): For static class data, use
+ build_overload_name result, instead of copying class name, since
+ the latter could be a human-readable template class name. (If
+ NEW_OVERLOAD_SCHEME is not defined, do this only if the class has
+ a template-derived name.)
+
+ * cplus-lex.c (pending_template_obstack): New variable; obstack
+ for pending-template stuff to be saved to end-of-file.
+ (init_lex): Initialize it.
+ (default_def): New variable; used for default definition of copy
+ constructors and destructors.
+ (do_pending_inlines): Figure out whether text is in an obstack,
+ and which one, for calling feed_input. Push template decls if
+ needed, as specified in pending_inline data. Pass current
+ pending_inlines pointer back in PRE_PARSED_FUNCTION_DECL instead
+ of next.
+ (process_next_inline): Ditto. Pop pending inline data if needed.
+ (store_pending_inline): New function. Decides which obstack to
+ store a pending definition on, and which list to chain it into.
+ (reinit_parse_for_method): Call it.
+ (reinit_parse_for_block): If character passed in is '=', look for
+ a semicolon to end the block; don't require a {} block. Don't pad
+ to 8 bytes on USG, since we aren't feeding input via stdio any
+ more. Also, use newlines instead of # directives for advancing
+ line number only a few lines.
+ (cons_up_default_function): Punt padding for USG stdio, since we
+ aren't using it any more. Use default_def for definition. Call
+ store_pending_inline to save it away.
+ (identifier_type): For TEMPLATE_DECL, DECL_RESULT field non-null
+ indicates a non-type template, so don't return PTYPENAME.
+ (yylex): If end-of-file and input isn't redirected, call
+ do_pending_expansions and maybe start yylex over. Don't check
+ TEMPLATE_EXPANSION_NAME_P; a proper name transformation system
+ will eliminate conflicts. Try for SCOPED_TYPENAME with PTYPENAME
+ too.
+
+Wed May 29 11:48:34 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * cccp.c (do_include): Check that ->control_macro is non-zero.
+
+ * gcc.c (process_command): Use `error' in last change.
+
+Wed May 29 11:10:12 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md (movdi): Accept CONST_INT.
+ * out-m88k.c (output_load_const_dimode): Accept CONST_INT.
+ (output_call): Don't use #plt for jsr.
+
+Wed May 29 00:51:36 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-type2.c (build_functional_cast): Give error if functional
+ cast is missing argument.
+
+ * cplus-tree.h (interface_unknown): Add a declaration for this
+ variable.
+
+ * cplus-type2.c (store_init_value): Normally initialized PIC data
+ must be laid into the text segment and then copied into the data
+ segment. But cecause of special things we do for ctors and dtors
+ (the only things that can reference such things), we can leave
+ vtables in initialized data space.
+
+ * cplus-decl.c (finish_decl): Use #pragma interface knowledge if
+ available for processing initialized variables of type const.
+
+Tue May 28 18:39:20 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * sched.c ({true,anti,output}_dependence): Correct MEM_IN_STRUCT_P
+ code; only avoid conflict if MEM_IN_STRUCT_P ref has varying address.
+
+ * protoize.c (stat): Remove declaration of stat; it is defined
+ differently (no const in arg 1) on some machines.
+
+ * combine.c (simplify_shift_const): Avoid infinite loops by quitting
+ when COUNT becomes zero; delete now-unnecessary tests on COUNT.
+
+ * flow.c (last_mem_set): New variable.
+ (propagate_block): Initialize it.
+ Show calls can change memory.
+ (insn_dead_p): Remove unneeded arg STRICT_LOW_OK; don't treat
+ STRICT_LOW_PART differently than ZERO_EXTRACT.
+ All callers changed.
+ If insn stores into the same, nonvolatile, MEM as recorded in
+ last_mem_set, it is dead.
+ (mark_set_1): If writing into register mentioned in last_mem_set or
+ writing into memory, clear last_mem_set.
+ Record last MEM written.
+ (find_auto_inc): New function, from mark_used_regs.
+ Add support for pre-increment and pre-decrement.
+ (mark_used_regs, case MEM): Clear last_mem_set.
+ Call find_auto_inc; move code to there.
+ (mark_used_regs, case SET): Don't call recursively on MEM if it is
+ SET_DEST, instead call find_auto_inc ourselves.
+
+Tue May 28 17:29:52 1991 Micheal Tiemann (tiemann at wookumz.gnu.ai.mit.edu)
+
+ * gnulib1.c (__fixsfsi, __cmpsf2, __extendsfdf2): Add declarations
+ for intify.
+
+ * gcc.c (default_compilers): Accept `.cxx' as a C++ extension.
+
+Tue May 28 17:05:28 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md (movstrsi): Pass original MEM expressions.
+ * out-m88k.c (expand_block_move, block_move_{sequence,no_loop,loop}):
+ Use original MEM expressions to set RTX_UNCHANGING_P, MEM_VOLATILE_P,
+ and MEM_IN_STRUCT_P.
+
+ * out-m88k.c (emit_bcnd): Use bxx when optimizing so jump_optimize
+ will work on more cases. Change this back when jump_optimize uses
+ get_condition to find the values being compared.
+
+ * m88k.md: Don't use operand0 or operand1.
+
+Tue May 28 16:00:56 1991 Micheal Tiemann (tiemann at wookumz.gnu.ai.mit.edu)
+
+ * emit-rtl.c (try_split): Make sure `after' exists before checking
+ to see if it is a BARRIER.
+
+Tue May 28 15:08:44 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * gcc.c (process_command): Warn if -x follows last input file.
+
+ * cccp.c: Don't include file twice if a #ifndef would make it a no-op.
+ (struct file_name_list): New field, control_macro.
+ Initialize it where these structures are created.
+ (struct if_stack): Likewise.
+ (do_include): If file already known, check its control macro if any.
+ Don't include the file if the macro is now defined.
+ (do_xifdef): Detect case of successful #ifndef at start of file.
+ (condition_skip): Accept macro name as new arg. Record in if_stack.
+ (do_endif): Detect being effectively at end of file.
+ (record_control_macro): New function. Called from do_endif.
+
+ * calls.c (store_one_arg): Set used after calling push_rounding.
+
+ * sparc.md (floating move peepholes): Allow `r' for operand 2.
+
+ * arm.md, tm-arm.h, out-arm.c, xm-arm.h: New files.
+ * configure (arm): New alternative.
+
+Tue May 28 11:53:21 1991 Michael Meissner (meissner at osf.org)
+
+ * tm-decstatn.h (CPP_PREDEFINES): Add Ultrix 4.2 support.
+
+ * tm-mips.h (cmp_type, branch_cmp, branch_type): Global variables
+ and type to record what type of comparison is being done.
+ (mips_print_operand_punct): New array to specify whether a
+ character is valid for print_operand as punctuation.
+ (set_nomacro, set_noat, set_noreorder): New variables to record
+ whether a .set nomacro, .set noat, or .set noreorder has been
+ done.
+ (dslots_{filled,total}_{load,jump}): New global variables to
+ remember how many delay slots exist and are filled for the -mstats
+ option.
+ (CC1_SPEC): Combine %{O:...} %{O*:...} cases. For -G32, pass -G
+ 32. Add dummy pattern for -save-temps to avoid error message.
+ (DBX_DEBUGGING_INFO): Define this all the time.
+ (SDB_ALLOW_FORWARD_REFERENCES): Define this for MIPS ECOFF support.
+ (SDB_ALLOW_UNKNOWN_REFERENCES): Define this for MIPS ECOFF support.
+ (TARGET_SWITCHES): Add -mstats to print interesting statistics.
+ Add -mmemcpy to force memcpy to be called. Add -mdebug[fghij].
+ Add -mno- version of switches.
+ (DATA_ALIGNMENT): Align all char/short arrays/unions/structures,
+ rather than just char arrays.
+ (BYTE_LOADS_ZERO_EXTEND): Define this.
+ (CONST_OK_FOR_LETTER_P): 'N' returns true if power of 2.
+ (EXTRA_CONSTRAINT): Redefine 'Q' to be 1 word memory references,
+ 'R' to be multiword memory references.
+ (struct frame_info): Add initialized field.
+ (current_frame_info): New global structure to hold frame info.
+ (INITIAL_FRAME_POINTER_OFFSET): Use current_frame_info.
+ (INIT_CUMULATIVE_ARGS): Pass LIBNAME to init_cumulative_args.
+ (DELAY_SLOTS_FOR_EPILOGUE): Define this to fill j $r31 delay slot.
+ (ELIGIBLE_FOR_EPILOGUE_DELAY): Ditto.
+ (ENCODE_SEGMENT_INFO): Don't flag references to 0-sized arrays as
+ being in the small data segment.
+ (CONST_COSTS): Reword to be more accurate.
+ (RTX_COSTS): Define this.
+ (ADDRESS_COST): Define this.
+ (CLASS_CMP_OP, CLASS_EQUALITY_OP, CLASS_UNS_CMP_OP): New bits for
+ rtx_classify to classify various comparison operators.
+ (FINAL_PRESCAN_INSN): Define this to collect info for -mstats.
+ (NOTICE_UPDATE_CC): Only do CC_STATUS_INIT if the insn is a
+ comparison.
+ (EXTRA_CC_MODES): Define new modes CC_EQmode, CC_FPmode, CC_0mode.
+ (EXTRA_CC_NAMES): Define this.
+ (SELECT_CC_MODE): Define this.
+ (PRINT_OPERAND_PUNCT_VALID_P): Redefine this to index into
+ mips_print_operand_punct.
+ (DBR_OUTPUT_SEQEND): Reset .set reorder, .set macro as appropriate.
+
+ * out-mips.c (branch_cmp, branch_type): New Global variables
+ and type to record what type of comparison is being done.
+ (mips_print_operand_punct): New array to specify whether a
+ character is valid for print_operand as punctuation.
+ (set_nomacro, set_noat, set_noreorder): New variables to record
+ whether a .set nomacro, .set noat, or .set noreorder has been
+ done.
+ (dslots_{filled,total}_{load,jump}): New global variables to
+ remember how many delay slots exist and are filled for the -mstats
+ option.
+ (reg_or_0_operand): Rewrite to add support for CONST_DOUBLE.
+ (mips_const_double_ok): Allow normal FP constants (not Infinity,
+ Nan, etc) to be used as operands when using the MIPS assembler.
+ (simple_memory_operand): Combine GP memory references from
+ gp_memory_operand. Delete gp_memory_operand.
+ (equality_op): Return true if EQ or NE.
+ (cmp_op): Return true if comparison operator.
+ (uns_cmp_op): Return true if unsigned comparison.
+ (mips_move_1word): New name for mips_move_instructions. Also, loads
+ of HImode/QImode use unsigned loads, rather than signed loads, so
+ that BYTE_LOADS_ZERO_EXTEND can be defined. Use %z to get name of
+ $0, instead of hardwiring it. Explicitly use lui where appropriate.
+ (mips_move_2words): New name for mips_move_2words_instructions. Use
+ %z to get name of $0, instead of hardwiring it.
+ (mips_address_cost): New function to define ADDRESS_COST macro.
+ (gen_conditional_branch): New function to generate all of the tests
+ and branches.
+ (block_move_sequence): New function to generate straight line code
+ for block moves.
+ (block_move_call): New function to set up a call to memcpy/bcopy as
+ appropriate for block moves.
+ (expand_block_move): New function which is called from the movstrsi
+ define_expand, to set up block moves. At present, unless -mmemcpy
+ is used, moves of less than 32 bytes, get straight line code, all
+ others get a call.
+ (init_cumulative_args): Take libname as third argument.
+ (function_arg_partial_nregs): Fix bug, to not return a negative
+ number when passing small structs in registers.
+ (compare_collect, compare_restore): Remove these functions, since
+ they are no longer called.
+ (override_options): Initialize mips_rtx_classify for all of the
+ comparison operator bits. Initialize mips_print_operand_punct to
+ return TRUE for each of the valid punctuation characters used in
+ print_operand.
+ (print_operand): %X now prints 32 bit ints in hex format. %z now
+ prints $0 if the operand is the constant integer 0. %(, %) now turn
+ on/off both .set noreorder/.set nomacro. %<, %> turns on/off .set
+ nomacro. %* turns on both .set noreorder and .set nomacro if
+ filling delay slots. %! turns on .set nomacro if filling delay
+ slots.
+ (compute_frame_size, save_restore, function_prologue,
+ function_epilogue): Change the calling sequence of
+ compute_frame_size to save everything in a global structure, which
+ has an initialized field to indicate that compute_frame_size needs
+ to be called.
+ (function_prologue): INIT_CUMULATIVE_ARGS now takes 3 args.
+ (function_epilogue): If current_function_epilogue_delay_list is
+ non-null, use that to fill the final delay slot. Also, make sure
+ the various asm .set's are reset properly. Write interesting
+ statistics out to stderr if -mstats.
+ (mips_epilogue_delay_slots): New function to return # of delay slots
+ the epilogue needs.
+ (null_epilogue): Return true if the function has a null epilogue,
+ which allows the optimizer to omit jumps to the final j $31 if no
+ stack was created.
+
+ * mips.md (type attribute): Redo how the type attributes work, and
+ change some names.
+ (mode attribute): New attribute to describe the insn's result mode.
+ (length attribute): New attribute to give insn length in words.
+ (dslot attribute): New attribute to return whether an insn needs a
+ delay slot.
+ (define_delay): Use dslot and length attributes to determine if a
+ delay slot is needed.
+ (define_function_unit): Define all of the function units now.
+ (all patterns): Provide new attribute definitions.
+ (all memory reference patterns): modify alternatives to use 'Q' for
+ 1 word instructions, 'R' for multiword instructions.
+ (unnamed patterns): Provide names for all patterns, so that -dp will
+ pinpoint exactly which pattern is used.
+ (*divsi3, *divmodsi4, *modsi3): If optimizing and not -mdebugc, use
+ the *divmodsi4 patterns, so that the opimizer will only use 1 divide
+ if doing a = b / c; d = b % c; This replaces the peepholes, which
+ previously were used for this. If not optimizing, use the normal
+ div/mod patterns.
+ (zero_extendqihi2, extendqihi2): Allow zero/sign extending from
+ memory.
+ (fixuns_trunc{df,sf}si2): Use generator patterns to generate
+ appropriate branches.
+ (movsi_ulw, movsi_usw): New patterns to generate the appropriate
+ unaligned load/store for use in the block move expansion.
+ (mov*): Provide all possible combinations of moves.
+ (movstrsi): New pattern to generate block moves.
+ (negsi2): Change to a define_expand, which uses minus.
+ (one_cmpsli2): Change to a define_expand, which use the nor pattern.
+ (cmp*, b*): Redo comparison/branch completely to save things in
+ global variables, call the common C code to expand the branch, and
+ provide match_operators to do the actual branch.
+ (s*): Provide for the ability to set a register with an integer
+ comparison, without using a branch.
+
+ * make-decrose (AUX_OUTPUT2): Delete macro, since aux-output.c is
+ always compiled separately now.
+ (LANGUAGES): Suppress G++, Objc temporarily.
+ (cse.o): Rebuild cse if the config files change, to get new cost
+ functions, no longer rebuild calls/function since the FUNCTION_ARG
+ macros just call functions in out-mips.c.
+ (SRCS): Change $(AUX_OUTPUT2_SRC) to aux-output.c.
+
+ * make-mips (AUX_OUTPUT2): Delete macro, since aux-output.c is
+ always compiler separately now.
+ (CONFIG2_H): Add rules to rebuild selected modules when the
+ tm-mips.h file changes.
+ (mips-tfile): Rules to build mips-tfile.
+ (mips-tdump): Rules to build mips-tdump.
+ (LANGUAGES): Suppress G++, Objc temporarily, build mips-tfile.
+
+ * mips-tfile.c (whole file): New file to put the MIPS specific debug
+ information into the object file, after the assembler has been run.
+ This is needed because the MIPS assembler provides no method of
+ setting up the debug information for local variables. This is
+ enabled by the make-mips Makefile modifier.
+
+ * mips-tdump.c (whole file): New file to dump the contents of the
+ MIPS ECOFF symbol table in a symbolic format. This is not currently
+ built by default, but make-mips contains rules to build it.
+
+ * tm-decrose.h (MD_EXEC_PREFIX): Change to use the test prefix
+ /usr/ccs/gcc-2.00/gcc- instead of the release prefix /usr/ccs/gcc.
+ (WCHAR_TYPE_SIZE): Define as 16.
+ (WCHAR_UNSIGNED): Define as 1.
+ (DBX_DEBUGGING_INFO): Define moved to tm-mips.h.
+
+
+Tue May 28 06:26:44 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expmed.c (store_bit_field, extract_bit_field): If -fforce-mem
+ specified, copy OP0 into register (and back again, for store).
+
+ * sched.c (memrefs_conflict_p, {true,anti,output}_dependence): Add
+ missing parens.
+
+ * reload.c (find_reloads): Turn usage of reg_preferred_class back on
+ now that the code has been refined.
+
+Mon May 27 12:41:14 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_binary_op_nodefault): Set converted for shifts,
+ so op1 is not converted to the result type.
+ Clean up some warning messages.
+
+ * expr.c (expand_expr): Use temp stack slot for BLKmode SAVE_EXPR.
+
+ * Makefile.in (alloca.o): Use new vars ALLOCA_FLAGS and ALLOCA_FINISH.
+
+Mon May 27 05:42:20 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * sched.c ({read,true,anti,output}_dependence): Remove unused arg INSN.
+ All callers changed.
+
+ * combine.c (subst, case PLUS): Fix typo in (plus (plus X C) Y) case.
+ (subst, case MULT): Distribute MULT over PLUS to try to simplify it.
+
+Mon May 27 05:15:16 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * tm-sparc.h (GO_IF_LEGITIMATE_ADDRESS): Don't accept a SYMBOL_REF
+ sum if FLAG_PIC is not 1. This forces the -fPIC to take effect,
+ even when the optimizer knows how to stitch together HIGH and LO_SUM
+ combinations.
+ (PRINT_OPERAND): Move body to out-sparc.c.
+ * out-sparc.c (print_operand): New function, implementing actions of
+ old PRINT_OPERAND macro. Comments written for all cases.
+ (reg_unused_after): Don't do anything special with JUMP_INSNs. Only
+ do something special with CALL_INSN if REGNO is a call-used reg.
+
+ * cplus-type2.c (store_init_value): Back out 23 Feb change, which
+ was completely backward.
+
+ * dbxout.c, cplus-dbxout.c (dbxout_parms): Also test that TREE_TYPE
+ (PARMS) is not ERROR_MARK_NODE.
+
+ * cplus-init.c (build_up_reference): Check FLAGS parameter to see if
+ we can accept building a reference to a constructor-generated
+ temporary.
+ (various places): Change calls to `build_up_reference' that used to
+ use an explicit `1' to use LOOKUP_PROTECT instead.
+ (build_offset_ref): Use IDENTIFIER_TYPE_VALUE macro to the the type
+ associated with CNAME.
+
+ * cplus-class.c (build_vbase_path): Fix 11 May change by only
+ changing TREE_TYPE (EXPR) if NULL_EXPR. We might build different
+ vbase paths for the same expr in multiple inheritance
+ initialization.
+
+ * Makefile.in: Change sed script so it matches '^# ' instead of just
+ '^#'. This allows processing of md files with #if/#endif controls
+ in their C function bodies.
+
+ * cplus-tree.c (build_cplus_new): Set TREE_SIDE_EFFECTS on RVAL.
+
+ * stmt.c (warn_if_unused_value): Don't warn about EXIT_EXPRs.
+ (expand_decl_cleanup): Add missing type declarations for parameters.
+
+ * cplus-call.c, cplus-class.c, cplus-dbxout.c, cplus-edsel.c: Include
+ stdio.h after cplus-tree.h since the latter references printf.
+ * cplus-search.c, cplus-xref.c: Likewise.
+ * cplus-class.c (prev_class_type): Not static; defined in cplus-tree.h.
+ * cplus-decl.c (builtin_function, auto_function): Don't put & in
+ front of function name.
+ * cplus-typeck.c (comptypes,comp_target_types): Likewise.
+ * cplus-search.c (report_ambiguous_mi_virtuals): Likewise, for arrays.
+
+Sun May 26 22:47:35 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-decl.c (make_temporary_for_reference): New function. Split
+ out code from `grok_reference_init' so we could call it in two
+ places: where it was called before, and when initializing a
+ reference through a constructor for a temporary.
+ (grokdeclarator): Give error message instead of aborting if user
+ gave method qualifiers for function decl.
+ (start_function): Switch to temporary obstack before computing
+ destructor and constructor labels, and before building the
+ function's RESULT_DECL.
+
+ * cplus-decl.c (store_parm_decls): Make a cleanup that controls the
+ action of the garbage collector. This ensures that the call to
+ __gc_pop doesn't get skipped in the function issues a return stmt.
+ * cplus-gc.c (expand_gc_prologue_and_epilogue): Work with new
+ cleanup model.
+
+ * cplus-gc.c (build_i_desc): Figure out whether the i_desc should
+ constitute a defn of its type or not.
+
+ * cplus-typeck.c (c_expand_return): Look through TARGET_EXPR as well
+ as NEW_EXPR for returning addresses of local variables.
+
+ * reload.c (find_reloads): Intialized `goal_alternative_swapped'
+ where `swapped' is initialized to zero.
+
+Sun May 26 21:29:26 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * recog.c (const_double_operand): Fix typo.
+ * reload1.c (choose_reload_regs): Fix typo--swap #endif with }.
+
+ * loop.c (init_loop): Multiply copy_cost by 2.
+ (general_induction_var): Use rtx_cost directly.
+ (expr_benefit): Function deleted.
+
+ * m68k.md (andsi3): Generate bclr if appropriate.
+
+ * cccp.c (do_undef): Just a warning, if deleting something unusual.
+
+Sun May 26 18:51:33 1991 Jim Wilson (wilson at sphagnum.cygnus.com)
+
+ * expr.c (force_operand): When calling recursively, use
+ a temporary to force evaluation of calls. The C language
+ allows `f (g (x), g (y))' to be evaluated in different orders
+ on different hosts, which could lead to different code
+ generation for different hosts.
+
+ * recog.c (const_double_operand): New function for recognizing
+ CONST_DOUBLE rtx's.
+
+ * expmed.c (expand_mult_add): Add new parameter TARGET which is a
+ suggestion of where to store the result; pass it to expand_expr.
+ * loop.c (emit_iv_add_mult): Pass REG to expand_mult_add call as
+ target for the result.
+
+ * gmicro.md, old-sparc.md, pyr.md: Delete obsolete UMULT patterns.
+
+ * expmed.c (expand_mult): Convert DImode constants to a CONST_INT
+ if possible, so that multiplies by these can be optimized by the
+ existing code.
+
+Sun May 26 00:59:42 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * gcc.c (process_command): -save-temps is always valid.
+
+ * varasm.c (output_constructor): Don't crash if val == 0.
+
+ * cse.c (refers_to_mem_p): Handle constant addresses.
+
+ * cccp.c (main): Don't store thru last_include if null.
+
+Sat May 25 06:33:19 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload.c (find_reloads): Don't assume we have at least two operands
+ when we check for a simple copy.
+
+ * sched.c (update_reg_known_value): Deleted.
+ (init_alias_analysis): If have REG_EQUIV note, can always use NOTE's
+ value irrespective of number of sets.
+ Take known value from note, not SET_SRC.
+ (memrefs_conflict_p): Remove gotos.
+ ASHIFT can't occur in an address.
+ (true_dependence, anti_dependence, output_dependence): Take into
+ account the fact that a MEM_IN_STRUCT_P reference cannot conflict
+ with a non-MEM_IN_STRUCT_P reference at a fixed address.
+
+Fri May 24 11:34:39 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * Makefile.in (cplus-tab.c): Put back -d option.
+
+Fri May 24 06:46:07 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rtl.c (rtx_alloc): Ensure we keep the obstack aligned.
+
+Fri May 24 00:17:13 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * reload1.c (choose_reload_regs): Try with inheritance, then without.
+ #if 0 the code to avoid inheritance in certain cases.
+
+Fri May 24 00:13:40 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * out-i386.c (split_di): Check for CONST_DOUBLE before CONSTANT_P.
+
+ * tm-i386.h (LIMIT_RELOAD_CLASS): new macro.
+ (PREFERRED_RELOAD_CLASS): a CONST_DOUBLE can appear in narrower
+ classes than GENERAL_REGS.
+
+ * reload.c (push_reload): Limit reload class even if the SUBREG has
+ already been stripped.
+
+Thu May 23 11:08:21 1991 Jim Wilson (wilson at sphagnum.cygnus.com)
+
+ * sched.c (schedule_insns): Don't schedule a block if the only insn is
+ a CODE_LABEL.
+
+Thu May 23 07:54:57 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (choose_reload_regs): Process reload in first pass if
+ a subsequent reload requires fewer registers.
+ Change criteria for processing from being a strict superset to
+ having an intersecting, non-equal class.
+ Ignore optional and turned-off reloads in loop to see what is forced
+ to be allocated in first pass.
+
+ * toplev.c (compile_file): Fix typo in length of string to allocate
+ for sched2 dump's name.
+
+ * jump.c (find_cross_jump): Don't crash if single_set returns 0.
+
+ * recog.c (general_operand): A SUBREG of a constant is never valid.
+
+ * local-alloc.c (qty_compare, qty_compare_1): Make priority function
+ the same as in global-alloc: quantities with shorter lives are
+ allocated first. This can speed up some code by a factor of three.
+
+Wed May 22 17:40:49 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (emit_reload_insns): Fix some minor bugs in making
+ REG_DEAD notes and recording insn that does store; code sometimes
+ assumed that each call to gen_move_insn produced at most one insn.
+
+Wed May 22 16:51:53 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * reload.c (push_reload): Support LIMIT_RELOAD_CLASS.
+
+Wed May 22 14:14:51 1991 Micheal Tiemann (tiemann at wookumz.gnu.ai.mit.edu)
+
+ * jump.c (jump_optimize): Update the three simplifications that
+ start with the "if (...) x = 1;" case. Add comments explaining how
+ to make them more machine independent, and comments explaining how
+ they might fail in the future. Ifdef out the second case, and add
+ code explaining why it does not work.
+
+ * rtl.h: Put definition of FUNCTION_FLAGS_USES_CONST_POOL here.
+ * integrate.c: Remove definition of it here.
+
+ * integrate.h: New fields in struct inline_remap, min_insnno and
+ max_insnno, which indicate the range of insns covered by insn_map.
+ * integrate.c (expand_inline_function): Set min_insnno and max_insnno.
+
+Wed May 22 12:31:53 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * tm-vaxv.h (ASM_OUTPUT_LOCAL): Use data_section.
+
+ * protoize.c (fancy_abort): Define it.
+ * objc-parse.y (yyprint, set_yydebug): New functions.
+
+ * tree.h (gettags, get_permanent_types, get_temporary_types):
+ Declare them.
+
+ * Makefile.in (protoize.o, unprotoize.o):
+ Use the standard flags and include dirs. Don't use -Wall.
+ * protoize.c (abort): Declaration deleted.
+
+ * cccp.c (main): Ensure `next' field in directory list is initialized.
+
+Wed May 22 09:27:49 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * expmed.c (synth_mult): Return cost of -1 if shift is too
+ expensive.
+
+Wed May 22 07:53:52 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * out-sparc.c (output_move_double): More SImode->Pmode fixes.
+
+Wed May 22 02:43:02 1991 Micheal Tiemann (tiemann at wookumz.gnu.ai.mit.edu)
+
+ * Makefile.in, emit-rtl.c, explow.c, final.c, global-alloc.c,
+ gnulib2.c, hard-reg-set.h, regclass.c, reload1.c, cccp.c: Fix typos
+ and indentation.
+
+Wed May 22 00:14:37 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * combine.c (try_combine): Add to last change; handle subreg
+ in src as well as in dest of i3.
+
+Tue May 21 22:32:08 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * m68k.md (dbra): Rewrite pattern so it reflects simplifications that
+ combine will make.
+
+Tue May 21 10:44:05 1991 Jim Wilson (wilson at sphagnum.cygnus.com)
+
+ * loop.c (strength_reduce): When a loop-vtop note is encountered,
+ reset `not_every_iteration'.
+
+Tue May 21 00:17:31 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-decl.c (init_decl_processing): Always use long type for size_t.
+
+ * varasm.c (assemble_variable): Use ASM_DECLARE_OBJECT_NAME.
+
+ * protoize.c: Include config.h.
+ (chmod, kill): Declarations deleted.
+ They aren't needed, and can conflict with system headers.
+ (wait): BSD declaration deleted.
+ (save_def_or_dec): Add missing fprintf arg.
+
+ * tm-next.h (EXTRA_FORMAT_FUNCTIONS): Fix typo.
+
+ * protoize.c: Use USG and VMS as most files do.
+ Don't expect BSD to be necessary defined outside this file.
+ Define getwd using getcwd, not vice-versa, to be like dbxout.c.
+ * cccp.c, SYSCALLS.c: Use USG and VMS as most files do.
+ Don't expect BSD to be necessary defined outside this file.
+
+Mon May 20 16:54:17 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * tm-i386.h, tm-att386.h, tm-bsd386.h, tm-sun386.h (ASM_BYTE_OP):
+ Renamed from ASM_BYTE.
+ * varasm.c (ASM_BYTE_OP): Likewise.
+
+ * c-decl.c, cplus-class.c (finish_struct): Typo:
+ Had PCC_BIT_FIELD_MATTERS which is now PCC_BITFIELD_TYPE_MATTERS.
+
+ * gcc.c (handle_braces): Don't deref input_suffix if null.
+
+Mon May 20 15:19:27 1991 Michael I Bushnell (mib at geech.gnu.ai.mit.edu)
+
+ * cccp.c (pcfinclude): STRINGDEF struct is now longword aligned.
+
+Mon May 20 14:26:18 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * sparc.md: Remove all arithmetic, logical, and shift patterns for
+ sub-SImode operands. Also fix some DImode patterns.
+
+ * out-sparc.c (emit_move_sequence): Simplified considerably.
+
+ * rtl.c (rtx_alloc): Inline-code an optimized obstack_alloc.
+
+ * cplus-lex.c (make_{pointer,reference}_declaration): Call
+ `build_parse_node' instead of `build1' so memory can be freed.
+
+ * cplus-parse.y: Remove unneeded epsilon rules to produce an average
+ 15% reduction in the number of reductions performed.
+
+ * cplus-parse.y (RETURN_INIT): Use new interface to speed up
+ grammar.
+ * cplus-decl.c (store_return_init): Use new interface.
+
+Mon May 20 11:16:34 1991 Jim Wilson (wilson at sphagnum.cygnus.com)
+
+ * sched.c (schedule_block): A register which dies in a CALL_INSN
+ does not cross calls. A single insn block must be scheduled, to
+ ensure that register lifetime info is corrected updated.
+
+Mon May 20 06:50:37 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): Don't combine when I1 and I2 both feed
+ into I3 and I1 uses the register set in I2.
+
+ * reload.c (find_reloads): Prefer pseudos over other things we may
+ reload.
+
+Mon May 20 02:02:15 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * combine.c (try_combine): Test MODES_TIEABLE_P when i3 src is subreg.
+
+ * m68k.md (trunc*): Don't set cc if use wider insn.
+
+Sun May 19 14:45:46 1991 Ron Guilmette (rfg at ncd.com)
+
+ * Makefile.in (clean): Delete stage1...stage4.
+ (realclean): Delete cexp.output.
+
+ * fixincludes: Handle BSD43__IO* and BSD43_CTRL like IO* and CTRL.
+
+Sun May 19 15:00:05 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * reload1.c (count_possible_groups): New function.
+ (reload): Call it twice. This checks for possible groups
+ after maybe spilling some single regs.
+
+ * configure (magnum, m3230): Aliases for mips/mips.
+
+ * fixincludes (machine/cpu.h):
+ Create in proper dir. Fix mips/cpu.h too.
+
+ * reload.c (find_reloads): Turn off usage of reg_preferred_class.
+
+Sun May 19 09:51:24 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * flow.c (mark_used_regs): Continue putting REG_DEAD notes on
+ fixed registers.
+
+ * regclass.c (reg_class_record): Don't count classes in which objects
+ won't fit.
+
+ * reload.c (find_reloads): Pre-compute preferred classes for each
+ operand; if operand 1 is copied to operand 0, merge the classes.
+ REJECT is now only 1/3 as costly as LOSERS; ? adds 3 to REJECT so
+ that it's semantics don't change.
+
+ * expr.c (compare_from_rtx): Do EQ and NE comparisons unsigned since
+ they are usually cheaper and will cse with comparisons against zero
+ which are already unsigned.
+
+ * reload1.c (choose_reload_regs): Don't try to access reload_out
+ for disabled reload (reload_strict_low may not have been cleared).
+
+ * reload1.c (choose_reload_regs): Don't let optional reloads inherit
+ spill regs until all non-optional reloads have been allocated spill
+ regs.
+ We can use find_equiv_reg even if must_reuse, we just can't get a
+ spill reg that way.
+
+ * expr.c (do_tablejump): When using LABEL_REF in arithmetic, make it
+ in Pmode instead of VOIDmode.
+
+ * function.c (fixup_var_refs_1): Don't try to make paradoxical
+ memory SUBREGs; instead keep SUBREG_REG a pseudo and copy between
+ memory and the pseudo.
+ (fixup_memory_subreg): Abort if we try making paradoxical SUBREGs.
+
+ * reorg.c (redundant_insn_p): Insns we pass may reference resources
+ set by INSN; it is sufficient that they not set resources in INSN.
+
+Sun May 19 08:06:17 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * tm-sparc.h (STRUCT_VALUE): Change SImode to Pmode here, and in
+ other places.
+ (FIRST_PARM_OFFSET): Change 4 to UNITS_PER_WORD here, and in other
+ places.
+ (ROUND_ADVANCE): New macro to compute how far to advance the arg
+ pointer for a give parameter.
+ (FUNCTION_ARG): Use PARM_BOUNDARY instead of 32.
+ (EXTRA_CONSTRAINT): Don't depend on `reload_completed'.
+ * sparc.md (various places): Change many DImode predicates from
+ `general_operand' to `register_operand'.
+
+ * jump.c (find_cross_jump): Fixed 18 May change to use
+ `validate_change' to make sure we get valid, initialized values
+ regardless of which path we choose.
+
+Sat May 18 15:07:29 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * cccp.c: Rename FATAL_EXIT_CODE to FAILURE_EXIT_CODE.
+
+ * gnulib1.c: Rename SFVALUE to FLOAT_VALUE_TYPE.
+ (union flt_or_value): New type.
+ (*): Use that instead of flt_or_int in most places.
+ Delete some variables `intify' that aren't needed.
+ * tm-i386.h: Rename SFVALUE to FLOAT_VALUE_TYPE.
+
+ * stor-layout.c (layout_record): BITFIELD_NBYTES_LIMITED now 1 or 0.
+
+ * rtl.h (struct rtx_def): Drop SHORT_ENUM_BUG; keep ONLY_INT_FIELDS.
+
+ * loop.c (add_cost, copy_cost):
+ Variables replace old macros *_BENEFIT and COPY_PENALTY.
+ (init_loop): New function to set the variables.
+ (expr_benefit): Use rtx_cost.
+ * toplev.c (compile_file): Call init_loop.
+ * cse.c (rtx_cost): Treat mult by 2**n as a shift by default.
+
+ * toplev.c (output_file_directive):
+ Typo in ASM_OUTPUT_MAIN_SOURCE_FILENAME.
+
+ * gnulib2.c [L_trampoline]: Rename function to __trampoline.
+ Always compile it even if empty. Make it global.
+
+Sat May 18 14:11:37 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload.c (find_reloads): Remove unnecessary test when increasing
+ cost of alternative due to non-preferred register class.
+
+ * reload1.c (choose_reload_regs): Fix typo.
+
+ * tm-rs6000.h: Add hard registers for the 8 CR fields; add classes
+ CR0_REGS and CR_REGS.
+ Don't use CC0; add CCUNSmode and CCFPmode.
+ (FIXED_REGISTERS): r31 (fp) is no longer fixed.
+ (REG_CLASS_FROM_LETTER): Remove 'd' for GENERAL_REGS; 'r' already
+ means this.
+ (CONST_DOUBLE_OK_FOR_LETTER): If we can move a constant in two insns
+ for DF or one insn for SF, let it match 'G'.
+ (SECONDARY_RELOAD_CLASS): Define this new macro.
+ (FUNCTION_ARG): Fix typo in testing nargs_prototype.
+ (LEGITIMATE_CONSTANT_P): Always return 1.
+ (FIXUNS_TRUNC_LIKE_FIX_TRUNC): Do not define.
+ * rs6000.md: Don't use CC0; instead use a pseudo which will be assigned
+ to CR_REGS or CR0_REGS. Make variants of arithmetic insns that
+ set only the condition code and that set both the condition code
+ and a normal result.
+ Delete "cc" attribute and add "type" attribute.
+ Define delays for cc-setting insns and for loads.
+ Replace `d' constraint with `r'.
+ Delete patterns for HImode and QImode arithmetic operations.
+ Handle putting "easy" DFmode or SFmode constant into a register.
+ Rework compare and branches; add scc insns.
+ Fix up decrement-and-branch insns, but they still won't be used yet.
+ (call insns): Use pseudo for "lr" in indirect calls.
+ (movdf, movsf): Explictly handle need to use memory to copy between
+ general and FP registers.
+ * out-rs6000.c (next_insn_tests_no_unsigned, unsigned_comparisons_p):
+ Deleted.
+ (update_cc): Likewise.
+ (gen_reg_operand): Tighen up a bit.
+ (cc_reg_operand, reg_or_u_short_operand, easy_fp_constant): New fns.
+ (fp_reg_or_mem_operand, mem_or_easy_const_operand): Likewise.
+ (call_operand): Accept pseudo register.
+ (branch_comparison_operator, scc_comparison_operator): New functions.
+ (secondary_reload_class, ccr_bit, must_save_cr): Likewise.
+ (print_operand, case 'w', 'u'): Support CONST_DOUBLE.
+ (print_operand, cases 'W', 'f', 'F', 'R', 't', 'T', 'C', 'D'):
+ New cases.
+ (print_operand, cases 'j' and 'J'): Now use for bit number in CCR.
+ (output_{pro,epi}logue): If we call function to save/restore fpr's,
+ we need to save/restore LR.
+ Save CR if we modify the call-saved fields.
+
+ * romp.md: Delete HImode and QImode arithmetic operations.
+ (swapxi): Delete; obsolete and never used.
+
+ * tm-a29k.h (TARGET_SWITCHES): Change -mnodw to -mndw.
+ Add -m{no-,}reuse-arg-regs.
+ (SECONDARY_RELOAD_CLASS): Provide a definition for this new macro.
+ * a29k.md: Delete all HImode and QImode arithmetic operations.
+ * out-a29k.c (secondary_reload_class): New function.
+ (incoming_reg): Look at TARGET_NO_REUSE_ARGS.
+
+ * reload1.c (eliminate_regs): Don't remove a PLUS unless inside an
+ address since it would need to change INSN_CODE and can't do it here.
+
+ * reorg.c (uid_to_ruid, max_uid): New vars.
+ (mostly_true_jump): Refine prediction slightly.
+ Use uid_to_ruid map to accurately see if branches are backward.
+ (relax_delay_slots): Pass condition to mostly_true_jump.
+ (dbr_schedule): Allocate and build uid_to_ruid map.
+
+Sat May 18 12:54:45 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * cse.c (insert): "Unchanging" pseudos count as constant.
+
+ * tree.c (make_node): Rewrite end as a switch.
+
+Sat May 18 03:51:06 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cse.c (FIXED_BASE_PLUS_P): Since this is used when called from
+ `expand_inline_function', also catch the case where the base
+ register is VIRTUAL_STACK_VARS_RTX.
+ (simplify_binary_operation): In EQ and NE case, convert a COMPARE
+ operand to something we can optimize.
+ (refers_to_mem_p): Handle the case when `base' is a LO_SUM.
+ * integrate.c (FIXED_BASE_PLUS_P): Define this to recognize offsets
+ from the various virtual registers.
+ (expand_inline_function): Expand exprs using EXPAND_SUM so as to get
+ stack frame addresses instead of pseudos. This yields much better
+ cse (at little cost) for GNU C++. Also, test FIXED_BASE_PLUS_P as
+ an alternative to CONSTANT_P to record a known register value.
+ * jump.c (find_cross_jump): If we are processing a cross jump and
+ the insns fail to match, try looking for a REG_EQUAL note that makes
+ them equivalent insns. If found, keep going. This is important for
+ merging cleanup codes when one cleanup path gets frame address in a
+ register when the other path gets the frame address explicitly.
+
+ * cplus-init.c (build_delete): Fixed residual use of 1-based
+ indexing to use 0-based indexing instead.
+
+ * cplus-decl2.c (grokclassfn): Fix raeburn's May 12 change so that
+ destructors still have the same name.
+
+ * cplus-decl.c (decls_match): Remove dependence on MERGED.
+
+ * cplus-class.c (build_vbase_path): Fixed bug in computing offsets
+ for exprs which are FIXED_TYPE_P.
+ (build_vfn_ref): Change initializer for REF from 0 to NULL_TREE.
+
+ * cplus-decl.c (maybe_build_cleanup): Add LOOKUP_NONVIRTUAL to flags
+ argument in call to `build_delete' if DECL does not use virtual
+ baseclasses. If it does, we go through a function call to save
+ space, unless FLAG_EXPENSIVEO_OPTIMIZATIONS is nonzero. ??Better
+ approach is to know, in expand_cleanups, to clear `flag_no_inline'
+ during the cleanup's expansion.
+
+ * cplus-*.c (various places): Add LOOKUP_DESTRUCTOR to all places
+ where we know we are calling a destructor for a non-null object.
+
+ * stmt.c (fixup_gotos): Run destructors on cleanups that come
+ from the block being exited, in addition to any inner blocks
+ for which LABEL is now defined.
+ (expand_return): Take care of destructors that occur in the
+ current binding level.
+ (fixup_cleanups): If we emitted no insns, don't change *BEFORE_JUMP.
+
+ * rtlanal.c: Define `target_flags' here...
+ * toplev.c: ...not here. This enables us to link gen* programs
+ which might, through rtlanal.o, pull in references to `target_flags'
+ that are never used.
+
+ * function.c: Add declaration for `current_function_uses_const_pool'.
+ * expr.h: Add extern declaration for that variable.
+ * function.h (struct function): Add a slot named
+ `uses_const_pool' for `current_function_uses_const_pool'.
+ * function.c ({push,pop}_function_context): save and restore the
+ value of `current_function_uses_const_pool'.
+ * rtl.h (FUNCTION_FLAGS_USES_CONST_POOL): Defined to be 0200.
+ * integrate.c (initialize_for_inline):
+ FUNCTION_FLAGS_USES_CONST_POOL now contributes to the value of
+ `function_flags'.
+ (output_inline_function): Restore `current_function_uses_const_pool'
+ from `function_flags'.
+ (save_for_inline_copying): Only call `save_constants' if
+ `current_function_uses_const_pool' is nonzero.
+ (save_for_inline_nocopy): Ditto.
+ (save_constants): Tweaked to perform its treewalk faster. Notably,
+ it no longer accepts ptrs to NULL rtl. All callers changed.
+ * varasm.c (force_const_mem): Set `current_function_uses_const_pool'
+ if we create a constant pool reference.
+
+ * cplus-parse.y, c-parse.y: Add new function `set_yydebug'. If
+ YYDEBUG is defined, sets `yydebug' to VALUE. Otherwise, prints
+ warning that operation is invalid.
+ * toplev.c (main): Call `set_yydebug' instead of setting `yydebug'
+ directly. This allows user to turn YYDEBUG off for faster parsing.
+
+ * cse.c (simplify_binary_operation): Eliminate abort when passed
+ DImode operands.
+
+Fri May 17 21:56:41 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * hard-reg-set.h (reg_class_superunion): New var.
+ * regclass.c (init_reg_sets): Compute reg_class_superunion.
+ (reg_classes_intersect_p): New function.
+
+ * reload.c (find_reloads): Alternative is discouraged if it puts
+ a pseudo in a register class it doesn't prefer.
+
+ * reload1.c (basic_block_needs): Now an array, per register class.
+ (reload): Compute separate basic_block_needs for each class.
+ (spill_hard_reg): If pseudo is only in one block, see if that block
+ needs a spill register of a class containing the hard reg; leave the
+ pseudo alone if not.
+
+ * reload1.c (reload_mode, reload_nregs): New vars.
+ (reload_reg_class_lower): Use them.
+ (allocate_reload_reg): New function.
+ (choose_reload_regs): Track size and class of any groups. We
+ can inherit reloads if we are the size of the largest group or
+ if our class is disjoint from those needed for groups.
+ Try all inherits first before all spill register allocations
+ unless there is a later reload with a smaller class; call
+ allocate_reload_reg to do the actual allocation.
+ Use new vars above.
+ (emit_reload_insns): Delete output reload even if we weren't
+ storing to memory.
+
+ * reload.h (reload_secondary_reload, reload_secondary_p): New vars.
+ * reload.c (push_reload): If secondary reload register is needed,
+ make a secondary reload.
+ * reload1.c (reload): Reload with reload_secondary_p nonzero is in use.
+ (choose_reload_regs): Likewise.
+ (emit_reload_insns): Handle secondary reloads, when needed.
+
+ * reload1.c (reload): Add pass to remove death notes for things that
+ are no longer registers or don't die if we must preserve death notes.
+ (emit_reload_insns): Refine REG_DEAD notes to be more accurate; make
+ notes for secondary reloads.
+
+ * reload1.c (emit_reload_insns): Abort for output reloads for jumps;
+ we have to implement this at some point.
+
+Fri May 17 20:08:22 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * protoize.c: Handle ultrix like BSD.
+
+Fri May 17 15:56:41 1991 Richard Stallman (rms at geech.gnu.ai.mit.edu)
+
+ * Pass library function name to INIT_CUMULATIVE_ARGS.
+ * calls.c (expand_call): Pass extra arg to INIT_CUMULATIVE_ARGS.
+ * expr.c (emit_library_call): Likewise.
+ * function.c (assign_parms): Likewise.
+ * tm-*.h (INIT_CUMULATIVE_ARGS): Accept the extra arg.
+ (INIT_CUMULATIVE_INCOMING_ARGS): Likewise, just for symmetry.
+
+Fri May 17 15:41:22 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * tm-i386v4.h (ASM_OUTPUT_COMMON): Don't attempt alignment on a
+ three byte boundary.
+
+Fri May 17 15:25:16 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * function.c (assign_stack_local, assign_outer_stack_local): Make
+ the alignment in bytes.
+
+Fri May 17 14:31:00 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-class.c (build_vbase_path): Only build a COND_EXPR if
+ NONNULL is zero.
+ (resolves_to_fixed_type_p): Check TREE_HAS_CONSTRUCTOR for
+ CALL_EXPRs and INDIRECT_REFs.
+
+ * cplus-call.c (build_method_call): Add call to `constructor_name'
+ if BASETYPE changes.
+ * cplus-init.c (build_new): Add LOOKUP_NONVIRTUAL to FLAGS argument
+ to `build_method_call'. Constructors are never virtual. Also, set
+ TREE_HAS_CONSTRUCTOR bit for return value from `build_method_call'.
+
+Thu May 16 21:36:10 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rtl.h (CONSTANT_P): Now true for a CONST_DOUBLE.
+ * combine.c, cse.c, emit-rtl.c, expr.c, integrate.c, loop.c:
+ Update for new meaning of CONSTANT_P to include CONST_DOUBLE.
+ * optabs.c, recog.c, reload.c, reload1.c, rtl.h, rtlanal.c:
+ Likewise.
+ * romp.md, rs6000.md, out-alliant.c, out-convex.c: Likewise.
+ * out-gmicro.c, out-i386.c, out-i860.c, out-m68k.c: Likewise.
+ * out-sparc.c, out-spur.c, out-tahoe.c: Likewise.
+
+ * combine.c (SUBST, SUBST_INT): If INTO equals NEWVAL, don't
+ record the substitution.
+ (try_combine, subst, make_compound_operation, simplify_and_const_int):
+ No longer need check for changes before using SUBST macro.
+ (simplify_shift_count): Likewise.
+
+ * integrate.c (copy_rtx_and_substitute, case CONST): If what
+ was originally a constant becomes something that is not a constant
+ when passed through a recursive call, return it without the CONST.
+
+ * rtl.c (copy_most_rtx): New function.
+ * rtl.h (copy_most_rtx): Declare it.
+ * function.c (fixup_var_refs_1, case MEM): If a MEM contains VAR,
+ ensure the MEM isn't shared by copying it.
+
+ * expmed.c (expand_divmod): If doing MOD, produce divide result
+ into unique pseudo so that we might CSE the division.
+
+Thu May 16 12:01:42 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * reload.c (push_reload): Try find_dummy_reload before dead regs.
+
+ * function.c (assign_stack_local*): Use GET_MODE_ALIGNMENT.
+ Use CEIL_ROUND consistently.
+ Don't force word alignment even if STRICT_ALIGNMENT (experiment).
+
+Thu May 16 10:31:04 1991 Jim Wilson (wilson at sphagnum.cygnus.com)
+
+ * unroll.c (unroll_loop): Don't abort if start label does not
+ immediately follow LOOP_BEG note. This can happen as a result of
+ jump threading.
+ * reorg.c (mostly_true_jump): Eliminate repeated test in second loop.
+
+ * sched.c (priority): Abort if find a NOTE in a groups of insns that
+ must be scheduled together.
+ (free_pending_lists): New function. Moves every *_LIST rtx on the
+ pending lists to the free list.
+ (add_insn_mem_dependence): Get a *_LIST from the free list instead
+ of creating one if possible.
+ (sched_analyze_1): Don't move an insn across a call if it uses a
+ register that is not already live across calls.
+ (sched_analyze_insn): Likewise.
+ (sched_analyze_1): When flusing the pending lists, put the *_LIST
+ rtx on the free list.
+ (sched_analyze): Likewise.
+ (schedule_block): Likewise.
+ (sched_analyze_2): For a cc0 setter/user pair, put a copy of all
+ dependencies on the first insn onto the second insn.
+ (sched_analyze_insn): Likewise for call sequences.
+ (sched_analyze_insn): Handle REG_INC notes just like SETs.
+ (sched_note_set): Handle hard registers same as psuedo regs.
+ (attach_deaths): Likewise. Don't add REG_DEAD notes to the frame
+ pointer, arg pointer or stack pointer.
+ (schedule_block): Likewise.
+ (rank_for_schedule): Do not check whether each insn of a sequence
+ that must be scheduled together is ready. They will only reach here
+ if they are all already ready.
+ (schedule_block): After reload, don't need to give special treatment
+ to insns at function start which set up the function parameters.
+ Don't treat tail specially if it is part of a group that must be
+ scheduled together.
+ When a group of instructions is scheduled together, run the lifetime
+ analysis code on every instruction in the group from last to first.
+ A call_insn kills all call_used and global regs except those
+ explicitly used by the call_insn.
+ (schedule_insn): Initialize new variables. If USE_C_ALLOCA, free
+ alloced memory immediately after each schedule_block call, not once
+ at the end.
+
+ * rtl.c (add_dependence): When adding a dependence that points to an
+ insn that is part of a sequence that must be scheduled together,
+ make the dependence point to the last insn of the sequence instead.
+
+Wed May 15 13:08:32 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (simplify_and_const_int): If we have
+ (and (OP (lshiftrt X Y) Z) C), for OP of IOR, XOR, and NOT, commute
+ OP and LSHIFTRT to put AND and LSHIFTRT adjacent to try to form
+ ZERO_EXTRACT.
+
+ * combine.c (subst, gen_lowpart_for_combine, get_last_value_validate):
+ Use object's mode instead of VOIDmode when we make
+ (clobber (const_int 0)) in case someone uses the mode for significant
+ bits.
+ * rtlanal.c (side_effects_p): Reject non-VOIDmode CLOBBERs.
+
+ * rtlanal.c (reg_set_p_1): Remove test for `reg_set_reg' being MEM.
+ (reg_set_p): Abort if passed a MEM.
+
+ * toplev.c (strip_off_ending): Strip trailing ".f".
+
+Wed May 15 12:54:18 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-typeck.c (build_modify_expr_1): If the TREE_TYPE of the
+ recursive result is an ARRAY_TYPE, change it to void_type_node so
+ build_compound_expr doesn't lose when calling default_conversion.
+
+ * cplus-tree.h (lang_type): Remove AS_LIST field from lang_type.
+ Use TYPE_MAX_VALUE field of type instead.
+ (TREE_REFERENCE_EXPR): New macro.
+
+ * cplus-parse.y (LC): If we are not in temporary allocation, call
+ permanent_allocation. This frees up any PARM_DECL nodes that were
+ allocated since we processed an inline function. NOTE: we still
+ have to clean up these parms from inline functions that did not go
+ inline.
+
+ * cplus-decl.c (store_parm_decls): Since we no longer push an extra
+ binding level if ! PARMS_HAVE_CLEANUPS, test CLEANUP_LABEL to figure
+ out how far up the binding countours we must look.
+ (init_decl_processing): If FLAG_NO_INLINE is nonzero, set
+ FLAG_DEFAULT_INLINE to zero.
+
+ * cplus-class.c (finish_struct_bits): Copy TYPE_MIN_VALUE and
+ TYPE_MAX_VALUE. These actually hold C++-related data that's moved
+ up from the lang_type data structure.
+
+ * cplus-*.c: Change REFERENCE_EXPR to CONVERT_EXPR. Set
+ TREE_REFERENCE_EXPR bit to indicate a CONVERT_EXPR that's really the
+ address of a C++ reference expression.
+
+Wed May 15 12:30:26 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * tm-sparc.h (FIXED_REGISTERS): Register 0 is not fixed; it is used
+ for the condition code, not to represent the fixed %g0.
+
+Tue May 14 18:59:06 1991 Jim Wilson (wilson at sphagnum.cygnus.com)
+
+ * explow.c (find_next_ref): Start search at first insn after INSN.
+
+ * jump.c (jump_optimize): Update the three simplications that start
+ with the "if (...) x = 1; else {...} if (x) ..." case, so that when
+ HAVE_cc0 is not defined, they do not accept TST insns (which could
+ just be a register to register move). They should only accept insns
+ with the COMPARE operator.
+
+Tue May 14 14:51:33 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * cse.c (simplify_binary_operation): Don't abort when comparing
+ two CONST_DOUBLE values.
+
+Tue May 14 11:35:47 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-common.c (decl_attributes): Fix typo in name of attribute.
+ It should be `aligned'. Also don't crash on unknown attribute.
+
+ * expmed.c (init_expmed): Make a separate object to free back to.
+
+ * hard-reg-set.h (HOST_BITS_PER_LONG_LONG): Provide default definition.
+
+ * toplev.c (main): Implement -gdwarf.
+
+Tue May 14 06:32:48 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * flow.c (mark_used_regs): Don't make REG_DEAD notes for fixed regs.
+
+ * combine.c (subst): Convert (not (ashift C X)) to (or (rotate ..))
+ and similarly for (not (lshiftrt C X)).
+ (make_field_assignment): Make corresponding change in how we recognize
+ bitfield assignment of single bit to zero.
+
+ * combine.c (merge_outer_ops): New function.
+ (simplify_shift_const): Use merge_outer_ops to generalize and
+ simplify handling of outer_ops.
+ Try using distributive law followed by invert distributive law
+ to simplify combinations of logical operations and shifts.
+
+ * emit-rtl.c (gen_highpart): Correct conditional that says when we
+ can get the bits of a DFmode object; copy from gen_lowpart.
+
+ * cse.c (simplify_binary_operation, case MULT): Simplify zero case.
+ (simplify_binary_operation, case DIV): In 0/x, return zero in proper
+ mode.
+
+ * combine.c (simplify_comparison): Can only extend comparison
+ to wider mode if equality comparison or test of sign bit.
+
+Tue May 14 03:26:36 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-tree.h (lang_type): Change to use TREE_VEC to hold basetype
+ info.
+ (CLASSTYPE_N_BASECLASSES, CLASSTYPE_BASECLASS): Changed accordingly.
+ Baseclasses are now counted [0..n) instead of [1..n].
+ (CLASSTYPE_BASETYPECLASSES): Deleted.
+ * cplus-*.c (various places): Change code to work with new
+ representation for basetypes.
+
+ * toplev.c (main): Handle `-gdwarf' as a debug option.
+
+ * cse.c (insert): Treat pseudos marked RTX_UNCHANGING_P as being
+ const.
+
+Mon May 13 22:44:18 1991 Jim Wilson (wilson at ok.cygnus.com)
+
+ * mips.md: In the div/mod peepholes, don't apply the peephole if the
+ first operation overwrites one of its two operands.
+
+Mon May 13 12:14:51 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * expmed.c (store_bit_field, extract_bit_field):
+ Set volatile_p while checking predicates.
+ * recog.h (volatile_p): Declare it.
+ * explow.c (force_not_mem): Do nothing with BLKmode.
+
+ * SYSCALLS.c (u_int): Don't define on DGUX--already defined.
+
+ * m68k.md (zero_extend*): Don't make the subreg in the template.
+ Make it explicitly, and handle subregs as operand 0.
+
+ * tm-convex.h (MODES_TIEABLE_P): Fix typos.
+
+ * loop.c (check_dbra_loop): To check for a loop with a `break', use
+ loop_number_exit_label, not the uid_luid of each label, since loop
+ unrolling may have created new labels with no uid_luid.
+
+ * expr.c (push_block): Fixed typo in last change.
+
+Mon May 13 12:07:25 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (subst): If we can't change comparison code, see if
+ we can instead surround our operation with an XOR.
+
+ * combine.c (make_compound_operation, simplify_and_const_int):
+ Ensure shift counts are non-negative and in range before using them
+ to perform shifts.
+ (simplify_comparison): Likewise.
+
+ * combine.c (try_combine): See if we have previously merged a
+ compare and arithmetic operation. If so try to take it apart to
+ allow further combines (such as making a branch-and-decrement).
+
+ * combine.c (try_combine): Don't make VOIDmode register if our split
+ point is a constant.
+
+ * combine.c (subst): Use COMBINE_RTX_EQUAL_P to see if SET_DEST
+ is our register; two hard regs might have different rtx.
+
+ * combine.c (subst): Generalize associative law handling to
+ cases not involving constants.
+
+ * combine.c (expand_compound_operation): If we would return a
+ (clobber (const_int 0)), return what we were given.
+
+ * combine.c (simplify_shift_const): Clean up by removing fallthrough.
+
+Mon May 13 10:26:00 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (all calls to output_move_double): call return
+ value to avoid spurious compiler warnings.
+ Allow REG in all alternatives of operand 0 where possible.
+ Remove patterns to recognize increment/decrement.
+ (addsi3, addhi3, addqi3): Do this in here instead.
+ (floatdidf2): New pattern.
+ (adddi3, subdi3, negdi2): New patterns.
+ (umulsi3, umulhi3): Remove obsolete UMULT patterns.
+ (divM3, udivM3, divmodM4, udivmodM4): Use "r" constraint instead
+ of "x" or "abc".
+ (sqrtsf2, sqrtdf2): New patterns.
+ (ashldi3, ashrdi3, lshldi3, lshrdi3): New patterns
+ (All shift and rotate patterns): Don't use reg name explicitly in
+ output string: use %N operand reference.
+ (ashlM3, lshlM3): Use `add' instead of `shl'/`sal' if possible.
+ (insv): Fix output constraint. Clarify source. Disable for now -
+ makes worse code.
+ (SImode bit test, all Scond patterns): Allow MEM operands too.
+ (seq, sne): Handle CC_Z_IN_NOT_C.
+ (jump, indirect_jump, tablejump): Align code on word boundary
+ after unconditional jumps.
+ (`loop' patterns): Delete - will never be useful on i386.
+ (call_pop, call_value_pop): New patterns.
+ (return): New pattern: Do `return' if simple epilogue. But only if
+ the real function epilogue isn't next.
+ (movstrsi): Do word moves, not just bytes, if count is unknown.
+ (ffsM2): New patterns.
+
+ * out-i386.c (FP_TOP, AT_SP, RET, RETCOM, POP_ONE_FP,
+ FP_CALL1, FP_CALL): Move to tm-i386.h for use by i386.md.
+ (output_movf, fp_call_internal, output_fix_trunc, split_di):
+ No longer static - called from i386.md.
+ (via_memory): Finish return value change.
+ (output_move_const_double): Delete unused function.
+ (simple_386_epilogue): New predicate.
+ (function_prologue): Allocate frame regardless of whether or not
+ there is a frame pointer.
+ Use output_asm_insn instead of fprintf to push registers.
+ (function_epilogue): Likewise.
+ If there is a frame pointer, don't necessarily fix %esp just to
+ pop a reg - use offset from frame pointer.
+ Fix -fomit-frame-pointer support.
+ Fix RETURN_POPS_ARGS case where args > 32K bytes.
+ (print_operand): A LABEL_REF gets an OFFSET_PREFIX too.
+ (print_operand_address): %esp can only be base reg, never index.
+ (split_di): New function.
+
+ * tm-i386.h: Remove references to obsolete tm-compaq.h file.
+ (TARGET_486): New flag.
+ (TARGET_SWITCHES): New options -m486, -mno486, -m386.
+ (SMALL_REGISTER_CLASSES): New macro.
+ (ASM_OUTPUT_LOOP_ALIGN): New macro.
+ (all reg macros, ARG_POINTER_REGNUM): Create argument pointer,
+ to be eliminated in favor of %esp or %ebp.
+ (HARD_REGNO_NREGS, REGNO_REG_CLASS): Use FP_REGNO_P.
+ (REGISTER_MOVE_COSTS): It is expensive to move between integer and
+ float registers.
+ (FP_REGNO_P): Detect only the FP regs.
+ (all class macros): Delete obsolete classes ABC_REGS & ABCI_REGS.
+ (REG_CLASS_FROM_LETTER): Add `S' for SIREG, remove `x' for ABCI_REGS.
+ (CONST_OK_FOR_LETTER_P): Add `J' for DImode shifts.
+ (FIRST_PARM_OFFSET): Offset now zero.
+ (ELIMINABLE_REGS, CAN_ELIMINATE, INITIAL_ELIMINATION_OFFSET):
+ Use generalized scheme to eliminate frame and arg pointers.
+ (INITIAL_FRAME_POINTER_OFFSET): Delete.
+ (REG_OK_FOR_BASE_P): allow virtual arg pointer.
+ (FP_TOP, AT_SP, RET, RETCOM, POP_ONE_FP, FP_CALL1, FP_CALL):
+ Moved here from out-i386.c for use by i386.md.
+
+ * tm-compaq.h: Delete obsolete file.
+
+Sun May 12 18:38:41 1991 Ken Raeburn (raeburn at watch.com)
+
+ * cplus-decl.c (print_binding_level, print_binding_stack,
+ print_other_binding_stack): New debugging routines; dump one or
+ more binding levels to stderr.
+
+ * cplus-decl.c (push_to_top_level): New routine; saves copies of
+ all class and local bindings, and some other state, and clears the
+ real values, to effectively move to global scope.
+ (pop_from_top_level): Restore the saved state.
+
+ * cplus-decl.c (adjust_type_value): No longer static. Abort if
+ current_binding_level is class binding level; need to investigate
+ that situation further.
+
+ * cplus-decl.c (finish_function): Check that the binding level being
+ popped really is a function-parameter binding level.
+
+ * cplus-tree.h (DESTRUCTOR_DECL_PREFIX): Replaces
+ DESTRUCTOR_DECL_FORMAT; used as a prefix before the class name.
+ * cplus-decl2.c (grokclassfn): Use it, and call build_overload_name
+ rather than just copying the class name.
+
+ * cplus-method.c (fndecl_as_string): Use TREE_TYPE rather than
+ indirecting through type name and the identifier's associated type,
+ since the latter may have changed.
+ (build_nested_name): New argument, text_end; callers changed. Call
+ build_overload_identifier rather than copying class name.
+ (build_overload_value): Strip non-lvalue nodes for all arguments.
+ Fixed up the handling of negative DImode values.
+ (build_overload_identifier): New function. Copy class name (with
+ length) if non-template, or build a name from template parameters.
+ (build_overload_name): Call build_overload_identifier for class
+ names.
+
+ * cplus-parse.y: Added comment about use of $$ for $1.
+ (template_type_name): Removed useless precedence specificiation.
+ (template_arg_list): Wrap TREE_LIST nodes around all arguments in
+ the list.
+ (template_arg): Call groktypename on type names. For expressions,
+ specify "UNARY" precedence.
+ (PRE_PARSED_CLASS_DECL handling): Put a copy of the new class decl
+ into global scope, to avoid recursive expansion, since we start in a
+ non-global scope set up for the parameters.
+
+ * cplus-pt.c (coerce_template_parms): New function. Converts
+ template arguments to appropriate types, returns a vector containing
+ results.
+ (mangle_class_name_for_template): Removed nparms argument.
+ Changed to deal with arglist as vector. No longer call
+ groktypename. Some initial code added for PARM_DECL (non-type)
+ parameters; work not completed.
+ (lookup_template_class): Call coerce_template_parms. Removed some
+ unused code.
+ (push_template_decls, pop_template_decls): Fixed to deal with
+ arglist as vector. More code for non-type parameters.
+ (instantiate_template): Push to top binding level before pushing any
+ declarations.
+ (end_template_instantiation): Pop from top level, then push the new
+ decl at top level.
+
+ * cplus-tree.h (struct lang_identifier): Renamed field "template" to
+ "class_template_info"; accessor macros changed.
+
+ * cplus-pt.c (struct template_info): Renamed from "template".
+ Removed unused fields.
+
+Sun May 12 17:38:46 1991 Jim Wilson (wilson at cygnus.com)
+
+ * unroll.c (copy_loop_body): Fix typo: had `==' for `='.
+
+Sun May 12 17:05:07 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * genattrtab.c (gen_attr): Clear has_asm_insn field in new object.
+
+Sun May 12 04:21:52 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * hard-reg-set.h (HARD_CONST): New macro. Converts integer
+ constants to appropriate type for use with HARD_REG_SET.
+ ({SET,CLEAR,TEST}_HARD_REG_BIT): Use this macro where appropriate.
+ (GO_IF_HARD_REG_SUBSET): Ditto.
+ (HARD_REG_SET): Add new case if FIRST_PSEUDO_REGISTER <=
+ HOST_BITS_PER_LONGLONG.
+ * global-alloc.c: Pass HARD_CONST (0) instead of 0 to functions
+ which are looking for a HARD_REG_SET argument.
+ * reorg.c (resource_conflicts_p): Change comparison of HARD_REG_SET
+ value to compare against HARD_CONST.
+
+ * all xm-*.h files: Added HOST_BITS_PER_LONGLONG where
+ HOST_BITS_PER_LONG was defined.
+ * tm-sparc.h (REG_CLASS_CONTENTS): Fixed in case we're using long
+ long HARD_REG_SETs.
+
+ * toplev.c (main): support -gdwarf switch.
+
+ * longlong.h (umulsidi3): SPARC .umul routine returns the value in
+ WORD_LITTLE_ENDIAN form, so swap. Other word-endian changes for
+ inline mul routines.
+
+ * gnulib2.c (__divdi3): If C is nonzero, negate whole division
+ instead of returning negation of quotient.
+
+Sat May 11 20:06:08 1991 Torbjorn Granlund (tege at krishna.sics.se)
+
+ * expmed.c (outside of functions): New vars: lea_cost, lea_max_mul.
+ (init_expmed): Initialize lea_cost and lea_max_mul.
+ (synth_mult): Use them.
+
+Sat May 11 20:11:41 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-class.c (build_vbase_path): Rewritten and simplified.
+ * cplus-cvt.c (build_up_reference): Try to get away without building
+ a NOP_EXPR around the return value of `build_component_addr'.
+ Ditto for return value from `convert_pointer_to'.
+
+ * cplus-decl.c (void_zero_node): New node. Used in conditional
+ expressions where one arm must do nothing.
+ * various places: replace calls that built this node dynamically to
+ just use the global copy.
+ * cplus-tree.h (void_zero_node): Declare it globally.
+
+ (maybe_build_cleanup): Don't call `convert_force' on the return
+ value of `build_unary_op'. We should have license to modify its
+ type without harm.
+ * cplus-gc.c (protect_value_from_gc): Same idea for VAR_DECL and
+ PARM_DECL nodes.
+
+ * toplev.c (f_options): Add choice for -fPIC.
+
+ * varasm.c (assemble_function): If it's a function name that's the
+ first global name, strip of a leading '*' if there is one.
+
+ * reload.c (find_reloads): Fix comment.
+
+ * stmt.c (expand_return): Call `any_pending_cleanups' with argument.
+
+ * expr.c (expand_expr): In TARGET_EXPR case, If TARGET is null and
+ DECL already has rtl, use that as the target.
+ (expand_expr): In BIND_EXPR try using expand_{start,end}_bindings to
+ catch cleanups...otherwise fixup_cleanups must be modified to deal
+ with cleanups not in any contours.
+
+Sat May 11 15:09:42 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * out-i386.c (via_memory): Return a memref to the stack.
+ (fp_call_internal): Change call to via_memory.
+
+ * expr.c (push_block): New arg BELOW specifies padding direction.
+ All callers changed.
+ (emit_push_insn): Pass an interesting value for BELOW.
+
+ * c-parse.y (typespec): Pass the TYPE_DECL for a typedef name.
+ * c-decl.c (grokdeclarator): Handle TYPE_DECL in declspecs.
+
+Thu May 9 15:17:44 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md (zero_extend pattern): Compute correct constant.
+
+Thu May 9 07:44:20 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (subst): Remove WAS_REPLACED; always check the rtl
+ for specific cases of interest and don't use TO and FROM when
+ looking into the rtl.
+
+ * combine.c (subst, case MEM): Call make_compound_operation here
+ so any ASHIFTs will be MULTs for mode_dependant_address_p calls later.
+ (subst, case PLUS): Remove cases already done elsewhere.
+
+ * expmed.c (emit_store_flag): Don't let the delete_insns_since call
+ we do kill insns to do an auto-inc.
+
+ * flow.c (propagate_block): Don't treat global regs as clobbered
+ over a CALL_INSN even if call-clobbered.
+
+ * stmt.c (expand_end_stmt_expr): Correctly handle the case where an
+ expression statement is just an auto-inc of a var.
+
+ * sparc.md (fix_trunc[sd]fsi2): Finish change to use MATCH_SCRATCH
+ by eliminating DEFINE_EXPAND and making DEFINE_INSN a named pattern.
+
+Wed May 8 13:31:23 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * cccp.c (rescan): Handle symbols before // as before /*.
+
+ * Makefile.in (objc-parse.o): Specify the command.
+
+ * c-parse.y (typespec): Fix previous change.
+
+ * reload1.c (choose_reload_regs): Use spillregs in round robin.
+
+Wed May 8 11:00:29 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-lex.c (tree_node_kinds): Renamed to `tree_node_counts'.
+
+Wed May 8 05:50:29 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * integrate.c (copy_rtx_and_substitute): Don't round frame size.
+
+ * loop.c: Must include insn-flags.h to get
+ HAVE_decrement_and_branch_until_zero.
+ * Makefile.in (loop.o): Likewise.
+
+ * expmed.c (expand_divmod): Use LOG instead of INTVAL (OP1)
+ once we start generating rtl.
+
+Wed May 8 05:38:06 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-decl.c (duplicate_decls): Don't crash on duplicate
+ TEMPLATE_DECLs.
+ (globalize_nested_type): Handle globalizing types when
+ CLASS_BINDING_LEVEL goes out of effect.
+ (init_decl_processing): Comment out decls for ABS, FABS and LABS.
+ They conflict with libg++ inlines.
+
+ * cplus-decl2.c (build_push_scope): Fix bug in last change.
+ (finish_file): Make the dummy decl that we tack on to the global
+ scope a TYPE_DECL instead of a VAR_DECL. Fake global VAR_DECLs are
+ problematic on some machines (i.e. MIPS).
+
+ * cplus-init.c (init_vfields): Use TREE_TYPE (VFIELDS) to find the
+ type for which the VFIELD was last distinguished. This picks up
+ cases where single inheritance overrides base class vtables and the
+ base class does not get a new vtable for the override.
+
+ * cplus-parse.y (named_class_head_sans_basetype): Handle a
+ `template_type_name' by itself. This happens with e.g.
+ friend class Stack<T>.
+
+ * cplus-pt.c (mangle_class_name_for_template): Put ',' between
+ parameters.
+ (push_template_decls): Don't crash if ARGLIST is ERROR_MARK_NODE.
+
+ * cplus-class.c (finish_base_struct): Compute MAX_HAS_VIRTUAL by
+ looking at all the base classes relevant to VFIELDS.
+ (build_vbase_path): Initialize NONNULL to zero.
+
+Tue May 7 23:47:42 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * stmt.c (any_pending_cleanups): Don't fail if block_stack is empty.
+
+Tue May 7 22:46:16 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (simplify_binary_operation; case EQ, NE): Don't assume
+ the address of a symbol is non-zero.
+
+ * sched.c (schedule_insns): Ensure we free memory used by
+ schedule_block when using the C alloca.
+
+Tue May 7 14:13:57 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * reload1.c (mark_reload_reg_in_use): New arg MODE. Mark all the regs.
+ (choose_reload_regs): Pass that arg; don't loop here.
+
+ * c-parse.y (typespec): Convert a TYPENAME to its meaning.
+
+ * fold-const.c (fold): Don't assume symbolic constant is nonzero.
+
+ * c-typeck.c (c_expand_asm_operands): Convert arrays, fcns to pointers.
+
+Mon May 6 23:29:21 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_insn): Only make a REG_WAS_0 note if the previous
+ set was to the same register, not just the same quantity;
+ if previous REG_WAS_0 note, update back pointer.
+ If setting a register to a constant, update QTY_CONST and
+ QTY_CONST_INSN so it points to the last set.
+ In special case for (set REG0 REG1), ensure any REG_WAS_0 notes are
+ updated correctly.
+
+ * genrecog.c (make_insn_sequence): Don't clobber `i' when it is
+ still needed.
+
+ * out-vax.c (print_operand_address): Fix bug in last change in handling
+ (plus (reg) (reg)).
+
+Mon May 6 16:41:50 1991 Torbjorn Granlund (tege at zevs.sics.se)
+
+ * expmed.c (synth_mult): Make it handle t == 0. Improve comments.
+ Use (max_cost <= add_cost) instead of (max_cost < add_cost) to
+ determine if we should fail early (to better prune the search).
+ Remove loop with n from factor synthesis. Remove -2 bias from m
+ loop (for clearity). Add code to use load-effective-address
+ instructions. Use bit-fiddling instead of loop to determine q in
+ the last synthesis case.
+
+Mon May 6 11:21:45 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (convert_for_assignment): Reword an error message.
+
+ * c-typeck.c (build_conditional_expr): Typo in last change.
+
+ * Makefile.in (enquire, enquire.o): Depend on gnulib.
+
+Sun May 5 17:28:22 1991 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * make-cc1.com: Update for GCC 2.0; build insn-attr.h, insn-attrtab.c.
+ Compile and add obj to linker list: c-aux-info.c, c-common.c, c-lang.c,
+ aux-output.c, calls.c, dwarfout.c, function.c, reorg.c, sched.c,
+ sdbout.c, unroll.c, insn-attrtab.c. Remove references to symout.c.
+
+Sun May 5 15:32:01 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * Makefile.in (rest.encap): Make gnulib before float.h.
+
+ * c-typeck.c (build_conditional_expr):
+ Don't assume symbolic constant is nonzero.
+
+ * reload1.c (choose_reload_regs): Ignore avoid_return_reg.
+ (reload_as_needed, reload): Don't bother setting avoid_return_reg.
+
+Sun May 5 14:30:14 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-class.c (prev_class_type): Declare this to be static.
+ (build_vbase_path): Test NONNULL to decide whether a COND_EXPR is
+ actually needed.
+ (finish_struct): Another sort of hard virtual function to deal with
+ is one which comes from the non-leftmost baseclass, and who's index
+ is different between that class and the main derived class. Use new
+ variable DOING_HARD_VIRTUALS to control when we punt and when we
+ plow through.
+ (modify_vtable_entry): If we find at this point that we have a hard
+ virtual function, just put it on the list PENDING_HARD_VIRTUALS if
+ DOING_HARD_VIRTUALS is nonzero.
+ (fixed_type_p): Handle SAVE_EXPR, RTL_EXPR, PLUS_EXPR, MINUS_EXPR,
+ NOP_EXPR and CONVERT_EXPR.
+ (pushclass): Fixed comment. Also change test for whether this is
+ the top-level class scope from an obscure one to an obvious one, and
+ add comment.
+ (pushclass,popclass): Now always allocate a binding level. Later
+ we'll have to rewrite this to actually use it.
+
+ * cplus-gc.c (type_needs_gc_entry): Don't need a GC entry for
+ ERROR_MARK_NODE.
+
+ * cplus-init.c (build_new): Set TREE_CALLS_NEW on RTL_EXPR. This
+ gives us a case that `fixed_type_p' can grok.
+
+ * cplus-lex.c (identifier_type): Make this __inline if compiling
+ with GNU C.
+ (tree_node_kinds): Renamed to `tree_node_counts'.
+
+ * cplus-parse.y (various places): Take advantage of default rule
+ `$$ = $1', and where possible, use $$ instead of $1.
+ Also, back out change for setting `looking_for_typename' to 1 at top
+ level.
+
+ * cplus-decl2.c (build_push_scope): If the user gives X::foo in X's
+ scope, don't return a SCOPE_REF. Just return `foo' instead.
+
+ * cplus-decl.c (init_decl_processing): Don't define `alloca' as a
+ built-in function until libg++ header files agree with its built-in
+ type.
+ (finish_decl): Don't crash if TYPE is error_mark_node.
+
+ * fold-const.c (split_tree): When splitting the tree, don't call
+ convert if the TYPE_MODEs are the smae. This screws up C++ where
+ conversion of one pointer type to another can cause the pointer's
+ value to change.
+
+ * tree.c (get_identifier): Speed up `get_identifier' by about a
+ factor of 2. This becomes noticable with the long names used for
+ C++ overloading.
+ (tree_cons): Make this most frequent user of `make_node' perform its
+ actions inline.
+
+ * calls.c (expand_call): Eliminate many (most) calls to strcmp by
+ being smarter about when to call it. Also, don't call `push_block'
+ in the trivial case when it's not needed.
+
+Sun May 5 08:51:14 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (convert_to_mode): Fix (for the second time) test for when
+ gen_lowpart should be called.
+
+ * cse.c (find_best_addr): Try to fold address.
+ (fold_rtx): Do associativity and (not (not ...)) checks here.
+ (cse_insn): Not here.
+
+ * combine.c (recog_for_combine): New parameter, PNOTES.
+ When we add a CLOBBER, put a REG_UNUSED note for it in *PNOTES.
+ (try_combine): Call recog_for_combine with new parameter.
+ Delete any now-invalid REG_UNUSED notes in OTHER_INSN and add any
+ required new ones.
+ Add REG_NOTES to I3 and I2 due to added CLOBBERs.
+ (remove_death): Call new function, remove_note.
+ (move_deaths): Don't get confused by a CLOBBER.
+ (distribute_notes): Don't make duplicate REG_UNUSED notes.
+ Don't put a REG_DEAD note on an insn when the register is
+ partially modified, but remains valid.
+
+ * rtlanal.c (remove_note): New function.
+
+ * combine.c (try_combine): When making a PARALLEL that does a compare
+ and arithmetic, don't simplify the COMPARE.
+
+ * combine.c (try_combine): Validate that I1DEST isn't being
+ modified invalidly.
+
+ * combine.c (simplify_comparison): In ZERO_EXTRACT case, add missing
+ test for equality comparison against zero; also invert comparison
+ condition.
+ If we can't do a comparison in a narrower mode, but we know that
+ some wider bits are zero, see if we can do it in a wider more.
+
+ * cse.c (simplify_binary_operation): Remove obsolete code to convert
+ negative shift counts to the opposite shift.
+ Don't fold invalid shifts since they may trap (e.g., on Vax).
+
+ * reload1.c (emit_reload_insns): Use rtx_equal_p to see if a result
+ is already in the desired register.
+
+ * combine.c (find_split_point): Add two more ways to split an insn.
+
+ * combine.c (gen_binary): Put a complex operand first in addition to
+ putting constants second, just like subst would do.
+
+ * combine.c (significant_bits): Correct computation of significant bits
+ for division operations.
+
+ * combine.c (apply_distributive_law): Reject complex SUBREGs.
+ SUBREG distributes over logical and addition operations.
+
+ * combine.c (subst; case AND, IOR, XOR): Add some boolean
+ arithmetic simplifications.
+
+ * expr.c (do_jump): ADDRESS_EXPR is not always zero, unfortunately.
+
+ * expr.c (do_store_flag): In case where we are testing a single bit,
+ don't convert to output mode until after we do the shift.
+
+ * optabs.c (expand_binop, expand_unop, expand_fix): Compare
+ enum insn_code objects against CODE_FOR_nothing instead of 0.
+
+ * romp.md (bit_insv): Use CC0 in standard way; i.e., in NE.
+
+Sat May 4 20:41:12 1991 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * c-aux-info.c (gen_aux_info_record): Use getcwd on VMS a la USG.
+ * dbxout.c: Same here.
+ * xm-vms.h: Define unlink as remove
+ (GCC_INCLUDE_DIR): Provide a dummy definition.
+
+Sat May 4 16:46:48 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (can_combine_p, try_combine): Use SMALL_REGISTER_CLASSES
+ to indicate when it is valid to do combines involving hard registers.
+ * cse.c (canon_hash): #ifdef SMALL_REGISTER_CLASSES, don't record
+ hard registers unless they are fp, ap, sp or are fixed.
+ * loop.c (valid_initial_value_p): #ifdef SMALL_REGISTER_CLASSES,
+ hard register aren't valid initial values.
+ * reload1.c (reload): Initialize FORBIDDEN_REGS depending on
+ whether we have small register classes or not.
+
+ * ns32k.md: Replace const_int with const_int_operand.
+ Remove HImode extractions.
+ Remove patterns assigning an AND to CC0.
+ (andcbxx3): Remove name and eliminate case with NOT as second operand.
+ (sbitx, cbitx): Remove patterns involving IOR and ASHIFT; add patterns
+ with ZERO_EXTRACT as destination.
+ (ibitx): Put ASHIFT as first operand in XOR.
+ (bitfield compare): Remove comparison of 1 bit field with 1; combine
+ converts this to comparison with zero.
+ (and-compare-branch): Fold PLUS or MINUS into constant, like combine
+ will do.
+ Remove patterns for reversed cases.
+ * out-ns32k.c (const_int): Deleted.
+
+ * rtlanal.c (reg_used_between_p, reg_set_between_p): Use GET_RTX_CLASS.
+ (reg_set_p_1): If we are setting a MEM, don't think we are setting
+ registers used in its address.
+
+ * m68k.md (cmpsf, cmpdf, tstsf, tstdf for FPA): Use MATCH_SCRATCH.
+ * sparc.md (memory store patterns): Likewise.
+
+ * function.c (assign_parms): Function is varargs function if the
+ last parameter is `__builtin_va_alist_' instead of checking the first
+ parameter. Normally, this is the same, but some functions in MACH
+ have named parameters before va_alist.
+
+ * combine.c (simplify_comparison): Remove abort on paradoxical SUBREGs
+ now that we know they can occur.
+
+ * reload.c (decompose): Handle SCRATCH; it can't conflict with
+ anything.
+ (find_reloads): All operands can set earlyclobber, not just REG & MEM.
+ Add support for "X" constraint.
+ SCRATCH does not match "g" constraint.
+
+Sat May 4 14:03:16 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * enquire.c (EPROP): Avoid a <= out if bad is set.
+
+ * SYSCALLS.c: Test bsd4_2 along with BSD.
+
+Fri May 3 14:26:51 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-decl.c (pushdecl): Stop looping on type if find error mark.
+
+ * loop.c (invariant_p): An address with a PLUS is not the same as
+ MEM_IN_STRUCT_P being set.
+
+ * tree.h (TREE_NO_UNUSED_WARNING): New macro.
+ * stmt.c (warn_if_unused_value): That flag suppresses warnings.
+ * c-typeck.c (build_unary_op): Set flag when converting postinc.
+
+Fri May 3 08:09:47 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * tm-m88k.h (GO_IF_LEGITIMATE_ADDRESS): Remove workarounds for
+ register elimination problems.
+
+Fri May 3 07:14:22 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * a29k.md: Fix typo in dmac pattern.
+ Make many define_splits that convert DFmode and DImode to one word
+ at a time to operate only after reload completes to improve reg alloc.
+ (movdf): Correct typo in mfacc.
+ (rotlsi3): Count is QImode, not SImode.
+
+ * tm-a29kunix.h (BIGGEST_ALIGNMENT): Change to 64.
+
+ * tm-romp.h (OPTIMIZATION_OPTIONS): Enable insn scheduling.
+ (register definitions): No longer need dummy register and class;
+ register numbers for FP register change.
+ * romp.md: Use MATCH_SCRATCH instead of allocating pseudos
+ to the dummy register class or base register depending on alternative.
+ (FP insns): Add missing "=" to constraints in CLOBBERs.
+ (extendqisi2, extendqihi2): Now DEFINE_EXPAND.
+ (mc03 peephole): Can do if right shift >= 24 bits.
+ * out-romp.c (reg_15_operand): Remove special case for FP delay slot.
+ (romp_sa_size, output_fpop, output_loadsave_fpops, output_fpops):
+ Change floating-point register numbers.
+
+ * combine.c (simplify_shift_const, case for shifts): Verify that
+ the host word size is wide enough.
+ Properly handle (ashift (subreg (ashiftrt ...) ...) ...).
+
+ * out-vax.c (print_operand_address, case PLUS): Handle all addresses
+ accepted by GO_IF_LEGITIMATE_ADDRESS.
+
+ * explow.c (plus_constant): force_const_mem does not necessarily
+ return a valid address.
+ * integrate.c (copy_rtx_and_substitute): Likewise.
+
+ * Makefile.in (local-alloc.o): Includes output.h.
+ * rtl.def (SCRATCH, MATCH_SCRATCH): New RTL codes.
+ * regs.h (max_scratch): Add definition.
+ * genconfig.c (walk_insn_part): Handle MATCH_SCRATCH.
+ * genextract.c (walk_rtx): Likewise.
+ * genemit.c (max_operand_1): Likewise.
+ (gen_exp): Emit a SCRATCH for for MATCH_SCRATCH.
+ (gen_insn): We can create (clobber (scratch)).
+ * genoutput.c (scan_operands): Handle MATCH_SCRATCH;
+ use switch instead of if's.
+ * genrecog.c (make_insn_sequence): We can created (clobber (scratch)).
+ (add_to_sequence): Handle MATCH_SCRATCH.
+ * flow.c (life_analysis): Initialize max_scratch.
+ (propagate_block): Update max_scratch with count from this block.
+ (mark_set_1): Make REG_UNUSED note for SCRATCH and count it.
+ * local-alloc.c: Include output.h.
+ (qty_scratch_rtx): New variable.
+ (alloc_qty): Rename INSN_NUMBER to BIRTH since that's what it is.
+ (alloc_qty_for_scratch): New function.
+ (local_alloc): Account for quantities needed for SCRATCH.
+ Allocate and initialize qty_scratch_rtx.
+ (block_alloc): Allocate quantities for SCRATCH operands.
+ (requires_inout_p): Add "X" constraint.
+ * recog.c (scratch_operand): New function.
+ (constrain_operands): SCRATCH matches a register constraint unless
+ strict.
+ Add "X" constraint.
+ * regclass.c (reg_class_record): Add "X" constraint.
+ * reload1.c (emit_reload_insns): Add SCRATCH to test for operand that
+ dies right away; update REG_UNUSED note for SCRATCH.
+ Never need reload insn for SCRATCH, even if no REG_UNUSED note.
+ * rtlanal.c (reg_mentioned_p, reg_overlap_mentioned_p, rtx_equal_p):
+ Support SCRATCH.
+ (volatile_refs_p, side_effects_p, may_trap_p): Likewise.
+ (inequality_comparisons_p, replace_regs): Likewise.
+
+ * flow.c (mark_set_1): Don't do anything special with partial
+ assignments; this is already handled by mark_used_regs and we now
+ want to make LOG_LINKS for these.
+
+ * combine.c: Includes expr.h.
+ (expand_field_assignment, make_extraction): New functions.
+ (get_pos_from_mask, make_field_assignment): Likewise.
+ (can_combine_p): Remove special case for SUBREG in SET_DEST; call
+ expand_field_assignment instead.
+ (try_combine): Remove code to handle STRICT_LOW_PART here.
+ Call expand_field_assignment on SETs in I3.
+ (find_split_point): Split up simple cases of bitfield assignments.
+ (subst, case ZERO_EXTRACT): Remove processing of ZERO_EXTRACT in a
+ SET_DEST from here.
+ (subst, case SET): Try to convert this into a field assignment by
+ calling make_field_assignment.
+ No need to call make_compound_operation for COMPAREs;
+ make_compound_operation now returns an rtx and is no longer passed
+ a pointer.
+ Remove tests for ZERO_EXTRACT in SET_DEST.
+ (make_compound_operation): Now returns rtx and is passed rtx, instead
+ of rtx *.
+ Call make_extraction.
+ (simplify_comparison): Call make_compound_operation here and remove any
+ outermost SUBREGs that aren't doing anything.
+
+ * Makefile.in (combine.o): Includes expr.h.
+
+ * expr.c (convert_to_mode): Correct which cases can use gen_lowpart.
+
+ * final.c (final_scan_insn): Don't set INSN_DELETED_P after writing
+ insn.
+
+ * genoutput.c (main): Don't include aux-output.c in insn-output.c.
+ Include stdio.h before output.h.
+ (output_epilogue): Write definitions for all the predicates
+ placed in `insn_operand_predicate'.
+ * output.h: No longer need to define operand-predicate functions.
+ * configure: (m88k/dg): Only difference between xm-m88k{,dgux}.h was
+ definition of SEPARATE_AUX_OUTPUT, so we don't need xm-m88kdgux.h.
+ * xm-m88kdgux.h: Deleted.
+ Fix typo setting `target' in Makefile.
+ * Makefile.in (AUX_OUTPUT2): Deleted.
+ (OBJS): Remove AUX_OUTPUT2 and add aux-output.o.
+ (aux-output2.o): Now aux-output.o.
+ (insn-output.o): No longer depends on aux-output.c.
+ * make-m88kdgux (AUX_OUTPUT2): No longer define.
+ * tm-m68k.h, tm-romp.h, tm-sparc.h: Define functions in out-*.c and
+ used by insn-output.c.
+ * tm-m88k.h: Remove conditionalization for SEPARATE_AUX_OUTPUT; now
+ always done.
+ No longer define predicate functions; done by genoutput.c.
+ * tm-mips.h: No longer define SEPARATE_AUX_OUTPUT.
+ * out-*.c: Add includes previously present in insn-output.c.
+ * out-sparc.c (output_fp_move_double): No longer static.
+ (output_sized_memop): No longer need to define asm_out_file here.
+ (output_function_epilogue): Correct type; function is void, not char *.
+
+Fri May 3 01:05:44 1991 Micheal Tiemann (tiemann at pogo.gnu.ai.mit.edu)
+
+ * sdbout.c (sdbout_one_type): TYPE_FIELDs may contain other kinds of
+ _DECL nodes than just FIELD_DECL nodes (in GNU C++, at least).
+ Don't look through such nodes until further mods are made to handle
+ them better.
+
+Thu May 2 14:43:48 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-decl.c (finish_enum): Don't store enum type as type of value.
+
+ * c-parse.y (YYPRINT, yyprint): New macro and new function.
+
+ * expmed.c (expand_and): Handle both args constant.
+
+ * expr.c (store_field): Avoid refetching from bitfield if possible.
+
+ * math-68881.h (pow): Negate x if negative when taking log.
+
+ * expr.c (emit_move_insn): Fixed typo in `y1 = change_address' call.
+ Reenable the code to move objects word at a time.
+
+Thu May 2 12:29:16 1991 Eric Youngdale (youngdale at v6550c.nrl.navy.mil)
+
+ * cccp.c (hack_vms_include_specification): Modified conversion of
+ unix filenames to VMS filenames, if no VMS device or directory is
+ present, and a unix style directory name is present, then use the
+ first unix directory name as the VMS device spec. This is only
+ used in '#include <...>' type includes, when the include file has
+ not been found in the standard locations.
+
+Thu May 2 10:06:47 1991 Micheal Tiemann (tiemann at pogo.gnu.ai.mit.edu)
+
+ * cplus-decl.c (init_decl_processing): Call init_gc_processing if
+ -fgc is requested.
+ * cplus-init.c (build_new): Argument to build_compound_expr must be
+ a TREE_LIST all the way. The last elt of the chain cannot be an
+ _EXPR.
+
+Thu May 2 07:33:50 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case CONVERT_EXPR): Pass bitsize to store_field
+ instead of size in bytes.
+
+Wed May 1 13:33:58 1991 Micheal Tiemann (tiemann at pogo.gnu.ai.mit.edu)
+
+ * version.c: Bumped version number to 1.93.
+
+Wed May 1 12:26:36 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * gcc.c (link_command_spec): Pass plain -m to ld.
+
+ * c-decl.c (finish_enum): Clean up re-laying out of type.
+
+Wed May 1 08:04:44 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * Makefile.in: Handle new cplus-*.c files.
+
+ * cplus-typeck.c (common_base_type): Make this function recursive.
+ (build_component_ref): Test whether or not a FIELD_DECL, not whether
+ or not a VAR_DECL||CONST_DECL||TYPE_DECL.
+
+ * cplus-parse.y: Fixed grammar so that template type decls could be
+ used. Previously, support existed for template decls following
+ types, but not as types.
+ * cplus-pt.c ({push,pop}_template_decls): New functions.
+ (instantiate_template): Call `push_template_decls'.
+ (end_template_instantiation): Let `poplevel' restore old bindings.
+ No need to clear out extra stuff.
+ (pushclass, popclass): Call `{push,pop}_template_decls' if the class
+ we are pushing or popping has template arguments. These arguments
+ go at class level.
+
+ * cplus-method.c (build_opfncall): Test TRY_SECOND before testing
+ possibly uninitialized XARG2.
+
+ * cplus-lex.c (init_lex): Initialize NODE_TABLE, OPNAME_TAB and
+ ASSIGNOP_TAB to hold zero. Since these come from malloc'd memory,
+ we cannot trust them to be initialized on startup.
+
+ * cplus-init.c (expand_aggr_init_1): When initializing through a
+ TARGET_EXPR for objects of the same type (e.g., X a = X (10);)
+ use EXP's DECL_RTL as the DECL_RTL of the TARGET_EXPR.
+
+ * cplus-decl2.c (finish_file): Handle new flag `-fgnu-binutils'.
+ When zero, don't use GNU extensions to a.out format. ???Should be
+ merged into varasm.c.
+
+ * cplus-class.c: Added support for `dossiers'. This support is
+ implemented by extending the virtual function table and by giving
+ all C++ objects a virtual function table to hold it's dossier.
+ * cplus-decl.c (record_builtin_type): New function to construct
+ dossier information for built-in types.
+ (output_builtin_tdesc_entries): To keep repeated information under
+ control, we only output this information for the file that contains
+ `main'.
+ (init_decl_processing): Many dossier-related changes.
+ (init_lex): Recognize new reserved words `headof' and `classof' if
+ -fgc.
+ * cplus-parse.y: Grammar now recognizes `headof' and `classof'
+ expressions.
+ * cplus-method.c: Added dossier constructors here.
+ * cplus-tree.h (CLASSTYPE_DOSSIER): New macro: `dossier' is a new
+ field in lang_type.
+ * cplus-typeck.c (convert_for_assignment): Handle
+ `class_star_type_node'.
+
+ * cplus-class.c: New variable current_class_depth. Used to tell
+ what class nesting level the compiler is at.
+ * cplus-decl.c (grokdeclarator): Now supports references to decls
+ that come from nested types. For example, int foo::bar (foo_tag);
+ where `foo_tag' is a tag that comes from foo. Previously this was
+ supported only as int foo::bar (foo::foo_tag);
+ * cplus-decl2.c (build_push_scope): build a SCOPE_REF node while
+ pushing into the context for the scope. When `grokdeclarator' sees
+ one of these nodes (distinuished by its TREE_COMPLEXITY being set to
+ the current_class_depth), it processes the decl and pops the scope.
+
+ * cplus-class.c (build_vbase_path): Trust objects that are
+ `fixed_type_p'. Also, don't assume an object is non-null unless
+ flag says this is explicitly so. InterViews creates and may
+ manipulate (via delete) lots of null objects.
+ (build_vfn_reference): Use IS_AGGR_TYPE test on type, not in
+ INSTANCE.
+ (resolves_to_fixed_type_p): New argument NONNULL is used in case we
+ know and object to be non-zero. All callers changed.
+
+ * cplus-call.c: New file, from file cplus-class.c. Contains code to
+ generate method calls.
+ * cplus-class.h: New file, contains common declarations for
+ cplus-class.c and cplus-call.c.
+
+ * cplus-class.c (finish_struct_bits): Don't leave last_conversions
+ uninitialized.
+
+Tue Apr 30 17:14:00 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * expr.c (expand_expr):
+ Preserve volatility when changing ARRAY_REF to use a pointer.
+
+ * vax.md (indirect_jump): Use parens around register, not @.
+
+ * fixincludes (machine/cpu.h): Delete superfluous `static'.
+
+ * tm-decstatn.h (CPP_PREDEFINES): Define __mips and __LANGUAGE_C.
+
+ * explow.c (allocate_dynamic_stack_space): Compensate if
+ STACK_POINTER_OFFSET throws off the alignment.
+
+ * loop.c (strength_reduce): Typos setting not_every_iteration.
+
+Tue Apr 30 16:10:32 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * vax.md (bicb): Fix typo that caused operand not to be negated.
+ (jlbs/jlbc): Operand[0] cannot be a constant.
+
+ * rtl.h: Put NOTE_INSN_... codes in order.
+ (find_regno_note): Add missing definition.
+
+ * reload.c (find_reloads_address): Handle an indexed stack slot that
+ is made out of range by frame pointer elimination.
+
+Tue Apr 30 14:09:28 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * toplev.c (compile_file): Output gcc2_compiled, not gcc_compiled.
+ * tm-tower-as.h (ASM_IDENTIFY_GCC): Likewise.
+
+Tue Apr 30 13:56:40 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * varasm.c (output_addressed_constants): Return and indication of
+ whether the variable requires link-time relocations.
+ (assemble_variable, get_or_assign_label): Use this value when
+ choosing the section. Use the data section for variables and
+ constants that are otherwise read-only when -fpic is given and
+ when link-time relocations are required.
+ * tm-*.h (SELECT_SECTION): Accept a new second parameter RELOC.
+
+Tue Apr 30 10:24:36 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * rtl.h (NOTE_INSN_LOOP_VTOP), rtl.c (note_insn_name): Add a new
+ note indicating the virtual top of a loop.
+ * jump.c (duplicate_loop_exit_test): Mark the duplicated exit code
+ in the loop as the virtual top of the converted loop.
+ (squeeze_notes): Move loop-vtop notes as well.
+ * loop.c (scan_loop): When a loop-vtop note is encountered, reset
+ `maybe_never' and `call_passed'.
+ (strength_reduce): Similarly, reset `not_every_iteration'.
+
+Tue Apr 30 08:15:50 1991 Michael Meissner (meissner at osf.org)
+
+ * expr.c (do_store_flag): Move the join label after setting the
+ target value to 0, rather than before, which generates code that
+ always stores 0 into the target if the machine does not have a
+ builtin scc operation.
+
+Tue Apr 30 06:26:36 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload): When making reg_equiv_mem and reg_equiv_address
+ from reg_equiv_memory_loc, clear the one we aren't setting; it might
+ have been previously set.
+
+ * final.c (final_scan_insn): Correctly handle when the first insn in a
+ SEQUENCE is a JUMP_INSN that forces restoration of a comparison
+ previously thought unnecessary.
+
+ * fold-const.c (fold, case PLUS_EXPR): If we have 2 * real_cst,
+ fold into a new constant instead of making real_cst + real_cst.
+
+Mon Apr 29 23:09:17 1991 Ken Raeburn (raeburn at watch.com)
+
+ * cplus-decl.c (output_builtin_tdesc_entries): Corrected
+ declaration of permanent_obstack.
+ (init_decl_processing): Record declaration of int with name "int"
+ rather than null.
+ (finish_decl): Fix typo in comment.
+
+ * cplus-class.c (finish_struct): Made error message for union
+ member requiring constructor/destructor a little tidier.
+ (resolve_scope_to_name): Look at fields of current type as well as
+ tags, in case of local typedefs.
+ (build_method_call): Permit explicit call of destructor in class
+ that doesn't have one. (That's what the ARM says....)
+
+ * cplus-decl.c (set_nested_typename): New function, extracted from
+ within pushtag. Extended to deal with null classname.
+ (pushtag): Call it.
+ (pushdecl): For a TYPE_DECL, ensure that the nested typename gets
+ set.
+ (pushdecl_class_level): Ditto.
+ (constructor_name): Test various assertions.
+ (hack_incomplete_structures): If type is a class template, punt.
+
+ * cplus-input.c (getch): Renamed from get_character. Callers
+ changed.
+ cplus-lex.c (old getch): Deleted.
+
+ * cplus-lex.c (save_pending_input, restore_pending_input): New
+ functions for saving and restoring lexer state.
+ (process_next_inline): Restore lexer state after each function.
+ cplus-pt.c (end_template_instantiation): Ditto.
+ cplus-input.c (struct input_source, getch, feed_input): Preserve
+ putback_char and lexer state.
+
+ * cplus-input.c (getch): Return magic cookie on end of saved input
+ for lexer to recognize.
+ cplus-lex.c (yylex): Turn it into END_OF_SAVED_INPUT.
+ (process_next_inline): Require it after inline function body.
+
+ * cplus-lex.c (do_pending_inlines): Don't save away current
+ file/line-no info; character input processing should do that.
+ (yyungetc): Turn conditional abort into assertion test.
+ (note_list_got_semicolon): Since variable "type" is available, use
+ it rather than recompute.
+ (identifier_type): Now static.
+ (yylex): Warn about conflicts with class template expansion names.
+
+ * cplus-parse.y (temporary_scope): New variable.
+ (object and scoped_id actions): Set it to current type.
+ (many other actions): Clear it.
+ (scoped_typename): Now derivable also from scoped_id and TYPENAME.
+ cplus-lex.c (yylex): If temporary_scope is set, use it to
+ determine type of current token being examined, instead of looking
+ always in the global scope. (Can't properly do nested template
+ classes otherwise.)
+
+ * cplus-ptree.c (print_lang_decl): Print out template-info,
+ original-name, decl-main-variant, and pending-inline-info nodes if
+ not null.
+
+ * cplus-pt.c (mangle_class_name_for_template): For negative
+ numbers, use "m" prefix rather than printf's "-".
+ (overload_template_name): Test more assertions. Use
+ SET_IDENTIFIER_TYPE_VALUE macro.
+ (lookup_template_class): Assert template decl node is non-null.
+ Push to permanent obstacks for new allocations.
+ (instantiate_template): Return new class type in a list.
+
+ * cplus-pt.c (undo_template_name_overload): Clear type local
+ definition of template name.
+ (end_template_instantiation): Call it.
+ cplus-parse.y (structsp actions): Ditto.
+ (named_class_head_sans_basetype): Don't call
+ overload_template_name here.
+ (named_class_head): Call xref_tag, to define a tag, before calling
+ it here.
+
+ * cplus-parse.y (tmpl.1, tmpl.2): Delete type declarations, since
+ they have no values.
+ (yyprint, YYPRINT): New function and macro to work with debugging
+ code added to bison.
+ (datadef -> template_header... actions): Assign yychar, rather
+ than calling yyungetc and yylex. Require trailing semicolon.
+ (fn.def1 -> PRE_PARSED_FUNCTION_DECL action): Preserve all of
+ terminal value, instead of just TREE_PURPOSE.
+ (tmpl.1 action): Do instantiation only if '{' or ':' not found.
+ (template_instantiation): Call overload_template_name right away.
+ (primary -> .scope new '(' typename ')' '[' ...): Detect and warn
+ about this construct, which appears to be recognizeable, though
+ disallowed by the ARM.
+ (primary -> delete[]): Return error_mark_node.
+ (primary -> obj TYPESPEC::~TYPESPEC()): Catch, parse as valid.
+ Returned value not determined yet.
+ (typespec): No longer derived from PTYPENAME.
+ (LC): Added missing semicolon at end of rule.
+ (stmt): A PTYPENAME can also be used as a label name.
+
+Mon Apr 29 22:18:47 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * tm-att386.h (ASM_OUTPUT_LOCAL): Align static local variables.
+
+Mon Apr 29 15:20:35 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * fold-const.c (fold): Don't assume an address is nonzero.
+ * cse.c (fold_rtx): Likewise.
+
+ * stmt.c (warn_if_unused_value): No warning for cast of cast of modify.
+
+ * Makefile.in (USER_H): Remove float.h.
+
+Mon Apr 29 13:46:48 1991 Jim Wilson (wilson at cygnus.com)
+
+ * loop.c (scan_loop): When see a REG_EQUAL note, check for both
+ the move_insn and the REG_RETVAL case, since they can occur together.
+ (move_movables): For the move_insn case, handle library calls just
+ like the older normal case code below, that is, skip to the end of a
+ library call when when see a REG_LIBCALL note, and delete an entire
+ library call if when see a REG_RETVAL note.
+
+Mon Apr 29 12:58:19 1991 Jim Wilson (wilson at cygnus.com)
+
+ * sched.c: (schedule_block): Rewrite code that computes which
+ registers are live at the end of the block. Compute this from
+ basic_block_live_at_start info of current block, instead of from
+ all reachable blocks. Previous code failed if one of the
+ reachable blocks consisted of dead code.
+ (sched_note_set): Set bb_live_regs when DEATH is false.
+
+ * sched.c: Update copyright. Correct various problems with
+ indentation and white space.
+ (canon_rtx): Delete obsolete code handling INSN_LIST rtx. Add
+ code to recurse on the operands of a PLUS rtx.
+ (find_symbolic_term): New function. Recursively search an rtx for
+ a SYMBOL_REF or a LABEL_REF and return pointer to one if found.
+ (memrefs_conflict_p): No longer needs to call canon_rtx on
+ operands of a plus. Now handles case of two addresses with
+ different base addresses.
+ (schedule_block): Don't set INSN_DELETED_P bit of ignored notes.
+ Verify that REG_DEAD notes have a register value.
+ (sched_analyze_1): Ifdef out obsolete code which calculates cc0
+ dependencies.
+ (sched_analyze): Likewise.
+ (schedule_block): Likewise.
+ (launch_links): Delete obsolete code for handling SPARC 'orcc' insns.
+
+Mon Apr 29 12:09:32 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * configure: Allow spaces between options and their args.
+
+Mon Apr 29 06:35:09 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (jump_optimize): Don't emit jump to next insn; this would
+ cause jump_optimize to loop.
+ (jump_optimize, duplicate_loop_end_test, do_cross_jump): Never put
+ insn in jump_chain if its INSN_UID is too large.
+ (redirect_tablejump): Likewise.
+
+Sun Apr 28 08:00:01 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-decl.c (init_decl_processing): Merge changes in builtin
+ function handling to match the way that c-decl.c now works.
+ Also add global variables to support that change.
+ (define_function): Ditto.
+
+ * cplus-decl2.c: Add flags for gc and xref.
+ * cplus-tree.h (DECL_GC_OFFEST): New macro for gc.
+ * cplus-tree.h: Rearrange CLASSTYPE_ASSOC and CLASSTYPE_BASETYPES so
+ that the former now uses TYPE_LANG_SPECIFIC storage, and the latter
+ uses TYPE_BASETYPES.
+ * cplus-tree.h: Change overload names of new and delete to `nw' and
+ `dl'. Formerly, `new' was being seen as `ne', the encoding for `not
+ equal'.
+
+ * cplus-xref.c: New file. Adds support for generating
+ cross-reference information such as a class browser or program
+ analyzer would use.
+
+ * cplus-gc.c: New file. Add support for garbage collection.
+ * cplus-decl.c (finish_decl): Tie decls to their places in the
+ garbage collector.
+ * cplus-init.c (build_new): Added hooks for gc.
+ * cplus-typeck.c (convert_arguments): protect arguments from the
+ garbage collector if -fgc.
+ (build_modify_expr): More gc-related changes.
+
+Fri Apr 26 07:31:26 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * integrate.c (expand_inline_function): Add missing increment of I.
+
+Thu Apr 25 11:07:11 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md (various patterns): Use nonimmediate_operand in place of
+ reg_or_nonsymb_mem_operand and constraint `m' in place of `Q'.
+ * tm-m88k.h (EXTRA_CONSTRAINT): Only needed for a call address.
+ * out-m88k.c: reg_or_nonsymb_mem_operand and symbolic_memory_p are
+ now unused.
+
+ * m88k.md (symbolic store patterns): These patterns are all
+ unnecessary and are deleted.
+ * out-m88k.c (emit_move_sequence): Eliminate the case that
+ generated a CLOBBER. This was intended to use the symbolic store
+ patterns, but isn't needed.
+ (symbolic_memory_operand): Delete, no longer used.
+ (output_prologue): Don't check for suspicious register elimination
+ changes.
+ * tm-m88k.h (GO_IF_LEGITIMATE_ADDRESS): Treat the frame pointer
+ like the argument pointer as both may change to REG+SMALLINT.
+
+Tue Apr 23 15:08:03 1991 Jim Wilson (wilson at cygnus.com)
+
+ * out-sparc.c (output_scc_insn): Clean up and expand comments.
+ Don't assume that JUMP_LABEL fields are always valid, they aren't
+ when compiling without optimization.
+
+Mon Apr 22 13:56:43 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-class.c (prepare_fresh_vtable): Thoroughly update virtual
+ function tables that come from baseclasses to contain the latest
+ overrides from derived classes. This was done (in a different way)
+ for virtual baseclasses, but left undone for non-virtual
+ baseclasses.
+ (finish_struct_bits): Use assoc lists instead of class basetype list
+ to walk through the classes base classes. This gives us more
+ relavant classes to check against.
+ * cplus-init.c (init_vfields): New function to recursively walk
+ objects and make sure their vfields are initialized.
+ * cplus-init.c (emit_base_init): Call `init_vfields' from top level.
+
+ * cplus-tree.h (TYPE_IDENTIFIER): New macro, gives the
+ IDENTIFIER_NODE for a given aggr TYPE.
+ * cplus-class.c (add_method): Use TYPE_IDENTIFIER.
+ * cplus-cvt.c (various places): Ditto.
+
+ * cplus-class.c (finish_struct): Add TYPE_DECLs to the list of a
+ class's members that come from the types implicitly declared tags.
+
+ * cplus-decl.c (grokdeclarator): If a function is declared `static
+ inline', don't give it global visibility, regardless of what #pragma
+ interface/implementation suggests.
+
+ * cplus-decl.c (finish_function): ??? Questionable change for PIC:
+ don't let constructors and destructors that manipulate vtables go
+ inline, since this somehow reduces page sharing. Really???
+
+ * cplus-except.c (init_exception_processing): Use `pushdecl' to
+ install global info that this function sets up. That way later
+ decls can override this info (such as with an inline function).
+
+ * cplus-init.c (build_vec_delete): Set TREE_SIDE_EFFECTS of
+ controller. Otherwise the loop won't execute.
+
+ * cplus-method.c (prepare_inline): Rewritten and simplified.
+ (do_inline_method_hair): Ditto.
+
+ * cplus-tree.c (lang_output_debug_info): Only output nested type if
+ we would also output enclosing type.
+
+ * cplus-typekc.c (c_expand_return): Use pseudo for intermediate
+ return value if necessary. GCC can't read the function return
+ registers in an inline functino when the return value is being
+ ignored.
+
+Mon Apr 22 14:36:01 1991 Jim Wilson (wilson at cygnus.com)
+
+ * sched.c (init_alias_analysis): Handle REG_EQUIV notes just like
+ REG_EQUAL notes.
+
+ * sched.c (sched_analyze_2): Don't recurse on constant rtx's.
+ This is necessary so that the cc0_rtx in CONST_DOUBLEs won't be seen.
+ (sched_analyze): Call sched_analyze_insn for JUMP_INSNS also, so
+ that cc0 users will get an automatic dependence on their previous
+ insn.
+ (launch_links): Ifdef out special treatment of insns which set the
+ condition codes. This is obsolete, and was SPARC specific anyways.
+ (new_sometimes_live): Clarify code that aborts if regno is greater
+ than max_regno.
+ (schedule_block): If the last insn sets cc0, then it must always
+ be left in place.
+ (new_insn_dead_notes): New function. Determines whether a SET or
+ CLOBBER in an insn created by splitting needs a REG_DEAD or
+ REG_UNUSED note added.
+ (update_links): Ignore REG_EQUIV and REG_EQUAL notes on insns that
+ have more than one set. Generalize flow analysis of the sets in
+ the new insns so that it can handle new insns which have multiple
+ sets or new clobbers.
+
+Mon Apr 22 08:15:50 1991 Michael Meissner (meissner at osf.org)
+
+ * gcc.c (input_suffix): New global var; holds current file's suffix.
+ (handle_braces): Substitute X in %{.S:X} if the current file has
+ suffix .S. Similarly, substitute X in %{!.S:X} if the current file
+ does not have suffix .S.
+ (validate_switches): Ignore .S part in %{.S:X} construct.
+
+Sat Apr 20 14:41:17 1991 Micheal Tiemann (tiemann at pogo.gnu.ai.mit.edu)
+
+ * final.c (leaf_function_p): Define this in any event.
+
+Sat Apr 20 10:45:43 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * loop.c (check_dbra_loop): Use GET_RTX_CLASS when appropriate.
+ Check for setting biv with single_set rather than only allowing a SET.
+ If a loop has a `break', we can't reverse it.
+
+ * cse.c (cse_insn): Fold inside operands of a CALL (mostly to find the
+ best address form to use).
+
+ * cse.c (simplify_unary_operation): Convert (neg (neg ..)) to NEG.
+ Similarly for NOT.
+ (simplify_binary_operation): Simplify things like (-a) + b.
+ Convert UDIV with divisor a constant power of two into LSHIFTRT.
+ Similarly for UMOD.
+ Only fold shifts of a zero by a value into zero if the value has
+ no side effects.
+ Remove code to handle negative shift counts.
+
+ * tm-a29k.h (OPTIMIZATION_OPTIONS): Allow insn scheduling to be
+ enabled, now that it works for the 29k.
+
+ * tm-rs6000.h (LINK_SPEC): Add "-bhalt:4" to LINK_SPEC (don't ask!).
+
+Fri Apr 19 13:18:52 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * explow.c (memory_address): Test `cse_not_expected' instead of
+ `optimize' so that we don't make new pseudos after flow is run.
+
+ * genflags.c (gen_insn): If extra condition is more than one line,
+ use \'s to make proper multi-line macro definition.
+
+Thu Apr 18 13:40:01 1991 Jim Wilson (wilson at cygnus.com)
+
+ * loop.c (check_dbra_loop): Reenable no_use_except_for_counting code
+ which was mistakenly ifdefed out as buggy. The actual bug was in
+ strength_reduce, and has already been fixed.
+
+Thu Apr 18 09:47:25 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * loop.c (record_giv): Allow for the case where regno_last_uid
+ of DEST_REG has been moved or deleted.
+
+ * rtlanal.c (replace_regs): Add missing argument in recursive call.
+
+ * recog.c (nonmemory_operand): Only call general_operand for
+ a SUBREG if it is a MEM, just like register_operand.
+
+ * local-alloc.c (block_alloc): Handle case where the last insn of
+ a REG_NO_CONFLICT block requires some CLOBBERs, but is a single SET.
+
+ * out-romp.c, out-rs6000.c (next_insn_tests_no_unsigned): If a
+ REG_UNUSED note for (cc0) is present on INSN, return 1.
+
+ * jump.c (delete_jump): If the previous insn sets cc0 but we can't
+ delete it for some reason, add a REG_UNUSED note for cc0 in that insn.
+
+ * out-a29k.c: Rename input_operand to in_operand and output_operand
+ to out_operand to avoid conflict with output_operand in final.c.
+ * a29k.md: Likewise.
+ (call patterns): Don't put SYMBOL_REF in MEM for recursive call;
+ it might not be recursive if inlined; let cse do it later.
+ * tm-a29k.h (RTX_COST, ADDRESS_COST): All addresses have the same
+ cost, but MEM is expensive.
+
+Tue Apr 16 16:01:47 1991 Michael Meissner (meissner at osf.org)
+
+ * configure: Add osfrose, osf, and mips/dec-osfrose.
+
+ * out-mips.c (toplevel): Include necessary include files so
+ out-mips.c can be compiled separately.
+ (g_switch_value): New variable to hold -G xx value.
+ (g_switch_set): New variable to indicate if -G xx used.
+ (current_function_file): New variable to hold last .file.
+ (file_in_function_warning): New variable to hold if we've warned the
+ user that ECOFF can't switch files within a function.
+ (mips_rtx_classify): New array to classify an insn.
+ (mips_reg_names): New array to hold the register names.
+ REGISTER_NAMES initializes all elements to point into here, and
+ override_options resets the names if -mrnames is used.
+ (mips_sw_reg_names): New array to hold the alternate register names.
+ (mips_regno_to_class): New array to map hard register number to
+ register class.
+ (uns_arith_operand): Rewrite so call to register_operand is done
+ last, not first.
+ (arith_operand): ditto.
+ (arith32_operand): ditto.
+ (large_int): New function to return true if int constant will take 2
+ instructions to load into a register.
+ (reg_or_0_operand): New function to return true if a register or
+ constant 0 is the operand for use in store patterns.
+ (md_register_operand): New function to return true if either the hi
+ or lo register is used.
+ (mips_const_double_ok): New function to return true if a
+ CONST_DOUBLE can be used as a constant in a RTL expression. At
+ present, only DImode constants and 0.0 is allowed.
+ (simple_memory_operand): New function to return true if a memory
+ reference is a simple register + small offset.
+ (gp_memory_operand): New function to return true if a memory
+ reference uses the global pointer.
+ (mips_move_instructions): New function to handle all data movement
+ of one word or less.
+ (mips_move_2words_instructions): New function to handle all data
+ movement of two words.
+ (init_cumulative_args): Remove print_tree debug call.
+ (function_arg_partial_nregs): Fix bug in passing structures where
+ the wrong field was used.
+ (print_options): Enable this function, body was in #if 0.
+ (override_options): Spell function name with two r's. Change how
+ the -G xx and -mGx options are handled. If neither passed use the
+ appropriate default. If -mgas make sure debug format is DBX, and if
+ not -mgas, use SDB debug format. If -mrnames and -mgas, give an
+ error message, otherwise set up mips_reg_names. Set up the
+ mips_rtx_classify array.
+ (print_options): New function instead of a long macro. Add %C to
+ print part of the opcode for a branch condition, %N to print the
+ inverted branch condition, %( to do .set noreorder, %) to do .set
+ reorder, %[ to do .set noat, %] to do .set at, %& to do .set
+ noreorder if filling delay slots, and %# to print nop if delay slot
+ not filled.
+ (print_operand_address): New function instead of a long macro.
+ (compute_frame_size): New function to abstract all the frame related
+ information like frame size, saved registers, etc.
+ (save_restore): Common function between the prologue and epilogue to
+ save/restore the registers in the proper order. Make $31 saved at
+ function pc +4.
+ (function_prologue): Call compute_frame_size and save_restore. Make
+ sure the appropriate .file is done before any statement in the
+ prologue since the MIPS ECOFF requires this.
+ (function_epilogue): Call compute_frame_size and save_restore.
+
+ * tm-decstatn.h (CPP_PREDEFINES): Define the appropriate macros.
+ (*_SPEC): Move the DECstation related specs here from tm-mips.h.
+
+ * tm-decrose.h (new file): File to support OSF/1 with OSF/rose
+ object format.
+
+ * tm-mips-sysv.h (CPP_PREDEFINES): Define the appropriate macros.
+ (*_SPEC): Move the DECstation related specs here from tm-mips.h.
+
+ * tm-mips-bsd.h (CPP_PREDEFINES): Define the appropriate macros.
+ (*_SPEC): Move the DECstation related specs here from tm-mips.h.
+
+ * tm-mips-news.h (CPP_PREDEFINES): Define the appropriate macros.
+ (*_SPEC): Move the DECstation related specs here from tm-mips.h.
+
+ * tm-iris.h (CPP_PREDEFINES): Define the appropriate macros.
+ (*_SPEC): Move the DECstation related specs here from tm-mips.h.
+ (SET_FILE_NUMBER): Define, so that .file number is always 1.
+ (LABEL_AFTER_LOC): Define, so that a label appears after .loc.
+ (STACK_ARGS_ADJUST): Iris frames require 32 bytes at the top of the
+ call frame instead of the normal MIPS 16.
+
+ * mips.md (all): Add first cut at attributes to identify insn type.
+ (all): Where appropriate, use @ form for alternates, instead of
+ using C code.
+ (define_delay): Put arithmetic and one word stores in call, jump,
+ branch delay slots.
+ (define_function_unit): Add functional unit definitions for memory
+ and integer multiply/divide.
+ (anonymous add/subtract insn): Remove support for reg + large offset
+ that omitting the frame pointer caused in 1.xx to see if it is
+ needed anymore.
+ (mulsi3): Add clobbers for the hi/lo registers. Add a define_split
+ and an anonymous define_insn to separate the mult instruction from
+ the mflo.
+ (divmodsi4): Add clobbers for the hi/lo registers.
+ (udivmodsi4): Add clobbers for the hi/lo registers.
+ (divsi3): Add clobbers for the hi/lo registers. Restrict divides
+ and modulus to register / register.
+ (modsi3): ditto.
+ (udivsi3): ditto.
+ (ymodsi3): ditto.
+ (divide peepholes): Add two peepholes to catch divide followed by
+ modulus of the same values.
+ (anddi3): Remove pattern, use default behavior.
+ (iordi3): Remove pattern, use default behavior.
+ (xordi3): Remove pattern, use default behavior.
+ (truncsiqi2): Remove pattern, use default behavior.
+ (truncsihi2): Remove pattern, use default behavior.
+ (trunchiqi2): Remove pattern, use default behavior.
+ (truncdfsf2): Remove asm comment.
+ (extendhisi2): Add a define_split for shift case.
+ (extendqisi2): Add a define_split for shift case.
+ (extendqihi2): Add a define_split for shift case.
+ (movdi): Turn into a define_expand to guarantee that memory <->
+ memory moves go through a register.
+ (movsi): ditto.
+ (movhi): ditto.
+ (movqi): ditto.
+ (movsf): ditto.
+ (movdf): ditto.
+ (movdi_internal): new define_insn. Add fp registers to the
+ alternatives. Call mips_move_2words_instructions to do the actual
+ movement. Require memory addresses to be offsetable.
+ (movdf_internal): ditto.
+ (movsi_internal): new define_insn. Add storing 0 to memory
+ directly using $0. Add transfer to/from multiply/divide registers,
+ and to the fp status register. Call mips_move_instructions to do
+ the actual work.
+ (movhi_internal): ditto.
+ (movqi_internal): ditto.
+ (movsf_internal): ditto.
+ (jump): Add %& to turn on .set noreorder if filling delay slot.
+ (tablejump): Ditto.
+ (call): Ditto.
+ (call_value): Ditto.
+ (indirect_jump): New required pattern, add %& for delay slot.
+ (nop): Use %( %) to turn on/off .set noreorder.
+ (probe): Use %[ %] to turn on/off .set noat.
+
+ * tm-mips.h (abort): Define abort to be fancy_abort for now.
+ (toplevel): Move all extern's to the start of the file, rather than
+ scattered throughout.
+ (OPTIMIZATION_OPTIONS): New macro, -O sets -fomit-frame-pointer, and
+ -fdelayed-branch. -O2 sets -fstrength-reduce, -fcse-follow-jumps,
+ -fexpensive-optimizations, -fthread-jumps, -frerun-cse-after-loop.
+ -O3 sets -finline-functions.
+ (*_SPEC): Move most of the target specific spec's to the appropriate
+ file, rather than defining them in tm-mips.h. Defaults are for MIPS
+ RISC-OS with default system.
+ (CPP_SPEC): If preprocessing .S files, define LANGUAGE_ASSEMBLY
+ instead of LANGUAGE_C.
+ (MIPS_VERSION): Add meissner version number.
+ (MIPS_DEBUGGING_INFO): Define this for the future.
+ (TARGET_*): reorder which bit means what. Add bits so we can tell
+ whether any of the -mG[012] options were used. Redefine some debug
+ switches.
+ (BYTES_BIG_ENDIAN): Always define to 0/1 now.
+ (WORDS_BIG_ENDIAN): Always define to 0/1 now.
+ (MAX_PARM_BOUNDARY): Delete, since it's no longer used.
+ (BIGGEST_FIELD_ALIGNMENT): Define to be 64.
+ (CONSTANT_ALIGNMENT): New macro, make sure strings are aligned.
+ (DATA_ALIGNMENT): New macro, make sure byte arrays are aligned.
+ (FIRST_PSEUDO_REGISTER): Bump to 67, add hi, lo, fcr31.
+ (FIXED_REGISTERS): Add initializations for hi, lo, and fcr31.
+ (CALL_USED_REGISTERS): Add initializations for hi, lo, and fcr31.
+ (MD_REG_P): New macro to return if hi/lo register.
+ (ST_REG_P): New macro to return if fp control register.
+ (HARD_REGNO_NREGS): Return 4 for single precision complex.
+ (MODES_TIEABLE_P): Add complex float type support.
+ (FRAME_POINTER_REQUIRED): Make this always 0.
+ (NO_RECURSIVE_FUNCTION_CSE): New macro, define as 1.
+ (enum reg_class): Add class for the hi register, lo register, either
+ hi or lo registers, status registers.
+ (REG_CLASS_NAMES): Support new register classes.
+ (REG_CLASS_CONTENTS): ditto.
+ (REG_CLASS_FROM_LETTER): ditto.
+ (REGNO_REG_CLASS): Use an array to map register # -> class.
+ (CONST_OK_FOR_LETTER_P): Add `L' for constants which have bottom 16
+ bits all zero, and `M' which require two instructions to load.
+ (CONST_DOUBLE_OK_FOR_LETTER_P): Use `CONST_DOUBLE_HIGH' and
+ `CONST_DOUBLE_LOW'.
+ (EXTRA_CONSTRAINT): New macro, `Q' for gp memory references, and `R'
+ for reg + small offset references.
+ (struct mips_frame_info): New structure to hold all frame related
+ information, calculated by compute_frame_size.
+ (INITIAL_FRAME_POINTER_OFFSET): New macro, use compute_frame_size to
+ calculate where the frame should go.
+ (ACCUMULATE_OUTGOING_ARGS): New macro, define so stack pushes are
+ folded into the frame.
+ (REG_PARM_STACK_SPACE): Redefine to take an argument and return 16.
+ (OUTGOING_REG_PARM_STACK_SPACE): New macro, define to say we must
+ allocate stack space for arguments passed in registers.
+ (TARGET_FLOAT_FORMAT): New macro, define as IEEE_FLOAT_FORMAT.
+ (FUNCTION_ARG_BOUNDARY): New macro to determine argument padding
+ requirements.
+ (MIPS_STACK_ALIGN): New name for AL_ADJUST_ALIGN macro.
+ (FIX_FRAME_POINTER_ADDRESS): Delete, no longer used.
+ (FUNCTION_PROFILER): No longer have to switch between different
+ register names, override_options now sets up reg_names correctly.
+ (TRAMPOLINE_TEMPLATE): New macro, define as a dummy.
+ (TRAMPOLINE_SIZE): ditto.
+ (INITIALIZE_TRAMPOLINE): ditto.
+ (INDIRECTABLE_ADDRESS): Delete, fold into GO_IF_LEGITIMATE_ADDRESS.
+ (GO_IF_LEGITIMATE_ADDRESS): If -mdebuga, don't allow <label>(<reg>)
+ type addresses, which the machine really doesn't support, but you
+ currently get better code in some instances by pretending it does
+ support it.
+ (LEGITIMATE_CONSTANT_P): Call mips_const_double_ok if CONST_DOUBLE.
+ (ENCODE_SEGMENT_INFO): New macro, set SYMBOL_REF_FLAG (ie, volatil)
+ if refering to an item via the gp pointer.
+ (SLOW_BYTE_ACCESS): Define to 1, it is supposed to generate better
+ code on RISC machines.
+ (classify_op): New macro to classify an insn.
+ (additive_op): Use classify_op to figure out if PLUS or MINUS.
+ (divmod_op): New macro to identify DIV, MOD, UDIV, UMOD insns.
+ (unsigned_op): New macro to identify UDIV, UMOD insns.
+ (REGISTER_NAMES): All names are now pointers into mips_reg_names, so
+ that we don't have to continually test whether -mrnames is used or
+ not. The override_options function sets this up appropriately.
+ (REGISTER_NUMCHAR): Deleted.
+ (REG_NAME): Deleted.
+ (ADDITIONAL_REGISTER_NAMES): Define both names for the gp registers,
+ so people can use either $r4 or a0 in asm statements.
+ (PRINT_OPERAND): Call print_operand function instead of expanding a
+ huge macro. Add %C, %N, %(, %), %[, %], %&, %#.
+ (PRINT_OPERAND_PUNCT_VALID_P): Add `(', `)', `[', `]', `&', and `#'.
+ (PRINT_OPERAND_ADDRESS): Call print_operand_address function instead
+ of expanding a huge macro.
+ (DBX_OUTPUT_SEQEND): New macro, emit .set reorder after filling
+ delay slot(s).
+ (ASM_OUTPUT_SOURCE_FILENAME): Add check for doing .file of same file
+ -- this is needed for the prologue to do a .file before all prologue
+ instructions, rather than after the instructions which set up the
+ stack. Also, warn about #line requests that cannot be honored in
+ MIPS ECOFF binaries.
+ (ASM_OUTPUT_CASE_END): Delete, since it was only used to go back to
+ the text section, and GCC does this now automatically.
+ (READONLY_DATA_SECTION): New macro, define to be rdata_section.
+ (SELECT_SECTION): Don't force volatile readonly items into .data.
+ (ASM_COMMENT_START): New macro, define to be '\t\t# ' for -dp.
+ (SEPARATE_AUX_OUTPUT): New macro, define this to separately compile
+ out-mips.c.
+
+Tue Apr 16 15:00:51 1991 Jim Wilson (wilson at cygnus.com)
+
+ * unroll.c (final_giv_value): Use expand_binop instead of
+ gen_sub2_insn when emitting subtract insns, since expand_binop
+ will work for any operands.
+
+ * sched.c (schedule_insns): Don't split no-op moves; doing so
+ breaks the code that handles REG_NO_CONFLICT blocks.
+ (update_links): Delete the code that prints a warning for
+ REG_EQUAL notes where the original dest can't be found. This no
+ longer occurs because of the above change.
+
+ * sched.c: Generalize memory aliasing code so that it will work on
+ non-RISC machines. Instead of saving just the insn on the pending
+ lists, now saves both the insn and the mem rtx. Old variables
+ pending_read and pending_write replaced with pending_read_insns,
+ pending_read_mems, pending_write_insns, and pending_write_mems.
+ (read_dependence, true_dependence, anti_dependence,
+ output_dependence): Now passed a MEM rtx instead of a PATtern.
+ (add_insn_mem_dependence): New function. Adds an insn and a mem
+ to a pending list pair.
+ (sched_analyze_1, sched_analyze_2, sched_analyze): Modified to use
+ new pending list scheme.
+ (schedule_block): Likewise.
+ (schedule_insns): Likewise.
+
+Tue Apr 16 12:31:07 1991 Jeffrey A. Law (law at mole.gnu.ai.mit.edu)
+
+ * Makefile.in (install-man): Look for protoize.1 and unprotoize.1
+ in the current directory, not $(srcdir)
+ (install-headers): Use basename to strip off $(srcdir) from
+ include files when installing and changing mode.
+
+Tue Apr 16 08:10:38 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rs6000.md (extendqixi2): Add CLOBBER to the first SET as well as
+ the second.
+ (load_multiple): Fix typo in operand number and add newline.
+
+ * reload.c (find_reloads_address_1): Pass actual location of a
+ MEM used in an address; also handle the case when the MEM was
+ copied. Ensure we reload the copy, not the original address.
+
+ * reload1.c (eliminate_regs, case {INSN,EXPR}_LIST): Correctly handle
+ the cases when one or more operations is (nil).
+
+ * local-alloc.c (block_alloc): Check for REG_EQUAL on list insn
+ of REG_NO_CLOBBER sequence, not first.
+ (no_conflict_p): Set LAST and use INSN instead of P for loop start.
+
+Mon Apr 15 12:55:12 1991 Jim Wilson (wilson at cygnus.com)
+
+ * loop.c (strength_reduce): Don't emit an insn after loop_end to
+ set the final value of a reversed biv. There is already an insn
+ there setting the biv's proper final value.
+
+Sun Apr 14 18:32:05 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * gnulib1.c (various functions): Added declaration of INTIFY to
+ every function which has a FLOAT_ARG_TYPE argument or return value.
+
+Sun Apr 14 18:31:59 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-decl.c (store_parm_decls): Traditional float parm becomes double.
+
+Sat Apr 13 17:35:07 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * m68k.md (storing 32-bit field with movl): Allow any immediate arg 3.
+
+ * expmed.c (store_bit_field): For fields bigger than a word:
+ Avoid special use of SImode, and don't crash if VALUE is CONST_INT.
+
+Fri Apr 12 02:04:46 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * reload.c (find_reloads): Like prev change here, for optional reloads.
+
+ * tm-sparc.h (FUNCTION_BLOCK_PROFILER): Must set %o0 to the address
+ LPBX0 by adding in the low part of the address before calling
+ ___bb_init_func.
+
+ * tm-next.h (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR):
+ New macros. Place reference to constructor or destructor into
+ constructor or destructor section.
+
+ * tm-next.h (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS): Add
+ new constructor and destructor sections.
+
+ * jump.c (squeeze_block_notes,squeeze_notes): Chage the name of
+ squeeze_block_notes to squeeze_notes. Also handle LOOP_BEG, LOOP_CONT
+ and LOOP_END notes, since these must remain in their original order.
+
+ * cccp.c (skip_to_end_of_comment): Handle warn_comment.
+
+ * m68k.md (dbra patterns): Use `=' in constraint of op 0.
+
+ * gcc.c (process_command): Handle -save-temps.
+ (do_spec_1): Handle %g like %b if -save-temps.
+ (verbose_flag): Renamed from `vflag'.
+
+ * tm-sparc.h (FIXUNS_TRUNC_LIKE_FIX_TRUNC): Don't define this.
+
+Fri Apr 12 00:57:48 1991 Jim Wilson (wilson at cygnus.com)
+
+ * sched.c: Update all comments to reflect source changes.
+ Make old_live_regs a static global, instead of local to schedule_block.
+ Schedule_block is now void, since its return value was always 1.
+ Rename last_function_call_not_const to last_pending_memory flush.
+ This can not be a CALL_INSN or a INSN that writes memory.
+ New variable pending_lists_length so that the lists can be flushed
+ when they get too long.
+ Use GET_RTX_CLASS instead of multiple GET_CODE calls whenever it
+ makes sense.
+ (read_dependence): New Function. Returns one if two reads are
+ dependent. This can happen if both are volatile reads.
+ (true_dependence, anti_dependence, output_dependence): Two volatile
+ memory access are always dependent.
+ (order_calls): Function deleted. It was very short, it was only called
+ once, and it no longer did what its name implied. Its one call was
+ replaced with the body of the function.
+ (sched_analyze_1): Correctly handle stripping of SUBREGs, etc from
+ the set dest.
+ If the pending lists are longer than 32 when processing a memory
+ write, then make this write depend on all previous and all future
+ memory accesses so we can flush the pending list. This is necessary
+ because the algorithms used are O(N*N).
+ (sched_analyze_2): For memory reads, check whether it is read
+ dependent on any previous memory read (this can happen if both reads
+ are volatile).
+ (sched_analyze_insn): Replace call to order_calls with the body of
+ that function.
+ (sched_analyze): Don't clear last_memory_pending_flush for a non-const
+ call, since any future call must still depend on all previous memory
+ accesses.
+ (sched_note_set): Correct handling of SUBREGs, etc. For partial sets
+ of a register, must treat this exactly the same way as flow.c, i.e.
+ a partial set of a register does not kill the register. Delete
+ ifdefed out code which is obsolete.
+ (attach_deaths): New argument SET_P, which indicates whether this is
+ a set (if true) or a use (if false) of the rtx X. Correct handling
+ of REG_DEAD notes, to account for the new REG_UNUSED note.
+ (attach_deaths_insn): Pass new additional parameter to attach_deaths.
+ Always call attach_deaths for sets within a parallel. Call
+ attach_deaths for clobbers.
+ (new_sometimes_live): Ifdef out code which should never be executed,
+ and replaced with call to abort.
+ (schedule_block): Now void.
+ When processing block to find dead_regs, don't unlink REG_UNUSED notes,
+ but must mark the indicated register as dead.
+ (update_links): Completely rewritten to make more general. Now handles
+ all REG_NOTEs except REG_INC and REG_LABEL. No longer makes simple
+ assumptions about the form of instructions. New argument orig_insn,
+ which is the original unsplit insn.
+ (schedule_insns): Delete unused volatilep code. Pass new parameter
+ to update_links.
+
+Thu Apr 11 15:34:44 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * out-m88k.c (pic_addressing_base_rtx): Use pic_offset_table_rtx
+ instead. Otherwise, PIC fails miserably for inline functions.
+ (legitimize_address): Support -mbig-pic.
+ (print_operand): Add `g' for printing #got_rel (for -mbig-pic).
+ * tm-m88k.h (CONDITIONAL_REGISTER_USAGE): PIC_OFFSET_TABLE_REGNUM
+ is used and is fixed for PIC.
+ (GO_IF_LEGITIMATE_ADDRESS): Distinguish the -mbig-pic case.
+ * m88k.md (SImode hi16/lo16): Use %g for -mbig-pic.
+
+Wed Apr 10 21:53:32 1991 Jim Wilson (wilson at cygnus.com)
+
+ * unroll.c: Change global variable declarations to static.
+ Four new global variables loop_iteration_var, loop_initial_value,
+ loop_increment, and loop_final_value, used for communication between
+ loop_iterations and precondition_loop_p.
+ (unroll_loop): Before deleteing the insns in the original loop body,
+ emit a label after the last insn to be deleted, to ensure that no
+ delete_insn call will delete past that point.
+ (precondition_loop_p): Use global loop_* variables setup by
+ loop_iterations, instead of trying to calculate their values again.
+ (copy_loop_body): Don't emit copies of the start_label.
+ (approx_final_value): COMPARISON argument now passed as the pair
+ COMPARISON_CODE and COMPARISON_VALUE.
+ (find_splittable_regs): When completely unrolling a loop, and the
+ initial value of a biv is a hard register or itself, then must
+ create a new register to hold its initial value for splitting.
+ (loop_iterations): Set the new global variables loop_*.
+ If the comparison value is an invariant register, then search the insns
+ before the loop to try to find a constant value for the register.
+
+Wed Apr 10 16:02:16 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * out-m88k.c (pic_addressing_base_rtx): A pseudo register coined
+ for each function as needed in legitimize_address.
+ (emit_move_sequence): Use legitimize_address instead of generating
+ HIGH/LO_SUM.
+ (legitimize_address): Rework, based on the sparc version, to
+ implement PIC.
+ (output_call): Use the #plt form when doing PIC.
+ (m88k_layout_frame): The addressing base register is no longer
+ fixed and r1 need not be saved for PIC.
+ (output_prologue): Output instructions to setup the addressing
+ base register if one is needed.
+ (print_operand_address): Support the PIC case.
+ * m88k.md (most patterns using hi16/lo16): Disable these for PIC.
+ * tm-m88k.h (CONDITIONAL_REGISTER_USAGE): No longer needed.
+ (ADDRESSING_BASE_REGNUM): Derived from pic_addressing_base_rtx.
+ (GO_IF_LEGITIMATE_ADDRESS): Accept the PIC case.
+ (LEGITIMIZE_ADDRESS): Use legitimize_address instead of HIGH/LO_SUM.
+
+ * make-m88k, make-m88kdgux: Use SysV INSTALL = cp and for DG/UX,
+ use the bison -l option to allow debugging in c-parse.tab.c.
+
+ * From kenner@vlsi1.ultra.nyu.edu.
+ * out-m88k.c: Include insn-config.h before conditions.h, which
+ requires it.
+ * xm-m88kdgux.h: Define SEPARATE_AUX_OUTPUT before including config.h.
+ * tm-m88k.h: Declare MD functions only if SEPARATE_AUX_OUTPUT.
+
+ * tm-m88k.h, tm-m88kdgux.h, tm-m88ksvr4.h: Rework TARGET_VERSION.
+
+Wed Apr 10 08:19:02 1991 Richard Stallman (rms at apple-gunkies)
+
+ * caller-save.c (emit_mult_restore): Typo testing offset[regno] sign.
+
+ * fold-const.c (target_isinf): Test real value for infinitude.
+ * real.h (REAL_VALUE_ISINF): Use target_isinf.
+
+ * configure: Change / to -- in value of `target' in Makefile.
+
+Tue Apr 9 20:09:49 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * configure: Modify assignment to `target' in Makefile.
+ (AIX target): Use correct config files.
+
+ * make-aix386: New file.
+
+Tue Apr 9 19:28:16 1991 Torbjorn Granlund (tege at zevs.sics.se)
+
+ * longlong.h (header):
+ Modify definition of count_leading_zeros for input = 0.
+ * (68020): Test for __NeXT__ too.
+ * (68020 __umulsidi3, umul_ppmm, udiv_qrnnd):
+ Use constraints "dmi", not "g" (avoid address registers).
+ * (88000 add_ssaaa, sub_ddmmss): Use r modifier for output
+ templates, use J, not I, as constraint for the carry-in insns
+ * (at the end of the file): If UDIV_NEEDS_NORMALIZATION is not
+ defined, define it as 0.
+
+Tue Apr 9 19:14:34 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * function.c (optimize_bit_field): Fix typo.
+
+ * cccp.c (do_define): Don't crash when a builtin macro is
+ redefined.
+
+Tue Apr 9 15:11:42 1991 Richard Stallman (rms at apple-gunkies)
+
+ * expr.c (move_by_pieces): Don't fail to compile if no movqi.
+
+ * emit-rtl.c (get_last_insn_anywhere): Use first nonempty seq.
+
+ * varasm.c (assemble_constructor): Fix typo.
+
+Fri Apr 5 22:15:57 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rs6000.md (extendqixi): Add CLOBBER to ASHIFTRT insn.
+
+ * combine.c (simplify_shift_const): Shift operand of PLUS using
+ correct mode.
+ Correctly simplify outer_const when done.
+
+ * reload.c (push_reload): Don't de-reference INLOC if it is 0.
+
+ * expr.c (convert_to_mode): Call protect_from_queue.
+
+Fri Apr 5 13:29:55 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * varasm.c (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR):
+ Accept two arguments.
+
+Fri Apr 5 08:45:18 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expmed.c (expand_divmod): Convert OP1 to COMPUTE_MODE when we
+ convert OP0.
+
+ * combine.c (subst): Use gen_binary.
+ (simplify_comparison): If we have a ZERO_EXTRACT from a constant
+ with only one bit set, convert into comparison of position with
+ location of bit in constant; this simplifies ((1 << x) & 1) == 0.
+
+ * combine.c (gen_lowpart_for_combine): Copy code for CONST_DOUBLE
+ from gen_lowpart instead of calling it; it will abort for certain
+ floating-point cases, while we will just surround the object with
+ a SUBREG.
+
+Thu Apr 4 22:31:36 1991 Jim Wilson (wilson at cygnus.com)
+
+ * unroll.c (new file): Implements loop unrolling. Completely
+ unrolls small constant bounded loops. Unrolls other constant
+ bounded loops by an amount modulo the number of iterations so that
+ only one exit test is needed. Preconditions loops whose iteration
+ count can be calculated at run time, so that only one exit test
+ is needed. Can also unroll any other loop by having multiple
+ copies of the exit tests. Tries to simplify addresses while
+ unrolling.
+
+ * tree.def: BLOCK trees have 4 fields, not 5.
+
+ * toplev.c: Add new flag -dt to dump RTL after the second cse pass.
+ Define two new flags, flag_unroll_loops and flag_unroll_all_loops,
+ and add code to support their use for loop unrolling. Print the
+ exec time for the shorten-branch pass in the proper place, i.e.
+ after delayed branch reorganization.
+
+ * stmt.c (find_loop_tree_blocks): New function. Creates a mapping
+ between BLOCK trees and loops. This info is needed when doing both
+ loop unrolling and outputting debugger info.
+ (unroll_block_trees): New function. Makes COPIES copies of the block
+ trees corresponding the loop indicated by LOOP_NUMBER, so that the
+ BLOCK notes inside the loop will still match the BLOCK trees for
+ the loop.
+
+ * rtl.h: Document the new named pattern
+ "decrement_and_branch_until_zero". Add macros to access new
+ field of inline_header rtx, which holds a pointer to the function's
+ original DECL_INITIAL tree.
+
+ * rtl.def: New entry for inline_header to hold a pointer to the
+ function's original DECL_INITIAL tree.
+
+ * loop.h (new file): Move many declarations from loop.c to the new
+ file loop.h, and change some from static to extern, so that they
+ can be shared with unroll.c. Also globalize names for variables
+ changed from static to extern.
+
+ * loop.c: Move many declarations from loop.c to the new file loop.h,
+ and change some from static to extern, so that they can be shared
+ with unroll.c. Add misc comments to better explain the code.
+ Change name of global arrays loop_start and loop_end to
+ loop_number_loop_starts and loop_number_loop_ends so that they won't
+ be confused with local loop_start and loop_end variables.
+ New variables loop_number_exit_labels, loop_number_first_block,
+ loop_number_last_block, loop_number_block_level, loop_n_iterations.
+ Old_max_reg renamed to max_reg_before_loop. Max_uid renamed to
+ max_uid_for_loop. Induct_var renamed to reg_iv_type.
+ Induct_struct renamed to reg_iv_info. Class_struct renamed to
+ reg_biv_class. Iv_list renamed to loop_iv_list.
+ Rename (struct induction) field always to always_computable.
+ Rename (struct induction) field family to next_iv.
+ New (struct induction) field not_replaceable.
+ (loop_opt): Add code to allocate some new arrays for unrolling
+ support. Add call to find_loop_tree_blocks to create the BLOCK tree
+ to loop map needed when unrolling and outputting debugger info.
+ (scan_loop): Fix setting of maybe_never of label/jump. The old code
+ always failed.
+ (prescan_loop): Delete obsolete code.
+ (find_and_verify_loops): Add code to initialize
+ loop_number_exit_labels.
+ (mark_loop_jump): Add code for keep chain of loop_number_exit_labels
+ for each loop.
+ (invariant_p): LABEL_REFs are not invariant when doing loop unrolling.
+ Remove static from definition, so that it can be called from unroll.c.
+ (strength_reduce): Change name of variable maybe_never to
+ not_every_iteration, to help emphasize that it is not the same
+ as the variable maybe_never in the code motion code. Modify code
+ that computes its value so that it will be false more often, resulting
+ in better code.
+ (strength_reduce): Added code to call the new loop unrolling
+ functions, e.g. unroll_loop, loop_iterations, etc.
+ (strength_reduce): New code to handle biv's and giv's which must
+ be set to their final_value after the loop exits.
+ (strength_reduce): Reversed giv's and biv's must have their values
+ calculated differently. Add new field reversed to struct induction,
+ and code to check and use its value.
+ (strength_reduce): Only check value of bl->nonneg for architectures
+ that have a decrement_and_branch_until_zero instruction.
+ (find_mem_givs): New argument loop_start.
+ (record_giv): New argument loop_start.
+ The always_computable field for DEST_ADDR givs is always set true.
+ New code to check for case of spaghetti code, in which case the
+ giv can never be considered replaceable.
+ (check_final_value): New function. For givs which are not otherwise
+ replaceable, try to calculate their final value, and then try
+ to use this to make them replaceable.
+ (update_giv_derive): Skip inner loop if giv is known to be underivable
+ at the beginning. Must set cant_derive if we pass an insn that
+ modifies the giv's biv, and we can't calculate an adjustment.
+ (emit_iv_add_mult): Remove static definition so that it is callable
+ from unroll.c.
+ (check_dbra_loop): Reversed biv's must be marked as such, so that
+ they can be treated specially in the rest of loop.c.
+ (final_biv_value): Moved to unroll.c, alongside the new function
+ final_giv_value. Extensively rewritten to work for most common
+ cases.
+ (update_reg_last_use): Verify that insns have a valid luid before
+ trying to use it. Don't perform any action if no value luid.
+ (get_condition): Correct initial comment.
+ (get_condition_for_loop): Remove static definition so it is callable
+ from unroll.c.
+
+ * integrate.h: Replace `tree' use in definition with
+ `union tree_node *' so that tree.h does not have to be included when
+ this file is included.
+
+ * integrate.c (initialize_for_inline): Pass additional argument,
+ the DECL_INITIAL (fndecl) tree, to gen_inline_header_rtx. Update
+ and correct comment.
+ (save_for_inline_copying): Copy the decl tree, so that virtual reg
+ instantiation, and loop unrolling, won't affect the saved tree.
+ (copy_decl_tree): New argument, functionbody, which distinguished
+ between calls from save_for_inline_copying and calls from
+ expand_inline_function.
+ (copy_rtx_and_substitute): Return orig instead of aborting when
+ inline_target is zero so that loop unrolling can use this code.
+
+ * gcc.texinfo: Document the new optimization flags -funroll-loops
+ and -funroll-all-loops, the new dump option -dt, and the new named
+ pattern "decrement_and_branch_until_zero".
+
+ * flags.h: Define two new flags, flag_unroll_loops and
+ flag_unroll_all_loops.
+
+ * emit-rtl.c (gen_inline_header_rtx): New argument
+ original_decl_initial. Pass to gen_rtx call.
+
+ * alliant.md, m68k.md: Name the pattern that uses the REG_NONNEG
+ note to "decrement_and_branch_until_zero".
+
+ * Makefile.in: Add source file unroll.c and header file loop.h to
+ the cc1 dependencies. Add *.cse2 to the list of files deleted by
+ `make clean'.
+
+Thu Apr 4 16:13:37 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * varasm.c (assemble_constructor, assemble_destructor): New functions.
+ They use ASM_OUTPUT_CONSTRUCTOR and ASM_OUTPUT_DESTRUCTOR.
+ * cplus-decl2.c (finish_file): Use them.
+
+ * reload.c (find_reloads): Pass location as outloc for output reload.
+
+ * objc-actions.c (objc_class_id, synth_module_prologue):
+ Initialize new variable to hold identifier for "objc_class".
+
+ * objc-actions.c (objc_comptypes): Allow assigning between types
+ id and Class without warning.
+
+ * c-typeck.c (warn_for_assignment): When there is a type mismatch
+ in the hidden arguments of a message expression, don't print the
+ argument number as 0 or -1. Instead print the warning as would
+ be done for an explicit call to objc_msgSend (this should never
+ happen, but just in case).
+
+ * emit-rtl.c (gen_lowpart): Reverse #if for CONST_DOUBLE case.
+
+Thu Apr 4 13:27:02 1991 Michael Meissner (meissner at osf.org)
+
+ * hard-reg-set.h (SET_HARD_REG_BIT, CLEAR_HARD_REG_BIT,
+ TEST_HARD_REG_BIT): Use unsigned arithmetic to isolate the word and
+ bit number, which produces better optimized code.
+
+Thu Apr 4 07:34:17 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c (relax_delay_slots): Avoid adjusting LABEL_NUSES if the
+ insn is a conditional return.
+
+ * reload1.c (reload): If we find that a replacement cannot be
+ done and that replacement now enables a secondary replacement,
+ this may disable a third replacement in some cases.
+ (eliminate_regs, case SET): Don't stop after we find the first
+ match when looking for modified registers.
+
+ * combine.c (previous_num_undos): New var.
+ (try_combine): Set it after each call to subst.
+ When substituting I1 into I2, somtimes make a copy of PATTERN (i2).
+ (gen_rtx_combine): Start at PREVIOUS_NUM_UNDOS.
+
+ * combine.c (can_combine_p): Start check for volatile references
+ after INSN, not at INSN.
+
+ * combine.c (try_combine): When we find a split point, ensure
+ that I2 is a register. If it is of the wrong mode, change the
+ mode if we can, just like we do with CCmode registers.
+ (find_split_point): Don't split an extraction if it crosses the
+ boundary given by the field (i.e., a byte boundary if QImode).
+ Correct typo: Should generate LSHIFTRT, not LSHIFT.
+ (subst): Correctly test to see if we can change the mode of
+ a register for a MODE_CC comparison.
+ (distribute_notes): If a NOTE references a pseudo-register,
+ ensure it references the latest copy of that register.
+ When scanning for last use, don't stop at CALL_INSNs.
+
+ * combine.c (expand_compound_operation): Don't get confused about
+ (zero_extend (asm_operands ..)) because of the VOIDmode ASM_OPERANDS.
+ (simplify_and_const_int): Ensure we do computations in proper mode.
+ Simplify ZERO_EXTRACT and ZERO_EXTEND when we have a PLUS.
+ (significant_bits): Don't call get_last_value on a SUBREG, just REG.
+ Correct significant bits for comparison operations.
+ (simplify_shift_const): When VAROP is logical, use proper mode when
+ computing shifted constant.
+
+ * combine.c (gen_lowpart_for_combine): Call gen_lowpart if we have
+ a CONST_DOUBLE.
+
+ * genconfig.c (walk_insn_part, main): Write a definition
+ for HAVE_lo_sum if a LO_SUM is present in the machine description.
+
+ * combine.c (try_combine): If we have a PARALLEL of a SIGN_EXTEND
+ and a load of memory, split it into a load and SUBREG assignment.
+ (find_split_point): If we have LO_SUM for this machine,
+ split (mem (symbol_ref ..)) using HIGH and LO_SUM.
+ If we have operation with second operand constant, maybe we couldn't
+ fit the constant in the insn, so try to split there.
+ Move NOT to first operand so we'll try to split the other operand
+ first.
+ (subst): No reason to avoid making paradoxical SUBREGs and we miss
+ some optimizations if we don't.
+ Convert (lo_sum (high FOO) FOO) to FOO.
+ Convert (C1 + (x + C2) to (C1 - C2) - x.
+ Use distributive law in more places with logical operations.
+ (apply_distributive_law): Properly distribute IOR over XOR.
+ (simplify_shift_const): Simplify (ashift (plus ..) ...).
+ (simplify_comparison): Add code to remove extraneous AND
+ operations when comparing result of two comparisons on some machines.
+ Ignore bits not applicable in our mode.
+ Treat some SUBREGs as ZERO_EXTENDs.
+ Convert equality comparison of AND with sign bit into LT or GE
+ comparison.
+
+ * combine.c (gen_binary, gen_unary): New functions.
+ (apply_distributive_law, simplify_shift_const): Use gen_binary.
+
+Wed Apr 3 16:15:17 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * Makefile.in (gnulib): Insert only .o files in combined archive.
+ (gnulib1.portable): Use $(HPXT).
+ * make-hp9k320g: Define HPXT.
+
+ * From wilson@cygnus.com.
+ * sched.c (schedule_block): Delete previously unused variable last_q.
+ Correct handling of registers with multiple lifetimes within a single
+ block, always save lifetime info, and clear the appropriate bit in
+ old_live_regs. Delete now unused variable sched_reg_n_sets.
+
+Wed Apr 3 07:43:35 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * tm-romp.h (CONST_COSTS): All CONST_INTs are cost 0. Symbolic
+ values cost two insns.
+
+ * function.c (fixup_var_refs_1): Correctly perform position
+ computation for bit extracts; disallow mode-dependent addresses.
+ (optimize_bit_field): Likewise.
+ Remove explicit mention of HImode and QImode by calling mode_for_size.
+ No need to check for offsettable_address_p; we call change_address
+ and are not called after reload; don't call adj_offsettable_operand.
+ * recog.c (validate_replace_rtx_1): Correct endian computation
+ and don't change mode of a MEM with a mode-dependent address.
+
+ * expmed.c (expand_divmod): Try to figure out what mode will be used
+ and convert to that once at the beginning, rather than repeatedly,
+ since we may be writing jumps.
+
+ * vax.md ({zero,sign}_extract patterns): Field width is QImode, not
+ SImode.
+
+Tue Apr 2 08:42:23 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (simplify_ternary_operation): Add argument for previous
+ mode of operand 0.
+ Don't do anything for extractions if bits don't fit in OP0_MODE.
+ Use OP0_mode instead of mode of OP0 for endian correction.
+ (fold_rtx): Pass new operand to simpllify_ternary operation.
+ * integrate.c (subst_constants): Add extra arg to call to
+ simplify_ternary_operation and call for rtx class 'b'.
+ * combine.c (find_split_point): Don't split an extract when the
+ bits are outside the mode of operand 0.
+ (subst): Pass new parameter to simplify_ternary operation and call
+ for rtx class 'b'.
+ (subst, case ZERO_EXTRACT): Don't change the mode of a MEM
+ if it is a mode-dependent address.
+ Correctly do endian adjustments so they are correct for fields that
+ go outside a byte boundary.
+ (subst, case {ZERO,SIGN}_EXTRACT): Don't adjust MEM here for non-dest
+ objects; already done in make_compound_operation.
+ (make_compound_operation): Rework code that makes extracts and
+ extends to correcty compute positions, taking into account the fact
+ that field can cross byte boundaries. Remove redundant adjustments.
+ Use mode_dependent_address_p to validate changing modes of MEM.
+ (simplify_shift_const): Check for mode-dependent address when
+ changing mode of a MEM.
+ (gen_lowpart_for_combine): Likewise.
+
+ * expmed.c (expand_shift): Code to use extzv for logical right shift
+ had numerous assumptions about specific modes and did not validate
+ operands properly.
+
+ * expr.c (expand_expr, case NOP_EXPR): If no target was specified,
+ use convert_to_mode instead of convert_move; this may return a SUBREG.
+
+ * expr.c (do_jump): Conversion isn't NOP if it narrows the object.
+ If testing A & CONST and the result fits in a smaller mode, try
+ the compare there.
+
+ * cse.c (simplify_binary_operation): If eliminating reference to
+ operand, verify that it has no side effects.
+ Add cases for "a | (~a)" and "a & (~a)".
+
+ * recog.c (register_operand): Only call general_operand for
+ (subreg (mem ...) X), not all SUBREGs.
+
+ * jump.c (jump_optimize): Remove needless incrementing of LABEL_NUSES
+ which can cause a dead label not to go away.
+
+Mon Apr 1 19:08:40 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_insn): Add missing call to insert_regs.
+
+Mon Apr 1 18:21:33 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * optabs.c (init_optabs): Change #if to #ifdef.
+
+ * loop.c (check_dbra_loop): Take out Feb 24 change.
+
+Sun Mar 31 22:43:39 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * final.c (insn_counter): New variable.
+ (final_scan_insn): Increment it.
+ (output_asm_insn): Use it for %=.
+
+Sun Mar 31 22:16:31 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * out-a29k.c (output_prolog): Correctly write stack size in tag word.
+
+ * out-a29k.c (srcb_operand): If QImode, any constant is OK since
+ we only care about 8 bits.
+ (print_operand): Add %Q for QImode srcb values.
+ * a29k.md (QImode patterns): srcb's that accept constants should have
+ 'n' constraint, not 'I'; use %Q to output.
+
+ * reload1.c (gen_input_reload): Properly generate reload when we are
+ adding a pseudo and a hard register.
+
+ * cse.c (simplify_unary_operation): Don't use ffs.
+
+Sun Mar 31 20:59:52 1991 Micheal Tiemann (tiemann at pogo.gnu.ai.mit.edu)
+
+ * gnulib1.c (perform_ash{l,r}si3): Fix typo that had these
+ performaces swapped.
+
+Sun Mar 31 13:35:50 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * rtl.h (FIND_REG_INC_NOTE): New macro.
+ * rtl.h (AUTO_INC_DEC): Define here.
+ * flow.c (AUTO_INC_DEC): Not here.
+ * combine.c (can_combine_p, try_combine): Use FIND_REG_INC_NOTE.
+ Make other scans for REG_INC notes conditional on AUTO_INC_DEC.
+ * final.c (final_scan_insn): Use FIND_REG_INC_NOTE.
+ * jump.c (delete_jump): Likewise.
+ * loop.c (get_condition): Likewise.
+ * reload.c (find_reloads_address_1, find_equiv_reg): Likewise.
+ * reload1.c (reload_as_needed): Likewise.
+ * reorg.c (delete_scheduled_jump, mark_set_resources): Likewise.
+ * global-alloc.c (global_conflicts): Likewise.
+
+ * dbxout.c (dbxout_type): For integers, reals, and arrays,
+ use actual type number of int or char, in case those are not 1 and 2.
+
+ * toplev.c (compile_file): Take out last change (regarding lang_init).
+
+ * emit-rtl.c (sequence_element_free_list): Change data type.
+ (get_last_insn_anywhyere, add_insn_after): Finish last change.
+
+ * expr.c (expand_builtin): Finish last change.
+
+Sat Mar 30 15:16:16 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * function.h (struct sequence_stack): New data type.
+ (sequence_stack): Declare variable. Use new data type.
+ * emit-rtl.c (get_last_insn_anywhere, add_insn_after): Adapt to that.
+ (start_sequence, end_sequence, in_sequence): Likewise.
+ (start_sequence): Allocate stack links as permanent.
+ (init_emit_once): Init sequence_stack here.
+ (init_emit): Not here.
+ * function.c (push_temp_slots, pop_temp_slots):
+ (expand_function_end): Use in_sequence.
+ (fixup_var_refs): Use new data type.
+ (put_var_into_stack): Don't declare sequence_stack.
+
+ * function.c (expand_function_start):
+ Trace static chain properly past first link.
+
+ * ns32k.md (andcbhi3, andcbqi3): Constraint shouldn't say commutative.
+
+Sat Mar 30 02:06:20 1991 North-Keys (erlkonig at apple-gunkies.gnu.ai.mit.edu)
+
+ * c-decl.c (init_decl_processing): Fix typo `integer_tpe_node'.
+ * dbxout.c (dbxout-symbol): Added char * declaration for `name'.
+ * objc-actions.c (encode_array): Avoid returning a value.
+
+Fri Mar 29 15:59:22 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-decl.c (init_decl_processing): Define __builtin_constant_p.
+ * expr.c (expand_builtin): Implement it.
+ * tree.h (enum built_in_function): New alternative.
+
+ * toplev.c (compile_file): Move lang_init call after debugger init.
+
+ * gcc.c (default_compilers): Define __cplusplus for C++ code.
+
+ * c-decl.c (start_function): Use 0 for name of result decl.
+ (value_identifier): Variable deleted.
+
+ * dbxout.c (dbxout_type): Handle LANG_TYPE.
+ (dbxout_symbol): Handle RESULT_DECL.
+ Handle variables with constant values that are not output.
+ Use the mangled name when appropriate.
+ (dbxout_tags): Output equivalent typedef when appropriate.
+ (dbxout_function): Output the DECL_RESULT if it has a name.
+
+ * varasm.c (assemble_variable): Delete calls to set_current_gdbfile.
+
+Thu Mar 28 16:14:13 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * gcc.c (main): Calculate basename_length to exclude last period.
+
+ * optabs.c (expand_binop, expand_unop):
+ When widening, don't keep CONST_INT beyond a single word.
+
+ * tm-vax.h (CHECK_FLOAT_VALUE): Change float max to ...444e+38.
+
+ * Makefile.in (gnulib1, gnulib2.portable):
+ Make test of $$? normally succeed, not normally fail.
+ (gnulib1): Don't use -e in second loop. Test explicitly instead.
+
+ * dbxout.c (lastfile): New static variable.
+ (dbxout_init): Initialize lastfile.
+ * final.c (lastfile): Deleted.
+ (init_final): Don't set lastfile.
+
+ * final.c (set_current_gdbfile): Function deleted.
+ (output_source_line): Handling of GDB debugging info deleted.
+ (final_start_function, final_end_function): Likewise.
+
+Thu Mar 28 09:58:18 1991 Micheal Tiemann (tiemann at pogo.gnu.ai.mit.edu)
+
+ * cplus-decl.h (decl_context): Add missing declaration for BITFIELD.
+
+ * tm-sparc.h (CC1_SPEC): Change to handle new interpretation of -O2.
+ (OPTIMIZATION_OPTIONS): Use this macro to control default expensive
+ optimizations.
+ (MODES_TIABLE_P): Use GET_MODE_CLASS to simplify this macro.
+ (FUNCTION_ARG,FUNCTION_ARG_PARTIAL_NREGS): Make sure TYPE is nonzero
+ before we use it.
+ (FUNCTION_BLOCK_PROFILER): Fix a bug in the asm code.
+ (EXTRA_CONSTRAINT): For 'S' constraint, if OP is a register, make
+ sure it's not a pseudo. Also, change call to `memory_address_p' to
+ `strict _memory_address_p'. Both of these are for the strict cases.
+ (SLOW_BYTE_ACCESS): Try going with this set 1.
+ * sparc.md: Take advantage of new combiner to handle signed bitfield
+ comparisons and signed sub-word comparisons.
+ Added peepholes for doing subword memory tests and operations.
+
+Thu Mar 28 09:43:30 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (start_sequence, gen_sequence): Ensure we allocate rtl
+ on saveable_obstack since we will be saving it and we may be called
+ from an optimizer that will reuse allocated memory in current_obstack.
+
+Wed Mar 27 18:46:27 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * toplev.c (main): Print version with -version, regardless of
+ -quiet.
+
+ * Makefile.in (gnulib, gnulib2.ready): Put `-' before `if'.
+
+ * make-hp9k320, make-hp9k320g (CC, OLDCC): Delete -lsetjmp.
+ Add -Wc,-Nw2000.
+
+ * dbxout.c (dbxout_source_file): New name for fn moved from final.c.
+ * final.c (output_source_file): Moved to dbxout.c. Callers changed.
+ (output_source_line): Call dbxout_source_file.
+
+Wed Mar 27 11:09:13 1991 Micheal Tiemann (tiemann at pogo.gnu.ai.mit.edu)
+
+ * version.c: Bumped to version 1.92.
+
+ * final.c (output_source_{file,line}): Fix bug in new handling of
+ "Ltext".
+
+ * cplus-cvt.c (build_up_reference): Handle BIND_EXPR.
+
+ * Makefile.in (cplus-lex.o): depend on cplus-input.c.
+ * cplus-input.c: New file.
+
+ * cplus-method.c (do_inline_function_hair): Call a different
+ `prepare_inline', and don't deal with pending_inlines here.
+ * cplus-lex.c (do_pending_inlines): Deal with pending_inlines
+ here...
+ (reinit_parse_for_method): ...and here.
+
+ * cplus-decl.c (grok_ctor_properties): Use TYPE_NAME_STRING where
+ appropriate. Also, don't assume that CURRENT_CLASS_TYPE is what we
+ use for error message; use CTYPE instead.
+
+ * cplus-type2.c (digest_init): Strip NON_LVALUE_EXPRs.
+
+ * cplus-tree.c (__eprintf): Added this function from gnulib2 until
+ gnulib configuration is worked out.
+
+ * cplus-parse.y (member_init): Call do_member_init. Previous code
+ was wrong (using a goto to factor common code) because the parse
+ stack was different in the two contexts.
+ * cplus-init.c (do_member_init): New function.
+
+ * cplus-typeck.c (build_compound_expr): Convert arrays to pointers.
+ (build_c_cast): Warn about possible alignment problems.
+
+Wed Mar 27 05:55:32 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload.c (find_reloads): Disallow a PLUS as an operand even if
+ "g" is in the constraint; this is only valid for "p".
+
+Tue Mar 26 06:46:48 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * local-alloc.c (block_alloc): Have insn numbers start at 1, not 2.
+
+ * rtlanal.c (replace_regs): Move to here; add new parameter.
+ * loop.c (replace_regs): Delete from here.
+ (move_movables, strength_reduce): Pass new parameter to replace_regs.
+ * jump.c (duplicate_loop_exit_test): Make new pseudos for pseudos
+ used only in loop exit test; this prevents unnecessay sharing
+ between code inside and outside of loop.
+ * toplev.c (rest_of_compilation): Call reg_scan before jump.
+
+ * combine.c (distribute_notes): If we are searching back for the last
+ use of a register I3 and I2 no longer use and the last use is a SET
+ of that register, place a REG_UNUSED note instead of a REG_DEAD note.
+ No longer need handle REG_DEAD note for output of I3; it will now be
+ a REG_UNUSED note.
+
+ * combine.c (try_combine): If I3SRC is a register and I2 is a
+ multi-output insn, see if we can replace one of the outputs with
+ I3DEST. If so, move LOG_LINKS pointing at the other outputs to
+ now point to I3 instead of I2.
+
+ * rtlanal.c (single_set): Return 0 if not an insn.
+ Only ignore SET with unused output if it has no side effects.
+ (side_effects_p): New function.
+ * combine.c (can_combine_p): Only ignore SET with unused output if
+ it has no side effect.
+ Don't extend the life of a hard register.
+ (try_combine): Always give up if I1 or I2 used reg inc'd in I3.
+ (significant_bits): Return mode mask if mode wider than host int.
+ Don't get confused by (zero_extend (const_int ..)) and similar where
+ the inner mode is VOIDmode.
+ Arithmetic operations now always have same modes on operands as
+ on the result.
+
+ * jump.c (jump_optimize): Set this_is_{simple,cond}jump at the start
+ of loop, not in middle, and use consistently.
+ Use can_reverse_comparison_p in case where we make scc insn.
+ Don't use can_reverse_comparison_p when we call invert_jump.
+ Use indirect_jump instead of indirect_exp.
+ Check invert_jump's result before making any other changes; handle
+ failure.
+ Simplify code that looks for and deletes USE insns.
+ (jump_back_p): Call can_reverse_comparison_p only if we have to
+ reverse the comparison.
+ (can_reverse_comparison_p): Accept comparison expression and insn
+ it comes from.
+ Rework to be more general now that we have MODE_CC and tighten
+ up a bit.
+ (invert_jump): Allow invert_exp and redirect_jump to fail.
+ (invert_exp): Only invert jump, don't change target.
+ If can reverse comparison code, try it using validate_change.
+ If that doesn't work, swap the arms of the IF_THEN_ELSE. If that
+ doesn't work, return 0.
+ (redirect_exp): Now static.
+ * expr.c (do_jump_for_compare): Call invert_jump to invert jump
+ to false label after emitting jump; if this fails, convert to
+ jump around unconditional jump to false label.
+ (do_store_flag): Set to 1 first, then branch, then set to 0. This
+ avoids inverting branches.
+ * reorg.c (optimize_skip, relax_delay_slots): Always allow invert_jump
+ to fail.
+ * rtlanal.c (single_set): Return 0 if not INSN, CALL_INSN,
+ or JUMP_INSN.
+
+ * reload1.c (eliminate_regs): If any eliminable regs occur in a USE,
+ eliminate them.
+
+Tue Mar 26 00:09:18 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-decl.c (implicitly_declare): Always make implicit decl permanent.
+
+Mon Mar 25 16:38:14 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * genextract.c (walk_rtx): Record operand numbers that are seen.
+ (gen_insn): If there are gaps in operand numbers, make code to store
+ something for the operands not used in this pattern.
+ (main): Initialize data structures.
+
+ * c-typeck.c (initializer_constant_valid_p):
+ Always allow length-preserving conversions between integer types.
+
+ * regclass.c (reg_class_record): Return right away if operand is 0.
+
+ * c-decl.c (duplicate_decls): Warn if declare fcn inline after calls.
+
+ * reload.c (combine_reloads):
+ Test reg_overlap_mentioned_p in both directions.
+
+Mon Mar 25 15:05:29 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * genoutput.c (output_epilogue): Choose a name for an unnamed
+ pattern as an offset from the closest named pattern. Define
+ `insn_name_ptr' as a pointer to `insn_name' for use by print_rtx.
+ * final.c (output_asm_insn): Use the pattern name chosen by
+ genoutput and output the INSN_UID as well.
+ * rtl.c (insn_name_ptr): Provide an alternate definition to avoid
+ link errors when rtl.o is not linked with insn-output.o.
+ (print_rtx): When printing the INSN_CODE field of an insn, print
+ the name if it is available.
+
+Mon Mar 25 09:39:43 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * regs.h (reg_first_use): Deleted.
+ * rtl.h (REG_UNSET): Deleted.
+ (REG_UNUSED): New note.
+ * combine.c (combine_instructions): Delete loop fixing up
+ reg_first_use.
+ (can_combine_p): Ignore a branch of a PARALLEL if its output is
+ never used.
+ (move_deaths): Don't update reg_first_use.
+ (distribute_notes): Don't handle REG_UNSET; add code for REG_UNUSED.
+ * flow.c (reg_first_use): Deleted.
+ (life_analysis): Restore code that marks vars live at start of function
+ as globals. These are registers that were never set.
+ (allocate_for_life_analysis): Don't allocate reg_first_use.
+ (propagate_block): Search for cc0-setting insn with prev_nonnote_insn.
+ (mark_set_1): Don't set reg_first_use.
+ If register is never used, make REG_UNUSED note, not REG_DEAD.
+ (mark_used_regs): Don't set reg_first_use.
+ * global-alloc.c (global-conflicts): Dead outputs are now denoted by
+ REG_UNUSED notes, not REG_DEAD.
+ * reload.c (find_dummy_reload): Delete test of REG_UNSET; add test
+ of REG_UNUSED.
+ (find_equiv_reg): Don't re-use an output marked as REG_UNUSED;
+ we want these notes to be accurate; this would rarely win anyway.
+ * reload1.c (emit_reload_insns): Test REG_UNUSED to see if an
+ output won't be used any more.
+ * reorg.c (mark_target_live_regs): Use REG_UNUSED notes to kill
+ registers dead after an insn.
+ * rtl.c (reg_note_name): Delete REG_UNSET, add REG_UNUSED.
+ * rtlanal.c (single_set): Ignore a SET whose output has a REG_UNUSED
+ note.
+ * sched.c (update_first_use): Deleted.
+ (update_links): No need to call update_first_use.
+
+ * local-alloc.c: Major changes to use REG_UNUSED notes, make
+ handling of only-set registers more consistent, and allow
+ two consecutive CLOBBERs to share a register. Also, avoid loops
+ over all register each basic block; eliminating these make local-alloc
+ three times faster!
+ Quantity numbers now start at zero.
+ (qty_first_reg, reg_next_in_qty): New variables.
+ (qty_clobber): No longer needed.
+ (reg_qty): -1 if register cannot be allocated by local-alloc.
+ Now undefined for hard registers.
+ (reg_offset): Now char *.
+ (call_seen): Deleted, never used.
+ (regs_live_at): Now two entries per insn.
+ (alloc_qty): Initialize chain of register in quantity.
+ (local_alloc): Remove all per-block loops over registers.
+ Only allocate qty_... vars for max_reg - FIRST_PSEUDO_REGISTER.
+ Initialize reg_qty once per function.
+ Don't initialize qty_... vars that are always set before use.
+ (block_alloc): Delete insn_map, max_uid, and call_used.
+ Insn numbers start at 1 and we have two entries in regs_live_at
+ for each insn.
+ Search for REG_NO_CONFLICT block when we see a CLOBBER insn; this
+ avoids having already seen sets to the output register.
+ Call wipe_dead_reg for anything in a REG_UNUSED note.
+ Delete references to reg_first_use.
+ Don't check for invalid birth and death here.
+ Don't call qsort if we have 0 or 1 quantities.
+ Find all registers for a quantity using reg_next_in_qty chain instead
+ of looping over all pseudos.
+ (combine_regs): Refine tests to agree with new conventions.
+ Never tie pseudos if SREG already has a quantity assigned.
+ When updating size, use reg_next_in_qty instead of looping over
+ all registers.
+ (reg_is_set): Just call reg_is_born. Where it is born depends on
+ whether we have a CLOBBER or not. Birth location is now twice
+ the insn number.
+ (reg_is_born): Handle case when a hard reg is born before the
+ current insn.
+ Show we don't know the death location.
+ (wipe_dead_reg): Parameters are now just register and an in/out flag.
+ Death locations are now twice the insn number.
+ Support hard regs that die immediately after current insn.
+ Don't make REG_UNSET notes.
+ (find_free_reg): Validate BIRTH and DEATH here.
+ We no longer have qty_clobber.
+ (post_mark_life): Eliminate CLOBBER parameter.
+ (no_conflict_p): Now passed CLOBBER at start of block. Return 0 if
+ can't find death note or if R1 is a hard register.
+
+ * m68k.md (divsi3, udivsi3): Remove patterns. Using divmodsi4 and
+ udivmodsi4 produces better code.
+ (divmodsi4, udivmodsi4): If remainder isn't needed, use divsl/divul
+ instead of divsll/divull.
+
+ * integrate.c (expand_inline_function): Remove change of March 20th.
+ Instead, expand args in two passes. First, expand all that go
+ into registers. Then do those in memory with store_expr.
+
+ * integrate.c (initialize_for_inline): Put the original copy of the
+ address into ARG_VECTOR; the new one will be modified.
+
+ * reload.c (push_reload): Handle paradoxical SUBREGs on an output
+ as well as an input.
+
+ * flow.c (mark_label_ref): Don't blow up when X is 0.
+
+ * combine.c (make_compound_operation): Fix typos; result of
+ exact_log2 is interesting if >=0.
+
+ * a29k.md (store_multiple): Allow gen_store_multiple{_no,}_bug to fail;
+ we fail if they do.
+
+ * reorg.c (emit_delay_sequence): Record that we deleted a BARRIER
+ and restore it precisely on those occaisions.
+
+Sun Mar 24 21:19:55 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * gcc.c (xmalloc, xrealloc): Change error message.
+ * toplev.c (various): Change error messages.
+
+ * final.c (final_scan_insn): Handle ASM_OUTPUT_LOOP_ALIGN.
+
+ * calls.c (emit_call_1): Pass number of bytes to pop to call_pop.
+ * vax.md (call_pop, call_value_pop): Use that arg.
+
+Sat Mar 23 23:28:59 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * Makefile.in (version): Run awk, not gcc, to get this value.
+
+Sat Mar 23 18:04:23 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (simplify_unary_operation): Add missing cases for ABS and FFS.
+
+ * alliant.md: Eliminate unneeded patterns: HImode zero_extract,
+ (set (cc0 (subreg ...))), (set (cc0) (and ...)),
+ (and (zero_extend ...) ...), shift right of 24 and 16.
+ Use alternatives to select assembler template when possible.
+ Use const_int_operand instead of immediate_operand when
+ possible to avoid explicit test for CONST_INT.
+ Write add-and-branch patterns with PLUS removed, the way combine
+ produces them.
+
+ * rtlanal.c (refers_to_regno_p): If X is a SUBREG of a hard
+ register, treat it as if it were the appropriate register.
+ CLOBBER doesn't refer to anything.
+
+ * final.c (final_scan_insn): Use prev_nonnote_insn, not PREV_INSN,
+ to find cc0-setting insn from cc0-using insn.
+
+ * global-alloc.c (find_reg): Don't look for other registers to
+ renumber unless we know that we are sharing registers.
+
+ * emit-rtl.c (end_sequence): Fix typo that prevented speedup of
+ Dec 26th from doing anything.
+
+ * toplev.c (do_abort): New function, just calls abort.
+ (main): Set lang_expand_expr to address of do_abort; abort might be
+ a macro that is more than just a function name.
+
+ * cse.c: (qty_... variables): Refined to be undefined for indices
+ less than MAX_REG. Thus, we need not intialize them at the start
+ of a basic block and can instead inialize a quantity as we create it.
+ (reg_{next,prev}_eqv): These variables will now be defined only when
+ reg_qty[N] != N and hence need not be initialized every block either.
+ (new_basic_block): Need not initialize reg_rtx for new block; the
+ only time we can inherit values from previous blocks is for hard
+ regs and it doesn't matter in that case.
+
+ * c-parse.y (yylex): Avoid use of size_t; it may not be defined.
+ Cast alloca to (char *).
+
+ * out-romp.c (update_cc): cc_status.value[12] can also be a COMPARE,
+ so use reg_overlap_mentioned_p to see if an insn that modifies a
+ register invalidates cc0.
+
+ * reorg.c (link_cc0_insns): If next insn is a SEQUENCE, the insn
+ using cc0 is the first insn in the sequence.
+ (mark_target_live_regs): Don't assume that a REG_DEAD note always
+ refers to a register.
+
+Sat Mar 23 15:35:59 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * reload1.c (reload_reg_free_before_p):
+ An input reload is use before an output or output address reload.
+
+ * genoutput.c (validate_insn_alternatives): New function.
+ Loop over insn's alternatives to find out how many
+ alternatives the insn pattern is to support. Verify that if
+ any alternatives are specified for a given operand that the
+ number of alternatives match the numer of alternatives for
+ this insn.
+ (gen_{insn,peephole,expand,split}): Call
+ `validate_insn_alternatives' after scanning the insn. This
+ sets up the value N_ALTERNATIVES for the insn so that
+ `process_template' can check that the number of alternitves
+ given matches the number of asm choices for `@' constructs.
+
+Sat Mar 23 08:09:57 1991 Michael Meissner (meissner at osf.org)
+
+ * dbxout.c (toplevel, dbxout_init): Instead of always using `Ltext'
+ as the label at the beginning of the text region, properly localize
+ it, so that machines which do not put leading underscores in front
+ of external names do not have a problem if the user uses `Ltext'.
+ (dbxout_init): Call text_section before putting out localized
+ `Ltext', in case ASM_FILE_START put us into a different section.
+
+Fri Mar 22 19:26:23 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * a29k.md (jumpfdec): Simplify pattern to match what combine will
+ produce; remove reversed pattern.
+ * out-a29k.c (gen_reg_operand): Speed up by not calling
+ register_operand; check register number ourself.
+
+ * out-romp.c (update_cc, case CC_COMPARE): Call CC_STATUS_INIT.
+ * romp.md: In pattern that sets cc0 and copies a register to another
+ register, allow the output to be in memory so that we don't get an
+ output reload, which will cause problems.
+
+ * varasm.c (assemble_variable): Ensure DECL_INITIAL is non-zero
+ before we reference it; it might be zero if -fno-common.
+
+Fri Mar 22 16:11:35 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * toplev.c (abort): Don't declare if defined as macro.
+
+Fri Mar 22 11:49:43 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md (bxxu): Don't attempt to use bcnd.
+ (umulsi3, ashift/and): Remove these patterns.
+ (dummy): This must be a define_expand.
+ * out-m88k.c (m88k_handle_pragma_token): Handle #pragma weak.
+ * tm-m88k.h, tm-m88kdgux.h, tm-m88ksvr4.h, tm-v88r32.h: Various
+ changes to support SVR4, including support for #pragma weak.
+ (SLOW_BYTE_ACCESS): Better code if this is true.
+
+Thu Mar 21 09:15:47 1991 Tom Wood (wood at gen-rtx)
+
+ * c-parse.y (MULTIBYTE_CHARS): New macro.
+ (init_lex): Change to the native locale.
+ (yylex): Process wide character literals and wide character string
+ literals using mbtowc and mbstowcs based on MULTIBYTE_CHARS.
+
+Thu Mar 21 15:46:45 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rtlanal.c (dead_or_set_p): A register is dead if it is assigned
+ via a SUBREG that references the all the words in the register.
+
+ * tm-vax.h (CONST_OK_FOR_LETTER_P): Define `I' to be constant zero.
+ (CONST_DOUBLE_OK_FOR_LETTER_P): Define `G' to be floating zero.
+ (CONST_COSTS): +/- 1 should be very cheap due to decl/inc/aob/sob.
+ (PRINT_OPERAND): Add `P', `N', `H', and `B'.
+ * vax.md: Rework many patterns to avoid C code for output template;
+ use "@" construct whenever possible.
+ Use INSN_DELETED_P.
+ Remove extendsidi2; the supplied pattern does exactly what convert_move
+ will do when the pattern is not present.
+ Use constm1_rtx to check for constant of -1.
+ Add mulsidi3 and related add-multiply pattern for emul insn.
+ Use const_int_operand as predicate instead of checking for CONST_INT.
+ Remove unneeded (set (pc) (if_then_else (ne (and ...) ...) ...))
+ patterns.
+ Merge jlbs and jbs and similarly for jlbc and jbc.
+ Remove unneeded reverse branch patterns for above insns.
+ Rewrite patterns for add-and-branch insns to take into account
+ simplifications done by combine and remove reversed cases.
+ Convert peepholes for optimizing extzv followed or preceeded by andl
+ into patterns for a single insn.
+
+Thu Mar 21 15:46:21 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * toplev.c (abort): Declare it.
+
+Thu Mar 21 08:16:12 1991 Michael Meissner (meissner at osf.org)
+
+ * va-mips.h (whole file): Replace with the 1.39 version of this
+ file, which was a total rewrite of the 1.37.1 version. Add
+ primitive support for 2.00.
+
+Wed Mar 20 18:31:42 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (duplicate_loop_exit_test): Make copy of contents of
+ register note; if it was a REG_EQUAL note, it might have been an
+ arbitrary expression and sharing it can cause problems in cse.
+
+ * rtl.def (UMULT): Remove unsigned multiply code.
+ * combine.c (subst, significant_bits): Remove code UMULT and
+ support for indicating widening multiply with different modes
+ on the MULT operation vs. its operands.
+ * cse.c (simplify_binary_operation): Remove support for widening
+ multiply.
+ (rtx_code, exp_equiv_p, simplify_binary_operation, cse_insn): Remove
+ code UMULT.
+ * function.c (instantiate_virtual_regs_1): Likewise.
+ * reload1.c (eliminate_regs): Likewise.
+ * local-alloc.c (block_alloc): Likewise; replace with GET_RTX_CLASS.
+ * loop.c (simplify_giv_expr, expr_benefit): Remove code UMULT
+ and support for widening multiply.
+ * optabs.c (init_optabs): Set code of widening multiply tables
+ to UNKNOWN.
+
+ * a29k.md (mulsidi2, umulsidi2): Rewrite using SIGN_EXTEND and
+ ZERO_EXTEND. Also fix typo in SUBREG_WORD when splitting.
+ * tm-alliant.h, tm-m68k.h (NOTICE_UPDATE_CC): Remove code UMULT.
+ * alliant.md, m68.md (mulhisi3, umulhisi3): Rewrite using
+ SIGN_EXTEND and ZERO_EXTEND.
+ (divhisi3, udivhisi3, modhisi3, umodhisi3): Rewrite using TRUNCATE.
+ * alliant.md, ns32k.md (umulsi3, umulhi3, umulqi3): Remove unneeded
+ patterns that use UMULT.
+ * ns32k.md (umulsidi3): Rewrite using ZERO_EXTEND.
+
+ * tm-alliant.h (NOTICE_UPDATE_CC): MOD and (trunc (mod ...))
+ clobber CC.
+ * alliant.md (mod*, umod*): No longer need CC_STATUS_INIT.
+
+ * recog.c: Include insn-attr.h.
+ (general_operand): If we have insn scheduling, don't allow paradoxical
+ SUBREGs since they can prevent scheduling memory references; they
+ aren't helpful on RISCs anyway and can cause poor register allocation.
+ * Makefile.in (recog.o): Includes insn-attr.h.
+
+ * cse.c (COST): A register only in NO_REGS isn't a specially-cheap reg.
+ (simplify_unary_operation, case {ZERO,SIGN}_EXTEND): If OP_MODE was
+ given as VOIDmode, use MODE; allow mode size of HOST_BITS_PER_INT.
+ (cse_insn): Don't make SET_SRC equal SET_DEST if doing so will cause
+ two registers to be live containing the same value.
+ (cse_end_of_basic_block): Count SETs in CALL_INSNs and JUMP_INSNs.
+
+Wed Mar 20 15:40:48 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * gcc.c (MD_EXEC_PREFIX, MD_STARTFILE_PREFIX): New macros.
+ (md_exec_prefix, md_startfile_prefix): New variables.
+ (process_command): Put those prefixes on the paths.
+
+ * toplev.c (main): Use abort, not fancy_abort.
+
+ * integrate.c (expand_inline_function): Use emit_block_move
+ to copy BLKmode parm value. Save size and alignment for this.
+
+ * gnulib2.c (__builtin_saveregs)[MIPS]: Go to text section.
+
+ * final.c (final_scan_insn): Don't go to text after jump-tab label.
+
+Tue Mar 19 21:27:09 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * tm-a29k.h (SETUP_INCOMING_VARARGS): Always write registers to
+ 0(ap), no matter how many named args are present.
+
+ * combine.c (subst): In IF_THEN_ELSE, canonicalize to put the (pc)
+ in the second operand if we can reverse the comparison.
+ (significant_bits): Support TRUNCATE and SIGN_EXTEND.
+
+ * tm-romp.h (CC_UNSIGNED): New flag for cc_status.
+ * out-romp.c (update_cc, case CC_COMPARE): Record the operands of the
+ compare and mark whether the test will be signed or unsigned.
+ (restore_compare_p): New function.
+ * romp.md (conditional branch and return patterns): Use new
+ restore_compare_p to see if we need to tell final to reinclude
+ deleted compare insn.
+
+ * output.h (const_int_operand): Define.
+ * recog.c (const_int_operand): New function.
+ * out-a29k.c, out-romp.c, out-rs6000.c (const_int_operand): Remove from
+ these.
+
+ * tree.c (rtl_in_saveable_obstack): New function.
+ * varasm.c (immed_double_const, immed_real_const_1): Ensure that things
+ that get placed on the chain are always put into saveable_obstack.
+
+Tue Mar 19 17:21:30 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * stddef.h (wchar_t): New typedef.
+
+ * out-sparc.c (output_block_move): Handle NO_UNDERSCORES syntax.
+
+ * tm-pbd.h, xm-pbd.h: New files.
+
+ * toplev.c (report_error_function): Don't crash if between functions.
+
+Tue Mar 19 12:58:13 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * sched.c (memrefs_conflict_p): C was being used as offset for X,
+ not for Y. Flipping + and - in offset uses cleared up this problem.
+ ({true,anti,output}_dependence): Add declaration for INSN.
+ (order_calls): Interface changed; now returns void. All callers
+ changed.
+ (sched_analyze_{1,2}): Make dependence between calls and
+ call-clobbered registers explicit.
+ (sched_analyze): Track last_function_call_not_const.
+ (sched_note_set): New parameter DEATH says whether X is marked for
+ death. Also, look through SUBREGs and extractions.
+ (rank_for_schedule): Stabilize for qsort.
+ (attach_deaths): We should not end up with more REG_DEAD notes than
+ we started with, so abort if we run out early.
+ (attach_deaths_insn): Handle more complicated cases of registers
+ dying in insns.
+ (unlink_notes): Work from back-to-front instead of front-to-back.
+ (new_sometimes_live): Fix code that looks for an element already in
+ the table.
+ (schedule_block): New variable TAIL_PRIORITY used to help determine
+ max IPC of scheduled code. Also, for now we analyze (schedule) all
+ blocks, even ones which won't benfit from scheduling. This is
+ necessary to keep register live info correct, but has the
+ disadvantage of screwing *all* debug info, not just for the blocks
+ that were scheduled.
+ (update_links): Fix complicated code that was to be a simple
+ head-cons to be a simple head-cons.
+ (schedule_insns): Update REG_LIVE_LENGTH and REG_N_CALLS_CROSSED
+ after scheduling.
+
+ * sparc.md (cmpdf): Define an expand pattern for this. (Dropped by
+ mistake when converted from old-style to new-style condition codes).
+
+ * out-sparc.c (singlemove_string): Catch case where `sethi' can be
+ used instead of `mov'.
+
+ * gcc.texinfo (Optimize Options): Add documentation about the
+ `-finline' option (actually, the `-fno-inline' option).
+
+ * out-sparc.c (output_block_move): Use `rtx_alloc' instead of
+ `gen_rtx' to cons a CONST_INT whose INTVAL we can change.
+
+ * toplev.c (main): Recognize all -O strings (i.e. -O3, -O69), not
+ just -O and -O2.
+
+Mon Mar 18 22:30:21 1991 Richard Stallman (rms@mole.ai.mit.edu)
+
+ * expr.c (expand_expr): For TRUTH_ANDIF_EXPR, don't use hard target
+ if not optimizing.
+
+ * combine.c: Fix some comments; reorder the variable declarations.
+
+Mon Mar 18 12:07:03 1991 Matthew Self (mself@next.com)
+
+ * tm-next.h (WORD_SWITCH_TAKES_ARG): Return number of args taken.
+
+ * tm-next.h (CPLUSPLUS): Deleted (obsolete).
+
+ * out-next.c (flag_no_mach_text_sections, handle_pragma):
+ Handle #pragma CC_NO_MACH_TEXT_SECTIONS.
+
+Mon Mar 18 12:12:13 1991 Richard Stallman (rms at goldman)
+
+ * cplus-pt.c: Renamed from cplus-template.c.
+ * Makefile.in (cplus-pt.o): New target.
+
+ * c-typeck.c (initializer_constant_valid_p):
+ Allow casts that change width only for explicit values.
+ * tree.c (really_constant_p): New function.
+ * expr.c (expand_expr): Handle MINUS_EXPR with EXPAND_SUM.
+
+ * tm-m68k.h (FUNCTION_EXTRA_EPILOGUE): Don't normally define this.
+ * out-m68k.c (use_return_insn): Don't look at FUNCTION_EXTRA_EPILOGUE.
+
+ * out-sparc.c (normal_comp_operator): Replace comparison_code_p.
+
+Sun Mar 17 22:53:25 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * m68k.md: Delete patterns now converted by combine to simpler
+ patterns or otherwise obsolete. Specifically: ZERO_EXTRACT from
+ an HImode object, setting cc0 to SUBREG or AND, umulhi3, umulsi3,
+ AND of a ZERO_EXTRACT, shifts of 24 and 16 from MEM, and patterns with
+ constants as first operand of comparison operator.
+ Remove COMPARE except as a SET_SRC.
+
+ * alliant.md, tahoe.md, rs6000.md: Remove COMPARE except as a SET_SRC.
+
+ * flags.h (flag_combine_regs): Deleted.
+ * toplev.c: Likewise.
+ * tm-a29k.h, tm-romp.h, tm-rs6000.h (OVERRIDE_OPTIONS): No longer
+ turn on flag_combine_regs.
+
+ * tm-romp.h, tm-rs6000.h (SLOW_BYTE_ACCESS): Set to 1.
+
+ * Makefile.in (combine.o): Include insn-codes.h and insn-attr.h.
+
+ * combine.c: Major rework to support many more simplifications in
+ a more regular manner and support combining three insns into two.
+ The most significant changes are the following:
+ (subst): Remove simplifications involving ZERO_EXTRACT, SIGN_EXTRACT,
+ ZERO_EXTEND, SIGN_EXTEND, AND, and shifts.
+ Call new routines below; in the case of comparisons, handle call
+ find_next_use if we need to change the comparison code or the
+ particular MODE_CC mode required.
+ No need to ever change ASHIFT to MULT here.
+ (expand_compound_operation): New function to convert
+ {ZERO,SIGN}_{EXTRACT,EXTEND} into the appropriate pair of shifts.
+ (make_compound_operation): New function to make
+ {ZERO,SIGN}_{EXTRACT,EXTEND} operations from shifts and ANDs.
+ If we are on a machine (like a Vax) that has only arithmetic shifts,
+ convert logical to arithmetic shifts when it doesn't matter
+ which shift is used (simplify_shift_const canonicalizes to
+ logical shifts).
+ If inside an address, convert ASHIFT to MULT.
+ (significant_bits): New function to determine which bits of
+ a value are known to be zero.
+ (simplify_and_const_int): Use significant_bits.
+ Call expand_compound_operation when required.
+ Handle AND of an ASHIFTRT with a constant.
+ Don't make ZERO_{EXTEND,EXTRACT} here.
+ (simplify_shift_const): New function to simplify a shift of an
+ an object by a constant integer.
+ (gen_lowpart_for_combine): When applied to a comparison operator,
+ return comparison operator in requested mode.
+ (simplify_set_cc0_and): Deleted.
+ (try_combine): No longer call simplify_set_cc0_and.
+ (reversible_comparison_p): New function.
+ (simplify_comparison): New function.
+
+ (combine_instructions): Allocate and initialize new vars
+ reg_last_set_{table_tick,label,invalid}.
+ (update_table_tick, record_value_for_reg): New functions.
+ (get_last_value_validate, get_last_value): New functions.
+ (record_dead_and_set_regs): Call record_value_for_reg.
+
+ (find_split_point): New function to locate a place where a complex
+ pattern can be split into two insns.
+ (try_combine): If we are combining three insns and can't recognize the
+ new pattern, try to split it.
+ Call new functions below to update insn status.
+ Return insn at which to continue scan.
+ (adjacent_insns_p, add_links, remove_links): Deleted.
+ (add_incs, add_no_conflicts, remove_death, move_deaths_2): Deleted.
+ (move_deaths): Generalize to include movements in both directions.
+ Update reg_first_use when we make an earlier use.
+ (distribute_notes, distribute_links): New functions.
+ (combine_instructions): No longer need check for LOG_LINKS
+ pointing at a NOTE.
+ Rescan from location indicated by try_combine, if any, when
+ combining three insns.
+ Update reg_first_use if we moved a use to a later insn.
+
+ (try_distrib): Deleted.
+ (apply_distributive_law): New function, contains code from old
+ try_distrib.
+ (subst): Call apply_distributive_law for applicable operations.
+ Try to apply associative law.
+ (combine_instructions): No longer call try_distrib.
+ (dump_combine_stats, dump_combine_total_stats, combine_instructions):
+ No longer count distributer statistics.
+
+ (can_combine_p): New function to see if I2 or I1 is combinable.
+ Be more precise about when we can combine insns involving cc0.
+ Eliminate -fcombine-regs; always do it.
+ (try_combine):
+ Call can_combine_p to validate I2 and I1.
+ If -fexpensive-optimizations, try to simplify I1 or I2.
+ Handle (set (foo) (const_int 0)) followed by a STRICT_LOW_PART
+ assignment to FOO as a ZERO_EXTEND.
+ (subst): Quit very early if X is a root node (like PC0).
+ Remove most canonicalizations done in first switch statement; now
+ done elsewhere.
+ Call simplify_{unary,binary,ternary}_operation.
+ Add cases involving logical and arithmetic operations applied
+ to comparison operators or values with only one significant bit.
+ Add more cases involving ABS since comparisons returning values
+ can be done with ABS.
+ Avoid generating (const (const ...) ...).
+ Convert (xmult (x_extend ...) ...) to a widening multiply.
+
+ (gen_rtx_combine): New function to search for an operation in
+ undobuf. Many callers to gen_rtx changed to call this function.
+ (copy_substitutions): Only copy a substitution if it was placed into
+ more than one location.
+
+Sun Mar 17 17:26:09 1991 Richard Stallman (rms@mole.ai.mit.edu)
+
+ * c-common.c (shorten_compare): Warn for (unsigned char) == -1.
+
+ * final.c (final_scan_insn): Set debug_insn before first output.
+ (output_asm_insn): Clear it here.
+
+ * expr.c (do_jump): Don't try to split non-integers.
+
+ * fixincludes (dnetdb.h): Fix missing semi in nodeent.
+ (rusers.h): Code to fix this file was duplicated.
+
+ * toplev.c (decl_printable_name): Now given an extra arg.
+ (decl_name): Accept that arg.
+ (announce_function, report_error_function): Pass that arg.
+ (error_with_decl, warning_with_decl): Likewise.
+
+ * dbxout.c (getwd) [USG]: Define as macro.
+
+ * c-decl.c (init_decl_processing): Indicate byte alignment for void.
+
+ * expr.c (do_jump_by_parts_*): Compute nwords from compare arg.
+ Pass 0 as size and alignment to compare_from_rtx.
+ (do_jump_by_parts_greater): Compare high word first.
+ Handle unsigned compares properly.
+ Fix logic for dropping through versus failing.
+
+ * expr.c (expand_builtin): Change cmpstrsi4 to cmpstrsi as in optabs.c.
+
+ * c-common.c (truthvalue_conversion): Handle ptr vs int in MINUS_EXPR.
+
+Sun Mar 17 15:43:48 1991 Matthew Self (mself@next.com)
+
+ Allow multiple return points in some framless functions (2/2/91):
+
+ * m68k.md (return): New insn pattern for rts (and rtd).
+
+ * tm-m68k.h (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE,
+ USE_RETURN_INSN): Call new functions to avoid giant macros
+ which are hard to edit.
+
+ * out-m68k.c (output_function_prologue,
+ output_function_epilogue): New functions.
+
+ * out-m68k.c (use_return_insn): New function. Determines
+ whether the epilogue will consist of a single insn. Some
+ code was duplicated from output_function_epilogue. There
+ should be probably a new layout routine to do this common
+ work. Also #include "flags.h".
+
+ *out-m68k.c (output_function_epilogue): Don't output
+ anything if the epilogue was output as RTL. We detect this
+ by the barrier insn which is always placed after a return
+ insn. This machine-independent test should probably be moved
+ back into final.c and removed from out-sparc.c and out-m88k.c.
+
+ * out-next.c: Don't #include "flags.h".
+
+Sun Mar 17 00:07:20 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * genemit.c (gen_exp): Support constm1_rtx.
+ * genrecog.c (add_to_sequence): Likewise.
+
+Sat Mar 16 17:26:58 1991 Richard Stallman (rms@mole.ai.mit.edu)
+
+ * c-lang.c (maybe_building_objc_message_expr): New dummy function.
+ * c-typeck.c (warn_for_assignment): Use it.
+
+ * toplev.c (compile_file): Write out all static consts that are used.
+
+Sat Mar 16 14:08:12 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * integrate.c (subst_constants): Don't replace registers in USE or
+ CLOBBER expressions.
+
+ * genattrtab.c (main): Properly set up a default DEFINE_ASM_ATTRIBUTES.
+
+ * cse.c (cse_insn): Correctly check for a hash table element equal to
+ the destination of a SET.
+
+Fri Mar 15 16:55:32 1991 Ron Guilmette (rfg at pepper.ncd.com)
+
+ * Makefile.in (OBJS): Added dwarfout.o to list of things to be
+ built.
+
+ * Makefile.in (dwarfout.o): Added this rule.
+
+ * dwarfout.c (FT_*_long_long): Added default definitions for all of
+ these extended fundamental type codes to cater to plain vanilla
+ <dwarf.h> file which do not define codes for these fundamental types.
+
+ * dwarfout.c (TREE_UID): Added a local definition of this macro
+ because gcc v2 no longer provides a definition for it and because
+ dwarfout.c needs some way of getting a unique numeric code for each
+ type.
+
+ * dwarfout.c (CLASSTYPE_*): Added some local default definitions
+ for these macros in order to get around the fact that they are
+ currently defined only in cplus-tree.h (and rms wants dwarfout.c
+ to be language independent).
+
+ * dwarfout.c (BITFIELD_OFFSET_*): Added some local macros to help
+ compute various quantities relating to bitfield offsets.
+
+ * dwarfout.c (location_attribute): Changed code which outputs location
+ attributes for bitfield so that it uses gcc2 macros.
+
+ * dwarfout.c (byte_size_attribute): Changed code which outputs the
+ byte_size attribute so that it no longer uses the obsolete
+ DECL_SIZE_UNIT macro (from gcc1).
+
+ * dwarfout.c: Replaced all uses of the obsolete macro TREE_PACKED
+ to uses of the new gcc2 macro DECL_BIT_FIELD.
+
+ * dwarfout.c (deriv_list_attribute): Fixed typo "decl" => "type".
+
+ * dwarfout.c (output_dies_for_type): Replaced bogus reference to the
+ non-existant routine "output_member_function_type_die" with a proper
+ reference to the routine "output_subroutine_type_die".
+
+ * dwarfout.c (output_symbols_for_block): Fixed calling error which
+ was introduced by rms.
+
+ * dwarfout.c: Replaced all uses of the obsolete macro STMT_SUBBLOCKS
+ with uses of the new gcc2 macro BLOCK_SUBBLOCKS.
+
+ * dwarfout.c (output_symbol): Removed reference to TAG_DECL. The
+ use of TAG_DECLs was an early idea which didn't work out.
+
+ * dwarfout.c: (dwarfout_init): Changed name from dwarfout_initialize
+ because rms failed to do so when he changed the name in the call.
+
+Fri Mar 15 17:22:14 1991 Richard Stallman (rms@mole.ai.mit.edu)
+
+ * c-decl.c (pushdecl): Add `%s' to some error messages.
+
+ * sparc.md: Add extra assembler alternative in last change.
+
+ * cse.c (simplify_unary_operation, simplify_binary_operation):
+ Remove error checks that rejected SFmode.
+
+ * expr.c (get_pointer_alignment): Don't lose on casts from integer
+ to pointer.
+
+Fri Mar 15 07:57:19 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * c-decl.c (pushdecl): Fix typo in previous change.
+
+ * cse.c (simplify_{unary,binary}_operation): Fix usage of
+ REAL_VALUE_FROM_CONST_DOUBLE in recent change.
+
+Thu Mar 14 18:56:53 1991 Richard Stallman (rms@mole.ai.mit.edu)
+
+ * c-decl.c (pushdecl): Warn if mismatch with implicit decl.
+
+ * final.c (final_start_function): Handle NON_SAVING_SETJMP.
+ Include hard-reg-set.h.
+ * function.c (setjmp_protect, setjmp_protect_args): Likewise.
+ (expand_function_end): Call those if NON_SAVING_SETJMP.
+
+Thu Mar 14 14:40:45 1991 James Wilson (wilson at cygnus.com)
+
+ * reload1.c (order_regs_for_reload): When REG_ALLOC_ORDER is defined,
+ use that definition only to order regs, do not try to put call
+ used regs first. This eliminates the benefits of defining the macro
+ in the first place.
+
+ * real.h: New macros for real arithmetic, REAL_VALUE_FIX_TRUNCATE,
+ REAL_VALUE_UNSIGNED_FIX_TRUNCATE, REAL_VALUE_FIX,
+ REAL_VALUE_UNSIGNED_FIX.
+
+ * cse.c (simplify_unary_operation): Added code to simplify floating
+ point rtx. Now simplifies UNSIGNED_FLOAT, ABS, FLOAT_TRUNCATE,
+ FLOAT_EXTEND, FIX, and UNSIGNED_FIX. Add aborts to default case
+ of switches.
+ (simplify_binary_operation): Added code to simplify floating point
+ rtx. Now simplifies PLUS, MINUS, MULT, and DIV. Add aborts to
+ default case of switches.
+ (*): Always use REAL_VALUE_TYPE and REAL_VALUE_FROM_CONST_DOUBLE
+ when extracting a floating point number from a CONST_DOUBLE.
+
+Thu Mar 14 14:40:45 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * expr.c (get_pointer_alignment): Update ALIGN for NOP_EXPR.
+
+ * c-decl.c (builtin_function): New arg LIBRARY_NAME.
+ (initialize_decl_processing): Pass that argument.
+
+ * c-decl.c (grokdeclarator): Handle C_TYPE_FIELDS_VOLATILE.
+ (finish_struct): Likewise.
+ * c-tree.h (C_TYPE_FIELDS_VOLATILE): Define it.
+
+ * Makefile.in (gnulib1, gnulib2.portable): Test $$? after compilation.
+
+ * c-typeck.c (check_format): Discard multiple NOP_EXPR levels.
+
+ * objc-actions.c (build_message_expr, build_selector_expr,
+ build_encode_expr, get_class_ivars, start_class): Finding
+ Objective-C code in c source files is now a fatal error.
+ (They should recompile with -lang-objc.)
+
+ * objc-actions.c (gen_method_decl): Don't crash for syntax
+ error in method declaration: -bar: x, y
+ (encode_array): Treat an undimensioned array the same as a pointer.
+
+Thu Mar 14 07:39:30 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c (try_merge_delay_insns): Previous fix had effect of
+ disabling this function. Rework to take into account things
+ needed, instead of set. This is still somewhat of a kludge.
+
+ * recog.c (apply_change_group): An insn consisting of just a USE
+ or CLOBBER is always valid, but recog_memoized returns a -1 for it.
+
+ * genattrtab.c: Count all definitions as well as counting insns; use
+ definition # in error message.
+ Most functions that accepted insn_code now accept insn_index as well
+ and similarly for structures containing insn_code.
+
+ * reorg.c (try_merge_delay_insns): If not an annulling branch, take
+ into account things set in the delay slot. This prevents merging
+ two increments into one.
+
+ * reorg.c (dbr_schedule): Fix typo in printing statistics.
+
+Thu Mar 14 02:11:56 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * genemit.c, genoutput.c, genrecog.c: Count all definitions
+ as well as counting insns; use # of definition in error messages.
+
+ * toplev.c (pipe_closed, float_signal): Give it an explicit arg.
+ * cplus-decl.c (sigsegv): Likewise.
+ * cccp.c (pipe_closed): Likewise.
+
+ * cccp.c: Delete trigraph from comment.
+
+ * Makefile.in (realclean): Delete objc parser files.
+
+ * assert.h (__assert for __GNUC__): Don't return value of abort.
+
+Wed Mar 13 16:12:54 1991 Richard Stallman (rms at churchy.ai.mit.edu)
+
+ * expr.c (do_jump_by_parts_greater): Don't lose if labels are 0.
+
+ * cplus-edsel.c: New name for cplus-cadillac.c.
+ * Makefile.in (cplus-edsel.o): Fix the compilation rule.
+
+Wed Mar 13 06:47:53 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c (mark_set_resources): Any registers mentioned in REG_INC
+ notes are set by an INSN.
+
+ * flags.h (flag_expensive_optimizations): Add new flag.
+ * toplev.c: Support -fexpensive-optimizations and turn on for -O2.
+ * stmt.c (preserve_subexpressions_p): Use flag_expensive_optimizations
+ instead of testing for -O2 explicitly.
+
+ * expr.h (operand_subword): Add missing declaration.
+
+ * reload1.c (eliminate_regs): Handle INSN_LIST (found in REG_NOTES).
+
+ * tm-i386.h (RETURN_POPS_ARGS): Don't call aggregate_type_p with
+ IDENTIFIER_NODE.
+
+Wed Mar 13 00:00:29 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * optabs.c (expand_binop, expand_unop): If wordwise, make target non0.
+
+Tue Mar 12 15:24:09 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * fixincludes: Quote the # in an echo.
+ * fixincludes: Fix typos handling size_t and ptrdiff_t.
+ * fixincludes (sys/file.h): Fix incorrect conditional in Ultrix.
+
+ * c-typeck.c (initializer_constant_valid_p): Allow NON_LVALUE_EXPR.
+ Return a tree that indicates the relocation.
+ All callers changed.
+
+ * jump.c (jump_optimize): Rerecognize jump insn after inverting it.
+
+ * expr.c (do_jump):
+ Use can_compare_p on the operand mode, not the comparison's mode.
+
+ * reload.c (subst_reloads): Fix dumb error in last change.
+
+ * expr.c (do_jump_by_parts_equality*): Fix logic errors.
+
+Mon Mar 11 14:27:40 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * reload.c (subst_reloads): Don't make subregs, just new regs.
+
+ * expr.c (do_jump_by_parts_equality, do_jump_by_parts_greater):
+ (do_jump_for_compare, do_jump_by_parts_equality_rtx): New functions.
+ (do_jump): Use them to handle wide values.
+ * optabs.c (can_compare_p): New function.
+
+ * reload1.c (emit_reload_insns): Don't make subreg around RELOADREG;
+ just make a new REG.
+
+ * cse.c, varasm.c: Fix typos.
+
+ * sparc.md (move SI to reg_or_nonsymb_mem_operand):
+ Separate third alternative into two alternatives.
+ * tm-sparc.h (PREFERRED_RELOAD_CLASS): Return CLASS as given.
+
+ * optabs.c (operand_subword): Fix typo.
+
+ * longlong.h (__umulsidi3): Return .ll field.
+
+Mon Mar 11 11:43:21 1991 Jeffrey A. Law (law at mole.ai.mit.edu)
+
+ * make-hp9k2bsd: New file.
+ * configure (hp9k200-bsd): Use it.
+
+Mon Mar 11 07:08:12 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-lex.c (check_newline): Clear TREE_INT_CST_HIGH once instead
+ of clearing TREE_INT_CST_LOW twice.
+
+Mon Mar 11 06:51:52 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * flow.c (mark_used_regs): If we are going to use a later
+ register to auto-increment, make sure it really is a REG.
+ In the case above, count any calls crossed by the new register.
+
+ * global-alloc.c (global_conflicts): Mark registers modified by
+ virtue of a REG_INC note as modified in the insn to make conflicts.
+ (mark_reg_store): Accept SETTER value of 0.
+
+Sun Mar 10 16:56:25 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * optabs.c (operand_subword): New function to get one word of operand.
+ (expand_binop, expand_unop): Use it for word at a time case.
+
+ * configure (a29-bsd*): Renamed from a29-sysv*.
+
+ * expr.c (emit_library_call): Handle GNULIB_NEEDS_DOUBLE.
+ * tm-i860.h (GNULIB_NEEDS_DOUBLE): Define it.
+
+ * tm-harris.h (ASM_FILE_START): Output a .file.
+
+ * reload1.c (constraint_accepts_reg_p): Understand reg classes.
+
+Sun Mar 10 06:58:20 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (move_by_pieces, move_by_pieces_ninsns, emit_push_insn):
+ If SLOW_UNALIGNED_ACCESS is defined, respect alignment even if
+ STRICT_ALIGNMENT is not defined.
+ * tm-a29k.h (SLOW_UNALIGNED_ACCESS): Define this.
+
+Sun Mar 10 02:57:40 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cccp.c (handle_directive): If pass_thru and -C, print the
+ input before removing comments from it.
+
+Sat Mar 9 21:18:48 1991 Torbjorn Granlund (tege at musta.nada.kth.se)
+
+ * gnulib2.c (div_qrnnd, __umulsidi3, lowpart, highpart, B): Move
+ to longlong.h.
+ (udiv_qrnnd): New name of div_qrnnd. Rewrite to work correctly.
+ (file header): Remove obsolete comment about internal format.
+ (bits): Remove this function. count_leading_zeros in longlong.h
+ is similar.
+ (__udivdi3): Use count_leading_zeros instead of bits.
+ (__udivdi3): Use umul_ppmm instead of __umulsidi3, as this makes
+ better code.
+
+Sat Mar 9 18:02:47 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (jump_optimize): Avoid looking at PATTERN of NOTE
+ or CODE_LABEL.
+
+ * reload1.c (reg_is_output_reload, count_for_*groups): Use
+ HARD_REG_SET instead of array to avoid bzero calls.
+ (reload_reg_used*): Likewise.
+
+ * emit-rtl.c (gen_rtx, init_emit_once): Pre-compute CONST_INTs
+ from -64 to 64 to save space.
+
+Sat Mar 9 14:28:37 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * reload1.c (choose_reload_regs): Fix typo in last change.
+
+Sat Mar 9 01:03:01 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-decl.c (pushtag): Don't call `pushdecl' for nested type if
+ the type is already defined.
+
+Fri Mar 8 17:24:20 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * ns32k.md, vax.md (right shift patterns): When generating a right
+ shift, use xSHIFTRT but use (neg x) as the shift count to
+ more accurately represent what is supported by the machine.
+
+ * expmed.c (emit_store_flag): Can't narrow result of scc insn before
+ normalizing.
+
+Fri Mar 8 12:56:41 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-class.c (pushclass): Set CURRENT_FUNCTION_DECL to
+ appropriate value so that pushtag does the right thing for tags
+ pushed into scope.
+
+Fri Mar 8 02:47:53 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * gcc.c (delete_temp_files): Delete only ordinary files.
+
+ * tree.c, cplus-tree.c (TYPE_HASH): 777777 was supposed to be octal.
+
+ * reload1.c (choose_reload_regs): Properly ensure EQUIV
+ is free and of the desired class.
+ When a reload may be a group, mark all its regs in use.
+
+ * reload.c (push_reload): Don't call reg_overlap_mentioned_p
+ unless IN is a REG or MEM.
+
+ * c-common.c, cplus-search.c, cplus-class.c (NULL):
+ Undef before defining.
+
+ * sdbout.c (sdbout_one_type): Don't temporarily clear KNOWN_TYPE_TAG.
+
+Thu Mar 7 10:53:32 1991 Tom Wood (wood at dg-rtp.dg.com
+
+ * toplev.c (main): Add -dp: annotate the assembly with a comment
+ describing the pattern and alternative used. Also, make -dm work
+ for USG systems.
+ * genoutput.c (output_epilogue): Output the array `insn_name'.
+ * final.c (debug_insn, final_scan_insn): Record the value of the
+ last insn processed by final_scan_insn.
+ (output_asm_insn): Annotate the assembly output.
+ (ASM_COMMENT_START): Provide a default value.
+ * tm-att386.h, tm-bsd386.h, tm-sun386.h (ASM_COMMENT_START):
+ Specify "/".
+
+Thu Mar 7 06:15:04 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-class.c (propagate_basetype_offsets): Check ASSOC_TYPE in
+ addition to return value from assoc value before aborting. ???
+ should figure out why assocs are not shared.
+
+Wed Mar 6 16:29:37 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-decl.c (NULL): Undef before defining.
+
+ * cccp.c (do_include): Allocate file name permanently.
+
+Wed Mar 6 09:06:39 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md (and/ashift): Added for the new combine.c (ashift/and
+ works with the previous version).
+ (bcnd insns): Use bcnd to test for sign and zero.
+ (muldf3, divdf3): Use new method to deal with a power of two.
+ (andsi3, iorsi3, xorsi3): Split into two insns for some constants.
+ (call, call_value): Deal properly with a CONST_INT address.
+ * out-m88k.c (call_address_operand): Don't allow CONST_INT.
+ (uses_arg_area_p): New function for -moptimize-arg-area.
+ * tm-m88k.h (TARGET_SWITCHES): Delete -mpic in favor of -fpic.
+ Add -moptimize-arg-area and -mno-optimize-arg-area.
+
+Wed Mar 6 00:07:09 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * real.h (REAL_VALUE_FROM_CONST_DOUBLE): Takes input and output args.
+ * integrate.c (copy_for_inline, copy_rtx_and_substitute):
+ (restore_constants): Calls changed.
+
+Tue Mar 5 23:06:36 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * stmt.c (fixup_gotos): Handle jumping to end of rtl.
+
+ * c-decl.c (store_parm_decls): If -traditional,
+ allow unsigned int in prototype in place of int.
+
+ * cplus-cadillac.c: Delete all but the stubs.
+
+Tue Mar 5 16:59:18 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (jump_optimize): Handle case of only NOTE insns after
+ NOTE_INSN_LOOP_BEG.
+ (duplicate_loop_exit_test): Return 0 when we hit a block
+ start or end, rather than quitting loop and getting confused.
+
+ * integrate.c (subst_constants): Correctly move constants to
+ second operand of commutative operations.
+
+ * jump.c (comparison_code_p): Deleted.
+ * combine.c (subst): Use GET_RTX_CLASS instead of comparison_code_p.
+ * cse.c (find_comparison_args): Likewise.
+ * recog.c (comparison_operator): Likewise.
+ * loop.c (get_condition): Likewise.
+
+Tue Mar 5 14:21:57 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cse.c (fold_rtx): When checking for constant pool addresses,
+ handle addresses constructed from LO_SUM.
+
+ * recog.c (constrain_operands): If before reload, `m' and `o'
+ accept all that could be reloaded to fit those constraints.
+
+ * reload1.c (gen_input_reload): Return the first insn emitted by
+ this function, instead of the last insn emitted.
+
+ * stmt.c (expand_end_loop): When move exit test to loop bottom,
+ also move a preceeding NOTE_INSN_LOOP_CONT note if it exists.
+
+ * gcc.c (process_command): Check for running out of args after option.
+
+ * out-mips.c, out-romp.c: Test BYTES_BIG_ENDIAN with #if.
+ * tm-i860.h (*_BIG_ENDIAN): Define as 0.
+ * tm-mips-news.h (BYTES_BIG_ENDIAN, WORDS_BIG_ENDIAN): Deleted.
+ (DECSTATION): Deleted.
+
+ * tm-mips.h: Test WORDS_BIG_ENDIAN with #if.
+
+ * tm-mips.h, tm-sparc.h, tm-spur.h (CONST_DOUBLE_OK_FOR_LETTER_P):
+ Use CONST_DOUBLE_LOW and CONST_DOUBLE_HIGH.
+
+ * real.h: dconst0, dconst1, dconstm1 are declared twice.
+ Eliminate the second redundant declaration.
+
+ * cse.c (FIXED_REGNO_P): Exclude OVERLAPPING_REGNO_P registers.
+
+ * cccp.c (path_include): Handle empty names in path.
+
+ * final.c: Use gvarargs.h, not varargs.h
+
+ * configure (i860, i860-bsd): Handle +gas.
+ * tm-i860g.h, tm-i860bsdg.h: New files.
+
+Mon Mar 4 22:41:36 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cse.c (simplify_unary_operation): When making a real const, use MODE.
+
+Mon Mar 4 21:35:47 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_end_of_basic_block): Correctly handle case where
+ we find a "new" branch to follow.
+ (cse_end_of_basic_block, cse_main, cse_basic_block): PATH_SIZE
+ is now actual size, not size - 1.
+
+Mon Mar 4 06:44:27 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-decl.c (poplevel): Change test for whether to clobber the
+ DECL_CONTEXT of local variables. Now we won't clobber context for
+ any nested types.
+
+Mon Mar 4 00:39:11 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * jump.c (jump_optimize): When deleting x=y after y=x,
+ don't delete more than one death note, and don't delete any
+ unless we really do delete x=y.
+
+ * cccp.c (main): Support -lang-objc++.
+ Eliminate compilation parameter CPLUSPLUS.
+
+ * cccp.c (main): Handle leading or trailing space in `predefs'.
+
+ * fixincludes: Fix typos handling size_t and ptrdiff_t.
+
+Sun Mar 3 16:41:24 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cccp.c (main): Handle multiple spaces, and tabs, in `predefs'.
+ * gcc.c (do_spec_1): Allow extra whitespace in CPP_PREDEFINES.
+ Also transform -Dfoo=bar into -D__foo__=bar correctly.
+
+ * varasm.c (assemble_zeros): Use ASM_BYTE if defined.
+
+ * reload1.c (reload): Only special-case a spill reg alone in a class
+ if there is non-group need for that class. Be careful not to count
+ a reg in the usual place if it was counted in the special case.
+
+ * reload1.c (order_regs_for_reload): Make fixed regs and
+ eliminable regs twice as bad as explicitly mentioned regs.
+
+ * reload1.c (choose_reload_regs): Fix typos in last change.
+
+ * c-decl.c (init_decl_processing):
+ Return type of memcpy varies if -traditional.
+ (ptr_ftype_ptr_cptr_sizet): Global var deleted.
+
+ * reload1.c (emit_reload_insns): When updating reg_reloaded_contents,
+ first always clear, then maybe store nonzero value.
+
+Sun Mar 3 16:12:17 1991 Ken Raeburn (raeburn at watch.com)
+
+ * cplus-template.c (mangle_class_name_for_template): Add two
+ leading underscores, to avoid conflicts with programmer's names.
+
+ * cplus-tree.h (struct lang_identifier): New field `template'
+ points to template info from which this identifier was
+ constructed.
+
+ * cplus-template.c (current_template_expansion,
+ current_template_name): Variables deleted.
+
+ * cplus-template.c (lookup_template_class): Top half of old
+ instantiate_template; returns the id_node.
+ (instantiate_template): Takes the id_node as argument now.
+ * cplus-parse.y (template rules): Use separate rule for checking
+ whether expansion is required. For base classes, always try it;
+ else do it only if `{' is not next token.
+ (template_type_name): New nonterminal for template class name
+ without expansion.
+ (template_type): Includes expansion, if needed.
+
+ * cplus-input.c (input_from_saved_text): Deleted.
+ * cplus-template.c (instantiate_template): Call feed_input directly.
+
+ * cplus-parse.y (base_class_visibility_list): Now type <itype>,
+ cast to tree in base_class action.
+
+Sun Mar 3 07:46:55 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (do_store_flag): Consider A & single-bit as cheap.
+
+ * fold-const.c (operand_equal_p): If ARG0 and ARG1 are the same
+ SAVE_EXPR, they are equal.
+
+ * function.c (fixup_var_refs_1): Move mispositioned code in
+ (set (zero_extract ...) ...) case; fix incorrect indentation.
+
+Sun Mar 3 01:11:46 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cccp.c (include_defaults, cplusplus_include_defaults):
+ Use STANDARD_INCLUDE_DIR.
+ (STANDARD_INCLUDE_DIR): Define by default as /use/include.
+ * tm-mips.h (STANDARD_INCLUDE_DIR): Define, if MIPS_BSD43.
+ (CPP_SPEC): Don't do -I to handle -ZSYSV, -ZBSD43.
+
+Sat Mar 2 17:20:57 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case COND_EXPR): Remove unneeded calls to
+ safe_from_p in A ? A : FOO cases.
+
+Sat Mar 2 16:14:24 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * reload1.c (choose_reload_regs): Support subreg as reload_override_in.
+ Likewise reload_reg_rtx. Just don't use REGNO on them.
+ (emit_reload_insns): Handle subreg as OLDEQUIV.
+
+ * reload1.c (delete_output_reload): Pass the output reload insn,
+ not a spill reg index. Call in emit_reload_insns changed.
+ (emit_reload_insns): Don't actually update spill_reg_store
+ till after all reload insns have been made.
+
+ * reload.c (push_reload): If existing reload has a reload reg,
+ make sure it fits the class of this reload.
+
+ * stmt.c (fixup_gotos): Fix typo in last change.
+
+ * reload1.c (choose_reload_regs): Don't use equiv reg
+ that is clobbered in this insn.
+
+Sat Mar 2 12:19:19 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-dem.c (optable): Add op for `operator,'.
+
+ * toplev.c (main): Clear WARN_INLINE if FLAG_NO_INLINE is nonzero.
+
+ * cplus-typeck.c (c_expand_return): Perform conversion to reference
+ in time that we can warn about the return of more non-lvalues.
+ Also, fix what appeared to be bugs in the code dealing with
+ WHATS_RETURNED.
+
+Sat Mar 2 00:11:18 1991 Ken Raeburn (raeburn at watch.com)
+
+ * cplus-parse.y (base_class): Base class may be a template class.
+ Split off non-visibility portion into base_class.1.
+
+ * cplus-parse.y: Replaced PUBLIC, PRIVATE, PROTECTED with a single
+ terminal VISSPEC, with <itype> value, to simplify parser slightly.
+ * cplus-parse.h (enum rid): Added values for VISSPEC terminal.
+ * cplus-lex.c (is_reserved_word): Changed token types to VISSPEC,
+ rid values as appropriate.
+ (yylex): For VISSPEC, set itype value rather than ttype.
+
+Fri Mar 1 21:50:23 1991 Ken Raeburn (raeburn at watch.com)
+
+ * cplus-parse.y (.set_base_init): Discarded `preserve' code, which
+ was doing nothing.
+
+Fri Mar 1 19:01:25 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c (redundant_insn_p): Rename second arg to TARGET.
+ Handle the case where TARGET is a SEQUENCE.
+ (mark_target_live_regs): Don't get confused by registers conditionally
+ set in a JUMP_INSN when looking for regs set before used.
+
+Thu Feb 28 17:25:59 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * loop.c (check_dbra_loop): Replace code that thinks it knows
+ exactly what the RTL looks like (and gets it wrong) with call
+ to get_condition_for_loop.
+
+Thu Feb 28 16:35:21 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-typeck.c (build_compound_expr): Convert array to pointer.
+
+Wed Feb 27 15:46:54 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * gnulib1.c (FLOAT_ARG_TYPE, FLOATIFY): New macros.
+ (__*sf*): Use them for `float' args.
+
+ * stmt.c (expand_end_case):
+ Test value of HAVE_casesi and HAVE_tablejump at runtime.
+
+ * stmt.c (fixup_gotos): Check that jump into bindings
+ really comes from before the start of the bindings.
+ Use TREE_REGDECL to indicate error message printed.
+
+Wed Feb 27 15:01:51 1991 Ken Raeburn (raeburn at watch.com)
+
+ * cplus-template.c (end_template_decl): Store correct name in new
+ decl. Use pushdecl, not pushtag.
+ (instantiate_template): Use identifier's global value, not its
+ type. Pass back both template and new class in token value.
+ * cplus-lex.c (identifier_type): Templates now have type
+ TEMPLATE_DECL, not TYPE_DECL wrapped around a TEMPLATE_DECL.
+
+Wed Feb 27 06:27:45 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * loop.c (replace_regs): Don't make nested SUBREGs.
+
+ * reload.c (push_reload): SUBREG_LOC applies only to INLOC, not OUTLOC.
+
+ * cse.c (simplify_binary_operation): Simplify A&A, A|A, and A^A.
+
+ * reload.c (find_reloads_address_1): Correctly handle (post_inc (mem)).
+
+Tue Feb 26 21:49:15 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * expmed.c (store_bit_field, extract_bit_field): Calls to
+ get_best_mode were passing alignment in bytes rather than
+ alignment in bits.
+
+ * flags.h (flag_pedantic_errors): Declare it.
+
+ * c-tree.h (C_TYPEDEF_EXPLICITLY_SIGNED): New flag.
+ * c-decl.c (grokdeclarator): Record that flag in new typedefs.
+ Check it when determining signedness of bitfields.
+
+ * expr.c (expand_expr): In A ? A : B, make output safe from A and B.
+
+ * reload.c (find_reloads_address, find_reloads_address_1):
+ Reload any reg that appears in a clobber in the same insn.
+ (regno_clobbered_p): New function.
+
+Tue Feb 26 21:41:43 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * expr.c (expand_expr): Add missing arg to exapnd_exit_loop in
+ EXIT_EXPR case.
+
+Tue Feb 26 14:35:47 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-decl.c (grokdeclarator): Check pedantic error last.
+
+ * tm-i386.h (STRUCT_VALUE, STRUCT_VALUE_INCOMING): Value is 0.
+ (RETURN_POPS_ARGS): Pop the structure return pointer here.
+ * out-i386.c (function_epilogue):
+ current_function_pops_args says how many args to pop.
+
+ * tm-i386.h (CC_Z_IN_NOT_C): New cc flag.
+ * i386.md (je and jne patterns): Handle this flag.
+ (pattern using bt insns): Set the flag.
+ Output test insn instead if bit number is constant.
+ (insv): Changed constraint.
+
+ * tm-i386.h (enum reg_class): Define ABCI_REGS.
+ (REG_CLASS_NAMES, REG_CLASS_CONTENTS): Support ABCI_REGS.
+ Fix the contents for ABC_REGS.
+ (REG_CLASS_FROM_LETTER): Define `x' for ABCI_REGS.
+ * i386.md (divsi3, udivsi3): Use `xm' for operand 2 constraint.
+ (divhi3, udivhi3, divmod*, udivmod*): Likewise.
+
+ * cccp.c (pedwarn): Declare as void.
+
+Tue Feb 26 06:41:34 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * tree.h (IDENTIFIER_VIRTUAL_P): New macro for IDENTIFIER_NODE.
+ Nonzero means that this identifier is used by a function declared
+ virtual.
+ * cplus-decl.c (grokfndecl): Set IDENTIFIER_VIRTUAL_P instead of
+ DECL_VIRTUAL_P.
+ * cplus-search.c (get_first_matching_virtual): Test
+ IDENTIFIER_VIRTUAL_P instead of DECL_VIRTUAL_P.
+
+ * cplus-decl.c (pushtag): Handle classes which are nested in
+ function scope (as opposed to class scope).
+ (lookup_nested_type): Ditto.
+ * cplus-method.c (build_overload_nested_name): Ditto.
+
+ * cplus-decl.c (grokdeclarator): Only globalize non-nested classes
+ declared in class scope (i.e., don't globalize in function scope).
+
+Tue Feb 26 06:11:37 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * a29k.md (storem): Fix typo in operand number.
+
+ * expr.c (do_store_flag): Add missing cast required for some compilers.
+
+ * tm-a29k.h (REG_CLASS_*, REGNO_REG_CLASS): Add new class Q_REGS
+ and constraint letter `q' for the Q register. Requested by tege.
+
+ * tm-a29k.h (PRINT_OPERAND_ADDRESS): Allow short constant as address.
+
+Mon Feb 25 20:46:43 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * expr.c (expand_expr): In handling A : A ? FOO, use safe_from_p
+ against FOO. Fix many incorrect operand refs in A : FOO ? A.
+
+ * sdbout.c (plain_type_1): Record type name only if using forward refs.
+
+ * reload.c (find_reloads): Mark those RELOAD_OTHER reloads
+ that are used for output addresses, for choose_reload_regs.
+
+ * integrate.c (copy_rtx_and_substitute):
+ Copy REG_USERVAR_P from original regs to new regs.
+
+ * c-typeck.c (digest_init): Handle STRING_CST before same-type case.
+
+Mon Feb 25 13:31:51 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-decl.c (grokdeclarator): Handle the identification of
+ constructors declared in nested scope.
+
+Mon Feb 25 06:27:28 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c (next_insn_no_annul): New function.
+ (mark_set_resources, mark_target_live_regs): Don't count insns from
+ the target of a branch if the branch is annulling.
+
+ * expmed.c (emit_store_flag): Get new register for target if
+ preserve_subexpressions_p returns nonzero.
+ Convert to desired mode, then normalize, instead of doing it
+ the other way around; this allows better combining.
+
+Sun Feb 24 20:07:02 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (find_comparison_args): Fix indentation and misplaced paren.
+
+ * Makefile.in (install-headers): Remove extraneous parens from
+ uses of shelllibsubdir.
+
+Sun Feb 24 15:49:42 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * loop.c (check_dbra_loop): Win if loop biv is used only for counting.
+
+ * cccp.c (struct definition): Record file and line.
+ (create_definition): Store that information.
+ (do_define): Identify location of previous definition.
+ (pedwarn_with_file_and_line): New function.
+
+Sat Feb 23 13:36:13 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-decl.c (grokdeclarator): Error for `signed void', etc.
+ Warning for `signed my_int', and only if pedantic.
+
+ * toplev.c (warn_cast_align): New flag, with -W option.
+ * c-typeck.c (build_c_cast): Warn if target alignment increases.
+
+Sat Feb 23 10:22:03 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-type2.c (store_init_value): Global variables must be
+ specially initialized in PIC under SunOS.
+
+ * cplus-dbxout.c (dbxout_tags): Test that the tag's value has not
+ been cleared before trying to use it as a type. This happens when a
+ class starts out looking like a nested class, but turns out to be a
+ reference to an implicitly defined global class.
+
+Sat Feb 23 06:16:44 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (true_regnum): If given a pseudo not assigned a hard reg,
+ return the pseudo register number.
+
+ * out-rs6000.c (update_cc): Remove CC_REVERSE and CC_NONNEG.
+ * rs6000.md (define_attr "cc"): Remove reverse.
+ (cmpsi): Only allow second arg to be a constant.
+ Remove some unneeded comparison patterns.
+
+ * rs6000.md (misc logical patterns): Only add CLOBBER for MQ
+ when we really clobber it; we used to do so in more cases to
+ work around a since-fixed restriction in combine.c
+
+ * rs6000.md (extend*): Use DEFINE_EXPAND instead of a pattern
+ that generates two insns. Remove (sign_extend (ashift ..) ...)
+ and similar patterns; no longer neeed.
+
+ * rs6000.md (fma instruction): Add missing single-precision case.
+
+ * out-rs6000.c (print_operand, case 's' and 'S'): Truncate to low-order
+ 5 bits.
+
+ * out-rs6000.c (output_prolog, output_epilog): Correct code to handle
+ large stack frames; used 65535 instead of 32767 and had a typo.
+
+ * tm-romp.h (CC_IN_NOT_TB): Deleted.
+ * out-romp.c (update_cc): No longer need CC_REVERSE, CC_NONNEG, or
+ CC_NOTTBIT.
+ (print_operand): Remove use of CC_IN_NOT_TB.
+ * romp.md (define_attr "cc"): Remove reverse,nonneg, and nottbit.
+ (mttbi): Remove redundant pattern.
+ (cmpsi): First arg can only be register_operand.
+ Remove some unneeded COMPARE patterns.
+
+ * romp.md (movhi): Use zero-extend, not sign-extend load.
+
+ * out-romp.c: (float_conversion): Allow CONST_INT as operand.
+
+ * out-romp.c (first_reg_to_save): Ensure we save r14 if we use it.
+
+ * a29k.md (divsf3): Fix typo in name; was divds3.
+
+ * tm-a29k.h: Add new -mno-storem-bug and TARGET_NO_STOREM_BUG.
+ (TARGET_SWITCHES): -m29050 turns on -mno-storem-bug.
+ * a29k.md: (store_multiple_bug): New pattern to work around chip bug.
+ (store_multiple_no_bug): New name for original pattern.
+ (store_multiple): Choose depending on TARGET_NO_STOREM_BUG.
+ (storem patterns): Two cases, with and without bug.
+
+ * a29k.md (extend*): Don't define single insn for sign_extend.
+ Instead, use DEFINE_EXPAND. Delete DEFINE_SPLITs for the old patterns.
+
+ * a29k.md (jumpfdec pattern): Fix typo.
+
+ * tm-a29k.h, tm-romp.h, tm-rs6000.h (CC1_SPEC): Remove optimization
+ selections.
+ (OPTIMIZATION_OPTIONS): Turn off insn scheduling by default until
+ it is fixed.
+
+ * tm-a29k.h, tm-romp.h, tm-rs6000.h (SETUP_INCOMING_VARARGS):
+ Correctly handle the case of the special argument being other than
+ the first arg.
+
+ * tm-a29k.h (GO_IF_LEGITIMATE_ADDRESS): A tiny constant (< 255)
+ is also a valid address.
+
+ * tm-a29k.h, tm-romp.h, tm-rs6000.h (BYTE_LOADS_ZERO_EXTEND): Add to
+ support combine.c in development.
+
+ * jump.c (jump_optimize, can_reverse_comparison_p, delete_jump):
+ Consistently allow NOTEs between the set and use of CC0.
+ * reorg.c (delete_scheduled_jump): Likewise.
+
+ * expmed.c (emit_store_flag): Pass in UNSIGNEDP; can't derive it from
+ comparison code.
+ * expr.c (do_store_flag): Add UNSIGNEDP arg to emit_store_flag call.
+ * jump.c (jump_optimize): Likewise.
+ * optabs.c (expand_binop): Likewise.
+
+ * local-alloc.c (requires_inout_p): New function.
+ (block_alloc): Use high-priority preferences if we have a hard
+ register used in an insn that requires the same register for
+ input as for the output.
+ (combine_regs): Rename argument COPY to MAY_SAVE_COPY.
+
+ * cse.c (simplify_binary_operation, case MULT): Convert multiply
+ by power of two to shift.
+ (cse_insn): Don't share rtx obtained from the hash table; copy it.
+
+Sat Feb 23 00:27:26 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * rtlanal.c (dead_or_set_p): Don't check for REG_INC.
+
+ * reload.c (push_reload): (subreg:m1 (reg:m2 ...) ...) with M1 wider
+ than M2 is also a paradoxical SUBREG.
+
+Fri Feb 22 14:43:44 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * reload1.c (possible_group_p): Add missing forward declaration.
+
+ * reload1.c (eliminate_regs, case PLUS): Ensure we handle the
+ case of (plus reg1 reg2) where REG1 is eliminable and REG2 is
+ psuedo that didn't get a hard reg and has reg_equiv_constant nonzero.
+ (choose_reload_regs): If reload_needed_for_multiple,
+ the reload can't be input-only or output-only.
+ (emit_reload_regs): Avoid regno_dead_p.
+ * combine.c (regno_dead_p): Function deleted.
+
+ * Makefile.in (maketest): Finish renaming config to configure.
+
+ * gcc.c (lookup_compiler): Create a new entry to represent
+ the result of searching for an alias entry.
+
+ * reload.c (combine_reloads): Swap args to reg_overlap_mentioned_p.
+
+Fri Feb 22 09:40:50 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-parse.y (base_class_list): Re-fix precedence so we can use MI.
+
+ * cplus-except.c (init_exception_processing): Push exception ctors
+ and dtors into scope so they can be inlined.
+
+Fri Feb 22 08:03:47 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * genemit.c (output_init_mov_optab): New function.
+ (main): Have insn-emit.c include insn-codes.h.
+ Call output_init_mov_optab.
+ * optabs.c (gen_move_insn): Handle moving MODE_CC modes; we may have
+ to find a different mode to do this in.
+ (init_optabs): Try to initialize CCmode in mov_optab; if we have
+ EXTRA_CC_MODES, call init_mov_optab.
+ * Makefile.in (insn-emit.o): Now depends on insn-codes.h.
+
+ * rtl.h (get_last_insn_anywhere): Add missing declaration.
+
+ * stmt.c: Now includes hard-reg-set.h (for n_non_fixed_regs).
+ (preserve_subexpressions_p): Renamed from inside_loop.
+ Always return true if optimize >= 2; always return false if
+ optimize == 0. If optimize == 1, only return true if we aren't
+ very far into a loop instead of whenever we are in any loop.
+ * Makefile.in (stmt.o): Now includes hard-reg-set.h.
+ * expr.c (expand_expr): Use preserve_subexpressions_p instead of
+ inside_loop.
+ Only set TARGET to SUBTARGET if TARGET isn't a pseudo register.
+ (expand_expr, case REAL_CST): Don't call force_reg; now done in
+ expand_binop, if required.
+ * optabs.c (expand_binop, expand_twoval_binop, emit_cmp_insn):
+ If arg is expensive constant and preserve_subexpressions_p is true,
+ force it into a register.
+ * out-sparc.c (emit_move_sequence): Call preserve_subexpressions_p
+ instead of inside_loop.
+
+ * reload1.c (eliminate_regs, case SUBREG): Correct test for paradoxical
+ SUBREG.
+
+ * varasm.c (output_constant_pool): If entry refers to a deleted label,
+ write a zero instead of the undefined label.
+
+Fri Feb 22 02:49:24 1991 Ken Raeburn (raeburn at watch.com)
+
+ * Reversed all changes dated 20 February.
+ * cplus-template.c (pending_template_expansion): New function;
+ given template name, returns class name of expansion in progress.
+ * cplus-parse.y (PTYPENAME -> typespec): Call it.
+ ('~' PTYPENAME -> notype_declarator): Ditto.
+
+Thu Feb 21 15:17:13 1991 Craig Burley (burley at geech.ai.mit.edu)
+
+ * c-common.c (check_case_value): If value is NULL_TREE, return it
+ without any further checking.
+
+ * stmt.c (pushcase_range): If value1 is NULL_TREE, substitute
+ minimum value for the type, if value2 is NULL_TREE, substitute
+ maximum value for the type, from then on assume both are not NULL_TREE.
+ These changes appear to provide minimal support for case ranges.
+
+ * c-typeck.c (digest_init): For explicit array element initializer
+ case, change check against max value of domain so index may equal it.
+ For array element initialization, give next initializer a chance to
+ override the choice of next index before falling out of loop because
+ next index is out of range. For structure initialization, give next
+ initializer a similar chance before falling out of loop because no
+ more fields exist.
+
+ * reload1.c (possible_group_p): Needed a forward decl (static).
+
+Thu Feb 21 14:37:01 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-decl.c (grokdeclarator):
+ Don't make bitfield type unsigned if comes from typedef.
+
+ * reload1.c (reload): Don't require INITIAL_FRAME_POINTER_OFFSET
+ if cannot eliminate the frame pointer.
+
+ * i860.md (cbranch, inverse_cbranch): Use eq to test cc0.
+ (negated branch patterns): New patterns.
+
+ * tm-i860.h (INITIALIZE_TRAMPOLINE): Use size_int, not build_int.
+
+ * reload1.c (reload): Save and restore notes around find_reloads.
+
+ * tm-sun2os4.h (LINK_SPEC): New macro.
+ * tm-sun386i.h (LINK_SPEC): Undef before redefining.
+
+ * cccp.c (do_include): Check for -2, not -1, as value of lookup_import.
+
+ * c-parse.y (initlist): Fix typo.
+
+Mon Feb 18 02:50:38 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-decl.c (grokdeclarator): Try to come up with better magic
+ for implicitly globalizing classes implicitly declared in class
+ scope.
+
+Sun Feb 17 09:27:38 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-tree.c (virtual_offset): New function. Returns the offset
+ of a baseclass that is virtual or comes from a virtual baseclass, or
+ NULL if there is no such baseclass.
+ * cplus-class.c (modify_vtable_entries): Call this function instead
+ of `virtual_member'. `virtual_member' can return the wrong thing if
+ we try to use it for an offset computation of a baseclass which is
+ not strictly a virtual baseclass.
+
+Sat Feb 16 06:21:03 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * recog.c (validate_replace_rtx_1): Use correct rtx_code for the
+ new operation when commuting operands.
+ Generalize to commute operands on comparison operation.
+
+Fri Feb 15 23:01:24 1991 Richard Stallman (rms at geech.ai.mit.edu)
+
+ * c-parse.y (initlist): Finish changing `case N:' to `[N]'.
+
+ * combine.c (try_combine): Update reg_first_use. Flush useless links.
+
+Thu Feb 14 17:06:44 1991 Ken Raeburn (raeburn at watch.com)
+
+ * cplus-parse.y (template_parm): New derivation from `class ID',
+ for consistent return of `identifier_node' nodes with `class A :
+ B' case.
+ * cplus-template (end_template_parm_list): Nothing to strip off of
+ identifier_nodes now.
+ (process_template_parm): Strip off one level of tree_list,
+ discarding (for now) the required base class. Don't need to run
+ through grok* any more.
+
+Sun Feb 10 19:23:21 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * gcc.c (main, process_command, default_compilers): Fix typos.
+
+Sat Feb 9 15:06:43 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * gcc.c (process_command): Handle separate args for -B, -b, -V.
+
+ * gcc.c (lookup_compiler): New function. Handles alias entries.
+ (main): Call that.
+ (default_compilers): Make all real suffixes into alias entries.
+ (infiles): Now a vector of structures, containing specified language.
+ (process_command): Handle -x to specify language.
+ (main): Use specified language if any.
+
+Fri Feb 8 18:31:00 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * fold-const.c (fold): Set TREE_USED when create COMPOUND_EXPR.
+ * stmt.c (warn_if_unused_value): Don't warn if TREE_USED.
+ * c-typeck.c (build_unary_op): Handle multiple casts inside ++.
+
+Fri Feb 8 07:37:24 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * real.h (dconst2): New variable.
+ * emit-rtl.c (init_emit_once): Initialize dconst2.
+ * tree.c (real_twop): New function.
+ * cse.c (simplify_unary_operation): Fold FLOAT, FLOAT_EXTEND, and
+ FLOAT_TRUNCATE.
+ (simplify_binary_operation): Convert x*2 to x+x.
+ (cse_insn): Handle case where constant equivalent is in table.
+ Fix minor bug with merging src_related_elt.
+ * fold-const.c (fold): If commutative operation, move a constant
+ first operand to the second operand.
+ Remove tests of constants as first operand for commutative operations.
+ Convert x*2 to x+x.
+
+Fri Feb 8 03:07:34 1991 Ken Raeburn (raeburn at watch.com)
+
+ * cplus-ptree.c (print_lang_decl): Corrected argument list. Print
+ address of template info for TEMPLATE_DECL nodes.
+
+ * cplus-decl.c (set_current_level_tags_transparency): New
+ function, for altering tag-transparency of a context.
+
+ * cplus-parse.y (PRE_PARSED_METHOD_DEF): Was unused; now gone.
+ (template_instantiation): Handle $-references correctly. Generate
+ a class_head-like value for LC actions to operate on.
+ (maybe_base_class_list): New non-terminal: colon and base class
+ list, or empty.
+ (named_class_head): Use it.
+ (unnamed_class_head): Use '{', not LC.
+ (class_head): If template_instantiation found, use its value.
+ (template_arg): Apply groktypename to typename args.
+
+ * cplus-template.c (template_text_obstack): Deleted, just use
+ permanent_obstack instead.
+ (init_template): Deleted; callers changed.
+ (current_template_info): New variable: pointer to last-saved
+ template info record.
+ (end_template_decl): Use DECL_NAME, DECL_ARGUMENTS,
+ DECL_LANG_SPECIFIC, rather than TREE_OPERANDs. Save most of
+ template info here.
+ (reinit_parse_for_template): Only save text here, in
+ already-allocated template info record.
+ (mangle_class_name_for_template): New function.
+ (instantiate_template): Finally written.
+
+Thu Feb 7 22:06:56 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * tm-i386v4.h (ASM_OUTPUT_COMMON): Specify rounding in the output.
+ (ASM_OUTPUT_LOCAL): Use .local and .comm.
+
+ * tm-news.h (FUNCTION_PROLOGUE): Correct syntax of link insn.
+ (PRINT_OPERAND_ADDRESS): Use period, not colon, before index reg width.
+
+ * stmt.c (pushcase, pushcase_range):
+ Don't warn for code before first `case' if there is a label on it.
+
+Thu Feb 7 06:23:10 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * integrate.c (initialize_for_inline): Accept COPY argument.
+ Only copy parameter DECL_RTL if COPY non-zero; in that case,
+ also replace DECL_RTL with copy. All callers changed.
+ (copy_decl_rtls): New function.
+ (save_for_inline_copying): Use copy_decl_rtls to copy MEM DECL_RTLs
+ in the function.
+ Copy address of pseudos if they are a MEM.
+
+Wed Feb 6 19:19:25 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-typeck.c (build_binary_op_nodefault): No warn for RSHIFT by 0.
+
+Wed Feb 6 17:37:23 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * function.c (fixup_var_refs_1): Accept a location in rtx instead
+ of an rtx.
+ Unless -fforce-mem, if an insn is valid with MEM, leave it alone.
+ Rework ZERO_ and SIGN_EXTRACT cases to properly do adjustments
+ and generalize to support other than QImode MEMs.
+ (fixup_var_refs_insns): Change call to fixup_var_refs_1.
+
+Wed Feb 6 08:14:21 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md (cmp): Use reg_or_0_operand to avoid swapped compares.
+ (call patterns): Put use of r1 in a parallel construct.
+ (multiply and divide by a power of two): Now just multiply. The
+ new combiner will change divide by a power of two into multiply.
+ (movhi, movqi): Use zero-extend load.
+ * tm-m88k.h (BYTE_LOADS_ZERO_EXTEND): Use it.
+ (H constraint): Changed to mean one or two.
+ * out-m88k.c: Use the proper includes for non-USG systems.
+ * xm-m88k.h: Include tm.h at the end.
+
+Wed Feb 6 02:24:38 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-decl.c (pushtag): Don't try to nest classes from non-C++
+ language scopes.
+
+Wed Feb 6 01:33:16 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * cse.c (simplify_binary_operation): Don't change div into mult.
+
+Tue Feb 5 10:59:53 1991 Ken Raeburn (raeburn at watch.com)
+
+ * cplus-parse.y (template_instantiation): Supply base class list
+ and use guts of class declaration. Untested; will have to be
+ fixed up to deal with template context manipulations.
+
+Tue Feb 5 00:52:57 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-common.c (combine_strings): Finish fixing wide strings.
+
+ * reload1.c (possible_group_p): New subroutine.
+ (reload): Don't kill last group when looking for a non-group.
+
+ * expmed.c (expand_divmod): If emit cmp insn, force op0 into reg.
+
+ * objc-parse.y (init_lex, yylex): max_wide now measured in chars.
+ (yylex): Treat \r as whitespace if traditional.
+
+ * toplev.c (compile_file): Add missing arg for dbxout_finish.
+
+ * objc-actions.c (lang_finish): New dummy function.
+
+ * calls.c (expand_call): Recognize other names for setjmp-like fns.
+
+ * gcc.c (main): Use obstack_init, not gcc_obstack_init.
+
+ * varasm.c (assemble_zeros): New function.
+ All calls to ASM_OUTPUT_SKIP elsewhere now use this function.
+ Handle ASM_NO_SKIP_IN_TEXT.
+ * toplev.c (compile_file): Use assemble_zeros.
+ * final.c (end_final): Likewise.
+ * tm-3b1.h, tm-att386.h, tm-mot3300.h (ASM_NO_SKIP_IN_TEXT):
+ Define as 1.
+ * tm-3b1.h (ASM_OUTPUT_SKIP): Don't deal with outputting zeros.
+
+Mon Feb 4 20:37:33 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * m68k.md: Use %$ and %& where appropriate.
+ (special float_truncate pattern): New, for 68040.
+ (68881 DF multiply recognizers): Avoid fscale if 68040.
+ (68881 SF multiply recognizers): Avoid fsglmul if 68040.
+
+ * tm-next.h (SECTION_FUNCTION): Simplify; remove last arg.
+ (EXTRA_SECTION_FUNCTIONS): Rewrite to go with that change.
+
+Mon Feb 4 18:22:54 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c (link_cc0_isns): New function.
+ (fill_simple_delay_slots, fill_slots_from_thread): Call it.
+ (fill_slots_from_thread): Don't make REG_CC_STATUS notes.
+ (delete_scheduled_jump): Use REG_CC_SETTER instead of REG_CC_STATUS.
+ Correctly locate compare insn in CC0 case.
+ (steal_delay_list_from_target): Don't steal an insn that sets cc0;
+ we can't safely copy it.
+ (fill_slots_from_thread): Can't put insn that sets CC0 in delay slot
+ if we don't own its thread; this would otherwise require copying it.
+ (relax_delay_slots): Don't collapse jump to next insn if it has a
+ cc0-setting insn in a delay slot.
+
+ * reorg.c (update_block): Accept location to place USE marker; use if
+ INSN is in a delay slot.
+ (mark_target_live_regs): Handle the case where we deleted the start
+ of the basic block that was previously used for a target.
+ Ignore insns with INSN_FROM_TARGET_P.
+ (optimize_skip, try_merge_delay_insns, fill_simple_delay_slots):
+ Pass new argument to update_block.
+ (try_merge_delay_insns, redundant_insn_p): Clear INSN_FROM_TARGET_P
+ to show that this insn will be used in both paths of the branch.
+ (try_merge_delay_insns): Add calls to update_block for insns deleted
+ from delay slots.
+
+ * reorg.c (mostly_true_jump): If no jumps between target and end of
+ function, predict as false.
+ If comparison == 0, predict false; != 0, predict true.
+
+ * reorg.c (steal_delay_list_from_{target,fallthrough}):
+ Ignore redundant insn even if it can't be placed in our delay slot.
+ (fill_slots_from_thread): Likewise.
+ Ensure we don't call redundant_insn_p on any insns that conflict
+ with what we need and set.
+
+ * reorg.c (fill_eager_delay_slots): Pick up new value of JUMP_LABEL;
+ it may have been changed by first call to fill_slots_from_thread.
+
+ * rtl.h (REG_TAIL_CALL): Deleted; never documented or used.
+ (REG_CC_SETTER, REG_CC_USER): Replacements for REG_CC_STATUS.
+ * rtl.c (reg_note_name): New names.
+ * final.c (final_scan_insn): Replace REG_CC_STATUS with REG_CC_SETTER;
+ now only one insn.
+ * emit-rtl.c (next_cc0_user, prev_cc0_setter): Use REG_CC_SETTER and
+ REG_CC_USER.
+
+ * cplus-cadillac.c, cplus-class.c, cplus-decl.c, cplus-lex.c:
+ Replace obstack_init with gcc_obstack_init.
+ * cplus-search.c, flow.c, gcc.c, loop.c, reload1.c: Likewise.
+ * reorg.c, stmt.c: Likewise.
+
+ * reload1.c (eliminate_regs, case ASM_OPERANDS): Fix typo when making
+ new ASM_OPERANDS.
+
+ * recog.c: Now includes insn-flags.h and insn-codes.h.
+ (validate_replace_rtx_1): If replacing the source of a ZERO_ or
+ SIGN_EXTRACT with a MEM, try to put the MEM in the mode to be used for
+ the MEM.
+ * Makefile.in (recog.o): Depends on insn-flags.h and insn-codes.h.
+
+Mon Feb 4 17:39:36 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * c-typeck.c (digest_init): Error if init array with another array.
+
+Mon Feb 4 04:58:20 1991 Ken Raeburn (raeburn at watch.com)
+
+ * cplus-tree.def (TEMPLATE_DECL): New node type.
+ (TEMPLATE_PARM_IDX): New node type; like integer, with an extra
+ field.
+
+ * cplus-method.c (check_text_len): Fix up error message to be more
+ correct. Moved function before new_text_len so that the latter
+ can call it and inlining can work.
+ (new_text_len): Call check_text_len.
+
+ * cplus-method.c (build_overload_name): No longer static.
+
+ * cplus-class.c (unuse_fields): Now static.
+ (popclass): Use a temporary when building C_C_D.
+
+ * cplus-decl.c (lookup_tag): Don't complain about type mismatch if
+ the tag found is for a template.
+
+ * cplus-lex.c: New lookup tables, for new "template" keyword.
+ (reinit_lang_specific): Call init_template.
+ (init_lex): Ditto.
+ (file_from_saved_text): Renamed from input_from_saved_text.
+
+ * cplus-lex.c (identifier_type): New function; returns primary
+ type (IDENTIFIER, TYPENAME, PTYPENAME) indicated by token name. A
+ PTYPENAME is returned for (TYPE_DECL (TEMPLATE_DECL ...)) nodes.
+ (see_typename): Call it.
+
+ * cplus-lex.c (yylex): In handling identifiers, use subset of
+ TYPENAME code for PTYPENAME tokens.
+
+ * cplus-template.c: New file.
+ (begin_template_parm_list): Push new scope and switch to permanent
+ obstack.
+ (end_template_parm_list): Return parameter list as a tree vector.
+ (end_template_decl): Save away new TEMPLATE_DECL node.
+ (process_template_parm): Build up tree list of template
+ parameters.
+ (instantiate_template): For now, just complain.
+ (init_template): Set up template obstack.
+ (reinit_parse_for_template): Gobble up class definition text and
+ save it away.
+
+ * cplus-parse.y (template_header, template_parm_list): Call above
+ routines.
+ (datadef): Put template declarations here, instead of in
+ class_head.
+ (named_class_head_sans_basetype, named_class_head,
+ unnamed_class_head): Break up old class_head derivations.
+ (class_head): Now any of the above, plus template types with or
+ without instantiation.
+ (template_type): Call instantiate_template.
+ (template_arg_list): Build up list of args.
+
+ * cplus-tree.h (lang_type): Add TEMPLATE field. Also add macro
+ TYPE_TEMPLATE.
+
+Sun Feb 3 21:16:36 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * tm-m68k.h (PRINT_OPERAND): Handle `&' and `$'.
+ (PRINT_OPERAND_PUNCT_VALID): They are valid.
+
+ * out-next.c (handle_pragma): Unread the newline.
+
+ * toplev.c (main): Warn if meaningless optimizations are requested.
+ Don't enable options by default that would get warnings.
+
+ * m68k.md (extend QI to HI): Typo in clr insn.
+
+ * c-common.c (combine_strings): Decrement LEN properly when copying.
+ * c-parse.y (init_lex, yylex): max_wide now measured in chars.
+
+ * tree.c (gcc_obstack_init): Fix typo in forward decl.
+
+Sat Feb 2 09:24:56 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-decl.c (poplevel): Change DECL_CONTEXT of decls only of
+ their context is CURRENT_FUNCTION_DECL.
+
+Fri Feb 1 13:46:07 1991 Richard Stallman (rms at mole.ai.mit.edu)
+
+ * print-tree.c (print_node): Don't print chain for `c' and `x' nodes.
+
+ * loop.c (record_excess_regs): Moved here.
+
+See file ChangeLog.2.
diff --git a/gcc/ChangeLog.4 b/gcc/ChangeLog.4
new file mode 100644
index 00000000000..af668a3be89
--- /dev/null
+++ b/gcc/ChangeLog.4
@@ -0,0 +1,10783 @@
+Mon Jan 13 19:12:18 1992 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * unroll.c (find_splittable_givs): When completely unrolling loop,
+ use biv initial value stored in splittable_regs instead of
+ bl->initial_value, since the later may not be safe.
+
+ * sched.c (schedule_block): When calculating whether a register
+ crosses a call, must do this after registers are killed and before
+ new registers are made live.
+
+ * x-rs6000: Define INSTALL as /usr/ucb/install -c. /etc/install
+ (the SYS V version) does not handle -c option as Makefile.in
+ intends it.
+
+Mon Jan 13 11:21:24 1992 Michael Meissner (meissner at osf.org)
+
+ * mips-tfile (parse_stabs_common): Don't relocate N_LBRAC and
+ N_RBRAC stabs for compatibility with other stabs implementations.
+
+Mon Jan 13 07:41:32 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Don't set TREE_PRIVATE here.
+ TREE_PRIVATE is only for visibility.
+ (start_function): Don't test TREE_PRIVATE here. #pragma
+ interface/implementation should properly handle the case of static
+ (i.e. non-public) defns in implementation section now.
+
+Mon Jan 13 07:31:38 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rs6000.c (output_ascii): The AIX assembler silently truncates
+ strings longer than 666 characters, so break them up well before that.
+
+Mon Jan 13 00:26:47 1992 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-decl.c (pushdecl): Warn about shadowing at top level any symbol
+ that was declared among the function parms. But don't warn for
+ parms in a nested function.
+ * tree.c (chain_member): New function.
+
+ * sparc.c (output_return): Handle structure value in all the cases.
+
+ * toplev.c (main): -gstabs+ means use stabs with gdb extensions.
+
+ * fixincludes: Insert #undef NULL before #define NULL.
+
+ * gvarargs.h (va_list): Check some macros to avoid redefinition.
+
+ * tree.h (DECL_PACKED): New macro.
+ * c-common.c (decl_attribute): Handle `packed'.
+ * stor-layout.c (layout_record): Handle DECL_PACKED.
+ * c-parse.y (attrib): Accept `packed' with no arg.
+
+ * c-decl.c (shadow_tag): For useless keyword, just warn.
+ (duplicate_decls): Don't preserve volatile bit from old decl
+ if that is just a default declaration for abort, exit, etc.
+
+ * cccp.c (do_assert, do_unassert, check_assertion):
+ No pedantic warnings in system header files.
+
+ * ultrix.h (SIZE_TYPE, PTRDIFF_TYPE, WCHAR_TYPE): Defined.
+ (WCHAR_TYPE_SIZE): Defined.
+
+ * i386.h (HI_REGISTER_NAMES): Add a name for dummy reg 16.
+
+ * dbxout.c (flag_minimal_debug): Make it static.
+
+Sun Jan 12 18:10:46 1992 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-lex.c (check_newline): Check #line for `3' meaning system header.
+ * cccp.c (output_line_command): Output `3' if system header.
+ * c-tree.h (system_header_p): Declare it.
+ (ridpointers): Declaration deleted.
+
+ * dwarfout.c (fundemental_type_code): Treat OFFSET_TYPE like integer.
+ (type_is_fundamental, output_type): Likewise.
+
+ * optabs.c (expand_float): Abort if FROM has VOIDmode.
+ * expr.c (expand_expr, FLOAT_EXPR case): Don't pass a VOIDmode.
+
+Sun Jan 12 16:11:40 1992 Michael Meissner (meissner at osf.org)
+
+ * mips.h (ASM_OUTPUT_SPACE): If assembler is gas, don't use the
+ .space directive, since the table PREDICATE_CODES generates tickles
+ a bug.
+
+Sun Jan 12 15:59:41 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expmed.c: Include real.h.
+ (make_tree): Properly handle CONST_INT and handle many more rtl codes.
+ (expand_mult_add): Don't do folding here; just call make_tree and fold.
+ * Makefile.in (expmed.o): Includes real.h.
+
+Sun Jan 12 12:26:20 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl.c (store_parm_decls): Finish change started 11 Jan 1992.
+
+ * cp-decl.c (pushtag): Don't set CLASSTYPE_TAGS after
+ CURRENT_CLASS_TYPE has been defined.
+
+ * cp-lex.c (check_newline): Set INTERFACE_UNKNOWN if we see a
+ #pragma implementation or if it's the toplevel file.
+
+Sat Jan 11 22:04:34 1992 Michael Meissner (meissner at osf.org)
+
+ * mips.md (fix_truncsfsi2_opt): Delete, since the optimizer will
+ strip the clobbers when substituting a register for a cs'ed value,
+ unlike GCC 1.
+ (fix_truncdfsi2_opt): Likewise.
+ (long long shifts): Fix various typos.
+
+Sat Jan 11 15:26:24 1992 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * expr.h (GEN_FCN): Alternate definition if FUNCTION_CONVERSION_BUG.
+ * xm-romp.h (FUNCTION_CONVERSION_BUG): Define it.
+
+ * i386.md (cmpstrsi recognizers): Change back to repz.
+
+Sat Jan 11 11:18:32 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl.c (store_parm_decls): Don't put non-PARM_DECL nodes in the
+ list that will become DECL_ARGUMENTS.
+
+ * cp-decl2.c (grokfield): Convert () initialization to =
+ initialization in FIELD context.
+ * cp-decl.c (parmlist_is_exprlist): Now non-static.
+
+ * cp-decl.c (grokdeclarator): Don't let static class members be
+ declared `static' at top-level.
+
+ * cp-decl.c (pushdecl_class_level): Don't use DECL_ASSEMBLER_NAME.
+
+ * cp-decl.c (grokdeclarator): Don't let language linkage interfere
+ with declarator grokking--the two are independent.
+
+ * cp-call.c (compute_conversion_costs): Look for constructor or type
+ conversions regardless of whether we have CONTRAVARIANCE_HARSHNESS
+ or not. Also, `#if 0' some dead code.
+
+ * cp-method.c (report_type_mismatch): Fix bugs in formatting error
+ messages.
+
+ * cp-decl.c (grokvardecl): Verify that when static class members are
+ declared at toplevel, the types match their initial declaration.
+
+Sat Jan 11 08:41:24 1992 Fred Fish (fnf at fishpond)
+
+ * config/m68kv4.h (NO_DOLLAR_IN_LABEL): Undefine so that the
+ default for m68k/SVR4 systems is to use '$', which is more
+ widely supported.
+
+Sat Jan 11 10:56:10 1992 Jeffrey A. Law (law at wombat.gnu.ai.mit.edu)
+
+ * Finish PIC implementation on the 68k
+ * output.h (flag_pic): Declare here so that insn-*.c can see it.
+
+ * reload1.c (reload): When compiling PIC ignore REG_EQUIV notes
+ which are CONSTANT_P, but are not LEGITIMATE_PIC_OPERAND_P.
+
+ * m68k.md (call, call_value): Make these into define_expands. If
+ compiling PIC code, then load the address of the function into a
+ register so that we make indirect calls.
+ (Non-PIC call, call_value): New define_insns. These are
+ standard call insns.
+ (PIC call, call_value): New define_insns which output PIC calls.
+ (movsi): Make this into a define_expand. Legitimize PIC addresses
+ if necessary. Old movsi code is now an unnamed define_insn pattern.
+
+ * m68k.h (GO_IF_LEGITIMATE_ADDRESS case INDIRECTABLE_1_ADDRESS_P):
+ Use LEGITIMATE_PIC_OPERAND_P to reject SYMBOL_REFS and LABEL_REFS
+ without PIC relocation when compiling PIC code.
+
+ * m68k.c (legitimize_pic_address): New function. Given an address
+ return that address as "legitimized" PIC code.
+ (print_operand_address): When generating PIC code, handle PIC
+ relocated label_refs just like a PIC relocated symbol_ref.
+ (print_operand_address): If -fpic then add ":w" to displacement in
+ PIC relocated references.
+ (print_operand_address): If -fPIC then add ":l" to displacement in
+ PIC relocated references.
+
+Fri Jan 10 18:03:08 1992 Ken Raeburn (Raeburn@Cygnus.COM)
+
+ * cp-init.c (build_new): Don't allocate header for arrays if no
+ destructor is needed. Also fix broken calculation of array size.
+ (build_delete): Don't skip array header if no destructor is needed.
+
+Fri Jan 10 14:54:19 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-cvt.c cp-decl2.c cp-expr.c cp-gc.c cp-init.c cp-lex.c cp-parse.y
+ cp-pt.c cp-search.c cp-tree.c: Clean up problems found with -Wreturn
+ (from rfg).
+
+ * cp-typeck.c cp-tree.c cp-cvt.c cp-lex.c cp-call.c cp-class.c:
+ Add (unsigned) casts to all places where native SVr4 compilers
+ expect to see unsigned values.
+
+Fri Jan 10 08:34:36 1992 Fred Fish (fnf at sunfish)
+
+ * m68ksgs.h (REGISTER_NAMES): Provide separate versions for
+ SUPPORT_SUN_FPA defined and not defined.
+
+Fri Jan 10 22:36:41 1992 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * Improve I/O performance of gcc on VMS.
+ * cccp.c (VMS_open, VMS_fopen, VMS_freopen): New functions.
+ (open, fopen, freopen): Define as macros on VMS.
+ * toplev.c (VMS_fopen): New function.
+ (fopen): Define as macro on VMS.
+
+Fri Jan 10 22:00:50 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * genrecog.c (merge_trees): If two trees both have actions, but
+ one adds clobbers and one doesn't, ignore the one that does.
+
+ * genemit.c (gen_split): Say that we are giving the definition number
+ in our error message.
+ * genrecog.c (fatal): Likewise.
+ * genoutput.c (scan_operands): Likewise.
+
+ * caller-save.c: Include expr.h (for gen_move_insn).
+ (regno_save_elim): Deleted.
+ (init_save_areas): Don't initialize it.
+ (setup_save_areas): Don't set it.
+ (save_call_clobbered_regs, restore_referenced_regs): Accept mode,
+ not spill register.
+ (insert_save_restore): Don't do our own register elimination and
+ reloading; instead set the insns we make to the desired mode.
+ * reload1.c (struct elim_table): New field MAX_OFFSET.
+ (reload): Always call init_save_areas.
+ Initialize max_offset each pass.
+ At each CALL_INSN, create a need for a spill register that will
+ be used by caller-save.
+ Pass mode for insns to save_call_clobbered_regs instead of a
+ spill reg number.
+ Call reload_as_needed if we will have to reload the caller-save
+ insns, even if nothing else needs reload (unlikely).
+ (eliminate_regs_in_insn): Record maximum offset value.
+ * Makefile.in (caller-save.o): Includes expr.h.
+
+ * reload.c (find_reloads): CALL_INSNs can't have output reloads.
+ * reload1.c (emit_reload_insns): Put any reloads for a CALL_INSN
+ in front of any immediately-preceeding USE insns.
+
+ * flow.c (life_analysis): Mark all global regs as live at the end of
+ the function.
+ (propagate_block): Each call makes all global registers live.
+ (mark_used_regs): A RETURN may use the stack pointer and uses all
+ global regs.
+ * cse.c (cse_insn): A CALL_INSN clobbers any global regs.
+ * reorg.c (mark_referenced_resources): Calls used global regs.
+ (mark_set_resources): CALL_INSNs clobber global regs.
+
+Fri Jan 10 17:24:06 1992 Michael Meissner (meissner at osf.org)
+
+ * collect2.c (whole file): Major rewrite to merge in collect3
+ functionality which uses GCC to build up the constructor and
+ destructor tables, instead of using the assembler. Also improve
+ the support for cross compilers to find the tools. The old assembly
+ language support has been removed.
+
+ * mips-tfile.c (CODE_MASK): Move to mips.h to use with mips-tdump
+ also.
+ (MIPS_IS_STAB): Likewise.
+ (MIPS_MARK_STAB): Likewise.
+ (MIPS_UNMARK_STAB): Likewise.
+
+ * mips-tdump.c (various): Changes by Per Bothner to print
+ encapsulated stabs, and to shorten the output.
+
+ * mips.h (MIPS_VERSION): Set Meissner version # to 7.
+ (cmp2_op): Make cmp2_op a real function instead of just a
+ macro to cmp_op.
+ (OPTIMIZATION_OPTIONS): -O now sets flag_caller_saves and
+ flag_schedule_insns_after_reload.
+ (CC1_SPEC): Fix typo preventing -mgpopt from being set if
+ optimization.
+ (PREDICATE_CODES): Define.
+ (USE_COLLECT, EXTENDED_COFF, NO_UNDERSCORES): Delete, not needed in
+ GCC 2.00.
+ (ASM_INT_OP, ASM_SHORT_OP, ASM_CHAR_OP): Likewise.
+ (CODE_MASK): Move from mips-tfile.
+ (MIPS_IS_STAB): Likewise.
+ (MIPS_MARK_STAB): Likewise.
+ (MIPS_UNMARK_STAB): Likewise.
+
+ * mips.c (cmp2_op): Make this a real function, instead of a macro
+ pointing to cmp_op.
+ (volatile_buffer): New static variable to support .set volatile.
+ (mips_move_1word): Do .set volatile/.set novolatile around volatile
+ memory references.
+ (mips_move_2words): Likewise.
+
+ * mips.md (sne define_split): Fix so that it generates a gtu 0.
+ (all set cc define_splits): Remove reload_completed tests.
+ (all set cc define_insns): Don't allow 0 as operand 1.
+
+Fri Jan 10 16:40:45 1992 Jeffrey A. Law (law at wombat.gnu.ai.mit.edu)
+
+ * m68k.md (addsi3, addhi3, subsi3, stack adjustment peepholes):
+ Perform small (8 < N <= 16) constant additions and subractions to
+ address registers with two addqw (or subqw) instructions.
+
+Fri Jan 10 06:54:22 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * calls.c (expand_call): Check for _longjmp as well as longjmp;
+ clean up code a bit and merge with check for setjmp-like names.
+ Emit a BARRIER if this is a call to longjmp in addition to
+ volatile calls.
+
+Fri Jan 10 02:25:54 1992 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (digest_init): Properly return error_mark_node
+ after invalid element in array initializer.
+
+ * gcc.c (pexecute): Use `fork' in error message if don't have vfork.
+
+ * Makefile.in: Add .NOEXPORT.
+
+Thu Jan 9 13:36:25 1992 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * expr.c (expand_expr): Handle OFFSET_REF.
+
+ * cse.c (simplify_binary_operation): Never use associative law for
+ floating arithmetic.
+
+ * fixinc.svr4: Renamed INCLUDES to INPUT.
+
+ * i386.md (cmpstrsi recognizers): Output repe, not repz.
+
+Thu Jan 9 18:02:34 1992 Dennis P. Glatting (dennisg at tti)
+
+ * tree.h (CONSTRUCTOR_NAME_FORMAT): Changed name format. Old format
+ was recognized as destructors not constructors.
+ * objc-actions.c (build_module_descriptor):
+ Null-terminate global_object_name.
+
+Thu Jan 9 10:35:58 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * sdbout.c (sdbout_syms): Don't attempt to output a LABEL_DECL.
+
+Thu Jan 9 08:17:44 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (merge_component_references): Treat constants as
+ unsigned, so we don't get extra sign bits where we don't want them.
+
+Wed Jan 8 19:12:59 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * reload.c (combine_reloads): Don't use a fixed_reg as an reload
+ reg, even if it dies.
+
+ * loop.c (record_giv): Fix typo extracting insn_uid.
+
+Wed Jan 8 15:41:10 1992 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * cpp.texi, gcc.texi: Files renamed.
+ * invoke.texi, extend.texi, md.texi, rtl.texi, tm.texi: New subfiles.
+ * Makefile.in: Corresponding changes.
+
+ * fixincludes: Renamed INCLUDES to INPUT.
+
+ * m68k.c (notice_update_cc, print_operand): Fix typos.
+
+ * cp-decl.c (expand_static_init): Save and restore current obstacks.
+
+ * c-decl.c (poplevel): Put labels in BLOCK_VARS of top-level block.
+
+Wed Jan 8 12:53:48 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl.c (expand_static_init): Switch to PERMANENT_OBSTACK during
+ expansion.
+
+Wed Jan 8 07:45:58 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88kv3.h (STARTFILE_SPEC): SVR3 has *crt0.o files.
+
+ * configure (m88k-*sysv{3,4}): The files are named m88kv{3,4}.
+
+Wed Jan 8 06:01:44 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * romp.md (mftbi): Allow memory in the contraints since there can't
+ be an input reload on an insn that uses cc0.
+
+ * cse.c (FIXED_BASE_PLUS_P): Include virtual_incoming_args_rtx.
+ (NONZERO_BASE_PLUS_P): New macro.
+ (find_comparison, simplify_relational_operation_args): Use
+ NONZERO_BASE_PLUS_P instead of FIXED_BASE_PLUS_P when appropriate.
+
+ * m68k.md (peepholes): Don't change around stack adjusts and pushes
+ when we are pushing something whose address involves sp.
+
+ * cse.c (simplify_unary_operation): Check for operations on
+ integers by looking at mode of OP, not output mode, to avoid
+ confusion with FIX operations whose result is an integer.
+
+ * rtl.h ([df]const[012]_rtx): Deleted.
+ (const_tiny_rtx): New declaration.
+ (CONST0_RTX): Use const_tiny_rtx instead of {d,f,}const0_rtx.
+ (CONST1_RTX, CONST2_RTX): New macros.
+ * emit-rtl.c ([df]const[012]_rtx): Deleted.
+ (const_tiny_rtx): New definition.
+ (init_emit_once): Initialize const_tiny_rtx instead of old vars.
+ * cse.c (simpify_binary_operation): Use CONST[01]_RTX.
+ * varasm.c (immed_real_const_1): Likewise.
+ * combine.c (subst): Likewise.
+ * reg-stack.c (record_reg_life, stack_reg_life_analysis): Likewise.
+ * convex.md, i860.md, m88k.c, spur.md, vax.h, ns32k.md: Likewise.
+
+Tue Jan 7 22:11:17 1992 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * x-i386isc (ENQUIRE_LDFLAGS): New defn: add -posix.
+
+ * protoize.c (_POSIX_SOURCE): Define only if POSIX.
+
+ * m68k.h (FPA_REG_P): Always define this somehow.
+
+ * c-decl.c (c_decode_option): Handle -Wchar-subscripts.
+ * c-typeck.c (build_array_ref): Do the real work.
+
+Tue Jan 7 21:15:54 1992 Michael Meissner (meissner at osf.org)
+
+ * mips.md (branch_zero_false): Use correct mode (CC_0) on
+ match_operator.
+
+Tue Jan 7 14:24:45 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * reg-stack.c (replace_reg): get mode class from a mode, not a reg.
+
+Tue Jan 7 14:16:18 1992 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * reg-stack.c (emit_pop_insn): Fix typo FPmode_reg.
+
+ * protoize.c (longjmp): Don't declare it.
+
+Tue Jan 7 09:47:47 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-lex.c (real_yylex): From John Hassey, allocate space for the
+ terminating null on wide character literals.
+
+Tue Jan 7 07:41:42 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88kv3.h (LIB_SPEC): Add -lg.
+
+Tue Jan 7 06:29:30 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * stor-layout.c (layout_type): Don't over-align a structure
+ when strict alignment is not required.
+
+ * rs6000.h (CALL_USED_REGISTERS): r31 should not be marked call-used.
+
+ * rs6000.md (add-and-compare): Fix duplicate operand number.
+
+ * a29k.md (inbyte, inhw): Correct duplicate operand number.
+
+ * fold-const.c (fold, case MULT_EXPR): Simplify (a * (1 << b)).
+ * combine.c (subst, case MULT): Likewise.
+ (simplify_shift_const, shift cases): Similarly, associate A << B << C.
+
+ * genoutput.c (seen): New array.
+ (scan_operands): Give error if an operand number was specified
+ twice. Include pattern number in error message.
+ (gen_insn, gen_expand, gen_split, gen_peephole): Initialize `seen'.
+ (gen_split, gen_peephole): Add initializations for arrays that
+ are copied.
+
+ * optabs.c (expand_unop): Complete recent change; one TARGET was
+ not changed to TEMP.
+
+ * expmed.c (expand_mult): Always try multiplication by value and
+ by negated value. Fix bug where we don't include the cost of the negate
+ when seeing which way is better. Write proper value in REG_EQUAL
+ note.
+
+ * optabs.c (extendtab): Replacement for {zero,sign}_extend_codes.
+ (can_extend_p): Use new table and return type is not enum insn_code.
+ (gen_extend_insn): Deleted; not used.
+ (init_extends): Make like init_flottab: use new table and initialize
+ unused entries to CODE_FOR_nothing, not zero.
+ * expr.c (convert_move): can_extend_p fails if it returns
+ CODE_FOR_nothing, not zero.
+ * expr.h (can_extend_p): Add definition.
+
+ * expr.h: Add "extern" to function definitions.
+
+Mon Jan 6 10:12:34 1992 Leonard Norrgard (vinsci at nic.funet.fi)
+
+ * m68k.c (SUPPORT_SUN_FPA): Conditionalize references to the
+ optional Sun 3 Floating Point Accelerator with SUPPORT_SUN_FPA.
+ * m68k.h (SUPPORT_SUN_FPA): Likewise.
+
+ * m68k.c (notice_update_cc): New function.
+ * m68k.h (NOTICE_UPDATE_CC): Just call notice_update_cc.
+
+ * sun3.h (SUPPORT_SUN_FPA): New define.
+
+Mon Jan 6 16:42:43 1992 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * varasm.c (assemble_global, assemble_label): New functions.
+ * objc-actions.c (finish_objc): Call them to define and globalize.
+ Use output_constant to reference a class.
+
+ * Makefile.in (install-limits-h): New target.
+ (install-headers): Depend on install-limits-h.
+ (USER_H): Deleted LIMITS_H.
+ (INSTALLED_H): Added limits.h.
+ (mostlyclean): Remove tmp-limits.h.
+ * limitx.h: New file.
+
+ * x-isc: File deleted.
+
+ * objc-actions.c (build_module_descriptor): Init global_object_name.
+
+ * Makefile.in (collect2): Depend on version.o.
+
+ * protoize.c (PATH_MAX): Definition deleted. Just test it
+ to see if param.h should be included.
+
+ * cse.c (simplify_binary_operation, case MULT): Make a copy
+ of the operand when converting 2.0 * X to X+X.
+
+ * reload.c (find_reloads): Refine when we set force_reload and
+ better document the cases.
+
+Mon Jan 6 08:22:19 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.c (output_float_compare): Output only single-pop compare
+ if both operands are the FP top of stack reg.
+ When comparing FP top of stack with itself, print `%st(0)' as the
+ reg name, not `%st'.
+
+Mon Jan 6 12:01:51 1992 Tiggr (rcpieter at mole.gnu.ai.mit.edu)
+
+ * arm.md (mulsi3): Fixed contraints.
+
+Mon Jan 6 08:21:46 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k-move.sh: Renamed from m88k-movstr.sh. Rename the generated
+ files move*.asm from movstr*.asm to be SVR3-legit.
+ * t-m88k, t-m88kluna, t-m88kv4: Use the new names.
+
+ * c-aux-info.c, dbxout.c: Include errno.h as in protoize.c.
+
+ * Makefile.in (BISONFLAGS): Don't use -v since *.output is big.
+ (cp-parse.c): Do use -d to create cp-parse.h.
+ (cp-parse.o): Don't define PARSE_OUTPUT.
+ * x-mips, x-m88kdgux (BISONFLAGS): No -v.
+
+Mon Jan 6 07:54:55 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * genpeep.c (match_rtx): Loop over vectors (e.g., PARALLEL) in the
+ natural order so we see an operand before we see a MATCH_DUP referring
+ to it.
+
+ * genrecog.c (write_tree_1): Simplify code that writes braces and
+ avoid writing them unnecessarily.
+ Don't write dead code when last test was unconditional.
+
+ * optabs.c (expand_binop, expand_twoval_binop, expand_unop):
+ Standardize loop for wider mode.
+ (emit_cmp_insn, emit_float_lib_cmp): Likewise.
+ (expand_binop): Correct how extensions are done: use convert_to_mode,
+ don't use SUBREG for non-integer operations, and remove test
+ involving HOST_BITS_PER_INT.
+ (expand_unop): Similar changes; make code closer to expand_binop.
+ Handle failure of recursive call when expanding. Fix incorrect use
+ of TEMP when widening. Use SUBREG for NEG and NOT.
+
+ * reload.c (find_reloads_address_part): New function.
+ (find_reloads_address): Call it instead of push_reload when we are
+ reloading a PLUS or a constant.
+
+Sun Jan 5 18:34:15 1992 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * make-cc1.com: Change file names from cp-tab.* to cp-parse.*.
+
+Sun Jan 5 18:06:11 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Correctly grok REFERENCE_TYPE
+ parameters when TYPE_REFERENCE_TO is automagically converted.
+
+Sun Jan 5 05:19:19 1992 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * tree.h (CONSTRUCTOR_NAME_FORMAT): New macro.
+ * objc-actions.c (build_module_descriptor): Make constructor name
+ from name of file or of a global that it defines.
+ Return constructor name.
+ (finish_objc): Use name returned as name to call.
+
+ * protoize.c (GUESSPATHLEN): New macro.
+ (main): Use that for initial buffer size for getcwd.
+ * dbxout.c (getwd, getcwd, GUESSPATHLEN): Define as in protoize.c.
+ (dbxout_init): Call getcwd in loop, as in protoize.c.
+ * c-aux-info.c (getwd, getcwd, GUESSPATHLEN): Define as in protoize.c.
+ (gen_aux_info_record): Call getcwd in loop.
+ * i386v.h, i386vgas.h (MAXPATHLEN): Don't define.
+
+ * svr3.h (LINK_SPEC): Don't pass -K.
+
+ * reload.c (find_reloads): Do record in non_reloaded_operands if no -O.
+
+ * m68k.c (output_function_prologue, output_function_epilogue):
+ Add braces and adjust conditionals to fix balance and indentation.
+
+ * objc-actions.c (build_module_descriptor): Mark __objc_file_init used.
+
+Sat Jan 4 13:27:40 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * protoize.c: unprotoize getcwd & fork declarations.
+ (edit_fn_declaration): use "VOLATILE", not "volatile".
+
+Sat Jan 4 20:19:41 1992 Michael Meissner (meissner at osf.org)
+
+ * mips.h (set_volatile): Add new global variable reference.
+
+ * mips.c (set_volatile): New global variable to keep track of the
+ number of .set volatile's done. At present, no code actually turns
+ this on.
+ (mips_move_1word): Use %. instead of putting const0_rtx into an
+ unused operator and using %z to get to $0, which is hardwired to 0.
+ (mips_move_2words): Likewise.
+ (override_options): Allow %., %{, and %} punctuation.
+ (print_operands): Add support for %. to get the current name of
+ register 0, %{ to turn on .set volatile, and %} to turn on .set
+ novolatile.
+ (function_epilogue): Give an error if .set volatile was left on in
+ the epilogue.
+ (mips_asm_file_start): Don't emit .set nobopt unless we are filling
+ branch delay slots.
+
+ * mips.md (set reg on comparison define_splits): Don't allow the
+ scheduler to split any set of a comparision insns, to work around a
+ bug in sched.c.
+
+Sat Jan 4 23:01:41 1992 Jeffrey A Law (law at planet.super.org)
+
+ * m68k.c (output_function_prolog): Decrement (instead of
+ increment) num_saved_regs when a frame pointer is needed.
+ (the link/unlk will restore the frame pointer register)
+
+Sat Jan 4 11:11:24 1992 Dennis P. Glatting (dennisg at tti)
+
+ * next.h (WCHAR_TYPE, WCHAR_TYPE_SIZE): #undef before defining.
+
+Sat Jan 4 07:40:25 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (convert_to_mode): Correctly zero-extend a constant into
+ a mode whose size is twice the host int size.
+
+ * machmode.h (enum mode_class): Add MAX_MODE_CLASS.
+ (GET_CLASS_NARROWEST_MODE): New macro.
+ (byte_mode, word_mode): Add declarations.
+ * caller-save.c (choose_hard_reg_mode): Use GET_CLASS_NARROWEST_MODE.
+ * combine.c (make_extraction): Don't use explicit QImode and SImode.
+ * cse.c (simplify_unary_operation): Integer CONST_DOUBLEs have
+ VOIDmode, not DImode.
+ (simplify_binary_operation): Remove explicit DFmode reference.
+ * expmed.c (init_expmed): Don't make our own copy of word_mode.
+ (store_bit_field, extract_bit_field): Remove explicit
+ QImode reference; don't recompute word_mode.
+ (store_fixed_bit_field, {store,extract}_split_bit_field): Don't
+ recompute word_mode.
+ (emit_store_flag): Likewise.
+ (extract_fixed_bit_field): Replace explicit mode references with a
+ loop on modes; don't recompute word_mode.
+ * expr.c (convert_mode, move_block_{to,from}_reg, use_regs): Don't
+ recompute word_mode.
+ (emit_push_insn, do_jump_by_parts*): Likewise.
+ (push_block): Remove explicit QImode reference.
+ (get_inner_reference): Use mode_for_size.
+ * emit-rtl.c (restore_reg_data): Make unused regs word_mode.
+ (operand_subword): Don't recompute word_mode.
+ * fold-const.c (optimize_bit_field_compare): Likewise.
+ (merge_component_references): Likewise.
+ * flow.c (mark_set_1, mark_used_regs): Likewise.
+ * loop.c (combine_movables): Use GET_CLASS_NARROWEST_MODE.
+ * optabs.c (expand_binop): Replace SImode references in multi-word
+ multiply with the mode used for each subpart.
+ (expand_binop, expand_unop): Don't recompute word_mode.
+ * reg-stack.c (reg_to_stack): Use GET_CLASS_NARROWEST_MODE.
+ * reload.c (find_equiv_reg): Check for MODE_FLOAT, not SFmode/ DFmode.
+ * rtl.c (class_narrowest_mode, byte_mode, word_mode): Define.
+ (init_rtl): Initialize them.
+ * sched.c (attach_deaths): Don't recompute word_mode.
+ * stor-layout.c (mode_for_size): Use GET_CLASS_NARROWEST_MODE.
+ (get_best_mode): Likewise.
+ Don't recompute word_mode.
+ * unroll.c (unroll_loop): Replace default of SImode with word_mode.
+
+ * calls.c (calls_alloca): Don't recurse on BLOCK_SUPERCONTEXT.
+
+Sat Jan 4 03:42:09 1992 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * protoize.c (pointer_type): Use char * if non-ANSI.
+ (const_pointer_type): Likewise.
+ (malloc, realloc): Declare to return pointer_type.
+ (setjmp): Don't declare, to avoid trouble with macro defns.
+ (const): If not ANSI, define as empty macro.
+
+Sat Jan 4 00:59:53 1992 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * sparc.c (legitimize_pic_address): When converting a symbol_ref,
+ use an extra temp reg when -fPIC, and add a REG_EQUAL note to the
+ insn referencing the global offset table. This allows loop to
+ optimize these PIC sequences.
+
+Fri Jan 3 20:29:57 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (return): Always output return insns.
+
+ * i386.h (FUNCTION_PROLOGUE): If the last nonnote insn in a function
+ is a BARRIER, don't output a function epilogue.
+
+Fri Jan 3 12:43:09 1992 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * t-decrose, t-decstatn, t-encrose, t-i386rose, t-mips (ALL):
+ Use libgcc.a, not libgcc.
+
+ * protoize.c (STRINGIFY): Provide non-ANSI alternative definition.
+
+ * c-decl.c (get_parm_info): Keep non-parms in the parm list.
+
+ * stmt.c (cost_table): Now short.
+ (estimate_case_costs): Handle that.
+
+ * Makefile.in (float.h, *protoize.1, gcc.xtar.Z):
+ Make temp files, then rename.
+ (clean): Delete those temp files.
+
+ * Makefile.in (c-parse.c): Don't use -d, since cp-parse.output is big.
+
+Fri Jan 3 10:32:31 1992 Michael Tiemann (tiemann at mole.gnu.ai.mit.edu)
+
+ * Makefile.in (cp-parse.c): Add missing -o flag.
+
+Fri Jan 3 08:21:04 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reg-stack.c: Complete last change (renaming DFmode_reg).
+
+ * expmed.c (init_expmed): Pass dummy pointer to number of clobbers to
+ recog so it can let us see patterns that need added clobbers.
+
+Fri Jan 3 07:54:32 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * c-decl.c (implicitly_declare): Record whether this is an implicit
+ declaration before setting IDENTIFIER_IMPLICIT_DECL.
+
+Thu Jan 2 21:17:12 1992 Michael Meissner (meissner at osf.org)
+
+ * mips.c (compute_frame_size): Don't count FP registers twice.
+
+Thu Jan 2 14:59:55 1992 Michael Tiemann (tiemann at hal)
+
+ * cp-lex.h: Renamed from cp-parse.h. Now cp-parse.h is the file
+ created by bison from cp-parse.y.
+ * Makefile.in: reflect this naming change.
+
+Thu Jan 2 12:37:32 1992 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * objc-actions.c (build_obj_method_call): Typo in NEXT case.
+
+ * next.h (HAVE_ATEXIT): Defined.
+
+ * c-decl.c (duplicate_decls):
+ No error if override decl that has DECL_BUILT_IN_NONANSI.
+
+ * Makefile.in (c-parse.c): Don't use -o, since cp-parse.output is big.
+
+ * Makefile.in (protoize, PROTOIZE): Delee these 2 new targets;
+ `protoize' was redundant.
+
+ * c-typeck.c (build_function_call): If the fn is volatile,
+ make a pointer-to-volatile-function type pointer.
+ * calls.c (expand_call): Handle calls to such pointers as volatile.
+
+ * expmed.c (init_expmed): Pass all 3 args to `recog'.
+
+ * varasm.c (output_constant): For REAL_TYPE, mode_for_size arg is bits.
+
+ * sparc.md (storing SF into mem at symb addr): Fix typos.
+
+ * protoize.c (my_access, my_stat, my_execvp, my_link, my_unlink):
+ (my_open, my_chmod): Macros that run access, stat,... with casts.
+ Renamed from former POSIX-only macros and made unconditional.
+ All calls to these functions also renamed.
+
+ * m68k.h (LEGITIMATE_PIC_OPERAND_P): Undo change below,
+ thus making the behavior really change to accept all CONST_DOUBLE.
+
+ * libgcc1.c, libgcc2.c: Renamed from gnulib1.c, gnulib2.c.
+ * gcc.c (link_command_spec): Link with libgcc.a.
+ * Makefile.in (libgcc): Rename targets and variables from gnulib.
+ * *.h, t-*, x-*: Rename refs to those symbols and files.
+ * expr.c (LIBGCC_NEEDS_DOUBLE): Renamed from GNULIB_...
+
+ * m68k.c (symbolic_operand): Reject all CONST_DOUBLE.
+ * m68k.h (SELECT_RTX_SECTION): Use LEGITIMATE_PIC_OPERAND_P.
+ (LEGITIMATE_PIC_OPERAND_P): Reject the CONST_DOUBLEs
+ that symbolic_operand used to accept.
+
+Thu Jan 2 21:06:13 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * protoize.c (is_id_char,free_def_dec,check_aux_info):
+ Don't declare them `inline'.
+ (save_def_or_dec,munge_compile_params,find_extern_def,check_source,
+ scan_for_missed_items): Use alloca instead of variable length arrays.
+
+ * Makefile.in (protoize,unprotoize): Get $(LIBS) for alloca.
+
+Thu Jan 2 21:40:52 1992 Jeffrey A Law (law at b115.super.org)
+
+ * sparc.h (OPTIMIZATION_OPTIONS): Enable caller-saves for -O2
+ and higher optimization levels.
+
+Thu Jan 2 06:46:56 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * final.c (final_scan_insn): Compare debug_info_level with entries in
+ its enum, not with integers.
+
+ * reg-stack.c ({SF,DF}mode_reg): Deleted.
+ (FP_mode_reg): New array, indexed by register and by mode.
+ (reg_to_stack): Replace initialization of old vars with initialization
+ of FP_mode_reg.
+ (replace_reg): Use new array.
+
+ * romp.c, romp.h, romp.md: Rename symbolic_operand to
+ romp_symbolic_operand.
+
+ * emit-rtl.c (init_emit_once): Create virtual registers before the
+ structure value regsisters, since the latter might use the former.
+
+ * varasm.c (output_constant): Fix typo: missing arg to expand_expr.
+
+ * vax.md (call_pop, call_pop_value): Use correct register number for
+ stack pointer. Add new patterns for case of zero args.
+
+Thu Jan 2 08:12:59 1992 Fred Fish (fnf at sunfish)
+
+ * x-amix: Minor changes to some comments.
+ * x-amix (CCLIBFLAGS, GNULIB2_CFLAGS, XCFLAGS): Remove definitions.
+ * x-amix (manext): Add definition.
+
+Thu Jan 2 11:14:28 1991 Ken Raeburn (Raeburn@Cygnus.COM)
+
+ * fold-const.c (fold, case PLUS_EXPR): If association permits
+ reduction to var+0, convert var to the desired type before returning
+ it.
+
+Wed Jan 1 10:37:50 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * expr.c (convert_move): When GET_MODE_BITSIZE (TO_MODE) >
+ BITS_PER_WORD, check that it's also > GET_MODE_BITSIZE (FROM_MODE).
+
+ * expr.c (expand_expr): In CONSTRUCTOR case, preserve
+ MEM_IN_STRUCT_P when creating a new target when TARGET and EXP might
+ not be independent.
+
+Wed Jan 1 18:32:03 1992 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-parse.y (parmlist_1): Accept `PARMS; PARMS'.
+ (parmlist_or_identifiers_1): Likewise. Also use plain parmlist_2.
+ Delete the ([names] decls) syntax.
+ (defn_parms, defn_parmlist_2): Deleted.
+ * c-decl.c (get_parm_info): Put parm decls into original order.
+ Don't nreverse the original decls list.
+ (pushdecl, duplicate_decls): Avoid error for forward parm decl.
+ (clear_parm_order): New function.
+ (push_parm_decl): Record original order of parms.
+
+ * c-decl.c (struct binding_level): New slot subblocks_tag_transparent.
+ (pushlevel): Use that, not ->parm_flag.
+ (start_function): Set that slot.
+
+ * config.sub: Always distinguish between amix and sysv4.
+ Convert commodore to cbm and digital to dec.
+
+ * m68k.md (stack adjust then push SI): New peephole.
+
+ * m68k.h, fx80.h (WCHAR_TYPE): Use precisely "long int".
+ * sun3.h (WCHAR_TYPE, WCHAR_TYPE_SIZE): Undef before defining.
+
+ * cexp.y (yylex): Use LONG_TYPE_SIZE, not INT_TYPE_SIZE.
+ (LONG_TYPE_SIZE): Add default definition.
+
+ * objc-actions.c: Declare index and rindex.
+ (build_module_descriptor): Simplify last change.
+ Use a fixed name for the initialization function.
+ (init_objc): Don't do constructor here.
+ (finish_objc): Do it here, with proper name if not NEXT_OBJC_RUNTIME.
+
+ * protoize.c: Unprotoized.
+ (edit_file): Improve message in -n case.
+
+ * Makefile.in (LANGUAGES): Add proto.
+ (C, C++, OBJC, OBJECTIVE-C): Aliases for l.c. targets.
+ (PROTOIZE, protoize, PROTO): Aliases for proto.
+ (rest.encap): Delete dep `proto'.
+
+Wed Jan 1 15:07:41 1992 Michael Meissner (meissner at osf.org)
+
+ * mips.md (extend*): Use gen_lowpart to make the SUBREG, rather than
+ doing it wrong by hand. If not optimizing, make sign extends from
+ memory not force the operand into a register first and do two
+ shifts -- combine already does this when optimizing.
+ (copyright): Add 1992 to list of years the file was modified.
+
+Wed Jan 1 06:10:01 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload): When forcing an illegitimate constant into
+ memory, use mode of SET_DEST in case constant is VOIDmode.
+
+ * stmt.c (expand_end_case): Pass index type to emit_case_nodes instead
+ of unsigned flag.
+ (node_has_{low,high}_bound): Accept INDEX_TYPE as an argument and see
+ if the a node value is at the limit of values of the type.
+ (node_is_bounded): Accept INDEX_TYPE and pass to above functions;
+ always call them.
+ (emit_case_nodes): Accept INDEX_TYPE instead of UNSIGNEDP as arg;
+ pass index type to recursive calls and to calls to bound checking
+ functions.
+
+ * varasm.c (assemble_integer_zero): Deleted.
+ (assemble_integer, assemble_real): New functions.
+ (output_constant_pool, output_constant): Use new functions.
+ * final.c (end_final, profile_function): Likewise.
+
+ * calls.c (calls_alloca): Don't interpret operands that are RTL as if
+ they were trees; check args of nested CALL_EXPR for alloca calls.
+
+Wed Jan 1 16:51:30 1992 Fred Fish (fnf at fishpond)
+
+ * Makefile.in (manext): Include the '.' character.
+ (mandir): Don't use manext.
+ (install-man, uninstall): Change uses of manext.
+
+Wed Jan 1 21:31:01 1992 Ron Guilmette (rfg at ncd.com)
+
+ * i860.md (cmpeqsi, cmpltsi, cmpgtsi): Made control flow more obvious.
+ (cmpnesi, cmplesi, cmpgesi): New patterns.
+ (cmpgeusi, cmpleusi): Fixed bug in compares against zero.
+
+Tue Dec 31 11:16:37 EST 1991 Dennis P. Glatting (...!uunet!tti!dennisg)
+
+ * objc-actions.c (build_module_descriptor): Emit a constructor
+ function. Constructor function calls a ObjC run-time routine passing
+ a pointer to the module's module structure.
+ (init_objc): Call different constructor function if not Next.
+ (build_selector_translation_table): Don't give a selector global scope.
+ Changed in construction of decl_specs.
+
+Tue Dec 31 18:06:23 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * genrecog.c (add_to_sequence): Clear PREDS for "const_int_operand".
+ (same_modes): Properly check when we should ignore a mode test.
+
+ * reload1.c (emit_reload_insns): Only change spill_reg_store for
+ output reloads.
+ Clear spill_reg_store when we did an input reload to a spill register.
+ (delete_output_reload): Use single_set.
+ (count_occurrences): Don't count use which is SET_DEST.
+
+Tue Dec 31 16:51:37 1991 Michael Meissner (meissner at osf.org)
+
+ * mips.h (MIPS_VERSION): Change Meissner version # to 6.
+ (ASM_FINAL_SPEC): Don't pass -d and friends to mips-tfile.
+ (CONSTANT_ALIGNMENT): Align constructors on word boundaries.
+
+ * mips.md (extend*): Replace sign extension insns with a
+ define_expand that converts the expansion into the appropriate
+ shifts. Add insns that do sign extension from memory, which the
+ optimizer will utilitize if the thing being sign extended really
+ comes from memory. This allows the shifts to compete for CSE, at a
+ potential cost of generating worse code if reload spills a HI or QI
+ register to the stack.
+ (sne define_split): Instead of using a constant 0 as the second
+ argument to the slti instruction, use a hard coded regisiter 0.
+
+ * mips-sysv.h (MD_STARTFILE_PREFIX): Define to point into the
+ directory where the MIPS compilers live.
+ (LIB_SPEC): Add crtn.o after all libs.
+ (STARTFILE_SPEC): Use crt1.o, not crtn.o.
+ (MACHINE_TYPE): Correct typo, this is System V, not BSD.
+ Changes are from Ron Guilmette (rfg at ncd.com).
+
+ * configure (mips-*-sysv): Correctly use mips-sysv.h instead of
+ mips.h. Change is from Ron Guilmette.
+
+Tue Dec 31 16:51:37 1991 Michael Stump (mrs at charlie.secs.csun.edu)
+
+ * t-decrose, t-decstatn, t-encrose, t-i386rose, t-mips: Remove
+ collect2 from EXTRA_PASSES, as collect2 does not need installing as
+ collect2. Also, change the symlink back to a hard link.
+
+ * Makefile.in: Add collect2 to STAGESTUFF as it is something that
+ needs removing or moving to stagen, but it should not be installed.
+
+Tue Dec 31 15:47:50 1991 Michael Tiemann (tiemann at hal)
+
+ * combine.c (simplify_comparison): Swap evaluation of OP0 and OP1 so
+ the lattern can use the result of the former.
+
+ * conditions.h: In comments, refer to `tm.h', since `tm-' is no
+ longer the form used for these files.
+
+Tue Dec 31 11:45:26 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * cp-lex.c (lineno, finput): Decls deleted.
+
+ * global-alloc.c (find_reg): New arg RETRYING.
+ (retry_global_alloc, global_alloc): Pass that arg.
+
+ * Makefile.in (*protoize, *protoize.o): Compile with CC.
+ * protoize.c: Include config.h, not tconfig.h.
+ Always define _POSIX_SOURCE.
+
+ * convex*.h (CPP_SPEC): !ansi controls _POSIX_SOURCE, _CONVEX_SOURCE.
+ * conv1*.h, conv2*.h: Files deleted.
+
+ * m68k.h, fx80.h (WCHAR_TYPE, WCHAR_TYPE_SIZE): Defined.
+
+Tue Dec 31 08:08:32 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * cexp.y (yylex): Record the parsed characters when dealing with
+ multibyte characters.
+
+Mon Dec 30 17:13:30 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (mulhi3,mulsi3): If a multiply by constant 128, use the
+ two operand multiply instead of three operand form: the AT&T
+ assemblers generate incorrect object code for the latter.
+
+Mon Dec 30 17:39:36 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (jump_optimize): Complete last change: use expand_and result.
+
+ * reload1.c (emit_reload_insns): Check if reload_in needs a secondary
+ reload if we have an in-out reload, since it might have been the
+ output the needed the secondary reload.
+
+ * cse.c (simplify_unary_operation): Mode of integer CONST_DOUBLE is
+ VOIDmode, not DImode.
+
+ * fold-const.c (fold, case COND_EXPR): Make an ABS_EXPR when the
+ comparison is LE_EXPR or LT_EXPR.
+
+ * calls.c (calls_alloca): New function.
+ (expand_call): Preexpand any argument that contains a call to alloca
+ if this call will use the stack.
+
+ * rs6000.h (DATA_SECTION_OP): Make result a string to avoid compilation
+ error.
+
+ * rs6000.h, sparc.h, sun2o4.h, sun3.h (WCHAR_TYPE_SIZE): Fix
+ incorrect definition.
+
+Mon Dec 30 16:10:46 1991 Michael Meissner (meissner at osf.org)
+
+ * mips.h (CC1_SPEC): Complete change deleting -mnogpopt and -mngpopt
+ in favor of -mno-gpopt.
+
+Mon Dec 30 11:32:05 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-class.c (build_vtable): If we're doing #pragma interface
+ and the interface is known, set TREE_PUBLIC, regardless of
+ TREE_EXTERNAL settings.
+
+ * cp-decl.c (make_temporary_for_reference): Don't call
+ `convert_pointer_to', since the type may not be an aggr type.
+
+ * cp-decl.c (finish_decl): Now takes 4th arg NEED_POP.
+ All callers changed.
+
+ * cp-class.c (permanent_obstack): Declare it.
+ (add_method): push and pop obstacks before changing out of/into
+ temporary allocation.
+ * cp-decl.c (implicitly_declare): Add
+ push_obstacks_nochange/pop_obstacks around changes out of/into
+ temporary allocation.
+ (shadow_tag,xref_tag,start_decl,finish_decl): Ditto.
+ * cp-decl2.c (grokfield,get_temp_name): Ditto.
+ * cp-except.c ({ansi_}lookup_exception_object): Ditto.
+ * cp-lex.c (get_time_identifier): Ditto.
+ * cp-tree.c (build_exception_variant): Ditto.
+ * cp-typeck.c (mark_addressable): Ditto.
+
+ * cp-decl.c (grokdeclarator,maybe_build_cleanup): Delete calls to
+ preserve allocation status. Now handled by callers.
+
+Mon Dec 30 01:44:21 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-lex.c (yyprint): Function moved here.
+ * c-parse.y, objc-parse.y: Moved from here.
+
+ * Makefile.in (c-parse.c, objc-parse.c, cp-tab.c, cexp.c):
+ cd to srcdir to run Bison.
+
+ * c-lex.c (check_newline): Get rid of #ident pedantic warning.
+ * cccp.c (do_ident): Put it here.
+ Don't warn if in system header file.
+
+ * cccp.c (main, finclude): Warn if file ends in backslash-newline.
+
+ * next.h (WCHAR_TYPE, WCHAR_TYPE_SIZE): New definitions.
+
+ * global-alloc.c (find_reg): Kick out local regs if that helps.
+ (global_alloc): Set up vars local_regs_live_length, local_regs_n_refs.
+
+ * protoize.c (do_processing): Fix setting syscalls_absolute_filename.
+
+ * configure (m68k-*-sysv4*, m68k-*-amix*): New alternatives.
+ * config.sub (*-commodore): Default OS to Amigados.
+ (-amix*): Allow this as input.
+ (amiga): New abbreviation.
+
+ * sparc.c (output_function_epilogue): Skip unimp differently in leaf.
+ Use jmp insn rather than separate add.
+ (output_return): Skip unimp here too.
+ * sparc.md (return "peepholes"). Handle skipping the unimp.
+
+ * fold-const.c (fold, optimizing 2*EXPR): Use save_expr.
+
+ * varasm.c (make_decl_rtl): Permit initializer for local explicit reg.
+
+ * c-decl.c (kept_level_p): Changed to also return TRUE for binding
+ levels which contain only tagged type declarations.
+
+ * calls.c (expand_call): Cleaned up prev change.
+
+Mon Dec 30 11:29:47 1991 Michael Tiemann (tiemann at mole.gnu.ai.mit.edu)
+
+ * cp-lex.c (real_yylex): Call REAL_VALUE_TRUNCATE with 2 args.
+
+ * calls.c (expand_call): Handle allocating ARGBLOCK in the case
+ that ACCUMULATE_OUTGOING_ARGS is not defined.
+
+Mon Dec 30 10:27:11 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * protoize.c: fix typo in <sys/wait.h> inclusion.
+
+Mon Dec 30 06:16:16 1991 Leonard Norrgard (vinsci at nic.funet.fi)
+
+ * c-decl.c (grokdeclarator): Changed erroneus error message.
+
+Sun Dec 29 16:16:55 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * toplev.c (main): Last -On option wins.
+ * Makefile.in (ENQUIRE_CFLAGS): Add -O0.
+
+ * Makefile.in (cp-tab.c): Change "expect" message.
+
+ * final.c (leaf_renumber_regs): Renumber just the PATTERN.
+
+Sun Dec 29 14:20:15 1991 Per Bothner (bothner at cygnus.com)
+
+ * dbxout.c (dbxout_type): Tiemann's DECL_IGNORED_P optimization (Nov
+ 20) was a little too drastic: If it succeded, no type info was
+ emitted at all, which made for syntactically invalid stabs.
+ Instead, just set 'full=0',
+ * dbxout.c (dbxout_symbol): Re-write code for TYPE_DECL to be a
+ little cleaner. It *seems* to work ...
+
+Sun Dec 29 07:04:22 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (convert_move): Add truncates from DImode to smaller modes.
+ (move_by_pieces, move_by_pieces_ninsns): Rework to remove explicit
+ references to integer modes.
+ Never need to align greater than BIGGEST_ALIGNMENT.
+
+ * optabs.c (init_extends, init_fixtab, init_floattab, init_optabs):
+ Add TImode operations.
+
+ * reload.c (find_reloads): Prefer alternatives that reload SCRATCH
+ instead of something else.
+
+ * rs6000.md (movti): Adjust constraints and alternative order so
+ we actually get to use the stsi insn.
+
+ * rs6000.h (REG_ALLOC_ORDER): Put r9 in front of r11 so we don't try to
+ put a TImode value in r11 as often.
+
+ * caller-save.c (setup_save_areas): New parameter pchanged; set when
+ memory is allocated.
+ * reload1.c (reload): Pass pointer to something_changed to
+ setup_save_areas.
+
+ * loop.c (scan_loop): Don't suppress moving insns that can trap just
+ because we have passed a call inside a libcall/retval block.
+
+ * jump.c (get_label_before): Don't separate a CALL_INSN from any USE
+ insns immediately preceeding it.
+ (get_label_after): Likewise, for following CLOBBERs.
+
+ * cse.c (fold_rtx, case '<'): When seeing if we have seen this
+ comparison before, use a constant equivalence.
+ Add test for things like "(a | 1) != 0".
+ (fold_rtx, case '2'): Move code to handle associative operations to
+ here; add support for MINUS, SMAX, SMIN, UMAX, and UMIN.
+ (record_jump_equiv): See if OP1 is equivalent to a constant.
+
+ * jump.c (jump_optimize): Don't pass a SUBREG as a target to
+ expand_and.
+
+ * combine.c (subst): Never associate floating-point, even if not IEEE.
+ Associate MAX and MIN operations.
+
+ * output.h (output_asm_insn, asm_fprintf): Add "extern" to decls.
+ (alter_subreg): Add declaration.
+ * rs6000.md (movsf, movdf): Don't declare alter_subreg here.
+ (trunc_call_rtl): Don't declare trunc_used; use rs6000_trunc_used.
+ * rs6000.c (rs6000_trunc_used): New name of trunc_used.
+ * rs6000.h (rs6000_trunc_used): Add declaration.
+
+Sat Dec 28 18:14:21 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-method.c (build_overload_name): Don't call OB_FINISH unless END
+ is nonzero.
+
+Sat Dec 28 17:46:05 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * gcc.c (default_compilers): Handle -ansi in the C++ entries
+ exactly the same way as the C entries do.
+
+ * rtl.c (add_dependence): Cast enums to int before doing an
+ ordered comparison, since some compilers can't do this.
+
+ * sparc.c (pic_address_needs_scratch): New function. Returns
+ true if the pic address X needs a scratch register when loaded.
+ (legitimize_pic_address): Clean up. New argument SCRATCH, which
+ is a scratch register for those loads that need it.
+ (emit_move_sequence): New argument SCRATCH_REG, which is a scratch
+ register for those loads that need it. When loading a pic label,
+ set %o7 instead of clobbering it so its value can be used later.
+ (compute_frame_size): Leaf functions need to allocate space for
+ register window in frame if size greater than 0.
+ (print_operand): Delete obsolete %^ which added %o7 to addresses.
+ All uses of %o7 are now explicit.
+ * sparc.h: Fix callers of legitimize_pic_address.
+ (REG_CLASS_FROM_LETTER): Add 'r' case.
+ (SECONDARY_INPUT_RELOAD_CLASS): New macro, to force reload to
+ allocate a scratch register for certain pic address reloads.
+ (flag_pic): Define as extern so that it will be defined for
+ insn-emit.c.
+ * sparc.md: Fix all callers of legitimize_pic_address and
+ emit_move_sequence.
+ (reload_insi): New pattern. Used to force reload to allocate a
+ scratch register for those pic address loads that need one.
+ (reload_insi+2): When loading pic label, set %o7 instead of
+ clobbering it.
+ (movdf, movsf): Reject matches that would require reloading via
+ use of a condition.
+ (tablejump): Now a define_expand, so can generate different
+ pattern when pic.
+ (pic_tablejump): Explicitly mention in rtl that %o7 is used,
+ instead of using %^.
+
+ * m88k.h, sparc.h: Delete references to non-existent
+ BLOCK_PROFILER_USED_REG_P macro.
+
+Sat Dec 28 14:31:36 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-lex.c (check_newline): Set ignore_escape_flag for reading filename.
+ (yylex): Handle ignore_escape_flag in string constant.
+
+ * gnulib2.c (__do_global_dtors): Count elements properly.
+
+ * m68k.md (tsthi): Don't allow address register.
+
+Sat Dec 28 11:49:06 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * final.c (final): Initialize elements of line_note_exists.
+
+ * protoize.c: Don't include <sys/wait.h> on USG unless SVR4.
+
+Sat Dec 28 11:09:36 1991 Fred Fish (fnf at fishpond)
+
+ * Makefile.in (includes): Pre-remove the tmp dir; fix INSTALLED_H ref.
+
+Sat Dec 28 06:31:16 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * sparc.md (movstrsi): Fix typo testing for more than 32 subunits.
+
+ * genrecog.c: Major rework.
+ We now check to see if pairs of comparison nodes can have anything
+ that they both match. If not, they can be reordered. An efficient
+ ordering is established that groups all nodes with identical rtl
+ codes inside groups with identical modes. This allows us to generate
+ a comparison tree that is a list of nested switch statements.
+ Also, genrecog.c is now indented properly so that debugging is eased.
+ (add_to_sequence): Enforce mode on the first arg of COMPARE, comparison
+ operation, SIGN_EXTEND, and ZERO_EXTEND.
+
+ * a29k.h, romp.h, rs6000.h (PREDICATE_CODES): Add definition.
+
+Fri Dec 27 17:31:48 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * a29k.h, decrose.h, encrose.h, m88kdgux.h (WCHAR_TYPE_SIZE):
+ Add definition.
+ * rs6000.h, sparc.h, sun2o4.h, sun3.h, svr3.h, svr4.h: Likewise.
+
+ * expmed.c (expand_mult): For negative values, try multiplication by
+ the original value as well as by negated value.
+
+Fri Dec 27 20:54:59 1991 Fred Fish (fnf at fishpond)
+
+ * m68kv4.h: Include m68ksgs.h rather than m68k.h.
+
+ * m68kv4.h: Define TARGET_DEFAULT to be 68020 + 68881.
+ (CPP_SPEC): Define based on TARGET_DEFAULT
+
+ * m68kv4.h (PCC_STATIC_STRUCT_RETURN): Undef this.
+ (CTORS_SECTION_ASM_OP, DTORS_SECTION_ASM_OP): Defs deleted.
+ (ASCII_DATA_ASM_OP, ASM_OUTPUT_ASCII): Defs deleted.
+
+ * m68kv4.h (ASM_OUTPUT_SKIP, FUNCTION_VALUE_REGNO_P):
+ (FUNCTION_PROFILER, STRUCT_VALUE_REGNUM, BSS_ASM_OP):
+ (FUNCTION_VALUE, FUNCTION_EXTRA_EPILOGUE, LIBCALL_VALUE):
+ (STACK_BOUNDARY, EMPTY_FIELD_BOUNDARY, BIGGEST_ALIGNMENT):
+ Redefined to match m68k/SVR4 conventions.
+
+ * m68ksgs.h (ASM_OUTPUT_SKIP): Redefined to use `.space'.
+ (ASM_NO_SKIP_IN_TEXT): Defined.
+
+ * amix.h, xm-amix.h, x-amix: New files.
+
+Fri Dec 27 20:43:11 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-tree.h (build_overload_name): Declare this function.
+ * cp-decl2.c, cp-method.c: Delete random `extern' declarations.
+
+ * cp-lex.c (get_directive_line): Declare it extern.
+ (lineno,yychar,yylval,lastiddecl,finput): Ditto.
+ (ridpointers): Don't need to declare it here.
+ (check_newline): Handle new #pragmas.
+
+ * cp-class.c (add_method): Add a cast in call to `obstack_base'.
+
+Fri Dec 27 20:22:05 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl.c (push_overloaded_decl): Now returns a value.
+ All callers changed.
+
+ * cp-decl.c (duplicate_decls): Give better error message when user
+ declaration conflicts with built-in one. Also, when we decide to
+ keep a builtin function builtin, copy the DECL_RTL from OLDDECL to
+ NEWDECL.
+
+Fri Dec 27 17:18:15 1991 Michael Meissner (meissner at osf.org)
+
+ * mips.h (TRAMPOLINE_TEMPLATE): Define correctly for MIPS.
+ (TRAMPOLINE_SIZE): Define to be 9 words.
+ (INITIALIZE_TRAMPOLINE): Define correctly for MIPS.
+ (TRANSFER_FROM_TRAMPOLINE): Define to do a mprotect of the
+ trampoline, so that we can jump to it. I suspect the mprotect may
+ fail on some MIPS based systems, because the trampoline is on the
+ stack, and not in the data section.
+
+ * mips.c (mips_output_filename): Don't warn about ECOFF not
+ handling #line's within functions if we are using the OSF/rose
+ object format.
+
+Fri Dec 27 15:35:38 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_array_ref): Special warning about `register' array.
+
+ * gnulib2.c (L_trampoline): Don't create a function here.
+ The definition of TRANSFER_FROM_TRAMPOLINE can do that if nec.
+ * m68k.h (TRANSFER_FROM_TRAMPOLINE): Make the function here.
+
+ * fx80.*: Renamed from alliant.*.
+ * configure: Alternative renamed to fx80-alliant-*.
+ * config.sub: Corresponding changes.
+
+ * cccp.c (traditional): No longer static.
+ * cexp.y (yylex): Handle full variety of character constants.
+ Include stdlib.h and locale.h if needed.
+
+ * c-decl.c (shadow_tag): Change warnings to error or pedwarn.
+
+ * gnulib2.c (__do_global_dtors): If length not given, count it.
+ * gbl-ctors.h (DO_GLOBAL_CTORS_BODY): Ignore length; scan till null.
+ (__CTOR_END__, __DTOR_END__): Declarations deleted.
+
+ * cp-decl2.c (finish_file): Always change $ to _
+ regardless of NO_DOLLAR_IN_LABEL.
+
+Fri Dec 27 15:04:40 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * svr4.h (ASM_OUTPUT_ALIGNED_COMMON): Fix typo.
+
+ * m88k.c: Move extern decls.
+ (output_ascii): Use ASCII_DATA_ASM_OP.
+ * m88k.h (HAVE_ATEXIT): Delete.
+ (ASM_OUTPUT_ALIGNED_COMMON, ASM_OUTPUT_ALIGNED_LOCAL,
+ ASCII_DATA_ASM_OP): Override svr4.h.
+ (EXTRA_SECTIONS): No ctors/dtors for m88k-luna.
+ * m88kdgux.h (STANDARD_STARTFILE_PREFIX): No need to override svr4.h.
+
+Fri Dec 27 11:34:59 1991 Ken Raeburn (Raeburn@Cygnus.COM)
+
+ * cp-pt.c (mangle_class_name_for_template): Use a local obstack
+ rather than fixed-size buffers.
+
+ * cp-class.c (add_method): Case obstack_base value to desired type
+ when reallocating vector node.
+
+Fri Dec 27 09:16:50 1991 Ron Guilmette (rfg at ncd.com)
+
+ * sort-protos: New file.
+
+ * i386.c: Remove decls of frame_pointer_needed; include flags.h.
+ * i386.c (output_387_binary_op, output_float_compare):
+ Moved declarations of strcat to top level.
+
+ * i860.md (cmpnesf, cmpnedf): New patterns.
+ * i860.md (cmplesf, cmpgesf): Corrected to allow for IEEE conformance.
+
+Thu Dec 26 11:20:07 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-class.c: Declare N_* variables here.
+ * cp-class.h: Declare N_* variables extern here.
+
+ * cp-gc.c (build_static_gc_entry): Call `assemble_gc_entry' instead
+ of implementing it directly.
+ * varasm.c (assemble_gc_entry): New function.
+
+ * calls.c (expand_call): Don't crash if somebody declared a void
+ function `const'.
+
+ * cp-cvt.c (convert): Handle case when two equal array types are
+ distinct (in memory).
+ * tree.c (build_index_2_type): Don't set TREE_TYPE of lower bound.
+ (index_type_equal): New function.
+
+ * cp-spew.c (yylex): Extend special-case ptr-to-func ((*)()) parsing
+ to handle (*)[] and (&)[] declarations as well.
+
+ * cp-decl2.c (finish_file): Unconditionally call
+ assemble_{constructor,destructor}. Also, delete code for writing
+ _init and _fini sections that was #if 0'd. These actions belong in
+ varasm if anywhere.
+
+ * cp-class.c (add_method): Fix handling of obstacks to correctly
+ extend TREE_VECs.
+
+Thu Dec 26 15:24:45 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * cccp.c (main): Add new option -include. Rename -i to -imacros.
+ * gcc.c (SWITCH_TAKES_ARG): Remove -i.
+ (WORD_SWITCH_TAKES_ARG): Add -include, -imacros.
+ * hp800.h (WORD_SWITCH_TAKES_ARG): Add all the standard alternatives.
+ * mips.h (SWITCH_TAKES_ARG): Remove -Y and -i.
+ * next.h, sparc.h (WORD_SWITCH_TAKES_ARG): Add -include, -imacros.
+ * sun2.h, sun3.h (WORD_SWITCH_TAKES_ARG): Copy from sparc.h.
+ * svr4.h (SWITCH_TAKES_ARG): Remove -i, -f.
+ (WORD_SWITCH_TAKES_ARG): Add -include, -imacros.
+
+ * toplev.c (flag_gnu_linker): New variable. -fgnu-linker.
+ * flags.h (flag_gnu_linker): Declare it.
+ * varasm.c (assemble_constructor, assemble_destructor):
+ Handle flag_gnu_linker.
+
+ * sparc.md (structure values): Separate unimp pattern deleted.
+ New pattern for combined call and unimp. `call' pattern changed.
+ (type): Deleted type marker, added call_no_delay_slot.
+
+Thu Dec 26 05:04:28 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * reg-stack.c (move_for_stack_reg): If a SET_DEST is REG_UNUSED,
+ just pop the SET_SRC.
+
+Wed Dec 25 17:23:25 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-decl.c (init_decl_processing): Fix type of exit, _exit.
+
+ * jump.c (cross_jump_death_matters): Move def to front, make static.
+
+Tue Dec 24 20:41:32 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * hard-reg-set.h (reg_names): Declare here.
+ * stmt.c (expand_asm_operands): Not here.
+
+ * gcc.c (handle_braces, do_spec_1, give_switch): Clear up %*.
+
+ * expr.c (expand_expr): Delete decl of lang_expand_expr.
+
+ * final.c (final_scan_insn): Delete line number followed by another
+ line number, if numbers are effectively consecutive.
+
+ * jump.c (jump_optimize): Set cross_jump_death_matters from cross_jump.
+ * reg-stack.c (reg_to_stack): Pass 2 for cross_jump to jump_optimize.
+ Don't set cross_jump_death_matters here.
+ (record_reg_life): Delete decl of call_used_reg_set.
+
+ * c-decl.c (init_decl_processing):
+ Declare abort, exit, and _exit as volatile.
+
+ * c-decl.c (implicitly_declare): Set IDENTIFIER_IMPLICIT_DECL earlier.
+ (pushdecl): Test that and avoid nested extern warning.
+
+ * c-decl.c (init_decl_processing): Don't handle EXPAND_BUILTIN_VARARGS.
+
+Tue Dec 24 15:42:34 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-init.c (add_friends): Add missing IDENTIFIER_POINTER macro
+ application to strncmp argument.
+
+ * cp-method.c (build_overload_*): Now uses SCRATCH_OBSTACK instead
+ of relying on fixed buffers of finite length.
+ (fndecl_as_string): Ditto.
+ All callers changed.
+ * cp-except.c (cplus_exception_name): Definition moved to
+ cp-method.c.
+
+Tue Dec 24 10:38:49 1991 Michael Collison (collison at osf.org)
+
+ * ns32k.c (hard_regno_mode_ok): Define this as a function now.
+ Also change the way it work so that we don't allow moves between
+ the general registers and the floating point registers.
+
+ * ns32k.h (HARD_REGNO_MODE_OK): Turn it into a function call.
+
+ * ns32k.md (call_value): fix to correct a bug where the compiler thinks
+ the return value of a function call is in f0 instead of r0. Fix
+ courtesy of vince russo.
+ (movqi, movhi): Fix up these patterns because they could return
+ undefined instruction templates. Fix courtesy of vince russo.
+
+Tue Dec 24 10:14:20 1991 Ron Guilmette (rfg at ncd.com)
+
+ * mips-tfile.c (main): Move nested extern decl of version_string to
+ file-scope.
+ (catch_signal): Move nested extern decl of sys_siglist to
+ file-scope.
+
+ * varasm.c (assemble_variable): Handle ASM_OUTPUT_ALIGNED_COMMON.
+ * svr4.h (ASM_OUTPUT_ALIGNED_COMMON, ASM_OUTPUT_ALIGNED_LOCAL): New.
+ (ASM_OUTPUT_COMMON, ASM_OUTPUT_LOCAL): Deleted.
+
+ * gcc.c (SWITCH_TAKES_ARG, default_compilers): Eliminated -Y* option.
+ (execute): Moved decls of execv and execvp to top level.
+ (do_spec, do_spec1, handle_braces, give_switch): Support new %* spec.
+
+ * c-lang.c (recognize_objc_keyword): Added explicit return.
+
+ * svr4.h (SWITCH_TAKES_ARG, WORD_SWITCH_TAKES_ARG): New definitions.
+ (ASM_SPEC, LINK_SPEC): Support more standard svr4 options.
+ (LIB_SPEC): Fixed to link crtend.o *after* libc.a.
+
+ * svr4.h (CONST_SECTION_FUNCTION): Moved decl of `text_section' to
+ top level.
+
+ * cexp.y (main): Add explicit return type and explicit value.
+ Move decl of yydebug to top level.
+
+ * gnulib2.c (__bb_init_func): Moved decl of ___tcov_init to top level.
+
+ * toplev.c (main): Deleted obsolete checks for -opt and -noreg.
+ Moved decls of environ, version_string, language string to file-scope.
+ Compile-time error if PREFERRED_DEBUGGING_TYPE is missing.
+
+ * tree.c (dump_tree_statistics): Deleted decl of class_obstack.
+ (object_permanent_p): Added explicit return type.
+
+Tue Dec 24 09:29:24 1991 Charles Hannum (mycroft at hal.gnu.ai.mit.edu)
+
+ * expr.h (lang_expand_expr): Fix typo.
+
+Tue Dec 24 06:52:45 1991 Michael Meissner (meissner at osf.org)
+
+ * gnulib2.c (__main): Make sure the exit module is pulled in if we
+ have atexit, since that module defines constructor/destructor
+ variables as bss symbols rather than as references.
+
+ * decrose.h (HAVE_ATEXIT): Define.
+ * encrose.h (HAVE_ATEXIT): Define.
+ * i386rose.h (HAVE_ATEXIT): Define.
+ * decstatn.h (HAVE_ATEXIT): Define.
+
+ * gcc.texinfo (HAVE_ATEXIT): Expand documentation.
+ (EXIT_BODY): Document.
+
+ * protoize.c (POSIX): Make protoize accept TARGET_POSIX as a synonym
+ for POSIX to make the code and documentation agree. Also, if the
+ user defined _POSIX_SOURCE explicitly, turn on POSIX support in
+ protoize.
+
+Tue Dec 24 00:14:38 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * calls.c (emit_call_1): Additional arg STRUCT_VALUE_SIZE.
+ Use as arg in call and call_value insns.
+ (expand_call): Record the size, to pass it.
+ * expr.c (emit_library_call): Pass 0 for STRUCT_VALUE_SIZE.
+ * sparc.md (call, call_value): Make use of new arg.
+ Generate an unimp instruction to use sparc calling convention.
+ Add nameless pattern to recognize it.
+ * sparc.c (output_function_epilogue): Skip the caller's unimp insn.
+
+ * Makefile.in (INSTALLED_H): New variable.
+ (includes): Preserve just those specific files.
+
+ * expr.h (lang_expand_expr): Declare it.
+ * expr.c: Don't declare it.
+ * cp-expr.c (init_cplus_expand): Set up lang_expand_expr here.
+ * cp-lex.c (init_lex): Call init_cplus_expand.
+
+Mon Dec 23 15:17:59 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * configure: Delete m88k-v88r32 (this is supported by m88k-svr3)
+ and add m88k.
+ * config.sub: Delete v88r as a system type.
+
+Mon Dec 23 19:50:48 1991 Fred Fish (fnf at fishpond)
+
+ * 3b1.h, crds.h, hp320.h, m68k.md, m68ksgs.h, mot3300.h, news.h,
+ tower-as.h: Replace port oriented macros SGS_3B1, HPUX_ASM, and
+ SONY_ASM, with configuration oriented macros SGS_SWITCH_TABLES,
+ SGS_SWAP_W, SGS_CMP_ORDER, and SGS_NO_LI.
+
+ * m68ksgs.h: New file.
+
+ * m68k.c (print_operand_address): Change switch labels for MOTOROLA.
+ Don't use a `%'. Add missing `L' to some labels.
+ For SGS assembler, use one symbol for the offset.
+
+Mon Dec 23 17:03:13 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * recog.h (insn_name): New declaration.
+ * final.c (output_asm_insn): Don't declare insn_name here.
+
+ * dbxout.c (dbxout_function, dbxout_begin_function):
+ Pass missing arg to dbxout_really_begin_function.
+
+ * jump.c (jump_optimize): Set new var can_reach_end.
+ * c-decl.c, cp-decl.c (finish_function):
+ Merge that into current_function_returns_null.
+
+ * config.sub (fx2800): New machine alias.
+
+ * va-m88k.h (va_start): Test __GNUC__, not __CLASSIFY_TYPE__.
+
+ * m88kv4.h: New version from Wood.
+ (CPP_PREDEFINES): Put -A options here. Remove __CLASSIFY_TYPE__.
+
+ * cccp.c (initialize_builtins): Define __GNUC__ as 2.
+
+ * rtl.h (read_rtx): New declaration.
+
+ * c-lex.c: Don't include output.h.
+ (asm_out_file): Declare it.
+ (ridpointers): Allocate storage here.
+
+ * c-lex.h (lastiddecl, token_buffer): Declare here.
+ (yylex, make_pointer_declarator, reinit_parse_for_function): Likewise.
+ * c-parse.y, objc-parse.y: Not here.
+
+ * objc-actions.c (error_with_ivar, error_with_method):
+ (warn_with_method): Use count_error, not errorcount.
+
+Mon Dec 23 11:50:37 1991 Ron Guilmette (rfg at ncd.com)
+
+ * sdbout.c: Fixed typo.
+ * stmt.c (init_stmt, init_stmt_for_function): Explict return type.
+ * gnulib2.c (__fixunsdfdi, __fixunssfdi): Move extern decls.
+ * recog.c (init_recog): Added explicit return type.
+ * longlong.h (count_leading_zeros): Moved decl of `__clz_tab'.
+ * print-rtl.c (insn_name_ptr): Make decl `extern'.
+
+ * objc-actions.h, objc-actions.c (doing_objc_thang): Make extern.
+ * objc-actions.h, objc-actions.c (finish_class): Return void.
+ * objc-actions.c (continue_class): Added default error return value.
+
+ * fixinc.svr4: Map assertion tests to equivalent ANSI macro tests.
+
+ * i860.c (output_block_move): Disabled code to move by words or
+ halfwords until it can be made to work right.
+
+ * i860.c (output_block_move): Moved a sequence of common
+ `output_asm_insn' calls out of (and before) conditionals.
+
+ * i860.c (output_block_move): Corrected bugs in move loop.
+
+Mon Dec 23 15:25:01 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88kv4.h (CPP_PREDEFINES): Fix for varargs/stdarg.
+ (includes): Include svr4.h before m88k.h so the overrides in m88k.h
+ will take effect.
+
+Mon Dec 23 07:06:27 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * i860.c (output_delayed_branch): Call insn_extract and
+ constrain_operands so that `which_alternative' is set properly.
+
+ * stor-layout.c (layout_type, case ARRAY_TYPE): Handle
+ TYPE_NO_FORCE_BLK similar to RECORD_TYPE.
+
+ * encrose.h, i386rose.h, mips.h (LIBG_SPEC): Deleted; unused.
+
+Sun Dec 22 12:02:03 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.c (function_epilogue): Use correct operand for insn mode.
+
+Sun Dec 22 12:20:16 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Don't set TREE_PUBLIC for member
+ functions that are really declared as inline methods.
+
+ * cp-init.c (build_virtual_init): Add missing call to
+ `assemble_external' when we use a virtual function table.
+
+ * cp-decl.c (implicitly_declare): Don't allocate a decl if at the
+ global binding level.
+
+ * vax.h (PRINT_OPERAND): Handle new 'R' case.
+ * vax.md: Change all patterns which passed a negated operand for
+ `rotl' to use 'R' as the negator, since rotl cannot acctually handle
+ negative arguments.
+
+Sun Dec 22 12:31:46 1991 Ron Guilmette (rfg at ncd.com)
+
+ * i386v4.h (TARGET_VERSION): Added definition.
+ * i860v4.h (TARGET_VERSION): Added definition.
+
+ * m68kv4.h: New file.
+ * fx2800.h: New file.
+
+ * m88kv4.h (DWARF_DEBUGGING_INFO): Deleted redundant definition.
+ (It's defined already in svr4.h.)
+
+ * m88kv4.h (CPP_PREDEFINES): Added definition.
+
+ * m88kv4.h (CPP_SPEC, LIB_SPEC, LINK_SPEC, STARTFILE_SPEC):
+ Deleted redundant definitions. (These are defined in svr4.h.)
+
+ * cccp.c (errno, sys_nerr, sys_errlist): Moved extern decls to top lev.
+ * function.c (round_down): Likewise.
+ * calls.c, c-convert.c: Delete block-level extern decls.
+ * c-convert.c: Include flags.h.
+
+ * configure (i386-*-sysv*): Fixed tmake_file value.
+ (i860-*-sysv3*): Fixed xmake_file and tmake_file value.
+ (i860-alliant-*): New configuration.
+
+ * i860.c (recog_operand, call_used_regs, insn_template,
+ insn_n_operands, insn_outfun, alter_subreg): Moved extern
+ declarations out of local contexts and put them at file-scope.
+
+ * i860.c (zero_operand): Deleted useless function.
+
+ * i860.c (singlemove_string): Added code to optimize moving halfword
+ constants.
+
+ * i860.c (output_block_move): Don't do CC_STATUS_INIT until it is
+ definitely necessary & appropriate.
+
+ * i860.c (output_block_move): Create up to 16 sequential load/store
+ pairs for constant length moves regardless of operand sizes (e.g.
+ byte, halfword, word).
+
+ * i860.c (output_block_move): Try to generate widest kind of
+ sequential load/store pairs for constant length moves before trying
+ the less efficient (narrower) ones.
+
+ * i860.c (output_block_move): Don't do sequential load/store pairs
+ for constant length moves unless the size is a multiple of the
+ size of the operands moved each time (i.e. word, halfword, byte).
+
+ * i860.c (output_block_move): Re-wrote code to do inline variable
+ length block moves to correct fatal errors (e.g. no check for zero
+ or neagtive start count) and to make it more efficient (saved 1 cycle
+ per iteration).
+
+ * i860.c (output_block_move): Make variable length moves with starting
+ alignment of 4 or 2 `#if 0' for now, until they can be fixed to work
+ right. Also reordered all three cases so that longer alignments are
+ checked for first.
+
+Sun Dec 22 01:25:07 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * i386v4.h: Include svr4.h just once.
+
+ * protoize.c (fprintf, printf): Decls put in #if 0.
+
+ * emit-rtl.c (stack_slot_list): Delete superfluous extern decl.
+ (emit): Abort if arg isn't recognized.
+
+ * c-parse.y (current_declspecs, declspec_stack): Declare static.
+ (undeclared_variable_notice): Likewise.
+ (lastiddecl): Declare extern.
+ * objc-parse.y: Same changes as c-parse.y.
+ (token_buffer): Declare extern.
+
+ * c-lex.c: Include output.h.
+ (check_newline): Decl of asm_out_file deleted.
+
+ * c-lex.h (ridpointers, NORID): Declare/define here.
+ * c-lex.c, c-parse.y, objc-parse.y: Not here.
+
+ * sun3.h (WORD_SWITCH_TAKES_ARG): Add `-assert'.
+ (LINK_SPEC): Pass -assert to linker.
+
+ * gbl-ctors.h (__CTOR_END__, __DTOR_END__): Remove `extern'.
+
+ * sparc.h (RTX_COSTS): Increase multiply cost to 20.
+ (MULSI3_LIBCALL): Use .umul.
+ (UMULSI3_LIBCALL): Deleted.
+
+Sat Dec 21 18:34:27 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (simplify_comparison): Allow OP0 to be VOIDmode if it
+ is a COMPARE or a comparison operation.
+
+ * i860.md (bte): Remove now unneeded patterns.
+ Correct mode mismatch errors in patterns that will now be used.
+
+Sat Dec 21 00:14:25 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * ns32k.h (TRAMPOLINE_TEMPLATE, TRAMPOLINE_SIZE): Dummies deleted.
+ (INITIALIZE_TRAMPOLINE): Likewise. #error inserted.
+
+ * ns32k.c (print_operand_address): For invalid address, just abort.
+
+ * Makefile.in (FIXINCLUDES): New variable.
+ (includes, maketest): Use that.
+ * x-i386v4 (FIXINCLUDES): Override here.
+
+Fri Dec 20 18:28:54 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * dbxout.c (dbxout_really_begin_function): New subroutine.
+ (dbxout_function): Use that, but only if not DBX_FUNCTION_FIRST.
+ (dbxout_begin_function): New function.
+ * varasm.c (assemble_start_function): Call dbxout_begin_function.
+
+ * dbxout.c (dbxout_function): Implement DBX_OUTPUT_FUNCTION_END.
+
+ * sparc.md (movstrsi): Add missing double quote.
+
+ * gcc.c (process_command): Handle -Xlinker.
+
+ * calls.c (expand_call): Treat vfork like setjmp.
+
+ * c-decl.c (implicitly_declare): Use push_obstacks_nochange.
+
+ * sparc.h (WORD_SWITCH_TAKES_ARG): Add -assert.
+ (LINK_SPEC): Pass -assert to linker.
+
+ * svr4.h (ASM_OUTPUT_LOCAL): Fix typo.
+
+Fri Dec 20 07:52:19 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl2.c (lang_decode_option): Recognize more -fno-OPTION
+ options which need special treatment (in the turning off of the
+ option).
+
+ * cp-parse.y (named_class_head_sans_basetype_either): Rule deleted.
+ (identifier_either): Rule deleted.
+ (delete): Don't call `build_x_delete'' if the type does not have a
+ destructor. We may still need to adjust the address passed to
+ `operator delete'.
+
+ * cp-init.c (build_delete): New argument MAYBE_ADJUST. All callers
+ changed. Also, add #if 0/#endif around code dealing with ALIGNMENT.
+ It's dead code, and that's unclear otherwise.
+ (maybe_adjust_addr_for_delete): New function.
+ (build_new): Initialize special header for arrays allocated with
+ `operator new[]'. This is a rewrite of Ken's code.
+ (init_init_processing): New built-in type BI_header_type.
+
+ * cp-init.c (build_{new,delete}): Call `build_builtin_call' for BIN,
+ BID.
+ (build_builtin_call): New function.
+
+ * cp-decl.c (grokvardecl): Set TREE_EXTERNAL.
+ (grokdeclarator): Set TREE_PUBLIC for all member functions. They
+ are effectively global. Do the same for static members.
+ (start_function): Don't clear TREE_EXTERNAL in case the function
+ belongs to another file's implementation. Other fixes to
+ TREE_PUBLIC/TREE_EXTERNAL logic based on interface/implementation.
+
+ * cp-method.c (hack_identifier): Call `assemble_external' if
+ necessary.
+
+Fri Dec 20 06:27:38 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (emit_reload_insns): Always record first insn emitted
+ for a reload, including any insns for a secondary reload.
+ (gen_input_reload): Correct documentation of function.
+
+Thu Dec 19 22:01:51 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * gnulib1.c (perform_fixdfsi): New customization macro.
+
+ * svr4.h (SELECT_RTX_SECTION): Undef before defining.
+
+Thu Dec 19 16:59:12 1991 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * cccp.c (hack_vms_include_specification): Make conversion of
+ filenames more versatile for user specified include directories.
+
+Thu Dec 19 17:38:18 1991 Michael Meissner (meissner at osf.org)
+
+ * mips.h (#error's): Put tab in front of all #error's, so that
+ ancient pre-ANSI compilers will not complain about unknown
+ directives, even if the #error is #ifdef'ed out.
+
+ * mips.md (fix_trunc*): Reorder constraints so that 'd' comes before
+ 'f', and put a '*' in front of 'f' constraints to keep integer in
+ the GP registers.
+ (define_splits): Add reload_completed check for all define_splits
+ that use subreg on the arguments to work around bug in sched.c.
+
+ * cccp.c (lang_asm): New static variable to indicate we are
+ processing an assembly file and to ignore unknown directives in case
+ they are comments, like they are on the MIPS systems.
+ (main): Set lang_asm if -lang-asm switch.
+ (handle_directive, skip_if_group): Don't report about unknown
+ directives if lang_asm is set.
+
+ * gcc.c (default_compilers array): Pass -lang-asm to cpp when
+ processing .S files instead of -lang-c.
+
+Thu Dec 19 15:06:09 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-decl.c (c_decode_option): Handle -fno-ident.
+ * c-lex.c (check_newline): Ignore #ident for -fno-ident.
+
+ * svr4.h (ASM_OUTPUT_LOCAL): Use assemble_name.
+
+ * mips.h: Use #error, not #include, for error messages.
+
+ * cccp.c (warning, main): Implement -Werror.
+
+ * i386sco.h (CPP_SPEC): Move non-fixed option here.
+ (CPP_PREDEFINES): From here.
+
+ * gcc.c (do_spec_1): For %p, just pass -D options.
+ For %P, pass all -A options. Put in whitespace, fix typos.
+
+ * c-parse.y (parmlist_2, defn_parmlist_2): Warn about (...).
+ * c-decl.c (get_parm_info): Don't warn here.
+
+Thu Dec 19 06:15:46 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * toplev.c (compile_file): Avoid ordered comparison of debug_info_level
+ since it is an enum.
+
+ * mips.c: Include gstab.h.
+
+ * sparc.md: Fix typo.
+
+ * caller-save.c (save_call_clobbered_regs): Don't save regs that
+ die in a CALL_INSN or that are born there.
+
+Thu Dec 19 04:28:23 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-aux-info.c (gen_aux_info_record): Don't write space at line beg.
+
+Wed Dec 18 11:46:13 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * cse.c (cse_main): Use get_max_uid rather than computing it.
+
+Wed Dec 18 18:13:06 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * loop.c (scan_loop): Ensure replacement made by single-use code
+ is not modified in the life of the register being replaced.
+
+Wed Dec 18 15:37:52 1991 Ron Guilmette (rfg at ncd.com)
+
+ * rtl.h (fconst2_rtx, dconst2_rtx): Added extern declarations.
+
+ * flags.h (flag_inhibit_size_directive): Declared.
+
+ * svr4.h (INT_ASM_OP, INIT_SECTION_ASM_OP): Moved around.
+ (ASCII_DATA_ASM_OP): Definition added.
+ (flag_inhibit_size_directive): Deleted superfluous extern decls.
+
+ * Makefile.in: Correct number of expected shift/reduce conflicts
+ reported by bison for cp-parse.y.
+
+ * sparcv4.h: New file.
+
+ * i860.h (FUNCTION_ARG_BOUNDARY): Added definition.
+ (sfmode_constant_to_ulong): Added extern declaration.
+
+ * i860.md (BTE/BTNE patterns): Changed all instances of
+ `(match_operand:SI 2 "zero_operand" "J")' to `(const_int 0)'.
+
+ * i860.md (load then BTE/BTNE patterns): Added 8 new patterns,
+ for cond branch on EQ/NE of a zero-extended memref with small integer.
+
+ * i860.md: 20 new patterns (involving BTE/BTNE) like existing 20
+ but simplified so that the combiner will find them.
+
+ * i860.md (sfmode_constant_to_ulong, fconst2_rtx): Removed
+ superfluous nested extern declarations.
+
+Wed Dec 18 15:39:46 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * va-i860.h (va_start for stdarg.h): Divide reg counts by 4.
+
+ * stmt.c (emit_case_nodes): Fix typo, near testing cost_table.
+
+ * i860.h (CUMULATIVE_ARGS): Define a named struct, then use it.
+
+ * function.c (expand_function_start): Compute sizes in proper order.
+
+ * svr4.h (MD_STARTFILE_PREFIX): Defined.
+ (STANDARD_STARTFILE_PREFIX): Deleted.
+
+ * sparc.md (movstrsi): Disable if needs more than 32 insns.
+
+ * expr.c (store_expr): Handle copying too-short STRING_CST.
+
+ * gstdarg.h (_VA_LIST): Handle this like _VA_LIST_.
+
+ * m68k.h (LOCAL_LABEL_PREFIX): Remove the `L'.
+ Fix uses of %L by adding `L'.
+ * m68k.c (print_operand_address): Fix use of %L.
+ * m68k.md (movhi): Fix use of %L. They were inconsistent.
+
+Wed Dec 18 14:59:26 1991 Michael Meissner (meissner at osf.org)
+
+ * limits.h (whole file): Protect against inclusion.
+
+ * t-decrose (LIMITS_H): Don't install limits.h on OSF/1.
+ * t-encrose (LIMITS_H): Don't install limits.h on OSF/1.
+ * t-i386rose (LIMITS_H): Don't install limits.h on OSF/1.
+
+ * x-decrose (SYSTEM_INCLUDES): Don't do -I/usr/include.
+ * x-encrose (SYSTEM_INCLUDES): Don't do -I/usr/include.
+ * x-i386rose (SYSTEM_INCLUDES): Don't do -I/usr/include.
+
+Wed Dec 18 04:53:23 1991 Ken Raeburn (Raeburn@Cygnus.COM)
+
+ * cp-init.c (build_new): Rewrote some of the array-handling code.
+ Now stores the number of elements (after stripping off all outer
+ ARRAY_TYPE nodes) at the start of allocated storage, just before the
+ pointer the user's program sees. We also store the 2s compliment
+ value of the pointer returned so we can distinguish when deleting a
+ pointer whether it was "adjusted" or not.
+ (expand_vec_init): Added a type conversion for cases when the
+ address of an array gets passed in and we want to deal with the
+ elements.
+ (build_delete): Catch a case where deletion of arrays could slip
+ through.
+ (build_vec_delete): More array-handling rewrites. Extract the
+ stored value and use it as the number of objects to destroy; ignore
+ any value supplied by the user.
+
+ * cp-init.c (init_vfields): Now static.
+
+ * cp-tree.h (struct lang_decl_flags): Merged "dummy" fields.
+
+ * cp-tree.h (DECL_TEMPLATE_INSTANTIATIONS): New macro for finding a
+ list of instantiations already made of a template. (Only
+ implemented for functions currently.)
+ * cp-tree.def (DECL_TEMPLATE_INSTANTIATIONS): Describe it.
+ * cp-pt.c (instantiate_template): Maintain and make use of it.
+
+ * cp-pt.c (tsubst, case REFERENCE_TYPE): Call build_reference_type
+ instead of constructing the type here.
+
+Wed Dec 18 03:37:46 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-parse.y (label_decl): Use identifiers_or_typenames.
+
+ * c-parse.y: Support FUNCTION ([ARGNAMES] DECLS) {...}.
+ (defn_parmlist_2, defn_parms): New nonterminals.
+ (identifiers_or_typenames): New nonterminal.
+ (parmlist_or_identifiers_1): Changed.
+ * c-decl.c (combine_parm_decls): New function.
+
+Tue Dec 17 22:18:43 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * function.c (expand_main_function): Build SYMBOL_REF with Pmode,
+ not VOIDmode.
+
+ * rs6000.h (HARD_REGNO_NREGS, CLASS_MAX_NREGS): FP regs can only hold
+ 64 bits, not any size FP value.
+
+ * reload1.c (reload): Remove variable old_caller_save_needed.
+ Call init_save_areas and setup_save_areas instead of
+ allocate_save_areas and elim_save_addrs.
+ * caller-save.c (init_caller_save): New function, from part of
+ allocate_save_areas.
+ (setup_save_areas): New function, from rest of allocate_save_areas
+ and elim_save_addrs.
+ When scanning pseudos to find hard regs that might need caller-save,
+ look at all parts of multi-word registers.
+
+ * flow.c (elim_reg_set): New variable.
+ (flow_analysis): Set it to contain those regs that we can eliminate.
+ (mark_used_regs): Don't set eliminable regs as live when they are used.
+
+ * global-alloc.c (global_alloc): Clear preferences with eliminable
+ regs, in addition to clearing conflicts.
+
+ * reload.c (find_reloads_toplev): Abort instead of making
+ a SUBREG of a VOIDmode constant.
+
+ * emit-rtl.c (copy_rtx_if_shared): SCRATCH may always be shared.
+
+Tue Dec 17 21:06:03 1991 Michael Meissner (meissner at osf.org)
+
+ * mips.h (MIPS_VERSION): Bump MM version number to 5.
+ (processor_type): New enum to hold which type of
+ processor to schedule for.
+ (mips_cpu): New global to hold processor type.
+ (MASK_*, TARGET_*): Rearrange target bits, add bits to select
+ processor type, r4000 int/long/long long sizes.
+ (TARGET_SWITCHES): Delete redunant no options, only leave no-
+ version.
+ (CUMULATIVE_ARGS): Make this a structure, not a pointer to a
+ structure.
+ (INIT_CUMULATIVE_ARGS): CUMULATIVE_ARGS changes.
+ (FUNCTION_ARG_ADVANCE): Ditto.
+ (FUNCTION_ARG): Ditto.
+ (FUNCTION_ARG_PARTIAL_NREGS): Ditto.
+ (RTX_COSTS): Count simple memory refs as one instruction.
+ (REGISTER_MOVE_COST): Define as 4, to make sure constraints are
+ checked.
+
+ * mips.md (hilo type attribute): Add hilo type attribute to
+ separate moves to/from the hi/lo registers with other register
+ transfers.
+ (move patterns): Set hilo attribute as appropriate.
+ (define_function_units): Update the integer and memory functional
+ units to include R4000 and R6000 processors, keyed off of the
+ -mr[46]000 switches. Add a new functional unit for transfering
+ stuff between register sets.
+ (mov{sf,df}_xfer*): Remove these patterns, as they are no longer
+ needed in GCC 2.00 to move between the different register sets,
+ and generate insn not found messages if used.
+ (movsi_ulw, movsi_usw): Correct test to see if stack loads are
+ aligned. Use UNITS_PER_WORD-1 instead of a hard coded 3.
+ (move define_expands): Delete move define_expands, since they are
+ illegal according to the documentation, and the bug they guard
+ against has long ago been fixed.
+
+ * mips.c (mips_cpu): New global to hold processor type.
+ (override_options): Set mips_cpu, check for 64 bit r4000 switches
+ if processor not a r4000.
+ (init_cumulative_args): CUMULATIVE_ARGS changes.
+ (function_arg_advance): Ditto.
+ (function_arg): Ditto.
+ (function_arg_partial_nregs): Ditto.
+ (mips_output_filename): Except for first .file, don't emit any other
+ .file if encapsulating stabs in ECOFF, just put out stabs. This
+ confuses gdb.
+ (mips_output_lineno): Don't put out .loc's if encapulating stabs in
+ ECOFF.
+ (mips_asm_file_start): Put a .set nobopt for MIPS assembler to
+ work around bug where the assembler goes bonkers if a branch
+ inside of a .set noreorder section jumps to a label outside of a
+ .set noreorder section. This is supposed to be fixed in 2.20 of
+ the assembler.
+ (function_epilogue): Correctly emit nops with tabs and newlines if
+ needed.
+
+ * decrose.h (OBJECT_FORMAT_ROSE): Define, to tell collect to
+ enable OSF/rose support, rather than use nm.
+
+ * encrose.h (OBJECT_FORMAT_ROSE): Define, to tell collect to
+ enable OSF/rose support, rather than use nm.
+
+ * i386rose.h (OBJECT_FORMAT_ROSE): Define, to tell collect to
+ enable OSF/rose support, rather than use nm.
+
+ * t-decrose (EXTRA_PASSES): Build collect2 instead of collect-osf,
+ and link it to ld.
+
+ * t-encrose (EXTRA_PASSES): Build collect2 instead of collect-osf,
+ and link it to ld.
+
+ * t-i386rose (EXTRA_PASSES): Build collect2 instead of collect-osf,
+ and link it to ld.
+
+ * x-decrose (DEBUG): Delete -g, since CFLAGS already passes it.
+ (GCC_CFLAGS): Define POSIX so we can build protoize.
+
+ * x-encrose (DEBUG): Delete -g, since CFLAGS already passes it.
+ (GCC_CFLAGS): Define POSIX so we can build protoize.
+
+ * x-i386rose (DEBUG): Delete -g, since CFLAGS already passes it.
+ (GCC_CFLAGS): Define POSIX so we can build protoize.
+
+ * t-decstatn (EXTRA_PASSES): Explicitly mention collect2.
+ (ld): Use $(SYMLINK) rather than just ln.
+
+ * t-mips (EXTRA_PASSES): Explicitly mention collect2.
+
+ * collect2.c (whole file): Rewrite file based on collect-osf, to
+ make it more portable. Highlights include: running ld only once if
+ there are no constructors; OSF/rose support; not assuming that the
+ linker, assembler, nm live in /bin; -v support to trace the commands
+ being executed and print a version number; loops instead of
+ recursion used to write out the tables; support for user using -r;
+ checking all error returns; not using the shell to start processes.
+
+ * collect-osf.c (whole file): Deleted, merged into collect2.c.
+
+Tue Dec 17 15:49:06 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * sched.c (schedule_insns): Don't update value of reg_live_length
+ when it is negative, because negative values are special.
+
+ * sched.c (schedule_block): Make new_needs an int not an enum, since
+ some compilers won't accept using `|' and `&' with enums.
+
+ * sparc.md: Don't emit nop after floating point compare; this is
+ no longer needed.
+
+ From Tom Wood:
+ * sched.c (memrefs_conflict_p): Exchange xsize and ysize when x
+ and y are exchanged.
+
+Tue Dec 17 15:01:04 1991 Mark Eichin (eichin at cygnus.com)
+
+ * cp-decl.c (set_nested_typename): use SET_IDENTIFIER_TYPE_VALUE,
+ not set_identifier_type_value, so that the binding doesn't get
+ unwound by leaving class scope.
+
+Tue Dec 17 10:57:12 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * toplev.c (main): Make -g0 produce no debugging information.
+
+Tue Dec 17 15:15:20 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * gcc.c (do_spec_1): In %P, duplicate the names with __ just in front.
+
+ * gstab.h: Renamed from stab.h.
+ * collect2.c, dbxout.c, final.c, mips-tfile.c: #include changed.
+ * dbxout.c (N_CATCH): Define this if stab.h does not.
+ * Makefile.in: Depend on gstab.h where appropriate.
+
+ * Makefile.in (STAGESTUFF): Remove collect and collect2.
+
+ * c-parse.y (parmlist_2): Allow just `...' with no named args.
+ * c-decl.c (get_parm_info): Pedantic warning for that usage.
+
+ * final.c (final_scan_insn): Don't output blocks for -g1.
+
+ * Makefile.in (crtbegin.o, crtend.o): Use -g0.
+
+ * function.c (expand_main_function): Do nothing if INIT_SECTION_ASM_OP.
+
+ * varasm.c (assemble_asm): Handle ADDR_EXPR of a STRING_CST.
+ * stmt.c (expand_asm): Likewise.
+ * c-parse.y (extdef, stmt): Accept STRING_CST or ADDR_EXPR in asm.
+
+Tue Dec 17 15:01:11 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.h (INIT_SECTION_ASM_OP): Override svr[34].h.
+ * m88kv4.h (INIT_SECTION_ASM_OP): Override svr4.h and m88k.h.
+ * m88kdgux.h ({INIT,CTORS,DTORS}_SECTION_ASM_OP): Override m88k.h
+ except when compiling crtstuff.c.
+
+Mon Dec 16 21:50:42 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * stmt.c (struct case_node): Remove unused field `test_label'.
+ (pushcase, pushcase_range): Don't initialize it.
+
+ * stmt.c (check_for_full_enumeration_handling): Only print warnings
+ if -Wswitch is specified.
+ (expand_end_case): Call check_for_full_enumeration_handling even if
+ -Wswitch is not specified.
+
+ * expr.c (convert_move): Add missing arg to call to force_reg.
+ (convert_to_mode): Likewise, for protect_from_queue.
+
+Mon Dec 16 20:33:10 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * expr.c (expand_builtin): Check number and types of args.
+
+ * c-parse.y (stmt, extdef): Allow constant expression inside plain asm.
+
+ * m68k.md (movhi): Use asm_fprintf to print .set or equivalent.
+ * m68k.c (print_operand_address): Use %R when printing pc register.
+ * m68k.h (ASM_OUTPUT_INTERNAL_LABEL, ASM_GENERATE_INTERNAL_LABEL):
+ Use %L.
+
+ * c-typeck.c, cp-typeck.c (c_sizeof): Give error for incomplete type.
+
+Mon Dec 16 11:14:28 1991 Ken Raeburn (Raeburn@Cygnus.COM)
+
+ * cp-decl.c (init_decl_processing): Don't declare unused function
+ __builtin_vec_delete.
+
+Mon Dec 16 08:35:04 1991 Torbjorn Granlund (tege at hal.gnu.ai.mit.edu)
+
+ * gnulib2.c (__udivmoddi4): Add comment.
+
+Mon Dec 16 07:47:13 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-call.c (ideal_candidate): Always set BEST before using it.
+ Also, call `build_component_ref_1' with 3 args everywhere, and
+ `build_indirect_ref' with 2 args everywhere.
+
+Mon Dec 16 07:17:46 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload.h: Add `extern' to function declarations.
+ (gen_input_reload): Add declaration.
+ * reload1.c (reload): Allocate save area if caller-saves are needed;
+ check for case when it becomes needed after some spill registers are
+ obtained.
+ Can now eliminate frame pointer even when caller-saves are needed.
+ Perform register elimination of save area and see if caller-save needs
+ a spill register.
+ If required, find a spill register and pass it to caller-save code.
+ (gen_input_reload): No longer static.
+ * Makefile.in (caller-save.o): Now includes reload.h (again).
+ * global-alloc.c (global_alloc): Can eliminate frame pointer even if
+ we have caller-saves.
+ * toplev.c (compile_file): Call init_caller_saves.
+
+ * caller-save.c: Major rewrite; almost entirely new code.
+ Integrate caller-saving with frame pointer elimination.
+ Don't try to save and restore registers that cannot be directly
+ copied to memory (such as MQ).
+ Correctly place save and restore insns.
+ Don't restore a saved register until end of block or if it is needed.
+
+ * cse.c (mention_regs): Now returns int to indicate that the hash code
+ may have changed.
+ For COMPARE and comparison op, ensure that any register operand has
+ a quantity number.
+ (insert_regs): Return value from mention_regs.
+ (rehash_using_reg): New function.
+ (record_jump_equiv, mention_regs): Call rehash_using_reg if an operand
+ of a compare is a REG whose hash code is changing.
+
+Mon Dec 16 07:09:21 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * function.c (expand_main_function): New subroutine. Call __main.
+ * c-decl.c, cp-decl.c (store_parm_decls): Use that.
+ * cp-decl.c (init_decl_processing): Don't declare __main.
+
+ * objc-actions.c (init_objc): Call __objcInit as a constructor.
+
+ * toplev.c (compile_file): Reenable SDB code #if 0'd before.
+
+ * protoize.c (version_string): Make it extern.
+ * Makefile.in (protoize, unprotoize): Link with version.o.
+
+Sun Dec 15 23:31:47 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-tree.c (virtual_member): When recurring, don't dive into
+ nonexistent baseclasses.
+
+ * cp-decl.c (grokdeclarator): Set TREE_STATIC for initialized const
+ arrays.
+ * cp-typeck.c (mark_addressable): A decl that was TREE_STATIC might
+ be chagned to TREE_EXTERNAL due to #pragma interface/implementation.
+
+Sun Dec 15 14:57:23 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * Makefile.in (SYSCALLS.c.X): Fix typo.
+ (INTERNAL_CFLAGS): Delete -DMERGED.
+
+ * dbxout.c (dbxout_init): Pass proper args to ASM_OUTPUT_MAIN_*.
+ * newpbb.h (ASM_OUTPUT_MAIN_SOURCE_FILENAME): Add proper arguments.
+
+ * stmt.c (emit_case_nodes): Rewrite to change induction conditions.
+ Handle boundedness in the bounded node itself.
+ Handle branching entirely at the parent level.
+
+ * gstdarg.h: Use va-i860.h.
+ * va-i860.h (va_start for ANSI): Fix typo. Call __builtin_next_arg.
+
+Sat Dec 14 20:45:30 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * Makefile.in (USER_H): va-hp9k8.h should be va-hp800.h.
+
+ * loop.c (invariant_p): Call-clobbered register is not invariant if
+ loop has calls.
+ (count_loop_regs_set): Count a CLOBBER as a setting of a register.
+
+ * stmt.c: Move include of ctype.h and definition of cost variables to
+ front of file.
+ (expand_end_case): Always set use_cost_table. Check type here instead
+ of in estimate_case_costs. Don't suppress use of cost table when
+ not optimizing.
+ (estimate_case_costs): Now returns int. Check for any case tag
+ that is an unusual control character here and reject use of table
+ if so. Always do comparisons signed, since that's how we access the
+ cost table.
+ (balance_case_nodes): Don't check for strange control characters here.
+ (node_has_low_bound): Do checking if we don't have a left branch,
+ instead of if we do.
+ (node_has_{low,high}_bound): Remove spurious checks on branches.
+ (emit_case_nodes): Ensure operation passed to emit_cmp_insn matches
+ the branch we actually emit.
+ Fix case of a range node with no left or right branch; use of case
+ and default label were backward for the high test.
+ Remove unused variables defaulted_{left,right}.
+
+Sat Dec 14 16:10:11 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * protoize.c: Don't include limits.h.
+ Rename `pathname' to `filename' everywhere.
+ Clean up indentation of fprintf calls.
+ Use standard GNU format for file name/line in error messages.
+ (n_base_source_files): Renamed from base_source_files.
+ (convert_filename, invocation_filename, base_source_filenames):
+ `path' renamed to `filename'.
+ (syscalls_absolute_filename): Renamed from syscalls_pathname.
+ (find_file): Arg FILENAME no longer const.
+ (main): Fix getcwd error-checking logic.
+ (varargs_style_indicator): Delete `const'.
+ (savestring): Declare arg `input' const.
+
+ * Makefile.in (protoize, protoize.o, unprotoize, unprotoize.o):
+ Use GCC_FOR_TARGET.
+ (getopt.o, getopt1.o): Likewise.
+ (GCC_FOR_TARGET): Delete -B./.
+ (GCC_CFLAGS): Add -B./. Copy ALL_CFLAGS's definition, less XCFLAGS.
+
+ * cp-init.c (add_friends): Pass proper args to strncmp.
+
+ * toplev.c (compile_file): Clear DECL_RTL for vars not really output.
+ #if 0 possibly redundant code for SDB output.
+
+ * sys-types.h: Include gstddef.h to get size_t and wchar_t.
+
+ * ultrix.h (CPP_PREDEFINED): Add __unix, __ultrix, __bsd4_2.
+
+ * Makefile.in (STAGESTUFF): Add collect, collect2.
+
+Sat Dec 14 12:16:12 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-search.c (get_baselinks): Use obstacks right, instead of
+ aborting when we know we're using them wrong.
+
+ * cp-parse.y (structsp): Fix typo in exception declaration rule.
+
+ * cp-typeck.c (build_modify_expr_1): Recursive call to
+ `build_modify_expr_1' used pre-BINFO representation for
+ BASETYPE_PATH argument.
+
+ * cp-decl.c (start_decl): Don't switch to temporary allocation for
+ decls of type REFERENCE_TYPE, as their initializers may live a long
+ time, too.
+
+Sat Dec 14 07:11:03 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload.c (find_reloads_toplev): If we have a SUBREG of a multi-word
+ constant, try to extract just the word we want.
+
+ * global-alloc.c (global_alloc): Correct reference to ELIMINABLES.
+
+Fri Dec 13 15:28:38 1991 Michael Meissner (meissner at osf.org)
+
+ * configure (mips-mips-sysv): On MIPS System V, use xm-umips.h, not
+ xm-mips.h.
+
+ * gstddef.h (__PTRDIFF_TYPE__): Provide default definition in case
+ non-GCC 2.00 compiler is used.
+ (__SIZE_TYPE__): Ditto.
+ (__WCHAR_TYPE__): Ditto.
+
+Fri Dec 13 14:49:54 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * config.sub: Renamed from config.subr.
+ Support os -sym1.
+ Convert -svr3, -svr4 to -sysv3, -sysv4.
+ * configure: Used new name.
+
+ * Makefile.in (includes): Preserve files from GCC already in dir.
+
+Fri Dec 13 11:01:12 1991 Fred Fish (fnf at fishpond)
+
+ * att386.h: Fix unparenthesized macro arguments in
+ ASM_OUTPUT_ASCII macro.
+
+ * i386v4.h: Select an assembly language syntax file and include
+ it. Supply missing macros from ones in i386v.h (TARGET_DEFAULT,
+ VALUE_REGNO, FUNCTION_VALUE_REGNO_P).
+
+ * svr4.h: Fix misspelled variable name labelno (was labeno).
+
+Fri Dec 13 09:07:22 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-typeck.c (build_component_ref): Call `assemble_external' as
+ nec.
+ (build_function_call_real): Call `assemble_external' as nec. for
+ function calls we build. Code slightly rearranged for clarity.
+ * cp-call.c (build_method_call): Call `assemble_external' as nec.
+
+Thu Dec 12 22:03:52 1991 Eric Youngdale (youngdale at v6550c.nrl.navy.mil)
+
+ * make-cc1.com: Change message given to user. Change c-parse_tab.*
+ to c-parse.*
+
+ * config-gcc.com: Purge excess versions of version.opt.
+
+Thu Dec 12 20:25:20 1991 Michael Meissner (meissner at osf.org)
+
+ * Makefile.in (BOOT_CFLAGS): Remove quotes around the argument,
+ since this causes a syntax error when it is later expanded.
+
+Thu Dec 12 17:53:55 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * config.subr: Add many new machines and some OS's.
+
+ * va-i860.h: Rewrite from rfg.
+
+ * toplev.c (main): Handle -dm on USG systems.
+
+ * m68k.c (print_operand, print_operand_address): New functions.
+ * m68k.h (PRINT_OPERAND, PRINT_OPERAND_ADDRESS): Just call them.
+
+ * m68k.c (S_*, D_*): Delete the #undefs at the end.
+
+ * stmt.c (expand_return): Special case if fcn returns void.
+
+ * objc-actions.c (build_objc_method_call): Fix typo in NeXT case.
+
+ * expr.c (expand_builtin, BUILT_IN_ARGS_INFO): Cast init of word_ptr.
+
+ * protoize.c: Delete the `extern "C"' for C++ compilation.
+
+Thu Dec 12 10:01:13 1991 Michael Meissner (meissner at osf.org)
+
+ * gbl-ctors.h (DO_GLOBAL_CTORS_BODY): Fix off by one error in
+ handling the constructor list when a valid count is supplied.
+
+ * collect2.c (write_hooks): Emit a count before the list of
+ constructors, to go back to the old format.
+
+ * collect-osf.c (write_s_file): Emit a count before the list of
+ constructors, to go back to the old format.
+
+ * gnulib2.c (exit): Provide default defintions as bss symbols for
+ all of the constructor/destructor related symbols if the macro
+ INIT_SECTION_ASM_OP is not defined. The second link that collect
+ does and/or gld will provide the right values.
+
+ * decrose.h (HAVE_ATEXIT): Nuke macro, no longer used.
+ * encrose.h (HAVE_ATEXIT): Nuke macro, no longer used.
+ * i386rose.h (HAVE_ATEXIT): Nuke macro, no longer used.
+
+Thu Dec 12 07:27:05 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * gbl-ctors.h (__CTOR_LIST__, __DTOR_LIST__): Renamed from *_BEGIN__.
+ * collect-osf.c collect2.c: Rename here as well.
+
+Thu Dec 12 04:15:22 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-parse.y (stmt): Make asm alternatives allow expr.
+ * c-typeck.c (c_expand_asm_operands): Get the STRING_CST from the expr.
+
+ * c-parse.y (datadecl, datadecls, lineno_datadecl): New rules.
+ (xdecls): Use them.
+
+Wed Dec 11 18:36:53 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * gbl-ctors.h (DO_GLOBAL_CTORS_BODY): Just one definition; use ON_EXIT.
+ Test for -1 and handle both kinds of table format.
+ * gnulib2.c (__do_global_dtors): Check for -1...
+ (__do_global_ctors): Dummy defn of ON_EXIT if no other defined.
+ (__main): Do nothing if called again.
+ (exit): Use EXIT_BODY if defined.
+ * crtstuff.c (__CTOR_LIST__, __DTOR_LIST__):
+ Renamed from *_BEGIN__. Add -1 as first elt.
+ (__CTOR_END__, __DTOR_END__): Add 0 as last elt.
+ (ON_EXIT): Dummy defn if no other is defined.
+
+Wed Dec 11 18:08:36 1991 Mark Eichin (eichin at cygnus.com)
+
+ * cp-parse.y (template_parm): removed some reduce/reduce conflicts
+ by noting which of identifier or identifier_defn would actually be
+ passed up in this context.
+
+Wed Dec 11 17:52:46 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * flow.c (propagate_block): Adjust loop depth if it is changed in
+ notes at the end of a block.
+ Abort if loop depth ever reaches zero.
+
+Wed Dec 11 16:30:09 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * cccp.c (do_endif): Don't call record_control_macro at top level.
+
+Wed Dec 11 14:45:42 1991 Mark Eichin (eichin at cygnus.com)
+
+ * cp-decl.c (set_identifier_type_value): If we're in a
+ class_binding_level, shadow the type there.
+ (xref_defn_tag): New function. Calls xref_tag with special flag set
+ to indicate that we know we're defining something.
+ (pushdecl_top_level): if class_binding_level is set, search from it
+ instead of only from current_binding_level when trying to find
+ shadowed values. This is in support of tests m5.cc through m8.cc,
+ which broke after the changes for m9.cc were installed.
+
+ * cp-spew.c (do_aggr): New function. Looks ahead from AGGR to see if
+ we have AGGR identifier { or AGGR identifier : which are both
+ definitions, and passes up identifier_DEFN instead. This is in
+ support of test m9.cc.
+ (yylex): add SPEW_DEBUG case after EMPTY, so we don't have gaps in
+ the displayed stream.
+ (yylex, case AGGR): added call to do_aggr.
+ (debug_yychar): added call to debug_yytranslate for proper
+ translations.
+
+ * cp-parse.y (debug_yytranslate): New function to support SPEW_DEBUG
+ translations.
+ (TYPENAME_DEFN): new token, TYPENAME seen by do_aggr.
+ (IDENTIFIER_DEFN): new token, ditto.
+ (PTYPENAME_DEFN): new token, ditto.
+ (identifier_defn): corresponds to identifier, but when the
+ identifier has been seen by do_aggr.
+ (named_class_head_sans_basetype_defn): specially recognize aggr
+ identifier_defn.
+ (named_class_head): add parallel clauses calling xref_tag_defn when
+ we know we're defining this aggr.
+ (named_class_head_sans_basetype_defn_either): for when we don't care
+ if it is a defn or not (such as templates)
+ (identifier_either): ditto.
+
+ * cp-tree.h (xref_defn_tag): New declaration.
+
+Wed Dec 11 12:37:51 1991 Ken Raeburn (Raeburn@Cygnus.COM)
+
+ * cp-parse.y (label_colon): New nonterminal, with all label prefixes
+ from "stmt" moved here.
+ (stmt): Use it. Also provide useful message for label followed by
+ end of block (close-brace).
+
+ * cp-init.c (BIVN): Deleted unused variable.
+ * cp-decl.c (init_decl_processing): Don't declare function
+ __builtin_vec_new; it's never used.
+
+Wed Dec 11 10:59:48 1991 Michael Meissner (meissner at osf.org)
+
+ * toplev.c (main): Complete last change from RMS, use variable
+ 'level' which used to be named 'arg'.
+
+ * gbl-ctors.h (DO_GLOBAL_CTORS_BODY): Don't reference ON_EXIT for
+ those poor systems without atexit or on_exit.
+
+Wed Dec 11 09:06:52 1991 Jeffrey A. Law (law at wombat.gnu.ai.mit.edu)
+
+ * m68k.c (output_function_prologue, output_function_epilogue):
+ When saving/restoring only 2 registers, do so with two "movel"
+ instructions instead of a single "moveml". This results in
+ faster code for the 68020 and later machines.
+
+Wed Dec 11 06:45:08 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * x-romp (MAKE): Add definition; the supplied `make' doesn't define it.
+
+Tue Dec 10 22:17:50 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): Always make a copy of I2's pattern if
+ it will be used in a PARALLEL (`added_sets_2' nonzero).
+
+ * Makefile.in (BOOT_CFLAGS): New parameter.
+ (bootstrap*): Use it.
+
+ * flow.c (find_basic_blocks): Set depth of last insn, not first,
+ into basic_block_loop_depth.
+ (propagate_blocks): Use consistently with new definition.
+
+ * cse.c (cse_end_of_basic_block, cse_basic_block): Remove previous
+ change; it can cause loops following around branches.
+
+ * Makefile.in (USER_H): Add va-hp9k8.h.
+
+Tue Dec 10 17:22:01 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k*.h: Include svr3.h as the default. m88kv4.h and m88kdgux.h
+ include svr4.h. Override svr[34].h as needed.
+ * t-m88k, t-m88kv4: Specify EXTRA_PARTS.
+
+ * m88k.c (uses_arg_area_p): Check current_function_varargs.
+
+Tue Dec 10 15:41:03 1991 Michael Meissner (meissner at osf.org)
+
+ * osf-main.c (whole file): Delete, since the constructor stuff was
+ moved to gnulib2.c.
+
+ * Makefile.in (collect2, collect2.o): Change to use the default
+ compiler to build collect2, instead of the newly built GCC, since
+ otherwise, collect2 will create a circular dependency. Also, pass
+ LDFLAGS when linking.
+
+ * collect-osf.c (write_s_file): Change to the new way of doing
+ constructors and destructors of having an end marker instead of a
+ count.
+
+ * collect.c (REAL_AS_PATH, REAL_LD_PATH, REAL_NM_PATH): New macros
+ to allow cross compilers to specify where the real linker,
+ assembler, and nm live.
+ (NM_FLAGS): New macro to allow a configuration to change what flags
+ get passed to nm.
+ (alloca defines): Remove alloca defines, since config.h provides
+ them.
+ (write_hooks): Change to the new way of doing constructors and
+ destructors of having an end marker instead of a count. Cast all
+ alloca calls to be the appropriate pointer type. Put both
+ constructors and destructors into the data section, because the MIPS
+ tools do not like non-instructions in the .text section.
+
+ * decrose.h (HAVE_ATEXIT): Define, OSF/1 has atexit.
+ (FULL_PROTOTYPES, NO_CONST_IN_SYSCALL): Remove, no longer used.
+
+ * encrose.h (HAVE_ATEXIT): Define, OSF/1 has atexit.
+ (FULL_PROTOTYPES): Remove, no longer used.
+
+ * i386rose.h (HAVE_ATEXIT): Define, OSF/1 has atexit.
+
+ * t-decrose (LIB2FUNCS_EXTRA): Remove, osf-main.c is no longer
+ needed, since constructor/destructor support moved into gnulib2.c.
+
+ * t-encrose (LIB2FUNCS_EXTRA): Remove, osf-main.c is no longer
+ needed, since constructor/destructor support moved into gnulib2.c.
+
+ * t-i386rose (LIB2FUNCS_EXTRA): Remove, osf-main.c is no longer
+ needed, since constructor/destructor support moved into gnulib2.c.
+
+ * t-decstatn (CCLIBFLAGS, GNULIB2_CFLAGS): Define so that gnulib1
+ and gnulib2 are both compiled with -G 0, in case the users compiles
+ and links this way. It also fixes a bug where the constructors and
+ destructors that collect2 produces are in the big data section, but
+ gnulib2 thinks they are in the small data section, because it only
+ sees a pointer.
+ (ld): Add -f to remove old ld link to collect2, if it exists.
+
+ * t-mips (CCLIBFLAGS, GNULIB2_CFLAGS): Define so that gnulib1
+ and gnulib2 are both compiled with -G 0, in case the users compiles
+ and links this way. It also fixes a bug where the constructors and
+ destructors that collect2 produces are in the big data section, but
+ gnulib2 thinks they are in the small data section, because it only
+ sees a pointer.
+ (ld): Add rule to link collect2 to ld.
+ (EXTRA_PASSES): Build collect2 (aka ld).
+
+ * xm-mips.h (alloca): If not GNU C, declare alloca to be char *.
+
+ * mips-tfile.c (add_aux_sym_tir): Move code to record bitfield size,
+ so that it agrees with MIPS ECOFF practice, rather than the
+ documentation, which affects enum bitfields. Changes from Per
+ Bothner.
+
+Tue Dec 10 14:10:10 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * gbl-ctors.h (DO_GLOBAL_CTORS_BODY): Get rid of __reverse_order, etc.
+ * gnulib2.c (__do_global_dtors): Remove & before arrays.
+
+ * configure: Set a default value for xm_file.
+ Remove redundant defaulting of cpu_type.
+
+ * svr4.h (ASM_DECLARE_FUNCTION_SIZE): Output internal label properly.
+
+ * function.c (assign_parms): Set current_function_args_info.
+ * output.h: Declare that var.
+ * tree.h (BUILTIN_ARGS_INFO): Renamed from BUILT_IN_VARARGS.
+ * expr.c (expand_builtin): Implement __builtin_args_info.
+ * c-decl.c (init_decl_processing): Declare it.
+ * va-i860.h: Use it.
+ Also update order of elements in struct __va_ctl.
+
+ * toplev.c (main): Eliminate -gsdb and -gdbx.
+ Clean up setting of use_gdb_dbx_extensions.
+
+Tue Dec 10 10:33:58 1991 Tom Wood (wood at gen-rtx)
+
+ * svr4.h (ASM_DECLARE_FUNCTION_SIZE): Use an internal label.
+
+Tue Dec 10 07:12:28 1991 James Van Artsdalen (james@raid)
+
+ * Makefile.in (crtbegin.o, crtend.o): crstuff.c is in $(srcdir).
+
+Tue Dec 10 06:56:26 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl.c (kept_level_p): New function, borrowed from c-decl.c.
+ * cp-parse.y (compstmt): Call it.
+
+Mon Dec 9 18:37:32 1991 Ken Raeburn (Raeburn@Cygnus.COM)
+
+ * cp-decl.c (grok_enum_decls): Don't give warning for class-local
+ enum types; this is a perfectly reasonable usage.
+
+Mon Dec 9 12:23:48 1991 Ron Guilmette (rfg at ncd.com)
+
+ * toplev.c (main): Check that no extra chars follow the level #
+ in a -gNNN option. Also check that the debugging level requested
+ is between 0 and 3 (inclusive).
+
+Mon Dec 9 20:34:48 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * sched.c (schedule_block): Don't crash if `line' is zero.
+ (schedule_insns): Initialize line_note_head.
+
+Mon Dec 9 15:31:46 1991 Michael Meissner (meissner at osf.org)
+
+ * mips-tfile.c (pseudo_ops array): Correctly size the .stabs and
+ .stabn elements.
+
+ * mips.c (function_prologue, function_epilogue): Use assemble_name
+ to print the current function, instead of fprintf, in case there is
+ a leading '*'.
+
+ * mips-news.h (CPP_PREDEFINES): Define news3700, not news7300.
+
+ * mips.md (ashldi3_internal3): Fix typos.
+ (ashrdi3_internal3): Ditto.
+ (lshldi3_internal3): Ditto.
+
+Mon Dec 9 11:49:52 1991 Torbjorn Granlund (tege at hal.gnu.ai.mit.edu)
+
+ * longlong.h (__a29k__ udiv_qrnnd): Change "q" to "1" for operand
+ 2 constraint.
+
+Mon Dec 9 11:22:58 1991 Ken Raeburn (Raeburn@Cygnus.COM)
+
+ * cp-typeck.c (build_x_function_call): A method might have type
+ pointer-to-method as well. Don't build an OFFSET_REF for any
+ "function" that already has pointer type. Only use
+ DECL_CLASS_CONTEXT to find type of `this' for FUNCTION_DECLs; for
+ method pointer expressions, look up the basetype of the method type.
+ (build_unary_op): Fix comment in typo.
+
+ * cp-tree.c: Fix typo in comment at start of file.
+
+Mon Dec 9 07:17:13 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_insn): When a jump is converted to unconditional,
+ delete the dead code, but leave the notes.
+ (cse_basic_block, cse_end_of_basic_block): Some unconditional jumps are
+ part of the basic block.
+ (cse_basic_block): Add missing arg to cse_end_of_basic_block call.
+
+Mon Dec 9 07:16:15 1991 Ron Guilmette (rfg at ncd.com)
+
+ * sys-types.h: New file.
+ * sys-protos.h: New file.
+ * SYSCALLS.c: Just include those files.
+
+ * protoize.c (VOLATILE): Define this symbol conditionally so that
+ it can be used to declare GNU `volatile' functions.
+ (abort): Added VOLATILE extern declaration (but not if it's a macro).
+ (kill, fork): Added extern declaration.
+ (substr): Declare c as int.
+
+ * gbl-ctors.h: New file.
+ * crtstuff.c: Include gbl-ctors.h.
+ (INIT_SECTION_ASM_OP): Delete default definition.
+ Only compile .init section code if INIT_SECTION_ASM_OP is defined.
+ (pointer): Globally changed to `func_ptr'.
+ * Makefile.in (crtbegin.o, crtend.o, gnulib2): Depend on gbl-ctors.h.
+ * gnulib2.c: Added definition of __builtin_saveregs for i860/svr4
+ and fixed up definition of __builtin_saveregs for i860/non-svr4.
+ (__bb_avoid_warning): Added explicit return type.
+ (__builtin_new, __builtin_vec_new, __builtin_delete,
+ __builtin_vec_delete): Use `void*' where appropriate.
+ (exit): Change conditional to ON_EXIT. Make dummy if no real exit.
+ Include gbl-ctors.h.
+ (__main): Change conditional to INIT_SECTION_ASM_OP.
+ (__do_global_ctors): Conditional on INIT_SECTION_ASM_OP.
+ Use DO_GLOBAL_CTORS_BODY for the guts.
+ Include gbl-ctors.h.
+
+Mon Dec 9 01:07:56 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * fixinc.svr4: Don't change #ident or assertion tests.
+ Don't install inline.h.
+
+ * c-common.c (get_directive_line): Declare c as int.
+
+ * configure: Create additional file tconfig.h.
+ * protoize.c: Include that, not tm.h.
+ * Makefile.in (protoize.o, unprotoize.o): Depend on tconfig.h.
+
+ * svr4.h (HAVE_ATEXIT): Defined.
+ * gnulib2.c (_main, exit): Use HAVE_ATEXIT to control use of atexit.
+
+ * final.c (final_scan_insn): Output first and last note in a series.
+
+ * objc-actions.c (build_objc_method_call):
+ New arg LOOKUP_OBJECT.
+ (build_message_expr): Pass RECEIVER for LOOKUP_OBJECT.
+ Pass RECEIVER or self_decl as OBJECT.
+
+ * unx386.h (PRINT_IMMED_PREFIX, PRINT_OFFSET_PREFIX): Deleted.
+
+ * rtl.h: Undef FLOAT.
+
+ * svr4.h (ASM_DECLARE_OBJECT_NAME, ASM_DECLARE_FUNCTION_SIZE):
+ Fix typo.
+
+Sun Dec 8 21:46:51 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * protoize.c (main): Declare `value'.
+ (abspath): Declare endp. Declare and set outp and inp.
+
+ * cp-decl.c (sigsegv): Function deleted.
+ (init_decl_processing): Don't use it.
+ Also don't include signal.h.
+
+ * t-svr4: New file.
+ * configure (i386-*-sysv4*, i860-*-sysv4*): Use that file.
+
+Sun Dec 8 12:01:36 1991 Ron Guilmette (rfg at ncd.com)
+
+ * fixinc.svr4: New file.
+
+ * final.c (profile_function): Specify return type.
+ (get_attr_length): Added a return statement to prevent warnings.
+
+ * final.c (final_scan_insn): Switch to .text section before output
+ of jumptable lable (if requested by JUMP_TABLES_IN_TEXT_SECTION).
+ Don't switch sections again after the label.
+
+ * configure (i386-*-sysv*): Configuration deleted.
+ (i386-*-sysv3, i386-*-sysv4, i860-*-sysv3, i860-*-sysv4):
+ Added assignment to `tmake_file' (to pick up def of EXTRA_PARTS).
+ (i860-*-sysv3, i860-*-sysv4): Added assignment to `xmake-file'.
+ (i860-*-sysv3): Deleted bogus GAS related stuff.
+
+ * combine.c (combinable_i3pat): Added explicit return type.
+
+ * i860.h (TARGET_FPU): Deleted this target flag. i860 fpu is on chip.
+ (TARGET_XP): New target flag for XR and XP models.
+ (TARGET_FLAGS, HARD_REGNO_MODE_OK): Adjusted for above changes.
+ (REG_ALLOC_ORDER): Use first the regs less likely for other purposes.
+ (LITERAL_COMPARE_BETTER_UNSIGNED): Defined.
+ (BRANCH_COST): Defined.
+ (CC_ONLY_*): Deleted these obsolete defines.
+ (CC_NEGATED): Added for IEEE behavior with cmpgesf and cmplesf.
+ (ASM_OUTPUT_CASE_LABEL):
+ Added .align so assembler doesn't barf on subsequent .long(s).
+ (FLOAT_TYPE_VALUE, INTIFY, FLOATIFY, FLOAT_ARG_TYPE):
+ Added definitions needed to build a useable gnulib1 library.
+
+ * i860.md: Removed all references to CC_ONLY_* symbols.
+ (cmpledf, cmpgedf): Adjusted assembler code as suggested
+ by i860 manuals, for IEEE results.
+ (cbranch, flipped_cbranch, inverse_cbranch, flipped_inverse_cbranch):
+ Check for CC_NEGATED.
+ (bte, btne patterns): Complete rewrite.
+ (anonymous sign-extend patterns): Moved before the named patterns.
+
+ * i860.md (addsi3, subsi3): Disparaged alternatives with a floating-
+ pointer input register to avoid complicated reloading problem.
+ (negsi2): Deleted bogus `I' constraint on operand 1.
+ (divdf3, divsf3): Added additional continuation characters
+ needed to make lines acceptable to `read_rtx' in the gen* programs.
+
+ * i860.c: Include "flags.h" to get access to `optimize' flag.
+ (leaf_function_p): Added extern declaration.
+ (zero_operand): New function.
+ (must_preserve_r1, must_preserve_bytes): New variables.
+ (function_prologue, function_epilogue):
+ Support treatment of return-address reg (r1) in leaf functions.
+
+ * i860v4.h (CPP_PREDEFINES): Add pre-assertions for i860/svr4.
+ (CPP_SPEC): Deleted definition.
+ (TYPE_OPERAND_FMT): New definition.
+ (ASM_OUTPUT_FUNCTION_PREFIX): #undef before defining.
+ (ASM_OUTPUT_EPILOGUE_SUFFIX): Deleted obsolete macro.
+ (CTORS_SECTION_ASM_OP, DTORS_SECTION_ASM_OP,
+ TDESC_SECTION_ASM_OP, EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS,
+ TDESC_SECTION_FUNCTION): Definitions added.
+
+ * i860v3.h: Complete rewrite. Uses svr3.h.
+
+ * i386v4.h: Don't include i386v.h. Include i386.h instead.
+ (SDB_DEBUGGING_INFO): #undef deleted.
+ (ASM_OUTPUT_DWARF_STRING): Added definition.
+
+ * gcc.c (default_compilers): Pass -g* options to cpp.
+
+ * gcc.c (do_spec_1): Don't duplicate -A options in CPP_PREDEFINES.
+
+ * gnulib2.c (exit, __main, __do_global_dtors, __do_global_ctors):
+ New functions.
+
+ * i386.h (PRINT_IMMED_PREFIX, PRINT_OFFSET_PREFIX):
+ Define here, and use IP.
+
+ * i386.h: Don't include syms.h or define FILNMLEN.
+
+ * x-i860v3, x-i860v4: New files.
+ * x-i386v4 (CCLIBFLAGS, GCC_CFLAGS): Added definitions.
+
+ * xm-svr3.h: New file.
+ * xm-i86v3.h, xm-i86v4.h, xm-i386v.h: Rewritten.
+ * xm-i38v4.h: New file.
+
+ * svr4.h (LIB_SPEC): Make crtend.o come before any *crtn.o
+ file (to avoid hitting return without standard epilogue in .init code).
+ (INIT_SECTION_ASM_OP): Added definition for crtstuff.c (and friends).
+ (CTORS_SECTION_FUNCTION, DTORS_SECTION_FUNCTION):
+ Adjusted indentation of continuations to match those in rest of file.
+
+ * svr3.h (CPP_PREDEFINES): Don't define this here.
+ (ASM_FILE_START_1): Provide no-op default definition.
+ (ASM_OUTPUT_COMMON, ASM_OUTPUT_LOCAL): Undef these before defining.
+ (INT_ASM_OP, USE_CONST_SECTION, INIT_SECTION_ASM_OP,
+ CONST_SECTION_ASM_OP, CTORS_SECTION_ASM_OP, DTORS_SECTION_ASM_OP,
+ EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, READONLY_DATA_SECTION,
+ CONST_SECTION_FUNCTION, CTORS_SECTION_FUNCTION, DTORS_SECTION_FUNCTION,
+ ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR, SELECT_SECTION,
+ SELECT_RTX_SECTION): Definitions added.
+
+Sun Dec 8 15:27:56 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * next.c (handle_pragma): Use get_directive_line.
+
+ * gnulib2.c (__do_global_dtors, __do_global_ctors):
+ Remove the feature to control the order of execution.
+ This is not a clean solution to the overall problem.
+
+Sun Dec 8 14:47:44 1991 Michael Meissner (meissner at osf.org)
+
+ * mips-tfile.c (toplevel, add_local_symbol, parse_stabs_common):
+ More changes for smuggling stabs through from meissner@osf.org and
+ bothner@cygnus.com.
+
+ * mips.h (ignore_line_number): New global, set when we must avoid
+ putting out a MIPS ECOFF .loc because the file changed inside of a
+ function, and we are also putting out stabs, which can handle this.
+ (ASM_STABS_OP, ASM_STABN_OP, ASM_STABD_OP): Define to put a comment
+ in front of the pseudo op, if we are encapsulating stabs in MIPS
+ ECOFF.
+ (ASM_OUTPUT_SOURCE_FILENAME): Change to call mips_output_filename.
+ (ASM_OUTPUT_SOURCE_LINE): change to call mips_output_lineno.
+
+ * mips.c (toplevel): Include stab.h for encapsulating stabs.
+ (ignore_line_number): New global variable.
+ (reg_or_0_operand): Call register_operand for REG's as well as
+ SUBREG's.
+ (override_option): Don't allow ints in FP registers unless -mdebugh.
+ (mips_output_filename): New function to write the filename to the
+ assembler output. Add special support for encapsulating .stabs in
+ MIPS ECOFF.
+ (mips_output_lineno): New function to write the line number to the
+ assembler output. Add special support for encapsulating .stabs in
+ MIPS ECOFF.
+ (function_epilogue): Clear ignore_line_number.
+
+ * mips.md (fix_trunc??si_opt, mov??_internal): Change '!' constraint
+ back to '*'.
+
+Sat Dec 7 16:58:57 1991 Ken Raeburn (Raeburn@Cygnus.COM)
+
+ * cp-spew.c (scan_tokens): Stop scanning at semi-colon.
+
+ * cp-spew.c: Made SPEW_DEBUG code useable:
+ (yylex): Use stderr in SPEW_DEBUG code.
+ (yytags): Deleted table.
+ (debug_yychar): Print to stderr, and don't try finding translations
+ for values over 256.
+
+ * cp-class.c (push_lang_context): Fix typo in comment.
+
+ * cp-decl.c (finish_decl): Undo `pushclass' done in start_decl for
+ top-level decls of methods.
+
+ * cp-lex.c (restore_pending_input): Cast 0 to pointer type for
+ obstack_free.
+
+ * cp-pt.c (do_pending_expansions): Use TREE_USED instead of
+ TREE_ADDRESSABLE for functions. Put in comments explaining why we
+ compile unused methods of classes that are interface-unknown: the
+ file initializer/cleanup functions might need them.
+ (mumblefrotz): Delete unused function; this code is in cp-parse.y.
+
+Sat Dec 7 15:46:55 1991 Timothy Moore (moore@cs.utah.edu)
+
+ * function.c: Handle ARGS_GROW_DOWNWARD.
+ (pad_below, pad_to_arg_alignment, round_down): New subroutines.
+ (locate_and_pad_parm): Use them, for the existing case.
+ Also handle the ARGS_GROW_DOWNWARD case, using them.
+
+Sat Dec 7 15:46:55 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * tree.h (DECL_ARG_TYPE_AS_WRITTEN): New macro.
+ * c-decl.c (grokdeclarator): Store value there.
+
+ * m68k.c (output_function_prologue, output_function_epilogue):
+ Support MOTOROLA syntax.
+
+ * toplev.c (main): Testing for -ggdb catches -g also.
+ Default use_gdb_dbx_extensions to 1 for -gstabs, 0 for -gdbx.
+ Specified default is for -g.
+
+ * cccp.c (handle_directive): Store start address in directive_start.
+ (do_xifdef): Use that, checking if at start of file.
+ (do_endif): Compute ep properly.
+
+ * protoize.c (abspath): Fix errors referencing argument cwd.
+ (main): Allocate big enough buffer for getcwd.
+ Don't clobber varargs_style_indicator, copy it.
+ (savestring): New function.
+
+Sat Dec 7 00:53:16 1991 Ron Guilmette (rfg at ncd.com)
+
+ * c-decl.c (warn_redundant_decls, warn_nested_externs): New vars.
+ (c_decode_option): Support -Wredundant-decls and -Wnested-externs.
+ (pushdecl): Print those warnings.
+ * c-tree.h (warn_redundant_decls, warn_nested_externs): Declared.
+
+ * c-decl.c (pending_xref_error, c_mark_varargs): Added return type.
+
+ * cccp.c (main): Added code to support the presence of -A (assertion)
+ options within CPP_PREDEFINES.
+
+ * c-lang.c: Minor cleanups.
+
+ * c-lex.c (check_newline): Added support for the -g3 option.
+
+ * dwarfout.c (type_tag): Fixed bug in gcc Dwarf generation for
+ tagged types.
+
+ * dwarfout.c (output_decl): Added two pre-checks to see if nodes
+ are ERROR_MARK nodes before using them.
+
+ * dwarfout.c (generate_new_sfname_entry): Function added.
+
+ * dwarfout.c (lookup_filename): Call generate_new_sfname_entry
+ as soon as each new source filename is added to the list of
+ known filenames (thus avoiding an m68k forward-ref assembler bug).
+
+ * dwarfout.c (dwarfout_line): Initialize prev_file_entry_num to
+ (unsigned) -1 rather than zero to avoid bogus suppression of
+ first .debug_sfnames section entry.
+
+ * dwarfout.c (compare_filename_entries): Function deleted. (It's
+ no longer needed.)
+
+ * dwarfout.c (dwarfout_finish): Don't generate .debug_sfnames
+ section entries here anymore. (See lookup_filename.)
+
+ * Makefile.in (realclean): Delete c-parse.h.
+ Delete objc-parse.output just once.
+
+Fri Dec 6 17:49:28 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (FIXED_BASE_PLUS_P): The frame or argument pointer itself is
+ a fixed address.
+ (find_comparison_args): If we find something equivalent to a
+ fixed address, return the fixed address.
+
+ * combine.c (try_combine): Don't access new_i2_notes if it hasn't been
+ defined (it isn't defined unless newi2pat != 0).
+
+Fri Dec 6 16:01:02 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * rtl.h (enum reg_note): Define two new values REG_DEP_ANTI,
+ REG_DEP_OUTPUT, which are used to mark LOG_LINKS.
+ * rtl.c (reg_note_name): Likewise.
+ (add_dependence): Return void. New parameter DEP_TYPE to indicate
+ type of dependence.
+
+ * sched.c: Major rewrite to delete much obsolete code, correct many
+ comments, delete unused variables, etc. Modify all callers of
+ add_dependence to pass new argument. Significant changes are:
+ (reassign_dependence): Deleted, was unnecessary.
+ (priority): Account for type of dependence when calculating
+ priority.
+ (flush_pending_lists): New function. Encapsulate code which makes
+ dependencies between an INSN and every insn on the
+ pending_read_insns and pending_write_insns lists.
+ (rank_for_schedule): Account for type of dependence with last
+ scheduled insn when deciding which ready insn to schedule next.
+ (launch_link): Give all birthing insns the same priority.
+ (schedule_block): Only sort the ready list once, after all ready
+ insns have been added to it.
+ (schedule_block): When deciding what REG_DEAD notes are needed on a
+ just scheduled insns, process all sets first (sched_note_set) then
+ process all uses (attach_deaths_insn).
+ (attach_deaths): Simplified by above change.
+ (sched_note_set): Likewise.
+ (update_flow_info): Renamed from update_links, since it no longer
+ does anything with LOG_LINKS. Sched_analyze_insn creates all
+ necessary new LOG_LINKS already.
+ (schedule_insn): Delete no op move insns after reload.
+
+Fri Dec 6 13:33:48 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * crtstuff.c: Give permission to link with non-free programs.
+
+ * toplev.c (flag_inhibit_size_directive): New var and -f option.
+ * svr4.h (ASM_DECLARE_OBJECT_NAME, ASM_DECLARE_FUNCTION_SIZE): Use it.
+ * Makefile.in (crtbegin.o, crtend.o): Use that option. Use -g1.
+
+Fri Dec 6 08:42:53 1991 Ron Guilmette (rfg at ncd.com)
+
+ * Makefile.in (STAGESTUFF): Added __main and _exit to support g++.
+
+ * c-common.c (c_expand_expr_stmt): Made return type explicit.
+
+ * c-common.c: (get_directive_line): Function added to support -g3.
+
+Fri Dec 6 04:50:39 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-tree.h (OPERATOR_ASSIGN_CHARS_P): Flushed.
+ * cp-decl.c (grok_op_properties): Flush OPERATOR_ASSIGN_CHARS_P.
+ * cp-init.c (add_{friend,friends}): Ditto.
+
+Thu Dec 5 22:31:12 1991 Jeffrey A Law (law at super.super.org)
+
+ * m68k.h (CONST_COSTS): Show that constants which can be easily
+ generated are less expensive than most.
+
+ * m68k.md (movsi): Use two instruction sequences to load constants
+ which are just outside moveq's range (within 8 of moveq's range).
+ Likewise for positive even constants within twice moveq's range.
+
+Thu Dec 5 20:17:13 1991 Eric Youngdale (youngdale at v6550c.nrl.navy.mil)
+
+ * config-gcc.com: Generate a file 'version.opt' which will be given
+ to the VMS linker to put the gcc version number in the image
+ header version number field.
+
+ * make-cc1.com: Compile c-lex.c when building gcc and objc, and
+ add c-lex.obj to the list of files given to the linker.
+ Add version.opt to the list of files given to the linker.
+
+ * make-cccp.com: Add version.opt to the list of files given to the
+ linker.
+
+Thu Dec 5 23:04:20 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (make_extraction): Don't make a STRICT_LOW_PART of a MEM;
+ clean up comments so they agree with the code.
+
+ * combine.c (try_combine): Correct test for when we can safely change
+ the mode of a pseudo; can't if it doesn't die in I3.
+
+ * c-decl.c (WCHAR_TYPE_SIZE): Deleted; never used.
+ * c-common.c (WCHAR_TYPE_SIZE, WCHAR_BYTES): Deleted, no longer needed.
+ (combine_strings): Use size of `wchar_type_node' to get number of
+ bytes in wchar_t.
+ * next.h (WCHAR_TYPE_SIZE): Delete; no longer used.
+
+ * cse.c (cse_main): Add new argument to cse_basic_block_call.
+ Don't call cse_around_loop here.
+ (cse_basic_block): Call cse_around_loop from here while we still
+ have our arrays allocated.
+
+ * combine.c (simplify_comparison): Fix error in last change; don't
+ reference TEM before it is set.
+
+ * toplev.c (fatal_insn_not_found): Flush all files before aborting.
+
+Thu Dec 5 21:42:29 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * objc-actions.c (build_objc_method_call): Eval OBJECT and SELECTOR
+ only once. Always pass self_decl as self to the method.
+
+Thu Dec 5 14:52:16 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * ccrtstuff.c, gnulib2.c, protoize.c: Include tm.h not config.h,
+ since these are complied for the target, host defines do not apply.
+
+Thu Dec 5 14:52:24 1991 Michael Meissner (meissner at osf.org)
+
+ * dbxout.c (ASM_STABS_OP, ASM_STABN_OP, ASM_STABD_OP): If
+ not defined, define as .stabs/.stabn/.stabd respectively. Change
+ all places emitting stabs to use the macros.
+ * cp-decl2.c: Ditto.
+ * cp-gc.c: Ditto.
+ * final.c: Ditto.
+ * varasm.c: Ditto.
+ * gcc.texinfo: Document ASM_STAB[DNS]_OP macros.
+
+Thu Dec 5 12:03:40 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * gcc.c (process_command): Don't put `.' on startfile_prefix.
+ Cast result of alloca.
+
+ * config/*.h (ASM_OUTPUT_ASCII): Put parens around all uses of args.
+
+ * hp800.h, hp800.c, hp800.md, xm-hp800.h: New files.
+ * va-hp800.h: New file.
+ * gvarargs.h: Use va-hp800.h if needed.
+ * config.subr, configure: Add alternatives for hp800, hp700.
+
+Thu Dec 5 09:35:15 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-search.c (note_debug_info_needed): Do the right thing for
+ static member functions.
+
+Thu Dec 5 01:25:13 1991 Michael Tiemann (tiemann at mole.gnu.ai.mit.edu)
+
+ * version.c: Now 1.96.
+
+Wed Dec 4 23:17:23 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c (try_merge_delay_insns, fill_simple_delay_slots): Correctly
+ update NEXT_TRIAL after possibly splitting an insn.
+
+Wed Dec 4 17:03:11 1991 Jim Wilson (wilson at sphagnum.cygnus.com)
+
+ * gplus.gperf: Add throw and template keywords. Update private,
+ protected, and public definitions.
+
+ * print-tree.c (print_node): Add missing indentation argument to
+ print_node call for values field.
+
+Wed Dec 4 18:39:33 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * objc-actions.c (build_objc_method_call): Define as static.
+
+Wed Dec 4 17:04:49 1991 Michael Meissner (meissner at osf.org)
+
+ * mips-tfile.c (add_varray_page, alloc_type enum): Keep track of how
+ many pages we allocated for varrays as well as the small stuff.
+ (stabs_filename): New static to hold the special filename used for
+ passing stabs through.
+ (parse_stabs_common, parse_stabs, parse_stabn): New functions to
+ smuggle stabs through to the debugger. Stabs must be commented out,
+ just like the other debug directives.
+ (add_local_symbol): Check hash_ptr to see if it's null before
+ storing into it, in case no name is passed.
+ (add_file): Add support for the special stabs file.
+ (copy_object): Before copying the external symbols, figure out the
+ file indexes of each of the files, and then explicitly remap the
+ original file indexes of the external symbol to be the new file
+ index. If this isn't done, then bad file numbers can get generated
+ if a filename is repeated.
+ (various): Change the name of small_alloc to alloc_counts, since we
+ now track large memory allocations as well.
+
+ * mips-tdump.c (toplevel): Delete unnecessary include file stamp.h.
+
+Wed Dec 4 11:05:04 1991 Michael Collison (collison at osf.org)
+
+ * encore.h (ASM_OUTPUT_LABELREF_AS_INT): add definition
+ * ns32k.h: ditto
+
+ * ns32k.h (ASM_OUTPUT_LABEL, ASM_GLOBALIZE_LABEL): If COLLECT is
+ defined provide alternate definitions
+
+ * encrose.h (ASM_OUTPUT_INT): If COLLECT is defined provide
+ alternate definition
+
+Wed Dec 4 01:39:07 1991 Ken Raeburn (Raeburn@Cygnus.COM)
+
+ * cp-pt.c (end_template_decl): For method templates, pop the class
+ binding level before the others rather than after.
+
+ * cp-class.c: Added DEBUG_CP_BINDING_LEVELS code. Include cp-decl.h
+ if that symbol is defined, but don't list it in Makefile.in since
+ that's not the normal mode.
+ (pushclass): Print messages and frob indentation level.
+ (popclass): Likewise.
+
+ * cp-spew.c (yylex): If identifier_type says PTYPENAME, and
+ following token is "<", force looking_for_typename to be
+ non-negative.
+
+ * cp-pt.c (mangle_class_name_for_template): Drop extra spaces
+ between last parm and closing ">". Print a message before aborting
+ if a parm type isn't handled.
+
+ * cp-decl.c (maybe_globalize_type): Don't do it if the identifier
+ that names the type doesn't currently have a type value.
+
+Wed Dec 4 01:06:28 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl.c (finish_enum): Call `rest_of_type_compilation' for
+ ENUMTYPE.
+ * cp-class.c (finish_struct): Ditto.
+ * cp-decl.c (pushtag): Set TYPE_STUB_DECL.
+ * cp-search.c (note_debug_info_needed): Call
+ `rest_of_type_compilation' if we notice we need debug info for TYPE.
+ * dbxout.c (dbxout_init): Fix typo in comment.
+
+ * cp-parse.y (DOT_STAR): New token.
+ (expr_no_commas): Handle DOT_STAR expressions.
+ * cp-lex.c (real_yylex): Recognize DOT_STAR. Also, rearrange
+ scanner to make it more efficient.
+
+ * cp-decl.c (maybe_build_cleanup): When building cleanups, pass
+ TYPE_MAIN_VARIANT to `build_delete'.
+
+Tue Dec 3 22:52:33 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * flow.c (mark_set_1): Make a REG_UNUSED note not a REG_DEAD note
+ for the part of multi-word hard registers not needed.
+
+Tue Dec 3 22:34:13 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * configure: Support --objdir.
+
+ * objc-parse.y: Get rid of many static decls.
+ Reorder all token definitions to match c-parse.y.
+ (recognize_objc_keyword): New function.
+ * c-lex.c (token_buffer): No longer static.
+ (yylex): For @, call recognize_objc_keyword. Don't use keyword table.
+ * c-lang.c (recognize_objc_keyword): Dummy definition.
+
+ * objc-actions.c (build_objc_method_call) [!NEXT_OBJC_RUNTIME]:
+ Pass selector as arg to the method.
+ Always cast the method to a function type.
+
+ * xm-sparc.h (alloca): If using Sun CC, include alloca.h.
+ If using GCC, define as __builtin_alloca the way other machines do.
+
+ * cccp.c (print_containing_files): Print the nominal file names.
+
+Tue Dec 3 16:54:04 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (jump_optimize): If branches are expensive, convert jumps
+ around increments or decrements by one into an increment by the
+ conditional expression.
+
+ * combine.c (simplify_comparison): Don't remove a SUBREG unless
+ it doesn't affect either operand.
+
+ * cse.c (find_comparison_args): Rework so that we can correctly
+ fold comparisons on machines that set CC0 to the result of a
+ condition test, not just a COMPARE.
+ (cse_insn): Don't set THIS_INSN_CC0 to a constant if we don't know
+ its mode.
+
+Tue Dec 3 12:01:12 1991 Jim Wilson (wilson at sphagnum.cygnus.com)
+
+ * mips.md: Use AND not IOR in define_function_unit definitions.
+ Correct setting of MODE attribute in various insn patterns.
+
+Tue Dec 3 08:31:18 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-spew.c (scan_tokens): Delete Dec 2 change.
+ (yylex): Instead, copy TMP_TOKEN.YYLVAL.TTYPE if it was allocated on
+ the wrong obstack.
+ (probe_obstack): New function to support the above change.
+
+ * cp-tree.h (CLASSTYPE_DEBUG_REQUESTED): New flag.
+ (CLASSTYPE_ASM_WRITTEN): Deleted.
+ cp-class.c (finish_struct): Now almost always assume that classes
+ with methods are to ignored for debugging purposes.
+ cp-search.c (dfs_debug_{mark,unmarkedp}): Rewritten to handle new
+ algorithm for minimizing debug output.
+
+ * cp-decl2.c (constructor_name): Handle case when THING is a
+ UNION_TYPE.
+
+Tue Dec 3 06:35:38 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * jump.c (duplicate_look_exit_test): If REG_MAP is non-zero, call
+ replace_regs on the REG_NOTES of COPY.
+
+ * cp-spew.c (scan_tokens): Don't read past '='.
+
+ * cp-call.c (compute_conversion_costs): For now, treat
+ CONTRAVARIANCE_HARSHNESS as EVIL_HARSNESS, since we cannot tell the
+ difference between when we should accept it (pointers to the right
+ sort of methods) and when we shouldn't (base* to derived*
+ conversions).
+
+Mon Dec 2 18:53:42 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * cse.c (cse_around_loop): Fix typo in comment.
+ * dbxout.c (dbxout_type_fields): Likewise.
+
+ * sched.c (sched_analyze_1): Pass the second and third args of a
+ ZERO_EXTRACT or SIGN_EXTRACT in the SET_DEST to sched_analyze_2.
+
+ * combine.c (make_compound_operation): Change (lshiftrt (ashift ...))
+ to a ZERO_EXTRACT, not a SIGN_EXTRACT.
+
+Mon Dec 2 15:09:13 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * jump.c (jump_optimize): New arg AFTER_REGSCAN.
+ If not set, don't use duplicate_loop_exit_test.
+ * toplev.c (compile_file): Pass new arg to jump_optimize.
+
+ * next.h (SELECT_SECTION): Test TREE_CONSTANT as well as TREE_READONLY.
+
+ * xm-i86v[34].h: Renamed from xm-i860v[34].h.
+ * configure: Corresponding changes.
+
+ * m68k.c (output_function_epilogue): Put %R on all regs in asm_fprintf.
+
+ * t-decstatn (ld): Just copy collect2.
+ (collect): Target deleted.
+ (EXTRA_PASSES): Deleted collect.
+ (mips-tfile, mips-tdump): Depend on LIBDEPS.
+ * t-mips (mips-tfile, mips-tdump): Depend on LIBDEPS.
+ * collect2.c (main): Run /bin/ld.
+ Use fatal_perror where appropriate.
+
+ * objc-actions.c (build_message_expr): Fix typo.
+
+ * configure: Add missing fi to finish last change.
+
+ * cse.c (simplify_binary_operation): Restore missing break in case DIV.
+
+ * sdbout.c (sdbout_init): Explicitly do nothing.
+ (sdbout_typedefs): Function deleted.
+
+Mon Dec 2 12:504:35 1991 Eric Youngdale (youngdale at v6550c.nrl.navy.mil)
+
+ * config-gcc.com: Finish changeover from tm-*.h to *.h.
+
+Sun Dec 1 05:18:32 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-search.c (lookup_{field,fnfields}): If PROTECT is 0, don't
+ memoize the entry we find.
+
+ * cp-decl.c (grokvardecl): Call `build_lang_field_decl' instead of
+ `build_decl' if we retroactively allocate a VAR_DECL.
+
+Sun Dec 1 00:10:18 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * configure: Convert option syntax from + to --.
+ Support --target.
+
+ * i386v4.h (ASM_OUTPUT_LOCAL, ASM_OUTPUT_GLOBAL): Deleted.
+ (ASM_FILE_START): Deleted.
+ (STARTFILE_SPEC, LIB_SPEC, STANDARD_STARTFILE_PREFIX): Deleted.
+ (STDC_VALUE): Deleted.
+
+ * real.h (REAL_VALUE_TRUNCATE): Check for same size as SFmode.
+
+ * config/*.h: Renamed from tm-*.h. #includes and comments changed.
+ * configure: Changed accordingly.
+ * t-*: tm-*.h file names changed.
+
+ * gnulib2.c (__enable_execute_stack): Renamed function.
+ * convex.h (INITIALIZE_TRAMPOLINE): Use new name.
+
+Sun Dec 1 08:57:45 1991 Michael Meissner (meissner at osf.org)
+
+ * cccp.c (main): Add cast in front of alloca for non GCC compilers.
+
+Sat Nov 30 22:33:24 1991 Chris Smith (csmith@convex.com)
+
+ * config.subr: Recognize -c3*.
+ New alternatives for convex-c3*.
+ * configure: Alternatives for convex rewritten.
+
+ * gnulib2.c (__execute_enable_stack): New function for Convex only.
+
+ * gcc.c (do_spec_1): Use \ as quoting char.
+
+ * convex.h (TARGET_SWITCHES): Add new machine types c32, c34, c38.
+ Add flag TARGET_INDIRECTS, true for c1 and c2, false for c3.
+ * convex.h (GO_IF_LEGITIMATE_ADDRESS): Avoid indirect
+ addressing if ! TARGET_INDIRECTS.
+
+ * convex.h: (BITS_PER_WORD, UNITS_PER_WORD, WORDS_BIG_ENDIAN):
+ It now works to describe machine correctly.
+
+ * convex.h (SIZE_TYPE, PTRDIFF_TYPE): Make them ints rather
+ than longs to match usage in /usr/include.
+
+ * convex.h (enum reg_class): Add classes SP_REGS, the stack
+ pointer, and INDEX_REGS, the remaining A_REGS.
+ (REG_CLASS_NAMES, REG_CLASS_CONTENTS, REGNO_REG_CLASS): Adjust
+ for new classes.
+ (INDEX_REG_CLASS, BASE_REG_CLASS): Use INDEX_REGS so gcc will
+ not index off the stack pointer (register 0).
+
+ * convex.h (TRAMPOLINE_TEMPLATE, TRAMPOLINE_SIZE,
+ INITIALIZE_TRAMPOLINE): Define.
+
+ * convex.h (INITIAL_FRAME_POINTER_OFFSET): Define.
+
+ * convex.h (RTX_COSTS): Specify costs to prevent multiply
+ from being synthesized from shifts (which aren't faster).
+
+ * convex.h (NOTICE_UPDATE_CC): No need to do CC_STATUS_INIT,
+ cc is never looked at.
+
+ * convex.h (VTABLE_USES_MASK, VINDEX_MASK, SET_DECL_VINDEX):
+ define so g++ works.
+
+ * convex.h: If COLLECT is defined, define output macros for
+ collect to call.
+
+ * convex*.h: If !traditional, define _LONGLONG and 64-bit
+ typedefs to prevent types.h from murdering ansi compilations.
+
+ * convex.md (movsi): split into define_expand and two
+ anonymous define_insns, one that uses indirection and
+ one that doesn't. TARGET_INDIRECTS selects which.
+
+ * convex.c (output_call): New routine. Scan forward from call
+ to decide if AP is live, omit AP reload if not.
+ * convex.md (call, call_value): use output_call.
+
+ * convex.md (bit manipulation peepholes): remove, now done in
+ combine.
+
+ * convex.md (indirect_jump): Define.
+
+ * convex.c (const_double_{high,low}_int): Just return the
+ appropriate word, remove slow float computations.
+
+ * math-convex: New file to use builtin instructions.
+
+ * x-convex: Use cc -pcc to bootstrap gcc.
+
+Sat Nov 30 10:21:26 1991 Ron Guilmette (rfg at ncd.com)
+
+ * tm-i386v4.h (DBX_REGISTER_NUMBER): Different renumbering.
+
+ * tm-svr4.h (CTORS_SECTION_ASM_OP, DTORS_SECTION_ASM_OP): Changed
+ so that the progbits parameter actually appears in the definitions.
+
+ * tm-svr4.h (CTORS_SECTION_FUNCTION, DTORS_SECTION_FUNCTION): Adapted
+ for change in CTORS_SECTION_ASM_OP, DTORS_SECTION_ASM_OP.
+
+Sat Nov 30 07:05:06 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-spew.c (follows_{identifier,typename}): New arrays.
+ * cp-spew.c (init_spew): Initialize new arrays.
+ * cp-decl.c (lookup_name): takes new parameter PREFER_TYPE.
+ All callers changed.
+ * cp-spew.c (yylex): Set LOOKING_FOR_TYPENAME every time we see an
+ AGGR or ENUM.
+
+ * cp-lex.c (real_yylex): When composing EXTERN_LANG_STRING, call
+ `real_yylex', not `yylex'. Changed other places that depended on
+ calling `real_yylex' for their input.
+
+ * cp-spew.c (scan_tokens): Never read past '{' or ':'. Fill the
+ token buffer with EMPTY tokens in that case.
+ (yylex): Handle EMPTY tokens.
+
+ * cp-parse.y (structsp): Avoid using `yyungetc' to push a ';' back
+ on the input stream.
+ (START_DECLARATOR): New token.
+ (absdcl): Handle START_DECLARATOR.
+ * cp-spew.c (consume_token): Renamed from `discard_token'.
+ (struct token): Changed structure to make it smaller.
+ (spew_init): Renamed from init_spew. Now called from init_lex.
+ (scan_tokens): Renamed from slurp_next_token.
+ Many functions reformatted to match GCC indentation style.
+
+ * cp-lex.c (arbitrate_lookup): Don't guess in favor of type if
+ yychar is ')'.
+
+ * cp-decl.c (lookup_name): Fixed so that all binding levels use
+ `looking_for_typename' consistently.
+ * cp-type2.c (build_functional_cast): Handle new case that we are
+ called in a context where a method is appropriate (but we parsed it
+ as a ctor call).
+
+ * cp-call.c (CONST_HARSHNESS): Change bit that we test.
+ (convert_harshness,compute_conversion_costs): Call CONST_HARSHNESS
+ consisently when needed.
+
+ * cp-init.c (decl_constant_value): Keep enabled even when
+ CURRENT_FUNCTION_DECL is null.
+
+Sat Nov 30 01:23:38 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * sdbout.c (sdbout_init): Just call sdbout_one_type on each type.
+
+ * tm-att386.h (ASM_OUTPUT_ASCII): Output a space after ASM_BYTE_OP.
+ * tm-sun386.h: Likewise.
+ * tm-i386.h (ASM_OUTPUT_BYTE, ASM_OUTPUT_CHAR): Likewise.
+ (ASM_OUTPUT_SHORT, ASM_OUTPUT_LONG, ASM_OUTPUT_DOUBLE): Likewise.
+ (ASM_OUTPUT_FLOAT, ASM_OUTPUT_ADDR_VEC_ELT): Likewise.
+ * tm-att386.h (ASM_BYTE_OP, ASM_SHORT, ASM_LONG, ASM_DOUBLE):
+ Don't end with space.
+ * tm-sun386.h, tm-bsd386.h: Likewise.
+
+ * c-lex.h: Renamed from c-parse.h. All #includes changed.
+ * c-parse.c, c-parse.h: Renamed from c-parse.tab.*.
+ * Makefile.in: Changed accordingly.
+ (C_OJBS, realclean, TAGS): These changed too.
+
+ * tm-svr4.h (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS):
+ Undef before defining.
+
+ * tm-i386v4.h: Include tm-svr4.h.
+ (CPP_PREDEFINES): Define SVR4, and several assertions.
+ (LIB_SPEC): Delete -Qy. LINK_SPEC handles this.
+ (DBX_REGISTER_NUMBER): New macro.
+
+Fri Nov 29 22:16:06 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rs6000.md: Cannot use "muls" and "muli" to do widening multiply
+ from HImode to SImode; delete the 12 patterns that try to do this.
+
+Fri Nov 29 21:32:52 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-cvt.c (build_type_conversion): Don't assume that if
+ TYPE_HAS_{INT,REAL}_CONVERSION implies that CLASSTYPE_CONVERSION for
+ the given type combination is non-NULL.
+
+Fri Nov 29 16:08:22 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * crtstuff.c: New file. Needs papers from rfg.
+ * Makefile.in (crtbegin.o, crtend.o): New targets.
+
+ * objc-actions.c (build_message_expr): Lots of cleanups.
+ (build_objc_method_call): New subroutine.
+ Handles new option NEXT_OBJC_RUNTIME.
+
+ * expr.c (do_jump): Any LABEL_REF is nonzero.
+ (expand_expr): Construct LABEL_REFs with Pmode.
+
+Fri Nov 29 14:43:32 1991 Michael Meissner (meissner at osf.org)
+
+ * mips-tfile.c (parse_def): Change an error into a warning.
+
+ * mips.md (fix_trunc??si_opt, mov??_internal): Change '*' constraint
+ to '!' to keep reload from allocating FP registers from holding
+ excess integer values.
+ (ashift right define_splits): Fix typo, so that the long long
+ arithmetic right shifts are recognized.
+ (all define_splits): dummy out constraints, since they are not used.
+
+ * mips.c (override_options): Allow int's in FP registers again, now
+ that ! constraints are used.
+
+Fri Nov 29 13:20:13 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * dwarfout.c (output_compile_unit_die): Don't include the name
+ of the compiler which compiled the compiler in the AT_producer
+ string. It goofs up comparisons of stage2 & stage3 object files.
+
+ * c-parse.y, objc-parse.y: Don't declare position_after_white_space
+ as static; it is now in c-lex.c.
+
+Fri Nov 29 05:15:26 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl.c (xref_tag): Check that TREE_CODE (ref) is aggr type
+ before storing into CLASSTYPE_DECLARED_CLASS (ref).
+
+ * cp-decl2.c (build_push_scope): Don't let non-aggr types appear in
+ `cname::fname' expressions.
+
+ * cp-class.c (resolves_to_fixed_type_p): VAR_DECL and FIELD_DECL
+ nodes of ARRAY_TYPE may resolved to fixed type. Also handle other
+ cases of WITH_CLEANUP_EXPR.
+
+ * cp-spew.c (frob_identifier): Handle case of a type conversion
+ operator that converts to a nested type.
+
+ * cp-expr.c (cplus_expand_expr): In NEW_EXPR case, if ARGS is
+ permanent, build a new arglist instead of modifying it in place.
+
+ * cp-typeck.c (convert_arguments): Add ??? to comment about virtual
+ function conversions. ??? I don't understand what that code is
+ supposed to do anymore.
+ (comp_target_parms): If STRICT <= 0, accept types whose
+ TYPE_MAIN_VARIANTs are equal.
+
+ * cp-call.c (convert_harshness): Revamped to handle contravariance
+ better.
+ * cp-class.h (struct candidate): Declaration moved from cp-tree.h.
+
+ * cp-class.c (duplicate_tag_error): New function.
+ * cp-parse.y (LC): Call it if we're redefining a tag.
+ * cp-decl.c (duplicate_decls): Only copy DECL_ARGUMENTS from OLDDECL
+ if non-NULL. Otherwise we get nonsense when we try to parse
+ inline function bodies of classes that have already been redefined.
+ * cp-lex.c (reinit_parse_for_method): If we get some text for a
+ class that's been redefined, flush the text.
+ * cp-tree.h (TYPE_REDEFINED): New field in `struct lang_type'.
+
+ * cp-cvt.c (convert_to_integer): Only warn about anachronistic
+ conversion from int to enum if PEDANTIC is nonzero.
+
+ * cp-typeck.c (convert_for_initialization): No longer give warning
+ messages about bitwise copy: this is currently how the default X(X&)
+ constructor is implemented.
+ * cp-init.c (expand_aggr_init_1): Ditto.
+
+ * cp-method.c (dump_init): Handle WITH_CLEANUP_EXPR and TARGET_EXPR.
+ * tree.c (simple_cst_equal): Handle WITH_CLEANUP_EXPR. Correct
+ handling of TARGET_EXPR case.
+
+ * cp-decl.c (grok_reference_init): If DECL is permanent, make it's
+ DECL_REFERENCE_SLOT permanent as well.
+
+ * cp-cvt.c (build_type_conversion): If PEDANTIC, give message about
+ conversions which cast away const.
+
+ * cp-decl.c (store_return_init): If PEDANTIC, give error about named
+ return values.
+
+ * cp-init.c (decl_constant_value): Don't return DECL_INITIAL if
+ CURRENT_FUNCTION_DECL is null or if the initializer is a
+ CONSTRUCTOR.
+
+Thu Nov 28 05:29:52 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * integrate.c (expand_inline_function): When passing objects by
+ invisible reference, correctly compute the amount of space to be
+ allocated in the pseudo-frame we create for the inline function.
+
+ * cp-typeck.c (mark_addressable): Add call to
+ `mark_inline_for_output' that got lost in Nov 25 change.
+
+ * cp-decl.c (push_overloaded_decl): If the value of a name is an
+ ADDR_EXPR, look inside to get the _DECL node.
+
+ * cp-decl.c (grokdeclarator): Don't convert type of operators new
+ and delete to METHOD_TYPE; they remain FUNCTION_TYPEs.
+
+ * function.c (expand_function_start): Set TREE_REGDECL bit on
+ RESULT_DECL if result starts life in a register.
+
+ * c-common.c (truthvalue_conversion): Don't treat a CONVERT_EXPR as
+ a NOP when it or the expression inside it is of REFERENCE_TYPE.
+
+ * cp-class.c (finish_struct): Test DESTRUCTOR_NAME_P on
+ DECL_ASSMBLER_NAME, not DECL_NAME.
+
+Wed Nov 27 13:49:10 1991 Jim Wilson (wilson at sphagnum.cygnus.com)
+
+ * cse.c (simplify_relational_operation): Correct handling of
+ COMPARE as first argument. Always strip it off. Don't invert
+ return value for EQ when !HAVE_cc0.
+
+Thu Nov 28 20:08:15 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * gmon.c: New file.
+
+Thu Nov 28 15:02:24 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (subst, case SET): Never make a paradoxical SUBREG of
+ a REG unless the SUBREG and REG occupy the same number of words.
+
+ * emit-rtl.c: Include flags.h.
+ (operand_subword): Always look inside floating if -fpretend-float.
+ * final.c (split_double): Likewise.
+ * Makefile.in (emit-rtl.o): Includes flags.h.
+
+ * c-lex.c (yylex): Add goto to `L' case.
+
+Thu Nov 28 08:37:02 1991 Michael Tiemann (tiemann at mole.gnu.ai.mit.edu)
+
+ * tm-mips.h (ASM_OUTPUT_INT): Use `do {...} while (0)' so it can be
+ used in if/else constructs.
+
+Thu Nov 28 00:23:26 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * tree.h (BUILT_IN_FRAME_ADDRESS, BUILT_IN_RETURN_ADDRESS):
+ New function codes.
+ * c-decl.c (init_decl_processing): Declare the functions.
+ * expr.c (expand_builtin): Implement them.
+
+ * gcc.c: Pass to ld all the dirs in LIBRARY_PATH:
+ (library_prefix): New list of prefixes.
+ (process_command): Put dirs from LIBRARY_PATH on that list.
+ (do_spec_1): %D outputs those dirs.
+ (link_command_spec): Use %D after passing -L options.
+
+ * gcc.c (process_command): Don't require machine suffix
+ for dirs from COMPILER_PATH or LIBRARY_PATH.
+
+ * cccp.c (main): C_INCLUDE_PATH, etc., add dirs rather than replacing.
+
+ * Use the TYPE_DECLs to drive dbx and sdb output of type tags.
+ * toplev.c (rest_of_type_compilation): New function.
+ (compile_file): Pass list of initial decls to dbxout_init, sdbout_init.
+ (various): Don't call get_*_types.
+ * dbxout.c (dbxout_init): Get initial types from that list.
+ * sdbout.c (sdbout_init): Likewise.
+ * sdbout.c, dbxout.c: Don't call get_*_types.
+ (*out_typedefs): New subroutines.
+ * c-decl.c (finish_struct, finish_enum): Call rest_of_type_compilation.
+ (pushtags): Record TYPE_STUB_DECL.
+ * tree.h (TYPE_STUB_DECL): New macro.
+ * stor-layout.c (chain_type, get_permanent_types, get_temporary_types):
+ Deleted.
+ (save_storage_status, restore_storage_status): Don't frob chains.
+ (layout_type): Don't call chain_type.
+
+ * dbxout.c (dbxout_type_fields): Output `/'-spec after type tag
+ only if really needed.
+
+Wed Nov 27 18:52:55 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * expr.c (expand_expr): Typo in expand_end_bindings, in BIND_EXPR case.
+
+Wed Nov 27 23:10:48 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * cccp.c (main): Use savestring, not strdup.
+
+Wed Nov 27 17:10:17 1991 Michael Meissner (meissner at osf.org)
+
+ * mips.c (mips_load_reg3, mips_load_reg4): New global variables to
+ enable scheduling the second nop for the mfhi and mflo instructions.
+ (mips_hard_regno_mode_ok): New global array to give the results
+ of HARD_REGNO_MODE_OK for each register and mode.
+ (mips_fill_delay_slot): Instead of taking the number of nops as a
+ parameter, take an enumeration, giving what kind of delay this is.
+ If the next instruction is a label, put nops before label, not
+ after. Add support for mflo/mfhi, which need 2 nops if the next
+ instruction would modify the hi/lo registers.
+ (mips_move_1word, mips_move_2words): mips_fill_delay_slot calling
+ sequence changes. Pass mflo/mfhi to schedule nops.
+ (mips_move_2words): Move DImode to/from hi and lo registers is now
+ supported.
+ (function_arg): Correctly align long long parameters, just like
+ doubles. Also correct typo in debug code. Bug report from
+ lisa@MicroUnity.com.
+ (override_options): Initialize mips_hard_regno_mode_ok. Restrict
+ int's from going in the FP registers, to limit the register
+ allocator from allocating them instead of using memory. Also, make
+ the special registers (HI, LO, FPSW) only accept full sized ints, or
+ a double int for the HI:LO combination.
+ (compute_frame_size): Don't set the initialized member until reload
+ has completed, since otherwise the information may change.
+
+ * mips.md (various): Add 64 bit integer operations for addition,
+ subtraction, negation, and, inclusive or, exclusive or, one's
+ complement, shifts, and nor. Add 32x32->64 bit support for
+ multiply, which the compiler then uses to construct 64 bit
+ multiplies.
+ (mulsi3): Break mul into it's two instructions, and schedule the
+ two nops needed for the mflo instruction. Don't allow an integer
+ multiplier anymore.
+ (ffssi2): Delete define_expand, and use a second clobber'ed register
+ to preserve the original input, instead of (clobber (match_dup 1)).
+ (movsi_ulw): Change mips_fill_delay_slot calling sequence.
+ (movdi_internal): Allow DImode move from HI/LO to/from GP registers.
+ (movdi define_split): Add a define_split to separate the two parts
+ of DImode register pairs when using GP registers.
+ (movdf define_split): Add a define_split to separate the two parts
+ of DFmode register pairs when using GP registers.
+ (mov??_internal): Change condition to call memory_operand, instead
+ of just checking for MEM, which disallows (subreg (MEM)) during
+ the intermediate parts of the compilation. Reported by
+ lisa@MicroUnity.com.
+ (negsi2): Turn back into a real insn instead of just a
+ define_expand for subsi3.
+ (one_cmplsi2): Turn back into a real insn instead of just a
+ define_expand for norsi3.
+ (andsi3, iorsi3, xorsi3): Be more liberal than the real machine, and
+ allow 32 bit constants to improve the code generated for bitfields,
+ at the expense of potentially not moving the constant out of loops.
+ (various): Add = constraint to all clobbers.
+ (fix_trunc*): Go back to old method of using two clobbers, since
+ unoptimized compiles call abort otherwise, when returning the result
+ of truncating a float as a function result.
+
+ * tm-mips.h (delay_type): New enum to express different types of
+ delay slots.
+ (mips_load_reg3, mips_load_reg4): Declarations for more registers
+ to check for needing nops. Used by multiply/divide to schedule
+ the two nops needed after mfhi/mflo if the next instruction would
+ clobber the register.
+ (CONDITIONAL_REGISTER_USAGE): If -msoft-float, disable all FP
+ registers.
+ (MASK_DEBUG_G): Add comment saying -mdebugg turns of new DImode
+ patterns, in case the code is wrong.
+ (HARD_REGNO_NREGS): All FP registers use register pairs, so that
+ SF in a GP register takes only one register, and SI in a FP
+ register takes 2.
+ (HARD_REGNO_MODE_OK): Change macro to reference the array
+ mips_hard_regno_mode_ok, which is now built in override_options.
+ (CONST_OK_FOR_LETTER_P): 'N' is now for negative numbers, 'O' is
+ an exact power of 2, and 'P' is now for positive numbers.
+ (PREFERRED_RELOAD_CLASS): If -msoft-float, never prefer a FP
+ register.
+ (PREFERRED_RELOAD_CLASS_FM): Delete, since nobody uses it.
+ (FINAL_PRESCAN_INSN): Check for mips_load_reg3 and mips_load_reg4
+ being mentioned. Also add a missing tab when more than one delay
+ slot.
+ (CONST_COSTS): Make all constant ints cost 0 to lower register
+ pressure according to Richard Kenner.
+ (RTX_COSTS): Adjust costs for DI, SF, and DF modes, and add ABS/FFS
+ costs as well.
+ (REGISTER_MOVE_COSTS): Bump costs for moving between register
+ classes, so that reload doesn't try to store int type values in the
+ floating point registers.
+
+Wed Nov 27 15:01:52 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * config-gcc.com: Renaming of out-vax.c.
+ * make-cc1.com: Link dbxout with all languages. Add cp-spew.
+
+ * cccp.c (include_defaults_array): Fix typo.
+
+ * gstddef.h: Handle _STDDEF_H_.
+
+ * configure.bat, Makefile.dos: New files.
+
+ * c-lex.c: New file. All subroutines moved here.
+ (yylex): Small diffs between C and OBJC merged.
+ * c-parse.y, objc-parse.y: Deleted from here.
+ * c-lang.c (lookup_interface): New stub.
+ * Makefile.in (c-lex.o): New rule.
+ (OBJC_OBJS, C_OBJS): Changed for new files.
+
+Wed Nov 27 13:34:15 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * c-parse.y (yylex): Don't assume that long is 32 bits and long
+ long is 64 bits when warning for out of range integer constants,
+ and when creating a tree to represent integer constants.
+ * cp-lex.c (real_yylex): Likewise.
+ * objc-parse.y (yylex): Likewise.
+
+ * combine.c (simplify_comparison, ASHIFT case): Prevent shift by
+ HOST_BITS_PER_INT for inequality comparisons.
+
+ * fold-const.c (operand_equal_p): Arguments are not equal if
+ signedness differs. Conversions don't match if signedness differs.
+
+ * sparc.md (movsi, movhi, movqi, movdi): Prohibit matches that
+ would require reloading by the use of conditions.
+
+ * alloca.c (alloca): Add parens to make precedence clearer.
+
+ * tm-news.h (PRINT_OPERAND): Add 68040 support so that the compiler
+ will bootstrap.
+
+Wed Nov 27 09:41:13 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case MIN_EXPR): Fix typo in operand number
+ in safe_from_p call.
+
+ * recog.c (indirect_operand): Correctly handle case where we have
+ a (subreg (mem X) C) after reload.
+
+Tue Nov 26 16:24:03 1991 Ron Guilmette (rfg at ncd.com)
+
+ * dwarfout.c (output_enumeration_type_die): Handle a GNU C
+ language extension: incomplete enum types.
+
+ * dwarfout.c (output_type): Fixed bug which causes DIEs for
+ file-scope tagged types to be generated in a local-scope
+ under some conditions.
+
+ * dwarfout.c (dwarfout_init, dwarfout_finish): Moved code which
+ generates most of the .debug_aranges entries from dwarfout_init
+ into dwarfout_finish to avoid m68k assembler bug.
+
+ * Makefile.in (EXTRA_PARTS): New parameter.
+ (install-common): Compile the things in EXTRA_PARTS.
+ (GCC_PASSES, GCC_PARTS): New variables.
+ (STAGESTUFF, native, enquire, enquire.o): Use them.
+ (protoize, protoize.o, unprotoize, unprotoize.o, SYSCALLS.c.X):
+ (gnulib2.ready, collect2, collect2.o, getopt.o, getopt1.o): Likewise.
+
+ * tm-svr4.h (CPP_PREDEFINES): Don't define this here. Undef it
+ so that other files which include this one will be forced to
+ define it appropriately for the specific target and OS.
+ (CPP_SPEC): Deleted.
+ (LIB_SPEC): Add crtend.o as last thing linked in on each link-step.
+ (STARTFILE_SPEC): Add crtbegin.o as the first thing linked in.
+ (NO_DOLLAR_IN_LABEL): Added define. Most svr4's don't support $.
+
+ * tm-svr4.h: Added support for the .ctors and .dtors sections
+ (as for the m88k).
+ (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): New macros.
+ * tm-svr4.h (HERE_ASM_OP, ASM_DECLARE_FUNCTION_SIZE): Deleted
+ define of HERE_ASM_OP and made ASM_DECLARE_FUNCTION_SIZE not
+ try to use a dot when computing a function's size in a .size
+ directive (because Tom Wood says that 88open doesn't approve
+ of dot as an asm operand).
+
+ * x-genix, x-i386sco, x-xenix (INSTALL): Define as cp.
+
+Tue Nov 26 16:24:03 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * gcc.c (default_compilers): Pass -A* to cpp.
+
+ * Make names unique if unpacked on MSDOG.
+ * config/*.c: `out-' removed from all file names out-*.c.
+ * x-hp*: Renamed from x-hp9k*.
+ * tm-conv1.h, tm-conv2.h: Renamed from tm-convex*.h.
+ * tm-hp*.h: `9k' removed from these names.
+ * tm-isi*.h: `68' removed from these names.
+ * tm-i860b.h, tm-i860bg.h: `sd' removed.
+ * tm-i860g3.h: Renamed from tm-i860v3g.h.
+ * tm-i386sun.h: Renamed from tm-sun386i.h.
+ * tm-sun3o3.h, tm-sun4o3.h: Were tm-sun*os3.h.
+ * tm-sun3n3.h: Was tm-sun3os3nf.h.
+ * tm-sun3n.h: Was tm-sun3-nfp.h.
+ * tm-sun2o4.h: Was tm-sun2os4.h.
+ * xm-hp320.h: Was xm-hp9k320.h.
+ * xm-i386sun.h: Was xm-sun386i.h.
+ * configure: Adjust for those renamings.
+
+ * configure (m68000-hp-hpux*): Use xm-hp320.h.
+
+ * stmt.c (expand_value_return): New subroutine.
+ (expand_return): Use that.
+
+ * make-gcc.com: New name for make.com.
+
+ * stor-layout.c (layout_record): Return list of static members.
+ (layout_type): Lay them out here.
+
+ * expmed.c (init_expmed): Use 3 as shift count for shift_cost.
+
+ * x-sco: File deleted.
+
+ * print-tree.c (print_node): Always be brief for vector elts.
+
+Tue Nov 26 07:42:41 1991 Michael Tiemann (tiemann at rtl.cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Fix typo involving ~RID_STATIC.
+
+Mon Nov 25 21:51:09 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * optabs.c (emit_cmp_insn): If both operands are VOIDmode,
+ put first operand into register, not second.
+
+ * alliant.md, gmicro.md, i386.md, m68k.md, ns32k.md, pyr.md:
+ Don't allow a constant as the first operand to tstxx insns.
+ * tahoe.md, vax.md: Likewise.
+ * convex.md: Remove erroneous comment on tstsi.
+
+Mon Nov 25 20:51:00 1991 DJ Delorie (dj@ctron.com)
+
+ * cccp.c (main): Look in env vars to override header dir list.
+ * gcc.c (process_command): Likewise.
+
+ * gcc.c (execute): Alternate way to get status on MSDOS.
+ Error for -pipe on MSDOS.
+ (pexecute): Alternate definition for MSDOS.
+ (find_a_file): Handle new hook EXECUTABLE_SUFFIX.
+ (EXECUTABLE_SUFFIX): Add default definition, and alternate for MSDOS.
+ (P_tmpdir): Add default definition for MSDOS.
+
+Mon Nov 25 17:18:52 1991 Michael Collison (collison at osf.org)
+
+ * x-encrose: New file for mmax running OSF/1.
+ * t-encrose: ditto.
+
+ * ns32k.md (movsi): Use new constraint letters 'x' and 'y'
+ representing the frame and stack pointer.
+ (movhi,movqi): Add constraints and template code to allow moves
+ between the floating point and general purpose registers.
+
+ * tm-ns32k.h (REGISTER_MOVE_COST): Use this macro to discourage
+ moves between the floating point registers and the frame and stack
+ pointer. Also discourage moves between the fp and general registers.
+ (reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS,
+ REG_CLASS_FROM_LETTER): Add two new register classes representing
+ the frame pointer and stack pointer respectively.
+ (GO_IF_NONINDEXED_ADDRESS): Add check to see if register is also a
+ base register. This causes reload to reject pseudo registers when
+ REG_OK_STRICT is defined.
+
+ * tm-i386rose.h: New file for 386 running on OSF/1.
+ * x-i386rose: ditto
+ * t-i386rose: ditto
+
+ * config.subr: Added case for 'osf-'.
+ * configure: Added case for i386-osfrose
+
+ * tm-encrose.h (CC1_SPEC): Simplified so by default it passes nothing.
+ (ASM_SPEC): Changed so that under OSF/1 with NO_J_SWITCH defined
+ nothing is passed to the assembler.
+ (TARGET_DEFAULT): Changed so that, by default, no code is generated
+ using the static base (sb) register.
+ (OVERRIDE_OPTIONS): Removed in lieu of the new debug macros
+ PREFERRED_DEBUGGING_TYPE and DEFAULT_GDB_EXTENSION.
+ (DEFAULT_GDB_EXTENSIONS): Define it
+ (PREFERRED_DEBUGGING_TYPE): Use it.
+
+Mon Nov 25 17:18:52 1991 Jyrki Kuoppala (jkp at batman.hut.fi)
+
+ * ns32k.md (ashlhi3): use addw also on 32532 if shiftcount is 1.
+ (ashlqi3): likewise.
+ (addsi3): don't use addr instead of addd on the 32532.
+
+ * out-ns32k.c (calc_address_cost): don't assume unknown RTX codes
+ have XEXP's which are rtx's.
+
+ * ns32k.md (movsi): don't use addr for the 32532 immed displacements.
+ (shift patterns): fixed a typo with %$%n.
+
+ * out-ns32.c (calc_address_cost) new function.
+ tm-ns32k.h (ADDRESS_COST): call calc_address_cost.
+
+ * out-ns32k.c (print_operand_address): use error & debug_rtx if error.
+
+ * tm-ns32k.h (CONST_OK_FOR_LETTER_P): constraint 'I' shouldn't
+ match anything on the 32532 to make negative arithmetic left
+ shifts behave consistently.
+
+ * ns32k.md (subsf+1): don't use ajdspb on the 32532.
+
+ * tm-ns32k.h (CONST_OK_FOR_LETTER_P): positive values not OK for
+ constraint 'I' if on 32532.
+
+ * ns32k.md (ashl??): if TARGET_32532, use lsh{d,w,b}.
+
+ * ns32k.md (adjusting stack pointer): don't use ajdp{b,w} if not 32532.
+
+ * ns32k.md (isv,insv-1,insv-2,extzv): use constraint K instead of
+ n for offset.
+
+ * ns32k.md (insv-1): use only register_operand with constraint
+ "r" for operand 2, insd can't take constant offsets >= 8.
+ (pattern insv-2): added another insv-like pattern, for
+ offsettable operand.
+ (insv): constraint should be "+g".
+ (pattern before insv): installed an insv-like pattern
+ with operand 0 having register_operand and SImode.
+
+ * out-ns32k.c (print_operand): define as a void function.
+
+ * ns32k.md (call_value): use operands[1], not operands[0] to check
+ for CONSTANT_ADDRESS_P.
+
+ * out-ns32k.c (print_operand): eliminate
+ PRINT_OPERAND_EXTRACT_FLOAT, don't depend on HOST_WORDS_BIG_ENDIAN.
+
+ * tm-ns32.h (INDIRECTABLE_1_ADDRESS_P): use CONSTANT_ADDRESS_P,
+ not CONSTANT_P.
+
+ * tm-ns32k.h (GO_IF_LEGITIMATE_ADDRESS): checking for CONST_INT
+ is not right because displacements are not 32-bit. Use
+ CONSTANT_ADDRESS_NO_LABEL_P instead.
+
+ * tm-ns32k.h (output_move_double, output_shift_insn): New declarations.
+
+ * out-ns32k.c (print_operand_address): Use fatal for errors.
+
+ * ns32k.md (insv, extzv): Replaced with the pattern near insv in 1.40.
+
+ * out-ns32k.c (print_operand): function moved from tm-ns32k.h.
+ Modified to use PUT_IMMEDIATE_PREFIX, PUT_EXTERNAL_PREFIX; added
+ macro PRINT_OPERAND_EXTRACT_FLOAT.
+
+ * out-ns32k.c (print_operand_address): replaced the function with
+ a more clean version, written for gas syntax.
+
+ * ns32k.md (call): #if 0 code which was used when GAS_SYNTAX was not
+ defined.
+ (call_value): likewise.
+
+ * ns32k.md (pattern after ashrsi3): added % before $ so the
+ pattern works also for gas syntax.
+ (pattern after ashrhi3): likewise.
+ (pattern after ashrqi3): likewise.
+ (pattern after lshrsi3): likewise.
+ (pattern after lshrhi3): likewise.
+ (pattern after lshrqi3): likewise.
+ (pattern after rotrsi3): likewise.
+ (pattern after rotrhi3): likewise.
+ (pattern after rotrqi3): likewise.
+
+ * ns32k.md (movsf): put #ifndef GAS_SYNTAX part inside #if 0 since
+ for now we only use GAS syntax.
+
+ * tm-ns32k.h (INDIRECTABLE_2_ADDRESS_P): add TARGET_SB as a
+ condition in addition to CONSTANT_ADDRESS_P.
+
+ * tm-ns32k.h (MEM_REG): use CONSTANT_ADDRESS_P instead of GET_CODE
+ == SYMBOL_REG, add TARGET_SB to the second-part condition.
+
+ * ns32k.md (rotrsi3): fixed a typo NEGATE->NEG
+
+ * tm-ns32k.h: added a comment about CONSTANT_ADDRESS_P; it's not
+ strictly according to the spec.
+
+ * tm-ns32k.h: added defaults for ABSOLUTE_PREFIX,IMMEDIATE_PREFIX
+ etc, using gas syntax.
+
+ * out-ns32k.c: removed macro FP_REG_P.
+
+ * tm-ns32k.h: (ASM_OUTPUT_ALIGN_CODE): changed alignment from 4 to
+ 2 since GAS syntax is the default assembler syntax now.
+ (PRINT_OPERAND, PRINT_OPERAND_ADDRESS): defined to call
+ print_operand and print_operand_address in out-ns32k.c,
+ respectively.
+
+ * tm-ns32k.h: New macros TARGET_SB, TARGET_PIC.
+ Dummy code for trampolines, calls fatal().
+ Macro FP_REG_P moved here from out-ns32k.c.
+ Some reorganizations of blocks.
+ 68000 -> ns32k.
+
+ * tm-ns32k.h (TARGET_VERSION) says GAS syntax.
+ (TARGET_*) added some empty lines for clarity.
+
+Mon Nov 25 14:29:39 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * Makefile.in (aux-output.o): Depend on insn-codes.h.
+
+ * make-cc1.com: Handle print-rtl.c.
+
+ * toplev.c (warn_aggregate_return): New variable.
+ (W_options): Define option to set it.
+ * flags.h: Declare it.
+ * calls.c (expand_call): Print warning if value is aggregate.
+ * function.c (init_function_start): Likewise.
+
+Mon Nov 25 13:29:50 1991 Per Bothner (bothner at cygnus.com)
+
+ * cp-except.c (init_exception_processing): Fix return type of
+ longjmp (from int to void).
+
+Mon Nov 25 13:11:51 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * rtlanal.c (refers_to_regno_p): Check for `x == 0' on repeat.
+
+ * x-mips, xm-vms.h: Change cplus-* to cp-* in comments.
+ * x-tower (X_CFLAGS): Add missing `-'.
+
+ * unroll.c (unroll_loop): When simplifying loops executed only once,
+ use last_loop_insn not copy_end.
+
+Mon Nov 25 07:45:46 1991 Michael Tiemann (tiemann at rtl.cygnus.com)
+
+ * cp-except.c (init_exception_processing): Mark `ExceptionHandler'
+ constructor and destructor as being TREE_EXTERNAL, and mark the
+ `ExceptionHandler' type as being interface-only.
+
+ * cp-decl.c (maybe_globalize_type): Don't test TYPE_BEING_DEFINED
+ for ENUMERAL_TYPE.
+
+ * cp-class.c (modify_vtable_entry): Disable code which attempts to
+ encode in a vtable an indirection to another vtable entry.
+
+ * cp-call.c (build_method_call): Convert FUNCTION to
+ DECL_MAIN_VARIANT (FUNCTION) once we are going to use it for real.
+ * cp-init.c (build_delete): Use DECL_MAIN_VARIANT (DTOR). *
+ * cp-typeck.c (mark_addressable): Use DECL_MAIN_VARIANT (X).
+
+Mon Nov 25 00:41:14 1991 Per Bothner (bothner at cygnus.com)
+
+ * dbxout.c (dbxout_type): Tiemann's DECL_IGNORED_P optimization (Nov
+ 20) was a little too drastic: If it succeded, no type info was
+ emitted at all, which made for syntactically invalid stabs.
+ Instead, just set 'full=0',
+ * dbxout.c (dbxout_symbol): Re-write code for TYPE_DECL to be a
+ little cleaner. It *seems* to work ...
+
+Sun Nov 24 19:32:07 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * sched.c (update_links): Use PUT_REG_NOTE_KIND to change REG_NOTE.
+
+Sun Nov 24 14:53:37 1991 Ron Guilmette (rfg at ncd.com)
+
+ * cccp.c: Add `return 0;' statements to all do_* functions which
+ needed them to prevent spurious warnings. Also change plain
+ `return;' statements to `return 0;' statements where appropriate.
+
+Sun Nov 24 07:37:17 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_insn): When making equivalences of subparts of
+ a SET, avoid putting a (hard) register in the hash table twice,
+ each time with different modes.
+
+ * genrecog.c (write_tree_1,change_state): Don't check for a position
+ containing a '*' since we don't set it to that.
+ (main): Don't define recog_addr_dummy; no longer used.
+ * recog.c (recog_addr_dummy): No longer needed; wasn't actually used.
+ (init_recog_no_volatile, init_recog): Don't set recog_addr_dummy.
+
+ * expmed.c (store_split_bit_field, extract_bit_field): Abort if
+ operand_subword of target returns 0.
+ * expr.c (convert_move, move_block_from_reg, emit_move_insn): Likewise.
+
+ * combine.c (subst, case SUBREG): Don't allow making a SUBREG of
+ a hard reg in a mode not valid for that hard reg.
+ * emit-rtl.c (gen_lowpart_common, operand_subword): Likewise.
+
+ * expmed.c (extract_split_bit_field): Use operand_subword_force.
+ * expr.c (emit_move_insn): If operand_subword fails for non-const,
+ use operand_subword_force.
+
+ * expmed.c (expand_mult): Pass OP0 through protect_from_queue so we can
+ use it in a REG_EQUAL note and check it for being a MEM.
+
+ * rtl.def (SMIN, SMAX, UMIN, UMAX): New RTL codes.
+ * fold-const.c (const_binop, case MIN_EXPR, MAX_EXPR): Use MIN and MAX.
+ (fold, case MIN_EXPR, MAX_EXPR): Check for operands equal; check for
+ min (x, lowest-value-for-type) and max (x, highest-value-for-type).
+ (fold, case COND_EXPR): Look for conditionals that are equivalent
+ to ABS_EXPR, MIN_EXPR, or MAX_EXPR and convert them to the appropriate
+ expression.
+ * expr.h (smin_optab, smax_optab, umin_optab, umax_optab): New vars.
+ * gcc.texinfo (smin, smax, umin, umax): Add documentation.
+ * expr.c (expand_expr, case ABS_EXPR): Ignore ABS on unsigned types.
+ If jumps are expensive, we can do ABS with shifts and xors.
+ (expand_expr, case MIN_EXPR, MAX_EXPR): Try to do using new optabs.
+ * optabs.c (smin_optab, smax_optab, umin_optab, umax_optab):
+ Initialize new optabs.
+ * cse.c (simplify_binary_operation): New cases SMIN, SMAX, UMIN, UMAX.
+ * rs6000.md (sminsi3, smaxsi3, uminsi3, umaxsi3): New patterns.
+ * m88k.md (abssi2): Delete pattern; now done in expr.c.
+
+ * rs6000.md (scc): Correct typos in last change.
+
+ * expmed.c (expand_mult): TARGET will only be written once, so
+ function return register is OK.
+ Write a REG_EQUAL note so multiplications can be cse'ed.
+
+ * expmed.c (emit_store_flag): Skip trying most sequences of insns
+ if branches are very cheap (BRANCH_COST == 0).
+ * expr.c (expand_expr, case COND_EXPR): Check for BRANCH_COST <= 1,
+ not equal to 1.
+ Know that emit_store_flag won't do most sequence if branches are very
+ cheap.
+
+ * tm-vax.h (BRANCH_COST): Define to be equal to zero.
+
+Sun Nov 24 07:07:31 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl.c (maybe_globalize_type): Don't globalize a type that's
+ being defined.
+
+Sun Nov 24 05:08:57 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-decl.c (finish_struct): Use main variant checking ANSI bitfields.
+
+ * tm-tower-as.h (ASM_FILE_START): Use output_file_directive.
+
+ * gcc.c (process_command): Treat `-' as file name, not option.
+
+Sat Nov 23 20:28:58 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (simplify_binary_operation): Remove duplicate code for SFmode
+ and DFmode; use of REAL_VALUE_TRUNCATE means that all modes can be
+ handled with the same code.
+ Truncate result as well as inputs to computations.
+
+ * cse.c (cse_basic_block): Allow recording of destinations in the
+ final insn of a LIBCALL block.
+
+ * flow.c (insn_dead_p): Add new argument CALL_OK.
+ (propagate_block): Pass new arg.
+ (libcall_dead_p): Indicate that we can accept a CALL when we use
+ insn_dead_p to see if the destination of the CALL is dead.
+
+ * genrecog.c (struct decision): Remove fields `dupcount'
+ and `reg_class' and all references; they were being set but never
+ used and are now obsolete.
+
+ * emit-rtl.c (gen_lowpart_common, operand_subword): Don't make
+ a new REG for the function return value until we after the RTL
+ is copied for possible inlining; use a SUBREG instead.
+
+ * combine.c (can_combine_p): Don't move insn past a volatile ref if
+ it is an `asm', even if non-volatile.
+
+ * gmicro.md: Fix punctuation problem causing syntax error.
+
+ * tm-rs6000.h (CONST_OK_FOR_LETTER_P): Add `O' and `P'.
+ * out-rs6000.c (reg_or_neg_short_operand): New function.
+
+ * rs6000.md (attribute "type"): New type `delayed_compare'.
+ Add define_function_unit for delayed comparisons.
+ Mark comparison results of certain insns as being delayed for
+ longer that normal comparison results; add a new missing types
+ of `compare'.
+ (seq, sle): Remove special-cases for (const_int 0) operands; use
+ alternative with constraint of `O' instead.
+ (sltu, sgeu): Support most constants in second operand.
+
+ * cse.c (prev_insn_cc0_mode): New variable.
+ (fold_rtx): When folding CC0, get the mode from prev_insn_cc0_mode.
+ (cse_insn): Save mode of SET of CC0 in prev_insn_cc0_mode.
+
+Sat Nov 23 17:01:47 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * expmed.c (init_expmed): Make REG a pseudo, not a hard reg.
+
+ * tm-m68k.h (RTX_COSTS): New macro.
+
+ * varasm.c (make_decl_rtl): Get rid of pedantic warning.
+
+ * gcc.c (link_command_spec): Delete code for handling -collect.
+ (default_compilers): Get rid of the %x for g++.
+ This is because now collect is always supposed to be run.
+
+ * tm-vms.h (ASM_OUTPUT_COMMON): Avoid void as type in :? operator.
+ * tm-sun3.h (ASM_OUTPUT_FLOAT_OPERAND, ASM_OUTPUT_DOUBLE_OPERAND):
+ Likewise.
+ * tm-vaxv.h (ASM_OUTPUT_ASCII): Declare `s' as unsigned char *.
+ * tm-crds.h (FUNCTION_EPILOGUE): Don't call FUNCTION_EXTRA_EPILOGUE.
+
+ * configure (i386-dontknow-*, ns32k-*-*): Alternatives deleted.
+ (m68k-tti2-*): Deleted.
+ (m68k-tti-*): Renamed from m68k-tti1-*.
+
+ * i860.md (floatsidf2): Escape the doublequotes.
+
+ * Makefile.in (final.o): Add insn-codes.h as dep.
+ (OBJS): Add dbxout.o.
+ (C_OBJS, OBJC_OBJS): Deleted here.
+ (CPLUS_OBJS): Deleted cp-dbxout.o.
+ (cp-dbxout.o): Target deleted.
+
+Sat Nov 23 06:33:24 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-spew.c (yylex): Don't see TYPENAME if LOOKING_FOR_TYPENAME
+ is < 0. Definitely see TYPENAME if LOOKING_FOR_TYPENAME > 0.
+
+ * cp-decl.c (grokdeclarator): Any type construction that uses a
+ struct/union/enum type that is not yet defines pushes that type into
+ the global namespace.
+
+ * cp-spew.c (discard_token): Renamed from `eat_token'.
+ Also, make all local functions static. Some day we'll use inlining.
+
+Thu Nov 21 16:06:14 1991 Mark Eichin (eichin at cygnus.com)
+
+ * Makefile.in: added rule for cp-spew.o
+
+ * cp-parse.y (TYPENAME_SCOPE): added an action, since it is no
+ longer done in the lexer.
+ (yyprint): Took out case for TYPENAME_SCOPE.
+
+ * cp-lex.c (real_yylex): renamed from yylex. Also all of the code
+ dealing with nested classes has been #if 0'd in favor of the code in
+ cp-spew.c.
+
+ * cp-spew.c (New File): This calls yylex (which is now real_yylex)
+ and looks ahead as far as possible to bind up nested classes and
+ pass them on to the parser.
+
+Thu Nov 21 18:14:11 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * out-sparc.c (output_function_epilogue): Correct parameters in
+ call to final_scan_insn, write_symbols parameter no longer exists.
+
+ * integrate.c (save_for_inline_copying): Use GET_RTX_CLASS.
+
+Thu Nov 21 17:44:46 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * gcc.texinfo (PCC_BITFIELD_TYPE_MATTERS): Clarify that macro
+ must always be non-zero unless MEM extv/extzv/insv exist.
+
+ * romp.md (movdi): Disable define_split when we are moving
+ between overlapping registers prior to reload to work
+ around hard-to-fix sched.c bug.
+
+Thu Nov 21 17:14:54 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * jump.c (invert_exp): Correct typo in comment.
+
+Thu Nov 21 15:34:27 1991 Michael Meissner (meissner at osf.org)
+
+ * gcc.texinfo (warning options): Make the documentation agree with
+ the code, -Wstrict-prototypes and -Wmissing-prototypes are not
+ turned on via -Wall; -Wnoparenthesis is now spelled
+ -Wno-parenthesis.
+ (option header): Mention that -W options take the no- prefix as well
+ as -f options.
+
+Thu Nov 21 08:12:51 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * out-m88k.c (check_float_value): Change use of REAL_VALUE_TRUNCATE.
+ * tm-m88k.h (FLOAT_TO_INT_INTERNAL): Ditto.
+ (AS_BUG_POUND_TYPE): Simplify.
+ * tm-m88kdgux.h: Don't need AS_BUG_DOT_LABELS or AS_BUG_POUND_TYPE.
+
+Thu Nov 21 06:47:11 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rs6000.md (scc): Add missing '&' in some alternatives of constraints.
+
+ * a29k.md (negdf2): Fix typo in constraints for SCRATCH in 29050 case.
+
+ * real.h (REAL_VALUE_TRUNCATE): Default is to truncate to float if
+ mode size is BITS_PER_WORD instead of when mode if SFmode.
+
+Thu Nov 21 01:58:27 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * dbxout.c (dbxout_type): Test TYPE_BINFO before TYPE_BINFO_BASETYPES.
+
+Thu Nov 21 01:45:53 1991 Ken Raeburn (raeburn@cygnus.com)
+
+ * cp-parse.y (unary_expr): Break out `new' expressions with
+ parenthesized types into more basic forms, and handle trailing array
+ dimensions with an appropriate warning message.
+
+ * cp-class.c (pushclass): For UPType, overload the template name.
+ (popclass): For UPType, undo the overload.
+
+ * cp-decl.c (pop_decl_level): Don't look up DECL_NAME slot of a
+ null pointer.
+ (pushdecl_top_level): Reworked handling of shadow lists to be
+ correct.
+ (lookup_tag): Bypass redefinition error message for UPT as well as
+ for TEMPLATE_DECL.
+ (start_decl): Add template decls only to top level. Print message
+ for non-function, non-class templates.
+ (finish_decl): Disable code that renames anonymous types; leave it
+ disabled until we figure out why it was being done in the first
+ place.
+ (grokdeclarator): Eliminate hack to deal with destructor templates.
+ Extend some code handling constructors to handle destructors as
+ well. Deleted some unnecessary code dealing with function
+ templates.
+
+ * cp-decl2.c (constructor_name): Treat class template decl like
+ type decl.
+
+ * cp-lex.c (store_pending_inline): If a function is not to be
+ compiled, discard its text only if can_free flag is set.
+
+ * cp-decl.c (start_function): For `pre-parsed' functions, only
+ set extern-inline flag if inline flag is set.
+ * cp-lex.c (do_pending_inlines): Don't set inline flag for method
+ templates, regardless of default-inline flag setting.
+ (process_next_inline): Ditto.
+
+ * cp-method.c (dump_type): Do something semi-useful with UPT
+ nodes, instead of crashing.
+ (fndecl_as_string): For constructor and destructor, use name of
+ function rather than looking up class constructor name; should be
+ the same, and it's cheaper this way.
+ (build_overload_name): Make template-related names unique, as well
+ as unlikely to be accepted by the assembler.
+
+ * cp-parse.y (yyprint): Handle PRE_PARSED_CLASS_DECL.
+ (template_def): In case handling destructors, pass new decl to
+ end_template_decl, rather than ungrokked call_expr node. Rewrote
+ last derivation.
+ (scoped_typename): Don't try building from template type; it doesn't
+ work.
+ (try_for_typename): Treat typename using template parms like any
+ other typename.
+
+ * cp-pt.c: New comment at start lists some known problems.
+ (end_template_decl): Do nothing for error_mark_node. Check
+ DECL_CLASS_CONTEXT and DECL_EXTERNAL when setting TREE_EXTERNAL
+ field of template decl. Don't need to pop extra class level for
+ non-operators any more, but do need to assign class context field.
+ (instantiate_member_templates): Now returns void.
+ (tsubst, case FUNCTION_DECL): Process flag fields of method as for
+ other functions. Handle class context field. Push decl at top
+ level only if decl context is null.
+ (tsubst, case TREE_LIST): Use via-public and via-virtual fields.
+ (do_pending_expansions): Correct handling of methods.
+
+ * cp-pt.c (overload_template_name): If not class-level, push
+ extra binding level. Disable check that overload hasn't already
+ been done; for now, it's needed.
+ (undo_template_name_overload): Pop it.
+
+Thu Nov 21 00:15:33 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * dbxout.c (dbxout_type_methods): Don't dereference TYPE_NAME and
+ ctor_name until after checking for non-null methods.
+
+ * sched.c (create_reg_dead_note): New function. Add a REG_DEAD note
+ for REG to INSN, reusing a REG_DEAD note from the dead_notes line.
+ (attach_deaths): Add quick exit for many rtx that can't contain a
+ register. Rewrite REG_DEAD note code to use the new scheme (see
+ the Nov 1 ChangeLog entry).
+ (new_insn_dead_notes): Don't add a REG_DEAD note to an insn that
+ already has one.
+ (update_links): Must convert REG_UNUSED notes to REG_DEAD when a
+ register formerly just clobbered is now explicitly set and used in
+ the new split insns.
+
+Wed Nov 20 18:02:38 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * c-decl.c, cccp.c: Change all -Wno options to
+ -Wno- options so as to be consistent with toplev.c, and so as
+ to also be consistent with the -fno- options.
+ * objc-actions.c: Add a -Wno-selector option to match the
+ -Wselector option.
+
+ * gcc.c (default_compilers): Pass all -W options to cpp, so that
+ -Wno options will be passed along with the -W options that it
+ understands.
+ * cccp.c (main): Accept -Wno option counterparts for every
+ existing option.
+
+Wed Nov 20 00:03:41 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-tree.c (lang_output_debug_info): Deleted.
+ * cp-class.c (finish_struct): Set DECL_IGNORED_P on the TYPE_DECL
+ nodes for types that should not have their debugging info written
+ out.
+ * dbxout.c (dbxout_{symbol,type}): Check DECL_IGNORED_P for
+ TYPE_DECLs of RECORD_TYPE nodes.
+
+ * cp-decl.c (grok_op_properties): Fix bug in grokking NEW_EXPR
+ and DELETE_EXPR operators.
+ * cp-method.c (hack_operator): Deleted.
+ * cp-init.c (init_init_processing): Use `ansi_opname' for
+ {NEW,DELETE}_EXPR instead of calling hack_operator and build_opid.
+ * cp-decl2.c (grokopexpr): Deleted.
+ * cp-lex.c (build_opid): Deleted.
+ * cp-class.c (build_instantiated_decl): Deleted.
+ * All cp-* files: OP_IDENTIFIER is no longer used.
+
+ * cp-parse.y (operator_name): For most cases, Use `ansi_opname'
+ directly instead of calling `build_opid'.
+
+Tue Nov 19 16:02:51 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-decl.c (xref_tag): If we find wrong kind of type, return it.
+ (lookup_tag): Fill in pending_invalid_xref_file, ..._line.
+
+ * real.h (REAL_VALUE_TRUNCATE): New argument MODE.
+ * cse.c (simplify_unary_operation, simplify_binary_operation):
+ Pass that arg.
+ * c-parse.y, objc-parse.y, cp-lex.c (yylex): Likewise.
+ * fold-const.c (combine): Truncate floating result to fit mode.
+ (fold): Don't add 1 to float constant if that doesn't change the value.
+
+Tue Nov 19 09:37:36 1991 Michael Meissner (meissner at osf.org)
+
+ * configure (ns32k-encore-osf): Restore Encore Multimax using the
+ OSF/rose object format, since the necessary files, such as
+ tm-encrose.h, are present in the distribution.
+
+Mon Nov 18 21:38:13 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * out-sparc.c (output_cbranch): Always emit a nop before a FP branch
+ to avoid illegal assembly output.
+ * sparc.md: Don't define delay slot for FP compare insns. This was
+ meant to solve the above problem, but fails with insn scheduling.
+
+ * sparc.md (movsi): Must accept 'f' in addition to 'r' because
+ combine can convert FP hard registers to SImode.
+
+Mon Nov 18 13:43:12 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rtlanal.c (replace_regs): Correct code that prevents nested SUBREGs.
+
+Mon Nov 18 13:43:12 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-decl.c (finish_decl): Reinstall lost end_temporary_allocation.
+
+ * tree.h (DECL_LANG_FLAG_8): Deleted.
+ * print-tree.c (print_node): Don't use it. Do print DECL_IGNORED_P.
+
+Mon Nov 18 06:59:37 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl.c (value_identifier): Gone, following c-decl.c. Now use
+ zero DECL_NAME for this purpose.
+ * cp-typeck.c: Also affected by this change.
+
+ * c-lang.c, objc-lang.c (lang_output_debug_info): New function.
+ * dbxout.c (dbxout_type_methods): Fix minor problems arising from
+ assuming all RECORD_TYPE are C++ RECORD_TYPE nodes.
+ (dbxout_type): Ditto.
+
+Sun Nov 17 17:33:58 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * tree.c (struct obstack_stack): New slots expression and rtl.
+ (push_obstacks, push_obstacks_nochange, pop_obstacks):
+ Save and restore all 4 obstack vars individually.
+
+ * c-decl.c (start_decl): Call push_obstacks_nochange here.
+ (push_parm_decl, grokfield): Also here.
+ (finish_decl): Not here.
+ Also clean up test for whether to replace DECL_INITIAL with error mark.
+
+Sun Nov 17 14:25:15 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-typeck.c (c_expand_return): Be more careful about throwing
+ away only cleanup generated by 'build_functional_cast'.
+
+ * cp-init.c (build_new): Use TRUE_TYPE instead of TYPE more
+ consistently, in case TYPE is really an ARRAY_TYPE on its own.
+
+ * cp-dbxout.c: Gone. Now G++ uses dbxout.c.
+ * cp-tree.h (OPERATOR_NAME_P): Changed to IDENTIFIER_OPNAME_P.
+ (OPERATOR_TYPENAME_P): Changed to IDENTIFIER_TYPENAME_P.
+ (OPERATOR_{NEW,DELETE}_FORMAT): Deleted.
+ * cp-lex.c (ansi_{opname,assopname}): New variables. All cp-* files
+ changed to use these where comparisons against *_FORMAT were made.
+ (init_lex): Initialize `ansi_{opname,assopname}' arrays.
+ Also, update {opname,assignop}_tab grok new ANSI equivalences.
+ (build_operator_fnname): Changed to build ANSI-style overloaded
+ names.
+ * cp-dem.c (optable): Add new ANSI equivalences.
+ (cplus_demangle): Fixed to recognize new ANSI demangling. Note that
+ old-style destructors, and possibly other codes were broken by the
+ (undocumented) 27 Oct changes.
+
+ * cp-decl2.c (grokclassfn): Set DECL_CLASS_CONTEXT here.
+ * cp-class.c (finish_struct): Don't skip over FUNCTION_DECL that
+ already has a DECL_CLASS_CONTEXT.
+
+ * cp-except.c (cplus_expand_end_try): Set BLOCK_HANDLER_BLOCK for
+ blocks that handle exceptions.
+ (EXCEPTION_NAME_PREFIX): Shorted to "__ex" (from "__exception").
+ (EXCEPTION_NAME_LENGTH): Reduced to 4 from 12.
+
+ * dbxout.c (flag_minimal_debug): Define new variable that is
+ non-zero when symtab output routines can output abbreviated.
+ (dbxout_type_fields): Move code that writes out debugging info about
+ fields of RECORD_TYPE and UNION_TYPE nodes from `dbxout_type' into
+ this function.
+ (dbxout_type_{method,method_1}): Move code from `dbxout_type' into
+ these new functions.
+ (dbxout_type): Now writes out info about basetypes. Also, no longer
+ need to record info about types having ctors, dtors, or both. GDB
+ now figures out what it needs to, when it needs to.
+ (dbxout_symbol): Implement special abbreviated form for C++ classes,
+ which place their names in both the struct and decl namespaces.
+ (dbxout_block): Write out special debugging stabs for exception
+ handler blocks.
+
+ * tree.h (BLOCK_HANDLER_BLOCK): Define new flag to indicate that a
+ BLOCK is an exception handler block (a `catch' block for C++).
+ (TREE_VFIELD, DECL_IGNORED_P): New macros.
+
+Sat Nov 16 22:21:56 1991 Jeffrey A Law (law at super.super.org)
+
+ * tm-m68k.h (CONST_COSTS): Integer values between -128 and 127
+ inclusive are very cheap because of moveq.
+
+Sat Nov 16 00:40:04 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * Makefile.in (install-cross-tools): Avoid clobbering symlinks already
+ made. Double the $ before the @ in the indirection script.
+
+ * t-decstatn: New file.
+ * configure: (mips-dec-ultrix*): Use t-decstatn.
+
+ * collect-ld: Always run collect if collect is installed.
+
+ * collect-osf.c, enquire.c, gnulib2.c: Use gstddef.h, not stddef.h.
+
+ * gnulib2.c (__eprintf): Undef NULL.
+
+ * c-typeck.c (build_array_ref): Ref is volatile if array is volatile.
+
+Fri Nov 15 19:53:41 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_binary_op_nodefault): Delete ERROR_CODE
+ argument because it is always the same as CODE. Add new argument
+ CONVERT_P, and call default_conversion on the operand trees if
+ true. Rename to build_binary_op.
+ (old build_binary_op): Deleted because it is now unnecessary.
+ * c-common.c, c-convert.c, c-decl.c, c-tree.h, c-typeck.c: All
+ callers and other references to build_binary_op* fixed.
+ * c-typeck.c (new build_binary_op): Add warning message for
+ comparisons of signed and unsigned variables that won't give the
+ expected result due to unexpected sign extension.
+
+ * expr.c (convert_move): Add TFmode support and clean up code.
+ * optabs.c (init_fixtab): Add TFmode support.
+ (init_floattab): Likewise.
+ (expand_float): Likewise.
+ (expand_fix): Likewise.
+ (init_optabs): Likewise.
+
+ From Per Bothner:
+ * collect2.c: Define vfork as fork for USG. Rewrite to not use
+ prototypes, so it doesn't need gcc for compilation.
+ (main): No longer uses static sized array for ld arguments, so
+ that long command lines will work. Vfork ld instead of running
+ via popen with nm.
+ (write_hooks): Use type names not variable names in sizeof calls.
+
+Fri Nov 15 15:01:41 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * fold-const.c (size_int): Properly preserve old obstack settings.
+ * c-decl.c (finish_decl, grokdeclarator, xref_tag): Likewise.
+ * stor-layout.c (layout_type): Likewise.
+ * varasm.c (output_constant_def): Likewise.
+ * tree.c (push_obstacks_nochange): New function.
+
+ * stor-layout.c (layout_type): Make size of temp type saveable.
+ * tree.c (saveable_allocation): New function.
+
+ * configure: Comment out certain alternatives not yet updated.
+ (sparc-unicom-*, m68k-tti1-*, m68-tti2-*): New alternatives.
+ (m88k-*-v88r32*): New alternative.
+ (i386-alternate-sysv): New alternative, not sure why.
+ (sparc-*-sysv*): Commented out--not really supported.
+
+Fri Nov 15 22:22:32 PDT 1991 Mike Stump (mrs at csun.edu)
+
+ * configure: Recognize only canonical names. Added missing entries
+ for some configurations that obviously have not been tested in a
+ while.
+
+ * config.subr: Massive overhaul. It claimed to canonicalize
+ the machine specification, but it never really did. Now it
+ does. In general, it is not necessary to specify the os for
+ popular machines that have a popular os, or given the os, it
+ can sometimes figure out the vendor. Added in all the old
+ ways of specifying machines from configure. Also added
+ support for all (before it was missing a few) of the tm-*.h
+ files. It now supports the concept of guessing the vendor for
+ a given CPU type. It now supports the concept of guessing the
+ os version given the vendor and/or the CPU type. Changed the
+ default os for vax to ultrix, changed the default os for i386
+ to sco.
+
+ * collect-ld: New file. It is useful when compiling C++ programs
+ on machines that use collect. This includes the decstation.
+
+Fri Nov 15 14:19:29 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * out-sparc.c: Singlemove_string no longer static.
+ (emit_move_sequence): Emit sethi/low_sum insn pair for values which
+ are not arith_double_operands, was missing not.
+ * sparc.md: DImode sethi pattern now uses singlemove_string to load
+ a constant into a reg.
+ * tm-sparc.h (LEGITIMATE_CONSTANT_P): Accept anything except a
+ floating point constant.
+ Declare singlemove_string so it can be used in sparc.md.
+
+ * jump.c (jump_optimize): Correct typos in comments.
+
+Fri Nov 15 08:05:26 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * out-rs6000.c (scc_comparison_operator): Allow non-FP EQ.
+
+ * combine.c (subst, case NEG): Correct shift count in code that
+ negates ZERO_EXTRACT to SIGN_EXTRACT.
+
+Thu Nov 14 23:03:46 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * genrecog.c (try_merge_1): Add big new comment.
+
+Thu Nov 14 19:28:57 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * m68k.md: Fix peephole that merges a stack adjust with a push to
+ use addqw instead of addql since we know we are incrementing an
+ address register (sp).
+
+ * loop.c (scan_loop): Rework code that looks for loops starting at the
+ exit test; don't skip non-jump insns at start of loop and modernize
+ and clean up code.
+
+ * gcc.texinfo (SECONDARY_RELOAD_CLASS): Update description to
+ show uses for both intermediate and scratch registers.
+ * reload.h (SECONDARY_{INPUT,OUTPUT}_RELOAD_CLASS): Default from
+ SECONDARY_RELOAD_CLASS, if defined.
+ (HAVE_SECONDARY_RELOADS): Defined if any of the secondary reload
+ macros are defined.
+ (reload_secondary_icode, reload_{in,out}_optab): New vars.
+ * reload.c: Include insn-codes.h.
+ (find_secondary_reload): New function.
+ (push_reload): Call find_secondary_reload to process input and
+ output reloads. Create both secondary and tertiary reloads,
+ as required.
+ * reload1.c: Include insn-codes.h.
+ (init_reload): Initialize reload_{in,out}_optab.
+ (emit_reload_insns): Handle cases where a secondary reload
+ is a scratch register and where tertiary reloads are required.
+ * Makefile.in (reload.o, reload1.o): Now include insn-codes.h.
+
+ * tm-romp.h (SECONDARY_OUTPUT_RELOAD_CLASS): Define to use a BASE_REGS
+ for symbolic memory locations.
+ * romp.md (reload_outsi, reload_outhi, reload_outqi): New patterns.
+
+ * expr.c (expand_expr): Pass BRANCH_COST to do_store_flag.
+ (do_store_flag): Canonicalizations done in emit_store_flag
+ need to be done here as well.
+ Test for ffs as well as abs when seeing if scc is expensive.
+ * expmed.c (emit_store_flag): Correct cases that are open-coded:
+ Add a few missing cases and correct handling of normalizep.
+ * combine.c (simplify_shift_const, case IOR): Convert sequence
+ open-coded by emit_store_flag into LE or (neg (le ..)), as
+ appropriate.
+ (simplify_shift_const, case MINUS): Similarly, for GT.
+ (simplify_comparison): sign_bit_comparison_p now true only if
+ also comparing against constant zero.
+ (simplify_comparison, case NOT): If sign bit comparison, just
+ reverse comparison.
+ (simplify_comparison, case MINUS): Move case where we subtract
+ one from the absolute value of something to PLUS, since we
+ subtract one using a PLUS operation.
+ (simplify_comparison, case MINUS): Handle GT case done by
+ emit_store_flag.
+ (simplify_comparison, cae IOR): Similarly, for IOR.
+
+ * tm-rs6000.h (BRANCH_COST): Define as 2.
+ * rs6000.md (scc): Allow some more cases.
+ (new scc patterns): Add numerous patterns to reflect superoptimizer
+ results for scc insns on RS/6000.
+
+Thu Nov 14 16:42:19 1991 Michael Meissner (meissner at osf.org)
+
+ * mips-tfile.c (all): Change small allocation requests to use
+ separate allocation and free functions, instead of using the word8
+ union to hold each request. In order to support this easily, a free
+ field was added to each small structure that is released.
+ (main): If debugging, print a summary of the number of small
+ allocations, frees, and the number of pages used.
+ (add_procedure, copy_objects): Stuff the pointer to the end symbol
+ into the shash chain, and use it's value to generate the new value
+ for the computed end block. This is much safer than trying to
+ calculate this on the fly.
+ (main): Don't try to avoid using malloc by setvbuf'ing the streams
+ we use.
+
+Wed Nov 13 23:47:10 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ From tege@sics.se:
+ * sparc.md: In DF load peephole, use operands not xoperands, so
+ that output_asm_insn will use the right values.
+
+ * tm-sun3.h, tm-sun2os4.h: Define PTRDIFF_TYPE, SIZE_TYPE,
+ WCHAR_TYPE same as tm-sparc.h.
+
+ * c-decl.c (finish_function): Don't clear current_function_decl
+ for nested functions.
+
+ * dbxout.c: Include insn-config.h and reload.h.
+ (dbxout_symbol): Pass DECL_RTL (decl) through eliminate_regs before
+ using.
+ (dbxout_parms): Pass DECL_RTL and DECL_INCOMING_RTL of parms through
+ eliminate_regs before using.
+ * sdbout.c: Include insn-config.h and reload.h.
+ (sdbout_symbol): Pass DECL_RTL (decl) through eliminate_regs before
+ using.
+ (sdbout_parms): Pass DECL_RTL and DECL_INCOMING_RTL of parms through
+ eliminate_regs before using.
+ * Makefile.in: Update dependency lists for dbxout.c and sdbout.c.
+
+ * combine.c (try_combine): Don't pass sets with (USE (MEM ...))
+ dests to reg_referenced_p.
+
+Wed Nov 13 21:38:03 1991 John Bunda (bunda at cs.utexas.edu)
+
+ * reload1.c (gen_input_reload): If IN is a PLUS whose second arg
+ is the same as the reload register, swap the args of the PLUS.
+
+Wed Nov 13 14:43:09 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * tm-sparc.h (OPTIMIZATION_OPTIONS): Don't redefine options set in
+ toplev.c, only effect flag_omit_frame_pointer.
+
+ * sparc.md: Delete obsolete sign_extract and zero_extract patterns.
+ We get better code without them.
+ (indirect_jump, tablejump): Extend indirect_jump pattern to accept
+ any address, not just a register. Add tablejump like pattern which
+ also accepts any address.
+
+ * unroll.c (final_biv_value): Make sure the initial value of the biv
+ is invariant if it is used after the loop.
+
+Tue Nov 12 23:16:51 1991 Michael Meissner (meissner at osf.org)
+
+ * tm-mips.h (ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP): Correct so
+ ASM_OUTPUT_REG_PUSH actually does a push instead of pop, and vica
+ versa. Also make ASM_OUTPUT_REG_POP turn on .set noreorder, and
+ increment the appropriate -mstats load delay counters.
+
+Tue Nov 12 22:53:45 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.h (BRANCH_COST): Supply default value here.
+ * jump.c (BRANCH_COST): Don't default BRANCH_COST here.
+
+ * global-alloc.c (global_alloc): Use proper entry in eliminables
+ when searching for the frame pointer.
+
+Tue Nov 12 22:23:36 1991 Jim Wilson (wilson at sphagnum.cygnus.com)
+
+ * expr.c: (expand_expr, MIN_EXPR case): Check for const_true_rtx
+ not const1_rtx as return value from compare_from_rtx.
+ (do_jumps_by_part_greater): Handle const0_rtx and const_true_rtx
+ return values from compare_from_rtx.
+ (do_jumps_by_part_equality, do_jumps_by_part_equality_rtx): Likewise.
+
+ * sched.c (sched_analyze_2): Correctly handle ASM_OPERAND and
+ ASM_INPUT rtx. Volatile and traditional asm statements are
+ assumed to use and clobber all hard registers and all memory.
+ (schedule_block): Delete code that incorrectly handles ASM_OPERAND
+ and ASM_INPUT rtx by exiting early.
+
+Tue Nov 12 15:38:56 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * sched.c: Introduce names for various priority values. Reduce
+ LAUNCH_PRIORITY to avioid wrap-around in launch_link.
+
+Tue Nov 12 14:21:52 1991 Per Bothner (bothner at cygnus.com)
+
+ * cp-lex.c (init_lex): Exception-handling fixes.
+ * cp-tree.h: Add new OPERATOR_CHARS_P that is like
+ OPERATOR_NAME_P, except if takes a (char*), not a tree.
+ * cp-dbxout.c (dbxout_type_methods): Handle operators
+ specially when chopping prefix for minimal_debug.
+
+ * config/tm-news.h: In PRINT_OPERAND, recognize new 68040
+ operand types. Add definition of CPP_DEFINES for cross-compiling.
+
+Tue Nov 12 13:11:01 1991 Michael Meissner (meissner at osf.org)
+
+ * protoize.c (__OSF1__ ifdef): Remove OSF/1 specific ifdefs, since
+ the problem they address has been fixed, and the ifdefs now cause
+ spurious warnings.
+
+ * tm-mips.h (INT_TYPE_SIZE): Define.
+ (SHORT_TYPE_SIZE): Define.
+ (LONG_TYPE_SIZE): Define.
+ (LONG_LONG_TYPE_SIZE): Define.
+ (CHAR_TYPE_SIZE): Define.
+ (FLOAT_TYPE_SIZE): Define.
+ (DOUBLE_TYPE_SIZE): Define.
+ (LONG_DOUBLE_TYPE_SIZE): Define.
+
+ * out-mips.c (block_move_load_store): New commn function to create
+ one load and store for the block move functions. The load is
+ emitted directly, and the store is returned, to be emitted later.
+ (block_move_sequence): Call block_move_load_store. For straight
+ line moves, have two outstanding loads before a store, for newer
+ machines that want two delay slots.
+ (block_move_loop): Call block_move_load_store. Move 4 words per
+ loop, for a loop that moves 16 bytes in 11 cycles if aligned, and 16
+ bytes in 19 cycles if not aligned.
+ (block_move_memcpy): Change argument names for consistancy.
+ (expand_block_move): Always move address into a register, even for
+ one byte moves. Fix bugs in calling memcpy. If moving a large
+ constant amount of unaligned data, emit a runtime check to see if
+ the data is really aligned, and if so do an aligned move, otherwise
+ an unaligned move loop.
+
+ * mips-tfile.c (toplevel): Make some changes, so that mips-tfile can
+ be debugged on OSF/1.
+ (efdr structure): Align identifiers in declaration.
+ (cur_proc_value): Delete variable.
+ (cur_oproc_begin): New global to record original proc .ent symbol.
+ (cur_oproc_end): New global to record original proc .end symbol.
+ (add_procedure): Set cur_oproc_begin, cur_oproc_end variables
+ instead of cur_proc_value.
+ (parse_begin, parse_end): Add check for cur_oproc_begin being set.
+ (parse_end): Use cur_oproc_end's value node for new value node.
+ (main): Add cast to free_multiple_pages call.
+
+Tue Nov 12 08:57:39 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * jump.c (jump_optimize): Merge the "if (...) x = 0;" case with
+ the "x = a; if (...) x = b;" case.
+
+Mon Nov 11 19:27:03 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cp-cvt.c (convert_pointer_to): Correctly get type of a TREE_VEC
+ object. (This patch is from someone at Cygnus.)
+
+ * combine.c (try_combine): Add missing parens.
+
+Mon Nov 11 19:26:24 1991 Ron Guilmette (rfg at ncd.com)
+
+ * c-typeck.c (build_binary_op_nodefault, convert_for_assignment):
+ A (void *) object is compatible with a function pointer if it is
+ the constant zero.
+ (build_conditional_expr): Properly check for pointers to functions.
+
+Sun Nov 10 19:59:12 1991 Michael Meissner (meissner at osf.org)
+
+ * cccp.c (make_undef): Fix by off by one error.
+ (MIN, MAX): Add #undef, in case some system include file defined
+ these macros.
+
+Sun Nov 10 10:34:17 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl2.c (grokfield): Set TREE_EXTERNAL on static const
+ decls that are either uninitialized in their initial declaration,
+ or initialized by something we cannot evaluate at initial
+ declaration time.
+
+ * cp-init.c (build_new): Make `operator new' with placement cast
+ its return type to the type of the object being allocated.
+
+ * cp-typeck.c (commonparms): If the last element of P1 is
+ VOID_LIST_NODE, use that.
+
+ * stor-layout.c (layout_record): Return PENDING_STATICS.
+ (layout_type): Don't commit static members to a particular mode
+ until REC has been laid out completely.
+
+Sat Nov 9 23:16:51 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cccp.c (fancy_abort): Don't declare as static.
+
+Sat Nov 9 20:38:30 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl.c (push_overloaded_decl): Don't cons new decl to
+ existing ERROR_MARK_NODE. If the old decl was erroneous, just
+ ignore it.
+
+ * cp-call.c (ideal_candidate): Fix typo in error message.
+
+Sat Nov 9 14:13:46 1991 Jeffrey A Law (law at super.super.org)
+
+ * tm-hp9k2bsd.h (MULSI3_LIBCALL): New define which avoids
+ the use of __mulsi3 for signed integer multiplication.
+ (UMULSI3_LIBCALL, DIVSI3_LIBCALL, UDIVSI3_LIBCALL): Likewise.
+ (MODSI3_LIBCALL, UMODSI3_LIBCALL): Likewise.
+
+Fri Nov 8 12:05:39 1991 Per Bothner (bothner at cygnus.com)
+
+ First cut at ANSI-style exception handling (using
+ syntax and semantics of Stroustrup 2nd ed).
+ THIS IS WORK IN PROGRESS!
+ * cp-tree.h: Declare flag_ansi_exceptions.
+ * gplus.gperf: Add 'throw' (for ANSI exception handling),
+ and update private/protected/public from (old) cp-lex.c.
+ * cp-hash.h: New file, generated from gplus.gperf.
+ * cp-lex.c: #include cp-hash.h, instead of requiring
+ manual cut-and-paste when keywords are changed.
+ * cp-lex.c: Commented out some extern declarations that
+ were conflicting with inlines in cp-input.c.
+ Hooks for ANSI-style exception handling.
+ * cp-parse.y: Parse ANSI-style exception stuff.
+ * cp-decl2.c: Define new flag flag_ansi_exceptions.
+ * cp-decl2.c (finish_table): Off-by-one error in
+ calculating index type.
+ * clus-decl2.c (finish_vtable_vardecl): Add missing
+ TREE_OPERAND to get dossier decl.
+ * cp-except (cplus_expand_start_except): Allow NULL name,
+ since there is no distinguished name for ANSI exceptions.
+ * cp-except (cplus_expand_raise): Too few
+ parameters to expand_expr; add them.
+ * cp-except.c: New functions for ANSI exceptions:
+ cplus_exception_name, ansi_exception_object_lookup,
+ cplus_expand_throw, ansi_expand_start_catch.
+ These are heavily hacked from similar old functions.
+
+ Try to make -fdossier work better (but more work is needed).
+ (Especially, generate fewer unneeded descriptors.)
+ * cp-class.c (add_virtual_function, finish_struct): Do not
+ create a vtable just because of -fdossier.
+ * cp-gc.c: Each type points to an array of fields,
+ instead of an array of pointers to fields. Ditto for methods.
+ This saves one pointer per field or method by removing
+ unneded extra indirection. Also other tweaks to save space.
+ * cp-decl.c (init_decl_processing): Add length of
+ field and method arrays to descriptors, instead of
+ relying on NULL-termination (since we no longer have
+ the extra pointer array).
+ Make the parameter count and required count of
+ method descriptors be shorts.
+ * cp-method.c: Remove no-longer-needed functions
+ build_i_desc_overload and build_m_desc_overload.
+
+ Other C++ fixes:
+ * cp-dbxout.c (dbxout_symbol): Class types were
+ emitting only a "t" spec which made gdb unhappy.
+ Kludged it so that it once more emits "Tt".
+ * cp-tree.c (lang_output_debug_info): Do emit debugging
+ info if this implementation file corresponds the the
+ type's interface, even if nothing is written.
+
+Fri Nov 8 08:18:55 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * tm-m88k*.h: Fix comments, minor cleanups.
+
+Thu Nov 7 16:21:05 1991 Torbjorn Granlund (tege at mole.gnu.ai.mit.edu)
+
+ * longlong.h (__ibm032__): Fix operand order for add_ssaaaa and
+ sub_ddmmss.
+
+Thu Nov 7 12:47:14 1991 Michael Meissner (meissner at osf.org)
+
+ * tm-mips.h (MIPS_VERSION): Bump meissner version number to 3.3.
+ (PCC_BITFIELD_TYPE_MATTERS): Define this to be 1.
+
+ * out-mips.c (block_move_loop): New function to generate a loop to
+ do a block move.
+ (block_move_call): Pass the source, destination, size as separate
+ arguments, rather than a pointer to an array of operands.
+ (expand_block_move): Change block_move_call calling sequence.
+ (expand_block_move): If moving big aligned items, generate a loop to
+ do it, rather than calling memcpy/bcopy.
+ (override_options): If -msoft-float, 'f' constraint picks GP
+ registers.
+
+ * t-decrose (collect): Use ALL_CFLAGS instead of CFLAGS, since this
+ gets the shared library flags in x-decrose.
+
+Thu Nov 7 07:57:36 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * tm-m88k.h (MEMORY_MOVE_COST): Define.
+ (TARGET_88*): Fix.
+
+Wed Nov 6 19:07:42 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * a29k.md (negsf2, negdf2): Add missing CLOBBER in 29050 case.
+
+ * jump.c (jump_optimize): When looking for a conditional jump
+ skipping an unconditional jump, be sure the conditional jump is
+ not an unconditional jump.
+
+ * combine.c (try_combine): If we make an unconditional jump,
+ be sure it is followed by a BARRIER.
+ (subst, case SET): Convert (set (pc) (return)) to (return).
+
+Wed Nov 6 13:41:55 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * tm-m88kv3.h, xm-m88kv3.h: Renamed from *m88ksysv3*.
+
+Wed Nov 6 09:27:16 1991 Michael Meissner (meissner at osf.org)
+
+ * tm-mips.h (MIPS_VERSION): Bump meissner version number to 3.2.
+ (TARGET_SWITCHES): Add -msoft-float and -mhard-float.
+ (GP_RETURN): Use GP_REG_FIRST as base of GP registers.
+ (FP_RETURN): Use FP_REG_FIRST as base of FP registers. If
+ -msoft-float, make $2 be the return register.
+ (GP_ARG_FIRST, GP_ARG_LAST): Use GP_REG_FIRST as 1st GP reg.
+ (FP_ARG_FIRST, FP_ARG_LAST): Use FP_REG_FIRST as 1st FP reg.
+
+ * mips.md (ffssi2, ffssi2_internal): Fix ffs builtin so that it
+ doesn't clobber the input argument by turning it into a
+ define_expand, and using a parallel operation including the
+ necessary clobber's.
+ (abssi2, ffssi2, ffssi2_internal): Use the 'd' constraint which only
+ matches the integer registers, rather than 'r' which can match
+ floating point registers as well.
+
+ * tm-mips-news.h (CPP_SPEC): Add -Dnews7300, -Dsony_news, -Dmips,
+ and -Dhost_mips.
+
+Wed Nov 6 08:46:54 1991 Mark Eichin (eichin at cygnus.com)
+
+ * cp-class.c (add_method): when adding a new constructor or
+ destructor, actually chain onto method_vec[0] rather than replacing
+ the list with the current entry.
+
+Wed Nov 6 07:04:55 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (store_field): Handle case where we are storing into a BLKmode
+ field of an object that is in a register.
+ (expand_expr, case COMPONENT_REF): Handle case where we are extracting
+ a BLKmode field from an object in a register.
+
+Tue Nov 5 22:16:39 1991 Michael Meissner (meissner at osf.org)
+
+ * tm-mips.h (target_flags): Delete second declaration.
+ (MASK_G0, MASK_G1, MASK_G2): Delete, since -G xx now works to set
+ the size of the small data/bss area cutoff.
+ (MASK_G012_USED, MASK_G012_NUSED): ditto.
+ (TARGET_GVALUE): ditto.
+ (TARGET_G012_USED): ditto.
+ (TARGET_SWITCHES): Delete -mGx, -mno-Gx switches.
+ (TARGET_DEFAULT): Set to 0 instead of MASK_G012_NUSED.
+
+ * tm-decrose.h (TARGET_DEFAULT): Eliminate MASK_G012_NUSED.
+
+ * out-mips.c (override_options): Remove support for -mGx and -mno-Gx
+ switches to set the cutoff size for small data/bss.
+
+ * mips.md (abssi2): Add new pattern.
+ (ffssi2): Add new pattern.
+
+Tue Nov 5 18:36:29 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * gcc.texinfo (MEMORY_MOVE_COST): Document new macro.
+ * regclass.c (MEMORY_MOVE_COST): Default it to 2.
+ (regclass, reg_class_record): Use MEMORY_MOVE_COST, not constant 2.
+ (regclass): Look at result of single_set instead of checking again if
+ pattern is a SET.
+ * tm-rs6000.h (MEMORY_MOVE_COST): Add definition.
+
+Tue Nov 5 17:01:05 1991 Ken Raeburn (raeburn at cygnus.com)
+
+ * cp-pt.c (tsubst): For char_type_node, just build variant and
+ return it.
+ (tsubst, case FUNCTION_DECL): Walk methods more efficiently.
+
+ * cp-pt.c (overload_template_name): Push a binding level, to
+ separate template name binding from method parameters. Check
+ identifier value slots for TYPE_DECLs, not RECORD_TYPEs. Don't need
+ to do extra push of TYPE_DECL for template name.
+ (undo_template_name_overload): Pop it. Don't need to explicitly
+ clear template name binding.
+
+ * cp-ptree.c (print_lang_decl): For FIELD_DECL, don't try to
+ print fields that go off the end of the lang_decl_flags structure.
+
+ * cp-pt.c (pop_template_decls): Don't explicitly clear out value
+ slots of identifier; let poplevel/poplevel_class do it.
+
+ * cp-pt.c: Use build_lang_decl insteaed of build_decl for
+ all TEMPLATE_DECL and TYPE_DECL nodes.
+
+ * cp-tree.h (make_anon_name): Declare it.
+
+ * cp-pt.c (unify): Deleted unreachable code.
+
+ * cp-decl.c (push_overloaded_decl): Fixed typo from merge.
+ (start_decl): Ditto.
+ (grokdeclarator, case CALL_EXPR): Remove debug_tree call
+ accidentally left in. Handle constructor templates specially, like
+ destructor templates. Removed some commented-out code.
+ (grokdeclarator, case SCOPE_REF): If the type is uninstantiated,
+ treat it like any other aggregate type code.
+
+ * cp-lex.c (identifier_typedecl_value): If no binding slot from
+ the identifier is the right type decl, use the type name if it is
+ non-null, even if the name doesn't match.
+ (build_lang_decl): If new decl node is TREE_PERMANENT, make sure the
+ lang-specific info gets allocated that way too; don't assume that
+ the current obstack is permanent.
+ (copy_decl_lang_specific): If decl is TREE_PERMANENT, assert that
+ the current obstack is permanent.
+
+ * cp-parse.y (template_def): Delete derivations that were
+ purportedly for constructors; they didn't work.
+ (notype_declarator): Deal with them here.
+ (template_instantiate_once): Copy decl node with permanent obstacks,
+ thereby clearing the chain pointer, before pushing it into top
+ level.
+ (structsp): Don't need to undo template name overload here.
+ (scoped_typename): Want TYPENAME with template type, not PTYPENAME.
+
+Tue Nov 5 13:46:06 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * sdbout.c (sdbout_init, sdbout_symbol): Don't reverse the
+ permanent types.
+
+ * cccp.c (make_definition): Eliminate previous change associated
+ with pretty-printing strings passed to do_define.
+ (pass_thru_directive): Move pretty-printing here.
+
+Tue Nov 5 11:21:34 1991 Michael Meissner (meissner at osf.org)
+
+ * tm-mips-news.h (ASM_SPEC, LINK_SPEC): Correctly pass -EB instead
+ of -EL, since the Sony News system is big endian not little endian.
+
+Tue Nov 5 09:54:08 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * tm-m88kv4.h, t-m88kv4, x-m88kv4: Renamed from *m88ksysv4*.
+
+Tue Nov 5 06:36:07 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (simplify_relational_operation, unsigned comparisons): Don't
+ simplify unless mode of operand is a MODE_INT mode.
+
+ * Makefile.in (*CFLAGS): More clearly document the purposes of each
+ of the flags. Add X_CFLAGS and T_CFLAGS for x-* and t-* to override.
+ * x-decrose, x-hp9k320g, x-i386isc, x-m88ksysv4, x-mips, x-tower:
+ Override X_CFLAGS instead of CFLAGS or INTERNAL_CFLAGS.
+ * x-vax: Likewise.
+ * x-sco: Don't include XCFLAGS in definition of CFLAGS.
+
+ * gstddef.h: Renamed from stddef.h.
+ * Makefile.in (USER_H, install-common-headers): Install gstddef.h as
+ stddef.h.
+
+Mon Nov 4 17:54:04 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * integrate.c (save_constants): If we are referencing a constant in
+ the constant pool in a different mode than its normal mode, make
+ a SUBREG so that we can record both modes.
+ (copy_for_inline, restore_constants): Handle these SUBREG's.
+ (copy_for_inline): Must copy a MEM if it's address contains an
+ ADDRESS (i.e., the address of a constant pool entry).
+
+ * expr.c (expand_expr, case PLUS_EXPR): If adding constant, FP, and
+ something else, add FP to the constant and then add the other operand.
+
+ * global-alloc.c (find_reg): If all_regs_p, use ALL_REGS, not
+ GENERAL_REGS.
+ * local-alloc.c (block_alloc): Likewise.
+
+ * genoutput.c (gen_expand): Record all the same information as
+ for a DEFINE_INSN.
+
+ * cse.c (simplify_binary_operation, case PLUS): Simplify expressions
+ like (a +/- b) - (a +/- c).
+ (simplify_binary_operation, case MULT): For X * (-1), try to simplify
+ the NEG before we make it.
+
+Mon Nov 4 16:29:01 1991 Mark Eichin (eichin at cygnus.com)
+
+ * cp-pt.c (overload_template_name): use build_lang_decl so that
+ lang_specific gets initialized properly.
+
+ * cp-parse.y (LC): use make_lang_type to produce complete node,
+ not just make_node.
+
+ * cp-ptree.c (print_lang_type): return if TYPE_LANG_SPECIFIC is
+ null, since everything printed here is in lang_specific.
+
+Mon Nov 4 16:17:48 1991 James Van Artsdalen (james at raid.dell.com)
+
+ * x-i386v4: New file.
+ * configure (i386-sysv4): Use it.
+
+Mon Nov 4 12:36:09 1991 Michael Meissner (meissner at osf.org)
+
+ * gcc.texinfo (BRANCH_COST): Move so BRANCH_COST formats correctly.
+
+Mon Nov 4 08:03:44 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * x-m88kdgux, x-m88ksysv4: Don't set XCFLAGS.
+
+ * jump.c (jump_optimize): Change "if (...) x = 0;" to use a
+ store-flag insn if jumps are expensive (BRANCH_COST).
+
+ * tm-m88k.h (BRANCH_COST): Branches are cheap on the m88100.
+ (OVERRIDE_OPTIONS): Make m88100 the default.
+ (STORE_FLAG_VALUE): Use -1.
+ (.ctors and .dtors sections): Change section flags.
+ * m88k.md (sxx, negate sxx): Use ext and extu. Eliminate extendsxx.
+
+Mon Nov 4 07:19:36 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * romp.md (movdf, movdi): When splitting, ensure we put in a CLOBBER
+ for a scratch register, when needed.
+
+ * tm-a29k.h (SIZE_TYPE, PTRDIFF_TYPE, WCHAR_TYPE): Define to be
+ compatible with those chosen by EPI.
+
+ * tm-rs6000.h (REG_ALLOC_ORDER): Put CR registers before integer regs.
+
+ * cse.c (simplify_relational_operation): Fix error in last change.
+
+Sun Nov 3 12:22:41 1991 Torbjorn Granlund (tege at sics.se)
+
+ * longlong.h (m68020 count_leading_zeros): Fix typo in previous
+ change.
+
+Sun Nov 3 09:25:39 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (simplify_relational_operation, cases GEU, LTU, GTU, LEU):
+ Simplify comparisons that have known values such as (unsigned) x < 0.
+
+ * final.c (final_scan_insn): If we've just made a branch unconditional,
+ convert (set (pc) (return)) to (return).
+ Use const_true_rtx instead of calling gen_rtx to make it again.
+
+ * x-romp (CC): Pass -Hnocpp to hc so it will use builtin preprocessor.
+ (INTERNAL_CFLAGS): Don't define BSTRING here.
+ * xm-romp.h (alloca): Add definition to allow use of hc's builtin.
+ (BSTRING): Define here.
+
+ * reload1.c (spill_hard_reg): Correct typo in previous change; had
+ test backwards.
+
+ * function.c (instantiate_virtual_regs_1, case PLUS): If can't
+ replace operand with register, try to replace all copies of operand
+ with the register in case of MATCH_DUP.
+
+ * recog.c (validate_replace_rtx_1): Use rtx_equal_p to see if
+ things are equal.
+
+ * genconfig.c (max_recog_operands, max_dup_operands): Remove `_flag'
+ in name since these aren't flags.
+ (max_clobbers_per_insn): Likewise.
+ (main): Default to at least 10 operands (for asm) and 1 dup operand.
+
+Sun Nov 3 07:26:57 1991 Ron Guilmette (rfg at ncd.com)
+
+ * Makefile.in (gnulib1.null): Use $(GCC_FLAGS) instead
+ of $(CCLIBFLAGS).
+ (gnulib1): Don't copy gnulib1.c into a temporary .c file before
+ compiling. That messes up the source file names in the debug info,
+ which makes it harder to debug gnulib1 problems.
+
+ * Makefile.in (install-*): Force removal of previously installed files
+ before installing new ones (in case they got set to read-only somehow).
+
+ * Makefile.in (uninstall): Remove protoize.1 and unprotoize.1 man
+ page files.
+
+Sat Nov 2 22:42:06 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * out-a29k.c (output_epilog): Remove write_symbols from parameter list
+ of call to final_scan_insn.
+ * out-m88k.c (preserve_registers): Likewise.
+ * out-mips.c (function_epilogue): Likewise.
+ * out-sparc.c (output_function_epilogue, output_tail_call): Likewise.
+
+Sat Nov 2 22:02:45 1991 Ken Raeburn (raeburn at cygnus.com)
+
+ * cp-search.c (push_class_decls): Added missing argument to
+ overload_template_name.
+
+ * cp-ptree.c (print_lang_decl): Don't print lang-specific fields
+ for FIELD_DECL, since it has only the shorter flags structure.
+
+ * cp-class.c (finish_struct_method): Fixed comment typo.
+
+ * cp-decl.c: Add some code for debugging binding level
+ manipulations, conditionalized on DEBUG_CP_BINDING_LEVELS.
+ (debug_bindings_indentation): New var, used to maintain indentation
+ to indicate which changes are on the behalf of other routines.
+ (push_binding_level): Print debugging messages to track binding
+ level changes and call/nesting sequences.
+ (pushlevel, poplevel): Ditto.
+ (pushlevel_class): Ditto.
+ (pop_binding_level): Ditto. Also scribble over freed binding level,
+ and don't store it for re-use.
+ (poplevel_class): Ditto.
+ * cp-decl.h (debug_bindings_indentation): Declare it.
+ * cp-pt.c (push_template_decls, pop_template_decls): Added
+ debugging fprintf calls here too.
+
+Sat Nov 2 17:00:22 1991 Ron Guilmette (rfg at ncd.com)
+
+ * cp-except.c (finish_exception_decl): Change `enum debugger' to
+ `enum debug_info_type'.
+ * final.c (final_start_function, final, final_end_function,
+ output_source_line): Delete the `write_symbols' parameter.
+ Instead use the global `write_symbols' declared in flags.h.
+ * sched.c (unlink_notes, schedule_block, schedule_insns): Compare
+ `write_symbols' with NO_DEBUG rather than with zero.
+ * toplev.c (rest_of_decl_compilation, rest_of_compilation): Don't
+ pass `write_symbols' to assemble_variable, final_start_function,
+ final, final_end_function.
+ * varasm.c (assemble_variable): Delete the `write_symbols' parameter.
+ Instead use the global`write_symbols' declared in flags.h
+
+Sat Nov 2 09:48:47 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * caller-save.c: Don't include reload.h; not used.
+ * Makefile.in (caller-save.o): Likewise.
+
+ * final.c (final_start_function, final_end_function, final): Change
+ enum debugger to enum debug info to finish previous change.
+ (final_scan_insn, output_source_line): Likewise.
+ * varasm.c (assemble_variable): Likewise.
+
+ * rtlanal.c (modified_between_p, find_last_value): New functions; not
+ yet used.
+ * rtl.h (find_last_value): Declare.
+
+ * cse.c (simplify_binary_operation): Remove comparison cases from
+ here; now in simplify_relational_operation.
+
+Fri Nov 1 19:04:50 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rtl.h (REG_DEAD): More precisely describe when a REG_DEAD note
+ should be present.
+ * rtlanal.c (dead_or_set_regno_p): New function.
+ (dead_or_set_p): A value is dead or set only if each register in it
+ is dead or set.
+ * combine.c (reg_bitfield_target): New function.
+ (distribute_notes, case REG_DEAD): Place REG_DEAD note only if both
+ dead_or_set_p and reg_bitfield_target are false.
+ * flow.c (cc0_live): New variable; replaces following_insn_dead.
+ (propagate_block): Initialize cc0_live instead of following_insn_dead.
+ Track CC0's life just like other regs instead of using special
+ mechanism involving following_insn_dead.
+ Clear last_mem_set even when not final pass.
+ Don't call mark_used_regs on dead insns.
+ (insn_dead_p): Use cc0_live to see if a set of CC0 is dead.
+ Correctly test if set of multi-word value is needed; set if dead only
+ if none of the words are needed.
+ (libcall_dead_p): Allow CALL to be in any part of PARALLEL.
+ Use insn_dead_p to see if SET of return register is dead; old code
+ incorrectly tested multi-word registers.
+ (mark_set_1): Track whether all or only some words of a value are
+ needed; write partial REG_UNUSED note if only some words won't be
+ needed.
+ (mark_used_regs): Likewise for REG_DEAD notes.
+ Set cc0_live for a reference to CC0.
+ Don't write REG_DEAD note if register is already dead or set in INSN.
+ No longer check for unused SET_DEST since it won't be called for dead
+ insns; if a single SET's result was unneeded but the insn can't be
+ deleted, the source of the SET is live.
+ Clear last_mem_set even if not final pass.
+
+ * reload1.c (gen_input_reload): Handle REG+MEM the same as REG+INT.
+
+ * gcc.c (xmalloc, xrealloc): Use unsigned instead of size_t for `size'.
+
+ * cccp.c (bcopy, bzero, bcmp): No longer static. Only declare at
+ front of file if we are going to define them later.
+
+Fri Nov 1 18:57:25 1991 Ron Guilmette (rfg at ncd.com)
+
+ * cccp.c (timebuf): Declaration moved out of `special_symbol' and
+ made global (and "static") to get values of __DATE__ and __TIME__
+ to remain constant throughout compilation.
+ (debug_output): New variable.
+ (main): Accept -g3 option and set debug_output when seen.
+ (main): Moved initializations of `outbuf' and `fp' to before call
+ to `initialize_builtins'.
+ Pass fp and &output to initialize_builtins so that it can write out
+ artificial #define lines for builtin symbols.
+ Call `output_line_directive' before doing each make_define or
+ make_undef so that when `debug_output' is in effect, we'll
+ get #line 0 directives before each artificial #define or #undef.
+ (special_symbol): Initialization of `timebuf' deleted from here.
+ (initialize_builtins): Initialize timebuf here.
+ (pass_thru_directive): New function.
+ (do_define, do_undef): Use `pass_thru_directive' for "precompilation"
+ of header files.
+ Call `pass_thru_directive' when -g3 option used.
+ (initialize_builtins): Generate artificial #define directives (in the
+ output) to represent the values of all builtin symbols whose defs
+ can't change during compilation.
+ (make_undef): Added output buffer param so that make_undef could let
+ do_undef do output to stdout.
+ Call do_undef with a real output buffer.
+ (make_definition): Likewise.
+ Many minor changes to get strings passed to do_define to always look
+ like correctly formed #define directives.
+
+ * c-decl.c (store_parm_decls): Remove non-params from the list before
+ checking to see if the type of any element of the list is complete.
+ (pushlevel): Fixed bug which caused scope of tagged types to be
+ incorrectly assigned to the outermost {} block of functions rather
+ than to the outermost binding contours of functions.
+ (pushtag): Revised to clarify code used to find applicable
+ binding level for a tagname.
+ Set TYPE_CONTEXT of new tagged type so that dwarfout.c can tell
+ file-scope tagged types from non-file-scope tagged types.
+ Create a NULL-named TYPE_DECL node for each new tagged type
+ (even incomplete ones).
+ (finish_struct, finish_enum): Don't create NULL-named
+ TYPE_DECL nodes for complete tagged types. (This is now done in
+ `pushtag' for *all* new tagged type declarations and definitions.)
+
+ * toplev.c (compile_file): Adjust conditions under which
+ `dwarfout_file_scope_decl' is called during final traversal of
+ the chain of file-scope decls so that it is called also for
+ file-scope TYPE_DECLs.
+ (rest_of_decl_compilation): Deleted call to `dwarfout_file_scope_decl'
+ for file-scope TYPE_DECLs; call `dwarfout_file_scope_decl' instead of
+ `dwarfout_file_scope_symbol'.
+
+ * dbxout.c, sdbout.c, flags.h, toplev.c: Change DEBUG_LEVEL_* to
+ DINFO_LEVEL_* to prevent possible confusion about meaning.
+
+ * flags.h, toplev.c: (enum debug_info_type): Renamed type from
+ `debugger' and cleaned up definition of type (including deletion
+ of useless EXTENDED_DBX_DEBUG code).
+ (use_gdb_dbx_extensions): Make declarations conditional on
+ DBX_DEBUGGING_INFO being defined.
+
+ * out-i860.c (output_fp_move_double, find_addr_reg): Add return stmts
+ to avoid warnings when compiling with -Wreturn-type.
+ (output_delayed_branch): Fix test for CONST_INT values which must be
+ loaded in two instructions (as two halves).
+ (function_epilogue): Remove ASM_OUTPUT_EPILOGUE_SUFFIX. (Superceeded
+ by ASM_DECLARE_FUNCTION_SIZE in varasm.c.)
+
+ * xm-i386.h (i386): Define in case the native host compiler doesn't.
+
+ * tm-svr4.h (SVR4): Define this rather than SVR4_target.
+ (ASM_FINAL_SPEC): Support the -pipe option.
+ (ASM_DECLARE_FUNCTION_NAME, ASM_DECLARE_OBJECT_NAME): Allow easy
+ redefinition of the syntax for second operand of .type.
+ (ASM_DECLARE_FUNCTION_SIZE): Fix line continuations.
+
+Fri Nov 1 14:14:14 1991 Michael Meissner (meissner at osf.org)
+
+ * out-mips.c (mips_asm_file_end): Generate correct code if the user
+ uses asm("name"). Patch from bothner@cygnus.com.
+
+ * mips-tfile.c (init_file initialization): Fix #ifdef
+ BYTES_BIG_ENDIAN to be #if BYTES_BIG_ENDIAN, to allow the DECstation
+ to work again.
+ (toplevel): Remove declarations of internal library functions,
+ _flsbuf, _filbuf.
+
+Thu Oct 31 14:59:11 1991 Torbjorn Granlund (tege at mole.gnu.ai.mit.edu)
+
+ * longlong.h (m68020 count_leading_zeros): Use %b for offset and
+ width syntax for bfffo instruction.
+
+Thu Oct 31 05:45:54 1991 Ken Raeburn (raeburn@cygnus.com)
+
+ * cp-decl.c (PUSH_BINDING_LEVEL, POP_BINDING_LEVEL): Replaced
+ uses of macros with their expansions, and deleted the macros.
+
+Wed Oct 30 12:45:33 1991 Ron Guilmette (rfg at ncd.com)
+
+ * dwarfout.c, dwarf.h, README.DWARF: Replacement files that bring
+ the Dwarf implementation up to that defined by draft 5 of the
+ UI/PLSIG Dwarf specification.
+
+Wed Oct 30 10:50:07 1991 Michael Meissner (meissner at osf.org)
+
+ * objc-parse.y (yylex): Cast short types to int before shifting, to
+ avoid bogus warnings from the MIPS C compiler.
+
+ * cccp.c (fancy_abort): Make this global again, so that
+ -Dabort=fancy_abort will not cause a link error, because obstack.c
+ contains a reference to abort.
+
+Wed Oct 30 07:38:08 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * SYSCALLS.c (abort): Undefine first.
+
+ * xm-m88k.h (HOST_WORDS_BIG_ENDIAN): Define it.
+ * out-m88k.c (output_and): Choose "clr" last.
+
+Tue Oct 29 22:49:47 1991 Michael Meissner (meissner at osf.org)
+
+ * tm-mips.h (num_refs): New global array.
+ (mips_count_memory_refs): New function decl.
+
+ * out-mips.h (num_refs): New global array to count number of 1, 2,
+ or 3 instruction data references with -mstats.
+ (mips_count_memory_refs): New function decl to determine whether a
+ data memory reference uses 1, 2, or 3 instructions.
+ (mips_move_1word, mips_move_2words): Call mips_count_memory_refs
+ as appropriate.
+ (function_epilogue): Print number of 1, 2, and 3 instruction
+ memory references if -mstats.
+
+ * mips.md (movsi_ulw, movsi_usw): Call mips_count_memory_refs if
+ needed.
+
+Tue Oct 29 05:14:27 1991 Ken Raeburn (raeburn at cygnus.com)
+
+ * cp-parse.y (template_def): Don't pass bogus declspecs to
+ start_decl.
+
+ * cp-pt.c (tsubst, case FUNCTION_DECL): Build new argument list
+ from method template, instead of retaining the old one.
+
+Tue Oct 29 00:44:51 1991 Ken Raeburn (raeburn at cygnus.com)
+
+ * cp-class.c (finish_struct): Skip type fields if they are
+ template names bound to their expansions.
+
+ * cp-decl.c (binding_levels_sane): Define only if PARANOID; use a
+ macro returning 1 otherwise. Check class_binding_level stack for
+ consistency also.
+ (pushdecl): Verify that bindings pushed at global scope are in
+ permanent obstack storage.
+ (start_decl): While processing_template_decl, don't also need to
+ verify that the decl uses the template parameters. For method
+ templates, construct proper method type for result. TREE_EXTERNAL
+ flag for methods should be cleared if DECL_EXTERNAL is clear.
+ (grokdeclarator, case CALL_EXPR): Intercept destructor templates,
+ which have a different internal form, and convert them to a form
+ that can be recognized.
+
+ * cp-decl2.c (grokclassfn): Include length of class name when
+ creating assembler name for destructor; otherwise ambiguities
+ result.
+
+ * cp-lex.c (identifier_typedecl_value): New fn; scans bindings of
+ identifier for a given type decl; falls back to name of type.
+ * cp-tree.h (IDENTIFIER_TYPEDECL_VALUE): Call it.
+
+ * cp-method.c (fndecl_as_string): Print constructor_name of type
+ for constructor and destructor, not type name.
+
+ * cp-parse.y (template_def): Don't output warning about missing
+ type and storage class, since this gets printed for destructor
+ templates.
+ (notype_declarator): Accept '~' PTYPENAME.
+ (scoped_typename): Want a PTYPENAME, not TYPENAME. Build a
+ SCOPE_REF node instead of calling resolve_scope_to_name.
+
+ * cp-pt.c (instantiate_member_templates): New fn. Instantiates
+ members associated with template for a given template class.
+ * cp-method.c (template_instantiate_once): Call it.
+
+ * cp-pt.c (end_template_decl): Catch destructor templates that
+ are being passed through without being converted to TEMPLATE_DECL
+ nodes; convert them now. Copy argument list for function template
+ into permanent storage.
+ (lookup_template_class): Supply IDENTIFIER_TEMPLATE data for new
+ anonymous type name.
+ (tsubst, case FUNCTION_DECL): Improve method lookup code.
+ (tsubst): Use hash table and build_cplus_* functions for building
+ new nodes when possible, so equality tests are easier. Extend
+ FUNCTION_TYPE case to handle METHOD_TYPE as well.
+ (instantiate_template): Don't do anything for error_mark_node.
+ (do_pending_expansions): Keep expansions not used in queue to check
+ again later.
+
+ * cp-tree.def: Fix up some comments relating to PT-related types.
+
+ * tree.c (init_tree_codes): Now void, in agreement with decl
+ elsewhere.
+
+Mon Oct 28 22:07:44 1991 Jeffrey A Law (law at b117.super.org)
+
+ * output.h (current_function_uses_pic_offset_table): Declare here
+ so that out-*.c can see it.
+
+ * tm-m68k.h (FINALIZE_PIC): New macro.
+ (PIC_OFFSET_TABLE_REGNUM): New macro. Defines which address
+ register is used to hold the offset table for PIC.
+ (CONDITIONAL_REGISTER_USAGE): Make PIC_OFFSET_TABLE_REGNUM be
+ fixed when generating position independent code.
+
+ * out-m68k.c (finalize_pic): New function.
+ (output_function_prologue): If generating position independent
+ code output assembler text to load the pic_offset_table register.
+
+Mon Oct 28 10:02:36 1991 Michael Meissner (meissner at osf.org)
+
+ * toplev.c (main): If -G is used, set g_switch_set to true, and set
+ g_switch_value to be the integer value of it's argument, for use in
+ the MIPS port to determine whether a static or global item goes into
+ the normal data area, or into the small data area.
+
+ * out-mips.c (g_switch_set, g_switch_value): Delete these global
+ variables, since toplev.c now defines them.
+
+ * tm-mips.h (EXTRA_INT_OPTIONS): Delete macro which is no longer
+ used in internal OSF patches to provide -G xx support.
+ (ASM_SPEC, CC1_SPEC, LINK_SPEC): Remove -G32, since the new -G
+ patches take care of it now.
+
+ * tm-decrose.h (ASM_SPEC, LINK_SPEC): Remove -G32.
+
+ * tm-decstatn.h (ASM_SPEC, LINK_SPEC): Remove -G32.
+
+ * tm-iris.h (ASM_SPEC, LINK_SPEC): Remove -G32.
+
+ * tm-mips-bsd.h (LINK_SPEC): Remove -G32.
+
+ * tm-mips-news.h (ASM_SPEC, LINK_SPEC): Remove -G32.
+
+ * tm-mips-sysv.h (LINK_SPEC): Remove -G32.
+
+Mon Oct 28 07:11:28 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): Don't delete unused SETs if they have
+ side-effects.
+
+ * Makefile.in, t-i386sco: Had both LIMIT_H and LIMITS_H; latter
+ is correct.
+
+ * combine.c (subst): New argument `unique_copy'; if non-zero ensure
+ each copy of `from' replaced gets a unique copy of `to'.
+ Pass arg to recursive callers.
+ (try_combine): Pass new arg to subst.
+
+ * Makefile.in (LANGUAGES): Use `objective-c' instead of `class-c'
+ to avoid confusion.
+
+ * gcc.c (xmalloc, xrealloc): Really make non-static.
+
+Mon Oct 28 00:21:56 1991 Michael Meissner (meissner at osf.org)
+
+ * tm-mips.h (CC1_SPEC): Convert -gline into -g1.
+
+Sun Oct 27 17:15:48 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (spill_hard_reg): Rework code that relies on the fact that
+ reg_class_superclasses[i][0] == i, since it isn't true!
+
+Sun Oct 27 06:15:24 1991 Ron Guilmette (rfg at ncd.com)
+
+ * configure: Always remove any files before we write them in case
+ the old copy was read-only.
+
+ * Makefile.in (manext): Now just extension without the period.
+ (mandir): Default to include manext.
+ (install-man): Adjust to new definition of manext.
+ (uninstall): Remove protoize.1 and unprotoize.1 from mandir.
+
+ * genemit.c (gen_exp): Write integer using %u instead of %d to
+ avoid warnings from some compilers when most negative int is written.
+
+ * cccp.c: Make variables not used outside this file static.
+ (main, line_to_error, xmalloc, xrealloc, xcalloc): Add missing return
+ statements (in unreachable paths).
+ (xmalloc, xrealloc, xcalloc, savestring): Make SIZE arg unsigned.
+
+Sun Oct 27 06:14:45 1991 Jeffrey A Law (law at b115.super.org)
+
+ * tm-m68k.h (SELECT_RTX_SECTION): New macro. Used to force
+ symbolic objects in the constant pool into the read-write data
+ section when generating position independent code.
+
+ * recog.c (general_operand, immediate_operand, nonmemory_operand):
+ Use LEGITIMATE_PIC_OPERAND_P to reject constants which are not
+ valid when generating position independent code.
+
+ * reload.c (find_reloads): Do not win in 's', 'i', or 'g' cases
+ if the constant does not satisfy LEGITIMATE_PIC_OPERAND_P.
+
+ * tm-m68k.h (LEGITIMATE_PIC_OPERAND_P): New macro.
+
+ * out-m68k.c (symbolic_operand): New function. Copied from
+ tm-sparc.h.
+
+ * gcc.texinfo: Document LEGITIMATE_PIC_OPERAND_P.
+
+Sat Oct 26 07:51:40 1991 Michael Meissner (meissner at osf.org)
+
+ * mips.md (movsi_usw): Remove invalid '&' constraint on a memory
+ address.
+
+Sat Oct 26 07:16:15 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * flow.c (find_basic_blocks): Build label_value_list as list of
+ CODE_LABELs, not LABEL_REFs.
+
+ * fold-const.c (optimize_bit_field_compare): Call fold on result
+ of build1 call that converts integer to proper mode.
+
+ * rtl.h (unsigned_condition, signed_condition): Add definition;
+ functions were previously added to jump.c.
+ * combine.c (simplify_comparison): Use unsigned_condition to simplify
+ last change.
+
+Sat Oct 26 06:48:59 1991 Jeffrey A Law (law at b115.super.org)
+
+ * tm-sun2.h, tm-sun3.h (ASM_SPEC): Pass "-k" to the assembler if
+ -fpic or -fPIC.
+
+Fri Oct 25 20:43:54 1991 Michael Meissner (meissner at osf.org)
+
+ * tm-mips.h (CC1_SPEC): Remove special rules for -g0, -g1, etc., now
+ that GCC supports these directly.
+
+ * configure (dec-mips-osf): DECstation running OSF/rose uses
+ t-decrose, not t-mips.
+
+ * x-decrose (COFF_CC, COFF_CFLAGS, WARNINGS): Delete.
+ (libdir, bindir, mandir): Put GCC 2 in the /usr/ccs/gcc tree.
+
+ * x-mips (comment): Delete a comment about cross compilers that is
+ no longer true.
+
+ * t-decrose (coff-obstack.o): Delete rule that is no longer used.
+
+Fri Oct 25 18:46:51 1991 Mark Eichin (eichin at cygnus.com)
+
+ * cp-dem.c (cp-demangle): added support for templates, static
+ data, and the new (correct) mangling for destructors.
+
+Fri Oct 25 16:18:18 1991 Mark Eichin (eichin at tweedledumber.cygnus.com)
+
+ * cp-decl2.c: (grokclassfn): destructor names *should* contain
+ the length; otherwise, we can't tell the difference between a
+ destructor for a class whose name begins with 't' and a destructor
+ for an instance of a template class.
+
+Fri Oct 25 02:15:12 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * SYSCALLS.c, protoize.c: Changes from rfg.
+ waiting for real changelog entries from rfg.
+
+ * gcc.c (xmalloc, xrealloc): No longer static.
+
+Thu Oct 24 19:21:04 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * fold-const.c (optimize_bit_field_compare):
+ Use build1 rather than convert, to avoid warnings.
+
+ * final.c (output_source_line): Fix if-scope for DBX fmt.
+
+Thu Oct 24 13:29:34 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * gcc.c gen*.c: Don't make fancy_abort static.
+
+Thu Oct 24 12:07:23 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * combine.c (simplify_comparison): When narrowing a comparison
+ and removing ANDs, make it unsigned.
+
+Thu Oct 24 08:02:04 1991 Ken Raeburn (raeburn at cygnus.com)
+
+ * cp-decl.c (binding_levels_sane): New function, tests that stack
+ of binding levels is consistent. Argument provides extra
+ identification for call site, in case compiler optimizes too well.
+ If PARANOID is not set, does nothing.
+ (push_binding_level, pop_binding_level): Now functions, for easier
+ debugging. Inlined under GNU C if not PARANOID.
+ (PUSH_BINDING_LEVEL, POP_BINDING_LEVEL): Invoke functions.
+ (push_to_top_level): Use type-shadowed slots to unwind
+ IDENTIFIER_TYPE_VALUE back to top level.
+ (start_decl): When processing a template decl, shouldn't need to
+ check uses_template_parms. For methods, modify arg list to include
+ `this'. Don't set context of template. Use perm_tree_cons when
+ building members list for class template.
+ (grokdeclarator): Check "friend" flag before calling
+ globalize_nested_type. Build a method type for a function that has
+ a context.
+
+ * cp-pt.c (end_template_decl): If template has non-null context,
+ chain it off of the containing class, rather than using pushdecl.
+ (instantiate_class_template): Instantiate all the member templates
+ hanging off the class template. Also, simplify some code in the
+ case where setup_parse is 0.
+ (tsubst): Check for several common values that won't be modified by
+ substitutions.
+ (tsubst, case FUNCTION_DECL): Don't return type passed if it has a
+ non-null context that might need fixing. Process that context while
+ building up the new decl node; use it to notify build_decl_overload
+ that we've got a method rather than a function.
+ (tsubst, case METHOD_TYPE): Handle like FUNCTION_TYPE; enhance that
+ case to handle TYPE_METHOD_BASETYPE when set.
+ (unify): Increment value pointed to by nsubsts, not the pointer
+ itself.
+ (do_pending_expansions): Method context is in DECL_CONTEXT, not
+ DECL_CLASS_CONTEXT.
+
+ * cp-lex.c (do_identifier): Don't try looking up fields in base
+ classes of UNINSTANTIATED_P_TYPE.
+
+ * cp-parse.y (primary): Call require_complete_type only for
+ CALL_EXPR nodes of types other than void.
+ (template_type): Don't call IDENTIFIER_TYPE_VALUE on
+ error_mark_node.
+
+ * cp-ptree.c (print_lang_decl): For UNINSTANTIATED_P_TYPE, show
+ template as well as parameters.
+
+ * cp-tree.h (DECL_TEMPLATE_*, UPT_*): New accessor macros for
+ TEMPLATE_DECL and UNINSTANTIATED_P_TYPE nodes. All (most?) uses
+ except for node creation changed to use these.
+ * cp-tree.def: Updated comments for these node types.
+
+ * cp-pt.c (uses_template_parms): Handle ADDR_EXPR.
+ (end_template_decl): For function with non-null context, pop class
+ binding level.
+
+Thu Oct 24 06:57:28 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * a29k.md, romp.md, rs6000.md (movdi, movdf, movti): Handle case of
+ reg-reg copy with overlapping registers correctly.
+
+ * out-rs6000.c (ccr_bit, case NE): Fix typo in bit number.
+ (output_epilog): Must restore stack using backchain if alloca called.
+
+ * romp.md, rs6000.md (extendxxyy2, zero_extendxxyy2): Use DEFINE_EXPAND
+ to force operand to register; DEFINE_INSN allows memory (better cse).
+
+ * rs6000.md (ffssi2): New patterns.
+ (maskir): Add patterns to use maskir instructions.
+
+ * tm-a29kunix.h (TARGET_DEFAULT, CPP_SPEC): Default to 29050.
+
+ * tm-rs6000.h (LINK_SPEC): Add -bnodelcsect.
+ (HARD_REGNO_MODE_OK): Delete kludge that didn't allow DImode in reg 31
+ and TImode in 29-31; the bug was fixed elsewhere.
+
+Wed Oct 23 17:48:43 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): If an insn doesn't match, check for case
+ where first SET's result isn't used; previously only checked second.
+
+ * combine.c (try_combine): When we substitute into a COMPARE, check
+ SELECT_CC_MODE to see if we should try to change the mode of the
+ COMPARE and its result.
+
+Wed Oct 23 16:38:26 1991 Torbjorn Granlund (tege at hal.gnu.ai.mit.edu)
+
+ * gnulib2.c (__ashrdi3): Compute sign extension shift count from
+ machine word size instead of using 31.
+
+Wed Oct 23 14:25:04 1991 Michael Meissner (meissner at osf.org)
+
+ * tm-mips.h (PREFERRED_DEBUGGING_TYPE): Unless otherwise defined,
+ set to SDB_DEBUG.
+
+ * tm-decrose.h (PREFERRED_DEBUGGING_TYPE): Define to DBX_DEBUG.
+
+ * out-mips.c (override_options): Don't override debugger choice now
+ that PREFERRED_DEBUGGING_TYPE is provided.
+
+Wed Oct 23 07:25:32 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * sdbout.c (sdbout_symbol/FUNCTION_DECL, sdbout_toplevel_data,
+ sdbout_end_epilogue): Use DECL_ASSEMBLER_NAME to avoid link-time
+ multiple definitions.
+
+Tue Oct 22 15:06:31 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload): For now, we must always have a frame pointer
+ if a function calls alloca and EXIT_IGNORE_STACK is non-zero.
+
+ * cse.c (insert_regs): Don't make new quantity for the register in
+ a SUBREG.
+ (merge_equiv_classes): Don't invalidate the register inside a SUBREG.
+ (canon_hash, case SUBREG): Remove code to treat SUBREGs like REGs.
+
+Tue Oct 22 10:25:29 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * tm-m88kdgux.h (PREFERRED_DEBUGGING_TYPE): Use it.
+ * tm-m88k.h (OVERRIDE_OPTIONS): Don't override write_symbols.
+
+ * out-m88k.c (m88k_output_{prologue,epilogue}): Renamed.
+
+Tue Oct 22 00:51:48 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c++: New shell script.
+
+ * gcc.c (default_compilers): Treat .ii files as cpp'd C++.
+
+ * varasm.c (make_function_rtl): Don't alter DECL_ASSEMBLER_NAME.
+
+ * toplev.c (main): Use PREFERRED_DEBUGGING_TYPE if support
+ more than one format.
+
+Mon Oct 21 23:08:02 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (grokdeclarator): Fix error message for long float.
+
+Mon Oct 21 16:55:31 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * optabs.c (add_equal_note): New function.
+ (expand_binop): Delete some obsolete, turned-off code.
+ Use GET_RTX_CLASS to see if operator is commutative.
+ Call add_equal_note if we make a multi-insn sequence; if it fails,
+ redo the operation without our target.
+ In multi-word cases, don't allow TARGET to be the same as an input.
+ (expand_unop): Allow operation to fail.
+ Call add_equal_note and allow failure, like in expand_binop.
+ In multi-word case, don't allow TARGET to be OP0.
+ (emit_unop_insn): Use add_equal_note; ignore its failure here.
+
+ * optabs.c (expand_float, expand_fix): In cases when we will jump,
+ ensure we call emit_queue before protect_from_queue.
+ Eliminate redundant calls to protect_from_queue and force_non_mem.
+
+ * reorg.c (steal_delay_list_from_target): Don't take an insn from
+ the fallthrough thread of an annulled branch insn.
+
+Mon Oct 21 16:55:08 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * configure (m88k targets): Complete last change.
+
+Mon Oct 21 16:06:25 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * integrate.c (copy_rtx_and_substitute): When making copy of frame,
+ round size to keep substituted frame pointer aligned.
+ (CEIL_ROUND): New macro.
+
+Mon Oct 21 15:16:17 1991 Michael Meissner (meissner at osf.org)
+
+ * tm-mips.h (GP_REG_OR_PSEUDO_NONSTRICT_P): New macro for
+ REG_OK_FOR_{BASE,INDEX}_P in non strict mode. Fix typos in the
+ previous change.
+ (GP_REG_OR_PSEUDO_P): Rename to GP_REG_OR_PSEUDO_STRICT_P.
+ (REG_OK_FOR_BASE_P): Use GP_REG_OR_PSEUDO_NONSTRICT_P if non strict.
+ (REG_OK_FOR_INDEX_P): Use GP_REG_OR_PSEUDO_NONSTRICT_P if non strict.
+ (GO_IF_LEGITIMATE_ADDRESS): Indicate if strict checking is being
+ used if -mdebugb tracing.
+
+Mon Oct 21 15:08:15 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * Makefile.in (*.o): Add insn-codes.h to all lists using expr.h.
+ (dwarfout.o): Add dwarf.h, reload.h, output.h, and insn-config.h.
+
+ * c-tree.h (TYPE_ACTUAL_ARG_TYPES): New macro for list of actual
+ types.
+ * c-decl.c (store_parm_decls): Compute TYPE_ACTUAL_ARG_TYPES if a
+ prototype is not present. Delete old method.
+ (duplicate_decls): Provide better diagnostics if a prototype
+ follows a function definition.
+
+ * m88k.md (gen_divsi3): Delete REG_EQUAL workaround.
+ * t-m88k{,luna,sysv4}: Target makefile portion (from Mike Stump).
+ * x-m88k{,dgux,luna,sysv4}: Corresponding deletions.
+ * {tm,t,x}-m88ksysv4: Renamed from m88ksvr4. Deleted xm-m88ksvr4.
+ * {tm,xm}-m88ksysv3: Renamed from v88r32.
+ * configure: Corresponding changes.
+
+ * tm-m88k.h (ASM_OUTPUT_{CONSTRUCTOR,DESTRUCTOR}): Output to
+ .ctors/.dtors sections.
+ (TARGET_SWITCHES): Add -m88000, -m88100, and -m88110. Replace
+ DG/UX MXDB options with SUBTARGET_SWITCHES macro.
+ * tm-m88kdgux.h (SUBTARGET_SWITCHES, ASM_SPEC, ASM_FIRST_LINE):
+ Put MXDB options here changing -mdwarf to -mstandard.
+
+Sun Oct 20 06:39:54 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (simplify_comparison, case PLUS): Only do simplification
+ for equality comparison due to overflow problems.
+
+ * gen*.c: Remove "void *" and uses of size_t added by recent change.
+
+ * reload.c (find_reloads): If "&" given without any registers,
+ turn off earlyclobber, in addition to giving error.
+
+ * Makefile.in (STAGE_GCC): Deleted.
+ (STAGESTUFF): Add gcc (from STAGE_GCC) and gcc-cross.
+
+Sun Oct 20 04:37:21 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl.c (grokfndecl): Use DECL_NAME, not DECLARATOR at end of
+ function, since DECL_NAME may be different if it's an operator name.
+
+ * cp-cvt.c (convert_pointer_to): Test if PARENT is TREE_VEC
+ before testing IS_AGGR_TYPE.
+
+Sun Oct 20 00:40:47 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (link_command_spec): -collect converts to -c.
+
+ * toplev.c (main): Support -gstabs and -gcoff. Fix args to strncmp.
+
+Sat Oct 19 21:51:03 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c: Use const_true_rtx instead of const1_rtx.
+ (delete_scheduled_jump): Don't delete an insn that sets CC0 if it
+ has a side-effect.
+ (update_block): Add missing declaration for parameter WHERE.
+ (fill_slots_from_thread): Stop search if we find an insn that we
+ can't put into the delay slot unless we own the thread.
+
+Sat Oct 19 17:30:23 1991 Michael Meissner (meissner at osf.org)
+
+ * tm-mips.h (GP_REG_OR_PSEUDO_P): New macro to make sure a reg or
+ pseudo reg during reload will eventually be a GP register for use as
+ a base or index register. This fixes a bug where a FP register
+ could be used as a base or index register in some cases after
+ convert from floating point to integer was done.
+ (REGNO_OK_FOR_BASE_P, REGNO_OK_FOR_INDEX_P): Use GP_REG_OR_PSEUDO_P.
+ (REG_OK_FOR_BASE_P, REG_OK_FOR_INDEX_P): In the non strict version,
+ don't allow hard FP registers ever.
+
+Sat Oct 19 11:59:55 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * tm-sun3.h, tm-sparc.h (WORD_SWITCH_TAKES_ARG):
+ Check for Tdata as well as target.
+
+ * c-decl.c (grokdeclarator): Don't warn for array of incomplete elt.
+
+ * expr.c (expand_expr): For INDIRECT_REF, don't set unchanging bit.
+ * c-typeck.c (build_indirect_ref): Do set TREE_UNCHANGING if nec.
+
+ * reload.c (find_reloads): Warning or error for misuse of `&'.
+ * toplev.c (warning_for_asm): New function.
+
+ * t-i386sco: New file.
+ * x-i386sco: Add -Di286 to CC, OLDCC.
+ (LIMIT_H): Moved to t-i386sco.
+
+Sat Oct 19 09:08:11 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * gcc.c: Add missing extern declarations deleted by last change.
+ (xrealloc, xmalloc): Don't declare as void *; non-ANSI compilers
+ can't handle it.
+
+Sat Oct 19 08:26:13 1991 Ron Guilmette (rfg at ncd.com)
+
+ * tree.h: Fix spelling error in comment.
+
+ * tree.def, cp-parse.y: Change comments that refer to LET_STMT nodes to
+ refer to BLOCK nodes.
+
+ * gcc.c, gen*.c: Declare as static objects that aren't referenced
+ outside the file they are in.
+ (xrealloc, xmalloc): Functions return char *, not int.
+ (main): Add missing returns (in unreachable code) to avoid warnings
+ when compiled with -Wreturn-type.
+ * gcc.c (pexecute): Likewise.
+ * genattrtab.c (operate_exp): Likewise.
+
+Fri Oct 18 16:58:12 1991 Eric Youngdale (youngdale at v6550c.nrl.navy.mil)
+
+ * make-cc1.com: Finish changeover from cplus-* to cp-*.
+
+Fri Oct 18 16:57:37 1991 Ron Guilmette (rfg at ncd.com)
+
+ * tm-svr4.h: Delete lines duplicated due to transmission problems.
+
+Fri Oct 18 16:55:53 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (unsigned_condition, signed_condition): New functions.
+
+ * configure (vax): Set tm_file to tm-vax.h so "configure vax-dec-bsd"
+ works.
+
+ * combine.c (subst, case PLUS, MINUS): Remove some simplifications
+ from here.
+ * cse.c (simplify_binary_operation, case PLUS, MINUS): Put these
+ simplifications here.
+ Strip off CONST when looking for some simplifications.
+ Add code to simplify (a - (a - b)).
+
+ * combine.c (expand_compound_operation): Correctly handle case where
+ we have a ZERO_EXTRACT that extends beyond the bounds of the object.
+
+ * global-alloc.c (mark_elimination): No longer have FORBIDDEN_REGS as
+ argument.
+ * reload1.c (reload): Don't pass FORBIDDEN_REGS to mark_elimination.
+
+ * cse.c (simplify_{unary,binary,relational}_operation): Complete
+ change that removes warnings from floating-point traps when constant
+ folding (some cases had been omitted).
+
+Fri Oct 18 16:41:29 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * stmt.c (expand_anon_union_decl): When creating new mem, copy the
+ RTX_UNCHANGING_P and MEM_IN_STRUCT_P bits from the old one.
+
+ * sparc.md: Add new scc addx/subx patterns.
+
+Fri Oct 18 09:10:43 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-parse.y (stmts): Fix parsing rules to match C++ semantics
+ better (and hence give the compiler better error recovery).
+
+Thu Oct 17 19:31:15 1991 Ken Raeburn (raeburn at cygnus.com)
+
+ * cp-pt.c (tsubst): For NEGATE_EXPR, call build1, not build.
+ Handle NOP_EXPR likewise.
+ (unify, case TEMPLATE_CONST_PARM): Copy value to permanent obstack.
+
+ * cp-method.c (PARM_CAN_BE_ARRAY_TYPE): If not already defined,
+ define it to be 1.
+ (build_overload_name): Test to see if it's nonzero, rather than
+ whether it's defined; this permits compilation options to disable
+ it, but leave it enabled by default. Add one to the array size,
+ since the value retrieved appears to be the maximum index, not the
+ true array size.
+
+Thu Oct 17 19:15:37 1991 Mark Eichin (eichin at tweedledumber.cygnus.com)
+
+ * cp-pt.c (instantiate_class_template): has an argument to
+ indicate whether to setup for parsing or not. (All existing cases
+ did a feed input, but if we are trying to set up intermediate nodes
+ while waiting for the parser to return to a template_instantiate
+ site we need to suppress the parsing part of it, which will get
+ redone later.)
+ (tsubst): under case UNINSTANTIATED_P_TYPE, actually instantiate any
+ class templates that are needed for function return values, and set
+ them up as pending templates to be run later.
+
+ * cp-parse.y (primary): since build_x_function_call doesn't
+ require a complete type any more in certain cases, we instantiate
+ any pending templates and then require_complete_type on the
+ remainder.
+
+ * cp-typeck.c (build_function_call_real): added an argument to
+ optionally skip the require_complete_type... implicit template
+ instantiation has to be postponed, so we won't get a complete type
+ until the parser can grab it.
+
+ * cp-call.c (build_overload_call_real): added an argument do
+ allow choice of build_function_call_maybe or build_function_call
+ based on whether we thought we would require a complete type out of
+ build_function_call.
+
+Wed Oct 16 09:06:57 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * c-decl.c (store_parm_decls): Fix and disable recording the arg
+ type list for the function indicating the number of arguments.
+ * c-typeck.c (self_promoting_args_p): Allow the arg type to be null.
+
+ * expmed.c (store_bit_field, extract_bit_field): Add checks for
+ MEM_IN_STRUCT_P if the structure reference is a MEM.
+
+Tue Oct 15 18:37:50 1991 Ken Raeburn (raeburn at cygnus.com)
+
+ * cp-call.c (build_overload_call): If template match fails, still
+ set function field of candidate structure, and set bad_arg field to
+ new magic number -4 to indicate failed type unificiation.
+
+ * cp-class.c (add_method): Call make_function_rtl only if not
+ processing a template declaration.
+
+ * cp-tree.def: New node type, UNINSTANTIATED_P_TYPE, for
+ parameterized types that haven't had parameters filled in yet.
+ Looks like a type node.
+
+ * cp-decl.c (struct binding_level): New flag indicating any name
+ should be accepted when looked up at this level. This is a kludge
+ to try to deal with methods of parameterized types.
+ (declare_uninstantiated_type_level): Set it.
+ (uninstantiated_type_level_p): Return it.
+ * cp-class.c (pushclass): If the "class" type is
+ UNINSTANTIATED_P_TYPE, flag it in the new binding level.
+
+ * cp-decl.c (push_overloaded_decl): New argument to indicate
+ whether the decl should be forgotten when the current level is
+ exited. Callers changed.
+ (push_overloaded_decl_top_level): Ditto.
+ (dont_forget_overload): Deleted.
+ (push_overloaded_decl_1): New fn; like push_overloaded_decl, but
+ never forgets. Intended only for use by auto_function macro.
+ (auto_function): Use it.
+
+ * cp-decl.c (print_binding_level): Print type-shadowed field at
+ each level. Skip fields with no values.
+
+ * cp-decl.c (adjust_type_value): Use SET_IDENTIFIER_TYPE_VALUE,
+ not set_identifier_type_value.
+
+ * cp-decl.c (pushdecl): Undo Oct 4 back-out of previous change.
+ Set type value of name of passed decl, instead of name of type in
+ passed decl.
+ (pushdecl_top_level): Search type-shadowed fields of outer binding
+ levels, munging outermost one if found to cause it to "restore" the
+ new global value.
+
+ * cp-decl.c (push_overloaded_decl): Don't punt second or later
+ templates of a given name.
+
+ * cp-decl.c (start_decl): Template-handling code moved up, to
+ cope better with variable declarations. Don't check for incomplete
+ type or constructor requirements when processing template.
+
+ * cp-decl2.c (build_push_scope): If passed error mark node, just
+ return it.
+ (constructor_name): Handle UNINSTANTIATED_P_TYPE.
+
+ * cp-lex.c (identifier_type): Don't return PTYPENAME for function
+ template name.
+
+ * cp-method.c (report_type_mismatch): New magic bad-arg value -4
+ indicates type unification failure.
+ (build_overload_name, case UNINSTANTIATED_P_TYPE): Handle like other
+ template-related types that shouldn't get visibility outside the
+ compiler.
+
+ * cp-parse.y (template_type): Use IDENTIFIER_TYPE_VALUE from
+ name, if expansion doesn't happen.
+ (tmpl.1, tmpl.2): Now type <ttype>. Value is null or return value
+ from instantiate_class_template.
+ (template_instantiation): Always put copy of decl in global scope.
+ Use pushdecl_top_level instead of setting IDENTIFIER_GLOBAL_VALUE
+ slot.
+ (LC): If type has been or is being defined, push a new type with the
+ same name, to avoid conflict.
+ (try_for_typename): New type <itype>. Value is non-zero iff type to
+ be pushed uses no template parms and isn't error_mark_node.
+ (scoped_id): Return error_mark_node for template parameter uses, and
+ leave error_mark_node alone. Only pop class if try_for_typename
+ value is non-zero.
+ (scoped_typename): Ditto.
+
+ * cp-pt.c (end_template_decl): If template decl/class head arg is
+ null, punt. For non-type templates that didn't come in as template
+ decls, clear public flag. Such cases shouldn't arise any more; just
+ put in abort call for now until we're sure. Comment out code for
+ forcibly removing temporary values of template type parms; Michael
+ broke the code and fixed the original problem. Handle error case
+ where decl to be pushed might be null.
+ (coerce_template_parms): Handle arg list as TREE_VEC as well as
+ TREE_LIST. If arg list uses template parms, return
+ UNINSTANTIATED_P_TYPE node.
+ (uses_template_parms, case UNINSTANTIATED_P_TYPE): Return 1.
+ (instantiate_class_template): Now returns tree -- error_mark_node or
+ NULL_TREE or class type; callers and decls changed. Assign
+ TYPE_NAME field when building new RECORD_TYPE and TYPE_DECL nodes.
+ Don't need to do extra poplevel any more.
+ (tsubst): Handle UNINSTANTIATED_P_TYPE, MINUS_EXPR, PLUS_EXPR,
+ NEGATE_EXPR.
+ (undo_template_name_overload): Don't need to explicitly clear type
+ field any more.
+ (overload_template_name): Push a TYPE_DECL, instead of explicitly
+ setting type value field.
+ (end_template_instantiation): Don't need to pop a level any more.
+ (reinit_parse_for_template): Throw away saved block for null or
+ error template node.
+ (type_unification): Handle variadic functions, and functions with
+ default values for arguments.
+ (unify): Handle TREE_VEC and UNINSTANTIATED_P_TYPE.
+
+ * cp-ptree.c (print_lang_type): Handle UNINSTANTIATED_P_TYPE.
+
+ * cp-tree.h (push_overload_decl): Declare here, not in
+ cp-decl.c.
+ (TEMPLATE_TYPE_* macros): Delete unused (and now incorrect)
+ versions.
+
+Mon Oct 14 14:30:32 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * integrate.c (expand_inline_function): Fix typo from last edit,
+ where TYPE_MODE was applied to an argument, not the type of an
+ argument.
+
+ * cse.c (canon_hash, SUBREG case): Add cast which is needed by some
+ compilers.
+
+Mon Oct 14 07:59:50 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * toplev.c (rest_of_compilation): Compute the function's name and
+ pass it to assemble_{start,end}_function.
+ * varasm.c (assemble_start_function): New parameter.
+ (assemble_end_function): New function for ASM_DECLARE_FUNCTION_SIZE.
+ * final.c, sdbout.c: Correct comments.
+ * tm-svr4.h, tm-sysv4.h (ASM_DECLARE_FUNCTION_SIZE): Add and use a
+ NAME parameter.
+ * tm-m88k.h (ASM_DECLARE_FUNCTION_SIZE): Override svr4 definition.
+ * out-m88k.c (output_prologue): Delete previous method.
+
+ * m88k.md: Use trap_if.
+ (divsi3): Store into output operand only once to aviod problems
+ with REG_EQUAL note.
+ * out-m88k.c (output_call): Accomodate assembler range
+ restriction.
+ * tm-m88kdgux.h (AS_BUG_IMMEDIATE_LABEL): Specify the restriction.
+ (ASM_SPEC): Pass -KV3 to the assembler in some cases.
+ * tm-m88k.h (CONDITIONAL_REGISTER_USAGE): Mark the addressing base
+ register global.
+
+Sat Oct 12 00:30:23 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * Makefile.in (.SUFFIXES): Rule added.
+
+ * dbxout.c (dbxout_block): Handle debug_info_level.
+ * sdbout.c (sdbout_begin_block): Likewise.
+ * toplev.c (compile_file): Likewise, when calling init_emit_once.
+ * emit-rtl.c (init_emit_once): Cosmetic change.
+ * Makefile.in (sdbout.o): Include flags.h.
+
+ * configure: Default srcdir from dir in which configure is found.
+
+ * i860.md (floatsidf2): Rewrite to be independant of host machine.
+ (divdf3, divsf3): New patterns.
+
+ * tm-i860.h (ASM_DECLARE_FUNCTION_NAME): Macro deleted.
+ (ASM_OUTPUT_FUNCTION_PREFIX): Macro added.
+
+ * stmt.c (pushcase, pushcase_range, expand_end_case):
+ Don't give "unreachable code" warning for a USE.
+
+ * tm-i386.h (HARD_REGNO_MODE_OK): Fp regs reject TFmode.
+
+Fri Oct 11 16:43:37 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * cse.c (find_comparison_args): Reject VOIDmode to avoid invalid
+ shift.
+
+Fri Oct 11 14:30:31 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (function_types_compatible_p):
+ NULL as arg type matches self-promoting type.
+ (self_promoting_type_p): New function.
+ (common_type): NULL for arg in one fcn type means use arg from other.
+ * c-decl.c (store_parm_decls): Record arg type list for the fn,
+ just to indicate how many args there are.
+
+ * i860.md, out-i860.c, tm-i860.h: Merge many changes by rfg.
+ * tm-i860bsd.h, xm-i860.h: Likewise.
+ * tm-i860v3.h, tm-i860v4.h: New files.
+ * xm-i860v3.h, xm-i860v4.h: New files.
+ * tm-i860v3g.h: Renamed from tm-i860g.h.
+ * configure (i860-sysv3*): Renamed from i860-sysv*. New filenames.
+ (i860-sysv4*): New alternative.
+
+ * print-rtl.c: New file, split from rtl.c.
+ * Makefile.in (print-rtl.o): New target.
+ (OBJS): Add that target.
+
+ * toplev.c (DEFAULT_GDB_EXTENSIONS): Provide default definition.
+ (main): Use that for -g with dbx format.
+ Don't support -G.
+ * gcc.c (default_compilers): Get rid of -G.
+
+Fri Oct 11 14:30:43 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * stmt.c (expand_anon_union_decl): Correctly handle anonymous
+ unions, whether in memory or registers.
+
+ These were written by Michael Tiemann.
+ The following changes net a 16% speedup compiling some
+ machine-generated CAD synthesis code.
+ * c-decl.c (field_decl_cmp): New function, use as comparison
+ function for qsort.
+ (finish_struct): If there are more than 15 fields, allocate a
+ LANG_TYPE for the FIELD_DECLs, and sort them according to
+ `field_decl_cmp'.
+ * c-tree.h (lang_type): Define a LANG_TYPE for RECORD_TYPEs.
+ * c-typeck.c (build_component_ref): If LANG_TYPE set, then use
+ binary search to find the field, otherwise use linear search as
+ before.
+
+ * tree.h: Declare savealloc.
+ * c-common.c: Delete now unnecessary cast of savealloc result.
+
+Fri Oct 11 10:06:09 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * cse.c (simplify_binary_operation): Fix typo in last change.
+
+ * cp-*, gcc.texinfo, make-cc1.com, tree.c, undocumented: Change
+ cplus- to cp-. Rename cplus-parse.y to cp-parse.y.
+
+Fri Oct 11 07:48:40 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * recog.c (find_single_use_1): Ignore appearances of DEST in
+ contexts where it is being set, not referenced.
+ (find_single_use): Use dead_or_set_p instead of looking for REG_DEAD
+ notes.
+
+Fri Oct 11 07:29:33 1991 Ron Guilmette (rfg at ncd.com)
+
+ * c-parse.y, cp-lex.c, objc-parse.y (check_newline): Use `pedwarn'
+ instead of `error' when we see an #ident if -pedantic.
+ * cccp.c (do_assert, do_unassert, check_assertion, do_sccs): Warn
+ if -pedantic.
+
+Thu Oct 10 18:30:28 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * gcc.c (default_compilers): Correctly handle new debugging
+ options, pass all -g* and -G* options.
+
+ * Makefile.in, c-decl.c, cp-decl.c, final.c, flags.h, gcc.1,
+ gcc.c, print-tree.c, toplev.c, tree.def, tree.h: Delete support
+ for obsolete GDB_DEBUG format, -gg option, symout.c, etc.
+ * gdbfiles.h, symseg.h, symout.c: Delete obsolete files.
+
+Thu Oct 10 17:56:16 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (convert_move): When widening FROM to multi-word, ensure that
+ we only reference each piece of TO once so that emit_no_conflict_block
+ can be safely used.
+
+ * toplev.c (float_signal): Re-enable the signal after we catch it.
+
+ * cse.c (simplify_binary_operation): Add missing fp error handler
+ setup in DFmode case.
+
+ * combine.c (subst, case XOR): Fix typo in checking for
+ STORE_FLAG_VALUE equal to just the sign bit.
+ (simplify_comparison): Fix typo in computing maximum signed number in
+ a mode; also, use GET_MODE_MASK rather than trying to compute it.
+
+Thu Oct 10 17:52:44 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (init_decl_processing): Turn off `alloca' for -ansi.
+ (c_decode_option): Handle -fbuiltin, -fno-builtin.
+
+Thu Oct 10 17:42:03 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * caller-save.c (emit_mult_restore): Initialize MAYBE_TEMPREG.
+
+ * function.c (assign_parms): Set MEM_IN_STRUCT_P when creating a
+ MEM for a aggregate passed by reference.
+ * expr.c (expand_expr, INDIRECT_REF case): Set MEM_IN_STRUCT_P
+ when dereferencing an aggregate.
+
+ * sched.c (sched_note_set): Add missing parens.
+
+ * sparc.md: Delete unnecessary clobbers from all SCC patterns.
+
+ * integrate.c (expand_inline_function): Correct handling of arguments
+ passed by invisible reference.
+
+ * cse.c (canon_hash): Compute hash code for SUBREG same as we do
+ for REG. Otherwise, SUBREG hash codes can change when qty_const
+ changes, which results in duplicate SUBREG entries, which can
+ cause a crash.
+
+Wed Oct 9 15:55:42 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * cccp.c (main): Update MAX_INCLUDE_LEN if GCC_EXEC_PREFIX gets into
+ the act.
+
+ * xm-a29k.h: Change copyright message back to GPL version 2.
+ * xm-a29k-ultra.h: Use GPL version 2 copyright.
+
+ * reload1.c (reload): Put array size in cast, to prevent compiler
+ warning.
+
+ * dwarfout.c (type_attribute): Check for ERROR_MARK nodes.
+
+Wed Oct 9 13:59:22 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * toplev.c (float_signal): Reenable handler.
+
+ * configure: Comment out various options not yet updated.
+
+ * cp-*.c, cp-*.h: Renamed from cplus-*.[ch].
+ * Makefile.in: Renaming here also.
+
+ * x-*: Renamed from make-*.
+ * Makefile.in (tmake_file, xmake_file): New vars.
+ (Makefile): Depend on them.
+ * configure: Replace host_make_var_file with host_xmake_file.
+ Handle tmake_file also, for target machine.
+ Form file names from x- and t-.
+ Rearrange use of temporary files during editing of Makefile.
+
+ * t-mips: Most of x-mips moved here.
+ * t-decrose: Likewise from x-decrose.
+
+ * xm-a29k-ult.h: Renamed from xm-a29k-ultra.h.
+
+ * Makefile. in (install-common): Don't handle `collect' specially.
+ It should be in EXTRA_PASSES if it is needed.
+
+ * cse.c (simplify_binary_expression): Use float handler for DF like SF.
+ Don't warn about traps; leave them for run time.
+
+ * tm-hp9k320.h (SIZE_TYPE): New definition.
+ Note: this affects tm-3b1.h by inheritance. Not sure that's right.
+
+Wed Oct 9 12:15:40 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * rtl.def (TRAP_IF): Make TRAP into a conditional trap.
+ * rtl.h (TRAP_CONDITION): Define.
+ * rtlanal.c (reg_referenced_p may_trap_p): Deal with TRAP_IF properly.
+ (volatile_refs_p side_effects_p): Not currently true for TRAP_IF.
+
+Wed Oct 9 03:55:21 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * make-mips (BISONFLAGS): Assignment deleted.
+
+ * real.h (REAL_VALUE_MINUS_ZERO): New macro.
+ * fold-const.c (target_minus_zero): New function.
+ * tm-sun2os4.h (ASM_OUTPUT_FLOAT, ASM_OUTPUT_FLOAT_OPERAND):
+ (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_DOUBLE_OPERAND):
+ Use REAL_VALUE_ISINF, REAL_VALUE_MINUS_ZERO.
+
+Tue Oct 8 17:56:13 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (duplicate_decls): If redeclaring builtin as static,
+ replace the old decl.
+
+ * tm-seq386.h (HARD_REGNO_MODE_OK): Copy usual def into override def.
+
+ * tm-news.h (CPP_PREDEFINES): Get rid of invalid conditionals.
+ * tm-tower.h: Likewise.
+
+ * tm-gmicro.h (MODES_TIEABLE_P): Fix typo.
+
+ * ns32k.md (rotrsi3): Fix typo `NEGATE' for `NEG'.
+
+ * c-typeck.c (mark_addressable): Handle CONSTRUCTOR.
+ * expr.c (expand_expr): Handle addressable contructors.
+
+Tue Oct 8 14:42:56 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * expmed.c (lshift_value): Ensure the shift amount is in range.
+
+Mon Oct 7 20:45:35 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * integrate.c (function_cannot_inline_p, save_for_inline_copying,
+ save_for_inline_nocopy, expand_inline_function,
+ output_inline_function): Use GET_RTX_CLASS.
+
+ * listing: Remove RCS Author and Log fields.
+
+ * cse.c (exp_equiv_p): Fix typos in comments/spacing.
+ * emit-rtl.c: Likewise.
+ * expmed.c (store_fixed_bit_field): Likewise.
+ * integrate.c (subst_constants): Likewise.
+
+ * longlong.h: Again fix same typo previously fixed Sept 5.
+
+Mon Oct 7 17:28:23 1991 Michael Meissner (meissner at osf.org)
+
+ * xm-mips.h (MIPS): Define MIPS to 1 instead of nothing, so
+ mips-tfile will compile once again.
+
+Mon Oct 7 17:10:32 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (main): Pedantically warn if no newline at end of file.
+ (finclude): Likewise.
+
+ * c-decl.c (grokdeclarator): funcdef_flag overrides parm level.
+
+Sun Oct 6 16:37:31 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * sparc.md (peephole for lo-sum and load df): Use output_move_double.
+
+ * tree.h (DECL_BUILT_IN_NONANSI): New flag.
+ * c-decl.c (init_decl_processing): Set flag for `alloca'.
+
+ * c-decl.c (duplicate_decls): Rearranged to reduce conditionals.
+ Allow redefining built-in functions as static even if new decl
+ is not a function. Also allow if built-in is not ANSI.
+
+ * out-sparc.c (output_move_double): Fix typo in test for using ldd.
+
+Sun Oct 6 12:56:19 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case COND_EXPR): Rename var added in last
+ change; some C compilers don't like "optab optab;".
+
+Sun Oct 6 09:26:55 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-method.c (build_overload_name): When walking up contexts, if
+ CONTEXT becomes a _TYPE node, point it at the _DECL node for the
+ type.
+
+ * cplus-decl2.c (grokclassfn): Paremeter COMPLAIN deleted. No
+ longer performs sanity check by itself.
+ (check_classfn): New function. Performs sanity check that
+ `grokclassfn' used to do. All callers changed.
+
+ * tree.h (struct tree_decl): Add new ignored_flag; delete
+ lang_flag_8 to make room.
+ (DECL_IGNORED_P): New macro.
+ (DECL_LANG_FLAG_8): Deleted.
+ * cplus-dbxout.c (dbxout_type): Use this macro instead of
+ ANON_AGGRNAME_P.
+ * cplus-decl.c (pushtag): Set DECL_IGNORED_P when appropriate.
+ * cplus-decl.c (duplicate_decls): Ensure DECL_IGNORED_P remains
+ consistent.
+
+ * cplus-decl.c (grokfndecl): If we have an overloaded operator, set
+ the DECL_NAME to something that dbxout.c can handle.
+ * cplus-method.c (hack_operator): Change this function to handle
+ this new behavior.
+ * cplus-init.c (do_friend): Ditto.
+
+Sat Oct 5 14:32:01 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expmed.c (expand_mult): Avoid fetching memory more than once.
+
+ * tm-ultrix.h (DOLLARS_IN_IDENTIFIERS): Define as 1.
+
+ * expr.c (expand_builtin): Clarify error message for BUILT_IN_NEXT_ARG.
+
+Sat Oct 5 08:42:02 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-decl.c (clear_anon_tags): New function.
+ (make_anon_name): Moved here from cplus-method.c.
+ * cplus-lex.c (check_for_missing_semicolon, note_list_got_semicolon):
+ call `clear_anon_tags' when done.
+ * cplus-dbxout.c (dbxout_type): No longer test ANON_AGGRNAME_P for
+ TYPE_NAMEs that are IDENTIFIER_NODES. They no longer appear in GNU
+ C++. Also, we can rely on the fact that there are no anon aggrnames
+ in tag lists.
+
+ * cplus-decl.c (xref_tag): Set TREE_VEC_LENGTH (BINFOS) to the
+ number of basetypes that were actually accepted.
+
+ * cplus-parse.y (datadef, fndef): Accept `extern "C"' as a storage
+ class specifier.
+
+ * cplus-init.c (build_new): Handle allocating types whose TRUE_TYPEs
+ start off as ARRAY_TYPEs.
+
+ * cplus-typeck.c (build_unary_op): We don't need to wrap
+ CURRENT_CLASS_DECL in a NON_LVALUE_EXPR when taking the address of
+ C_C_D.
+
+ * cplus-init.c (resolve_offset_ref): Fix error message for
+ non-static member references. Also, don't crash if EXP is not a
+ TREE_LIST or an OFFSET_REF.
+
+ * cplus-expr.c (cplus_expand_expr): Handle OFFSET_REFs.
+
+ * cplus-typeck.c (build_binary_op_nodefault): If PEDANTIC, don't
+ permit comparisons between pointers and integers.
+
+ * cplus-decl2.c (explicit_warn_return_type): New variable.
+ * cplus-decl.c (grokdeclarator): Test `explicit_warn_return_type'
+ instead of `warn_return_type'.
+
+ * cplus-decl.c (grokdeclarator): Fix criterium for deciding whether
+ to turn a FUNCTION_TYPE declaration into a METHOD_TYPE declaration
+ based on FRIENDP and STATICP.
+ (implicitly_declare): If PEDANTIC, treat this as an error.
+
+ * cplus-cvt.c (convert_to_integer): Make anachronisms errors if
+ PEDANTIC is nonzero.
+
+ * cplus-typeck.c (convert_for_assignment): If PEDANTIC, don't let
+ void * convert to non-void* types. Similarly, don't let const*
+ pointers be assigned to non-const* pointers. Similarly for signed
+ vs. unsigned pointers.
+ (warn_for_assignment): Add new parameter SEVERE.
+
+ * cplus-decl.c (push_overloaded_decl): If PEDANTIC, give error when
+ functions overload variables.
+
+ * cplus-decl2.c (grokfield): If PEDANTIC, don't let fields have
+ initializers (conditionalized on PEDANTIC).
+ * cplus-class.c (finish_struct): Set TYPE_GETS_{ASSIGNMENT,INIT_REF}
+ for UNION_TYPE.
+
+Sat Oct 5 06:52:29 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case COND_EXPR): Case for X ? A + 1 : A can
+ also handle MINUS_EXPR and BIT_*_EXPR.
+
+ * rtl.h (copy_rtx_if_shared): Declare here.
+ * emit-rtl.c (unshare_copies): Delete unused variable.
+ (copy_rtx_if_shared): No longer static.
+ (reset_used_flags): New function.
+ * combine.c (copy_substitutions): Deleted.
+ (try_combine): When making new insns, ensure that we do not have any
+ improper sharing by using copy_rtx_if_shared; no longer call
+ copy_substitutions.
+
+ * combine.c (try_combine): If an insn that is a PARALLEL of two sets
+ isn't recognized and the result of the second SET is unused, ignore it.
+
+Fri Oct 4 15:25:33 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-decl.c (set_identifier_type_value): New function. Change
+ all callers of macro SET_IDENTIFIER_TYPE_VALUE to call this function
+ instead.
+
+ * cplus-decl.c (pushdecl): Back out Sep 26 change. ??? This problem
+ really has to be solved in a more global fashion.
+ (struct binding_level): New field `type_shadowed' for typenames that
+ get shadowed. All pop* routines that restore from shadowed lists
+ now restore IDENTIFIER_TYPE_VALUE from the `type_shadowed' field.
+
+Fri Oct 4 14:47:52 1991 Michael Meissner (meissner at osf.org)
+
+ * sdbout.c (include of syms.h): Don't include <syms.h> on MIPS
+ systems, since the system does not provide the file, rather use
+ "gsyms.h". This is a problem for Silicon Graphics, and the System V
+ varient on RISC-OS, both of which define the USG macro. Patch from
+ jonathan@isor.vuw.ac.nz.
+
+Fri Oct 4 13:37:11 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * stor-layout.c (get_best_mode): Add a volatilep parameter
+ indicating that the smallest mode is desired.
+ * expmed.c, fold-const.c: All callers changed.
+ (optimize_bit_field_compare): Initialize {l,r}volatilep now that
+ they are used.
+
+Thu Oct 3 22:08:45 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * objc-actions.h (CLASS_SUPER_NAME): Change type.basetypes to
+ type.binfo so that it will compile.
+
+Thu Oct 3 06:46:38 1991 Niklas Hallqvist (niklas at appli.se)
+
+ * cplus-tree.h (PARANOID): Don't define if already defined.
+ ({SET,CLEAR}_CLASSTYPE_MARKED*): New macros needed to get through
+ C compilers who don't allow comma expressions as lvalues.
+ ({SET,CLEAR}_BINFO_*): Ditto.
+
+ * cplus-init.c: Use new SET/CLEAR macros.
+
+ * cplus-search.c: Ditto.
+
+ * cplus-decl.c: Ditto.
+ (lookup_tag): Accept *_DECLs as nodes in the context chain.
+ (lookup_nested_type): Accept FUNCTION_DECLs not only as head of
+ the context chain, but at any place in it.
+
+Thu Oct 3 06:42:08 1991 Michael Meissner (meissner at osf.org)
+
+ * c-decl.c (c_decode_option): Add new switch -Wparentheses and
+ -Wnoparentheses to control whether GCC warns about adding extra ()'s
+ around a subexpression. Make -Wparentheses default behavior.
+ (warn_parentheses): New global variable.
+
+ * c-tree.h (warn_parentheses): New variable.
+
+ * c-typeck.c (parser_build_binary_op): Check for warn_parentheses
+ before emitting warnings about adding ().
+
+Wed Oct 2 20:51:04 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * gcc.texinfo: Correct documentation for CONSTANT_ADDRESS_P,
+ CONSTANT_P, and HIGH.
+
+Wed Oct 2 15:08:32 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-class.c (modify_vtable_entries): Fix error in computing
+ offsets to use for virtual functions from virtual baseclasses.
+ * cplus-except.c (lookup_exception_type): Change local variable name
+ `binfo' to `link'.
+ * cplus-lex.c (yylex): Cast shorts to (long) when building longlong.
+
+Wed Oct 2 11:32:35 1991 Michael Meissner (meissner at osf.org)
+
+ * tm-encrose.h (new file): New configuration file for Encore
+ Multimax running OSF/1, and using the OSF/rose object formats.
+
+Wed Oct 2 08:33:08 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * tree.h (TYPE_UID): Add this field to TYPE nodes.
+ * tree.c (make_node): Initialize it.
+ * dwarfout.c (TYPE_NAME_FMT): Use TYPE_UID rather than TREE_UID.
+ (equate_type_number_to_die_number): Discard type qualifiers.
+ (output_typedef_die): Don't use equate_type_number_to_die_number.
+
+Wed Oct 2 08:04:57 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_process_notes): Fix typo; missing arg in return.
+
+Wed Oct 2 06:56:13 1991 Ron Guilmette (rfg at ncd.com)
+
+ * Makefile.in (ENQUIRE_CFLAGS): Remove duplicate use of GCC_CFLAGS.
+
+ * Makefile.in (cplus-tab.c): Adjust number of expected conflicts.
+
+ * Makefile.in (mostlyclean): Remove collect and collect2.
+
+ * tm-svr4.h: Add new file; prototype for System V, Release 4.
+
+Tue Oct 1 23:00:13 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload.c (find_reloads_address): Fix error in previous change;
+ clean up REG case so it is easier to read.
+
+Tue Oct 1 14:05:46 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-decl.c (finish_{decl,function}): Use new function
+ `note_debug_info_needed' instead of setting CLASSTYPE_ASM_WRITTEN.
+ * cplus-search.c (note_debug_info_needed): New function.
+ Recursively set CLASSTYPE_ASM_WRITTEN in a hierarchy when called.
+
+ * cplus-class.c (finish_struct): If DECL_NAME of the BASE_FNDECL is
+ NULL_TREE, we know we're looking at a virtual destructor.
+
+Tue Oct 1 09:47:25 1991 Michael Meissner (meissner at osf.org)
+
+ * tm-mips.h (OPTIMIZATION_OPTIONS): Enable scheduling insns now for
+ -O2 optimization.
+
+ * Makefile.in (STAGESTUFF): Add $(EXTRA_PASSES), to allow moving any
+ extra passes into the stage[1234] directories, and to remove the
+ extra stuff when doing make clean.
+
+Tue Oct 1 08:35:11 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * dwarfout.c (FUNC_END_LABEL_FMT, TYPE_NAME_FMT): Undo this change.
+
+ * c-decl.c (grokdeclarator): When making an unsigned bitfield
+ type from a typedef, preserve the size. A typedef of an
+ explicitly signed typedef is explicitly signed.
+
+Mon Sep 30 22:51:07 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * out-sparc.c: Fix misc typos and indentation problems.
+ Delete all unnecessary extern declarations.
+ Include "recog.h".
+ Consistently use Pmode instead of SImode for addresses.
+ Use macros defined in tm-sparc.h instead of magic numbers.
+ (reg_or_0_operand): Accept CONST_DOUBLE zero.
+ (symbolic_operand): Accept CONST_DOUBLE.
+ (move_operand): Accept arith_double_operand ('H'), SMALL_INT
+ ('I'), and sethi operands ('K').
+ (move_pic_label): Renamed from move_reg_or_immed_operand. If
+ flag_pic is true, accept a LABEL_REF, otherwise fail.
+ (arith_double_operand): Accept SMALL_INT ('I') CONST_INTs. Correct
+ computation of when a CONST_DOUBLE is a SMALL_INT ('H').
+ (eligible_for_epilogue_delay): Accept arith_double_operands.
+ (emit_move_sequence): Handle arith_double_operands. Handle
+ loading of labels for pic, need to add a clobber of %o7 (reg 15).
+ (find_addr_reg): Don't return FRAME_POINTER_REGNUM. It is not
+ safe to play around with the frame pointer.
+ (hard_regno_mode_ok): Change from short to int array.
+ (output_pic_sequence, output_pic_sequence_2, fp_zero_hook): Delete
+ long obsolete routines.
+ (print_operand): Delete support for obsolete 'S' and 'H' cases.
+ (output_double_int): New function. Outputs assembler code for 64
+ bit (DImode) values.
+
+ * sparc.md: Fix misc typos and indentation problems.
+ Delete unnecessary (set_attr "type" "binary") lines.
+ Consistently use %a1 in sethi and ori output templates.
+ Consistently use Pmode not SImode for addresses.
+ Consistently use the same predicate for both operand 1 and
+ operand 2 in commutative patterns. Don't use same predicate in
+ non-commutative patterns.
+ Consistently use \; to separate multiple instuctions.
+ Change "r%" to "%r".
+ (define_attr length): Handle arith_double_operand predicate.
+ (movsi): Combine two movsi patterns into one, except for loading
+ of pic labels. New pattern to load pic labels, which clobbers %o7.
+ (movhi): Combine two movhi patterns into one.
+ (movqi): Combine two movqi patterns into one.
+ (movdi): Discourage the Q/f constraint option so that DImode
+ variables won't end up in floating pointer registers.
+ (floatsisf2, floatsidf2): Delete patterns accepting a const_int
+ operand. These should never be matched. In remaining patterns,
+ accept nonimmediate_operand instead of general_operand.
+ (adddi3, subdi3, anddi3, iordi3, xordi3, xnordi3, one_cmpldi2):
+ Accept arith_double_operand predicates and "HI" constraints.
+ (last peephole): Reg 0 should be CCmode not SImode.
+
+ * tm-sparc.h: Fix misc typos.
+ (WORDS_BIG_ENDIAN): Indicate why it must be true.
+ (hard_regno_mode_ok): Change from short to int array.
+ (CONST_DOUBLE_OK_FOR_LETTER_P): Add new 'H' constraint, for DImode
+ constants that can fit in an immediate field.
+ (CONSTANT_ADDRESS_P): Accept any CONSTANT_P, including
+ CONST_DOUBLEs.
+ (LEGITIMATE_CONSTANT_P): Accept CONST_DOUBLEs if match 'H'
+ constaint.
+ (RTX_COSTS): Define cost for FLOAT to be more expensive than
+ CONST_DOUBLEs, so that cse will prefer the latter.
+ (ASM_OUTPUT_DOUBLE_INT): New macro to output DImode constants.
+
+ * sched.c (schedule_block): When calculating register lifetime
+ info, handle CLOBBERs and USEs. The code that adds REG_DEAD notes
+ already handles them.
+ (update_n_sets): New function, subroutine of update_links.
+ Given a SET or CLOBBER, updates reg_n_sets as appropriate,
+ depending on whether this is in a deleted or a new insn.
+ (update_links): Call update_n_sets to subtract info for split
+ insn, and add info for insns resulting from the split.
+
+Mon Sep 30 19:06:50 1991 Michael Meissner (meissner at osf.org)
+
+ * ecoff-cmp (TMP): Fix typo, from jonathan@isor.vuw.ac.nz.
+
+ * mips-tfile.c (toplevel): Don't declare _flsbuf under Silicon
+ Graphics, from jonathan@isor.vuw.ac.nz.
+
+Mon Sep 30 15:54:02 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_process_notes): New function.
+ (cse_basic_block): Call it for each insn.
+ (count_reg_usage): Count usage in a REG_EQUAL note.
+ (delete_dead_from_cse): Call count_reg_usage with insn, not pattern.
+ * loop.c (scan_loop): Replace a register used in a REG_EQUAL note.
+ (find_single_use_in_loop): Two uses in single insn doesn't disqualify.
+ Allow argument to be REG_NOTES.
+ (count_loop_regs_set): Call find_single_us_in_loop on REG_NOTES.
+
+Mon Sep 30 15:47:03 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-call.c (ideal_candidate): Return 0 if the top two candidates
+ have identical rankings but incompatible types.
+
+ * cplus-lex.c (cons_up_default_function): Set DECL_NAME (FN) to
+ NULL_TREE in order to mark the function as being generated by the
+ compiler.
+ * cplus-init.c (emit_base_init): Change to use this interface.
+ * cplus-decl.c (duplicate_decls, redeclaration_error_message): Ditto.
+ (store_parm_decls): Ditto.
+ * cplus-decl2.c (grokclassfn): Ditto.
+ * cplus-dbxout.c (dbxout_type_methods): Ditto.
+ * cplus-class.c (finish_struct_methods): Ditto.
+ * cplus-method.c (fndecl_as_string): Ditto.
+ * cplus-search.c (lookup_fnfields_1): Ditto.
+ (compute_visibility): Ditto.
+ * cplus-typekc.c (build_function_call): Ditto.
+ * cplus-tree.c (lang_printable_name): Ditto. Also use
+ DECL_ASSEMBLER_NAME instead of DECL_NAME in DESTRUCTOR_NAME_P test.
+ * calls.c (expand_call): Change also needed here.
+
+Mon Sep 30 15:31:53 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * dbxout.c: Include <param.h> before config.h, because it may define
+ MIN and MAX.
+
+ * fold-const.c (const_binop): Delete incorrect short cut for
+ (0 - const).
+
+ * expr.c (do_tablejump): Pass GET_MODE (index) instead of Pmode to
+ emit_cmp_insn, because the latter fails when integers and pointers
+ are different sizes.
+
+ * combine.c (subst): When checking to see if associating helps
+ simplify rtl, make sure we pass the constant operand if any as the
+ second one if this is a commutative operation.
+
+ * cccp.c (rescan): Save obufp_before_macroname as an offset from
+ the start of op->buf instead of as a pointer into the middle, in
+ case op->buf gets realloced.
+
+Mon Sep 30 14:07:20 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * dwarfout.c (FUNC_END_LABEL_FMT, TYPE_NAME_FMT): TREE_UID is
+ unique only if the node is TREE_PERMANENT. Augment the spelling
+ of labels using TREE_UID with the TREE_UID of the current function.
+
+ Changes from Ron Guilmette:
+ * dwarfout.c (output_symbol): Deal with formal parameters with an
+ incomplete tagged type.
+ (output_bound_representation): Fix for arrays with dynamic bounds.
+
+ Changes from Jim Wilson:
+ * dwarfout.c: Define strrchr to rindex for non USG systems.
+ Use DECL_BIT_FIELD_TYPE not DECL_BIT_FIELD to test for bitfields.
+
+Sun Sep 29 16:29:08 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload.h (indirect_symref_ok): New variable.
+ * reload.c (find_reloads_address): Remove shadowing decls of `tem'.
+ Only allow certain forms addresses as indirect; check
+ indirect_symref_ok to see if (mem (symbol_ref ...)) is a valid
+ address; if not that form or simple, not valid indirect address.
+ * reload1.c (indirect_symref_ok): Define here.
+ (init_reload): Initialize vars used to determine which addrs are valid.
+ (reload): Don't do it here.
+ Update comment to relect what `alter_regs' currently does.
+
+ * tree.h (struct tree_decl): Add new from_inline_flag; delete
+ lang_flag_9 to make room.
+ (DECL_FROM_INLINE): New macro.
+ (DECL_LANG_FLAG_9): Deleted.
+ * c-decl.c, cplus-decl.c (pushdecl): Use DECL_FROM_INLINE instead of
+ TREE_INLINE where appropriate.
+ * cplus-decl.c (finish_decl): Likewise.
+ * integrate.c (integrate_parm_decls, integrate_decl_tree): Set
+ DECL_FROM_INLINE instead of TREE_INLINE.
+ * print-tree (print_node): Print DECL_FROM_INLINE.
+ Delete reference to DECL_LANG_FLAG_9.
+
+Sun Sep 29 12:49:47 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * c-decl.c, c-typeck.c, cplus-decl.c, toplev.c:
+ Set/test TREE_ADDRESSABLE of DECL_ASSEMBLER_NAME, not DECL_NAME for
+ function decls.
+
+ * cplus-class.c: Export `current_lang_stack' and
+ `current_lang_base'.
+ cplus-decl.c (push_overloaded_decl): Allow redeclaration of a
+ function that was previously given a linkage specification at
+ top-level (i.e., not in an explicit linkage arena).
+
+ * cplus-typeck.c (convert_arguments): Strip the `&' from an
+ overloaded function passed as an argument into an ellipses.
+
+Sat Sep 28 15:37:26 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-typeck.c (build_x_binary_op): We have to special-case the
+ failure of MEMBER_REF to be overloaded as an operator.
+
+Sat Sep 28 10:44:36 1991 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload): If we find at some point that we need
+ caller-saves, disable elimination of the frame pointer.
+
+ * reload.c (subst_reloads): Re-enable code to prevent making
+ a SUBREG inside a SUBREG.
+
+Sat Sep 28 00:40:51 1991 Ken Raeburn (raeburn@cygnus.com)
+
+ * cplus-pt.c (do_pending_expansions): Adjust "DECIDE" macro to avoid
+ compiler warning from Sun cc.
+
+Fri Sep 27 17:30:39 1991 Per Bothner (bothner at cygnus.com)
+
+ * configure[.in]: Move most of the target_vendor switch
+ entries (e.g. next, sun, sony) from the m88k architecture to m68k,
+ where they belong.
+
+Fri Sep 27 16:21:04 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-search.c (recursive_bounded_basetype_p): Add new parameter
+ UPDATE_CHAIN so that function now behaves as comment prescribes.
+ * cplus-search.c (compute_visibility): Fix error in conversion of
+ data structures from list-based to binfo-based nodes.
+
+Fri Sep 27 07:05:57 1991 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-decl.c (pushdecl): Fix typo: TREE_EXTERNAL misspelled.
+
+Thu Sep 26 17:36:14 1991 Michael Meissner (meissner at osf.org)
+
+ * tm-mips.h (ASM_FINAL_SPEC): Handle gcc -c -o foo bar.c.
+
+ * tm-decrose.h (ASM_FINAL_SPEC): Handle gcc -c -o foo bar.c.
+
+ * make-decrose (cplus-lex rule): Remove hacks in compiling
+ cplus-lex, since bug in 1.39 inlining was fixed to allow us to
+ compile the module normally.
+
+Thu Sep 26 11:53:49 1991 Ken Raeburn (raeburn@cygnus.com)
+
+ * cplus-tree.h (TEMPLATE_TYPE_*): Use slower versions that uses tree
+ structures more properly, so accessor macros don't lose.
+
+ * cplus-pt.c (end_template_parm_list): For type parameters, make the
+ new decl be the name of the "type".
+
+ * Makefile.in (cplus-tab.{c,h}): There are now 30 s/r conflicts.
+
+ * cplus-class.c (resolves_to_fixed_type_p, case CALL_EXPR): Deleted
+ duplicate code.
+
+ * cplus-decl.c (poplevel): Deleted duplicate code saving info on
+ accesses to external via non-global decls.
+ (pushdecl): For typedef of unnamed type, don't store new name for
+ type if not at global binding scope. Also, don't need to test for
+ TYPE_DECL when previous conditional guarantees it.
+ (start_decl): Clear TREE_PUBLIC flag of templates.
+ (finish_decl): For variables in static storage with constructors,
+ force it into data section (out of common storage) only if the name
+ is externally visible.
+
+ * cplus-gc.c (type_needs_gc_entry): If the type has no base types,
+ don't check to see whether they need gc entries.
+
+ * cplus-parse.y (yyprint): Handle SCSPEC and AGGR.
+
+ * cplus-pt.c (end_template_decl): Clear IDENTIFIER_TYPE_VALUE slots
+ for type parameters, then call adjust_type_value.
+ (instantiate_class_template): Do nothing if classname is
+ error_mark_node.
+ (mangle_class_name_for_template): Make buf a static array, since
+ its address gets returned.
+
+ * reload1.c (reload): Provide array size in cast, to avoid compiler
+ warnings.
+
+ From Niklas Hallqvist:
+ * cplus-tree.h (struct template_info): Added new field "aggr", which
+ will be class_type_node or struct_type_node for class or struct
+ templates.
+ * cplus-parse.y (template_def): Pass current_aggr to
+ end_template_decl.
+ (template_instantiation): Use aggr field.
+ * cplus-pt.c (end_template_decl): Argument IS_CLASS is now a tree,
+ used to set the aggr field.
+ (overload_template_name): Use aggr field.
+
+ Suggested by John Carr:
+ * cplus-dbxout.c (dbxout_tags): Don't omit argument to
+ dbxout_finish_symbol.
+ (dbxout_continue): Omit declaration and definition if
+ DBX_CONTIN_LENGTH is not greater than zero, like its calls.
+ (print_int_cst_octal): Ditto, based on defined(WINNING_GDB).
+ * cplus-decl.c (GNU_end_scope): Never used; deleted.
+ (pushdecl): Vars nglobals, len are used only in code under "#if 0";
+ comment out decls as well.
+ * cplus-gc.c (expand_gc_prologue_and_epilogue): Variable "head" was
+ unused; deleted.
+ * cplus-init.c (expand_aggr_vbase_init_1): All args are type tree.
+ (expand_vec_init): Don't return without a value when "initializer
+ ends prematurely".
+ * cplus-method.c (build_overload_nested_name): Pass all necessary
+ arguments in recursive call.
+ * cplus-search.c (pop_type_level): Cast argument to pop_stack_level
+ to proper type.
+ (push_memoized_context): Ditto for push_type_level.
+ (my_copy_node): Unused; deleted.
+ (lookup_fnfields): Add missing arg to get_binfo.
+ (lookup_field): Ditto.
+
+ From Niklas Hallqvist:
+ * cplus-decl.c (push_to_top_level): Handle case of function with
+ unnamed parms.
+ (pop_from_top_level): Ditto.
+
+Thu Sep 26 07:46:08 1991 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * loop.c (scan_loop): Don't eliminate register that is set by
+ consecutive insns.
+
+Wed Sep 25 18:53:52 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (pushdecl): Suppress warnings about mismatch of
+ extern decl when it comes from inlining a function.
+
+ * emit-rtl.c (set_new_first_and_last_label_number): New function.
+ (max_label_num): Use last_label_num if valid.
+ * integrate.c (output_inline_function): Call set_new_...
+
+Wed Sep 25 18:37:36 1991 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * flow.c (find_auto_inc): Set BLOCK_NUM of new insns emitted while
+ making an auto-inc.
+
+ * Makefile.in (getopt*.o): Each file depends on its .c file and on
+ the compiler executable files.
+
+Wed Sep 25 18:18:46 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * toplev.c (debug_info_level): New variable.
+ * flags.h (debug_info_level, enum debug_info_level): New declarations.
+ * toplev.c (main): Rewrite handling of -g* and -G* options.
+ Now -G indicates use of GDB extensions. -g0 removed.
+
+Tue Sep 24 03:20:07 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * alloca.c: Test __STDC__, not X3J11.
+ Do nothing if alloca is defined as a macro.
+
+Tue Sep 24 09:15:17 1991 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * global-alloc.c (eliminable_regset): New variable.
+ (global_alloc): Compute it and use to turn off conflicts.
+ Refine computation of no_global_alloc_regs when ELIMINABLE_REGS is
+ defined.
+ (mark_elimination): Don't do anything with allocnos and don't do
+ any allocation.
+
+ * reload1.c (eliminate_regs_in_insn): Try to re-recognize insn if
+ we replaced a (set X (plus Y Z)).
+
+Tue Sep 24 06:34:04 1991 Michael Tiemann (tiemann at mole.gnu.ai.mit.edu)
+
+ * cplus-tree.c (virtual_member): Change TREE_VALUE accessor macro to
+ BINFO_TYPE.
+ * tree.h (BINFO_TYPE): New name for BINFO_VALUE.
+ * All cplus-* files: Changed to reflect new name.
+
+Mon Sep 23 12:56:11 1991 Michael Meissner (meissner at osf.org)
+
+ * tm-mips.h (ASM_SPEC): Fix typo, and close {}'s properly.
+
+Mon Sep 23 10:30:51 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-tree.c (propagate_assoc_offsets): Keep relative offsets of
+ child_child correct when copying children.
+
+ * cplus-class.c Use `BINFO_VALUE' instead of `TREE_VALUE' when
+ accessing the type value of a binfo node.
+ * cplus-decl.c (finish_function): Ditto.
+ * cplus-init.c (build_vbase_delete): Ditto.
+
+Mon Sep 23 06:11:56 1991 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * flow.c (reg_n_refs): Use int, not short. Short can overflow
+ if we have very deep loop nesting.
+ (allocate_for_life_analysis): Allocate reg_n_refs as int.
+ * regs.h (reg_n_refs): Now int.
+ * sched.c: Delete duplicate definitions of objects defined in regs.h.
+
+ * combine.c (try_combine): Correctly check for independent insns
+ in a PARALLEL.
+
+ * combine.c (distribute_note, case REG_DEAD): If we discover a register
+ is never used, see if we can delete the insn that set it.
+
+Sun Sep 22 19:24:52 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-type2.c (build_functional_cast): Don't forget a valid
+ function call if we found one (and nothing more).
+
+Sun Sep 22 07:48:18 1991 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rtlanal.c (rtx_varies_p, case REG): Correct typo; sense of comparison
+ was backwards.
+
+ * global-alloc.c (mark_elimination): Don't use HARD_REG_SET macros
+ to access basic_block_live_at_start.
+
+ * reload1.c (set_label_offsets): New function.
+ (offsets_known_at, offsets_at): New variables.
+ (reload): Allocate and initialize them.
+ Set each label in FORCED_LABELS to be at initial offsets.
+ Call set_label_offset on all insns that might involve labels.
+ Use GET_RTX_CLASS when appropriate.
+ (eliminate_regs, mark_not_eliminable): Ignore sets of FP when looking
+ for sets of a "to" register.
+ (eliminate_regs_in_insn): No longer suppress elimination for any
+ pair not at its initial offet at a jump.
+
+ * combine.c (distribute_links): Correctly find the place to put a
+ link. Handle the case when we eliminate all uses of something that
+ we used to use; in that case, we must seach forward.
+ No longer need I3, I2, or ALL_ADJACENT arguments.
+ (try_combine): Change calls to distribute_links.
+
+ * reload.c (find_equiv_reg): Use GET_RTX_CLASS when appropriate.
+ If GOAL is a MEM whose address varies, check whether registers
+ that are SET appear in the address rather than assuming they do.
+ Ensure REG_INC note is a REG; ignore it if not.
+
+ * rtlanal.c (rtx_varies_p): Rework to use switch statement.
+ Check for {frame,arg}_pointer_rtx, not just register number.
+ (rtx_addr_can_trap_p): New function.
+ (may_trap_p): Use rtx_addr_can_trap_p instead of rtx_varies_p.
+ * genattrtab.c: Define {frame,arg,stack}_pointer_rtx for rtlanal.c.
+
+ * combine.c (make_extraction): Make a ZERO_EXTRACT for something with
+ pos == 0 if it will be placed in a SET_DEST.
+
+ * expmed.c (expand_shift): Rotate case was missing return statement.
+ extzv case had wrong arg to delete_insns_since.
+ Remove unneeded calls to delete_insns_since.
+ Allow BITS_BIG_ENDIAN to vary at run-time.
+ Use variable TEMP in a consistent manner.
+ Other miscellaneous changes and cleanups were made.
+
+ * flow.c (max_uid_for_flow): New variable.
+ (flow_analysis): Compute maximum uid into max_uid_for_flow; if
+ we might have auto-inc, leave some space.
+ (find_auto_inc): Verify that the uid's of the insns we make are
+ within the allocated space of our per-insn tables.
+ Use get_insns instead of gen_sequence.
+
+ * global-alloc.c (retry_global_alloc): When we allocate a register,
+ update regno_reg_rtx and mark the allocated register live.
+ (mark_elimination): New function.
+ * reload1.c (reload): Call mark_elimination for every elimination
+ we have been able to do.
+ (spill_hard_reg): No longer need to call mark_home_live.
+
+Sun Sep 22 02:07:55 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes: Redirect cmp output to /dev/null; don't close it.
+
+ * varasm.c (assemble_function): Handle ASM_OUTPUT_FUNCTION_PREFIX.
+
+ * final.c (final_scan_insn): No need to goto text section
+ for label on jump table. We're normally in the text section.
+
+Sat Sep 21 14:59:32 1991 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * make-cc1.com: Fix typo in code that decides if bison needs to be
+ run. Also, display a message when building the compiler that informs
+ the user about the need to update the assembler.
+
+Sat Sep 21 17:23:07 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * loop.c (struct movable): Add field DEPENDENCIES.
+ (scan_loop): Remove mechanism based on REG_TO_FORCE and
+ MOVABLE_TO_FORCE. Replace with use of new field.
+ Optionally allocate and initialize reg_single_usage and pass it to
+ count_loop_regs_set.
+ If an invariant register is used exactly once and this is a loop
+ that has a CALL_INSN, try to substitute the definition of the register
+ into its use.
+ (record_excess_regs): Fix typo in sense of checking in NOT_IN_THIS;
+ only check pseudo-regs.
+ (libcall_other_reg): Always return the list of registers used,
+ no matter how many there are.
+ (combine_movable): Only combine two movables if they have the same
+ dependencies.
+ (move_movables): Can only move something if its dependencies have
+ already been moved.
+ (find_single_use_in_loop): New function.
+ (count_loop_regs_set): Delete code that prevents moving a reg that
+ is used as a function address.
+ Call find_single_use_in_loop when required.
+
+Sat Sep 21 16:28:34 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_unary_op):
+ Handle const and volatile lvalues correctly in ADDR_EXPR.
+
+ * output.h (current_function_contains_functions):
+ Just declare it, don't define it.
+
+ * cse.c (exp_equiv_p): New arg EQUAL_VALUES. All callers changed.
+
+Sat Sep 21 12:59:15 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-parse.y (object_star): New rule.
+ (POINTSAT_STAR): New token.
+ * cplus-lex.c (init_lex): Define entry for MEMBER_REF.
+ GNU C++ now overloads `operator->*' according to ARM semantics. It
+ no longer attempts to implement operator->* as two distinct
+ operations.
+
+Fri Sep 20 18:08:07 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (subst): Don't replace a CC0 or a PC in a SET_DEST if
+ FROM is the same thing.
+
+ * combine.c (simplify_shift_const): Compute SHIFT_MODE at start of
+ loop and use its width, rather than width of RESULT_MODE, when checking
+ shift count.
+
+Fri Sep 20 10:55:55 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-pt.c (uses_template_parms): Handle COMPONENT_REF case.
+
+Fri Sep 20 00:27:43 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_modify_expr): When assigning to a cast,
+ convert value first to the type being cast to.
+ (build_unary_expr): Disallow adress of a cast.
+
+ * explow.c (allocate_dynamic_stack_space):
+ Handle SETJMP_VIA_SAVE_AREA before rounding to STACK_BOUNDARY.
+
+Thu Sep 19 21:13:17 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (dist, gcc-*.tar, gcc-*.tar.Z): New targets.
+
+ * jump.c (jump_optimize): In handling `if (...) x = a; else x = b;',
+ don't crash if scan reaches start of insns.
+
+ * Makefile.in (protoize): Link with getopt.o and getopt1.o.
+ (unprotoize): Likewise.
+ (protoize.o): Depend on getopt.h. Pass -D options for include dirs.
+ (unprotoize.o): Likewise.
+ (getopt.o, getopt1.o): New targets.
+
+ * protoize.c: Major rewrite by RFG and RMS.
+
+Thu Sep 19 09:58:25 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ Changes from Ron Guilmette:
+ * dwarfout.c: Keep track of next_block_number correctly.
+ * final.c (final_scan_insn): Don't invoke dwarfout_{begin,end}_block
+ for the outermost block of a function.
+
+Thu Sep 19 06:16:34 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload.c (copy_replacements): New function.
+ * optabs.c (gen_move_insn): Don't call gen_lowpart while reloading
+ is in progress; it calls change_address, which wants to make pseudos.
+
+ * combine.c (subst, case SET): Fix typo in last change.
+
+ * combine.c (distribute_notes): When searching back for a place that
+ uses a register marked REG_DEAD, check for set and reference separately
+ since reg_overlap_mentioned_p doesn't check SET_DEST.
+
+ * combine.c (simplify_shift_const): Correct handling of shift counts
+ that become out-of-range.
+
+ * combine.c (expand_field_assignment): Don't allow sharing the RTL
+ for the inner object.
+
+ * combine.c (can_combine_p, try_combine, record_value_for_reg): Use
+ reg_overlap_mentioned_p instead in reg_mentioned_p in most places.
+ (distribute_notes, distribute_links): Likewise.
+ (combinable_i3pat): New function, from try_combine.
+ (try_combine): Default I1DEST and I1SRC to zero.
+ New var I1_FEEDS_I3.
+ Delete code to validate I3's pattern from here; call combinable_i3pat
+ instead.
+ If a substitution returns a (clobber (const_int 0)), stop immediately.
+ Don't abort if substitution made new regs; just don't do combine.
+ (subst): If IN_DEST, don't replace a matching object.
+ Don't look at a REG as a SET_DEST.
+ If substitution inside a PARALLEL fails, give up immediately.
+ Return (clobber (const_int 0)) even for a SET whose operand fails.
+ (subst, case SET): Correctly test for low-order SUBREG.
+ Don't use gen_lowpart_for_combine; make SUBREG explicitly since it
+ can't handle modes larger than a word.
+
+ * combine.c (subst, case NOT): Code for (not (ashiftx ..)) was too
+ general; only handle (not (ashift 1 X)).
+ (subst, case NEG): Handle (neg (ashift ...)).
+ (merge_outer_ops): Support NEG.
+ (simplify_shift_const, case NEG): Handle (ashift (neg ...)).
+
+ * cse.c (simplify_binary_operation, case ROTATE, ROTATERT):
+ Rotating all one bits is just all ones.
+
+Thu Sep 19 01:08:14 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-parse.h, cplus-decl.h: Remove trailing comma after the last
+ enum value in enum declarations.
+
+ * cplus-type2.c (digest_init): Set TREE_PURPOSE of union initializer
+ when initializing a union by the first field.
+
+ * cplus-method.c (fndecl_as_string): Test whether DECL_CLASS_CONTEXT
+ is NULL before using it.
+ (dump_aggr_type): New function. Print aggr type's context when
+ appropriate.
+ (dump_type{_prefix}): Use `dump_aggr_type' to print ENUMERAL_TYPE,
+ UNION_TYPE, and STRUCT_TYPE types.
+
+ * cplus-decl.c (start_decl): Don't use DECL_CLASS_CONTEXT if DECL
+ has no DECL_LANG_SPECIFIC.
+
+Wed Sep 18 21:46:32 1991 Michael Meissner (meissner at osf.org)
+
+ * mips-tfile.c (cur_proc_value): New static to remember the starting
+ location of the current function.
+ (add_procedure): Save current procedure location.
+ (parse_begin, parse_bend): Subtract cur_proc_value from location.
+ (parse_bend): Correct error messages.
+ The above changes are from bothner@cygnus.com.
+
+ * tm-mips.h (ASM_FINAL_SPEC): Use -mno-mips-tfile to suppress
+ invoking mips-tfile, instead of using -g0. If -save-temps, preserve
+ the original .o file before mips-tfile is called. Pass the correct
+ name for the assembler file.
+ (MASK_MIPS_TFILE): New mask for -mmips-tfile, -mno-mips-tfile, set
+ to 0, since that switch is handled entirely in ASM_FINAL_SPEC.
+ (TARGET_FLAGS): Add -mmips-tfile, -mno-mips-tfile switches.
+ (MUST_SAVE_REGISTER): Allow $30 to be saved, even if not being used
+ as the frame pointer.
+
+ * tm-decrose.h (ASM_FINAL_SPEC): Use -mno-mips-tfile to suppress
+ invoking mips-tfile, instead of using -g0. If -save-temps, preserve
+ the original .o file before mips-tfile is called. Pass the correct
+ name for the assembler file.
+
+Wed Sep 18 18:54:15 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-*.c: Use DECL_CLASS_CONTEXT to figure out where a (static or
+ non-static) member function is declared, rather than trying to
+ divine the info from TYPE_METHOD_BASETYPE of the function's type.
+
+Wed Sep 18 15:38:52 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-decl.c (grokdeclarator): Error if nested function is extern.
+
+Wed Sep 18 02:41:08 1991 Per Bothner (bothner at cygnus.com)
+
+ * cplus-typeck.c (convert_arguments): Don't crash if the
+ formal parameter type is unknown (type==NULL) and the
+ actual is a function. Do the default instead.
+
+Tue Sep 17 22:33:30 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (check_format):
+ No warning if types match except for signedness.
+
+Tue Sep 17 10:56:46 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-decl.c (pushtag): When creating a TYPE_DECL that's in class
+ scope, allocate the space needed for DECL_CLASS_CONTEXT.
+
+ * cplus-search.c (get_abstract_virtuals): If the BASE is not on the
+ main spine, look at the virtuals that come from the most derived
+ class that has BASE on its main spine.
+ * cplus-tree.h (VF_*): New macros for dealing with VFIELDS.
+
+Mon Aug 16 12:09:32 1991 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * make.com: Fix typo.
+
+Tue Sep 17 15:13:39 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-common.c (shorten_compare): Always compute args with side effects.
+
+ * varasm.c (decode_addr_const): Use SYMBOL_REF unchanged in 1st switch.
+
+ * varasm.c (output_addressed_constants): Handle a CONSTRUCTOR in
+ an ADDR_EXPR correctly.
+
+ * cccp.c (rescan): For unterm string, mention lineno of first newline.
+
+ * fold-const.c (fold): Call optimize_bit_field_compare in constant case
+ even if not optimizing.
+
+ * c-decl.c (finish_function): Don't clear DECL_INITIAL if nested.
+ (pop_c_function_context): Do it here instead.
+
+Tue Sep 17 11:30:32 1991 Michael Meissner (meissner at osf.org)
+
+ * collect-osf.c (scan_prog_file): Recognize alternate forms for the
+ constructor and destructor names.
+
+ * osf-main.c (_entry): Provide an alternative function (_entry) to
+ start up the static constructors/destructors.
+
+Mon Sep 16 05:35:21 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (simplify_shift_const): Correct errors involving modes
+ to use for shift.
+
+Sun Sep 15 19:13:58 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload_as_needed): Remove code that deletes insns that
+ create equivalences.
+ (reload): Put it here so it is executed even if reload_as_needed
+ isn't called.
+
+Sun Sep 15 17:13:09 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * Makefile.in (GNULIB2_CFLAGS): Include GCC_CFLAGS.
+ (ENQUIRE_CFLAGS): Likewise (in place of plain CFLAGS).
+
+ * genattrtab.c (main): Don't index by id->insn_code if negative.
+
+ * genrecog.c (write_tree_1): Avoid pos[depth-1] if depth is 0.
+
+Sun Sep 15 15:19:16 1991 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * make.com: Modify to allow direct submission to a batch queue.
+ Also, add instructions to build GNU C++ as well as GNU CC.
+
+ * cccp.c (hack_vms_include_specification): If [000000] is present in
+ (implying a physical device or a rooted logical) try to open it.
+ If the open fails, then remove the [000000] (making the name suitable
+ for use with a non-rooted logical name) and return that.
+
+Sun Sep 15 15:12:41 1991 Michael Meissner (meissner at osf.org)
+
+ * make-mips (Makefile): Remove rule building Makefile, since
+ Makefile.in now has one.
+
+ * make-decrose (Makefile): Remove rule building Makefile, since
+ Makefile.in now has one.
+
+Sun Sep 15 14:12:47 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * Makeflags (SYSCALLS.c.X): Use CPPFLAGS and INCLUDES.
+
+Sun Sep 15 12:03:35 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * cplus-decl.c (poplevel): Match change made to c-decl.c on Oct 3,
+ 1989.
+
+Sun Sep 15 06:52:42 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * caller-save.c (save_call_clobbered_regs): Deaden registers mentioned
+ in REG_UNUSED notes.
+ (clear_reg_live): Verify that note refers to a REG.
+ (choose_hard_reg_mode): Rewrite to not use specific modes and to
+ handle the case where separate CCmode registers exist.
+
+Sat Sep 14 13:03:29 1991 Michael Tiemann (tiemann at cygnus.com)
+
+ * all cplus-* files: Change {ASSOC,assoc} to {BINFO,binfo} where
+ appropriate.
+ cplus-tree.h, tree.h: Change name of CLASSTYPE_ASSOC to TYPE_BINFO.
+ Change names of CLASS_ASSOC_* to TYPE_BINFO_*.
+ all cplus-* files: FUNCTION_DECLs that are class methods now have
+ their DECL_VCONTEXT stored in the DECL_CONTEXT.
+ (lang_decl): The VCONTEXT field is now gone.
+ (lang_decl): _DECL nodes in class scope now record the class as a
+ context in the DECL_CLASS_CONTEXT field.
+ tree.h (TYPE_BINFO): Renamed TYPE_BASETYPES to this.
+ dbxout.c (dbxout_type): User of TYPE_BASETYPES changed.
+ (BINFO_{VALUE,OFFSET,VTABLE,VIRTUALS,BASETYPE{S}}): New macros
+ inherited from GNU C++.
+ (DECL_{VINDEX,FCONTEXT}): Ditto.
+ (TREE_VIA_{PUBLIC,VIRTUAL}): Ditto.
+
+Sat Sep 14 09:14:26 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rtlanal.c (reg_set_p): Remove abort for MEM; reg_overlap_mentioned_p
+ now handles that case correctly.
+ REG is set if it is really a MEM and this is a CALL_INSN.
+
+Sat Sep 14 01:34:39 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure (vax-ultrix*): New alternative.
+
+ * reload1.c (choose_reload_regs): Always ignore cancelled reloads.
+
+ * real.h (atof): Alternate declaration on MIPS.
+
+Thu Sep 12 18:55:06 1991 Torbjorn Granlund (tege at mole.gnu.ai.mit.edu)
+
+ * optabs.c (expand_binop): Fix carry propagation code for multiple
+ words.
+
+ * tm-*.h: Fix systematic typo in comment.
+
+Thu Sep 12 18:23:53 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * gvarargs.h, va-mips.h, va-sparc.h (_va___list): Was __va_list.
+
+Thu Sep 12 12:53:36 1991 Roland H. Pesch (pesch at cygint.cygnus.com)
+
+ * cpp.texinfo: (titlepage) use @title/@subtitle/@author
+ (copyright page) add note re future C manual; add 1991 to copyrights
+ (general) prepare for easy @smallbook formatting; clarification on
+ strings; less passive; add AMD29K predefined macros; update -d refs,
+ add -dM; add examples; add -pedantic-errors; add -MD, -MMD, -H; fix
+ minor typos.
+
+Thu Sep 12 07:58:11 1991 Torbjorn Granlund (tege at mole.gnu.ai.mit.edu)
+
+ * m68k.md (umulsidi3, mulsidi3): New DEFINE_EXPANDs and DEFINE_INSN
+ recognizers.
+
+Wed Sep 11 22:11:17 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * a29k.md, romp.md: Update calling sequence to emit_no_conflict_block.
+
+Wed Sep 11 21:06:32 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * fold-const.c (const_binop): Fix last change for ceil and round.
+
+ * gvarargs.h, va-mips.h, va-sparc.h (va_list): Now a macro again.
+ (__va_list): This is the typedef.
+
+Wed Sep 11 16:52:20 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_binary_op_nodefault, RSHIFT_EXPR): Change
+ "shift count" warnings changed to errors back to warnings.
+
+ * cse.c (canon_hash): Also do not record global_regs if
+ SMALL_REGISTER_CLASSES. Makes the code match the comment.
+
+ * cexp.y (yylex): Add sprintf call to create error message,
+ because yyerror does not call *printf itself.
+
+ * gcc.c (default_compilers): Support new option -traditional-cpp,
+ which passes traditional to cpp, but not to cc1.
+ * gcc.texinfo: Document it.
+
+ * sched.c (INSN_LUID): New variable. Give instructions logical
+ numbers, which can be used when sorting, to make the scheduling
+ algorithm more stable.
+ (sched_analyze): Initialize it.
+ (rank_for_schedule): Sort on it.
+ (schedule_insns): Alloca(te) it and (b)zero it.
+ (priority): New priority algorithm. Don't include latency of
+ current insn, and subtract one from total priority calculated.
+ Makes the scheduling algorithm more stable, and doesn't hurt
+ performance.
+
+ * sched.c (swap_sort): Must pass &insn to rank_for_schedule, not a
+ pointer into the array being sorted.
+
+ * cplus-lex.c (do_identifier): Put function return type on
+ preceeding line.
+
+Wed Sep 11 05:51:00 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-typeck.c (build_binary_op_nodefault): If OP0 or OP1 is a
+ zero pointer, canonicalize it to NULL_POINTER_NODE.
+
+ * expr.c (preexpand_calls): Don't preexpand calls inside a
+ WITH_CLEANUP_EXPR. The gestalt of a WITH_CLEANUP_EXPRs must be
+ understood at the top level.
+
+ * cplus-tree.c (build_cplus_new): When building cleanup, make
+ the call to the cleanup nonvirtual.
+
+Tue Sep 10 20:28:56 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * fold-const.c (const_binop): Shortcut for dividing single-word
+ sizes
+
+ * Makefile.in (varasm.o): Depend on insn-codes.h.
+
+Tue Sep 10 19:29:26 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * optabs.c (expand_binop): Try to open-code muldi3 if we have mulsi3
+ and mulsidi3. Idea due to tege@sics.se.
+
+ * cse.c (fold_rtx, case MEM): Don't call find_best_addr when insn == 0.
+ Pass 0 to recursive call that tries to fold the address.
+
+Tue Sep 10 18:16:16 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * m68k.md (fix_trunc*): Call CC_STATUS_INIT, since these patterns
+ do not leave the condition codes in the expected state.
+
+ * tm-ultrix.h (CPP_PREDEFINES): Add __vax.
+
+Tue Sep 10 04:12:53 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-decl.c (finish_decl): Fix bug where the conversion from
+ WITH_CLEANUP_EXPR -> init/cleanup pair was not setting bits of
+ CURRENT_BINDING_LEVEL.
+ (init_decl_processing): Set FLAGS_THIS_IS_VARIABLE before calling
+ `init_exception_processing'.
+
+Mon Sep 9 22:09:27 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-tree.h (prev_class_type): Delete this bogus definition.
+
+ * cplus-class.c (instantiate_type): Don't complain about no static
+ member functions being found until we have been through all the
+ baselinks.
+
+ * cplus-dbxout.c (dbxout_type_methods): Don't write symbol
+ information about methods that were generated by the compiler.
+ (??? Is this really the right thing to do?)
+
+ * cplus-decl2.c (lang_decode_option): Turn on warn_uninitialized if
+ -Wall is the argument.
+
+Mon Sep 9 19:05:01 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * gcc.c (default_compilers): For .S files, pass -traditional not
+ -ftraditional to cpp.
+
+Mon Sep 9 15:01:58 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * fold-const.c (optimize_bit_field_compare): Distinguish NE from EQ.
+
+ * explow.c (allocate_dynamic_stack_space):
+ Handle SETJMP_VIA_SAVE_AREA by allocating extra space.
+
+ * cplus-parse.y (empty_parms): Change inline to __inline.
+
+Mon Sep 9 15:16:24 1991 Torbjorn Granlund (tege at zevs)
+
+ * longlong.h (m68000 umul_ppmm): Clobber one register less by
+ slightly rearranging the code.
+
+Sun Sep 8 16:47:32 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * cccp.c (main, fatal): Delete the deps output file if error.
+ (deps_file): New variable.
+
+ * expr.c (convert_move): Update call to emit_no_conflict_block.
+
+ * expmed.c (CEIL): New macro.
+
+ * optabs.c (expand_binop): Don't do add by words for more than 2 words.
+
+ * c-typeck.c (build_modify_expr): Test TREE_READONLY of lhs.
+
+Sun Sep 8 01:17:47 1991 Torbjorn Granlund (tege at zevs)
+
+ * sparc.md (sgtu, sleu): Test for SUBREG as well as REG.
+
+Sun Sep 8 07:04:33 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * optabs.c (emit_no_conflict_block, emit_libcall_block): Rework to
+ accept a list of insns rather than a SEQUENCE.
+ (expand_binop, expand_unop, expand_float, expand_fix): Change calls to
+ above functions.
+ * emit-rtl.c (add_insn): No longer static.
+ * calls.c (expand_call): Change call to emit_libcall_block.
+
+ * cse.c (fold_rtx): Fix typo with parens in associative operation case.
+
+Sat Sep 7 21:49:46 1991 Jim Wilson (wilson at cygint.cygnus.com)
+
+ * expmed.c (store_bit_field): In the code handling bitfields
+ larger than the word size: set fieldmode to size large enough
+ to hold bitfield; new variable orig_bitsize; don't let
+ bit_offset calculation for WORDS_BIG_ENDIAN hosts go negative.
+ (extract_bit_field): Likewise.
+ (store_split_bit_field): For second word, strip of SUBREG if any
+ before calling operand_subword. Offset for second word if in
+ memory is the next UNITS_PER_WORD aligned address.
+ (extract_split_bit_field): Likewise.
+
+ * expr.c (emit_move_insn): When emitting multiple move insns in
+ the loop, remember last insn emitted so that it can be returned.
+
+ * tree.c (enum tree_node_kind): Add new entry vec_kind to
+ represent TREE_VECs.
+ (tree_node_kind_names): Add name "vecs" for it.
+ (make_node): Handle TREE_VECs in the 'x' case.
+ (make_tree_vec): Use vec_kind instead of x_kind.
+
+Sat Sep 7 16:25:50 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-call.c (ideal_candidate): Prefer non-const member functions
+ to const member functions when there is a choice.
+ * cplus-tree.c (propagate_assoc_offsets): Moved here from
+ cplus-class.c
+ (copy_nonvirtual_children): Deleted.
+
+ * cplus-class.c, cplus-tree.c (layout_{v}basetypes,
+ propagate_assoc_offsets, finish_base_struct): New offset
+ computation/hierarchy implementation. Now the lattice contains
+ vbasetypes with zero-based offsets (and children from these types
+ assume they are zero-based). The CLASSTYPE_VBASETYPE list contains
+ vbasetypes with hierarchy-dependent offsets (and children from these
+ types have hierarchy-dependent offsets). Note that now, virtual
+ baseclasses are fully shared in the hierarchy. The still are not
+ shared at all in the CLASSTYPE_VBASETYPE list.
+ * cplus-decl.c (xref_tag): Share vbasetypes in the lattice.
+ * cplus-tree.h (lang_type): Add CLASSTYPE_VASSOC field so we can
+ share virtual basetypes in inheritance lattices.
+
+Sat Sep 7 13:07:12 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-parse.y (cast_expr): Supply OFWHAT arg to digest_init.
+ * c-typeck.c (error_init, pedwarn_init): New functions.
+ (digest_init, process_init_constructor): Use them.
+
+ * out-m68k.c (output_function_prologue): Add a negative constant
+ to sp rather than adding a positive one, since this is faster.
+
+ * out-m68k.c (output_function_prologue, output_function_epilogue):
+ Use word sized immediates when possible.
+
+ * Makefile.in (install-dir): Don't die if can't create mandir.
+ (install-man): Don't put . in front of manext.
+ (manext): Add . to the value.
+ (mandir): Don't use manext.
+
+ * genextract.c (main): Don't use __builtin_memcpy in GCC 1.
+
+Fri Sep 6 19:29:55 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * caller-save.c (emit_mult_save, emit_mult_restore): Copy constant to
+ TEMPREG and add integer, instead of the opposite order, which might
+ not work on some machines.
+
+ * fold-const.c (fold): Ensure we always return an object of the
+ desired type.
+
+ * reload1.c (reload, reload_as_needed): reload_in_progress must be
+ set during caller-save processing.
+
+Fri Sep 6 18:36:55 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * out-sparc.c (leaf_reg_{remap,backmap}): Define mapping for
+ %o7/%i7, since user-defined registers might reference these.
+ (legitimize_pic_address): Set CURRENT_FUNCTION_USES_PIC_OFFSET_TABLE
+ if ORIG is a LABEL_REF. For CONST_INT case, don't call force_reg
+ during reload, use REG if available otherwise abort.
+
+Fri Sep 6 17:16:05 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * configure: Default $cpu_type properly.
+
+Fri Sep 6 05:50:58 1991 Ken Raeburn (raeburn at watch.com)
+
+ * genextract.c: Generate one large function with a switch, instead
+ of a table of small functions to call. Use __builtin_memcpy under
+ GNU C.
+
+ * genoutput.c: For "@" constructs, now generates a lookup table per
+ insn, instead of a switch.
+
+Fri Sep 6 15:40:54 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * cccp.c (skip_if_group): Deal with invalid directives the same
+ way handle_directive does.
+
+Fri Sep 6 16:37:04 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * tm-sparc.h (RTX_COSTS): Define costs for MULT and various divides.
+
+ * loop.c (move_movables): Call `gen_lowpart_common' instead of
+ building SUBREG manually.
+
+ * local-alloc.c (block_alloc): When convert scratch to a reg, must
+ set regs_ever_live for all hard registers used by the new reg, not
+ just the first.
+
+Fri Sep 6 07:15:44 1991 Torbjorn Granlund (tege at mole.gnu.ai.mit.edu)
+
+ * gnulib2.c (__negdi2): Change it to work like __subdi3.
+ * gnulib2.c (_udivmoddi4): Make faster special case for CPUs with
+ a udiv_qrnnd that can handle unnormalized (i.e. with less than
+ LONG_TYPE_SIZE significant bit) divisors.
+
+ * gnulib2.c (__muldi3): Cast operands to unsigned.
+
+ * gnulib2.c (__Xcmpdi): Use `long' for all variables for
+ consistency.
+
+ * gnulib2.c (__udivmoddi4): New function with code from __udivdi3,
+ extended to give remaider.
+ * gnulib2.c (__divdi3, __moddi3, __udivdi3, __umoddi3): Use
+ __udivmoddi4.
+ * gnulib2.c: (__moddi3): Result sign is only dependent on U, not V.
+
+Fri Sep 6 05:44:07 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_insn): Accept new arg IN_LIBCALL_BLOCK.
+ If in libcall block, don't record destinations in hash table.
+ Remove explicit use of SFmode and DFmode when checking -ffloat-store.
+ (cse_basic_block): Pass new arg to cse_insn to indicate when we
+ are processing an insn surrounded with REG_LIBCALL/REG_RETVAL notes.
+
+ * optabs.c (emit_libcall_block): New function.
+ (expand_binop, expand_unop): Remove kludge of referencing library
+ function SYMBOL_REF before libcall block.
+ Use emit_libcall_block.
+ (expand_float, expand_fix): Rework library calls to use
+ emit_libcall_block.
+ * calls.c (struct arg_data): Add new field, initial_value.
+ (expand_call): Don't make libcall block for calls that return
+ aggregates.
+ Remove kludge of referencing function SYMBOL_REF outside of block.
+ For constant calls, save RTL for arg in args[i].initial_value and
+ start a sequence.
+ When making REG_EQUAL note, use INITIAL_VALUE instead of VALUE.
+ Use emit_libcall_block for constant calls.
+ * expr.h (emit_libcall_block): Define it.
+
+Fri Sep 6 15:58:52 1991 Torbjorn Granlund (tege at zevs)
+
+ * longlong.h (68020, i386): Don't define machine-dependent
+ __umulsidi3 (so the default definition is used).
+ * longlong.h (all machines): Cast all operands, sources and
+ destinations, to `unsigned long int'.
+ * longlong.h: Add gmicro support.
+
+Fri Sep 6 01:42:09 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * jump.c (jump_optimize): Delete duplicate line number notes.
+
+Thu Sep 5 19:23:24 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * configure (romp): Fix typo in name of xm_file.
+
+ * rtlanal.c (dead_or_set_p): If INSN has a CLOBBER for X, X is
+ dead.
+
+ * gnulib1.c (cmpdf2, cmpsf2): Delete unused functions.
+ * gnulib2.c (anddi3, iordi3, xordi3, one_cmpldi2, adddi3, subdi3):
+ Likewise.
+ * optabs.c (emit_cmp_insn): Clean up code now that integer and
+ float comparisons are done differently.
+ (init_optabs): Remove references to unused functions listed above.
+ * Makefile.in (LIB1FUNCS, LIB2FUNCS): Likewise.
+
+Thu Sep 5 18:32:27 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * m68k.md (zero_extend*): Don't allow memory-memory due to aliasing.
+
+ * expr.c (do_jump): Don't lose if only 1 insn precedes new jump.
+
+ * sparc.md (ashldi3): Fix dumb bug detecting constant 1.
+
+ * out-sparc.c (output_move_double): Use split_double for constant.
+ Properly decrement addreg1.
+
+Thu Sep 5 15:20:25 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * out-sparc.c: Include expr.h and delete extern declarations.
+
+ * rtlanal.c (rtx_equal_p): Correct typo in comment or spacing.
+ * reload1.c (reload): Likewise.
+ * protoize.c: Likewise.
+ * longlong.h: Likewise.
+ * local-alloc.c (block_alloc): Likewise.
+ * jump.c: Likewise.
+
+ * unroll.c (iteration_info): Don't calculate loop iterations based
+ on a giv iterator, since the current code often gives the wrong
+ result. This case is rare, so it does not seem worth handling at all.
+
+ * sched.c (schedule_insns): When the only sched pass is after
+ reload, must clear unused_insn_list and unused_expr_list then,
+ instead of during the nonexistant pass before reload.
+
+ * sched.c (schedule_block): When calculating estimated IPC, avoid
+ divide by zero.
+
+ * sparc.md: Correct two define_splits for seq/sne patterns of the
+ form `x + (i == 0)', and add a missing `addx' pattern used by
+ these define_splits.
+
+ * toplev.c (fatal_insn_not_found): Correct typo in error message.
+ (main): Include "gsdb" and "gdbx" in warning message when -g is not
+ supported.
+
+ * expr.h (enum expand_modifier): Delete last vestige of
+ EXPAND_INTO_STACK.
+
+Thu Sep 5 13:50:21 1991 John Gilmore (gnu at cygint.cygnus.com)
+
+ * c-typeck.c (digest_init, process_init_constructor): Include the
+ variable name, member name, and/or array indices in error messages.
+ This makes it tolerable to debug large data structure initializers.
+ Reword some messages to work with the name and/or function call
+ argument included. New arg OFWHAT. All callers changed except
+ one digest_init call in each of c-parse.y and objc-parse.y.
+ (warn_for_assignment): Reduce to a single message argument,
+ automatically handling formatting for function call arguments.
+ All callers changed.
+ (convert_for_assignment): If ERRTYPE is a null string, this is
+ parameter passing for a function, so output different error messages.
+ (convert_arguments): Pass null string to convert_for_assignment to
+ indicate parameter passing.
+
+Thu Sep 5 13:44:19 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * sched.c: Correct typos in comments.
+ (sched_note_set): Don't try to calculate live info for global
+ register variables.
+ (attach_deaths): Don't add REG_DEAD notes for global register
+ variables.
+
+ * tm-sparc.h (SELECT_SECTION): Can't put a variable in text section
+ if flag_pic and RELOC are both true, same test that varasm.c does.
+
+Thu Sep 5 13:15:43 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rtlanal.c (reg_referenced_p): Handle USE and CALL.
+ Use switch instead of if-then-else.
+
+Thu Sep 5 08:03:58 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-class.c (propagate_assoc_offsets): Don't fail to
+ propagate the offset to the rightmost basetype.
+
+ * cplus-decl.c (xref_tag): Allocate nodes for basetype info on
+ permanent obstack, not temporary obstack.
+
+Wed Sep 4 18:53:16 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * fixincludes : Change `m68k' to `__m68k__' in all #if's.
+
+ * Makefile.in (ALLOCA_FLAGS): Add -Demacs.
+ (ALLOCA_FINISH): Put option before input file name.
+ (alloca.o): Supply $(INCLUDES).
+
+ * Makefile.in (GCC_CFLAGS): New parameter.
+ (protoize, protoize.o, unprotoize, unprotoize.o): Use GCC_CFLAGS.
+ (enquire, enquire.o, collect2, collect2.o, SYSCALLS.c.X): Likewise.
+
+Wed Sep 4 18:13:56 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (make_extraction): When picking up low-order part,
+ ensure that we don't create a non-aligned object if alignment
+ is required.
+
+ * expr.c (emit_push_insn): Ensure we only call force_const_mem on a
+ constant.
+
+ * config.subr: Set `os' to be the last `-' and everything following it.
+ `romp' is the basic machine name for the rtpc.
+ `aos' is IBM's name for BSD.
+ * configure: Default `cpu_type' to the first field before an
+ optional `-'.
+ Add a29k, a29k-ultra, romp, and rs6000.
+ * xm-a29k-ultra.h: New file.
+
+Wed Sep 4 15:46:50 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ Changes from Ron Guilmette:
+ * dwarfout.c (output_symbol): Move tests for omitting declarations
+ to dwarfout_file_scope_symbol. No need for `local' parameter.
+ Use TREE_PUBLIC and TREE_EXTERNAL to determine whether a variable
+ or function is global.
+ (finalizing, dwarfout_file_scope_delayed_symbol): Delete.
+
+ * toplev.c (compile_file): Delete use of dwarfout_file_scope_symbol
+ for initialized VAR_DECLs. All global declarations are passed to
+ dwarfout_file_scope_symbol (except function definitions and types).
+
+ (compile_file, rest_of_decl_compilation): Attribute time in
+ {dbxout,sdbout,dwarfout} functions to symout_time.
+
+ * varasm.c (assemble_variable): Check and update TREE_ASM_WRITTEN
+ for a global register variable.
+ Delete use of dwarfout_file_scope_symbol for VAR_DECLs.
+
+Tue Sep 3 23:34:57 1991 Torbjorn Granlund (tege at zevs)
+
+ * sparc.md (ashldi3 expander & recognizer): Make shift count have
+ SImode. Used to have DImode.
+
+ * expmed.c (emit_store_flag): Declare arg UNSIGNEDP.
+
+ * vax.md (adddi3): Make operands 2 and 3 commutative.
+
+ * sparc.md (subtract constant then return): Peephole deleted.
+
+Tue Sep 3 22:23:52 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * Makefile.in (mostlyclean, clean, realclean): Some files were missing.
+
+ * gvarargs.h (va_list): Make it typedef, not macro.
+ * va-mips.h, va-pyr.h: Likewise.
+
+Tue Sep 3 22:07:04 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-init.c (build_vec_delete): Fix off-by-one error for arrays
+ of length 1.
+
+Tue Sep 3 19:30:45 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): Don't pass a STRICT_LOW_PART to
+ reg_overlap_mentioned_p.
+
+ * cse.c (fold_rtx): If INSN is zero, copy X before we change
+ anything inside it.
+ When looking for associative operation, pass zero as missing arg to
+ recursive call.
+ (find_comparison_args): Add zero for missing arg to fold_rtx calls.
+
+ * reload.c (find_reloads): Correct code that prevents replacing
+ a SET_DEST with a constant so that it correctly looks for an
+ operand being a SET_DEST.
+
+Tue Sep 3 19:17:34 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * out-i386.c (split_di): Call split_double for CONSTANT_P.
+ (fix_op): Delete.
+ (float_op): Don't examine the mode of the FLOAT operand.
+ (output_float_compare): Don't make new %ax RTX: use scratch
+ operand from insn.
+
+ * i386.md (float mode tstM,cmpM,fixuns_truncMN2,fix_truncMN2): Use
+ match_scratch.
+ (float mode tstM,fixuns_truncMN2,fix_truncMN2): Don't gen temp RTX:
+ use scratch operand.
+ (fix_truncMN2,floatMN2): Split pattern into a separate DFmode and
+ SFmode patterns so that operands[1] has a mode.
+ (sCOND patterns): Don't set cc_status to previous status.
+ (cmpstrsi): Don't explicitly reference reg 2.
+
+Tue Sep 3 16:28:56 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * optabs.c (expand_binop): Fix carry calculation.
+
+ * varasm.c (decode_addr_const): Given a LABEL_DECL, Make a LABEL_REF.
+ (const_hash): Handle a LABEL_REF.
+ * expr.c (expand_expr): Use FUNCTION_MODE for memref to a LABEL_REF.
+
+ * configure: Fix typo in last change.
+
+ * cccp.c (handle_directive): Normally no error for line with `###'.
+
+Tue Sep 3 10:53:12 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * out-m88k.c, tm-m88k.h: Delete remnants of the fancy abort.
+ * tm-m88kdgux.h: No longer identify as version DG-*.
+ * m88k files: Update copyright dates.
+
+Tue Sep 3 03:18:54 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * expr.c (expand_expr): Get rid of EXPAND_INTO_STACK.
+
+Mon Sep 2 14:07:54 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * gcc.c (do_spec_1): In %X, terminate the arg after each option.
+
+ * config.subr: If argument contains `local', always accept it.
+ * configure: If machine type contains `local',
+ construct file names from that machine type name.
+
+ * configure: Make config.status a shellscript to redo the configure.
+ No need now to change / to - when storing $(target) in Makefile.
+ Store $(host_make_var_file) in Makefile also.
+ Set host_make_var_file to ../Makefile.in after creating Makefile
+ if no make-... file actually exists for this host.
+ * Makefile.in (host_make_var_file): Dummy definition to be filled in.
+ (Makefile): New rule to rerun `configure'
+
+ * tm-sysv4.h (ASM_DECLARE_FUNCTION_SIZE): New macro.
+
+ * tm-mips.h, tm-m88k.h (abort): Macro definition deleted. It is
+ not right for any machines description to specify use of fancy_abort.
+
+ * protoize.c [v.4]: Include fcntl.h.
+ (execvp): Correct type for second arg.
+ (compile_params): Remove `const'; that loses when calling execvp.
+
+ * cccp.c (directive_table): Typo in entry for do_ident.
+
+ * xm-m68k.h (alloca): Define macro with arg.
+
+ * emit-rtl.c (reorder_insns_with_line_notes): New function.
+ (find_line_note, emit_line_note_after): New functions.
+
+ * jump.c (jump_optimize): When moving else clause before test,
+ only move the insn as far as needed, and use new function
+ reorder_insns_with_line_notes.
+
+Mon Sep 2 03:30:35 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * Makefile.in (collect2): Compile with gcc.
+
+Sun Sep 1 9:03:46 1991 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ Define two macros to eliminate the need for a seperate collect pass.
+
+ * tm-vms.h (ASSEMBLE_OUTPUT_CONSTRUCTOR): Define.
+ (ASSEMBLE_OUTPUT_DESTRUCTOR): Define.
+
+Sun Sep 1 08:14:22 1991 Michael Meissner (meissner at osf.org)
+
+ * collect-osf.c (main): Print version number if -v. Also ignore all
+ arguments beginning with -c rather than just '-c'.
+
+ * make-decrose (collect): Add version.o to link.
+
+Sat Aug 31 17:03:23 1991 Michael Meissner (meissner at osf.org)
+
+ * cplus-input.c (inline macro definition): If inline is already
+ defined, don't redefine it.
+
+ * collect-osf.c (main): Look for gld and gas instead of ld and as,
+ so collect-osf can be installed as ld. Use a default path of
+ /usr/ccs/gcc to find the linker and assember. Ignore the -c switch,
+ which GCC uses to say that collect is needed.
+
+ * osf-main.c (__finis): Don't call descructors already called if one
+ of the destructors calls exit (which in turn calls __finis).
+
+ * tm-mips.h (DBX_REGISTER_NUMBER): Use mips_dbx_regno to map
+ register number to debug register number.
+ (GP_DBX_FIRST, FP_DBX_FIRST): New macros, giving the first debug
+ register numbers for gp registers and fp registers.
+
+ * out-mips.c (mips_dbx_regno): New global array to map GCC register
+ number to debug register number, to fix problem with OSF/1 stabs
+ using 38 for the first fp registers, rather than 32.
+ (override_options): Set up OSF/1 SIGINFO signal handler to notmake
+ the interruptable system calls read, write, and wait not return
+ error condition. Also initialize mips_dbx_regno.
+
+ * make-decrose (CFLAGS): Add $(MSTATS) variable to set -mstats.
+ (CFLAGS_NODEBUG): Like CFLAGS, except no debugging or inlining.
+ (DEB_OPT): Define in terms of DEBUG, OPT, and PROFILE.
+ (cplus-lex rule): Build cplus-lex with no debug or inlinings.
+
+Sat Aug 31 12:52:17 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * cccp.c (handle_directive): Be more fussy detecting `# LINE' case.
+
+ * cccp.c (directive_table): Pass through and ignore #ident.
+ (do_ident): New function.
+ (skip_if_group): Error if unrecognized directive seen.
+
+ * jump.c (jump_optimize): In converting x=a; if (...) x=b; to
+ store flag, insert all the new code in just one line.
+
+ * gcc.c (do_spec_1): Use xmalloc to make linker_options the first time.
+
+ * expr.c (expand_expr): Make EXPAND_SUM and EXPAND_INITIALIZER
+ imply EXPAND_CONST_ADDRESS in all cases.
+
+ * c-decl.c (c_decode_option): -Wall sets warn_uninitialized.
+ * flags.h (warn_uninitialized): Declared.
+ * toplev.c (warn_uninitialized): No longer static.
+
+ * cccp.c (main): Make no assumptions about include_defaults
+ in calculation of max_include_len. Add fudge space if VMS.
+
+ * reload.c (find_reloads_toplev): New arg IS_SET_DEST.
+ Don't replace reg with constant in destination of a SET.
+ (find_reloads): Pass that arg. Also don't replace here.
+
+ * cplus-xref.c: Finish installing changes from Youngdale.
+
+Sat Aug 31 09:02:25 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-decl2.c (finish_file): Call varasm routines to assemble ctor
+ and dtor lists.
+
+ * cplus-dbxout.c (dbxout_type_methods): Fix error in printing symbol
+ info for classes that only define a destructor.
+
+Sat Aug 31 08:32:12 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_end_of_basic_block): Correctly handle the case of a basic
+ block where a conditional branch out of the block becomes unconditional
+ and a conditional branch to the end of the block becomes a noop.
+
+ * combine.c (try_combine): In case where we have a PARALLEL
+ involving a load and sign extend, use reg_overlap_mentioned_p
+ instead of reg_mentioned_p.
+ If we have a PARALLEL of two independent SETs, try to split them
+ up into separate insns.
+
+ * combine.c (move_deaths): Instead of placing the REG_DEAD notes
+ on TO_INSN, add them to a list whose address is given as an
+ operand.
+ (distribute_notes): Allow for the case when the death of an object
+ is between I2 and I3.
+ Set reg_last_death to corrspond to the location of the REG_DEAD
+ note being placed.
+ (try_combine): Call move_deaths in new way and pass returned list
+ to distribute_notes if it is non-empty.
+
+ * local-alloc.c (requires_inout_p): Don't have cases for '[Q-U]' unless
+ EXTRA_CONSTRAINT is defined..
+
+ * local-alloc (block_alloc): Don't allocate SCRATCH on machines with
+ SMALL_REGISTER_CLASSES defined.
+
+ * regclass.c (reg_class_record): Add missing case for 'V'.
+
+Fri Aug 30 04:42:19 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * tm-i386.h (OUTPUT_JUMP): Use cc_prev_status.
+
+Fri Aug 30 17:08:52 1991 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * xm-vms.h (LOCATE_START_OF_FILE_NAME): Remove.
+ (FILE_NAME_NONDIRECTORY): Fix typo.
+ (XREF_FILE_NAME): Use FILE_NAME_NONDIRECTORY instead of
+ LOCATE_START_OF_FILE_NAME, and omit the leading underscore in the
+ generated file name.
+ (FILE_NAME_ABSOLUTE_P): Define to use hook in cplus-xref.c.
+ (FILE_NAME_JOINER): Define to use hook in cplus-xref.c.
+
+ * cplus-xref.c: Fix bug in default definition of FILE_NAME_ABSOLUTE_P.
+ (GNU_xref_open): Fix bug - wrong argument to XREF_FILE_NAME.
+ (FILE_NAME_JOINER): New macro.
+ (GNU_xref_file): Use it.
+
+Fri Aug 30 17:30:15 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * cplus-xref.c: Reinstall Aug 25 changes discarded by Tiemann.
+
+ * expr.c (expand_expr): New modifier option EXPAND_INITIALIZER.
+ * varasm.c (output_constant): Use that.
+ * jump.c (forced_labels): New var records labels not to delete.
+ (jump_optimize): Don't delete those labels.
+ * flow.c (find_basic_blocks): Any computed goto goes to those labels.
+ * varasm.c (decode_addr_const): Deal with LABEL_DECL.
+
+Fri Aug 30 15:41:03 1991 Michael Meissner (meissner at osf.org)
+
+ * mips.md (copyleft): Use separate copyright years.
+ (mov*): Use nonimmediate_operand instead of general_operand.
+
+ * tm-mips.h (copyleft): Use separate copyright years.
+
+ * xm-mips.h (copyleft): Use separate copyright years.
+
+ * xm-umips.h (copyleft): Use separate copyright years.
+
+Fri Aug 30 08:47:30 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-typeck.c (build_x_*): Try first calling `build_opfncall'
+ with FLAGS==0. If that succeeds, check protection.
+ (build_conditional_expr): `fold' does not preserve the type of it's
+ expressions, which is a problem for C++ when trying to keep ints and
+ enums distinct.
+
+ * cplus-decl.c (lookup_name): When there is a choice between seeing
+ a name as a type and seeing as a decl, call `arbitrate_lookup' to
+ make the decision.
+ * cplus-lex.c (arbitrate_lookup): New function. Uses minute amounts
+ of syntactic context to decide whether to see a name as a type or
+ something else.
+
+Fri Aug 30 07:40:49 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * jump.c (delete_jump): When checking REG_DEAD notes, make sure they
+ have a legal value.
+
+Fri Aug 30 00:57:05 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * local-alloc.c (alloc_qty_for_scratch): Treat Q - U as reg class if
+ EXTRA_CONSTRAINT is not defined.
+ * regclass.c (reg_class_record): Likewise.
+
+Thu Aug 29 21:39:07 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_binary_op_nodefault): Fix last change.
+
+Thu Aug 29 19:11:05 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * recog.c (general_operand, const_double_operand): Similar to
+ immediate_operand, don't accept a VOIDmode operand if the
+ caller wants floating.
+ * out-pyr.c (nonindexed_operand): Likewise.
+
+Thu Aug 29 09:53:27 1991 Michael Tiemann (tiemann at pogo.gnu.ai.mit.edu)
+
+ * cplus-tree.h ({SET,CLEAR}_ASSOC_*): New macros needed because not
+ all C compilers support conditional expressions as lvalues.
+ (lang_type): Change type of MEMOIZED_TABLE_ENTRY and SEARCH_SLOT
+ from `void *' to `char *', to make braindead compilers at less of a
+ disadvantage.
+
+Thu Aug 29 08:07:40 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md (define_function_unit): Update latencies.
+
+ * out-m88k.c (output_function_profiler): Correct offsets for
+ register saves.
+ * tm-m88ksvr4.h (FUNCTION_PROFILER): Use the name _mcount and do
+ register saves.
+
+ * tm-m88k.h (ASM_DWARF_POP_SECTION): Specify "previous".
+
+ Changes from Ron Guilmette:
+ * dwarfout.c (lookup_filename): Only increment valid_ft_entries
+ once when adding a filename to the table.
+ (output_symbol): Do output DIEs for a global VAR_DECL definition.
+
+Thu Aug 29 06:15:32 1991 Michael Tiemann (tiemann at rtl.cygnus.com)
+
+ * cplus-type2.c (build_functional_cast): If we have a valid value in
+ `expr_as_conversion' return that before returning error_mark_node.
+
+ * cplus-init.c (expand_recursive_init): Fix typo is testing
+ TYPE_USES_VIRTUAL_BASECLASSES.
+
+Wed Aug 28 23:12:35 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_binary_op_nodefault): For shift and rotate ops,
+ if traditional, use the common type of the operands.
+
+Wed Aug 28 07:31:33 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * dwarfout.c, dwarf.h, README.DWARF: Replacement files from Ron
+ Guilmette that bring the dwarf implementation up to that defined by
+ draft 4 of the dwarf specification (dated 7/31/91).
+
+Wed Aug 28 06:24:30 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * all *.md files except a29k.md and romp.md: Don't allow CONST_INT
+ as operand for RTL operations that need a mode to be well-defined,
+ e.g., SIGN_EXTEND, ZERO_EXTEND, TRUNCATE, FLOAT. Similarly, don't
+ allow CONST_INT as first operand of a COMPARE.
+
+ * machmode.h (MIN, MAX): Undefine these before our definition.
+
+Tue Aug 27 21:33:04 1991 Michael Tiemann (tiemann at pogo.gnu.ai.mit.edu)
+
+ * version.c: Now 1.95.
+
+Tue Aug 27 18:05:25 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * reload1.c (possible_group_p): Use earliest class that needs a group.
+
+ * gcc.c (do_spec_1): Handle %x and %X.
+ (link_command_spec): Use %X. If given -collect, pass -c.
+ (default_compilers c++): Use %x to pass -c to linker.
+
+ * cse.c (find_comparison_code): Don't call fold_rtx,
+ because we don't know which insn to pass for its second argument.
+
+ * cse.c (fold_rtx): Don't fold what we get from lookup_as_function.
+
+Tue Aug 27 17:46:59 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (rtx_cost): A USE is free; it is likely being used as a marker.
+
+ * cse.c (cse_insn): If we decided not to make a reg-reg copy between
+ equivalent regs into a no-op, see if there is an equivalent constant
+ that is cheaper than the register we decided to use.
+
+ * cse.c (cse_insn): Fix arg in insert_regs call when making a
+ secondary equivalence due to a SUBREG; we are not modifying the
+ register.
+
+ * cse.c (delete_dead_from_cse): Treat a SET that copies a register
+ to itself as if it were setting a dead register.
+
+ * cse.c (find_comparison_args): Call fold_rtx on the args that we
+ are about to return.
+ (fold_rtx, case SUBREG): Copy code from equiv_constant that looks up
+ a SUBREG in the hash table.
+ If our our folded operand is equivalent to a constant, use that when
+ seeing if we can get a part of a constant.
+ (fold_rtx): Don't short-circuit recursive call for an operand that
+ is a SUBREG; add comment in REG case that we are doing equiv_constant.
+ When looking for associative operation, call fold_rtx on potential
+ constant as well as equiv_constant.
+ (equiv_constant): Just look up a constant quantity for a register;
+ fold_rtx will do the SUBREG operations.
+
+ * fold-const.c ({neg,mul,lshift,rshift,lrotate,rrotate}_double):
+ No longer static.
+ * cse.c (simplify_{unary,binary}_operation): Fold some DImode
+ operations.
+
+ * fold-const.c (fold, case EQ_EXPR, NE_EXPR, ...): Add code to handle
+ cases where we are comparing the result of a comparison.
+
+Tue Aug 27 14:35:59 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * flow.c (mark_used_regs): Set regs_ever_live for all hard regs.
+ Warning: this might break FUNCTION_PROLOGUE and FUNCTION_EPILOGUE
+ in some ports. But I've checked all the installed ones.
+ * tm-gmicro.h (FUNCTION_PROLOGUE):
+ Clear bit for fp reg if used as such.
+ * tm-mips.h (MUST_SAVE_REGISTER): Only frame_pointer_needed affects fp.
+
+ * c-decl.c (store_parm_decls): No error if arglist contains type tag.
+
+ * optabs.c (expand_fix): Really call emit_cmp_insn right.
+
+ * floatlib.c: New file.
+
+ * gnulib2.c (__clz_tab): Moved to _udivdi3.
+
+Tue Aug 27 06:44:12 1991 Michael Tiemann (tiemann at rtl.cygnus.com)
+
+ * cplus-typeck.c (c_expand_return): Don't use the cleanup generated
+ by `build_functional_cast'.
+
+ * cplus-class.c (resolves_to_fixed_type_p): Handle WITH_CLEANUP_EXPR.
+
+Mon Aug 26 20:55:58 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-parse.y (yylex): Cast shorts[n] to long before shifting.
+ * fold-const.c (decode): Likewise.
+
+ * Makefile.in (INSTALL_DATA): Renamed from INSTALL_FILE.
+
+ * cse.c (canon_hash): Don't crash if subexpression is 0.
+
+ * cplus-lex.c (interface_strcmp): Put back variable s1.
+
+Mon Aug 26 18:14:33 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * function.c (instantiate_virtual_regs_1): Complete previous change;
+ had omitted arg on two returns.
+
+Mon Aug 26 15:16:39 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * optabs.c (expand_float, expand_fix): Pass new arg to emit_cmp_insn.
+
+ * out-m68k.c (singlemove_string): Fix last change.
+
+Mon Aug 26 11:20:51 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md (cmpsi insn): Don't provide an insn that compares two
+ constants.
+
+Mon Aug 26 08:34:48 1991 Michael Meissner (meissner at osf.org)
+
+ * collect-osf.c (toplevel, read_file, end_file): Don't use mmap,
+ unless all defines needed are defined.
+ (various): If -debug turn on debugging code. Change all occurances
+ of #ifdef DEBUG sections to if (debug).
+ (main, add_to_list): Correctly cast xcalloc calls.
+ (scan_prog_file): Correct xcalloc to allocate enough space
+ (scan_prog_file): If -debug, don't dump entire symbol table, just
+ dump the constructors and destructors.
+
+ * make-decrose (CFLAGS): Use DEB_OPT for default debug and optimize
+ options, use SHLIB for default shared library versions.
+ (DEB_OPT): Define to be -g -O2.
+ (SHLIB): Define to be -L${BUILD}/usr/ccs/lib, which forces static
+ libraries with both old and new 1.39 compilers.
+ (COFF_CFLAGS): Define to be -O2 -g0.
+ (collect): Add LIBDEPS dependency.
+
+Mon Aug 26 07:22:21 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * machmode.h (MIN, MAX): Define here.
+ * c-decl.c, calls.c, cplus-class.c, cplus-decl.c, cplus-tree.c:
+ Don't define here.
+ * expr.c, fold-const.c, function.c, integrate.c, recog.c: Likewise.
+ * rtl.c, sdbout.c, stmt.c, stor-layout.c, varasm.c: Likewise.
+ * c-typek.c, combine.c, cse.c, emit-rtl.c, expmed.c, final.c:
+ Delete definitions of "min" and "max"; use MIN and MAX now defined
+ in machmode.h.
+ * genemit.c, regclass.c, reload.c, reload1.c: Likewise.
+ * cccp.c (MIN, MAX): Define instead of min and max for consistency.
+
+ * tm-rs6000.h (HARD_REGNO_MODE_OK): Don't put DImode in reg 31;
+ similarly for TImode.
+
+ * cse.c (cse_skip_to_next_block): Variable deleted.
+ (cse_insn): Don't set it anymore.
+ (cse_basic_block): Don't use cse_skip_to_next_block; instead, look
+ for unconditional jumps explicitly; correctly handle unconditional
+ jumps to the end of the basic block by extending the basic block in
+ that case.
+
+ * reload1.c (alter_reg): Ensure that stack slot is always the correct
+ mode.
+
+Mon Aug 26 06:20:43 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-type2.c (build_functional_cast): Treat constructor casts as
+ having cleanups in this function.
+ * cplus-decl.c (finish_decl): Use cleanups created by functinal
+ casts used as initializers.
+
+ * cplus-init.c (expand_member_init): Call error with
+ IDENTIFIER_POINTER, not DECL_NAME, of NAME.
+
+ * cplus-method.c (fndecl_as_string): Don't skip `in_charge'
+ parameter twice.
+
+ * cplus-init.c (build_new): Delete code which short-circuited
+ multiple indirections in ABSDCL and made everything look like just a
+ single level of indirection.
+
+ * cplus-typeck.c (warn_for_assignment): Now takes a FUNCTION_DECL
+ instead of an IDENTIFIER_NODE as an argument. Also, print
+ reasonable message when ARGNUM < 0.
+
+ * cplus-typeck.c (type_unknown_p): If TREE_CODE (EXP) == TREE_LIST,
+ it's type is unknown.
+
+ * cplus-typeck.c (commonparms): Don't insert default parmeter values
+ into existing arg lists. Instead, unify them into new ones only.
+
+ * cplus-typeck.c (convert_for_{initialization,assignment}): Pass
+ FNDECL instead of function name. Use `lang_printable_name' to pass
+ printable name to `warn_for_assignment'.
+
+ * cplus-typeck.c (convert_arguments): Don't forcibly convert ptrs to
+ other things into ptrs to functions just to satisfy the conversion
+ of virtual functions.
+
+Sun Aug 25 22:44:57 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-typeck.c (compparms): Deal with STRICT == 3.
+ * cplus-search.c (get_first_matching_virtual): Call `compparms' with
+ STRICT == 3.
+
+ * cplus-lex.c (operator_name_string): Don't abort if we cannot find
+ a operator name for NAME. Instead, return identifier for
+ <invalid operator>.
+
+Sun Aug 25 15:42:59 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * cplus-xref.c (FILE_NAME_ABSOLUTE_P): New macro.
+ (GNU_xref_file): Use it.
+ (open_xref_file): Use new macro XREF_FILE_NAME if defined.
+ * cplus-lex.c (FILE_NAME_NONDIRECTORY): New macro.
+ Used frequently instead of strrchr.
+ * xm-vms.h: Define those three macros.
+
+ * optabs.c (expand_binop): Use word mode for force_reg on op1 of shift.
+
+ * out-m68k.c (singlemove_string): Use moveq when appropriate.
+
+ * final.c (split_double): Handle all integer constants.
+ * out-m68k.c (output_move_double): Use split_double for all constants.
+ * ??? Most out-*.c need changing.
+
+ * c-decl.c (finish_enum): Make some local vars unsigned.
+ * c-common.c (type_for_size):
+ * c-convert.c (convert_to_integer):
+ * tm-i860.h (ASM_OUTPUT_ASCII):
+ * c-parse.y (yylex):
+ * expr.c (get_pointer_alignment):
+ * stor-layout.c (layout_union, layout_record):
+ * tree.c (get_unwidened, get_narrower):
+
+ * expr.c (emit_library_call): Don't declare va_list as register.
+ * final.c (asm_fprintf): Likewise.
+ * tree.c (build, build_nt, build_parse_node): Likewise.
+
+ * expr.c (do_jump_for_compare): Don't assume the compare survives
+ when the branch is emitted.
+
+ * expr.c (convert_move): Fix typo in prev change.
+
+ * emit-rtl.c (fconst2_rtx, dconst2_rtx): New vars.
+ (init_emit_once): Initialize them.
+
+ * expmed.c (extract_bit_field, store_bit_field):
+ For multi-word field, do words from least significant first.
+
+ (extract_split_bit_field): OP0 is only the first word of the
+ source, so if this is a SUBREG, must call operand_subword on
+ SUBREG_REG (OP0) instead of OP0.
+
+ * varasm.c (output_constructor): Correctly output constants for
+ bitfields which are greater than HOST_BITS_PER_INT. Use
+ TREE_INT_CST_HIGH for the high bits.
+
+ * Makefile.in (ENQUIRE_CFLAGS, ENQUIRE_LDFLAGS): New parameters.
+ (enquire, enquire.o): Use them.
+
+ * tm-sysv4.h: New file, cut out from tm-m88k.h.
+ * tm-m88k.h: Include that.
+
+ * vax.md (sltu, sgeu): New patterns.
+
+Sat Aug 24 11:19:43 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-init.c (build_offset_ref): Pass a TYPE_DECL node, not a
+ RECORD_TYPE node, to `build_component_type_expr'.
+
+ * cplus-cvt.c (convert_to_integer): Warn about conversion from
+ integral type to enumeral type if FLAG_INT_ENUM_EQUIVALENCE is zero.
+ (convert_force): Set FLAG_INT_ENUM_EQUIVALENCE non-zero when calling
+ `convert'.
+
+ * cplus-typeck.c (build_x_*_op): Don't try using built-in operators
+ if user-defined ones are not accessible.
+
+ * cplus-init.c (expand_aggr_init_1): Use `expand_expr' to set the
+ DECL_RTL of the TARGET_EXPR. This is a generalization of code that
+ used to require that EXP be some sort of _DECL.
+
+ * cplus-init.c (init_init_processing): Link global runtime functions
+ __builtin_new and __builtin_delete to their canonical operator
+ names (i.e., op$nw and op$dl).
+
+ * cplus-lex.c (init_lex): Don't see `dynamic' as a reserved word if
+ SOS is not defined.
+ * cplus-decl2.c (flag_dynamic): Delete unused variable.
+
+ * cplus-decl.c (define_case_label): Give error when case label cuts
+ into a binding contour with cleanups.
+ * stmt.c (last_cleanup_this_contour): Changed name from
+ `this_contour_has_cleanups_p'. Now returns last cleanup, if there
+ was one.
+ * tree.h: Declare `last_cleanup_this_contour'.
+
+ * cplus-decl.c (grokdeclarator): Don't let member functions have
+ static linkage.
+
+ * cplus-tree.c (layout_basetypes): Copy non-virtual basetypes of
+ virtual basetypes so that search routines can find ambiguities
+ arising in lattices where the same type appears as a non-virtual
+ basetype of different types in the lattice.
+ (copy_nonvirtual_children): Implement a recursive deep-copy of
+ nonvirtual types in an inheritance lattice.
+
+ * cplus-search.c (lookup_fnfields): Correctly catch case where there
+ are multiple functions in an MI lattice.
+ * cplus-call.c (ideal_candidate): If we find a requested function is
+ ambiguous in an MI lattice, set CP->EVIL to 1.
+ (build_method_call): If CP->EVIL is set on return from
+ `ideal_candidate', return error_mark_node.
+
+ * cplus-decl.c (lookup_name): Prefer finding typenames to overloaded
+ functions where there's a collision.
+ (pushdecl): Don't override the declaration of global functions with
+ a TYPE_DECL that has the same name. `lookup_name' now knows how to
+ find both.
+ (globalize_nested_type): Changed to look in IDENTIFIER_TYPE_VALUE
+ slot for global definitions that are not in IDENTIFIER_GLOBAL_VAL.
+ * cplus-type2.c (build_functional_cast): Deal with more ambiguities
+ and more cases where the syntactic form `NAME ( PARMS )' can have
+ meaning.
+
+Sat Aug 24 01:33:00 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * expr.c (convert_move): Make integer extension general.
+
+ * optabs.c (init_extends, gen_extend_insn): Finish and turn on.
+
+ * reload1.c (possible_group_p): Insist on regs in needed class.
+
+ * SYSCALLS.c (alloca): Declare arg as size_t.
+
+ * expr.c (store_constructor): Handle union constructor.
+
+ * final.c (split_double): long long CONST_DOUBLE now has VOIDmode.
+
+ * optabs.c (expand_binop): Fix carry propagation bugs.
+ Handle carry propagation for big-endian case.
+
+Fri Aug 23 21:29:46 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-decl.c (finish_decl): More PIC fixes. Also, don't assign
+ any storage for static member variables except when they are being
+ defined.
+
+ * cplus-init.c (build_virtual_init): Change interface to take
+ MAIN_ASSOC instead of FOR_TYPE.
+ (expand_aggr_init_1): Ditto.
+ (expand_recursive_init_1): Ditto.
+ (expand_aggr_vbase_init{_1}): Change interface to take an assoc
+ instead of a type.
+ (expand_recursive_init): Ditto.
+
+ * cplus-pt.c (uses_template_parms): Handle PARM_DECL nodes.
+
+ * cplus-search.c (get_base_assoc): Use ASSOC_MARKED instead of
+ ASSOC_BASETYPE_MARKED to mark visited nodes.
+ (lookup_field, loopup_fnfields): Use ASSOC_FIELDS_MARKED instead of
+ ASSOC_VBASE_MARKED when searching.
+ ({bfs_,un,bfs_un}marked2p): Deleted, unused.
+ (dfs_{un}mark2): Deleted, unused.
+ (dfs_unmark12): Deleted, unused.
+ (build_vbase_vtables_init): Change interface to take MAIN_ASSOC
+ instead of FOR_TYPE.
+
+Fri Aug 23 18:31:53 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * expr.c (do_store_flag): Give up if can't directly compare args.
+
+Fri Aug 23 18:00:58 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * function.c (instantiate_virtual_regs_1): Add new arg and now returns
+ int instead of void.
+ All callers changed.
+
+ * expr.c (compare_constants): Deleted.
+ (compare_from_rtx): Use simplify_relational_operation instead of
+ compare_constants; abort is not needed since
+ simplify_relational_operation will return 0 if given VOIDmode.
+
+ * cse.c (fold_rtx): Correctly compute mode of operands being
+ compared.
+
+Fri Aug 23 17:16:27 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * stmt.c (expand_end_case):
+ Avoid special cases for modes when widening.
+ Realize __builtin_classify_type reduces to int constant.
+
+ * optabs.c (emit_cmp_insn): New arg, MODE. All callers changed.
+ If both args are const_int, copy one to a reg.
+
+Fri Aug 23 15:54:21 1991 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * make-cc1.com: Fix bug where cplus-parse.y was always being passed
+ through bison, whether it needed it or not.
+
+Fri Aug 23 15:20:46 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * stmt.c (expand_end_case): Remove Aug 12 change.
+ Convert index to nominal_type for subtraction.
+
+Thu Aug 22 14:34:21 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * configure, config.gcc: Switch to all-dashes config names.
+
+ * gnulib2.c [U_udivdi3, L_muldi3]: Define __clz_tab for longlong.h.
+
+Thu Aug 22 00:28:29 1991 Torbjorn Granlund (tege at zevs)
+
+ * longlong.h: Rename BITS_PER_LONG to LONG_TYPE_SIZE.
+ * longlong.h (__ibm032__): Define count_leading_zeros and umul_ppmm.
+ * longlong.h: Define UMUL_TIME and UDIV_TIME for some CPUs.
+ * longlong.h (__sparc__ umul_ppmm): Move two insn from end to the
+ nops. (Saves two insn.)
+ * longlong.h (__sparc__ umul_ppmm): Rewrite in order to avoid
+ branch, and to permit input/output register overlap.
+ * longlong.h (__29k__): Remove duplicated udiv_qrnnd definition.
+ * longlong.h (__29k__ umul_ppmm): Split asm instructions into two
+ asm statements (gives better code if either the upper or lower
+ part of the product is unused.
+ * longlong.h: Mention UDIV_NEEDS_NORMALIZATION in description of
+ udiv_qrnnd.
+ * longlong.h (IBMR2): Add udiv_qrnnd.
+ * longlong.h (add_ssaaaa, sub_ddmmss [C default versions]): Make __x
+ `unsigned long int'.
+ * longlong.h: Add `int' after `unsigned' and `long' everywhere.
+ * longlong.h: Add ARM, i860 support.
+ * longlong.h (sparc umul_ppmm): Use __asm__, not asm.
+ * longlong.h (IBMR2 umul_ppmm): Refer to __m0 and __m1, not to m0
+ and m1 (overlap between output and input operands did not work).
+ * longlong.h: Add VAX, ROMP and HP-PA support.
+ * longlong.h: Sort the machine dependent code in alphabetical order
+ on the CPU name.
+ * longlong.h: Hack comments.
+ * longlong.h: Define BITS_PER_LONG to 32 if it's not already
+ defined.
+ * Define __BITS4 to BITS_PER_LONG / 4.
+ * Don't assume 32 bit word size in "count_leading_zeros" C macro.
+ Use __BITS4 and BITS_PER_LONG instead.
+ * longlong.h (68k): Define add_ssaaaa sub_ddmmss, and umul_ppmm
+ even for plain mc68000.
+ * longlong.h: Clean up comments.
+ * longlong.h: Don't use #elif.
+ * longlong.h: Use __asm__ instead of asm.
+ * longlong.h (sparc udiv_qrnnd): Make it to one string over several
+ lines.
+ * longlong.h: Preend __ll_ to B, highpart, and lowpart.
+ * longlong.h: Move array t in count_leading_zeros to gnulib2.c
+ Rename the array __clz_tab.
+ * longlong.h (umul_ppmm [C variant]): Make __ul...__vh
+ `unsigned int', and cast the multiplications. This way
+ compilers more easily can choose cheaper multiplication
+ instructions.
+
+Thu Aug 22 07:36:40 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * rtl.h: Declare simplify_relational_operation.
+
+ * out-m88k.c (output_file_start): Put the `gcc2_compiled.' symbol
+ in the data section. Eliminates symbol translation problems with
+ debuggers.
+
+ Changes from Ron Guilmette:
+ * toplev.c (compile_file): Use dwarfout_finish when done.
+ * final.c (output_source_line): Use dwarfout_line.
+ * dwarfout.c (dwarfout_finish): Rename from dwarfout_finalize.
+ * tm-m88k.h (ASM_OUTPUT_DWARF_LINE, ASM_FILE_END): No need for
+ dwarf specific actions.
+
+Thu Aug 22 05:29:57 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (can_combine_p): Don't combine if INSN has REG_RETVAL note.
+ (try_combine): Similarly, don't combine if I3 has REG_LIBCALL note.
+
+ * flow.c (propagate_block): Don't use variable PREV in
+ nested blocks that shadows PREV at function level.
+ If we handle this insn normally, arrange to scan any insns that
+ were inserted in front of it for making auto-inc addressing.
+
+ * integrate.c (save_for_inline_copying): Clear CONST_DOUBLE
+ memory chain.
+
+ * toplev.c (fatal_insn_not_found): Now that it is called in final.c
+ when an insn doesn't match constraints, write different error
+ message in that case.
+ * genattrtab.c (write_attr_case): Call fatal_insn_not_found instead
+ of abort when constrain_operands fails.
+
+Thu Aug 22 05:29:09 1991 Matthew Self (mself at next.com)
+
+ * rtl.c (add_dependence): Uses of RTX_UNCHANGING_P should now be
+ SCHED_GROUP_P.
+
+Thu Aug 22 00:34:20 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * recog.c (offsettable_address_p): Always pass QImode to addressp.
+
+Wed Aug 21 09:20:09 1991 Michael Meissner (meissner at osf.org)
+
+ * tm-decrose.h (LINK_SPEC): Allow -pic-none, -glue, -noshrlib
+ switches.
+ (LIB_SPEC): Add -L/usr/ccs/lib to get new 1.1 linker to use static
+ libraries instead of shared libraries, since the shared library
+ support has not yet been added.
+
+Wed Aug 21 06:18:12 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * out-rs6000.c (print_operand, case 'Y', 'Z'): Fix typo in
+ auto-inc case.
+ * rs6000.md (movti): Add missing %U in memory cases.
+
+ * tm-rs6000.h (GO_IF_LEGITIMATE_ADDRESS): Indexed addresses are not
+ valid for DImode and TImode.
+ * out-rs6000.c (indexed_mem_operand): Deleted.
+ (print_operand, case 'X'): Don't use indexed_mem_operand; check
+ ourselves instead.
+ * rs6000.md (movdi, movti): Don't check for indexed memory operands.
+
+Tue Aug 20 16:02:41 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * sdbout.c (sdbout_parms): Handle parm passed in reg and living in
+ pseudo that was optimized away.
+
+Mon Aug 19 19:10:42 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (simplify_comparision, case NEG): Can only convert
+ (-a) < C to a > C if C is zero.
+
+ * expmed.c (store_bit_field, extract_bit_field): Use WORD_MODE for
+ mode of BITS_PER_WORD to avoid conflict with other use of variable
+ named MODE.
+
+ * cse.c (cse_insn): Don't make a REG_EQUAL note whose contents
+ are a REG; the REG might have been eliminated.
+
+ * reload1.c (reload_as_needed): Pass any CLOBBERs made when reloading
+ an insn to `forget_old_reloads_1'.
+
+Mon Aug 19 12:47:46 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * configure (m88k-luna): Rename alternative appropriately.
+
+ * cse.c (simplify_relational_operation): Split out from ..._binary_...
+ (fold_rtx): Use that function for relationsals.
+ (simplify_binary_operation): Don't allow relationals.
+ * combine.c (subst, gen_binary): Use simplify_relation_operation.
+ * integrate.c (subst_constants): Likewise.
+ * jump.c (jump_optimize): Likewise.
+
+ * c-common.c (shorten_compare): Warn about unsigned >= 0.
+
+Sun Aug 18 17:29:16 1991 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * tm-vms.h (ASM_OUTPUT_EXTERNAL): Remove code to round the storage
+ size up to a multiple of 4 bytes.
+
+Sun Aug 18 15:35:27 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * dbxout.c (dbxout_parms):
+ Handle parm passed in reg and living in pseudo that was optimized away.
+
+ * function.c (init_function_start): Give decl_printable_name both args.
+
+ * expr.c (compare_from_rtx):
+ Don't change to unsigned if too wide for host int.
+ * cse.c (fold_rtx): Use mode_arg0 to simplify comparison ops.
+ Update mode_arg0 when we look at value of cc0.
+
+ * cse.c (cse_insn): Really don't record bitfield destinations
+ unless source is constant which fits.
+ But pre-truncate other constants.
+
+ * config.subr: Allow $os to be empty.
+
+ * function.c (lookup_static_chain): Check for 0 before inline function.
+
+ * config.subr (pc532, minix): New alternatives.
+
+ * configure (editing Makefile): Use cross-make.
+ * Makefile.in (install-cross): Change dep to install-gnulib.
+
+Sat Aug 17 17:18:05 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * All cplus-* files: Change the representation of the C++
+ inheritance lattice for types. There is no longer such a thing as a
+ classtype_variant. Instead, types all have their own lattices
+ accessed via their CLASSTYPE_ASSOC field.
+
+ * cplus-tree.h (lang_type): Delete fields OFFSET,
+ MAIN_CLASS_VARIANT, NEXT_CLASS_VARIANT, VIA_PUB_OR_VIRT.
+ Rename field AS_ID_LIST to ID_AS_LIST, since it's a list.
+ (CLASSTYPE_AS_ID_LIST): Renamed to CLASSTYPE_ID_AS_LIST.
+ Add field ASSOC_AS_LIST, which is a TREE_LIST whose TREE_VALUE is
+ the assoc for the type.
+ (CLASSTYPE_VIA_*, SET_CLASSTYPE_VIAS): Deleted.
+ (CLASSTYPE_OFFSET*): Deleted.
+ (CLASSTYPE_N_BASECLASSES): Now uses type's assoc. TYPE_BASETYPES
+ field is unused. Next change will make TYPE_BASETYPES hold the
+ assoc field.
+ (CLASSTYPE_VBASE_SIZE): Use slot in TYPE_LANG_SPECIFIC instead of
+ sneaking it into the TREE_TYPE field of the basetypes.
+
+ (ASSOC_TYPE): Deleted. Now use ASSOC_VALUE everywhere.
+ (ASSOC_{BASETYPE,BASETYPES}): New macros. Both are operations on
+ assocs and return assocs.
+ (CLASS_ASSOC_BASETYPE): New macro. This performs roughly the same
+ function that CLASSTYPE_BASECLASS used to, but it retains no assoc
+ info in the type it returns.
+ (ASSOC_NEXT_ASSOC): New macro used for traversing assoc chains built
+ up by search routines.
+ (ASSOC_VIA_{PUBLIC,VIRTUAL}): New macros for accessing inheritance
+ information. CLASSTYPE_VIA_{PUBLIC,VIRTUAL} no longer used.
+ (ASSOC_CID): New macro.
+
+ (DECL_ANON_UNION_ELEM): Deleted. Now anonymous union decls are
+ distinguished as FIELD_DECLs with NULL DECL_NAMEs and UNION_TYPE
+ types.
+
+ (DERIVED_FROM_P): New macro. Change calls that testing inheritance
+ relationships (get_base_type and get_base_distance) to use this macro.
+
+ * cplus-type2.c (basetype_or_else): Change interface to use/return an
+ assoc instead of a type. Change name to base_assoc_or_else.
+
+ * cplus-tree.c (build_classtype_variant): Deleted.
+ (copy_type_lang_specific): Deleted.
+ * all cplus-* files: Everything that used to use CLASSTYPE_OFFSET on
+ types now uses ASSOC_OFFSET on assocs.
+
+ * cplus-class.c (propagate_basetype_offsets): Change interface to use
+ assocs instead of types. Change name to propagate_assoc_offsets.
+ * cplus-search.c (get_base_type): Ditto; name changed to
+ get_base_assoc.
+
+ * cplus-cvt.c (convert_pointer_to): Change interface to use an assoc
+ instead of a type.
+ (convert_pointer_to_vbase): Ditto.
+ * cplus-call.c (build_field_call): Ditto.
+ * cplus-class.c (get_vfield_offset): Ditto.
+ (build_method_call): Ditto.
+ (maybe_fixup_vptrs): Ditto.
+ * cplus-search.c (get_first_matching_virtual): Ditto.
+ (get_virtuals_named_this): Ditto.
+ (tree_needs_constructor_p): Ditto.
+ (get_virtual_destructor): Ditto.
+ (tree_has_any_destructor_p): Ditto.
+ (get_baselinks): Ditto.
+ (lookup_{field,fnfields}): Ditto. Also, use ASSOC_VBASE_MARKED
+ instead of CLASSTYPE_MARKED2 to mark virtual basetypes that have
+ been visited.
+ (build_vbase_vtables_init): Ditto.
+ ({build,free}_mi_matrix): Ditto.
+ * cplus-init.c (expand_aggr_init_1): Ditto.
+ (expand_aggr_vbase_init_1): Ditto.
+ (build_virtual_init): Ditto.
+ * cplus-class.c (build_class_init_list): Rewritten to build list with
+ assoc entries instead of types. Also, use new macro
+ ASSOC_BASEINIT_MARKED instead of CLASSTYPE_MARKED6.
+ (finish_base_struct): New argument ASSOCS is the list of assocs that
+ describe the basetypes of T.
+
+ * cplus-tree.c (make_lang_type): Always initialize
+ CLASSTYPE_VBASE_SIZE to integer_zero_node. To test if a class has
+ virtual baseclasses, test CLASSTYPE_VBASECLASSES, not
+ CLASSTYPE_VBASE_SIZE.
+
+ * cplus-class.c (finish_struct): Rewritten to use assocs instead of
+ types where appropriate.
+
+ * cplus-search.c (get_base_distance): Change interface to use assocs
+ or types. Also, PATH_PTR argument is now an assoc chain, not a
+ TREE_LIST. Algorithm to find leftmost path is now more efficient.
+ (compute_visibility): Uses assoc chain instead of TREE_LIST of
+ types.
+ (recursive_bounded_basetype_p): New function.
+ (dfs_walk, dfs_* functions): Change to be called with assocs instead
+ of types.
+ (breadth_first_search, all bfs_*): Ditto.
+ cplus-tree.c (reverse_path): New function. Like nreverse, but works
+ on assoc chains.
+
+ * cplus-class.c (build_vtable, prepare_fresh_vtable,
+ modify_vtable_{entries,entry},): Change interfaces to use assocs
+ instead of types. Use macro ASSOC_VTABLE_PATH_MARKED on the assocs
+ instead of CLASSTYPE_MARKED3. Use macro ASSOC_NEW_VTABLE_MARKED on
+ the assocs instead of CLASSTYPE_MARKED4.
+
+ * cplus-dbxout.c: Now needs to know more about assocs. When assocs
+ are put in the TYPE_BASETYPEs field, it should not need to know
+ about lang_type.
+
+ * cplus-decl.c (xref_tag): Rewritten to build proper assoc lists. No
+ longer builds basetype lists.
+ (finish_function): Make `flag_no_inline' really take effect.
+
+ * cplus-tree.c (make_assoc): Changed for new assoc structure. The
+ fields in assocs are now: VALUE (pointer to TYPE that this assoc is
+ for), OFFSET (the byte offset of this basetype in the whole object),
+ VTABLE (the virtual function table that should be used to initialize
+ objects controlled by this assoc), VIRTUALS (the virtual functions
+ to use for initializing VTABLE), BASETYPES (a TREE_VEC of basetypes
+ that this assoc has, or NULL_TREE if none), NEXT_ASSOC (a temporary
+ slot used to point to the next assoc in an assoc chain),
+ VIA_{PUBLIC,VIRTUAL} bits saying whether this assoc is a basetype of
+ its parent via public or virtual inheritance.
+
+ * cplus-ptree.c (print_lang_type): Modified as necessary to cope with
+ new inheritance structure.
+
+ * cplus-search.c (get_base_type_1): This function was unused and
+ wrong. Deleted.
+
+ * cplus-tree.c (layout_basetypes): Take new arg ASSOCS. Layout the
+ basetypes my modifying the assocs, not the types.
+ (layout_vbasetypes): Ditto.
+
+ * all cplus-* files: Removed dead code, unused variables, and change
+ asserts where appropriate.
+
+ * all cplus-* files: DECL_VIRTUAL_P is no longer used as a truth test
+ for whether or not a function is virtual. Use a test for non-NULL
+ DECL_VINDEX instead.
+
+Sat Aug 17 15:16:40 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * function.h (inline_function_decl): Declare it.
+ * integrate.c: Include function.h; don't declare var here.
+
+ * rtl.h (regno_reg_rtx): Declare it.
+
+ * stmt.c (expand_end_case):
+ When filling labelvec from case range, avoid overflow in i.
+
+Fri Aug 16 23:06:37 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_binary_op_nodefault):
+ Take out warning added by recent changes.
+
+Fri Aug 16 22:00:09 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * function.c (inline_function_decl): New var.
+ (lookup_static_chain): Decl is local if context is function being
+ inlined.
+ * integrate.c: Remove partially-completed previous change.
+ (expand_inline_function): Set inline_function_decl.
+
+Fri Aug 16 21:41:10 1991 Michael Tiemann (tiemann at pogo.gnu.ai.mit.edu)
+
+ * a29k.md (insv,extv): Changed POS / SIZE to POS / 8, since high
+ order bit of BP selects half-word position for half-word ops.
+
+Fri Aug 16 18:52:35 1991 Jim Wilson (wilson at sphagnum.cygnus.com)
+
+ * combine.c (distribute_links): Only put link on new insn if the
+ insn uses the register. If first find an insn that sets the
+ register but does not otherwise use it, then drop the link.
+
+ * combine.c (distribute_links): Strip off SUBREG, ZERO_EXTRACT,
+ etc. from the destination of the set before passing it to
+ reg_mentioned_p and reg_referenced_p.
+
+Sat Aug 16 17:02:53 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-pt.c (uses_template_parms): Run loop over _EXPR nodes from
+ TREE_CODE_LENGTH-1 to 0, not from TREE_CODE_LENGTH.
+
+ * cplus-decl.c (grokfndecl): Change `==' to `=' in assignment to
+ `raises'
+ (finish_decl): If FLAG_PIC is nonzero, leave initialized data in
+ common space.
+
+Fri Aug 16 13:13:11 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * reg-stack.c (current_function_returns_real): New variable.
+ (reg_to_stack): Set it.
+ (stack_reg_life_analysis): Use it.
+ (emit_pop_insn): Return the new insn.
+ (convert_regs): Pop any stack regs live at the end of the last basic
+ block.
+
+Fri Aug 16 16:16:45 1991 Michael Tiemann (tiemann at pogo.gnu.ai.mit.edu)
+
+ * tm-sparc.h (SELECT_SECTION): Don't put relocatable values into
+ text space if generating position-independent code.
+
+Fri Aug 16 16:00:30 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * protoize.c (__flsbuf): Decl deleted; no need.
+ [ultrix]: Include string.h, not strings.h.
+
+ * function.c (instantiate_virtual_regs_1): Bug adding NEW to addr of X.
+
+Fri Aug 16 08:51:25 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case ABS_EXPR, MIN_EXPR, MAX_EXPR): Don't
+ allow TARGET to be a hard reg because evaluating the comparison
+ might clobber it.
+
+Thu Aug 15 23:38:04 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * tm-m68k.h (PRINT_OPERAND): Use asm_fprintf to print immed prefix.
+
+Thu Aug 15 23:36:12 1991 Micheal Tiemann (tiemann at pogo.gnu.ai.mit.edu)
+
+ * cplus-decl.c (finish_enum): Remove last traces of Wood's mistaken
+ changes for tag handling in C++.
+ * cplus-class.c (finish_struct): Ditto.
+
+Tue Aug 13 06:12:18 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (find_cross_jump): When avoiding CALL_INSNs, don't
+ return a CODE_LABEL as a cross-jump point; use next_real_insn instead
+ of next_nonnote_insn.
+
+ * fold-const.c (optimize_bit_field_compare, merge_component_reference):
+ Use mode_for_size to get mode for word; don't use SImode.
+ * tree.c (build_index_type, build_index_2_type): Don't use SImode;
+ get mode of SIZETYPE instead.
+
+ * optabs.c (emit_cmp_insn): Use type of int instead of SImode for
+ return from memcmp and bcmp.
+
+Mon Aug 12 17:54:55 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * stmt.c: Include recog.h.
+ * stmt.c (expand_end_bindings): Expect abort to return void.
+ (expand_end_case): Give tablejump whatever mode it wants.
+
+ * integrate.c (integrate_type): New function.
+ * c-typeck.c (build_binary_op_nodefault): Rewrite last change.
+
+ * Makefile.in (install): Indirect through INSTALL_TARGET.
+ (install-native): New name for old install target.
+ (INSTALL_TARGET): New variable.
+ * cross-make (INSTALL_TARGET): Override it.
+
+Mon Aug 12 17:25:48 1991 Michael Meissner (meissner at osf.org)
+
+ * out-mips.c (toplevel, override_options, siginfo): If the OSF/1
+ SIGINFO signal is provided, invoke siginfo handler, which prints
+ which file is being compiled, and runs ps on the compiler and it's
+ parent.
+
+ * make-decrose (CC, OLDCC): Define CC and OLDCC to be the same, so
+ that tests within Makefile.in work as expected.
+ (LIB2FUNCS_EXTRA): Put osf-main in the gnulib2 portion of the
+ library, instead of the gnulib1 portion.
+
+Mon Aug 12 16:31:47 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * explow.c (expr_size): Fix typo.
+
+Mon Aug 12 14:27:31 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * expr.c (expand_expr, case COND_EXPR): Fix typo in comment.
+ In the singleton code, don't accept a hard register as a target if
+ we are going to store into it before testing the condition because
+ that evaluation may involve a subroutine call which might clobber it.
+
+ * rtl.h (SCHED_GROUP_P): Fix typo in definition.
+
+Mon Aug 12 08:01:01 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (find_cross_jump): Look at REG_EQUIV notes in addition to
+ REG_EQUAL notes.
+ (do_cross_jump): Remove REG_EQUAL or REG_EQUIV notes present on only
+ one branch of the cross-jump so we don't get confused by them if we
+ cross-jump again.
+
+Mon Aug 12 01:44:26 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * unroll.c (unroll_loop): When naively unrolling loops, if the last
+ jump insn is an unconditional jump, and it does not jump to the loop
+ top, then it must be copied with the rest of the loop body.
+
+ * rtl.h: Clean up documentation for uses of volatil and in_struct
+ fields of an rtx.
+ * gcc.texinfo: Document macros CONST_CALL_P, LABEL_PRESERVE_P, and
+ SCHED_GROUP_P. Clean up documentation for uses of used, in_struct,
+ and unchanging fields of an rtx.
+
+ * final.c (final_scan_insn): In the ASM_OUTPUT_LOOP_ALIGN code,
+ must verify that next exists before checking whether it is a label.
+
+Sun Aug 11 16:46:17 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (cmpstrsi): Enable it. Now uses REG as output, not cc0.
+ Old cc0-output pattern remains for combining cmpstrsi & test pairs.
+
+Sun Aug 11 15:52:33 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * dbxout.c (dbxout_symbol): Handle var-length array with reference.
+
+ * c-decl.c (xref_tag): Copy default mode from unsigned_type_node.
+ * explow.c (expr_size): Get it from size_type.
+ * reload1.c (allocate_reload_reg): No need to validate mode of
+ reload_in if that value is a const_int.
+
+ * expr.c (expand_builtin): Get value mode properly, for memcmp.
+
+Sun Aug 11 15:52:33 1991 Jim Wilson (wilson at cygint.cygnus.com)
+
+ * dbxout.c (dbxout_symbol): DECL_ASSEMBLER_NAME is a tree, not a
+ character string, so call IDENTIFIER_POINTER before printing it.
+
+ * fold-const.c (fold): When converting foo++ == CONST to ++foo ==
+ CONST + INCR, the plus must have the same TREE_TYPE as the
+ postincrement, not the comparison.
+
+Sat Aug 10 22:58:01 1991 Michael Meissner (meissner at osf.org)
+
+ * mips.md (extendqihi2 define_split): Use SImode on shifts rather
+ than HImode, and turn result register into SImode as well.
+
+Sat Aug 10 21:00:59 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * calls.c (emit_call_1): New argument is_const. Set CONST_CALL_P
+ true for the call_insn if is_const is true.
+ (expand_call): Pass is_const to emit_call_1.
+ * expr.c (emit_library_call): Pass no_queue to emit_call_1.
+ Document that no_queue means that the function call is const.
+ * local-alloc.c (validate_equiv_mem): Don't invalidate memory for
+ const calls.
+ * rtl.h: Update comments describing uses of rtl unchanging and
+ in_struct bits.
+ (CONST_CALL_P): New macro. True for a call_insn if it is calling
+ a const function. Uses the unchanging bit.
+ (SCHED_GROUP_P): New macro. True for an insn if it must be
+ scheduled together with the previous insn. Uses the in_struct bit.
+ * sched.c: Rewrite to use new SCHED_GROUP_P macro insead of
+ RTX_UNCHANGING_P.
+ (sched_analyze): Rewrite to use new CONST_CALL_P macro.
+
+ * sched.c (schedule_block): Don't schedule a block with a volatile
+ or traditional asm insn. There is currently no code to correctly
+ handle dependencies for them.
+
+ * combine.c (distribute_links): Fix typo in comment.
+
+Sat Aug 10 18:42:22 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (operand_subword): Replace explicit SImode references
+ with mode for BITS_PER_WORD bits.
+
+Sat Aug 10 14:17:08 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * calls.c (expand_call): Handle ARGS_GROW_DOWNWARD.
+
+ * ns32k.md (call_value): Consistently realize function is operand 1.
+
+ * cccp.c (do_include): Get current dir from nominal_fname.
+
+ * expr.c (expand_builtin): Give cmpstr* a target in the mode it wants.
+ * optabs.c (expand_cmp_insn): Likewise.
+
+Fri Aug 9 09:59:27 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * dwarfout.c (output_symbols_for_block): Fix typo in iterating over
+ subblocks.
+
+ * make-m88k{,dgux,luna}: Eliminate m88k-trace.asm.
+ * tm-m88k.h, out-m88k.c: Make -mbig-pic a synonym for -fPIC.
+ Delete -mtrace-function.
+
+ * Makefile.in (CROSS_TOOLS): New variable.
+ (gnulib1.null, gnulib2.ready): Depend on CROSS_TOOLS.
+ (gnulib1.null): Use $(AR) $(AR_FLAGS).
+ * cross-make (CROSS_TOOLS): Define as install-cross-tools.
+
+Fri Aug 9 15:21:16 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * optabs.c (emit_cmp_insn): Expect cmpstr* to have result operand.
+ Test the sign of the result we get.
+ i386.md needs to be changed.
+
+Fri Aug 9 11:09:22 1991 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * make-cc1.com: Fix bug where the wrong program was being run to
+ generate insn-attrtab.c, and, add DEBUG option, so that images can be
+ linked to run under the debugger.
+
+Fri Aug 9 06:42:15 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * genemit.c (gen_split): Add "_fail:" label here too.
+
+ * tree.h (STRIP_NOPS): Define macro here; add CONVERT_EXPR to list
+ of operations to possibly ignore.
+ * fold-const.c (STRIP_NOPS): Not here.
+ * expr.c (strip_nops): Delete function.
+ (string_constant): Use STRIP_NOPS macro instead of strip_nops function.
+
+ * global-alloc.c (expand_preferences): New function.
+ (global_alloc): Call it.
+
+Fri Aug 9 01:19:26 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * optabs.c (emit_cmp_insn): Correct typo in spacing.
+
+ * unroll.c: Correct typo in comment. Document that unrolling a
+ loop by a multiple of the number of memory accesses is a win.
+ (unroll_loop): New variable last_loop_insn, points to the last
+ real insn in the loop, which will either be a jump or a barrier.
+ Use last_loop_insn instead of assuming that PREV_INSN (loop_end)
+ is that last real insn in the loop.
+ Standardize comments printed to loop dump file when we can't
+ unroll a loop, so that they all start with "Unrolling failure".
+ No longer assumes that the insn before the backward jump is a
+ compare unless HAVE_cc0. If not HAVE_cc0, then must copy this
+ insn, and for loop_iterations == 1 case, can not delete this insn.
+ If last_loop_insn is not a JUMP_INSN or BARRIER, then do not
+ unroll the loop.
+ (precondition_loop_p): Fail if loop_iteration_var is not live
+ before loop_start.
+ (copy_loop_body): Rewrite obsolete and misleading comment
+ concerning the splitting of address givs.
+ (back_branch_in_range_p): Correct typo in comment. No longer
+ assumes that PREV_INSN (loop_end) is the backward branch at the
+ end of the loop.
+ (fold_rtx_mult_add): Rewrite to use simplify_binary_operation.
+ (iteration_info): Fail if iteration variable is larger than
+ HOST_BITS_PER_LONG, or if it does not have an integer mode.
+ (find_splittable_givs): If an address giv was combined with
+ another address giv, then we can only split the first giv if the
+ second was actually reduced.
+ (loop_iterations): New variable last_loop_insn, use instead of
+ assuming that the last jump insn if PREV_INSN (loop_end).
+ Correct typo in comment.
+
+Thu Aug 8 17:57:41 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * Makefile.in (gnulib1.null): Use *_FOR_TARGET variables.
+ (TARGET_TOOLPREFIX): New variable.
+ (AR_FOR_TARGET, AR_FOR_TARGET_FLAGS): New variables.
+ (RANLIB_FOR_TARGET, RANLIB_TEST_FOR_TARGET): New variables.
+ * cross-make: New file.
+ * configure: Insert cross-make into Makefile.
+
+ * tm-m68k.h (LEGITIMIZE_ADDRESS): Copy address before changing it.
+ (COPY_ONCE): New macro, subroutine for LEGITIMIZE_ADDRESS.
+
+ * toplev.c (main): Accept -g with warning if not supported.
+
+ * Makefile.in (install-cross-tools): Do nothing unless have gcc-cross.
+ (gnulib2.ready): Depend on install-cross-tools.
+
+Thu Aug 8 14:34:53 1991 Ken Raeburn (raeburn at watch.com)
+
+ * expr.c (c_strlen): New function; determines strlen of string const.
+ (expand_builtin, cases BUILT_IN_STRCMP, BUILT_IN_STRCPY): Call it
+ instead of relying on TREE_STRING_LENGTH. For strcmp, optimize
+ cases where two lengths are available, if at least one of them is
+ constant.
+ (expand_builtin, case BUILT_IN_MEMCMP): If alignment test fails, and
+ function was really BUILT_IN_STRCMP, delete length parameter before
+ expanding call.
+
+ * tree.h (enum built_in_function): Added BUILT_IN_STRLEN.
+ * c-decl.c (sizet_ftype_string): New variable, for strlen prototype.
+ (init_decl_processing): Set it, and declare strlen and
+ __builtin_strlen as built-in functions. Deleted variable `decl'
+ since it was only assigned to, never read.
+ * expr.c (expand_builtin, case BUILT_IN_STRLEN): Implement it.
+
+ * cplus-decl.c (sizet_ftype_string, init_decl_processing): Copy
+ changes from c-decl.c. Also initialize const_string_type_node.
+
+Thu Aug 8 14:34:53 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-decl.c (pushdecl): Just warn if trad. extern type is temporary.
+
+Wed Aug 7 15:16:55 1991 Jim Wilson (wilson at sphagnum.cygnus.com)
+
+ * local-alloc.c (block_alloc): When converting a SCRATCH rtx to a
+ REG rtx, must clear the `used' bit.
+
+Tue Aug 6 14:17:09 1991 Jim Wilson (wilson at wombat.gnu.ai.mit.edu)
+
+ * stmt.c (expand_start_bindings): Fix typo in comment or spacing.
+ * rtlanal.c (reg_referenced_between_p): Likewise.
+ (reg_set_last): Likewise.
+ * loop.c (make_loop_jump): Likewise.
+ * longlong.h (UDIV_NEEDS_NORMALIZATION): Likewise.
+ * local-alloc.c (update_equiv_regs): Likewise.
+ * global-alloc.c (hard_reg_copy_preferences): Likewise.
+ * fixcpp: Likewise.
+ * tm-m68k.h (CONDITIONAL_REGISTER_USAGE): Likewise.
+ * combine.c (reg_significant): Likewise.
+ * calls.c (expand_call): Likewise.
+ * cplus-tree.c (build_cplus_new): Likewise.
+
+ * function.c (fixup_var_refs_insns): When emitting a move insn,
+ don't put it between a CALL_INSN and its USE insns as this will
+ break sched and reorg. Instead, put it before the USE insns.
+
+ * combine.c (subst): Convert (ior (ashift A CX) (lshift A CY)) where
+ CX+CY equals the mode size to (rotate A CX).
+
+ * out-sparc.c (emit_move_sequence): For DImode constants, can not
+ create a temporary register to hold the high part.
+ (output_scc_insn): When in a delay slot, verify that NEXT_INSN (insn)
+ really is the next insn.
+
+ * sparc.md: Fix support for DImode constants. Two new patterns
+ added, one for high:DI operators and one for lo_sum:DI operators.
+ (*extend*): Rework these patterns. Don't accept memory input
+ operands in the define_expands, as this gives better code.
+ Delete patterns for combining two loads into a load and move;
+ these are obsoleted by combiner improvements.
+ Delete define_splits for splitting these obsolete patterns.
+ (one_cmplsi2): Can not accept general_operand destinations, only
+ register destinations.
+
+ * tm-sparc.h (STACK_POINTER_OFFSET): Explain how value is derived,
+ and compute in terms of another macro.
+ (STRUCT_VALUE_OFFSET): Explain how value is derived.
+ (FIRST_PARM_OFFSET): Fix typo in comment.
+
+ * expr.c (MOVE_RATIO): Check for HAVE_movstrdi.
+ (emit_block_move): Add code to use HAVE_movstrdi if present.
+ (emit_push_insn): Likewise.
+
+ * final.c (final_scan_insn): When insn fails constraint check,
+ call fatal_insn_not_found instead of just aborting to make
+ debugging easier.
+
+ * tree.c (integer_all_onesp): Rewrite code to avoid shift by
+ HOST_BITS_PER_INT which is undefined according to ANSI. Also,
+ abort for precision values not handled, i.e. those greater than
+ twice times HOST_BITS_PER_INT.
+
+Tue Aug 6 14:05:42 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (seq,sne): Use setb/setnb mnemonics instead of setc/setnc:
+ GAS doesn't understand the latter yet.
+
+Tue Aug 6 13:01:53 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * Makefile.in (install-common): Use -d, not -f, for tooldir/bin.
+
+Tue Aug 6 10:37:02 1991 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * make-cc1.com: Replacement file. This new version can build cc1plus
+ and cc1obj in addition to cc1 (known on VMS systems as gcc-cc1plus.exe,
+ gcc-cc1obj.exe and gcc-cc1.exe respectively).
+
+Tue Aug 6 06:30:09 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (canon_hash): If a REG in an operand is equivalent to a
+ constant, hash as if we had the constant.
+ (exp_equiv_p): See if a REG and constant are equivalent.
+
+Tue Aug 6 03:59:16 1991 Ken Raeburn (raeburn at watch.com)
+
+ * cplus-tree.c (make_deep_copy): Handle PARM_DECLs.
+
+ * cplus-init.c (build_offset_ref): Use DECL_CHAIN, not TREE_CHAIN
+ when trying to determine if a function is unique.
+
+ * cplus-decl.c (start_decl): When constructing a decl tree for a
+ function template, copy last_function_parms to permanent storage,
+ and save it as the function argument list. Call build_lang_decl
+ instead of build_decl, instead of duplicating the extra work it does.
+ Set `overloaded' flag to 1. Call dont_forget_overload, so the
+ template decl won't get discarded.
+ Also deleted some commented-out code.
+
+ * cplus-pt.c (uses_template_parms, cases VAR_DECL, FUNCTION_DECL):
+ Give a warning if template parms are only used in places where they
+ can't be resolved (e.g., return types or global or fixed-class
+ variable types).
+ (tsubst): Preserve storage qualifiers on type field, and pass it to
+ layout_type if it has changed.
+ (tsubst, case TEMPLATE_TYPE_PARM): Preserve storage qualifiers.
+ (tsubst, case INTEGER_TYPE): Process min and max fields, if needed.
+ (tsubst, case FUNCTION_DECL): Process arguments and result fields.
+ (tsubst, case PARM_DECL): New branch. Handle parm list for
+ FUNCTION_DECL nodes.
+ (tsubst, case TREE_LIST): Copy TREE_PARMLIST flag from source.
+ Don't bother processing TREE_CHAIN field if it is void_type_node.
+ (tsubst, cases POINTER_TYPE, REFERENCE_TYPE): Preserve storage
+ qualifiers.
+ (tsubst, case FUNCTION_TYPE): Eliminate recursion for simple common
+ cases for values and context fields. Preserve storage qualifiers.
+ (tsubst, default case): Print node type of correct variable in error
+ message.
+ (instantiate_template): Set function_maybepermanent_obstack to
+ permanent, along with the others, and restore old value after tsubst
+ call. This permits the PARM_DECL case to work.
+
+Mon Aug 5 22:44:51 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-tree.h (struct pending_inline): Add new field `deja_vu' to
+ mark if this pending_inline has already been seen.
+ * cplus-lex.c (do_pending_inlines): Set DEJA_VU when seen.
+ * cplus-lex.c (reinit_parse_for_method, cons_up_default_function):
+ Initialize DEJA_VU to 0.
+ * cplus-decl2.c (mark_inline_for_output): Don't add DECL to
+ PENDING_INLINES if it's already been seen.
+ * cplus-pt.c (instantiate_template): Initialize DEJA_VU to 0.
+
+ * cplus-method.c (do_inline_function_hair): Change some assignments
+ to asserts, since they seem to be copying values that are already
+ there.
+
+Mon Aug 5 22:23:34 1991 Michael Meissner (meissner at osf.org)
+
+ * genemit.c (gen_expand, main): Change FAIL macro to be a simple
+ goto _fail, and initialize the return value to 0 in the prologue.
+ This avoids a useless warning message that the MIPS C compiler
+ gives if a return is encountered inside of a do { ... } while (0).
+
+Mon Aug 5 21:28:06 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * cplus-xref.c (GNU_xref_file): Treat VMS like USG.
+
+ * optabs.c (expand_binop): In libcall, use actual mode of op1.
+
+ * c-typeck.c (build_binary_op_nodefault):
+ In signed versus unsigned compare warning, note promotions of unsigned.
+
+ * c-parse.y (simple_if): Allow error instead of lineno_labeled_stmt.
+ (if_prefix): New subroutine of simple_if.
+
+ * gnulib2.c (__ashldi3, __ashrdi3, __lshldi3, __lshrdi3):
+ Accept second arg as int, not long long.
+
+Sun Aug 4 22:31:53 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-except.c (cplus_expand_start_except): Set up variables
+ `current_exception_name_as_rtx' and `current_exception_parms_as_rtx'.
+ These variables are used to factor out calls to `expand_assignment'
+ and allow instead calls to `emit_move_insn', which takes about 1/2x
+ the compilation time when called directly.
+ (various places): Use `store_expr' instead of `expand_assignment'
+ when reasonable.
+ (cplus_expand_reraise): Take advantage of above changes.
+ (setup_exception_throw_decl): This is where *_as_rtx variables are
+ initialized.
+
+ * cplus-input.c (getch): Rewritten slightly to help GNU C optimizer.
+ * cplus-lex.c (yylex): In IDENTIFIER case, pre-test condition that
+ `getch' tests, and call `getc' directly when possible. This cuts
+ calls to `getch' by a factor of 4 for typical C++.
+
+ * cplus-class.c (add_virtual_function): Memoize the first 256
+ virtual function table index nodes (0x80000001, 0x80000002, etc.).
+ (finish_struct): Use `size_int' instead of `build_int_2' when we
+ know the int will not be changed in place (such as the size value of
+ virtual function tables).
+ * cplus-decl2.c (finish_table): Same change as for `finish_struct'.
+ * cplus-tree.c (layout_basetypes): Same change.
+ * cplus-decl.c (init_decl_processing): Use `size_int' to initialize
+ `size_zero_node' and `size_one_node'.
+
+ * cplus-tree.h (TREE_OVERLOADS_ARROW): Define this.
+ * cplus-parse.y (operator_name): Set TREE_OVERLOADS_ARROW where
+ appropriate.
+ * cplus-type2.c (build_x_arrow): Use TREE_OVERLOADS_ARROW and
+ reorganize the logic for better speed.
+ * cplus-ptree.c (print_lang_type): Print when TREE_OVERLOADS_ARROW.
+
+Sun Aug 4 16:44:54 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rtlanal.c (reg_referenced_p): Properly handle ASM_OPERANDS.
+
+ * cse.c (cse_insn): When recording this_insn_cc0, build a COMPARE
+ rtl if SRC is a floating-point value.
+
+Sun Aug 4 16:16:11 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * fold-const.c (fold): Don't compute shift with negative count.
+ * cse.c (simplify_binary_operation): Likewise.
+
+Sat Aug 3 15:57:55 1991 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * tm-vms.h (ASM_OUTPUT_EXTERNAL): Modify to always write the
+ correct size of the data object, if it is known.
+ (ASM_OUTPUT_COMMON): Modify to select the const or the data section
+ as appropriate. This definition shadows a definition in tm-vax.h
+ (const_section): Change data type to void.
+
+Sat Aug 3 15:02:40 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * integrate.c (save_for_inline_copying): Clear constant pool after
+ saving constants into the insns.
+
+ * expr.c (expand_builtin, case BUILT_IN_MEMCPY): Ensure items
+ passed to emit_block_move are valid MEMs.
+
+ * recog.c (offsettable_address_p): Don't change INTVAL of a CONST_INT
+ within an address; that CONST_INT is likely shared and may be used
+ elsewhere in the address.
+
+ * stmt.c (expand_end_stmt_expr): Don't try to copy result to
+ REG; it might be BLKmode.
+
+ * reload.c (MATCHES): Don't consider two things equal if they have
+ side effects.
+
+ * combine.c (try_combine): When replacing SET_DEST inside a PARALLEL,
+ don't replace it with something that has a side effect.
+
+Sat Aug 3 13:17:53 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-decl.c (init_decl_processing):
+ If traditional, omit builtins with names that don't start with _.
+ Also omit if not optimizing.
+
+ * Makefile.in (combine.o, emit-rtl.o, expr.o, final.o, tree.o):
+ Depend on gvarargs.h.
+
+Fri Aug 2 11:00:10 1991 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ Merge some VMS changes from 1.39 that did not make it to 2.0.
+ These changes will prohibit GCC from addressing external symbols with
+ indirect addressing modes, to be compatible with sharable
+ image libraries under VMS.
+
+ * tm-vms.h: Define NO_EXTERNAL_INDIRECT_ADDRESS, define
+ ENCODE_SEGMENT_INFO to make use of hook in varasm.c
+
+ * tm-vax.h: Provide alternative definitions of INDIRECTABLE_CONSTANT_P,
+ INDIRECTABLE_CONSTANT_ADDRESS_P, and INDIRECTABLE_ADDRESS_P, which
+ are used when NO_EXTERNAL_INDIRECT_ADDRESS is defined. Also, define
+ INDIRECTABLE_CONSTANT_ADDRESS_P. Modify definitions of
+ GO_IF_NONINDEXED_ADDRESS, and GO_IF_LEGITIMATE_ADDRESS to work with
+ either alternative.
+
+Fri Aug 2 21:54:55 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * loop.c (check_dbra_loop): Fix typo in arg to single_set.
+
+ * reload1.c (choose_reload_regs): Verify that all registers in a
+ group still contain the desired value.
+ (emit_reload_insns): Set reg_reloaded_contents and reg_reloaded_insn
+ for all registers in a group.
+
+ * combine.c (set_significant): Handle a complex SET_DEST correctly.
+
+Fri Aug 2 17:12:24 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * tree.c (build_array_type): Make pointer type before array type.
+
+ * Makefile.in (install-common): Never install gcc if gcc-cross exists.
+
+Fri Aug 2 14:58:42 1991 Michael Meissner (meissner at osf.org)
+
+ * make-mips (CC, OLDCC): Comment why we need to define CC and OLDCC
+ to get around fixed size table complaints in the MIPS compiler.
+
+Fri Aug 2 14:08:01 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * configure (writing VPATH definition): Avoid temp file.
+
+ * tm-i860.h (MAX_PARM_BOUNDARY): Defined.
+ (GO_IF_LEGITIMATE_ADDRESS): Add parens around & operator.
+ (ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP): Use sp, not r3 (that's fp).
+ * i860.md (movsf): Don't reload high address part if already loaded.
+ (cmplesf, cmpledf, cmpgesf, cmpgedf): Set CC_NEGATED; swap operands.
+ * out-i860.c (strict_single_insn_op_p):
+ Fix criterion for loading high half.
+ (output_load_address): #if 0 since not used.
+
+Fri Aug 2 01:46:39 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (swapdf): Don't condition on TARGET_387.
+ (bit set/complement/clear insns): Don't use if -m486.
+ (bit test insns): Don't allow a MEM operand.
+
+Thu Aug 1 19:05:31 1991 Matthew Self (mself at next.com)
+
+ * local-alloc.c (block_alloc): Record regs_live_at for last insn
+ in basic block too. Otherwise REG_UNUSED regs may overlap hard
+ regs set in the last insn of the basic block.
+
+Thu Aug 1 19:02:57 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (gen_rtx): Don't return frame_pointer_rtx (e.g.) if
+ mode is not Pmode.
+
+ * emit-rtl.c (operand_subword): Don't write explicit divide by 0;
+ some (broken) compilers give errors for it.
+
+ * m68k.md (udivhi3): One pattern had constraint of "d" with
+ const_int_operand.
+ (FPA insns): Operand 1's constraints allow memory and constants, but
+ the predicate is register_operand; change to general_operand.
+
+Thu Aug 1 13:41:47 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-lex.c (do_pending_inlines, process_next_inline): Zero out
+ the DECL_PENDING_INLINE_INFO field after processing it.
+ (store_pending_inline): Don't delay processing a virtual function,
+ since it needs to be processed in case the virtual function table is
+ needed.
+
+ * cplus-decl2.c (mark_inline_for_output): If DECL has pending inline
+ info, cause it to be processed.
+
+ * cplus-pt.c: Removed extraneous declaration of `permanent_obstack'.
+ Also, added comment for `reinit_parse_for_template'.
+
+ * cplus-typeck.c (mark_addressable): For FUNCTION_DECL case, also
+ test DECL_PENDING_INLINE_INFO.
+
+Thu Aug 1 13:26:12 1991 Michael Meissner (meissner at osf.org)
+
+ * mips-tfile.c (main): If input file is not specified, use the same
+ file for both input and output. If renaming output file and rename
+ fails, copy the file.
+ (free_multiple_pages): New function.
+
+ * tm-decrose.h (ASM_FINAL_SPEC): Add this to call mips-tfile if
+ using the MIPS assembler.
+
+ * tm-mips.h (ASM_FINAL_SPEC): Add this to call mips-tfile unless
+ using gas.
+ (TARGET_VERSION): Do not put __DATE__ in the output.
+
+ * make-mips (BISONFLAGS): Add -l to bison flags because the MIPS
+ based compilers have problems with #line.
+ (CC): Define in terms of $(OLDCC) so the USE_HOST macros work.
+ (EXTRA_PASSES): Build mips-tfile and mips-tdump.
+ (Makefile): Explicitly use sh to invoke configure.
+
+ * make-decrose (EXTRA_PASSES): Build collect.
+ (Makefile): Explicitly use sh to invoke configure.
+
+Thu Aug 1 12:22:17 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * cccp.c (directive_table, node_type): Add #include_next.
+ (do_include): Support #include_next.
+ (finclude): New arg DIRPTR. All callers changed.
+
+ * reload1.c (reload_as_needed): Check live_known before accessing
+ basic_block_head.
+
+Thu Aug 1 11:47:37 1991 Michael Meissner (meissner at osf.org)
+
+ * gcc.c (compilers): Add new spec %A, which expands ASM_FINAL_SPEC.
+ This option is added after all other arguments to the assembler. It
+ is for the MIPS port to run a cleanup program after the assembler
+ finishes, by having ASM_FINAL_SPEC be "\n mips-tfile args..."
+ (set_spec): If name is 'asm_final', set the asm_final_spec.
+ (process_command): print out asm_final_spec for -dumpspecs.
+ (do_spec_1): Expand %A to be ASM_FINAL_SPEC.
+ (validate_all_switches): look at any switches handled in
+ ASM_FINAL_SPEC.
+
+Thu Aug 1 07:42:37 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * dwarfout.c (element_list_attribute): AT_element_list is a BLOCK4.
+
+Wed Jul 31 17:42:40 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (jump_optimize): In "if (...) x = 1; else {...} if (x) ...":
+ Don't assume that SYMBOL_REFs are always non-zero.
+ Handle operations other than EQ and NE.
+ Handle conditional RETURN properly.
+
+ * out-a29k.c (print_operand, case 'e'): When writing LXn, use number
+ of last label in function.
+ (output_prolog): Fix missing arg in ADD in a29k_first_epilogue_insn.
+
+Wed Jul 31 13:41:37 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * sdbout.c (sdbout_parms): Don't crash if MEM address is a MEM.
+
+Wed Jul 31 12:36:37 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * fixincludes: New variable INCLUDES specifies input dir.
+
+ * Makefile.in (install-common): Add dummy elt to EXTRA_PASSES.
+ Fix typo in test.
+
+ * Makefile.in (install-cross-tools): Use /. in args to test -d.
+ (cccp.o, dbxout.o, c-plus-*): Added missing dependencies.
+
+ * c-common.c: Don't include rtl.h--that was unmodular.
+
+ * make-i386v (INSTALL): Define this.
+
+Wed Jul 31 07:38:12 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * Makefile.in (LIB2FUNCS_EXTRA): Extra C and assembler files for
+ gnulib2.
+ * make-m88k*: Put the assembler files in gnulib2 and eliminate use
+ of gnulib1.
+
+Tue Jul 30 20:21:41 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * stddef.h (WCHAR_T):
+ Test _WCHAR_T_, __WCHAR_T, _T_WCHAR_ and ___int_wchar_t_h.
+
+ * tm-i386isc.h (RETURN_POPS_ARGS): Caller pops the struct value addr.
+
+ * cccp.c (default_include): Search local dir, system, then standard.
+
+ * Makefile.in (USE_HOST_MALLOC, USE_HOST_OBSTACK):
+ Don't depend on which C compiler is in use.
+
+ * reload1.c (reload): Use pseudoreg to compute spill_indirect_levels.
+
+ * c-decl.c (start_function): Don't take arg types from builtin.
+ (duplicate_decls): Cancel builtin function if new arg types differ.
+ Don't take arg types from buiiltin.
+
+Tue Jul 30 18:45:39 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload.c (decompose): Don't blow up for constants; they are safe.
+
+Tue Jul 30 15:49:34 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * dbxout.c (dbxout_parms): Don't crash if MEM address is a MEM.
+
+ * Makefile.in (install-common): Don't lose if EXTRA_PASSES is empty.
+ Don't install gcc if gcc-cross exists.
+ (install-cross-tools): Fix typos.
+ Avoid doing cd -- use absolute file names.
+ (gcc-cross.o): Rule deleted.
+ (gcc-cross): Build gcc, then copy it.
+
+Tue Jul 30 15:37:25 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-init.c (build_vec_delete): Use `size_binop' when building up
+ the array end boundary.
+
+Tue Jul 30 10:03:54 1991 Michael Meissner (meissner at osf.org)
+
+ * tm-mips.h (DOLLARS_IN_IDENTIFIERS): Define to be 1.
+
+Mon Jul 29 18:56:33 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload.c (refers_to_regno_for_reload_p): New function.
+ (push_reload, find_dummy_reload, immune_p): Use
+ refers_to_regno_for_reload_p instead of refers_to_regno_p.
+
+ * cse.c (fold_rtx): Don't make shifts wider than object.
+
+Mon Jul 29 17:17:55 1991 Michael Collison (collison at osf.org)
+
+ * configure: Added entry for mmax-osfrose (Multimax with ns32k
+ running OSF/1).
+
+Mon Jul 29 14:51:32 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * Makefile.in (SYMLINK): New variable.
+ (install-cross-tools): Make symlinks if possible.
+ Otherwise, for executables, indirect to tooldir with a shell script.
+ (install-native): Install gcc-cross as bin/gcc under tooldir.
+
+ * Makefile.in (USE_HOST_ALLOCA):
+ Generate nothing if don't need separate alloca.
+ (USE_HOST_OBSTACK, USE_HOST_MALLOC): New variables.
+ (HOST_LIBS): Use them.
+ (HOST_PREFIX_1): Make a dummy file with this name,
+ for cross-compiling for a machine that needs no separate alloca, etc.
+
+ * c-parse.y (stmts): Accept either labels or unlabeled statements.
+ (lineno_labeled_stmt): New nonterminals.
+ (stmt_or_label, lineno_stmt_or_label): New nonterminals.
+ (stmts): Use lineno_stmt_or_label.
+ (stmt): Don't allow labels at this level.
+ Use lineno_labeled_stmt in place of lineno_stmt.
+
+ * cccp.c (default_include): Get rid of extra #endif.
+ Use CROSS_COMPILE, not CROSS.
+
+ * make-i386mach: New file.
+ * configure (i386-mach): Use that file.
+
+Mon Jul 29 09:10:13 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * tm-m88kluna.h (SYSTEM_INCLUDE_DIR): Define (also MACH).
+
+Sun Jul 28 16:15:39 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * cccp.c (default_include): Use SYSTEM_INCLUDE_DIR.
+ Delete special cases for MACH, UNOS.
+ * tm-i386mach.h, tm-sun3mach.h, tm-crds.h (SYSTEM_INCLUDE_DIR): Define.
+
+ * cccp.c (default_include): Use CROSS_INCLUDE_DIR if cross-compiler.
+ * Makefile.in (cccp.o): Pass a definition for CROSS_INCLUDE_DIR.
+
+ * Makefile.in (gnulib1.null): New target.
+ (install-common, install-common-headers, install-cross-tools):
+ (install-cross-rest, install-float-h-cross): New targets.
+ (install-float-h): New target.
+ (install-cross, install-headers): Use them.
+ (tooldir): New variable.
+ (EXTRA_PASSES): New variable.
+
+ * sdbout.c (plain_type_1): Don't record the size in sdb_type_size
+ unless a tag is output.
+
+ * Makefile.in (install-cross): Install specs by copying.
+ Install either gcc or gcc-cross, whichever exists.
+ (native): Remove gcc from deps.
+ (start.encap): Add gcc to deps.
+ (all.cross): Add gcc-cross to deps.
+ (gcc-cross): Like gcc rule except different output file name.
+ (gcc-cross.o): Likewise.
+
+ * Makefile.in (EXTRA_PASSES): New variable.
+ Used for machines which have extra passes to run.
+ (install-cross): Install those programs.
+ (native): Compile them.
+
+ * c-parse.y: Support `foo:' before a close brace.
+ (label): New nonterminal.
+ (stmt): Use that. Treat a label as a statement in itself.
+
+ * Makefile.in (gnulib*.portable): Rules deleted.
+ (GNULIB1, GNULIB2): Point directly at gnulib1, gnulib2.
+ (gnulib): Use GNULIB1, GNULIB2 directly both as deps
+ and to specify the input files.
+ (gnulib1.conv): Renamed from gnulib1.convert; no longer phony.
+ (gnulib*.target): Rules deleted.
+ make-hp9k320 (GNULIB1): Use gnulib1.conv.
+ (LIBCONVERT): Override.
+
+ * move-if-change: Use -f with rm and mv.
+
+ * Makefile.in (gnulib2.ready): No longer phony.
+
+Sat Jul 27 13:03:50 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * combine.c (can_combine_p): Don't use NEXT_INSN, in previous change.
+
+ * Makefile.in (class-c, objective-c): New targets.
+
+ * tm-i386.h (ASM_OUTPUT_ALIGN_CODE): Define it.
+ (ASM_OUTPUT_LOOP_ALIGN): Use ASM_OUTPUT_ALIGN_CODE.
+ * tm-i386gas.h, tm-i386vgas.h (ASM_OUTPUT_ALIGN_CODE): Override it.
+ (ASM_OUTPUT_LOOP_ALIGN): Definition deleted.
+
+ * fixincludes (memvar.h): Make two defs of CAT, one ANSI and one trad.
+
+ * expmed.c (emit_store_flag): Set ICODE only after CODE is right.
+
+Sat Jul 27 06:45:32 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * flow.c (insn_dead_p): Don't clobber NEEDED while ensuring that we
+ don't delete insns that set the frame or arg pointer.
+
+ * flow.c (flow_analysis, find_basic_blocks, propagate_block):
+ Use GET_RTX_CLASS.
+
+Fri Jul 26 08:18:08 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * sdbout.c: Use <syms.h> for USG and provide a definition of
+ T_VOID if none existed. Use ./gsyms.h for non-USG systems.
+ * gsyms.h: Renamed from syms.h.
+
+Fri Jul 26 22:47:53 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * cccp.c (macroexpand): Fix error message syntax.
+
+ * Makefile.in (gnulib2.target): Add semicolon.
+
+Fri Jul 26 18:17:36 1991 Michael Meissner (meissner at pogo.gnu.ai.mit.edu)
+
+ * make-mips (CC): Bump -Wf,-XNg option to 1500 to allow the MIPS
+ compiler to compile cc1plus.
+
+Fri Jul 26 14:42:35 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * c-parse.y (yylex): Don't use mbtowc to translate L'\0'.
+
+ * tm-m88ksvr4.h (CPP_SPEC): Specify SVR4 pre-assertions.
+
+Fri Jul 26 09:53:53 1991 Michael Meissner (meissner at pogo.gnu.ai.mit.edu)
+
+ * Makefile.in (cplus_expr.o): Add missing dependencies, so cc1plus
+ can be built without first building cc1.
+
+Fri Jul 26 07:30:51 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (can_combine_p): Can't combine if DEST is used in an
+ insn in the range (succ, i3).
+
+ * expmed.c (store_bit_field): Don't use insv if the mode of its
+ input is narrower than the width of the field.
+ (store_fixed_bit_field): Handle value with MODE_FLOAT mode.
+ (extract_bit_field): Don't use extzv/extv if its output mode is
+ narrower that width of field.
+ (extract_bit_field): Handle returning MODE_FLOAT mode.
+
+ * reorg.c (steal_delay_list_from_target): Add new arg PNEW_THREAD.
+ Instead of redirecting jump, return its target in *PNEW_THREAD.
+ (fill_slots_from_thread): Pass &NEW_THREAD to
+ steal_delay_list_from_target.
+
+Thu Jul 25 21:57:42 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * sched.c: Correct tiemann's email address.
+ (schedule_block): Note that the values of leftover REG_DEAD notes
+ are meaningless.
+ (new_insn_dead_notes): If find an instruction that both uses and
+ sets dest, then no new REG_DEAD note is needed.
+ (update_links): When handling dest of last insn, no new REG_DEAD
+ note is needed if the last insn also uses its dest.
+
+Thu Jul 25 18:15:33 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * flow.c (regno_clobbered_at_setjmp): Don't blow up if no basic blocks.
+
+Thu Jul 25 16:55:57 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * cse.c (invalidate, cse_insn): Don't use HASHREG directly.
+ (HASH): Substitute HASHREG in.
+ (HASHREG): Deleted.
+
+ * tm-i386mach.h: New file.
+ * configure (i386-mach): Use that.
+
+ * tm-i386isc.h: New file, copied from 1.40.
+
+ * i386.md (jump, indirect_jump, tablejump, return):
+ Use ASM_OUTPUT_ALIGN_CODE.
+ * tm-i386gas.h, tm-i386vgas.h (ASM_OUTPUT_LOOP_ALIGN):
+ Override the usual definition.
+
+ * rtl.h (FUNCTION_FLAGS_USES_PIC_OFFSET_TABLE): Fix typo.
+
+Thu Jul 25 16:25:52 1991 Tom Wood (wood at dg-rtp.dg.com)
+
+ * out-m88k.c (legitimize_address): Note use of addressing base.
+ (m88k_layout_frame): Establish PIC addressing base as needed.
+
+ * tm-m88kdgux.h (GPLUSPLUS_INCLUDE_DIR): Specify.
+
+Thu Jul 25 07:54:36 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * rtl.h (FUNCTION_FLAGS_USES_PIC_OFFSET_TABLE): Defined.
+
+ * integrate.c (expand_inline_function): Propagate the value of
+ FUNCTION_FLAGS_USES_PIC_OFFSET_TABLE.
+
+ * function.h (struct function): Add new field USES_PIC_OFFSET_TABLE
+ to structure. Leave it to md files to initialize this field.
+ * expr.h (current_function_uses_pic_offset_table): New declaration.
+ * function.c ({save,restore}_tree_status): Save and restore
+ CURRENT_FUNCTION_USES_PIC_OFFSET_TABLE to/from this slot.
+ * out-sparc.c (legitimize_pic_address): Set
+ CURRENT_FUNCTION_USES_PIC_OFFSET_TABLE when appropriate.
+ (finalize_pic): If the current function does not use the PIC offset
+ table, there's no need to emit the PIC prologue.
+
+Wed Jul 24 13:54:41 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * tm-m68k.h (NOTICE_UPDATE_CC):
+ Calls clear status even if value in address reg.
+
+ * tm-i386gas.h, tm-i386vgas.h (ASM_OUTPUT_ALIGN_CODE): Align with NOPs.
+
+ * i386.md (andsi3): Don't use movzbl if op1 can't support it.
+
+Wed Jul 24 07:47:59 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * cplus-decl.c (finish_decl): Don't build a cleanup for an variable
+ that is TREE_EXTERNAL.
+
+Tue Jul 23 20:48:23 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * make-mips: Delete rules for saber C.
+ * Makefile.in (STAGESTUFF, gnulib2.ready): Undo last change.
+
+ * tm-vax.h (LIB_SPEC): Supply missing close braces.
+
+Tue Jul 23 14:03:10 1991 Michael Meissner (meissner at osf.org)
+
+ * protoize.c (toplevel): If FULL_PROTOTYPES is defined, assume that
+ the system provides full prototypes, and include stdlib.h and
+ unistd.h.
+ (toplevel): If _POSIX_SOURCE is defined, wait takes a pointer to an
+ int, even if the system is otherwise BSD.
+ (toplevel): If NO_CONST_IN_SYSCALL and __STDC__ is defined, assume
+ the system takes char *'s instead of const char *'s.
+ (process_aux_info_file, edit_file): Always pass 3 arguments to open,
+ to allow the NO_CONST_IN_SYSCALL macro to properly cast the
+ arguments.
+
+ * make-decrose (ALL): Make sure Makefile is rebuilt if either
+ Makefile.in or make-decrose changes.
+ (BUILD, SYSTEM_INCLUDES, LDFLAGS): Add BUILD variable to retarget
+ which build is used.
+ (CPP_ABORT): Don't define abort=fancy_abort here, do it in
+ tm-mips.h.
+ (INSTALL): Use installbsd program, since install uses System V
+ semantics on OSF/1.
+ (LANGUAGES): Rename collect-osf to collect.
+ (CFLAGS, XCFLAGS): Make CFLAGS use standard args and use XCFLAGS to
+ add additional arguments.
+ (libdir, bindir, mandir): Define to current install values.
+ (cplus-lex.o): Work around problems with 1.39 bootstrap compiler
+ producing bad stabs for certain inlines.
+ (osf-main.c): Add a simple G++ constructor/destructor to gnulib.
+
+ * make-mips (ALL): Make Makefile depend on Makefile.in and
+ make-mips.
+ (CFLAGS, XCFLAGS): Make CFLAGS use standard args and use XCFLAGS to
+ add additional arguments.
+ (CC): Add -Wf,-XNg500 switch to compile with due to the MIPS
+ compiler having fixed size tables.
+ (SABER_*): Add rules to run saber-C.
+
+ * mips.md (movsi_ulw): Allow unaligned register->register moves,
+ which is caused by the optimizer, and generate the normal reg move
+ code. Also, turn loads from the stack into normal moves.
+ (movsi_usw): Turn stores into the stack into normal moves.
+ (call, call_value): Turn into a define_expand which takes three
+ arguments, to make Saber happier.
+
+ * tm-mips.h (abort macro): Define abort to be saber_stop if running
+ under Saber C.
+ (__PTR_TO_INT, __INT_TO_PTR): Define as casts if running on a MIPS
+ machine instead of with subtraction, in an attempt to quiet Saber C.
+ (ASM_MODIFY_SPEC): Run mips-tfile after the assembler, needs
+ corresponding gcc.c change to enable.
+
+ * tm-decrose.h (ASM_SPEC): Pass -v switch to gas as well as mips
+ assembler.
+ (ASM_MODIFY_SPEC): Run mips-tfile if -mmips-as.
+ (LINK_SPEC): Pass -v switch to linker.
+ (LIB_SPEC): Redefine as just -lc.
+ (MD_EXEC_PREFIX, MD_STARTFILE_PREFIX): Undefine, use standard
+ libdir, bindir, and mandir in Makefile now.
+ (FULL_PROTOTYPES, NO_CONST_IN_SYSCALL): Define to get protoize
+ to compile cleanly.
+
+ * osf-main.c (new file): Provide simple constructor, destructor
+ capability to be linked into gnulib.
+
+ * collect-osf.c (various): General rewrite to improve speed and
+ portability.
+
+ * Makefile.in (CPLUS_OBJS): If CPLUS_INPUT is defined to be
+ cplus-input.o, compile it separately to work around problems with
+ bootstraping when it is included in cplus-lex.c.
+ (STAGESTUFF): Use $(LANGUAGES) instead of hard coded list of
+ languages, so make-xxx file can override, and provide others.
+ (gnulib2.ready): Make gnulib2 depend on all LANGUAGES targets, so
+ that if a target needs something else built, such as mips-tfile, it
+ will be.
+ (mostlyclean): Add missing -f to rm.
+ (install-dir): Use test to see if the directory exists before trying
+ to create it, and fail if the mkdir fails.
+ (install-headers): ditto.
+ (stage?, risky-stage?): ditto.
+ (install-cross): Install collect and mips-tfile if they are present.
+
+ * mips-tfile.c (toplevel, main): Add -I file option, which renames
+ the original output file to the given file.
+
+ * cplus-lex.c (toplevel): Include <assert.h> instead of "assert.h"
+ in order to avoid problems when including cplus-input.c, which also
+ uses <assert.h>.
+
+ * cplus-pt.c (toplevel): Move include of config.h before obstack.h
+ in case config.h defines some macros obstack.h uses such as
+ __PTR_TO_INT.
+
+Tue Jul 23 13:15:43 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * xm-i386.h, xm-i860.h, xm-spur.h, xm-tahoe.h: Use __builtin_alloca.
+
+Tue Jul 23 12:26:01 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * function.c (instantiate_virtual_regs_1): Change dubious code that
+ used to assign NEW to XEXP (x, 1) regardless of whether
+ validate_change accepted it to instead set XEXP (x, 0) back to OLD.
+ I.e., if the rtx is out of range and OBJECT is NULL, don't make any
+ change at all.
+
+ * out-sparc.c (compute_frame_size): If a function has any
+ stack-local objects, it's frame size is non-zero and space must be
+ reserved for the register window.
+
+ * loop.c (loop_optimize): Use get_max_uid to compute max_uid_for_loop.
+
+ * fold-const.c (size_int): Extend SIZE_TABLE's range from
+ 0..HOST_BITS_PER_INT-1 to 0..2*HOST_BITS_PER_INT.
+
+ * integrate.c (expand_inline_function): Add minor efficiency
+ hack to not free all the temp slots as parameters are passed
+ from "caller" to "callee".
+
+ * integrate.c (expand_inline_function): If the inline function
+ returns its value via a structure_value_addr, we must prepare for
+ this to take place, even if the value is ignored by the caller.
+
+ * tm-decstatn.h (SIZE_TYPE): Define this to be "unsigned int".
+
+ * emit-rtl.c (try_split): If `split_insns' actually returns a SEQ
+ which is isomorphic to PAT, return TRIAL.
+
+ * out-sparc.c (eligible_for_epilogue_delay): FP register moves are
+ only eligible for leaf-function epilogue delay slots.
+
+Tue Jul 23 11:52:50 1991 Michael Meissner (meissner at geech.gnu.ai.mit.edu)
+
+ * dbxout.c (dbxout_symbol): Correct typo in getting static member
+ names. The problem is DECL_ASSEMBLER_NAME returns a tree, and not a
+ char *.
+
+Tue Jul 23 07:10:41 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * varasm.c (immed_double_const): Use CONST_INT if MODE fits within
+ HOST_BITS_PER_INT, not BITS_PER_WORD.
+
+Mon Jul 22 21:37:03 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * fold-const.c (fold): Always preserve type after using const_binop.
+
+Mon Jul 22 18:34:55 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload): Fix typo in condition for reg_equiv_address
+ being set from reg_equiv_memory_loc; had X instead of XEXP (X, 0).
+
+Mon Jul 22 15:25:48 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * gcc.c (process_command): -xnone turns off any -x option.
+
+ * tree.c (copy_chain): Deleted.
+ * integrate.c (copy_decl_tree): Use copy_list and copy_node.
+
+Mon Jul 22 11:35:47 1991 Michael Tiemann (tiemann at pogo.gnu.ai.mit.edu)
+
+ * tree.c, tree.h: Fix typos in Jul 22 merge.
+
+Mon Jul 22 08:51:47 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (thread_jumps): Don't set CHANGED if the jump's label isn't
+ changing.
+
+Mon Jul 22 02:37:23 1991 Michael Tiemann (tiemann at pogo.gnu.ai.mit.edu)
+
+ * version.c: Bumped to 1.94 because of significant changes to
+ cplus-* files.
+
+Sun Jul 21 18:45:57 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * toplev.c (rest_of_compilation):
+ Save and restore DECL_INITIAL if we use save_for_inline_copying.
+ * integrate.c (save_for_inline_copying): Really copy DECL_INITIAL.
+ Calling integrate_decl_tree doesn't do it; deleted that call.
+ (copy_decl_tree): New function.
+
+ * integrate.c (integrate_decl_tree): Renamed from copy_decl_tree.
+ (integrate_parm_decls): Renamed from copy_parm_decls.
+
+ * tree.c (copy_chain): New function.
+
+Sun Jul 21 06:43:23 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (tstsi): Add comment noting potential -m486 enhancement.
+ (SImode push): With -m486, don't push from MEM.
+ (addsi3): Don't use lea for three operand add if -m486.
+ (ashlsi3): Don't use lea for shift of 1 if -m486.
+ (zero_extendhisi2,zero_extendqihi2,zero_extendqisi2): If dest is
+ %eax, or if -m486, AND is faster than MOVZX.
+
+Sun Jul 21 06:27:33 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expmed.c (store_fixed_bit_field): Pass actual bit position (including
+ offset) to get_best_mode; also limit mode size to BITS_PER_WORD.
+ Use failure of get_best_mode to indicate that field spans word
+ boundary.
+ Pass actual bit position to store_split_bit_field.
+ (store_split_bit_field): Accept actual bit position, hence handing
+ bitpos > BITS_PER_WORD.
+ Abort if BITPOS and BITSIZE don't cross exactly one word boundary.
+ Pass offset to store_fixed_bit_field; if register, use operand_subword;
+ else adjust offset for second word.
+ (extract_{fixed,split}_bit_field): Likewise.
+
+Sun Jul 21 06:11:55 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * All cplus-* files: DECL_VIRTUAL_P is no longer applied to
+ FUNCTION_DECLs. Instead, to test if a function is virtual or not,
+ it suffices to test whether its DECL_VINDEX is non-NULL. We use
+ ERROR_MARK_NODE as the placeholder for a FUNCTION_DECL we know will
+ be virtual, but for which we don't yet know the actual index.
+
+ * cplus-decl.c (define_function): Don't set up DECL_ASSEMBLER_NAME
+ until after having the chance to call through PFN. Since `pushdecl'
+ now keys off of DECL_ASSEMBLER_NAME, we don't want to create
+ inadvertent aliases between builtin and library functions.
+
+ * cplus-typeck.c (build_modify_expr): We don't need to build a
+ SAVE_EXPR for a WITH_CLEANUP_EXPR.
+ (unary_complex_lvalue): For good measure, know how to deal with a
+ WITH_CLEANUP_EXPR inside a SAVE_EXPR.
+
+ * cplus-pt.c (uses_template_parms): Add handler for ARRAY_TYPE.
+
+ * cplus-method.c (do_inline_function_hair): Use TYPE_METHODS instead
+ of CLASSTYPE_METHOD_VEC for traversing all methods when looking for
+ inline functions.
+
+ * cplus-class.c (finish_struct_methods): Fix fencepost error if
+ there were no member functions except for ctors/dtors.
+
+Sun Jul 21 06:19:01 1991 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * tree.h, output.h (current_function_calls_longjmp): New variable.
+ * function.c (top level): Define it.
+ (push_function_context): Save it.
+ (pop_function_context): Restore it.
+ (init_function_start): Initialize it.
+
+ * calls.c (expand_call): Set current_function_calls_longjmp if
+ this call is to `longjmp'.
+
+ * flow.c, global-alloc.c: Include output.h so that
+ FRAME_POINTER_REQUIRED can use current_function_calls_*.
+ * Makefile.in (flow.o,global-alloc.o): Includes output.h.
+
+ * rtl.h (FUNCTION_FLAGS_CALLS_LONGJMP): New macro.
+
+ * integrate.c (initialize_for_inline): Record
+ current_function_calls_lonjmp in `function_flags'.
+ (output_inline_function): Set current_function_calls_longjmp if
+ the inline code calls longjmp.
+
+ * function.h (struct function): New field `calls_longjmp'.
+
+ * out-i386.c (simple_386_epilogue): Add function description.
+ Return 0 if NON_SAVING_SETJMP && `setjmp' is called in function.
+
+ * tm-i386v.h (NON_SAVING_SETJMP): New macro.
+ (FRAME_POINTER_REQUIRED): New macro.
+
+Sat Jul 20 12:25:56 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * tm-m88k.h (OPTIMIZATION_OPTIONS): Don't change flag_signed_bitfields.
+
+ * cccp.c (include_defaults) Use LOCAL_INCLUDE_DIR macro instead
+ of "/usr/local/include". Provide default definition.
+
+ * cccp.c (include_defaults) Added INCLUDE_DEFAULTS macro to
+ provide complete control over default include directories.
+ Delete the special case for VMS.
+ * xm-vms.h (INCLUDE_DEFAULTS): Defined.
+
+ * proto-man: Renamed from proto-unproto.1.
+
+ * final.c (final_scan_insn): Do ASM_OUTPUT_LOOP_ALIGN only for real loop.
+
+Sat Jul 20 05:34:13 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
+
+ * tree.h (tree_type): Use the MAXVAL slot for TYPE_METHODS.
+ * cplus-class.c (finish_struct): Methods are now chained with
+ TREE_CHAIN and placed in the TYPE_METHODS of their _TYPE node.
+ * cplus-dbxout.c (dbxout_type_methods): Use this fact, instead of
+ using more C++-specific knowledge.
+
+ * cplus-decl.c (init_decl_processing): Variable
+ `const_ptr_type_node' was not being initialized. Same with
+ `const_string_type_node'.
+
+ * tree.h (DECL_PRINT_NAME): Marked for death.
+ (DECL_ASSEMBLER_NAME): Changed from a char* to a tree node.
+ All front-end files changed as necessary.
+
+ * cplus-tree.h (DECL_ORIGINAL_NAME): Deleted. Now we use
+ DECL_NAME.
+ (DECL_NAME): No longer means the mangled name. Now we use
+ DECL_ASSEMBLER_NAME for that purpose.
+ All cplus-* files changed as necessary.
+
+ * cplus-tree.c (lang_printable_name): Use a ring-buffer to hold
+ printable names instead of DECL_PRINT_NAME slot of a _DECL node.
+
+ * collect2.c: #define COLLECT, and let config.h provide definition
+ of macros.
+
+See file ChangeLog.3.
diff --git a/gcc/ChangeLog.5 b/gcc/ChangeLog.5
new file mode 100644
index 00000000000..c6248db5290
--- /dev/null
+++ b/gcc/ChangeLog.5
@@ -0,0 +1,8954 @@
+Sun Jun 14 16:30:07 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 2.2.2 released.
+
+ * Makefile.in (gcc.xtar.Z): Don't give up if texinfo files not updated.
+ Just sleep to emphasize the message.
+
+ * i860.h (PREFERRED_RELOAD_CLASS): Avoid f regs for HI and QI if poss.
+
+ * protoize.c: Don't include wait.h.
+ (gen_aux_info_file): Test wait_status as in gcc.c.
+ Report fatal signals explicitly. Report exit status.
+ * xm-next.h (wait): Definition deleted.
+
+ * sparc.c (print_operand): In `r' case, recognize any kind of zero.
+
+Sat Jun 13 02:51:10 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * va-sparc.h (va_arg): Handle all 8-byte types, not just double.
+
+Fri Jun 12 23:40:41 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * i860v4.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT):
+ Use `e' format, not `g' format.
+
+Fri Jun 12 12:52:48 1992 Tim Moore (moore at fast.cs.utah.edu)
+
+ * pa.md (absdf2): Fix bug in output template.
+
+Fri Jun 12 10:25:25 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * ultrix.h (WCHAR_*): Set to correct values.
+
+Fri Jun 12 10:07:43 1992 Michael Meissner (meissner@osf.org)
+
+ * x-mips, x-mipsv, x-decstatn, x-iris (OLDCC): Add -Olimit 3000 to
+ bump the number of basic blocks that the MIPS compiler handles, so
+ that it doesn't issue warning messages saying to bump the limit.
+ Move the -O1 option here from X_CFLAGS, so that it doesn't
+ get passed when bootstraping.
+ (X_CFLAGS): Delete.
+
+Thu Jun 11 15:08:01 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * sparc.h (RETURN_IN_MEMORY): Do nothing for structs and unions.
+ (EXTRA_CONSTRAINT): During reload, accept pseudo reg for Q.
+
+ * va-sparc.h (va_arg): Handle unaligned doubles.
+
+ * fixincludes: Fix return type of `free' in malloc.h.
+ Recognize #define.NULL only at start of line.
+ In sys/types.h, find size_t only in a typedef.
+ In netdnet/dnetdb.h, don't add semicolon in wrong place.
+
+ * configure: Set use_collect2 to empty rather than unsetting.
+
+ * gstddef.h (__need_wchar_t): Fix typo in #undef.
+
+Wed Jun 10 04:30:01 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (process_command): In gcc_exec_prefix, machine precedes vers.
+
+ * i386sco4.h (CPP_SPEC): Don't redefine __STDC__.
+ fixincludes knows how to fix the conditionals in system headers.
+
+ * collect2.c (scan_prog_file): Initialize ldptr.
+
+ * dbxout.c (dbxout_symbol): Make tag precede typedef.
+
+ * configure: Initialize host, host_xm_file, host_xmake_file,
+ host_broken_install, and broken_install.
+
+ * Makefile.in (enquire.o): Add `./' when removing enquire.c.
+
+Tue Jun 9 20:52:05 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 2.2.1 released.
+
+ * Makefile.in (clean): Don't delete unprotoize.c.
+
+ * configure: Fix typo in modifying INSTALL variable in Makefile.
+
+Mon Jun 8 15:14:09 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 2.2 released.
+
+ * Makefile.in (extraclean): Delete *.rej and *.orig under config.
+ Delete *.xtar.
+ (dist): Update README *before* making tar file.
+ Fix quoting of error message about gcc.texi; exit if that test fails.
+ Don't print error messages from ln.
+
+ * assert.h [__cplusplus]: Use `extern "C"' around __eprintf decl.
+
+ * configure (rs6000-*-mach*, pyramid-*-*, mips-sgi-*):
+ Patterns made canonical.
+ (rs6000-*-mach*): Fix typo in `xmake_file'.
+
+ * configure (i386-*-osfrose*): Renamed from i386-osfrose*.
+
+ * Makefile.in (.NOEXPORT): Moved after `all'.
+ Comments put on separate lines.
+
+Mon Jun 8 18:33:01 1992 Michael Meissner (meissner@osf.org)
+
+ * configure (mips-dec-osf*): Set xmake_file to x-mips.
+
+Sun Jun 7 15:55:34 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (set_spec): Fix braino in "appending" spec values.
+
+ * integrate.c (expand_inline_function): Fix dumb bug in last change.
+
+Sun Jun 7 07:16:25 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * romp.md: Disable two more define_splits during the first sched
+ pass until long-standing sched.c bug is fixed.
+
+Thu Jun 4 16:49:56 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * reorg.c (dbr_schedule): Global registers are needed at function end.
+
+Sat Jun 6 17:07:16 1992 Torbjorn Granlund (tege at david.ultra.nyu.edu)
+
+ * pyr.md (shift patterns): Declare output_shift.
+ (movdi, movdf): Declare output_move_double.
+
+Sat Jun 6 15:07:11 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (c-parse.o): Depend on c-parse.h.
+
+ * reload.c (find_reloads): Fix typo in format string.
+
+ * mips.c (override_options): BSD 4.3 does line buffering differently.
+
+ * Makefile.in (SYSCALLS.c.X): Put GCC output in file, not /dev/null.
+ (mostlyclean): Delete temp file.
+
+ * configure (handling broken_install): Add -c option.
+
+Sat Jun 6 11:34:00 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * gstdarg.h (va_arg): Fix typo incrementing AP.
+
+Sat Jun 6 16:27:18 1992 Michael Meissner (meissner@osf.org)
+
+ * mips-n5.h, mips-sysv.h: Include sys/param.h, not types.h.
+
+Fri Jun 5 19:00:36 1992 Howard Chu (hyc@hanauma.jpl.nasa.gov)
+
+ * fx2800.h (ASM_OUTPUT_FUNCTION_PREFIX): Output a nop before
+ every function, to accomodate tdescs. Also, save function
+ name in current_function_original_name for use in i860.c.
+ Also define OUTPUT_TDESC to get ABI-compliant tdesc info
+ generated for each function.
+
+ * i860.c (function_epilogue): Add code to output tdesc info
+ after each function. Tdesc structure versions 1-4 are
+ supported.
+
+ * i860v4.h (ASM_FILE_END) [OUTPUT_TDESC]: Output a null tdesc entry
+ after the last function in a file.
+
+Fri Jun 5 19:03:22 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * collect2.c (main, scan_prog_file): Use bcopy, not memcpy.
+
+Fri Jun 5 16:27:18 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h, mips.c, mips.md: Undo June 3 changes.
+
+ * mips-n5.h, mips-sysv.h (getpagesize): If _SC_PAGE_SIZE is undefined,
+ use NBPC defined in sys/types.h.
+
+Thu Jun 4 14:36:43 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cse.c (delete_dead_from_cse): Don't delete anything inside a libcall.
+
+ * Makefile.in (install-libgcc): Depend on install-dir.
+
+ * c-lex.c (yylex): Suppress int out of range warning if -traditional.
+
+Thu Jun 4 23:34:05 1992 Howard Chu (hyc@hanauma.jpl.nasa.gov)
+
+ * fx2800.h (DBX_OUTPUT_ENUM): Add missing argument, add a
+ missing semi-colon.
+ (ASM_OUTPUT_DOUBLE): undef definition from i860v4.h, replace
+ with definition used in i860.h.
+ (ASM_OUTPUT_FLOAT): same as above
+ Also undef MD_EXEC_PREFIX which is defined in i860v4.h.
+ Also define I860_STRICT_ABI_PROLOGUES for ABI-compliant function
+ prologues.
+
+Thu Jun 4 13:15:30 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * enquire.c (fake_f_rep): Use __extension__ to avoid pedantic warnings.
+
+ * cse.c (cse_process_notes): Don't stick VOIDmode into *_extract.
+
+ * c-decl.c (get_parm_info): For forward parm decls, check for
+ non-parm before checking TREE_ASM_WRITTEN.
+
+Thu Jun 4 13:57:47 1992 Tim Moore (moore at defmacro.cs.utah.edu)
+
+ * pa.h (reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS): Delete
+ FP_OR_SNAKE_FP_REGS (useless), add GENERAL_OR_FP_REGS,
+ GENERAL_OR_SNAKE_FP_REGS.
+ (ASM_DECLARE_FUNCTION_NAME): Handle DImode arguments correctly.
+ (PROFILE_BEFORE_PROLOGUE, FUNCTION_PROFILER): Do the same thing
+ for BSD and HPUX.
+
+ * pa.c (output_function_prologue): Do profiling right (compatible
+ with HPUX).
+ (output_arg_descriptor): Handle DImode argument registers.
+
+Thu Jun 4 13:48:24 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload): Count reload register used by caller-save
+ handling in any basic block that contains a CALL_INSN.
+
+Thu Jun 4 09:23:19 1992 Ron Guilmette (rfg at ncd.com)
+
+ * i860v4.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): Remove leading 0r.
+ (ASM_OUTPUT_FLOAT): Use .float (not .single).
+
+Fri Jun 5 14:58:43 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * pyr.h (REGNO_OK_FOR_{INDEX,BASE}): Correctly test reg_renumber.
+ * configure (pyramid): Turn it back on.
+
+Thu Jun 4 11:26:55 1992 Torbjorn Granlund (tege@mole.gnu.ai.mit.edu)
+
+ * pa.c (output_move_double): Handle overlapping moves between
+ registers.
+
+Wed Jun 3 22:08:18 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fold-const.c (fold, NOP_EXPR case): Don't drop intermediate in
+ (unsigned int) (unsigned short) char-variable.
+
+Wed Jun 3 11:18:43 1992 Ron Guilmette (rfg at ncd.com)
+
+ * stdarg.h (va_arg): Use casts to avoid doing (pedantically invalid)
+ arithmetic on `void *' values when __svr4__ is defined.
+
+Wed Jun 3 17:51:21 1992 Torbjorn Granlund (tege@zevs.sics.se)
+
+ * longlong.h (sparc): Test symbol __sparcv8__ for sparc.h conformance.
+
+Wed Jun 3 16:22:38 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.c (print_operand): Correct typo.
+ (sparc_type_code): Correctly handle C int and float types.
+
+ * sparc.h (CONSTANT_ALIGNMENT): Align strings to 8 byte boundary.
+ (DATA_ALIGNMENT): Likewise for character arrays.
+
+ * i960.c (function_prologue): Fixed calculation of offsets for
+ compiler's register save area.
+
+ * sparc.md (mulsi3,mulsidi3,umulsidi3,divsi3,udivsi3): Patterns
+ added to support V8 sparc architectures.
+ * sparc.h (TARGET_DEFAULTS): Add -mv8 and -msparclite options.
+
+ * reload1.c (reload): If can't satisfy reload for a group of more
+ than two registers, then abort to avoid an infinite loop.
+ (count_possible_groups): Skip to last reg of group, not first reg
+ of next group.
+
+Wed Jun 3 14:35:00 1992 Tom Wood (wood at gen-rtx)
+
+ * c-lex.c (yylex): Let skip_white_space handle \r.
+
+ * expr.c (expand_builtin, fsqrt case): Stabilize the argument in
+ case a library call is done.
+
+ * final.c (final_scan_insn): Function begin, and block begin/end
+ notes are "real" in that they depend on the current line number.
+
+Wed Jun 3 14:34:28 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.md (andsi3_internal2): Fix typo in previous change, to
+ use %3, the clobbered register, instead of %@, the assembler
+ temporary.
+ (iorsi3_internal2): Ditto.
+ (xorsi3_internal2): Ditto.
+
+ * mips.h (MIPS_VERSION): Bump Meissner version # to 20.
+ (final_prescan_insn): Add declaration.
+ (lui_int): Add declaration.
+ (FINAL_PRESCAN_INSN): Just call final_prescan_insn.
+
+ * mips.c (lui_int): New function, return true if value fits in a
+ LUI instruction.
+ (final_prescan_insn): Move the checking for filling the delay
+ slots here from the FINAL_PRESCAN_INSN macro. If the safe
+ attribute is set, we do not need a NOP to fill a load delay slot.
+
+ * mips.md (safe attribute): New attribute to indicate that the
+ current insn is safe to fill a delay slot even if the register
+ operand(s) are set in the load instruction which has the delay
+ slot. This is for and/ior/xor expansions that have a large
+ constant integer as operand[2]. The load of the constant can
+ overlap the load.
+ (andsi3, iorsi3, xorsi3): Replace logical define_insn's with
+ define_expand's that either map directly to the hardware
+ instruction, or have a clobbered register to load the large
+ constant into. This is instead of using $1 to hold the
+ intermeidate value. Set the safe attribute to yes for the cases
+ where we need to load the integer. Add define_split's to break
+ the large logical operations into the separate pieces.
+
+Wed Jun 3 00:00:36 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (do_warning): Do just a warning, not an error.
+
+Tue Jun 2 17:30:09 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cse.c (cse_basic_block): When a jump becomes unconditional,
+ check whether this caused TO to be deleted.
+
+Tue Jun 2 16:11:42 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (subst, case IF_THEN_ELSE): Don't try reversing
+ something that isn't a comparison.
+
+Tue Jun 2 16:50:47 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * cccp.c (do_pragma): Don't warn about #pragma once if used in a
+ system header file.
+
+Tue Jun 2 15:21:07 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Bump Meissner version # to 19.
+ (ASM_OUTPUT_DOUBLE): Call mips_output_double.
+ (ASM_OUTPUT_FLOAT): Call mips_output_float.
+
+ * mips.c (mips_output_double): If REAL_VALUE_TO_TARGET_DOUBLE is
+ defined, use it to split the floating point value into 2 long
+ integers, and print them out in hex. Otherwise use .double.
+ (mips_output_float): If REAL_VALUE_TO_TARGET_FLOAT is defined, use
+ it to split the floating point value into a long integer, and
+ print in out in hex. Otherwise use .float.
+
+ * dec-osf1.h (new file): Config file for DEC's offical OSF/1
+ product (as opposed to the OSF/1 reference port from OSF).
+
+ * configure: Support mips-dec-osf1 target.
+ * config.sub: Support mips-dec-osf1 target.
+
+ * decstatn.h (CPP_PREDEFINES): If CPP_PREDEFINES is defined, don't
+ supply another definition. Also, define _SYSTYPE_BSD.
+
+Mon Jun 1 00:04:01 1992 Ron Guilmette (rfg at ncd.com)
+
+ * gstdarg.h (va_list) [__svr4__]: Typedef it to `void *'.
+ * va-sparc.h (__va___list) [__svr4__]: Typedef this as `void *'.
+
+Sun May 31 15:26:32 1992 John F Carr (jfc at Achates.mit.edu)
+
+ * calls.c (stack_arg_under_construction): New variable.
+ (store_one_arg): Set stack_arg_under_construction before calling
+ expand_expr if expand_expr might call a constructor to initialize
+ a stack argument.
+ (expand_call): Push the stack around function calls if
+ stack_arg_under_construction is nonzero.
+ Also copy structure_value_addr in that case.
+ Push the stack around an inline function if it makes calls
+ and there are outgoing arguments on the stack which must be preserved.
+ Move the call to expand_cleanups_to before that.
+ Do this stack adjustment before computing argument locations.
+
+Sun May 31 01:03:51 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * sdbout.c (sdbout_symbol): Test DECL_IGNORED_P only for
+ variables and types.
+ * dwarfout.c (output_decl): Never ignore a FUNCTION_DECL
+ even if DECL_IGNORED_P is set.
+
+Sat May 30 07:07:55 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rs6000.h, romp.h (FUNCTION_ARG): Fix typo in last change.
+
+ * combine.c (subst, significant_bits, simplify_comparison):
+ Only look at STORE_FLAG_VALUE if comparison result is integer.
+
+Fri May 29 18:04:45 1992 Ron Guilmette (rfg at ncd.com)
+
+ * dwarfout.c (output_decl): Moved test for ERROR_MARK node out of
+ switch statement and added a test for DECL_IGNORED_P after that.
+ (dwarfout_file_scope_decl): Check input node to see if it is an
+ ERROR_MARK before checking for DECL_IGNORED_P. Also makes sure that
+ any node marked as DECL_IGNORED_P isn't also a function definition.
+
+Fri May 29 14:46:06 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * integrate.c (expand_inline_function):
+ Don't discard setting return value from a volatile source.
+
+ * c-decl.c (init_decl_processing): If traditional, strlen returns int.
+ (sizet_ftype_string): Deleted.
+
+ * expr.c (expand_builtin, fsqrt case): Return proper mode if arg error.
+
+Fri May 29 13:36:32 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * m88k.c (m88k_builtin_saveregs): Don't copy result to a register.
+
+ * m88k.h (FIXED_REGISTERS): Allow use of r1.
+ (REG_LEAF_ALLOC_ORDER): Choose r1 last.
+ (REG_ALLOC_ORDER): Choose r1 before any preserve register.
+ (ORDER_REGS_FOR_LOCAL_ALLOC): Switch between orderings.
+ * m88k.c (m88k_layout_frame): Save r30 when used as an ordinary
+ register.
+
+ * m88k.h (CHECK_FLOAT_VALUE): Delete, not needed.
+ * m88k.c (check_float_value): Delete, not needed.
+
+ * m88k.c (mostly_false_jump): Fix return check.
+
+ * m88k.md (mstore type): Delete.
+ (return, indirect_jump): These are jumps, not branches.
+ * m88k.c (eligible_for_epilogue_delay): No TYPE_MSTORE insns.
+
+Fri May 29 12:33:21 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload1.c (emit_reload_insns): Add missing arg to gen_input_reload.
+
+Fri May 29 06:43:15 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rs6000.h, romp.h (FUNCTION_ARG): Don't put variable-sized
+ operands in registers.
+
+ * explow.c (emit_stack_{save,restore}): Don't call validize_mem
+ on a null rtx.
+
+ * cse.c (cse_insn): Don't call canon_reg on entry from
+ hash table; instead, call it after we did the substitution.
+
+Thu May 28 18:47:00 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes (malloc.h): Allow space or tab btwn typedef and char.
+
+Thu May 28 17:35:37 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload_as_needed): Properly disable optional reload
+ that we can't do.
+ Don't abort if disabled reload uses a register we don't have.
+
+Thu May 28 14:43:01 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * next.c (get_directive_line): Declare it.
+
+ * defaults.h (ASM_OUTPUT_ASCII): Use unsigned chars.
+
+ * i860v4.h, i386v4.h, sparcv4.h (ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE):
+ Use the override definitions only if word order matches host.
+
+Wed May 27 17:32:36 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * unroll.c (find_splittable_givs): When completely unrolling loop,
+ precompute giv value into a reg before loop if it is complex.
+
+ * sparc.c (singlemove_string): Handle SFmode CONST_DOUBLE.
+ * sparc.h (PREFERRED_RELOAD_CLASS): Don't allow reloads of
+ constants to FP registers, nor reloads of FP constants that won't
+ match the 'E' constraint.
+ * sparc.md (movsf-1): Add pattern to efficiently handle SFmode
+ constants.
+
+ * sparc.md (lo_sum:DI pattern): Use constraint "0" for operand 1.
+
+ * i960.h (OVERRIDE_OPTIONS): Disable function inlining.
+
+ * function.c (assign_parms): When MAYBE_REG_PARM_STACK_SPACE,
+ don't assume that register parameters already have a stack slot.
+ * i960 (*): Change all tests of current_functions_args_size from
+ 48 to 0 due to above change.
+ * i960.md (*): Likewise.
+
+ * sparc.h (LONG_DOUBLE_TYPE_SIZE): Add ifdefed out definition.
+ (FIXED_REGISTERS): g4 is not a fixed register.
+ (RETURN_IN_MEMORY): Define.
+ (FUNCTION_ARG_PASS_BY_REFERENCE): Also pass TFmode by reference.
+
+ * fixincludes: Fix stdio.h and math.h for Ultrix 4.0.
+
+Tue May 26 15:29:21 1992 Brendan Kehoe (brendan@cs.widener.edu)
+
+ * x-we32k: new file, need alloca.o
+ * xm-we32k.h [NO_SYS_SIGLIST]: define this
+ * we32k.h [STRICT_ALIGNMENT] define as `1'
+ [NO_WAIT_H]: also define this
+ * collect2.c [NO_WAIT_H]: don't include sys/wait.h if this is
+ defined.
+
+ * Makefile.in (clean): rm libgcc1.null.
+
+Wed May 27 15:36:51 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * real.h (REAL_VALUE_TO_TARGET_SINGLE): Test HOST_BITS_PER_WORD right.
+
+ * i386sco.h (SIZE_TYPE): New definition.
+
+ * c-typeck.c (build_binary_op): When shortening, handle case
+ where op0 and arg0 are different but have same width. op1/arg1 too.
+
+ * toplev.c (compile_file): Cast xmalloc when arg to setvbuf.
+
+ * expmed.c (expand_divmod): Clear can_clobber_op0 if doing mod.
+
+ * Makefile.in (protoize.1, unprotoize.1): Delete target before mv'ing.
+ (mostlyclean): Delete tmp-unproto.1.
+
+ * sdbout.c (sdbout_symbol, sdbout_toplevel_data): Test DECL_IGNORED_P.
+ * dwarfout.c (dwarfout_file_scope_decl): Likewise.
+
+Wed May 27 13:48:36 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (ashldi3,ashrdi3,lshrdi3): Fix typo in comparison.
+
+Wed May 27 02:11:22 1992 Ron Guilmette (rfg at ncd.com)
+
+ * i386v4.h, i860v4.h, sparcv4.h: Include real.h.
+ (ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE):
+ New definitions, if host and target formats match.
+
+ * real.h (REAL_VALUE_TO_TARGET_SINGLE, REAL_VALUE_TO_TARGET_DOUBLE):
+ Defined, but only if host and target formats match.
+
+Wed May 27 06:20:26 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload_as_needed): For asm insn, check all reload
+ insns for validity.
+ (emit_reload_insns, gen_input_reload): Remove previous change that
+ checked them here.
+ * recog.c (constrain_operands, case 'm', 'o', 'g'): Accept pseudo if
+ reload is in progress.
+
+Tue May 26 19:24:21 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (combinable_i3pat): Allow a hard register as the
+ destination even if SMALL_REGISTER_CLASSES if source is a CALL.
+
+ * emit-rtl.c (gen_lowpart_common): Fix handling of int->float
+ union conversions.
+
+Tue May 26 19:23:43 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * a29k.h (HARD_REGNO_MODE_OK): Don't let anything larger than
+ UNITS_PER_WORD be allocated to an odd numbered register.
+
+Tue May 26 15:22:27 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config.sub (defaulting the OS): Separate subversions with periods.
+
+ * limits.h: Fix condition for defining long-long macros, to suit libc.
+
+ * Makefile.in (specs): New target.
+ (gcc): Don't write `specs' here.
+ (start.encap): Depend on `specs'.
+ (all.cross): Depend on EXTRA_PARTS.
+ (rest.cross): New target.
+
+ * c-common.c (declare_function_name):
+ Set TREE_USED, not TREE_NO_UNUSED_WARNING.
+
+Tue May 26 04:52:53 1992 Michael Meissner (meissner@osf.org)
+
+ * loop.c (loop_has_volatile): New static variable to record
+ whether the loop has any volatile references in it.
+ (prescan_loop): Set loop_has_volatile.
+ (check_dbra_loop): Don't reverse loop if there are any volatile
+ references in it.
+
+Mon May 25 16:04:08 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386gas.h (ASM_OUTPUT_OPCODE): Translate "repnz" to "repne".
+ * seq386gas.h (ASM_OUTPUT_OPCODE): Likewise.
+
+Mon May 25 15:53:31 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * optabs.c (emit_indirect_jump): Emit barrier here.
+ * stmt.c (expand_computed_goto): Not here.
+
+Mon May 25 06:22:59 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (canon_reg): Must call validate_change if insn has any
+ MATCH_DUPs even if replacing a pseudo with another pseudo.
+
+ * explow.c (emit_stack_{save,restore)}: Call validize_mem on save area.
+
+ * combine.c (simplify_shift_const, case PLUS): Simplify cases where
+ the PLUS is just turning on bits that will be shifted out.
+
+ * emit-rtl.c (gen_lowpart_common): Add new case for single-word
+ float->integer conversion; all others already present.
+ Check for -fpretend-float in this and the other cases.
+
+ * stmt.c (expand_goto): Fix typo in previous change.
+
+ * reload1.c (gen_input_reload): When checking for validity of
+ reloads made for asms, also check the constraints.
+
+ * explow.c (allocate_dynamic_stack_space): Don't add to size
+ if we aren't going to need to align the size.
+
+ * fold-const.c (fold, case *_DIV_EXPR): Fold (a * C1) / C2 for
+ some C1 and C2.
+
+Sun May 24 14:07:53 1992 Ron Guilmette (rfg at ncd.com)
+
+ * toplev.c (main):
+ Fix typo setting use_gdb_dbx_extensions in xcoff case.
+
+ * c-decl.c (pushdecl): Call `build_type_copy' rather than calling
+ `c_build_type_variant' to duplicate a type.
+
+Sun May 24 16:56:09 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload): Refine setting of basic_block_needs.
+
+Sun May 24 15:43:08 1992 John F Carr (jfc at Achates.mit.edu)
+
+ * combine.c (try_combine): Don't split an insn if that would move
+ a use of a register across a set of the same register.
+
+Sun May 24 14:50:38 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * reg-stack.c (constrain_asm_operands): Ignore constraint letters
+ following '#' in each alternative.
+
+Sun May 24 02:28:45 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (pexecute): New alternative definition for OS2.
+ Take SEARCH_FLAG as arg instead of FUNC.
+ (execute): Change call to pexecute.
+
+ * toplev.c (main): Don't run ps for -dm if on OS2.
+
+ * cccp.c (main): Use PATH_SEPARATOR computing num_dirs.
+ (path_include): Likewise, setting q.
+
+ * gcc.c: Include sys/file.h.
+
+ * Makefile.in (extraclean): Delete install1.texi.
+
+Sat May 23 14:14:06 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * crtstuff.c (__do_global_ctors) [not INVOKE__main]: Make body empty.
+
+ * fold-const.c (float_error): Renamed from const_binop_error.
+ (const_binop, fold_convert):
+ Call set_float_handler around REAL_VALUE_TRUNCATE.
+
+ * Makefile.in ($(srcdir)/INSTALL): New target.
+ (doc): Depend on that.
+ ($(srcdir)/gcc.info, $(srcdir)/cpp.info): Delete $(srcdir) from deps.
+ ($(srcdir)/gcc.info): List all subfiles as deps.
+
+ * math-68881.h: Use %! instead of fpcr.
+
+ * install.sh: New file.
+ * configure: Changed install_with_cp to broken_install.
+ Test that flag for the host, not for the target.
+ If set, use install.sh.
+
+ * Makefile.in (EXTRA_HEADERS): New variable.
+ (USER_H): Use that.
+ * configure: Let alternatives set EXTRA_HEADERS via var header_files.
+ (m68k-...): Set header_files to install math-68881.h.
+
+ * Makefile.in (install-dir): Create (libsubdir)/include.
+ (install-limits-h, install-float-h): Depend on install-dir.
+
+ * Makefile.in (gcc.xtar): Warn if version in gcc.texi is old.
+
+ * genconfig.c (main): Add 1 when outputting MAX_RECOG_OPERANDS.
+ Initialize to just 9.
+
+ * gcc.c (MD_STARTFILE_PREFIX_1): New config macro.
+ (main): Use that like MD_STARTFILE_PREFIX.
+
+Sat May 23 08:13:38 1992 John F Carr (jfc at Achates.mit.edu)
+
+ * reload1.c (reload): Copy MEM_IN_STRUCT_P flag when converting
+ pseudo register to equivalent memory location.
+
+Sat May 23 07:12:15 1992 Michael Meissner (meissner@osf.org)
+
+ * x-iris (OLDCC): Add -cckr to turn off strict ANSI checking.
+
+ * mips.c (current_function_name): Delete definition, function.c
+ defines this and mips.h has a declaration.
+
+ * longlong.h (mips umul_ppmm): Use "d" constraint instead of "r", so
+ that we know the value is an integer register.
+
+Sat May 23 01:14:49 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * vax.h (PRINT_OPERAND): Undo last change.
+ Fix the comment instead.
+
+ * x-dpx2200, x-dpx2300 (ALLOCA_FINISH, AS): New variables.
+
+Fri May 22 01:52:22 1992 Ron Guilmette (rfg at ncd.com)
+
+ * svr4.h (MD_EXEC_PREFIX): Added definition.
+
+ * protoize.c [POSIX]: Include dirent.h rather than sys/dir.h.
+ (_POSIX_SOURCE): Undef before defining.
+ (getpwd): Change declaration to an `extern'.
+ (open): Add declaration in the #if 0 section along with fprintf.
+ (link, unlink, access, execvp): Add `extern' declarations.
+ (strlen): Don't mention arg type in declaration.
+ (main): Declare `params' as `const char *' to avoid botch when doing
+ test-protoize-simple.
+
+Fri May 22 17:15:36 1992 John F Carr (jfc at Achates.mit.edu)
+
+ * calls.c (expand_call): Allocate stack space for arguments passed
+ in registers when OUTGOING_REG_PARM_STACK_SPACE is defined and
+ stack space has not been preallocated.
+
+Fri May 22 17:16:55 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (simplify_comparison): Try to reduce size of a
+ constant by changing comparison code; don't only do for 1 and -1.
+
+ * reload.h (reg_equiv_memory_loc): Declare.
+ * reload.c (refers_to_regno_for_reload_p): Use reg_equiv_memory_loc
+ instead of reg_equiv_mem and reg_equiv_address; look for constant.
+ (reg_overlap_mentioned_for_reload_p): LIkewise.
+ Use new function to check for MEM.
+ (refers_to_mem_for_reload_p): New function.
+ * reload1.c (reg_equiv_memory_loc): No longer static.
+
+Fri May 22 17:15:12 1992 Ron Guilmette (rfg at ncd.com)
+
+ * Makefile.in (test-protoize-simple): Only delete files made by this
+ target (not the man pages!)
+ (test-protoize-simple): Use -x option to avoid munging getopt.h.
+ (test-protoize-simple): Fixed number of differences message.
+ (mostly-clean): Properly remove all temp files relating to protoize/
+ unprotoize.
+ (install-common): Force removal of previously installed g++ and c++
+ command files before trying to install new ones.
+
+ * spc-sol2.h: New file.
+
+ * configure (sparc-*-solaris2*): New configuration added.
+
+ * x-sparcv4 (X_CFLAGS): Removed -Bstatic and -dn options.
+
+Fri May 22 15:30:05 1992 Chip Salzenberg (chip@tct.com)
+
+ * c-common.c (declare_function_name): Move from c-decl.c.
+ Construct function names instead of expecting them as parameters.
+ Set TREE_READONLY and other attributes before calling pushdecl.
+ * c-decl.c (init_decl_processing, store_parm_decls): Calls changed.
+ (declare_function_name): Remove to c-common.c.
+
+ * cp-decl.c (init_decl_processing, store_parm_decls):
+ Call declare_function_name.
+
+Fri May 22 12:15:16 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparcv4.h (ASM_OUTPUT_CASE_LABEL): Define.
+
+Fri May 22 11:40:00 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * x-dpx2200, x-dpx2300 (CFLAGS): Definition deleted.
+
+ * c-decl.c, cp-decl.c (pushdecl): No shadow warnings if DECL_IGNORED_P.
+
+ * c-decl.c (declare_function_name):
+ Change names to __FUNCTION__ and __PRETTY_FUNCTION__
+
+ * vax.h (PRINT_OPERAND): In M case, don't complement after subtract 1.
+
+ * c-lex.c (yylex): Use pedwarn for overflow warnings.
+ Pedwarn if constant doesn't fit its type.
+
+Fri May 22 13:32:39 1992 Chip Salzenberg (chip@tct.com)
+
+ * xcoffout.h (DBX_TYPE_DECL_STABS_CODE): Was DBX_DECL_STABS_CODE.
+
+Fri May 22 08:31:16 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * longlong.h (all machines): Define UMUL_TIME and UDIV_TIME.
+ Auxiliary formatting changes.
+ (header): Define __CLOBBER_CC and __AND_CLOBBER_CC.
+ (__sparc__ macros): Use them.
+ (__hppa__ add_ssaaaa,sub_ddmmss): Accept zero using `M' constraint.
+ (__hppa__ umul_ppmm): Define if _PA_RISC1_1.
+ (__mc88110__ umul_ppmm,udiv_qrnnd): New.
+ (__pyr__ umul_ppmm): Rewrite.
+ (default count_leading_zeros): Make it work for 64 bit longs.
+
+Fri May 22 06:27:31 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_insn): Invalidate a volatile destination.
+
+ * expmed.c (expand_divmod): Correctly handle volatile operands.
+
+Fri May 22 06:26:50 1992 Chip Salzenberg (chip@tct.com)
+
+ * rs6000.h (ASM_DECLARE_FUNCTION_NAME): Use new function
+ xcoffout_declare_function.
+ * rs6000.c (output_epilog): Shorten internal label.
+ (output_toc, output_function_profiler): Likewise.
+ * xcoffout.c (xcoffout_declare_function): New function, created
+ to localize knowledge of end-of-function internal label.
+ (xcoffout_end_epilogue): Shorten internal label.
+
+Thu May 21 15:31:42 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * reorg.c (relax_delay_slots): Clear INSN_FROM_TARGET_P when
+ remove insns from a delay slot.
+
+Thu May 21 13:54:15 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload.c (find_reloads):
+ Don't abort for % in last operand in asm_operands.
+
+ * alloca.c: Make symlink to master copy.
+
+ * stmt.c (expand_asm_operands): Count nclobbers properly.
+
+ * explow.c (allocate_dynamic_stack_space): Call mark_reg_pointer.
+
+ * c-parse.y (stmt, WHILE case): Start loop *after* parsing end test.
+ (do_stmt_start): Broken out from DO rule.
+ (stmt, DO case): Use that.
+ Add error-handler rule for parse error in end test.
+
+ * sparc.h (ADDITIONAL_REGISTER_NAMES): Support `cc'.
+
+ * c-lex.c (yylex): Pedwarn if `f' constant exceeds range of `float'.
+ Just once even if `f' appears twice.
+ This and the like warning for `double' are only if -pedantic.
+
+Thu May 21 08:46:30 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * Makefile.in (STAGESTUFF): Add stamp-proto.
+
+Thu May 21 04:04:33 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * svr3.h (LOCAL_LABEL_PREFIX): Override as a period.
+ (ASM_OUTPUT_INTERNAL_LABEL, ASM_GENERATE_INTERNAL_LABEL):
+ Use LOCAL_LABEL_PREFIX.
+ * dpx2.h (LOCAL_LABEL_PREFIX): Definition deleted.
+ * tower-as.h (LOCAL_LABEL_PREFIX): Override as empty.
+
+Wed May 20 23:29:15 1992 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * config-gcc.com: Take care of situation if sources are NFS mounted.
+
+Wed May 20 14:35:10 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (jump_optimize): Add additional validation check to
+ case that detects "if (foo) bar++;".
+
+Wed May 20 13:18:09 1992 Tim Moore (moore@defmacro.cs.utah.edu)
+
+ * pa.md : Changed "xy" constraints to "x" constraints.
+ (movsi+6): Let "r" registers match too. Add define_split to change
+ into 2 insns if needed.
+ (decrement_and_branch_until_zero): New pattern.
+ * pa.h (FUNCTION_ARG_PASS_BY_REFERENCE): Fix for TYPE == 0.
+ (REGISTER_MOVE_COST): Do stuff for SNAKE_FP_REGS.
+ (PRINT_OPERAND_ADDRESS): Write CONST_INT case.
+
+Wed May 20 00:04:55 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * ns32k.h (NS32K_DISPLACEMENT_P): Fix typo.
+ * ns32k.md (extzv-1): New pattern for extracting from SImode.
+
+ * c++: -M suppresses -lg++.
+
+ * svr3.h (DO_GLOBAL_CTORS_BODY): Flush spurious #endif.
+
+ * reload1.c (gen_input_reload): New arg IS_ASM. Can now return 0.
+ (emit_reload_insns): Pass new arg. Error if it returns 0.
+
+ * configure: Use $cpu_type to default $tm_file.
+
+ * configure, config.sub: Correct we32 to we32k.
+ * configure (decstation-dec): Deleted--doesn't fit as machine alias.
+ (we32k): Add company default.
+ (fx2800): This is a machine alias, not a company default.
+
+ * configure (i386-*-bsd*, we32-att-sysv*, m68k-crds-unos*):
+ Missing *'s added at ends of config names.
+
+ * c-typeck.c (convert_arguments): Use warn_for_assignment to handle
+ -Wconversion. Fix typo in width-mismatch test.
+
+ * svr3.h (ASM_GENERATE_INTERNAL_LABEL): Put a * at the front.
+
+Tue May 19 21:53:05 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (clean): Add -f in rm *.dvi.
+
+ * x-dpx2200, x-dpx2300 (CFLAGS): Make value conditional on CC.
+
+ * genattrtab.c (simplify_test_exp, evaluate_eq_attr):
+ Delete tests of current_alternative_string; they caused bugs.
+
+ * cross-test.c: New file.
+ * Makefile.in (cross-test, cross-test.o): New targets.
+ (all.cross): Depend on cross-test.
+
+ * c-decl.c (declare_function_name): Fix bug in previous change.
+
+Tue May 19 19:57:39 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * i960.h (FUNCTION_ARG_BOUNDARY): Return mode's alignment if type 0.
+
+ * calls.c (expand_call): Set MEM_IN_STRUCT_P for aggregate return
+ values in memory.
+
+ * function.c (locate_and_pad_parm): Use MAYBE_REG_PARM_STACK_SPACE
+ if defined.
+ * i960.c (i960_function_arg_advance): Put MUST_PASS_IN_STACK
+ parameters on the stack.
+ (i960_function_arg): Likewise.
+
+ * m68k.md (zero_extendqisi2+1): Add condition to exclude MEM/MEM
+ case which would require reloading.
+
+ * unroll.c: Delete incorrect Feb 26 1992 change.
+ (copy_loop_body): For combined address givs, scale giv_inc by the
+ two giv's multiplicative factors if they are different.
+
+ * i960.md (zero_extendqisi2): Add comment.
+
+ * combine.c (apply_distributive_law): Don't distribute subregs
+ which change the mode class.
+
+ * fixincludes: Fix memory.h for SunOS.
+
+ * sparc.h (EXTRA_CC_MODES, EXTRA_CC_NAMES): Add CCFPEmode, for
+ compares which should generate exceptions for qNaNs.
+ (SELECT_CC_MODE): Use CCFPEmode for non EQ/NE FP compares.
+ * sparc.c (normal_comp_operator): Handle CCFPEmode.
+ (C_MODES, output_cbranch): Likewise.
+ * sparc.md (cmpdf, cmpsf): Modify patterns to use fcmpe for CCFPE
+ mode, and fcmp for CCFP mode.
+
+ From rfg:
+ * sparc.h: Declare output_move_quad, output_fp_move_quad and
+ output_floatsitf2.
+ * sparc.c (mem_aligned_8): New function.
+ (output_move_double): Clean up a little. Call mem_aligned_8.
+ Load operands[] into register variables for efficiency.
+ (output_move_quad, output_fp_move_quad): New functions.
+ (output_floatsitf2): New function.
+ (print_operand): Support 'S' and 'T'.
+ * sparc.md (cmptf, movtf, extendsftf2, extenddftf2, trunctfsf2,
+ trunctfdf2, floatsitf2, fix_trunctfsi2, addtf3, subtf3, multf3,
+ divtf3, negtf2, abstf2, sqrttf2): New patterns added for TFmode
+ support.
+
+Tue May 19 19:34:10 1992 Ron Guilmette (rfg at ncd.com)
+
+ * i386v4.h (DBX_REGISTER_NUMBER): Fixed DWARF numbers for
+ x86 floating-point registers.
+
+Tue May 19 15:30:32 1992 Mats Lofkvist (d87-mal@nada.kth.se)
+
+ * fixincludes: Fix return type of malloc and friends.
+
+Tue May 19 13:30:16 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config.sub (iris4d): If $os is some kind of Irix, don't clobber it.
+ Make the default -irix4.
+
+ * c-decl.c (declare_function_name): New arg printable_name.
+ Declare __PRINTABLE_NAME__.
+ (init_decl_processing, store_parm_decls): Pass the new arg.
+
+Tue May 19 09:50:01 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * m88k.c (output_options): Check profile_block_flag.
+ (m88k_layout_frame): Ditto.
+ (output_function_block_profiler): Save and restore the parameter
+ registers when calling __bb_init_func.
+ (output_block_profiler): Use @LPBX2.
+
+ * m88k.h (CASE_VECTOR_INSNS): Choose a table of branch
+ instructions or addresses. The latter is a win for the m88110.
+ (ASM_OUTPUT_CASE_END): Nothing needed for table of addresses.
+ (ASM_OUTPUT_ADDR_VEC_ELT): Use "br" or "word".
+ * m88k.md (casesi, casesi_jump): Updated.
+
+ * m88k.md (m88110 function units): Count in half cycles.
+
+ * m88k.md (call insns): Clobber rather than use r1.
+
+ * m88k.c (m88k_layout_frame): Fix m88k_fp_offset for zero case.
+
+Mon May 18 10:38:20 1992 Michael Meissner (meissner@osf.org)
+
+ * iris.h (DEFAULT_SIGNED_CHAR): Define as 0 for compatibility with
+ IRIS defaults. Patch from kevin@tamri.com (Kevin Dalley).
+
+ * xm-irix4.h (HAVE_VPRINTF): Define.
+
+ * x-iris (CLIB): Add -lmalloc.
+
+ * mips.md (fp_comp functional unit): Use adder functional unit
+ instead to more closely model MIPS behavior and make genattrtab
+ faster.
+ (transfer functional unit): Use memory functional unit instead.
+ (sqrt functional unit): Use divide functional unit instead.
+ (branch_zero): If CSE has folded a value which is constant, and
+ the jump would be omitted, do not eliminate putting a jump there.
+ This causes bad code to be generated when using gas, since the
+ previous instruction may be a load which had it's delay slot
+ filled by the 'branch', and the next instruction depends on the
+ value loaded.
+
+ * mips-at.c (whole file): Delete, no longer needed.
+
+ * mips-at.md (whole file): Delete, no longer needed.
+
+ * Makefile.in (stamp-attrtab): Remove $(srcdir) in front of
+ $(PREMADE_ATTRTAB) so that MIPS builds can be done in
+ subdirectories.
+
+ * t-decrose (PREMADE_ATTRTAB*): Don't define, genattrtab is now fast
+ enough that we don't have to save a pre-made genattrtab.c.
+ (LIBGCC1): Use libgcc1.null rule to turn off building libgcc1.a.
+
+ * t-decstatn (PREMADE_ATTRTAB*): Don't define, genattrtab is now fast
+ enough that we don't have to save a pre-made genattrtab.c.
+ (LIBGCC1): Use libgcc1.null rule to turn off building libgcc1.a.
+
+ * t-mips (PREMADE_ATTRTAB*): Don't define, genattrtab is now fast
+ enough that we don't have to save a pre-made genattrtab.c.
+ (LIBGCC1): Use libgcc1.null rule to turn off building libgcc1.a.
+
+ * mips.h (ASM_OUTPUT_CONSTRUCTOR,ASM_OUTPUT_DESTRUCTOR): Define.
+ Patch from wilson@cygnus.com.
+ (DEFAULT_SIGNED_CHAR): Don't define if already defined.
+
+Mon May 18 01:34:38 1992 Kayvan Sylvan (kayvan@satyr.Sylvan.COM)
+
+ * svr3.h (DO_GLOBAL_CTORS_BODY): Start at end, if STACK_GROWS_DOWNWARD.
+
+Mon May 18 01:34:38 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (protoize.o, unprotoize.o):
+ Do nothing, but depend on stamp-proto.
+ (stamp-proto): New target. Compile both protoize.o and unprotoize.o.
+
+ * configure (ns32k-ns-genix): Commented out.
+
+ * expmed.c (expand_mult): Use synth_mult even if not -O.
+
+Sun May 17 02:54:21 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (push_parm_decl): Pedantic warning if shadowing typedef.
+
+ * c-typeck.c (constant_expression_warning): New function.
+ (store_init_value): Call that.
+ * tree.h (TREE_CONSTANT_OVERFLOW): New flag.
+
+ * c-lex.c (yylex): "exceeds range" warning changed to pedwarn.
+ * c-decl.c (grokdeclarator): Likewise for duplicate keywords.
+
+ * c-typeck.c (build_unary_op): For increment operators,
+ test TREE_READONLY in operand, not the data type.
+
+ * unprotoize.c: New file.
+ * Makefile.in (unprotoize.o): Use that.
+
+ * c-decl.c (init_decl_processing): Make global decl for __NAME__.
+ (store_parm_decls): Make local decl for __NAME__.
+ (declare_function_name): Subroutine for that.
+ * toplev.c (rest_of_decl_compilation):
+ Ignore initialized statics if DECL_IGNORED_P is set.
+ * c-lex.c (yylex): Convert invisible initialized char array vars
+ to string constants.
+
+ * c-decl.c (get_parm_info): Change error message.
+
+Sat May 16 21:25:21 1992 Paul Eggert (eggert@twinsun.com)
+
+ * fold-const.c (fold): Do not fold X-X to 0 if X is floating point.
+
+ * cse.c (simplify_unary_operation): - -X simplifies to X even
+ with IEEE floating point.
+
+Sat May 16 14:14:50 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (clean): Delete *.dvi.
+ (distclean): Not here.
+
+ * Makefile.in (install-man): Ignore errors in all commands.
+
+ * combine.c (expand_compound_operation):
+ Don't simplify extending a const_int.
+
+ * ns32k.h (NS32K_DISPLACEMENT_P): New macro.
+ (INDIRECTABLE_1_ADDRESS_P): Use that.
+ * ns32k.md (addsi3): Likewise.
+
+Sat May 16 07:47:11 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * m88k.h: Override SET_ASM_OP in svr4.h.
+
+Sat May 16 00:10:09 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-parse.y (parmlist_1): Add pedantic warning.
+
+Fri May 15 13:10:07 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure (i386-*-sco3.2v4*): New file.
+ * config.sub: For SCO, produce -sco3.2v2. For ISC, make just -isc.
+
+ * dbxout.c (DBX_TYPE_DECL_STABS_CODE): Was DBX_DECL_STABS_CODE.
+ (DBX_OUTPUT_ENUM): Pass type as arg; make it do the whole job.
+
+ * svr4.h (ASM_BYTE_OP): Delete the tab.
+ (SET_ASM_OP): New definition.
+
+ * Makefile.in (gcc.xtar): Depend on doc.
+ (gcc.info, cpp.info): Duplicate rules deleted.
+
+ * i386.c (handle_pragma): Use SET_ASM_OP, not DEF_ASM_OP.
+
+Fri May 15 12:38:18 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * final.c (final_scan_insn): Don't set new_block when within a
+ sequence. Set it after the last insn of the sequence.
+
+Fri May 15 07:23:09 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * m88k.c (m88k_handle_pragma_token, output_short_branch_defs):
+ Use SET_ASM_OP.
+
+Fri May 15 14:54:54 1992 Howard Chu (hyc@hanauma.jpl.nasa.gov)
+
+ * fx2800.h: Replace Ron Guilmette's version with working version.
+ Tested on Concentrix 2.1 and 2.2.
+
+ * i860.c (singlemove_string): Comparison of const0_rtx was in the
+ wrong place and would never be reached. Added check for negative
+ short int constants.
+ (output_size_for_block_move): call singlemove_string instead of
+ just emitting a mov.
+ (sfmode_constant_to_ulong): eliminate bogus "# error" directive.
+
+ * t-fx2800, x-fx2800, xm-fx2800.h: New files.
+ * configure: Corresponding changes.
+
+ * dbxout.c (DBX_MEMPARM_STABS_LETTER): New macro.
+ (dbxout_type): Check for DBX_OUTPUT_ENUM.
+ (dbxout_parms): Use DBX_MEMPARM_STABS_LETTER.
+ (dbxout_block): Check for DBX_OUTPUT_LBRAC, DBX_OUTPUT_RBRAC.
+
+Thu May 14 18:26:13 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparcv4.h (ASM_OUTPUT_ALIGN_JUMP_TABLE, ASM_OUTPUT_INTERNAL_LABEL,
+ ASM_GENERATE_INTERNAL_LABEL): Delete.
+
+Thu May 14 13:51:01 1992 Chip Salzenberg (chip@tct.com)
+
+ * toplev.c (compile_file): Use IO_BUFFER_SIZE for finput.
+ * xm-i386sco.h, xm-rs6000.h (IO_BUFFER_SIZE): Defined.
+
+Thu May 14 15:21:24 1992 Roland McGrath (roland@albert.gnu.ai.mit.edu)
+
+ * config.sub: Recognize "none" as a valid os.
+
+Thu May 14 13:37:52 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * function.c (assign_parms): Make new stack slot if entry stack
+ slot isn't aligned as much as the mode wants.
+ And don't make an eqv for entry_parm in that case.
+ * sparc.c (output_move_double): Assume memory always ok for ldd, std
+ except when explicit offset from stack.
+
+ * c-decl.c (duplicate_decls):
+ Don't warn about qualifier mismatch for a function.
+
+ * c-decl.c (grokdeclarator): Give explicit list of types to promote
+ to int (and sometimes to unsigned int) for parms.
+
+ * Makefile.in (gcc.info, cpp.info): New targets.
+ (gcc.xtar): Depend on those.
+
+ * expmed.c (extract_bit_field): Don't fail to compute
+ all of a DImode value.
+
+ * dwarfout.c (SET_ASM_OP): Renamed from DEF_ASM_OP.
+ (ASM_OUTPUT_DEF): Use SET_ASM_OP.
+ * m88k.h (SET_ASM_OP): Renamed from DEF_ASM_OP.
+ * sparcv4.h (DEF_ASM_OP): No need for #undef.
+
+ * cccp.c (main): Handle -iprefix option instead of GCC_EXEC_PREFIX.
+ * gcc.c (process_command): Set gcc_exec_prefix.
+ (do_spec_1): Handle %I.
+ (default_compilers): Use %I when running cpp.
+
+ * protoize.c (savestring, savestring2): Change parm decls.
+
+ * i860.h, we32k.h (CONST_COSTS): Add missing parm OUTER_CODE.
+
+ * i386v4.h (DEF_ASM_OP, WEAK_ASM_OP): Deleted.
+
+Wed May 13 17:23:45 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * rtl.c (init_rtl): For byte_mode and word_mode, use first fit.
+
+ * protoize.c (munge_compile_params): Increase size of temp_params.
+
+Wed May 13 13:30:40 1992 Chip Salzenberg (chip@tct.com)
+
+ * i386sco4.h: New file.
+
+Tue May 12 23:23:51 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (expand_increment): A subreg as op0 is not necessarily a copy.
+ Treat subregs like regs.
+
+ * c-typeck.c (mark_addressable): Different messages for reg var
+ if reason is a use in a nested function.
+
+Tue May 12 14:28:22 1992 Tom Wood (wood at gen-rtx)
+
+ * gcc.c (process_command): -save-temps uses a switches entry.
+
+Tue May 12 21:24:46 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * collect2.c (vfork): Declaration deleted.
+
+Tue May 12 06:16:49 1992 Niklas Hallqvist (niklas@appli.se)
+
+ * tower-as.h: Added support for basic block profiling.
+
+Tue May 12 02:34:45 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * unx386.h (AS3_SHIFT_DOUBLE): New macro to print shift-double
+ opcodes.
+
+ * i386gas.h (AS3_SHIFT_DOUBLE): Redefine for GAS shift-double rules.
+ (GAS_MNEMONICS): New macro to force use of opcodes for GAS.
+ * seq386gas.h (AS3_SHIFT_DOUBLE,GAS_MNEMONICS): Likewise.
+
+ * i386.c (print_operand): Use GAS_MNEMONICS to choose long-long
+ opcode suffix.
+
+ * i386.md (ashldi3,ashrdi3,lshrdi3): Split into separate
+ recognizers for constant and variable shifts.
+ Use AS3_SHIFT_DOUBLE for variable shifts.
+ (all shifts and rotates): Don't allow memory operands for shift
+ count.
+ (bit set/clear): Don't allow non-CONST_INT constants as SET_SRC.
+ (movstrsi,cmpstrsi,strlensi): Allow any address_operand within
+ a MEM:BLK, not just register_operand.
+ (movstrsi): Rewrite to avoid match_dup on the address_operand
+ above.
+
+Mon May 11 23:31:47 1992 Mike Stump (mrs@albert.gnu.ai.mit.edu)
+
+ Sun May 10 18:44:58 Per Bothner (bothner@cygnus.com)
+
+ * dbxout.c (dbxout_type_methods): Only emit final semi-colon
+ of method list of we have emitted any methods. (The converse
+ of only emitting the operation name initially if needed.)
+
+Mon May 11 22:45:18 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload.c, reload1.c: Use reg_overlap_mentioned_for_reload_p and
+ refers_to_regno_for_reload_p instead of the normal versions.
+ * reload.c (reg_overlap_mentioned_for_reload_p): New function.
+
+Mon May 11 22:44:50 1992 Ron Guilmette (rfg at ncd.com)
+
+ * integrate.c (expand_inline_function): Copy LABEL_NAMEs to new
+ copies of CODE_LABELs.
+ * tree.c (decl_function_context, decl_type_context): Renamed `fndecl'
+ formal parameter to `decl' throughout these functions.
+
+Mon May 11 18:43:45 1992 Paul Eggert (eggert@twinsun.com)
+
+ * cccp.c: (deps_file): Deleted.
+ (main): Do not open deps_file until needed.
+ Check error status of dep_stream and stdout more carefully.
+ (timestamp): New function; avoids calling localtime unless needed.
+ (special_symbol, initialize_builtins): Use new timestamp function.
+
+Mon May 11 20:48:26 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * genix.h: Added #error, since this hasn't been updated.
+
+Mon May 11 14:33:32 1992 Ron Guilmette (rfg at ncd.com)
+
+ * dwarfout.c (is_pseudo_reg): New function.
+ (location_attribute): Use `is_pseudo_reg'.
+ (location_or_const_value_attribute): Use DECL_INCOMING_RTL as the
+ basis for forming the location decsriptor for any register parameter
+ which was optimized into non-exitance.
+
+ * dwarfout.c (DWARF_VERSION): New (default) definition.
+ (ASM_OUTPUT_DWARF_STACK_OP, ASM_OUTPUT_DWARF_FMT_BYTE,
+ ASM_OUTPUT_DWARF_TYPE_MODIFIER, ASM_OUTPUT_DWARF_DATA1): Output tab
+ before ASM_BYTE_OP.
+ (ASM_OUTPUT_DWARF_ADDR_CONST): Encapsulate all statements in a
+ `do { ... } while (0)'
+ (data_member_location_attribute, bit_offset_attribute): Both fixed
+ to use alignment of declared type of field as the "containing object"
+ size.
+ (location_or_const_value_attribute): Fixed to use DECL_INCOMING_RTL
+ only for parms passed in memory.
+ (output_decl): Don't output DIEs for externals if DWARF_VERSION == 1.
+
+Sun May 10 17:18:33 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * pa.h (CPP_PREDEFINES): Define for BSD here.
+ Remove conditional #ifdef hpux.
+ * pa-hpux.h, pa-ghpux.h (CPP_PREDEFINES): Define for hpux here.
+ * pa.h (CPP_SPEC): Define.
+
+Sun May 10 12:12:06 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (clean): Delete unprotoize.c.
+
+ * stmt.c (expand_decl): Set MEM_IN_STRUCT_P right in dynamic case.
+
+ * expr.c (get_inner_ref): Handle ARRAY_REF only if constant offset.
+ Handle non-PLUS_EXPR variable offset by assuming multiple of byte.
+ (expand_assignment, expand_expr): Fix gen_rtx added in last change.
+
+Sat May 9 02:39:58 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (get_inner_reference): New output arg poffset.
+ (expand_assignment, expand_expr): Pass new arg. Handle nonzero offset.
+ (do_jump): Pass new arg but ignore result.
+ * fold-const.c (optimize_bit_field_compare, decode_field_reference):
+ Pass the new arg. Just return 0 if offset comes back nonzero.
+
+ * reload.c (find_equiv_reg): Always test valueno >= 0.
+
+ * c-aux-info.c: Don't include param.h or errno.h; don't declare errno.
+
+ * rtl.c (read_rtx): Fix error in prev change.
+
+ * gcc.c (process_command): Handle -print-libgcc-file-name.
+ (main): Handle print_libgcc_file_name by printing the name.
+
+ * c-decl.c (finish_struct): Use TYPE_PRECISION to see whether
+ bitfield's type is narrower than int, for promoting to int.
+
+ * cccp.c (struct definition, struct reflist): New field `rest_args'.
+ (struct arglist): Likewise.
+ (rest_extension, REST_EXTENSION_LENGTH): New var and macro.
+ (create_defnition): Recognize `...' and set flag in arglist.
+ (collect_expansion): Propagate flag to definition.
+ (macroexpand): Check flag when parsing arglist.
+ Special handling for ## next to a rest arg.
+ (macarg, macarg1): New arg rest_arg affects parsing in macarg1.
+
+ * genattrtab.c: Misc speedups and size reductions.
+ (check_attr_test): Set RTX_UNCHANGING_P for tests of const attributes.
+ Also for symbol_ref and comparison ops.
+ (make_canonical): Likewise. Also check for degenerate cond values.
+ (operate_exp, simplify_cond, insert_right_side, evaluate_eq_attr):
+ Avoid copying in some cases. Detect opportunities to simplify.
+ (compute_alternative_mask): Avoid atoi in most cases.
+ (copy_rtx_unchanging): New function.
+ (evaluate_eq_attr, simplify_test_exp): Use that.
+
+ * genattrtab.c (optimize_attrs): Work pattern by pattern,
+ doing all the work for each pattern before moving on.
+ Use temp_obstack during simplification, then copy the end result.
+ (temp_obstack): New obstack.
+ (clear_struct_flag): New subroutine.
+ (SIMPLIFY_TEST_EXP): Test MEM_IN_STRUCT_P.
+ (simplify_test_exp): Add code for debugging stop.
+ Avoid consing when possible; sometimes free storage.
+ Check MEM_IN_STRUCT_P. Add shortcuts.
+
+ * genattrtab.c: Add simplification per alternative (not in use now).
+ (insn_n_alternatives): New array filled in by gen_insn.
+ (current_alternative_string): Nonzero means we are simplifying
+ for a particular alternative. Value is string for that numeral.
+ (SIMPLIFY_ALTERNATIVE): New macro simplifies eq_attr for alternative.
+ (evaluate_eq_attr, simplify_test_exp): Call SIMPLIFY_ALTERNATIVE.
+ (simplify_by_alternatives, count_sub_rtxs): New functions.
+
+ * genattrtab.c (attrs): Now an array indexed by first char.
+ (MAX_ATTRS_INDEX): Length of above.
+ (find_attr, main): Use that new data structure.
+
+ * genattrtab.c: Clarify use of hash-consing:
+ (hash_obstack): New obstack.
+ (attr_hash_add_rtx, attr_hash_add_string): Use hash_obstack.
+ (attr_rtx): Use hash_obstack if object is hashed.
+ Set RTX_INTEGRATED_P if object is hashed.
+ Don't hash object if subexpressions aren't hashed.
+ If making symbol_ref, hash the symbol name.
+ Uniquize const_int with value 0 or 1.
+ (attr_equal_p): New compare function; uses RTX_INTEGRATED_P.
+ (simplify_and_tree, simplify_or_tree, simplify_test_exp): Use that.
+ (attr_copy_rtx): New; copy all but hashed subexpressions.
+ (attr_eq): New function.
+ (attr_numeral): New function.
+ (check_attr_test): Use attr_eq. Hash symbol_ref and comparison ops.
+ (check_attr_value): Return modified value. Callers changed.
+ Hash symbol_ref.
+ (convert_set_attr_alternative): Use attr_eq and attr_numeral.
+ (convert_const_symbol_ref): Hash symbol_ref and eq.
+ (make_alternative_compare): Use attr_numeral.
+ (alternative_name): Fill in using hasher.
+ (copy_boolean): Hash a boolean expression if possible.
+
+Fri May 8 23:10:18 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (ashldi3,ashrdi3,lshrdi3): Fix typo in output template.
+
+ * cse.c (cse_insn): Handle SUBREGs in CLOBBERs.
+
+Fri May 8 14:55:17 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (PREMADE_ATTRTAB, PREMADE_ATTRTAB_MD): New vars.
+ (stamp-attrtab): Use them, to use presupplied file if suitable.
+ * t-mips, t-decstatn, t-decrose (PREMADE_ATTRTAB, PREMADE_ATTRTAB_MD):
+ Defined.
+ * mips-at.md, mips-at.c: New files.
+
+ * c-common.c (shorten_compare): Extend "always 0" warning
+ to fencepost case with le or ge.
+
+ * cccp.c (pass_thru_directive): Don't output a newline.
+ (initialize_builtins): Add explicit newlines in sprintfs.
+
+Fri May 8 14:49:12 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.md (adddi3): Force -32768 into a register, since the
+ define_insn's won't accept that one value.
+ (all attributes): Where an attribute is set to the same value in all
+ alternatives, don't use the alternative notation, since it will make
+ genattrtab somewhat faster.
+
+ * rtl.c (read_rtx): Use the current obstack to read in strings,
+ rather than repeated malloc/realloc's.
+
+Thu May 7 18:41:03 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * calls.c (expand_call): Never set must_preallocate if no stack args.
+
+Thu May 7 16:52:56 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * pa1*: New names for pa1.1*.
+ * configure: Corresponding changes.
+
+ * m68k.md (u?mulsidi3): Don't permit immediates for operand 2.
+ (u?mulsidi3 recognizers): Split into immediate/nonimmediate cases.
+ * m68k.md ({zero,sign}_extend recognizers): Remove `n' from constraint
+ if predicate doesn't permit constants.
+
+Thu May 7 15:42:32 1992 Michael Collison (collison at osf.org)
+
+ * i386rose.h (ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE): Fix these to
+ avoid printing NaNs, and infinity.
+ (SUBTARGET_SWITCHES): Add OSF dependent switches for half-pic
+ support.
+ (MASK_HALF_PIC, TARGET_HALF_PIC): Likewise.
+ (CC1_SPEC): Map pic-none, pic-lib, pic-extern and pic-calls
+ to appropriate half-pic compiler switches.
+ (LINK_SPEC): If not -noshrlib or -pic-none, pass -warn_nopic.
+ Allow user to pass -noshrlib directly.
+ (OPTIMIZATION_OPTIONS): Customize levels for OSF.
+ (CONSTANT_ADDRESS_P: Add check to determine if we have a
+ half-pic constant.
+ (ENCODE_SECTION_INFO): Check to see if we have a half-pic
+ declaration.
+ (ASM_DECLARE_OBJECT_NAME): Output the label (definition) for a
+ object and check to see if it is half-pic.
+ (ASM_DECLARE_FUNCTION_NAME): Likewise but for functions.
+
+Thu May 7 15:56:51 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload.c (find_reloads): Remover unterm comment from recent changes.
+
+ * genattrtab.c (compute_alternative_mask): Usually bypass atoi.
+
+Thu May 7 15:56:51 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * genattrtab.c (fill_attr): Do nothing for constant attribute.
+ (check_attr_test): Set unchanging flag for constant attribute.
+ (write_test_expr): Expand constant attributes here.
+
+Thu May 7 06:01:46 1992 Michael Meissner (meissner@osf.org)
+
+ * decrose.h (CPP_SPEC): Fix typo in last change.
+
+Wed May 6 17:39:31 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * convex.h (HAVE_STRERROR, vfprintf, WTERMSIG, WEXITSTATUS): Deleted.
+
+ * dbxout.c (dbxout_type): Don't repeat a cross-reference
+ merely because full is nonzero.
+
+ * calls.c (expand_call):
+ Avoid rounding error testing copy_to_evaluate_size.
+
+ * xm-mipsbsdn.h: Renamed from xm-mipsbsdnews.h.
+ * xm-sun386.h: Renamed from xm-xm-i386sun.h.
+ * configure: Corresponding changes.
+
+Wed May 6 23:11:55 1992 John F Carr (jfc at Achates.mit.edu)
+
+ * cse.c (simplify_binary_operation): Support MIN and MAX for
+ SImode and narrower integers.
+
+Wed May 6 17:25:37 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Bump Meissner version # to 18.
+ (mips_cpu_attr): New define, which is the mips_cpu variable recast
+ to the attr_cpu enumeration for mips.md.
+ (HALF_PIC_NUMBER_PTRS, HALF_PIC_NUMBER_REFS): Add dummy
+ definitions if halfpic.h is not included.
+
+ * mips.c (function_epilogue): Print half-pic stats if -mstats and
+ the stats are non-zero.
+
+ * mips.md (cpu attribute): Just use symbol_ref "mips_cpu_attr"
+ instead of a four way if statement.
+ (movsi_internal, movhi, movqi): Use 'z' constraint for fpsw, not 's'.
+
+ * halfpic.h (half_pic_number_ptrs): Add counter for the number of
+ pointers generated.
+ (half_pic_number_refs): Add counter for the number of references.
+
+ * halfpic.c (half_pic_number_ptrs): Add counter for the number of
+ pointers generated.
+ (half_pic_number_refs): Add counter for the number of references.
+ (half_pic_ptrs): Update new counters.
+
+ * decstatn.h (CPP_SPEC): Define __LANGUAGE_x__ and __LANGUAGE_x
+ where x is C_PLUS_PLUS, OBJECTIVE_C, C, or ASSEMBLY. Fix
+ undef'ing LANGUAGE_C for .S files.
+ (HALF_PIC_PREFIX): Define as '$Lp.'.
+
+ * decstatn.h (CPP_SPEC): Define __LANGUAGE_x__ and __LANGUAGE_x
+ where x is C_PLUS_PLUS, OBJECTIVE_C, C, or ASSEMBLY.
+
+ * mips-tfile.c (toplevel): Don't define anything in the standard
+ headers, such as open, etc.
+ (add_procedure): Delete unused variable orig_fdb.
+
+ * mips-tdump.c (toplevel): Don't define anything in the standard
+ headers, such as open, etc.
+
+ * collect2.c (main): Don't pass -f<xxx> switches to GCC when
+ building the constructor table.
+ (write_c_file): Put extern in front of all external declarations.
+ (scan_prog_file, COFF varient): On ECOFF systems, check whether
+ the header pointer is non-NULL before using it.
+
+ * cp-lex.c (store_pending_inline): Cast obstack_copy arg to char *.
+ (copy_lang_decl): Cast bcopy args to char *.
+
+Wed May 6 13:28:58 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * i960.h, i960.c (hard_regno_mode_ok): Use unsigned int not short.
+
+ * Makefile.in (USER_H): Add va-i960.h.
+
+Wed May 6 07:31:54 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * explow.c (emit_stack_{save,restore}): New functions.
+ * expr.h: Declare them and enum save_level.
+ * calls.c (expand_call): Call emit_stack_save.
+ * expr.c (expand_builtin, case BUILT_IN_ALLOCA): Likewise.
+ * function.c (delete_handlers): Make test for insn that sets
+ a slot more general.
+ (expand_function_end): Call emit_stack_{save,restore}.
+ * stmt.c (declare_nonlocal_label): Call emit_stack_save.
+ (expand_goto_internal): Likewise.
+ (expand_goto): Likewise.
+ Copy slots so they don't get instantiated incorrectly; also
+ update use of virtual regs and frame pointer.
+ (expand_end_bindings): Call emit_stack_restore.
+ (expand_decl): Call emit_stack_save.
+ Set current_function_calls_alloca when allocating variable-sized
+ objects.
+ * rs6000.md ({save,restore}_stack_{block,function,nonlocal}): New.
+
+Tue May 5 13:17:29 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * configure (a29k-*-*, i960-*-*): New default configurations.
+
+ * i960.c, i960.h, i960.md, xm-i960.h, va-i960.h: New files.
+
+ * gstdarg.h, gvarargs.h: Include va-i960.h for i960.
+
+ * calls.c (expand_call): Call REG_PARM_STACK_SPACE once and save
+ result. Add code to Use new macros MAYBE_REG_PARM_STACK_SPACE and
+ FINAL_REG_PARM_STACK_SPACE.
+ (store_one_arg): New parameter reg_parm_stack_space.
+ * function.c (assign_parms): Use MAYBE_REG_PARM_STACK_SPACE.
+
+ * cse.c (NONZERO_BASE_PLUS_P): Don't consider arg pointer by itself
+ to be non-zero, because it isn't on the i960.
+
+ * dbxout.c (dbxout_symbol): Use decl_function_context not
+ TREE_PERMANENT to identify function local statics.
+
+ * integrate.c (copy_rtx_and_substitute): Also remap SYMBOL_REFs
+ that point to LABEL_REFs in the constant pool.
+
+ * expr.c (expand_expr, PLUS case): Canonicalize MULT
+ when associating a constant.
+
+Tue May 5 12:56:29 1992 Torbjorn Granlund (tege@mole.gnu.ai.mit.edu)
+
+ * pa.c (singlemove_string): Make it global.
+ * pa.md: Add high:DI and lo_sum:DI patterns.
+
+Tue May 5 12:04:56 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_array_ref): Require int index *after* promotion.
+
+ * convex.h (REG_OK_FOR_{BASE,INDEX}_P): Virtual regs that will
+ turn into stack_pointer_rtx are not valid for indexing.
+
+ * config.sub: NeXT is BSD, not SysV.
+
+ * att386.h (ASM_OUTPUT_INTERNAL_LABEL, ASM_GENERATE_INTERNAL_LABEL):
+ Undef before defining.
+
+ * dbxout.c (dbxout_parms): Handle invisible reference parms.
+
+Tue May 5 22:48:54 1992 Niklas Hallqvist (niklas@appli.se)
+
+ * Makefile.in (test-protoize-simple):
+ Change tmp-protoize* to tmp-proto*.
+ (mostlyclean): Remove that temporary file.
+
+Tue May 5 09:35:30 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.c (print_operand): Handle VOIDmode CONST_DOUBLE correctly.
+
+ * reload.c (find_reloads): Recompute `code' before preferred_class.
+
+Mon May 4 00:23:29 1992 Ron Guilmette (rfg at ncd.com)
+
+ * svr3.h (ASM_OUTPUT_INTERNAL_LABEL, ASM_GENERATE_INTERNAL_LABEL):
+ Added definitions appropriate for most svr3 systems.
+
+ * protoize.c (volatile): Define to nothing if !defined(__STDC__).
+ (setjmp, longjmp): Declared external if not defined as pp-macro.
+ (include_defaults): Fix type of `fname' field.
+ (compiler_file_name): Fixed type.
+ (savestring): Fixed type of `size' parameter.
+ (savestring2): New function.
+ (string_list_cons): Removed trailing blanks from parm declaration.
+ (find_file): Moved comments out of formal parm declarations area.
+ (munge_compile_params): Fixed type of `temp_parms'.
+ (gen_aux_info_file): Construct new filename using `savestring2'.
+ (find_extern_def): Suppress annoying warnings about missing
+ definitions for extern functions.
+ (edit_fn_declaration): Declare `clean_text_p' as `volatile' not as
+ `VOLATILE'.
+ (scan_for_missed_items): Make text of warning more obvious.
+ (edit_file): Make text of warning shorter.
+
+ * libgcc2.c (__builtin_new): Changed arg type to `size_t'. Moved
+ nested declaration of malloc out to file-scope.
+ (__builtin_vec_new): Prototype preceeding function declarations.
+ (__builtin_vec_new, __builtin_vec_delete): Changed types of non-pointer
+ arguments and local variables to `size_t'.
+ (__clear_cache): Use type `void *' variables to store addresses.
+ (__do_global_dtors): Use unsigned type for counters.
+ (__main): Add explicit type to declaration of `initialized'.
+
+Mon May 4 16:16:56 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * dwarfout.c (dwarfout_file_scope_decl): Ignore a global register
+ variable.
+
+Mon May 4 08:28:18 1992 Torbjorn Granlund (tege@mole.gnu.ai.mit.edu)
+
+ * pa-ghpux.h, pa-hpux.h: #define HAVE_ATEXIT.
+
+ * genextract.c (print_path, main): Make the generated code use
+ `pat', not `insn', except for fatal_insn_not_found. Remove
+ insn_code variable from generated code, and switch directly on
+ INSN_CODE (insn).
+
+ * hppa*: Rename to be unique in first 8 characters.
+ * configure: Corresponding changes.
+
+Mon May 4 00:20:39 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload.c (find_reloads): Compute preferred_class after
+ calling find_reloads_toplev or equivalent.
+
+ * vax.h (PRINT_OPERAND): Add codes M, h, b.
+
+ * ns32k.h (PREFERRED_RELOAD_CLASS): Change GEN_AND_MEM_REGS
+ to GENERAL_REGS.
+
+ * config.sub: Recognize we32 and 3b*.
+
+ * varasm.c (readonly_data_section): Move after data_section.
+
+ * Makefile.in (print-rtl.o): Compile also for host machine.
+ (genattrtab): Link in host's print-rtl.o.
+
+ * i386v4.h (ASM_OUTPUT_ALIGNED_LOCAL): Deleted. Dfn in svr4.h is good.
+
+Sun May 3 21:39:22 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.h (RTX_COSTS): Add missing break.
+
+Sun May 3 19:40:50 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ From law:
+ * sparc.md (fp unit attributes): Change result ready delays to
+ match how the FP unit really works.
+
+ * sched.c (schedule_block): Don't move USE at the end of any block.
+
+ From rfg:
+ * sparc.c (handle_pragma_token): Added new function (based on original
+ `handle_pragma_token' in i386.c).
+ * sparcv4.h (INIT_SECTION_PREAMBLE): Definition added.
+ (PUSHSECTION_FORMAT): Added leading tab.
+ (HANDLE_PRAGMA): Added definition to handle #pragma weak (based on
+ original definition in i386v4.h).
+
+ From jfc:
+ * sched.c (insn_costs): New variable.
+ (insn_cost): Save cost of insn in insn_costs to avoid recomputation.
+ (sched_analyze_2): Handle UNSPEC_VOLATILE.
+ (schedule_insns): Init insn_costs.
+
+ * sparc.c (output_move_double): Correctly check for constant
+ DFmode addresses. Assume that DFmode addresses with MEM_IN_STRUCT_P
+ set are always aligned.
+
+Sun May 3 16:52:06 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (PATH_SEPARATOR): New macro. From Alex Zatsman.
+ (process_command): Use it when scanning a path.
+
+ * expr.c (expand_builtin): Cast icode to int for indexing.
+
+ * xm-i386dos.h: New file.
+ * configure.bat: Use that file.
+ * gcc.c (EXECUTABLE_SUFFIX): Remove special default for MSDOS.
+ (putenv): Remove conditionals for MSDOS, since HAVE_PUTENV now defined.
+
+ * c-typeck.c (build_array_ref): Promote after -Wchar-subscripts test.
+
+ * c-decl.c (builtin_function): If traditional and name is user-visible,
+ set DECL_BUILT_IN_NONANSI.
+
+ * cccp.c (PATH_SEPARATOR): Add default definition.
+ (main): Use that.
+
+Sun May 3 08:17:02 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * pyr.h (FRAME_POINTER_REGNUM): Work around pyr cpp bug.
+
+ * xm-hppa.h (NO_SYS_SIGLIST): Define.
+
+Sat May 2 15:03:08 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * callc.c (emit_call_1): Restore inhibit_defer_pop after popping args.
+
+Thu Apr 30 20:00:00 1992 DJ Delorie (dj@ctron.com)
+
+ * configure.bat: Complete rewrite to use Makefile.in.
+ * Makefile.dos: File deleted.
+
+Thu Apr 30 23:38:00 1992 Per Bothner (bothner@rtl.cygnus.com)
+
+ * xcoffout.h (DBX_FINISH_SYMBOL): Use DECL_ASSEMBLER_NAME
+ instead of DECL_NAME when writing out a global symbol.
+ (Makes a big difference for C++ static class members.)
+
+Thu Apr 30 23:13:01 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (fold, comparisons): Don't call omit_one_operand in
+ a case where the operand isn't really being omitted.
+
+ * combine.c (distribute_notes, case REG_DEAD): Don't write a USE for
+ a partially-dead register if we already wrote one.
+
+Thu Apr 30 21:51:29 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * Makefile.in (enquire.o, install-common-headers): Make these work
+ when $(srcdir) is .
+
+ * c-decl.c (init_decl_processing): Use void_ftype_any as the type
+ for _exit, exit and abort.
+
+Wed Apr 29 21:42:30 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * genattrtab.c (insn_name_ptr): Define so we could link with
+ debug_rtx.
+
+ * genattrtab.c (check_attr_test, simplify_test_exp): Copy expression
+ before setting as unchanging.
+ (make_canonical): Set result as unchanging after calling
+ convert_const_symbol_ref.
+ (evaluate_eq_attr): When returning original expression, set it
+ as unchanging.
+
+Wed Apr 29 13:30:33 1992 Michael Meissner (meissner@osf.org)
+
+ * halfpic.c (half_pic_ptr): Allocate space for the NULL byte.
+
+Wed Apr 29 06:28:35 1992 Ron Guilmette (rfg at ncd.com)
+
+ * dwarfout.c (src_coords_attribute): Don't #ifdef code based on
+ DWARF_DECL_COORDINATES.
+ (name_and_src_coords_attributes): Do #ifdef calls to `lookup_filename'
+ and `src_coords_attribute' based on DWARF_DECL_COORDINATES. Also,
+ pop out of .debug section temporarily while calling `lookup_filename'.
+
+Wed Apr 29 02:01:03 1992 Mike Stump (mrs@albert.gnu.ai.mit.edu)
+
+ * Complete another Cygnus <--> FSF merge.
+
+ Tue Apr 28 19:24:52 1992 Mike Stump (mrs at rtl.cygnus.com)
+
+ * cp-init.c (do_friend): Handle overloaded and extern "C"
+ friends correctly.
+
+ Mon Apr 27 21:04:40 1992 Mike Stump (mrs at rtl.cygnus.com)
+
+ * cp-search.c (build_vbase_vtables_init): Don't set
+ flag_this_is_variable to -2 when not doing a ctor.
+
+ * cp-class.c (build_vbase_path): Don't unconditionally set
+ code to be a PLUS_EXPR.
+
+ Mon Apr 27 14:14:08 1992 Mike Stump (mrs at rtl.cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Allow contructors to be friends.
+ Cannot find anything prohibiting it.
+
+ Mon Apr 27 13:26:20 1992 Mike Stump (mrs at rtl.cygnus.com)
+
+ * cp-init.c (do_friend): bullet proof handling of friends,
+ fixes problem introduced on Apr 26 18:24:35.
+
+ Sun Apr 26 23:18:24 1992 Mike Stump (mrs at rtl.cygnus.com)
+
+ * cp-call.c (ideal_candidate): Allow one to overload static
+ member functions without dumping core.
+
+ Sun Apr 26 18:44:57 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * cp-tree.c (break_out_calls): Call build1 instead of build for
+ trees with only one operand to avoid abort in build.
+
+ Sun Apr 26 18:24:35 1992 Mike Stump (mrs at rtl.cygnus.com)
+
+ * cp-init.c (do_friend): Allow extern "C" functions to be
+ friends.
+
+ Sat Apr 25 02:57:07 1992 Mike Stump (mrs at rtl.cygnus.com)
+
+ * cp-*.[chy]: Fix all pedantic warnings to be pedwarn.
+
+ Sat Apr 25 01:46:50 1992 Mike Stump (mrs at rtl.cygnus.com)
+
+ * cp-tree.c (break_out_calls): Handle NULL_TREE properly.
+
+ Fri Apr 24 23:49:39 1992 Mike Stump (mrs at rtl.cygnus.com)
+
+ * cp-type2.c (store_init_value): Provide an error message
+ about bad syntax instead of core dumping.
+
+ Fri Apr 24 16:46:03 1992 Mike Stump (mrs at rtl.cygnus.com)
+
+ Fri Apr 24 18:55:45 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-parse.y (component_decl): Fix small problem to take us
+ back down to 14 reduce/reduce errors.
+
+ Thu Apr 23 19:48:54 1992 Mike Stump (mrs at rtl.cygnus.com)
+
+ Wed Apr 22 22:47:15 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-type2.c (readonly_warning_or_error): Eliminate arbitrary
+ limit of 80 characters per warning message.
+
+ Thu Apr 23 04:14:59 1992 Mike Stump (mrs at rtl.cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Handle const and volatile
+ member functions properly.
+
+Tue Apr 28 22:05:05 1992 Niklas Hallqvist (niklas@appli.se)
+
+ * tower-as.h (svr3 support): Generic svr3.h included.
+ (SELECT_RTX_SECTION): m68k.h's version #undef'd in favour of svr3.h's.
+ (CPP_PREDEFINES): Overriding svr3.h version.
+ (STARTFILE_SPEC): Added crtbegin.o.
+ (ASM_OUTPUT_SOURCE_FILENAME): Added ugly section directives to get
+ rid of NCR assembler bug.
+ (ASM_OUTPUT_IDENT): #undef'd svr3.h version.
+ (NO_{DOLLAR,DOT}_IN_LABEL): Defined.
+ (ASM_LONG): Defined.
+ ({INIT,FINI,CONST}_SECTION_ASM_OP): Overrides svr3.h versions.
+ (CTOR_LIST_{BEGIN,END}): New macros.
+ (BSS_SECTION_ASM_OP): New macro.
+ (ASM_OUTPUT_CONSTRUCTOR): New macro.
+ (ASM_OUTPUT_LABELREF): Redefined svr3.h version.
+
+ * tower.h (LIB_SPEC): Added -shlib support plus crtend.o.
+
+ * configure (m68k-ncr-sysv): Defined xmake_file and tmake_file.
+
+Tue Apr 28 21:27:10 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.md (floatsidf2, floatsisf2): Fix typo in last change.
+
+Tue Apr 28 18:21:02 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc-actions.c: Include obstack.h, etc.
+ (util_obstack, util_firstobj): New obstack, and 1st object in it.
+ (init_objc): Init those two.
+ (encode_*): Rewrite to use util_obstack, Callers changed.
+ (handle_class_ref, handle_impent): New subroutines, broken out
+ from finish_objc so each can use alloca (instead of utlbuf).
+ (utlbuf): Variable deleted.
+
+ * c-decl.c (init_decl_processing): Treat abort and exit as ANSI.
+ -traditional no longer affects ANSI builtins; use -fno-builtin.
+
+ * configure: Insert assignment of INSTALL where old one was.
+
+Tue Apr 28 17:14:57 1992 John F Carr (jfc at Achates.mit.edu)
+
+ * vax.md (cmpdf, cmpsf): Use tstf/tstd if second argument is zero.
+ (movsi, movhi, movqi): Patterns changed to reflect different
+ space/time tradeoffs for modern VAXes.
+ (movstricthi, movstrictqi): New patterns.
+ (extv, extzv): Use rotl/bicl sequence when possible.
+
+Tue Apr 28 10:00:25 1992 Michael Meissner (meissner@osf.org)
+
+ * mips-tfile.c (read_line): Make read_line act like the assembler,
+ and use ';' to separate multiple logical lines.
+
+ * mips.h (MIPS_VERSION): Set Meissner version # to 17.
+ (MASK_DEBUG_C): Swap meaning of -mdebugc.
+ (ADDITIONAL_REGISTER_NAMES): Use 'cc' for the floating point status
+ register, so user asm's can clobber it. Allow $fp for the frame
+ pointer in addition to fp and $30, and also $sp for the stack
+ pointer in addition to sp and $29.
+
+ * mips.c (gen_int_relational): Emit faster sequence for NE.
+ (mips_asm_file_start): Don't call data_section for gcc2_compiled.
+
+ * mips.md (branch define_delay): Specify all of the preconditions
+ correctly for branch likely (mips2) support.
+ (floatsidf2): Update dslots_load_total. Support getting the
+ integer value from memory as well as from an integer register.
+ Fix the length attribute.
+ (floatsisf2): Ditto.
+ (All set from condition code patterns): Swap meaning of -mdebugc,
+ so that if used, it means support all of the set condition code
+ patterns as if the machine can do them equally well. If not
+ -mdebugc, call gen_int_relational to generate an appropriate set
+ of INSNs.
+
+ * decrose.h (ASM_IDENTIFY_GCC): Define as null on OSF/1.
+ * encrose.h (ASM_IDENTIFY_GCC): Define as null on OSF/1.
+ * i386rose.h (ASM_IDENTIFY_GCC): Define as null on OSF/1.
+
+ * decrose.h (CPP_SPEC): If .S files, add an explicit
+ -ULANGUAGE_C to mimic the OSF GCC 1.39 behavior.
+
+Mon Apr 27 16:44:30 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * dwarf.h (AT_... values): Correct typos present in version 1.0.1
+ of the DWARF spec. The values should be unchanged.
+
+ * dwarfout.c (data_member_location_attribute): Use INTEGER_CST.
+
+ * dwarfout.c (data_member_location_attribute): Use TYPE_MODE.
+ (bit_offset_attribute): Ditto.
+
+ * dwarfout.c (name_attribute): Add the tests back.
+
+ * m88k.h (WEAK_ASM_OP): Override svr4.h.
+
+Mon Apr 27 15:48:36 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * limits.h: Use _LIMITS_H___, not _LIMITS_H_, to protect contents.
+
+Mon Apr 27 15:15:25 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Set Meissner version # to 16.
+ (delay_type enum): Add DELAY_FCMP for specifing the
+ c.{eq,lt,le}.{d,s} delay.
+ (fpsw_register_operand): New declaration.
+ (gen_int_relational): New declaration.
+ (pc_or_label_operand): New declaration.
+ (MASK_DEBUG_C): Use -mdebugc for new relational code.
+ (REG_CLASS_FROM_LETTER): Use 'z' for fpsw register, not 's' which
+ is already used.
+ (EXTRA_CC_MODES): Add CC_REV_FPmode to handle fp comparisons,
+ which need to be reversed (!=).
+ (EXTRA_CC_NAMES): Add CC_REV_FP.
+ (SELECT_CC_MODE): Use SImode for all integer comparisons,
+ CC_REV_FP for floating point != comparisons.
+
+ * mips.c (internal_test enum): Move and rename the enumeration
+ used in gen_conditional to make the comparison RTL codes to
+ something that can be indexed out to top level.
+ (fpsw_register_operand): New function to return true if the
+ operand is the FP status register.
+ (pc_or_label_operand): New function to return true if the operand
+ is either a label_ref or the pc for if_then_else tests.
+ (mips_fill_delay_slot): Add support for DELAY_FCMP, the delay
+ after a floating point comparison is done and it can be tested.
+ (map_test_to_internal_test): New function to take a RTL code of a
+ comparison operator, and return the internal_test enumeration.
+ (gen_int_relational): New function to generate the appropriate
+ INSNS for comparing two integers for either branches, or the set
+ from condition code insns.
+ (gen_conditional_branch): Rewrite to not use the CISC condition
+ code register CC0, but instead generate the appropriate INSNs so
+ that the test can be scheduled independely of the branch.
+ (override_options): Use 'z' for the fpsw register, not 's'. Only
+ allow the fp comparison condition codes in the fpsw register. Do
+ not allow non float or int things in FP registers, even if
+ -mdebugh. Don't allow ints in the fpsw.
+
+ * mips.md (various): Rewrite comparisons and branches so that we
+ do not use CC0, but instead put the comparison in a pseudo and
+ generate the appropriate branch instructions directly. This
+ eliminates calls to the various b<xx> macros provided by the
+ assembler. Change the type of integer comparisons from the
+ various CCxx modes used to SImode. Make fp != use CC_REV_FPmode.
+ (mode attribute): Add FPSW mode for floating compare.
+ (fp_comp): New functional unit for comparing fp values.
+ (divmodsi4): No longer use -mdebugc to turn off divmodsi4.
+ (divsi3): Ditto.
+ (modsi3): Ditto.
+ (udivmodsi4): No longer use -mdebugc to turn off udivmodsi4.
+ (udivsi3): Ditto.
+ (umodsi3): Ditto.
+
+ * mips-gn5.h: Rename from mips-gnews5.h for MSDOS.
+ * mips-n5.h: Rename from mips-news5.h.
+ * xm-mipsbsdnews.h: Rename from xm-mipsnbsd.h.
+
+ * configure (mips-sony*): Handle the above changes.
+
+ * README-mips (whole file): Remove bogus patches, and update with
+ some common warnings about the MIPS.
+
+Mon Apr 27 12:41:21 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * unroll.c (find_splittable_givs): Don't split a giv combined with
+ a giv that was not reduced.
+
+ * c-parse.y (primary): Clear the TREE_USED flag of a block tree
+ put in a BIND_EXPR.
+ * print-tree.c (print_node): Print the block operand of a BIND_EXPR.
+
+ * flow.c (find_basic_blocks): Assume MEM source in jump insn makes
+ it an indirect jump.
+
+ * collect2.c (strip_flag, strip_file_name): New variables.
+ (main): Don't pass -s to the first ld call. Pass it to the second
+ ld call, or else run strip.
+
+ * Makefile.in (bootstrap): Only build C compiler for stage1.
+
+ * sparc.h (GO_IF_LEGITIMATE_ADDRESS): Rewrite to accept SUBREGs.
+
+ * combine.c (force_to_mode): Correctly form mask from BITS.
+
+ * Makefile.in (bootstrap): Fix a typo (\n between b and ootstrap).
+
+Sun Apr 26 14:14:23 1992 Ron Guilmette (rfg at ncd.com)
+
+ * getattr.c, genattrtab.c, gencodes.c, genconfig.c, genemit.c,
+ genextract.c, genflags.c, genoutput.c, genpeep.c, genrecog.c (main):
+ Move nested extern declaration of `read_rtx' out to file-scope.
+
+Sun Apr 26 21:41:33 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * Makefile.in (varasm.o): Includes defaults.h.
+
+Sun Apr 26 21:15:30 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * enquire.c (f_rep, f_define): Handle NO_LONG_DOUBLE_IO.
+ (f_define): Print defn of union __convert_long_double, just once,
+ with #ifndef to protect it.
+ (fake_f_define): New function.
+
+Sat Apr 25 15:04:49 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * stmt.c (expand_end_case): Test DI index against range before casesi.
+ Don't truncate before calling do_tablejump.
+ Use expand_expr to turn RANGE into rtl.
+ * expr.c (do_tablejump): Convert to Pmode after testing vs range.
+
+ * stmt.c (expand_end_case): Delete test default_label != 0; always is.
+
+ * configure (i386-ibm-aix): Set install_with_cp.
+
+Fri Apr 24 21:32:38 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * xm-spcv4.h: Renamrd from xm-sparcv4.h.
+ * configure: Changed accordingly.
+
+ * Makefile.in (unprotoize.o): Leave unprotoize.c around.
+
+ * c-common.c (decl_attributes): Change warnings to errors.
+
+Fri Apr 24 11:17:53 1992 Ron Guilmette (rfg at ncd.com)
+
+ * dwarf.h: Added copyleft.
+ Revised to use enumerators instead of #defines.
+ Updated to conform to version 1.0.1 of the DWARF spec.
+ Added implementation-defined fundamental type codes for GCC
+ mode-specific types.
+
+ * dwarfout.c: Include defaults.h.
+ (getpwd): Declare as `extern'.
+ (BITFIELD_OFFSET_BITS, BITFIELD_OFFSET_UNITS,
+ BITFIELD_OFFSET_WORDS_IN_UNITS): Unnecessary definitions deleted.
+ (ASM_BYTE_OP, PUSHSECTION_ASM_OP, POPSECTION_ASM_OP): Delete
+ leading tabs from definitions.
+ (PUSHSECTION_FORMAT): Add leading tab to definition.
+ (*_LABEL): Changed to all start with `.L' to internalize these
+ symbols for *all* svr4 assmeblers (including sparc).
+ (ASM_OUTPUT_POP_SECTION): Add leading tab.
+ (ASM_OUTPUT_DWARF_TAG, ASM_OUTPUT_DWARF_ATTRIBUTE,
+ ASM_OUTPUT_DWARF_STACK_OP, ASM_OUTPUT_DWARF_FUND_TYPE,
+ ASM_OUTPUT_DWARF_FMT_BYTE, ASM_OUTPUT_DWARF_TYPE_MODIFIER): Print
+ DWARF comments only if flag_verbose_asm set.
+ (ASM_OUTPUT_ASCII): Moved to defaults.h
+ (tag_name): Renamed `dwarf_tag_name' to avoid possible conflicts.
+ (dwarf_tag_name): Updated for version 1.0.1 DWARF spec.
+ (attribute_name): Renamed `dwarf_attr_name' to avert conflicts.
+ (dwarf_attr_name): Updated for version 1.0.1 DWARF spec.
+ (stack_op_name): Renamed `dwarf_stack_op_name' to avert conflicts.
+ (format_byte_name): Renamed `dwarf_fmt_byte_name' to avert conflicts.
+ (fundamental_type_name): Renamed `dwarf_fund_type_name' to avoid
+ possible conflicts.
+ (dwarf_fund_type_name): Added support for implementation-defined
+ GCC mode specific fundamental types codes (to support new `mode'
+ attribute).
+ (data_member_location_attribute): Rewritten to avoid major lossage
+ primarily for little-endian targets.
+ (location_or_const_value_attribute): Fixed comments and removed
+ spurious code.
+ (name_attribute): Removed test for NULL name (now done in
+ `name_and_src_coords_attributes').
+ (byte_size_attribute): Fixed to get size from DECL_BIT_FIELD_TYPE
+ for bit-fields.
+ (bit_offset_attribute): Rewritten to avoid major lossage primarily
+ for little-endian targets.
+ (src_coords_attribute): GNU-specific extension added.
+ (name_and_src_coords_attributes): New function.
+ (output_entry_point_die, output_formal_parameter_die,
+ output_global_subroutine_die, output_global_variable_die,
+ output_inline_subroutine_die, output_label_die,
+ output_local_variable_die, output_member_die,
+ output_local_subroutine_die, output_typedef_die): Call
+ `name_and_src_coords_attributes' rather than `name_attribute' for
+ all potentially-named declarations.
+ (output_global_subroutine_die, output_inline_subroutine_die,
+ output_local_subroutine_die, dwarfout_file_scope_decl): Use
+ DECL_ASSEMBLER_NAME rather than DECL_NAME when referencing
+ assembly level names (e.g. in AT_low_pc attributes).
+ (output_type): Revised to produce DWARF info for C++ member functions
+ even for classes with no constructors & destructors.
+
+ * flags.h (flag_verbose_asm): Option flag added.
+ * toplev.c (flag_verbose_asm): Option flag added.
+
+ * defaults.h: New file.
+ * varasm.c: Include defaults.h.
+ (ASM_OUTPUT_ASCII): Deleted.
+
+ * c-common.c (decl_attributes): Call `type_for_mode' rather than
+ `type_for_size'. Also, `break' after a matching mode is found.
+
+ * 3b1.h (ASM_OUTPUT_ASCII): Tab before ASCII_DATA_ASM_OP.
+ * amix.h (ASM_OUTPUT_CASE_END): Tab before SET_ASM_OP.
+ (ASM_OUTPUT_ASCII) Tab before BYTE_ASM_OP.
+ * i860b.h (ASM_OUTPUT_ASCII): Tab before ASCII_DATA_ASM_OP.
+ * i860v3.h (ASM_OUTPUT_ASCII): Tab before BYTE_ASM_OP.
+ * sparcv4.h (*_ASM_OP): Delete the initial tabs.
+
+ * assert.h: Modified to treat source line numbers as `unsigned'.
+
+ * Makefile.in (test-protoize): New target.
+
+ * svr4.h (WEAK_ASM_OP): Default svr4 definition added.
+ (ASM_DECLARE_FUNCTION_SIZE): Use `assemble_name' to output
+ generated internal label.
+
+Thu Apr 23 11:31:58 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * optabs.c (emit_libcall_block): Correct code which determines
+ whether it is safe to emit an insn setting a pseudo before the block.
+
+Thu Apr 23 18:13:08 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (sleu): Finish Apr 21 change.
+
+Thu Apr 23 14:15:05 1992 Michael Meissner (meissner@osf.org)
+
+ * Makefile.in (enquire.o): Delete enquire.c from the current
+ directory before moving it in from the source directory, unless
+ the current directory is the same as the source directory. This
+ occurs if the user keeps GCC under source control, like RCS.
+ (install-common-headers): Ditto for byteorder.h.
+
+Thu Apr 23 12:39:36 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * amix.h (ASM_OUTPUT_CASE_END): Add missing \.
+
+Thu Apr 23 07:14:38 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (simplify_binary_operation, case MINUS): Don't do any
+ of the simplifications for IEEE floating-point.
+
+Wed Apr 22 23:20:59 1992 Mike Stump (mrs@albert.gnu.ai.mit.edu)
+
+ Tue Apr 21 02:21:42 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-method.c (build_overload_value): Handle function names as
+ constant expressions for template arguments. Also, make double
+ values work again as template arguments.
+
+ Mon Apr 20 17:08:17 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-call.c (ideal_candidate): remove incorrect error message about
+ ``ambiguous request for function from distinct base classes of
+ type'' when base and parent are switched.
+
+ Mon Apr 20 14:14:35 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * Makefile.in: Now expect 15 reduce/reduce conflicts, instead of 14.
+
+ Mon Mar 16 14:02:09 1992 Chip Salzenberg (chip at tct.com)
+
+ * cp-parse.y (maybe_attributes, attribute_list): clone
+ from c-parse.y.
+ cp-parse.y: call decl_attributes between start_decl and
+ finish_decl, and after grokfield.
+
+ Mon Apr 20 09:21:00 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * cp-tree.h (break_out_calls): Declare.
+
+ Mon Apr 20 08:29:16 1992 Michael Tiemann (tiemann@cygnus.com)
+
+ * cp-tree.c (break_out_calls): New function.
+ (break_out_cleanups): Added comment.
+
+ * cp-typeck.c (build_modify_expr): Call `break_out_calls' instead of
+ `copy_to_permanent'.
+
+ Mon Apr 20 06:29:16 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-type2.c (my_friendly_abort): New function, please see
+ Rational there.
+
+ * cp-*.[chy]: Change all calls from abort to my_friendly_abort.
+
+ Mon Apr 20 05:45:08 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-cvt.c (build_up_reference): Fix a latent const problem.
+
+ Mon Apr 20 03:08:12 1992 Michael Tiemann (tiemann@cygnus.com)
+
+ * cp-decl.c (pop_from_top_level): Deleted duplicate code in C_C_D
+ restoration.
+
+ * cp-call.c (build_method_call): Call `error_with_aggr_type' with
+ correct number of arguments.
+
+ Sun Apr 19 18:39:25 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-class.c (finish_struct): Only provide a warning about
+ non-virtual destructors if the user asks for -Wall.
+
+ Sun Apr 19 17:36:16 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-typeck.c (build_modify_expr): Make a deep copy of lhs, as
+ expr.c expects to be able to preexpand_calls on the conditional
+ parts without insuring that it would even be legal to do so.
+
+ * cp-tree.c (make_deep_copy): Fix comment.
+
+ Fri Apr 17 04:55:18 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-cvt.c (convert_pointer_to): Provide the user with a meaningful
+ error message instead of a core dump when dealing with bad syntax.
+
+ * cp-typeck.c (build_binary_op): Make error message on undefined
+ operator call more readable.
+
+ * cp-decl.c (grok_reference_init): Handle T& = const T&
+ error messages.
+
+ Thu Apr 16 18:59:15 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-typeck.c (convert_arguments): Disable code that auto converted
+ functions and methods to pointers and left them that way without error.
+
+ Thu Apr 16 17:35:13 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ Sat Apr 4 22:28:23 1992 Gerald Baumgartner (gb at cs.purdue.edu)
+
+ * cp-decl.c (finish_decl): Call `abstract_virtuals_error'
+ when the return type of a method is an abstract class.
+
+ * cp-type2.c (abstract_virtuals_error): Print error message
+ for an invalid method declaration.
+
+ Thu Apr 16 16:18:35 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-decl2.c (lang_decode_option): Handle import by ignoring it.
+
+Wed Apr 22 19:46:44 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc-actions.c (synth_id_with_class_suffix, finish_class):
+ Don't use utlbuf; alloca a buffer.
+ (forward_declare_categories): Use build_decl directly since
+ create_builtin_decl wants a string, not an id.
+
+ * Makefile.in (STAGESTUFF): Add USE_COLLECT2.
+
+ * dbxout.c (dbxout_symbol): Clean up last change.
+
+Wed Apr 22 17:06:16 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rs6000.c (gpc_reg_operand): Renamed from gen_reg_operand.
+ * rs6000.h (PREDICATE_CODES): Likewise.
+ * rs6000.md: Likewise.
+
+ * a29k.c (gpc_reg*_operand): Renamed from gen_reg*_operand.
+ * a29k.h (PREDICATE_CODES): Likewise.
+ * a29k.md: Likewise.
+
+ * romp.c (output_fpop): Extend workaround for RT FP codegen bug.
+
+Wed Apr 22 06:20:09 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * fold-const.c (fold, comparison cases): Use omit_one_operand to
+ yield a simplified result to avoid loosing a side-effect.
+
+Tue Apr 21 13:19:42 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * dbxout.c (dbxout_symbol): For TYPE_DECL, always make requisite tag
+ one way or another even if !have_used_extensions.
+
+ * configure: Specifically detect unrecognized options.
+
+Tue Apr 21 08:16:05 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * c-convert.c (convert_to_integer): Don't distribute a truncation
+ down past an ABS_EXPR.
+
+ * m88k.md (bxx insn): Choose bb0 over bb1 if the branch is likely
+ to fall-through (m88110 optimization).
+ * m88k.c (mostly_false_jump): New function.
+
+ * m88k.h (INIT_SECTION_ASM_OP): Define only for svr3 and svr4 targets.
+
+ * m88k.c (output_call): Use the insn address of the sequence.
+ * m88k.h (ADJUST_INSN_LENGTH): Account for space added at barriers
+ due to ASM_OUTPUT_ALIGN_CODE.
+
+Tue Apr 21 07:30:46 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (mark_jump_label, case MEM): New case to look for label
+ in a constant-pool entry.
+
+Tue Apr 21 00:41:39 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * reg-stack.c (compare_for_stack_reg): link cc0 user and setter
+ before separating them.
+
+ * reorg.c (link_cc0_insns): Move function from here -
+ * emit-rtl.c (link_cc0_insns): to here.
+
+ * i386.h (TARGET_IEEE_FP): New macro.
+ (TARGET_SWITCHES): Add switches for ieee floating point support.
+ (EXTRA_CC_MODES,EXTRA_CC_NAMES): Add CCFPEQmode.
+ (SELECT_CC_MODE): Select CCFPEQmode for FP equality comparisons.
+ (i386_compare_gen*,i386_compare_op*): Declare new variables to
+ generate comparisons from within branch and sCC insns.
+ (RTX_COSTS): Fix argument name typo.
+
+ * i386.c (i386_compare_gen*,i386_compare_op*): Define variables here.
+ (notice_update_cc): Notice if a comparison involves FP values.
+ (output_float_compare): Add support for "unordered" compare.
+ Use output_fp_cc0_set to set flags after a compare.
+ (output_fp_cc0_set): New function.
+
+ * i386.md (tstM,cmpM): New expanders. Don't generate RTL; just
+ save data for when cc0 user is generated.
+ (bCOND,sCOND): New expanders. Generate the compare/test as well
+ as the bCOND or sCOND.
+
+ (tstsf,tstdf): Disable patterns if generating ieee compliant code.
+ (tstsf,tstdf,cmpsf,cmpdf): Use output_fp_cc0_set to set flags
+ after test.
+ Don't change cc_status here: that won't work with REG_CC_SETTER
+ and REG_CC_USER.
+
+ (all COMPAREs): Use CCmode as mode of a COMPARE.
+
+Mon Apr 20 11:17:51 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * limits.h (LONG_LONG_MIN, LONG_LONG_MAX, ULONG_LONG_MAX): New macros.
+
+ * configure: Clear out_file before the big case, like tm_file, etc.
+
+ * expr.c (expand_expr, case LABEL_DECL): Handle label from outer fcn.
+
+Mon Apr 20 10:17:49 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * x-m88kluna: Delete.
+ * x-m88kv3: Renamed from x-m88k.
+ * configure (m88k-*): Rearrange.
+
+Mon Apr 20 21:29:00 1992 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * config-gcc.com: Generate libgcc2.list from Makefile.in
+ * make-l2.com: Use libgcc2.list; supply gcc version number to gas.
+
+ * config-gacc.com: Generate linker options files from Makefile.in
+
+ * make-cc1.com: Use said linker options files instead of static
+ list of files.
+ * make-cc1.com: Handle errors better.
+
+Mon Apr 20 10:05:34 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.md (divmodsi4, udivmodsi4): Remove unneeded PARALLEL. Patch
+ from Richard Kenner.
+
+Mon Apr 20 08:38:26 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * expr.c (expand_expr, case CONSTRUCTOR): For static CONSTRUCTOR,
+ require a valid memory address only if modifier does.
+
+Sun Apr 19 15:09:01 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * genemit.c (gen_insn): Mode of SCRATCH must match in clobber lists.
+
+ * sched.c (add_dependence, remove_dependence): Moved from rtl.c.
+ * rtl.c: Functions deleted here.
+
+ * Make installation of collect2 automatic.
+ * configure: Define use_collect2 for all BSD and Mach and HP/UX
+ configurations, plus the ones below, and a few others.
+ * t-decrose, t-decstatn, t-encrose, t-i386rose, t-mips, t-next:
+ (EXTRA_PROGRAMS): Deleted.
+ * t-apollo68, t-convex, t-dpx2, t-rs6000: Files deleted.
+
+ * libgcc1.c (nongcc_SI_type): Renamed from SItype.
+
+ * recog.c (constrain_operands): Check only earlyclobbers that are REGs.
+
+ * m68k.h (TRANSFER_FROM_TRAMPOLINE): Delete comma in globalize cmd.
+
+ * m68k.md (movhi): Don't use switch_table_difference_label_flag
+ except in ports that need it. (Again!)
+
+Sun Apr 19 14:06:59 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sched.c (sched_analyze_2): Add missing comment close.
+
+ * rtl.c (add_dependence): Make next point to last insn with
+ SCHED_GROUP_P set, not after the last insn with the bit set.
+
+Sun Apr 19 06:06:03 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * genextract.c (walk_rtx): Fix typo in vector case.
+
+ * hppa.h (RTX_COSTS): Add new argument OUTER_CODE.
+
+ * Makefile.in (compare, compare3): Change $file to $$file.
+
+ * romp.h (CONST_CONSTS): Clean up formatting of definition.
+
+ * rs6000.md (extzv): Correct when we can use andi[lu].
+
+Sat Apr 18 21:56:20 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.md (ashldi3): Compact operand numbers.
+
+ From Jeffrey Law:
+ * sparc.md (ldd, std peepholes): New peepholes to recognize cases
+ where two ld (or st) insns could be replaced by a single ldd or std.
+ * sparc.c (registers_ok_for_ldd): New function. Return true if the
+ given register pair is suitable for an ldd or std instruction.
+ (memory_ok_for_ldd): Likewise, but for memory locations.
+
+Sat Apr 18 17:22:32 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-lex.c (skip_white_space): Warn only for first carriage return.
+
+Sat Apr 18 10:08:45 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * genemit.c (struct clobber_ent): New structure.
+ (gen_insn): See if the clobbers required to be added were seen
+ for another insn.
+ (output_add_clobbers): Write case statements for all insn codes
+ using a particular clobber pattern.
+
+ * cse.c (mention_regs): Always retun a value.
+
+ * rs6000.md (call): Compact operand numbers.
+
+ * genextract.c: Now includes insn-config.h.
+ (struct extraction, struct code_ptr): New structures.
+ (gen_insn): Record what extractions are needed and compare with
+ those for previous insns.
+ (mark_operand_seen): Function deleted.
+ (walk_rtx): Use strings as path and just record; don't write.
+ (print_path): Use strings for paths.
+ (copystr): New function.
+ (main): Write out all extractions here.
+ * Makefile.in (genextract.o): Includes insn-config.h.
+
+ * hppa*.h: Change references from hp800* files to hppa*.
+
+ * rs6000.md (lshrdi3, ashrdi3): Fix typos.
+
+ * rs6000.md (extzv): Correctly install last change.
+
+Sat Apr 18 12:37:54 1992 John F Carr (jfc at Achates.mit.edu)
+
+ * expmed.c (store_bit_field): Storing into a bitfield in memory
+ which is the size of a standard machine mode can be done with a
+ simple move instruction.
+
+ * c-lex.c (skip_white_space): carriage return (^M) is whitespace,
+ but warn about ^M if pedantic.
+
+ * cse.c (rtx_cost): New argument OUTER_CODE, the rtx code of the
+ expression in which the rtx argument is contained.
+ * expmed.c (init_expmed): Pass second argument to rtx_cost.
+ * optabs.c (expand_binop, expand_twoval_binop, emit_cmp_insn): Likewise.
+ * loop.c (init_loop, general_induction_var): Likewise.
+ * vax.c (vax_rtx_cost, vax_address_cost): New functions.
+ * vax.h (CONST_COSTS, RTX_COSTS, ADDRESS_COST): Call these
+ functions.
+ * romp.h (CONST_COSTS): Give constants different costs depending
+ on whether they can fit into a 2 byte instruction, a 4 byte
+ instruction, or would require insn splitting to use.
+ * i386.h (CONST_COSTS, RTX_COSTS): Move PLUS case to RTX_COSTS.
+ * m68k.h (CONST_COSTS): Constant in range -254..-136 is only cheap
+ in a move insn, not as an operand to some other instruction.
+ * config/*.h: Update machine descriptions to define CONST_COSTS
+ and RTX_COSTS macros with 3 arguments.
+
+Fri Apr 17 11:14:02 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload.c (safe_from_earlyclobber): New function.
+ * recog.c (constrain_operands): Verify that earlyclobber
+ operands don't conflict with inputs.
+
+ * combine.c (subst, case SUBREG): Don't fold paradoxical SUBREGs
+ of constants.
+
+ * cse.c (fold_rtx, case SUBREG): Extend previous change so it
+ folds widened operations with one operand a constant.
+
+ * expr.c (safe_from_p, case BIND_EXPR): Only look at operand 1.
+
+ * cse.c (fold_rtx, case SUBREG): Don't fold paradoxical SUBREGs.
+ Instead, when we have a narrowing SUBREG, see if it is narrowing
+ the result of a widened arithmetic operation.
+
+Fri Apr 17 09:16:56 1992 Charles Hannum (mycroft@hal.gnu.ai.mit.edu)
+
+ * Makefile.in (install-dir): Don't use '-' prefix on continuation line.
+
+Fri Apr 17 06:52:00 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * toplev.c (rest_of_compilation):
+ If -Wreturn-type, don't stop before jump.c.
+
+ * calls.c (expand_call): Delete unused arg MODIFIER.
+ * expr.c: Arg deleted from calls (those which had it).
+
+ * ns32k.c (print_operand_address): Handle UTEK_ASM.
+ (print_operand): Handle NO_IMMEDIATE_PREFIX_IF_SYMBOLIC.
+ Abort if must get fp number as bits but cannot do so.
+ * ns32k.h (TRAMPOLINE_TEMPLATE): Use PUT_ABSOLUTE_PREFIX.
+ * ns32k.md (call, call_value): Handle ENCORE_ASM.
+ * encore.h (PRINT_OPERAND): Just call print_operand.
+ (CALL_MEMREF_IMPLICIT): Defined.
+
+ * config.sub: encore implies bsd, not sysv.
+
+ * stmt.c (expand_expr_stmt): Handle reference of volatile BLKmode.
+
+ * vax.md (indirect_jump): Delete the extra condition.
+
+ * configure (...-hpux): Set install_with_cp.
+
+ * jump.c (delete_insn): After a label, go past other deleted labels.
+
+ * m68k.md (movhi): Don't use switch_table_difference_label_flag
+ except in ports that need it.
+
+ * stmt.c (warn_if_unused_value): Don't warn for constant after comma.
+ Don't warn for volatile decl or ref.
+
+ * c-typeck.c (build_unary_op): ++ on void * warns if -Wpointer-arith.
+
+Thu Apr 16 22:56:20 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (enum block_move_type): New enumeration for classing what
+ type of block move is used when splitting the last store off.
+ (RTX_COSTS): Don't use -mdebugd to set multiply costs to 2.
+
+ * mips.c (output_movstrsi): Take an additional argument to determine
+ whether this block move is a normal block move, or one that has been
+ split. For the split block moves, there are two parts -- the first
+ part is everything but the last store, and the second part is the
+ last store, suitable to fill a delay slot.
+
+ * mips.md (all define_splits): Don't do any define_split if
+ -mdebugd.
+ (movstrsi_internal*): Add support to split block moves into two
+ pieces, one that is everything except for the last store, and the
+ second piece, which is the last store that can fill a delay slot.
+
+Thu Apr 16 21:52:59 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * x-rs6k-mach: New file.
+ * configure (rs6000-*-mach): Use it.
+
+Thu Apr 16 21:52:17 1992 John F Carr (jfc at Achates.mit.edu)
+
+ * cse.c (cse_end_of_basic_block): Fix test for infinite loop.
+
+Thu Apr 16 21:50:38 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * rs6000.h (bss_section): Delete. No longer needed.
+
+ * a29k.c (print_operand, case 'F'): Always emit insn to fill empty
+ delay slot.
+
+Thu Apr 16 18:45:41 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * cse.c (simplify_ternary_operation): Correctly sign-extend result.
+
+Thu Apr 16 18:43:55 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc-actions.c: Rename OBJC_NONUNIQUE_SELECTORS to
+ OBJC_SELECTORS_WITHOUT_LABELS.
+
+ * c-decl.c (duplicate_decls): Allow extern vs extern inline.
+
+ * c-parse.y (parmlist_or_identifiers_1): Use parmlist_1.
+ * c-decl.c (get_parm_info): Treat forward parm decls like nonparm
+ decls.
+
+ * m68k.md (movhi before dispatch table):
+ Set switch_table_difference_label_flag.
+ * 3b1.h, amix.h, m68ksgs.h (ASM_OUTPUT_CASE_END): Test that flag.
+ Declare the flag.
+
+ * m68k.c (output_function_prologue, print_operand_address): Add
+ HPUX_ASM conds.
+
+ * mips.c (output_block_move): If we get a case we can't handle,
+ don't print anything--just abort, because that implies a bug.
+
+ * c-decl.c (c_decode_option): -ansi sets flag_no_nonansi_builtin,
+ not flag_no_builtin.
+ (init_decl_processing): Check flag_no_nonansi_builtin for alloca, etc.
+
+ * dbxout.c (dbxout_symbol): Make pointer, not reference,
+ when variable's address is in a register.
+
+ * c-decl.c (c_decode_option): Ignore -Wimport, -Wno-import.
+
+Thu Apr 16 16:17:13 1992 Mike Stump (mrs@mole.gnu.ai.mit.edu)
+
+ * merge in Cygnus changes...
+
+ Thu Apr 16 12:23:06 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-call.c (build_method_call): propagate const around to avoid an
+ incorrect error message. This type of fix may now be necessary in
+ other parts of the compiler. This solves all but one known const
+ problems.
+
+ Wed Apr 15 14:18:27 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-type2.c (readonly_warning_or_error): because the compiler
+ is now warning about const alot more, for a release or two,
+ lets just warn about const problems, just in case it is a compiler
+ problem and not a user problem.
+
+ * cp-cvt.c (build_up_reference): Lets get tougher on const problems
+ on COMPONENT_REFs.
+
+ Wed Apr 15 11:59:42 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * cp-decl.c (finish_function): Check for any debug info enabled,
+ not just DBX_DEBUG.
+
+ Wed Apr 15 10:03:36 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-cvt.c (build_up_reference): Propagate const and volatile
+ down into the type so error checking works better.
+
+ Tue Apr 14 11:44:32 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-decl.c (start_decl): Shouldn't use flag_this_is_variable
+ to make what this points to const, but I don't have the heart
+ to do it right now.
+
+ * cp-decl2.c (grokclassfn): Don't use flag_this_is_variable
+ to make what this points to const.
+
+ * cp-typeck.c (convert_arguments): Let build_up_reference handle
+ const errors correctly. Removes April 10 change.
+
+ * cp-cvt.c (build_up_reference): Don't let people subvert const
+ when passing const argements to non-const functions.
+
+ * cp-tree.c (build_cplus_method_type): Don't use
+ flag_this_is_variable to make what this points to const.
+
+ From Wed Apr 1 12:00:59 1992 Chip Salzenberg (chip at tct.com)
+
+ * cp-class.c (import_export_vtable): New function to set
+ TREE_PUBLIC and/or TREE_EXTERNAL on vtables.
+ (build_vtable): Use it.
+ (prepare_fresh_vtable): Use it.
+
+ * cp-decl.c (finish_decl): Don't assume that TREE_PUBLIC means
+ "exported"; it can mean "imported". Decide with TREE_EXTERNAL.
+ (finish_function): Ditto.
+ * cp-decl2.c (write_vtable_entries): Ditto.
+ (finish_vtable_typedecl): Ditto.
+ (finish_vtable_vardecl): Ditto.
+ (finish_file): Ditto.
+
+ * cp-lex.c (set_vardecl_interface_info): Public objects always
+ have TREE_PUBLIC, whether exported or imported.
+ * cp-pt.c (instantiate_member_templates): Ditto.
+
+
+ Fri Apr 10 21:44:15 1992 Per Bothner (bothner@cygnus.com)
+
+ * cp-method.c (build_overload_name): Mangle 'signed char'
+ as 'Sc' (i.e. differently from 'char'!).
+
+ Fri Apr 10 17:38:04 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-typeck.c (convert_arguments): don't allow people to wipe const.
+
+ Thu Apr 9 18:28:36 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-tree.h: Add entry for $vb and $vf so that NO_DOLLAR_IN_LABEL
+ works.
+ * cp-class.c (finish_struct): Use the new macros from cp-tree.h.
+ * cp-tree.c (layout_basetypes): Use the new macros from cp-tree.h.
+
+ Thu Apr 9 02:11:01 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-typeck.c (build_function_call_real): Merge in a change made to
+ the C front end into the C++ front end to handle volatile functions.
+
+ Thu Apr 9 03:45:03 1992 Mark Eichin (eichin at cygnus.com)
+
+ * cp-class.c (finish_struct): sanity check before calling popclass.
+ If we're already hosed due to previous parse errors (specifically,
+ we're not inside a class anymore) just report an error rather than
+ crashing in popclass (if there wasn't a previous parse error, as the
+ message suggests, we should get reports; this closes gcc/p0000525.)
+
+ Wed Apr 8 08:56:49 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Fix an eichin bug introduced seconds
+ ago. Shame, he didn't put:
+
+ Workaround for p869:
+ 1) grokdeclarator (around cp-decl.c:7462) is using popclass(1)
+ uses popclass(1) to close the pushclass(3) done by
+ build_push_scope; however, it's coming around another time and
+ popping all the way out, which leads to the core dump when
+ do_friend is called from global scope (do_friend uses
+ current_class_name to figure out whose friendship it is
+ bestowing.) Current workaround: if (friendp) don't allow
+ popping all the way out. We still need to figure out how to
+ make sure it only gets called the *right* time; we also need
+ to figure out if the correct scope is being used, but that's a
+ matter of regression testing.
+
+ into a ChangeLog entry.
+
+ Wed Apr 8 01:10:44 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-decl.c: Cleanup binding_levels_sane related code. Deleted
+ argument, and changed to void type. Removed extraneous asserts.
+
+ * cp-parse.y: Add fourth parameter to all finish_decl calls.
+ Defaulted the guess to 0.
+ * cp-decl.c: consistently use #if on all PARANOIDs.
+
+Wed Apr 15 14:00:14 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.md (movstrsi_internal): Add '&' constraint on clobbers.
+
+ * mips.c (output_movstrsi): If one of our temporary registers is
+ used as an address register, don't use it and emit a warning. This
+ is a temporary measure.
+
+Wed Apr 15 09:04:22 1992 Richard M. Stallman (rms at lyssenko)
+
+ * xm-ns32k.h (memcpy, memcmp, memset): New macro definitions.
+ * rtl.c (gcc_memset): New function.
+
+Wed Apr 15 09:03:28 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md (umulsidi3): Define for m88110.
+ (unit attribute): Define.
+
+ * x-m88kdgux (INSTALL_HEADERS): Define as empty.
+
+Tue Apr 14 13:28:11 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * c-lex.c (yylex): When warn_traditional, don't abort for harmless
+ type differences. Instead warn of possible problems on other systems.
+
+ * rtl.c (add_dependence): Skip notes when HAVE_cc0.
+ * sched.c (sched_analyze_2): Likewise.
+
+ * sparc.md (movdf-1): Delete special case for moving 0.0 to integer
+ registers; it resulted in poor code.
+ (fix_truncdfsi2+1): Add patterns to optimize float->fix and
+ float->fix->float conversions.
+ * sparc.c (output_move_double): Clean up ldd/std code. Don't emit
+ ldd/std for obviously unaligned address even when TARGET_HOPE_ALIGN.
+ (output_fp_move_double): Call output_move_double for MEM cases.
+ It is not safe to assume double reg addresses are always aligned.
+
+Tue Apr 14 07:55:47 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * *hp800*, *hp700*: Rename to *hppa* and *hppa1.1*, respectively.
+ * config.sub: Recognize PA model numbers for PA 1.0 and 1.1.
+ Disable "hppa" with no model number.
+ * configure: Update for new PA file names and basic_machine names.
+ * README-PA-HPUX: New name for README-PA-RISC, with some corrections.
+
+Tue Apr 14 05:46:37 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * Makefile.in ("if" and "["): Romp, 4.3 BSD, and Ultirx systems
+ fail when the condition is false. Change troublesome instances to
+ either use "case" or use '-' as a prefix to the compilation rule.
+
+Mon Apr 13 18:20:56 1992 Mike Stump (mrs@cygnus.com)
+
+ * dwarfout.c: Add default definition for ASM_OUTPUT_ASCII
+ as that is what varasm.c does now. This really maybe should go
+ into a file like tree.h or some machine independant file, for
+ maintainability.
+
+Mon Apr 13 18:16:32 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sun3.h, sparc.h (LINK_SPEC): Change nostdlib to !nostdlib.
+
+Mon Apr 13 07:17:36 1992 John F Carr (jfc at Achates.mit.edu)
+
+ * rs6000.md (extzv): Generate andi[ul] when practical.
+
+Mon Apr 13 07:17:36 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (rtx_cost, case SUBREG): If modes can't be tied, make
+ expensive.
+ (cse_insn): Make extra entries when DEST is a multi-word SUBREG
+ as long as it is the same number of words as its inner REG.
+
+ * emit-rtl.c (gen_lowpart_common): Handle casting integer to
+ float and vice versa.
+
+ * emit-rtl.c (gen_lowpart_common): Rework code to truncate a
+ constant so we don't convert negative values into positive values;
+ use same code as in simplify_binary_operation in cse.
+
+Mon Apr 13 07:16:56 1992 Richard M. Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * cccp.c (handle_directive): When find quote during copying,
+ give bp as limit arg in skip_quoted_string.
+ When find \ while copying, copy next char without special handling.
+
+Mon Apr 13 06:57:18 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88kv3.h (CTOR_LIST_BEGIN): Avoid complex #if.
+
+ * tree.h (saved_insns): Make this a union holding an rtx or an int.
+ (DECL_FIELD_SIZE): New macro for overloaded uses of DECL_FRAME_SIZE.
+ * c-decl.c (finish_struct): Use DECL_FIELD_SIZE for bitfields.
+ * cp-class.c (finish_struct): Ditto.
+ * objc-actions.c (objc_copy_list, encode_field_decl): Ditto.
+ * stor-layout.c (layout_decl): Ditto.
+
+Sun Apr 12 17:46:30 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * expr.c (expand_builtin, case SQRT): Don't defer popping args on
+ function calls, as the call might be deleted.
+
+ * i386.c (print_operand): Delete references to unused codes.
+ Abort if an unrecognized code is seen.
+
+ * i386.md (bit opcode recognizers): Accept starting bit numbers
+ that are constants but not CONST_INT.
+ (QI/HI register bit test): Delete.
+ (SImode bit test): Don't accept CONST_INT starting bit number.
+
+Sun Apr 12 17:05:25 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rs6000.h (ADDITIONAL_REGISTER_NAMES): Add "cc" as alias for cr0.
+
+ * cse.c (equiv_constant): See if a MEM is foldable or has a
+ constant equivalent.
+
+ * expr.c (store_constructor): If building a static constructor
+ into a register, start out by zeroing the register so we can
+ constant-fold the constructor to a single constant.
+ (expand_expr, case CONSTRUCTOR): Don't write constant objects
+ into memory if the target is a register.
+ (expand_expr, case *_REF): Simplify getting field or array
+ entry from a CONSTRUCTOR.
+ Don't use value of const array unless -O.
+
+Sun Apr 12 14:15:33 1992 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * Makefile.in (compare, compare3): New targets.
+ (mostlyclean): Delete temporary files made by those targets.
+
+ * stmt.c (expand_asm_operands): Ignore `cc' as clobbered reg if name
+ not known.
+ * varasm.c (decode_reg_name): Ret -3 if `cc' not recognized.
+ (make_decl_rtl): Understand -3 as value.
+
+ * configure (i386-sequent-bsd*): Use collect2.
+
+Sun Apr 12 13:28:00 1992 Niklas Hallqvist (niklas@appli.se)
+
+ * configure: Correctly interpret use_collect2.
+
+Sun Apr 12 10:34:58 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * c-typeck.c (digest_init): Use INIT to pass to convert_for_assignment
+ for a raw constructor.
+
+ * fold-const.c (fold, case COND_EXPR): Get the type right when
+ the test is folded away.
+
+ * loop.c (strength_reduce): Correct off-by-one error in INSN_LUID
+ safety check.
+
+ * stor-layout (layout_record, layout_union): When limiting the
+ effect of PCC_BITFIELD_TYPE_MATTERS to bitfields, use
+ DECL_BIT_FIELD_TYPE to determine if it was a bitfield.
+
+Sat Apr 11 19:54:00 1992 Per Bothner (bothner@wombat.gnu.ai.mit.edu)
+
+ * config.sub: Don't "standardize" an os of newsos* to bsd
+ (it breaks gdb/readline/configure.in, which checks for newsos*).
+
+Sat Apr 11 16:32:21 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * Makefile.in: Remove spaces after reg-stack.o deps.
+
+Sat Apr 11 16:32:15 1992 Michael Meissner (meissner@osf.org)
+
+ * c-decl.c (init_decl_processing): Make -fno-builtin supress all
+ builtin functions in the user's name space like memcpy, strlen,
+ etc.
+
+Sat Apr 11 14:00:53 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rs6000.h (LEGITIMIZE_ADDRESS): Add missing force_reg call.
+ Jump to WIN when we do something.
+
+ * rs6000.c (non_{short,add,logical,and}_cint_operand): New functions.
+ * rs6000.h (PREDICATE_CODES): Add these predicates.
+ * rs6000.md (addsi3, andsi3, iorsi3, xorsi3, cmpsi3): Remove
+ define_expands; instead, add define_split for long constants.
+
+ * combine.c (try_combine): Try to split the pattern using
+ split_insns before trying find_split_point.
+ (find_split_point, case MEM): Try to split an invalid address that
+ is a PLUS with a CONST_INT.
+
+ * combine.c (try_combine): Correctly check if an auto-inc
+ side-effect has been duplicated.
+
+ * expr.c (expand_expr, case PARM_DECL): Return zero of proper mode
+ if no DECL_RTL.
+
+ * tree.c (save_expr): Must do something with read-only tree that
+ has side-effects.
+ (stabilize_reference_1): Don't ignore read-only trees.
+
+ * reload.c (find_replacement): New function.
+ * reload.h (find_replacement): Declare it.
+ * reload1.c (gen_input_reload): Use it to ensure substitutions
+ get done if we need to recreate a PLUS.
+
+Sat Apr 11 14:00:02 1992 John F Carr (jfc at Achates.mit.edu)
+
+ * cse.c (cse_end_of_basic_block): Don't stop scanning insns if a
+ jump is found that can't be followed.
+
+ * genextract.c: Make insn_extract copy the address of
+ recog_operand and recog_operand_loc into register variables.
+
+Sat Apr 11 13:59:17 1992 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * c-parse.y (stmt): Parse entire parens of `for'
+ before actually starting the loop.
+
+Sat Apr 11 10:35:06 1992 Jeffrey A. Law (law@mole.gnu.ai.mit.edu)
+
+ * caller-save.c (restore_referenced_regs): Do not call XEXP on
+ reg_equiv_address since reg_equiv_address is already an address.
+
+ * expr.c (expand_builtin, case SQRT): Note the dangers involved in
+ changing the argument test condition.
+
+ * m68k.md (sqrtdf2): New pattern to take advantage of the 68881
+ sqrt function.
+
+Fri Apr 10 18:37:08 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * hp800.c (output_function_epilogue): Output code to restore gr2 in
+ non-frame-pointer case correctly.
+
+Fri Apr 10 15:24:57 1992 Michael Meissner (meissner@osf.org)
+
+ * decrose.h (TARGET_MEM_FUNCTIONS): Define, memcpy/memset are
+ provided.
+
+ * i386rose.h (TARGET_MEM_FUNCTIONS): Define, memcpy/memset are
+ provided.
+
+ * encrose.h (TARGET_MEM_FUNCTION): Define, memcpy/memset are
+ provided.
+
+ * mips-tfile.c (copy_object): Omit the test for zero flags, since
+ MIPS vendors are now putting bits in there.
+
+ * mips-svr4.h (HAVE_ATEXIT): Define, atexit is provided.
+ (TARGET_MEM_FUNCTIONS): Define, memcpy/memset are provided.
+
+ * mips-sysv.h (TARGET_MEM_FUNCTIONS): Define, memcpy/memset are
+ provided.
+
+ * mips-news5.h (TARGET_MEM_FUNCTIONS): Define, memcpy/memset are
+ provided.
+ (getpagesize): Define a getpagesize that uses sysconf, just like the
+ MIPS V.4 port.
+
+ * mips.c (output_block_move): Don't emit ulw/usw if GAS is the
+ assembler, use the lwl/lwr/swl/swr building blocks instead, since
+ GAS doesn't yet support the ulw/usw macro instructions.
+
+ * configure (mips-sgi-irix4): Use config/iris4.h instead of
+ config/iris.h.
+
+ * iris4.h (new file): Just like iris.h, atexit is provided (unlike
+ IRIX revision 3).
+
+ * iris.h (TARGET_MEM_FUNCTIONS): Define, memcpy/memset are provided.
+
+Fri Apr 10 11:59:02 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (cmpstr patterns): Correctly handle zero length
+ compares. Rewrite to avoid needing scratch register.
+
+Thu Apr 9 14:05:04 1992 Michael Collison (collison at osf.org)
+
+ * i386rose.h (ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE): Fix these to
+ avoid printing NaNs, and infinity.
+
+Thu Apr 9 11:34:31 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88kluna.h (DEFAULT_GDB_EXTENSIONS): Define as 0.
+
+Wed Apr 8 20:21:59 1992 Michael Meissner (meissner@osf.org)
+
+ * halfpic.c (all functions): Add a hash table for the lookup instead
+ of linear search. Don't use bits in the IDENTIFIER node, store the
+ information in the hash table. Always rebuild the SYMBOL_REF
+ returned by half_pic_ptr, instead of storing it away, since the RTL
+ gets reused at the end of the function.
+ (half_pic_declare): New function, called when a label is laid down
+ to say that it is no longer half-pic.
+
+ * halfpic.h (half_pic_declare, HALF_PIC_DECLARE): Add function
+ defintion, and accessor macro.
+
+ * mips.h (HALF_PIC_DECLARE): Add dummy macro if not OSF/rose.
+ (ASM_DECLARE_OBJECT_NAME): Invoke HALF_PIC_DECLARE on name.
+ (ASM_DECLARE_FUNCTION_NAME): Ditto.
+ (*_SECTION_ASM_OP): Put the leading tab back in.
+
+ * mips.md (dslot attribute): 'pic' type requires a delay slot, since
+ it is really a load.
+ (movsi): Make movsi a define_expand, and if it's moving the address
+ of a half-pic item into a register, convert it into a load.
+ (movsi_internal): The old movsi define_insn renamed.
+ (movstrsi_internal): Add '=' constraint on all stores and clobbers.
+
+ * decrose.h (LINK_SPEC): If not -noshrlib or -pic-none, pass
+ -warn_nopic. Allow user to pass -noshrlib directly.
+
+Wed Apr 8 00:11:56 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.h (MOVE_MAX): Set to 8 instead of 4.
+
+ * sched.c (sched_analyze_2): Don't abort if find note before a CC0
+ using insn.
+
+ * sparc.h (ADDITIONAL_REGISTERS_NAMES): Add. Define fake reg name
+ ccr, for use in asm clobbers.
+
+ * sparc.h (TARGET_FORCE_ALIGN): Add comment explaining that it
+ is for experimental purposes only.
+ (FIRST_PARM_OFFSET): Add 4 when TARGET_FORCE_ALIGN to ensure that
+ stack is double-word aligned.
+ (FIRST_PARM_CALLER_OFFSET): Delete obsolete macro.
+
+ From Tom Wood:
+ * unroll.c (final_giv_value): Put the subtracts in the right place.
+
+ * sparc.c (compute_last_arg_offset): Delete, no longer needed.
+ (FRAME_POINTER_REQUIRED): Do not depend on frame size.
+
+Tue Apr 7 22:36:33 1992 Michael Meissner (meissner@osf.org)
+
+ * halfpic.c (whole file): Flesh out initial half-pic implementation
+ for the OSF/1 reference ports. This is still a work in progress.
+
+ * halfpic.h (toplevel): Add declarations for half_pic_finish and
+ half_pic_ptr. Add macros HALF_PIC_FINISH, HALF_PIC_PTR, and
+ HALF_PIC_PREFIX.
+
+ * mips.h (call_memory_operand): Delete call_memory_operand
+ function declaration.
+ (PREDICATE_CODES): Ditto.
+ (CONSTANT_ADDRESS_P): Correctly reject half-pic addresses.
+
+ * mips.c (call_memory_operand): Delete function.
+
+ * mips.md (call* patterns): Use memory_operand instead of
+ call_memory_operand for predicates. Use the test not register and
+ not CONSTANT_ADDRESS_P instead of call_memory_operand in the
+ define_expand body to test whether the function address needs to be
+ forced to a register.
+
+ * decrose.h (HALF_PIC_DEBUG): Define as true if -mdebugb, to debug
+ the half-pic code, just like debugging normal addressing.
+ (CPP_SPEC): Use the __<name>__ form of the language macros instead
+ of __<name>.
+ (LINK_SPEC): If -pic-lib and not -noshrlib, pass -warn_nopic.
+ (LIB_SPEC): Don't pass -L/usr/ccs/lib.
+
+ * x-decrose (CCLIBFLAGS): Pass -pic-extern when building libgcc1.a.
+ (LIBGCC2_CFLAGS): Pass -pic-extern when building libgcc2.a.
+
+Tue Apr 7 19:00:56 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * xm-m88k.h (NO_SYS_SIGLIST): Not provided by the 88open standards.
+
+ * m88k.c (output_ascii): Generalize to support ident
+ * m88k.h (ASM_OUTPUT_IDENT, ASM_OUTPUT_ASCII): Use output_ascii.
+
+ * m88k.c, m88k.md, m88k.h: Integrate all changes to support the m88110.
+
+Mon Apr 6 22:51:02 1992 John Wroclawski (jtw@lcs.mit.edu)
+
+ * mips-tfile.c (read_seek): Fix argument order in calls to
+ fatal.
+
+Mon Apr 6 21:17:38 1992 Mike Stump (mrs@albert.gnu.ai.mit.edu)
+
+ * merged in Cygnus sources.
+
+ Mon Apr 6 15:26:09 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-spew.c (hack_more_ids): Reimplement. Change from Niklas
+ Hallqvist.
+
+ Thu Apr 2 02:36:36 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-*: Simplify DECL_NAME (TYPE_NAME into TYPE_IDENTIFIER.
+
+ * cp-call.c (build_method_call): Fix an error message.
+
+ * cp-parse.y (LC): Renamed to left_curly.
+ (TYPENAME_SCOPE): Renamed to typename_scope.
+
+Mon Apr 6 14:04:49 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.h (TARGET_HOPE_ALIGN): Fix typo, `-fast' -> `-dalign'.
+
+ * expr.c (expand_expr, INDIRECT_REF case): Set MEM_IN_STRUCT_P if
+ this is an indirect of the address of an array, struct, or union.
+
+ * jump.c: Delete declaration of squeeze_notes.
+ (jump_optimize): Use new return value from squeeze_notes.
+ (squeeze_notes): Handle the case where START may be a note that
+ must be moved outside the range. Now returns the new start value.
+ * loop.c (find_and_verify_loops): Use squeeze_notes return value.
+ * stmt.c (expand_end_case): Call squeeze_notes before reorder_insns.
+ * rtl.h: Declare squeeze_notes.
+
+ * rs6000.h (PTRDIFF_TYPE): Define to int.
+
+ Mostly from tege@sics.se:
+ * sparc.c (eligible_for_epilogue_delay): Clarify comment. Delete
+ unreachable test of leaf_function.
+ (singlemove_string): Correct test for when can use sethi alone.
+ (output_function_prologue): Declare leaf_function. More
+ efficiently frame sizes greater than 4095. Correctly handle leaf
+ functions with frame greater than 4095.
+ (output_function_epilogue): Likewise.
+ (output_return): Likewise.
+
+Mon Apr 6 10:11:08 1992 Tim Moore (moore@defmacro.cs.utah.edu)
+
+ * config.sub : Add hp700 cpu type.
+ * configure : Make hp700-bsd and hp700-hpux cases, with use of gas
+ an option.
+ * hp700hpuxg.h, hp800hpuxg.h : New files for using gas under hpux.
+ * hp800.h (REGISTER_NAMES): Change to use %r style register names;
+ required to name PA-RISC 1.1 fp registers.
+ * x-hp800hpux : Don't invoke the assembler to compile alloca.c.
+ * README-PA-RISC: New file.
+
+Mon Apr 6 08:00:06 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c (relax_delay_slots): Don't get confused when a label
+ becomes zero (meaning end of function).
+
+Sun Apr 5 13:45:37 1992 Ron Guilmette (rfg at ncd.com)
+
+ * i860.md (floatsidf3): Fixed to expand to a correct insn sequence.
+
+Sun Apr 5 12:33:02 1992 John F Carr (jfc at Achates.mit.edu)
+
+ * rs6000.h (EXTRA_CC_MODES, EXTRA_CC_NAMES): Add CCEQmode.
+ (SELECT_CC_MODE): Select it for equality comparison of comparison.
+ * rs6000.c (scc_comparison_operator): Reject improper use of
+ CCEQmode.
+ (ccr_bit): Handle CCEQmode, where bit is always third in field.
+ (print_operand, case 'E'): New case.
+ * rs6000.md: New pattern to compare two comparisons with
+ creqv/crxor.
+ Add peephole for two consecutive scc insns.
+
+ * combine.c (subst, case FFS): (ffs (*_extend X)) -> (ffs X)
+ (make_compound_operation): Handle (and (rotate X C) M).
+
+ * flags.h (flag_cse_skip_blocks): New variable.
+ * toplev.c (flag_cse_skip_blocks): Define it here.
+ (f_options): Add it to table.
+ (main): -O2 turns it on.
+ * cse.c (invalidated_skipped_{set,block}): New functions.
+ (enum taken): New value, AROUND.
+ (cse_end_of_basic_block): New argument SKIP_BLOCKS. If it is
+ nonzero, follow a branch around a block of code which contains
+ no labels and set status = AROUND for the jump.
+ (cse_main): Pass FLAG_CSE_SKIP_BLOCKS argument to
+ cse_end_of_basic_block.
+ (cse_basic_block): If jump status is AROUND, call scan_skipped_block
+ before following jump.
+
+Sun Apr 5 04:16:46 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * optabs.c (emit_cmp_insn): Add missing parameter type declaration.
+
+ * expr.c (expand_builtin, case SQRT): Fix typo emitting insns.
+ Reformat to look like the rest of gcc. Use accessor macros to
+ access fields of an RTX. Make comments match code.
+
+ * i386.md (cmpstr patterns): Handle zero length compares.
+
+Sat Apr 4 04:40:58 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload.c (find_equiv_reg): Avoid passing zero to true_regnum.
+
+ * expr.c (expand_expr, case COMPONENT_REF): Handle case where we
+ are extracting a field of a constant.
+
+ * a29k.h ({TEXT,READONLY_DATA,DATA}_SECTION_ASM_OP): Put tab back.
+
+ * rs6000.c (output_epilog): Reduce number of lines generated to
+ write traceback table.
+
+ * combine.c (move_deaths): A destination is used in this insn
+ unless is it completely overwritten.
+
+Sat Apr 4 04:39:16 1992 John Carr (jfc at ATHENA.MIT.EDU)
+
+ * expmed.c (store_bit_field, extract_bit_field): Remove redundant
+ tests for MEM.
+
+ * c-common.c (binary_op_error): Handle FLOOR_DIV_EXPR, FLOOR_MOD_EXPR,
+ *ROTATE_EXPR.
+ * c-typeck.c (build_binary_op): Handle FLOOR_MOD_EXPR.
+
+Sat Apr 4 00:29:40 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (c_decode_option): `-' was missing in -Wno-redundant-decs.
+
+ * Makefile.in (USE_COLLECT2, MAYBE_USE_COLLECT2): New variables.
+ (GCC_PARTS, native, install-common): Use USE_COLLECT2.
+ (toplev.o): Use MAYBE_USE_COLLECT2.
+ * configure: Let particular cases set use_collect2
+ and have that control use of collect2 through editing Makefile.
+ Handle --with-gnu-as and --with-gnu-ld options. Ignore --with-*.
+ --with-gnu-ld turns off use_collect2.
+ * i386rose.h (CC1PLUS_SPEC): Deleted.
+
+ * gcc.c (do_spec_1): In case 'D', strip final / from prefixes.
+
+ * c-decl.c (push_c_function_context): Add pedantic warning.
+
+ * collect2.c (main): Figure STANDARD_EXEC_PREFIX into clen.
+
+ * c-typeck.c (get_spelling): Move alloca outside fn call.
+
+Fri Apr 3 16:36:54 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * varasm.c (output_constant_def): Set MEM_IN_STRUCT_P if nec.
+
+Fri Apr 3 05:32:39 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * m88k.md (call_block_move{,_loop}): Don't write USE for regs
+ we don't set; remove unneeded CLOBBERs for call-used registers.
+
+ * caller-save.c (insert_save_restore): Abort rather than writing
+ out an insn having a null source or destination.
+
+ * explow.c (allocate_dynamic_stack_space): Don't reference
+ STACK_BOUNDARY if it isn't defined.
+
+ * explow.c (allocate_dynamic_stack_space): Don't use TARGET if it
+ isn't a pseudo reg.
+
+Fri Apr 3 01:50:57 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixinc.svr4: Don't reconvert __i386 if have _ after.
+
+ * c-decl.c (grokdeclarator): Use size_binop to get array hbound - 1.
+
+ * enquire.c: Include sys/types.h.
+
+ * c-typeck.c (check_format): Don't use type name for integer types
+ or pointers to them.
+
+ * explow.c (allocate_dynamic_stack_space): New arg KNOWN_ALIGN.
+ All callers changed.
+
+Thu Apr 2 15:24:38 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * dbxout.c (dbxout_type): Output just xref for var-size struct/union.
+
+ * reload.c (find_equiv_reg): In previous change, verify valtry != 0.
+
+Thu Apr 2 08:34:38 1992 Michael Meissner (meissner@osf.org)
+
+ * iris.h (SIZE_TYPE): Make type unsigned int, not unsigned long.
+ (PTRDIFF_TYPE): Define to be 'int', not 'long int'.
+ (WCHAR_TYPE): Define to be 'unsigned char', not 'int'.
+ (WCHAR_TYPE_SIZE): Define to be 8, not 32.
+
+Thu Apr 2 06:01:07 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (fold, case COND_EXPR): Add missing test for zero.
+
+ * expr.c (expand_expr, case ARRAY_REF): Handle case of constant
+ array whose initializer is a string.
+
+ * optabs.c (emit_libcall_block): Don't move up insns that set
+ pseudos whose old values are used in previous insns.
+
+ * genattrtab.c (attr_rtx): Add some casts to int from enum rtx_code.
+
+Thu Apr 2 04:20:30 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * xm-mipsnbsd.h: New file.
+ * configure (mips-sony-bsd*): Use that.
+
+ * stmt.c (expand_end_case): Move the convert_to_mode after emit_queue.
+
+Thu Apr 2 00:49:18 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * stmt.c (expand_end_case): Fix typo.
+
+Wed Apr 1 19:01:00 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fold-const.c (size_int): Always switch to permanent_obstack
+ to make a node that will be saved
+
+Wed Apr 1 15:36:19 1992 Michael Meissner (meissner@osf.org)
+
+ * xm-irix4.h (alloca.h): Don't include <alloca.h> if not using the
+ GNU compiler, since the Silicon Graphics compiler's alloca complains
+ if the result of alloca is stored in something that is not a simple
+ variable. Just use the C version of alloca.c.
+
+Wed Apr 1 14:42:24 1992 Torbjorn Granlund (tege@mole.gnu.ai.mit.edu)
+
+ * pyr.md (HImode compare recognizers): Don't match if subsequent
+ branch has unsigned predicate.
+
+Wed Apr 1 14:20:13 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.c (output_function_epilogue): Drop unused true_epilogue
+ parameter. Delete obsolete tail-call support code, which worked
+ by passing -1 for leaf_function.
+ (tail_call_valid_p): Delete obsolete function.
+ (output_tail_call): Likewise.
+ * sparc.h (TARGET_TAIL_CALL): Delete obsolete option.
+ (FUNCTION_EPILOGUE): Fix call to output_function_epilogue.
+ * sparc.md (tail_call): Delete obsolete pattern.
+
+ * rs6000.c (output_epilogue): Output a traceback table.
+
+Wed Apr 1 06:42:54 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.h: Override ASM_OPs added to svr4.h.
+
+Wed Apr 1 03:12:44 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * emit-rtl.c (operand_subword): Swap words from const_double if nec
+
+ * ns32k.h (GO_IF_INDEXING): New arg MODE; caller changed.
+ Pass to INDEX_TERM_P.
+
+Tue Mar 31 18:10:10 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * genattrtab.c (check_attr_value): Fix some backwards tests.
+
+ * expr.c (move_by_pieces{,_ninsns}): Only look at MODE_INT modes.
+
+ * fold-const.c (fold, case COND_EXPR): Fix typo in last change.
+
+ * stor-layout.c (layout_record): Add missing call to size_int.
+
+ * expr.c (do_store_flag): Handle case where EXP is a TRUTH_NOT_EXPR.
+
+Tue Mar 31 17:18:20 1992 Jeffrey A. Law (law@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (init_decl_processing): Enable `sqrt'.
+ * expr.c (expand_builtin, case SQRT): By default check that the
+ argument to sqrt is in sqrt's domain. If the argument is not in the
+ domain, then call the library function. Skip argument checking if
+ -ffast-math is in use.
+
+ * flags.h (flag_fast_math): Declare new variable.
+ * toplev.c (f_options): Add flag_fast_math to table.
+
+Tue Mar 31 17:11:09 1992 Per Bothner (bothner@wombat.gnu.ai.mit.edu)
+
+ * cccp.c: Add new flag -nostdinc++ to disable searching
+ standard C++-specific include directories. This is useful
+ for building libg++.
+ * gcc.c: Pass -nostdinc* to cpp, not just -nostdinc.
+ * cpp.texi: Document -nostdinc++.
+
+Tue Mar 31 15:32:34 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (link_command_spec): Use %l before %X.
+
+ * svr4.h (MULTIBYTE_CHARS): Turned off.
+
+ * sun3.h, sparc.h (LINK_SPEC): Inhibit -e if -nostdlib.
+
+ * collect2.c (my_strerror): Renamed from strerror.
+
+ * reload.c (find_equiv_reg): Find constants in REG_EQUIV notes.
+
+ * m68k.h (PRINT_OPERAND_PRINT_FLOAT): Fix typo in #ifdef.
+
+ * Makefile.in (install-dir): Create include subdir.
+
+Tue Mar 31 18:03:21 1992 Thorsten Ohl (ohl@apollo.desy.de)
+
+ * x-apollo68 (CFLAGS, LIBGCC2_CFLAGS): Defined.
+ * t-apollo68: new file, use collect2.
+ * configure: use `t-apollo68'.
+
+ * apollo68.h (ASM_SPEC): Delete -C.
+ (STRUCT_VALUE_INCOMING): Now 0.
+ (HAVE_ATEXIT): Defined.
+ (PROMOTE_PROTOTYPES): Delete #undef.
+ (USER_LABEL_PREFIX): Undef.
+ (LOCAL_LABEL_PREFIX, REGISTER_PREFIX, REGISTER_PREFIX_MD): Override.
+ (ASM_RETURN_CASE_JUMP): Defined.
+ (REGISTER_NAMES): Override.
+
+Tue Mar 31 14:59:53 1992 Tim Moore (moore@defmacro.cs.utah.edu)
+
+ * hp800.md (movsi+4, call_value+1): Add x,y constraints for Snake
+ fp registers.
+ * hp800.h (INITIAL_FRAME_POINTER_OFFSET): Fix for Snake stack
+ alignment.
+ (REGNO_OK_FOR_INDEX_P, REGNO_OK_FOR_BASE_P): Fix for Snake fp
+ registers.
+ * hp800.c (output_function_prologue): Align stack for Snakes.
+ (output_arg_descriptor): Fix Snake typos.
+
+ * hp700.h, hp700hpux.h : New files
+ (TARGET_DEFAULT): Emit Snake code by default.
+ * hp700hpux.h (HP_FP_ARG_DESCRIPTOR_REVERSED): Define to work
+ around assembler syntax difference between 700 and 800 series HPUX.
+ * hp800.h (ASM_DOUBLE_ARG_DESCRIPTORS): Conditionalize on the
+ above symbol.
+
+Tue Mar 31 09:58:52 1992 Michael Meissner (meissner@osf.org)
+
+ * mips-sysv.h (getpagesize): When compiling the trampoline code,
+ define a macro getpagesize which uses the POSIX sysconf function.
+
+ * mips-svr4.h (getpagesize): When compiling the trampoline code,
+ define a macro getpagesize which uses the POSIX sysconf function.
+
+Mon Mar 30 19:25:48 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * loop.c (strength_reduce): In recent maybe_multiple code, only
+ apply INSN_LUID to insn when safe.
+
+Mon Mar 30 17:24:33 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.c (output_block_move): Fix typos that would generate
+ incorrect code if either the source or destination is a global or
+ static memory address. Increment appropriate -mstats counters.
+
+ * x-iris (INSTALL): Use cp to install stuff, not install -c.
+
+Mon Mar 30 16:39:28 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * m68k.md: Use `\;', not `;', to separate insns.
+
+ * toplev.c (main): Add cast when setting debug_info_level.
+
+ * m68k.h (GLOBAL_ASM_OP): New macro.
+ (ASM_GLOBALIZE_LABEL): Use that.
+ * hp320.h, m68ksgs.h, mot3300.h (GLOBAL_ASM_OP): Override this.
+ (ASM_GLOBALIZE_LABEL): Not this.
+
+ * libgcc2.c (__builtin_saveregs) [sparc]: Define both assembler labels
+ __builtin_saveregs and ___builtin_saveregs, to handle all systems.
+
+ * m68k.h (TRANSFER_FROM_TRAMPOLINE): Add a globalize command.
+ (TRAMPOLINE_TEMPLATE): Make the JSRs really JSRs.
+ Always use precisely ___trampoline.
+
+Mon Mar 30 07:17:50 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (inc_for_reload): Declare CODE consistently.
+ (constraint_accepts_reg_p): Add missing cast.
+
+ * fold-const.c (fold, case TRUTH_ANDIF_EXPR): Fix typo in last change.
+
+Mon Mar 30 01:07:33 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * rtl.h: Don't continue #if lines.
+
+Mon Mar 30 03:30:54 1992 Mike Stump (mrs@cygnus.com)
+
+ * Merge in Cygnus cp-* sources, below are the ChangeLog entries from
+ the Cygnus ChangeLog file. Note, I am experimenting with a slightly
+ different format, as Tiemann would like the dates to remain intact,
+ but Stallman does not want the dates out of order and would rather
+ have the entries altogether anyway.
+
+ Sun Mar 29 16:57:31 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Handle typedef before other
+ specifiers, as typedef is now more complex in c++ than in c.
+
+ Sun Mar 29 12:00:03 1992 Michael Tiemann (tiemann@cygnus.com)
+
+ * cp-decl.c (start_function): Always set TREE_PUBLIC if DECL1 is
+ part of any interface.
+
+ * cp-cvt.c (convert_to_reference): Don't type to convert a type to
+ itself.
+ (build_type_conversion): Don't look for alternatives to default
+ type conversion except to integral and real types. Fixes bug
+ exposed in 19 March change.
+
+ Tue Mar 24 07:53:46 1992 Michael Tiemann (tiemann@cygnus.com)
+
+ * cp-tree.c (lvalue_p): POST{INC,DEC}REMENT_EXPR is not an lvalue.
+ * cp-typeck.c (build_modify_expr): Ditto.
+
+ * cp-init.c (emit_base_init): If debugging, force out a line note so
+ we can step into ctors for base initializers.
+ (build_virtual_init): Note that we need to do some more work to
+ handle replicated base classes in multiple inheritance lattices.
+
+ Mon Mar 23 00:33:35 1992 Michael Tiemann (tiemann@cygnus.com)
+
+ * cp-init.c (expand_aggr_init_1): Finish Mar 15 change concerning
+ INDIRECT_REFs that have TREE_HAS_CONSTRUCTOR set.
+
+ * cp-call.c (build_overload_call_real): Ensure FINAL_CP->EVIL is set
+ when FINAL_CP is non-NULL and we encounter an ERROR_MARK_NODE in the
+ operands we are processing.
+
+ * cp-cvt.c (convert_to_reference): Propagate ERROR_MARK_NODE from
+ failed type conversions.
+
+ Sun Mar 22 20:01:51 1992 Michael Tiemann (tiemann@cygnus.com)
+
+ * cp-init.c (is_aggr_typedef): Don't give an error message if NAME
+ is ERROR_MARK_NODE.
+
+Sun Mar 29 09:29:10 1992 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * make-gcc.com: Remove patch from March 7.
+
+ * make-l2.com: Use compiler that was just built, if available,
+ otherwise use system compiler if it is version 2.
+
+Sun Mar 29 19:53:33 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * fold-const.c ({invert,swap}_tree_comparison): New functions.
+ (comparison_equiv_p): Deleted.
+ (operand_equal_for_comparison_p): New function.
+ (invert_truthvalue): Use invert_tree_comparison.
+ (fold): Use variables T1 and TEM consistently.
+ Don't mix arg[01] and TREE_OPERAND (t, [01]); they aren't
+ identical.
+ (fold, comparison cases): Use new functions to adjust comparison
+ codes; add var INVERT.
+ Convert f >= f to f == f for FP and similar.
+ Correctly compute FP <= and >= when one arg is a NaN.
+ Clean up handling of constant results.
+ (fold, case COND_EXPR): Rework considerably to catch more forms
+ of abs, min, max, and -abs and also clean up; use new function
+ operand_equal_for_comparison_p.
+
+Sun Mar 29 00:00:35 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cse.c (simplify_relational_operation): Arg ptr reg may be 0.
+
+ * gcc.c: Always define R_OK, etc. if system headers don't.
+
+ * c-parse.y (maybe_attribute): Accept `mode (m)' attribute.
+ * c-common.c (decl_attributes): Handle that attribute.
+
+ * tower.h (REGISTER_NAMES): Discard the fpa regs.
+ * tower-as.h (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE):
+ Don't handle fpa regs.
+ (PUT_SDB_START_DIM, PUT_SDB_NEXT_DIM, PUT_SDB_LAST_DIM):
+ New macros.
+ (PUT_SDB_DIM): Deleted.
+
+ * m68k.h (RTX_COSTS): Smaller multiply costs on 68040.
+
+ * stmt.c (expand_end_case): Reduce amount of specific modes
+ used in handling casesi.
+
+ * collect2.c (savestring): Copy only SIZE bytes of string.
+
+ * gstddef.h: Handle __need_size_t, __need_wchar_t, __need_ptrdiff_t,
+ and _need_null.
+
+ * c-typeck.c (digest_init): Save INIT with nops not stripped
+ to pass to convert_for_assignment.
+
+Sun Mar 29 12:27:01 1992 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * vms.h (FUNCTION_PROLOGUE): Redefine to add 4 bytes to local
+ storage on the stack.
+ (STARTING_FRAME_OFFSET): Redefine as -4.
+
+Sun Mar 29 19:58:57 1992 Paul Eggert (eggert@twinsun.com)
+
+ * c-decl.c (store_parm_decls): Function prototypes now override
+ old-style definitions if argument types disagree only because of
+ promotions.
+
+Sun Mar 29 17:40:56 1992 Fred Fish (fnf at fishpond)
+
+ * fixincludes (stdlib.h): Fix free/calloc/malloc/realloc return types.
+
+Sun Mar 29 15:12:39 1992 Ron Guilmette (rfg at ncd.com)
+
+ * sparc.c (sparc_type_code): Added this new routine.
+ (tree.h): Included to support `sparc_type_code'.
+ (output_block_move): Cleaned up code to handle assembler-specific
+ aspects of internal labels.
+
+ * sparc.h: (REG_ALLOC_ORDER, REG_LEAF_ALLOC_ORDER, LEAF_REGISTERS):
+ Deleted spurious semicolons.
+ (ASM_DECLARE_RESULT): New macro to generate the .proc directive.
+ (ASM_DECLARE_FUNCTION_NAME): Changed to use ASM_DECLARE_RESULT.
+ (ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Changed to use
+ ASM_GENERATE_INTERNAL_LABEL when generating jump table elements.
+
+ * svr4.h (SVR4): Don't define this symbol here. (It was never
+ needed, and it will be used to indicate an SVR4 *host* from now on.)
+ (SKIP_ASM_OP): Define this new macro.
+ (ASM_OUTPUT_SKIP): Use SKIP_ASM_OP.
+ (ASM_OUTPUT_INTERNAL_LABEL, ASM_GENERATE_INTERNAL_LABEL): Added
+ new definitions appropriate for most SVR4 assemblers.
+ (COMMON_ASM_OP, LOCAL_ASM_OP): Define these new macros.
+ (ASM_OUTPUT_ALIGNED_COMMON, ASM_OUTPUT_ALIGNED_LOCAL): Use them.
+ (ASM_OUTPUT_ALIGNED_LOCAL): Allocate things in common rather than
+ trying for the .bss section (which may not work).
+ (ASM_DECLARE_RESULT): Define this to do nothing (if not already
+ defained for target machine).
+ (ASM_DECLARE_FUNCTION_NAME): Add invocation of ASM_DECLARE_RESULT.
+
+ * dwarfout.c (ASM_DWARF_POP_SECTION): Renamed ASM_OUTPUT_POP_SECTION.
+ (PUSHSECTION_ASM_OP, POPSECTION_ASM_OP): New macro definitions.
+ (SECTION_ASM_OP): Deleted. Replaced by PUSHSECTION_ASM_OP.
+ (ASM_OUTPUT_PUSH_SECTION, PUSHSECTION_FORMAT): New macro definitions.
+ (*_SECTION): New macro definitions for important section name strings.
+ (ASM_DWARF_*_SECTION): Deleted all macros to change to specific
+ sections and replaced them globally with calls to the new parameterized
+ ASM_OUTPUT_PUSH_SECTION macro.
+
+Sat Mar 28 17:28:17 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Bump Meissner version # to 15.
+ (output_block_move): Add function defintion.
+ (HALF_PIC_PTR, HALF_PIC_FINISH): Provide dummy definitions.
+ (OPTIMIZATION_OPTIONS): Set flag_gnu_linker to FALSE, and
+ flag_no_cse_function to TRUE.
+ (CC1PLUS_SPEC): Delete -- it just passed -fno-gnu-binutils to
+ cc1plus.
+
+ * mips.c (block_move function): Use movstri_internal, instead of
+ emitting the moves directly.
+ (output_block_move): New function to emit the correct code for block
+ moving a constant amount of data.
+ (siginfo): Change options to ps.
+
+ * mips.md (movstrsi_internal): New block move pattern.
+ (movsi_ulw): Add an appropriate REG_EQUIV regnote.
+ (movsi_usw): Type attribute is store, not load.
+
+ * mips-gbsd.h (toplevel): Include mips-bsd.h, not mips-gbsd.h.
+
+ * mips-bsd.h (MD_STARTFILE_PREFIX, MD_EXEC_PREFIX): Use explicit
+ BSD43 prefixes.
+
+ * mips-sysv.h (MD_STARTFILE_PREFIX, MD_EXEC_PREFIX): Use explicit
+ System V prefixes.
+
+ * mips-svr4.h (MD_STARTFILE_PREFIX, MD_EXEC_PREFIX): Use explicit
+ System V.4 prefixes.
+
+ * decstatn.h (TARGET_MEM_FUNCTIONS): Define.
+
+Sat Mar 28 15:12:39 1992 Ron Guilmette (rfg at ncd.com)
+
+ * libgcc2.c (eprintf): Make argument types comsistant with assert.h.
+ (__builtin_new, __builtin_vec_new): Declare all external functions.
+ (default_new_handler): Use a macro for the "memory exausted" message.
+
+ * sparcv4.h: File completely replaced (with one that works).
+
+Sat Mar 28 15:09:46 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * toplev.c (flag_gnu_linker): Default to 0 if USE_COLLECT2.
+
+ * i386.h (TARGET_SWITCHES): Add svr3-shlib.
+ (TARGET_SVR3_SHLIB): New macro.
+ * i386v.h (ASM_OUTPUT_LOCAL): Override definition here.
+
+ * Makefile.in (gcc.xtar): Update version in README.
+
+ * libgcc2.c [sparc] (__builtin_saveregs): Add optional .proc,
+ .type and .size assembler commands.
+
+ * dbxout.c (dbxout_type): New arg SHOW_ARG_TYPES. All calls changed.
+ (dbxout_type_methods): Mostly rewritten, with Tiemann's help.
+
+ * Eliminate limit on alignment value of a variable or field.
+ * tree.h (DECL_ALIGN): Use frame_size slot.
+ (struct tree_decl): `align' slot deleted.
+ * print-tree.c (print_node): Print `align' or `frame_size', not both.
+ * expr.c (get_pointer_alignment): Don't use DECL_ALIGN of function.
+ * c-decl.c (duplicate_decls, finish_enum): Likewise.
+ * tree.c (make_node): Likewise.
+ * c-common.c (decl_attributes): Eliminate limit of 255 on alignment.
+
+ * collect2.c: Don't include gstdarg.h or gvarargs.h.
+ Make error messages follow standards.
+ (error, fatal, fatal_perror): Don't use varargs.
+ Accept as many args as anyone tries to use.
+
+ * cp-decl2.c: Get rid of -fgnu-binutils.
+
+ * ns32k.h (INDIRECTABLE_ADDRESS_P): Deleted.
+ (GO_IF_NONINDEXED_ADDRESS): Delete dupllicate test for reg+offset.
+ (MEM_REG): Don't accept constant here.
+ (INDIRECTABLE_2_ADDRESS_P): Adapt usage of MEM_REG.
+ (GO_IF_INDEXING, GO_IF_INDEXABLE_ADDRESS): New macros.
+ (GO_IF_LEGITIMATE_ADDRESS): Use them.
+
+Sat Mar 28 20:48:20 1992 Chip Salzenberg (chip at tct.com)
+
+ * stor-layout.c (layout_record, layout_union):
+ Limit effect of PCC_BITFIELD_TYPE_MATTERS to actual bitfields.
+ (layout_decl): Do not override a packed decl's alignment.
+
+ * c-common.c (decl_attributes): Don't expect a simple
+ attribute like "packed" to be in a LIST_NODE.
+
+ * c-decl.c (finish_struct): If a field has the "packed"
+ attribute, don't override it with type's normal alignment.
+
+Sat Mar 28 06:51:12 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * integrate.c (initialize_for_inline): Replace DECL_INCOMING_RTL
+ if it has an address shared with DECL_RTL, not just when the entire
+ value is shared.
+
+ * rs6000.c (input_operand): Clean up and make comments agree with
+ code; no changes to what is matched.
+
+ * loop.c (add_label_notes): Handle operands of type 'E'.
+
+ * rs6000.c (print_operand, case 'A'): Fix typo.
+
+Sat Mar 28 01:29:06 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * output.h (current_function_uses_const_pool): New declaration.
+
+ * i386.c (function_{prologue,epilogue}, simple_386_epilogue):
+ If the constant pool is used, the PIC reg will be used.
+
+ * expr.c (expand_builtin): Add support for named pattern strlenM.
+ * expr.h (strlen_optab): New declaration.
+ * optabs.c (init_optabs): Initialize strlen_optabs.
+ * i386.md (strlensi): New pattern.
+
+Fri Mar 27 12:11:03 1992 Fred Fish (fnf at fishpond)
+
+ * fixinc.svr4 (dbm.h): Fix unconditional redefinition of NULL
+
+ * config.sub: Add i486 as a distinct CPU type. Recognize i486v4
+ as distinct from i386v4. Change ncr3000 to i486.
+ * configure: Add i486-ncr-sysv4.
+ * config/x-ncr3000: New file.
+
+Fri Mar 27 18:44:45 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (twoval_comparison_p, eval_subst): New functions.
+ (fold): If an operand of a comparison is a COMPOUND_EXPR, move
+ it outside the comparison.
+ (case GT_EXPR, ...): Replace old code to fold comparisons
+ of comparisons with new code using new functions above.
+ When changing code of unsigned comparisons, set variable CODE.
+
+ * expr.c (get_inner_reference): Return BLKmode and -1 size for a
+ variable-sized object instead of aborting.
+ (do_jump, case COMPONENT_REF): If get_inner_reference returns a
+ size of -1, don't do anything special.
+ * fold-const.c (optimize_bit_field_compare, decode_field_reference):
+ Likewise.
+
+ * combine.c (reg_bitfield_target_p): Replace test with one that
+ compares the register number of X with that of a register which
+ is the target of the assignment.
+
+ * loop.h (struct_induction): New field maybe_multiple.
+ * loop.c (strength_reduce): Track when code may be executed more
+ than once per iteration; pass to record_biv.
+ Call update_giv_derive on every JUMP_INSN.
+ (record_biv): Copy new maybe_multiple arg to struct induction.
+ (record_giv): Clear maybe_multiple.
+ (update_giv_derive): If passing JUMP_INSN, look at maybe_multiple
+ in biv update.
+
+ * expr.c (expand_expr, case MODIFY_EXPR): Add missing call to
+ do_pending_stack_adjust.
+
+ * rs6000.h (OBJECT_FORMAT_COFF): Add definition.
+
+Fri Mar 27 15:58:42 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (check_format): If arg wants void *, accept any ptr.
+
+ * ns32k.md (CALL_MEMREF_IMPLICIT, MOVD_FLOAT_OK):
+ New parameters replace GAS_SYNTAX.
+ * pc532.h (CALL_MEMREF_IMPLICIT, MOVD_FLOAT_OK): Define both.
+ * sequent.h (CALL_MEMREF_IMPLICIT): Defined.
+
+ * sequent.h (INDEX_RATHER_THAN_BASE): Defined.
+ * ns32k.c (print_operand_address): Check it here.
+
+ * ns32k.c (print_operand_address): Treat all non-ints as symbolic.
+ (print_operand): Likewise. Also fix typo, use PUT_ABSOLUTE_PREFIX,
+ and test NO_ABSOLUTE_PREFIX_IF_SYMBOLIC.
+
+ * svr4.h (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR):
+ Output newline after section op.
+ * i860v3.h (DTORS_SECTION_ASM_OP, CTORS_SECTION_ASM_OP):
+ Delete newlines.
+
+ * Makefile.in (clean): Don't delete stage*.
+ (distclean): Do it here.
+ (extraclean): Delete config/patch*.
+
+ * Makefile.in (SYSCALLS.c): Target deleted.
+ (SYSCALLS.c.X): Create SYSCALLS.c and use it in one rule. Delete also.
+
+ * Makefile.in (ld): New target.
+ * t-* (ld, collect2*): Targets deleted.
+ (EXTRA_PROGRAMS): Moved ld here if it was in EXTRA_PASSES.
+ (EXTRA_PASSES): Delete ld.
+
+ * gcc.c, cccp.c: Don't include sys/file.h.
+
+ * fold-const.c (operand_equal_p): Floats must match bit for bit.
+
+ * gcc.c (link_command_spec): Put back -u*.
+
+Fri Mar 27 11:33:46 1992 Simon J. Gerraty (sjg@melb.bull.oz.au)
+
+ * configure (m68k-bull-sysv*): Added config for Bull DPX/2
+ * dpx2.h, dpx2g.h: New files.
+ * x-dpx2200, x-dpx2300, t-dpx2: New files.
+ * gstddef.h: Added _SIZET_ to the list of protection for size_t
+
+Fri Mar 27 14:47:47 1992 Paul Eggert (eggert@twinsun.com)
+
+ * c-typeck.c (convert_arguments): -Wconversion wrongly warned when
+ passing enums, and didn't warn about int precision mismatches.
+
+ * fold-const.c (fold): If IEEE, 0-x is not x.
+
+ * cse.c (simplify_unary_operation): fabs(-0.0) is 0.0, not -0.0.
+ * fold-const.c: Replace target_minus_zero with target_negative.
+ (fold_convert): Warn when converting NaN constants to integer.
+ (fold): fabs(-0.0) is 0.0, not -0.0. 0-x may not equal -x.
+ Do not optimize X++ == C to ++X == C+1 if C is floating point,
+ because it runs afoul of rounding error.
+ * real.h (REAL_VALUE_NEGATIVE): Add.
+
+Fri Mar 27 09:19:11 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * m88k.c (emit_move_sequence): Check the size required for a zero
+ constant.
+
+ * varasm.c (const_hash, compare_constant_1, record_constant_1):
+ For constructor of an array, include the size of the array in bytes.
+
+Fri Mar 27 09:09:53 1992 Michael Meissner (meissner@osf.org)
+
+ * t-decstatn (ALL): Remove variable.
+ * t-decrose (ALL): Ditto.
+ * t-i386rose (ALL): Ditto.
+ * t-encrose (ALL): Ditto.
+
+Fri Mar 27 17:51:32 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * rs6000.c (first_reg_to_save): When profiling, save space for the
+ argument registers, which need to be saved around the mcount call.
+ (output_prolog): Mark the link register as live when profiling.
+ (output_function_profiler): New function. Output code to call
+ mcount.
+ * rs6000.h (LIB_SPEC): Replace incorrect definition. Add
+ -L/lib/profiled and -L/usr/lib/profiled when profiling, -lg when
+ debugging, and -lc always.
+ (OVERRIDE_OPTIONS): No longer zero profile_flag.
+ (FUNCTION_PROFILER): Call output_function_profiler.
+
+ * .gdbinit (complaints): Set to 20.
+ (pbs): New command to call the cc1plus print_binding_stack function.
+
+ * calls.c (expand_call): Delete obsolete references to is_builtin_new.
+
+ * Makefile.in (Makefile): Add dependence on version.c.
+
+Thu Mar 26 19:21:00 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (fixuns_truncMN2,fix_truncMdf2): Make a copy of the input
+ operand and clobber that, rather than clobbering the operand itself.
+
+Thu Mar 26 18:06:32 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * protoize.c (shortpath): Add early check of size of shortname.
+
+ * expr.c (do_jump): Adjust stack after any code that might be skipped.
+
+Thu Mar 26 06:37:35 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.c (toplevel): If NO_STAB_H is defined, include gstab.h
+ instead of stab.h.
+
+Thu Mar 26 02:21:50 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (STAGESTUFF): Add EXTRA_PROGRAMS.
+
+ * configure: Reorder mips alternatives; put mips-mips-* at end.
+
+ * sparc.h (FRAME_POINTER_REQUIRED): 0 if frame is too big.
+ * sparc.c (compute_last_frame_offset): New function.
+
+Wed Mar 25 21:17:36 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * genattrtab.c (check_attr_test): Use XSTR instead of XEXP in one
+ place.
+
+ * genextract.c (mark_operand_seen): Call xrealloc properly.
+
+Wed Mar 25 17:05:56 1992 Torbjorn Granlund (tege at zevs.sics.se)
+
+ * hp800.c (srcsi_operand): New function.
+ * hp800.md (mulsi, divsi, udivsi, modsi, umodsi): Use srcsi_operand
+ for inputs.
+ (mulsi): Use general_operand for output.
+ (one_cmplsi2): Use register_operand for output.
+
+Wed Mar 25 15:50:12 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * m68k.md (fsgldiv pattern): If FSGLDIV_USE_S, opcode has .s, not .x.
+ * amix.h (FSGLDIV_USE_S): Defined.
+
+ * xm-rs6000.h (REAL_NM_FILE_NAME): Defined.
+
+ * x-i386sco (CCLIBFLAGS): Define as empty.
+
+Wed Mar 25 16:52:53 1992 Michael Meissner (meissner at osf.org)
+
+ * collect2.c (OSF/rose scan_prog_file): If we are building a
+ program instead of a shared library, don't create an initializer
+ function entry.
+
+Tue Mar 24 04:00:00 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 2.1 released.
+
+ * xcoffout.h: Renamed from xcoff.h.
+ * dbxout.c, final.c, toplev.c, varasm.c, xcoffout.c: Use new name.
+ * Makefile.in: Corresponding changes.
+
+ * dbxout.c (dbxout_type): Don't check DECL_IGNORED_P.
+
+ * t-rs6000: Complete replacement, to build collect2 properly.
+
+ * Makefile.in (mostlyclean): Delete sorted indices that aren't used.
+ (extraclean): Delete patch outputs, *.d, *.Z, *.tar.
+
+ * Makefile.dos (getpwd.o): New target.
+ (OBJS, protoize, unprotoize): Add getpwd.o.
+ (SYSCALLS.c, SYSCALLS.c.X): Copy from Makefile.in.
+
+Tue Mar 24 06:26:26 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_insn): When deleting dead code after
+ making unconditional branch, check for end of chain.
+
+ * sched.c (update_flow_info): Add code for REG_LABEL case.
+
+ * function.c (instantiate_virtual_regs_1): Don't modify a MEM
+ without copying it unless the modified MEM is valid.
+
+ * cse.c (rtx_cost): Assign ASM_OPERANDS a high cost.
+
+Tue Mar 24 05:48:25 1992 Ken Raeburn (raeburn@wombat.gnu.ai.mit.edu)
+
+ * cp-*: Disabled 22 March changes relating to dbxout.c; the problem
+ will be fixed properly, with more extensive reworking of the C++
+ front end, later. This fix was buggy.
+ * dbxout.c (dbxout_type_methods): Reverted 22 March changes; if a
+ template class is passed, print a warning message and emit no info
+ about methods.
+
+Mon Mar 23 14:18:30 1992 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * make-cc1.com: Add getpwd.c.
+
+Mon Mar 23 12:53:02 1992 Jyrki Kuoppala (jkp@batman.cs.hut.fi)
+
+ * pc532-min.h (HAVE_ATEXIT): Defined.
+
+ * ns32k.c (print_operand) [PC_RELATIVE]:
+ Always use output_address for MEM.
+
+ * pc532.h (BASE_REG_NEEDED): Defined.
+
+Mon Mar 23 07:28:14 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): Correct error in last change; don't
+ pass STRICT_LOW_PART or ZERO_EXTRACT to reg_overlap_mentioned_p.
+
+ * sun3.h (CPP_SPEC): Delete extra brace.
+
+Mon Mar 23 02:43:56 1992 Michael Tiemann (tiemann@mole.gnu.ai.mit.edu)
+
+ * cp-decl.c (pop_from_top_level): Take care of C_C_D.
+
+Sun Mar 22 17:24:09 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * pyr.h: Remove TARGET_INDEX. Update other TARGET switches.
+ Fix several comments.
+ (REGNO_OK_FOR_BASE_P): Allow reg 0.
+ (REGNO_OK_FOR_INDEX_P): Reformulate.
+ (REG_OK_FOR_INDEX_P): Disallow reg 0.
+
+Sun Mar 22 15:10:49 1992 Michael Meissner (meissner@osf.org)
+
+ * mips-tfile.c (mark_stabs): Make function defintion agree with
+ prototype.
+
+ * mips.md (cpu, branch_likely attributes): Make these attributes
+ const.
+ (all functional units): Restore functional units that look at the
+ -mcpu= switch for scheduling now that genattrtab uses less memory.
+
+Sun Mar 22 13:57:51 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (convert_for_assignment):
+ Only explicit 0 converts to pointer.
+
+ * Makefile.in (doc): Don't depend on gplus.info.
+ (gplus.info): Target deleted.
+
+ * c-decl.c (store_parm_decls): Call build_type_copy with just one arg.
+
+ * cccp.c (do_include): Use entire filename when checking for repeat.
+ Use lookup_include.
+ (lookup_include): New function.
+
+ * protoize.c (find_extern_def): Store ??? one char at a time.
+
+ * sparc.h (ASM_OUTPUT_FLOAT): Fix typo.
+
+ * fold-const.c (operand_equal_p): Reject NaNs and infinities.
+
+ * varasm.c (immed_real_const): Distinguish minus zero from zero.
+
+ * sparc.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT):
+ Use `inf' for infinities. Use hex for minus-zero.
+
+ * objc-actions.c (build_selector_translation_table):
+ Don't make a duplicate decl here for _OBJC_SELECTOR_REFERENCES.
+ Just call finish_decl to store the initial value.
+ Call push_obstack_nochange to balance with finish_decl.
+ Use selector_type for declaring individual selector names.
+
+Sun Mar 22 13:11:32 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * loop.c (update_giv_derive): Correctly handle the case where
+ more than one biv update occurs after a giv is defined.
+
+ * cse.c (rehash_using_reg): Add missing arg to call to exp_equiv_p.
+
+ * expmed.c (expand_mult_add): Add missing arg to call to type_for_mode.
+
+ * reorg.c (fill_slots_from_thread): In the case where have a reg-reg
+ copy and will substitute our destination for our source in the
+ following insn, correctly check for it modifying our destination.
+
+Sun Mar 22 09:20:16 1992 Michael Tiemann (tiemann@cygnus.com)
+
+ * cp-typeck.c (unary_complex_lvalue): Don't complain about taking
+ the ``address'' of a bound static method or member.
+
+ * cp-init.c (resolve_offset_ref): Fix bug in handling of static
+ members and member functions.
+
+ * cp-decl2.c (finish_file): If CURRENT_CLASS_TYPE is non-NULL on
+ entry to this function, punt.
+
+ * cp-parse.y (template_parm): Use CLASS_TYPE_NODE instead of
+ CLASS_TYPE value.
+
+ * cp-cvt.c (build_type_conversion): Add another add-hoc rule to find
+ unsigned->int conversion (if conversion to long does not exist).
+
+ * cp-method.c (build_overload_name): Don't call `array_type_nelts'
+ if the TYPE_DOMAIN of an array type is NULL_TREE.
+
+ * cp-init.c (build_offset_ref): Set up and use DECL even in case
+ where NAME resolves to a method.
+
+ * cp-call.c (ideal_candidate): Half of Jan 28 change was missing.
+ Now PARMS are not converted in place if BASETYPE is NULL.
+
+ * cp-typeck.c (build_component_ref): Don't return a TYPE_DECL.
+
+ * cp-type2.c (build_functional_cast): If CURRENT_FUNCTION_DECL is
+ NULL, don't wrap EXPR_AS_CTOR in a NEW_EXPR. This make it possible
+ to parse default initializers that involve constructor calls.
+ * cp-typeck.c (convert_for_initialization): Handle this change.
+ * cp-method.c (dump_init): Grok INDIRECT_REFs that have
+ TREE_HAS_CONSTRUCTOR set.
+
+ * cp-decl.c (push_overloaded_decl): Don't use the
+ DECL_ASSEMBLER_NAME for GLOB as the TREE_PURPOSE of the new GLOB.
+ Use ORIG_NAME instead.
+
+ * cp-decl.c (grokvardecl): If FIELD has incomplete type, complete it
+ with TYPE.
+
+ * cp-decl2.c (flag_this_is_variable): Define the value -2 to mean an
+ object of known type is being constructed.
+ * cp-decl.c (resolves_to_fixed_type_p): Test FLAG_THIS_IS_VARIABLE
+ for the value -2 instead of testing DECL_CONSTRUCTOR_P in case we
+ are looking at `current_class_decl'.
+ * cp-search.c (init_vbase_pointers): Set FLAG_THIS_IS_VARIABLE to -2
+ instead of 0.
+ (build_vbase_vtables_init): Ditto.
+ * cp-*.c: All tests of FLAG_THIS_IS_VARIABLE changed to reflect the
+ new semantics.
+
+ * cp-typeck.c (comptypes): Don't use IS_AGGR_TYPE_2; test explicitly
+ that both are RECORD_TYPE.
+ (build_binary_op_nodefault): Ditto.
+ (convert_for_assignment): Ditto.
+ * cp-cvt.c (convert_to_pointer): Ditto.
+ (convert_to_pointer_force): Ditto.
+ * cp-call.c (convert_harshness): Ditto.
+
+ * cp-search.c (get_first_matching_virtual): Fix typo.
+
+ * cp-tree.c (layout_basetypes): When warning about certain
+ inheritance relationships, only print "virtual" when the
+ inheritance is virtual.
+
+Sun Mar 22 01:28:41 1992 Ken Raeburn (Raeburn@Cygnus.COM)
+
+ Fix dbx info for methods of template classes:
+ * cp-decl.c (make_type_decl): New function. Creates a TYPE_DECL
+ node and assigns as its DECL_ASSEMBLER_NAME the encoded form of the
+ type name as it will be used in assembler output. All calls to
+ build_decl(TYPE_DECL,...) changed to call this.
+ * dbxout.c (dbxout_type_methods): Instead of skipping digits and
+ assuming the human-readable type name follows in the assembler names
+ for methods, use DECL_ASSEMBLER_NAME of the type.
+ Handle the special DECL_NAME that is made for templates.
+ * cp-lex.c (build_lang_field_decl): Set DECL_ASSEMBLER_NAME
+ correctly if new decl is a TYPE_DECL.
+ (build_lang_decl): Ditto.
+ * cp-decl.c (pushdecl): Use DECL_ASSEMBLER_NAME only for
+ FUNCTION_DECL and VAR_DECL nodes; all others use DECL_NAME.
+ * cp-tree.h (make_type_decl): Declare it.
+
+ * cp-pt.c (overload_template_name, undo_template_name_overload):
+ Revert 4 March change.
+
+ * cp-decl2.c: No longer define NEW_OVERLOAD_SCHEME.
+ (grokfield): Use new encoding scheme always.
+
+ * cp-pt.c (overload_template_name): Deleted extra assignment to
+ IDENTIFIER_LOCAL_VALUE slot.
+
+ * cp-method.c (dump_aggr_type): Use DECL_CONTEXT rather than
+ DECL_CLASS_CONTEXT.
+
+ * cp-pt.c (instantiate_class_template): Move some common code from
+ two branches to before branch point.
+
+ * cp-method.c (dump_aggr_type): Don't discard last character of
+ context string; it's not whitespace.
+
+Sun Mar 22 15:58:48 1992 Per Bothner (bothner@rtl.cygnus.com)
+
+ * cp-tree.h: Add more enum->int casts needed by some compilers.
+
+Sun Mar 22 20:40:25 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-typeck.c (build_modify_expr): Handle preincrement and
+ predecrement as valid lvals.
+
+ * gplus.gperf: Finish off changing ASM to ASM_KEYWORD.
+ * cp-hash.h: Rebuilt.
+
+Sat Mar 21 15:43:04 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_c_cast): Don't warn if convert explicit 0 to ptr.
+
+ * local-alloc.c (wipe_dead_reg): If insn has multiple sets and
+ the reg appears in a destination, extend life to end of insn.
+ * global-alloc.c (global_conflicts): Analogous change.
+ (mark_reg_conflicts): New function.
+ * combine.c (try_combine): If I2 has multiple dests, make sure
+ we don't change one of them to overlap anything used within another.
+
+ * configure (pyramid): Commented out.
+
+ * toplev.c (main): Handle -gen-aux-info, with argument.
+ (compile_file): Assume aux_info_file_name already computed.
+ Don't make it local here.
+ * protoize.c (munge_compile_params): Produce -aux-info.
+ Set aux_info_file_name_index.
+ (gen_aux_info_file): Produce and store the aux-info file name.
+ (input_file_name_index): Renamed from filename_index.
+ (aux_info_file_name_index): New var.
+ * Makefile.in (SYSCALLS.c.X): Use -aux-info.
+ * gcc.c, hp800.h, next.h, sparc.h, sun2.h, sun3.h, svr4.h:
+ (WORD_SWITCH_TAKES_ARG): Handle -aux-info.
+ * gcc.c (default_compilers): Pass -aux-info to cc1*.
+
+ * configure (mips-*-sysv*): Renamed from mips-*-sysv and moved down.
+
+ * gcc.c (execute): Undo Mar 12 change.
+
+ * configure (i386-*-bsd*): New alternative.
+ * i386bsd.h: New file.
+
+Sat Mar 21 15:14:08 1992 Ron Guilmette (rfg at ncd.com)
+
+ * sparc.c (output_move_double): Check for XEXP (op2, 0) being a
+ LOW_SUM, rather than checking op2. Handle both ldd and std there.
+
+Sat Mar 21 14:14:10 1992 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * vms.h (CPP_PREDEFINES): Do not define __GNU__.
+
+Sat Mar 21 21:35:37 1992 Jyrki Kuoppala (jkp@batman.cs.hut.fi)
+
+ * ns32k.md (call_value): Added a missing "{".
+
+ * ns32k.c (print_operand): Fixed typo X -> x, FILE -> file.
+
+Sat Mar 21 11:11:04 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Bump Meissner version # to 14.
+ (CPP_PREDEFINES): Always define SYSTYPE_BSD43.
+ (CPP_SPEC): Don't define it here.
+ (ASM_SPEC): Pass -cpp/-nocpp/-mips1/-mips2/-mips3 to MIPS assembler,
+ and only pass -nocpp by default unless .s files are assembled for
+ MIPS compatibility.
+ (LINK_SPEC): Pass -mips1/-mips2/-mips3 to MIPS linker.
+ (MD_STARTFILE_PREFIX): Define to be /usr/lib/cmplrs/cc/ if not
+ already defined.
+ (NM_FLAGS): Define as appropriate for most MIPS systems.
+ (PREFERRED_DEBUGGING_TYPE): If -ggdb prefer stabs over the normal
+ ECOFF debug format, but -g selects ECOFF.
+ (DEFAULT_GDB_EXTENSIONS): Define as 1.
+ (DOLLARS_IN_IDENTIFIERS): Don't define if already defined.
+
+ * mips.c (mips_output_filename): If emitting encapsulated stabs,
+ emit #@stabs immediately after the first .file, so that the @stabs
+ is the second symbol. GDB 4.4 only checks symbol #2 to see whether
+ it is encapsulated stabs, or ECOFF.
+
+ * mips.md (subdi define_splits): Use ltu instead of lt.
+ (branch_zero_true): Generate correct code when not optimizing, and
+ an always true/false branch is generated.
+ (branch_zero_false): Ditto.
+
+ * mips-bsd.h (CPP_PREDEFINES): Always define SYSTYPE_BSD43.
+ (CPP_SPEC): Don't define it here. Remove -Z{BSD43,SYSV} support.
+ Don't pass -I in here.
+ (SYSTEM_INCLUDE_DIR): Define to be /bsd43/usr/include.
+ (LINK_SPEC): Pass -mips1/-mips2/-mips3 to the linker. Remove
+ -Z{BSD43,SYSV} support. Always pass -systype /bsd43/ to the linker.
+
+ * mips-sysv.h (CPP_PREDEFINES): Always define SYSTYPE_SYSV.
+ (CPP_SPEC): Don't define it here. Remove -Z{BSD43,SYSV} support.
+ Don't pass -I in here.
+ (SYSTEM_INCLUDE_DIR): Define to be /sysv/usr/include.
+ (LINK_SPEC): Pass -mips1/-mips2/-mips3 to the linker. Remove
+ -Z{BSD43,SYSV} support. Always pass -systype /sysv/ to the linker.
+ (MD_STARTFILE_PREFIX): Remove, this is now defined in mips.h.
+
+ * mips-news.h (CPP_SPEC): Don't pass -I in here.
+ (SYSTEM_INCLUDE_DIR): Define to be /usr/include2.0.
+ (ASM_SPEC): Pass -cpp/-nocpp/-mips1/-mips2/-mips3 to MIPS assembler,
+ and only pass -nocpp by default unless .s files are assembled for
+ MIPS compatibility.
+ (LINK_SPEC): Pass -mips1/-mips2/-mips3 to the linker.
+
+ * mips-news5.h (CPP_PREDEFINES): Define SYSTYPE_SYSV.
+ (CPP_SPEC): Don't define it here. Remove -Z{BSD43,SYSV} support.
+ Don't pass -I here.
+ (LINK_SPEC): Pass -mips1/-mips2/-mips3 to the linker.
+
+ * iris.h (ASM_SPEC): Pass -cpp/-nocpp/-mips1/-mips2/-mips3 to MIPS
+ assembler, and only pass -nocpp by default unless .s files are
+ assembled for MIPS compatibility.
+ (LINK_SPEC): Pass -mips1/-mips2/-mips3 to the linker.
+
+ * iris.h (DOLLARS_IN_IDENTIFIERS): Define as 0, for iris assembler.
+ (NO_DOLLAR_IN_LABEL): Define, to force static constructors to use a
+ period instead of a dollar sign.
+
+ * decstatn.h (ASM_SPEC): Pass -cpp/-nocpp/-mips1/-mips2/-mips3 to
+ MIPS assembler, and only pass -nocpp by default unless .s files are
+ assembled for MIPS compatibility.
+ (LINK_SPEC): Pass -mips1/-mips2/-mips3 to the MIPS linker.
+
+ * decsrose.h (ASM_SPEC): Pass -cpp/-nocpp/-mips1/-mips2/-mips3 to
+ MIPS assembler, and only pass -nocpp by default unless .s files are
+ assembled for MIPS compatibility.
+ (LINK_SPEC): Pass -mips1/-mips2/-mips3 to the MIPS linker.
+
+ * Makefile.in (collect2.o): Define macros where the standard places
+ binaries are installed, so that if it is invoked outside of gcc, it
+ has a better chance of finding the correct version of the tools to
+ invoke.
+
+ * mips-tdump.c (toplevel): Declare things void * on Silicon Graphics.
+
+ * mips-tfile.c (toplevel): Declare things void * on Silicon
+ Graphics.
+ (stabs_seen): Move static variable to file scope.
+ (mark_stabs): New function to put out the @stabs symbol for GDB to
+ switch to encapsulated stabs.
+ (pseudo_ops): Call mark_stabs if #@stabs found.
+ (parse_stabs_common): Call mark_stabs if needed to add @stabs.
+
+ * sdbout.c (sdbout_dequeue_anonymous_types): Don't core dump if
+ TREE_VALUE is null.
+
+ * decstabs.h (new file): DECstation w/encapsulated stabs.
+ * irisgdb.h (new file): SGI iris w/encapsulated stabs.
+ * mips-gbsd.h (new file): Mips BSD43 w/encapsulated stabs.
+ * mips-gdb.h (new file): Mips w/encapsulated stabs.
+ * mips-gnews.h (new file): Sony NEWS w/encapsulated stabs.
+ * mips-gnews5.h (new file): Sony NEWS 5.0 w/encapsulated stabs.
+ * mips-gsvr4.h (new file): Mips SV.4 w/encapsulated stabs.
+ * mips-gsysv.h (new file): Mips SV.3 w/encapsulated stabs.
+ * mips-svr4.h (new file): Mips System V.4.
+ * x-iris (new file): Specify that iris needs alloca.o since it's
+ alloca is buggy.
+
+ * dbxout.c (toplevel): If NO_STAB_H is defined, include gstab.h just
+ like if USG is defined.
+ * final.c (toplevel): Ditto.
+ * mips-tfile.c (toplevel): Ditto.
+ * xcoffout.c (toplevel): Ditto.
+
+ * xm-mips.h (NO_STAB_H): Define, except on OSF/1.
+
+Fri Mar 20 23:51:54 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * reg-stack.c (subst_asm_stack_regs): A REG_UNUSED note never
+ applies to an input reg, even if that reg is tied to an output.
+
+ * reg-stack.c (record_asm_reg_life): Use XVECLEN only on a PARALLEL.
+ (subst_asm_stack_regs): Likewise.
+
+Fri Mar 20 18:57:43 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Bump Meissner version # to 13.
+ (mips_declare_object): Declare new function.
+ (ASM_OUTPUT_LABEL): Remove cruft from when collect spit out assembly
+ language instead of C code.
+ (ASM_GLOBALIZE_LABEL): Ditto.
+ (ASM_OUTPUT_INT): Ditto.
+ (ASM_OUTPUT_INT_CONST): Remove, no longer used.
+ (ASM_OUTPUT_PTR_INT_SUM): Ditto.
+ (ASM_OUTPUT_LABEL): Don't set that we've seen an identifier here.
+ (ASM_DECLARE_OBJECT_NAME): New macro, call mips_declare_object to
+ emit the label, and mark that no .extern is needed for the name.
+ (ASM_OUTPUT_COMMON, ASM_OUTPUT_LOCAL): Call mips_declare_object.
+
+ * mips.c (mips_declare_object): New function to output the stuff
+ needed for global variables, bss variables, and static bss
+ variables.
+
+Fri Mar 20 14:13:32 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cp-xref.c (GNU_xref_file): Get rid of arbitrary limit--malloc nmbuf.
+
+ * cp-parse.y (scoped_id): Error if spec'd type is undefined.
+
+ * m68k.c (output_function_epilogue): Output at least a nop.
+
+ * xm-hp320.h (USG): Defined.
+
+ * m68k.c (output_function_prologue, output_function_epilogue):
+ Change %I to %0I.
+ (print_operand): Likewise.
+
+ * varasm.c (data_section): Add forward decl.
+
+ * m68k.c (print_operand): Make %! print fpcr.
+ * crds.h, hp320.h, mot3300.h, news.h, tower-as.h (PRINT_OPERAND):
+ Likewise.
+ * m68k.md (fix_trunc*): Use %!.
+
+ * toplev.c (compile_file): Optionally call setvbuf for output file.
+
+ * loop.c (move_movables): Fix typo.
+
+Fri Mar 20 17:42:12 1992 Paul Eggert (eggert@twinsun.com)
+
+ * Makefile.in (SYSCALLS.c): Use `cat' to create this file, instead
+ of having it consist of `#include' directives.
+ (mostlyclean): Delete SYSCALLS.c.
+ * SYSCALLS.c: File deleted.
+
+ * getpwd.c (new file): Get and cache working directory, using PWD
+ if it works and getcwd otherwise.
+ * Makefile.in (OBJS, protoize): add getpwd.o
+ * cp-xref.c (GNU_xref_file): Likewise.
+ * dbxout.c (dbxout_init): Likewise.
+ * dwarfout.c (output_compile_unit_die): Likewise.
+ * protoize.c (main): Likewise.
+
+Fri Mar 20 12:58:57 1992 Ron Guilmette (rfg at ncd.com)
+
+ * dwarfout.c (location_or_const_value_attribute): Fixed to use
+ DECL_INCOMING_RTL as the "location" for formal parameter variables.
+
+Fri Mar 20 13:26:16 1992 Michael Collison (collison@osf.org)
+
+ * i386rose.h (INIT_SECTION_ASM_OP): OSF doesn't support a true
+ initialization section.
+
+Fri Mar 20 07:23:15 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md (set zero_extract patterns): Use the + constraint.
+
+ * crtstuff.c (__do_global_ctors_aux): Declare it.
+
+ * m88k.h (CONDITIONAL_REGISTER_USAGE): Mark the PIC register fixed,
+ but not call used.
+
+ * m88k.c (m88k_builtin_saveregs): Get a properly aligned block.
+
+ * m88k.md (cpu attribute): Use const form.
+
+ * m88k.h, m88k.c, m88kdgux.h (uses of *_ASM_OP): Add tabs.
+
+Fri Mar 20 05:46:26 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expmed.c (emit_store_flag): Need to prevent SUBTARGET from being
+ OP0 in one more case.
+
+ * loop.c (add_label_notes): New function.
+ (move_movables): Use it when hoisting a `move_insn' movable
+ to ensure we create any required REG_LABEL notes.
+
+ * hp800.h (CONDITIONAL_REGISTER_USAGE): Make reg 27 a global_reg
+ for now.
+
+ * combine.c (make_field_assignment): Use correct mode when shifting
+ the source of the assignment.
+
+ * fold-const.c (invert_truthvalue): Correct error in last change.
+
+Thu Mar 19 18:59:24 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * stmt.c (expand_end_case): Convert do_tablejump arg to Pmode.
+
+Thu Mar 19 16:54:15 1992 Michael Meissner (meissner@osf.org)
+
+ * collect2.c (main): Only pass -fxxx and -mxxx options to gcc when
+ building constructors.
+
+Thu Mar 19 16:44:21 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (invert_truthvalue): Correctly check for floating
+ comparison.
+
+Thu Mar 19 14:42:49 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * function.c (expand_main_function): Do so if INVOKE__main is defined.
+ * libgcc2.c (__main): Provide if INVOKE__main is defined.
+ * crtstuff.c (__do_global_ctors_aux): Renamed from __do_global_ctors.
+ (__do_global_ctors): Simple non-static function that invokes
+ __do_global_ctors_aux.
+
+ * crtstuff.c ({CTOR,DTOR}_LIST_{BEGIN,END}): Allow alternate way
+ to represent and define __{CTOR,DTOR}_LIST__.
+ * i386v.h, aix386.h (CTOR_LIST_{BEGIN,END}): Use these to push
+ instead of the funny definition of CTORS_SECTION_ASM_OP.
+ * svr3.h (CTORS_SECTION_ASM_OP): Use the .init section.
+
+ * m88kv3.h (CTOR_LIST_BEGIN): Emit code to .init to push a zero.
+ (CTOR_LIST_END): Do nothing.
+ (ASM_OUTPUT_CONSTRUCTOR): Emit code to .init to push the address.
+ (DTOR_LIST_{BEGIN,END}): Output a block of four words.
+ (ASM_OUTPUT_DESTRUCTOR): Output the address and three words of -1.
+ (DO_GLOBAL_DTORS_BODY): Ignore all values of -1.
+
+ * real.h (REAL_VALUE_ISNAN): Define.
+ * fold-const.c (target_isnan): New function.
+ * sun3.h, sparc.h (ASM_OUTPUT_{FLOAT,DOUBLE}): Use REAL_VALUE_ISNAN.
+
+ * sun3.h: Delete extra #endif.
+
+Thu Mar 19 14:25:50 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * hp800.c (output_move_double): Don't check for CONST_DOUBLE
+ when classifying operand types, CONSTANT_P now includes it.
+ Use split_double to assign operand vectors for CNSTOP.
+
+Thu Mar 19 13:59:16 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * hp320.h (SPACE_AFTER_L_OPTION): Defined.
+ (LIB_SPEC): Defined.
+
+ * toplev.c (compile_file): Output aux_info_file in source file's dir.
+
+Wed Mar 18 17:42:12 1992 Paul Eggert (eggert@twinsun.com)
+
+ * c-aux-info.c (gen_aux_info_record): Don't put the absolute path
+ name into the output file: it's useless, expensive, and often wrong.
+ Use "." instead.
+ * protoize.c (is_syscalls_file): Look for SYSCALLS.c only at the
+ end of the file name.
+ (abspath): Remove useless test of '\0' versus '/'. Add apollo fix.
+ (shortpath): Stop when replacement filename is longer than the
+ original; this avoids buffer overrun. Do not pretend that
+ `a/b/c' is a path prefix of `a/b/cd'.
+ (gen_aux_info_file): Report errors when compilation fails.
+ Do not use stdio in child process.
+ Don't say `exit(errno)'; errno might be too large.
+ (process_aux_info_file): Increment error count if aux info file cannot
+ be generated. Allow the invocation filename to be relative;
+ for now, it will always be ".".
+ (do_processing): Replace strlen (x) with sizeof (x) - 1.
+
+Thu Mar 19 13:31:24 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * cse.c (simplify_binary_operation, PLUS and MINUS cases): Use
+ arg0s and arg1s instead of arg0 and arg1, so that resulting values
+ will be sign extended.
+
+ * sched.c (sched_analyze_1): Don't call sched_analyze_2 at the end.
+ This code was never executed, and is wrong.
+ (sched_analyze_2): Convert from if statements to a switch.
+ Add support for PRE_DEC/PRE_INC/POST_DEC/POST_INC; pass them to
+ sched_analyze_1 because they are writes.
+ (sched_analyze_insn): Delete special case code to handle REG_INC
+ notes, obsoleted by change above.
+
+ * sparc.c (output_block_move): Rewrite to more efficiently handle
+ constant length strings whose length is not a multiple of their
+ alignment. Also, the length of strings handled without a loop now
+ is a multiple of their alignment, instead of fixed size.
+
+ * objc-actions.c (build_selector_translation_table): Add cast for
+ array index from enum to int to satisfy old compiler.
+
+ * c-parse.gperf: Change ASM to ASM_KEYWORD.
+ * gplus.gperf: Likewise.
+
+ * Makefile.in (install-man): Delete duplicate lines.
+
+Thu Mar 19 02:32:06 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (init_decl_processing): Disable `sqrt'.
+
+Thu Mar 19 01:09:16 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.c (output_move_double): Properly check for signedness in a
+ const_double.
+
+Wed Mar 18 18:51:37 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (link_command_spec) [not LINK_LIBGCC_SPECIAL]: Put back -s.
+
+ * config.sub (i486): Accept as CPU type.
+
+ * collect2.c (do_wait): Handle NO_SYS_SIGLIST.
+ * xm-hp320.h (NO_SYS_SIGLIST): Defined.
+
+Wed Mar 18 15:58:31 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * crtstuff.c, dwarfout.c, svr3.h, svr4.h (*_ASM_OP): Remove tabs
+ and newlines.
+ * dwarfout.c, svr3.h, svr4.h
+ (ASM_OUTPUT_*, ASM_DECLARE_*, ASM_DWARF_*): Put tabs here when needed.
+
+Wed Mar 18 17:26:44 1992 Ron Guilmette (rfg at ncd.com)
+
+ * svr4.h (MULTIBYTE_CHARS): Added definition.
+
+Wed Mar 18 17:36:30 1992 Michael Meissner (meissner@osf.org)
+
+ * gcc.c (collect_obstack): New static obstack to build the
+ environment variables to pass to collect, so that it can reliably
+ find the compiler passes.
+ (putenv): New function to add a variable to the environment.
+ Stubbed out for MSDOS and VMS at present, or if HAVE_PUTENV is
+ defined.
+ (putenv_from_paths): New function to take a path list, and build
+ the corresponding environment variable for it.
+ (main): Pass argv[0] to collect through the environment variable
+ COLLECT_GCC. Rebuild the COMPILER_PATH and LIBRARY_PATH
+ environment variables to include all prefixes specified with -B,
+ -b, and -V. Construct COLLECT_GCC_OPTIONS environment variable to
+ consist of all of the options passed to gcc, except for the -B,
+ -b, and -V options.
+
+ * collect2.c (main): Correctly size the number of arguments passed
+ to the compiler when building the constructor lists to account for
+ any options passed through the environment variable
+ COLLECT_GCC_OPTIONS. If the environment variable COLLECT_GCC
+ specifies a full pathname, use that for the pathname to invoke gcc
+ with. Print the name "collect2" in lowercase if -v.
+
+ * xm-mips.h (HAVE_PUTENV): Define if OSF/1.
+
+Wed Mar 18 07:27:50 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * hp800.c (actual_fsize): Remove duplicate declaration.
+ (profile_flag): Remove definition; defined in flags.h.
+ (hp_profile_labelno, local_fsize, save_fregs): Move declarations to
+ top of file.
+
+ * hp800.h (OPTIMIZATION_OPTIONS): Do same thing as Sparc.
+
+ * combine.c (reg_bitfield_target_p): Use rtx_equal_p instead of
+ assuming the actual rtx is used.
+
+Wed Mar 18 00:20:38 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gstddef.h: Handle _GCC_PTRDIFF_T, _GCC_SIZE_T, _GCC_WCHAR_T.
+ * fixincludes: Use those macros in inserted conditionals.
+
+ * gstddef.h: Handle _T_SIZE_ and _T_PTRDIFF_, like _T_WCHAR_.
+
+ * sun3.h (CPP_SPEC): Delete the alternative for fpa as default.
+ Define symbols with __ as well as without.
+
+ * hp320.h (LINK_LIBGCC_SPECIAL, RELATIVE_PREFIX_NOT_LINKDIR):
+ Define unless USE_GAS.
+
+Tue Mar 17 17:19:07 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes (making directories): Always use find.
+
+ * c-decl.c (pushdecl): Don't warn if define nonansi builtin as static,
+ or if define ANSI builtin as inline static.
+
+ * hp800hpux.h (LINK_LIBGCC_SPECIAL, RELATIVE_PREFIX_NOT_LINKDIR): New.
+
+ * fixinc.svr4: Special changes for Sony MIPS-NEWS.
+
+Tue Mar 17 15:12:57 1992 Tim Moore (moore@defmacro.cs.utah.edu)
+
+ * hp800.h (INITIAL_FRAME_POINTER_OFFSET): Get sign right, include
+ fixed area.
+
+Tue Mar 17 14:06:01 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (all.indirect): Renamed from all-internal.
+
+ * t-mips (ALL): Deleted.
+
+Tue Mar 17 10:35:18 1992 Michael Meissner (meissner@osf.org)
+
+ * halfpic.c (half_pic_address_p): Fix typo in last change.
+
+ * x-decrose (CLIB): Add -lbsd, since vfork moved to libbsd.a.
+ * x-encrose (CLIB): Ditto.
+ * x-i386rose (CLIB): Ditto.
+
+Tue Mar 17 07:02:29 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * mips.md (movdi): FP_REGS don't allow DImode, so remove them
+ from the constraints.
+
+ * mips.md (unaligned moves): Use UNSPEC to distinguish SETs that are
+ unaligned from those that aren't.
+
+ * combine.c (try_combine): Update LOG_LINKS correctly when we split a
+ PARALLEL that loads from memory both as a full-word and sign-extended.
+
+Tue Mar 17 21:23:10 1992 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * vax.c (split_quadword_operands): Fix typo.
+
+ * make-cc1.com: Add xcoffout.c.
+
+Mon Mar 16 17:12:26 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure (mips-dec-ultrix*): Use x-decstatn.
+ * x-decstatn (CLIB): Delete.
+
+ * expr.c (move_by_pieces_1): Add negative ints--don't subtract ints.
+
+ * next.h (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): Turned off.
+ * t-next (EXTRA_PROGRAMS, ld): Use collect2.
+ * configure (m68k-next-*): Use t-next.
+
+ * mips-bsd.h (TARGET_MEM_FUNCTIONS): Defined.
+
+Mon Mar 16 14:04:08 1992 Tim Moore (moore@defmacro.cs.utah.edu)
+
+ * hp800.md (movsi + 10, movsi + 11): Add '*' to constraints.
+ (fix_truncsfsi2, fix_truncdfsi2): Add an alternative to put result
+ directly in a general register.
+ * hp800.h (ASM_DECLARE_FUNCTION_NAME): If function is not
+ TREE_PUBLIC, don't do the argument descriptor magic.
+ (EXPAND_BUILTIN_SAVEREGS): call hppa_builtin_saveregs.
+ (LEGITIMIZE_ADDRESS): Don't legitimize CONST addresses.
+ (TEXT_SECTION_ASM_OP, DATA_SECTION_ASM_OP): Put tabs back in.
+ * xm-hp800.h (S_ISDIR): Define for BSD.
+
+ * hp800.c (hppa_builtin_saveregs): New function.
+ * va-hp800.h : Rewrite.
+
+
+Sun Mar 15 23:38:39 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc-actions.c (really_start_method): Dynamically allocate `buf'.
+
+ * sparc.h (TARGET_HOPE_ALIGN): Renamed from TARGET_ALIGN.
+ * sparc.c (output_move_double, output_fp_move_double): Use new name.
+ * sparc.h (TARGET_FORCE_ALIGN): New flag.
+ (FUNCTION_ARG_BOUNDARY): Defined.
+ (FUNCTION_ARG, FUNCTION_INCOMING_ARG, FUNCTION_ARG_ADVANCE):
+ (FUNCTION_ARG_PARTIAL_NREGS): Handle TARGET_FORCE_ALIGN.
+ (ROUND_REG): New subroutine macro.
+
+ * sparc.h (CC1_SPEC): Don't try to recognize -dalign.
+
+ * hp320.h (ASM_OUTPUT_ASCII): Put tab here.
+ (ASCII_DATA_ASM_OP): Not here.
+ * mot3300.h: Likewise.
+
+ * Makefile.in (mostlyclean): Don't delete .s or .i files.
+ (extraclean): Do that here.
+
+ * a29k.h, fx80.h, gmicro.h, i860v3.h, i860v4.h (*_ASM_OP): Remove tabs.
+ * m88kv4.h, m88kdgux.h, mips.h, romp.h, rs6000.h: Likewise.
+ * sun386.h, tower-as: Likewise.
+ * arm.h, hp800.h (*_ASM_OP): Remove extra tabs and newlines.
+ * m68ksgs.h (*_ASM_OP): Remove tabs.
+ (ASM_OUTPUT_*): Put the tabs here when appropriate.
+ * m68kv4.h, m88k.h, next.h: Likewise.
+
+Sun Mar 15 18:37:49 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (inc_for_reload): Rework to try to do addition in
+ INCLOC rather than assuming when it can be done; this fixes a bug
+ on hp800 and generates better code on some CISC machines.
+
+Sun Mar 15 15:12:39 1992 Ron Guilmette (rfg at ncd.com)
+
+ * crtstuff.c: If defined, invoke INIT_SECTION_PREAMBLE.
+
+ * xm-sparcv4.h, x-sparcv4: New files.
+ * configure (sparc-*-sysv4*): Use them.
+
+Sun Mar 15 16:41:33 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * sparc.md (subdi3): Fix unterminated comment.
+
+Sun Mar 15 04:08:59 1992 Torbjorn Granlund (tege at zevs.sics.se)
+
+ * hp800.c (output_block_move): Major rewrite.
+ * hp800.md (movstrsi): Rewrite to match new output_block_move. FAIL
+ if the actual operands are better handled by a library call.
+ (movstrsi recognizer): Rewrite.
+
+ * sparc.md (movstrsi): FAIL for all blocks with unknown size.
+
+Sat Mar 14 19:06:02 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * c-decl.c (builtin_function): Don't declare static.
+
+Sat Mar 14 15:57:53 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (get_pointer_alignment): Convert bytes to bits
+ when handling PLUS_EXPR.
+
+ * cp-search.c (push_stack_level): Declare tp as char *.
+
+ * mips.c (mips_asm_file_end): Use TREE_ASM_WRITTEN to avoid
+ duplicate .extern commands.
+
+ * mips-tdump.c: Include fcntl.h.
+ * mips-tfile.c (open, fstat): Declarations deleted.
+
+ * xm-mipsnews.h: New file.
+ * mips-news5.h: New file. Needs papers from Ron Cole.
+ * configure (mips-sony-sysv*): New alternative.
+
+Sat Mar 14 07:11:14 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * integrate.c (initialize_for_inline): If DECL_INCOMING_RTL is
+ the same object as DECL_RTL, store copy in both places.
+
+Sat Mar 14 10:12:39 1992 Michael Tiemann (tiemann@cygnus.com)
+
+ * cp-spew.c (yylex): Fix some fencepost errors found by Chip
+ Salzenberg.
+
+ * cp-init.c (is_aggr_typedef): Now calls `error' instead of `fatal'
+ if NAME is non-AGGR type.
+
+ * cp-class.c (duplicate_tag_error): Set CLASSTYPE_VBASE_SIZE.
+
+Sat Mar 14 00:28:57 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (do_spec_1): Don't copy closing delim in %(...) or %[...].
+ (read_specs): Don't ignore newline that ends a comment.
+ (handle_braces): Properly terminate scan for %*.
+ (validate_all_switches): Scan any extra specs from specs file.
+
+ * x-iris: File deleted.
+
+ * cccp.c (output_line_command): Avoid outputting line number 0.
+
+ * final.c (asm_fprintf): Handle %O.
+ * m68k.c: Insert %O before `move' in MOTOROLA calls to asm_fprintf.
+
+Fri Mar 13 20:17:40 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-typeck.c, cp-type2.c, cp-tree.c, cp-spew.c, cp-search.c,
+ cp-parse.y, cp-init.c, cp-decl.c, cp-cvt.c, cp-class.c, cp-call.c:
+ Merged in updated cp-* files for gcc-2.1.
+
+ Thu Mar 12 02:29:26 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-type2.c (build_functional_cast): remove incorrect error message.
+
+Fri Mar 13 14:54:23 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc-actions.c (get_arg_type_list) [not NEXT_OBJC_RUNTIME]:
+ 1st arg always an object.
+ (synth_module_prologue): Don't use parser interface, just build nodes.
+ Use `void *' to avoid problems with TAG_SUPER vs _TAG_SUPER.
+ (TAG_SUPER, _msg_id, _msgSuper_id): Deleted.
+ (objc_getClass_id, objc_getMetaClass_id): Deleted.
+ (selector_type): Renamed from _selector_type.
+ (forward_declare_categories, build_objc_symtab_template):
+ Don't use parser interface, just build nodes.
+ (create_builtin_decl): New function.
+
+ * hp800hpux.h (LIB_SPEC): New definition.
+
+ * arm.h (TARGET_WHEN_DEBUGGING): Name corrected.
+
+ * protoize.c (abspath): Make abs_buffer a little longer.
+
+ * encore.h (NO_ABSOLUTE_PREFIX_IF_SYMBOLIC): Defined.
+ (EXTERNAL_PREFIX, IMMEDIATE_PREFIX): Defined.
+ (TARGET_DEFAULT): Changed to 9.
+ (ENCORE_ASM): Defined.
+
+ * sequent.h (PRINT_OPERAND, PRINT_OPERAND_ADDRESS): Deleted.
+ (IMMEDIATE_PREFIX): Define as 0.
+ (SEQUENT_ASM): Defined.
+ * ns32k.c (print_operand): Output f.p. as ints if SEQUENT_ASM.
+ Output doubles using 0f, not 0d, if ENCORE_ASM.
+
+ * configure: If no configuration matches, print error and exit.
+ (m68k-sun-sunos*): Renamed from m68k-sun-sunos4*.
+
+ * configure (copy): New variable.
+ If hard link fails, make a copy.
+
+ * mips.c (mips_asm_file_end): Don't set flags in identifiers.
+ Just output every identifier found in extern_head.
+
+ * configure (sparc-tti-*): Renamed from sparc-unicom-*.
+ (m68k-tti-*): Replaced.
+ (m68k-tti2-*): Deleted
+
+ * config.sub (pbd): Alias for sparc-tti, not sparc-unicom.
+ (pbb): New machine alias.
+ (*-tti): Implies os=-sysv3.
+ (-oss*): Alias for -sysv3.
+
+Fri Mar 13 17:20:52 1992 david d [zoo] zuhn (zoo at lynx.spa.umn.edu)
+
+ * x-mips: add -mld.
+
+Fri Mar 13 14:48:05 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * hp800.h (REGISTER_NAMES): Name register 112, the shift amount
+ register, as "SAR". It was left out.
+
+Fri Mar 13 04:08:53 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386isc.h (STARTFILE_SPEC): Use crt1, not crt0.
+
+ * x-i386sco (CC,OLDCC): Don't define `i386' here.
+ (RCCFLAGS): Define it here, along with other SCO symbols.
+ (XCFLAGS): Use that. New variable.
+ (CLIB): Use -lPW to get alloca.
+
+Fri Mar 13 14:11:41 1992 Jeffrey A. Law (law@wombat.gnu.ai.mit.edu)
+
+ * Changes to enable use of sqrt builtin functions.
+ * c-decl.c (init_decl_processing): Enable BUILT_IN_FSQRT for
+ __builtin_sqrt. Also enable for sqrt if not traditional.
+ * cp-decl.c (init_decl_processing): Enable BUILT_IN_FSQRT for
+ __builtin_sqrt.
+ * expr.c (expand_builtin, case BUILT_IN_FSQRT): New case. Call
+ expand_unop to expand the operation. If that fails break and
+ emit a call to the library sqrt function.
+ * optabs.c (init_optabs): Initialize new optabs for sqrt functions.
+ * expr.h (sqrt_optab): Declare here so that expr.c can see it.
+
+Fri Mar 13 08:56:50 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (delete_dead_from_cse): Fix error in last change.
+
+ * a29k.h (PCC_BITFIELD_TYPE_MATTERS): Define as 1.
+
+ * reorg.c (fill_slots_from_thread): Add missing arg in call to
+ try_split call that was recently added.
+
+ * fold-const.c (invert_truthvalue, case COMPOUND_EXPR): New case.
+
+Fri Mar 13 01:02:56 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * collect2.c (ordinary scan_prog_file): Don't count | in sym name.
+
+ * ns32k.md (movsf): Remove #if 0 around #ifndef GAS_SYNTAX.
+
+ * pc532.h (GAS_SYNTAX): Defined.
+
+Thu Mar 12 00:10:23 1992 Stefan Petri (petri@jupiter.ibr.cs.tu-bs.de)
+
+ * configure (pyramid): Re-enable.
+
+ * pyr.h (STRUCTURE_SIZE_BOUNDARY): Restore definition from gcc-1.40.
+ (PCC_BITFIELD_TYPE_MATTERS): Define as 1 instead of empty.
+
+ * pyr.h (STATIC_CHAIN_INCOMING_REGNUM): Added.
+
+ * pyr.h (TRAMPOLINE_TEMPLATE, TRAMPOLINE_SIZE, TRAMPOLINE_ALIGNMENT,
+ INITIALIZE_TRAMPOLINE): Added, inspired by convex.h
+
+ * pyr.h (INITIAL_FRAME_POINTER_OFFSET): New definition.
+
+ * pyr.md (indirect_jump): New pattern.
+
+ * libgcc2.c [L_trampoline]: Don't include gstddef.h in this case.
+ (__enable_execute_stack): Cloned definition for pyramid
+ from that for convex.
+
+Thu Mar 12 13:23:05 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * collect2.c (FREAD, FWRITE): #undef if USG.
+
+ * x-mipsv: New file.
+ * configure (mips-*-sysv): Use it.
+
+ * cccp.c (skip_to_end_of_comment): New arg NOWARN. Callers changed.
+ (do_xifdef, do_endif): Pass 1 for NOWARN.
+
+ * i386.h, hp800.h (ENCODE_SECTION_INFO): Handle CONSTRUCTOR node.
+ * i386.h (ENCODE_SECTION_INFO): Only decls can be global.
+
+ * cccp.c (warn_import): New variable.
+ (do_include): Test that.
+ (main): Handle -Wimport.
+
+ * hp800hpux.h (DBX_DEBUGGING_INFO): #undef it.
+ * x-hp800hpux: New file.
+ * configure (hp800-hp-hpux*): Use it.
+
+ * config.sub: Make triton alias for sysv3.
+
+ * collect2.c: If CROSS_COMPILE, #undef the special OBJECT_FORMAT_*.
+
+Thu Mar 12 10:35:50 1992 Ron Guilmette (rfg at ncd.com)
+
+ * gcc.c (default_compilers): Use .i suffix (instead of .cpp) for all
+ preprocessor output files.
+ (execute): Print commands used to invoke passes if -save-temps.
+
+ * Makefile.in (mostlyclean): Delete *.i, not *.cpp.
+ Don't delete *.co.
+
+Thu Mar 12 07:13:33 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * xcoff.h (DBX_FINISH_SYMBOL): When writing function name, strip off
+ any storage class at the end.
+
+Thu Mar 12 05:16:49 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * config.sub (-triton*): Delete this OS (it's sysv3).
+ * configure (m88k-dolphin-sysv3): Rename alternative.
+ * xm-m88kdolph.h: Delete. Use xm-m88kv3.h instead.
+ * x-m88kdolph: New file.
+
+Thu Mar 12 00:19:14 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (movstrsi recognizers): Fix reversed operands.
+
+Thu Mar 12 00:01:11 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (main):
+ Don't require machine_suffix for md_startfile_prefix or md_exec_prefix.
+
+ * toplev.c (main): Force flag_no_inline if not optimizing.
+
+ * dbxout.c (dbxout_type): Ignored names don't count in case UNION_TYPE.
+
+ * cp-decl.c (pushtag): Push on ->tags and make TYPE_STUB_DECL
+ even if type has no tag name.
+ * cp-class.c (finish_struct): Always call rest_of_type_compilation.
+
+ * cse.c (simplify_unary_operation): For SQRT, do nothing.
+
+ * byteorder.h: Test __i860_big_endian__.
+
+ * ns32k.c (print_operand_address): Test NO_ABSOLUTE_PREFIX_IF_SYMBOLIC.
+ Test BASE_REG_NEEDED inside indirect address too.
+ * sequent.h (NO_ABSOLUTE_PREFIX_IF_SYMBOLIC): Defined.
+ (SEQUENT_ADDRESS_BUG, SEQUENT_BASE_REGS): #if 0.
+
+Wed Mar 11 22:55:38 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (push_parm_decl): Clear immediate_size_expand temporarily.
+ * stor-layout.c (get_pending_sizes): Fix up SAVE_EXPR_CONTEXT.
+ (variable_size): No longer static.
+ * c-decl.c (grokdeclarator): Call variable_size, not save_expr.
+ Rename local `variable_size' to `size_varies'.
+
+Wed Mar 11 18:53:23 1992 Chip Salzenberg (chip@tct.com)
+
+ * collect2.c (OBJECT_FORMAT_COFF, OBJECT_FORMAT_ROSE):
+ (OBJECT_FORMAT_NONE): Three alternative strategies for finding inits.
+ OBJECT_FORMAT_COFF is completely new.
+ (is_ctor_dtor): New function.
+ [OBJECT_FORMAT_NONE, OBJECT_FORMAT_ROSE] (scan_prog_file):
+ Use is_ctor_dtor.
+
+ * x-rs6000 (CLIB): Add -lld.
+ * t-rs6000: New file.
+ * configure (rs6000...): Use that file.
+
+Wed Mar 11 17:31:13 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * reload1.c (inc_for_reload): Call gen_add2_insn with negated
+ constant instead of gen_sub2_insn.
+
+Wed Mar 11 17:30:35 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_binary_op): For shifts, always use op0 type.
+
+ * stmt.c (expand_end_bindings):
+ Load virtual_incoming_args_rtx via a pseudo reg.
+
+ * math-68881 (pow): Add missing parens; typo in fp constant.
+
+ * i386isc.h (LIB_SPEC): Add -lg.
+
+ * libgcc2.c (__CTOR_LIST__, __DTOR_LIST__):
+ Don't define if CTOR_LISTS_DEFINED_EXTERNALLY.
+ (__builtin_saveregs): Handle NO_UNDERSCORES for sparc.
+
+ * pbb.h, pbd.h: New files from Mike Bloom.
+ * configure (m68k-tti2-*): Turned back on.
+
+ * c++: Add a colon command in case system doesn't handle #!/bin/sh.
+
+Mon Mar 11 19:54:43 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (integer truncMN2): Delete patterns. Not needed on i386.
+
+Wed Mar 11 16:58:56 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * m88kv3.h (STARTFILE_SPEC, LIB_SPEC): Search for crt{begin,end}.o
+ (DO_GLOBAL_CTORS_BODY, CTORS_SECTION_ASM_OP, ASM_OUTPUT_CONSTRUCTOR,
+ DTORS_SECTION_ASM_OP): Implement new svr3 scheme.
+
+Wed Mar 11 16:24:03 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fold-const.c (fold): When correcting constant result of GE, LE, NE,
+ make sure we really have a constant result.
+
+ * ns32k.md (call, call_value): Support GAS_SYNTAX and GNX_V3 like 1.40.
+
+ * c-decl.c (pushdecl): Properly use prev implicit decl in warning.
+
+Wed Mar 11 16:05:20 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * Makefile.in (OBJS): Add xcoffout.o.
+ (dbxout.o, final.o, toplev.o, varasm.o): Add xcoff.h dependency.
+ (xcoffout.o): Add rule to build.
+
+ * xcoffout.c: Change names of rs6000_*_section_name variables to
+ xcoff_*_section_name, and move definitions of them here from
+ rs6000.c.
+ * xcoff.h: Likewise, move declarations here from rs6000.h.
+ * rs6000.c: Delete definitions of rs6000_*_section_name variables.
+ * rs6000.h: Delete declarations of rs6000_*_section_name variables.
+
+ * rs6000.c (output_epilog): Add comment to note lack of traceback
+ table support.
+ * rs6000.h: Refine comment explaining ASM_SPEC definition.
+ (XCOFF_DEBUGGING_INFO): Define.
+ (DBX_CONTIN_LENGTH, DBX_NO_XREFS): Move to xcoff.h.
+ (ASM_FILE_START): When -g, emit private_data_section.
+ (ASM_DECLARE_FUNCTION_NAME): When -g, output .lglobl for static
+ functions. Also, output .function debug info.
+ (ASM_OUTPUT_COMMON, ASM_OUTPUT_LOCAL): Add bss_section call.
+
+ * dbxout.c: Include xcoff.h when XCOFF_DEBUGGING_INFO is defined.
+ Define default values for DBX_DECL_STABS_CODE,
+ DBX_STATIC_CONST_VAR_CODE, DBX_REGPARM_STABS_CODE, and
+ DBX_REGPARM_STABS_LETTER. These exist to be overriden for xcoff.
+ Include entire file if either DBX_DEBUGGING_INFO or
+ XCOFF_DEBUGGING_INFO is defined.
+ (dbxout_type): Add early exit if DBX_TYPE_DEFINED, used for xcoff.
+ (dbxout_symbol): Use DBX_DECL_STABS_CODE instead of N_LSYM for
+ tags and typedefs. Use DBX_STATIC_CONST_VAR_CODE instead of N_FUN
+ for static const variables. Add DBX_STATIC_BLOCK_START and
+ DBX_STATIC_BLOCK_END around output of stab info, for xcoff use.
+ (dbxout_finish_symbol): Use DBX_FINISH_SYMBOL instead if defined.
+ (dbxout_syms, dbxout_parms): No longer static, referenced from
+ xcoffout.c.
+ (dbxout_parms): Use DBX_REGPARM_STABS_CODE instead of N_RSYM. Use
+ DBX_REGPARM_STABS_LETTER instead of 'P'.
+ (dbxout_reg_parms): No longer static.
+ * final.c: Also include gstab.h if XCOFF_DEBUGGING_INFO defined.
+ Include xcoff.h if XCOFF_DEBUGGING_INFO defined.
+ (final_start_function): Call xcoffout_output_first_source_line
+ when XCOFF_DEBUG. Set next_block_index if XCOFF_DEBUG.
+ (final_end_function): Call xcoffout_end_function if XCOFF_DEBUG.
+ Call xcoff_end_epilogue if XCOFF_DEBUG.
+ (final_scan_insn): Call xcoffout_begin_function,
+ xcoffout_begin_block, and xcoffout_end_block if XCOFF_DEBUG.
+ (output_source_line): Also call dbxout_source_file if XCOFF_DEBUG.
+ * flags.h: Define XCOFF_DEBUG. Also declare
+ use_gdb_dbx_extensions if XCOFF_DEBUGGING_INFO.
+ * toplev.c: Also declare use_gdb_dbx_extensions if
+ XCOFF_DEBUGGING_INFO. Include xcoff.h in XCOFF_DEBUGGING_INFO.
+ (compile_file): Also call dbxout_init, and dbxout_finish if
+ XCOFF_DEBUG.
+ (rest_of_decl_compilation): Also call dbxout_symbol if
+ XCOFF_DEBUG.
+ (rest_of_type_compilation): Also call dbxout_symbol if
+ XCOFF_DEBUG.
+ (main): Add support for recognizing -g when XCOFF_DEBUGGING_INFO.
+ * varasm.c: Include xcoff.h if XCOFF_DEBUGGING_INFO.
+ (assemble_variable): Also call dbxout_symbol when XCOFF_DEBUG.
+ Change all returns to goto finish. At finish label,
+ call dbxout_symbol if XCOFF_DEBUG.
+
+ * dbxstclass.h: New file. Define XCOFF specific storage classes.
+ * xcoff.h: New file, for XCOFF support. Included by xcoffout.c,
+ dbxout.c, final.c, toplev.c, and varasm.c.
+ * xcoffout.c: New file for XCOFF support. Most of the support is
+ implemented by dbxout.c, this just includes stuff that can not be
+ easily performed within dbxout.c.
+
+ * toplev.c (struct W_options): Add entry for warn_inline, so user
+ can turn this warning on.
+
+Wed Mar 11 15:11:42 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * optabs.c (init_optabs): Fix typo (Imode instead of TImode) in
+ HAVE_subti3 case.
+
+Wed Mar 11 13:10:20 1992 Jeffrey A. Law (law@wombat.gnu.ai.mit.edu)
+
+ * sparc.h (REG_ALLOC_ORDER): Make %g3 more desirable.
+
+Wed Mar 11 12:35:12 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes (egrep cmd): Delete misplaced `#e[nl]'.
+
+ * jump.c (jump_optimize): Try to fix last change.
+
+ * expmed.c (init_expmed): Use big, ugly factor in mult_is_very_cheap.
+
+Wed Mar 11 08:00:18 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * toplev.c (rest_of_compilation): Use sdbout_types to clear the
+ anonymous types queue if any.
+ * sdbout.c: Correct spelling of sdbout_dequeue_anonymous_types.
+
+ * genattrtab.c (attr_string): Don't assume a terminating null.
+
+Wed Mar 11 07:05:38 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload_as_needed): Delete erroneous test of
+ basic_block_needs.
+
+ * stmt.c (expand_end_case): Know that we will obtain a constant
+ if we were passed a COMPOUND_EXPR whose second operand is constant.
+ Fold the MINUS_EXPR we make for casesi.
+
+ * reorg.c (update_block_from_store): Deleted.
+ (update_block): Always leave USE; don't try to update live regs.
+
+ * explow.c (copy_to_suggested_reg): Add new arg for mode to use.
+ * expmed.c (expand_divmod): Pass new arg to copy_to_suggested_reg.
+
+ * reload1.c (set_label_offsets, reload_as_needed): Consistently
+ ignore non-eliminables when computing num_not_at_initial_offset.
+
+ * rs6000.md (subsi3): Remove unnecessary call to force_reg.
+
+ * rs6000.c (output_epilog): Separate setting LR from loading
+ it from memory in some cases.
+ Branch to FP restore routine instead of calling it.
+
+ * flow.c (propagate_block): CC0 is not live when we delete a dead
+ insn.
+ * cse.c (delete_dead_from_cse): An insn setting CC0 is not live
+ if the next insn doesn't reference CC0.
+
+ * cse.c (cse_insn): If we see a narrow AND with a constant, check if
+ we have seen a wider AND.
+
+ * combine.c (can_combine_p): Allow SUBREG of non-tiable regs if we
+ are going to do is copy it to CC0.
+
+ * reload.c (find_secondary_reload): If X is a pseudo with an
+ equivalent MEM, use the MEM to see if a secondary reload is needed.
+ Don't call REG_CLASS_FROM_LETTER for 'r'.
+ * reload1.c (emit_reload_insns): Handle reloading pseudos
+ with equivalent MEM when we have secondary reloads; use the MEM
+ when required.
+
+ * romp.md (reload_outsi): Pattern should be a single PARALLEL
+ whose second component is a CLOBBER.
+
+Wed Mar 11 03:11:26 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (find_a_file, do_spec_1): Always obey require_machine_suffix.
+ (machine_explicit): Var deleted.
+
+Tue Mar 10 23:12:24 1992 Jeffrey A. Law (law@wombat.gnu.ai.mit.edu)
+
+ * m68k.md (68000 special shifts): No longer accept a shift count
+ of 16. Delete support for shifts by 16 places.
+ (shift by 16 bits): New patterns which apply to all 68k models.
+ * m68k.h (RTX_COSTS): Shifts by 16 are cheap.
+
+Tue Mar 10 20:37:31 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * dwarfout.c (location_or_const_value_attribute):
+ Reenable changes disabled on Feb 21.
+ * function.c (instantiate_decls): Likewise.
+
+ * sdbout.c (sdbout_symbol): Handle (mem (const...)).
+ * dbxout.c (dbxout_symbol): Likewise.
+
+ * xm-i386isc.h: New file.
+ * configure (i386-*-isc*): Use it.
+
+ * hp320.h (MD_STARTFILE_PREFIX): Deleted.
+
+ * m68k.h (RTX_COSTS): If MULT is a shift, jump to shift case.
+
+ * sun3.h (TARGET_MEM_FUNCTIONS): Defined.
+
+ * toplev.c (rest_of_compilation): Call sdbout_dequeue_anonymous_types
+ even if we don't output assembler code.
+
+ * jump.c (jump_optimize): In `if (foo) bar; else break;' optimization,
+ include in range1 and range2 any line numbers at the beginning.
+
+ * c-typeck.c (spelling_length): Initialize `size'.
+ (PUSH_SPELLING): `spelling_size' is measured in elements.
+ (get_spelling): Use xmalloc if there is no buffer yet.
+
+Tue Mar 10 20:25:56 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * integrate.c (save_for_inline_copying):
+ Set up LABEL_NAME of label copies.
+
+ * sparc.md: Clean up attribute settings. Add default length of 2
+ for insns of type multi. Make sure all insns have correct type and
+ length attribute values.
+
+Tue Mar 10 19:13:19 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (warn_parentheses): Default is 0.
+ (c_decode_option): -Wall implies -Wparentheses.
+
+Tue Mar 10 17:49:51 1992 Torbjorn Granlund (tege at mole.gnu.ai.mit.edu)
+
+ * hp800.md (shNadd recognizers): Put the MULT first, to obey insn
+ canonicalization rules.
+
+ * hp800.md (subsi3): Don't handle constants for operand 2, but
+ do handle them for operand 1, for the subi insn.
+
+ * hp800.md (compare into ordinary reg): Use "arith11_operand", not
+ "arith_operand" for operand 2. Use `I', not `J' as constraint.
+ Don't change the constant in the output code (i.e. undo Mar 10
+ change).
+ * hp800.c (arith11_operand): New predicate function. Fix comment.
+
+ hp800.md (mulsi3): Don't handle CONST_INT specifically, rely on
+ machine independent code.
+ * hp800.h (RTX_COST): Define.
+ * hp800.c (ABS, mul_operands, emit_mul_by_constant) Remove.
+ (mul_by_constant_aux, test_factor_and_output): Remove.
+
+ * hp800.md (addsi3): Use "register_operand" for operand 1, not
+ "arith_operand".
+
+ * hp800.md: Clean up spacing and comments in a few places.
+
+ * hp800.c (output_move_double): Handle auto increment and auto
+ decrement. Remove unused enums. Test for either operand being a
+ REGOP instead if RNDOP, since we require at least one operand to
+ be a register. Pass the MEM address to find_addr_reg, not the
+ entire MEM rtx (in two places).
+
+ * hp800.h (WORDS_BIG_ENDIAN): Fix typo in comment.
+ (RTX_COST): Return cost of a PLUS, to indirectly give the right
+ cost for the shNadd insns. Adjust the cost for division.
+
+Tue Mar 10 15:57:24 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.md: Add pattern for optimizing bitfield compares. This
+ pattern was accidently lost when other (now-obsolete) bitfield
+ patterns were removed.
+
+ * sparc.c (arith32_operand): Deleted.
+ * sparc.md (movstrsi): Now uses nonmemory_operand for length.
+
+ * sparc.c (output_arc_profiler): Emit insns from first to last
+ instead of last to first, since it is much clearer. Eliminate
+ profiler_target, since it resulted in illegal rtx sharing.
+
+ * sparc.c (legitimize_pic_address): Make -fPIC work again, re the
+ Feb 27 cse.c LO_SUM fix. Put addresses inside UNSPEC when loading
+ them to ensure that cse won't mistakenly optimize them.
+ * sparc.md: Two new patterns, to match (HIGH (UNSPEC (..))) and
+ (LO_SUM (reg) (UNSPEC (..))) as generated above.
+
+Tue Mar 10 14:58:19 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * mips-news.h (ASM_SPEC): Move %{G*} outside of -mgas conditional.
+ * nws3250v4.h, xm-nws3250v4.h, x-nws3250v4: New files. From cph.
+
+ * i860.c (sfmode_constant_to_ulong): Fix typo in last change.
+
+ * expr.c (store_expr): Initialize `label'.
+
+ * 3b1.h (HAVE_ATEXIT): #undef this.
+
+ * hp800.md (compare into ordinary reg): Make large ints "negative".
+
+ * hp800hpux.h: New file.
+ * configure (hp800-*-bsd*): Renamed from hp800-*-*.
+ (hp800-*-hpux*): New configuration.
+
+Tue Mar 10 11:03:47 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * expmed.c (init_expmed): Make the lea pattern in the canonical way.
+
+Tue Mar 10 10:32:30 1992 Tom Wood (wood@hal)
+
+ * m88k.h (ASM_OUTPUT_{COMMON,LOCAL}): Compute size consistently.
+
+Tue Mar 10 07:41:09 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * recog.c (constrain_operands, case 'E'): Fix typo.
+
+ * function.c (setjmp_protect): Don't put vars from inline functions
+ on the stack.
+
+ * c-typeck.c (process_init_constructor): Don't use host integers for
+ bounds and index computation; use trees instead.
+ If specifying index in array with unset bounds, assume lower bound
+ of zero and check specified index against zero.
+
+ * tree.h (mode_for_size): Don't declare here.
+ * machmode.h (mode_for_size): Declare here instead.
+
+ * reorg.c (fill_slots_from_thread): Try to split THREAD immediately
+ so we don't get confused if it gets split later.
+
+ * reorg.c (fill_slots_from_thread): Don't take add from loop
+ head if the increment amount depends on the target register, since
+ we can't undo the operation.
+
+Mon Mar 9 12:18:04 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * unroll.c (final_biv_value): Fail if the biv is not MODE_INT.
+
+ * combine.c (distribute_notes, case REG_DEAD): Call rtx_equal_p
+ to verify that it was the set that modified the register, and
+ not a clobber.
+
+Sun Mar 8 22:20:24 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * c-parse.y,c-lex.c,cp-hash.h,cp-parse.y,cp-spew.c,objc-parse.y:
+ Rename `ASM' to `ASM_KEYWORD' to avoid trouble with SCO
+ <sys/signal.h>.
+
+Sun Mar 8 23:16:37 1992 Jeffrey A. Law (law@wombat.gnu.ai.mit.edu)
+
+ * expr.c (move_by_pieces, move_by_pieces_ninsns): Remove March 4 and
+ March 5 changes. Set max_size to MOVE_MAX + 1 instead.
+
+Sun Mar 8 17:08:57 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (do_tablejump): New arg MODE.
+ * stmt.c (expand_end_case): Pass that arg.
+
+ * c-decl.c (pushtag): Push even anonymous types on tags list.
+ (parmlist_tags_warning): Handle anonymous types in the list.
+
+Sun Mar 8 15:08:58 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386mach.h (perform_fixdfsi): Rename from *_fix_trundfsi2.
+ Restore float control word correctly.
+ * i386rose.h (perform_fixdfsi): Likewise.
+
+ * i386.h (CONST_DOUBLE_OK_FOR_LETTER_P): Allow float constants,
+ even if -msoft-float is used: reg-stack.c may emit an insn to load
+ the function value register with 0.0.
+
+ * i386.md (bit test insns): Don't allow memory operands as the
+ first argument of the zero_extract.
+
+ * i386isc.h (RETURN_POPS_ARGS): Comment this out: ISC uses the
+ standard definition.
+
+ * i386sco.h (STARTFILE_SPEC): Use crtbegin.o.
+ (ENDFILE_SPEC): Use crtend.o.
+ (CPP_SPEC): #undef before defining.
+ (RETURN_POPS_ARGS): Caller pops args on SCO.
+
+Sun Mar 8 14:25:16 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure: Fatal error if srcdir has already been configured.
+ Remove periods from error messages.
+
+ * 3b1.h, mot3300.h (ASM_OUTPUT_OPCODE): Change swap to swap.w.
+ (SGS_SWAP_W): Deleted.
+ * m68ksgs.h (ASM_OUTPUT_OPCODE): If SGS_SWAP_W, change swap to swap.w.
+ * m68k.md: Delete all SGS_SWAP_W conditionals.
+
+ * m68k.md (shift using swap, dbra patterns): Change clrw to clr%.w.
+
+ * hp800.h (output_global_address): Use `-' for PLUS of neg integer.
+ Clean up spacing and braces in several places in file.
+
+ * byteorder.h (htons): Use unsigned int for arg type.
+
+Sun Mar 8 07:36:44 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rs6000.c (print_operand, case 'A'): New case.
+ * rs6000.md (sri): New %A to use "sli" for count of zero to work
+ around bug in RS/6000 assembler.
+
+ * config.sub (os): Add "aos" to basic list, no longer the same
+ as "bsd"; "acis" is an alternate for "aos".
+ (romp): No longer has a default system.
+ * configure (romp-*-aos*): Renamed from romp-*-bsd*; BSD means
+ real BSD (4.3 Tahoe+), AOS means IBM system.
+
+ * Makefile.in (crtbegin.o, crtend.o): Use -o for output instead of
+ putting in crtstuff.o and renaming to desired name.
+
+ * reload1.c (reload): Re-check eliminability of registers on each
+ reload pass.
+
+ * jump.c (mark_jump_label): Make multiple REG_LABEL notes if
+ more than one label is mentioned in an insn.
+
+ * integrate.c (copy_rtx_and_substitute): Properly initialize
+ const_equiv_map for the equivalents of AP and FP.
+
+ * rs6000.h (TARGET_MEM_FUNCTION): Define.
+
+Sun Mar 8 00:05:47 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (store_parm_decls): Copy function type before changing it.
+ * tree.c (build_type_copy): New subroutine.
+
+ * t-next (LIBGCC1): Assigned, instead of LIBGCC.
+
+ * m68k.h (SHIFT_COUNT_TRUNCATED): Deleted.
+
+Sat Mar 7 23:47:57 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (xorsi3,xorhi3): Don't emit a byte opcode with an SImode
+ operand.
+
+Sat Mar 7 22:49:21 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (convert_arguments): -Wconversion warning
+ if argument is passed as float.
+ For fixed arguments, warn if type passed doesn't match
+ what default_conversion produces.
+
+ * gcc.c (cross_compile): New variable, 1 if cross-compiling.
+ (read_specs): Read it from specs.
+ (process_command): Dump it to specs.
+
+ * gcc.c (process_command): Don't use MD prefixes and
+ standard_startfile_prefix* here.
+ (main): Use them here, if not cross-compiling.
+
+Sat Mar 7 18:13:45 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload_as_needed): Eliminate regs in (use (mem ..))
+ and (clobber (mem ...)) insns.
+
+ * combine.c (distribute_notes): Fix minor bug in handling of
+ multi-register values when only one part is used.
+
+ * optabs.c, expr.c: Always call emit_library_call with no_queue == 1.
+
+ * function.c (fix_lexical_addr): Correctly set BASE in non-separate
+ AP case.
+
+Sat Mar 7 15:39:57 1992 Jyrki Kuoppala (jkp@batman.cs.hut.fi)
+
+ * ns32k.h (TRANSFER_FROM_TRAMPOLINE): changed "ret" to "ret 0"
+
+Sat Mar 7 15:41:46 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * fixincludes: Don't do special fixes on signal.h, which were only
+ needed because of #endif comment fixes.
+
+Sat Mar 7 15:11:50 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * m68k.h (ASM_OUTPUT_ALIGN): Don't crash if LOG is more than 1.
+
+ * varasm.c (decode_reg_name): Make various prefixes optional
+ whether or not they are in REGISTER_NAMES.
+ (strip_reg_name): New subroutine.
+
+ * i386.c: Fatal error if EXTRA_CONSTRAINT is defined.
+
+ * collect2.c [USG] (R_OK, W_OK, X_OK): Define them if missing.
+
+ * x-hp320g (RANLIB, RANLIB_TEST): Defined.
+
+ * Makefile.in (EXTRA_PROGRAMS): New variable is list of programs.
+ (native): Build them. Don't build EXTRA_PARTS.
+ (rest.encap): Build EXTRA_PARTS.
+ (GCC_PARTS): Include EXTRA_PROGRAMS.
+ (install-common): Build EXTRA_PROGRAMS.
+ * t-convex (EXTRA_PROGRAMS): Define instead of EXTRA_PARTS.
+
+ * Makefile.in (distclean): Don't delete backups, etc.
+ (extraclean): New target--delete those things here.
+ (gcc.xtar): Use extraclean.
+ (cleanconfig): Deleted.
+ (realclean): Depend on distclean.
+
+Sat Mar 7 14:54:29 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * genattrtab (attr_printf): Provide alternate based on HAVE_VPRINTF.
+
+Sat Mar 7 14:25:58 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * hp800.c (secondary_reload_class): Change `=' to `==' in `if'.
+
+Sat Mar 7 13:25:17 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (do_line): Fix typo.
+
+ * configure (decoding args): Delete excess fi.
+
+Sat Mar 7 09:29:41 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (CONST_COSTS): Complete last change.
+
+ * mips.md (movsi_ulw, movsi_usw): Complete last change.
+
+Sat Mar 7 07:28:03 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * config.sub (*-dolphin, -triton*): New vendor/OS.
+ * configure (m88k-dolphin-trition): New alternative.
+ * m88kdolph.h: New file.
+ * xm-m88kdolph.h: New file.
+
+Sat Mar 7 10:07:44 1992 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * make-l2.com: Do not allow the user to run this with gcc 1.nn.
+
+ * make-gcc.com: Use the new compiler to build libgcc2.c (through
+ make-l2.com).
+
+Sat Mar 7 05:36:16 1992 K. Richard Pixley (pixley@nutrimat.gnu.ai.mit.edu)
+
+ * Makefile.in: added the exec_prefix variable for installing host
+ dependent programs and libraries.
+
+Sat Mar 7 00:09:50 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * genextract.c (mybzero): New fn. Used instead of bzero.
+
+ * Makefile.in (all): Indirect to all-internal.
+ (all-internal): New rule, following where cross-make gets inserted.
+
+ * vms.h (SIZE_TYPE, PTRDIFF_TYPE, WCHAR_TYPE): Defined.
+
+ * protoize.c: Don't declare fork or vfork.
+
+ * i860.c (sfmode_constant_to_ulong): Use REAL_VALUE_FROM_CONST_DOUBLE.
+
+ * gcc.c (handle_braces): Verify actual suffix length matches
+ desired.
+
+ * hp800.h (GO_IF_LEGITIMATE_ADDRESS): Add parens for clarity.
+
+ * c-typeck.c (pointer_int_sum): Handle intop which is sum or diff
+ of arguments with different types.
+
+ * c-typeck.c (PUSH_SPELLING): If no buffer yet, use xmalloc.
+
+ * m68k.c (output_dbcc_and_branch): Use \n\t between pair of insns.
+
+ * sparc.h (TARGET_MEM_FUNCTIONS): Defined.
+
+Fri Mar 6 18:48:03 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gbl-ctors.h (DO_GLOBAL_CTORS_BODY): Don't call ON_EXIT here.
+ * crtstuff.c, libgcc2.c (__do_global_ctors): Call it here.
+
+ * i386sco.h (HAVE_ATEXIT): Defined.
+
+ * collect2.c (my_exit, main): Avoid dereferencing 0.
+
+ * stmt.c (expand_decl_init): Don't alter TREE_USED of the variable.
+
+Fri Mar 6 18:24:39 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * mot3300.h (SIZE_TYPE): Define as "unsigned int".
+
+ * combine.c (make_extraction): STRICT_ALIGNMENT is now non-zero if
+ true, instead of relying on whether it is defined or not.
+ * c-typeck.c, cp-typeck.c (build_c_cast): Likewise.
+ * stor-layout.c (layout_type) Likewise.
+ * expr.h (MUST_PASS_INSTACK_BAD_ALIGN): Likewise.
+ * expr.c: Set default value of SLOW_UNALIGNED_ACCESS to zero.
+ (move_by_pieces, move_by_pieces_ninsns, emit_push_insn):
+ SLOW_UNALIGNED_ACCESS and STRICT_ALIGNMENT now true if non-zero.
+ * function.c (assign_stack_local, assign_outer_stack_local):
+ Remove turned-off code using STRICT_ALIGNMENT.
+ * config/*.h: Change representation of STRICT_ALIGNMENT and
+ SLOW_UNALIGNED_ACCESS.
+ * gmicro.h (SLOW_UNALIGNED_ACCESS): Set to 1.
+
+ * Makefile.in (cleanconfig): Remove obsolete reference to
+ file aux-output2.c.
+
+ * c-lex.c (yylex): Don't make out-of-range shift for very wide chars.
+
+Fri Mar 6 18:07:00 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * toplev.c (compile_file): No -Wunused warnings for static vars.
+
+ * collect2.c (main): Don't handle -B, -b, -V, -m or -f.
+ collect2 gets only the options that ld would get.
+ Process COLLECT_GCC_OPTIONS envvar.
+ (savestring): New function.
+
+ * genattrtab.c: Revert to previous version
+ because the new one uses vsprintf and it isn't trivial
+ to avoid it.
+
+Fri Mar 6 17:26:09 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.md (<O5> expressions): Don't rely on the assembler being able
+ to handle constant expressions (Dolphin Triton88 can't).
+
+ * genattrtab.c: Add a hash table mechanism to share RTL and strings.
+ (attr_hash_add_rtx, attr_hash_add_string): New functions.
+ (attr_rtx): New function to generate a shared RTL.
+ (attr_printf, attr_printf): New functions to generate a shared string.
+
+ * genattrtab.c: Extend the treatment of DEFINE_ATTR to allow a CONST
+ expression as the default value, indicating a constant attribute.
+ (struct attr_desc): Add `is_const' field.
+ (check_attr_test): Add `is_const' parameter. Disallow use of insn
+ attributes and MATCH_OPERAND in a constant expression; allow
+ SYMBOL_REF in a constant expression. All callers updated.
+ (chech_attr_value): Allow a SYMBOL_REF as a constant expression.
+ (convert_const_symbol_ref): New function that converts a constant
+ SYMBOL_REF to a COND that explictly tests each value.
+ (make_canonical): Use `convert_const_symbol_ref' for constant
+ SYMBOL_REF expressions.
+ (make_length_attrs, find_attr, make_internal_attr): Mark `is_const'
+ as false.
+ (gen_attr): Get rid of a top-level CONST node and mark `is_const' true.
+ (walk_attr_value): Use of a constant SYMBOL_REF does not set
+ `must_extract' or `must_constrain'.
+ (write_attr_get): Deal with constant attributes.
+
+Fri Mar 6 16:14:27 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (main, path_include) [__MSDOS__]: Handle MSDOS syntax in path.
+
+ * expr.c (store_expr): Fix bugs in last change.
+
+ * objc-actions.c (receiver_is_class_object): Fix typos.
+
+ * ecoff-cmp: File deleted.
+
+ * config.sub (3b1): Convert to m68000, not m68k.
+
+ * cccp.c (do_line): Handle "syetem header" indicator flag `3'.
+
+ * t-i386isc: New file.
+ * configure (i386-*-isc*): Use the new file.
+ * i386isc.h (LIB_SPEC, ENDFILE_SPEC): Use crtbegin.o/crtend.o.
+
+Fri Mar 6 14:37:25 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * expmed.c (expand_dec): Fix comment.
+
+Fri Mar 6 09:49:54 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.c (emit_move_sequence): Check reload_in_progress in
+ addition to reload_completed.
+
+ * m88k.md (cpu attribute): Fix.
+
+Fri Mar 6 06:24:08 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (CONST_COSTS): Fix eliminate_constant_term calling
+ sequence.
+
+ * mips.c (simple_memory_operand): Move offset variable for calling
+ eliminate_constant_term into a local block by the call.
+ (mips_address_cost): Ditto.
+
+ * mips.md (movsi_ulw, movsi_usw): Fix eliminate_constant_term
+ calling sequence.
+
+Fri Mar 6 00:30:10 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes: Don't fix comments on #endif, #else.
+ It made the egrep string too long.
+
+ * expr.c (store_expr): Handle size mismatch copying from string cst.
+
+Thu Mar 5 22:11:03 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc-actions.c (receiver_is_class_object): Clean up syntax.
+
+ * sun386.h (ASM_GENERATE_INTERNAL_LABEL): Start with a star.
+
+ * reload1.c (reload): Change `=' to `==' in `if'
+ inside REGISTER_CONSTRAINTS conditional.
+
+Thu Mar 5 21:29:33 1992 Michael Tiemann (tiemann@mole.gnu.ai.mit.edu)
+
+ * cp-parse.y (yyprint): Make declarations declare __inline
+ consistently.
+
+Thu Mar 5 18:34:32 1992 Jeffrey A. Law (law@mole.gnu.ai.mit.edu)
+
+ * m68k.md (dbra patterns): Fix NO_ADDSUB_Q ifdef conditionals.
+ Fix location of comment regarding use of REG_NOTES in dbra insns.
+
+Thu Mar 5 18:30:55 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (libgcc.a): If $(LIBGCC1) is empty, ignore it.
+ * cross-make (LIBGCC1): Make definition empty.
+
+Thu Mar 5 17:48:38 1992 Torbjorn Granlund (tege@wombat.gnu.ai.mit.edu)
+
+ * reload.c (find_reloads): Correctly detect different operand
+ constraint alternatives (by changing subscription from 0 to loop
+ variable i).
+
+Thu Mar 5 16:58:38 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * Makefile.in (libsubdir): Rename $(libdir)/gcc gcc-lib.
+ * gcc.c (STANDARD_EXEC_PREFIX): Ditto.
+
+ * c-typeck.c: Implement a spelling stack to store and print
+ compoment names for error messages.
+
+ (push_{string,member_name,array_bounds}): New functions.
+ (SPELLING_DEPTH, RESTORE_SPELLING_DEPTH, SAVE_SPELLING_DEPTH): New
+ macros to save and restore the spelling stack.
+ (digest_init, process_init_constructor): Use these.
+
+ (spelling_length, print_spelling): New functions.
+ (error_init, pedwarn_init): Use them.
+
+ (get_spelling): New function.
+ (convert_for_assignment): Use `get_spelling' to interpret messages
+ that are based on the spelling stack.
+ (process_init_constructor): Pass `&initialization_message'.
+
+Thu Mar 5 15:22:22 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * expr.c (init_expr): Initialize forced_labels to zero.
+ (save_expr_status): Saved forced_labels away and initilize to
+ zero.
+ (restore_expr_status): Restore value of forced_labels.
+ * function.h (struct function): Add forced_labels field.
+ * integrate.c (function_cannot_inline_p): Reject function with
+ nonzero forced_labels.
+
+Thu Mar 5 15:08:47 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * regclass.c (fix_register): Use decode_reg_name.
+ * stmt.c (expand_asm_operands): Ditto.
+ * varasm.c (decode_reg_name): Ignore a leading '#'.
+
+ For RMS:
+ * cp-call.c (build_method_call): Delete now redundant tests of
+ TREE_EXTERNAL before calls to assemble_external.
+ * cp-init.c (build_virtual_init, build_builtin_call): Ditto.
+ * cp-method.c (hack_identifier): Ditto.
+ * cp-typeck.c (build_component_ref, build_function_call_real): Ditto.
+ * c-parse.y (primary): Ditto.
+
+Thu Mar 5 13:49:29 1992 Jeffrey A. Law (law@wombat.gnu.ai.mit.edu)
+
+ * expr.c (move_by_pieces_ninsns): Finish Mar. 4 change. Do not
+ choose a mode which has a size greater than MOVE_MAX.
+
+ * m68k.c: Change all occurances of "mov." to "move%.l" so that
+ ASM_OUTPUT_OPCODE can choose the right syntax.
+ * m68k.md: Change "mov." to "move." in comments for consistency.
+
+Thu Mar 5 10:04:52 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * stmt.c (warn_if_unused_value): Handle NON_LVALUE_EXPR.
+
+ * limits.h (_LIMITS_H_): Correct misspellings.
+
+ * Makefile.in ("if" and "["): Romp, 4.3 BSD, and Ultirx systems
+ fail when the condition is false. Change troublesome instances to
+ either use "case" or use '-' as a prefix to the compilation rule.
+
+Thu Mar 5 09:08:11 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rs6000.md (lshrdi3): Add earlyclobber to first alternative.
+
+ * explow.c (stabilize): Copy RTX_UNCHANGING_P and MEM_VOLATILE_P.
+
+Thu Mar 5 06:05:31 1992 Michael Tiemann (tiemann@cygnus.com)
+
+ * cp-parse.y (.pushlevel): Stack and unstack STMT_DECL_MSG.
+
+ * cp-parse.y (unary_expr): Add EXTENSION support.
+ ({maybe_label,label}_decls, label_decl): Define these rules as from
+ c-parse.y.
+ * cp-decl.c ({lookup,shadow,define}_label): Update from c-decl.c.
+ * gplus.gperf: Add EXTENSION and LABEL.
+ * cp-hash.h: Remade using gperf.
+
+Wed Mar 4 21:38:41 1992 Jeffrey A. Law (law@wombat.gnu.ai.mit.edu)
+
+ * expr.c (move_by_pieces): Do not choose a mode which has a size
+ greater than MOVE_MAX.
+
+Wed Mar 4 23:24:25 1992 Per Bothner (bothner@cygnus.com)
+
+ * cp-class.c, cp-decl.c, cp-decl2.c, cp-init.c, cp-lex.c,
+ cp-method.c, cp-typeck.c: Casts from enum to int that
+ are necessary (not alas not quite sufficient) to get
+ cc1plus to compile using system cc on Sony NewsOS 3.2
+ (presumably Portable C Compiler).
+
+Wed Mar 4 22:05:39 1992 Michael Tiemann (tiemann@cygnus.com)
+
+ * cp-type2.c (build_functional_cast): Fix typo in code searching
+ down type lattice looking for constructor.
+
+Wed Mar 4 16:52:21 1992 Jim Wilson (wilson@cygnus.com)
+
+ * gstdarg.h: Include va-sparc.h on sparc systems. Delete now
+ obsolete `#ifndef __sparc__'.
+ * va-sparc.h (va_start): Provide alternate definition when
+ included via stdarg.h. Delete obsolete comment.
+ (va_arg): Add missing set of parentheses.
+
+Wed Mar 4 15:21:20 1992 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu)
+
+ * fixincludes: Make egrep pattern more general. Check for
+ additional special case problems in Ultrix, News-OS, and IRIX.
+
+Wed Mar 4 15:15:45 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.c (function_epilogue): Don't make a special case for
+ current_function_returns_struct: this is done via
+ current_function_pops_args.
+
+ * sun386.h (DATA_SECTION_ASSM_OP): Fix typo in undef.
+
+Wed Mar 4 14:21:37 1992 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu)
+
+ * fixincludes, fixinc.svr4: Only change #else and #endif at the
+ beginnings of lines, aside from whitespace, so it doesn't change
+ them within comments.
+
+Wed Mar 4 09:48:21 1992 Michael Tiemann (tiemann@mole.gnu.ai.mit.edu)
+
+ * cp-method.c (build_decl_overload): Braino in handling of DELETE
+ (NEW was handled correctly).
+
+Wed Mar 4 09:14:57 1992 Jeffrey A. Law (law@wombat.gnu.ai.mit.edu)
+
+ * Makefile.in (install-man): Install the g++ manual page.
+
+ * m68k.md (dbCC peepholes): Two new peepholes to recognize cases
+ where a compare/branch can be done (for free) as part of a dbCC
+ insn. This turns jCC;dbf into dbCC;jCC (the jCC is now outside the
+ inner part of the loop).
+
+ * m68k.c (valid_dbcc_comparison_p): New function which returns TRUE
+ if the given comparison is a valid comparison operator for the dbCC
+ instruction.
+ (output_dbcc_and_branch): New function to output a dbCC;jCC
+ instruction sequence (including possible counter adjustments in
+ SImode)
+
+Wed Mar 4 04:32:11 1992 Michael Tiemann (tiemann@cygnus.com)
+
+ * cp-dem.c (optable): Add entry for `operator='.
+
+ * cp-decl.c (finish_function): Emit a jump to RETURN_LABEL if
+ CLEANUP_LABEL is non-zero. (Suggested by niklas@appli.se)
+
+Wed Mar 4 04:28:10 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * libgcc1.c (perform_lesf2): Condition tested was backwards.
+
+Wed Mar 4 03:11:48 1992 Ken Raeburn (Raeburn@Cygnus.COM)
+
+ * cp-pt.c (overload_template_name): Extra pushlevel isn't needed;
+ omit it.
+ (undo_template_name_overload): Don't pop the level that isn't pushed
+ any more.
+
+ * cp-class.c (pushclass): Don't bother processing unnamed tags.
+ (popclass): Likewise.
+
+ * cp-init.c (build_vec_delete): If pointer is null, don't do
+ anything.
+
+ * cp-parse.y (member_init): Accept base class names that are
+ template type names.
+
+ * cp-decl.c (start_decl): Don't prepend decl of `this' to arg lists
+ of methods of uninstantiated types.
+
+ * cp-pt.c (instantiate_template): If no text has been saved away,
+ don't try to parse it; an external reference will result.
+
+ * cp-parse.y (yyprint): Declare this at head of file.
+
+ * cp-pt.c (instantiate_class_template): If the template specified
+ hasn't been defined, don't reject the instantiation; make it a
+ normal undefined type.
+
+ * cp-parse.y (template_def): Try to recover from errors more
+ gracefully.
+
+Tue Mar 3 15:37:35 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * protoize.c (munge_compile_params): Compute the maximum number of
+ params (`temp_parms' length) safely.
+
+ * dwarfout.c (const_value_attribute): Punt quasi-constant values.
+ (location_or_const_value_attribute): Ditto.
+
+ * Makefile.in (install-common): Install the cross compilation
+ driver program even when $(tooldir)/bin doesn't exist.
+
+Tue Mar 3 14:39:55 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.h (enum reg_class): Undo Jan 17 change that deleted class BREG.
+ (REG_CLASS_NAMES,REG_CLASS_CONTENTS,REGNO_REG_CLASS): Likewise.
+ (REG_CLASS_FROM_LETTER): Likewise.
+ * i386.c (regclass_map): Likewise.
+
+ * svr4.h (LINK_SPEC): Don't do -z or -t here: it's already in
+ link_command_spec. But do handle -G.
+
+ * i386.md (casesi): Rewrite pattern to reflect the way to emitted
+ code actually works.
+
+Tue Mar 3 09:59:15 1992 Jeffrey A. Law (law@super.super.org)
+
+ * m68k.md (dbra pattern in HImode): New pattern to match
+ decrement_and_branch insns when the loop counter is decremented in
+ HImode.
+
+Tue Mar 3 07:57:18 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rs6000.md (doz patterns): Add missing `I' constraint.
+
+ * reorg.c (mark_target_live_regs): A CALL_INSN livens all global regs.
+
+ * vax.h (EXTRA_CONSTRAINT): New macro to select non-mode-dependent
+ MEM operands.
+ * vax.md (jlbc/jlbs): Use jbc/jbs if mode-dependent memory.
+ * vax.c (reg_or_nxmem_operand): Function deleted.
+
+ * expr.c (do_store_flag): Swap comparison code when putting
+ constant arg second.
+
+ * m68k.md (addhi3): Convert, e.g., 65535 to -1 before seeing if
+ we can use subqw.
+ (addqi3): Similarly for QImode constants
+
+ * local-alloc (optimize_reg_copy_1): Renamed from optimize_reg_copy.
+ (optimize_reg_copy_2): New function.
+ (update_equiv_regs): Call optimize_reg_copy_[12].
+
+ * combine.c (make_compound_operation, case AND): Turn SUBREG case
+ back on now that bug in i386.md has been fixed.
+ (simplify_comparison, case ASHIFT): If shifting low-order bit to
+ sign bit and doing equality comparison, convert to AND with low-order
+ bit (inequality case was already handled).
+ Also remove redundant test of CONST_OP in an earlier case.
+
+ * sun2o4.h (LINK_SPEC): No longer need -Bstatic with -g.
+
+ * m68k.c, m68k.h: Avoid %X% for most upper-case X since it means
+ something special to SCCS.
+
+ * rs6000.md (type): Add new type, mtlr.
+ (function_unit branch): Add delay from mtlr to br.
+ (movsi): When moving to lr, type is "mtlr".
+
+ * unroll.c (reg_dead_after_loop): Check for infinite loop by
+ counting JUMP_INSNs we follow.
+ Use GET_RTX_CLASS, reg_referenced_p, and single_set.
+
+ * expr.c (expand_increment): Set op0_is_copy when we are referencing
+ the low-order part of some value in a register.
+
+ * combine.c (force_to_mode): New arg REG; pass in recursive call.
+ If X has the same value as REG, use REG.
+ (make_field_assignment): Handle case when DEST and part of source
+ aren't the same, but are equal; pass destination to force_to_mode.
+
+ * m68k.md (addhi3): Generate addqw, subqw, or addw for
+ STRICT_LOW_PART versions the same way we handle the normal case.
+ (addqi3): Similarly for addqb, subqb, and addb.
+
+ * genattrtab.c (write_test_expr, case MOD): Double `%' in printf call.
+ (write_eligible_delay): Internal attribute "*delay_type" is always
+ used literally; it has no suffix or prefix.
+
+ * m68k.md, vax.md (sob): Rewrite inequality versions so that they
+ have a PLUS inside the comparison; combine cannot remove the PLUS
+ due to overflow considerations.
+
+Tue Mar 3 07:56:30 1992 Eric Youngdale (youngdale at v6550c.nrl.navy.mil)
+
+ * vms.h (L__main): Remove #include <stdio.h>
+
+ * make-gcc.com: Call make-l2.com.
+
+Tue Mar 3 05:37:08 1992 Michael Tiemann (tiemann@cygnus.com)
+
+ * stor-layout.c (layout_type): Handle OFFSET_TYPE.
+ * cp-tree.c (build_member_type): Deleted.
+ * cp-typeck.c, cp-decl.c, cp-init.c: All callers of
+ `build_member_type' now call `build_offset_type'.
+ * cp-typeck.c (convert_arguments): An argument that's an OFFSET_REF
+ must be resolved by `resolve_offset_ref'. The OFFSET_REF case in
+ expand_expr does not do the right thing for G++ yet.
+
+ * cp-decl.c (grokdeclarator): Take CONSTP and VOLATILEP into account
+ when building METHOD_TYPEs.
+ (start_function): Ditto.
+
+ * cp-method.c (build_decl_overload): Change interface to take DNAME
+ instead of NAME. Also, special-case handling of the default
+ operator new and operator delete for the std. signatures.
+ * cp-*.c: All callers changed.
+
+ * cp-class.c (build_vtable_entry): Rewrite built-in limit check to
+ work on platforms where SIZETYPE is unsigned.
+
+Mon Mar 2 08:49:16 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.c (m88k_debugger_offset): Delete warning.
+
+ * m88k.h (OVERRIDE_OPTIONS): Set `m88k_cpu' based on `target_flags'.
+
+ * m88k.md (cmpsi insn): Delete alternative that complements the
+ compare string for a swapped compare (it's wrong and unnecessary).
+ (cpu attribute): Define.
+
+ From Jyrki Kuoppala:
+ * pc532.h, pc532-mach.h, pc532-min.h, xm-ps532-min.h: New files.
+ * configure (ns32k-pc532-mach*, ns32k-pc532-minix*): New alternatives.
+
+ * dbxout.c (dbxout_type): Don't invoke dbxout_type_methods if
+ there are none.
+
+ * vax.c (print_operand_address): Allow REG+TERM.
+
+ * c-typeck.c (process_init_constructor): Reuse space for error
+ message strings.
+
+Mon Mar 2 02:54:48 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * seq386gas.h: New file, for Sequent using 386 & GAS.
+
+ * xm-i386sco.h: New file.
+
+ * optabs.c (ldexp): New function. Used if host ldexp is broken.
+
+ * configure (i386-sequent-bsd*): Use seq386gas.h if --gas.
+ (i386-*-sco*): The host file is now xm-i386sco.h.
+
+ * i386.md (SImode and HImode logical compare): If we are only
+ testing one byte of a mem, use a byte test opcode.
+ (bit test patterns): Likewise when emitting test opcodes.
+
+Sun Mar 1 14:47:31 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * longlong.h (_IBMR2 udiv_qrnnd): Switch off due to overflow problems.
+
+Sun Mar 1 11:19:55 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (force_to_mode): New function.
+ (make_field_assignment): Rework code that handles fixed-position
+ fields to make it both much more general and much simpler.
+
+ * m68k.md: Add missing insns for using byte operations with
+ STRICT_LOW_PART; add was missing commutative equivalent and
+ most operations other than add and subtract were missing.
+
+ * varasm.c (assemble_start_function): Add missing arg to call to
+ dbxout_begin_function.
+
+ * fold-const.c (const_binop): Make minor source change to work
+ around bug in IBM RT PC compiler.
+
+Sun Mar 1 05:01:34 1992 Michael Tiemann (tiemann@rtl.cygnus.com)
+
+ * cp-typeck.c (build_modify_expr): When wrapping NEWRHS in a
+ SAVE_EXPR, call `break_out_cleanups' first.
+
+Sat Feb 29 23:19:20 1992 Jim Wilson (wilson@cygnus.com)
+
+ * reload.c (find_reloads): Reset preferred_class to NO_REGS after
+ substituting a reg_equiv_address for a pseudo reg.
+
+ * unroll.c (precondition_loop_p): Fix misplaced paren when checking
+ for MODE_FLOAT rtx.
+
+Sat Feb 29 13:59:54 1992 Michael Tiemann (tiemann@cygnus.com)
+
+ * cp-typeck.c (build_modify_expr): To complete 24 Feb change,
+ COND_EXPRs must evaluate LHS in conditional slot if LHS has side
+ effects. Otherwise the SAVE_EXPRs in lhs will only be evaluated
+ once, even though they are referenced on both branches of the
+ conditional.
+
+Sat Feb 29 13:32:35 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * README.X11: Add warning to not use gas when compiling PIC code.
+
+ * fixincludes: Allow TAB as well as SPC before symbols to change.
+ Don't change "sun" if it's part of a multiword name that contains
+ underscores.
+ Make intermediate dir, if needed, when doing special-case fixes.
+ Use previously fixed file, if it exists, as source for all special
+ fixes. Do less copying when making special fixes.
+ Ignore errors when chmod'ing a file that might not exist.
+ * fixinc.svr4: Preserve whitespace around "#" when fixing #else and
+ #endif.
+ Allow TAB as well as SPC before symbols to change.
+ Combine "sun" cases as in fixincludes.
+
+Sat Feb 29 11:10:55 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (movstrsi): Print opcode as "movsl" so that seq386.h can
+ change it into smovl.
+
+Sat Feb 29 09:15:51 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * function.c (expand_function_end): Allocate rtl that points to
+ trampoline permanently.
+
+ * reload1.c (gen_input_reload): If one operand of a PLUS is a MEM,
+ move it into a reg and add the other (makes code agree with comments).
+
+ * explow.c (eliminate_constant_term): Rework so it does not directly
+ add integer values; call simplify_binary_operation instead.
+ Second arg is now pointer to rtx, not int.
+ Assume constant is always second operand of PLUS.
+ (memory_address): Pass rtx pointer to eliminate_constant_term.
+ * halfpic.c (half_pic_address_p): Likewise.
+ * mips.c (simple_memory_operand, mips_address_cost): Likewise.
+ (mips_debugger_offset): Likewise.
+ * expr.c (expand_expr, case PLUS_EXPR): Likewise.
+ Don't add INTVALs; use simplify_binary_operation instead.
+ Remove obsolete OLD_INDEXING code.
+ Put a MULT in the first operand of the PLUS.
+
+ * combine.c (combinable_i3pat): Don't combine if I3DEST is a hard
+ reg in a non-valid mode.
+
+Sat Feb 29 09:14:19 1992 Eric Youngdale (youngdale@v6550c.nrl.navy.mil)
+
+ * vms.h (ASM_OUTPUT_COMMON): Use SIZE instead of ROUNDED bytes.
+ (DO_GLOBAL_CTORS_BODY): Do not call fflush(stdout).
+
+ * gcc.texi: Update GLOBAL[DEF,REF,VALUE] documentation.
+
+ * make-l2.com: Remove call to test_gcc2.
+
+Sat Feb 29 02:52:59 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (main): Rename envvars to CPLUS_INCLUDE_PATH and
+ OBJCPLUS_INCLUDE_PATH.
+
+ * m68k.h (TRANSFER_FROM_TRAMPOLINE): Use `move', not `mov'.
+
+Fri Feb 28 19:39:09 1992 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu)
+
+ * fixincludes: Don't change symbols that already start with `_'
+ into `__symbol__'. Merge all of the sun* substitutions so they
+ don't fight each other.
+ Comment out junk after #elses and #endifs, to prevent warnings
+ when -pedantic is given.
+
+Fri Feb 28 13:42:05 1992 Jim Wilson (wilson@cygnus.com)
+
+ * sched.c (schedule_insns): Don't update value of reg_live_length
+ when it is negative, because negative values are special. Earlier
+ fix Dec 17 disabled the fprintf call, but not the assignment.
+
+ * unroll.c (copy_loop_body): After incrementing the base reg for a
+ split DEST_ADDR giv, must subtract the const_adjust from the base
+ reg to get its true current value.
+
+ * loop.c (maybe_eliminate_biv_1): When handling COMPARE, verify
+ that mult_val is positive, which makes the code match the comment,
+ and surrounding code.
+
+ * sparc.c (legitimize_pic_address): Always test reload_completed
+ in addition to reload_in_progress.
+
+ * sched.c (schedule_block): Don't reorder any USE insns at the end
+ of a function. Exclude them all from scheduling.
+
+ * c-typeck.c (build_array_ref): Check for when `ar' is an
+ error_mark_node and don't emit a second error message for that node.
+
+ * Makefile.in: Correct misc typos in comments or spacing.
+ (mostlyclean): Update names of files to delete.
+
+ * Makefile.in (install-man): Also install cccp man page.
+ (uninstall): Also delete cccp man page. Don't delete protoize and
+ unprotoize man pages twice.
+
+ * Makefile.in (libgcc2.a): Delete unnecessary -fstrength-reduce -O
+ flags on gcc command lines, superseded by LIBGCC2_CFLAGS.
+
+ * Makefile.in (config.status): Verify that file does not exist
+ before printing an error and failing. Prevents problem with Sun's
+ KEEP_STATE feature.
+
+Fri Feb 28 05:15:58 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * stmt.c (expand_computed_goto): Call emit_queue.
+
+ * function.c (assign_parms): Don't generate convert whose operand
+ is register that is not valid in its mode.
+
+ * reload.c (find_reloads_toplev): Don't do anything with paradoxical
+ SUBREGs if BYTE_LOADS_ZERO_EXTEND.
+
+Thu Feb 27 09:59:09 1992 Jeffrey A Law (law at b115.super.org)
+
+ * toplev.c (main): Enable caller-saves for all machines at
+ optimization levels of -O2 or higher.
+ * mips.h (OPTIMIZATION_OPTIONS): toplev.c will turn on
+ caller-saves at -O2 now. Do not do it here.
+ * sparc.h (OPTIMIZATION_OPTIONS): Likewise
+
+Thu Feb 27 06:47:31 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cp-call.c: Move some extern declarations to file level.
+
+ * emit-rtl.c (init_emit_once): Cast VOIDmode to int in array index.
+
+ * reorg.c (mark_target_live_regs): Don't make recursive call if
+ function being compiled has infinite loop.
+
+ * cse.c (fold_rtx, case 'o'): New case to support folding LO_SUM.
+
+ * global-alloc.c (global_alloc): When calling reload, pass the
+ result of get_insns instead of basic_block_head[0].
+
+ * c-typeck.c (process_init_constructor): Don't check array index
+ against limits if array bounds weren't specified.
+
+ * gcc.c (link_command_spec): Put back -s.
+
+ * gcc.c (find_a_file): Add missing paren in init of file_suffix.
+
+ * i386sun.h (LIB_SPEC): Insert missing blank.
+
+ * sun386.h (TEXT_SECTION_ASM_OP, DATA_SECTION_ASM_OP): Add #undef.
+
+ * sparc.h (LINK_SPEC): Correct comment.
+
+ * sun3.h, i386sun.h (LINK_SPEC): Don't force -Bstatic if -g.
+
+ * mips-news.h (ASM_SPEC): Add missing "}".
+
+ * Makefile.in (install-native): Don't include install-proto.
+ (.y.c): Suppress default rule for using Yacc.
+
+ * combine.c (apply_distributive_law, case SUBREG): Check that word
+ numbers are the same.
+ Don't change a single-word operation into a multi-word operation.
+ Put all checks on SUBREGs in one place.
+ (gen_lowpart_for_combine): Use correct word number when making
+ explicit SUBREG.
+
+ * README.SCO: Obsolete file deleted.
+
+Wed Feb 26 21:23:02 1992 Jim Wilson (wilson@cygnus.com)
+
+ * sparc.md (DImode sethi): Correctly handle CONST_DOUBLE, was
+ wrong endian.
+ (DImode lo_sum): Don't output CONST_DOUBLES as 64 bit constants,
+ just output the low 32 bits.
+
+ * unroll.c (find_splittable_givs): For combined address givs, save
+ the increment amount in add_val.
+ (copy_loop_body): For combined address givs, increment by the
+ amount calculated by find_splittable_givs, not by the amount that
+ the giv it was combined with gets incremented by.
+
+ * expr.c (clear_pending_stack_adjust): Check flag_no_inline, not
+ optimize, to determine whether functions declared inline will be
+ inlined.
+
+ * dbxout.c: Delete all #ifndef DBX_DEBUGGING_INFO stubs. None of
+ them are needed.
+
+ * hp800.c, hp800.h: Fix typos in comments.
+
+Wed Feb 26 02:39:52 1992 Michael Tiemann (tiemann at rtl.cygnus.com)
+
+ * cp-call.c (build_method_call): If conversion of INSTANCE_PTR
+ yields error_mark_node, return error_mark_node immediately.
+
+Tue Feb 25 23:40:01 1992 Mike Stump (mrs at cygnus.com)
+
+ * tree.c (array_type_nelts): Fix documentation, really nelts-1
+ * cp-tree.c cp-tree.h cp-init.c (expand_vec_init): Fixed
+ multi-dimensional array inits.
+
+Mon Feb 24 00:03:23 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-tree.c (build_cplus_new): Set TREE_SIDE_EFFECTS bit on
+ NEW_EXPR.
+
+ * cp-typeck.c (build_modify_expr): Handle WITH_CLEANUP_EXPRs
+ specially when they appear in expressions (not initializations).
+ Also handle COND_EXPRs on the right-hand-side specially (in case one
+ of the COND_EXPR's branches is a WITH_CLEANUP_EXPR).
+
+Sun Feb 23 15:11:27 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl2.c (finish_anon_union): Make RTL for ANON_UNION_DECL based
+ on MAIN_DECL.
+
+ * cp-decl.c (lookup_tag): Deal with the fact that `clear_anon_tags'
+ may have been run.
+
+ * cp-decl.c (cplus_expand_expr_stmt): Give line number for usage
+ whcih incurs warning message.
+
+Sat Feb 22 20:49:45 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl.c (init_decl_processing,auto_function): New approach to
+ defining the default functions `operator new' and `operator delete'.
+ * cp-init.c (init_init_processing): Rest of changes here.
+ * libgcc2.c (_builtin_{new,delete,New}): Gone.
+ * libgcc2.c (_new_handler): New name for section that defines the
+ default new handler.
+
+Sat Feb 22 02:09:55 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 2.0 released.
+
+ * gcc.c (do_spec_1): Handle SPACE_AFTER_L_OPTION.
+ * hp320.h (SPACE_AFTER_L_OPTION): Defined.
+ Note: for 2.1, try making a space there on all systems.
+
+ * i386mach.h (perform_*): New macros, copied from i386rose.h.
+
+ * Makefile.in (distclean): New target.
+ (realclean): Avoid duplication with self or with distclean.
+ (gcc.xtar.Z): Depend on gcc.xtar.
+ (gcc.xtar): Fixes in copying files.
+
+ * expr.c (do_store_flag): Don't correct CODE before where it is set.
+
+ * cp-parse.y (stmt): Pass pushcase_range all the args it wants.
+
+Fri Feb 21 18:14:52 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (distribute_notes): Correctly handle the case of a
+ REG_DEAD note for a multi-word hard register when not all of
+ the words are used.
+
+Fri Feb 21 16:47:32 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Change Meissner version # to 12.
+ (half_pic support): Move the halfpic support to halfpic.h which is
+ included in the decrose case, and nop the support in other MIPS
+ platforms.
+ (OPTIMIZATION_OPTIONS): Move setting caller-saves to -O2.
+ (OBJECT_FORMAT_COFF, EXTENDED_COFF): Define unless OSF/rose.
+ (INITIAL_FRAME_POINTER_OFFSET): Always recalculate the frame size,
+ don't rely on cached values.
+
+ * mips.c (half_pic support): Move the halfpic support to halfpic.c,
+ which is only compiled for OSF/rose.
+ (expand_block_move): Use copy_addr_to_reg instead of copy_to_reg in
+ case either the source or destination is an integer constant
+ converted to an appropriate pointer type.
+ (mips_debugger_offset): Use a local variable to hold function
+ result.
+
+ * decrose.h (toplevel): Include halfpic.h for halfpic support.
+ (PTRDIFF_TYPE): Change to 'int' to match current include files.
+ (WCHAR_TYPE): Change to 'unsigned int' to match include files.
+ (INIT_SECTION_ASM_OP): Delete, since the OSF/rose assembler doesn't
+ support a true initialization section.
+
+ * encrose.h (PTRDIFF_TYPE): Change to 'int' to match current include
+ files.
+ (WCHAR_TYPE): Change to 'unsigned int' to match include files.
+
+ * t-decrose (EXTRA_OBJS): Define as halfpic.o to provide halfpic
+ support.
+ (CONFIG2_H): Treat halfpic.h as another config file.
+ (halfpic.o): Add dependencies.
+
+ * halfpic.h (new file): Common include file for systems needing the
+ OSF/rose half-pic shared library support.
+
+ * halfpic.c (new file): Common support file for systems needing the
+ OSF/rose half-pic shared library support. Currently these are stub
+ functions.
+
+Fri Feb 21 16:07:02 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-parse.y (get_current_declspecs): New function
+ (needed for naming sections).
+
+Fri Feb 21 01:34:08 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * dwarfout.c (location_or_const_value_attribute): Use DECL_RTL again.
+ Seems to be safer for the moment.
+ * function.c (instantiate_decls): Don't instantiate DECL_INCOMING_RTL.
+
+ * dwarfout.c (output_mem_loc_descriptor): Handle CONST like SYMBOL_REF.
+
+ * collect2.c (errno): Declare if not macro.
+
+ * dbxout.c [MIPS]: Include gstab.h, not stab.h.
+
+ * dbxout.c (dbxout_symbol): No longer flush leading _ for C++ syms.
+
+ * cp-parse.y (.hush_warning): Set $$.
+
+ * gstdarg.h: Handle _HIDDEN_VA_LIST as in gvarargs.h.
+
+Thu Feb 20 07:41:29 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * vax.c (reg_or_nxmem_operand): New function.
+ (split_quadword_operands): Add missing return type (void).
+ * vax.md (jlbc/jbc/jlbs/jbs): Handle QImode operands properly.
+
+ * caller-save.c (set_reg_live): Use mode of SUBREG to see how many
+ hard regs are written.
+
+ * combine.c (simplify_shift_const, case IOR, AND, XOR): Perform
+ logic computation in RESULT_MODE, not mode of VAROP.
+
+Wed Feb 19 18:32:05 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * hp320.h (PRINT_OPERAND): Support codes '$' and '&'.
+
+ * reload1.c (reload): Add cast of enum in index.
+
+ * vms.h (CPP_PREDEFINES): Define __GNUC__ as 2.
+
+Wed Feb 19 21:43:36 1992 Ron Guilmette (rfg at ncd.com)
+
+ * dwarfout.c (output_mem_loc_descriptor): Deleted useless blank line.
+ (output_mem_loc_descriptor) Added code to handle CONSTs in DECL_RTL
+ expressions.
+ (dwarfout_finish): Added code to put a null string at the end of
+ the terminating .debug_macinfo section.
+
+Tue Feb 18 18:34:13 1992 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * cccp.c (main): Fix typo in comment or spacing.
+ * dbxout.c (dbxout_block): Likewise.
+ * expr.c (convert_move): Likewise.
+ * reload1.c (emit_reload_insn): Likewise.
+ * rtl.h (REG_NOTES): Likewise.
+ * sun4o3.h: Likewise.
+ * ultrix.h (CPP_PREDEFINES): Likewise.
+ * toplev.c (flag_no_common): Likewise.
+ * stmt.c (layout_type): Likewise.
+ * gcc.c (is_linker_dir, lookup_compiler): Likewise.
+
+ * sched.c (schedule_block): Comment code handling USE insns as
+ obsolete.
+
+Tue Feb 18 14:44:49 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c++: Run gcc in same dir as c++ was in, if exists there.
+ Use `exec' to run it.
+ New var `havefiles'; special message if no input files specified.
+ Pass through any unrecognized options.
+
+ * g++: Now a link to c++.
+
+Tue Feb 18 04:54:52 1992 david d [zoo] zuhn (zoo at lynx.spa.umn.edu)
+
+ * protoize.c (main): added support for -p flag, to specify which
+ gcc is the one to call for -fgen-aux-info support.
+
+Tue Feb 18 07:29:23 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): Don't clobber OTHER_INSN's PATTERN if
+ we aren't able to change the insn.
+
+ * romp.md (bit_insv): Add missing CLOBBER when making pattern to
+ match mftb; likewise for the DEFINE_INSN.
+
+Tue Feb 18 01:03:41 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * rs6000.h (bss_section): Set `in_section' correctly.
+
+ * expmed.c (synth_mult): Count second shift for alg_compound.
+ Count extra shift for lea case.
+ * m68k.h (RTX_COSTS): Reduce cost of multiply.
+
+ * function.c (instantiate_decls): Instantiate DECL_INCOMING_RTL.
+
+Mon Feb 17 19:17:50 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * a29k.md (divmodsi4, udivmodsi4): Don't use reg 180 explicitly.
+ Instead use 'q' constraint letter.
+
+Mon Feb 17 16:15:02 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * global-alloc.c (global_alloc): Always call `reload'.
+
+Mon Feb 17 10:38:38 1992 Jim Wilson (wilson at sphagnum.cygnus.com)
+
+ * a29k.md (movdi define_split): Use DImode in operand_subword
+ calls, not DFmode.
+
+Mon Feb 17 08:20:33 1992 Michael Tiemann (tiemann at mole.gnu.ai.mit.edu)
+
+ * varasm.c (assemble_external): Check that DECL is some sort of
+ _DECL before referencing its DECL_RTL.
+
+Sun Feb 16 13:05:36 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-call.c (build_method_call): Add call to `assemble_external' in
+ case this is the first use of FUNCTION.
+ * cp-class.c (build_vfn_ref): Ditto for VTBL.
+ * cp-decl2.c (write_vtable_entries): Ditto for FN.
+ * cp-init.c (build_offset_ref): Ditto for T.
+ * cp-typeck.c (build_function_call_real): Ditto for FUNCTION.
+ * cp-method.c (hack_identifier): Ditto for VALUE. Also remove
+ action that made call to `assemble_external' when !TREE_USED (VALUE).
+
+ * cp-lex.c (do_identifier): Remove call to `assemble_external' when
+ implicitly declaring ID.
+
+ * cp-parse.y (primary): Simplify the rules for calling
+ `assemble_external'.
+
+ * cp-decl.c (finish_function): For destructors, don't call
+ expand_expr_stmt if EXPRSTMT is VOID_ZERO_NODE.
+
+ * cp-typeck.c (default_conversion): Parallel Jan 21 change in
+ c-typeck.c.
+
+Sun Dec 16 23:31:54 1992 Ron Guilmette (rfg at ncd.com)
+
+ * dwarfout.c (fundamental_type_code): Deleted gunk for handling
+ OFFSET_TYPEs. (They are *not* fundamental types).
+ (fundamental_type_code): Fixed typo.
+ (location_attribute, const_value_attribute): Changed to take one
+ rtx parameter rather than one tree parameter.
+ (location_or_const_value_attribute): Changed to use DECL_INCOMING_RTL
+ rather than DECL_RTL for formal parameters. Also changed calls to
+ location_attribute and const_value_attribute to provide the rtl
+ parameter.
+ (fund_type_attribute): Changed to accept an actual fundamental type
+ code as a parameter directly. Also changed all calls correspondingly.
+ (type_attribute): Separated tests for ERROR_MARK and for VOID_TYPE
+ and added comments.
+ (output_unspecified_parameters_die): Changed to take one tree param
+ and to generate *both* an AT_name and an AT_type attribute when the
+ input parameter represents of function definition. Also adjusted
+ all calls correspondingly.
+
+Sun Feb 16 00:54:10 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes: Add #ifndef around size_t declaration in types.h.
+
+ * varasm.c (assemble_external): Do nothing if arg isn't a decl.
+
+ * Makefile.in (cp-parse.c): Update "expect" msg.
+
+ * next.h (CPP_SPEC): Rename -bsd to -strict-bsd.
+
+ * Makefile.in (mostlyclean): Add ld, mips-tfile, mips-tdump.
+
+ * protoize.c (directory_specified_p): Don't match files in subdirs.
+
+ * xm-rs6k-m.h: Renamed from xm-rs6000-mach.h.
+ * configure (rs6000-*-mach*): Changed accordingly.
+
+ * collect2.c (handler): No error msg here. Just resend signal.
+ (write_c_file): Arg to write_list... is pointer.
+ (do_wait): Fix typo.
+ (scan_prog_file for non-OSF): Preserve all underscores.
+
+ * Makefile.in (install-collect2): Install gcc in libsubdir.
+
+Sat Feb 15 15:26:03 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * varasm.c (decode_reg_name): Empty string is not a reg number.
+
+ * fold-const.c (merge_component_references): NE tests against
+ mismatched constants forces 1, not 0, as value.
+
+ * i386gas.h (ASM_OUTPUT_OPCODE): Convert repz to repe.
+
+ * collect2.c: Get rid of PROTO macro; use non-prototype decls.
+ Don't include gstddef.h (had conflicts). Use gstdarg.h, not stdarg.h.
+ (xcalloc, xmalloc): Add casts.
+ (do_wait): Avoid macros WTERMSIG, WEXITSTATUS missing on some machines.
+
+ * cp-typeck.c (default_conversion): Don't use initial value if BLKmode.
+
+ * objc-actions.c (finish_objc): Fix typos in last change.
+
+ * c-aux-info.c, dbxout.c, cccp.c (errno): Declare, if not a macro.
+
+ * i386.md (QI bit test recognizer): Split into separate patterns
+ for memory and register args. Make a scratch reg for memory.
+
+Fri Feb 14 23:39:58 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * tree.c (get_identifier): Improve -Wid-clash message.
+
+Fri Feb 14 16:22:48 1992 Michael Collison (collison at osf.org)
+
+ * i386rose.h (CPP_SPEC): Define the macros LANGUAGE_OBJECTIVE_C and
+ LANGUAGE_C_PLUS_PLUS if we are compiling Objective C or C++.
+ (INIT_SECTION_ASM_OP): Define as .init.
+ (CC1PLUS_SPEC): Define it.
+ (LINK_LIBGCC_SPECIAL): Define this to work around linker bug.
+
+Fri Feb 14 00:38:15 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (protoize.o, unprotoize.o): g++-include is under libdir.
+
+ * Makefile.in (enquire.o): Make the command one long line.
+
+ * gcc.c (do_spec_1): Omit relative prefixes from -L'ing
+ only if RELATIVE_PREFIX_NOT_LINKDIR is defined.
+ * rs6000.h (RELATIVE_PREFIX_NOT_LINKDIR): Defined.
+
+ * varasm.c (assemble_external): Test TREE_EXTERNAL.
+
+ * jump.c (follow_jumps): If can't find chain end, return orig label
+
+ * mot3300.h (PRINT_OPERAND): Always print 16 hex digits for a double.
+
+ * objc-actions.c (build_module_descriptor) [NEXT_OBJC_RUNTIME]: Ret 0.
+ (finish_objc): Value 0 from build_module_descriptor means no ctor.
+ When referencing a class_name symbol, don't output a .globl for it.
+ (finish_objc): Put artificial refs in text section.
+
+ * cccp.c (pedwarn_with_file_and_line): Handle -w, -W.
+
+Fri Feb 14 07:44:08 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.c (notice_update_cc): sCOND opcodes don't change the flags.
+ Don't record test or compares involving stack-like regs, since
+ final can't omits tests or compares involving such regs correctly.
+
+ * i386.c (seq,sne,beq,bne): These opcodes use the state of
+ cc_status from before the curren insn.
+
+ * reg-stack.c (stack_reg_mentioned_p): Don't make static.
+
+Fri Feb 14 06:27:48 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * jump.c (jump_optimize): Disable "if (...) {... x = C;} if (x) ..."
+ optimization; there doesn't seem to be a way to fix it.
+
+Thu Feb 13 18:06:06 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * seq386.h (ASM_OUTPUT_OPCODE): New macro. Change "movs" into
+ "smov" at the start of a string move mnemonic - Sequent as(1)
+ doesn't handle the former.
+
+Thu Feb 13 17:21:26 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (finish_struct): Use pedwarn for pedantic warning.
+ (grokdeclarator): Likewise.
+ * c-parse.y (component_decl_list2): Likewise.
+
+Thu Feb 13 22:11:36 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (make_extraction): Default modes to byte and register
+ size, as appopriate, when the bitfield insn doesn't exist.
+
+ * a29kunix.h (LINK_SPEC): Pass default option file to gld.
+ (LINK_LIBGCC_SPECIAL): Define to work around gld bug.
+
+ * explow.c (copy_to_suggested_reg): Try getting mode from TARGET.
+
+ * rs6000.h (ASM_FILE_END): New macro.
+ (EXTRA_SECTIONS): New section read_only_private_data.
+ (EXTRA_SECTION_FUNCTIONS): New function read_only_private_data_section.
+ (SELECT_RTX_SECTION): Always make non-toc data private, read-only.
+ (SELECT_SECTION): Put read-only data in appropriate sections.
+
+ * jump.c (jump_optimize): Place branch in correct place when
+ optimizing "if (...) {... x = C;} if (x) ...".
+ (redirect_jump): Ensure jump's UID is within range of jump chain.
+
+ * a29k.c (output_prologue): Correctly set LR1 when more than 64
+ registers are needed.
+
+Wed Feb 12 22:22:46 1992 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * make-cccp.com: Define link as a local symbol to avoid
+ possible conflict with a user defined global symbol.
+
+ * make-cc1.com: Likewise.
+
+Thu Feb 13 11:05:07 1992 Michael Meissner (meissner at osf.org)
+
+ * mips.c (make_temp_file): Store created filename into a static
+ file-scope variable, not an auto.
+ (mips_asm_file_end): Use the appropriate filename in printing
+ errors.
+
+Thu Feb 13 01:15:00 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (skip_if_group): Skip comments after the #.
+
+ * cccp.c (macarg): Don't assume stringify will compress spaces.
+ (macroexpand): In stringify, compress space only outside tokens.
+
+ * cexp.y (exp1): Use pedwarn for comma in #if.
+
+ * cp-decl.c (push_binding_level, pop_binding_level):
+ Change `inline' to `__inline'.
+
+ * combine.c (make_compound_operation): Undo previous change.
+
+Wed Feb 12 18:47:47 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * function.c (instantiate_virtual_regs_1, case IF_THEN_ELSE):
+ Don't special case; allow all operands to be processed. The last
+ two operands are nontrivial on the Vax.
+
+Wed Feb 12 18:58:48 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (do_spec_1): Only absolute prefixes turn into -L's.
+ (link_command_spec): Handle LINK_LIBGCC_SPECIAL.
+
+Wed Feb 12 18:38:29 1992 Chris Smith (csmith at convex.com)
+
+ * convex.h (DEFAULT_CALLER_SAVES): define again, bug is fixed.
+ * convex.h (BRANCH_COST): Define as 0, so we won't use complex
+ alternatives to branches (whose expansions contain branches
+ on convex).
+
+Wed Feb 12 17:23:57 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config.sub: Accept just `hppa' for machine.
+
+ * Makefile.in (Install-collect2): New target.
+
+Wed Feb 12 13:55:24 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c (relax_delay_slots): Don't convert jump to return here.
+
+ * configure (a29k-ultra-*): Deleted.
+ (a29k-*-bsd*): Merged with a29k-ultra-*.
+ (romp-*-mach*): Fixed typo in xmake_file name.
+ * xm-a29kunix.h: Renamed from xm-a29k-ult.h.
+ * x-a29kunix: New file.
+
+ * reload.c (find_reloads): Don't use class from preference if it
+ is a single-register class.
+
+Wed Feb 12 13:03:16 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.h (FUNCTION_BOUNDARY, ASM_OUTPUT_ALIGN): Pack code tightly
+ when compiling crtstuff.c (flag_inhibit_size_directive).
+
+Wed Feb 12 10:34:09 1992 Michael Meissner (meissner at osf.org)
+
+ * decrose.h (*_SPEC): Compress some whitespace in the specs. Also,
+ simpify which LANGUAGE_xxx names are defined, to be the ones uses by
+ the system(s).
+ * decstatn.h (*_SPEC): Likewise.
+ * iris.h (*_SPEC): Likewise.
+ * mips.h (*_SPEC): Likewise.
+ * mips-bsd.h (*_SPEC): Likewise.
+ * mips-news.h (*_SPEC): Likewise.
+ * mips-sysv.h (*_SPEC): Likewise.
+
+Wed Feb 12 10:34:09 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * caller-save.c (insert_save_restore): Properly check for insns that
+ reference CC0.
+
+Wed Feb 12 03:17:00 1992 Chris Smith (csmith at convex.com)
+
+ * convex.h (DEFAULT_CALLER_SAVES): don't define, to sidestep a bug.
+ * convex.md (ffssi2): Comment out.
+
+Wed Feb 12 00:08:42 1992 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * make-libgcc2.com: Do not save .s file.
+
+ * vms.h: Wrap #include <stdio.h> in #ifdef L__main/endif
+
+Tue Feb 11 21:58:42 1992 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * libgcc2.c (DO_GLOBAL_DTORS_BODY): New macro.
+
+ * make-l2.com: New file to build libgcc2 on VMS.
+
+ * vms.h (DO_GLOBAL_CTORS_BODY): Replacement definition.
+
+ * vms.h (DO_GLOBAL_DTORS_BODY): Likewise.
+
+ * make-cccp.com: Define bison and rename as local symbols to avoid
+ possible conflict with user defined global symbols.
+
+Tue Feb 11 22:17:32 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * sched.c (attach_deaths): Don't treat PIC offset table register
+ specially; flow.c doesn't.
+
+ * combine.c (make_compound_operation, case AND): We can have
+ a (and (subreg (lshiftrt ..) ..) ..); handle same as without SUBREG.
+
+ * Makefile.in (HOST_CLIB, HOST_ALLOCA, HOST_MALLOC, HOST_OBSTACK): New
+ variables to override.
+ (USE_HOST_*, HOST_LIBDEPS): Use HOST_PREFIX and new variables.
+ (HOST_LIBS): Use HOST_CLIB.
+
+Tue Feb 11 21:32:07 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (install-common-headers): Copy byteorder.h to
+ compilation dir.
+
+ * config.sub: Allow unicos as operating system.
+
+ * m88kv4.h (INIT_SECTION_ASM_OP): Add #progbits.
+
+ * vax.h (DYNAMIC_CHAIN_ADDRESS): New macro.
+
+ * c++: Propagate quoted args properly.
+
+Tue Feb 11 16:35:01 1992 Jim Wilson (wilson at cygnus.com)
+
+ * fixincludes: Define TERM to `unknown', to ensure that it is
+ valid. Otherwise, ex may fail.
+ * fixinc.svr4: Likewise.
+
+Tue Feb 11 18:04:32 1992 Michael Meissner (meissner at osf.org)
+
+ * decrose.h (CPP_SPEC): Define the macros LANGUAGE_OBJECTIVE_C and
+ LANGUAGE_C_PLUS_PLUS if we are compiling Objective C or C++.
+ Silicon Graphics in particular uses LANGUAGE_C_PLUS_PLUS.
+ * decstatn.h (CPP_SPEC): Likewise.
+ * iris.h (CPP_SPEC): Likewise.
+ * mips-bsd.h (CPP_SPEC): Likewise.
+ * mips-news.h (CPP_SPEC): Likewise.
+ * mips-sysv.h (CPP_SPEC): Likewise.
+
+ * decstatn.h (CPP_PREDEFINES): Eliminate __<name> versions, since
+ gcc will do these automatically. Eliminate LANGUAGE_C, since it is
+ handled in CPP_SPEC.
+
+Tue Feb 11 15:38:27 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * flow.c (find_basic_blocks): Don't delete labels used in non-jumps.
+
+ * vms.h (DO_GLOBAL_CTORS_BODY): Modify the return address
+ only the first time __main is called.
+
+ * fixinc.svr4: Change headers to test __STRICT_ANSI__ instead of
+ testing __STDC__ != 0.
+
+ * fixinc.svr4 (mman.h): Fix backward __STDC__ conditional.
+ Don't add declarations of munmap and mprotect.
+
+ * varasm.c (output_constant): Allow empty constructor for any type.
+
+ * dwarfout.c (ASM_OUTPUT_DWARF_DATA8): Just one definition;
+ test WORDS_BIG_ENDIAN "at run time".
+
+Tue Feb 11 09:00:01 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload.c (find_reloads): Don't substitute in MATCH_DUPs if we
+ are not generating replacements.
+
+Tue Feb 11 08:45:14 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88kv4.h ({CTORS,DTORS}_SECTION_ASM_OP): Fix typo.
+
+Mon Feb 10 22:34:47 1992 Chris Smith (csmith at convex.com)
+
+ * convex.h(HARD_REGNO_NREGS): define correctly for 64-bit regs
+
+Mon Feb 10 21:50:23 1992 Michael Meissner (meissner at osf.org)
+
+ * mips.h (MIPS_VERSION): Change Meissner version # to 11.
+ (CPP_SPEC): Define the macros LANGUAGE_OBJECTIVE_C and
+ LANGUAGE_C_PLUS_PLUS if we are compiling Objective C or C++.
+ Silicon Graphics in particular uses LANGUAGE_C_PLUS_PLUS.
+ (FP_DBX_FIRST): Change the test so that stabs in ECOFF uses the
+ value 38, in addition to stabs in GAS.
+
+ * mips.md (all function units): Make the function units simpler, and
+ not depend on the cpu type, to work around a memory hungry
+ genattrtab, which attempts to grow the data segment to than 32
+ megabytes.
+
+Mon Feb 10 16:34:11 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * convex.h (REAL_VALUE_TRUNCATE): Obsolete definition deleted.
+
+ * config.sub (convex-*): These are BSD, not sysv.
+
+ * dbxout.c (have_used_extensions): New var.
+ (dbxout_type, dbxout_type_fields, dbxout_symbol):
+ Set have_used_extensions when use an extension.
+ (dbxout_symbol): Don't use `Tt' extension unless extensions
+ have been used.
+
+Mon Feb 10 12:28:59 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * xm-a29k-ult.h: Fix typo in placement of copyright notice.
+
+Mon Feb 10 05:36:45 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * dbxout.c (dbxout_type): Don't use GDB extensions if they are empty.
+
+Mon Feb 10 00:10:20 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-class.c (finish_struct): Use DECL_CHAIN, not TREE_CHAIN to walk
+ through the list of methods identified by a visibility declaration.
+
+ * cp-cvt.c (convert_pointer_to): No longer need to abort if BINFO is
+ not a TREE_VEC or AGGR_TYPE node.
+
+ * cp-parse.y (stmt): Improve error handling for try/except.
+
+ * cp-class.c (add_method): If we create RTL for a copy of METHOD,
+ copy the RTL to METHOD's DECL_RTL slot.
+
+ * cp-method.c (dump_type): Print `const' and/or `volatile' for
+ VOID_TYPE and REAL_TYPEs, too.
+
+Sun Feb 9 21:07:45 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * varasm.c (assemble_integer): Pass third arg in recursive calls.
+ Act appropriately if word-by-word loop doesn't finish.
+
+ * Makefile.in (bootstrap*): Don't override value of ALLOCA.
+
+ * dbxout.c (dbxout_symbol, dbxout_parms): Do leaf function remap
+ only if LEAF_REG_REMAP and only in leaf functions.
+
+Sun Feb 9 16:46:27 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-init.c (maybe_adjust_addr_for_delete): Build final COND_EXPR
+ with TREE_TYPE (addr).
+
+Sun Feb 9 14:20:49 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rs6000.h (rs6000_{bss,private_data,read_only}_section_name):
+ Add declarations.
+ (rs6000_text_section_asm_op): Deleted.
+ (ASM_FILE_START): Initialize section names and enter bss section once.
+ (EXTRA_SECTIONS): Add `private_data' and `bss';
+ delete `global_variable'..
+ (read_only_data_section): Don't form name here.
+ (global_variable_section): Deleted.
+ (private_data_section, bss_section): New functions.
+ (ASM_DECLARE_FUNCTION_NAME): Don't write function name with [PR].
+ (ASM_OUTPUT_POLL_PROLOGUE): No longer needed.
+ (SELECT_{RTX_,}SECTION): Just calls data_section or
+ private_data_section.
+ (ASM_OUTPUT_LOCAL): Put in bss section.
+ (TEXT_SECTION_ASM_OP, DATA_SECTION_ASM_OP): Now a constant.
+ * rs6000.c (rs6000_text_section_asm_op): Deleted.
+ (rs6000_{bss,private_data,read_only}_section_name): Add definitions.
+ (rs6000_gen_section_name): New function.
+
+Sun Feb 9 08:29:21 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.h (REGNO_REG_CLASS): Use a lookup table: AIX can't handle
+ complex tertiary expressions.
+ (GO_IF_LEGITIMATE_ADDRESS): Simplify slightly for the AIX
+ compiler.
+
+ * i386.c (regclass_map): New variable. Lookup array for
+ REGNO_REG_CLASS.
+
+Sat Feb 8 01:20:33 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cp-parse.y (yyprint): Test __GNUC__, not __GNU__.
+ Use __inline, like everywhere else.
+
+ * a29k.h, romp.h (OVERRIDE_OPTIONS): Deleted.
+ (OPTIMIZATION_OPTIONS): Defined, instead.
+ * rs6000.h (OPTIMIZATION_OPTIONS): New macro.
+ (OVERRIDE_OPTIONS): Don't change optimization.
+
+ * final.c (leaf_renumber_regs_insn): No longer static.
+ * dbxout.c (dbxout_symbol, dbxout_parms): Call that.
+
+ * c-decl.c (lookup_name): Do nothing special if type is error mark.
+ (grokdeclarator): Ignore putative type name whose type is error mark.
+ * c-parse.y (primary): If var type is error mark, return error mark.
+
+ * c-typeck.c (build_array_ref): Return early if arg is error mark.
+
+ * Makefile.in (test-protoize): Rule deleted.
+
+ * stmt.c (emit_case_nodes): Handle just-left-subtree case
+ like just-right-subtree--delete mysterious code that tests cost_table.
+
+ * varasm.c (decode_reg_name): Accept decimal number as reg name.
+
+ * c-decl.c (finish_decl): If pop_obstacks goes to perm obstack,
+ call permanent_allocation.
+
+ * gcc.c (link_command_spec): Use -lgcc, not libgcc.a.
+
+Fri Feb 7 16:56:17 1992 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * rs6000.h (DOLLARS_IN_IDENTIFIERS): Define to zero, because the
+ assembler does not accept dollar signs.
+
+Fri Feb 7 15:36:40 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (mostlyclean): Fix name of tmp-proto.1.
+
+ * configure: Delete excess space in assignment to srcdir.
+
+ * cp-decl2.c (DOLLARS_IN_IDENTIFIERS): Default now 1, as in C.
+
+ * i386gas.h (ASM_OUTPUT_LOOP_ALIGN): New macro.
+ (ASM_OUTPUT_ALIGN_CODE): Use 16-byte boundary on 486.
+
+ * m68k.h (TRANSFER_FROM_TRAMPOLINE): Use operands for the memrefs
+ to avoid dependence on assembler syntax.
+
+Fri Feb 7 10:26:32 1992 Michael Meissner (meissner at osf.org)
+
+ * Makefile.in (EXTRA_OBJS): New variable for extra object files
+ needed when linking cc1, cc1plus, and cc1objc.
+
+Fri Feb 7 07:34:03 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (set_label_offsets, reload_as_needed): Recompute
+ num_not_at_initial_offset when we pick up offsets from offsets_at.
+
+ * unroll.c (unroll_loop): Copy initial and final values to avoid
+ sharing.
+
+ * cse.c (simplify_relational_operation): Complete last change by
+ correctly handling <= and >=.
+
+Thu Feb 6 23:57:02 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Invert sense of warning about
+ initialized extern vars, since in C++, const has funny semantics.
+
+Thu Feb 6 15:12:02 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cse.c (simplify_relational_operation): Test properly for floating
+ equality; don't deduce this from < and >.
+
+ * xm-mips.h (alloca): Don't define or declare if MIPS_OVERRIDE_ALLOCA.
+ * xm-irix4.h (MIPS_OVERRIDE_ALLOCA): Defined.
+
+ * m68k.h (TRANSFER_FROM_TRAMPOLINE): Use explicit reg var
+ to avoid dependence on register name syntax.
+
+ * mot3300.h (PUT_SDB_START_DIM, PUT_SDB_NEXT_DIM, PUT_SDB_LAST_DIM):
+ New macros.
+ (PUT_SDB_DIM): Deleted.
+ (PRINT_OPERAND): Handle %$ and %&.
+ (ASM_OUTPUT_OPCODE): Handle f%$move and f%&move.
+
+ * gstdarg.h: If not __GNUC__, use system's stdarg.h.
+
+Thu Feb 6 22:36:36 1992 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * vms.h (DEFAULT_GDB_EXTENSIONS): Define as 0.
+
+Thu Feb 6 13:32:37 1992 Michael Meissner (meissner at osf.org)
+
+ * mips.h (MIPS_VERSION): Set Meissner version # to 10.
+ (flag_half_pic, mips_branch_likely): New global variables.
+ (call_memory_operand): New function declaration.
+ (half_pic_encode_section_info): Likewise.
+ (mips_constant_address_p): Likewise.
+ (mips_debugger_offset): Likewise.
+ (CC1_SPEC): Make OSF/1 -pic-xxx switches to -mhalf-pic, which is
+ currently undergoing development.
+ (DEBUGGER_AUTO_OFFSET): Emit correct information if frame pointer is
+ omitted.
+ (DEBUGGER_ARG_OFFSET): Likewise.
+ (TARGET_SWITCHES): Add -mabicalls and -mhalf-pic switches.
+ (PIC_OFFSET_TABLE_REGNUM): Define as the GP register ($28).
+ (EXTRA_CONSTRAINT): Add 'S' constraint for half-pic references.
+ (CONSTANT_ADDRESS_P): Call mips_constant_address_p.
+ (ENCODE_SECTION_INFO): Reorder test to test optimize first, and to
+ call half_pic_encode_section_info if half pic.
+ (PREDICATE_CODES): Add call_memory_operand.
+
+ * mips.c (flag_half_pic): New global variable to indicate to produce
+ half-pic output for OSF/rose.
+ (mips_branch_likely): New global variable to indicate the branch
+ should use the branch likely form of the instruction.
+ (mips_sw_reg_names): Use $fp instead of fp, since regdef.h no longer
+ defines fp.
+ (call_memory_operand): New function to return TRUE if the argument
+ is a valid MEM for a call instruction.
+ (mips_move_1word): Emit comment in la of half-pic addresses as a
+ temporary flag to put the right code down.
+ (mips_constant_address): New function to determine if something is a
+ constant address or not. Add stub code for -mhalf-pic.
+ (override_options): Set flag_half_pic if -mhalf-pic.
+ (override_options): Mark %? as valid for print_operand.
+ (mips_debugger_offset): New function to correct the offset for
+ variables and arguments if the frame pointer has been omitted.
+ (print_operand): %? now emits a 'l' if mips_branch_likeley is set.
+ (mips_asm_file_start, function_prologue): If -mabicalls, emit the
+ pseudo ops that the Pyramid System V.4 port seems to want.
+ (compute_frame_size): Reserve space for saving GP if -mabicalls.
+ (half_pic_encode_section_info): Stub function for encoding whether
+ or not to generate a half pic reference.
+
+ * mips.md (type attribute): Add pic attribute.
+ (cpu attribute): New attribute to get the CPU type.
+ (branch_likely attribute): New attribute to say whether or not we
+ can use branch likely instructions.
+ (define_delay): Note that we can annull false branches if -mips2.
+ (memory function unit): Add pic in addition to load.
+ (various function units): Use the cpu attribute.
+ (branch patterns): Support branch likely instructions if -mips2.
+ (call, call_internal): Use call_memory_operand instead of
+ memory_operand. If -mhalf-pic put function address in a register.
+ (call_value, call_value_internal): Likewise.
+
+ * decrose.h (INIT_SECTION_ASM_OP): Define as .init.
+
+Thu Feb 6 10:07:17 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.c (preserve_registers): Change to walk the epilogue delay
+ insns in the forward rather than reverse order (for reorg.c change).
+
+Thu Feb 6 02:54:28 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cse.c (simplify_binary_operation, case PLUS): Don't make
+ a (const (plus X Y)) with X a CONST_INT.
+
+ * fixincludes: Simplify egrep command.
+
+Thu Feb 6 01:11:28 1992 Mark Eichin (eichin at cygnus.com)
+
+ * cp-lex.c (process_next_inline): if we get a "parse error at end of
+ saved function text", set yychar to something that
+ restore_pending_input will digest (if it thinks input is still
+ pending, it will abort, but we've already reported the problem to
+ the user.)
+
+Wed Feb 5 18:42:56 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c (fill_simple_delay_slots): When filling delay slots by
+ searching backward, put each new insn we find at the head of the
+ delay list instead of at the tail.
+
+ * cse.c (fold_rtx): When associating operations, avoid infinite
+ recursion if the new expression contains our operand.
+
+Wed Feb 5 21:18:06 1992 Mark Eichin (eichin at cygnus.com)
+
+ * cp-decl.c (globalize_nested_type): If the type isn't found at all,
+ this is an anonymous forward reference, so permit it.
+ Abort if type is already globally defined.
+
+Wed Feb 5 18:01:12 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * varasm.c, hp800.h, i386.h, m88k.h, mips.h, romp.h, vms.h:
+ (ENCODE_SECTION_INFO): Renamed from ENCODE_SEGMENT_INFO.
+
+ * sparc.md (nonlocal_goto): Copy static chain into
+ virtual_stack_vars_rtx, not frame pointer itself.
+ (nonlocal goto return recognizer): Jump to %o0+0.
+
+ * toplev.c (main): Fix test for -Wid-clash.
+
+Wed Feb 5 16:58:15 1992 Ron Guilmette (rfg at ncd.com)
+
+ * dwarfout.c (dwarfout_init): Add two words containing the starting
+ and ending address of the .text section for this compilation unit to
+ the special initial entry in the .debug_srcinfo section.
+
+Tue Feb 4 14:51:16 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * dbxout.c (dbxout_symbol): Handle DBX_OUTPUT_CONSTANT_SYMBOL.
+ (dbxout_block): Handle DBX_OUTPUT_CATCH.
+
+ * cccp.c (lookup_import, add_import, do_include):
+ Use bcmp and bcopy to access st_ino and ->inode fields.
+
+ * dbxout.c (dbxout_init): Pass syms to DBX_OUTPUT_STANDARD_TYPES.
+
+ * fold-const.c (operand_equal_p): Check that modes match.
+ (comparison_equiv_p): New function.
+ (fold): Use that when converting ?: to min_expr or max_expr.
+
+ * c-common.c (c_expand_expr_stmt): Test for ERROR_MARK as type.
+
+Tue Feb 4 12:03:26 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * stmt.c (expand_end_case): Don't crash if function called
+ is not an ADDR_EXPR.
+
+Tue Feb 4 14:17:22 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expr.h ({float[sd]i[sd]f,fix[sd]f[sd]i,fixuns[sd]f[sd]i}_libfunc):
+ New declarations.
+ * optabs.c: Define them.
+ (expand_float, expand_fix): Use them instead of making a new
+ SYMBOL_REF each call.
+ (init_optabs): Initialize them.
+
+Tue Feb 4 00:27:35 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (protoize.1, unprotoize.1): Rename temp files < 14 chrs.
+
+ * cccp.c (skip_if_group): Make unknown cmd name a pedantic warning.
+
+Mon Feb 3 18:10:41 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * romp.h (LEGITIMATE_CONSTANT_P, ENCODE_SEGMENT_INFO): Use
+ SYMBOL_REF_FLAG.
+
+ * x-romp-mach: New file.
+ * configure (romp-*-mach*): New alternative.
+
+Mon Feb 3 16:43:55 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cp-typeck.c (warn_for_assignment): Print arg num in origin 1.
+
+ * sparc.md (nonlocal_goto trap recognizer): Fix opcode spelling.
+
+ * function.c (fix_lexical_addr): Properly search for correct display.
+
+ * romp.h (OVERRIDE_OPTIONS): Don't set flag_omit_frame_pointer.
+
+Mon Feb 3 11:11:58 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * gcc.c (@c++-cpp-output): Delete extraneous "}}}" at the end of the
+ rule.
+
+Mon Feb 3 11:38:19 1992 Ron Guilmette (rfg at ncd.com)
+
+ * dwarfout.c (dwarfout_init): Generate an initial 2-word entry in the
+ .debug_srcinfo section containing the addresses of the starts of the
+ .line and .debug_sfnames sections. Generate it after the initial entry
+ for the .line section.
+
+ * dwarfout.c [DWARF_TIMESTAMPS]: Ensure time_t and time declared.
+ (dwarfout_init): Make third word of initial .debug_srcinfo entry be
+ the compilation date/time if DWARF_TIMESTAMPS is defined, or else -1.
+
+ * dwarfout.c (dwarfout_init): Output compilation directory name as
+ the first thing in the .debug_sfnames section.
+
+Mon Feb 3 04:12:51 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * Makefile.in (install-dir): `parent' is a shell variable.
+
+Mon Feb 3 09:43:51 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.h (EXTRA_SECTIONS): Use init and fini sections from svr3.h,
+ but only when using svr3.h.
+
+Sun Feb 2 19:50:29 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.h (ADDRESS_COST): New macro.
+
+Sun Feb 2 17:08:47 1992 Michael Meissner (meissner at osf.org)
+
+ * mips.c (simple_memory_operand): Don't recognize references to
+ variables in .sdata or .sbss, which has the effect of not putting
+ stores into delay slots. This fixes a bug and also doesn't temp the
+ MIPS linker from trying to put 4 instructions into the delay slot
+ when it rewrites the function as a PIC function.
+
+Sun Feb 2 16:58:11 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gbl-ctors.h (DO_GLOBAL_CTORS_BODY): Do ON_EXIT last.
+
+ * Makefile.in (install-dir): Create the parent of mandir if nec.
+
+ * real.h (REAL_VALUE_TRUNCATE): sizeof says what cast to float does.
+
+ * dbxout.c (DBX_OUTPUT_MAIN_SOURCE_DIRECTORY): New parameter macro.
+ (DBX_OUTPUT_MAIN_SOURCE_FILENAME, DBX_OUTPUT_SOURCE_FILENAME):
+ (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Likewise.
+ These are used in place of ASM_...
+ * newpbb.h (DBX_OUTPUT_MAIN_SOURCE_FILENAME): Macro renamed.
+ (DBX_OUTPUT_SOURCE_FILENAME): Likewise.
+ * next.h (DBX_OUTPUT_MAIN_SOURCE_DIRECTORY): Macro renamed.
+ (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Likewise.
+
+Sun Feb 2 12:51:54 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-typeck.c (build_component_ref_1): Call `compute_visibility'
+ with a BASETYPE_PATH, not a TREE_LIST.
+
+ * cp-class.c (build_vtable_entry): Apologize if we cannot build a
+ proper vtable because of builtin liminations.
+
+Sun Feb 2 07:30:08 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload.c (combine_reloads): Don't combine two reloads with different
+ secondary reloads; copy secondary reload to combined reload.
+
+ * cse.c (cse_main): PIC_OFFSET_TABLE_REGNUM is not clobbered by calls
+ if -fpic or -fPIC.
+ * reorg.c (mark_target_live_regs): Likewise.
+ * sched.c (attach_deaths): Likewise.
+
+ * flow.c (find_basic_blocks): Don't separate a CALL_INSN from
+ following CLOBBER insns.
+
+ * function.c (use_variable, use_variable_after): Don't interpret
+ reference to internal arg pointer as variable-sized object.
+ (expand_function_start, expand_function_end): Add USE for virtual
+ arg pointer if stupid alloc and it is not the real arg pointer.
+
+ * flow.c (insn_dead_p, mark_set_1, mark_used_regs): Don't treat
+ ARG_POINTER_REGNUM specially if it isn't fixed.
+ * sched.c (attach_deaths): Likewise.
+ * reorg.c (mark_target_live_regs): Likewise; also make set of regs
+ clobbered on call agree with cse and flow.
+
+ * function.c (fix_lexical_addr): Rework to look for AP references
+ using internal_arg_pointer; make some related cleanups.
+ * expr.c (expand_expr, case VAR_DECL, SAVE_EXPR): Treat
+ inline_function_decl just like current_function_decl.
+ * stmt.c (expand_end_bindings): When restoring arg pointer, restore
+ into the virtual form so we will subtract the proper offset, since
+ the saved value includes the offset.
+
+Sat Feb 1 14:41:34 1992 Ken Raeburn (Raeburn@Cygnus.COM)
+
+ * cp-pt.c (end_template_decl): For method template, no longer call
+ popclass; it isn't needed any more. If after processing template
+ we're not at the global binding level, throw away any other binding
+ levels, rather than aborting. Also deleted some other unused code.
+
+Sat Feb 1 09:13:47 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * xm-rs6000-mach.h, rs6000-mach.h: New files.
+ * configure (rs6000-*-mach): New option.
+
+Sat Feb 1 00:57:24 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.c: Include tree.h
+ (symbolic_operand): New predicate function.
+ (symbolic_reference_mentioned_p): New function.
+ (legitimize_pic_address,emit_pic_move): New functions.
+ (function_prologue): Delete unused variable nregs.
+ If the PIC reg is used, save the old contents and initialize with
+ a pointer to the GOT.
+ (simple_386_epilogue): Count the PIC reg if it is used.
+ (function_epilogue): Delete unused variable "insn". Restore the
+ original contents of the PIC reg if it was used.
+
+ (output_pic_addr_const): New function to handle PIC symbol
+ reference suffixes.
+ (print_operand_address): Use that if flag_pic is true.
+ (print_operand): Likewise. Don't print a prefix in front of any
+ constant if the 'P' code is used.
+
+ (output_387_binary_op): abort if the op is not one we handle.
+
+ (maximum_field_alignment): New variable.
+ (handle_pragma_token): New function. Handle `weak' and `pack'.
+
+ * i386.h (CONDITION_REGISTER_USAGE): New macro. Mark PIC reg as
+ fixed and call used if flag_pic is true.
+ (PIC_OFFSET_TABLE_REGNUM): New macro.
+ (FUNCTION_PROFILER): Output PIC compatible code if flag_pic.
+ (INITIAL_ELIMINATION_OFFSET): Count the PIC reg if it is used.
+
+ (GO_IF_LEGITIMATE_ADDRESS): If flag_pic is true, reject bare
+ label or symbol references, but allow constant pool references.
+ In all cases, don't bother to check for a constant as the first
+ operand of a PLUS.
+ (LEGITIMIZE_ADDRESS): Call legitimize_pic_address for symbolic
+ references if flag_pic is true. In all cases, HImode regs are not
+ valid memory pointers.
+ (LEGITIMATE_PIC_OPERAND): New macro.
+ (SYMBOLIC_CONST): New macro.
+ (ENCODE_SEGMENT_INFO): New macro to notice static variables.
+ (CONST_COSTS): Symbolic constants cost more if flag_pic is true.
+
+ * i386.md (movsi): Use define_expand. Call emit_pic_move for
+ symbolic constants if flag_pic is true.
+ (divmodM4,udivmodM4): Change predicates so that only regs are
+ allowed in operands that can't be a mem. Avoids reload
+ congestion.
+ (indirect_jump): Allow any reg or mem as operand, not just reg 0.
+ (casesi): New insn, only used if flag_pic is true.
+ (call,call_pop,call_value,call_value_pop): Use define_expand to
+ record if this function ever emits a call, which will implicitly
+ use the PIC address register.
+
+ * svr4.h (SELECT_SECTION): Any item whose initial value involves
+ linker relocation must go in the data section if flag_pic is true.
+
+ * i386v4.h (ASM_OUTPUT_ADDR_DIFF_ELT): Output in PIC style. If
+ flag_pic is false, ADDR_DIFF_VECs are not output and this is not
+ used.
+ (JUMP_TABLES_IN_TEXT_SECTION): New macro.
+
+ (WEAK_ASM_OP,DEF_ASM_OP): New macros.
+ (maximum_field_alignment): New variable. Declare here.
+ (PCC_BITFIELD_TYPE_MATTERS): New macro. Value depends on
+ maximum_field_alignment.
+ (BIGGEST_FIELD_ALIGNMENT): New macro. Likewise.
+ (HANDLE_PRAGMA): New macro.
+ (ASM_OUTPUT_ALIGNED_LOCAL): New macro.
+
+Sat Feb 1 00:15:41 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * flow.c (flow_analysis, find_basic_blocks):
+ If have nonlocal labels, calls end basic blocks.
+ Each call can jump to each nonlocal label.
+ Pass extra arg to find_basic_blocks.
+ * function.c (nonlocal_label_rtx_list): New function.
+
+ * dbxout.c (dbxout_init): Vars wd and wd_gotten moved to top level
+ and renamed to cwd and cwd_gotten.
+
+ * c-decl.c (start_function): -Wmissing-prototypes warns if static
+ function was previously used without a prototype.
+
+ * loop.c (find_and_verify_loop): Initialize uid_loop_num[0].
+ (loop_optimize): Give up fast if no loops.
+
+ * stmt.c (expand_end_bindings): Don't adjust fp in nonlocal goto hndlr
+ if there is a nonlocal_goto insn.
+
+ * Makefile.in (cccp.o): Use just libdir in GPLUSPLUS_INCLUDE_DIR.
+
+ * gcc.c (do_spec_1): Supply missing arg in some recursive calls.
+
+Fri Jan 31 21:50:03 1992 Jeffrey A. Law (law at wombat.gnu.ai.mit.edu)
+
+ * m68k.h (OVERRIDE_OPTIONS): -fPIC is only supported on the 68020
+ and later cpus. Give an error if -fPIC is tried on a 68000.
+
+Fri Jan 31 21:39:33 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * flow.c (find_auto_inc): If emitting a move insn in front of the
+ first insn in a block, update basic_block_head.
+
+ * caller-save.c (init_caller_save): Correctly check for case where the
+ save or restore insns aren't recognized.
+
+Fri Jan 31 21:02:35 1992 Mark Eichin (eichin at cygnus.com)
+
+ * cp-decl.c (pushtag): when calling pushdecl, if we're in a
+ class_binding_level just do a pushdecl_class_level. Otherwise
+ pushdecl gets called multiple times on class-nested enums, which
+ short circuits the name list in the global_binding_level.
+
+Fri Jan 31 00:14:20 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * stmt.c (expand_goto): Use nonlocal_goto pattern if it exists.
+ * sparc.md (nonlocal_goto): New pattern.
+ Also nameless pattern for the special trap insn.
+
+ * gcc.c (S_ISDIR): Add default definition.
+
+ * function.c (expand_function_end):
+ Set up arg_pointer_save_area at start of function.
+
+ * c++: Accept -nostdlib, not -nostinc.
+
+ * va-sparc.h: If GCC v1, define __extension__ as nothing.
+ * va-i860.h, va-pyr.h, va-spur.h: Likewise.
+
+ * cp-class.c (finish_struct): Fill in DECL_ALIGN of vtable field.
+
+ * regclass.c (reg_class_record):
+ Don't follow indirect loops in constraints.
+
+ * function.c, expr.h (current_function_internal_arg_pointer): New var.
+ * function.c (assign_parms): Set it.
+ (push_function_context, pop_function_context): Save and restore it.
+ * expr.c (expand_builtin): Use it.
+ * function.h (struct function): New slot to save it in.
+
+ * cse.c (cse_main): Calls do clobber arg pointer if not fixed.
+
+ * hp320.h (HAVE_ATEXIT): New definition.
+
+ * Makefile.in (ALL_CPPFLAGS): New variable.
+ Use in all compile steps instead of CPPFLAGS.
+ (X_CPPFLAGS, T_CPPFLAGS): New vars, used in ALL_CPPFLAGS.
+ * x-vax (X_CPPFLAGS): Use this instead of X_CFLAGS.
+
+ * stmt.c (expand_end_bindings): Fix typo.
+
+Fri Jan 31 12:15:09 1992 Ron Guilmette (rfg ay ncd.com)
+
+ * dwarfout.c (LINE_LAST_ENTRY_LABEL): Definition added.
+ (dwarfout_finish): Put a label on the last .line section entry.
+ (dwarfout_finish): Make first word of final .debug_srcinfo record
+ contain the offset of the final .line section entry.
+
+Fri Jan 31 10:31:44 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * cp-tree.c (__eprintf): Make definition match assert.h
+ declaration.
+
+Thu Jan 30 23:17:11 1992 Per Bothner (bothner at cygnus.com)
+
+ * c++: The flags -c, -S, or -E suppress passing -lg++
+ to gcc. (Otherwise, gcc prints a warning.)
+
+Thu Jan 30 21:10:02 1992 Ron Guilmette (rfg at ncd.com)
+
+ * dwarfout.c (dwarfout_init): Fix generation of initial .debug_aranges
+ entry to be Dwarf Version 1 compliant.
+
+Thu Jan 30 15:51:27 1992 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * i386sun.h (LINK_SPEC): Delete useless %{-Bstatic} term.
+ * sun2o4.h (LINK_SPEC): Likewise.
+ * sun3.h (LINK_SPEC): Likewise.
+ * sparc.h (LINK_SPEC): Delete useless %{Bstatic} term.
+
+ * cccp.c (default_include): Delete use of obsolete
+ NO_STANDARD_INCLUDE_DIR macro.
+ * protoize.c (default_include): Likewise.
+
+ * Makefile.in (libgcc1.null): Delete dummy.o and dummy.c.
+
+Thu Jan 30 15:34:06 1992 Michael Meissner (meissner at osf.org)
+
+ * gstdarg.h: Include va-mips.h on MIPS systems.
+
+ * va-mips.h (va_start): Provide alternate definition when included
+ via stdarg.h.
+ (va_arg): Use __alignof(...) instead of sizeof(...) to determine
+ whether or not to dword align the argument pointer.
+
+Thu Jan 30 13:06:36 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (install-common): Get c++ and g++ from srcdir.
+
+ * i860.h (FIXED_REGISTERS): Arg pointer is no longer fixed.
+
+ * assert.h (__eprintf): Add const to string args in GCC ANSI case.
+
+ * Makefile.in (cccp.o, protoize.o, unprotoize.o):
+ Define LOCAL_INCLUDE_DIR based on $(prefix).
+
+ * stmt.c (expand_end_bindings): Arg pointer needs no special
+ treatment if not fixed.
+
+ * cp-parse.y, c-lex.c (yyerror):
+ Avoid sign-extension of characters in error messages.
+
+Thu Jan 30 11:39:56 1992 Ron Guilmette (rfg at ncd.com)
+
+ * dwarfout.c (dwarfout_finish): Fix generation of .debug_pubnames
+ terminating entry to be 4-bytes of zero followed by a null string.
+
+Thu Jan 30 09:30:19 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rs6000.c (ccr_bit): Fix typo causing reference to possibly
+ undefined operand.
+
+ * rs6000.h (ASM_SPEC): Remove until new AIX assembler is available.
+ (ASM_OUTPUT_POOL_PROLOGUE): Add missing "." in csect name.
+ (ENCODE_SEGMENT_INFO): Deleted.
+ (ASM_OUTPUT_EXTERNAL): Move code from ENCODE_SEGMENT_INFO here,
+ using permalloc instead of putting name into saveable_obstack.
+ Re-enable macro.
+ (ASM_OUTPUT_EXTERNAL_LIBCALL): Re-enable.
+
+Wed Jan 29 21:50:26 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rs6000.h (ASM_SPEC): Add -u, now require new /bin/as for AIX.
+ (ASM_OUTPUT_EXTERNAL, ASM_OUTPUT_EXTERNAL_LIBCALL): No longer needed.
+
+ * rs6000.h (ENCODE_SEGMENT_INFO): New macro; add [RW] or [DS] to name.
+ (RS6000_OUTPUT_BASENAME): New macro.
+ (ASM_OUTPUT_*): Use it instead of assemble_name when required.
+ (ASM_OUTPUT_POOL_PROLOGUE): Remove trailing [RW] or [DS].
+ * rs6000.c (print_operand, case 'z'): New case, for name in CALL_INSN.
+ (output_toc): Use RS6000_OUTPUT_BASENAME instead of assemble_name
+ for toc entry name.
+ * rs60000.md (call): Use %z.
+
+Wed Jan 29 17:17:42 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-init.c (build_member_call): Fix bug involving static members
+ that are function pointers.
+
+Wed Jan 29 13:25:18 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * gcc.c (do_spec_1): For %D, only add -L options that are relevant.
+ (is_linker_dir): Determine if a -L option is relevant.
+
+Wed Jan 29 00:57:55 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure: Turn ns32k alternatives back on.
+
+ * Makefile.in (getopt.o, getopt1.c): Join two lines into one.
+
+ * x-i386v4, x-i860v4 (GCC_CFLAGS): Add missing `-B./'.
+
+ * reload.c (find_dummy_reload, push_reload): Don't reuse dying input
+ reg as a reload if it is a fixed reg.
+
+ * c-tree.h (C_MISSING_PROTOTYPE_WARNED): Deleted since unused.
+
+Wed Jan 29 00:42:34 1992 Tim Moore (moore at fast.cs.utah.edu)
+
+ * hp800.c (print_operand): Handle INSN_ANNULLED_BRANCH_P in '*'
+ operand type.
+ * hp800.h (DEFAULT_GDB_EXTENSIONS): Define as 0.
+ * hp800.md (cmpsi): Change arith_operand to arith5_operand.
+ (bCC patterns): Delete pattern that matches a compare with a
+ constant first operand. Change arith_operand to arith5_operand.
+ (fp branches): Change type to cbranch.
+
+ * function.c (assign_parms): Set current_function_arg_offset_rtx
+ correctly for ARGS_GROW_DOWNWARD.
+ * gstdarg.h: Include va-hp800.h.
+ * va-hp800.h: Complete rewrite.
+
+Tue Jan 28 17:04:38 1992 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * varasm.c (make_decl_rtl): Delete unused var `i'.
+
+ * c-convert.c (convert_to_pointer):
+ Abort if no integer type is as wide as a pointer.
+
+ * gcc.c (default_compilers, .i case): Add error message for -pg
+ and -fomit-frame-pointer incompatibility.
+
+ * Makefile.in (install-common): Install c++ and g++ shell scripts in
+ bindir.
+
+Tue Jan 28 15:44:10 1992 Michael Collison (collison at osf.org)
+
+ * x-encrose (OLDCC): changed to $(GNU_ROSE_BIN)/gcc
+
+ * ns32k.h: Added trampoline code.
+
+Tue Jan 28 14:19:52 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rtl.def (UNSPEC, UNSPEC_VOLATILE): New RTL codes.
+ * cse.c (canon_hash): UNSPEC_VOLATILE operations are volatile.
+ * loop.c (invariant_p): Likewise.
+ * reorg.c (mark_referenced_resources): Likewise.
+ * sched.c (sched_analyze_2): Likewise.
+ * rtlanal.c (volatile_refs_p, side_effects_p, may_trap_p): Likewise.
+ (reg_referenced_p): Support UNPEC and UNSPEC_VOLATILE.
+
+Tue Jan 28 11:50:35 1992 Michael Meissner (meissner at osf.org)
+
+ * mips.c (toplevel): Add include of <ctype.h>, since isdigit is
+ used.
+
+Tue Jan 28 05:47:08 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl.c (xref_tag): Addition to eichin's Jan 25 change. If REF
+ is extant, and it's seen in the global scope outside of
+ CLASS_BINDING_LEVEL, set its IDENTIFIER_GLOBAL_VALUE if NULL.
+
+ * cp-class.c (pushclass): Forcibly remove any remnants of incomplete
+ type that was previously pushed.
+
+ * cp-decl.c (various places): Remove all error messages about C++
+ constructs being invalid in C language context; extern "C" is a
+ linkage specifier--no more.
+
+ * cp-method.c (dump_type_prefix,dump_type): Never need to output
+ `unsigned' since its always part of an unsigned integer type name.
+ (build_overload_name): Change test for unsigned to use
+ `unsigned_type' instead of examining TREE_UNSIGNED.
+
+ * cp-call.c (ideal_candidate): Don't convert PARMS in place if
+ BASETYPE is NULL_TREE.
+
+Tue Jan 28 02:21:31 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (grokdeclarator): Use `auto' for nested fn fwd decls.
+
+ * g++: New file.
+
+ * fixincludes:
+ Convert machine names in #if's to have underscores.
+ Fix specific files stdlib.h, locale.h, hsfs/... for Sunos 4.1.
+ * fixinc.svr4: Convert machine names in #if's to have underscores.
+
+ * gcc.c (do_spec_1): For %D, also make -L's for startfile_prefix.
+ Also append the machine
+
+ * fold-const.c (fold_convert): Properly handle real-to-real case.
+
+ * configure (i486-*-sysv4*): New alternative.
+
+Tue Jan 28 00:37:24 1992 Ron Guilmette (rfg at ncd.com)
+
+ * dwarfout.c (location_attribute): Fix handling of objects which
+ were optimized out of existance for Dwarf Version 0 compliance.
+
+Tue Jan 28 00:42:57 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * Makefile.in (mostlyclean): Delete stack dump files too.
+
+Mon Jan 27 18:26:27 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rs6000.h (HAVE_ATEXIT, NO_DOLLAR_IN_LABEL): Now defined.
+
+Mon Jan 27 13:32:51 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * libgcc2.a (L_exit): Declare __CTOR_LIST__ and __DTOR_LIST__
+ with length 2; get rid of __CTOR_END__ and __DTOR_END__.
+ (L_ctor_list, L_dtor_list): New library members.
+
+ * cccp.c (main): Add terminating null, then call trigraph_pcp.
+
+ * fixincludes, fixinc.svr4: Fail unless an arg was given.
+ * Makefile.in (install-fixincludes): Pass output dir as argument.
+
+ * Makefile.in: Renamed libgcc[12] to libgcc[12].a.
+ Likewise for tmplibgcc[12].
+
+ * toplev.c (rest_of_decl_compilation): Treat all fcns as if external.
+
+ * Makefile.in (TAGS): Do the work in srcdir.
+ Include c-parse.h in files to move.
+
+Mon Jan 27 10:54:24 1992 Jim Wilson (wilson at sphagnum.cygnus.com)
+
+ * cccp.c (get_filename): Don't pass -1 file descriptor to close.
+
+Mon Jan 27 00:26:33 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl.c (start_function): Preserve TREE_TYPE of RESULT_DECL, in
+ case we have a named return value.
+ (finish_function): Restrict the cases under which we build
+ `no_return_label'. Use CURRENT_FUNCTION_RETURN_VALUE to eliminate
+ the generation of needless cleanups when functions end with a return
+ stmt. No longer zeros out CLEANUP_LABEL. Also, call `emit_jump'
+ instead of `expand_null_return' in case NO_RETURN_LABEL is
+ non-NULL.
+
+ * cp-decl2.c (grokfield): Don't specially hack static member
+ function names.
+
+ * cp-except.c (cplus_expand_raise): Test correct predicate that we
+ have a non-null value return.
+ (cplus_expand_{throw,reraise}): Ditto.
+
+ * cp-typeck.c (c_expand_return): Handle case where named return
+ value has incomplete type.
+
+Sun Jan 26 20:50:55 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-parse.y (LC): Fix rule to use `push_obstacks_nochange'.
+ (structsp): Use `pop_obstacks'.
+
+Sun Jan 26 17:39:15 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-parse.y (LC): Use push_obstacks_nochange and always call
+ end_temporary_allocation.
+ (structsp, template_instantiate_once): After LC, use pop_obstacks.
+
+ * c-decl.c (grokdeclarator):
+ Static function decl within a function is not external.
+
+Sun Jan 26 08:14:53 1992 Michael Meissner (meissner at osf.org)
+
+ * mips.h (MIPS_VERSION): Bump meissner version # to 9.
+ (enum processor_type): Delete PROCESSOR_R2000, since a r2000
+ schedules just like a r3000.
+ (mips_isa, mips_isa_string, mips_cpu_string): New global variables.
+ (MD_EXEC_PREFIX): If not defined, define as "/usr/lib/cmplrs/cc/".
+ (TARGET_SWTICHES macros): Move setting the processor from
+ TARGET_SWITCHES to TARGET_OPTIONS. Also, delete the -mfixed-ovrfl
+ switch, and move -mwc8/-mwc16 to not use any bits, since we can't
+ support these in GCC 2.00. Readjust the positions the bits are in.
+ (TARGET_OPTIONS): Define to add switches -mcpu=x to set which
+ processor type to schedule for, and -mipsx to specify the
+ instruction set architecture level.
+ (BRANCH_LIKELY_P): New macro, true if MIPS ISA >= 2.
+ (HAVE_64BIT_P): New macro, true if MIPS_ISA >= 3.
+ (HAVE_SQRT_P): New macro, true if MIPS_ISA >= 2.
+ (BRANCH_COST): Define as 2 if r4000/r6000, 1 otherwise.
+ (ASM_OUTPUT_SKIP): Eliminate OSF/1 gas work around.
+
+ * mips.c (mips_isa, mips_isa_string, mips_cpu_string): New global
+ variables.
+ (print_options): Print CPU and ISA level.
+ (override_otpions): Handle TARGET_OPTIONS setting cpu and ISA.
+ (override_options, print_operand): %: is no longer supported, since
+ -mfixed-ovfl is eliminated.
+
+ * mips.md (type attribute): Add fsqrt.
+ (all define_function_units): Redo, to add full r6000 and r4000
+ support, and to use the default case in case another processor type
+ is added. Also, tests against PROCESSOR_R2000 eliminated.
+ (add, subtract patterns): Delete use of %:.
+ (sqrtdf2, sqrtsf2): Define if the MIPS ISA >= 2.
+
+ * decrose.h (MD_EXEC_PREFIX, MD_STARTFILE_PREFIX): Define these to
+ use the defaults on the OSF/1 reference platform.
+ (i386rose.h): Likewise.
+
+Sun Jan 26 07:58:00 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_insn): Don't call insert_regs on a SUBREG.
+ When scanning table for SUBREG assignment, ignore invalid entries.
+
+ * cse.c (cse_insn): When looking for first non-deleted entry in
+ table, start by scanning backwards from the deleted entry.
+
+ * function.c (assign_parms): Set current_function_return_rtx
+ unconditionally.
+ (expand_function_start): Don't set it here.
+
+Sat Jan 25 06:44:16 1992 Mark Eichin (eichin at cygnus.com)
+
+ * cp-decl.c (set_identifier_local_value): New function. Clone of
+ set_identifier_type_value, but uses level->shadowed instead. Only
+ used in pushdecl, where the non-global install was previously
+ setting the local value directly which "stuck" and didn't get
+ cleared the next time through.
+ (pushdecl): use set_identifier_type_value so that the local value
+ actually gets erased when we leave this level. Changed code that
+ checks for global_binding_level to recognize that if
+ class_binding_level is set, we're not in the global one.
+ (poplevel_class): restore shadowed list too, like poplevel does.
+ (print_binding_level): added no_print_functions and
+ no_print_builtins variables to eliminate clutter while trying to
+ debug binding level problems.
+
+Fri Jan 24 18:03:36 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * tree.c (pop_momentary): Don't reference freed stack entry.
+
+Fri Jan 24 14:20:05 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-parse.y (stmt): Call `define_case_label' for default label.
+ * cp-decl.c (current_function_return_value): New variable.
+ (define_{case_}label): Clear CURRENT_FUNCTION_RETURN_VALUE.
+ * cp-typeck.c (c_expand_return): Set CURRENT_FUNCTION_RETURN_VALUE.
+
+ * cp-tree.c (lang_printable_name): Use DECL_RING, and don't free
+ the printable name for CURRENT_FUNCTION_DECL.
+
+Fri Jan 24 14:17:30 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gvarargs.h: If _ANSI_H, undef _VA_LIST_.
+
+ * c-typeck.c (pointer_int_sum): Don't distribute * into pointer diff.
+
+ * hp320.h (MD_STARTFILE_PREFIX): Defined.
+ (STANDARD_STARTFILE_PREFIX): Deleted.
+
+Fri Jan 24 09:30:41 1992 Fred Fish (fnf at fishpond)
+
+ * assert.h (__eprintf): Declare as prototype for __STDC__
+
+Fri Jan 24 05:28:53 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (jump,indirect_jump,tablejump): Don't output an align
+ directive here: let the following BARRIER do it.
+
+Thu Jan 23 11:54:11 1992 Ron Guilmette (rfg at ncd.com)
+
+ * i486v4.h: New file.
+
+Thu Jan 23 20:34:22 1992 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * fixinc.svr4: Surround uses of ${INPUT} with "" instead of ''
+ so that it will get expanded.
+
+Thu Jan 23 17:50:13 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (qty_mode): New variable.
+ (reg_rtx): Deleted.
+ (hard_regs_in_table, regs_invalidate_by_call): New variables.
+ (new_basic_block): Clear hard_regs_in_table.
+ (delete_reg_equiv): New name for reg_invalidate; don't update reg_tick.
+ (mention_regs): Don't set reg_rtx.
+ Update reg_tick for all registers in a multi-register hard register
+ reference.
+ (insert_regs): Don't do anything special with SUBREG.
+ Only insert register in a class if it is the same mode.
+ Don't set reg_rtx; set qty_mode instead.
+ (insert): Update hard_regs_in_table.
+ Get constant equivalence in proper mode.
+ (merge_equiv_classes): Call delete_reg_equiv.
+ (invalidate): Call delete_reg_equiv and update reg_tick.
+ Invalidate all parts of multi-word hard regs and invalidate
+ any multi-word hard reg overlapping what we are to invalidate.
+ Only look at constant in proper mode.
+ (remove_invalid_refs): Use refers_to_regno_p.
+ (invalidate_for_call): New function.
+ (canon_hash, refers_to_mem_p, fold_rtx, equiv_constant): Look at
+ constant in proper mode.
+ (cse_rtx_addr_varies_p, cse_process_notes): Likewise.
+ (exp_equiv_p): Likewise.
+ Check reg_tick for all parts of multi-word hard register.
+ (canon_reg): Don't use reg_rtx; get register from regno_reg_rtx or
+ build hard reg in proper mode.
+ (record_jump_equiv): Split into two pieces.
+ (record_jump_cond): Second part of record_jump_equiv; make recursive
+ call to some equivalences if args are SUBREGs.
+ (cse_insn): Only replace register with equivalent if proper mode;
+ don't use reg_rtx.
+ Call invalidate_for_call.
+ Don't avoid call to gen_lowpart for hard register.
+ Make a SUBREG if gen_lowpart_if_possible fails for SUBREG
+ assignment.
+ (invalidate_from_clobbers): Update reg_tick of SP; invalidate
+ REG entry in table, if present; use stack_pointer_rtx.
+ (cse_main): Don't allocate reg_rtx.
+ Initialize regs_invalidated_by_calls.
+ (cse_basic_block): Allocate qty_mode.
+
+ * rs6000.h (ADDITIONAL_REGISTER_NAMES): Add so we can disambiguate
+ fixed and floating registers.
+
+ * rs6000.md (ashrdi3): Reject all but constant shift counts.
+
+ * jump.c (simplejump_p): Don't access PATTERN unless we know it is
+ a JUMP_INSN.
+
+ * combine.c (get_last_value): Don't do a recursive call for a
+ paradoxical SUBREG.
+
+ * jump.c (jump_optimize): In "if (...) x = a; else x = b;",
+ don't move "x = b;" if it has non-trivial REG_NOTES. Also, allow
+ B to be any constant, not just a CONT_INT.
+
+ * stor-layout.c (layout_type): Handle alignment for arrays the same
+ as we do for records and unions.
+
+ * calls.c (expand_call): Ignore `const' on void functions.
+
+ * i860.c: Include recog.c.
+ Remove many explicit declaration of vars from include files.
+ (i860_compare_op[01]): Define these here.
+ * i860.h (i860_compare_op[01]): Add declarations.
+ * i860.md (compare, branch): Rework to use define_expand for cmpxx.
+ Compare just saves operands in i860_compare_op[01]. Branch emits
+ both insns using the saved operands.
+
+ * i860.h (PREFERRED_RELOAD_CLASS): Handle FP registers and constants.
+ (SECONDARY_INPUT_RELOAD_CLASS): We need a scratch register to copy
+ an integer constant to a floating-point register.
+ * i860.md (addsi3, subsi3): Allow use of floating registers.
+
+Thu Jan 23 13:33:40 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * i386v4.h (CPP_PREDEFINES): Don't define X86.
+
+ * c-lex.c (readescape): Warn for \a and \x if warn_traditional.
+ Handle \v as vertical tab regardless of -traditional.
+
+ * fixincludes, fixinc.svr4: Make LIB absolute, near the beginning.
+
+ * fixincludes: Simplify egrep command while matching the same lines
+ (plus occasional additional lines).
+
+ * function.c (fixup_memory_subreg): New arg UNCRITICAL. Calls changed.
+
+ * gcc.c (process_command): Handle LPATH like LIBRARY_PATH.
+
+ * svr3.h (ASM_LONG): Deleted.
+
+ * gvarargs.h: Ignore _VA_LIST_ if _ANSI_H_;
+ don't define _VA_LIST_ if already defined.
+
+Thu Jan 23 09:10:52 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88kluna.h (includes): Include aoutos.h.
+
+Thu Jan 23 09:10:52 1992 Ron Guilmette (rfg at ncd.com)
+
+ * va-i860.h (__savereg): Fix typo.
+
+ * i860.h (PREDICATE_CODES): Added definition.
+
+ * i386v4.h (ASM_FILE_START): Definition added which generates
+ .version directive.
+
+Wed Jan 22 23:15:45 1992 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
+
+ * make-cc1.com: Predefine symbols for "rename" and "bison"; always
+ generate c-parse.h when generating c-parse.c.
+
+Wed Jan 22 20:01:11 1992 Per Bothner (bothner at cygnus.com)
+
+ * sdbout.c (sdbout_record_type_name): Use typedef names
+ for C++. (A kludge.)
+ * sdbout.c (sdbout_one_type): Emit base classes as
+ dummy fields, just like dbxout.c when not using gdb extensions.
+
+Wed Jan 22 20:01:11 1992 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * fixincludes: Surround uses of ${INPUT} with "" instead of ''
+ so that it will get expanded.
+
+ * gcc.c (default_compilers): For c++, define __GNUG__ to 2, and
+ pass -trigraphs.
+
+ * cccp.1, cpp.1, gcc.1, g++.1: Delete more RCS variables.
+
+Wed Jan 22 19:02:06 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (simplify_shift_const, case ASHIFT): If we will
+ be suppressing a sign extension because the upper bits are
+ already the same, verify that the operand is in the same
+ mode as we will be doing the shift; don't ignore a SUBREG
+ inside the inner SHIFT.
+
+Wed Jan 22 09:25:07 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * c-typeck.c (comp_target_types): Make decl static.
+ Don't forget to return the value.
+ (function_types_compatible_p, comptypes): Initialize `val'.
+
+Tue Jan 21 13:29:50 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cross-make (ALL): Override with definition it here.
+ * configure: Don't edit its value explicitly here.
+
+ * crtstuff.c (__do_global_ctors): Include DO_GLOBAL_CTORS_BODY
+ in crtend.o, not in crtbegin.o.
+
+ * svr3.h: Prepare to use with i386.
+ (PCC_BITFIELD_TYPE_MATTERS): Definition deleted.
+ This pertains to the individual cpu types.
+ (ASM_SHORT, ASM_LONG, ASM_DOUBLE): Likewise.
+ (DBX_DEBUGGING_INFO): Undef this.
+ (DBX_REGISTER_NUMBER): Deleted the #undef.
+ (STARTFILE_SPEC, LINK_SPEC, LIB_SPEC): Deleted.
+ * i860v3.h (STARTFILE_SPEC, LINK_SPEC, LIB_SPEC): New definitions.
+
+ * att386.h: Coexist with svr3.h.
+ (ASM_FILE_START): Deleted.
+ (ASM_OUTPUT_COMMON, ASM_OUTPUT_LOCAL): Likewise.
+ (ASM_BYTE_OP, NO_DOLLAR_IN_LABEL): Likewise.
+ (ASM_OUTPUT_LABELREF): Undef before defining.
+ (ASM_FILE_START_1): Undef before defining.
+ (EXTRA_SECTION_FUNCTIONS): Deleted.
+ (BSS_SECTION_FUNCTION): New macro; defines bss_section.
+
+ * i386v.h, aix386.h: Include svr3.h.
+ (SCCS_DIRECTIVE, ASM_OUTPUT_IDENT): Deleted.
+ (TARGET_MEM_FUNCTIONS): Deleted.
+ (SDB_DEBUGGING_INFO, DBX_DEBUGGING_INFO): Deleted.
+
+ * Support constructors and destructors on svr3. From james@bigtex.
+ * i386v.h, aix386.h (STARTFILE_SPEC): Use crtbegin.o after crt1.o.
+ (LIB_SPEC): Use crtend.o before crtn.o.
+ (CTORS_SECTION_ASM_OP, ASM_OUTPUT_CONSTRUCTOR): New macros.
+ (INIT_SECTION_ASM_OP): Likewise.
+ * svr3.h (DTORS_SECTION_ASM_OP): New macros.
+ (DO_GLOBAL_CTORS_BODY): New macro.
+ (EXTRA_SECTIONS,EXTRA_SECTION_FUNCTIONS): Use .init and .fini
+ sections in addition to .bss.
+ ({INIT,FINI}_SECTION_FUNCTION): New macros for *_section functions.
+ ({CTORS,DTORS}_SECTION_FUNCTION): Macros deleted.
+ (ASM_OUTPUT_CONSTRUCTOR): Deleted.
+ (ASM_OUTPUT_DESTRUCTOR): Use ASM_LONG.
+ (INT_ASM_OP): Deleted.
+
+ * c-typeck.c (default_conversion): Don't use initial value if BLKmode.
+ If do use the initial value, update `type'.
+
+ * arm.h (STRUCTURE_SIZE_BOUNDARY): New definition.
+
+ * stor-layout.c (layout_type): Ignore MAX_FIXED_MODE_SIZE for integers.
+
+ * ultrix.h (SIZE_TYPE): Use `unsigned int'.
+ * Makefile.in (install-common): Add missing -f in rm.
+ (install-fixincludes): Install the README file.
+
+ * fixincludes: Don't match on size_t, etc., since we don't actually
+ change them.
+
+Mon Jan 20 23:22:45 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-call.c (ideal_candidate): Don't see two functions as ambiguous
+ if one is argument-by-argument equivalent or better than another.
+
+Mon Jan 20 14:08:06 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * toplev.c (strip_off_ending): Add ".ada".
+
+Mon Jan 20 13:53:15 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * protoize.c (xfree): No longer static.
+
+ * gbl-ctors.h (DO_GLOBAL_CTORS_BODY): Allow tm.h to override.
+
+ * final.c (leaf_renumber_regs_insn): Do just the pattern of an insn.
+
+ * pyr.h (PCC_BITFIELD_TYPE_MATTERS): Defined.
+ (STRUCTURE_SIZE_BOUNDARY): Deleted.
+
+ * mips.c: Clean up spacing around square brackets.
+
+ * c-typeck.c (convert_arguments):
+ Get rid of feature to convert to a tagless union type.
+ (common_type): Add pedantic warning.
+ (comptypes, function_types_compatible_p): Return 2 meaning warn.
+ (comp_target_types): Do the warning here.
+ (type_lists_compatible_p): New function.
+
+Sun Jan 19 17:32:19 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (emit_reload_insns): Fix typos when checking for secondary
+ icode.
+
+Sun Jan 19 15:28:53 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * global-alloc.c (global_alloc): If LEAF_REGISTERS, those are the
+ regs that cost nothing to save, for setting regs_already_used.
+
+ * expr.c (expand_builtin): Preserve function value reg
+ around the call to __builtin_saveregs.
+
+ * configure (mips-sgi-irix4*, mips-sgi-irix*): Set install_with_cp.
+
+ * c-decl.c (start_function):
+ Check properly for `static' function in handling -Wmissing-prototypes.
+
+ * libgcc2.c (__main): Omit this fn if INIT_SECTION_ASM_OP.
+
+Sun Jan 19 13:23:13 1992 Fred Fish (fnf at sunfish)
+
+ * amix.h (ASM_OUTPUT_ASCII): Override version in svr4.h.
+
+Sun Jan 19 13:16:56 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-search.c (lookup_field): Accept IS_AGGR_TYPE_CODE, not
+ just == RECORD_TYPE.
+
+ * cp-class.c (finish_struct): Clear a tentative setting of
+ DECL_BIT_FIELD.
+
+ * cp-decl.c (start_decl): Don't call `pushclass' for incomplete
+ CONTEXT.
+
+ * cp-typeck.c (comp_target_types): Call `comp_target_parms' with
+ STRICT == 0, not -1.
+ (build_conditional_expr): Check that the target types of TYPE1 and
+ TYPE2 are aggr type before calling `common_base_type'.
+
+Sun Jan 19 04:10:16 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * configure: Fix typo inserting INSTALL=cp into makefile.
+
+Sat Jan 18 12:06:58 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-lex.c (build_with_cleanup): Delete obsolete function.
+ * cp-tree.c (break_out_cleanups): New function.
+ * cp-decl.c (cplus_expand_expr): Call `break_out_cleanups'.
+ * cp-typeck.c (build_compound_expr): Ditto.
+
+ * cp-call.c (convert_harshness): Make any inheritance relationship
+ preferable to a void* conversion.
+ * cp-tree.h (CLASSTYPE_MAX_DEPTH): New macro.
+ * cp-class.c (finish_struct_bits): Set CLASSTYPE_MAX_DEPTH.
+
+ * cp-cvt.c (build_up_reference): Don't return in ARRAY_REF case,
+ since we may need to adjust the return value for complex
+ inheritance.
+
+ * cp-decl2.c (lang_f_options): Add recognizers for -f{no-}builtin,
+ -f{no-}ident, and -ansi. Also, remove unnecessary "no-*" forms.
+
+ * cp-init.c (emit_base_init): If PEDANTIC, don't let base
+ initializers leak up the hierarchy.
+
+ * cp-parse.y (structsp): Disable gratuitous error message.
+
+ * cp-call.c (convert_harshness): Don't overlook PENALTY when
+ signed/unsigned differences are noted (in both POINTER_TYPE and
+ REFERENCE_TYPE cases).
+
+ * toplev.c (strip_off_ending): Grok ".ii" endings (C++ preprocessed
+ files).
+
+ * cp-typeck.c (build_component_ref): Add special handler when
+ COMPONENT is the CLASSTYPE_VFIELD name for BASETYPE.
+
+Sat Jan 18 08:29:58 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_insn): Don't make constant pool entries in MODE_CC modes.
+
+Sat Jan 18 00:28:48 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (install-common): Fix typo installing gcc.
+
+ * crds.h, isi.h, newpbb.h, tti68k.h: Add #error because -m68000
+ will cause a crash (I think), to ask people what to do.
+
+ * gmicro.h (ASM_FILE_START): Don't do anything.
+ (TARGET_DEFAULT): Turn on the bitfield flag.
+ (TARGET_SWITCHES): Get rid of the bitfield options.
+
+ * c-lex.c (readescape): No warning for \?.
+
+ * protoize.c (munge_compile_params): Fix cast that sets compile_params.
+ (xmalloc, xrealloc): No longer static.
+ * Makefile.in (protoize, unprotoize): Add LIBDEPS as deps.
+
+ * va-i860.h (va_arg): Use __extension__ to suppress pedantic warning.
+ * va-sparc.h, va-spur.h, va-pyr.h: Likewise.
+
+ * x-irix4.h: New file.
+ * config.sub: Don't convert irix to sysv.
+ * configure (mips-sgi-irix4*): New configuration.
+ (mips-sgi-irix*): Renamed from mips-sgi-sysv*.
+
+ * gcc.c (process_command):
+ Handle the standard_exec_prefix* before the md_*_prefix.
+
+ * i386.h, ns32k.h (PCC_BITFIELD_TYPE_MATTERS): Defined.
+
+ * Makefile.in (libgcc1.null): Depend on GCC_PASSES.
+
+ * cccp.c (lookup_import, add_import): VMS kludges so they compile.
+ (hack_vms_include_specification): Add forward declaration.
+
+ * stor-layout.c (layout_record): Handle BITFIELD_NBYTES_LIMITED
+ just like one of the things done for PCC_BITFIELD_TYPE_MATTERS.
+
+ * x-next, x-i386mach: Deleted.
+ * t-libc-ok: New file. Define just LIBGCC1.
+ * configure (i386-*-mach, m68k-next-*): Use t-libc-ok.
+
+ * t-svr4 (FIXINCLUDES): Defined.
+ * t-m88kv4 (FIXINCLUDES): Defined.
+ * t-svr3 (EXTRA_PARTS): Defined.
+ * t-i386sco (EXTRA_PARTS): Defined.
+
+ * configure (sparc-*-sysv4*): New alternative.
+
+ * configure (install_with_cp): New flag an alternative can set.
+ If host sets it, add INSTALL=cp to Makefile.
+ Set this for any system V, and for m68k-crds-unos.
+
+Sat Jan 18 23:15:08 1992 Ron Guilmette (rfg at ncd.com)
+
+ * va-i860.h (va_list): Made __reg_base field type long* to avoid
+ compilation errors.
+ (__savereg): Add explicit cast to (__va_saved_regs *).
+
+Fri Jan 17 15:09:34 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.h (FUNCTION_BOUNDARY): Do larger alignments for i486.
+ (ASM_OUTPUT_ALIGN_CODE): Same here.
+ (ASM_OUTPUT_LOOP_ALIGN): But not here - do word aligns as before.
+
+ (enum reg_class): Delete classes ADREG and BREG - neither used nor
+ useful. Add classes FP_TOP_REG and FP_SECOND_REG.
+ (REG_CLASS_NAMES): Likewise.
+ (REG_CLASS_CONTENTS): Likewise.
+ (REGNO_REG_CLASS): Reflect that change.
+ (REG_CLASS_FROM_LETTER): Likewise. Add "t" and "u" constraints.
+ (CLASS_MAX_NREGS): New classes use only 1 hard reg for any mode.
+
+ (CONST_OK_LETTER_P): Document uses of letters.
+
+ * reg-stack.c: Add comments describing rules for asm statements
+ involving stack-like regs.
+ (asm_regs): Delete unused variable.
+ (fatal_for_asm): Delete unused function.
+
+ (get_asm_operand_lengths): New function.
+ (constrain_asm_operands): New function. Like constrain_operands,
+ but records some information about the matched alternative.
+
+ (record_asm_reg_life): New function.
+ (record_reg_life): If INSN is an asm statement, decode operands
+ and pass to record_asm_reg_life.
+ (record_reg_life_pat): Abort if any asm is seen here.
+
+ (subst_asm_stack_regs): New function.
+ (subst_stack_regs): If INSN is an asm statement, decode operands
+ and pass to subst_asm_stack_regs. When handling REG_UNUSED notes,
+ emit the pops in the right order.
+
+ (change_stack): New argument to insert any new insns before INSN
+ instead of after. All callers changed.
+
+ (emit_swap_insn): Abort if the reg is not found in REGSTACK.
+
+ * Makefile.in (reg-stack.o): Depends on insn-config.h.
+
+Fri Jan 17 16:38:32 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * toplev.c, flags.h (in_system_header): Declare here.
+ * c-lex.c, cp-lex.c (in_system_header): Not here.
+ * toplev.c (rest_of_compilation): Don't warn of unused static function
+ if definition is in a system header.
+
+ * gcc.c (do_spec_1): Add missing arg in recursive call.
+ (link_command_spec): Don't pass -s, -S, -u*, -X, -Y*.
+
+Fri Jan 17 12:51:28 1992 Jim Wilson (wilson at cygnus.com)
+
+ From Tiemann:
+ * rtlanal.c (reg_set_between_p): Call `reg_set_p' with INSN, not the
+ body of INSN so that CALL_INSNs are properly handled.
+ * explow.c (find_next_ref): Ditto.
+
+ * hp800.h, hp800.md: Delete RCS Header variables.
+
+ * reg-stack.c (replace_reg): Change `abort' to `abort ()'.
+
+Fri Jan 17 14:30:14 1992 Michael Meissner (meissner at osf.org)
+
+ * caller-save.c (insert_save_restore): Don't pass a CODE_LABEL to
+ reg_mentioned_p when the machine has a condition code, since
+ CODE_LABEL's don't have the same format as normal INSN's do.
+
+Fri Jan 17 13:24:33 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * Makefile.in (unprotoize.o): Use the rm -f option.
+
+ * cp-lex.c (check_newline): Define `used_up' as in c-lex.c.
+ (in_system_header): Define as in c-lex.c.
+
+Fri Jan 17 08:14:04 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c (delete_from_delay_slot): Pass correct length to
+ emit_delay_sequence.
+
+ * genattrtab.c (substitute_address): Handle IF_THEN_ELSE in addition
+ to COND.
+
+ * expr.c (expand_builtin, case BUILT_IN_STRLEN): Correct args in
+ expand_expr call.
+
+Fri Jan 17 17:33:40 1992 James Van Artsdalen (james@raid)
+
+ * x-i386v4 (CCLIBFLAGS): Delete macro.
+ (GCC-CFLAGS): Delete macro. Prevented Makefile.in from working.
+
+Thu Jan 16 17:03:27 1992 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * Makefile.in (cleanconfig): Also delete tconfig.h.
+
+ * varasm.c (assemble_external): Only call ASM_OUTPUT_EXTERNAL once
+ for each symbol.
+ (assemble_external_libcall): Fix minor typo in spacing.
+
+ * toplev.c (main): Force error if invalid -W option is used.
+
+Thu Jan 16 13:35:13 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88kdgux.h (CPP_PREDEFINES): Added __CLASSIFY_TYPE__ back and
+ noted when it would be useful.
+
+ * m88k.h (ASM_FILE_END, ASM_OUTPUT_ASCII): Override svr4.h.
+
+Thu Jan 16 12:37:16 1992 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * svr4.h (SVR4): Add this back.
+
+ * cccp.c (lookup_import): Use bcmp to compare inodes.
+
+ * cccp.c (main): Handle -idirafter option.
+
+ * m68kv4.h, m88kv4.h, i386v4.h, sparcv4.h, i860v4.h (CPP_PREDEFINES):
+ Add __svr4__ in case user programs want to distinguish.
+
+ * cp-lex.c (check_newline): Changes like Jan 12 changes in c-lex.c.
+
+ * Makefile.in (install-fixincludes): Renamed from `includes'.
+ Move comments so some shells are happier. Dep. on install-headers.
+
+ * m88kdgux.h (CPP_PREDEFINES): Add __svr4__. Remove __CLASSIFY_TYPE__.
+ Add some assertions.
+
+ * c-decl.c (init_decl_processing): Don't give arg type for abort, etc.
+ Always declare strlen, etc., so -O doesn't alter the warnings.
+ * expr.c (expand_builtin): Open-code str* or mem* or ffs if -O.
+
+ * c-decl.c (start_function): Fix backwards test for -W* options.
+
+ * protoize.c (GUESSPATHLEN): Treat POSIX like USG--and use just 200.
+
+ * cccp.c (deps_output): Break line iff string is empty.
+ (do_include): Fix up the deps_output calls.
+
+ * vax.c (print_operand_address): Handle form index + (reg+offset).
+
+ * m88k.h (TARGET_VERSION): Don't use __DATE__.
+
+ * gcc.c (default_compilers): Typos in c++-cpp-output case.
+
+Thu Jan 16 12:25:51 1992 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * loop.c (get_condition): In HAVE_cc0 code, generate a zero with
+ CONST0_RTX instead of just using const0_rtx.
+
+ * cse.c (cse_isnsn): A CALL_INSN clobbers all fixed regs except
+ for ap, fp, and sp.
+
+Thu Jan 16 08:03:40 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * c-decl.c (finish_enum): Compute the precision properly if the
+ maximum value is negative.
+
+Thu Jan 16 07:40:29 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reorg.c (try_merge_delay_insns, fill_slots_from_thread): Have
+ update_block put the phantom insn before THREAD.
+ (update_block): Update block status if WHERE, not INSN, is block head.
+
+Thu Jan 16 00:28:14 1992 Ron Guilmette (rfg ay ncd.com)
+
+ * i860.c (output_fp_move_double): Fixed typo.
+
+ * protoize.c (GUESSPATHLEN, pointer_type, const_pointer_type):
+ moved definitions declarations out of conditional region.
+ (string_list_cons, shortpath, munge_compile_params): Added casts.
+ (find_extern_def): Fixed string literal to avoid trigraph.
+ (find_rightmost_formals_list): Fixed to avoid unreached code warnings.
+
+ * svr4.h (ASM_OUTPUT_ASCII): Fixed typo.
+
+Wed Jan 15 21:58:01 1992 Jeffrey A Law (law at b117b.super.org)
+
+ * sparc.h (SELECT_RTX_SECTION): When generating PIC, place symbolic
+ operands in the data section.
+
+Wed Jan 15 21:45:09 1992 Michael Meissner (meissner at osf.org)
+
+ * collect2.c (main): Pass any -b<xx>, -B<xx>, -m<xx>, -f<xx>, and
+ -V<xx> options to gcc instead of the linker, in order to allow
+ target switches that affect the size of pointers and search paths to
+ be passed through.
+ (main, choose_temp_base): Use TMPDIR environment variable, and the
+ P_tmpdir macro if defined to locate directory to put temp files.
+ (whole file): Reorganize so that all of the OSF/rose stuff goes at
+ the end of the file, rather than being scattered throughout.
+ (main, scan_prog_file): Invoke scan_prog_file twice, once on each
+ output of ld.
+ (scan_prog_file, read_file, write_file): On the second invocation,
+ rewrite the object file in place, adding a load command to put
+ __main in the list of initializer functions. This allows users
+ to put constructors and destructors into shared libraries.
+ (scan_prog_file): Move debug stuff and error routines to separate
+ functions.
+
+Wed Jan 15 17:59:02 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (can_combine_p): Don't combine if DEST is still a field
+ assignment after we've tried to expand it.
+
+Wed Jan 15 16:01:13 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * regclass.c (fix_register): Don't match a null register name.
+ * varasm.c (decode_reg_name): Likewise.
+
+ * i386.h (HI_REGISTER_NAMES): Give the eliminable arg pointer a
+ null name.
+
+Wed Jan 15 13:40:50 1992 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * gcc.c (default_compilers): Pass -lang-asm, not -lang-asmc, to cpp.
+
+ * gcc.c (process_command): Don't dump md_exec_prefix in specs.
+ Use the md_... prefixes only if no -b.
+
+Wed Jan 15 13:35:09 1992 Ron Guilmette (rfg at ncd.com)
+
+ * i386v4.h (RETURN_IN_MEMORY): Definition added.
+ (CPP_PREDEFINES): Added -DX86 (needed for some system headers).
+ (ASM_OUTPUT_DWARF_STRING): Deleted.
+ (ASM_OUTPUT_ASCII): Added specialized definition for i386/svr4.
+
+ * svr4.h (SVR4): Deleted useless define.
+ (ASM_FILE_END): Added definition.
+ (ESCAPES, STRING_LIMIT, STRING_ASM_OP, ASM_OUTPUT_LIMITED_STRING):
+ (ASM_OUTPUT_ASCII): Generic svr4 definitions added.
+
+ * m68kv4.h (CPP_PREDEFINES): Don't define SVR4.
+ * sparcv4.h (CPP_PREDEFINES): Don't define SVR4.
+ (ASM_OUTPUT_ASCII): Deleted obsolete definition.
+
+ * xm-svr4.h (SVR4): Removed useless definition.
+ (POSIX): Added definition for protoize.c.
+
+ * i860b.h (ASCII_DATA_ASM_OP, ASM_OUTPUT_ASCII): Moved from i860.h.
+ * i860v3.h (ASCII_DATA_ASM_OP): Added OS-specific definition.
+ * i860v4.h (ASCII_DATA_ASM_OP, ASM_OUTPUT_ASCII):
+ Deleted (now in svr4.h).
+
+ * fixinc.svr4: Replaced all occurances of {1,\} in sed command
+ string with functional equivalents (to avoid bogus results).
+
+ * c-lex.c (readescape): Pass thru escaped x, a, and v if -traditional.
+ (readescape): Pedantic warning for \?, \(, \{, and \[.
+
+ * dwarfout.c: Updated copyright.
+ (fundamental_type_code): Abort for all non-fundamental types.
+ (type_is_fundamental): Return 0 for all non-fundamental types.
+ (containing_type_attribute, output_ptr_to_mbr_type_die): New functions.
+ (output_pointer_type_die, output_reference_type_die): Added calls to
+ equate_type_number_to_die_number.
+ (output_type): Handle OFFSET_TYPE correctly.
+ (output_type): Ignore LANG_TYPE (for now).
+
+Wed Jan 15 09:30:08 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * All cp-* files: Remove calls to `cleanup_after_call'.
+
+ * cp-method.c (fndecl_as_string): Add a missing space when printing
+ the return type.
+
+ * cp-typeck.c (build_modify_expr): Treat arrays specially in both
+ INIT_EXPR and NOP_EXPR cases. Also, if we take the address NEWRHS
+ when it's not a SAVE_EXPR, build a new NEWRHS using that address.
+ * cp-tree.c (lvalue_p): Handle WITH_CLEANUP_EXPR case.
+
+ * cp-decl.c (grokvardecl): Don't get tripped up by static class
+ members of incomplete type.
+
+Wed Jan 15 09:12:51 1992 Jeffrey A. Law (law at wombat.gnu.ai.mit.edu)
+
+ * m68k.c (legitimize_pic_address): Re-enable code which was
+ mistakenly #ifdef'd out.
+
+Wed Jan 15 08:12:18 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload.c (find_reloads): Check for insn not recognized.
+
+ * caller-save.c (reg_{save,restore}_code): New variables.
+ (init_caller_save): Set them.
+ (insert_save_restore): Just make SET for pattern of insn and set
+ code from reg_{save,restore}_code.
+ (save_call_clobbered_regs): Put restore insns before JUMP_INSN that
+ ends basic block, but after any other insn that ends the block.
+
+ * sdbout.c (sdbout_symbol): Treat (mem (reg SP)) the same
+ as (mem (reg FP)).
+
+ * reorg.c (mark_referenced_resources): Fix typo in last change.
+ (emit_delay_sequences): Update chain correctly when previous or
+ next insn is also a SEQUENCE.
+
+Wed Jan 15 08:10:29 1992 Chris Smith (cks at bach.convex.com)
+
+ * t-convex: Use collect2 to link.
+ * convex.h: remove assembly output defines for old collect2.
+ * convex.h: define vprintf and wait macros for pcc mode boot of
+ collect2.
+
+ * convex.h (ASM_OUTPUT_DOUBLE_INT): define.
+
+ * convex.h (DEFAULT_GDB_EXTENSIONS): define as 0 until GDB version 4
+ port is available.
+
+ * convex.c (ap_reload_needed): Fix comment.
+
+Wed Jan 15 07:08:25 1992 Tom Wood (wood at dg-rtp.dg.com)
+
+ * m88k.h (CONST_SECTION_FUNCTION): Trivial definition for targets
+ not based on svr[34].h (m88k-luna).
+
+ * m88k.h (PREDICATE_CODES): Use it.
+
+ * m88k.md (casesi_enter): Don't use bsr.n with -fno-delayed-branch.
+ * m88k.h (ASM_OUTPUT_CASE_END): The lda goes here when bsr is used.
+
+ * m88k.c (legitimize_address): When converting a symbol_ref for
+ PIC, add a REG_EQUAL note.
+
+Wed Jan 15 06:22:34 1992 Michael Meissner (meissner at osf.org)
+
+ * mips.h (MIPS_VERSION): Bump Meissner version # to 8.
+ (fcmp_op): Add function declaration.
+ (TARGET_FLOAT64): Support for -mfp64 switch to support the R4000 FR
+ psw bit, which doubles the number of floating point registers.
+ (TARGET_SWITCHES): Likewise.
+ (HARD_REGNO_NREGS): Likewise.
+ (CLASS_FCMP_OP): New bit for classifing floating point compares.
+ (PREDICATE_CODES): Add cmp2_op and fcmp_op support.
+
+ * mips.c (various): Move extern declarations from inside of
+ functions to outside all functions.
+ (fcmp_op): Match comparison operators for floating point.
+ (mips_move_2words): Add -mfp64 support.
+ (override_options): Likewise.
+ (compute_frame_size): Likewise.
+ (override_options): Set up for fcmp_op.
+ (gen_conditional_branch): Redo floating point compares/branches, so
+ that it is like the rest of the compiler expects -- set cc0 to a
+ compare operator, instead of the exact test required, and put the
+ smarts in the branch operators to generate both the test and the
+ branch.
+
+ * mips.md (cmpdf_eq, cmpdf_lt, cmpdf_le): Delete.
+ (cmpsf_eq, cmpsf_lt, cmpsf_le): Delete.
+ (cmpdf_internal): New define insn to match FP compares.
+ (cmpsf_internal): Likewise.
+ (branch_fp_true1, branch_fp_true2): Likewise.
+ (branch_fp_false1, branch_fp_false2): Likewise.
+ (branch_fp_true, branch_fp_false): New define_insns to match the
+ branch part of FP compares.
+
+Wed Jan 15 01:42:39 1992 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * unroll.c (copy_loop_body): New parameter copy_notes_from, to
+ correct problem with bad debug info generated for preconditioned
+ loops.
+ (unroll_loops): Fix calls of copy_loop_body to pass new parameter.
+
+Wed Jan 15 01:01:39 1992 Richard Stallman (rms at mole.gnu.ai.mit.edu)
+
+ * gcc.c (main): Don't use TARGET_VERSION.
+ (endfile_spec, switches_need_spaces): New vars, initted from macros.
+ (set_spec, process_command): Read and write those vars.
+ (do_spec_1, process_command): Use the new vars, not the macros.
+ (SWITCHES_NEED_SPACES): New default macro definition.
+
+ * Makefile.in (install-common): Install driver as gcc-$(target).
+
+ * gstddef.h (wchar_t): Check for _T_WCHAR.
+
+ * stmt.c (pushcase, pushcase_range): Return 5 if jump into stack level.
+ * c-parse.y, objc-parse.y (stmt): Print error msg for that.
+ * cp-parse.y: Likewise.
+
+Tue Jan 14 23:25:37 1992 Ron Guilmette (rfg at ncd.com)
+
+ * dwarfout.c: Include <string.h> if USG *or* POSIX.
+ (TREE_UID): Deleted.
+ (current_funcdef_number): Replacement for TREE_UID.
+ (dwarfout_file_scope_decl): Increment
+ current_funcdef_number after each funnction definition is processed.
+ (pending_sibling_stack_depth): Renamed globally to pending_siblings.
+ (pending_sibling_stack_size): Renamed to pending_siblings_allocated.
+ (PENDING_SIBLING_STACK_INCREMENT): Renamed PENDING_SIBLINGS_INCREMENT.
+ (pending_types_list, pending_types_allocated, pending_types,
+ PENDING_TYPES_INCREMENT, fake_containing_scope): New vars/macros.
+
+ * dwarfout.c (total_ft_entries): Renamed to ft_entries_allocated.
+ (valid_ft_entries): Renamed to ft_entries.
+ (FT_ENTRIES_INCREMENT): Definition added.
+ (lookup_filename): Expand filename table (when needed)
+ by adding FT_ENTRIES_INCREMENT more table elements rather than
+ doubling current size.
+ (dwarfout_init): Allocate initial filename table.
+
+ * dwarfout.c (INSN_LABEL_FMT, FUNC_END_LABEL_FMT): Use decimal format.
+
+ * dwarfout.c (member_attribute): Rewritten for proper C++ support.
+ (output_array_type_die, output_set_type_die, output_entry_point_die,
+ output_enumeration_type_die, output_global_subroutine_die,
+ output_global_variable_die, output_inline_subroutine_die,
+ output_local_variable_die, output_member_die, output_pointer_type_die,
+ output_reference_type_die, output_string_type_die,
+ output_structure_type_die, output_local_subroutine_die,
+ output_subroutine_type_die, output_typedef_die, output_union_type_die):
+ Added calls to member_attribute (for C++).
+
+ * dwarfout.c (inline_attribute): Test for TREE_INLINE in here.
+ (output_global_subroutine_die, output_local_subroutine_die):
+ Don't test for TREE_INLINE here.
+
+ * dwarfout.c (output_formal_types): Fixed to handle METHOD_TYPE
+ nodes and to output all related type DIEs last (for SDB).
+ (type_ok_for_scope, output_pending_types_for_scope, pend_type):
+ Functions added to support C++.
+ (output_type, output_decl): Added `containing_scope'
+ parameter to handle C++ nested types.
+ (output_type): Don't output the type unless it's OK
+ for the current DIE chain (i.e. unless it's OK for the current scope).
+ (output_type): Output completed non-global tagged types
+ right away even if not finalizing.
+ (output_type): Use correct method to get head of chain
+ of C++ function members.
+ (output_decl): Skip first item on chain of DECL_ARGUMENTS
+ for a FUNCTION_DECL whose type is a METHOD_TYPE.
+ Suppress output of type DIEs for formal parms of a FUNCTION_DECL
+ until after all TAG_parameter DIEs have been output (for SDB
+ compatability).
+ Output DIEs for any LABEL_DECL nodes attached to outermost BLOCK of
+ a FUNCTION_DECL.
+ Handle LABEL_DECL nodes.
+
+ * dwarfout.c (dwarfout_file_scope_decl): Un-pend all pending file-
+ scope types after each file-scope declaration is output.
+ (output_decls_for_scope): Un-pend all pending local types
+ at end of each local scope.
+
+Tue Jan 14 16:40:39 1992 Tim Moore (moore at fast.cs.utah.edu)
+
+ * calls.c (expand_call): If ARGS_GROW_DOWNWARD, make slot_offset
+ negative and set highest_outgoing_arg_in_use to needed + 1.
+ (store_one_arg): If ARGS_GROW_DOWNWARD deal with negative slot_offset.
+
+Tue Jan 14 20:01:59 1992 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu)
+
+ * sparc.h (TARGET_SUN_ASM, TARGET_GNU): Delete support for
+ obsolete and undocumented flags -msun-asm and -mgnu.
+ * sparc.md: Likewise.
+
+Tue Jan 14 19:36:21 1992 Tim Moore (moore at fast.cs.utah.edu)
+
+ * xm-hp800.h (hpux8): define.
+ * hp800.h (LINK_SPEC): Conditionalize on hpux8.
+ (STACK_BOUNDARY): Define for snake.
+ (CALL_USED_REGISTERS): Shift register is special.
+ (HARD_REGNO_MODE_OK): Don't allow modes smaller that SImode in fp
+ registers.
+ (reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS): Eliminate
+ GENERAL_OR_FP_REGS, GENERAL_OR_SNAKE_FP_REGS classes.
+ (FUNCTION_ARG): Handle snake fp arguments.
+ (ASM_DOUBLE_ARG_DESCRIPTORS): define.
+ (ASM_DECLARE_FUNCTION_NAME): Use above macro to get around hpux
+ 8.0 change.
+ * hp800.md (movsi, movdi): Add ! and * to constraints of anonymous
+ define-insns to discourage SImode values in fp registers. Don't
+ modify the stack pointer when moving between general and fp registers.
+ (mulsi): Take out pattern that matches a degenerate multiplication
+ by 1; it doesn't seem to be needed and causes problems.
+ (sar_sub): Change so that const_int isn't the first argument of
+ the comparison.
+ * hp800.c (output_fp_move_double): As above, don't modify the
+ stack pointer when moving between general and fp registers.
+ (output_block_move): Don't make one CONST_INT rtx and store
+ different integer values in it; cons up a "new" one for each value.
+ (output_floatsisf2, output_floatsidf2): Fix typos.
+ (output_arg_descriptor): Conditionalize for HPUX 8.0.
+
+Tue Jan 14 14:38:09 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-typeck.c (build_unary_op): Call readonly_warning_or_error if
+ ARG is TREE_READONLY (in addition to the type being TYPE_READONLY).
+
+ * cp-init.c (maybe_adjust_addr_for_delete): If the adjustment needs
+ to be done, zero out the storage that held part of the cookie.
+
+Tue Jan 14 13:12:48 1991 Ron Guilmette (rfg at ncd.com)
+
+ * c-decl.c (poplevel): Set TYPE_CONTEXT for each tagged type
+ except inside function declaration parm list.
+ (grokdeclarator): Set TYPE_CONTEXT for tagged type in decl parm list.
+ (pushtag): Don't set TYPE_CONTEXT for tagged types here.
+
+Tue Jan 14 06:46:37 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * global-alloc.c (global_alloc): Count multi-word pseudos correctly
+ in local_reg_n_refs.
+ (find_reg): Evict pseudos that overlap the register we take, not just
+ that start with that register.
+
+ * a29k.c (a29k_debug_reg_map): New variable.
+ (output_prologue): Initialize it.
+ * a29k.h (DBX_REGISTER_NUMBER): Use that map.
+
+ * ultrix.h (WCHAR_TYPE): Make definition be a known type.
+
+ * final.c (final_scan_insn): Call DBR_OUTPUT_SEQEND before we
+ clear `final_sequence', so it can call dbr_sequence_length.
+
+ * reload1.c (reload): Clear insn_needs once we know we have
+ reloads, instead of always.
+ Don't skip processing of reloads for CALL_INSNs when caller-save
+ needs a spill register.
+
+ * flow.c (mark_used_regs, case RETURN): Insert missing test for global
+ registers.
+
+ * reorg.c (mark_referenced_resources): Mark asm's as volatile
+ when appropriate.
+
+ * integrate.h (struct inline_remap): New field const_equiv_map_size.
+ * integrate.c (expand_inline_function): Set it; make larger map.
+ (subst_constants): Don't reference out-of-range entry in equiv map.
+ * unroll.c (unroll_loop): Set const_equiv_map_size.
+
+See ChangeLog.4 for earlier changes.
diff --git a/gcc/ChangeLog.6 b/gcc/ChangeLog.6
new file mode 100644
index 00000000000..9bd9de01a5f
--- /dev/null
+++ b/gcc/ChangeLog.6
@@ -0,0 +1,8173 @@
+
+Sat Oct 31 15:19:54 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 2.3 released.
+
+ * Makefile.in (install-libobjc): New target.
+ ($(srcdir)/gcc.dvi, $(srcdir)/cpp.dvi): New targets.
+ (extraclean): rm *diff, *lose, config/*lose.
+ (mostlyclean): rm config/core.
+
+ * objc-actions.c (OBJC_SELECTORS_WITHOUT_LABELS): Define by default.
+
+Fri Oct 30 20:11:52 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.c (output_move_double): Undo 10/25 change. Handle case
+ where part of a dest reg is used in a src mem rtx, without using
+ stack.
+
+Fri Oct 30 18:52:57 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Bump meissner version number to 28.
+
+ * mips.md (addsi3, subsi3): Don't allow -32768 as the second
+ operand, the assembler complains if the instruction fills a delay
+ slot.
+
+Fri Oct 30 16:11:37 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * combine.c (simplify_shift_const):
+ For a subreg, require subreg_lowpart_p and not paradoxical.
+
+ * Makefile.in (install-fixincludes): Ignore dirs that don't exist.
+
+Thu Oct 29 20:15:44 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gvarargs.h, gstdarg.h [4.3 net 2]: If _VA_LIST_, is undefined
+ then va_list is already declared.
+
+ * i386gas.h (ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_INTERNAL_LABEL):
+ Override, if NO_UNDERSCORES.
+
+Thu Oct 29 17:30:52 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * flow.c (life_analysis): Mark FP live at end of function.
+ * reload1.c (reload): If FP was eliminated, remove it from
+ being live in any basic block.
+
+ * varasm.c (output_constant_pool): Labels can be deleted by being
+ turned into NOTEs, not just have INSN_DELETED_P.
+
+Thu Oct 29 16:15:47 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gstdarg.h: Use _ANSI_STDARG_H_, not _ANSI_STDARG_H.
+
+ * gstddef.h [4.3 net 2]: If _SIZE_T_, etc. are undefined
+ then type is already declared.
+
+ * m68k.c (print_operand_address) [MOTOROLA !SGS]:
+ Don't subtract 2 in the address displacement.
+
+Thu Oct 29 14:36:23 1992 Michael Meissner (meissner@osf.org)
+
+ * libgcc2.c (__builtin_vec_new): #undef NULL before including
+ stdio.h to prevent redeclaration message.
+ (pyramid __enable_execute_stack): Ditto.
+
+ * i386rose.h (YES_UNDERSCORES): Define.
+ (ASM_OUTPUT_LABELREF): Don't redefine.
+
+ * mips.h (ASM_FINAL_SPEC): If cross compiling, don't invoke
+ mips-tfile by default.
+
+ * decrose.h (ASM_FINAL_SPEC): If cross compiling, don't invoke
+ mips-tfile by default.
+
+ * mips-tdump.c, mips-tfile.c: Handle the case where CROSS_COMPILE
+ is defined more gracefully.
+
+Thu Oct 29 12:10:16 1992 Tim Moore (moore at defmacro.cs.utah.edu)
+
+ * combine.c (make_extraction): Fix paren error in if for INNER is reg.
+
+Thu Oct 29 13:49:03 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * xm-mipsbsd.h: Really delete file.
+
+Thu Oct 29 02:48:28 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * dwarfout.c, arm.c, m88k.c: Include "assert.h" instead of <assert.h>.
+
+Thu Oct 29 00:43:00 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gstddef.h [4.3 net 2]: Force inclusion of ansi.h.
+ Undef _SIZE_T_, _PTRDIFF_T_, _WCHAR_T_ at end.
+
+ * Makefile.in (libgcc2.a, libgcc1.a): Use || to exit if cp fails.
+ (install-float-h-cross): Use fi, not done.
+ Write float.h in $(tmpdir), not in `.'.
+ (tmpdir): New variable.
+
+ * i386gas.h (NO_UNDERSCORES): Test was backwards.
+ (SDB_DEBUGGING_OUTPUT): Defined.
+
+Wed Oct 28 16:33:34 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gstdarg.h, gvarargs.h:
+ On Net 2 system, don't test, define or undef _VA_LIST_.
+ Use _ANSI_H_, __BSD_NET2__ and ____386BSD____ to test for this.
+
+ * i386bsd.h (CPP_PREDEFINES): Add ____386BSD____.
+
+ * c-decl.c (pushdecl): Allow redeclaring builtin as any sort of static.
+
+ * Makefile.in (install-cross-tools): Fix typo.
+ (all.build): Dep on xgcc instead of $(GCC_PASSES).
+
+Wed Oct 28 15:25:42 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * m88k.c (print_operand): When AS_BUG_FLDCR is defined, use alternate
+ fldcr form.
+ * m88kdgux.h (AS_BUG_FLDCR): Define to accomodate 4.30 assembler bug.
+
+ * m88kv3.h (CPP_PREDEFINES): Add -Dunix.
+
+ * m88kdolph.h (SDB_ALLOW_FORWARD_REFERENCES): Don't override.
+
+Wed Oct 28 05:34:11 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * reload1.c (gen_input_reload): In PLUS, if OP0 and OP1 are the
+ same, use RELOADREG when generating the addition.
+
+ * reload.c (find_reloads_address): When copying memref after we've
+ made recursive calls on it, copy any replacements we made.
+
+ * combine.c (can_combine_p): Don't substitute an expression
+ containing a register that will be clobbered in I3.
+
+ * objc/core.c, objc/hash.c: Include tconfig.h, not config.h.
+ Include gstdarg.h.
+ * objc/object.m: Include tconfig.h, not config.h.
+ Include gstdarg.h before stdio.h.
+ * objc/objc.h: Don't include gstdarg.h here.
+ * objc/objc-proto.h (CLASS_LOCATION_SHIFT): Use HOST_BITS_PER_LONG,
+ not BITS_PER_WORD.
+ (setClassNumber, getClassNumber): `info' field is long, not int.
+
+Wed Oct 28 10:54:50 1992 Michael Meissner (meissner@osf.org)
+
+ * libgcc2.c (L_caps_new): Properly close comment.
+
+Wed Oct 28 05:50:10 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * pa.md (mulsi): Input predicates back to srcsi_operands.
+ Don't handle constants specifically for TARGET_SNAKE, but call
+ force_reg to put them in registers.
+ (indexed addressing mode patterns): Remove the patterns with
+ unscaled index. Switch off patterns that never match.
+
+ * longlong.h (file header): Add comment describing sdiv_qrnnd.
+ (__hppa sub_ddmmss): Swap input operands.
+
+ * gcc.c (process_command): Check that we have enough arguments.
+
+Wed Oct 28 00:40:18 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure (i[34]86-*-sysv*): Take note of $stabs.
+ * i386gas.h (SDB_DEBUGGING_INFO): #undef deleted.
+ (DBX_DEBUGGING_INFO): Definition deleted.
+ * i386gstabs.h: New file.
+
+ * Makefile.in (mostlyclean): Don't delete tmp-limits.h.
+
+ * i386vgas.h: File deleted.
+
+Tue Oct 27 15:35:51 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * libgcc2.c: Include stdio.h.
+ [__GNU_LIBRARY__] (write): Defined.
+
+ * Makefile.in (install-cross-tools): When handling $(tooldir)/include,
+ do all cd's starting from build directory.
+
+ * i386gas.h (NO_UNDERSCORES): Don't define, if YES_UNDERSCORES.
+ * i386linux.h (YES_UNDERSCORES): Defined.
+
+Tue Oct 27 14:17:43 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * configure (i[34]86-*-linux): Set broken_install.
+ * x-linux (INSTALL): Delete.
+ * x-iris (INSTALL): Delete.
+
+Tue Oct 27 13:39:22 1992 Tim Moore (moore@hal.gnu.ai.mit.edu)
+
+ * pa.h (ASM_GLOBALIZE_LABEL): Give function symbols CODE type,
+ others DATA type.
+
+Mon Oct 26 16:40:43 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_c_cast): Don't warn about size change between
+ pointer and integer if the value is constant.
+
+ * Makefile.in (libobjc.a): If ln fails, copy libobjc.a.
+
+Mon Oct 26 16:21:11 1992 Tim Moore (moore@defmacro.cs.utah.edu)
+
+ * pa.h (EXPORT_PARMS, ASM_DECLARE_FUNCTION): Blow away usage of
+ EXPORT_PARMS. BUGGY_GAS isn't a problem any more.
+ (TEXT_SPACE_P, FUNCTION_NAME_P): New macros.
+ (ENCODE_SECTION_INFO): Use TEXT_SPACE_P.
+ (STRIP_NAME_ENCODING): Strip a '*' which might preceed a '@'.
+ (ASM_OUTPUT_EXTERNAL): Give only function labels a CODE type.
+ (ASM_OUTPUT_LABELREF): Use FUNCTION_NAME_P.
+ * pa.c (hppa_encode_label): Change function name encoding to
+ preserve leading '*' if there is one.
+ (function_label_operand): Use FUNCTION_NAME_P macro.
+
+Mon Oct 26 14:39:46 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ From Tim Moore:
+ * function.c (locate_and_pad_parm): In ARGS_GROW_DOWNWARD case,
+ don't pad to argument alignment if where_pad is downward.
+
+Mon Oct 26 11:21:36 1992 Chris Smith (csmith@convex.com)
+
+ * convex.h (SHIFT_COUNT_TRUNCATED): Undefine.
+
+Mon Oct 26 07:48:35 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.c (print_operand, new 'L'): New case.
+ * alpha.md (movhi/movqi patterns): For long constants, use 'i'
+ constraint instead of 'K'; use "%L1" in template.
+
+ * configure (alpha): Set use_collect2.
+
+Mon Oct 26 04:19:24 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * xm-alpha.h: Declare calloc.
+
+Sun Oct 25 17:19:52 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * function.c (fixup_var_refs_insns): Don't call delete_insn if not -O.
+ Make a NOTE_INSN_DELETED instead.
+
+Sun Oct 25 11:57:04 1992 Chris Smith (csmith@convex.com)
+
+ * convex.h (target_flags): prevent -mnoc2 from clearing
+ TARGET_INDIRECTS.
+ (TARGET_INDIRECTS): Always on.
+
+Sun Oct 25 16:56:18 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * calls.c (expand_call): Don't call convert_to_mode if we obtained
+ VALUE in the proper mode; VALUE might be a CONST_INT.
+
+Sun Oct 25 03:18:03 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (gen_push_operand): No longer static.
+
+ * i386.c (output_move_double): Divert first word via the stack
+ if it's a register used in the input operand.
+ * i386.md (movdi): Delete the `&' from constraint.
+
+Sat Oct 24 21:41:00 1992 Chris Smith (csmith@convex.com)
+
+ * convex.md (movstrictsi): Correct output constraint is + not =.
+
+Sat Oct 24 14:10:43 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * news.h (FUNCTION_EPILOGUE): Fix typos.
+
+ * cccp.c (get_lintcmd): Length of `LINTLIBRARY' is 11.
+
+Sat Oct 24 13:22:09 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * arm.md (DImode patterns): Add `&' to target operand constraints.
+
+ * Makefile.in (setting version variable): Prepend $(srcdir) to
+ version.c.
+
+ From Wilson:
+ * longlong.h (sparclite): Use machine independent USItype instead
+ of explicit types.
+
+Sat Oct 24 10:35:18 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.md (movdi): Tests were in wrong order.
+
+ * rs6000.h (LEGITIMIZE_ADDRESS): Indexed addresses are not valid
+ for DImode and TImode; GO_IF_LEGITIMATE_ADDRESS knows this.
+
+ * Makefile.in (mostlyclean): Add missing semicolon.
+
+ * a29k.c (a29k_set_memflags, a29k_set_memflags_1): New functions.
+ * a29k.md (movqi, movhi, reload_{in,out}{qi,hi}): Use them.
+
+ * alpha.c (get_aligned_mem): Copy memory flags to new MEM.
+ (alpha_set_memflags, alpha_set_memflags_1): New functions.
+ * alpha.md (movqi, movhi, reload_{in,out}{qi,hi}): Use new
+ functions.
+
+ * alpha.h (ASM_FILE_START): Stop at blank in version string.
+
+Sat Oct 24 04:35:16 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload1.c (emit_reload_insns): If not -O, Don't try find_equiv_reg.
+ (choose_reload_regs): If not -O, don't inherit reloads.
+
+Fri Oct 23 18:07:10 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * news.h (FUNCTION_EPILOGUE):
+ If no frame ptr, increment stack ptr to free up the local space.
+
+ * gcc.c (process_command): Discard after first space in spec_version.
+
+ * print-tree.c (print_node): Always output `>' to match `<'.
+
+ * Makefile.in (version): Use sed to extract.
+ Ignore excess after space.
+ (install-fixincludes): Fix typo in last change.
+
+ * configure (i386-ibm-aix*): Use aix386ng.h if not --with-gas.
+ * aix386ng.h: New file.
+
+Fri Oct 23 15:14:49 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * sdbout.c (sdbout_symbol): Return if a symbol's DECL_NAME is
+ empty, since we won't be able to make a symtab of it.
+
+ * convex.h (P_tmpdir): Remove definition.
+ * xm-convex.h: Put it here.
+
+Fri Oct 23 10:27:34 1992 Michael Meissner (meissner@osf.org)
+
+ * i386rose.h (ASM_OUTPUT_LABELREF): Define so that external
+ identifiers have leading underscores in front of them.
+
+ * mips-tfile.c (parse_stabs_common): Allow stabs with line numbers
+ of 0. These come from g++ for compiler generated functions that
+ take arguments.
+
+Fri Oct 23 07:49:12 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * romp.c (output_fpops): Add SYMBOL_REF and LABEL_REF cases to
+ constants handled.
+
+Fri Oct 23 01:58:12 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * flow.c (find_basic_blocks): Check for LABEL_REF_NONLOCAL_P
+ in label_value_list.
+ * jump.c (mark_jump_label): Copy LABEL_REF_NONLOCAL_P from
+ LABEL_REF into REG_LABEL note.
+
+ * toplev.c (push_float_handler): Declare arg old_handler.
+
+ * t-next (OTHER_FIXINCLUDES_DIRS): Defined.
+
+ * Makefile.in (OTHER_FIXINCLUDES_DIRS): New variable, normally empty.
+ (install-fixincludes): Run fixincludes on those dirs.
+ * fixincludes: Convert //-style comments to /*...*/ style.
+
+ * loop.c (record_biv): Clear total_benefit field of new iv_class.
+ (get_condition):
+ Verify op 2 of source is label_ref before looking within.
+
+Thu Oct 22 21:17:53 1992 Tim Moore (moore at defmacro.cs.utah.edu)
+
+ * varasm.c (STRIP_NAME_ENCODING): New macro to decode a symbol name
+ munged by ENCODE_SECTION_INFO.
+ (assemble_start_function, assemble_variable): Use STRIP_NAME_ENCODING.
+ * pa.h (STRIP_NAME_ENCODING): New definition.
+
+Thu Oct 22 17:53:37 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (mostlyclean): Clean objc subdir only if it exists.
+
+ * news.h (FUNCTION_PROLOGUE): Do allocate local stack space
+ when no frame pointer.
+
+Thu Oct 22 15:21:27 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * i960.h (FUNCTION_VALUE): Simplify, just return reg 0.
+ * i960.c (i960_function_value): Delete.
+
+Thu Oct 22 09:42:50 1992 Michael Meissner (meissner@osf.org)
+
+ * mips-tfile.c (parse_stabs_common): Ignore stab line numbers
+ of 0, since the G++ front end generates them. Check whether
+ line numbers can fit within the index field, and if not report
+ an error.
+
+ * mips.c (function_arg): Align passed structures to double word
+ boundary if structure has double word alignment.
+
+ * mips.h (STACK_DYNAMIC_OFFSET): Do not define this macro in order
+ to work around a bug.
+
+Thu Oct 22 08:00:43 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gstdarg.h, gvarargs.h: Treat _AIX and _M_UNIX like __svr4__.
+
+ * i386gas.h (NO_UNDERSCORES): Defined.
+
+ * next.h (INCLUDE_DEFAULTS): Put in GPLUSPLUS_INCLUDE_DIR,
+ GCC_INCLUDE_DIR, LOCAL_INCLUDE_DIR, STANDARD_INCLUDE_DIR.
+ Don't define at all if cross-compiling.
+
+ * tree.c (copy_node): Copy the excess bytes--don't clear them.
+
+Thu Oct 22 06:40:55 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * a29k.h (TARGET_SWITCHES): Add missing complementary switches:
+ -mno-stack-check and -mstorem-bug.
+
+ * a29k.md (long constant split): Use gen_lowpart instead of making
+ a SUBREG directly.
+
+ * arm.h (STORE_FLAG_VALUE): Remove bogus definition.
+
+Thu Oct 22 03:04:28 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * m88k.c (prologue_marked): New variable.
+ (m88k_end_prologue): Output the epilogue mark here if the start of
+ the epilogue passed the end of the prologue.
+ (m88k_begin_epilogue): Don't output the epilogue mark if the end
+ of the prologue hasn't been processed yet.
+
+Thu Oct 22 03:20:40 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * function.c (put_var_into_stack): When we operate on a pseudo
+ that holds the address, use proper modes.
+
+ * combine.c (make_extraction): Use is_mode, not inner_mode,
+ for BYTES_BIG_ENDIAN adjustment to offset for non-bitfield case.
+ Update is_mode when stripping subreg from around a mem.
+
+ * m68k.h (GO_IF_INDEXABLE_BASE): Allow LABEL_REF only if jump table.
+
+Wed Oct 21 18:55:24 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gstdarg.h: Check and define _ANSI_STDARG_H along with _STDARG_H.
+
+Wed Oct 21 11:41:39 1992 Tom Wood (wood at gen-rtx)
+
+ * toplev.c (push_float_handler, pop_float_handler): New functions.
+ * fold-const.c (real_value_truncate):
+ Use them, in case another handler is already in effect.
+
+Wed Oct 21 22:08:31 1992 H.J. Lu (hlu@yardbird.eecs.wsu.edu)
+
+ * Makefile (all.build): Add target $(GCC_PASSES) for xgcc.
+ * build-make (CC): Defined.
+ (CROSS_GCC_FLAGS): Deleted.
+ (HOST_CC): Delete -V option; CC supplies that.
+
+Wed Oct 21 12:34:39 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ From Wilson:
+ * longlong.h (sparclite udiv_qrnnd): Remove comma before
+ __AND_CLOBBER_CC.
+
+Wed Oct 21 12:24:24 1992 Michael Meissner (meissner@osf.org)
+
+ * decrose.h (WORD_SWITCH_TAKES_ARG): Add -pic-names.
+ (CC1_SPEC): If -pic-names, pass -mhalf-pic to cc1.
+
+ * i386rose.h (WORD_SWITCH_TAKES_ARG): Add -pic-names.
+ (CC1_SPEC): If -pic-names, pass -mhalf-pic to cc1.
+
+Wed Oct 21 07:34:16 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * configure (alpha): Only accept OSF/1.
+
+ * alpha.h (ASM_FILE_START): Change .verstamp ident for BL9.
+ * alpha.md (div/mod): Change calling sequence to agree with BL9.
+
+ * expr.c (do_store_flag): Ensure we don't get confused when
+ emit_store_flag fails and an operand has a QUEUED.
+
+Wed Oct 21 02:53:58 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cexp.y (integer_overflow): Do nothing unless pedantic.
+
+Tue Oct 20 17:02:15 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * README, sparc.h, flow.c, regs.h: Change global-alloc.c to global.c.
+
+ * i960.md (call, call_value): Use 'd' not 'r' constraint for scratch.
+
+ * gcc.c (WORD_SWITCH_TAKES_ARG): Handle -Ttext and -Tbss in
+ addition to -Tdata.
+ * i960.h (WORD_SWITCH_TAKES_ARG): Delete, now unnecessary.
+ * next.h (WORD_SWITCH_TAKES_ARG): Add -Tbss.
+ * sparc.h, sun2.h, sun3.h (WORD_SWITCH_TAKES_ARG): Add -Ttext and
+ -Tbss.
+
+Tue Oct 20 16:49:57 1992 Ron Guilmette (rfg at netcom.com)
+
+ * dwarfout.c (dwarfout_file_scope_decl): Generate DIEs for
+ built-in non-fundamental types.
+
+Tue Oct 20 14:58:18 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc-actions.c (handle_impent, handle_class_ref): Use __
+ to start the generated names, not period.
+
+Tue Oct 20 14:38:30 1992 Brendan Kehoe (brendan@mole.gnu.ai.mit.edu)
+
+ * cp-method.c (fndecl_as_string): Undo change of Sep 14th for
+ emitting a space after the return type of a fn.
+
+ Wed Oct 7 16:01:55 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-lex.c (readescape): No warning if digits in \x are all 0's.
+
+Tue Oct 20 06:50:28 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (force_operand): Clarify comment to say what it can return.
+ * integrate.c (copy_rtx_and_substitute): Don't assume force_operand
+ on an address returns a REG; it might be a SUBREG. Use force_reg.
+
+Tue Oct 20 04:54:01 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * tree.c (make_node, copy_node):
+ Don't assume node length is multiple of int.
+
+Mon Oct 19 18:14:56 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * genrecog.c (write_tree): For type SPLIT, check subroutine return
+ values for non-zero value not positive value.
+
+Mon Oct 19 16:11:04 1992 Michael Meissner (meissner@osf.org)
+
+ * c-typeck.c (print_table, scan_table): Add support for XPG4's %S
+ and %C formats for printing/reading wide characters. %lc and %ls too.
+
+Mon Oct 19 17:58:18 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * arm.c (output_epilogue): Restore sp's value if no frame pointer.
+
+ From Wilson:
+ * pa.h (WORD_SWITCH_TAKES_ARG): Delete sparc related cruft.
+
+Mon Oct 19 14:49:03 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * cp-parse.y (primary): Don't try building a CALL_EXPR or
+ converting types if $$ is an error_mark.
+
+Mon Oct 19 14:01:02 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * m88k.h (SECONDARY_INPUT_RELOAD_CLASS): Require a temporary for a
+ pic address with a large constant term.
+ * m88k.md (reload_insi): New pattern.
+ (addsi3 pattern for large constants): Delete. Causes reload trouble.
+ * m88k.c (emit_move_sequence): Add scratch register. All callers
+ changed.
+ (legitimize_address): Add scratch register. All callers changed
+ to pass zero instead of gen_reg_rtx result. Allocate another temp
+ register for -fPIC case. Use scratch register for pic cases with
+ a large constant term.
+
+ * m88k.h (FUNCTION_PROFILER_LENGTH, FUNCTION_BLOCK_PROFILER_LENGTH,
+ BLOCK_PROFILER_LENGTH, REG_PUSH_LENGTH, REG_POP_LENGTH): Added.
+ (ADJUST_INSN_LENGTH): Account for profiling code.
+
+Mon Oct 19 16:46:52 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (libobjc.a): Don't mkdir objc if dir exists.
+
+ * expr.c (store_field): If trying to sign-extend a constant,
+ use value_mode as the mode.
+
+Mon Oct 19 10:59:20 1992 Michael Meissner (meissner@osf.org)
+
+ * xm-umips.h (index): Define to be strchr.
+ (rindex): Define to be strrchr.
+
+ * mips-tdump.c (index, rindex): Undefine these, since the MIPS
+ include files have a field spelled index.
+
+Mon Oct 19 03:34:04 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (mostlyclean): Delete libobjc.a.
+ (libobjc.a): Create the objc subdir.
+
+Sun Oct 18 17:52:05 1992 Arne H. Juul (arnej@lise.unit.no)
+
+ * objc/Makefile: Add .SUFFIXES .m and .m.o rule to keep non-GNU
+ make happy.
+
+ * Makefile.in (libobjc.a): Remove libobjc.a in current directory
+ before attempting to hardlink it or make will fail in later stages.
+ (sublibobcj.a): Don't use $(MAKEFLAGS) for objc subdir stuff.
+
+Sun Oct 18 06:00:27 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * cse.c (canon_reg): Don't call validate_change if INSN is zero.
+
+Sun Oct 18 01:09:02 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * i860.h (PRINT_OPERAND): For `h', always use OPERAND_HIGH_ADJ_PART
+ even for integer constant addresses.
+
+ * final.c (output_addr_const): Always use FILE, not asm_out_file.
+
+ * cccp.c (collect_expansion): Don't add whitespace at end
+ if inside a string and not traditional.
+ (rescan): At end of string, if inside macro, always keep scanning.
+
+ * expr.c (store_field): If signed bitfield and want value, sign extend.
+
+Sat Oct 17 21:11:09 1992 H.J. Lu (hlu@yardbird.eecs.wsu.edu)
+
+ * Makefile.in (all.build): New rule for making gcc with a
+ cross-compiler.
+ (install.build): New target.
+ (line 271): Add `####build overrides'.
+ (gen*.o): Depend on hconfig.h, not config.h.
+ ($(HOST_PREFIX_1)rtl.o, $(HOST_PREFIX_1)print-rtl.o,
+ $(HOST_PREFIX_1)rtlanal.o, $(HOST_PREFIX_1)obstack.o,
+ $(HOST_PREFIX_1)malloc.o): Add final `h' to the regexp to replace.
+
+ * configure: If $host == $taget, but $host != $build, merge
+ `build-make' and emit `build = $build'.
+ * build-make: New file for making gcc with a cross-compiler.
+
+Sat Oct 17 19:24:31 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (process_init_constructor): When initializing a union,
+ handle the case of an empty init list.
+
+ * reload.c (find_reloads_address): Redo last change: copy the mem
+ in the same way it's usually done.
+
+ * Makefile.in (gcc.xtar): Fix typo in last change.
+ (mostlyclean): Don't use $(MAKEFLAGS) for objc subdir stuff.
+
+Sat Oct 17 19:15:16 1992 John Wroclawski (jtw@pmws.lcs.mit.edu)
+
+ * decstatn.h (SIZE_TYPE): Fix typo.
+
+Sat Oct 17 17:46:08 1992 Brendan Kehoe (brendan@mole.gnu.ai.mit.edu)
+
+ * cp-method.c: Don't try to include string.h or strings.h.
+ * cp-decl.c: Ditto.
+
+Sat Oct 17 13:50:49 1992 Fred Fish (fnf@fishpond.cygnus.com)
+
+ * fixinc.svr4 (string.h):
+ Remove #defines for other compiler's builtin functions.
+
+Sat Oct 17 00:39:30 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * protoize.c: Add #undef getopt after getopt.h.
+
+ * gstdarg.h, gvarargs.h (va_list) [__SVR4_2__]:
+ Don't set or test _VA_LIST.
+
+ * gstddef.h: Do nothing if _ANSI_STDDEF_H already defined.
+
+Fri Oct 16 11:39:06 1992 H.J. Lu (hlu@yardbird.eecs.wsu.edu)
+
+ * emit-rtl.c (gen_lowpart_common): Fix typo in last change.
+
+Fri Oct 16 22:35:15 1992 Eric Youngdale (youngdale@v6550d.nrl.navy.mil)
+
+ * make-cc1.com: Correct previous patch.
+
+Fri Oct 16 20:07:12 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc-actions.c (start_class):
+ For an INTERFACE_TYPE, push to permanent obstack.
+ (build_message_expr): Use TYPE_MAIN_VARIANT when comparing types.
+
+ * Makefile.in (libobjc.a): Don't use $(MAKEFLAGS).
+ Add braces around shell variable references.
+ (collect2): Delete file before linking it.
+ * objc/Makefile (all): Don't use $(MAKEFLAGS).
+ (VPATH): Get rid of ../ since srcdir now absolute.
+
+Fri Oct 16 14:23:25 1992 Michael Meissner (meissner@osf.org)
+
+ * decstatn.h (all defines): Protect all defines with an #ifndef,
+ to allow dec-osf1.h to selectively override macros.
+
+Fri Oct 16 10:44:47 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * Makefile.in (libobjc.a): Compute srcdir1 without changing
+ directories. Use srcdir1 to locate objc/Makefile. Put quotes
+ around all potential multi-word values. Recompute GCC_FOR_TARGET.
+ (sublibobjc.a): Use same text as libobjc.a.
+ (mostlyclean): Use $(MAKE) and srcdir1 for objc action.
+ * objc/Makefile (SUBDIR_INCLUDES): Don't use ../$(srcdir).
+ (all): Use $(MAKE).
+
+Fri Oct 16 04:16:36 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * function.c (find_fixup_replacement): Renamed from find_replacement.
+
+ * varasm.c (output_addressed_constants): Handle NON_LVALUE_EXPR.
+
+Fri Oct 16 02:25:17 1992 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.md (call define_expands): If TARGET_LONG_CALLS, then force
+ the address of the function into a register.
+ * pa.h (TARGET_SWITCHES): New switch "-mlong-calls".
+ * pa.c (call_operand_address): Only allow registers if
+ TARGET_LONG_CALLS.
+
+Fri Oct 16 00:21:57 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (libobjc.a): Get directories right, using shell vars
+ thisdir1, srcdir1. Put quotes around $(GCC_CFLAGS). Use $(MAKE).
+
+Thu Oct 15 17:07:18 1992 Mike Stump (mrs@hal.gnu.ai.mit.edu)
+
+ * configure, config.sub, config/elxsi.{c,h,md}, config/xm-elxsi.h,
+ config/x-elxsi: Add support for new 64 bit CPU, called Elxsi.
+
+Thu Oct 15 16:55:22 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.c (alpha_builtin_saveregs): Fix bug in last change.
+
+ * fold-const.c (distribute_bit_expr): Test for BIT_{AND,IOR}_EXPR.
+
+ * cse.c (cse_insn): Add missing call to apply_change_group.
+
+Thu Oct 15 15:09:45 1992 Michael Meissner (meissner@osf.org)
+
+ * t-mips (CCLIBFLAGS, LIBGCC2_CFLAGS): Delete, so that libgcc.a is
+ built with the -G 8 option, instead of -G 0, so that the linker
+ doesn't complain when linking in libg++.a.
+ * t-decstatn (CCLIBFLAGS, LIBGCC2_CFLAGS): Ditto.
+
+Thu Oct 15 14:30:25 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * mips-tfile.c (parse_def): Allow spaces in arguments for C++.
+ Correct test for null when searching for end of name.
+
+Thu Oct 15 11:55:51 1992 Tim Moore (moore@defmacro.cs.utah.edu)
+
+ * pa.c (compute_frame_size): Take an fregs_live parameter instead
+ of setting the static variable save_fregs.
+ (output_function_prologue): Initialize save_fregs to 0 and pass to
+ compute_frame_size.
+ * pa.h (INITIAL_FRAME_POINTER_OFFSET): Pass extra null parameter
+ to compute_frame_size.
+
+Thu Oct 15 08:40:07 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.h (TARGET_FPREGS): New flag.
+ (TARGET_SWITCHES): Remove temporary -mfp and add -msoft-float and
+ -mfp-regs.
+ (TARGET_DEFAULT): Set to -mfp-regs -mno-soft-float.
+ (CONDITIONAL_REGISTER_USAGE): Use TARGET_FPREGS.
+ (FUNCTION_VALUE, FUNCTION_ARG, LIBCALL_VALUE): Use integer registers
+ for FP items if -mno-fp-regs.
+ * alpha.c (alpha_builtin_saveregs): Store integer regs twice instead
+ of storing the FP regs if -mno-fp-regs.
+
+ * fold-const.c (fold): Add missing test in case when we
+ distribute a NOP_EXPR into a COND_EXPR and try to pull it back
+ out again.
+
+Thu Oct 15 08:11:00 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * fold-const.c (simple_operand_p): Don't regard global or static
+ variables as simple.
+ (fold_truthop): Only require the RHS to be simple.
+
+ * m88k.h (CPP_SPEC): Add -D__m88110__ when -m88110 is in effect,
+ similarly for -m88100.
+ * m88kdgux.h (CPP_SPEC): Ditto.
+ * m88kluna.h (CPP_PREDEFINES): Drop -Dmc88100.
+ (CPP_SPEC): Reproduce the predefine -Dmc88100 when -m88100 is in
+ effect. Otherwise, supply -D__mc881x0__ when -m881x0 is in effect.
+
+Thu Oct 15 02:09:49 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (get_inner_reference):
+ If flag_volatile, treat every INDIRECT_REF as volatile.
+
+ * collect2.c (main): If COLLECT_GCC is a relative name, use it anyway.
+
+ * x-next: New file.
+ * configure (m68k-next-*): Use that.
+
+ * Changes from NeXT:
+
+ * libgcc2.c [L_ctors] (__CTOR_LIST__, __DTOR_LIST__):
+ Initialize these default definitions if __NeXT__.
+
+ * gvarargs.h [__NeXT__]: Define _VA_LIST_ if _ANSI_STDARG_H_ was
+ defined; then define _ANSI_STDARG_H_.
+
+ * gstddef.h (_ANSI_STDDEF_H): Define, along with _STDDEF_H.
+
+ * next.h (INCLUDE_DEFAULTS): New macro.
+
+ * cp-method.c (index, rindex): Delete declarations.
+ (build_overload_value): Cast result of index.
+
+ * cccp.c (cplusplus_comments): New var.
+ (main): Set it according to options.
+ (rescan, handle_directive, skip_if_group, validate_else):
+ (skip_to_end_of_comment, macarg1, discard_comments):
+ Use cplusplus_comments to enable C++ comment syntax.
+
+Wed Oct 14 11:34:58 1992 Chip Salzenberg (chip@tct.com)
+
+ * libgcc2.c (__gcc_bcmp): Don't depend on signedness of `char'.
+
+Wed Oct 14 18:52:28 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sched.c (sched_note_set): Set subreg_p for anything except a
+ paradoxical subreg.
+
+ * configure (sparc-*-solaris2): Use xm-spc-sol2.h not xm-spcv4.h.
+
+ * reload.c (find_reloads): Don't let an operand have a numbered
+ constraint that makes it match itself.
+
+Wed Oct 14 10:38:31 1992 Tim Moore (moore@defmacro.cs.utah.edu)
+
+ * pa.md (sCC patterns): Comparison operator should have SImode,
+ not CCmode.
+ (indexed addressing mode patterns): New patterns to use indexed
+ addressing if possible.
+ * pa.c (output_and): Do handle (const_int 0) as an operand; it
+ seems to occur in unoptimized compilation.
+ * pa.h (REGNO_OK_FOR_FP_P): Logic bug.
+ * va-pa.h : When __GNUC__ == 1, don't include the gcc 1 varargs
+ file (va-hp9k8.h). Instead, the definitions are explicitly defined
+ here. This avoids multiple typedefs of va_list.
+ * xm-pa.h (HAVE_VPRINTF) Define in HPUX 8.0.
+
+ * pa.md (mulsi): Use the hardware multiply instruction, xmpyu, if
+ TARGET_SNAKE.
+ (umulsidi3): New pattern.
+ (reload_insi, reload_outsi, reload_indi, reload_outdi): New
+ patterns. These are needed because SImode and DImode pseudoregs
+ may be allocated (or reloaded) in floating point registers for
+ multiplication. That means that their addresses, which were
+ legitimate for SImode and DImode, aren't valid any more.
+ (movsi, movhi, movqi, movdf, movdi, movsf): Pass null scratch
+ operand to emit_move_sequence.
+ (fp SImode load and store patterns): Move before main movsi
+ pattern.
+ (fp DImode load and store patterns) New patterns.
+ (movhi, movqi patterns): Support moves to/from fp registers.
+ (movdf pattern): Ensure at least one operand is a register.
+ * pa.c (emit_move_sequence): Take reload scratch register
+ argument, deal with reloads of SImode and DImode mems into
+ floating point registers, handle function_label_operand moves.
+ (secondary_reload_class): A scratch register is needed if
+ reloading a function_label_operand address (probably doesn't
+ happen) or an SImode or DImode value into/out of a floating
+ point register.
+ * pa.h (reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS,
+ REG_CLASS_FROM_LETTER): Define a new register class
+ FP_OR_SNAKE_FP_REGS, used only be reload_{in,out}{si,di}.
+ (HARD_REGNO_MODE_OK): Allow all integer modes in Snake floating
+ point registers. QImode and HImode pseudoregs may end up there
+ when using xmpyu.
+
+ * pa.md (pic symbolic address pattern): New pattern.
+ (movsi, movdi patterns): Remove some * constraints from fp registers.
+ (pic label address pattern): Fix typo.
+ (function_label_operand patterns): New patterns for loading a
+ label address in HPUX 8.0.
+ * pa.c (finalize_pic): No real initialization is necessary for pic.
+ (output_function_prologue): Save r19, the pic offset table
+ register. If profiling, save and restore the structure value
+ return register (r28) around the call to mcount.
+ (hppa_encode_label, function_label_operand): New functions.
+ Record if a label is a code label so it can be treated specially
+ in HPUX 8.0.
+ * pa.h (TARGET_SHARED_LIBS): New flag. Generate code that can be
+ linked with HPUX 8.0 shared libraries.
+ (TARGET_SWITCHES): New flags: -mshared-libs and -mno-shared-libs.
+ (PIC_OFFSET_TABLE_REGNUM): This is really r19. The preliminary
+ docs from HP were wrong.
+ (ASM_DECLARE_FUNCTION_NAME): Specify "ENTRY" param in .EXPORT
+ directive.
+ (ENCODE_SECTION_INFO): Encode function labels.
+ (ASM_OUTPUT_LABELREF): Deal with function labels.
+ (ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP): Don't do anything for
+ now; their only use (saving stuff during profiling) interacts in a
+ wierd way with required assembler directives at the start of a
+ function. Instead, do the save and restore in the function
+ prologue.
+ (hppa_encode_label): Declare.
+ * pa-hpux.h, pa-ghpux.h (TARGET_DEFAULT): Link against shared
+ libraries.
+ (LINK_SPEC): Don't link against shared libraries if debugging or
+ profiling.
+ * pa1-hpux.h, pa1-ghpux,h (TARGET_DEFAULT): Link against shared
+ libraries.
+
+Wed Oct 14 10:17:49 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (gcc.xtar): Copy the objc subdir.
+ (mostlyclean): Run the mostlyclean target in the objc subdir.
+ (objc-runtime, libobjc.a, sublibobjc.a): New targets.
+ (objc, objective-c): Dep on objc-runtime.
+
+ * objc/*: New files.
+
+Wed Oct 14 07:17:19 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.md (smax, smin): Fix typo in output strings.
+
+ * a29k.c (const_16_operand, const_24_operand): Fix typo in declaration
+ of MODE.
+ (gpc_reg_or_immediate_operand, and_operand, add_operand): Likwise.
+
+Wed Oct 14 00:12:16 1992 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (RTX_COST): Fix spacing typo.
+
+Tue Oct 13 21:51:05 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * a29k.md (call, call_value): Don't use call_operand, since
+ checking for recursive calls at this point is not safe.
+
+Tue Oct 13 18:52:17 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * cp-type2.c (my_friendly_abort): Tell them to write to bug-g++.
+
+Tue Oct 13 18:16:12 1992 Chris Smith (csmith@convex.com)
+
+ * convex.h (P_tmpdir): define to use /tmp.
+ (RETURN_POPS_ARGS): correct definition to return size.
+ (ASM_IDENTIFY_GCC): output something between gcc2_compiled and
+ first function to keep gcc2_compiled out of assembler stabs.
+
+ * convex.md (adddi3, ordi3, xordi3): check sign of CONST_INT
+ operands before using as immediates; these insns are word only.
+ (ashrdi3): don't use negative shift counts.
+
+ * convex*.h (CPP_SPEC): define __NO_INLINE_STDLIB
+
+ * xm-convex.h: remove temporary workaround from OS 8.0.
+
+Tue Oct 13 14:10:15 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * cp-lex.c (check_newline): Verify that main_input_filename is
+ valid before using it.
+
+Tue Oct 13 19:08:54 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * a29k.c: Now includes reload.h.
+ (spec_reg_operand): Validate mode and know that some regs support
+ MODE_PARTIAL_INT and some MODE_INT.
+ (call_operand, reload_memory_operand, a29k_get_reloaded_address)
+ New functions.
+ (in_operand): Allow constants with MODE_PARTIAL_INT.
+ (out_operand): Allow special registers with any mode.
+ Any MEM a word or wider is valid.
+ (extend_operator): Deleted.
+ (secondary_reload_class): A pseudo is the same as memory; we need
+ BP_REGS for multi-word memory or for bytes and halfword if -mndw.
+ (print_operand): Delete %X; add %m.
+ (print_operand, case 'F'): Check for SYMBOL_REF.
+ * a29k.h (PROMOTE_MODE, ADJUST_COST): New macros.
+ (CALL_USED_REGISTERS): LR0 is call-used.
+ (HARD_REGNO_MODE_OK): Handle MODE_PARTIAL_INT and the special
+ registers that can only hold those modes.
+ (MODES_TIEABLE_P): Clean up and handle MODE_PARTIAL_INT modes.
+ (enum reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS): Add new
+ classes LR0_REGS, FC_REGS, and CR_REGS.
+ (REGNO_REG_CLASS, REG_CLASS_FROM_LETTER): Likewise.
+ (PREDICATE_CODES): Update for new and deleted predicates.
+ * a29k.md: Use GEN_INT when appropriate.
+ (define_attr type): New types for SQRT.
+ (call patterns): Use SCRATCH for LR0.
+ Use new predicate call_operand so that some integers can be
+ used as addresses; fix CALLI so it doesn't accept constant.
+ (EXBYTE, EXTHW, INBYTE, INHW): Use ZERO_EXTEND instead of AND
+ when combine will make it.
+ Use PSImode for BP value and don't reference BP explicitly.
+ Clean up define_expands for these operations.
+ (rotlsi3): Use PSImode pseudo for FC.
+ (sign_extend): Sign extension insns clobber BP.
+ ({load,store}_multiple): Use PSImode pseudo for CR.
+ (MTSR): Add pattern for TRUNCATE from SImode to PSImode.
+ (sqrtsf2, sqrtdf2, movpsi): New patterns.
+ (load/store bytes/halfword): Clean up to accept temporaries as
+ input and use PSImode when required.
+ (movhi, movqi): Allocate temporaries here.
+ (reload_inqi, reload_outqi, reload_inhi, reload_outhi): New
+ patterns.
+ (movdf, movdi, movti): Use SCRATCH for BP register.
+ (reload_{in,out}{df,di,ti}): New patterns.
+
+Tue Oct 13 16:52:33 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixinc.svr4 (sys/stream.h, sys/strsubr.h): Delete spurious `extern'
+ in various structure definitions.
+
+ * rtlanal.c (single_set): Fix typo in REG_UNUSED check.
+
+ * cse.c (simplify_binary_operation): Insure that folded >> extends
+ the sign even if the host bootstrap compiler doesn't.
+
+ * final.c (output_asm_insn): Advance over the = when processing %=.
+
+ * fixincludes (stdio.h): Fix va_list when preceeded by a *.
+
+Tue Oct 13 14:52:57 1992 Brendan Kehoe (brendan@mole.gnu.ai.mit.edu)
+
+ * spc-sol2.h (STARTFILE_SPEC): Add crtbegin.o.
+ (LIB_SPEC): Add crtend.o for running ctors/dtors.
+ * t-sol2 (EXTRA_PARTS): Add crtbegin.o and crtend.o for C++.
+ (FIXINCLUDES): Deleted.
+ * configure (sparc-*-solaris2*): Set fixincludes here.
+
+Tue Oct 13 20:15:45 1992 Eric Youngdale (youngdale@v6550d.nrl.navy.mil)
+
+ * make-cc1.com: Simplify extraction of YYEMPTY from cp-parse.c.
+ Generate c-parse.y, objc-parse.y from c-parse.in if required.
+ Pat Rankin did some of this.
+
+Tue Oct 13 14:06:45 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.md (in_branch_delay): Allow fpload and fpstore.
+
+ * collect2.c (main): Only install a signal handler for signals
+ that already have handlers.
+ (fork_execute): Don't ignore signals before calling do_wait.
+
+ * i960.md: Change 'f' constraint for dest to '*f' if it is not the
+ only alternative. Add '*f' dest constraints to all patterns where
+ it is valid but was previously missing.
+
+ * i960.h (OVERRIDE_OPTIONS): Enable function inlining.
+ * i960.c (g14_save_reg): Delete variable.
+ (i960_output_call_insn): Add two new parameters arg_pointer and
+ scratch_reg. Save/set/restore g14 if necessary.
+ (i960_expand_call): Delete function.
+ * i960.md (call, call_value): No longer call i960_expand_call,
+ instead call call_internal/call_value_internal pattern.
+ (call_internal, call_value_internal): Rewrite patterns to pass new
+ args to i960_output_call_insn.
+
+ * sparc.md (movstrsi+1): Add `+' to constraints for clobbered inputs.
+
+ * i960.c (i960_output_call_insn): Emit bx instead of b, callx
+ instead of callj.
+
+ * sparc.c (sparc_frw_output_function_prologue): Frame pointer base
+ must be same as for regular sparc code.
+
+Tue Oct 13 06:02:03 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * loop.c (loop_optimize): Verify that max_uid_for_loop is still
+ larger than the uid of any insn. Increase the number of exit
+ blocks from 4 to 32 per loop.
+ (find_and_verify_loops): Stop trying to relocate exit blocks when
+ allocating a new label would exceed max_uid_for_loop.
+
+ * combine.c (subst): Don't change a conditional branch into a
+ conditional move.
+
+ * m88k.md (ext shift patterns): No longer needed.
+
+ * m88k.c (mostly_false_jump): Recognize a sequence properly.
+
+Mon Oct 12 22:31:37 1992 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (LEGITIMIZE_ADDRESS): Fix typo.
+
+Tue Oct 13 00:14:09 1992 H Lu (hlu@eecs.wsu.edu)
+
+ * Makefile.in (install-common): Put - on cmd that handles protoize.
+ (gcc.o, cccp.o): Define TOOLDIR for the compilation.
+ (all HOST_PREFIX_1 targets): Fix typos.
+
+ * x-linux (cpp.a, linux.a, cc1.a, cc1plus.a, gcc.a): Targets deleted.
+ (LD, ALIBS, STANDARD_STARTFILE_PREFIX, GPLUSPLUS_INCLUDE_DIR):
+ Vars deleted.
+
+ * i386linux.h: Delete NO_JUMPTABLE conditional and contents.
+ (GPLUSPLUS_INCLUDE_DIR): Defined.
+ (STARTFILE_SPEC): Changed.
+
+ * gen*.c: Include hconfig.h, not config.h.
+
+Mon Oct 12 16:25:22 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure.bat, vmsconfig.com: Make hconfig.h.
+
+ * vax.h (PRINT_OPERAND): Detect `double' constants by DFmode,
+ since VOIDmode means an integer.
+
+ * mips.h (DEBUG_REGISTER_NAMES): New macro definition.
+ * print-rtl.c (reg_names):
+ Make it static. Use DEBUG_REGISTER_NAMES if that's defined.
+ * regclass.c (reg_names): Reinstate the definition here.
+
+ * fixinc.svr4: Delete excess fi in fixing stat.h.
+
+Mon Oct 12 08:10:37 1992 James Van Artsdalen (jrv@goldman.gnu.ai.mit.edu)
+
+ * Makefile.in (install-fixincludes): Only delete an existing
+ syslimits.h if we install limits.h over it.
+
+ * i386.h (PRINT_REG): Undo Oct 11 change.
+ (DEBUG_PRINT_REG): New macro, used from print-rtl.c.
+
+ * conditions.h (CC_NOT_SIGNED): New macro.
+ * final.c (alter_cond): If CC_NOT_SIGNED, convert signed
+ conditions to unsigned.
+
+ * i386.md (cmpstrM patterns): Compare strings of unsigned chars,
+ not strings of signed chars.
+
+Mon Oct 12 06:31:13 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): Save DEST of NI2PAT before calling
+ recog_for_combine, which might make it a PARALLEL.
+
+ * emit-rtl.c (gen_lowpart_common): Allow MODE_PARTIAL_INT where
+ MODE_INT is allowed.
+
+ * combine.c (try_combine): Properly call single_set when validating
+ the result of a define_split.
+
+Mon Oct 12 00:24:29 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * calls.c (calls_alloca): Don't look within DECL_INITIAL if it's 0.
+
+ * varasm.c (simplify_subtraction): New function.
+ * rtl.h (simplify_subtraction): Declared.
+ * final.c (output_addr_const): Call it.
+
+ * print-rtl.c (DEBUG_PRINT_REG): Renamed from PRINT_REG.
+ (print_rtx): Use DEBUG_PRINT_REG.
+
+Sun Oct 11 16:27:53 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu.edu)
+
+ * genrecog.c (merge_trees): When splitting, remember to clear DUPNO
+ in addition to the other things we can test.
+
+ * recog.c (general_operand, immediate_operand, const_double_operand):
+ Allow CONST_INT with MODE_PARTIAL_INT.
+ (nonmemory_operand): Likewise.
+
+Sun Oct 11 07:53:39 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * xm-i38v4.h,xm-aix386.h (USE_C_ALLOCA): New macro. Define if not
+ using GNU C's builtin alloca.
+
+ * i386.c (notice_update_cc): Only set CC_IN_80387 for float compares.
+
+ * i386.h (PRINT_REG): Make register name arrays static within this
+ macro.
+
+Sun Oct 11 01:41:06 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * jump.c (jump_optimize): Don't optimize jumps to store-flag insns
+ when BLKmode values are being compared.
+
+Sat Oct 10 16:51:08 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * print-rtl.c (print_rtx): Print hard reg name as well as number.
+ (PRINT_REG): New macro with default definition.
+ (reg_name): Moved here.
+ * regclass.c (reg_name): Deleted.
+
+Sat Oct 10 02:27:14 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386sco.h (TARGET_DEFAULT): New macro - don't make TARGET_IEEE_FP
+ default for SCO.
+
+Sat Oct 10 04:52:06 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * function.h (struct function): New fields const_rtx_hash_table,
+ const_rtx_sym_hash_table, first_pool, last_pool, pool_offset.
+ * function.c (pop_function_context, push_function_context):
+ Call {save,restore}_varasm_status.
+ * varasm.c: Include function.h.
+ (restore_varasm_status, save_varasm_status): New fns.
+ (init_const_rtx_hash_table): Allocate the hash tables in obstack.
+ (force_const_mem): Don't use CONST_DOUBLE_MEM for nested fns.
+ (clear_const_double_mem): Do nothing for nested fns.
+ * Makefile.in (varasm.o): Dep on function.h.
+
+Fri Oct 9 18:16:18 1992 Brendan Kehoe (brendan@mole.gnu.ai.mit.edu)
+
+ * cp-decl.c (duplicate_decls): Only find out if olddecl is a
+ friend after we know it's not a TREE_LIST.
+
+Fri Oct 9 18:10:19 1992 Jim Wilson (wilson@geech.gnu.ai.mit.edu)
+
+ * sparc.c (sparc_type_code): Return reasonable result for COMPLEX_TYPE.
+
+Fri Oct 9 14:33:26 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * reorg.c (start_of_epilogue_needs): New variable.
+ (mark_target_live_regs): Add in start_of_epilogue_needs when
+ NOTE_INSN_EPILOGUE_BEG is scanned.
+ (dbr_schedule): Compute start_of_epilogue_needs and update
+ end_of_function_needs to include sets by all instructions
+ following NOTE_INSN_EPILOGUE_BEG.
+
+ * m88k.md (return): Always available once reload has completed.
+ (epilogue): Use a return insn rather than an indirect jump.
+
+Fri Oct 9 12:36:54 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * spc-sol2.h (DBX_DEBUGGING_INFO): Defined.
+
+ * function.c (aggregate_value_p): Return 1 if regs we would use
+ are not all call-clobbered.
+
+ * stmt.c (POPSTACK): Pop discarded elts off all the stacks as we go.
+
+Fri Oct 9 07:30:14 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reorg.c (mark_target_live_regs): Fix bug in last change.
+
+ * combine.c (subst, case SUBREG): Don't make a new REG for
+ stack, frame, or arg pointer.
+ * emit-rtl.c (gen_lowpart_common, gen_highpart, operand_subword):
+ Likewise.
+
+ * local-alloc.c (optimize_reg_copy_1): Tighten up code to properly
+ handle the case when SRC or DEST is a multi-word hard register
+ and only some parts of the register are set or used. Also, avoid
+ updating register status for DEST if we can't do the optimization.
+
+ * jump.c (jump_optimize): Only use a REG as a target.
+
+ * alpha.c (alpha_builtin_saveregs): Don't use value of NREGS greater
+ than 6 when computing ARGSIZE.
+
+ * va-alpha.h (va_arg): Put parens around all uses of __VA arg.
+
+Thu Oct 8 18:45:00 1992 Arne H. Juul (arnej@lise.unit.no)
+
+ * Makefile.in (install-common-headers): added missing 'then'
+
+Thu Oct 8 15:52:22 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (SELECT_RTX_SECTION): Rename macro from obsolete name
+ SELECT_SECTION_MODE.
+
+ * i386rose.h (whole file): Remove #ifdef before #undef of macros.
+ (LEGITIMATE_CONSTANT_P): Define, so that when half-pic is on,
+ half-pic addresses are not considered legitimate.
+ (SELECT_RTX_SECTION): If putting a half-pic pointer that is
+ loaded, put the pointer into the data section, rather than the
+ readonly_data_section.
+ (SELECT_SECTION): Define.
+ (ASM_OUTPUT_DOUBLE): If not cross compiling, emit double as two
+ longs, otherwise emit .double directive.
+ (ASM_OUTPUT_FLOAT): If not cross compiling, emit float as long,
+ otherwise emit .float directive.
+ (perform_fixdfsi): Copy arg to memory variable.
+ (SIZE_TYPE): Define to be long unsigned int.
+ (PTRDIFF_TYPE): Define to be int.
+ (WCHAR_TYPE)L: Define to be unsigned int.
+
+ * i386.md (movsi): Remove obsolete half-pic code.
+ (call insns): For half-pic insns, force address into register.
+
+Thu Oct 8 14:22:05 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (install-common-headers): Fix dir in chmods for assert.h.
+
+ * va-i860.h (__savereg, va_arg): Put uses of __va in parens.
+
+ * vax.h (PRINT_OPERAND): Define new code, D.
+ * vax.md (movdi): Use D code for operand 1.
+
+Thu Oct 8 13:23:25 1992 Jeffrey A. Law (law@mole.gnu.ai.mit.edu)
+
+ * pa.md (fp_alu function unit, case fpcc): Fpcc instructions use
+ the fpalu unit. In the most common case their result will be used
+ in a ftest instruction. Minimum distance between the fcmp and
+ ftest instruction is 4.
+
+Thu Oct 8 06:41:15 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * function.c (assign_parms): Provide a safe value for
+ DECL_INCOMING_RTL in case of syntax errors.
+
+ * dwarfout.c (dwarfout_init, dwarfout_finish): Don't output labels
+ or .debug_aranges entries for .data1 and .rodata1 as these
+ sections aren't currently used.
+
+Thu Oct 8 04:44:17 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reorg.c (mark_target_live_regs): Look at USE insns made by
+ update_block when scanning forward past target.
+ (mark_target_live_regs, dbr_schedule): Use GET_RTX_CLASS.
+
+ * cse.c (PATHLENGH): Change from 20 to 10 to speed up compilations.
+
+Thu Oct 8 03:07:33 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fold-const.c (invert_truthvalue): Never alter ARG.
+
+ * Makefile.in (TAGS): Exclude =*.[chy] from tags table.
+
+ * c-lex.c (yylex): For floats, use REAL_VALUES_LESS to distinguish
+ underflow from overflow. Delete special case for 0.0.
+
+Wed Oct 7 16:25:19 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * dwarfout.c (dwarfout_{begin,end}_function): New functions.
+ (body_{begin,end}_attribute): New functions.
+ (dwarf_attr_name): Print AT_body_begin and AT_body_end.
+ (output_{local,global}_subroutine_die): Output the new attributes.
+ * dwarf.h (enum dwarf_attribute): Add At_body_begin and AT_body_end.
+ * final.c (final_scan_insn): Call dwarfout_begin_function.
+ (final_end_function): Call dwarfout_end_function.
+
+ * m88k.h (FASTEST_ALIGNMENT): Define as 8 for -m88110 otherwise 4.
+ (CONSTANT_ALIGNMENT, DATA_ALIGNMENT): Base on FASTEST_ALIGNMENT.
+ * m88k.md (movstrsi): No predicate is needed for the source or
+ destination.
+ * m88k.c (best_from_align): Add a target processor dimension for
+ -m88000, -m88110, and -m88100.
+ (expand_block_move): Choose method and limits based on -m88xxx option.
+ (block_move_no_loop): Extend to allow DImode.
+ * m88k-move.sh: Add the modules moveDI96x and moveDI41x through
+ moveDI47x.
+ * t-m88k, t-m88kluna, t-m88ksvr4: New modules added to MOVE_ASM.
+
+ * m88k.c (output_call): Use different syntax for GAS.
+
+ * m88k.h (READONLY_DATA_SECTION): Don't override svr4.h
+ (ASM_OUTPUT_CASE_LABEL): For svr4, use .rodata.
+
+Wed Oct 7 15:47:19 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure (i486-ncr-sysv4): Use i386v4.h.
+ (i386-*-sysv4, i386-*-linux, i386-*-sysv): Handle 486 too.
+ (i486-*-sysv4, i486-*-linux): Deleted.
+ * i486v4.h, i486linux.h: Files deleted.
+
+Wed Oct 7 12:40:00 PDT 1992 Ron Guilmette (rfg at netcom.com)
+
+ * populate (progname): Just the basename of $0 please.
+ (target_dir): Use abs_target_dir and rel_target_dir for clarity.
+ (source_dir): Use abs_source_dir and rel_source_dir for clarity.
+ (*): List input and output dirs on startup.
+ (*): Don't be so verbose; Don't echo names of output dirs/files as
+ they are created.
+
+ * fixinc.svr4 (<sys/signal.h>): Fix types of SIG_DFL, SIG_ERR,
+ SIG_IGN, and SIG_HOLD.
+ (<sys/stat.h>): Turn definitions of stat, lstat, fstat, and mknod
+ into ANSI syntax and add __ to variables used.
+
+ * c-parse.in (component_decl_list): Do pedwarn for missing semicolon
+ after last field decl.
+
+Wed Oct 7 09:49:34 1992 Michael Meissner (meissner@osf.org)
+
+ * decstatn.h (LINK_SPEC): Don't define if it is already defined,
+ ie dec-osf1.h has included decstatn.h.
+
+ * dec-osf1.h (MACHINE_TYPE): Redefine to say DEC OSF/1 instead of
+ ultrix.
+
+Wed Oct 7 03:50:11 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure (target_cpu_default): Var renamed from target_default.
+ Set it to 2, for a 486. Define TARGET_CPU_DEFAULT macro.
+
+ * i386.h (TARGET_CPU_DEFAULT): Add default definition.
+ (TARGET_SWITCHES): Include that in the default.
+
+ * toplev.c (main): Recover correctly from invalid -Wid-clash option.
+
+ * cccp.c (finclude): Set fp->buf earlier, so it's freed on error.
+
+ * Makefile.in (install-common-headers): Avoid ! operator, for assert.h.
+
+Tue Oct 6 20:21:21 1992 Jim Wilson (wilson@geech.gnu.ai.mit.edu)
+
+ * unroll.c (copy_loop_body, JUMP_INSN case): Delete abort in the
+ code for setting the JUMP_LABEL field.
+
+Tue Oct 6 19:29:19 1992 Brendan Kehoe (brendan@mole.gnu.ai.mit.edu)
+
+ * cp-call.c (build_overload_call_real): If `functions' is an
+ ADDR_EXPR (as with operator new and delete), give the name of its
+ argument as the error fn.
+
+Tue Oct 6 14:15:15 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure: Correct conditional in setting build_xm_file.
+
+ * function.c (get_first_block_beg): New function.
+
+ * cross-make (assertdir): Override usual definition.
+ * Makefile.in (install-common-headers): chmod assert.h in proper dir.
+ Use $(assertdir).
+ (assertdir): New variable.
+ (install-dir): Create dir $(includedir).
+ (includedir): Make this /usr/local/include.
+
+Tue Oct 6 12:05:35 1992 Jeffrey A. Law (law@mole.gnu.ai.mit.edu)
+
+ * pa.md (memory function unit, load case): Loads take two cycles,
+ not one.
+
+Tue Oct 6 07:56:05 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * pa.md (adddi3): Fix typo.
+
+Tue Oct 6 04:03:40 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * m68k.c (floating_exact_log2, standard_68881_constant_p):
+ (standard_sun_fpa_constant_p): Use REAL_VALUE_FROM_CONST_DOUBLE.
+ (print_operand): Likewise.
+
+Mon Oct 5 18:39:29 1992 Brendan Kehoe (brendan@mole.gnu.ai.mit.edu)
+
+ * tree.h (TREE_VIA_PROTECTED): Set protected_flag, not static_flag.
+
+Mon Oct 5 18:27:08 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in ($(srcdir)/INSTALL): Add -D INSTALLONLY.
+
+Mon Oct 5 14:46:08 1992 Brendan Kehoe (brendan@mole.gnu.ai.mit.edu)
+
+ * cp-parse.y (unary_expr): Use the `new' rule when looking for
+ something like `new(foo) char[10]'.
+
+ * cp-decl.c (grokparms): Don't call digest_init on default args.
+
+Mon Oct 5 02:21:06 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload1.c (allocate_reload_reg): Always check for asm
+ on failure instead of simply aborting.
+
+ * optabs.c (init_optabs): Use cabs as the only libcall for abs.
+
+Mon Oct 5 03:10:14 1992 Mark Eichin (eichin at tweedledumber.cygnus.com)
+
+ * c++ (numargs): $# was used after set was called; instead, save
+ $# in $numargs and use that value instead.
+
+Sun Oct 4 12:34:00 PDT 1992 Ron Guilmette (rfg at netcom.com)
+
+ * dwarfout.c (hard-reg-set.h): Included to get decl of `reg_names'.
+ (PRINT_REG): Default definition added.
+ (dwarf_last_decl): Variable declaration added.
+ (output_reg_number): New function; handle -fverbose-asm reg printing.
+ (output_mem_loc_descriptor, output_loc_descriptor): Call it.
+ (output_decl): Set `dwarf_last_decl' each time this fn is called.
+ * i386.h (hi_reg_name, qi_reg_name, qi_high_reg_name): Declared.
+ (PRINT_REG): Definition moved from i386.c.
+ * i386.c (hi_reg_name, qi_reg_name, qi_high_reg_name): Not static.
+ (PRINT_REG): Definition moved to i386.h.
+
+Sun Oct 4 00:53:37 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (shadow_tag_warned): Use pedwarn for useless keyword.
+
+ * c-lex.c (readescape): No warning if digits in \x are all 0's.
+
+Sat Oct 3 14:37:39 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * optabs.c (expand_complex_abs): New function.
+ * expr.h (expand_complex_abs): Add declaration.
+
+Sat Oct 3 07:29:09 1992 Michael Meissner (meissner@osf.org)
+
+ * configure (mips-dec-osf1): Use x-dec-osf1 instead of x-decstatn.
+
+ * x-dec-osf1 (new file): Like x-decstatn, except that INSTALL is
+ installbsd -c.
+
+Sat Oct 3 05:04:43 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * toplev.c (rest_of_decl_compilation): Don't call
+ dwarfout_file_scope_decl as this causes duplicates.
+
+Sat Oct 3 01:35:23 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * explow.c (allocate_dynamic_stack_space) [MUST_ALIGN]:
+ Always add to size, always round up to STACK_BOUNDARY,
+ always round the address.
+
+ * rtl.h (gen_realpart, gen_imagpart): Declared.
+
+Fri Oct 2 20:03:53 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * emit-rtl.c (gen_realpart, gen_imagpart): New functions.
+ * optabs.c (expand_unop, expand_binop): Use them.
+ * expr.c (expand_expr): Use them.
+
+ * cccp.c (main): Handle -U before -D (and -A).
+
+ * assert.h: Add magic comment at beginning.
+ * Makefile.in (includedir): New variable.
+ (USER_H): assert.h removed from value.
+ (install-common-headers): Install assert.h separately, in includedir,
+ but not if file exists and lacks the magic comment.
+
+ * reload1.c (reload): Move test for failure to find any group
+ to after the loop over i. Also check that all the regnos fit
+ below FIRST_PSEUDO_REGISTER.
+
+ * expr.c (expand_expr):
+ For ABS_EXPR, give expand_unop the operand's mode.
+
+Fri Oct 2 14:58:06 PDT 1992 Ron Guilmette (rfg at netcom.com)
+
+ * i386v4.h (DBX_REGISTER_NUMBER): Don't abort here on pseudo-regs.
+ * dwarfout.c (output_mem_loc_descriptor, output_loc_descriptor):
+ Catch cases of bogus DECL_RTL values involving pseudo-regs (for all
+ target systems) and print an annoying message if we ever see such a
+ case.
+
+Thu Oct 1 17:23:08 1992 Michael Meissner (meissner@osf.org)
+
+ * mips-tfile.c (various): Rename some of the index variables and
+ fields to indx, so that it doesn't conflict with the BSD
+ index function, which may be #define'd to strchr. However, the
+ MIPS symbol table has a field called index, so #undef index and
+ rindex, and write our own functions local_index and local_rindex.
+
+ * mips-bsd.h (CPP_PREDEFINES): Add single underscore in front of
+ each of the defines, for RISC-OS 5.0 compatibility.
+
+ * mips-sysv.h (CPP_PREDEFINES): Add single underscore in front of
+ each of the defines, for RISC-OS 5.0 compatibility.
+
+ * mips-svr4.h (CPP_PREDEFINES): Add single underscore in front of
+ each of the defines, for RISC-OS 5.0 compatibility.
+
+ * mips.h (CPP_PREDEFINES): Add single underscore in front of each
+ of the defines, for RISC-OS 5.0 compatibility.
+
+ * mips.c (override_options): Only call setvbuf to make stderr line
+ buffered for -mstats on Ultrix, and OSF/1.
+
+Thu Oct 1 15:18:55 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * reload1.c (emit_reload_insns): Add a case to handle
+ SECONDARY_MEMORY_NEEDED in the SECONDARY_OUTPUT_RELOAD_CLASS code.
+ * sparc.h (SECONDARY_INPUT_RELOAD_CLASS): Also need a temp reg
+ when loading HImode and QImode values from memory to FP_REGS.
+ (SECONDARY_OUTPUT_RELOAD_CLASS): New macro. Define this to handle
+ HImode and QImode stores from FP_REGS to memory similar to above.
+
+Thu Oct 1 13:36:52 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (rescan): If traditional, recognize # only at bol.
+
+ * expr.c (expand_expr): Just return the lowpart or highpart.
+
+ * configure (i386-*-linux, i486-*-linux): New alternatives.
+ * i386linux.h, i486linux.h, xm-linux.h: New files.
+
+ * optabs.c (expand_unop): Handle complex negate and abs val.
+ (init_optabs): Set up libcalls for complex abs.
+ (init_complex_libcalls): New function.
+
+Thu Oct 1 22:58:45 1992 Eric Youngdale (youngdale@v6550d.nrl.navy.mil)
+
+ * make-cc1.com: Extract line containing "#define YYEMPTY" from
+ cp-parse.c, and append to cp-parse.h (a la Makefile.in).
+
+ * cccp.c (main) [VMS]: Use .obj, not .o, in dependencies output.
+
+Thu Oct 1 17:15:49 1992 Chip Salzenberg (chip@tct.com)
+
+ * c-common.c (declare_function_name): __FUNC__ variables
+ are compiler-created, so set DECL_SOURCE_LINE to zero.
+ * c-decl.c (pushdecl): Internally generated vars can be
+ detected with DECL_SOURCE_LINE of zero, not DECL_IGNORED_P.
+
+Thu Oct 1 13:07:21 1992 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.c (emit_move_sequence): When making a reference to the data
+ space before reload, emit an insn sequence which is much more
+ likely to create "addil" instructions rather than "ldil; add"
+ sequences. Doing so greatly reduces the chance of running into a
+ HPUX linker bug when compiling kernels.
+
+ * pa.h (TARGET_KERNEL): New switch "-mkernel" which forces gcc to
+ avoid "ldil; add" sequences when %r29 and instead generate "addil"
+ sequences. This avoids a HPUX linker bug when compiling kernels.
+ * pa.md (add high part and dp register): Split into two patterns,
+ one for normal code, one for kernels. Kernel version only allows
+ "r1" as the destination register.
+
+ * pa.h (LEGITIMIZE_ADDRESS, SYMBOL_REF case): Emit a sequence
+ which will cause "addil" instructions to be emitted instead of
+ "ldil; add" sequences.
+
+Thu Oct 1 01:09:05 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-parse.in, cond.awk: New files.
+ * Makefile.in (c-parse.y, objc-parse.y): Construct from c-parse.in.
+ (gcc.xtar): Depend on c-parse.y, objc-parse.y.
+ (realclean): Delete c-parse.y, objc-parse.y.
+
+ * explow.c (allocate_dynamic_stack_space): If STACK_DYNAMIC_OFFSET
+ or STACK_POINTER_OFFSET, always round address up to BIGGEST_ALIGNMENT.
+
+ * gstddef.h: If _ANSI_H_, undef _PTRDIFF_T_, _SIZE_T_, _WCHAR_T.
+
+ * gvarargs.h: In the first part (instead of va-*.h), define
+ __gnuc_va_list, as in gstdarg.h. Always use __gunc_va_list
+ as basis for defining va_list.
+ Move interaction with BSD-NET2 down to where va_list itself is defined.
+
+ * cccp.c (do_include): Delete unreachable goto after '"' case.
+
+Thu Oct 1 16:57:22 1992 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
+
+ * dpx2g.h (NO_DOLLAR_IN_LABEL): Undef because gas understands dollars
+ in labels and gdb expects them if configured for gas.
+ (STARTFILE_SPEC): Include huge.o to be compatible with native cc.
+ (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR):
+ (CTOR_LISTS_DEFINED_EXTERNALLY, DO_GLOBAL_DTORS_BODY):
+ (STARTFILE_SPEC): Conditionally redefine for a collectless version
+ of gcc if USE_COLLECT2 is not defined.
+
+ * dpx2.ifile: New ld command file to support not using collect2.
+
+Wed Sep 30 17:08:32 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * libgcc2.c (__eprintf): Do nothing if inhibit_eprintf is defined.
+
+ * pbd.h, spc-sol2.h, tower.h (NO_UNDERSCORES): Deleted.
+
+ * Makefile.in (install-fixincludes): rm syslimits.h before installing.
+ Install it with cp. Add an else-part to the if that installs it.
+
+ * c-decl.c (start_enum): Push obstacks, switch to permanent if global.
+ (finish_enum): Pop obstacks.
+ (store_parm_decls): When clearing ->names, clear out the values
+ from the identifiers, restore shadowed values, and clear ->shadowed.
+
+ * c-decl.c (grokdeclarator): Don't warn of const or volatile function
+ in a system header file.
+
+ * sdbout.c: Don't use system syms.h on hpux.
+
+ * cccp.c (do_xifdef): Skip all kinds of whitespace, in bof test.
+
+Wed Sep 30 15:09:10 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.md (orcc peephole): Don't accept FP reg for operand 0.
+
+Wed Sep 30 00:47:48 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gstdarg.h, gvarargs.h: Use <...> to include va-*.h.
+
+ * c-decl.c (start_struct): Push the obstacks.
+ Switch to permanent if at top level.
+ (finish_struct): Pop them.
+
+ * c-decl.c (store_parm_decls): If we have (erroneously) a prototype
+ and old-style parm decls, throw away the old-style parm decls.
+
+ * configure: Default $build after $host. Canonicalize all three
+ config names before the main dispatch and save in $canon_host, etc.
+ Write these into config.status and on terminal at the end.
+
+Tue Sep 29 18:41:54 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * unroll.c (find_splittable_givs): recog_memoized failure return
+ is -1 not 0.
+
+Tue Sep 29 22:19:48 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * config.sub (os handling): Recognize `linux' as a valid os.
+
+Tue Sep 29 16:05:47 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * limitx.h: Use <...> in #include.
+
+ * Makefile.in (ENQUIRE_CFLAGS): Remove -DNO_SC.
+
+Tue Sep 29 10:14:27 1992 Richard Kenner (kenner@.vlsi1.ultra.nyu.edu)
+
+ * optabs.c (expand_binop): Convert X - C to X + (-C).
+
+Mon Sep 28 22:44:17 1992 Jim Wilson (wilson@cygnus.com)
+
+ * reload.c (find_reloads_address): If tem != ad, then create a new
+ mem to hold it and store it back into memrefloc.
+
+Mon Sep 28 10:44:55 1992 Chip Salzenberg (chip@tct.com)
+
+ * regclass.c: Fix comment syntax after #endif.
+
+Mon Sep 28 17:15:22 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gstdarg.h (va_arg, va_start): Explicitly cast to __gnuc_va_alist.
+
+Mon Sep 28 17:12:04 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * unroll.c (copy_loop_body, JUMP_INSN case): When invert jump
+ insn, must first construct new insn before trying to invert it,
+ so that validate_change will work properly.
+
+ * unroll.c (find_splittable_givs): Pass mem_mode not mode to
+ memory_address_p.
+
+ * unroll.c (copy_loop_body, JUMP_INSN case): When setting
+ JUMP_LABEL field, verify that what we think is a label actually
+ is. If it isn't then map the old JUMP_LABEL to find the new one.
+
+ * sparc.md (orcc peephole): Don't allow FP regs to match pattern.
+
+ * i960.md (indirect_jump): Use bx instead of b*, and accept any
+ address_operand instead of just a register operand.
+
+ * i960.c (i960_round_tree): Correct conversion of bits to bytes to
+ round up to nearest byte.
+ (i960_round_align): Likewise.
+
+Mon Sep 28 15:54:18 1992 Michael Meissner (meissner@osf.org)
+
+ * dec-osf1.h (LINK_SPEC): Fix typo.
+
+Mon Sep 28 08:15:02 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rs6000.md (subsi3): Remove last change.
+ (allocate_stack): Go back to calling subsi3.
+
+Mon Sep 28 02:41:32 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * optabs.c (expand_binop): Use get_insns, not gen_sequence.
+
+ * c-typeck.c (build_unary_op): Address of nested fcn isn't constant.
+
+ * libgcc2.c (__builtin_new): Avoid passing 0 to malloc.
+
+ * m68k.md (indirect_jump): Use address_operand as predicate.
+
+ * c-decl.c (finish_decl): Do the pop_obstacks sooner, when it's
+ time to start allocating in the ambient context's obstack.
+ Don't call permanent_allocation unless got back to permanent obstack.
+
+Sun Sep 27 13:06:19 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (assign_parms): If PROMOTE_FUNCTION_ARGS is defined,
+ see if the incoming register should be used in a wider mode.
+ (expand_function_start): Likewise for return value if
+ PROMOTE_FUNCTION_RETURN is defined.
+ * calls.c (struct arg_data): New field unsignedp.
+ (expand_call): Handle PROMOTE_FUNCTION_ARGS and
+ PROMOTE_FUNCTION_RETURN.
+
+ * alpha.h (FUNCTION_VALUE): Promote mode for return value.
+
+ * alpha.h (BYTE_LOADS_SIGN_EXTEND): Define.
+
+ * rs6000.md (subsi3): Don't bother calling negate_rtx for constant;
+ we shouldn't be called with a constant.
+ (maskir patterns): Don't mention an operand before it is used;
+ use operand number 1 for operand with '0' constraint.
+ (allocate_stack): Use reg_or_short_operand for predicate of
+ allocation amount; use negate_rtx and always make a PLUS.
+
+ * romp.h (EXTRA_CONSTRAINT, case 'Q'): Check for MEM instead of
+ calling memory_operand.
+ (SHIFT_COUNT_TRUNCATED): No longer define this.
+
+Sat Sep 26 18:14:15 1992 Michael Meissner (meissner@osf.org)
+
+ * config.sub (os handling): Recognize riscos as an operating
+ system.
+
+ * configure (dec-osf1): Use x-decstatn for xmake_file.
+ (mips computers): Handle RISC-OS 5 vs. RISC-OS 4 configuration
+ changes -- RISC-OS 5. passes -non_shared by default.
+
+ * mips-5.h (new file): RISC-OS rev 5 config file.
+ * mips-5bsd.h (new file): RISC-OS rev 5, bsd 4.3 config file.
+ * mips-5g4.h (new file): RISC-OS rev 5, svr4 + stabs config file.
+ * mips-5gbsd.h (new file): RISC-OS rev 5, bsd 4.3 + stabs config file.
+ * mips-5gdb.h (new file): RISC-OS rev 5 + stabs config file.
+ * mips-5gsysv.h (new file): RISC-OS rev 5 svr3 + stabs config file.
+ * mips-5svr4.h (new file): RISC-OS rev 5 svr4 + stabs config file.
+ * mips-5sysv.h (new file): RISC-OS rev 5 svr3 config file.
+
+ * dec-osf1.h (LINK_SPEC): Pass -non_shared to linker unless
+ -shared was passed.
+ (SIZE_TYPE): Define as long unsigned int.
+ (PTRDIFF_TYPE): Define as int.
+ (WCHAR_TYPE_SIZE): Define as SHORT_TYPE_SIZE.
+
+ * decrose.h (MACHINE_TYPE): Shorten verbage.
+
+ * i386rose.h (TARGET_VERSION): Print appropriate information.
+
+ * xm-mips.h (HAVE_VFPRINTF, HAVE_PUTENV): Define on DEC OSF/1.
+
+ * mips.c (siginfo): Print just current filename, and function
+ being compiled.
+
+ * mips-tfile.c (Size_t): Use long unsigned on OSF/1.
+ (toplevel): Don't define rindex and index on OSF/1.
+
+Sat Sep 26 17:46:57 1992 Torbjorn Granlund (tege@jupiter.sics.se)
+
+ * arm.md (comment before extendhisi2): Remove the lie.
+ (zero_extendhisi2): Rewrite to work if op0 == op1. Use
+ gen_lowpart in preparation code.
+ (extendqisi2, extendhisi2): Likewise.
+ (extendqihi2): Expand.
+
+ * arm.md (restorehi): Rewrite for correctness, efficiency, and
+ clarity. Avoid generating insns involving truncate. Generate
+ needed pseudos in preparation statements.
+ (storehi): Likewise.
+ (storeinthi): Likewise.
+ (movhi): Call gen_storehi, gen_restorehi, gen_storeinthi according
+ their new definitions. Use force_reg to put address in register.
+
+ * m68k.md (indirect_jump): Use %a0 for output, and p for constraint.
+
+Sat Sep 26 02:42:42 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload1.c (eliminate_regs_in_insn): Rerecognize if move insn
+ becomes a non-move.
+
+ * Makefile.in (install-fixincludes):
+ Use - when making syslimits.h; fix if-statement syntax.
+
+ * jump.c (jump_optimize): When handling dispatch table that always
+ goes to the same place, verify previous insn exists.
+
+ * c-typeck.c (common_type): Renable code to merge qualifiers
+ given two pointers to compatible types.
+
+Sat Sep 26 12:02:38 PDT 1992 Ron Guilmette (rfg at netocm.com)
+
+ * dwarfout.c (location_attribute): If DECL_RTL looks like (MEM pseudo),
+ treat that variable as optimized away.
+
+Fri Sep 25 19:48:46 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (explicit_flag_signed_bitfields): New variable.
+ (c_decode_option): Set that for -f[un]signed-bitfields.
+ (grokdeclarator): If that's set, and -fsigned-bitfields,
+ disregard -traditional when handling bitfield signedness.
+
+ * configure: Handle --build option. Make link hconfig.h.
+ * Makefile.in: In the targets such as $(HOST_PREFIX_1)rtl.o,
+ use sed to make them include hconfig.h instead of config.h.
+ (distclean): Add command to delete hconfig.h.
+
+Fri Sep 25 19:56:35 1992 Brendan Kehoe (brendan@mole.gnu.ai.mit.edu)
+
+ * cp-search.c (compute_visibility): Don't mess with the context.
+
+ * cp-decl.c (grokdeclarator): Return value from do_friend
+ properly; this shouldn't have gone in yet.
+
+Fri Sep 25 02:23:51 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (initializer_constant_valid_p): Really use endtype.
+
+ * cccp.c (do_include): "Concatenate" multiple "strings" in #include.
+
+ * vmsconfig.com: Renamed from configure.com.
+
+ * next.h (CPP_PREDEFINES): Define __ARCHITECTURE__.
+
+ * dbxout.c (dbxout_symbol): For anonymous enum, output type anyway.
+
+Fri Sep 25 01:33:36 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * function.h (struct function): Add epilogue_delay_list field.
+ * function.c (push_function_context): Save epilogue_delay_list.
+ (pop_function_context): Restore epilogue_delay_list.
+
+ * sparc.md (nonlocal_goto): Force operands[0] to be a register.
+
+ * va-sparc.h (va_arg): Add 3 more (void *) casts to avoid warnings
+ with -Wcast-align.
+
+ * sparc.c (SF_MODES): Accept all single word or smaller integer
+ modes not just SImode. These are needed for fix/float conversions.
+
+ * sched.c (sched_analyze_2, PRE_DEC case): Call sched_analyze_2 in
+ addition to sched_analyze_1.
+
+ * va-i960.h (va_start): Must access anonymous arg as offset from
+ start of argument block.
+
+ * i960.md (movdi, movti, movdf, movtf): Make store zero to memory
+ a separate case, only accept offsettable memory addresses, and call
+ adj_offsettable_operand to calculate subword addresses.
+
+ * i960.c (i960_output_ldconst): Pass missing xoperands argument to
+ output_asm_insn call.
+
+ * a29k.md (movti): Split CONST_INTs into 4 moves, and force all
+ other constants to memory.
+
+Thu Sep 24 21:51:46 1992 Brendan Kehoe (brendan@mole.gnu.ai.mit.edu)
+
+ Complete Cygnus<-->FSF merge.
+
+ Thu Sep 24 17:05:27 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * cp-decl.c (pushdecl): Use a friendly abort rather than an assert.
+ (grokparms): Pass whether init is set or not for the initialized
+ parameter to grokdeclarator.
+
+ Wed Sep 23 22:09:44 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-class.c (finish_struct), cp-decl2.c (warn_nonvdtor),
+ cp-tree.c (layout_basetypes), cp-tree.h (warn_nonvdtor): Re-enable
+ warnings for non-virtual destructors in some situations.
+
+ Wed Sep 23 15:42:33 1992 Mike Stump (mrs@cygnus.com)
+
+ Wed Sep 23 16:31:27 1992 Michael Meissner (meissner@osf.org)
+
+ * cp-decl.c (duplicate_decls): Cast bcopy arguments to char * to
+ avoid warning on OSF/1.
+
+ Wed Sep 23 11:36:44 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * cp-decl.c (start_method): Give the name of the class if a method's
+ being defined again, rather than say "aggregate scope".
+ * cp-decl2.c (grokfield, grokbitfield, groktypefield): Ditto.
+
+ Tue Sep 1 22:55:59 1992 Paul Eggert (eggert@twinsun.com)
+
+ * cp-cvt.c (convert_to_integer): Prefer unsigned
+ arithmetic if the output type is unsigned and is no more precise than
+ the computation type. This avoids unnecessary sign extension.
+
+ Tue Sep 15 20:26:18 1992 John F Carr (jfc at Athena.MIT.EDU)
+
+ * cp-pt.c (tsubst): Don't call layout_type near start of function
+ with T. const and volatile attributes don't affect the memory
+ structure of the type, and T may not yet be a valid argument for
+ layout_type (for example, if it is an uninstantiated template).
+ Individual switch cases will call layout_type if necessary.
+
+ Mon Sep 21 15:59:22 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * cp-decl.c (pushdecl): Check if DECL_SOURCE_LINE is non-zero, not
+ if DECL_IGNORED_P is set, when checking for shadowing. We no longer
+ need DECL_IGNORED_P on builtin types.
+ (record_builtin_type): Don't set DECL_IGNORED_P for a builtin type.
+
+ * cp-decl.c (start_decl): When working with virtual functions,
+ always use the node's DECL_CLASS_CONTEXT.
+ * cp-method.c (hack_identifier): Ditto.
+ * cp-search.c (compute_visibility): Ditto.
+
+ * cp-decl.c (grokdeclarator): Don't allow a member to be declared
+ extern.
+
+ * cp-decl.c (grokdeclarator): Return a void_type_node if we're
+ looking at a friend (even after calling do_friend).
+ (pushdecl): Disable some code that's untested and
+ doesn't necessarily help DWARF right now.
+ (finish_function): Always emit debugging info for the
+ return type of a function.
+ (pushdecl): Don't change the DECL_CONTEXT of virtual
+ methods.
+ (finish_enum): Always output debugging info for enums.
+ (grokdeclarator): It's an error if we're doing an init of an extern
+ at the top level. If we are at the top level, just warn.
+
+ * cp-typeck.c (comp_target_parms): Check if strict is non-zero, not
+ just > 0.
+ (build_function_call_real): Don't return an error-mark node when
+ they call "main" from within the fn, it's only a pedantic warning.
+ (pointer_int_sum): Reword warning when using a ptr-to-mem in arith.
+
+ * cp-tree.c (layout_basetypes): Make record_align and const_size
+ unsigned.
+
+ Mon Sep 21 14:53:43 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * cp-tree.h (flag_no_ident): Add extern decl for cp-lex.c.
+
+ * cp-decl.c (duplicate_decls): Save the DECL_UID and DECL_FRIEND_P
+ info from olddecl. Otherwise, they'd get clobbered when newdecl's
+ contents get copied into olddecl.
+
+ * cp-lex.c (check_newline): Delete pedantic error about using #ident,
+ since cccp.c already gives a warning. In the case that
+ ASM_OUTPUT_IDENT is defined, only actually spit it out if flag_no_ident
+ is not set.
+
+ Sat Sep 19 14:53:31 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ Sat Sep 19 11:37:11 1992 John F Carr (jfc at Athena.MIT.EDU)
+
+ * cp-decl.c (finish_decl): Don't call
+ CLASSTYPE_DECLARED_EXCEPTION if TYPE is error_mark_node, to avoid
+ referencing a nonexistent field.
+
+ Fri Sep 18 14:06:06 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * cp-parse.y (component_decl): Remove sorry about not implementing
+ methods in anonymous unions---they're illegal, and we generate an
+ error elsewhere to that effect.
+
+ * cp-decl.c (start_method): Make the error message about a
+ duplicated member a little more informative.
+
+ Fri Sep 18 12:28:13 1992 Brendan Kehoe (brendan at rtl.cygnus.com)
+
+ * cp-parse.y: Define YYDEBUG if SPEW_DEBUG is defined.
+ (debug_yytranslate): YYDEBUG will always be defined, no need to test.
+
+ Fri Sep 18 10:46:19 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * cp-parse.y (unary_expr): When parsing delete, first complain if
+ it's a non-pointer, then check if it's a pointer with the value zero.
+ Also be sure not to call build_delete if that's the case.
+
+Thu Sep 24 18:03:07 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Set Meissner version # to 27.
+ (STRUCT_VALUE_REGNUM): Delete macro.
+ (STRUCT_VALUE): Define as 0, so that structure return addresses
+ are passed as the first argument. This fixes various codegen
+ problems with functions returning structures.
+
+ * mips.c (init_cumulative_args): Don't advance arg pointer if
+ function returns a structure.
+
+Thu Sep 24 12:38:31 1992 Torbjorn Granlund (tege@wombat.gnu.ai.mit.edu)
+
+ * pa.h (REGISTER_MOVE_COST): Fix typo. Use `||' instead of `|'.
+ (REG_CLASS_FROM_LETTER): Don't handle 'r' constraints here.
+ * pa.c (clobbered_register): Delete.
+ (srcsi_operand): Return 1 also for things matching
+ depi_cint_operand.
+ (secondary_reload_class): Replace.
+ * pa.md (ldo/ldil SImode and HImode recognizers): Use
+ "const_int_operand" for operand 1 and simplify final condition.
+ Remove `n' constraint.
+ (depi SImode and HImode recognizers): Remove `n' constraint.
+ (plus:SI ... high ... splitter): Don't overwrite input, go via
+ clobber operand instead.
+ (many patterns): Replace `in' constraint with just `i'.
+ (movstrsi): Don't do (clobber (match_scratch)), use explicit
+ pseudos instead, generated in preparation C code. Don't call
+ force_not_mem for operand 2.
+ (movstrsi recognizer): Add `&' to operand 3.
+ (andsi3): Fix typo.
+ (iorsi3): Fix typo.
+ (load-shift-16): New optimizer.
+ (load-shift optimizers): Set "type" attr.
+
+Thu Sep 24 15:17:38 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * toplev.c (lang_options): Add Objc options.
+
+ * configure.bat: Use xgcc, not gcc.
+
+Thu Sep 24 06:30:47 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-lex.c (yylex, case '"'): Initialize arg pased to readescape.
+
+ * genattrtab.c (length_used): New variable.
+ (walk_attr_value): Set it when we have (eq_attr "length" ...).
+ (write_const_num_delay_slots): Value is 1 unless LENGTH_USED is set.
+
+ * reorg.c (mark_set_resources, case CC0): Set RES->CC if IN_SEST.
+
+ * regclass.c (forbidden_inc_dec_class, in_inc_dec): New variables.
+ (regclass): Don't alloca the costs twice.
+ Initialize forbidden_inc_dec_class.
+ For regs that have inc-dec, ignore forbidden classes.
+ (record_address_regs): Update in_inc_dec.
+
+Thu Sep 24 02:36:00 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * syslimits.h: New file, includes system's limits.h.
+ * limitx.h: Include syslimits.h instead of system's limits.h.
+ * Makefile.in (USER_H): Add syslimits.h.
+ (install-fixincludes): If we fix system's limits.h, install that
+ as syslimits.h
+
+ * c-lex.c (readescape): New arg ignore_ptr.
+ (yylex): Pass new arg, handle result that comes back.
+
+Wed Sep 23 19:26:42 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload.c (find_reloads_address): Properly check for constant address.
+
+ * cse.c (simplify_unary_operation, case SIGN_EXTEND): Use
+ HOST_BITS_PER_WIDE_INT, not HOST_BITS_PER_INT.
+
+ * fold-const.c (fold_convert): Add missing cast to HOST_WIDE_INT.
+
+ * jump.c (jump_optimize): Tighten up test for when we can't
+ delete a set of CC0.
+ Don't insert insns between set and use of CC0.
+
+ * final.c (shorten_branches): Correctly access insn needing delay slot.
+
+ * combine.c (significant_bits, num_sign_bit_copies): Handle SUBREGs
+ made for promoted variables.
+
+ * reorg.c (fill_simple_delay_slots): Don't make copy of insn that
+ references CC0.
+
+ * romp.md (define_attr "type"): New type "ibranch".
+ (define_attr "length"): Set length for "ibranch" type.
+ (define_attr "in_delay_slot"): Add new type "ibranch";
+ for "branch", only has delay slot if length is 4.
+ (define_attr "cc_type"): Add new type "ibranch".
+ (indirect branches): Now type "ibranch".
+
+ * alpha.c (alpha_gp_dead_after): Return 0 if not optimizing.
+
+Wed Sep 23 00:11:35 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gvarargs.h: Finish changing _ANSI_H to _ANSI_H_.
+
+Tue Sep 22 23:39:06 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * i386mach.h (perform_fixdfsi): Copy arg to memory variable.
+
+Tue Sep 22 14:54:38 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * loop.c (basic_induction_var): Inside PLUS, when looking for promoted
+ var, make sure it's a REG.
+
+Tue Sep 22 12:21:11 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Bump Meissner version # to 26.
+ (REG_PARM_STACK_SPACE): Use UNITS_PER_WORD instead of 4, and
+ substract FIRST_PARM_OFFSET.
+ (FIRST_PARM_CALLER_OFFSET): Delete unused macro.
+
+ * mips.c (init_cumulative_args): Print types of fntype and the
+ return type if -mdebuge.
+
+ * decrose.h (CPP_SPEC): Eliminate defining various builtin
+ functions with -D<name>=__builtin_<name>, if neither -fbuiltin nor
+ -fno-builtin were passed.
+ (CC1_SPEC): Eliminate passing -fno-builtin to the compiler if
+ neither -fbuiltin nor -fno-builtin were passed. Eliminate
+ %{save-temps: } since gcc no longer gives an unknown switch
+ message if it is used.
+
+ * i386rose.h (CPP_SPEC): Eliminate defining various builtin
+ functions with -D<name>=__builtin_<name>, if neither -fbuiltin nor
+ -fno-builtin were passed.
+ (CC1_SPEC): Eliminate passing -fno-builtin to the compiler if
+ neither -fbuiltin nor -fno-builtin were passed. Eliminate
+ %{save-temps: } since gcc no longer gives an unknown switch
+ message if it is used.
+ (MASK_HALF_PIC): Move bit mask to 0x40000000, to allow for i386.h
+ to define more switches without overlapping our private switch.
+ (TARGET switches): Add -mdebugb to debug half-pic code.
+ (OPTIMIZATION_OPTIONS): Only set flag_gnu_linker FALSE always, and
+ flag_inline_functions if -O3. In particular never set
+ -fomit-frame-pointer which currently messes up debugging.
+ (GO_IF_LEGITIMATE_ADDRESS): Define i386-osfrose version that deals
+ with half-pic.
+ (OVERRIDE_OPTIONS): Define to initialize half-pic.
+ (ASM_FILE_END): Define to dump out half-pic variables if needed.
+
+ * t-i386rose (EXTRA_OBJS): Define as halfpic.o.
+ (CONFIG2_H): Add $(srcdir)/halfpic.h.
+ (halfpic.o): Add dependencies.
+
+Tue Sep 22 03:12:01 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload1.c (choose_reload_regs): When setting reg_has_output_reload,
+ loop over multiple regs only for hard reg. Set reg_is_output_reload
+ in separate loop.
+
+Mon Sep 21 12:22:24 1992 Jeffrey A. Law (law@mole.gnu.ai.mit.edu)
+
+ * reorg.c (mark_set_resources, case REG): A register is set iff
+ "in_dest" is nonzero.
+
+Mon Sep 21 14:16:10 1992 Torbjorn Granlund (tege@jupiter.sics.se)
+
+ * combine.c (make_extraction): Make test whether to use AND or
+ {SIGN,ZERO}_EXTRACT depend on UNSIGNEDP.
+
+Mon Sep 21 08:26:55 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload): If we can't get a register that we know won't
+ interfere with groups, get one that might instead of giving up.
+
+ * reload1.c (reload): Print the needs to the dump file.
+
+Mon Sep 21 02:45:19 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * function.c (put_var_into_stack): Check REG != 0 before dereference.
+
+Sun Sep 20 16:58:05 1992 Fred Fish (fnf at fishpond.cygnus.com)
+
+ * x-svr4: New generic SVR4 host makefile fragment.
+ * x-i386v4: File deleted.
+ * x-ncr3000: Get alloca using ALLOCA, not libucb.a.
+ * configure (i386-*-sysv4*): Use x-svr4, not x-i386v4.
+ * configure (i486-*-sysv4*): Use x-svr4.
+
+Sun Sep 20 21:18:15 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * combine.c (subst): Set and compare extend_op with 0, not NULL.
+
+ * cse.c (find_comparison_args): New args PMODE1, PMODE2.
+ (fold_rtx, record_jump_equiv): Use them to get modes of comparison.
+ (fold_rtx): Associate MINUS with nested PLUS.
+
+ * seq386.h (LPREFIX): Overridden as `.L'.
+ (ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_INTERNAL_LABEL): Likewise.
+
+Sun Sep 20 05:53:20 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): Always call set_significant on new
+ patterns, so don't call just in split case.
+
+ * combine.c (subst): Move sign extension inside arithmetic
+ when we have a constant computation inside another computation.
+
+ * emit-rtl.c (emit_insn_after_with_line_notes): New function.
+ * jump.c (jump_optimize): Delete insns that set registers that
+ are not used elsewhere.
+ Fix some bugs in "if (...) x = a; else x = b;" code.
+ Remove uses of reorder_insns.
+ Add code to make scc insns for "if (...) x = exp;" if EXP is simple
+ enough.
+ Optimize "if (...) x = b;" if jumps very expensive; don't use a REG
+ as the older value of X since it doesn't help and can hurt.
+ Correctly place generated insns in above case.
+
+ * reload.c (find_reloads, find_reloads_toplev): Treat
+ BYTE_LOADS_SIGN_EXTEND just like BYTE_LOADS_ZERO_EXTEND.
+ * combine.c (subst, simplify_and_const_int, significant_bits):
+ Likewise.
+ (num_sign_bit_copies, case MEM): New case for BYTE_LOADS_SIGN_EXTEND.
+ (num_sign_bit_copies, case SUBREG): Handle just like significant_bits.
+
+Sat Sep 19 15:55:31 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (combine_instructions): Clear significant_valid
+ at end of combine pass for a function.
+ (find_split_point, case MEM): See if first operand of the PLUS
+ that makes up an address is complex.
+ (subst): Add missing arg to recursive calls when IF_THEN_ELSE
+ is an arg of an operator.
+ (subst, case IF_THEN_ELSE): Generalize code to propagate comparison
+ result into arms by using known_cond.
+ If an arm is the first operand of the comparison, make it the
+ true arm.
+ Remove unneeded comparison when arms are identical.
+ Try to convert IF_THEN_ELSE to ABS, (neg (abs X)), [US]MIN, [US]MAX.
+ Convert (if_then_else (ne A 0) (OP X C) X) to (OP X (mult A C)).
+ (subst, case SET): If we don't have conditional moves,
+ convert IF_THEN_ELSE into logical operations.
+ (subst, case AND): Always make conditional moves, even if we
+ don't support them on the machine.
+ (known_cond, extended_count): New functions.
+ (gen_binary): For commutative operations, put constant last.
+
+ * combine.c (try_combine): The insns made by a DEFINE_SPLIT might
+ contain a PARALLEL and the call to recog_for_combine might add it.
+
+ * combine.c (simplify_comparison, case ASHIFT): Fix typo.
+
+ * combine.c (try_combine): When removing REG_UNUSED note,
+ update reg_n_deaths.
+ Likewise, when making new REG_DEAD notes for distribute_notes.
+ (remove_death, move_deaths): Update reg_n_deaths.
+ (distribute_notes): When placing second REG_DEAD or REG_UNUSED note or
+ ignoring such a note, update reg_n_deaths.
+
+ * rtl.h (SUBREG_PROMOTED_{VAR,UNSIGNED}_P): New macros.
+ * tree.h (DECL_MODE, DECL_RTL): Update comments.
+ * expr.h (PROMOTE_MODE): Provide default definition.
+ * expr.c (convert_move, convert_to_mode): Strip off a SUBREG made
+ for variables with promoted modes.
+ (store_expr): Store into variables with promoted modes by
+ doing the appropriate extension operation.
+ (expand_expr, case VAR_DECL): Generate SUBREGs for promoted objects.
+ (expand_expr, case SAVE_EXPR): Likewise for SAVE_EXPRs.
+ (expand_increment): Handle increment of promoted objects.
+ * function.c (fixup_var_refs{,_insns}): Add new parms for promoted
+ mode and signedness; all callers changed.
+ Insert mode conversions when required.
+ (fixup_var_refs_1): Add new parms for mode and signedness;
+ handle SUBREGs for promoted values.
+ (assign_parms): Promote the mode of parameters when useful for
+ the target machine.
+ * function.h (struct var_refs_queue): Remove unused field ORIGINAL.
+ Add new fields PROMOTED_MODE and UNSIGNEDP.
+ * integrate.c (expand_inline_function): Convert actual to formal's
+ mode (in case formal was promoted).
+ * loop.c (basic_induction_var): Add new parameter P.
+ Check for bivs that are set over multiple insns and also
+ allow a SIGN_EXTEND to be used; remove check for MINUS since
+ we don't make MINUS with a constant 2nd operand any more.
+ * optabs.c (expand_binop, expand_unop): Don't make SUBREG for promoted
+ variables as operands.
+ * stmt.c (tail_recursion_args): Use mode of DECL_RTL, not
+ DECL_MODE.
+ (expand_decl): Promote modes of scalar variables when useful on
+ target.
+ * unroll.c (find_splittable_regs): If any BIV update isn't
+ simple, don't split it.
+ (final_giv_value): Look for biv updates by matching insns; don't
+ try to reparse the insn.
+ * rs6000.h (PROMOTE_MODE): New macro.
+
+ * rtlanal.c (reg_set_last): Allow old value to be a SUBREG.
+
+ * rs6000.c (print_operand, case 'h', 'H', 'w'): Minor cleanups.
+ * rs6000.h (BRANCH_COST): Increase from 2 to 3.
+ * rs6000.md (smax, smin, umax, umin): Add define_splits.
+
+ * alpha.h (PROMOTE_MODE): New macro.
+ (REG_ALLOC_ORDER): Put $0 in front of $21-$16.
+ (CONST_OK_FOR_LETTER): Change meanings of N, O, and P.
+ (BRANCH_COST): Increase from 3 to 4.
+ (PREDICATE_CODES): Add new predicates reg_or_cint_operand and
+ sext_add_operand.
+ * alpha.md (addsi3): subl can be used to sign-extend addition of
+ small negative constants.
+ (negsi2): Add pattern for (sign_extend (neg ..)).
+ (and pattern): Fix typo in constraint.
+ (ashldi3): Use new definition of constant letters.
+ (smax, smin, umax, umin): Add define_splits.
+ (compares): Can compare constant with zero by adding negative of
+ constant.
+ (store insns): Can store 0 into memory in both integer and FP.
+ * alpha.c (sext_add_operand, reg_or_cint_operand): New function.s
+ (print_operand, case 'r', case 'R'): Clean up code; use CONST0_RTX.
+
+ * rtl.c (note_insn_name): Fix typo: had NOT_INSN_DELETED_LABEL.
+
+ * jump.c (delete_insn): Don't change labels to NOTEs if we would
+ not really have deleted them.
+
+ * genconfig.c (walk_insn_part, case IF_THEN_ELSE): Refine when
+ HAVE_CMOVE_FLAG gets set.
+
+Sat Sep 19 14:52:05 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload.c (find_reloads): Always use >= with FIRST_PSEUDO_REGISTER.
+
+ * i386mach.h (SIZE_TYPE): Defined.
+
+Sat Sep 19 04:57:06 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (sCOND patterns): Don't allow a MEM in the SET_DEST,
+ because these insns can't have input reloads, and a MEM might need
+ an input address reload.
+
+ * fold-const.c (fold_convert): Avoid using conversion of unsigned
+ to floating; offset value by hand to fit in signed type.
+
+Sat Sep 19 00:50:32 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * integrate.c (subst_constants): Do substitute in address of MEM dest.
+
+ * reload1.c (init_reload): Fix typo.
+
+Fri Sep 18 21:09:15 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * libgcc2.c: Declare _exit as volatile.
+
+ * function.c (assign_parms): Set MEM_IN_STRUCT_P right in stack slots.
+
+Fri Sep 18 15:58:15 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * fixincludes: Don't look for *.h symlinks if the host doesn't
+ have symlinks.
+
+Fri Sep 18 17:34:27 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.md (call_internal): If the memory address to call is really
+ a constant integer, load it up into $at and do the call from
+ there.
+ (call_value_internal): Ditto.
+
+Fri Sep 18 03:48:17 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * m88k.c (m88k_volatile_code): New variable.
+ (print_operand): Track volatile memory references and output a
+ serializing instruction before a load when necessary.
+ * m88k.h (TARGET_SWITCHES): Add -m{no,}serialize-volatile.
+ (OVERRIDE_OPTIONS): -m88110 and -m88000 imply -mserilize-volatile.
+ (ADJUST_INSN_LENGTH): Volatile memory operantions may be longer.
+ (CC_STATUS_INIT): Reset m88k_volatile_code to the unknown state.
+ * m88k.md (load store patterns): Prepend loads and stores with %V
+ and %v to track the type and address of the access.
+
+ * m88k.c (m88k_version, m88k_version_0300): New variables.
+ * m88k.h (TARGET_OPTIONS): Generalize to -mversion-STRING.
+ (OVERRIDE_OPTIONS): Compute m88k_version_0300.
+ * m88k.md (call_movstrsi_loop): Renamed from call_block_move_loop.
+ Use call-value for the block move patterns.
+
+ * m88kdgux.h (PERFERRED_DEBUGGING_TYPE): Compute based on
+ m88k_version.
+ (CPU_DEFAULT): Make it -m88000.
+
+ * m88k.h: Don't use #elif
+
+Fri Sep 18 01:08:55 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (install-common-headers): Don't copy byteorder.h.
+
+Thu Sep 17 20:06:22 1992 Brendan Kehoe (brendan@mole.gnu.ai.mit.edu)
+
+ Complete 13th Cygnus<-->FSF merge.
+
+ Thu Sep 17 13:15:15 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ Do some much-needed housecleaning of the C++ front-end.
+ * cp-call.c (ideal_candidate): Move `p2' down inside #if 0'd (only)
+ section that actually uses it. Delete unused variable `buf'.
+ (build_method_call): Delete unused variable `dtor_specd'.
+ * cp-class.c (finish_struct): Delete unused variable `basetype'.
+ * cp-cvt.c (convert_to_aggr): Add missing argument decl for `protect'.
+ (convert_pointer_to): Delete unused variable `form'.
+ * cp-decl.c: Include string.h/strings.h for strncpy() decl.
+ Add decls for init_* fns. Delete unused decl `push_overload_decl_1'.
+ Don't use `c_function_varargs', C++ doesn't need it.
+ (push_binding_level): Add missing argument decls for
+ `tag_transparent' and `keep'.
+ (lookup_tag): Add missing argument decl for `tags_transparent'.
+ (lookup_name): Add missing argument decl for `prefer_type'.
+ (start_decl): Delete unused variables `classname' and `tmpl'.
+ (grokvardecl): Add missing argument decl for `initialized'.
+ (grokdeclarator): Delete unused variable `t'.
+ * cp-decl2.c (get_temp_name): Delete unused variable `temp'.
+ (finish_table): Delete unused variable `publicp'.
+ (finish_builtin_type): Add missing argument decl for `len'.
+ (finish_file): Delete unused variables `asm_out_file' and
+ `init_function_name'.
+ * cp-except.c (ansi_exception_object_lookup): Add missing
+ argument decl for `type'.
+ (cplus_expand_throw): Delete unused variables `cname', `name',
+ and `raise_id'.
+ * cp-init.c: Delete unneeded forward decl of `init_init_processing'.
+ (build_new): Delete unused variable `alignment'.
+ (expand_vec_init): Add missing argument decl for `from_array'.
+ (build_vec_delete): Delete unused variable `rval'.
+ * cp-input.c (feed_input): Add missing argument decl for `len'.
+ * cp-lex.c: Delete unused variable `nextlastiddecl'.
+ (check_newline): Delete unused variable `tmp'. Place `asm_out_file'
+ inside a conditional for ASM_OUTPUT_IDENT.
+ (real_yylex): Delete unused variable `typename_scope_in_progress'
+ and unused labels `relex' and `reswitch'.
+ * cp-method.c: Include string.h/strings.h for strncpy() decl.
+ (new_text_len): Deleted.
+ (dump_type_prefix): Delete unused variables `print_struct' and `name'.
+ (dump_tyupe): Delete unused variable `print_struct'.
+ (type_as_string): Delete unused variable `spaces'.
+ (do_inline_function_hair): Delete unused variable `cname'.
+ (flush_repeats): Delete unused variable `rval'.
+ (build_t_desc_overload): Delete unused variable `i'.
+ (build_opfncall): Add missing argument decl for `flags'.
+ (hack_identifier): Add missing argument decl for `yychar'.
+ * cp-parse.y (template_instantiate_once): Delete unused
+ variables `id' and `members'.
+ * cp-search.c (lookup_field): Add missing argument decl for `want_type'.
+ (tree_needs_constructor_p): Add missing argument decl for `i'.
+ (dfs_debug_mark): Delete unused variable `pending_vtables'.
+ (dfs_get_vbase_types): Delete unused variable `basetype'.
+ * cp-spew.c (init_spew): Delete unused variables `pc' and
+ `chars_following_typename'.
+ (yylex): Delete unused variables `dk' and `tmp'. Move decl of `t2' down
+ to the block that actually uses it.
+ * cp-tree.c (build_cplus_staticfn_type): Delete unused variable `ptype'.
+ (propagate_binfo_offsets): Delete unused variables `t' and `basetype'.
+ (layout_basetypes): Delete unused variable `binfo'.
+ (array_type_nelts_total): Delete unused variable `index_type'.
+ * cp-tree.h: Add many decls.
+ * cp-typeck.c (comp_array_types): Add missing argument decl
+ for `strict'.
+ (build_compound_expr): Delete unused variable `tmp'.
+ (convert_for_initialization): Delete unused label `converted'.
+
+ Wed Sep 16 12:51:10 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * cp-decl.c (init_decl_processing): Enable code to add sin and cos
+ as built-in functions.
+
+ * cp-decl.c (duplicate_decls): Enable code to preserve the DECL_UID
+ of olddecl.
+
+ * cp-search.c (lookup_nested_fields): Make sure we're climbing along
+ a chain of nested types, and nothing else.
+
+ Tue Sep 15 17:38:34 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * cp-search.c (lookup_nested_fields): New function.
+ * cp-tree.h: Declare it.
+ * cp-decl.c (lookup_name): Call it if there's no class-local
+ definition. (It could be nested.)
+ * cp-lex.c (do_identifier): Call lookup_nested_field() if necessary.
+
+ Tue Sep 15 12:37:16 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ Mon Aug 24 14:58:02 1992 Chip Salzenberg (chip at animal)
+
+ * cp-typeck.c (build_conditional_expr): Determine constness
+ and volatility with TREE_... tests instead of TYPE_... tests.
+
+ Mon Sep 14 18:00:35 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-decl.c (grokdeclarator): Remove redundant (and broken)
+ test for multiple destructors in a class.
+
+ Fri Jul 31 19:09:10 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-cvt.c (convert_to_integer): Push truncation inside COND_EXPR.
+
+ Mon Sep 14 17:52:45 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-class.c (finish_struct): Always write all structure types,
+ even if they're defined in a "#pragma interface" header file.
+ Otherwise, XCOFF debugging info is messed up.
+
+ Mon Sep 14 17:39:32 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-class.c (finish_struct): ``Actually, I don't understand
+ this code. What is it supposed to do?'' --Niklas Hallqvist
+
+ Mon Sep 14 17:27:23 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-decl.c (finish_decl): Don't dump core if a decl is anonymous.
+ A decl is at the global binding level if DECL_CONTEXT is null.
+ (grokdeclarator): Don't globalize a type if its first mention
+ is in a parameter. It's okay to initialize a function in a
+ non-global scope.
+
+ Tue Sep 15 12:15:26 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * cp-typeck.c (c_expand_return): Emit a warning when they try to
+ return the address of a local variable.
+
+ * cp-decl.c (finish_method): Make sure it's indeed nested before
+ checking for the qualified name.
+
+ Mon Sep 14 18:59:25 1992 Mike Stump (mrs@cygnus.com)
+
+ Wed Sep 2 11:04:24 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-decl.c (init_decl_processing): Add sin and cos as built-in
+ functions. Fix type of __builtin_constant_p.
+
+ * cp-lex.c (readescape): For \x, don't include leading 0's in count.
+
+ * cp-typeck.c (build_unary_op): For ADDR_EXPR, just set
+ TREE_CONSTANT if staticp, but don't clear TREE_CONSTANT.
+
+ Mon Sep 14 18:54:41 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-parse.y (permanent_obstack): Move to top of file.
+
+ Mon Sep 14 18:50:19 1992 Mike Stump (mrs@cygnus.com)
+
+ Mon Sep 14 16:39:10 1992 Chip Salzenberg (chip@tct.com)
+
+ [ Changes propagated from diffs to c-* in 920911 snapshot. ]
+
+ * cp-decl.c (duplicate_decls): Set DECL_INLINE in newdecl so it
+ is copied into olddecl. Don't set DECL_EXTERNAL in olddecl.
+ Preserve DECL_UID and DECL_FRIEND_P of olddecl.
+
+ * cp-typeck.c (build_binary_op_nodefault): Don't assume that a
+ target integer fits in a HOST_WIDE_INT when checking shift widths.
+
+ Mon Sep 14 18:15:42 1992 Mike Stump (mrs@cygnus.com)
+
+ Mon Aug 24 14:32:03 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-parse.y (reserved_declspecs): Warn if storage class occurs here.
+ (declmods): Warn if storage class is not first.
+
+ Mon Sep 14 16:59:53 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * cp-method.c (fndecl_as_string): Don't output an extra space when
+ printing the return type of a function.
+
+ Mon Sep 14 16:01:53 1992 Mike Stump (mrs@cygnus.com)
+
+ Fri Jun 12 18:07:00 1992 Niklas Hallqvist (niklas@appli.se)
+
+ * cp-parse.y (structsp, named_class_head_sans_basetype): Call
+ overload_template_name in the case of template specializations so
+ that something like:
+
+ template<class T> struct C { C(); };
+ struct C<int> { C(); };
+
+ works.
+
+ Mon Sep 14 15:51:22 1992 Mike Stump (mrs@cygnus.com)
+
+ Fri Apr 10 13:20:56 1992 Niklas Hallqvist (niklas@appli.se)
+
+ * cp-spew.c (spew_debug): exported this flag for use in cp-decl.c
+ (template_type_seen_before_scope): new global containing contextual
+ information for the parser, making the compiler grok nested types in
+ template classes.
+ (shift_tokens): Guard bcopy calls against moves of zero size.
+ (yylex): Handle nested types in template classes.
+
+ * cp-parse.y (scoped_typename): Handle nested types in template
+ classes.
+ (template_type): Likewise.
+ (base_class.1): Likewise.
+ (member_init): Likewise.
+ (scoped_baseclass): New rule for handling of nested types in
+ template classes.
+
+ * cp-decl.c (xref_defn_tag): Conditionalized debug printout on
+ spew_debug (defined in cp-spew.c).
+ (binding_levels_sane): void function returned value.
+
+ Mon Sep 14 15:41:28 1992 Mike Stump (mrs@cygnus.com)
+
+ Mon Sep 14 17:26:18 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-parse.y (unary_expr), cp-call.c (build_scoped_method_call):
+ NEVER use `maybe_adjust' feature in destructors. It's unsafe.
+
+ Mon Sep 14 15:12:34 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * cp-decl.c (finish_method): Complain when a qualifier is used as
+ part of a member declaration.
+
+ Mon Sep 14 11:47:30 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl2.c (groktypefield): Revert Wed Aug 19 14:47:08 1992
+ change as it breaks template constructor declarations. Gez, this
+ code is horribly complex, and the comments are wrong. Note,
+ template constructor definitions are broken in the same way, as
+ declarations were with this patch in.
+
+ Fri Sep 11 14:09:01 1992 Mike Stump (mrs@cygnus.com)
+
+ Fri Sep 11 10:34:45 PDT 1992 Ron Guilmette (rfg at netcom.com)
+
+ * cp-decl.c (duplicate_decls): For file-scope redefinitions, note
+ that the variable was previously *defined* at some specific (earlier)
+ point.
+
+ Fri Sep 11 13:49:55 1992 Mike Stump (mrs@cygnus.com)
+
+ Tue Sep 8 21:39:35 PDT 1992 Ron Guilmette (rfg at netcom.com)
+
+ * cp-decl2.c (finish_file): Don't pass `1's as the `functionbody'
+ flag to `poplevel' when getting ready to finishing up the per-
+ compilation-unit constructors and destructors.
+
+ Fri Sep 11 13:28:02 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Upgrade local externs with
+ initializations to be errors, instead of warnings.
+
+ Fri Sep 11 13:03:52 1992 Mike Stump (mrs@cygnus.com)
+
+ Thu Sep 10 09:40:56 PDT 1992 Ron Guilmette (rfg at netcom.com)
+
+ * cp-decl.c (grokdeclarator): Given an error if *either* a `static'
+ or an `extern' specifier is attached to a defining declaration of a
+ static data member.
+
+ Wed Sep 9 19:46:43 1992 Mike Stump (mrs@cygnus.com)
+
+ * c++: Makes sure echo -nostdinc does not eat the -nostdinc.
+
+ Tue Sep 8 13:42:35 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * cp-typeck.c (common_type, case FUNCTION_TYPE): An empty argument
+ list is represented as a void_type_node; make sure we check for
+ that, and not just an empty TYPE_ARG_TYPES list on either side.
+
+ Tue Sep 8 02:31:05 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-tree.c (layout_basetypes, make_binfo): Added support for
+ debugging information about virtual base class pointers.
+
+ Mon Sep 7 15:34:58 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * cp-decl2.c (temp_name_p): Deleted function, never used anywhere.
+
+ Sun Sep 6 23:09:29 1992 John F Carr (jfc at Athena.MIT.EDU)
+
+ * cp-typeck.c (convert_arguments): Ignore arguments which are
+ ERROR_MARK_NODE to avoid crashes trying to reference fields which
+ are not present.
+
+ Mon Sep 7 12:34:09 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * cp-decl.c (clear_anon_tags): Do assignment of B after we've seen
+ if we're to work on an anonymous aggregate. No need to make the
+ assignment for nearly every aggr we ever declare.
+
+ Sun Sep 6 17:51:47 1992 Mike Stump (mrs@cygnus.com)
+
+ Sun Sep 6 13:12:16 1992 John Carr (jfc@Athena.MIT.EDU)
+
+ * cp-decl.c (pushdecl, finish_decl, store_return_init,
+ finish_function), cp-decl2.c (constructor_name, finish_file),
+ cp-except.c (cplus_expand_reraise), cp-init.c (emit_base_init,
+ expand_aggr_init_1), cp-typeck.c (build_modify_expr,
+ c_expand_asm_operands, c_expand_return): Include rtl.h and eliminate
+ unneeded casts.
+
+ * cp-decl2.c (grokbitfield): Use NULL_TREE instead of NULL.
+
+ * cp-decl2.c (finish_file): Don't try and not use stdio.h.
+
+ * cp-except.c (cplus_expand_reraise): emit_move_insn takes 2
+ arguments, not three.
+
+ Sat Sep 5 12:04:06 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * cp-decl.c (finish_function): Undo change of Mon Aug 17 16:28:48
+ 1992; it resulted in lots of unnecessary and incorrect warnings.
+
+ * cp-lex.c (do_identifier): For nested classes, check if a variable
+ being sought is actually in the scope of an enclosing class. If it
+ is, and the variable's non-static, bail.
+
+ * cp-decl.c (grok_enum_decls): Tighten up some code that was pretty
+ twisty.
+
+ * cp-class.c (start_struct): Delete; it was #if 0'd out anyway (C++
+ doesn't need it), and is an old hold-over from c-decl.c.
+
+ * cp-class.c (minus_one_node): Delete, it's not used.
+ (init_class_processing): Delete init of minus_one_node.
+
+ * cp-spew.c (yylex): Check return of resolve_scope_to_name to
+ be NULL_TREE.
+ (frob_identifier): Likewise.
+ (hack_more_ids): Likewise.
+
+ * cp-cvt.c (convert_to_real): Use REAL_VALUE_ATOF to make 0.
+
+ Fri Sep 4 19:23:17 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (grok_ctor_properties): When looking for copy
+ constructors, ignore the first argument since it is the in$chrg
+ parameter for the object to copy from.
+
+ Fri Sep 4 14:35:31 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-cvt.c (build_up_reference): Prevent the compiler from dumping
+ core on semantic errors.
+
+Thu Sep 17 17:28:13 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (initializer_constant_valid_p): Warn about address
+ arithmetic destined for a type that's too narrow.
+ New argument ENDTYPE.
+
+ * limitx.h: Don't include-next if _LIBC_LIMITS_H_ defined.
+
+Thu Sep 17 20:45:16 1992 Paul Eggert (eggert@twinsun.com)
+
+ * cexp.y (parse_escape): Diagnose '\x' with no digits.
+ Diagnose integer overflow when parsing \x escapes.
+
+Thu Sep 17 11:52:53 1992 Michael Meissner (meissner@osf.org)
+
+ * gcc.c (SIGNED_CHAR_SPEC): Use #if rather than ?: in default defn.
+
+Thu Sep 17 14:53:51 1992 Tim Moore (moore@defmacro.cs.utah.edu)
+
+ * pa.h (FUNCTION_ARG_ADVANCE, FUNCTION_ARG): Fix double integer
+ argument alignment.
+ (SIZE_TYPE, PTRDIFF_TYPE, WCHAR_TYPE, WCHAR_SIZE): Define.
+ * pa-hpux.h, pa-ghpux.h (SIZE_TYPE, PTRDIFF_TYPE, WCHAR_TYPE,
+ WCHAR_SIZE): Define for hpux.
+ * x-pa, t-pa : New files.
+ * configure (hppa cases): add definitions for xmake_file and
+ tmake_file.
+
+Wed Sep 16 22:22:15 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.c (print_operand): Don't abort if error: might have been a
+ user asm.
+
+ * i386.md (addsi3,ashlsi3): Handle the case where the stack
+ pointer appears as an index reg.
+
+Wed Sep 16 21:22:23 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cse.c (fold_rtx): For SUBREG, actually test subreg_lowpart_p in the
+ code to handle narrowing subregs. And exclude binary ops like DIV
+ where truncating the args is not valid.
+
+ * libgcc2.c (__CTOR_LIST__, __DTOR_LIST__): Moved to separate member.
+ * Makefile.in (LIB2FUNCS): Added _ctors.
+
+Wed Sep 16 23:28:41 1992 Paul Eggert (eggert@twinsun.com)
+
+ * cexp.y (parse_number): Warn about '9' in octal constants.
+ Commonize overflow detection for various radices.
+
+Wed Sep 16 19:33:37 1992 Torbjorn Granlund (tege@mole.gnu.ai.mit.edu)
+
+ * pa.md (casesi): Use emit_jump_insn to emit casesi0 pattern.
+ (xorsi3): Remove `r' from output template.
+ (movstrsi recognizer): Add `+' to operand 0 & 1 constraints.
+
+Wed Sep 16 14:53:51 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Set Meissner version # to 25.
+
+ * mips.c (gen_int_relational): Eliminate all vestiages of
+ figuring out whether the comparison will always be true or false.
+ Let the optimizer figure it out.
+ (gen_conditional_branch): Ditto.
+ (function_epilogue): Print correct number of half-pic pointers
+ and references.
+ (prev_half_pic_refs): New static variable.
+ (prev_half_pic_ptrs): New static variable.
+
+Tue Sep 15 16:10:47 PDT 1992 Ron Guilmette (rfg at netcom.com)
+
+ * toplev.c (rest_of_decl_compilation): Call `dwarfout_file_scope_decl'
+ immediately for actual *definitions* of file-scope variables (and
+ file-scope typedefs too).
+
+Tue Sep 15 20:56:31 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * fixincludes (EXINIT): Clear it to avoid problems with bad values.
+ * fixinc.svr4 (EXINIT): Likewise.
+
+ * print-tree.c (print_node): Don't print blank line for null
+ fields in a TREE_VEC.
+
+ * cccp.c (macroexpand): Don't output another error message if have
+ already output error message returned from macarg.
+
+ * c-decl.c (grokparms): Copy parm list if it isn't permanent,
+ instead of copying it if temporary allocation has been turned off.
+
+ * final.c (only_leaf_regs_used): Check for global_regs.
+
+ * c-parse.y (typespec): Don't warn if pedantic when typeof used.
+
+ * c-tree.h (lang_identifier): Add limbo_value field for out of
+ scope block level extern declarations.
+ (IDENTIFIER_LIMBO_VALUE): New define, to access that field.
+ * c-decl.c (print_lang_identifier): Print value of limbo field.
+ (pushdecl): Check an extern decl against both previous global and
+ previous limbo declarations. For global declarations, clear limbo
+ value field. For block level extern declarations, set limbo field
+ if zero.
+ (grokdeclarator): If this is a block level extern, then allocate
+ it on the permanent obstack, not the temporary obstack.
+
+Tue Sep 15 15:42:24 1992 Paul Eggert (eggert@twinsun.com)
+
+ * tree.c (int_fits_type_p): Negative ints never fit unsigned
+ types, and unsigned ints with top-bit-set never fit signed types.
+ * c-lex.c (yylex): Integer constant is unsigned for purposes of
+ int_fits_type_p so that it compares huge constants properly.
+
+Tue Sep 15 14:44:51 1992 Michael Meissner (meissner@osf.org)
+
+ * i386.md (string move, string compare): Always issue cld
+ instruction before doing a rep string move, so that we are
+ guaranteed that the bytes are moved/compared correctly.
+
+Tue Sep 15 00:09:06 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gstdarg.h: (va_arg): Cast ptr to void *, then to TYPE *.
+ * va-i960.h, va-m88k.h, va-mips.h, va-pa.h, va-pyr.h, va-sparc.h:
+ Likewise.
+
+ * rtl.c (ftell): Declaration deleted.
+
+Mon Sep 14 15:17:09 1992 Michael Meissner (meissner@osf.org)
+
+ * configure (arg processing): Add --with-stabs switch.
+ (all mips configurations, except decrose): If --with-stabs, use
+ the configuration file that emits stabs as the debug debug
+ configuration, rather than the native MIPS ECOFF format.
+
+Mon Sep 14 13:28:29 1992 Torbjorn Granlund (tege@jupiter.sics.se)
+
+ * configure (option case statement): Index with `$next_arg' instead
+ of `next_arg'. Clean up order and indentation for switches.
+ (several places): Remove space around assignment `='.
+ (usage printing): Don't use `-n' for echo (SysV lossage).
+ Print config.status with `tail +2'.
+
+Mon Sep 14 23:46:19 1992 Paul Eggert (eggert@twinsun.com)
+
+ * c-lex.c (yylex): Warn about integers so large that they are unsigned.
+
+ * cexp.y (parse_number): Diagnose integer constants that are too large.
+ Diagnose duplicate `l' and `u' suffixes. Diagnose ` 0x ' and ` 0a '.
+ Warn about integer constants that are so large that they are unsigned.
+
+Mon Sep 14 10:26:34 1992 Charles Hannum (mycroft@hal.gnu.ai.mit.edu)
+
+ * reload1.c (init_reload): Fix typo in last change.
+
+Mon Sep 14 01:17:58 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload1.c (init_reload): For reg+reg+const, try various regs.
+
+Sun Sep 13 01:08:06 1992 Paul Eggert (eggert@twinsun.com)
+
+ * cexp.y (exp): Detect signed integer overflow.
+ Replace `(unsigned)' with `(unsigned long)'. When
+ evaluating << and >>, compute the correct answer without shifting
+ by more than HOST_BITS_PER_LONG, or by a negative quantity.
+ (integer_overflow, left_shift, right_shift): New functions.
+
+Sun Sep 13 02:00:52 1992 Torbjorn Granlund (tege@jupiter.sics.se)
+
+ * arm.md: Clean up indentation.
+
+ * pa.c (output_load_address): Removed. Nothing uses it.
+ * pa.md (high:DI recognizer): Add return \"\".
+ * pa.md (sCC, bCC expanders): Remove constraints.
+ * pa.md (and-with-immediate optimizer): New pattern.
+ * pa.md (ior-with-immediate optimizer): New pattern.
+ * pa.c (consec_zeros_p, and_operand, ior_mask_p, ior_operand,
+ output_and, output_ior): New functions.
+ * pa.h (output_and, output_ior): Declare.
+ * pa.h (CONST_OK_FOR_LETTER_P): Add 'O' and 'P'.
+ * pa.c (compute_xdepi_operands_from_integer): New function.
+ Some code come from output_zdepi.
+ (output_zdepi): Removed.
+ (depi_cint_operand): New name for zdepi_operand.
+ * pa.md (adddi3): Extend to handle CONST_INT.
+ * pa.md (movstrsi): Change `!= 4' => `< 4' in test for alignment.
+ * pa.md (negsi2): Don't use @ for just one output template.
+ * pa.md (and-not patterns): Make them canonical. Put operands in
+ the right order.
+ * pa.md (casesi): Rewrite. Used to be buggy and slow.
+ * pa.md (several patterns): Make sure # of attribute alternatives
+ match # of constraint alternatives.
+ Return assembler output template instead of calling output_asm_insn.
+ Don't write to operands[n] for n >= max operand number in the
+ pattern, use xoperands instead.
+
+Sat Sep 12 15:06:57 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * regclass.c (record_reg_classes):
+ Ignore leading % when examining constraint.
+ Don't bypass usual cost computation when a pseudo "matches"
+ a non-pseudo in matching operands.
+
+ * c-lex.c (yylex): If integer value overflows so highword is negative,
+ it needs unsigned long long.
+
+Fri Sep 11 21:09:53 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * sys-types.h (va_alist): Supply `int' as the type to define it as.
+
+Fri Sep 11 12:39:39 1992 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.md (non-[cf]branch define_delay): Use a single delay description
+ for the delay slots in "branch", "call", and "milli" insns.
+ (fbranch define_delay): fbranches have a single delay slot which
+ may be nullified when the branch is taken (regardless of direction
+ or distance to the target.)
+ (in_branch_delay attribute): Disallow fbranch insns explicitly.
+ (floating point branches): Use "fbranch" attribute for these insns.
+ Update output template to properly handle nullification.
+
+Fri Sep 11 10:34:45 PDT 1992 Ron Guilmette (rfg at netcom.com)
+
+ * c-decl.c (duplicate_decls): For file-scope redefinitions,
+ error message distinguishes previous definitions from mere decls.
+
+Fri Sep 11 01:07:11 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-convert.c (convert_to_integer): Don't pass truncation thru lshift
+ if shift count >= width of narrower type. Instead, just use 0.
+
+ * we32k.h (SIZE_TYPE): Defined.
+
+Fri Sep 11 00:03:45 1992 Paul Eggert (eggert@twinsun.com)
+
+ * c-decl.c (finish_struct): Don't assume that a target integer
+ fits in a HOST_WIDE_INT when checking bit-field widths.
+ * c-typeck.c (build_binary_op): Likewise, when checking shift widths.
+
+Thu Sep 10 22:23:10 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * optabs.c (expand_binop):
+ Convert op1 of shift libcall to word_mode.
+
+Thu Sep 10 18:14:36 1992 Tim Moore (moore@defmacro.cs.utah.edu)
+
+ * final.c (shorten_branches): Do shorten branches with delay slots
+ if the number of delay slots is constant.
+ * genattrtab.c (write_const_num_delay_slots): New function;
+ creates const_num_delay_slots ().
+ (main): Call it.
+ * genattr.c (main): Write declaration for const_num_delay_slots ().
+
+Thu Sep 10 17:33:42 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.md (all move patterns): Do not allow memory to memory or
+ non-zero constant to memory moves to be generated, which causes
+ reload to generate the load/store using spilled registers, and
+ does not allow for efficient CSE or scheduling to be done.
+
+ * dec-gosf1.h, iris4g.h: New files.
+
+Thu Sep 10 12:46:17 1992 Torbjorn Granlund (tege@jupiter.sics.se)
+
+ * pa.md (casesi): Add `&' to constraint for clobber operand.
+
+ * optabs.c (expand_binop): Fix typo, `mode' => `methods'.
+
+Thu Sep 10 00:21:05 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * optabs.c (expand_binop): Delete #ifdef GPC; complex code now uncond.
+
+ * optabs.c (init_fixtab): Fix typo for fix_truncdfqi2.
+
+Wed Sep 9 13:25:53 PDT 1992 Ron Guilmette (rfg at netcom.com)
+
+ * c-common.c (declare_function_name): Allow for anonymous function.
+
+Wed Sep 9 15:56:09 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (mostlyclean): Delete xlimits.h.
+
+ * final.c (output_addr_const):
+ If 2nd arg of MINUS is negative integer, put it in parens.
+
+Wed Sep 9 10:10:30 1992 Michael Meissner (meissner@osf.org)
+
+ * va-mips.h (va_arg): Handle structures larger than 8 bytes.
+ (all macros): Put __ in front of all macro arguments.
+
+Wed Sep 9 00:45:02 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * sol2-crt1.asm (.nope): Really store into environ.
+
+ * libgcc2.c (__gcc_bcmp): New function, in cond on L__gcc_bcmp.
+ * Makefile.in (LIB2FUNCS): Add L__gcc_bcmp.
+
+ * expr.c (expand_expr): Support IN_EXPR.
+
+Tue Sep 8 20:04:43 1992 Paul Eggert (eggert@twinsun.com)
+
+ * c-convert.c (convert_to_integer): When optimizing LSHIFT_EXPR and
+ RSHIFT_EXPR, do compares at tree level.
+
+ * tree.c (build_index_type, build_index_2_type): Don't pass
+ HOST_WIDE_INT to routine expecting an int. Don't pass negative
+ value even if hash code is INT_MIN.
+
+Tue Sep 8 17:35:51 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * dbxout.c (dbxout_type_fields): Handle nameless subrecords for Pascal.
+ (dbxout_type): Handle CHAR_TYPE, BOOLEAN_TYPE. FILE_TYPE, SET_TYPE.
+
+ * news.h (ASM_OUTPUT_OPCODE): Deleted.
+
+ * c-parse.y (stmt): In for stmt, put proper lineno before increment.
+ Don't call position_after_white_space.
+
+Tue Sep 8 06:31:17 1992 Michael Meissner (meissner@osf.org)
+
+ * cp-typeck.c (constant_print_warning): Deleted.
+
+Tue Sep 8 05:26:19 1992 Mike Stump (mrs@hal)
+
+ Tue Aug 18 23:56:16 1992 Ron Guilmette (rfg at netcom.com)
+
+ * tree.h (BINFO_VPTR_FIELD): Added to support debugging
+ information about virtual base class pointers.
+
+Mon Sep 7 19:39:45 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ * c-typeck.c (constant_print_warning): Deleted.
+ * c-common.c: Moved here.
+
+Mon Sep 7 17:03:07 1992 Paul Eggert (eggert@twinsun.com)
+
+ * fold-const.c (fold): Check abs for constant integer overflow.
+
+Mon Sep 7 01:31:42 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-common.c (check_case_value): Call constant_expression_warning.
+
+ * cse.c (simplify_binary_operation): For DIV by 0, do nothing.
+
+ * c-decl.c (duplicate_decls): Set DECL_INLINE in newdecl
+ so it is copied into olddecl.
+
+Sun Sep 6 08:53:46 1992 Fred Fish (fnf at fishpond)
+
+ * m68k.md (fsglmul pattern): If FSGLMUL_USE_S, opcode has .s, not .x.
+ * amix.h (FSGLMUL_USE_S): Defined.
+
+Sun Sep 6 17:42:33 1992 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.md (indirect_jump): Annul the next instruction if the delay
+ slot could not be filled instead of emitting a nop.
+
+ * pa.c (output_function_prologue): Undo Aug. 13 change.
+ If profiling, then this function makes calls. Reflect this in
+ CALLINFO.
+ (output_function_epilogue): If profiling, then be restore "rp" here.
+
+ * pa.md (use_milli_regs attribute): Deleted, not necessary anymore.
+ All references deleted.
+ * pa.c (use_milli_regs): Deleted.
+
+Sun Sep 6 17:11:00 1992 Torbjorn Granlund (tege@jupiter.sics.se)
+
+ * arm.h (MOVE_MAX): Define as 4.
+
+ * ns32k.c (hard_regno_mode_ok): Don't abort if unknown mode,
+ return 0 instead. Declare argument MODE as `enum machine_mode'.
+
+ * i860.h (HARD_REGNO_MODE_OK): Allow BLKmode.
+
+Sun Sep 6 16:57:12 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (init_expr_once): Don't try HARD_REGNO_MODE_OK on VOIDmode
+ or BLKmode.
+
+Sun Sep 6 14:27:57 1992 Michael Meissner (meissner@osf.org)
+
+ * cp-typeck.c (constant_expression_warning): New fn from c-typeck.c.
+
+Sun Sep 6 09:11:46 PDT 1992 Ron Guilmette (rfg at netcom.com)
+
+ * c-decl.c (duplicate_decls): Don't set DECL_EXTERNAL in olddecl.
+ Preserve DECL_UID of olddecl.
+
+Sun Sep 6 03:37:21 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (cmpstrsi): Rewrite expander to handle operands correctly.
+
+Sat Sep 5 22:55:53 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): Make change missing from last modification
+ to splitting code.
+
+Sat Sep 5 19:21:03 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * stor-layout.c (layout_type): Caller must give size of FILE_TYPE.
+
+Sat Sep 5 16:34:50 1992 Torbjorn Granlund (tege@jupiter.sics.se)
+
+ * arm.c (before functions): Remove xmalloc decl.
+ (arm_asm_output_label): Cast value from xmalloc.
+
+ * arm.md (storehi): Use match_operand for operand 0.
+ Use gen_lowpart to change mode of operand 0.
+ (storeinthi): Use match_operand for operand 0.
+ Change output code to reassign operand 0.
+ (truncsihi2, truncsiqi2, trunchiqi2): Remove these patterns.
+
+Sat Sep 5 02:39:37 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * news.h (ASM_OUTPUT_OPCODE): Defined.
+
+Sat Sep 5 18:52:21 1992 Jukka Virtanen (jtv@kampi.hut.fi)
+
+ * stor-layout.c (layout_type): Handle BOOLEAN_TYPE, CHAR_TYPE,
+ and FILE_TYPE for Pascal.
+ (fixup_signed_type): New function.
+
+ * optabs.c (init_optabs): Use __gcc_bcmp, not real bcmp.
+ (expand_unop): Handle NEG for complex modes.
+ (expand_binop): Likewise.
+ (expand_complex_binop): New function.
+
+ * expr.c (emit_move_insn): When moving word by word,
+ mark the whole thing as a libcall block.
+ (group_insns): New function.
+ (expand_expr):
+ Implement COMPLEX_EXPR, REALPART_EXPR, IMAGPART_EXPR, CONJ_EXPR.
+
+ * print-tree.c (print_node): Handle BOOLEAN_TYPE and CHAR_TYPE.
+ * emit-rtl.c (gen_highpart): New function.
+
+Fri Sep 4 23:20:59 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * i860.md (mulsi3_big): Use low half of result.
+ Use offset 1 in subregs in actual fmlow insn.
+ (fmlow pattern): Split this into alternatives for big and little end.
+
+ * regclass.c (record_reg_class): For matching operands, handle
+ case where the earlier one is not a pseudo like the case
+ where the later one is not a pseudo.
+
+Fri Sep 4 17:24:11 1992 Torbjorn Granlund (tege@jupiter.sics.se)
+
+ * pa.c (output_move_double): Use %R to store at auto-incr/decr
+ addr. Split incr and decr cases for store.
+
+Fri Sep 4 03:49:05 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (main): No program should return the error_count!
+ Return 2 if failure due to signal, 1 if just errors.
+ (execute): Increment signal_count.
+
+ * move-if-change: Undo previous change.
+
+ * c-decl.c (grokparms): Copy arg type list to savable obstack if nec.
+
+Fri Sep 4 19:40:32 1992 Paul Eggert (eggert@twinsun.com)
+
+ * c-typeck.c (constant_expression_warning): Now works;
+ it reports signed integer overflow in constant expressions,
+
+ * fold-const.c (left_shift_overflows, same_sign, overflow_sum_sign):
+ New macros.
+ (add_double, div_and_round_double, lshift_double, mul_double,
+ neg_double, const_binop, fold): Check for signed integer overflow.
+ Propagate overflow flags from operands to result.
+ (const_binop, fold_convert): Use pedwarn for overflow warnings.
+ Say `constant expression', not `constant folding', for user's sake.
+
+Thu Sep 3 22:28:41 1992 Brendan Kehoe (brendan@mole.gnu.ai.mit.edu)
+
+ Complete 12th Cygnus<-->FSF merge.
+
+ Thu Sep 3 12:29:24 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ These changes are propagated from changes to c-*.c.
+
+ Mon Aug 17 16:28:48 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-decl.c (finish_function): Test only can_reach_end for the
+ warning about reaching the end of a non-void function.
+ (grokdeclarator): When promoting an argument, retain unsignedness
+ if traditional or if promoted type is not really getting wider.
+
+ * cp-parse.y (datadef): For empty declaration, use pedwarn.
+
+ Mon Aug 17 17:08:11 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-cvt.c (convert): When converting to variant of same type, fold.
+
+ Wed Aug 19 16:58:41 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-typeck.c (default_conversion): Convert enumeral types to
+ appropriate _signed_ type unless -traditional.
+
+ Tue Aug 4 13:11:36 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-cvt.c (convert): If main variants match,
+ but the type is not identical, make a NOP_EXPR.
+
+ * cp-decl.c (warn_redundant_decls): Declared.
+ (duplicate_decls): Optionally warn about redundant declations.
+ (pushdecl): Never reuse global fcn decl in place of local extern;
+ just copy some info from it.
+ (init_decl_processing): __builtin_saveregs returns void *.
+ (store_parm_decls, finish_function, start_method, finish_method):
+ Compare TYPE_MAIN_VARIANT against void_type_node.
+
+ * cp-decl2.c (warn_redundant_decls): Defined.
+ (lang_decode_option): Decode -Wredundant-decls.
+
+ * cp-typeck.c (build_conditional_expr): Don't use type1 as
+ temporary variable; set result_type directly.
+
+ Tue Aug 4 12:04:17 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-tree.h (C_PROMOTING_INTEGER_TYPE_P): Defined.
+ * cp-class.c (finish_struct): Use it.
+ * cp-decl.c (duplicate_decls, grokdeclarator): Ditto.
+ (grokparms, start_function): Ditto.
+ * cp-typeck.c (self_promoting_args_p, default_conversion): Ditto.
+ * cp-parse.y (primary): Set TREE_CONSTANT in the NOP_EXPR for an enum.
+
+ Tue Aug 4 09:17:32 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-decl.c (duplicate_decls, grokdeclarator, grokparms):
+ Use TYPE_MAIN_VARIANT when comparing against specific types.
+ (build_enumerator): Use STRIP_TYPE_NOPS.
+ (start_function): Force main() to return "int", not just any
+ integral type.
+
+ * cp-typeck.c (self_promoting_args_p, default_conversion):
+ Use TYPE_MAIN_VARIANT when comparing against specific types.
+ (unsigned_type, signed_type): If type is not known, return it
+ unchanged instead of returning its TYPE_MAIN_VARIANT.
+ (build_binary_op_nodefault): Use TYPE_MAIN_VARIANT when
+ comparing against specific types. Also use STRIP_TYPE_NOPS.
+ Also copy error messages from equivalent code in c-typeck.c.
+
+ * cp-parse.y (primary): Wrap a NOP_EXPR around an enum value.
+
+ Wed Sep 2 18:06:47 1992 Mike Stump (mrs@cygnus.com)
+
+ Wed Sep 2 17:33:59 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-decl.c (grokdeclarator): Default friends to being PUBLIC.
+
+ Tue Sep 1 12:33:01 PDT 1992 Ron Guilmette (rfg at netcom.com)
+
+ * cp-init.c (do_friends): Always return `void_type_node'.
+
+ * cp-decl.c (grokparms): Call digest_init on default arguments for
+ formal parameters.
+
+ * cp-decl.c (xref_tag): The BINFO records describing individual
+ inheritances aren't shared in the lattice.
+
+ Tue Sep 1 12:27:17 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-call.c (convert_harshness, compute_conversion_costs): The
+ READONLY flag for a const object could be down in the type of the
+ reference.
+
+ * cp-call.c (compute_conversion_costs): Don't ignore the cost of
+ converting the first argument, if it is not a method. Fixes Mon Aug
+ 31 22:32:34 change.
+
+ Tue Sep 1 11:58:52 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-tree.h (THIS_NAME): Use the name ``this'' instead of the more
+ cryptic name ``$t''.
+
+ Mon Aug 31 22:32:34 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-init.c (build_member_call): When forming method calls that use
+ a qualified name, convert the instance pointer to the type implied
+ by the qualification. Base::member_func(); converts this to be a
+ (Base *).
+
+ * cp-call.c (compute_conversion_costs): Don't penalize conversion
+ of the instance pointer on method calls, as they could be pointers
+ to base classes.
+
+ Mon Aug 31 18:34:33 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * cp-decl.c (start_function): When a friend function is being
+ defined, put it in (lexical) scope of the class in which it appears.
+
+ Mon Aug 31 09:57:27 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * cp-typeck.c (build_modify_expr): For assignments to member
+ variables like "X::i", call resolve_offset_ref to get the lhs; all
+ the code and checking was in there, it just wasn't being used.
+
+ * cp-class.c (finish_struct_methods): Give the name of the class
+ in question when reporting that all its member functions are
+ private.
+
+ Sun Aug 30 08:34:03 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-decl2.c (setup_vtbl_ptr): Disable the code, until problems can
+ be worked around.
+
+ Sat Aug 29 10:34:10 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-init.c (emit_base_init): Undo Sat Jan 18 12:06:58 change by
+ tiemann that incorrectly makes -pedantic initialization of virtual
+ base classes 1 or more levels deep impossible.
+
+ Sat Aug 29 10:03:07 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-class.c (finish_struct): Allow extern "C" functions to be
+ friends.
+
+ Sat Aug 29 04:43:22 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-parse.y (used_extern_spec), cp-decl.c (start_decl,
+ start_function): Make sure extern in extern "C" (fndef | datadef)
+ applies to only one decl. Fixes problem introduced on Thu Aug 20
+ 16:11:58.
+
+ Thu Aug 27 09:33:13 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Name operators properly when
+ complaining about trying to declare it as a method when not in a
+ class.
+
+ * cp-decl.c (grok_reference_init): Forbid volatile->const refs,
+ and vice-versa. Also make the tests apply to all types, not just
+ aggregates. (Now fully compliant with ANSI C++ June 5 1996 WP
+ section 8.4.3.5.)
+
+ * cp-decl.c (shadow_tag): Don't allow a function to be a member of
+ an anonymous union.
+
+ * cp-class.c (finish_struct): For a type that's nested within a
+ class, use the class value itself when checking a typedef that uses
+ that new nested type.
+
+ Wed Aug 26 20:24:07 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ * cp-decl.c (decls_match): When converting from a
+ pseudo-METHOD_TYPE for a static member fn, handle the static
+ function being both in the new and old declarations.
+ (revert_static_member_fn): New function.
+
+ * cp-call.c (build_method_call): Put out proper line number for
+ error with the use of a private constructor.
+
+ * cp-decl.c (grokdeclarator): If a storage class is erroneously
+ specified for an operator, print the operator's name out properly in
+ the error message (e.g., print `+' instead of `__pl').
+
+ * cp-decl.c (grokdeclarator): Allow neither constructors nor
+ destructors to be declared const or volatile.
+
+ * cp-decl.c (grok_op_properties): New argument VIRTUALP.
+ Use it to disallow declaring new or delete as virtual. Also
+ use coerce_new_type() and coerce_delete_type() to
+ sanity-check overloading of new and delete.
+ (grokfndecl): Give grok_op_properties if the decl is virtual.
+ (start_method): Likewise.
+
+ * cp-tree.c (lvalue_p, ADDR_EXPR case): Casts to references are
+ lvalues.
+
+Thu Sep 3 02:46:44 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * caller-save.c (setup_save_areas): Don't look at WORDS_BIG_ENDIAN.
+
+ * fixincludes: If we find a link pointing to ., make a similar
+ link to ., not a link to an absolute name.
+ (stdio.h): Change stdio.h to use stdarg.h to get va_list.
+
+ * cexp.y: Comment syntax fix.
+
+Thu Sep 3 01:48:16 1992 Torbjorn Granlund (tege@jupiter.sics.se)
+
+ * we32k.md (casesi): Use match_dup for second mention of operand 4.
+
+Wed Sep 2 06:58:32 1992 Michael Meissner (meissner@osf.org)
+
+ * gcc.c (default_compilers): Add missing comma between strings, so
+ that traditional compilers can compile gcc.c.
+ (main): Don't pass strcpy or strlen a NULL pointer if some of the
+ spec strings in default_compilers are NULL.
+ (validate_all_switches): Don't dereference a NULL pointer if some of
+ the spec strings in defalut_compilers are NULL.
+
+ * gcc.c (main): Use new loop var J to avoid conflict with I.
+
+Wed Sep 2 19:09:02 1992 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * caller-save.c (init_caller_save): If we were unable to
+ find a simple insn which meets all its constraints to save
+ and restore with a single insn in a mode, then set
+ regno_save_mode to VOIDmode to insure that this mode is never
+ used to caller-save the current register.
+
+Wed Sep 2 12:34:39 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * caller-save.c (insert_save_restore): Correct test for
+ determining whether multiple registers can be saved.
+
+ * sparc.md (SImode ldd peepholes): Add `f' to constraints.
+
+ * sparcv4.h (HANDLE_PRAGMA): Delete.
+ * sparc.c (handle_pragma_token): Delete.
+
+ * config/spc-sol2.h: Change the location of the Sun bundled C
+ compiler in MD_STARTFILE_PREFIX (for backup defaults).
+
+Wed Sep 2 09:11:16 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * m88k.h (MOVE_MAX): Express in bytes not bits.
+
+ * m88k.c (output_ascii): Output known escape characters and don't
+ terminate the constant if an octal escape is used.
+
+Wed Sep 2 06:38:37 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (make_compound_operation, case ASHIFTRT): Add new
+ code to handle (ashiftrt (neg (ashift FOO C1) C2)) just like we
+ currently handle (ashiftrt (OP (ashiftrt FOO C1) C2) C2).
+
+Wed Sep 2 00:15:42 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (install): Add semicolon to make an empty command.
+
+ * reload.c (find_reloads): If have any earlyclobbers, don't let any
+ reloads overlap with them. Make everything RELOAD_OTHER.
+
+ * move-if-change: Give status 1 if file is unchanged.
+
+ * Makefile.in (SYSTEM_HEADER_DIR): New variable.
+ (xlimits.h): New target, broken out from install-limits-h.
+ Look in SYSTEM_HEADER_DIR for system's limits.h.
+ (start.encap): Dep on xlimits.h.
+ (install-limits-h): Install xlimits.h already made.
+ * cross-make (SYSTEM_HEADER_DIR): Overridden.
+
+ * x-i386sco (X_CFLAGS): Deleted.
+ * x-i386sco4: New file, like old x-i386sco.
+ * configure (i386-*-sco3.2v4*): Use x-i386sco4.
+
+ * t-sol2 (gmon.o): Find gmon-sol2.c in config.
+
+ * c-typeck.c (process_init_constructor): Fix bugs in previous change.
+
+Tue Sep 1 23:51:19 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * gcc.c (default_compilers, ".C" and ".ii"): Pass `+e*' into cc1plus.
+ (process_command): Allow +e[012] to be passed down into cc1plus.
+ * cp-decl.c (lang_decode_option): The options `+e0' thru `+e2' will
+ be coming in prefixed as `-+e'.
+
+Tue Sep 1 20:09:29 1992 Paul Eggert (eggert@twinsun.com)
+
+ * print-tree.c (print_node): Avoid 1 << (HOST_BITS_PER_INT - 1),
+ which overflows. Use unsigned % to compute HASH.
+
+Tue Sep 1 17:23:28 1992 Tim Moore (moore@hal)
+
+ * pa.h (CPP_SPEC, TARGET_SWITCHES): new flags: -mnosnake,
+ -mpa-risc-1-0, -mpa-risc-1-1.
+ (ASM_DECLARE_FUNCTION_NAME): Emit argument descriptors for all
+ general registers if current_function_varargs.
+
+Tue Sep 1 11:27:08 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * sparc.c (handle_pragma_token): Only use if HANDLE_SYSV_PRAGMA
+ isn't defined. (We'll be getting the fn from c-pragma.c, then.)
+
+Sat Aug 29 13:44:21 PDT 1992 Ron Guilmette (rfg at netcom.com)
+
+ * tree.h (current_block): Decl deleted.
+ (set_block): Declared.
+ * stmt.c (expand_fixup): Create a BLOCK node (via pushlevel/poplevel)
+ to represent an artificial scope containing all of the fixup code.
+ Also emit NOTE_INSN_BLOCK_BEG/NOTE_INSN_BLOCK_END for that block.
+ (fixup_gotos): Declaration of NEWBLOCK deleted.
+ Call `set_block' to use the BLOCK made in expand_fixup.
+ Deleted code to insert NEWBLOCK into block hierarchy.
+ * c-decl.c, cp-decl.c (current_block): Function deleted.
+ (set_block): New function.
+ (poplevel): If using a previously created block,
+ don't insert it into the parent level.
+ * emit-rtl.c (emit_insns_after): Update last_insn if nec.
+
+Tue Sep 1 10:53:58 1992 Torbjorn Granlund (tege@jupiter.sics.se)
+
+ * pa.c (output_move_double): Use `ldo' for immediate adds (instead
+ of `addi' with bad syntax).
+ (output_load_address): Likewise.
+
+Tue Sep 1 02:41:13 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * tree.h (struct tree_type): Make `align' field an int.
+
+ * c-tree.h (IDENTIFIER_LIMBO_VALUE): New macro.
+ (struct lang_identifier): New field limbo_value.
+
+Mon Aug 31 12:59:22 PDT 1992 Ron Guilmette (rfg at netcom.com)
+
+ * tree.c (make_node): Fix typo in July 6 change:
+ assignment of DECL_IN_SYSTEM_HEADER was inserted in bad place.
+
+Mon Aug 31 21:28:08 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sched.c (sched_analyze_2): Remove an explicit dependence between
+ an insn that uses CC0 and the immediately previous insn
+ (SCHED_GROUP_P represents the dependence).
+ (schedule_block): Only check sets_cc0_p on an insn.
+
+Mon Aug 31 15:32:13 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (struct compiler): spec field is now array of 4 elements.
+ (read_specs): Clear the entire new element of compilers.
+ (lookup_compiler): Copy all of spec array. Check element 0 for @.
+ (main): Concatenate all elements of compiler spec.
+ (validate_all_switches): Validate from all elements of compiler spec.
+ (default_compilers): Split CPP commands into separate strings.
+
+Mon Aug 31 10:06:16 1992 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * caller-save.c (restore_referenced_regs): When restoring a
+ referenced hard register, use CEIL instead of a truncating divide
+ to determine the maximum number of registers to restore.
+ (insert_save_restore): Document maxrestore parameter.
+ (CEIL): Define.
+
+Mon Aug 31 04:02:21 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fold-const.c (const_binop): Delete special case for mult by 3.
+
+ * toplev.c (lang_options): Add terminating zero.
+
+ * configure.bat: Remove version number from initial message.
+
+Sun Aug 30 17:22:11 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * cccp.c (do_pragma): In prev. change, really use U_CHAR *, not char *.
+
+ * aix386.h, i386gas.h, i386sun.h, i386v.h, i386v4.h, i386vgas.h,
+ seq386.h (TARGET_DEFAULT,VALUE_REGNO,FUNCTION_VALUE_REGNO):
+ Move from here,
+ * unx386.h (TARGET_DEFAULT,VALUE_REGNO,FUNCTION_VALUE_REGNO):
+ To here.
+ (TARGET_DEFAULT): Make TARGET_IEEE_FP default on.
+ (VALUE_REGNO): Test for MODE_FLOAT instead of specific modes.
+ (VALUE_REGNO,FUNCTION_VALUE_REGNO): MODE_FLOAT return reg depends on
+ TARGET_FLOAT_RETURNS_IN_80387.
+
+ * i386.h (TARGET_FLOAT_RETURNS_IN_80387): New macro.
+ (TARGET_SWITCHES): Add "no-80387", "no-soft-float",
+ "fp-ret-in-387", and "no-fp-ret-in-387".
+ Change no* switches to no-*.
+ (CONDITIONAL_REGISTER_USAGE): Make 387 regs fixed if the 387 is not
+ used at all.
+ (REG_CLASS_FROM_LETTER): Constraint letters 'f', 't' and 'u' are
+ NO_REGS if the 387 is not used.
+ (TRAMPOLINE_TEMPLATE): Use GEN_INT to generate const_int rtx.
+
+ * x-i386v4: New file.
+ (CLIB): Get alloca from libucb.a.
+ * configure (i386-*-sysv4*): Use x-i386v4.
+
+Sun Aug 30 15:32:54 1992 Dennis Glatting (dglattin at trirex.com)
+
+ * objc-actions.c (create_builtin_decl): Set TREE_STATIC.
+ Don't set DECL_EXTERNAL or TREE_PUBLIC.
+
+Sun Aug 30 03:08:48 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-parse.y (initlist): Handle ranges of array elements.
+ * c-typeck.c (process_init_constructor): Handle ranges.
+
+ * fixincludes: When link points to a dir $dirname outside $INPUT,
+ copy that dir into $LIB/root$dirname. Translate the link itself
+ into a link to that new dir. Make a file DONE in each treetop dir
+ so no treetop is scanned twice. Improve progress messages.
+
+Sat Aug 29 22:41:49 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.h (ASM_FILE_START): Object file version number now 8.0.
+
+ * alpha.h (ADJUST_COST): New macro.
+ * alpha.c (alpha_adjust_cost): New function.
+ * alpha.md: Adjust function unit delays and more precisely
+ describe function units.
+
+ * alpha.h (CONST_OK_FOR_LETTER_P): Add new letters `O' and `P'.
+ * alpha.c (print_operand, case 'P'): New case.
+ * alpha.md (ashldi3): Special-case shifts by 1, 2, and 3 bits to
+ use arithmetic instructions.
+ Add pattern for sign-extending shifts by 1, 2, and 3 bits.
+
+ * alpha.h (INITIALIZE_TRAMPOLINE): Use Pmode when appropriate.
+ (FUNCTION_MODE): Use Pmode.
+
+ * alpha.md (div/mod): Indicate that reg 27 is clobbered too.
+
+ * alpha.md (cmov): Add define_split for if_then_else/plus case.
+
+ * expr.c (emit_library_call): Pass correct number of args to
+ convert_to_mode.
+
+ * expr.c (emit_block_move): Eliminate unnecessary test against
+ HOST_BITS_PER_WIDE_INT.
+
+ * optabs.c (expand_{binop,unop}): Don't make invalid
+ paradoxical SUBREGs.
+
+ * genattrtab.c (RTL_HASH, attr_rtx): Avoid warnings by casting
+ pointers to HOST_WIDE_INT instead of int.
+
+
+Sat Aug 29 15:35:58 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * toplev.c (lang_options): New table.
+ (main): Recognize all language-dependent options of any language
+ and always treat them as language-specific and valid.
+
+ * c-decl.c (c_decode_option): -fnotraditional really undoes
+ -ftraditional. Handle -fno-traditional also.
+
+Sat Aug 29 00:34:01 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * reg-stack.c (record_reg_life): Mark an unused reg as such, even
+ if it appears in SET_SRC.
+
+Fri Aug 28 17:40:49 1992 John F Carr (jfc at Athena.MIT.EDU)
+
+ * tree.c (chainon): Check for op2 being the last elt of the chain.
+
+Fri Aug 28 13:26:56 PDT 1992 Ron Guilmette (rfg at ncd.com)
+
+ * cccp.c (do_pragma): Use rindex, not strrchr.
+
+ * tree.h (BLOCK_END_NOTE): Macro definition added.
+ (struct tree_block): `end_note' field added.
+ * stmt.c (last_block_end_note): New variable.
+ (remember_end_note): New function.
+ (expand_end_bindings): Save NOTE_INSN_BLOCK_END in last_block_end_note.
+ * c-decl.c, cp-decl.c (poplevel): Call `remember_end_note' for each
+ newly created BLOCK node.
+ * integrate.c (adjust_copied_decl_tree): New function.
+ (save_for_inline_copying): When making copies of NOTE_INSN_BLOCK_END
+ notes, stash a "forwarding" pointer in the original to point to the
+ copy. Also, when all BLOCKs & insns for a function have been copied,
+ call `adjust_copied_decl_tree' to fixup the end_note pointers in the
+ copied BLOCKs.
+
+Fri Aug 28 13:25:59 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (do_pragma): In prev. change, use U_CHAR *, not char *.
+
+Fri Aug 28 09:11:56 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * m88k.h (ADJUST_COST): Add definition.
+
+Thu Aug 27 18:27:02 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * c-decl.c (init_decl_processing): Add sin and cos as built-in
+ functions.
+ * expr.c (expand_builtin): Likewise.
+
+ * expr.h (sin_optab,cos_optab): Declare optabs for sin and cos.
+ * optabs.c (sin_optab,cos_optab): Define them.
+ (init_optabs): Initialize them.
+
+ * tree.h (BUILT_IN_SIN,BUILT_IN_COS): New builtin codes.
+
+ * reg-stack.c (record_note_if_dead): Delete function.
+ (record_reg_life_pat): Rewrite to handle any sort of pattern.
+ (record_reg_life): Change interface to record_reg_life_pat.
+
+ (stack_reg_life_analysis): Don't assume that MODE_FLOAT values are
+ always returned in a float reg.
+
+ (subst_stack_regs_pat): Add support for sin and cos insns.
+
+ * i386.c (all gen_rtx (CONST_INT) references): Use GEN_INT to
+ generate const_int rtx.
+ (legitimize_pic_address): Pass NULL_RTX instead of "0" as pointer.
+
+ * i386.md (all patterns): Use GEN_INT instead of gen_rtx to get
+ const_ints.
+ Avoid double-negative "! NON_*" constructs for clarity.
+ Pass NULL_PTR as null parameter instead of 0.
+
+ (sqrtM2): Patterns are only valid if IEEE FP or -ffast-math.
+ (sinM2,cosM2): New patterns.
+ (zero_extract test): New pattern.
+ (movstrsi): Rewrite expander to handle operands correctly.
+
+Thu Aug 27 16:58:09 1992 Michael Meissner (meissner@osf.org)
+
+ * genattrtab.c (MAX_DIGITS): New macro to gauge how much space we
+ need to reserve when printing integers.
+ (expand_delays): Use sizeof and MAX_DIGITS to properly size the
+ strings when calling attr_printf.
+ (expand_units): Ditto.
+ (encode_units_mask): Ditto.
+ (make_numeric_value): Ditto.
+ (oballoc): New macro, to allocate from the hash_obstack.
+ (convert_const_symbol_ref): Call oballoc instead of xmalloc.
+ (get_attr_value): Ditto.
+ (fill_attr): Ditto.
+ (make_length_attrs): Ditto.
+ (gen_attr): Ditto.
+ (gen_insn): Ditto.
+ (gen_delay): Ditto.
+ (gen_unit): Ditto.
+ (find_attr): Ditto.
+ (main): Ditto.
+
+Thu Aug 27 14:47:16 1992 Mike Stump (mrs@mole.gnu.ai.mit.edu)
+
+ * cp-decl.c (curent_block, struct binding_level, poplevel): Copy
+ Tue Aug 25 16:29:47 and Wed Aug 26 01:56:30 changes in c-decl.c by
+ rms.
+
+Thu Aug 27 01:32:11 1992 Paul Eggert (eggert@twinsun.com)
+
+ * c-lex.c, cp-lex.c (readescape): DEL isn't printable.
+ * c-typeck.c (check_format): Likewise.
+
+Wed Aug 26 20:42:36 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-lex.c (readescape): For \x, don't include leading 0's in count.
+
+ * c-decl.c (init_decl_processing): Fix type of __builtin_constant_p.
+
+ * expr.c (emit_block_move): When trying movstrMM, cvt size to mode MM.
+
+ * c-parse.y (stmt): For computed goto, convert arg to void *.
+
+ * fold-const.c (fold): Do A op C1 ? A : C2 opt only for INTEGER_TYPEs.
+
+Wed Aug 26 20:19:56 1992 Mike Stump (mrs@wombat.gnu.ai.mit.edu)
+
+ * cp-decl.c (insert_block, delete_block): New functions.
+ * cp-parse.y (primary, using compstmt): Call delete_block instead
+ of clearing TREE_USED.
+
+ 11th Cygnus<-->FSF merge.
+
+ Wed Aug 26 12:02:41 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-decl.c (finish_function): Don't core dump when a conversion is
+ ambiguous.
+
+ Tue Aug 25 16:32:42 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-init.c (build_new), cp-typeck.c (build_c_cast): Handle ``new
+ type ( ... )'' better. Default constructors and better error
+ checking.
+
+ Tue Aug 25 01:21:48 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl2.c (finish_file): Mark " @%$#@!" as being internal.
+
+ Mon Aug 24 16:40:15 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ * cp-lex.c (check_newline): For `#pragma implementation', use
+ strcmp to check if it was done at the top level, rather than relying
+ on the pointers being the same.
+
+ Mon Aug 24 20:48:16 1992 Mike Stump (mrs@cygnus.com)
+
+ Fri Aug 21 14:19:27 1992 Ron Guilmette (rfg at ncd.com)
+
+ * cp-decl2.c (grokclassfn): Mark the artificial `this' parameter as
+ "artificial".
+
+ Thu Aug 20 22:59:16 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-spew.c (arbitrate_lookup): Make sure the type name in an
+ argument list followed by &, or &) is seen as a type name, even when
+ there is an enumeration constant with the exact same name.
+
+ Thu Aug 20 21:58:30 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-search.c (get_first_matching_virtual): Don't core dump when a
+ declaration of a static member is seen with the same name as a base
+ class virtual function.
+
+ Thu Aug 20 21:20:31 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (finish_function): Don't core dump on parse errors.
+
+ Thu Aug 20 20:52:43 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-method.c (build_component_type_expr): Don't core dump on parse
+ errors.
+
+ Thu Aug 20 18:31:58 1992 Mike Stump (mrs@cygnus.com)
+
+ Mon Aug 17 17:08:11 1992 Chip Salzenberg (chip@tct.com)
+
+ Copy some changes from the C front-end:
+
+ * cp-type2.c (process_init_constructor): Warn about partly bracketed
+ initializers.
+ * cp-typeck.c (build_component_ref): Don't warn for compound and
+ conditional expressions when pedantic. These are valid in ANSI C.
+
+ Thu Aug 20 16:11:58 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (start_decl), cp-parse.y (have_extern_spec): extern "C"
+ int i; is only a declaration, but a definition, make it so.
+
+ Thu Aug 20 14:46:39 1992 Mike Stump (mrs@cygnus.com)
+
+ Thu Aug 20 02:36:39 1992 Ron Guilmette (rfg at ncd.com)
+
+ * cp-lex.c (cons_up_default_function): Use DECL_SOURCE_LINE = 0 for
+ compiler generated things, not DECL_IGNORED_P.
+
+ Thu Aug 20 13:13:45 1992 Mike Stump (mrs@cygnus.com)
+
+ Wed Aug 19 13:09:45 1992 Ron Guilmette (rfg at ncd.com)
+
+ * cp-decl.c (grokdeclarator): Propagate some changes from the C
+ front-end to deal with variable sized arrays.
+
+ Wed Aug 19 16:55:43 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-cvt.c (convert_to_reference): Improve wording on error message.
+ * cp-method.c (type_as_string), cp-pt.c
+ (mangle_class_name_for_template), cp-xref.c (GNU_xref_decl): Delete
+ first argument to type_as_string as it is not needed anymore.
+
+ Wed Aug 19 15:29:02 1992 Mike Stump (mrs@cygnus.com)
+
+ Wed Aug 19 13:09:45 1992 Ron Guilmette (rfg at ncd.com)
+
+ * cp-decl.c (kept_level_p): Update from C frontend.
+
+ Wed Aug 19 14:47:08 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl2.c (groktypefield): Old style conversion operators
+ are being desupported. Conversion operators much have an
+ `operator' in front of them.
+
+ Wed Aug 19 01:57:04 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-call.c (ideal_candidate): Fix bug introduced on Jan 21
+ 7:24:21. Warn about ambiguous function calls with multiple
+ same cost conversions.
+
+ Wed Aug 19 00:08:18 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (grok_enum_decls): Remove invalid error message.
+
+ Mon Aug 17 18:59:18 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-cvt.c (convert_to_reference, convert,
+ build_type_conversion_1, build_type_conversion), cp-init.c
+ (build_dynamic_new), cp-typeck.c (build_modify_expr_1,
+ convert_for_initialization): Always use constructor_name, and
+ never TYPE_IDENTIFIER (type) and similar things.
+ * cp-init.c (expand_aggr_init_1): Try TYPE_HAS_CONSTRUCTOR
+ before wasting time trying build_method_call.
+ * cp-xref.c: Don't include memory.h.
+
+ Mon Aug 17 15:10:21 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-init.c (expand_aggr_init_1): Check for ambiguous
+ conversion. One through constructor and the other through a
+ user defined conversion operator.
+
+ Mon Aug 17 11:51:27 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-call.c (convert_harshness): When an argument is T, a T&
+ should be choosen over a const T& when selecting overloaded
+ functions.
+
+ Mon Aug 17 01:37:06 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-call.c (build_method_call): The second argument to
+ operator delete is sometimes magically deleted.
+ * cp-decl.c (init_decl_processing, grokfndecl): Global
+ operator delete never has two arguments.
+
+ Wed Aug 5 18:54:19 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-class.c (finish_struct), cp-tree.c (layout_basetypes):
+ Make sure VFIELD_BASEs are aligned. This fixes a really
+ annoying problem that causes code that uses complex
+ inheritance hierarchies that have virtual bases to get a
+ segmentation fault.
+
+ Wed Aug 5 12:35:07 1992 Mike Stump (mrs@cygnus.com)
+
+ Wed Aug 5 08:10:34 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * cp-tree.c (__eprintf): `line' is unsigned.
+ * cp-lex.c: Include stdlib.h and locale.h if needed.
+ * cp-typeck.c (mark_addressable): Use DECL_EXTERNAL not
+ TREE_EXTERNAL.
+
+ Wed Aug 5 03:20:07 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-class.c (finish_struct_methods): Check to make sure
+ operator delete is not overloaded.
+ * cp-decl.c (grokfndecl): Check to make sure operator delete
+ is declared properly.
+
+ Tue Aug 4 16:52:28 1992 Mike Stump (mrs@cygnus.com)
+
+ Mon Aug 3 22:55:04 1992 Michael Meissner (meissner@osf.org)
+
+ * cp-decl.c (grokdeclarator): Make sure const and volatile get
+ put on the type built when building reference types.
+ * cp-parse.y (attrib): tree_cons takes three arguments, not
+ two.
+ * cp-tree.h: Add hash_chainon, build_virtual_init,
+ build_vbase_delete, build_vbase_vtables_init.
+ * cp-typeck.c (build_modify_expr_1. build_modify_expr):
+ build_unary_op takes three arguments, not two.
+
+ Tue Aug 4 16:07:57 1992 Mike Stump (mrs@cygnus.com)
+
+ Sat Aug 1 16:52:20 1992 John Carr (jfc@Athena.MIT.EDU)
+
+ * cp-decl.c (): Make sure the base type of an ARRAY_TYPE is
+ layedout before using it.
+
+Wed Aug 26 17:04:45 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * tree.h (current_block): Declared.
+
+Wed Aug 26 15:42:11 1992 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ Major rework to have caller-saves emit load/store double insns when
+ possible and to avoid useless resaving of registers restored for
+ source accesses only.
+ * caller-save.c (toplevel): All arrays are multi-dimensional to
+ hold information for multiple save/restore insns. New variable
+ hard_regs_need_restore.
+ (choose_hard_reg_mode): New argument `nregs' indicating how many
+ hard registers are desired. All callers changed.
+ (init_caller_save): Change initialization to handle multiple
+ register saves. A call-used register can not be live across
+ if we can not find a single register mode to save it in.
+ (multiple register saves are optional)
+ (init_save_areas): Change initialization of regno_save_mem to
+ handle multiple register saves.
+ (setup_save_areas): Allocate space for consecutive hard registers
+ in aligned consecutive memory locations. When allocating space
+ for consecutive hard registers, also initialize regno_save_mem
+ for each hard register stored as a single word.
+ (save_call_clobbered_regs): Initialize hard_regs_need_restore.
+ Set hard_regs_need_restore to hard_regs_saved after crossing
+ a call. Also recompute n_regs_saved. At the end of a basic block
+ we need only restore registers in hard_regs_need_restore.
+ (set_reg_live, clear_reg_live): Do the right thing for
+ hard_regs_need_restore and hard_regs_saved.
+ (restore_referenced_regs): Just return if X is a clobber.
+ Test hard_regs_need_restore to determine when to restore a hard
+ register from the save area.
+ (insert_save_restore): Now returns the number of extra registers
+ saved/restored. New argument `maxrestore' which constrains how
+ many hard registers should be restored. All callers changed.
+ Do stores of consecutive registers with double store insns if
+ possible. Else do them with single word insns. Likewise for
+ loads, except constrained by maxrestore. Set hard_regs_saved
+ and hard_regs_need_restore appropriately to minimize useless
+ saves into the save area. Test against hard_regs_need_restore
+ when trying to restore multiple regs and similarly test against
+ hard_regs_saved when storing multiple regs.
+
+
+Wed Aug 26 14:24:28 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (LINK_SPEC): Pass -shared, -non_shared on to linker.
+ * mips-bsd.h (LINK_SPEC): Ditto.
+ * mips-n5.h (LINK_SPEC): Ditto.
+ * mips-svr4.h (LINK_SPEC): Ditto.
+ * mips-sysv.h (LINK_SPEC): Ditto.
+ * iris.h (LINK_SPEC): Ditto.
+ * dec-osf1.h (LINK_SPEC): Ditto.
+
+ * dec-osf1.h (DECSTATION): Don't define, since decstatn.h which is
+ included defines it.
+ (OBJECT_FILE_COFF): Undefine, since the DEC OSF/1 ldfcn doesn't
+ look like the coff version.
+
+ * decstatn.h (LINK_SPEC): Don't define if already defined.
+
+Wed Aug 26 13:56:08 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * reorg.c: Enhance to fill the last delay slot of a call with an
+ unconditional jump.
+ (fill_simple_delay_slots): Look for the case of a call/branch
+ first. If this applies, record the jump as `last_delay_insn'.
+ Later, don't look for additional delay insns if the last one has
+ alreay been filled.
+ (mark_target_live_regs): A sequence may end in an unconditional
+ branch.
+
+ * m88k.md (define_function_unit): Correct and simplify memory unit
+ specification.
+
+Wed Aug 26 01:56:30 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (poplevel): Store into BLOCK iff it is non-null.
+
+Tue Aug 25 23:24:45 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sched.c: Add #ifdef INSN_SCHEDULING around variables only used
+ by schedule_insns.
+ (INSN_QUEUE_SIZE): Delete default definition.
+
+ * optabs.c, expr.c: Partially undo Mar 7 change. Only call
+ emit_library_call with no_queue == 1 for const functions.
+
+ * sparc.c (SF_MODES): Allow SImode in fp registers.
+ (output_floatsisf2, output_floatsidf2, output_floatsitf2): Delete.
+ * sparc.h: Delete declarations of the above 3 functions.
+ * sparc.md (float*, fix*): Rewrite to match hardware; take/put
+ integer input/output from/to fp register instead of memory or
+ general register. Delete 6 now obsolete combiner patterns.
+
+Tue Aug 25 16:40:15 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ * cccp.c (do_pragma): Warn if `#pragma implementation "foo.h"' is
+ invoked after "foo.h" has been included.
+
+Tue Aug 25 16:29:47 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * stmt.c (struct goto_fixup): New field context.
+ (fixup_cleanups): Function deleted.
+ (fixup_gotos): Put the fixup in a block, and put that block
+ into its proper place. Use sequences, not reorder_insns.
+
+ * c-decl.c (current_block): New function.
+ (struct binding_level): New field this_block.
+ (poplevel): Use this_block if nonzero, rather than making new BLOCK.
+
+ * sched.c (INSN_QUEUE_SIZE): Add default definition.
+
+Tue Aug 25 15:19:26 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * sched.c (schedule_block): Add a virtual cycle counter CLOCK.
+ Pass CLOCK to schedule_insn.
+ Compute the tail in the scheduling loop, not before it.
+ Enable the stall code that advances the insn queue.
+ Select the insn to schedule and block others with schedule_select.
+ (adjust_priority): Renamed from launch_link.
+ (schedule_insn): Renamed from launch_links.
+
+ * genattrtab.c (struct attr_desc): Add unsigned_p field.
+ (struct function_unit_op): Add issue_delay, conflict_exp, and
+ issue_exp fields. Drop busyexp field.
+ (struct function_unit): Add needs_blockage_function,
+ needs_range_function, issue_delay, and max_blockage fields. Drop
+ costexp, and busy delay fields.
+ (enum operator): Add POS_MINUS_OP, EQ_OP, MIN_OP, RANGE_OP.
+ (operate_exp): Implement new ops.
+ (make_internal_attr): Set unsigned_p based on the value of SPECIAL.
+ (write_attr_get): Function is unsigned when unsigned_p is true.
+ (write_attr_valueq): Write hex value of large constants in a comment.
+ (simplify_by_exploding): Check for EXP having no EQ_ATTR expressions
+ and for all values as the default.
+ (find_and_mark_used_attributes): Add TERMS and NTERMS parameters.
+ (max_attr_value): Allow IF_THEN_ELSE.
+ (simplify_knowing, write_complex_function, extend_range): New
+ functions.
+ (gen_unit): Use local variables to name the fields. Change the
+ meaning of busy-delay to issue-delay.
+ (expand_units): Compute issue_exp. Write attributes for computing
+ `<name>_unit_blockage' and `<name>_unit_blockage_range' functions.
+ Compute max_blockage, and the needs_*_function values.
+ (write_function_unit_info): Write blockage function and conflict cost
+ functions using write_complex_function. Write new function_unit_desc
+ fields.
+ * genattr.c (extend_range, init_range): New functions.
+ (write_units): Add blockage_function, blockage_range_function,
+ max_blockage and max_issue_delay fields to struct function_unit_desc.
+ Drop max_busy_cost field. Write #defines for min/max blockage,
+ issue delay, multiplicity, and simultaneity and for BLOCKAGE_BITS
+ and INSN_QUEUE_SIZE.
+ (main): Compute the new values.
+ * sched.c (insn_queue): Use INSN_QUEUE_SIZE.
+ * rtl.def (define_function_unit): Update documentation.
+
+ * sched.c (insn_units, insn_blockage, insn_tick, unit_last_insn,
+ unit_tick, unit_n_insns): New variables.
+ (schedule_insns): Allocate and initialize insn_tick, insn_units, and
+ insn_blockage.
+ (insn_unit, blockage_range, clear_units, prepare_unit, schedule_unit,
+ actual_hazard_this_instance, actual_hazard, potential_hazard,
+ schedule_select): New functions.
+ (schedule_block): Add dependencies to force insns to remain in order
+ at the end of a block rather than relying on having the scheduler
+ issue them in priority order.
+
+ * sched.c (insn_cost): Add LINK and USED parameters. All callers
+ changed. Supply an ADJUST_COST interface.
+ (insn_cost): Make a dependence from a USE insn free.
+ (priority): Clear the link cost adjustment bits.
+ * rtl.h (LINK_COST_ZERO, LINK_COST_FREE): New macros.
+
+ * genattrtab.c (expand_units): Use the normalized values of the
+ unit's CONDEXP and BUSYEXP.
+
+ * a29k.md (define_function_unit): Change meaning to ISSUE-DELAY.
+ * i960.md (define_function_unit): Change meaning to ISSUE-DELAY.
+ * m88k.md (type attribute, movdi movdf insns): Add loadd.
+ (unit attribute): Delete.
+ (function units): Correct simultaneity values. Break out
+ independent units. Add conflict matrix for the 88100 load double.
+ * mips.md (define_function_unit): Change meaning to ISSUE-DELAY.
+ * pa.md (define_function_unit): Change meaning to ISSUE-DELAY.
+ * sparc.md (define_function_unit): Change meaning to ISSUE-DELAY.
+ Merge FP_MUL, FP_DIV, and FP_SQRT into one function unit.
+
+ * jump.c (delete_computation): Derived from delete_jump.
+ (delete_jump): Use delete_computation.
+
+Tue Aug 25 13:42:19 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * final.c (final_scan_insn): If 2 consec line notes have same line num,
+ can omit one.
+
+Tue Aug 25 13:38:19 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Set Meissner version # to 24.
+ (ASM_FINAL_SPEC): Use %U to get the last file name created with
+ %u, rather than %u.
+ (ARG_POINTER_REGNUM): Use the hardwired register $0 as the
+ argument pointer, instead of the frame pointer, to allow the frame
+ pointer to be the same as the stack pointer after the initial
+ stack allocations. This is to allow GCC generated code to be
+ linked against MIPS shared libraries. The linker rearranges the
+ code, and needs to have a frame pointer, if used, to be the same
+ as the stack. The argument pointer is always eliminated in favor
+ of the stack pointer or frame pointer.
+ (FRAME_GROWS_DOWNWARD): Don't define this any more.
+ (STARTING_FRAME_OFFSET): Locals start after the stack area to pass
+ arguments to called functions.
+ (STACK_DYNAMIC_OFFSET): If function is a leaf function, but calls
+ __builtin_alloca, assume a default argument area, so the MIPS
+ linker doesn't think a second frame pointer is created.
+ (INITIAL_FRAME_POINTER_OFFSET): Don't define, since we use
+ elimination instead.
+ (ELIMINABLE_REGS): Define to eliminate both the stack pointer and
+ frame pointer, since they are now separate.
+ (CAN_ELIMINATE): Ditto.
+ (INITIAL_ELIMINATION_OFFSET): Ditto.
+ (ELIGIBLE_FOR_EPILOGUE_DELAY): Don't allow variables based off of
+ the argument pointer, in addition to frame and stack pointers.
+ (MUST_SAVE_REGISTER): Add in GP_REG_FIRST to 31, in case we ever
+ change the base of the gp registers.
+ (MIPS_STACK_ALIGN): Use ~7, instead of 0xfffffff8.
+
+ * mips.c (number_functions_processed): Delete variable, nobody
+ uses it anymore.
+ (mips_debugger_offset): Add support for the frame pointer being
+ the same as the stack pointer, instead of being the same as the
+ argument pointer. Abort if the address is not based on any of the
+ stack, frame, or argument pointers.
+ (print_operand_address): Add checks for the arg pointer not being
+ eliminated.
+ (function_prologue): Ditto.
+ (mips_expand_prologue): Ditto.
+ (function_epilogue): Ditto.
+ (mips_expand_epilogue): Ditto.
+ (function_epilogue): Strip leading '*' if it exists from
+ current_function_name when printing statistics. Delete increment
+ of number_functions_processed.
+ (compute_frame_size): Don't base extra_size on the macro
+ STARTING_FRAME_OFFSET. If function is a leaf function, but calls
+ __builtin_alloca, allocate an arg area, so that the MIPS linker
+ will not complain about creating a second frame pointer. Move the
+ argument save area beneath local variables.
+
+ * decrose.h (ASM_FINAL_SPEC): Use %U to get the last file name
+ created with %u, rather than %u.
+
+ * gcc.c (do_spec_1): Add %U to return the last name generated with
+ %u. This is for use with mips-tfile, to find the generated object
+ file.
+
+
+Mon Aug 24 18:09:34 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_unary_op): For ADDR_EXPR, just set TREE_CONSTANT
+ if staticp, but don't clear TREE_CONSTANT.
+
+Mon Aug 24 13:52:13 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ * gcc.c (process_command): Don't set verbose_flag if they make a
+ typo (e.g., `-v-E'); only when it's exactly "-v".
+
+Mon Aug 24 06:49:16 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (subst): When moving operation inside IF_THEN_ELSE,
+ make a new rtx instead of using SUBST due to sharing.
+
+ * combine.c (simplify_comparison): Correct test for sign extension
+ when trying to widen comparison.
+
+Sun Aug 23 18:58:33 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fold-const.c (fold): Avoid the normal STRIP_NOPS on arg of NOP_EXPR.
+
+Sun Aug 23 15:32:03 PDT 1992 Ron Guilmette (rfg at netcom.com)
+
+ * stmt.c (expand_end_bindings): Generation of NOTE_INSN_BLOCK_END
+ moved down so that it occurs after call to `expand_cleanups'.
+
+Sun Aug 23 16:24:32 1992 Michael Meissner (meissner@osf.org)
+
+ * decrose.h (CPP_SPEC): Don't define strcmp as __builtin_strcmp in
+ the case neither -fbuiltin nor -fno-builtin were defined.
+ * i386rose.h (CPP_SPEC): Ditto.
+
+Sun Aug 23 02:03:41 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * libgcc2.c (__builtin_new): Cast the result of malloc.
+
+ * toplev.c: Fix typo in prev change.
+
+ * c-decl.c (insert_block, delete_block): New functions.
+ * c-parse.y (primary, using compstmt): Call delete_block
+ instead of clearing TREE_USED.
+ * expr.c (expand_expr): For BIND_EXPR, call insert_block on the block.
+
+Sat Aug 22 14:12:02 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure: Use absolute pathname in value of INSTALL.
+
+Sat Aug 22 06:42:39 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * emit-rtl.c (insn_emit_once): Provide a zero constant for CC modes.
+
+Fri Aug 21 18:33:30 1992 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * reorg.c (fill_simple_delay_slots): Always try to fill empty
+ delay slots with insns from beyond the delay insn, even if
+ optimize_skip was attempted.
+ (fill_simple_delay_slots): When filling with insns from after the
+ delay insn, make sure to always account for the sets and
+ references in the delay insn.
+
+Fri Aug 21 16:47:06 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * sparc.c (print_operand): Use output_operand_error for unknown code.
+
+ * c-typeck.c (build_conditional_expr): Use TREE_READONLY and
+ TREE_THIS_VOLATILE, not TYPE_...
+
+Fri Aug 21 14:02:20 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * reload.c (find_dummy_reload): Restore original RTX instead of
+ passed IN rtx.
+
+Fri Aug 21 07:53:12 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * optabs.c (expand_binop): If, e.g., mulqi3 doesn't exist, try
+ mulqihi3.
+
+ * rs6000.h (FUNCTION_ARG): Don't make an EXPR_LIST if making a libcall.
+
+ * combine.c (subst): Move up test for too many restarts.
+ If we restart, clear OP0_MODE since we don't know it.
+
+Fri Aug 21 02:11:43 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * emit-rtl.c (emit_insns_after): New function.
+
+Fri Aug 21 01:53:04 1992 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.md (call_value+1): For non-dynamic calls, use the "call"
+ attribute, set length to 1, and fix output template to work
+ properly with delay slots.
+
+ * pa.md (address and use_call_clobbered attributes): Deleted,
+ these attributes are useless. All references deleted.
+ (call define delay): Use "in_branch_delay" as the condition since
+ "call" delay slots and unconditional "branch" delay slots allow the
+ same type of insns.
+ (in_call_delay conditional): Deleted.
+ (branch define delay): Do not define an annul-if-true delay slot.
+ It is useless for an unconditional branch.
+ (all delay branch conditionals): Make sure "call", "dyncall", "multi",
+ and "milli" insns are explicitly disallowed in delay slots.
+
+ * pa.c (output_mul_insn): Delete nop after branch in template,
+ conditionally emit a nop if the delay slot was not filled. (via %#)
+
+ * pa.c (output_function_prologue): Handle profiling in a function
+ without a frame pointer.
+
+Thu Aug 20 16:16:40 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * va-m88k.h (__INT_VARARGS_H): Define this to avoid trouble on DG/UX.
+
+Thu Aug 20 11:07:26 1992 Michael Meissner (meissner@osf.org)
+
+ * final.c: Move include of stdio.h before output.h.
+
+Thu Aug 20 01:08:55 1992 Pat Rankin (rankin at eql.caltech.edu)
+
+ Support for bootstrapping cpp & cc1 with VAX C under VMS.
+
+ * xm-vax-vms.h (USE_C_ALLOCA,NO_STAB_H): Define for VAXC.
+ (bcopy,bzero,bcmp,index,rindex): Define as ANSI/SYSV counterparts.
+ (QSORT_WORKAROUND, qsort): New macros, for avoiding buggy
+ qsort in VAXCRTL library.
+ (check_for_full_enumeration_handling,...): Use macros to shorten
+ several external names which are longer than 31 characters to
+ avoid warnings about truncation.
+ (unlink): Remove redundant definition.
+ * vax.c (not_qsort): New function.
+ * cccp.c (toplevel: create_definition): Move forward declaration
+ past the definition of struct macrodef.
+ (strncat): New function.
+ (bcopy, bzero, bcmp): Remove #if VMS code--always use inline C loops.
+ * genrecog.c, reload1.c: Compare enums (preds. codes, mem_mode)
+ explicitly to 0 in conditionals to work-around a VAXC bug that
+ disallows enum as arguments to && and || operators.
+ * getpwd.c (getpwd): Add alternative defn for VMS.
+ * toplev.c (environ): Make declaration conditional.
+ (main: -g debugging setup): Get rid of \ in #if condition.
+ * make-cccp.com,make-cc1.com (CC,CFLAGS,LIBS): Add commented command
+ variants for bootstrapping gcc-cpp and gcc-cc1 with VAXC.
+ * make-cccp.com (alloca): Build alloca.obj from alloca.c if LIBS needs it.
+
+ Not yet installed:
+
+ * machmode.h (FILE_TYPE): For VMS, make sure FILE_TYPE is not
+ defined as a macro, so that VAXC's <stdio.h> won't break tree.h.
+ * genemit.c (gen_exp): #if VAXC, output a newline in front of
+ gen_rtx calls, to prevent excessively long lines in insn-emit.c.
+
+Thu Aug 20 11:32:18 1992 Michael Tiemann (tiemann@mole.gnu.ai.mit.edu)
+
+ * cp-tree.h: Fix incorrect comment about "$this" needing to
+ be lexicographically less than any other identifier.
+
+Thu Aug 20 05:37:00 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * a29k.md (load_multiple): Operand 2 should be a MATCH_OPERAND.
+ (store_multiple_{,no_}bug): Likewise.
+
+ * reorg.c (mark_set_resources): Fix two bugs in last change.
+
+ * expr.c (init_expr_once): Set direct_load and direct_store if SOME
+ hard register can be loaded or stored; not just if the first one
+ we pick can be.
+
+Thu Aug 20 01:40:43 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * combine.c, emit-rtl.c, final.c, gcc.c, genattrtab.c, mips-tfile.c:
+ Put include of stdio.h after GCC header files
+ (for i860-stardent-sysv4).
+ * tree.c: Likewise.
+
+ * fixincludes (stdio.h): Rename va_list to __va_list__ to coexist
+ with gvarargs.h.
+
+Wed Aug 19 21:06:49 1992 Jim Wilson (wilson@cygnus.com)
+
+ * cccp.c (finclude): Increment indepth before calling
+ trigraph_pcp, so that warning uses the correct file name.
+
+Wed Aug 19 07:07:41 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (force_to_mode): Add missing test of and_optab.
+
+ * genconfig.c (have_cmove_flag): New variable.
+ (walk_insn_part): Add new parm NON_PC_SET_SRC; all callers change.
+ Look for IF_THEN_ELSE in a SET_SRC that isn't setting PC and
+ set have_cmove_flag if so.
+ (main): Define HAVE_conditional_move if have_cmove_flag is non-zero.
+ * combine.c (subst, case AND): Only make IF_THEN_ELSE if conditional
+ moves exist.
+
+ * cse.c (find_comparison_args): Look for comparison operations
+ if the second arg is 0 in any mode.
+ (record_jump_cond): Don't make classes equivalent for floating-point
+ equality comparison.
+
+ * local-alloc.c (alloc_qty_for_scratch, block_alloc): Provide
+ alternate code in some cases when REGISTER_CONSTRAINTS is not
+ defined.
+ (requires_inout_p): Only used when REGISTER_CONSTRAINTS is defined.
+
+ * reorg.c (mark_set_resources): Add new parm IN_DEST; add callers
+ changed.
+ Rework to scan an entire insn to look for auto-inc operations.
+
+ * unroll.c (copy_loop_body): Add missing declaration of EXIT_LABEL
+ parameter.
+
+ * function.c (instantiate_decl): New function.
+ (instantiate_decls{,_1}): Call it.
+
+ * combine.c (simplify_comparison): Add a few more cases where we can
+ do the comparison in a wider mode.
+
+ * combine.c (distribute_notes, REG_EQUAL): Don't put back a note
+ with a non-constant expression since it may no longer be valid.
+
+Tue Aug 18 23:07:33 1992 Mike Stump (mrs@cygnus.com)
+
+ * expr.c (expand_expr): The first expansion of a TARGET_EXPR
+ is marked by DECL_RTL (slot) being filled in AND TREE_OPERAND
+ (exp, 1) being wiped-out with a NULL_TREE, not just the
+ DECL_RTL (slot) being filled in.
+
+Tue Aug 18 00:07:23 1992 Dennis P. Glatting (dglattin@trirex.com)
+
+ * objc-actions.c
+ (build_selector_translation_table): NULL-terminate the
+ selector list. Mark _OBJC_SELECTOR_REFERENCES_decl as static,
+ not extern.
+
+Tue Aug 18 21:38:46 1992 Mike Stump (mrs@hal)
+
+ * xcoffout.c (assign_type_number): Skip decls with no name.
+
+ * expr.c (expand_expr): When expanding TARGET_EXPRs, make sure
+ that they are only expanded once, after the first expansion,
+ the rtl can be used without further expansions.
+
+Tue Aug 18 12:58:33 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * x-i386sco (X_CFLAGS): Defined.
+
+ * stmt.c (expand_return): Call emit_queue in ignore-the-value case.
+ (expand_end_bindings): Check DECL_IN_SYSTEM_HEADER for unused warnings.
+
+ * combine.c (simplify_comparison):
+ Rearrange conditional in SUBREG case.
+
+Tue Aug 18 06:49:43 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * cccp.c (HOST_WIDE_INT): Copy definition from machmode.h.
+
+ * c-typeck.c (parser_build_binary_op): Replace the assignment of CLASS.
+
+ * configure (Makefile edits): Make the edits independent.
+ * Makefile.in (sed marker): Use the order {target, host, cross-make}.
+
+Tue Aug 18 00:15:12 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (parser_build_binary_op):
+ For Z<Y<Z warning, test class of CODE; don't use TREE_CODE (result).
+
+ * cccp.c (pcfinclude): Use HOST_WIDE_INT for rounding a pointer.
+
+Mon Aug 17 14:57:18 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (digest_init): Test TREE_TYPE (inside_init) is
+ nonzero before testing anything else about it.
+
+ * i860.md (mulsi3): Use emit_insn on results of gen fcns.
+ Return with DONE.
+
+Mon Aug 17 11:50:23 1992 Mark Eichin (eichin@cygnus.com)
+
+ * cccp.c (do_include): If search_start is NULL, complain that
+ we had nowhere to look.
+
+Mon Aug 17 14:53:46 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * function.c (assign_parms): When copy arg passed by invisible
+ reference to pseudo reg, don't use nominal_mode.
+
+ * i960.c (i960_address_cost): Don't abort for invalid addresses.
+
+Mon Aug 17 14:29:33 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (digest_init):
+ Use TYPE_MAIN_VARIANT comparing type of inside_init.
+
+Mon Aug 17 10:32:08 1992 Michael Meissner (meissner@osf.org)
+
+ * genattrtab.c (simplfy_with_current_value): Return 'exp' to
+ caller instead of random value.
+ (convert_set_attr_alternative): Delete unused variable newexp.
+ (simplify_cond): Delete unused variable spacer.
+ (make_alternative_compare): Delete unused variable alternative.
+ (optimize_attr): Delete unused variable nextie.
+ (main): Delete unused variable av.
+ (simplify_by_alternatives): #if 0, since the only caller is also
+ #ifdef'ed away.
+ (copy_rtx_unchanging): #if 0 variables that are only used inside
+ of other code under #if 0.
+
+Mon Aug 17 07:37:41 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * a29kunix.h (LINK_SPEC): Add %s for default.ld.
+ (LINK_LIBGCC_SPECIAL): No longer needed.
+ (ASM_FILE_STARY): Add shared data section.
+ (SHARED_SECTION_ASM_OP): New macro.
+ (OVERRIDE_OPTIONS): If -fshared-data, add -fno-common.
+
+ * alpha.c (alpha_function_needs_gp): New variable.
+ (output_prolog): Set it.
+ Write label after LDGP if function has recursive call and needs GP.
+ (current_function_operand, divmod_operator, alpha_gp_dead_after):
+ New functions.
+ (print_operand, case 'E', 'F'): New cases.
+ (alpha_need_gp): Just test for type of LDSYM, not CALL_INSN.
+ * alpha.h (GO_IF_LEGITIMATE_ADDRESS): Allow a SYMBOL_REF for
+ the current function as a valid address.
+ * alpha.md (divXi3, udivXi3, modXi3, umodXi3): New patterns.
+ (cmov): Add pattern for addq/cmov for signed divide by power of 2.
+ (call): Omit GP restore if it is dead.
+ Add patterns for recursive calls.
+ (branch): Change type of everything but calls to IBR.
+ (unaligned_storehi): Fix numbering of operands.
+ * xm-alpha.h (malloc, realloc, sbrk): Declare as void * if __STDC__.
+
+ * libgcc2.c (builtin_new): Remove declaration of malloc.
+
+ * expmed.c (expand_mult): Bound second synth_mult cost by cost of
+ algorithm from first call.
+
+ * expmed.c (expand_divmod): When doing logical operations, the size
+ of COMPUTE_MODE should be used, not MODE.
+
+ * combine.c (struct undo, struct undo_int): Replace non-portable
+ usage with some unions.
+ (SUBST, SUBST_INT, undo_all, gen_rtx_combine): Make consistent
+ with new definitions.
+
+ * fold-const.c (fold): Move conversion back outside of COND_EXPR
+ if moving it inside didn't help anything.
+
+ * fold-const.c (div_and_round_double): Change some more ints
+ to HOST_WIDE_INTs.
+
+ * jump.c (jump_optimize): Allow SUBREG in many places where REG
+ is allowed.
+
+ * expr.c (expand_expr, case COMPONENT_REF): Don't actually do
+ extraction from memory if we want address.
+
+ * expr.c (emit_block_move): Fix problems in last change.
+
+Mon Aug 17 03:37:10 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * collect2.c (is_ctor_dtor): Don't collect cfront init fcns.
+
+ * Makefile.in (GCC_FOR_TARGET): Put -B./ here.
+ (GCC_CFLAGS): Not here.
+
+Sun Aug 16 10:38:10 1992 Torbjorn Granlund (tege@jupiter.sics.se)
+
+ * ns32k.c (print_operand_address): Fix typo.
+
+Sat Aug 15 20:23:39 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (PTR_INT_TYPE): Don't define this.
+ (pcfinclude): Use int, not PTR_INT_TYPE.
+
+Sat Aug 15 11:10:07 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (ASM_FINAL_SPEC): For output of as when -c is not used, use
+ %u rather than %g so each object filename will be unique.
+ * decrose.h (ASM_FINAL_SPEC): Ditto.
+
+ * x-decrose (CLIB, X_CFLAGS): Don't link in libbsd.a, instead use
+ -Dvfork=fork on the command line.
+ * x-encrose (CLIB, X_CFLAGS): Ditto.
+ * x-i386rose (CLIB, X_CFLAGS): Ditto.
+
+Sat Aug 15 06:36:15 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cccp.c: Remove declaration of malloc and realloc.
+
+ * combine.c (get_last_value): Don't go past a CODE_LABEL when
+ searching for a value.
+
+ * expr.c (convert_move): Copy SUBREG to REG in one more case.
+
+ * expr.c (do_jump*): Always do comparison in object's signedness
+ now that combine can remove extraneous sign extends.
+
+Sat Aug 15 00:52:08 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes (ansi_compat.h): Replace this with an empty file.
+
+ * gcc.c (process_command): In second loop over all switches,
+ don't increment I for switches that don't have separate arguments.
+
+ * cccp.c: Don't ever include stddef.h.
+ (append_include_chain): Avoid using size_t.
+ (initialize_builtins): Output defn of __WCHAR_TYPE__ just once.
+
+ * ns32k.md (movstrsi1): Renamed from movstrsi.
+ (movstrsi): New define_expand.
+
+Fri Aug 14 18:51:57 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sched.c (attach_deaths_insn): Don't call attach_deaths for CLOBBERs.
+
+Fri Aug 14 18:47:22 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * genattr.c (write_units): Write #defines for the number of
+ function units, the min/max ready cost and min/max busy delay.
+ Add max_busy_cost field to struct function_unit_desc.
+
+ * genattrtab.c (simplify_by_exploding, find_and_mark_used_attributes,
+ unmark_used_attributes, add_values_to_cover, increment_current_value,
+ test_for_current_value, simplify_with_current_value,
+ simplify_with_current_value_aux): New functions.
+ (struct function_unit): Add max_busy_cost, {min,max}_busy_delay.
+ (expand_units): Use simplify_by_exploding to simplify the
+ function_units_used attribute. Compute the ready cost attributes
+ as a COND in numeric order.
+ (gen_unit): Compute {min,max}_ready_cost and {min,max}_busy_delay.
+ (write_function_unit_info): Determine if there is only one busy
+ delay value by comparing the minimum and maximum busy delay.
+ Write the initializer for function_units in numeric order.
+ Write out the maximum busy delay field.
+
+ * genattrtab.c (attr_desc): Add negative_ok field.
+ (find_attr, make_internal_attr): Initialize negative_ok.
+ (check_attr_value): Allow negative values for CONST_STRING for
+ numeric attributes with negative_ok.
+ (encode_units_mask): Change the encoding of the function_units_used
+ result.
+
+ * gcc.c (do_spec_1): Add %u.
+ (default_compilers): For output of as when -c is not used, use %u
+ rather than %g so each object filename will be unique.
+
+ * cexp.y, cccp.c, gcc.c (NULL_PTR): Use the same definition as
+ rtl.h and tree.h.
+
+Fri Aug 14 20:53:00 1992 Paul Eggert (eggert@twinsun.com)
+
+ * c-decl.c (grokdeclarator): Remove duplicate diagnostic for
+ initialized parameters; start_decl already does this.
+
+ * c-common.c (truthvalue_conversion): Optionally warn if an
+ unparenthesized assignment is used as a truth value.
+ * c-parse.y, objc-parse.y (expr_no_commas):
+ Mark assignments for warning.
+
+Fri Aug 14 14:45:39 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * vax.md (casesi1): Renamed from casesi.
+ (casesi): New trivial define_expand invokes casesi1.
+ (movstrhi, movstrhi1): Analogous change.
+
+Fri Aug 14 14:36:52 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * reload.c (find_reloads): Ignore `%' in the last operand after
+ warning.
+
+Fri Aug 14 07:41:34 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * genflags.c (num_operands): MATCH_PARALLEL also represents an operand.
+
+ * jump.c (invert_exp, redirect_exp): No longer static.
+ Clean up order of declarations at start of file and remove
+ extraneous decls.
+ * unroll.c (copy_loop_body): Don't assume (pc) can be on either
+ leg of jump; use invert_exp and redirect_exp instead.
+
+ * alpha.c, alpha.h, alpha.md, xm-alpha.h, x-alpha, va-alpha.h:
+ New files.
+ * config.sub: Add "alpha".
+ * configure: Likewise.
+ * Makefile.in (USER_H): Add va-alpha.h and sort names.
+ * gstdarg.h, gvarargs.h: Call va-alpha.h for Alpha.
+
+ * rtl.def (MATCH_PAR_DUP): New RTL code.
+ * genconfig.c (walk_insn_part): Treat it just like MATCH_OP_DUP.
+ * genemit.c (max_operand_1): Likewise.
+ (gen_exp): Treat it like MATCH_PARALLEL here.
+ * genextract.c (walk_rtx): Treat it like MATCH_DUP.
+ * genoutput (scan_operands): Likewise.
+ * genpeep.c (match_rtx): Likewise.
+ * genrecog.c (add_to_sequence): Likewise.
+ * a29k.md, rs6000.md ({load,store}_multiple): Use MATCH_PAR_DUP.
+
+ * cse.c (fold_rtx): Fix typo in two FLOAT_STORE_FLAG_VALUE tests.
+
+ * flow.c (life_analysis, propagate_block, dump_flow_info): Add more
+ missing casts to REGSET_ELT_TYPE.
+
+ * expr.c (movstr_optab): New variable.
+ (init_expr_once): Initialize it.
+ (emit_block_move): Rework code that generates movstrxx insns to
+ check predicates and use an optab.
+
+ * cse.c (simplify_unary_operation): Remove "else".
+
+Fri Aug 14 07:41:05 1992 Torbjorn Granlund (tege@jupiter.sics.se)
+
+ * c-decl.c, cse.c, fold-const.c, integrate.c, obstack.h, protoize.c,
+ reload1.c, stmt.c, tree.c, tree.h: Phicks speling erours.
+
+Fri Aug 14 03:21:17 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-convert.c (convert): When converting to variant of same type, fold.
+
+ * varasm.c (assemble_variable): Change error message for unknown size.
+
+ * c-parse.y (declmods): Don't warn for multiple storage classes
+ all at the beginning. This is either good practice or an error.
+
+Thu Aug 13 19:43:13 1992 Paul Eggert (eggert@twinsun.com)
+
+ * c-decl.c (finish_decl): Avoid cascading messages for tentative
+ definitions with incomplete types.
+
+ * c-typeck.c (process_init_constructor): Warn about partly
+ bracketed initializers.
+
+Thu Aug 13 17:18:49 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (handle_directive): Output macro name if dump_names.
+
+ * m68k.h: Delete junk line inserted by mistake in last patch.
+
+Thu Aug 13 16:46:58 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * regclass.c (regclass): Don't scan the constraints if there aren't
+ any operands. Don't look for a commutative constraint in the last
+ operand.
+
+ * function.c (contains): Return the number of insns.
+ (reposition_prologue_and_epilogue_notes): Count all the prologue and
+ epilogue insns.
+
+Thu Aug 13 15:20:24 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * m68k.h (TARGET_SWITCHES): Make -m68040 set 01007 not 01000.
+
+ * sparc.h (CPP_SPEC): For -mv8, define __sparc_v8__ not __sparcv8__.
+ * longlong.h (__sparclite__): Define umul_ppmm, udiv_qrnnd, and
+ count_leading_zeros for this sparc architecture variant.
+ (__sparc_v8__): Changed from __sparc8__.
+
+ * c-typeck.c (build_component_ref): Don't warn for compound and
+ conditional expressions when pedantic. These are valid in ANSI C.
+
+Thu Aug 13 11:37:57 1992 Jeffrey A. Law (law@mole.gnu.ai.mit.edu)
+
+ * pa.c (output_function_prologue): Restore "rp" after the call to
+ mcount.
+
+Thu Aug 13 06:54:50 1992 Torbjorn Granlund (tege@jupiter.sics.se)
+
+ * pa.md (movsf recognizer): Output `fcpy,sgl', not `fcpy'.
+ From Jeff Law:
+ * pa.md (zdepi in HImode): Move this pattern after the standard
+ movhi patterns.
+
+Wed Aug 12 11:45:15 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (ASM_FINAL_SPEC): For output of as when -c is not used,
+ use %g, rather than %b, because the file is going to be deleted
+ anyway (sync up with gcc.c Aug 4 changes). Patch from Jim Meyering.
+
+ * decrose.h (ASM_FINAL_SPEC): Ditto.
+
+Wed Aug 12 03:23:30 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes (finding all .h files): Look for links as well as
+ ordinary files.
+
+ * m68k.h (TARGET_68040): Test for 01000 or 0400.
+ (TARGET_SWITCHES): Rename -m68040 to -m68020-40.
+ Rename -m68040-only to -m68040.
+
+ * hp2bsd.h (TARGET_DEFAULT): Make value 0.
+
+Tue Aug 11 04:23:35 1992 Paul Eggert (eggert@twinsun.com)
+
+ * fold-const.c (operand_equal_p): Make it clear that this function
+ tests for indistinguishable values, not for equality as computed by
+ `=='; the distinction is important for IEEE NaNs and -0.0.
+
+Tue Aug 11 13:10:47 1992 Fred Fish (fnf at fishpond)
+
+ * config.sub (amigaunix/amix): Use sysv4 as os.
+ * configure (m68k-*-amix*): Change to m68k-cbm-sysv4* and
+ eliminate fixincludes and broken_install.
+
+Tue Aug 11 15:42:58 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * function.c (identify_blocks): Handle case where no block nodes
+ exist. Use xmalloc not alloca for block_vector.
+ (reorder_blocks): New argument top_block. Handle case where no
+ block nodes exist. Always clear BLOCK_SUBBLOCKS (block) when
+ adding it to the block tree.
+ (all_blocks): Handle case where vector is zero. Store current
+ block at offset 0 in vector, not n_blocks. Don't count current
+ block twice in n_blocks.
+ * function.h (identify_blocks): Declare.
+ (rtx, tree): Move undefs to the very end.
+ * loop.c (loop_optimize): Delete uses of loop_number_first_block,
+ loop_number_last_block, loop_number_block_level. Correct call of
+ find_loop_tree_blocks. Add call to unroll_block_trees.
+ * loop.h (loop_number_first_block, loop_number_last_block,
+ loop_number_block_level): Delete declarations.
+ * stmt.c: Likewise.
+ (find_loop_tree_blocks): Completely rewritten to use
+ identify_blocks.
+ (unroll_block_trees): Completely rewritten to use reorder blocks.
+ * unroll.c (unroll_loop): Delete call to unroll_block_trees.
+
+ * unroll.c (copy_loop_body): Only copy VTOP note if it will end up
+ before a loop exit test.
+
+Tue Aug 11 09:21:47 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Bump meissner version # to 23.
+ (CONST_CODES): Remove declaration for eliminate_constant_term
+ from inside of local {}'s.
+ (SELECT_SECTION_MODE): Remove declaration of variable
+ mips_section_threshold from inside of local {}'s.
+ (SELECT_SECTION): Ditto.
+
+ * mips.c (toplevel): Remove declarations for all of the gen_xxx
+ functions used, since insn-flags.h contains them.
+
+ * mip.md (fixuns_truncdfsi2): Remove extern declarations.
+ (fixuns_truncsfsi2): Ditto.
+ (movsi_unaligned, movsi_ulw, movsi_usw): Ditto.
+ (seq, sne, sgt, sle, sgtu, sleu): Ditto.
+
+Tue Aug 11 02:51:25 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes (memory.h): Fix versions 1.2 and 1.3 as well as 1.4.
+
+ * configure: Improve err msg for unknown config.
+
+Tue Aug 11 04:02:51 1992 Paul Eggert (eggert@twinsun.com)
+
+ * fold-const.c (fold): Don't fold (A op B ? A : C) if A is IEEE
+ floating point, because A might be -0.0 or NaN.
+
+ * c-typeck.c (parser_build_binary_op): Warn about expressions like
+ `1<=i<=N'.
+
+Mon Aug 10 22:11:50 1992 Michael Meissner (meissner@osf.org)
+
+ * reload1.c (emit_reload_insns): Use gen_rtx to create a secondary
+ reload insn, not gen_reg_rtx.
+
+Mon Aug 10 06:23:23 1992 Torbjorn Granlund (tege@jupiter.sics.se)
+
+ * pa.md (Recognizer for zdepi_operand in HImode): New pattern.
+ (Recognizer for zdepi_operand in SImode): Call output_zdepi for
+ output.
+ (shift patterns and recognizers): Handle 32 bit ints and truncate
+ them for output.
+ * pa.c (output_zdepi): New function (contents from pa.md).
+ * pa.h (output_zdepi): Declare.
+
+Sun Aug 9 17:10:24 1992 Pat Rankin (rankin@eql.caltech.edu)
+
+ * configure.com: Rename vms to vax-vms; split long lines.
+ * make-l2.com: Assemble libgcc2 routines twice, preserving
+ lowercase function names the second time.
+
+Sun Aug 9 00:50:46 PDT 1992 Ron Guilmette (rfg at netcom.com)
+
+ * final.c (final_scan_insn): Call dwarfout_begin_block and
+ dwarfout_end_block even for -g1.
+
+Sun Aug 9 18:10:33 1992 Michael Meissner (meissner@osf.org)
+
+ * genflags.c (gen_insn): Treat 'call_pop' and 'call_value_pop' like
+ 'call' and 'call_insn'.
+
+ * i386.h (LEGITIMIZE_ADDRESS): Emit_move_insn only takes two
+ arguments, not three.
+
+Sat Aug 8 10:26:02 1992 Michael Meissner (meissner@osf.org)
+
+ * cp-tree.h (hash_chainon): Provide declaration.
+ (build_virtual_init): Ditto.
+ (build_vbase_delete): Ditto.
+ (build_vbase_vtables_init): Ditto.
+
+ * genflags.c (insn_name_ptr): Define, so that we can link in
+ print-rtl.c for debugging.
+ (call_obstack, normal_obstack): New obstacks to remember call
+ insns, and normal insns, so that we can emit the prototypes later.
+ (max_id_len): New variable to record the maximum identifier
+ length.
+ (num_operands): New function to return the number MATCH_OPERAND's
+ and MATCH_OPERATOR's in an insn tree.
+ (gen_proto): New function to print out a prototype for an insn.
+ (gen_nonproto): New function to print out a declaration without a
+ prototype.
+ (gen_insn): Don't emit function declarations here, just save the
+ insn on either the call_obstack if it is call or call_value, or
+ normal_obstack otherwise.
+ (main): Initialize call_obstack, normal_obstack. After all insns
+ are processed, emit function declarations with and without
+ prototypes, depending on whether NO_MD_PROTOTYPES, and
+ CALL_MD_PROTOTYPES are defined.
+
+ * rtl.h (PROTO): If not defined, define to either expand
+ prototypes or just expand to (), depending on whether or not, the
+ host compiler supports ANSI C.
+ (NULL_PTR): Define as void * if we have prototypes.
+ (all function declarations): Add prototypes for all functions
+ where it is feasible to do so, using the PROTO macro.
+ (force_reg): Add declaration.
+ (eliminate_constant_term): Ditto.
+ (output_constant_def): If tree.h has been included, add prototype.
+ (immed_real_const): Ditto.
+ (immed_real_const_1): Ditto.
+ (make_tree): Ditto.
+
+ * tree.h (PROTO): If not defined, define to either expand
+ prototypes or just expand to (), depending on whether or not, the
+ host compiler supports ANSI C.
+ (NULL_PTR): Define as void * if we have prototypes.
+ (all function declarations): Add prototypes for all functions
+ where it is feasible to do so, using the PROTO macro. Do not
+ define prototypes for build_binary_op, or build_indirect_ref,
+ since GNU C and GNU G++ have different numbers of arguments. Do
+ not define prototypes for make_tree, since it takes a rtx as the
+ argument, and rtl.h is included after tree.h.
+
+Sat Aug 8 07:36:19 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * cp-lex.c: Include stdlib.h and locale.h if needed.
+ (errno): Declare only if it isn't a macro.
+ * cp-tree.c (__eprintf): `line' is unsigned.
+ * cp-typeck.c (mark_addressable): Use DECL_EXTERNAL not TREE_EXTERNAL.
+
+Fri Aug 7 00:16:28 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (read_specs): Cast args of xmalloc and read to unsigned.
+
+ * final.c (final_scan_insn): Use ASM_OUTPUT_ADDR_DIFF_ELT
+ and ASM_OUTPUT_ADDR_VEC_ELT only if defined.
+
+Thu Aug 6 22:00:13 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sched.c (true_dependence): An unchanging read is guaranteed
+ independent of a store only if the store is not unchanging.
+ (anti_dependence): Added comment about unchanging reads.
+ (sched_analyze_2): Don't ignore unchanging reads, they may be
+ dependent on unchanging writes.
+
+ * sparc.md: Correct DEFINE_SPLITs added Jul 27. They would
+ overwrite the input register if it was the same as the result reg.
+
+Thu Aug 6 16:25:48 1992 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (ASM_FILE_START): If profiling IMPORT "_mcount" instead of
+ "__gcc_mcount".
+
+ * These changes allow the PA to make use of the BSS subspace. They
+ require you to use the HPUX assembler or a fixed version of pa-gas
+ (available soon on jaguar.cs.utah.edu).
+ * pa.h (TARGET_SWITCHES): New switch "no-bss" which forces gcc not
+ to make use of the bss subspace. (For compatability with old buggy
+ versions of pa-gas.)
+ (ASM_FILE_START): Add $BSS$ subspace.
+ (BSS_SECTION_ASM_OP): New macro which tells the assembler to switch
+ to the bss subspace.
+ (EXTRA_SECTIONS): Define in_bss as an extra section.
+ (EXTRA_SECTION_FUNCTIONS): Define "bss_section" function to switch
+ into the bss subspace.
+ (ASM_OUTPUT_COMMON): If !TARGET_NO_BSS, then place commons into the
+ bss subspace.
+ (ASM_OUTPUT_LOCAL): Likewise.
+
+Thu Aug 6 13:04:16 1992 Tim Moore (moore@defmacro.cs.utah.edu)
+
+ * gvarargs.h : Check hp800 symbol too for the hppa case.
+ * va-pa.h : Rewrite to be compatible with hpux.
+ * pa.c (hppa_builtin_saveregs): Rewrite.
+ (secondary_reload_class): Bug fix.
+ (arith32_operand): New function.
+
+Wed Aug 5 11:23:05 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * m88k.h (EXTRA_SECTIONS, svr3): Delete empty definitions for
+ CTORS_SECTION_FUNCTION and DTORS_SECTION_FUNCTION. Add in_ctors
+ and in_dtors.
+
+Tue Aug 4 23:54:15 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (default_compilers): For output of as when -c is not used,
+ use %g, rather than %b, because the file is going to be deleted
+ anyway.
+
+Tue Aug 4 20:30:12 1992 Michael Meissner (meissner@osf.org)
+
+ * cp-decl.c (grokdeclarator): Call build_type_variant to set const
+ and volatile flags, since build_reference_type does not take those
+ arguments.
+
+ * cp-parse.y (attribute processing): Correctly call tree_cons with
+ three arguments, passing NULL_TREE for the chain argument.
+
+ * cp-tree.h (hash_chainon): Add declaration for this function.
+ (build_virtual_init): Ditto.
+ (build_vbase_delete): Ditto.
+ (build_vbase_vtables_init): Ditto.
+
+ * cp-typeck.c (build_modify_expr_1): Pass 0 as third argument to
+ build_unary_op.
+ (build_modify_expr): Ditto.
+
+Tue Aug 4 18:10:46 1992 Mike Stump (mrs@wombat.gnu.ai.mit.edu)
+
+ * cp-tree.h, tree.h: Moved definitions of TREE_VIA_* into tree.h for
+ consistency.
+
+Tue Aug 4 17:35:32 1992 Mike Stump (mrs@albert.gnu.ai.mit.edu)
+
+ Complete 10th FSF <---> Cygnus merge.
+
+ Tue Aug 4 12:58:59 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (pushtag): Don't set DECL_IGNORED_P for binding
+ layer markers, use only DECL_SOURCE_LINE == 0, as otherwise,
+ it messes up dbxout.c.
+
+ Tue Aug 4 11:59:36 1992 Mike Stump (mrs@cygnus.com)
+
+ Tue Aug 4 13:43:55 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-method.c (hack_identifier): Remove redundant call of
+ assemble_external.
+
+ Tue Aug 4 10:23:02 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-decl.c (pushdecl): Any kind of DECL should be good enough
+ at global scope, not just a TEMPLATE_DECL.
+
+ Sun Aug 2 21:12:55 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
+
+ * cp-tree.c: change definition of __eprintf to match libgcc2.c and
+ assert.h
+
+ Fri Jul 31 16:53:26 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-tree (break_out_calls): Only make ony copy of a node on
+ 's' and 'e' nodes. Handle 'r' just like 's' and 'e' because
+ nodes of type 'r' can be of different sizes (the old code
+ would do the wrong thing for a COMPONENT_REF).
+
+ Thu Jul 30 11:46:14 1992 Michael Tiemann (tiemann@rtl.cygnus.com)
+
+ * cp-init.c (emit_base_init): Set transparent basetypes (those w/o
+ ctors) as marked if we need to walk up the tree to find a ctor.
+
+ Wed Jul 29 03:25:51 1992 Michael Tiemann (tiemann@rtl.cygnus.com)
+
+ * cp-decl.c (grokdeclarator): In SCOPE_REF case, sort out visibility
+ declarations from other declarations, since the compiler will
+ ultimately handle them differently. This is a part of the solution
+ to p525.
+ (finish_method): Tentative (and probably wrong) fix for carrying
+ along inline methods delcared within a class that really belong to
+ nested classes of the class. This may be more of the solution to
+ p525.
+
+ * cp-init.c (build_offset_ref): Use IDENTIFIER_TYPE_VALUE of CNAME
+ when CURRENT_CLASS_DECL is 0.
+
+ * cp-class.c (finish_struct): Don't give errors for TYPE_DECLs in a
+ struct that are really only meant for FIELD_DECLs.
+
+ Tue Jul 28 23:36:58 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (grok_op_properties): Do not core dump on parse errors.
+
+ Tue Jul 28 22:43:12 1992 Mark Eichin (eichin@cygnus.com)
+
+ * cp-pt.c (end_template_instantiation) YYDEBUG is now defined in
+ cp-parse.h -- so don't assume that it's -2 (since under byacc it is
+ -1 anyway.) iomanip.C compiles again.
+
+ Tue Jul 28 22:33:46 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-typeck.c (build_c_cast): Allow cast to array type in
+ some situations to be more compatible with Cfront.
+
+ Tue Jul 28 22:05:14 1992 Mark Eichin (eichin@cygnus.com)
+
+ * cp-parse.y (print_parse_statistics): don't reference TOKEN_LENGTH
+ or REDUCE_LENGTH unless GATHER_STATISTICS is set. (YYDEBUG alone is
+ not a sufficient condition.)
+
+ Tue Jul 28 19:18:30 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-tree.c (break_out_calls): Don't do anything special to
+ SAVE_EXPRs, as they cannot contain calls that would need
+ breaking out. This fixes a problem introduced on Jul 15, by
+ Ron Guilmette.
+
+ Mon Jul 27 16:55:52 1992 Mike Stump (mrs@cygnus.com)
+
+ * c++: Fix errors introduced by rms. Bullet-proof handling
+ of arguments with funny things in them such as newlines,
+ spaces, tabs, single quotes, double quotes, etc...
+
+ Mon Jul 27 15:03:23 1992 Ken Raeburn (raeburn@cygnus.com)
+
+ * cp-init.c (build_vec_delete): Extract size of type even for
+ destructorless types, so value can be computed to pass to delete
+ operator.
+
+ * Bludgeon interface/implementation code into leaving templates
+ alone, until we've figured out how to handle their interaction
+ properly:
+ * cp-parse.y (template_instantiate_once): Temporarily set interface
+ flags to `unknown' while processing member templates.
+ * cp-decl.c (grokfndecl): Even if class vtable is getting written
+ out, regardless of interface setting of class and write_virtuals
+ flag, don't force virtual destructor of template class to be public.
+ * cp-tree.h (struct pending_inline): New field `interface'.
+ * cp-lex.c (do_pending_inlines): Restore interface flags from stored
+ values, rather than calling extract_interface_info.
+ (process_next_inline): Likewise, if more pending inlines exist; else
+ do call extract_interface_info.
+ (reinit_parse_for_method): Save away interface flags.
+ (cons_up_default_function): Ditto.
+ * cp-pt.c (instantiate_template): Set saved interface flag to
+ `unknown'.
+ (end_template_instantiation): Set CLASSTYPE_INTERFACE_UNKNOWN.
+
+ * cp-pt.c (instantiate_member_templates): Deleted some unused code.
+
+ * cp-decl.c (grokfndecl): Make class methods public if
+ `implementation' pragma is set.
+
+ * cp-pt.c (pending_templates): No longer exported.
+ (add_pending_template): Ditto.
+ * cp-parse.y (primary): Don't check it; always call
+ do_pending_templates.
+
+ Fri Jul 24 14:22:39 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (init_decl_processing, finish_function),
+ cp-method.c (build_decl_overload, build_opfncall), cp-init.c
+ (build_x_delete, build_delete, build_vec_delete): Add support
+ for two argument delete to support ARM 12.5. In some cases,
+ the argument is smaller than it should be.
+
+ Thu Jul 23 08:12:16 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-lex.c: Update wide character handling from c-lex.c and make
+ the type of multicharacter constants be int per ANSI C++ WP.
+
+ * cp-decl.c (init_decl_processing, grokdeclarator), cp-lex.h,
+ gplus.gperf, cp-lex.c (init_lex), cp-decl2.c (groktypefield),
+ cp-method.c (build_overload_name): Add support for wchar_t as a
+ distinct type to conform to x3j16 working paper.
+ * cp-hash.h: Regenerated.
+
+ Wed Jul 22 17:41:08 1992 Mark Eichin (eichin@cygnus.com)
+
+ * cp-parse.y (structsp): note_got_semicolon was called before
+ finish_struct (which always clears the got_semicolon bit.) However,
+ note_got_semicolon was only called if yychar==';', without checking
+ for YYEMPTY.
+
+ Tue Jul 21 22:59:32 1992 Michael Tiemann (tiemann@rtl.cygnus.com)
+
+ * cp-typeck.c (mark_addressable): If we have a recursive call to an
+ otherwise inline function, clear TREE_EXTERNAL so the whole function
+ is written to the asm file.
+
+ Tue Jul 21 05:31:10 1992 Ken Raeburn (raeburn@cygnus.com)
+
+ * cp-tree.h (start_type_method): Deleted unused declaration.
+
+ * cp-pt.c (tsubst): Fix propagation of qualifiers in several cases.
+
+ * cp-pt.c (tsubst, case FUNCTION_DECL): Look for matches that differ
+ only in return type.
+
+ * cp-pt.c (tsubst, case FUNCTION_DECL): Rewrite name of
+ type-conversion operators, in case the target type involves a
+ template parameter.
+
+ Mon Jul 20 03:35:44 1992 Michael Tiemann (tiemann@rtl.cygnus.com)
+
+ * cp-class.c (add_virtual_function): Don't crash if
+ CURRENT_CLASS_TYPE is NULL_TREE.
+ * cp-decl2.c (grokfield): Ditto.
+
+Tue Aug 4 15:36:07 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (finish_decl): Don't do expand_decl_init for FUNCTION_DECL.
+
+ * c-typeck.c (build_conditional_expr): Merged const and volatile flags
+ of incoming types.
+
+Tue Aug 4 11:15:47 1992 Chip Salzenberg (chip@tct.com)
+
+ * c-decl.c (finish_struct): If bit field is of an unsigned
+ type that promotes to int, promote it unsigned if traditional
+ or if it is the same size as int.
+ (start_function): Ditto for function return value.
+ * c-typeck.c (default_conversion): Ditto -- fix bug that
+ promotes short to unsigned if sizeof(short) == sizeof(int).
+
+Tue Aug 4 15:12:51 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * svr3.h (USING_SVR3_H): Define.
+ * svr4.h (USING_SVR4_H): Define.
+ * aoutos.h (USING_AOUTOS_H): Define.
+ * m88k.h (EXTRA_SECTIONS): Base on the above defines.
+
+Tue Aug 4 14:22:44 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * dbxout.c: Include output.h.
+
+Tue Aug 4 00:21:06 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (install-common): Install protoize and related files
+ if they were compiled.
+ (install-proto): Target deleted.
+ (dbxout.o): Depend on output.h.
+
+Mon Aug 3 02:04:03 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (finish_function): Test only can_reach_end for the warning
+ about reaching the end of a non-void function.
+ (poplevel): If apparently nested inline function has
+ DECL_ABSTRACT_ORIGIN, don't output it; propagate TREE_ADDRESSABLE.
+ (pushdecl): When copying inline details into an extern decl,
+ copy DECL_RESULT, TREE_ASM_WRITTEN. Set DECL_ABSTRACT_ORIGIN.
+
+ * c-parse.y (datadef): For empty declaration, use pedwarn.
+ * objc-parse.y (datadef, mydecl): Likewise.
+
+ * Makefile.in (install-cross-tools): Install nm from tooldir.
+
+ * varasm.c: Include real.h.
+ * sparcv4.h: Don't include real.h.
+
+ * flow.c (mark_used_regs): Do recurse in setting of global hard reg.
+ Do set reg_next_use for global hard reg.
+
+ * objc-parse.y (reserved_declspecs, declmods): Change as in c-parse.y.
+
+Mon Aug 3 03:24:17 1992 Paul Eggert (eggert@twinsun.com)
+
+ * c-parse.y (reserved_declspecs): Warn if storage class occurs here.
+ (declmods): Warn if storage class is not first.
+
+Sun Aug 2 21:44:34 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (gen_rtx, case REG): Don't use frame_pointer_rtx or
+ arg_pointer_rtx if reload is in progress.
+
+ * jump.c (jump_optimize): When replacing jumps with logical
+ expressions, use preserve_subexpressions_p.
+
+ * calls.c (expand_call): Use HOST_WIDE_INT instead of int when
+ comparing a pointer to an integer constant.
+ * flow.c (find_use_as_address): Likewise; also when returning int.
+ * integrate.c (expand_inline_function): Cast -1 to (HOST_WIDE_INT)
+ first.
+
+ * cse.c (canon_hash): Use HOST_WIDE_INT instead of int when casting
+ pointers to integers.
+ * print-tree.c (print_node): Likewise.
+ * tree.c (TYPE_HASH): Likewise.
+ * varasm.c (const_hash, SYMHASH): Likewise.
+
+ * toplev.c: (main): Don't cast pointers to int unnecessarily.
+
+ * tree.c: Include function.h after tree.h.
+
+ * rtl.h (NOTE_BLOCK_NUMBER): Change definition to simpler form.
+ (SET_NOTE_BLOCK_NUMBER): Deleted.
+ (xrealloc, oballoc, permalloc): Declare here as well as in tree.h.
+ * function.c (identify_blocks, reorder_blocks): Don't use
+ SET_NOTE_BLOCK_NUMBER.
+
+ * varasm.c (struct addr_const): Use HOST_WIDE_INT for OFFSET.
+
+ * combine.c (reg_sign_bit_copies): New variable.
+ (combine_instructions): Initialize it.
+ (set_significant): Set it.
+ (try_combine): Set subst_low_cuid immediately before calling `subst'
+ to the INSN_CUID of the lowest insn involved in the call.
+ Change XOR with out-of-range constant to (not (xor ...)).
+ Call both split_insns and find_split_point; pass extra parm to
+ find_split_point.
+ Record I2DEST's value if I2 now sets it; similarly for I1DEST.
+ (find_split_point): Add new arg INSN.
+ If AND'ing with a large single-bit constant and we only care about
+ equality with zero, replace with bit extraction.
+ Make two shifts for ZERO_EXTRACTs unless very narrow.
+ (subst): Move RESTART label earlier.
+ If we have a simple operation applied to IF_THEN_ELSE, move
+ the operation inside the two arms.
+ (subst, case SUBREG): Use force_to_mode.
+ (subst, case NOT): Change (not (xor X C)) to (xor X ~C).
+ (subst, case NEG): Remove optimization of (neg (abs X)); redundant.
+ Convert (neg (xor A 1)) to (plus A -1) if A is known to be 0 or 1.
+ (subst, case IF_THEN_ELSE): Simplify if an arm contains a register
+ being tested by substiting the known value.
+ Put constant integer in last arm is can reverse comparison.
+ (subst, case SET): Use gen_lowpart_for_combine.
+ (subst, case AND): Make IF_THEN_ELSE when appropriate.
+ (subst, case IOR): (ior A C) can sometimes be just C.
+ (subst, case XOR): Go back and restart when canonicalizing.
+ (subst, case ABS): Use num_sign_bit_copies.
+ (make_extraction): Call force_to_mode.
+ (make_compound_operation): Look at optabs rather that explicitly
+ checking for operations and assuming we have SImode.
+ Handle (ashiftrt (OP (ashift foo C1) C3) C2).
+ (force_to_mode): Only change mode of arithmetic if optab says we
+ have operation in that mode.
+ Remove unneeded ASHIFTRT; add handling for IF_THEN_ELSE.
+ (significant_bits, case NEG): Call num_sign_bit_copies.
+ (significant_bits, case ABS, case [US]{MIN,MAX}, IF_THEN_ELSE): New.
+ (num_sign_bit_copies): New function.
+ (simplify_shift_const): Remove ASHIFTRT if value is known -1 or 0.
+ Use num_sign_bit_copies to simplify (ashiftrt (ashift ...) ...)
+ and (ashiftrt (neg ...) ...).
+ Remove now redundant case when VAROP is a PLUS.
+ (simplify_comparison): If A is known to be -1 or 0, A != -1 is A == 0.
+ Simplify unsigned tests that really check the sign bit.
+ (simplify_comparison, case ASHIFTRT): Convert to LSHIFTRT if
+ equality comparison with zero.
+ (get_last_value): Check if the desired register is set in the
+ insn before the one whose INSN_CUID is subst_low_cuid.
+
+ * expr.c (expand_builtin, case BUILT_IN_CONSTANT_P): Add missing
+ call to TREE_CODE.
+
+ * reload1.c (reload): Set reload_in_progress earlier.
+
+ * fold-const.c (optimize_bit_field_compare): Correct bogus use of
+ types in expressions; always do computation in a type wide enough
+ for the result.
+
+Sun Aug 2 01:30:22 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc-parse.y (attrib): Copied from c-parse.y.
+
+Sat Aug 1 13:34:49 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-pragma.c (HANDLE_PRAGMA_WEAK): Define only if SET_ASM_OP defined.
+
+ * vax-vms.h: Renamed from vms.h.
+ * xm-vax-vms.h: Renamed from xm-vms.h.
+ * configure (vax-*-vms): Change file names.
+
+Sat Aug 1 16:13:09 1992 Mark Eichin (eichin@cygnus.com)
+
+ * config/spc-sol2.h (ASM_OUTPUT_DWARF_STRING): redefinition was
+ incorrect, and uneeded; while Solaris as doesn't support .string, it
+ does support .asciz, and sparcv4.h takes care of including that
+ definition.
+
+Fri Jul 31 08:19:41 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu
+
+ * combine.c (try_combine): Correctly handle implicit deaths of
+ I2DEST and I1DEST.
+
+ * cexp.y: Add declaration for xmalloc.
+
+ * cccp.c: Add declarations for malloc and realloc.
+ Include stddef.h when __STDC__ is defined.
+ (PTR_INT_TYPE): New macro.
+ (pcfinclude): Use it.
+
+ * c-decl.c (init_decl_processing): __builtin_return_address,
+ __builtin_frame_address, and __builtin_saveregs all return void *.
+
+ * reload.c (find_reloads_address_1): Convert another push_reload
+ call into a call to find_reloads_address_part.
+
+ * reload1.c (gen_input_reload): Correct order of insns emitted
+ when using secondary memory.
+
+ * reload1.c (reload_as_needed): Add missing semicolon after macro.
+
+ * combine.c (distribute_notes, case REG_DEAD): If a register used
+ exactly twice is referenced in both I2 and I3, show it is used 3 times.
+
+ * final.c (output_operand): Abort if X is a pseudo.
+
+ * cse.c (exp_equiv_p, case CONST_INT): Use INTVAL instead of XINT.
+
+ * expr.c (convert_move): Put FROM into a register if it is a SUBREG.
+ (For extension case.)
+
+Fri Jul 31 08:19:05 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * function.c (reposition_prologue_and_epilogue_notes): Search for
+ the notes without using basic_block_end[0] or basic_block_head[N-1].
+
+Fri Jul 31 08:18:18 1992 Michael Meissner (meissner@osf.org)
+
+ * reorg.c (get_branch_condition): Return 0 if all tests fall through.
+
+Fri Jul 31 02:28:02 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * glimits.h: Renamed from limits.h.
+ * Makefile.in (LIMITS_H): Deleted.
+ (install-limits-h): Use glimits.h, not limits.h.
+ * libgcc2.c: Include glimits.h.
+
+Thu Jul 30 09:54:07 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * m88k.h (FUNCTION_BOUNDARY, ASM_OUTPUT_ALIGN_CODE): Pack code
+ more tightly for the m88110.
+
+ * m88k.md (cpu attribute): List m88100 first for more efficient
+ code in insn-attrtab.c.
+
+ * m88k.md (rotate/and split pattern): Fix typo.
+
+Thu Jul 30 00:02:45 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * i860mach.h: New file.
+ * configure (i860-*-mach*): New alternative.
+
+ * svr3.h (BSS_SECTION_FUNCTION): New macro.
+ (CTORS_SECTION_FUNCTION, DTORS_SECTION_FUNCTION): Enable these.
+ * tower-as.h (BSS_SECTION_FUNCTION): Deleted.
+ * dpx2.h (EXTRA_SECTION_FUNCTIONS): Deleted.
+ * att386.h (BSS_SECTION_FUNCTION): #undef before defining.
+
+ * i860v3.h (USE_CONST_SECTION): #undef before defining.
+
+Wed Jul 29 20:04:55 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.md (cmpsi): Delete 'J' constraint.
+
+Wed Jul 29 00:38:45 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-lex.c (yylex): When traditional, convert 0x80000000 to -0x80000000.
+
+ * gcc.c (link_command_spec): Accept -static but do nothing with it.
+
+ * loop.c (move_movables): When testing whether a reg contains
+ the function address of a call_insn in a libcall block,
+ use reg_referenced_p, to ignore destinations.
+
+ * stor-layout.c (layout_record): Take account of
+ maximum_field_alignment when using the field's alignment.
+
+ * c-parse.y (attrib): Fix previous change--the missing arg
+ was the last arg.
+
+ * fixincludes: Don't repeat the directory-link-chasing loop
+ more than twice. Combine $prevdirs with $dirs--they had same value.
+ Properly discard $d itself from the output of find.
+ Find the links to directories by finding each link
+ and testing it with test. Add $newdirs into $files.
+
+Tue Jul 28 12:46:31 1992 Michael Meissner (meissner@osf.org)
+
+ * c-common.c (decl_attributes): Call layout_decl with two arguments.
+
+ * c-parse.y (attribute processing): Correctly call tree_cons with
+ three arguments, passing NULL_TREE for the purpose argument.
+
+ * emit-rtl.c (make_insn_raw): Eliminate unused argument pat_formals,
+ and modify all callers.
+ (make_jump_insn_raw): Ditto.
+
+ * reorg.c (fill_slots_from_thread): Function follow_jumps only takes
+ one argument.
+ (relax_delay_slots): Ditto.
+
+Tue Jul 28 16:04:43 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * dpx2g.h (ASM_OUTPUT_IDENT): #undef it.
+
+ * c-decl.c (duplicate_decls): Handle warn_redundant_decls here.
+ But don't warn if function definition follows a declaration.
+ (pushdecl): Don't handle it here.
+ (grokparms): Don't warn about non-prototype decl in system header.
+
+ * c-convert.c (convert): If main variants match,
+ but the type is not identical, make a NOP_EXPR.
+
+Tue Jul 28 10:06:18 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * mips.md: Correct use of `*' in constraints. Put it before each
+ letter to ignore, not each group to ignore.
+
+Tue Jul 28 01:23:35 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * dbxout.c (dbxout_parms): Do something for structures
+ passed by invisible reference, and living in memory.
+
+ * gstddef.h (wchar_t): Alternate typedef for C++.
+
+ * Makefile.in (extraclean): Delete config/ChangeLog.
+
+ * m68k.md (probe): Use %a0 to output the address.
+
+Mon Jul 27 20:08:21 1992 Mike Stump (mrs@hal)
+
+ * c++: Fix errors introduced by rms. Bullet-proof handling of
+ arguments with funny things in them such as newlines, spaces, tabs,
+ single quotes, double quotes, etc...
+
+Mon Jul 27 17:38:52 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.md: Add DEFINE_SPLITs to optimize logic operation with
+ certain immediate values.
+
+ * sparc.md: Correct inconsistent operand constraints in peepholes.
+
+ * sparc.h (ASM_LONG, ASM_SHORT, ASM_BYTE_OP): Definitions added.
+ (ASM_OUTPUT_DOUBLE): Use REAL_VALUE_TO_TARGET_DOUBLE to convert.
+ (ASM_OUTPUT_FLOAT): Use REAL_VALUE_TO_TARGET_SINGLE to convert.
+ (ASM_OUTPUT_INT): Use ASM_LONG pseudo-op.
+ (ASM_OUTPUT_SHORT): Use ASM_SHORT pseudo-op.
+ (ASM_OUTPUT_CHAR): Use ASM_BYTE_OP pseudo-op.
+ (ASM_OUTPUT_BYTE): Use ASM_BYTE_OP pseudo-op.
+
+Mon Jul 27 17:10:19 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gstdarg.h (va_arg): Don't use +=; no need to set AP twice.
+
+Sun Jul 26 14:21:13 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * final.c (final_scan_insn): Align jump table only if
+ READONLY_DATA_SECTION. Otherwise, the table is in the text section.
+
+ * collect2.c (dup2): Defined, if NO_DUP2.
+
+ * plexus.h: New file.
+ * m68k.c (output_function_prologue): Make a probe instruction
+ if NEED_PROBE if nonzero.
+ * configure (m68k-plexus-sysv*): New alternative.
+
+ * c-convert.c (convert): Succeed if TYPE is the main variant
+ of the given type.
+ * c-typeck.c (build_conditional_expr): Compare using TYPE_MAIN_VARIANT.
+
+ * c-decl.c (duplicate_decls): Copy old RTL *before* make_var_volatile.
+
+Sat Jul 25 21:45:44 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (pushdecl): Never reuse global fcn decl in place of
+ local extern; just copy some info from it.
+
+Sat Jul 25 06:14:58 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * expmed.c (expand_divmod): Eliminate the generation of branches
+ when possible.
+
+Sat Jul 25 04:34:09 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes (X11/Xmu/Xmu.h): Fix this or X11/Xmu.h,
+ whichever exists.
+
+Sat Jul 25 00:41:12 1992 Paul Eggert (eggert@twinsun.com)
+
+ * c-parse.y (datadecl): Diagnose empty declarations in old-style
+ function headers.
+ * c-decl.c (shadow_tag_warned): New function.
+
+ * c-lex.c (yylex): Diagnose `1.0fl'. Issue just one
+ diagnostic for `1e1000000f'.
+
+Fri Jul 24 19:25:51 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * dbxout.c (dbxout_symbol): Distinguish implicit C++ typedefs
+ from explicit C typedefs for structs, using DECL_SOURCE_LINE.
+
+ * c-decl.c (duplicate_decls): Use TYPE_MAIN_VARIANT even for compares
+ with void_type_node.
+ (grokdeclarator, get_parm_info, store_parm_decls): Likewise.
+
+Fri Jul 24 10:07:13 PDT 1992 Ron Guilmette (rfg at ncd.com)
+
+ * dwarfout.c (is_tagged_type): New function added.
+ (member_attribute): Use it.
+ (type_ok_for_scope): Rewritten to eliminate serious bugs.
+ (output_type): Call `output_pending_types_for_scope' at the end of
+ struct/union types (which are themselves scopes in C++).
+
+Fri Jul 24 13:36:46 1992 Michael Meissner (meissner@osf.org)
+
+ * dbxout.c (toplevel): Include defaults.h to get the definition of
+ ASM_STABD_OP.
+
+ * Makefile.in (dbxout.o): Add defaults.h dependent.
+
+ * i386rose.h (CC1_SPEC): Remove MIPS switches accidently left in.
+
+Thu Jul 23 09:49:43 PDT 1992 Ron Guilmette (rfg at ncd.com)
+
+ * dwarfout.c (is_body_block): Rewritten for greater saftey.
+ (output_block): Fixed to deal correctly with non-inlined blocks.
+
+Thu Jul 23 15:37:23 1992 Jeffrey A Law (law at schirf.cs.utah.edu)
+
+ * flow.c (propagate_block): Change "struct foo" to "struct sometimes".
+
+Thu Jul 23 15:10:51 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * m88k.h (ASM_OUTPUT_CASE_LABEL): Change to readonly section if the
+ table contains addresses.
+ (JUMP_TABLES_IN_TEXT_SECTION): True by default.
+
+Thu Jul 23 13:54:27 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.c (large_int): Use HOST_WIDE_INT type to hold INTVAL.
+ (gen_int_relational): Ditto.
+ (gen_conditonal_branch): Don't emit any insns if the result is
+ always false, and emit a normal jump if the result is always true.
+
+ * mips.c (mips_move_1word): Count LABEL_REF's as a memory
+ reference. Rework half-pic load of symbols, to not expect movsi
+ to have converted the load address into a load, and for CONST's,
+ do the addition after the pointer is loaded.
+
+ * mips.md (type attribute, movsi3): Eliminate 'pic' attribute,
+ just use 'load' instead.
+ (fix_truncdfsi2): Make this a define_insn, instead of a
+ define_exapnd and an insn, and use match_scratch to allocate the
+ two scratch registers. Adjust length costs, so that they match
+ the current code the assembler produces.
+ (fix_truncsfsi2): Ditto.
+ (movsi): Don't convert load of half-pic addresses and CONST's into
+ the real load. It causes more problems than it solves. Adjust
+ cost of half-pic addresses to be 2, not 4.
+
+ * mips-tfile.c (parse_def): Allow spaces in names, since C++
+ templates produce things like: #.def SMANIP<long unsigned int>; ...
+ (parse_stabs_common): Code from Lisa Repka, to handle symbol +/-
+ offset, and to look up things in the external string table, if the
+ name is not found in the local string table.
+
+Wed Jul 22 13:08:33 1992 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * sparc.md (movdf+1): Use new 'T' and 'U' constraints to
+ determine when an ldd or std will have a length of 1, and
+ therefore is eligible for use in some delay slots.
+ (uncond_branch): New attribute used for unconditional branches.
+ All unconditional branch patterns changed.
+ (define_delays and delay slot attributes): Do not allow
+ uncond_branch instructions in delay slots. Do not allow fpload or
+ fpstore operations in a conditional branch delay slot. Allow
+ fpload and fpstore in call, unconditional branch, and annuled
+ conditional branch delay slots.
+
+ * sparc.c (registers_ok_for_ldd_peep, addrs_ok_for_ldd_peep):
+ Functions renamed from registers_ok_for_ldd and
+ memory_ok_for_ldd respectively. All callers changed.
+ (register_ok_for_ldd): New function to determine if a register is
+ a pseudo or the first register in a hard register pair.
+ (mem_aligned_8): No longer static. Return 0 instead of aborting
+ when presented an rtx which is not a MEM.
+ (eligible_for_epilogue_delay): Use in_uncond_branch_delay since
+ this in an unconditional branch.
+
+ * sparc.h (EXTRA_CONSTRAINT) Add new 'T' and 'U' constraints
+ which check for aligned accesses to memory and register pairs.
+
+Wed Jul 22 11:22:37 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Bump meissner version number to 22.
+ (extern declarations): Add declarations for asm_file_name,
+ call_used_regs, langguage_string, save_argv, version_string,
+ mips_{begin,end,expand}_{pro,epi}logue, simple_epilogue_p,
+ {address,const_{double,int},general,{,non}immediate}_operand,
+ memory_address_p, {{,non}memory,register,scratch}_operand,
+ abort_with_insn, debug_rtx, fatal_io_error, get_frame_size,
+ offsettable_address_p, output_address, permalloc,
+ reg_mentioned_p, abort, atoi, getenv, mktemp, and
+ mips_expand_{epi,pro}logue.
+ (*_REGNUM): Add in GP_REG_FIRST in case registers are ever
+ renumbered.
+ (struct mips_frame_info): Add num_gp, num_fp fields.
+ (SECONDARY_MEMORY_NEEDED): Define, return 1 unless -mdebugh if
+ moving between FP <-> GP registers.
+
+ * mips.c (extern declarations): Move most of the declarations to
+ mips.h, except for those of type 'rtx' or 'tree', since not all
+ files include rtl.h and tree.h. Add more declarations for gen_xxx
+ functions that are now used.
+ (reg_or_0_operand): Add default case for switch on enumeration, to
+ allow compiling with -Wall.
+ (simple_memory_operand): Ditto.
+ (mips_count_memory_refs): Ditto.
+ (mips_move_1word): Ditto.
+ (mips_move_2words): Ditto.
+ (mips_address_cost): Ditto.
+ (map_test_to_internal_test): Ditto.
+ (mips_move_1word): Align asm comments in loading negative ints.
+ (mips_move_1word): Use GEN_INT macro to generate CONST_INT's.
+ (mips_move_2words): Ditto.
+ (gen_int_relational): Ditto.
+ (block_move_load_store): Ditto.
+ (block_move_loop): Ditto.
+ (expand_block_move): Ditto.
+ (block_move_load_store): #if 0, not currently used.
+ (block_move_sequence): Ditto.
+ (compute_frame_size): Fill in num_gp and num_fp fields.
+ (simple_prologue_p): Rename from null_prologue.
+ (save_restore_insns): New function to emit appropriate save and
+ restore operations for prologue/epilogue -- only prologue used at
+ present.
+ (function_prologue): Move generation of instructions to
+ mips_expand_prologue.
+ (mips_expand_prologue): Generate appropriate insns for the
+ prologue of the function.
+ (mips_expand_epilogue): Generate appropriate insns for the
+ epilogue of the function -- not called at present.
+
+ * mips.md (ashldi3_internal): Add `&' constraint to operand 0.
+ (ashrdi3_internal): Add `&' constraint to operand 0.
+ (return): Turn this into a define expand that wraps a return and a
+ USE reg:31 inside of a parallel.
+ (return_internal): Insn form of return instruction.
+ (prologue): New define expand to generate the necessary
+ instructions for the function prologue.
+ (mov{si,hi,qi}): Split the integer move INSNs into two groups,
+ those that support -mdebugh and allow ints to be in floating
+ point registers, and those that don't allow it.
+
+Tue Jul 21 21:27:43 1992 Mike Stump (mrs@albert.gnu.ai.mit.edu)
+
+ * Complete 9th Cygnus <---> FSF merge.
+
+ Tue Jul 21 03:17:05 1992 Mark Eichin (eichin@cygnus.com)
+
+ * cp-lex.c (process_next_inline): when bailing out on a parse error,
+ throw away nextchar as well in case it got set.
+
+ Tue Jul 21 05:31:10 1992 Ken Raeburn (raeburn@cygnus.com)
+
+ * cp-pt.c (tsubst, case FUNCTION_DECL): If the context class has a
+ null method vector, don't look inside it for its size.
+
+ Thu Jul 16 16:02:55 1992 Per Bothner (bothner@rtl.cygnus.com)
+
+ * cp-typeck.c (convert_for_assignment): If assigning (void*)
+ to a normal pointer, emit a warning, not an error. There is
+ a lot of existing code (including libg++ and converted C
+ code) that expects to be able to assign from (void*).
+
+ Tue Jul 14 06:59:38 1992 Michael Tiemann (tiemann@rtl.cygnus.com)
+
+ * cp-decl.c (finish_function): Call destructors correctly when
+ baseclasses are replicated in the inheritance hierarchy.
+
+ Mon Jul 13 05:16:10 1992 Michael Tiemann (tiemann@rtl.cygnus.com)
+
+ * cp-typeck.c (build_modify_expr): If we split a COND_EXPR in order
+ to perform the assignment in each arm, convert the rhs of each
+ branch according to RESULT_TYPE.
+
+ * cp-typeck.c (convert_for_assignment): Treat null_pointer_node
+ specially when converting to non-void pointers.
+
+ * cp-class.c (modify_vtable_entries): In the loop that modifies
+ vtable entries for each non-virtual baseclass, correctly handle
+ cases where BASE is an ambiguous baseclass for BASE_CONTEXT.
+
+ Sun Jul 12 01:32:31 1992 Mike Stump (mrs@cygnus.com)
+
+ Wed May 27 01:33:24 1992 Ron Guilmette (rfg at ncd.com)
+
+ * cp-type2.c (store_init_value), cp-typeck.c
+ (build_modify_expr, convert_arguments,
+ build_binary_op_nodefault, convert_for_assignment), cp-parse.y
+ (member_init, template_def, datadef, stmt): changed some
+ pedantics into !traditionals and reworded error messages.
+
+ Sun Jul 12 01:11:53 1992 Mike Stump (mrs@cygnus.com)
+
+ Jul 1992 Ron Guilmette (rfg at ncd.com)
+
+ * cp-decl.c (finish_function): Set BLOCK_SUPERCONTEXT for the
+ outermost scopes of functions to point to the associated
+ FUNCTION_DECL nodes.
+
+ Fri Jul 10 17:52:36 1992 Ken Raeburn (raeburn@cygnus.com)
+
+ * cp-decl.c (struct binding_level): New field pseudo_global
+ indicates that this binding level should be treated like the global
+ binding level in some respects.
+ (declare_pseudo_global_level, pseudo_global_level_p): Set and test
+ routines.
+ (push_overloaded_decl): Don't forget overloads in pseudo-global
+ binding levels.
+ * cp-pt.c (tsubst, case FUNCTION_DECL): Search for an existing decl
+ before creating a new one.
+ (overload_template_name): Make new level pseudo-global.
+ (type_unification): Indicate failure for unknown_type_node.
+ (unify): Likewise.
+
+ Wed Jul 8 01:59:03 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (lookup_name, grokvardecl, grokdeclarator),
+ cp-call.c (build_field_call), cp-seach.c (lookup_field),
+ cp-typeck.c (build_component_ref), cp-lex.c (do_identifier),
+ cp-init.c (expand_member_init, build_member_call,
+ build_offset_ref): lookup_field now has 4 arguments.
+
+ Wed Jul 8 01:14:43 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-parse.y (primary): Call to lookup_name needs 2 arguments.
+
+ Tue Jul 7 21:14:05 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-method.c (build_overload_name): Handle INTEGER_TYPEs
+ cleanly and uniformly.
+
+ Tue Jul 7 09:19:52 1992 Michael Tiemann (tiemann@rtl.cygnus.com)
+
+ * cp-call.c (build_method_call): If `convert_to_pointer' returns
+ error_mark_node, return that without doing any more work.
+
+ Thu Jul 2 15:42:28 1992 Mike Stump (mrs@cygnus.com)
+
+ Thu Jul 2 18:08:42 1992 Chip Salzenberg (chip at tct.com)
+
+ * cp-typeck.c (convert_arguments): Don't assume that error
+ message will be short enough for fixed-length buffer.
+
+ Wed Jul 1 19:52:59 1992 Mike Stump (mrs at cygnus.com)
+
+ Wed Jun 3 12:57:57 1992 Brendan Kehoe (brendan@cs.widener.edu)
+
+ * cp-decl2.c (grokbitfield): Only do width checking on properly
+ parsed bitfields.
+
+ Wed Jul 1 18:58:17 1992 Mike Stump (mrs at cygnus.com)
+
+ Wed May 27 01:33:24 1992 Ron Guilmette (rfg at ncd.com)
+
+ * cp-lex.c (readescape), cp-parse.y (unary_expr, maybecomma_warn,
+ component_decl_list, stmt), cp-type2.c (digest_init), cp-typeck.c
+ (c_sizeof, build_function_call_real, convert_arguments,
+ build_binary_op_nodefault, pointer_int_sum, pointer_diff,
+ build_unary_op, c_expand_return): change some warnings to
+ pedwarns. Put in new pedwarns, change wording of messages so that
+ they are more readable. Don't issue some warnings when
+ traditional is given.
+
+ Wed Jul 1 13:56:30 1992 Mike Stump (mrs at cygnus.com)
+
+ Wed Apr 29 23:37:00 1992 Niklas Hallqvist (niklas at appli.se)
+
+ * cp-decl.c (finish_decl): make sure destructors are called for
+ objects in a file.
+
+ Wed Jul 1 11:12:05 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-lex.c: extract YYEMPTY out of the parser generated .c
+ file and put in the parser .h so that cp-lex.c does not have
+ to define it.
+
+ Mon Jun 29 12:58:59 1992 Mike Stump (mrs at cygnus.com)
+
+ Mon Jun 29 15:20:48 1992 Chip Salzenberg (chip at tct.com)
+
+ * cp-cvt.c (convert_to_integer): Don't add a NOP_EXPR in cases
+ where we can simply change the type of the entire tree.
+
+ Mon Jun 29 10:56:56 1992 Mike Stump (mrs at cygnus.com)
+
+ * c++: Makes sure -lg++ comes before -lm since libg++ uses
+ things from libm.
+
+ Mon Jun 22 13:47:42 1992 Mike Stump (mrs at cygnus.com)
+
+ Sun Jun 21 14:06:41 1992 Brendan Kehoe (brendan at cs.widener.edu)
+
+ * cp-typeck.c (convert_for_initialization): Only try to convert a
+ rhs that was parsed properly.
+
+ Mon Jun 22 13:31:40 1992 Jim Wilson (wilson at sphagnum.cygnus.com)
+
+ * cp-parse.y (primary): Clear the TREE_USED flag of a block tree
+ put in a BIND_EXPR.
+
+ Sun Jun 21 09:59:58 1992 Michael Tiemann (tiemann at rtl.cygnus.com)
+
+ * cp-type2.c (build_scoped_ref): Use SCRATCH for head of typelist,
+ rather than calling alloca.
+
+ Fri Jun 19 16:23:02 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-pt.c (unify): Type unification of things that do not have a
+ valid IDENTIFIER_TEMPLATE fail instead of core dumping.
+
+ Wed Jun 17 13:36:04 1992 Michael Tiemann (tiemann at rtl.cygnus.com)
+
+ * cp-pt.c (tsubst): Don't try to substitute into error_mark_node.
+
+ * cp-decl.c (grokparms): Convert initializers that have
+ TREE_READONLY_DECL_P set into their constant equivalents.
+
+ Tue Jun 16 19:09:23 1992 Mike Stump (mrs at cygnus.com)
+
+ Wed Jun 3 12:57:57 1992 Brendan Kehoe (brendan at cs.widener.edu)
+
+ * cp-decl.c (grokdeclarator): Disallow virtual functions in unions.
+
+ Tue Jun 16 18:11:45 1992 Mike Stump (mrs at cygnus.com)
+
+ Wed Jun 3 12:57:57 1992 Brendan Kehoe (brendan at cs.widener.edu)
+
+ * cp-class.c (finish_struct): Forbid local classes to have static
+ members.
+
+ Mon Jun 15 21:44:08 1992 Mike Stump (mrs at cygnus.com)
+
+ Tue Jun 2 09:26:34 1992 Brendan Kehoe (brendan at cs.widener.edu)
+
+ * cp-init.c (build_new): Don't allow the use of new on a reference.
+
+ Mon Jun 15 20:52:08 1992 Mike Stump (mrs at cygnus.com)
+
+ Tue Jun 2 09:26:34 1992 Brendan Kehoe (brendan at cs.widener.edu)
+
+ * cp-decl.c (grokparms): Don't allow a local variable to be used
+ in a default argument expression.
+
+ Mon Jun 15 18:54:28 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-decl.c (finish_decl): Add an error message for uninitialized
+ const objects like const int a;.
+
+ Mon Jun 15 16:05:22 1992 Mike Stump (mrs at cygnus.com)
+
+ Not sure if it is strictly necessary for the C++ front end, but...
+
+ Sun May 31 15:31:46 1992 Brendan Kehoe (brendan at cs.widener.edu)
+
+ * cp-typeck.c (self_promoting_args_p): Allow the arg type to be
+ null (copied from Oct 16, 1991 change by Wood).
+
+ Fri Jun 12 16:42:05 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-typeck.c (build_binary_op_nodefault): Conditionalize code that
+ deals with the comparison of non-distinct object types, thus avoiding
+ a core dump.
+
+ Fri Jun 12 10:23:17 1992 Mike Stump (mrs at cygnus.com)
+
+ Wed Jun 10 19:20:29 1992 Brendan Kehoe (brendan at cs.widener.edu)
+
+ * cp-tree.c (break_out_calls): Begin at 1 less than the length of
+ the length of the tree code, not the length itself, for generic
+ expressions and those with side-effects.
+
+ Thu Jun 11 17:43:55 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-init.c (expand_default_init): New function to handle the
+ details of default copy constructors and other magic in one place.
+
+ * cp-init.c (expand_aggr_init_1): Implement default constructors
+ more fully.
+
+ Thu Jun 11 17:16:54 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-call.c (build_method_call): Don't produce an error message if
+ we are looking up things speculatively.
+
+ Thu Jun 11 10:58:47 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-call.c (convert_harshness): Penalize const arguments passed
+ into non-const parameters.
+
+ Thu Jun 11 10:02:52 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-typeck.c (build_c_cast): Implement more reference casts so
+ that one can cast a base reference to a derived reference.
+
+Tue Jul 21 15:28:36 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.h (SECONDARY_MEMORY_NEEDED): Define to force reload to
+ handle any copy between GENERAL_REGS and FP_REGS.
+
+ * sched.c (schedule_block): Give some insns high priorities,
+ instead of excluding them from scheduling, to ensure that they end
+ up at the end of the block after scheduling.
+
+ * i960.c (i960_output_ldconst): Use REAL_VALUE_FROM_CONST_DOUBLE
+ instead of pointer indirection to extract double from CONST_DOUBLE.
+
+Tue Jul 21 14:05:34 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * svr4.h (HANDLE_SYSV_PRAGMA): Defined.
+
+ * sol-crt*.asm: Renamed from sol-crt*.s, and put in config.
+ * t-sol2 (crt*.o): Changed accordingly. Also use $(AS).
+
+ * gbl-ctors.h (ON_EXIT): Test HAVE_ATEXIT before sun.
+
+Mon Jul 20 18:56:02 1992 Fred Fish (fnf at fishpond)
+
+ * svr4.h (ASM_OUTPUT_BEFORE_CASE_LABEL): New macro--default definition.
+ (ASM_OUTPUT_CASE_LABEL): Use that.
+ * m68ksgs.h (ASM_OUTPUT_BEFORE_CASE_LABEL): Do the swbeg here.
+ (ASM_OUTPUT_CASE_LABEL): Use that.
+
+ * configure (m68k-*-amix*): Use fixinc.svr4 and install.sh.
+
+ * x-amix (ENQUIRE_CFLAGS): Remove; obsolete.
+
+ * amix.h (TRANSFER_FROM_TRAMPOLINE): Remove #undef.
+
+Mon Jul 20 17:45:46 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * dbxout.c (dbxout_source_line): New function.
+ * final.c (output_source_line): Use that.
+
+ * configure (sparc-*-sunos5*): New alias.
+ (sparc-*-solaris2*): Use t-sol2.
+
+ * i860.md (mulsi3_little, mulsi3_big): New define_expand patterns.
+ (mulsi3): Just use one of them.
+
+ * Makefile.in (install-fixincludes): Pass second and third args.
+
+Mon Jul 20 16:07:12 1992 Pat Rankin (rankin@eql.caltech.edu)
+
+ * vms.h (MAYBE_VMS_FUNCTION_PROLOGUE): change _c$main_args to
+ uppercase instead of relying on gas to make the case translation
+
+Sun Jul 19 00:04:16 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-tree.h (C_PROMOTING_INTEGER_TYPE_P): New macro.
+ * c-decl.c (duplicate_decls, grokdeclarator, finish_struct):
+ Use C_PROMOTING_INTEGER_TYPE_P to decide whether a type promotes.
+ (start_function): Likewise.
+ * c-typeck.c (default_conversion): Use C_PROMOTING_INTEGER_TYPE_P
+ to decide whether a type should promote.
+ (self_promoting_args_p, self_promoting_type_p): Likewise.
+
+ * c-aux-info.c (gen_type): For array type, state the size.
+
+ * final.c (output_addr_const): Handle ZERO_EXTEND and SIGN_EXTEND.
+ * expr.c (expand_expr, NOP_EXPR case): If EXPAND_INITIALIZER,
+ generate ZERO_EXTEND or SIGN_EXTEND; don't emit insns.
+
+ * function.c (assign_parms): Use const0_rtx as DECL_RTL and as
+ DECL_INCOMING_RTL if tmode of parm is void.
+
+ * jump.c (mark_jump_label): Don't make REG_LABEL for nonlocal label.
+ * loop.c (add_label_notes): Don't make REG_LABEL for nonlocal label.
+ (rtx_renumbered_equal_p): Use == to compare nonlocal labels.
+
+ * rtl.h (LABEL_REF_NONLOCAL_P): New macro.
+ * expr.c (expand_expr): Set LABEL_REF_NONLOCAL_P for nonlocal labels.
+ * reload1.c (set_label_offsets): Ignore nonlocal labels.
+
+ * c-parse.y (primary): Set TREE_CONSTANT in the NOP_EXPR for an enum.
+
+ * Solaris changes from Cygnus:
+
+ * fixinc.svr4: take a third argument indicating where files to be
+ copied in should come from (useful when not building in source
+ directory).
+ Set TERM to dumb so ex won't hang (by zoo).
+ * fixincludes: Take the same new argument.
+
+ * gmon-sol2.c: New file.
+ * t-sol2: New file.
+ * sol2-crt1.s, sol2-crti.s, sol2-crtn.s: New files.
+
+ * xm-spcv4.h (ONLY_INT_FIELDS): Define, if __GNUC__.
+
+ * sparc.h (FUNCTION_PROFILER): Use ASM_OUTPUT_INTERNAL_LABELREF.
+ (FUNCTION_BLOCK_PROFILER): Mark with FIXME that it needs work.
+ (ASM_OUTPUT_INTERNAL_LABELREF): Define.
+ * spc-sol2.h: Entire file is new except for
+ defining MD_STARTFILE_PREFIX.
+ * dbxout.c (dbxout_block): obey DBX_BLOCKS_FUNCTION_RELATIVE
+ (dbxout_init): Use ASM_IDENTIFY_GCC_AFTER_SOURCE if defined.
+
+ * sparc.h (CONSTANT_ALIGNMENT): Add parens for Sun compiler.
+
+Sun Jul 19 11:03:56 1992 Fred Fish (fnf at fishpond)
+
+ * i386v4.h (real.h): Remove apparently unnecessary inclusion.
+ * i386v4.h (HANDLE_SYSV_PRAGMA): Replaces HANDLE_PRAGMA.
+
+Sat Jul 18 20:37:37 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_binary_op): Don't set shorten for signed division.
+
+ * final.c (end_final): Align the table of addresses.
+
+Fri Jul 17 23:49:28 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cexp.y: Include stdio.h.
+
+Fri Jul 17 06:17:34 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * cp-tree.h (DECL_THIS_EXTERN): Renamed from DECL_EXTERNAL.
+ * cp-pt.c, cp-decl.c: Rename DECL_EXTERNAL -> DECL_THIS_EXTERN and
+ then rename TREE_EXTERNAL -> DECL_EXTERNAL.
+
+Fri Jul 17 05:59:26 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (instantiate_decls{,_1}): Don't do instantiation
+ here if the address is mode-dependent.
+
+ * libgcc2.c: Include tconfig.h instead of tm.h.
+ Include machmode.h.
+ (__do_global_dtors): Cast to widest integer type, then narrow, to
+ avoid warning if int is narrower than pointer.
+ * Makefile.in (libgcc2.a): Includes machmode.h.
+
+ * cse.c (cse_insn): Allow paradoxical SUBREGs in the table.
+
+ * reload.c (secondary_memlocs{,_elim}): New variables.
+ (get_secondary_mem, clear_secondary_mem): New function.
+ (push_reload): Convert SUBREG of hard reg to new hard reg.
+ Call get_secondary_mem when needed.
+ (find_reloads): Clear secondary_memloc_elim for each insn.
+ * reload1.c (reload): If SECONDARY_MEMORY_NEEDED, check for frame
+ size changed.
+ Call clear_secondary_mem.
+ (emit_reload_insns, gen_input_reload): Use memory when required to
+ do reload.
+ * reload.h (get_secondary_mem): Declare.
+
+ * cccp.c (NULL_PTR): Define as void * if STDC.
+
+ * rs6000.md (negdi2): Corrected name; used to be negdi3.
+
+ * combine.c (subst, case SET): Put code to move SUBREG after
+ code that calls make_compound_operation.
+ (make_extraction): Don't check for INNER a REG except for in dest.
+ Fix typo checking for REG.
+ (make_compound_operation): Get the result in the same mode it
+ used to be.
+
+ * reload.c (push_reload): If a SUBREG requires a secondary reload
+ but the inner expression doesn't, reload the inner expression
+ instead.
+
+Fri Jul 17 02:20:51 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (process_command): Handle `-Wl,' and `-Wa,'.
+ (do_spec_1): Handle %Y.
+ (default_compilers): Use %Y in assembler commands.
+
+ * function.c (assign_parms): In last change, test mode in parm type.
+
+Thu Jul 16 15:03:25 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * loop.c (find_and_verify_loops): Ignore jumps to missing labels,
+ when using P.
+
+ * c-typeck.c (build_binary_op): Improve shift warning messages.
+
+ * x-dpx2 (AS): Use $(GAS).
+ (GAS): New variable.
+
+ * mot3300.h (ASM_OUTPUT_CASE_END): Deleted.
+
+ * function.c (assign_parms): If arg was passed by invisible
+ reference, copy it to a pseudo if appropriate.
+
+ * dwarfout.c (pure_or_virtual_attribute):
+ Add #if 0 around use of DECL_ABSTRACT_VIRTUAL_P.
+
+Wed Jul 15 16:29:05 PDT 1992 Ron Guilmette (rfg at ncd.com)
+
+ * dwarfout.c (BLOCK_INLINE_FUNCTION): Obsolete definition deleted.
+ (block_ultimate_origin): New function.
+ (output_block):
+ Local var `have_significant_locals' renamed to `must_output_die'.
+ (output_block): Rewritten to handle abstract & concrete instances of
+ blocks of inline functions.
+ (output_decls_for_scope):
+ Don't bump `next_block_number' for abstract blocks.
+
+ * toplev.c (rest_of_compilation): Call `dwarfout_file_scope_decl' for
+ both types of "abstract" instances of inline functions.
+
+ * tree.def (BLOCK): Use new tree code category letter 'b' for BLOCKs.
+ * tree.h (struct tree_block): New struct type definition added.
+ (BLOCK_VARS, BLOCK_TYPE_TAGS, BLOCK_SUBBLOCKS, BLOCK_HANDLER_BLOCK):
+ Changed to reference fields of the new `struct tree_block' type.
+ (BLOCK_ABSTRACT_ORIGIN, BLOCK_ABSTRACT): Definitions added.
+ (union tree_node): Added `struct tree_block' as a new variant.
+ * tree.c (typedef tree_node_kind): Added new kind, i.e. `b_kind'.
+ (tree_node_kind_names): Added string name for new kind `b_kind'.
+ (make_node, copy_node, stabilize_reference_1):
+ Handle case 'b' (for BLOCK nodes).
+ (make_node): Don't try to deal with BLOCKs when doing a type 'e' node.
+ * print-tree.c (print_node):
+ Handle type 'b'; delete code for BLOCK from 'e' case.
+ Handle fields BLOCK_ABSTRACT_ORIGIN and BLOCK_ABSTRACT.
+ * calls.c (calls_alloca): Don't return 0 automatically if the expr
+ given is headed by a type 'b' node.
+ * cp-tree.c (break_out_calls): Add case for decl nodes.
+ Added case to catch BLOCK nodes (and to abort).
+ * integrate.c (copy_decl_tree): Set BLOCK_ABSTRACT_ORIGIN in new
+ instance block if not already set.
+ (expand_inline_function): Set BLOCK_ABSTRACT_ORIGIN for outermost
+ scope to point to progenitor (abstract inline) FUNCTION_DECL node.
+ (integrate_decl_tree): Set BLOCK_ABSTRACT_ORIGIN for inlined instance
+ BLOCKs.
+ (set_block_origin_self, set_decl_origin_self, set_block_abstract_flags,
+ set_decl_abstract_flags): New functions.
+ (output_inline_function): Call `set_decl_origin_self' for each fndecl
+ which is about to have an out-of-line instance generated for it.
+
+Wed Jul 15 15:08:00 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-convert.c (convert_to_integer): Push truncation inside COND_EXPR.
+
+ * optabs.c (emit_cmp_insn): Always do protect_from_queue on x, y, size.
+ (expand_float, expand_fix): Likewise.
+ * expmed.c (expand_shift, expand_set_flag):
+ Call protect_from_queue before convert_to_mode.
+ * expr.c (convert_move): Don't call protect_from_queue.
+ (emit_block_move): Protect SIZE.
+
+ * explow.c (allocate_dynamic_stack_space) [SETJMP_VIA_SAVE_AREA]:
+ Always call round_push; we can't rely on alignment of size.
+
+Wed Jul 15 06:47:11 1992 Richard Kenner (kenner@vlsi1.ultra.nyu)
+
+ * combine.c (try_combine): Verify that I2DEST is a register before
+ trying to change its mode.
+
+Tue Jul 14 15:13:28 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * c-decl.c (finish_struct): Handle nested struct redefinitions.
+ * stor-layout.c (layout_record): Handle NULL dsize.
+
+Tue Jul 14 21:31:51 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (duplicate_decls, pushdecl, grokdeclarator):
+ (store_parm_decls, combine_parm_decls, finish_function):
+ Use TYPE_MAIN_VARIANT when comparing against specific non-void types.
+ * c-typeck.c (self_promoting_args_p, self_promoting_type_p):
+ (signed_type, unsigned_type, default_conversion, check_format):
+ (build_binary_op, c_expand_start_case): Likewise.
+
+Mon Jul 13 14:57:34 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (finish_function): Fix braino validating ret type of main.
+
+ * expr.c (expand_builtin): Refer to errno at rtl level only.
+ * sparc.h (TARGET_EDOM, GEN_ERRNO_RTX): New macros.
+
+Mon Jul 13 06:35:53 1992 Paul Eggert (eggert@twinsun.com)
+
+ * expr.c (expand_builtin):
+ For fsqrt, always use the special insn, then test for nan.
+
+Mon Jul 13 08:45:34 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * m88k.md: Constraint fixes from Torbjorn.
+
+ * jump.c (jump_optimize): In `x = a; if (...) x = b;' allow both a
+ and b to be non-zero if jumps are very expensive. Also allow a
+ and b to be constants where all the set bits in a are also set in
+ b when jumps are merely expensive.
+
+Sun Jul 12 17:43:03 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * genpeep.c (match_rtx): Sometimes use %ld when printing an XWINT.
+
+ * regclass.c (record_reg_classes): If OP is a REG, use it's mode
+ in case the mode in MATCH_OPERAND is VOIDmode.
+
+Sun Jul 12 13:03:54 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes: Replace the code that finds all directories
+ so that it looks for subdirs of dir reached via symlinks.
+
+ * cp-tree.h (IDENTIFIER_VIRTUAL_P): Macro moved here.
+ * tree.h (IDENTIFIER_VIRTUAL_P): Deleted from here.
+
+ * rtl.h (NOTE_BLOCK_NUMBER, SET_NOTE_BLOCK_NUMBER): New macros.
+ (NOTE_DECL_NAME, NOTE_DECL_CODE, ...): #if 0'd.
+ * function.c (identify_blocks, reorder_blocks): New functions.
+ (all_blocks, blocks_nreverse): New functions.
+
+ * isi.h: Deleted the #error; file should work now.
+ (LIB_SPEC): Use -lg only once.
+ (STRUCTURE_SIZE_BOUNDARY): Defined.
+
+ * protoize.c (process_aux_info_file): Set must_create before jumping to
+ start_over. Don't clear must_create at start_over. Don't test
+ source file mod time for SYSCALLS.
+
+ * machmode.h (GET_MODE_NUNITS): Avoid division by zero.
+
+Sat Jul 11 22:21:47 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc-parse.y (primary): Don't test TREE_EXTERNAL;
+ call assemble_external regardless.
+
+ * tree.h (DECL_INLINE, DECL_NONLOCAL, DECL_REGISTER, DECL_EXTERNAL):
+ Renamed from TREE_INLINE, TREE_NONLOCAL, TREE_REGDECL, TREE_EXTERNAL.
+ All uses changed.
+
+ * xm-hp320.h (USG): Define it.
+
+Sat Jul 11 21:43:56 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Bump meissner version number to 21.
+
+ * mips.md (andsi3, iorsi3, xorsi3): Make predicates match the
+ actual machine, since combine can now recreate the bitfields, and
+ doesn't do multiple logical operations when setting more than one
+ bitfield in a word.
+
+ * objc-actions.c (xmalloc, free): Don't provide extern decls for
+ these, since tree.h and rtl.h both now provide them.
+
+ * cp-lex.c (real_yylex): Declare a variable i, since a for loop
+ uses it as an index. Remove an extra '(' from a build_int_2 call.
+
+Sat Jul 11 13:13:03 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * varasm.c: Get rid of default definitions of ASM_OUTPUT_CONSTRUCTOR
+ and ASM_OUTPUT_DESTRUCTOR.
+
+ * c-aux-info (affix_data_type): Don't be fooled by names starting
+ with `const' or `volatile'.
+
+ * c-typeck.c (digest_init): Deal with nested {...} for scalar.
+
+ * loop.c, reload1.c: Include stdio.h before config.h.
+
+ * toplev.c (rest_of_compilation): Save and restore DECL_ARGUMENTS.
+
+Fri Jul 10 22:42:34 1992 Paul Eggert (eggert@twinsun.com)
+
+ * tree.c (build_real_from_int_cst): Truncate when folding to float.
+ (real_value_from_int_cst): Do not treat the topmost bit
+ of an unsigned long long value as a sign bit.
+
+ * cse.c (simplify_binary_operation): Don't optimize 0.0/x to 0.0
+ if IEEE floating point is used, because x might be negative or NaN.
+
+Fri Jul 10 15:37:42 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * genpeep.c (match_rtx): Handle `w' elts of rtx.
+
+ * Makefile.in (INTERNAL_CFLAGS): Add -DIN_GCC.
+
+Fri Jul 10 18:56:22 1992 Eric Youngdale (youngdale@v6550d.nrl.navy.mil)
+
+ * cccp.c (finclude): Clean error msf if file_size_and_mode fails.
+
+Fri Jul 10 13:44:46 1992 Howard Chu (hyc@hanauma.jpl.nasa.gov)
+
+ * fx2800.h (LINK_LIBGCC_SPECIAL): Defined.
+ (DBX_OUTPUT_STANDARD_TYPES): Check that DECL_NAME(decl) exists
+ before trying to get its IDENTIFIER_POINTER.
+
+Thu Jul 9 20:56:01 1992 Per Bothner (bothner@rtl.cygnus.com)
+
+ * dbxout.c (dbxout_type_methods): Fix minimal_debug so
+ that it skips a redundant class name prefix, as intended.
+ It now expects the length digits that precede the class name.
+
+Thu Jul 9 18:23:12 1992 Torbjorn Granlund (tege@wombat.gnu.ai.mit.edu)
+
+ * Makefile.in, libgcc2.c, longlong.h: Rename udiv_using_sdiv to
+ udiv_w_sdiv.
+
+Thu Jul 9 18:10:40 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * tree.h (STRIP_TYPE_NOPS): New macro.
+ * c-decl.c (build_enumerator): Use STRIP_TYPE_NOPS.
+ * c-typeck.c (default_conversion): Use STRIP_TYPE_NOPS.
+ (build_binary_op, build_function_call): Likewise.
+ * c-common.c (check_case_value): Use STRIP_TYPE_NOPS.
+
+ * mot3300.h (ASM_OUTPUT_CASE_END): New macro.
+ * m68k.c (switch_table_difference_label_flag): New variable.
+
+ * i860.md (QI and HI bte/btne patterns): Deleted.
+
+Thu Jul 9 06:09:20 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * c-typeck.c (default_conversion): Don't use STRIP_NOPS.
+
+ * print-rtl.c: Missing merge from 64-bit changes.
+ (print_rtx): Add new case 'w'.
+
+Wed Jul 8 14:35:39 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes, fixinc.svr4: Error if no argument.
+
+ * tree.c (integer_zerop, integer_onep, integer_all_onesp):
+ (integer_pow2p, real_zerop, real_onep, real_twop): Use STRIP_NOPS.
+ * expr.c (do_store_flag): Likewise.
+ * varasm.c (output_constructor): Likewise.
+ * c-decl.c (finish_struct, build_enumerator): Likewise.
+ * c-typeck.c (default_conversion, build_binary_op): Likewise.
+ (build_function_call): Likewise.
+
+ * integrate.c (integrate_decl_tree): Get rid of arg functionbody;
+ it was always 0.
+
+ * mot3300.h: Fix typo.
+
+ * final.c (leaf_renumber_regs_insn): Handle new 'w' format.
+
+Wed Jul 8 15:18:33 PDT 1992 Ron Guilmette (rfg at ncd.com)
+
+ * tree.h (DECL_ABSTRACT_ORIGIN, DECL_ABSTRACT): Definitions added.
+ (struct tree_decl): New fields `abstract_origin' & `abstract_flag'.
+ (struct tree_decl): Field `from_inline_flag' deleted.
+ (DECL_FROM_INLINE): Definition revised to check DECL_ABSTRACT_ORIGIN.
+ * integrate.c (copy_decl_list): New function added.
+ (save_for_inline_copying): Call `copy_decl_list' for formal parameters.
+ Set DECL_ABSTRACT_ORIGIN for fndecl to point to itself.
+ (copy_decl_tree): Use `copy_decl_list' rather than just `copy_list'.
+ (integrate_parm_decls, integrate_decl_tree): Set DECL_ABSTRACT_ORIGIN
+ to point to the progenitor.
+ * print-tree.c (print_node): Print the value of DECL_ABSTRACT_ORIGIN
+ rather than the value of DECL_FROM_INLINE.
+
+ * dwarfout.c (output_inlined_enumeration_type_die): New function.
+ (output_inlined_structure_type_die, output_inlined_union_type_die):
+ New functions added.
+ (output_entry_point_die, output_formal_parameter_die,
+ output_global_subroutine_die, output_global_variable_die,
+ output_label_die, output_lexical_block_die,
+ output_inlined_subroutine_die, output_local_variable_die,
+ output_local_subroutine_die):
+ Fixed to handle inline abstract & concrete (i.e. inlined) instances.
+ (output_inlined_subroutine_die): Deleted.
+ (output_label_die): Don't permit the rtx associated with a named
+ user-declared label to be marked as INSN_DELETED_P.
+ (output_tagged_type_instantiation): New function added.
+ (output_decl): Call `output_tagged_type_instantiation'.
+ Don't generate a pubnames label for anything marked as DECL_ABSTRACT.
+ (output_die): Generate the proper kind fo DIE for each of the four
+ possible combination of {normal, inlined} {variable, parameter}.
+ (dwarfout_file_scope_decl): Don't generate pubnames entries if
+ strictly abstract.
+
+ * dwarfout.c (ordering_attribute): Only def if USE_ORDERING_ATTRIBUTE
+ is defined.
+ (output_array_type_die): Only call ordering_attribute if it is defined.
+ (name_and_src_coords_attributes): Don't make it inline.
+ Do make it static linkage.
+ (const_value_attribute): Catch invalid kinds of rtx nodes
+ by aborting for the default case in switch.
+
+ * dwarfout.c (output_ptr_to_mbr_type_die): Make it static linkage.
+ (output_formal_types): Make sure that `formal_type' is initialized.
+ (output_type): Add a default case for switch.
+ (output_decl): Don't suppress DIEs for the initial (artificial)
+ arguments for C++ static member functions.
+
+ * dwarfout.c (ceiling, field_type, simple_type_align_in_bits,
+ simple_type_size_in_bits, field_byte_offset): New functions added.
+ (data_member_location_attribute): Use new routine `field_byte_offset'
+ to calculate the offset value for the AT_location attribute.
+ (byte_size_attribute): Use new routine `field_type' to get the
+ actual type for any FIELD_DECL. Also, use `simple_type_size_in_bits'
+ to avoid potential problems with ERROR_MARKs when computing the size
+ of a FIELD_DECL.
+ (bit_offset_attribute): Rewritten to use `field_byte_offset' when
+ determining the start of the "containing object".
+
+ * integrate.c (expand_inline_function): Integrate parameters before
+ locals to get debugging information in the proper order.
+ (integrate_decl_tree): Don't do a redundant pushlevel/poplevel for
+ the outermost scope (i.e. when level==0)... just use the one created
+ by `expand_inline_function'.
+
+ * calls.c (calls_alloca): For BLOCK, walk subblocks and vars by hand.
+
+Wed Jul 8 13:31:19 1992 Michael Meissner (meissner@osf.org)
+
+ * cp-decl.c (print_binding_level): Fix typo, where 'lbl' was used
+ instead of 'lvl'.
+
+ * objc-actions.c (build_shared_structure_initializer): Correct call
+ to build_int_2 which had only one argument, instead of two.
+
+Wed Jul 8 06:37:40 1992 Torbjorn Granlund (tege@sics.se)
+
+ * gstdarg.h, gvarargs.h: Test `__hppa__' instead of `__hp9000s800__'.
+
+ * romp.md (zero_extendhisi2): Remove unneeded constraint.
+
+ * rs6000.md (zero_extendhisi2): Remove unneeded constraint.
+ (lu/stu): Use %0 instead of %1 in assembler insns.
+ (call_value): Add missing "=" in constraint.
+
+Wed Jul 8 06:30:20 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.md (floatsidf): Correctly handle case when SImode operand
+ overlaps the first DFmode register.
+
+ * fold-const.c (distribute_bit_expr, range_test, fold_truthop):
+ Use TRUTH_AND_EXPR instead of BIT_AND_EXPR so invert_truthvalue works.
+
+ * c-decl.c (grokdeclarator): Strip all NOP_EXPRs from SIZE.
+
+ * integrate.c: Do 64-bit changes (this file omitted the last time).
+ Replace use of NULL and 0 in functions args with NULL_RTX.
+ (copy_rtx_and_substitute, subst_constants): Handle "w" rtl
+ operand class.
+
+ * rs6000.h (LINK_SPEC): Support -static.
+
+ * tree.c (make_node, copy_node, make_tree_vec, tree_cons, build1):
+ Clear or copy tree nodes in a consistent manner, referencing
+ every byte of the node.
+
+ * regclass.c: Initialize REG_CLASS_CONTENTS into an array of
+ ints, then copy into a HARD_REG_SET to avoid conditionalization
+ of REG_CLASS_CONTENTS on 64-bit machines.
+
+ * c-common.c (check_case_value): Strip the NOP_EXPR added by
+ the grammar.
+ * stmt.c (pushcase, pushcase_range): Don't do it here.
+
+ * c-lex.c (yylex): Ensure TOTAL_PARTS is wide enough to store a
+ constant as wide as we can store in an INTEGER_CST.
+ (LONG_LONG_TYPE_SIZE): Deleted; no longer needed.
+
+Tue Jul 7 15:50:38 1992 Chip Salzenberg (chip@tct.com)
+
+ * x-i386sco (XCFLAGS): Omit flags specific to "rcc".
+ (CC, OLDCC): Put them here instead.
+
+Tue Jul 7 18:57:10 1992 Mike Stump (mrs@wombat.gnu.ai.mit.edu)
+
+ The below entries should make DWARF debugging a little bit easier.
+
+ * cp-decl.c (pushdecl): IDENTIFIER_GLOBAL_VALUE should not be _DECL
+ nodes but rather TYPE_DECLs.
+
+ * cp-decl.c (pushtag): Mark binding layer markers as internal.
+
+ * cp-class.c (finish_struct): Propagate internal mark on binding
+ layer markers.
+
+ * cp-decl2.c (finish_file): Don't name things that should not be
+ named.
+
+ * cp-method.c (decl_as_string): New back-end routine for
+ substitute_nice_name.
+
+ * cp-decl2.c (substitute_nice_name): New function used to create
+ reasonable DECL_NAMEs from cyrptic ones.
+
+ * cp-decl2.c (grokclassfn): Use substitute_nice_name.
+
+Tue Jul 7 14:04:01 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (emit_move_insn): Don't try subwords for a single word.
+
+ * gcc.c (find_a_file, putenv_from_prefix):
+ Handle value of 2 in require_machine_suffix.
+ (process_command): Supply 2 for standard_exec_prefix{,_1}.
+
+ * gstdarg.h: Undefine _BSD_VA_LIST if we define va_list.
+
+ * cccp.c (append_include_chain): Fix setting of first_bracket_include.
+
+ * loop.c (init_loop): Use word_mode, not SImode.
+
+ * x-dpx2: New file.
+ * x-dpx2200, x-dpx2300: Files deleted.
+ * configure (m68k-bull-sysv*): Fatal error unless --with-gas.
+ Always use x-dpx2.
+
+ * libgcc2.c (XFtype): Turn off definition; not used.
+ (TFtype): Define only if needed.
+
+Tue Jul 7 11:57:44 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * tahoe.md (call_value): Add `=' to output operand constraint.
+ * arm.md (call_value): Likewise.
+ * gmicro.md (negsf2, negdf2, abssf2, absdf2): Likewise.
+ (peephole for moving returned value to fp reg): Likewise.
+
+ * longlong.h (SI_TYPE_SIZE): Renamed from LONG_TYPE_SIZE.
+
+ * longlong.h (machine independent code): #define udiv_qrnnd to call
+ __udiv_using_sdiv if we have sdiv_qrnnd but not udiv_qrnnd.
+ * libgcc2.c (__udiv_using_sdiv): New function.
+ * Makefile.in (LIB2FUNCS): Add __udiv_using_sdiv.
+
+Mon Jul 6 23:28:29 1992 Mike Stump (mrs@wombat.gnu.ai.mit.edu)
+
+ * cp-dem.c, cp-lex.c, cp-method.c, cp-xref.c: Do not include
+ string.h or strings.h.
+
+Mon Jul 6 18:32:31 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (operand_subword): Avoid conditionals in macro arg.
+
+ * Changes to support execution on 64-bit machines.
+ * machmode.h (HOST_BITS_PER_WIDE_INT, HOST_WIDE_INT, HOST_PTR_PRINTF):
+ Provide default definitions.
+ (MAX_SHORT): New macro.
+ (GET_MODE_BITSIZE): Cast result and shift constant to HOST_WIDE_INT.
+ * rtl.h (union rtunion_def): Add field rtwint.
+ (XWINT): New accessor macro.
+ (INTVAL): Use XWINT, not XINT.
+ (exact_log2, floor_log2, plus_constant, plus_constant_for_output):
+ Now macros that cast arg to HOST_WIDE_INT.
+ (NULL, NULL_PTR): Provide default definitions.
+ (GEN_INT): New macro.
+ (get_integer_term): Now returns HOST_WIDE_INT.
+ * tree.h (NULL, NULL_PTR): Provide default definitions.
+ (INT_CST_LT, INT_CST_LT_UNSIGNED): Cast to HOST_WIDE_INT.
+ (struct tree_int_cst): Pieces of constant are HOST_WIDE_INT, not
+ long.
+ (exact_log2, floor_log2, build_int_2): Now macros, like rtl.h.
+ * real.h (REAL_VALUE_TYPE, union real_extract): Use HOST_WIDE_INT,
+ not long.
+ (CONST_DOUBLE_LOW, CONST_DOUBLE_HIGH): Use XWINT instead of XINT.
+ * rtl.def (CONST_INT): Operand type now "w".
+ (CONST_DOUBLE): Change operands from type "i" to "w".
+ * basic-block.h (REGSET_ELT_BITS): Always use HOST_BITS_PER_WIDE_INT.
+ (REGSET_ELT_TYPE): New macro; same as HOST_WIDE_INT.
+ * expr.h (ARGS_SIZE_RTX): Use NULL_RTX in expand_expr call.
+ (plus_constant): Remove duplicate declaration.
+ * hard-reg-set.h (HARD_REG_SET): Only scalar type we use
+ is HOST_WIDE_INT; array is array of HOST_WIDE_INT.
+ * loop.h (struct induction): Field CONST_ADJUST is now HOST_WIDE_INT.
+ (loop_n_iterations): Now unsigned HOST_WIDE_INT.
+ (loop_iterations): Returns HOST_WIDE_INT.
+ * c-parse.y, cexp.y, c-decl.c, c-lex.c, c-typeck.c, caller-save.c:
+ Change 0 or NULL when passed as a parameter that should be a pointer
+ to NULL_TREE, NULL_RTX, or NULL_PTR, as appropriate.
+ * calls.c, cccp.c, combine.c, cp-lex.c, cse.c, dbxout.c: Likewise.
+ * dwarfout.c, emit-rtl.c, explow.c, expmed.c, expr.c: Likewise.
+ * final.c, flow.c, fold-const.c, function.c, gcc.c: Likewise.
+ * genattrtab.c, genpeep.c, genrecog.c, global-alloc.c: Likewise.
+ * jump.c, local-alloc.c, optabs.c, recog.c, reg-stack.c: Likewise.
+ * regclass.c, reload.c, reload1.c, reorg.c, rtl.c: Likewise.
+ * rtlanal.c, sched.c, sdbout.c, stmt.c, stor-layout.c: Likewise.
+ * toplev.c, unroll.c, varasm.c, loop.c, xcoffout.c: Likewise.
+ * caller-save.c, combine.c, cp-class.c, cp-decl.c, cp-method.c:
+ Cast and declare objects used to refer to wide values as HOST_WIDE_INT.
+ Use HOST_BITS_PER_WIDE_INT instead of HOST_BITS_PER_INT.
+ * cp-pt.c, cp-type2.c, cp-typeck.c, cse.c, dbxout.c: Likewise.
+ * dwarfout.c, emit-rtl.c, explow.c, expmed.c, expr.c: Likewise.
+ * final.c, fold-const.c, genattrtab.c, recog.c, reg-stack.c: Likewise.
+ * regclass.c, reload.c, sched.c, stmt.c, stor-layout.c: Likewise.
+ * loop.c, toplev.c, unroll.c, varasm.c: Likewise.
+ * caller-save.c, combine.c, flow.c, global-alloc.c, reorg.c, sched.c:
+ When refering to regsets, use type REGSET_ELT_TYPE.
+ * calls.c, combine.c, emit-rtl.c, explow.c, expmed.c, expr.c, final.c:
+ Use GEN_INT macro when making CONST_INTs.
+ * function.c, jump.c, loop.c, optabs.c, recog.c, reload1.c: Likewise.
+ * unroll.c: Likewise.
+ * cp-decl.c, cp-ptree.c, print-tree.c: Use HOST_PTR_PRINTF when
+ printing pointer values.
+ * cccp.c, cexp.y, gcc.c (NULL, NULL_PTR): Provide default definition.
+ * c-common.c (NULL): Remove definition from here.
+ * c-decl.c (NULL): Likewise.
+ (finish_struct): Ensure high-order part of width is zero.
+ * cp-decl.c (finish_enum): Likewise.
+ * c-lex.c (yylex): Call build_int_2 in more portable way.
+ (yyprint): Print constant different ways, depending on host parameters.
+ * final.c (output_asm_insn, output_addr_cont): Likewise.
+ * genattrtab.c (write_test_expr): Likewise.
+ * print-tree.c (print_node_brief, print_node): Likewise.
+ * cp-decl.c (xref_tag): Remove explicit reference to modes.
+ * cp-method.c (build_overload_value): Likewise.
+ * cp-lex.c (real_yylex): Make accumulating bits for constant
+ more portable.
+ * cse.c (uid_cuid): Now pointer to int instead of to short.
+ (exp_equiv_p): Change ifs on GET_RTX_FORMAT to a switch.
+ Add format code of "w".
+ * emit-rtl.c (gen_rtx): Add format code of "w".
+ * jump.c (rtx_renumbered_equal_p, rtx_equal_for_thread_p): Likewise.
+ * loop.c (rtx_equal_for_loop_p): Likewise.
+ * reload.c (operands_match_p): Likewise.
+ * rtl.c (copy_rtx, copy_most_rtx): Likewise.
+ * rtlanal.c (rtx_equal_p): Likewise.
+ * sched.c (rtx_equal_for_memref_p): Likewise.
+ * explow.c (plus_constant_wide): Formerly plus_constant; argument
+ is HOST_WIDE_INT.
+ (plus_constant_for_output_wide): Similarly.
+ * fold-const.c: Use MAX_SHORTS for dimension of array of shorts.
+ * genattrtab.c (NULL_ATTR): New macro.
+ (attr_rtx): Use XWINT, not XINT, for CONST_INT.
+ Add case "w".
+ (check_attr_test, write_test_expr, main): Use XWINT, not XINT,
+ for CONST_INT.
+ * genemit.c (gen_exp): Use "NULL_RTX" instead of "0" when
+ emitting null.
+ Use GEN_INT and proper width when emitting a CONST_INT.
+ Abort if trying to write a CONST_DOUBLE.
+ * genrecog.c (struct decision): Add new fields TEST_ELT_ZERO_WIDE
+ and ELT_ZERO_WIDE.
+ (add_to_sequence, not_both_true, merge_trees, write_tree_1):
+ Use new fields.
+ * global-alloc.c (INT_BITS, INT_TYPE): Use HOST_WIDE_INT for type
+ of conflict matrix.
+ * loop. (loop_n_iterations): Now HOST_WIDE_INT.
+ * recog.c: Remove redundant declarations of plus_constant_for_output
+ and copy_rtx.
+ * rtl.c: Declare atol if needed.
+ (rtx_format): Add code for "w".
+ (read_rtx): Read code "w" field with atol if required.
+ (init_rtl): Fields of CONST_DOUBLE are now type "w".
+ * rtlanal.c (get_integer_term): Returns HOST_WIDE_INT.
+ * cccp.c, toplev.c: Error function args are HOST_WIDE_INT (kludge).
+ * toplev.c (exact_log2_wide): Renamed from exact_log2 and now has
+ arg of type HOST_WIDE_INT.
+ (floor_log2_wide): Similarly.
+ * tree.c (permalloc): Type of SIZE arg is int, not long.
+ (build_int_2_wide): Renamed from build_int_2 and has args of
+ type HOST_WIDE_INT.
+ * unroll.c (loop_iterations): Now returns HOST_WIDE_INT.
+ * varasm.c (immed_double_const): Arguments are now HOST_WIDE_INT.
+
+Mon Jul 6 14:56:26 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-common.c (decl_attributes): Don't set DECL_PACKED on VAR_DECL.
+
+ * Makefile.in (GCC_CFLAGS):
+ Use CROSS_GCC_CFLAGS instead of -B for tooldir.
+ * cross-make (CROSS_GCC_CFLAGS): Define as -B for tooldir.
+
+ * c-decl.c (finish_function): If return type of `main' is not `int',
+ warn instead of doing DEFAULT_MAIN_RETURN.
+
+ * collect2.c, dwarfout.c, halfpic.c: Don't incude string.h.
+
+ * c-decl.c (duplicate_decls): Let char *foo () match void *foo ()
+ only if one of them came from a system header file.
+
+ * stmt.c (pushcase): Fix typo.
+
+ * Makefile.in (ALLOCA_FINISH): Make default `true'.
+
+ * cccp.c (main): Clear first_bracket_include for -I-.
+ Set first_system_include for first system header directory.
+ (is_system_include): Start search at first_system_include.
+
+Mon Jul 6 12:58:27 1992 Chip Salzenberg (chip@tct.com)
+
+ * cccp.c (INCLUDE_LEN_FUDGE): Defined.
+ (append_include_chain): New function. Adds directory(ies)
+ to include chain and updates value of max_include_len.
+ (main, path_include): Use append_include_chain.
+ (do_include): Use INCLUDE_LEN_FUDGE.
+
+ * tree.h (DECL_IN_SYSTEM_HEADER): Defined.
+ (struct tree_decl): Add in_system_header_flag.
+ * c-common.c (declare_function_name): For __FUNCTION__
+ and __PRETTY_FUNCTION__, set DECL_IN_SYSTEM_HEADER instead
+ of TREE_USED to supress `unused' warnings.
+ * c-decl.c (duplicate_decls): Merge DECL_IN_SYSTEM_HEADER flag.
+ * print-tree.c (print_node): Display TREE_RAISES and
+ DECL_IN_SYSTEM_HEADER flags.
+ * toplev.c (compile_file): Do not warn if an unused DECL
+ has DECL_IN_SYSTEM_HEADER set.
+ (rest_of_compilation): Do not set TREE_USED on static
+ functions defined in system headers; this will be taken
+ care of with DECL_IN_SYSTEM_HEADER.
+ * tree.c (make_node): Set DECL_IN_SYSTEM_HEADER on permanent
+ decls defined in system headers.
+ * objc-actions.c (build_module_descriptor,add_objc_decls):
+ Set DECL_IN_SYSTEM_HEADER instead of TREE_USED on compiler-
+ created decls.
+
+Mon Jul 6 10:17:30 1992 Michael Collison (collison at osf.org)
+
+ * i386.h (SUBTARGET_SWITCHES):
+ Incoporate SUBTARGET_SWITCHES into TARGET_SWITCHES.
+ (HALF_PIC_P, HALF_PIC_NUMBER_PTRS, HALF_PIC_NUMBER_REFS,
+ HALF_PIC_ENCODE, HALF_PIC_DECLARE, HALF_PIC_INIT,
+ HALF_PIC_ADDRESS_P, HALF_PIC_PTR, HALF_PIC_FINISH):
+ Define these as stubs if not OSF/1 platform.
+ * i386.md (movsi): Recognize half-pic moves.
+
+Mon Jul 6 11:16:47 1992 Tim Moore (moore@defmacro.cs.utah.edu)
+
+ * pa.h (ASM_DECLARE_FUNCTION_NAME): Fix typo
+
+Mon Jul 6 08:48:51 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * m68k.md (swapsi): Add `+' operand constraints.
+ (insert to memory recognizer): Add `+'.
+ (peephole for moving returned value to fp reg): Add `='.
+
+Sun Jul 5 16:34:24 1992 John F Carr (jfc at Achates.mit.edu)
+
+ * vax.md (addsi3): Code generation improvements (whether to use movab).
+
+ * vax.md (andsi3, andhi3, andqi3): If one of the source operands
+ is a constant, complement that operand instead of a register or
+ memory operand.
+
+Sun Jul 5 13:16:15 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): When splitting using a DEFINE_SPLIT,
+ update the number of sets of the destination if it is being set
+ twice. Also update reg_significant.
+
+Sun Jul 5 13:14:50 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c++: Fix typo testing $quote for nullness.
+
+ * cse.c (simplify_binary_operation): Don't put sum of two symbolic
+ addresses into a CONST.
+
+ * m68kv4.h (ASM_OUTPUT_ALIGNED_COMMON): #undef this.
+ (ASM_OUTPUT_ALIGNED_LOCAL): #undef this.
+ (ASM_OUTPUT_ASCII): New overriding definition.
+ (ASM_OUTPUT_CASE_END): New overriding definition.
+
+ * c-typeck.c (convert_arguments): No -Wconversion warning
+ if the function wants an enumeral type.
+
+ * tek6000.h, tek6100.h, tek6200.h: New files.
+ * configure (ns32k-tek6100-bsd, ns32k-tek6200-bsd): New alternatives.
+ * config.sub: utek is synonym for bsd.
+
+ * Makefile.in (alloca.o): Add -c.
+
+ * Makefile.in (start.encap): Use LIBGCC1, not LIBGCC1_TARGET.
+ (GCC_CFLAGS): Find executables in $(tooldir)/bin, not $(tooldir).
+ (libgcc1.cross): New target.
+ (all.cross, cross-test): Depend on libgcc.a.
+ * cross-make (LIBGCC1): Use libgcc1.cross.
+
+ * Makefile.in (USER_H): va-hp800.h changed to va-pa.h.
+ (install-common): Fix typo.
+
+ * stmt.c (pushcase, pushcase_range): Use STRIP_NOPS on the values.
+
+ * x-amix, x-i860v4, x-ncr3000, x-sparcv4: Undo last change.
+ * x-i386v4, x-m68kv4: Files deleted.
+ * configure (i386-*-sysv4, i486-*-sysv4, m68k-*-sysv4):
+ Corresponding changes.
+
+ * c-decl.c (duplicate_decls): Don't warn about disagreement in `inline'
+ except when non-inline fn is made inline after a call or definition.
+
+Sun Jul 5 10:25:22 PDT 1992 Ron Guilmette (rfg at ncd.com)
+
+ * c-decl.c (grokdeclarator): Make `long long long' an error, not a
+ warning. Make duplicate qualifiers do pedwarn, not warning.
+
+ * c-decl.c (pushdecl): Always create a new (variant) ..._TYPE node
+ for each new TYPE_DECL node created.
+
+ * libgcc2.c (UQItype, SItype, USItype, DItype, UDItype, SFtype, DFtype,
+ XFtype, TFtype): Typedefs added.
+ (SI_TYPE_SIZE): Renamed globally from LONG_TYPE_SIZE.
+ Define names for ANSI C types to `bogus_type' over the range of lines
+ where we must always use the new mode-related types. Undef them again
+ at the end of that range (so we can used the ANSI types again), and
+ then define the mode-related type names to `bogus_type' to insure
+ those are not used from then on.
+
+ * libgcc2.c, longlong.h (DIstruct): Renamed globally from `longlong'.
+ (DIunion): Renamed globally from `long_long'.
+ Universally use the new mode-related type names for all functions
+ and macros which expect, yield, or otherwise rely on operands to be
+ of certain GCC-defined machine modes.
+
+Sun Jul 5 11:11:00 1992 Torbjorn Granlund (tege@wombat.gnu.ai.mit.edu)
+
+ * pa.h: (TARGET_VERSION): Print " (hppa)".
+ * pa.md (zdepi recognizer): Add attribute.
+ (recognizers for SImode load and store with fpregs): Add `=' to
+ operand 0.
+
+Sat Jul 4 15:02:19 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure (mips-*-sysv4): Don't set use_collect2.
+
+ * c-parse.y (primary): Wrap a NOP_EXPR around an enum value.
+
+ * libgcc2.c (__builtin_saveregs for i860): Test __svr4__, not SVR4.
+ * va-i860.h: Test __svr4__.
+
+ * c-decl.c (finish_function): Set BLOCK_SUPERCONTEXT of outer block.
+
+ * x-m88kv3: File deleted.
+
+ * x-sparcv4 (X_CFLAGS): Add -dn.
+
+ * reorg.c: Move the #ifdef DELAY_SLOTS after the #includes.
+
+Sat Jul 4 14:16:33 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (SUBST): Ensure we don't call something that can make
+ a new undo entry in the middle of our making one.
+
+Sat Jul 4 12:17:55 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (cp-parse.c): Append YYEMPTY to cp-parse.h, not ...y.
+
+ * cse.c (simplify_unary_operation): Add aborts in zero_extend
+ and sign_extend cases, explaining how they might need to be changed.
+
+ * i960.h (WORD_SWITCH_TAKES_ARG): Fix typo.
+
+ * x-amix, x-sparcv4, x-i860v4, x-i386v4, x-ncr3000:
+ Add -static to X_CFLAGS.
+ * x-m68kv4: New file.
+ * isc.h (HANDLE_SYSV_PRAGMA): Defined.
+
+Sat Jul 4 15:18:33 PDT 1992 Ron Guilmette (rfg at ncd.com)
+
+ * xm-spc-sol2.h: New file.
+
+ * tree.h (DECL_UID): Definition added.
+ (struct tree_decl): `uid' field added.
+ * tree.c (DECL_UID): Initialize this uniquely for each new ..._DECL.
+
+ * rtl.h (NOTE_INSN_DELETED_LABEL): Definition added.
+ * rtl.c (note_insn_name): Add entry for NOTE_INSN_DELETED_LABEL.
+ * final.c (final_scan_insn): Call `dwarfout_label' for each
+ `NOTE_INSN_DELETED_LABEL'.
+ * jump.c (delete_insn): Don't really delete CODE_LABELs corresponding
+ to user-declared lables... Turn them into NOTE_INSN_DELETED_LABELs
+ instead.
+
+ * dwarf.h (AT_abstract_origin): Renamed from AT_specification.
+ * dwarfout.c (dwarf_attr_name): Likewise.
+ (dwarf_tag_name, dwarf_attr_name, dwarf_stack_op_name,
+ dwarf_typemod_name, dwarf_fmt_byte_name): Use normal DWARF prefixes
+ for string names of unrecognized values.
+ (is_block_body): New function added.
+ (DECL_NAME_FMT): Definition added.
+ (equate_decl_number_to_die_number, abstract_origin_attribute,
+ pure_or_virtual_attribute): New functions added.
+ (src_coords_attribute): Only define this is DWARF_DECL_COORDINATES
+ is defined.
+
+ * populate: New file.
+
+ * function.c (instantiate_decls): Delete #if 1.
+
+ * flags.h, toplev.c, dbxout.c (use_gnu_debug_info_extensions):
+ Renamed from `use_gdb_dbx_extensions'.
+
+ * toplev.c (main): Added support for -gdwarf+ and for -gxcoff+.
+
+Sat Jul 4 08:39:47 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * m88k.c (m88k_end_prologue): Reset frame_laid_out here.
+ (m88k_expand_prologue): Not here.
+
+ * m88k.h (IDENT_ASM_OPT, ALIGN_ASM_OPT, ASM_OUTPUT_CASE_LABEL):
+ Override svr4.h.
+
+Fri Jul 3 12:40:27 1992 Paul Eggert (eggert@twinsun.com)
+
+ * fold-const.c (fold_convert): When converting a floating point
+ constant to integer, warn about out-of-range values after truncating
+ to integer, not before.
+
+Fri Jul 3 19:34:07 1992 Mike Stump (mrs@hal)
+
+ * Makefile.in ($(srcdir)/cp-parse.c): extract YYEMPTY out of the
+ parser generated .c file and put in the parser .h so that cp-lex.c
+ does not have to define it.
+
+ * cp-tree.c (__eprintf): Third argument line is now unsigned,
+ completes Ron's Jul 2 change.
+
+Fri Jul 3 15:03:30 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure: Set FIXINCLUDES in Makefile based on sysv4 or not.
+ * x-amix (ENQUIRE_CFLAGS, FIXINCLUDES): Deleted.
+
+ * config.sub: Recognize i486 like i386.
+
+ * defaults.h (ASM_FORMAT_PRIVATE_NAME, ASM_OUTPUT_ADDR_VEC_ELT):
+ (ASM_OUTPUT_ADDR_DIFF_ELT, ASM_STABD_OP): New default definitions.
+ * final.c: Include defaults.h.
+ (ASM_STABD_OP): Deleted.
+ * Makefile.in (final.o) Depend on defaults.h.
+
+ * Makefile.in (toplev.o): Use MAYBE_TARGET_DEFAULT.
+ * configure: Set MAYBE_TARGET_DEFAULT for some targets.
+ Use 3, if target is i486...
+ Recognize i486 as well as i386 for most targets.
+
+ * x-hp320g (LIBGCC1, AR, RANLIB, RANLIB_TEST, LIBCONVERT): Deleted.
+ * t-hp320g (LIBGCC1, AR, RANLIB, RANLIB_TEST, LIBCONVERT): Defined.
+ * t-svr4 (FIXINCLUDES): Deleted.
+
+ * Makefile.in (ENQUIRE_CFLAGS): Add -DNO_LONG_DOUBLE_IO.
+
+ * fold-const.c (BRANCH_COST): Add default definition.
+
+ * cp-tree.h: Declare intQI_type_node, etc.
+ * cp-decl.c: Declare intQI_type_node, etc.
+ (init_decl_processing): Initialize those nodes.
+
+Thu Jul 2 15:18:33 PDT 1992 Ron Guilmette (rfg at ncd.com)
+
+ * amix.h (ASM_OUTPUT_CASE_END, ASM_OUTPUT_ALIGNED_LOCAL): Output
+ tabs before SET_ASM_OP.
+
+ * Makefile.in (dwarfout.o): Dependency on defaults.h added.
+
+ * sparcv4.h: Include real.h.
+ (SET_ASM_OP): Undef it.
+
+ * svr4.h (IDENT_ASM_OP): Added generic svr4 definition.
+ (ASM_FILE_END, ASM_OUTPUT_IDENT): Use IDENT_ASM_OP.
+ (ALIGN_ASM_OP): Added generic svr4 definition.
+ (ASM_OUTPUT_CASE_LABEL): Added generic svr4 definition.
+
+ * i860.c (strict_single_insn_op_p, relop): Deleted.
+ * i860.h (ASM_OUTPUT_CASE_LABEL): Fixed definition to use
+ ASM_OUTPUT_ALIGN and ASM_OUTPUT_INTERNAL_LABEL.
+ * i860b.h, i860v3.h (TARGET_VERSION): Definitions added.
+ * i860v3.h (CPP_PREDEFINES): Predefine __svr3__ rather than SVR3.
+
+ * c-decl.c (named_labels): Change linkage to static.
+
+ * assert.h (__eprintf): Declare 3rd arg as unsigned.
+
+ * cccp.c (do_include): Don't do fprintf's if inhibit_warnings.
+ Renamed system_header_p to angle_brackets. Use is_system_include.
+ (is_system_include): New function.
+ (redundant_include_p) : Renamed from lookup_include.
+
+ * c-common.c (type_for_size): If no ANSI type matches, check for
+ matches with built-in mode-releated types.
+ (type_for_mode): Likewise.
+ * c-decl.c: Added declarations for mode-related internal type nodes.
+ (init_decl_processing): Initialize the new type nodes.
+ * c-tree.h: Added declarations for mode-related internal type nodes.
+ intQI_type_node, etc.
+
+ * c-lex.c (yylex): For integers, rename shorts to parts.
+ Let the number of them be variable. Simplify overflow testing.
+ Don't use long long types unless ll was specified.
+ Don't warn twice.
+
+Thu Jul 2 20:30:20 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * gstdarg.h: #ifdef _STDARG_H, not __STDARG_H.
+
+Thu Jul 2 18:18:07 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * global.c: Renamed from global-alloc.c.
+
+Thu Jul 2 15:36:25 1992 Torbjorn Granlund (tege@wombat.gnu.ai.mit.edu)
+
+ * pa.c (zdepi_operand): New function.
+ (emit_move_sequence): Use it.
+ * pa.md: New pattern to recognize cases where zdepi can be used to
+ load immediate constant.
+ (insv): Allow obvious immediate values.
+ (insv + 1): New recognizer for non-obvious immediate values.
+
+Thu Jul 2 15:13:15 1992 Michael Meissner (meissner@osf.org)
+
+ * halfpic.c (half_pic_encode): Consider variables which are 'common'
+ variables to need pic fixup. Move the debug code, so that it prints
+ for all calls, and calls debug_tree also.
+ (half_pic_address): When doing eliminate_constant_term on a CONST,
+ do a XEXP (addr, 0) to get to the real address.
+
+ * decrose.h (CPP_SPEC, CC1_SPEC): If neither -fbuiltin nor
+ -fno-builtin are passed, pass -fno-builtin, and renable the string
+ and memory builtins via macros. This is to support compiling the
+ OSF/1 kernel which has a prototyped exit function which takes three
+ arguments. With no -pic switches, default to using shared libs.
+
+ * i386rose.h (CPP_SPEC, CC1_SPEC): If neither -fbuiltin nor
+ -fno-builtin are passed, pass -fno-builtin, and renable the string
+ and memory builtins via macros. This is to support compiling the
+ OSF/1 kernel which has a prototyped exit function which takes three
+ arguments. Turn off pic support until the 386 backend supports it.
+
+ * x-i386rose (SHLIB): Use -pic-none instead of -L${BUILD}/usr/ccs/lib.
+
+ * x-decrose (SHLIB): Use -pic-none instead of -L${BUILD}/usr/ccs/lib.
+
+ * mips.md (movsi): Rewrite handling of half-pic code so that load
+ address of symbol + value is handled.
+ (branch_zero): Don't allow branch comparing constant to 0.
+
+Thu Jul 2 06:26:38 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * m88k.md (blockage insn): Renamed from profiler.
+ (epilogue insn): Don't provide this if a return insn will suffice.
+ (m88k_end_epilogue): If the last insn isn't a barrier, print a return.
+ * m88k.c (null_prologue): Renamed from null_epilogue.
+
+ * m88k.c (condition_value): New function.
+ * m88k.md (compare word insns): New insns and define_split
+ patterns to take advantage of recent fold_truthop change.
+
+ * m88k.h (ADDITIONAL_REGISTER_NAMES): Represent the condition code
+ register as (reg:CC 0). Give it the names "cc" and "psr".
+ * m88k.md (superoptimizer sequences): New define_split patterns.
+ (add/sub with carry): New insns.
+ (add/sub DImode, ffssi2): Clobber the condition code register.
+
+Wed Jul 1 13:37:37 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gstddef.h Don't define macros associated with size_t unless we
+ actually want to declare size_t. Likewise for ptrdiff_t and wchar_t.
+
+ * Makefile.in (install-common): Depend on xgcc, g++, c++, EXTRA_PARTS.
+ Don't delete specs from libsubdir unless it exists in build dir.
+
+ * va-pa.h: Renamed from va-hp800.h.
+ * gstdarg.h, gvarargs.h: Use new name.
+
+ * news3.h, news3gas.h: New files.
+ * configure (m68k-sony-newsos3*): New alternative.
+
+ * romp.h (SIZE_TYPE): Defined.
+
+ * configure: Support --exec-prefix. Simplify handling
+ detached arguments of options.
+
+ * isc.h, and other related files:
+ waiting for entries from karl@cs.umb.edu.
+
+Wed Jul 1 12:04:53 1992 Ron Guilmette (rfg at ncd.com)
+
+ * c-decl.c (grokdeclarator): Don't mark file-scope register variables
+ as TREE_PUBLIC.
+
+Wed Jul 1 12:04:53 1992 Karl Berry (karl@cs.umb.edu)
+
+ * i386iscgas.h (SIZE_TYPE, PTRDIFF_TYPE): Define these, since we
+ need to override GCC's defaults.
+
+ * configure (i386-*-isc): Use different files if we have gas.
+ * t-i386iscgas, i386iscgas.h, isc.h: New files
+ * i386isc.h: Include isc.h. Most of contents moved to isc.h.
+ * bsd386.h (ASM_OUTPUT_LABELREF) [NO_UNDERSCORES]: do not prepend an
+ underscore in this case.
+ * i386gas.h (CPP_SPEC): if -posix, do -D_POSIX_SOURCE.
+
+Wed Jul 1 09:13:44 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * fold-const.c (fold_truthop): Renamed from merge_component_references.
+ (simple_operand_p): New function.
+ (range_test): Change JCODE parameter to the unconditional operation.
+ (fold_truthop): When branches are expensive, try to evaluate the
+ RHS unconditionally. Compute local variables as late as possible.
+
+ * m88k.h (HANDLE_SYSV_PRAGMA): Replaces HANDLE_PRAGMA.
+ * m88k.c (m88k_handle_pragma_token): Deleted.
+
+Tue Jun 30 15:32:51 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (duplicate_decls): If newdecl for builtin function
+ has same return mode as the builtin, keep the builtin
+ but use newdecl's return type.
+
+ * i386.md (lshrdi3_const_int): Fix typo in shr insn.
+
+ * Makefile.in (GCC_CFLAGS): Add `-B$(tooldir)/'.
+
+ * i386sun.h, rs6000-mach.h, sparc.h, sun2o4.h, sun3.h (LINK_SPEC):
+ Inhibit the default -e if -r or -nostdlib.
+
+ * c-decl.c (lookup_label): Call label_rtx.
+
+ * c-parse.y (primary): Rearrange and clean up. In C_DECL_ANTICIPATED
+ case, always call assemble_external and set TREE_USED.
+
+Mon Jun 29 22:27:49 1992 Mike Stump (mrs@wombat.gnu.ai.mit.edu)
+
+ * cccp.c, cp-dem.c, dbxout.c, cp-lex.c, cp-xref.c, cp-method.c,
+ dwarfout.c, c-typeck.c, mips-tfile.c, protoize.c, collect2.c: Make
+ the compiler more consistent by using index and rindex everywhere
+ instead of sometimes using strchr and strrchr.
+
+Mon Jun 29 22:20:13 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * regclass.c (regclass): Restore some accidentally-deleted code.
+
+Mon Jun 29 12:48:05 1992 Nobuyuki Hikichi (hikichi@sra.co.jp)
+
+ * collect2.c (MY_ISCOFF): New macro.
+ (scan_prog_file): Use that instead of ISCOFF.
+
+ * mips.c (override_options) [MIPS_NEWS]: Call setlinebuf.
+
+Mon Jun 29 12:48:05 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (do_spec_1): For %I, pass -iprefix, not -imacros.
+
+ * c-common.c (decl_attributes): For `packed' on VAR_DECL,
+ set DECL_PACKED and DECL_ALIGN.
+
+ * configure: Update usage message.
+ (m68k-sony-newsos*, mips-sony-newsos*): New synonyms.
+
+ * fold-const.c (merge_component_references):
+ Make sure the four fields correspond in the proper order.
+
+ * c-lex.c (check_newline): Support HANDLE_SYSV_PRAGMA.
+ (handle_sysv_pragma): New function.
+ * c-pragma.c: New file.
+ * stor-layout.c (maximum_field_alignment): New variable.
+ (layout_decl): Use it.
+ * Makefile.in (C_OBJS, OBJC_OBJS): Add c-pragma.o
+ (c-pragma.o): New rule.
+
+ * i386.c (handle_pragma_token): Function deleted.
+ * i386v4.h (HANDLE_PRAGMA): Deleted.
+
+ * g++: Reestablish symlink to c++.
+ Delete the testing of $TRACE--this could confuse people.
+ Delete spurious assignment of $version.
+
+ * tree.h (DECL_PACKED): Store this in regdecl_flag.
+
+ * Makefile.in (LIB2FUNCS): Change _builtin_New to _caps_New.
+ * libgcc2.c: Change L_builtin_New to L_caps_New.
+
+ * dbxout.c (dbxout_symbol): Pass 3 args to eliminate_regs.
+ Call alter_subreg for subregs. Delete subreg case later on.
+ Don't bother with reg_renumber--any pseudo reg is clearly
+ a variable that was not allocated.
+ * sdbout.c (sdbout_symbol): Call alter_subreg for subregs.
+ Don't bother with reg_renumber--any pseudo reg is clearly
+ a variable that was not allocated.
+
+ * sequent.h (SIZE_TYPE): Defined.
+ (LINK_LIBGCC_SPECIAL): Fix typo.
+
+Mon Jun 29 12:04:57 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * toplev.c (rest_of_compilation): Thread the prologue and epilogue
+ code immediately after reloading is done.
+ * sched.c (schedule_insns): Reposition the prologue and epilogue
+ notes as needed.
+ * reorg.c (dbr_schedule): Ditto.
+ * rtl.h (NOTE_INSN_PROLOGUE_END, NOTE_INSN_EPILOGE_BEGIN): New notes.
+ * rtl.c (note_insn_name): Record them.
+ * function.c (record_insns, contains, thead_prologue_and_epilogue_insns,
+ reposition_prologue_and_epilogue_notes): New functions.
+ * final.c: Include insn-flags.h.
+ (profile_after_prologue): New function.
+ (final_start_function): Use profile_after_prologue here when we
+ don't HAVE_prologue.
+ (final_scan_insn): Use profile_after_prologue when we scan
+ NOTE_INSN_PROLOGUE_END. (This happens when we do HAVE_prologue.)
+ Perform machine specific actions when the prologue-end and
+ epilogue-begin notes are scanned.
+ (final_scan_insn, BARRIER): Align only when something follows.
+ * Makefile.in (final.o): Depends on insn-flags.h.
+
+ * m88k.h (FUNCTION_END_PROLOGUE, FUNCTION_BEGIN_EPILOGUE): Define.
+ (DELAY_SLOTS_FOR_EPILOGUE, ELIGIBLE_FOR_EPILOGUE_DELAY): Delete.
+ * m88k.md (prologue, epilogue, profiler, locate1, locate2): New
+ patterns for representing prologues and epilogues.
+ * m88k.c (delay_slots_for_epilogue, eligible_for_epilogue_delay,
+ ok_for_epilogue_p): Delete epilogue delay slot functions.
+ (m88k_begin_prologue m88k_end_prologue m88k_expand_prologue): New
+ functions replacing m88k_output_prologue.
+ (m88k_begin_epilogue m88k_end_epilogue m88k_expand_epilogue): Ditto.
+ (preserve_registers): Delete epilogue delay slot mechanism and
+ change to output insns.
+ (emit_add, emit_ldst): New functions.
+
+Sun Jun 28 23:06:04 1992 Brendan Kehoe (brendan@cs.widener.edu)
+
+ * Makefile.in (bootstrap, bootstrap2, bootstrap3): In each
+ passage of CC, use xgcc, not gcc.
+ * dostage2, dostage3: Likewise.
+
+Sun Jun 28 09:48:18 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (duplicate_decls): If have char *foo () and
+ void *foo (...), make just a pedwarn. Add locals oldtype, newtype.
+ * c-typeck.c (self_promoting_args_p): No longer static.
+
+ * flow.c (regno_uninitialized): Return 0 for global reg var.
+
+ * c-typeck.c (initializer_constant_valid_p):
+ Allow CONVERT_EXPR if its operand is allowable.
+ (build_c_cast): For cast to union, make a CONSTRUCTOR.
+
+ * sparc.c (SPARC_STACK_ALIGN): Add default definition.
+
+ * c++: Use `set "$@"' to modify arguments.
+ Use a case to decide how to set $gcc.
+ $quote is now empty for false and the option name for true.
+ Error at end if $quote is nonempty.
+ $speclang is now the -x option itself.
+ Move the -v case above the -* case.
+
+ * limitx.h: Add #ifndef.
+ * limity.h: New file.
+ * Makefile.in (install-limits-h): Append limity.h to the end.
+
+ * c-typeck.c (digest_init): Don't push spellings here (for union case).
+ (process_init_constructor): Fix errors for field not found.
+ (build_c_cast): Fold casts to union type.
+
+ * xm-vms.h (XREF_FILE_NAME): Fix typo.
+
+ * i386sun.h (SIZE_TYPE): Defined.
+
+ * Makefile.in (alloca.o): Delete the rm command.
+ Use -Demacs explicitly in compilation command.
+ (ALLOCA_FLAGS, ALLOCA_FINISH): Empty by default.
+ * x-pa-hpux, x-rs6000, x-rs6k-mach, x-dpx2200, x-dpx2300:
+ (ALLOCA_FLAGS, ALLOCA_FINISH): Deleted.
+ * x-dpx2200, x-dpx2300 (AS): Deleted.
+
+ * configure: Set broken_install for V.4.
+ (i386-*-aix, ns32k-*-genix, i386-*-isc, i386-*-sco):
+ (i386-*-sco3.2v4, m88k-dg-dgux): Set broken_install.
+ (m88k-*-sysv): Don't use x-m88kv3.
+ * x-m88kv3: File deleted.
+ * x-aix386, x-dpx2200, x-dpx2300, x-genix, x-i386isc, x-i386sco:
+ * x-i386v, x-i386v4, x-i860v3, x-i860v4, x-m88kdgux, x-m88kdolph:
+ * x-m88kv4, x-ncr3000, x-sparcv4, x-xenix (INSTALL): Deleted.
+
+Sun Jun 28 08:44:32 1992 Michael Meissner (meissner@osf.org)
+
+ * regclass.c (record_address_regs): Make the function static to
+ agree with the forward declaration.
+
+ * mips.h (LINK_LIBGCC_SPECIAL): Define.
+
+Sun Jun 28 06:14:56 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (direct_load, direct_store): New variables.
+ (init_expr_once): New function.
+ (convert_move, convert_to_mode): Don't let gen_lowpart make a MEM in
+ a mode that can't be directly copied to or from memory.
+ (store_field): Don't directly store into memory in a mode that
+ can't be used in a single insn.
+ (expand_expr, case COMPONENT_REF): Likewise, for load.
+ * toplev.c (compile_file): Call init_expr_once.
+
+ * cse.c (fold_rtx, case SUBREG): If we can find nested SUBREGs
+ with an inner register in the mode we want, get rid of all the
+ SUBREGs provided they are all within a word.
+
+ * cp-call.c, cp-class.c, cp-decl.c, cp-edsel.c, cp-lex.c: Don't
+ declare xmalloc and free here.
+ * cp-methods.c, cp-pt.c, cp-search.c, flow.c, integrate.c: Likewise.
+ * loop.c, opjc-actions.c, reload1.c, reorg.c, rtl.c: Likewise.
+ * stmt.c, tree.c, varasm.c: Likewise.
+ * toplev.c (xmalloc, xrealloc): Declare return types correctly.
+ * rtl.h, tree.h: Declare xmalloc and free here.
+
+ * expmed.c (emit_store_flag): Keep the last target around if we
+ should preserve subexpressions.
+
+Sat Jun 27 07:11:28 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_insn): See if we have a CONST_INT that is already in
+ a register in a wider mode.
+
+ * regclass.c: Major rework of regclass pass to do a better job of
+ setting up register preferences and replace the "preferred or
+ nothing" method with a class that should be used if the preferred
+ class cannot be allocated.
+ (MEMORY_MOVE_COST): Default value is 4, not 2.
+ (move_cost, may_move_cost): New arrays.
+ (init_reg_sets): Initialize them.
+ (struct costs): Replaces struct savings.
+ (costs): Replaces savings.
+ (op_costs): New array.
+ (altclass): Replaces preferred_or_nothing.
+ (reg_alternate_class): New function; replaced reg_preferred_or_nothing.
+ (regclass): Major rework. Use new recording methods; make two
+ passes if -fexpensive-optimizations; and refine REGNO_POINTER_FLAG
+ and loop_depth setting.
+ (record_reg_class): New function; replaces reg_class_record.
+ (copy_cost): New function.
+ (record_address_regs): Major changes. New parameters and simplified
+ and more efficient algorithm for chosing base vs. index regs.
+ * rtl.h (reg_alternate_class): Declare it.
+ * Makefile.in (regclass.o): Now includes reload.h and real.h.
+ * flow.c (dump_flow_info): Call reg_alternate_class instead of
+ reg_preferred_or_nothing.
+ * reload.c (find_reloads): Likewise.
+ (n_occurrences): No longer static.
+ * local-alloc.c: Use register alternate class instead of
+ preferred_or_nothing uniformly; change qty_preferred_or_nothing
+ to qty_alternate_class.
+ * global-alloc.c (global_alloc, retry_global_alloc): Call
+ reg_alternate_class instead of reg_preferred_or_nothing.
+ (find_reg): Change ALL_REGS_P argument to ALT_REGS_P.
+ Use alternate register class instead of ALL_REGS if can't allocate
+ in preferred class.
+
+ * cccp.c (install): Accept separate arguments for integer and
+ pointer hash values; don't assume the sizes are the same.
+ All callers changed.
+
+ * rtl.c (copy_rtx, copy_most_rtx): Add new case for 'u'.
+
+ * tree.c (make_node): Clear all of common area, in particular, flags.
+
+ * c-tree.h, cp-tree.h: Add declaration of truthvalue_conversion.
+
+Sat Jun 27 06:21:18 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * m88k.md (type attributes): Delete unused mbit and mfp types.
+ (ffsi2 insn): Define.
+ (negdf2 and absdf2 insns): Improve.
+
+ * fold-const.c (range_test): Fix the misordered test. Fail if VAR
+ isn't an integer.
+
+Sat Jun 27 00:54:44 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (link_command_spec): No %D if LINK_LIBGCC_SPECIAL.
+ * sequent.h (LINK_LIBGCC_SPECIAL): Defined.
+
+ * vax.h (PRINT_OPERAND): For SFmode, use 0f, not 0d or 0g.
+
+ * ns32k.h (NS32K_DISPLACEMENT_P): Correct the range limits.
+ * ns32k.c (print_operand_address): REG_OK_FOR_INDEX_P wants an rtx.
+
+Fri Jun 26 08:55:03 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * fold-const.c (range_test): New function.
+ (merge_component_references): Look for range tests as well.
+
+ * va-m88k.h: Same changes as other va-*.h files below. Make this
+ work when <stdio.h> and others are included on DG/UX.
+
+Fri Jun 26 08:17:33 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (safe_from_p): Handle 0 in TREE_VALUE of a TREE_LIST.
+ (store_constructor: Ignore empty links in element chain.
+
+Fri Jun 26 07:06:19 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-convert.c (convert_to_integer): Don't add a NOP_EXPR in cases
+ where we can simply change the type of the entire tree.
+
+ * cse.c (find_best_addr): Look for equivalents of a REG that is
+ the first operand of an address that is a binary operator whose
+ second operand is a CONST_INT.
+
+ * stmt.c (expand_end_bindings): Don't save argument pointer if it
+ will be eliminated in favor of the frame pointer.
+
+ * combine.c (try_combine): When using define_split to split an
+ insn, first try to put the pseudo-register into the mode of
+ the destination since it is the most likely to be the correct mode.
+
+ * combine.c (make_compound_operation): Treat PLUS and MINUS
+ the same when passing down the code to the next level; for
+ consistency, an ASHIFT inside either gets turned into a MULT.
+
+ * fold-const.c (optimize_bit_field_compare): Delete dead
+ assignment which can sometimes reference an undefined variable.
+
+ * genoutput.c (gen_split): Initialize n_alternatives.
+
+ * romp.md (movdf): Fix typo in operand_subword call in define_split.
+
+Fri Jun 26 04:38:37 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Make stdarg mechanism work with libc.
+ * va-hp800.h, va-i860.h, va-i960.h, va-mips.h, va-pyr.h, va-sparc.h):
+ Don't define or declare va_list; declare __gnuc_va_list.
+ But only declare it once.
+ Define other things only if _STDARG_H or _VARARGS_H.
+ Declare va_end as well as defining it.
+ * gstdarg.h: Likewise.
+ If __need___va_list was defined, then undef it
+ and don't define _STDARG_H.
+ For all machines, declare va_list from __gnuc_va_list
+ but only if _STDARG_H is defined.
+
+ * gvarargs.h: Test _ANSI_H_, not _ANSI_H.
+
+Thu Jun 25 23:24:02 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * ns32k.c (print_operand):
+ Change NO_IMMEDIATE_PREFIX_IF_SYMBOLIC conditional to #ifdef.
+
+ * genoutput.c (gen_split): Set d->n_alternatives.
+
+ * Makefile.in (test-protoize-simple): Expect just 400 lines.
+ (install-common-headers): When comparing srcdir with ., use pwd.
+
+Tue Jun 16 22:11:12 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * Makefile.in (enquire.o): Don't delete/copy enquire.c, just use
+ the copy in the source directory.
+
+Tue Jun 25 23:52:27 1992 Howard Chu (hyc@hanauma.jpl.nasa.gov)
+
+ * libgcc2.c (__builtin_saveregs): Use SVR4 code on Alliant FX2800,
+ but with BSD function-naming convention.
+
+ * va-i860.h: Use SVR4 definitions of __va_saved_regs and va_list
+ on Alliant FX2800.
+
+ * fx2800.h (I860_REG_PREFIX, ASM_COMMENT_START): Deleted.
+ (DBX_NO_EXTRA_TAGS, BSS_ASM_OP): Deleted.
+ (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): Deleted.
+ (ASM_FILE_START): Just call output_file_directive.
+
+Thu Jun 25 06:49:15 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (process_init_constructor): Strip NON_LVALUE_EXPR
+ from specified array index.
+
+ * configure (i386-*-bsd*, i386-*-mach*): Don't set tmake_file.
+ They used to use t-libc-ok.
+
+ * input.h (struct file_stack): Revert prev. change.
+
+Thu Jun 25 06:33:52 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * stmt.c (expand_end_case): Add CASE_VALUES_THRESHOLD.
+ * m88k.h (CASE_VALUES_THRESHOLD): Define.
+
+Thu Jun 25 06:13:39 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * explow.c (plus_constant, case PLUS): Remove obsolete code;
+ use recursive call in case remaining operand is one we handle.
+
+Wed Jun 24 19:15:14 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (subst, case PLUS): If adding two things with no bits
+ in common, convert to IOR.
+
+ * expr.c (do_jump, case BIT_AND_EXPR, COMPONENT_REF): Don't narrow
+ comparison unless byte accesses are not slow and we have a
+ comparison in the new mode.
+
+Wed Jun 24 14:29:09 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-parse.y (primary): If built-in decl has not had
+ an official declaration, print warning.
+ * c-decl.c (builtin_function): Set C_DECL_ANTICIPATED for
+ user-visible names.
+ * c-tree.h (C_DECL_ANTICIPATED): New macro.
+
+ * fixincludes: Make some symlinks in the `multimedia' subdir.
+
+ * i386.c: Change #error to just error.
+
+ * protoize.c: Normalize error message syntax.
+ (process_aux_info_file): Don't delete .X file if it existed before.
+ (explicity compare modtime with .c file.
+
+Wed Jun 24 14:10:35 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.c (sparc_frw_compute_frame_size): New function, for flat
+ register window model support.
+ (sparc_frw_save_restore): Likewise.
+ (sparc_frw_output_function_prologue): Likewise.
+ (sparc_frw_output_function_epilogue): Likewise.
+ (sparc_frw_epilogue_delay_slots): Likewise.
+ (sparc_frw_eligible_for_epilogue_delay): Likewise.
+
+Tue Jun 23 22:36:12 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (rescan): Recognize # only when reading directly from a file.
+
+ * input.h (struct file_stack): Add member `fd'.
+
+ * regclass.c (regno_first_uid, regno_last_uid): Make elements ints.
+ (reg_scan): Allocate and clear them as ints.
+ * regs.h: Fix the declarations.
+
+ * Create driver executable with name xgcc; rename to gcc in installing.
+ (xgcc): Target renamed.
+ (GCC_FOR_TARGET, GCC_PASSES, start.encap, specs, gcc-cross):
+ (install-common, install-collect2): Rename in deps, commands or value.
+ (install-collect2): Always get driver from xgcc whether cross or not.
+
+Tue Jun 23 00:00:35 1992 Brendan Kehoe (brendan@cs.widener.edu)
+
+ * toplev.c (strip_off_ending): Also strip off .C and .cxx.
+
+Tue Jun 23 18:58:43 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * genrecog.c (add_to_sequence): Don't ignore mode of first operand
+ of a MATCH_OPERAND or MATCH_DUP_OP rtl.
+ * sparc.md (scc): Use noov_compare_op instead of normal_compare_op.
+
+ * function.c (expand_function_start): When not optimizing, don't
+ put static chain pointer in a pseudo register.
+
+ * sparc.c (print_operand): For '*', only annul branch if
+ optimizing, to avoid dbx bug. Add '(' to handle unoptimized case.
+ * sparc.h (PRINT_OPERAND_PUNCT_VALID_P): Add '('.
+ * sparc.md (jump): Add '%(' to pattern.
+
+ * c-decl.c (store_parm_decls): Change type of void parameter to
+ error_mark_node.
+
+ * configure (m68k-*-sysv4*): Use xm-m68kv.h not xm-m68kv4.h.
+
+ * configure: Add -prefix option.
+
+ * vax.c (split_quadword_operands): Declare paramater n.
+
+ * i960.h (WORD_SWITCH_TAKES_ARG): Add -aux-info.
+
+ * xcoffout.c (xcoffout_declare_function): Cast alloca result to char *.
+
+ * c-convert.c (convert_to_integer): Don't pass truncation past
+ shift that is larger than the size being truncated to.
+
+Tue Jun 23 06:15:47 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * optabs.c (expand_binop, expand_unop): Try widening before trying
+ to make a library call.
+
+ * stmt.c (expand_return): Add missing emit_queue call in tail
+ recursion case.
+
+ * cse.c (simplify_unary_operation): Add SIGN_EXTEND and
+ ZERO_EXTEND to the operations we handle for wide results.
+
+ * expr.c (emit_block_move): Convert size operand to mode that will
+ be passed to emit_library_call.
+
+Tue Jun 23 00:41:03 1992 Paul Eggert (eggert@shadow)
+
+ * objc-parse.y (stmt): Fix mispelling for "label" in message.
+
+ * cccp.c: (deps_file, pipe_closed): Deleted.
+ (main): Do not open deps_file until needed.
+ Check error status of dep_stream and stdout more carefully.
+
+Tue Jun 23 00:21:05 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (protoize.1, unprotoize.1): Rules deleted.
+ (install-man, proto, realclean): Don't operate on them.
+ * proto-man: File deleted.
+
+ * protoize.c (main): Support -v as alias for -V.
+
+Mon Jun 22 21:50:01 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (compare, compare3): Discard error output from second
+ tail. If it fails, don't compare that file.
+
+ * Makefile.in (stamp-proto): Move the touch command last.
+
+ * cccp.c (finclude): Use xmalloc, not alloca, for file contents.
+
+ * stmt.c (check_for_full_enumeration_handling): For a case range,
+ consider all values in the range as handled. Also, check both ends
+ for being in the enumeration.
+
+ * ns32k.h (NS32K_DISPLACEMENT_P): Wide displacement range applies to
+ all models.
+
+Mon Jun 22 20:29:47 1992 Ron Guilmette (rfg at ncd.com)
+
+ * expr.h (*_libfunc): Added missing extern declarations of libfuncs
+ to handle operations on/for TFmode and XFmode operands.
+ * expr.c (convert_move): Added missing code to handle moves (with
+ conversion) from/to TFmode and XFmode operands.
+ * optabs.c (*_libfuncs): Added missing definitions of libfuncs
+ to handle operations on/for TFmode and XFmode operands.
+ (emit_float_lib_cmp): Added missing code to handle XFmode and TFmode
+ comparisons.
+ (init_fixtab): Added missing code to handle fixing (and trunc'ing)
+ of XFmode and TFmode operands to various sizes of ints.
+ (init_floattab): Likewise, but for "float" operations from ints to
+ either XFmode or TFmode.
+ (expand_float): Likewise.
+ (expand_fix): Likewise.
+ (init_libfuncs, init_integral_libfuncs, init_floating_libfuncs): New
+ functions added to initialize whole hunks of various optabs with
+ appropriate `libfunc' field values.
+ (init_optabs): Use `init_integral_libfuncs' or `init_floating_libfuncs'
+ wherever a group of consecutive optab entries need to all have their
+ `libfunc' fields initialized.
+ (init_optabs): added missing code to handle all operations on/of
+ XFmode and TFmode operands.
+
+Mon Jun 22 06:40:32 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * rs6000.h (MEMORY_MOVE_COST): Increase to 6, from 4.
+ (enum reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS): Add new reg
+ classes SPEC_OR_GEN_REGS and NON_FLOAT_REGS.
+
+ * rs6000.h (EXTRA_CONSTRAINT): Don't use indirect_operand; instead
+ check explicitly.
+
+ * rs6000.md (divmod): Use "2" constraint instead of using "q"
+ twice.
+ (tablejump): Constraint of "r" should be "l".
+
+ * emit-rtl.c (init_emit): Show that all pointers into the frame are
+ pointer registers.
+
+Mon Jun 22 04:20:26 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * va-sparc.h (va_arg): Rename local identifiers to start with __.
+
+Sun Jun 21 14:51:42 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fold-const.c (real_value_truncate): New function.
+ All calls to REAL_VALUE_TRUNCATE changed to use this function.
+
+ * reload1.c (reload): Record which insn attains each maximum need.
+ If can't find a spill, call spill_failure and return 1.
+ (spill_failure): New subroutine.
+ * global-alloc.c (global_alloc): Return 1 if reload returned 1.
+ * toplev.c (rest_of_compilation): If they return nonzero, give up
+ compiling this function.
+
+ * c-decl.c (duplicate_decls): Never warn if redeclaring
+ a predeclared function. Use the new declaration's types
+ but keep any predeclared volatile flag.
+ If redeclaring builtin function, use new declaration's type.
+ If an old decl becomes volatile, fix the DECL_RTL.
+ * varasm.c (make_var_volatile): New function.
+
+ * configure (mips-sony-bsd): Use xm-mips.h.
+ * xm-mipsbsdn.h: File deleted.
+
+ * protoize.c (process_aux_info_file): Simplify logic for calling
+ gen_aux_info_file. Get rid of the label `retry'.
+
+ * m68ksgs.h (ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP):
+ Override for sgs syntax.
+
+Sun Jun 21 14:06:41 1992 Brendan Kehoe (brendan@cs.widener.edu)
+
+ * va-sparc.h (va_arg): Use a character array of size TYPE for
+ `d' in the union, and return its dereference as TYPE.
+
+Sun Jun 21 14:04:36 1992 Wilson Tien (wtien at urbana.mcd.mot.com)
+
+ * m68k.c (print_operand_address) [MOTOROLA]: Use .w and .l, not :w, :l.
+
+Sat Jun 20 06:32:11 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * stor-layout.c (get_best_mode): If SLOW_BYTE_ACCESS is true, return
+ widest mode (but no wider than UNITS_PER_WORD) that meets all
+ the conditions.
+
+ * combine.c (make_extraction): Always ensure we have a SUBREG when
+ we make a STRICT_LOW_PART.
+
+ * varasm.c (const_hash, compare_constant_1, record_constant_1):
+ Handle case when TREE_VALUE of a constructor is zero.
+ (output_constant): Use CONSTRUCTOR_ELTS.
+
+ * cse.c (cse_insn): Memory is not invalidated by a constant
+ subroutine call.
+ (delete_dead_from_cse): Correctly check for being within a
+ libcall block.
+
+ * cse.c (canon_reg): Call validate_change with IN_GROUP equal to 1.
+ (cse_insn): Call apply_change_group after canon_reg.
+ When canonicalizing, call validate_change with IN_GROUP equal to
+ one and also call when canon_reg would.
+
+ * combine.c (subst, shift cases): Use force_to_mode in
+ SHIFT_COUNT_TRUNCATED case.
+
+ * rs6000.md: Add new pattern to split move of large constant.
+
+ * cse.c (delete_dead_from_cse): Really delete insn instead of
+ turning it into a NOTE.
+
+ * romp.md (shift patterns): Use QImode for count operand.
+
+Sat Jun 20 06:31:21 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * a29k.md (storehinhww): Use inhw not inbyte.
+
+Thu Jun 18 16:01:56 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * protoize.c (WIFEXITED, WEXITSTATUS): Delete unused macros.
+
+ * combine.c (subst): If comparison operator has floating-point
+ result, adjust the value returned by simplify_relational_operation
+ accordingly.
+ * integrate.c (subst_constants): Likewise.
+ * loop.c (get_condition): Likewise.
+ * cse.c (fold_rtx): Likewise.
+ When returning TRUE or FALSE, handle comparisons returning
+ floating-point.
+ (find_comparison_args): Handle comparisons returning FP values;
+ only look at STORE_FLAG_VALUE for comparisons returning integers.
+
+ * combine.c (try_combine, subst): Pass both comparison arguments
+ to SELECT_CC_MODE.
+ * i386.h, i960.h, i960.c, mips.h, pa.h, pa.c, rs6000.h:
+ Add second argument to SELECT_CC_MODE.
+ * sparc.h, sparc.c: Likewise.
+
+ * cse.c (insert_regs): Make a quantity for the register in a
+ SUBREG if it doesn't have one.
+ (fold_rtx, case SUBREG): Always try to find a constant equivalent
+ for a SUBREG; try for CONST_DOUBLE as well.
+ (cse_insn): Call insert_regs on DEST if it is a SUBREG.
+
+Thu Jun 18 15:01:29 1992 Mike Stump (mrs@albert.gnu.ai.mit.edu)
+
+ * c++: Allow for better quoting and -v handling.
+
+Thu Jun 18 14:49:20 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ For RMS:
+ * varasm.c: Declare text_section and readonly_data_section.
+
+ * dpx2.h (CPP_SPEC): Define __HAVE_68881__ unless -msoft-float.
+ DPX/2 machines all have a 68882.
+
+ * x-i386sco (RCCFLAGS): Use -DNULL=0 to avoid suurious warnings
+ from rcc.
+
+ * seq386.h (SIZE_TYPE): The Sequent running Dynix uses int for size_t.
+
+Thu Jun 18 14:36:41 1992 Mike Stump (mrs@albert.gnu.ai.mit.edu)
+
+ Merge in Cygnus sources...
+
+ Fri Jun 5 15:00:55 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-typeck.c (build_c_cast): When casting, propagate const'ness
+ from cast type. When casting to a reference to T, really just
+ cast to T.
+
+ * cp-cvt.c (build_up_reference): Make a copy of a node before
+ changing it. Only propagate the const bit if we are not
+ subverting it.
+
+ Fri Jun 5 14:36:19 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-cvt.c (build_up_reference): When casting away const on
+ references, do not report an error.
+
+ Fri Jun 5 13:26:11 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-init.c (build_new): Handle new placement with arrays.
+
+ Thu Jun 4 08:26:44 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-search.c (compute_visibility): DERIVED_FROM_P had its
+ arguments reversed, switched them to be in the right order.
+ Fixes visibility on protected members.
+
+ Wed Jun 3 14:45:40 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-parse.y (unary_expr): Make it illegal to use delete on
+ a pointer to a const object. With help from Brendan Kehoe.
+
+ Wed Jun 3 13:25:26 1992 Ken Raeburn (Raeburn@Cygnus.COM)
+
+ * cp-parse.y (template_instantiate_once): Set
+ CLASSTYPE_GOT_SEMICOLON to eliminate messages about missing
+ semicolons.
+
+ * cp-decl.c (start_function): Don't emit error message for missing
+ semicolon after class decl; that syntax (declaring both class and
+ function returning that type) should be legal. Do emit a warning if
+ it's not an anonymous name.
+
+ Mon Jun 1 18:08:09 1992 Mike Stump (mrs at cygnus.com)
+
+ Sat May 30 15:38:54 1992 Brendan Kehoe (brendan@cs.widener.edu)
+
+ * cp-decl.c (grokdeclarator): Don't allow main to be static.
+
+ Mon Jun 1 17:52:24 1992 Mike Stump (mrs at cygnus.com)
+
+ Sat May 30 15:38:54 1992 Brendan Kehoe (brendan@cs.widener.edu)
+
+ * cp-decl.c (poplevel): Use DECL_INITIAL to detect undef label
+ instead of DECL_SOURCE_LINE.
+
+ Mon Jun 1 17:22:54 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-parse.y (unary_expr): Don't allow old placement syntax(with {})
+ nor dynamic with new (with ()) new placement syntax. Completes May 27
+ fix.
+
+ Mon Jun 1 13:57:28 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-type2.c (digest_init): Trailing '\0' is never ignored in
+ initializations using strings in ANSI draft C++ unlike ANSI C.
+
+ Mon Jun 1 07:18:13 1992 Michael Tiemann (tiemann at rtl.cygnus.com)
+
+ * cp-decl.c (pushdecl): Re-fix May 12 change regarding DECL_CONTEXT.
+ * cp-call.c (build_method_call): Go back to using DECL_CONTEXT
+ instead of DECL_CLASS_CONTEXT. DECL_CONTEXT says when a function
+ was first declared virtual in a class, which is needed information
+ in case the virtual function comes from a virtual baseclass (because
+ the derived class won't have a vtable entry for that function (if it
+ has a vtable at all!)).
+
+ Wed May 27 17:05:50 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-parse.y (unary_expr): Handle new placement syntax, desupport
+ the old placement syntax with a pedwarn.
+
+ Tue May 26 17:30:28 1992 Mike Stump (mrs at cygnus.com)
+
+ Thu May 21 17:13:38 1992 Michael Tiemann (tiemann at cygnus.com)
+
+ * cp-decl.c (grok_enum_decls): Allow reference to nested enums from
+ other classes for NICHL.
+
+ Tue May 26 15:31:30 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-*.[chy]: Always include "assert.h" and not <assert.h> to
+ be consistent.
+
+ Tue May 26 10:07:02 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-parse.y (return_init): Fix simple typo that caused '='
+ initialized named return values to fail.
+
+ Mon May 25 11:42:18 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-parse.y (component_decl): Handle anonymous unions as before,
+ except check to make sure it is really an anonymous union.
+
+ Sat May 23 23:37:38 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-tree.c (layout_basetypes): Don't core dump on erroneous input.
+
+ Sat May 23 22:04:31 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-typeck.c (c_expand_start_case): build_type_conversion can
+ return a NULL_TREE, so don't try and find a code or type of it.
+
+ Wed May 20 09:09:08 1992 Michael Tiemann (tiemann@rtl.cygnus.com)
+
+ * cp-call.c (build_method_call): Use DECL_CLASS_CONTEXT, not
+ DECL_CONTEXT to find the class in which FUNCTION was declared (for
+ non-virtual calls).
+
+ Tue May 19 02:08:39 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-parse.y (component_decl): Remove some bogus code that
+ prevents empty nested union definitions from compiling.
+
+ Tue May 19 01:08:23 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-decl.c (grokfndecl): Propagate volatile from type of
+ function out to the decl for the function.
+
+ Mon May 18 17:19:39 1992 Mike Stump (mrs at rtl.cygnus.com)
+
+ * cp-search.c (get_binfo): Since unions cannot participate in
+ inheritance relationships, return 0 instead of aborting.
+
+ Fri May 15 13:37:40 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-parse.y (template_type_name): Handle
+ template<class T> class task { friend task<T>* preempt(task<T>*); };
+ syntax.
+
+ * cp-pt.c (lookup_template_class): Ditto.
+
+ Thu May 14 22:54:17 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-tree.c (layout_basetypes): Don't warn about non-virtual
+ destructors unless the user asks with -Wall.
+
+ Thu May 14 22:38:54 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-type2.c (build_functional_cast): exp may be an error_mark_node,
+ don't crash when it is.
+
+ Thu May 14 18:56:26 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-decl.c (hack_incomplete_structures): Test for underflow
+ before decreamenting n_incomplete in current_binding_level, since
+ it is unsigned.
+
+ Tue May 12 15:52:49 1992 Mike Stump (mrs at cygnus.com)
+
+ Mon May 11 14:10:50 1992 Ron Guilmette (rfg at ncd.com)
+
+ * cp-decl.c (poplevel): Reconciled with recent changes made to the
+ `poplevel' routine in c-decl.c. The changes here cause LABEL_DECL
+ nodes to be attached (as the BLOCK_VARS chain) to the BLOCK node
+ which represent the outermost scope of the function.
+
+ Mon May 11 12:35:44 1992 Ron Guilmette (rfg at ncd.com)
+
+ * cp-class.c (finish_struct): Check DECL_CONTEXT to see if it is
+ any sort of a type (e.g. struct *or* union) rather than just
+ checking it to see if it's a RECORD_TYPE.
+ * cp-decl.c (pushdecl): Set DECL_CONTEXT of pushed ..._DECL node,
+ just as is done in c-decl.c.
+ (pushdecl): Delete useless variable `cntxt'.
+ (finish_decl): Set TREE_USED rather than DECL_FROM_INLINE in order
+ to prevent "unused" warnings.
+ (finish_function): Check DECL_CONTEXT to see if it is a type.
+ (finish_function): Fixed indentation problem.
+ * cp-gc.c (build_m_desc): Check DECL_CONTEXT to see if it is a type.
+ * cp-init.c (build_virtual_init): Fix indentation.
+ * cp-lex.c (store_pending_inline): Check DECL_CONTEXT to see if it
+ is a type.
+ * cp-pt.c (tsubst, do_pending_expansions): Check DECL_CONTEXT to see
+ if it is a type.
+ * cp-typeck.c (mark_addressable): Check DECL_CONTEXT to see if it is
+ any sort of a type (e.g. struct *or* union) rather than just
+ checking it to see if it's a RECORD_TYPE.
+
+ Tue May 12 08:52:06 1992 Michael Tiemann (tiemann@rtl.cygnus.com)
+
+ * cp-typeck.c (build_component_ref): Call `break_out_cleanups'.
+ Also clean up indentiation.
+
+ Mon May 11 23:14:04 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-decl.c (pushtag): Handle structure tags in the same way as the
+ C front-end. This completes a change that rms put in on 3/12/92 and
+ I put in the Cygnus tree on 3/13/92 and Mark Eichin took back out on
+ 3/18/92.
+
+ Sun May 3 00:29:59 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-lex.c (copy_lang_decl, store_pending_inline): Cast
+ arguments to bcopy to be char *.
+
+ Fri May 1 12:22:31 1992 Michael Tiemann (tiemann@cygnus.com)
+
+ * cp-init.c (expand_aggr_init, expand_vec_init): When comparing
+ array types, use `comptypes' instead of ==, since two array types
+ may be structurally identical but not == if one was defaulted from
+ an initializer.
+
+ Wed Apr 29 01:25:25 1992 Mike Stump (mrs at cygnus.com)
+
+ * cp-init.c (do_friend): Check that PREVIOUS_DECL is non-NULL.
+
+Thu Jun 18 14:15:07 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * pa.md (insv): Use `+' for operand 0 constraint.
+
+Thu Jun 18 13:39:22 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Bump Meissner version # to 20.
+ (final_prescan_insn): Add declaration.
+ (FINAL_PRESCAN_INSN): Just call final_prescan_insn.
+ (CONST_OK_FOR_LETTER_P): Rewrite some tests, so that they will
+ work on host systems with 64 bit integers.
+
+ * mips.c (large_int): Rework, so that we don't get funny boundary
+ conditions on systems with 64 bit integers.
+ (mips_move_1word): Just use li to load constants that can be done
+ with lui, instead of issuing the lui, since the GAS bug that
+ generated two instructions has been fixed.
+ (final_prescan_insn): Move the checking for filling the delay
+ slots here from the FINAL_PRESCAN_INSN macro.
+
+ * mips.md (andsi3, iorsi3, xorsi3): Make the constraints match
+ the real machine (the predicate still is more general in order
+ to optimize bitfields at the expense of not CSE'ing large
+ constants used in logical ops, and making reload load it into
+ a scratch register). Don't use $1 as a temporary register any
+ more.
+
+ * varasm.c (decode_reg_name): If `memory' return -4.
+
+ * stmt.c (expand_asm_operands): If `memory' is used as a clobbered
+ register, emit a (clobber (const_int 0)) to force the compiler not
+ to cache memory values in registers across the assembly
+ instruction(s).
+
+ * mips-tfile.c (read_line): Semicolons within strings are not
+ counted as statement separators.
+
+ * collect2.c (scan_prog_file, OSF/rose case): Cast pointer arguments
+ to bcopy to generic * to avoid warnings.
+
+Thu Jun 18 12:04:53 1992 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu)
+
+ * c++: If given -v with no file args, don't pass the libraries to
+ gcc.
+
+Thu Jun 18 10:34:22 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * expr.c (expand_builtin, BUILT_IN_FSQRT): Emit queue of increment
+ instructions before starting a sequence that may get thrown away.
+
+See ChangeLog.5 for earlier changes.
diff --git a/gcc/ChangeLog.7 b/gcc/ChangeLog.7
new file mode 100644
index 00000000000..784fe4f1bd6
--- /dev/null
+++ b/gcc/ChangeLog.7
@@ -0,0 +1,10376 @@
+Sun Jun 20 13:37:00 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 2.4.5 released.
+
+ * c-common.c (decl_attributes): If first_arg_num is 0, no error for it.
+
+ * Makefile.in (extraclean): Delete *.gz, and other diff and tar files.
+
+Sun Jun 20 18:09:50 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * calls.c (expand_call): In last change, preserve the temp slot.
+
+Sat Jun 19 19:55:43 PDT 1993 Ron Guilmette (rfg@netcom.com)
+
+ * dwarfout.c (type_main_variant): New function.
+ Use it in place of TYPE_MAIN_VARIANT everywhere in dwarfout.c.
+
+ * c-decl.c (grokdeclarator): Avoid the use of macros for ..._TYPE
+ nodes in cases where a parameter's type is error_mark_node.
+
+Sat Jun 19 03:57:57 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 2.4.4 released.
+
+ * toplev.c (compile_file): For static decl never defined,
+ use just warning, not pedwarn.
+
+ * dbxout.c (dbxout_type): Reinstall #if 0 around code for
+ outputting structure types, that confused GDB.
+
+Fri Jun 18 20:06:35 1993 Pat Rankin (rankin@eql.caltech.edu)
+
+ * vms.h (MAYBE_VMS_FUNCTION_PROLOGUE): adjust stack pointer by 4 prior
+ to calling C$MAIN_ARGS, otherwise POSIX edition of that routine dies.
+
+Fri Jun 18 14:21:14 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (clean): Delete objc-headers subdir.
+
+ * config/m68k/m68k.h (TARGET_SWITCHES): For -m68020, -m68000 and
+ -msoft-float, turn off 01400 bits.
+
+ * Makefile.in (gcc.xtar.gz): Renamed from gcc.tar.z.
+ (dist): Change the dependency.
+ (mostlyclean): Delete tmp-gcc.xtar.gz.
+
+ * c-iterate.c (save_exprs): New variable.
+ (collect_iterators): Don't process a SAVE_EXPR twice.
+ (iterator_expand): Clear save_exprs.
+
+ * Makefile.in (gcc.info, cpp.info): Actually cd to srcdir.
+
+ * configure (clipper-intergraph-clix*): Use install-headers-cpio.
+
+Fri Jun 18 13:37:16 1993 Michael Meissner (meissner@osf.org)
+
+ * mips.c (output_block_move): Don't abort if one of the input
+ registers is allocated as a scratch register, just use fewer
+ scratch registers.
+
+Fri Jun 18 00:25:16 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/i386/i386.c (call_insn_operand): Require constant address
+ be a general_operand.
+ (expander_call_insn_operand): New fn (what call_insn_operand was).
+ * config/i386/i386.md (call_pop, call, call_value_pop, call_value)
+ (untyped_call): Use expander_call_insn_operand.
+
+Thu Jun 17 17:58:11 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/pa/pa.md (decrement_and_branch_until_zero):
+ Pattern disabled.
+
+Thu Jun 17 13:34:20 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * unroll.c (calculate_giv_inc): Add new variables increment_total
+ and tries, and new label retry, to handle case where increment is
+ two add instructions.
+
+Thu Jun 17 12:13:53 1993 Minh Tran-Le (mtranle@paris)
+
+ * config/i386/aix386ng.h: Changes for non-GAS gcc.
+ (ASM_FILE_START_1): Always output .noopt because /bin/as is buggy.
+ Added #undef to {INIT,FINI,CTORS,DTORS}_SECTION_ASM_OP, ... when
+ not using GAS.
+ (CONST_SECTION_FUNCTION): Override svr3 default.
+ (EXTRA_SECTION_FUNCTIONS): Override svr3 default.
+ (OBJECT_FORMAT_COFF): Added define for collect2.
+ (MY_ISCOFF): For collect2 to handle aix and svr3 object file.
+
+ * config/i386/aix386.h (USE_GAS): New define.
+
+Thu Jun 17 00:26:38 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reg-stack.c (stack_result_p): New function.
+ (stack_reg_life_analysis): Use that.
+
+ * final.c (output_addr_const): Don't insert a leading space
+ in the CONST_DOUBLE_HIGH != 0 case.
+
+Thu Jun 17 00:09:19 1993 Jeff Law (law@snake.cs.utah.edu)
+
+ * pa.h (LEGITIMATE_CONSTANT_P): Reject function addresses for now.
+
+Wed Jun 16 20:14:10 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-typeck.c (build_unary_op): Make sure it's the global fn `main'
+ before complaining about taking the address of it.
+
+Wed Jun 16 16:24:31 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/i386/xm-sysv4.h (SMALL_ARG_MAX): Defined.
+
+ * c-typeck.c (check_format): Don't crash if cur_type is an error_mark.
+ Handle identifier_node as the TYPE_NAME.
+
+Mon Jun 14 16:09:24 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * calls.c (expand_call): If PCC_STATIC_STRUCT_RETURN and TARGET
+ is zero, copy result from static location.
+
+ * cse.c (invalidate_skipped_set): Promote "nonscalar" to "all".
+
+Mon Jun 14 16:01:34 1993 Karl Berry (karl@cs.umb.edu)
+
+ * fixincludes (stdio.h math.h ctype.h sys/{limits.h,fcntl.h,dirent.h}):
+ Fix STDC/POSIX and other things for Interactive Unix 2.2 or later.
+
+Mon Jun 14 04:41:38 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload.c (make_memloc): Don't reuse a memloc.
+
+Sun Jun 13 16:01:37 1993 Jeff Law (law@snake.cs.utah.edu)
+
+ * pa.md (iorsi3): Explicitly set length to 1.
+ (andsi3, lshrsi3, rotrsi3, rotlsi3): Likewise.
+ (ashift and ashiftrt by const_int_operand): Likewise.
+ ((and (ashift)) optimizer): Likewise.
+
+Sun Jun 13 20:23:04 1993 Stephen Moshier (moshier@world.std.com)
+
+ * real.c (ltoe, ultoe, eifrac, euifrac): Handle 64-bit longs.
+ (SFMODE_NAN, DFMODE_NAN, XFMODE_NAN, TFMODE_NAN): New macros
+ permit definitions of NaN patterns to be overridden in tm.h.
+
+Sun Jun 13 12:55:22 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (start_function): Avoid a null-reference on CTYPE.
+
+Sun Jun 13 08:22:30 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case COND_EXPR): Fix typo; const1_rtx should
+ be const0_rtx when ignoring expression.
+
+Sun Jun 13 00:15:00 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * genopinit.c (optabs): For strlen_optab, don't look for `2' in name.
+
+Sat Jun 12 20:23:04 1993 Stephen Moshier (moshier@world.std.com)
+
+ * real.c (ereal_from_float, ereal_from_double): New functions.
+ * real.h (REAL_VALUE_FROM_TARGET_SINGLE): New macro.
+ (REAL_VALUE_FROM_TARGET_DOUBLE): Likewise.
+ * emit-rtl.c (gen_lowpart_common): Use those macros if REAL_ARITHMETIC.
+
+Sat Jun 12 13:44:00 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sched.c (add_dependence): Reject CODE_LABELs when searching for
+ last insn of a sched group.
+
+Sat Jun 12 08:06:25 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * m68k.md (movqi): Handle copying an address register to or
+ from memory when the address uses the address register.
+
+Sat Jun 12 00:17:06 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cse.c (record_jump_cond): Look up op1 again after inserting op0.
+
+Fri Jun 11 21:50:16 1993 John F Carr (jfc@Athena.mit.edu)
+
+ * rs6000.md (movsf, movdf): Handle a move from an integer register
+ before reload. This can happen if the user uses asm to put a floating
+ point variable in an integer register.
+
+Fri Jun 11 20:04:43 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.c (rs6000_gen_section_name): Only replace last period
+ in filename with section name and correct calculation of
+ string length.
+
+ * recog.c (constrain_operands): Correctly ignore MATCH_OPERATOR
+ operands.
+
+ * reload1.c (eliminate_regs_in_insn): Don't use a later elimination
+ than eliminate_regs would use.
+
+ * c-decl.c (finish_decl): Don't modify DECL_INITIAL of a PARM_DECL.
+
+Thu Jun 10 23:48:01 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * genextract.c (main): Use __volatile__, not volatile.
+
+Thu Jun 10 16:21:08 1993 Michael Meissner (meissner@osf.org)
+
+ * i386/osfrose.h (SUBTARGET_SWITCHES): Add -m{,no-}ident.
+ (ASM_SPEC): Pass -v to assembler if used.
+ (OVERRIDE_OPTIONS): Don't allow -fpic if using the OSF/rose object
+ format.
+ (ASM_DECLARE_OBJECT_NAME, ASM_DECLARE_FUNCTION_NAME): If using ELF,
+ emit a .type pseudo op that says the label is either an object or
+ a function.
+ (ASM_DECLARE_FUNCTION_SIZE): Copy from svr4.h.
+ (SCCS_DIRECTIVE): Define.
+ (ASM_FILE_END): Unless -mno-ident, emit a .ident directive that
+ identifies GCC and whether several switches are used.
+
+ * i386/osfelf.h (ASM_SPEC): Pass -v to assembler if used.
+ (OBJECT_FORMAT_ROSE): Undefine.
+
+Thu Jun 10 16:20:24 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * expmed.c (MAX_BITS_PER_WORD): Define earlier.
+ (shift_cost, shiftadd_cost, shiftsub_cost): Use MAX_BITS_PER_WORD.
+
+Thu Jun 10 12:56:18 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sched.c (sched_analyze_2): Don't ignore USE insns when creating
+ dependencies.
+ (sched_analyze): Likewise.
+
+Wed Jun 9 12:58:51 1993 Michael Meissner (meissner@osf.org)
+
+ * configure (i386-*-osfelf): Add new configuration for OSF/1 using
+ the ELF object file format.
+
+ * i386/osfelf.h (new file): New config file for OSF/1 with ELF.
+ Include osfrose.h and redefine things as needed.
+
+ * i386/osfrose.h (SUBTARGET_SWITCHES): Add -melf, -mrose, and
+ -mno-rose switches.
+ (HANDLE_SYSV_PRAGMA): Define.
+ (IDENTIFIER_PREFIX, IDENTIFIER_SUFFIX): Remove unused macros.
+ (CPP_PREDEFINES): Add -Acpu(i386) -Amachine(i386) -Asystem(unix).
+ (CPP_SPEC): Define __ROSE__ if compiling for OSF/rose and __ELF__
+ if compiling for the ELF object format.
+ (CC1_SPEC): Pass -mrose if no object format switch.
+ (DWARF_DBX_REGISTER_NUMBER): Map registers according to the
+ debugging format.
+
+Wed Jun 9 13:21:03 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ Mon Jun 7 18:01:31 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-search.c (is_subobject_of_p, lookup_field, lookup_fnfields):
+ Because virtual bases don't necessarily share the same binfo, use
+ the binfo hierarchy of TYPE_BINFO of any virtual bases, when
+ performing hiding checks. Fixes problem introduced on Thu Mar 25
+ 23:09:27 1993. The symptom is the compiler reports non ambiguous
+ members as being ambiguous.
+
+ Wed Jun 2 11:53:24 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-search.c (lookup_fnfields_here): Use TYPE_MAIN_VARIANT on
+ context types before comparing. Fixes const member functions not
+ being found in templates.
+
+Tue Jun 8 19:44:23 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (finish_function): Move setting of the DECL_RESULT's
+ context and calling setjmp_protect after poplevel, so we have a
+ valid DECL_INITIAL for the fndecl (not an error_mark_node).
+
+Tue Jun 8 13:14:27 1993 John Hassey (hassey@dg-rtp.dg.com)
+
+ * configure: Added gas support for m88k-* targets.
+
+ * t-luna-gas t-dgux-gas t-m88k-gas: New files in config/m88k.
+
+Tue Jun 8 14:51:44 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * loop.c (move_movables): Delete REG_EQUAL notes that describe a
+ non loop invariant value.
+
+ * sparc.c (call_operand, call_operand_address): Accept any address
+ not just REG rtx.
+
+Tue Jun 8 18:47:39 1993 Torbjorn Granlund (tege@nada.kth.se)
+
+ * sparc.h: (RTX_COSTS): Make cost of MULT depend on TARGET_V8.
+
+ * pa.h (CPP_SPEC): Fix typo: define __hp9000s700.
+
+Tue Jun 8 06:16:30 1993 John Hassey (hassey@dg-rtp.dg.com)
+
+ * m88k.h (HARD_REGNO_REGS, HARD_RENO_MODE_OK, MODES_TIEABLE_P):
+ Restrict use of 88110 extended registers to floating point.
+
+Mon Jun 7 15:42:10 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * math-68881.h (atan2): For x <= 0, lump y == 0 with y > 0
+ to get the right result in 0, -1 case.
+
+Mon Jun 7 17:50:25 1993 Jeff Law (law@snake.cs.utah.edu)
+
+ * pa.h (RTX_COSTS): Cost of MULT also depends on
+ TARGET_DISABLE_FPREGS.
+
+ * pa.h (ASM_OUTPUT_INT): Always emit special "plabel" relocation for
+ function labels.
+
+Sun Jun 6 16:31:59 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (translate_options): Don't assume option_map[j].arg_info != 0.
+
+ * config/vax/vax.h (PRINT_OPERAND): Prefix constant by `$'.
+
+Sun Jun 6 00:44:48 1993 Torbjorn Granlund (tege@nada.kth.se)
+
+ * m88k.md (fix_truncdfsi2): Destination is general register, source
+ general or extended register.
+ (fix_truncsfsi2): Likewise.
+
+Sun Jun 6 00:20:25 1993 Kresten Krab Thorup (krab@iesd.auc.dk)
+
+ * objc-act.c (encode_type): Add cases for DImode, encoded
+ as 'q' and 'Q' respectively.
+
+Sat Jun 5 14:02:36 1993 James Van Artsdalen (james@bigtex.cactus.org)
+
+ * c-decl.c (pushdecl): Copy DECL_FRAME_SIZE for inline function decls.
+
+ * stmt.c (check_for_full_enumeration_handling): Don't create a
+ default label if all enumeration literals are covered by cases.
+
+Sat Jun 5 04:49:19 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * function.c (uninitialized_vars_warning): Change warning text.
+ (setjmp_args_warning): Likewise.
+
+ * c-typeck.c (convert_for_assignment): Allow conversion to union type
+ for pointer if the pointer could convert to the union member.
+
+Fri Jun 4 18:09:47 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * integrate.c (expand_inline_function): Always copy a SUBREG as an
+ argument into a REG.
+
+Fri Jun 4 05:52:28 1993 Torbjorn Granlund (tege@nada.kth.se)
+
+ * pa.h (RTX_COSTS): Make cost of MULT depend on TARGET_SNAKE.
+
+ * expmed.c (synth_mult): Move code to add or subtract at
+ leftmost 1-bit to before factoring code to decrease the allowed cost
+ quickly. Restrict it to handle only odd numbers.
+ (init_expmed): Limit mult_cost to make synth_mult run faster.
+
+Fri Jun 4 23:18:35 1993 Kresten Krab Thorup (krab@iesd.auc.dk)
+
+ * objc/sendmsg.c (objc_msg_sendv): Pass a dummy va_list, not 0,
+ to objc_error.
+
+Fri Jun 4 16:12:43 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * byteorder.h: Use new-style function definitions, so that this
+ file is both valid C and C++.
+
+Fri Jun 4 00:59:31 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/mips/svr4-5.h (CPP_PREDEFINES):
+ Add _MIPS_SZINT _MIPS_SZLONG _MIPS_SZPTR.
+
+Thu Jun 3 23:48:39 1993 Jeff Law (law@snake.cs.utah.edu)
+
+ * pa.c (output_function_epilogue): If the last insn in the
+ current function is a (volatile) call, then emit an extra
+ nop after the call so that RP will point to a valid instruction.
+
+Thu Jun 3 18:52:24 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/nextstep.h (INCLUDE_DEFAULTS): Use same order as cccp.c.
+ Add CCC_INCLUDE_DIR with /ansi and /bsd concatenated.
+
+ * varasm.c (immed_real_const_1): Check explicitly for NaNs.
+
+Thu Jun 3 14:37:25 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * combine.c (num_sign_bit_copies): At end, return 1 is nonzero has
+ the high bit set.
+
+Wed Jun 2 17:27:31 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * loop.c (record_initial): Reject insns that store into subregs.
+
+Tue Jun 1 12:46:48 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 2.4.3 released.
+
+ * just-fixinc: New file.
+
+ * config/convex/convex.h [_IEEE_FLOAT_] (LINK_SPEC):
+ Use ___gcc_cleanup, not __gcc_cleanup.
+
+Tue Jun 1 07:41:26 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.md (ffs): Delete pattern containing nonexistant instruction.
+
+ * alpha.md (extendsidi2): Correctly do operation when in FP
+ registers and, since expensive, don't have FP regs as a preference.
+
+Tue Jun 1 00:09:46 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes (signal.h): Fix typo in last change.
+
+ * configure: Add missing dash in patterns for mips-*-riscos...
+ In riscos 5 patterns, use fixinc.mips.
+
+ * fixinc.mips: New file.
+
+ * config.sub: Handle 386bsd.
+
+Mon May 31 23:47:00 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/vax/vax.md (untyped_call, blockage): New patterns,
+ basically copied from m68k.md.
+
+Mon May 31 21:46:08 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * romp.c (output_epilog): Don't crash if TYPE_SIZE of an arg is
+ not set.
+
+Mon May 31 00:15:20 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/mips/x-sony (OLDCC): Fix typo.
+
+ * config/mips/bsd-4.h, bsd-5.h, svr3-4.h, svr3-5.h, svr4-4.h, svr4-5.h:
+ (STANDARD_INCLUDE_DIR): Renamed from SYSTEM_INCLUDE_DIR.
+ * config/mips/bsd-5.h, svr3-5.h, svr4-5.h (LINK_SPEC):
+ Delete excess close brace.
+
+ * pa.md (decrement_and_branch_until_zero):
+ Reverse all conditions in reload cases.
+
+ * Version 2.4.2 released.
+
+Sun May 30 21:14:42 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * integrate.c (expand_inline_function): Increment map->const_age
+ before copying REG_NOTES.
+
+ * sparc.c (sparc_builtin_saveregs): Don't set first_reg to zero
+ for varargs.
+
+Sun May 30 23:58:52 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc/Makefile (copy-headers): chmod the headers, not the dir.
+
+ * Makefile.in (objc-headers): Don't dep on force.
+ Touch objc-headers so copy is not repeated at install time.
+
+ * final.c (shorten_branches): Conditionalize last change
+ on SHORTEN_WITH_ADJUST_INSN_LENGTH.
+
+ * pa.h (SHORTEN_WITH_ADJUST_INSN_LENGTH): Defined.
+
+Sun May 30 13:53:30 1993 Jeff Law (law@snake.cs.utah.edu)
+
+ * final.c (shorten_branches): Call ADJUST_INSN_LENGTH during the
+ shortening phase.
+
+ * pa.c (output_cbranch): In forward/long branch case, only
+ nullify if the delay slot was empty or if the delay slot
+ was explicitly nullified.
+ (output_bb): Likewise.
+
+ * pa.h (ADJUST_INSN_LENGTH): Call pa_insn_adjust_length.
+
+ * pa.h (INSN_SETS_ARE_DELAYED): Do not call get_attr_type with a
+ CLOBBER insn.
+ (INSN_REFERENCES_ARE_DELAYED): Likewise.
+
+ * pa.md (call insns and expanders): Do not explicitly clobber %r31.
+
+ * pa.c (pa_insn_adjust_length): Rework. Add code to handle
+ millicode calls with unfilled delay slots and inline block moves.
+ (compute_movstrsi_length): New function to compute the length of
+ a movstrsi pattern.
+ (output_cbranch): Long branches with unfilled delay slots can
+ always nullify the following instruction if their delay slot
+ was not filled.
+
+Sun May 30 18:58:22 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * mips.c (function_arg_partial_nregs): For BLKmode values, fits in
+ remaining register if total size <= MAX_ARGS_IN_REGISTERS, not <.
+
+Sun May 30 17:45:06 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * emit-rtl.c (operand_subword): Shift by (HOST_BITS_PER_WIDE_INT / 2),
+ not by 32.
+
+ * reload1.c (reload): If only non-group need is unfilled, see if
+ regs spilled for earlier classes can satisfy it.
+
+ * config/mips/iris4loser.h (ASM_SPEC): Add unconditional -O0.
+
+Sat May 29 15:19:57 1993 Jeff Law (law@snake.cs.utah.edu)
+
+ * pa.md (movdf for const_double): Handle loading
+ a CONST_DOUBLE into general registers.
+ (movsf for const_double): Likewise.
+
+ * pa.c (singlemove_string): Handle SFmode CONST_DOUBLE
+ as a source operand.
+
+Sat May 29 14:14:30 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (operand_subword): Correctly handle case when
+ REAL_VALUE_TO_TARGET_DOUBLE is used on a 64-bit machine.
+
+Sat May 29 12:15:43 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes (signal.h): Don't mung #endif if nonwhite stuff precedes.
+
+ * rtl.h: Undef PC.
+
+Fri May 28 19:01:39 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure (i[34]86-*-isc*): If gas and not stabs, use isccoff.h.
+
+ * final.c (shorten_branches): Do not call insn_current_length
+ with an insn which has a non-varying length. Use insn_lengths
+ instead.
+
+ * c-typeck.c (process_init_constructor): Never set current_index
+ itself--always store into current_index_node.
+
+ * dbxout.c (dbxout_type): Add missing `;' for array with no domain.
+
+Fri May 28 16:47:54 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (fold_rtx): Correct check for associating shifts and
+ ending up with a shift count too large; convert to the
+ largest valid for ASHIFTRT and don't fold all others.
+
+ * combine.c (make_compound_operation, case ASHIFTRT): Fix typo.
+ Was using C1 where C2 is needed.
+
+Fri May 28 17:50:38 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * integrate.c (expand_inline_function): When copy REG_NOTES, must
+ also call subst_constants.
+
+ * gcc.c (process_command): When GCC_EXEC_PREFIX is defined and
+ tooldir is relative, add it to search path in addition to standard
+ directory rather than instead of.
+
+Fri May 28 00:50:53 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/arm/arm.h (GO_IF_LEGITIMATE_INDEX): Check explicitly for
+ upper and lower bounds of valid INDEX.
+
+ * genopinit.c (insn_name_ptr): Declare as variable.
+ (optabs): Fix typo in floatuns case.
+
+Thu May 27 12:13:55 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (simplify_and_const_int, case IOR, XOR, NOT): Don't
+ create constant wider than mode of VAROP.
+
+Thu May 27 20:41:18 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure (i[34]86-ibm-aix*): Set fixincludes.
+ (i[34]86-*-sco*): Don't test --with-gas, just --with-stabs.
+
+Wed May 26 16:05:05 1993 Michael Collison (collison@osf.org)
+
+ * jump.c (jump_optimize): Insert missing GET_MODE call.
+
+Wed May 26 18:40:09 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * i960.md (ashlsi3): Use shlo instead of shli.
+
+Wed May 26 00:34:33 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/nextstep.h (INCLUDE_DEFAULTS): Undo previous change.
+
+ * Makefile.in (gcc.xtar.z): Renamed from gcc.xtar.Z. Use gzip.
+ (dist): Depend on gcc.xtar.z.
+ (mostlyclean): Delete temp-gcc.xtar.z.
+
+ * Version 2.4.1 released.
+
+ * c-lex.c (readescape): Don't complain for \% unless pedantic.
+
+ * config/mips/mips.h (ASM_SPEC): If -noasmopt, pass -O0.
+ * config/mips/iris3.h: Likewise.
+
+ * config/mips/iris4loser.h: New file.
+ * config/mips/iris4gl.h: New file.
+ * configure (mips-sgi-iris4loser): New alternative.
+
+Tue May 25 18:05:50 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * dbxout.c (dbxout_block) [DBX_BLOCKS_FUNCTION_RELATIVE]:
+ Get function name from DECL_RTL not from DECL_ASSEMBLER_NAME.
+ * config/sparc/sol2.h (ASM_OUTPUT_SOURCE_LINE): Likewise.
+
+ * m68k/sun3.h (FUNCTION_VALUE, FUNCTION_VALUEX): Ifdef out.
+
+ * c-typeck.c (convert_for_assignment): When allowing mixing of
+ signed and unsigned pointers, compare unsigned types not type sizes.
+
+Tue May 25 00:08:42 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * nextstep.h (INCLUDE_DEFAULTS): Delete /NextDeveloper/Headers/ansi
+ and /NextDeveloper/Headers/bsd.
+
+ * regclass.c (regclass): Fix paren error.
+
+ * c-decl.c (finish_decl): If type is laid out, but decl is not,
+ call layout_decl.
+
+ * protoize.c (include_defaults): Update to match cccp.c.
+ * Makefile.in (stamp-proto):
+ Pass LOCAL_INCLUDE_DIR based on local_prefix.
+
+ * stmt.c (expand_asm_operands): Detect constants as outputs.
+
+Mon May 24 18:25:23 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * collect2.c (main): Use TARGET-gcc, not gcc-TARGET.
+
+ * reload1.c (delete_output_reload): Don't delete output reload
+ if cannot_omit_stores is set for that pseudo.
+ (reload): Init and clear cannot_omit_stores.
+ (eliminate_regs): Set cannot_omit_stores.
+
+ * configure (i[34]86-*-sco3.2v4*): Test --with-stabs, not --with-gas.
+
+Mon May 24 14:10:59 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * integrate.c (expand_inline_function): Set MEM_IN_STRUCT_P for
+ return value if needed.
+
+Mon May 24 13:10:07 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-call.c (convert_harshness): Don't dereference a null parm.
+
+ * cp-method.c (dump_init): Don't try to print out the first operand
+ of a TARGET_EXPR if it's not there.
+
+Mon May 24 10:13:26 1993 Mike Stump (mrs@poseidon.cygnus.com)
+
+ * expr.c (expand_expr): Finish Tue Aug 18 23:07:33 1992 change. It
+ didn't handle the target != 0 case, now it does.
+
+Mon May 24 00:30:50 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (expand_expr, TARGET_EXPR case):
+ Handle case where DECL_RTL is nonzero.
+
+ * configure (i[34]86-*-isc*): Use install-headers-cpio.
+
+ * genopinit.c (optabs): Add backslashes to prevent SCCS confusion.
+ * config/m68k/tower-as.h (CONSTRUCTOR_NAME_FORMAT): Likewise.
+
+ * combine.c (subst): For subreg-of-constant, don't gen_lowpart
+ if it's a big-endian machine and constant is multi-word.
+
+ * gstddef.h (size_t) [__GNUG__]: Don't typedef it if it's
+ already defined as a macro.
+
+ * config/i386/x-aix (CLIB): Defined.
+ * config/i386/aix386.h (STARTFILE_SPEC, LINK_SPEC): New overrides.
+ * config/i386/xm-aix.h: Undef TRUE and FALSE before #include.
+ * config/i386/aix386ng.h (STARTFILE_SPEC, LINK_SPEC): Don't use
+ crtbegin.o, crtend.o, crtn.o, libp.a. Use gcrt0.0, not gcrt1.o.
+ (ENDFILE_SPEC): Use crtn.o.
+ (CPP_PREDEFINES): Delete _AIX, AIX, and _I386. Add ps2, unix.
+ (CPP_SPEC): Add _AIX, _I386, _MBCS. Handle -posix.
+ (ASM_SPEC): Turned off.
+ * config/i386/t-aix: New file.
+ * configure (i[34]86-ibm-aix*): Use t-aix if using gas.
+
+ * config/i386/sco4.h (ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE):
+ New override definitions.
+
+ * toplev.c (compile_file): Undo previous changes (that were to call
+ assemble_zeros whenever DBX_DEBUGGING_INFO is defined).
+
+Sun May 23 16:31:38 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/nextstep.h (INCLUDE_DEFAULTS): Fix missing comma.
+
+ * config/i386/x-aix (FIXINCLUDES): Defined.
+ * fixinc.ps2: New file.
+
+Sun May 23 14:51:06 1993 Kresten Krab Thorup (krab@iesd.auc.dk)
+
+ * objc/objc.h (objc_protocol): New field `class_pointer'.
+
+ * objc/init.c (__objc_init_protocols): Call recursively
+ on super protocols. Make local var `proto_class' static.
+
+Sun May 23 00:49:17 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (BISONFLAGS): Remove -v since output file names are long.
+
+ * reload1.c (choose_reload_regs): If inheriting a spill reg,
+ and reload_out has a wider mode, just copy from that spill reg,
+ don't use it for the reload.
+
+ * reload.c (push_reload): Fix NULL arg in last change.
+
+ * config/m88k/x-tekXD88 (AR_FLAGS): Defined.
+
+Sat May 22 14:49:59 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/mips/mips.h (ASM_SPEC): If -noasmopt, don't pass -O2.
+ * config/mips/iris3.h: Likewise.
+
+ * config/nextstep.h (INCLUDE_DEFAULTS): Put /usr/include/bsd last.
+
+ * config/alpha/alpha.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT):
+ Use hex if infinite, nan, or minus zero.
+
+ * real.c (target_isnan): Use GET_REAL macro to get argument.
+ (ereal_to_int): Fix potentially wrong-endian argument passed to eisnan.
+
+Fri May 21 14:24:01 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/nextstep.h (INCLUDE_DEFAULTS): Add /usr/include/bsd.
+
+ * cccp.c (default_include): Put TOOL_INCLUDE_DIR after
+ LOCAL_INCLUDE_DIR in non-cross case.
+
+ * real.c (emdnorm): Fix typo affecting roundoff behavior in XFmode.
+
+ * config/m68k/amix.h (CPP_PREDEFINES): Add -D__svr4__.
+ (ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_INTERNAL_LABEL):
+ New override definitions.
+
+ * collect2.c (main) [CROSS_COMPILE]: Use TARGET-TOOL for full_...
+
+ * collect2.c (main): For -debug, if ..._file_name is a null pointer,
+ say so instead of crashing.
+
+ * m68k.md (cmpxf2 recognizer): Test SGS_CMP_ORDER, not HPUX_ASM.
+
+ * c-common.c (constant_expression_warning)
+ (overflow_warning, convert_and_check): Change pedwarn to warning.
+
+ * reload.c (push_reload): When IN is a subreg of a multiword reg
+ that uses a funny number of registers, and SUBREG_WORD is nonzero,
+ and IN must match an output, reload both the reg and the subreg.
+
+ * protoize.c (add_symbol, unexpand_if_needed, abspath):
+ Supply missing arg to savestring.
+
+ * Makefile.in (info, dvi): New targets.
+
+Fri May 21 10:28:41 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-pt.c (subst): Don't use a method's arguments unless it has some.
+
+Fri May 21 11:51:20 1993 Kresten Krab Thorup (krab@iesd.auc.dk)
+
+ * objc/sarray.h (sarray_get): Add #ifdef case for
+ !defined(PRECOMPUTE_SELECTORS) and OBJC_SPARSE2.
+ * objc/sarray.c (sarray_at_put): Likewise.
+
+Fri May 21 00:51:10 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure (mips-*-ultrix*): Renamed from mips-dec-ultrix*.
+
+Thu May 20 23:16:43 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload1.c (choose_reload_regs): Handle earlyclobbers
+ when inheriting from reg_last_reload_reg.
+
+Thu May 20 13:59:16 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * Makefile.in (install-dir): Fix syntax, make tooldir before assertdir.
+
+Thu May 20 08:52:30 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gstddef.h [_ANSI_H_]: Handle __need_size_t and __need_wchar_t.
+
+ * fixincludes (Fixing CTRL): Reject CTRL or _CTRL following digit.
+
+ * enquire.c (F_check): Check NO_LONG_DOUBLE_IO.
+
+Wed May 19 23:18:55 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/i386/x-isc3 (X_CFLAGS): Delete -DPOSIX_JC.
+
+ * real.c (e24toe, e53toe, e64toe): Fix sign in conversions
+ of -infinity. Do eclear before einfin.
+
+Wed May 19 15:37:20 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * va-sparc.h (va_dcl): Restore accidentally deleted __builtin_va_alist
+ declaration.
+
+ * objc-act.c (handle_class_ref): Call assemble_constant_align
+ before output_constant.
+ * varasm.c (assemble_constant_align): New function.
+
+Wed May 19 13:40:01 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/i860/x-sysv4 (X_CFLAGS): Deleted.
+
+ * configure (i[34]86-*-isc*): If version is 3, use x-isc3.
+ * config/i386/x-isc3: New file.
+
+Mon May 19 21:47:49 1993 Jeff Law (law@snake.cs.utah.edu)
+
+ * Fix calling convention for indirect calls on the PA.
+ * calls.c (expand_call): Declare and set current_call_is_indirect.
+ (emit_library_call, emit_library_call_value): Likewise.
+ * function.c (assign_parms): Likewise.
+ * pa.h (TARGET_SHARED_LIBS): Define as 1.
+ (FUNCTION_ARG): If this is a call through a function pointer, then
+ the caller passes all arguments in general registers.
+
+ * pa.h (FUNCTION_ARG_REGNO_P): Account for registers which may
+ be unavailable on particular cpu models. Fix indentation.
+
+Wed May 19 13:13:42 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * loop.c (scan_loop): Treat pseudo duplicated for exit tests just
+ like we treat user vars in seeing if we can move a SET.
+
+ * combine.c (set_nonzero_bits_and_sign_copies, nonzero_bits):
+ If we have a positive constant that is negative in the mode
+ it is being used in, treat it as negative.
+ * rs6000.h, alpha.h (SHORT_IMMEDIATES_SIGN_EXTEND): Define.
+
+ * emit-rtl.c (operand_subword): Reject cases when BITS_PER_WORD
+ is greater than HOST_BITS_PER_INT unless OP is const0_rtx.
+
+Tue May 18 16:31:06 1993 Torbjorn Granlund (tege@nada.kth.se)
+
+ * pa.h (INITIALIZE_TRAMPOLINE): Make 2:nd flush, end_addr,
+ at the last real insn in the trampoline.
+
+Tue May 18 13:35:43 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (assertdir): use $(tooldir)/include for this.
+ (install-dir): Always create assertdir and tooldir.
+
+ * config/arm/arm.md (add/asl recognizer): Use space, not #, after asl.
+ Shuffle operands differently.
+
+ * objc-act.c (synth_module_prologue): Set TREE_PUBLIC in umsg_decl.
+
+ * Makefile.in (infodir): New variable.
+ (install-dir): Create that dir.
+ (install-info): New rule.
+ (install-normal): Depend on install-info.
+
+ * fixincludes: Use $file. rather than $file.sed
+ when $file is or might be more than 10 characters long.
+
+ * config/i386/isc.h (LIB_SPEC): Handle -posix before -shlib.
+
+ * config/mips/x-sony: New file.
+ * configure (mips-sony-bsd*): Use x-sony.
+
+ * Makefile.in (local_prefix): Do not default from $(prefix).
+
+Tue May 18 09:28:02 1993 Chris Smith (csmith@convex.com)
+
+ * convex.c (replace_pushes, emit_ap_optimizations): Delete.
+
+Mon May 17 18:07:53 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixinc.svr4 (ieeefp.h): Delete definitions of __mips and __m68k.
+
+Mon May 17 17:00:00 1993 DJ Delorie (dj@ctron.com)
+
+ * configure.bat: Fix sed for version.c to handle both with
+ and without spaces correctly (MS-DOS).
+
+Mon May 17 12:26:55 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * rtl.c (init_rtl): Correct number of 'w's in CONST_DOUBLE format.
+
+Mon May 17 00:07:50 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 2.4.0 released.
+
+ * Makefile.in (extraclean): Remove junk from objc subdir.
+
+ * fixinc.svr4 (ieeefp.h): Delete definitions of __i860 and __m88k.
+
+ * mips/iris4.h (ASM_OUTPUT_ASCII): New overriding definition.
+
+ * pa.h (INITIALIZE_TRAMPOLINE): Pass both the starting and ending
+ addresses of the trampoline to the cacheflush pattern.
+ * pa.md (cacheflush): Flush the cache entries associated with
+ both the starting and ending addresses of the trampoline.
+
+ * gvarargs.h, gstdarg.h [__svr4__ __i860__]:
+ Define _VA_LIST only if not defined already.
+
+Mon May 17 00:40:36 1993 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386/sysv4.h (BIGGEST_FIELD_ALIGNMENT, PCC_BITFIELD_TYPE_MATTERS):
+ Deleted. Now handled by HANDLE_SYSV_PRAGMA.
+ (HANDLE_SYSV_PRAGMA): Deleted: already defined by svr4.h.
+
+Sun May 16 19:25:38 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * unroll.c (initial_reg_note_copy, final_reg_note_copy): New functions.
+ (copy_loop_body): Use new function to copy REG_NOTES.
+
+Sun May 16 13:03:58 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (extraclean): Delete junk in subdirs of config.
+ (distclean): Delete {c,cplus,objc}-parse.output.
+
+ * reorg.c (find_end_label): Update insn after calling emit_jump_insn.
+
+ * fixinc.svr4 (ieeefp.h): Delete `#define __sparc' also.
+
+Sun May 15 01:37:19 PDT 1993 Ron Guilmette (rfg@netcom.com)
+
+ * fixinc.svr4 (ieeefp.h): Delete `#define __i386' line.
+
+Sat May 15 10:11:01 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * math-68881.h: Add conditional against multiple inclusion.
+
+ * gvarargs.h [__svr4__ __i860__] (_VA_LIST): Do define.
+ * gstdarg.h: Likewise.
+
+ * toplev.c (compile_file): If support dbx output,
+ always output 0 at start of text section.
+
+ * cp-tree.h (error_not_base_type): Fix typo in decl.
+
+Sat May 15 09:08:23 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_assignment): Fix error in last change.
+
+ * rs6000.md (movqi, movhi, movsi): Make sure that address returned
+ from force_const_mem is valid.
+
+ * i860.h (INITIALIZE_TRAMPOLINE): Don't make improper SUBREGs
+ and ensure that CXT and FNADDR are in registers.
+
+ * convex.c (insert_ap_loads): Initialize AP_IS_LIVE to 0 at
+ start of both loops, not just first one.
+
+ * convex.h (REGNO_REG_CLASS): Don't call abort; it will cause
+ a compilation error as written and isn't done elsewhere.
+
+ * combine.c (set_nonzero_bits_and_sign_copies): Don't record
+ data for a a pseudo that is undefined on entry to a function.
+ When a pseudo is clobbered, show we don't know anything about it.
+
+ * expr.c (expand_assignment): Always return a result that has
+ the mode of TO.
+
+ * rs6000.c (rs6000_makes_calls): If profiling, say we make calls.
+
+Sat May 15 00:38:22 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * va-mips.h (va_arg) [__MIPSEB__]:
+ After incrementing, subtract the rounded size, not the size proper.
+
+ * config/i860/x-sysv4 (X_CFLAGS): Defined.
+ (GCC_CFLAGS): Definition deleted.
+
+ * final.c (output_addr_const): Don't printing leading zeros.
+
+Sat May 15 06:18:43 1993 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * reload1.c (reload): Don't start 2-group unless it could be finished.
+
+Sat May 15 12:23:58 1993 Torbjorn Granlund (tege@nada.kth.se)
+
+ * alpha.c (output_prolog): Change (sp) to ($30).
+
+ * pa.h (TRAMPOLINE_TEMPLATE): Change .long to .word; split into
+ two lines.
+
+Fri May 14 18:09:31 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (option_map): Renamed --version to --use-version.
+
+Fri May 14 17:20:21 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * xcoffout.c (N_DSLINE, N_BSLINE): Delete definitions.
+ (stab_to_sclass): Use ifdefs to test for presence of N_MAIN,
+ N_BSLINE, N_DSLINE, N_BINCL, N_EINCL, N_EXCL, N_M2C, N_SCOPE.
+
+ * sched.c (split_hard_reg_notes): Handle 0th sub register, and
+ multiple register kills.
+ (update_flow_info): For multi-word hard regs, use
+ split_hard_reg_notes to add all REG_DEAD notes, instead of just
+ the additional ones due to splitting.
+
+Fri May 14 16:12:28 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * configure (hppa1.1-*-hpux*): Use CPIO for headers, just like
+ other HPUX configs.
+ (hppa1.1-*-hpux8.02*): Likewise.
+
+Fri May 14 16:35:22 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * reorg.c (fill_slots_from_thread): If try_split split new_thread,
+ update it to the new value.
+
+Fri May 14 13:42:39 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * configure (hp700-hpux8.02): New target.
+ * pa1-oldas.h: New target for 1.1 machines running HPUX 8.02.
+
+Fri May 14 13:23:51 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * integrate.c (expand_inline_function): Set map->integrating.
+ (copy_rtx_and_substitute, case MEM): Don't copy RTX_UNCHANGING_P
+ when doing function inlining.
+ * integrate.h (struct inline_remap): Add integrating field.
+ * unroll.c (unroll_loop): Clear map->integrating.
+ * stmt.c (expand_decl): Don't set RTX_UNCHANGING_P.
+
+Fri May 14 12:28:51 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (default_conversion):
+ Don't replace iterator with its initial value.
+
+ * config/i386/svr3gas.h: Added two pages at end, with macros
+ copied from config/svr3.h and i386/sysv3.h.
+
+ * config/m68k/tower-as.h (PRINT_OPERAND): Handle CODE == '/'.
+ * hp320.h, mot3300.h, news.h, crds.h: Likewise.
+
+Fri May 14 15:44:45 1993 Kresten Krab Thorup (krab@xiv.iesd.auc.dk)
+
+ * objc/init.c (__objc_init_protocols): Don't complain if a
+ protocol object is attempted resolved twice.
+
+Fri May 14 00:51:38 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (CPP_SPEC): Correct specs so that _PA_RISC1_1 is only
+ defined when generating code for 1.1 machines regardless of the
+ default target.
+
+Thu May 13 21:47:55 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.md (fix_truncdfsi2, fixuns_truncdfsi2, trunc_call): Fix
+ typo in mode of FIX and UNSIGNED_FIX rtl.
+
+ * reorg.c (reorg_redirect_jump): New function.
+ Call it in most places instead of redirect_jump.
+
+Thu May 13 17:01:05 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * caller-save.c (restore_referenced_regs): New variable saveregs
+ which is number of regs to save at a time, instead of numregs,
+ which is total number of registers to save.
+
+Thu May 13 08:28:22 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (OBJC, OBJECTIVE-C): Don't depend on objc-runtime.
+
+ * dbxout.c (dbxout_parms): Don't output a parm if it's a mem
+ that has a constant address.
+
+ * config/pa/x-pa (TAROUTOPTS): Overridden.
+ * config/m68k/x-hp320,x-hp320g (TAROUTOPTS): Overridden.
+
+ * Makefile.in (TAROUTOPTS): New variable.
+ (install-headers-tar): Use TAROUTOPTS.
+
+ * 3b1.h, 3b1g.h, altos3068.h, crds.h, hp2bsd.h, hp310.h:
+ * isi-nfp.h, pbb.h, plexus.h, sun2.h, sun3n.h, tower.h:
+ (LONG_DOUBLE_TYPE_SIZE): Redefine as 64.
+
+ * objc/runtime.h: Include gstdarg.h before stdio.h.
+
+ * Makefile.in (libobjc.a): Depend on EXTRA_PARTS.
+
+Wed May 13 18:33:26 1993 Torbjorn Granlund (tege@nada.kth.se)
+
+ * arm.h: Declare output_arithmetic_with_immediate_multiply.
+
+ * arm.md (combined mult/arithmetic recognizers): Switch on.
+ Add special pattern for reload.
+
+ * arm.md (restorehi): Use SImode for address.
+ (storehi): Use SImode for address and address computation.
+ (storeinthi): Likewise.
+
+Wed May 12 22:47:35 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/m68k/sun3.h, sun2os4.h (ASM_OUTPUT_FLOAT_OPERAND):
+ Output as hex, unless CODE is 'f'.
+ * altos3068.h, next.h (ASM_OUTPUT_FLOAT_OPERAND): Likewise.
+
+Wed May 12 14:18:36 1993 John Hassey (hassey@dg-rtp.dg.com)
+
+ * m88k.h (REG_OK_FOR_BASE_P REG_OK_FOR_INDEX_P): Don't
+ use extended registers for base or index.
+
+Wed May 12 14:48:00 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * unroll.c (copy_loop_body): Delete May 10 change.
+
+Tue May 11 20:20:41 1993 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * tree.c (real_value_from_int_cst): Use temporary variable `e' to
+ work around bugs in 386 PCC.
+
+Tue May 11 16:50:54 1993 Michael Meissner (meissner@osf.org)
+
+ * mips/iris3.h, mips/mips.h, mips/news4.h, mips/nws3250v4.h,
+ mips/ultrix.h (ASM_SPEC): Pass appropriate -g<n> switch to the
+ assembler for -gstabs<n>, -gstabs+<n>, -ggdb<n>, and -gcoff<n>
+ switches.
+
+ * local-alloc.c (block_alloc): Don't dereference a NULL pointer.
+
+Tue May 11 12:09:37 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * tree.c (build_array_type): Delete the code to set TYPE_MAIN_VARIANT.
+ * c-decl.c (complete_array_type): Likewise.
+
+Tue May 11 11:40:14 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.c (emit_move_sequence): Handle secondary reloads for loads of
+ FP registers from constant expressions.
+
+ * pa.h (CONSTANT_ADDRESS_P): Accept symbolic addresses during
+ and after reload.
+
+Tue May 11 07:26:06 1993 Richard Kenner (kenner@mole.gnu.ai.mit.edu)
+
+ * reorg.c (mostly_true_jump): Jump is forward if TARGET_LABEL is
+ zero; don't try to get INSN_CODE of zero.
+
+Tue May 11 00:44:09 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * tree.c (build_array_type):
+ Don't change TYPE_MAIN_VARIANT if incomplete (domain not known).
+
+ * real.c (enan): Add forward decl.
+
+Mon May 10 20:32:12 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * unroll.c (copy_loop_body): Copy REG_NOTES during main loop
+ instead of afterwards.
+
+Mon May 10 17:36:31 1993 Richard Kenner (kenner@vlxisi1.ultra.nyu.edu)
+
+ * alpha.c (output_epilog): Fix minor error in instructions used
+ to restore stack pointer.
+
+Mon May 10 15:59:41 1993 Michael Meissner (meissner@osf.org)
+
+ * mips-tfile.c (parse_def): Do not execute a division by 0 when
+ processing a doubly dimensioned array whose outer bound was 0 or
+ not specified.
+
+Mon May 10 12:14:07 1993 John Hassey (hassey@dg-rtp.dg.com)
+
+ * m88k.h (TRAMPOLINE_TEMPLATE): Fixed invalid bsr insn.
+
+Mon May 10 11:55:18 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * protoize.c: Don't include string.h.
+ (strcat, strcpy, strcmp, strncpy, strncmp): Decls deleted.
+ (dupnstr): Don't use return value of strncpy.
+ (dupstr): Function deleted; callers changed to use savestring.
+
+ * tree.c (change_main_variant): New function.
+ (build_array_type): Use that to set the TYPE_MAIN_VARIANT.
+ * c-decl.c (complete_array_type): Call change_main_variant.
+
+Mon May 10 11:53:02 1993 Steve Chamberlain (sac@wookumz.gnu.ai.mit.edu)
+
+ * sh.md (movstrsi): Take alignment into account.
+ * sh.c (shift_value_ok): Can't shift by negative values.
+
+Mon May 10 11:49:48 1993 Michael Meissner (meissner@osf.org)
+
+ * va-mips.h (va_arg): Use __alignof__ instead of __alignof.
+
+ * cp-decl.c (finish function): Add missing ';'.
+
+Mon May 10 00:54:16 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc/runtime.h: Include gstdarg.h, not stdarg.h.
+
+ * libgcc2.c (__floatdisf): Use DFtype for intermediate values.
+
+ * tree.c (real_value_from_int_cst):
+ If I is unsigned, use REAL_VALUE_FROM_UNSIGNED_INT.
+
+ * config/m68k/m68k.c (output_move_double): Use operand 0 to get SIZE.
+
+ * reload.c (find_equiv_reg): Set goal_mem_addr_varies
+ for all but true constant addresses.
+
+Sun May 9 17:53:52 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/sparc/sparc.h (SIZE_TYPE): Deleted.
+
+ * fixincludes: When finding SIZE_TYPE, cd to ${LIB} to run cc.
+ (memory.h): Don't try to read it if it doesn't exist.
+
+ * real.c (NAN): Define for support of Not-a-Number bit patterns.
+ (make_nan): New function outputs a NaN in requested machine mode.
+ (eisnan, eiisnan, enan, einan, eiisinf, eiinfin): New functions.
+ (earith, etrunci, etruncui, ereal_negate, ereal_ldexp,
+ real_value_truncate, esub, eadd, emul, ediv, eremain):
+ Return NaN arg back to caller.
+ (eroundi, eroundui, ereal_to_int): NaN to integer returns -1
+ and a warning.
+ (target_isnan): Check for NaN.
+ (eneg): No-op if NaN.
+ (eisneg, eisinf): False if NaN.
+ (emovi, emovo): Handle NaN conversions.
+ (esub, eadd): Infinity minus infinity = NaN and INVALID warning.
+ (ediv): 0/0, inf/inf = NaN and INVALID warning.
+ (emul): 0 * inf = NaN and INVALID warning.
+ (e24toe, e53toe, e64toe): Generate e-type NaN for NaN input.
+ (etoe24, etoe53, etoe64): Output NaN in appropriate machine mode.
+ (ecmp): Unordered compare returns -2.
+ (etoasc): NaN produces ASCII string "NaN".
+ (asctoe): Unrecognizable input produces e-type NaN.
+ (eremain): x REM y = NaN if y = 0 or x = infinity.
+
+ * real.c (mtherr): Don't put newlines in error message string.
+
+ * real.h (REAL_VALUES_LESS): True if return value of ereal_cmp is -1.
+
+Sun May 9 17:34:06 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (finish_function): Don't do anything if we haven't got a
+ current_function_decl.
+
+ * cp-pt.c (tsubst): Don't assert if IN_DECL is null.
+ (coerce_template_parms): Likewise.
+
+ * cp-type2.c (process_init_constructor): Fix argument passing to
+ initializer_constant_valid_p.
+
+Sun May 9 10:47:05 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (complete_array_type):
+ Make maxindex -1 for empty constructor.
+
+ * i860.c (call_insn_operand): New funcion.
+ * i860.md (call, call_value): Copy fn address to safe reg if necessary.
+ (call, call_value matchers): Use call_insn_operand as predicate.
+
+ * config/mips/mips.c (call_insn_operand): New function.
+ * config/mips/mips.md (call_internal1, call_value_internal1):
+ Use call_insn_operand as predicate.
+ (call, call_value): Copy fn address to safe reg if necessary.
+
+ * config/m68k/m68k.md (mulhisi3, umulhisi3 matchers):
+ Restrict range of constants allowed.
+
+Sun May 9 13:31:35 1993 CET Kresten Krab Thorup (krab@iesd.auc.dk)
+
+ * objc/hash.h, objc/objc.h, objc/sarray.h (gstddef.h):
+ Conditionally include gstddef.h or stddef.h by IN_GCC.
+
+Sun May 9 00:51:33 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload.h: Fix unterminated comment.
+
+ * objc-act.c (string_section): Delete comma before close-brace.
+
+Sat May 8 23:49:50 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/i386/i386.c (call_insn_operand): New function.
+ * i386.md (call matchers): Use call_insn_operand.
+ (call expanders): If address uses a virtual reg or arg pointer reg,
+ copy it.
+
+Sat May 8 23:19:11 1993 Kaveh R. Ghazi (ghazi@caip.rutgers.edu)
+
+ * configure (m88k-tektronix-sysv3): New target.
+ * config/m88k/tekXD88.h: New file.
+ * config/m88k/tekXD88.ld: New file.
+ * config/m88k/x-tekXD88: New file.
+
+Sat May 8 10:40:54 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/i386/i386.md (call insn matchers):
+ Use %a to print a mem's non-constant address;
+ don't try to print the address by itself.
+
+ * config/i386/next.h (ASM_GENERATE_INTERNAL_LABEL)
+ (ASM_OUTPUT_INTERNAL_LABEL): Don't include a `.' in the label name.
+ (LPREFIX): Likewise.
+
+ * m68k.c (print_operand): For CONST_DOUBLE, treat VOIDmode like DImode.
+
+ * expmed.c (init_expmed): Supply missing arg to rtx_cost.
+
+ * config/convex/convex.h (LINK_LIBGCC_SPECIAL_1):
+ Define this instead of LINK_LIBGCC_SPECIAL.
+
+Sat May 8 14:43:27 1993 Torbjorn Granlund (tege@nada.kth.se)
+
+ * m68k.md (umulsidi3 expand + two matchers): Rewrite.
+ Old patterns misused subreg and matched wrong immediate values.
+ Use const_int_operand and constraint `n' for the immediate arg.
+ (mulsidi3 patterns): Likewise.
+
+Sat May 8 07:06:14 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * i386/sco.h (VALUE_REGNO, HARD_REGNO_MODE_OK): Add missing #undef.
+ * i386/sco.h, i386/sequent.h (HARD_REGNO_MODE_OK): Properly check
+ for floating-point registers. Register 16 is AP and not floating.
+
+Fri May 7 19:43:49 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-typeck.c (default_conversion): Disable change of Apr 13th for
+ now, since it seems to behave incorrectly in some cases.
+
+Fri May 7 17:38:22 1993 Michael Meissner (meissner@osf.org)
+
+ * configure (all MIPS options): If --with-gnu-as is used, don't
+ build mips-tfile or mips-tdump. If --with-gnu-ld is used, don't
+ say we need collect2.
+ (config.sub run): Explicitly invoke /bin/sh to run script, in case
+ config.sub had it's execute bits turned off.
+
+ * mips/t-mips-gas: New target file, used when the GNU assembler is
+ used instead of the MIPS assembler.
+
+Fri May 7 17:41:00 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (float.h-nat): Use tmp-float.h as intermediate file.
+
+Fri May 7 13:42:06 1993 Mike Stump (mrs@poseidon.cygnus.com)
+
+ * cp-search.c (mi_ventry): Change into a struct to make code more
+ readable and to shut up compilers about valid ANSI C code.
+
+Fri May 7 13:15:40 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (reg_class): Add new NON_SHIFT_REGS class.
+ (REG_CLASS_NAMES): Name new class "NON_SHIFT_REGS".
+ (REG_CLASS_CONTENTS): Initialize NON_SHIFT_REGS.
+
+ * loop.c (strength_reduce): Handle case where loop_end is the
+ end of the current function.
+
+Fri May 7 05:50:39 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload.c (push_reload): Don't use IN as the reload reg in in-out
+ reload if it is set elsewhere in the insn.
+
+Fri May 7 04:48:25 1993 Chris Smith (csmith@convex.com)
+
+ * x-convex (CCLIBFLAGS): Build libgcc1 with -tm c1 so it can't
+ cause executables to become c2-only.
+
+ * xm-convex.h: Remove workarounds for OS 8.0 no longer needed.
+ (bcopy, bzero): Define to use memcpy and memset, to get them inlined.
+
+ * convex[123*].h (CC1_SPEC, CPP_SPEC, LIB_SPEC): Move to convex.h.
+
+ * convex.h (TARGET_FLAGS): Add -mvolatile-[no]cache.
+ (TARGET_FLAGS, LONG_TYPE_SIZE): add -mlong{32,64}.
+ (target_cpu): Define, enumeration for targets to use instead of flags.
+ (TARGET_C34, TARGET_C38): Add. These don't schedule the same as C2.
+ (OVERRIDE_OPTIONS): Call init routine in convex.c.
+ (CPP_SPEC, ASM_SPEC, LINK_SPEC): If originally bootstrapped with
+ an ieee compiler, produce an ieee gcc.
+ (LINK_LIBGCC_SPECIAL): Define, to avoid searching old libgcc.a
+ versions during bootstrap.
+ (STACK_BOUNDARY): Change from 32 to 64 -- odd-word aligned
+ longwords are slow on c34.
+ (FUNCTION_PROLOGUE): Make frame size a multiple of 8, not 4.
+ (FUNCTION_EPILOGUE): Output a 0 to terminate c34 icache prefetch.
+ (INITIAL_FRAME_POINTER_OFFSET): Make a multiple of 8.
+ (REG_ALLOC_ORDER): Define. Put S0 (the return register) last.
+ (HARD_REGNO_MODE_OK): Rewrite to make clearer.
+ (MODES_TIEABLE_P): Rewrite to make clearer.
+ (PREFERRED_RELOAD_CLASS): Rewrite to make clearer.
+ (S0_REGNUM, A0_REGNUM): Define.
+ (*_REGNUM): Write in terms of [AS]0_REGNUM instead of absolute numbers.
+ (enum reg_class, etc): Add SI_REGS == S_REGS + INDEX_REGS.
+ (REGNO_REG_CLASS, REG_CLASS_FROM_LETTER, REGNO_OK_FOR_*_P): Use tables.
+ (CONST_OK_FOR_LETTER_P): Change. New def passes any const_int,
+ rejects any const_double.
+ (CONST_DOUBLE_OK_FOR_LETTER_P): Change. New defs are 'G' == low
+ word all zeros, 'H' == high word all signs.
+ (EXTRA_CONSTRAINT): New. 'Q' == volatile memref. Used to generate
+ cache-bypass instructions when -mvolatile-nocache is set.
+ (RETURN_POPS_ARGS): Change, always true.
+ (FUNCTION_ARG_ADVANCE): Count args, not # words of args.
+ (FUNCTION_ARG): Return arg count to the final VOIDmode FUNCTION_ARG
+ hack that supplies "next arg register" to be stored in call insn.
+ (TRAMPOLINE_TEMPLATE): Use instruction notation rather than constants.
+ (INITIALIZE_TRAMPOLINE): Use gen_call_pop.
+ (LEGITIMATE_CONSTANT_P): Rewrite to make clearer.
+ (GO_IF_LEGITIMATE_ADDRESS): Do not use indirect addressing -- with
+ insn scheduling, two loads can be faster and can't be slower.
+ (SLOW_BYTE_ACCESS): Define unless C2. Memory access to bytes is
+ not actually slow, but faster processors don't forward partial
+ word writes to word reads, and setting SLOW_BYTE_ACCESS
+ makes the code consistently use word ops where possible.
+ (CONST_COSTS): Const_DOUBLE cost is zero -- if it appears, it is
+ immediate and therefore free.
+ (RTX_COSTS): areg+const is free (via indexing).
+ (RTX_COSTS): Provide target-dependent values for *,<<,>>
+ (ADDRESS_COST): Zero. Indirect addresses are no longer used.
+ (ADJUST_COST): Define.
+ (TARGET_FLOAT_FORMAT): Define as VAX_FLOAT_FORMAT. Also
+ accurately describes the semantics (not the bit pattern)
+ of convex ieee mode.
+ (REAL_VALUE_ATOF): Define, to prevent real.c from constructing
+ vax dfloats. Apparently it doesn't do gfloat.
+ (CHECK_FLOAT_VALUE): Call convex.c.
+ (ASM_FILE_START): Output appropriate .fpmode pseudo op.
+ (ASM_IDENTIFY_GCC): Ouput a zero after gcc2_compiled to keep it
+ from hiding the real name from profilers and adb.
+ (ASM_OUTPUT_DOUBLE, _FLOAT): Use hex to avoid /bin/as conversion
+ errors.
+ (ASM_DECLARE_FUNCTION_NAME): Define; call convex.c.
+ (PRINT_OPERAND, _ADDRESS): Call convex.c.
+ (EXIT_BODY): Define for libgcc2. Call atexit handler if present.
+
+ convex.md: Add scheduling info.
+ (movxx): One of the operands must be a register.
+ (movdf, movdi): Add anonymous patterns that can load an arbitrary
+ const_double by doing two immediate loads. This is not superior
+ to loading it from memory, and can be worse, so LEGITIMATE_CONSTANT_P
+ still rejects these constants, but the patterns are still useful
+ so rtx folding can produce arbitrary results.
+ (floatunsdidf, floatunsdisf): Add patterns that avoid double rounding.
+ (floatunssidf, floatunssisf): Add patterns that mimic gcc's default
+ method, to keep SI cvts from promoting to the above DI cvts.
+ (fix_truncdfsi2): Use cvtd.l even if cvtd.w is available -- on c34
+ cvtd.w is microcoded and slower.
+ (addqi3, subqi3, mulqi3): can do immediate with word insn.
+ (subsi3): use sub/neg to get reverse subtract (reduces reg shuffling).
+ (udivsi3): give up on having sign_expand_binop do this; people keep
+ breaking it. Manually extend unsigned SI to signed DI, then divide.
+ (xshfxx3): The options rank differently on different machines, so
+ spell them all out and enable the appropriate ones under TARGET_Cxx.
+ (sqrtxx2): Put under flag_fast_math.
+ (sinxx2, cosxx2): I don't know why these exist, but they do, so supply
+ them. The other microcoded intrinsics are in convex math.h.
+ (txtxx): Remove, no longer necessary.
+ (cmpdi): Add alternative to fake "eq.l #0,sk" with "neg.l sk,scratch".
+ (cmpqi): Omit, seems to produce marginally better cse than the old way.
+ (cmpsf): Avoid compare against 0.0 in ieee mode, since -0.0 is
+ possible and would confuse old ucode.
+ (movstrsi): Add.
+ (anon): Add patterns to pick up on dbra optimizations and implement the
+ sub/test part. (This optimizes out the compare against 0.)
+ (call, call_value): Use _pop form instead, and let convex.c replace
+ the pushes with fp stores.
+ (end): Put local variable list back.
+
+ convex.c (init_convex): New. Fill in tables used by convex.h.
+ (psw_disable_float): New. Turn off float exception enables to
+ make the environment more ieee-like.
+ (set_cmp): Change name to output_cmp.
+ (gen_cmp): Change name to output_condjmp. Add handling for
+ `neg.x' as a fake `eq.x #0' and for optimized-out compares
+ that read the carry of a preceding decrement.
+ (simplify_for_convex): New. Replace addr-(-const) with
+ addr+const so /bin/as will like the notation.
+ (expand_movstr): New. Generate pipelined load/store sequence.
+ (asm_declare_function_name): New. Output arg count for debuggers.
+ (print_operand): Moved from convex.h. Add %u and %v to fetch
+ subwords of a CONST_DOUBLE, %z to use in replacing shift by mul.
+ (print_operand_address): Moved from convex.h.
+ (outfloat): New, call REAL_VALUE_TO_DECIMAL.
+ (replace_arg_pushes): New. Replace sp by fp if possible; this does
+ not allow us to get rid of sp but stores are faster than pushes on
+ new machines.
+ (emit_ap_optimizations): New. Do simple live analysis of arg pointer
+ register and eliminate dead reloads.
+
+ math-convex.h: removed.
+ fixinc.convex: new file.
+
+Thu May 6 22:54:43 1993 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * config/we32k/we32k.h (ASM_OUTPUT_ASCII):
+ Cast PTR to unsigned char *.
+ * config/clipper/clix.h (ASM_OUTPUT_ASCII): Likewise.
+
+Thu May 6 20:20:41 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (build_enumerator): Strip any no-op casts off the
+ value before we try to do anything with it.
+
+ * cp-call.c (convert_harshness): Take volatility, in addition to
+ constness, into account when figuring out the penalty for the
+ type under question.
+
+ * cp-decl.c (grokdeclarator): Undo unneeded change of Apr 6 when we
+ returned the type of the local typedef, instead of the typedef itself.
+
+Thu May 6 19:21:34 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * reload1.c (eliminate_regs, case {PRE,POST}_{INC,DEC}): Account
+ for PUSH_ROUNDING.
+
+Thu May 6 18:17:19 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/i386/sequent.h (DBX_OUTPUT_LBRAC, DBX_OUTPUT_RBRAC):
+ Override the usual definitions.
+
+ * objc/hash.h, objc/objc.h, objc/runtime.h, objc/sarray.h:
+ Use gstddef.h, with doublequotes.
+
+Thu May 6 15:58:18 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: More fixes for IRIX 4.0.1. Rather than replacing
+ [^A-Z]CTRL, replace [^A-Z_]CTRL and [^A-Z]_CTRL. Also patch
+ "//" in elf_abi.h which the sed script breaks.
+
+Thu May 6 13:58:39 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * clix.h: Include "clipper/clipper.h" instead of "clipper.h".
+ * config.sub (os): Add -clix*.
+ * configure (clipper-intergraph-clix): Add clipper/ filename prefixes.
+
+ * c-typeck.c (pointer_diff): Error if op1 is pointer to incomplete
+ type.
+
+ * fixinc.svr4 (sys/varargs.h): Replace.
+
+Thu May 6 11:58:28 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload1.c (forget_old_reloads_1): Accept and ignore 2nd arg.
+ (reload_as_needed): Pass that second arg.
+
+ * c-parse.in: For Objc, expect just 20 conflicts.
+
+ * objc-act.c (OBJC_GEN_METHOD_LABEL): Do use CAT_NAME.
+
+ * config/i386/i386.md (extendsidi2): Use cdq or cltd, not cwtl.
+
+ * configure (i[34]86-*-bsd): Don't use collect2.
+
+ * c-typeck.c (convert_for_assignment): Don't use convert_and_check
+ when handling arithmetic types here.
+
+ * c-common.c (truthvalue_conversion): Turn off Apr 29 change.
+
+Thu May 6 05:44:23 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload.c (find_equiv_reg): Don't look inside a CONST_DOUBLE;
+ use operand_subword instead.
+
+ * varasm.c (record_constant): Properly make the header of
+ a struct constant_descriptor.
+
+ * function.c (walk_fixup_memory_subreg): Add new arg UNCRITICAL.
+ (fixup_var_refs_insn): Call with UNCRITICAL of 1 when processing
+ REG_NOTES.
+
+ * integrate.c (expand_inline_function): Don't call convert_to_mode
+ unless we need to; some converstions of VOIDmode objects can
+ mess them up.
+
+ * expmed.c (store_split_bit_field): Properly handle VALUE when
+ it is a CONST_DOUBLE.
+
+ * fold-const.c (decode_field_reference): Don't do anything for
+ non-integral fields.
+
+ * cse.c (simplify_binary_operation, simplify_relational_operation):
+ Check for MODE_CC modes, not just CCmode.
+
+Thu May 6 00:54:40 1993 Kresten Krab Thorup (krab@iesd.auc.dk)
+
+ * objc/class.c, objc/hash.c: Change calloc to __objc_xcalloc.
+ * objc/objects.c (class_create_instance): bzero new instances
+
+ * objc/sendmsg.c (__objc_send_initialize, class_add_method_list):
+ Allow multiple +initialize methods per class.
+
+Wed May 5 21:40:04 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/i386/sequent.h (LINK_LIBGCC_SPECIAL): #if 0.
+
+ * toplev.c (main): Improve error message in previous change.
+
+Wed May 5 19:36:15 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * combine.c (combinable_i3pat): Do not make REG_DEAD notes for
+ the stack pointer, frame pointer, or arg pointer.
+
+Wed May 5 17:57:30 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/i386/sequent.h (LINK_LIBGCC_SPECIAL): Defined.
+
+Wed May 5 00:01:57 PDT 1993 Ron Guilmette (segfault!rfg@netcom.com)
+
+ * expr.h: Fix comment typos. emit_block_move decl was hidden.
+
+ * toplev.c (main): If C++ for Dwarf requested, warn and turn it off.
+
+Wed May 5 21:48:24 1993 Kresten Krab Thorup (krab@iesd.auc.dk)
+
+ * objc-act.c (check_methods_accessible): Handle interface types.
+
+Wed May 5 14:37:42 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c: (optimize_bit_field_compare): Add missing arg
+ to const_binop.
+
+ * reg-stack.c (record_asm_reg_life): Don't abort for asm that
+ doesn't match its constraints.
+
+ * combine.c (num_sign_bit_copies, case SUBREG): Properly compute
+ the number of sign bit copies of SUBREGs of promoted objects.
+
+ * optabs.c (add_equal_note, expand_binop, expand_unop): Make
+ copy of operands for REG_EQUAL note to avoid sharing RTL if
+ called later than RTL generation.
+ (emit_libcall_block, expand_fix): Likewise.
+ * expr.c (convert_move): Likewise, though probably not
+ called after RTL generation.
+
+Wed May 5 14:11:12 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Only quote argument to _IO[A-Z]*, not first item in
+ parentheses. Added patches for IRIX 4.0.1 header files to undo
+ some inappropriate changes.
+
+Wed May 5 11:34:59 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * toplev.c (flag_defer_pop): Initialize to 0.
+ (main): Set it to 1 if optimizing.
+
+Wed May 5 06:38:47 1993 Tom Wood (wood@hal.gnu.ai.mit.edu)
+
+ * configure (i[34]86-next-*, m68k-next-*): collect2 isn't needed.
+
+Tue May 4 14:21:11 1993 Kresten Krab Thorup (krab@xiv.iesd.auc.dk)
+
+ * objc/objc.h, objc/runtime.h: Remove inclusion of memory.h
+ * objc/objc.h, objc/hash.h, objc/runtime.h: Remove inclusion of
+ gstddef.h
+
+ * objc/Makefile (OBJC_H): Add typedstream.h
+
+ * objc/Object.h: Add includes objc/objc.h and objc/typedstreams.h
+ objc/Object.h: Removed `minimal' definitions. Includes objc.h
+ instead.
+ * objc/archive.c: Add include "typedstream.h"
+
+ * objc/typedstream.h: New file. Contents moved from
+ objc/objc-api.h.
+
+ * objc/objc.h (IvarList, Ivar, SymTab, Module, Method,
+ Category, Super, objc_method_description, objc_protocol_list):
+ Data definitions moved to objc/objc-api.h
+
+ * objc/archive.c: Change malloc into __objc_xmalloc
+
+ * objc/objc.h, objc/sendmsg.c: Remove any code for hash lookup
+ * objc/cache.h: File removed
+
+ * objc/objc-api.h (class_create_instance, object_copy,
+ object_dispose): Definitions moved to objc/objects.c
+
+ * objc/objc.h: Remove declarations for library functions.
+ * objc/Object.m (-conformsTo:): Bugfix: Also ask superclasses.
+
+Tue May 4 23:46:37 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (start_decl): Give an error, not a sorry, when they try
+ to declare a template on a VAR_DECL or a TYPE_DECL.
+
+ * cp-type2.c (process_init_constructor): If we have a VAR_DECL
+ that's static in the class, don't try to use it when we're working
+ on an initializer-list; it has no business being there.
+
+ * cp-cvt.c (convert_pointer_to): Only call get_base_distance et al.
+ on RECORD_TYPEs, not on UNION_TYPEs.
+
+ * cp-decl.c (grokdeclarator): Don't try to divine the name of the
+ incomplete type for a field decl.
+
+Tue May 4 19:55:29 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * combine.c (distribute_notes, REG_DEAD case): Handle hard
+ registers which partially overlap the destination of the insn.
+
+Tue May 4 17:59:10 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.md (casesi0): Remove incorrect fix from April 23.
+ * pa.h (CASE_DROPS_THROUGH): Define.
+
+Tue May 4 13:22:21 1993 John Hassey (hassey@dg-rtp.dg.com)
+
+ * t-dgux: Fixed name of link script.
+
+Tue May 4 11:15:40 1993 Steve Chamberlain (sac@wookumz.gnu.ai.mit.edu)
+
+ * sh.md (arith patterns): Rework constraints.
+ * sh.h (ASM_OUTPUT_CASE_LABEL): Ensure jump table is aligned.
+ * sh.c (arith_reg_operand): New constraint. (dump_constants):
+ Force out a constant table if necessary.
+
+Mon May 3 20:41:00 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * tree.c (build_array_type): The main variant of an array type
+ should always be an array whose element type is the main variant.
+
+Mon May 3 19:27:04 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * lite.h (CPP_PREDEFINES): Delete -Dsun and -Dunix.
+
+ * combine.c (make_extraction): Move BYTES_BIG_ENDIAN !=
+ BITS_BIG_ENDIAN offset correction after the offset calculation.
+ * elxsi.h, mips.h (BITS_BIG_ENDIAN): Define to zero.
+
+ * c-decl.c (grokdeclarator, ARRAY_REF case): Build array type, and
+ then build the variant array type.
+
+ * sparc.md (floatsitf2): Output fitoq not fitox.
+
+ * i960.md (scc pattterns): Add missing mode to conditional operators.
+ * i960.c (output_function_profiler): Add missing newlines in strings.
+
+ * c-common.c (truthvalue_conversion): Don't optimize subtract of
+ reals when target uses IEEE arithmetic.
+
+ * c-parse.in: Delete cond.awk reference.
+ * cond.awk: Delete file.
+
+Mon May 3 16:58:55 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (digest_init): Check size properly for wide-string.
+
+ * Makefile.in (TEXI2DVI): New variable.
+ (cpp.dvi, gcc.dvi): Use it.
+
+Mon May 3 16:29:38 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-search.c (lookup_nested_field): Pass complain down as the value
+ for lookup_field's `protect' argument. This will help avoid
+ incorrect visibility errors when we're parsing things.
+
+Mon May 3 21:02:22 1993 H.J. Lu (hlu@yardbird.eecs.wsu.edu)
+
+ * config/i386/linux.h (FUNCTION_PROFILER, ASM_OUTPUT_ADDR_DIFF_ELT):
+ Remove PIC stuff. We wait for the ELF support in gas and binutils.
+ (LINK_SPEC): Defined for -v.
+
+Mon May 3 06:41:56 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc/Makefile (copy-headers): Put `-' on mkdir command.
+
+Sun May 2 09:28:43 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (macroexpand): Treat `foo ( )' as 0 args if foo wants 0 args.
+
+Sun May 2 07:37:45 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (eliminate_regs, case SUBREG): Leave the SUBREG when
+ the inner object is a pseudo on machines that extend byte
+ loads (to be consistent with reload.c).
+ * reload.c (push_reload): Allow non-paradoxical SUBREGs of MEM
+ on machines that extend byte loads.
+
+Sun May 2 08:57:33 1993 Michael Meissner (meissner@osf.org)
+
+ * real.c (EDOM, ERANGE): Do not define since errno.h was
+ previously included.
+
+Sun May 2 08:28:15 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cse.c (record_jump_cond): Use mode of op0 or op1, not MODE,
+ when testing for narrowing or widening subregs.
+
+Sat May 1 10:10:44 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/nextstep.h (WORD_SWITCH_TAKES_ARG): Fix typo.
+
+ * cse.c (simplify_binary_operation): Reject CCmode in A & (~A) -> 0.
+
+ * cccp.c (macroexpand): If just whitespace between parens,
+ treat it as one argument.
+
+Sat May 1 11:02:22 1993 H.J. Lu (hlu@yardbird.eecs.wsu.edu)
+
+ * Makefile.in (libobjc.a): Depend on $(USE_COLLECT2)
+
+ * objc/Makefile (xforward): Add `else true;' for Ultrix 4.2 make.
+
+Sat May 1 06:49:51 1993 Tom Wood (wood@next.com)
+
+ * objc-act.c (build_ivar_reference): Warn when a class method
+ refers to an instance variable.
+
+Fri Apr 30 22:37:56 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-lex.c (yylex): Avoid invalid shift for erroneous empty char const.
+
+ * combine.c (subst, case COMPARE): Use SELECT_CC_MODE even if HAVE_CC0.
+
+Fri Apr 30 12:40:23 1993 John Hassey (hassey@dg-rtp.dg.com)
+
+ * configure, install.texi: Updated -local configuration option.
+
+Fri Apr 30 15:20:10 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.h (LONG_DOUBLE_TYPE_SIZE): Ifdef out.
+
+Fri Apr 30 14:53:43 1993 Doug Evans (dje@wookumz.gnu.ai.mit.edu)
+
+ * config.sub: Fix syntax error.
+
+Fri Apr 30 12:00:24 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Fix #endif comments for Ultrix 4.2.
+
+Fri Apr 30 10:45:53 1993 Steve Chamberlain (sac@wookumz.gnu.ai.mit.edu)
+
+ * sh.c, sh.h, sh.md, t-sh, xm-sh.h: New files for Hitachi SH.
+ * configure (sh-hitachi-hms): New configuration.
+ * config.sub: Accept sh, hms.
+
+Thu Apr 29 22:20:20 1993 Jeff Law (law@kahlua.cs.utah.edu)
+
+ * cse.c (cse_insn): Reset the INSN_CODE for conditional
+ or computed jumps which have been converted into simplejumps.
+
+Thu Apr 29 14:30:25 PDT 1993 Ron Guilmette (rfg@netcom.com)
+
+ * c-common.c (truthvalue_conversion): Specific error message when the
+ "truthvalue" of a struct, union, or array type operand is needed.
+
+Thu Apr 29 21:42:26 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ Thu Apr 29 12:27:59 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (grokdeclarator): When complaining about a field having
+ an incomplete type, tell them what type it was, and what template
+ instantiation was involved, if we can.
+
+ Wed Apr 28 11:50:28 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (grokfndecl): New argument `publicp', to say if we
+ should set TREE_PUBLIC on the node for the caller.
+ (grokfndecl): Pass the new arg down appropriately.
+
+ * cp-pt.c (instantiate_template): If it's a static member fn, revert
+ it into a FUNCTION_TYPE and chop off the this pointer.
+ * cp-decl.c (revert_static_member_fn): Make non-static.
+ * cp-tree.h (revert_static_member_fn): Add prototype.
+
+ * cp-lex.c (reinit_parse_for_block): Bump the size of BUF for the
+ pre-parsed line directive to 16, so we can hold the max # of digits
+ in a signed int (10).
+
+Thu Apr 29 19:26:21 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/mips/mips.h (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR):
+ Definitions put into #if 0.
+
+ * c-typeck.c (build_conditional_expr): Do default_conversion
+ before testing for ERROR_MARK.
+
+ * cse.c (simplify_binary_operation): Don't return const0_rtx
+ or constm1_rtx for IOR, AND, XOR in CCmode.
+ (simplify_relational_operation): Don't do anything if op0 has CCmode.
+
+ * Makefile.in (install-normal): Move install-libgcc
+ after $(INSTALL_HEADERS).
+
+Thu Apr 29 17:09:59 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * gcc.c (is_directory): Renamed from is_linker_dir and added
+ linker argument. If not checking linker directory, check whether
+ directory exists only if SMALL_ARG_MAX not defined.
+ (putenv_from_prefixes): Don't add directories for which
+ is_directory returns 0.
+ * config/i386/xm-sco.h (SMALL_ARG_MAX): Define.
+
+Thu Apr 29 15:30:09 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.md (shadd for reload): Fix constraint to match the output
+ pattern.
+
+Thu Apr 29 15:05:05 1993 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * we32k.md (float_extend:DF recognizer): Add missing arg to
+ output_asm_insn.
+ (float_truncate:SF recognizer): Likewise.
+
+Thu Apr 29 10:18:36 1993 Kresten Krab Thorup (krab@wombat.gnu.ai.mit.edu)
+
+ * objc/xforward.c: File renamed from objc/_forward.c.
+ * objc/Makefile: Updated accordingly.
+
+Thu Apr 29 12:10:49 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * real.c: Deleted casts to void.
+
+ * real.c (emdnorm, eifrac, euifrac, mtherr): Replace
+ unconditional `pedwarn' by `warning' conditional on `extra_warnings'.
+ (toe24, todec): Use ERANGE to flag overflow on (non-IEEE)
+ machines that do not have infinity.
+ (etoasc): Check explicitly for overflow of leading decimal digit.
+ (asctoeg): Test for, and immediately reject, out-of-bounds
+ decimal exponent inputs.
+ (at top level): Include errno.h; reference errno,
+ warning, extra_warnings.
+
+ * Makefile.in (tooldir): Use exec_prefix, not prefix.
+ (gcc.o): Likewise for TOOLDIR_BASE_PREFIX.
+
+ * config/convex/convex.c (output_call):
+ Add missing arg to output_asm_insn.
+
+ * gcc.c (default_compilers): Inhibit -D__OPTIMIZE__ if -O0.
+
+ * config/m68k/m68k.md (movxf): Add pattern for soft-float moves.
+
+ * config/m68k/m68k.c (output_move_double): Support XFmode moves.
+
+Thu Apr 29 00:09:34 1993 Kresten Krab Thorup (krab@wombat.gnu.ai.mit.edu)
+
+ * objc/init.c (__objc_exec_class): Added check for selectors = 0
+
+ Undid the following changes:
+
+ * objc/_forward.c: File removed
+ * objc/argframe.h, objc/af-sparc.h: New files
+ * objc/Makefile (ARGFRAME_H): New macro
+ * objc/Makefile (_forward, fflags): Targets removed
+ * objc/msgsend.c (objc_msg_sendv): Changed to use argframe macros
+ * objc/Object.[hm], objc/runtime.h, objc/objc-api.h,
+ objc/msgsend.c: Changed type name arglist_t to af_frame.
+
+Thu Apr 29 00:04:11 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (CONDITIONAL_REGISTER_USAGE): %r19 is fixed
+ if flag_pic is true.
+ * pa.c (emit_move_sequence): After legitimizing a PIC
+ address make sure to copy it from the temporary register
+ into the final destination.
+
+Wed Apr 28 18:15:57 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (HARD_REGNO_MODE_OK): Allow 1.0 FP registers to hold modes
+ which are smaller than 4 bytes.
+
+Wed Apr 28 16:40:38 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * Makefile.in (distdir): Copy subdirectories of config/ too, except RCS
+
+Wed Apr 28 16:19:18 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * Makefile.in (extraclean): Delete *.z as well.
+
+Wed Apr 28 15:10:33 1993 Michael Meissner (meissner@osf.org)
+
+ * mips/mips.h (MIPS_VERSION): Set Meissner version # to 40.
+ (OPTIMIZATION_OPTIONS): Set -mgpopt if -O other than -O0.
+ (CC1_SPEC): Don't pass -mgpopt here.
+
+ * mips/osfrose.h (CC1_SPEC): Don't pass -mgpopt here.
+
+ * mips/osfrose.h, i386/osfrose.h (ASM_IDENTIFY_LANGUAGE): If the
+ language is C, do not put anything out, to not confuse kernel
+ debuggers and the like.
+
+Wed Apr 28 07:31:20 1993 Kresten Krab Thorup (krab@wombat.gnu.ai.mit.edu)
+
+ * objc/argframe.h (__AF_ARG_ADDR): Removed .curr_off from
+ definition. (__AF_ARG_ADVANCE): Removed __AF_CUM_OFF around CUM.
+
+ * objc/runtime.h (_objc_error): Declaration added.
+
+Wed Apr 28 06:17:02 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-lex.c, cp-lex.c (yylex): Don't use unsigned comparison
+ to also check for < 0; do it explicitly.
+ * combine.c (force_to_mode, simplify_comparison): Cast to
+ unsiged HOST_WIDE_INT instead of unsigned int.
+ * cse.c (simplify_binary_operation, case SMAX): Likewise.
+ * expr.c (emit_block_move): Likewise.
+
+ * convert.c (convert_to_integer): When we want to return zero,
+ be sure we honor any side-effects in our operand.
+
+Tue Apr 27 22:25:29 1993 Kresten Krab Thorup (krab@xiv.iesd.auc.dk)
+
+ * objc/_forward.c: File removed
+ * objc/argframe.h, objc/af-sparc.h: New files
+ * objc/Makefile (ARGFRAME_H): New macro
+ * objc/Makefile (_forward, fflags): Targets removed
+ * objc/msgsend.c (objc_msg_sendv): Changed to use argframe macros
+ * objc/Object.[hm], objc/runtime.h, objc/objc-api.h,
+ * objc/msgsend.c: Changed type name arglist_t to af_frame.
+
+Tue Apr 27 16:29:45 1993 Tom Wood (wood@next.com)
+
+ * nextstep.h (NeXT_OBJC, STANDARD_EXEC_PREFIX): Delete.
+ * i386/next.h: Use gas.h instead of bsd.h.
+ (ASM_GENERATE_INTERNAL_LABEL): Define.
+
+Tue Apr 27 12:20:08 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * reorg.c (dbr_schedule): Do not run the delay slot scheduling
+ pass if the current function has no insns other than the prologue
+ and epilogue.
+
+ * pa.c (hppa_expand_epilogue): Emit a "blockage" insn
+ to keep the stack and frame pointer adjustments at the
+ end of the epilogue.
+ * pa.md (blockage): New pattern.
+
+Tue Apr 27 10:59:33 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * gcc.c (DEFAULT_WORD_SWITCH_TAKES_ARG): New macro. Like old
+ WORD_SWITCH_TAKES_ARG, but added idirafter, iprefix, iwithprefix.
+ (WORD_SWITCH_TAKES_ARG): Use DEFAULT_WORD_SWITCH_TAKES_ARG.
+ * config/i386/osfrose.h, config/m68k/sun2.h, config/m68k/sun3.h,
+ config/mips/osfrose.h, config/sparc/sparc.h, config/svr4.h,
+ config/nextstep.h (WORD_SWITCH_TAKES_ARG): Rewrote to use
+ DEFAULT_WORD_SWITCH_TAKES_ARG.
+
+Tue Apr 27 07:38:47 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu
+
+ * Makefile.in (stmp-int-hdrs): No longer depends on gsyslimits.h.
+ Don't make include/syslimits.h here since we want to test the
+ limits.h made by fixincludes, not by the later part of this rule.
+ (stmp-fixinc): Depends on gsyslimits.h.
+ Make include/syslimits.h here.
+
+ * alpha.c (alpha_emit_set_const, output_{pro,epi}log): Generate
+ insns to load constants into a register using a method that works
+ on a 32-bit machine as well.
+
+Tue Apr 27 09:26:04 1993 CET Kresten Krab Thorup (krab@xiv.iesd.auc.dk)
+
+ * objc/Makefile (fflags): -x test changed to -s test
+
+ * objc/Makefile: CFLAGS changed to GCC_CFLAGS
+
+ * objc/Object.h: No longer includes objc.h Instead, a minimal set
+ of definitions is provided here.
+
+ * objc/Object.h, Object.m, cache.h, class.c, init.c, misc.c,
+ objc-api.h, objc.h, objects.c, sendmasg.c: Usage of Class_t and
+ MetaClass_t eliminated. Now using Class* and MetaClass* only.
+
+ * objc/objc.h: Does no longer include stdio.h and stdarg.h. Minimal
+ set of definition, which is provided by Object.h is placed in
+ preprocessor conditionals __object_INCLUDE_GNU. Definitions of
+ MetaClass_t and Class_t removed. Class and MetaClass are no
+ longer defines, but typedefs.
+
+Tue Apr 27 01:40:50 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ Mon Apr 26 20:45:07 1993 Mike Stump (mrs@poseidon.cygnus.com)
+
+ * cp-init.c (expand_recursive_init_1): Make sure we use the binfo's
+ version of a binfo, rather than someone elses, as the second
+ parameter to build_virtual_init must be the exact binfo we want so
+ that it may get the right vtable.
+
+ Mon Apr 26 12:58:23 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-type2.c (my_friendly_abort): Rephrase to try to help encourage
+ people to send bug reports in, and not just say, "Hey, the compiler
+ told me to report an internal error. Bye!".
+
+ * cp-decl.c (grokdeclarator): Forbid declaring an array of references.
+
+ * cp-parse.y (unary_expr): Forbid doing sizeof on a function.
+
+ * cp-typeck.c (build_unary_op): Pedwarn if they try to do pre/post
+ increment/decrement on an enum.
+
+ * cp-method.c (build_opfncall): Reorganize things to properly look
+ for a postfix operator ++/--, without taking the fastest way out of
+ the search, which could lose.
+
+ * cp-search.c (compute_visibility): Check for a member fn
+ manipulating its own members before checking the basetype_path.
+
+ * cp-pt.c (lookup_template_class): Instead of dying in the case
+ where D1 has a local value but no global or class value, return an
+ error_mark_node.
+
+ * cp-pt.c (lookup_template_class): Don't assert if IN_DECL is null,
+ since we pass it down that way from the parser.
+ (coerce_template_parms): Likewise.
+ * cp-parse.y (template_type): Let template_type_seen_before_scope be
+ an error_mark if necessary, so we can intelligently handle things
+ later rather than give useless syntax errors.
+
+ Sat Apr 24 17:12:17 1993 Mike Stump (mrs@poseidon.cygnus.com)
+
+ * cp-pt.c (tsubst): When we go back for a second pass, make sure we
+ start over with the list of methods. Fixes problem introduce on
+ Sat Mar 20 12:29:37 1993.
+
+Mon Apr 26 18:48:18 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (fold): Signedness matters for comparisons and
+ right shifts.
+
+ * xm-alpha.h (ONLY_INT_FIELD): Define again; this time say why.
+
+ * tree.h (INTEGRAL_TYPE_P, FLOAT_TYPE_P): New macros.
+ * fold-const.c: Use INTEGRAL_TYPE_P and FLOAT_TYPE_P.
+
+ * protoize.c (other_variable_style_function): Properly test for
+ the presence of the string "...".
+
+ * c-decl.c (pushdecl): Don't make a copy of type of error_mark_node.
+
+Mon Apr 26 18:15:03 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa-hpux.h (LINK_LIBGCC_SPECIAL): Delete.
+ (RELATIVE_PREFIX_NOT_LINKDIR): Delete.
+ * pa-ghpux.h, pa-hpux7.h, pa-gux7.h: Likewise.
+
+Mon Apr 26 16:57:03 1993 Michael Meissner (meissner@osf.org)
+
+ * mips-tdump.c (CODE_MASK): Define if running on an alpha instead
+ of a MIPS.
+ (MIPS_IS_STAB): Ditto.
+ (MIPS_MARK_STAB): Ditto.
+ (MIPS_UNMARK_STAB): Ditto.
+ (tfile): New global, holds result of -t option, to skip global
+ header.
+ (malloc, calloc, realloc, free): Don't declare on alpha.
+ (print_sym_hdr): Make sure all arguments are properly cast to int
+ or long, depending on whether the format is %ld or %d.
+ (read_tfile): Don't look at magic number, instead use -t option to
+ determine whether to skip the global header or not.
+ (main): Process -t option.
+
+Mon Apr 26 17:47:10 1993 Kresten Krab Thorup (krab@iesd.auc.dk)
+
+ * Objective C portability cleanup
+ * objc/Object.c (-hash, -error): Cast changed to size_t
+ * objc/archive.c, objc/misc.c, objc/sendmsg: Argument to strlen
+ casted to char* everywhere.
+ * objc/class.c (__objc_resolve_class_links): Unused variable
+ class1 removed.
+ * objc/class.c (class_pose_as): Unused variable node removed.
+ * objc/hash.c, objc/init.c: extra parenthesis around assignment
+ conditionals.
+ * objc/Makefile, objc/hash.h, objc/runtime, objc/sarray.h: IN_OBJC
+ changed to IN_GCC.
+ * objc/init.c: Unused local variable object_class removed. Cast of
+ pointer to int changed to size_t.
+ * objc/list.h (list_free): No longer declared inline.
+ * objc/objc-api.h, objc-runtime.h: Now includes memory.h.
+ * objc/objc.h: Added declarations for malloc and friends, IN_OBJC
+ changed to IN_GCC. Type of info member of objc_class changed to
+ unsigned long.
+ * objc/objects.c, objc/api.h, objc/sarray.h: Changed usage of
+ bcopy to memcpy.
+ * objc/sendmsg (__objc_print_dtable_stats): Returntype changed to
+ void.
+
+Mon Apr 26 07:55:03 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * sparc.h (ASM_OUTPUT_LONG_DOUBLE): New macro.
+ * sysv4.h (ASM_OUTPUT_LONG_DOUBLE): Likewise.
+
+Mon Apr 26 08:45:18 1993 Kresten Krab Thorup (krab at xiv.iesd.auc.dk)
+
+ * objc/hash.h, objc/init.c, objc/objc.h, objc/sarray.c,
+ objc/sarray.h, objc/selector.c, objc/sendmsg.c: Change unsigned
+ int to size_t when casting pointer type to integer.
+ * objc/sarray.h (struct soffset): Changed to add up to sizeof
+ (size_t) in stead of sizeof (unsigned int).
+ * objc/hash.h: Include stddef.h
+ * objc/_forward.h: int changed to size_t.
+
+ * objc/Object.m, objc/archive.c, objc-api.h: Take out archiving
+ support for alpha.
+
+ * objc/Makefile: (IN_OBJC): new #define used to control inclusion
+ of gstdarg or stdarg for the runtime. objc/objc.h,
+ objc/runtime.h, objc/sarray.h: Updated to use the above.
+
+Sun Apr 25 21:50:16 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-lex.c (yylex): Re-incorporate changes to redo converting
+ float values to desired type.
+
+Sun Apr 25 18:11:24 1993 Ron Guilmette (rfg@netcom.com)
+
+ * rtl.h (NOTE_INSN_FUNCTION_BEG): Make non-zero.
+ * rtl.c (note_insn_name): Re-order for above.
+
+ * dwarfout.c (output_decl): Check for DECL_INITIAL == NULL_TREE
+ rather than DECL_EXTERNAL != 0 when trying to see if we have a
+ mere function declaration rather than a function definition.
+ (dwarfout_file_scope_decl): Likewise. Also, don't bother checking
+ TREE_USED for file-scope functions, since it isn't 100% accurate
+ until the end of compilation anyway.
+
+Sun Apr 25 17:07:44 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.c (mem_aligned_8): Delete ifdefed out code. Add support
+ for TARGET_UNALIGNED_DOUBLES.
+ * sparc.h (TARGET_HOPE_ALIGN, TARGET_FORCE_ALIGN): Delete.
+ (TARGET_UNALIGNED_DOUBLES): Define.
+ (TARGET_SWITCHES): Delete hope-align, force-align. Add
+ unaligned-doubles and no-unaligned-doubles.
+ (ROUND_REG): Delete.
+ (FIRST_PARM_OFFSET, FUNCTION_ARG_ADVANCE, FUNCTION_ARG,
+ FUNCTION_INCOMING_ARG, FUNCTION_ARG_PARTIAL_NREGS,
+ FUNCTION_ARG_BOUNDARY): Delete force-align support.
+ (LONG_DOUBLE_TYPE_SIZE): Define to 128.
+
+ * sched.c (create_reg_dead_note): Rewrite so as to conserve
+ registers killed not number of REG_DEAD notes.
+ (schedule_block): Change comments about dead_notes variable.
+
+ * sparc.h (REG_ALLOC_ORDER, REG_LEAF_ALLOC_ORDER): Make %f0/%f1
+ the last float registers allocated.
+
+ * sparc.c (output_load_address, output_size_for_block_move,
+ output_block_move): Ifdef out.
+ * sparc.md (movstrsi): Comment out.
+
+ * sparc.c (output_function_epilogue): Emit 'nop' instead of
+ 'sub %sp,-0,%sp' when the frame is empty.
+ * sparc.md (movdf): Add a define split.
+
+ * expmed.c (extract_fixed_bit_field): Adjust BITPOS so that it
+ fits inside MODE before adjusting OFFSET to get an aligned address.
+
+Sun Apr 25 06:28:56 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * varasm.c (make_decl_rtl): If a variable has an asm operand that
+ refers to, e.g., fp, make a distinct RTL for it.
+
+ * c-decl.c (init_decl_processing): Last arg to __builtin_apply
+ is size_t, not int.
+
+ * c-lex.c (yylex): Don't warn about floating point out of
+ range if target floating-point format is IEEE.
+
+ * romp.h (SIZE_TYPE): Deleted.
+
+Sat Apr 24 16:46:41 1993 Stephen L. Moshier (moshier@world.std.com)
+
+ * c-lex.c (forget_protocol_qualifiers): Cast enums to ints before
+ comparing.
+
+Sat Apr 24 13:08:56 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (INITIALIZE_TRAMPOLINE): Pass a register operand, not
+ a memory operand to "cacheflush".
+ * pa.md (cacheflush): Rework pattern and output template to avoid
+ using REG+D addressing.
+
+Sat Apr 24 11:15:02 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * flow.c (mark_used_regs): Use proper type for {all,some}_needed.
+ * cse.c (invalidate): Likewise for in_table.
+
+ * tree.h (build_binary_op, build_indirect_ref, build_unary_op):
+ Delete declarations; these are part of the front ends.
+
+ * objc-act.c (HASHFUNCTION): Cast pointers to widest int type.
+
+Sat Apr 24 02:48:37 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ Cygnus<->FSF merge.
+
+ Fri Apr 23 11:08:25 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-call.c, cp-class.c, cp-decl.c, cp-except.c, cp-init.c,
+ cp-parse.y, cp-pt.c, cp-search.c, cp-type2.c, cp-typeck.c,
+ cp-xref.c: Fix many bugs in types of fn args & such.
+
+ * cp-decl.c (grokdeclarator): When dealing with a class-local
+ typedef, only call poplevel when the current_binding_level isn't
+ what we marked as being the local_binding_level.
+
+ * cp-decl.c (grokdeclarator): Call pushdecl_class_level, not
+ pushtag, to put a class-local typedef into its proper scope.
+ Also disable the warning about a typedef hiding the previous
+ one, since the cp-class.c change now diagnoses that problem.
+ * cp-class.c (delete_duplicate_fields_1): Also check for duplicated
+ type names.
+
+ * cp-lex.c (yyerror): Delete extern decl of input_redirected.
+
+ * cp-parse.y (primary): If the global value for a scoped identifier
+ ends up being an ADDR_EXPR, call assemble_extern on its argument,
+ not on the ADDR_EXPR itself. Fixes the IMPORT problem on the PA.
+
+ * cp-typeck.c (build_modify_expr_1): Put in missing `else'.
+
+ Wed Oct 7 16:00:29 1992 Chip Salzenberg (chip@tct.com)
+
+ Change propagated from the C front-end.
+ * cp-decl.c (shadow_tag): Use pedwarn for useless keyword.
+
+ Wed Oct 7 17:51:36 PDT 1992 Ron Guilmette (rfg at netcom.com)
+
+ * cp-type2.c (digest_init): Handle union initializers which are
+ "raw" constructors.
+ (process_init_constructor): Renamed `erred' to `erroneous' (as in
+ the C front end).
+ (process_init_constructor): Added code to handle union initializers.
+
+ Fri Oct 23 16:29:45 1992 Chip Salzenberg (chip@tct.com)
+
+ Change propagated from the C front-end.
+ * c-typeck.c (process_init_constructor): When initializing a union,
+ handle the case of an empty init list.
+
+ Tue Dec 1 21:35:36 1992 Niklas Hallqvist (niklas at della.appli.se)
+
+ * cp-call.c (convert_harshness): Add support for ellipsis matching
+ when dealing with function pointers (or references) in argument
+ lists.
+ (rank_for_overload): Ditto.
+ (compute_conversion_costs): Ditto.
+ (*_HARSHNESS): Ditto
+ * cp-class.h (struct candidate): Ditto.
+
+ Mon Jan 4 11:46:19 1993 Chip Salzenberg (chip@tct.com)
+
+ Changes propagated from the C front-end.
+ * cp-typeck.c (c_sizeof, c_sizeof_nowarn, c_size_in_bytes):
+ Call force_fit_type with end result.
+
+ Sat Jan 30 01:23:22 1993 Niklas Hallqvist (niklas at della.appli.se)
+
+ * cp-class.c (finish_struct): See to that static members whose
+ type is the class they're declared in gets a correct mode. This
+ is a completion of the Jan 23rd change.
+
+ Mon Feb 1 09:40:11 1993 Niklas Hallqvist (niklas at della.appli.se)
+
+ * cp-search.c (compute_visibility): Add support for anonymous
+ unions nested in classes.
+
+ Tue Feb 2 16:06:10 1993 Chip Salzenberg (chip@tct.com)
+
+ Eliminate signed integer overflow in specbits:
+ * cp-lex.h (RID_BIT_TYPE): New typedef for RID_... bits.
+ (RIDBIT): New convenience macro for RID_... bits.
+ * cp-decl.c (grokvardecl, grokdeclarator): Declare specbits
+ to be RID_BIT_TYPE. Use RIDBIT instead of "1<<RID_...".
+
+ Mon Feb 15 10:45:12 1993 Niklas Hallqvist (niklas@della.appli.se)
+
+ * cp-method.c (build_typename_overload): Identifiers built by this
+ function needs the IDENTIFIER_OPNAME_P slot set.
+
+ Wed Apr 21 11:25:15 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (lookup_nested_type): When dealing with types that are
+ local to a nested class's member fn, make sure to hand back a TYPE_DECL
+ instead of a RECORD_TYPE.
+
+ Tue Apr 20 20:17:42 1993 Mike Stump (mrs@poseidon.cygnus.com)
+
+ * cp-spew.c (yylex): Add `typespec (ID::*ID)[' and `typespec
+ (ID::*ID)(' to list of things that parse as declarators.
+
+ Mon Apr 19 15:05:21 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-search.c (report_ambiguous_mi_virtuals): If is never an error
+ to have same named class members at declaration time, ambiguities
+ are now caught at use sights.
+
+ Fri Apr 16 13:59:28 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-method.c (build_opfncall): If they didn't declare a postfix
+ operator ++ or --, then fall back and use the prefix one.
+ * cp-decl.c (grokfndecl): Forbid an operator ++/-- with its second
+ argument as anything other than an int.
+
+ * cp-lex.c (set_yydebug): Add extern decl of yydebug.
+
+ Fix enums in nested classes.
+ * cp-search.c (lookup_nested_field): New argument `complain', to
+ control if we should emit an error about assignment to a member of
+ an enclosing class or not. Also, if ID ends up being an error_mark,
+ set it to a NULL so we don't try to do nasty things later---better
+ to assume we didn't find anything at all.
+ * cp-tree.h (lookup_nested_field): Add new arg to prototype.
+ * cp-decl.c (lookup_name): Pass if prefer_type is -2 into
+ lookup_nested_field, since there are cases (e.g., nested enums) when
+ we still need to look here.
+ * cp-lex.c (do_identifier): Pass complain arg as 1 into
+ lookup_nested_field.
+
+ Thu Apr 15 11:23:18 1993 Mike Stump (mrs@poseidon.cygnus.com)
+
+ * cp-search.c (report_ambiguous_mi_virtuals): Pass pointers to
+ arrays, not pointers to first elements in the array in call to
+ rank_mi_virtuals.
+
+ * cp-lex.c (do_identifier), cp-parse.y: move
+ undeclared_variable_notice to where it is really used.
+
+ * cp-lex.c (do_identifier): Improve error message.
+
+ Tue Apr 13 17:04:12 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-typeck.c (default_conversion): OFFSET_REFs may not always have
+ a TREE_CODE (TREE_TYPE (x)) of OFFSET_TYPE, but they always will
+ have a TREE_CODE (x) of OFFSET_REF.
+
+ Fri Apr 9 20:26:32 1993 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-lex.c (real_yylex): Use MAP_CHARACTER translate incoming
+ character set. See c-lex.c ChangeLog entry for more details.
+
+ Thu Apr 8 15:30:58 1993 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-search.c (lookup_field): When looking something up, if
+ want_type is set, and what we find is ambiguous make sure we set
+ errstr to 0, even when rval is already NULL_TREE.
+
+ Thu Apr 8 11:40:16 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-tree.h (lookup_name_current_level): Add prototype.
+
+ Tue Apr 6 13:36:00 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (grokdeclarator): When we see `typedef enum ...' inside
+ a class, properly grok the tag instead of giving two bogus errors.
+ (lookup_name_current_level): Don't make it static, and delete its
+ prototype.
+
+ * cp-lex.h (enum rid): Move RID_UNUSED1 to the end, so that RID_AUTO
+ will be 30, not 31. We're at the limit, the next time a new rid is
+ added to this, we have to re-implement it to avoid integer overflows.
+
+ Sat Apr 3 12:16:23 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-init.c (emit_base_init): init can be NULL_TREE when dealing
+ with arrays, guard against it.
+
+Fri Apr 23 19:33:58 1993 Tor Egge (tegge@pvv.unit.no)
+
+ * reorg.c (relax_delay_slots): Make sure target_label is set.
+
+Fri Apr 23 19:19:06 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (shadow_tag_warned): Let warned have three values, so that
+ a mere warning doesn't prevent a pedwarn. Don't skip the error call
+ at the end on accounted of warned.
+
+ * c-decl.c (push_parm_decl): Turn off warning when parameter
+ shadows typedef.
+
+Fri Apr 23 16:41:54 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.md (casesi0): Indicate that the PC is set to the
+ out-of-range label if the index is not valid.
+
+Fri Apr 23 14:00:48 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
+
+ * i386/svr3dbx.h, i386/svr3gas.h: Reflect new directory structure.
+ * i386/t-svr3dbx: New file to install the required ld ifiles
+ automatically.
+ * configure (i[34]86-...): Use t-svr3dbx if configured --with-stabs.
+
+Fri Apr 23 13:53:31 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * reload1.c (emit_reload_insns): Advance following_insn if it is a
+ clobber, not if the next insn is a clobber.
+
+Fri Apr 23 13:44:12 1993 Joey Pruett (joey@tessi.com)
+
+ * protoize.c (scan_for_missed_items): Add keywords: else, do, case.
+
+Fri Apr 23 06:52:25 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (fold, case REALPART_EXPR, IMAGPART_EXPR): Avoid using
+ build_{unary,binary}_op since the calling sequences depend on
+ the front-end.
+ * expr.c (expand_expr, case OFFSET_REF): Likewise.
+ * convert.c (convert_to_integer, convert_to_complex): Likewise.
+
+ * c-typeck.c (readonly_warning): Correctly check for assignments
+ to iterators.
+
+Thu Apr 22 07:44:40 1993 Tom Wood (wood@next.com)
+
+ * c-lang.c, objc-act.c (maybe_objc_comptypes): Undo the previous
+ change and make the undecided return value from 2 to -1 to avoid
+ confusion with the values used by comptypes.
+ (objc_comptypes): Ditto. When two record types are being
+ compared, and none of the typed object cases applies, return -1 to
+ indicate no decision.
+ * c-typeck.c (comptypes): Only pass along a known return value
+ from maybe_objc_comptype.
+ (comp_target_types): If maybe_objc_comptypes computed a known
+ answer, return it. Don't recurse for Objective-C.
+
+ * nextstep.h (ASM_FILE_START): Don't output a .file directive.
+ That's used by the assembler for error reporting.
+
+Wed Apr 21 17:45:50 1993 Ron Guilmette (rfg at netcom.com)
+
+ * dwarfout.c (location_or_const_value_attribute): Fixed to use
+ DECL_INCOMING_RTL for PARM_DECLs only when DECL_RTL isn't usable,
+ and even then, only when it actually points to the right place.
+
+ * integrate.c (integrate_parm_decls): Copy the DECL_ARG_TYPE value
+ from the PARM_DECL being cloned into the DECL_ARG_TYPE field of the
+ clone.
+
+ * dwarf.h (AT_lo_user, AT_hi_user): Fix defined values to be correct
+ according to final DWARF V1 spec.
+
+Tue Apr 20 20:32:57 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * function.c (assign_parms): Use mode of type, not BLKmode.
+
+Tue Apr 20 18:37:12 1993 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * configure (rs6000-ibm-aix*): Put cases in proper order.
+
+Mon Apr 19 15:27:16 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * calls.c (expand_call): New FUNCTION_ARG_CALLEE_COPIES macro.
+ * function.c (assign_parms): Ditto.
+
+Sat Apr 17 17:44:59 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.h (FUNCTION_ARG_PADDING): Add parens to make clearer.
+ (MUST_PASS_IN_STACK): Don't allow machine to override (none
+ currently do).
+ Don't force in stack if wrong padding when padding isn't needed.
+
+ * basic-block.h (reg_basic_block): Now int *, not short *.
+ * flow.c (uid_block_number): Likewise.
+ (flow_analysis): Allocate uid_block_number and reg_basic_block
+ as array of ints.
+ * combine.c (reg_last_set_label, reg_last_set_table_tick, label_tick):
+ Use int, not short, for counting labels.
+ (combine_instructions): Allocate these vars as arrays of ints.
+ * jump.c (same_regs): Now arrays of ints.
+ (thread_jumps): all_reset also array of ints, and allocate as ints.
+ * reg-stack.c (block_number, BLOCK_NUM, reg_to_stack): Use ints,
+ not shorts to count blocks.
+
+Sat Apr 17 03:27:48 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-parse.in (unary_expr): Delete the alternate REALPART and IMAGPART
+ rules with explicit parens. Make the simple REALPART and IMAGPART
+ rules contain cast_expr.
+
+ * c-decl.c (finish_struct): Promote unsigned bitfield to signed int
+ if the field isn't as wide as an int.
+
+Fri Apr 16 21:42:49 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * calls.c (expand_call): Check warn_inline before complaining about
+ not being able to inline a fn declared inline.
+ * flags.h (warn_inline): Add extern decl.
+
+Fri Apr 16 20:27:57 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.md (blockage): Use unspec_volatile #1; #0 is IMB.
+
+ * local-alloc.c (qty_n_refs): Make int, like reg_n_refs.
+ (qty_first_reg, reg_next_in_qty): Make int, not short.
+ (local_alloc): Allocate these as arrays of ints.
+ (block_alloc, qty_compare_1): qty_order is now array of ints.
+
+Fri Apr 16 20:27:16 1993 Tom Wood (wood@next.com)
+
+ * a29k.h (FUNCTION_VALUE_REGNO_P): True only for the first register
+ in the group.
+
+ * alpha.md, romp.md, rs6000.md (untyped_call, blockage): New patterns.
+
+Fri Apr 16 17:53:21 1993 Ron Guilmette (rfg at netcom.com)
+
+ * reload1.c (last_spill_reg): Add missing "int".
+
+Fri Apr 16 16:55:16 1993 Doug Evans (dje@wookumz.gnu.ai.mit.edu)
+
+ * Makefile.in (objc-headers): Ensure objc dir exists.
+
+Fri Apr 16 16:40:49 1993 Michael Meissner (meissner@osf.org)
+
+ * mips/mips.h (MIPS_VERSION): Set Meissner revision number to 39.
+ (SELECT_SECTION): Do not put items with relocation into .rdata.
+ (INITIALIZE_TRAMPOLINE, TRANSFER_FROM_TRAMPOLINE): Allow these
+ macros to be overidden.
+
+ * mips/iris3.h (INITIALIZE_TRAMPOLINE, TRANSFER_FROM_TRAMPOLINE):
+ Provide versions of these that does not rely on using mprotect.
+
+ * mips/t-mips, mips/t-osfrose, mips/t-ultrix, i386/t-osfrose:
+ Delete extra dependencies.
+
+ * i386/osfrose.h (SELECT_SECTION): Do not put items with
+ relocation into .text if -pic-lib.
+
+Fri Apr 16 01:09:53 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/i386/xm-isc.h (REAL_VALUE_ATOF): Define only if
+ not REAL_ARITHMETIC.
+
+Thu Apr 15 07:25:00 1993 Tom Wood (wood@next.com)
+
+ * objc-act.c (IS_ID, IS_PROTOCOL_QUALIFIED_ID, IS_SUPER): New type
+ checking macros.
+ (objc_comptypes, build_message_expr, gen_declspecs): Use them.
+
+ * objc-act.c (gen_declarator): Don't use strcpy's return value.
+
+ * objc-act.c (build_message_expr): Allow any type that matches
+ objc_class_type.
+
+ * objc-act.c (get_class_reference): We already have a name.
+
+ * objc-act.c (receiver_is_class_object): Use STRIP_NOPS. Search
+ cls_ref_chain.
+
+Thu Apr 15 07:25:00 1993 Michael Meissner (meissner@osf.org)
+
+ * objc-act.c (build_objc_string): Use TREE_SET_CODE instead of
+ assigning to TREE_CODE.
+ (build_objc_string_object): Ditto.
+
+Wed Apr 14 17:51:50 1993 Holger Teutsch (holger@hotbso.rhein-main.de)
+
+ * clipper.h (FRAME_POINTER_REQUIRED, FRAME_POINTER_OFFSET):
+ Frame pointer is no longer required for leaf functions.
+ (OPTIMIZATION_OPTIONS): Define.
+
+ * clipper.c (clipper_frame_size): New function.
+ (output_function_pro/epilogue): Support omitting frame pointer.
+
+ * clipper.md (cmpsi): Use `cmpq' for small immediate values.
+ (addsi3): Use `loada' for `reg1 = reg2 + immed'.
+
+Wed Apr 14 15:23:24 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * print-tree.c (print_node): Use (struct rtx_def *), not (rtx).
+
+Wed Apr 14 13:46:36 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/i860/i860.md (floatsidf2): Add missing arg to REAL_VALUE_ATOF.
+
+ * c-parse.in: Improve error message for sym undeclared at top level.
+
+Wed Apr 14 12:06:08 1993 Tom Wood (wood@next.com)
+
+ * c-lang.c, objc-act.c (maybe_objc_comptypes): Return 0
+ (incompatible) rather than 2 (similar enough) as the default.
+ This was an inadvertent change in the Objective-C merge.
+
+ * objc-act.c (get_class_reference): Call add_class_reference for
+ the GNU runtimes.
+
+Wed Apr 14 03:49:21 CDT 1993 Paul Burchard (burchard@geom.umn.edu)
+
+ * objc/Object.h, objc/Object.m, (-awake);
+ objc/archive.c (__objc_finish_read_root_object):
+ Corrected name of method -awake: to -awake for compatibility.
+
+Wed Apr 14 10:58:29 1993 Kresten Krab Thorup (krab@xiv)
+
+ * objc/Object.m, objc/Object.h (+streamVersion:): New method.
+ * objc/archive.c (objc_get_stream_class_version): New function.
+
+Tue Apr 13 17:23:22 1993 Ron Guilmette (rfg at netcom.com)
+
+ * c-decl.c (pop_label_level, combine_parm_decls): Correct args
+ in error calls.
+ * c-typeck.c (error_init, pedwarn_init): Cast alloca result to char *.
+ * calls.c (expand_call): Last arg of emit_stack_save is NULL_RTX.
+ (store_one_arg): Fourth arg to emit_push_insn is NULL_RTX.
+ * collect2.c (main, scan_prog_file): Don't call signal on signal
+ names that aren't defined.
+ * dbxout.c (dbxout_symbol): Last arg to eliminate_regs is NULL_RTX.
+ * fold-const.c (size_int): NUMBER is unsigned so don't test
+ for negative.
+ (optimize_bit_field_compare, all_ones_mask_p): Add missing
+ last arg to force_fit_type call.
+ * gcc.c (putenv): Make result type void.
+ (main): Don't call signal for undefined signal names.
+ * genextract.c (main): Remove extra arg to printf call.
+ * print-tree.c (print_node_brief, print_node): Properly cast
+ arg when printing ints or rtx.
+ * rtl.h, tree.h (xmalloc): Don't use prototype for now.
+ * sched.c (sched_analyze_1): Extra arg in anti_dependence call.
+ * toplev.c (main): Don't call signal for undefined signal names.
+ * varasm.c (make_var_volatile): Return type is void.
+ (assemble_string): First arg is not pointer to unsigned.
+ * sparc.h (LEGITIMIZE_ADDRESS): Last arg to force_operand is NULL_RTX.
+ * sparc.md (movXX): Third arg to emit_move_sequence is NULL_RTX.
+ (movsi): Add missing return after abort.
+
+Tue Apr 13 14:09:00 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (digest_init): Don't call default_conversion before
+ convert_for_assignment.
+ (parser_build_binary_op): Make NOP_EXPR, not NON_LVALUE_EXPR.
+
+ * dbxout.c (dbxout_type): Re-enable debugging output for anonymous
+ structures in C++.
+
+Tue Apr 13 08:44:55 1993 Kresten Krab Thorup (krab@iesd.auc.dk)
+
+ * objc-act.c, toplev.c (-Wprotocol): added
+ * objc-act.c (flag_warn_protocol): New variable
+ (check_methods_accessible): New function
+ (check_protocol): Use check_methods or check_methods_accessible
+ depending on flag_warn_protocol to check protocol conformance.
+
+ * objc-act.c (start_class): For class implementations Assign
+ SUPER_CLASS_NAME from interface specification if not present.
+
+Tue Apr 13 06:48:20 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.md (sminsf, smindf, smaxsf, smaxdf): Should be minsf, etc.
+
+ * genattrtab.c (clear_struct_flag): Add void return type defn.
+ (count_subs_rtx): Add int return type and add definition.
+ (simplify_test_exp): Delete debugging junk.
+ (do_nothing): Delete.
+
+ * tree.def (QUAL_UNION_TYPE): New tree code.
+ * tree.h (DECL_QUALIFIER): New access macro for decl.initial.
+ * calls.c, dbxout.c, dwarfout.c, expr.c, function.c, print-tree.c:
+ Treat QUAL_UNION_TYPE like UNION_TYPE when seeing if aggregate.
+ * sdbout.c, stmt.c, varasm.c: Likewise.
+ * expr.c (get_inner_reference): Don't blow up if a FIELD_DECL
+ hasn't been filled in.
+ (expand_expr, case COMPONENT_REF): Likewise.
+ * stor-layout.c (layout_union): Handle QUAL_UNION_TYPE.
+ (layout_type): Call layout_union for QUAL_UNION_TYPE and
+ treat it like UNION_TYPE elsewhere.
+
+Tue Apr 13 06:08:16 1993 Paul Eggert (eggert@twinsun.com)
+
+ * fold-const.c (div_and_round_double): Don't mix HOST_WIDE_INT * and
+ unsigned HOST_WIDE_INT * parameters; some compilers complain.
+
+Mon Apr 12 22:14:03 1993 Kresten Krab Thorup (krab@iesd.auc.dk)
+
+ * objc/list.h, objc/runtime.h: Removed declarations of library
+ functions. objc/list.h, objc/objc.h, objc/objc-api.h,
+ objc/runtime.h, Object.m, Protocol.m: Changed to double quote
+ includes. Removed includes of stddef.h, objc-archive.h and
+ stdlib.h.
+
+ * objc/objc-archive.h: File deleted. Contents embedded in objc-api.h
+ * objc/objc-archive.c: File renamed to archive.c
+ * objc/objc-class.c: File renamed to class.c
+ * objc/objc-init.c: File renamed to init.c
+ * objc/objc-misc.c: File renamed to misc.c
+ * objc/objc-msg.c: File renamed to sendmsg.c
+ * objc/objc-object.c: File renamed to objects.c
+ * objc/objc-sel.c: File renamed to selector.c
+ * objc/Makefile (OBJC_H, OBJC_O): Updated accordingly
+
+Mon Apr 12 22:05:58 1993 Tom Wood (wood@next.com)
+
+ * Makefile.in (objc-act.o): Add dependencies.
+
+Mon Apr 12 20:52:00 1993 Kresten Krab Thorup (krab@spiff.gnu.ai.mit.edu)
+
+ * objc-act.c (_OBJC_SELECTOR_REFERENCES_decl): Variable renamed to
+ _OBJC_SELECTOR_TABLE_decl. Name of selector table renamed from
+ "_OBJC_SELECTOR_REFERENCES" to "_OBJC_SELECTOR_TABLE" to avoid
+ conflict with NeXTSTEP linker.
+
+ * Makefile.in (stmp-int-hdrs): Added dependency objc-headers.
+ (objc-headers): New target.
+
+ * objc/Makefile (_forward, fflags): Made targets error prone.
+ (objc-msg.o, _forward): Use explicit path instead of $<.
+
+Mon Apr 12 19:49:55 1993 Tom Wood (wood@next.com)
+
+ * objc-act.h (CLASS_PROTOCOL_LIST, PROTOCOL_LIST,
+ PROTOCOL_FORWARD_DECL, TYPE_PROTOCOL_LIST): Rearrange use of type
+ members to avoid use of noncopied_parts.
+ * objc-act.c (get_static_reference, get_objcect_reference,
+ start_protocol): Make a tree vector for new protocol types.
+ (start_class): The tree vector for class types is longer.
+
+ * m68k/next.h (ASM_OUTPUT_FLOAT_OPERAND): Use CODE.
+
+
+Mon Apr 12 15:46:21 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * Makefile.in (install-common): Delete $(bindir)/$(target)-gcc
+ before trying to install it.
+
+ * i960.h (CONSTANT_ALIGNMENT): Only increase alignment of string
+ constants.
+
+ * gcc.c (library_prefix): Delete variable.
+ (process_command): Delete uses of library_prefix.
+ (do_spec_1, D case): Delete use of library_prefix.
+
+ * explow.c (emit_stack_save): At end, call validize_mem when
+ inside sequence.
+
+ * c-typeck.c (internal_build_compound_expr): When pedantic, don't
+ simplify a COMPOUND_EXPR, so that it won't be mistaken for an
+ lvalue or an integer constant expression.
+ * fold-const.c (fold, COMPOUND_EXPR case): Likewise.
+
+Mon Apr 12 15:24:05 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.c (print_operand): Sort all cases in alphabetical order.
+ (print_operand, case 'G'): New case.
+ (output_epilog): Know that "GNU Obj-C" is the language string
+ for Objective-C.
+ * rs6000.md (adddi3/subdi3): Allow immediate constants.
+
+ * configure (rs6000-ibm-aix*): Make AIX 3.2 the default.
+
+ * README.RS6000: Replaced file to discuss assembler for AIX 3.2 and
+ problems with NLS support.
+
+ * combine.c (record_value_for_reg): Properly set SUBST_LOW_CUID
+ for last change; otherwise won't get best value.
+
+Mon Apr 12 13:23:59 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * jump.c (jump_optimize, clause for `x=a; if (...) x=b;'):
+ Do this regardless of BRANCH_COST if HAVE_conditional_move
+ defined.
+
+Mon Apr 12 17:15:43 1993 Kresten Krab Thorup (krab at xiv)
+
+ * objc/hash.h: Deleted #include "mutext.h"
+ * objc/Object.m, objc/Object.h (-read:, -write:): added.
+ * objc/Object.m, objc-api.h: Stripped anything added by
+ kane@cc.purdue.edu which is not considered "minor changes".
+ * objc/objc.h: now "#include"s objc-archive.h
+ * objc/objc-msg.c (__objc_init_install_dtable,
+ __objc_install_dtable_for_class): Call to
+ __objc_resolve_class_links moved to the latter.
+ * objc/objc-msg.c (__objc_responds_to): Function added
+ * objc/objc-archive.c (objc_write_reference): added
+
+Sat Apr 10 18:07:46 1993 Kresten Krab Thorup (krab@iesd.auc.dk)
+
+ * objc/Makefile: Cleaned up for inclusion in gcc distribution.
+ Target copy-headers added.
+
+Sun Apr 11 06:40:16 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * toplev.c (strip_off_ending): Add .atr for Ada.
+
+ * reorg.c (add_to_delay_list): Clear any cached block information
+ for INSN.
+
+ * stor-layout.c (layout_record): After copying the offsets of a
+ field that is an anonymous union to the offsets of the fields
+ of that union, zero the offset of the anonymous field in case
+ it is used to access the inner fields.
+
+ * combine.c (make_compound_operation, case xSHIFTRT):
+ Clean up code so more readable and don't restrict to case
+ where C2 >= C1.
+ Pass correct (inner) code to recursive call.
+ (make_compound_operation, case SUBREG): Pass the code of our
+ operand to recursive call, not SUBREG, and make another recursive
+ call after calling force_to_mode.
+
+Sun Apr 11 11:16:48 1993 John F Carr (jfc@Athena.mit.edu)
+
+ * combine.c (can_combine_p): Don't move an UNSPEC_VOLATILE.
+
+Sun Apr 11 01:32:39 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expmed.c (expand_divmod): When adjusting op0 for trunc_div or
+ trunc_mod, using shifts (not branches), make a new pseudo for the
+ result. Don't use target for adjusted_op0.
+
+Sat Apr 10 10:57:09 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * xm-alpha.h (ONLY_INT_FIELDS): No longer needed.
+
+ * alpha.c (alpha_sa_size): Need to save $26 if it is used or
+ if any other register is saved, but not just because a stack
+ space is needed.
+ (output_prolog): Add code to probe the stack if we allocate more
+ than 4096 bytes; required by chapter 7 (for threads).
+ Know when to save $26.
+ (output_epilog): Know when to restore $26.
+ * alpha.md (add/sub): Correct predicates and constraints for
+ sNaddX and addX insns; we can use sNsubX and subX to add small
+ negative constants.
+ Don't split addition to SP since we want to update it just once.
+ (beq, bne): Use subtract, not compare for ints; it's more efficient.
+ (define_split for comparisons): Always prefer add/sub if it will work.
+ (probe_stack, allocate_stack): New patterns.
+
+Fri Apr 9 20:03:38 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * c-typeck.c (free_tree_list): New variable.
+ (digest_init): Set free_tree_list.
+ (process_init_constructor): Use add_double to do arithmetic with
+ double integers instead of using fold/build to to arithmetic in
+ type of array index. Use free_tree_list when available instead of
+ generating a new tree_list.
+
+Fri Apr 9 19:05:31 1993 Tom Wood (wood@next.com)
+
+ * c-lex.h (RID_IN, RID_OUT, RID_INOUT, RID_BYCOPY, RID_ONEWAY,
+ RID_ID): New Objective-C keywords.
+ * c-parse.gperf: Incorporate the Objective-C keywords from
+ objc-parse.gperf and add the new keywords.
+ * objc.gperf: Deleted.
+ * c-lex.c: Use -N when running gperf so the keyword table can be
+ accessed. Ran gperf and replaced that section.
+ (forget_protocol_qualifiers, remember_protocol_qualifiers): New
+ functions to modify the keyword table so that `in', `out', `inout',
+ `bycopy', and `oneway' are keywords only in protocol declarations.
+ (init_lex): Initialize the new keywords. Forget the protocol
+ qualifiers, and only make `id' a keyword when compiling an
+ Objective-C module.
+ (yylex): Treat @ as the start of an identifier (keyword), but
+ recognize Objective-C string constants (@"...").
+ * c-parse.in: Add support for Objective-C protocols, classes, and
+ strings.
+ (initlist): Don't include labeled array elements in the
+ Objective-C grammer. These look like messages and preclude the
+ use of messages in initializers.
+ (recognize_objc_keyword): Deleted. The keywords are now in
+ c-parse.gperf.
+ * c-tree.h: Add declarations for functions in objc-act.c.
+ (doing_objc_thang): Declare here.
+ * c-decl.c (grokfield): Check for statically allocated objects.
+ * c-lang.c (is_class_name, maybe_objc_method_name,
+ build_objc_string): New functions.
+ (maybe_objc_comptypes): Add REFLEXIVE parameter.
+ * c-typeck.c (comptypes, convert_for_assignment): Check for
+ Objective-C protocols (non-reflexive use of maybe_objc_comptypes).
+ (comp_target_types): Rewrite so that maybe_objc_comptypes checks
+ protocols when processing an Objective-C module. For C modules,
+ the code path is unchanged.
+ (convert_for_assignment): Improve the error message for
+ incompatible message arguments.
+ * objc-act.h, objc-act.c: Add support for protocols, classes, and
+ strings. Update the runtime targets for the new GNU runtimes as
+ well as existing NeXT runtimes.
+ * toplev.c (lang_options): Add -fgnu-runtime and -fnext-runtime.
+
+ * configure (i[34]86-next-*): New configuration.
+ * config.sub: Default to bsd if vendor is next.
+ * i386/next.h, i386/next.c, i386/x-next, i386/t-next,
+ i386/xm-next: New files.
+ * m68k/next.h, m68k/next.c: Move machine independent portions to
+ nextstep.h and nextstep.c. Update to NeXTSTEP 3.0 and 3.1.
+ * nextstep.h, nextstep.c: New files.
+
+ Dumped Kresten's latest objc-runtime into the objc directory.
+ This needs work.
+
+ * objc/core.c, objc/objc-proto.h, objc/object.h, objc/object.m,
+ objc/record.h: Deleted.
+
+ Thu Apr 1 11:02:49 1993 Kresten Krab Thorup (krab at xiv)
+
+ * objc/list.h (list_remove_head): added case for one element list.
+ * objc-init.c (__objc_exec_class): changed objc_get_class to
+ objc_lookup_class. (thanks to mccallum@cs.rochester.edu)
+
+ Thu Mar 30 11:04:11 1993 Kresten Krab Thorup (krab at xiv)
+
+ * Protocol.m, objc/Protocol.h: added
+ * objc.h (struct objc_protocol): added
+ * objc-init.c (__objc_init_protocols): added
+ (__objc_exec_class): added code for initializing protocols
+ * objc-class.c (__objc_class_add_protocols): added
+
+ Thu Mar 25 17:09:40 1993 Kresten Krab Thorup (krab at xiv)
+
+ * configure, Makefile.in: added
+ * Makefile.in (install): added
+
+ Wed Mar 24 14:32:14 1993 Kresten Krab Thorup (krab at xiv)
+
+ * objc/objc.h: Define objc_msg_lookup inline if optimization is
+ turned on. objc-actions.c changed accordingly.
+
+ Tue Mar 23 18:02:04 1993 Kresten Krab Thorup (krab at eos)
+
+ * sarray.c, objc/sarray.h: Structure of `sarray' changed
+ eliminating one indirection. This affects most functions.
+
+ Mon Mar 29 1993 Christopher J. Kane (kane@rock-opera)
+
+ * objc-object.c (_objc_object_alloc, _objc_object_dispose,
+ _objc_object_copy): moved to objc-misc.c, init to 0.
+ : deleted file.
+
+ * Object.m (-perform:, -perform:with:, -perform:with:with:): check
+ return value of objc_msg_looup before using it.
+ (-name, -doesNotRecognize:, -error:): changed class_get_class_name
+ to object_get_class_name.
+ (+readFrom:): added check for class name length.
+
+ * objc-api.m (class_create_instance, object_copy, object_dispose):
+ moved from objc-object.c, inline'd
+
+ Sun Mar 28 1993 Christopher J. Kane (kane@prelude)
+
+ * objc-api.h (several inline functions): rewritten to
+ use new CLS_ISCLASS and CLS_ISMETA macros.
+ (object_is_metaclass): added.
+
+ * objc.h (_objc_alloc, _objc_dealloc, _objc_realloc,
+ _objc_copy, objc_trace): removed (not used).
+ (class_get_class_number, class_set_class_number): removed.
+ (CLS_ISCLASS, CLS_ISMETA): check for nil parameter.
+
+ Sat Mar 27 1993 Christopher J. Kane (kane@toccata)
+
+ * Object.m: method comments added.
+ (-transmuteClassTo:): removed error message.
+ (+error:): removed.
+ (-error:): added +error: functionality.
+ (+readFrom:): changed objc_get_class to objc_lookup_class.
+ (+readFrom:): added class_set_version.
+
+ * objc-api.h (object_get_class, object_get_super_class,
+ object_get_meta_class, object_is_class,
+ object_is_instance, _objc_error): added.
+
+ * objc.h (_objc_error): moved to objc-api.h.
+
+ Fri Mar 26 1993 Christopher J. Kane (kane@toccata)
+
+ * objc-api.h: function comments added.
+ (class_set_class_number, class_get_class_number, METHOD_NULL,
+ class_add_method_list, objc_msg_lookup_super): moved to
+ objc.h.
+ (objc_msg_sendv): removed.
+
+ * Object.h, Object.m (-isMetaClass): added.
+ (+free, +name, +respondsTo:, +respondsTo:): removed.
+ (+class, +superClass, +metaClass): removed.
+
+ * Object.m (-storeOn:): added variable class_encoding.
+ (+readFrom:): replaced constant '#' with _C_CLASS.
+ (-descriptionForMethod): changed descriptionForInstanceMethod: message
+ to class_get_instance_method.
+ (-class): now calls object_get_class.
+ (-superClass): now calls object_get_super_class.
+ (-metaClass): now calls object_get_meta_class.
+
+ Wed Mar 24 1993 Christopher J. Kane (kane@rock-opera)
+
+ * objc-api.h (METHOD_NULL): new define.
+ (method_get_argsize, method_get_imp, class_get_super_class,
+ class_get_meta_class, class_get_instance_size): new
+ functions.
+
+ * Object.m (-isStructuredLike:, CLASS, IMP2): removed.
+ (#include <objc/objc.h>): removed.
+ (includes <stdio.h>, <stdarg.h>, <errno.h>): replaced w/ extern decls.
+ (+poseAs:): implemented.
+ (-transmuteClassTo:): now returns previous class.
+ (-performv::): changed constant 96 to method_get_argsize.
+ (-perform:, -perform:with:, -perform:with:with:): removed casts.
+ (-storeOn:, +readFrom:): replaced "strlen("#")" with "1".
+ (-isKindOfClassNamed:, -isMemberOfClassNamed:, -error:,
+ +error:): check for NULL.
+ (many methods): changed pointer indirections to function calls.
+ (+instancesRespondTo:, -respondsTo:, -methodFor:
+ +instanceMethodFor:): simplified.
+
+ * Object.h, Object.m (-changeClass:): renamed to -transmuteClassTo:.
+ (+initialize, -isClass, -isInstance): added.
+
+ * Object.h: redundant #defines, typedefs removed; comments modified.
+ (+readFrom:, -readFrom:, -storeOn:) added.
+ (-perform:with:): duplicate declaration removed.
+
+Fri Apr 9 17:42:11 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config.sub: Accept i370, mvs.
+ For i370-ibm*, assume mvs by default.
+ Later, likewise, for i370-*.
+ For -mvs*, assume ibm as default vendor.
+
+ * c-lex.c (yylex): Use MAP_CHARACTER if it's defined.
+
+ * cccp.c (no_precomp): Make it 1 by default.
+
+Fri Apr 9 17:15:00 DJ Delorie (dj@ctron.com)
+
+ * configure.bat: Updated to handle current Makefile
+ and new config/i386/go32.h.
+
+ * config/i386/go32.h: New file.
+
+ * config/i386/xm-dos.h: Define MKTEMP_EACH_FILE and
+ NO_PRECOMPILES.
+
+Fri Apr 9 15:11:25 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in: Install as $(target)-gcc, not gcc-$(target).
+
+ * fixincludes: Avoid inserting #ifndefs in limits.h if they are
+ already there (solves HP/UX problem).
+
+Thu Apr 8 21:36:11 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c: Include hard-reg-set.h.
+ (reg_nonzero_bits): Should be unsigned.
+ (reg_last_set_{mode,nonzero_bits,sign_bit_copies}): New variables.
+ (combine_instructions): Allocate and initialized them.
+ (nonzero_bits, num_sign_bit_copies, case REG): Use new variables
+ to get information on regs we've seen before.
+ (record_value_for_reg): Set new variables for register being modified.
+ (record_dead_and_set_regs): Invalidate regs clobbered by CALL_INSN.
+ * Makefile.in (combine.o): Includes hard-reg-set.h.
+
+ * expr.c (do_store_flag, case GT_EXPR, LE_EXPR): Don't
+ confuse highest unsigned value with -1.
+
+ * combine.c (force_to_mode, case xSHIFT): Don't narrow the
+ mode unless we can be sure that the shift count is smaller
+ than the size of the mode.
+
+ * ns32k.h (enum reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS):
+ Add new register class GEN_AND_FLOAT_REGS.
+
+Thu Apr 8 18:42:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (c-parse.y, objc-parse.y): Use sed, not awk.
+
+ * c-decl.c (finish_enum): Store layout results into variant types.
+
+ * flow.c (mark_set_1): Clear reg_next_use at the proper place.
+
+Thu Apr 8 10:50:00 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in (LIBGCC2_INCLUDES, LIBGCC2_DEPS): New variables,
+ with empty values, to be overriden by t-* files.
+ (LIBGCC2_CFLAGS): Use LIBGCC2_INCLUDES.
+ (libgcc2.ready): Depend on LIBGCC2_DEPS.
+ (stmp-int-hdrs): New target, all of old stmp-headers except
+ float.h.
+ (stmp-headers): Depend on stmp-int-hdrs, and just install float.h.
+
+Thu Apr 8 06:58:27 1993 Michael Meissner (meissner@osf.org)
+
+ * c-tree.h (require_complete_type, lookup_name_current_level): Add
+ prototypes.
+
+ * tree.h (require_complete_type, lookup_name_current_level): Remove
+ prototypes, these are defined in c-typeck.c and c-decl.c, and
+ lookup_name_current_level is declared static in cp-decl.c.
+
+Wed Apr 7 14:37:41 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * flow.c (mark_set_1): Clear reg_next_use for all kinds of regs.
+
+Wed Apr 7 09:18:20 1993 Michael Meissner (meissner@osf.org)
+
+ * i386/osfrose.h (GO_IF_LEGITIMATE_ADDRESS): Allow -fpic again to
+ mean System V.4 semantics.
+ (CC1_SPEC): -fpic and -fPIC turn off OSF/rose shared library
+ support.
+
+Tue Apr 6 18:07:20 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (start_function):
+ Inhibit missing prototype warning for `main'.
+
+Tue Apr 6 17:23:34 1993 Bill Cox (bill@cygnus.com)
+
+ * tree.h (require_complete_type, lookup_name_current_level): Add
+ prototypes.
+
+Tue Apr 6 15:09:42 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * va-sparc.h (va_arg): Cast argument pointer to (char *).
+
+ * unroll.c (loop_iterations): When computing comparison_value, use
+ reg_set_p to identify instructions that modify it.
+
+ * sparc.md (lshldi3, lshrdi3): Define.
+
+ * Makefile.in (STAGESTUFF): Add insn-opinit.c, stamp-opinit, and
+ genopinit.
+
+ * cccp.c (do_include): For missing header file, if -M, don't
+ output dependencies, and warning not error if no dependency is
+ needed.
+
+ * c-common.c (decl_attributes, format case): Error if num_arg does
+ not point to a string type argument, or if first_arg_num not the
+ anonymous argument.
+
+ * function.c (init_function_start): Always set
+ current_funtion_returns_pcc_struct if PCC_STATIC_STRUCT_RETURN defined.
+
+ * sparc.md (movdi): End by returning the last template; otherwise
+ we return junk for a template.
+
+ * README.ALTOS: Comment as possibly obsolete.
+ * README.ENCAP: Delete.
+ * install.texi: Delete references to COFF encapsulation.
+
+ * tree.h: Add more prototypes.
+
+Tue Apr 6 12:01:17 1993 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Bump Meissner version number to 38.
+ (PUT_SDB_*): If -mgas, don't put # in front of directives.
+ (MIPS_DEFAULT_GVALUE): If not define, define as 8, which is the
+ default -G xx value to use.
+
+ * mips.c (override_options): Set mips_section_threshold to
+ MIPS_DEFAULT_GVLAUE if -G xx not used.
+
+ * mips/osfrose.h (DWARF_DEBUGGING_INFO): Define.
+ (MIPS_DEFAULT_GVALUE): If mips assembler, the value is 8,
+ otherwise it is 0.
+
+ * i386/osfrose.h (DWARF_DEBUGGING_INFO): Define.
+ (PREFERRED_DEBUGGING_TYPE): Define as DBX_DEBUG.
+
+Mon Apr 5 20:47:44 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * Represent prologue and epilogue as RTL on the PA
+ * pa.md (prologue, epilogue): New define_expands.
+ (return_internal, call_profiler): New define_insns.
+ * pa.h (FIXED_REGISTERS): %r4 is no longer fixed.
+ (CALL_USED_REGISTERS): %r4 is no longer CALL_USED either.
+ (REG_ALLOC_ORDER): Move %r4 up in the allocation order.
+ (DELAY_SLOTS_FOR_EPILOGUE): Delete.
+ (ELIGIBLE_FOR_EPILOGUE_DELAY): Delete.
+ * pa.c (print_stw, print_ldw): Delete.
+ (eligible_for_epilogue_delay): Delete.
+ (hppa_epilogue_delay_slots): Delete.
+ (store_reg, load_reg, set_reg_plus_d): New helper functions.
+ (output_function_prologue): Only emit assembler pseudo-ops
+ to denote the start of a function. Place the correct
+ value into hp_profile_label_name if profiling.
+ (output_function_epilogue): Only emit assembler pseudo-ops
+ to deonte the end of a function.
+ (hppa_expand_prologue): New function to emit all prologue
+ code as RTL.
+ (hppa_expand_epilogue): Likewise for the epilogue.
+ (compute_frame_size): Update to account for using %r4 as an
+ allocatable register if the frame pointer was eliminated.
+
+Mon Apr 5 06:57:35 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case SAVE_EXPR): Pass promoted type to
+ store_expr.
+
+Mon Apr 5 03:26:06 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload1.c (emit_reload_insns): Cast enum array index to int.
+
+ * expr.c (store_constructor): Properly compute size of array
+ when clearing the whole array.
+
+Mon Apr 5 02:54:54 1993 Per Bothner (bothner@hal.gnu.ai.mit.edu)
+
+ * c-decl.c (lookup_name_current_level): Make non-static.
+
+Sun Apr 4 20:09:19 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (HARD_REGNO_MODE_OK): Do not accept integer modes
+ greater than 32 bits in 1.0 FP registers.
+ * pa.md (movdi patterns): Do not accept 1.0 FP registers.
+ (floatunsdisf, floatunsdidf expanders): Disable unless TARGET_SNAKE.
+ (floatdisf2, floatdidf2 patterns): Likewise.
+ (fix_truncdisf2, fix_truncdidf2): Likewise.
+
+ * pa.md (dbra pattern): Extend to allow any 5 bit increment,
+ any comparison operator for the compare against zero, and
+ no longer require the REG_NONNEG note.
+
+ * pa.h (EXTRA_CONSTRAINT): Refine 'T' constraint to not accept
+ pseudos which did not get hard registers and to not use
+ short_memory_operand.
+ * pa.c (short_memory_operand): Delete.
+ (emit_move_sequence): Do not use short_memory_operand when testing
+ for secondary reloads for FP loads/stores.
+ * pa.md (movsi for FP regs): Delete special case patterns.
+ (movdi for FP regs): Likewise.
+ (movsi main recognizer): Allow fp<->memory copies.
+ (movdi main recognizer): Likewise.
+
+Sun Apr 4 18:56:25 1993 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * pa.h (FUNCTION_OUTGOING_VALUE): Remove.
+ (FUNCTION_VALUE_REGNO_P): Return regs depend on TARGET_SNAKE.
+
+Sun Apr 4 17:47:43 1993 John F Carr (jfc@Athena.mit.edu)
+
+ * reorg.c (get_jump_flags): Check for LABEL == 0 before using
+ LABEL.
+
+Sun Apr 4 16:38:04 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * mips-tfile.c: Change "illegal" to "invalid" in error messages.
+ (parse_stabs_common): Allow nonzero ignored fields in .stabs/.stabn.
+
+ * calls.c (expand_call) [PCC_STATIC_STRUCT_RETURN]:
+ Always set pcc_struct_value if aggregate_value_p returns 1.
+
+ * Makefile.in (alloca.o): Delete -Demacs from command.
+
+Sun Apr 4 11:19:07 PDT 1993 Ron Guilmette (rfg at netcom.com)
+
+ * dwarfout.c (type_attribute): Use the TYPE_MAIN_VARIANT of the
+ given type when calling `user_def_type_attribute'.
+
+Sun Apr 4 07:57:18 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * optabs.c: Include reload.h.
+ * Makefile.in (optabs.o): Show includes reload.h.
+
+ * alpha.c (output_prolog): Need LDGP even for static procedure.
+
+ * alpha.c (alpha_builtin_saveregs): Adjust for fact that
+ virtual_incoming_args_rtx includes pretend size.
+ * alpha.h (SETUP_INCOMING_VARARGS): Likewise.
+
+ * alpha.h (LINK_SPEC): Don't pass -O2 to ld; it seems to be broken.
+
+ * reorg.c (rare_destination): New function.
+ (mostly_true_jump): Refine to use more info about destination
+ and fallthrough; now returns -1 for very unlikely branches.
+ (fill_eager_delay_slots, relax_delay_slots): Allow -1 return
+ from mostly_true_jump.
+
+Sun Apr 4 03:09:23 1993 Richard Stallman (rms@churchy.gnu.ai.mit.edu)
+
+ * gstdarg.h [__svr4__]: Test only _VA_LIST_ to avoid dup typedef.
+ (This used to be if __SVR4_2__.)
+
+ * config/m68k/m68k.c (floating_exact_log2): Initialize r1.
+
+Sat Apr 3 20:01:05 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.c (hppa_legitimize_address): Use Pmode consistently.
+
+Sat Apr 3 17:35:11 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (emit_reload_insns): Don't update the status of a
+ register from an input reload if it also has an output reload.
+
+ * expr.c (store_expr): Call size_binop instead of doing the
+ same thing with fold and build.
+
+ * combine.c (simplify_comparison, case PLUS): Generalize
+ simplification of (eq (plus A B) C).
+ (simplify_comparison, case MINUS): Add corresponding cases.
+
+Fri Apr 2 19:11:46 1993 Richard Stallman (rms@geech.gnu.ai.mit.edu)
+
+ * c-parse.in (expr_no_commas, from ASSIGN op):
+ Store ERROR_MARK as the original code.
+
+Fri Apr 2 07:49:03 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload_reg_used_for_inherit): New variable.
+ (clear_reload_reg_in_use): New function.
+ (allocate_reload_reg): Don't consider an inherited register as
+ one that we should share in the first pass.
+ Don't mark a register in use until we are sure it will fit.
+ (choose_reload_regs): Mark spill regs used for inheriting.
+ When we decide we can no longer use a register, show it isn't
+ being used.
+
+ * genopinit (optabs): Fix typo in name for "fix" pattern.
+
+Thu Apr 1 21:24:04 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ Cygnus<->FSF merge.
+
+ Thu Apr 1 17:20:05 1993 Mike Stump (mrs@sphagnum.cygnus.com)
+
+ * cp-decl.c (start_method): Never allow circularities in
+ TREE_CHAINs, as otherwise the compiler will core dump. This happens
+ when a method is redeclared improperly at leat.
+
+ Thu Apr 1 12:06:03 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-typeck.c (convert_for_assignment): Check if `rhs' is an
+ error_mark_node before looking to see if it's of OFFSET_TYPE.
+
+ * cp-decl.c (grokvardecl): Don't use declarator unless it's non-null
+ when looking for a redefinition.
+
+ * cp-typeck.c (convert_for_initialization): Check if `rhs' is a
+ TREE_LIST before looking for its value.
+
+ * cp-init.c (expand_default_init): Don't clear DECL_REGISTER.
+
+ Wed Mar 31 17:57:50 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-spew.c (yylex, case IDENTIFIER): If identifier_typedecl_value
+ returns a NULL_TREE, then set `lastiddecl' to be `trrr'.
+ * cp-lex.c (identifier_typedecl_value): Instead of internal error 62
+ when we don't have a match for `type', return a NULL_TREE since our
+ callers will know what to do in that case.
+
+ * cp-tree.h (IDENTIFIER_TYPEDECL_VALUE): Deleted.
+ (identifier_typedecl_value): Deleted first prototype, kept second.
+ * cp-tree.c (list_hash_lookup_or_cons): Call the function for
+ identifier_typedecl_value, don't use the macro.
+ * cp-spew.c (yylex): Likewise.
+
+ Wed Mar 31 14:43:50 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-cvt.c (convert_from_reference): Make sure we set
+ TREE_SIDE_EFFECTS if we need to. Cures duplicate evaluations in
+ things like: foo.mem(g++) = class_c; where foo.mem returns a
+ reference to a class object.
+
+ Wed Mar 31 13:32:38 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-method.c (report_type_mismatch): Arguments are numbered
+ starting from 1 now.
+
+ Tue Mar 30 17:21:18 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (grokfndecl): When re-using an old decl in place of a
+ new decl, make sure to wipe out the DECL_CHAIN slot, as otherwise
+ this creates a circularity, causing an infinite loop in the compiler
+ later.
+
+ Tue Mar 30 14:14:53 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl2.c (check_classfn): Say which class when giving an error
+ about arglist mismatches or missing members.
+
+ * cp-decl.c (grokdeclarator): For class-local typedefs, call pushtag
+ to make sure the identifier is in scope properly.
+
+ Mon Mar 29 18:05:22 1993 Mike Stump (mrs@cygnus.com)
+
+ lookup_fnfields hacking... Corrects some problems found with Thu
+ Mar 25 23:09:27 1993 vtable fixes.
+
+ * cp-init.c (build_offset_ref): When looking for the component,
+ have lookup_fnfields do the ambiguity checking, as we know it works
+ much better than anything here.
+ * cp-method.c (hack_identifier): If a name is ambiguous, go ahead
+ and report the error.
+ * cp-search.c (lookup_fnfields): Refine semantics and document
+ semantics with respect to ambiguities and returning error_mark_node.
+ Also, extend to be able to find all virtual functions.
+ * cp-search.c (get_virtuals_named_this): Remove unused second
+ argument. Arrange for call to lookup_fnfields to find all virtual
+ functions, even if they are hidden.
+ * cp-search.c (get_first_matching_virtual): Removed unused second
+ argument to get_virtuals_named_this.
+
+ Mon Mar 29 16:42:58 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-method.c (dump_init): If the init value is an enum, then use
+ its tag in the error message, instead of its value.
+
+ * cp-typeck.c (build_binary_op_nodefault): Delete spurious warning
+ about comparision between signed/unsigned (matches C front-end).
+
+ Fri Mar 26 16:30:57 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-parse.y (GCC_ASM_KEYWORD): New token.
+ (asm_keyword): New rule.
+ (extdef, maybeasm, simple_stmt): Use the rule instead of ASM_KEYWORD.
+ (maybe_type_qual): Don't warn about use of asm.
+ * gplus.gperf (__asm, __asm__): Token is GCC_ASM_KEYWORD.
+ * cp-spew.c (init_spew): Add GCC_ASM_KEYWORD.
+
+ * cp-typeck.c (build_unary_op): Fix a bug so errors about ++/-- on
+ invalid pointer types actually get emitted. Don't restrict it to
+ when PEDANTIC is set, and use type_as_string to say what type is
+ being operated on.
+
+ Fri Mar 26 01:21:43 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Don't set TREE_PUBLIC for friends.
+
+ Fri Mar 26 01:09:34 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (pushdecl): Give a pedwarn, not a regular warning, when
+ we shadow a formal parameter.
+
+ * cp-init.c (expand_default_init): Get rid of spurious abort call.
+
+ Thu Mar 25 23:09:27 1993 Mike Stump (mrs@cygnus.com)
+
+ Major vtable re-vamp.
+
+ * cp-call.c (build_method_call): Reword and improve error messages.
+ * cp-class.c (modify_vtable_entries), cp-class.c (finish_struct),
+ cp-init.c (init_vfields), cp-tree.c (virtual_member, virtual_offset),
+ cp-tree.h: Remove third argument to binfo_value, as it is unneeded.
+ * cp-class.c (finish_base_struct): Unshare base class binfos.
+ * cp-decl.c (finish_function): Fixup second argument to
+ build_virtual_init, so as to make it unambiguous.
+ * cp-init.c (build_virtual_init): Use second argument to get the
+ vtable, not the first, as the second is more specific.
+ * cp-search.c (is_subobject_of_p, hides, lookup_fnfields_here): New
+ routines.
+ * cp-seach.c (lookup_field, lookup_fnfields_1): Re-implement. The
+ new implementation allows for better ambiguity checking (10.1.1),
+ and implements most hiding (10p4).
+ * cp-tree.c (binfo_value): Re-implement.
+ * cp-typeck.c (build_component_ref): Propagate error_mark_nodes up.
+
+Thu Apr 1 19:38:53 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * reorg.c (redundant_insn_p): Stop searching for a redundant
+ insn if an INSN or JUMP_INSN with delayed effects is
+ encountered.
+
+Thu Apr 1 12:00:01 1993 Michael Meissner (meissner@osf.org)
+
+ * real.c (toplevel): Add 'extern' keyword in forward declaration
+ of arrays without bounds to silence warnings from the MIPS
+ compiler.
+
+ * i386/osfrose.h (LONG_DOUBLE_TYPE_SIZE): Undef this to protect
+ against long double going to 80 bits until the OSF libraries are
+ ready to handle it.
+
+ * mips/mips.md (untyped_call): Rewrite code so that the MIPS
+ compiler will not issue statement not reached warning messages.
+
+Thu Apr 1 07:28:11 1993 James Van Artsdalen (james@bigtex.cactus.org)
+
+ * expr.c (emit_push_insn, expand_assignment): Fix typo in last change.
+
+Thu Apr 1 02:31:16 1993 Per Bothner (bothner@hal.gnu.ai.mit.edu)
+
+ * emit-rtl.c (init_emit): Clear sequence_stack. Otherwise,
+ if we're in a sequence when starting a nested function
+ expand_function_end () will end all the sequences.
+
+Thu Apr 1 02:11:10 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (LIB2FUNCS): Add _fixunsxfdi, _fixxfdi, _floatdixf,
+ _fixunsxfsi.
+
+ * libgcc2.c (XFtype): Do define it, if LONG_DOUBLE_TYPE_SIZE == 96.
+ (__fixunsxfdi): New function, if LONG_DOUBLE_TYPE_SIZE == 96.
+ (__fixxfdi, __floatdixf, __fixunsxfsi): Likewise.
+
+Wed Mar 31 20:05:19 1993 Michael Meissner (meissner@osf.org)
+
+ * mips.h (CLASS_UNITS): Fix typo in previous change, patch from
+ ian@cygnus.com.
+
+Wed Mar 31 17:18:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * toplev.c (compile_file): Call incomplete_decl_finalize_hook
+ only if nonzero.
+
+Wed Mar 31 00:59:50 1993 Gerald Baumgarnter (gb@cs.purdue.edu)
+
+ * toplev.c (compile_file): Only call `*incomplete_decl_finalize_hook'
+ if the `decl' in question is a VAR_DECL.
+
+Wed Mar 31 15:27:41 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (CONSTANT_ADDRESS_P): Fix typo in last change.
+
+Wed Mar 31 15:11:12 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * clipper/clipper.h, convex/convex.h, elxsi/elxsi.h, fx80/fx80.h,
+ gmicro/gmicro.h, h8300/h8300.h, i386/i386.h, i386/osfrose.h,
+ i860/i860.h, i960/i960.h, m68k/m68k.h, m88k/m88k.h, mips/mips.h,
+ pa/pa.h, pyr/pyr.h, romp/romp.h, rs6000/rs6000.h, sparc/sparc.h,
+ spur/spur.h, tahoe/tahoe.h, vax/vax.h, we32k/we32k.h
+ (CONSTANT_ADDRESS_P): Define with body of `CONSTANT_P', but leave
+ out CONST_DOUBLE.
+
+Wed Mar 31 11:28:21 1993 James Van Artsdalen (james@bigtex.cactus.org)
+
+ * reg-stack.c (emit_swap_insn): Don't link cc0 insns: emit swap
+ after cc0 user.
+
+Wed Mar 31 07:00:45 1993 Richard Kenner (kenner@apple-gunkies.gnu.ai.mit.edu)
+
+ * expr.c (expand_expr, case ADDR_EXPR): Allow taking the
+ address of any object; used in call-by-reference situations.
+
+ * tree.c (next_type_uid): Move definition to reasonable place.
+ (copy_node): Make new DECL_UID and TYPE_UID as comments say.
+
+ * expr.c (emit_block_move, emit_push_insn, expand_assignment):
+ Size passed to memcpy/bcopy is SIZETYPE, not Pmode.
+
+ * cse.c (simplify_binary_operation, case MULT): When testing for
+ floating-point equality, make sure we do so inside a region
+ protected from traps.
+ * i386.c (standard_80387_constant_p): Likewise.
+
+ * alpha.h (INITIAL_ELIMINATION_OFFSET): Subtract
+ current_function_pretend_args_size from OFFSET for AP.
+
+ * alpha.h (LINK_SPEC): New definition.
+
+ * cse.c (insert_regs): If a REG already is in a class but not
+ in the mode we want, don't do anything to the classes.
+
+Wed Mar 31 02:02:29 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gvarargs.h [__svr4__]: Test only _VA_LIST_ to avoid dup typedef.
+ (This used to be if __SVR4_2__.)
+
+ * local-alloc.c (optimize_reg_copy_1): Don't increment n_calls
+ specially if P is a call_insn.
+
+ * convert.c (convert_to_real): Pass mode arg to REAL_VALUE_ATOF.
+
+Tue Mar 30 17:07:33 1993 Stephen L. Moshier (moshier@world.std.com)
+
+ * real.c: This is a new C file to implement floating point
+ REAL_ARITHMETIC, target machine bit patterns for cross-compilation,
+ and REAL_VALUE_ATOF for decimal input constants in long double
+ XFmode as well as lower precisions.
+
+ * real.h (REAL_VALUE_TO_TARGET_LONG_DOUBLE, REAL_VALUE_TO_TARGET_DOUBLE)
+ (REAL_VALUE_TO_TARGET_SINGLE): New macros.
+
+ * real.h: If REAL_ARITHMETIC is defined or if LONG_DOUBLE_TYPE_SIZE
+ is 96, then define REAL_VALUE_ macros to invoke functions in real.c.
+
+ * real.h (REAL_VALUE_RNDZINT, REAL_VALUE_UNSIGNED_RNDZINT):
+ New macros truncate toward zero to integer value but
+ return REAL_VALUE_TYPE.
+
+ * real.h (REAL_VALUE_TO_DECIMAL): New macro defaults to
+ fprintf if no REAL_ARITHMETIC, otherwise uses real.c for
+ binary to decimal conversion. Use in ASM_OUTPUT_ macros.
+
+ * Makefile.in (real.o): New target.
+ (OBJS): Add real.o.
+
+ * c-lex.c (yylex): Convert real decimal constants directly
+ to the precision specified by the letter at the end of the number.
+ Pass mode arg to REAL_VALUE_ATOF to specify precision.
+ Move the "out of range of double" error check.
+
+ * cp-lex.c (yylex): Redo converting float values to desired type.
+
+ * final.c (split_double) : Use REAL_VALUE macros to extract ints
+ from float mode CONST_DOUBLEs.
+
+ * emit-rtl.c (operand_subword): Use REAL_VALUE_TO_TARGET_SINGLE
+ to convert to target float.
+ If REAL_ARITHMETIC is defined, let real.c handle incompatible host
+ and target floating point bit patterns.
+ (init_emit_once): Add machine_mode argument to REAL_VALUE_ATOF.
+
+ * fold-const.c (real_value_truncate): If REAL_ARITHMETIC, replace
+ by routine of same name in real.c.
+ target_isinf, target_isnan, target_negative): Likewise.
+ (const_binop): Delete `register' from decls using REAL_VALUE_TYPE.
+ (fold_convert): Use REAL_VALUE_TO_INT.
+
+ * rtl.c: Include real.h to get the definition of REAL_VALUE_TYPE.
+
+ * varasm.c (assemble_real): Case TFmode and XFmode invoke
+ ASM_OUTPUT_LONG_DOUBLE.
+
+ * optabs.c (expand_fix): Initialized REAL_VALUE_TYPE
+ confuses some compilers.
+
+ * cse.c (simplify_binary_operation): real_value_truncate
+ returns REAL_VALUE_TYPE.
+ Convert rtx_code into tree_code for argument to REAL_ARITHMETIC.
+
+ * cse.c (simplify_unary_operation): Use new ..._RNDZINT macros
+ instead of casting value of REAL_VALUE_FIX_TRUNCATE
+ and REAL_VALUE_UNSIGNED_FIX_TRUNCATE.
+
+ * explow.c (rtx_to_tree_code): New function.
+
+ * rtl.h (rtx_to_tree_code): Declare.
+
+ * m68k/m68k.c (standard_68881_constant_p): Initialize REAL_VALUE_TYPE
+ binary constants from decimal values. Use REAL_VALUE_... macros.
+ (standard_sun_fpa_constant_p): Likewise.
+ (print_operand, floating_exact_log2): Use REAL_VALUE_... macros.
+ (init_68881_table): New function.
+
+ * m68k/m68k.h (LONG_DOUBLE_TYPE_SIZE): Set to 96, for XFmode support.
+ (ASM_OUTPUT_LONG_DOUBLE_OPERAND) New macro.
+ (ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE): Use REAL_VALUE_... macros.
+ (ASM_OUTPUT_DOUBLE_OPERAND): Likewise.
+ (ASM_OUTPUT_FLOAT_OPERAND): Likewise. Also, new argument CODE.
+ (ASM_OUTPUT_FLOAT): Delete special def for CROSS_COMPILE.
+ (ASM_OUTPUT_LONG_DOUBLE): New macro.
+ (PRINT_OPERAND_EXTRACT_FLOAT): Definitions deleted.
+ (PRINT_OPERAND_PRINT_FLOAT): Definitions deleted.
+
+ * m68k/m68k.md (movxf, tstxf, extendsfxf2, extenddfxf2): New patterns.
+ (truncxfdf2, truncxfsf2, floatsixf2, floathixf2, floatqixf2): Likewise.
+ (ftruncxf2, fixxfqi2, fixxfhi2, fixxfsi2): Likewise.
+ (addxf3, subxf3, mulxf3, divxf3, negxf2, absxf2, sqrtxf2): Likewise.
+
+ * m68k/sun3.h (FUNCTION_VALUE): Use FUNCTION_VALUEX.
+ (FUNCTION_VALUEX): New macro.
+ * m68k/mot3300.h, m68k/news.h (LIBCALL_VALUE): Handle XFmode.
+
+ * m68k/mot3300.h, m68k/tower-as.h:
+ (ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE): Use REAL_VALUE... macros.
+ (PRINT_OPERAND): Likewise.
+ (ASM_OUTPUT_LONG_DOUBLE): New definition.
+ * m68k/news.h (PRINT_OPERAND, ASM_OUTPUT_DOUBLE):
+ Use REAL_VALUE... macros.
+ * m68k/next.h, m68k/sun2o4.h, m68k/sun3.h, m68k/altos3068.h:
+ (ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE)
+ (ASM_OUTPUT_FLOAT_OPERAND, ASM_OUTPUT_DOUBLE_OPERAND):
+ Use REAL_VALUE... macros.
+ * m68k/sgs.h (ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE)
+ (ASM_OUTPUT_DOUBLE_OPERAND): Use REAL_VALUE... macros.
+ (ASM_OUTPUT_LONG_DOUBLE): New definition.
+ (ASM_OUTPUT_FLOAT_OPERAND): New macro.
+ (PRINT_OPERAND_PRINT_FLOAT): Deleted.
+
+ * m68k/3b1.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT):
+ Use new REAL_VALUE... macros.
+ (ASM_OUTPUT_LONG_DOUBLE): New definition.
+
+ * m68k/hp320.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT)
+ (PRINT_OPERAND_FLOAT, PRINT_OPERAND): Use new REAL_VALUE... macros.
+ (ASM_OUTPUT_LONG_DOUBLE): New macro.
+
+ * m68k/crds.h (ASM_OUTPUT_DOUBLE, PRINT_OPERAND):
+ Use new REAL_VALUE... macros.
+
+ * vax.h (PRINT_OPERAND, ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE):
+ Use new REAL_VALUE... macros.
+ (CHECK_FLOAT_VALUE): Call check_float_value.
+ * vax.c (check_float_value): New function.
+
+ * vaxv.h (ASM_OUTPUT_DOUBLE): Use new REAL_VALUE... macros.
+
+ * alpha.h (ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE):
+ Use new REAL_VALUE... macros.
+ (REAL_ARITHMETIC): Defined.
+
+Tue Mar 30 17:07:33 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ For Tege:
+ * pa.md (sminsi3, smaxsi3): Fix bugs in last addition.
+
+Tue Mar 30 16:52:15 1993 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Bump Meissner version to 37.
+ (CLASS_MAX_NREGS): Make floats in gp registers only use one
+ register, and only allocate one float register instead of a
+ register pair if -mfloat64 is used.
+
+Tue Mar 30 05:40:26 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (record_dead_and_set_regs): Record death of all
+ hard regs when a multi-reg object in hard regs dies.
+ (move_deaths): Handle the case when we only have to move
+ part of a multi-register death note.
+ * rtlanal.c (find_regno_note): Find note that overlaps REGNO,
+ not just one that mentions REGNO explicitly.
+
+ * reload.c (form_sum): Use mode of inputs when making new PLUS.
+
+ * genopinit.c: New file.
+ * expr.h (extendtab, fixtab, fixtrunctab, floattab, movstr_optab):
+ New definitions.
+ * expr.c (movstr_optab): No longer static.
+ (init_expr_once): Don't initialize movstr_optab.
+ * optabs.c (extendtab, fixtab, fixtrunctab, floattab): Not static.
+ (init_extends, init_fixtab, init_floattab): Deleted.
+ (init_optabs): Move active stuff from above functions in.
+ Delete filling of optabs.
+ Call init_all_optabs.
+ * reload1.c (init_reload): Don't initialize optabs here.
+ * Makefile.in (OBJS): Add insn-opinit.o.
+ (insn-opinit.o, insn-opinit.c, stamp-opinit): New rules.
+ (genopinit, genopinit.o): Likewise.
+
+ * reload1.c (emit_reload_insns): Properly track what was reloaded
+ into what register when what we reloaded was a hard register group.
+
+Mon Mar 29 17:35:04 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.md (movsi+2): Add f/f constraint case.
+
+ * sched.c (schedule_block): Reset n_ready if schedule_select
+ removes all insns from ready list.
+
+ * i960.h (FUNCTION_PROFILER): Call output_function_profiler.
+ (CALL_USED_REGISTERS): Add more comments about register usage.
+ * i960.c (i960_function_prologue): When profiling, don't use those
+ registers clobbered around an mcount call.
+ (output_function_profiler): New function.
+
+Mon Mar 29 13:57:28 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-iterate.c (collect_iterators): Cast tree code to int for indexing.
+
+Mon Mar 29 06:28:57 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (num_sign_bit_copies, case PLUS, case MULT):
+ Replace occurrences of HOST_BITS_PER_INT with HOST_BITS_PER_WIDE_INT.
+
+ * reload.c (secondary_memlocs_elim): Now one per mode per operand.
+ (get_secondary_mem, combine_reloads): Reflect changed var above.
+ (clear_secondary_mem): Use bzero.
+
+ * genrecog.c: Add prototypes for all functions defined in file.
+ Change a few occurrences of RTX_CODE to enum rtx_code for consistency.
+ (merge_trees): Add casts of args to mybcopy.
+ (write_tree_1): Now static.
+ (fatal): Always called with one arg, so define that way.
+
+ * reload.h: Add missing declarations for external functions
+ in reload.c, reload1.c, and caller-save.c.
+ (reload_strict_low, reload_needed_for_multiple, reload_needed_for):
+ Deleted.
+ (reload_opnum): New array.
+ (enum reload_type): Renamed from reload_when_needed and expanded
+ to include more reload types.
+ (reload_n_operands): New variable.
+ * reload.c: Add prototypes for all static functions and clean up
+ some definitions.
+ (struct decompose): Move to before function declarations.
+ (secondary_memlocs_elim): One per operand, not per mode.
+ (get_secondary_mem): Accept and use reload description (opnum
+ and type).
+ (push_reload): Accept and use new reload description instead of
+ old NEEDED_FOR.
+ Define two new macros: MERGEABLE_RELOADS and MERGE_TO_OTHER.
+ Use these macros to see if reloads can be merged and how to do it.
+ (transfer_replacements): New function.
+ (combine_reloads): Refine when we can combine reloads.
+ (find_reloads): Use new method of tracking what a reload is for.
+ When we make a CLOBBER insn, do so with DImode.
+ Merge cases of making optional reloads, avoid making output-only
+ optional reloads, refine when we may not make in-out optional reloads,
+ and make an optional reload for a pair of matching operands.
+ (find_reloads_toplev, find_reloads_address{,_1, part}): Accept and
+ use reload description.
+ (forget_volatility): Delete long-obsolete function.
+ * reload1.c: Add prototypes for static functions.
+ (REGISTER_MOVE_COST, MEMORY_MOVE_COST): Include default definitions.
+ (reload): Count number of registers needed for insn using new
+ reload type information.
+ If mode of insn is DImode, don't change it.
+ Refine the way we handle conflict with the return value register.
+ Don't try to account for needs already covered by previously
+ spilled registers; instead, put them back in the front of
+ potential_reload_regs and let them be allocated again.
+ (order_regs_for_reload): Don't restrict regs explicitly used if
+ we have SMALL_REGISTER_CLASSES defined.
+ (reload_as_needed): Don't need to deactivate optional reloads
+ ever; if they inherit, it must have been safe.
+ Call merge_assigned_reloads if SMALL_REGISTER_CLASSES.
+ (reload_reg_used_*): Refine our tracking of reload reg usage
+ by defining more of these HARD_REG_SETs.
+ (mark_reload_reg_in_use, reload_reg_free_p): Rework to use new
+ method of describing where a reload register is used.
+ (reload_reg_free_before_p, reload_reg_reaches_end_p): Likewise.
+ (allocate_reload_reg): Pass new reload descriptions.
+ (choose_reload_regs): Likewise.
+ Save and restore the new HARD_REG_SETs.
+ Remove now-redundant code to prevent conflicts.
+ (merge_assigned_reloads): New function.
+ (emit_reload_insns): Output each reload type into its own
+ sequence, then output the sequences in the proper order.
+ Put our output reloads after a CLOBBER made by find_reloads.
+ Pass ALL_REGS to find_equiv_regs; nothing special about
+ GENERAL_REGS.
+ Don't use an old equivalence if doing so would be more expensive.
+ Clean up tracking of values still in reload regs using reload
+ description info to see if the reload reaches the end of the insn.
+ (gen_input_reload): Pass reload description and emit insns to end of
+ current sequence.
+ (inc_for_reload): Return void; no longer need INSN as operand.
+ Emit insns to end of current sequence.
+
+Mon Mar 29 02:59:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (expand_expr, case MAX_EXPR/MIN_EXPR): If mode is
+ multiword int, use do_jump_by_parts_greater_rtx to compare efficiently.
+ (do_jump_by_parts_greater_rtx): New function.
+
+Sun Mar 28 20:26:11 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * calls.c (expand_call): Always allocate TARGET in mode of
+ result expression; VALREG might have been promoted.
+ Ensure TARGET is a REG when checking for promotion and verify
+ that we get back the mode we expect.
+
+Sun Mar 28 18:49:12 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (store_parm_decls): Use pedwarn for "promoted arg doesn't
+ match prototype" warning.
+
+ * expr.c (expand_expr): For COMPONENT_REF, don't force_reg op0
+ if it is BLKmode.
+
+Sun Mar 28 16:25:59 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.md (smin, umin, smax, umax): New patterns.
+
+ * Support nullification of conditional branch delay slots on
+ the PA.
+
+ * pa.md (cbranch define_delay): Enable nullification of
+ conditional branch delay slots (based upon branch direction).
+ (conditional branch patterns): Call output_cbranch to get the
+ correct output template. Long conditional branches with an
+ annulled delay slot have a length of 3.
+ (branch on bit patterns): Call output_bb to get the correct
+ output template. Long branches with an annulled delay slot have
+ a length of 3.
+ (decrement and branch pattern): Handle nullification of long
+ backward branches. Such branches have lengths of either 3 or 6.
+
+ * pa.c (output_cbranch): New function. Given the operands of the
+ branch, possible nullification, length of the branch, possible branch
+ negation, and the branch insn itself, return the output template for
+ the desired conditional branch.
+ (output_bb): Likewise, but for branch on bit.
+
+ * pa.h (toplevel): Declare output_bb.
+
+ * genattr.c (main): Output ATTR_FLAG masks.
+
+ * rtl.def (ATTR_FLAG): New RTL code.
+
+ * genattrtab.c (write_eligible_delay): Add new variable
+ "flags" to the generated functions. All callers changed.
+ (check_attr_test): Handle ATTR_FLAG.
+ (clear_struct_flag): Likewise.
+ (count_sub_rtxs): Likewise.
+ (write_test_expr): Likewise.
+
+ * reorg.c (ANNUL_IFTRUE_SLOTS, ANNUL_IFFALSE_SLOTS): Add new
+ flags variable to these dummy macros.
+ (get_jump_flags): New function.
+ (optimize_skip): Get jump flags information from the delay insn.
+ (steal_delay_list_from_target): Get jump flags information from the
+ delay insn and the label of the trial jump.
+ (steal_delay_list_from_fallthrough): Get jump flags information
+ from the delay insn.
+ (try_merge_delay_insns): Likewise.
+ (fill_simple_delay_slots): Likewise.
+ (fill_slots_from_thread): Likewise.
+ (make_return_insn): Likewise.
+
+Sun Mar 28 00:36:04 1993 Richard Stallman (rms@wookumz.gnu.ai.mit.edu)
+
+ * fixincludes: Move comments about big sed command outside the
+ command itself.
+
+ * toplev.c (lang_options): Add -W{no-,}missing-braces.
+
+ * c-typeck.c (process_init_constructor, digest_init):
+ Check and set new static var partial_bracket_mentioned.
+
+ * c-lex.c: Updated for recent change in c-parse.gperf.
+
+Sat Mar 27 13:43:27 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * Trampoline support from Jukka Virtanen.
+ * pa.md (cacheflush): New pattern.
+ * pa.h (TRAMPOLINE_TEMPLATE): Define for the PA.
+ (TRAMPOLINE_SIZE): Define for the PA.
+ (INITIALIZE_TRAMPOLINE): Define for the PA.
+
+Sat Mar 27 08:22:25 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (expand_function_start): When evaluating sizes of
+ variable types, do so just for side-effects (the SAVE_EXPRs).
+ * stor-layout.c (variable_size): Likewise.
+
+ * va-alpha.h: Major rework to agree with new calling sequence.
+ Should have been installed with Feb 10th changes.
+
+ * rs6000.md (mov[qhs]i): Allow moving a special reg to itself.
+
+Sat Mar 27 03:13:46 1993 Richard Stallman (rms@wookumz.gnu.ai.mit.edu)
+
+ * config/sparc/sparc.c (S_MODES, D_MODES, T_MODES):
+ Accept only those complex modes that are small enough.
+ Rewrite to make the expressions simpler.
+
+Fri Mar 26 17:07:31 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-tree.h, output.h: Use STDIO_PROTO for prototypes with FILE.
+
+ * input.h: Add standard copyright notice.
+
+ * caller-save.c: Add prototypes for static functions.
+ (choose_hard_reg_mode): Add missing parameters declaration.
+
+ * a29k.md (multiply/multiplu/mulm/mulmu insns): These clobber Q.
+
+Fri Mar 26 06:23:31 1993 Tom Wood (wood@next.com)
+
+ * i960.h (FUNCTION_VALUE_REGNO_P): Change to agree with
+ FUNCTION_VALUE.
+ * pyr.h, spur.h (INCOMING_REGNO, OUTGOING_REGNO): Define.
+ * arm.md (untyped_call, blockage): New patterns.
+
+Fri Mar 26 02:09:02 1993 Richard Stallman (rms@wookumz.gnu.ai.mit.edu)
+
+ * configure (sparc-tti-*, m68k-tti-*): Don't set use_collect2.
+
+Fri Mar 26 01:05:43 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ Cygnus<->FSF merge.
+
+ Thu Mar 25 18:19:19 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-cvt.c (convert_to_reference), cp-init.c (expand_aggr_init_1):
+ Don't try to do more than one level of user defined conversions,
+ avoids an infinite loop. Uses LOOKUP_NO_CONVERSION.
+
+ Wed Mar 24 16:28:17 1993 Per Bothner (bothner@rtl.cygnus.com)
+
+ * cp-call.c (build_method_call): Fix handling of foo->~Class().
+
+ Sat Mar 20 12:29:37 1993 Michael Tiemann (tiemann@rtl.cygnus.com)
+
+ * cp-pt.c (tsubst): Don't get faked out by the fact that ctors and
+ dtors have the same method name and can have the same signature.
+
+ Fri Mar 19 15:58:34 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-pt.c (tsubst): Call build_decl_overload for the new
+ instantiation.
+
+ Thu Mar 18 19:09:39 1993 Ken Raeburn (raeburn@cygnus.com)
+
+ * cp-decl2.c (flag_implement_inlines): New variable.
+ (lang_f_options): Recognize "implement-inlines".
+ * toplev.c (lang_options): Recognize -f[no-]implement-inlines.
+ * cp-decl.c (flag_implement_inlines): Declare it.
+ (start_function): If it's clear, functions declared inline are
+ external under `#pragma implementation'.
+
+ Tue Mar 2 16:24:39 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-typeck.c (c_expand_return): If operand 0 is a TREE_LIST, then
+ make sure to use its value.
+
+ Mon Mar 1 14:22:12 1993 Bill Cox (bill@rtl.cygnus.com)
+
+ * cp-decl.c (push_level_decl): Add cast to correct push_stack_level
+ parameter.
+
+ Mon Mar 1 10:19:38 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-lex.c (do_identifier): Improve wording on error message.
+
+ Wed Feb 24 19:54:46 1993 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-typeck.c (commonparms, convert_for_assignment): Number
+ arguments starting at 1 in error messages to match the C front-end.
+
+ Wed Feb 24 14:55:54 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-search.c (saw_first_vbase): Deleted.
+ cp-search.c (dfs_walk): When walking the class lattice, use the last
+ virtual base class seen, not the first. Fixes major problem
+ introduced on Tue Oct 6 17:54:09 1992 that prevents multi-level
+ virtual base classes from working.
+
+ Mon Feb 22 18:07:23 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-search.c (get_base_distance_recursive): When searching, if the
+ object refers to the same object as before, but just found along a
+ different path, the object is not ambiguous. Fixes problem
+ introduced on Feb 16 22:47:29 1993.
+
+ Wed Feb 17 15:12:12 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl2.c (grok_function_init): Pure virtual descructor must be
+ defined, and calls to them generated. Now conforms with ANSI C++
+ working paper dated September 17, 1992 12.4.5.
+
+ Tue Feb 16 22:47:29 1993 Mike Stump (mrs@cygnus.com)
+
+ Implement a new searching scheme for base classes and use it to
+ ensure only related virtual function slots are filled in by
+ modify_vtable_entries. Affects get_base_distance and get_binfo
+ answers. Cures InterViews doc problem. Solves the problem of
+ calling the wrong virtual function in the presence of multiple
+ inheritance.
+
+ * cp-search.c (get_binfo_recursive, get_base_distance_recursive):
+ New routines that use a depth first search strategy instead of
+ breadth first.
+ * cp-search.c (get_binfo): Re-implement, and use
+ get_binfo_recursive.
+ * cp-search.c (get_base_distance): Re-implement, and use
+ get_base_distance_recursive.
+
+ * cp-class.c (related_vslot): New routine to ensure that only
+ vfields that are related to the given base_fndecl are modified.
+ Relies upon new searching scheme for base classes.
+ * cp-class.c (modify_vtable_entries): Use related_vslot to ensure
+ that only slots related to the base virtual function are filled in.
+
+ * cp-class.c (build_vtable, prepare_fresh_vtable, finish_struct),
+ cp-tree.h: Remove DECL_VPARENT.
+
+ * cp-class.c (get_vtable_entry): Use unsigned when dealing with
+ DECL_VINDEXes.
+ * cp-class.c (finish_struct): Use get_vtable_entry instead of open
+ coding that routine here.
+
+ Fri Feb 12 10:24:52 1993 Brendan Kehoe (brendan@cygnus.com)
+
+ * cp-decl.c (sigsegv): Check if SIGIOT is defined first. Also check
+ for SIGILL and SIGABRT.
+ (init_decl_processing): Likewise; set up handlers for SIGILL and
+ SIGABRT.
+
+ Thu Feb 11 10:30:59 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-type2.c (readonly_error): New arg `SOFT', to pedwarn instead of
+ error.
+ * cp-typeck.c, cp-cvt.c, cp-tree.h: Modify callers appropriately.
+
+ Tue Feb 9 10:02:58 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-lex.c (real_yylex): When parsing an exponent, check for 'e' and
+ 'E' explicitly.
+
+ * cp-typeck.c (build_unary_op): Disallow taking the address of
+ the `main' fn.
+ * cp-decl.c (grokdeclarator): Check for the length of ORIGINAL_NAME
+ being 4, and that it starts with 'm', before calling strcmp.
+
+ * cp-type2.c (readonly_warning_or_error): Rename to readonly_error,
+ make it now ARM compliant by emitting a hard error, instead of a
+ pedwarn.
+ * cp-cvt.c, cp-typeck.c: Change all callers.
+ * cp-tree.h (readonly_error): Rename prototype.
+
+ Sun Jan 31 09:58:16 1993 Niklas Hallqvist (niklas at della.appli.se)
+
+ * cp-typeck.c (build_modify_expr): Accept taking the address of a
+ temporary generated by an explicit constructor call, but generate
+ a warning.
+
+ Mon Feb 8 10:45:56 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Demangle DECLARATOR if it's an operator.
+
+Thu Mar 25 11:38:02 1993 Richard Stallman (rms@wookumz.gnu.ai.mit.edu)
+
+ * cccp.c (do_include):
+ For "..." case, leave fend pointing at terminating 0.
+ Distinct error msgs for empty file name and for bad syntax.
+
+ * Makefile.in (USER_H): Add va-clipper.h.
+
+Thu Mar 25 07:01:14 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * calls.c (store_one_arg): Fix typo in previous change.
+
+Thu Mar 25 03:37:51 1993 Mike Stump (mrs@hal.gnu.ai.mit.edu)
+
+ * c-lang.c (lang_identify), cp-lex.c (lang_identify), objc-act.c
+ (lang_identify), tree.h (lang_identify): New routine.
+ * defaults.h (ASM_IDENTIFY_LANGUAGE) New macro used to identify
+ which front-end produced the object file. Ports that do not
+ define ASM_IDENTIFY_GCC will automatically get a reasonable
+ definition for ASM_IDENTIFY_LANGUAGE, ports that do define
+ ASM_IDENTIFY_GCC for any reason may want to define
+ ASM_IDENTIFY_LANGUAGE as done here.
+ * toplev.c (output_lang_identify): New routine to identify which
+ front-end produced the object file.
+ * toplev.c (compile_file): Use ASM_IDENTIFY_LANGUAGE if it exists.
+
+Wed Mar 24 17:53:11 1993 Richard Stallman (rms@wookumz.gnu.ai.mit.edu)
+
+ * c-parse.gperf: Change __cimag__ to __imag__, __creal__ to __real__,
+ to void rejection by gperf.
+
+Tue Mar 23 18:43:14 1993 Holger Teutsch (holger@hotbso.rhein-main.de)
+
+ * clipper.md: Assign "fp" attribute to fp insns. Add DImode
+ insns for widening mul, shift and rotate. Remove 'decrement, test
+ and branch' combination patterns. They are not reloadable.
+
+ * clipper.h (HARD_REGNO_MODE_OK): DImode regs must start on even
+ registers.
+
+ * gstdarg.h, gvarargs.h: Use va-clipper.h.
+
+ * config.sub: Default to clipper-intergraph if system is clix.
+ * configure (clipper-intergraph-clix*): New configuration.
+ * clipper.h, clipper.c, clipper.md: New files.
+ * x-clix, t-clix, xm-clix.h, clix.h: New files.
+
+Wed Mar 24 1993 18:54:51 Paul Eggert (eggert@twinsun.com)
+
+ * fixincludes (memory.h):
+ Use proper ANSI syntax in `#endif __memory_h__'.
+
+Wed Mar 24 12:52:40 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.md (sh[123]add): Collapse into a single pattern.
+ (sh[123]add for reload): Likewise.
+ * pa.c (shadd_operand): New function.
+ (print_operand): Handle '%O' for shadd patterns.
+
+Wed Mar 24 08:03:31 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.h (EXTRA_SECTION_FUNCTIONS, ASM_DECLARE_FUNCTION_NAME):
+ Don't output tab before .csect pseudo-op.
+
+Wed Mar 24 02:01:14 1993 Richard Stallman (rms@wookumz.gnu.ai.mit.edu)
+
+ * config/pyr/pyr.h (NO_DOT_IN_LABEL): Defined.
+
+ * tree.c (stabilize_reference_1): For division and remainder,
+ make a save_expr.
+
+Tue Mar 23 14:51:07 1993 Jim Wilson (wilson@geech.gnu.ai.mit.edu)
+
+ * alpha.h, i386/sysv4.h, mips.h, rs6000.h (RETURN_IN_MEMORY):
+ Delete struct and union references.
+ * sparc.h (RETURN_IN_MEMORY): Update comment.
+ * h8300.h, 386bsd.h, linux.h, i386/mach.h, i386/osfrose.h,
+ i860/mach.h, i960.h, hp2bsd.h, hp3bsd.h, hp3bsd44.h, next.h,
+ sun3mach.h, m88k.h, ns32k/pc532-mach.h, pa-utahmach.h, pa1-utahmach.h,
+ rs6000/mach.h (DEFAULT_PCC_STRUCT_RETURN): Define to 0.
+ * toplev.c (DEFAULT_PCC_STRUCT_RETURN): Add default definition of 1.
+ (flag_pcc_struct_return): Default to DEFAULT_PCC_STRUCT_RETURN.
+ (f_options): Add -freg-struct-return flag.
+
+Tue Mar 23 07:43:18 1993 Tom Wood (wood@next.com)
+
+ * emit-rtl.c (push_topmost_sequence, pop_topmost_sequence): New
+ functions.
+ * expr.c (expand_builtin, BUILT_IN_SAVEREGS): Use these to put the
+ code at the start of the function, even when inside a sequence.
+
+ * tree.h (enum built_in_function): Add BUILT_IN_APPLY_ARGS,
+ BUILT_IN_APPLY, and BUILT_IN_RETURN.
+ * c-decl.c (init_decl_processing): Declare __builtin_apply_args,
+ __builtin_apply, and __builtin_return.
+ * function.h (struct function): Add apply_args_value field.
+ * expr.c (apply_args_value): New variable.
+ (init_expr, save_expr_status, restore_expr_status): Initialize,
+ save, and restore apply_args_value.
+ (expand_builtin): Implement new built-in functions.
+ (apply_args_mode, apply_result_mode): New variables.
+ (apply_args_size, apply_result_size, result_vector,
+ expand_builtin_apply_args, expand_builtin_apply,
+ expand_builtin_return): New functions.
+ (INCOMING_REGNO, OUTGOING_REGNO): Supply default definitions.
+ * sparc.h (INCOMING_REGNO, OUTGOING_REGNO): Define.
+ * sparc.md (untyped_call, untyped_return): New patterns.
+ * i386.h (APPLY_RESULT_SIZE): Define.
+ * i386.md (untyped_call, untyped_return): New patterns.
+ * m68k/isi.h, m68k/m68k.h, m68k/m68kv4.h, m68k/mot3300.h
+ (NEEDS_UNTYPED_CALL): Define.
+ * m68k.md, fx80.md, gmicro.md, i860,md, ns32k.md
+ (untyped_call, blockage): New patterns.
+ * mips.md (untyped_call): New pattern.
+
+Tue Mar 23 06:38:36 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * calls.c (store_one_arg): Use int_size_in_bytes and
+ expr_size when appropriate instead of size_in_bytes.
+
+ * regclass.c (record_reg_classes): When an alternative requires
+ a match, but we do it with a copy into a register, that alternative
+ wins.
+
+ * cse.c (CHEAP_REG): Add missing parens.
+
+ * expr.h: Don't declare fns that use "tree" if tree.h not included.
+ (emit_call_1): Remove decl.
+ (promoted_input_arg): Add prototype.
+ (fix_lexical_addr): Remove duplicate decl.
+ (copy_function_value, expand_stmt_expr): Delete; no such functions.
+ * calls.c: Include gvarargs.h.
+ Add prototypes to forward declarations and declare static functions.
+ (emit_call_1): Now static.
+ (emit_library_call, emit_library_call_value): Move to here.
+ * expr.c: Don't include gvarargs.h.
+ (emit_library_call, emit_library_call_value): Delete from here.
+ * Makefile.in (expr.o): Doesn't include gvarargs.h.
+ (calls.o): Now includes gvarargs.h.
+
+ * dbxout.c (dbxout_type): Use int_size_in_bytes instead of
+ size_in_bytes for consistency with other code.
+
+ * calls.c (expand_call): Use expr_size instead of doing it ourself.
+
+Mon Mar 22 19:15:17 1993 Richard Stallman (rms@wookumz.gnu.ai.mit.edu)
+
+ * function.c (fixup_var_refs_insns): Don't delete an insn copying
+ var to itself, if it's the end of a libcall group.
+
+Mon Mar 22 15:28:48 1993 Paul Eggert (eggert@twinsun.com)
+
+ * fixincludes: Use `set x $y; shift', not `set - $y', to avoid
+ altering sh options. Fix `#endif foo' constructions. Clean up
+ all DONE files.
+
+Mon Mar 22 17:02:58 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * expr.h (MUST_PASS_IN_STACK): Make machine parameter.
+
+Mon Mar 22 01:38:41 1993 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * reload1.c (eliminate_regs): Eliminate regs within a CLOBBER.
+
+ * emit-rtl.c (init_emit): Use INIT_EXPANDERS.
+
+ * i386.c (output_fix_trunc): Use MEMs in insn as stack temps.
+ No need to allocate & deallocate stack space on the fly.
+
+ (clear_386_stack_locals): New function.
+ (assign_386_stack_local): New function.
+
+ * i386.h (PREFERRED_RELOAD_CLASS): Only narrow MODE_FLOAT reloads
+ from ALL_REGS to GENERAL_REGS.
+ (PREFERRED_OUTPUT_RELOAD_CLASS): Deleted.
+
+ (INIT_EXPANDERS): New macro.
+
+ * i386.md (movsf,movdf): Use an input reload for MEM-MEM moves.
+ (extendsfdf2): Don't allow GENERAL_REGS in any operand.
+
+ (truncdfsf2): Allocate a stack temp in expander.
+ Use that in the output function.
+ (fix_truncMN2,fixuns_truncMN2): Likewise.
+ Allocate scratch reg from Q_REGS.
+
+Sun Mar 21 17:24:09 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * toplev.c (compile_file): If warning about a function
+ declared static but not defined, make the function extern.
+
+ * cccp.c (collect_expansion): Don't make # special in argless macro.
+
+ * toplev.c (incomplete_decl_finalize_hook): New variable.
+ (compile_file): Call incomplete_decl_finalize_hook.
+ * c-decl.c (init_decl_processing): Set that var.
+ (finish_incomplete_decl): New function.
+ (complete_array_type): Use 0 as default maxindex.
+ * tree.h (incomplete_decl_finalize_hook): Declared.
+
+Sun Mar 21 16:30:22 1993 Michael Meissner (meissner@osf.org)
+
+ * t-osfrose (CONFIG2_H): Change include file name to osfrose.h.
+
+ * halfpic.h (prototype support): Fix recent changes for
+ prototypes, so it compiles again.
+
+ * configure (ns32k-encore-osf): Delete, last ns32k OSF/rose
+ machine turned off.
+
+ * encrose.h, x-encrose, t-encrose: Delete, no longer used.
+
+Sun Mar 21 16:20:04 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * integrate.c (copy_rtx_and_substitute, case USE):
+ Don't remove a subreg if ORIG had one.
+
+Sun Mar 21 01:50:07 1993 Pat Rankin (rankin@eql.caltech.edu)
+
+ * c-common.c: #include "obstack.h".
+ * config/vax/xm-vms.h [VAXC]: Work around stdio.h's FILE_TYPE.
+ * vmsconfig.com: When making tm.h from config/vax/vms.h, change
+ any #include "vax/*.h" directives to use native VMS file syntax.
+
+Sat Mar 20 22:46:31 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (INSN_SETS_ARE_DELAYED): Define for the PA. Sets and
+ clobbers that occur in millicode insns are delayed effects.
+ (INSN_REFERENCES_ARE_DELAYED): Likewise, but for operand references
+ occuring in millicode insns.
+ * reorg.c (mark_referenced_resources): Parameter
+ include_called_routine changed to include_delayed_effects. All
+ references changed.
+ (mark_set_resources): Likewise.
+ (insn_references_resource_p): Likewise.
+ (insn_sets_resource_p): Likewise.
+ (mark_referenced_resources, case INSN): Do not mark any resources
+ as referenced if we are not including delayed effects, and the
+ given insn has delayed effects.
+ (mark_set_resources): Likewise for resources which are set/clobbered.
+ (fill_simple_delay_slots): Include delayed effects for the delay insn
+ if we are searching after the delay insn for candiates.
+ (dbr_schedule): When initializing `end_of_function_needs' include
+ delayed effects.
+
+Sat Mar 20 18:54:46 1993 Michael Meissner (meissner@osf.org)
+
+ * mips.h (TARGET_SWITCHES): Or in TARGET_CPU_DEFAULT for default
+ case.
+ (TARGET_CPU_DEFAULT): Default to 0.
+
+Sat Mar 20 14:52:26 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (singlemove_string): Declare.
+
+ * configure: Add support for 4.4BSD on hp300s.
+ * hp3bsd44.h, x-hp3bsd44.h: New files for 4.4BSD on hp300s
+
+ * pa.md (conditional branch patterns): Clean up constraints.
+
+ * pa.md (shadd reload patterns): Clean up output templates.
+
+Sat Mar 20 11:23:15 1993 Torbjorn Granlund (tege@gnu.ai.mit.edu)
+
+ * expmed.c (init_expmed): Fix typo in last change.
+
+Sat Mar 20 07:11:54 1993 Richard Kenner (kenner@apple-gunkies.gnu.ai.mit.edu)
+
+ * expr.c (get_inner_reference): Simplify code by initializing OFFSET
+ to integer_zero_node.
+ Do general index computation for ARRAY_REF and include lower bound
+ of domain in calculation.
+ (expand_expr, case ARRAY_REF): Include lower-bound in index
+ computation.
+
+ * fold-const.c (fold, case PLUS_EXPR): Don't associate apart
+ a constant operand.
+
+ * combine.c (make_compound_operation): Call recursively in the
+ cases where we find a simplification.
+ (make_compound_operation, case SUBREG): If the recursive call
+ changes the rtx code and this is an appropriate SUBREG, use
+ force_to_mode.
+
+Sat Mar 20 03:16:52 1993 Richard Stallman (rms@wookumz.gnu.ai.mit.edu)
+
+ * print-tree.c (print_node): Print the chain of a STRING_CST.
+
+ * c-lex.c (yylex): Copy the string value we get from __FUNCTION__.
+
+Fri Mar 19 21:06:41 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * expr.h: Correct partly nested comment.
+
+ From Bill Cox (bill@cygnus.com):
+ * cp-decl.c (push_level_decl): Add cast to correct push_stack_level
+ parameter.
+ * cse.c (cse_process_notes): Replace NULL_RTX with just zero.
+ * function.h, halfpic.h, integrate.h, loop.h, machmode.h, output.h,
+ recog.h, reload.h, stack.h: Add prototypes.
+ * genattr.c (gen_attr): Generate prototypes in header file.
+
+ * xcoffout.h (DEBUG_SYMS_TEXT): Define.
+ * xcoffout.c (xcoffout_declare_function): Call dbxout_source_file
+ before emitting .function psuedo-op.
+
+Fri Mar 19 17:45:13 1993 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Bump Meissner version to 36.
+ (TARGET macros): Move this section to be earlier than
+ ASM_FINAL_SPEC.
+ (ASM_FINAL_SPEC): If configured with --with-gnu-as or as a cross
+ compiler, do not run mips-tfile unless -mmips-as is used.
+
+ * configure (target_cpu_default): Set to 16 when configuring a
+ MIPS using the GNU assembler.
+
+Fri Mar 19 06:27:34 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expmed.c (synth_mult): Don't try to make recursive call if
+ we would be shifting by a negative number.
+ (expand_mult): Don't negate VAL if it is negative.
+
+ * cse.c (simplify_plus_minus): Count CONSTs coming in and going
+ out; we have simplified things if we have more CONSTs going out
+ even if we have the same number of total terms.
+
+ * expmed.c (zero_cost): New variable.
+ (init_expmed): Always pass some insn to recog.
+ Set shift_cost[0], shiftadd_cost[0] and shiftsub_cost[0] to
+ something reasonable.
+ Compute zero_cost.
+ (enum alg_code): Remove alg_none; add alg_zero and alg_m.
+ (struct algorithm): Rename field COEFF to LOG.
+ (synth_mult): Use new ops alg_zero and alg_m for multiplication by
+ zero and one, respectively.
+ Use MIN when helpful.
+ Be consistent and don't test cost before recursive call.
+ Don't special-case shift counts of zero; already handled elsewhere.
+ (expand_mult): First operation is always alg_zero or alg_m;
+ remaining operations can't be one of those.
+ Use proper subtargets for computations.
+ Remove special-cases for shift counts of zero.
+ Track value computed so far and make REG_EQUAL notes.
+
+Fri Mar 19 01:37:54 1993 Richard Stallman (rms@wookumz.gnu.ai.mit.edu)
+
+ * c-typeck.c (digest_init): Typo in last change.
+ (initializer_constant_valid_p): Handle COMPLEX_CST.
+
+ * expr.c (expand_assignment): Pass to_rtx's mode to expand_expr
+ when assigning a result_decl.
+ (expand_expr): For ERROR_MARK, give back 0 in TMODE if possible.
+
+ * calls.c (emit_call_1): Don't defer pops in const call.
+
+Thu Mar 18 17:02:24 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * c-decl.c (current_function_prototype_file,
+ current_function_prototype_line): New variables.
+ (start_function): Set them.
+ (store_parm_decls): Use them for error and warning messages.
+
+Thu Mar 18 21:28:43 1993 Paul Eggert (eggert@twinsun.com)
+
+ * optabs.c (expand_float): When converting an unsigned type U
+ to a smaller or equal-sized floating type F where there's no
+ hardware support for unsigned-to-float conversion, use a temporary
+ floating type larger than F if possible, since this avoids
+ rounding problems that are worst when U is just greater than
+ the maximum signed integer of the same size.
+
+Thu Mar 18 16:16:21 1993 Richard Stallman (rms@wookumz.gnu.ai.mit.edu)
+
+ * c-typeck.c (digest_init): Handle COMPLEX_TYPE like other scalars.
+
+ * c-parse.in (REALPART, IMAGPART): New token types.
+ (unary_expr): Handle REALPART, IMAGPART.
+
+ * expr.c (expand_expr): Don't ensure ref to a volatile value
+ if it is a function.
+
+ * c-parse.gperf: Add __cimag, __cimag__, __creal, __creal__.
+
+ * collect2.c (output_file): New static var.
+ (main): Set output_file.
+ (my_exit): Delete output_file on failure.
+
+Thu Mar 18 12:39:06 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * function.c (assign_parms): Minor cleanup.
+ * calls.c (expand_call): Fix bug (don't clobber bitpos).
+
+Thu Mar 18 00:08:40 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/vax/vms.h (PCC_STATIC_STRUCT_RETURN): Add #undef.
+
+Wed Mar 17 17:28:17 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.md (pre_ldwm, pre_stwm): Name these patterns to make
+ generating them easier.
+ (post_ldwm, post_stwm): New patterns.
+ (add_high_const): New pattern.
+ (return): New pattern.
+ * pa.c (post_cint_operand): New function.
+ (hppa_can_use_return_insn_p): New function.
+
+Wed Mar 17 17:24:29 1993 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Bump Meissner version to 35.
+ (TARGET_SWITCHES): Add -mlong-calls, delete -mwc* switches.
+
+ * mips.md (call insns & expanders): If -mlong-calls, require
+ function address to be in a register.
+
+ * x-iris (OLDCC): Iris now needs -Wf,-XNh1500 as well.
+
+Wed Mar 17 16:00:29 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (IS_RELOADING_PSEUDO_P): New subroutine for
+ EXTRA_CONSTRAINT.
+ (EXTRA_CONSTRAINT): Use IS_RELOADING_PSEUDO_P. Accept any MEM for
+ `Q' constraint during the reload pass.
+
+ * pa.h (SECONDARY_MEMORY_NEEDED): Define.
+ (SECONDARY_MEMORY_NEEDED_RTX): Define.
+ * pa.c (output_fp_move_double): Remove code to support GR<->FP
+ copies.
+ * pa.md (movqi, movhi, movsi, movdi, movsf, movdf): Remove support
+ for GR<->FP copies.
+ (fix_truncsfsi2, fix_truncdfsi2): Likewise.
+
+Wed Mar 17 14:58:49 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/vax/vms.h (STRUCT_VALUE): Defined.
+ (STRUCT_VALUE_REGNUM): Add #undef.
+
+Wed Mar 17 14:23:25 1993 Torbjorn Granlund (tege@gnu.ai.mit.edu)
+
+ * pa.md (branch-on-bit): New patterns.
+ * pa.c (pc_or_label_operand): New predicate.
+
+Wed Mar 17 02:46:58 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/m68k/m68k.md (movqi): In address reg case, if d0
+ appears in the address, use d1 instead as intermediate reg.
+
+Tue Mar 16 17:42:14 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (FIXED_REGNO_P): Remove previous change; all callers but
+ one already check.
+ (CHEAP_REG): Only call FIXED_REGNO_P for hard regs.
+ (fold_rtx): Clarify comments.
+
+Tue Mar 16 14:55:40 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * x-apollo68 (CFLAGS, LIBGCC2_CFLAGS): Delete overrides and
+ comment why they were wrong.
+
+ * c-decl.c (grokdeclarator, ARRARY_REF): If exern, then end
+ temporary allocation before building type.
+
+ * sparc.h (SECONDARY_MEMORY_NEEDED_RTX): Define.
+ * reload.c (get_secondary_mem): Use macro SECONDARY_MEMORY_NEEDED_RTX.
+
+Tue Mar 16 03:49:13 1993 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * cse.c (FIXED_REGNO_P): Pseudos can't be fixed regs.
+
+Tue Mar 16 04:33:41 1993 Paul Eggert (eggert@twinsun.com)
+
+ * cccp.c (main): Report errors in output to pcp_outfile.
+
+Mon Mar 15 21:30:32 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (write_output): Test value of `write'; report errors.
+ (write_output): Use pfatal_with_name for errors.
+ (out_fname): Var now file-scope.
+
+Mon Mar 15 20:52:17 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (EXTRA_CONSTRAINT, case 'S'): Do not accept CONSTANT_P if
+ TARGET_LONG_CALLS.
+
+ * pa.h (EXTRA_CONSTRAINT): Merge strict and non-strict variants.
+ Delete 'R' constraint.
+
+Mon Mar 15 18:38:22 1993 Torbjorn Granlund (tege@sics.se)
+
+ * expmed.c (lea_max_mul): Delete.
+ (init_expmed): Delete unused variable I.
+ (enum alg_code): New tag alg_shift. Document it.
+ (synth_mult): Delete unused variable N. Handle new trivial case
+ first, for T <= 1. Generalize shifting code to shift whenever a
+ number is even; use alg_shift for this. Set best_alg->ops only in
+ trivial case. Clean up cost calculation code for the `simple
+ case' at the end; use shiftadd_cost when appropriate. Combine
+ declarations of Q and move to top of function. Eliminate use of Q
+ in factoring cases. If we are getting too long a sequence for
+ `struct algorithm' to record, fail.
+ (expand_mult): Handle alg_shift instead of alg_add_t_m2 as first
+ operation. In RLT emit loop, handle alg_shift; special case
+ LOG == 0 for alg_add_t_m2 and alg_sub_t_m2.
+
+Mon Mar 15 16:44:08 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * function.c (assign_parms): Remove unnecessary #ifdef.
+
+Mon Mar 15 14:33:52 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sched.c (reg_known_equiv_p): New variable.
+ (init_alias_analysis): Allocate and compute reg_known_equiv_p.
+ (sched_analyze_1): Reenable code for REG_EQUIV notes, using
+ reg_known_equiv_p so that it is only used on REG_EQUIV notes.
+ (sched_analyze_2): Likewise. Only pass memory addresses to the
+ sched_analyze_2 call.
+
+ * xm-sol2.h (NO_SYS_SIGLIST): Define.
+
+ * i960.c (print_operand_address): For MULT, set ireg not breg.
+
+ * sparc.md (zero_extendqisi2+4,+5): Add new patterns for combining
+ a SI->QI mode truncate with an insn that sets the condition codes.
+
+ * config.sub (sparclite, sparclite-*): New configuration.
+ * configure (sparclite-*-*): Likewise.
+ * sparc/lite.h: New file.
+
+ * sched.c (adjust_priority): Comment unreachable code.
+ (memrefs_conflict_p): Add comment about Fortran aliasing.
+
+Mon Mar 15 13:54:06 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (simplify_plus_minus): Remove last change. Instead,
+ count initial operands and test against that count to see if we
+ did anything.
+
+ * alpha.h (ASM_OUTPUT_{INT,SHORT,CHAR,BYTE}): Truncate constant
+ to maximum range permitted in order to avoid assembler error.
+
+Mon Mar 15 13:37:35 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.md (sh[123]add patterns): Use register_operand, not
+ shadd_operand.
+ (sh[123]add patterns for reload): Special patterns to avoid
+ lossage due to reload problems.
+ * pa.c (shadd_operand): Delete.
+
+Mon Mar 15 00:31:20 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure (rs6000-ibm-aix3.2): Renamed from rs6000-ibm-aix32.
+
+Sun Mar 14 22:54:10 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * reorg.c (find_end_label): Update unfilled_slots if the return
+ insn we make has a delay slot.
+
+Sun Mar 14 21:27:48 1993 Torbjorn Granlund (tege@sics.se)
+
+ * expmed.c (shift_cost): Now a vector.
+ (shiftadd_cost): New vector for cost of (N * a + b) instructions.
+ (shiftsub_cost): New vector for cost of (N * a - b) instructions.
+ (lea_cost): Removed.
+ (init_expmed): Initialize new vectors. Use ASHIFT, not LSHIFT.
+ Remove code initializing lea_cost.
+ (enum alg_code): New definition.
+ (synth_mult): Rewrite for better algorithms and faster operation.
+ (expand_mult): Rewrite code for constant multiplication.
+
+Sun Mar 14 06:34:28 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * objc-act.c (build_objc_symtab_template): Correctly build index
+ type for 0-length array.
+ (build_objc_method_call, get_class_reference, get_super_receiver):
+ Call assemble_external on anything we are about to generate a call to.
+ (handle_class_ref): Put constant in readonly-data section, not text.
+
+ * cse.c (simplify_plus_minus): Reject "simplifications" that are
+ too complex in form.
+ Correct sign error in expanding NOT.
+
+Sun Mar 14 00:02:12 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload1.c (choose_reload_regs): Verify reload_out[j] != 0
+ before comparing with reload_earlyclobber elements.
+
+Sat Mar 13 21:05:12 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * calls.c (emit_call_1): Restore inhibit_defer_pop before popping args
+ so that pops really do get deferred if appropriate.
+
+Sat Mar 13 18:13:30 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (simplify_plus_minus): When seeing if we have reduced the
+ number of operands, ensure we count a CONST result as two operands.
+
+ * calls.c, expr.c: Correctly define PUSH_ARGS_REVERSED.
+
+Sat Mar 13 16:49:10 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.c (eligible_for_epilogue_delay): Insns which access %r2 can
+ not be used to fill the epilogue's delay slot.
+
+Sat Mar 13 15:31:02 1993 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * reg-stack.c (emit_swap_insn): If emitting after a cc0 setter,
+ link the cc0 insns.
+
+Fri Mar 12 17:45:36 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/m68k/xm-mot3300.h (USE_C_ALLOCA): Define if not __GNUC__.
+ * config/m68k/x-alloca-c: New file.
+ * configure (m68k-motorola-sysv*): Use it.
+
+ * expr.c (emit_push_insn): Handle failure of gen_movstr...
+
+ * stor-layout.c (variable_size): Better error for div by 0 in size.
+ * c-decl.c (grokdeclarator): Error for div by 0 in array size.
+
+Fri Mar 12 17:25:35 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c: Add prototypes for static functions.
+ (struct move_by_pieces): Move definition before function
+ forward decls.
+
+ * rs6000.h, a29k.h (PROMOTE_MODE): Fix typo.
+
+ * cse.c (refers_to_mem_p): Use rtx_equal_p to see if bases
+ are equal.
+
+ * cse.c (set_nonvarying_address_components): Fix type mismatch with
+ caller.
+ (refers_to_mem_p): Call properly in second call.
+
+ * jump.c (jump_optimize): Fix bug in last change.
+
+Fri Mar 12 07:25:43 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * optabs.c (expand_binop): For doubleword int addition,
+ clobber the whole register at the start.
+
+Fri Mar 12 03:19:26 1993 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * reg-stack.c (get_true_reg): Don't ignore FLOAT_TRUNCATE.
+ (subst_stack_regs_pat): Substitute in FLOAT_TRUNCATE insns.
+
+ (compare_for_stack_reg): Reset insn code after swapping operands.
+
+ * i386.h (FLOAT_CLASS_P): New macro.
+ (REGISTER_MOVE_COST): Use it instead of comparing to FLOAT_REGS.
+ (PREFERRED_RELOAD_CLASS): Likewise.
+ (SECONDARY_MEMORY_NEEDED): Likewise.
+ (CLASS_MAX_NREGS): Likewise.
+
+ (SELECT_CC_MODE): Use VOIDmode for non-FP-equality comparisons.
+
+ * i386.md (truncdfsf2): Rewrite to allow FLOAT_REGS in constraints
+ for better register preferences.
+
+ (movM): If REG_WAS_0, make sure the reg hasn't changed since then.
+
+ (cmpM expanders): Don't allow both operands to be MEM.
+ Use VOIDmode for the COMPARE rtx instead of CCmode.
+ (cmpM recognizers): Likewise.
+ Remove constraints for constants from operand 0.
+
+ (cmpdf,cmpsf recognizers): When using VOIDmode as mode of the
+ COMPARE rtx, require that the mode be exactly VOIDmode.
+
+ * i386.c (VOIDmode_compare_op): New operand predicate function.
+
+ * vax.md (movM): If REG_WAS_0, make sure the reg hasn't changed
+ since then.
+ * tahoe.md (movM): Likewise.
+
+Thu Mar 11 19:23:51 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * function.c (aggregate_value_p): RETURN_IN_MEMORY now handles
+ BLKmode values.
+ * expr.h (RETURN_IN_MEMORY): Handle BLKmode values.
+ * i386/sysv4.h (RETURN_IN_MEMORY): Ditto.
+ * m88k/m88k.h (RETURN_IN_MEMORY): Ditto.
+ * i960/i960.h (RETURN_IN_MEMORY): Ditto.
+ * m68k/apollo68.h (RETURN_IN_MEMORY): Ditto.
+ * mips/mips.h (RETURN_IN_MEMORY): Ditto.
+ * sparc/sparc.h (RETURN_IN_MEMORY): Ditto.
+ * alpha/alpha.h (RETURN_IN_MEMORY): Ditto.
+ * romp/romp.h (RETURN_IN_MEMORY): Ditto.
+ * rs6000/rs6000.h (RETURN_IN_MEMORY): Ditto.
+ * h8300/h8300.h (RETURN_IN_MEMORY): Ditto.
+
+Thu Mar 11 19:02:55 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.h (RTX_COST, case MULT): Handle s8addx and s4addx.
+ (RTX_COST, case MULT): Correctly assign cost to multiplies by a
+ power of two.
+ (RTX_COST, case ASHIFT, ASHIFTRT, LSHIFTRT, IF_THEN_ELSE): New cases.
+
+ * cse.c (CHEAP_REG): New macro; makes virtual regs cheap too.
+ (COST): Use CHEAP_REG.
+ (rtx_cost, case REG): Use CHEAP_REG to return zero for some REGs.
+
+Thu Mar 11 07:47:09 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.md (FP sCC insn): Delete.
+ (sCC define_expands): FAIL instead of generating FP sCC insns.
+ * pa.c (gen_scond_fp): Delete.
+ * pa.h (toplevel): Delete declaration of gen_scond_fp.
+
+ * cse.c (set_nonvarying_address_components): New function.
+ (invalidate): Use set_nonvarying_address_components instead of
+ computing them.
+ (refers_to_mem_p): Likewise. Simplify checks for conflicting
+ memory accesses. Make static.
+ * loop.c (addr_overlap_p): Delete.
+
+Wed Mar 10 23:52:40 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes: Delete ${LIB}/DONE just before exit.
+
+Wed Mar 10 12:27:51 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.c (reg_or_cint_move_operand): Use cint_ok_for_move.
+
+ * pa.md (add reg and large int): New define splits for the combiner.
+ * pa.c (cint_ok_for_move): New function. Returns 1 iff the given
+ CONST_INT can be loaded into a register in a single instruction.
+ (move_operand): Use cint_ok_for_move.
+
+ * jump.c (jump_optimize, clause for `if (foo) b++'):
+ Do this regardless of BRANCH_COST if HAVE_incscc or
+ HAVE_decscc is defined.
+
+Wed Mar 10 11:50:06 1993 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * pa.md (conditional move): Use %B for output when appropriate.
+ (conditional move with second operand == 0): New pattern.
+ * pa.c (reg_or_cint_move_operand): New function.
+ (move_operand): Add header comment.
+
+Wed Mar 10 01:43:43 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc-act.c (OBJC_GEN_METHOD_LABEL): Convert colons to _'s.
+ Don't use the category name or the number.
+
+ * gcc.c (link_command_spec): New option -nostartfiles.
+
+Tue Mar 9 18:55:43 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * convert.c (convert_to_complex): Avoid using comptypes.
+
+Tue Mar 9 11:33:32 1993 Michael Meissner (meissner@osf.org)
+
+ * objc-act.c (#ifdef NEXT_OBJC_RUNTIME): Close #ifdef properly.
+
+Tue Mar 9 00:03:03 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * flags.h (flag_volatile_global): Declared.
+
+ * c-decl.c (define_label): Use current line number in error msg.
+
+Mon Mar 8 16:11:18 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/i386/i386.h (HARD_REGNO_MODE_OK): Add some casts.
+
+ * reg-stack.c (record_asm_reg_life): Cast class to int for indexing.
+
+ * sdbout.c (PUSH_DERIVED_LEVEL): Cast enumm constants to int.
+
+ * toplev.c (flag_volatile_global): New variable.
+ (f_options): Add option for it.
+ * varasm.c (make_decl_rtl): Handle that option.
+
+ * objc-act.c (really_start_method): Always use OBJC_GEN_METHOD_LABEL.
+ Pass method_slot as additional arg.
+ (OBJC_GEN_METHOD_LABEL): Add default definition.
+ * config/m68k/next.h (OBJC_GEN_METHOD_LABEL): Accept additional arg.
+
+Mon Mar 8 12:01:49 1993 Paul Eggert (eggert@twinsun.com)
+
+ * fold-const.c (const_binop): When evaluating a shift, ignore
+ overflows generated by force_fit_type.
+
+Mon Mar 8 07:24:30 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_gen_binary, simplify_plus_minus): New functions.
+ (find_best_addr): Use cse_gen_binary.
+ (simplify_binary_operation, fold_rtx): Likewise.
+ Remove most special-cases for PLUS and MINUS and call
+ simplify_plus_minus instead.
+ Clean up some tests for FP.
+
+ * cse.c: Add prototypes for static functions.
+ (struct cse_basic_block_data): Move to front of file since it
+ constains struct used in a prototype.
+ (refers_to_p, find_best_addr): Now static.
+
+ * expr.h: Clean up prototypes for functions in expr.c and
+ optabs.c and add some missing ones.
+
+ * optabs.c: Add prototypes for static functions.
+ (init_libfuncs): Put args in proper order.
+
+Sun Mar 7 07:59:34 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reorg.c: Add prototypes for static functions.
+ (fill_simple_delay_slots): Add missing declaration of arg.
+
+Sat Mar 6 15:08:59 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c: Handle long options by translation to old-style ones.
+ (translate_options): New function.
+ (option_map): New table.
+
+ * config/i386/t-iscscodbx: New file.
+ * configure (i[34]86-*-isc*, i[34]86-*-sco...): Use that if stabs.
+
+ * reload1.c (choose_reload_regs): Handle SUBREG in reload_earlyclobber
+ when matching output reloads for setting reload_when_needed.
+
+Sat Mar 6 08:43:09 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * genattrtab.c (write_test_expr): Use INSN_CODE == -2, not 0, for
+ constant attributes.
+
+ * genattrtab.c: Add prototypes in forward declarations.
+ Add some missing parameters to a few calls.
+
+Sat Mar 6 07:41:36 1993 Doug Evans (dje@cygnus.com)
+
+ * calls.c (expand_call): Fix typo in unaligned code.
+
+Fri Mar 5 20:32:28 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
+
+ * i386/svr3gas.h, i386/svr3dbx.h, i386/iscdbx.h, i386/scodbx.h,
+ i386/sco4dbx.h, svr3.ifile, svr3z.ifile: New files.
+ * configure (i[34]86-...): Use them if configured --with-stabs.
+ * i386/isccoff.h: Renamed from i386/i386isc.h.
+ * i386/iscgas.h: Renamed from i386/i386iscgas.h.
+
+Fri Mar 5 19:41:50 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (expand_assignment): Special handling for storing in
+ RESULT_DECL.
+
+Fri Mar 5 17:48:41 1993 Chris Smith (csmith@mozart.convex.com)
+
+ * cse.c (simplify_binary_operation): Move integer CONST_DOUBLE
+ folding out of REAL_IS_NOT_DOUBLE conditional.
+ (simplify_relational_operation): Put float CONST_DOUBLE folding
+ under a REAL_IS_NOT_DOUBLE conditional.
+ Add folding for integer CONST_DOUBLE comparisons.
+
+Fri Mar 5 17:37:20 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.md: Add new define_split for doing sign-extended adds
+ of some large constants using sNaddl.
+
+ * function.c (fixup_var_refs_insns): If SMALL_REGISTER_CLASSES,
+ ensure we don't put any insns between the setting of the function
+ return register and it's use.
+
+Fri Mar 5 15:11:41 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (FIXED_REGISTERS): %r2 is no longer fixed.
+ (REG_ALLOC_ORDER): Treat %r2 as a caller-saved allocatable
+ register. %r30 is fixed and therefore a "special" register.
+ %fr22-%fr31 are caller-saved, so allocate them before the
+ callee-saved 1.1 fp registers. Allocate fp registers before
+ general registers. Fix typo for register 79.
+
+ * pa.c (output_function_epilogue): Perform an early %r2 restore
+ even if actual_fsize is zero. This can happen if %r2 is used
+ as a temporary in a leaf function.
+
+ * pa.h (FIRST_PSEUDO_REGISTER): Update to take into account
+ registers which are no longer known to the compiler.
+ (FIXED_REGISTERS): Likewise.
+ (CALL_USED_REGISTERS): Likewise.
+ (HARD_REGNO_NREGS): Likewise.
+ (HARD_REGNO_MODE_OK): Likewise.
+ (REGNO_REG_CLASS): Likewise.
+ (FUNCTION_VALUE): Likewise.
+ (LIBCALL_VALUE): Likewise.
+ (FUNCTION_VALUE_REGNO_P): Likewise.
+ (FUNCTION_ARG_REGNO_P): Likewise.
+ (FUNCTION_ARG): Likewise.
+ (REGNO_OK_FOR_FP_P): Likewise.
+ (REGISTER_NAMES): Likewise.
+ (REG_CLASS_CONTENTS): Likewise. Add %r1 to GENERAL_OR_FP_REGS
+ and GENERAL_OR_SNAKE_FP_REGS.
+ (REG_ALLOC_ORDER): Likewise. Document and make allocation order
+ "regular" across 1.0 and 1.1 cpus.
+
+ * pa.c (compute_frame_size): Update to take into account
+ register which are no longer known to the compiler.
+ (output_function_prologue): Likewise.
+ (output_function_epilogue): Likewise.
+ (output_arg_descriptor): Likewise.
+
+
+Fri Mar 5 12:45:51 1993 Jim Wilson (wilson@geech.gnu.ai.mit.edu)
+
+ * sparc.c (output_function_prologue, output_function_epilogue):
+ Add comments for frame_base_name usage in leaf_functions.
+
+ * gcc.c (main): Put argv[0] in collect_obstack instead of programname.
+
+ * cse.c (note_mem_written): QImode varying structure memory
+ accesses can alias scalars.
+
+Thu Mar 4 10:05:52 1993 Juergen Keil (jk@leo.tools.de)
+
+ * c-decl.c (store_parm_decls,combine_parm_decls): Call layout_decl
+ for a parm declared float when it is changed to double under a
+ traditional compilation.
+
+Thu Mar 4 17:52:52 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (ASM_OUTPUT_INT): If TARGET_SHARED_LIBS, then references to
+ functions which do not occur in the text space must have a PLABEL
+ ("P%") prefix to make the assembler and linker happy.
+
+Thu Mar 4 17:18:57 1993 Steve Chamberlain (sac@geech.gnu.ai.mit.edu)
+
+ * emit-rtl.c (init_emit_once): Initialize const_tiny_rtx for
+ partial ints too.
+
+ * convert.c (convert_to_pointer): Fix typo comparing size of
+ integer and pointers.
+ * varasm.c (immed_double_const): Cope with MODE_PARTIAL_INT.
+ (output_constant_pool): Likewise.
+
+Thu Mar 4 15:18:15 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-common.c (truthvalue_conversion): Fix handling of COMPLEX_EXPR.
+ Handle all complex values specially.
+
+Thu Mar 4 13:48:38 1993 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * pa.md (recognizer for general uaddcm): New pattern.
+
+ * pa.md (iorsi3): New DEFINE_EXPAND.
+ (iorsi3 recognizer for [reg reg]): Now unnamed.
+ Put output template here, don't call output_ior.
+ * pa.c (output_ior): Don't handle reg operands.
+
+Thu Mar 4 13:14:13 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fold-const.c (fold): Handle complex constants as "winning".
+ Handle REALPART_EXPR and IMAGPART_EXPR.
+
+Thu Mar 4 13:08:53 1993 Steve Chamberlain (sac@geech.gnu.ai.mit.edu)
+
+ * config.sub (h8300hds): Change hds to hms.
+ * configure (h8300-*-*): Added.
+ * h8300.c, h8300.h, h8300.md, t-h8300, xm-h8300.h: New files.
+
+Thu Mar 4 10:31:17 1993 Michael Meissner (meissner@osf.org)
+
+ * gcc.c (link_command_spec): Add missing \ before newline inside
+ character string.
+
+ * c-parse.in (all_iter_stmt_simple): Add missing comma so that
+ Objective C compiles.
+
+Thu Mar 4 02:43:43 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * optabs.c (emit_no_conflict_block): Don't move target to itself
+ if that takes multiple insns.
+ (expand_binop): For complex mult and div, avoid fetching operand
+ components more than once from memory.
+
+ * dbxout.c (dbxout_type): Handle complex integer types.
+
+Wed Mar 3 16:01:11 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (common_type): Handle complex types.
+
+ * machmode.def: Add complex integer modes.
+
+ * c-common.c (truthvalue_conversion): Handle COMPLEX_EXPR.
+
+ * c-typeck.c (lvalue_p): Handle REALPART_EXPR, IMAGPART_EXPR.
+ (build_binary_op, build_unary_op): Handle complex types.
+
+ * c-parse.gperf: Add `__complex', `__complex__'.
+ Add `__iterator'. Delete `iterator'.
+
+ * tree.c (build_complex): Set the TREE_TYPE based on real part.
+
+ * c-lex.h (RID_COMPLEX): New constant.
+ * c-lex.c (init_lex): Initialize rid pointers for complex.
+ (yylex): Handle i or j in numeric constant.
+
+ * c-decl.c (init_decl_processing): Create complex types.
+ (grokdeclarator): Handle complex keyword.
+ Distinguish int-by-default from int keyword.
+ * c-tree.h: Declare vars to hold complex types.
+
+ * c-convert.c (convert): Handle conversion to complex type.
+ * convert.c (convert_to_real): Convert complex to real.
+ (convert_to_integer): Likewise.
+ (convert_to_complex): New function.
+ * convert.h (convert_to_complex): Declared.
+
+Wed Mar 3 15:34:36 1993 Per Bothner (bothner@hal.gnu.ai.mit.edu)
+
+ * tree.c (build_range_type): New function.
+ * tree.c (build_index_2_type): Re-implement using build_range_type.
+
+Wed Mar 3 08:34:43 1993 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * pa.c (lhs_lshift_operand): New function.
+ (lhs_lshift_cint_operand): New function.
+ * pa.md (ashlsi3): Use lhs_lshift_operand for operand 1.
+ Call gen_zvdep_imm when operand 1 is a CONST_INT.
+ (zvdep_imm): New pattern.
+
+ * pa.c (print_operand): Handle L and P for bit field instructions.
+ * pa.md (ashift recognizer for [reg const_int]): Use %P and %L
+ output modifiers.
+ (ashiftrt recognizer for [reg const_int]): Likewise.
+ (lshrsi3): Likewise.
+ (rotrsi3): Reduce integer argument to 5 bits.
+
+ * pa.md: Remove some empty lines.
+
+ * pa.c (pa_adjust_cost): Replace, the function of Mar 2 was an old
+ version.
+ (output_fp_move_double): Use %r syntax for registers.
+
+Wed Mar 3 01:42:42 1993 Per Bothner (bothner@hal.gnu.ai.mit.edu)
+
+ * tree.def (INTEGER_TYPE): Clarify comment to make clear that
+ INTEGER_TYPEs are used for arbitrary range types (i.e.
+ sub-ranges of enums) in languages that need them.
+ * dbxout.c (dbxout_type_range): New function: Common code
+ needed for both range types and array index types.
+ Fixes some problems common in both places: Now handles
+ non-zero lower bound, variable bounds (sort of), and ranges
+ of non-integer (e.g. enum) types.
+ * dbxout.c (dbxout_type): Use dbxout_type_range.
+
+Tue Mar 2 23:34:45 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * collect2.c (main): Use strlen, not sizeof, for our_file_name.
+
+ * c-common.c (convert_and_check): No warning for converting
+ signed integer to unsigned of same width.
+
+Tue Mar 2 18:59:39 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu.edu)
+
+ * c-iterate.c (collect_iterators): Handle simple expressions quickly.
+ Don't try to interpret operands that are RTL as if they were trees.
+
+ * regclass.c (regclass): Don't set REGNO_POINTER_FLAG here.
+ (reg_scan_mark_refs): Set it here.
+ Accept INSN, not UID as arg.
+ (reg_scan): Call reg_scan_mark_refs with INSN, not UID.
+
+Tue Mar 2 18:03:25 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc-act.c (handle_class_ref): Call assemble_external.
+
+Tue Mar 2 15:56:17 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * genattrtab.c (write_const_num_delay_slots): Output 'rtx insn' not
+ 'rtx *insn' for const_num_delay_slot argument.
+
+ * gcc.c (main): Truncate programname to what is after last slash.
+
+ * cccp.c (do_include): Warn if find unreadable header file.
+ (errno.h): Move outside VMS specific section.
+
+ * sparc.c (print_operand): Use output_operand_lossage, not abort.
+
+ * sparc.h (SETUP_FRAME_ADDRESS, DYNAMIC_CHAIN_ADDRESS,
+ RETURN_ADDR_IN_PREVIOUS_FRAME, RETURN_ADDR_RTX): Define.
+ * sparc.md (flush_register_windows, goto_handler_and_restore):
+ Give names to these patterns so they are easier to use.
+ * expr.c (expand_builtin, BUILT_IN_FRAME_ADDRESS case): Use new
+ macros SETUP_FRAME_ADDRESSES and RETURN_ADDR_IN_PREVIOUS_FRAME.
+
+ * reorg.c (relax_delay_slots): Delete jump around insn identical
+ to the insn in its delay slot.
+
+ * i960.c (i960_output_call_insn): Delete scratch_reg arg. Use r3
+ instead.
+ * i960.md (call_internal*): Use hard register 19 (r3) in clobber
+ instead of match_scratch.
+
+ * i960.md (mov*): Only accept store zero to memory insn if
+ rtx_equal_function_value_matters is zero.
+ * i960.h (rtx_equal_function_value_matters): Declare.
+
+ * emit-rtl.c (gen_sequence): Add push_obstacks_nochange and
+ pop_obstacks calls around rtl_in_saveable_obstack call.
+ * varasm.c (immed_double_const, immed_real_const_1): Likewise.
+ * tree.c (rtl_in_saveable_obstack): Always switch to saveable_obstack.
+ Return type now void instead of int.
+
+Tue Mar 2 14:57:06 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (link_command_spec): Do nothing if -fsyntax-only.
+
+Tue Mar 2 14:17:47 1993 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * pa.h (ADJUST_COST): Add new definition.
+ * pa.c (pa_adjust_cost): New procudure.
+
+Tue Mar 2 02:12:13 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * optabs.c (gen_move_insn): Big `if' applies only for MODE_CC class.
+
+ * config/m68k/next.c (handle_pragma): New arg get_line_function.
+ * config/m68k/next.h (HANDLE_PRAGMA): Pass suitable arg.
+ * c-lex.h (get_directive_line): Declared.
+
+Tue Mar 2 10:48:46 1993 Wilson Tien (wtien at urbana.mcd.mot.com)
+
+ * m68k.md (truncdfsf2+2): Use f%$move instead of fsmove.
+
+ * m68k.md (fix_truncdfsi2, fix_truncdfhi2, fix_truncdfqi2):
+ Use %# instead of #.
+
+ * m68k.md (call, call_value): Set SYMBOL_REF_FLAG for the called
+ function symbol_ref rtx. In PIC mode, output `bsr FUNC@PLTPC'
+ when the operand is symbol_ref.
+
+ * m68kv4.h (ASM_OUTPUT_COMMON, ASM_OUTPUT_LOCAL): Use SIZE instead
+ of ROUNDED.
+
+ * m68kv4.h (ASM_OUTPUT_CASE_LABEL): Always use `swbeg' syntax to
+ output switch table (m68k.md depends on this to happen).
+
+ * m68kv4.h (LEGITIMATE_PIC_OPERAND_P): Treat a symbol_ref rtx with
+ SYMBOL_REF_FLAG set a valid PIC operand.
+
+ * m68kv4.h (OVERRIDE_OPTIONS): Turn off function cse when doing pic.
+
+ * m68k.c (output_function_prologue): Use m68k svr4 PIC format to
+ load the address of _GLOBAL_OFFSET_TABLE_ into PIC_OFFSET_TABLE_REG
+ in function prologue when doing PIC.
+
+ * m68k.c (print_operand_address): Always add "@GOT" suffix for the
+ global object operand when doing PIC.
+
+Mon Mar 1 19:00:38 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-lex.h (RID_ITERATOR): New alternative.
+ * c-tree.h (ITERATOR_P, ITERATOR_BOUND_P): New macros.
+
+ * c-typeck.c (build_unary_op): Warn if increment `struct unknown *'.
+
+ * c-lex.c (init_lex): Set up ridpointers for `iterator'.
+ But maybe turn it off again.
+
+ * c-parse.gperf: Add `iterator' and `__iterator__'.
+
+ * c-decl.c (grokdeclarator): Handle iterator storage class.
+ (finish_decl): For iterator, require initial value, make a save_expr.
+ (init_decl_processing): Call init_iterators.
+
+ * c-parse.in (stmt): Allow all_iter_stmt.
+ (primary -> statement expression): Push and pop iterator stack.
+ (stmt -> expr): Use iterator_expand.
+ (all_iter_stmt): New rule.
+
+ * c-typeck.c (readonly_warning): Warn about assignment to iterator.
+
+ * c-iterate.c: New file.
+ * Makefile.in (c-iterate.o): New target.
+ (C_OBJS, OBJC_OBJS): Add c-iterate.o.
+
+ * Makefile.in (gcc.o): Delete dep obstack.h.
+
+Mon Mar 1 07:29:51 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * integrate.c (subst_constants): Use proper mode when getting
+ equivalent constant for paradoxical SUBREG in SET_DEST.
+ (mark_stores): Clean up and tighten to properly handle hard regs.
+
+ * combine.c (subst, case NOT): If STORE_FLAG_VALUE==-1, treat
+ an ASHIFTRT of just the sign bit as if it were an LT.
+ (subst, case XOR): Likewise for STORE_FLAG_VALUE==1 and an LSHIFTRT.
+ (simplify_and_const_int, case LSHIFTRT): If shifting a sign bit
+ copy, start shift at the sign bit.
+ (simplify_shift_const): Likewise for ASHIFTRT.
+
+ * combine.c (BYTE_LOADS_EXTEND): Fix typo when defining.
+ (setup_incoming_promotions): Set modes properly.
+
+ * alpha.md: Add three special-cases of CMP insns against zero.
+
+Mon Mar 1 06:17:02 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (CONSTANT_ADDRESS_P): Do not accept symbolic
+ addresses.
+ (LEGITIMIZE_ADDRESS): Just a stub now. Call
+ hppa_legitimize_address to do the real work.
+
+ * pa.c (symbolic_expression_p): New function.
+ (hppa_legitimize_address): Old LEGITIMIZE_ADDRESS moved
+ here. Handle symbol_ref + displacement addresses.
+ Use rounding instead of masking off lower bits.
+ Avoid creating useless pseudos and strip off CONST in
+ (const (...)) expressions to make processing easier.
+
+ * pa.md (define_split for symbol_ref+int): New define_split for
+ the combiner.
+
+Sat Feb 27 01:57:34 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (convert_for_assignment): New arg FUNDECL. Calls changed.
+ (convert_arguments): New arg FUNDECL.
+ (build_function_call): Pass function to convert_arguments, if a decl.
+
+ * config.sub: Error if company name is more than one word.
+ If $os is `sunos...', don't change it to manufacturer's name.
+
+ * enquire.c (fake_f_rep): Clear all of u, initially.
+ Make the ints in u unsigned.
+ (f_define): Use ordinary constants for long double
+ if it's same width as double.
+ Make __convert_long_double_i unsigned.
+
+ * va-i860.h (struct __gnuc_va_list): Test __svr4__ like __SVR4__.
+
+ * config/ns32k/ns32k.h (TARGET_SWITCHES): Reverse defn of 32332.
+
+ * expr.c (convert_move): Truncate via word_mode
+ only if to_mode fits in one word.
+ Truncate by referring in TO_MODE for any FROM,
+ but force_reg if nec.
+
+ * c-decl.c (pushdecl): Nested fn decl gets DECL_CONTEXT iff not extern.
+
+ * c-lex.c (check_newline): #line updates input_file_stack->name.
+
+ * c-typeck.c (convert_for_assignment): Automatically convert
+ to a union from its members' types.
+
+ * config/ns32k/ns32k.h (ASM_OUTPUT_ALIGN_CODE):
+ Pad with no-op insns.
+
+ * c-decl.c (grokdeclarator): Make `long long' work even with
+ -pedantic, despite the warning.
+
+Fri Feb 26 22:01:32 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * cccp.c (USER_LABEL_PREFIX, REGISTER_PREFIX): If not defined by
+ tm.h, set to empty strings.
+ (enum node_type, special_symbol): Added T_USER_LABEL_PREFIX_TYPE
+ and T_REGISTER_PREFIX_TYPE, which expand to USER_LABEL_PREFIX and
+ REGISTER_PREFIX.
+ (initialize_builtins): New builtin definitions
+ __USER_LABEL_PREFIX__ and __REGISTER_PREFIX__.
+
+Fri Feb 26 18:08:58 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (distdir): Depend on cp-parse.y,
+ and the .c files for the .y files.
+
+ * c-decl.c (declare_parm_level): Unconditionally store 1.
+ (pushdecl): Criterion for no warning is, next level up
+ is a parm level.
+
+ * Makefile.in (all.cross): Depend on enquire.
+
+ * libgcc2.c (inhibit_libc): Renamed from inhibit_eprintf.
+ (L_new_handler): Don't include stdio.h if inhibit_libc.
+
+ * c-typeck.c (process_init_constructor): Error msg change.
+
+ * gstdarg.h (_VA_LIST_T_H): Test and define this.
+ * gvarargs.h (_VA_LIST_T_H): Test and define this.
+
+ * gstddef.h (_SYS_SIZE_T_H): Test this and define this.
+
+ * xm-pbd.h (USE_C_ALLOCA): Define here.
+ * pbd.h (USE_C_ALLOCA): Not here.
+
+ * tree.c (simple_cst_equal): New default case handles most
+ tree codes based on TREE_CODE_CLASS. Delete newly redundant cases
+ for specific tree codes.
+
+ * dbxout.c (dbxout_type): Enable output of subrange types
+ if use_gnu_debug_info_extensions.
+ (dbxout_finish_symbol): Enable output of symbols line number.
+
+ * c-typeck.c (initializer_constant_valid_p):
+ Allow cast of ptr to wider integer.
+
+Fri Feb 26 19:04:36 1992 Karl Berry (karl@cs.umb.edu)
+
+ * optabs.c (init_libfuncs): Use int instead of enum for
+ first_mode, last_mode, and mode.
+
+Fri Feb 26 14:29:22 PST 1992 Ron Guilmette (rfg@netcom.com)
+
+ * c-parse.in (ivar_decls): Give a pedwarn (instead of a warning) for
+ excess semicolons.
+
+ * cccp.c (do_include): Correctly report the directive name
+ when any kind of include directive has no argument or null argument.
+
+Fri Feb 26 11:27:35 1992 Tom Wood (wood@NeXT.com)
+
+ * toplev.c (compile_file): Use pedwarn_with_decl to warn about
+ functions declared static but not defined.
+ * c-decl.c (store_parm_decls): Use pedwarn.
+
+Fri Feb 26 10:34:33 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * Makefile.in (uninstall): Also remove the g++ manual page.
+
+Fri Feb 26 01:29:53 1992 Paul Eggert (eggert@twinsun.com)
+
+ * cexp.y (parse_escape): Don't treat ^ as special after \.
+
+Fri Feb 26 21:37:29 1993 John F Carr (jfc at Athena.MIT.EDU)
+
+ * varasm.c (make_decl_rtl): Print an error for explicit register
+ variable whose type cannot be stored in that register.
+
+Fri Feb 26 17:07:25 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * machmode.def: Added 32-byte int OImode.
+
+Fri Feb 26 13:59:23 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * explow.c (memory_address): Use CONSTANT_ADDRESS_P instead of
+ LEGITIMATE_CONSTANT_P.
+ (break_out_memrefs): Likewise.
+
+Fri Feb 26 06:18:40 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case IN_EXPR): Fix numerous small bugs and
+ make some cleanups.
+
+ * recog.c (constrain_operands, case 'r'): If STRICT, a REG isn't
+ valid if it is a pseudo even if GENERAL_REGS == ALL_REGS.
+
+ * alpha.h (LEGITIMIZE_ADDRESS): Add missing args to calls to
+ expand_binop.
+
+Thu Feb 25 17:24:45 1993 Bill Cox (bill@rtl.cygnus.com)
+
+ * expr.h: Add prototypes for most expr-related functions.
+ * jump.c (jump_optimize): Add missing parameter in expand_binop call.
+
+Thu Feb 25 17:50:55 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * toplev.c: No need to #undef ABS; done in rtl.h.
+
+ * reorg.c (redundant_insn_p): Fix typo in testing for types of
+ insns by using GET_RTX_CLASS.
+
+ * expmed.c (emit_store_flag): Fix typo in testing BRANCH_COST.
+
+Thu Feb 25 14:32:31 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * combine.c (set_nonzero_bits_and_sign_copies): Fix typo in
+ paradoxical set dest handling.
+
+ * convert.c (convert_to_integer): Delete Feb 19 change.
+
+ * fold-const.c (decode_field_reference): Fix force_fit_type call.
+
+Thu Feb 25 07:38:36 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixinc.sco: Use pwd if PWDCMD is not defined.
+
+Wed Feb 24 18:28:06 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/vax/vms.h (ASM_OUTPUT_EXTERNAL): Use vms_check_external.
+ (ASM_GLOBALIZE_LABEL): New definition; use vms_check_external.
+ * config/vax/vax.c (vms_check_external): New function.
+
+ * config/m68k/xm-mot3300.h (NO_SYS_SIGLIST): Defined.
+
+Wed Feb 24 16:01:42 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * loop.c (consec_sets_invariant_p): Correct REG_EQUAL note checks
+ to distinguish libcall case from ordinary insn case.
+
+ * loop.c (add_label_notes): Don't add notes for references to
+ dispatch tables because jump doesn't.
+ (find_and_verify_loops): Invalidate loops that contain labels
+ whose address has been taken.
+
+ * fixinc.svr4 (string.h): Delete 'g' from sed command.
+
+ * sparc.md (zero_extendqi*i2): Delete never matched constraints.
+
+ * i960.c (umulsidi3+1): Delete extra parenthesis.
+
+Tue Feb 23 15:09:50 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in (install-headers): Create relative paths for
+ symbolic links within installed include directory.
+
+Tue Feb 23 14:43:46 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * stmt.c (check_for_full_enumeration_handling): Handle nameless type.
+
+ * tree.h (CONSTRUCTOR_NAME_FORMAT): Handle NO_DOT_IN_LABEL.
+
+ * config/m68k/mot3300.h (NO_DOLLAR_IN_LABEL, NO_DOT_IN_LABEL): Defined.
+
+ * collect2.c (is_ctor_dtor): Handle NO_DOT_IN_LABEL.
+
+Mon Feb 22 18:06:06 1993 John Hassey (hassey@dg-rtp.dg.com)
+
+ * m88k.c (output_call): Don't use the delay slot of a bsr.n
+ to modify the return address, unless -O2 specified.
+
+Mon Feb 22 17:36:52 1993 Kresten Krab Thorup (krab at xiv)
+
+ * objc/core.c (initialize_class): Take Class_t instead of
+ char* as argument. Callers changed to pass the class.
+
+ * objc/core.c (initialize_class): Mark the class
+ initialized *before* the actual call of "+initialize". This is
+ needed in case of certain circular dependances between classes.
+
+ * objc/object.m (doesNotRecognize): Call sel_getName to get
+ the name of the selector, and print that.
+ (subclassResponsibility, notImplemented): Likewise.
+
+Mon Feb 22 00:23:47 1993 Richard Stallman (rms@wookumz.gnu.ai.mit.edu)
+
+ * expr.c (emit_library_call_value): Fix bug in prev change.
+
+ * Makefile.in (install-include-dir): Depend on install-dir.
+
+ * convert.c (convert_to_integer): #if 0 the truncated integer warning.
+
+Mon Feb 22 15:15:40 1993 James Van Artsdalen (james@bigtex.cactus.org)
+
+ * fold-const.c (all_ones_mask_p): Really use tmask.
+
+Mon Feb 22 11:59:09 1993 Michael Meissner (meissner@osf.org)
+
+ * fold-const.c (all_ones_mask_p): Declare tmask to be `tree'.
+ (optimize_bit_field_compare) Add missing semicolon.
+
+Sun Feb 21 20:20:13 1993 Richard Stallman (rms@wookumz.gnu.ai.mit.edu)
+
+ * expr.c (emit_library_call_value): Really pass mem value address
+ to the library function.
+
+Sun Feb 21 15:15:40 1993 James Van Artsdalen (james@bigtex.cactus.org)
+
+ * fold-const.c (decode_field_reference): Use force_fit_type
+ instead of convert to avoid truncated integer warning.
+ (all_ones_mask_p): Likewise.
+
+Sun Feb 21 13:06:00 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.md (load high pattern): Rework constraints to reduce %r1
+ spillage.
+
+ * pa.md (const_double -> FP pattern): Remove cases which can never
+ happen anymore.
+
+ * pa.c (print_operand, case 'Y'): Output comparison operators
+ which will give the right results when one or more operands is a NaN.
+
+Sun Feb 21 01:38:19 1993 Richard Stallman (rms@wookumz.gnu.ai.mit.edu)
+
+ * expr.c (emit_move_insn_1): New subroutine cut from emit_move_insn.
+ (emit_move_insn): Use that.
+ * optabs.c (gen_move_insn): Use emit_move_insn_1.
+ * expr.h (emit_move_insn_1): Declared.
+
+Sat Feb 20 20:33:51 1993 Doug Evans (dje@wookumz.gnu.ai.mit.edu)
+
+ * cccp.c: Add declaration for pedwarn_with_line.
+
+Sat Feb 20 14:46:25 1993 James Van Artsdalen (james@bigtex.cactus.org)
+
+ * fixincludes (SRCDIR): Make absolute from ORIGDIR.
+ (sys/types.h): Quote variables that might expand with spaces.
+ Strip quotes from expansion of SIZE_TYPE.
+ (stdio.h): Fix typo deleting line.
+
+Sat Feb 20 18:41:05 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (warning_with_line, pedwarn_with_line): New functions.
+ (rescan): For pedantic, no error if string constant has newline,
+ just a pedwarn. And don't end the string constant there.
+
+Sat Feb 20 17:25:16 1993 Doug Evans (dje@wookumz.gnu.ai.mit.edu)
+
+ * fold-const.c (decode_field_reference): Use force_fit_type
+ instead of convert to avoid truncated integer warning.
+
+Sat Feb 20 07:31:32 1993 John Hassey (hassey@dg-rtp.dg.com)
+
+ * fixincludes: Change "va_list)" to "__gnuc_va_list)".
+
+Sat Feb 20 03:19:44 1993 Doug Evans (dje@wookumz.gnu.ai.mit.edu)
+
+ * fixincludes: Save temp file in ${LIB}.
+ Use -I${ORIGDIR} when compiling types.c.
+
+Fri Feb 19 00:45:41 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * convert.c (convert_to_integer): Warn if integer is truncated
+ and that changes the value.
+
+Thu Feb 18 20:15:20 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * aix386.h: Include aix386ng.h instead of duplicating it.
+ * 3b1.h (ASM_OUTPUT_CASE_END): Add missing semicolon.
+
+ * sparc.c (output_function_prologue): Don't save %f31 to stack.
+ * sparc.h (STARTING_FRAME_OFFSET): Set to -8.
+
+ * pbd.h, sol2.h, sparc.h, sysv4.h (CPP_PREDEFINES): Add
+ -D__GCC_NEW_VARARGS__.
+ * va-sparc.h (va_start): If __GCC_NEW_VARARGS__ not defined, use
+ old definition.
+
+ * final.c (end_final): Don't call assemble_zeros with an size
+ argument of zero.
+
+ * move-if-change: Use cmp -s instead of redirecting output to
+ /dev/null.
+
+ * calls.c (expand_call): When MAYBE_REG_PARM_STACK_SPACE defined,
+ if reg_parm_stack_space is zero, set args_size.constant to zero.
+
+Thu Feb 18 17:43:30 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc/core.c (__objc_execClass):
+ Don't assign superclass pointer more than once.
+
+ * objc/record.h (record_store_at, record_get):
+ Test record_capacity, not record_entries, in assertion.
+
+ * flow.c (regno_uninitialized): Test global_regs only for hard regs.
+
+ * c-lex.c (yylex): Undo Feb 7 change.
+ * c-parse.in (program): After extdefs, pop any unpopped binding lvls.
+
+ * Makefile.in (BISONFLAGS): Add -v.
+
+Wed Feb 17 18:51:51 1993 Karl Berry (karl@owl.hq.ileaf.com)
+
+ * toplev.c (ABS): #undef after including sys/resource.h.
+
+Wed Feb 17 22:02:09 1993 John Hassey (hassey@dg-rtp.dg.com)
+
+ * m88k.c (emit_ldst): For large offsets use register index
+ instead of immediate.
+
+Wed Feb 17 18:02:26 EST 1993 John Wehle (john@feith.com)
+
+ * we32k.h (CONST_COSTS): Updated to better reflect
+ the actual constant costs on a we32k.
+
+ * we32k.md (truncdfsf2, extendsfdf2): Changed from
+ define_insn to expand_insn so the optimizer can do
+ a better job.
+
+ * we32k.h (GO_IF_LEGITIMATE_ADDRESS): Added support for
+ deferred addressing.
+
+ * we32k.md: Eliminated a jmp pattern and the peephole
+ patterns which are no longer needed now that deferred
+ addressing is supported.
+
+Wed Feb 17 17:55:34 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes (sys/types.h): Replace definition of size_t
+ based on SIZE_TYPE.
+
+Wed Feb 17 06:54:42 1993 John Hassey (hassey@dg-rtp.dg.com)
+
+ * config/m88k/m88k.h (CONST_OK_FOR_LETTER_P): Added 'K'.
+ * config/m88k/m88k.md: Use 'K' constraint with arith5_operand
+ predicate.
+
+Wed Feb 17 03:04:49 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (stmp-fixinc): Renamed from stmp-fixincludes.
+
+Tue Feb 16 14:34:19 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/sparc/sparc.h (ASM_OUTPUT_IDENT, IDENT_ASM_OP): Defined.
+
+Tue Feb 16 02:48:58 EST 1992 John Wehle (john@feith.com)
+
+ * reload.c (find_reloads_address): Use strict_memory_address_p
+ to check for valid indirect address.
+
+ * xm-we32k.h: Include xm-svr3.h. Move tm.h include earlier.
+ (HOST_BITS_PER_LONGLONG, HOST_WORDS_BIG_ENDIAN): Defined.
+ (USG, bcopy, bzero, bcmp): Deleted.
+ (alloca): Definition moved before tm.h.
+
+Tue Feb 16 01:28:52 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_indirect_ref): Avoid *& short-cut if -fvolatile.
+
+Mon Feb 15 22:22:08 1993 Michael Meissner (meissner@osf.org)
+
+ * mips/osfrose.h (CPP_SPEC): When preprocessing .S files, pass
+ -traditional if neither -ansi nor -traditional was passed, to
+ allow the macros which form labels to not give gas heartburn.
+
+ * i386/osfrose (CPP_SPEC): Ditto.
+
+Mon Feb 15 02:17:47 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc-act.c (HASHFUNCTION): insure nonnegative hash even if
+ addresses are negative.
+
+Sat Feb 13 04:16:29 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (c_decode_option): Handle -Wmissing-braces.
+ * c-typeck.c (process_init_constructor): Test warn_missing_braces.
+ * c-tree.h (warn_missing_braces): Declared.
+
+Fri Feb 12 19:40:38 1993 Doug Evans (dje@wookumz.gnu.ai.mit.edu)
+
+ * combine.c (setup_incoming_promotions): Make static.
+
+Fri Feb 12 16:02:52 1993 Per Bothner (bothner@hal.gnu.ai.mit.edu)
+
+ * tree.def: Fix typo in comment (TREE_VALUES -> TYPE_VALUES).
+
+Fri Feb 12 11:26:28 1993 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * pa.md (rotlsi3): Fix typo, rotate was rotatert in rtl template.
+
+Fri Feb 12 07:47:11 1993 John Hassey (hassey@dg-rtp.dg.com)
+
+ * function.c (reposition_prologue_and_epilogue_notes): Allow
+ for zero length prologue and epilogue list.
+
+Thu Feb 11 05:55:33 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * collect2.c (find_a_file): Always reject "./ld".
+ (main): Pass short name of program as first arg to fork_execute;
+ ensure argv[0] always gets filename.
+ (fork_execute): Print name for diagnostic from PROG; filename
+ comes from argv[0].
+
+ * fixincludes: Don't assume that macros defining IO and CTRL
+ ioctl codes always use `x'; some use `c' or `g'.
+
+ * collect2.c (putenv): New function, copied from gcc.c.
+ (last_file_name): New variable.
+ (find_a_file): Ignore name in last_file_name too.
+ (main): Look at name in COLLECT_NAME and set it to the name we were
+ called with.
+ Pass filename used for ld to ld as argv[0].
+
+Thu Feb 11 03:55:39 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (expand_builtin): Move memory_address calls
+ out of arglist of emit_block_move.
+
+Wed Feb 10 16:14:09 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * Update Alpha support to latest calling sequence.
+ * alpha.c (version_string): Declare.
+ (current_file_function_operand): New function, replaces
+ current_function_operand.
+ (print_operand, case 'F'): Case deleted.
+ (alpha_builtin_saveregs): Reworked to use homed arglists, as
+ recommended in the calling standard.
+ (alpha_need_gp): Deleted, code moved into output_prolog.
+ (alpha_gp_dead_after): Deleted; optimization is not safe.
+ (alpha_write_verstamp): New function.
+ (output_prolog, output_epilog): Major rework to update to
+ current calling standard.
+ * alpha.h (ASM_OUTPUT_LOOP_ALIGN): Enable, now that assembler fixed.
+ (SLOW_UNALIGNED_ACCESS): Define as 1.
+ (ARG_POINTER_REGNUM): Use register number 31 as an arg pointer.
+ (FRAME_GROWS_DOWNWARD): Do not define.
+ (STARTING_FRAME_OFFSET): Now is outgoing args size.
+ (FIRST_PARM_OFFSET): Now 0.
+ (ELIMINABLE_REGS, etc.): Cannot eliminate gp, but do
+ eliminate AP in favor of either SP or FP.
+ (RETURN_IN_MEMORY): All structs or integers larger than 64
+ bits get returned via memory.
+ (SETUP_INCOMING_VARARGS): Use homed arglist mechanism.
+ (ASM_DECLARE_FUNCTION_NAME): Use proper second arg to .ent.
+ (ASM_FILE_START): Call alpha_write_verstamp.
+ (ENCODE_SECTION_INFO): Record when a decl is for a function
+ in the current file.
+ * alpha.md (call insns): Always reload gp after a full call.
+ Use current_file_function_operand to see when we can use BSR.
+
+Wed Feb 10 09:53:00 1993 John Hassey (hassey@wombat.gnu.ai.mit.edu)
+
+ * config.sub: removed m88kbcs, changed delta88 and harris to
+ use sysv3.
+
+Wed Feb 10 03:29:11 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (duplicate_decls): Silently accept harmless mismatch
+ in type of 1st arg of builtin function.
+
+ * c-typeck.c (build_indirect_ref): If arg is void *, just warn.
+
+Tue Feb 9 22:15:08 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * alpha.md (fix_truncdfdi2, fix_truncsfdi2): Use `cvttqc', not
+ `cvttq', to avoid rounding up.
+
+Tue Feb 9 18:45:57 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (promoted_input_arg): New function.
+ * expr.h: Declare it.
+ * combine.c (setup_incoming_promotions): New function.
+ (combine_instructions): Add calls to setup_incoming_promotions.
+
+Tue Feb 9 14:04:22 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * fixincludes: Fix logic about when to duplicate entries under the
+ `FILE' link.
+
+Tue Feb 9 13:22:28 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (main): Fix lineno of "does not end in newline" message.
+ (finclude): Likewise.
+
+Tue Feb 9 12:03:37 1993 Michael Meissner (meissner@osf.org)
+
+ * mips/mips.c (function_epilogue): Avoid integer overflows in
+ checking whether $31 is the only register saved.
+ (mips_epilogue_delay_slots): Ditto.
+
+Tue Feb 9 05:46:17 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rtl.h: Undefine ABS; some POSIX systems define it as 1.
+
+ * combine.c (combine_instructions): When calling
+ set_nonzero_bits_and_sign_copies, set things up so that we
+ can call get_last value; call record_dead_and_set_regs in loop.
+ (set_nonzero_bits_and_sign_copies): Handle paradoxical SET.
+
+Tue Feb 9 01:13:18 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-lex.c (yylex): For wide char constant, use wchar_type_node.
+ Swallow any preprocessing number as a (possibly erroneous) number.
+
+ * tree.c (size_in_bytes): Add 2nd arg to force_fit_type.
+
+Mon Feb 8 07:52:23 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * configure (*-*-hpux*): Use install-headers-cpio.
+
+Mon Feb 8 07:13:49 1993 John Hassey (hassey@dg-rtp.dg.com)
+
+ * toplev.c (compile_file): Don't flag global register variables
+ as unused.
+
+Mon Feb 8 06:06:58 1993 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (extendsidi2): Use correct mnemonic for cwtl opcode.
+
+Mon Feb 8 05:52:08 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (emit_push_insn): If REG is zero, don't set regs here.
+ * expr.h (MUST_PASS_IN_STACK_BAD_ALIGN): Deleted.
+ (MUST_PASS_IN_STACK): No problem anymore with nonaligned structs.
+ * calls.c: Allow passing nonaligned BLKmode structs in regs.
+ (struct arg_data): New fields aligned_regs and n_aligned_regs.
+ (expand_call): Set and use these fields when required.
+ (store_one_arg): Don't pass reg to emit_push_insn if we have
+ previously formed aligned registers.
+
+Sun Feb 7 23:34:16 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expmed.c (emit_store_flag): Add missing arg to convert_move.
+
+Sun Feb 7 16:13:05 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu.edu)
+
+ * calls.c (struct arg_data): New field MODE.
+ (expand_call, store_one_arg): Use it to ensure that all args get
+ promoted if requested, not just those passed in registers.
+
+Sun Feb 7 13:12:23 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-lex.c (yylex): At eof, if binding levels not popped,
+ imagine some close-braces to pop them.
+
+Sun Feb 7 10:54:42 1993 Chip Salzenberg (chip@tct.com)
+
+ * fold-const.c (fold): Call force_fit_type with two parameters.
+
+ * fold-const.c (force_fit_type): Don't examine the tree until
+ it is known to an INTEGER_CST. If it isn't, just return.
+
+Sat Feb 6 20:26:09 1993 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * byteorder.h (386 htonl,htons): Avoid hard-coded register usage.
+
+Sat Feb 6 20:23:02 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/m68k/m68k.md (movqi): For special case of moving byte
+ to stack, push into low byte and then copy to high byte.
+ For case of moving to/from address reg, exchange it with d0.
+
+Fri Feb 5 19:58:26 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * stmt.c (expand_expr_stmt): Bypass fetching a volatile value
+ if it is VOIDmode.
+
+Fri Feb 5 18:27:27 1993 Jim Wilson (wilson@geech.gnu.ai.mit.edu)
+
+ From Fred Fish (fnf@fishpond.cygnus.com)
+ * config.sub (i[34]86sol2): New abbrev for i[34]86-unknown-solaris2.
+ * configure (i[34]86-*-solaris2): New config for Solaris 2, x86.
+ * crtstuff.c (__do_global_ctors_aux): Use FORCE_INIT_SECTION_ALIGN
+ to avoid Solaris 2, x86 linker bug.
+ * config/i386/{sol2-c1.asm, sol2-ci.asm, sol2-cn.asm}: New runtime
+ support files for Solaris 2, x86.
+ * config/i386/{sol2.h, t-sol2}: New config files for Solaris 2, x86.
+
+ * sparc.h (EXTRA_CONSTAINTS): Delete 'R' support.
+ (CONST_OK_FOR_LETTER_P): Correct 'K' comment.
+
+ * caller-save.c (CEIL): Delete.
+ (restore_referenced_regs): New var NUMREGS. Pass NUMREGS to
+ insert_save_restore instead of using using CEIL.
+
+ * sched.c (true_dependence, anti_dependence, output_dependence):
+ Assume that MEM_IN_STRUCT_P QImode varying addresses can overlap a
+ non-MEM_IN_STRUCT_P fixed address.
+
+ * i960.c (legitimate_address_p): Accept either REG or SUBREG where
+ a register is valid in an address.
+
+ * configure (*-*-sco*): Set install_headers_dir to cpio instead of tar.
+
+ * cccp.c (finclude): Error if try to include a directory.
+ (S_ISDIR): Add a default definition.
+
+Fri Feb 5 10:24:35 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * toplev.c (lang_options): Remove `-fSOS' and `-fno-SOS'.
+
+ Wed Feb 3 16:34:58 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (init_decl_processing): Add __builtin_args_info.
+
+ Wed Feb 3 12:47:02 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-class.c (finish_struct_methods): Avoid creating a circularity
+ when putting ctors and dtors at the front of the list.
+
+ * cp-init.c (build_new): Call c_sizeof_nowarn, not c_sizeof.
+ (build_delete): Likewise.
+
+ Tue Feb 2 09:57:29 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-lex.c (yyprint): Make non-static.
+
+ Mon Feb 1 17:09:19 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-lex.c (real_yylex): Use pedwarn for exceeding the range of a
+ double.
+
+ Sat Jan 30 13:09:35 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-method.c (hack_identifier): Also check for VALUE being a
+ RESULT_DECL before looking for the DECL_REFERENCE_SLOT.
+
+ * cp-decl2.c (bad_specifiers): Pass OBJECT into error.
+
+ Fri Jan 29 11:46:46 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-class.c (alter_visibility): Forbid reducing the visibility of a
+ public member of the derived class.
+
+ * cp-typeck.c (comp_target_parms): Give a contravariance warning
+ with P2, not P1, since P1 is the established value, not the argument
+ that's coming in for a match.
+
+ * cp-decl.c (start_method): When printing out the class name for a
+ duplicate definition, be sure to avoid a null context with the
+ second definition.
+
+ Tue Jan 26 15:39:54 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-pt.c (lookup_template_class): Try to use the class value if
+ there's no global value.
+
+ Mon Jan 25 15:59:21 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-call.c (build_method_call): Remove TYPE_NEEDS_WRAPPER cruft.
+
+ Sat Jan 23 12:13:24 1993 Niklas Hallqvist (niklas at della.appli.se)
+
+ * cp-class.c (finish_struct): See to that static members whose type
+ is the class they're declared in gets a correct mode.
+
+ Mon Jan 25 11:04:23 1993 Niklas Hallqvist (niklas at della.appli.se)
+
+ * cp-decl.c (define_label): Don't report crossings of any internal
+ entity initializations. Don't dereference NULL.
+
+ Wed May 13 21:44:05 1992 Niklas Hallqvist (niklas@appli.se)
+
+ * cp-decl2.c: Support for NO_DOT_IN_LABEL.
+ * cp-tree.h: Likewise.
+ * cp-method.c: Likewise.
+
+ * cp-except.c: Support for no JOINER setups (i.e. NO_DOT_IN_LABEL)
+ * cp-lex.c: Likewise.
+ * cp-search.c: Likewise.
+
+ Fri Jan 22 08:52:58 1993 Niklas Hallqvist (niklas at della.appli.se)
+
+ * cp-call.c (resolve_scope_to_name): Try to find nested types not
+ just in the current class and at global scope but at all
+ intermediate classes as well.
+
+ Mon Jan 25 11:04:23 1993 Niklas Hallqvist (niklas at della.appli.se)
+
+ * cp-decl.c (xref_tag): Enable test of incomplete basetypes.
+ * cp-tree.c (layout_basetypes): Disabled it here.
+
+ Mon Jan 25 11:04:23 1993 Niklas Hallqvist (niklas at della.appli.se)
+
+ * cp-init.c (build_new): Move error check of array size before use.
+
+ Sun Jan 24 21:41:09 1993 John Carr (jfc@Athena.MIT.EDU)
+
+ * cp-typeck.c (build_binary_op_nodefault): Add support for
+ FLOOR_MOD_EXPR, merged in from the c front-end.
+
+Wed Feb 3 18:23:07 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc-act.c (init_objc): Use xrealloc, not realloc.
+
+ * expr.c (emit_library_call, emit_library_call_value):
+ Handle STACK_BOUNDARY when using push insns.
+
+Tue Feb 2 16:37:49 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * varasm.c (assemble_zeros): Output nothing rather than empty skip.
+
+ * c-typeck.c (build_conditional_expr): Always convert and check
+ both result operands even if condition is constant.
+ (build_c_cast): Bypass default_conversion when casting to void.
+
+ * c-decl.c: Add some braces for clarity.
+
+ * configure (i[34]86-*-linux*): Set fixincludes to Makefile.in
+ Don't set tmake_file.
+ * Makefile.in (stmp-fixincludes): Don't run FIXINCLUDES
+ if it is Makefile.in.
+ * t-linux: File deleted.
+
+ * Makefile.in (install-headers-cpio): Delete spurious parens
+ from around the whole command.
+ (install-headers-tar): Delete parens around the "source" tar cmd.
+
+Tue Feb 2 15:20:52 1993 Chip Salzenberg (chip@tct.com)
+
+ * c-decl.c (pushdecl): DECL_EXTERNAL implies TREE_PUBLIC,
+ so don't bother to check for both.
+
+ * regclass.c (int_reg_class_contents): Make unsigned to avoid
+ signed integer overflow.
+ (init_reg_sets): Avoid signed integer overflow.
+
+ * cexp.y (parse_escape): Support \E and \e like cc1:
+ they mean \033, and they generate a warning if pedantic.
+
+Tue Feb 2 15:17:38 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * t-sol2 (INSTALL_TARGET): Delete.
+
+Tue Feb 2 14:18:59 1993 Brendan Kehoe (brendan@cygnus.com)
+
+ * Makefile.in (gcc.o): Depend upon config.status, so any changes
+ in prefix will be communicated to the build process.
+ (cccp.o): Likewise.
+
+Tue Feb 2 07:09:36 1993 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * pa.md (cmov): Use @ for output.
+
+Mon Feb 1 01:50:54 1993 Paul Eggert (eggert@twinsun.com)
+
+ * c-decl.c (finish_decl, grokdeclarator, finish_struct): Report
+ overflows in storage sizes.
+ (build_enumerator): Report overflows in enumerators.
+ * fold-const.c (same_sign): Remove.
+ (lshift_double): Don't report arithmetic overflow, since the
+ C standard doesn't seem to require it here.
+ (force_fit_type): Accept new parameter specifying whether a signed
+ overflow has already occurred. Yield overflow indication.
+ All callers changed.
+ (neg_double): Don't report overflow when -0 yields 0.
+ (const_binop): Propagate operand overflow for warnings.
+ Don't report overflow when -1 + 1 yields 0.
+
+ * c-parse.in (unary_expr): Warn about overflows in parser-built
+ unary expressions.
+ * c-typeck.c (parser_build_binary_op): Warn about overflows and
+ conversions of out-of-range constants in parser-built binary
+ expressions.
+ (build_conditional_expr): Check conversions in if-then-else
+ expressions.
+ (build_c_cast): Ignore any integer overflow caused by a cast.
+ (convert_for_assignment): Warn if source had overflow in folding.
+ (process_init_constructor): Report overflows in array initializer
+ indexes.
+ * c-common.c (constant_expression_warning): Suppress duplicate
+ warnings.
+ (convert_and_check, overflow_warning, unsigned_conversion_warning):
+ New functions. Prototypes added to c-tree.h.
+
+ * expr.c (expand_builtin): Report overflow if __builtin_args_info
+ arg exceeds one word.
+ Fix punctuation of error messages.
+
+Sun Jan 31 17:45:11 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (simplify_and_const_int): Never consider bits outside
+ of MODE.
+
+Sun Jan 31 15:24:46 1993 Doug Evans (dje@wookumz.gnu.ai.mit.edu)
+
+ * objc-act.c (build_module_descriptor): Fix call to start_function.
+
+Sun Jan 31 13:08:05 1993 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * pa.md (zvdep32): Handle 5 bit immediates for operand 1.
+ (ashlsi3): Likewise.
+ (and + ashift): New combine pattern.
+
+Sun Jan 31 12:40:00 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * protoize.c: Include gvarargs.h before system headers.
+
+Sat Jan 30 18:51:46 1993 Doug Evans (dje@wookumz.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_compound_expr): insert missing return
+
+Sat Jan 30 16:10:56 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.c (reg_or_0_operand): Use CONST0_RTX instead of
+ const0_rtx.
+ (reg_or_0_or_nonsymb_mem_operand): New function.
+ (emit_move_sequence): Copying CONST0_RTX into any
+ register can be done directly. Use CONST0_RTX instead
+ of const0_rtx.
+ (output_fp_move_double): Handle copying a CONST0_RTX
+ into FP or integer registers.
+ (print_operand): Handle "%r0" for DFmode and SFmode
+ values too.
+
+ * pa.h (CONST_DOUBLE_OK_FOR_LETTER_P): Generalize.
+ (LEGITIMATE_CONSTANT_P): Allow 0.0.
+ (CONST_COSTS, case CONST_DOUBLE): fp0.0 is free when
+ not used in a SET expression.
+
+ * pa.md (cmpXf expands): Allow 0.0 for either operand
+ of the comparison.
+ (cmpXf insns): Allow 0.0 for either operand of the
+ comparison. Update output template to handle 0.0 as one
+ of the operands.
+ (movsi insn, fp->fp case): Update constraints and template to
+ allow store of zero into an FP register.
+ (movhi insn, fp->fp case): Likewise.
+ (movqi insn, fp->fp case): Likewise.
+ (movdi insn, fp->fp case): Likewise.
+ (movDF const_double pattern): Do not apply this pattern
+ if the const_double is zero.
+ (movdf insn, fp->fp and gr->gr cases): Update constraints
+ and output template to allow store of zero into a FP or GR.
+ Update condition string to allow zero as operand 1.
+ (movsf insn, fp->fp and gr->gr cases): Likewise. Also allow
+ store of zero into a memory location.
+
+Sat Jan 30 14:57:44 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-tree.h: Add many prototypes from bill@cygnus.com
+
+Sat Jan 30 01:06:52 1993 Niklas Hallqvist (niklas@spiff.gnu.ai.mit.edu)
+
+ * c-common.c (c_build_type_variant): Moved here from c-decl.c.
+ Redirected the TYPE_MAIN_VARIANT to the "real" main variant.
+ Build the possibly new array type on the permanent obstack if
+ the original type was permanent.
+ (permanent_obstack): Added extern declaration.
+ * c-decl.c (c_build_type_variant): Moved to c-common.c.
+
+Fri Jan 29 18:16:47 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/m68k/m68k.md (iorsi3): Add CC_STATUS_INIT if use bset.
+
+ * fold-const.c (force_fit_type): Abort if T not INTEGER_CST.
+ * tree.c (size_in_bytes): Only call force_fit_type for an INTEGER_CST.
+
+ * config/i386/t-linux (FIXINCLUDES): New file.
+ * configure (i[34]86-*-linux*): Use t-linux.
+
+Fri Jan 29 12:08:04 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * reload.c (find_reloads_toplev): When handling a (subreg (reg))
+ where (reg) will be replaced by a memory reference, if the memory
+ address is invalid for the mode of the subreg, then search the
+ memory address for reloads.
+
+ * pa.h (FIXED_REGISTERS): %r31 is not fixed.
+
+Thu Jan 28 23:49:25 1993 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * reg-stack.c (compare_for_stack_reg): Properly swap operands of a
+ COMPARE.
+
+Thu Jan 28 13:47:53 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.md (iorsi3): Split into two patterns, a named "iorsi3" which
+ only accepts registers, and a combiner pattern which accepts a
+ restricted set of constant integers for one term.
+ * pa.c (ior_operand): Do not accept registers.
+
+ * pa.h (LEGITIMIZE_ADDRESS): Delete cases which can never happen.
+
+ * pa.h (CPP_SPEC for OLD_CC): Delete.
+ (CC1_SPEC for OLD_CC): Likewise.
+ (MODES_TIEABLE_P): Simplify.
+ (ASM_OUTPUT_ADDR_VEC_ELT): Fix comment.
+ (leaf_function): Delete unused variable.
+ (HARD_REGNO_MODE_OK): Delete old useless version.
+ (FIRST_PARM_OFFSET): Likewise.
+ (FIRST_PARM_CALLER_OFFSET): Likewise.
+ (EXPAND_BUILTIN_SAVEREGS): Likewise.
+ (ASM_OUTPUT_REG_PUSH): Likewise.
+ (ASM_OUTPUT_REG_POP): Likewise
+
+Thu Jan 28 07:51:47 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * config/m68k/m68k.h (PRINT_OPERAND_PUNCT_VALID_P): Accept '/'.
+ * config/m68k/m68k.c (print_operand): Print %/ as REGISTER_PREFIX.
+ * longlong.h (umul_ppmm for 68000): Use %/ before all register
+ names.
+
+ * configure (install_headers_dir): New variable for each
+ configuration, used to set INSTALL_HEADERS_DIR in Makefile.
+ (*-*-sysv4*, *-*-sysv*): Set install_headers_dir to
+ install-headers-cpio.
+
+Thu Jan 28 07:30:25 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * a29k.md: Remove 29050-specific variants of patterns generating
+ loadm that have earlyclobber. This was put in for some very old
+ version of the '050, which isn't used anymore, that had a bug.
+
+Thu Jan 28 06:56:04 1993 Pat Rankin (rankin@eql.caltech.edu)
+
+ * vmsconfig.com: change instances of [.config] to [.config.vax].
+ * make-cc1.com, make-cccp.com, make-l2.com: change /include and -I
+ values from [.config] to [.config.] (this trailing period works with
+ GNU C's preprocessor but not with VAX C's).
+
+Thu Jan 28 06:48:57 1993 Michael Collison (collison@osf.org)
+
+ * optabs.c (init_fixtab, init_optabs): Fix typos in QFmode and HFmode
+ initialization.
+
+Wed Jan 27 13:11:26 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (includedir): Use local_prefix.
+
+Wed Jan 27 12:08:05 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.c (check_fp_mov): Delete unused function
+ (register_or_short_operand): Likewise.
+ (eq_or_neq): Likewise.
+ (gen_compare_reg): Likewise.
+ (reverse_relop): Likewise.
+ (frame_base)name): Delete unused variable.
+
+ * pa-ghpux.h (HAVE_ATEXIT): Delete. This is defined in pa.h
+ * pa-gux7.h (HAVE_ATEXIT): Likewise.
+ * pa-hpux.h (HAVE_ATEXIT): Likewise.
+ * pa-hpux7.h (HAVE_ATEXIT): Likewise.
+
+Wed Jan 27 06:46:50 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (simplify_relation_operation): We can compute the result
+ of a comparison of CONST_INTs no matter what mode the computation
+ is to be done in.
+
+ * expmed.c (emit_store_flag): Swap operands if first is a
+ constant and second is not.
+ Abort if compare_from_rtx didn't return an rtx with the code we
+ expect.
+ * expr.c (compare_from_rtx): Only swap operand if first is a
+ constant and second is not.
+
+ * c-common (declare_function_name): If char_array_type_node isn't
+ large enough for the name, make a larger type.
+ * c-decl.c (init_decl_processing): Make the arrays 200 long instead
+ of 10 to leave more room for most names.
+
+ * function.c (put_var_into_stack, fixup_var_refs_insns): Minor
+ cleanups.
+ (fixup_var_refs_1, case SET): Correctly check for simple insns
+ that don't need fixups.
+
+ * collect2.c: Delete ISCOFF macro which was in #ifdef _AIX.
+ * rs6000.h, a29k/unix.h (MY_ISCOFF): New macro.
+
+Tue Jan 26 19:31:31 1993 Tom Wood (Tom_Wood@NeXT.com)
+
+ * combine.c (combine_instructions): Initialize undobuf in the
+ event `gen_rtx_combine' is called before `try_combine'.
+
+Tue Jan 26 18:20:04 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * i960.md (umulsidi3+1): Add variant which accepts constants.
+
+ * fixinc.svr4: Change all uses of EX to SED.
+ * fixincludes (sys/types.h): Don't match on ssize_t.
+ (stdio.h): Change _VA_LIST_ to __gnuc_va_list for 386BSD.
+
+Tue Jan 26 13:46:04 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * xm-alpha.h (ONLY_INT_FIELDS): Define if not __GNUC__.
+
+ * collect2.c (write_list_with_asm): Use `__asm__' instead of
+ `asm', to avoid problems with `-fno-asm'.
+
+ * Makefile.in (insn-*.[ch], protoize.o, unprotoize.o, install): When
+ using a trailing semicolon to force a rule to not do anything,
+ explicitly run the command `true', to avoid warnings or other
+ problems with versions of make which don't like null commands.
+
+Tue Jan 26 07:14:29 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (simplify_binary_operation, case SMAX): Correctly
+ compute largest possible signed integer.
+
+ * Makefile.in: (rest.cross, gfloat.h, stmp-headers, mostlyclean):
+ Build and install gfloat.h instead of float.h.
+
+ * a29k/x-unix (CLIB): Add -lld.
+
+ * integrate.c (copy_rtx_and_substitute, case REG): Call
+ gen_lowpart instead of making an explicit SUBREG.
+
+ * stmt.c (expand_value_return): Call convert_move instead of the
+ erroneous convert_to_mode.
+
+Tue Jan 26 00:58:53 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * collect2.c (find_a_file): First `access' test was backwards.
+ (main): Set full_real_ld_suffix right.
+
+ * c-decl.c (init_decl_processing): Use 10 as size
+ of ..._array_type_node.
+
+ * cccp.c (handle_directive): Init already_output
+ after old_linenum label.
+ (finclude): Remove final backslash-newline *before* trigraph_pcp.
+ (write_output): Free line_command at end.
+
+Mon Jan 25 19:31:32 1993 Doug Evans (dje@wookumz.gnu.ai.mit.edu)
+
+ * print-rtl.c (debug_rtx_list, debug_rtx_find): New functions.
+ * .gdbinit (prl): New command.
+
+Mon Jan 25 14:49:45 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.c (init_arg_profiler, output_arc_profiler): Delete unused
+ functions.
+ * sparc.h (ARC_PROFILER): Delete unused macro.
+
+ * sparc.c (sparc_builtin_saveregs): New function.
+ * sparc.h (CPP_SPEC): Delete __sparc_frw__ define.
+ (TARGET_FRW_COMPAT): New macro.
+ (TARGET_DEFAULTS): Comment out -mfrw option. Add new commented
+ out option -mfrw-compat.
+ (EXPAND_BUILTIN_SAVEREGS): Call sparc_builtin_saveregs to emit rtl
+ inline instead of calling builtin_saveregs in libgcc.a.
+ * va-sparc.h (va_start): Rewrite to account for above changes.
+
+ * sparc.h (PRINT_OPERAND_PUNCT_VALID_P): Delete '@' case.
+ * sparc.c (print_operand): Likewise.
+ (output_fp_move_double): Delete FP_REG to GENERAL_REG and vice
+ versa copy support.
+ (output_fp_move_quad): Likewise.
+ * sparc.md (movsi, movtf, movdf, movdi, movsf): Delete f/r and r/f
+ constraint pairs.
+
+ * i960.c (secondary_reload_class): Correct test against
+ FIRST_PSEUDO_REGISTER.
+
+ * sparc.c (registers_ok_for_ldd_peep): Delete test for pseudos.
+
+ * optabs.c (emit_indirect_jump): Use Pmode instead of VOIDmode and
+ insn_operand_mode.
+
+ * calls.c (calls_alloca): Change name to calls_function. Add new
+ parameter WHICH to control old or new behaviour.
+ (expand_call): When stack space is preallocated and parameters
+ must be passed on the stack, precompute parameters that involve
+ function calls.
+
+ * c-decl.c (language_string): Delete from here.
+ * c-parse.in (language_string): Define here for C and Obj-C.
+
+Mon Jan 25 13:54:16 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * c-decl.c (finish_struct): Disable "structure/union defined
+ inside parms" if compiling with -traditional.
+
+Mon Jan 25 05:24:12 1993 Niklas Hallqvist (niklas at della.appli.se)
+
+ * i386.md (extendsidi2): Fix typo in regno.
+
+Mon Jan 25 00:07:18 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (lookup_label): Return 0 if not within a function.
+
+ * c-parse.in (unary_expr => ANDAND identifier):
+ Handle lookup_label returning 0.
+
+ * Makefile.in (install-float-h-cross):
+ Don't ignore error when running enquire.
+
+Sun Jan 24 22:41:00 1993 Michael Meissner (meissner@osf.org)
+
+ * c-typeck.c (build_compound_expr): Move the code into
+ internal_build_compound_expr, and pass second argument TRUE
+ indicating that this is the first call. For recursive calls, pass
+ FALSE. Do not make 0 a non_lvalue constant if this is the first
+ call, to allow return 0; from a pointer returning function to not
+ get a warning.
+
+Sun Jan 24 18:40:44 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/vax/vax.md (move/push address patterns):
+ Don't use alternative number to distinguish pushes from moves.
+ Use just one alternative `g' in output constraint.
+
+Sun Jan 24 07:19:03 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * final.c (final_scan_insn): Call alter_subreg on duplicate
+ operands (in case we need to split the insn).
+
+ * local-alloc.c (CLASS_LIKELY_SPILLED_P): Add default definition.
+ (alloc_qty_for_scratch, local_alloc): Use CLASS_LIKELY_SPILLED_P.
+
+Sat Jan 23 19:41:21 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * combine.c (apply_distributive_law): Don't mess with float arith.
+
+ * c-parse.in: Use new name objc-act.h.
+
+Sat Jan 21 13:12:49 1993 Serge Adda (adda@soft01)
+
+ * expmed.c (emit_store_flag): Reset ICODE using returned COMPARISON.
+
+Sat Jan 23 18:27:35 1993 Niklas Hallqvist (niklas@spiff.gnu.ai.mit.edu)
+
+ * config/m68k/tower.h (LIB_SPEC): Use %s instead of absolute path.
+ (STARTFILE_SPEC): Moved here from tower-as.h. Use %s instead of
+ absolute path.
+ * config/m68k/tower-as.h (STARTFILE_SPEC): Moved to tower.h.
+
+Sat Jan 23 16:28:48 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (change_newlines): Renamed from delete_newlines.
+ Insert a space in place of a newline. Caller changed.
+
+ * config/m68k/hp320.h (ASM_OUTPUT_DOUBLE_OPERAND): Delete space
+ before arglist.
+
+Sat Jan 23 09:20:41 1993 Niklas Hallqvist (niklas at della.appli.se)
+
+ * Makefile.in (cross-test): Depend on GCC_PARTS.
+
+Sat Jan 23 07:15:10 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload): After calling count_possible_groups, see
+ if we have to proceed with allocating a group.
+ (count_possible_groups): Use HARD_REG_SET, not a char array, for
+ consistency.
+
+ * rs6000.h (ADJUST_COST): Add new definition.
+
+Fri Jan 22 18:55:00 1993 Niklas Hallqvist (niklas at della.appli.se)
+
+ * fixinc.svr4: Use pwd if PWDCMD is undefined. Add missing echo
+ command.
+
+Fri Jan 22 18:08:47 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ Cygnus<-->FSF merge.
+
+ Thu Jan 21 15:26:59 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * Makefile.in (convert.o): Add dependencies.
+
+ * cp-gc.c (NULL): Undef before defining.
+ * cp-init.c (NULL): Likewise.
+ * cp-expr.c (NULL): Likewise.
+
+ * cp-decl.c (grokdeclarator): Relegate error about operator= to a
+ warning for now, an error later.
+
+ Tue Jan 19 16:40:19 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-type2.c (my_friendly_assert): Don't set errorcount or
+ sorrycount to zero, as we no longer say "please fix above errors".
+
+ Mon Jan 18 19:44:53 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-type2.c (my_friendly_abort): Exit quietly in cases of random
+ seg faults in the front-end in the presences of other errors. This
+ makes the handling of these things more uniform.
+
+ Mon Jan 18 16:23:11 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-typeck.c (build_unary_op): Improve error message for
+ {pre,post}-{increment,decrement}.
+
+ Mon Jan 18 13:58:14 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-typeck.c (build_binary_op): Improve error message.
+
+ Fri Jan 15 17:53:33 1993 Mike Stump (mrs@cygnus.com)
+
+ Fri Jan 15 00:35:22 1993 Niklas Hallqvist (niklas at della.appli.se)
+
+ * cp-decl.c (start_function): Removed the comp_target_parms test
+ when checking for implementations of "C" linkage functions, allows
+ for more overloading of extern "C" functions.
+
+ Fri Jan 15 17:32:56 1993 Mike Stump (mrs@cygnus.com)
+
+ Fri Jan 15 00:35:22 1993 Niklas Hallqvist (niklas at della.appli.se)
+
+ * cp-decl.c (grokvardecl): Implement the "one definition rule".
+
+ Fri Jan 15 17:17:05 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-search.c (get_base_distance): Compute results from calls to
+ recursive_bounded_basetype_p into a temp variable, as otherwise we
+ can clobber rval with a zero.
+
+ Fri Jan 15 17:10:59 1993 Mike Stump (mrs@cygnus.com)
+
+ Thu Jan 14 16:02:27 1993 Niklas Hallqvist (niklas at della.appli.se)
+
+ * cp-decl.c (start_function): Don't try to match static member
+ functions with "C"-linkage declared global functions.
+
+ Thu Jan 14 17:58:15 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-method.c, cp-type2.c, cp-typeck.c: Make sure the fourth
+ argument to build_overload_call is (struct candidate *)0 not just
+ a plain 0.
+
+ Thu Jan 14 17:15:40 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Don't warn on an initialized var
+ that's extern if it's a const.
+
+ Thu Jan 14 17:03:40 1993 Michael Tiemann (tiemann@rtl.cygnus.com)
+
+ * cp-pt.c (coerce_template_parms): Add new parameter IN_DECL.
+ Update error messages to give location information of the _DECL
+ when an instantiation fails.
+ (lookup_template_class): Ditto.
+ (tsubst): Ditto.
+ All callers changed.
+ * cp-tree.h (lookup_template_class): Update prototype.
+ * cp-parse.y (template_type_name): Update calls to
+ lookup_template_class.
+
+ Thu Jan 14 02:09:17 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl2.c (grokfield): Arrange for the type to be set on class
+ typedefs, cures one type of internal compiler error 62. Now calls
+ set_identifier_type_value just before pushdecl_class_level.
+
+ Wed Jan 13 22:43:58 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-search.c (get_base_distance): Allow checking of UNION_TYPEs,
+ as some of the init code calls us.
+
+ Wed Jan 13 21:12:22 1993 Mike Stump (mrs@cygnus.com)
+
+ Mon Jan 11 20:11:17 1993 Niklas Hallqvist (niklas at della.appli.se)
+
+ * cp-parse.y (implicitly_scoped_stmt, simple_stmt): New rules to
+ handle the changed semantics of selection & iteration statements
+ in ANSI C++ (check out 6.4-5 in the draft as opposed to the ARM).
+ (simple_if, stmt, compstmt): Changed to use the new rules.
+ (stmt_decl_msg): Removed this static (together with all its uses)
+ because it's now unnecessary.
+ (cond_stmt_keyword): New static string to use in the error message
+ of paren_expr_or_null.
+ (paren_expr_or_null): Use cond_stmt_keyword instead of stmt_decl_msg.
+
+ Tue Jan 12 18:53:44 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (lookup_name): If PREFER_TYPE is -2, don't call
+ lookup_nested_field.
+ * cp-spew.c (yylex) [IDENTIFIER case]: Call lookup_name with -2
+ instead of -1.
+
+ * cp-decl2.c (grokclassfn): If there's no IDENTIFIER_TYPE_VALUE (it
+ could have gotten blown away by poplevel_class), use ctype to build
+ the overload name.
+
+ * cp-call.c (convert_harshness): Avoid dereferencing a null PARM,
+ which can be passed in by convert_harshness itself.
+
+ Mon Jan 11 12:25:51 1993 Brendan Kehoe (brendan@cygnus.com)
+
+ * cp-tree.h (VTABLE_NAME_P, VBASE_NAME_P): Reverse order, so they'll
+ go for [1..3], to avoid referencing beyond the bounds of a name.
+
+ * cp-xref.c (fctname): Delete extern decl of `declname'.
+
+ * cp-type2.c (build_scoped_ref): Pass the nodes themselves down into
+ error_not_base_type, not the strings, since it'll peel off the decl
+ name and type name of them itself.
+
+ * cp-class.c (build_vbase_path): flag_assume_nonnull_objects is an
+ int, not a tree.
+
+ * dbxout.c (dbxout_type_methods): Only emit warning about dbx info
+ for templates when WARN_TEMPLATE_DEBUGGING is set. Only reference
+ the var WARN_TEMPLATE_DEBUGGING if we've got HAVE_TEMPLATES defined.
+ * cp-tree.h (HAVE_TEMPLATES): Define.
+ * cp-decl2.c (lang_decode_option): Set WARN_TEMPLATE_DEBUGGING when
+ given -Wall.
+ * flags.h (warn_template_debugging): Add extern decl.
+ * toplev.c (lang_options): Add -Wtemplate-debugging.
+
+ * cp-decl.c (make_temporary_for_reference): Call make_decl_rtl with
+ a NULL_PTR, not 0.
+ (finish_decl): Likewise.
+ (grokfndecl): With a NULL_PTR, not a NULL_TREE.
+
+ Fri Jan 8 19:43:52 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-search.c (get_binfo): Use obstack_ptr_grow instead of
+ obstack_int_grow, casting the int to a void*. When retrieving it,
+ cast the result of dereferencing SEARCH_STACK->FIRST as an int.
+ (get_base_distance): Likewise.
+ (breadth_first_search): Likewise.
+
+Fri Jan 22 15:09:42 1993 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * pyr.h (SIZE_TYPE): Define.
+ (NO_DOLLAR_IN_LABEL): Define.
+
+Fri Jan 22 12:19:47 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.c (secondary_reload_class): Simplify.
+
+Fri Jan 22 07:57:57 1993 Richard Kenner (kenner@vlsi1.ultra.nyu)
+
+ * collect2.c (our_file_name): New variable.
+ (find_a_file): Ignore filename equal to that in our_file_name.
+ (main): Initialize our_file_name.
+
+ * expr.c (emit_library_call): Correct mis-applied patch.
+
+Thu Jan 21 11:36:04 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (REG_CLASSES): Delete GENERAL_OR_FP_OR_SNAKE_FP register
+ class, it's not needed anymore. Delete all references. 'Z'
+ register class is now "ALL_REGS".
+ * pa.c (emit_move_sequence): Handle secondary reloads for SAR.
+
+Tue Jan 19 20:08:01 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ From Torbjorn Granlund (tege@sics.se):
+ * i960.c (cmplpower2_operand): New function.
+ * i960.md (addsi3): Clean up condition for when to use subo.
+ (umulsidi3): New pattern.
+ (non-canonical nand, nor): Remove paterns.
+ (clrbit, notbit static bit): New patterns.
+ (setbit, clrbit, notbit dynamic bit): New patterns.
+ (setbit static bit non-canonical): Remove pattern.
+ (muldf3, mulsf3, multf3): Add % to operand1.
+ (test recognizers): Use TAB efter mnemonic.
+
+ * reorg.c (update_reg_dead_notes): New function.
+ (fill_simple_delay_slots): Call new function when moving
+ instruction forward into a delay slot.
+
+ * sched.c (sched_analyze_1, sched_analyze_2): Ifdef out code added
+ for handling psuedo register equivalents that was added Dec 31 1992.
+
+ From Steve Chamberlain (sac@cygnus.com):
+ * libgcc1.c (__eqdf2, __nedf2, __gtdf2, __gedf2, __ltdf2, __ledf2,
+ __eqsf2, __nesf2, __gtsf2, __gesf2, __ltsf2, __lesf2): comparison
+ result type is now word_mode.
+ * libgcc2.c (cmpdi2, ucmpdi2): comparison result type is now
+ word_mode.
+ * optabs.c (emit_cmp_insn, emit_float_lib_cmp): libcall comparisons
+ return word_mode.
+
+Tue Jan 19 15:28:59 1993 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * function.c (fixup_var_refs_1): Set INSN_CODE to -1 before seeing
+ if new insn form is recognized.
+
+ * reg-stack.c (all functions): Use NULL_RTX instead of 0 for rtx
+ comparisons.
+
+ (emit_pop_insn): Emit insn with mode QImode: insn contains
+ stack-regs.
+
+ (emit_hard_swap_insn): Delete.
+ (emit_swap_insn): Merge with emit_hard_swap_insn.
+ Delete WHEN arg and change all callers.
+ If previous insn was a push from REG, omit swap.
+ If previous insn wrote reg-stack top to REG, omit swap.
+ Emit swap insn with mode QImode: insn contains stack-regs.
+ Emit swap insn after previous float insn, instead of before this
+ one.
+
+ (swap_rtx_condition): New function.
+ (compare_for_stack_reg): If op 0 of COMPARE is not a stack reg,
+ exchange ops 0 and 1 and swap cc0 user condition.
+
+ * i386.h (PREFERRED_RELOAD_CLASS): Narrow ALL_REGS to
+ GENERAL_REGS.
+ (PREFERRED_OUTPUT_RELOAD_CLASS): New macro. Narrow ALL_REGS to
+ GENERAL_REGS.
+ (SECONDARY_MEMORY_NEEDED): New macro.
+
+ * i386.md (cmpdf_cc,cmpsf_cc): Allow first operand to be a MEM.
+ Don't allow both operands to be MEM.
+ (float addM3,subM3,divM3,mulM3 recognizers): Don't allow either
+ operand to be a constant.
+
+ (all float patterns, FLOAT_EXTEND operands): Don't allow
+ GENERAL_REGS for float_extended operand.
+ (all float patterns, FLOAT operands): Change constraints to get
+ better register classification.
+ (fix_truncMN2 patterns): Likewise.
+ (floatMN2 patterns): Likewise.
+
+Tue Jan 19 15:51:16 1993 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * pa.md (define_function_unit for memory): Memory is pipelined.
+
+ * pa.md (sCC patterns): Use %char notation instead of nested
+ if stmts.
+ (branch matchers): Likewise.
+ (incscc, negscc): Likewise. Add ? constraint for 3-insn
+ alternative.
+ (incscc): Split into `incscc' and `decscc' to make this really
+ match.
+ (incscc/decscc special cases): New patterns using carry bit.
+ * pa.c (print_operand): Handle 'S' and 'B' for conditions.
+ Handle 'I' for printing 'i' when CONST_INT.
+ Handle 'k' for ones-complement of CONST_INT.
+ (incscc_operator): Remove.
+
+ * pa.md (many patterns): Use canonical address format. Use %r
+ register notation. Use GEN_INT.
+
+ * pa.md (main move SF recognizer): Allow 0 for copying to
+ general register.
+
+ * pa.md (zero_extendhisi2): Remove DEFINE_EXPAND.
+ (zero_extendqihi2): Likewise.
+ (zero_extendqisi2): Likewise.
+ (comment before sign extension): Remove the lie.
+
+ * pa.h (REG_CLASS_FROM_LETTER): Remove partly incorrect PA
+ documentation.
+
+Tue Jan 19 09:22:06 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fold-const.c (non_lvalue): Result must not be null ptr constant.
+ (omit_one_operand): Use non_lvalue.
+ (fold, case COMPOUND_EXPR): Use non_lvalue if value is 0.
+ * c-typeck.c (build_compound_expr): Use non_lvalue if value is 0.
+
+Tue Jan 19 08:29:16 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.c (print_operand, case 'k'): New case.
+ * rs6000.md (plus of gtu patterns): Add case to handle immediates.
+
+ * rs6000.c (output_epilog): Only restore the cr's that we actually
+ used; previously, we saved and restored all of them.
+
+ * combine.c (combine_instructions): Clear reg_last_set_label.
+
+Tue Jan 19 01:16:45 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * flow.c (find_basic_blocks): Don't mark labels in nonlocal_label_list
+ that were deleted due to having no references.
+
+Mon Jan 18 21:02:22 1993 H.J. Lu (hlu@yardbird.eecs.wsu.edu)
+
+ * configure (--local-prefix=DIR): new flag sets $local_prefix.
+ The default is /usr/local. Put it into Makefile.
+
+ * Makefile.in (local_prefix): new prefix, the default is /usr/local.
+ (cccp.o): change LOCAL_INCLUDE_DIR to $(local_prefix)/include.
+
+Mon Jan 18 15:29:46 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc-act.c, objc-act.h: Renamed from objc-actions.*.
+ * objc-act.c: Include objc-act.h.
+ * Makefile.in: Targets and deps changed.
+
+ * objc-actions.c (encode_method_def): Null-terminate encoding.
+ (build_ivar_list_initializer): Null-terminate type encoding.
+
+ * cccp.c (include_defaults): Do use GCC_INCLUDE_DIR for cross compiler.
+ Move TOOL_INCLUDE_DIR later if cross.
+
+Mon Jan 18 13:39:32 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * expr.c (emit_library_call): Handle OUTGOING_REG_PARM_STACK_SPACE.
+ Use NULL_TREE instead of (tree) 0.
+
+ * expr.c (emit_move_insn, expand_expr): Fix typos in comments.
+
+ * cccp.c (initialize_builtins): Add uses of new macros
+ NO_BUILTIN_SIZE_TYPE and NO_BUILTIN_PTRDIFF_TYPE.
+
+ * i960.h (ROUND): Change macro name to ROUND_PARM.
+ * i960.c (i960_function_arg_advance, i960_function_arg): Likewise.
+
+ * stor-layout.c (make_signed_type): Consistently use
+ HOST_BITS_PER_WIDE_INT. Correct minor formatting problems.
+ (fixup_signed_type): Use HOST_BITS_PER_WIDE_INT and HOST_WIDE_INT
+ like make_signed_type does.
+ (fixup_unsigned_type): Correct minor formatting problem.
+
+ * x-linus (LANGUAGES): Delete.
+
+Mon Jan 18 08:13:34 1993 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * Makefile.in (stmp-headers): Delete target files before copying
+ to them.
+
+Mon Jan 18 06:23:35 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * collect2.c (choose_temp_base, main): Fix "off by one" errors in
+ sizes of allocated strings.
+
+Mon Jan 18 00:32:20 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (process_command): Fix typo in last change.
+
+Sun Jan 17 13:09:03 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (FP_REG_CLASS_P): New macro.
+ (REGISTER_MOVE_COST): Use FP_REG_CLASS_P to simplify. Make moves
+ from SAR to expensive that they should never happen.
+
+Sun Jan 17 10:38:38 1993 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * pa.c (emit_move_sequence): Fix spacing.
+ (compute_zdepi_operands): Fix header comment.
+ (many functions): Use %%r register syntax. Use canonical (0,%rN)
+ address format.
+ (output_function_prologue): No need to test frame_pointer_needed
+ in else clause of `if (frame_pointer_needed)'.
+ (output_function_prologue): Test boolean merge_sp_adjust_with_store
+ for zeroness, not for equality with 1.
+ (fmpyaddoperands): Use new variable mode for mode of operands[0].
+ (fmpysuboperands): Likewise.
+
+Fri Jan 15 16:42:30 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (LEGITIMIZE_ADDRESS): Handle (plus (mult (X) (Y)) (Z))
+ when Y is 2, 4, or 8 specially.
+ * pa.c (shadd_constant_p): New function.
+
+ * integrate.c (FIXED_BASE_PLUS_P): Fix typo.
+
+ * loop.c (move_movables): Clear INSN_CODE for each insn as
+ we perform register replacements.
+ (strength_reduce): Likewise.
+
+Fri Jan 15 16:02:07 1993 Brendan Kehoe (brendan@mole.gnu.ai.mit.edu)
+
+ * final.c (alter_cond): Undo previous change.
+
+Thu Jan 14 22:09:40 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in (stmp-headers): Avoid problems with relative
+ $(srcdir) when installing syslimits.h.
+
+Thu Jan 14 19:20:01 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * c-decl.c (c_decode_option): Set WARN_UNINITIALIZED to 2 with
+ -Wall, being careful to preserve it if it's already set.
+ * cp-decl2.c (lang_decode_option): Likewise.
+ * toplev.c (main): Warn about using -Wuninitialized without -O.
+
+ * cccp.c (main): Trim down to the basename of what's to go in
+ PROGNAME.
+
+ * gcc.c (process_command): Only accept input files which exist and
+ can be read; prevent link phase if an input file was rejected. Be
+ careful not to check for `-l' directives.
+ (error_count): Make into a static global variable.
+
+Thu Jan 14 18:19:35 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * t-mips, t-ultrix, t-osfrose: Change `config/' to `config/mips/'.
+
+Thu Jan 14 16:55:11 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (CONDITIONAL_REGISTER_USAGE): Do not make %r27 a global_reg.
+
+ * pa.c (output_function_prologue): Combine stack adjustment and
+ first GR save when reasonable to do so.
+ (output_function_epilogue): Combine stack adjustment and first
+ GR restore when reasonable to do so. Avoid load/use stall for
+ RP restore in common cases.
+
+ * pa.h (LEGITIMIZE_ADDRESS): Rework to create REG and REG+D
+ addresses instead of REG+REG addresses.
+
+Thu Jan 14 15:45:50 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc/core.c (initialize_dispatch_tables): Create an entry in RECORD
+ for each class used in a given file, not just one.
+
+Thu Jan 14 12:00:35 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in (INSTALL_HEADERS_DIR, FLOAT_H, CROSS_FLOAT_H): New
+ variables.
+ (INSTALLED_H): Removed.
+ (float.h): Copy from $(FLOAT_H).
+ (float.h-nat, float.h-cross): New targets.
+ (stmp-headers, stmp-fixincludes): New targets to build fixed
+ include files in build directory.
+ (all.cross, rest.encap): Depend on stmp-headers.
+ (clean): Remove the include directory and stmp-*.
+ (install-normal): Renamed from install-native.
+ (install-cross): Removed.
+ (INSTALL_TARGET): Changed to install-normal from install-native.
+ (install-headers): Install from build directory.
+ (install-include-dir, install-headers-tar,install-headers-cpio,
+ install-assert-h): New targets.
+ (install-float-h, install-limits-h, install-common-headers,
+ install-fixincludes): Removed.
+ * cross-make (INSTALL_TARGET): Don't override.
+ (FLOAT_H): New override, set to $(CROSS_FLOAT_H).
+
+Thu Jan 14 14:17:05 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * libgcc2.c: Correct typo in comment.
+
+ * fixinc.sco, fixinc.svr4 (egrep and sed loop): Don't print
+ messages about files that need no change.
+
+ * sparc.md (muldf+1, muldf+2): Add patterns for fsmuld and fdmulq.
+
+ * sparc.c: Clarify numerous *_operand comments.
+ (SPARC_STACK_ALIGN): Delete.
+ (sparc_frw_output_function_epilogue): Delete unused variable
+ load_only_r15.
+ (sparc_frw_epilogue_delay_slots): Delete r15/fmask test.
+ * sparc.md: Document sparclite integer multiply cycle times.
+ (movdf, !TARGET_FPU): Remove tests for floating point registers.
+ (divsi3, udivsi3): Correct length attribute.
+ (ffssi2): Define for sparclite.
+ * sparc.h (CPP_SPEC): Add -mfrw support.
+ (OVERRIDE_OPTIONS): Define. Can't omit frame pointer or do pic
+ when profiling.
+ (REG_USED_SO_FAR): Delete.
+ (CONST_COSTS): Give SMALL_INT constants cost of 0. Make UDIV,
+ DIV, MOD, UMOD more expensive. Make FIX same cost as FLOAT.
+ (TARGET_FRW): Define.
+ (TARGET_DEFAULTS): Add -mfrw flag.
+ (INITIAL_FRAME_POINTER_OFFSET): Add -mfrw support.
+ (BASE_OUTGOING_VALUE_REG, BASE_INCOMING_ARG_REG): Likewise.
+ (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE): Likewise.
+ (DELAY_SLOTS_FOR_EPILOGUE, ELIGIBLE_FOR_EPILOGUE_DELAY): Likewise.
+ (EXPAND_BUILTIN_SAVEREGS): Likewise.
+
+ * expr.c (do_tablejump): Pass 1 for unsigned flag to emit_cmp_insn.
+
+Thu Jan 14 14:43:15 1993 Torbjorn Granlund (tege@sics.se)
+
+ * pa.c (move_operand): Allow all CONST_INTs that can be moved to
+ general registers with one insn.
+ * pa.c (pre_cint_operand): New predicate for predecrementing
+ ldwm/stwm insns.
+ * pa.c (zdepi_cint_p): New function.
+ * pa.c (depi_cint_operand): Remove.
+ * pa.c (and_mask_p): New name for consec_zeros_p. All callers
+ changed.
+ * pa.c (srcsi_operand): Removed.
+ * pa.c: Use INT_14_BITS instead of synonym SMALL_INT.
+ * pa.c (emit_move_sequence): Clean up CONST_INT case.
+ * pa.c (compute_zdepi_operands): New name for
+ compute_xdepi_operands_from_integer. Change second parm to return
+ plain integers, was RTXes.
+ * pa.c (print_operand): Handle 'Z' for 'zdepi' source used to move
+ CONST_INT.
+
+ * pa.h (CONST_OK_FOR_LETTER_P): Change meaning of 'K'. Add new
+ alternative 'N'. Use VAL_*_BITS_P macros when possible.
+ * pa.h (LEGITIMATE_CONSTANT_P) Fix comment.
+ * pa.h (FITS_14_BITS): Remove.
+ * pa.h (SMALL_INT): Remove.
+
+ * pa.md (move patterns): Reorganize pattern order. Cleanup. Merge
+ CONST_INT patterns into main patterns for SImode, HImode, QImode.
+ Add patterns to recognize predecrement cases in SImode, HImode,
+ QImode. Remove 'y' constraint from SImode recognizer.
+ (main HImode, QImode recognizers): Handle SAR move from greg.
+ Change constraints to match the SImode pattern.
+ * pa.md (cmov): Move near other conditional patterns.
+ * pa.md: Replace all occurences of srcsi_operand with move_operand.
+ Replace `ldo X(0),d' with `ldi X,d'.
+ * pa.md (rotlsi3): Remove SET_ATTRs.
+ * pa.md (rotrsi3): Likewise.
+
+Thu Jan 14 13:33:55 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * rtl.c (copy_rtx): A MEM with constant address is not sharable.
+ Undo Dec 27 change.
+
+Thu Jan 14 06:45:51 1993 James Van Artsdalen (jrv@goldman.gnu.ai.mit.edu)
+
+ * i386.md (cmpstr patterns): Fix mode mismatch in SET.
+
+Wed Jan 13 16:05:07 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * configure: Precompute version in generated Makefile.
+
+ * Makefile.in: (CROSS_GCC_CFLAGS, CROSS_TOOLS, REAL_LD_NAME,
+ install-cross-tools): Removed.
+ * cross-make (CROSS_GCC_CFLAGS, CROSS_TOOLS): Removed.
+ (SYSTEM_HEADER_DIR): Set to $(tooldir)/include.
+ * gcc.c: Use TOOLDIR_BASE_PREFIX, not TOOLDIR_PREFIX.
+
+Wed Jan 13 12:04:21 1993 Michael Meissner (meissner@osf.org)
+
+ * libgcc2.c (_ffsdi2): Use the correct names for structure
+ elements of type DIunion. Return the correctly typed value.
+
+ * mips-tdump.c (print_file_desc): Correctly scale the rfd pointer.
+ Patch from ian@cygnus.com.
+
+Wed Jan 13 10:04:26 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (ASM_OUTPUT_INTERNAL_LABEL): Fix typo.
+
+Wed Jan 13 03:05:08 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixinc.svr4 (rpc/types.h): Change const extern to extern const.
+
+ * expr.c (expand_increment): Handle all preincrements by building
+ arithmetic and calling expand_assignment.
+
+ * stmt.c (expand_asm_operands): For clobbering memory,
+ generate (MEM (SCRATCH)) inside the CLOBBER.
+
+ * cccp.c (include_defaults):
+ Put GCC_INCLUDE_DIR just before the system dirs whose files are fixed.
+
+ * Makefile.in (risky-stage1, etc): Use $(GCC_PARTS) as what to mv.
+
+Tue Jan 12 23:24:30 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * stor-layout.c (variable_size): Change back to NULL_PTR.
+
+Tue Jan 12 18:59:01 1993 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * reload1.c (reload): Clear reload_in_progress even if reloading
+ fails.
+
+Tue Jan 12 18:32:01 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * calls.c (emit_call_1): Pass a NULL_RTX into emit_call_insn for
+ missing last arg.
+
+ * stor-layout.c (variable_size): Call expand_expr with a NULL_RTX,
+ not a NULL_PTR.
+
+ * integrate.c (const_equiv): Delete decl, since it's never defined.
+ (fold_out_const_cc0): Likewise.
+ * loop.c (delete_insn_forces): Likewise.
+ * final.c (alter_cond): Delete decl, since it's never defined.
+
+ * fold-const.c (fold): Only call force_fit_type with one arg.
+
+ * expr.c (group_insns): Make void, since it never returns an rtx.
+
+ * emit-rtl.c (emit_jump_insn_before): Call make_jump_insn_raw with
+ only one argument.
+ (emit_jump_insn_after): Likewise.
+ (emit_jump_insn): Likewise.
+
+ * dbxout.c (dbxout_type) [case FILE_TYPE, SET_TYPE]: Call with
+ missing third arg as 0.
+
+ * cse.c (fold_rtx): Call itself with missing arg INSN as NULL_RTX.
+
+Tue Jan 12 17:53:13 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ From Fred Fish:
+ * fixinc.svr4 (stat.h): Don't depend upon specific formal
+ parameter names when locating static functions to convert
+ to prototype form. Also be more selective about what
+ strings to prepend underbars to during renaming of formal
+ parameters and local variables in static functions.
+
+ * cccp.c (main): Set signal handler for SIGPIPE.
+ (pipe_closed): New function, to handle SIGPIPE.
+
+Tue Jan 12 17:48:13 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (compare_from_rtx): Allow simplify_relational_operation to
+ fail.
+
+Tue Jan 12 02:52:50 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * optabs.c (init_optabs): Use plain `ffs' for SImode ffs_optab libcall.
+
+ * Makefile.in (LIB2FUNCS): Add _ffsdi2.
+ * libgcc2.c (__ffsdi2): New function.
+
+ * c-decl.c (init_decl_processing): Declare ffs as builtin.
+
+ * fixincludes (egrep and sed loop): Don't print messages about
+ files that need no change.
+
+Mon Jan 11 17:22:16 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.c (eligible_for_epilogue_delay): Delete unused variable
+ `this_function_name'.
+ (output_fp_move_double): Delete unused var `addr'.
+ (output_fp_move_quad): Likewise.
+ (fregs_ever_live): Delete unused static var.
+ (output_function_epilogue): Delete `n_fregs' and `i'.
+ (sparc_frw_output_function_prologue): Delete `regno'.
+ (sparc_frw_output_function_epilogue): Delete `load_nop'.
+
+ * reload1.c (reload): Delete unused variable inc_groups.
+
+ * sparc.h (TARGET_SWITCHES): Add no-fpu and hard-float.
+ (CONDITIONAL_REGISTER_USAGE): Define for ! TARGET_FPU.
+ (BASE_RETURN_VALUE_REG): Use reg 8 when ! TARGET_FPU.
+ (BASE_OUTGOING_VALUE_REG): Use reg 24 when ! TARGET_FPU.
+ * sparc.md (*): Make all fp patterns conditional on TARGET_FPU.
+ (movtf, movdf, movsf): Add !TARGET_FPU versions.
+ (sfmode return): Add pattern for when !TARGET_FPU.
+ (movsi+2, movsf+1): Use %@ instead of %%fp.
+ (mulsidi3, umulsidi3): Rewrite, to avoid extending constants.
+
+ * fixincludes: Do not consider //* to be a C++ comment which needs
+ to be fixed.
+
+Mon Jan 11 15:03:41 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (REG_OK_FOR_BASE_P, REG_OK_FOR_INDEX_P): Fix typos.
+
+Mon Jan 11 12:41:06 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/xm-svr4.h (sys_siglist): New macro.
+
+Sun Jan 10 18:16:49 1993 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (extendsidi2,zero_extendsidi2): New patterns.
+ (adddi3,subdi3): Don't emit code for low part if known to be zero.
+
+ * i386/xm-sysv4.h (alloca): Delete - already defined in xm-i386.h.
+
+ * i386/xm-aix.h,i386/xm-sun.h: Include i386/xm-i386.h.
+ Remove redundant defines.
+
+Sun Jan 10 18:00:17 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (GENERAL_OR_FP_OR_SNAKE_FP_REGS): New register class.
+ (LEGITIMIZE_ADDRESS): No longer show DP relocation. Simplify.
+ * pa.md (reload_insi, reload_outsi): Use new "Z" constraint instead
+ of "z" constraint.
+ (load HIGH patterns): Rewrite to not show DP relocation.
+ * pa.c (output_global_address): Handle (high (const (plus ...))).
+ (secondary_reload_class): If TARGET_KERNEL, then loading a
+ symbolic address, or the high part of a symbolic address requires
+ %r1 as a secondary reload register.
+ (emit_move_sequence, SYMBOL_REF case): If TARGET_KERNEL, then handle
+ secondary reload created for a symbolic (high (const (plus ...))).
+ No longer show DP relocation; read_only and normal operands emit the
+ same RTL now.
+ Emit the same RTL before and after reload, only change how the
+ scratch/temporary register is chosen.
+
+Sun Jan 10 11:42:12 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (make_extraction): Don't use POS < 0 as a flag
+ that POS_RTX is to be used; instead use POS_RTX unless it is
+ nonzero. If POS_RTX is a constant, set POS and clear POS_RTX.
+ (make_compound_operation, make_field_assignment): Pass 0 for POS
+ instead of -1 when POS_RTX is nonzero.
+
+Sat Jan 9 01:34:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload1.c (reload_as_needed): Test for whether to call
+ forget_old_reloads_1 for a REG_INC note was backwards.
+
+ * config/i386/xm-i386.h (alloca): Undef before defining.
+
+ * config/i860/sysv3.h (ASM_OUTPUT_LOCAL): New override.
+
+ * gcc.c (lookup_compiler): Fix special code for `-' suffix.
+
+ * c-lex.c (yylex): Change warning msg when decimal const is unsigned.
+
+ * Makefile.in (bootstrap*): Pass BOOT_LDFLAGS down as LDFLAGS.
+
+ * Makefile.in (install-dir): Don't create gcc-lib/include.
+
+ * objc-actions.c (init_module_descriptor):
+ Use size_in_bytes to get size of `struct objc_module'.
+
+ * c-decl.c (init_decl_processing): Use unsigned_intQI_type_node,
+ not unsigned_char_..., as index type for ..._array_type_node.
+
+ * toplev.c (really_sorry): Use progname in error message, not c++.
+
+ * optabs.c (expand_binop): For complex mult, compute res
+ in each alternative, not before.
+
+ * Makefile.in (bootstrap): Pass along CC and libdir in first compile.
+
+ * c-decl.c (pushdecl): Avoid multiple extern decl mismatch warnings
+ when previous decl is built-in.
+
+ * cccp.c (macroexpand): Before concatenated empty rest arg,
+ do copy constant chars, but delete last run of nonwhitespace chars.
+ (rescan): Handle Newline-Hyphen in expand_to_temp_buffer
+ as well as when scanning a macro body.
+
+Sat Jan 9 09:11:25 1993 Michael Tiemann (tiemann@rtl.cygnus.com)
+
+ * varasm.c (output_constant): Handle CHAR_TYPE and BOOLEAN_TYPE like
+ INTEGER_TYPE.
+
+Sat Jan 9 08:06:42 1993 Michael Meissner (meissner@osf.org)
+
+ * cccp.c (main): If we are creating a new dependency file with -MD
+ or -MMD, use "w" fopen mode instead of "a".
+
+Fri Jan 8 20:58:12 1993 Brendan Kehoe (brendan@mole.gnu.ai.mit.edu)
+
+ Cygnus<->FSF merge.
+ Thu Jan 7 18:16:05 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-parse.y (template_type): Avoid dereferencing an error_mark.
+
+ Wed Jan 6 17:43:23 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (init_decl_processing): Make flag_no_builtin avoid
+ definitions of builtin fns memcpy, memcmp, strcmp, strcpy, strlen,
+ sin, and cos. (Add sin and cos.)
+ (flag_no_builtin): Add extern decl.
+
+ * cp-decl.c (current_local_enum): New variable.
+ (start_enum): Set TREE_ADDRESSABLE on the tag here, and clear
+ current_local_enum.
+ (build_enumerator): Build the field decl here, rather than in
+ grok_enum_decls; set its TREE_CHAIN to the current_local_enum.
+ (grok_enum_decls): Chain down, setting the type.
+
+ Tue Jan 5 22:09:18 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-pt.c (tsubst): Properly demangle a method's name if it's for an
+ operator.
+
+ Tue Jan 5 15:29:40 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-method.c (build_opfncall): Make postfix/prefix ++/-- work by
+ setting the second arg to 0 when using postfix ++/--.
+
+ * cp-decl.c (grokdeclarator): Forbid declaring operator= from being
+ declared as a non-member (or friend) function.
+
+ Tue Jan 5 14:26:38 1993 Mike Stump (mrs@cygnus.com)
+
+ Jan 5 14:09:08 1993 Paul Eggert (eggert@twinsun.com)
+
+ * cp-lex.c (): Propagate a change from c-lex.c.
+
+ Tue Jan 5 13:27:05 1993 Mike Stump (mrs@cygnus.com)
+
+ Sep 14 17:48:27 1992 Paul Eggert (eggert@twinsun.com)
+
+ * cp-lex.c (real_yylex): For floats, use REAL_VALUES_LESS to
+ distinguish underflow from overflow. Delete special case for 0.0.
+
+ Mon Jan 4 15:26:47 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-typeck.c (build_array_ref): Convert the index from a reference
+ before doing any appropriate type conversions.
+
+ Wed Dec 30 15:36:18 1992 Per Bothner (bothner@cygnus.com)
+
+ * convert.c: New file. Contains the common utility routines
+ from c-convert.c and cp-cvt.c (such as convert_to_integer).
+ * convert.h: New file: declarations exported from convert.c.
+ * c-convert.c, cp-cvt.c: Correspondingly reduced.
+ * cp-cvt.c (cp_convert_to_pointer): New function, with the
+ extra hair beyond that provided by the C convert_to_pointer.
+ * Makefile.in (OBJS): Add convert.o.
+ * cp-typeck.c (build_binary_op), cp-tree.h: Add extra convert_p
+ parameter, for consistency with the C version (so we can make
+ convert_to_integer independent of C or C++).
+ * cp-cvt.c, cp-decl.c, cp-decl2.c, cp-except.c, cp-init.c,
+ cp-typeck.c, cp-parse.y: Fix calls to build_binary_op to pass
+ the new convert_p parameter (i.e. 1).
+
+ Fri Dec 18 19:19:28 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-method.c (build_overload_nested_name): Use DECL_NAME instead of
+ DECL_ASSEMBLER_NAME, since pushtag now mangles together
+ DECL_ASSEMBLER_NAME. This will make us emit `Q21D1B', not `Q221D1B'.
+
+ * cp-decl2.c (grokclassfn): Try using the local value for a nested
+ type if the IDENTIFIER_TYPE_VALUE isn't there.
+
+ Wed Dec 16 18:18:43 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-typeck.c (build_unary_op): Set TREE_CONSTANT on the address of
+ a function if it's static or external (i.e., staticp likes it).
+
+ Wed Dec 16 16:09:37 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (sigsegv, init_decl_processing): Give users the line
+ number and source filename on code that makes the back-end call
+ abort.
+
+ Tue Dec 15 16:50:45 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-tree.h (CLASSTYPE_NAMES): Deleted.
+
+ * cp-init.c (build_offset_ref): When getting ready to give an error
+ about something not being a member or operator, only call
+ operator_name_string when it is indeed an operator.
+
+ * cp-decl2.c (bad_specifiers): New function.
+ * cp-tree.h (bad_specifiers): Add prototype.
+ * cp-decl.c (grokdeclarator): Use it in places where we had
+ replicated code.
+
+ Tue Dec 15 04:05:54 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-lex.c (UNSET_RESERVED_WORD): Update from c-lex.c.
+
+ Tue Dec 15 01:21:44 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-lex.c (real_yylex): Convert invisible initialized char array
+ vars to string constants.
+
+ Mon Dec 14 11:38:10 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * Makefile.in: Fix a lot of dependencies on cp-lex.h and other
+ headers for cp-*.o targets.
+
+ * cp-search.c (get_first_matching_virtual): Use warning_with_decl,
+ not error_with_decl, inside code that's only ever reached with
+ -Woverloaded-virtual.
+
+ * cp-typeck.c (c_expand_return): When building the INIT_EXPR, clear
+ out the context if it's an ERROR_MARK so the back-end won't die later.
+
+ * cp-type2.c (my_friendly_abort): Don't say anything like "please
+ fix above errors", just exit quietly.
+
+ * cp-lex.h (enum rid): Reordered for improved speed in grokdeclarator
+ when it does its linear search. RID_WCHAR is no longer in the
+ search path, since it's found by hand (as are RID_INT and RID_CHAR).
+ (RID_FIRST_MODIFIER): Start at RID_EXTERN now.
+
+ * cp-parse.y (overloaddef): Warn that using `overload' is an
+ anachronism.
+
+ Wed Dec 9 08:27:13 1992 Niklas Hallqvist (niklas at della.appli.se)
+
+ * cp-decl.c (init_decl_processing): Make sure the "unknown type"
+ typedecl gets ignored by the debuginfo generators.
+
+ Sun Dec 13 02:38:43 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ * cp-search.c (lookup_nested_field): Check for assignment to members
+ of an enclosing class only when looking at a member, not at other
+ things (like nested types).
+
+ * cp-pt.c (type_unification): Only check that ARGS is a TREE_LIST if
+ it's non-null.
+
+ These four are from Niklas Hallqvist:
+
+ * cp-search.c (compute_visibility): Use the main variant when
+ testing if a member function belongs in the current class.
+
+ * cp-call.c (build_method_call): Don't look for constructors
+ called by initialization inside class methods in the classes'
+ bases (as opposed to inherited methods).
+
+ * cp-typeck.c (convert_for_initialization): In the case of
+ templates, make sure build_method_call knows which instantiation
+ of the class template we're initializing an object of.
+
+ * cp-decl.c (grokdeclarator): Instead of an assert, return a
+ NULL_TREE if the return_type's not return_ctor.
+
+ Sat Dec 12 23:52:25 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-dem.c (cplus_demangle): Recognize 'S' for signed char.
+ (do_cuv_prefix): Print out "signed" for it.
+
+ Fri Dec 11 19:36:36 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-cvt.c (convert_to_reference): Fix a typo about when to return
+ the result of a type conversion.
+
+ Tue Dec 8 20:05:25 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-cvt.c (convert_to_reference): If a conversion can be found via
+ a constructor, then use it.
+
+ Fri Dec 4 13:53:01 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-lex.c (init_lex): Delete inits for CARD_EXPR and SET_LE_EXPR,
+ since we never actually use them.
+
+ Thu Dec 3 19:20:14 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c: Include sys/types.h for systems that need things for
+ signal.h.
+
+ Wed Dec 2 15:51:34 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-call.c (build_method_call): Don't call abort for pure virtual
+ methods, instead, call the user-defined method. Addresses of pure
+ virtual methods are probably still wrong.
+
+ Wed Dec 2 14:44:41 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-call.c (convert_harshness): If parm's null for a reference (as
+ can be passed in), return 0.
+
+ Tue Dec 1 18:05:20 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Make member initialization be a
+ warning, not an error. Only issue it if not -pedantic, since
+ grokfield will issue an error when pedantic. Only warn about
+ constant members being initialized if `-ansi' is being used.
+ (finish_decl): Only complain about uninitialized const's that aren't
+ members when acting -pedantic, since we'll have already issued the
+ error about initializing a field.
+
+ * cp-type2.c (build_functional_cast): Revert change of Nov 2,
+ concerning clearing the TREE_VALUE of a default parameter.
+
+ Tue Dec 1 11:09:50 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-call.c (build_method_call): When looking for a default arg
+ initialized by a ctor, be careful of a null ref w/ operand 1.
+
+ * cp-method.c (icat): Handle an argument of `1' first, since it's
+ the most common case.
+
+ Tue Dec 1 02:36:28 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-search.c (get_first_matching_virtual): Only set the
+ DECL_CONTEXT if the new context is a an unambiguous parent of the
+ previous context.
+
+ Tue Dec 1 02:20:32 1992 Mike Stump (mrs@cygnus.com)
+
+ Wed Nov 25 18:25:06 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * cp-decl.c (pushdecl): Clear DECL_CONTEXT for local declarations.
+
+ Mon Nov 30 15:36:43 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (finish_decl): Only complain about uninitialized consts
+ in the case where we haven't seen a previous decl/init of it.
+
+ Thu Nov 26 11:22:12 1992 Mike Stump (mrs@cygnus.com)
+
+ * c++: Put a newline after for arg and before do, as ``for arg do''
+ is not accepted by all shells.
+
+ Mon Nov 23 13:21:43 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ * c++ (-lm): Also recognize -lmath as a math library.
+
+ * c++ (first): Only shift if $first is no, on the chance we got no
+ arguments at all. If we didn't get anything, say so (since -lg++
+ will fake out the gcc driver into thinking we want to do something).
+
+ * cp-parse.y (paren_expr_or_null): New rule to emit an error when an
+ empty condition is used when it shouldn't.
+ (simple_if, stmt): Use it for `if', `while', and `do'.
+
+ * cp-decl.c (start_decl): If grokdeclarator returns a
+ void_type_node, return a NULL_TREE.
+
+ * cp-typeck.c (build_modify_expr_1): When calling build_opfncall for
+ `operator=', use make_node to create a plain NOP_EXPR for it to use,
+ rather than trying to pass NOP_EXPR down hoping it gets there intact.
+ (build_modify_expr): Ditto.
+ * cp-method.c (build_opfncall): Use TREE_CODE on ARG3 for a
+ MODIFY_EXPR, since it'll be coming in properly as a tree now.
+
+ Sat Nov 21 02:33:28 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ * cp-init.c (expand_default_init): Clear DECL_REGISTER if we're
+ going to call a ctor, otherwise we may end up generating bogus and
+ confusing error messages about taking the addr of something declared
+ to be `register'.
+
+ * cp-typeck.c (build_x_function_call): Recognize a ptr-to-method
+ that is being passed in as a function argument or as part of
+ a COMPONENT_REF.
+ (build_indirect_ref): If ERRORSTRING is NULL (it's passed in that
+ way in many places), then don't try to use it.
+
+ Sat Nov 21 01:49:34 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ Work towards 64-bit support, and still more housecleaning.
+
+ * cp-*.[cy]: For all functions and variables, pass/initialize/compare
+ NULL_TREE, not 0, where appropriate. Cast comparisons against 0
+ with the proper pointer types, where appropriate. Fix all passing
+ of NULLs where there should be NULL_TREEs. Don't include
+ cp-class.h anywhere. In many places, pass the missing fifth arg
+ to build_opfncall as NULL_TREE.
+ * cp-tree.h: Add decls with prototypes for prettymuch every function
+ in the C++ front-end. Include cp-class.h here.
+ * cp-call.c: (build_function_call_maybe, unary_complex_lvalue,
+ convert_harshness): Don't declare.
+ (explained): Initialize to 0.
+ (build_field_call): Give build_opfncall its fifth arg (NULL_TREE).
+ (build_method_call, build_overload_call_real): Don't declare
+ rank_for_overload.
+ * cp-class.c (lookup_tag_current_binding_level,
+ do_inline_function_hair): Don't declare.
+ (get_vfield_name): Add prototype for static fn.
+ (leftmost_baseclasses): Disable, never used.
+ (constructor_name): Don't declare.
+ (finish_struct): Delete arg EMPTY, never used. Change all callers.
+ Disable set of leftmost_baseclasses, since it's never used anywhere.
+ (pushclass): Don't declare declare_uninstantiated_type_level.
+ * cp-cvt.c (NULL): Undef first.
+ (build_up_references): Cast return of error_not_base_type to `tree'.
+ (convert_to_reference): Delete useless variable rval1.
+ (convert_to_integer): Don't declare build_binary_op_nodefault or
+ build_unary_op.
+ (build_type_conversion): Don't declare default_conversion.
+ * cp-decl.c (many extern funs): Don't declare.
+ (grokparms, lookup_name_current_level, lookup_nested_type,
+ redeclaration_error_message, parmlist_is_random,
+ grok_op_properties, expand_static_int, deactivate_exception_cleanups,
+ revert_static_member_fn): Declare static fns w/ prototypes.
+ (pushlevel): Cast passing of NEWLEVEL to an int.
+ (poplevel, poplevel_class, finish_method): Cast first two args of
+ GNU_xref_end_scope to HOST_WIDE_INT.
+ (duplicate_decls): Pass third arg to compexcepttypes (0).
+ (grokvardecl): Delete arg CTYPE, never used. Change all callers.
+ Delete unused local var block_previously_created.
+ * cp-decl2.c (substitute_nice_name): Don't declare decl_as_string.
+ (grokclassfn): Delete unused local var name.
+ (check_classfn): Delete unused arg FLAGS. Change all callers.
+ (grokfield): Pass digest_init only 3 args, not 6 (that's in the C
+ front end, dammit).
+ (coerce_new_type, coerce_delete_type): Delete first arg CTYPE, it's
+ never used. Change all callers.
+ * cp-dem.c (cplus_demangle): Delete unused var non_empty.
+ (NULL): Undef first.
+ * cp-except.c: (call_to_unhandled_exception): Add decl of
+ combine_strings.
+ (init_exception_processing): Add decls of build_function_type and
+ define_function.
+ * cp-gc.c (define_function): Add extern decl.
+ * cp-init.c (is_aggr_typedef): Delete extern decl. Add type for
+ argument OR_ELSE.
+ (build_new): Don't declare require_complete_type.
+ (build_vec_delete): Only pass 6 args, not 7.
+ * cp-lex.c (init_lex): Don't declare init_parse or
+ lang_printable_name.
+ (cons_up_default_function): Don't declare constructor_name.
+ (compiler_error): Declare args V and V2 to be HOST_WIDE_INT.
+ * cp-method.c (index, rindex): Don't declare.
+ * cp-parse.y (unary_expr): Cast first arg to build_x_unary_op to
+ be of enum tree_code type. For every call to build_new, pass its
+ fourth arg as a comparison of $$ against NULL_TREE, instead of
+ just passing it in.
+ (combine_strings, truthvalue_conversion): Add extern decls.
+ (structsp): Pass lookup_name its missing second arg (0).
+ (component_decl): Pass 5, not 6, args to grokfield.
+ (ansi_except_stmts): Delete decls of ansi_expand_start_match and
+ cplus_exception_name.
+ * cp-pt.c (mangle_class_name_for_template): Delete decl of
+ type_as_string.
+ * cp-search.c (get_binfo): Declare third arg PROTECT as int.
+ (get_binfo2, get_binfo2_recursive): Make static.
+ (get_base_distance): Cast DEPTH and IS_PRIVATE to ints, not
+ HOST_WIDE_INTs.
+ (get_baselinks): Delete decl of hash_tree_cons.
+ * cp-spew.c (probe_obstack): Make static. Compare NLEVELS != 0,
+ not > 0, since it's unsigned.
+ * cp-tree.c (list_hash_lookup_or_cons): Don't declare constructor_name.
+ * cp-type2.c (digest_init, incomplete_type_error,
+ readonly_warning_or_error, convert_for_initialization): Don't delete.
+ (error_with_aggr_type): Declare third arg ARG to be HOST_WIDE_INT.
+ (build_scoped_ref): Delete unused var orig_ref.
+ (build_x_arrow): Even worse, give build_opfncall its missing last
+ two arguments (as NULL_TREEs).
+ * cp-typeck.c (build_component_ref): Call build_indirect_ref with
+ its missing second arg (as a NULL).
+ (build_x_indirect_ref): Again, build_opfncall with its missing
+ last two args.
+ (build_x_function_call): Delete decl of build_overload_call_maybe.
+ (convert_for_assignment): Cast return of error_not_base_type to tree.
+ * cp-xref.c (getpwd): Declare as extern.
+ (Integer, String): Delete typedefs, rename all uses to their real
+ meanings (`int' and `char *').
+
+ Thu Nov 19 01:41:58 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-dem.c (do_builtin_type): Recognize `w', a wide character, since
+ it's now a type according to the ANSI X3J16 working paper; output
+ "wchar_t" for it.
+ (cplus_demangle): Accept `w' as an integral type.
+
+ * cp-lex.c (init_lex): Delete duplicate setting of `__pl'.
+
+ Wed Nov 18 21:29:14 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ * cp-class.c (finish_struct): Re-enable code to cut down on the size
+ of symbol output, the positives outweigh the negatives.
+
+ Wed Nov 18 19:51:59 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-search.c (dfs_walk): Move setting of
+ vbase_decl_ptr_intermediate out of #ifdef code.
+
+ Wed Nov 18 18:49:13 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Make wording on error message
+ stronger.
+
+ Tue Nov 17 17:46:11 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ * cp-search.c (CHECK_convert_pointer_to_single_level): Don't define.
+
+ Mon Oct 5 03:10:14 1992 Mark Eichin (eichin at tweedledumber.cygnus.com)
+
+ * c++ (numargs): $# was used after set was called; instead, save
+ $# in $numargs and use that value instead.
+
+Fri Jan 8 18:11:55 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (rescan): Prevent token pasting before macro call.
+ (macroexpand): Prevent token pasting around an arg unless it's raw.
+
+ * c-lex.c (yylex): Don't allow @ in identifier outside of Objective C.
+
+Fri Jan 8 15:03:52 1993 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * pa.c (plus_xor_ior_operator): New predicate.
+
+Fri Jan 8 13:09:47 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (BYTE_LOADS_EXTEND, LOAD_EXTEND): New macros.
+ (subst, simplify_and_const_int, nonzero_bits, num_sign_bit_copies):
+ Use them.
+ (subst, case SET): Make a SIGN_EXTEND instead of paradoxical SUBREG
+ if BYTE_LOADS_SIGN_EXTEND; previously only made ZERO_EXTEND.
+
+ * function.c (assign_parm): Fix typo introduced by previous change.
+
+ * configure (486 targets): Set cpu_type to i386.
+
+Fri Jan 8 03:48:27 1993 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386/perform.h: New file. perform_* macros for i386.
+ * i386/386bsd.h,i386/osfrose.h,i386/mach.h (perform_*): Move
+ perform_* macros to new file.
+
+Thu Jan 7 19:03:56 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (target_switches): Add "-mtrailing-colon"
+ (ASM_OUTPUT_LABEL): If TARGET_TRAILING_COLON then emit
+ a colon after the label.
+ (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
+ (ASM_OUTPUT_COMMON): Likewise.
+ (ASM_OUTPUT_LOCAL): Likewise.
+
+Thu Jan 7 18:21:52 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * configure: Now that all files moved, always include CPU_TYPE in
+ default file names; do not check both config and config/$cpu_type.
+ Fix a few missing directory names and remove a few redundant specs.
+
+ * config/vax, config/convex: New directories; all files moved.
+ * configure (vax-*, convex-*): Files now in subdirectories.
+
+Thu Jan 7 17:31:36 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * Makefile.in (specs): Use GCC_FOR_TARGET.
+
+ * Makefile.in (install-common): Install c++ and g++ only if cc1plus
+ built.
+
+ * fixincludes: fix the rename prototype on the rs6000 <stdio.h>,
+ which conflicted with c++ use of new
+
+ * c-decl.c (start_decl): Correct order of parameter declarations.
+
+Thu Jan 7 16:52:01 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/romp/x-romp (CC): Add -U__STDC__.
+
+Thu Jan 7 05:30:10 1993 Torbjorn Granlund (tege@sics.se)
+
+ * libgcc2.c (__udiv_w_sdiv): Replace hard-coded constants 31 with
+ (SI_TYPE_SIZE - 1).
+
+ * pa.md: Add floating point ld/st indexed patterns.
+
+ * pa.md (reg 112:SI recognizers): Remove.
+ (main move:SI recognizer): Add alternative for greg -> reg 112.
+
+ * pa.md (floatsisf2 patterns): Put output template here, don't
+ call output_floatsiXf2.
+ (floatsidf2 patterns): Likewise.
+ * pa.c (output_floatsisf2, output_floatsidf2): Remove.
+
+ * pa.md (floatunssidf2, floatunssisf2): New patterns.
+ (floatdisf2, floatdidf2): New patterns.
+ (fix_truncsfdi2, fix_truncdfdi2): New patterns.
+ (rotrsi3, rotlsi3): New patterns.
+ (shd optimizers): 2 new patterns.
+
+ * pa.md (ashlsi3, ashrsi3, lshrsi3): Rewrite not to mention SAR.
+ (zvdep32, vextrs32): New named recognizers.
+ * pa.h (FIXED_REGISTERS): Make register 112 (SAR) not fixed.
+
+Thu Jan 7 00:38:02 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc/object.m (+ error:, - error:): Use _objc_error.
+
+ * reload1.c (reload) [SMALL_REGISTER_CLASSES]: When adding an extra
+ need if the insn uses the function value return register,
+ likewise add an extra single-reg need for each class in which
+ the insn needs a group.
+
+Wed Jan 6 20:38:20 1993 Brendan Kehoe (brendan@cygnus.com)
+
+ * alpha.h (ASM_FILE_START): Change .verstamp ident for BL10.
+ * alpha.md (div/mod): Change calling sequence to agree with BL10.
+
+Wed Jan 6 19:54:05 1993 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * config/arm: New directory.
+ * configure (arm-*-*): Update location of tm_file.
+ * config/pyr: New directory.
+ * configure (pyramid-*-*): Set xmake_file.
+ Update location of tm_file.
+
+Wed Jan 6 19:03:18 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/sparc/sol2.h (CPP_SPEC, LIB_SPEC, LINK_SPEC):
+ Add -compat-bsd conditionals.
+
+ * cccp.c (main): Implement -iwithprefix.
+
+Wed Jan 6 18:13:13 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.c (print_operand): Always use "<>" instead of "!=".
+
+ * pa.h (target_switches): Add "-mdisable-fpregs" and
+ "-mdisable-indexing.
+ (CONDITIONAL_REGISTER_USAGE): If TARGET_DISABLE_FPREGS, then mark
+ all FP registers as fixed.
+ * pa.md (indexed loads): Disable if TARGET_DISABLE_INDEXING.
+ (mulsi3, xmpyu): Disable xmpyu if TARGET_DISABLE_FPREGS.
+ * configure: Add hppa1.X-hp-utahmach target.
+ * pa-utahmach.h, pa1-utahmach.h: New files.
+
+Wed Jan 6 11:20:59 1993 Michael Collison (collison at osf.org)
+
+ * expr.c (convert_move): Support new modes QFmode and HFmode.
+
+ * optabs.c (init_optabs): Add optab entries for QFmode and HFmode.
+
+ * reload1.c (init_reload): Add entries in 'reload_in_optab'
+ for QFmode and HFmode.
+
+ * varasm.c (assemble_real): Use `ASM_OUTPUT_BYTE_FLOAT' and
+ `ASM_OUTPUT_SHORT_FLOAT' for QFmode and HFmode respectively.
+
+ * machmode.def: Added new modes QFmode and HFmode.
+
+Wed Jan 6 11:29:46 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.c (fmpyaddoperands, fmpysuboperands): Cleanups suggested by
+ Tege.
+ * pa.md (fmpyadd peepholes): Cleanups suggested by Tege.
+
+ * pa.md (movqi, movhi, movsi, movdi, movsf, movdf): Discourage
+ regclass from preferring anything which involves a FP<->GR copy.
+
+ * pa.md (millicode expands): Change operand 3 in the expand
+ pattern from a clobber of a match_scratch to a clobber of a
+ match_operand with a register predicate. Make appropriate
+ change in the generated RTL.
+ (millicode insns): Clobber a match_operand with a register
+ predicate instead of a match_scratch expression.
+ * pa.c (emit_hpdiv_const): Likewise.
+
+ * pa.md (movsi, movhi, movqi, movdi): Use reg_or_0_operand
+ consistently.
+
+Wed Jan 6 02:23:48 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cexp.y (yylex): Make tokstart an unsigned char *.
+
+Wed Jan 6 10:46:19 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
+
+ * fixincludes (limits.h): Add #ifndef/#endif around macros that
+ are supposed to be defined in float.h.
+
+ * fixincludes, fixinc.svr4, fixinc.sco: Don't "make LIB absolute"
+ if already absolute, to avoid problems with the automounter.
+
+Wed Jan 6 02:35:23 1993 Paul Eggert (eggert@twinsun.com)
+
+ * cccp.c (check_preconditions, do_error, do_warning, do_xifdef):
+ Don't use signed chars to index into arrays; they might be negative.
+
+Tue Jan 5 21:20:29 1993 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386/386.h (DEBUG_PRINT_REG): Print regno along with printable
+ name.
+ (CONST_COSTS): Handle integer CONST_DOUBLE correctly.
+ (PREFERRED_RELOAD_CLASS): Allow integer CONST_DOUBLE into int
+ regs.
+
+ * config/fx80: New directory.
+ * configure (fx80): fx80 configuration files moved there.
+
+ * config/i960: New directory.
+ * configure (i960): i960 configuration files moved there.
+
+ * config/sparc: New directory.
+ * configure (sparc): sparc configuration files moved there.
+ * sparc/sol2.h: Renamed from spc-sol2.h.
+ * sparc/xm-sol2.h: Renamed from xm-spc-sol2.h.
+ * sparc/xm-sysv4.h: Renamed from xm-spcv4.h.
+ * sparc/sysv4.h: Renamed from sparcv4.h.
+ * sparc/x-sysv4: Renamed from x-sparcv4.
+ * sparc/*.h: Use new file names for included sparc files.
+
+ * config/i860: New directory.
+ * configure (i860): i860 configuration files moved there.
+ * i860/bsd.h: Renamed from i860b.h.
+ * i860/bsd-gas.h: Renamed from i860bg.h.
+ * i860/mach.h: Renamed from i860mach.h.
+ * i860/sysv3.h: Renamed from i860v3.h.
+ * i860/sysv4.h: Renamed from i860v4.h.
+ * i860/xm-sysv3.h: Renamed from xm-i86v3.h.
+ * i860/xm-sysv4.h: Renamed from xm-i86v4.h.
+ * i860/x-sysv3: Renamed from x-i860v3.
+ * i860/x-sysv4: Renamed from x-i860v4.
+ * i860/*.h: Use new file names for included i860 files.
+
+ * m68k/tti68k.h: Deleted.
+ * i386/x-xenix: Deleted.
+ * i860/i860g3.h: Deleted.
+
+Tue Jan 5 23:54:36 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * config/pa: New directory.
+ * config/pa/*.h: Handle PA configuration files in new
+ subdirectory.
+ * configure (pa): Likewise.
+
+Tue Jan 5 23:31:34 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * elxsi, gmicro, tahoe, we32k, spur: New subdirs; files moved.
+
+ * config/harris.h: Include tahoe.h from tahoe/ subdir.
+
+Tue Jan 5 21:45:56 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * fixincludes (Xmu.h): Add missing ${LIB}/.
+
+ * calls.c (expand_call): Pass NULL_RTX to INIT_CUMULATIVE_ARGS.
+ * function.c (assign_parms): Pass NULL_RTX to INIT_CUMULATIVE_*.
+ * expr.c (emit_library_call): Pass NULL_TREE to INIT_CUMULATIVE_ARGS.
+
+ * Makefile.in (install-dir): Only make includedir once.
+
+ * cccp.c (do_line): Add pedantic warnings for out of range line
+ numbers, and non-space characters after the filename.
+
+Tue Jan 5 15:09:29 1993 Michael Meissner (meissner@osf.org)
+
+ * mips/bsd-4-gdb.h: Renamed from mips-gbsd.h.
+ * mips/bsd-4.h: Renamed from mips-bsd.h.
+ * mips/bsd-5-gdb.h: Renamed from mips-5gbsd.h.
+ * mips/bsd-5.h: Renamed from mips-5bsd.h.
+ * mips/dec-gosf1.h: Renamed from dec-gosf1.h.
+ * mips/dec-osf1.h: Renamed from dec-osf1.h.
+ * mips/iris3-gdb.h: Renamed from irisgdb.h.
+ * mips/iris3.h: Renamed from iris.h.
+ * mips/iris4-gdb.h: Renamed from iris4g.h.
+ * mips/iris4.h: Renamed from iris4.h.
+ * mips/mips-4-gdb.h: Renamed from mips-gdb.h.
+ * mips/mips-5-gdb.h: Renamed from mips-5gdb.h.
+ * mips/mips-5-gdb.h: Renamed from mips-g5.h.
+ * mips/mips-5.h: Renamed from mips-5.h.
+ * mips/mips.c: Renamed from mips.c.
+ * mips/mips.h: Renamed from mips.h.
+ * mips/mips.md: Renamed from mips.md.
+ * mips/news4-gdb.h: Renamed from mips-gnews.h.
+ * mips/news4.h: Renamed from mips-news.h.
+ * mips/news5-gdb.h: Renamed from mips-gn5.h.
+ * mips/news5.h: Renamed from mips-n5.h.
+ * mips/nws3250v4.h: Renamed from nws3250v4.h.
+ * mips/osfrose.h: Renamed from decrose.h.
+ * mips/svr3-4-gdb.h: Renamed from mips-gsysv.h.
+ * mips/svr3-4.h: Renamed from mips-sysv.h.
+ * mips/svr3-5-gdb.h: Renamed from mips-5gsysv.h.
+ * mips/svr3-5.h: Renamed from mips-5sysv.h.
+ * mips/svr4-4-gdb.h: Renamed from mips-gsvr4.h.
+ * mips/svr4-4.h: Renamed from mips-svr4.h.
+ * mips/svr4-5-gdb.h: Renamed from mips-5g4.h.
+ * mips/svr4-5.h: Renamed from mips-5svr4.h.
+ * mips/t-mips: Renamed from t-mips.
+ * mips/t-osfrose: Renamed from t-decrose.
+ * mips/t-ultrix: Renamed from t-decstatn.
+ * mips/ultrix-gdb.h: Renamed from decstabs.h.
+ * mips/ultrix.h: Renamed from decstatn.h.
+ * mips/x-dec-osf1: Renamed from x-dec-osf1.
+ * mips/x-mips: Renamed from x-mips.
+ * mips/x-nws3250v4: Renamed from x-nws3250v4.
+ * mips/x-osfrose: Renamed from x-decrose.
+ * mips/x-sysv: Renamed from x-mipsv.
+ * mips/x-ultrix: Renamed from x-decstatn.
+ * mips/xm-iris3.h: Renamed from xm-iris.h.
+ * mips/xm-iris4.h: Renamed from xm-irix4.h.
+ * mips/xm-mips.h: Renamed from xm-mips.h.
+ * mips/xm-news.h: Renamed from xm-mipsnews.h.
+ * mips/xm-sysv.h: Renamed from xm-umips.h.
+
+ * mips/* Modify include files as needed for the MIPS files being
+ in the config/mips subdirectory.
+
+ * halfpic.h, halfpic.c: Eliminate unknown symbol errors when
+ linking the gen* programs for {i386,dec} OSF/rose, by using BSS
+ variables instead of extern.
+
+Tue Jan 5 00:29:45 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (c_sizeof): Call force_fit_type only for INTEGER_CST.
+
+ * objc/core.c (_objc_alloc): Renamed from _alloc.
+ (_objc_dealloc, _objc_realloc, _objc_copy, _objc_error): Likewise.
+ * objc/objc.h: Decls renamed also.
+ * objc/objc-proto.h: Uses renamed also.
+
+ * config.sub ($os alternatives for sco and isc):
+ Preserve the specified os version if any.
+ Each alternative handles both 386 and 486, preserving distinction.
+ ($basic_machine alternatives for sco and isc): Deleted.
+ (i[34]86v32, i[34]86v, i[34]86v4):
+ Handle both cpus together, preserving distinction.
+
+Mon Jan 4 20:59:37 1993 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * config/ns32k: New directory.
+ * configure (ns32k): ns32k configuration files moved there.
+
+ * ns32k/*.h: Use new file names for included ns32k files.
+
+ * config/m68k: New directory.
+ * configure (m68k): m68k configuration files moved there.
+
+ * m68k/sgs.h: Renamed from m68ksgs.h.
+
+ * m68k/*.h: Use new file names for included m68k files.
+
+Mon Jan 4 18:06:31 1993 Michael Meissner (meissner@osf.org)
+
+ * configure (i386-osfrose): Rename i386 OSF/rose files to
+ osfrose.h, t-osfrose.h, and x-osfrose.h.
+
+ * i386/osfrose.h: Renamed from i386/rose.h.
+ * i386/t-osfrose: Renamed from i386/t-rose.
+ * i386/x-osfrose: Renamed from i386/x-rose.
+
+Mon Jan 4 11:03:11 1993 Torbjorn Granlund (tege@gnu.ai.mit.edu)
+
+ * Makefile.in (install-common-headers): Pipe grep output to /dev/null.
+
+Mon Jan 4 01:12:48 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * i386/bsd.h (ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_INTERNAL_LABEL):
+ Alternate definitions if NO_UNDERSCORES.
+
+ * c-parse.in (component_declarator):
+ Allow attribute after nameless field.
+
+ * fixincludes (making dirs and links): If we already made subdirs
+ for a dir foo and foo turns out to be a symlink outside /usr/include,
+ after we have made a dir for it in ./root/, make similar subdirs there.
+
+Sun Jan 3 07:28:32 1992 Karl Berry (karl@red.cs.umb.edu)
+
+ * x-romp (CC): Add -w.
+
+Sun Jan 3 21:19:50 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (JUMP_TABLES_IN_TEXT_SECTION): Define.
+
+ * jump.c (jump_optimize, clause for `if (foo) b++'):
+ Do this regardless of BRANCH_COST if HAVE_incscc is defined.
+ * pa.md (scc insn): Name this pattern "scc".
+ (negscc, incscc, cmov): New patterns.
+ * pa.c (incscc_operator): New function.
+
+ * pa.h (actual_fsize, apparent_fsize): Delete unused variables.
+
+Sun Jan 3 20:37:55 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (main): Recognize and remove .cxx as filename suffix.
+
+Sun Jan 3 19:39:18 1993 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Bump Meissner version number to 34.
+
+ * mips.c (save_restore_insns): Don't give an error if saving an FP
+ register at stack offset 0, which occurs when the function is a
+ leaf function that uses lots of FP registers, and saves no GP
+ registers.
+
+Sun Jan 3 19:00:29 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * local-alloc.c (block_alloc): Generalize tying so we can tie
+ any operand with the output unless some operand must be in the
+ same register as the output, in which case only try tying that
+ operand.
+
+ * rtl.c (rtx_alloc): Clear common area of rtx in a portable manner.
+
+Sun Jan 3 13:57:33 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (CONST_COSTS): Make CONST_DOUBLES very expensive.
+ Give HIGH expressions a small cost with CONST, SYMBOL_REF,
+ and LABEL_REF being twice as expensive as HIGH.
+
+ * pa.md (fmpyadd peepholes): New peepholes to issue independent
+ floating point multiply and add instructions at the same time.
+ (fmpysub peepholes): Likewise for multiply and subtract instructions.
+ * pa.c (fmpyaddoperands): Verifys given registers are suitable for
+ use in fmpyadd instructions.
+ (fmpysuboperands): Likewise, but for fmpysub instructions.
+
+ Wed Oct 28 12:07:54 1992 Tim Moore (moore at defmacro.cs.utah.edu)
+ * pa.md (call, call_value): If flag_pic, emit restore of PIC table
+ register.
+ (call_interal, call_value_internal): Name matching insns.
+ (movsi, movhi, movqi, movdi, movsf, movdf patterns): Don't
+ match memory to memory moves.
+
+ * pa.h (FIXED_REGISTERS, CALL_USED_REGISTERS): r3 isn't fixed!
+ (REG_ALLOC_ORDER): Move r3 up in the allocation order.
+ (HAVE_ATEXIT): Define.
+ (INITIAL_FRAME_POINTER_OFFSET): compute_frame_size ()
+ now does the whole calculation, including rounding.
+ (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE): Don't pass leaf_function
+ to output_function_{prologue,epilogue}.
+ (DELAY_SLOTS_FOR_EPILOGUE): Call hppa_epilogue_delay_slots ().
+
+ * pa.c (hppa_save_pic_table_rtx): New variable.
+ (finalize_pic): Setup hppa_save_pic_table_rtx..
+ (apparent_fsize): Delete variable.
+ (compute_frame_size): Many changes. Return the total frame size,
+ including space for "magic" stuff at the top of the stack and any
+ rounding for the Snake.
+ (output_function_prologue): Don't take a leaf_function argument;
+ Decide that based on frame size and frame_pointer_needed.
+ Don't emit any frame diddling code if actual_fsize is 0.
+ (output_function_epilogue): Don't take leaf_function argument.
+ Don't do anything if no frame.
+ Keep stack pointer aligned to 64 bytes before loading from old
+ frame pointer.
+ (hppa_epilogue_delay_slots): Only if there is no frame will we
+ have an empty delay slot to fill.
+ (eligible_for_epilogue_delay): Don't check "leaf_function" anymore.
+
+Sun Jan 3 07:28:29 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * gcc.c (putenv_from_prefixes): Use PATH_SEPARATOR.
+ Properly use JUST_MACHINE_SUFFIX when desired; always make path
+ the same as find_a_file will use.
+
+Sat Jan 2 16:35:55 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config.sub: Translate sunos5 to solaris2, and solaris1 to sunos4.
+
+ * tree.c, tree.h (int_size_in_bytes): Change ret type back to int.
+
+ * calls.c (expand_call): Don't use int_size_in_bytes
+ for a variable-size object.
+
+Sat Jan 2 15:16:24 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * c-parse.in (label): Use expr_no_commas instead of expr for case
+ labels.
+
+Sat Jan 2 03:30:10 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (gcc.o): Define TOOLDIR_BASE_PREFIX.
+
+ * gcc.c (TOOLDIR_PREFIX): Define if not defined.
+ (tooldir_prefix, tooldir_base_prefix): New variables.
+ (main): Set tooldir_prefix.
+ Add it (plus `bin' or `lib') to search paths.
+
+ * cccp.c (default_include): Look directly in TOOL_INCLUDE_DIR.
+ * protoize.c (default_include): Likewise.
+
+ * collect2.c (main): Look for `real-ld' after `gld', before `ld'.
+ In debug printout, fix typo in prev change.
+
+Fri Jan 1 13:32:36 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in (cccp.o, protoize.o, unprotoize.o):
+ Define TOOL_INCLUDE_DIR as $(tooldir)/include.
+ (test-protoize-simple): Define TOOL_INCLUDE_DIR as 0.
+
+ * config/i386/linux.h (STARTFILE_SPEC): Removed -L"TOOLDIR"/lib.
+
+Fri Jan 1 06:26:11 1993 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * collect2.c: Look for tools using paths rather than a single prefix.
+ (struct prefix_list, struct path_prefix): New structures.
+ (cpath, path): New variables.
+ (find_a_file, add_prefix): New functions; simplified versions of
+ functions from gcc.c.
+ (prefix_from_env): New function.
+ (main): Get path to search for binaries from COMPILER_PATH
+ environment variable always set by gcc.c and from PATH.
+ Qualify names with target machine in cross-environment unless
+ using compiler directories.
+ Use find_a_file to find our binaries.
+ Remove use of single prefix.
+ If -debug, print strip_file_name.
+ (fork_execute): Print program we are trying to execute if -debug and
+ we can't find the file.
+ (scan_prog_file): Complain if can't find NM.
+ * Makefile.in (REAL_LD_NAME): New variable.
+ (collect2.o): Don't need STANDARD_STARTFILE_PREFIX, etc.
+ (install-cross-tools): Use REAL_LD_NAME instead of `ld' when linking
+ files from tooldir to libsubdir.
+
+Fri Jan 1 17:51:05 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * dbxout.c (dbxout_symbol, TYPE_DECL case): Don't output tag which
+ references incomplete type.
+
+ * fixincludes (sunwindow/{win_cursor.h,win_lock.h}): Change invalid
+ #ifdef identifier `ecd.cursor' to `ecd_cursor'.
+
+ * c-typeck.c (build_binary_op): Add 'right' and 'left' to shift
+ count warnings to distinguish them from each other.
+
+ * function.c (fixup_var_refs_insn): Update last_parm_insn when
+ insns are output after it to fix it up.
+
+ * sdbout.c (plain_type_1): Distinguish some C integer types by name.
+
+ * Makefile.in (MAKEINFO): New variable, defined to `makeinfo'.
+
+ * rs6000.h (ASM_FILE_START): Switch to text section at end.
+ Output declaration for .mcount when profiling.
+
+Fri Jan 1 12:15:42 1993 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.md (movqi, movhi, movsi, movdi, movsf, movdf): Fix attributes
+ which involve fp<->gr copies to match current reality.
+ (indexed loads): These should have "load" attributes, not "move".
+
+ * pa.c (output_floatsisf, output_floatsidf): Abort if presented
+ with a general register.
+ * pa.md (movdf const_couble): Fix lengths.
+ (floatsisf patterns): Likewise.
+ (floatsidf patterns): Likewise.
+
+ * pa.h (REGISTER_MOVE_COST): Make moving between FP and non-FP
+ registers more expensive.
+
+ * pa.h (TARGET_NO_BSS): Delete target switch. Delete all references.
+
+Fri Jan 1 07:40:58 1993 Tom Wood (wood@dg-rtp.dg.com)
+
+ * config/m88k: New directory.
+ * configure (m88k*): Files are now in config/m88k.
+ * m88k/dgux.h, m88k/dolph.h, m88k/luna.h, m88k/sysv3.h,
+ m88k/sysv4.h, m88k/xm-sysv3.h: Include files in m88k.
+ * m88k/t-dgux, m88k/t-m88k, m88k/t-m88k, m88k/t-sysv4: Use
+ m88k/m88k-move.sh.
+
+Thu Dec 31 17:38:43 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (do_spec_1): Propagate failure from recursive calls.
+
+ * i386/386bsd.h (perform_*): Rename macro args to arg0, arg1.
+
+Thu Dec 31 15:42:35 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sched.c (sched_analyze_1, sched_analyze_2): If before reloading,
+ record dependences that may be introduced by reload substituting
+ equivalents for pseudo registers.
+
+ * sched.c (sched_analyze_2): Use REG_NOTE_KIND not GET_MODE in
+ add_dependence call.
+ (sched_analyze_insn): Likewise.
+
+ * sparc.h (LIB_SPEC): When -a, include bb_link.o.
+
+ * t-sol2 (gmon.o, crt*.o): Change config to $(srcdir)/config.
+
+ * reload.c (operands_match_p): For WORDS_BIG_ENDIAN machines,
+ make multiple register operands equivalent if the last register of
+ the groups are the same.
+ (subst_reloads): Use gen_lowpart_common to change mode of
+ reloadreg.
+ * reload1.c (emit_reload_insns): Likewise.
+
+ * reload1.c (gen_input_reload): Also handle PLUS of a MEM and
+ CONSTANT specially.
+
+ * i960.h (CPP_SPEC, CC1_SPEC, ASM_SPEC, LINK_SPEC,
+ TARGET_SWITCHES): Delete support for non-existent CPU variations.
+ (ASM_SPEC, LINK_SPEC, TARGET_SWITCHES): Add support for -mlink-relax.
+ (SELECT_CC_MODE): Correct typo.
+
+ * sparc.c (print_operand): For invalid operands, call
+ output_operand_lossage instead of aborting.
+
+ * i960.md (call_internal, call_value_internal): Use 'l' for
+ match_scratch constraint not 'd'.
+
+ * function.c (assign_parms): Emit conversions into a sequence, and
+ then output the sequence after all parameters have been moved.
+
+ * optabs.c (expand_binop): Correct indentation of doubleword
+ multiply picture.
+
+ * sparc.h (TARGET_SWITCHES): Have -msparclite also clear TARGET_FPU.
+
+ * va-i960.h: Define away __extension__ if compiled by GCC v1.
+
+ * libgcc2.c (L_builtin_new): Change to L_op_new. Use new style
+ definition for __builtin_new.
+ (L_caps_New): Change to L_new_handler. Delete unused function
+ builtin_vec_new.
+ (L_builtin_del): Change to L_op_delete. Delete vfp declaration.
+ Use new style definition for __builtin_delete. Delete unused
+ function __builtin_vec_delete.
+ * Makefile.in (LIB2FUNCS): Change _builtin_new to _op_new. Change
+ _caps_New to _new_handler. Change _buildin_del to _op_delete.
+
+ * m68k.h (TARGET_SWITCHES): -m68030 does not imply -m68881.
+
+ * gcc.c (input_from_pipe): New variable.
+ (do_spec): Set/clear input_from_pipe as appropriate. Translate %|
+ to "-" if input_from_pipe is true.
+ * sparc.h (ASM_SPEC): Use %|.
+
+ * m68k.c (strict_low_part_peephole_ok): New function.
+ * m68k.md: Add peephole to eliminate unecessary clear instructions
+ in strict_low_part insn sequences.
+
+ * configure (elxsi): Move it out of the middle of the sparc section.
+
+ * unroll.c (copy_loop_body, JUMP_INSN case): Do map the body of
+ the loop branch back, then rewrite it to jump past the end of the
+ unrolled loop.
+
+ * c-decl.c (pushdecl): Check TREE_PUBLIC in addition to
+ DECL_EXTERNAL decls when looking for duplicate external declarations.
+
+ * cccp.c (multiline_string_line): New file scope static variable.
+ (rescan): Delete multiline_string_line variable definition.
+ (skip_quoted_string): Print start line number of unterminated
+ string and character constants. When see a newline: warn if
+ pedantic; delete unreachable duplicate code for traditional case;
+ set multiline_string_line.
+
+Thu Dec 31 11:11:30 1992 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa-hpux.h (LIB_SPEC): Fix so that one can link in profiled
+ libraries under HPUX.
+ * pa-ghpux.h, pa-hpux7.h, pa-gux7.h (LIB_SPEC): Likewise.
+
+Thu Dec 31 08:50:42 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * a29k.h (OBJECT_FORMAT_COFF): Add definition.
+
+ * rs6000/xm-rs6000.h (REAL_NM_FILE_NAME): Delete from here.
+ * rs6000/rs6000.h (REAL_NM_FILE_NAME): Put it here.
+
+Thu Dec 31 01:53:13 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * tree.c (build_index_type): Leave TYPE_MAX_VALUE as -1 if it was;
+ don't truncate the high bits.
+
+ * Makefile.in (distdir): New target broken out from gcc.xtar.
+ Depend on $(srcdir)/INSTALL.
+ (gcc.xtar): Depend on distdir.
+ (doc): Delete dep $(srcdir)/INSTALL.
+
+Wed Dec 30 12:54:53 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386/i386.c (output_fp_cc0_set): Abort if cc0 user not found.
+
+ * i386/i386.md (movsf,movdf): Change constraints to use integer regs
+ for mem-mem copies.
+
+ * i386/i386.h (PREFERRED_RELOAD_CLASS): Don't reload CONST_DOUBLE into
+ integer regs.
+
+ * jump.c (delete_computation): reg_referenced_p wants body, not insn.
+
+Wed Dec 30 07:03:49 1992 John F Carr (jfc at Athena.MIT.EDU)
+
+ * caller-save.c (setup_save_areas): Don't assign save area for a
+ group if some register in the group has already been assigned an
+ area.
+
+Wed Dec 30 06:05:07 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.def (TRUTH_XOR_EXPR): New tree code.
+ * expr.c (expand_expr, case TRUTH_XOR_EXPR): New case.
+ * fold-const.c (invert_truthvalue, case TRUTH_XOR_EXPR): New case.
+ (fold, case TRUTH_XOR_EXPR): New case.
+ (fold, case TRUTH_OR_EXPR, TRUTH_AND_EXPR): Check for second
+ operand of appropriate value to determine result whether or
+ not first operand is a constant.
+ * c-common.c (truthvalue_conversion): Handle TRUTH_XOR_EXPR.
+ * c-convert.c, cp-cvt.c (convert_to_integer): Likewise.
+ * c-typeck.c (build_binary_op): Likewise.
+ * cp-typeck.c (build_binary_op_nodefault): Likewise.
+ * cp-class.c (instantiate_type): Likewise.
+ * stmt.c (expand_return): Likewise.
+
+Wed Dec 30 01:48:38 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes: Chmod each copied file a+r.
+ * fixinc.svr4, fixinc.sco: Likewise.
+
+ * Makefile.in (extraclean): Quote the sharps.
+
+ * expr.c (expand_expr): In NOP_EXPR case, truncate and
+ reextend integer constants.
+
+Tue Dec 29 18:21:06 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386/i386.md (bit complement): Constrain inputs and outputs to
+ match, instead of using match_dup.
+ (zero_extract test): Reenable with separate patterns to match
+ QImode and SImode zero_extract.
+
+ * i386/sysv3.h: Renamed from i386/svr3.h.
+ * i386/sysv4.h: Renamed from i386/svr4.h.
+ * i386/x-sysv3: Renamed from i386/x-svr3.
+ * i386/xm-sysv3.h: Renamed from i386/xm-svr3.h.
+ * i386/xm-sysv4.h: Renamed from i386/xm-svr4.h.
+
+ * configure (i386): Use new file names for 386 files.
+ * i386/*.h: Likewise for included files.
+
+Tue Dec 29 18:04:13 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Avoid truncation of object sizes when bit size won't fit in a word.
+ * fold-const.c (const_binop): New arg NOTRUNC. All calls changed.
+ (size_binop): Pass 1 for NOTRUNC.
+ (force_fit_type): No longer static.
+ * tree.c (size_in_bytes): Call force_fit_type with end result.
+ (int_size_in_bytes): Avoid overflow as long as result fits.
+ Return type is now unsigned int.
+ * c-typeck.c (c_sizeof, c_sizeof_nowarn, c_size_in_bytes):
+ Call force_fit_type with end result.
+
+ * stor-layout.c (layout_record): Avoid overflow in const_size
+ by adding into var_size instead.
+
+Tue Dec 29 09:01:33 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * configure (m88k-dgux): Use t-m88kdgux.
+
+Tue Dec 29 06:56:41 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * genemit.c (gen_split): Initialize _val in generated function.
+
+Tue Dec 29 02:27:51 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (make_definition): Pass NULL as 3rd arg to do_define.
+
+Mon Dec 28 14:56:55 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-parse.in (stmt, FOR case): Do call position_after_white_space
+ after recording the current lineno for the increment.
+
+ * config.sub: Default to bsd for *-sequent.
+
+Mon Dec 28 06:05:12 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c: Add a few missing HOST_WIDE_INT casts.
+ Rename references to `significant' bits to be `nonzero' bits;
+ specifically the following, but also local vars and comments:
+ (reg_nonzero_bits): Renamed from reg_significant.
+ (nonzero_bits): Renamed from significant_bits.
+ (nonzero_sign_valid): Renamed from significant_valid.
+ (set_nonzero_bits_and_sign_copies): Renamed from set_significant.
+
+ * fold-const.c (fold, case BIT_IOR_EXPR): Convert the IOR of a pair
+ of shifts into a rotate when it is equivalent.
+
+ * expmed.c (expand_shift): If rotating by a constant, try both
+ directions of rotate.
+ If can't open-code a rotate, do it as a pair of shifts followed by
+ an IOR.
+
+ * combine.c (simplify_comparison, case NEG): Replace large block of
+ code with equivalent call to num_sign_bit_copies.
+
+ * expr.c (get_inner_reference): Don't look at flag_volatile.
+ (expand_expr, case INDIRECT_REF, OFFSET_REF): Likewise.
+ * c-typeck.c, cp-typeck.c (build_indirect_ref): Set volatility from
+ flag_volatile.
+
+ * i386/rose.h (OPTIMIZATION_OPTIONS): Delete; we don't want to set
+ -finline-functions for -O3 and this does nothing else useful.
+ * mips.h (OPTIMIZATION_OPTIONS): Likewise.
+ * i960.h (OPTIMIZATION_OPTIONS): Don't set -finline-functions for -O3.
+
+Sun Dec 27 18:33:38 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * config/i386: New directory.
+ * configure.bat: 386 configuration files moved to new directory.
+ * configure (i386): Likewise.
+ Delete lines that duplicate default actions of configure.
+
+ * i386/386bsd.h: Renamed from i386bsd.h.
+ * i386/att.h: Renamed from att386.h.
+ * i386/bsd.h: Renamed from bsd386.h.
+ * i386/gas.h: Renamed from i386gas.h.
+ * i386/gstabs.h: Renamed from i386gstabs.h.
+ * i386/linux.h: Renamed from i386linux.h.
+ * i386/mach.h: Renamed from i386mach.h.
+ * i386/rose.h: Renamed from i386rose.h.
+ * i386/sco.h: Renamed from i386sco.h.
+ * i386/sco4.h: Renamed from i386sco4.h.
+ * i386/seq-gas.h: Renamed from seq386gas.h.
+ * i386/sequent.h: Renamed from seq386.h.
+ * i386/sun.h: Renamed from i386sun.h.
+ * i386/svr3.h: Renamed from i386v.h.
+ * i386/svr4.h: Renamed from i386v4.h.
+ * i386/t-isc: Renamed from t-i386isc.
+ * i386/t-rose: Renamed from t-i386rose.
+ * i386/t-sco: Renamed from t-i386sco.
+ * i386/unix.h: Renamed from unx386.h.
+ * i386/x-aix: Renamed from x-aix386.
+ * i386/x-isc: Renamed from x-i386isc.
+ * i386/x-rose: Renamed from x-i386rose.
+ * i386/x-sco: Renamed from x-i386sco.
+ * i386/x-sco4: Renamed from x-i386s4.
+ * i386/x-svr3: Renamed from x-i386v.
+ * i386/xm-aix.h: Renamed from xm-aix386.h.
+ * i386/xm-dos.h: Renamed from xm-i386dos.h.
+ * i386/xm-isc.h: Renamed from xm-i386isc.h.
+ * i386/xm-sco.h: Renamed from xm-i386sco.h.
+ * i386/xm-sun.h: Renamed from xm-i386sun.h.
+ * i386/xm-svr3.h: Renamed from xm-i386v.h.
+ * i386/xm-svr4.h: Renamed from xm-i38v4.h.
+
+ * i386/*.h: Use new file names for included 386 files.
+
+Sun Dec 27 22:02:09 1992 H.J. Lu (hlu@yardbird.eecs.wsu.edu)
+
+ * i386linux.h (CPP_SPEC): Define -D__i486__ if compile for i486.
+ (ASM_OUTPUT_ADDR_DIFF_ELT, JUMP_TABLES_IN_TEXT_SECTION):
+ Copy definitions from i386v4.h to get PIC code correct.
+ (FUNCTION_PROFILER): Copy definition from i386bsd.h.
+ (COMMENT_BEGIN, ASM_APP_ON, ASM_APP_OFF): Copy from i386bsd.h
+ to prepare for new GAS.
+
+ * Makefile.in: (gcc.o): Add $(MAYBE_TARGET_DEFAULT).
+
+Sun Dec 27 16:33:13 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * m88k.c (block_move_loop, block_move_no_loop, block_move_sequence):
+ Always set MEM_IN_STRUCT_P. If it wasn't previously set, use BLKmode.
+ * m88k.md (BLKmode load/store patterns): New.
+ (call_block_move, call_movstrsi_loop): Allow any mode for the preload.
+
+ * m88k.c (output_file_start): Emit `requires_88110' when -m88110
+ is used with -mversion-04.00.
+ * m88k.h (OVERRIDE_OPTIONS): Allow version 04.00 default.
+ (VERSION_0400_SYNTAX, REQUIRES_88110_ASM_OP): New definitions.
+ * m88kdgux.h (ASM_FIRST_LINE): Print the version string.
+
+ * m88k.md (length attribute): Branches may be expanded to two
+ instructions by the assembler.
+ (DFmode bcnd pattern): Don't try to fill the delay slot.
+ (CCmode bbx patterns): Reverse the 1/0, not the condition.
+
+ * m88kdgux.h (ASM_SPEC): Pass -KVstring given -mversion-string.
+
+ * m88kdgux.ld, t-m88kdgux: New file.
+ * m88kdgux.h (LIB_SPEC): Add crtend.o.
+ (STARTFILE_SPEC): Add crtbegin.o, and m88kdgux.ld for COFF.
+ (CTOR_LIST_END, DTOR_LIST_END): Define as -1.
+ (DO_GLOBAL_{C,D}ORS_BODY): Ignore null entries and look for -1
+ bounds.
+
+Sun Dec 27 16:08:04 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * hp320.h (ASM_OUTPUT_DOUBLE_OPERAND): Delete spurious space after \.
+
+ * gstddef.h [__sequent__]: #undef _PTRDIFF_T_ at beginning, if defined.
+
+ * reload1.c (emit_reload_insns): Error instead of abort
+ if an asm has a VOIDmode output operand.
+
+ * reload.c (push_reload): Move the NO_REGS abort after the
+ error check for asms, to avoid crashing for asms.
+ Fix inmode and outmode too, if they are VOID for an asm.
+
+Sun Dec 27 10:48:10 1992 Jeffrey A Law (law@schirf.cs.utah.edu)
+
+ * reorg.c (mostly_true_jump): When trying to determine
+ if the current insn is essentially a conditional return,
+ look inside of SEQUENCE insns for jumps.
+ Predict jumps to the exit test for loops as likely to be taken.
+
+Sun Dec 27 06:53:39 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reorg.c (relax_delay_slots): Only look at JUMP_LABEL for a
+ condjump_p.
+
+ * jump.c (delete_jump): Use single_set to see if INSN just sets PC.
+ Remove code to delete previous cc0-setting insn.
+ (delete_compution): No longer conditional on #ifndef HAVE_cc0.
+ If insn uses CC0, delete previous insn that just sets CC0 for us;
+ do deletion via recursive call.
+
+ * combine.c (subst, case SET): Call recog_for_combine with OTHER_INSN,
+ not UNDOBUF.OTHER_INSN.
+
+ * genoutput.c (have_error): New variable.
+ (error): Set it.
+ (main): Test it and return FATAL_EXIT_CODE if it is set.
+
+ * emit-rtl.c (copy_rtx_if_shared): A CONST can be shared if it
+ contains a SYMBOL_REF.
+ * rtl.c (copy_rtx): Likewise.
+ A SCRATCH must be shared.
+ A MEM may be shared if it is at a constant address.
+
+Sun Dec 27 02:48:27 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (macroexpand): Expand each macroarg first time we find a need
+ to substitute its expansion.
+ (macarg): Don't expand them here.
+
+ * expr.c (expand_expr, constructor case): If we made a stack slot,
+ set MEM_IN_STRUCT_P if the type warrants it.
+
+ * configure: When testing existence of a config file, specify $srcdir.
+
+Sat Dec 26 18:12:08 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.c (make_node, case 'c'): For INTEGER_CST, use size of
+ struct containing constant, just like for reals. Also, clean
+ up code to avoid confusing fallthrough.
+
+ * a29k/unix.h, rs6000/aix32.h, rs6000/mach.h, rs6000/xm-mach.h:
+ Include main file from subdirectory.
+
+ * config/a29k, config/alpha, config/romp, config/rs6000: New
+ directories.
+ * configure: If a file isn't in config, try in config/$cpu_type.
+ (a29k, alpha, romp, rs6000): Files moved to new machine subdirectories.
+ Delete lines that duplicate default actions of configure.
+
+ * combine.c (gen_lowpart_for_combine): Allow MODE to be wider
+ than a word in restricted circumstances.
+
+ * c-typeck.c (check_format): Using both a precision and the `0' flag
+ is only a problem on `d', `i', `o', `u', `x', and `X' conversions.
+
+Sat Dec 26 17:05:24 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * object.h: Don't include objc.h or stdio.h.
+ Change Class_t to Class everywhere.
+ (id, nil, Nil, Class, STR, SEL, IMP, BOOL, YES, NO): Define,
+ but not if objc.h was already included.
+ [__objc_INCLUDE_GNU] (Class): Alias this to Class_t.
+
+ * object.m: Include objc.h and stdio.h before object.h.
+
+Sat Dec 26 05:12:05 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 2.3.3 released.
+
+Fri Dec 25 06:53:49 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * expmed.c (store_bit_field): If VALUE needs to be narrowed, do
+ it with gen_lowpart, not an explicit SUBREG.
+
+ * a29k.md (divsf3): Fix typo in mode of DIV.
+
+Fri Dec 25 00:03:26 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * Makefile.in (install-dir): Add missing semicolon.
+
+ * i386sco4.h (_KR, _SVID, _NO_PROTOTYPE): Define if -traditional.
+
+Thu Dec 24 15:02:29 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixinc.svr4: Don't change bitfield types to int.
+
+ * seq386.h (TARGET_DEFAULT): Override.
+
+Wed Dec 23 20:19:17 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * i386sco4.h (CPP_SPEC): Avoid repeated def of _M_SYSV.
+
+Tue Dec 22 15:40:08 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (store_parm_decls): Use TYPE_MAIN_VARIANT to compare types
+ when merging info from previous prototype.
+
+ * fixinc.svr4: Add special fixes for netinet/in.h and sys/endian.h.
+
+Mon Dec 21 02:58:27 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * m68kv4.h (ASM_OUTPUT_CASE_END):
+ Use switch_table_difference_label_flag.
+
+ * configure (m68k-motorola-sysv*): Set use_collect2.
+
+Sat Dec 19 20:19:44 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * a29k.c (secondary_reload_class): Return CR_REGS for larger than
+ word memory, and BP_REGS for part-word mem with no DW.
+
+ * a29k.md: Consistently use `&' in constraint of MATCH_SCRATCH.
+ Always use a reg as 4th arg of dmac/fmac even if ignored by insn.
+ Uses of `b' as a constraint in multi-word reload patterns should
+ be `c'.
+
+Sat Dec 19 01:32:13 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (all.cross): Add `specs' as dep.
+
+ * build-make (CC): Delete the -V option.
+
+ * getpwd.c (getpwd): Don't get upset if ERANGE is not defined.
+
+Fri Dec 18 20:56:59 1992 John Hassey (hassey@dg-rtp.dg.com)
+
+ * objc-actions.c (build_encode_expr):
+ Terminate the encode string with a null.
+ (encode_aggregate): Distinguish pointer to record from a
+ record. Output fields for record. Fix unions.
+
+Fri Dec 18 17:17:39 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Set Meissner version # to 33.
+ (struct mips_args): Add support for passing QI/HI mode structures
+ the way the MIPS compiler passes them.
+ (SIZE_TYPE, PTRDIFF_TYPE): Define as unsigned int, and int if not
+ defined already.
+
+ * mips.c (init_cumulative_args): Use a static structure to
+ initialize the CUMULATIVE_ARGS structure.
+ (function_arg_advance): Add a newline at the end of debug output.
+ (function_arg): If a structure is passed as a QImode or HImode
+ value in a register, record the fact for the call define_expands
+ and prologue expander to move the structure into the high part of
+ the register, and back again. If debugging, print if the argument
+ is a structure.
+ (mips_expand_prologue): Shift any QI/HI structures passed back, so
+ they can be used as normal QI/HI values.
+
+ * mips.md (call): If there were any tiny structures passes as
+ QI/HI modes in registers, shift the register, so that the
+ structure value is in the high part of the register.
+ (call_value): Ditto.
+ (call_internal): Delete creating $31 rtx, since we can get it from
+ the normal insn patterns.
+ (call_value_internal): Ditto.
+
+Fri Dec 18 05:14:14 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ Make abstract virtual functions work.
+ * cp-call.c (compute_conversion_costs): Undo change of Sept 1 about
+ setting HARSHNESS to 0 re: the conversion of the first argument.
+ (build_method_call): Delete the code that redid the RTL for calling
+ the right fn, since we will now behave correctly. (Even with this,
+ we ended up calling the wrong fn---the base class, rather than the
+ derived one.)
+
+ * cp-decl2.c (grokclassfn): Try using the local value for a nested
+ type if the IDENTIFIER_TYPE_VALUE isn't there.
+
+ * cp-method.c (build_overload_nested_name): Use DECL_NAME instead of
+ DECL_ASSEMBLER_NAME, since pushtag now mangles together
+ DECL_ASSEMBLER_NAME. This will make us emit `Q21D1B', not `Q221D1B'.
+
+Thu Dec 17 17:51:16 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * Makefile.in (install-dir): Added missing then and semicolon.
+
+Thu Dec 17 15:19:36 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * x-i386s4 (CC): New assignment.
+
+Wed Dec 16 15:49:11 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc-actions.c (finish_objc) [OBJC_SELECTORS_WITHOUT_LABELS]:
+ Always call build_selector_translation_table.
+
+ * Makefile.in (install-dir):
+ If cross-compiler, create $(tooldir) and $(assertdir).
+
+Wed Dec 16 14:19:08 1992 Richard Kenner (kenner at vlsi1.ultra.nyu)
+
+ * rs6000.h (INITIALIZE_TRAMPOLINE): Get function address and toc
+ pointer from correct place relative to FNADDR.
+
+ * varasm.c (assemble_trampoline_template): If TRAMPOLINE_SECTION
+ is defined, put the trampoline template into that section.
+
+ * alpha.h (TRAMPOLINE_SECTION): New macro.
+
+Wed Dec 16 14:19:41 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * reload.c (get_secondary_mem): Don't save address if it isn't valid.
+
+Wed Dec 16 13:59:17 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * varasm.c (assemble_trampoline_template):
+ Use readonly_data_section, not text_section.
+
+Wed Dec 16 11:32:11 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Set Meissner version # to 32.
+ (compute_frame_size): Change function return type to long.
+ (epilogue_reg_mentioned_p): New function decl.
+ (mips_frame_info): Change unsigned longs to longs.
+ (ELIGIBLE_FOR_EPILOGUE_DELAY): Call epilogue_reg_mentioned_p.
+
+ * mips.c (epilogue_reg_mentioned_p): New function to return true
+ if any register used in the epilogue sequence is referenced. If
+ the stack size is greater than 32k bytes, return true for
+ registers $8 and $9, since they are used to hold temps.
+ (compute_frame_size): Change return type & variables to long.
+ (compute_frame_size): Use 1L in shifts to create GP save mask.
+ (save_restore): Merge function into save_restore_insns.
+ (save_restore_insns): Add FILE * argument, to write to the .s
+ file if non-NULL -- otherwise produce insns. Add arguments to
+ pass in that the prologue/epilogue has loaded the stack size into
+ $8 if large stack frame. Completely rewrite large stack frame
+ support, so that it doesn't abort if large stack frame, saved GP
+ registers, and no saved FP registers. If large stack frame, use
+ stack size stored in $8 if we can.
+ (function_prologue): Make tsize long.
+ (function_epilogue): Ditto.
+ (mips_expand_prologue): Ditto.
+ (mips_expand_epilogue): Ditto.
+ (mips_expand_prologue): Change call to save_restore_insns.
+ (mips_expand_epilogue): Ditto.
+ (function_epilogue): Call save_restore_insns instead of
+ save_restore.
+
+Wed Dec 16 07:33:08 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * stmt.c (expand_goto): Set LABEL_REF_NONLOCAL_P in the LABEL_REF
+ we make in the non-local case.
+
+ * varasm.c (assemble_trampoline_template): Always put template in
+ text section.
+
+Wed Dec 16 05:04:06 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * combine.c (try_combine): Allow for the case where I3 becomes an
+ unconditional jump when it is the last nonnote insn.
+
+Tue Dec 15 20:30:06 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (do_pragma): Use index, not strchr.
+
+ * seq386.h (FUNCTION_PROFILER): Add missing . to label name.
+
+ * reload1.c (eliminate_regs_in_insn): Test old_body, not new_body,
+ since people have tested it that way.
+
+ * reload1.c (eliminate_regs_in_insn): Don't recopy new_body
+ if it is an asm_operands insn.
+
+Tue Dec 15 19:42:58 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.md (return peepholes): Add QImode and HImode move/return
+ patterns.
+
+Tue Dec 15 17:42:07 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.h (ASM_SPEC): New macro.
+
+ * alpha.h (TRAMPOLINE_{TEMPLATE,SIZE}, INITIALIZE_TRAMPOLINE):
+ Make major changes to fix numerous bugs.
+ (TRANSFER_FROM_TRAMPOLINE): New macro.
+ * alpha.md: Add new UNSPEC_VOLATILE 0 to flush instruction cache.
+
+Mon Dec 14 13:16:14 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.c (output_epilog): Support LANGUAGE_STRING values for F77,
+ Ada, and Pascal.
+
+Sun Dec 13 16:42:26 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixinc.sco: Complete rewrite by ian@cygnus.com.
+
+Sat Dec 12 17:51:43 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * va-alpha.h: Correctly form multi-word object.
+
+ * alpha.c (alpha_builtin_savregs): Correctly compute ARGSIZE and NREGS.
+
+ * alpha.h (FUNCTION_ARG_PASS_BY_REFERENCE): Deleted.
+
+Sat Dec 12 08:42:43 1992 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa-hpux.h (TARGET_DEFAULT): Do not enable TARGET_SHARED_LIBS
+ by default in 2.3.3 since it doesn't really work.
+ * pa-ghpux.h, pa1-hpux.h, pa1-ghpux.h: Likewise.
+
+ * pa.md (floatsisf, floatsidf): Do not accept general registers.
+
+Fri Dec 11 00:13:52 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * configure (i[34]86-*-sco3.2v4*): Use fixinc.sco.
+ * fixinc.sco: New file.
+ Like fixinc.svr4 but turn !__STDC__ into !__STRICT_ANSI__. Don't
+ require space after getcwd argument in stdlib.h.
+ * x-i386s4: Don't use rcc:
+ (CC, OLDCC, RCCFLAGS, CCLIBFLAGS): Vars deleted.
+ * xm-i386sco.h (ONLY_INT_FIELDS): Define if not __GNUC__.
+ (CODE_FIELD_BUG): Likewise.
+ * rtl.h (struct rtx_def) [ONLY_INT_FIELDS]: Handle CODE_FIELD_BUG.
+
+Fri Dec 11 17:56:53 1992 Brendan Kehoe (brendan@mole.gnu.ai.mit.edu)
+
+ * cp-search.c (lookup_nested_field): Check for assignment to members
+ of an enclosing class only when looking at a member, not at other
+ things (like nested types).
+
+ * cp-cvt.c (convert_to_reference): If a conversion can be found via
+ a constructor, then use it. Also fix a typo about when to
+ return the result of a type conversion.
+
+Fri Dec 11 08:15:53 1992 James Van Artsdalen (james@bigtex.cactus.org)
+
+ * reload1.c (choose_reload_regs): Don't inherit a reload if the
+ previous reload wasn't at least as wide as the current reload.
+
+Fri Dec 11 07:19:11 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.c (output_epilog): Remove garbage from one decl of EXTRA.
+ Subtract, not add, size from frame pointer.
+
+ * a29kunix.h (LINK_SPEC): Use -T, not -c, for new gld and change file
+ name to default.gld from default.ld.
+
+ * function.c (assign_outer_stack_local): Align proper frame offset.
+
+ * loop.c (get_condition): Check for overflow when canonicalizing
+ comparison.
+
+Thu Dec 10 15:53:41 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * enquire.c (i_define, u_define, f_define): Add #undef before #define.
+ * fixinc.svr4 (limits.h): Add #ifndef/#endif around macros that
+ are supposed to be defined in float.h.
+
+ * combine.c (try_combine): Only use I2DEST as a scratch reg for
+ a split if it does not overlap any inputs of NEWPAT.
+
+Thu Dec 10 10:23:28 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (get_last_value): Never use value from later insn, even
+ if reg is only set once.
+
+ * c-tree.h (IDENTIFIER_LIMBO_VALUE): Delete duplicate definition.
+
+Thu Dec 10 08:54:03 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * i386sco4.h (CPP_PREDEFINES): Define i386 and unix here.
+ (CPP_SPEC): Not here.
+
+Wed Dec 9 19:03:55 1992 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.h (ASM_DECLARE_FUNCTION_NAME): Correctly get the return type
+ of DECL.
+
+ * x-pa (CC): Set to "/usr/local/bin/gcc" instead of
+ "/usr/local/gcc".
+
+Tue Dec 8 17:50:26 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Bump Meissner version number to 31.
+ (LEGITIMIZE_ADDDRESS): Split large offsets, even when not
+ optimizing. Otherwise, illegal stack offsets can be generated.
+
+Tue Dec 8 11:55:52 1992 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.md (sh[123]add): Use "shadd_operand" as the predicate for
+ operand one.
+ * pa.c (shadd_operand): New function.
+
+Tue Dec 8 08:30:13 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * hp320.h (AS_BUG_FLOATING_CONSTANT, AS_BUG_TRAILING_LABEL): New.
+ (TEXT_SECTION_ASM_OP, DATA_SECTION_ASM_OP): Output align 1 to
+ accomodate the "trailing label" bug.
+ (ASM_OUTPUT_DOUBLE_OPERAND, ASM_OUTPUT_FLOAT_OPERAND): Define to
+ output values in hex to accomodate the "floating constant" bug.
+ (PRINT_OPERAND_FLOAT, PRINT_OPERAND): Ditto.
+
+ * gcc.c (temp_names): New variable.
+ (do_spec_1): Rewrite MKTEMP_EACH_FILE for %g/%u/%U.
+ (choose_temp_base): Abort if mktemp yields a null string.
+
+Tue Dec 8 08:30:13 1992 Niklas Hallqvist (niklas@della.appli.se)
+
+ * integrate.c (expand_inline_function): Don't output line notes
+ for implicit formals.
+
+Tue Dec 8 06:21:44 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (max_uid): New variable.
+ (cse_end_of_basic_block): Use it to ignore insns made by CSE.
+ (cse_main): Set it.
+
+Mon Dec 7 21:22:29 1992 Brendan Kehoe (brendan@mole.gnu.ai.mit.edu)
+
+ * cp-init.c (do_friend): Revert change of Sept 1; it seems to have
+ broken properly emitting friends.
+
+Mon Dec 7 19:09:25 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (eliminate_regs_in_insn): Make another copy of all the
+ RTL if we changed something and we aren't permanently replacing.
+
+ * romp.md (reload_out{q,h}i): Write as proper PARALLEL.
+
+Sun Dec 6 16:27:14 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.md (add-mult): Add missing `&' in constraints of kludge
+ plus/plus/mult pattern.
+
+Sun Dec 6 16:26:42 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * optabs.c (expand_binop): Correct sign of complex quotient imagpart.
+
+Sun Dec 6 07:59:16 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Set Meissner version # to 30.
+ (LEGITIMIZE_ADDRESS): For <reg>+<large int> addresses, rewrite so
+ that <reg> + (<large int> & ~0x7fff) is put into a pseudo reg.
+ This is to allow CSE to generate better code for repeated
+ references in the same general vicinity, such as when large stack
+ frames are used.
+
+ * config/dec-osf1.h (LINK_SPEC): Pass -call_shared, -no_archive,
+ and -exact_version to the linker. If -call_shared, do not pass
+ -non_shared to the linker.
+ * mips-5.h (LINK_SPEC): Ditto.
+ * mips-5bsd.h (LINK_SPEC): Ditto.
+ * mips-svr4.h (LINK_SPEC): Ditto.
+ * mips-sysv.h (LINK_SPEC): Ditto.
+
+Fri Dec 4 19:50:29 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
+
+ * fixincludes: fix _cplusplus typo in SCO's tinfo.h
+
+Fri Dec 4 19:22:35 1992 Randy S. Welch (randy@kcin.alphacdc.com)
+
+ * xm-plexus.h: New file.
+ * configure (m68k-plexus-sysv*): Use it.
+
+Fri Dec 4 19:21:44 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (start_function): Use TYPE_MAIN_VARIANT when comparing
+ return type with previous prototype declaration.
+
+ * cccp.c (output_line_command): Use alloca for line_cmd_buf.
+
+Fri Dec 4 19:20:34 1992 Richard Kenner (kenner@mole.gnu.ai.mit.edu)
+
+ * cse.c (cse_insn): Always pass result of canon_reg through
+ validate_change before using it in insn.
+
+ * c-decl.c, cp-decl.c (init_decl_processing): Don't use hardwired
+ sizes for the modes when making int{Q,H,S,D}I_type_mode and the
+ unsigned versions of them; the actual size depends on BITS_PER_UNIT.
+
+Fri Dec 4 19:13:35 1992 Jonas Olsson (ljo@po.cwru.edu)
+
+ * i386bsd.h (ASM_OUTPUT_ADDR_DIFF_ELT, JUMP_TABLES_IN_TEXT_SECTION):
+ Copy definitions from i386v4.h to get PIC code correct.
+
+Thu Dec 3 19:20:14 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c: Include sys/types.h for systems that need things for
+ signal.h.
+
+Thu Dec 3 01:40:42 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.c (finalize_pic): Remove "*_" from GLOBAL_OFFSET_TABLE name.
+ * spc-sol2.h (ASM_SPEC): Pass "-K PIC" to assembler when pic.
+ (JUMP_TABLES_IN_TEXT_SECTION): Define.
+ (SELECT_RTX_SECTION): Define.
+
+ * fixincludes (sys/types.h): Check for [ \t]size_t not size_t.
+
+Wed Dec 2 15:40:36 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * configure (rs6000-ibm-aix32): New target.
+ * rs6000-aix32.h: New file.
+
+Tue Dec 1 18:05:20 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-type2.c (build_functional_cast): Revert change of Nov 2,
+ concerning clearing the TREE_VALUE of a default parameter.
+
+Tue Dec 1 13:33:25 1992 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * local-alloc.c (optimize_reg_copy_2): Correct reg_n_refs updates.
+
+ * Makefile.in (INSTALLED_H): Add syslimits.h.
+
+Tue Dec 1 11:09:50 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-call.c (build_method_call): When looking for a default arg
+ initialized by a ctor, be careful of a null ref w/ operand 1.
+
+Tue Dec 1 10:43:13 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (num_sign_bit_copies): Return 1 on failure, not 0.
+ Fix typo in last change; return 1 on failure, not BITWIDTH.
+
+Tue Dec 1 09:39:47 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.c (function_prologue): Do not emit a .loc before the
+ function if debug level is 1. This confuses gdb.
+
+Tue Dec 1 02:48:29 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * isc.h (TARGET_DEFAULT): New macro - don't make TARGET_IEEE_FP
+ default for ISC.
+
+Fri Nov 27 01:30:41 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 2.3.2 released.
+
+ * objc/core.c (searchForMethodInHierarchy):
+ If SEL or NAME is 0, return 0.
+
+ * gcc.c (LINK_LIBGCC_SPECIAL_1): New parameter.
+ * rs6000.h (LINK_LIBGCC_SPECIAL_1): Defined.
+
+ * t-hp320g (RANLIB, RANLIB_TEST, AR, AR_FLAGS):
+ Just copy value of ..._FOR_TARGET.
+ (LIBCONVERT): Use TARGET_TOOLPREFIX.
+
+ * reload.c (find_reloads) [SMALL_REGISTER_CLASSES]:
+ Don't use preferred_class for a multiword register.
+
+ * cccp.c (do_include): Initialize searchptr to 0.
+
+Fri Nov 27 07:40:54 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (subst, make_field_assignment, num_sign_bit_copies):
+ Protect calls to significant_bits; unless we only care if the
+ result is a power of two, don't call if mode size is wider
+ than HOST_BITS_PER_WIDE_INT.
+ (extended_count, simplify_shift_const, simplify_comparison): Likewise.
+
+Thu Nov 26 10:31:48 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gstdarg.h (va_end): #undef before the declaration.
+
+ * gstdarg.h (va_arg): Alternative definition for big-endian machines.
+ * gvarargs.h (va_arg): Copy both definitions from gstdarg.h.
+
+ * limitx.h, limit.y: Test and define _GCC_LIMITS_H_, not _LIMITS_H_.
+
+ * mips.c (mips_debugger_offset): Don't crash for unknown cases.
+
+ * c-typeck.c (build_unary_op): Call pedantic_lvalue_warning
+ for *all* cases of incrementing a cast.
+
+ * libgcc2.c (__udiv_w_sdiv): Cast 1 before shifting by 31.
+
+ * fixincludes (PWDCMD): New variable, set specially for Apollos.
+ Use it to get the working dir.
+
+ * combine.c (num_sign_bit_copies): Fix 1-off error in PLUS case.
+
+ * c++: Put newline into `for arg do'.
+
+Thu Nov 26 08:32:20 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expmed.c (struct algorithm): Make coeff a HOST_WIDE_INT.
+
+ * romp.c (output_epilog): Always call output_fpops.
+
+Wed Nov 25 16:24:43 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (install-fixincludes): Use SYSTEM_HEADER_DIR.
+
+ * m68ksgs.h (ASM_OUTPUT_DOUBLE_OPERAND): Really use the operand VALUE.
+
+ * tree.h (CONSTRUCTOR_NAME_FORMAT): Let config.h override this.
+ * tower-as.h (CONSTRUCTOR_NAME_FORMAT): Defined.
+
+ * c++: Replace `for arg do' which ash can't handle.
+
+ * t-next (OTHER_FIXINCLUDES_DIRS): Delete /NextDeveloper/Headers.
+
+ * apollo68.h (HAVE_ATEXIT): Commented out.
+
+ * regclass.c: Fix typo in use of SECONDARY_INPUT_RELOAD_CLASS.
+ (copy_cost): Fix typo in use of SECONDARY_OUTPUT_RELOAD_CLASS.
+
+Wed Nov 25 14:15:50 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * fixinc.svr4 (regexp.h): Don't add a getrnge declaration if a
+ conflicting declaration is already present.
+
+Wed Nov 25 06:47:18 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.h (LINK_LIBGCC_SPECIAL): No longer define.
+
+ * stmt.c (expand_value_return): Don't emit move between differing
+ modes when PROMOTE_FUNCTION_RETURN is defined; convert instead.
+
+ * integrate.c (expand_inline_function): Ensure a REG used as
+ COPY has REG_USERVAR_P set if LOC does.
+
+ * optabs.c (expand_binop, expand_twoval_binop): If we are going
+ to fail, remove any load from MEM we did due to -fforce-mem;
+ if the MEM was volatile, this will cause an extra load.
+ (expand_complex_abs): Likewise.
+ Correct use of variable LAST so it doesn't include the load
+ from MEM (to fix unrelated bug).
+
+Tue Nov 24 00:23:39 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * i386bsd.h (FUNCTION_PROFILER): Use mcount, not _mcount.
+
+ * t-next (OTHER_FIXINCLUDES_DIRS): Leave just /LocalDeveloper/Headers
+ and /NextDeveloper/Headers.
+
+Mon Nov 23 22:06:31 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * ns32k.md (movsi): Split alt 1 to deprecate xy classes in operand 1.
+
+ * combine.c (make_extraction): When making a low part subreg of a reg,
+ use inner_mode, not is_mode.
+
+Mon Nov 23 21:11:13 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * romp.h (ASM_FILE_START): Stop at first blank in VERSION_STRING.
+
+Mon Nov 23 21:09:20 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * fold-const.c (range_test): Convert the constants to the unsigned
+ type before expanding the range test.
+
+Mon Nov 23 20:54:45 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ Mon Nov 23 13:21:43 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ * c++ (first): Only shift if $first is no, on the chance we got no
+ arguments at all. If we didn't get anything, say so (since -lg++
+ will fake out the gcc driver into thinking we want to do something).
+
+ * cp-decl.c (start_decl): If grokdeclarator returns a
+ void_type_node, return a NULL_TREE.
+
+ * cp-typeck.c (build_modify_expr_1): When calling build_opfncall for
+ `operator=', use make_node to create a plain NOP_EXPR for it to use,
+ rather than trying to pass NOP_EXPR down hoping it gets there intact.
+ (build_modify_expr): Ditto.
+ * cp-parse.y (expr_no_commas): Ditto.
+ * cp-method.c (build_opfncall): Use TREE_CODE on ARG3 for a
+ MODIFY_EXPR, since it'll be coming in properly as a tree now.
+
+ Sat Nov 21 02:33:28 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ * cp-init.c (expand_default_init): Clear DECL_REGISTER if we're
+ going to call a ctor, otherwise we may end up generating bogus and
+ confusing error messages about taking the addr of something declared
+ to be `register'.
+
+ * cp-typeck.c (build_x_function_call): Recognize a ptr-to-method
+ that is being passed in as a function argument or as part of
+ a COMPONENT_REF.
+ (build_indirect_ref): If ERRORSTRING is NULL (it's passed in that
+ way in many places), then don't try to use it.
+
+ Thu Nov 19 01:41:58 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-dem.c (do_builtin_type): Recognize `w', a wide character, since
+ it's now a type according to the ANSI X3J16 working paper; output
+ "wchar_t" for it.
+ (cplus_demangle): Accept `w' as an integral type.
+
+ Wed Nov 18 21:29:14 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ * cp-class.c (finish_struct): Re-enable code to cut down on the size
+ of symbol output, the positives outweigh the negatives.
+
+ Wed Nov 18 19:51:59 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-search.c (dfs_walk): Move setting of
+ vbase_decl_ptr_intermediate out of #ifdef code.
+
+ Wed Nov 18 18:49:13 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Make wording on error message
+ stronger.
+
+ Tue Nov 17 17:46:11 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ * cp-search.c (CHECK_convert_pointer_to_single_level): Don't define.
+
+Mon Nov 23 19:44:38 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * mot3300.h (switch_table_difference_label_flag): Define it.
+
+ * ns32k.md (addsi3): Add & for alternative 1 in operand 0.
+
+Mon Nov 23 18:29:27 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * genattrtab.c (obstack.h): Include after sys/time.h.
+
+ * c-decl.c (duplicate_decls): For builtins, create new function
+ type instead of trying to modify old one.
+
+Mon Nov 23 16:28:36 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * i386bsd.h (COMMENT_BEGIN): Redefine as #.
+ (ASM_APP_ON, ASM_APP_OFF): Redefine to use #.
+
+ * combine.c (num_sign_bit_copies): Inhibit x-1 special case
+ when x is a paradoxical subreg.
+
+ * xm-linux.h (malloc, calloc): Definitions deleted.
+
+Mon Nov 23 11:52:41 1992 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa.md (sh[123]add): Use "nonmemory_operand" instead of
+ "register_operand" as the predicate for the first operand.
+
+Mon Nov 23 00:29:27 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (default_compilers): Pass -i* after -U*.
+
+Sun Nov 22 17:03:48 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * hp320.h (FUNCTION_PROFILER): Complete replacement.
+
+ * xm-hp320.h (index, rindex): Defined.
+
+ * gstddef.h: Fix prev change; test of _STDDEF_H was backwards.
+
+Sun Nov 22 16:12:38 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * toplev.c (W_options): Delete -Wreturn-type, as it is in lang_options.
+ * c-decl.c (c_decode_option): Decode -Wreturn-type.
+
+ * c-decl.c, cp-decl.c (pushdecl): Don't inherit DECL_INITIAL when
+ redeclaring the current function.
+
+ * integrate.c (expand_inline_function): Use the original
+ declaration of the inlined function rather than a redeclaration as
+ the BLOCK_ABSTRACT_ORIGIN of the body.
+
+Sat Nov 21 19:54:57 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (main): Do -D's and -A's and -U's in order specified.
+
+ * gcc.c (default_compilers): When running cpp,
+ move %{D*} and %{U*} (in that order) just before %i.
+
+Sat Nov 21 18:24:55 1992 Torbjorn Granlund (tege@hal.gnu.ai.mit.edu)
+
+ * xm-pa.h: Remove #ifdef hpux stuff.
+ (S_ISDIR): Remove.
+ * xm-pahpux.h: New file, developed from old xm-pa.h. Define
+ rindex/index.
+ * pa-hpux7.h, pa-gux7.h: New files.
+
+ * configure (hppa1.0-*-hpux*, hppa1.0-*-hpux*): Use xm-pahpux.h.
+ (hppa1.0-*-hpux7*): New alternative.
+
+Sat Nov 21 14:10:57 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * spc-sol2.h (SWITCH_TAKES_ARG, LINK_SPEC): New override definitions.
+
+ * xm-mot3300.h (index, rindex): Defined.
+
+Sat Nov 21 07:54:53 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h (MIPS_VERSION): Set Meissner version number to 29.
+
+ * mips.c (mips_expand_prologue): If profiling, emit an insn to
+ block other insns from being scheduled before the end of the
+ prologue.
+
+ * mips.md (blockage): New unspec_volatile insn to prevent other
+ insns from being scheduled before it.
+
+Sat Nov 21 06:03:38 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ * sdbout.c (template_name_p): New function.
+ (sdbout_record_type_name): Use it to possibly use the
+ DECL_ASSEMBLER_NAME instead of DECL_NAME if looking at a template.
+ (sdbout_symbol): Ditto.
+
+Fri Nov 20 15:31:05 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * dbxout.c (dbxout_type): Handle need for name of a RECORD_TYPE
+ when it has none.
+
+ * configure (sparc-*-solaris2): Set broken_install.
+
+ * integrate.c (subst_constants): Inhibit special treatment of subreg
+ when the stuff inside is not a reg.
+
+ * config/plexus.h (SIZE_TYPE): Fix syntax.
+
+ * gcc.c (do_spec_1): Handle MKTEMP_EACH_FILE.
+
+Fri Nov 20 15:10:20 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
+
+ * fixincludes (math.h): Get rid of inconsistent inline definitions
+ for abs that are present in HP-UX 8.0.
+
+Fri Nov 20 10:07:48 1992 Michael Meissner (meissner@osf.org)
+
+ * collect2.c (FREAD, FWRITE): Undef these macros if they were
+ defined before including ldfcn.h.
+
+Fri Nov 20 15:38:47 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * integrate.c (expand_inline_function): Mark all notes as integrated.
+
+ * final.c (final): When producing SDB debugging info, delete line
+ number notes from inlined functions in other files as well as
+ duplicate line number notes.
+
+Fri Nov 20 05:24:16 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
+
+ * config.sub: Added machines and operating systems for Emacs
+ ports, since Emacs now uses config.sub for its configuration.
+ New manufacturers recognized not to be operating systems: High
+ Level Hardware (highlevel, defaults to using BSD), Gould
+ (gould, defaults to System V), Commodore (cbm, defaults to
+ amigados), National Semiconductor (ns, defaults to Genix), and
+ Masscomp (masscomp, defaults to RTU).
+ Recognize the NS1600 (ns16k) and the Clipper (clipper) as
+ processors.
+ Recognize these processors with default manufacturers: the
+ Cydra (cydra) from Cydrome (cydrome), the XPS100 (xps100) from
+ Honeywell (honeywell), and the Orion (orion) and Orion 1/05
+ (orion105) from High Level Hardware (highlevel).
+ If the ISC operating system is given with a version number,
+ don't kill it and set it to 2.2; just have it default to 2.2
+ if omitted.
+ Make Irix SGI's default operating system, not SYSV.
+ Make BSD Encore's default, so it applies for all Encore
+ machines, not just the umax and mmax abbreviations.
+ All of Encore's machines use BSD, not just the ns32k-based
+ ones. Make it the manufacturer's default.
+ Make it possible to specify an operating system for a Gould
+ machine. Make sysv the manufacturer's default, so it applies
+ when we specify the manufacturer as well as when we omit it.
+ Add Uniplus (uniplus), Iris (iris), Xenix (xenix), and RTU
+ (rtu) as recognized operating system names.
+
+Wed Nov 18 17:58:18 1992 Karl Berry (karl@cs.umb.edu)
+
+ * i386iscgas.h (SDB_DEBUGGING_INFO): #undef.
+ (DBX_DEBUGGING_INFO): #define.
+ (DBX_OUTPUT_MAIN_SOURCE_{DIRECTORY,FILENAME}): Override dbxout.c.
+
+ * bsd386.h (LPREFIX) [NO_UNDERSCORES]: Define as `.L'.
+
+Wed Nov 18 13:50:43 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.c (compute_frame_size): Make sure the {gp,fp}+offset fields
+ are always initialized, even if there were no gp/fp registers
+ saved.
+
+Wed Nov 18 09:58:50 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * a29k.md (insv): Remove constraints from operand matching
+ const_0_operand.
+
+ * regclass.c (regclass): Add missing cast from enum to int.
+
+Wed Nov 18 09:40:01 1992 John Hassey (hassey@dg-rtp.dg.com)
+
+ * core.c (initialize_class): The class may not have an initialize
+ method.
+
+Wed Nov 18 09:40:01 1992 Wilson Tien (wtien@urbana.mcd.mot.com)
+
+ * xm-m68kv.h (rindex, index): use strrchr and strchr instead.
+
+Wed Nov 18 01:27:37 1992 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu)
+
+ * config.sub: Added Xenix operating system.
+
+Tue Nov 17 18:32:01 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload.c (combine_reloads): Don't combine with a reload needed
+ for multiple things.
+
+Mon Nov 16 08:52:52 1992 Jeffrey A. Law (law@mole.gnu.ai.mit.edu)
+
+ * pa.c (output_move_double): Handle indirect stores to memory
+ via an auto-incremented/auto-decremented register in the same
+ manner in which loads are handled.
+
+Thu Nov 12 21:02:59 1992 Brendan Kehoe (brendan@mole.gnu.ai.mit.edu)
+
+ Cygnus<-->FSF merge.
+
+ Thu Nov 12 15:02:53 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ * tree.h (value_member, purpose_member, binfo_member,
+ tree_int_cst_equal, tree_int_cst_lt, index_type_equal,
+ expand_decl_init): Add decls with prototypes.
+
+ * cp-decl.c (finish_decl): Don't try to use TYPE if it's an
+ error_mark_node.
+
+ * cp-decl.c (sigsegv): Set to the default handler before calling
+ anything, so we can avoid possible infinite loops. Call
+ my_friendly_abort instead of just error().
+ * cp-type2.c (my_friendly_abort): If I is 0, it's coming from sigsegv.
+
+ * cp-type2.c (my_friendly_assert): New function.
+ * cp-call.c, cp-class.c, cp-class.h, cp-cvt.c, cp-decl.c, cp-decl.h,
+ cp-decl2.c, cp-dem.c, cp-edsel.c, cp-except.c, cp-expr.c, cp-gc.c,
+ cp-hash.h, cp-init.c, cp-input.c, cp-lex.c, cp-lex.h, cp-method.c,
+ cp-pt.c, cp-search.c, cp-spew.c, cp-tree.c, cp-tree.h, cp-type2.c,
+ cp-typeck.c, cp-xref.c, cp-parse.y: Don't include assert.h, and use
+ the new function `my_friendly_assert' instead of the `assert' macro.
+
+ Wed Nov 11 22:14:51 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * tree.h (perm_calloc): Add decl.
+ * cp-parse.y (except_stmts): Declare return type of get_insns,
+ since we don't (can't) include rtl.h.
+ * cp-tree.c (TYPE_HASH): Use HOST_WIDE_INT instead of int when
+ casting pointers to integers.
+ (ld_cmp): Likewise.
+ * cp-call.c (build_method_call): Likewise.
+ * cp-class.c (finish_struct_methods): Likewise.
+ * cp-method.c (build_overload_value): Add decl of index.
+ (build_opfncall): Cast to HOST_WIDE_INT, not int.
+ * cp-search.c (get_binfo): Likewise.
+ (get_base_distance): Likewise.
+ (breadth_first_search): Likewise. Also declare to return
+ HOST_WIDE_INT, not int.
+
+ Wed Nov 11 14:34:25 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ Thu Nov 5 15:58:38 1992 Tim Moore (moore at defmacro.cs.utah.edu)
+
+ * cp-decl.c (duplicate_decls): Round to obstack alignment when
+ testing if newdecl is at the top of the permanent obstack.
+
+ Wed Nov 11 13:56:18 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-search.c (build_vbase_vtables_init): Make sure external virtual
+ tables are declared on machines that need the declaration by calling
+ assemble_external.
+
+ Wed Nov 11 12:51:44 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl2.c (grokfield): If the init field is really a list with
+ just an error_mark_node, then it wasn't a real initialization, so
+ don't treat it like one.
+
+ Tue Nov 10 16:21:20 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-init.c (build_new): If arg 1 of an array reference is an
+ error_mark, then just pretend that there were 0 elements.
+
+ Tue Nov 10 13:23:30 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-typeck.c (build_x_function_call): If the type of FUNCTION is an
+ error_mark, don't bother checking its lang-specific info.
+
+ Tue Nov 10 12:38:36 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-decl.c (decls_match): Avoid core dumping when TREE_TYPE is
+ NULL_TREE, as is the case when olddecl is a TEMPLATE_DECL.
+
+ Tue Nov 10 11:03:36 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (pushdecl_top_level): Disable assert for now; it's
+ always acted correctly.
+
+ Mon Nov 9 12:04:27 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-parse.y (try_for_typename): Deleted rule.
+ (scoped_id): Don't use it.
+
+ Fri Nov 6 18:07:37 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-init.c (expand_aggr_init): If INIT is 0, don't bother trying to
+ play with its type.
+
+ Thu Nov 5 16:52:37 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-decl.c (finish_decl): Set TREE_STATIC, TREE_PUBLIC and
+ DECL_EXTERNAL correctly for use with #pragma interface.
+
+ Fri Nov 6 10:07:01 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-class.c (finish_struct): Don't try to work with a field that
+ got a bogus type.
+
+ * cp-method.c (build_overload_value): Don't call debug_tree!
+
+ * cp-call.c (build_method_call): If processing a default argument
+ that calls a ctor for its default value, use INSTANCE_PTR for the
+ parm list, discarding what we knew before.
+
+ * cp-decl.c (grokdeclarator): If initializing a const member and
+ acting pedantic, then do make it an error.
+
+ * cp-decl2.c (warn_traditional): New variable.
+ (lang_decode_option): Use it for -Wtraditional and -Wno-traditional.
+ * cp-tree.h (warn_traditional): Add decl.
+ * cp-lex.c (readescape): For x, avoid overflow when shifting in if.
+ Warn for \a and \x if warn_traditional; pass through
+ the escaped x and a if -traditional. Support \e like \E; for both,
+ pedwarn about ANSI C.
+
+ * cp-call.c (find_scoped_type): Delete arg TAGS; instead, compute it
+ inside from TYPE. If TAGS is null, don't return immediately, since
+ we need to look for TYPE_DECLs.
+ (resolve_scope_to_name): Call find_scoped_type without replicating
+ the tags.
+
+ Thu Nov 5 17:53:32 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Constant class members can be
+ initialized.
+
+ Thu Nov 5 17:11:30 1992 Mike Stump (mrs@cygnus.com)
+
+ Thu Nov 5 19:48:17 1992 Niklas Hallqvist (niklas@appli.se)
+
+ * cp-pt.c (instantiate_class_template): Types are used in later
+ processing, so they must go into the permanent obstack.
+
+ Thu Nov 5 13:02:56 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Don't allow members to be initialized
+ in the class declaration.
+
+ * cp-decl2.c (finish_file): Set the DECL_CLASS_CONTEXT on a function
+ that's a file-scope set of ctors/dtors for global variables, so
+ is_friend will see things the way they should be seen.
+
+ * cp-call.c (find_scoped_type): New function.
+ (resolve_scope_to_name): Use it to check for names that might be in
+ base classes.
+
+ Wed Nov 4 00:43:15 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-parse.y (db_yyerror): Deleted fn.
+ (yyprint, yyerror, init_parse, yyhook, reduce_cmp, token_cmp,
+ print_parse_statistics,set_yydebug, debug_yytranslate): Moved to
+ cp-lex.c.
+ (reduce_count, token_count): Ditto.
+ (current_declspecs): Made static.
+
+ * cp-typeck.c (build_c_cast): Warn if casting between a pointer and
+ an integer whose sizes differ.
+
+ * cp-parse.y (unary_expr): Finish making new with placement work;
+ use the rule `new' instead of the token `NEW' when parsing it.
+
+ Tue Nov 3 02:16:47 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-typeck.c (c_expand_return): Avoid referencing DECL_NAME if it's
+ null when checking for a ref to or the addr of a local variable.
+
+ * cp-search.c (dfs_pushdecls): Don't try to use the context of a
+ field which has none at the time.
+
+ * cp-decl.c (redeclaration_error_message): Don't complain about
+ redefinition of a function if it's a definition of an abstract
+ virtual function.
+ (duplicate_decls): For an abstract virtual, don't use the old RTL
+ from abort when creating the RTL for the newdecl.
+
+ Tue Nov 3 00:15:44 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ * cp-decl.c (grokdeclarator): For `inline', `unsigned', and `signed',
+ see them as types, not as storage class specs, when looking for more
+ than one storage class.
+
+ * cp-lex.c (readescape): New arg ignore_ptr.
+ (real_yylex): Pass new arg, handle result that comes back.
+
+ * cp-decl.c (WCHAR_TYPE_SIZE): Deleted; never used.
+
+ Mon Nov 2 10:23:52 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-lex.c (real_yylex): Let skip_white_space handle \r.
+
+ * cp-parse.y (parmlist): Warn on a decl `foo (...)', without a first
+ argument.
+
+ * cp-type2.c (build_functional_cast): If expr_as_ctor's argument is
+ a SAVE_EXPR, don't wipe out the argument.
+
+ * cp-call.c (build_method_call): Only complain about not having an
+ object for a called method if the method is non-static.
+
+ Sun Nov 1 16:50:14 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl2.c (warn_char_subscripts): Declare.
+ (lang_decode_option): Handle -Wchar-subscripts.
+ * cp-typeck.c (build_array_ref): If the type of either the array or
+ its index is an error_mark_node, then return one. Add code to see
+ if the index is a character (add warning), then do the default
+ promotions. Don't warn if it's a register array. Make a ref
+ volatile if the array is volatile.
+ * cp-tree.h (warn_char_subscripts): Add decl.
+
+ * cp-typeck.c (common_type): If either type is nonsense (an
+ error_mark), use the other type.
+
+ Thu Oct 29 18:39:50 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Fix problem introduce by me on Oct 22
+ 17:41:13. Put back call to build_offset_type that I took out, as it
+ is not wrong, as the comment for build_offset_type had led me to
+ believe.
+
+ Thu Oct 29 17:30:12 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-cvt.c: Delete block-level extern decls; include flags.h instead.
+ * cp-tree.h (flag_int_enum_equivalence): Declare here.
+ * cp-call.c: Not here.
+
+ * Makefile.in (stamp-cp-parse): There are now only 29 shift/reduce
+ conflicts, because of the removed wrapper stuff.
+
+ * cp-lex.c (lastiddecl, ridpointers): Define here.
+ (NORID): Don't define here.
+ * cp-lex.h (NORID): Define here instead.
+ (ridpointers, lastiddecl, token_buffer, looking_for_typename): Ditto.
+ (make_pointer_declarator, make_reference_declarator,
+ reinit_parse_for_function, reinit_parse_for_method, yylex): Likewise.
+ * cp-parse.y: Don't define any of them in here.
+
+ * cp-typeck.c (commonparms): Call tree_cons with NULL_TREEs, not 0s.
+ (convert_arguments): Likewise.
+ Throughout the file, say `ANSI C++ forbids', not `ANSI C forbids'.
+ * cp-lex.c, cp-type2.c: Likewise.
+
+ Remove wrapper functionality from the compiler.
+ * cp-call.c (build_method_call): Delete wrap and wrap_type.
+ Delete code that used them. Don't set err_name to "wrapper", since
+ wrapper_name doesn't exist anymore.
+ * cp-class.c (finish_base_struct): Don't worry about TYPE_WRAP_TYPE.
+ * cp-decl.c (grokfndecl): Delete code for WRAPPER_EXPR and
+ ANTI_WRAPPER_EXPR.
+ (grokdeclarator): Likewise. Don't set TREE_HAS_WRAPPER_PRED.
+ * cp-decl2.c (grokclassfn): Likewise.
+ (check_classfn): Likewise.
+ * cp-init.c (get_member_function): Don't check TYPE_NEEDS_WRAPPER.
+ * cp-lex.c (real_yylex): Don't check WRAPPER_OR_ANTI_WRAPPER_NAME_P.
+ * cp-method.c (wrapper_name, wrapper_pred_name, anti_wrapper_name):
+ Deleted variables.
+ (init_method): Don't do any setup for *WRAPPER_*.
+ (hack_wrapper): Deleted function.
+ * cp-parse.y (wrapper): Deleted rule.
+ (identifier_or_opname): Deleted all wrapper predicates.
+ (notype_declarator): Deleted predicates LEFT_RIGHT for wrappers.
+ * cp-ptree.c (print_lang_type): Deleted message for printing "wrapper".
+ * cp-search.c (get_wrapper): Deleted fn.
+ * cp-tree.h (struct lang_type): Deleted has_wrapper_pred and
+ wrap_type members.
+ (build_wrapper, hack_wrapper, get_wrapper): Deleted decls.
+ (wrapper_name, wrapper_pred_name, anti_wrapper_name): Deleted decls.
+ (TYPE_WRAP_TYPE, TYPE_HAS_WRAPPER, TYPE_NEEDS_WRAPPER,
+ TYPE_HAS_WRAPPER_PRED, WRAPPER_DECL_FORMAT, WRAPPER_PRED_DECL_FORMAT,
+ ANTI_WRAPPER_DECL_FORMAT, WRAPPER_NAME_FORMAT,
+ WRAPPER_PRED_NAME_FORMAT, ANTI_WRAPPER_NAME_FORMAT,
+ WRAPPER_NAME_P, WRAPPER_PRED_NAME_P, ANTI_WRAPPER_NAME_P,
+ WRAPPER_OR_ANTI_WRAPPER_NAME_P): Deleted.
+ (enum overload_flags): Deleted WRAPPER_FLAG, WRAPPER_PRED_FLAG,
+ and ANTI_WRAPPER_FLAG tags.
+ * cp-typeck.c (build_function_call_real): Delete wrapper code.
+ (unary_complex_lvalue): Don't check TYPE_NEEDS_WRAPPER.
+ * stmt.c (warn_if_unused_value): Don't check *WRAPPER_EXPR.
+ * tree.def (WRAPPER_EXPR, ANTI_WRAPPER_EXPR): Deleted.
+
+ Wed Oct 28 15:38:44 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-cvt.c (convert_to_reference): New arguments FNDECL, PARMNUM,
+ and ERRTYPE. Use them to give warnings about const and volatile
+ references being used incorrectly. Call itself with dummy arguments
+ where appropriate.
+ (convert): Call convert_to_reference with dummy args.
+ (convert_force): Likewise.
+ * cp-typeck.c (warn_for_assignment): Remove static declaration,
+ cp-cvt.c needs to see it now.
+ (convert_for_initialization): Call convert_to_reference with fndecl,
+ parmnum, and errtype.
+
+ Tue Oct 27 17:38:18 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Fix problem introduce by me on Oct 22
+ 17:41:13. Only output error or warning message about extra
+ qualifiers when we are inside a class declaration.
+
+ Tue Oct 27 16:21:41 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-tree.h (THIS_NAME_P): Fix to reflect September 1 change in
+ THIS_NAME.
+
+ Tue Oct 27 12:35:59 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-parse.y (operator_name): Remove check for top-level operator
+ <typename> decl.
+ * cp-decl.c (grokdeclarator): Complain here about type conversion
+ operators that aren't declared as members of classes.
+
+ * cp-decl.c (grokdeclarator): Only call do_friend on a friend if
+ decl's non-zero.
+
+ Tue Oct 27 09:31:08 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-lex.c (do_identifier): Add missing fourth argument to
+ lookup_field.
+
+ Mon Oct 26 15:15:39 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-cvt.c (convert_to_reference): Check for ambiguities
+ between constructor and conversion operators a bit harder.
+
+ Sat Oct 24 19:34:39 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ Mon Sep 14 14:36:53 1992 Chip Salzenberg (chip@tct.com)
+
+ cp-decl.c (poplevel): If apparently nested inline function has
+ DECL_ABSTRACT_ORIGIN, don't output it; propagate TREE_ADDRESSABLE.
+ (pushdecl): When copying inline details into an extern decl,
+ copy DECL_RESULT, TREE_ASM_WRITTEN. Set DECL_ABSTRACT_ORIGIN.
+
+ Fri Oct 23 18:52:19 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (poplevel): Use error_with_decl on an unused label, so
+ its line number comes out correct.
+
+ Thu Oct 22 18:31:50 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-parse.y (operator_name): If a type conversion operator is
+ defined at the top level, don't crash, complain.
+
+ Thu Oct 22 17:41:13 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Return void_type_node instead of
+ NULL_TREE on errors, to forestall another error message. Check for
+ redundant or illegal qualification on class members.
+
+ Thu Oct 22 13:15:57 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-tree.h (ANON_AGGRNAME_P): Check the second charater as well, as
+ it could be $vtbl_ptr_type, and not an ANON_AGGRNAME.
+
+ Wed Oct 21 19:31:36 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-call.c (build_method_call): Initialize b_or_d to 0.
+
+ * cp-typeck.c (compparms): Delete dead code for returning if either
+ TREE_PURPOSE is true when t1 and t2 are both 0.
+
+ * cp-parse.y (object): Only pass one argument into build_x_arrow.
+
+ * cp-parse.y (unary_expr): Add code to parse `&&label'.
+ (stmt): Expand computed gotos.
+
+ * cp-method.c (fndecl_as_string): Say it's static before giving its
+ type, it looks better (and matches how you'd declare it).
+
+ Wed Oct 21 16:22:43 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (start_decl): return NULL_TREE, not error_mark_node to
+ signify error.
+ * cp-decl2.c (cplus_decl_attributes): New function. Don't call
+ decl_attributes if the first argument is NULL_TREE.
+ * cp-tree.h (cplus_decl_attributes): Declare new function.
+ * cp-parse.y: Changed all calls to decl_attributes into calls to
+ cplus_decl_attributes, as all calls may pass NULL_TREE in the first
+ argument.
+
+ Wed Oct 21 11:40:35 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-call.c (build_method_call): Avoid an abort on parse errors by
+ changing an assert into a conditional my_friendly_abort.
+
+ Tue Oct 20 16:52:32 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-tree.h (TYPE_ASSEMBLER_NAME_STRING,
+ TYPE_ASSEMBLER_NAME_LENGTH): New macros.
+ * cp-search.c (build_type_pathname): Use new macros.
+ * cp-decl.c (pushtag): Set DECL_ASSEMBLER_NAME for TYPE_DECLs with
+ build_overload_name so that assembler names for template type things
+ are like __vt$t1X1Zi$1T.4 and not __vt$X<int>$T.4.
+ * cp-decl.c (pushdecl): Since the rest of the compiler wants to use
+ DECL_NAME for TYPE_DECLs, use that instead of DECL_ASSEMBLER_NAME.
+
+ Tue Oct 20 11:29:50 1992 Mike Stump (mrs@cygnus.com)
+
+ Wed Oct 7 16:01:55 1992 Chip Salzenberg (chip@tct.com)
+
+ [ changes propagated from 921005 snapshot ]
+ * cp-lex.c (readescape): No warning if digits in \x are all 0's.
+
+ Fri Oct 9 15:18:19 1992 Brendan Kehoe (brendan@cygnus.com)
+
+ * cp-decl.c (duplicate_decls): Only find out if olddecl is a
+ friend after we know it's not a TREE_LIST.
+
+ Wed Oct 7 16:04:34 1992 Mike Stump (mrs@cygnus.com)
+
+ Wed Oct 7 12:26:07 PDT 1992 Ron Guilmette (rfg at netcom.com)
+
+ * cp-lex.c (readescape): Permit \? as an escape sequence.
+
+ Tue Oct 6 17:54:09 1992 Mike Stump (mrs@cygnus.com)
+
+ Major MI revamp.
+
+ * cp-search.c (get_binfo, find_base_distance): Fix comments.
+ Disable incorrect code that would incorrectly find ambiguities where
+ none existed. Add some code to find all ambiguities.
+ * cp-search.c (get_binfo2_recursive, get_binfo2): Added to find
+ ambiguities.
+
+ * cp-search.c (convert_pointer_to_single_level): Added so that one
+ can convert pointer unambiguously to an immediate base class
+ pointer.
+
+ * cp-search.c (dfs_walk): Added comments. Fixed to keep track of
+ how it walks the inheritance hierarchy so that when we get down to
+ the bottom, we have a pointer to what we want.
+ * cp-search.c (dfs_find_vbases): Changed to use new intermediate
+ pointer instead of incorrectly trying to convert at the bottom.
+ * cp-search.c (init_vbase_pointers): Changed to set up new
+ intermediate pointer.
+
+ * cp-*.c: Rename child -> base_binfo, child_child ->
+ base_base_binfo, child_binfos -> base_binfos, .*_child ->
+ .*_base_binfo. Rename DERIVED_FROM_P to UNIQUELY_DERIVED_FROM_P.
+
+ Tue Oct 6 14:51:13 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * cp-spew.c (yylex_ctr): Make unsigned.
+ * cp-decl2.c (spew_debug): Add extern reference.
+ (lang_decode_option): New option `-spew-debug', so masochists can
+ use it when they need to.
+
+ Mon Oct 5 15:47:35 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ Implement protected baseclasses.
+ * cp-class.c (finish_base_struct): Set TREE_VIA_PROTECTED.
+ (finish_struct_methods): Check for either public or protected
+ members to kick out of the "all members are private" test.
+ * cp-decl.c (xref_tag): Set TREE_VIA_PROTECTED appropriately.
+ * cp-parse.y (base_class_visibility_list): Remove code about
+ `protected' visibility not being implemented.
+ * cp-pt.c (tsubst): Set via_protected and call hash_tree_cons
+ with it as necessary.
+ * cp-search.c (compute_visibility): Set visibility if protected.
+ Return the appropriate visibility when resolving a field.
+ (lookup_field): Set TREE_VIA_PROTECTED for btypes from its child.
+ When complaining about a member being protected, differentiate when
+ it's from a protected base class (could be a public member in the
+ base).
+ (lookup_fnfields): Set TREE_VIA_PROTECTED.
+ (get_baselinks): Pass TREE_VIA_PROTECTED into hash_tree_cons.
+ Also pass a 0 when necessary.
+ * cp-tree.c (propagate_binfo_offsets): Set TREE_VIA_PROTECTED.
+ (layout_vbasetypes): Ditto.
+ (layout_basetypes): Ditto.
+ (list_hash_lookup): Check TREE_VIA_PROTECTED when looking at an
+ incomplete basetype.
+ (hash_tree_cons): New argument `via_protected'. Set TREE_VIA_PROTECTED
+ when necessary.
+ (list_hash_lookup_or_cons): Check TREE_VIA_PROTECTED when making
+ sure a hash list is sane.
+ (make_binfo): Set TREE_VIA_PROTECTED for the new child.
+
+ Mon Oct 5 13:27:44 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-init.c (maybe_adjust_addr_for_delete): Make sure we don't
+ evaluate the addr twice if it has side effects.
+
+ Mon Oct 5 13:05:37 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-init.c (build_vec_delete): Make sure we don't evaluate the base
+ expression twice if it has side effects.
+
+ Mon Oct 5 12:38:35 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Issue a warning or error if we're
+ being ANSI-careful when they do `extern inline'.
+ (flag_ansi): Add extern decl.
+
+ Mon Oct 5 12:34:32 1992 Mike Stump (mrs@cygnus.com)
+
+ * cp-class.c (finish_struct): Don't give an error if an enumeration
+ type is stuck in a bit-field, as it is legal c++.
+
+ Mon Oct 5 11:43:09 1992 Mike Stump (mrs@cygnus.com)
+
+ Mon Sep 14 16:39:10 1992 Chip Salzenberg (chip@tct.com)
+
+ * cp-cvt.c (convert_to_integer): Don't pass truncation thru lshift
+ if shift count >= width of narrower type. Instead, just use 0.
+
+ Fri Oct 2 13:21:40 1992 Ken Raeburn (raeburn@kyriath.cygnus.com)
+
+ * cp-decl.c (start_function): Reinstate error check for missing
+ semicolon erroneously removed.
+
+Thu Nov 12 17:37:23 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.md (movdf_internal): Split movdf insn into two -- one for
+ normal use, and one for -msoft-float, and don't prefer FPU
+ registers in the -msoft-float case.
+ (movsf_internal): Ditto for movsf.
+
+Thu Nov 12 07:30:17 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.h (HARD_REGNO_MODE_OK): Restrict MODE_INT from FP regs only.
+
+ * i386.md (floatMN2 recognizers): Don't omit mode on a
+ match_operand that might be reloaded. Split into separate
+ patterns for each mode.
+ (zero_extract test): Disable for now.
+
+ * i386.c (float_op): Delete - no longer used.
+
+Wed Nov 11 11:55:22 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * combine.c (simplify_comparison, case ASHIFTRT): mode_for_size
+ returns BLKmode on error, not VOIDmode.
+
+ * romp.md (reload_outdi): Write as proper PARALLEL.
+
+Wed Nov 11 01:06:33 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * toplev.c (lang_options): Change +e... to -+e...
+
+ * xm-tower.h: Include xm-svr3.h.
+ (bcopy, bzero, bcmp, USG): Macros deleted.
+
+Tue Nov 10 12:26:23 1992 Steve Chamberlain (sac@cygnus.com)
+
+ * sdbout.c (plain_type_1): Handle LONG_TYPE_SIZE like INT_TYPE_SIZE.
+
+Tue Nov 10 14:20:27 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.md (ffssi2): Add =& constraints to the two match_scratch
+ clobbered registers. Fix from John F Carr.
+
+ * mips-tdump.c (toplevel): Move #undef index and rindex before
+ including sym.h.
+
+Tue Nov 10 10:37:50 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (install-common): Delete deps $(srcdir)/g++ $(srcdir)/c++
+
+ * expr.c (init_expr_once): Try indexing mem by fp as well as sp.
+
+Tue Nov 10 10:28:59 1992 Chris Smith (csmith@convex.com)
+
+ * genattrtab.c (main): Unlimit stack size.
+
+Tue Nov 10 10:17:51 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * print-rtl.c (print_rtx): Use sizeof spaces - 1 to get the length
+ of the spaces string.
+
+Tue Nov 10 09:56:32 1992 Jeffrey A. Law (law@schirf.cs.utah.edu)
+
+ * pa-hpux.h (LINK_SPEC): Disable linking against shared libraries.
+ * pa-ghpux.h (LINK_SPEC): Likewise.
+
+Tue Nov 10 08:39:01 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * elxsi.h (GO_IF_LEGITIMATE_ADDRESS): Verify that register is valid
+ for use as base register (un-allocated pseudos aren't when strict).
+
+Mon Nov 9 22:17:23 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * xm-3b1.h (index, rindex): Define as macros.
+
+ * i386bsd.h: Complete rewrite.
+
+Mon Nov 9 14:22:38 1992 Michael Meissner (meissner@osf.org)
+
+ * mips.h, decrose.h: Move LINK_LIBGCC_SPECIAL to decrose.h.
+
+Mon Nov 9 12:39:03 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * unroll.c (final_biv_value): Make a note after loop_end
+ if we need to use NEXT_INSN (loop_end).
+
+ * objc-actions.c (build_message_expr): Don't crash if super_type is 0.
+
+Mon Nov 9 07:42:30 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * caller-save.c (save_call_clobbered_regs): Ensure any insns we add
+ are in the same basic block as the insn we added them for.
+
+Mon Nov 9 12:35:57 1992 Torbjorn Granlund (tege@jupiter.sics.se)
+
+ * pa.h (TARGET_*): Move it to the beginning of the file.
+ (CPP_SPEC): Handle -mnosnake.
+ * pa-ghpux.h pa-hpux.h pa1-ghpux.h pa1-hpux.h pa1.h pa.h: Move
+ definition of TARGET_DEFAULT to before inclusion of other pa*h files.
+ Only define TARGET_DEFAULT if not already defined.
+ Get rid of hpux8 conditionals.
+
+Sun Nov 8 20:38:19 1992 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * i386.md (movstrsi): mask move count after signed shift.
+
+Sun Nov 8 00:24:30 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixinc.svr4: Avoid use of | in sed regexp; use multiple s commands.
+
+ * i386mach.h: Include i386gstabs.h, not i386gas.h.
+
+ * gsyslimits.h: Renamed from syslimits.h.
+ * Makefile.in (USER_H): syslimits.h deleted.
+ (install-common-headers): Install gsyslimits.h as syslimits.h.
+ Depend on gsyslimits.h and assert.h.
+
+ * cccp.c (rescan): Accept # as command inside macro args, etc.
+ If an actual newline at the same level precedes.
+
+ * fixincludes (EXINIT): Set it to `set', not null.
+
+ * toplev.c (main): Use strncmp when testing for gstabs+ vs gstabs.
+
+Sat Nov 7 17:46:35 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * optabs.c (expand_unop):
+ For complex negation, do get_insns, not gen_sequence.
+
+ * c-decl.c (finish_decl): Don't clear DECL_INITIAL in inline fn decls.
+
+ * c-typeck.c (process_init_constructor): Strip NOP_EXPR from indices.
+ Clear end_index if there's an error in a range.
+
+ * mips-5sysv.h, mips-5svr4.h, mips-5bsd.h (CPP_PREDEFINES):
+ Add single-underscore variants of all the predefined symbols.
+
+ * gstddef.h [_ANSI_H_]: When undefing at the end, test _STDDEF_H,
+ not __need_ptrdiff_t.
+
+ * mips.c (gen_int_relational): Handle overflow when incrementing cmp1.
+
+Fri Nov 6 23:03:14 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * elxsi.c: Include config.h.
+
+Fri Nov 6 18:53:21 1992 Chip Salzenberg (chip@tct.com)
+
+ * i386sco.h (STARTFILE_SPEC): Fix line wrap.
+ (SIGNED_CHAR_SPEC): Defined to set _CHAR_UNSIGNED.
+
+Fri Nov 6 19:06:56 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * dbxout.c (dbxout_symbol): Give name ` ' to unnamed enums.
+
+Fri Nov 6 15:26:30 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * optabs.c (init_libfuncs): Add casts when comparing/incrementing enum.
+
+Fri Nov 6 15:41:00 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * toplev.c (main): Really accept -gstabs+.
+
+Fri Nov 6 06:46:22 1992 Tom Wood (wood@dg-rtp.dg.com)
+
+ * m88k.md (tcnd_divide_by_zero, divsi3, udivsi3): Allow the
+ explicit trap for divide by zero to resume execution along the
+ expected path.
+
+ * t-m88kv4 (FIXINCLUDES): Delete.
+
+Fri Nov 6 03:08:13 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * i386.md (andsi3): Mask immed op to 0xff in QI-reg ff00-byte case.
+
+ * gstddef.h: Find ansi.h in machine subdir.
+ [__need_ptrdiff_t]: Don't undef _SIZE_T_ or _WCHAR_T_.
+ * gvarargs.h, gstdarg.h: Don't test, define or undef _VA_LIST_
+ on NET 2 systems. Don't include ansi.h.
+
+ * c-lex.c (readescape): Support \e like \E. Warn only if -pedantic.
+
+Fri Nov 6 08:34:17 1992 Tim Moore (moore at defmacro.cs.utah.edu)
+
+ * integrate.c (copy_rtx_and_substitute)[ARGS_GROW_DOWNWARD]: Map
+ virtual args pointer to the top of the argument block.
+ * calls.c (expand_call)[ARGS_GROW_DOWNWARD] Fix fencepost error in
+ calculating high_to_save and low_to_save. Use - high_to_save to
+ address stack_area.
+
+Fri Nov 6 00:41:53 1992 Paul Eggert (eggert@twinsun.com)
+
+ * sparc.h (TARGET_EDOM, GEN_ERRNO_RTX): Deleted.
+
+Thu Nov 5 18:55:44 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.c (output_prologue): Fix typo: `add' should be `addq'.
+
+Thu Nov 5 18:35:43 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (install-fixincludes): Add semicolon in new for-loop.
+
+Thu Nov 5 15:24:14 1992 Michael Meissner (meissner@osf.org)
+
+ * i386rose.h, decrose.h (REAL_LD_FILE_NAME): Define to be the
+ correct location on OSF/1 -- /usr/bin/ld points to
+ /usr/ccs/gcc/ld, which is collect.
+ (REAL_NM_FILE_NAME): Ditto for nm.
+ (REAL_STRIP_FILE_NAME): Ditto for strip.
+
+Wed Nov 4 13:36:10 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * optabs.c (expand_binop): When trying to expand a multiple word
+ add into multiple single word adds, don't overwrite OP0 and OP1 in
+ case we must backtrack. We use instead new variables XOP0 and XOP1.
+
+Wed Nov 4 16:45:53 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config.sub: Don't discard SCO version number if it's 3.2v4.
+
+ * xm-vax-vms.h (HOST_FLOAT_FORMAT): Defined.
+
+ * varasm.c: Fix typos in last change.
+
+Wed Nov 4 10:11:28 1992 Torbjorn Granlund (tege@jupiter.sics.se)
+
+ * va-pa.h (va_end): Do it like in other va-*.h files.
+
+Wed Nov 4 07:23:46 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * local-alloc.c (optimize_reg_copy_1): If P is a CALL_INSN, count
+ it as being crossed by SRC since SRC used to die there.
+
+Wed Nov 4 00:13:51 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * x-next (libgcc2.a, stdarg.h): New rules.
+
+ * varasm.c (immed_real_const_1, immed_double_const):
+ Don't push on const_double_chain in nested function.
+
+ * expr.c (emit_move_insn): Do return a value, in complex case.
+
+Tue Nov 3 10:45:09 1992 H.J. Lu (hlu@yardbird.eecs.wsu.edu)
+
+ * i386linux.h (STARTFILE_SPEC): -static is added to ld if
+ -pg, -g or -p is passed down by gcc.
+
+Tue Nov 3 15:14:48 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * pa.c (output_ior): Handle "ior" against zero.
+
+ * i386mach.h (YES_UNDERSCORES): Define it.
+
+ * sun3.h (ASM_OUTPUT_FLOAT_OPERAND): Use REAL_VALUE_MINUS_ZERO.
+ (ASM_OUTPUT_DOUBLE_OPERAND): Likewise.
+
+Tue Nov 3 08:25:35 1992 Chris Smith (csmith@convex.com)
+
+ * convex.h (REG_CLASS_FROM_LETTER): Add 'A', index regs.
+ (movsi alternative): Use it to make psh.w sp (push the
+ stack pointer) a noninstruction.
+
+Tue Nov 3 08:05:10 1992 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * jump.c (jump_optimize): Ensure operand of REG_NOTES is an INSN;
+ otherwise, we might try to read outside allocated memory.
+
+ * va-alpha.h (va_end): Don't define enum if va_end already defined.
+
+Tue Nov 3 02:56:22 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc/Makefile: Use $(srcdir), not `..'.
+
+ * objc-actions.c (build_message_expr): Use save_expr for receiver.
+
+ * va-i860.h (va_end, anonymous enum): Don't declare if
+ va_end already defined as macro.
+ * va-mips.h, va-i960.h (va_end): If already a macro, don't declare.
+
+Mon Nov 2 21:17:40 1992 Paul Eggert (eggert@twinsun.com)
+
+ * va-sparc.h (va_end): If already def as macro, don't declare.
+
+Mon Nov 2 16:04:51 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * i386linux.h: Include i386gstabs.h, not i386gas.h.
+
+Mon Nov 2 14:46:31 1992 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
+
+ * Makefile.in (install-cross-tools): Delete old symlink before
+ making new one; else symlink will fail and we will use
+ backed strategy.
+
+Sun Nov 1 17:55:56 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * varasm.c (decode_rtx_const): Handle PC same as LABEL_REF.
+
+Sun Nov 1 03:19:39 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 2.3.1 released.
+
+ * x-i386s4: Renamed from x-i386sco4.
+ * configure (i[34]86-*-sco*): Use new name.
+
+ * sol2-c1.asm, sol2-ci.asm, sol2-cn.asm: Renamed from sol2-crt...
+ * t-sol2: User new names.
+
+See ChangeLog.6 for earlier changes.
diff --git a/gcc/ChangeLog.8 b/gcc/ChangeLog.8
new file mode 100644
index 00000000000..9c9140e30c9
--- /dev/null
+++ b/gcc/ChangeLog.8
@@ -0,0 +1,11080 @@
+Tue Mar 1 19:43:31 1994 Stan Shebs (shebs@cygnus.com)
+
+ * a29k/a29k.h (TARGET_SOFT_FLOAT): Define.
+ (TARGET_SWITCHES): Add -msoft-float.
+ * a29k/a29k.md (all floating point): Disable floating point insns
+ if doing soft floats.
+
+Tue Mar 1 19:36:05 1994 Glenn Holloway (glenn@soi.com)
+
+ * defaults.h (ASM_OUTPUT_ADDR_DIFF_ELT): Use
+ ASM_OUTPUT_INTERNAL_LABEL instead of ASM_GENERATE_INTERNAL_LABEL.
+
+Tue Mar 1 19:26:47 1994 Jim Wilson (wilson@cygnus.com)
+
+ * sparc/sol2.h (JUMP_TABLES_IN_TEXT_SECTION): Delete.
+ * sparc/sysv4.h (JUMP_TABLES_IN_TEXT_SECTION): Add.
+
+ * c-typeck.c (build_binary_op): Pass TREE_TYPE (orig_op0) not
+ orig_op0 to TREE_UNSIGNED.
+
+Tue Mar 1 18:33:33 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * varasm.c (output_constant): Strip off some NOP_EXPRs
+ before further processing.
+
+Tue Mar 1 12:00:00 1994 Stan Cox (coxs@dg-rtp.dg.com)
+
+ * m88k.c (legitimize_address, print_operand): Make -fPIC work
+ again. Put addresses inside UNSPEC when loading them to
+ ensure that cse won't mistakenly optimize them.
+
+ * m88k.md: Two new patterns, to match (HIGH (UNSPEC (..))) and
+ (LO_SUM (reg) (UNSPEC (..))) as generated above.
+
+ * m88k.h: (GO_IF_LEGITIMATE_ADDRESS) Reject invalid PIC addresses.
+
+Tue Mar 1 11:00:14 1994 Doug Evans (dje@cygnus.com)
+
+ * configure: Fix some typos.
+ * config.sub: Move comment to proper place.
+
+Mon Feb 28 18:31:50 1994 Doug Evans (dje@cygnus.com)
+
+ * ns32k/encore.h (ASM_OUTPUT_ASCII): Fix typo.
+
+Mon Feb 28 18:31:42 1994 Steve Chamberlain (sac@cygnus.com)
+
+ * expr.c (convert_move): Change name of truncsipsi to truncsipsi2
+ to conform to existing convention, same with extendpsisi.
+
+Mon Feb 28 08:11:55 1994 Jim Meyering (meyering@comco.com)
+
+ * cccp.c (check_precompiled): Delete unused var dollar_loc.
+ (pcstring_used): Delete unused var TMP.
+ (write_output): Delete unused var WRITTEN.
+ (assertion_lookup): Delete unused var BP.
+ (pedwarn_with_file_and_line): Delete unused var I.
+
+Mon Feb 28 07:12:24 1994 Julian Bradfield (jcb@dcs.ed.ac.uk)
+
+ * m68k.md (call): Change HPUX_ASM case.
+ * m68k/hp320.h (READONLY_DATA_SECTION, LEGITIMATE_PIC_OPERAND_P):
+ Defined.
+ (FUNCTION_PROLOGUE): Emit PIC prologue.
+
+Mon Feb 28 06:21:18 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (eliminate_regs, case MULT): New case, to apply
+ distributive law, when needed.
+
+ * stor-layout.c (variable_size): If global_bindings_p < 0,
+ don't even make the SAVE_EXPR.
+
+ * reg-stack.c (reg_to_stack): Use GET_RTX_CLASS.
+ Clear LABEL_REFs here.
+ (find_blocks): Make algorithm identical to that inreg_to_stack.
+ Use GET_RTX_CLASS.
+ Don't clear LABEL_REFs here.
+ Build a list of labels referenced by other than jumps.
+ If computed jump, mark using that list and forced_labels.
+ (uses_reg_or_mem): New function, copied from flow.c.
+
+ * optabs.c (expand_binop): Use expand_divmod to do
+ integer division for DIV of MODE_COMPLEX_INT operands.
+
+Sun Feb 27 20:24:30 1994 Rob Austein (sra@epilogue.com)
+
+ * protoize.c (process_aux_info_file): Properly start over on
+ file error.
+
+Sun Feb 27 17:42:19 1994 Jim Wilson (wilson@cygnus.com)
+
+ * expmed.c (store_split_bit_field): If OP0 is a SUBREG, then
+ compute WORD from the base register, instead of from the SUBREG.
+ (extract_split_bit_field): Likewise.
+ (extract_bit_field): Sign-extend multiword bitfield if necessary.
+
+ * emit-rtl.c (subreg_realpart_p): New function.
+ * integrate.c (copy_rtx_and_substitute): Use subreg_realpart_p
+ instead of subreg_lowpart_p for CONCAT.
+
+ * c-pragma.c (HANDLE_PRAGMA_WEAK): Depend on ASM_OUTPUT_DEF not
+ SET_ASM_OP when defining it.
+ * dwarfout.c (ASM_OUTPUT_DEF): Delete definition.
+ * defaults.h (ASM_OUTPUT_DEF): Add it here.
+ * varasm.c (handle_pragma_weak): Depend on ASM_OUTPUT_DEF not
+ SET_ASM_OP when defining it. Use ASM_OUTPUT_DEF to output value
+ instead of SET_ASM_OP and explicit ASM_OUTPUT_LABELREF calls.
+
+ * calls.c (expand_call): Set nregs to -1 for BLKmode parameter,
+ then before move_block_to_reg call set it to the type size.
+
+ * reorg.c (try_merge_delay_insns): Success when SLOT_NUMBER ==
+ NUM_SLOTS not when NEXT_TO_MATCH == 0.
+
+ * expmed.c (store_fixed_bit_field): Adjust BITPOS so that it
+ fits inside MODE before adjusting OFFSET to get an aligned address.
+
+ * expmed.c (store_fixed_bit_field): Move float mode to integral
+ mode conversion from near end of function to top of function.
+
+ * c-typeck.c (process_init_element): Check for constructor_type
+ set before dereferencing it in the string cst code.
+
+Sun Feb 27 17:28:06 1994 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k/mot3300.h (TARGET_DEFAULT): Default to 68020-40.
+ (ASM_SPEC): New macro.
+ (FUNCTION_VALUE, FUNCTION_VALUE_REGNO_P): Return pointer in a0.
+ (*_LIBCALL): Use functions from sysV68's library.
+ (INIT_CUMULATIVE_ARGS, FUNCTION_ARG*): Some libcalls pass
+ parameters in registers.
+
+Sun Feb 27 15:20:35 1994 Ron Guilmette (rfg@netcom.com)
+
+ * flags.h (id_clash_len): Now unsigned.
+ (warn_larger_than, larger_than_size): New variables.
+ * toplev.c: Likewise.
+ (main): Support -Wlarger-than-NN.
+ * c-common.c (declare_hidden_char_array): Build new type if
+ warn_larger_than.
+ * c-decl.c (finish_decl, finish_function): Issue warning for
+ large objects, if requested.
+
+Sun Feb 27 10:50:50 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * integrate.c (expand_inline_function): Allow extra arguments
+ and force their evaluation for side-effects.
+
+ * local-alloc.c (qty_compare{,_1}): Give multi-word regs higher
+ priority, as stated in the comments.
+ * global.c (allocno_compare): Likewise.
+
+ * c-common.c (binary_op_error): Initialize OPNAME.
+ * c-decl.c (store_parm_decls): Initialize some vars.
+ * c-lex.c (readescape): Initialize FIRSTDIG.
+ * c-typeck.c (type_lists_compatible_p): Initialize NEWVAL.
+ (pop_init_level): Initialize SIZE.
+ (output_pending_init_elements): Initialize NEXTPOS_TREE.
+ * calls.c (expand_call): Initialize OLD_PENDING_ADJ.
+ * cccp.c (main, args case 'D'): Rewrite to avoid uninitialized var.
+ (main, args case 'A'): Delete unused var P1.
+ (rescan): Initialize STR.
+ (do_xifdef, do_endif): Initialize arg to skip_to_end_of_comment.
+ * expr.c (emit_move_insn): Delete unused vars.
+ (emit_move_insn_1): Don't set SUBMODE unless used.
+ (expand_builtin, case BUILT_IN_SAVEREGS): Clean up uses of VALREG
+ and SAVED_VALREG.
+ * final.c (final_scan_insn): Always set OPS and use alloca.
+ * gcc.c (execute): Initialize PROG.
+ * optabs.c (emit_float_lib_cmp): Init LIBFUNC; abort if not reset.
+ * stmt.c (expand_start_bindings): Properly set NOTE if bytecode.
+ * tree.c (make_node, stabilize_reference_1): Abort if unknown class.
+ * varasm.c (make_decl_rtl): Initialize NAME and abort if not reset.
+
+Sat Feb 26 13:09:37 1994 Doug Evans (dje@canuck.cygnus.com)
+
+ * mips-tfile.c (fatal, error): Don't use prototypes
+ ifndef HAVE_VPRINTF.
+
+ * fixincludes: Fix including of machine/r3_cpu.h and machine/r4_cpu.h
+ in machine/cpu.h on Ultrix 4.3.
+
+Sat Feb 26 07:14:04 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.h (MASK_NO_SUM_IN_TOC, TARGET_NO_SUM_IN_TOC): New macros.
+ (MASK_MINIMAL_TOC): Change bit value.
+ (TARGET_SWITCHES): Add -mno-sum-in-toc; use -mfull-toc instead
+ of -mnormal-toc, other minor changes.
+ * rs6000.md (movsi): If -mno-sum-in-toc, do addition of
+ symbol + const.
+
+ * jump.c (rtx_renumbered_equal_p): Fix bug in comparing SUBREGs
+ and REGs.
+ Two commutative operations are equal if the operands are in the
+ opposite order.
+
+ * function.c (fixup_var_refs_insn): Delete CLOBBER of VAR. If
+ VAR is being assigned into by a libcall sequence, remove the
+ libcall notes.
+
+ * cse.c (count_reg_usage, case SET): If SRC has side-effects,
+ count a usage of DEST in it.
+
+ * expr.c (store_expr): In promoted TARGET case, if EXP is a
+ volatile MEM and WANT_VALUE is nonzero, only reference the MEM once.
+ Return TARGET if it is a hard register; clean up return code.
+
+ * tree.c (substitute_in_type, case REAL_TYPE): Fix typo in
+ previous change.
+
+Fri Feb 25 06:42:20 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.c (substitute_in_type, case REAL_TYPE): Allow
+ TYPE_{MIN,MAX}_VALUE to be unassigned.
+
+ * combine.c (if_then_else_cond): Fix typo in narrowing of a SUBREG.
+
+ * alpha.md (neg[sd]f2): Use %R1 consistently.
+
+ * reload.c (find_reloads): Don't restrict class of multiword
+ operand to preferred class.
+ (find_reloads_address_1): Rework to use `switch'.
+ Reload a SUBREG of a hard reg as a unit.
+
+ * alpha.md (mul*): Disallow multiply by constant.
+
+Thu Feb 24 21:20:11 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixinc.sco: In <prototypes.h>, fix prototypes of getcwd and
+ link.
+
+Thu Feb 24 13:06:05 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config.sub: Don't force os=-hpux for hp9k2... and hp9k3...
+
+Thu Feb 24 11:17:11 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * configure (hppa*-*-osf*): Renamed from hppa*-*-mach. Target
+ filenames changed accordingly.
+
+Thu Feb 24 08:54:27 1994 Bob Miorelli (pwa-b!miorelli@uunet.uu.net)
+
+ * lynx.h (LIB_SPEC, LINK_SPEC): Add missing blanks.
+
+Thu Feb 24 08:42:07 1994 Ian Willis (ianw@sco.com)
+
+ * i386/sco.h, i386/scodbx.h (HANDLE_SYSV_PRAGMA): Define.
+
+Thu Feb 24 07:31:44 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * loop.c (maybe_eliminate_biv_1): Ignore GIV if it isn't
+ always computed.
+
+ * loop.c (scan_loop, strength_reduce): Go back to LOOP_TOP, not
+ its NEXT_INSN (in case SCAN_START == LOOP_TOP).
+
+Wed Feb 23 07:30:14 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (choose_reload_regs): If EQUIV is a SUBREG,
+ make a new REG.
+
+ * c-common.c (decl_attributes): Warn if attribute will be ignored.
+ Allow `noreturn', `volatile', and `const' on object of type
+ pointer to function.
+ Always give decl with error or warning.
+ * calls.c (expand_call): Functions may be const or volatile from
+ their type.
+
+Tue Feb 22 11:00:12 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: In #[el]if, put double underscores around M32,
+ m88k, pdp11, tower[_0-9]*, u370, u3b[0-9]*. From Kaveh R.
+ Ghazi.
+
+ * fixinc.sco: Fix prototype declaration of utime in <sys/times.h>;
+ it's broken in SCO 3.2v4.0.
+
+Tue Feb 22 08:14:28 1994 Matthias Pfaller (leo@marco.de)
+
+ * ns32k.h (FUNCTION_{PROLOGUE,EPILOGUE}): %$ is not supported
+ in fprintf.
+ (ADJSP): New macro to resolve %$.
+
+ * pc532.h (FRAME_POINTER_REQUIRED): Deleted.
+ * pc532-mach.h (FRAME_POINTER_REQUIRED): Moved to here.
+ (DEFAULT_PCC_STRUCT_RETURN): Deleted; redundant.
+
+ * ns32k.c (output_move_dconst): New function.
+ * ns32k.h (output_move_dconst): New declaration.
+ * ns32k.md: Added peephole patterns for stack adjustments followed
+ by QI/HI pushes.
+ (movsi): Use output_move_dconst for TARGET_32532.
+ (ffs): New patterns.
+
+ * ns32k.c (global_symbolic_reference_mentioned_p): New function.
+ (print_operand_address): Allow pc-relative mode not only
+ for {LABEL, SYMBOL}_REF but for CONST too. If compiling PIC,
+ transform "symbol+const(Rx)" to "const(symbol(sb))[Rx:b]".
+ * ns32k.h (OVERRIDE_OPTIONS): New macro to support PIC.
+ (FUNCTION_PROLOGUE): Save/Load sb when compiling PIC.
+ (FUNCTION_EPILOGUE): Restore sb when compiling PIC.
+ (INITIAL_FRAME_POINTER_OFFSET): Take saved sb into account when PIC.
+ (LEGITIMATE_CONSTANT_P, GO_IF_LEGITIMATE_ADDRESS):
+ Set current_function_uses_pic_offset_table if P uses a global
+ symbolic reference.
+ (ENCODE_SECTION_INFO): New macro to support PIC.
+
+Tue Feb 22 07:59:27 1994 Torbjorn Granlund (tege@cygnus.com)
+
+ * alpha.md (divsi3): Emit all RTL from RTL template.
+ (udivsi3, modsi3, umodsi3, divdi3, udivdi3, moddi3, umoddi3): Likewise.
+
+Tue Feb 22 07:21:31 1994 Samuel A. Figueroa (figueroa@cs.nyu.edu)
+
+ * i386/os2.h (LINK_SPEC, LIB_SPEC): New macros.
+ (PATH_SEPARATOR): Delete from here.
+ * i386/xm-os2.h (PATH_SEPARATOR): Add to here.
+
+Mon Feb 21 17:48:39 1994 Jim Wilson (wilson@cygnus.com)
+
+ * mips-tfile.c (fatal, error): Add ! HAVE_VPRINTF versions.
+
+Sun Feb 20 16:53:02 1994 Ted Lemon (mellon@pepper.ncd.com)
+
+ * mips.c (mips_move_2words): Check for TARGET_FLOAT64 != TARGET_64BIT.
+ (override_options): Don't override MASK_64BIT; don't allow -gp64
+ without -mips3.
+ * mips.h: Update mips3 comments.
+ (TARGET_OPTIONS): Add gp64 and gp32.
+ (SECONDARY_MEMORY_NEEDED): Don't allow fp<->gp copy if TARGET_FLOAT64
+ != TARGET_64BIT.
+ (CC1_SPEC): Generate correct -mfp* and -mgp* from -mips*
+ * mips.md (movdf_internal1): Disable if TARGET_FLOAT64 != TARGET_64BIT.
+ (movdf_internal1a): New pattern.
+ * osfrose.h (CC1_SPEC): Update as above.
+
+Sun Feb 20 15:40:45 1994 Jim Wilson (wilson@cygnus.com)
+
+ * sparc.h (HARD_REGNO_MODE_OK): Update comment.
+
+ * iris5.h (OBJECT_FORMAT_ELF): Add comments.
+ * configure (mips-sgi-irix5): Use collect.
+
+Sat Feb 19 14:25:41 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Permit upper case characters in typedef of size_t
+ in <sys/types.h>.
+
+Thu Feb 17 18:02:02 1994 Steve Chamberlain (sac@cygnus.com)
+
+ * c-parse.in (attrib): Handle attribute ((section ("string"))).
+ * c-common.c (decl_attributes): Decode section attribute.
+ * c-decl.c (duplicate_decls): Merge section name into new decl.
+ * tree.h (DECL_SECTION_NAME): New macro.
+ (struct tree_decl): New member `section_name'.
+ * varasm.c (IN_NAMED_SECTION): New macro.
+ (named_section): New function.
+ (enum in_section): New value `in_named'.
+ (in_named_name): New global.
+ (make_function_rtl, make_decl_rtl, output_constant_def): Fix comment
+ regarding ASM_OUTPUT_LABELREF.
+ (make_decl_rtl): Warn if section attribute used with uninitialized
+ variable declaration.
+ (assemble_start_function, assemble_variable, output_constant_def):
+ Change to named section if given.
+ * sparc/sysv4.h (ASM_OUTPUT_SECTION_NAME): Define.
+ * h8300/h8300.h (ASM_OUTPUT_SECTION_NAME): Define.
+ (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, SELECT_SECTION): Delete.
+ (ASM_OUTPUT_LABELREF): Call fprintf directly.
+ * h8300/h8300.c (asm_output_labelref): Delete.
+ * sh/sh.h (ASM_OUTPUT_SECTION_NAME): Define.
+ (ASM_OUTPUT_SECTION): Delete.
+
+Wed Feb 16 21:46:48 1994 Doug Evans (dje@cygnus.com)
+
+ * i960/i960.c (i960_function_prologue): Put register save area before
+ outgoing arg block.
+
+Wed Feb 16 15:33:26 1994 Jim Wilson (wilson@cygnus.com)
+
+ * expr.c (get_pointer_alignment): ALIGN is alignment of innermost
+ object, not the MAX of alignment of all objects.
+
+ * expr.c (group_insns): Delete.
+ (emit_move_insn_1, expand_expr): Use emit_no_conflict_block
+ instead of group_insns.
+
+ * final.c (end_final): Pass BIGGEST_ALIGNMENT not align to
+ ASM_OUTPUT_ALIGNED_LOCAL.
+
+ * alpha.c (alpha_builtin_saveregs): Don't include
+ current_function_arg_offset_rtx in argsize. Subtract 48 from arg
+ base address when no int registers stored on the stack.
+
+ * genattrtab.c (expand_units): Fix blockage calculation.
+
+ * loop.c (scan_loop): Add no_labels_between_p call to tests which
+ decide if an invariant reg can be safely replaced with its SET_SRC.
+
+Wed Feb 16 00:54:04 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Fix uses of new in Xm/Traversal.h. Found on
+ RS/6000.
+
+Tue Feb 15 19:44:41 1994 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * tree.def: Remove STRING_TYPE. No-one uses it.
+ * tree.h (struct tree_type): New bitfield string_flag.
+ * tree.h (TYPE_STRING_FLAG): New macro.
+ * tree.c, sparc.c: Remove unneeded tests for STRING_TYPE.
+ * expr.c (expand_builtin), dwarfout.c: Use TYPE_STRING_FLAG.
+ * dbxout.c (dbxout_type): For SET_TYPE and ARRAY_TYPE, use
+ TYPE_STRING_FLAG to emit appropriate indication.
+
+Tue Feb 15 19:36:45 1994 Stephen L Moshier (moshier@world.std.com)
+
+ * real.c (real_value_truncate): If requested mode is not
+ supported, return the unmodified input instead of aborting.
+
+Tue Feb 15 19:30:48 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_increment): Handle both BAD_SUBREG and POST.
+
+Tue Feb 15 11:09:08 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixinc.svr4: Make byteorder.h a here document, rather than
+ copying it from the source directory.
+ * byteorder.h: Removed.
+
+ * fixinc.sco: Don't install <sys/byteorder.h>.
+
+ * fixincludes: Removed references to GCCCMD. Instead of running
+ ${GCCCMD} to determine correct value for size_t, just fix the
+ header files to use __SIZE_TYPE__.
+ * Makefile.in (fixinc.ready): Removed target.
+ (stmp-fixinc): Don't depend upon fixinc.ready. Don't pass fourth
+ argument (was "`pwd`/xgcc -B`pwd`/") to $(FIXINCLUDES).
+ (clean): Don't remove fixinc.ready.
+
+ * rs6000.h (RS6000_ITRUNC, RS6000_UITRUNC): Define.
+ * rs6000.md (fix_truncdfsi2, fixuns_truncdfsi2): Use RS6000_ITRUNC
+ and RS6000_UITRUNC, not "itrunc" and "uitrunc".
+ * rs6000.c (output_prolog): Likewise.
+
+Mon Feb 14 19:19:06 1994 Jim Meyering (meyering@idefix.comco.com)
+
+ * gen-protos.c (main): Remove unused args in call to fprintf.
+ * bi-opcode.c (main): Move unused arg ++i out of call to printf.
+
+Mon Feb 14 19:14:55 1994 Stephen L Moshier (moshier@world.std.com)
+
+ * real.c (eifrac): If FIXUNS_TRUNC_LIKE_FIX_TRUNC,
+ convert on positive overflow as if unsigned.
+
+Mon Feb 14 19:13:15 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * toplev.c (lang_options): Add -W{no,}extern-inline.
+
+ * gcc.c (default_compilers): Generate and use .ii files in the
+ intermediate stage of compiling C++ source.
+
+Mon Feb 14 19:08:37 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * local-alloc.c (optimize_reg_copy): A register that dies in
+ a CALL_INSN doesn't cross that call.
+
+ * combine.c (simplify_shift_const, case AND): When remaking
+ binary operation, do it in SHIFT_MODE.
+
+Mon Feb 14 11:27:35 1994 Frederic Pierresteguy (F.Pierresteguy@frcl.bull.fr)
+
+ * config.sub: Add case for Bull dpx20.
+
+Sun Feb 13 23:50:15 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * rs6000.c (output_epilog): Don't output a traceback table if
+ flag_inhibit_size_directive is set.
+
+Sun Feb 13 17:47:14 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.c (rs6000_adjust_cost): Renamed from ppc_adjust_cost.
+ * rs6000.h (ADJUST_COST): Call rs6000_adjust_cost.
+
+Sun Feb 13 17:07:02 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * rs6000.h (ASM_OUTPUT_INTERNAL_LABEL_PREFIX): Define.
+ (ASM_OUTPUT_ADDR_VEC_ELT): Use ASM_GENERATE_INTERNAL_LABEL instead
+ of assuming the default format for internal labels.
+ (ASM_OUTPUT_ADDR_DIFF_ELT): Likewise.
+ * rs6000.c (output_prolog, output_epilog): Likewise.
+ (output_function_profiler): Likewise.
+
+ * fixincludes: Fix conflicts with C++ reserved words in
+ X11/ShellP.h, Xm/Traversal.h, and Xm/BaseClassI.h. Found on
+ RS/6000.
+
+Sun Feb 13 13:40:17 1994 Michael Meissner (meissner@osf.org)
+
+ * halfpic.h (toplevel): Include stdio.h if it hasn't been included
+ already, so that STDIO_PROTO can be defined. Otherwise,
+ asm_fprintf gets a prototype mismatch.
+
+Sun Feb 13 02:36:30 1994 Doug Evans (dje@cygnus.com)
+
+ * gcc.c (fatal, error): Fix declarations (dependent on HAVE_VPRINTF)..
+
+Sat Feb 12 19:46:29 1994 Michael Meissner (meissner@osf.org)
+
+ * configure (386-*-osfrose): Use i386/xm-osf.h as xm file.
+
+ * i386/xm-osf.h (new file): Define HAVE_PUTENV and HAVE_VPRINTF.
+
+Sat Feb 12 08:51:02 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * calls.c (expand_call): When preserving subexpressions, don't put
+ expensive arguments directly into hard registers.
+
+ * combine.c (REVERSIBLE_CC_MODE): Add default definition.
+ (reversible_comparison_p): REVERSIBLE_CC_MODE.
+ * sparc.h (REVERSIBLE_CC_MODE): Define.
+
+ * combine.c (subst): Always simplify true and false arms if
+ if_then_else_cond succeeds.
+ (subst, case IF_THEN_ELSE): More canonicalizations; delete some
+ redundant tests.
+ (if_then_else_cond): Canonicalize (OP (mult COMP A) (mult REV_COMP B)).
+ (gen_binary): Simplify (REL_OP (compare X Y) 0) here.
+
+Sat Feb 12 07:41:55 1994 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * cse.c (cse_main): Conditionalize special treatment of
+ PIC_OFFSET_TABLE_REGNUM on PIC_OFFSET_TABLE_REG_CALL_CLOBBERED.
+
+ * expmed.c (expand_shift): Truncate immediate count if
+ SHIFT_COUNT_TRUNCATED.
+
+Fri Feb 11 18:49:42 1994 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * dbxout.c (dbxout_type_fields): Emit anonymous fields
+ just like other fields, but with an empty name. Don't
+ treat the fields as belonging to the containing object.
+
+Fri Feb 11 20:08:25 1994 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * rs6000.md (definition of "type"): Add "jmpreg" as new type.
+ Change "mtlr" to "mtjmpr".
+ (movsi matcher): Pair `c' and `l' in the same constraint
+ alternative.
+ (return): Set attribute to "jmpreg".
+ (indirect_jump): Likewise.
+ * rs6000.h (ADJUST_COST): Call ppc_adjust_cost.
+ * rs6000.c (ppc_adjust_cost): New function. Adjust for TYPE_JMPREG.
+
+Fri Feb 11 17:39:42 1994 Michael Collison (collison@osf.org)
+
+ * reload1.c (gen_input_reload): If reg-reg add is not valid,
+ try copying reg-reg and adding reg-int.
+
+Fri Feb 11 17:36:11 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * expr.c (expand_builtin): If the builtin was called as
+ __builtin_whatever, pretend we're optimizing.
+
+Fri Feb 11 17:30:28 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * jump.c (mark_jump_label, case LABEL_REF): Update REG_LABEL
+ note if changing target of jump.
+
+ * regclass.c (record_reg_classes): Fix logic in case of matching
+ operands.
+
+Fri Feb 11 16:03:21 1994 Doug Evans (dje@cygnus.com)
+
+ * tree.h (VPROTO, VA_START): Avoid duplicate definition.
+ * rtl.h (VPROTO, VA_START): Likewise.
+ * gcc.c (VPROTO, VA_START): Define.
+ (PROTO): Define.
+ Add prototypes for static functions.
+ * g++.c (VPROTO, VA_START): Define.
+
+ * gstdarg.h: Don't define _STDARG_H/etc. if not gcc,
+ it may collide with system's header.
+
+Thu Feb 10 19:26:37 1994 Chip Salzenberg (chip@fin.uucp)
+
+ * c-typeck.c (c_expand_return): Do not warn about returning the
+ address of a locally declared extern variable.
+
+Thu Feb 10 15:57:06 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * final.c (IS_ASM_LOGICAL_LINE_SEPARATOR): Provide default
+ definition.
+ (asm_insn_count): Use IS_ASM_LOGICAL_LINE_SEPARATOR rather
+ than assuming the logical line separator is ';'.
+
+ * pa.h (IS_ASM_LOGICAL_LINE_SEPARATOR): Define.
+
+Thu Feb 10 08:49:39 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload.h (reload_secondary_{reload,icode}): Deleted.
+ (reload_secondary_{in,out}_{reload,icode}): New variables.
+ * reload.c: Likewise.
+ (MATCHES, MERGABLE_RELOADS, MERGE_TO_OTHER): Move to front of file.
+ (push_secondary_reload): New function, from find_secondary_reload.
+ (find_secondary_reload): Deleted.
+ (push_reload): Call push_secondary_reload.
+ (combine_reloads): Use new vars for secondary reloads and icodes.
+ * reload1.c (emit_reload_insns): Use new vars for secondary
+ reloads and icodes.
+
+ * explow.c (memory_address): Fix error in last change.
+
+Thu Feb 10 08:13:49 1994 Stephen R. van den Berg (berg@pool.informatik.rwth-aachen.de)
+
+ * rtl.h, tree.h, mips-tfile.c (VPROTO): New macro.
+ * combine.c, expr.h, genattrtab.c, output.h, rtl.h, tree.h, toplev.c:
+ Use PROTO for varargs functions.
+ * genattrtab.c (attr_printf): Only declare when defined.
+ * bc-emit.c, calls.c, combine.c, emit-rtl.c, final.c, g++.c:
+ If __STDC__, include gstdarg and use ANSI form of varargs.
+ * gcc.c, genattrtab.c, mips-tfile.c, tree.c, toplev.c: Likewise.
+
+Wed Feb 9 09:53:54 1994 Michael Meissner (meissner@osf.org)
+
+ * i386/osfrose.h (SUBTARGET_SWITCHES): Add -mmcount-ptr as a
+ synonym for -mno-mcount.
+ (CC1_SPEC): If -melf, pass -mmcount-ptr by default.
+
+ * i386/osfelf.h (CC1_SPEC): Unless -mrose, pass -mmcount-ptr by
+ default.
+
+ * configure (alpha-dec-osf): Use osf2.h and gdb-osf2.h on OSF/1 2.0 and
+ beyond.
+
+ * alpha/osf2.h, alpha/gdb-osf2.h (new files): Support for OSF/1 2.0
+ that uses 4 byte wchar_t's instead of 2 byte.
+
+Tue Feb 8 20:18:12 1994 Paul Eggert (eggert@twinsun.com)
+
+ * real.c (earith, ereal_negate, eneg, eisneg, enan, emovo, esub):
+ Propagate the sign of NaNs, so that e.g. -(NaN) evaluates to -NaN.
+ (eadd, ediv, emul, eremain, e53toe, e64toe, e113toe, e24toe, esqrt):
+ Likewise.
+ (make_nan): New arg specifies sign of NaN. All callers changed.
+ (eiisneg): New function.
+ (esqrt): Compute sqrt(-0.0) to be -0.0, not 0.0.
+
+Tue Feb 8 19:23:41 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * toplev.c: Include ctype.h.
+
+ * tree.c (int_fits_type_p): Properly handle case of variable bounds
+ for types.
+
+Tue Feb 8 19:20:04 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * fixproto: Add popen and pclose to required list for stdio.h.
+ Add putenv to required list for stdlib.h.
+ Add getopt to required list for unistd.h.
+
+ * fixproto: Append "#include <stdlib.h>" to assert.h if it uses
+ exit or abort.
+
+ * libgcc2.c (__builtin_new): If __new_handler returns, keep trying
+ to allocate the memory.
+ (__default_new_handler): Add __ to beginning of name to avoid
+ namespace clashing.
+
+Tue Feb 8 18:50:07 1994 Jim Wilson (wilson@cygnus.com)
+
+ * i386/x-aix (FIXINCLUDES): Delete definition.
+ * configure (i[34]86-ibm-aix): Delete definition of fixincludes.
+ * fixincludes: When edit size_t typedef, modify sed pattern to
+ avoid matching typedef uses of size_t. Likewise when adding
+ #ifndef GCC_SIZE_T.
+ * fixinc.ps2: Delete file.
+
+ * mips.h (ASM_OUTPUT_LOCAL, ASM_OUTPUT_COMMON): Use SIZE not ROUNDED.
+
+ * iris5.h (SIZE_TYPE, PTRDIFF_TYPE): Don't redefine.
+ (MAX_WCHAR_TYPE_SIZE): Define.
+
+ * mips-tdump.c (print_file_desc): Correct printf format.
+ (main): Likewise.
+
+ * flow.c (find_basic_blocks): Also look for REG_LABEL notes on first
+ instruction of each basic block.
+
+ * sparc.c (save_regs, restore_regs): Use __inline__ not inline.
+
+Tue Feb 8 10:13:54 1994 Doug Evans (dje@cygnus.com)
+
+ * toplev.c (open_dump_file): New function.
+ (compile_file): Open dump files with it. Remove dump_base_name_length.
+
+Sun Feb 6 15:52:48 1994 Jim Wilson (wilson@cygnus.com)
+
+ * collect2.c (sys_siglist): Don't declare if
+ DONT_DECLARE_SYS_SIGLIST is defined.
+ * mips/xm-sysv4.h (DONT_DECLARE_SYS_SIGLIST): Define.
+ * sparc/xm-sol2.h (NO_SYS_SIGLIST): Delete.
+ (DONT_DECLARE_SYS_SIGLIST): Define.
+ * mips-tfile.c (sys_siglist): Don't declare if NO_SYS_SIGLIST or
+ DONT_DECLARE_SYS_SIGLIST are defined.
+ (catch_signal): Add code for NO_SYS_SIGLIST case.
+
+ * sched.c (reg_pending_sets, reg_pending_sets_all): New variables.
+ (sched_analyze_1): Set reg_pending_sets instead of reg_last_sets.
+ (sched_analyze_2): Set reg_pending_sets or reg_pending_sets_all
+ instead of reg_last_sets.
+ (sched_analyze_insn): Use reg_pending_sets and
+ reg_pending_sets_all to set reg_last_sets. Set
+ reg_pending_sets_all instead of reg_last_sets.
+ (schedule_block): Allocate and clear reg_pending_sets.
+
+ * sparc.md (movdi): Handle 'U' and 'T' constraints.
+
+ * m68k/hp320.h (FUNCTION_PROFILER): Concatenate strings to avoid
+ use of ANSI C specific feature.
+
+ * mips.c (function_arg): When soft-float, don't add bias for
+ second SFmode argument.
+
+ * iris5.h (CPP_PREDEFINES): Add _MIPSEB.
+
+Sun Feb 6 08:40:46 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (struct temp_slot): Add new field, ADDRESS.
+ (assign_stack_temp): Initialize it to zero.
+ (find_temp_slot_from_address, update_temp_slot_address): New functions.
+ (preserve_temp_slots): Use find_temp_slot_from_address.
+ * explow.c (memory_address): Call update_temp_slot_address on
+ new and old address.
+
+ * cse.c (canon_hash, case LABEL_REF, SYMBOL_REF): Avoid warning
+ on 64-bit machines.
+
+Sat Feb 5 17:55:52 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * configure (i[34]86-sequent-ptx): Alias for i[34]86-sequent-sysv*.
+
+Sat Feb 5 11:46:00 1994 Steve Chamberlain (sac@cygnus.com)
+
+ * sh.c (hard_regno_mode_ok): New vector.
+ (output_stack_adjust): Always adjust stack with an addsi insn.
+ (calc_live_regs): Support alernative calling conventions.
+ (print_operand): Delete obsolete cases.
+ (synth_constant): New function to generate constants by
+ arithmetic means.
+ (expand_block_move): Use new block move support routines.
+ (prepare_move_operands): Use synth_constant when possible, try
+ and geneate splits for DI moves.
+ (output_jump_label_table, dump_table, output_far_jump,
+ prepare_split_double_ops,from_compare, equality_operator,
+ handle_pragma, expand_acall): New functions.
+ (prepare_scc_operands): When condition isn't supported swap args
+ and alter test.
+ (output_move_double): Generate better code for constant moves.
+ (output_shift): Cope with negative shifts.
+ (byte_index_operand, pop_operand, painful_immediate_operand,
+ ok_shift_value, hard_immediate_operand, adjust_insn_length,
+ dump_constants, output_movepcrel): Deleted.
+ (final_prescan_insn): Now only prints pc.
+ (shiftcosts, andcosts, multcosts): Work out some insn costs.
+ (gen_ashift, gen_shifty): Emit code for shift operations.
+ (fixit, hi_const, find_barrier, broken_move,
+ machine_dependent_reorg): New functions to fix move instructions
+ with out-of-range literals.
+
+ * sh.h (OPTIMIZATION_OPTIONS, CONDITIONAL_REGISTER_USAGE): New.
+ (TARGET_SWITCHES): Extra -m options for experimental calling
+ conventions.
+ (HARD_REGNO_MODE_OK): Use hard_regno_mode_ok vector rather than
+ inline code.
+ (FRAME_POINTER_REQUIRED): Always 0.
+ (reg_class, REG_CLASS_CONTENTS, REG_CLASS_NAMES): Change order
+ of classes.
+ (FRAME_GROWS_DOWNWARD): Don't define.
+ (FUNCTION_ARG_PARTIAL_NREGS): Always 0.
+ (MAX_REGS_PER_ADDRESS): Is 2.
+ (GO_IF_LEGITIMATE_INDEX): Split up into smaller macros.
+ (CASE_VECTOR_MODE, CASE_VECTOR_PC_RELATIVE): Jump tables are of
+ switchable size and always pc relative.
+ (RTX_COSTS): Use new andcosts, multcosts and shiftcosts functions.
+ (INSN_SETS_ARE_DELAYED, INSN_REFERENCES_ARE_DELAYED): New.
+ (ASM_OUTPUT_CASE_LABEL, ASM_OUTPUT_ADDR_DIF_ELT): Now switches are
+ pc relative.
+
+ * sh.md (define_attr length): Calculate lengths more accurately.
+ (define_attr "rte", "hit_stack"): New.
+ (cmp*): Allow all conditions by swapping args.
+ (addc, adddi3, and_ff, casesi, casesi_worker, peepholes): New.
+ (div*, mul*): Use library routines with special calling
+ conventions.
+ (shifts): Generate only legal shift insn sequences.
+ (extend*): Get clobbers right, extra constraints.
+ (mov*): Greatly simplified.
+ (b*): Use from_compare function.
+ (return, rte): Understand pragma interrupt.
+ (anddi3, iordi3, xordi3): Deleted.
+ (consttable_2,consttable_4, consttable_8, align_2, align_4,
+ consttable_end, movesi_k, movhi_k, movdi_k): Support for inline
+ literal tables.
+ (movstrsi, block_move_real, block_lump_real): Use new block move
+ routines.
+
+ * toplev.c (rest_of_compilation): Invoke MACHINE_DEPENDENT_REORG if
+ defined.
+
+Sat Feb 5 08:05:58 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * cse.c (memory_extend_rtx): New variable.
+ (cse_main): Initialize it.
+ (cse_insn): See if we have already loaded a MEM in a wider mode.
+
+Sat Feb 5 07:05:29 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * fixproto: Add lstat to required_list for sys/stat.h
+
+Fri Feb 4 12:14:49 1994 Stan Cox (coxs@dg-rtp.dg.com)
+
+ * m88k.h: (TARGET_SWITCHES) Assume -muse-div-instruction
+ -mno-check-zero-division for -m88110. (CONSTANT_ADDRESS_P) Fix a
+ -fpic reload bug. (DONT_REDUCE_ADDR) Don't strength reduce so
+ m88k scaled loads/stores will be used. (enum processor_type) Use
+ instead of attr_cpu, which is not always defined.
+
+ * m88k.md: (movdf) Split movdf so it can go into a branch delay slot
+
+ * m88k.c: (m88k_gp_threshold) Make -mshort-data- unsigned.
+ (block_move_*) Copy MEM_IN_STRUCT_P for block move cases.
+
+ * dgux.h: (TARGET_SVR4) Use -msvr4/-msvr3 instead of
+ -mversion-03.00 to choose assembler syntax.
+
+Fri Feb 4 08:14:31 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (gen_lowpart_common, gen_highpart): Test *_BIG_ENDIAN
+ with "if", not #if and fix one erroneous test.
+
+Thu Feb 3 17:15:07 1994 Jim Wilson (wilson@cygnus.com)
+
+ * expmed.c (store_bit_field, insv case): Don't use PUT_MODE on
+ xop0 when it is a SUBREG, generate a new SUBREG.
+
+Thu Feb 3 13:24:14 1994 Alex Zatsman (alex.zatsman@analog.com)
+
+ * hard-reg-set.h (GO_IF_HARD_REG_EQUAL): Fix typo.
+
+Thu Feb 3 07:45:45 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * flow.c: Add prototypes for static functions.
+ (uses_reg_or_mem): New function.
+ (find_basic_block): Some cleanups; eliminate shadowed variables.
+ Look for REG_LABEL notes in all insns and allow for multiple such.
+ Don't delete labels in forced_labels.
+ Generalize test for computed jumps.
+ (find_auto_inc): OFFSET should be HOST_WIDE_INT.
+ (mark_used_regs): Put decls of parms in parm order.
+ (find_use_as_address): PLUSCONST should be HOST_WIDE_INT.
+
+ * reload1.c (eliminate_regs, case INSN_LIST): Properly remake
+ list when we change something further on.
+
+Wed Feb 2 21:25:03 1994 Jim Wilson (wilson@cygnus.com)
+
+ * c-typeck.c (signed_or_unsigned_type): Check for any
+ INTEGRAL_TYPE_P not just INTEGER_TYPE.
+
+ * Makefile.in (enquire.o): Depend on stmp-int-hdrs.
+
+ * mips.h (CPP_SPEC): Define __PTRDIFF_TYPE__ not __PTRDIFF_TYPE.
+
+ * reorg.c (fill_simple_delay_slots): When fill epilogue delay
+ slot, set needed to end_of_function_needs instead of clearing it.
+
+Wed Feb 2 15:20:38 1994 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * tree.c (FILE_FUNCTION_FORMAT): Fix typo if neither dot nor dollar
+ in label.
+
+Wed Feb 2 14:38:56 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (const_binop, COMPLEX_TYPE, case RDIV_EXPR):
+ If complex integer, use TRUNC_DIV_EXPR for inner division.
+
+ * c-tree.h: Re-order declarations for functions in c-typeck.c to
+ agree with order there; add some missing declarations.
+ * c-typeck.c: Add prototypes for static functions; delete
+ forward declarations of non-static functions.
+ (initializer_constant_valid_p): Add missing parameter to
+ recursive call.
+
+Wed Feb 2 14:22:05 1994 Kaveh R. Ghazi (ghazi@noc.rutgers.edu)
+
+ * objc/Makefile (SUBDIR_INCLUDES): Add -I for include directory.
+
+Wed Feb 2 13:24:23 1994 Chip Salzenberg (chip@fin.uucp)
+
+ * expmed.c (synth_mult): Delay allocation of algorithm structures
+ until they are needed. Reorder early-exit tests to avoid comparing
+ value that is not yet set.
+
+Tue Feb 1 18:56:19 1994 Chip Salzenberg (chip@fin.uucp)
+
+ * c-common.c (decl_attributes): Allow format attributes
+ on old style (non-prototype) function declarations.
+
+Tue Feb 1 11:25:40 1994 Stephen R. van den Berg (berg@pool.informatik.rwth-aachen.de)
+
+ * tree.c (build_type_variant): Simplify by using build_type_copy.
+
+ * c-decl.c (grokdeclarator): `volatile' function warning
+ corrected to read `noreturn' function warning.
+ (finish_function): Likewise.
+ * cp-decl.c (finish_function): Likewise.
+ * c-typeck.c, cp-typeck.c (c_expand_return): Likewise.
+ * toplev.c (rest_of_compilation): Likewise.
+
+Tue Feb 1 06:06:22 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (make_extraction): Don't make an extraction that
+ has the potential of crossing a boundary.
+
+ * regclass.c: Add prototypes for static functions.
+ (auto_inc_dec_reg_p): New function.
+ (regclass): Call it to allow a register needing a secondary reload
+ to be used for inc/dec if it is already valid for it.
+
+ * gcc.c (default_compilers, @ada): Don't duplicate "-gnat" parameters;
+ pass -quiet unless -Q is specified.
+
+ * alpha.md (minsf3, maxdf3, mindf3): Properly insert constant of
+ zero into patterns.
+
+Mon Jan 31 20:55:41 1994 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
+
+ * i960.c (i960_function_name_declare): Handle names that start
+ with '*'.
+
+Mon Jan 31 19:13:59 1994 Chip Salzenberg (chip@fin.uucp)
+
+ Unify error and message functions:
+ * toplev.c: Include "gvarargs.h".
+ (fatal_insn_not_found): Omit superfluous argument to error.
+ (vmessage, v_message_with_file_and_line): New functions.
+ (v_message_with_decl, file_and_line_for_asm): Likewise.
+ (v_error_with_file_and_line, v_error_with_decl): Likewise.
+ (v_error_for_asm, verror, vfatal): Likewise.
+ (v_warning_with_file_and_line, v_warning_with_decl): Likewise.
+ (v_warning_for_asm, vwarning): Likewise.
+ (error_with_file_and_line, error_with_decl, error, fatal): Now just
+ wrappers for above functions.
+ (error_for_asm, warning_with_file_and_line): Likewise.
+ (warning_with_decl, warning_for_asm, warning): Likewise.
+
+Mon Jan 31 19:03:16 1994 Jim Wilson (wilson@cygnus.com)
+
+ * sched.c (sched_analyze_insn): Add use dependencies for registers
+ mentioned in REG_DEAD notes.
+
+ * configure (mips-tandem-sysv4*): Add.
+ * mips/svr4-t.h, mips/svr4-t-gdb.h: New files.
+
+ * sched.c (priority): Call insn_cost() for anti- and output-
+ dependencies as well as for true dependencies.
+
+ * cse.c (find_best_addr): Limit number of cse_gen_binary calls to
+ 20 per iteration.
+
+Mon Jan 31 18:08:27 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * real.c (emovo): Use separate variable for loop index.
+
+ * fold-const.c (operand_equal_for_comparison_p): Declare
+ correct_width as unsigned.
+
+ * configure (m68k-wrs-vxworks): Fix typo in name.
+
+ * Makefile.in (cross-test, enquire, protoize, unprotoize):
+ Specify program name in -o to force into build directory.
+
+ * i386/sol2.h (CPP_SPEC): Add -Dsun.
+
+ * alpha/gdb.h: Renamed from alpha-gdb.h.
+ * alpha/gdb-osf12.h: New file.
+ * configure (alpha): Reflect new name for files and support
+ gdb with OSF V1.2.
+
+Mon Jan 31 15:18:40 1994 Jim Wilson (wilson@cygnus.com)
+
+ * bc-emit.c (class_narrowest_mode, byte_mode, word_mode): Add
+ extern to declaration.
+ * expr.c (local_vars_size): Likewise.
+
+ * genattrtab.c (expand_units): When calculate BLOCKAGE, reverse
+ terms to POS_MINUS_OP. Clarify comment before BLOCKAGE computation.
+ (write_complex_function): Use EXECUTING_INSN for first switch, and
+ CANDIDATE_INSN for second switch.
+
+ * sparc/lite.h (TARGET_DEFFAULT): Add -mapp-regs.
+ * sparc/sparc.h (TARGET_APP_REGS): Define.
+ (TARGET_SWITCHES): Add new options -mapp-regs and -mno-app-regs.
+ (TARGET_DEFAULT): Add -mapp-regs.
+ (CONDITIONAL_REGISTER_USAGE): Make %g2, %g3, and %g4 be fixed when
+ the -mno-app-regs option is used.
+ * sparc/sun4os3.h (TARGET_DEFAULT): Delete.
+
+ * svr4-5.h (STARTFILE_SPEC): Include values-X[cta].o file in link.
+
+ * xcoffout.c (ASM_OUTPUT_LFE): Output absolute line number not
+ relative line number.
+
+Fri Jan 28 19:20:07 1994 Michael Collison (collison@osf.org)
+
+ * flow.c (find_auto_inc): Check for increment using single_set.
+
+Fri Jan 28 19:11:17 1994 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.md (fsel): Remove insns with record bit set.
+
+Thu Jan 27 18:22:25 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.c (output_prolog): Fix typo in previous change.
+
+Wed Jan 26 18:19:51 1994 Per Bothner (bothner@sugar-bombs.gnu.ai.mit.edu)
+
+ * c-typeck.c (initializer_constant_valid_p): Make non-static.
+ (It's used by the Chill back-end.)
+
+Wed Jan 26 13:54:40 1994 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
+
+ * sched.c (attach_deaths_insn): Add REG_DEAD notes to CLOBBER if
+ it is for a MEM.
+
+Tue Jan 25 08:30:11 1994 Chip Salzenberg (chip@fin.uucp)
+
+ * cse.c (HASHBITS): Removed.
+ (HASH, struct set, canon_hash, safe_hash, remove_from_table):
+ Generate and use unsigned hash values, to avoid potential trouble
+ with signed shift/overflow.
+ Also name variables consistently: "hash", not "hash_code".
+ (lookup, lookup_for_remove, insert, merge_equiv_classes): Likewise.
+ (invalidate, rehash_using_reg, invalidate_for_call): Likewise.
+ (find_best_addr, record_jump_cond, cse_insn): Likewise.
+
+Mon Jan 24 18:59:59 1994 Jim Wilson (wilson@cygnus.com)
+
+ * expmed.c (store_split_bit_field): For BYTES_BIG_ENDIAN, only
+ pad on left if value not in memory. Reject gen_lowpart_common
+ output if it returns the input value.
+
+ * unroll.c (copy_loop_body): When delete simplified condjump,
+ protect the label, so that it doesn't get deleted also.
+
+ * toplev.c (compile_file): If yyparse returns an error, pop all
+ pending binding levels.
+
+Mon Jan 24 18:30:53 1994 Doug Evans (dje@cygnus.com)
+
+ * objc/Object.h (streamVersion, read, write): #ifndef out for the
+ alpha since TypedStream not supported there yet.
+ * objc/Object.m (streamVersion, read, write): Ditto.
+
+Mon Jan 24 17:40:56 1994 Jim Wilson (wilson@cygnus.com)
+
+ * sparc.c (sparc_address_cost): Delete.
+ * sparc.h (ADDRESS_COST): Define to 1.
+
+ * bsd-5.h, mips-5.h, svr3-5.h, svr4-5.h (ASM_OUTPUT_NEWLINE):
+ Define new macro.
+ * mips.h (ASM_OUTPUT_NEWLINE): New default for new macro.
+ (ASM_OUTPUT_ASCII): Use ASM_OUTPUT_NEWLINE.
+
+ * sparc.h (ASM_OUTPUT_COMMON): Don't output .global. Use SIZE not
+ ROUNDED.
+ (ASM_OUTPUT_LOCAL): Delete.
+ (ASM_OUTPUT_ALIGNED_LOCAL): Define.
+
+Sun Jan 23 18:57:01 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * expr.c (do_jump_for_compare): Initialize JUMP_LABEL for the branch
+ insn before trying to invert it.
+
+Sun Jan 23 18:40:23 1994 Samuel A. Figueroa (figueroa@cs.nyu.edu)
+
+ * i386/os2.h (PATH_SEPARATOR): New macro.
+ * i386/gas.h (ASM_FILE_START): Delete; identical to one in bsd.h,
+ which is included.
+
+Sun Jan 23 18:21:23 1994 Randy S. Welch (randy@tss.com)
+
+ * m68k/plexus.h: Assume GAS 2.x used and add support for debugging.
+
+Sun Jan 23 06:19:28 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload.c (find_reloads): Properly test for output operand
+ when changing RELOAD_FOR_OUTPUT_ADDRESS to RELOAD_FOR_INPUT_ADDRESS.
+
+ * combine.c (subst, case SUBREG): Handle paradoxical SUBREG of
+ constant.
+ (IF_THEN_ELSE): Add missing "else" and check for comparison
+ before calling reversible_comparison_p.
+
+ * c-typeck.c (output_init_elements): Use FIELD instead
+ of constructor_fields when doing alignment and sizing.
+ (output_pending_init_elements): Don't blow up when writing
+ other than first field put haven't written anything yet.
+ Update constructor_bit_index when we emit a skip.
+
+ * toplev.c (rest_of_compilation): Defer compilation of function
+ that were specified as inline, whether or not they actually were
+ inlined.
+
+ * alpha.h (OBJECT_FORMAT_COFF, EXTENDED_COFF, NM_FLAGS): Define.
+ * x-alpha: New file.
+
+ * combine.c (simplify_comparison): Can remove NOT on both operands
+ if we swap comparison code.
+
+ * rs6000.md: Insert some missing blank lines.
+
+ * alpha.c (output_{pro,epi}log): Use assemble_name to output
+ alpha_function_name.
+
+ * combine.c (simplify_comparison): Fix typos in last change.
+
+Sun Jan 23 05:59:31 1994 Per Bothner (bothner@cygnus.com)
+
+ * c-typeck.c (really_start_incremental_init): Save current elements
+ instead of clearing them.
+
+Sat Jan 22 15:50:29 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-typeck.c (c_expand_return): Issue a warning if returning
+ address of non-static local object.
+
+ * combine.c (if_then_else_cond): Don't do anything with COMPARE.
+ (simplify_comparison): Strip SIGN_EXTEND, NOT, or NEG when
+ both operands have it.
+
+ * combine.c (num_sign_bit_copies): Ifndef WORD_REGISTER_OPERATIONS,
+ ensure we don't do the wrong thing if X is narrower than MODE.
+
+Thu Jan 20 01:06:23 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (ASM_OUTPUT_SOURCE_LINE): Make the first source line stab
+ for each procedure special to avoid the need for nasty hacks in GAS.
+
+ * pa.md (iorscc): Fix typo.
+
+Wed Jan 19 19:35:37 1994 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * pa.h (ASM_GLOBALIZE_LABEL): Don't globalize function labels here.
+
+Mon Jan 17 16:38:16 1994 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
+
+ * xcoffout.c (xcoffout_begin_block): Don't emit a .bb for the
+ function level scope.
+ (xcoffout_end_block): Don't emit a .eb for the function level
+ scope.
+
+Sun Jan 16 14:29:31 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config.sub: Alphabetize the list of machine-name aliases.
+ Add nh3000 and nh[45]000.
+ Delete duplicate clauses for hp9k2... and hp9k31...
+
+Sat Jan 15 18:06:45 1994 Torbjorn Granlund (tege@blues.cygnus.com)
+
+ * config/sparc/sparc.md (smulsi3_highpart): New pattern.
+ (umulsi3_highpart): New pattern.
+ * config/mips/mips.md (smulsi3_highpart): New pattern.
+ (umulsi3_highpart): New pattern.
+
+Thu Jan 13 18:54:27 1994 Jim Wilson (wilson@cygnus.com)
+
+ * iris3.h (CPP_SPEC): Define __SIZE_TYPE__, __PTRDIFF_TYPE__, and
+ __mips.
+ (SIZE_TYPE, PTRDIFF_TYPE): Delete.
+ * mips.c (dfhigh, dflow, sfhigh, sflow): New variables.
+ (mips_sw_reg_names): Consistently use $ as name prefix.
+ (large_int): Handle 64 bit constants.
+ (reg_or_0_operand, mips_const_double_ok): Don't examine
+ CONST_DOUBLE internals.
+ (mips_const_double_ok): Use REAL_VALUE_* macros.
+ (simple_memory_operand): Add 64 bit support. Only test
+ TARGET_GP_OPT to determine if doing gp optimizations. Pass
+ address not MEM to eliminate_constant_term. Use SMALL_INT.
+ (mips_fill_delay_slot): Add 64 bit support.
+ (mips_move_1word): Add 64 bit support. Don't examine CONST_DOUBLE
+ internals.
+ (mips_move_2words): Likewise.
+ (mips_address_cost): Pass address not MEM to
+ eliminate_constant_term. Use SMALL_INT.
+ (gen_int_relational): New variable mode. Add 64 bit support.
+ (gen_conditional_branch): Add 64 bit support.
+ (block_move_load_store, block_move_loop, block_move_call,
+ expand_block_move, output_block_move, function_arg_advance,
+ function_arg, function_arg_partial_nregs): Likewise.
+ (override_options): Clear MASK_GPOPT if threshold is zero or
+ negative. Set MASK_GPOPT if optimizing. Set mips_isa from -misa=
+ option, else from MIPS_ISA_DEFAULT if defined, else to 1. Make
+ default cpu depend on isa. Add cpus r4400, r4600, orion. Rewrite
+ TARGET_NAME_REGS support. Initialize dfhigh, dflow, sfhigh,
+ sflow. Add 64 bit support.
+ (print_operand): Use REAL_VALUE_* macros.
+ (mips_output_external): Don't depend on mips_section_threshold.
+ (make_temp_file): Define P_tmpdir when __MSDOS__. Malloc filename
+ string. Don't unlink temp file when __MSDOS__.
+ (mips_asm_file_start): Delete TARGET_NAME_REGS support.
+ (mips_asm_file_end): Unlike temp file when __MSDOS__.
+ (mips_declare_object): Don't test mips_sections_threshold.
+ (compute_frame_size, save_restore_insns, function_prologue,
+ mips_expand_prologue, function_epilogue, mips_expand_epilogue):
+ Add 64 bit support.
+ (function_epilogue): Correctly output `#' before .set volatile.
+ * mips.h (enum cmp_type): Add 64 bit support.
+ (enum processor_type): Add PROCESSOR_R4600.
+ (MASK_64BIT, TARGET_64BIT): New mask bit, to indicate 64 bit mode.
+ (HAVE_64BIT_P, OPTIMIZATION_OPTIONS): Delete.
+ (CPP_SPEC): Don't abort if not defined.
+ (CC1_SPEC): -mips1 and -mips2 imply -mfp32. -mips3 implies -mfp64.
+ (CPP_SPEC): Define __SIZE_TYPE__, __PTRDIFF_TYPE__, and __mips.
+ (BITS_PER_WORD, UNITS_PER_WORD, INT_SIZE_TYPE, LONG_TYPE_SIZE,
+ LONG_LONG_TYPE_SIZE, POINTER_SIZE, POINTER_BOUNDARY,
+ PARM_BOUNDARY, EMPTY_FIELD_BOUNDARY, HARD_REGNO_NREGS,
+ CONST_OK_FOR_LETTER_P, STACK_ARGS_ADJUST, FUNCTION_PROFILER,
+ TRAMPOLINE_TEMPLATE, TRAMPOLINE_SIZE, TRAMPOLINE_ALIGNMENT,
+ INITIALIZE_TRAMPOLINE, CASE_VECTOR_MODE, MOVE_MAX,
+ TRULY_NOOP_TRUNCATION, Pmode, FUNCTION_MODE,
+ ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT,
+ ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP): Add 64 bit support.
+ (MAX_BITS_PER_WORD, MAX_UNITS_PER_WORD, UNITS_PER_FPREG,
+ MAX_INT_TYPE_SIZE, MAX_WCHAR_TYPE_SIZE, MAX_LONG_TYPE_SIZE,
+ MAX_MOVE_MAX): Define.
+ (INDEX_REG_CLASS): NO_REGS not GR_REGS.
+ (CONST_DOUBLE_OK_FOR_LETTER_P): Don't examine CONST_DOUBLE
+ internals.
+ (PREFERRED_RELOAD_CLASS): Return CLASS if it isn't ALL_REGS.
+ (TRANSFER_FROM_TRAMPOLINE, ASM_OUTPUT_CASE_LABEL): Delete.
+ (REGNO_OK_FOR_INDEX_P, REG_OK_FOR_INDEX_P): Redefine to 0.
+ (GO_IF_LEGITIMATE_ADDRESS): Delete redundant code0 == REG test.
+ (ENCODE_SECTION_INFO): Don't test mips_section_threshold.
+ (CONST_COSTS): CONST_INT have cost 0 not CONSTS_N_INSNS (0). Pass
+ address not MEM to eliminate_constant_term. Add 64 bit support.
+ (MEMORY_MOVE_COST, ASM_OUTPUT_DOUBLE_INT): Define.
+ (EXTRA_SECTIONS): Delete in_last_p1.
+ (SELECT_RTX_SECTION): Delete division by BITS_PER_UNIT.
+ (NO_BUILTIN_SIZE_TYPE, NO_BUILTIN_PTRDIFF_TYPE): Define.
+ (SIZE_TYPE, PTRDIFF_TYPE): Add 64 bit support.
+ * mips.md (cpu): Add r4600.
+ (define_function_unit): Correct numerous errors. Add r4600.
+ (adddi3*, subdi3*, mulsidi3, umulsidi3, negdi2*, one_cmpdl2*,
+ nordi2*, anddi2*, iordi3*, xordi3*, movdi*, ashldi3*, ashrdi3*,
+ lshrdi3*, seq, sne, sgt, sge, slt, sle, sgtu, sgeu, sltu, sleu,
+ indirect_jump, tablejump, call*, call_value*): Add 64 bit support.
+ (adddi3_internal_3, addsi3_internal_2, subdi3_internal_3,
+ subsi3_internal_2, muldi3, muldi3_internal, divmoddi4, udivmoddi4,
+ divdi3, moddi3, udivdi3, umoddi3, absdi3, ffsdi2,
+ negdi2_internal_2, anddi3_internal1, xordi3_immed, truncdisi2,
+ truncdihi2, truncdiqi2, zero_extendsidi2,
+ zero_extendsidi2_interal, zero_extendhidi2, zero_extendqidi2,
+ extendsidi2, extendhidi2, extendhidi2_internal, extendqidi2,
+ extendqidi2_insn, fix_truncdfdi2, fix_truncsfdi2, floatdidf2,
+ floatdisf2, fixuns_truncdfdi2, fixuns_truncdfsi2,
+ ashldi3_internal4, ashrdi3_internal_4, lshrdi3_internal4, cmpdi,
+ tstdi, branch_zero_di, branch_equality_di, seq_di_zero, seq_di,
+ sne_di_zero, sne_di, sgt_di, sge_di, slt_di, sle_di_const,
+ sle_di_reg, sgtu_di, sgeu_di, sltu_di, sleu_di_const, sleu_di_reg,
+ indirect_jump_internal1, indirect_jump_internal2,
+ tablejump_internal1, tablejump_internal2): New patterns.
+ (mulsi3): Add missing mips_move_1word parameter.
+ (mulsi3+1): Don't split on r4000.
+ (divmodsi4, udivmodsi4, udivsi3, umodsi3): Correct lengths.
+ (divsi3, modsi3, udivsi3, umodsi3): Allow constant operands.
+ (sqrtdf2, sqrtsf2): Correct type attribute.
+ (abssi2): Add mips2 support.
+ (movsi_unaligned, movsi_ulw, movsi_usw): Comment out.
+ (movsf, movdf): Use F not E.
+ (cmpdf, cmpsf, branch_fp*, s{eq,ne,lt,le,gt,ge}_[ds]f): Depend on
+ TARGET_HARD_FLOAT.
+ * va-mips.h: Add 64 bit support.
+
+Thu Jan 13 06:14:17 1994 Paul Eggert (eggert@twinsun.com)
+
+ * c-parse.in (maybe_attribute): Allow multiple __attribute__
+ clauses on a declaration.
+
+Thu Jan 13 06:01:09 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * a29k.h (REG_CLASS_CONTENTS): Fix problems with last word of
+ register set in some classes.
+
+ * a29k.h (MEMORY_MOVE_COST): New macro.
+
+Thu Jan 13 05:42:30 1994 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * config.sub: Fix typo in -hiux* case.
+
+Wed Jan 12 13:25:12 1994 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * dbxout.c (dbxout_range_type): If the range has a base type
+ (TREE_TYPE), emit it, even if that is some other integer type.
+
+Wed Jan 12 06:02:23 1994 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.h (MASK and TARGET): Change POWERPCSQR to PPCFPX to
+ describe both fsqrt and fsel.
+ (TARGET_SWITCHES): powerpc64 implies ppcfpx.
+ * rs6000.c (rs6000_override_options): Change POWERPCSQR to PPCFPX.
+ * rs6000.md (sqrtsf2, sqrtdf2): Change POWERPCSQR to PPCFPX.
+ (maxsf3, minsf3, maxdf3, mindf3): New patterns using fsel instruction.
+
+Tue Jan 11 19:14:31 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * a29k.c (output_prolog): Update debug reg map when
+ we have -mkernel-registers.
+
+ * fold-const.c (fold, truth_andor): Don't apply distributive
+ law when it would change evaluation order.
+ Clean up code a bit to improve flow.
+
+Mon Jan 10 19:37:27 1994 David Robinson (drtr@mail.ast.cam.ac.uk)
+
+ * expr.c (emit_move_insn_1): Call gen_realpart and gen_imagpart
+ instead of gen_lowpart and gen_highpart.
+ * function.c (assign_parms): Likewise.
+ * optabs.c: Remove redundant prototype for gen_highpart.
+
+Mon Jan 10 19:14:07 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * jump.c (comparison_dominates_p): NE is dominated by LT, GT, LTU
+ and GTU.
+
+Mon Jan 10 19:06:57 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (gen_{real,imag}part): Extract value from
+ CONCAT directly.
+ (gen_lowpart_common, gen_highpart): Don't do it here.
+
+ * cse.c (simplify_relational_operation): Don't do anything with CC0
+ in addition to MODE_CC values.
+
+ * expr.c (protect_from_queue): If (MEM (QUEUED ...)), modify a
+ new MEM instead of the one we were passed.
+
+ * i386/linux.h: Update banner, reformat comments.
+ (STARTFILE_SPEC, GPLUSPLUS_INCLUDE_DIR): No longer conditional
+ on CROSS_COMPILER.
+ * Makefile.in (gcc.o, cccp.o): No longer define TOOLDIR.
+
+ * regclass.c (globalize_reg): New function.
+ (init_reg_sets_1): Don't handle global regs here.
+ * varasm.c (make_decl_rtl): Call globalize_reg, not init_reg_sets_1.
+
+ * a29k.c (print_operand, case 'F'): If we have to do the last
+ prolog insn, give that priority for an unfilled delay slot.
+
+ * function.c (preserve_rtl_expr_result): New function.
+ * expr.c (exand_expr, case RTL_EXPR): Call it.
+
+Mon Jan 10 13:43:04 1994 Jim Wilson (wilson@cygnus.com)
+
+ * sched.c (new_insn_dead_notes): Compare registers with rtx_equal_p.
+
+ * Makefile.in (Makefile, stmp-fixinc, deduced.h, stmp-fixproto):
+ Execute shell scripts with $(SHELL).
+ * config/x-lynx (SHELL): Define to /bin/bash.
+
+Sun Jan 9 22:31:00 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.md (special indexed fpstores): Fix assorted typos.
+
+Sun Jan 9 04:34:17 1994 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * jump.c (follow_jumps): Don't follow tablejumps.
+
+ * Makefile.in (install-headers-cpio): Run cpio in include-dir.
+
+Sat Jan 8 14:54:06 1994 Doug Evans (dje@cygnus.com)
+
+ * toplev.c (rest_of_compilation): jump_optimize can change max_reg_num
+ so rerun reg_scan before calling cse_main.
+
+Fri Jan 7 20:34:14 1994 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * config/alpha/alpha.h (RTX_COSTS): Return actual costs for
+ multiplication.
+
+Tue Jan 4 13:44:09 1994 Jim Wilson (wilson@cygnus.com)
+
+ * sdbout.c (sdbout_symbol): Handle variables at zero offset from
+ frame pointer.
+
+Tue Jan 4 07:35:05 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.c (substitute_expr): Don't abort for RTL_EXPR and
+ SAVE_EXPR; just do nothing.
+
+Tue Jan 4 00:52:15 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.md (andsi3): Use "?" instead of "!" to avoid losing
+ in some cases.
+
+Mon Jan 3 16:59:34 1994 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * jump.c (thread_jumps): Don't thread to loop label;
+ create new label before loop instead.
+ (thread_jumps): Rename argument `verbose' -> `flag_before_jump'.
+ * toplev.c (rest_of_compilation): Pass 1 for flag_before_jump
+ first time we call thread_jumps.
+
+ * c-typeck (build_binary_op, case *_DIV_EXPR): Use same shorten
+ condition as for *_MOD_EXPR.
+
+Mon Jan 3 08:00:16 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (truth_value_p): New function.
+ (fold): Use it to see when we should make a TRUTH_{AND,OR}_EXPR.
+ (fold, case TRUTH_{AND,OR,ANDIF,ORIF}_EXPR): Use distributive
+ law on expressions such as (A && B) || (A && C).
+
+Sun Jan 2 08:14:38 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (simplify_relational_operation): Correct declaration of
+ variables holding parts of constants.
+
+Fri Dec 31 06:27:57 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * toplev.c (main): Turn on -fomit-frame-pointer if it is safe.
+ Add -O3, which turns on -finline-functions.
+ * a29k.h, alpha.h, clipper.h, h8300.h, m88k.h, pa.h, romp.h, rs6000.h:
+ Define CAN_DEBUG_WITHOUT_FP; delete OPTIMIZATION_OPTIONS.
+ * sh.h, sparc.h: Likewise.
+ * arm.h: Delete OPTIMIZATION_OPTIONS.
+ * h8300.h: Define NO_FUNCTION_CSE and CAN_DEBUG_WITHOUT_FP;
+ delete OVERRIDE_OPTIONS.
+ * i960.h (OPTIMIZATION_OPTIONS): Just turn on machine-specific opts.
+ (CAN_DEBUG_WITHOUT_FP): Define.
+ * mips.h (CAN_DEBUG_WITHOUT_FP): Define.
+ (OPTIMIZATION_LEVELS): Just set MASK_GPOPT.
+
+ * cse.c (simplify_relational_operation): Rewrite and simplify.
+ Add case when we can simplify A-B for compare of A and B.
+
+ * combine.c (added_links_insn): New variable.
+ (distribute_links): Set it.
+ (if_then_else_cond): New function.
+ (try_combine): Return added_links_insn if it is earlier than what
+ we would otherwise return.
+ (subst): Generalize (OP X Y) to call if_then_else_cond
+ instead of only checking for an explicit IF_THEN_ELSE.
+ (subst, case IF_THEN_ELSE): When converting to a MULT, simplify
+ the MULT before putting it into OP.
+ (subst, case AND): Don't make IF_THEN_ELSE here; now made in
+ generic case earlier.
+
+ * combine.c (force_to_mode): Add new parm JUST_SELECT; all
+ callers changed.
+
+Wed Dec 29 18:05:00 1993 Leonid Baraz (lbaraz@iil.intel.com)
+
+ * fold-const.c (fold, case PLUS_EXPR): Add a missing test of
+ flag_fast_math.
+
+Wed Dec 29 06:52:07 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (simplify_binary_operation, case MULT): Don't convert
+ to ASHIFT if still generating RTL.
+
+Mon Dec 27 22:15:55 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Do not fix <sundev/ipi_error.h>, because SunOS
+ sed can not handle the very large macro it contains.
+
+Mon Dec 27 06:28:48 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.md (maxsf3, minsf3): Correct numerous errors.
+
+ * combine.c (subst, case MINUS): Allow some FP simplifications
+ if -ffast-math.
+ (reversible_comparison_p): FP comparisons reversible with -ffast-math.
+ * cse.c (simplify_binary_operation, fold_rtx): Allow some FP
+ simplications with -ffast-math.
+ (simplify_relational_operation): FP comparisons can be reversed
+ if -ffast-math is specified.
+ * fold-const.c (fold): Simplify more FP ops if -ffast-math.
+ * jump.c (can_reverse_comparison_p): Return 1 if -ffast-math.
+ * loop.c (get_condition): Can reverse comparison if -ffast-math.
+
+ * alpha.c (ior_operand): New function.
+ * alpha.h (PREDICATE_CODES): Add ior_operand.
+ * alpha.md (iordi3): Use ornot for some constant cases.
+
+Sun Dec 26 07:55:26 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (do_tablejump): Call emit_cmp_insn with likely-constant
+ as second operand.
+
+ * jump.c (jump_optimize): When deleting an insn after a jump,
+ update reallabelprev since it might point to the deleted insn.
+
+ * cse.c (count_reg_usage): Don't count a register used within
+ a SET that sets it.
+ (delete_dead_from_cse): Pass new parm to count_reg_usage.
+
+ * cse.c (fold_rtx, case PLUS): If we have (plus A B), A is
+ equivalent to a negative constant, and the negated constant is in
+ register, convert to (minus A C) where C is the register containing
+ the negated constant.
+
+Sat Dec 25 23:47:01 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (DBX_BLOCKS_FUNCTION_RELATIVE): Define.
+ (ASM_OUTPUT_SOURCE_LINE): Likewise.
+ (DBX_FUNCTION_FIRST): Likewise.
+
+ * pa.h (FRAME_POINTER_REGNUM, ARG_POINTER_REGNUM): Change to %r3
+ for compatability with HP compilers.
+
+ * pa.h (READONLY_DATA_SECTION): Re-enable use of $LIT$.
+
+Sat Dec 25 06:05:28 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (gen_reg_rtx): Only clear part of arrays we aren't
+ going to copy into.
+
+ * expr.c (expand_expr, case CONSTRUCTOR): If have a target,
+ don't build constructor into memory.
+
+ * expr.c (expand_expr, case ARRAY_REF): Remove uses of *_type_node
+ and simplify folding a reference to a character in a STRING_CST.
+
+ * a29k.c, a29k.h: Rename R_ACC to R_ACU to not conflict with access.h.
+
+ * m68k/crds.h (HAVE_VPRINTF): Delete from here.
+ * m68k/xm-crds.h (HAVE_VPRINTF): Define.
+ * m68k/dpx2.h (USG): Delete from here (already in xm.h file).
+
+ * print-tree.c (print_node, print_node_brief): Say something
+ when TREE_CONSTANT_OVERFLOW is set.
+
+ * loop.c (check_dbra_loop): Fix error in previous change.
+
+ * combine.c (set_nonzero_bits_and_sign_copies, nonzero_bits):
+ Fix errors in SHORT_IMMEDIATES_SIGN_EXTEND code.
+
+ * alpha.h (FUNCTION_ARG): Pass complex float in float regs.
+
+ * fold-const.c (fold, case EQ_EXPR, NE_EXPR): If COMPLEX_TYPE
+ and at least one arg is a COMPLEX_EXPR, split into a logical
+ operation on the real and imaginary parts.
+
+ * c-typeck.c (common_type): For COMPLEX_TYPE, return one of the
+ original types if is the desired common type.
+ (build_binary_op): Use SHORT_COMPARE code even if complex.
+
+ * c-decl.c (grokdeclarator): Properly validate __complex__ and
+ create the various kinds of complex integer types.
+
+ * cse.c (simplify_unary_operations): Check that operations really
+ are double-word before doing them.
+
+Fri Dec 24 15:21:16 1993 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
+
+ * cccp.c (read_name_map, read_filename_string, open_include_file):
+ New functions.
+ (struct file_name_list): New members: name_map, got_name_map.
+ (main, path_include, do_include, do_once): Set got_name_map.
+ (do_include): Use open_include_file instead of open. Add new
+ parameter to lookup_import calls.
+ (lookup_import): New parameter searchptr. Call open_include_file
+ instead of open.
+
+ * expr.c (convert_modes): Can't truncate REG with gen_lowpart if
+ TRULY_NOOP_TRUNCATION doesn't allow it.
+
+Fri Dec 24 14:36:53 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * cse.c (cse_insn): Set "cse_jumps_altered" when collapsing
+ a switch statement into an unconditional jump.
+ * toplev.c (rest_of_compilation): Rerun jump_optimize
+ before the second CSE pass.
+
+Fri Dec 24 05:34:38 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (simplify_binary_operation, case PLUS, MINUS):
+ Simplify such things as (X >> 1) - X.
+
+ * alpha.md (define_attr type): Add new type ISUBR.
+ (divmod): Set to type ISUBR.
+ * alpha.c (output_prolog): Need GP if type ISUBR.
+
+ * reload.c (push_reload, find_reloads): Reload inside a paradoxical
+ SUBREG of MEM except don't force a reload unless the inner mode
+ is narrower than BIGGEST_ALIGNMENT.
+
+ * c-typeck.c (check_init_type_bitfields): Check recursively inside
+ arrays and records.
+
+ * c-parse.in (attrib): Allow expressions instead of constants.
+ * c-common.c (decl_attribute): Verify that alignment and format
+ argument numbers are all integer constants.
+ Continue on to next attribute if one is in error.
+
+ * cse.c (simplify_binary_operation): Can fold multi-word
+ operations when first is CONST_INT.
+ (simplify_binary_operation, case PLUS, MINUS): Don't call
+ plus_constant when OP0 is VOIDmode.
+
+ * c-typeck.c (pop_init_level): Don't abort if have incomplete array
+ type inside some other type.
+
+Thu Dec 23 22:06:21 1993 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * jump.c (thread_jumps): Delete redundant loop termination test.
+
+ * cse.c (simplify_binary_operation, case *SHIFT*): Reduce arg1 as
+ defined by SHIFT_COUNT_TRUNCATED.
+
+ * config/pa/pa.c (Several places): Declare values from INTVAL(x) as
+ HOST_WIDE_INT.
+ (uint32_operand): New function.
+ (output_block_move): Change unroll threshold from 64 to 32.
+ (compute_movstrsi_length): Corresponding change.
+ (print_operand): Don't call debug_rtx, just abort.
+
+ * config/pa/pa.h (FUNCTION_INCOMING_ARG): Delete definition.
+ (RTX_COSTS) [PLUS]: Rewrite.
+ (output_scc_insn): Delete.
+ (output_floatsisf2): Delete.
+ (output_floatsidf2): Delete.
+ (PREDICATE_CODES): Define, but leave within #if 0 for now.
+
+ * config/pa/pa.md (iorscc): New recognizer.
+ 2 new recognizers for sub;subb. 1 new recognizer for addi;subb.
+ (movstrsi): Remove predicates. Set inline threshold to 8.
+ (umulsidi3): Change predicates to nonimmediate_operand.
+ New recognizer for multiply-by-immediate.
+ (andsi3): Add `!' for register alternative.
+ (vdepi_ior, vdepi_and): New recognizers.
+ (vextru rx,1,ry, vextrs rx,1,ry): New recognizers.
+
+ * config/pa/pa.c (initialize_pic): Delete.
+ (finalize_pic): Use PIC_OFFSET_TABLE_REGNUM rather than 19.
+ * config/pa/pa.h (CONDITIONAL_REGISTER_USAGE): Never make
+ PIC_OFFSET_TABLE_REGNUM fixed.
+ (INITIALIZE_PIC): Delete.
+ * config/pa/pa.md (call, call_value): If PIC, emit USE for for
+ PIC_OFFSET_TABLE_REGNUM. Use PIC_OFFSET_TABLE_REGNUM rather than 19.
+
+Thu Dec 23 18:51:12 1993 Jim Wilson (wilson@cygnus.com)
+
+ * local-alloc.c (optimize_reg_copy_1): After decreasing sregno's
+ reg_live_length, correct it if it is now obviously too small.
+
+ * loop.c (check_dbra_loop): Don't reverse loop if there is a
+ single memory store to an invariant address.
+
+ * gcc.c (translate_options): Skip arguments of -B, -b, -V, -x,
+ and -Xlinker options.
+
+ * configure (riscos-*-*): Use fixincludes instead of fixinc.mips.
+ * fixinc.mips: Delete file.
+ * fixincludes: Merge in changes from fixinc.mips. Fix identifiers
+ host_mips, mips, MIPSE[LB], R[34]000, SYSTYPE_*. Fix size_t uses
+ in stddef.h, memory.h, unistd.h. Fix /**/ in bsd43/bsd43_.h.
+
+Thu Dec 23 18:28:02 1993 Richard Earnshaw (rwe11@sticte.cl.cam.ac.uk)
+
+ * expmed.c (expand_mult): Preserve useful sub-expressions when
+ expanding a synthesized mult.
+
+Thu Dec 23 18:21:34 1993 Russ Noseworthy (jrnosewo@ral.rpi.edu)
+
+ * configure (m68k-wrs-vxworks): New, same as m68k-sun-sunos*.
+
+Thu Dec 23 09:03:30 1993 Phil Nelson (phil@cs.wwu.edu)
+
+ * ns32k.h (ASM_OUTPUT_ADDR_DIFF_ELT): Use .long, not .double.
+
+Thu Dec 23 07:30:24 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * Makefile.in (libgcc.a): Allow chmod of tmpcopy directory to
+ fail since it can be empty.
+
+ * gcc.c (default_compilers, gnat1): Don't write -gnatb.
+
+ * c-common.c (T_ST): Fix typo in last change.
+
+ * expr.c (expand_expr, case MINUS_EXPR): When expanding an
+ initializer, use plus_constant as appropriate.
+
+ * collect2.c (main): When searching compiler directories,
+ look for ld_suffix, not full_ld_suffix.
+
+ * a29k/unix.h (TARGET_DEFAULT): Update to use new values.
+
+ * Makefile.in (GCC_CFLAGS): Add -I./include.
+
+Thu Dec 23 06:57:39 1993 Chip Salzenberg (chip@fin.uucp)
+
+ * Makefile.in (ENQUIRE_CFLAGS): Omit -DNO_STDDEF.
+ (USE_ALLOCA): Allow ${ALLOCA} to begin with a dash.
+ (OBJC, OBJECTIVE-C): Depend on objc-runtime.
+ (objc-headers): Make include directory if missing.
+
+ * xm-svr3.h (HAVE_VPRINTF): Define.
+
+ * cse.c (delete_reg_equiv): Don't reference elements of
+ REG_{NEXT,PREV}_EQV that are not defined.
+
+Wed Dec 22 14:21:49 1993 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
+
+ * dbxout.c (dbxout_parms): For parameter passed by invisible
+ reference, use DECL_INCOMING_RTL if DECL_RTL is a pseudo-reg address.
+
+ * xcoffout.h (DBX_FINISH_SYMBOL): Get variable name from DECL_RTL
+ instead of from DECL_ASSEMBLER_NAME.
+
+ * sched.c (priority): Handle INSN_DELETED_P insns, in addition to
+ insns which were deleted by being turned into notes.
+
+ * expr.c (expand_expr, NEGATE_EXPR case): Use subtarget in
+ recursive call, not target.
+
+ * fixproto (required_unistd_h): Delete getgroups from list.
+
+ * fix-header.c (missing_extern_C_count): Ifdef out.
+ (write_lbrac, recognized_function, read_scan_file, write_rbrac):
+ Likewise.
+
+ * cccp.c (main): Cast alloca result to char * to avoid warning.
+
+ * unroll.c (find_splittable_givs): For rewritting illegal init
+ insn, use force_operand instead of emit_iv_add_mult.
+
+Wed Dec 22 13:44:17 1993 Ron Guilmette (rfg@netcom.com)
+
+ * tree.c (chainon): Detect more circularities.
+
+ * enquire.c (main): Move declarations of SIZE and TOTAL to
+ where they won't cause "unused" warnings when NO_MEM is defined.
+ (promotions): Explicitly declare return type (to avoid warnings).
+ Always return a value.
+
+Wed Dec 22 13:39:40 1993 Chip Salzenberg (chip@fin.uucp)
+
+ * Makefile.in (gcc.o): Define DEFAULT_TARGET_VERSION.
+ * gcc.c (compiler_version): New variable.
+ (spec_version): Initialize from DEFAULT_TARGET_VERSION.
+ (main): Distinguish COMPILER_VERSION from TARGET_VERSION.
+ (process_command): Use COMPILER_VERSION for %v.
+ Guard against a COMPILER_VERSION that lacks a minor.
+
+Wed Dec 22 07:47:17 1993 Greg Gilley (ggilley@adobe.com)
+
+ * gcc.c (default_compilers): Treat ".cpp" as C++.
+ * cccp.c (main): Strip off ".cpp" extension.
+ * toplev.c (strip_off_ending): Likewise.
+
+Wed Dec 22 07:26:26 1993 Rafal Pietrak (Rafal_Pietrak@camk.edu.pl)
+
+ * Makefile.in (install-headers, install-headers-tar): Correctly
+ handle directories when $(libsubdir) is a relative path.
+
+Wed Dec 22 07:12:06 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-common.c (T_ST): New macro.
+ (scan_char_table): With s, c and [, allow `a' flag.
+ (print_char_table): Accept Z and m codes.
+ (check_format_info): Handle the `a' flag.
+
+Tue Dec 21 21:09:38 1993 Rainer Orther (ro@TechFak.Uni-Bielefeld.de)
+
+ * fixincludes (rpc/auth.h, rpc/xdr.h): Declare structures before
+ using them in prototypes, for Irix 4.0.5.
+ (rpc/rpc.h): Avoid a nested comment on Ultrix 4.3.
+
+Tue Dec 21 18:41:36 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * configure (cpp_md_flags): Rename to md_cppflags.
+ (MD_CPP, MD_DEPS): Set appropriately for native or cross build.
+ (MD_FILE): Edit in place.
+ * Makefile.in (MD_FILE rule): Depend on $(MD_DEPS). Invoke $(MD_CPP).
+
+Tue Dec 21 17:37:20 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-tree.h (VTABLE_NAME): No def with NO_{DOLLAR,DOT} defined.
+ (VTABLE_NAME_P): Use it instead of VTABLE_NAME_FORMAT.
+
+Tue Dec 21 13:25:39 1993 Jim Wilson (wilson@cygnus.com)
+
+ * sparc.h (FUNCTION_ARG_PASS_BY_REFERENCE): Also pass Pascal arrays
+ by reference.
+
+ * sched.c (sched_analyze): For CALL_INSN followed by
+ NOTE_INSN_SETJMP note, make it depend on all registers not just
+ hard registers, and add a REG_DEAD -1 note.
+ (unlink_notes): Don't save away NOTE_INSN_SETJMP notes.
+ (schedule_block): After scheduling CALL_INSN, check for REG_DEAD
+ -1 note. If find it, delete it, and output a NOTE_INSN_SETJMP note.
+
+ * rtlanal.c (replace_regs, case REG): Return copies of SUBREGs, to
+ avoid invalid sharing.
+
+Tue Dec 21 13:07:14 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.c (output_function_prologue): Use ASM_GENERATE_INTERNAL_LABEL
+ rather than generating one on its own.
+
+ * pa.h (ASM_GENERATE_INTERNAL_LABEL): Always use L$ as the prefix
+ for internal labels.
+ (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
+
+Mon Dec 20 19:10:16 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-typeck.c (struct initializer_stack): New field ELEMENTS.
+ (start_init, finish_init): Save and restore constructor_elements.
+
+ * emit-rtl.c (gen_lowpart_common): Return a new hard reg even
+ if not valid in MODE if the input REG is not valid in its mode.
+
+ * rs6000.md (divsi3): Correct logic for when we call force_reg.
+ (modsi3): Ensure operands[2] is a CONST_INT; include REG in
+ predicate.
+
+Thu Dec 16 16:14:53 1993 Jeffrey A. Law (law@mole.gnu.ai.mit.edu)
+
+ * pa.c (compute_frame_size): Remove implicit assumption that %r4
+ is the frame pointer.
+
+ * pa.c (output_function_prologue): Reverse last change. Output
+ both the function label and the .PROC here.
+
+ * pa.h (ASM_DECLARE_FUNCTION_NAME): Do not output the function
+ label or the .PROC here.
+
+Thu Dec 16 11:34:48 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Do not preserve _HIDDEN_VA_LIST in stdio.h.
+
+Wed Dec 15 13:48:25 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (flag_conserve_space): New language specific flag to
+ tell the compiler to use .common when possible. Reduces the size of
+ .o files.
+ * cp-decl.c (duplicate_decls): Copy DECL_COMMON from the olddecl.
+ * cp-decl.c (start_decl): Set DECL_COMMON appropriately.
+ * cp-decl.c (finish_decl): Use flag_conserve_space, instead of
+ flag_no_common.
+ * cp-decl2.c (flag_conserve_space, lang_f_options): New flag.
+ * toplev.c (lang_options): New -fconserve-space flag.
+ * tree.h (DECL_COMMON): New flag.
+ * tree.h (tree_decl): New common_flag.
+ * varasm.c (assemble_variable): Use DECL_COMMON to help determine if
+ an object can be put in .common.
+ * c-decl.c (start_decl): Set DECL_COMMON to 1.
+
+Wed Dec 15 19:04:55 1993 Conrad Kimball (cek@sdc.boeing.com)
+
+ * Makefile.in (cccp.o, stmt-proto): Use $(includedir).
+
+Wed Dec 15 18:44:03 1993 Leonid Baraz (lbaraz@iil.intel.com)
+
+ * tree.c (copy_node): Handle length of INTEGER_CST like make_node.
+
+Wed Dec 15 18:37:29 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * final.c (profile_function): Set ALIGN properly.
+
+ * protoize.c: Remove declarations of setjmp and longjmp.
+
+Wed Dec 15 18:31:01 1993 Paul Eggert (eggert@twinsun.com)
+
+ * c-typeck.c (missing_braces_mentioned): Renamed from
+ `partial_bracket_mentioned'.
+ (start_init): Clear `missing_braces_mentioned'.
+ (warning_init): New function.
+ (push_init_level): Optionally warn about missing braces.
+ When warning about braces around scalars, identify which scalars.
+
+Wed Dec 15 18:21:29 1993 Richard Henderson (richard@viz.tamu.edu)
+
+ * mips/iris3.h (LIB_SPEC): Use shared libc when not profiling,
+ not debugging, and no "-static".
+
+Wed Dec 15 18:14:31 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * expr.c (expand_builtin): Allow __builtin_next_arg to be used
+ in varargs functions.
+
+Wed Dec 15 18:09:57 1993 Kaveh R. Ghazi (ghazi@noc.rutgers.edu)
+
+ * Makefile.in (gnucompare, gnucompare3): New targets.
+
+Tue Dec 14 00:19:44 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.c (output_call): Put temporary label after the
+ RP adjustment. "- 8" adjustment is no longer necessary.
+
+ * x-pa (CC): Do not use absolute path to gcc.
+
+ * pa.c (output_function_prologue): Do not output the .PROC directive
+ here.
+
+ * pa.h (ASM_DECLARE_FUNCTION_NAME): Emit the .PROC immediately
+ after the function's label.
+
+ * pa.h (ASM_FILE_START): Emit a .file directive at the beginning
+ of the output file if debug symbols are being generated.
+
+ * pa.h (MAX_OFILE_ALIGNMENT): Define appropriately for the PA.
+
+ * pa-ghiux.h (TARGET_DEFAULT): Enable TARGET_JUMP_IN_DELAY and
+ TARGET_GAS.
+ * pa1-ghiux.h (TARGET_DEFAULT): Likewise.
+
+ * pa-ghpux.h (TARGET_DEFAULT): Enable TARGET_JUMP_IN_DELAY.
+ * pa-gux7.h (TARGET_DEFAULT): Likewise.
+ * pa-utahmach.h (TARGET_DEFAULT): Likewise.
+ * pa.h (TARGET_DEFAULT): Likewise.
+ * pa1-ghpux.h (TARGET_DEFAULT): Likewise.
+ * pa1-utahmach.h (TARGET_DEFAULT): Likewise.
+ * pa1.h (TARGET_DEFAULT): Likewise.
+
+ * pa.h (LEGITIMATE_CONSTANT_P): Remove hack for function addresses.
+ * pa.c (secondary_reload_class): Function addresses no longer
+ need secondary reloads.
+ (emit_move_sequence): Special handling of function addresses is
+ no longer needed.
+ * pa.md (lo_sum of a function address): Use short form as we have
+ no intention of supporting MPE external calls.
+
+Mon Dec 13 20:58:58 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (subst, case MINUS): Canonicalize (minus A (plus A B)).
+
+Mon Dec 13 19:09:42 1993 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * mips/iris4.h (ASM_OUTPUT_ASCII): Wrap in `do { ... } while (0)'.
+ * clipper/clix.h, fx80/fx80.h, i860/bsd.h, m68k/3b1.h: Likewise.
+ * m68k/amix.h, m68k/crds.h, m68k/hp320.h, m68k/m68kv4.h: Likewise.
+ * m68k/mot3300.h, m68k/sgs.h, m68k/tower-as.h: Likewise.
+ * ns32k/encore.h, tahoe/harris.h, tahoe/tahoe.h: Likewise.
+ * vax/vaxv.h,we32k/we32k.h: Likewise.
+
+Mon Dec 13 03:28:02 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * configure (sparc-*-solaris2): Fix typo in extra_parts.
+
+Sun Dec 12 08:19:38 1993 Chip Salzenberg (chip@fin.uucp)
+
+ * cccp.c (main): Combine tests of single-character suffixes.
+ (deps_output): Different second parameter: SPACER determines
+ meaning of first argument (target, dependency, literal text).
+ Wrap output correctly.
+
+Sun Dec 12 07:54:07 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.c (type_hash_canon): Clean up obstack usage a bit.
+
+ * recog.c (indirect_operand): Verify mode of OP is correct.
+
+ * calls.c (expand_call, store_one_arg): Properly push and pop
+ temporary level around expression evaluations.
+
+ * configure: Handle EXTRA_PARTS and EXTRA_OBJS like the others.
+ (i[34]86-*-osfrose*): Replace t-osfrose with extra_objs assignment.
+ (i[34]86-*-sco*): Likewise for t-sco.
+ (i[34]86-*-isc*): Likewise for t-isc.
+ (i[34]86-ibm-ai*): Likewise for t-aix.
+ (i[34]86-*-solaris2, i860-alliant-*): Add extra_parts.
+ (sparc-*-solaris2*, m88k-*): Likewise.
+ (mips-dec-osfrose*): Add extra_objs.
+ (clipper-intergraph-clix*): Replace t-clix with extra_headers and
+ extra_parts.
+ * Makefile.in (halfpic.o): New rule; copied from t-osfrose.
+ * h8300/t-h8300: Delete null LIB2FUNCS_EXTRA.
+ * i386/t-sol2, i860/t-fx2800, m88k/t-dgux-gas: Delete EXTRA_PARTS.
+ * m88k/t-dgux, m88k/t-m88k, m88k/t-sysv4, sparc/t-sol2: Likewise.
+ * m88k/t-luna: Don't require bash.
+ * mips/t-osfrose: Delete EXTRA_OBJS and halfpic.o rule.
+ * clipper/t-clix, i386/t-aix, i386/t-isc, i386/t-osfrose, i386/t-sco:
+ Deleted; no longer needed.
+
+Sun Dec 12 06:47:14 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * Version 2.5.7 released.
+
+Sun Dec 12 06:18:33 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * function.c (thread_prologue_and_epilogue_insns): When constructing
+ USE chain, set both NEXT_INSN and PREV_INSN links. Also, preserve
+ order of USE insns in chain.
+
+Sun Dec 12 06:13:51 1993 DJ Delorie (dj@ctron.com)
+
+ * configure.bat: Update to relect recent changes elsewhere.
+ * objc/makefile.dos: Likewise.
+
+Sat Dec 11 18:09:50 1993 Per Bothner (bothner@cygnus.com)
+
+ * dbxout.c (dbxout_type): The "base type" of a SET_TYPE is its
+ DOMAIN_TYPE, not its TREE_TYPE.
+ * dwarfout.c (output_type): Likewise.
+
+Sat Dec 11 07:36:57 1993 David Rifkind (dave@yarc.com)
+
+ * rs6000.md: Add a few missing new nmemonics.
+
+Sat Dec 11 06:57:55 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cccp.c (INPUT_STACK_MAX): Double size.
+
+ * integrate.c (initialize_for_inline): Handle CONCAT when setting up
+ parmdecl_map.
+
+ * rs6000.md (modsi3): Reject REG in predicate to avoid undefined
+ reference and extra pseudo creation if will fail.
+
+Fri Dec 10 10:03:36 1993 Mike Stump (mrs@cygnus.com)
+
+ * toplev.c (lang_options): Change -fnodollars-in-identifiers to
+ -fno-dollars-in-identifiers to match docs.
+
+Fri Dec 10 15:42:02 1993 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
+
+ * c-lex.c (yylex): When reading malformed floating point constant,
+ avoid printing error more than once, and avoid passing malformed
+ number to subsequent atof call.
+
+Fri Dec 10 06:03:35 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.c (easy_fp_constant): Use input_operand to see if
+ each word can be loaded in one insn.
+
+ * rs6000.md: Change numerous occurrences of TARGET_POWERPC
+ to ! TARGET_POWER and make related changes.
+
+ * rs6000.md (modsi3): Rework to operate correctly for both POWER
+ and PowerPC.
+
+Thu Dec 9 16:19:05 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-tree.h (OPERATOR_TYPENAME_P): Define outside of
+ NO_{DOLLAR,DOT} macro checks, so it always gets defined.
+ (VTABLE_NAME_P): Define for NO_DOT && NO_DOLLAR_IN_LABEL.
+
+Wed Dec 8 05:46:26 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * flow.c (mark_used_regs, case CLOBBER): Refine previous change
+ to just look at the address of a MEM inside a CLOBBER.
+
+ * fold-const.c (fold, case *_{DIV,MOD}_EXPR): When using
+ distributive law, take care when C2 is negative.
+
+Tue Dec 7 08:45:59 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * flow.c (mark_used_regs): Look inside a CLOBBER; it may be the only
+ place regs are used if it has a stack slot that is from an inlined
+ function.
+
+Mon Dec 6 20:56:11 1993 David Rifkind (dave@yarc.com)
+
+ * expr.c (move_block_{to,from}_reg): Check HAVE_{load,store}_multiple
+ value; don't just #idef the symbol.
+
+Mon Dec 6 08:01:59 1993 Torbjorn Granlund (tege@cygnus.com)
+
+ * pa.c (hppa_legitimize_address): If we can't legitimize,
+ do nothing; don't call abort.
+
+Mon Dec 6 07:38:30 1993 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * arm.c (output_ascii_pseudo_op): 8-bit chars should be zero-extended.
+ * arm.h (ASM_OUTPUT_ASCII): Likewise.
+
+Mon Dec 6 07:32:59 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * objc/encoding.h: Include ctype.h.
+
+ * expr.c (expand_expr, case PLACEHOLDER_EXPR): Remove top entry
+ from PLACEHOLDER_LIST when expanding the value in it.
+
+Mon Dec 6 05:40:38 1993 Doug Evans (dje@cygnus.com)
+
+ * emit-rtl.c (start_sequence): Save current sequence_rtl_expr.
+
+Fri Dec 3 07:07:01 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * Version 2.5.6 released.
+
+ * c-typeck.c (c_expand_return): Return if convert_for_assignment
+ returns error_mark_node.
+
+Fri Dec 3 06:42:05 1993 Arne Henrik Juul (arnej@fm.unit.no)
+
+ * fixincludes (stdio.h): Fix typos (missing quote) in previous change.
+
+Fri Dec 3 06:35:57 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * gstddef.h: Define and protect against __STDDEF_H__ for Irix 5.1.
+
+ * sparc.c (shift_operand): Delete function.
+ * sparc.md (ashlsi3, ashrsi3, lshrsi3): Use arith_operand instead
+ of shift_operand. Truncate shift counts to 5 bits.
+
+Thu Dec 2 08:11:00 1993 Stefan Rapp (sr@irb.informatik.uni-dortmund.de)
+
+ * loop.c (scan_loop): Correct arguments for register check.
+
+Thu Dec 2 07:07:05 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * fixincludes: Preserve _HIDDEN_VA_LIST when changing VA_LIST to
+ DUMMY_VA_LIST. Change __va_list to __gnuc_va_list. For AIX
+ 3.2.5.
+
+Thu Dec 2 07:00:24 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (push_topmost_sequence, end_sequence): Update
+ sequence_rtl_expr from sequence_stack entry.
+
+ * calls.c (emit_library_call): Use Pmode, not OUTMODE, when passing
+ in structure address.
+
+ * a29k.c (secondary_reload_class): Kernel regs are in same class
+ as user regs.
+
+ * a29k.md (movti split): Set CR to 3, not 1 like DImode.
+
+Thu Dec 2 06:46:07 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * reload.c (find_reloads_toplev): Replace obsolete reference to
+ BYTE_LOADS_*_EXTEND with LOAD_EXTEND_OP.
+
+Thu Dec 2 06:39:16 1993 Jeffrey A Law (law@snake.cs.utah.edu)
+
+ * pa.h (ASM_STABS_OP, ASM_STABN_OP): Define.
+ (ASM_FILE_END): Put a TAB before the .stabs directive.
+
+Thu Dec 2 06:30:17 1993 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.md (define_function_unit): Restore ppc601 load and fpload
+ timings.
+
+Wed Dec 1 17:24:17 1993 Brendan Kehoe (brendan@mole.gnu.ai.mit.edu)
+
+ Wed Nov 24 06:36:10 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-tree.c (get_decl_list): Use the DECL_NESTED_TYPENAME for the
+ value we're going to paste onto CLASSTYPE_ID_AS_LIST. This will get
+ the right name for nested classes, and for templates.
+
+ Mon Nov 29 13:09:31 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Properly evaluate TREE_PUBLIC for
+ friends. (Fixes spurious warnings about friends being declared
+ static but not used.)
+
+ * cp-type2.c (build_functional_cast): If we got an error_mark_node
+ from build_method_call, make sure EXPR_AS_METHOD is cleared out
+ again, so the later checks will work properly.
+
+ * cp-decl.c (build_enumerator): Fix logic so an enum inside a class
+ that's local to a function has its enumerators end up in that
+ class's list of members, not in the list for the function.
+
+Tue Nov 30 19:26:05 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * sparc.h (STATIC_CHAIN_REGNUM): Use %g2; %g1 is reserved
+ for prologue.
+ (TRAMPOLINE_TEMPLATE, INITIALIZE_TRAMPOLINE): Swap useage of %g1
+ and %g2.
+
+ * m68k.md (movdf): Don't need earlyclobber when a register
+ is copied to itself.
+
+Sat Nov 27 06:19:22 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * Version 2.5.5 released.
+
+ * c-typeck.c (pop_init_level): Ensure never on momentary_obstack
+ when calling complete_array_type.
+
+Sat Nov 27 03:52:26 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixproto (scanning files_to_check): Create subdirs files are in.
+
+ * config/m68k/m68k.md (cmpsi, cmphi, cmpqi): Handle SGS_CMP_ORDER
+ when outputting cmpm insn.
+
+Fri Nov 26 15:57:24 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (default_compilers): Do define __GNUC_MINOR__ if input is `-'.
+
+Thu Nov 25 18:16:25 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.h (struct sequence_stack): New field sequence_rtl_expr.
+ (struct function): Likewise.
+ * emit-rtl.c: Include tree.h.
+ (sequence_rtl_expr): New variable.
+ (save_emit_status, restore_emit_status): Save and restore it.
+ (init_emit): Initialize it.
+ (start_sequence_for_rtl_expr): New function.
+ * function.c: Declare sequence_rtl_expr.
+ (struct temp_slot): New field rtl_expr.
+ (assign_stack_temp): Set it from sequence_rtl_expr.
+ ({free,pop}_temp_slots): Don't free any slot with nonzero rtl_expr.
+ (free_temps_for_rtl_expr): New function.
+ * expr.c (expand_expr, case RTL_EXPR): Call free_temps_for_rtl_expr.
+ * stmt.c (expand_start_stmt_expr): Call start_sequence_for_rtl_expr
+ instead of start_sequence.
+ * cp-parse.y (except_stmts): Likewise.
+ * cp-init.c (build_new): Likewise.
+ * cp-typeck.c (build_modify_expr): Likewise.
+ * Makefile.in (emit-rtl.o): Includes tree.h.
+
+Thu Nov 25 17:24:02 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (stmp-fixproto): Create include subdir if doesn't exist.
+
+Wed Nov 24 14:32:47 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * c-common.c (shorten_compare): Correct typo from last change.
+
+Wed Nov 24 13:25:09 1993 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * protoize.c (save_def_or_dec): Correct typo in change of Nov 23. Make
+ sure pointers within def_dec_p are valid before it is freed.
+
+Wed Nov 24 07:02:50 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * expr.c (expand_expr, case ADDR_EXPR): Also pass const0_rtx if
+ necessary, to avoid multiple cleanup runs.
+ (expand_expr, case WITH_CLEANUP_EXPR): Pass const0_rtx if
+ necessary, to keep the recursive call from running the same
+ cleanups twice.
+ (expand_expr, case TARGET_EXPR): Don't try to add the cleanup if
+ ignore's non-zero, since we would have already done it.
+
+Tue Nov 23 21:10:22 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ Cygnus<->FSF C++ front-end merge.
+ Tue Nov 23 11:05:28 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-errfn.c (STRDUP): Cast return value of alloca to (char *).
+
+ Mon Nov 22 00:07:17 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-lex.c (real_yylex): Move declaration of tmp inside the block
+ that uses it, so compilers don't try to mis-optimize it away.
+
+ * cp-search.c (dfs_pushdecls): Make sure there's a lang_specific
+ node on the decl before trying to print the warning out.
+
+ * cp-decl.c (grokdeclarator): Say the member was redeclared as
+ static, not just that it can't be declared static.
+
+ * cp-search.c (get_first_matching_virtual): Don't do
+ SET_IDENTIFIER_ERROR_LOCUS as an attempt to avoid multiple warnings
+ with -Woverloaded-virtual. It changes the compiler's behavior
+ (elicits unwanted errors).
+
+ Sat Nov 20 19:31:01 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-tree.h (lang_type): Add field `has_nonpublic_ctor', and delete
+ dummy since we used the two bits it was holding out for the MIPS
+ compiler.
+ (TYPE_HAS_NONPUBLIC_CTOR): Defined.
+ * cp-class.c (finish_struct_methods): Set TYPE_HAS_NONPUBLIC_CTOR
+ as appropriate for a copy ctor with non-public visibility.
+ (finish_struct): Don't generate a copy ctor if the type if one of
+ its fields has a private copy ctor, or a protected one for which we
+ aren't allowed access.
+ (base_info): Add member `saw_nonpublic_ctor'.
+ (finish_base_struct): Set b->saw_nonpublic_ctor if necessary.
+
+ * cp-method.c (hack_identifier): Make sure there's a
+ DECL_LANG_SPECIFIC before getting ready to grope around a class.
+
+ * cp-typeck.c (build_indirect_ref): Complain if we encounter a
+ pointer to member.
+
+ Fri Nov 19 16:37:28 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (start_decl): Complain when a function is declared as
+ part of a template definition, but the class it's supposed to be
+ part of wasn't a template.
+
+ * cp-decl.c (pushdecl): Don't warn about shadowing a member of
+ `this' if that member is static.
+
+ * cp-call.c (convert_harshness_old): Don't die if one of the types
+ isn't an aggregate with a binfo.
+ (convert_harshness_ansi): Likewise.
+
+ Fri Nov 19 12:18:31 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-typeck.c (convert_for_assignment): Fix typo so initialization
+ of a pointer from an integer actually work, rather than emit bogus
+ code.
+
+ * cp-pt.c (overload_template_name): Accept unions for templates.
+ (instantiate_class_template): Likewise.
+ * cp-parse.y (template_instantiate_once): Likewise.
+
+ * cp-lex.c (real_yylex): Instead of using the "shorts" method to
+ check for overflow, use the C front-end's "parts" method (to handle
+ any size, and not rely on long long being 32 bits wide).
+
+ Thu Nov 18 11:51:34 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-lex.c (cons_up_default_function): Disable earlier change; it
+ screws up stabs somehow. Very strange.
+
+ Thu Nov 18 00:16:29 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Say what class is involved when saying
+ we can't declare a member inside it.
+
+ * cp-lex.c (real_yylex): Recognize operator->() as POINTSAT, not
+ POINTSAT_LEFT_RIGHT. By swallowing the parens, we ended up never
+ building the call properly for them.
+ * cp-parse.y (POINTSAT_LEFT_RIGHT): Remove token.
+ (operator_name): Remove POINTSAT_LEFT_RIGHT rule.
+ * cp-spew.c (init_spew): Remove POINTSAT_LEFT_RIGHT from
+ toks_follow_ids.
+
+ * cp-parse.y (primary): Only try to print out the operator's name if
+ it's valid.
+
+ * cp-decl.c (grok_op_properties): Fix missing parens to keep the
+ logic from accidentally giving an error when it shouldn't.
+
+ Wed Nov 17 20:04:00 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-search.c (dfs_pushdecls): TREE_PURPOSE doesn't have to be
+ a _DECL for class_value to be an envelope, it just can't be an
+ IDENTIFIER_NODE.
+
+ Wed Nov 17 15:54:02 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-type2.c (process_init_constructor): Deal with pointers to
+ members as initializers for initializer lists.
+
+ Wed Nov 17 11:48:38 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-decl.c (ambi_op_p): Add ++ and --.
+
+ * cp-error.c: Lose the anon_parm_name stuff.
+
+ * cp-lex.c (cons_up_default_function): Change input_filename for
+ synthetic code.
+
+ * cp-error.c (dump_aggr_type): Always print const or volatile.
+ (dump_function_decl): Only print static if verbose.
+
+ * cp-errfn.c (cp_sprintf): New function.
+
+ * cp-decl.c (grokfndecl): Be more verbose in complaint about applying
+ method qualifiers to non-methods.
+
+ Wed Nov 17 09:51:04 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * cp-parse.y (attrib): Accept "noreturn" attribute.
+
+ Tue Nov 16 12:28:49 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-decl2.c (grokoptypename): Fix handling of udc's.
+
+ * cp-method.c (build_component_type_expr): Ditto.
+
+ * cp-class.c (finish_struct_methods): Be more verbose in complaint
+ about overloaded operator delete.
+
+ * cp-decl.c (grok_op_properties): Do more checking on operators.
+ (grokdeclarator): Remove check for ops being members, fix handling
+ of user-defined conversions.
+ (grokfndecl): Remove checks for ops, move call to grok_op_properties
+ up.
+ (finish_decl): Remove check for ops with default arguments.
+ (ambi_op_p): New fn, name for either unary or binary op
+ (unary_op_p): New fn, checks name for unary op
+
+ Mon Nov 15 12:38:54 1993 Brendan Kehoe (brendan@rtl.cygnus.com)
+
+ * g++.c (main): If they gave us -v, also show the invocation of the
+ gcc driver.
+
+ Mon Nov 15 12:04:47 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Lose "operator <typename>".
+
+ * cp-method.c (build_component_type_expr): Ditto.
+
+ * cp-decl2.c (grokoptypename): Ditto.
+
+ Make C++ accept template parameters as type names; for example,
+ doing `template <class T, T t> A {...}'.
+
+ * cp-pt.c (end_template_parm_list): Fix a bug in gs4t's patch.
+ (grok_template_type): Simplify.
+
+ * cp-typeck.c (build_modify_expr_1): Give error if trying to
+ get default operator= for class where you can't.
+
+ * cp-decl.c (duplicate_decls): Uniformify, fix redeclaration of
+ builtins.
+
+ Sat Nov 6 19:06:25 EST 1993 Gnanasekaran Swaminathan (gs4t@virginia.edu)
+
+ * cp-pt.c (begin_template_parm_list): pushdecl here so that we
+ can push TEMPLATE PARAMETERS as type names.
+ (process_template_parm): build_lang_decl for TEMPLATE
+ PARAMETERS here.
+ (grok_template_type): New function. get the actual type of a
+ TEMPLATE PARAMETER.
+ (coerce_template_parms): delete pushdecl as it is moved (see
+ above). Don't build type decls for TEMPLATE PARAMETERS as it is
+ built above.
+
+ Mon Nov 15 12:04:47 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-decl.c (duplicate_decls): If a function has been declared with
+ explicit language linkage, redeclaring (or defining) it without
+ is OK.
+
+ Fri Nov 12 15:30:27 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-lex.c (operator_name_string): Fix handling of __ad__foo.
+
+ * cp-error.c (dump_decl): Handle demangling of vtable names.
+
+ * cp-tree.c (lang_printable_name): Pass everything to decl_as_string,
+ not just functions.
+
+ * cp-decl2.c (check_classfn): Use cp_error.
+
+ * cp-error.c (dump_decl): Fix IDENTIFIER_TYPENAME_P case.
+
+ * cp-method.c (build_decl_overload): Propagate IDENTIFIER_OPNAME_P
+ to mangled identifier.
+
+ * cp-type2.c (my_friendly_abort): Add "confusion" message for
+ abort after earlier errors.
+
+ Wed Nov 10 18:39:17 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-decl2.c (lang_decode_option): Include warn_enum_clash among
+ -Wall.
+
+ Wed Nov 10 16:18:19 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * Makefile.in (stamp-cp-parse): Update counts.
+
+ Wed Nov 10 15:27:12 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-errfn.c (cp_thing): Allow cp_*_at to use an arbitrary argument,
+ not just the first, by using, for instance, `%+D'.
+
+ Mon Nov 8 13:50:49 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-error.c (language_as_string): New function for printing language
+ context. Corresponds to %L.
+
+ Mon Nov 8 10:39:28 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-pt.c (reinit_parse_for_template): Use inline_text_obstack
+ instead of permanent_obstack so that yylex() doesn't clobber the
+ growing object.
+
+ * cp-lex.c (reinit_parse_for_block): Overhaul to reduce code size by
+ half and make #line directives in template definitions work.
+
+ Sun Nov 7 15:19:28 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-pt.c (instantiate_class_template): if (!setup_parse), don't
+ mess with lineno and input_filename.
+
+ Mon Nov 1 18:15:59 1993 Kung Hsu (kung@cirdan.cygnus.com)
+
+ * cp-cvt.c(convert_to_reference): Fix when pass ref to array as
+ initializer, the argument type is convert to pointer and the type
+ in the field of the class should also convert to pointer.
+
+ Fri Nov 5 11:57:41 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-pt.c (instantiate_template): Work properly with
+ -fexternal-templates.
+
+ * cp-lex.c (extract_interface_info): #if 0 out earlier
+ tinst_level work pending further work.
+
+ Fri Nov 5 07:39:00 1993 Michael Tiemann (tiemann@blues.cygnus.com)
+
+ * cp-search.c (compute_visibility): Don't lose access to public
+ members from base classes of base classes.
+
+ * cp-typeck.c (convert_for_assignment): Allocate enough space in
+ LHSBUF for the null terminiator.
+
+ Tue Nov 2 07:20:03 1993 Michael Tiemann (tiemann@blues.cygnus.com)
+
+ * cp-decl2.c (build_push_scope): Don't push the scope for
+ ptr-to-method declarations. Also, clarify some comments.
+
+ * cp-parse.y (abs_member_declarator): Add `see_typename' epsilon
+ rule so that parser can recognize ptr-to-member functions.
+
+ Mon Nov 1 18:15:59 1993 Kung Hsu (kung@cirdan.cygnus.com)
+
+ * cp-cvt.c(convert_to_reference): Fix when pass ref to array as
+ initializer, the argument type is convert to pointer and the type
+ in the field of the class should also convert to pointer.
+
+ Mon Nov 1 11:06:39 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-errfn.c: Don't include <string.h>.
+ Don't use the return value of strcpy.
+
+ Sun Oct 31 22:32:05 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-call.c (build_scoped_method_call): Return (void)0 if trying to
+ call a nonexistent destructor.
+
+ * cp-parse.y (object): Support p.~int().
+
+ * cp-error.c (dump_expr): Handle error_mark_node better.
+
+ Sat Oct 30 21:49:00 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-parse.y (primary): Support p->~int().
+
+ Fri Oct 29 18:09:12 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-type2.c (build_functional_cast): Don't delete things twice.
+
+ Thu Oct 28 15:35:55 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-tree.h (struct tinst_level): The template instantiation level
+ structure. Used by the code described below.
+
+ * cp-pt.c (push_tinst_level): New function for remembering file
+ context when instantiating templates. Stores the identifier as well,
+ for error reporting.
+ (pop_tinst_level): Da opposite.
+ (tinst_for_decl): Returns a pointer to the tinst_level structure to
+ use for determining which file to associate the current DECL with, or
+ NULL to use the current file and line. To restore the old behavior,
+ just change this function to "return 0;".
+ (instantiate_class_template): push_tinst_level.
+
+ * cp-parse.y (tmplate_instantiate_once): pop_tinst_level() after
+ instantiating member templates.
+
+ * cp-lex.c (extract_interface_info): If instantiating a template,
+ set up interface/implementation according to the spot in the user's
+ code that triggered the instantiation.
+
+ * cp-pt.c (tsubst): Associate the FUNCTION_DECL with the spot in the
+ user's code that triggered the instantiation. *Currently disabled*
+
+ * cp-class.c (finish_struct): If we're instantiating a template,
+ associate the TYPE_DECL with the spot in the user's code that
+ triggered the instantiation. *Currently disabled*
+
+ * cp-pt.c (coerce_template_parms): Do extra checking on the template
+ parms, since templates are more picky than initializers.
+
+ Wed Oct 27 17:06:54 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-parse.y (datadef): Don't override a template with a forward
+ declaration of a template class.
+
+ Tue Oct 26 17:54:12 1993 Kung Hsu (kung@cirdan.cygnus.com)
+
+ * cp-parse.y (component-declarator0): fix bit field name same as type
+ name syntax error.
+
+ Tue Oct 26 16:07:29 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-cvt.c (build_up_reference): Fix typo, fixes core dump on bad
+ code.
+
+ Tue Oct 26 11:52:09 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-error.c (dump_function_decl): Only print default arguments
+ if verbose.
+ (dump_type): Ditto.
+
+ Mon Oct 25 22:18:05 1993 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * cp-typeck.c (c_sizeof, build_c_cast): Re-enable Salzenberg's
+ July 10 change (set TREE_OVERFLOW as well as TREE_CONSTANT_OVERFLOW).
+
+ Mon Oct 25 18:53:08 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-pt.c (instantiate_class_template): Don't do the
+ push_template_decls thang if !setup_parse; the binding level
+ never gets popped.
+
+ Mon Oct 25 11:54:34 1993 Kung Hsu (kung@cirdan.cygnus.com)
+
+ * cp-method.c (hack_identifier): fix seg fault when an
+ external variable does not have class context.
+
+ Sun Oct 24 19:01:15 1993 Michael Tiemann (tiemann@blues.cygnus.com)
+
+ * cp-spew.c (scan_tokens): Test for ';' in first pre-scan of the
+ tokens.
+
+ Fri Oct 22 23:46:17 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-tree.c (get_decl_list): When consing up CLASSTYPE_ID_AS_LIST,
+ don't assume that `value' is a reasonable identifier to use.
+ (list_hash_lookup_or_cons): Ditto.
+
+ * cp-error.c (dump_decl, CONST_DECL): Pass off non-enum cases to
+ dump_expr.
+ (dump_expr): Pass off DECLs to dump_decl.
+
+ Fri Oct 22 20:57:46 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
+
+ * cp-errfn.c (STRDUP): Change to comma expr for bdmaged cc's.
+ (cp_thing): Add decl for ap, initialize fmt later.
+
+ Fri Oct 22 17:15:01 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-error.c (dump_decl): Handle CONST_DECLs for enum tags.
+
+ * cp-type2.c (my_friendly_abort): Move abortcount to global level.
+
+ * cp-search.c (dfs_pushdecls): Be more helpful in shadowing warning.
+
+ * cp-pt.c (mangle_class_name_for_template): If the last template
+ parameter was also a template class, insert a space so that
+ the mangled name can be used as input for the compiler (i.e.
+ with default_copy_constructor_body).
+
+ Fri Oct 22 16:40:27 1993 Mike Stump (mrs@cygnus.com)
+
+ Handle constructors in templates better.
+
+ * cp-call.c (build_method_call): Use constructor_name_full instead
+ of constructor_name.
+ * cp-cvt.c (convert_to_reference, convert, build_type_conversion_1,
+ build_type_conversion): Ditto.
+ * cp-decl.c (make_temporary_for_reference, grok_reference_init):
+ Ditto.
+ * cp-init.c (expand_default_init, expand_aggr_init_1, build_new):
+ Ditto.
+ * cp-typeck.c (build_modify_expr_1, convert_for_initialization):
+ Ditto.
+ * cp-search.c (lookup_field, lookup_fnfields): Check for short
+ constructor name, as that is how we store it.
+ * cp-decl2.c (constructor_name_full): New routine.
+ * cp-tree.h (constructor_name_full): Declare it.
+ * cp-call.c (build_method_call): Check for either short or the full
+ constructor name.
+
+ Wed Oct 20 17:17:37 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-tree.h: Declare code_as_string.
+
+ * cp-error.c (code_as_string): New function, translates
+ enum tree_code into a string. Very incomplete at the moment.
+
+ * cp-decl.c (lookup_tag): Use cp_error more.
+
+ Tue Oct 19 16:39:20 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-error.c (dump_type_prefix): Do the prefix/suffix thang for
+ ARRAY_TYPE nodes.
+
+ Thu Oct 14 23:56:34 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-gc.c (build_dynamic_cast): Avoid doing runtime work if possible.
+ (build_typeid): Add logic.
+
+ Thu Oct 14 10:56:43 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-gc.c (build_typeid): New function, allegedly returns the
+ Type_info object for the type of an expression, currently does
+ nothing.
+ (get_typeid): New function, allegedly returns the Type_info object
+ for a _TYPE node, currently does nothing.
+ (build_dynamic_cast): New function, supposedly implements
+ run-time checked casting, currently only does what can be done
+ at compile time.
+
+ * cp-parse.y (.kindof_pushlevel): Only push first decl (the variable).
+ (primary): Add dynamic_cast and typeid expressions.
+ (simple_if): Use partially_scoped_stmt again.
+ Makes 'if' condition work.
+
+ * cp-error.c (expr_as_string): Suppress parens on initial call
+ to dump_expr.
+
+ * cp-tree.h: Add decls for Type_info_type_node, build_typeid,
+ get_typeid and build_dynamic_cast.
+
+ * gplus.gperf: Add typeid and dynamic_cast.
+
+ * cp-spew.c (init_spew): Ditto.
+
+ Wed Oct 13 19:15:21 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ Partial implementation of Stroustrup's proposal for declarations in
+ conditions from X3J16/92-0121.
+
+ * cp-parse.y (paren_cond_or_null): New rule, use condition instead
+ of expr.
+ (xcond): Ditto.
+ (condition): New rule, used in the condition parts of if, while, for
+ and switch statements. Allows a restricted set of declarations of
+ the form "type_specifier declarator = expression".
+ (.kindof_pushlevel): Like pushlevel, but pushes all of the decls
+ from the previous binding level into the new one too.
+ (partially_scoped_stmt): Like implicitly_scoped_stmt, but uses
+ .kindof_pushlevel instead of .pushlevel.
+ (simple_if): .pushlevel before condition.
+ (simple_stmt, simple_if ELSE): Ditto, pop binding level.
+ (simple_stmt, simple_if): Ditto.
+ (simple_stmt, WHILE): Ditto.
+ (simple_stmt, forhead.1): .pushlevel before condition, use xcond
+ instead of xexpr, pop binding level.
+ (simple_stmt, forhead.2): Use xcond instead of xexpr, always pop
+ binding level.
+ (simple_stmt, SWITCH): .pushlevel before condition, etc, etc.
+ (forhead.2): always .pushlevel.
+ (datadef): Use cp_error more.
+ (simple_stmt, CASE): Ditto.
+
+ * cp-decl2.c (pushdecls): New function, push all decls in the chain
+ into the current scope.
+
+ Wed Oct 13 12:31:58 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c: Remove redefinition of NULL, as some machines don't
+ like it. Clean up all NULL uses.
+
+ Mon Oct 11 17:21:08 1993 Kung Hsu (kung@cirdan.cygnus.com)
+
+ * cp-decl2.c (finish_file): Fix libg++ build problem of mismatch
+ blocks.
+
+ Mon Oct 11 13:51:05 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ Mon Oct 4 11:49:48 1993 Chip Salzenberg (chip@fin.uucp)
+
+ * cp-typeck.c (build_modify_expr): Check whether recursive calls
+ return error_mark_node.
+
+ Mon Oct 4 12:41:16 1993 Chip Salzenberg (chip@fin.uucp)
+
+ * cp-class.c (finish_struct): Too-long bitfield is an error.
+ * cp-decl.c (grokdeclarator): "inline main()" is an error.
+ (grok_op_properties): Overloaded ?: is an error.
+ (start_enum): Duplicate enum definition is an error.
+
+ Mon Oct 4 12:45:11 1993 Chip Salzenberg (chip@fin.uucp)
+
+ * cp-typeck.c (common_type): Use TYPE_MAIN_VARIANT when preferring
+ long int to int (when width is the same).
+
+ Mon Oct 4 12:46:54 1993 Chip Salzenberg (chip@fin.uucp)
+
+ * cp-typeck.c (convert_for_assignment): Mismatch in signedness
+ of pointer targets should not inhibit warnings for const mismatch.
+
+ Mon Oct 4 12:53:04 1993 Chip Salzenberg (chip@fin.uucp)
+
+ * cp-typeck.c (default_conversion): Convert to unsigned int
+ if original type is unsigned and of greater or equal size.
+
+ Mon Oct 11 13:19:42 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (build_enumerator): Call default_conversion on the VALUE
+ before calling constant_expression_warning.
+
+ Mon Oct 11 10:21:37 1993 Kung Hsu (kung@cirdan.cygnus.com)
+
+ * cp-decl.c (finish_function): fix the mismatch LBB LBE block
+ problem, specifically when compiler generated
+ destructor/constructor (pr2972)
+ * cp-decl2.c (finish_file): same as above
+ * cp-parse.y (compstmt): same as above
+
+ Mon Oct 11 01:08:09 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-error.c (dump_type_suffix): Cope with arrays with unspecified
+ bounds.
+
+ Thu Oct 7 19:35:26 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-error.c: Deal with printing out array DECLs properly.
+ Use dump_char for printing out string literals, too.
+
+Tue Nov 23 18:08:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * dwarfout.c (function_start_label): New function.
+ (output_entry_point_die): Use it.
+ (output_global_subroutine_die, output_local_subroutine_die): Use it.
+
+ * c-common.c (check_format_info): Always use TYPE_MAIN_VARIANT
+ when comparing cur_type against wanted_type.
+
+ * protoize.c (save_def_or_dec): If function's aux info doesn't end
+ with a closeparen, ignore it.
+ (xmalloc, xrealloc): Cast result of malloc.
+
+ * c-typeck.c (build_binary_op): Don't accept complex types
+ for max, min, lt, etc.
+
+Tue Nov 23 18:05:14 1993 Lisa Repka (lisa@MicroUnity.com)
+
+ * reorg.c (rare_destination): Ensure we always correctly handle
+ a null JUMP_LABEL.
+
+Tue Nov 23 17:48:39 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * i960/i960.h (ASM_SPEC): Pass -linkrelax, not -link-relax.
+
+Tue Nov 23 17:35:25 1993 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * arm.c (arm_backwards_branch): Branching to the current insn is a
+ backwards branch.
+
+Tue Nov 23 13:59:24 1993 Hallvard B Furuseth (hbf@durin.uio.no)
+
+ * libgcc2.a (__bb_exit_func): Fix format %*d -> %*ld.
+
+ * c-parse.in, cp-parse.y (maybe_type_qual): Don't fail to set $$.
+
+Tue Nov 23 15:26:28 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine, simplify_shift_const): Add initializations
+ for some uninitialized variables.
+
+ * c-common.c (check_format_info): When we have INTEGER_TYPEs,
+ save result of signed_type or unsigned_type for later
+ comparison with the various forms of char types.
+
+ * expr.c (expand_expr, case SAVE_EXPR): Properly recompute the
+ value of UNSIGNEDP when SAVE_EXPR_RTL is nonzero and we have promoted.
+
+Tue Nov 23 04:14:04 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * dwarfout.c (output_local_subroutine_die): Use the function name
+ from its symbol_ref, not DECL_ASSEMBLER_NAME.
+
+Mon Nov 22 13:59:41 1993 Steve Chamberlain (sac@mole.gnu.ai.mit.edu)
+
+ * final.c (get_attr_length): asm_insn_count takes a body, not an
+ insn.
+
+Sun Nov 21 22:37:12 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/m68k/mot3300.h (ASM_OUTPUT_COMMON, ASM_OUTPUT_LOCAL):
+ Use SIZE, not ROUNDED.
+ (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE): Definitions turned off.
+ (REGISTER_PREFIX, IMMEDIATE_PREFIX): New definitions.
+ (PARM_BOUNDARY): New definition.
+
+Sun Nov 21 15:39:04 1993 Tor Egge (tegge@pvv.unit.no)
+
+ * m88k/dolph.h (SDB_ALLOW_FORWARD_REFERENCES): Define.
+ (SDB_ALLOW_UNKNOWN_REFERENCES): Define.
+ (CPP_PREDEFINES): Redefine.
+ (CPP_DEFAULT): Redefine.
+ (INITIALIZE_TRAMPOLINE): Redefine.
+ * m88k/dolphin.ld: New file.
+ * m88k/t-m88k (realclean): Remove some generated .asm files.
+ * m88k/x-dolph (EXTRA_PARTS): Redefined to also contain gcc.ld.
+ (gcc.ld): Copied from dolphin.ld.
+ (X_CFLAGS): Define __m88k__.
+ * libgcc2.c (__enable_execute_stack): Add DolphinOS version.
+
+Sun Nov 21 01:00:40 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/m68k/isi.h (LIB_SPEC): Use -lm in addition to -lc--
+ not instead of -lc.
+
+ * fix-header.c (write_rbrac): Make added declarations conditional
+ on __cplusplus and nothing else.
+ * fixproto (stdio.h): Reenable adding protos for v*printf.
+
+ * sys-protos.h (authdes_create): Delete arg info.
+ We can't count on having struct sockaddr defined.
+
+ * fixincludes (math.h): When deleting inline sqrt and abs,
+ be flexible about arg name and function body.
+
+ * Makefile.in (stmp-fixproto): Never run fixproto twice.
+
+Sat Nov 20 16:52:15 1993 Jim Wilson (wilson@cygnus.com)
+
+ * stmt.c (warn_if_unused_value): Handle arbitrary number of casts
+ before a modify.
+
+Sat Nov 20 16:38:25 1993 Eric Baur (eric@synnet.com)
+
+ * i386/perform.h (perform_divsi3, perform_modsi3): Add '&' in
+ constraint for DX; explicitly copy arg arg1 to cx.
+
+Sat Nov 20 02:26:28 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (expand_builtin): For sin, cos, fsqrt, alloca, ffs, strlen,
+ strcpy, memcpy, strcmp, memcmp, if args are bad, use expand_call.
+
+ * fix-header.c (write_rbrac): Treat rewinddir like memmove.
+
+Fri Nov 19 18:24:43 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * protoize.c: Remove declarations for malloc and realloc.
+
+ * expr.c (store_field): Convert EXP to MODE before calling
+ store_bit_field.
+
+ * optabs.c (expand_complex_abs): Replace some erroneous
+ uses of MODE with SUBMODE.
+
+ * combine.c (force_to_mode): Don't allow sign-extension of
+ constants when we are narrowing things in an IOR or XOR.
+
+Fri Nov 19 16:42:43 1993 Jim Wilson (wilson@cygnus.com)
+
+ * rs6000.c (output_function_profiler): When TARGET_MINIMAL_TOC,
+ emit .long instead of .tc.
+
+Fri Nov 19 13:22:37 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * configure: Let a host set truncate_target to specify that the
+ installation directory names must be truncated to 14 characters.
+ If set, truncate the target argument.
+
+Fri Nov 19 17:27:58 1993 Holger Teutsch (holger@hotbso.rhein-main.de)
+
+ * clipper.h (HARD_REGNO_MODE_OK): Allow any mode in general regs.
+ Float regs may only hold SFmode and DFmode.
+ (FUNCTION_ARG): Only MODE_INT and MODE_FLOAT with size <= 8 are
+ passed in registers.
+ (FUNCTION_ARG_ADVANCE): Update accordingly.
+ (FUNCTION_ARG_PARTIAL_NREG): Undefine.
+
+ * clipper.md (movsf+1,2,movdf+1,2): Make 'f' preferred register class.
+
+Thu Nov 18 20:09:56 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * fixincludes: When compute DOTS, convert /./ to / to avoid
+ accidentally converting it to /../.
+ * fixinc.dgux, fixinc.svr4: Likewise.
+
+Thu Nov 18 06:14:55 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * function.c (expand_function_end): New arg END_BINDINGS.
+ * c-decl.c (finish_function): Pass new arg to expand_function_end.
+ * cp-decl.c (finish_function): Pass new arg to expand_function_end.
+ Don't call expand_end_bindings here.
+ * integrate.c (output_inline_function):
+ Pass new arg to expand_function_end.
+
+Wed Nov 17 18:54:21 1993 Chip Salzenberg (chip@fin.uucp)
+
+ * objc/objects.c: Include "tconfig.h" before "runtime.h".
+
+Wed Nov 17 19:15:31 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fixincludes (math.h): Add missing quoting of `*' when fixing
+ prototype of `sqr'.
+
+Tue Nov 16 07:15:52 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.h (EXTRA_CONSTRAINT): New macro.
+ (SECONDARY_{INPUT,OUTPUT}_RELOAD_CLASS): Disallow unaligned into float
+ regs.
+ * alpha.md (movdi): Use 'Q' instead of 'm' for FP.
+
+Tue Nov 16 02:06:01 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 2.5.4 released.
+
+ * c-typeck.c (push_init_level): When aligning next struct field,
+ make sure there's another field left.
+
+ * cp-errfn.c: Don't include string.h.
+ (STRDUP): Macro deleted.
+ (cp_thing): Copy strings "by hand".
+
+ * combine.c (force_to_mode): Don't do right-shift in a narrower mode.
+
+Mon Nov 15 01:54:48 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * sdbout.c (sdbout_symbol): If non-static var has static-style RTL,
+ don't output anything for it.
+
+ * Makefile.in (stmp-fixproto): Don't depend on xsys-protos.h.
+ (diff): Don't compare bi-parser.c
+
+ * news.h (NO_DOT_IN_LABEL, NO_DOLLAR_IN_LABEL): Defined.
+
+ * c-typeck.c (push_init_level, really_start_incremental_init):
+ Skip any nameless bitfields at start of record.
+ (process_init_element): Skip any nameless bitfields after the field
+ just processed.
+
+Mon Nov 15 02:09:54 1993 Torbjorn Granlund (tege@blues.cygnus.com)
+
+ * pa.h (RETURN_IN_MEMORY): Define.
+
+Sun Nov 14 17:25:29 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (expand_expr): For TRUTH_AND_EXPR, TRUTH_OR_EXPR
+ and TRUTH_XOR_EXPR, if result mode doesn't match operands,
+ don't use subtarget.
+
+ * c-typeck.c (convert_for_assignment): Fix typo (codel => coder).
+
+Sun Nov 14 12:45:37 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (assign_parms): Clear STACK_PARM when we have a
+ pass-by-pointer parm that we load into a pseudo.
+
+ * flow.c (flow_analysis): Fix bug in previous change.
+
+ * fold-const.c (twoval_comparison_p): Do nothing for SAVE_EXPR, at
+ least for now.
+
+ * reload.c (push_reload): Allow RELOAD_FOR_INPUT with a secondary
+ reload the same class as the input if the modes differ.
+
+ * expr.c (store_expr): Convert constants to proper mode in two places.
+
+ * sh.h (HAVE_VPRINTF): Delete from here.
+ * xm-sh.h (HAVE_VPRINTF): New macro.
+
+Sun Nov 14 04:28:56 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/i860/i860.h (SECONDARY_INPUT_RELOAD_CLASS):
+ Moving any kind of integer cst to float reg needs intermediate.
+
+ * sys-protos.h (getmntent): Delete the arg decls
+ because BSD 4.4 and Sunos disagree on them.
+
+Sat Nov 13 23:06:42 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/mips/mips.c (function_arg, function_arg_advance):
+ In default case, handle complex modes much like BLKmode.
+ (function_arg_partial_nregs): Likewise.
+
+Sat Nov 13 22:31:48 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.h (CPP_SPEC): Always define __LANGUAGE_C__ unless assembler.
+ Define __cplusplus for C++.
+
+ * alpha.md (movsf, movdf): Add 'G' to constraint for operand 1
+ when operand 0 is a register and support it in alternative 0.
+
+ * stmt.c (expand_end_bindings): Use emit_move_insn instead of
+ gen_move_insn in case nonlocal_goto_handler_slot is not a valid memref.
+
+ * flow.c (find_basic_blocks): When starting new basic block
+ for a CALL_INSN in the presence of nonlocal labels, don't
+ get confused with following CLOBBER.
+ (flow_analysis): Use same logic as find_basic_block to see when
+ the insn after a CALL_INSN starts a new basic block.
+
+ * expmed.c (store_split_bit_field): Properly load a constant VALUE
+ into a WORD_MODE pseudo.
+
+Sat Nov 13 18:27:43 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/ns32k/ns32k.md (movsi): Handle moves to fp reg.
+ Handle const_double as operand 1.
+
+ * Makefile.in (diff): Fix typo in name gcc.??s.
+
+Fri Nov 12 08:34:58 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * dbxout.c (dbxout_type_field): Skip fields with variable
+ position and/or size instead of crashing on them.
+
+Fri Nov 12 22:49:50 1993 Pat Rankin (rankin@eql.caltech.edu)
+
+ * bi-arity.c, bi-opcode.c, bi-opname.c (main): Flush stdout and
+ and check for errors prior to termination; end with call to exit
+ rather than return from main, as with gen*.c.
+ * bi-arity.c, bi-lexer.c, bi-opcode.c, bi-opname.c, bi-parser.y:
+ Use FATAL_EXIT_CODE rather than hardcoded 1 for fatal exit code.
+
+Fri Nov 12 18:41:51 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gstdarg.h, gvarargs.h: Test __bsdi__ like __BSD_NET2__.
+
+ * pa.h (FUNCTION_ARG_BOUNDARY): Fix return value for 64bit
+ pass by value structures.
+
+ * fix-header.c (write_rbrac): Handle v*printf like memmove.
+
+Fri Nov 12 08:53:47 1993 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * arm.md (comparison): Don't emit invalid optimization
+ for (set (reg) (comparison)) and (set (reg) (neg (comparison)))
+ when comparison is LT.
+
+ * arm.c (pattern_really_clobbers_lr): Setting a subreg of a mem is
+ valid and safe.
+
+Fri Nov 12 08:38:22 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * m68k/hpux7.h: Add directory name to #include of hp320.h.
+
+Thu Nov 11 00:00:55 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 2.5.3 released.
+
+ * fix-header.c, gen-protos.c (fancy_abort): New function.
+
+ * c-typeck.c (mark_addressable): Handle REALPART_EXPR and
+ IMAGPART_EXPR.
+
+ * integrate.h (global_const_equiv_map_size): Declared.
+
+ * dbxout.c (dbxout_symbol): If it's C++, don't check the
+ DECL_SOURCE_LINE of a typedef.
+ (dbxout_parms): Fix previous change.
+
+Wed Nov 10 10:33:28 1993 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * fixproto (rel_source_subdir): Prune out redundant /subdir/../ to
+ prevent recursion.
+
+Wed Nov 10 22:30:16 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/ns32k/encore.h (ASM_OUTPUT_ASCII): Declare i.
+
+Wed Nov 10 16:18:19 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (grokvardecl): Undo change of Jan 15 1993 which
+ tried to implement the "one definition rule". The duplicate_decls
+ call in pushdecl does implement this; grokvardecl got some bad hits.
+
+Wed Nov 10 08:44:17 1993 Niklas Hallqvist (niklas@appli.se)
+
+ * cp-search.c (compute_visibility): Revert Tiemann's patch of
+ Nov 5. Instead check that privately inherited entities don't
+ get restricted visibility if the private derivation is a
+ shallow derivation (i.e. one leading to the most derived
+ class) and we're actually in the most derived class' scope.
+
+ * cp-search.c (dfs_pushdecls): Don't be confused by the fact that
+ overloaded methods from an outer scope almost looks like an
+ envelope.
+
+Wed Nov 10 18:55:22 1993 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * fixincludes: Copy files needed for other files at the very end.
+
+ * arm.md (reload patterns for mla instruction): New.
+
+Wed Nov 10 18:17:40 1993 Jim Wilson (wilson@cygnus.com)
+
+ * dbxout.c (dbxout_parms): For parms passed via invisible
+ reference, accept any reg except FP, SP, and AP.
+
+ * unroll.c (unroll_loop): Set global_const_equiv_map_size.
+
+Wed Nov 10 17:52:33 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (subst_prev_insn): New variable.
+ (try_combine): Set it.
+ (get_last_value): Use subst_prev_insn if set instead of
+ looking for the first insn before SUBST_LOW_CUID.
+
+ * integrate.c (global_const_equiv_map_size): New variable.
+ (expand_inline_function): Set it.
+ (expand_inline_function, copy_rtx_and_substitute, try_constants):
+ Never access const_equiv_map without checking for out-of-range.
+ (mark_stores): Likewise.
+
+ * alpha.md (smaxdi3): Was incorrectly called maxdi3.
+
+ * rs6000.h (LINK_SPEC): Don't pass -btextro if -r.
+
+ * alpha/osf12.h: New file.
+ * configure (alpha-dec-osf1.2): New case, to use new file.
+
+ * rs6000.md (sqrtdf2): Fix typo in extra condition.
+ (plus/eq pattern): Fix typo: "addze" was "adddze".
+
+Wed Nov 10 12:32:56 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * expmed.c (expand_divmod): If rem_flag, always force op0 to a
+ register.
+
+ * expr.c (expand_expr): Use a smaller alignment when reading from
+ a field with a variable offset.
+
+Wed Nov 10 01:28:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (expand_assignment): Use a smaller alignment when storing
+ into a field with a variable offset.
+
+ * fixincludes (math.h): Delete inline definitions for sqr.
+
+Tue Nov 9 15:33:45 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-method.c (hack_identifier): Undo rfg's earlier patch.
+
+Tue Nov 9 19:30:02 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload1.c (reload) [SMALL_REGISTER_CLASSES]: Try, at least,
+ to avoid 2-groups whose second register is explicitly used.
+
+Tue Nov 9 19:08:47 1993 Jim Wilson (wilson@cygnus.com)
+
+ * mips.md (adddi3): Use DImode not SImode in force_reg call.
+
+ * mips.c (PIC_OFFSET_TABLE_MASK): New macro.
+ (function_epilogue): When -mabicalls, ignore
+ PIC_OFFSET_TABLE_REGNUM when calculating load_only_r31.
+
+ * loop.c (strength_reduce): Accept VOIDmode initial values.
+
+Tue Nov 9 09:23:31 1993 Torbjorn Granlund (tege@mole.gnu.ai.mit.edu)
+
+ * pa.md (negscc): Add mode for NEG.
+
+Tue Nov 9 12:51:54 1993 John Hassey (hassey@dg-rtp.dg.com)
+
+ * m88k.md ("cmpsf" & "cmpdf"): Undo inadvertent change included
+ with CCEVENmode change.
+
+Tue Nov 9 01:31:58 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes (loop on $required): When a file is copied
+ because another file needs it, scan it for what files it needs.
+
+ * fix-header.c (write_rbrac): When adding proto for memmove,
+ put it inside #ifndef memmove.
+
+Mon Nov 8 16:50:49 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * sdbout.c (sdbout_init) [RMS_QUICK_HACK_1]: Call sdbout_symbol
+ for __vtbl_ptr_type.
+
+ * cp-decl.c (init_decl_processing): Undo previous change.
+
+ * c-typeck.c (build_binary_op): Warn for ordered compare of ptr with 0
+ only if pedantic in both cases.
+
+Mon Nov 8 18:25:06 1993 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.h (ASM_FILE_START): Emit filename directive.
+
+Sun Nov 7 00:24:04 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (mostlyclean): Delete fixhdr.ready here.
+ (clean): Not here.
+
+ * scan-decls.c (scan_decls): After seeing an extern variable
+ declaration, goto new_statement to read a new token, rather
+ than going to handle_statement (which uses the current token).
+
+Sat Nov 6 19:40:22 1993 Pat Rankin (rankin@eql.caltech.edu)
+
+ * config/vax/vms.h (__MAIN_NAME): Define as " main(" rather
+ rather than " main (" to reflect current cc1plus.
+
+ * config/vax/vms.h: Add __GNUC_MINOR__=5 to CPP_PREDEFINES.
+
+Sat Nov 6 22:54:25 1993 Tor Egge (tegge@pvv.unit.no)
+
+ * m88k.c (partial_ccmode_register_operand, even_relop)
+ (odd_relop): New functions, for support of CCEVENmode.
+ (print_operand, new case '!'): Revert following condition.
+ * m88k.h (EXTRA_CC_MODES, EXTRA_CC_NAMES, SELECT_CC_MODE):
+ New macros to define CCEVENmode.
+ * m88k.md: Handle CCEVENmode as a new mode. Logical operations
+ on CCmode registers now results in CCEVENmode.
+ Add patterns for jumps and ext's for CCEVENmode.
+ (cmpsf, cmpdf): Use reg 65 and clobber reg 64.
+
+Sat Nov 6 17:07:54 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cp-decl.c (init_decl_processing) [RMS_QUICK_HACK_1]:
+ If sdb output, call sdbout_symbol for vtable_entry_type.
+ * config/m88k/dgux.h (RMS_QUICK_HACK_1): Defined.
+
+Sat Nov 6 12:32:31 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * unroll.c (unroll_loop): Don't unroll loop if jump has combined
+ the original loop start label with another label.
+
+Sat Nov 6 05:01:31 1993 Chris Smith (csmith@convex.com)
+
+ * convex.md (untyped_call, blockage): Add new patterns.
+
+Sat Nov 6 03:11:46 1993 Noah Friedman (friedman@gnu.ai.mit.edu)
+
+ * just-fixinc: Rename fixed native limits.h to syslimits.h (or
+ install gsyslimits.h) before renaming gcc's limits.h from tmpfoo
+ directory.
+
+Sat Nov 6 00:07:41 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (emit_move_insn_1): Push the components of a complex
+ in proper order: imag part has higher address.
+
+Fri Nov 5 16:23:51 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * mips.c (mips_abicalls): Change type to enum mips_abicalls_type.
+ (override_options): Use MIPS_ABICALLS_{NO,YES} instead of
+ ABICALLS_{NO,YES}.
+ * mips.h (enum mips_abicalls_type): New type.
+ (mips_abicalls_attr): New define.
+ (mips_abicalls): Change type to enum mips_abicalls_type.
+ * mips.md (abicalls): Use mips_abicalls_attr not mips_abicalls.
+
+Fri Nov 5 20:34:19 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixproto (stdio.h): Don't add protos for vprintf, vfprintf, vsprintf.
+
+Fri Nov 5 20:32:53 1993 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * config/pa/pa.md (decrement_and_branch_until_zero):
+ Add missing `return'.
+
+Fri Nov 5 16:08:34 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * listing: Handle i386-linux like m68020.
+ Pass compilation options thru an awk variable, not as ordinary args.
+
+ * cccp.c (safe_read, safe_write): Handle EINTR.
+ (output_line_command): Handle NO_IMPLICIT_EXTERN_C here.
+ (main): Not here.
+
+ * protoize.c (safe_read, safe_write): Handle EINTR.
+ (safe_write): Return right away after safe_write.
+
+Fri Nov 5 11:40:59 1993 Jeff Law (law@snake.cs.utah.edu)
+
+ * pa-ghpux.h (NO_IMPLICIT_EXTERN_C): Define.
+ * pa-hpux.h (NO_IMPLICIT_EXTERN_C): Define.
+
+Fri Nov 5 09:45:20 1993 Kresten Krab Thorup (krab@viking)
+
+ * objc/archive.c (objc_read_string): Allocate string properly.
+ * objc/hash.h (compare_strings): Check for null pointers.
+
+Fri Nov 5 11:29:26 1993 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): Use
+ REAL_ARITHMETIC macros including hex for special values.
+
+Fri Nov 5 10:26:34 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-call.c (build_method_call): For unions, don't use get_binfo and
+ convert_pointer_to_real, since unions can't be involved in complex MI
+ situations. (Fixes union ctor crash, and completes Sep 27 fix.)
+
+Fri Nov 5 07:39:00 1993 Michael Tiemann (tiemann@blues.cygnus.com)
+
+ * cp-search.c (compute_visibility): Don't lose access to public
+ members from base classes of base classes.
+
+ * cp-search.c (get_base_distance): Initialize BASETYPE_PATH before
+ using. Also, initialize RVAL from get_base_distance_recursive.
+
+Fri Nov 5 05:48:04 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/i860/paragon.h (SIZE_TYPE): #undef it.
+
+ * config/m88k/dgux.h (LIB_SPEC): Handle -msvr4.
+ (GPLUSPLUS_INCLUDE_DIR): Definition and #undef deleted.
+
+ * cccp.c (main): Handle NO_IMPLICIT_EXTERN_C.
+
+Fri Nov 5 03:11:05 1993 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * config/m68k/m68k.h (RTX_COST): Return actual costs for
+ multiplication, not costs for theoretical special cases that are
+ not handled in the md.
+
+Fri Nov 5 00:42:09 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * emit-rtl.c (gen_highpart): If arg is function value hard reg,
+ return a subreg of it (as in gen_lowpart_common).
+
+ * integrate.c (expand_inline_function): Handle CONCAT as rtl for parm.
+ (copy_rtx_and_substitute): For subreg, handle case where the reg
+ inside turns into a CONCAT.
+
+ * configure: Treat hppa1.[01]-hpux8.0[01] like hppa1.[01]-hpux8.02.
+
+ * fixproto: Don't scan sub-directories whose names end in CC
+ or contain ++ - these are probably C++ directories.
+
+Thu Nov 4 12:02:04 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * integrate.c (expand_inline_function): Don't call
+ push_temp_slots, free_temp_slots, and pop_temp_slots when handling
+ parameters, because they might end up in a temp slot.
+
+Thu Nov 4 15:00:38 1993 Samuel Figueroa (figueroa@cs.nyu.edu)
+
+ * i386/os2.h, i386/xm-os2.h: New files.
+
+Thu Nov 4 14:36:54 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (finish_enum): Undo previous change.
+
+Thu Nov 4 13:30:16 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * loop.c (strength_reduce): Ignore initial value if it is the
+ wrong mode.
+ (record_initial): Don't ignore any set of the register.
+
+ * rs6000.md (movdf): Don't have reload choose alternative of
+ loading a constant into a GPR.
+
+ * reload.c (find_reloads, case 'o'): A pseudo is not always
+ an offsettable memref.
+ (find_reloads): If we reload a constant into a register via
+ memory, count it as two reloads.
+
+ * function.c (expand_function_start): If not optimizing, ensure
+ we mark context display regs as live for the entire function.
+
+Thu Nov 4 02:24:22 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * tree.h (DECL_IN_TEXT_SECTION): New macro.
+ * varasm.c (assemble_variable): Set DECL_IN_TEXT_SECTION.
+ * dbxout.c (dbxout_symbol_location): Test DECL_IN_TEXT_SECTION.
+
+Wed Nov 3 23:59:48 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_function_call): Initialize fundecl to 0.
+
+Wed Nov 3 16:34:01 1993 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * pa.h (REGISTER_MOVE_COST): Decrease cost for move from
+ SHIFT_REGS to avoid regclass overflow.
+
+Wed Nov 3 15:35:44 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/m68k/m68k.c (output_move_double): Fix up the test for overlap
+ of source address with operands[0].
+
+ * regclass.c (regclass): Consider commutativity even when
+ one arg is a constant.
+
+Wed Nov 3 12:06:23 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * expmed.c (expand_divmod): Use target as copy_to_suggested_reg
+ argument only if it has the same mode as op0.
+
+Wed Nov 3 04:58:26 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * protoize.c (safe_write, safe_read): Really use arg DESC.
+
+ * libgcc2.c (exit): Fix declaration of _exit.
+
+ * c-common.c (check_format_info): Make warning nicer for mismatch
+ of int vs long, etc.
+ Don't warn if field width is an unsigned int.
+
+ * c-decl.c (finish_enum): Always make an enum signed if it will fit.
+
+Wed Nov 3 14:23:52 1993 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * cse.c (cse_insn): Call `invalidate' also for STRICT_LOW_PART and
+ ZERO_EXTRACT (three places).
+ (invalidate_from_clobbers): Likewise (two places).
+ (cse_around_loop): Likewise.
+ (invalidate_skipped_set): Likewise.
+ (cse_set_around_loop): Likewise.
+
+Wed Nov 3 03:56:55 1993 Paul Eggert (eggert@twinsun.com)
+
+ * dbxout.c (dbxout_type): Print `-2' instead of `0037777777776'
+ for an enumeration constant whose value is -2;
+ otherwise, GDB 4.11 rejects the type.
+
+Wed Nov 3 04:35:13 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (fix-header, gen-protos): Link with HOST_LIBS.
+ Depend on HOST_LIBDEPS.
+
+Wed Nov 3 00:07:18 1993 Per Bothner (bothner@wombat.gnu.ai.mit.edu)
+
+ * fixproto: When checking for uses of _flsbuf, make sure to
+ not match (say) __flsbuf or other non-word _flsbuf strings.
+ * fixproto: Be more robust when checking for files indirectly
+ needed (via #include directives). E.g. handle "../foo/bar.h"
+ properly, and silently ignore missing include files.
+
+Tue Nov 2 17:37:39 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (do_spec_1): Use spec_version for %v, not version_string.
+ Distinguish %v1 and %v2.
+ (default_compilers): For __GNUC_MINOR__, use %v2.
+ For __GNUC__ and __GNUG__, use %v1.
+
+ * protoize.c (safe_read): New function.
+ (process_aux_info_file, edit_file): Use safe_read.
+
+ * cccp.c (safe_read): New function.
+ (main, finclude, check_precompiled): Use safe_read.
+
+Tue Nov 2 14:31:42 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Don't remove /**/ from X11/Xlibint.h or
+ X11/extensions/multibufst.h; unnecessary.
+
+Tue Nov 2 07:20:12 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * optabs.c (init_optabs): Function `ffs' takes `int', not mode that
+ is BITS_PER_WORD wide.
+
+Tue Nov 2 02:53:26 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cp-typeck.c (comptypes): Fix typo in changing STRICT from 2 to 1.
+
+ * protoize.c (edit_file): Use safe_write.
+ (safe_write): New subroutine.
+
+ * calls.c (expand_call): Discard __ prefix like _ or __x.
+
+ * objc/objects.c: Include tconfig.h.
+
+Mon Nov 1 23:34:46 1993 Rainer Orth (ro@anemone.techfak.uni-bielefeld.de)
+
+ * fixincludes (sys/stat.h) fix fchmod prototype, first arg is
+ int, not char * [AIX 3.2.4]
+ (rpc/svc.h): avoid nested comments [Ultrix 4.3]
+ (stdio.h, stdlib.h): fixed getopt prototypes to match POSIX.2
+ [DEC Alpha OSF/1 1.3]
+
+Mon Nov 1 11:42:29 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * fixincludes: Fix <sys/limits.h> like <limits.h>.
+
+ * fixincludes: Unquote 'f' in #define _IO. Fix elf.h like
+ elf_abi.h. For Irix 5.
+
+Mon Nov 1 15:15:38 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure (mips-sgi-irix5*): Add fixincludes=Makefile.in.
+
+ * fixproto (setjmp.h): Don't require siglongjmp and sigsetjmp.
+ They need sigjmp_buf, and are missing on many systems.
+
+ * Makefile.in (stmp-fixproto): Print a notice that warnings and errors
+ from fixproto are normal.
+ (distdir): Avoid spurious output from gcc.texi version number check.
+ (diff): New target.
+
+Mon Nov 1 15:19:09 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Don't remove /**/ from X11/xmd.h; breaks gcc
+ -traditional on some systems.
+
+Mon Nov 1 07:38:58 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu
+
+ * rs6000.md: Add set_attr for "length" when we are going to split
+ an insn at output time.
+
+ * rs6000.md (bdn/bdz): Fix typo in checking for when we
+ need to split.
+
+ * rs6000.md (mulsi3): Make alternatives be "mq" and "no_mq"
+ instead of "power" and "powerpc". Only allow one pattern (either
+ with or without the clobber of MQ) to match.
+
+ * stmt.c (expand_decl_init): If CONST_DECL, don't generate any
+ code, but call expand_expr if DECL_INITIAL is a constant.
+
+Mon Nov 1 06:17:16 1993 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * m68k.md (divhisi3, udivhisi3, modhisi3, umodhi3): Comment out.
+ (divhisi3, udivhisi3, modhisi3, umodhi3 recognizers): Comment out.
+
+ * expmed.c (synth_mult): When factoring T, break from loop after
+ first factor.
+ (expand_mult): Increase max cost to 12 again.
+
+Mon Nov 1 01:06:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (safe_write): New function.
+ (write_output): Use safe_write.
+
+Mon Nov 1 01:06:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 2.5.2 released.
+
+ * cccp.c (do_ident): Fix previous change.
+
+Sun Oct 31 14:41:40 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 2.5.1 released.
+
+ * cccp.c (do_ident): Substitute macros and output here.
+ (directive_table): Turn off the pass_thru field for #ident.
+
+ * c-common.c (shorten_compare): Undo previous change.
+ Instead, just suppress warnings if both args are constant.
+
+ * config/m68k/m68k.md (extzv, and its recognizer):
+ If width is 32, don't set CC_NOT_NEGATIVE.
+ If width is variable, clear the CC status.
+
+ * config/m68k/m68k.c (output_move_double): Extend the special case
+ for *--sp = sp[N] to handle 12 bytes as well as 8 bytes.
+
+Sun Oct 31 17:02:13 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-init.c (expand_aggr_init_1): When unswitching a COND_EXPR
+ initializer (i.e. int a = b ? 1 : 0 => int a; b ? a=1 : a=0),
+ set TREE_SIDE_EFFECTS on the result.
+
+Sun Oct 31 13:33:46 1993 Jim Wilson (wilson@cygnus.com)
+
+ * expr.c (do_store_flag): For equality test of a single bit, use
+ subtarget instead of target in calls.
+
+Sat Oct 30 17:58:37 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/m68k/hpux7.h: New file.
+ * configure (m68k-hp-hpux7*): New alternative.
+
+ * c-common.c (shorten_compare): Do nothing if both args constant.
+
+ * config.sub: Re-add hitachi to list of companies not to treat
+ as OS names.
+
+ * expr.c (convert_move): When extending to multi-word register
+ via its low word, clobber the whole thing.
+
+ * config/i386/i386.c (output_move_double): Extend the special case
+ for *--sp = sp[N] to handle 12 bytes as well as 8 bytes.
+
+Sat Oct 30 17:21:33 1993 Atsushi Furuta (furuta@sra.co.jp)
+
+ * pa-ghiux.h, pa-hiux.h, pa1-ghiux.h: New files, for Hitachi H3050/RX.
+ * pa1-hiux.h, x-pa-hiux, xm-pahiux.h: Likewise.
+ * config.sub, configure: Add H3050/RX support.
+
+Sat Oct 30 03:40:08 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/pa/pa.c (output_dbra): Fix argument number in addi at end.
+
+ * tree.h (enum built_in_function): Added END_BUILTINS to delimit
+ standard from language-specific builtins.
+
+ * toplev.c (rest_of_compilation): When an `extern inline' is not
+ really inline, clear DECL_INITIAL so we don't complain about
+ a subsequent non-extern definition.
+ * c-decl.c (finish_function): If rest_of_compilation set DECL_INITIAL
+ to null, leave it null.
+
+ * c-common.c (convert_and_check): Don't warn converting 0xff
+ to a signed char, etc., unless pedantic.
+
+ * Makefile.in (mainversion): New variable.
+ (distdir): Use mainversion when verifying gcc.texi has been updated.
+
+Sat Oct 30 03:12:54 1993 Torbjorn Granlund (tege@cygnus.com)
+
+ * m68k.md (mulsidi3 patterns): Fix typo, LSHIFTRT was ASHIFT.
+
+Fri Oct 29 12:06:09 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixinc.svr4 (sys/stat.h): Don't change definitions into
+ prototypes if they may already be in prototype form.
+
+Fri Oct 29 16:50:33 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/i386/linux.h (LIB_SPEC): Use -lieee if -mieee-fp.
+
+Fri Oct 29 13:04:16 1993 Arne H. Juul (arnej@fm.unit.no)
+
+ * mips/iris5.h (LINK_SPEC): Pass -no_unresolved if -call_shared.
+
+Fri Oct 29 12:52:54 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.md (addsf3, subsf3, mulsf3, divsf3): Put POWERPC first,
+ then POWER.
+
+ * mips/iris5.h ({DBX,SDB,MIPS}_DEBUGGING_INFO): Turn off until working.
+
+Fri Oct 29 12:15:12 1993 Minh Tran-Le (tranle@intellicorp.com)
+
+ * i386/xm-aix.h: Define HAVE_PUTENV for AIX PS/2.
+
+Fri Oct 29 11:49:46 1993 DJ Delorie (dj@ctron.com)
+
+ * i386/go32.h: Add support for coff-based ctor/dtor handling.
+
+Thu Oct 28 21:33:22 1993 Kresten Krab Thorup (krab@next.com)
+
+ * objc-act.c (check_methods_accessible): Fix bug in
+ -Wno-protocol. Reset chain to bottom class for each search.
+
+Thu Oct 28 21:30:38 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-parse.in (init): Remove extraneous pop_momentary in error case.
+
+Thu Oct 28 19:01:33 1993 Ron Guilmette (rfg@netcom.com)
+
+ * cp-method.c (hack_identifier): If an overloaded identifier
+ can only mean one thing, it can only mean one thing.
+
+Thu Oct 28 18:52:15 1993 John F Carr (jfc@mit.edu)
+
+ * cp-typeck.c (get_member_function_from_ptrfunc): Convert delta
+ to size_t before adding to pointer.
+
+Thu Oct 28 18:43:41 1993 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * arm.h (ENCODE_SECTION_INFO): Use DECL_RTL for DECLs.
+
+Wed Oct 27 20:58:31 1993 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * pa.c (emit_move_sequence): Fix typo, `Pmode' was `mode'.
+
+Wed Oct 27 00:01:06 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cse.c (cse_insn): When using src_related, copy the rtx.
+ Likewise for src_eqv_here.
+
+ * c-typeck.c (output_pending_init_elements): Don't crash if
+ constructor_unfilled_fields is 0.
+
+ * fixincludes (bsd/sys/wait.h): Undo previous change.
+
+ * config/m68k/xm-amix.h (abort): Don't use fancy_abort.
+ (alloca): In GCC 1, define as __builtin_alloca.
+
+ * config/m68k/amix.h (ASM_GENERATE_INTERNAL_LABEL)
+ (ASM_OUTPUT_INTERNAL_LABEL): #if 0 deleted, to reenable these.
+ (NO_DOT_IN_LABEL): Defined.
+ (NO_DOLLAR_IN_LABEL): Undefined.
+
+ * function.c (assign_parms): If parmreg is a CONCAT, handle the
+ case where stack_parm is 0.
+
+ * expr.c (do_jump): Use do_jump_by_parts_equality for complex compares.
+
+ * c-typeck.c (build_c_cast): When making union constructor,
+ copy TREE_CONSTANT from the given value.
+ (initializer_constant_valid_p): Special handling for "constant"
+ union constructor.
+
+ * bytecode.def: Rename dup to duplicate.
+ * expr.c (expand_assignment): Use duplicate.
+ (bc_expand_expr): Likewise.
+ (bc_expand_constructor): Likewise.
+
+ * print-tree.c (print_node_brief): Use unsigned char to print
+ the bytes of a real constant.
+
+ * expmed.c (store_bit_field): When calling operand_subword_force,
+ if VALUE has a non-void mode, pass that mode.
+
+ * config/m68k/amix.h (NO_DOLLAR_IN_LABEL): Defined.
+
+Tue Oct 26 19:05:36 1993 John F Carr (jfc@mit.edu)
+
+ * rs6000.c (rs6000_override_options): Support -mcpu=rsc1.
+
+Tue Oct 26 19:01:08 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (deduced.h): Add -I. and -I$(srcdir).
+
+ * scan-types.sh (CC): Move a " to avoid shell error.
+
+ * config.sub (paragon): New alias.
+ * configure (i860-*-osf*): New alternative.
+ * gstdarg.h, gvarargs.h [__i860__]: Add to little-endian list.
+ * libgcc2.c (___builtin_saveregs): New alternative for __PARAGON__.
+ * va-i860.h: Treat __PARAGON__ like __SVR4__.
+ (va_dcl) [__PARAGON__]: Declare va_alist.
+ * paragon.h, xm-paragon.h: New files.
+
+Tue Oct 26 18:58:49 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fix-header.c: Delete duplicate definition of "buf".
+ * fix-header.c, gen-protos.c, scan-decls.c, scan.c: Include hconfig.h.
+ * scan-decls.c: Remove unused #ifdef OLD.
+
+ * Makefile.in (gen-protos.o, scan.o, fix-header.o, scan-decls.o):
+ Add rule to compile using $(HOST_CC).
+ Show using hconfig.h.
+
+ * rs6000.md (movsi): Can copy a TOC address into a register.
+
+Tue Oct 26 15:03:07 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (default_compilers): Define __GNUC_MINOR__, using %v.
+ (do_spec_1): Implement %v.
+
+Tue Oct 26 11:06:59 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-lex.c (consume_string): Handle "\"" and '\''.
+
+Tue Oct 26 13:44:17 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * Makefile.in (fix-header.o): Depend on fix-header.c.
+ (scan-decls.o): New target.
+ (gen-protos.o, scan.o): New targets.
+
+ * Makefile.in (gen-protos, fix_header): Add $(HOST_CFLAGS) and
+ $(HOST_LDFLAGS).
+
+ * x-sysv (OLDCC): Add -XNh1500.
+ * x-mips: Likewise.
+
+Tue Oct 26 12:21:06 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * fixincludes: Fix NeXT <sys/wait.h> problem in <bsd/sys/wait.h>
+ as well, since that is where the file is in NeXTStep 3.0.
+
+Tue Oct 26 07:23:08 1993 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * expmed.c (init_expmed): Use register 10000, not FIRST_PSEUDO_REGISTER
+ that gets special treatment in rtx_cost.
+ (expand_mult): Decrease max cost to 8.
+
+ * c-typeck.c (build_binary_op): For TRUNC_MOD_EXPR and FLOOR_MOD_EXPR,
+ set common.
+
+Tue Oct 26 01:59:17 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * protoize.c [__NeXT__]: Don't declare setjmp or longjmp.
+
+ * configure: Ignore --verbose option if specified.
+
+ * expr.c (emit_move_insn_1): Don't call group_insns
+ when X is a CONCAT.
+ (emit_move_insn_1, case CONJ_EXPR and COMPLEX_EXPR): Likewise.
+
+ * fixproto (signal.h): Add prototypes only for kill and raise.
+ Not for the POSIX signal functions.
+ (sys/resource.h): Delete special handling for this file.
+
+ * c-typeck.c (push_init_level): Align here for element of record.
+ (process_init_element): Not here (was before call to push_init_level).
+
+ * scan-types.sh: Expect GCC source dir as argument.
+ In dummy.c, use gstddef.h and gstdarg.h, not stddef.h and stdarg.h.
+ * Makefile.in (deduced.h): Pass GCC source dir to scan-types.sh.
+
+Mon Oct 25 23:23:26 1993 Torbjorn Granlund (tege@blues.cygnus.com)
+
+ * c-typeck.c (build_binary_op): For TRUNC_MOD_EXPR and FLOOR_MOD_EXPR,
+ don't shorten when divisor might be -1.
+
+Mon Oct 25 23:45:20 1993 Minh Tran-Le (tranle@intellicorp.com)
+
+ * seq-sysv3.h (CPP_SPEC): Define _SEQUENT_ to be compatible with cc.
+ (INVOKE__main): Defined.
+ (HAVE_ATEXIT): Defined.
+
+ * configure (i[34]86-sequent-sysv): Use fixinc.srv4 and define
+ broken_install.
+
+Mon Oct 25 18:53:51 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case PLACEHOLDER_EXPR): Fix typos.
+
+Mon Oct 25 16:25:58 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * scan.c (scan_string, skip_spaces): Add newline before fn name.
+
+ * scan-decls.c (scan_decls): When reading parameter list,
+ handle whitespace differently, and keep track of line number.
+
+ * config/i386/x-linux (STMP_FIXPROTO): Define as empty.
+
+Mon Oct 25 13:22:37 1993 Kaveh R. Ghazi (ghazi@caip.rutgers.edu)
+
+ * fixincludes: Fix bad S_IS* macros in <sys/stat.h> on m88k-sysv3.
+
+Mon Oct 25 22:34:12 BST 1993 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * fixincludes: Remove nested brackets in change of Oct 21.
+ Fix token pasting operator in ARM/RISCiX include files.
+
+Mon Oct 25 13:01:52 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * sparc.h (LONG_DOUBLE_TYPE_SIZE): Don't define here.
+ * sol2.h (LONG_DOUBLE_TYPE_SIZE): Do define here.
+
+ * configure (mips-sgi-irix5): Don't use collect.
+
+Sun Oct 24 14:15:12 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * libgcc2.c (L_bb): Undef NULL before including <stdio.h>.
+
+Sun Oct 24 03:04:53 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (g++.o): New target.
+
+ * varasm.c (assemble_variable): Set last_assemble_variable_decl.
+ (last_assemble_variable_decl): New variable.
+ * toplev.c (rest_of_decl_compilation): Test that var.
+
+Sat Oct 23 20:28:13 1993 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
+
+ * configure (mips-sgi-irix5): Uncomment.
+ * iris5.h: Replace with working version.
+ * xm-iris5.h: New file.
+
+ * mips.c (mips_abicalls): New variable.
+ (override_options): Set mips_abicalls. Allow '^' as print operand
+ punctuation character.
+ (print_operand): Add support for '^'.
+ (mips_asm_file_start): Use ABICALLS_ASM_OP instead of ".abicalls".
+ (compute_frame_size): Handle TARGET_ABICALLS case.
+ (mips_expand_prologue): Likewise.
+ * mips.h (mips_abicalls): Declare new variable.
+ (PIC_FUNCTION_ADDR_REGNUM): New macro.
+ (STARTING_FRAME_OFFSET): Handle TARGET_ABICALLS case.
+ * mips.md (abicalls): New attribute.
+ (define_delay): Don't fill call delay slots when TARGET_ABICALLS.
+ (call_internal3, call_value_internal3): Renamed from
+ call_internal2 and call_value_internal2.
+ (call_internal2, call_value_internal2): New call patterns for
+ TARGET_ABICALL case.
+ (call_internal4, call_value_internal4): Likewise.
+
+Sat Oct 23 00:06:14 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (deduced.h): Depend on GCC_PASSES and stmp-int-hdrs.
+ (xsys-protos.h): Depend on GCC_PASSES.
+ (fixhdr.ready): New target.
+ (stmp-fixproto): Depend on fixhdr.ready, not fix-header itself.
+ (clean): Delete fixhdr.ready.
+
+Fri Oct 22 01:20:29 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fix-header.c: Renamed from patch-header.c.
+ (progname): Change name.
+ * fixproto: Use fix-header.
+ * Makefile.in (fix-header, fix-header.o): Renamed from patch-header*.
+ (stmp-fixproto, mostlyclean): Rename references to them.
+
+ * expr.c (store_field): In BLKmode case, return blk_object.
+
+ * config/m88k/m88k.h (ASM_FINISH_DECLARE_OBJECT): Undef, then define.
+
+ * Version 2.5.0 released.
+
+Thu Oct 21 13:02:48 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * mips.h (CUMULATIVE_ARGS): Double size of adjust array.
+ * mips.c (function_arg): Add comment about too many adjust entries.
+
+Thu Oct 21 13:48:14 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.h (HARD_REGNO_MODE_OK): Multi-word objects cannot
+ go into MQ, LR, or CTR.
+
+ * configure (mips-sgi-iris5*): Disable; not working yet.
+ * mips/iris5.h (ASM_SPEC, LINK_SPEC, CPP_PREDEFINES): Extend a bit.
+
+ * expmed.c (expand_divmod): Create RESULT in proper mode when trying
+ quotient-and-remainder insn.
+
+Thu Oct 21 13:14:40 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (STMP_FIXPROTO): Uncomment the definition.
+
+ * varasm.c (output_constructor): Fix previous change:
+ if no TYPE_DOMAIN, don't set min_index.
+
+Thu Oct 21 11:13:21 1993 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * fixincludes: Avoid conflicting uses of __wchar_t in cc1plus and
+ stdlib.h for ARM/RISCiX.
+
+Thu Oct 21 08:16:13 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * Makefile.in (install-common): Remove g++ dependency.
+ Not built for cross compilers.
+
+Thu Oct 21 00:04:40 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes (required): Accept a space instead of a tab
+ between #define and CTRL (or _CTRL).
+
+ * config/m68k/m68k.c (output_move_double): Use reg_overlap_mentioned_p
+ when checking for overlap between source and dest.
+ Fix syntax for the lea insn for double overlap case.
+ * m68k.md (movdi, movdf, movxf): Delete the & from load case.
+
+ * config/m88k/m88k.h (ASM_FINISH_DECLARE_OBJECT): Emit .size
+ only if DECLARE_ASM_NAME.
+
+Wed Oct 20 21:32:11 1993 Jeff Law (law@snake.cs.utah.edu)
+
+ * pa.c (output_arg_descriptor): Do not stop searching if a USE
+ for the static link or struct value register is found.
+
+Wed Oct 20 22:43:22 1993 Michael Meissner (meissner@osf.org)
+
+ * i386/osfrose.h (ASM_FINISH_DECLARE_OBJECT): Don't emit .size
+ directive if using the OSF/rose object format.
+
+ * i386/osfrose.h, i386/osfelf.h (SWITCH_TAKES_ARG): Allow use of
+ System V.4 -h * and -z * switches.
+ (LINK_SPEC): Pass -G, -h*, -z* switches through to the ELF linker.
+ Map -static, -symbolic, and -shared into the appropriate -B, -d,
+ and -G options when invoking the ELF linker.
+
+Wed Oct 20 20:32:54 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cse.c (fold_rtx): Alter previous change: don't fold the shift
+ if the count exceeds the width of the value inside the subreg.
+
+ * varasm.c (copy_constant): New function.
+ (output_constant_def): Use it.
+
+ * Makefile.in ($(srcdir)/INSTALL): Add --no-split.
+
+Wed Oct 20 19:35:35 1993 John F Carr (jfc@mit.edu)
+
+ * alpha.h (LIB_SPEC): Link -lprof1 when profiling.
+
+Wed Oct 20 19:21:18 1993 Jim Wilson (wilson@cygnus.com)
+
+ * cccp.c (sys_errlist): Conditionalize declaration for BSD 4.4.
+ * collect2.c, g++.c, gcc.c, protoize.c: Likewise.
+ * collect2.c (my_strerror): Move block local extern declarations
+ for sys_errlist and sys_nerr to file level.
+
+Wed Oct 20 18:27:28 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (output_init_element): When initializing a union,
+ do it right away: never put the field on the pending list.
+
+ * patch-header.c (main): Delete output file before opening it.
+ Discard directory names from progname.
+ * patch-header.c: Simplify and fix handling of errno.h.
+ (It no longer thinks errno.h always needs fixing.)
+ * patch-header.c (write_lbrac, write_rbrac): Only write
+ extern "C" if that specifically is needed.
+
+Wed Oct 20 18:12:21 1993 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * pa.md (cacheflush): Split into dcacheflush and icacheflush.
+ Rewrite to use space regs correctly.
+ * pa.h (TRAMPOLINE_TEMPLATE): Rewrite.
+ (TRAMPOLINE_SIZE): Update with new size.
+ (INITIALIZE_TRAMPOLINE): Rewrite.
+
+Wed Oct 20 17:58:32 1993 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * varasm.c (output_constructor): Add support for non-zero
+ lower array bound.
+ * expr.c (store_constructor): Likewise.
+
+Wed Oct 20 15:16:34 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * toplev.c (rest_of_decl_compilation): Use ASM_FINISH_DECLARE_OBJECT
+ unconditionally, but define it as no-op by default.
+
+ * config/convex/convex.h (MAX_LONG_TYPE_SIZE): Defined.
+
+ * varasm.c (size_directive_output): New variable.
+ * toplev.c (rest_of_decl_compilation): Use ASM_FINISH_DECLARE_OBJECT.
+ * config/svr4.h (ASM_DECLARE_OBJECT_NAME): Set size_directive_output.
+ (ASM_FINISH_DECLARE_OBJECT): Defined.
+ * config/i386/osfrose.h, config/m88k/m88k.h: Likewise.
+
+ * patch-header.c (inf_size): Move decl inside main.
+ (strdup): Use xmalloc rathern than malloc.
+ Don't use the return value of strcpy.
+ (INF_UNGET): Take parameter; do nothing if EOF.
+ (strcpy): Declaration deleted.
+
+Wed Oct 20 11:39:56 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * xm-mips.h (HAVE_VPRINTF): Define for BSD 4.4.
+
+ * mips.c (mips_output_filename): When emitting stabs, don't
+ disable them if using gas.
+ (mips_output_lineno): Likewise.
+
+ * sparc.h (INITIALIZE_TRAMPOLINE): Emit 3 flush instrutions.
+ * sparc.md (flush): Add pattern.
+
+Wed Oct 20 10:47:54 1993 Michael Meissner (meissner@osf.org)
+
+ * configure (mips-dec-bsd, mips-dec-osf): Fix a typo in the last
+ change.
+
+Wed Oct 20 07:57:06 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.h, aix31.h (RS6000_CROR_BIT_NUMBER): Deleted.
+ (RS6000_CALL_GLUE): New macro.
+ * rs6000.c (print_operand, case '.'): Use RS6000_CALL_GLUE
+ instead of RS6000_CROR_BIT_NUMBER.
+ (print_operand, case 'E', case 0): Use "return", not "break".
+ * rs6000.md (call): Don't use CROR or NOP; just use "%.".
+
+ * c-common.c (check_format_info): Consider "char", "signed char",
+ and "unsigned char" types as equivalent.
+
+ * loop.c (find_and_verify_loops): Properly continue loop after
+ moving a block of code near a loop exit.
+
+Wed Oct 20 02:01:50 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (extraclean): Delete file djefoo.
+ (stmp-fixproto): Depend on stmp-headers, not LIBGCC2_DEPS.
+
+Tue Oct 19 23:11:16 1993 James Van Artsdalen (james@bigtex.cactus.org)
+
+ * config/i386/isc.h (LONG_DOUBLE_TYPE_SIZE): Define as 64 bits
+ due to FP emulator bugs in the target kernel.
+ * config/i386/sco.h: Likewise (kernel bugs are only suspected).
+
+Tue Oct 19 21:21:34 PDT 1993 Ralph Campbell (ralphc@pyramid.com)
+
+ * configure (mips-dec-bsd): New alternative.
+ * config/mips/dec-bsd.h: New file.
+
+Tue Oct 19 18:49:40 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * c-typeck.c (digest_init): For arrays, use comptypes to compare
+ types instead of comparing pointers.
+
+Tue Oct 19 11:24:16 1993 Steve Chamberlain (sac@phydeaux.cygnus.com)
+
+ * reload1.c (reload): Cope when inherited register is larger than
+ one word.
+ (choose_reload_regs): Ditto.
+
+Tue Oct 19 18:09:18 1993 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.md (define_function_unit): Add support for RIOS2
+ asymmetric integer units.
+
+Tue Oct 19 17:48:37 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (assign_parms): Properly set parm_reg_stack_loc for
+ args that are a CONCAT.
+
+ * clipper.md (movdi): Force use of "o" alternative if
+ operand 1 is a MEM.
+
+ * alpha.h (HAVE_ATEXIT): New macro.
+
+ * reload.c (push_reload, find_reloads): If an operand is
+ a SUBREG of a PLUS, force a reload and reload what is inside.
+
+ * dbxout.c (print_int_cst_octal): Fix bug in last change.
+
+Tue Oct 19 17:42:23 1993 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * arm.c: Include reload.h
+ (arm_reload_out_hi): New function.
+ (output_call): Don't look inside operands[0].
+ * arm.h: Add function definitions for shift_instr,
+ output_mov_long_double_fpu_from_arm,
+ output_mov_long_double_arm_from_fpu,
+ and output_mov_long_double_arm_from_arm.
+ (FLOAT_WORDS_BIG_ENDIAN): Define to 1.
+ (SECONDARY_OUTPUT_RELOAD_CLASS): return GENERAL_REGS for HImode
+ outputs.
+ (ASM_OUTPUT_LONG_DOUBLE, ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT):
+ output floating point constants as hex, make order correct given
+ definition of FLOAT_WORDS_BIG_ENDIAN.
+ (PRINT_OPERAND): Delete redundant code when handling CONST_DOUBLE.
+ * arm.md: (reload_outhi): New pattern.
+ (movhi): Handle reloads better.
+ (restorehi): Delete. Also tidy up commented out code.
+ (call): Make this a define_expand.
+ (matcher for above): only accept MEM(reg)
+ (call_value): Handle as for (call).
+ * xm-arm.h (HOST_FLOAT_WORDS_BIG_ENDIAN): Define to 1.
+
+Tue Oct 19 13:25:03 1993 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-type2.c (build_m_component_ref): Fix typo, type must be set,
+ after changing component. Fixes problem introduced on Thu Sep 9
+ 21:22:40 1993.
+
+Tue Oct 19 01:09:56 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure (m68000-convergent-sysv*): Untangle from m68k-*-lynxos.
+
+ * Makefile.in (stmp-fixproto): Depend on LIBGCC2_DEPS.
+ (crtbegin.o, crtend.o): Specify -fno-inline-functions.
+
+ * config/mips/iris5.h: New file.
+ * config/mips/mips.c (mips_asm_file_start): Handle ABICALLS_ASM_OP.
+ * configure (mips-sgi-iris5*): New configuration.
+
+Mon Oct 18 16:16:26 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cse.c (note_mem_written): (mem (scratch)) means clobber everything.
+
+ * gen-protos.c: Include ctype.h.
+
+ * expmed.c (extract_split_bit_field): Change shift count calculation
+ in little-endian case.
+
+ * Makefile.in (stmp-fixproto): Added dependency on fixproto script.
+
+Mon Oct 18 11:26:08 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * c-typeck.c (process_init_element): Align structure elements
+ that are subaggregates.
+
+ * c-decl.c (finish_decl): After preserve_initializer call, set
+ TREE_PERMANENT bit in initializer.
+
+ * combine.c (can_combine_p): Don't combine instructions across a
+ volatile insn.
+ * rtlanal.c (volatile_insn_p): New function.
+
+Sun Oct 17 03:04:49 1993 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * configure (powerpc-ibm-aix*): Set cpu_type.
+ * config.sub: Recognize powerpc.
+
+Sun Oct 17 21:37:57 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * reload1.c (eliminate_regs_in_insn): Rerecognize some loads and
+ stores.
+ * pa.md (indexing loads and stores): Provide variants which avoid
+ reload problems with shift-add operations.
+
+ * pa.h (READONLY_DATA_SECTION): Disable.
+
+Thu Oct 14 12:38:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cse.c (fold_rtx): Special case handling for folding
+ a subreg of the result of a left shift.
+
+Thu Oct 14 00:05:42 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.h (DBX_CONTIN_LENGTH): Set to 4000.
+
+ * expr.c (do_jump_for_compare): Don't blow up if aren't any insns
+ in this sequence yet.
+
+ * alpha.h (LINK_SPEC): Now OK to pass -O3 to linker.
+ (ASM_OUTPUT_LOOP_ALIGN, ASM_OUTPUT_ALIGN_CODE): Work around
+ bug in DEC assembler.
+
+Wed Oct 13 21:47:58 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Remove erroneous parens from Alpha OSF/1 <sym.h>.
+
+Wed Oct 13 16:08:54 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/m68k/sun3.h (CPP_PREDEFINES): Don't define _CROSS_TARGET_ARCH.
+
+ * fold-const.c (invert_truthvalue): Handle SAVE_EXPR.
+
+ * Makefile.in (install-collect2): Depend on install-dir.
+ (install-info, install-float-h-cross): Likewise.
+
+Wed Oct 13 15:51:02 1993 Stephen L. Moshier (moshier@world.std.com)\
+
+ * real.h (FLOAT_WORDS_BIG_ENDIAN): New macro.
+ (HOST_FLOAT_WORDS_BIG_ENDIAN): Likewise, for host.
+ (REAL_VALUE_TO_TARGET_DOUBLE (default version)): Use them.
+ (efixi, efixui): Return HOST_WIDE_INT.
+ (REAL_VALUE_FROM_INT): Cast inputs to HOST_WIDE_INT.
+ * real.c (FLOAT_WORDS_BIG_ENDIAN, HOST_FLOAT_WORDS_BIG_ENDIAN):
+ Use everywhere in place of WORDS_BIG_ENDIAN, HOST_WORDS_BIG_ENDIAN,
+ except in reference to endian-ness of integers.
+ (etrunci, etruncui, efixi, efixui, ereal_from_int, ereal_to_int,
+ ltoe, ultoe, eifrac, euifrac): Change `long' to `HOST_WIDE_INT'.
+
+Wed Oct 13 15:47:37 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-parse.in (initdcl, notype_initdcl): Call decl_attributes
+ before init as well as after.
+
+ * config/ns32k/pc532.h (FRAME_POINTER_REQUIRED):
+ Require a frame pointer if fn calls setjmp.
+
+Wed Oct 13 15:27:01 1993 Jim Wilson (wilson@cygnus.com)
+
+ * jump.c (jump_optimize): When moving a range of instructions,
+ include all NOTEs before the range, not just line number notes.
+
+Wed Oct 13 11:01:51 1993 Per Bothner (bothner@wombat.gnu.ai.mit.edu)
+
+ * patch-header.c: #include <sys/types.h> before <sys/stat.h>.
+
+Wed Oct 13 11:57:33 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.md (seq): Fix typo: had "xubfic" instead of "subfic".
+
+ * va-m88k.h (_VA_LIST_): Define.
+
+ * alpha.c (ignore_line_number): No longer used.
+
+ * mips-tdump.c (print_global_hdr): Fix typo in cast in ctime call.
+
+ * cccp.c (main): Don't catch SIGPIPE if no such signal.
+
+ * x-alpha: File deleted, all shipped OSF systems have `ranlib'.
+
+ * fold-const.c (optimize_bit_field_compare, decode_field_reference):
+ Don't do anything if get_inner_reference returned its argument.
+
+ * bi-reverse.c: Avoid defining NULL; can cause duplicate definition
+ errors.
+
+Wed Oct 13 07:58:28 1993 Michael Meissner (meissner@osf.org)
+
+ * i386/osfrose.h (ASM_OUTPUT_ADDR_DIFF_ELT): Define like in V.4.
+ (FUNCTION_PROFILER, FUNCTION_PROLOGUE): Don't load up %eax with
+ the pointer value before calling indirect, just call indirect the
+ memory address to save some cycles in profiling.
+
+Tue Oct 12 12:41:12 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * cse.c (record_jump_cond): At end, make missing equivalences
+ first, and then merge them.
+
+Tue Oct 12 21:30:29 1993 Doug Evans (dje@cygnus.com)
+
+ * va-h8300.h (__va_rounded_size): Fix typo in #ifdef.
+
+Tue Oct 12 20:19:22 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * bc-emit.c: Include stdio.h last.
+ * combine.c: Include stdio.h after gvarargs.h.
+
+Tue Oct 12 13:28:18 1993 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * fixproto: Re-write. We now assume that there are two
+ source directories (source_dir_all and source_dir_std). These
+ are handled differently. All files in source_dir_all (normally
+ ./include) are processed, but in source_dir_std (normally
+ /usr/include) we only process the standard ANSI/Posix ones where
+ we might be able to add missing prototypes.
+ * scan-decls.c (scan_decls): Rewrote from being a program whose
+ output is piped to patch-header, to a subroutine called by
+ patch-header. This should be somewhat more efficient.
+ * Makefile.in (scan-decls): Removed rule to make program.
+ * patch-header.c (recognized_macro, recognized_extern,
+ recognized_function): New functins, with logic moved out from
+ read_scan_file, so they can be called by scan_decls.
+ * patch-header (main): Read the original header file into a
+ buffer (rather than reading it with stdio). This should be more
+ efficient, partly because we can re-write it in place.
+ (inf_skip_spaces, inf_read_upto, inf_scan_ident): New functions,
+ based on skip_spaces, read_upto, and scan_ident in scan.c, but
+ these read from the in-memory buffer mentioned above.
+ * scan-types.sh: Don't check for sigset_t, since it can be a
+ struct, whose name cannot be simplify replaced by its definition.
+ * Makefile.in (deduced.h): Don't pass -nostdinc.
+
+Tue Oct 12 18:36:32 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
+
+ Changes to support native ecoff and embedded stabs debugging
+ for the Alpha.
+
+ * alpha.c (output_prolog): Put out file and line number if sdb
+ debugging format, put out .ent directive, signal start of function for
+ alpha_output_filename and set up debugging auto/arg offsets.
+ (output_epilog): Signal end of function for alpha_output_filename.
+ (alpha_output_filename, alpha_output_lineno): New functions.
+ * alpha.h (TARGET_SWITCHES): Add gas option.
+ (ASM_DECLARE_FUNCTION_NAME): Moved output of .ent directive to
+ output_prolog.
+ (DBX_NO_XREFS): Removed, gdb understands cross references and the
+ native debugger can't handle embedded stabs.
+ (ASM_FILE_START): Replace output of .file directive
+ by ASM_OUTPUT_SOURCE_FILENAME call.
+ (TARGET_GAS, MASK_GAS, SDB_DEBUGGING_INFO, DBX_DEBUGGING_INFO,
+ MIPS_DEBUGGING_INFO, PREFERRED_DEBUGGING_TYPE, DEBUGGER_AUTO_OFFSET,
+ DEBUGGER_ARG_OFFSET, ASM_OUTPUT_SOURCE_LINE,
+ ASM_OUTPUT_SOURCE_FILENAME, DEFAULT_GDB_EXTENSIONS, ASM_STABS_OP,
+ ASM_STABN_OP, ASM_STABD_OP, SDB_ALLOW_FORWARD_REFERENCES,
+ SDB_ALLOW_UNKNOWN_REFERENCES, PUT_SDB_DEF, PUT_SDB_PLAIN_DEF,
+ PUT_SDB_TYPE, PUT_SDB_BLOCK_START, PUT_SDB_BLOCK_END,
+ PUT_SDB_FUNCTION_START, PUT_SDB_FUNCTION_END, PUT_SDB_EPILOGUE_END,
+ ASM_FINAL_SPEC, CODE_MASK, MIPS_IS_STAB, MIPS_MARK_STAB,
+ MIPS_UNMARK_STAB, SHASH_SIZE, THASH_SIZE): New macros.
+ * alpha-gdb.h: New file.
+ * configure (alpha-*-osf*): Handle --with-stabs and --with-gnu-as.
+ * mips-tfile.c (add_local_symbol): Index in the external symbol
+ must point to local symbol table entry for procedures.
+
+Mon Oct 11 16:14:53 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: If a file is referenced with double quotes from
+ a fixed file, make sure it is copied into the fixed include
+ directory.
+ Remove DPS/XDPSlib.h special-case code.
+
+Tue Oct 12 08:05:28 1993 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000/powerpc.h: New file.
+ * configure (powerpc-ibm-aix*): New target.
+ * rs6000.h (MASK and TARGET): Add new flags for POWER2 and PowerPC
+ with square root.
+ (ASSEMBLER_DIALECT): New macro.
+ (CONDITIONAL_REGISTER_USAGE): Set MQ register fixed if not POWER.
+ (SHIFT_COUNT_TRUNCATED): Conditional on POWER.
+ (ASM_OUTPUT_REG_{PUSH,POP}): Mnemonics dependencies.
+ * rs6000.c (rs6000_override_options): Use new TARGET flags and
+ add some more cpu choices.
+ (output_prolog, output_epilog): Support new mnemonics and avoid
+ using lm/stm when not POWER.
+ * rs6000.md: Update define_function_units.
+ Put both old and new mnemonics in all templates.
+ Add target tests to pattern conditional field throughout.
+ (one_cmplsi2): Make POWER and PowerPC variants.
+ (mulsi3): Convert to define_expand which calls appropriate POWER
+ or PowerPC pattern.
+ (divsi3, udivsi3): Add patterns for PowerPC case. Update divsi3
+ define_expand for PowerPC case.
+ (ashlsi3, lshrsi3, ashrsi3, extendqisi2, extendqihi2): Convert to
+ define_expand which calls appropriate POWER or PowerPC pattern.
+ (floating-point): Add PowerPC single-precision FP, and SF/DF sqrt
+ insns for 603, 604, 620.
+ (call insns): Use "nop" for magic TOC restore.
+ (move data, nop): Use PowerPC extended mnemonics.
+
+Tue Oct 12 07:58:36 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.h (SETUP_INCOMING_VARARGS): If not TARGET_FPREGS,
+ save another copy of the integer regs where the FP regs would
+ have gone.
+
+ * tree.h (struct tree_type): symtab_address is now a union of
+ pointer and integer.
+ (TYPE_SYMTAB_ADDRESS): Refer to the integer.
+ (TYPE_SYMTAB_POINTER): New macro to refer to pointer.
+ * sdbout.c (KNOWN_TYPE_TAG, SET_KNOWN_TYPE_TAG): Refer to
+ TYPE_SYMTAB_POINTER and remove casts.
+ (tag_of_ru_type): Likewise.
+
+ * reload1.c (reload): Fix typo in RELOAD_FOR_INSN case when
+ accounting for reloads.
+
+ * expr.c (convert_modes): Reset OLDMODE from X after we strip
+ a SUBREG due to a promoted variable.
+
+ * dbxout.c (dbxout_type, case INTEGER_TYPE): Output bounds in
+ octal if type wider than HOST_WIDE_INT.
+ (print_int_cst_octal): Trim bound by precision of its type.
+ Avoid warning on what may be shift into sign bit.
+
+ * bi-reverse.c: Add missing #include for hconfig.h.
+
+ * fixincludes: Quote braces when looking for DONE files.
+
+ * final.c (dialect_number): New variable.
+ (init_final): Initialize it.
+ (output_asm_insn, asm_fprintf): Support ASSEMBLER_DIALECT.
+
+Tue Oct 12 01:34:16 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (digest_init): If traditional, allow unbraced scalar
+ to initialize the first element of an aggregate.
+
+ * cccp.c (output_line_command): Output the `4' flag only if cplusplus.
+ (do_line): Handle the `4' flag.
+
+ * final.c (final_scan_insn): Call walk_alter_subreg for operands
+ that are PLUS or MULT, before constrain_operands.
+
+Mon Oct 11 15:18:45 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * real.c (debug_real): New function.
+
+ * regclass.c (reg_scan_mark_refs): XEXP (x, 0) in EXPR_LIST may be 0.
+
+ * config/m68k/m68k.md (cmphi): Turn on constraints to support cmpm.w.
+
+Mon Oct 11 13:20:54 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * unroll.c (unroll_loop): Set map->const_equiv_map_size to
+ new_maxregnum.
+ (copy_loop_body): When set const_age_map entry for split dest reg,
+ verify that it is within the bounds of the map.
+ (find_splittable_regs): Count number of biv sets, not number of
+ bivs. Don't pass result to find_splittable_givs.
+ (find_splittable_givs): Delete parameter result. Add local
+ variable result.
+
+Mon Oct 11 07:43:31 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_assignment): When assigning an INDIRECT_REF to
+ a RESULT_DECL, the size and source rtx were swapped.
+
+ * function.c (trampoline_address): Don't allocate anything
+ from parent function's current obstack.
+
+ * regclass.c (reg_scan): Don't call reg_scan_mark_refs on notes
+ if there aren't any.
+ (reg_scan_mark_refs, case INSN_LIST, EXPR_LIST): New cases.
+
+ * cse.c (simplify_binary_operation): Test value of
+ SHIFT_COUNT_TRUNCATED if it is defined.
+ * combine.c (subst, shift and rotate cases): Likewise.
+ * a29k.h, alpha.h, fx80.h, i960.h, mips.h, pa.h, pyr.h, rs6000.h:
+ Define SHIFT_COUNT_TRUNCATED to have a value of 1.
+ * sparc.h, tahoe.h, we32k.h: Likewise.
+
+Mon Oct 11 02:40:22 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * regclass.c (regno_last_note_uid): New vector.
+ (reg_scan): Initialize regno_last_note_uid.
+ Call reg_scan_mark_refs for the notes. Pass its new arg.
+ (reg_scan_mark_refs): New arg NOTE_FLAG. Pass it recursively.
+ Set regno_last_note_uid.
+ * regs.h (regno_last_note_uid): Declared.
+ * jump.c (jump_optimize): Use regno_last_note_uid when deciding
+ whether a register is set and never used.
+
+Sun Oct 10 22:51:01 1993 Stephen Moshier (moshier@world.std.com)
+
+ * real.c (asctoeg): Fix backward condition in last change.
+
+Sun Oct 10 22:33:17 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * configure (hppa1.0-*-mach*): Use collect2.
+ (hppa1.1-*-mach*): Likewise.
+
+ * pa.c (legitimize_pic_address): Delete unused variables.
+ (output_block_move, output_ior): Likewise.
+ (hppa_builtin_saveregs): Likewise.
+ (emit_move_sequence): Add parens as suggested by -Wall.
+ (compute_frame_size): Likewise.
+ (output_ascii): Return type is "void".
+ (hppa_expand_prologue, import_milli): Likewise.
+
+ * pa.c (output_function_prologue): Pass the highest register
+ number saved for ENTRY_GR and ENTRY_FR directives rather
+ than the number of registers saved.
+ (hppa_expand_prologue): Account for %r4 when it's being
+ used as a frame pointer.
+
+Sun Oct 10 18:42:49 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (start_init): Don't set require_constant_elements
+ for scalar types.
+
+ * c-parse.in (stmt): Don't call default_conversion on top-level
+ expressions.
+
+ * c-typeck.c (convert_for_assignment): Allow silent conversion to
+ a pointer from an integer 0 that resulted from arithmetic.
+
+ * varasm.c, c-pragma.c (enum pragma_state): Defined.
+
+ * config/i386/i386.c (restore_386_machine_status)
+ (save_386_machine_status): New functions.
+ (clear_386_stack_locals): Store those functions in
+ save_machine_status, restore_machine_status.
+ (struct machine_function): New structure definition.
+
+ * function.h (struct function): New field `machine'.
+ * function.c (save_machine_status, restore_machine_status): New vars.
+ (push_function_context, pop_function_context): Use them.
+
+ * explow.c (emit_stack_save): Cast enum array index to int.
+
+Sun Oct 10 12:49:39 1993 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * arm.c (const_ok_for_arm): Cast constants to unsigned HOST_WIDE_INT.
+ (output_prologue): Sanity check the finite state machine.
+ (output_epilogue): Delete unused variable.
+ (final_prescan_insn): Always clear arm_target_insn when FSM goes to
+ state 0.
+ * arm.h (OPTIMIZATION_OPTIONS): Don't set flag_omit_frame_pointer,
+ since this inhibits debugging.
+ (ASM_OUTPUT_INTERNAL_LABEL): Always clear arm_target_insn when FSM
+ goes to state 0.
+
+Sun Oct 10 08:56:58 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.h (ALPHA_COSTS): Add missing arg to call to rtx_cost.
+
+ * combine.c (force_to_mode, case ASHIFTRT): Verify that result of
+ making a LSHIFTRT remains a shift.
+
+ * tree.c (save_tree_status): Function_maybepermanent_obstack is the
+ function_obstack of parent function.
+ (restore_tree_status): Only free objects later than
+ maybepermanent_firstobj in function_maybepermanent_obstack.
+ (make_node): Fix logic error in PARM_DECL code.
+ Put PARM_DECL in parent function's saveable obstack.
+ * function.c (put_reg_into_stack): Allocate fixup structure in
+ saveable obstack.
+
+ * expr.c (expand_assignment): Don't short circuit store_expr
+ when TO is a VAR_DECL since it needs special handling if promoted.
+
+ * combine.c (subst, case SUREG): Only call force_to_mode if both
+ inner and outer modes are MODE_INT.
+
+ * mips-tfile.c (WORD_ALIGN): Fix typo in last change.
+
+ * c-common.c (check_format_info): Support X/Open formats like "%1$d".
+
+Sat Oct 9 22:29:17 1993 Per Bothner (bothner@wombat.gnu.ai.mit.edu)
+
+ * configure: If no target is specified, try getting one
+ with config.guess.
+ * config.guess: New file.
+
+Sat Oct 9 19:50:24 1993 Pat Rankin (rankin@eql.caltech.edu)
+
+ * c-common.c (check_format_info): Avoid ?: conditional for function
+ to be called.
+
+ * config/vax/xm-vms.h [VAXC] (bc_check_for_full_enumeration_handling)
+ (current_function_has_nonlocal_goto)
+ (output_deferred_addressed_constants): New macros to shorten
+ external names exceeding 31 characters.
+
+ * make-cc1.com: Move alloca handling before bytecode construction
+ so that VAX C won't need two different values for LIBS. Eliminate a
+ comment about make-like functionality that referred to a capability
+ which has not been implemented.
+
+Sat Oct 9 21:53:53 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * fixincludes: Unquote a quoted `t' in a #define _IO line, for AIX
+ 3.2 sys/stropts.h #define _IO(t,v).
+ (sys/spinlock.h): Don't copy it if it doesn't exist.
+ (DPS/XDPSlib.h): Change "XDPS.h" to <DPS/XDPS.h>, for AIX.
+
+Sat Oct 9 15:00:00 1993 DJ Delorie (dj@ctron.com)
+
+ * configure.bat: Change $(srcdir)/ to $(srcdir)\ in commands.
+
+Sat Oct 9 15:17:22 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case ABS_EXPR): Don't copy twice into
+ volatile MEM.
+
+ * expr.c (expand_expr): Never reset ORIGINAL_TARGET.
+ Pass ORIGINAL_TARGET to lang_expand_expr, not TARGET.
+
+Sat Oct 9 13:27:10 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * tree.c (pop_momentary_nofree): New function.
+ * c-parse.in (initdcl, notype_initdcl, init): Undo previous change.
+ (init): Use pop_momentary_nofree if the initializer has real data.
+
+Sat Oct 9 12:55:26 1993 Stephen Moshier (moshier@world.std.com)
+
+ * real.c (asctoeg): Allocate local buffer dynamically. Count
+ any lost significant digits before the decimal point.
+
+Fri Oct 8 16:33:42 1993 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-tree.h (OFFSET_REF): Override OFFSET_REFs from the back-end, as
+ we need to do something more complex with them.
+ * cp-tree.def (CP_OFFSET_REF): Very similar to OFFSET_REFs, but
+ allow the front-end to handle them.
+
+Fri Oct 8 14:40:29 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-error.c (dump_expr, REAL_CST): Support printing of real values
+ when REAL_IS_NOT_DOUBLE (prints out rep in hex).
+
+Fri Oct 8 13:54:03 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-type2.c (store_init_value): Move pointer to member function
+ initilization code to...
+ * cp-type2.c (digest_init): here. Allows nested pointer to member
+ functions to work.
+ * cp-decl.c (build_ptrmemfunc_type): Use a real union instead of a
+ magic union, as the initialization code doesn't like them.
+ * cp-tree.h (TYPE_PTRMEMFUNC_FN_TYPE): Changed to go though the
+ union.
+ * cp-tree.h (DELTA2_FROM_PTRMEMFUNC, PFN_FROM_PTRMEMFUNC): Accessor
+ macros to go thought union. Allows us to change pointer to member
+ functions a little easier.
+ * cp-typeck.c (get_member_function_from_ptrfunc,
+ build_binary_op_nodefault): Changed to use new accessor macros.
+ * cp-typeck.c (build_ptrmemfunc): Use new union instead. Also, make
+ sure TREE_CONSTANT is set for CONSTANT things.
+ * cp-decl.c (pfn_or_delta2_identifier): Added to cache
+ get_identifier calls.
+ * cp-tree.h (pfn_or_delta2_identifier): Declare it.
+ * cp-decl.c (init_decl_processing): Setup pfn_or_delta2_identifier.
+
+Fri Oct 8 19:03:09 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * xcoffout.h (DBX_STATIC_BLOCK_START): For N_LCSYM, force change
+ to text section to avoid assembler bug.
+
+ * mips.md (movsi_unaligned): Change in comment "loads" to "stores".
+
+ * calls.c (emit_library_call_value): Compute struct_value_size,
+ and pass it to emit_call_1.
+
+Fri Oct 8 16:13:17 1993 H.J. Lu (hjl@nynexst.com)
+
+ * config/i386/linux.h (STARTFILE_SPEC): Handle -p and -pg
+ outermost. Also add support for cross-linking.
+
+Fri Oct 8 15:20:58 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * Makefile.in (cp-error.o, cp-errfn.o): Add dependency rules.
+
+Fri Oct 8 08:00:51 1993 Eric Youngdale (eric@kafka)
+
+ * linux.h: Only include i386/gstabs.h if LINUX_ELF is not defined.
+
+ * linuxelf.h: Copy a lot of stuff from the SVr4 configuration:
+ include "i386/i386.h", "i386/att.h" and "svr4.h".
+ (MD_EXEC_PREFIX, MD_STARTFILE_PREFIX): Undefine.
+ (ASM_FILE_START, RETURN_IN_MEMORY, ASM_OUTPUT_ADDR_DIFF_ELT)
+ (JUMP_TABLES_IN_TEXT_SECTION, DBX_REGISTER_NUMBER): Copy from sysv4.h.
+ (TARGET_VERSION): Define to print "i386 Linux/ELF".
+ (LINUX_ELF): Define, before we include "i386/linux.h"
+ (YES_UNDERSCORE): Undefine.
+
+Fri Oct 8 13:40:44 1993 Michael Meissner (meissner@osf.org)
+
+ * i386/osfrose.h, i386/osfelf.h (CPP_SPEC): If buliding for shared
+ libraries, define __SHARED__.
+
+ * i386/osfrose.h (FUNCTION_PROFILER): If half-pic, call mcount in a
+ half-pic fashion.
+ (FUNCTION_PROLOGUE): If half-pic call through _mcount_ptr in a
+ half-pic fashion.
+
+ * halfpic.c (half_pic_external): New function to declare a halfpic
+ identifier as always external.
+
+ * halfpic.h (half_pic_external): declare function.
+ (HALF_PIC_EXTERNAL): Declare accessor macro.
+
+Fri Oct 8 15:03:56 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ Cygnus<->FSF C++ front-end merge.
+ Thu Oct 7 11:45:32 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * Makefile.in (CPLUS_OBJS): Change error.o to cp-errfn.o
+
+ * cp-*.c, cp-parse.y: Rename lang_error and its kin to cp_error
+ and the like to accomodate rms's belief structure.
+
+ * error.c: Moved to cp-errfn.c to accomodate rms's belief structure
+
+ Wed Oct 6 15:05:49 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-pt.c (mangle_class_name_for_template): Always use type_as_string
+ for printing out type parameters. Nuke id and type variables.
+
+ * cp-error.c (dump_expr, INTEGER_CST): Support printing of character
+ literals and large integers
+ (dump_char): New function
+ (dump_type): Deal with ** and *& more prettily
+
+ * cp-pt.c (mangle_class_name_for_template): Strip out code for
+ printing template parameters, replace with call to expr_as_string.
+
+ * cp-method.c (build_overload_value): descend through
+ TREE_OPERAND on NOP_EXPRs as well as NON_LVALUE_EXPRs.
+
+ * cp-decl.c (poplevel_class): Add assertion that
+ class_binding_level is not NULL.
+
+ Tue Oct 5 11:11:25 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ Patches to support proper handling of system includes without munging:
+
+ * cp-lex.h: Declare in_c_header, a flag meaning 'implicitly wrap this
+ file in extern "C" { }'.
+
+ * cp-lex.c: Define in_c_header.
+ (check_newline): If in_c_header when changing files,
+ pop_lang_context().
+ (check_newline): If "4" seen on #line line, push_lang_context(C).
+
+ * cccp.c: Add a new field c_system_include_path to struct
+ file_name_list which indicates that the directory contains C-language
+ system includes.
+ (*various*): Set this flag correctly
+ (is_system_include): Return 2 if C-language system include.
+ (output_line_command): Output " 4" after " 3" for C-language system
+ include.
+
+ * cp-tree.h (SET_CLASSTYPE_INTERFACE_UNKNOWN_X): Coerce X to boolean
+ value
+
+ Mon Oct 4 17:03:48 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-tree.h: Add declaration for flag_external_templates
+
+ * cp-decl.c (start_decl): Don't declare flag_external_templates
+
+ * cp-pt.c: Ditto
+
+ * cp-parse.y (template_instantiate_once): Ditto
+
+ * cp-lex.c (reinit_parse_for_method): Ditto
+ (cons_up_default_function): Ditto
+ (extract_interface_info): Don't set interface_unknown
+ if (processing_template_defn && !flag_external_templates)
+
+ * cp-error.c (dump_type): Deal properly with pointers to member
+ functions.
+
+ * cp-pt.c (instantiate_class_template): If !flag_external_templates,
+ increment interface_unknown so that nested classes will be dealt with
+ properly.
+ (end_template_instantiation): If !flag_external_templates,
+ decrement interface_unknown.
+
+ * cp-lex.c (cons_up_default_function): Remove redundant check
+ for processing_template_defn && !flag_external_templates
+ (reinit_parse_for_method): Ditto
+
+ * cp-parse.y (template_instantiate_once): Don't mess with
+ interface_unknown
+
+ Mon Oct 4 15:47:34 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (duplicate_decls): Move setting of TREE_CHAIN after
+ all possible return 0;s as we only want to do this when we know
+ that we are dealing with a duplicate.
+
+ * cp-decl.c (start_function): Remove my_friendly_abort 19. Allows
+ one to declare a built-in as extern inline.
+
+ Mon Oct 4 12:47:33 1993 John F Carr (jfc@mit.edu)
+
+ * cp-lex.c (consume_string): Change variable `c' to int so return
+ value of getch can be assigned to it safely. Compare return value
+ of getch to EOF, not -1.
+
+ Mon Oct 4 11:42:46 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * toplev.c (error and its kin): Use #defines for the argument
+ lists for ease of adding arguments, and of moving to vfprintf when
+ dje adds it.
+
+ * error.c (lang_thing and its children): Do the same thing.
+
+ * cp-typeck.c (build_binary_op): Do away with the kludge, now that
+ error accepts more arguments.
+
+ Sun Oct 3 16:34:39 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-error.c: Remove all traces of in_parmlist
+
+ Sun Oct 3 13:54:57 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-call.c (convert_harshness_ansi, convert_harshness_old): Handle
+ pointer to function members properly.
+
+ Fri Oct 1 16:42:30 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-error.c (dump_function_decl, dump_function_name): Make static
+ to match prototype.
+
+ Fri Oct 1 15:23:31 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-typeck.c (build_ptrmemfunc): Move some code into the virtual
+ conditional part. Fixes problem with core core dumping when the
+ class that we want to build a pointer to member function for doesn't
+ have any virtual functions.
+
+ Thu Sep 30 18:15:29 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-parse.y (id_scope): Print the name of the invalid scope.
+ (unary_expr): Add .scope new typespec '(' typespec ')' expansion
+ which just gives an error.
+
+ * cp-typeck.c (build_binary_op): Print more helpful message for
+ a missing member operator (print the desired type involved).
+ Very kludgey due to error()'s two-arg limit.
+
+ * error.c (lang_thing): Abort if more than NARGS (currently 2) are
+ passed, since this is likely to cause a seg fault elsewhere anyway.
+
+ Thu Sep 30 14:19:28 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * g++int.texi: Add error reporting section, make `makeinfo'able
+
+ * cp-type2.c (my_friendly_abort): Deal with recursive calls
+
+ Thu Sep 30 12:24:33 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl2.c (grok_array_decl): Don't pedwarn on reversing the array
+ and its index in `a[b]'.
+
+ * cp-typeck.c (build_conditional_expr): Make pointer type mismatch
+ in a conditional expression get a pedwarn.
+ (build_binary_op_nodefault): Make comparison between different
+ pointer types lacking a cast get a pedwarn.
+ (build_modify_expr): Don't strip the NOP_EXPRs, since we're using
+ the rhs in a non-lvalue context.
+ (convert_for_assignment): Allow conversion of 0 to a pointer, but
+ not a 0 that results from casting or folding.
+
+ Thu Sep 30 11:24:59 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-typeck.c (build_modify_expr): For memberwise assignment,
+ put nop_expr (reference_type (lhstype)) at the end of of the list so
+ that the expression has the correct type.
+
+ * error.c (lang_thing): Don't rely on STDC array initialization
+
+ Tue Sep 28 18:20:05 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-init.c (build_virtual_init): Use get_binfo and
+ convert_pointer_to_real, to find the right basetype to convert to,
+ instead of trying to use convert_pointer_to, as convert_pointer_to
+ doesn't handle complex MI situations. Cures a bogus "cannot
+ convert a pointer of type `B' to a pointer of type `A'" when the
+ compiler is initializing virtual table pointers.
+
+ Mon Sep 27 14:54:42 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-call.c (build_method_call): Use get_binfo and
+ convert_pointer_to_real, to find the right basetype to convert to,
+ instead of trying to use convert_pointer_to, as convert_pointer_to
+ doesn't handle complex MI situations. Cures a bogus "cannot
+ convert a pointer of type `B' to a pointer of type `A'" when the
+ compiler is setting up the `this' pointer.
+ * cp-cvt.c (convert_pointer_to): Just call convert_pointer_to_real
+ to implement functionality.
+ * cp-cvt.c (convert_pointer_to_real): New routine. Uses new
+ functionality in get_base_distance to figure out which exact
+ parent we want to convert to.
+ * cp-search.c (get_base_distance_recursive, get_base_distance):
+ Modify to support searching for a specific PARENT given as a binfo
+ from our hierarchy.
+ * cp-typee.h (convert_pointer_to_real): Declare new routine.
+
+ Mon Sep 27 13:02:51 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-type2.c (my_friendly_abort): Undo previous change
+
+ * cp-*.c: Use lang_error instead of error_with_decl,
+ error_with_aggr_type, etc. Not complete; I only changed the easy
+ cases and a few of the more obscure ones. Please convert calls
+ over when you're working on an appropriate section.
+
+ * cp-method.c: Strip out error reporting code
+
+ * Makefile.in (CPLUS_OBJS): Add error.o and cp-error.o
+
+ * cp-error.c: New file, contains call-back functions for C++.
+ The actual output code is an extensively overhauled version of the
+ code from cp-method.c.
+ Don't call my_friendly_* to avoid undesirable recursion.
+
+ * error.c: New file, provides call-back mechanism for language-
+ dependent error reporting.
+
+ Fri Sep 24 13:52:27 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-type2.c (my_friendly_abort): Don't die quietly if
+ errorcount or sorrycount are positive, die loudly.
+
+Fri Oct 8 13:58:13 1993 Doug Evans (dje@cygnus.com)
+
+ * loop.c (scan_loop): When skipping consecutive insns,
+ don't count notes.
+
+Fri Oct 8 10:41:07 1993 Chip Salzenberg (chip@fin.uucp)
+
+ * c-common.c (check_function_format): Correct error in last
+ change.
+
+Fri Oct 8 08:10:03 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-parse.in (initdcl, notype_initdcl): Call push_momentary and
+ pop_momentary here.
+ (init): Not here.
+
+Fri Oct 8 06:35:07 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * dbxout.c (dbxout_type, case INTEGER_TYPE): Correctly check
+ for type smaller than `integer'.
+
+ * expr.c (expand_expr, case MAX_EXPR): Don't use TARGET directly
+ if it is a volatile MEM.
+
+ * i386/t-aix, i386/t-isc, i386/t-osfrose, i386/t-sco, mips/t-osfrose:
+ Remove LIMITS_H; hasn't been used for a while.
+
+ * configure: Add EXTRA_PASSES like we add EXTRA_HEADERS.
+ Correct EXTRA_HEADERS handling to accept multiple names.
+ (mips-*-*): Set extra_passes to mips-tfile and mips-tdump when
+ we use t-mips, t-bsd, t-svr[34], and t-ultrix.
+ * Makefile.in (mips-tfile, mips-tfile.o, mips-tdump, mips-tdump.o):
+ New rules.
+ * mips-tfile.c: Don't define memory functions on Alpha.
+ (Ptrdiff_t): Always `long'.
+ (WORD_ALIGN): Make portable.
+ * mips/t-bsd, t-mips, t-svr3, t-svr4, t-ultrix: Remove
+ definition of EXTRA_PASSES and remove rules for mips-* files.
+
+ * dbxout.c (dbxout_parms): Don't confuse a parameter at an
+ offset of zero from AP or FP with one that has variable size.
+
+ * calls.c (emit_library_call): Fix typo in last change; should
+ use Pmode instead of SImode.
+
+Fri Oct 8 00:34:39 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (finish_decl): Error if block-scope static var
+ has incomplete type.
+
+ * expr.c (expand_expr, case VAR_DECL): If decl wasn't laid out,
+ lay it out now, and fix the rtl's mode.
+
+Thu Oct 7 12:30:10 1993 Chip Salzenberg (chip@fin.uucp)
+
+ * c-decl.c (complete_array_type): Correctly set MAXINDEX to
+ one less than array size.
+
+Thu Oct 7 20:44:41 1993 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * c-typeck.c (build_binary_op): For *_DIV_EXPR, set shorten based
+ on orig_op0.
+
+Thu Oct 7 18:19:17 1993 Jim Wilson (wilson@cygnus.com)
+
+ * xm-mips.h (HAVE_VPRINTF): Correct typo, is VPRINTF not VFPRINTF.
+
+ * Makefile.in (LIB2FUNCS): Add _fixtfdi, _fixunstfdi, _floatditf.
+
+Thu Oct 7 14:58:02 1993 Michael Meissner (meissner@osf.org)
+
+ * configure (i386-osf): ELF on OSF/1 does not need collect2.
+
+Thu Oct 7 17:38:25 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (main): New option -lang-c-c++-comments.
+
+Thu Oct 7 16:40:38 1993 Michael Meissner (meissner@osf.org)
+
+ * config/i386/osfrose.h (OSF_PROFILE_BEFORE_PROLOGUE): New macro
+ to determine whether profiling goes before the function prologue
+ or after. New style profiling goes before in order to save
+ getting and saving the function's callers address or have mcount
+ 'know' there is a frame pointer. Old style profiling using mcount
+ and some ELF PIC profiling goes after the prologue.
+ (FUNCTION_PROLOGUE): Redefine in order to get new style profiling
+ before the function prologue if desired.
+ (FUNCTION_PROFILER): Do not put a profile call if it already has
+ been put out in the prologue. Change new style profiling to call
+ through _mcount_ptr instead of _real_mcount. Propigate ROSE brain
+ damage regarding mcount being in the users name space to ELF.
+ (SUBTARGET_SWITCHES): Make -mmcount default again instead of
+ -mno-mmcount.
+
+ * i386.h (FINALIZE_PIC): Add macro to set the variable
+ current_function_uses_pic_offset_table if either -p or -a switches
+ are used.
+
+Thu Oct 7 17:07:57 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * rtl.c (byte_mode, word_mode): Move to emit-rtl.c.
+ (init_rtl): Move initialization of byte_mode and word_mode to
+ init_emit_once.
+ * emit_rtl.c (byte_mode, word_mode): Moved from rtl.c.
+ (init_emit_once): Moved in initialization of bytes_mode and
+ word_mode from init_rtl.
+
+Thu Oct 7 11:11:25 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cccp.c (struct file_name_list): Add new field c_system_include_path.
+ (*various*): Set this flag correctly
+ (is_system_include): Return 2 if C-language system include.
+ (output_line_command): Output " 4" after " 3" for C-language system
+ include.
+
+Thu Oct 7 14:45:20 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * Makefile.in (install-dir): Fix typo.
+ (install-common): Remove obsolete comment.
+ (install-common): Install native g++ only if not cross.
+
+Thu Oct 7 11:27:45 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * calls.c (emit_library_call, emit_library_call_value):
+ Allocate a temp slot if arg must be passed by reference.
+
+ * gcc.c (read_specs): Fix call to bzero.
+
+Thu Oct 7 08:53:57 1993 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * alpha.md: Clean up usage of commutative declarator `%'.
+
+Thu Oct 7 08:14:46 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * i860/xm-fx2800.h (HAVE_VPRINTF): Fix typo; was HAVE_VFPRINTF.
+
+ * xm-alpha.h: Always declare malloc, realloc, etc, to be void *.
+
+ * combine.c (force_to_mode): Sign-extend constant being truncated.
+
+Wed Oct 6 18:53:43 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * bi-lexer.c (xmalloc, xrealloc): Cast the result of malloc, realloc.
+
+Wed Oct 6 15:30:39 1993 Michael Meissner (meissner@osf.org)
+
+ * i386/osfrose.h (FUNCTION_PROFILER): Define to pass the function
+ address, its caller, and the unique label address through the
+ _real_mcount pointer, unless -mmcount is used, in which case use
+ the old calling sequence.
+ (SUBTARGET_SWITCHES): Add -mmcount, -mno-mcount support.
+
+Wed Oct 6 15:29:40 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.c (output_function_prologue): Pass on information about the
+ number of callee saved general and floating point registers which
+ are saved by the current function's prologue.
+ (hppa_expand_prologue): Keep track of the number of callee
+ register saves done for general and floating point registers.
+
+Wed Oct 6 13:50:03 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * cexp.y (MAX_CHAR_TYPE_SIZE, MAX_INT_TYPE_SIZE,
+ MAX_LONG_TYPE_SIZE, MAX_WCHAR_TYPE_SIZE): Define.
+ (yylex): Use them instead of the non-MAX versions, to avoid
+ dependencies on target_flags.
+
+Wed Oct 6 13:47:13 1993 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
+
+ * combine.c (try_combine): New variable i3_subst_into_i2.
+ Set it for special case of substituting i3 into i2. Use it near
+ end to detect when special case succeeded. Move i2notes to
+ i3notes for this special case.
+ (distribute_notes, REG_UNUSED case): Ignore all REG_UNUSED notes
+ except those from I3.
+
+Wed Oct 6 13:14:13 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_c_cast): When making a CONSTRUCTOR, provide
+ the dummy first operand.
+
+ * real.c (real_value_truncate): Correct etrunci argument
+ in case SImode.
+
+Wed Oct 6 06:55:05 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * final.c (asm_fprintf): Add cases for 'w' and 'l'.
+
+ * Makefile.in (bi-opcode.o): Includes hconfig.h.
+ * bi-lexer.c: Remove declarations of malloc and realloc.
+ * bi-opcode.c: Include hconfig.h.
+ * bi-parser.y: Remove declaration of malloc.
+
+ * regclass.c (record_reg_classes): Check if operands are the same
+ by seeing if they are the same register.
+
+ * cse.c (record_jump_cond): Rehash OP1 if OP0's insert_regs returns
+ nonzero.
+
+ * calls.c (expand_call): Add yet another assignment to MEM_IN_STRUCT_P.
+
+Wed Oct 6 00:08:28 1993 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
+
+ * sparc.c (uns_small_int, uns_arith_operand): New functions.
+ * sparc.md (umulsidi3): Use uns_arith_operand not arith_operand.
+ (const_umulsidi3): Use uns_small_int not small_int.
+
+ * sparc.h (SELECT_CC_MODE): Add support for ASHIFT.
+ * sparc.md (ashlsi3+1, ashlsi3+2): New patterns to replace shift
+ and compare with addcc.
+
+Tue Oct 5 16:25:32 1993 Jim Wilson (wilson@cygnus.com)
+
+ * sched.c (sched_analyze_2): Make volatile asms depend on all
+ pseudo registers.
+
+ * mips.c (mips_expand_prologue): Handle structure return values as
+ the first argument if necessary.
+
+ * mips.h (CLASS_MAX_NREGS): For DFmode and !TARGET_FLOAT64 case,
+ return 2 not 4.
+ (CLASS_UNITS): Take size parameter instead of num (words).
+
+ * c-typeck.c (output_init_element): When try to copy FIELD if it
+ is an interger constant, first check to make sure it is nonzero.
+
+ * reorg.c (fill_simple_delay_slots): When take insn from a
+ following unconditional branch target, if new_label is zero, must
+ set it to the result of find_end_label ().
+
+ * iris3.h (INITIALIZE_TRAMPOLINE, TRANSFER_FROM_TRAMPOLINE):
+ Delete.
+ * mips.h (INITIALIZE_TRAMPOLINE): Delete #ifndef/#endif. Change
+ function name from __enable_execute_stack to __gcc_flush_cache.
+ (TRANSFER_FROM_TRAMPOLINE): Likewise. Delete code calling
+ mprotect. Uncomment code calling cacheflush.
+
+Tue Oct 5 16:11:53 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * toplev.c (error and its kin): Use #defines for the argument
+ lists for ease of adding arguments and add one arg.
+
+Tue Oct 5 16:05:11 1993 Tor Egge (tegge@pvv.unit.no)
+
+ * cccp.c (rescan): Don't expand an identifier after a '#'.
+
+Tue Oct 5 15:15:52 1993 Chip Salzenberg (chip@fin.uucp)
+
+ Move format warning code to c-common.c for use with C++.
+ * c-tree.h (init_function_format_info, record_function_format,
+ check_function_format): Declare.
+ * c-common.c: Include <ctype.h>; avoid home-grown ISDIGIT.
+ (decl_attributes): Call record_function_format with DECL_NAME
+ and also DECL_ASSEMBLER_NAME.
+ (struct format_char_info): Moved here from c-typeck.c.
+ (print_char_table): Likewise; renamed from print_table.
+ (scan_char_table): Likewise; renamed from scan_table.
+ (struct function_format_info): Likewise; add assembler_name.
+ (function_format_list): Make list, not array.
+ (init_function_format_info): Likewise; renamed from
+ init_format_info_table.
+ (record_function_format): Likewise; renamed from
+ record_format_info; record assembler_name.
+ (check_format_info): Likewise; renamed from check_format.
+ (check_function_format): New interface that does not require
+ knowledge of struct function_format_info.
+ * c-decl.c (init_decl_processing): Call init_function_format_info.
+ * c-typeck.c (struct format_char_info, print_table, scan_table,
+ struct function_info, function_info_entries, function_info_table,
+ record_format_info, init_format_info_table, check_format): Moved
+ to c-common.c.
+ (build_function_call): Call check_function_format.
+
+Tue Oct 5 14:08:18 1993 Wolfgang Stukenbrock (wgstuken@informatik.uni-erlangen.de)
+
+ * gcc.c (choose_temp_base): Correct size allocated for temp_filename.
+
+Tue Oct 5 06:34:34 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.c (contains_placeholder_p): Return 0 for CONSTRUCTOR.
+ (substitute_in_expr): Don't allow CONSTRUCTOR.
+
+ * tree.c (make_node, case 'd'): Refine in which obstack
+ PARM_DECLs are allocated.
+
+ * calls.c (expand_call): Properly test if we need to promote
+ operand; use convert_modes instead of convert_to_mode.
+ * expr.c (convert_modes): Properly handle extending constants
+ since we might be changing signedness.
+
+ * gcc.c (read_specs): Make a null entry at end of `compilers'
+ when reading new entry from file.
+
+ * tree.c (contains_placeholder): Return 0 for WITH_RECORD_EXPR.
+
+ * bi-arity.c, bi-lexer.c, bi-opname.c, bi-parser.y: Include hconfig.h.
+ * Makefile.in (bi-arity.o, bi-lexer.o, bi-opname.o, bi-parser.o):
+ Likewise.
+
+ * bc-emit.c (dconst[012], dconstm1): Remove redundant definition.
+
+Tue Oct 5 06:24:43 1993 Lisa Repka (lisa@MicroUnity.com)
+
+ * varasm.c (decode_rtx_const, case CONST_DOUBLE): Only use mode
+ of X if it is not VOIDmode.
+
+Tue Oct 5 00:45:30 1993 James Van Artsdalen (james@bigtex.cactus.org)
+
+ * i386/i386.c (output_to_reg): Handle XFmode write to MEM by
+ reading back value after write if source doesn't die.
+ * i386/i386.md (pushxf,movxf,extenddfxf2,extendsfxf2): Likewise.
+
+ * i386/i386.md (movxf,extenddfxf2,extendsfxf2): Don't emit fld
+ before calling output_to_reg: output_to_reg does that now.
+
+ * i386/i386.h (FIXED_REGISTERS): Don't fix hard reg st7 if XFmode
+ is enabled.
+
+ * reg-stack.c (move_for_stack_reg): If the 387 regstack is not
+ full when doing an XFmode write from 387 to MEM, copy the source
+ reg and write the copy.
+
+Mon Oct 4 18:40:51 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * regclass.c (record_reg_classes): There is no alt_cost
+ for a pair of matching args if they are the same pseudo reg.
+
+ * varasm.c (bc_output_ascii): New function.
+ (assemble_string): Use it.
+ (assemble_static_space, assemble_variable): Put braces around uses
+ of BC_OUTPUT_COMMON and BC_OUTPUT_LOCAL.
+
+Mon Oct 4 18:03:04 1993 Stephen L Moshier (moshier@world.std.com)
+
+ * expr.c (bc_init_mode_to_opcode_maps, bc_expand_expr): Cast enum
+ array indices to int.
+ (bc_load_memory, bc_store_memory): Likewise.
+ (bc_runtime_type_code): Cast enum logical operand to int.
+ * bc-emit.c (bc_emit_bytecode): Cast enum array indices to int.
+ * bc-optab.c (deduce_conversion, emit_typecode_conversion): Likewise.
+ (bc_init_mode_to_code_map, preferred_typecode): Likewise.
+ (bc_expand_binary_operation, bc_expand_unary_operation): Likewise.
+ (bc_expand_increment): Likewise.
+ * bc-typecd.h: Cast enum arithmetic and logical operands to int.
+
+Mon Oct 4 05:52:21 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * a29k.c (incoming_regs): Only use 16 registers for parameter
+ passing.
+
+ * tree.c (build_string): Remove previous change and comment why
+ string text has to be in saveable_obstack.
+ * varasm.c (output_constant_def): Remove last change; no longer needed.
+
+Sun Oct 3 18:51:19 1993 James Van Artsdalen (james@bigtex.cactus.org)
+
+ * i386/i386.c (output_op_from_reg): Handle 3-word XFmode values.
+ (output_to_reg): Likewise.
+ (output_move_double): Handle XFmode operands.
+ (output_move_const_single): Use REAL_VALUE_TO_TARGET_SINGLE.
+ (print_operand): Add letter `T', size `12'. Use REAL_VALUE
+ macros to convert floating point operands.
+ (convert_387_op): Add XFmode to case FLOAT_EXTEND.
+
+ * i386/i386.h (LONG_DOUBLE_TYPE_SIZE): Define as 96.
+ (FIXED_REGISTERS): If XFmode enabled, hard reg st7 is fixed.
+ (ASM_OUTPUT_DOUBLE): Use REAL_VALUE_... macros.
+ (ASM_OUTPUT_FLOAT): Likewise.
+ (ASM_OUTPUT_LONG_DOUBLE): New macro.
+ (PRINT_REG): Add size case 12.
+ (DEBUG_PRINT_REG): Likewise.
+
+ * i386/i386.md: (tstxf_cc, tstxf, cmpxf, cmpxf_cc, cmpxf_ccfpeq,
+ swapxf, movxf, extenddfxf2, extendsfxf2, truncxfsf2, truncxfdf2,
+ fixuns_truncxfsi2, fix_truncxfdi2, fix_truncxfsi2, floatsixf2,
+ floatdixf2, addxf3, subxf3, mulxf3, divxf3, negxf2, absxf2,
+ sqrtxf2): New patterns.
+
+ * i386/next.h,i386/osfrose.h,i386/sysv4.h
+ (ASM_OUTPUT_DOUBLE,ASM_OUTPUT_FLOAT): Use REAL_VALUE_ macros.
+ (ASM_OUTPUT_LONG_DOUBLE): New macro.
+
+ * i386/bsd.h,i386/sco4.h (ASM_OUTPUT_DOUBLE): Deleted,
+ use default version.
+
+ * i386/next.h,i386/sco.h (VALUE_REGNO): Add case XFmode.
+
+Sun Oct 3 16:35:05 1993 Michael Meissner (meissner@wombat.gnu.ai.mit.edu)
+
+ * collect2.c (read_file): Fix typo in prototype.
+
+Sun Oct 3 18:32:46 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (bytecode.realclean): Don't delete bi-lexer.c.
+
+Sun Oct 3 19:45:02 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * gcc.c (default_compilers): Add rules for Ada.
+ * toplev.c (lang_options): Add temporary parameter "gnat".
+
+ * tree.c (staticp): DECL_EXTERNAL is not defined for CONSTRUCTOR.
+
+ * tree.def (PLACEHOLDER_EXPR, WITH_RECORD_EXPR): New tree codes.
+ * tree.c (save_expr): Don't evaluate something containing a
+ PLACEHOLDER_EXPR.
+ (contains_placeholder_p, substitute_in_{expr,type}): New functions.
+ * tree.h: Add declarations for new functions.
+ * calls.c (expand_call): Pass objects who size depends on the
+ contents of the object by invisible reference.
+ * function.c (assign_parms): Likewise.
+ * explow.c (expr_size): If the size contains a PLACEHOLDER_EXPR,
+ surround it with a WITH_RECORD_EXPR.
+ * expr.c (store_expr): Use expr_size value, not size_int.
+ (store_constructor): Handle case of variable position and allow
+ it to contain a PLACEHOLDER_EXPR.
+ (get_inner_reference): Make a WITH_RECORD_EXPR if required.
+ (expand_expr, case PLACEHOLDER_EXPR, WITH_RECORD_EXPR): New cases.
+ (expand_expr, case ARRAY_REF): Make WITH_RECORD_EXPR expressions
+ when needed.
+
+ * calls.c (expand_call): Set MEM_IN_STRUCT_P in stack slot if
+ appropriate.
+
+ * varasm.c (output_constant_def): Copy string as well as string
+ node when deferring output of constants.
+
+ * configure (i370-*): Renamed tm-mvs.h to mvs.h.
+ * config/i370/mvs.h: Renamed from tm-mvs.h.
+
+Sun Oct 3 12:50:57 1993 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * arm.h (function definitions): Add new functions definitions.
+ (arm_condition_codes): make this externally visible.
+ (STARTFILE_SPEC): Move to riscix.h and riscix1-1.h.
+ (CPP_PREDEFINES): Move old defn to riscix.h and riscix1-1.h, add
+ generaic default definition.
+ (CPP_SPEC): Define for generic implementation, pass cpu variant
+ defn to pre-processor.
+ (TARGET_VERSION): Indicate this is generic variant.
+ (TARGET_6): New macro, set when compiling for arm6 in 32bit mode.
+ (ARM_EXTRA_TARGET_SWITCHES): New macro, hook for os dependent files
+ to make additions to TARGET_SWITCHES. Default to null.
+ (processor_type): new enum type defining processor variant for
+ attributes.
+ (arm_cpu_attr): Macro to get at cpu type from attributes.
+ (TARGET_WHEN_DEBUGGING): remove non-generic definitions
+ (OVERRIDE_OPTIONS): Set processor type for attributes.
+ (OPTIMIZE_OPTIONS): Set flag_force_mem.
+ (PROMOTE_MODE): Promote byte constants unsigned.
+ (ENABLE_XF_PATTERNS): Define, do not enable XFmode insns by default
+ -- it tends to crash riscix.
+ (REAL_ARITHMETIC): Define.
+ (CONSTANT_ALIGNMENT): Align string constants so that we can access
+ them faster.
+ (TARGET_FLOAT_FORMAT): Is IEEE_FLOAT_FORMAT.
+ (FIRST_PSEUDO_REGISTER): Increase to support fake registers.
+ (FIXED_REGISTERS): Describe behaviours of fake regs.
+ (CALL_USED_REGISTERS): Likewise.
+ (HARD_REGNO_NREGS): Deal with fake frame and argument registers.
+ (HARD_REGNO_MODE_OK): Likewise.
+ (FRAME_POINTER_REGNUM): Make this a fake register)
+ (HARD_FRAME_POINTER_REGNUM): Define. set to reg 11 (fp).
+ (FRAME_POINTER_REQUIRED): It is if TARGET_APCS.
+ (ARG_POINTER_REGNUM): Set to new fake register.
+ (CC_REGNUM): Define, set to fake register.
+ (REG_ALLOC_ORDER): Adjust to get better allocation in small functions.
+ Add fake registers.
+ (REG_CLASS_CONTENTS): Add new fakes.
+ (REGNO_REG_CLASS): Likewise.
+ (CONST_OK_FOR_LETTER_P): Add recognition for negated and inverted
+ constant integers.
+ (EXTRA_CONSTRAINT): Add 'Q' to recognize MEM (REG). Add 'S' for
+ symbols in the text segment.
+ (CONST_DOUBLE_OK_FOR_LETTER_P): Add 'H' for negated fp constants.
+ (SECONDARY_OUTPUT_RELOAD_CLASS): Define. Needed to store DFmode held
+ in SImode regs.
+ (REGISTER_MOVE_COST): Make this more expensive than memory for
+ float<->int moves.
+ (USE_RETURN_INSN): Define, call function.
+ (ELIMINABLE_REGS): Define to eliminate fake regs.
+ (CAN_ELIMINATE): Likewise.
+ (INITIAL_ELIMINATION_OFFSET): Likewise.
+ (INITIAL_FRAME_POINTER_OFFSET): Delete.
+ (REGNO_OK_FOR_BASE_P): Add fake regs.
+ (MAX_REGS_PER_ADDRESS): Is only 2; shifting by reg not allowed in addr.
+ (CONSTANT_ADDRESS_P): Accept addresses with the symbol_ref flag set.
+ (LEGITIMATE_CONSTANT): Accept negated floats; also constant addresses.
+ (ENCODE_SECTION_INFO): Mark strings that will go in the text segment
+ with the symbol_ref flag.
+ (REG_OK_FOR_BASE_P [!REG_OK_STRICT]): Add new fakes.
+ (REG_OK_FOR_PRE_POST_P [!REG_OK_STRICT]): Likewise.
+ (REG_OK_FOR_PRE_POST_P [REG_OK_STRICT]): Likewise.
+ (GO_IF_LEGITIMATE_INDEX): constant FLOAT indicees must be word
+ aligned; be more restrictive about multi-reg ints; allow all legal
+ shift operations; check boundary conditions more carefully.
+ (DEFAULT_SIGNED_CHAR): Remove os dependent alternatives.
+ (LOADS_ZERO_EXTEND): Define; only QImode loads do.
+ (HAVE_VPRINTF): Move to xm-arm.h
+ (SHIFT_COUNT_TRUNCATED): Not true -- Delete.
+ (CONST_COSTS): Define; give the cost of constants.
+ (RTX_COSTS): Define; give the cost of rtl.
+ (MEMORY_MOVE_COST): Is expensive.
+ (BRANCH_COST): Set high to get conditional instructions.
+ (ADDRESS_COST): Are all the same.
+ (NOTICE_UPDATE_CC): Delete.
+ (EXTRA_CC_MODES): Add a no overflow mode and floating point modes.
+ (EXTRA_CC_NAMES): Likewise.
+ (SELECT_CC_MODE): Return the appropriate mode.
+ (STORE_FLAG_VALUE): Define.
+ (PREDICATE_CODES): Define, show what they are.
+ (ARM_OS_NAME): Supply generic version.
+ (ASM_FILE_START): Print appropriate OS name.
+ (REGISTER_NAMES): Add fakes.
+ (DBX_OUTPUT_MAIN_SOURCE_FILENAME): set desc field to compiler version
+ number expected by dbx (RISCIX hack).
+ (ASM_OUTPUT_INTERNAL_LABEL): Don't reset arm_ccfsm_state if label isn't
+ a code ('L') label.
+ (ASM_OUTPUT_LONG_DOUBLE): Define for XFmode.
+ (ASM_OUTPUT_DOUBLE): Use REAL_ARITMETIC routines.
+ (ASM_OUTPUT_FLOAT): Likewise.
+ (ASM_OUTPUT_OPCODE): Change of arm_ccfsm_state is now handled by insns
+ that need to change it.
+ (PRINT_OPERAND): %d is replaced by appropriate condition characters,
+ %D by the inverse of those given. CONST_DOUBLEs use REAL_ARITHMETIC
+ functions.
+ (PRINT_OPERAND_ADDRESS): Support all the shift types.
+ (INIT_CUMULATIVE_ARGS): Add missing bracket.
+
+ * riscix.h: New file -- OS dependent defintitions for riscix 1.2 and
+ above.
+
+ * riscix1-1.h: New file -- OS dependent definitions for riscix before
+ version 1.2
+
+ * rix-gas.h: New file -- riscix 1.2 and above, but with an assembler
+ which supports stabs.
+
+ * arm.c (arm_compare_op0, arm_compare_op1, arm_compare_fp): New
+ variables.
+ (arm_cpu): New variable.
+ (lr_save_eliminated): New variable.
+ (arm_condition_codes): delete definition.
+ (return_used_this_function): New variable.
+ (use_return_insn): New function.
+ (const_ok_for_arm): Use HOST_WIDE_INT; rewrite to work if
+ HOST_WIDE_INT > 32 bits.
+ (fpa_consts_inited, strings_fpa): New variables.
+ (init_fpa_table): New function, initialize above.
+ (const_double_rtx_ok_for_fpu): Rewrite using fpa_consts_inited and
+ REAL_ARITHMETIC functions.
+ (neg_const_double_rtx_ok_for_fpu): New function.
+ (s_register_operand): New function, as register_operand, but don't
+ accept SUBREG (MEM).
+ (reload_memory_operand): New function.
+ (arm_rhs_operand): Use s_register_operand.
+ (arm_rhsm_operand): New function.
+ (arm_add_operand): New function.
+ (arm_not_operand): New function.
+ (fpu_rhs_operand): Use s_register_operand.
+ (fpu_add_operand): New function.
+ (di_operand): Use s_register_operand.
+ (di_operand, case MEM): address must be offsettable.
+ (index_operand): Use s_register_operand.
+ (const_shift_operand): New function.
+ (shift_operator): Also accept MULT by power of two.
+ (equality_operator): New function.
+ (minmax_operator): New function.
+ (cc_register): New function.
+ (minmax_code): New function.
+ (adjacent_mem_locations): New function.
+ (load_multiple_operation): New function.
+ (store_multiple_operation): New function.
+ (arm_gen_load_multiple): New function.
+ (arm_gen_store_multiple): New function.
+ (gen_compare_reg): New function.
+ (arm_backwards_branch): New function.
+ (short_branch): New function.
+ (arm_insn_not_targeted): New function.
+ (fp_immediate_constant): New function.
+ (eliminate_lr2ip): New function.
+ (output_call_mem): New function.
+ (output_mov_long_double_fpu_from_arm): New function.
+ (output_mov_long_double_arm_from_fpu): New function.
+ (output_mov_long_double_arm_from_arm): New function.
+ (output_move_double): output constants using output_move_immediate;
+ sign_extend CONST_INTs; handle PRE/POST INCs.
+ (shift_instr): Handle MULT.
+ (output_shift_compare): New function.
+ (pattern_really_clobbers_lr): New function.
+ (function_really_clobbers_lr): New function.
+ (output_return_instruction): New function.
+ (output_prologue): Determine whether tail calling is possible,
+ compensate for this when saving registers. Re-initialize
+ return_used_this_function; use HARD_FRAME_POINTER_REGNUM, when
+ saving floating point regs.
+ (output_epilogue): Epilogue isn't needed if return_used_this_function;
+ use HARD_FRAME_POINTER_REGNUM when restoring floating point regs
+ and there is a stack frame; Arm 6 requires different return
+ instruction.
+ (output_load_symbol): New function.
+ (final_prescan_insn): Add support for RETURN patterns; can also
+ conditionalize and target a RETURN; use attributes to determine
+ whether condition codes are set or clobbered; add new case CALL_INSN
+ to switch, fail if Arm 6; support a jump inside a parallel; call
+ recog () before returning to recover from using attributes on other
+ insns.
+
+ * arm.md (type): New attribute for scheduling.
+ (cpu): New attribute for cpu type for use in conds attribute.
+ (conds): New attribute to describe actions on condition codes, set in
+ insns.
+ (length): New attribute, set in insns.
+ (write_conflict): New attribute describing conflicts with the write
+ buffer.
+ (fpa): New function unit for floating point co-processor.
+ (write_buf): New function unit for Arm 6 write buffer.
+ Most patterns: use s_register_operand instead of register_operand.
+ Most patterns: Don't use general operand and then expect reload to
+ do the work.
+ (adddi3): op0 can be the same as ops1 or 2; clobbers condition codes.
+ New unnamed patterns to add an SImode operand to a DImode op.
+ (addsi3): accept constants that can be catered for using sub.
+ New unnamed patterns that set conditions on add.
+ (incscc): new pattern, conditional increment.
+ New split to add some numbers in two insns.
+ (addsf3): Use REAL_ARITHMETIC; support -ve immediates.
+ (adddf3): Likewise.
+ (FLOAT_EXTEND and ADD): New unnamed patterns.
+ (addxf3): New pattern.
+ (subdi3): Allow input and output operands to overlap exactly.
+ (SUB DImode and SImode): New unnamed patterns.
+ (subsi3): Don't accept a constant as last operand, it will never be
+ matched.
+ (SUB and set CC) New unnamed patterns.
+ (decscc): new pattern, conditional decrment.
+ (subdf3): Fix bad case alternative.
+ (FLOAT_EXTEND and SUB): New unnamed patterns.
+ (subxf3): New pattern.
+ (mulsi3): Allow op2 to be the same as op0
+ (MULT and set CC): New unnamed patterns.
+ (MULT and ADD): Ops 2 and 3 can match op 0.
+ (MULT, ADD and set CC): New unnamed patterns.
+ (mulsf3): use fmls for faster multiply.
+ (FLOAT_EXTEND and MULT): New unnamed patterns.
+ (mulxf3): New pattern.
+ (divsf3): use dvfs and rdfs for faster divide.
+ (FLOAT_EXTEND and DIV): New unnamed patterns.
+ (divxf3): New pattern.
+ (FLOAT_EXTEND and MOD): New unnamed patterns.
+ (modxf3): New pattern.
+ (anddi3): op 0 can be the same as ops1 or 2.
+ (*_EXTEND and AND): New unnamed patterns
+ (andsi3): Also accept constants that can be handled with bic
+ instruction.
+ (AND and set CC): New unnamed patterns.
+ (andcbsi3): Delete, this can't be generated any more.
+ (NOT then AND): New unnamed patterns.
+ (NOT then AND and set CC): Likewise.
+ (iordi3): Ops 1 and 2 can match op 0.
+ (*_EXTEND and IOR): New unnamed patterns.
+ (iorsi3): Only accept a valid rhs operand for op 2.
+ (IOR and set CC): New unnamed patterns.
+ (xordi3): New pattern.
+ (*_EXTEND and XOR): New unnamed patterns.
+ (xorsi3): Only accept a valid rhs operand for op 2.
+ (XOR and set CC): New unnamed patterns.
+ (split pattern): Complex pattern with NOT, AND, and IOR, can
+ sometimes produce better code if reordered.
+ (AND (IOR () NOT ())): Special pattern to recognize spilt above.
+ ([su]{min,max}si3): New patterns.
+ (set memory from MIN/MAX operation): New pattern.
+ (Arithmetic on MIN/MAX operation): New pattern.
+ (ashlsi3, ashrsi3, lshrsi3, rotrsi3): Only accept a valid rsh for op2.
+ (unnamed LSHIFT pattern): likewise.
+ (SHIFT and set CC): New unnamed patterns.
+ (SHIFT and NOT): New unnamed pattern.
+ (SHIFT, NOT and set CC): New unnamed patterns.
+ (negdi2): operand1 can be the same as op 0.
+ (FLOAT_EXTEND and NEG): New unsigned pattern.
+ (negxf2): New pattern.
+ (abssi2): New pattern.
+ (ABS and NEG): New unnamed pattern.
+ (FLOAT_EXTEND and ABS): New unnamed pattern.
+ (absxf2): New pattern.
+ (FLOAT_EXTEND and SQRT): New unnamed pattern.
+ (sqrtxf2): New pattern.
+ ({sin,cos}{sf,df,xf}2): New patterns.
+ (FLOAT_EXTEND and SIN/COS): New unnamed patterns.
+ (one_cmpldi2): New pattern.
+ (NOT and set CC): New unnamed patterns.
+ (floatsixf2, fix_truncsfsi2, fix_truncdfsi2, fix_truncxfsi2): New
+ patterns.
+ (truncxfsf2, truncxfdf2): New patterns.
+ (zero_extendsidi2, zero_extendqidi2, extendsidi2): New patterns.
+ (ZERO_EXTEND and set CC): New patterns.
+ (extend{sf,df}xf2): New patterns.
+ (movdi): Constrains must accept PRE/POST INC/DEC.
+ (movsi): make an expand that splits up integers and unsupported
+ moves.
+ (unnamed pattern to match movsi): New, don't allow things to
+ be moved back together again.
+ (REG-REG copy and set CC): New unnamed pattern.
+ (restorehi): use plus_constant in expansion code, not PLUS in RTL part.
+ (storehi, storeinthi): likewise.
+ (movhi): Break up impossible moves.
+ (pattern to match movhi): Don't allow impossible moves to be put
+ back together.
+ (movqi): Break up impossible moves.
+ (pattern to match movqi): Don't allow impossible moves to be put
+ back together; convert negative constants into mvn instruction.
+ (movsf): Use REAL_ARITHMETIC for constants; add alternatives for
+ moving GENERAL_REGS to and from memory.
+ (movdf): Make this an expand; split out impossible moves.
+ (reload_outdf): New pattern.
+ (pattern to match movdf): Don't allow impossible moves to be put back
+ together; add alternatives for moving GENERAL_REGS to and from memory;
+ rearrange and weight to get optimal register allocation.
+ (movxf): New pattern.
+ (load_multiple): New expand pattern.
+ (pattern to load multiple, pattern to load multiple with write-back):
+ New unnamed patterns.
+ (store_multiple): New expand pattern.
+ (pattern to store multiple, pattern to store multiple with write-back):
+ New unnamed patterns.
+ (movstrsi): Expand short moves as a series of load/store multiples with
+ write-back.
+ (cmp*): Make these expands; just set some state variables.
+ (CC = COMPARE op, op): New unnamed patterns.
+ (CC = COMPARE op, NEG op): New unnamed pattern.
+ (CC = COMPARE op, SHIFT op): New unnamed pattern.
+ (FLOAT_EXTEND then COMPARE): New unnamed patterns.
+ (CC = CC): New unnamed (dummy) pattern to allow cse to combine repeated
+ compares.
+ (b{eq,ne,le,lt,ge,gt,geu,gtu,leu,ltu}): Make these expand patterns,
+ use gen_compare_reg().
+ (pattern to match branches, pattern to match inverted brances): New
+ unnamed patterns.
+ (s{eq,ne,le,lt,ge,gt,geu,gtu,leu,ltu}): New expands.
+ (pattern to match store_flag operations): New unnamed pattern.
+ (pattern to match NOT store_flag, pattern to match NEG store_flag):
+ New unnamed patterns.
+ (jump): handle arm_ccfsm_state explicitly.
+ (CALL (MEM)): New unnamed patterns.
+ (return): New pattern.
+ (conditional RETURN): New unnamed patterns;
+ (table_jump (MEM)): New unnamed pattern.
+ (indirect_jump (MEM)): New unnamed pattern.
+ Replace shift-arithmetic patterns with new versions that catche all
+ cases.
+ (Old peephole patterns (commented out)): remove.
+ (shift-arithmetic and set CC): New unnamed patterns.
+ (reload patterns for all shift-arithmetic patterns): New patterns.
+ Add many new patterns to merge store_flag patterns, arithmetic and
+ shifting.
+ New patterns to match conditional comparisons.
+ (movcond): New pattern.
+ (arith (MEM, MEM+4)): New unnamed pattern to spot load multiple
+ possibility.
+ (patterns to match extended pre-increment): New unnamed patterns.
+ (peepholes to match extended post-increment): New.
+ (peephole to match move and set conds): Needed because combine misses
+ this one.
+ (peepholes to match load/store multiples): New.
+ (CALL, RETURN): New peephole.
+ (CALL, JUMP): New peephole.
+ (save_stack_nonlocal, restore_stack_nonlocal): New expands for
+ non-local gotos.
+ special split to break up some conditional arithmetic sequences
+ before scheduling.
+
+ *configure (arm-*-riscix1.[01]*, arm-*-riscix*): New configurations.
+ *config.sub: Recognize operating system "riscix*"; recognize acorn as
+ vendor.
+
+Sat Oct 2 17:24:44 1993 James Van Artsdalen (james@bigtex.cactus.org)
+
+ * i386.md (addhi3): Use byte opcodes when the low byte of a word
+ is known to be zero.
+
+Sat Oct 2 14:11:06 1993 John F Carr (jfc@Athena.mit.edu)
+
+ * combine.c (can_combine_p): Allow an insn with a REG_EQUIV note
+ that reads memory to be moved past an insn that writes memory.
+
+Sat Oct 2 14:04:03 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * regclass.c (record_reg_classes): Skip to next alternative
+ when we skip normal cost computation.
+
+ * collect2.c: Add prototypes to static declarations.
+ (PROTO): New macro.
+ (dup2, putenv): Functions return integers; add type and returns.
+
+ * varasm.c (make_decl_rtl): Set TREE_SIDE_EFFECTS on global if
+ -fvolatile-global.
+
+ * tree.c (build_string): Make lifetime of string the same as
+ tree node.
+
+Sat Oct 2 04:55:44 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * a29k/a29k.h, a29k/unix.h, alpha/alpha.h, arm/arm.h, clipper/clix.h,
+ convex/convex.h, elxsi/elxsi.h, fx80/fx80.h, gmicro/gmicro.h,
+ h8300/h8300.h, i370/tm-mvs.h, i386/386bsd.h, i386/aix386ng.h,
+ i386/gas.h, i386/go32.h, i386/linux.h, i386/lynx.h, i386/mach.h,
+ i386/next.h, i386/osfelf.h, i386/osfrose.h, i386/sco.h, i386/sco4.h,
+ i386/sco4dbx.h, i386/scodbx.h, i386/sequent.h, i386/sun.h,
+ i386/sysv3.h, i386/sysv4.h, i860/fx2800.h, i860/i860.h, i860/mach.h,
+ i860/sysv3.h, i860/sysv4.h, i960/i960.h, m68k/3b1.h, m68k/3b1g.h,
+ m68k/altos3068.h, m68k/apollo68.h, m68k/crds.h, m68k/ctix.h,
+ m68k/dpx2.h, m68k/hp2bsd.h, m68k/hp320.h, m68k/hp3bsd.h,
+ m68k/hp3bsd44.h, m68k/isi.h, m68k/lynx.h, m68k/m68kv4.h,
+ m68k/mot3300.h, m68k/news.h, m68k/next.h, m68k/pbb.h, m68k/plexus.h,
+ m68k/sun2.h, m68k/sun3.h, m68k/sun3mach.h, m68k/tower-as.h,
+ m68k/tower.h, m88k/dgux.h, m88k/luna.h, m88k/m88k.h, m88k/sysv3.h,
+ m88k/sysv4.h, mips/bsd-4.h, mips/bsd-5.h, mips/dec-osf1.h,
+ mips/iris3.h, mips/mips.h, mips/news4.h, mips/news5.h,
+ mips/nws3250v4.h, mips/osfrose.h, mips/svr3-4.h, mips/svr3-5.h,
+ mips/svr4-4.h, mips/svr4-5.h, mips/ultrix.h, ns32k/encore.h,
+ ns32k/merlin.h, ns32k/ns32k.h, ns32k/pc532-mach.h, ns32k/pc532.h,
+ ns32k/sequent.h, ns32k/tek6000.h, ns32k/tek6100.h, ns32k/tek6200.h,
+ pa/pa-ghpux.h, pa/pa-gux7.h, pa/pa-hpux.h, pa/pa-hpux7.h,
+ pa/pa-utahmach.h, pa/pa.h, pa/pa1-utahmach.h, pyr/pyr.h, romp/romp.h,
+ rs6000/aix31.h, rs6000/mach.h, rs6000/rs6000.h, sh/sh.h, sparc/lite.h,
+ sparc/lynx.h, sparc/pbd.h, sparc/sol2.h, sparc/sparc.h, sparc/sysv4.h,
+ spur/spur.h, tahoe/harris.h, tahoe/tahoe.h, vax/ultrix.h, vax/vax.h,
+ vax/vaxv.h, vax/vms.h, we32k/we32k.h
+ (CPP_PREDEFINES): Add system/cpu/machine assertions where missing.
+
+Fri Oct 1 22:11:17 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gvarargs.h: Test __sequent__ like __BSD_NET2__.
+
+Fri Oct 1 17:19:54 1993 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * cse.c (insert_regs): Always return something.
+ (simplify_unary_operation): Remove unused variable.
+ (cse_process_notes): Likewise.
+ (invalidate_skipped_block): Likewise.
+ (cse_set_around_loop): Likewise.
+
+ * pa-ghpux.h (LINK_SPEC): Pass "-a -archive" when
+ debugging.
+ * pa-hpux.h (LINK_SPEC): Likewise.
+ * pa-ghpux.h (LIB_SPEC): Make sure to add space between flags.
+ * pa-gux7.h (LIB_SPEC): Likewise.
+ * pa-hpux.h (LIB_SPEC): Likewise.
+ * pa-hpux7.h (LIB_SPEC): Likewise.
+
+Fri Oct 1 22:17:12 1993 Eric Youngdale (eric@kafka)
+
+ * vmsconfig.com: Write out the definitions from Makefile.in for
+ the symbols BC_ALL and BI_OBJ into files BC_ALL.OPT and
+ BI_ALL.opt. Remove "bytecode " from compiler options files so
+ compiler will link correctly.
+
+ * make-cc1.com (bc_generate): New VMS DCL function. Takes a BC
+ header file that needs to be generated, and builds it.
+
+ * make-cc1.com: Compile entries listed in BI_ALL.OPT, and then call
+ bc_generate for every header file listed in BC_ALL.OPT
+
+Fri Oct 1 21:13:17 1993 H.J. Lu (hjl@nynexst.com)
+
+ * config/i386/linux.h (LIB_SPEC): Handle -p anmd -pg outermost.
+
+Fri Oct 1 18:23:57 1993 Jim Wilson (wilson@cygnus.com)
+
+ * reload1.c (gen_input_reload): Handle PLUS with MEM operand
+ exactly the same as a PLUS with a REG operand.
+ * reload.c (form_sum): Undo Sep 28 change.
+
+ * Makefile.in (cc1, cc1plus, cc1obj): Delete superfluous
+ dependencies on bytecode.
+ (stamp-bcarity, stamp-bcopcode, stamp-bcopname): Create stamp files.
+
+Fri Oct 1 18:17:56 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * configure (cpp_md_flags): New variable.
+ (links): Build link from md.pre-cpp if cpp_md_flags defined.
+ (CPP_MD, CPP_MD_FLAGS, MD_FILE): New macros for Makefile.
+ * Makefile.in (md): New dependency.
+ (MD_FILE): New macro.
+ (clean): Remove file md if md.pre-cpp exists.
+ (distclean): Remove md.pre-cpp.
+
+Fri Oct 1 15:44:48 1993 Michael Meissner (meissner@osf.org)
+
+ * halfpic.h (toplevel): Enclose the whole file inside a #ifndef
+ NO_HALF_PIC conditional.
+
+ * i386/x-osfrose (CCLIBFLAGS, GCC_CFLAGS): Define NO_HALF_PIC so
+ that the two common variables in halfpic.h don't get created.
+
+ * mips/x-osfrose (CCLIBFLAGS, GCC_CFLAGS): Ditto.
+
+Fri Oct 1 10:46:15 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * a29k.h (R_KR): New macro.
+ (FIRST_PSEUDO_REGISTER, FIXED_REGISTERS, CALL_USED_REGISTERS):
+ Adjust for more registers present.
+ (REG_ALLOC_ORDER, REG_CLASS_CONTENTS, REGISTER_NAMES): Likewise.
+ (HARD_REGNO_NREGS, HARD_REGNO_MODE_OK, REGNO_REG_CLASS): Likewise.
+ (CONDITIONAL_REGISTER_USAGE): Swap names rather than replacing them.
+ * a29k.c (gpc_reg_operand): Include kernel registers.
+
+ * a29k.h (TARGET_LARGE_MEMORY): New flag; change value for
+ all others.
+ (ENCODE_SECTION_INFO): New macro.
+ (TARGET_SWITCHES): Add "normal" and change values.
+
+ * a29k.c (call_operand, case SYMBOL_REF): Handle TARGET_LARGE_MEMORY
+ and SYMBOL_REF_FLAG.
+
+Thu Sep 30 23:25:13 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * reorg.c (optimize_skip): Do not thread a jump to a new target if
+ doing so would invalidate the insn in the jump's delay slot.
+
+Thu Sep 30 14:21:03 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * bi-lexer.c (scan_string): Do xmalloc if buffer is null and
+ xrealloc if it's not, not the other way around.
+
+Thu Sep 30 10:57:30 1993 Jan Brittenson (bson@nutrimat.gnu.ai.mit.edu)
+
+ * bc-emit.c (bc_end_function, seg_data): Use bcopy instead of memcpy.
+
+Thu Sep 30 05:53:58 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (fold, case PLUS_EXPR, MINUS_EXPR): Properly handle
+ case when ARG1 splits and VARSIGN is -1.
+
+Wed Sep 29 19:41:18 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_modify_expr): Check whether recursive calls
+ return error_mark_node.
+
+Wed Sep 29 18:35:30 1993 Leonid Baraz (lbaraz@iil.intel.com)
+
+ * rtl.h (GEN_INT): Add missing cast to HOST_WIDE_INT.
+ * jump.c (rtx_renumbered_equal_p, case CONST_INT): Use INTVAL,
+ not XINT.
+
+Wed Sep 29 17:32:03 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * glimits.h (UINT_MAX, ULONG_MAX, ULONG_LONG_MAX):
+ redefine in a simpler way.
+
+Wed Sep 29 17:25:17 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
+
+ * fixincludes (sys/spinlock.h): change references of
+ "../machine/*.h" to <machine/*.h>
+
+Wed Sep 29 07:09:50 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.c (reg_or_short_operand): Remove redundant test.
+
+ * sched.c: Add prototypes for static function.
+ (add_dependence, remove_dependence, regno_use_in): Now static.
+ (schedule_insns): Have dummy version also take FILE * parameter.
+
+Wed Sep 29 01:29:31 1993 Paul Eggert (eggert@twinsun.com)
+
+ * cccp.c (quote_string): New function.
+ (special_symbol, write_output, output_line_command): Use it to escape
+ special characters in file names when outputting #line directives.
+ (do_line): Parse escape sequences in #line directives' file names.
+ * c-lex.c, cp-lex.c (check_newline, yylex, real_yylex): Likewise.
+ (ignore_escape_flag): Remove var.
+
+Tue Sep 28 21:27:26 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu
+
+ * function.c (push_temp_slots, pop_temp_slots): Always change level.
+ * cp-expr.c (cplus_expand_expr): Push and pop temp slots around
+ making new temp slots and freeing them.
+ * expr.c (expand_assignment, expand_expr, do_jumps): Likewise.
+ * integrate.c (expand_inline_function): Likewise.
+
+Tue Sep 28 18:50:57 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload.c (find_reloads): Don't call find_reloads_toplev
+ (or anything like that) for match_operator operands.
+
+ * config/ns32k/ns32k.c (output_move_double): Special code for
+ pushing from an address that uses the sp. Use PUSHOP for pushes,
+ not POPOP.
+
+ * config/ns32k/ns32k.h (FUNCTION_EPILOGUE, FUNCTION_PROLOGUE):
+ Add %$ in adjspb/adjspd insns.
+ * config/ns32k/ns32k.md (recognizer for subtracting const from reg 17):
+ Add %$ in adjspb/adjspd insns.
+
+ * bytetypes.h (QItype, HItype, SItype, DItype): Use __signed__.
+
+ * Makefile.in (stamp-bcopname, stamp-bcopcode):
+ Use shorter names for temporary files.
+ (bc-emit.o): Depend on bc-arity.h.
+
+ * bi-opname.c, bi-arity.c, bi-opcode.c (xmalloc): New function.
+ * bi-opname.c, bi-arity.c: Include stdio.h.
+
+ * function.c (expand_main_function): Put back accidentally
+ deleted previous change to use NAME__MAIN.
+
+ * glimits.h (INT_MAX, LONG_MAX, LONG_LONG_MAX): Delete parens.
+ (__glimits__evconcat__, __glimits__concat__): New macros.
+ (UINT_MAX, ULONG_MAX, ULONG_LONG_MAX): Use them.
+
+ * cccp.c (output_dots): New function.
+ (do_include): Call it (to indent output for print_include_names).
+
+Tue Sep 28 18:22:31 1993 Jim Wilson (wilson@cygnus.com)
+
+ * reload1.c (eliminate_regs): All recursive calls now pass INSN
+ instead of NULL_RTX. Second assignment to ref_outside_mem changed
+ to be same as first assignment.
+
+ * combine.c (force_to_mode, LSHIFTRT case): Avoid shifts larger
+ than HOST_BITS_PER_WIDE_INT.
+
+ * sched.c (schedule_insns): Don't zero reg_n_calls_crossed for
+ pseudos live across multiple blocks.
+
+ * fixincludes ({sparc,sun3,sun3x,sun4,sun4c,sun4m}/asm_linkage.h,
+ {sun4c,sun4m}/debug/asm_linkage.h: Replace /**/ with ##.
+
+ * reorg.c (mark_target_live_regs): When scanning insns, ignore
+ CLOBBERs in addition to USEs.
+
+ * life.h: Comment that this is for sparclite w/o FPU.
+ * sparc.h (CPP_SPEC): Handle -mf930 and -mf934.
+ (TARGET_SWITCHES): Add -mf930 and -mf934 options. -msparclite no
+ longer does -mno-fpu.
+
+ * fixinc.svr4, fixincludes (math.h): Put #ifndef around HUGE_VAL
+ define.
+ * math-68881.h, math-3300.h (HUGE_VAL): Add #undef before HUGE_VAL
+ define, instead of surrounding it with #ifndef/#endif.
+
+ * sparc/bsd.h: New file.
+ * configure (sparc-*-bsd*): New configuration.
+
+ * reload.c (form_sum): Change the way that form_sum canonicalizes
+ addresses, so that it never creates (PLUS (PLUS MEM CONST_INT) REG)
+ but instead canonicallizes this to (PLUS (PLUS REG CONST_INT) MEM).
+
+Tue Sep 28 16:00:25 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * bc-emit.c: Include gvarargs.h, not varargs.h.
+ Don't include string.h.
+ (seg_align): Use bzero, not memset.
+
+Mon Sep 27 20:53:01 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (pop_init_level): Add special case for nonincremental
+ scalar initializers.
+
+ * protoize.c: Declare rindex unconditionally.
+
+ * c-decl.c (init_decl_processing): Use signed_type and unsigned_type
+ to set signed_wchar_type_node and unsigned_wchar_type_node.
+
+Mon Sep 27 20:31:01 1993 Paul Eggert (eggert@twinsun.com)
+
+ * dbxout.c (dbxout_init, dbxout_source_file): Quote special
+ characters when outputting source file names.
+ * config/a29k/a29k.h, config/a29k/unix.h, config/alpha/alpha.h,
+ config/i386/aix386ng.h, config/i386/bsd.h, config/i386/gas.h,
+ config/i386/sun386.h (ASM_FILE_START): Likewise.
+ * config/elxsi/elxsi.h, config/m68k/3b1.h, config/m68k/crds.h,
+ config/m68k/mot3300.h, config/m68k/tower-as.h, config/m88k/m88k.h,
+ dwarfout.c (ASM_OUTPUT_SOURCE_FILENAME): Likewise.
+ * xcoffout.h, config/i386/i386iscgas.h, config/i860/fx2800.h
+ (DBX_OUTPUT_MAIN_SOURCE_DIRECTORY, DBX_OUTPUT_MAIN_SOURCE_FILENAME):
+ Likewise.
+ * xcoffout.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Likewise.
+ * config/mips/mips.c (mips_output_filename): Likewise.
+ * toplev.c (output_file_directive): Likewise.
+ (output_quoted_string): New function.
+
+Mon Sep 27 19:31:57 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * bi-lexer.c (xrealloc): Handle 0 passed as BLOCK.
+
+ * Makefile.in (stamp-bcopname, stamp-bcopcode, stamp-bcarity):
+ Renamed from stamp-bc-... to fit in 14 chars.
+ Don't rm the .h files.
+ (STAGESTUFF): Add some bc and bi files.
+
+ * c-lex.c (yylex): Handle i together with f or l in float constant.
+
+Mon Sep 27 19:00:18 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * cccp.c (special_symbol, initialize_builtins): If
+ NO_BUILTIN_SIZE_TYPE is defined, never refer to SIZE_TYPE.
+ Likewise for NO_BUILTIN_PTRDIFF_TYPE and PTRDIFF_TYPE.
+
+Mon Sep 27 18:59:09 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload1.c (eliminate_regs, SET case): Check for INSN_LIST
+ along with EXPR_LIST.
+
+Mon Sep 27 14:29:17 1993 Kresten Krab Thorup (krab@iesd.auc.dk)
+
+ * objc/typedstream.h (objc_read_object): Add declaration.
+
+Mon Sep 27 17:00:38 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure: Handle option --with-elf.
+ (i[34]86-*-linux*): Use linuxelf.h if --with-elf.
+ (i[34]86-*-osfelf): Config deleted.
+ (i[34]86-*-osfrose): Handle --with-elf.
+ * config/i386/linuxelf.h: New file.
+
+Mon Sep 27 14:19:33 1993 Jan Brittenson (bson@nutrimat.gnu.ai.mit.edu)
+
+ * expr.c (bc_expand_constructor): Delete cast of argument to
+ bc_emit_instruction to HOST_WIDE_INT. Move assignment of ptroffs
+ to separate line.
+
+Mon Sep 27 10:32:28 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * Makefile.in (stmt.o, expr.o, emit-rtl.o): Add missing dependency
+ on bc-typecd.def.
+ (bi-run.o): Fix formatting.
+
+Mon Sep 27 10:26:43 1993 Jan Brittenson (bson@nutrimat.gnu.ai.mit.edu)
+
+ * Makefile.in (bi-arity.h, bc-opcode.h, bc-opname.h): Use
+ move-if-changed.
+ (stamp-bc-arity, stamp-bc-opcode, stamp-bc-opname): New targets.
+
+Sun Sep 26 23:11:34 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (ASM_FILE_START): Remove last change for $LIT$ subspace,
+ not all HPUX linkers handle it correctly.
+
+Sun Sep 26 20:51:36 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * stmt.c (expand_exit_loop_if_false, bc_expand_start_cond):
+ Use xjumpifnot, not jumpifnot.
+
+ * Makefile.in (bi-arity, bi-opcode, bi-opname): Delete $(LEXLIB).
+
+ * varasm.c (assemble_string): Put braces around ASM_OUTPUT_ASCII.
+
+Sat Sep 25 08:30:16 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case COND_EXPR): Set MEM_IN_STRUCT_P
+ properly for TEMP.
+
+ * combine.c (BYTE_LOADS_EXTEND, LOAD_EXTEND): Deleted.
+ (subst, force_to_mode, nonzero_bits, num_sign_bit_copies):
+ Use new macros LOAD_EXTEND_OP and WORD_REGISTER_OPERATION instead
+ of BYTE_LOADS_*_EXTEND and LOAD_EXTEND.
+ * expr.c (do_store_flag): Likewise.
+ * reload.c (push_reload, find_reloads): Likewise.
+ * reload1.c (eliminate_regs): Likewise.
+ * a29k.h, alpha.h, clipper.h, arm.h, i960.h, m88k.h, mips.h:
+ Use WORD_REGISTER_OPERATION and LOAD_EXTEND_OP and delete
+ BYTE_LOADS_{SIGN,ZERO}_EXTEND.
+ * pa.h, romp.h, rs6000.h, sh.h, sparc.h: Likewise.
+
+Sat Sep 25 06:19:20 1993 Jan Brittenson (bson@nutrimat.gnu.ai.mit.edu)
+
+ * bi-lexer.l: Deleted.
+
+ * bi-lexer.c: New file.
+
+ * Makefile.in (bi-lexer): Deleted.
+ (bi-lexer.l): Deleted.
+
+Fri Sep 24 16:59:03 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ Cygnus<->FSF C++ front-end merge.
+
+ Tue Sep 21 19:17:29 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (build_ptrmemfunc_type): Set CLASSTYPE_GOT_SEMICOLON
+ just in case.
+ * cp-decl.c (start_function): Exclude pointer to member functions in
+ IS_AGGR_TYPE test.
+ * cp-method.c (dump_type_prefix, dump_type_suffix, dump_type):
+ Handle pointer to member functions.
+
+ Tue Sep 21 10:47:10 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-tree.c (finish_struct): Since we know which base class we want
+ the binfo for, get it directly, instead of searching for it. Cures
+ a compiler_error in binfo_value.
+
+ Thu Sep 16 20:33:25 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-cvt.c (convert_pointer_to): Make error more specific and more
+ readable.
+
+ Thu Sep 16 20:14:18 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-lex.c (consume_string): Add second argument so that we can use
+ this routine for character constants too. Also, handle eof inside
+ the string or character constant better. Make static, as it isn't
+ used anyplace else.
+
+ * cp-lex.c (reinit_parse_for_block): Add second argument to
+ consume_string. Add support for character constants.
+
+ * cp-tree.h (consume_string): Remove declaration, not used any place
+ else.
+
+ Wed Sep 15 12:44:13 1993 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * cp-gc.c (build_t_desc): Make sure finish_table is called
+ for the methods and ivars tables.
+
+ Mon Sep 13 14:40:23 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-pt.c (unify): Use the referent type if necessary.
+
+ Fri Sep 10 16:34:37 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-typeck.c (build_binary_op_nodefault): Add missing fourth
+ argument to build_binary_op calls, and eliminate bogus delta2
+ check.
+
+ Fri Sep 10 14:52:59 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-typeck.c (build_binary_op_nodefault): Make sure delta2's match
+ when comparing pointers to _virtual_ member functions.
+
+ Fri Sep 10 14:27:45 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-typeck.c (convert_for_assignment): Revert a cast.
+ * cp-typeck.c (build_binary_op_nodefault): Add missing fourth
+ argument to build_binary_op calls.
+
+ Thu Sep 9 21:22:40 1993 Mike Stump (mrs@cygnus.com)
+
+ Complete re-vamp of pointer to member functions. Implements
+ complete semantics. Cures problems on CONVEX, i960 and alpha.
+
+ * cp-tree.h (get_member_function_from_ptrfunc, build_ptrmemfunc):
+ New routines.
+ * cp-decl.c (build_ptrmemfunc_type): New routine, builds canonical
+ pointer to member function types.
+ * cp-decl.c (grokdeclarator): Use new type for POINTER_TYPE to
+ METHOD_TYPEs.
+ * cp-method.c (build_overload_name): Make the old mangling to show
+ through when mangling the new pointer to member function type.
+
+ * cp-tree.h (TYPE_PTRMEMFUNC_P, TYPE_PTRMEMFUNC_FN_TYPE,
+ TYPE_GET_PTRMEMFUNC_TYPE, TYPE_SET_PTRMEMFUNC_TYPE): New macros
+ for pointer to member function code.
+ * cp-init.c (resolve_offset_ref): Handle pointer to member functions
+ specially.
+ * cp-type2.c (store_init_value): Make new pointer to member
+ functions initializable.
+ * cp-typeck.c (convert_for_assignment): Make new pointer to member
+ functions assignable.
+ * cp-type2.c (build_m_component_ref): Make new pointer to member
+ functions work.
+ * cp-typeck.c (build_x_function_call, build_function_call_real,
+ build_binary_op): Ditto.
+ * cp-class.c (add_virtual_function): Don't set the high bit on
+ DECL_VINDEXs.
+
+ * cp-typeck.c (get_member_function_from_ptrfunc): New routine to
+ resolve a pointer to member function.
+ * cp-typeck.c (build_ptrmemfunc): New routine to build CONSTRUCTORs
+ for new pointer to member functions. Used by to generate
+ initialization and assignment expressions.
+ * cp-typeck.c (build_binary_op_nodefault): Implement == and != for
+ new pointer to member functions.
+ * cp-typeck.c (unary_complex_lvalue): Handle & in more reasonable
+ ways to make new pointer to member functions work.
+
+ * cp-parse.y (expr_no_commas): Don't dereference the second
+ argument, this is now done in build_m_component_ref as needed.
+ * cp-typeck.c (build_x_binary_op): Ditto.
+
+ Other misc work.
+
+ * cp-call.c (build_field_call, build_scoped_method_call,
+ build_method_call): Second arg to build_indirect_ref should be
+ NULL_PTR, not NULL or 0.
+ * cp-class.c (build_vbase_path, build_vfn_ref, popclass): Ditto.
+ * cp-cvt.c (convert_from_reference): Ditto.
+ * cp-decl2.c (setup_vtbl_ptr, finish_file): Ditto.
+ * cp-init.c (emit_base_init, build_virtual_init,
+ expand_aggr_vbase_init_1, expand_recursive_init_1,
+ get_member_function, resolve_offset_ref, build_new, build_delete,
+ build_vec_delete): Ditto.
+ * cp-search.c (dfs_init_vbase_pointers, init_vbase_pointers,
+ build_vbase_vtables_init): Ditto.
+ * cp-type2.c (build_x_arrow, build_functional_cast): Ditto.
+ * cp-typeck.c (build_modify_expr): Ditto.
+
+ Instead of calling get_identifier with the same value all the time,
+ call it once, and re-use the cached value.
+
+ * cp-decl.c (pfn_identifier, index_identifier, delta_identifier,
+ delta2_identifier): New cached calls to get_identifier.
+ * cp-tree.h (this_identifier, pfn_identifier, index_identifier,
+ delta_identifier, delta2_identifier): Allow them to be accessed
+ everywhere.
+ * cp-decl.c (init_decl_processing): Initialize pfn_identifier,
+ index_identifier, delta_identifier and delta2_identifier and
+ use a cached get_identifier call.
+ * cp-class.c (delta_name, pfn_name): Removed, use delta_identifier
+ and pfn_identifier instead.
+ * cp-class.c (popclass): Use a cached get_identifier call for `this'.
+
+ Tue Sep 7 16:01:14 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-search.c (immediately_derived): New function.
+ (get_binfo): Use it.
+ (compute_visibility): Rewrite how private inheritance is handled, so
+ it actually works. Use the new immediately_derived fn.
+
+ Mon Sep 6 14:44:46 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * cp-decl.c (grokfndecl): Add empty statement after foundaggr label.
+
+ Sat Sep 4 16:12:27 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-decl.c (grokfndecl): Require class or enum argument to
+ operators.
+
+ * cp-init.c (build_member_call): Make destructor without object
+ error more useful, don't complain of missing destructor.
+
+ Thu Sep 2 15:51:54 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (globalize_nested_type): Make sure the type in question
+ has a lang_specific area before trying to clear DECL_CLASS_CONTEXT.
+
+ Wed Sep 1 13:40:30 1993 Chip Salzenberg (chip@fin)
+
+ * cp-decl.c (start_function): Call duplicate_decls when user
+ redefines a builtin function.
+
+ Thu Sep 2 15:38:43 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-pt.c (instantiate_class_template): Only kick back the local
+ value if we're setting things up for the parser.
+
+ Wed Sep 1 12:54:38 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-init.c (emit_base_init): Don't complain if the base has no
+ constructor; we should try to use the default constructor instead.
+
+ Wed Sep 1 11:57:00 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-call.c (find_scoped_type): Undo the sorry for now, it's hitting
+ a lot of code that it shouldn't be.
+
+ Mon Aug 30 13:08:48 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-typeck.c (build_x_unary_op): unary & on an expression of
+ RECORD_TYPE that has an incomplete type gives the simple address of
+ the object, and should not give an error about method not found.
+
+ Mon Aug 30 11:06:26 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-pt.c (instantiate_class_template): Don't try to instantiate a
+ template that's already being worked on.
+
+ * cp-init.c (perform_member_init): Make an uninitialized reference
+ be a pedwarn, not a warning.
+
+ * cp-class.c (finish_struct): Make declaration of a negative width
+ for a bit-field be an error, not a warning.
+
+ Sat Aug 28 09:40:47 1993 Michael Tiemann (tiemann@blues.cygnus.com)
+
+ * cp-call.c (find_scoped_type): Add a `sorry' call if we hit an
+ uninstantiated type.
+
+ Thu Aug 26 13:53:23 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-call.c (build_scoped_method_call): Don't produce an error
+ if the type has no destructor.
+
+ * cp-decl.c (record_builtin_type): Don't set TYPE_HAS_DESTRUCTOR
+ after all.
+
+ Wed Aug 25 19:10:24 1993 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cp-call.c (build_method_call): Check for class type value as
+ well
+
+ * cp-tree.h (IDENTIFIER_CLASS_TYPE_VALUE): Create macro
+ (IDENTIFIER_HAS_CLASS_TYPE_VALUE): Ditto
+
+ * cp-init.c (is_aggr_typedef): Check for class type value as well
+ (for template destructors)
+ (build_delete): Don't assert aggregate type, don't check
+ TREE_GETS_DELETE if built-in type.
+
+Fri Sep 24 15:57:14 1993 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * rtl.h: (HARD_FRAME_POINTER_REGNUM): New macro.
+ (hard_frame_pointer_rtx): New variable
+ * combine.c: (combinable_i3_pat): Don't add REG_DEAD notes for
+ HARD_FRAME_POINTER_REGNUM.
+ (subst, case SUBREG): Don't change register number or mode if it
+ is HARD_FRAME_POINTER_REGNUM.
+ * cse.c: (FIXED_REGNO_P): HARD_FRAME_POINTER_REGNUM is fixed.
+ (CHEAP_REG): HARD_FRAME_POINTER_REGNUM is cheap.
+ (FIXED_BASE_PLUS): Allow hard frame pointer as base.
+ (NONZERO_BASE_PLUS_P): Likewise.
+ (cannon_hash, case REG): Add HARD_FRAME_POINTER_REGNUM to list of
+ special registers for SMALL_REGISTER_CLASSES.
+ (find_best_addr): Addresses containing HARD_FRAME_POINTER_REGNUM
+ cannot be replaced.
+ (cse_main): value in HARD_FRAME_POINTER_REGNUM is preserved across
+ calls.
+ * dbxout.c: (dbxout_symbol): FRAME_POINTER_REGNUM has been eliminated
+ by now, use HARD_FRAME_POINTER_REGNUM.
+ * emit-rtl.c: (hard_frame_pointer_rtx): New variable.
+ (gen_rtx): return hard_frame_pointer_rtx if generating rtl
+ for HARD_FRAME_POINTER_REGNUM.
+ (enit_emit_once): Generate initial rtl for hard_frame_pointer_rtx.
+ * explow.c: (copy_all_regs): Don't copy HARD_FRAME_POINTER_REGNUM.
+ * flow.c: (life_analysis): Mark HARD_FRAME_POINTER_REGNUM as live at
+ the end of the function.
+ (insn_dead_p): Don't delete insns that set the hard frame pointer.
+ (mark_set_1): Don't add death information about
+ HARD_FRAME_POINTER_REGNUM.
+ (mark_used_regs, case REG): Don't put HARD_FRAME_POINTER_REGNUM in
+ regs_ever_live. Don't mark it as needed either.
+ * function.c: (instantiate_virtual_regs_1, case MEM): references to
+ MEM via the hard frame pointer shouldn't be copied.
+ * genattrtab.c: (hard_frame_pointer_rtx): New Dummy definition.
+ * global.c: (global_alloc): Make sure that it is always possible to
+ eliminate FRAME_POINTER_REGNUM into HARD_FRAME_POINTER_REGNUM.
+ * jump.c: (thread_jumps): Value in HARD_FRAME_POINTER_REGNUM is never
+ modified by a call.
+ * local-alloc.c: (find_free_reg): Make sure we will always be able
+ to eliminate FRAME_POINTER_REGNUM into HARD_FRAME_POINTER_REGNUM.
+ * loop.c: (invariant_p, case REG): hard_frame_pointer_rtx is
+ invariant.
+ * reload.c: (immune_p): Constants never overlap hard frame pointer
+ references.
+ (find_reloads_address): Compute invalid references to the hard
+ frame pointer in a register; also (reg + const)
+ and (reg + reg + const).
+
+ * reload1.c: (init_reload): use HARD_FRAME_POINTER_REGNUM instead of
+ FRAME_POINTER_REGNUM.
+ (reload): Only prohibit elimination of HARD_FRAME_POINTER_REGNUM, not
+ FRAME_POINTER_REGNUM if frame_pointer_needed. Never prohibit
+ elimination of FRAME_POINTER_REGNUM into HARD_FRAME_POINTER_REGNUM.
+ Mark HARD_FRAME_POINTER_REGNUM as live at the start of a block if
+ it is still needed after elimination.
+ (eliminate_regs): For non-local goto's, don't delete stores into the
+ hard frame pointer.
+ (eliminate_regs_in_insn): adjust comment.
+ (mark_not_eliminable): if frame_pointer_rtx and hard_frame_pointer_rtx
+ are not the same, then frame_pointer_rtx is eliminable;
+ hard_frame_pointer_rtx never is if it is set..
+ (order_regs_for_reload): HARD_FRAME_POINTER_REGNUM is a bad spill reg.
+ (choose_reload_regs): HARD_FRAME_POINTER_REGNUM is a bad choice.
+ * reorg.c: (mark_referenced_resource): if frame_pointer_needed,
+ HARD_FRAME_POINTER_REGNUM is also a referenced resource.
+ (mark_target_live_regs): value in HARD_FRAME_POINTER_REGNUM is not
+ call-clobbered.
+ (dbr_schedule): HARD_FRAME_POINTER_REGNUM should be valid at the
+ end of a function.
+ * rtlanal.c: (rtx_unstable_p): HARD_FRAME_POINTER_REGNUM is not
+ an unstable register.
+ (rtx_varies_p, case REG): hard_frame_pointer_rtx is invariant.
+ (rtx_addr_can_trap_p, case REG): hard_frame_pointer_rtx won't trap.
+ * sched.c: (memrefs_conflict_p): We can work out whether references
+ via hard_frame_pointer_rtx are likely to conflict.
+ (attach_deaths, case REG): Don't add death notes for
+ HARD_FRAME_POINTER_REGNUM.
+ * sdbout.c: (sdbout_symbol): Use HARD_FRAME_POINTER_REGNUM instead of
+ FRAME_POINTER_REGNUM.
+ * stmt.c: (expand_goto): Set hard_frame_pointer_rtx when restoring
+ the frame. Use it when restoring other registers.
+ (expand_end_bindings): ARG_POINTER_REGNUM will be eliminated into
+ HARD_FRAME_POINTER_REGNUM, not FRAME_POINTER_REGNUM; adjust code
+ accordingly.
+ * stupid.c: (stupid_find_reg): never use HARD_FRAME_POINTER_REGNUM.
+
+Fri Sep 24 15:05:14 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload1.c (eliminate_regs): Specially handle the case where INSN
+ is a note (an EXPR_LIST or INSN_LIST).
+ (eliminate_regs_in_insn): Pass the notes as INSN,
+ when calling eliminate_insn to process the notes.
+
+Fri Sep 24 11:29:26 1993 Michael Meissner (meissner@osf.org)
+
+ * i386/osfrose.h (SET_ASM_OP): Define.
+
+Fri Sep 24 04:47:33 1993 Jan Brittenson (bson@nutrimat.gnu.ai.mit.edu)
+
+ * Makefile.in (toplev.o): Add bytecode.h and bc-emit.h to list
+ of dependencies.
+ (stmt.o): Add bytecode.h, bc-typecd.h, bc-opcode.h, bc-optab.h,
+ and bc-emit.h to list of dependencies.
+ (expr.o): Add bytecode.h, bc-opcode.h, bc-typecd.h, bc-optab.h,
+ bc-emit.h, and modemap.def to list of dependencies.
+ (emit-rtl.o): Add bytecode.h, bc-opcode.h, bc-typecd.h,
+ bc-optab.h, bc-emit.h, bc-opname.h to list of dependencies.
+ (integrate.o, regclass.o, varasm.o, function.o): Add bytecode.h to
+ list of dependencies.
+
+Thu Sep 23 23:58:58 1993 James Van Artsdalen (james@bigtex.cactus.org)
+
+ * att.h (ASM_OUTPUT_ASCII): Enclose macro in "do { .. } while (0)".
+ * sun386.h (ASM_OUTPUT_ASCII): Likewise.
+
+Thu Sep 23 11:55:47 1993 Ted Lemon (mellon@ncd.com)
+
+ * toplev.c (lang_options): Add -fallow-single-precision.
+
+Thu Sep 23 00:40:28 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (bi-parser.c): Supply explicit rule.
+ Add bi-parser.h as target.
+ Put these files in srcdir.
+
+ * bc-emit.c (bc_gen_rtx): Call gen_rtx.
+ (bc_print_rtl): #if 0 the contents.
+
+ * Makefile.in (bc-optab.o, bc-emit.o): Add missing deps.
+ (bi-parser.c, bi-lexer.c): Don't depend on .h files here.
+
+ * varasm.c (handle_pragma_weak): Test HANDLE_PRAGMA_WEAK
+ and WEAK_ASM_OP and SET_ASM_OP.
+
+ * Makefile.in (stmt.o): Fix typo.
+
+ * emit-rtl.c (gen_label_rtx): If output_bytecode, make a CODE_LABEL
+ but with different contents.
+
+ * rtl.h (BYTECODE_LABEL, BYTECODE_OFFSET, BYTECODE_BC_LABEL):
+ (BYTECODE_UID): New macros.
+ (struct rtx_def): Delete elements label, offset, bc_label, uid.
+
+ * Makefile.in (bc-arity.h, bc-opcode.h, bc-opname.h): Use `./'.
+ (bi-arity, bi-opcode, bi-opname, bi-lexer): Use host compiler.
+ Link with HOST_LIBS and depend on HOST_LIBDEPS.
+ (bi-unparse): Deleted.
+ (bytecode.distclean): Don't do anything with bi-unparse
+ (bi-arity.o, bi-opcode.o, bi-opname.o, bi-parser.o, bi-reverse.o)
+ (bi-lexer.o): Use host compiler.
+
+ * expr.c (expand_increment): Don't store directly ito a subreg
+ that is narrower than a word.
+
+Wed Sep 22 22:18:35 1993 Chip Salzenberg (chip@fin.uucp)
+
+ * combine.c (init_reg_last_arrays): New function.
+ (combine_instructions): Use it.
+ (force_to_mode): Narrow mask to fit mode (except VOIDmode).
+ (record_value_for_reg): When zeroing reg_last_set_value, also
+ zero reg_last_set_{mode,nonzero_bits,sign_bit_copies}.
+ (record_dead_and_set_regs): Likewise.
+
+Wed Sep 22 22:13:07 1993 James Van Artsdalen (james@bigtex.cactus.org)
+
+ * bc-emit.c (bc_initialize): Add MODE arg to REAL_VALUE_ATOF calls.
+
+ * Makefile.in (bi-lexer.c): File is in $(srcdir).
+
+ * reg-stack.c (record_label_references): Don't follow a null label
+ reference chain.
+
+Wed Sep 22 15:56:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (bi-arity, bi-opcode, bi-opname, bi-unparse, bi-lexer):
+ Make the rules explicit. Don't use $^.
+ (bi-run.o, bi-parser.o, bi-lexer.o): Eliminate $<.
+ (bc-arity.h, bc-opcode.h, bc-opname.h): Eliminate $< and $@.
+
+ * c-typeck.c (set_init_index): Handle and allow CONST_DECL.
+ (build_c_cast): When making a CONSTRUCTOR for a union cast,
+ specify its type.
+
+ * Makefile.in (bi-lexer.o, bi-parser.o): Use ALL_CFLAGS.
+
+ * bi-arity.c (main): Make sure there's some value within
+ each pair of braces.
+
+ * expr.c (bc_adjust_stack): Use VALIDATE_STACK_FOR_BC,
+ not VALIDATE_STACK.
+ * bc-emit.c (bc_emit_bytecode): Likewise.
+ (bc_emit_instruction) [! __GNUC__]: Don't really use bc-typecd.def.
+
+ * varasm.c (bc_assemble_integer): Make definition static.
+
+ * expr.c (bc_strdup): Don't use strcpy's value.
+
+ * bytetypes.h: New file. Typedefs moved from bytecode.h.
+ (union stacktype): Moved here.
+ * bytecode.h: Typedefs deleted.
+ * bi-run.h: (union stacktype): Deleted.
+ (BI_PARAMS): Don't continue the parmlist.
+ * bc-emit.c: Include bytetypes.h, if __GNUC__.
+
+Wed Sep 22 15:49:47 1993 Ted Lemon (mellon@ncd.com)
+
+ * c-decl.c (flag_allow_single_precision): New variable.
+ (c_decode_option): Handle -fallow-single-precision.
+ * c-tree.h (flag_allow_single_precision): Declared.
+ * c-typeck.c (default_conversion): Implement -fallow-single-precision.
+
+Wed Sep 22 11:18:24 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-class.c (finish_struct): Move special C++ only code that
+ handles anonymous unions inside structures here.
+ * stor-layout.c (layout_record): From here.
+
+Wed Sep 22 14:14:55 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * enquire.c (FPROP): Recognize 80387 or 68881 XFmode format.
+
+ * c-typeck.c (build_component_ref): For a field in an anonymous union,
+ make two nested COMPONENT_REFs.
+ (lookup_field): Additional arg INDIRECT.
+
+Wed Sep 22 14:45:42 1993 Kresten Krab Thorup (krab@iesd.auc.dk)
+
+ * tm.texi (CLEAR_INSN_CACHE): New macro.
+ * libgcc2.c (__clear_cache): add case for new CLEAR_INSN_CACHE.
+
+ * libgcc2.c (__enable_execute_stack): Add case for NeXT/__MACH__.
+ * config/m68k/next.h (INITIALIZE_TRAMPOLINE): Append call to
+ __enable_execute_stack.
+ (CLEAR_INSN_CACHE): New macro.
+
+ * varasm.c (output_constructor): Use the type given
+ by the constructor expression only if available. Otherwise
+ use the type of the declared type.
+
+Tue Sep 21 19:51:26 1993 Andrew McCallum (mccallum@vein.cs.rochester.edu)
+
+ * objc/Object.[hm] (-compare:, -shouldNotImplement:): Added.
+
+ * objc/archive.c (objc_write_type, objc_write_types): Take
+ take char** args for writing strings in stead of char* to
+ match NeXT. Also correct some typos in error messages.
+
+Tue Sep 21 18:35:04 1993 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * c-typeck.c (push_member_name): Take a decl instead of a string.
+ Allow DECL_NAME to be NULL (anonymous fields).
+ * c-typeck.c (push_init_level, process_init_element): Change
+ callers appropriately.
+
+Tue Sep 21 16:44:17 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * libgcc2.c (L_bb): Test inhibit_libc.
+
+ * Makefile.in (ENQUIRE, CROSS_TEST): New variables.
+ (all.cross): Use them.
+
+ * mips-tfile.c, mips-tdump.c [CROSS_COMPILE]: Include mips/a.out.h.
+
+ * arm.h, clipper.h, i386.h, i860.h, pyr.h, spur.h:
+ (INIT_CUMULATIVE_ARGS): Pass just the return value type
+ to aggregate_value_p.
+
+Tue Sep 21 10:50:19 1993 Jan Brittenson (bson@nutrimat.gnu.ai.mit.edu)
+
+ * emit-rtl.c (gen_label_rtx, emit_line_note): add conditional for
+ bytecode.
+
+ * expr.c (mode_to_const_map, mode_to_load_map, mode_to_store_map):
+ new variable.
+ (bc_init_mode_to_opcode_maps): new function; initialize maps.
+ (expand_assignment, expand_expr, expand_increment): add
+ conditional for bytecode.
+ (bc_expand_expr, bc_load_memory, bc_store_memory,
+ bc_allocate_local, bc_allocate_variable_array, bc_load_externaddr,
+ bc_strdup, bc_load_externaddr_id, bc_load_localaddr,
+ bc_load_parmaddr, bc_canonicalize_array_ref,
+ bc_expand_component_address, bc_push_offset_and_size,
+ bc_expand_address, bc_runtime_type_code, bc_gen_constr_label,
+ bc_expand_constructor, bc_store_field, bc_store_bit_field,
+ bc_load_bit_field, bc_adjust_stack): new function.
+
+ * function.c (put_var_into_stack, expand_main_function): do
+ nothing for bytecode.
+ (bc_build_calldesc): new function.
+ (init_function_start): use it if outputting bytecode.
+ (expand_function_start, expand_function_end): add conditional for
+ bytecode.
+ (bc_expand_function_start, bc_expand_function_end): new function.
+
+ * integrate.c (output_inline_function): signal error for bytecode.
+
+ * regclass.c (fix_register): signal error for bytecode.
+
+ * stmt.c (struct nesting): new members bc_stack_level, skip_label).
+ (struct goto_fixup): new members bc_target, label, bc_handled,
+ bc_stack_level.
+ (emit_nop, expand_computed_goto, expand_label, expand_goto,
+ expand_goto_internal, fixup_gotos, expand_asm,
+ expand_asm_operands, expand_expr_stmt, expand_start_expr_stmt,
+ expand_end_expr_stmt, expand_start_cond, expand_start_else,
+ expand_end_cond, expand_start_loop, expand_loop_continue_here,
+ expand_end_loop, expand_exit_loop_if_false, expand_null_return,
+ expand_return, expand_start_bindings, expand_end_bindings,
+ expand_decl, expand_start_case, pushcase,
+ check_for_full_enumeration, expand_end_case): add conditional for
+ bytecode.
+ (bc_expand_goto_internal, bc_expand_fixup, bc_fixup_gotos,
+ bc_expand_start_cond, bc_expand_end_cond, bc_expand_start_else,
+ bc_expand_end_bindings, bc_expand_decl,
+ bc_expand_variable_local_init, bc_expand_decl_init,
+ bc_expand_start_case, bc_pushcase,
+ bc_check_for_full_enumeration_handling, bc_expand_end_case,
+ bc_new_uid): new function.
+
+ * toplev.c (output_bytecode): new variable.
+ (f_options): add entry for -fbytecode.
+ (fatal_insn_not_found, compile_file, rest_of_decl_compilation,
+ rest_of_compilation, main): add conditional for bytecode.
+
+ * config/m68k/m68k.c config/m68k/m68k.h: add bytecode specific
+ definitions.
+
+ * varasm.c (text_section, data_section, make_function_rtl,
+ make_decl_rtl, assemble_asm, assemble_start_function,
+ assemble_zeros, assemble_string, assemble_variable,
+ assemble_external, assemble_external_libcall, assemble_label,
+ assemble_name, assemble_static_space,
+ assemble_trampoline_template, assemble_integer, assemble_real,
+ decode_addr_const, output_constant_def, output_constant_pool,
+ output_constant, output_constructor): add conditional for
+ bytecode.
+ (bc_output_constructor, output_byte_asm, bc_make_rtl,
+ bc_output_data_constructor, bc_assemble_integer):
+ new function.
+ (handle_pragma_weak): break out asm writing code from
+ handle_pragma_token, move to varasm.c, so bytecode-specific
+ macros can access static varasm data and functions.
+
+ * c-pragma.c (handle_pragma_token): use handle_pragma_weak.
+
+ * function.h (enum pragma_state): moved from c-pragma.c
+
+ * bc-config.h, bc-emit.c, bc-optab.c, bc-optab.h, bc-trans.h,
+ bc-typecd.def, modemap.def, bytecode.def, bc-emit.h, bc-typecd.h,
+ bi-arity.c, bi-defs.h, bi-lexer.c, bi-opcode.c, bi-opname.c,
+ bi-parser.c, bi-parser.h, bi-reverse.c, bi-run.c, bi-run.h,
+ bi-unparse.c: new file. bc-* are exclusively compiler files, bi-*
+ are interpreter files.
+
+ * Makefile.in: add rules and/or dependencies for bc-emit.o,
+ bc-optab.o, bytecode, bi-arity, bi-opcode, bi-opname, bi-lexer,
+ bi-run.o, bi-parser.c, bi-parser.o, bi-lexer.o bi-arity.o,
+ bi-opcode.o, bi-opname.o, bi-reverse.o, bc-arity.h, bc-opcode.h,
+ bc-opname.h, bytecode.mostlyclean, bytecode.distclean,
+ bytecode.realclean
+
+
+Tue Sep 21 10:20:55 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * jump.c (jump_optimize): Try putting RETURN at end of function
+ both at start and at end of our optimization.
+
+Mon Sep 20 17:22:13 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (expand_expr): Handle flag_volatile here.
+ * c-typeck.c (build_indirect_ref): TREE_THIS_VOLATILE no longer
+ depends on flag_volatile.
+
+Mon Sep 20 15:21:31 1993 Doug Evans (dje@cygnus.com)
+
+ * gstddef.h: Back out change of Sep 15 (handles Sun lossage).
+ Prevented bootstrapping.
+
+Mon Sep 20 12:21:56 1993 Kresten Krab Thorup (krab@iesd.auc.dk)
+
+ * objc/archive.c (objc_read_string): Allocate n+1 chars instead of
+ just n.
+
+Sun Sep 19 13:06:37 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * function.c (combine_temp_slots): Handle deletion properly.
+ Free the RTL that is allocated.
+ * rtl.c (rtx_free): New function.
+
+ * config/m68k/m68k.c (output_move_double): Handle register overlap
+ case that occur in soft-float XFmode. Code basically copied from
+ i386.c.
+
+Sun Sep 19 14:40:08 JDT 1993 Michael Ben-Gershon (mybg@cs.huji.ac.il)
+
+ * cse.c (simplify_unary_operation): If REAL_ARITHMETIC is defined,
+ and a FIX operation is applied to convert a CONST_DOUBLE to an INT,
+ the CONST_DOUBLE must first be rounded to zero.
+
+Sun Sep 19 12:49:05 1993 James Van Artsdalen (james@bigtex.cactus.org)
+
+ * Makefile.in (objc-headers): Depend on stmp-fixinc to build the
+ include/ subdirectory first.
+
+Sun Sep 19 09:45:16 1993 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * gstddef.h (size_t): Acorn RISCiX requires __size_t defined.
+
+Sun Sep 19 09:08:09 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * genrecog.c (preds): Correct typo in name of `comparison_operator'.
+ (add_to_sequence): If PREDICATE_CODES specified, warn if we find a
+ predicate not in that list.
+
+ * reload.c (find_reloads): Reject an alternative if two operands
+ match the same output and we have to do a reload.
+
+ * rs6000.c (rs6000_override_options): Change processor type to
+ "rios1"; allow "rios" as synonym.
+ Add synonyms for "mpc6xx".
+ * rs6000.h (enum processor_type): Change from RIOS to RIOS1.
+ (PROCESSOR_DEFAULT): Likewise.
+ * rs6000.md (attribute "cpu"): Change from "rios" to "rios1"; all
+ uses changed.
+
+ * xm-alpha.h: Add extern declaration for alloca.
+
+ * a29k.h (PREDICATE_CODES): Fix typos and add missing entries.
+ * alpha.h, i860.h i960.h, m88k.h, mips.h, rs6000.h: Likewise.
+
+Sat Sep 18 09:27:03 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (convert_move): Use emit_library_call_value.
+
+Sat Sep 18 08:01:44 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.h (REG_ALLOC_ORDER): Add missing entries.
+
+ * combine.c (recog_for_combine): Fix typos in previous change.
+
+ * reload.c (earlyclobber_operand_p): New function.
+ (combine_reloads): Use it.
+ (find_reloads): Set reload_earlyclobbers earlier.
+ (refers_to_regno_for_reload_p): Count something being stored into
+ if it is an earlyclobber operand.
+
+Fri Sep 17 21:40:02 1993 Per Bothner (bothner@cygnus.com)
+
+ * fold-const.c (invert_truthvalue): Instead of aborting,
+ build a TRUTH_NOT_EXPR when unable to optimize.
+ (The aborts were not a problem for C, which always first
+ calls truthvalue_conversion, but that should not be
+ necessary for a language with real Booleans.)
+
+Fri Sep 17 20:38:53 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (output_init_element): Update constructor_bit_index
+ for union types.
+
+ * libgcc2.c: Declare __fixunsxfdi only if really have XFmode.
+ Likewise for __fixunstfdi.
+
+Fri Sep 17 18:08:37 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (recog_for_combine): Always reject a PARALLEL containing
+ our special CLOBBER.
+
+ * cse.c (fold_rtx, case MINUS): Copy result obtained from
+ hash table.
+
+ * cse.c (fold_rtx, case SUBREG): If paradoxical SUBREG of a
+ constant, return the constant.
+
+ * c-typeck.c (lookup_field): Use HOST_WIDE_INT instead of long or
+ int when we want integer wide enough to hold a pointer difference.
+
+Fri Sep 17 16:03:22 1993 Per Bothner (bothner@cygnus.com)
+
+ * dbxout.c (dbxout_type): For CHAR_TYPE and BOOLEAN_TYPE (in
+ languages that have them - not C), adopt an AIX convention
+ to distinguish these from other types.
+
+Fri Sep 17 09:02:06 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.h (emit_library_call_value): Fix declaration.
+
+Thu Sep 16 12:05:44 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in (fixinc.ready): New target, like libgcc2.ready,
+ depending on xgcc and cpp.
+ (stmp-fixinc): Depend on fixinc.ready instead of xgcc and cpp.
+ (clean): Remove fixinc.ready.
+
+Thu Sep 16 10:22:17 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload.c (find_reloads): For PLUS operand, call find_reloads_toplev.
+
+ * optabs.c (expand_complex_abs): Fix typo in prev change.
+
+Thu Sep 16 02:06:11 1993 Jim Wilson (wilson@cygnus.com)
+
+ * flags.h (current_function_has_nonlocal_goto): Declare.
+ * function.h (struct function): New field has_nonlocal_goto.
+ * function.c (current_function_has_nonlocal_goto): New var.
+ (push_function_context): Save it.
+ (pop_function_context): Restore it.
+ (init_function_start): Init it.
+ * integrate.c (function_cannot_inline_p): Don't inline if it's set.
+ * stmt.c (expand_goto): Set it.
+
+ * reorg.c (mark_set_resources): For CALL_INSN, if followed by a
+ NOTE_INSN_SETJMP note, then assume that all registers are clobbered.
+ Handle case where CALL_INSN is in a sequence.
+
+Wed Sep 15 17:38:38 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gstddef.h: Delete the conditional that used to semi-avoid
+ interference with sys/stdtypes.h on Sun. (fixincludes makes
+ it ok.)
+
+Wed Sep 15 16:17:09 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (ASM_FILE_START): Fix access information for $LIT$
+ subspace.
+
+Wed Sep 15 14:53:49 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/ns32k/ns32k.md: Add peepholes for stack adjust plus pushes.
+
+Wed Sep 15 13:38:24 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * c-typeck.c (lookup_field): New function (for chill).
+ (build_component_ref): Call it.
+
+Wed Sep 15 08:12:32 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * libgcc2.c: Declare __fixunsxfdi and __fixunstfdi.
+
+ * integrate.c (copy_for_inline, copy_rtx_and_substitute):
+ Always preserve the volatil flag when copying ASM_OPERANDS.
+
+Tue Sep 14 21:56:20 1993 Jim Wilson (wilson@cygnus.com)
+
+ * c-typeck.c (valid_compound_expr_initializer): New function.
+ (digest_init): Handle compound expressions as initializers when
+ pedantic.
+
+ * varasm.c (immed_double_const, immed_real_const_1): Don't touch
+ const_double_chain if not inside a function.
+
+Tue Sep 14 16:22:03 1993 Per Bothner (bothner@wombat.gnu.ai.mit.edu)
+
+ * c-typeck.c (digest_init): Compare types using comptypes
+ instead of comparing pointers. (Helps Chill front end.)
+
+Tue Sep 14 12:16:52 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * calls.c (emit_library_call_value): Finish making it work.
+ * optabs.c (expand_float): Use emit_library_call_value.
+ (expand_unop, expand_binop): Likewise.
+ (expand_complex_abs): Likewise.
+ Also pass SUBMODE as output mode to emit_library_call_value.
+ * function.c (aggregate_value_p): Allow type node as argument.
+
+ * config/ns32k/ns32k.h (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE):
+ If omitting frame pointer, output an adjspd if necessary.
+ Use movd to save registers if four or less need saving.
+ Set DEPTH properly.
+
+ * reload.c (find_dummy_reload): New args inmode, outmode.
+ (find_reloads): Pass new args.
+ (push_reload): Likewise.
+
+Mon Sep 13 12:52:03 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (set_init_index): Don't allow variable indices.
+
+ * c-decl.c (complete_array_type): Handle TREE_PURPOSE
+ of array constructor elements.
+
+ * expr.c (store_constructor): Handle TREE_PURPOSE of array constructor.
+ (expand_expr, ARRAY_REF case): Likewise.
+
+ * varasm.c (output_constructor): Handle index value in
+ the TREE_PURPOSE, for array constructors.
+
+ * c-typeck.c (output_init_element): When putting an elt into a
+ CONSTRUCTOR, always set the TREE_PURPOSE (even for arrays).
+ Copy the node if it's an INTEGER_CST.
+ (output_pending_init_elements): If have gap and not incremental,
+ advance constructor_unfilled_fields or constructor_unfilled_index.
+
+Sun Sep 12 23:00:25 1993 Per Bothner (bothner@wombat.gnu.ai.mit.edu)
+
+ * expr.c (expand_expr, case ARRAY_REF): Coerce lower bound (if
+ non-zero) to sizetype before subtraction.
+
+Sun Sep 12 16:18:18 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (push_init_level): Pop any implicit levels
+ that have been filled up.
+ Don't die if constructor_type is 0.
+ (process_init_element): If VALUE is 0 for union type,
+ update constructor_bit_index.
+
+Sun Sep 12 10:59:08 1993 Bill Cox (bill@cygnus.com)
+
+ * c-typeck.c (digest_init): Remove obsolete comments on args
+ TAIL, OF_WHAT.
+
+Sun Sep 12 08:45:36 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * loop.c (basic_induction_var): New arg MODE.
+ Use it to call convert_modes.
+ (strength_reduce): Supply the new arg to basic_induction_var.
+
+ * expmed.c (expand_shift): Use convert_modes.
+ (emit_store_flag): Likewise.
+
+Sat Sep 11 16:44:15 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * collect2.c (main): Provide upward compatibility with old version
+ of collect (avoids infinite mutual recursion between the two).
+
+Sat Sep 11 13:05:07 1993 Per Bothner (bothner@wombat.gnu.ai.mit.edu)
+
+ * c-typeck.c (constructor_no_implicit): New variable.
+ If set, dis-allows eliding of braces in initializers.
+ (Set by Chill front-end.)
+ * c-typeck.c (process_init_element): Use it.
+
+Sat Sep 11 15:55:25 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * stor-layout.c (layout_record): Turn off PCC_BITFIELD_TYPE_MATTERS
+ rounding of field bitpos, if maximum_field_alignment is nonzero.
+
+Fri Sep 10 08:52:01 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (check_init_type_bitfields): Check for mismatch
+ between field's mode and its type's mode.
+
+ * expr.c (protect_from_queue): Don't alter an existing MEM.
+ (convert_modes): Use X's mode (not OLDMODE) unless it is VOIDmode.
+
+Fri Sep 10 01:01:32 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * config.sub: Recognize operating system `netbsd*'.
+
+Thu Sep 9 18:09:14 1993 Per Bothner (bothner@wombat.gnu.ai.mit.edu)
+
+ * c-typeck.c (really_start_incremental_init, push_init_level):
+ Add support for arrays with non-zero lower bounds. (Used by Chill.)
+
+Thu Sep 9 19:20:59 1993 Jim Wilson (wilson@cygnus.com)
+
+ * tree.c (make_node): Put PARM_DECLs of nested functions onto
+ parent's saveable obstack.
+
+Thu Sep 9 14:17:00 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in (CROSS_LIBGCC1): New variable. Rule to use when
+ building libgcc1.a for a cross compiler. Defaults to
+ libgcc1.cross.
+ * cross-make (LIBGCC1): Default to $(CROSS_LIBGCC1) rather than
+ libgcc1.cross.
+ * config/i386/t-next, config/i386/t-sol2, config/m88k/t-dgux,
+ config/m88k/t-luna, config/m88k/t-dgux-gas,
+ config/m88k/t-luna-gas, config/m88k/t-m88k,
+ config/m88k/t-m88k-gas, config/m88k/t-sysv4,
+ config/m68k/t-next, config/mips/t-bsd, config/mips/t-bsd-gas,
+ config/mips/t-mips, config/mips/t-mips-gas,
+ config/mips/t-osfrose, config/mips/t-svr3,
+ config/mips/t-svr3-gas, config/mips/t-svr4,
+ config/mips/t-svr4-gas, config/mips/t-ultrix, config/pa/t-pa,
+ config/sparc/t-sol2, config/h8300/t-h8300, config/sh/t-sh,
+ config/t-libc-ok (CROSS_LIBGCC1): Defined to be libgcc1.null.
+
+Thu Sep 9 09:48:54 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (expand_expr): Set ignore for COND_EXPR with VOID_TYPE.
+
+ * expr.c (convert_modes): New function.
+ (convert_to_mode): Use that.
+ * expr.h (convert_modes): Declared.
+ * optabs.c (expand_twoval_binop): Use convert_modes.
+ (expand_complex_abs): Likewise.
+ (emit_cmp_insn): Likewise.
+ (expand_inline_function): Likewise.
+ * expmed.c (expand_divmod): Likewise.
+ (emit_store_flag): Likewise.
+ * loop.c (basic_induction_var): Likewise.
+ * integrate.c (expand_inline_function): Likewise.
+
+ * optabs.c (widen_operand): New arg OLDMODE.
+ (expand_binop, expand_unop): Fix calls to widen_operand.
+
+Wed Sep 8 18:25:50 1993 Doug Evans (dje@cygnus.com)
+
+ * sparc.c, sparc.h, sparc.md: Cosmetic changes only. Just
+ reordered code a little.
+
+Wed Sep 8 14:49:59 1993 Jim Wilson (wilson@cygnus.com)
+
+ * dbxout.c (dbxout_parms): For parameters in registers, if use
+ DECL_RTL, then must use TREE_TYPE instead of DECL_ARG_TYPE.
+
+ * mips.md (fix_truncdfsi2, fixtruncsfsi2): Mark SImode scratch
+ register as early clobbered when dest is in memory.
+
+ * fixincludes (sbusdev/audiovar.h): Fix wrongly edited // comments
+ nested within /* */ comments.
+
+ * gcc.c (process_command): Don't warn for -x after last input file
+ if spec_lang is zero.
+
+ * fixinc.mips (bsd43/bsd43.h): Change /**/ to ##.
+
+ * expr.c (convert_move): When truncating, call force_reg first if
+ it is something that gen_lowpart won't understand.
+
+ * sys-protos.h (getrlimit, getrusage, setrlimit): Return int not void.
+
+Wed Sep 8 11:28:41 1993 John Hassey (hassey@dg-rtp.dg.com)
+
+ * m88k.c (output_call): Avoid use of jsr.n r1, this loses on
+ the 88110.
+
+Wed Sep 8 10:51:07 1993 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.h: (MASK_*, TARGET_*): Add target masks and tests.
+ (TARGET_SWITCHES): Add target switches for various architectures
+ and mnemonics options.
+ (TARGET_OPTIONS): Add cpu type as special target option.
+ (OVERRIDE_OPTIONS): Call rs6000_override_options to decipher.
+
+ * rs6000.c (rs6000_cpu, rs6000_cpu_string): New variables.
+ (rs6000_override_options): New function.
+
+ * rs6000.md (define_attr): Expand list of instruction attributes.
+ (define_function_unit): Compute delay information based
+ upon processor type and expand functional unit types.
+ (mulsi3, divsi3, divmodsi4, divsf3, divdf3, muldf3, movsf):
+ Use expanded attributes.
+ (load with update): Likewise.
+
+Wed Sep 8 06:34:32 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (output_init_element): When adding to
+ constructor_pending_elts, copy field.
+
+Wed Sep 8 06:15:58 1993 David Gershovich (dgirsh@iil.intel.com)
+
+ * expmed.c (make_tree, case CONST_INT): Properly set high part if
+ unsigned.
+
+ * optabs.c (expand_binop): Must always widen second operand
+ of shift.
+
+Wed Sep 8 05:16:59 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (push_init_level): Diagnose extra brace group at end
+ of record. Set constructor_type to 0.
+ (pop_init_level): Don't output anything if constructor_type is 0.
+ (process_init_element): Do nothing if constructor_type is 0.
+
+Tue Sep 7 19:11:20 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-common.c (c_build_type_variant): Allocate new type in same
+ obstack as old one.
+
+Tue Sep 7 17:45:50 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (digest_init): Fix error message text.
+
+Tue Sep 7 14:32:51 1993 Leonid Baraz (lbaraz@iil.intel.com)
+
+ * sched.c (schedule_block): Correct type of BIT.
+
+ * fold-const.c (fold): Don't try to process an RTL_EXPR.
+
+Tue Sep 7 06:18:50 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * dbxout.c (dbxout_type): Handle enum constants bigger than one word.
+ Don't print big unsigned values as negative.
+ * c-decl.c (build_enumerator): Choose type properly for wide constants.
+ (finish_enum): Always set type of the enumerators to the enum type.
+ * c-typeck.c (default_conversion): For enum that's unsigned,
+ if it's at least as wide as int, convert to an unsigned type.
+
+ * config/i386/sol2.h (LIB_SPEC, LINK_SPEC, SWITCH_TAKES_ARG):
+ Definitions copied from sparc/sol2.h.
+ (CPP_SPEC): Copied from sparc/sol2.h, but deleted -msparclite.
+
+Mon Sep 6 14:43:20 1993 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * genextract.c (insn_name_ptr): Define for debugging.
+ (walk_rtx, case MATCH_OP_DUP): Expand recog_dup_loc using XEXP not
+ XVECEXP.
+
+Mon Sep 6 13:28:03 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rtlanal.c (modified_between_p): Handle vectors.
+ (modified_in_p): New function.
+ (refers_to_regno_p): If setting AP, FP, or SP, we clobber the
+ virtual registers.
+ * optabs.c (emit_libcall_block): Don't move insns that reference
+ things set in previous insns.
+
+Mon Sep 6 08:35:34 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/mips/mips.h: Don't declare abort.
+
+Mon Sep 6 01:03:58 1993 Jim Wilson (wilson@cygnus.com)
+
+ * protoize (abort): Correct volatile function declaration.
+
+Sun Sep 5 18:23:09 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * Makefile.in (USER_H): Add va-h8300.h.
+
+ * collect2.c (our_file_name, last_file_name): deleted.
+ (our_file_names): New variable.
+ (is_in_prefix_list): New function.
+ (find_a_file): Call is_in_prefix_list.
+ (main): Make COLLECT_NAMES a list of our invocations.
+ If we've invoked ourselves, try again with ld_file_name.
+
+Sun Sep 5 16:00:47 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * function.c (assign_parms): When parm needs conversion on entry,
+ don't store it back in the slot where it was passed.
+
+Sun Sep 5 14:51:14 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * c-decl.c (grokdeclarator): For PARM_DECLs, only call
+ c_build_type_variant is constp or volatilep is true.
+
+Sun Sep 5 06:44:09 1993 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.c: (print_operand): Convert fprintf of single letters
+ to putc and convert fprintf of constant strings to fputs.
+ Output '%u' operand as hexadecimal.
+
+Sat Sep 4 11:16:18 1993 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * c-common.c (truthvalue_conversion): A complex value is nonzero
+ if either part is nonzero, not if both parts are nonzero.
+
+Fri Sep 3 19:02:41 1993 Paul Eggert (eggert@twinsun.com)
+
+ * c-decl.c (build_enumerator): Apply default conversion to
+ constant-expression.
+
+Fri Sep 3 18:03:47 1993 Chris Lang (chrisl@mirc00.ncms.org)
+
+ * cccp.c (skip_if_group): Check for traditional mode when
+ skipping ahead to next #, ignore unless at beginning of line.
+
+Fri Sep 3 18:00:15 1993 Michael Meissner (meissner@osf.org)
+
+ * i386/osfrose.h, i386/osfelf.h (LINK_SPEC): Pass -v and -dn on to
+ the ELF linker, which now accepts these switches.
+
+Fri Sep 3 13:34:22 1993 Doug Evans (dje@cygnus.com)
+
+ * i386/x-linux: Add -Iinclude to BOOT_CFLAGS.
+
+Fri Sep 3 01:54:19 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (READONLY_DATA_ASM_OP): Define.
+ (READONLY_DATA_SECTION): Define.
+ (EXTRA_SECTIONS): Add in_readonly_data.
+ (EXTRA_SECTION_FUNCTIONS): Add readonly_data.
+
+Thu Sep 2 19:19:14 1993 Holger Teutsch (holger@hotbso.rhein-main.de)
+
+ * clipper.h : Improve generated code for C400 Clipper.
+ (TARGET_SWITCHES): New options `c300' `c400'.
+ (TARGET_C300, TARGET_C400): New defines.
+ (TARGET_DEFAULT): Define as TARGET_C300.
+ (CONDITIONAL_REGISTER_USAGE): New define.
+
+Thu Sep 2 17:47:57 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * glimits.h (__INT_MAX__, __LONG_MAX__, __LONG_LONG_MAX__): New macros.
+ (INT_MAX, LONG_MAX, LONG_LONG_MAX): Use them.
+ (UINT_MAX, ULONG_MAX, ULONG_LONG_MAX): Ditto.
+
+Thu Sep 2 14:26:28 1993 Michael Meissner (meissner@osf.org)
+
+ * i386/osfrose.h (YES_UNDERSCORES): Delete macro, since we have
+ redefined all of the macros that are based on using it.
+ (CPP_SPEC, CC1_SPEC): Remove #ifndef NO_UNDERSCORE version.
+ OSF/ELF will now omit the leading underscore by default.
+ (LINK_SPEC): Pass -dy through to ELF linker. Do not pass -v to
+ ELF linker.
+
+ * i386/osfelf.h (CPP_SPEC, CC1_SPEC): Remove #ifndef NO_UNDERSCORE
+ version. OSF/ELF will now omit the leading underscore by default.
+ (LINK_SPEC): Pass -dy through to ELF linker. Do not pass -v to
+ ELF linker.
+
+
+ * final.c (tree.h): Include tree.h to get the declaration for
+ decl_printable_name.
+ (last_filename): Global to hold last filename encountered in a
+ NOTE.
+ (add_bb): New function to do common code for emitting a basic
+ block profiling increment. Remember the current function, and if
+ debugging, line number and filename for each basic block.
+ (add_bb_string): New function to remember strings for profiling
+ basic blocks.
+ (end_final): Bump name array size to 20. Use BSS to store profile
+ block count array unless -fno-common. Eliminate redefining name
+ within for loop block. Add a length field and three new parallel
+ arrays for basic blocks to hold function name, and if debugging,
+ line number and file name for basic block profiling.
+ (final_start_function): Save a printable version of the current
+ function name away if profiling basic blocks.
+ (final_end_function): Forget the current printable version of the
+ current function name if profiling basic blocks.
+ (final): Move basic block profiling support to just call add_bb.
+ (final_scan_insn): Ditto.
+ (output_source_line): Save filename in last_filename. If the file
+ name was changed and profiling basic blocks, remember the new file
+ name for the next call to add_bb.
+
+ * libgcc2.c (L_bb): If BLOCK_PROFILER_CODE is defined, expand it
+ here directly. If BLOCK_PROFILER_CODE is not defined, add code
+ that appends basic block profile information into a text file
+ bb.out. Move sun3 specific block profiling code to m68k/sun3.h.
+
+ * Makefile.in (final.o): Final.c now includes tree.h.
+
+ * m68k/sun3.h (BLOCK_PROFILER_CODE): Move the sun3 specific basic
+ block profiling code here from libgcc2.c.
+
+Wed Sep 1 19:00:06 1993 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
+
+ * rs6000.md (truncdfsf2): Round to single instead of doing nothing.
+
+ * jump.c (jump_optimize): When optimize conditional jump around
+ unconditional jump, handle case where prev_label can be zero.
+
+ * c-decl.c (finish_decl): For static const variables, preserve
+ initializers instead of discarding them.
+
+Wed Sep 1 18:43:01 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload.c (find_reloads): Bump REJECT for a hard register; just
+ not for a pseudo.
+
+ * rs6000.md: Clean up hex constants a bit in emitted insns.
+
+ * rs6000.c (input_operand): Allow "easy" FP constants.
+ * rs6000.h (SECONDARY_MEMORY_NEEDED): New macro.
+ * rs6000.md (movdf): Simplify by taking advantage of
+ having SECONDARY_MEMORY_NEEDED.
+ Fix bugs relating to order in which moves are done.
+
+Wed Sep 1 18:08:36 1993 Jim Wilson (wilson@cygnus.com)
+
+ * reload.c (find_reloads_address_1): Handle SUBREGs same as REGs.
+
+Wed Sep 1 18:03:45 1993 Mike Stump (mrs@mole.gnu.ai.mit.edu)
+
+ * collect2.c (is_ctor_dtor): Make sizeof argument match the
+ string.
+
+Wed Sep 1 15:01:48 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * Makefile.in (start.encap): Build g++ here also.
+
+Tue Aug 31 16:30:53 1993 Jim Wilson (wilson@cygnus.com)
+
+ * combine.c (make_compound_operation): Handle the case
+ (and (xor/ior (lshift...) (lshift...)) ...).
+ (make_field_assignment): In get_pos_from_mask call, only invert
+ bits in mode mask.
+
+ * reload.c (push_reload): Abort is secondary_reload wants same
+ class as an input reload.
+
+ * Makefile.in (libgcc1.a, libgcc2.a): Don't use set -e.
+ * configure (i[34]86-*-lynxos, m68k-*-lynxos, sparc-*-lynxos): Use
+ xm-lynx.h, x-lynx. Don't run fixincludes.
+ * x-lynx, xm-lynx.h: New files.
+
+ * Makefile.in (xsys-protos.h): Use fixtmp.c not tmp.c, and delete
+ it afterwards.
+
+ * function.c (assign_stack_temp): When allocate a slot too large,
+ split extra off into a slot of its own.
+ (combine_temp_slots): New function.
+ (free_temp_slots, pop_temp_slots): Call combine_temp_slots.
+
+Tue Aug 31 06:35:37 1993 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.md: (zero_extendqisi2, zero_extendqihi2): Change anonymous
+ patterns to use 16-bit and 32-bit hexadecimal values and masks
+ instead of bit ranges if constant.
+ (rotlsi3, lshrsi3, move condition codes, scc insns): Likewise.
+
+Tue Aug 31 06:25:52 1993 Paul Eggert (eggert@twinsun.com)
+
+ * c-decl.c (struct c_function): Remove unneeded enum_next_value.
+ (push_c_function_context, pop_c_function_context): Don't save it.
+
+Mon Aug 30 16:16:56 1993 Paul Eggert (eggert@twinsun.com)
+
+ * c-decl.c (get_parm_info, store_parm_decls): If PROMOTE_PROTOTYPE,
+ promote all integral types shorter than int, including short enums.
+ * c-typeck.c (convert_arguments): Likewise.
+ * cp-decl.c (grokparms): Likewise.
+ * cp-except.c (finish_exception_decl): Likewise.
+ * cp-typeck.c (convert_arguments): Likewise.
+
+Sun Aug 29 18:34:25 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.h (TARGET_NO_FP_IN_TOC): New; deleted TARGET_FP_IN_TOC.
+ (TARGET_SWITCHES): Rearrange to have three TOC choices.
+ (ASM_OUTPUT_SPECIAL_POOL_ENTRY): Use TARGET_NO_FP_IN_TOC.
+ * rs6000.c (output_toc): Likewise.
+
+Sat Aug 28 15:04:35 1993 Jim Wilson (wilson@cygnus.com)
+
+ * mips.h (SELECT_SECTION): Simplify sdata_section test.
+
+ * lynx.h (CPP_SPEC): Use include_v not include-v.
+ (LINK_SPEC): Add missing `-' before `k' option.
+ (PREFERRED_DEBUGGING_TYPE): Define to DBX_DEBUG.
+ (SDB_DEBUGGING_INFO): Define.
+ (MD_EXEC_PREFIX): Define to /usr/local/lib/gcc-.
+ (LINK_LIBGCC_SPECIAL_1): Define.
+ (NAME__MAIN, SYMBOL__MAIN): Define.
+
+ * sparc.h (EXTRA_CONSTRAINT): Delete 'S'.
+ * sparc.md (call+1, call+2, call_value+1, untyped_call+1): Split
+ into two patterns, one using address_operand and 'p', the other
+ immediate_operand and 'i'.
+
+Fri Aug 27 15:43:19 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (nonzero_bits): Fix reversed test for when we
+ need to insert extra bits when sizes differ.
+ (nonzero_bits, case EQ): Always return STORE_FLAG_VALUE when returning
+ integer mode; remove now-redundant test.
+
+ * rs6000.h (LINK_SPEC): Add -bexport:/usr/lib/libg.exp when -g.
+
+Fri Aug 27 13:17:28 1993 Jim Wilson (wilson@cygnus.com)
+
+ * rs6000.c (print_operand_address): When TARGET_MINIMAL_TOC, use
+ r30 instead of r2 for TOC references.
+ (output_prologue): If TARGET_MINIMAL_TOC, and the constant pool
+ is needed, then setup r30.
+ (output_toc): When TARGET_MINIMAL_TOC, use .long instead of .tc.
+ * rs6000.h (TARGET_MINIMAL_TOC): New macro.
+ (TARGET_SWITCHES): Add -mminimal-toc and -mno-minimal-toc.
+ (ELIMINABLE_REGS): Add elimination for r30.
+ (CAN_ELIMINATE): Add case for r30.
+ (INITIAL_ELIMINATION_OFFSET): Add case for r30.
+ (toc_section): When TARET_MINIMAL_TOC, initialize toc_table.
+
+Thu Aug 26 17:59:38 1993 Doug Evans (dje@cygnus.com)
+
+ * gstdarg.h, gvarargs.h: Add support for H8/300H.
+ * va-h8300.h: New file.
+
+Thu Aug 26 15:15:27 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ Cygnus<->FSF C++ front-end merge.
+ Wed Aug 25 17:55:58 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-class.c (alter_visibility): Properly grok protected visibility.
+
+ Wed Aug 25 12:55:17 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-typeck.c (c_sizeof): If we're given an OFFSET_TYPE, work with
+ the type it refers to.
+
+ * cp-decl.c (finish_function): Properly handle inline functions,
+ don't just call rest_of_compilation.
+
+ * cp-decl2.c (flag_inline_debug): Deleted, never used.
+ (lang_f_options): Deleted -finline-debug.
+ * toplev.c (lang_options): Likewise.
+
+ Tue Aug 24 16:06:23 1993 Mike Stump (mrs@poseidon.cygnus.com)
+
+ * cp-dem.c: Deleted. See demangler in the binutils distribution.
+
+ Tue Aug 24 14:24:34 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (start_function): Don't get ready to complain about a
+ built-in C-linkage function against a C++-linkage function.
+
+ Tue Aug 24 13:54:43 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
+
+ * g++.c: also include <sys/types.h>
+
+ Tue Aug 24 05:39:57 1993 Michael Tiemann (tiemann@blues.cygnus.com)
+
+ * cp-parse.y (id_scope): Renamed from scoped_id. Also added handler
+ for case when rule appears after `dont_see_typename' action. Now
+ handles pointer-to-member syntax.
+
+ Mon Aug 23 14:04:34 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-parse.y (datadef): Disallow forward declaration of an enum.
+
+ * cp-class.c (finish_struct): Set LAST_X to X, so we keep the chain
+ in some semblance of sanity. Makes more than one nested typedef
+ work properly.
+ * cp-decl.c (grokdeclarator): Rewrite how class-local typedefs are
+ handled to generate a TYPE_DECL that's useful.
+
+ * cp-decl.c (start_function): Don't error out if it's a static
+ function; don't return 0, which can cause other problems.
+
+ Sun Aug 22 18:00:57 1993 Michael Tiemann (tiemann@blues.cygnus.com)
+
+ * cp-decl.c (duplicate_decls): Set DECL_OVERLOADED flag on "C"
+ functions so that they are treated properly when "C++" functions of
+ the same name are declared before they are.
+
+ Sun Aug 22 13:31:44 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ Fix how we handle binding levels, and tweak Niklas's new scoping
+ code to work 100%. This work should significantly improve how
+ g++ handles the use of nested classes.
+ * cp-tree.h (NEW_CLASS_SCOPING): Default to 1 now!
+ * cp-decl.c (pop_binding_level): Set current_binding_level to be
+ class_binding_level if it's non-NULL. Change code that looks for
+ our method of climbing back up the binding levels when we're
+ dealing with a parm.
+ (pushlevel_class): Call push_binding_level, not pushlevel.
+ (poplevel_class): Don't weird out if level is 0. DO NOT set
+ class_binding_level to the level_chain, this was the biggest bug
+ that made the pushes and pops to end up being unbalanced.
+ Call pop_binding_level instead of manually putting the level on
+ the free_binding_level chain.
+ (pop_from_top_level): Don't call poplevel if previous_class is
+ non-NULL.
+ (finish_function): Call expand_start_bindings and
+ expand_end_bindings in a balanced way.
+ (finish_function): Don't flail around screwing with the RTL for
+ the function in a very special case, just always call
+ rest_of_compilation as we normally would.
+ (finish_method): Call poplevel, not pop_binding_level.
+ * cp-class.c (pushclass): Don't call unuse_fields.
+ * cp-tree.c (break_out_calls): Always call copy_node, not just
+ when changed++ == 0.
+ * cp-search.c (bridge_obstack): Deleted.
+ (push_class_decls): Use search_obstack, not bridge_obstack.
+ (init_search_processing): Don't init bridge_obstack anymore.
+
+ * cp-init.c (build_new): Don't clear LOOKUP_COMPLAIN on flags, since
+ we need to honor the visibility of what we find.
+
+ Sat Aug 21 12:07:26 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Give an error about an array of
+ offset types and method types, in addition to reference types.
+ Also make sure to set `type' to be error_mark_node for each.
+
+ * cp-parse.y (primary, PLUSPLUS/MINUSMINUS): Resolve the OFFSET_REF
+ here.
+ * cp-typeck.c (build_x_unary_op): Not here.
+
+ * cp-class.c (finish_struct): Set DECL_CLASS_CONTEXT only if it's
+ a virtual function.
+ * cp-decl.c (grokfndecl): Communicate the virtual bit to function
+ decls that overload a virtual function from a base class.
+ * cp-search.c (dfs_pushdecls): Look at DECL_CLASS_CONTEXT if it's
+ a virtual function.
+
+ Fri Aug 20 13:35:54 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ Make the g++ driver work with MS-DOS.
+ * g++.c (P_tmpdir, {R,W,X}_OK) [__MSDOS__]: Defined.
+ (choose_temp_base_try, choose_temp_base, perror_exec,
+ run_dos) [__MSDOS__]: New functions for the g++ program to operate
+ correctly under MS-DOS.
+ (temp_filename, temp_filename_length) [__MSDOS__]: New variables.
+ (main): Fix off-by-one error in allocation of arglist. When
+ running the main GCC program, handle running it under OS/2, MS-DOS,
+ as well as on a system that has execvp(2). Only find the location
+ of the GCC executable if we're not using DOS.
+
+ * cp-decl.c (poplevel): Only call remember_end_note if we haven't
+ already created the block. Set TREE_USED on the block.
+ (duplicate_decls): If the type of either the old or new decl is an
+ error_mark_node, we've already issued an error so set types_match
+ to be 1 now.
+ (xref_defn_tag): Mark the TYPE_DECL as ignored if doing dwarf
+ debugging.
+
+ * cp-parse.y (base_init, nodecls): Call keep_next_level to make
+ sure the BLOCK node is kept with the outermost curly braces of a
+ function.
+ (compstmt): For `{ }', insert a .pushlevel and do all of the other
+ stuff we need in every other compstmt situation, to generate proper
+ debugging for such things and handle the binding levels properly for
+ them.
+
+ Thu Aug 19 18:24:25 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-init.c (build_vec_delete): Wrap void COND_EXPR in NOP_EXPR, so
+ that the backend does not abort when trying to use the void mode
+ expression. Fixes make check (tString.o) in libg++.
+
+ Thu Aug 19 12:21:12 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-typeck.c (build_x_unary_op): When we receive an OFFSET_REF,
+ resolve it before looking for a way to handle the operation.
+
+ * cp-method.c: Include ctype.h.
+
+ Thu Aug 19 12:00:08 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-class.c, cp-search.c (NEW_SEARCH, NEW_CONVERT,
+ CHECK_convert_pointer_to_single_level): Remove ability to revert to
+ old code, and remove checks. Cleans-up the code a little.
+
+ Thu Aug 19 00:41:55 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-init.c (expand_aggr_init): Avoid faulting, give error instead.
+
+ Wed Aug 18 22:43:25 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-lex.h (RID_BIT_TYPE, RIDBIT_SETP, RIDBIT_NOTSETP, RIDBIT_SET,
+ RIDBIT_RESET, RIDBIT_RESET_ALL, RIDBIT_ANY_SET): New RID macros,
+ replaces RIDBIT macro. The new macros allow us to easily expand
+ past 32 RIDs.
+ * cp-decl.c (grokvardecl, grokdeclarator): Use them.
+
+ * cp-decl.c (grokdeclarator): Implement `mutable' keyword.
+ * cp-lex.c (init_lex, ): Ditto.
+ * cp-lex.h (enum rid): Ditto.
+ * cp-ptree.c (print_lang_decl): Ditto.
+ * cp-tree.h (struct lang_decl_flags, DECL_MUTABLE_P): Ditto.
+ * cp-typeck.c (build_component_ref_1, build_component_ref): Ditto.
+ * gplus.gperf (mutable): Ditto.
+ * cp-hash.h: Regenerate.
+
+ * cp-tree.h (struct lang_type): Fill out type_flags to multiple of 4
+ bytes for MIPS.
+
+ Fri Aug 13 16:07:46 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-lex.c (DEBUG_DEFAULT_FUNCTIONS): Take out the #undef, so we can
+ use the command line to turn this on.
+
+ * cp-decl.c (grokdeclarator): Look for IDENTIFIER_TEMPLATE in the
+ name of current_class_type, not in current_class_type itself.
+
+ * cp-decl.c (pushdecl): Change to also check TREE_PUBLIC on the decl
+ in question, and do a pedwarn_with_decl instead of
+ warning_with_decl for conflicting extern declarations.
+
+ Fri Aug 13 12:26:41 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-tree.h: Delete all the old PARANOID stuff, it's suffered
+ serious bit rot.
+ (PRINT_LANG_DECL, PRINT_LANG_TYPE): Deleted, not used anymore.
+ (LANG_ID_FIELD, SET_LANG_ID): New macros.
+ ({,SET_}IDENTIFIER_{LABEL_VALUE, IMPLICIT_DECL, AS_DESC, AS_LIST,
+ ERROR_LOCUS}): Redefine these macros to use the new LANG_ID_FIELD
+ and SET_LANG_ID ones, so everything is much cleaner and readable.
+
+ * cp-decl.c (pushtag) [NEW_CLASS_SCOPING]: Push into the template's
+ class scope before trying to push the decl, and then pop back out.
+ (globalize_nested_type) [NEW_CLASS_SCOPING]: Asserts 348 and 349
+ aren't correct, shadow can come out to be null in some situations.
+
+ Thu Aug 12 10:56:50 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-method.c (build_overload_name): Allow the debugger to
+ deterministically demangle names with more than 9 nested class
+ levels.
+
+ Thu Aug 12 00:46:54 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-search.c (pushd_stack_level): Fix memory corruption problem.
+ Don't assume that the obstack won't move, because they will. Among
+ other things, the fix allows one to nest classes upto 240 levels
+ deep, instead of 60 or so.
+
+ Thu Aug 12 00:38:05 1993 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * cp-decl2.c (finish_file): Use new get_file_function_name().
+ * cp-tree.h (FILE_FUNCTION_FORMAT): No longer needed.
+
+ Fri Aug 6 11:37:08 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (pop_binding_level) [DEBUG_CP_BINDING_LEVELS]: Don't
+ call abort, since we need to see where things end up.
+
+ Fri Aug 6 11:13:57 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-class.c (finish_struct): Blast away old DECL_SIZE on
+ base_layout_decl so that the old value is not reused, but rather the
+ new value in the TREE_TYPE (TYPE_SIZE ()) will be.
+
+ Thu Aug 5 18:45:26 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-init.c (emit_base_init): Move vbase vtable pointer init to very
+ end of base initialization code. Completes July 30 change. The
+ dynamic type of a virtual base should not be the type of the current
+ constructor, until after all bases are initialized.
+
+Thu Aug 26 06:00:09 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c: (apply_args_register_offset): Don't use ANSI-style
+ definition.
+
+Wed Aug 25 19:37:26 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * expmed.c (store_bit_field): Do not use bitfield instructions for
+ STRICT_ALIGNMENT machines if the MEM's alignment isn't as big as
+ the MEM's mode.
+
+Wed Aug 25 19:17:13 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-typeck.c (format_char_info_print_table, "p"): Allow width.
+
+Tue Aug 24 18:36:31 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.c (output_{pro,epi}log): Don't need no-ops after calls
+ to functions to save and restore FP regs.
+
+Tue Aug 24 15:43:43 1993 Michael Meissner (meissner@osf.org)
+
+ * osfrose.h (SUBTARGET_SWITCHES): Add -mlarge-align and
+ -mword-align to control whether alignments of > 4 are honored.
+ (ASM_OUTPUT_ALIGN_CODE): If -mlarge-align allow alignments > 4.
+ (ASM_OUTPUT_ALIGN): Ditto.
+ (ASM_OUTPUT_LOOP_ALIGN): Always do a .align 2.
+ (FUNCTION_BLOCK_PROFILER): Define.
+ (BLOCK_PROFILER): Define.
+
+Tue Aug 24 14:04:11 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.c (compute_frame_size): Always align stack to 64 byte
+ boundary.
+
+ * pa.h (STACK_BOUNDARY): Stack pointer is 512 bit (64 byte)
+ aligned.
+
+ * pa.c (output_call): Use ASM_OUTPUT_INTERNAL_LABEL instead of
+ output_asm_label.
+
+Tue Aug 24 11:24:27 1993 Kresten Krab Thorup (krab@iesd.auc.dk)
+
+ * Merge of Objective C related changes since June 1.
+
+ * objc/xforward.c, objc/mutex.h: Files removed.
+ * objc/encoding.[ch]: New files.
+ * objc/todo: File removed.
+
+ Tue Jun 1 00:05:12 1993 Kresten Krab Thorup (krab@iesd.auc.dk)
+
+ * expr.c (apply_args_register_offset): New function
+ (apply_args_reg_offset): New variable
+ (apply_args_size): Added initialization of apply_args_reg_offset.
+
+ * objc-act.c (offset_is_register): New variable
+ (forwarding_offset): Use apply_args_register_offset to get
+ register offset.
+ (encode_method_def, encode_method_prototype): Prepend argument
+ offset by '+' if passed in register.
+ (apply_args_register_offset): Added declaration.
+
+ Sun Jun 6 20:57:03 1993 Kresten Krab Thorup (krab@iesd.auc.dk)
+
+ * objc/encoding.h, objc/encoding.c: New files.
+ * objc/Object.m (-performv): Use new objc_msg_sendv.
+ * objc/sendmsg.c (objc_msg_sendv): Use new encoding facilities.
+ * objc/objc.h (arglist_t): Data-definition changed.
+ * objc/xforward.c: File removed.
+ * objc/Makefile (sendmsg.c, fflags, xforward): Targets removed;
+ (OBJC_O): Added encoding.o;
+ (OBJC_H): Added encoding.h, removed mutex.h.
+
+ * objc/objc.h (nil_method): Don't define it, import it from sendmsg.c.
+
+ Wed Jun 16 17:39:56 1993 Kresten Krab Thorup (krab@iesd.auc.dk)
+
+ * objc/objc-api.h: (CLS_SETNUMBER): Clear old number
+ * objc/sendmsg.c (__objc_update_dispatch_table_for_class):
+ Don't free dtable... (memory leak to make posing work)
+ * objc/class.c (class_pose_as): lazy copy dtables.
+ #include sarray.h
+
+ Tue Jun 22 21:39:11 1993 Kresten Krab Thorup (krab@xiv)
+
+ * objc/class.c (class_pose_as): Rewritten
+ * objc/sendmsg.c (__objc_update_dispatch_table_for_class):
+ Free old dispatch table and install a new.
+
+ Tue Aug 24 00:41:35 1993 Kresten Krab Thorup (krab@iesd.auc.dk)
+
+ * objc-act.c (generate_method_descriptors, generate_ivar_lists,
+ generate_dispatch_tables): Reorganized use of constructors.
+ (build_descriptor_table_initializer, build_ivar_list_initializer,
+ build_dispatch_table_initializer): Removed argument `int *size'.
+
+ Tue Aug 24 00:52:04 1993 Kresten Krab Thorup (krab@iesd.auc.dk)
+
+ * objc/sendmsg.c (__objc_install_dispatch_table_for_class):
+ Dynamically expand dispatch table when full.
+
+Mon Aug 23 19:37:33 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (TARGET_TRAILING_COLON): Delete switch. TARGET_GAS now
+ controls the use of trailing colons.
+
+Mon Aug 23 18:46:14 1993 Frederic Pierresteguy (F.Pierresteguy@frcl.bull.fr)
+
+ * config/m68k/dpx2g.h (ASM_LONG): Move from dpx2.h.
+
+ * configure (m68k-bull-sysv): Add support for working with native
+ assembler.
+ * config/m68k/dpx2.h (MOTOROLA): Define this.
+ (VERSADOS): This the name of the DPX2 assembler. Define this in case.
+ (USG): Define this.
+ (SGS_NO_LI): define this to suppress jump table usage.
+ (TARGET_DEFAULT): Define this to 3 inside the conditional USE_GAS
+ since bitfields do not work a clean way on DPX2.
+ (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, SELECT_SECTION,
+ SELECT_RTX_SECTION): #undef these.
+ (READONLY_DATA_SECTION): Define to data_section.
+ (*_ASM_OP, ASM_OUTPUT_*): Define these accordingly to the native
+ assembler syntax.
+ (LONG_DOUBLE_TYPE_SIZE): Set to 64 to not use XFmode.
+ (REAL_ARITHMETIC): Define this to use the software floating point
+ emulator.
+ (JUMP_TABLES_IN_TEXT_SECTION): Define this to 1.
+ (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE): Override m68k.h default.
+ (ASM_OUTPUT_ASCII): add a new variable to take care of the lentgh of
+ the operand field which must be < 80 chars.
+ (PRINT_OPERAND_ADDRESS): Override m68k.h default.
+ (PUT_SDB_TYPE): Output type in decimal.
+ (PUT_SDB_FUNCTION_[START|END]): Override sdbout.c default.
+ (PUT_SDB_BLOCK_[START|END]): Override sdbout.c default.
+
+Mon Aug 23 18:33:26 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (twoval_comparison_p): Add new arg, SAVE_P; all
+ callers changed.
+ (fold, case EQ_EXPR): If SAVE_P is true after call to
+ twoval_comparison_p, call save_expr on the expression we make.
+
+Mon Aug 23 07:57:41 1993 Michael Meissner (meissner@osf.org)
+
+ * i386/osfrose.h (CC1_SPEC, CPP_SPEC): If NO_UNDERSCORE is
+ defined, the ELF compiler defaults to -mno-underscores to remove
+ leading underscores. Clean up ROSE -pic options so that they are
+ never passed when building ELF objects.
+ * i386/osfelf.h: Likewise.
+
+Sun Aug 22 23:36:24 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * expr.c (expand_builtin_apply): Fix typo.
+
+ * pa.md (untyped_call): New define_expand.
+
+Fri Aug 20 12:24:50 1993 Ian Lance Taylor (ian@spiff.gnu.ai.mit.edu)
+
+ * gcc.c (main): Correct August 6 change.
+
+Thu Aug 19 19:19:19 1993 Jim Wilson (wilson@cygnus.com)
+
+ * combine.c (simplify_shift_const, XOR case): When applying
+ distributive law, use shift_mode and GET_MODE (varop) instead of
+ result_mode.
+
+Thu Aug 19 08:28:50 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.md (scc): Fix typo in scc with compare and set.
+
+ * combine.c (can_combine_p): Don't reject SUBREG assignments here.
+ (subst): Instead, do it here, but also allow it in as a
+ nested SUBREG since the inner one will be eliminated.
+ (simplify_and_const_int): Convert (and (neg X) (const_int 1))
+ to a shift when X is known to be either 0 or 1.
+
+ * fold-const.c (fold): Handle EQ_EXPR and NE_EXPR where both
+ args are comparisons or BIT_AND_EXPR with constant 1.
+
+Wed Aug 18 23:37:05 1993 Jim Wilson (wilson@cygnus.com)
+
+ * mips.h (SELECT_SECTION): Put object in sdata only if size is
+ known, i.e. greater than 0.
+
+Wed Aug 18 17:48:51 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): Don't split a PARALLEL of a SIGN_EXTEND
+ and the object being sign extended if we have made assumptions
+ about the form the I2DEST.
+
+ * combine.c (nonzero_bits): Handle case when BYTE_LOADS_EXTEND is
+ not on and we are asked for something in a mode wider than it.
+
+Wed Aug 18 02:21:35 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.md (movdf insn): Distinguish between offsettable and
+ nonoffsettable memory locations when loading/storing a GR.
+ (movdi insn): Likewise. Loading a DImode constant can take as
+ many as 4 insns (length of 16 bytes).
+
+ * pa.md (zero_extendqihi2): No need to explicitly set a length;
+ the defaults are correct.
+ (zero_extendqisi2, floatsisf2, floatsidf2): Likewise.
+ (fix_truncdfsi2, fix_truncsfdi2, fix_truncdfdi2): Likewise.
+
+ * pa.c (emit_move_sequence): Check both reload_in_progress and
+ reload_completed when choosing a scratch/temporary register.
+
+ * pa.h (TARGET_KERNEL): Delete switch and all references to it.
+ * pa.c (emit_move_sequence): Always handle secondary reloads for
+ symbolic addresses.
+ (secondary_reload_class): Symbolic operands always need a secondary
+ reload from R1_REGS if their target class is not R1_REGS.
+ * pa.md (HIGH for symbolic operands): TARGET_KERNEL version is now
+ the only choice. Delete ! TARGET_KERNEL version.
+
+ * pa.h (DEFAULT_GDB_EXTENSIONS): GDB extensiosn are on by default.
+ * pa-hpux.h (DEFAULT_GDB_EXTENSIONS): Turn GDB extensions off.
+ * pa-hpux7.h (DEFAULT_GDB_EXTENSIONS): Likewise.
+
+ * pa.h (TARGET_GAS): New target flag to control use of GAS
+ specific assembler directives.
+ (TARGET_SWITCHES): Support -mgas and -mno-gas.
+ (ASM_DECLARE_FUNCTION_NAME): If TARGET_GAS then emit .PARAM
+ directives for static functions so argument relocations work.
+ * pa-ghpux.h (TARGET_DEFAULT): Enable TARGET_GAS.
+ * pa-gux7.h, pa-utahmach.h, pa.h (TARGET_DEFAULT): Likewise.
+ * pa1-ghpux.h, pa1-utahmach.h, pa1.h (TARGET_DEFAULT): Likewise.
+
+ * pa.c (hppa_legitimize_address): Rework address computation for
+ x[n - m] so that problems with implicit space register selection
+ are avoided.
+
+ * pa.h (EXTRA_CONSTRAINT): Delete unused 'S' constraint.
+ * pa.md (call_internal_symref): Make pattern unavailable if
+ TARGET_LONG_CALLS.
+ (call_value_internal_symref): Likewise.
+
+Mon Aug 16 18:47:56 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ From parkes@uiuc.edu:
+ * encore.h, ns32k.h (ASM_OUTPUT_ADDR_DIFF_ELT): Use .double instead
+ of .word.
+ * ns32k.h (CASE_VECTOR_MODE): Now SImode; was HImode.
+ * ns32k.md (tablejump): Now SImode and uses cased.
+
+ * fold-const.c (fold, case EQ_EXPR): Re-enable converting
+ signed MOD operations to unsigned when inside comparisons
+ against zero, but only when the second operand of the MOD
+ is an integral power of two.
+
+Mon Aug 16 12:38:28 1993 John Hassey (hassey@dg-rtp.dg.com)
+
+ * fixinc.dgux: Fixed va_list problem in _int_varargs.h
+
+Mon Aug 16 11:26:57 1993 Kevin Buettner (kev@spuds.geg.mot.com)
+
+ * configure (m88k-mot-sysv4*): Added new configuration for m88k
+ delta machines running svr4.
+
+ * config/m88k/mot-sysv4.h: New file.
+
+Mon Aug 16 11:16:32 1993 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * combine.c: (use_crosses_set_p): Check for partially overlapping
+ hard regs.
+
+Sun Aug 15 20:17:20 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * reorg.c (find_end_label): If a suitable RETURN insn exists at
+ the end of the current function, place a label in front of it for
+ the end_of_function_label.
+
+Fri Aug 13 16:40:03 1993 Pat Rankin (rankin@eql.caltech.edu)
+
+ * c-typeck.c (check_format): For scan of "%[", skip over scan set
+ til closing ']' to avoid processing it as ordinary format characters.
+
+Fri Aug 13 16:02:23 1993 Chip Salzenberg (chip@fin.uucp)
+
+ * c-common.c (declare_hidden_char_array): New function to
+ factor out duplicate code in declare_function_name.
+ Don't set DECL_EXTERNAL (which is illegal without TREE_PUBLIC)
+ to prevent output; instead, set TREE_ASM_WRITTEN.
+ (declare_function_name): Use declare_hidden_char_array.
+
+Fri Aug 13 14:58:52 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/ns32k/encore.h (ASM_OUTPUT_ALIGN_CODE): Override as no-op.
+
+Fri Aug 13 14:29:17 1993 Stephen Moshier (moshier@world.std.com)
+
+ * sparc.h (LONG_DOUBLE_TYPE_SIZE): Define to 128.
+
+ * real.c (GET_REAL, PUT_REAL): Add TFmode versions.
+ (MAXDECEXP, MINDECEXP): New decimal exponent limits
+ that vary with definition of LONG_DOUBLE_TYPE_SIZE.
+ (endian, ereal_atof, real_value_truncate, einfin, emdnorm, asctoeg):
+ Add cases for TFmode.
+ (etartdouble): New function converts REAL_VALUE_TYPE to TFmode
+ for use by ASM_OUTPUT_LONG_DOUBLE.
+ (edivm, emulm): Ifdef out, replace by faster multiply and divide.
+ (etoe113, toe113, e113toe): New type conversions for TFmode.
+ (asctoe113, e113toasc): New TFmode binary <-> decimal conversions.
+ (at top level): Define constants ezero, eone, emtens, etens, ...
+ in a new 20-byte format when LONG_DOUBLE_TYPE_SIZE = 128 and
+ set NE to 10. Otherwise, the internal format remains 12 bytes wide.
+ (etoudi, etodi, ditoe, uditoe): New functions, signed and unsigned
+ DImode float and fix, for real.c used in a libgcc-of-last-resort.
+ (esqrt): New function, correctly rounded square root for libgcc.
+ (etodec): Delete ifdef'd version.
+ (eroundi, eroundui): Rename to efixi, efixui and always
+ round towards zero.
+
+ From frank@atom.ansto.gov.au (Frank Crawford):
+ (etoibm, toibm, ibmtoe): New conversions for IBM 370 float format.
+ (e53toe, e64toe, toe64, etoe53, toe53, etoe24, toe24, asctoe53,
+ asctoeg, make_nan): Ifdef for IBM.
+
+ * real.h (REAL_VALUE_TYPE): Define array at least 20 bytes wide
+ if LONG_DOUBLE_TYPE_SIZE is 128 bits.
+ (etartdouble): Declare and use for REAL_VALUE_TO_TARGET_LONG_DOUBLE
+ when long double is TFmode.
+ (REAL_VALUE_FIX, REAL_VALUE_UNSIGNED_FIX): Must always round
+ towards zero.
+
+Fri Aug 13 07:50:42 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case SAVE_EXPR): Set MEM_IN_STRUCT_P
+ appropriately when the result is a MEM.
+
+ * integrate.c (expand_inline_function): Copy args that are in
+ hard regs instead of substituting them directly into insns.
+
+ * rs6000.md (subsi3): Merge alternatives.
+ (comparison patterns): Eliminate generation of "sfi."; no such
+ instruction exists.
+
+Thu Aug 12 21:24:01 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/m68k/sun3.h (CPP_PREDEFINES): Define _CROSS_TARGET_ARCH.
+
+Thu Aug 12 19:02:47 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.md (attribute "type"): Add new type, "branch".
+ (attribute "length"): New attribute; put on all insns that don't
+ have default length.
+ (branch patterns): If conditional branch won't reach, take
+ conditional branch around an unconditional branch.
+
+ * rs6000.md (plus): Split (plus (COMPARISON FOO ...) ...) at FOO.
+
+Thu Aug 12 14:04:40 1993 Michael Meissner (meissner@osf.org)
+
+ * i386/osfrose.h (SUBTARGET_SWITCHES): Add -munderscores and
+ -mno-underscores.
+ (CPP_SPEC): If -mno-underscores, define __NO_UNDERSCORES__.
+ (LPREFIX): Redefine, to take -m{,no-}underscores into account.
+ (ASM_GENERATE_INTERNAL_LABEL): Ditto.
+ (ASM_OUTPUT_INTERNAL_LABEL): Ditto.
+ (ASM_OUTPUT_LABELREF): Ditto.
+
+ * i386/osfelf.h (CPP_SPEC): If -mno-underscores, define
+ __NO_UNDERSCORES__.
+
+ * c-decl.c (pushdecl): Don't give nested warning messages if
+ DECL_IN_SYSTEM_HEADER is set in order not to give warnings when
+ defining new instances of __FUNCTION__ and __PRETTY_FUNCTION__.
+
+Thu Aug 12 13:42:04 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.c (legitimize_pic_address): Delete 4th arg SCRATCH.
+ Fix all callers.
+ (emit_move_sequence): Delete 3rd arg SCRATCH_REG. Fix all
+ callers. If operand1 is an invalid PIC address, then legitimize
+ it before doing anything else.
+ * sparc.h (SECONDARY_INPUT_RELOAD_CLASS): Delete case for invalid
+ PIC addresses.
+ (CONSTANT_ADDRESS_P): Reject invalid PIC addresses.
+ (LEGITIMATE_PIC_OPERAND_P): New macro.
+ (GO_IF_LEGITIMATE_ADDRESS): Reject invalid PIC addresses.
+ (LEGITIMIZE_ADDRESS): Fix call to legitimize_pic_address.
+ * sparc.md (reload_insi): Delete.
+ (*): Fix all callers of legitimize_pic_address and emit_move_sequence.
+
+ * sched.c (sched_analyze_insn): Handle USE before a JUMP_INSN just
+ like a USE before a CALL_INSN.
+ * function.c (thread_prologue_and_epilogue_insns): For the
+ epilogue, put USE insns immediately before the return insn.
+
+ * sparc.h (ASM_OUTPUT_DOUBLE): Always use REAL_VALUE_TO_TARGET_DOUBLE.
+ (ASM_OUTPUT_FLOAT): Always use REAL_VALUE_TO_TARGET_SINGLE.
+
+Wed Aug 11 19:48:24 1993 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * tree.c (get_file_function_name): New function
+ for language-independent constructor name generation.
+ * objc-act.c (build_module_descriptor): Use it.
+ * tree.h (CONSTRUCTOR_NAME_FORMAT): Removed.
+
+Wed Aug 11 19:50:05 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * reorg.c (try_merge_delay_insns): Fix typo.
+ (fill_simple_delay_slots): Only access the JUMP_LABEL field
+ if the INSN needing delay slots is a JUMP_INSN.
+
+Wed Aug 11 15:09:52 1993 Michael Meissner (meissner@osf.org)
+
+ * c-typeck.c (output_init_element): Don't call default_conversion
+ for a STRING_CST if type is directly suitable for it.
+ (digest_init): Eliminate a lot of code that checks the variable
+ 'element', since element is always 0 in these code paths.
+
+Wed Aug 11 17:59:28 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (combine_instructions): Fix typo on test of basic block
+ number.
+
+Wed Aug 11 17:44:38 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure (m68k-hp-bsd4.4*): Add missing *;
+ move before m68k-hp-bsd*.
+
+Wed Aug 11 09:21:56 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Get SIZE_TYPE by invoking gcc rather than cc; gcc
+ location is passed in as fourth argument.
+ * Makefile.in (stmp-fixinc): Depend upon xgcc and cpp; pass
+ objdir/xgcc -Bobjdir/ as fourth argument to $(FIXINCLUDES).
+
+Tue Aug 10 15:12:11 1993 Jim Wilson (wilson@cygnus.com)
+
+ * cse.c (cse_insn): After inserting src_eqv, check to see if it is
+ identical to any uninserted SET_SRCs, and if so, set their src_elt
+ to src_eqv_elt.
+
+Tue Aug 10 12:56:46 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (DOLLARS_IN_IDENTIFIERS): Define as 2.
+
+Mon Aug 9 19:02:49 1993 Per Bothner (bothner@wombat.gnu.ai.mit.edu)
+
+ Merged fixproto stuff from Cygnus.
+
+ Fri Aug 6 12:23:04 1993 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * fixproto, Makefile.in: Rename tmp.[ci] -> fixtmp.[ci].
+
+ Tue Aug 3 22:24:58 1993 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * fixproto: Find not only nested directories, but also
+ links to directories.
+
+ Mon Aug 2 18:58:35 1993 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * fixproto: Add kludge to getting hit by double globbing.
+ * scan-types.sh: Fix to emit #define, not a typedef.
+ * patch-header.c (main): Make sure to print a space after
+ a function name when we didn't see a '('.
+ * Makefile.in (stmp-fixproto): Fix so (/*...*/) becomes ().
+
+ Fri Jul 30 17:18:22 1993 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * fixproto: Append seen files to fixproto.list file,
+ instead of done_files variable (which could become too long).
+ * fixproto: Don't generate a huge rel_souce_files variable
+ (which might become too long); instead loop over directories.
+ * fixproto: Remove signal() from list of required functions
+ for signal.h, because we can't grok its complicted prototype.
+ * Makefile.in (mostlyclean): Also delete fixproto.list.
+
+ Thu Jul 29 12:43:53 1993 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * scan-decls.c (skip_to_enclosing_brace): New function.
+ * scan-decls.c (main): After a parameter list, skip
+ any following function body (usually for inline functions).
+
+ * fixproto: Fix to make sure stdlib.h and unistd.h get
+ the proper required_list, even when they need to be created.
+ * fixproto: Direct cpp error messages to /dev/null.
+ * patch-header.c: Make less verbose.
+
+ Wed Jul 28 16:12:39 1993 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * fixproto: Rewrite to use a case statement instead of eval to
+ set required_list and extra_check_list.
+ * fixproto: Simplify remaining call to tr improving portability.
+
+ * scan-decl: Recognize inline functions, emitting typecode 'I'.
+ * patch-header (read_scan_file): Handle inline functions.
+ * patch-header (read_scan_file): Fix thinko. Rename variable.
+
+Mon Aug 9 17:47:48 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (build_c_cast): For (void *) (FOO *) 0, return a nop_expr
+ so it doesn't count as a null pointer constant.
+ (convert_for_assignment, build_binary_op): Pedantically warn about
+ that case if looking for a null_pointer_constant.
+ (build_conditional_expr): Likewise.
+
+ * ns32k.c (output_move_double): Fix typos in last change.
+
+ * expr.c (store_expr): Don't return TEMP if it's a MEM.
+
+Mon Aug 9 15:26:27 1993 Jim Wilson (wilson@cygnus.com)
+
+ * varasm.c (assembler_variable): For XCOFF_DEBUG, restore section
+ if dbxout_symbol call changes it.
+
+ * sched.c (schedule_insns): Don't emit a NOTE at the end of the last
+ basic block if that would put it between a JUMP_INSN and a BARRIER.
+
+ * mips.h (OPTIMIZATION_OPTIONS): Use |=, not &= to set -mpgopt.
+ * mips.c (function_arg, DFmode case): Set regbase to GP_ARG_FIRST
+ if cum->arg_number greater than or equal to 2.
+
+Mon Aug 9 07:31:07 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * optabs.c (widen_operand): New function.
+ (expand_binop, expand_unop): Call it.
+
+Sun Aug 8 17:32:04 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (num_sign_bit_copies): Properly handle case when MODE is
+ narrower than that of X.
+ (simplify_shift_const): Remove change of July 26.
+
+Sun Aug 8 17:26:57 1993 Jim Wilson (wilson@cygnus.com)
+
+ * sparc.c (sparc_type_code): Support range types.
+
+ * expr.c (expand_increment): Call save_expr on inner expression if
+ it is itself an increment expression.
+
+ * configure (*-*-riscos*): Set broken_install.
+ (mips-*-riscos[56789]sysv4): Use xm-sysv4.h.
+ * mips/xm-sysv4.h: New file.
+ * mips/svr3-5.h, mips/svr4-5.h (_SC_PAGE_SIZE): Define to
+ _SC_PAGESIZE if that exists.
+
+ * sparc.h (CONST_DOUBLE_OK_FOR_LETTER_P): Use fp_zero_operand.
+ * sparc.c (reg_or_0_operand): Use fp_zero_operand.
+ (fp_zero_operand): New function.
+
+ * c-typeck.c (build_array_ref): Force array to be allocated on the
+ stack if it is accessed by out-of-bound constant integer subscript.
+
+ * configure (mips-*): Standardize indentation.
+ (mips-*-*bsd*): Use t-bsd and t-bsd-gas.
+ (mips-*-*sysv4*): Use t-svr4 and t-svr4-gas.
+ (mips-*-*sysv*): Use t-svr3 and t-svr3-gas.
+ * mips/t-bsd, mips/t-bsd-gas, mips/t-svr3, mips/t-svr3-gas,
+ mips/t-svr4, mips/t-svr4-gas: New files.
+
+Sun Aug 8 11:33:51 1993 John F Carr (jfc@Athena.mit.edu)
+
+ * expmed.c (SLOW_UNALIGNED_ACCESS): Define, but allow override.
+ (store_bit_field): Test that instead of STRICT_ALIGNMENT.
+ Also, allow fetching as non-bitfield if memory is aligned enough.
+ (extract_bit_field): Install code here like that in store_bit_field.
+
+Sun Aug 8 04:26:21 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (expand_assignment): If WANT_VALUE is 0, return NULL.
+ (store_expr): Likewise.
+ Rename arg SUGGEST_REG to WANT_VALUE.
+ Never return TARGET if WANT_VALUE unless BLKmode.
+ Instead, return TEMP or a value copied from TARGET.
+ Pass 0 for WANT_VALUE in recursive calls that ignore value.
+
+ * varasm.c (contains_pointers_p): New function.
+ (assemble_variable): Use that.
+
+ * toplev.c (rest_of_decl_compilation): Don't look at DECL_IGNORED_P.
+ Don't output a read-only initialized extern variable.
+
+ * c-common.c (declare_function_name): Set DECL_EXTERNAL in the decls.
+
+Sat Aug 7 22:25:42 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (process_init_element): Don't call clear_momentary
+ if value is 0.
+
+Sat Aug 7 15:53:06 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * caller-save.c (MAX_MOVE_MAX, MAX_UNITS_PER_WORD): New macros.
+ (regno_save_mode, regno_save_mem): Use them.
+ * tm.texi (MAX_MOVE_MAX, MAX_UNITS_PER_WORD): Document them.
+
+ * c-decl.c (init_decl_processing): Make long long available to
+ use for SIZE_TYPE and PTRDIFF_TYPE.
+
+Sat Aug 7 14:47:12 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/ns32k/ns32k.md (strict_low_part add/subtract recognizers):
+ Use %2, not %1, in template.
+
+Sat Aug 7 07:40:28 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload.c (find_reloads): Don't combine two reloads if their
+ reload_reg_rtx values differ.
+
+ * alpha.c (add_long_const): New function.
+ (output_{pro,epi}log): Use it.
+ If register save area is more than 32768 from SP, compute its
+ address into a register.
+
+ * expmed.c (expand_divmod): Clean up code and documentation,
+ especially in areas related to when copies are made.
+
+ * reload.c (push_reload, find_reloads): Treat (subreg (pseudo))
+ and (subreg (mem)) the same.
+ If we have (subreg:M1 (mem:M2 ...) ...), never do anything
+ special if M1 and M2 are the same size.
+
+ * tree.c (print_obstack_name): New function; derived from
+ original debug_obstack.
+ (debug_obstack): Call print_obstack_name.
+ * print-tree.c (print_node): Print obstack node is contained in.
+
+Sat Aug 7 04:47:43 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-decl.c (finish_decl): Allow file-scope static incomplete array.
+
+Fri Aug 6 13:03:27 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * expr.c (expand_expr, case PLUS_EXPR): Goto binop2 not
+ both_summands if we should not be returning a plus.
+
+Fri Aug 6 16:35:50 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/m68k/m68k.md (call and call_value pic recognizers) [HPUX_ASM]:
+ Output plain bsr, without `@PLTPC'.
+
+Fri Aug 6 16:12:08 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.c (reg_or_6bit_operand): New function.
+ * alpha.h (PREDICATE_CODES): Add reg_or_6bit_operand to list.
+ * alpha.md (shifts): Use reg_or_6bit_operand for shift counts.
+
+Fri Aug 6 15:57:58 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * gcc.c (main): If standard_startfile_prefix is a relative path,
+ prepend standard_exec_prefix/MACHINE/VERSION and, if
+ GCC_EXEC_PREFIX is defined, GCC_EXEC_PREFIX/MACHINE/VERSION.
+
+ * configure: If config.status did not change, don't update its
+ modification time.
+
+Fri Aug 6 15:23:49 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (output_init_element): Fix backward test in last change.
+ Use TYPE_MAIN_VARIANT.
+
+Fri Aug 6 06:43:09 1993 Michael Meissner (meissner@osf.org)
+
+ * g++.c (fancy_abort): Provide function in case user does
+ #define abort fancy_abort when building GCC.
+
+Fri Aug 6 00:15:21 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (main): If -v, print header search dir list.
+
+ * c-typeck.c (output_init_element): Call default_conversion here.
+ Set constructor_erroneous, etc., here.
+ (process_init_element): Not here.
+
+Thu Aug 5 20:55:47 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ Cygnus<->FSF merge.
+
+ Thu Aug 5 17:07:20 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-class.c (build_vtable, prepare_fresh_vtable): Turn on
+ WRITABLE_VTABLES stuff that I disabled July 30th.
+ * cp-pt.c: Include flags.h to get write_symbols.
+
+ Thu Aug 5 15:50:25 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-class.c (finish_struct): Make DWARF conditional code, really
+ DWARF conditional (write_symbols == DWARF_DEBUG).
+ * cp-decl.c (pushtag): Ditto.
+ * cp-decl2.c (finish_vtable_vardecl): Ditto.
+ * cp-pt.c (end_template_instantiation): Ditto.
+ * cp-search.c (dfs_debug_mark): Ditto.
+
+ Wed Aug 4 15:42:19 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-typeck.c (build_object_ref): Pass the original basetype, not
+ the type value of it, into build_scoped_ref (completes change of
+ Jul 1).
+
+ Wed Aug 4 14:40:35 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-class.c (related_vslot): Additional check to make sure vslots
+ are related.
+ * cp-class.c (modify_vtable_entries): Use DECL_CONTEXT, not
+ DECL_CLASS_CONTEXT when finding the vtable to put the virtual
+ function in, as otherwise we might not be able to find secondary
+ vtables. Ensures that the virtual function pointer will be put in
+ the correct vtable, instead of the wrong one.
+ * cp-class.c (modify_vtable_entry): Delete unused argument context.
+ * cp-class.c (modify_vtable_entries): Ditto.
+
+ Tue Aug 3 08:24:50 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-init.c (nc_nelts_field_id): New variable to cache the value of
+ the "nelts" identifier, to avoid unnecessary calls to get_identifier.
+ (init_init_processing): Use it.
+ (build_new): Likewise.
+ (build_vec_delete): Likewise.
+
+ * cp-decl2.c (walk_vtables): Make sure the type of VARS isn't an
+ error_mark_node when we're running down the list.
+
+ * cp-decl.c (grokdeclarator): Give an error and return an
+ error_mark_node, instead of saying sorry, when we're dealing with a
+ structure that's not yet been defined. Make sure type isn't an
+ error_mark_node when looking for an anonymous type.
+
+ * cp-pt.c (end_template_instantiation): If we're supplying dwarf
+ debug info, set up the TYPE_STUB_DECL and output the rest of the
+ debug output for the decl.
+
+ * cp-search.c (pop_search_level): Change from a macro into a
+ function, so we can more easily debug it.
+
+ * cp-search.c (dfs_debug_mark): Only mark the type name as ignored
+ if we aren't doing dwarf debugging.
+
+ * cp-typeck.c (build_unary_op): Only allow the prefix operators to
+ be lvalues, not the postfix ones.
+
+ * cp-decl.c (duplicate_decls): Delete the code that saved and
+ restored the UID of a decl, it's no longer necessary.
+
+ * cp-call.c (compute_conversion_costs_ansi): Avoid generating
+ warnings when we call build_type_conversion.
+
+ Mon Aug 2 17:56:36 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (start_function): Complain about redeclaration of a
+ template function, being careful to only deal with pre-parsed
+ declarations that *are* in fact from templates.
+
+ Fri Jul 30 18:03:10 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-class.c, cp-decl.c, cp-pt.c, cp-tree.h: Delete all of the old
+ code for DEBUG_CP_BINDING_LEVELS, and replace it with a new, cleaner,
+ and more usable format.
+
+ Fri Jul 30 17:06:24 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-class.c (build_vtable, prepare_fresh_vtable): Temporarily
+ disable the change of June 20th making vtables readonly by default.
+
+ Fri Jul 30 14:47:09 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-init.c (emit_base_init): Make sure we initialize the pointer to
+ vtables even when we are not in charge. Fixes virtual calls to derived
+ objects that have a static base type, so that they call derived
+ functions, not base functions.
+ * cp-search.c (build_vbase_vtables_init): Change comments to reflect
+ uses of last argument more accurately. Also rename last argument to
+ a better name.
+
+ Wed Jul 28 16:23:52 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-search.c (build_type_pathname): Deleted fn.
+ * cp-class.c (build_type_pathname): Moved to here and made static,
+ since prepare_fresh_vtable is the only fn that ever uses it.
+ * cp-tree.h (build_type_pathname): Deleted prototype.
+
+ * g++.c (error) [!HAVE_VFPRINTF]: Move before fatal to avoid an
+ implicit declaration.
+
+ Wed Jul 28 13:49:58 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
+
+ * Makefile.in (g++-cross): Add an explicit $(srcdir) for g++.c, pass
+ the quotes as part of GCC_NAME
+
+ * g++.c: only define GCC_NAME if it's already undefined
+
+ Tue Jul 27 10:48:30 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (finish_decl): Don't error on uninitialized const
+ arrays. Use error, not error_with_decl, so we know what really
+ brought about the problems.
+
+ * g++.c: New file, written in C so we don't do so many exec's, as we
+ did with the shell script.
+ * g++, c++: Deleted.
+ * Makefile.in (STAGESTUFF): Added g++ and g++-cross.
+ (all.cross): Added g++-cross.
+ (all.build): Depend upon g++.
+ (g++, g++-cross): New rules.
+ (install-common): Depend upon g++. Changed installation of g++/c++
+ to install the g++ program, and link c++ to it. Likewise for
+ g++-cross and c++-cross.
+
+ Mon Jul 26 09:40:37 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-typeck.c (build_unary_op) [case ADDR_EXPR]: When taking the
+ address of an increment/decrement operation, act on the thing
+ being incremented, not the ..._EXPR itself.
+
+ Fri Jul 23 08:33:32 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-call.c (build_method_call): Check DECL_STATIC_FUNCTION_P, not
+ TREE_STATIC, when validating a method call in a static call context.
+
+Thu Aug 5 19:18:00 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.h (TYPE_OBSTACK): New macro.
+ (struct tree_type): Add new field obstack.
+ * tree.c (make_node, copy_node): Set TYPE_OBSTACK.
+ (build_type_variant, build_type_copy, build_pointer_type): Put
+ new node in same obstack as old node; use push/pop obstacks.
+ * stor-layout.c (layout_type): Put size-related nodes in same
+ obstack as type.
+
+ * reload.c (push_reload, find_reloads): Refine when we reload
+ inside a SUBREG by respecting BYTE_LOADS_*_EXTEND; see comments
+ in push_reload.
+
+Thu Aug 5 14:17:59 1993 Michael Meissner (meissner@osf.org)
+
+ * i386/osfrose.h (ASM_DECLARE_FUNCTION_SIZE): Enable setting the
+ size for elf functions.
+
+Thu Aug 5 01:44:37 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * toplev.c (rest_of_compilation): If not optimizing, turn off
+ DECL_INLINE for functions declared as inline. Avoid turning on
+ DECL_INLINE when -finline-functions is used without -O.
+
+Thu Aug 5 00:06:45 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * collect2.c (handler): Check whether c_file and o_file are 0.
+
+Wed Aug 4 18:06:26 1993 Samuel A. Figueroa (figueroa@cs.nyu.edu)
+
+ * i386/gas.h (ASM_FILE_START): Write out two backslashes for each
+ backslash in the filename.
+
+Wed Aug 4 18:00:43 1993 Holger Teutsch (holger@hotbso.rhein-main.de)
+
+ * clipper.md (movdf+2): Allow `f' register as source operand in
+ first alternative.
+
+Wed Aug 4 07:35:03 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (eliminate_regs_in_insn): Always do elimination in
+ REG_NOTES if we changed anything in the insn.
+
+ * genattrtab.c: Include gvarargs.h after hconfig.h, like elsewhere.
+
+Wed Aug 4 01:32:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (output_init_element): Call digest_init before
+ calling output_constant. Always pass 0, 0 for last 2 args
+ to digest_init.
+
+ * expr.c (do_tablejump) [PIC_CASE_VECTOR_ADDRESS]: If pic,
+ copy INDEX to a register early, to avoid invalid address later.
+
+Tue Aug 3 23:56:49 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (process_command): Don't check whether file `-' exists.
+
+Tue Aug 3 18:52:13 1993 John Hassey (hassey@dg-rtp.dg.com)
+
+ * configure (m88k-dg-dgux*): Use fixinc.dgux.
+ * x-dgux (INSTALL_HEADERS): Definition deleted.
+ * fixinc.dgux: New file.
+
+Tue Aug 3 17:34:53 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * calls.c (store_one_arg): Don't pass ARG->STACK as TARGET if it
+ is a different mode than the expression (i.e., a promoted mode).
+
+ * combine.c (force_to_mode): Now pass actual AND mask instead
+ of number of bits; generalize appropriately.
+ Move most cases from simplify_and_const_int in.
+ (simplify_and_const_int): Remove most code from here; call
+ force_to_mode instead.
+ (subst, make_extraction, make_compound_operation): Change calls
+ to force_to_mode.
+ (make_field_assignment): Likewise.
+ (simplify_comparison): Add call to force_to_mode when
+ doing a sign bit comparison.
+ * optabs.c (code_to_optab): New variable.
+ (init_optab): Initialize it.
+ * expr.h: Declare code_to_optab.
+
+Tue Aug 3 15:40:16 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gstddef.h: Test and define __INT_WCHAR_T_H.
+
+Mon Aug 2 22:42:10 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure (i[34]86-sequent-sysv*): New alternative.
+ * config/i386/seq-sysv3.h: New file.
+
+ * combine.c (struct undo): Rename `rtx' fields to `r'.
+ (undo_all, SUBST, gen_rtx_combine): Corresponding changes.
+
+Mon Aug 2 18:53:23 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (subst): Move simple operations inside IF_THEN_ELSE
+ if the IF_THEN_ELSE is in the second operand as well as the first.
+ (subst, case NEG): Use plus_constant to make a PLUS.
+ (subst, case MINUS): Simplify (minus 1 (comparison foo bar)).
+ (subst, case EQ): Add a number of missing cases where
+ comparisons may be replaced with arithmetic or logical ops.
+ (subst, case IF_THEN_ELSE): Handle (if_then_else COND (OP Z C1) Z)
+ in a more general manner.
+ (simplify_and_const_int): Make AND with gen_binary in case we
+ can simplify it.
+
+Mon Aug 2 14:45:43 1993 Frederic Pierresteguy (F.Pierresteguy@frcl.bull.fr)
+
+ * genattrtab.c (substitute_address): In prototype, don't specify
+ the arg types of the arg functions.
+
+ * config/m68k/x-dpx2 (CLIB): Fix typo.
+
+Mon Aug 2 06:36:53 1993 John F Carr (jfc@Athena.mit.edu)
+
+ * local-alloc.c (block_alloc): Don't attempt to allocate a
+ SCRATCH if it will not fit in scratch_list.
+
+Mon Aug 2 00:02:54 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * calls.c (expand_call): Check properly for volatile function.
+
+Sun Aug 1 04:18:23 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-common.c (decl_attributes): Support attributes `volatile'
+ with alias `noreturn', and `const'.
+ * c-parse.in (attrib): Accept those attributes.
+
+ * c-typeck.c (build_binary_op): Warn about ordered comparison
+ between pointers to complete and incomplete types.
+
+ * c-parse.in (stmt): In an expr stmt, call default_conversion
+ for arrays and for functions.
+
+ * c-decl.c (finish_struct): No pedwarn for field with enum type
+ if size matches int.
+ (grokdeclarator): No error for void type for extern or global var.
+
+ * c-typeck.c (digest_init): No error for a STRING_CST that already
+ went through digest_init.
+ (parser_build_binary_op): Generate a NON_LVALUE_EXPR, not NOP_EXPR,
+ around a constant value.
+
+ * config/m68k/amix.h (ASM_OUTPUT_INTERNAL_LABEL)
+ (ASM_GENERATE_INTERNAL_LABEL): Definitions deleted.
+
+ * expr.c (do_tablejump): Use PIC_CASE_VECTOR_ADDRESS if defined.
+ * config/m68k/m68k.h (PIC_CASE_VECTOR_ADDRESS): Defined.
+ (GO_IF_LEGITIMATE_ADDRESS): If pic, accept LABEL+INDEX.
+
+ * c-decl.c (grokdeclarator): Warn here for volatile fn returning
+ non-void type.
+ (start_function): Not here.
+
+ * c-decl.c (grokdeclarator): Don't pass on const and volatile
+ fron function value type to function type.
+
+Sat Jul 31 01:48:08 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (digest_init): Finish getting rid of tail.
+ Also get rid of old_tail_contents. Don't set free_tree_list.
+ (free_tree_list): Var deleted.
+
+ * c-typeck.c (process_init_element): Treat string constants specially
+ only for arrays of integers.
+
+Fri Jul 30 06:49:58 1993 Torbjorn Granlund (tege@sics.se)
+
+ * expmed.c (mult_is_very_cheap): Delete.
+ (mult_cost): Delete.
+ (init_expmed): Delete computation of mult_cost and mult_is_very_cheap.
+ (expand_mult): Compute mult_cost here for every constant multiplier.
+ (synth_mult): Return found algorithms through a struct pointer.
+
+Fri Jul 30 06:45:35 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (fold, case NOP_EXPR): Delete a pair of conversions
+ back to the original type when intermediate type is at least as wide.
+
+ * combine.c: Remove change of July 21.
+ (this_basic_block): New variable.
+ (combine_instructions): Set it.
+ (try_combine, distribute_links): Use it and basic_block_head
+ to see if we've gone to a new basic block instead of trying
+ to reproduce calculation done in flow.
+
+ * stmt.c (expand_return): Don't use jumps for "return x == y" if
+ they are expensive.
+
+Fri Jul 30 02:03:12 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/i386/i386.md (ffssi2 and ffshi2 recognizers):
+ Generate unique labels by hand.
+
+Thu Jul 29 01:47:21 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (push_init_level): For braces around scalar, just warn.
+ (process_init_element): Special handling for {"foo"}.
+ (struct constructor_stack): New field `replacement_value'.
+ (push_init_level, really_start_incremental_init): Clear new field.
+ (pop_init_level): Return the replacement_value if any.
+ At top level in initializer, output that value,
+ and set the array size from it.
+
+ * c-typeck.c (digest_init): Delete arg TAIL. Fix all calls.
+
+ * objc-act.c (build_shared_structure_initializer):
+ Call default_conversion for NAME.
+ (add_objc_string): Make an ADDR_EXPR to return.
+ (init_objc_symtab): Make ADDR_EXPR for UOBJC_SELECTOR_TABLE_decl.
+
+ * objc-act.c: Build all CONSTRUCTORs with types.
+ (build_constructor): New function. All CONSTRUCTOR builds changed.
+ (init_def_list, init_objc_symtab): New arg TYPE.
+ (init_module_descriptor): Likewise.
+ (init_objc_symtab): Pass TYPE arg to init_def_list.
+ (generate_objc_symtab_decl): Pass TYPE arg to init_objc_symtab.
+ (build_module_descriptor): Pass TYPE arg to init_module_descriptor.
+ (build_descriptor_table_initializer): New arg TYPE.
+ (generate_method_descriptors): Pass TYPE arg to
+ build_descriptor_table_initializer.
+ (generate_protocols): Pass TYPE arg to build_protocol_initializer.
+ (uild_protocol_initializer): New arg TYPE.
+ (build_ivar_list_initializer): New arg TYPE.
+ (generate_ivar_lists): Pass TYPE arg to build_ivar_list_initializer.
+ (build_dispatch_table_initializer): New arg TYPE.
+ (generate_dispatch_tables): Pass TYPE arg to
+ build_dispatch_table_initializer.
+ (build_category_initializer): New arg TYPE.
+ (build_shared_structure_initializer): New arg TYPE.
+ (generate_category): Pass TYPE arg to build_category_initializer.
+ (generate_shared_structures): Pass TYPE arg to
+ build_shared_structure_initializer.
+
+ * config/i386/x-ncr3000 (CC, OLDCC): Deleted.
+ * config/i386/xm-sysv4.h [__HIGHC__]: Include alloca.h.
+
+ * convert.c (convert_to_integer): Don't pass truncate into ABS_EXPR.
+
+ * configure: Ignore -enable... and --enable... options.
+
+Wed Jul 28 20:15:05 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (compare): Add ./ in tail command.
+
+Wed Jul 28 15:36:11 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * integrate.c (copy_rtx_and_substitute, case LABEL_REF): If
+ we turn off LABEL_REF_NONLOCAL_P, increment function_call_count.
+
+ * integrate.c (copy_for_inline, case LABEL_REF): Properly copy
+ LABEL_REF with LABEL_REF_NONLOCAL_P set.
+ Copy LABEL_OUTSIDE_LOOP_P flag.
+ (copy_rtx_and_substitute, case LABEL_REF): Likewise.
+ (copy_rtx_and_substitute, case CONST): Make recursive call for
+ a LABEL_REF in the constant pool.
+
+ * c-iterate.c (iterator_loop_{pro,epi}logue): Set TREE_SIDE_EFFECTS
+ on the MODIFY_EXPRs we make.
+ Pass const0_rtx as TARGET to expand_expr.
+ * cp-cvt.c (build_up_reference): Set TREE_SIDE_EFFECTS on MODIFY_EXPR.
+ * stmt.c (expand_return): Likewise.
+
+Wed Jul 28 12:17:39 1993 Michael Meissner (meissner@osf.org)
+
+ * i386/osfrose.h (SUBTARGET_OVERRIDE_OPTIONS): Use this instead of
+ OVERRIDE_OPTIONS.
+
+Wed Jul 28 13:45:13 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (expand_expr, case ADDR_EXPR): Treat CONCAT like REG.
+
+ * c-decl.c (start_function): Warn if volatile fn returns non-void.
+
+Wed Jul 28 13:22:15 1993 Jim Wilson (wilson@cygnus.com)
+
+ * c-parse.in (simple_if, if_prefix, stmt): Undo Jul 7 change.
+ (if_prefix): Store stmt_count in $$ not $1.
+ (stmt): Add comment explaining why empty-if warning is here.
+
+ * sparc.c (shift_operand): New function.
+ * sparc.md (ashlsi3, ashrsi3, lshrsi3): Use shift_operand.
+
+ * loop.c (strength_reduce): Don't ignore a giv that depends on a
+ reversed biv.
+
+ * mips/x-sysv (ALLOCA): Define.
+ * mips-5.h (STARTFILE_SPEC): Define.
+ * x-iris3: New file.
+ * configure (mips-sgi-*): Use x-iris3 instead of x-iris.
+ * Makefile.in (libgcc.a): Do `chmod +w *' between two ar commands.
+
+ * i960.h (INITIAL_FRAME_POINTER_OFFSET): Negate, and subtract 64
+ bytes.
+
+ * sched.c (schedule_block): Do not emit line number notes before
+ other notes.
+
+ * varasm.c (assemble_variable): flag_no_common applies only if
+ external linkage.
+
+ * calls.c (expand_call): For unaligned arguments on
+ BYTES_BIG_ENDIAN machines, correct bitfield offset calculations.
+ * expr.c (move_block_from_reg): New argument SIZE. If SIZE less
+ than word and BYTES_BIG_ENDIAN, shift block left to align it
+ before storing it to memory.
+ * expr.h (move_block_from_reg): Add new argument to prototype.
+ * function.c (assign_parms): Pass extra argument SIZE to
+ move_block_from_reg calls.
+ (locate_and_pad_parm): For !ARGS_GROW_DOWNWARD case, move downward
+ padding pad_below call after round_up call.
+ * mips.c (function_arg): Shift all structures less than 4 bytes,
+ not just those which are QImode or HImode.
+ * a29k.h, alpha.h, i960.c, m88k.c, pa.c, romp.h, rs6000.h:
+ Add new parameter to move_block_from_reg calls.
+
+Wed Jul 28 12:40:06 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * expmed.c (store_split_bitfield): Fix handling of bitfields that
+ cross word boundaries, can only handle a word at a time.
+ (extract_split_bitfield): Likewise.
+
+Wed Jul 28 06:44:50 1993 John Hassey (hassey@dg-rtp.dg.com)
+
+ * configure: Use m88k/x-sysv3 for m88k-*-sysv3.
+ * m88k/x-sysv3: New file, use gnu alloca.
+
+Tue Jul 27 13:53:06 1993 Per Bothner (bothner@wombat.gnu.ai.mit.edu)
+
+ * fixproto: Pass '-' to tr as the 1-character range '---'.
+ * cross-make: Define STMP_FIXPROTO to empty for cross.
+ * patch-header.c (read_scan_file): Minor re-write to avoid
+ obstack_copy0, since that uses the non-portable bcopy().
+ * Makefile.in (patch-header): Use $(HOST_OBSTACK).
+ * gen-protos.c (main): Disable obnoxious warning message.
+
+Tue Jul 27 16:42:44 1993 John F Carr (jfc@Athena.mit.edu)
+
+ * fold-const.c (optimize_bit_field_compare): Preserve volatility
+ of bitfield.
+
+Tue Jul 27 01:33:25 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (convert_for_assignment): Mismatch in signedness
+ of pointer targets should not inhibit warnings for const mismatch.
+
+ * function.c (assign_parms): Don't copy too much when extending
+ parm_reg_stack_loc.
+
+ * config/m88k/m88k.h (ASM_DECLARE_OBJECT_NAME): Don't make a .size
+ if the size is not known. Use DECL, not decl.
+ * config/svr4.h, config/i386/osfrose.h: Likewise.
+
+ * c-typeck.c (set_init_index): Add pedantic warning.
+ (set_init_label): Likewise.
+
+Tue Jul 27 14:22:48 1993 Frederic Pierresteguy (F.Pierresteguy@frcl.bull.fr)
+
+ * gstddef.h (_WCHAR_T_H): Test this and define this.
+
+ * configure (m68k-bull-sysv): Test for --stabs;
+ generate either native coff or dbx-in-coff debugging information.
+
+ * config/m68k/dpx2.h (CPP_PREDEFINES): added -D_POSIX_SOURCE
+ -D_XOPEN_SOURCE -D_BULL_SOURCE to the list.
+ (CPP_SPEC): removed ansi definition.
+ * config/m68k/dpx2g.h (DBX_DEBUGGING_INFO): Remove this to let gcc
+ deals with gas and coff.
+ * config/m68k/dpx2cdbx.h: New file for gas and dbx-in-coff.
+ * config/x-dpx2 (CLIB): removed -lc_s and added -lmalloc.
+ (X_CFLAGS): removed -D_SYSV and added -D_POSIX_SOURCE -D_XOPEN_SOURCE
+ -D_BULL_SOURCE to deal with the posix stuff.
+
+Mon Jul 26 17:42:22 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (digest_init): Add `static' to definition.
+
+ * combine.c (simplify_shift_const): Inhibit hacks based on
+ num_sign_bit_copies if shift_mode differs from the mode of varop.
+
+ * toplev.c (main): When -W sets warn_uninitialized, avoid later warning
+ if warn_uninitialized is not supported.
+
+Mon Jul 26 14:14:02 BST 1993 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * collect2.c (NAME__MAIN, SYMBOL__MAIN): Add default definitions.
+ (write_c_file, scan_prog_file [OBJECT_FORMAT_ROSE]):
+ Use macros instead of explicitly __main.
+
+ * function.c (expand_main_function): Likewise.
+
+ * libgcc2.c (__main): Use macro SYMBOL__MAIN instead of invoking
+ directly.
+
+Mon Jul 26 16:03:33 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (fold, case EQ_EXPR): Remove code that converts
+ mod to unsigned mod; it isn't correct for negative operands.
+
+ * toplev.c (strip_off_ending): Allow .ad* for Ada.
+
+Mon Jul 26 14:06:04 1993 Bill Cox (bill@majipoor.cygnus.com)
+
+ * c-decl.c (print_lang_decl, print_lang_type): Correct function
+ headers to match prototype, and calls.
+
+Sun Jul 25 17:01:34 1993 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * fixproto: New script to add prototypes and otherwise clean up
+ system include files (especially for C++ and also gcc -Wimplicit).
+ * scan-decl.c: New program used by fixproto to analyze header
+ files (it extracts declarations from cpp output).
+ * patch-header.c: New program used by fixproto to analyze and
+ patch header files.
+ * scan.c: New file. Routines used by scan-decls and
+ patch-header.
+ * scan.h: New file. Common declarations.
+ * gen-protos.c: New file. Massages a list of prototypes.
+ * Makefile.in: Add fixproto support.
+ * populate: Deleted. Superseded by fixproto.
+
+Sun Jul 25 03:56:18 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (start_init): Fill in p->next.
+
+ * config/i386/i386.md (movstrictqi): Change q<-g alternative to q<-m.
+
+Sat Jul 24 18:17:55 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (emit_move_insn_1): For complex stack push,
+ don't use change_address.
+
+Sat Jul 24 15:05:50 1993 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * fixincludes (unistd.h): Generalize AIX fix (for using
+ C++ keyword new) to unistd.h as well as stdio.h.
+ * fixincludes (sys/wait.h): Fix NeXT problem with
+ a 'wait(union wait*)' prototype that breaks Posix.1.
+ * fixincludes (math.h): For C++, patch AIX's use of
+ 'class' as function name.
+
+Sat Jul 24 02:48:31 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * function.c (put_reg_into_stack): New subroutine.
+ (put_var_into_stack): Use that; handle CONCAT.
+
+ * varasm.c (assemble_variable): For array whose size comes from
+ the initializer, determine proper alignment here.
+ (assemble_align): New function.
+
+ * c-typeck.c: Handle gaps in record initializers.
+ (constructor_bit_index): New variable.
+ (constructor_stack): New field bit_index.
+ (really_start_incremental_init, push_init_level): Save and init it.
+ (pop_init_level): Restore it.
+ (output_init_element): Update constructor_bit_index.
+ Use it to output gaps.
+ (pop_init_level): Speed up by using constructor_bit_index.
+
+ * c-typeck.c (process_init_element): Accept STRING_CST for subarray.
+
+ * loop.c (mark_loop_jump): Handle weird cases like jumping to
+ a symbol_ref.
+
+Fri Jul 23 15:55:14 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * c-tree.h: Fix prototypes for print_lang_decl, print_lang_type.
+
+Fri Jul 23 15:06:05 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (start_init): Second arg is now a tree.
+
+Fri Jul 23 08:26:43 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ Cygnus<->FSF merge.
+ Thu Jul 22 09:54:05 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (push_overloaded_decl): Fix typo in warning msg.
+
+ Tue Jul 20 13:13:18 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-class.c (build_vtable, prepare_fresh_vtable): Make the vtables
+ readonly by default.
+
+ Mon Jul 19 13:16:58 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-tree.h (NEW_CLASS_SCOPING): Turn this off for now.
+
+ Mon Jul 19 11:04:51 1993 Jason Merrill (jason@rtl.cygnus.com)
+
+ * cp-class.c (build_vfn_ref): Rename `index' to `idx'.
+
+ Fri Jul 16 07:44:49 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-class.c (finish_struct): Check both if the type has a default
+ constructor, and if it has a non-const copy constructor, so we'll know
+ not to generate a const copy constructor for the type we're working on.
+ * cp-lex.c (cons_up_default_function): Add other front-end debugging
+ info.
+ (default_copy_constructor_body): And take it out of here.
+
+ * cp-expr.c (cplus_expand_expr): Add missing arguments to expand_expr.
+
+ Thu Jul 15 16:54:33 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-lex.c (default_copy_constructor_body): Also check to copy
+ anonymous unions, since they don't show up as FIELD_DECLs.
+ (largest_union_member): New function.
+
+ Thu Jul 15 16:23:18 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-expr.c (cplus_expand_expr): Use resolve_offset_ref to handle
+ OFFSET_REFs, as anything else would be wrong.
+
+ Thu Jul 15 13:23:40 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-tree.h (CLASSTYPE_INTERFACE_KNOWN,
+ SET_CLASSTYPE_INTERFACE_UNKNOWN_X, SET_CLASSTYPE_INTERFACE_UNKNOWN,
+ SET_CLASSTYPE_INTERFACE_KNOWN): New access methods.
+ * cp-class.c (import_export_vtable, duplicate_tag_error,
+ finish_struct): Use new access method.
+ * cp-decl.c: (grokfndecl, grokdeclarator, xref_tag): Ditto.
+ * cp-gc.c (build_t_desc): Ditto.
+ * cp-lex.c (set_vardecl_interface_info, make_lang_type): Ditto.
+ * cp-pt.c (end_template_instantiation, do_pending_expansions):
+ Ditto.
+ * cp-search.c (dfs_debug_mark): Ditto.
+
+ * cp-decl.c (grok_reference_init): Reword error message.
+
+ Wed Jul 14 09:17:18 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-cvt.c (convert_to_reference): Adjust change of May 30th to
+ accept more things (and still handle ARM p308 properly). Disable
+ the old way, but leave it to be properly fixed later.
+
+ Tue Jul 13 22:43:38 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (get_binfo_from_vfield): New function.
+ * cp-decl.c (finish_function): Use get_binfo_from_vfield to get the
+ binfo used to find the vtable for this vfields. Corrects problem
+ with vtable pointers being wrong during called member functions,
+ called from destructors.
+
+ Tue Jul 13 11:52:37 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Don't pedwarn about a duplicate long
+ for `long long', until we figure out how we really want to handle it.
+
+ Sat Jul 10 14:54:36 1993 Chip Salzenberg (chip@fin.uucp)
+
+ * cp-tree.h (warn_redundant_decls, warn_missing_braces): Declared.
+ * cp-decl.c (warn_redundant_decls): Not declared here.
+ * cp-decl2.c (warn_missing_braces): Defined.
+ (lang_decode_option): Handle -Wmissing-braces.
+ * cp-type2.c (process_init_constructor): Test warn_missing_braces.
+
+ * cp-typeck.c (build_binary_op_nodefault): Make warning
+ message distinguish between right/left and shift/rotate.
+
+ * cp-decl.c (init_decl_processing): When making SIZETYPE,
+ start with name in SIZE_TYPE. If -traditional, use a signed
+ version of that type, if it is unsigned.
+
+ * cp-typeck.c (c_sizeof, build_c_cast): Set TREE_OVERFLOW in
+ addition to TREE_CONSTANT_OVERFLOW.
+
+ * cp-decl.c (finish_enum): Store layout results into variant types.
+
+ * cp-typeck.c (internal_build_compound_expr): When pedantic, don't
+ simplify a COMPOUND_EXPR, so that it won't be mistaken for an
+ lvalue or an integer constant expression.
+
+ * cp-parse.y (program): After extdefs, pop any unpopped binding lvls.
+
+ * cp-decl.c (grokdeclarator, ARRAY_REF case): Build array type,
+ and then build the variant array type.
+
+ * cp-lex.c (real_yylex): Avoid invalid shift for erroneous empty
+ char const.
+
+ * cp-decl.c (complete_array_type): Make maxindex -1 for empty
+ constructor.
+
+ * cp-type2.c (initializer_constant_valid_p): Allow cast of ptr to
+ wider integer.
+
+ * cp-decl.c (pushdecl): Copy DECL_FRAME_SIZE for inline function decls.
+
+ * cp-decl.c (finish_decl): Do not allocate static var of
+ unknown size.
+ (complete_array_type): Use 0 as default maxindex.
+
+Fri Jul 23 07:18:20 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (aggregate_value_p): An ARRAY_TYPE is also an aggregate.
+
+Fri Jul 23 01:54:28 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * gcc.c (main): Improve "No input files" error message.
+
+Thu Jul 22 23:00:11 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * reorg.c (relax_delay_slots): Do not redirect a jump if doing so
+ invalidates insns in the jump's delay slots.
+ (redirect_with_delay_slots_safe_p): New function.
+
+Thu Jul 22 18:01:29 1993 John Hassey (hassey@dg-rtp.dg.com)
+
+ * invoke.texi, m88k.h, m88k.c: Changed serialize-volatile
+ to use tb1 instead of fldcr, fldcr has problems on 88110.
+ Made serialize-volatile the default behavior for all models.
+
+Thu Jul 22 11:19:28 PDT 1993 Ron Guilmette (rfg@netcom.com)
+
+ * fixinc.svr4 (making LIB absolute): Just concat with $ORIG_DIR.
+
+ * configure: Use `sed' rather than `cat' to put `MAYBE_TARGET_DEFAULT'
+ definition in. (This is a work-around for an NFS bug.)
+
+Thu Jul 22 14:59:38 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c: Output most constructors an element at a time.
+ (digest_init): Deleted code for raw constructors.
+ (process_init_constructor): Function deleted.
+ (start_init, finish_init): New functions.
+ (really_start_incremental_init)
+ (push_init_level, check_init_type_bitfields, pop_init_level)
+ (set_init_index, set_init_label, process_init_element)
+ (output_init_element, output_pending_init_elements): New functions.
+ * c-tree.h: Declare most of those functions.
+
+ * c-parse.in (cast_expr): Use new initializer parsing functions.
+ (initdcl, notype_initdcl): Likewise.
+ (init): Likewise.
+ (initlist_maybe_comma, initlist1): These replace initlist.
+ (initelt): New nonterminal.
+ Change specified index syntax to `[INDEX]='.
+ Change specified field syntax to `.NAME='.
+
+ * varasm.c (output_constant_def_contents): New function.
+ (output_constant_def): Use it.
+ (deferred_constants): New list of constants not yet output.
+ (defer_addressed_constants): New function.
+ (output_deferred_addressed_constants): New function.
+ (make_decl_rtl): Don't ever replace old rtl;
+ instead, change its mode if necessary.
+
+Wed Jul 21 15:50:19 1993 Jim Wilson (wilson@cygnus.com)
+
+ * expr.c (expand_expr, COMPONENT_REF case): For unaligned object
+ in an aligned union, set MEM_IN_STRUCT_P if create a MEM rtx.
+
+ * sparc.c (output_move_double): Only set highest_first if first reg
+ of dest overlaps memory src address. Otherwise, if addreg1 set and
+ is same as second reg of dest, suppress trailing decrement.
+
+ * sparc.md (movdi+1): Delete & from r/i constraint.
+
+ From rfg@netcom.com:
+ * fixinc.svr4 (<ftw.h>): Don't apply specialized fixes to <ftw.h>
+ if we are on Solaris. They are not needed in that case.
+
+ * combine.c (nonlocal_label_list): New variable.
+ (combine_instructions): Set it.
+ (try_combine, distribute_links): CALL_INSN terminates a basic
+ block if nonlocal_label_list is set.
+
+ * config/mips/{bsd-4.h, bsd-5.h, iris3.h, mips.h, news4.h,
+ news5.h, nws3250v4.h, osfrose.h, svr3-4.h, svr3-5.h, svr4-4.h,
+ svr4-5.h, ultrix.h} (CPP_SPEC): Define LANGUAGE_ASSEMBLY, not
+ LANGUAGE_C, when compiling a .s file.
+
+ * m68k.h (TARGET_SWITCHES): Recognize -m68851, -mno-68851,
+ -m68302, -mno-68302, -m68332, -mno-68332.
+
+ * lynx.h, i386/lynx.h, m68k/lynx.h, sparc/lynx.h: New files.
+ * i386.h (OVERRIDE_OPTIONS, SUBTARGET_OVERRIDE_OPTIONS): Define.
+ * m68k.h (TARGET_SWITCHES): Add SUBTARGET_SWITCHES.
+ (OVERRIDE_OPTIONS): Add SUBTARGET_OVERRIDE_OPTIONS.
+ (SUBTARGET_SWITCHES, SUBTARGET_OVERRIDE_OPTIONS): Define.
+ * sparc.h (TARGET_SWITCHES): Add SUBTARGET_SWITCHES.
+ (OVERRIDE_OPTIONS): Add SUBTARGET_OVERRIDE_OPTIONS.
+ (SUBTARGET_SWITCHES, SUBTARGET_OVERRIDE_OPTIONS): Define.
+
+ * fixincludes (sys/types.h sys/stdtypes.h): Delete newline before
+ do.
+ (machine/cpu.h): Delete space in `2>& 1'.
+
+ * config.sub (lynx): Recognize as vendor.
+ (lynxos): Recognize as OS.
+ * configure (i386-*-lynxos, sparc-*-lynxos, m68k-*-lynxos):
+ Recognize as new configurations.
+
+ * gcc.c (link_command_spec): Move %{T*} after %{L*} and %D.
+
+ * optabs.c (expand_binop): Synthesize double word shifts and
+ rotates from single word shifts.
+ * sparc.md (ashldi3, lshrdi3): Obsolete, deleted.
+
+Wed Jul 21 15:55:18 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixinc.svr4: When fixing ftw.h, preserve remainder of
+ ftw and nftw declaration; don't just rewrite it.
+
+Tue Jul 20 23:35:36 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * collect2.c (is_ctor_dtor): Delete leading _'s from sym names
+ in `special' table, in neither-dots-nor-dollars case.
+
+Tue Jul 20 18:49:09 1993 Michael Meissner (meissner@osf.org)
+
+ * i386/osfrose.h, i386/osfelf.h (CC1_SPEC): Don't turn on
+ -mhalf-pic if ELF.
+
+ * i386/osfrose.h (ASM_FILE_END): Put filename, sans directory into
+ the .ident string.
+
+Tue Jul 20 15:07:06 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c: Add prototypes for static functions.
+ (subst, case IF_THEN_ELSE): Add missing arg to make_compound_operation.
+ (make_compound_operation, case ASHIFTRT): Delete extra gen_unary arg.
+
+Mon Jul 19 18:15:48 1993 John F Carr (jfc@Athena.mit.edu)
+
+ * rs6000.c (current_file_function_operand): New function.
+ * rs6000.h (ENCODE_SECTION_INFO): New macro.
+ (PREDICATE_CODES): Add current_file_function_operand.
+ * rs6000.md: Add variants of call and call_value patterns for
+ calls to functions defined in the same file. Omit the TOC pointer
+ reload after such calls.
+
+Mon Jul 19 13:17:52 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * reorg.c (fill_simple_delay_slots): Try filling any insn needing
+ delay slots with a JUMP_INSN.
+
+Mon Jul 19 00:33:24 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * varasm.c (assemble_variable): New arg DONT_OUTPUT_DATA.
+ * toplev.c (rest_of_decl_compilation): Pass 0 as DONT_OUTPUT_DATA.
+
+Sun Jul 18 15:38:04 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (c_expand_return): Set TREE_SIDE_EFFECTS
+ for the MODIFY_EXPR that we make.
+
+ * stmt.c (expand_return): When expanding assignment into DECL_RESULT,
+ ignore the "value"--do it for effect.
+
+ * fold-const.c (fold): Handle CONJ_EXPR.
+ * c-typeck.c (build_unary_op): Support CONJ_EXPR.
+ Change BIT_NOT_EXPR to CONJ_EXPR if arg is complex.
+
+Sun Jul 18 14:22:05 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (init_function_start): Initialize trampoline_list here.
+ (expand_function_end): Not here.
+
+Sun Jul 18 01:24:54 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-typeck.c (common_type): Use TYPE_MAIN_VARIANT when preferring
+ long int to int (when width is the same).
+
+ * varasm.c (assemble_variable): Move debugging output calls
+ to after section has been selected. Select the section again
+ if the debugging output call changes the section.
+ * dbxout.c (dbxout_symbol_location): Call in_text_section
+ to decide whether to use DBX_STATIC_CONST_VAR_CODE.
+
+ * objc-act.c (synth_module_prologue): Call layout_type for the array
+ type used for _OBJC_SELECTOR_TABLE.
+
+Sat Jul 17 00:41:52 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (expand_increment): Convert constant subtract to add
+ before setting single_insn. Compensate for this when choosing
+ the tree code to pass to `build'.
+
+ * toplev.c (rest_of_compilation): If function is extern inline,
+ even if we can't inline it, don't compile it.
+
+Fri Jul 16 21:33:50 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * dwarfout.c (dwarfout_init): Report failure of getpwd.
+
+Fri Jul 16 15:59:07 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * config/m68k/hp320.h (LINK_LIBGCC_SPECIAL, SPACE_AFTER_L_OPTION)
+ (LIB_SPEC): Move outside of USE_GAS conditional.
+
+Fri Jul 16 14:26:25 1993 David d `zoo' Zuhn (zoo@cygnus.com)
+
+ * config.sub: if [ "$os" ] --> if [ x"$os" != x"" ]
+
+Fri Jul 16 05:50:35 1993 Paul Eggert (eggert@twinsun.com)
+
+ * c-typeck.c (check_format): With -Wformat, warn about
+ printf("%ld", 1) even if sizeof (int) == sizeof (long),
+ since the code isn't portable. Similarly for "%d" vs 1L.
+
+ * c-typeck.c (convert_arguments) [PROMOTE_PROTOTYPES]:
+ With -Wconversion, use unpromoted type to check for signedness changes.
+
+Thu Jul 15 13:04:48 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes (stdlib.h): Check carefully for definition of size_t.
+
+Wed Jul 14 19:05:51 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes: Fix size_t definition in stdlib.h as in types.h.
+ Also a conditional to prevent repeated definition.
+
+Wed Jul 14 14:53:26 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Don't discard comment end characters on lines that
+ look like "#endif */". Fixes Esix 4.0.4 problem.
+
+Wed Jul 14 12:20:13 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.c (emit_move_sequence): Use cint_ok_for_move instead of
+ checking each condition ourselves.
+
+ * pa-utahmach.h (CPP_PREDEFINES): Do not define HPUX_SOURCE, hp700
+ or HP700.
+ * pa1-utahmach.h (CPP_PREDEFINES): Do not define hp9000s800,
+ hp9k8, HPUX_SOURCE, or hp800.
+
+ * Allow unconditional jumps in delay slots of call and millicode
+ call instructions.
+ * pa.h (TARGET_JUMP_IN_DELAY): New target flag to allow/disallow
+ jump instructions in call delay slots.
+ (TARGET_SWITCHES): Add -mjump-in-delay and -mno-jump-in-delay.
+ Provide -mno alternatives for most options.
+ (output_call): Declare.
+ * pa.c (output_call): New function to output a function call or
+ millicode call, possibly with a jump in the delay slot.
+ (output_mul_insn): Accept additional argument, use output_call.
+ (output_div_insn): Likewise.
+ (output_mod_insn): Likewise.
+ (jump_in_call_delay): New function to determine if the given
+ JUMP_INSN is in the delay slot of a call or millicode call.
+ * pa.md (uncond_branch): New type attribute. Explicitly disallow
+ uncond_branch in most delay slots.
+ (in_call_delay attribute): New test for delay slot of call insns.
+ Allow uncond_branches in the delay slot if TARGET_JUMP_IN_DELAY.
+ (define_delay for calls, millicode calls, branches, returns, etc):
+ Broken up into two define delays. One for calls and millicode
+ calls, a second for branches, returns, etc.
+ (millicode insns): Pass the current insn down to
+ output_{mul,div,mod}_insn.
+ (jump insn): Use "uncond_branch" type attribute. Length of this
+ insn varies if it is in the delay slot of a call.
+ (call_internal_symref): Use output_call.
+ (call_value_internal_symref): Likewise.
+ (call_internal_reg): Use %r syntax instead of just register numbers.
+ (call_value_internal_reg): Likewise.
+
+Wed Jul 14 02:19:11 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * rtl.def (CONCAT): New rtx code.
+ * emit-rtl.c (gen_lowpart_common, gen_highpart): Handle CONCAT.
+ (operand_subword): Likewise.
+ (gen_reg_rtx): For complex mode, return a CONCAT of two pseudos.
+ * stmt.c (expand_decl): Make a CONCAT, for decls of complex type.
+ * dbxout.c (dbxout_symbol_location): Subroutine broken out from
+ dbxout_symbol. Handle CONCAT here.
+ (dbxout_symbol_name): New subroutine. Handle anonymous decls too.
+ (dbxout_reg_parms): Simplify using dbxout_symbol_location.
+ Handle CONCAT.
+
+ * c-typeck.c (build_c_cast): When casting to union, if value is array
+ or function, do default_conversion.
+
+Wed Jul 14 00:52:23 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu)
+
+ * config.sub: Add case for Bull dpx/2.
+
+Mon Jul 12 17:26:53 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes: When looking for #define CTRL,
+ accept multiple spaces between the two words.
+
+ * reload1.c (reload): Don't free scratch_list or scratch_block if 0.
+
+Mon Jul 12 17:12:31 1993 Paul Eggert (eggert@twinsun.com)
+
+ * c-common.c (unsigned_conversion_warning): Just use `warning',
+ not `pedwarn'; these diagnostics are not required by Standard C.
+ * c-typeck.c (convert_for_assignment): Use `convert_and_check',
+ not `convert', for converting arithmetic types, since
+ `convert_and_check' no longer reports an error
+ where it should just warn.
+
+Mon Jul 12 16:44:37 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/i386/i386.md (ffssi2, ffshi2): Assume bsf produces
+ garbage if input is 0. Use jumps to load output in that case.
+
+ * config/vax/vax.h (INITIALIZE_TRAMPOLINE): Add code to
+ do an rei to clear the insn cache.
+
+Sun Jul 11 18:13:47 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/ns32k/ns32k.c (output_move_double): Do the low reg first,
+ when only the high reg has an overlap.
+
+ * c-typeck.c (convert_arguments): Don't warn about sign change
+ for an INTEGER_CST inside NOP_EXPR, if value not fits new type.
+ Delete the code to check for VAL having enumeration type.
+
+ * i860.c (output_move_double): Fix typos in Jun 28 change.
+
+Sat Jul 10 16:05:26 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * i860.c (output_move_double): Only set highest_first if first reg
+ of dest overlaps memory src address. Otherwise, if addreg1 set and
+ is same as second reg of dest, suppress trailing decrement.
+
+Sat Jul 10 19:49:31 1993 Jeffrey A. Law (law@mole.gnu.ai.mit.edu)
+
+ * jump.c (jump_optimize): Correctly identify branches to the end
+ of a function so that they may be turned into RETURN insns.
+
+Sat Jul 10 17:37:12 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * collect2.c (main): Allocate COLLECT_NAME string with xmalloc.
+
+Sat Jul 10 14:44:29 1992 Chip Salzenberg (chip@fin.uucp)
+
+ * basic-block.h (REGSET_ELT_TYPE): Make unsigned to avoid
+ signed arithmetic overflow.
+ * hard-reg-set.h (HARD_REG_ELT_TYPE): New unsigned type to
+ avoid signed arithmetic overflow.
+ (HARD_REG_SET): Define as HARD_REG_ELT_TYPE, or array thereof.
+ (HARD_CONST): Always cast to HARD_REG_ELT_TYPE.
+ (*_HARD_REG_*): Use unsigned HARD_CONST and HARD_REG_ELT_TYPE
+ types instead of assuming HOST_WIDE_INT.
+
+Sat Jul 10 10:25:16 1993 Karl Berry (karl@cs.umb.edu)
+
+ * fixincludes: Check for symlinks being available in /tmp.
+
+Sat Jul 10 02:01:08 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/m68k/3b1.h (MY_ISCOFF, OBJECT_FORMAT_COFF, NO_SYS_SIGLIST):
+ New definitions.
+
+Fri Jul 9 20:40:29 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.md (dbra and movb patterns): Fix constraints so that FP
+ registers are never preferred.
+
+Fri Jul 9 17:36:35 1993 Holger Teutsch (holger@hotbso.rhein-main.de)
+
+ * va-clipper.h: Make var/stdargs compatible with apogee's acc.
+ (__gnuc_va_list): Replace __va_f and __va_r with __va_reg.
+ (__va_list, _SYS_INT_STDARG_H): New defines.
+ (va_arg): Corresponding changes.
+
+ * config/clipper/clipper.c (clipper_builtin_saveregs) : Dito.
+
+Fri Jul 9 13:39:08 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ Cygnus<->FSF merge.
+ Fri Jul 9 12:17:20 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-typeck.c (build_array_ref): Force the array to be allocated on
+ the stack if it is accessed by a out-of-bound constant integer
+ subscript.
+
+ * cp-decl.c (pushdecl): Undo change to generate a new _TYPE node for
+ a typedef.
+
+ Thu Jul 8 16:25:52 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (pushtag): Don't mark the binding layer marker; for
+ dwarf debugging, do mark the TYPE_DECL we created as ignored.
+
+ * cp-tree.h (IN_CHARGE_NAME): Define to not need DOLLAR_IN_LABEL.
+ (VTBL_PTR_TYPE): Likewise.
+ (VTABLE_DELTA_NAME, VTABLE_INDEX_NAME, VTABLE_PFN_NAME,
+ VTABLE_DELTA2_NAME): Use two leading underscores.
+
+ Thu Jul 8 14:31:40 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-tree.h (TREE_ANON_UNION_ELEM): Deleted, it's never set.
+ * cp-decl.c (build_default_constructor): Delete checking
+ TREE_ANON_UNION_ELEM.
+ * cp-init.c (emit_base_init): Likewise.
+ * cp-type2.c (my_friendly_abort): Update count.
+
+ * cp-type2.c (build_functional_cast): Disable assert 323 (see
+ comments for explanation).
+
+ * cp-typeck.c (comp_target_parms): Return 0 if strict is != 0, not
+ just > 0.
+
+ * cp-decl.c (init_decl_processing): Don't set WARN_RETURN_TYPE.
+
+ Wed Jul 7 18:36:59 1993 Niklas Hallqvist (niklas@della.appli.se)
+
+ Add the changes to redo how we handle scoping. [Merged by bpk.]
+
+ * cp-class.c ({pop,push}_nested_class): New functions to use
+ instead of plain {push,pop}class. These functions will see to
+ that static entities of enclosing classes will be visible.
+ * cp-tree.h ({pop,push}_nested_class): Declare them.
+ * cp-decl.h ({finish,start}_function): Use these new functions
+ instead of plain {push,pop}class calls.
+ (grokdeclarator): Ditto.
+ * cp-decl2.c (build_push_scope): Ditto.
+ * cp-class.c (popclass): Only call pop_class_decls if MODIFY is
+ set.
+
+ * cp-decl.c (start_decl): Maybe call pushdecl_class_level instead of
+ pushdecl. This is used for nested types.
+ (grokdeclarator): Remove the {push,pop}level calls around the
+ indirect recursion occuring when groking class-local typedefs.
+ Remove the error check of such typedefs hiding other fields in the
+ same scope. Remove the pushdecl_class_level call since start_decl
+ does the work now.
+
+ Class scoping (and type value caching) redone. The new behaviour
+ is triggered by NEW_CLASS_SCOPING being defined to 1. The old
+ behavior is accomplished by defining it to the value 0. The entries
+ below describes the effective changes when NEW_CLASS_SCOPING is set
+ to non-zero.
+
+ * cp-class.c (set_class_shadows): Add prototype.
+ (previous_class_values): New variable.
+ (pushclass): Adapted to not use previous_class_type & unuse_fields.
+ Removed setting of IDENTIFIER_CLASS_VALUE.
+ (popclass): Adapted to not use previous_class_type. Don't reset
+ IDENTIFIER_CLASS_VALUE. Moved call of pop_class_decls.
+ (maybe_push_cache_obstack): New function.
+ * cp-decl.c (current_class_depth): Add extern decl.
+ (previous_class_values): Add extern decl.
+ (pop_decl_level): Don't reset IDENTIFIER_CLASS_VALUE.
+ (set_class_shadows): New function.
+ (poplevel_class): Adjust setting of IDENTIFIER_CLASS_VALUE to only
+ happen if we're not leaving a toplevel class.
+ (push_to_top_level): Don't use adjust_type_value.
+ (set_identifier_type_value): Reverse the choice between class and
+ local scope when installing the type value.
+ (set_identifier_local_value): Set the type value if we're seeing a
+ TYPE_DECL.
+ (set_nested_typename): Added comment.
+ (pushtag): Don't call set_identifier_type_value. Leave out
+ setting of IDENTIFIER_CLASS_VALUE.
+ (adjust_type_value): Removed.
+ (pushdecl): Don't call adjust_type_value.
+ (pushdecl_class_level): Call push_class_level_binding. Set the
+ type value if we're seeing a TYPE_DECL.
+ (push_class_level_binding): New function whose guts came from
+ pushdecl_class_level.
+ (globalize_nested_type): See to that both the class_shadowed and
+ type_shadowed lists in the binding stack gets updated correctly.
+ Don't call set_identifier_type_value on the DECL_NESTED_TYPENAME.
+ Clear DECL_CLASS_CONTEXT as well as DECL_CONTEXT. Install a
+ correct IDENTIFIER_{CLASS,TYPE}_VALUE if needed.
+ (grokdeclarator): Prefer pushdecl_class_level over pushtag when
+ recording a nested typedef.
+ (build_enumerator): Don't install a method-local enumerator into
+ class scope.
+ * cp-decl2.c (grokfield): Don't call set_identifier_type_value.
+ * cp-search.c (closed_envelopes): New list containing information
+ of what decls should be pushed when entering a class scope.
+ (dfs_pushdecls): Build and maintain the closed_envelopes list
+ instead of managing the IDENTIFIER_CLASS_VALUEs directly.
+ (dfs_compress_decls): Adapted to recognize the envelopes
+ dfs_pushdecls has installed in the IDENTIFIER_CLASS_VALUE slots.
+ (push_class_decls): Tell overload_template_name to push the
+ template decls into class scope instead of building a new level.
+ Added code to open up the envelopes in closed_envelopes and
+ install the class/type values in the class binding contour with
+ proper shadowing.
+ (dfs_popdecls): Removed.
+ (pop_class_decls): Removed the actual decl-popping code, leaving
+ just the obstack freeing pop_search_level call. The popping is
+ automatically handled by poplevel now.
+ * cp-tree.h (NEW_CLASS_SCOPING): A new macro constant defaulted to
+ the value 1.
+ (adjust_type_value): Prototype removed.
+ (push_class_level_binding): Added prototype.
+
+ Wed Jul 7 11:04:09 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (pushdecl): When processing a typedef statement,
+ generate a whole new ..._TYPE node. Be careful that the type we're
+ looking at isn't an error_mark_node.
+
+ * cp-class.c (finish_struct): Set the DECL_CONTEXT on the type we've
+ found.
+ * cp-decl.c (pushtag): Mark the TYPE_DECL as ignored when using
+ dwarf debugging; don't ignore it if it's anonymous for dwarf
+ debugging. Put the DECL_CONTEXT in the TYPE_CONTEXT of TYPE.
+ (globalize_nested_type): Remember to set TYPE_CONTEXT.
+ * cp-pt.c (overload_template_name): Set DECL_CONTEXT.
+ * cp-search.c (compute_visibility): Set DECL_CONTEXT if the context
+ is NULL.
+
+ * cp-class.c (finish_struct): Mark the tag as ignored for dwarf
+ debugging.
+
+ * cp-except.c (EHS_type): Don't make it static.
+ * cp-class.c (finish_struct): Don't create a default copy
+ constructor for the EHS_type.
+
+ * cp-class.c (get_vtable_name): Leave the numbers in the name for
+ the vtable, so we're uniform with what prepare_fresh_vtable is
+ doing. Introduces a binary incompatability.
+
+ * cp-tree.c (build_cplus_method_type): Mark the first argtype (the
+ this pointer) as artificial.
+
+ * cp-init.c (do_friend): Don't allow a friend of a class that's not
+ yet been defined; instead, complain. Make sure we mark every decl
+ that comes in as being a friend of something.
+
+ * cp-decl2.c (grokclassfn): Mark the __in_chrg parameter as
+ artificial. Don't mark it as readonly, and for destructors make
+ sure the first arg in the arg_types chain has TREE_SIDE_EFFECTS set,
+ so it's seen as artificial.
+ (finish_vtable_vardecl): For dwarf debugging, make the vtable's
+ VAR_DECL node be ignored.
+
+ * cp-decl.c (redeclaration_error_message): Use comptypes to see if
+ OLDDECL and NEWDECL have the same type.
+ * cp-typeck.c (comptypes): Compare the main variants of the types,
+ after we've checked the qualifiers that could have been used on them.
+
+ * cp-call.c (EVIL_RETURN, QUAL_RETURN, TRIVIAL_RETURN, ZERO_RETURN):
+ Rewrite definitions to not use do/while(0), to avoid bogus warnings
+ on compilers that can't deal with a return inside it. Change all
+ uses of them to do `return FOO_RETURN'.
+
+ Tue Jul 6 13:00:44 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (duplicate_decls): Set GIVE_ERROR so we know where the
+ previous declaration was for empty parameter name list declarations.
+
+ * cp-class.c (finish_struct): Clean up error message about anonymous
+ classes.
+
+ * cp-class.c (finish_struct): Don't play with TAIL when we're
+ dealing with a TYPE_DECL of a RECORD_TYPE; the list continues on
+ just fine, and TAIL is only used for managing FN_FIELDS.
+
+ * cp-decl.c (pushlevel): Change cast to HOST_WIDE_INT.
+ * cp-search.c (breadth_first_search): Likewise.
+
+ Fri Jul 2 19:24:55 1993 Steve Chamberlain (sac@rtl.cygnus.com)
+
+ * cp-method.c: Include "cp-class.h"
+
+ Fri Jul 2 18:16:10 1993 Michael Tiemann (tiemann@blues.cygnus.com)
+
+ * cp-call.c (build_overload_call_real): Don't look at a required
+ template instantiation and a speculative template instantiation as
+ two different functions if they are really the same function.
+
+ Thu Jul 1 22:28:46 1993 Michael Tiemann (tiemann@blues.cygnus.com)
+
+ * cp-tree.h: Don't include "cp-class.h" here.
+ * cp-call.c, cp-cvt.c: Include it here instead.
+
+ Thu Jul 1 18:42:03 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (duplicate_decls): Fix typo. (olddecl->olddecls)
+
+ Thu Jul 1 18:34:12 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ New implementation of argument matching. This is now much cleaner
+ to read, and is designed such that it should be easy to tweak
+ things when incorrect decisions are made based on the candidates
+ being examined.
+
+ * cp-decl2.c (flag_ansi_overloading): New variable.
+ (lang_f_options): Add -fansi-overloading.
+ * toplev.c (lang_options): Add -fansi-overloading and
+ -fno-ansi-overloading.
+
+ * cp-class.h (harshness_code): New struct.
+ (candidate): New members `h' and `h_len' used by new method. New
+ anonymous union `v', with ansi_harshness and old_harshness.
+ Deleted member `harshness' (used by old method, now in `v').
+ Change every file that uses harshness to refer to it in the union
+ as appropriate.
+ (EVIL_CODE, CONST_CODE, ELLIPSIS_CODE, USER_CODE, STD_CODE,
+ PROMO_CODE, QUAL_CODE, TRIVIAL_CODE): New macros.
+
+ * cp-call.c (EVIL_RETURN, QUAL_RETURN, TRIVIAL_RETURN,
+ ZERO_RETURN): New macros.
+ (rank_for_overload): Renamed to rank_for_overload_old.
+ (rank_for_overload_ansi): New function for new method.
+ (rank_for_overload): Call the appropriate fn based on the new flag.
+ (rank_for_ideal): New function for new method.
+ (compute_harshness): Renamed to compute_harshness_old.
+ (compute_harshness_ansi): New function for new method.
+ (compute_conversion_costs): Renamed to compute_conversion_costs_old.
+ (compute_conversion_costs_ansi): New function for new method.
+ (compute_conversion_costs): Call the appropriate fn based on the
+ new flag.
+ (ideal_candidate): Renamed to ideal_candidate_old.
+ (ideal_candidate_ansi): New function for new method.
+ (ideal_candidate): Call the appropriate fn based on the new flag.
+ (strictly_better): New function for new method.
+ (build_method_call): Change things to use the new method if
+ -fansi-overloading is set.
+ (build_overload_call_real): Likewise.
+ * cp-cvt.c (convert_to_aggr): Likewise.
+
+ * cp-call.c (build_overload_call_real): Only use the speed hack
+ to trigger immediately if the OVERLOAD_NAME has a global value if we
+ aren't using the new overloading scheme.
+
+ * cp-cvt.c (build_type_conversion): Only accept using an `operator
+ double' if there isn't a conflicting `operator int', if
+ -fansi-overloading is on.
+
+ Thu Jul 1 17:54:44 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-decl.c (duplicate_decls): Propagate some changes from C
+ front-end. Conflicts with built-in functions are now only warnings.
+
+ Thu Jul 1 15:43:48 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-call.c (build_field_call): Use real type if type is a
+ REFERENCE_TYPE.
+ * cp-parse.y (primary): Cleanup and move some code out into new
+ function build_object_ref.
+ * cp-tree.h (build_object_ref): New function.
+ * cp-typeck.c (build_object_ref): Define new function.
+ * cp-typeck.c (build_x_function_call): Return error_mark_node if
+ first argument is, and handle when TREE_PURPOSE is a binfo and comes
+ from lookup_fnfields.
+
+ Thu Jul 1 13:48:46 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-lex.c (readescape): Don't complain for \% unless pedantic.
+
+ Wed Jun 30 10:35:50 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl2.c (bad_specifiers): Moved to cp-decl.c. New args
+ `inlinep' and `object' (old object renamed to type), so we can see
+ where the thing was declared. Use error_with_decl instead of error.
+ * cp-decl.c (grokdeclarator): Pass INLINEP and DECL down; move calls
+ so we'll have a valid DECL to give it.
+ * cp-tree.h (bad_specifiers): Deleted prototype.
+
+ * cp-call.c (build_scoped_method_call): If it's a reference, work
+ with the actual type.
+ * cp-type2.c (build_scoped_ref): Likewise.
+
+ Tue Jun 29 19:49:57 1993 Mike Stump (mrs@poseidon.cygnus.com)
+
+ * cp-lex.c (default_copy_constructor_body): Hack broken code to work
+ marginally better than how it worked before, so that PlotFile3D's
+ make check of libg++ works.
+
+ Tue Jun 29 12:44:48 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-typeck.c (mark_addressable): Don't complain about taking the
+ address of an object with register storage class; it's legal in C++.
+
+ * cp-typeck.c (convert_arguments): Only warn about passing an object
+ through an ellipsis.
+
+ * cp-parse.y (typed_declspecs): Make sure the TYPESPEC we hit
+ upon is non-null.
+
+ Tue Jun 29 11:58:03 1993 Tony Deigh (tonyd@bostech.com)
+
+ * cp-decl.c (grokdeclarator): Look at the decl as a FUNCTION_TYPE
+ before seeing if its TYPE_MAIN_VARIANT matches or it's a friend;
+ this way, we can properly detect declaration of another class's
+ methods inside another class. Solves chainon aborts.
+
+ Tue Jun 29 09:47:36 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-class.c (finish_struct): Use pedwarn_with_decl for warnings
+ about non-static const/ref in class without a ctor, so the line
+ number is helpful.
+
+ Tue Jun 29 02:46:39 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-cvt.c (build_up_reference): Delete unneed cast.
+ * cp-typeck.c (convert_for_assignment): Likewise.
+
+ Mon Jun 28 19:19:34 1993 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-lex.c (real_yylex): Use pedwarn to warn about using catch, try
+ and throw as identifiers.
+
+ Mon Jun 28 11:13:17 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-method.c (hack_identifier): Only look for visibility if we have
+ a basetype path.
+
+ * cp-decl.c (grokdeclarator): Also forbid the subscripting operator,
+ and class member access operator being declared as a non-member
+ function.
+
+ * cp-init.c (add_friend): Pedwarn on duplicate friend decls.
+
+ * cp-init.c (is_friend_type): New function.
+ (is_friend): Call it; rewrite in minor ways, to clean the code up.
+ * cp-tree.h (is_friend_type): Add prototype.
+ * cp-search.c (compute_visibility): Also check if the
+ CURRENT_CLASS_TYPE is a friend of CONTEXT, which can buy us access
+ to the field in question.
+
+ * cp-init.c (sort_member_init): Disable assert that was wrong.
+
+ * cp-class.c (finish_struct): Make declaration of a non-static const
+ or reference member get a pedwarn if the class it's in has no
+ constructor.
+
+ * cp-decl2.c (grokfield): Fix up the error message about member
+ initialization.
+
+ * cp-typeck.c (c_expand_return): Make sure we don't set
+ CURRENT_FUNCTION_RETURNS_VALUE if we set CURRENT_FUNCTION_RETURNS_NULL.
+
+ * cp-method.c (dump_init): Don't emit digit_buffer if we're giving
+ an enum's tag.
+
+Fri Jul 9 16:45:25 1993 David d `zoo' Zuhn (zoo@cygnus.com)
+
+ * config.sub: Make -solaris reflect the most recent major release.
+
+Fri Jul 9 16:18:20 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * Change length attributes to use bytes instead of instruction
+ counts.
+ * pa.h (CASE_VECTOR_MODE): Change to DImode.
+ * pa.c (compute_movstrsi_length): Return length in bytes.
+ (pa_adjust_insn_length): Return adjustment in bytes.
+ (output_cbranch): Handle lengths as bytes.
+ (output_bb, output_dbra, output_movb): Likewise.
+ * pa.md (default length define_attr): Lengths are in bytes now.
+ (asm_attributes): Likewise.
+ (delay slot attributes): Deal with lengths in bytes.
+ (explicit length computations): Compute length in bytes.
+
+ * Make more dbra insns and support movb insns.
+ * pa.h (output_dbra, output_movb): Declare.
+ * pa.md (dbra pattern): Use output_dbra.
+ (dbra pattern #2): New pattern. Also use output_dbra.
+ (movb, inverted movb): New patterns.
+ * pa.c (pa_adjust_insn_length): dbra and movb insns which have
+ their output in a FP register do not need adjustment.
+ (output_cbranch, output_bb): Handle conditional jump to the
+ following instruction.
+ (output_dbra): New function extracted from dbra pattern.
+ (output_movb): New function.
+ (eq_neq_comparison_operator): New function.
+ (movb_comparison_operator): New function.
+
+Fri Jul 9 01:07:52 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/m68k/mot3300.h (ASM_OUTPUT_OPCODE): Don't add .w suffix
+ to jump insns.
+
+ * combine.c, cse.c: Include stdio.h before rtl.h.
+
+Wed Jul 7 18:06:45 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ From moshier@world.std.com:
+ * sparc.c (singlemove_string): Convert SFmode by REAL_VALUE... macros.
+ * sparc.h (ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE):
+ Use REAL_VALUE_TO_DECIMAL to generate decimal string.
+ (REAL_ARITHMETIC): Define.
+
+ * sparc.h (SECONDARY_MEMORY_NEEDED_RTX): Use
+ STARTING_FRAME_OFFSET.
+ (STARTING_FRAME_OFFSET): Set to -16.
+
+ * c-parse.in (simple_if): Save stmt_count, and print empty body
+ warning here.
+ (if_prefix): Don't save stmt_count here.
+ (stmt): Don't print empty body warning here.
+
+ * combine.c (simplify_comparison): Add parentheses to satify gcc.
+ * sparc.c (sparc_frw_save_restore): Likewise.
+ * expr.c (convert_to_mode): Move misplaced parentheses.
+
+Wed Jul 7 16:37:26 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * Improve code for conditional branches and dbra insns on the PA.
+ * pa.c (pa_adjust_insn_length): Rewrite so that it only adjusts
+ insns which really need adjustment.
+ (output_cbranch): Rework so that output templates are simpler.
+ Use shorter sequence for long backwards conditional branches with
+ a filled delay slot that is nullified. More agressively use "skip"
+ instructions. More agressively nullify the delay slot if nothing
+ useful could be placed there.
+ (output_bb): Likewise.
+ (forward_branch_p): New function.
+ * pa.md (conditional branches): Use the full displacement range
+ for the branch target. Update length computations to match current
+ reality.
+ (branch on bit patterns): Likewise.
+ (decrement_and_branch_until_zero): Re-enable pattern. Rewrite to
+ be simpler and more efficient. Also handle case where loop counter
+ is in a FP register.
+
+Wed Jul 7 11:19:03 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * glimits.h (MB_LEN_MAX): Don't override the value from the system
+ <limits.h>. Just define it if it is not already defined.
+
+ * collect2.c (main): Search for ld in the compiler directories.
+
+Wed Jul 7 13:40:55 1993 Jim Wilson (wilson@kropotkin.gnu.ai.mit.edu)
+
+ * collect2.c (fork_execute, scan_prog_file): Use "fork" in error
+ messages instead of "vfork" when vfork is defined to fork.
+
+Tue Jul 6 16:38:36 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.c (sparc_type_code): Recognize SET_TYPE. For special
+ Fortran/Pascal types, just return qualifiers instead of aborting.
+
+ * c-decl.c (insert_block): Correct typo in comment.
+
+ * combine.c (simplify_and_const_int, LSHIFTRT case): Must be at
+ least as many sign bit copies as bits in mask.
+
+ * c-typeck.c (build_conditional_expr): All simplified results
+ must go through pedantic_non_lvalue.
+ * cp-typeck.c (build_conditional_expr): Likewise.
+ * fold-const.c (fold, COND_EXPR case): Likewise.
+ (pedantic_non_lvalue): New function.
+ * tree.h (pedantic_non_lvalue): Add declaration.
+
+ * fold-const.c (invert_truthvalue): Check for ERROR_MARK input.
+
+ * m68k.h (LEGITIMATE_BASE_REG_P): New macro.
+ (INDIRECTABLE_1_ADDRESS_P, GO_IF_INDEXABLE_BASE,
+ LEGITIMATE_INDEX_REG_P): Accept SUBREG everywhere REG is accepted.
+
+ * sparc.h (EXTRA_CONSTRAINT): For 'T', pass address not mem to
+ strict_memory_address_p call. For 'U', don't accept unallocated
+ pseudo-reg when strict.
+
+ * sparc.c (output_move_quad): Implement CNSTOP case.
+
+ * i960.h (ASM_OUTPUT_COMMON): Use SIZE not ROUNDED.
+
+Tue Jul 6 02:12:15 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cse.c (simplify_binary_operation, case MINUS): Fix backwards
+ test added in last change.
+
+ * config/i386/sun.h (SIZE_TYPE): Deleted.
+
+ * c-typeck.c (convert_arguments): Don't warn for -Wconversion
+ about signedness of an arg that's extended from narrower unsigned type.
+
+ * c-decl.c (duplicate_decls): Don't warn for non-extern var decl
+ following an extern one (for -Wredundant-decls).
+
+Mon Jul 5 17:50:27 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (emit_reload_insns): Don't use gen_lowpart_common to
+ get reload register into proper mode.
+ * reload.c (subst_reloads): Likewise.
+
+ * combine.c (subst, case PLUS): Simplify (plus (comp A B) -1), etc.
+
+ * fold-const.c (fold, case EQ_EXPR, LE_EXPR): If comparing results
+ of signed MOD with zero, use an unsigned MOD.
+
+ * calls.c: Fix typo: had ARGS_GROW_DOWNARD.
+
+ * configure (rs6000-ibm-aix): Use default files for aix3.2 and
+ aix31.h for aix3.[01]. Add new file x-aix31.
+ * rs6000.c (input_operand): Fix missing operand on a return.
+ (print_operand): Add new code '.'.
+ (rs6000_sa_size): Delete unused variable `i'.
+ (output_prolog, output_epilog): Use new RS6000_CROR_BIT_NUMBER.
+ * rs6000.h (CPP_PREDEFINES): Define _AIX32.
+ (ASM_DECLARE_FUNCTION_NAME, TEXT_SECTION_ASM_OP): Use ".text[PR]" as
+ csect name.
+ (RS6000_CROR_BIT_NUMBER): New macro.
+ (PRINT_OPERAND_PUNCT_VALID_P): Allow `.' as valid.
+ * rs6000.md (call patterns): Use %. in cror.
+ * x-rs6000 (CLIB): No longer need -lm.
+ * aix31.h, x-aix31.h: New files.
+ * aix32.h: Deleted.
+
+Mon Jul 5 17:44:09 1993 John F Carr (jfc@Athena.mit.edu)
+
+ * romp.md (movhi): When storing a constant in an HImode register, use
+ cal16 instead of cal so that the high bits are clear (combine
+ requires this).
+
+Mon Jul 5 17:15:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * objc-act.c (encode_type_qualifiers): Add casts to enums in indices.
+
+Mon Jul 5 02:25:54 1993 Doug Evans (dje@wookumz.gnu.ai.mit.edu)
+
+ * Makefile.in: Parameterize libgcc.a and install-libgcc
+ (LIBGCC and INSTALL_LIBGCC).
+
+ * tree.c (get_narrower): Preserve unsignedness when bitschange == 0.
+
+Sun Jul 4 02:55:46 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expmed.c (store_split_bit_field, extract_split_bit_field):
+ Handle fields split across more than 2 aligned units.
+
+ * expr.c (store_field): Test STRICT_ALIGNMENT at run time.
+ (expand_expr, COMPONENT_REF case): Fetch unaligned field as bitfield.
+
+ * collect2.c (error, fatal, fatal_perror): Say collect2, not collect.
+
+ * c-parse.in (primary): In statement expression case,
+ if compstmt returns something other than a BLOCK,
+ return it unchanged.
+
+Sat Jul 3 20:32:43 1993 Minh Tran-Le (tranle@intellicorp.com)
+
+ * fixinc.svr4: Added fixup for __STDC__ == 0 and __STDC__ == 1
+ cases found in sequent PTX-2.0.x headers.
+
+Sat Jul 3 18:54:07 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.c (call_operand_address): Do not accept registers anymore.
+ * pa.md (call expanders): Emit different patterns for named calls
+ and indirect calls.
+ (call_internal_symref, call_internal_reg): New patterns.
+ (call_internal): Deleted. Now handled by call_interal_{symref,reg}.
+ (call_value_internal_symref, call_value_internal_reg): New patterns.
+ (call_value_internal): Deleted. Now handled by
+ call_value_internal_{symref,reg).
+
+Sat Jul 3 16:40:52 1993 Doug Evans (dje@wookumz.gnu.ai.mit.edu)
+
+ * collect2.c (main): Give ld_file_name an initial value.
+
+Fri Jul 2 16:36:56 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu)
+
+ * sparc.md (ashldi3+2): Change lshift to ashift.
+
+ * sparc.md (zero_extendhisi2, extendhisi2, extendqihi2,
+ extendqisi2): Preserve the SUBREG_WORD value of subreg operands.
+ (ashldi3): Delete, obsoleted by lshldi3 pattern.
+ (lshldi3): Rename to ashldi3 for consistency with SImode shifts.
+
+Fri Jul 2 01:10:56 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile.in (install-headers-tar): Ignore exit status of the
+ first tar command.
+
+Thu Jul 1 14:31:45 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * flow.c (find_auto_inc): In *p=expr;q=p+size case, avoid clobbering q
+ if referenced in expr.
+
+Fri Jul 2 01:26:01 1993 Paul Eggert (eggert@twinsun.com)
+
+ * tree.h (pushcase, pushcase_range): Add a new converter
+ function argument that specifies how to convert case labels to the
+ nominal type.
+ * stmt.c (pushcase, pushcase_range): Likewise.
+ * c-parse.in (label): Use `convert_and_check' when checking for
+ overflow in case labels.
+ * cp-parse.y (simple-stmt): Similar change, but use `convert' instead;
+ this leaves the behavior unchanged for C++. A C++ expert should look
+ into this.
+
+ * tree.h (TREE_OVERFLOW): New macro.
+ * c-common.c (constant_expression_warning, overflow_warning,
+ convert_and_check): Distinguish between TREE_OVERFLOW, which is just
+ for warnings, and TREE_CONSTANT_OVERFLOW, which is for required
+ pedantic diagnostics.
+ * c-typeck.c (c_sizeof, build_c_cast): Set TREE_OVERFLOW in addition
+ to TREE_CONSTANT_OVERFLOW.
+ (store_init_value): STRIP_TYPE_NOPS is required before
+ constant_expression_warning.
+ * fold-const.c: (const_binop, fold_convert, fold):
+ Set TREE_OVERFLOW in addition to TREE_CONSTANT_OVERFLOW.
+
+Thu Jul 1 20:55:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * reload1.c (eliminate_regs): Fix typo in BYTE_LOADS_ZERO_EXTEND.
+
+Thu Jul 1 20:00:00 1993 DJ Delorie (dj@ctron.com)
+
+ * gcc.c (choose_temp_base): Try multiple variables. Don't
+ assume that the variable points to a valid directory.
+
+ * gcc.c (pexecute): Handle the MS-DOS return codes correctly.
+ Add .exe to file name when appropriate.
+
+ * configure.bat: Make gcc use its own obstack.o.
+
+ * objc/makefile.dos: New file for building with djgpp.
+
+Thu Jul 1 18:15:17 1993 Paul Eggert (eggert@twinsun.com)
+
+ * fixincludes, fixinc.svr4: Don't create absolute symbolic links;
+ make them relative instead.
+ * fixincludes: Remove special case for IRIX 4.0.1 that was
+ superseded by a more general fix to fixincludes.
+
+ * fixinc.svr4: Remove everything after #endif, instead of trying
+ to turn it into comments, which loses inside comments.
+ * fixincludes: Likewise. Remove #endif workarounds for Ultrix 4.[12]
+ and SunOS 4.1, which are no longer needed because of this bug fix.
+
+Thu Jul 1 14:56:56 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (OVERRIDE_OPTIONS): Define. Give a warning if -fpic or
+ -fPIC was specified on the command line.
+
+ * configure (hppa1.0-hp-hpux8.02): New target.
+ (hppa1.1-hp-hpux8.02): Accept "--gas" in this configuration.
+ * pa-oldas.h: New target for 1.0 machines running HPUX 8.02.
+ * pa.c (output_arg_descriptor): Reverse polarity of test for
+ HP_FP_ARG_DESCRIPTOR_REVERSED.
+ * pa.h (ASM_DOUBLE_ARG_DESCRIPTORS): Likewise.
+ * pa-hpux7.h (HP_FP_ARG_DESCRIPTOR_REVERSED): Define.
+ * pa1-oldas.h (HP_FP_ARG_DESCRIPTOR_REVERSED): Define.
+ (TARGET_DEFAULT): Clear useless bits in TARGET_DEFAULT.
+ * pa-utahmach.h (HP_FP_ARG_DESCRIPTOR_REVERSED): Do not define here.
+ * pa1-utahmach.h (HP_FP_ARG_DESCRIPTOR_REVERSED): Likewise.
+ * pa1-ghpux.h (HP_FP_ARG_DESCRIPTOR_REVERSED): Likewise.
+ * pa1-hpux.h (HP_FP_ARG_DESCRIPTOR_REVERSED): Likewise.
+
+Thu Jul 1 09:48:23 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (fold, case GE_EXPR, LT_EXPR): Don't assume
+ result of comparison is integer_type_node.
+
+Thu Jul 1 00:23:16 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * config/i386/mach.h (SIZE_TYPE): Definition deleted.
+
+Wed Jun 30 16:16:20 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/m68k/sun3.h (SIZE_TYPE): Definition deleted.
+
+Wed Jun 30 16:55:25 1993 John F Carr (jfc@Athena.mit.edu)
+
+ * mips.c (gen_int_relational): For test with constant result,
+ copy const0_rtx or const_true_rtx to result register instead
+ of allocating a new pseudo-register.
+
+Wed Jun 30 15:19:42 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * config.sub: Recognize `gnu' as a valid operating system. Sheesh.
+
+Wed Jun 30 13:43:45 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.c (output_function_prologue): Emit SAVE_SP flag if a frame
+ pointer is needed.
+
+Wed Jun 30 00:52:25 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * collect2.c (main): Don't look for `gld' or `TARGET-gld'.
+
+ * fixincludes (stdtypes.h): Verify that size_t etc. follow whitespace.
+
+ * expr.c (expand_expr, case PLUS_EXPR): In the special case
+ to return sym+integer as an expression, limit it to when
+ the non-CONST_INT arg is at least a constant.
+ (expand_increment): Do preinc with single insn if there's such an insn.
+
+ * stmt.c (expand_end_case): Pass 1 as UNSIGNEDP to emit_cmp_insn
+ when handling wide values.
+ Save original minval in orig_minval and use for making the table.
+
+Tue Jun 29 22:28:06 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.c (singlemove_string): Use zdepi and ldil to load constants
+ into registers when appropriate.
+
+Tue Jun 29 11:26:35 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config.sub: Recognize -sysv* after -sysvr4.
+
+ * config/vax/vax.h (GO_IF_NONINDEXED_ADDRESS): Declare reg_equiv_mem.
+
+Mon Jun 28 20:12:04 1993 Steve Chamberlain (sac@apple-gunkies.gnu.ai.mit.edu)
+
+ * config/sh/*: Major rework.
+
+Mon Jun 28 02:46:47 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * fixincludes (file): When changing VA_LIST to DUMMY_VA_LIST,
+ preserve _NEED___VA_LIST.
+
+ * config/ns32k/ns32k.c (output_move_double):
+ Handle reg[n,n+1] = mem[reg[n] + reg[n+1]].
+ * config/ns32k/ns32k.md (movdf, movdi): Delete `&' from constraint.
+
+ * config/sparc/sparc.c (output_move_double): Use new local var
+ highest_first to make sure addreg1 gets handled in the overlap case.
+ In 2-reg-overlap case, really use proper reg in new address.
+
+ * config/i860/i860.c (output_move_double):
+ Handle reg[n,n+1] = mem[reg[n] + reg[n+1]]. Use new local var
+ highest_first to make sure addreg1 gets handled in the overlap case.
+ * config/i860/i860.md (movdf, movdi): Delete `&' from load constraint.
+
+ * config/sparc/sol2.h (CPP_SPEC): For -compat-bsd, put the ucbinclude
+ dirs before, not after.
+
+ * expr.c (store_field): Store unaligned field with bit field methods.
+
+ * config/vax/vax.h (GO_IF_NONINDEXED_ADDRESS): If reload_in_progress,
+ check a REG's reg_equiv_mem the way we would check a MEM.
+
+ * reload.c (find_reloads_address): Be selective about what inner
+ addresses to allow in an indirect mem ref.
+
+Sun Jun 27 16:40:59 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * emit-rtl.c (copy_rtx_if_shared): Don't try to copy a 0-length vector.
+
+ * config/m68k/x-apollo68 (TAROUTOPTS): New definition.
+
+ * config.sub: Canonicalize -sco4 and -sco3.2.4 to -sco3.2v4.
+
+ * gcc.c (DEFAULT_WORD_SWITCH_TAKES_ARG): Check for -iwithprefixbefore.
+ (option_map): Add --include-with-prefix-before and
+ --include-with-prefix-after.
+
+Sun Jun 27 16:04:52 1993 Holger Teutsch (holger@hotbso.rhein-main.de)
+
+ * va-clipper.h: Use and define Macro __GNUC_VA_LIST. Define struct
+ __gnuc_va_list.
+
+Sun Jun 27 08:32:19 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * machmode.h (INTEGRAL_MODE_P, FLOAT_MODE_P): New macros.
+ * cse.c (simplify_*_operation, fold_rtx, record_jump_cond, cse_insn):
+ Use them.
+ * combine.c (subst, apply_distributive_law): Likewise.
+ (reversible_comparison_p): Likewise.
+ Can reverse if MODE_COMPLEX_INT or MODE_PARTIAL_INT.
+
+ * function.c (fixup_stack_1): Handle
+ current_function_internal_arg_pointer.
+
+ * stor-layout.c: Add prototypes for layout_record and layout_union.
+ (smallest_mode_for_size): New function.
+ (variable_size): Allow variable sizes if global_bindings_p returns a
+ negative value.
+ (mode_for_size): Fix incorrect comment.
+ (layout_decl): If DECL has a size already, don't copy from type.
+ (layout_type, case INTEGER_TYPE, ENUMERAL_TYPE): Use smallest
+ integer mode that fits, whether or not it fits exactly.
+
+ * emit-rtl.c (restore_emit_status): Clear LAST_LABEL_NUM.
+
+ * calls.c (expand_call): If function hasn't been used before,
+ call assemble_external.
+
+ * expr.c (store_constructor): Treat QUAL_UNION_TYPE just
+ like UNION_TYPE.
+ (safe_from_p, case ADDR_EXPR): EXP is safe from X it is is static or
+ if the object whose address is being taken is safe from X.
+ (expand_expr): Fix misplaced comment from last change.
+ (expand_expr, case *_DECL): If not already used, assemble external.
+ (expand_expr, case EXIT_EXPR): Simplify.
+ (expand_expr, TRUTH_{AND,OR}IF_EXPR): Properly handle IGNORE case.
+
+ * tree.c (array_type_nelts): Tighten up code and make more general.
+ (build_function_type): Allow function to return array.
+ (decl_function_context): Treat QUAL_UNION_TYPE like UNION_TYPE.
+
+ * fold-const.c (fold, case TRUTH_XOR_EXPR): End with `return',
+ not `break'.
+
+ * dwarfout.c (output_compile_unit_die): Add support for Ada.
+
+ * c-iterate.c (collect_iterators, case SAVE_EXPR): Simplify code
+ added in previous change.
+
+ * expr.c: Fix typo: was ARGS_GROW_DOWNARD.
+
+ * combine.c (subst, case IF_THEN_ELSE): Install correct version of
+ last change.
+
+Sat Jun 26 15:38:33 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * cccp.c (main): For -iwithprefix, if no include_prefix,
+ make a default from GCC_INCLUDE_DIR.
+ Support -iwithprefixbefore.
+
+ * reload.c (find_reloads): When merging reloads again after they have
+ been changed, do check reload_reg_class and reload_nocombine.
+
+ * config/sparc/sparc.md (movdf recognizer): Remove & from
+ constraint for loading mem to cpu reg.
+
+ * expr.c (expand_assignment): If FROM is scalar function call,
+ expand_expr FROM before TO.
+
+ * gcc.c (translate_options): `*' inhibits warning of extraneous arg.
+
+Sat Jun 26 11:07:23 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload): Use reg_equiv_address for invalid addresses
+ of the form (mem (reg)).
+
+ * config/*/xm-*.h: Remove line that #define's alloca
+ to __builtin_alloca.
+
+ * fold-const.c (fold, case PLUS_EXPR, MINUS_EXPR): Apply
+ distributive law to multiplication.
+ (fold, case *_DIV_EXPR): Replace code to handle (A*C1)/C2 with
+ more general code to handle addition as well.
+ (fold, case *_MOD_EXPR): Add simplified version of above code.
+
+ * integrate.c (function_cannot_inline_p): Can now inline nested
+ functions.
+ (expand_inline_function): Set up static chain if needed.
+ (output_inline_function): Don't switch to temporary allocation
+ here.
+ * toplev.c (compile_file): Switch to temporary allocation when
+ writing out inline function.
+ * cp-decl2.c (write_vtable_entries, finish_file): Likewise.
+ * c-decl.c, cp-decl.c (poplevel): Start new function context
+ when writing inline function.
+
+ * c-decl.c (init_decl_processing): When making SIZETYPE,
+ start with name in SIZE_TYPE. If -traditional, use a
+ signed version of that type, if it is unsigned.
+
+ * fold-const.c: Add prototypes for static functions.
+ ({l,r}{shift,rotate}_double): COUNT arg is HOST_WIDE_INT, PREC is int.
+ (all_ones_mask): Remove __inline__.
+ (range_test): Make static; not used elsewhere.
+ * tree.h: Add more decls for functions in fold-const.c.
+
+ * calls.c (expand_calls): Fix typo: ALLOCATE_OUTGOING_ARGS
+ should be ACCUMULATE_OUTGOING_ARGS.
+
+ * tree.def (TRUTH_{AND,OR,XOR}_EXPR): Make code class be 'e' like
+ the rest of the truth operations.
+ * fold-const.c (fold_truthop): Treat a BIT_AND_EXPR with a constant of
+ one as if it were surrounded with an NE_EXPR.
+ (fold): Don't move operation into conditional if it
+ is BIT_{AND,OR}_EXPR with the constant 1; change it to TRUTH_*_EXPR
+ instead.
+ When moving things inside conditions, move comparisons as well as
+ binary operations.
+ Don't make a SAVE_EXPR when moving things inside conditionals unless
+ the value would really have been used twice.
+
+ * expr.c (do_store_flag): When computing via a shift, allow for
+ an inner RSHIFT_EXPR in BITNUM.
+ Sometimes do the operations as signed.
+
+ * combine.c (subst): apply_distributive_law can also handle AND.
+ (subst, case IF_THEN_ELSE): Make a shift when appropriate.
+ (simplify_shift_const): If we have an outer operation and made
+ a shift, see if it can be simplified.
+
+Sat Jun 26 03:25:35 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * configure (i370-*-mvs*): New configuration.
+ * config/i370/i370.md, mvs370.c, tm-mvs.h, xm-mvs.h
+
+ * final.c, varasm.c: Include ctype.h.
+ * c-lex.c: Include ctype.h.
+ (isalnum, isdigit): Macros deleted.
+
+ * config/sparc/sparc.c (output_move_double): Handle
+ reg[n,n+1] = mem[reg[n] + reg[n+1]].
+ * config/sparc/sparc.md (movdi): Delete the earlyclobber in load case.
+
+Sat Jun 26 03:15:38 1993 Doug Evans (dje@wookumz.gnu.ai.mit.edu)
+
+ * gcc.c (option_map): Add missing comma.
+
+Sat Jun 26 02:17:28 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config/we32k/we32k.c: Clean up formatting.
+
+ * calls.c (calls_function_1): Add declaration.
+
+ * config/m68k/m68k.md (fix_truncdfsi2, fix_truncdfhi2, fix_truncdfqi2):
+ Require TARGET_68881 as well as TARGET_68040.
+
+Fri Jun 25 20:13:51 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * calls.c (calls_function): Don't scan a single save_expr twice.
+ (calls_function_1): New subroutine for the actual recursion.
+
+ * c-parse.in (all_iter_stmt_simple): Add missing `else'.
+
+Fri Jun 25 15:53:59 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ Cygnus<->FSF merge.
+ Fri Jun 25 10:00:34 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c: Delete some #if 0'd code that has been there forever.
+
+ * cp-type2.c (my_friendly_abort): Update count of aborts (added by
+ emit_base_init rewrite).
+
+ Make default copy constructors work properly.
+ * cp-lex.c (cons_up_default_function): Mark the generated ctor with
+ RID_INLINE, so it won't get emitted unless it's needed.
+ * cp-decl.c (grok_ctor_properties): If CTYPE has virtual base
+ classes, make sure we don't pay attention to the int that we
+ magically added to the ctor decl.
+ * cp-ptree.c (print_lang_type): Note a const copy ctor vs a normal
+ copy ctor. Say if TYPE_HAS_DEFAULT_CONSTRUCTOR.
+ * cp-tree.h (cons_up_default_function): Modify prototype.
+ * cp-class.c (finish_struct): Also check TYPE_HAS_CONSTRUCTOR, so
+ we don't generate a default ctor if they already declared one
+ (taking whatever arg types).
+
+ Wed Feb 3 17:41:02 1993 Chip Salzenberg (chip@tct.com)
+
+ * cp-class.c (needs_const_ctor): Eliminate as meaningless.
+ (finish_struct) Always generate default functions.
+ Generate exactly one copy constructor: either "X(X&)" or
+ "X(const X&)", but not both.
+ * cp-lex.c (cons_up_default_function): Take list of fields
+ as a new parameter. Use default_copy_constructor_body.
+ Set TREE_PUBLIC and DECL_EXTERNAL correctly for usage with
+ #pragma interface.
+ (default_copy_constructor_body): New function (uses obstacks).
+
+ Thu Jun 24 12:41:16 1993 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-call.c (build_scoped_method_call, build_method_call): Remove
+ maybe_adjust argument to build_delete as it is unneeded and remove all
+ support for the magic cookie key in the area just before the data
+ allocated by new [].
+ * cp-decl.c (finish_function, maybe_build_cleanup,
+ push_exception_cleanup): Likewise.
+ * cp-decl2.c (delete_sanity, finish_file): Likewise.
+ * cp-init.c (init_init_processing, build_new,
+ maybe_adjust_addr_for_delete, build_delete, build_vbase_delete,
+ build_vec_delete): Likewise.
+ * cp-tree.c (build_cplus_new): Likewise.
+ * cp-tree.h (build_delete): Likewise.
+
+ Wed Jun 23 17:18:41 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (init_decl_processing): Also catch SIGBUS.
+ (sigsegv): Rename to signal_catch; also reset SIGBUS.
+
+ * cp-typeck.c (pointer_diff): Error if op1 is a pointer to an
+ incomplete type.
+
+ Wed Jun 23 16:17:43 1993 Mike Stump (mrs@rtl.cygnus.com)
+
+ * cp-search.c (dfs_get_vbase_types, get_vbase_types): Conform to ARM
+ 12.6.2 with respect to virtual bases. Virtual bases are now
+ initialized in dfs order.
+
+ Wed Jun 23 16:04:17 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-tree.c (layout_basetypes): Disable the warning relating to a
+ non-virtual dtor.
+
+ Tue Jun 22 20:03:59 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-lex.c (reinit_parse_for_block): Detect EOFs inside templates.
+
+ Tue Jun 22 16:10:46 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-class.c (finish_struct): Set TYPE_NONCOPIED_PARTS now that the
+ right vtable can be found, so that the vtable pointers are set
+ correctly when implementing default copy constructors.
+ * cp-typeck.c (build_modify_expr): Use TYPE_NONCOPIED_PARTS in the
+ same way the backend uses it when implementing default copy
+ constructors.
+
+ Tue Jun 22 10:50:56 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Don't try to mangle the name of a fn
+ that has C linkage.
+
+ * cp-init.c (xref_friends): Deleted fn, since it's the same as
+ xref_friend.
+ (xref_friend): Make it static.
+ (do_friend): Change call to xref_friend.
+ * cp-tree.h (xref_friend, xref_friends): Delete extern decls.
+
+ * cp-tree.h (lang_type): Delete `dynamic' bit.
+ * gplus.gperf (dynamic): Delete reserved word.
+ * cp-hash.h: Generated a new version.
+ * cp-lex.c (init_lex): Delete doing an unset of `dynamic'.
+ * cp-parse.y (DYNAMIC): Delete token and setting it to %right.
+ (new, aggr): Delete DYNAMIC rules.
+ * cp-spew.c (init_spew, struct toks_follow_types): Delete DYNAMIC.
+
+ * cp-typeck.c (convert_for_assignment): There's no standard
+ conversion from a pointer to member to a `void *'.
+
+ * cp-decl.c (init_decl_processing): Add builtins for
+ __builtin_apply_args, __builtin_apply, and __builtin_return.
+
+ Mon Jun 21 12:05:28 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl2.c (grok_x_components): New function. Adjust the code that
+ handles ENUMERAL_TYPEs and UNION_TYPEs to make more sense.
+ * cp-parse.y (component_decl): Move a lot of code into that fn.
+ * cp-tree.h (grok_x_components): Add extern decl.
+
+ * cp-parse.y (component_decl_list): Don't warn about a semicolon
+ after a component_decl_list.
+
+ * cp-search.c (lookup_field): Be careful to handle operators
+ properly when complaining about ambiguities &c.
+
+ * cp-search.c (dfs_pushdecls): Make sure we have a context before
+ seeing if it derives from TYPE.
+
+ Fri Jun 18 08:14:11 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl2.c (finish_anon_union): Use simple_cst_equal to find the
+ member that can hold all the values, instead of just doing a compare
+ between the DECL_SIZEs.
+
+ Wed Jun 16 10:57:37 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-typeck.c (build_unary_op): Make sure it's the global fn `main'
+ before complaining about taking the address of it.
+
+ * cp-decl.c (grokdeclarator): Also forbid `operator ()' as a
+ non-member fn.
+
+ * cp-decl.c (grok_reference_init): Don't allow an initializer list
+ as the initializer for a reference.
+
+ * cp-method.c (dump_init): Handle a NON_LVALUE_EXPR.
+
+ Sun Jun 13 12:55:22 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (grokvardecl): Don't complain about duplicate
+ definitions of `extern "C"' declarations (parallelize it with how
+ regular `extern' decls are handled).
+
+ * cp-decl.c (start_function): Avoid a null-reference on CTYPE.
+
+ * cp-cvt.c (build_default_binary_type_conversion): Look deeper into
+ what ARG1 and ARG2 are if they're POINTER_TYPEs.
+
+ Thu Jun 10 12:09:17 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Make the warning about opr-eq being a
+ member function be a pedwarn.
+
+ Thu Jun 10 00:30:08 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-tree.h: (previous_class_type): Add external declaration.
+ * cp-class.c (prev_class_type): Rename to previous_class_type.
+ * cp-decl.c (struct saved_scope): Add previous_class_type slot.
+ * cp-decl.c (push_to_top_level, pop_from_top_level): Track
+ previous_class_type value. The only trick is that we have to call
+ popclass(-1) when we have a previous_class_type that we are about to
+ destroy, to keep things in sync.
+
+ Tue Jun 8 16:48:49 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-cvt.c (build_thunk, convert_fn_ptr): New routines to handle
+ thunks.
+ * cp-cvt.c (cp_convert_to_pointer): Use convert_fn_ptr when
+ converting non-static pointer to members.
+
+ Tue Jun 8 16:41:59 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-lex.c (reinit_parse_for_block): Make sure not to try to use
+ consume_string on an escaped double-quote.
+
+ Tue Jun 8 16:25:43 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-call.c (build_method_call): Don't search hidden functions from
+ base classes, as this violates chapter 10.
+
+ Mon Jun 7 18:46:01 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-init.c (emit_base_init): Rewrite, merging the two paths into
+ one for member initialization. Now members will be initialized in
+ order of declaration, not in the order of the mem-initializer list.
+ (perform_member_init, sort_member_init): New functions.
+
+ Mon Jun 7 18:01:31 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-search.c (is_subobject_of_p, lookup_field, lookup_fnfields):
+ Because virtual bases don't necessarily share the same binfo, use
+ the binfo hierarchy of TYPE_BINFO of any virtual bases, when
+ performing hiding checks. Fixes problem introduced on Thu Mar 25
+ 23:09:27 1993. The symptom is the compiler reports non ambiguous
+ members as being ambiguous.
+
+ Sun Jun 6 11:45:44 1993 Michael Tiemann (tiemann@rtl.cygnus.com)
+
+ * cp-call.c (EVIL,TRIVIAL): New macros.
+ (convert_harshness): Use these macros.
+
+ Sat Jun 5 19:06:13 1993 Michael Tiemann (tiemann@rtl.cygnus.com)
+
+ * cp-init.c (emit_base_init): Make clearing BINFO_BASEINIT_MARKED
+ symmetric with its setting. Fixes p2825.
+
+ Thu Jun 3 16:24:30 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-parse.y (component_declarator, component_declarator0):
+ Allow attribute after nameless field.
+
+ * cp-lex.c (real_yylex): Take care to expand token_buffer before
+ storing each character.
+
+ * cp-lex.c (real_yylex): If an integer value overflows so the high
+ word is negative, it's of unsigned long long type. Integer constant
+ is unsigned for purposes of int_fits_type_p so that it compares huge
+ constants properly. Warn about integers so large that they are
+ unsigned.
+
+ * cp-cvt.c (convert_from_reference): Do an or-equals on setting
+ TREE_SIDE_EFFECTS for NVAL.
+ * cp-tree.c (lvalue_p): For a SAVE_EXPR, check its first argument.
+
+ Thu Jun 3 11:34:35 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl2.c (grok_alignof): New function.
+ * cp-parse.y (unary_expr, ALIGNOF unary_expr rule): Move the code
+ into the new function, to reduce the size of the parser.
+ * cp-tree.h (grok_alignof): Add prototype.
+
+ * cp-decl.c (grokdeclarator): Allow function-call notation for
+ initialization of scalars as well as aggregates.
+
+ * cp-decl.c (pushdecl): Don't pay attention to friends when noting a
+ missing `static' decl. Disable this code for now.
+
+ Wed Jun 2 12:23:05 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (duplicate_decls): Do a regular error if the line number
+ on NEWDECL hasn't been set yet (e.g., before finish_struct).
+
+ * cp-class.c (finish_struct): Remove warning about a bit-field
+ having a bad type in ANSI C++, it's not appropriate given the
+ warning immediately above.
+
+ * cp-typeck.c (require_instantiated_type): Don't allow an
+ initializer list in an argument list.
+
+ * cp-decl.c (pushdecl): Change shadowing of a param in outermost
+ block of the fn from a pedwarn to an error, since it's a
+ redeclaration.
+
+ * cp-class.c (finish_struct): Say anonymous classes and structs are
+ useless, not just classes.
+
+ * cp-lex.c (real_yylex): Warn if catch, throw, or try are used as
+ identifier names.
+
+ * cp-decl.c (pushdecl): Make sure we have a CURRENT_FUNCTION_DECL
+ before setting its public flag.
+
+ * cp-decl.c (expand_static_init): Only complain about multiple
+ initializations of a static variable if we actually have an
+ initializer.
+ (finish_decl): Likewise for const.
+
+ * cp-search.c (build_mi_matrix): Fix off-by-one error in
+ clearing of MI_MATRIX.
+ (get_base_distance): Init NEW_BINFO to 0.
+
+ * cp-pt.c (instantiate_member_templates): Initialize XXX to 0.
+
+ * cp-call.c (build_method_call): Zero out candidates.
+ (build_overload_call_real): Likewise.
+
+ Wed Jun 2 11:53:24 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-search.c (lookup_fnfields_here): Use TYPE_MAIN_VARIANT on
+ context types before comparing. Fixes const member functions not
+ being found in templates.
+
+ Tue Jun 1 18:26:18 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-parse.y (structsp): Avoid a null-ref on ID.
+ (left_curly): Likewise.
+
+ Tue Jun 1 13:49:20 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (pushdecl): Communicate a `static' decl of a prototype
+ into its definition, if they forget to take care of it.
+
+ * cp-init.c (emit_base_init): Make error message more useful about
+ insufficient initializers for a member of a class w/o a ctor.
+
+ Sun May 30 09:45:06 1993 Michael Tiemann (tiemann@rtl.cygnus.com)
+
+ * cp-call.c (compute_conversion_costs): Penalise each argument that
+ matches an ellipsis, not just the ellipsis itself.
+ (build_method_call): Don't consider a candidate an easy match if
+ cp->ellipsis is non-zero (fixes p2778).
+
+ Sat May 29 09:34:57 1993 Michael Tiemann (tiemann@rtl.cygnus.com)
+
+ * cp-cvt.c (convert_to_reference): Match ARM rules more closely by:
+ (1) not converting between types of different signedness, and
+ (2) converting between types of different varieties if a const&
+ suggests we can use a temporary (fixes p2780).
+
+ * cp-decl.c (decls_match): Handle pseudo-match of parameter lists
+ according to p308 of the ARM.
+ (push_overloaded_decl): Ditto.
+ * cp-typeck.c (comptypes): Rest of change (closes p2779).
+
+ * cp-call.c (compute_conversion_costs): Count ellipses when we see
+ them.
+ (ideal_candidate): Gracefully handle arg lists that have ellipses
+ (Fixes p2777).
+
+ * cp-call.c (build_method_call): Delete some #ifdefs that are
+ obsoleted by ANSI.
+
+ Fri May 28 12:15:21 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (finish_decl): Don't allow overloaded operators to have
+ default arguments.
+
+ * cp-cvt.c (convert): If it's an anonymous enum, say so instead of
+ giving the cryptic `._123' as the enum type.
+
+ Thu May 27 10:52:49 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl.c (grokdeclarator): Return 0 instead of doing a 155 abort,
+ so we'll get the right error message later.
+
+ * cp-type2.c (readonly_error): Give a more useful error when the arg
+ is a RESULT_DECL.
+
+ * cp-init.c (build_new): Set LOOKUP_COMPLAIN on the flags, so we'll
+ pay attention to the visibility of the constructor we're trying to
+ call.
+
+ * toplev.c (lang_options): Add warning about ctor/dtor privacy.
+ * cp-decl2.c (lang_decode_option): Grok it. Make -Wall effect it.
+ (warn_ctor_dtor_privacy): New variable, default being on.
+ * cp-tree.h (warn_ctor_dtor_privacy): Add extern decl.
+ * cp-class.c (finish_struct_methods): Make the ctor warning
+ conditionalized on the flag.
+ (finish_struct): Likewise for ctors.
+ * invoke.texi (Option Summary, Warning Options): Add it.
+ (Options to Request or Suppress Warnings): Explain it.
+
+ * cp-decl.c (grokdeclarator): Use a pedwarn on extern inline.
+
+ Tue May 25 13:55:48 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-init.c (build_delete): Don't pass the size as an argument to
+ builtin delete for a non-aggregate type. Only pass it for a class
+ when we'll be using its own operator delete(). (complies w/ $12.5)
+ (build_x_delete): Don't pass the size down to builtin delete.
+
+ * cp-decl2.c (delete_sanity): If it's a pointer to a type that has
+ no destructor, then build a regular delete expression, instead of a
+ vector one (since we didn't push any info into the BI_header_type
+ area).
+
+ * cp-decl2.c (grok_array_decl): Add a pedwarn if they do `5[a]'.
+
+ * cp-typeck.c (comptypes): Don't warn about t2 being an
+ error_mark_node.
+
+ * cp-decl.c (finish_decl): If type is laid out, but decl is not,
+ call layout_decl.
+
+ Mon May 17 10:35:55 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-tree.h (error_not_base_type): Add prototype.
+
+ Fri May 14 17:16:55 1993 Mike Stump (mrs@poseidon.cygnus.com)
+
+ * cp-class.c (finish_struct): Use get_binfo instead of binfo_value
+ to find vfields. Cures compiler_error.
+
+ Thu May 13 14:57:51 1993 Mike Stump (mrs@cygnus.com)
+
+ * cp-tree.c (binfo_value): If type is the main binfo for elem,
+ return it.
+
+ Wed May 12 13:10:07 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-typeck.c (c_expand_return): Pedwarn on using return without a
+ value in a function that requires one. Clear
+ CURRENT_FUNCTION_RETURNS_NULL, so we don't get a bogus warning about
+ reaching the end of a non-void function.
+
+ Tue May 11 17:51:16 1993 Mike Stump (mrs@poseidon.cygnus.com)
+
+ * cp-decl.c (start_decl): Allow -fexternal-templates compiled code to
+ fall back to old strategy of generating static copies for templates
+ that are not under the control of #pragma interface/implementation,
+ but warn if this happens.
+ * cp-decl2.c (warn_if_unknown_interface): Likewise.
+ * cp-lex.c (reinit_parse_for_method, cons_up_default_function):
+ Likewise.
+ * cp-pt.c (end_template_decl, instantiate_member_templates,
+ instantiate_template): Likewise.
+ * cp-tree.h (warn_if_unknown_interface): Likewise.
+
+ Sat May 8 05:53:17 1993 Michael Tiemann (tiemann@cygnus.com)
+
+ * cp-decl.c (finish_decl): TOPLEV should be set non-zero also if we
+ are at the pseudo-global level. Use TOPLEV instead of testing
+ CURRENT_BINDING_LEVEL.
+
+ Fri May 7 12:42:46 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-decl2.c (grok_array_decl): New function.
+ * cp-parse.y (primary): Use it instead of lots of code in the
+ parser.
+ * cp-tree.h (grok_array_decl): Add prototype.
+
+ * cp-parse.y (component_decl): Disable change about TYPE_DECLs going
+ into the TYPE_FIELDS list for now.
+ * cp-type2.c (store_init_value): Disable checks for now.
+
+ Thu May 6 16:59:19 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-lex.c (check_newline): Use a while instead of a do-while to
+ avoid reading the line after the #pragma if we're at a newline.
+
+ Wed May 5 16:38:06 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * Makefile.in (stamp-cp-parse): Update reduce/reduce count to 13.
+
+ * cp-decl2.c (delete_sanity): New function.
+ * cp-parse.y (unary_expr): Call it, getting rid of a lot of
+ repeated code in the parser.
+ * cp-tree.h (delete_sanity): Add prototype.
+
+ * cp-init.c (emit_base_init): Don't try to do anything with a member
+ that lacks a DECL_NAME (e.g., types we added in component_decl from
+ the parser).
+
+ Wed May 5 12:57:33 1993 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * cp-parse.y (get_current_declspecs): Obsolete, deleted.
+
+ Tue May 4 13:46:09 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-type2.c (process_init_constructor): Don't check for private or
+ protected members; we do that in store_init_value now.
+
+ * cp-parse.y (simple_stmt): Use expr_no_commas instead of expr for
+ case labels.
+
+ * cp-typeck.c (build_binary_op_nodefault): Add 'right' and 'left' to
+ shift count warnings to distinguish them from each other.
+
+ * cp-decl.c (finish_decl, grokdeclarator): Report overflows in
+ storage sizes.
+ (build_enumerator): Report overflows on enumerators.
+ * cp-decl2.c (grokbitfield): Likewise.
+ * cp-parse.y (unary_expr): Warn about overflows in parser-built
+ unary expressions.
+ * cp-typeck.c (c_sizeof): Call force_fit_type only for INTEGER_CST.
+ (build_c_cast): Ignore any integer overflow caused by a cast.
+ (convert_for_assignment): Warn if source had overflow in folding.
+ (build_conditional_expr): Check conversions in if-then-else
+ expressions.
+ * cp-tree.h (convert_and_check, overflow_warning,
+ unsigned_conversion_warning): Add prototypes for fns in c-common.c.
+
+ * cp-decl.c (init_decl_processing): Make the arrays 200 long to
+ leave enough room for most names.
+
+ * cp-decl.c (lookup_label): Return a NULL_TREE if not within a
+ function.
+ * cp-parse.y (unary_expr, ANDAND identifier): Handle lookup_label
+ returning a NULL_TREE.
+
+ * cp-method.c (dump_init): Grok a FIELD_DECL as well.
+
+ * cp-decl.c (finish_function): Move setting of the DECL_RESULT's
+ context and calling setjmp_protect after poplevel, so we have a
+ valid DECL_INITIAL for the fndecl (not an error_mark_node).
+
+ Mon Jan 25 11:04:23 1993 Niklas Hallqvist (niklas at della.appli.se)
+
+ * cp-parse.y (component_decl): Handle anonymous unions as static
+ class members.
+ * cp-decl.c (grokdeclarator): Ditto.
+
+ * cp-decl.c (shadow_tag): Emit error message if static or extern
+ is specified as per ARM 7.1.1.
+
+ * cp-decl2.c (finish_anon_union): Issue error if a global
+ anonymous union is not declared static, remove old funny error
+ about some optimizer failing.
+
+ * cp-class.c (finish_struct): Corrected error message concerning
+ anonymous classes.
+
+ * cp-lex.c (check_for_missing_semicolon): Allow trailing storage
+ specifiers.
+
+ Fri Jan 29 09:39:17 1993 Niklas Hallqvist (niklas at della)
+
+ * cp-parse.y (component_decl): Nested unions, enums and structs
+ should have their TYPE_DECLs in the TYPE_FIELDS slot of the
+ containing type so the access flags eventually will get correctly
+ set.
+
+ * cp-type2.c (store_init_value): Check for the aggregate conditions
+ described in ARM 8.4.1.
+
+ Mon May 3 19:10:28 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-lex.c (real_yylex): Don't warn about floating point out of
+ range if target floating-point format is IEEE.
+
+ * cp-class.c (finish_struct): Promote unsigned bitfields to signed
+ int if the field isn't as wide as an int.
+
+ * cp-search.c (dfs_pushdecls): Use warning_with_decl, so we give the
+ line number of the offending method declaration, rather than the
+ line number of the curly-brace that ends the class definition.
+
+ Mon May 3 18:04:15 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-cvt.c (convert): When doing int->enum conversions, always call
+ pedwarn, even if we didn't give `-pedantic'.
+
+ * cp-decl.c (start_function): Add extern decl of
+ `flag_external_templates'.
+
+ * cp-lex.c (check_newline): Warn if there's anything after a
+ `#pragma interface'.
+
+ Mon May 3 12:39:49 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-class.c (finish_struct_methods): Use `warning' on a class w/ a
+ private dtor and no friends, so the line number comes out right. Also
+ only emit this warning when `extra_warnings' is true.
+
+ * cp-type2.c (process_init_constructor): Don't allow use of an
+ initializer list for a class with private or protected members.
+
+ Sat May 1 15:07:24 1993 Mike Stump (mrs@poseidon.cygnus.com)
+
+ * cp-decl.c (start_decl, start_function): Add a new flag
+ -fexternal-templates. Use flag_external_templates to determine when
+ template definitions should be made externally visible and
+ accessible. This permits non-exponential growth in object files
+ that use templates.
+ * cp-decl2.c (lang_f_options): Likewise.
+ * cp-lex.c (reinit_parse_for_method, cons_up_default_function):
+ Likewise.
+ * cp-parse.y (template_instantiate_once): Likewise.
+ * cp-pt.c (end_template_decl, instantiate_member_templates,
+ instantiate_template, end_template_instantiation): Likewise.
+ * toplev.c (lang_options): Likewise.
+
+ Fri Apr 30 18:50:00 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * cp-spew.c (arbitrate_lookup): If the next character is a '[', then
+ have the compiler assume it's an expression instead of a type.
+
+ Fri Apr 30 14:39:28 1993 Mike Stump (mrs@poseidon.cygnus.com)
+
+ * cp-class.c (maybe_fixup_vptrs): Use the VF_NORMAL_VALUE of the
+ vfields to get the binfo to get the vtable, so that we may pick up
+ the most derived version of the vtable.
+
+ * cp-class.c (finish_base_struct): Always set the VF_NORMAL_VALUE so
+ that maybe_fixup_vptrs can get the most derived vtable.
+
+Fri Jun 25 14:00:17 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config.sub: Convert ...-sysvr4 into ...-sysv4.
+
+ * config/m68k/news.h (CPP_PREDEFINES): Have two alternatives,
+ one for motorola and one for not motorola.
+
+ * config/m68k/tower-as.h, mot3300.h, m68kv4.h, hp320.h, amix.h:
+ * config/m68k/3b1.h, crds.h (CPP_PREDEFINES): Add __motorola__.
+
+ * expr.c (store_expr): If TARGET is volatile mem ref, return it.
+
+ * toplev.c (lang_options): Add -fdollars-in-identifiers.
+ * c-decl.c (c_decode_option): Handle -fdollars-in-identifiers.
+
+Fri Jun 25 13:33:39 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa-hpux.h (LINK_SPEC): Search shared libraries by default; turn
+ off shared library searching of -static is specified.
+ * pa-ghpux.h (LINK_SPEC): Likewise.
+
+ * pa.h (TARGET_SHARED_LIBS): Delete switch and all references to
+ the switch.
+ * pa.c: References to TARGET_SHARED_LIBS deleted.
+ * pa.md: Likewise.
+
+ * pa-utahmach.h (TARGET_DEFAULT): Allow indexing on Mach ports.
+ * pa1-utahmach.h (TARGET_DEFAULT): Likewise.
+ * pa.h (TARGET_DISABLE_INDEXING): Clean up comments.
+
+Fri Jun 25 00:50:48 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * expr.c (store_expr): Ignore SUGGEST_REG if target is volatile.
+
+ * config/mips/mips.md (negdi2, negdi2_internal): Renamed from negdi3...
+
+Thu Jun 24 00:31:27 1993 Richard Stallman (rms@wookumz.gnu.ai.mit.edu)
+
+ * gcc.c (option_map): Make --version alias for -dumpversion.
+
+Wed Jun 23 07:50:21 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * romp.c (output_prologue): Delete unused var, INSN.
+ (output_encoded_offset): New function.
+ (output_epilogue): Minor changes to traceback table; call
+ new output_encoded_offset.
+ (romp_debugger_{auto,arg}_correction): New functions.
+ * romp.h (DBX_REGPARM_STABS_LETTER, DEBUGGER_{AUTO,ARG}_OFFSET):
+ New macros.
+
+ * reorg.c (fill_slots_from_thread): When replacing a use of a
+ register with what it was set to, don't do it when either the
+ destination or source of the copy is set in the insn.
+
+ * jump.c (jump_optimize): Properly make jump into store-flag
+ sequence when the jump can't be reversed but the TRUE branch
+ is const0_rtx.
+
+ * expr.c (expand_expr): Set IGNORE if target is const0_rtx or
+ result type is VOID.
+ Move most IGNORE processing to one place to avoid expanding things
+ that don't need to be expanded.
+ (expand_expr, case CONSTRUCTOR, case COND_EXPR): If IGNORE, don't
+ expand anything we don't have to.
+ (expand_expr, case CONVERT_EXPR): Don't deal with IGNORE here.
+
+Wed Jun 23 07:47:32 1993 John F Carr (jfc@Athena.mit.edu)
+
+ * regs.h (scratch_list, scratch_block, scratch_list_length): New vars.
+ * reload1.c (mark_scratch_live): New function.
+ (reload): Call it on each SCRATCH.
+ Free scratch list and block.
+ (spill_hard_reg): Reallocate any SCRATCH whose register we want to
+ spill.
+ * local-alloc.c (scratch_block, scratch_list{,_length}, scratch_index):
+ New variables.
+ (local_alloc): Allocate and initialize them.
+ (alloc_qty_for_scratch): Can allocate likely-spilled register
+ classes for SCRATCH.
+ (block_alloc): Likewise for regs in small register classes.
+ Only allocate a SCRATCH if it can fit in the block we make.
+ Don't mark regs used in SCRATCH live here; instead, make entry in
+ new tables.
+
+Tue Jun 22 19:52:08 1993 Richard Stallman (rms@wookumz.gnu.ai.mit.edu)
+
+ * emit-rtl.c (copy_rtx_if_shared): In `E' case, get the length
+ before copying, and don't get it again after.
+
+Tue Jun 22 10:50:56 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * toplev.c (report_error_function): Change format of the
+ included-file stack to be more readable.
+ * cccp.c (print_containing_files): Likewise.
+
+Mon Jun 21 19:21:18 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.c (print_operand, case 'J'): Write out shift count
+ of 0, not 32 for bit 31 of CCR.
+
+See ChangeLog.7 for earlier changes.
diff --git a/gcc/ChangeLog.9 b/gcc/ChangeLog.9
new file mode 100644
index 00000000000..6b18fc9580f
--- /dev/null
+++ b/gcc/ChangeLog.9
@@ -0,0 +1,9968 @@
+Tue Feb 28 16:36:58 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000/eabi.asm (__eabi): Correctly reload r30 in the case where
+ the GOT pointers have to be relocated.
+
+ * rs6000/rs6000.md (floatsidf2, floatunssidf2): Add
+ TARGET_SOFT_FLOAT conditional dropped in the last change.
+ (movdf insns): Add -msoft-float varients that do not use 'f' register
+ constraints.
+ (movti): On PowerPC, don't clobber the MQ register, since it doesn't
+ exist. Add abort to default switch case.
+ (store_multiple, load_multiple): Test for TARGET_POWER instead
+ of !TARGET_POWERPC to determine whether the MQ register exists.
+
+Tue Feb 28 14:46:48 1995 Doug Evans <dje@cygnus.com>
+
+ * configure (extra_headers): Renamed from header_files.
+
+ * toplev.c (rest_of_compilation): Defer output of static inlines
+ even if not optimizing, they may never be referenced.
+
+Mon Feb 27 17:06:47 1995 Doug Evans <dje@cygnus.com>
+
+ * cccp.c (do_include): Check for redundant file before opening in
+ relative path case. Don't call fstat unnecessarily.
+
+Mon Feb 27 11:20:29 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * mips.md (muldi3_internal): Change dmul to dmult.
+
+Mon Feb 27 02:30:54 1995 Jeffrey A. Law <law@mole.gnu.ai.mit.edu>
+
+ * pa.c (hppa_expand_prologue): Don't save the PIC register into
+ the stack for functions which have no stack of their own.
+
+Mon Feb 27 00:43:32 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * config/gnu.h (ASM_SPEC): Macro removed.
+
+Sun Feb 26 20:21:52 1995 Doug Evans <dje@cygnus.com>
+
+ * reload.c (find_reloads_address): Fix typo in reg+const case.
+
+Sat Feb 25 10:21:13 1995 Doug Evans <dje@cygnus.com>
+
+ * gcc.c (print_search_dirs): New variable.
+ (build_search_list): New function.
+ (putenv_from_prefixes): Call it.
+ (option_map): New option --print-search-dirs.
+ (process_command): Handle it.
+ (main): Print installation directory and exec/startfile_prefixes if
+ --print-search-dirs given.
+
+ * Makefile.in (Makefile): Delete config.run afterwards.
+ (distclean): Delete config.run.
+
+Sat Feb 25 08:36:40 1995 David Mosberger-Tang (davidm@cs.arizona.edu)
+
+ * alpha.h (ASM_SPEC): Pass -pg to assembler.
+ (FUNCTION_PROFILER): Do nothing; the assembler does it for us.
+
+Sat Feb 25 08:24:27 1995 H.J. Lu (hjl@nynexst.com)
+
+ * configure (native_prefix): New; lets some hosts put
+ files in /usr instead of /usr/local if no --prefix specified.
+
+Sat Feb 25 08:07:56 1995 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.h (RTX_COSTS): Add cost of FFS.
+
+Sat Feb 25 06:52:22 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * mips.c (mips_fill_delay_slot): Fix typo in call to FP_REG_P.
+
+ * cse.c (simplify_unary_operation): If operand mode is VOIDmode
+ for UNSIGNED_FLOAT and operand looks negative, can't simplify.
+
+ * rs6000.c (low_32_bit_operand): New function.
+ * rs6000.h (PREDICATE_CODES): Add low_32_bit_operand.
+ * rs6000.md: Remove unneeded tests on HOST_BITS_PER_INT from
+ some extra conditions.
+ Use low_32_bit_operand for (plus:DI (zero_extend:DI ..) ..) cases.
+
+Sat Feb 25 00:49:29 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * config/xm-gnu.h (POSIX): Define this macro.
+
+ * config/gnu.h (GNU_CPP_PREDEFINES): Add missing backslash.
+
+Fri Feb 24 19:17:29 1995 Jeffrey A. Law <law@snake.cs.utah.edu>
+
+ * configure (hppa1.?-hp-hpux9*): Use hpux9 configuration files.
+ * pa-hpux9.h, pa-ghpux9.h, pa1-hpux9.h, pa1-ghpux9.h: New
+ configuration files.
+
+Fri Feb 24 15:55:33 1995 Jim Wilson <wilson@cygnus.com>
+
+ * reorg.c (relax_delay_slots): When searching for next CODE_LABEL,
+ use next_real_insn not next_active_insn.
+
+ * stdarg.h, va-*.h, varargs.h (va_end): Expand to a void expression
+ instead of nothing.
+
+ * sh.h (PACKSTRUCT_BIT, TARGET_PACKSTRUCT): Change to PADSTRUCT.
+ Add comment saying that the option is not useful.
+ (TARGET_SWITCHES): Change -mpackstruct option to -mpadstruct.
+ (STRUCTURE_SIZE_BOUNDARY): Change PACKSTRUCT to PADSTRUCT changing
+ default value from 32 to 8.
+
+ * dwarfout.c (PUSHSECTION_FORMAT): Add a leading tab.
+
+ * expr.c (expand_expr, case COMPONENT_REF): Don't fetch unaligned
+ field if we only want its address.
+
+ * i960.c (fp_literal_one, fp_literal_zero): Don't accept VOIDmode.
+ (i960_output_ldconst): In DFmode code, delete code to handle FP_REG_P
+ target. In DFmode and SFmode code, delete test for HOST_FLOAT_FORMAT
+ == TARGET_FLOAT_FORMAT.
+ * i960.h (REAL_ARITHMETIC): Define.
+ (LEGITIMATE_CONSTANT_P): Pass argument mode not VOIDmode to fp_literal.
+
+ * i960.h (CC1_SPEC): Don't output implicit -gstabs or -gcoff option
+ if user gave an explicit one.
+ * vx960-coff.h (CC1_SPEC): Likewise.
+
+ * dbxout.c (GDB_INV_REF_REGPARM_STABS_LETTER): New macro.
+ (dbxout_parms): For gdb, output use GDB_INV_REF_REGPARM_STABS_LETTER
+ for parameters passed by invisible reference in registers.
+
+ * mips.c (mips_secondary_reload_class): Also handle SUBREGs.
+ * mips.md (madsi): Don't use '+' constraint in a clobber.
+ (madsi_highpart, umadsi_highpart): Delete.
+
+ * dbxout.c (dbxout_parms): For parameters passed in memory, delete
+ obsolete code to handle parameters converted and stored back to
+ the stack slot where they were passed in.
+ (dbxout_reg_parms): Delete obsolete ifdefed out code. Combine
+ redundant PARM_PASSED_IN_MEMORY tests. For case where parameter
+ lives in memory, output stab if it doesn't live where it was passed.
+
+ * sh.c: Correct typos and formatting problems.
+ (add_constant, current_function_pretend_args_size,
+ flag_traditional, table_lab): Delete unnecessary declarations.
+ (sh_cpu): Change type from attr_cpu to processor_type.
+ (need_slot, output_shift, lshiftrt_insns, howshift,
+ pop_operand): Delete.
+ (print_operand, output_branch): Delete calls to need_slot.
+ (synth_constant): Comment that it doesn't work.
+ (output_movedouble): Handle PRE_DEC dest not POST_INC dest.
+ (output_options): Don't use flag_traditional.
+ (shift_insns): Correct numbers to optimal sequences.
+ (shift_amounts): New table.
+ (shift_insns_rtx): New function.
+ (shiftinsns): Combine LSHIFTRT and ASHIFT cases.
+ (shiftcosts): Return true costs of shifts instead of estimate of 1.
+ (gen_ashift): Handle negative shift amounts. Call gen_lshrsi3_m
+ for single bit LSHIFTRT, and gen_lshrisi3_k for multiple bit shifts.
+ (gen_shifty_op): Handle negative shift amounts at top. Generate
+ optimal sequences for ASHIFT and LSHIFTRT.
+ (find_barrier): Correct pattern for matching mova instructions.
+ (general_movsrc_operand): Delete redundant test for (MEM LABEL_REF).
+ Don't reject POST_INC address for size > 4.
+ (general_movdst_operand): Don't reject PRE_DEC address for size > 4.
+ * sh.h: Correct typos and formatting problems.
+ (MODE_DISP_OK_[12]): Delete.
+ (GO_IF_LEGITIMATE_INDEX): Delete uses of MODE_DISP_OK_[12].
+ (RTX_COSTS): Add LSHIFTRT.
+ (table_lab): Delete declaration.
+ (enum processor_type): New enum.
+ (sh_cpu_attr): New macro.
+ (sh_cpu): Change type to enum processor_type to avoid incomplete
+ enum type.
+ * sh.md: Correct typos and formatting problems.
+ (cpu): Use sh_cpu_attr not sh_cpu.
+ (adddi3, subdi3, udivsi3-1, divsi3-1, mulsi3_call-1, ashrsi2_16,
+ ashrsi2_31, dect, casesi_worker): Use arith_reg_operand not
+ register_operand.
+ (ashlsi3_n, lshrsi3_n): Enable pattern. Set length correctly.
+ Use '#' to output it.
+ (ashlsi3_n+1, lshrsi3_n+1): New patterns to split shifts.
+ (ashlsi3, lshrsi3): Use shiftby_operand instead of gen_shifty_op.
+ (lshlsi3_m): New pattern for single bit shifts.
+ (lshlsi3_k): Only handle multiple bit shifts.
+ (negc): Use IOR not PLUS to set carry bit.
+ (push+2, pop+2, movsi_pi, movdi-2, movdf_k-1, movsf_i-1): Delete.
+ (movsi_i, movqi_i, movhi_i): Delete redundant < and > constraints.
+ (movsf_i): Delete incorrect < and > constraints.
+
+Fri Feb 24 13:07:55 1995 Stephen L Moshier <moshier@world.std.com>
+
+ * i386/i386.md (sinxf2, cosxf2): Define.
+
+Thu Feb 23 14:14:20 1995 Mike Stump <mrs@cygnus.com>
+
+ * rs6000.h/rs6000.h (RETURN_ADDR_RTX): Add definition to support
+ __builtin_return_address and __builtin_frame_address on the
+ rs6000. This is necessary to support exception handling in g++ on
+ the rs6000.
+
+Thu Feb 23 15:23:26 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000/rs6000.h (TARGET_SWITCHES): All -mpower switches set
+ -mmultiple by default. Rename -mno-fp-regs to -msoft-float and
+ -mfp-regs to -mhard-float.
+ (TARGET_NO_FPR): Rename all occurances of macro to be either
+ TARGET_HARD_FLOAT or TARGET_SOFT_FLOAT.
+ (FUNCTION_VALUE): If -msoft-float, floating point gets returned in
+ register 3.
+ (LIBCALL_VALUE): Ditto.
+ (USE_FP_FOR_ARG_P): Don't use floating point registers if
+ -msoft-float.
+ (MOVE_MAX): Use TARGET_MUTIPLE instead of TARGET_POWER to decide
+ to move 16 bytes at a time.
+ (GO_IF_LEGITIMATE_ADDRESS): Don't allow index + base register
+ addresses for DF's if -msoft-float.
+
+ * rs6000/rs6000.c (POWER_MASKS): Or in MASK_MULTIPLE.
+ (processor_target_table): Set MASK_MULTIPLE for Power CPUs and
+ don't set it for PowerPC CPUs.
+ (output_prolog): If -mrelocatable and a GOT pool is used, mark the link
+ register as being live. Load the GOT address via a bl instruction.
+ (output_toc): If V.4 semantics, make the TOC label be the difference
+ from the start of the TOC section, rather a label the assembler has to
+ recognize as being an offset.
+
+ * rs6000/rs6000.md (all floating point ops): For all operations,
+ check if floating point is allowed.
+ (movti): Use TARGET_MULTIPLE to decide whether to expand movti
+ instead of TARGET_POWER.
+
+ * rs6000/sysv4.h (SUBTARGET_SWITCHES): Move here from eabi.h, so the
+ various macro overrides don't have to be recoded for eabi as well
+ as System V.4. Add -mstrict-align to set STRICT_ALIGNMENT to 1.
+ Add -mrelocatable to specify that that the data/text sections may
+ be copied elsewhere, but not true V.4 style PIC.
+ (TOC_SECTION_FUNCTION): Handle TARGET_RELOCATABLE.
+ (TOC_SECTION_ASM_OP): Put quotes around ".got".
+ (MINIMAL_TOC_SECTION_ASM_OP): Put quotes around ".got1".
+
+ * rs6000/eabi.h (SUBTARGET_SWITCHES): Move to rs6000/sysv4.h.
+ (MINIMAL_TOC_SECTION_ASM_OP): Use ".got2" section if
+ -mrelocatable.
+
+ * rs6000/eabi.asm: New file to load up register 2 or relocate the .got2
+ addresses. Called from main.
+
+ * rs6000/t-rs6000: Build two libgcc.a's, one for normal use, and one
+ used when compiling with -msoft-float.
+
+ * rs6000/t-eabi: New file, build two libgcc.a's, one for normal use,
+ and one used when compiling with -msoft-float. Add support for eabi
+ module to relocate the .GOT2 section to support -mmultiple.
+
+ * configure (powerpc-*-eabi*): Use t-eabi, not t-rs6000.
+
+Thu Feb 23 06:58:46 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * Makefile.in (ld): Add missing backslash to make continuation line.
+
+ * i386/winnt.c (gen_stdcall_suffix): Deleted.
+ * winnt/winnt.h (MODIFY_ASSEMBLER_NAME): Deleted.
+ (VALID_MACHINE_DECL_ATTRIBUTES): Deleted.
+ * varasm.c (make_decl_rtl): Remove reference to MODIFY_ASSEMBLER_NAME.
+
+ * alpha.h (RTX_COSTS): Update costs for FP operations.
+
+Thu Feb 23 00:13:05 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * c-typeck.c (build_binary_op): Warn if, in a comparison, a signed
+ operand that might be negative is converted to unsigned.
+
+Wed Feb 22 21:32:48 1995 Peter Schauer (Peter.Schauer@regent.e-technik.tu-muenchen.de)
+
+ * config/svr4.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): New macro.
+
+Wed Feb 22 20:29:31 1995 J.T. Conklin <jtc@netbsd.org>
+
+ * configure (*-*-netbsd*): Set tmake_file to t-libc-ok.
+
+ * config/xm-netbsd.h, i386/xm-netbsd.h, m68k/xm-netbsd.h: New files.
+ * sparc/xm-netbsd.h: New file.
+ * ns32k/xm-netbsd.h: Changed to use config/xm-netbsd.h and
+ ns32k/xm-ns32k.h.
+ * configure (i386-*-netbsd*): Use i386/xm-netbsd.h.
+ (m68k-*-netbsd*): Use m68k/xm-netbsd.h.
+ (sparc-*-netbsd*): Use sparc/xm-netbsd.h.
+
+ * cppp.c, collect2.c: Removed __NetBSD__ from conditional.
+ * collect2.c: Declare strerror if HAVE_STRERROR is defined;
+ otherwise declare sys_errlist and sys_nerr.
+
+Wed Feb 22 19:07:08 1995 Niklas Hallqvist (niklas@appli.se)
+
+ * Makefile.in (libgcc1.a): Run ranlib.
+
+Wed Feb 22 18:46:50 1995 Yury Shevchuk (sizif@botik.yaroslavl.su)
+
+ * explow.c (memory_address): Add missing "else".
+
+Wed Feb 22 15:29:58 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * collect2.c (libselect): New function for passing to scandir.
+ (libcompare): Ditto.
+ (locatelib): Use scandir to look for libraries with matching version
+ numbers.
+
+Wed Feb 22 18:27:14 1995 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (enum sharp_token_type): New type.
+ (stringify, raw_before, raw_after): Use this type instead of char.
+ (collect_expansion, dump_single_macro): Keep track of white space
+ after # and around ## tokens, since the C Standard requires a
+ diagnostic if the white space doesn't match during a redefinition.
+ (sharp_token, sharp_sharp_token): Labels renamed from hash_token and
+ hash_hash_token for naming consistency.
+
+Wed Feb 22 17:37:12 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * gcc.c (SWITCH_TAKES_ARG): Add `x'.
+ (process_command): -Wl, -Xlinker, and -lm values always go to
+ linker even if -x was specified.
+
+Wed Feb 22 09:33:36 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * fold-const.c (fold): Support folding CLEANUP_POINT_EXPRs into
+ arithmetic expressions.
+
+Wed Feb 22 08:40:30 1995 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.c (print_operand, case 'H', 'S'): Delete unused.
+
+ * rs6000.md (ffssi2): Use gpc_reg_operand predicate.
+ (Some maskir patterns): Likewise.
+ (ffsdi2): Likewise.
+
+ * rs6000.md (movsfcc, movdfcc): New standard patterns.
+ (fselsfsf4, fseldfsf4, fseldfdf4, fselsfdf4): Name and create
+ variants of existing anonymous patterns for movsfcc and movdfcc.
+
+Wed Feb 22 08:10:36 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * final.c (output_asm_name): New function, using code taken
+ from output_asm_insn.
+ (output_asm_insn): If flag_print_asm_name, print the comment
+ after the first assembler instruction even in multi-instruction
+ templates.
+
+Wed Feb 22 07:04:25 1995 Ian Lance Taylor (ian@cygnus.com)
+
+ * real.c (REAL_WORDS_BIG_ENDIAN): New macro. Define as either
+ FLOAT_WORDS_BIG_ENDIAN or HOST_FLOAT_WORDS_BIG_ENDIAN. Use it
+ instead of FLOAT_WORDS_BIG_ENDIAN.
+
+Wed Feb 22 07:03:39 1995 Stephen L Moshier (moshier@world.std.com)
+
+ * final.c (split_double): Handle CONST_INT that holds both words.
+ * i386.c (output_move_double): Let split_double extract any
+ constant in op 1; take size from op 0.
+
+ * real.c (m16m, edivm, emulm): Change `short' to `EMUSHORT', and `long'
+ to `EMULONG'.
+ Clean up comments.
+
+Wed Feb 22 00:52:40 1995 Jeffrey A. Law <law@mole.gnu.ai.mit.edu>
+
+ * pa.h (ASM_DECLARE_FUNCTION_NAME): Handle invisible reference
+ arguments passed in registers.
+
+Tue Feb 21 19:03:09 1995 Douglas Rupp (drupp@cs.washington.edu)
+
+ * Makefile.in ($exeext, $objext, $oldobjext): New macros.
+ * Makefile.in: Copy config.status to config.run and then execute.
+ * configure, Makefile.in: Try a "cp" if "ln" fails.
+ * objc/Makefile: Added {} around file variable.
+
+ * c-parse.in: New rules to allow attributes in a prefix position.
+ * c-tree.h (decl_attributes): Added argument.
+ * c-decl.c (grokdeclarator): Added code to support machine attributes.
+ * c-common.c (decl_attributes): Add third argument prefix_attributes.
+ (valid_machine_attribute): Deleted; moved to tree.c.
+ * tree.h (union tree_decl): New field MACHINE_ATTRIBUTES.
+ (DECL_MACHINE_ATTRIBUTES): New macro.
+ * c-decl.c (duplicate_decls): Pass DECL_MACHINE_ATTRIBUTES to
+ descendent typedef; make duplicate typedefs that are identical
+ generate a warning if they are both in system header files.
+ (redeclaration_error_message): Make duplicate typedefs that
+ are identical not an error if they are both in system header files.
+ * print-tree.c (print_node{,_brief}): Print machine attributes.
+
+ * calls.c (emit_call_1): Added function declaration node argument
+ passed to RETURN_POPS_ARGS; also effects calls to emit_call_1.
+ * function.c (assign_parms): Added arg to RETURN_POPS_ARGS.
+ * 1750a.h, a29k.h, alpha.h, arm.h, clipper.h, convex.h: Likewise.
+ * dsp16xx.h, elxsi.h, fx80.h, gmicro.h, h8300.h, i370/mvs.h: Likewise.
+ * i386.h, i386/isc.h, i386/next.h, i386/sco.h: Likewise.
+ * i386/scodbx.h, i860.h, i960.h, m68k.h, m88k.h, mips.h: Likewise.
+ * ns32k.h, pa.h, pdp11.h, pyr.h, romp.h, rs6000.h, sh.h: Likewise.
+ * sparc.h, spur.h, tahoe.h, vax.h, we32k.h: Likewise.
+
+ * cccp.c (main): Don't set "Include" environment variable for NT.
+ * protoize.c: Added #ifdef's WINNT.
+ * toplev.c (get_run_time): Return an approximate value for NT.
+ * gbl-ctors.h, libgcc2.c (atexit): Prototype now works with NT.
+ * gcc.c (fix_argv): Rewrite.
+
+ * i386/winnt.c: New file
+ * winnt/ld.c (expand_lib): Look for both libfoo.a and foo.lib.
+ Modified to support linking with Windows NT graphics libraries.
+ * i386/winnt.h, x-winnt: Support NT Graphics programs; also bug fixes.
+ * winnt/winnt.h (CPP_SPEC): Accept c++ style comments.
+ * winnt/xm-winnt.h: Reflect features/functions available in NT.
+
+ * fixinc.winnt: New file.
+ * configure (i[345]86-*-winnt): Add fixincludes and extra_objs.
+ * config-nt.bat: Deleted.
+ * configure.bat: Take arg specifying msdos or winnt batch file config.
+ * i386/config-nt.{bat,sed}: Updated to Windows NT 3.5.
+
+ * ginclude/stdarg.h, ginclude/varasgs.h: Test _VA_LIST_DEFINED macro.
+ * ginclude/stddef.h: Test _SIZE_T_DEFINED and _WCHAR_T_DEFINED.
+ * ginclude/varargs.h: Modifed to work with Windows NT. Needed a
+ _VA_LIST_DEFINED macro.
+
+ * tree.c: (chain_member_value, decl_attribute_variant): New functions.
+ (valid_machine_attribute): Moved here from c-common.c.
+
+ * varasm.c (make_decl_rtl): Call MODIFY_ASSEMBLER_NAME if defined.
+
+Tue Feb 21 12:40:05 1995 Jeffrey A. Law <law@snake.cs.utah.edu>
+
+ * local-alloc.c (block_alloc): Stop looping over the input
+ operands once we find an input/output register pair which can
+ be combined into a single qty.
+
+ * integrate.c (finish_inline): Don't set DECL_INLINE.
+
+Tue Feb 21 10:19:51 1995 Michael Meissner <meissner@cygnus.com>
+
+ * toplev.c (lang_options): Move fortran switches here, fixing bad
+ patch.
+
+Tue Feb 21 07:30:11 1995 Stephen L Moshier (moshier@world.std.com)
+
+ * rs6000.c (output_toc): Use REAL_VALUE_* macros.
+ * rs6000.h (REAL_ARITHMETIC): Define.
+
+Tue Feb 21 06:48:41 1995 Stephen R. van den Berg (berg@pool.informatik.rwth-aachen.de)
+
+ * stmt.c (expand_value_return): Make function static.
+
+Tue Feb 21 06:42:33 1995 Paul Eggert <eggert@twinsun.com>
+
+ Add support for ISO Normative Addendum 1 to the C Standard.
+ * ginclude/iso646.h: New file.
+ * Makefile.in (USER_H): Add iso646.h.
+ * c-lex.c (yylex): Add support for <: :> <% %> digraphs.
+ * cccp.c (rescan): Add support for %: and %:%: digraphs.
+ (collect_expansion, skip_if_group, dump_single_macro): Likewise.
+ (union hashval): Remove ival member; it doesn't suffice for `199409L'.
+ (special_symbol): Use cpval instead of ival for T_CONST macros.
+ (install): Remove ivalue argument, since string value now suffices.
+ All callers changed.
+ (initialize_builtins): Switch from int to string values for T_CONST.
+ If not traditional, initialize __STDC_VERSION__ to 199409L.
+ (STDC_VALUE): Remove no-longer-used configuration macro.
+
+Tue Feb 21 06:16:37 1995 Franz Korntner (fkorntne@bazis.nl)
+
+ * gcc.c (read_specs): Use length read when inserting zero.
+
+ * c-lex.c (yylex): For float, build constant in long double.
+
+Tue Feb 21 05:57:42 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * toplev.c (lang_options): Add options for Fortran.
+
+ * gcc.c (default_compilers): Add entries for .f and .F.
+
+Tue Feb 21 05:37:21 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * gcc.c (default_compilers): Remove rule for ".ada".
+ Pass .ads or .adb suffix to -dumpbase, depending on input filename.
+
+ * toplev.c (compile_file): Initialize input_file_stack before
+ calling lang_init, not after.
+ * c-lex.c (check_newline): Give warning if unrecognized data on #line.
+ (yylex): Give error for unterminated string constant.
+
+Mon Feb 20 14:46:56 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * varasm.c (output_constant): Strip NOP_EXPRs for SET_TYPE too,
+ by using AGGREGATE_TYPE_P macro.
+
+Mon Feb 20 14:39:57 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * config/svr4.h (ASM_OUTPUT_SOURCE_LINE): Use assemble_name.
+
+Mon Feb 20 15:26:05 1995 Doug Evans <dje@cygnus.com>
+
+ * config.sub (sun4sol2): Alias for sparc-sun-solaris2.
+
+Sat Feb 18 16:15:33 1995 Mike Stump <mrs@cygnus.com>
+
+ * libgcc2.c (__unwind_function): New function to support stack
+ unwinding on rs6000 for g++ exception handling.
+
+Sat Feb 18 13:55:02 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * tree.h (get_set_constructor_bytes): Fix prototype.
+ * varasm.c (output_constructor): Fix typo byte_size -> size.
+
+Sat Feb 18 12:36:12 1995 Doug Evans <dje@cygnus.com>
+
+ Lynx patches from various Cygnus people.
+ * config.sub: Recognize lynx* as lynxos.
+ * configure (i386-lynx): Set xm_file to i386/xm-lynx.h
+ Set tmake_file to i386/t-i386bare.
+ (m68k-lynx): Set xm_file to m68k/xm-lynx.h.
+ Set tmake_file to m68k/t-lynx.
+ (rs6000-lynxos*): New target.
+ (sparc-lynxos*): Set xm_file to sparc/xm-lynx.h.
+ Set tmake_file to sparc/t-sunos41.
+ * config/lynx.h (LIB_SPEC, STARTFILE_SPEC): Update to LynxOS 2.2.2.
+ (FUNCTION_PROFILE): Undef.
+ * config/xm-lynx.h (HOST_BITS_PER_CHAR): Delete.
+ (HOST_BITS_PER_{SHORT,INT,LONG,LONGLONG}): Likewise.
+ (mktemp): Provide our own, lynx's definition isn't standard.
+ * i386/t-i386bare (LIBGCC1): Define to empty instead of libgcc1.null.
+ (CROSS_LIBGCC1): Likewise.
+ * i386/xm-lynx.h: New file.
+ * m68k/lynx.h (FUNCTION_VALUE): Redefine.
+ (LIBCALL_VALUE, FUNCTION_VALUE_REGNO_P, NEEDS_UNTYPED_CALL): Likewise.
+ * m68k/t-lynx: New file.
+ * m68k/xm-lynx.h: New file.
+ * rs6000/lynx.h: New file.
+ * rs6000/rs6000.h (SUBTARGET_OVERRIDE_OPTIONS): Define.
+ (OVERRIDE_OPTIONS): Call it.
+ * rs6000/x-lynx: New file.
+ * rs6000/xm-lynx.h: New file.
+ * sparc/xm-lynx.h: New file.
+
+Thu Feb 16 17:02:51 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * config/mips/mips.h (enum processor_type): Add PROCESSOR_R4650.
+ * config/mips/mips.c (override_options): Use PROCESSOR_R4650 for
+ the 4650, not PROCESSOR_R4600. Check for it when doublechecking
+ mips_isa level.
+ * config/mips/mips.md: Add r4650 to cpu attr. Update functional
+ units for r4650.
+ (mulsi3): If TARGET_MAD, generate mulsi3_r4650.
+ (mulsi3_r4650): New instruction, mul directly to register file,
+ supported on r4650.
+
+Thu Feb 16 11:44:51 1995 Michael Meissner <meissner@cygnus.com>
+
+ * rs6000/eabi.h (SUBTARGET_SWITCHES): Add support for
+ -mstrict-align to control whether STRICT_ALIGNMENT is 1 or 0.
+ (STRICT_ALIGNMENT): Redefine, to be 1 if -mstrict-align used.
+
+Wed Feb 15 13:03:38 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * libgcc2.c: Repair botch in application of patch.
+
+Tue Feb 14 16:00:52 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * tree.c (get_set_constructor_bytes): New function. Replaces ...
+ (get_set_constructor_words): ... removed old function.
+ * tree.h: get_set_constructor_words -> get_set_constructor_bytes.
+ * expr.c (store_constructor): Don't use get_set_constructor_words.
+ * varasm.c (const_hash): Add support for SET_TYPE constructors.
+ (record_constant_1): Likewise.
+ (copy_constant): Likewise.
+ (output_constant): Likewise. (Also SET_TYPE INTEGER_CSTs.)
+
+Tue Feb 14 08:05:07 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.c (stabilize_reference_1): No longer static.
+ * tree.h (stabilize_reference_1): Add declaration.
+
+Mon Feb 13 19:37:15 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * config/mips/gnu.h: Rewritten to use ELF object format.
+ * config/gnu.h (GNU_CPP_PREDEFINES): New macro.
+ * config/i386/gnu.h (CPP_PREDEFINES): Use GNU_CPP_PREDEFINES macro.
+ * config/i386/gnuelf.h: Likewise.
+
+Mon Feb 13 14:06:04 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * libgcc2.c (__default_new_handler): Don't call write if
+ inhibit_libc is defined.
+ (__pure_virtual): Ditto.
+
+Mon Feb 13 16:42:38 1995 Doug Evans <dje@cygnus.com>
+
+ * a29k/a29k-udi.h (DBX_DEBUGGING_INFO): Define.
+ (PREFERRED_DEBUGGING_TYPE): Define.
+
+ * expmed.c (store_split_bit_field): If value is VOIDmode,
+ pass word_mode to force_reg.
+
+ * varasm.c (function_section): New function.
+ (assemble_start_function): Call it.
+ * output.h (function_section): Declare it.
+ * final.c (final_scan_insn): Call function_section instead of
+ text_section.
+ * dwarfout.c (dwarfout_begin_block): Likewise.
+ (dwarfout_end_block): Likewise.
+ (dwarfout_label): Likewise.
+ (dwarfout_begin_function): Likewise.
+ (dwarfout_end_function): Likewise.
+ (dwarfout_line): Likewise.
+
+ * flow.c (find_basic_blocks): Revise calculation of when to
+ make another pass.
+
+ * libgcc2.c (exit): Don't call __do_global_dtors if
+ INIT_SECTION_ASM_OP and OBJECT_FORMAT_ELF.
+
+ * Makefile.in (libgcc1.S): New target.
+
+Mon Feb 13 12:45:11 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * tree.c (permanent_allocation): Pop function_maybepermanent_obstack,
+ not hardwired &maybepermanent_obstack.
+
+Mon Feb 13 12:10:31 1995 J.T. Conklin <jtc@netbsd.org>
+
+ * config/netbsd.h: Changed so that macro definitions used when gcc
+ is integrated into the NetBSD source tree are not defined unless
+ NETBSD_NATIVE is defined too.
+
+ * configure (*-netbsd-*): Rename netbsd config files so that they don't
+ have the machine type in them.
+ * i386/netbsd.h: Renamed from i386/netbsd-i386.h.
+ * m68k/netbsd.h: Renamed from m68k/netbsd-m68k.h.
+ * ns32k/netbsd.h: Renamed from ns32k/netbsd32k.h.
+
+Mon Feb 13 15:05:09 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * collect2.c (main): Remember all the .o files specified on the
+ command line, and scan them directly if COLLECT_SCAN_OBJECTS.
+ * rs6000/rs6000.h (COLLECT_SCAN_OBJECTS): Define.
+
+ * stmt.c (warn_if_unused_value): Don't warn about dereferenced
+ references.
+
+Mon Feb 13 14:00:51 1995 Jim Wilson <wilson@mole.gnu.ai.mit.edu>
+
+ * m68k.h (RTX_COSTS): Fix typo from last change.
+
+ * reload1.c (last_spill_reg): Move definition to top of file.
+ Don't initialize here.
+ (reload): Intialize here to -1.
+
+Mon Feb 13 09:29:49 1995 Paul Eggert <eggert@twinsun.com>
+
+ * fixinc.svr4 (longlong_t, u_longlong_t):
+ Work around bug in Solaris 2.4 <sys/types.h>.
+
+Mon Feb 13 08:31:18 1995 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.h, powerpc.h (CPP_SPEC): Define _POSIX_SOURCE if -posix.
+
+ * rs6000.md (extendsfdf2): Undo 30 Nov 94 change. Use float_extend
+ instead of SUBREG and restore fmr instruction for differing FPRs.
+
+Mon Feb 13 05:25:09 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * convert.c (convert_to_{pointer,real,integer,complex}):
+ Handle references.
+
+Mon Feb 13 08:14:10 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-parse.in (ALIGN): Remove unused token.
+
+ * loop.c (mark_loop_jump): Remove bogus assignments to LABEL_
+ fields in default case.
+
+Mon Feb 13 07:55:30 1995 Torbjorn Granlund (tege@tiny.cygnus.com)
+
+ * a29k.h (TARGET_MULTM): New #define.
+ (TARGET_SWITCHES): Recognize "-mno-multm".
+ * a29k.md (smulsi3_highpart, umulsi3_highpart, mulsidi3, umulsidi3):
+ Make these conditional on TARGET_MULTM.
+
+ * a29k.md (multm matcher): Delete.
+ (multmu matcher): Delete.
+ (mulsidi3 DEFINE_SPLIT): Generate RTL for smulsi3_highpart instead of
+ for deleted pattern. Fix typo in preparation code.
+ (umulsidi3 DEFINE_SPLIT): Analogous change.
+
+Mon Feb 13 07:09:02 1995 Peter Flass (FLASS@LBDRSCS.BITNET)
+
+ * i370/mvs.h (ASM_OUTPUT_ASCII): Don't duplicate first char.
+
+Mon Feb 13 06:51:07 1995 Samuel A. Figueroa (figueroa@CS.NYU.EDU)
+
+ * i386/os2.h (OBJECT_SUFFIX): New macro.
+ (LIB_SPEC, STARTFILE_SPEC): Adjust to include better set of libs.
+
+ * i386/xm-os2.h (DIR_SEPARATOR): Define if not already.
+ (strcasecmp): New definition.
+
+ * toplev.c (main): Look at DIR_SEPARATOR for finding last component.
+ * cccp.c (do_include, is_system_include, open_include_file):
+ Handle DIR_SEPARATOR.
+
+Sun Feb 12 20:20:28 1995 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * config/sparc/sysv4.h (ASM_OUTPUT_SECTION_NAME): Check to make
+ sure DECL is non-null before trying to reference it.
+ * config/mips/elf64.h (ASM_OUTPUT_SECTION_NAME): Likewise.
+
+Sun Feb 12 19:55:45 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * calls.c (expand_call): Add missing paren in last change.
+
+Sat Feb 11 18:09:27 1995 Jim Wilson <wilson@cygnus.com>
+
+ * libgcc2.c (L_fixunsxfsi, L_fixunsdfsi, L_fixunssfsi): Undef
+ normal types before including limits.h.
+
+ * calls.c (expand_call): When setting n_named_args, depend on new
+ macro STRICT_ARGUMENT_NAMING.
+
+ * expr.c (expand_builtin, case BUILT_IN_NEXT_ARG): Don't warn when
+ no argument if this is a varargs routine.
+
+Sat Feb 11 16:08:13 1995 Samuel A. Figueroa (figueroa@CS.NYU.EDU)
+
+ * gcc.c (specs): Use %O instead of "o" for object file suffix.
+ (do_spec_1, case 'O'): New option.
+
+Sat Feb 11 14:58:19 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k/mot3300.h (RETURN_IN_MEMORY): Fix error in last change.
+
+Sat Feb 11 13:09:28 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cexp.y (%union): Delete VOIDVAL and SVAL; unused.
+
+ * c-decl.c (grokdeclarator): Use NAME, not IDENTIFIER_POINTER
+ of DECLARATOR for error messages; DECLARATOR might be null.
+
+ * expmed.c (expand_divmod): Always call expand_twoval_binop with
+ psuedos as targets.
+
+Fri Feb 10 14:55:05 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * caller-save.c: Replace MAX_UNITS_PER_WORD with MIN_UNITS_PER_WORD.
+ * h8300.h, mips.h, rs6000.h, sparc.h: Likewise.
+
+ * alpha.c (direct_return): Can't if have outgoing args.
+
+ * expr.c (store_constructor, ARRAY_TYPE): Use code for
+ non-integer INDEX for non-integer ELTTYPE size.
+ Allow INDEX to be zero in code and divide size by BITS_PER_UNIT.
+
+ * fold-const.c (fold): Don't modify tree with newly-allocated
+ nodes; instead make new tree in those cases.
+
+Wed Feb 8 15:13:49 1995 Doug Evans <dje@cygnus.com>
+
+ * sparc/sparc.c (v9_regcmp_p): New function.
+ (v9_regcmp_op): Call it.
+ * sparc/sparc.md (movsicc): New pattern.
+ (movdicc, movsfcc, movdfcc, movtfcc): Likewise.
+
+ * sparc/sparc.c (sparc64_initialize_trampoline): Use gen_flush
+ instead of knowing what pattern looks like.
+
+ * sparc/sparc.md (nonlocal_goto): Use Pmode instead of SImode.
+
+Wed Feb 8 10:05:11 1995 David J. MacKenzie <djm@geech.gnu.ai.mit.edu>
+
+ * config.sub: Add a blank in the #! line for 4.2BSD, Dynix, etc.
+
+Wed Feb 8 02:52:21 1995 Jeffrey A. Law <law@mole.gnu.ai.mit.edu>
+
+ * pa.md (call, call_value): Emit save of the PIC register
+ with "emit_insn" before emitting the call insn itself.
+
+Tue Feb 7 15:19:40 1995 Jim Wilson <wilson@cygnus.com>
+
+ * sh.c (prepare_scc_operands, from_compare): Force constant 0 into
+ register for unsigned comparisons.
+
+ * sh.c: Correct errors in comments.
+ (calc_live_regs, expand_acall): Delete TARGET_SMALLCALL support.
+ (need_slot): Add comment. Delete test of INSN_ANNULLED_BRANCH_P.
+ (print_operand_address): Delete '*', '^', '!' support.
+ (synth_constant): Call zero_extend* instead of and*. Call ashlsi3_k
+ instead of ashlsi3_n.
+ (prepare_scc_operands): Abort for NE case.
+ (output_move_double, output_far_jump, output_branch): Delete commented
+ out code. Don't output assembler comments.
+ (gen_ashift): Don't call addsi3.
+ (fixit): Delete redundant test for QImode constants.
+ (hi_const): Delete TARGET_SHORTADDR support.
+ (find_barrier): Don't put constant pool between mova and its label.
+ (add_function, seen_function, bsr_operand, mac_operand,
+ fake_shift): Delete.
+ (sh_expand_prologue, expand_acall): Delete TARGET_BSR support.
+ (general_movsrc_operand): Don't reject non-I CONST_INT.
+ * sh.h: Correct errors in comments.
+ (CONDITIONAL_REGISTER_USAGE): Delete TARGET_NOSAVE support.
+ (TARGET_MAC, TARGET_TRYR0, TARGET_NOSAVE, TARGET_SMALLCALL,
+ TARGET_PARANOID, TARGET_RETR2, TARGET_SHORTADDR, TARGET_BSR): Delete.
+ (TARGET_SWITCHES): Delete above options.
+ (OVERRIDE_OPTIONS): Delete TARGET_BSR support.
+ (FUNCTION_BOUNDARY): Use 32 bit alignment when not TARGET_SMALLCODE.
+ (FIRST_RET_REG): Delete TARGET_RETR2 support.
+ (MODE_DISP_OK_[21]): Delete TARGET_TRYR0 support.
+ (EXTRA_CONSTRAINT_U): Delete.
+ (CONST_COSTS): For logical operations, give L constants cost 1.
+ (PRINT_OPERAND_PUNCT_VALID_P): Delete '*', '^', '!'.
+ * sh.md: Correct errors in comments. Delete all assembler comments.
+ Delete commented out patterns. Delete all peepholes but two.
+ Delete all define_splits but one. Delete all `combiner' patterns.
+ (mpy): Correct multiply latencies.
+ (needs_delay_slot, hit_stack, interrupt_function, in_delay_slot,
+ define_delay): Correct and/or simplify all reorg related definitions.
+ (addsi3_real): Delete.
+ (addsi3): Use arith_operand for argument 1.
+ (mulhisi3): Use arith_reg_operand not mac_operand.
+ (and_ffff, and_ff): Delete.
+ (andsi3): Handle constant 255 specially.
+ (rot*): Correct and/or simplify all rotate patterns.
+ (ashlsi3_k): Delete clobber of T bit. Output add for 1 bit shift.
+ (ashlsi3_n, lshrsi3_n): Delete use of fake_shift.
+ (negc): Correct pattern by adding set of T bit.
+ (extend*): Delete 'u' and 'U' constraint cases.
+ (pop): Separate 'l' and 'x' constraint cases.
+ (movsi-1): Better code for move to T bit case.
+ (bsr, bsr_value, mac): Delete.
+
+Tue Feb 7 14:23:52 1995 Doug Evans <dje@cygnus.com>
+
+ * sparc/sparc.md (*): Give names to all anonymous patterns.
+
+Mon Feb 6 23:41:09 1995 Stephen L Moshier <moshier@world.std.com>
+
+ * sparc/sysv4.h (ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE): Remove
+ tests for host == target format and endianness.
+
+Mon Feb 6 16:52:38 1995 Torbjorn Granlund (tege@tiny.cygnus.com)
+
+ * i386.h (RTX_COSTS): Rewrite.
+
+ * m68k/lb1sf68.asm (__udivsi3, __divsi3, __umodsi3, __modsi3):
+ Rewrite to actually work for more than a few small operands,
+ and to be reasonably small.
+ (__mulsi3): Eliminate usage of link register (i.e. a6).
+ (shift patterns): Delete.
+ (__umulsi3): Delete.
+ * t-m68kbare (LIB1ASMFUNCS): Remove _umulsi3.
+ * t-vxworks68: Likewise.
+
+Mon Feb 6 15:22:39 1995 Jim Wilson <wilson@cygnus.com>
+
+ * ginclude/va-i960.h (va_start): Add __builtin_next_arg call.
+
+ * sh/sh.c (sh_function_arg): Don't reject unaligned structures.
+ (sh_function_arg_partial_nregs): Likewise.
+
+ * sparc/sparc.md (movsf-1, movdf-1, movtf-1): Use 'F' not 'E'.
+
+ * sparc/sol2.h (STARTFILE_SPEC): Delete explicit /usr/ccs/lib/
+ pathnames.
+
+ * reload1.c (alter_reg): New variable stack_slot. Apply anti
+ BYTES_BIG_ENDIAN correction to stack slot address stored in
+ spill_stack_slot.
+
+ * jump.c (jump_optimize): When searching for a LOOP_END note to move,
+ stop if we find a LOOP_BEG note first.
+
+Mon Feb 6 15:03:35 1995 Doug Evans <dje@cygnus.com>
+
+ * i386/sysv3.h (DBX_DEBUGGING_INFO): Define.
+ (PREFERRED_DEBUGGING_TYPE): Define.
+
+Mon Feb 6 11:56:14 1995 Jeffrey A. Law <law@mole.gnu.ai.mit.edu>
+
+ * pa.md: Replace "misc" attribute with "multi" in recentlyadded
+ soft-float code.
+
+ * pa-osf.h (TARGET_DEFAULT): Protect definition.
+
+Mon Feb 6 11:52:25 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * fixincludes: When changing <assert.h> to include <stdio.h> or
+ <stdlib.h>, make it include them only for C++.
+
+Sun Feb 5 21:39:41 1995 Torbjorn Granlund <tege@cygnus.com>
+
+ * pa.c (globally): Use GEN_INT.
+ (emit_move_sequence): Use expand_inc instead of plus_constant
+ (generates less rtl).
+ * pa.md (globally): Use GEN_INT.
+
+ * pa.h (PREDICATE_CODES): Fix many errors. Enable.
+
+ * m68k.h (RTX_COSTS): Add special cases for a plain 68000.
+
+ * expmed.c (mul_cost, div_cost): New variables.
+ (mul_widen_cost, mul_highpart_cost): New variables.
+ (init_expmed): Init new variables.
+ (expand_mult_highpart): New argument, MAX_COST.
+ Use new argument in several places. Simplify code that tries
+ widening multiply variants.
+ (expand_divmod): New variables MAX_COST, EXTRA_COST.
+ Initialize MAX_COST dependent on REM_FLAG.
+ Calculate and pass cost in all calls of expand_mult_highpart.
+
+Sat Feb 4 13:19:29 1995 Jim Wilson <wilson@cygnus.com>
+
+ * mips/abi64.h, mips/cross64.h, mips/iris6.h: New files.
+ * mips/iris5.h (TARGET_DEFAULT): Add #ifndef/#endif around define.
+ * mips/mips.c (mips_isa_string): Add mips4 to comment.
+ (large_int): Delete code for handling 64 bit constants.
+ (mips_const_double_ok): For irix6, reject all floating point constants.
+ (mips_move_2words): Use dli not li for 64 bit constants.
+ Use dla not la for 64 bit addresses.
+ (output_block_move): Likewise.
+ (function_arg): Add support for 64bit ABI.
+ (override_options): Add support for mips4 and R8000.
+ (print_operand): Handle new modifiers 'B', 'b', 'T', 't'.
+ Make 'X' case work for 64 bit host.
+ (mips_output_filename): Use ASM_OUTPUT_FILENAME.
+ (mips_asm_file_start): Go to text section for 64bit ABI.
+ (compure_frame_size, save_restore_insns, function_prologue,
+ mips_expand_prologue, function_epilogue): Add support for 64 bit ABI.
+ (type_dependent_reg, mips_function_value): New functions.
+ * mips/mips.h (__PTR_TO_INT, __INT_TO_PTR): Delete.
+ (enum processor_type): Add R8000.
+ (mips_isa_string, CC1_SPEC): Add mips4 to comment.
+ (CONDITIONAL_REGISTER_USAGE): Use SUBTARGET_CONDITIONAL_REGISTER_USAGE.
+ (SUBTARGET_CONDITIONAL_REGISTER_USAGE): New macro.
+ (ASM_SPEC, LINK_SPEC, CPP_SPEC): Add mips4 support.
+ (MIPS_TEMP[12]_REGNUM): Change to avoid clobbering 64bit abi
+ parameter registers.
+ (SMALL_INT, SMALL_INT_UNSIGNED, CONST_OK_FOR_LETTER_P): Fix for 64
+ bit host.
+ (ABI_64BIT): New macro.
+ (REG_PARM_STACK_SPACE): Use UNITS_PER_WORD not 4.
+ (GO_IF_LEGITIMATE_ADDRESS, CONSTANT_ADDRESS_P, LEGITIMATE_CONSTANT,
+ LEGITIMIZE_ADDRESS): Don't allow CONST addresses for Irix6.
+ (ASM_OUTPUT_FILENAME): New macro.
+ (ASM_OUTPUT_ADDR_DIFF_ELT): Add 64 bit ABI support.
+ * mips/mips.md (type attribute): Add fmadd.
+ (cpu attribute): Add r8000.
+ (umaddi+1, ..., umadddi+8): Add pattern for multiply accumulate.
+ (movdi): Legitimize addresses, just like movsi does.
+ (loadgp): New pattern for 64 bit ABI.
+ (shift patterns): Use INTVAL instead of XINT for constants.
+ (jump, tablejump_interal[12]): Add 64 bit ABI support.
+ (movsicc-8, ..., movsicc): Add patterns for conditional moves.
+ * mips/t-cross64, mips/t-iris6, mips/x-iris6, mips/xm-iris6.h:
+ New files.
+ * configure: Add irix6 and irix5cross64 configurations.
+ * ginclude/va-mips.h (*): Change __mips==3 to __mips>=3.
+ (sgidefs.h): Include if _MIPS_SIM is defined.
+ (va_start): Add support for 64 bit ABI.
+
+Sat Feb 4 10:31:37 1995 Doug Evans <dje@cygnus.com>
+
+ * dbxout.c (dbxout_source_file): Don't switch to text section if
+ in function with section attribute. Print Ltext label to correct
+ file (important on mips).
+
+Fri Feb 3 14:43:23 1995 Michael Meissner (meissner@cygnus.com)
+
+ * rs6000/rs6000.md (call, call_value): If building for System V.4
+ or eABI, function pointers are just pointers, not pointers to a
+ three word area.
+
+Thu Feb 2 15:50:26 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * fixincludes: When fixing bool in <curses.h>, permit whitespace
+ before the semicolon. Needed on AIX 3.2.5.
+
+Thu Feb 2 12:06:12 1995 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.md (smax:SF define_split): Change match_operand typo to
+ match_dup.
+ (smin:SF define_split): Likewise.
+ (smax:DF define_split): Likewise.
+ (smin:DF define_split): Likewise.
+
+Wed Feb 1 16:50:18 1995 Michael Meissner (meissner@cygnus.com)
+
+ * config.sub: Add support for powerpc-*-{elf,svr4,eabi}.
+ * configure: Ditto.
+
+ * rs6000/xm-sysv4.h: New file, to support building GCC for a
+ System V.4 PowerPC system.
+ * rs6000/sysv4.h: Ditto.
+ * rs6000/x-sysv4: Ditto.
+
+ * rs6000/eabi.h: New file, to support building GCC for an embedded
+ PowerPC system.
+
+ * rs6000/rs6000.h (TARGET_SWITCHES): Add -mmultiple, -mno-multiple
+ to control emitting load/store multiple instructions. On the
+ power, this is on by default, and on the powerpc it is off.
+ (SUBTARGET_SWITCHES): New macro, which defaults to nothing to
+ allow a subtarget to add new switches.
+ (SAVE_FP_*, RESTORE_FP_*): New macros that give the prefix and
+ suffix to use for the functions that save and restore the floating
+ point registers.
+
+ * rs6000/rs6000.c (output_prolog): Use TARGET_MULTIPLE instead of
+ TARGET_POWER to control whether to emitt load/store multiple
+ instructions. Use the SAVE_FP_*/RESTORE_FP_* macros instead of
+ using the hardwired AIX names for the functions to save and
+ restore the floating point registers.
+ (output_epilog): Likewise.
+ (print_operand_address): Do not prepend a '.' for %z when using
+ the ELF object file format.
+ (svr4_traceback): New function to emit the word before the
+ procedure prologue that System V.4 expects to do tracebacks.
+ (output_prolog): Call svr4_traceback under ELF systems.
+ (output_epilog): Omit AIX style traceback tables for ELF systems.
+ (output_function_profiler): Abort for now in the ELF case.
+
+ * rs6000/rs6000.md (load_multiple, store_multiple): Test against
+ TARGET_MULTIPLE instead of TARGET_POWER.
+
+Tue Jan 31 19:27:43 1995 Torbjorn Granlund <tege@cygnus.com>
+
+ * pa.h (REAL_ARITHMETIC): Define.
+ (ASM_OUTPUT_DOUBLE): Rewrite.
+ (ASM_OUTPUT_FLOAT): Rewrite.
+ * pa.md (SF and DF move): Use constraint 'E' instead of 'F'.
+ * pa.c (singlemove_string): Make case with SFmode CONST_DOUBLE abort.
+ (print_operand): #ifdef out CONST_DOUBLE cases.
+
+Tue Jan 31 19:27:43 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * pa/pa.h (TARGET_SOFT_FLOAT): New macro.
+ (TARGET_SWITCHES, CPP_SPEC, CONDITIONAL_REGISTER_USAGE, FUNCTION_VALUE,
+ LIBCALL_VALUE, FUNCTION_VALUE_REGNO_P, FUNCTION_ARG_REGNO_P,
+ FUNCTION_ARG, ASM_DECLARE_FUNCTION_NAME, GO_IF_LEGITIMATE_ADDRESS,
+ RTX_COSTS): Use TARGET_SOFT_FLOAT.
+ * pa/pa.md (*sf*, *df*, etc): Make all floating point patterns depend
+ on ! TARGET_SOFT_FLOAT.
+ (movsi, movdi, movsf, movdf): Add patterns for TARGET_SOFT_FLOAT.
+
+Tue Jan 31 15:53:04 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * toplev.c (lang_options): Add -f{no-,}check-new.
+
+Tue Jan 31 13:55:37 1995 Doug Evans <dje@cygnus.com>
+
+ * mips/mips.h (ASM_DECLARE_FUNCTION_NAME): Ensure section is .text if
+ no section attribute.
+ * mips/elf64.h (ASM_OUTPUT_SECTION_NAME): Use asm_out_text_file for
+ functions.
+
+Tue Jan 31 13:26:42 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * libgcc2.c: Include <limits.h>, not "glimits.h".
+
+Mon Jan 30 16:34:24 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * c-common.c (type_for_size): Try to match on int before other
+ types (which might be the same size).
+ (type_for_mode): Ditto.
+
+Sat Jan 28 16:28:15 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * config/sparc/sysv4.h (ASM_OUTPUT_SECTION_NAME): #undef before
+ defining.
+
+Sat Jan 28 13:54:23 1995 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.md (call, call_value): Always save the PIC register before
+ a call.
+
+Sat Jan 28 07:31:26 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-typeck.c (c_expand_return): Refine check for returning pointer
+ to local variable to allow subtracting a pointer from it.
+
+ * calls.c (expand_call): When emitting queue for each arg,
+ call protect_from_queue; put in initial_value so EXPR_LIST in
+ is_const case won't have QUEUED.
+
+Sat Jan 28 04:36:46 1995 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.md (call_internal_reg): Use an even faster sequence for
+ TARGET_FAST_INDIRECT_CALLS.
+ (call_value_internal_reg): Likewise.
+
+Fri Jan 27 21:28:51 1995 Ronald F. Guilmette (rfg@segfault.us.com)
+
+ * config.sub (unixware, svr4): Treat as synonyms for sysv4.
+
+Fri Jan 27 19:36:13 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * config/i386/gnuelf.h: New file.
+
+Fri Jan 27 16:55:05 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * libgcc1.c (perform_lshlsi3, __lshlsi3): Deleted.
+ * libgcc2.c (__lshldi3): Deleted.
+ * Makefile.in (LIB1FUNCS): Delete _lshlsi3.
+ (LIB2FUNCS): Delete _lshldi3.
+
+ * expr.c (expand_expr, case MINUS_EXPR): Remove bogus operand swap.
+
+ * optabs.c (expand_binop): Add missing test for VOIDmode
+ before calling convert_to_mode.
+
+ * final.c (high_{block,function}_linenum): New variables.
+ (final_start_function): Initialize them.
+ (final_end_function): Pass highest line number to function end
+ debugging routines.
+ (final_scan_insn): Pass highest line number in block to block end
+ debugging function.
+ (output_source_line): Update highest line in block and function.
+
+Thu Jan 26 03:46:35 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * configure (i[345]86-*linux*): Set $extra_parts if $elf.
+ (*-*-gnu*): Likewise.
+
+Wed Jan 25 18:11:19 1995 Jim Wilson <wilson@cygnus.com>
+
+ * sh.c (prepare_scc_operands): Force sh_compare_op1 to a register if
+ it is an invalid constant.
+ (output_branch): Add cases for 4, 8, and 18. Correct branch offsets
+ in comments.
+ (find_barrier): Correct test for move instructions that need to be
+ fixed by verifying that the set source is a bad constant.
+ (arith_reg_or_0_operand): New function.
+ * sh.h (CONST_OK_FOR_LETTER_P): Add case for 'N'. Correct comment.
+ (ADJUST_INSN_LENGTH, SHORTEN_WITH_AJUST_INSN_LENGTH): New macros.
+ * sh.md (define_attr type): Combine pcloadsi and pcloadhi into pcload.
+ (*): Likewise for all patterns that use them.
+ (define_attr length): Delete cases for pcloadsi and pcloadhi.
+ Modify branch offsets and lengths to be correct. Correct comment.
+ (*): Correct length attributes for all patterns.
+ (in_delay_slot): Delete maybe value. Change default case from yes to
+ no. Delete case for lengths of 4, 6, 8, 10, and 12.
+ (cmpeq_0, cmpeq_0-1, cmpeq_0-2): Delete patterns.
+ (cmpeqsi_t): Delete case with constant as first operand.
+ (cmpgtsi_t, cmpgesi_t): Use arith_reg_or_0_operand not arith_operand.
+ Put register cases first.
+ (cmpgeusi_t, cmpgtusi_t): Delete cases for comparing against zero.
+ (jump): Call output_far_jump if insn length >= 14 instead of == 14.
+ (casesi): Use arith_reg_operand not arith_operand for operand 2.
+
+ * fixincludes (strings.h): Fix return type of strlen.
+
+ * expr.c (expand_expr, case MIN_EXPR): If must emit multiple
+ instructions, then don't allow a MEM target.
+
+Wed Jan 25 17:07:47 1995 Pat Rankin (rankin@eql.caltech.edu)
+
+ * cccp.c (do_include): For VMS, don't attempt to
+ treat `#include X' as `#include <X.h>' unless `X' has already been
+ macro expanded.
+ (main): For VMS, do a better job of picking out the base name from
+ argv[0]'s absolute name.
+ * vax/xm-vms.h (FAILURE_EXIT_CODE): Define.
+
+Wed Jan 25 14:50:45 1995 David S. Miller (davem@nadzieja.rutgers.edu)
+
+ * genattrtab.c (check_attr_value): Change error message text.
+ (simplify_test_exp): Likewise.
+ * stmt.c (expand_asm, expand_asm_operands): Likewise.
+ * mips.c (print_operand, print_operand_address): Likewise.
+ * dsp16xx.c (dsp16xx_reg_class_from_letter): Likewise.
+ (limit_reload_class, double_reg_to_memory): Likewise.
+ (print_operand_address, emit_1600_core_shift): Likewise.
+ (gen_tst_reg, gen_compare_reg): Likewise.
+ * dsp16xx.md (compare): Likewise.
+ * unroll.c (find_splittable_givs): Likewise.
+
+Wed Jan 25 13:21:10 1995 Matthias Pfaller (leo@marco.de)
+
+ * configure (ns32k-pc532-netbsd): Use netbsd32k.h instead of netbsd.h.
+ * ns32k/netbsd32k.h: Renamed from netbsd.h.
+ Don't include ansi.h.
+ Include config/netbsd.h and delete definitions included from it.
+ * ns32k/xm-netbsd.h (HAVE_ATEXIT): Deleted.
+
+Wed Jan 25 12:53:40 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k/mot3300.h (DEFAULT_PCC_STRUCT_RETURN): Define as zero.
+ (RETURN_IN_MEMORY): Small aggregates are to be returned in d0.
+
+Wed Jan 25 12:48:43 1995 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (handle_directive): Fix typo: '\' caused next char to
+ be copied blindly, which was an error if !traditional and if
+ the next char was newline or one of <\'"/.
+
+Wed Jan 25 08:15:49 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * jump.c: Include expr.h after insn-config.h and insn-flags.h.
+
+Tue Jan 24 23:19:28 1995 Doug Evans <dje@cygnus.com>
+
+ Improved conditional move support from Richard Earnshaw.
+ * optabs.c (movcc_gen_code): New variable.
+ (init_optabs): Initialize it.
+ (emit_conditional_move): New function.
+ (can_conditionally_move_p): New function.
+ * combine.c (simplify_set): Call it.
+ * expr.h: (emit_conditional_move): Declare it.
+ (can_conditionally_move_p): Likewise.
+ (movcc_gen_code): Likewise.
+ * genopinit.c (optabs): Add entry for movcc_gen_code.
+ * genconfig.c (main): Delete #ifndef around HAVE_conditional_move.
+ * jump.c (jump_optimize): Try to emit a conditional move insn before
+ trying a store-flag insn.
+ * alpha.md (movsicc): New named pattern.
+ (movdicc, movsfcc, movdfcc): Likewise.
+ (SImode conditional move): New matcher.
+ * sparc.h (HAVE_conditional_move): Delete.
+
+ * configure: Recognize and ignore --x-* options.
+
+Mon Jan 23 23:23:33 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * config/svr4.h (ASM_OUTPUT_SECTION_NAME): Renamed from
+ ASM_OUTPUT_SECTION. The old name was a typo.
+ (ASM_OUTPUT_SECTION_NAME): Take proper number of args.
+
+Mon Jan 23 18:51:38 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * collect2.c (main): Check LD_INIT_SWITCH and LD_FINI_SWITCH
+ separately.
+ (scan_prog_file): Don't add shared library initializers or
+ finalizers to list if LD_INIT_SWITCH or LD_FINI_SWITCH are
+ defined, respectively.
+
+Mon Jan 23 18:45:13 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * config/mips/mips.c (override_options): Permit any small integral
+ mode in the HI/LO registers.
+
+Mon Jan 23 15:41:10 1995 Steve Chamberlain <sac@cygnus.com>
+
+ * h8300.md (table_jump_h8300, table_jump_h8300h): Constrain
+ operand to use register.
+
+Sat Jan 21 00:01:08 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * configure (*-*-gnuelf*): Set elf=yes.
+ (*-*-gnu*): Use ${cpu_type}/gnuelf.h under --with-elf.
+
+Fri Jan 20 20:11:17 1995 Jim Wilson <wilson@cygnus.com>
+
+ * combine.c (num_sign_bit_copies): Can handle paradoxical subreg only
+ if LOAD_EXTEND_OP is defined to SIGN_EXTEND.
+
+ * loop.c (record_giv): Initialize new field same_insn.
+ * loop.h (structure induction): Add new field same_insn.
+ * unroll.c (copy_loop_body): When check for shared address givs, use
+ new same_insn field.
+ (find_splittable_givs): New variable v2. Scan givs to set new
+ same_insn field. Use same_insn to indentify address givs to be
+ shared.
+
+ * flow.c (find_basic_blocks): No longer need to check for deleted
+ nonlocal_labels.
+ * function.c (delete_handlers): When clear LABEL_PRESERVE_P,
+ also remove label from nonlocal_label list.
+ * integrate.c (save_for_inline_copying): Add comment that
+ nonlocal_label list should be updated if it ever can be nonzero.
+
+ * sdbout.c (syms.h): Don't include under Linux-based GNU systems.
+
+ * loop.c (scan_loop): For the replace_rtx call, copy the rtx that is
+ being substituted in before the call.
+
+ * sh.c (machine_dependent_reorg): When remove SUBREG, add in
+ SUBREG_WORD to new register number.
+
+ * sh.c (multcosts): Do not compute cost of constant power-of-two
+ multiplies as if they were shifts. Reduce multiply cost from 5 to 3.
+ Delete variable insn_cost.
+
+Fri Jan 20 14:21:49 1995 Mike Stump <mrs@cygnus.com>
+
+ * stmt.c (expand_cleanups): Add 4th argument to indicate if code
+ needs to be expanded for the cleanup.
+ (expand_goto_internal): Ditto.
+ (bc_expand_goto_internal): Ditto.
+ (fixup_gotos): Ditto.
+ (expand_end_bindings): Ditto. We now always call expand_cleanups,
+ even after BARRIERs, so that the call to the exception handling
+ routines is always done.
+
+Thu Jan 19 18:39:14 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * config/mips/mips.h (MASK_SINGLE_FLOAT): Define.
+ (MASK_MAD): Define.
+ (TARGET_SINGLE_FLOAT, TARGET_DOUBLE_FLOAT): Define.
+ (TARGET_MAD): Define.
+ (TARGET_SWITCHES): Add single-float, double-float, mad, no-mad,
+ 4650.
+ (ASM_SPEC): For gas, pass down -m4650, and pass -m4650 if -mmad is
+ used.
+ (CC1_SPEC): If -mips3 is used, only set -mfp64 if neither
+ -msingle-float nor -m4650 are used. Don't permit both -mfp64 and
+ -msingle-float, or both -mfp64 and -m4650. If -m4650 is used,
+ pass down -mcpu=r4650.
+ (FIXED_REGISTERS): Change HI and LO to not be fixed.
+ (HARD_REGNO_NREGS): If TARGET_SINGLE_FLOAT, use floating point
+ registers in 4 byte units, not 8 byte units.
+ (SECONDARY_RELOAD_CLASS): Define.
+ (mips_secondary_reload_class): Declare.
+ (LIBCALL_VALUE): If TARGET_SINGLE_FLOAT, only use FP_RETURN if the
+ mode size is <= 4.
+ (REGISTER_MOVE_COST): Use a cost of 12 when moving HI or LO to
+ anything other than a general register.
+ * config/mips/mips.c (function_arg): If TARGET_SINGLE_FLOAT, pass
+ DFmode arguments in general registers.
+ (override_options): Accept 4650 as a cpu type. If
+ TARGET_SINGLE_FLOAT, permit only small floating point modes in
+ floating point registers. Always permit SImode modes in HI/LO
+ registers.
+ (compute_frame_size): If TARGET_SINGLE_FLOAT, only save 4 bytes
+ per floating point register. Align the floating point register
+ save space to an eight byte boundary.
+ (save_restore_insns): If TARGET_SINGLE_FLOAT, save floating point
+ regisers in single precision.
+ (mips_secondary_reload_class): New function.
+ * config/mips/mips.md: Require TARGET_DOUBLE_FLOAT for all double
+ precision floating point insns. Change the multiplication insns
+ to be single instructions which set a register of class l or h or
+ x, as appropriate, rather than explicitly setting HI and/or LO.
+ Use define_expand to avoid generating a shift near a multiply on
+ the r4000. Use match_scratch in the division insns to clobber HI
+ and LO, rather than mentioning them explicitly. Add support for
+ r4650 mad and madu insns.
+ * config/mips/t-ecoff (MULTILIB_OPTIONS): Add mips1/mips3.
+ (MULTILIB_DIRNAMES): Add mips1 mips3.
+
+Wed Jan 18 07:43:53 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.c (stabilize_reference): Fix typo in last change.
+ * expr.c (get_inner_reference): Don't ignore CONVERT_EXPR from
+ non-UNION_TYPE to UNION_TYPE.
+ (expand_expr, case CONVERT_EXPR): Check for conversion to union
+ before checking for not changing mode.
+
+Tue Jan 17 22:33:27 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.c (stabilize_reference, case RTL_EXPR): New case.
+
+Tue Jan 17 18:42:44 1995 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.c (emit_move_sequence): Also handle displacements which
+ do not fit in 14 bits for fp load/store secondary reloads.
+
+Tue Jan 17 13:34:22 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ Avoid bogus errors for C++ lvalues.
+ * c-decl.c (init_decl_processing): Set pedantic_lvalues to pedantic.
+ * fold-const.c (pedantic_non_lvalue): Only force a non-lvalue if
+ pedantic_lvalues is set.
+ * tree.h: Declare pedantic_lvalues.
+
+ Generalize shared truthvalue code to allow for C++ bool.
+ * c-tree.h: Declare boolean_{type,true,false}_node.
+ * c-decl.c (init_decl_processing): Set up
+ boolean_{type,true,false}_node to equal
+ integer_{type,one,zero}_node.
+ * c-common.c (truthvalue_conversion): Use
+ boolean_{type,true,false}_node instead of
+ integer_{type,one,zero}_node.
+ (shorten_compare): Ditto.
+
+Mon Jan 16 07:11:50 1995 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (rescan): Fix typo that caused tokens to be glued
+ together improperly.
+
+Sun Jan 15 21:00:24 1995 Doug Evans (dje@cygnus.com)
+
+ * configure (vintmsg): Delete.
+
+Sat Jan 14 17:50:06 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (get_inner_reference): Only treat offset of PLUS_EXPR
+ as special if second arg is integer constant.
+
+Sat Jan 14 01:28:15 1995 Doug Evans (dje@cygnus.com)
+
+ * expmed.c (extract_bit_field, fields bigger than word case): Count
+ subwords in target. Zero remaining upper bits if unsigned.
+
+ * c-common.c (decl_attributes): Fix typo in packed ignored warning.
+ Fix unrecognized mode warning. Make string comparisons consistent.
+ Support machine attributes with arguments. Make noreturn/volatile
+ warnings consistent with others.
+
+ * a29k.h (INIT_CUMULATIVE_INCOMING_ARGS): Reserve two regs for
+ caller's lr0,lr1.
+ * a29k.c (incoming_reg): Keep regstack aligned to even boundary.
+
+Fri Jan 13 20:29:30 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * sdbout.c (plain_type_1): For LONG_LONG_TYPE_SIZE, return T_[U]LONG
+ instead of 0 (i.e. T_VOID).
+
+ * optabs.c (expand_binop): Do not force constant shift-count to
+ a register, to allow possible widening; do not convert_to_mode
+ mode{1,2} or copy_to_mode_reg if mode{1,2} is VOIDmode.
+ * m68k.md (zero_extendsidi2): New pattern.
+ (extendqidi2, extendhidi2, extendsidi2, extendplussidi): New patterns.
+ (adddia_sexthishl32, adddid_sexthishl32): New patterns.
+ (adddi_dilshr32, adddi_dishl32, adddi_mem): New patterns.
+ (adddi3, subdi3): Allow more alternatives.
+ (subdia_sexthishl32, subdid_sexthishl32): New patterns.
+ (subdi_dishl32, subdi_mem): New patterns.
+ (negdi2): New pattern.
+ (ashldi_sexthi, ashldi_const32, ashldi_const, ashldi3): New patterns.
+ (subreg1ashrdi_const32, ashrdi_const32): New patterns.
+ (ashrdi_const32_mem, ashrdi_const, ashrdi3): New patterns.
+ (subreg1lshrdi_const32, lshrdi_const32, lshrdi_const, lshrdi3): Ditto.
+ (lshrsi_31): New pattern.
+ (lshrsi_16, lshrsi_17_24): New names for old unnamed patterns.
+
+ * m68k.c (use_movqi, const_method): New functions.
+ (const_int_cost, output_move_const_into_data_reg): Likewise.
+ (singlemove_string): Call output_move_const_into_data_reg.
+ * m68k.md (fullword move): Likewise.
+ * m68k.h (CONST_COSTS): Call const_int_cost.
+
+Fri Jan 13 20:17:55 1995 Oliver Kellogg (okellogg@salyko.cube.net)
+
+ * 1750a.h, 1750a.c: Remove use of function prototypes.
+
+Fri Jan 13 15:53:33 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * tree.h (DECL_STATIC_CONSTRUCTOR): New macro.
+ (DECL_STATIC_DESTRUCTOR): New macro.
+ (tree_decl): Add static_ctor_flag and static_dtor_flag.
+
+ * objc-act.c (finish_file): Renamed from objc_finish.
+
+ * c-parse.in (program): Call finish_file.
+
+ * c-decl.c (duplicate_decls): Propagate DECL_STATIC_{CON,DE}STRUCTOR.
+ (finish_function): Handle DECL_STATIC_{CON,DE}STRUCTOR.
+
+ * c-lang.c (finish_file): New function to emit code for calling
+ static constructor and destructor functions as necessary.
+
+ * c-common.c (decl_attributes): Support __attribute__s
+ "constructor" and "destructor".
+
+Fri Jan 13 19:38:08 1995 Paul Eggert <eggert@twinsun.com>
+
+ * gcc.c (execute): Don't wait for just any N subprocesses,
+ since we may have started with some subprocesses before we
+ started executing. Wait just for _our_ N subprocesses.
+
+Fri Jan 13 18:08:17 1995 John F Carr <jfc@mit.edu>
+
+ * gencodes.c, genemit.c, genflags.c (gen_insn): Ignore insns whose
+ names begin with '*'.
+ * genoutput.c (output_epilogue): Do not reference gen_ functions for
+ insns whose names begin with '*'.
+
+Fri Jan 13 17:54:42 1995 Wolfgang Formann (wolfi@exner.tgm.ac.at)
+
+ * i386/isc.h (ASM_FILE_START): New macro.
+
+Fri Jan 13 15:01:59 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-parse.in (unary_expr): If -pedantic, give error for &&.
+
+ * fold-const.c (fold, case COND_EXPR): Properly swap args 1 and 2.
+ Strip nops from ARG2, just like ARG1.
+ Make {MIN,MAX}_EXPR properly when type of result different than args.
+
+ * function.c (optimize_bit_field): Don't remove a SUBREG that
+ changes mode class.
+
+ * Makefile.in (stmp-multilib*): Pass CC and CFLAGS to recursive make.
+
+ * alpha/osf12.h (LINK_SPEC): Add missing "\".
+
+Thu Jan 12 13:37:13 1995 Jim Wilson <wilson@cygnus.com>
+
+ * i960/t-* (LIBGCC1, CROSS_LIBGCC1): Define to empty instead of
+ to libgcc1.null.
+ * mips/t-*, sparc/t-*: Likewise.
+
+Thu Jan 12 08:13:55 1995 Steve Chamberlain (sac@wombat.gnu.ai.mit.edu)
+
+ * libgcc2.c (__lshldi3, __lshrdi3, __ashldi3, __ashrdi3):
+ Shift count comes as a word, not as an SI. Keep temporary in
+ a word.
+ (__moddi3, __divdi3): Make negate flag `c' have word_type for
+ efficiency.
+
+Thu Jan 12 07:18:09 1995 Stephen L Moshier (moshier@world.std.com)
+
+ * real.c (toe64): Use Intel bit pattern for little-endian XFmode Inf.
+ (e64toe): Likewise; also check the exponent field properly.
+
+Wed Jan 11 14:24:55 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * toplev.c (lang_options): Add -f{no-,}gnu-keywords,
+ -f{no-,}operator-names.
+
+Tue Jan 10 19:16:07 1995 David Edelsohn <edelsohn@mhpcc.edu>
+
+ * rs6000.h (REGISTER_MOVE_COST): Add LINK_OR_CTR_REGS class to
+ expensive moves.
+
+Tue Jan 10 19:07:36 1995 Jonathan Beimel (jbeimel@gomez.sc.intel.com)
+
+ * combine.c (simplify_if_then_else): Fix typo: "|" should be "||".
+
+Tue Jan 10 05:49:25 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (fold): Avoid infinite recursion caused by last change.
+
+Mon Jan 9 17:08:56 1995 Michael Meissner (meissner@cygnus.com)
+
+ * configure: All AIX versions [456789].* use the AIX 4.1 support.
+
+Mon Jan 9 13:21:07 1995 David Edelsohn <edelsohn@npac.syr.edu>
+
+ * rs6000/aix41ppc.h: New file.
+
+ * configure (powerpc-ibm-aix4.1*): Add support AIX version 4.1 on
+ the powerpc.
+
+Sat Jan 7 08:51:29 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * sparc.c (order_regs_for_local_alloc): Add casts to bcopy call.
+ (print_operand, case 'f'): New case.
+ (sparc_initialize_trampoline): Use gen_flush instead of knowing
+ what pattern looks like.
+ Use MEM instead of address in flush insn, so virtual reg
+ instantiation can update.
+ Ensure address in flush insn is valid.
+ * sparc.md (flush): Change to using a MEM instead of address.
+
+ * reorg.c (dbr_schedule): Add missing casts in bzero call.
+
+ * fold-const.c (fold, case CONVERT_EXPR): Don't remove an
+ integer conversion when outer is FP unless it doesn't change
+ signedness; rework code in this area to be clearer.
+
+Sat Jan 7 02:58:21 1995 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (enum processor_type): New enumeration describing the
+ processor to schedule for (700, 7100, 7100LC).
+ (pa_cpu_attr, TARGET_OPTIONS, OVERRIDE_OPTIONS): Define.
+ (pa_cpu_string, pa_cpu): Provide extern decls.
+ * pa.c (pa_cpu, pa_cpu_string): Provide definitions.
+ (override_options): New function.
+ (pa_adjust_cost): Handle PROCESSOR_7100 and PROCESSOR_7100LC
+ scheduling. Handle anti-dependendy cases involving fp division
+ and sqrt. Handle output dependencies correctly. Break TYPE_FPMUL
+ into TYPE_FPMULSGL and TYPE_FPMULDBL.
+ * pa.md (cpu attribute): New attribute.
+ Clean up comments for PROCESSOR_700 scheduling info. Slightly
+ simplify. Make conditional on PROCESSOR_700.
+ Add comments and scheduling information for PROCESSOR_7100 and
+ PROCESSOR_7100LC. Set types for instructions which use the shifter
+ to "shift". Explicitly set lengths and types for all instructions.
+ Break type "fpmul" into "fmulsgl" and "fpmuldbl".
+
+Fri Jan 6 17:50:48 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * sh/sh.h (DO_GLOBAL_CTORS_BODY): Run constructors from right to
+ left not left to right.
+ * h8300/h8300.h: Likewise.
+
+Thu Jan 5 12:37:26 1995 Doug Evans <dje@cygnus.com>
+
+ * loop.c (get_condition): Use CONST0_RTX instead of const0_rtx.
+
+Wed Jan 4 04:26:23 1995 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.md (call expander): Use emit_insn_before to emit an insn to
+ save the PIC register before a function call.
+ (call_value expander): Likewise.
+
+Tue Jan 3 15:23:49 1995 Jim Wilson <wilson@cygnus.com>
+
+ * va-mips.h (va_arg, mips3 case): Use __PTRDIFF_TYPE__ not int in
+ casts.
+
+ * c-decl.c (duplicate_decls): Push to correct obstack before
+ creating new function types.
+
+Fri Dec 30 16:12:52 1994 Ian Lance Taylor <ian@cygnus.com>
+
+ * fixinc.svr4: Remove special patch for <netinet/in.h>.
+
+Fri Dec 30 08:00:53 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * varasm.c: Include output.h.
+ Add prototyes for all static functions; remove forward declarations
+ of non-static functions.
+ (assemble_variable): Add missing arg decl.
+ (bc_make_decl_rtl, const_hash, const_hash_rtx): Now static.
+ (output_addressed_constants, output_constructor): Likewise.
+ (bc_output_constructor): Add missing argument.
+ (output_byte_asm): Delete, unused.
+ * output.h: Add decls of functions in varasm.c.
+ Allow to be included when rtl.h is not.
+ * function.h ({save_restore}_varasm_status): Add decls.
+ * c-decl.c, c-typeck.c, toplev.c: Include output.h.
+ * Makefie.in (c-decl.o, c-typeck.o, toplev.o, varasm.o): Likewise.
+
+Thu Dec 29 21:48:03 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * calls.c (expand_call): Set MEM_IN_STRUCT_P as needed on return
+ value from assign_stack_temp.
+ (store_one_arg): Likewise.
+ * expr.c (save_noncopied_parts): Likewise.
+ (expand_expr): Likewise.
+ * function.c (assign_parms): Likewise.
+ * integrate.c (expand_inline_function): Likewise.
+ * stmt.c (expand_decl): Likewise.
+
+Thu Dec 29 14:06:34 1994 Jim Wilson <wilson@cygnus.com>
+
+ * cse.c (simplify_unary_operation): Cast constant 1 to HOST_WIDE_INT
+ before shifting left to form mask.
+ * gcc.c (print_multilib_info): Initialize last_path_len to 0.
+ * varasm.c (output_constructor): Change type of variable value to
+ HOST_WIDE_INT.
+
+ * expmed.c (expand_mult_highpart): Use convert_modes instead of
+ gen_lowpart to do conversions.
+
+Thu Dec 29 13:42:08 1994 Mike Stump <mrs@cygnus.com>
+
+ * toplev.c (lang_options): Add -frtti flag for rtti support in C++.
+
+Wed Dec 28 22:04:42 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * config/pa/lib2funcs.asm: New file.
+ * config/pa/t-pa (LIB2FUNCS_EXTRA): Define.
+ * config/pa/pa.h (DO_GLOBAL_DTORS_BODY): Define. Include a
+ reference to __gcc_plt_call so __gcc_plt_call always appears in
+ executables which reference __main.
+
+Wed Dec 28 21:18:26 1994 Jim Wilson <wilson@cygnus.com>
+
+ * mips.md (truncdiqi2+[123]): Add patterns to optimize DImode to
+ SImode truncation.
+
+ * reorg.c (fill_simple_delay_slots): For the epilogue case, set needed
+ to include frame pointer and stack pointer, don't include all of
+ end_of_function_needs. Reject insn if it sets a previously set
+ resource.
+
+ * sh.c (sh_expand_prologue): Clear extra_push at start. Clear
+ current_function_anonymous_args if set. Clear shiftsyms array.
+ (sh_expand_epilogue): Don't clear extra_push,
+ current_function_pretend_args_size, current_function_anonymous_args,
+ and shiftsyms array.
+
+ * reload.c (find_equiv_reg): Exclude registers clobbered in the
+ CALL_INSN_FUNCTION_USAGE field of a CALL_INSN.
+
+Tue Dec 27 19:22:35 1994 Mike Stump <mrs@cygnus.com>
+
+ * stmt.c (expand_cleanups): Add third parameter so that we can
+ avoid marking a cleanup region if this cleanup is part of a fixup
+ style goto.
+ (expand_goto_internal): Pass a 1 to expand_cleanups.
+ (bc_expand_goto_internal): Ditto.
+ (fixup_gotos): Ditto.
+ (expand_end_bindings): Pass a 0 to expand_cleanups.
+
+Tue Dec 27 15:45:18 1994 Jeffrey A. Law <law@snake.cs.utah.edu>
+
+ * pa.c (output_movb): Fix ttypo.
+
+Tue Dec 27 15:11:42 1994 Ian Lance Taylor <ian@cygnus.com>
+
+ * config/i960/i960.c (i960_output_double): Print hex constants if
+ REAL_VALUE_TO_TARGET_DOUBLE is defined.
+ (i960_output_float): Likewise with REAL_VALUE_TO_TARGET_SINGLE.
+
+Sun Dec 25 07:22:30 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * convert.c (convert_to_pointer): Eliminate ref to null_pointer_node.
+
+Thu Dec 22 12:51:31 1994 Stephen R. van den Berg (berg@pool.informatik.rwth-aachen.de)
+
+ * limitx.h (syslimits.h): Find syslimits.h in the same directory.
+
+ * limity.h (_GCC_NEXT_LIMITS_H): If macro defined, recurse down
+ to real limits.h.
+
+ * gsyslimits.h (_GCC_NEXT_LIMITS_H): Define macro and start recursing
+ down to the real limits.h.
+
+Thu Dec 22 12:17:11 1994 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.in (LIMITS_H_TEST): New variable.
+ (xlimits.h): Use LIMITS_H_TEST.
+ * config/m68k/t-next (LIMITS_H_TEST): Define.
+ * config/i386/t-next (LIMITS_H_TEST): Define.
+
+Wed Dec 21 15:56:13 1994 Holger Teutsch (teutsch@sw017.ffm-iw.Degussa.DE)
+
+ * clipper.h (TRAMPOLINE_TEMPLATE): Specify some code as explicit hex
+ words. Shorten template.
+ (TRAMPOLINE_SIZE,INITIALIZE_TRAMPOLINE): Update accordingly.
+ (FUNCTION_ARG,FUNCTION_ARG_ADVANCE): Aggregates are ALWAYS passed
+ on the stack.
+ * va-clipper.h (__va_rounded_size): Delete.
+ (__va_round): Args have at least PARM_BOUNDARY (=32) alignment.
+
+Wed Dec 21 15:36:46 1994 Stephen L Moshier (moshier@world.std.com)
+
+ * m68k.md (sqrtsf2, sinsf2, sindf2, sinxf2): Define.
+ (cossf2, cosdf2, cosxf2): Likewise.
+ (sqrtxf2): Operand 1 now XFmode.
+
+Wed Dec 21 14:39:46 1994 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k.md (adddi3, subdi3): New patterns.
+
+Wed Dec 21 13:56:08 1994 Michael Gschwind <mike@vlsivie.tuwien.ac.at>
+
+ * pdp11.md (mulhisi3): Add truncate to mulhisi3 to fix bug and
+ change from define_insn to define_expand to survive register
+ presssure.
+
+Wed Dec 21 12:51:10 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * stmt.c (expand_asm_operands): Make sure input operands are
+ valid constants if they are constants.
+
+ * toplev.c (rest_of_compilation): Adjust tests for when to
+ inline and when to defer.
+ * calls.c (expand_call): Only inline if DECL_INLINE; don't
+ call function_cannot_inline_p here.
+
+ * stmt.c (expand_expr_stmt): If want values for statements,
+ convert function to address-of-function.
+
+Wed Dec 21 00:02:33 1994 Ian Lance Taylor <ian@cygnus.com>
+
+ * combine.c (simplify_shift_const): Always copy flags to new MEM.
+
+Tue Dec 20 14:15:58 1994 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * rs6000/aix41.h (LINK_SPEC): Add case for -shared, just like rs6000.h.
+
+Tue Dec 20 09:14:00 1994 DJ Delorie (dj@ctron.com)
+
+ * i386/go32.h: support #pragma pack().
+
+ * msdos/configur.bat: add libgcc.a target.
+ * msdos/mklibgcc.c: new file, helps build libgcc.a.
+ * msdos/libgcc.mak: new file, makefile fragment for libgcc.a.
+ * msdos/top.sed: change Makefile to be able to build libgcc.a.
+
+Mon Dec 19 20:52:13 1994 Jim Wilson <wilson@cygnus.com>
+
+ * mips/x-sysv (CLIB): Add -L/usr/lib/cmplrs/cc3.11.
+
+ * dsp16xx/dsp16xx.h (HAVE_VPRINTF): Delete.
+
+ * flow.c (mark_set_1): For multi-reg hard register, clear all
+ reg_next_use entries.
+
+Mon Dec 19 17:49:59 1994 Doug Evans <dje@cygnus.com>
+
+ * Makefile.in (stmp-multilib): Check recursive make's return code.
+ (.PHONY): Tell GNU make the various LANGUAGES are phony targets.
+
+Mon Dec 19 17:07:41 1994 Ian Lance Taylor <ian@cygnus.com>
+
+ * config/mips/mips.c (print_operand): Don't print a CONST_DOUBLE
+ as a floating point value if it is not MODE_FLOAT.
+
+Mon Dec 19 15:27:42 1994 Jim Wilson <wilson@cygnus.com>
+
+ * fp-bit.c (fpadd_parts): Adding infinities with opposite signs
+ yields a NaN.
+
+ * loop.c (invariant_p): Reject const volatile references.
+
+Sun Dec 18 21:55:26 1994 Jeffrey A. Law <law@snake.cs.utah.edu>
+
+ * pa.md (pic2_highpart): Accept readonly operands.
+
+Sun Dec 18 16:29:20 1994 Jim Wilson <wilson@cygnus.com>
+
+ * mips/dec-bsd.h (CPP_PREDEFINES): Change _MIPSEB to _MIPSEL.
+
+ * cccp.c (macarg1): Count newline at end of C++ comment.
+
+Sun Dec 18 06:54:34 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * stor-layout.c (layout_decl): Allow DECL_BIT_FIELD for any type.
+
+Sat Dec 17 03:43:24 1994 Jeffrey A. Law <law@snake.cs.utah.edu>
+
+ * pa.h (readonly_section): During PIC code generation, put
+ readonly data into the standard data section.
+
+ * pa.c (pic_label_operand): Disallow SYMBOL_REFs (constant data).
+
+Fri Dec 16 06:44:40 1994 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * sparc/litecoff.h (DBX_BLOCKS_FUNCTION_RELATIVE, DBX_FUNCTION_FIRST,
+ DBX_OUTPUT_MAIN_SOURCE_FILE_END): Define.
+ (ASM_OUTPUT_SOURCE_LINE): Modify it to output function relative stabs.
+
+ * sh/lib1funcs.asm (ashiftrt_r4_1): Delete useless or instruction.
+ Add nop to rts delay slot.
+
+ * combine.c (distribute_notes): When output an insn to hold a REG_DEAD
+ note, update basic_block_head if necessary.
+
+Thu Dec 15 15:22:46 1994 Jeffrey A. Law <law@snake.cs.utah.edu)
+
+ * pa.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Don't emit a ".text"
+ pseudo-op, we already make sure we're in the right space/subspace.
+
+Thu Dec 15 07:49:36 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (store_constructor): Properly get constant part of
+ bit position when DECL_FIELD_BITPOS is a PLUS_EXPR.
+
+Wed Dec 14 19:01:32 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (get_inner_reference): Use EXACT_DIV_EXPR to
+ compute byte offset from bit offset.
+
+Wed Dec 14 11:41:21 1994 Ian Lance Taylor <ian@cygnus.com>
+
+ * fixincludes: Fix non const atof parameter on NEWS-OS 4.2R.
+
+Tue Dec 13 18:39:09 1994 Doug Evans <dje@cygnus.com>
+
+ * h8300.c (handle_pragma): Only print warning once.
+
+ * function.c (instantiate_virtual_regs_1, case PLUS): If offset is
+ zero, make sure register replacement is still validated.
+
+Tue Dec 13 07:51:20 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tower-as.h (FUNCTION_EXTRA_EPILOGUE): Fix typo in mov.l opcode.
+ * tower.h (IMMEDIATE_PREFIX): Really define.
+
+ * expr.c (expand_expr, case MINUS_EXPR): Properly handle case
+ when the NEGATE overflows.
+
+Mon Dec 12 17:22:19 1994 der Mouse (mouse@collatz.mcrcim.mcgill.edu)
+
+ * reload.c (debug_reload): Use GET_MODE_NAME to avoid warning.
+
+Mon Dec 12 13:15:04 1994 Doug Evans <dje@cygnus.com>
+
+ * function.c (locate_and_pad_parm): Don't call pad_below for BLKmode
+ parms in regs.
+
+ * expmed.c (emit_store_flag): Set mode after canonicalizing op0/op1
+ so op1 is constant.
+
+Mon Dec 12 08:04:33 1994 Pat Rankin (rankin@eql.caltech.edu)
+
+ * cccp.c, toplev.c (vms_fopen): Call `fopen' through an indirect
+ pointer to inhibit checking argument list against its prototype.
+ Increase RMS multi-block count from 16 to 32.
+
+Sat Dec 10 17:03:59 1994 H.J. Lu (hjl@nynexst.com)
+
+ * cccp.c (do_include): Avoid dynamic initialization of aggregate.
+
+Sat Dec 10 16:57:50 1994 Andreas Luik (luik@isa.de)
+
+ * m68k.md (cmpsi): Make this into a define_expand; legitimize
+ PIC addresses if necessary.
+ Old cmpsi code now unnamed define_insn pattern.
+
+Sat Dec 10 16:06:03 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (pedantic_omit_one_operand): New function.
+ (fold, case COND_EXPR): Use it instead of calling
+ pedantic_non_lvalue on the result of omit_one_operand.
+
+Fri Dec 9 15:53:35 1994 Steve Chamberlain (sac@wombat.gnu.ai.mit.edu)
+
+ * reload.c (find_reloads_address_1): Handle TRUNCATE and
+ ZERO_EXTEND in same way as SIGN_EXTEND.
+
+Fri Dec 9 14:52:41 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * rs6000/rs6000.h (LINK_SPEC): Add %{shared:-bM:SRE}.
+ (LINK_LIBGCC_SPECIAL_1): Use LIBGCC_SPEC instead.
+
+Fri Dec 9 14:24:02 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * gcc.c (default_compilers): Add support for Chill (.ch and .chi).
+
+Fri Dec 9 17:31:46 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * fixinc.svr4 (sys/byteorder.h): Turn extern inlines back into
+ static inlines for targets (such as SPARC/Solaris) that don't
+ supply these functions in the C library.
+
+Fri Dec 9 17:19:44 1994 David Edelsohn <edelsohn@npac.syr.edu>
+
+ * rs6000.h (MASK_NO_FPR, TARGET_NO_FPR): Define.
+ (TARGET_SWITCHES): Add "fp-regs" and "no-fp-regs".
+ (CONDITIONAL_REGISTER_USAGE): Set FPRs fixed and call_used if
+ TARGET_NO_FPR.
+
+Fri Dec 9 16:06:23 1994 Doug Evans <dje@cygnus.com>
+
+ * fold-const.c (fold): Call real_zerop for real constants.
+
+Thu Dec 8 17:28:57 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * dbxout.c (dbxout_type_method_1): Don't try to look at the first
+ argument of non-methods (which might not have a first argument).
+
+Thu Dec 8 16:07:27 1994 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * configure (mips-*-gnu*): Recognize this configuration.
+ * config/mips/gnu.h: New file.
+
+Thu Dec 8 15:41:32 1994 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k.c (extend_operator): New predicate.
+ * m68k.md (bsetmemqi, bclrmemqi): New patterns to set bit in memory
+ byte with bit number dynamic (use bclr/bset instructions).
+
+Thu Dec 8 14:13:45 1994 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (do_include): Don't turn newline markers into spaces
+ when expanding an include file name.
+
+ * cccp.c (discard_comments): If traditional, replace a comment
+ with nothing instead of with a space.
+
+ * cccp.c (char_name): New var.
+ (initialize_char_syntax): Initialize it.
+ (handle_directive): Use it to simplify printing of diagnostics.
+ Warn about '\r' too.
+ (create_definition, do_pragma, do_endif, make_assertion): Be consistent
+ about skipping all horizontal white space, not just space and tab.
+
+Thu Dec 8 13:54:38 1994 H.J. Lu (hjl@nynexst.com)
+
+ * i386/linuxelf.h: Modified for stabs-in-ELF.
+ (PREFERRED_DEBUGGING_TYPE): Defined as DBX_DEBUG.
+ (FUNCTION_PROFILER): Use mcount instead of _mount.
+ (CPP_PREDEFINES): Add -D__ELF__.
+ (CPP_SPEC): Add -D__PIC__ -D__pic__ for -fPIC or -fpic.
+ (LIB_SPEC): Don't use any default library if -shared.
+ (LIBGCC_SPEC, LINK_SPEC, STARTFILE_SPEC, ENDFILE_SPEC): New specs.
+ * configure (gxx_include_dir): Set default to '$(prefix)/include/g++'
+ (i[345]86-*-linuxelf): New platform for ELF.
+ * crtstuff.c (CRT_END): Add dummy refs to ___brk_addr, __environ
+ and atexit if __linux__ and __PIC__ defined.
+
+Thu Dec 8 12:58:34 1994 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * config/xm-freebsd.h, i386/xm-freebsd.h: New files.
+ * configure (i[345]86-*-freebsd*): Use i386/xm-freebsd.h.
+
+Wed Dec 7 16:51:56 1994 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k.md: New pattern for ior between SImode target and zero_extended
+ value.
+
+Wed Dec 7 16:42:46 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (distribute_notes): If can't find place for REG_DEAD
+ note, add an INSN with a USE to hold it.
+
+ * tree.c (preserve_momentary): New function.
+
+Wed Dec 7 15:59:00 1994 Doug Evans <dje@cygnus.com>
+
+ * function.c (locate_and_pad_parm): Do padding before rounding
+ so pad_below knows how much is needed.
+
+Tue Dec 6 17:53:37 1994 Steve Chamberlain (sac@wombat.gnu.ai.mit.edu)
+
+ * sh.md (ashrsi2_16): New pattern doesn't clobber reg 18.
+ (ashrsi2_31): Fix.
+
+Tue Dec 6 19:11:36 1994 Stephen L Moshier (moshier@world.std.com)
+
+ * c-decl.c (init_decl_processing): Implement built-in functions
+ fabsf, sqrtf, sinf, cosf, fabsl, sqrtl, sinl, cosl.
+
+Tue Dec 6 18:42:15 1994 Pat Rankin (rankin@eql.caltech.edu)
+
+ * make-gcc.com: Eliminate `set symbol/scope=noGlobal'.
+
+ * vax/vms.h (CPP_PREDEFINES): Set __GNUC_MINOR__ to 7.
+
+Tue Dec 6 15:10:37 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * sparc/t-sol2 (CRTSTUFF_T_CFLAGS): Don't use PIC if
+ cross-compiling, use the native assembler otherwise.
+
+Tue Dec 6 05:48:32 1994 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * configure (i[345]86-*-gnu*): Just set cpu_type=i386 here.
+ (*-*-gnu*): Match this in second case stmt and set other vars based on
+ $cpu_type.
+ * config/gnu.h: New file.
+ * config/i386/gnu.h: Include "gnu.h".
+
+Mon Dec 5 16:59:39 1994 Doug Evans <dje@cygnus.com>
+
+ * sparc/t-sparcbare (LIB2FUNCS_EXTRA): Compile fp-bit.c.
+
+Mon Dec 5 14:48:53 1994 Jim Wilson <wilson@mole.gnu.ai.mit.edu>
+
+ * unroll.c (copy_loop_body): Reformat CODE_LABEL_NUMBER macro call
+ to avoid HPUX compiler bug.
+
+Mon Dec 5 13:53:45 1994 Doug Evans <dje@cygnus.com>
+
+ * m68k.md (negsf2): Flip sign bit if software floating point.
+ (negdf2,negxf2): Likewise.
+ (abssf2): Zero sign bit if software floating point.
+ (absdf2,absxf2): Likewise.
+
+Mon Dec 5 13:00:37 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.h (EXTRA_CONSTRAINT, case 'R'): Fix error in last change.
+
+Mon Dec 5 00:40:11 1994 Doug Evans <dje@cygnus.com>
+
+ * Makefile.in (c-parse.h): Split away from c-parse.c for parallel
+ makes.
+ (bi-parser.h): Likewise with bi-parser.c.
+
+Sun Dec 4 21:04:40 1994 Doug Evans <dje@cygnus.com>
+
+ Delete this patch:
+ * reorg.c (fill_slots_from_thread): Create a USE insn for any
+ redundant insn we pretend to fill a delay slot with. Continue
+ searching for a suitable delay slot insn at the new USE insn.
+
+Fri Dec 2 11:29:41 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * expr.c (store_constructor): Add support for SET_TYPE.
+
+Fri Dec 2 18:14:09 1994 David Edelsohn <edelsohn@npac.syr.edu>
+
+ * rs6000.h (MASK_64BIT, TARGET_64BIT, SHORT_TYPE_SIZE): Define.
+ (INT_TYPE_SIZE, MAX_INT_TYPE_SIZE, LONG_TYPE_SIZE): Define.
+ (MAX_LONG_TYPE_SIZE, LONG_LONG_TYPE_SIZE, CHAR_TYPE_SIZE): Define.
+ (FLOAT_TYPE_SIZE, DOUBLE_TYPE_SIZE, LONG_DOUBLE_TYPE_SIZE): Define.
+ (POINTER_SIZE, PARM_BOUNDARY): Depend on TARGET_64BIT.
+ (BIGGEST_ALIGNMENT, STARTING_FRAME_OFFSET): Likewise.
+ (FIRST_PARM_OFFSET, REG_PARM_STACK_SPACE): Likewise.
+ (STACK_POINTER_OFFSET, Pmode, FUNCTION_MODE): TARGET_64BIT dependent.
+ * xcoffout.c (xcoff_output_standard_types): Add TARGET_64BIT
+ dependencies. Add "wchar", "long long int", and "long long
+ unsigned int" built-in C types.
+
+Fri Dec 2 18:08:16 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * integrate.c (subst_constant): Don't treat all virtual regs as
+ constants, just those that are off FP and AP, but not SP.
+ (expand_inline_function): If called function calls alloca, save and
+ restore SP around its call.
+
+ * rs6000.c (input_operand): Correctly check for SYMBOL_REF
+ referring to the TOC.
+ * rs6000.h (EXTRA_CONSTRAINT): Likewise.
+
+Wed Nov 30 20:42:57 1994 Jeffrey A. Law <law@snake.cs.utah.edu)
+
+ * reorg.c (fill_slots_from_thread): Create a USE insn for any
+ redundant insn we pretend to fill a delay slot with. Continue
+ searching for a suitable delay slot insn at the new USE insn.
+
+Wed Nov 30 19:02:49 1994 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * combine.c (record_dead_and_set_regs_1): Handle SUBREGs.
+
+ * expr.c (convert_move): When emit multiword conversion, force FROM
+ into a new pseudo-reg if it overlaps TO.
+
+ * fold-const.c (fold_truthop): Delete BIT_AND_EXPR of constants
+ with masks.
+
+Wed Nov 30 18:22:31 1994 David Edelsohn <edelsohn@npac.syr.edu>
+
+ * rs6000.h (BITS_PER_WORD): TARGET_POWERPC64 dependent.
+ (MAX_BITS_PER_WORD): Define.
+ (UNITS_PER_WORD): TARGET_POWERPC64 dependent.
+ (MAX_UNITS_PER_WORD): Define.
+ (UNITS_PER_FP_WORD): Define.
+ (HARD_REGNO_NREGS): Use MAX_UNITS_PER_FP_WORD.
+ (HARD_REGNO_MODE_OK): Likewise.
+ (CLASS_MAX_NREGS): Likewise.
+ (MOVE_MAX): TARGET_POWER and TARGET_POWERPC64 dependent.
+ (MAX_MOVE_MAX): Define.
+ * rs6000.md (floatsidf2): Test BITS_PER_WORD in pattern condition
+ not during build. Fail if TARGET_POWERPC64.
+ (floatunssidf2): Likewise.
+
+ * rs6000.md (extendsidi2): Use lwa_operand predicate.
+ (sign_extend load with update): New PowerPC64 pattern.
+ * rs6000.c (lwa_operand): New predicate.
+ * rs6000.h (PREDICATE_CODES): Add lwa_operand.
+
+Wed Nov 30 18:19:08 1994 Will Athanasiou (will@westford.ccur.com)
+
+ * rs6000.md (extendsfdf2): SFmode and DFmode register format
+ identical so use define_expand with paradoxical subreg no-op and
+ accompanying new define_split.
+
+Wed Nov 30 18:05:03 1994 Michael Collison (collison@sw.stratus.com)
+
+ * reload.c (combine_reloads): If using reg dying in this insn as
+ reload reg, ensure it can't be a secondary output reload reg.
+
+Wed Nov 30 15:48:29 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (emit_block_move): Only use movstr if size is
+ small enough constant or MODE is at least BITS_PER_WORD.
+
+ * c-common.c (decl_attribute): Allow special names (e.g, `word')
+ for mode attribute.
+ * libgcc2.c (word_type): Use __attribute__ ((mode (__word__))).
+
+Tue Nov 29 16:50:37 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expmed.c (expand_shift): Open-code rotate even if by a variable.
+ * optabs.c (init_optabs): Don't set functions for rotl and rotr.
+
+Tue Nov 29 00:39:56 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (DEFAULT_PCC_STRUCT_RETURN): Define as zero.
+ (RETURN_IN_MEMORY): Only large structs (>8 bytes) and addressable
+ structs should be returned in memory.
+ * calls.c (expand_call): Handle returning BLKmode values in
+ registers. Do not try to promote BLKmode.
+ * expr.c (expand_assignment): For BLKmode structure returns,
+ copy the return value from registers into the target memory
+ locations.
+ * integrate.c (function_cannot_inline_p): Do not inline functions
+ which return a BLKmode value in registers.
+ * stmt.c (expand_return): For BLKmode structure returns, copy
+ the return value from memory into the return registers. Use
+ an integer mode rather than BLKmode for returning structures
+ in registers.
+ * explow.c (hard_function_value): Change a register in BLKmode
+ to a register in a sufficiently wide integer mode.
+
+ * calls.c (expand_call): Do not set is_integrable if the
+ function is not inlineable according to function_cannot_inline_p.
+
+Mon Nov 28 18:53:06 1994 Dave Love (d.love@dl.ac.uk)
+
+ * Makefile.in (FLAGS_TO_PASS): Fix typo in GCC_FOR_TARGET.
+
+Mon Nov 28 18:15:58 1994 Stephen R. van den Berg (berg@pool.informatik.rwth-aachen.de)
+
+ * configure (lang): Really fix the quoting bug in bash 1.12.
+
+Mon Nov 28 18:03:48 1994 Jim Wilson (wilson@cygnus.com)
+
+ * expmed.c (store_bit_field, extract_bit_field): Consistently use
+ SLOW_UNALIGNED_ACCESS instead of STRICT_ALIGNMENT.
+ * expr.c (move_by_pieces, move_by_pieces_ninsns, emit_push_insn,
+ expand_assignment, store_field, expand_expr): Likewise.
+ (SLOW_UNALIGNED_ACCESS): Default to STRICT_ALIGNMENT, not zero.
+
+ * cccp.c (create_definition): Error if comma not followed by an
+ identifier.
+ (collect_expansion): Error if # used in macro with no arguments.
+
+ * c-decl.c (finish_decl): Use DECL_CONTEXT instead of
+ current_binding_level to identify file-scope variables.
+
+Wed Nov 23 19:44:25 1994 Steve Chamberlain (sac@jonny.cygnus.com)
+
+ * sh.c (MSW, LSW): New macros.
+ (print_operand_address): Added 'T' and 'S'. Modified
+ to support alternate endianness.
+ (output_movedouble): Support both byte orders.
+ (output_options): Tell assembler when in little endian mode.
+ (shiftinsns): New function to calculate shift cost more
+ accurately.
+ (gen_shifty_op): Use new function.
+ * sh.h (CPP_SPEC, ASM_SPEC, LINK_SPEC, LIBGCC2_WORDS_BIG_ENDIAN): New.
+ (TARGET_SWITCHES, WORDS_BIG_ENDIAN, BYTES_BIG_ENDIAN, ): Support
+ both byte orders.
+ * sh.md (addi3, subdi3, ashrdi3, ashldi3, extendsidi2, movdi, movdf):
+ Support both byte orders.
+ (ashrsi2_16, ashrsi2_31): New.
+ t-sh: Support both byte orders.
+
+Wed Nov 23 17:25:43 1994 Ian Dall (dall@hfrd.dsto.gov.au)
+
+ * config/ns32k/{ns32k.c,ns32k.h}: Add -mhimem to
+ support linking above 0x20000000 boundary.
+
+ * config/ns32k/{netbsd.h,pc532.h, ns32k.c}: Fix meaning
+ of BASE_REG_NEEDED.
+
+Wed Nov 23 17:24:24 1994 Matthias Pfaller (leo@marco.de)
+
+ * configure (ns32k-pc532-netbsd): No need for fixincludes
+ and libgcc1.
+ * ns32k/ns32k.h (CONST_COSTS): Correct range is -0x1fff to 0x2000.
+ * ns32k/ns32k.md (everywhere): Correct range is -0x1fffffff
+ to 0x20000000, others have to be loaded with movd.
+ Shortcircuit with TARGET_32532 as early as possible.
+ (movsi): Use movd to load unknown symbol values. to allow
+ * ns32k/ns32k.c (print_operand): Removed dead code.
+ * ns32k/pc532.h (TARGET_DEFAULT): Forbid usage of bitfield
+ instructions.
+
+Wed Nov 23 14:09:42 1994 Jim Wilson (wilson@cygnus.com)
+
+ * mips.c (mips_output_external): Exclude __builtin_next_arg from list
+ of used external functions.
+
+ * sh.c (arith_reg_operand): Disallow MACH_REG and MACL_REG.
+
+ * sparc.h (SECONDARY_MEMORY_NEEDED_RTX, SECONDARY_MEMORY_NEEDED_MODE):
+ Use MODE not mode.
+
+Wed Nov 23 13:30:52 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (emit_move_insn): If splitting up into individual words
+ and X is a push_operand, do the push and reference top of stack.
+
+Tue Nov 22 21:39:52 1994 Doug Evans (dje@cygnus.com)
+
+ * mips/elf64.h (ASM_OUTPUT_SECTION_NAME): Define.
+
+Tue Nov 22 06:29:21 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (fold_convert): Don't fold conversion if it would
+ produce constant larger than we can support.
+ * emit-rtl.c (gen_lowpart_common): Do nothing if size is
+ greater than twice host wordsize, not just if equal.
+
+ * optabs.c (emit_no_conflict_block): Just emit the insns if
+ the block contains something not an INSN or has an embedded block.
+
+ * emit-rtl.c (init_emit): Set REGNO_POINTER_FLAG
+ for HARD_FRAME_POINTER_REGNUM.
+
+ * machmode.h (ptr_mode): Add declaration.
+ * emit-rtl.c (ptr_mode): Add definition.
+ (init_emit_once): Initialize ptr_mode.
+ * stor-layout.c (layout_type): Use ptr_mode instead of equivalent
+ call to mode_for_size.
+
+Mon Nov 21 18:41:42 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * varasm.c (output_constant): When eliminating conversions,
+ treat ARRAY_TYPE like a record.
+
+ * m68k.md (movqi): Fix typo in push/pop case.
+
+Mon Nov 21 18:11:55 1994 Stephen R. van den Berg (berg@pool.informatik.rwth-aachen.de)
+
+ * genopinit.c (gen_insn): Use GET_MODE_WIDER_MODE macro instead of
+ directly accessing the array.
+
+Mon Nov 21 17:59:07 1994 David Edelsohn <edelsohn@npac.syr.edu>
+
+ * aix41.h (LINK_SPEC): New overriding defintion.
+
+Mon Nov 21 17:44:01 1994 John F Carr (jfc@mit.edu)
+
+ * rs6000.c (input_operand): Allow a SYMBOL_REF referring to a
+ symbol in the TOC.
+
+Mon Nov 21 14:39:13 1994 Doug Evans (dje@cygnus.com)
+
+ * mips/t-ecoff (dp-bit.c): Fix typos.
+
+Mon Nov 21 14:06:29 1994 Jim Wilson (wilson@cygnus.com)
+
+ * emit-rtl.c (operand_subword): For CONST_DOUBLE, add case to
+ handle BITS_PER_WORD of 16.
+
+ * reload1.c (reload): When decrement max_groups of superclass, can
+ only do so if the group_size is smaller than the current group.
+
+ * c-lex.c (yylex): Do warn about floating point out of range if
+ target floating-point format is IEEE. Use warning instead of
+ pedwarn to avoid getting errors.
+
+Mon Nov 21 13:37:03 1994 Doug Evans (dje@cygnus.com)
+
+ * m88k/m88k-aout.h (CPP_PREDEFINES): Add -Acpu and -Amachine.
+ * m88k/m88k-coff.h (CPP_PREDEFINES): Likewise.
+ (DBX_DEBUGGING_INFO): Define.
+
+ * m68k/t-m68kbare (MULTILIB_MATCHES): Treat m68302/m68332 like m68000.
+
+Mon Nov 21 00:58:36 1994 Jeffrey A. Law (law@mole.gnu.ai.mit.edu)
+
+ * pa.c (output_call): When emitting an inline long-call, use LP%
+ and RP% prefixes to get the function's address.
+
+Sun Nov 20 07:00:25 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * Makefile.in (objc-parse.y): Fix typo.
+
+ * t-svr3: Deleted.
+ * t-svr4 (EXTRA_PARTS): Deleted.
+ * i386/t-crtstuff, i386/t-crtpic: New files.
+ * i386/t-svr3dbx (EXTRA_PARTS): Deleted.
+ * configure: Replace use of t-svr3 with extra_parts definition.
+ Add extra_parts to t-svr4 users; likewise for i386/t-svr3dbx.
+ (i386 configurations): Add t-crtstuff if can't build crtstuff.c
+ with -fomit-frame-pointer; use t-crtpic if also must build with -fpic.
+
+Sat Nov 19 17:14:54 1994 Jim Wilson (wilson@cygnus.com)
+
+ * m68k/lb1sf68.asm (addsf3): After using swap for 16 bit rotate,
+ branch back only if count still greater than 0.
+
+ * c-typeck.c (build_binary_op): Can shorten shift only if shift count
+ is less than size in bits of arg0.
+ * expmed.c (expand_shift): Re-enable truncation of immediate shift
+ count.
+
+ * mips.c (mips_const_double_ok): Accept VOIDmode not DImode.
+ (mips_move_1word): Accept VOIDmode CONST_DOUBLE.
+
+Sat Nov 19 05:36:35 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.c (print_operand, case 'c', case 'd'): New cases.
+ * alpha.md (sign_extend): Disable pattern with explicit SUBREG.
+ (cmov): Allow first operand of comparison to be zero, 2nd reg.
+
+ * a29k/unix.h (DEFAULT_PCC_STRUCT_RETURN): Define as 0.
+ * a29k/x-unix (CLIB): Remove -lsysv.
+
+Fri Nov 18 22:37:26 1994 Jason Merrill (jason@phydeaux.cygnus.com)
+
+ * m88k/mot-sysv4.h: Remove, no longer needed.
+ * configure: Remove m88k-mot*-sysv4* special case.
+
+ * collect2.c: Make various functions static.
+
+ * sparc/sysv4.h ([CD]TORS_SECTION_ASM_OP): Remove #execinstr.
+
+ * svr4.h, i386/sol2.h, m88k/dgux.h, sparc/sol2.h
+ (LINK_SPEC): Pass -z text when -shared or -symbolic.
+ * svr4.h (LIBGCC_SPEC): Don't pass -lgcc when -symbolic.
+
+ * crtstuff.c: Fix comments.
+
+Fri Nov 18 22:36:26 1994 Jason Merrill (jason@phydeaux.cygnus.com)
+
+ * pa/pa-hpux.h (LDD_SUFFIX): Move to pa.h.
+ (PARSE_LDD_OUTPUT): Ditto.
+ * pa/pa.h: (LDD_SUFFIX): Move from pa-hpux.h.
+ (PARSE_LDD_OUTPUT): Ditto.
+ (LINK_SPEC): Pass -b if -shared. Don't pass -u main if -shared.
+ * pa/pa1-osf.h: Reduce code duplication.
+
+Fri Nov 18 22:35:26 1994 Jason Merrill (jason@phydeaux.cygnus.com)
+
+ * Makefile.in (crt{begin,end}.o): Pass $(CRTSTUFF_T_CFLAGS).
+ (CRTSTUFF_T_CFLAGS): New variable.
+
+ * svr4.h, m88k/sysv4.h, sparc/sysv4.h (FINI_SECTION_ASM_OP): Define.
+ * i386/sol2.h (FORCE_FINI_SECTION_ALIGN): Define to
+ FORCE_INIT_SECTION_ALIGN.
+ * m88k/dgux.h, m88k/mot-sysv4.h, sparc/sysv4.h
+ (INIT_SECTION_PREAMBLE): Remove.
+ * svr4.h, sparc/sol2.h (STARTFILE_SPEC): Include crti.o and
+ values-X?.o when building a shared lib.
+ * svr4.h, i386/sol2.h, sparc/sol2.h (LIB_SPEC): Remove endfiles.
+ (ENDFILE_SPEC): Handle endfiles.
+
+ * libgcc2.c (__do_global_dtors): Don't define if
+ INIT_SECTION_ASM_OP and OBJECT_FORMAT_ELF.
+ (L_[cd]tor_list): Lose unused pieces.
+
+ * crtstuff.c (__[CD]TOR_{LIST,END}__): static if OBJECT_FORMAT_ELF.
+ (__do_global_ctors_aux): In .text if OBJECT_FORMAT_ELF.
+ (__do_global_dtors_aux): Ditto.
+ (init_dummy): Dummy function to stick a call to __do_global_ctors_aux
+ into the .init section if OBJECT_FORMAT_ELF.
+ (fini_dummy): Similarly.
+ Remove reference to INIT_SECTION_PREAMBLE.
+
+ * mips/iris5.h (HAS_INIT_SECTION): Define.
+ (LINK_SPEC): Pass -u __main -init __main if not -shared.
+ (STARTFILE_SPEC): Don't include these when -shared.
+ (LIB_SPEC): Don't include these when -shared.
+ (ENDFILE_SPEC): Define.
+ (LD_INIT_SWITCH): Define.
+ (LD_FINI_SWITCH): Define.
+
+ * alpha/alpha.h (LD_INIT_SWITCH): Define.
+ (LD_FINI_SWITCH): Define.
+ (INIT_NAME_FORMAT): Lose.
+ (FINI_NAME_FORMAT): Lose.
+
+Fri Nov 18 22:34:26 1994 Ronald F. Guilmette (rfg@segfault.us.com)
+
+ * crtstuff.c, svr4.h, i860/sysv4.h, m88k/sysv4.h, sparc/sysv4.h
+ (CTORS_SECTION_ASM_OP): Remove @progbits, add SHF_WRITE.
+ (DTORS_SECTION_ASM_OP): Ditto.
+
+ * t-svr4, i386/t-sol2, m88k/t-sysv4, sparc/t-sol2
+ (CRTSTUFF_T_CFLAGS): Define to -fpic.
+
+Fri Nov 18 22:33:26 1994 Jason Merrill (jason@phydeaux.cygnus.com)
+
+ * gcc.c (LIBGCC_SPEC): New spec.
+ (link_command_spec): Use LIBGCC_SPEC.
+ (set_spec): Handle LIBGCC_SPEC.
+ (process_command): Ditto.
+ (do_spec_1): %G is LIBGCC_SPEC.
+ (validate_all_switches): Also validate LIBGCC_SPEC.
+
+ * alpha/alpha.h (LIBGCC_SPEC): Do include libgcc when
+ creating a shared library.
+
+Fri Nov 18 22:32:26 1994 Steve Dum (steve_dum@mentorg.com)
+
+ * collect2.c (SUNOS4_SHARED_LIBRARIES): Support scanning the
+ _DYNAMIC field of SunOS 4 shared libraries directly.
+
+Fri Nov 18 22:31:26 1994 Jason Merrill (jason@phydeaux.cygnus.com)
+
+ * collect2.c (main): For shared libraries, link in stubs even if
+ there are no constructors or destructors so that static objects
+ can be added without re-linking everything that uses the library.
+ (write_c_file_stat): Tweak.
+
+ * configure: Use sunos4.h instead of sparc.h for SunOS 4 targets.
+
+ * sparc/sunos4.h: New file for SunOS 4-specific things.
+ (SUNOS4_SHARED_LIBRARIES): Define to 1.
+ * sparc/sparc.h: (LINK_SPEC): Support -shared.
+ (LIB_SPEC): Ditto.
+
+ * pa/pa-hpux.h (LDD_SUFFIX): New macro.
+ (PARSE_LDD_OUTPUT): New macro.
+ (LINK_SPEC): Pass -b if -shared. Don't pass -u main if -shared.
+ (LIB_SPEC): Don't include if -shared.
+
+ * collect2.c (scan_prog_file): Ignore undefined symbols.
+
+Fri Nov 18 22:30:26 1994 Steve Dum (steve_dum@mentorg.com)
+
+ * collect2.c (enum pass): Add PASS_LIB.
+ (is_ctor_dtor): Check for shared library constructor and destructor
+ functions, too.
+ (main): Add o_file after any link libraries, too.
+ Create a shared object if COLLECT_GCC_OPTIONS contains -shared.
+ Also scan shared libraries for constructors and destructors if
+ LDD_SUFFIX is defined.
+ (write_c_file_stat): New function to write out file for a shared
+ object.
+ (write_c_file_glob): Renamed from write_c_file.
+ (write_c_file): Calls one of write_c_file_{stat,glob}.
+ (scan_prog_file): Update to deal with shared libraries.
+ (scan_libraries): New function to scan shared libraries for
+ constructors and destructors.
+
+Fri Nov 18 19:16:19 1994 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.c (addrs_ok_for_quad_peep): New function.
+ (output_prolog): Use liu mnemonic.
+ (registers_ok_for_quad_peep): New function.
+ * rs6000.md (peepholes for two DF load/store): New peepholes.
+
+Fri Nov 18 19:10:24 1994 Kresten Krab Thorup (krab@next.com)
+
+ * objc/object.c (class_create_instance): Replace memchr
+ with memset.
+
+Fri Nov 18 19:06:15 1994 Doug Evans (dje@cygnus.com)
+
+ * sparc/lite.h: #include "gofast.h"
+ (INIT_SUBTARGET_OPTABS): Define.
+
+Fri Nov 18 19:01:51 1994 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * Makefile.in (extraclean): Remove *.ps.
+
+Fri Nov 18 18:53:57 1994 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * cccp.c (create_definition): Allow carriage-return ('\r')
+ as white space in simple or empty expansion.
+
+Fri Nov 18 18:30:40 1994 Douglas Rupp (drupp@cs.washington.edu)
+
+ * winnt/ld.c (main): Fix off-by-one error allocating sdbuff.
+
+Fri Nov 18 18:23:54 1994 Mike Collison (collison@sw.stratus.com)
+
+ * regclass.c (record_reg_classes): For single SET between hard reg
+ alone in a class and pseudo, ensure reg is the only member of class.
+
+Fri Nov 18 15:15:27 1994 Jim Wilson (wilson@cygnus.com)
+
+ * sol2.h (MD_STARTFILE_PREFIX): Delete.
+
+Fri Nov 18 14:16:04 1994 Chris Huey (cah@tactix.rain.com)
+
+ * Makefile.in (objc-parse.y, mostlyclean): Rename temp file
+ for objc-parse.y to be under 14 characters.
+
+Thu Nov 17 20:46:15 1994 Doug Evans <dje@cygnus.com>
+
+ VxWorks support from various people at Cygnus.
+ * config.sub: Vendor for vxworks is wrs.
+ * configure (i960-wrs-vxworks*): New target.
+ (m68k-wrs-vxworks*): New target.
+ (sparc-wrs-vxworks*, sparclite-wrs-vxworks*): New targets.
+ * i960/t-vxworks960, i960/vx960-coff.h, i960/vx960.h: New files.
+ * m68k/t-vxworks68, m68k/vxm68k.h: New files.
+ * sparc/t-vxsparc, sparc/vxsparc.h: New files.
+
+ * h8300/h8300.h (DBX_DEBUGGING_INFO): Define.
+ (PREFERRED_DEBUGGING_TYPE): Define to SDB_DEBUG.
+
+ * configure (--program-prefix, --program-suffix,
+ --program-transform-name, -v, -verbose): New arguments.
+ (as): If gas is in build tree, use it.
+ (ld, real-ld): Likewise but watch for use_collect.
+ (program_transform_name): Update Makefile if
+ --program-transform-name given.
+ (program_transform_cross_name): Likewise.
+ * Makefile.in (program_transform_name): Define.
+ (program_transform_cross_name): Define.
+ (GCC_INSTALL_NAME, GCC_CROSS_NAME): Define.
+ (install-common): Use them.
+ (install-man): Likewise.
+ (distclean): Delete *.asm.
+ (stage*, risky-stage*): If as/ld/real-ld exist, copy them to stage dir.
+
+ Embedded target support from various Cygnus people.
+ * config.sub (sparc): Recognize as a cpu.
+ (ecoff*, vsta, udi): Recognize as os's.
+ (udi29k): New alias.
+ * configure: (a29k-*-udi): New target.
+ (i[345]86-*-aout*): New target.
+ (i[345]86-*-coff*): New target.
+ (i[345]86-*-vsta): New target.
+ (m68k-*-aout*): New target.
+ (m68k-*-coff*): New target.
+ (m88k-*-aout*): New target.
+ (m88k-*-coff*): New target.
+ (mipsel-*-ecoff*): New target.
+ (mips-*-ecoff*): New target.
+ (mipsel-*-elf*): New target.
+ (mips-*-elf*): New target.
+ (mips64el-*-elf*): New target.
+ (mips64orionel-*-elf*): New target.
+ (mips64-*-elf*): New target.
+ (mips64orion-*-elf*): New target.
+ (sparc-*-aout*): New target.
+ (sparclite-*-coff*): New target.
+ (sparclite-*-*): Set tmake_file to sparc/t-sparclite.
+ (mips*-*-*): Changed from mips-*-*.
+ * optabs.c (expand_unop): Try subtraction from zero if there isn't a
+ negate library function.
+ * config/gofast.h: New file.
+ * a29k/a29k-udi.h, a29k/t-a29kbare: New files.
+ * i386/i386-aout.h, i386/i386-coff.h, i386/t-i386bare: New files.
+ * i386/vsta.h, i386/t-vsta, i386/x-vsta, i386/xm-vsta.h: New files.
+ * m68k/coff.h: New file (renamed from m68k-coff.h).
+ * m68k/lynx-ng.h, m68k/lynx.h: Include it.
+ * m68k/fpgnulib.c, m68k/lb1sf68.asm, m68k/m68kemb.h: New files.
+ * m68k/m68k-aout.h, m68k/m68k-coff.h, m68k/m68k-none.h: New files.
+ * m68k/t-m68kbare: New file.
+ * m88k/m88k-aout.h, m88k/m88k-coff.h, m88k/t-bug: New files.
+ * mips/ecoff-gdb.h, mips/ecoff.h, mips/ecoffl-gdb.h: New files.
+ * mips/ecoffl.h, mips/elf.h, mips/elf64.h, mips/elfl.h: New files.
+ * mips/elfl64.h, mips/elflorion.h, mips/elforion.h: New files.
+ * mips/t-ecoff: New files.
+ * sparc/lb1spc.asm, sparc/lb1spl.asm, sparc/litecoff.h: New files.
+ * sparc/sparc-aout.h, sparc/t-sparcbare, sparc/t-sparclite: New files.
+
+Thu Nov 17 18:32:24 1994 Torbjorn Granlund (tege@tiny.cygnus.com)
+
+ * cse.c (simplify_binary_operation): Do (x - (x & y)) -> (x & ~y).
+
+Thu Nov 17 17:26:02 1994 Mark P. Gooderum (mark@good.com)
+
+ * stddef.h: Include <machine/ansi.h> on NetBSD.
+ Check for _BSD_XXX_T_ as well as _XXX_T_.
+ Add _BSD_XXX_T_ to list of defines to check and define for a given
+ type for SIZE_T, PTRDIFF_T, and WCHAR_T.
+
+Thu Nov 17 11:11:50 1994 Mike Collison (collison@sw.stratus.com)
+
+ * dsp16xx.c (notice_update_cc): Removed reference to obsolete LSHIFT.
+ * dsp16xx.h (RTX_COSTS): Likewise.
+
+Thu Nov 17 11:06:43 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.c (some_operand): New function.
+ * alpha.h (PREDICATE_CODES): Add `some_operand'.
+ * alpha.md (addsi3, adddi3): For patterns valid only
+ during reload, allow operand 1 to be `some_operand'.
+
+ * flow.c (find_auto_inc): Insert missing "return" statement.
+
+ * c-common.c (print_char_table): Allow `L' for `u'.
+
+Thu Nov 17 10:15:50 1994 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * config.sub: Accept -domain as OS, and make it default for Apollo.
+
+Wed Nov 16 19:28:46 1994 Jim Wilson (wilson@chestnut.cygnus.com)
+
+ * loop.c (move_movables): For move_insn case, skip notes when deleting
+ instructions.
+
+Wed Nov 16 16:13:48 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * bi-run.h: Always check BITS_BIG_ENDIAN, BYTES_BIG_ENDIAN, and
+ WORDS_BIG_ENDIAN at run time, never at compile time.
+ * bytecode.h, combine.c, cse.c, dbxout.c, dwarfout.c: Likewise.
+ * expmed.c, expr.h, final.c, fold-const.c, function.c: Likewise.
+ * jump.c, objc-act.c, real.c, real.h, recog.c, reload.c: Likewise.
+ * reload1.c, sdbout.c, tree.c, varasm.c: Likewise.
+ * real.c: Replace uses of MIEEE and IBMPC with a compile time
+ check of IEEE and a runtime check of FLOAT_WORDS_BIG_ENDIAN.
+ * libgcc.2 (LIBGCC2_WORDS_BIG_ENDIAN): If not defined, define to
+ WORDS_BIG_ENDIAN. Use it instead of WORDS_BIG_ENDIAN.
+ * mips-tfile.c (init_file): Initialize fBigendian field based on
+ HOST_WORDS_BIG_ENDIAN, not BYTES_BIG_ENDIAN.
+ * config/mips/mips.h (MASK_BIG_ENDIAN): Define, replacing
+ MASK_UNUSED4.
+ (TARGET_BIG_ENDIAN): Define.
+ (TARGET_SWITCHES): Add eb and el. Include TARGET_ENDIAN_DEFAULT
+ in default value.
+ (TARGET_ENDIAN_DEFAULT): Define if not defined, based on
+ DECSTATION.
+ (CC1_SPEC): Convert -EB to -meb, convert -EL to -mel, and warn if
+ -EB and -EL are both used.
+ (CPP_SPEC): If -EB is seen, undefine MIPSEL, _MIPSEL, __MIPSEL and
+ __MIPSEL__, and define _MIPSEB, __MIPSEB, __MIPSEB__ and MIPSEB
+ (the last only if -ansi was not seen). Similarly if -EL is seen.
+ (REAL_ARITHMETIC): Define.
+ (BYTES_BIG_ENDIAN, WORDS_BIG_ENDIAN): Base on TARGET_BIG_ENDIAN.
+ (LIBGCC2_WORDS_BIG_ENDIAN): Define.
+ (CONST_COSTS): Use split_double in CONST_DOUBLE case.
+ * config/mips/mips.c (mips_move_2words): Use split_double rather
+ than CONST_DOUBLE_LOW and CONST_DOUBLE_HIGH.
+ (output_block_move): Check BYTES_BIG_ENDIAN at run time, not
+ compile time.
+ (print_operand): Check WORDS_BIG_ENDIAN, rather than using
+ MOST_SIGNIFICANT_WORD and LEAST_SIGNIFICANT_WORD.
+ * config/mips/t-mips (MULTILIB_OPTIONS, MULTILIB_DIRNAMES,
+ MULTILIB_MATCHES, LIBGCC, INSTALL_LIBGCC): Define to build both
+ big and little endian versions of libgcc.a.
+ * config/mips/t-mips-gas: LIkewise.
+ * config/mips/dec-bsd.h (CPP_SPEC): Same change as in mips.h.
+ * config/mips/dec-osf1.h (CPP_SPEC): Likewise.
+ * config/mips/iris3.h (CPP_SPEC): Likewise.
+ * config/mips/iris5.h (CPP_SPEC): Likewise.
+ * config/mips/osfrose.h (CPP_SPEC): Likewise.
+ (CC1_SPEC): Same change as in mips.h.
+
+Wed Nov 16 16:04:21 1994 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (rescan): Remove unnecessary comparisons of ibp to limit.
+
+Wed Nov 16 07:48:17 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * regclass.c (record_reg_classes): Handle case of single SET
+ between a hard register alone in a class and a pseudo.
+
+ * tree.c (integer_{zero,one,all_ones,pow2}p): Handle COMPLEX_CST.
+ (real_{zero,one,two}p): Likewise.
+
+ * gcc.c (main): For -V output, give both driver and compiler
+ versions, if they differ.
+
+ * toplev.c (rest_of_compilation): Always rerun jump_optimize
+ after CSE if -O2.
+
+ * fold-const.c (fold): If moved conversion into COND_EXPR,
+ leave it there if it is an integral conversion to word or narrower.
+ (fold, case NOP_EXPR): Ignore conversion to same type as operand.
+ (fold, case COND_EXPR): Make third operand the simplest.
+
+ * expr.c (convert_move): Don't put FROM in a register if it
+ is a SUBREG.
+ (store_expr): If don't want a value and storing into promoted
+ variable, do conversion at tree level; don't copy volatile MEM
+ unless want value, as comment says.
+
+Tue Nov 15 20:02:34 1994 Doug Evans (dje@cygnus.com)
+
+ * varasm.c (named_section): New argument decl, all callers changed.
+ * h8300/h8300.h, sh/sh.h, sparc/sysv4.h (ASM_OUTPUT_SECTION_NAME):
+ New arg DECL.
+
+Mon Nov 14 15:07:19 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * tree.h (POINTER_TYPE_P): New macro.
+ * m68k/m68kv4.h, m68k/mot3300.h (FUNCTION_VALUE): Use
+ POINTER_TYPE_P rather than checking the type against
+ POINTER_TYPE (to include references).
+ * function.c (init_function_start): Ditto.
+
+ * alpha/alpha.h (FUNCTION_VALUE): Use INTEGRAL_MODE_P rather than
+ checking the type against various integral and pointer types.
+
+ * m68k/{3b1,3b1g,crds,mot3300}.h: Don't define __PTR_TO_INT and
+ __INT_TO_PTR.
+ * m68k/xm-{3b1,crds,mot3300}.h: Define __PTR_TO_INT and __INT_TO_PTR.
+
+Tue Nov 15 19:29:04 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * tree.c (staticp): A non-nested function is always static.
+
+Tue Nov 15 19:12:03 1994 Jim Meyering (meyering@comco.com)
+
+ * Makefile.in (specs, float.h-cross, xlimits.h): Use temporary instead
+ of redirecting output directly to make target.
+ ($(MD_FILE), xsys-protos.h): Likewise.
+ (mostlyclean): Remove any of these temporaries.
+ (libgcc2.a): Add missing semicolon in commented code that could cause
+ a /bin/sh syntax error if uncommented.
+
+Tue Nov 15 19:07:00 1994 Warner Losh (imp@village.org)
+
+ * i386/freebsd.h (NO_IMPLICIT_EXTERN_C): Define.
+
+Tue Nov 15 19:00:55 1994 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * reorg.c (redundant_insn): Renamed from redundant_insn_p; all
+ callers changed.
+
+Tue Nov 15 18:57:46 1994 Jim Wilson (wilson@chestnut.cygnus.com)
+
+ * reorg.c (relax_delay_slots): When invert a conditional jump over a
+ single unconditional jump, invert the INSN_FROM_TARGET_P bit of insns
+ in the delay slots.
+
+ * reorg.c (redundant_insn_p): Change return type to rtx. Return the
+ redundant insn instead of true.
+ (update_reg_unused_notes): New function.
+ (fill_slots_from_thread): Call update_reg_unused_notes after one of
+ the redundant_insn_p calls.
+
+Tue Nov 15 18:39:33 1994 Torbjorn Granlund (tege@tiny.cygnus.com)
+
+ * expmed.c (expand_divmod, case ROUND_DIV_EXPR): Implement.
+ * expr.c (do_jump_by_parts_greater_rtx): No longer static.
+ (expand_expr): Delete code for plain `abs'.
+ * optabs.c (expand_abs): New function, code moved from expand_expr.
+ * expr.h: Declare expand_abs.
+
+Tue Nov 15 12:11:26 1994 Jeffrey A. Law (law@mole.gnu.ai.mit.edu)
+
+ * pa.c (output_cbranch): Improve code for short backwards branch
+ with an unfilled delay slot.
+ (output_bb, output_dbra, output_movb): Likewise.
+
+Tue Nov 15 09:55:31 1994 Doug Evans (dje@cygnus.com)
+
+ * jump.c (delete_insn): Delete labels in ADDR_VECs and
+ ADDR_DIFF_VECs if their use count becomes zero.
+ * flow.c (flow_delete_insn): New function.
+ (find_basic_blocks): Call it to physically delete insns in
+ unreachable blocks. When scanning blocks after dead ones,
+ start scanning after the dead one (not at the dead one).
+ If there are lots of unreachable blocks, make another pass to squeeze
+ them out (this reduces memory usage in some pathalogical cases by a
+ significant amount without resorting to sparse matrices).
+ (propagate_block): Make code a bit more efficient (for example,
+ no need to test `loop_depth' for each insn, just notes).
+
+Tue Nov 15 09:42:31 1994 Lynn Shumaker (shumaker@saifr00.ateng.az.honeywell.com)
+
+ * function.c (assign_stack_temp): Compute size of slot after
+ assign_stack_local has accounted for alignment.
+
+Mon Nov 14 23:47:20 1994 Torbjorn Granlund (tege@tiny.cygnus.com)
+
+ * pa.h (GO_IF_LEGITIMATE_ADDRESS): Allow
+ (lo_sum (reg) (unspec (symref))).
+
+ * pa.md (pic2_lo_sum): New pattern matching when -fPIC using UNSPEC.
+ * pa.c (legitimize_pic_address): Generate an insn matching
+ pic2_lo_sum when -fPIC.
+
+ * pa.md (pic_highpart): Add missing mode for PLUS.
+ (add_high_const): Likewise.
+
+ * pa.md (matcher for plain lo_sum): Call abort if this happens
+ when generating pic or PIC.
+
+Mon Nov 14 23:47:20 1994 Jeffrey A. Law (snake.cs.utah.edu)
+
+ * Automatic generation of inline long call sequences when needed.
+ * pa.h (TARGET_LONG_CALLS): Delete. Replace all uses of with
+ TARGET_PORTABLE_RUNTIME.
+ (TARGET_MILLICODE_LONG_CALLS): New target flag.
+ * pa.c (output_function_prologue): Keep track of the total number
+ of code bytes emitted for each source file.
+ (output_call): Handle TARGET_PORTABLE_RUNTIME and millicode calls
+ for TARGET_MILLICODE_LONG_CALLS. Emit an inline long-call if
+ needed. If emitting an inline long-call, perform argument relocations
+ before the call if they are needed, unfill the delay slot of the
+ call if necessary.
+ * pa.md (define_delay for millicode): Disable the delay slot if
+ TARGET_MILLICODE_LONG_CALLS.
+ (millicode insns and indirect calls): Properly compute length for
+ both TARGET_PORTABLE_RUNTIME and TARGET_MILLICODE_LONG_CALLS.
+ (call_internal_symref): Properly compute the length when more
+ than 240000 bytes of code have already been output. Take
+ TARGET_MILLICODE_LONG_CALLS into account in the length
+ computation.
+
+ * pa.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Define.
+ (ASM_FILE_END): Delete unneeded definition.
+
+ * Fast indirect call support.
+ * pa.h (TARGET_FAST_INDIRECT_CALLS): New target switch.
+ (TARGET_SWITCHES): Add "fast-indirect-calls" and inverse.
+ * pa.md (call_internal_reg, call_value_internal_reg): Generate
+ appropriate code for TARGET_FAST_INDIRECT_CALLS.
+
+ * PA PIC support.
+ * pa.c (secondary_reload_class): Refine. Readonly data needs a
+ secondary reload only during PIC generation. Loading a floating
+ point register with a constant requires a register from R1_REGS
+ during -fPIC code generation.
+ (read_only_operand): Constant pool entries are no longer read only
+ during PIC code generation.
+ (hppa_legitimize_address): If flag_pic is nonzero, then
+ immediately call legitimize_pic_address.
+ (emit_move_sequence): Call legitimize_pic_address to handle
+ constant data. Handle secondary reloads for PIC. Use
+ pic_label_operand rather than open coding the test. Handle
+ loading a LABEL_REF when generating PIC.
+ (legitimzie_pic_address): Handle constant data addressing for PIC
+ here. Fix loading of symbolic addresses for -fPIC generation.
+ (pic_label_operand): Renamed from pic_operand. Handle any read
+ only operand (such as constant data). Reject function addresses,
+ Accept SYMBOL_REF with the read-only bit set. Generalize to
+ handle (const (plus (reg) (int))).
+ (finalize_pic): Delete unused function.
+ (check_pic): Delete function.
+ (pic_pc_rtx): Delete variable definition.
+ (current_function_uses_pic_offset_table): Delete extern decl.
+ (force_reg, validize_mem): Likewise.
+ (output_global_address): Don't tack on "-$global$" when generating
+ PIC code.
+ (finalize_pic): Don't emit code for initialization of
+ hppa_save_pic_table_rtx here. Don't claim we USE
+ pic_offset_table_rtx at function end.
+ * pa.h (SELECT_RTX_SECTION): Define. During PIC generation
+ everything (in the constant pool) goes into the data space.
+ (PRINT_OPERAND_ADDRESS): Handle CONST_INTs during PIC
+ generation. Handle LO_SUM address during -fPIC generation.
+ (LEGITIMATE_CONSTANT_P): Reject function labels when generating
+ PIC code.
+ (GO_IF_LEGITIMATE_ADDRESS): Only accept pic_reg + SYMBOL_REF for
+ -fpic.
+ (EXTRA_SECTION_FUNCTIONS): For -fpic, use the TEXT section for
+ constants to avoid GAS lossage.
+ (OVERRIDE_OPTIONS): Delete.
+ (PIC_OFFSET_TABLE_REG_CALL_CLOBBERED): Define.
+ (FINALIZE_PIC): Delete definition.
+ (INIT_EXPANDERS): Define. Clear hppa_save_pic_table_rtx here.
+ * pa.md: Use !flag_pic rather than calling check_pic.
+ (HImode high and lo_sum): Only accept const_int_operands.
+ (pic_load_label): Force output to be in %r1.
+ (pic_highpart): New pattern. Output must go into %r1. More
+ linker trickery.
+ (symbolic high and lo_sum): Disallow during PIC generation if
+ source is a symbolic operand. Handle CONST_INT LO_SUM during PIC
+ generation. Simplify.
+ (define_split for symbolic_operand load): Do not accept a symbolic
+ operand that is a pic_label_operand.
+ (pic_load_label): Name this pattern. Mask least significant bits
+ and optimize when a simple label is within reach of an ldo.
+ (call, call_value): Emit new-style USE information for
+ pic_offset_table_rtx. Emit code for initialization of
+ hppa_save_pic_table_rtx and wrap it into push_topmost_sequence()
+ and pop_topmost_sequence() calls.
+
+ * Various PA configuration cleanups.
+ * configure (hppa*-*-h[pi]ux): Use xm-pahpux.h and x-pa-hpux instead
+ of the redundant hiux files. Likewise for t-pa instead of t-pa-hpux.
+ * config/pa/xm-pahiux.h: Delete. It's identical to xm-pahpux.h.
+ * config/pa/x-pa-hiux: Delete. It's idential to x-pa-hpux.
+ * config/pa/x-pa (TAROUTOPTS): Delete. It was an HPUX host
+ conditional, and x-pa is a BSD host target fragment.
+ (INSTALL_HEADERS): Define.
+ (STMP_FIXPROTO): Define.
+ * config/pa/t-pa (INSTALLED_H): Delete.
+ * config/pa/t-pa-hpux: Delete, it's identical to t-pa.
+ * config/pa/pa-hiux.h: Include "pa/pa-hpux.h" and just override
+ the CPP predefines.
+ (CPP_PREDEFINES): Add -A assertions.
+ * config/pa/{pa1-hiux.h, pa-ghiux.h, pa1-ghiux.h}: Likewise.
+ * config/pa/pa-ghpux.h: Simplify by including pa-hpux.h.
+ (DBX_DEBUGGING_INFO): Define.
+ (DEFAULT_GDB_EXTENSIONS): Define.
+
+Mon Nov 14 19:16:00 1994 Dennis Glatting <war04!dennisg@kerby.ocsg.com>
+
+ * fixincludes: Fixes for NextStep 3.2. Remove ``__const__'' from
+ sin and cos prototypes in ansi/math.h. Remove keyword ``template''
+ from bfd/libc.h. Remove ``volatile'' from abort in bsd/libc.h
+ and abort and exit in ansi/stdlib.h.
+
+Mon Nov 14 18:54:28 1994 Douglas Rupp (drupp@cs.washington.edu)
+
+ * i386/x-winnt (EXTRA_PROGRAM): Match target name.
+
+Mon Nov 14 18:48:21 1994 Torbjorn Granlund (tege@tiny.cygnus.com)
+
+ * freebsd.h (INCLUDE_DEFAULTS): Move definition beyond
+ FREEBSD_NATIVE conditional.
+ (FUNCTION_PROFILER): Move down to make file more similar to
+ netbsd-i386.h.
+ (DEFAULT_TARGET_MACHINE, etc): Comment our this braindamage!
+
+Mon Nov 14 18:46:18 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * calls.c (expand_call): If IS_CONST and VALREG == 0, end our
+ sequence and emit the insns.
+
+Sat Nov 12 06:35:42 1994 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * Version 2.6.2 released.
+
+Sat Nov 12 06:35:21 1994 Torbjorn Granlund (tege@cygnus.com)
+
+ * expmed.c (expand_divmod, case TRUNC_DIV_EXPR): Promote signed
+ division by 0x80000000 to unsigned.
+
+Fri Nov 11 17:07:35 1994 Michael Meissner (meissner@osf.org)
+
+ * c-common.c (decl_attributes): Add double-underscore version of
+ printf and scanf for format type.
+
+Fri Nov 11 16:38:04 1994 Jim Wilson (wilson@chestnut.cygnus.com)
+
+ * mips-tdump.c: Include <time.h>. Delete ctime prototype.
+
+Fri Nov 11 14:16:00 1994 Holger Teutsch <holger@hotbso.rhein-main.de>
+
+ * clipper.md (movsi+1): Allow r->m move during reloading.
+
+Fri Nov 11 12:40:51 1994 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * c-decl.c (duplicate_decls): Properly merge decls with
+ differing DECL_CONTEXT.
+
+ * function.c (preserve_rtl_expr_result): find_temp_slot_from_address
+ now used.
+ Don't bring the temp slot to an inner level than it was.
+ (assign_stack_temp): Always initialize p->rtl_expr.
+
+ * m68k/mot3300g.h (SPACE_AFTER_L_OPTION): Deleted.
+
+Thu Nov 10 18:50:52 1994 Kresten Krab Thorup (krab@next.com)
+
+ * objc/list.h: Add ifndef/define for repeated inclusion.
+
+Thu Nov 10 18:02:58 1994 Michael Meissner <meissner@pasta.osf.org>
+
+ * c-common.c (decl_attributes): Check for attributes with leading
+ and trailing double underscores.
+
+Thu Nov 10 17:55:07 1994 Chris Metcalf (metcalf@catfish.lcs.mit.edu)
+
+ * fixincludes: Make argument type const for popen and tempnam in
+ stdio.h and for strdup in string.h, for OSF/1 V3.0.
+
+ * va-alpha.h (va_arg): Add cast to void * to suppress warning.
+
+Thu Nov 10 17:48:21 1994 Walter Misar (hrz.th-darmstadt.de)
+
+ * m68k/hp320.h (FUNCTION_{PRO,EPI}LOGUE): Don't define.
+ (IMMEDIATE_PREFIX, REGISTER_PREFIX): Define.
+
+Thu Nov 10 15:04:57 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * m68k/crds.h (FUNCTION_{PRO,EPI}LOGUE): Add code to adjust stack
+ when no frame pointer.
+ * m68k.c (output_function_epilogue): Use a1 as scratch, not a0.
+ * m68k/tower-as.h (FUNCTION_{PRO,EPI}LOGUE): No longer defined.
+ (FUNCTION_EXTRA_EPILOGUE): Define.
+ * m68k/tower.h (REGISTER_PREFIX, IMMEDIATE_PREFIX): Define.
+
+ * i386/x-sco, i386/x-sco4 (CLIB): Add -lPW.
+ (ALLOCA): Delete.
+
+ * c-common.c ({print,scan}_char_table): Allow `L' modifier
+ for integer output formats.
+ (check_format_info): Treat `ll' like `q'.
+
+ * rs6000.md (movsi): In TOC symbol case, use "la" for PowerPC.
+ (movdi): Handle TOC symbol just like movsi.
+
+ * objc-act.c (init_objc): Add missing casts to args of bcopy.
+ (lang_init): Ensure line number is 0, not -1.
+
+Tue Nov 8 07:51:53 1994 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (dump_single_macro, dump_defn_1): If -traditional,
+ dump macros in traditional style. This also avoids a bogus error
+ message if the macro uses traditional stringizing.
+
+Mon Nov 7 21:28:13 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
+
+ * protoize.c [!POSIX]: Only define O_RDONLY and O_WRONLY if not
+ already defined.
+
+Mon Nov 7 19:33:31 1994 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
+
+ * combine.c (try_combine): Update split_code after converting MULT
+ to ASHIFT.
+
+Mon Nov 7 12:26:24 1994 Torbjorn Granlund <tege@cygnus.com>
+
+ * rs6000.md (DImode load-with-update matcher): Fix typo in MEM mode.
+ (compare patterns): Fix several typos, SImode => CCmode.
+ * sh.md (subdi3): Delete % from constraints.
+ * 1750a.md (subqi3): Likewise.
+ * clipper.md (subdi3): Likewise.
+ * i370.md (subqi3): Likewise.
+ (anonymous subqi3 matcher): Likewise.
+ * i860.md (subdi3): Likewise.
+ * dsp16xx.md (mulqi3): Fix typo in MULT mode.
+ * elxsi.md (one_cmplsi2): Fix typo in NOT mode.
+
+Mon Nov 7 12:47:37 1994 Ian Lance Taylor <ian@cygnus.com>
+
+ * m68kv4.h (ASM_IDENTIFY_GCC): Use proper definition for SGS assembler.
+
+Mon Nov 7 11:02:25 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * gcc.c (process_command): Ignore LIBRARY_PATH and LPATH if
+ cross-compiler.
+
+Sun Nov 6 07:23:37 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cross-test.c (foo): Return value for BU in range for shifts.
+
+Sat Nov 5 14:25:36 1994 Jim Wilson (wilson@chestnut.cygnus.com)
+
+ * m68k.h (PREFERRED_RELOAD_CLASS): FP constants rejected by 'G'
+ are OK for class FP_REGS.
+
+Sat Nov 5 14:08:31 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * calls.c (store_one_arg): Preserve any temp slots whose address
+ may have been taken.
+
+ * real.c (GET_REAL, PUT_REAL): Cast args to bcopy to char *.
+ * reload1.c (reload): Likewise.
+ * i386.c ({save,restore}_386_machine_status): Likewise.
+ * reg-stack.c (subst_asm_stack_regs): Likewise.
+ (BLOCK_NUM): Rework to avoid cast of abort to int *.
+ (find_blocks): Don't use BLOCK_NUM on lhs.
+ (reg_to_stack, record_arg_reg_life): Cast arg to bzero to char *.
+
+Sat Nov 5 08:29:45 1994 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (rescan): Do not preserve newlines after macro name
+ if rescanning a macro expansion. Instead, preserve them if
+ not outputting marks.
+
+Fri Nov 4 17:25:29 1994 John David Anglin (dave@hiauly1.hia.nrc.ca)
+
+ * vax.c: Include tree.h and VMS-specific functions #ifdef VMS_TARGET.
+ * vms.h (VMS_TARGET): Define.
+
+Fri Nov 4 17:19:30 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * bi-arity.c (main): Cast enum to char in output.
+ * bc-emit.c (bc_emit_bytecode): Add missing cast.
+
+Thu Nov 3 14:17:22 1994 Mike Stump <mrs@cygnus.com>
+
+ * libgcc2.c (__register_exceptions): Find max ending of a segment for
+ end, not min.
+ * libgcc2.c (__unwind_function): New function to support stack
+ unwinding on i[34]86 for g++ exception handling.
+
+Thu Nov 3 18:55:42 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * Makefile.in (c-parse.o, c-lex.o): c-parse.h is in $(srcdir).
+
+Thu Nov 3 18:11:56 1994 John F Carr (jfc@mit.edu)
+
+ * rs6000.md (movsi): New alternative for SYMBOL_REF source operand.
+ * rs6000.c (print_operand): New code '*' to print TOC register number.
+ * rs6000.h (EXTRA_CONSTRAINT): 'R' matches a SYMBOL_REF for TOC entry.
+ (PRINT_OPERAND_PUNCT_VALID_P): Recognize '*'.
+ (PREDICATE_CODES): input_operand can now match SYMBOL_REF.
+
+Thu Nov 3 18:03:24 1994 Jason Merrill (jason@phydeaux.cygnus.com)
+
+ * cccp.c: TOOL_INCLUDE_DIR is not C++-aware.
+
+Thu Nov 3 17:23:30 1994 Jim Wilson (wilson@chestnut.cygnus.com)
+
+ * mips.c (mips_output_external): Exclude alloca from list of
+ used external functions.
+
+Tue Nov 1 19:19:41 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * Version 2.6.1 released.
+
+Tue Nov 1 18:51:00 1994 Torbjorn Granlund (tege@cygnus.com)
+
+ * pa.md (add_high_const): Add missing mode for PLUS.
+
+Tue Nov 1 18:39:53 1994 Stephen L Moshier (moshier@world.std.com)
+
+ * cse.c (simplify_unary_operation, case TRUNCATE): Set LV and HV.
+
+Tue Nov 1 18:36:23 1994 Pat Rankin (rankin@eql.caltech.edu)
+
+ * vax.c (struct extern_list): Put code back outside of #ifdef VMS.
+ (vms_check_external, vms_flush_pending_externals): Likewise.
+
+Mon Oct 31 16:18:12 1994 Michael Meissner <meissner@pasta.osf.org>
+
+ * i386/i386.md (movsf, movdf, movxf): If we are moving floating
+ point constants to a non-memory location that aren't 0 or 1,
+ assume we need the pic register if -fpic.
+
+Mon Oct 31 13:26:45 1994 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
+
+ * sparc.h (GO_IF_LEGITIMATE_ADDRESS): Don't allow TFmode LO_SUM.
+ * sparc.md (movtf+3): Disable pattern.
+
+Mon Oct 31 08:11:47 1994 Doug Evans <dje@canuck.cygnus.com>
+
+ * expr.c (expand_expr, COND_EXPR case): Don't use original target as
+ a temp if it's a volatile mem ref. Finish previous patch (don't
+ expand "X ? A & 1 : A" as "A & (X != 0)").
+
+Mon Oct 31 08:07:09 1994 Pat Rankin (rankin@eql.caltech.edu)
+
+ * vax.c: Include tree.h #ifdef VMS.
+ (struct extern_list): Move inside #ifdef VMS; add SIZE and IN_CONST
+ fields; make `extern_head' static; add second list head.
+ (vms_check_external): Move inside #ifdef VMS; give new args; maintain
+ list of both pending external symbols and previously defined ones.
+ (vms_flush_pending_externals): New function.
+ * vax/vms.h (ASM_GLOBALIZE_LABEL): Pass new args to vms_check_external.
+ (ASM_OUTPUT_EXTERNAL): Just call vms_check_external.
+ (ASM_{,FINISH_}DECLARE_OBJECT_NAME, ASM_FILE_END): Define.
+
+Mon Oct 31 08:00:59 1994 Michael Gschwind (mike@vlsivie.tuwien.ac.at)
+
+ * pdp11.h (TARGET_SWITCHES): Add -split and -no-split.
+ (TARGET_SPLIT, TARGET_NOSPLIT): New macros.
+ (TRAMPOLINE_TEMPLATE, INITIALIZE_TRAMPOLINE): Abort if -split.
+
+Mon Oct 31 07:53:34 1994 Warner Losh <imp@village.org>
+
+ * i386/x-freebsd (CLIB): Add definition.
+
+Mon Oct 31 07:49:17 1994 Jeffrey A Law <law@snake.cs.utah.edu>
+
+ * reorg.c (mark_set_resources): Properly handle SUBREGs.
+
+Mon Oct 31 07:24:32 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case COMPONENT_REF): Don't extract
+ field from a CONSTRUCTOR if it already has a TREE_CST_RTL.
+ (expand_expr, case ADDR_EXPR): Call mark_temp_addr_taken
+ on the temporary made when operand needs to be stored into memory.
+ * function.c (preserve_temp_slots): Preserve anything whose
+ address was taken when X is zero.
+
+Sun Oct 30 15:11:51 1994 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * msdos/top.sed, i386/config-nt.sed: Update version to 2.6.1.
+ * pa/t-pa-hpux: Add missing newline at end.
+
+Sat Oct 29 21:16:29 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (operand_subword): Fix typo: HOST_BITS_PER_INT
+ should be HOST_BITS_PER_WIDE_INT.
+
+Fri Oct 28 19:13:13 1994 Andrew McCallum (mccallum@vein.cs.rochester.edu)
+
+ * objc/misc.c (__objc_xcalloc): Use calloc instead malloc/bzero.
+
+Fri Oct 28 19:07:53 1994 Michael Gschwind (mike@vlsivie.tuwien.ac.at)
+
+ * pdp11.h (TRAMPOLINE_SIZE): Install real implementation.
+ (INITIALIZE_TRAMPOLINE, TRAMPOLINE_TEMPLATE): Likewise.
+
+Fri Oct 28 19:01:27 1994 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Makefile.in (stage?-start): Add semicolon between fi and done.
+
+Fri Oct 28 17:12:26 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_insn): Don't record a DEST if paradoxical SUBREG
+ and SRC is a SIGN_EXTEND or ZERO_EXTEND.
+
+ * alpha.md (reload_outqi): Correctly handle scratch assignments
+ for unaligned case when ADDR is a REG.
+
+Fri Oct 28 07:55:40 1994 Michael Meissner (meissner@osf.org)
+
+ * i386/i386.md (adddi3): Fixup code in case operands[0] is equal
+ to operands[2].
+
+Thu Oct 27 18:58:39 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (count_possible_groups): Fix typo in setting
+ counted_for_groups.
+
+Thu Oct 27 15:30:41 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * c-typeck.c (process_init_element): In the case of
+ [LO .. HI] = VALUE, use save_expr to only evaluate VALUE once.
+
+Thu Oct 27 15:15:25 1994 Torbjorn Granlund (tege@rtl.cygnus.com)
+
+ * gcc.c (process_command): Don't forget to split -Wl arguments at
+ commas.
+
+ * gcc.c (process_command): Handle -Wl, and -Xlinker similar to -l,
+ i.e., preserve their order with respect to linker input files.
+
+Thu Oct 27 13:11:16 1994 Douglas Rupp (drupp@cs.washington.edu)
+
+ * configure (i[345]86-*-winnt3*): Allow any version 3.x.
+ Don't use a t-winnt file and move x-winnt to config/i386.
+ * i386/x-winnt: Build ld-winnt.exe only on host.
+ * winnt/t-winnt: Deleted.
+
+Thu Oct 27 13:05:16 1994 Mike Collison (collison@chianti.sw.stratus.com)
+
+ * reload.c (debug_reload): New function to print reload info
+ set up by find_reloads.
+
+Wed Oct 26 18:27:03 1994 David Mosberger-Tang <davidm@piston.cs.arizona.edu>
+
+ * alpha.h (FUNCTION_PROFILER): Use $28 instead of $27.
+ (LINK_SPEC): Pass -pg to linker.
+ (LIB_SPEC): Link in -lprof1 with -pg, not -lprof2.
+ (STARTFILE_SPEC): USe gcrt0.o if -pg, not mcrt0.o.
+
+Wed Oct 26 18:22:34 1994 Doug Evans (dje@cygnus.com)
+
+ * expr.c (expand_expr, COND_EXPR case): Don't expand
+ "X ? A & 1 : A" as "A & (X != 0)".
+
+Wed Oct 26 18:06:52 1994 Douglas Rupp (drupp@cs.washington.edu)
+
+ * winnt/ld.c (expand_lib, main): Fix off-by-one bugs in several
+ calls to malloc.
+
+Wed Oct 26 22:00:09 1994 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * winnt/t-winnt: Remove some spurious blank lines.
+
+Wed Oct 26 14:14:39 1994 Michael Meissner (meissner@osf.org)
+
+ * i386/osfrose.h (REAL_NM_FILE_NAME): Use /usr/ccs/gcc/bfd-nm
+ instead of /usr/ccs/bin/nm, since the GNU nm does not output stab
+ symbols by default.
+
+Wed Oct 26 13:47:06 1994 Michael Gschwind (mike@vlsivie.tuwien.ac.at)
+
+ * config.sub (pdp11): New machine name.
+ * configure (pdp11-*-*): New configuration.
+ * pdp11.c, pdp11.h, pdp11.md, xm-pdp11.h: New files.
+
+Wed Oct 26 07:33:40 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * flow.c (find_basic_blocks): Ensure each live basic block is
+ actually reachable.
+ (life_analysis): Clean up handling of basic_block_drops_in.
+
+Tue Oct 25 18:40:12 1994 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (rescan): ".." no longer terminates a preprocessing
+ number, since that's incompatible with the C standard.
+
+Tue Oct 25 16:16:40 1994 Michael Dobson (dobson@info.usuhs.mil)
+
+ * we32k.h (CPP_PREDEFINES): Define u3b2, not u3b.
+
+Tue Oct 25 16:15:27 1994 Jim Wilson (wilson@cygnus.com)
+
+ * reorg.c (fill_slots_from_thread): Update THREAD if it is split.
+
+Mon Oct 24 00:12:46 1994 Jason Merrill (jason@phydeaux.cygnus.com)
+
+ * toplev.c (lang_options): Add -f{no-,}access-control.
+
+Mon Oct 24 06:14:03 1994 Richard Earnshaw (rwe@pegasus.esprit.ec.org)
+
+ * arm/arm.md (peepholes for call followed by branch): Disable.
+
+Sun Oct 23 08:54:27 1994 Richard Earnshaw (rwe@pegasus.esprit.ec.org)
+
+ * arm/x-riscix (INSTALL): Invoke install.sh with -c flag.
+
+Fri Oct 21 00:42:08 1994 Jason Merrill (jason@phydeaux.cygnus.com)
+
+ * Makefile.in (LIB2FUNCS): Add _pure.
+
+ * libgcc2.c (__pure_virtual): New function to go into vtable
+ entries for pure virtual methods instead of abort.
+
+Thu Oct 20 18:40:36 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.md (define_split comparison op with power of two minus 1):
+ Fix typo.
+
+Thu Oct 20 13:14:24 1994 Jason Merrill (jason@phydeaux.cygnus.com)
+
+ * collect2.c (add_to_list): Check for duplicates.
+
+ * alpha/alpha.h (LINK_SPEC): Pass -shared through; don't
+ pass -init __main if -shared.
+ (STARTFILE_SPEC): Wrap startfiles in %{!shared:}.
+ (INIT_NAME_FORMAT): Define.
+ (FINI_NAME_FORMAT): Define.
+ * alpha/osf12.h (LINK_SPEC): Ditto.
+ * alpha/gdb-osf12.h: #include osf12.h instead of alpha.h
+
+ * gcc.c (STARTFILE_SPEC): Wrap startfiles in %{!shared:}.
+
+Thu Oct 20 16:07:46 1994 Jim Wilson (wilson@cygnus.com)
+
+ * unroll.c (loop_iterations): Move all failure exits after the
+ computation of final_value.
+
+ * mips.md (movdf_internal2+1): Disable when TARGET_64BIT.
+
+ * i960.c (VARARGS_STDARG_FUNCTION): New macro.
+ (i960_function_name_declare, output_function_profiler,
+ i960_function_epilogue, i960_output_call_insn, i960_output_ret_insn,
+ i960_reg_parm_stack_space): Use it.
+ (compute_frame_size): Don't use current_function_pretend_args_size.
+ (i960_function_arg_advance, i960_function_arg): Don't use parameter
+ named.
+ (i960_setup_incoming_varargs): No need to adjust first_reg_offset
+ after setting it. Don't save last named argument to stack.
+ Don't set pretend_size.
+ * i960.h (SIGNED_CHAR_SPEC): Use #if instead of ?:.
+ * va-i960.h (va_start): Use builtin_arts_info instead of
+ builtin_next_arg.
+
+ * cse.c (merge_equiv_classes, cse_insn): Call rehash_using_reg
+ after insert_regs.
+ (canon_hash): Don't use qty_const to compute hash code for a
+ register.
+
+Thu Oct 20 09:41:51 1994 Richard Kenner (kenner@vlsi1.ultra.nyu)
+
+ * stor-layout.c (variable_size): Return SIZE if it contains
+ a PLACEHOLDER_EXPR.
+
+Tue Oct 18 19:51:24 1994 Jason Merrill (jason@phydeaux.cygnus.com)
+
+ * collect2.c (main): Check REAL_*_FILE_NAME first.
+
+Wed Oct 19 15:55:15 1994 David J. MacKenzie <djm@duality.gnu.ai.mit.edu>
+
+ * config.sub: Add licensing exception for Autoconf.
+
+Wed Oct 19 06:43:46 1994 Michael Meissner (meissner@osf.org)
+
+ * i386/i386.h (FUNCTION_BLOCK_PROFILER): Don't bother preserving
+ eax if -fpic, since it is a call clobbered register anyway. Fix -fpic
+ code so that it is correct.
+
+Tue Oct 18 18:00:23 1994 Michael Meissner (meissner@osf.org)
+
+ * i386/i386.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER): Move
+ macros here from osfrose, netbsd, and freebsd ports. Remove
+ assumptions that the assembler is gas. Rewrite and fix the
+ instructions produced with -fpic.
+
+ * i386/osfrose.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER): Delete.
+ * i386/freebsd.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER): Delete.
+ * i386/netbsd-i386.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER):
+ Delete.
+
+Tue Oct 18 20:27:29 1994 Doug Evans (dje@cygnus.com)
+
+ * sparc.h (FRAME_POINTER_REQUIRED): Require frame pointer if
+ non-leaf flat function.
+ * sparc.c (sparc_frame_info): Combine members gp_sp_offset and
+ fp_sp_offset into reg_offset. All uses changed.
+ (RETURN_ADDR_REGNUM): New macro.
+ (RETURN_ADDR_MASK, FRAME_POINTER_MASK): New macros.
+ (sparc_flat_compute_frame_info): Rename local mask to gmask.
+ Only ensure reg save area is 8 byte aligned if necessary.
+ (sparc_flat_save_restore): New arguments base_reg, offset, gmask,
+ and fmask. All callers changed. No longer use %g2 to save regs
+ in big stack frames.
+ (sparc_flat_output_function_prologue): Delete local tsize.
+ Reorder storing of previous frame pointer and return address reg to
+ make it easier for gdb to identify flat functions. Decrement %sp
+ twice when saving call-saved regs in big frames.
+ Count fp regs as 4 bytes in assembler comment.
+ (sparc_flat_output_function_epilogue): Likewise when restoring
+ call-saved regs.
+
+Tue Oct 18 19:33:55 1994 Mike Collison (collison@sw.stratus.com)
+
+ * reload1.c (reload): Correctly compute group additional needs when
+ the return register cannot be used as a spill register.
+
+Tue Oct 18 16:17:26 1994 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
+
+ * mips.h (ASM_SPEC): Pass -mcpu= option to GNU as.
+
+Tue Oct 18 08:39:49 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * flow.c (propagate_block): Call mark_used_regs to show global regs
+ used by call.
+ * combine.c (can_combine_p): Don't combine into CALL_INSN where
+ DEST is a global reg.
+
+ * c-decl.c (start_function): Save immediate_size_expand
+ and initialize it to zero in case nested function.
+
+ * pa.c (non_hard_reg_operand): New function.
+ * pa.md (reload_{in,out}*): Replace general_operand with
+ non_hard_reg_operand.
+
+Fri Oct 14 18:35:30 1994 Jason Merrill (jason@phydeaux.cygnus.com)
+
+ * gcc.c (default_compilers): Treat files with an extension of .c++
+ as C++ code.
+
+Mon Oct 17 19:21:57 1994 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * configure (rs6000-ibm-aix4.1*): New configuration.
+ * rs6000/aix41.h: New file.
+
+Mon Oct 17 19:15:14 1994 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
+
+ * va-mips.h (va_arg): Add little endian mips3 support.
+
+ * sparc.h (RETURN_IN_MEMORY): Return true for TCmode values.
+
+ * README.IRIX5: Delete.
+ * install.texi: Update Irix 5 debugging info.
+
+ * mips.c (function_prologue): Only emit line number when SDB_DEBUG.
+
+ * configure: Delete new argument, --noguess. Default build from
+ host if host specified, otherwise guess build. Fix typo in
+ setting build from host.
+
+Mon Oct 17 15:54:56 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * calls.c (expand_call, emit_library_call, emit_library_call_value):
+ Allways adjust current_function_outgoing_args_size, even #ifndef
+ ACCUMULATE_OUTGOING_ARGS. (Useful for stack overflow checking.)
+ * function.c (current_function_outgoing_args_size): Update comment.
+
+Mon Oct 17 18:49:01 1994 Paul Eggert <eggert@twinsun.com>
+
+ * cccp.c (rescan): Preserve newlines after macro names at the top level
+ since this is more likely to do the right thing with line numbers.
+
+Mon Oct 17 11:31:42 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (gen_reload): Renamed from gen_input_reload.
+ (emit_reload_insns): Delete SECONDARY_MEM_NEEDED case for input
+ reloads that can't happen and doesn't work.
+ Fix errors in use of reload_outxx insns.
+ Simplify output reload code by using gen_reload.
+ * reload.h (gen_reload): Renamed from gen_input_reload.
+
+Mon Oct 17 09:26:57 1994 Richard Earnshaw (rwe@pegasus.esprit.ec.org)
+
+ * unroll.c (copy_loop_body, case JUMP_INSN): Don't abort if invert_exp
+ fails. Instead, redirect the jump around an unconditional branch.
+
+Sun Oct 16 05:02:23 1994 Richard Earnshaw (rwe@pegasus.esprit.ec.org)
+
+ * emit-rtl.c (add_insn_{before,after}): Don't abort because AFTER was
+ deleted when not optimizing.
+
+Fri Oct 14 19:26:28 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.c (emit_move_sequence): Handle secondary reload when loading
+ a constant into SAR.
+
+Fri Oct 14 10:29:31 1994 Richard Earnshaw (rwe@pegasus.esprit.ec.org)
+
+ * fixincludes: Fix X11/Intrinsic.h for RISCiX to remove ___type from
+ XtOffset.
+ Add all files that receive special attention to REQUIRED, so that
+ dependent copies are done if necessary.
+
+ * getpwd.c: Always use getwd if HAVE_GETWD is defined.
+ * arm/xm-arm.h: Define HAVE_GETWD.
+
+ * arm/x-riscix, arm/t-riscix: New files
+ * configure (arm-*-riscix*): Use them.
+
+Thu Oct 13 17:12:27 1994 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
+
+ * i960.md (call, call_internal, call_value, call_value_internal):
+ Use memory_operand not general_operand.
+
+ * optabs.c (expand_fix): Correct typo with FIX/UNSIGNED_FIX
+ REG_NOTES.
+
+Thu Oct 13 10:44:32 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * genattrtab.c (optimize_attrs): Don't do anything if
+ num_insn_ents is zero.
+
+Wed Oct 12 19:06:48 1994 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
+
+ * mips/mips.c (mips_expand_prologue): Handle types that need
+ constructing. Rename TYPE to PASSED_TYPE and use consistently.
+
+Wed Oct 12 11:32:05 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * genattrtab.c (num_insn_ents): New static variable.
+ (remove_insn_ent): Decrement num_insn_ents.
+ (insert_insn_ent): Increment num_insn_ents.
+ (optimize_attrs): Use xmalloc to allocate all the attr_value_list
+ structures at once, rather than using alloca for each one.
+
+Wed Oct 12 09:17:34 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * optabs.c (??hf2_libfunc): Define like ??sf2_libfunc.
+ (emit_float_lib_cmp): Call HFmode library functions.
+ (init_optabs): Set names for HFmode comparison functions.
+ * expr.h (??hf2_libfunc): Add declarations, like ??sf2_libfunc.
+
+Tue Oct 11 19:20:48 1994 Douglas Rupp (drupp@cs.washington.edu)
+
+ * winnt/ld.c (main): Pass -debug:full -debugtype:coff.
+ * winnt/t-winnt: Rework rules for ld.
+ * i386/config-nt.bat: Renamed from config/i386/config-winnt.bat.
+ Make specific for x86, not all winnt; change filenames.
+ * i386/config-nt.sed: Remove -g from CFLAGS.
+ Reflect changes to t-winnt and other minor changes.
+ * i386/x-winnt: Renamed from winnt/x-winnt.
+ * i386/config-nt.sed: Renamed from config/winnt/top.sed.
+
+Tue Oct 11 18:40:41 1994 Peter Schauer (Peter.Schauer@regent.e-technik.tu-muenchen.de)
+
+ * rs6000.h (ASM_DECLARE_FUNCTION_NAME): Always put out .lglobl
+ for static functions.
+
+Mon Oct 10 19:19:51 1994 Alex T. Ramos (ramos@engr.latech.edu)
+
+ * expr.c (convert_move): Add TImode conversions.
+
+Mon Oct 10 18:46:44 1994 Alex Dreyzen (alex@alex.jf.intel.com)
+
+ * optabs.c (expand_float): Copy TEMP to TARGET when
+ making recursive call and adjusting.
+
+Mon Oct 10 07:10:25 1994 Michael Meissner (meissner@osf.org)
+
+ * i386/linux.h (DEFAULT_PCC_STRUCT_RETURN): Do not define as 0 if
+ LINUX_ELF is defined.
+ (perform.h): Include perform.h to define asm statements to use for
+ libgcc1.a builds.
+
+ * i386/linuxelf.h (DEFAULT_PCC_STRUCT_RETURN): Define as 1.
+ (RETURN_IN_MEMORY): Don't define.
+
+Sun Oct 9 11:49:20 1994 Michael Meissner (meissner@osf.org)
+
+ * i386/i386.md (movsf_mem): Add & constraint, so that the scratch
+ register does not clobber the destination address.
+
+Sun Oct 9 12:40:43 1994 Richard Earnshaw (rwe@pegasus.esprit.ec.org)
+
+ * arm.md (reload_outdf): Don't call gen_addsi3 if the address is just
+ a register.
+
+Sat Oct 8 11:16:50 1994 Doug Evans (dje@cygnus.com)
+
+ * objc/archive.c (__objc_free): New function.
+ (__objc_finish_read_root_object): Use it.
+
+Fri Oct 7 19:23:03 1994 J.T. Conklin (jtc@cygnus.com)
+
+ * ginclude/stddef.h: Netware uses _SIZE_T_DEFINED_, _WCHAR_T_DEFINED_.
+
+Fri Oct 7 12:45:43 1994 Michael Meissner (meissner@osf.org)
+
+ * i386/i386.c (legitimate_address_p): Disable SUBREGs as either
+ the index or base register.
+
+Fri Oct 7 08:24:44 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * i386/gnu.h (CPP_PREDEFINES): Define __HURD__.
+
+ * collect2.c (my_strerror): If HAVE_STRERROR defined, call strerror.
+ * xm-gnu.h (HAVE_STRERROR): Define.
+
+ * function.c (preserve_temp_slots): If X cannot be a temp
+ slot, preserve all things whose address was taken at the
+ present level.
+
+ * function.c (assign_stack_temp): Abort if SIZE == -1.
+
+ * expr.c (safe_from_p): If EXP has a variable size, assume safe.
+ (preexpand_calls): Don't preexpand a call that returns a variable-
+ sized object.
+
+ * emit-rtl.c (add_insn_{after,before}): Fix error in last change.
+
+Thu Oct 6 09:18:28 1994 Kresten Krab Thorup (krab@next.com)
+
+ Adam Fedor (fedor@hopper.colorado.edu)
+ * objc/archive.c (__objc_finish_read_root_object): Delay freeing
+ of back-patch list.
+
+ Andrew McCallum (mccallum@cs.rochester.edu)
+ * objc/objc.h (BOOL): Changed from char to unsigned char.
+
+Thu Oct 6 08:17:04 1994 Stan Cox (coxs@dg-rtp.dg.com)
+
+ * m88k/m88k.c (emit_move_sequence): If operand1 is an invalid PIC
+ address, then legitimize it before doing anything else.
+
+Thu Oct 6 06:54:03 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_insn): Don't call force_const_mem on (const (truncate)).
+
+ * expr.c (store_expr): Don't clobber TEMP with address.
+
+ * reorg.c (try_merge_delay_insns): Update THREAD if it is split.
+
+ * function.c (struct temp_slot): New field addr_taken.
+ (assign_stack_temp): Initialize it.
+ (mark_temp_addr_taken): New function.
+ (preserve_temp_slots): Decrement level of things at same level
+ but whose address has been taken.
+ * expr.c (expand_expr, case ADDR_EXPR): Call mark_temp_addr_taken.
+
+Wed Oct 5 14:17:39 1994 Jason Merrill (jason@phydeaux.cygnus.com)
+
+ * fold-const.c (fold, COMPONENT_REF): Don't die if the CONSTRUCTOR
+ doesn't initialize the field we want.
+
+Wed Oct 5 11:38:48 1994 Michael Meissner (meissner@osf.org)
+
+ * i386/i386.c (legitimize_pic_address): Changes to support
+ LABEL_REF references when using -fpic.
+ (output_pic_addr_const): Ditto.
+ (print_operand_address): Ditto.
+
+ * i386/i386.md (movsi insn): Changes to support LABEL_REF
+ references when using -fpic.
+ (movsi_lea): Name insn supporting lea instruction so it shows up
+ more clearly when doing -dp.
+
+Wed Oct 5 06:56:36 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reorg.c (try_merge_delay_insns): Update THREAD if deleting first
+ insn in it.
+
+Wed Oct 5 01:19:14 1994 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * configure (i[345]86-*-gnu*): Set xm_file=i386/xm-gnu.h.
+ * config/i386/xm-gnu.h: New file.
+ * config/xm-gnu.h: New file.
+ * config/i386/gnu.h: Move #include <fcntl.h> out of here, into
+ config/xm-gnu.h.
+
+Tue Oct 4 23:19:28 1994 Michael Meissner <meissner@pasta.osf.org>
+
+ * protoize.c (POSIX includes): If POSIX is defined, include
+ sys/wait.h to get WIFSIGNALED, WTERMSIG, WIFEXITED, and
+ WEXITSTATUS.
+
+Tue Oct 4 21:48:02 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
+
+ * config/i386/gnu.h: Include <fcntl.h> to get O_RDONLY definition.
+ * gcc.c (O_RDONLY): Define macro iff not already defined.
+ (read_specs): Second arg to open should be O_RDONLY, not constant 0.
+
+Tue Oct 4 19:06:38 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (do_jump_for_compare): Properly scan insns when
+ branch is at start of sequence.
+
+Tue Oct 4 16:53:54 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * gcc.c, collect2.c, protoize.c (WIFSIGNALED): Define if not
+ already defined.
+ (WTERMSIG, WIFEXITED, WEXITSTATUS): Likewise.
+ * gcc.c (execute): Use them.
+ * collect2.c (do_wait): Likewise.
+ * protoize.c (gen_aux_info_file): Likewise.
+
+Tue Oct 4 16:38:06 1994 Michael Meissner <meissner@pasta.osf.org>
+
+ * i386/i386.h (RETURN_IN_MEMORY): Define so that large types such
+ as complex double values get returned like structures do, and
+ don't overwrite %ebx.
+
+Tue Oct 4 15:58:21 1994 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
+
+ * lynx-ng.h, lynx.h (PREFERRED_DEBUGGING_INFO): Add undef before
+ define.
+
+Tue Oct 4 05:12:02 1994 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * config.sub: Translate -gnu/linux* to -linux*.
+
+Mon Oct 3 11:43:45 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * config.sub: Add support for MIPS variants: mips64, mipsel,
+ mips64el, mips64orion, mips64orionel, mips3*.
+
+Sun Oct 2 18:26:34 1994 Jason Merrill (jason@phydeaux.cygnus.com)
+
+ * function.c (push_function_context_to): Renamed from
+ push_function_context, adds argument to indicate that the new
+ function is not a nested function.
+ (push_function_context): Call it.
+ (pop_function_context{,_from}): Similarly.
+
+ * tree.c (save_tree_status): Add argument to indicate that the new
+ function is not a nested function.
+ (restore_tree_status): Ditto.
+
+Sun Oct 2 18:05:37 1994 Doug Evans (dje@cygnus.com)
+
+ * configure (i[34]86-*): Change to i[345]86-*.
+ (target_cpu_default): Treat i586 as an i486 (for now).
+
+Sun Oct 2 10:25:51 1994 Richard Earnshaw (rwe@pegasus.esprit.ec.org)
+
+ * arm.md (movsf): If reloading, create a scratch from the target for
+ loading a constant into integer regs.
+ (movdf): Likewise.
+
+ Support for variants that fault on unaligned addrs:
+ * arm.h (TARGET_SHORT_BY_BYTES): New macro.
+ (TARGET_SWITCHES): Recognize switches -m[no-]short-load-bytes.
+ (TARGET_DEFAULT): Only define if not already done so.
+ (PROMOTE_MODE): Promote HImode unsigned if TARGET_SHORT_BY_BYTES.
+ (SECONDARY_INPUT_RELOAD_CLASS): Need a scratch for reloading HImode if
+ TARGET_SHORT_BY_BYTES.
+ * arm.c (arm_reload_in_hi): New function.
+ * arm.md (zero_extendhisi2, extendhisi2): Expand to suitable byte
+ sequence when TARGET_SHORT_BYTES and loading a mem.
+ (movhi_bytes, extendhisi2_mem): New expands.
+ (movhi): Call movhi_bytes to load a short from memory if
+ TARGET_SHORT_BY_BYTES.
+ (all matchers loading a short from memory): Don't match if
+ TARGET_SHORT_BY_BYTES.
+ (matcher for movhi when TARGET_SHORT_BY_BYTES): New pattern to cover
+ remaining valid cases.
+
+Sun Oct 2 08:54:30 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reg-stack.c (subst_stack_regs): Check for NOTE to see if insn was
+ deleted.
+
+ * reorg.c (fill_slots_from_thread): Update THREAD if deleting
+ its first insn.
+
+ * reg-stack.c (delete_insn_for_stacker): Don't set INSN_DELETED_P
+ on NOTE_INSN_DELETED.
+
+Sat Oct 1 20:42:33 1994 Chip Salzenberg <chip@fin.uucp>
+
+ * sco4.h (CPP_PREDEFINES): Remove i386, unix.
+ (CPP_SPEC): Add them here, so that they're undefined if -ansi.
+ Also add _i386 and _unix, which are always defined.
+ * x-sco (CLIB): Add "-lmalloc".
+ (ALLOCA): Define as "-lPW".
+ * x-sco4 (CC, OLDCC, RCCFLAGS, CCLIBFLAGS, CLIB, ALLOCA): From x-sco.
+ (X_CFLAGS): Remove.
+
+Sat Oct 1 14:27:45 1994 Michael Meissner (meissner@osf.org)
+
+ * i386/i386.md (movsf_push386): Rename to movsf_push_nomove.
+ (movdf_normal): Prefer to use float registers rather than general
+ purpose registers.
+
+Sat Oct 1 07:01:10 1994 Richard Earnshaw (rwe@pegasus.esprit.ec.org)
+
+ * c-decl.c (shadow_label): Emit an error if the label is already
+ declared at this label scope.
+
+Sat Oct 1 06:44:58 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (add_insn_{before,after}): Abort if insertion point is
+ a deleted insn.
+ * jump.c (jump_optimize): When deleting a jump, properly set NEXT.
+ (duplicate_loop_exit_test): Don't insert NOTE_INSN_LOOP_VTOP
+ before deleted insn; insert first, then delete.
+
+ * gcc.c: Install omitted hunk from last diff.
+
+Fri Sep 30 18:26:11 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (add_insn_after): Abort if can't find AFTER and it
+ has no NEXT_INSN.
+ (add_insn_before): New function.
+ (emit_{insn,insns,jump_insn,call_insn,barrier,note}_before): Call it.
+
+Fri Sep 30 17:33:41 1994 Douglas Rupp (drupp@cs.washington.edu)
+
+ * config.sub (windowsnt): Alias for winnt.
+ (winnt): New OS name.
+ * configure (extra_programs): New, like extra_parts.
+ (i[34]86-*-winnt3.1): New configuration.
+ * genattr.c (atoi): Remove declaration.
+ * getpwd.c: #ifdef WINNT, include direct.h.
+ * sdbout.c: Don't include syms.h for winnt.
+ * toplev.c: Don't include times.h for winnt.
+ (get_run_time): Just return zero for winnt.
+ (main): Don't print memory usage for OS/2 or winnt.
+ * cccp.c (main): Use DIR_SEPARATOR if defined.
+ Use "Include" environment variable instead of CPATH for winnt.
+ * gcc.c: Don't include sys/file.h for winnt; use process.h instead.
+ (concat): Now just concats two things; all callers changed.
+ (concat[346]): New functions.
+ (dir_separator_str): New variable.
+ (exec_prefixes, startfile_prefixes, include_prefixes): Renamed
+ from same names without plural; all users changed.
+ (find_a_file, process_command, do_spec_1): Use DIR_SEPARATOR.
+ (find_file, is_directory, main): Likewise.
+ (lookup_compiler): If OS/2, do case-independent search.
+ (fix_argv): New function on winnt.
+ (FIX_ARGV): New macro for some systems; use instead of argv.
+ * i386/unix.h: Treat ALMOST_STDC like __STDC__.
+ (AS2C): New macro.
+ * i386.c (output_387_binary_op): Use AS2C instead of AS2 with
+ null first arg.
+ * config/winnt/config-nt.bat, config/winnt/ld.c: New files.
+ * config/winnt/{[tx]-winnt, config/winnt/top.sed: New files.
+ * config/winnt/winnt.h, config/winnt/xm-winnt: New files.
+ * i386/winnt.h, i386/xm-winnt.h: New files.
+
+Thu Sep 29 19:53:14 1994 Jim Wilson (wilson@cygnus.com)
+
+ * sparc.md (movdf+3): Handle overlapping registers in define_split.
+
+ * gcc.c (default_compilers): Add %Z to all cpp specs.
+ (n_preprocessor_options, preprocessor_options): New variables.
+ (process_command): Handle -Wp option.
+ (do_spec_1): Handle %Z spec.
+
+ * i960/i960-coff.h: New file.
+ * t-960bare: New file.
+ * config.sub (os): Accept coff as an OS.
+ * configure (i960-*-coff): New configuration.
+
+ * expr.c (result_vector): Use INCOMING_REGNO when !savep instead
+ of when savep.
+ * sparc.md (call): Use struct value pattern is struct size is not
+ equal to zero instead of greater than zero.
+ (call+7, call+8): New patterns for untyped calls.
+ (untyped_call): Revise to emit explicit rtl for all operation.
+ Delete four old patterns that matched the unexpanded untyped_call
+ pattern.
+ (blockage): New pattern.
+ (flush_register_windows): Modify from 0 to 1.
+ (goto_handler_and_restore): Modify from 1 to 2.
+ (flush): Modify from 2 to 3.
+ * sparc.c (sparc_initialize_trampoline): FLUSH is now 3 not 2.
+
+ * calls.c (emit_library_call): For FUNCTION_ARG_PASS_BY_REFERENCE,
+ pass address through force_operand before using it.
+
+ * i960.c (i960_setup_incoming_varargs): Store parameter registers
+ at proper offset in argument block.
+
+Thu Sep 29 16:39:32 1994 Mike Stump <mrs@cygnus.com>
+
+ * stmt.c (expand_return): We have to be careful of cleanups that can
+ be generated when expanding the return value, as they might otherwise
+ wipe out the return value.
+
+Thu Sep 29 13:35:24 1994 Mike Stump <mrs@cygnus.com>
+
+ * expr.c (do_jump): Handle cleanups in TRUTH_ANDIF_EXPR and
+ TRUTH_ORIF_EXPR.
+
+Thu Sep 29 13:23:56 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * gcc.c (struct option_map): Sort in alphabetical order.
+ (translate_options): Ignore option once an error occurs.
+ Fix error with reversed 'a' and 'o'.
+ Give error if specified abbreviation is unambiguous.
+
+ * c-typeck.c (convert_for_assignment): When converting object
+ to union, allow converting the constant zero into a pointer
+ member of the union.
+
+Wed Sep 28 19:33:01 1994 Alex T Ramos (ramos@engr.latech.edu)
+
+ * machmode.def (PSImode): Widens to PDImode.
+ * expr.c (convert_move): Added handling of PDImode conversions.
+
+Wed Sep 28 19:24:17 1994 H.J. Lu (hjl@nynexst.com)
+
+ * configure: Don't make objc-runtime if cross-compiling gcc.
+ * build-make (FIXINCLUDES): Set to Makefile.in.
+
+Wed Sep 28 19:18:19 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (trampoline_address): Add missing call to
+ round_trampoline.
+
+Wed Sep 28 18:34:13 1994 Michael Meissner (meissner@osf.org)
+
+ * config/svr4.h (ESCAPES): Print \v in octal rather than as '\v',
+ since some older versions of gas didn't accept it.
+
+Wed Sep 28 14:29:20 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Comment out loop which handles symbolic links to
+ files. It appears to not work, and to be unnecessary.
+
+Tue Sep 27 19:27:56 1994 Matthias Pfaller (leo@marco.de)
+
+ * ns32k.h (ENCODE_SECTION_INFO): Only calls may go through the
+ PLT. All address loads, even function address loads, have to
+ go through the GOT or function addresses will not be unique.
+
+Tue Sep 27 19:20:12 1994 Paul Eggert (eggert@twinsun.com)
+
+ * cccp.c (newline_fix, name_newline_fix): Don't treat \r
+ specially here; it only causes bugs. This undoes the
+ May 14 16:01:13 1990 change to newline_fix and name_newline_fix.
+
+Tue Sep 27 19:02:55 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * m88k.h (ASM_OUTPUT_SOURCE_LINE): Add missing #undef.
+
+Tue Sep 27 18:32:17 1994 William J. Eaton (wje@hoffman.rstnu.bcm.tmc.edu)
+
+ * function.c (optimize_bit_field): Put any insns made by
+ change_address in front of INSN.
+ (expand_function_end): Don't pass DECL_INITIAL to setjmp_protect
+ if it is error_mark_node.
+
+ * genoutput.c, reload.c (n_occurrences): Make arg int, not char.
+ * objc-act.c (warn_with_method): Likewise.
+
+ * optabs.c (expand_fix): Call emit_library_call_value.
+
+Tue Sep 27 12:39:10 1994 Mike Stump (mrs@cygnus.com)
+
+ * Makefile.in, libgcc2.c (L_eh): some support routines for C++.
+
+Mon Sep 26 06:45:20 1994 Michael Meissner (meissner@osf.org)
+
+ * 386/i386.md (adddi3, subdi3): Rewrite to add a clobber of a
+ scratch variable, so that memory/memoroy adds and subtracts can be
+ done using just one scratch register. Also, don't require op1 to
+ be the same as op0.
+
+Fri Sep 23 19:03:09 1994 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * config/i386/gnu.h (LIB_SPEC): Remove macro.
+
+Fri Sep 23 16:11:26 1994 Michael Meissner (meissner@osf.org)
+
+ * i386/lynx-ng.h (CALL_USED_REGISTERS): Copy definition from
+ i386/lynx.h that makes ebx be a call clobbered register, since
+ some system calls evidently trash it.
+
+Fri Sep 23 15:54:53 1994 Jim Wilson (wilson@cygnus.com)
+
+ * configure (mips-*riscos*): Changed to mips-*-riscos*.
+ (mips-*-riscos*-*): Deleted.
+
+ * cse.c (invalidate): New parameter FULL_MODE. All callers
+ changed.
+ (set_nonvarying_address_components): Modify initial comment.
+ (cse_insn): When call invalidate for dest, use the actual dest not
+ inner_dest.
+
+Thu Sep 22 18:56:19 1994 Torbjorn Granlund (tege@cygnus.com)
+
+ * expmed.c (expand_divmod): Special case for signed CEIL_DIV_EXPR
+ when divisor is power of 2.
+
+Thu Sep 22 12:28:53 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * fixinc.svr4: Fix size_t, ptrdiff_t and wchar_t like fixincludes
+ does. Use extern inline rather than static inline in byteorder.h.
+
+Thu Sep 22 12:22:03 1994 Steve Dum (steve_dum@mentorg.com)
+
+ * collect2.c (main): Discard the first executable once we've
+ exploited it.
+
+Thu Sep 22 11:38:34 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Tweaks for LynxOS 2.2.2: accept spaces after # when
+ removing #define void int in curses.h; change prototype of fnctl
+ in fcntl.h to match POSIX.1.
+
+Thu Sep 22 07:18:37 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * configure: Consistently put specified manufacturer names ahead
+ of entries with wildcard manufacturers.
+
+ * calls.c (emit_call_1): Fix typo in last change.
+
+Wed Sep 21 21:32:56 1994 Chris Smith (csmith@convex.com)
+
+ * config.guess: Add convex c3* and c4* guesses.
+ * configure: Don't run fixincludes on convex.
+
+Wed Sep 21 15:59:12 1994 Ashley Saulsbury (ans@sics.se)
+
+ * alpha.h (ASM_FILE_START): Write .set volatile.
+
+Wed Sep 21 14:45:45 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * calls.c (emit_call_1): Properly add a CLOBBER for sp
+ to CALL_INSN_FUNCTION_USAGE.
+
+ * c-typeck.c (mark_addressable): Give different error if trying
+ to put object with volatile fields into register; don't use DECL_NAME.
+
+Wed Sep 21 14:02:10 1994 Jim Wilson (wilson@cygnus.com)
+
+ * reload1.c (eliminate_regs): Make test in LOAD_EXTEND_OP case
+ more precise.
+
+Wed Sep 21 11:34:12 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Don't try to remove empty directories until after
+ removing DONE files.
+
+Wed Sep 21 05:52:49 1994 Uwe Seimet (seimet@chemie.uni-kl.de)
+
+ * m68k/atari.h (NO_{DOLLAR,DOT}_IN_LABEL): Define.
+
+Tue Sep 20 20:06:08 1994 Doug Evans (dje@cygnus.com)
+
+ * final.c (asm_insn_count): Handle ASM_INPUTs too.
+
+Tue Sep 20 19:32:10 1994 Oliver Kellogg (okellogg@salyko.cube.net)
+
+ * 1750a.h, 1750a.c, 1750a.md: New files, to use as1750.
+ * 1750a/m1750.inc: File deleted.
+ * 1750a/ms1750.inc: New file.
+
+Tue Sep 20 17:55:50 1994 Hallvard B Furuseth (hbf@durin.uio.no)
+
+ * cccp.c (make_definition): Enable `-D' with macro arguments.
+
+Tue Sep 20 17:49:47 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cexp.y (HOST_WIDE_INT, HOST_BITS_PER_WIDE_INT): New macros.
+ (expression_value): Now HOST_WIDE_INT.
+ (parse_c_expression): Now returns HOST_WIDE_INT.
+ * cccp.c (eval_if_expression): Likewise.
+ (do_if, do_elif): Reflect new return value of functions.
+
+ * alpha.c (mode_mask_operand): Always return a value.
+
+ * function.c (pop_function_context): Clear reg_renumber.
+
+ * gcc.c (process_command): Add new switch, -dumpmachine.
+
+Tue Sep 20 15:57:40 1994 Jim Wilson (wilson@cygnus.com)
+
+ * sched.c (sched_analyze_insn): Parameter loop_note type changed
+ to rtx, and name changed to loop_notes. Code adding it to
+ REG_NOTES modified to account for type change.
+ (sched_analyze): Variable loop_note type changed to rtx, and name
+ changed to loop_notes. Store LOOP_* REG_DEAD notes in it instead
+ of LOOP_* NOTE_LINE_NUMBER.
+ (schedule_block): Pass last not insn to emit_note_before call.
+
+ * iris5.h (ASM_OUTPUT_UNDEF_FUNCTION): Define.
+ (ASM_OUTPUT_EXTERNAL_LIBCALL): Define.
+ (ASM_DECLARE_FUNCTION_SIZE): Define.
+ * mips.c (mips_output_external): Use ASM_OUTPUT_UNDEF_FUNCTION.
+ (mips_output_external_libcall): New function.
+ (mips_asm_file_end): Handle ASM_OUTPUT_UNDEF_FUNCTION.
+ * README.IRIX5: Update.
+
+Tue Sep 20 14:39:37 1994 Michael Meissner (meissner@osf.org)
+
+ * i386/i386.h (output_move_memory): Add declaration.
+ (output_move_pushmem): Ditto.
+
+ * i386/i386.c (output_move_pushmem): New function to handle
+ pushing bytes from memory onto the stack, possibily using
+ temporary registers.
+ (output_move_memory): New function to handle moving bytes from
+ memory to memory via temporary registers.
+
+ * i386/i386.md (movsi insn): If -fpic and the value we are moving
+ is a constant pool address, emit a leal instruction instead of
+ movl.
+ (movsf_push): Allow pushes from memory.
+ (SF, DF, XF, DI pushes): Move most of the code to the common
+ function output_move_pushmem.
+ (SF, DF, XF, DI memory->memory moves): Move most of the code to
+ the common function output_move_memory.
+ (DI move patterns): Combine DI patterns into two, one for pushes,
+ and one for everything else, so that the combiner will combine a
+ load with a store into a memory->memory move.
+ (untyped_call): Replace non-working code with m68k version that
+ emits a regular call, then breaks the parallel moves into separate
+ moves, and then issue a blockage instruction.
+ (blockage): New unspec_volatile insn to block insns from being
+ moved across this point.
+ (untyped_return): Delete.
+ (update_return): Delete.
+
+ * objc/sendmsg.c (get_imp): Allow __inline__ on x86 platforms.
+
+Tue Sep 20 12:21:12 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Handle the case of a symlink to root/* from a
+ subdirectory of another symlink to root/*.
+
+Mon Sep 19 20:30:21 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * fold-const.c (fold): Handle COMPONENT_REFs involving CONSTRUCTORs.
+
+Mon Sep 19 20:25:38 1994 Will Athanasiou (will@westford.ccur.com)
+
+ * rs6000.md (load sf with update): Fix RTL typo.
+
+Mon Sep 19 08:46:46 1994 Charles M. Hannum (mycroft@duality.gnu.ai.mit.edu)
+
+ * c-common.c (check_format_info): Enable checking of format
+ specifiers using the `q' (quad) length modifier.
+ (format_char_info): Add `qlen'.
+ (print_char_table, scan_char_table): Add appropriate entries for
+ qlen.
+
+Sat Sep 17 12:48:57 1994 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * stmt.c (mark_seen_cases): Don't call fatal (or do anything
+ else) if case index out of range. Warning is given later.
+
+Fri Sep 16 19:22:46 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * global.c (global_alloc): Mark regs assigned to SCRATCH as used by
+ more than just local alloc.
+
+Thu Sep 15 14:36:59 1994 Michael Meissner <meissner@pasta.osf.org>
+
+ * i386/i386.c (order_regs_for_local_alloc): Instead of using
+ flag_cse_follow_jumps and not leaf_function_p to determine whether
+ to allocate EDX, and ECX before EAX, use whether or not a DImode
+ variable was used in the compilation. DImode variables seem to
+ cause spill failures if EAX is allocated first, while smaller code
+ is generated if EAX is allocated first, assuming no spill failure.
+
+ * i386/i386.md (SF, DF, XF, and DI moves and pushes): Eliminate
+ special patterns for TARGET_386 that allow direct pushes from
+ memory, and instead allow direct pushes from memory as the last
+ alternative in case no scratch registers could be allocated.
+ (movxf_mem): Remove inadvertent !TARGET_386 condition.
+ (addsi3): Allow generation of lea on 486, since the single
+ instruction lea is at least as fast as the mov and add it
+ replaces.
+ (zero extend patterns): Replace !TARGET_486 with TARGET_386.
+ (bit extracts): Ditto.
+
+ * i386/osfrose.h (LONG_DOUBLE_TYPE_SIZE): Don't redefine to be 64
+ unless NO_LONG_DOUBLE is defined.
+
+Thu Sep 15 13:46:05 1994 Jim Wilson (wilson@cygnus.com)
+
+ * expmed.c (store_split_bit_field): Use number of bits in arg not
+ BITS_PER_WORD to adjust arg in BYTES_BIG_ENDIAN case.
+
+Thu Sep 15 09:19:12 1994 Richard Earnshaw (rwe@pegasus.esprit.ec.org)
+
+ * optabs.c (expand_binop, multi-word shifts): Generate rtl
+ free of conflicts for shifts less than one word.
+
+Thu Sep 15 05:29:58 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * gcc.c: Rework last change so it's done like collect2.c.
+
+ * cse.c (cse_around_loop): Don't invalidate SUBREG unless
+ it's a SUBREG of a REG.
+
+ * sched.c (sched_analyze_insn): Don't set SCHED_GROUP_P for previous
+ INSN a USE unless it's a USE of a REG.
+
+Wed Sep 14 10:08:58 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
+
+ * gcc.c: Include <sys/errno.h> in case `errno' is really a macro
+ as permitted by ANSI C.
+
+ * getpwd.c (GUESSPATHLEN): If there is no definition of
+ MAXPATHLEN, then set GUESSPATHLEN to be 100. (It's used
+ as a starting point, not a limit, so this is harmless.)
+
+Tue Sep 13 15:02:19 1994 Michael Meissner <meissner@pasta.osf.org>
+
+ * i386/i386.md (movxf_mem): Fix typo with memory/memory moves
+ of XFmode variables, where the store actually did a load, ie, the
+ source and destination operands were fixed.
+ (fixuns_trunc patterns): Revert to the old code.
+ (movdf_push486, movxf_push486, movdi_push486): If an address is
+ based on the stack pointer, account for the stack pointer changing
+ due to the intermediate pushes generated.
+
+Tue Sep 13 14:11:16 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * collect2.c (fatal_perror, fatal, error): Declare all args as char *.
+
+Tue Sep 13 12:40:39 1994 Jeffrey A. Law (snake.cs.utah.edu)
+
+ * pa.c (emit_move_sequence): Handle secondary FP load/store
+ reloads of the form (subreg (mem (plus (reg) (disp)))).
+ (secondary_reload_class): A secondary register is needed to handle
+ out-of-range FP loads and stores.
+ * pa.md (reload_indf, reload_outdf): New expanders.
+ (reload_insf, reload_outsf): Likewise.
+
+Mon Sep 12 18:15:48 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * t-pa (ADA_CFLAGS): New override.
+ * pa/t-pa-hpux: New file.
+ * configure (hppa*-*-hpux*): Use t-pa-hpux instead of t-libc-ok.
+
+Mon Sep 12 14:52:17 1994 Jim Wilson (wilson@cygnus.com)
+
+ * function.c (assign_parms): Set RTX_UNCHANGING_P on stack_parm
+ for const parameter before calling move_block_from_reg.
+
+Mon Sep 12 14:27:58 1994 Doug Evans (dje@cygnus.com)
+
+ * config/fp-bit.c (FLO_union_type): Add packed attribute to `bits'.
+
+Sat Sep 10 09:50:41 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (invalidate_for_call): Properly set IN_TABLE.
+
+Sat Sep 10 06:46:24 1994 Bill Burton (billb@progress.com)
+
+ * Added improved support for Sequent DYNIX/ptx 1.x and 2.x:
+ * fixinc.ptx: New file.
+ * i386/seq-sysv3.h (HAVE_ATEXIT): No longer defined.
+ * i386/seq2-sysv3.h: New file.
+ * configure (i[34]86-sequent-ptx[12]*): New configurations.
+ (i[34]86-sequent-sysv*, i[34]84-sequent-ptx): Deleted configurations.
+ * config.sub (ptx): New OS; use for Sequent.
+
+Fri Sep 9 21:48:48 1994 Paul Eggert (eggert@twinsun.com)
+
+ * cccp.c (rescan, handle_directive): Backslash no longer suppresses the
+ specialness of the following char unless -traditional.
+ (rescan): Remove backslash-newline only if at top level, since
+ backslash-newline-space can be encountered during macro processing.
+ (collect_expansion): Remove special hack for \# inside a #define;
+ it's not compatible with the C Standard.
+
+Thu Sep 9 17:36:03 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * Utilize OSF/1's limited .init support.
+ * alpha/alpha.h (HAS_INIT_SECTION): Define.
+ (LINK_SPEC): Add '-init __main'.
+ * alpha/osf12.h (LINK_SPEC): Ditto.
+
+ * function.c (expand_main_function): Don't call __main if
+ HAS_INIT_SECTION is defined.
+
+Fri Sep 9 16:36:46 1994 Mike Stump (mrs@cygnus.com)
+
+ * tree.c (decl_function_context): Don't treat C++ member
+ functions of classes declared in a function, as nested functions.
+
+Fri Sep 9 16:10:25 1994 Steve Chamberlain (sac@jonny.cygnus.com)
+
+ * sh/sh.c (prepare_move_operands): Generate better DI constant
+ code.
+ (fake_shift): New function.
+ * sh/sh.md (ashlsi3_n, lshrsi3_n): Only recognise if fake_shift
+ enabled.
+ * sh/{lib1funcs.asm, ashlsi3.c, lshrsi3.c, ashrsi3.c} : New files.
+ * sh/t-sh : Build new files.
+
+Fri Sep 9 15:52:54 1994 Hallvard B Furuseth (h.b.furuseth@usit.uio.no)
+
+ * cccp.c: Correct unprototyped pointer args from `0' to `NULL_PTR'
+
+Fri Sep 9 15:17:52 1994 Matthew Green (mrg@splode.mame.mu.oz.au)
+
+ * configure (sparc-*-netbsd): New configuration.
+ * sparc/netbsd.h: New file.
+
+Fri Sep 9 15:15:48 1994 Jim Wilson (wilson@cygnus.com)
+
+ * mips.md (truncdisi2): Change from define_expand to define_insn.
+ (truncdihi2, truncdiqi2): Likewise.
+
+ * sparc.h (SQRTTF2_LIBCALL): Delete.
+ (INIT_TARGET_OPTABS): Define.
+ (INIT_SUBTARGET_OPTABS): Define.
+
+ * stmt.c (check_for_full_enumeration_handling): Cast malloc result
+ to `unsigned char *' not `char *'.
+
+ * dbxout.c (dbxout_symbol_location): Handle error_mark_node in
+ DECL_INITIAL for C++.
+
+ * mips.md (memory): Add missing !r4600 to first define_function_unit.
+
+ * sparc.md (negsi2): Use register_operand not general_operand for
+ output.
+
+Fri Sep 9 14:52:58 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * config/netbsd.h: Add #undef for everything we define; a few were
+ missing.
+
+ * reload.c (find_reloads, case 'p'): Operand is BASE_REG_CLASS.
+
+Fri Sep 9 14:00:28 1994 Mike Collison (collison@world.std.com)
+
+ * configure (dsp16xx-*): New configuration.
+ * config.sub (dsp16xx): New basic machine.
+ * dsp16xx.c, dsp16xx.md, dsp16xx.h, xm-dsp16xx.h: New files.
+
+Fri Sep 9 12:47:00 1994 Michael Meissner (meissner@osf.org)
+
+ * i386/i386.md (All SF, DF, XF, DI 486 push patterns): Merge the
+ memory and nonmemory push patterns together.
+
+Fri Sep 9 00:53:36 1994 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * config.sub: Accept i586 like i386.
+ Do not use SCO as a default for i386-*.
+
+Thu Sep 8 18:49:35 1994 Steve Chamberlain (sac@cygnus.com)
+
+ * config/fp-bit.c (_fpmul_parts): Perform optimized
+ 64bit*64bit multiply correctly.
+ * sh/sh.c (synth_constant): Ensure DI mode constants get their
+ high part zeroed.
+ (add_constant): Entabled constants are only identical if their
+ sizes are the same.
+
+Thu Sep 8 14:40:31 1994 Jim Wilson (wilson@cygnus.com)
+
+ * flow.c (mark_used_regs, case REG): Correct typo, use GET_MODE
+ not GET_CODE.
+ * sched.c (attach_deaths): Likewise.
+
+Tue Sep 6 23:33:41 1994 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * tree.c (get_set_constructor_bits, get_set_constructor_words):
+ New functions. Extract bits or words from SET_TYPE CONSTRUCTOR.
+ * tree.h: Declare above new functions.
+
+Thu Sep 8 14:02:05 1994 Michael Meissner (meissner@osf.org)
+
+ * 386/i386.h (TARGET_OPTIONS): New macro to define -mreg-alloc=
+ switch to allow users to override the register allocation order.
+ (OVERRIDE_OPTIONS): Call the function override_options.
+ (REG_ALLOC_ORDER): Define to allocate in the natural order, this
+ is needed for ORDER_REGS_FOR_LOCAL_ALLOC to work.
+ (ORDER_REGS_FOR_LOCAL_ALLOC): Define to call the function
+ order_regs_for_local_alloc.
+ (regclass_map): Move declaration to end of file.
+ (i386_compare_op0, i386_compare_op1): Ditto.
+ (CLASS_LIKELY_SPILLED_P): Define, return 1 for AD_REGS in addition
+ to all of the single register classes, since AD_REGS is only used
+ to allocate EAX:EDX.
+ (override_options, order_regs_for_local_alloc): Add declarations.
+ (hi_reg_name): Add declaration.
+ (qi_reg_name): Ditto.
+ (qi_high_reg_name): Ditto.
+ (i386_reg_alloc_order): Add declaration for TARGET_OPTIONS to use.
+
+ * i386/i386.c (i386_compare_op0, i386_compare_op1): Initialize
+ with NULL_RTX.
+ (i386_reg_alloc_order): Provide global variable definition.
+ (regs_allocated): Static array to note whether a register is noted
+ via -mreg-alloc=<xxx>.
+ (override_options): Provide checking for registers declared with
+ -mreg-alloc=<xxx>.
+ (order_regs_for_local_alloc): If -mreg-alloc=<xxx> was used,
+ allocate registers mentioned in order, and then allocate all other
+ registers in the normal register order. If -mreg-alloc=<xxx> was
+ not used, allocate registers in natural order except for non-leaf
+ functions with CSE following jumps, allocate EAX after EDX and
+ ECX, to allow the function return to be CSE'd, and perl 4.036's
+ perly.y to be compiled without aborting due to not being able to
+ find a spill register.
+ (movsf, movdf, movdi): Rewrite all patterns to provide effecient
+ memory to memory moves, including pushes for i386 and i486. Fixes
+ problems in compiling motif+ without optimization.
+ (swapsf): Add, like swapdf and swapxf.
+ (fixuns_truncsfsi2, fixuns_truncdfsi2): Use general_operand
+ instead of register_operand for define_expand, since the operand
+ is copied to a new pseudo register as part of the expansion.
+ (fix_truncxfdi2, fix_truncdfdi2, fix_truncsfdi2): Rewrite to call
+ the more primitive generator functions instead of knowing how many
+ clobbers of match_scratchs they do.
+
+ * Makefile.in (aux_output.o): Define TARGET_CPU_DEFAULT if
+ specified when compiling aux_output.o to allow the machine C file
+ access to this if it wants it.
+
+Thu Sep 8 07:15:29 1994 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.md (movsi matcher): Merge TARGET_POWER and !TARGET_POWER
+ cases. Rationalize mnemonics.
+ (movhi and movqi matchers): Likewise.
+ (movsf matcher): Correct length attribute for stfs which no longer
+ includes frsp.
+
+Thu Sep 8 07:06:31 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.h (REGISTER_MOVE_COST): Fix typo in last change.
+
+Wed Sep 7 19:31:52 1994 Paul Eggert (eggert@twinsun.com)
+
+ * cccp.c (handle_directive): In `#include <xxx>' directives,
+ remove backslash-newline properly. Don't allow any other newlines.
+
+Wed Sep 7 18:11:29 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.h (REGISTER_MOVE_COST): Moving between special registers
+ is expensive.
+
+ * combine.c (simplify_comparison): Convert comparison to unsigned
+ when stripping off a ZERO_EXTEND.
+
+ * combine.c (simplify_set): Only convert IF_THEN_ELSE to logical
+ expression if mode of object being compared is result mode.
+
+Wed Sep 7 18:09:17 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * configure: Ignore --help, --version, --program-prefix,
+ --program-suffix, --cache-file, --quiet, --silent.
+
+Wed Sep 7 13:29:50 1994 Doug Evans (dje@cygnus.com)
+
+ * stmt.c (expand_asm_operands): Move test for misspelled registers
+ higher so all cases caught.
+
+Wed Sep 7 09:54:14 1994 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * configure: Touch Makefile.ll before appending subdir stuff.
+ (Needed if there are no subdirs.)
+
+Wed Sep 7 11:19:18 1994 Kresten Krab Thorup (krab@akvavit.next.com)
+
+ * objc/init.c (__objc_init_protocols): Remove assertion.
+ * objc/Object.m (conformsTo:): Make lookup allways happen in
+ the class object.
+
+Tue Sep 6 17:47:39 1994 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * configure: Rename *-next-ns[23] to *-next-nextstep[23].
+ * config.sub: Cleanup NeXT support to emit nextstep*.
+
+Tue Sep 6 18:38:02 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload.c (find_reloads_address): Don't reorder the operands of a
+ PLUS when fixing up index.
+
+Tue Sep 6 18:24:50 1994 Matthias Pfaller (leo@marco.de)
+
+ * ns32k.md (stackadjust/push peepholes): For the adjust/push/push
+ pattern one offset was wrong.
+ Don't use addr for register and and MEM refs.
+
+Tue Sep 6 11:24:06 1994 Steve Chamberlain (sac@jonny.cygnus.com)
+
+ * sh/sh.c (push, pop): Generate REG_NOTES.
+ (synth_constant): Correct one of the patterns.
+ (output_file_start): Bump version number.
+ * sh/sh.h (EXIT_IGNORE_STACK): Now 1.
+ * sh/sh.md (adddi3, subdi3): Simplify.
+ (casesi_worker): Use TARGET_BIGTABLE.
+
+Mon Sep 5 12:29:15 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * ginclude/math-68881.h: Change inline functions from static to
+ extern.
+
+ * configure (i[34]86-*-sysv4*): If --with-stabs, set tm_file to
+ i386/sysv4gdb.h.
+ * config/i386/sysv4gdb.h: New file; sets PREFERRED_DEBUGGING_TYPE.
+
+Sun Sep 4 08:40:02 1994 Chris Smith (csmith@convex.com)
+
+ * convex.h (VTABLE_USES_MASK, VINDEX_MAX, SET_DECL_VINDEX):
+ delete, no longer used.
+ (target_flags): delete cexp.c hack, no longer needed.
+ * convex.md (decr-and-set-cc0): fix HImode to use halfword
+ insns.
+ (cmpqi patterns): fix constraints not to use A regs
+
+Sat Sep 3 14:12:11 1994 Michael Meissner (meissner@osf.org)
+
+ * i386/i386.md (DImode move and push insns): Eliminate movdi
+ wrapper that made a DI temp register to do a memory to memory
+ move because it creates too much register pressure, especially
+ when not optimizing. On the 486, allocate and use 1-2 scratch
+ registers to push a DImode value.
+
+Fri Sep 2 15:11:59 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * c-decl.c (min_precision): Move from here.
+ * c-common.c: To here.
+
+Fri Sep 2 13:16:38 1994 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * tree.h (maximum_field_alignment, set_alignment): New declarations.
+
+Fri Sep 2 14:25:36 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * config/svr4.h (DBX_DEBUGGING_INFO, PREFERRED_DEBUGGING_TYPE,
+ DBX_BLOCKS_FUNCTION_RELATIVE, ASM_IDENTIFY_GCC,
+ ASM_IDENTIFY_GCC_AFTER_SOURCE, ASM_OUTPUT_SOURCE_LINE,
+ DBX_FUNCTION_FIRST): Define. This adds support for -gstabs for
+ SVR4 configurations. -gstabs requires gas and gdb.
+ * config/sparc/sol2.h (DBX_DEBUGGING_INFO,
+ DBX_BLOCKS_FUNCTION_RELATIVE, ASM_IDENTIFY_GCC,
+ ASM_IDENTIFY_GCC_AFTER_SOURCE, ASM_OUTPUT_SOURCE_LINE,
+ DBX_FUNCTION_FIRST): Don't define. Now defined by config/svr4.h.
+ (PREFERRED_DEBUGGING_TYPE): Undefine before defining.
+ * config/sparc/sysv4.h (DBX_DEBUGGING_INFO): Don't bother to
+ undefine before including svr4.h.
+ (ASM_OUTPUT_SOURCE_LINE): Undefine before including svr4.h.
+
+Thu Sep 1 22:02:02 1994 Michael Meissner (meissner@osf.org)
+
+ * toplev.c (fatal_insn): Move most of the code from
+ fatal_insns_not_found here, and add an argument to give the error
+ message.
+ (fatal_insn_not_found): Call fatal_insn.
+ * rtl.h (fatal_insn, fatal_insn_not_found): Add prototypes.
+ * genextra.c (main): Don't declare fatal_insn_not_found in
+ insn-extract.c.
+ * reload1.c (reload): Call fatal_insn where appropriate to print
+ an error message instead of calling abort.
+ (spill_failure): Ditto.
+ (reload_as_needed): Ditto.
+ (allocate_reload_reg): Ditto.
+ (emit_reload_insns): Ditto.
+
+Thu Sep 1 19:34:26 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * tree.c (type_list_equal): If the types of the default arguments
+ differ, the lists do not match.
+
+Thu Sep 1 19:29:58 1994 Matthias Pfaller (leo@marco.de)
+
+ * ns32k.md (stack-adjust/push peepholes): Addresses are
+ moved with "addr", not with "movd".
+
+Thu Sep 1 19:17:55 1994 Paul Eggert (eggert@twinsun.com)
+
+ * cccp.c (make_definition): Don't dump core when given an
+ unterminated string in a -D option.
+
+Thu Sep 1 19:13:35 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-typeck.c (convert_arguments): Give proper warnings when
+ converting COMPLEX_TYPE; widen check to include all integral types.
+
+Wed Aug 31 20:38:53 1994 Per Bothner (bothner@spiff.gnu.ai.mit.edu)
+
+ * fixproto: Define FIX_HEADER (needed by Aug 19 change).
+ Use FIX_HEADER instead of $original_dir/fix-header (twice).
+
+Wed Aug 31 16:56:15 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * stmt.c (warn_if_unused_value): Extend special case for casted
+ MODIFY_EXPRs to apply to INIT_EXPRs as well.
+
+Wed Aug 31 16:30:09 1994 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * stor-layout.c (set_alignment): New global.
+ (layout-type): Add support for SET_TYPE.
+
+ * expmed.c (store_bit_field): Semi-revert Aug 25 change:
+ Make it apply only for BLKmode, not integral modes.
+
+ * stmt.c (all_cases_count, mark_seen_cases): New functions.
+ (BITARRAY_TEST, BITARRAY_SET): New macros. Used (mainly by
+ Chill) to check all cases are covered (for enums and ranges).
+ (check_for_full_enumeration_handling): Re-write to use the
+ new functions, now that we have them.
+
+Wed Aug 31 19:19:29 1994 Richard Earnshaw (rwe@pegasus.esprit.ec.org)
+
+ * combine.c (nonzero_bits, cases DIV, MOD, UDIV, UMOD): Declare
+ op0_maybe_minusp and op1_maybe_minusp as HOST_WIDE_INT.
+
+Wed Aug 31 18:54:54 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expmed.c (store_split_bit_field): Always adjust arg to
+ extract_fixed_bit_field in BYTES_BIG_ENDIAN case.
+
+Wed Aug 31 02:49:34 1994 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * config/i386/gnu.h (LIB_SPEC): New macro.
+
+Tue Aug 30 16:35:23 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * toplev.c (lang_options): Add -W{no-,}reorder.
+
+Tue Aug 30 13:55:58 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * combine.c (simplify_comparison, case GEU): Add missing break.
+
+Mon Aug 29 17:50:55 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * vax.md (extv, extzv): Don't use ROTL when field is outside
+ boundaries of a word.
+
+Mon Aug 29 11:43:18 1994 Kresten Krab Thorup (krab@akvavit.next.com)
+
+ * objc/sendmsg.c (get_imp): Don't inline on 386.
+
+Sun Aug 28 18:56:03 1994 Andrew McCallum (mccallum@cs.rochester.edu)
+
+ * objc/class.c (objc_get_meta_class): New function.
+
+Sat Aug 27 23:13:53 1994 Michael Meissner (meissner@osf.org)
+
+ * i386/i386.c (legitimate_address_p): If index register is either
+ the arg pointer or the stack pointer, and there is no scale
+ factor, swap with the base register.
+
+ * i386/i386.h (REG_CLASS_CONTENTS): Don't allow the arg pointer
+ register as an index register, since the frame could be omitted,
+ and the stack pointer is not valid as an index.
+
+ * i386/i386.md (mov*, movstrict*): Don't create pushes of memory
+ values when creating insns, let the combiner create a push of a
+ memory value if -m386. In particular, pushes of byte values was
+ broken because there is no pattern to recognize such a push.
+
+Fri Aug 26 16:03:09 1994 Michael Meissner (meissner@osf.org)
+
+ * i386/i386.h (MASK_*): Add masks for all of the switches.
+ (TARGET_*): Use appropriate MASK_* instead of a number. Add
+ -mdebug-addr switch to debug GO_IF_LEGITIMATE_ADDRESS,
+ -mno-wide-multiply to turn off widening multiplies, and -mno-move
+ to allow integer move insns to generate direct memory to memory
+ copies, which reload will fix up. Add TARGET_386 which is not of
+ TARGET_486.
+ (REG_ALLOC_ORDER): Go to the order used in 2.5.8, eax, edx, ecx, ...
+ Add a comment describing the tradeoffs.
+ (REG_OK*): Add strict and non-strict versions of the macros that
+ are always present, and REG_OK_STRICT chooses between the two
+ inner macros.
+ (GO_IF_LEGIMATE_ADDRESS): Move processing to legitimate_address_p
+ function.
+ (LEGITIMIZE_ADDRESS): Move processing to legitimize_address
+ function.
+ (function declarations): Add function declarations for all extern
+ functions in i386.c.
+
+ * i386/i386.c (asm_add): Add support in case adding by 1 or -1 to
+ use inc/dec.
+ (various): Change TARGET_486 -> !TARGET_386.
+ (legitimate_address_p): Move GO_IF_LEGITIMATE_ADDRESS processing
+ here from i386.h. Combine OSF/rose support from osfrose.h through
+ the use of conditional macros. Only recognize addresses in
+ canonical formats, code adapted from the i960 port. Add tracing
+ if -mdebug-addr.
+ (legitimize_address): Move LEGITIMIZE_ADDRESS here from i386.h,
+ and add adaptations from the i960 port.
+ (convert_387_op): Remove unused function.
+
+ * i386/i386.md (various): Remove cast to char * of output
+ functions, since i386.h now declares them all properly. Change
+ TARGET_486 tests to !TARGET_386 and !TARGET_486 to TARGET_386.
+ (movsi, movstricthi, movhi, movstrictqi, movqi, movdi): Add
+ define_expand wrappers to prevent memory<->memory moves from being
+ generated unless -mno-move is used. On 486's do not allow push of
+ memory insns to be generated unless -mno-move.
+ (movdi): For movdi patterns, add 2 (clobber (match_scratch...))
+ declarations to allow memory<->memory moves with non-contigous
+ registers, so that reload don't abort if it can't make a DI
+ register.
+ (umulsidi3, mulsidi3): Don't allow pattern if -mno-wide-multiply.
+ (smultsi3_highpart, umultsi3_highpart): Add patterns to make
+ division by constants generate better code.
+
+ * i386/osfrose.h (MASK_*): Use octal to define bitmasks, not hex,
+ for compatibility with i386.h.
+ (NO_IMPLICIT_EXTERN_C): Define.
+ (LONG_DOUBLE_TYPE_SIZE): Explicitly define to be 64 instead of
+ just #undef'ing it.
+ (GO_IF_LEGITIMATE_ADDRESS): Delete, merged with common i386 code.
+ (ASM_FILE_END): Print -fschedule-insns and -fschedule-insns2 in
+ ident string if those options are used.
+ (REAL_LD_FILE_NAME): Delete.
+ (ASM_OUTPUT_DOUBLE): Delete, use the common macros.
+ (ASM_OUTPUT_FLOAT): Ditto.
+ (ASM_OUTPUT_LONG_DOUBLE): Ditto.
+
+Thu Aug 25 17:15:18 1994 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * expmed.c (store_bit_field): Always store into multi-word
+ bitfields starting with low addresses. (Old code was
+ incompatible with operand_subword_force on big-endian targets.)
+
+Thu Aug 25 18:31:20 1994 Antti Miettinen (amiettin@ntc.nokia.com)
+
+ * m68k/lynx.h (CALL_USED_REGS): Add d2 and d3 as call-used.
+
+Thu Aug 25 11:30:44 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (record_jump_cond): Don't do anything if OP0 and OP1
+ are already equivalent.
+
+ * rtlanal.c (may_trap_p, case EXPR_LIST): New case.
+
+ * c-common.c (shorten_compare): Don't issue warning if both
+ operands constants and the signedness doesn't affect the
+ comparison results.
+
+ * configure: Refine handling and error-checking of positional args.
+
+ * print-tree.c (print_node): Print more flags for types and decls.
+
+ * c-typeck.c (type_lists_compatible_p): Treat transparent unions
+ just like unnamed ones.
+
+Wed Aug 24 19:34:52 1994 Charles Hannum (mycroft@duality.gnu.ai.mit.edu)
+
+ * configure: Rearrange handling of NetBSD ports to use the standard
+ `cpu-vendor-os' format.
+ * config.sub: Recognize names of NetBSD ports that do not correspond
+ to a CPU name.
+
+Wed Aug 24 18:43:30 1994 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * print-tree.c (print_node_brief, print_node): Use assignment instead
+ of initialization for aggregate local variable REAL_VALUE_TYPE d.
+
+Wed Aug 24 18:28:52 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * config/svr4.h (ASM_OUTPUT_SECTION_NAME): Define.
+ * config/sparc/sysv4.h (ASM_OUTPUT_SECTION_NAME): Output #alloc to
+ set SHF_ALLOC in section flags.
+
+Wed Aug 24 17:45:19 1994 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * c-parse.in (parmlist_2): Give error for function with only
+ ELLIPSIS as an argument.
+
+Wed Aug 24 17:36:22 1994 H.J. Lu (hjl@nynexst.com)
+
+ * i386/linux.h (STARTFILE_SPEC): Add %{static:-static}.
+
+Wed Aug 24 14:34:37 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * calls.c (expand_call): Check for variable-sized return value
+ in proper place.
+
+ * c-typeck.c (default_conversion): Don't substitute constant
+ value if array since will return address.
+
+ * configure (LANG_MAKEFILE): Include lang/Makefile.in in list.
+
+ * alpha.h (EXTRA_CONSTRAINT): Add new letter, `R'.
+ (ENCODE_SECTION_INFO): Don't check TREE_ASM_WRITTEN.
+ (PREDICATE_COSTS): Add call_operand.
+ * alpha.c (call_operand): New function.
+ (output_epilog): Don't set SYMBOL_REF_FLAG of current function.
+ * alpha.md (call): Rework to use macro version of jsr.
+ * osf2.h (LINK_SPEC): Don't define; should never have been.
+
+ * c-typeck.c (push_init_level): Don't blow up if construct_type
+ is null (can happen with missing brace).
+
+Wed Aug 24 10:49:35 1994 Michael Meissner (meissner@osf.org)
+
+ * i386/i386.h (REG_ALLOC_ORDER): Restore previous version which
+ allocates edx first, then ecx, eax, ... This is because perl
+ doesn't build when the order is eax, ecx, edx...
+
+Tue Aug 23 09:20:16 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * configure: Restore old behavior of positional arguments.
+ Add new argument, --noguess.
+ config.guess now guesses BUILD, not HOST; HOST defaults from BUILD.
+ Always compare canonical names, not user-specified names.
+ Numerous minor changes in the messages output to make the
+ configuration chosen clearer.
+
+Tue Aug 23 02:01:42 1994 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * config.sub: Move m68k-ccur handling to proper part of file.
+ Canonicalize cpu type pentium into i486. (Change it to i586 later.)
+
+Mon Aug 22 18:41:59 1994 Steve Chamberlain (sac@jonny.cygnus.com)
+
+ * sh/sh.c (find_barrier): Calculate the size of larger than
+ SI moves correctly.
+ (general_movsrc_operand): Allow label_refs plus const.
+ (sh_function_arg_partial_nregs, sh_function_arg): Pass BLKmode
+ objects in partial regs.
+ * sh.h (TARGET_DEFAULT): Turn off BIGTABLE_BIT.
+ (EXTRA_CONSTRAINT_Q): Allow label_refs plus const.
+ (READONLY_DATA_SECTION_ASM_OP, EXTRA_SECTIONS, rdata_section):
+ Delete rdata section and refs.
+ * sh.md (dimode split): Don't allow a Q constraint source.
+
+Sun Aug 21 23:15:35 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (FUNCTION_ARG): Use indirect calling conventions when
+ TARGET_LONG_CALLS is in effect.
+
+Sat Aug 20 13:31:34 1994 Jim Wilson (wilson@cygnus.com)
+
+ * sched.c (sched_analyze_insn): Add new parameter loop_note.
+ If loop_note set, then serialize on this insn.
+ (sched_analyze): New variable loop_note. Pass to
+ sched_analyze_insn. Set it if we pass a NOTE_INSN_LOOP_BEG or
+ NOTE_INSN_LOOP_END.
+ (unlink_notes): Don't save away NOTE_INSN_LOOP_BEG or
+ NOTE_INSN_LOOP_END notes.
+ (schedule_block): Generalize code that looks for magic REG_DEAD
+ notes and converts them to notes.
+
+Sat Aug 20 12:47:21 1994 Michael Meissner (meissner@osf.org)
+
+ * i386.h (REG_ALLOC_ORDER): Allocate eax first, then ecx, edx, and
+ then do the nromal allocation order for the remaining registers.
+
+Fri Aug 19 20:14:35 1994 Jim Wilson (wilson@cygnus.com)
+
+ * tree.c (build_type_variant): Only return existing type if it
+ also has the same TYPE_NAME.
+
+ * irix5.h (NO_IMPLICIT_EXTERN_C): Comment out.
+
+Fri Aug 19 16:41:43 1994 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * fixproto: Use $FIX_HEADER macro instead of calling
+ fix-header directly in 2nd location.
+
+Fri Aug 19 17:34:19 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (emit_move_insn_1): Never make a no-conflict block.
+
+ * tree.h (struct tree_type): New field transparent_union_flag.
+ (struct tree_decl): New field transparent_union.
+ ({DECL,TYPE}_TRANSPARENT_UNION): New macros.
+ * c-common.c (decl_attribute): Handle "transparent_union" attribute.
+ * function.c (assign_parms): If parm is transparent union, use
+ type of first field.
+ * calls.c (expand_call): Likewise.
+ * integrate.c (function_cannot_inline): Don't inline if any
+ parm is a transparent union.
+
+Fri Aug 19 12:01:11 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Canonicalize ${INPUT} to avoid automounter
+ problems.
+
+Fri Aug 19 11:31:24 1994 Kresten Krab Thorup (krab@akvavit.next.com)
+
+ * objc-act.c (build_selector_translation_table): Reset
+ current_function_decl after hack_function_prototype build it.
+ (build_module_descriptor): Return constructor name from functions
+ decl_rtl.
+
+Thu Aug 18 17:23:18 1994 Per Bothner (bothner@spiff.gnu.ai.mit.edu)
+
+ * README.FRESCO: New file. Notes about compiling the Fresco
+ toolkit with g++.
+
+Thu Aug 18 14:10:22 1994 Jim Wilson (wilson@cygnus.com)
+
+ * combine.c (distribute_notes, case REG_UNUSED): Ignore notes when
+ from_insn != i3 only if the notes would remain as REG_UNUSED notes.
+
+Wed Aug 17 18:31:43 1994 Holger Teutsch (holger@hotbso.rhein-main.de)
+
+ * clipper.h (CLIPPER_ARG_SIZE): Return size in bytes.
+ (FUNCTION_ARG_ADVANCE): Fix argument alignment processing.
+
+Wed Aug 17 18:03:54 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fx80.md (casesi_2): Operand 0 is HImode; add SIGN_EXTEND
+ when adding to pc.
+ (casesi): Operand 0 is HImode.
+ (unnamed PC addition pattern): Add SIGN_EXTEND to add HImode
+ offset to SImode PC.
+ * m68k.md (tablejump): Add SIGN_EXTEND to HImode offset
+ so can add to SImode PC.
+ Likewise for matching pattern.
+ * cse.c (fold_rtx): When folding tablejump, allow LABEL_REF
+ to be in arg0; also allow other arg to be MINUS, not just be
+ equivalent to it.
+
+Mon Aug 15 19:19:11 1994 Paul Eggert (eggert@twinsun.com)
+
+ * cccp.c (index0): New function.
+ (trigraph_pcp): Use index0 instead of index, so that a null
+ byte doesn't suppress further trigraph preprocessing.
+
+ * cccp.c (rescan, do_ident): Pass more accurate size request
+ to check_expand.
+
+ * cccp.c (main): Don't dump core if given -pcp, -MD, or -MMD
+ without following arg.
+
+Mon Aug 15 17:56:38 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * stmt.c (expand_elseif): New function.
+
+Mon Aug 15 14:16:18 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * configure: If the host is guessed, and the target name is a
+ prefix of the host name, then use the target name as the host
+ name.
+
+Mon Aug 15 13:35:24 1994 Stan Shebs (shebs@andros.cygnus.com)
+
+ * m68k/m68k-coff.h: New file.
+
+Sun Aug 14 00:28:15 1994 Andrew McCallum (mccallum@vein.cs.rochester.edu)
+
+ * objc/encoding.c (objc_sizeof_type): Assign from ROUND,
+ don't increment. Remove ; after while to fix infinite loop.
+ Add float and double cases.
+ (objc_alignof_type): Add float and double cases.
+ * objc/selector.c (): Use __objc_selector_names, not
+ __objc_selector_array.
+ (sel_types_match): New function.
+ (sel_get_typed_uid): Use sel_types_match. Change strcmp to !strcmp.
+
+Sun Aug 14 21:54:29 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (ASM_OUTPUT_ALIGNED_COMMON, ASM_OUTPUT_ALIGNED_LOCAL):
+ Define.
+ (ASM_OUTPUT_COMMON, ASM_OUTPUT_LOCAL): Delete.
+
+ * pa.c (hppa_expand_prologue): Avoid writing outside the current
+ stack boundary in code to handle large stack frames.
+
+Sun Aug 14 18:55:51 1994 Jim Wilson (wilson@cygnus.com)
+
+ * unroll.c (loop_iterations): Use PREV_INSN not prev_nonnote_insn.
+
+ * bsd-5.h (ASM_OUTPUT_NEWLINE): Delete.
+ (ASM_OUTPUT_ASCII): Define.
+ * mips-5.h, svr3-5.h, svr4-5.h: Likewise.
+ * mips.h (ASM_OUTPUT_NEWLINE): Delete.
+ (ASM_OUTPUT_ASCII): Don't use ASM_OUTPUT_NEWLINE.
+
+ * va-mips.h (va_start): Add cast to __gnuc_va_list type.
+
+ * flow.c (mark_used_regs): When adding REG_DEAD notes, check for
+ the case where a multiple register hard reg overlaps a register
+ set by the insn.
+ * sched.c (attach_deaths): Likewise.
+ * combine.c (distribute_notes, case REG_DEAD): Add another
+ find_reg_fusage call.
+
+ * unroll.c (calculate_giv_inc): Handle constants loaded with IOR.
+
+Sun Aug 14 16:40:04 1994 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * cccp.c (skip_if_group): New arg op. All callers changed.
+ If output_conditionals is true, output text of failed conditionals.
+ (conditional_skip): New arg op. All callers changed.
+ (main): Handle -ifoutput option.
+
+Sun Aug 14 05:49:29 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * print-tree.c (print_node{,_brief}): Use REAL_VALUE_TO_DECIMAL
+ to print REAL_CST ifdef REAL_ARITHMETIC.
+
+ * reload1.c (count_possible_groups) Pass CLASS as arg and only
+ try to find groups of that class.
+
+ * configure: If config.guess fails and target specified, use as host.
+ Print a message when making a cross-compiler.
+
+Sat Aug 13 17:12:30 1994 Jim Wilson (wilson@cygnus.com)
+
+ * configure (sparc-*-sunos4.0*): New configuration.
+ * t-sunos4: Rename file to t-sunos41.
+ * t-sunos40: New file.
+
+Sat Aug 13 13:50:22 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * reload1.c (emit_reload_insns): Handle a secondary input reload
+ which needs to use secondary memory too.
+
+Fri Aug 12 18:53:24 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * mips/mips.c (override_options): If neither -mcpu= nor -mipsN was
+ used, and MIPS_CPU_DEFAULT is defined, set mips_cpu to
+ MIPS_CPU_DEFAULT and set mips_cpu_string to
+ MIPS_CPU_STRING_DEFAULT.
+
+Fri Aug 12 10:54:35 1994 Stan Cox (coxs@dg-rtp.dg.com)
+
+ * m88k/dgux.h, m88k/dguxbcs.h (ASM_SPEC,CPP_SPEC):
+ Made -pipe work for -msvr4. Added -D*_TARGET definitions.
+
+ * m88k.c (emit_bcnd): Improved code generated by changing cmp/bbx
+ instruction pair to single bcnd instruction
+
+Fri Aug 12 07:52:20 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (set_nonvarying_address_components): If BASE is CONST_INT,
+ add value to start and set BASE to const0_rtx.
+ (refers_to_mem_p): Don't do it here.
+
+ * function.c (expand_function_start): Add redundant copy to
+ static_chain_incoming_rtx if SMALL_REGISTER_CLASS so inlining
+ works properly.
+ * integrate.c (expand_inline_function): Use single_set when
+ appropriate.
+ Delete insn that sets static_chain_incoming_rtx before its use.
+ (subst_constants): Treat virtual reg as constant.
+
+ * flow.c (mark_used_regs): Only show changes size if one mode is
+ integral.
+ * stupid.c (stupid_mark_refs): Likewise.
+ * combine.c (simplify_rtx, case FLOAT_TRUNCATE): Remove
+ redundant float_truncate.
+ * rs6000.md (movsf): Don't truncate if not register; clean up.
+
+ * c-decl.c (duplicate_decls): Suppress -Wredundant-decls warning
+ if we have already given an error.
+
+Thu Aug 11 18:44:25 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * stmt.c (expand_anon_union_decl): Fix up the alignment and mode
+ of the member VAR_DECLs.
+
+Thu Aug 11 13:36:14 1994 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * tree.c (stabilize_reference): Handle COMPOUND_EXPR.
+
+ * fix-header.c (write_rbrac): If NO_IMPLICIT_EXTERN_C is defined,
+ add extern "C" { ... } to added prototypes. (Needed for hpux.)
+
+Thu Aug 11 14:23:59 1994 Paul Eggert (eggert@twinsun.com)
+
+ * cccp.c (rescan): Fix botches with `-lint': the output buffer
+ pointer was not recached properly, leading to lost output.
+ Also, buffer overrun was possible.
+
+ * cccp.c (dump_defn_1): Skip newlines and strings correctly.
+
+Thu Aug 11 14:13:17 1994 Niklas Hallqvist (niklas@appli.se)
+
+ * configure (m68k-*-netbsd*): New target, like others.
+
+Thu Aug 11 14:09:23 1994 David Mosberger-Tang (davidm@piston.cs.arizona.edu)
+
+ * alpha.h (FUNCTION_PROFILER): Load global pointer from $27, not $26. e
+
+Thu Aug 11 13:52:15 1994 Walter Misar (misar@rbg.informatik.th-darmstadt.de)
+
+ * m68k/hp320.h (NO_DOT_IN_LABEL): Define if HPUX_ASM.
+
+Thu Aug 11 13:12:12 1994 David Mosberger-Tang (davidm@cs.arizona.edu)
+
+ * alpha.h (BLOCK_PROFILER): Use $26 and $27 instead of $0 and $1.
+
+Thu Aug 11 13:09:36 1994 Antti Miettinen (amiettin@trshp.trs.ntc.nokia.com)
+
+ * config/lynx.h (ASM_OUTPUT_SOURCE_LINE): Call assemble_name.
+
+Thu Aug 11 12:57:22 1994 Stephen L Moshier (moshier@world.std.com)
+
+ * expr.c (expand_builtin): Relegate sin and cos to ffast-math.
+
+Thu Aug 11 12:45:20 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * flow.c (find_auto_inc): Ensure that all proposed changes to
+ insns are valid before commiting to the auto-inc.
+
+ * calls.c (expand_call): Ensure we call force_operand on
+ structure_value_addr.
+
+ * configure: Use config.guess to get default value for host,
+ not target.
+
+Thu Aug 11 12:43:24 1994 Robert Wilhelm (Robert.Wilhelm@physik.tu-muenchen.de)
+
+ * Makefile.in (mostlyclean): Add missing -f.
+
+Tue Aug 9 02:02:07 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.md (default set high): Do not accept function label arithmetic
+ as a valid operand.
+ (default lo_sum): Likewise.
+ * pa.c (hppa_legitimize_address): Do nothing with function label
+ arithmetic.
+ (emit_move_sequence): Split up function label arithmetic so that
+ function's address is loaded first, then constant part is added to
+ the function's address.
+ (is_function_label_plus_const): New function.
+
+Mon Aug 8 19:57:05 1994 Matthias Pfaller (leo@marco.de)
+
+ * ns32k.md (all patterns that use ins/inss and ext/exts):
+ Disallow use of these instructions when -mnobitfield is
+ specified.
+ * ns32k.h (TARGET_BITFIELD): New macro.
+ (TARGET_SWITCHES): Support for TARGET_BITFIELD.
+ * ns32k/netbsd.h (TARGET_DEFAULT): Added -mnobitfield.
+ (CPP_PREDEFINES): Added -Dpc532.
+ (WCHAR_{TYPE, UNSIGNED, TYPE_SIZE}): Changed to match new definition
+ in NetBSD 1.0.
+ * ns32k.c (print_operand_address): A patch for 2.5.8 ended up at the
+ wrong place. Moved.
+
+Mon Aug 8 19:42:09 1994 Paul Eggert (eggert@twinsun.com)
+
+ * cccp.c (create_definition): Warn about `#define a@', since a
+ diagnostic is now required (see ISO TC1's addition to
+ subclause 6.8). Also warn about `#define is-empty(x) (!x)'.
+
+Mon Aug 8 16:32:37 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fix-header.c (write_rbrac): Set up to use fixed headers
+ if __USE_FIXED_HEADERS__ is defined.
+
+ * reload1.c (emit_reload_insns): Always clear new_spill_reg_store.
+
+ * reload.c (find_reloads): Force reload for paradoxical SUBREG
+ of MEM if BYTES_BIG_ENDIAN.
+
+ * m68k/hp320.h (READONLY_DATA_SECTION): Remove definition.
+
+ * function.c (expand_function_start): Only use
+ static_chain_incoming_rtx once if it is a REG and we
+ have SMALL_REGISTER_CLASSES.
+
+ * local-alloc.c (find_free_reg): Fix typo in last change.
+ * rs6000.h (CLASS_CANNOT_CHANGE_SIZE): New macro.
+
+Sun Aug 7 08:54:42 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * regs.h (reg_changes_size): Add declaration.
+ * flow.c (reg_changes_size): New variable.
+ (allocate_for_life_analysis): Allocate and initialize it.
+ (mark_used_regs, case SUBREG): Set it.
+ * local-alloc.c (qty_changes_size): New variable.
+ (alloc_qty{,_for_scratch}, update_qty_class): Set it.
+ (local_alloc): Allocate it.
+ (find_free_reg): If CLASS_CANNOT_CHANGE_SIZE, avoid its registers
+ if qty_changes_size.
+ * global.c (find_reg) If CLASS_CANNOT_CHANGE_SIZE, avoid its
+ registers if reg_changes_size.
+ * stupid.c (regs_change_size): New variable.
+ (stupid_life_analysis): Alloc, init and pass it to stupid_free_reg.
+ (stupid_mark_regs): Set it.
+ (stupid_find_reg): New arg, CHANGES_SIZE; avoid regs
+ in CLASS_CANNOT_CHANGE_SIZE if defined and CHANGES_SIZE nonzero.
+ * reload.c (push_reload): Make test in LOAD_EXTEND_OP case more
+ precise; handle CLASS_CANNOT_CHANGE_SIZE.
+ (find_relods): When setting force_reloads, make LOAD_EXTEND_OP
+ case more precise.
+ * alpha.h (CLASS_CANNOT_CHANGE_SIZE): New macro.
+
+ * reload1.c (eliminate_regs, case SUBREG): Add USE of pseudo
+ so we don't improperly delete an output reload.
+
+Fri Aug 5 15:08:39 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * expr.c (expand_expr, COND_EXPR case): Use truthvalue_conversion
+ to make the condition for running cleanups acceptable to
+ invert_truthvalue.
+
+Fri Aug 5 12:29:42 1994 Jim Wilson (wilson@cygnus.com)
+
+ * expmed.c (expand_mult): Accept DImode for synth_mult only if
+ CONST_DOUBLE_HIGH is zero. Reject negative values for synth_mult
+ if the mode is larger than HOST_BITS_PER_INT. Don't do the
+ negate_variant if the mode is larger than HOST_BITS_PER_INT.
+
+Fri Aug 5 12:23:17 1994 Stephen L Moshier (moshier@world.std.com)
+
+ * gbl-ctors.h (DO_GLOBAL_CTORS_BODY): Use long instead of
+ HOST_WIDE_INT.
+
+Fri Aug 5 12:18:18 1994 Kaveh R. Ghazi (ghazi@caip.rutgers.edu)
+
+ * configure: In subdirectories, make link to include directory.
+ * Makefile.in (distclean): Delete it.
+
+Thu Aug 4 17:21:02 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * expr.c (defer_cleanups_to): Put back line which was mistakenly
+ removed.
+
+Wed Aug 3 21:37:31 1994 Doug Evans (dje@cygnus.com)
+
+ * sparc.c (v9 sparc_builtin_saveregs): Save quadword fp regs on
+ 16 byte boundaries. Handle non-zero number of named fp args.
+ * va-sparc.h (v9 va_start): Pass an arg to __builtin_next_arg.
+ (v9 va_arg): Advance over float's.
+
+Wed Aug 3 11:10:32 1994 Ian Lance Taylor (ian@mole.gnu.ai.mit.edu)
+
+ * fixincludes: Changes for glibc. In the main loop, don't fix
+ files which contain the string ``This file is part of the GNU C
+ Library''. Don't include <stdarg.h> in <stdio.h> if <stdio.h>
+ contains the string ``__need___va_list''. In <stdio.h>, don't
+ change GNUC_VA_LIST to GNUC_DUMMY_VA_LIST. Don't add extern "C"
+ to <assert.h> if it contains the string ``__BEGIN_DECLS''. Don't
+ add multiple inclusion protection to <time.h> or <sys/time.h> if
+ they contain the string ``#ifndef''.
+
+Tue Aug 2 18:38:46 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (simplify_unary_operation): Clean up some mode and
+ size checks with CONST_DOUBLEs; TRUNCATE should do nothing.
+
+ * combine.c (subst_prev_insn): Remove variable and all uses.
+
+Tue Aug 2 14:42:29 1994 Doug Evans (dje@canuck.cygnus.com)
+
+ * sparc.h (V9_SWITCHES): Add -mmedlow, -mmedany.
+ (TARGET_OPTIONS): Delete.
+ (CONDITIONAL_REGISTER_USAGE): Don't unfix %g4 if -mmedany.
+ * sparc.c (sparc_code_model): Delete.
+ (sparc_override_options): Code model flags only useable with v9.
+
+ * sparc.h (enum reg_class): New values EXTRA_FP_REGS,
+ GENERAL_OR_EXTRA_FP_REGS for the v9 case.
+ (REG_CLASS_NAMES): Likewise.
+ (REG_CLASS_CONTENTS): Likewise.
+ (REGNO_REG_CLASS): Handle EXTRA_FP_REGS.
+ (REG_CLASS_FROM_LETTER): Likewise, as `e'.
+ Treat `e' like `f' in v8 case.
+ (FP_REG_CLASS_P): New macro.
+ (PREFERRED_RELOAD_CLASS): Use it.
+ (SECONDARY_INPUT_RELOAD_CLASS, SECONDARY_OUTPUT_RELOAD_CLASS,
+ SECONDARY_MEMORY_NEEDED, CLASS_MAX_NREGS, REGISTER_MOVE_COST):
+ Likewise.
+ * sparc.md (all DF/TFmode patterns): Use `e' in contraint field
+ instead of `f'.
+
+Mon Aug 1 20:05:51 1994 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * config/i386/gnu.h: New file.
+ * configure (i[34]86-*-gnu*): Deal with this on its own, not like
+ i[34]86-*-mach*. Use i386/gnu.h and t-libc-ok; set gnu_ld and
+ gas, and disable fixincludes.
+
+Mon Aug 1 19:27:44 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.c (permanent_allocation): When freeing to
+ momentary_function_firstobj, set momentary_firstobj to be
+ the next available location (i.e., momentary_function_firstobj).
+
+Mon Aug 1 18:52:40 1994 Chris Arthur (csa@gnu.ai.mit.edu)
+
+ * stddef.h: Handle _BSD_WCHAR_T_ like _WCHAR_T_, since
+ at least BSD/386 1.1 uses the former instead of the latter.
+ If _BSD_RUNE_T_ is defined, then define rune_t when we define
+ wchar_t. Test definedness of _GCC_SIZE_T as well as
+ _GCC_SIZE_T_; likewise for _GCC_PTRDIFF_T and _GCC_WCHAR_T.
+
+Mon Aug 1 05:20:44 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa-ghpux.h, pa-hpux.h (LINK_SPEC): Any -g argument implies
+ static linking.
+
+Sun Jul 31 17:19:37 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * integrate.c (expand_inline_function): Don't fall down trying to
+ pass things by invisible reference.
+
+Sun Jul 31 06:56:46 1994 Pat Rankin (rankin@eql.caltech.edu)
+
+ * cccp.c (my_strerror): New function.
+ (error_from_errno, perror_with_name): Use it.
+
+Sat Jul 30 12:59:01 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (fold_truthop): Apply masks to constants.
+
+ * print-tree.c (print_node{,_brief}): Use correct printf code to
+ print INTEGER_CST if HOST_WIDE_INT is wider than int.
+
+ * expmed.c ({store,extract}_bit_field): Don't use bitfield insn
+ if OP0 is register and bitfield spans it.
+
+ * m88k.c (arith64_operand): Integer CONST_DOUBLE is not DImode.
+ * sparc.c (reg_or_0_operand): Likewise.
+ * ns32k.c, pa.c (print_operand): Likewise.
+ * fx80.h, gmicro.h, ns32/{genix,merlin}.h (PRINT_OPERAND): Likewise.
+ * m68k/crds.h, m68k/news.h, pyr.h (PRINT_OPERAND): Likewise.
+
+ * alpha.h (CASE_VECTOR_PC_RELATIVE): Define.
+ (ASM_OUTPUT_ADDR_VEC_ELT): Abort.
+ (ASM_OUTPUT_ADDR_DIFF_ELT): Now what used to be previous definition.
+ * alpha.md (tablejump): Rework to look like normal add but verify
+ that label is for next insn and is tablejump; look for ADDR_DIFF_ELT.
+ * cse.c (fold_rtx, case MEM): Surround TRUNCATE for jump table
+ entry with a CONST.
+ (fold_rtx, case '1'): Handle operand 0 of a CONST.
+ (fold_rtx, case PLUS): Handle (const (minus (label_ref) (label_ref))).
+
+Fri Jul 29 19:27:17 1994 Lee Iverson (leei@ai.sri.com)
+
+ * c-decl.c (finish_decl): Preserve initialializer if iterator.
+
+Fri Jul 29 19:07:23 1994 Hallvard B Furuseth (h.b.furuseth@usit.uio.no)
+
+ * libgcc2.c: Add declaration of ctime.
+ * bc-emit.c (bc_sym_write): Change %d to %lu in printf calls.
+ * fix-header.c (write_{l,r}brac): Specify return type of int.
+ * tree.c (change_main_variant): Return type now void.
+ * varasm.c (bc_output_constructor): Return type now rtx.
+
+Fri Jul 29 18:33:48 1994 Ken Duda (kjd@cache.crc.ricoh.com)
+
+ * c-typeck.c (build_unary_op, case *INCREMENT_EXPR):
+ Add size in bytes, not value of sizeof.
+
+Fri Jul 29 17:36:38 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (expand_function_start): Initialize VALUE_ADDRESS.
+
+ * romp.md (tst?f): Use CONST0_RTX instead of incorrect call
+ to immed_real_const_1.
+
+ * expr.c (move_block_to_reg): Do nothing if NREGS == 0.
+
+Fri Jul 29 17:17:18 1994 Tom Tromey (tromey@busco.lanl.gov)
+
+ * cccp.c (special_symbol, do_xifdef): Don't access value.defn
+ of a T_CONST.
+
+Thu Jul 28 17:19:32 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * gbl-ctors.h (DO_GLOBAL_CTORS_BODY): Reverse order of execution
+ of constuctor lists.
+ * config/svr3.h (DO_GLOBAL_CTORS_BODY): Ditto.
+
+ * libgcc2.c (__do_global_dtors): Reverse order of execution of
+ destructor lists.
+
+Thu Jul 28 19:56:30 1994 Jim Pendergraft (jimp@dg-rtp.dg.com)
+
+ * dwarfout.c (output_decl, case FUNCTION_DECL): Corrected
+ and simplified code that determined when to generate
+ varargs or ANSI stdargs variable length parameter list
+ DWARF information.
+
+Thu Jul 28 19:38:57 1994 Andreas Schwab (schwab@issan.informatik.uni-dortmund.de)
+
+ * m68k.md (extv, extzv): In patterns that will use movb and
+ movw, ensure size is 8 or 16.
+
+Thu Jul 28 19:28:31 1994 David Robinson (drtr@mail.ast.cam.ac.uk)
+
+ * expr.c (expand_expr, case CONJ_EXPR): Use correct mode for
+ parts of a complex expression.
+
+ * optabs.c (expand_binop, case MULT [complex]) Fix typo.
+
+Thu Jul 28 19:21:38 1994 Uwe Seimet (seimet@chemie.uni-kl.de)
+
+ * am68k/atari.h (FUNCTION_VALUE): New override.
+
+Thu Jul 28 17:27:38 1994 Paul Eggert (eggert@twinsun.com)
+
+ * Makefile.in (c-lex.o, distdir-start):
+ Depend on $(srcdir)/c-gperf.h, not c-gperf.h.
+
+Thu Jul 28 15:14:33 1994 Oliver Kellogg (okellogg@salyko.cube.net)
+
+ * m1750.inc (DNR.M): Add missing macro.
+
+Thu Jul 28 13:02:56 1994 Kresten Krab Thorup (krab@akvavit)
+
+ * objc/misc.c (__objc_xcalloc): Remove declaration of bzero.
+
+Thu Jul 28 07:29:52 1994 Markus Wild (mw@eunet.ch)
+
+ * c-common.c (decl_attributes): Correct string check for "format"
+ to include unsigned and signed char.
+
+Thu Jul 28 07:11:36 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (compare_spill_regs): Simplify and return zero if
+ registers are the same.
+
+ * c-decl.c (finish_struct): Don't look at alignment of error_mark_node.
+
+ * combine.c (try_combine): Don't make a MULT if none of the insns
+ in our input had one.
+
+Wed Jul 27 19:06:53 1994 R Bowler (rbowler@cix.compulink.co.uk)
+
+ * i370/mvs.h (ASM_OUTPUT_ASCII): Fix bug when first character
+ of string constant is single quote.
+
+Wed Jul 27 22:44:32 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * m68k/next.h: #undef PCC_STATIC_STRUCT_RETURN.
+
+ * alpha/alpha.h: #define NO_IMPLICIT_EXTERN_C.
+
+Wed Jul 27 14:06:37 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expmed.c (expand_mult): Properly set ADD_TARGET for add_variant.
+
+ * alpha.h (INITIAL_ELIMINATION_OFFSET): Properly compute offset
+ between AP and SP when get_frame_size and
+ current_function_pretend_args_size are not a multiple of 16 bytes.
+
+ * expmed.c (expand_divmod): Don't make REG_NOTE if last insn's
+ destination isn't QUOTIENT.
+
+Tue Jul 26 19:45:54 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.c (expand_expr, case ARRAY_REF): Don't fold L"foo"[2].
+
+Tue Jul 26 14:10:52 1994 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * config.sub: Refer to NeXT's operating system as nextstep.
+
+Tue Jul 26 13:50:37 1994 Jim Wilson (wilson@cygnus.com)
+
+ * c-typeck.c (process_init_element): Do not call push_init_level
+ if the value is error_mark_node.
+
+ * iris5.h (NO_IMPLICIT_EXTERN_C): Define.
+
+Mon Jul 25 00:20:36 1994 Chris Arthur (csa@gnu.ai.mit.edu)
+
+ * configure (canon_target): add cases to recognize BSD/386
+ specifically, so we can use a tm_file that will cause __bsdi__
+ to get defined (since emacs, among other things, needs it).
+
+ * config/i386/bsd386.h: New. Use 386bsd.h, and just override
+ CPP_PREDEFINES (add -Dbsdi) and WCHAR stuff.
+
+Sat Jul 23 16:30:12 1994 Kaveh R. Ghazi (ghazi@caip.rutgers.edu)
+
+ * fixinc.svr4: Change i860 in #if to __i860__, as with other CPUs.
+
+Fri Jul 22 14:33:59 1994 Doug Evans (dje@cygnus.com)
+
+ * h8300.md (andhi3, iorhi3, xorhi3): Change constraint on
+ operand 2 from `i' to `n'.
+
+Fri Jul 22 09:30:39 1994 DJ Delorie (dj@ctron.com)
+
+ * configure.bat: move code to config/msdos/* (simplification)
+
+ * config/msdos/configure.bat [new file]: moved most processing
+ here so that as things get more complicated with the language
+ breakouts, the top directory won't get too messy. Sed script
+ broken out to simplify processing and avoid quoting errors.
+ * config/msdos/top.sed [new file]: sed script to change Makefile.in
+ to Makefile in top directory (currently used for cp directory also)
+ sed commands changed to handle language breakout
+
+ * gcc.c (pexecute): use spawn*() for djgpp to ensure that quotes
+ are properly preserved. Response file code left for 16-bit
+ compilers, which can't handle the long command lines that gcc
+ may generate.
+
+ * config/i386/go32.h: define NO_IMPLICIT_EXTERN_C.
+
+Thu Jul 21 23:19:03 1994 Steve Chamberlain (sac@wombat.gnu.ai.mit.edu)
+
+ * sh/sh.h (TARGET_SWITCHES, PACKSTRUCT_BIT, STRUCTURE_SIZE_BOUNDARY):
+ parse and handle new option.
+ (LEGITIMATE_CONSTANT_P): LABEL_REFs are no longer illegal.
+ (WCHAR_TYPE, WCHAR_TYPE_SIZE): New definitions.
+ (HANDLE_PRAGMA): Has return.
+
+ * sh/sh.c (add_function, seen_function): Experimental code to
+ generate bsrs.
+ (handle_pragma): Return final char.
+ (expand_acall): Handle TARGET_BSR.
+ (general_movdst_operand, general_movsrc_operand): Allow ok
+ autoinc/dec.
+ (bsr_operand): New function.
+ (fixit): Need to fix LABEL_REFs.
+
+ * sh/sh.md (addc): Simplify.
+ (adddi3, subdi3, negdi3): Use operand_subword.
+ (subc, negc): New pattern.
+ (shifts): Fix constraints.
+
+Thu Jul 21 17:59:43 1994 Jim Wilson (wilson@cygnus.com)
+
+ * objc-act.c (build_module_descriptor): Don't set DECL_EXTERNAL on
+ current_function_decl.
+
+ * combine.c (simplify_rtx): For (not (xor X C)) generate new rtx
+ instead of modifying old rtx.
+
+ * c-decl.c (start_function): If old_decl is NULL, then set it to
+ the implicit decl if any. Delete superfluous test from warn missing
+ prototypes code. For warn missing declarations code, only warn if
+ previous decl is implicit.
+
+Thu Jul 21 17:47:05 1994 Paul Eggert (eggert@twinsun.com)
+
+ * fold-const.c (fold): Don't fold X-X to 0 if X is floating point
+ and !flag_fast_math.
+
+Thu Jul 21 02:07:45 1994 Charles Levert (charles@comm.polymtl.ca)
+
+ * Makefile.in (stmp-multilib): Rework to handle make -n.
+ (stmp-multilib-sub): New target.
+
+Tue Jul 19 23:14:42 1994 Larry Jones (larry.jones@sdrc.com)
+
+ * configure (i[34]86-*-isc*): Treat isc4 like isc3.
+ Remove references to nonexistant files and add extra_parts
+ when needed.
+ (i[34]86-*-solaris2*): Remove reference to nonexistant
+ t-sco and use extra_parts instead.
+ (i[34]86-*-sysv*, i860-*-sysv3*, m68k-*-sysv3*, m68k-ncr-sysv*):
+ Replace t-svr3 with extra_parts.
+
+Tue Jul 19 20:31:34 1994 Doug Evans (dje@cygnus.com)
+
+ * configure (find lang subdirs loop): Try to work around an
+ apparent bug in bash 1.12 on linux.
+
+ * Makefile.in (clean): Remove multilib build dirs.
+
+ * h8300.c (print_operand, default case): Handle SFmode regs.
+
+Mon Jul 18 22:02:53 1994 Jim Wilson (wilson@cygnus.com)
+
+ * sparc.c (call_operand): Use symbolic_operand not CONSTANT_P.
+ (call_operand_address): Likewise.
+ * sparc.md (call*): Use symbolic_operand not immediate_operand.
+ Use 's' constraint not 'i' constraint.
+
+ * toplev.c (rest_of_compilation): Clear DECL_ABSTRACT_ORIGIN if
+ clear DECL_INLINE.
+
+ * global.c (find_reg): Store divide results in temporary variables.
+
+ * gcc.c (process_command): When have -BstageN option, pass include
+ not stageN/../include to preprocessor.
+
+Mon Jul 18 21:58:27 1994 Torbjorn Granlund (tege@tiny.cygnus.com)
+
+ * loop.c (move_movables): Aviod lossage when CALL_INSN_FUNCTION_USAGE
+ is NULL.
+
+Mon Jul 18 20:53:54 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Rework required loop to avoid crash on decstation.
+
+Thu Jul 14 09:42:23 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * Version 2.6.0 released.
+
+ * explow.c (force_reg): Don't make a REG_EQUAL note for an insn
+ that doesn't set TEMP.
+
+Wed Jul 13 17:00:35 1994 Torbjorn Granlund (tege@rtl.cygnus.com)
+
+ * expmed.c (expand_divmod, case CEIL_DIV_EXPR):
+ Handle emit_store_flag returning 0.
+
+Wed Jul 13 16:35:57 1994 Jim Wilson (wilson@cygnus.com)
+
+ * expr.c (store_field): Set MEM_IN_STRUCT_P on object and
+ blk_object.
+
+Wed Jul 13 08:40:11 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * Makefile.in (distdir-start): Make tmp/ginclude and copy its files.
+ (distdir-finish): Don't use -f Makefile.in.
+ (gcc.xtar.gz): Add --best.
+
+ * fold-const.c (decode_field_reference): Merge operand of
+ a BIT_AND_EXPR with the mask made from the description of the field.
+
+ * fold-const.c (fold, case MULT_EXPR): Remove last change.
+
+Wed Jul 13 07:12:32 1994 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * xm-pa.h, xm-pahpux.h, xm-pahiux.h (USE_C_ALLOCA): Define.
+
+Wed Jul 13 03:30:36 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * tree.h (TYPE_NEEDS_CONSTRUCTING): New macro.
+ (tree_type): Add needs_constructing_flag.
+ * function.c (assign_parms): If TYPE_NEEDS_CONSTRUCTING, pass by
+ invisible reference.
+ * calls.c (expand_call): Ditto.
+
+Wed Jul 13 06:49:05 1994 Simon Cooper (scooper@hardees.rutgers.edu)
+
+ * objc/Object.m: Include stdarg.h before stdio.h.
+
+Tue Jul 12 21:31:59 1994 Jim Wilson (wilson@cygnus.com)
+
+ * c-decl.c (pushdecl): Don't call lookup_name_current_level_global
+ when traditional. When doing checks against
+ IDENTIFIER_LIMBO_VALUE, also do check against
+ INDENTIFIER_GLOBAL_VALUE when traditional.
+
+ * final.c (getpwd): Declare.
+
+Tue Jul 12 16:24:10 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (GO_IF_LEGITIMATE_ADDRESS): Only allow immediate addressing
+ using 5 bits to avoid losing with FP loads and stores on page zero.
+
+Tue Jul 12 16:20:09 1994 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.md (ashlsi3, lshrsi3, ashrsi3): Only output low-order five
+ bits for !TARGET_POWER case.
+
+Tue Jul 12 13:06:14 1994 Jim Wilson (wilson@cygnus.com)
+
+ * combine.c (record_dead_and_set_regs_1): Can only handle SUBREG
+ if the register is smaller or equal to BITS_PER_WORD.
+
+ * sparc/sysv4.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER): Define.
+
+ * final.c (end_final): Store full path name in .d file not just
+ the filename.
+
+ * README.IRIX5: New file.
+
+Tue Jul 12 10:55:14 1994 Michael Meissner (meissner@osf.org)
+
+ * i386/osfrose.h (CC1_SPEC): If both -pic-extern/-pic-lib and
+ -pic-none, use -pic-extern win, instead of -pic-none.
+
+ * i386/osfelf.h (CC1_SPEC): Ditto.
+
+Tue Jul 12 09:08:06 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload.c (find_reloads): Don't try to call force_const_mem on
+ a HIGH.
+
+ * fold-const.c (fold, case MULT_EXPR): If arg is an unsigned
+ CEIL_DIV_EXPR, convert to TRUNC_DIV_EXPR of a PLUS_EXPR in some cases.
+
+ * alpha.md (ashldi3): Update pattern for (sign_extend (ashift ..))
+ to match the current canonicalization.
+
+ * explow.c (round_push, allocate_dynamic_stack_space): Avoid
+ using CEIL_DIV_EXPR; add adjustment and use TRUNC_DIV_EXPR instead.
+
+Tue Jul 12 08:12:04 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * dbxout.c (dbxout_source_file): Increment source_label_number outside
+ of macro expansion.
+
+ * arm.c (reversible_cc_register): New function.
+ (final_prescan_insn): Don't try to conditionalize jumps with JUMP_CLOB
+ attribute.
+ * arm.h (PREDICATE_CODES): Add reversible_cc_register.
+ * arm.md (matcher for SFmode inequality comparison): Use cmfe, not cfm.
+ (matchers for {store-flag, not-store-flag, neg-store-flag}): Output
+ if-false instruction first before if-true instruction.
+ (matcher for (AND store-flag x)): Only match if reversible_cc_register.
+ (matcher for (IF-THEN-ELSE reg (NOT reg))): Likewise.
+
+ * arm.h (FRAME_POINTER_REQUIRED): Always true if the function has
+ nonlocal labels.
+ * arm.md ({save,restore}_stack_nonlocal): Delete.
+
+Mon Jul 11 19:29:15 1994 Oliver Kellogg (okellogg@salyko.cube.net)
+
+ * machmode.def (TQFmode): New mode.
+ * expr.c (convert_move): Add some conversions for TQFmode.
+ * varasm.c (assemble_real): Handle TQFmode output.
+ * config.sub (basic_machine): Add 1750a.
+ * configure (1750a-*-*): New configuration.
+ * 1750a.c, 1750a.h, 1750a.md, m1750a.inc: New files.
+
+Mon Jul 11 18:38:42 1994 Doug Evans (dje@cygnus.com)
+
+ Add support for the h8/300h cpu.
+ * config/h8300/lib1funcs.asm: New file.
+ * h8300/t-h8300 (CROSS_LIBGCC1): Use libgcc1-asm.a.
+ (LIB1ASMSRC, LIB1ASMFUNCS, LIB2FUNCS_EXTRA, MULTILIB_OPTIONS,
+ MULTILIB_DIRNAMES, LIBGCC, INSTALL_LIBGCC): Define.
+ (fp-bit.c): Build it.
+ * h8300/h8300.h (CPP_PREDEFINES, CPP_SPEC, LIB_SPEC, TARGET_SWITCHES,
+ BITS_PER_WORD, MAX_BITS_PER_WORD, UNITS_PER_WORD, MAX_UNITS_PER_WORD,
+ POINTER_SIZE, PARM_BOUNDARY, BIGGEST_ALIGNMENT,
+ BIGGEST_FIELD_ALIGNMENT, STACK_BOUNDARY, HARD_REGNO_NREGS,
+ HARD_REGNO_MODE_OK, REG_CLASS_NAMES, REG_CLASS_CONTENTS,
+ REGNO_REG_CLASS, PUSH_ROUNDING, FUNCTION_ARG_ADVANCE,
+ TRAMPOLINE_TEMPLATE, TRAMPOLINE_SIZE, INITIALIZE_TRAMPOLINE,
+ CONSTANT_ADDRESS, MOVE_MAX, Pmode, SIZE_TYPE, PTRDIFF_TYPE):
+ Add h8/300h support.
+ (LINK_SPEC, TARGET_RTL_DUMP, TARGET_H8300, TARGET_H8300H,
+ REAL_ARITHMETIC, SETUP_INCOMING_VARARGS, HAVE_POST_INCREMENT,
+ HAVE_PRE_DECREMENT, MAX_MOVE_MAX, NO_BUILTIN_SIZE_TYPE,
+ NO_BUILTIN_PTRDIFF_TYPE, WCHAR_TYPE, WCHAR_TYPE_SIZE,
+ MAX_WCHAR_TYPE_SIZE, ASM_WORD_OP, INIT_SECTION_ASM_OP,
+ CTORS_SECTION_ASM_OP, DTORS_SECTION_ASM_OP, EXTRA_SECTIONS,
+ EXTRA_SECTION_FUNCTIONS, ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR,
+ DO_GLOBAL_CTORS_BODY, DO_GLOBAL_DTORS_BODY, INIT_TARGET_OPTABS):
+ Define.
+ (CAN_DEBUG_WITHOUT_FP, PCC_STATIC_STRUCT_RETURN, STRUCT_VALUE_REGNUM,
+ STRUCT_VALUE_INCOMING, STRUCTURE_SIZE_BOUNDARY): Undefine.
+ (enum reg_class): Add h8/300h support.
+ (emit_a_shift): Declare.
+ (TARGET_DEFAULT): Set default to -mquickcall.
+ (DOUBLE_TYPE_SIZE): Fix at 32. DFmode support doesn't exist.
+ (CALL_USED_REGISTERS, REG_ALLOC_ORDER): Swap registers 2,3 with 4,5.
+ Registers 0,1 contain function result, allocate after 2,3.
+ (STATIC_CHAIN_REGNUM): Use reg 4.
+ (CONST_OK_FOR_LETTER_P): 'O' is ok_for_bclr, 'P' is small_power_of_two.
+ (FUNCTION_PROFILER, FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER): First
+ attempt at an implementation.
+ (CONST_COSTS): Move code into function const_costs.
+ (BRANCH_COST): Set to 0.
+ (NOTICE_UPDATE_CC): Move code into function notice_update_cc.
+ (ASM_FILE_START): Move code into function asm_file_start.
+ (ASM_FILE_END): Move code into function asm_file_end.
+ (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): Use REAL_VALUE_TO_DECIMAL.
+ * h8300/h8300.c (cpu_type, names_extended, names_upper_extended,
+ h8_reg_names, h8_push_ops, h8_pop_ops, h8_mov_ops, h8_push_op,
+ h8_pop_op, h8_mov_op, current_function_anonymous_args, extra_pop,
+ hand_list): New variables.
+ (h8300_init_once, asm_file_start, asm_file_end, ok_for_bclr, o_operand,
+ p_operand, call_insn_operand, jump_address_operand, bit_operand,
+ eq_operator, const_costs, notice_update_cc, bit_operator,
+ nshift_operator, expand_a_shift, get_shift_alg, emit_a_shift,
+ fix_bit_operand): New functions.
+ (shift_alg, shift_type, shift_mode): New enums.
+ (shift_insn): New struct.
+ (shift_n_bits, can_shift): Deleted.
+ (shift_one, rotate_one): New variables.
+ (WORD_REG_USED): New macro (was function word_reg_used).
+ (dosize, function_prologue, function_epilogue, print_operand_address):
+ Add h8/300h support.
+ (small_power_of_two): Renamed from potl8.
+ (potg8): Deleted.
+ (general_operand_src): Fix POST_INC case.
+ (general_operand_dst): Fix PRE_DEC case.
+ (function_arg): 3 regs of args are passed if -mquickcall.
+ 4 regs of args are passed to handwritten assembler routines.
+ (print_operand): New cases 'A', 'P', 'S', 'U', 'W', 'b', 'c', 'd', 'g'.
+ Delete case 'O'. Sort cases. Add h8/300h support.
+ (do_movsi): Renamed from domovsi.
+ Handle reload_in_progress and reload_completed.
+ (initial_offset): Renamed from io. Add h8/300h support.
+ * h8300/h8300.md (cpu): New attribute.
+ (attribute length): Add h8/300h support.
+ (attribute cc): New value `cbit'.
+ (all anonymous insns): Give them names.
+ (move insns): Add h8/300h support.
+ (tstqi, tsthi): Use btst insn if able.
+ (arithmetic insns): Add h8/300h support.
+ (boolean insns): Likewise.
+ (negate insns): Likewise.
+ (branch insns): Likewise.
+ (call_value): Use call_insn_operand for operand 1.
+ (shift insns): Completely rewritten. Add h8/300h support.
+ (zero/sign extension insns): Add h8/300h support.
+ (extv): Deleted.
+ (insv, extzv): Only use for h8/300.
+ (bitfield insns): Completely rewritten.
+ (fancyb*): New insns for speeding up bit accesses.
+
+ * optabs.c (init_optabs): Allow target specific libcalls
+ with INIT_TARGET_OPTABS.
+
+Mon Jul 11 18:32:42 1994 Steve Chamberlain (sac@cygnus.com)
+
+ * config/fp-bit.c: New file. Provides simple fp emulation library.
+
+Mon Jul 11 18:27:42 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in (libgcc1-asm.a): New target for building libgcc1.a
+ in cross compilers.
+
+Mon Jul 11 17:00:45 1994 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.md (movsi matcher): Add nop for moving special register
+ to itself for !TARGET_POWER.
+ (movhi and movqi matcher): Likewise and add mtjmpr attribute.
+ Separate MQ from CTR and LR target registers for TARGET_POWER.
+
+ * powerpc.h (CPP_SPEC): Fix typo.
+
+Mon Jul 11 16:50:29 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-parse.in (stmt): Don't give more than one error message if a
+ nested `if' has an empty body.
+
+ * a29k.md (movqi): Call loadhi, not loadqi.
+
+Mon Jul 11 16:46:09 1994 Jeffrey A. Law (law@mole.gnu.ai.mit.edu)
+
+ * pa.h (DEBUGGER_ARG_OFFSET): Define. If no frame pointer
+ is available, then adjust the offset by the size of the
+ current frame.
+
+Mon Jul 11 16:34:14 1994 Stan Shebs (shebs@andros.cygnus.com)
+
+ * configure (*-*-lynxos*): Always run fixincludes, and if not using
+ gas, set tm_file to lynx-ng.h.
+ * config/x-lynx: Always run fixproto.
+ * config/lynx.h, i386/lynx.h, m68k/lynx.h, sparc/lynx.h: Rewrite
+ to work with gas producing coff files.
+ * config/lynx-ng.h, i386/lynx-ng.h, m68k/lynx-ng.h,
+ sparc/lynx-ng.h: New files.
+
+Mon Jul 11 15:16:28 1994 Pat Rankin (rankin@eql.caltech.edu)
+
+ * make-cc1.com: Compile most of cc1plus in the `cp' subdirectory.
+ * vmsconfig.com: When setting up tm.h, convert "vax/vax.h" into
+ "config-vax.h" rather than "[.config.vax]vax.h" for #include so
+ it will work from [.cp] subdirectory; copy vax.h to config-vax.h
+ as part of configuration setup. Also, manually include cc1plus
+ in the list of buildable compilers (a temporary measure; it
+ should process cp/Makefile.in like it does for primary makefile).
+
+ * make-cc1.com: Use `=' rather than `:=' when setting up CC,
+ so that `gcc' can be defined as a foreign command if necessary;
+ eliminate `set symbol/scope=noGlobal' for same reason; use `='
+ with all other symbols, for consistency; add explicit .obj
+ extension to some lists of object files passed to the linker;
+ general cleanup of the command text echoed during execution.
+ * make-cccp.com: Revise to be more consistent with make-cc1.com
+ for symbol setup & usage and for echoing command execution.
+
+Mon Jul 11 15:03:23 1994 Charles Hannum (mycroft@duality.gnu.ai.mit.edu)
+
+ * configure: Recognize m68k-*-netbsd* and i[345]86-*-netbsd*.
+ * cccp.c, collect2.c, gcc.c, protoize.c, cp/g++.c (sys_errlist)
+ [bsd4_4]: Do this for __NetBSD__ also.
+
+Mon Jul 11 14:16:28 1994 Kresten Krab Thorup (krab@spiff.gnu.ai.mit.edu)
+
+ * mips/mips.h (STRUCT_VALUE): Change definition from `(rtx)0' to
+ just `0' so it is a valid expression for the pre-processor.
+
+Mon Jul 11 10:54:35 1994 Stan Cox (coxs@dg-rtp.dg.com)
+
+ * configure (m88k-dg-dguxbcs): New configuration. m88k-dg-dgux
+ Now builds an elf compiler. Both targets will create bcs or elf.
+
+ * m88k/dgux.h (ASM_SPEC,STARTFILE_SPEC,LIB_SPEC): svr4 default.
+
+ * m88k/dguxbcs.h (ASM_SPEC,STARTFILE_SPEC,LIB_SPEC):
+ New target for svr3.
+
+ * m88k/x-dgux, m88k/t-dgux, m88k/x-dguxbcs:
+ Changed for svr4/svr4/svr3 respectively.
+
+ * m88k/m88k.h (TARGET_SVR3): New target switch.
+
+Wed Jun 29 19:23:27 1994 David Mosberger-Tang (davidm@piston.cs.arizona.edu)
+
+ * alpha.h (LIB_SPEC): If -pg, add -lprof2.
+
+Mon Jul 11 13:17:38 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * combine.c (simplify_set): Only turn IF_THEN_ELSE into AND if
+ MODE_INT.
+
+Sun Jul 10 06:03:12 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (eliminate_regs_in_insn): Handle special case of
+ assignment from hard frame pointer to frame pointer (for
+ nonlocal goto).
+ * function.c (instantiate_virtual_regs_1): Remove last change.
+ * stmt.c (expand_end_bindings): When adjusting FP, set it
+ from hard_frame_pointer_rtx.
+
+ * expr.c (expand_builtin, case BUILT_IN_FSQRT): Don't use
+ asterisk in name of `errno'.
+
+Fri Jul 8 22:07:32 1994 Jim Wilson (wilson@cygnus.com)
+
+ * stdarg.h: Delete include of <stdarg.h> when not gcc.
+ * varargs.h: Delete include of <varargs.h> when not gcc.
+
+Fri Jul 8 18:45:56 1994 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k/mot3300.h (FUNCTION_EXTRA_EPILOGUE): Copy a0 to d0, not
+ the other way.
+
+Fri Jul 8 17:41:39 1994 Jim Wilson (wilson@cygnus.com)
+
+ * expr.c (get_inner_unaligned_p): New function.
+ (expand_assignment, expand_expr): Use it.
+
+Fri Jul 8 17:16:25 1994 Doug Evans (dje@cygnus.com)
+
+ * expmed.c (extract_split_bit_field): Set UNIT to BITS_PER_WORD for
+ register values.
+ (store_split_bit_field): Likewise. Call operand_subword_force.
+
+Fri Jul 8 13:48:23 1994 Mike Stump (mrs@cygnus.com)
+
+ * expr.c (target_temp_slot_level): New variable to keep track of
+ the current stack level for temporaries created by TARGET_EXPRs.
+ * expr.h (target_temp_slot_level): Declare it.
+ * expr.c (expand_expr): Add code to maintain the new temporary
+ stack for TARGET_EXPRs to the CLEANUP_POINT_EXPR code and change
+ the allocation of temporaries for TARGET_EXPRs to be from the new
+ stack, so that they may live longer, and only be reused after they
+ are no longer in use.
+ * function.c (assign_stack_temp): KEEP can now also be 2, to
+ indicate allocation from the longer term frontend controlled
+ temporary stack.
+ * function.c (init_function_start): Initialize
+ target_temp_slot_level to zero.
+
+Fri Jul 8 16:52:38 1994 Jim Wilson (wilson@cygnus.com)
+
+ * combine.c (distribute_notes, REG_DEAD case): When check to see
+ if insn uses register, also call find_regno_fusage.
+
+ * sparc.h (SECONDARY_MEMORY_NEEDED_RTX): Call assign_stack_local
+ if the frame has zero size.
+
+Fri Jul 8 11:46:50 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * varasm.c (record_constant_rtx, force_const_mem): Ensure everything
+ is in saveable_obstack, not current_obstack.
+
+ * combine.c (force_to_mode): OP_MODE must be MODE if MODE and
+ mode of X are of different classes.
+ (nonzero_bits, num_sign_bit_copies): Say nothing known for
+ floating-point modes.
+
+ * function.c (instantiate_virtual_regs_1, case SET):
+ If DEST is virtual_stack_vars_rtx, replace with hardware
+ frame pointer.
+
+ * expr.c (expand_expr, case CONVERT_EXPR): If changing signedness
+ and we have a promoted SUBREG, clear the promotion flag.
+
+ * c-decl.c (finish_decl): Put RTL and other stuff in
+ permanent_obstack if DECL is.
+
+ * combine.c (gen_unary): Add new arg, OP0_MODE.
+ All callers changed.
+
+Thu Jul 7 19:58:35 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * varasm.c (assemble_variable): Do set TREE_ASM_WRITTEN on
+ erroneous incomplete decls.
+
+Thu Jul 7 17:59:46 1994 Joseph Arceneaux (jla@gnu.ai.mit.edu)
+
+ * configure (m68k-motorola-sysv*): Use mot3300g.h for gas.
+ * m68k/mot3300g.h: New file.
+
+Thu Jul 7 17:42:21 1994 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k/mot3300.h (FUNCTION_EXTRA_EPILOGUE): Fix typo in last change.
+
+Thu Jul 7 17:36:26 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expmed.c (expand_mult_highpart): Build constant forms of CNST1
+ in MODE or WIDE_MODE, as appropriate.
+
+ * optabs.c (expand_binop, case DIV [complex]): Fix typo in last change.
+
+ * alpha.md (reload_inqi): Make operand[2] be TImode and
+ pass register number that differs to unaligned_loadqi.
+ (reload_outqi): Change overlap in temps to unaligned_storeqi.
+ * alpha.c ({un,}aligned_memory_operand): Check against
+ hard_frame_pointer_rtx, not frame_pointer_rtx.
+
+Thu Jul 7 01:39:33 1994 Doug Evans (dje@cygnus.com)
+
+ * combine.c (make_compound_operation, AND case): Do extraction in
+ desired result mode.
+
+ * flow.c (mark_set_1): Record explicit hard registers in their
+ raw mode.
+ (mark_used_regs): Likewise.
+ * combine.c (distribute_notes): Likewise.
+
+Wed Jul 6 14:45:08 1994 Pat Rankin (rankin@eql.caltech.edu)
+
+ * longlong.h (vax sdiv_qrnnd): Fix typo.
+
+Wed Jul 6 19:59:12 1994 Mike Stump (mrs@cygnus.com)
+
+ * expr.c (expand_expr, defer_cleanups_to, expand_cleanups_to): All
+ cleanups have to be protected by interim exception handling code.
+ * stmt.c (expand_decl_cleanup, expand_cleanups): Ditto.
+ * toplev.c (interim_eh_hook): Hook for interim exception handling.
+ * toplev.c (interim_eh): Default implementation for exception
+ handling that does nothing.
+ * toplev.c (main): Set default for interim_eh_hook.
+
+Wed Jul 6 17:56:37 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.c (output_prolog): Start memory probing with $2.
+
+Wed Jul 6 14:21:14 1994 Jim Wilson (wilson@cygnus.com)
+
+ * stmt.c (struct nesting): Add new field alt_end_label.
+ (expand_start_loop): Initialize it to zero.
+ (expand_end_loop): Reorder loop if find either a jump to end_label
+ or a jump to alt_end_label.
+ (expand_exit_loop_if_false): Set alt_end_label.
+
+Wed Jul 6 05:07:31 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * c-common.c (decl_attributes): If TREE_TYPE for the DECL is updated,
+ then update TYPE as well.
+
+ * longlong.h (arm umul_ppmm): Fix use of uninitialized register.
+ Eliminate clobbers of hard registers.
+
+Wed Jul 6 03:22:04 1994 Torbjorn Granlund (tege@rtl.cygnus.com)
+
+ * expmed.c (expand_divmod): Clear out TARGET also if OP1 is a
+ constant, when TARGET == OP0.
+
+Tue Jul 5 18:58:28 1994 Torbjorn Granlund (tege@rtl.cygnus.com)
+
+ * Makefile.in (c-parse.y): Redirect through tmp file.
+ (objc-parse.y): Likewise.
+ (c-gperf.h): Likewise.
+ (mostlyclean): Delete the new tmp files.
+
+ * expmed.c (expand_divmod): Fix typo setting op1_is_pow2.
+ (expand_divmod): Handle powers-of-two specifically for unsigned
+ CEIL_*_EXPR.
+
+ * longlong.h: Really fix the test for _IBMR2. Change test of
+ __powerpc__ to _ARCH_PPC.
+
+Tue Jul 5 17:00:19 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (try_combine): Don't check for replacing
+ arg of function here.
+ (can_combine_p): Do it here.
+
+ * expr.c (expand_increment): If pre-incrementing a promoted
+ variable, don't adjust OP0 since the result won't be used.
+
+ * jump.c (duplicate_loop_exit_test): Handle SUBREG in SET_DEST
+ of loop exit test statements.
+
+ * combine.c (try_combine): If I2DEST was used in I2SRC, it isn't
+ unused just because there is no SET for I2 anymore.
+
+Mon Jul 4 11:15:13 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.h (RS6000_OUTPUT_BASENAME): Always call assembler_name
+ and pass the actual symbol name.
+
+ * varasm.c (assemble_name): Call STRIP_NAME_ENCODING.
+
+ * cse.c (canon_hash, exp_equiv_p): Refer to string in SYMBOL_REF
+ with XSTR, not XEXP.
+
+Sat Jul 2 18:53:19 1994 Jim Wilson (wilson@cygnus.com)
+
+ * mips.md (smuldi3_highpart, smuldi3_highpart_internal,
+ umuldi3_highpart, umuldi3_highpart_internal): New patterns.
+
+ * unroll.c (loop_iterations): Only use REG_EQUAL note value if it
+ is constant.
+
+ * dbxout.c (dbxout_type_methods): Enable debugging info for
+ template classes.
+
+ * c-lex.c (yylex): Reject imaginary numbers when pedantic.
+
+ * c-decl.c (duplicate_decls): When make void* match char*, set
+ DECL_IN_SYSTEM_HEADER.
+
+ * Makefile.in (clean): Delete LIB2FUNCS_EXTRA.
+
+ * alpha.h (FUNCTION_PROFILER, FUNCTION_BLOCK_PROFILER,
+ BLOCK_PROFILER): Use multiple fputs/fprintf calls instead of ANSI
+ C concatenated strings.
+ (PREDICATE_CODES): Add cint8_operand.
+
+ * gcc.c (DEFAULT_WORD_SWITCH_TAKES_ARG): Add -isystem.
+
+Sat Jul 2 09:34:20 1994 Torbjorn Granlund (tege@rtl.cygnus.com)
+
+ * expmed.c (expand_divmod): Always return gen_lowpart (mode, ...).
+
+Fri Jul 1 19:28:39 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * reorg.c (make_return_insns): Make sure redirecting a jump to
+ a RETURN insn does not invalidate the delay slots of the jump.
+
+Fri Jul 1 16:32:58 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * longlong.h: (arm umul_ppmm): Fix typos in last change. Mark
+ hard-coded registers with "%|".
+
+Fri Jul 1 10:08:47 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * toplev.c (compile_file): Pass through static consts and inlines
+ multiple times in case they reference each other.
+
+Fri Jul 1 07:41:19 1994 Torbjorn Granlund (tege@tiny.cygnus.com)
+
+ * longlong.h: Test for _AM29K and _IBMR2, not ___AM29K__
+ and ___IBMR2__.
+ (arm umul_ppmm): New definition.
+ (clipper umul_ppmm, smul_ppmm, __umulsidi3): New definitions.
+ (hppa count_leading_zeros): New definition.
+ (i960 umul_ppmm, __umulsidi3): New definitions.
+ (mc68000 umul_ppmm): Use %. before size suffixes.
+ (mc88110 umul_ppmm, udiv_qrnnd): Rewrite,
+ (mc88000): Get UMUL_TIME and UDIV_TIME right.
+ (mips): Get UMUL_TIME right.
+ (ns32000 umul_ppmm): New definition.
+ (ns32000 udiv_qrnnd): Rename from bogus div_qrnnd, rewrite.
+ (powerpc umul_ppmm, smul_ppmm): New definitions.
+ (_IBMR2/powerpc add_ssaaaa, sub_ddmmss): Improve.
+ (pyr umul_ppmm): Fix typo.
+ (sparc add_ssaaaa, sub_ddmmss): Match constant 0 for all inputs.
+ (vax sdiv_qrnnd): New definition.
+
+ * expmed.c (expand_divmod): Put OP0 in a register when computing
+ remainder, or when OP1 is constant.
+
+Fri Jul 1 06:46:09 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * jump.c (jump_optimize): Don't convert if (foo) x++ into an
+ add of an scc unless X has no side effects and can't trap.
+
+ * c-parse.in (initelt): The equal sign is optional when
+ positioning to a single element of an array.
+
+ * c-typeck.c (push_init_level): If not at "unfilled" position,
+ set constructor_incremental to 0; likewise for range.
+
+ * xm-alpha.h: If GNUC, include alloca.h, else declare alloca.
+
+ * m68k/mot3300.h (FUNCTION_EXTRA_EPILOGUE): New macro.
+
+ * expmed.c (expand_divmod): Don't set REG_NOTES unless we generated
+ a quotient.
+
+Thu Jun 30 18:25:52 1994 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * gcc.c (do_spec_1, case 'P'): Don't add underscores to macros
+ starting with '_[A-Z]'.
+
+Thu Jun 30 18:16:36 1994 Will Athanasiou (will@guardian.westford.ccur.com)
+
+ * m68k.md (umulsi3_highpart, smulsi3_highpart): Fix constraint
+ for operand 0 in define_insn.
+
+Thu Jun 30 16:07:33 1994 Kaveh R. Ghazi (ghazi@noc.rutgers.edu)
+
+ * fixincludes: Put wrappers around <time.h> and <sys/time.h> to
+ avoid multiple inclusion errors on m88k-tektronix-sysv3.
+
+Thu Jun 30 12:08:48 1994 Kresten Krab Thorup (krab@spiff.gnu.ai.mit.edu)
+
+ * objc-act.c, objc/init.c (OBJC_VERSION): Incremented to 6.
+
+ * objc/sendmsg.c (INVISIBLE_STRUCT_RETURN): New macro.
+ (__objc_block_forward): Declare depending on the above.
+
+ * objc/class.c (objc_next_class): New function.
+ * objc/objc-api.h (objc_next_class): New function.
+
+ * objc-act.c (get_proto_encoding, build_typed_selector_reference):
+ New fucnctions. (UTAG_PROTOCOL): New define.
+ (objc_selector_template, flag_typed_selectors): New variables.
+ (objc_init): set flag_typed_selectors if -fgnu-runtime.
+ (synth_module_prologue): Change declaration of
+ _OBJC_SELECTOR_TABLE when flag_typed_selectors is non-null.
+ (build_module_descriptor): Make sure the generated constructor
+ function is declared public.
+ (build_selector): Only cast to SEL when not doing typed selectors.
+ (build_selector_translation_table): Rewrite initialization.
+ (build_tmp_function_decl): Make up new name when called, since it
+ may now be called multiple times.
+ (hack_method_prototype): Use init_function_start to reinit args
+ machinery. Also set current_function_decl before calling
+ assign_parms.
+ (generate_protocols): Don't generate encoding twice.
+ (build_selector_template): New function.
+ (build_method_list_template): Generate (void*)0 as first element,
+ not (int)0.
+ (build_message_expr): move the call to build_selector_reference
+ towards the end, where we have determined the function prototype.
+
+ * objc/Object.h, objc/Object.m (read:, write:, streamVersion:):
+ Un-disable for alpha. (forward::, performv::): Declare and fix to
+ return retval_t.
+ * objc/archive.c: Completely rewritten to handle 64 bit longs and
+ pointers.
+ * objc/class.c (class_pose_as): Rewritten.
+ * objc/encoding.c: use new ROUND macro for alignment rounding.
+ * objc/init.c, objc/selector.c, objc/sendmsg.c: Rewritten to
+ handle new selectors.
+
+Thu Jun 30 07:49:50 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * arm.h (INITIAL_ELIMINATION_OFFSET): Check frame_pointer_needed when
+ eliminating the arg pointer into the stack pointer.
+
+Thu Jun 30 06:25:50 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-common.c (c_build_type_variant): Remove last change; instead,
+ copy TYPE if not in old obstack.
+
+Wed Jun 29 21:51:52 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * toplev.c (lang_options): Add -W{no-,}non-virtual-dtor.
+
+Wed Jun 29 19:23:27 1994 David Mosberger-Tang (davidm@piston.cs.arizona.edu)
+
+ * final.c (end_final,profile_function): Profiling variables are
+ size of pointer, not int.
+ * alpha.h (LIB_SPEC): If -pg, add -lprof2.
+ (STARTFILE_SPEC, {FUNCTION,BLOCK,FUNCTION_BLOCK}_PROFILER): New macros.
+
+Wed Jun 29 15:52:45 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * loop.c (basic_induction_var, case REG): Allow previous
+ insn to set a SUBREG of X.
+
+ * alpha.c (alpha_sa_size): Round size to 16-byte boundary.
+ (add_long_const): Add new arg, TEMP_REG.
+ (output_{pro,epi}log): Rework to put save area between outgoing
+ args and local variables.
+ * alpha.h (FRAME_POINTER_REGNUM): Now register 63.
+ (HARD_FRAME_POINTER_REGNUM): New macro.
+ (CONDITIONAL_REGISTER_USAGE, REG_CLASS_CONTENTS, REGNO_REG_CLASS):
+ Show register 63 is not an FP register.
+ (REGHNO_OK_FOR_BASE_P, REG_OK_FOR_BASE_P, REGISTER_NAMES): Likewise.
+ (ALPHA_ROUND): New macro.
+ (STARTING_FRAME_OFFSET, ELIMINABLE_REGS, INITIAL_ELIMINATION_OFFSET):
+ Modify to reflect save area between outgoing args and local vars.
+ * alpha.md: Add new pattern for double-add when have
+ reg + frame pointer.
+ Slight changes to all such patterns and add define_splits for them.
+
+ * global.c (global_alloc): Make a more accurate attempt to see
+ if the frame pointer will be used.
+ If it is, show HARD_FRAME_POINTER_REGNUM used if its not
+ the same as FRAME_POINTER_REGNUM.
+ * reload1.c (reload): Can't eliminate if frame pointer needed
+ and TO is stack pointer.
+ Spill HARD_FRAME_POINTER_REGNUM if not FRAME_POINTER_REGNUM
+ and frame pointer is needed.
+ (spill_hard_reg): If CANT_ELIMINATE, set regs_ever_live;
+ no longer done by callers.
+
+ * a29k.md (movqi): Add missing `DONE'.
+
+Wed Jun 29 15:44:18 1994 Doug Evans (dje@canuck.cygnus.com)
+
+ * sparc/sparc.h (CPP_SPEC): Split up v9/non-v9 stuff.
+ Move -Acpu and -Amachine from here.
+ (CPP_PREDEFINES): To here.
+ (NO_BUILTIN_PTRDIFF_TYPE): Undefine.
+ (NO_BUILTIN_SIZE_TYPE): Likewise.
+ (PTRDIFF_TYPE): Split up v9/non-v9 definitions.
+ (SIZE_TYPE): Likewise.
+ * sparc/sp64-elf: (PTRDIFF_TYPE): Remove dependence on POINTER_SIZE.
+ (SIZE_TYPE): Likewise.
+
+Wed Jun 29 15:28:17 1994 Michael Meissner (meissner@osf.org)
+
+ * cccp.c (collect_expansion): Always put 1 space after the macro
+ expansion in ANSI mode to fix regression from June 24th.
+
+Tue Jun 28 22:41:52 1994 Doug Evans (dje@cygnus.com)
+
+ * combine.c (simplify_set): Evaluate HAVE_conditional_move at runtime.
+
+Tue Jun 28 20:27:08 1994 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * optab.c (expand_binop): Convert OP0 to mode for library calls.
+
+ Changes to optimize division-by-constants, and make ceil and floor
+ rounding work correctly:
+ * expmed.c (expand_mult): Generalize to call synth_mult also
+ for OP1 - 1.
+ (ceil_log2): New function.
+ (choose_multiplier): New function.
+ (invert_mod2n): New function.
+ (expand_mult_highpart_adjust): New function.
+ (expand_mult_highpart): New function.
+ (EXACT_POWER_OF_2_OR_ZERO_P): New macro.
+ (expand_divmod): Almost completely rewritten.
+ (expand_shift): Don't truncate immediate shift count, it doesn't work
+ for types smaller than int.
+ * expr.h (smul_highpart_optab, umul_highpart_optab): New variables.
+ * genopinit.c (optabs): Add [us]mul_highpart_optab.
+ * optabs.c (smul_highpart_optab, umul_highpart_optab): New variables.
+ (expand_binop): Handle [us]mul_highpart_optab as commutative.
+ (init_optabs): Initialize [us]mul_highpart_optab.
+ * fold-const.c (div_and_round_double): Make it globally accessible.
+ * a29k.md (smulsi3_highpart, umulsi3_highpart): New patterns.
+ * alpha.md (umuldi3_highpart): New expander and matcher.
+ * alpha.c (cint8_operand): New predicate.
+ * m68k.md (umulsi3_highpart, const_umulsi3_highpart):
+ New expander and matcher.
+ (smulsi3_highpart, const_smulsi3_highpart): Likewise.
+
+Tue Jun 28 13:42:10 1994 Jim Wilson (wilson@cygnus.com)
+
+ * sol2.h (CPP_SPEC): Handle -msupersparc.
+ * sparc.c (cpu_type, sparc_cpu_type): Rename to arch_type and
+ sparc_arch_type. Fix all users.
+ (supersparc_adjust_cost): New function.
+ * sparc.h (cpu_type, sparc_cpu_type): Rename to arch_type and
+ sparc_arch_type.
+ (CPP_SPEC): Handle -msupersparc.
+ (MASK_SUPERSPARC, TARGET_SUPERSPARC): New macros.
+ (TARGET_SWITCHES): Add -msupersparc and -mcypress.
+ (ADJUST_COST): New macro.
+ * sparc.md (cpu attribute): Rename to arch attribute. Add a new
+ cpu attribute. Fix all users.
+ (type attribute): Add ialu, shift, imul, fpdivs, and fpdivd.
+ Delete fpdiv.
+ (function units): Add Cypress and Supersparc versions of each.
+ (addsi3, subsi3, andsi3, iorsi3, xorsi3): Add ialu type attribute.
+ (mulsi3): Add imul type attribute.
+ (divtf3, divdf3): Use fpdivd not fpdiv type attribute.
+ (divsf3); Use fpdivs not fpdiv type attribute.
+ (ashlsi3, ashrsi3, lshrsi3): Add shift type attribute.
+
+ * i960.md (andsi3+6): Replace bad clrbit pattern with two working
+ ones.
+
+Tue Jun 28 13:31:31 1994 Uwe Seimet (seimet@iris1.chemie.uni-kl.de)
+
+ * configure (m68k-atari-sysv4*): New configuration.
+ * m68k/atari.h, m68k/xm-atari.h: New files.
+
+Tue Jun 28 12:41:32 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.md (define_split for (plus (reg) (large_constant))): Treat
+ large_constant as signed.
+
+Tue Jun 28 05:46:55 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (eliminate_regs_in_insn): When checking for moves
+ and adds, use single_set.
+
+ * reload1.c (reloads_conflict): Handle R1_TYPE of RELOAD_OTHER.
+
+ * expr.c (do_jump, case BIT_AND_EXPR): Only narrow to a type
+ that corresponds to a mode.
+
+Tue Jun 28 05:41:29 1994 Will R. Athanasiou (will@westford.ccur.com)
+
+ * rs6000.h (MEMORY_MOVE_COST): Make processor-dependent.
+ * rs6000.md (movsf): Emit frsp if storing to memory and not PowerPC.
+ (movsf matcher): Remove explicit frsp.
+ (store sf with update): Likewise.
+ * rs6000.c: Include ctype.h.
+
+Tue Jun 28 05:40:44 1994 Mike Collison (collison@chianti.sw.stratus.com)
+
+ * real.c: Treat HFmode like SFmode, for now.
+
+Mon Jun 27 19:16:49 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * optabs.c (expand_binop, multi-words shifts and rotates):
+ Fix errors in last change.
+
+Mon Jun 27 11:29:18 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * arm.c: Include "expr.h".
+ (arm_fpu): New variable.
+ (arm_gen_movstrqi): Fix typo.
+ * arm.h: (enum floating_point_type): New enumeration type.
+ (arm_fpu): New declaration.
+ * arm.md: (function_unit fpa): Add more accurate scheduling
+ information.
+ (all floating point patterns): Add more detailed instruction type
+ information to attributes.
+ * riscix.h: (STARTFILE_SPEC,SIZE_TYPE,PTRDIFF_TYPE): Fix typos.
+ (ASM_FINAL_SPEC): Only reject -mbsd and -mxopen when -pedantic.
+
+Sun Jun 26 05:37:26 1994 Pat Rankin (rankin@eql.caltech.edu)
+
+ * toplev.c (v_message_with_decl): Avoid fwrite for stderr; mixing
+ it with fprintf and fputs can cause strange results under VMS.
+
+Sat Jun 25 06:07:56 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * combine.c (distribute_notes, case REG_DEAD): If a call uses a
+ hard reg, then this is where it dies.
+
+Fri Jun 24 19:09:33 1994 Chip Salzenberg (chip@fin.uucp)
+
+ * cccp.c (create_definition): Eliminate whitespace before and
+ after macro definitions.
+
+Fri Jun 24 16:19:27 1994 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * c-decl.c (lang_decode_option): Set warn_bad_function_cast
+ for -Wbad-function-cast.
+ * c-typeck.c (build_c_cast): Issue a warning for non-matching cast
+ from a function call (like malloc without proto).
+ * c-tree.h: Declare warn_bad_function_cast.
+ * toplev.c (lang_options): Add -W[no]-bad-function-cast.
+
+Fri Jun 24 16:09:12 1994 Pat Rankin (rankin@eql.caltech.edu)
+
+ * vax.h (ASM_IDENTIFY_LANGUAGE): New macro.
+
+Fri Jun 24 15:36:37 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * jump.c (jump_optimize): If we reverse "if (foo) bar else break;"
+ and there follows a NOTE_INSN_LOOP_END, move the note before "bar".
+
+ * arm.md (movstrsi): Delete.
+ (movstrqi): New expand.
+ * arm.h (arm_gen_movstrqi): New function.
+
+Fri Jun 24 14:43:46 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.c (alpha_builtin_saveregs): Fix typo in computing value
+ for __base.
+
+ * vax.md (zero_extract patterns): Don't allow constants in
+ the first operand of ZERO_EXTRACT since the recognizer
+ function forces them to match the mode of the match_operand.
+
+ * c-typeck.c (decl_constant_value): Test for const and
+ not iterator.
+ (default_conversion, digest_init): Remove redundant checks
+ before calling decl_constant_value.
+ (convert_for_assignment): See if RHS has a constant value.
+
+ * m68k.md (ashrsi3, lshrsh3): Remove patterns using bfext[su].
+
+ * reg-stack.c (goto_block_pat): Ignore undefined label.
+
+Thu Jun 23 22:07:42 1994 Doug Evans (dje@cygnus.com)
+
+ * sparc/sp64-elf.h (LINK_SPEC): Fix typo.
+ (PTRDIFF_TYPE): Likewise.
+
+Thu Jun 23 19:15:36 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * tree.h (TREE_SYMBOL_REFERENCED): New macro.
+ * varasm.c (assemble_name): Set TREE_SYMBOL_REFERENCED on the
+ identifier for `name'.
+ * toplev.c (compile_file): Use TREE_SYMBOL_REFERENCED instead of
+ TREE_USED and TREE_ADDRESSABLE where appropriate.
+
+Thu Jun 23 19:06:05 1994 Randy Wright (rwright@dhostwo.convex.com)
+
+ * cse.c (simplify_unary_operation, case UNSIGNED_FLOAT): Add
+ missing cast to unsigned.
+
+Thu Jun 23 19:00:18 1994 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.md (fix_truncdfsi2, movsf, movdi): Use assign_stack_temp.
+ (mulsidi3): Add earlyclobber constraint modifier to PowerPC
+ version and !TARGET_POWERPC64 to final condition.
+
+ * rs6000.h (CPP_PREDEFINES): Define _POWER (alias for _IBMR2).
+ (CPP_SPEC): New macro.
+ * powerpc.h (ASM_SPEC): Use PowerPC mode, not 601 mode.
+ (CPP_SPEC): New macro.
+ (TARGET_DEFAULT): Generate pure PowerPC code, not 601-specific.
+
+Thu Jun 23 18:09:23 1994 Pat Rankin (rankin@eql.caltech.edu)
+
+ * vax.h (CPP_PREDEFINES): Add `__vax__'.
+ * vax/vms.h (CPP_PREDEFINES): Add `__vax__', `__vms__', and `__VMS__';
+ update __GNUC_MINOR__ to 6.
+
+Thu Jun 23 17:59:41 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * toplev.c (compile_file): Don't try to write function if we
+ didn't save insns for it.
+
+ * reload.c (find_reloads): Don't rejecting non-const due to value
+ of PREFERRED_RELOAD_CLASS if no regs were valid for alternative.
+
+Thu Jun 23 17:45:55 1994 Matthias Pfaller (leo@marco.de)
+
+ * ns32k.c (output_move_double): If the dest is register pair and both
+ regs are used in src address, use ADDR to compute src address, not
+ ADDD, which throws away scaled index.
+
+Thu Jun 23 17:40:06 1994 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * c-decl.c (clear_binding_level): Add missing fields in initializer.
+ (c_decode_option): Correct misspelling of -fno-dollars-in-identifiers.
+
+Thu Jun 23 13:47:23 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Fix return type of sbrk in <unistd.h> on Alpha
+ OSF/1 V2.0. Also, redirect grep errors to /dev/null in <assert.h>
+ fix.
+
+Thu Jun 23 12:08:23 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * arm.c: Include tree.h.
+ (const_ok_for_arm): Add fast return for 0 or just one non-zero bit.
+ (const_ok_for_op, arm_split_constant): New functions.
+ (arm_rtx_costs, reg_or_int_operand): New functions.
+ (shift_operator): Accept ROTATERT.
+ (multi_register_push): New function.
+ (shift_op): Don't abort if a constant is outside the acceptable range,
+ but convert the whole shift expression into something legal. If the
+ shift is zero, then return NULL.
+ (output_return_instruction): Output a call to abort if the function is
+ volatile.
+ (arm_volatile_func): New function.
+ (get_prologue_size): Remove all adjustments for insns that are now
+ output as rtx.
+ (output_func_prologue): Remove all code that outputs instructions,
+ just print a few comments.
+ (output_func_epilogue): Output a call to abort if a volatile function
+ tries to return.
+ (emit_multi_reg_push): New function.
+ (arm_expand_prologue): New function. Don't bother to push call-saved
+ regs if we will never return.
+ (arm_print_operand, case 'S'): If shift_op returns NULL, then no shift
+ is required.
+ * arm.h (TARGET_WHEN_DEBUGGING): Delete.
+ (MODES_TIEABLE_P): All modes of the same class are tieable.
+ (CONST_OK_FOR_LETTER_P): Add 'M' for constants valid in a shift.
+ (FUNCTION_PROFILER): Don't call arm_increase_location.
+ (INITIAL_ELIMINATION_OFFSET): Call saved regs are no-longer pushed for
+ functions that don't return.
+ (LEGITIMIZE_ADDRESS): Push constants that will never be legitimate --
+ symbols and labels -- into registers. Handle DImode better.
+ (DEFAULT_SIGNED_CHAR): Use unsigned unless already defined.
+ (RTX_COSTS): Call arm_rtx_costs.
+ (ADDRESS_COST): Since most operations have the same rtx cost, make the
+ more complex addresses cheaper.
+ (PREDICATE_CODES): Add ROTATERT to shift_operator; and new predicates
+ for reg_or_int_operand and multi_register_push.
+ (DBX_CONTIN_LENGTH): Only define if not already done.
+ (PRINT_OPERAND_ADDRESS): Let arm_print operand output the ", " for
+ shifts.
+ * arm.md (addsi3, subsi3, andsi3, iorsi3, ashlsi3, ashrsi3, lshrsi3,
+ rotrsi3): Rewrite as expand patterns.
+ (rotlsi3): New expand.
+ (matchers, and split patterns for above): New.
+ (all patterns with shifts): Let arm_print_operand output the ", "
+ before a shift if it is needed.
+ (zero_extendqihi2): Delete.
+ (zero_extendqisi2): Expand to (and ...) if not memory.
+ (movsi): Call arm_split_constant to generate a constant.
+ (movqi): Only force a MEM into a register if not reloading.
+ (movsf, movdf): If loading a non-immediate floating point value, or
+ loading and floating point immediate into integer regs, push the
+ constant straight into the pool.
+ (movdf): Get rid of the scratch register.
+ (reload_outdf): Rewrite to expand to the two required insns.
+ (matcher for movdf): Remove alternative that used scratch register for
+ storing.
+ (movxf): rewrite as expand.
+ (matcher for movxf): Recognize even when XFmode code is disabled, so
+ that prologue insns can be generated.
+ (Matcher for reversed conditional jump): Don't match if the mode of the
+ CC register is not reversible.
+ (prologue): New expand.
+ (matcher for multi_register_push insn): New.
+ * riscix.h: Delete some dead code.
+ (STARTFILE_SPEC): Look in the correct places for start files.
+ (LIB_SPEC): Define.
+ (LINK_SPEC): Define.
+ (TARGET_WHEN_DEBUGGING): Delete.
+ (DEFAULT_SIGNED_CHAR): Set to unsigned.
+ (SIZE_TYPE, PTRDIFF_TYPE, TARGET_EDOM): Define.
+ * rix-gas.h (DBX_CONTIN_LENGTH): Set to 80.
+ (DEFAULT_GDB_EXTENSIONS, DBX_NO_XREFS): Don't try to pander to dbx, it
+ is just to broken to use.
+
+Wed Jun 22 20:13:03 1994 Will Athanasiou (will@westford.ccur.com)
+
+ * configure (m68k-ccur-rtu): New configuration.
+ * config.sub (m68k-ccur): New system.
+ * protoize.c: Include <dirent.h>, not <sys/dir.h> on Concurrent.
+ * ccur-GAS.h, x-ccur: New files.
+
+Wed Jun 22 18:49:17 1994 Walter Misar (misar@rbg.informatik.th-darmstadt.de)
+
+ * m68k/hp320.h (LINK_SPEC): New macro.
+
+Wed Jun 22 18:43:51 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * configure: For target alpha-*-*, if using gas, set
+ target_cpu_default to 4.
+ * config/alpha/alpha.h (TARGET_SWITCHES): Include
+ TARGET_CPU_DEFAULT in default value.
+ (TARGET_CPU_DEFAULT): Define as 0 if not already defined.
+ (ASM_FINAL_SPEC): Include TARGET_CPU_DEFAULT in test for which
+ version to define.
+
+Wed Jun 22 18:15:41 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * loop.c (strength_reduce): When replacing DEST_ADDR givs, make
+ sure resulting insn is valid.
+
+ * optabs.c (expand_binop): New variable next_methods; pass to
+ most recursive calls when trying to avoid libcalls.
+ Always check for a return value of zero in recursive calls.
+ (expand_float): Ensure TARGET has proper mode.
+ Pass OPTAB_LIB_WIDEN to expand_binop calls.
+
+Tue Jun 21 14:35:38 1994 Doug Evans (dje@cygnus.com)
+
+ * cccp.c (skip_to_end_of_comment): Catch unterminated comments.
+
+Sat Jun 18 17:49:41 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * fixproto: Move hacking of assert.h from here.
+ * fixincludes: To here.
+
+Sat Jun 18 16:42:31 1994 Jim Wilson (wilson@cygnus.com)
+
+ * c-typeck.c (process_init_element): For fieldtype, don't access
+ TYPE_MAIN_VARIANT field if the type is error_mark_node.
+
+ * jump.c (duplicate_loop_exit_test): Initialize copy to zero.
+ Emit jump to end lable if copy is still zero.
+
+ * mips.md (truncdisi2): Change from define_insn to define_expand.
+ (truncdihi2, truncdiqi2, extendsidi2): Likewise.
+ (extendsidi2_internal): New pattern.
+
+ * loop.c (move_movables): Copy CALL_INSN_FUNCTION_USAGE field.
+
+ * sdbout.c (sdbout_one_type): Use DECL_ASSEMBLER_NAME if
+ DECL_LANG_SPECIFIC is set. Use DECL_ASSEMBLER_NAME not
+ DECL_NAME for child_type that is a template type.
+ (sdbout_symbol): Use DECL_ASSEMBLER_NAME if DECL_LANG_SPECIFIC
+ is set.
+
+Sat Jun 18 16:39:03 1994 Kung Hsu (kung@mexican.cygnus.com)
+
+ * dbxout.c (dbxout_symbol): Replace DECL_IGNORED_P with
+ TYPE_DECL_SUPPRESS_DEBUG.
+
+Sat Jun 18 10:21:44 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expmed.c (expand_shift): Don't try extzv for lshr.
+
+ * vax.md (lshrsi3): New define_expand.
+
+ * optabs.c: Pass NULL_RTX for TARGET in calls to expand_{un,bin}op.
+ (expand_float): Use expand_shift instead of expand_binop.
+
+Fri Jun 17 15:05:58 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Correct math.h on Lynx handling again.
+
+Fri Jun 17 10:52:41 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * cse.c (simplify_binary_operation, case MINUS): Check mode of op0,
+ instead of op1, before calling plus_constant.
+
+Fri Jun 17 01:42:37 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (DEBUGGER_AUTO_OFFSET): Define. If no frame pointer
+ is available, then adjust the offset by the size of the current
+ frame.
+
+Thu Jun 16 16:35:12 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * tree.h (DECL_DEFER_OUTPUT): New macro.
+ * toplev.c (compile_file): Unset DECL_DEFER_OUTPUT on decls
+ considered at end of file.
+ * integrate.c (output_inline_function): Unset DECL_DEFER_OUTPUT on
+ fndecl.
+ * toplev.c (rest_of_compilation): Also postpone compilation of
+ inlines with DECL_DEFER_OUTPUT set.
+ (compile_file): Always emit postponed inlines if
+ -fkeep-inline-functions.
+
+Thu Jun 16 11:00:14 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Fix argument type for ffs in <string.h> on Alpha
+ OSF/1 V2.0.
+
+Thu Jun 16 06:49:03 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload_reg_free_p, case RELOAD_OTHER): Allowed
+ to conflict with RELOAD_FOR_OTHER_ADDRESS.
+
+ * cse.c (set_nonvarying_address_components): Rework and also
+ handle an AND used for non-aligned accesses.
+
+Thu Jun 16 06:36:49 1994 Chip Salzenberg (chip@fin.uucp)
+
+ * i386.h (REG_ALLOC_ORDER): Prefer registers listed in
+ CALL_USED_REGISTERS.
+
+Wed Jun 15 20:45:14 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * tree.h (TREE_NO_UNUSED_WARNING): Note that this can be applied
+ to COMPOUND_EXPRs, too.
+
+ * stmt.c (warn_if_unused_value): Handle TREE_NO_UNUSED_WARNING for
+ COMPOUND_EXPRs, too.
+
+Wed Jun 15 20:35:21 1994 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.md (divsi3): Fix divide by 2^N with compare RTL.
+
+ * rs6000.md (maxsf3, minsf3, maxdf3, mindf3): Fix predicate of
+ define_split.
+ (muldi3): Fix predicate.
+ (movdf matcher): Allow update and indexed for lfd instruction.
+
+Wed Jun 15 19:24:23 1994 Doug Evans (dje@cygnus.com)
+
+ * dbxout.c (dbxout_type): Fix call to bzero.
+
+Wed Jun 15 19:20:34 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (simplify_unary_operation): Fix typo in last change.
+
+Wed Jun 15 15:20:54 1994 Per Bothner (bothner@cygnus.com)
+
+ * dbxout.c (dbxout_range_type): Handle the case that an array
+ range is neither an integer nor a sub-range. (In Pascal or
+ Chill it could be a Boolean, character, or enumeral type.)
+
+Wed Jun 15 04:00:42 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * genmultilib: New shell script to generate multiple library
+ information.
+ * Makefile.in (multilib.h, stmp-multilib, install-multilib): New
+ targets.
+ (gcc.o): Depend on multilib.h.
+ (clean): Remove multilib.h and tmpmultilib*.
+ * gcc.c: Include multilib.h.
+ (print_multi_lib, print_multi_directory, multilib_select,
+ multilib_dir): New static variables.
+ (option_map): Added --print-multi-lib and --print-multi-directory.
+ (set_spec): Get multilib_select from specs file.
+ (process_command): Dump multilib_select into specs file. Handle
+ -print-multi-lib and -print-multi-directory.
+ (do_spec_1): Try multilib_dir for %D case.
+ (find_file): Try multilib_dir.
+ (main): Call set_multilib_dir. Handle print_multi_lib and
+ print_multi_directory.
+ (used_arg, set_multilib_dir, print_multilib_info): New functions.
+ * configure (sparc-*-sunos4*): Use target fragment sparc/t-sunos4.
+ * sparc/t-sunos4: New file.
+
+Wed Jun 15 03:54:32 1994 Doug Evans (dje@cygnus.com)
+
+ Add support for the SPARC V9 cpu.
+ * configure (sparc64-*-aout): New target.
+ (sparc64-*-elf): New target.
+ * config.sub (sparc64): New cpu.
+ (aout, elf): New os's.
+ * genconfig.c (main): Allow targets to override HAVE_conditional_move.
+ * jump.c (jump_optimize): Use it at run-time.
+ * sparc/t-sp64: New file.
+ * sparc/sp64-aout.h: New file.
+ * sparc/sp64-elf.h: New file.
+ * sparc/sysv4.h (ASM_OUTPUT_CASE_LABEL): Handle 64 bit pointers.
+ * sparc/sparc.h (cpu_type): New enum.
+ (CPP_PREDEFINES,CPP_SPEC): Add v9 support.
+ (NO_BUILTIN_PTRDIFF_TYPE, NO_BUILTIN_SIZE_TYPE, MAX_WCHAR_TYPE_SIZE,
+ SHORT_TYPE_SIZE, INT_TYPE_SIZE, LONG_TYPE_SIZE, LONG_LONG_TYPE_SIZE,
+ FLOAT_TYPE_SIZE, DOUBLE_TYPE_SIZE, MAX_INT_TYPE_SIZE,
+ MAX_LONG_TYPE_SIZE): Define.
+ (PTRDIFF_TYPE, SIZE_TYPE, BITS_PER_WORD, MAX_BITS_PER_WORD,
+ UNITS_PER_WORD, MAX_UNITS_PER_WORD, LONG_DOUBLE_TYPE_SIZE,
+ POINTER_SIZE, PARM_BOUNDARY, STACK_BOUNDARY, SPARC_STACK_ALIGN,
+ EMPTY_FIELD_BOUNDARY, BIGGEST_ALIGNMENT, FIRST_PSEUDO_REGISTER,
+ FIXED_REGISTERS, CALL_USED_REGISTERS, CONDITIONAL_REGISTER_USAGE):
+ Add v9 support.
+ (sparc_override_options, sparc_code_model): Declare.
+ (OVERRIDE_OPTIONS): Call it.
+ (MASK_*): Define bits set by target flags.
+ (TARGET_*): Use them.
+ ({MASK,TARGET}_{V9,INT64,LONG64,PTR64,ENV32,STACK_BIAS,
+ MEDLOW,MEDANY,FULLANY}): Define.
+ (MEDANY_BASE_REG): Define.
+ (V9_SWITCHES, TARGET_OPTIONS): Define.
+ (TARGET_SWITCHES, TARGET_DEFAULT): Use MASK_*.
+ (SPARC_STACK_BIAS, SECONDARY_MEMORY_NEEDED_MODE): Define.
+ (SECONDARY_MEMORY_NEEDED): Simplify.
+ (hard_regno_mode_class, sparc_mode_class, sparc_cpu_type): Declare.
+ (REG_PARM_STACK_SPACE): Do not define if v9.
+ (HARD_REGNO_NREGS, HARD_REGNO_MODE_OK, MODES_TIEABLE_P,
+ RETURN_IN_MEMORY, STRUCT_VALUE, STRUCT_VALUE_INCOMING, reg_class,
+ REG_CLASS_NAMES, REG_CLASS_CONTENTS, REGNO_REG_CLASS, REG_ALLOC_ORDER,
+ REG_LEAF_ALLOC_ORDER, LEAF_REGISTERS, REG_CLASS_FROM_LETTER,
+ CLASS_MAX_NREGS, STARTING_FRAME_OFFSET, FIRST_PARM_OFFSET,
+ BASE_RETURN_VALUE_REG, BASE_OUTGOING_VALUE_REG, BASE_PASSING_ARG_REG,
+ BASE_INCOMING_ARG_REG, FUNCTION_ARG_REGNO_P): Add v9 support.
+ (sparc_arg_class): New enum (v9 only).
+ (sparc_args): New struct to record v9 arguments.
+ (CUMULATIVE_ARGS): Use it (v9 only).
+ (GET_SPARC_ARG_CLASS): Define.
+ (sparc_arg_count, sparc_n_named_args): Declare.
+ (PASS_IN_REG_P): Define.
+ (ROUND_REG, ROUND_ADVANCE, INIT_CUMULATIVE_ARGS, FUNCTION_ARG_ADVANCE,
+ FUNCTION_ARG, FUNCTION_INCOMING_ARG, FUNCTION_ARG_PARTIAL_NREGS,
+ FUNCTION_ARG_PASS_BY_REFERENCE, FUNCTION_ARG_CALLEE_COPIES):
+ Add v9 support.
+ (sparc64_init_expanders, sparc64_fpconv_stack_temp): Declare.
+ (INIT_EXPANDERS): Define (v9 only).
+ (gen_v9_scc, output_v9branch): Declare.
+ (HAVE_conditional_move): Define.
+ (FUNCTION_PROFILER, FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER,
+ DYNAMIC_CHAIN_ADDRESS, RETURN_ADDR_RTX, REGNO_OK_FOR_FP_P,
+ REG_OK_FOR_INDEX_P, REG_OK_FOR_BASE_P, EXTRA_CONSTRAINT,
+ CASE_VECTOR_MODE, Pmode, EXTRA_CC_MODES, EXTRA_CC_NAMES,
+ SELECT_CC_MODE, REGISTER_NAMES): Add v9 support.
+ (REGNO_OK_FOR_CCFP_P): Define.
+ (sparc_initialize_trampoline, sparc64_initialize_trampoline): Declare.
+ (INITIALIZE_TRAMPOLINE): Call them.
+ (ENCODE_SECTION_INFO): Mark functions in v9.
+ (RTX_COSTS): Assume MULT costs the same for v9 as v8.
+ (ASM_LONGLONG, ASM_FLOAT): Define.
+ (ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Add v9 support.
+ * sparc/sparc.c (SKIP_CALLERS_UNIMP_P): Define.
+ (sparc_cpu_type, sparc_arg_count, sparc_n_named_args,
+ frame_base_offset, fpconv_stack_temp): New globals.
+ (leaf_reg_remap): Add additional registers for v9.
+ (sparc_override_options, sparc64_init_expanders,
+ sparc64_fpconv_stack_temp, intreg_operand, ccfp_reg_operand,
+ data_segment_operand, text_segment_operand, v9_regcmp_op,
+ arith11_operand, arith10_operand, arith11_double_operand,
+ arith10_double_operand, gen_v9_scc, emit_v9_brxx_insn,
+ sparc_init_modes, build_big_number, output_v9branch,
+ sparc_initialize_trampoline, sparc64_initialize_trampoline):
+ New functions.
+ (arith_double_operand, gen_compare_reg, finalize_pic,
+ emit_move_sequence, mem_aligned_8, output_move_double,
+ output_move_quad, output_fp_move_double, output_fp_move_quad,
+ output_block_move, save_regs, restore_regs): Add v9 support.
+ (sparc_mode_class): New enum.
+ (*_MODES): Redefine to use it.
+ (hard_32bit_mode_classes): Renamed from hard_regno_mode_ok.
+ (hard_regno_mode_classes, hard_64bit_mode_classes,
+ sparc_mode_class): New globals.
+ (num_gfregs): Renamed from num_fregs.
+ (compute_frame_size): Add v9 support. Simplify calculations.
+ (output_function_prologue): Call build_big_number to compute stack
+ size in %g1, then adjust %sp.
+ Fix saving of call saved registers. Handle new v9 registers.
+ (output_function_epilogue): Fix restoration of call saved registers.
+ Handle new v9 registers.
+ Use SKIP_CALLERS_UNIMP_P to see if unimp insn is at return address.
+ (sparc_builtin_saveregs): Define v9 version.
+ (output_cbranch): New argument fp_cond_reg. All callers changed.
+ Add v9 support.
+ (output_return): Use SKIP_CALLERS_UNIMP_P.
+ (print_operand): New codes '_', '@', 'C', 'D'.
+ (output_double_int): Handle LABEL_REF and MINUS for v9.
+ Use ASM_LONGLONG if assembler can handle it.
+ * sparc/sparc.md (cpu): New attribute.
+ (type attribute): New value cmove (conditional moves).
+ (cmpdi): New pattern for v9.
+ (seq*, sne*): Add v9 support.
+ (sgt,slt,sge,sle): Explicitly restrict operand 0 to the integer
+ registers. Try emitting a conditional move for v9.
+ (sgtu,sltu,sgeu,sleu): Likewise.
+ (comparison insns): Add v9 versions.
+ (scc insns): Add DImode versions for v9.
+ (beq, bne, bgt, blt, bge, ble): If comparing DImode with 0 on v9,
+ use brxx insns. Use emit_jump_insn, not emit_insn, as the latter
+ mishandles brxx insns.
+ (branch insns): Update calls to output_cbranch.
+ Add v9 versions to support multiple floating point condition code regs.
+ Add v9 versions to support brxx insns.
+ (lo_sum, high, pic): Add v9 support.
+ (symbolic move patterns): Disable for v9.
+ (DImode, DFmode, TFmode moves): Add v9 support.
+ (conditional move insns): Define for v9.
+ (zero_extendqidi2, extendqidi2, zero_extendhidi2, extendhidi2,
+ zero_extendsidi2, extendsidi2, floatdisf2, floatdidf2, floatditf2,
+ fix_truncsfdi2, fix_truncdfdi2, fix_trunctfdi2, muldi3, divdi3,
+ udivdi3, ashldi3, ashrdi3, lshrdi3, ffsdi2): New patterns for v9.
+ (bitfield compare insn): Add DImode version for v9.
+ (adddi3, subdi3, negdi2, anddi3, iordi3, xordi3, one_cmpldi2,
+ mixed mode fp mult insns, negdf2, negtf2, absdf2, abstf2, tablejump,
+ call, call_value, untyped_call, untyped_return, indirect_jump,
+ flush_register_windows, flush): Add v9 support.
+ (ldd peep holes): Disable for v9.
+ (set/compare peep hole): Define DImode version for v9.
+ (sign extend/compare peep hole): Likewise.
+ (return peep holes): Add v9 support.
+ (call/jump peep holes): Add v9 support.
+ * ginclude/va-sparc.h: Add v9 support.
+
+Tue Jun 14 22:44:52 1994 Michael Meissner (meissner@osf.org)
+
+ * config/i386/i386.h (reg_class): Add AD_REGS that match %eax and
+ %edx to allow %eax:%edx to be specified as one DI register.
+ (REG_CLASS_NAMES): Ditto.
+ (REG_CLASS_CONTENTS): Ditto.
+ (REG_CLASS_FROM_LETTER): 'A' specifies AD_REGS.
+
+ * config/i386/i386.md (umulqihi3): Name the insn with the standard
+ name.
+ (mulqihi3, umulsidi3, mulsidi3): Add new widening multiply
+ patterns.
+
+Tue Jun 14 22:25:16 1994 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * fold-const.c (encode, decode): Use 4 HOST_WIDE_INTs for encoded
+ value with HOST_BITS_PER_WIDE_INT/2 bits in each.
+ (LOWPART, HIGHPART): New macros.
+ (BASE): Move definition outside of div_and_round_double.
+ (add_double, mul_double, lshift_double, rshift_double): Rewrite.
+ (lrotate_double): Use LOWPART, HIGHPART, and BASE.
+ (rrotate_double): Likewise.
+ (div_and_round_double): Major changes to code for general case.
+ Now it actually produces non-garbage results for large operands.
+ (div_and_round_double): Simplify condition for special code used when
+ divisor < BASE.
+ (const_binop): Delete special cases for multiplying by 0, 1, 2, 4, 8.
+ (fold, case *_DIV_EXPR): Don't try to optimize for overflow.
+ * machmode.h (MAX_SHORTS): Deleted.
+
+ * m68k.md: Trivial simplification of many patterns.
+ (subsi3): Don't handle CONST_INT for operand 2.
+ (ashiftrt, op2 > 8): New pattern.
+ (lshiftrt, op2 > 8): New pattern.
+
+ * a29k.md (logical patterns): Tune to give better code for immediate
+ values.
+ * a29k.c (cmplsrcb_operand): New predicate.
+ * a29k.h (PREDICATE_CODES): Add cmplsrcb_operand.
+
+Tue Jun 14 17:52:10 1994 Tor Egge (tegge@flipper.pvv.unit.no)
+
+ * m88k/sysv3.h (DO_GLOBAL_CTORS_BODY): Call __builtin_alloca
+ with a non-zero argument, forcing a frame pointer to be needed.
+
+Tue Jun 14 17:37:41 1994 Mike Collison (collison@sw.stratus.com)
+
+ * reload.h (RELOAD_FOR_OPADDR_ADDR): New reload class.
+ * reload.c (find_reloads): Change secondary reloads of class
+ RELOAD_FOR_OPERAND_ADDRESS to RELOAD_FOR_OPADDR_ADDR.
+ * reload1.c (reload): Process and accumulate needs for
+ RELOAD_FOR_OPADDR_ADDR reloads.
+ When determining if needs are nongroup needs, ignore
+ inactive or optional reloads.
+ (reload_reg_used_in_op_addr_reload): New variable to indicate
+ when reloads of class RELOAD_FOR_OPADDR_ADDR are in use.
+ (mark_reload_reg_in_use, clear_reload_reg_in_use):
+ Process reloads of class RELOAD_FOR_OPADDR_ADDR.
+ (reload_reg_free_p, reload_reg_free_before_p, reloads_conflict):
+ Likewise.
+ (choose_reload_regs): Support RELOAD_FOR_OPADDR_ADDR reloads.
+ (emit_reload_insns): Output RELOAD_FOR_OPADDR_ADDR reloads.
+
+Tue Jun 14 17:29:53 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cccp.c, toplev.c, tree.c, print-tree.c, fold-const.c:
+ Cast pointer operands to bzero, bcopy, and bcmp to (char *).
+ * function.c, stmt.c, expmed.c, varasm.c, emit-rtl.c: Likewise.
+ * dbxout.c, integrate.c, jump.c, real.h, calls.c, cse.c: Likewise.
+ * loop.c, unroll.c, flow.c, stupid.c, combine.c, regclass.c: Likewise.
+ * local-alloc.c, global.c, reload.c, reload1.c, sched.c: Likewise.
+ * genattrtab.c, bc-emit.c, gcc.c, collect2.c: Likewise.
+
+ * c-decl.c (min_precision): New function.
+ (finish_enum): Rewrite code to determine precision required
+ for enumeral type.
+
+ * cse.c (simplify_unary_operation): Correctly and consistently
+ handle CONST_INT cases for FLOAT and UNSIGNED_FLOAT.
+
+ * xm-alpha.h (sbrk): Don't declare here.
+
+ * alpha.h (CONST_COSTS, case CONST_INT): Fix typo.
+
+ * tree.c (staticp, case FUNCTION_DECL): A nested function isn't static.
+
+ * i386/linux.h (STARTFILE_SPEC): Don't force -static for -g.
+
+ * gcc.c (find_a_file): Try EXECUTABLE_SUFFIX first, then file
+ without the suffix.
+
+ * jump.c (jump_optimize): Don't delete dead insn if it has a
+ REG_RETVAL note.
+
+ * fix-header.c (xstrdup): Renamed from strdup.
+ (check_protection): Call xstrdup, not strdup.
+
+Tue Jun 14 17:26:08 1994 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.h (TARGET_SWITCHES): Remove -mpowerpc64 and -mno-powerpc64.
+ * rs6000.c (rs6000_override_options): Remove MPC620 cpu variants.
+
+ * rs6000.c (output_prolog): Fix error in loading size of large
+ stack frames.
+
+Tue Jun 14 17:24:09 1994 Chip Salzenberg (chip@fin.uucp)
+
+ * reload1.c (reload_as_needed): Clear spill_reg_store at start.
+ (emit_reload_insns): Omit erroneous predicate of reload
+ deletion -- reload_spill_index is not indexed by regno.
+
+Tue Jun 14 15:59:55 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Wrap assert.h in extern "C" { } to avoid problem on
+ HP/UX, which uses NO_IMPLICIT_EXTERN_C. Also fix 12 May 94
+ change.
+
+Tue Jun 14 15:12:50 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * jump.c (condjump_in_parallel_p): New function to detect
+ conditional jumps within PARALLEL insns.
+ (jump_optimize): Allow for some simple optimizations involving
+ conditional jumps within PARALLEL insns.
+ * reorg.c (get_jump_flags): Handle conditional jumps in PARALLEL
+ insns.
+ (get_branch_condition, fill_simple_delay_slots): Likewise.
+ (fill_eager_delay_slots, relax_delay_slots, dbr_schedule): Likewise.
+
+ * pa-osf.h (SIZE_TYPE): Define as "long unsigned int" to be
+ compatable with system include files.
+ * pa1-osf.h (SIZE_TYPE): Likewise.
+
+ * pa1-osf.h (WCHAR_TYPE): Define as "short unsigned int".
+ (WCHAR_TYPE_SIZE): Define as 16 bits.
+
+ * pa.c (output_arg_descriptor): Restore old behavior for SImode
+ USE insns of FP registers (used by untyped call support).
+
+Mon Jun 6 09:15:43 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * arm.c (arm_reload_out_hi): Rewrite. Add support for processors
+ running in big-endian mode.
+ (fp_immediate_constant): Fix typo in argument declaration.
+ * arm.h (PROMOTE_MODE): Promote HImode integers as signed.
+ (BYTES_BIG_ENDIAN): Allow OS description to override default.
+ (LOAD_EXTEND_OP): When big-endian, HImode loads are sign extended.
+ * arm.md (storehi_bigend): New expansion pattern.
+ (storeinthi): Rework to generate better code, add big-endian support.
+ (movhi): Add support for processors running in big-endian mode.
+ (movhi_bigend): New expansion pattern.
+ (matcher for movhi): Remove incorrect alternative for storing HImode to
+ memory. Only match when little endian.
+ (matcher for big-endian movhi): New pattern.
+ (matchers/peepholes for extended pre/post increment HImode loads): Only
+ match when little-endian.
+ (matcher for operating on adjacent memory locations): Load operation
+ into arith operands.
+ (peepholes for extended pre-increment byte loads): New patterns.
+
+Sat Jun 4 21:06:29 1994 Kaveh R. Ghazi (ghazi@noc.rutgers.edu)
+
+ * sys-types.h (__gnuc_va_list): Use instead of va_list.
+ * sys-protos.h (*): Use __gnuc_va_list, not va_list.
+
+Sat Jun 4 07:19:39 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * arm.c (print_multi_reg, output_call, output_call_mem,
+ output_mov_long_double_fpu_from_arm,
+ output_mov_long_double_arm_from_fpu,
+ output_mov_double_fpu_from_arm, output_mov_double_arm_from_fpu,
+ output_return_instruction, output_func_{prologue,epilogue},
+ arm_print_operand, output_load_symbol): Print the register prefix
+ before each register name.
+ (output_func_prologue, output_lcomm_directive): Output the target
+ dependent comment char for asm comments.
+ * arm.h (FUNCTION_PROFILER): Delete duplicate definition.
+ (FUNCTION_PROFILER, TRAMPOLINE_TEMPLATE, ASM_FILE_START,
+ ASM_OUTPUT_REG_{PUSH,POP}, PRINT_OPERAND_ADDRESS): Output register
+ prefix before any explicit register name.
+ (ASM_OUTPUT_LONG_DOUBLE, ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT,
+ ASM_OUTPUT_COMMON): Output the target dependent comment char.
+ (ASM_FILE_START): Output register alias for r10.
+ (REGISTER_NAMES): Output "r9" now for r9, not "rfp".
+ (ADDITIONAL_REGISTER_NAMES): New macro.
+ * arm.md (all patterns explicitly mentioning register names): Output
+ the target dependent prefix before the register name.
+ (all patterns with asm comments): Output the target dependent comment
+ character.
+
+Fri Jun 3 18:14:07 1994 Doug Evans (dje@cygnus.com)
+
+ * c-common.c (decl_attributes): Fix section attributes.
+ * varasm.c (make_decl_rtl): If section attribute is being ignored,
+ really ignore it.
+
+Fri Jun 3 15:53:57 1994 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * pa.h (FP_REGNO_P): New macro for intra file usage.
+ (REGNO_OK_FOR_FP_P): Use FP_REGNO_P.
+ (FUNCTION_VALUE_REGNO_P): Revert last change.
+ * pa.md (mulsi3): Use MATCH_DUP for op3, not MATCH_OPERAND.
+
+ * pa.h (CONDITIONAL_REGISTER_USAGE): Partially revert last changes;
+ Make non-existing 1.0 fp regs fixed, including odd-numbered regs.
+ (enum reg_class): Get rid of SNAKE_FP_REGS, GENERAL_OR_SNAKE_FP_REGS,
+ and NON_SHIFT_REGS.
+ (REG_CLASS_NAMES): Likewise.
+ (REG_CLASS_CONTENTS): Likewise.
+ (REGNO_REG_CLASS): Likewise.
+ (HARD_REGNO_MODE_OK): Corresponding changes. Don't force 1.0 fpregs
+ to even regno here; fixed_regs does the job better.
+ (FP_REG_CLASS_P): Get rid of SNAKE_FP_REGS.
+ (REG_CLASS_FROM_LETTER, case 'z'): Deleted.
+ (HARD_REGNO_NREGS): Partially revert last change.
+ (CLASS_MAX_NREGS): Partially revert last change.
+ * pa.md (globally): Delete 'x' constraint or change it to 'f',
+ as apropriate.
+
+Fri Jun 3 09:18:55 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * arm.h (CONST_OK_FOR_LETTER_P): Only allow constants that are valid
+ when inverted for 'K'. Only allow constants that are valid when
+ negated for 'L'.
+ * arm.md (all patterns): Update instruction generation to reflect new
+ meanings of constraints 'K' and 'L'. Use output type 'B' to
+ generate an inverted constant. Use output type 'N' to generate a
+ negated floating point constant.
+
+Thu Jun 2 22:43:58 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (TARGET_SWITCHES): Enable TARGET_LONG_CALLS when
+ TARGET_PORTABLE_RUNTIME is enabled.
+ * pa.c (output_call): If TARGET_LONG_CALLS is enabled, then emit
+ an inline long-call sequence.
+ * pa.md (millicode define_delay): Disable delay slots if
+ TARGET_LONG_CALLS.
+ (call_internal_reg, call_value_internal_reg): If TARGET_LONG_CALLS
+ is enabled, then emit an inline long-call sequence. Fix length
+ computation for TARGET_LONG_CALLS.
+ (millicode calls): Fix length computation for TARGET_LONG_CALLS.
+
+ * pa.h (ASM_DECLARE_FUNCTION_NAME): Fix typo.
+
+Thu Jun 2 18:28:07 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * stmt.c (expand_end_bindings): Don't bother emitting cleanups
+ after a barrier.
+
+Thu Jun 2 18:10:36 1994 Stephen L Moshier (moshier@world.std.com)
+
+ * libgcc2.c (__floatdisf): Protect against double-rounding error.
+
+Thu Jun 2 17:47:54 1994 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.h (MASK_PPCFPX): Delete.
+ (MASK_PPC_GPOPT, MASK_PPC_GFXOPT, TARGET_PPC_GPOPT, TARGET_PPC_GFXOPT):
+ New Macros.
+ (TARGET_SWITCHES): Remove -mpowerpc-fpx; add -mpowerpc-gpopt
+ and -mpowerpc-gfxopt.
+ * rs6000.c (processor_target_table): Use new macros.
+ * rs6000.md (define_function_unit): Remove ppc604 from sqrt list.
+ (divsi3, udivsi3): Remove spaces from PowerPC output templates.
+ (sqrtsf2, maxsf3, minsf3, sqrtdf2, maxdf3, mindf3): Use new macros.
+ (floatdidf2, fix_truncdfdi2, ffsdi2, muldi3): New patterns.
+ ({s,u}muldi3_highpart, divdi3, udivdi3, rotldi3): Likewise.
+ (movdi): Handle moves between FPRs and GPRs.
+ (scc insn): Correct swapped compare and delayed_compare attributes.
+
+Thu Jun 2 14:45:04 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * arm.c (arm_condition_code): Move to start of file.
+ (const_pool_offset): Correct typo.
+ (fp_const_from_val): New function.
+ (all instruction generators): mark position where conditionalization
+ should be with '%?'.
+ (output_move_double): Use new '%m' output type to simplify load/store
+ multiple generation.
+ (shift_instr): Delete.
+ (shift_op): New function.
+ (output_arithmetic): Delete.
+ (output_arithmetic_with_shift): Delete.
+ (output_arithmetic_with_immediate_multiply): Delete.
+ (output_shifted_move): Delete.
+ (output_shift_compare): Delete.
+ (arm_print_operand): New function.
+ * arm.h (output_func_{prologue,epilogue}): Change declarations from
+ output_{prologue,epilogue}.
+ (arm_output_llc, arithmetic_instr,
+ output_arithmetic_with_immediate_mulitply,
+ output_arithmetic_with_shift, shift_instr): Delete function
+ definitions.
+ (ASM_OUTPUT_OPCODE): Delete.
+ (PRINT_OPERAND): Call arm_print_operand, instead of doing it directly.
+ (ARM_COMMENT_CHAR): New macro.
+ (ARM_REG_PREFIX): New macro.
+ (ARM_SIGN_EXTEND): New macro.
+ (PRINT_OPERAND_ADDRESS): Delete variable 'shift'. Change type of
+ variable 'offset' to HOST_WIDE_INT. Use arm_print_operand to handle
+ shifts in addresses.
+ * arm.md (all output patterns): Use new capabilities of
+ arm_print_operand to simplify output sequences. Mark position of
+ condition code with '%?'.
+
+ * riscix.h (ASM_FINAL_SPEC [CROSS_COMPILE]): Correct typo.
+
+Thu Jun 2 08:14:00 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-common.c (c_build_type_variant): Don't change TYPE_MAIN_VARIANT
+ of new type.
+
+ * expr.c (expand_expr, case ADDR_EXPR): If result is ignored,
+ just return const0_rtx.
+
+Wed Jun 1 13:52:01 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * i386/sco4.h: #define NO_IMPLICIT_EXTERN_C.
+
+Wed Jun 1 04:55:06 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * arm.c: General tidy up.
+ #include <string.h>.
+ Declare some prototypes.
+ (output_memory_reference_mode): Change type to enum machine_mode.
+ (arm_const_nmoves): Delete.
+ (adjacent_mem_locations, {load,store}_multiple_operation): Explicitly
+ declare to return int.
+ ({load,store}_multiple_operation): Change type of 'count', 'base' and
+ 'i' to HOST_WIDE_INT.
+ (output_add_immediate): Change type of 'n' to HOST_WIDE_INT.
+ (output_multi_immediate): Change type of Argument 'n' to
+ HOST_WIDE_INT, if wider than 32 bits, mask out the high bits.
+ (output_arithmetic_with_immediate_multiply): Change type of 'shift'
+ to HOST_WIDE_INT.
+ (output_func_{prologue,epilogue}): Renamed from
+ output_{prologue,epilogue}. Check all registers to see if they are
+ live, but only push/pop them if they are not in call_used_regs.
+ * arm.h: Delete some dead code.
+ (FUNCTION_{PROLOGUE,EPILOGUE}): Call output_func_{prologue,epilogue}.
+ (INITIAL_ELIMINATION_OFFSET): Inspect all registers, but only add
+ those that are not in call_used_regs.
+ (GO_IF_LEGITIMATE_INDEX): Change type of variable 'range' to
+ HOST_WIDE_INT; change type of variable 'code' to enum rtx_code.
+ (REVERSIBLE_CC_MODE): New macro.
+
+ * arm.c (const_pool_offset): New function.
+ (get_prologue_size): New function.
+ (output_func_prologue): Eliminate variable code_size.
+ (output_func_epilogue): Only call arm_increase_location when
+ optimizing; also add the size of the function just compiled, and the
+ size of the prologue.
+ (arm_output_asm_insn): Delete. All callers changed to use
+ output_asm_insn.
+ (arm_output_llc): Delete.
+ (output_load_symbol): New first parameter 'insn'. Rewrite so that
+ assembler can detect whether we made a mistake.
+ * arm.h (arm_output_asm_insn): Delete declaration.
+ (EXTRA_CONSTAINT): New constraint 'R' to match a constant pool label.
+ Make constraint 'S' never match when not optimizing.
+ (CONSTANT_ADDRESS_P): Only accept symbols marked with SYMBOL_REF_FLAG
+ when optimizing.
+ (ENCODE_SECTION_INFO): Don't mark any symbols when not optimizing.
+ (ASM_OUTPUT_REG_{PUSH,POP}: Don't call arm_increase_location.
+ (ASM_OUTPUT_ADDR_VEC_ELT): Likewise.
+ * arm.md (all insn and peephole patterns): Rewrite without using
+ arm_output_asm_insn.
+ (matcher for movsi): New alternative to load symbol directly into a
+ register. Add new parameter in call to output_load_symbol.
+
+ * arm.md (all patterns): Length attribute now describes length in
+ bytes.
+ * arm.c (short_branch): Convert length calculations to bytes.
+
+Tue May 31 20:35:39 1994 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * pa.c (emit_move_sequence): Add missing argument to symbolic_operand.
+ (output_block_move): Prefer addl to add.
+ (print_operand): Print fp regs with L suffix when appropriate.
+ (output_arg_descriptor): Rewrite to accomodate new convention for
+ USE information.
+
+ * pa.h (SECONDARY_MEMORY_NEEDED): Simplify.
+ (ADDITIONAL_REGISTER_NAMES): Define.
+ (CONDITIONAL_REGISTER_USAGE): Make PIC_OFFSET_TABLE_REGNUM fixed
+ again.
+
+ Changes to combine fp registers for 1.0 and 1.1 architectures.
+ (Make explicit clobbers of fp registers work.)
+ * pa.h (FIRST_PSEUDO_REGISTER): Now 89.
+ (FIXED_REGISTERS): Delete 1.0 fp registers,
+ (CALL_USED_REGISTERS): Likewise.
+ (CONDITIONAL_REGISTER_USAGE): Almost deleted.
+ (REG_ALLOC_ORDER): Update register numbers.
+ (HARD_REGNO_NREGS): Delete special case for 1.0 fp registers.
+ (HARD_REGNO_MODE_OK): Rewrite. Don't allow use of odd fp registers
+ (enum reg_class): Delete HI_SNAKE_FP_REGS and FP_OR_SNAKE_FP_REGS.
+ (REG_CLASS_NAMES): Corresponding change.
+ (REG_CLASS_CONTENTS): Delete HI_SNAKE_FP_REGS and
+ FP_OR_SNAKE_FP_REGS. Make SNAKE_FP_REGS class contain all fp
+ registers. Update all values for changed register numbering.
+ (REGNO_REG_CLASS): Corresponding changes.
+ (REG_CLASS_FROM_LETTER): Delete 'y'.
+ (FP_REG_CLASS_P): No longer test HI_SNAKE_FP_REGS.
+ (CLASS_MAX_NREGS): Delete special case for 1.1 fp registers.
+ (FUNCTION_VALUE): Remove TARGET_SNAKE conditionals.
+ (LIBCALL_VALUE): Likewise.
+ (FUNCTION_ARG_REGNO_P): Likewise.
+ (FUNCTION_VALUE_REGNO_P): Likewise. Add registers 29 and 33.
+ (FUNCTION_ARG): Remove TARGET_SNAKE conditionals. Update register
+ numbers.
+ (REGNO_OK_FOR_FP_P): Update register number.
+ (REGISTER_NAMES): Delete special entries for 1.0 fp registers.
+ (DBX_REGISTER_NUMBER): Likewise.
+ * pa.c (compute_frame_size): Update for changed register numbers.
+ Simplify loops over general registers to stop at register 4.
+ (hppa_expand_prologue): Likewise.
+ (hppa_expand_epilogue): Likewise.
+
+Tue May 31 19:32:18 1994 Jim Wilson (wilson@cygnus.com)
+
+ * mips.md (movesi_unaligned, movsi_ulw, movsi_usw): Delete.
+ (extv, extzv, insv, movsi_ulw, movsi_usw): New patterns.
+
+ * dbxout.c (dbxout_type): Always emit cross-references if
+ use_gnu_debug_info_extensions set.
+
+ * final.c (output_source_line): Call xcoffout_source_line.
+ * xcoffout.c (xcoff_lastfile): New variable.
+ (ABS_OR_RELATIVE_LINENO, ASM_OUTPUT_SOURCE_LINE): Define here.
+ (xcoffout_source_file, xcoffout_source_line): New functions.
+ (xcoffout_declare_function): Use xcoffout_source_file.
+ * xcoffout.h (xcoff_lastfile): Declare.
+ (DBX_OUTPUT_MAIN_SOURCE_FILENAME): Clean up. Set xcoff_lastfile.
+ (ABS_OR_RELATIVE_LINENO, ASM_OUTPUT_SOURCE_LINE): Delete here.
+ (DBX_OUTPUT_SOURCE_FILENAME): Delete.
+
+ * unroll.c (copy_loop_body): Copy CALL_INSN_FUNCTION_USAGE field.
+
+ * sparc.h (ASM_SPEC): Don't pass -k when -pg or -p given.
+ (OVERRIDE_OPTIONS): Warn when disabling -fpic.
+
+ * mips-tdump.c (print_global_hdr): Remove "l" from printf format
+ for flags.
+ (print_sym_hdr): Add missing "l" to printf formats.
+ (print_symbol, print_file_desc): Likewise.
+
+ * i960.h (PUT_SDB_TYPE): Adjust value for compatibility with GNU960
+ toolchain.
+
+ * sparc.h (LIB_SPEC): Don't link in /usr/lib/bb_link.o with -a.
+ (CONDITIONAL_REGISTER_USAGE): When -a, make %g1 and %g2 fixed.
+
+ * mips/iris5gas.h, mips/iris5gdb.h: New files.
+ * configure (mips-sgi-irix5): Use iris5gas.h and iris5gdb.h.
+
+Tue May 31 19:21:44 1994 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * pa.md (movsi matcher): Use ldi for moving of 0 to a reg.
+ (movhi matcher): Likewise.
+ (movqi matcher): Likewise.
+ (many patterns): Prefer addl to add, and shNaddl to shNadd.
+ (define_split for (plus (reg) (large_constant))): Cleanup.
+ (divsi3): Use match_dup for operand 3, not match_operand.
+ (udivsi3): Likewise.
+ (modsi3): Likewise.
+ (umodsi3): Likewise.
+
+Tue May 31 19:15:31 1994 Doug Evans (dje@cygnus.com)
+
+ * toplev.c (v_pedwarn_with_decl): Don't even issue warnings from
+ pedantic errors in system header files.
+
+Tue May 31 17:16:41 1994 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.md (extendqidi2, extendqisi2, extendqihi2): Remove
+ non-existent lba instruction.
+ (ashrdi3): Undo previous change.
+
+Tue May 31 12:30:00 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * toplev.c (lang_options): Add -f{no-,}implicit-templates.
+ (compile_file): Don't output SDB debugging info for
+ externals.
+
+Tue May 31 07:20:18 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * stmt.c (expand_asm_operands): Make MEM with BLKmode for clobber
+ of "memory".
+ * loop.c (note_addr_stored): A SET or CLOBBER of a BLKmode MEM means
+ that all memory is clobbered.
+
+Mon May 30 14:01:48 1994 Doug Evans (dje@cygnus.com)
+
+ * gcc.c (default_compilers): Pass -MG to cpp if present.
+ (option_map): New option --print-missing-file-dependencies/-MG.
+ * cccp.c (print_deps_missing_files): New global.
+ (main): New argument -MG. Treat missing include files as
+ generated files and output dependencies for them.
+
+Mon May 30 10:42:14 1994 Frederic Pierresteguy (F.Pierresteguy@frcl.bull.fr)
+
+ * m68k/dpx2cdbx.h (PREFERRED_DEBUGGING_TYPE): Define as SDB_DEBUG.
+ * m68k/dpx2g.h: Disable code that manages gcc.ifile.
+
+Mon May 30 10:35:49 1994 Stephen L Moshier (moshier@world.std.com)
+
+ * optabs.c (expand_float): Avoid double-rounding when float is
+ is narrower than int.
+ * real.c (significand_size): New function.
+ * real.h (significand_size): Declare.
+
+Sun May 29 15:58:21 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * jump.c (jump_optimize): When deleting unneeded stack adjusts
+ or mem-mem copies, use delete_computation.
+
+ * combine.c (force_to_mode): NEXT_SELECT is true for NEG.
+ Only exit quickly if X is narrower than MODE and MASK has all
+ bits in X's mode set.
+ (force_to_mode, case SUBREG): Don't check for WORD_REGISTER_OPERATIONS.
+ (force_to_mode, case NEG): Special-case test for low-order bit.
+
+ * rtlanal.c (volatile_insn_p): Call ourselves in recursive scan.
+
+Sat May 28 19:03:23 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-parse.in (init, compstmt, stmt, all_iter_stmt_with_decl):
+ If the lookahead token is a constant and we need to pop the
+ momentary obstack, don't free it.
+
+ * stmt.c (expand_end_case): Have INDEX_TYPE track conversions done
+ to INDEX_EXPR.
+
+Sat May 28 06:25:40 1994 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * pa.md (call): Force address into register in non-symbol case.
+ (call_value): Likewise.
+
+Fri May 27 19:29:30 1994 Doug Evans (dje@cygnus.com)
+
+ * toplev.c (compile_file): Call init_regs after `word_mode' is valid.
+ * regclass.c (init_reg_modes): If choose_hard_reg_mode can't find a
+ valid mode, fall back to word_mode.
+
+ * expr.c (use_reg): Fix recording of USE information.
+ (use_regs): Likewise.
+ Delete argument `reg'. All callers changed.
+ * expr.h (use_regs): Update prototype.
+ * calls.c (expand_call): Update call to use_regs. Call use_reg
+ if parm is wholly in registers.
+
+ * configure: If compiling in separate dir, add subdirs to .gdbinit.
+
+Fri May 27 18:18:23 1994 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.md (zero_extendqidi2, zero_extendhidi2): Use rldicl
+ instruction.
+ * rs6000.h (RTX_COSTS): Update PPC603 and PPC604 values.
+
+Fri May 27 17:56:07 1994 Douglas Rupp (drupp@cs.washington.edu)
+
+ * i386/xm-dos.h (DIR_SEPARATOR): New macro.
+
+Fri May 27 17:45:08 1994 Holger Teutsch (teutsch@ffm-iw.Degussa.DE)
+
+ * clipper.h (PCC_STATIC_STRUCT_RETURN): No longer defined.
+
+Fri May 27 17:36:53 1994 Pat Rankin (rankin@eql.caltech.edu)
+
+ * make-l2.com: Update to handle `ginclude' subdirectory
+ when compiling libgcc2.
+
+Fri May 27 17:30:37 1994 Matthias Pfaller (leo@marco.de)
+
+ * ns32k.c (print_operand_address): print_operand_address
+ creates PLUS-rtls for internal use, so it has to handle them.
+
+Fri May 27 16:13:53 1994 Chris Torek (torek@elf.bsdi.com)
+
+ * function.c (assign_parms): Set REG_USERVAR_P when parm
+ is passed by invisible reference but can live in register.
+
+Fri May 27 06:03:11 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload.c (find_reloads): Revert to old code and change secondary
+ reloads to RELOAD_FOR_OPERAND_ADDRESS too.
+
+ * combine.c (try_combine): Don't make complemented XOR for
+ constant out of range.
+
+ * alpha.c (or_operand): Renamed from ior_operand.
+ * alpha.h (PREDICATE_CODES): Likewise.
+ * alpha.md (iordi3): Likewise.
+ (xordi3): Use or_operand and add second alternative.
+ (eqv): Only accept registers.
+
+ * expr.c (expand_expr, case CONSTRUCTOR): If constant and large
+ enough for memcpy to be used, build constructor into static memory.
+
+ * alpha.md: Add define_split for sign-extended PLUS of a MULT
+ of an SImode comparison.
+
+ * combine.c (simplify_comparison): Narrow comparison for AND's
+ that are ZERO_EXTENDs.
+ Can widen for all comparisons if inputs are both sign extended.
+
+ * reload1.c (reload_as_needed): Update spill_reg_order once we sort
+ spill_regs.
+
+ * alpha.md: Add define_split for sign-extended PLUS of an SImode
+ comparison; change comparison to DImode.
+
+ * stmt.c (expand_end_case): Use old type of INDEX_EXPR when making
+ a constant.
+
+ * local-alloc.c (requires_inout): Renamed from requires_inout_p and
+ returns number of alternatives that require a match.
+ (block_alloc): Use new function and handle case where all
+ alternatives have some operand that must match operand 0.
+
+ * local-alloc.c (qty_phys_num{,_copy}_sugg): New variables.
+ (qty_phys_has{,_copy}_sugg): Deleted.
+ (qty_sugg_compare{,_1}): New functions.
+ (local_alloc): Allocate and init new vars instead of deleted ones.
+ (block_alloc): Update and use new vars.
+ Order quantities using new functions when allocating quantities
+ with suggested registers.
+ (combine_regs, find_free_reg): Use new vars to count number
+ of suggestions.
+
+Thu May 26 11:55:44 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * jump.c (jump_optimize): When looking for an `if' statement
+ that takes two insns to compute a result using a temporary,
+ allow the temporary to be a SUBREG.
+
+ * combine.c (simplify_comparison): Call CANONICALIZE_COMPARISON,
+ if defined.
+ * alpha.h (CANONICALIZE_COMPARISON): New macro.
+
+ * combine.c (simplify_if_then_else): Don't make (mult (cond))
+ in simple case; leave as IF_THEN_ELSE instead.
+
+ * expmed.c (expand_divmod): Correctly set CAN_CLOBBER_OP0 when we've
+ converted OP0 to COMPUTE_MODE.
+
+Thu May 26 11:41:58 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Protect bool in curses.h with #ifndef __cplusplus,
+ since g++ now defines bool as a basic type.
+
+ * fixinc.svr4: Protect definition of __P used in Solaris math.h
+ and floatingpoint.h to avoid future fixproto conflicts.
+
+ * Makefile.in (stmp-fixinc): Don't pass ${srcdir} argument to
+ $(FIXINCLUDES); no longer needed, and always problematical for
+ binary only installations.
+ * fixincludes: Remove initialization of ${SRCDIR}. Don't
+ explicitly copy over multimedia/audio_errno.h; should be handled
+ by Oct 11, 1993 change.
+ * fixinc.svr4: Remove initialization of ${SRCDIR}.
+ * fixinc.sco, fixinc.dgux: Likewise.
+
+Fri May 20 12:48:24 1994 Jim Wilson (wilson@cygnus.com)
+
+ * stmt.c (expand_exit_loop_if_false): Emit conditional jump around
+ unconditional loop exit instead of conditional loop exit.
+
+ * rs6000.c (output_prolog): Use multiple fputs calls instead of
+ one call with multiple strings.
+
+ * iris4.h (STARTFILE_SPEC, LIB_SPEC): Define.
+
+ * xcoffout.c (MAKE_LINE_SAFE): Delete.
+ (ASM_OUTPUT_LBB, ASM_OUTPUT_LBE): Don't use MAKE_LINE_SAFE.
+
+Fri May 20 01:18:30 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config.sub (basic_machine): Accept cxux*.
+
+Thu May 19 19:12:41 1994 Mike Stump (mrs@cygnus.com)
+
+ * calls.c (expand_call): Only destroy temps here, if -fshort-temps
+ is given.
+
+Thu May 19 19:07:59 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config.sub: Fix unrecognized os error message.
+
+Thu May 19 17:46:55 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (emit_reload_insns): When seeing if an equivalent
+ register can have it's output reload deleted, check for REG_DEAD
+ notes for reload_in instead of calling dead_or_set_p.
+
+Thu May 19 16:38:32 1994 Stephen L Moshier (moshier@world.std.com)
+
+ * emit-rtl.c (operand_subword): Fix arg of REAL_VALUE_TO_TARGET_SINGLE
+ and .._DOUBLE. Permit float subword extraction when host's word
+ width is wider than target's.
+
+Thu May 19 15:09:21 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Make OSF/1 getopt.h fix work on AIX also.
+
+Wed May 18 15:34:10 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * fixincludes: Add forward declaration of struct exception to
+ SunOS 4 math.h.
+
+Wed May 18 12:46:46 1994 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * stor-layout.c (layout_decl): Allow any integral types
+ for bit fields. (Specifically, C++ now has a 'bool' type.)
+
+Wed May 18 16:32:40 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (compare_spill_regs): Fix typo in declaration.
+
+Wed May 18 10:39:00 1994 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * fixinc.svr4: Avoid the SVR4 typedef of bool in curses.h when
+ compiling for C++, since g++ now supports it as an official typename.
+
+Tue May 17 18:06:32 1994 Matthias Pfaller (leo@marco.de)
+
+ * ns32k.md: Don't use the extsd/extd instructions on the ns32532.
+
+Tue May 17 17:44:38 1994 Pat Rankin (rankin@eql.caltech.edu)
+
+ * make-cc1.com (CFLAGS): Separate include file handling; for
+ stage 1, CFLAGS1 is appended to CFLAGS, otherwise CFLAGS2.
+
+Tue May 17 16:35:22 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * convert.c (convert_to_real): Accept boolean values.
+
+ * config/m68k/hp320.h: #define NO_IMPLICIT_EXTERN_C
+
+Tue May 17 15:52:05 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * libgcc2.c (__umoddi3): Correct type of variable `w'.
+
+ * combine.c (simplify_set): Move call to make_field_assignment
+ to end; if SRC or DEST is a (clobber (const_int 0)), return it.
+ (force_to_mode): If X is a CALL, just return it.
+
+ * reload.c (find_reloads): Properly account for cost when
+ constant is forced to memory to ensure same alternative chosen later.
+
+Tue May 17 11:30:19 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * combine.c (simplify_set): Use rtx_equal_p to compare cc_use and its
+ setter.
+ (make_extraction): Don't put a subreg around a register if it is
+ already in the correct mode.
+
+ * reload1.c (compare_spill_regs): New function.
+ (reload_as_needed): Sort the spilled regs.
+ (allocate_reload_reg): If we have group needs and failure would be
+ fatal, do not try to do round-robin allocation of the spill regs.
+
+Mon May 16 18:58:10 1994 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.md (zero_extendqidi2): Fix omission of TARGET_POWERPC64
+ test in previous change.
+
+Mon May 16 14:59:25 1994 Per Bothner (bothner@cygnus.com)
+
+ * dbxout.c (dbxout_type): When emitting an ENUMERAL_TYPE, if
+ the precision is different from the default precision (perhaps
+ because of -fshort-enums), write out the precision.
+
+Mon May 16 17:44:49 1994 Stephen L Moshier (moshier@world.std.com)
+
+ * real.c (ereal_from_int, ereal_to_int, etarsingle): Correct
+ signed/unsigned discrepancies.
+ (ereal_from_double): Avoid "right shift count too big" warning
+ in previous change.
+ * final.c (split_double): Fix arg of REAL_VALUE_TO_TARGET_DOUBLE.
+
+ * real.h (REAL_VALUE_FROM_TARGET_SINGLE, .._DOUBLE): Change
+ arg from long to HOST_WIDE_INT.
+ * real.c (ereal_from_float, .._double): Likewise, and unpack
+ the HOST_WIDE_INTs.
+
+Mon May 16 16:16:32 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * flow.c (try_pre_increment_1): Don't try to create a pre-increment
+ expression if the register dies in the succeeding insn.
+
+ * expr.c: Use #ifdef TARGET_EDOM, not #if.
+
+ * expr.c (convert_move): When {zero,sign}_extending, allow a wider
+ intermediate than to_mode if truncation is a no-op.
+
+Mon May 16 11:49:28 1994 Doug Evans (dje@cygnus.com)
+
+ * m68k/apollo68.h (REGISTER_PREFIX_MD): Delete.
+
+Mon May 16 08:11:57 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.c (rs6000_convert_preincs): Delete.
+ * rs6000.h (FINAL_PRESCAN_INSN): Delete.
+
+ * c-typeck.c (initializer_constant_valid_p): Rework to use
+ precision, not size.
+ Allow conversions from integer to pointer if int is wide enough.
+
+ * c-decl.c (finish_enum): Handle VALUES being an ERROR_MARK.
+
+ * rs6000.md: Replace bogus "andil" opcode with rlinm.
+
+Sat May 14 21:26:05 1994 Doug Evans (dje@cygnus.com)
+
+ * hard-reg-set.h (GO_IF_HARD_REG_EQUAL): Fix typo.
+
+ * jump.c (find_cross_jump): Two CALL_INSNs only compare equal if
+ their CALL_INSN_FUNCTION_USAGEs are the same as well.
+
+ * stupid.c (stupid_life_analysis): Make sure a function result reg
+ is still live if it contains an argument.
+
+Fri May 13 22:17:48 1994 Doug Evans (dje@cygnus.com)
+
+ * reorg.c (mark_referenced_resources): Fix typo.
+
+Fri May 13 18:54:38 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * integrate.c (integrate_decl_tree): Use copy_node to make a copy
+ of the decl. Also call copy_lang_decl to copy the
+ language-specific bits.
+ * tree.h: Declare copy_lang_decl.
+ * c-decl.c (copy_lang_decl): No-op function that will never
+ actually be called.
+
+Fri May 13 15:12:20 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cse.c (cse_insn): Correctly check for two modes being the
+ same number of words.
+
+Fri May 13 05:03:51 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-parse.in (enumlist): Add error alternative.
+
+Thu May 12 23:25:38 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * c-common.c (truthvalue_conversion): If expr is a BIT_AND_EXPR
+ where one of the operands is integer_onep, just return expr.
+
+Thu May 12 20:08:49 1994 Mike Stump (mrs@cygnus.com)
+
+ Fixup lifetime of temporaries.
+
+ * calls.c (expand_call): Only destroy temporaries at the end
+ of function calls, if flag_short_temps is set.
+ * expr.c (safe_from_p, expand_expr): Handle CLEANUP_POINT_EXPRs.
+ * expr.c (expand_expr): Improve handling of temporaries inside
+ COND_EXPRs, cures call to sorry.
+ * expr.c (defer_cleanups_to): New routine to handle the deferral
+ of cleanups.
+ * flags.h (flag_short_temps): New flag, to allow better control
+ over the lifetime of temporaries.
+ * toplev.c (flag_short_temps, lang_options): Ditto.
+ * tree.def (CLEANUP_POINT_EXPR): Add, to allow better control over
+ the lifetime of temporaries.
+
+Thu May 12 19:33:54 1994 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.md (function units): Numerous cycle count change.
+ (zero_extendqidi2, extendqidi2, zero_extendhidi2): New patterns.
+ (extendhidi2, zero_extendsidi2, extendsidi2): Likewise.
+ (zero_extendqisi2, zero_extendqihi2, zero_extendhisi2): Use
+ andil/andi instead of rlinm/rlwinm.
+ (zero_extendqihi2): Add condition register variants.
+ (extendqisi2, extendqihi2): Use extsb for PowerPC.
+ (adddi3, subdi3, negdi2, ashrdi3): Emulate only if !TARGET_POWERPC64.
+ (movdf, movdi, movti): New PowerPC64 versions.
+ (load/store with update): New PowerPC64 patterns.
+
+Thu May 12 18:50:55 1994 Stephen L Moshier (moshier@world.std.com)
+
+ * real.c (m16m): Change first arg to int; all callers changed.
+
+Thu May 12 18:46:26 1994 Bill Cox (bill@cygnus.com)
+
+ * fixincludes: Add definition of DBL_MAX to math.h for Lynx math.h.
+ Correct return type of strlen in Lynx string.h.
+ Delete definition of 'void' as 'int' from Lynx curses.h.
+
+Thu May 12 18:11:33 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload.c (find_reloads): Don't change a secondary reload
+ to RELOAD_FOR_OPERAND_ADDRESS.
+
+ * function.c (assign_parms): Fix typo in previous change.
+
+Thu May 12 15:48:54 1994 Stephen R. van den Berg (berg@pool.informatik.rwth-aachen.de)
+
+ * c-common.c (decl_attributes): Revert to identifiers for
+ mode attributes.
+ * libgcc2.c: Likewise.
+
+Thu May 12 15:41:38 1994 Pat Rankin (rankin@eql.caltech.edu)
+
+ * vax/xm-vms.h (lookup_name_current_level_global): New macro.
+
+Wed May 11 17:44:47 1994 Jim Wilson (wilson@cygnus.com)
+
+ * cse.c (cse_insn): Set src_eqv if the dest is a STRICT_LOW_PART.
+
+ * expmed.c (store_fixed_bit_field): Delete code to handle
+ MODE_FLOAT values here.
+ (store_bit_field): Put it here instead.
+
+Wed May 11 16:18:21 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * a29k.c (a29k_clobbers_to): New function.
+ * a29k.md (clobbers_to): Deleted.
+ (call_internal, call_value_internal): New patterns.
+ (call, call_value): Just call new patterns and a29k_clobbers_to.
+
+ * stor-layout.c (layout_type): Use POINTER_SIZE, instead of width
+ of Pmode, when appropriate.
+
+ * calls.c (emit_call_1): Put new function usage data at end of
+ any data already there.
+ * expr.c (expand_builtin_apply): Likewise.
+
+ * sched.c (sched_analyze_insn): Fix typo in last change.
+
+Wed May 11 14:45:12 1994 Doug Evans (dje@cygnus.com)
+
+ * configure: Fix handing case of no language subdirs.
+
+Wed May 11 12:11:40 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixincludes: Don't recursively search symlinks to `.'.
+
+Tue May 10 17:49:57 1994 Stephen R. van den Berg (berg@pool.informatik.rwth-aachen.de)
+
+ * configure: Include stage4 in the list.
+
+ * gcc.c (process_command): Kludge in stageN/../include instead of
+ include.
+
+Mon May 9 21:04:19 1994 Jim Wilson (wilson@cygnus.com)
+
+ * sparc.h (*TF*_LIBCALL): Delete `*' from libcall name.
+
+Mon May 9 18:42:10 1994 Matthias Pfaller (leo@marco.de)
+
+ * ns32k.c (output_move_dconst): Fix errors on ranges.
+
+Mon May 9 18:33:16 1994 Chris Torek (torek@bsdi.com)
+
+ * gcc.c (delete_if_ordinary): New function.
+ (delete_temp_files, delete_failure_queue): Call it.
+
+Sat May 7 12:12:58 1994 Andreas Neubacher (aneubach@risc.uni-linz.ac.at)
+
+ * i386/seq-sysv3.h (LIB_SPEC): Support -fshared-data.
+ (CPP_SPEC): Set _SEQUENT_ to 1.
+ (SHARED_SECTION_ASM_OP, ASM_OUTPUT_SHARED_COMMON): Supply new macros.
+ (SHARED_BSS_SECTION_ASM_OP, BSS_SECTION_FUNCTION): Likewise.
+
+Sat May 7 10:09:49 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reorg.c (mark_{referenced,set}_resources): Fix typos in last change.
+
+ * reload1.c (emit_reload_insns): Don't try to delete output reload
+ if there isn't one.
+
+ * i386.h (REG_ALLOC_ORDER): New macro.
+
+ * sched.c (sched_analyze_insn, attach_deaths_insn): Look at
+ CALL_INSN_FUNCTION_USAGE.
+
+ * reload1.c (choose_reload_regs): Remove previous change.
+
+Fri May 6 20:32:22 1994 Doug Evans (dje@canuck.cygnus.com)
+
+ * sparc.c (leaf_reg_backmap): Delete.
+ (sparc_flat_compute_frame_size): Renamed from
+ sparc_frw_compute_frame_size. All callers changed.
+ (sparc_flat_save_restore): Likewise.
+ (sparc_flat_output_function_prologue): Likewise.
+ Delete decl of call_used_regs.
+ Delete reference to frame_base_name, use frame pointer explicitly.
+ Print prologue end marker.
+ (sparc_flat_output_function_epilogue): Likewise (renaming).
+ Delete decls of asm_out_data_file, asm_out_file, call_used_regs.
+ Print epilogue start marker.
+ (sparc_flat_epilogue_delay_slots): Likewise (renaming).
+ (sparc_flat_eligible_for_epilogue_delay): Likewise.
+ * sparc.h (TARGET_FRW): Add note saying this option is deprecated.
+ (TARGET_FLAT): Renamed from TARGET_FRW_COMPAT.
+ (TARGET_SWITCHES): Delete references to -mfrw, -mfrw-compat.
+ Add -mflat.
+ (CONDITIONAL_REGISTER_USAGE): If -mflat, fix %i7, rename "%fp"
+ to "%i7", and make %g7 a global_reg.
+ (FRAME_POINTER_REQUIRED): Handle -mflat.
+ (INITIAL_FRAME_POINTER_OFFSET): Likewise.
+ (ARG_POINTER_REGNUM): Explicitly say it's the frame pointer.
+ (LEAF_REGISTERS): Make %g7 not a leaf register.
+ (leaf_reg_backmap): Delete.
+ (LEAF_REG_BACKMAP): Likewise.
+ (FUNCTION_PROLOGUE): Handle -mflat.
+ (FUNCTION_EPILOGUE): Likewise.
+ (DELAY_SLOTS_FOR_EPILOGUE): Likewise.
+ (ELIGIBLE_FOR_EPILOGUE_DELAY): Likewise.
+
+Fri May 6 14:05:00 1994 Stephen R. van den Berg (berg@pool.informatik.rwth-aachen.de)
+
+ * tree.h (TYPE_ATTRIBUTES): New macro.
+ (struct tree_type): attributes, new field.
+ (precision): Move this field up for better alignment.
+ (attribute_list_{equal,contained}): Prototype for new functions.
+ (build_type_attribute_variant): Prototype for new function.
+ * c-parse.in: Rewrite attribute parsing; update the expected
+ conflicts and state numbers.
+ * tree.c (TYPE_HASH): Move definition to top of file.
+ (make_node): Add support for SET_DEFAULT_TYPE_ATTRIBUTES.
+ (build_type_attribute_variant): New function.
+ (type_hash_lookup): Check if the attributes match.
+ (attribute_list_{equal,contained}): New functions.
+ * c-typeck.c (common_type): Add attribute merging.
+ (comp_types): Use COMP_TYPE_ATTRIBUTES macro.
+ * print-tree.c (print_node): Print attributes.
+ * c-common.c (decl_attributes): Move the attribute
+ recognition and rejection here from c-parse.in.
+ (decl_attributes): Use VALID_MACHINE_ATTRIBUTE macro.
+
+ * regclass.c (init_reg_sets_1): Eliminate several permanent
+ call_fixed_regs.
+
+ * rtl.def (CALL_INSN): Define new CALL_INSN_FUNCTION_USAGE field.
+ * rtl.h (CALL_INSN_FUNCTION_USAGE): New macro.
+ (find_reg{,no}_fusage): Prototype for new function.
+ * rtlanal.c (reg_used_between_p): Check usage exprs on CALL_INSNs.
+ (reg_referenced_between_p, reg_set_p, dead_or_set_regno_p): Likewise.
+ (find_reg{,no}_fusage): New functions.
+ * combine.c (try_combine): Restrict combining on CALL_INSNs.
+ (distribute_{notes,links}): Look at CALL_INSN_FUNCTION_USAGE.
+ * cse.c (cse_insn): Invalidate CLOBBERed registers.
+ (count_reg_usage): Count registers in USE rtls on CALL_INSNs.
+ * emit-rtl.c (make_call_insn_raw): New function.
+ (emit_call_insn{,_before}): Use make_call_insn_raw.
+ * calls.c (prepare_call_address, emit_call_1, expand_call): Change
+ from USE and CLOBBER insns to using CALL_INSN_FUNCTION_USAGE.
+ (emit_library_call{,_value}): Likewise.
+ * expr.c (use_regs, expand_builtin_apply): Likewise.
+ * expr.h (use_regs): Likewise.
+ * flow.c (flow_analysis, find_basic_blocks): Likewise.
+ * caller-save.c (insert_save_restore): Likewise.
+ * function.c (fixup_var_refs_insns): Likewise.
+ * jump.c (find_cross_jump, get_label_{before,after}): Likewise.
+ * reload1.c (emit_reload_insns): Likewise.
+ * reorg.c (mark_referenced_resources, mark_set_resources): Likewise.
+ * integrate.c (save_for_inline_copying, expand_inline_function):
+ Copy CALL_INSN_FUNCTION_USAGE field.
+ * reload1.c (choose_reload_regs): Ban filled argument registers.
+ * caller-save.c (save_call_clobbered_regs): CALL_INSN_FUNCTION_USAGE
+ requires a sharper liveliness check.
+ * flow.c (propagate_block): Mark all registers mentioned in USE
+ usage expressions on a CALL_INSN as used.
+ * jump.c (find_cross_jump): If STACK_REGS is defined two
+ CALL_INSNs only compare equal if their USE usage rtls are
+ the same as well.
+ * stupid.c (stupid_life_analysis): Check the usage information
+ on CALL_INSNs.
+
+ * function.c (assign_parms): Spread out the REG_EQUIV notes
+ on CONCATs.
+
+Fri May 6 12:43:10 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload.c (find_reloads): Ignore alternatives that will
+ not be reloadable due to PREFERRED_RELOAD_CLASS.
+
+ * explow.c (allocate_dynamic_stack_space): Just return
+ virtual_stack_dynamic_rtx if asking for zero bytes.
+ Set current_function_calls_alloca here and also record new
+ stack level for nonlocal gotos.
+ * expr.c (expand_builtin, case BUILT_IN_ALLOCA): Don't
+ set current_function_calls_alloca here nor record new
+ stack level for nonlocal gotos.
+ * stmt.c (expand_decl): Likewise.
+
+ * function.c (assign_parms): Use expr_size when appropriate.
+
+ * c-typeck.c (comptypes): An enum type is compatible with type of
+ same signedness as well as precision.
+
+ * alpha.h (CONST_COSTS): Revise all costs.
+ * alpha.md (addsi3, subsi3): Add define_expand to make
+ adddi3/subdi3; old pattern is now anonymous.
+
+ * combine.c (simplify_rtx, case MULT): Don't convert MULT to
+ shift here.
+ (simplify_logical, case IOR): Convert back to PLUS if valid and
+ it will combine with another PLUS.
+ (extract_left_shift): New function.
+ (make_compound_operation, case ASHIFTRT): Simplify by calling it.
+ (force_to_mode): Don't ignore if X is a SUBREG.
+ (force_to_mode, case AND): Try to turn unchecked bits on
+ instead of just off and see which is cheaper.
+
+Fri May 6 11:22:23 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in (libgcc1.a, libgcc2.a): Don't ignore errors in for
+ loops over $(LIB[12]FUNCS_EXTRA).
+
+Fri May 6 06:14:56 1994 Mike Stump (mrs@cygnus.com)
+
+ * expr.c (expand_cleanups_to): Tell expand_expr that we are going
+ to ignore the result of the cleanup.
+
+Thu May 5 17:45:02 1994 Stan Shebs (shebs@andros.cygnus.com)
+
+ * gcc.c (do_spec_1): If -save-temps, always clear the deletion flag.
+
+Thu May 5 13:39:35 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * combine.c (simplify_rtx, case SUBREG): Don't call force_to_mode.
+ (simplify_set): Call force_to_mode here.
+
+ * m68k.md (movhi): Simplify code involving jump-table
+ reference.
+ (load_address): Handle case of jump-table reference; output
+ required label.
+
+Thu May 5 12:28:16 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * cccp.c (main): Include source file name in dependency output.
+
+Wed May 4 18:45:07 1994 Doug Evans (dje@cygnus.com)
+
+ * config.sub: Remove duplicate -freebsd* entry.
+
+Wed May 4 18:03:34 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * cccp.c (special_symbol): Don't copy simple strings, use wchar_type.
+ (main): Setup wchar_type for C++ if needed.
+ (initialize_builtins): Use wchar_type.
+
+Wed May 4 17:19:34 1994 Mike Collison (collison@sw.stratus.com)
+
+ * reload.c (push_secondary_reload): Use TYPE for secondary type
+ if it is RELOAD_FOR_{INPUT,OUTPUT}_ADDRESS.
+
+Wed May 4 16:35:49 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * configure (i386-gnu): New, same as i386-mach.
+
+ * global.c (find_reg): When looking for locally-allocated hard
+ regs to reclaim, use REG_ALLOC_ORDER to find least used.
+
+ * reload1.c (emit_reload_insns): Add another way to delete an
+ output reload.
+
+ * reload1.c (reload, reload_as_needed): Check for use of return
+ register with reg_referenced_p, not reg_mentioned_p.
+
+Wed May 4 14:23:51 1994 Jim Wilson (wilson@cygnus.com)
+
+ * mips.c (override_options): Delete TARGET_LLONG128 references.
+ * mips.h (MASK_LLONG128, TARGET_LLONG128): Delete.
+ (TARGET_SWITCHES): Delete -mlonglong128 option.
+ (LONG_LONG_TYPE_SIZE): Delete TARGET_LLONG128 reference.
+
+ * mips/bsd-4.h, mips/bsd-5.h, mips/news4.h, mips/news5.h,
+ mips/nws3250v4.h, mips/svr3-4.h, mips/svr3-5.h, mips/svr4-4.h,
+ mips/svr4-5.h (CPP_SPEC): Delete.
+ * mips/dec-bsd.h (CPP_SPEC): Define __SIZE_TYPE__,
+ __PTRDIFF_TYPE__, and __mips.
+ (SIZE_TYPE): Delete.
+ * mips/dec-osf1.h (PTRDIFF_TYPE): Delete.
+ (CPP_SPEC): Define, overriding ultrix.h version.
+ * mips/iris5.h (CPP_SPEC): Define __SIZE_TYPE__, __PTRDIFF_TYPE__,
+ and __mips.
+ * mips/osfrose.h (CPP_SPEC): Define __PTRDIFF_TYPE__ and __mips.
+ (PTRDIFF_TYPE): Delete.
+ (SIZE_TYPE): Define.
+ (SET_ASM_OP): Define.
+ * config/mips/ultrix.h (CPP_SPEC): Delete.
+ (SIZE_TYPE): Delete.
+
+Tue May 3 19:04:43 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * Makefile.in (stamp-objlist): Depend on OBJS and BC_OBJS so that
+ subdir makes will know to re-link.
+
+Mon May 2 16:05:05 1994 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * toplev.c (compile_file): If static consts haven't been written
+ out yet, don't do it just because TREE_USED is set (if we're
+ optimizing). (This wins for C++, which uses static consts a lot.)
+
+Mon May 2 16:42:59 1994 Jim Wilson (wilson@cygnus.com)
+
+ * stmt.c (expand_end_case): Make sure gen_casesi operands are
+ valid by passing them through copy_to_mode_reg if necessary.
+ * mips.md (casesi): Delete force_reg calls.
+
+ * ns32k.c (output_move_double): Always use split_double for the
+ CNSTOP case.
+
+ * gcc.c (translate_options): For options that take an argument,
+ don't skip the argument if it doesn't exist.
+
+ * c-decl.c (pushdecl): Use lookup_name_current_level_global instead
+ of lookup_name for extern references. Don't return duplicate decl
+ if it came from the global binding level, and there exists a
+ conflicting decl in an intervening block.
+ (lookup_name_current_level_global); New function.
+ * c-tree.h (lookup_name_current_level_global): Declare.
+
+ * sys-protos.h (read, write): Last parm is size_t not unsigned int.
+
+ * unroll.c (remap_split_bivs): New function.
+ (unroll_loop): When remapping split bivs in the last instruction,
+ handle JUMP_INSNs in addition to INSNs.
+
+Mon May 2 12:53:57 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * config/nextstep.h (INCLUDE_DEFAULTS): Add cxx_aware field.
+ * config/vax/xm-vms.h (INCLUDE_DEFAULTS): Ditto.
+
+Fri Apr 29 18:30:38 1994 Kung Hsu (kung@cygnus.com)
+
+ * tree.h (TYPE_DECL_SUPPRESS_DEBUG): new macro to support
+ suppressing of detail type infos into stabs.
+ * dbxout.c (dbxout_type): check the above flag to generate cross
+ reference in stabs.
+
+Fri Apr 29 01:01:45 1994 Doug Evans (dje@cygnus.com)
+
+ * Makefile.in (stamp-objlist): New target.
+
+Thu Apr 28 22:17:15 1994 Doug Evans (dje@cygnus.com)
+
+ * Makefile.in (USE_ALLOCA): Rearrange "'s.
+ (FLAGS_TO_PASS): Delete CLIB, MALLOC, OBSTACK.
+
+Thu Apr 28 19:04:17 1994 Jim Wilson (wilson@cygnus.com)
+
+ * stmt.c (expand_end_case): Correct test for sign extending
+ unsigned constant index when creating index_expr.
+
+ * cccp.c (macroexpand): Use start_line for line number of the new
+ instack level pushed at the end.
+
+Thu Apr 28 18:59:17 1994 Mike Stump (mrs@cygnus.com)
+
+ * stmt.c: Remove old exception handling support from the backend.
+
+Thu Apr 28 18:59:53 1994 Torbjorn Granlund (tege@adder.cygnus.com)
+
+ * sparc.c (arith_double_operand): Modify to accept all possible constants.
+ * sparc.md (adddi3, subdi3, anddi3, iordi3, xordi3): Corresponding changes.
+ (one_cmpldi3): Don't allow constants for operand 1.
+
+Thu Apr 28 18:10:18 1994 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.md (addsi3): Prefer add without carry instructions and
+ flag input operands as commutative for condition register variant.
+ (subsi3): Define PowerPC patterns using subtract without carry.
+ (numerous): Flag input operands as commutative for condition
+ register variant.
+ (mov* matchers): Use mr instruction in ! TARGET_POWERPC case as
+ well and mr. in condition register variant.
+ * rs6000.c (output_prolog): Use mr, lis, and li instructions.
+ Use subf instruction if TARGET_POWERPC.
+ (output_epilog): Use cal/addi instruction.
+
+Thu Apr 28 12:48:59 1994 Andreas Neubacher (aneubach@risc.uni-linz.ac.at)
+
+ * i386/seq-sysv3.h (SHARED_SECTION_ASM_OP): Defined.
+
+Thu Apr 28 12:40:28 1994 Doug Evans (dje@cygnus.com)
+
+ * expr.c (expand_builtin): Fix typo in previous patch
+ (allow __builtin_next_arg in varargs functions).
+
+Tue Apr 26 16:31:44 1994 Per Bothner (bothner@cygnus.com)
+
+ * tree.h (AGGREGATE_TYPE_P): New macro.
+ * calls.c, expr.c, function.c, stmt.c, varasm.c: Use
+ new macro AGGREGATE_TYPE_P.
+
+Mon Apr 25 18:45:28 1994 John Hassey (hassey@dg-rtp.dg.com)
+
+ * varasm.c (copy_constant, case CONSTRUCTOR): Fix typo; copied list
+ was placed on old CONSTRUCTOR, not new one.
+
+Mon Apr 25 15:04:53 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-decl.c (grokdeclarator): Never warn about `long long' in
+ system header.
+
+ * c-decl.c (finish_decl): Redo last change.
+
+ * Makefile.in (*compare*): Add missing semicolons.
+
+Mon Apr 25 15:02:31 1994 Doug Evans (dje@cygnus.com)
+
+ * configure (m68k-hp-hpux): t-hp320g no longer needed as of gas 2.1.
+ * m68k/t-hp320g: Deleted.
+
+Mon Apr 25 14:23:18 1994 Poul-Henning Kamp (phk@login.dkuug.dk)
+
+ * config.sub, configure: Recognize FreeBSD.
+ * i386/freebsd.h, x-freebsd: New files.
+ * i386/x-freebsd: New file.
+ * i386.h (TARGET_NO_FANCY_MATH_387): New option.
+ * i386.md (TARGET_NO_FANCY_MATH_387): Implement new option.
+ * ginclude/stdarg.h, ginclude/stddef.h, ginclude/varargs.h:
+ Recognize __FreeBSD__.
+ * gcc.c (link_command_spec): Add -Z argument for ZMAGIC's on FreeBSD.
+
+Mon Apr 25 14:08:26 1994 Doug Evans (dje@cygnus.com)
+
+ * configure (language search loop): Correct test for no languages.
+ (CC): Use single quotes to avoid shell expansion of $(CC).
+
+Mon Apr 25 13:10:07 1994 Andreas Stolcke (stolcke@icsi.berkeley.edu)
+
+ * Makefile.in (install-common): Install EXTRA_PARTS with
+ INSTALL_DATA, not INSTALL_PROGRAM.
+
+Mon Apr 25 06:34:00 1994 Stephen L Moshier (moshier@world.std.com)
+
+ * fold-const.c (fold-convert): Use assignment, instead of
+ initializing, aggregate local variable REAL_VALUE_TYPE.
+
+Sun Apr 24 11:17:20 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reorg.c (redirect_with_delay_list_safe_p): Fix off-by-one error.
+
+ * real.c (etoe53, etoe24): Make all occurrences static.
+
+ * emit-rtl.c (try_split): Don't try to recursively split deleted insn.
+
+ * rs6000.md (movti): Adjust constraints to avoid impossible reload.
+
+ * expr.c (expand_expr, case SAVE_EXPR): Fix error in last change.
+
+Sat Apr 23 06:45:50 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reloads_conflict, case RELOAD_FOR_OUTPUT): Fix typo.
+
+Fri Apr 22 18:43:08 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * configure (alpha-dec-osf): Fix typo.
+
+Fri Apr 22 15:02:22 1994 Hallvard B Furuseth (h.b.furuseth@usit.uio.no)
+
+ * gcc.c (handle_braces, check_live_switch): Refine previous change.
+
+Fri Apr 22 03:27:26 1994 Doug Evans (dje@cygnus.com)
+
+ * configure: Sort machines.
+
+ * Language directory reorganization.
+ * configure: Auto-configure each language subdirectory by looking
+ for */config-lang.in.
+ Add language makefile fragments (Make-lang.in) to top level makefile,
+ and hook them in via lang.* targets.
+ Configure each language subdirectory. On hosts that support them,
+ create stage[123] symlinks in each subdirectory.
+ If there is a configure script in the subdirectory, run it.
+ * Makefile.in (LANGUAGES): Remove c++.
+ (SUBDIRS): New variable.
+ (LEX, LEXFLAGS): Ditto.
+ (MAKEOVERRIDES): Ditto.
+ (COMPILERS): Remove cc1plus.
+ (LANG_MAKEFILES, LANG_STAGESTUFF, LANG_DIFF_EXCLUDES, FLAGS_TO_PASS):
+ New variables.
+ (CPLUS_OBJS, CPLUS_TREE_H, C++, c++, g++, g++-cross, cc1plus,
+ cp-*.o, g++.o, gplus.info): Deleted.
+ (STAGESTUFF): Remove g++, g++-cross, cc1plus. Add $(LANG_STAGESTUFF).
+ (Makefile): Depend on $(LANG_MAKEFILES).
+ (####language hooks, ####language fragments): New spots for sed
+ to insert things.
+ (all.cross, all.build, start.encap, rest.encap, info, dvi,
+ install-normal, install-common, install-info, install-man,
+ uninstall, distdir, mostlyclean, clean, distclean, extraclean,
+ realclean, stage1, stage2, stage3, stage4): Depend on lang.foo.
+ (mostlyclean, clean, distclean, extraclean, realclean): Clean as
+ much of the language subdirectories as we can.
+ (install-common): Remove g++ installation.
+ (install-man): Remove g++.1 installation.
+ (uninstall): Remove g++ reference.
+ (TAGS): Remove cp-parse.? reference.
+ (distdir): Ditto.
+ (distdir-start, distdir-finish): New targets.
+ (diff): Remove cp-parse.? reference. Add $(LANG_DIFF_EXCLUDES).
+ (compare, compare3, gnucompare, gnucompare3): Compare language
+ subdirectories too.
+ (stage1-start, stage2-start, stage3-start, stage4-start): New targets.
+ Ensure stage subdirectory exists before processing language
+ dependent part.
+ * cp/Makefile.in: New file, makefile for c++ subdirectory.
+ * cp/Make-lang.in: New file, c++ language makefile fragment.
+ This file provides c++ specific support to the top level makefile via
+ several well defined targets: c++.all.build, c++.all.cross,
+ c++.start.encap, c++.rest.encap, c++.info, c++.dvi,
+ c++.install-normal, c++.install-common, c++.install-info,
+ c++.install-man, c++.uninstall, c++.distdir, c++.mostlyclean,
+ c++.clean, c++.distclean, c++.extraclean, c++.realclean,
+ c++.stage1, c++.stage2, c++.stage3, c++.stage4.
+ * cp/config-lang.in: New file, defines language name and other
+ configuration parameters for the c++ language: compilers, stagestuff,
+ and diff_excludes.
+ * g++.c: Move into cp subdirectory.
+ * g++.1: Ditto.
+ * g++int.texi: Ditto.
+ * cp-*: Ditto, remove "cp-" prefix except for cp-tree.h.
+
+Thu Apr 21 15:47:01 1994 Jim Wilson (wilson@cygnus.com)
+
+ * sparc.c (mem_aligned_8): Don't assume addresses with
+ MEM_IN_STRUCT_P set are 8 byte aligned.
+
+ * iris5.h (CPP_SPEC): Define _LANGUAGE_C for Objective C also.
+
+ * unroll.c (find_splittable_givs): Share dest_reg for multiple
+ address givs within a single instruction.
+ (copy_loop_body): Only update psuedo-reg for shared giv once.
+
+ * sparc.c (sparc_type_code): Don't put more than 30 bits of info
+ into the variable qualifiers.
+
+ * expr.c (store_expr): Don't check the TYPE_MODE of an ERROR_MARK.
+
+Thu Apr 21 15:34:11 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * calls.c (calls_function_1): A language-specific code must
+ be assumed to call a function and also call alloca.
+ Check for inlined functions that call alloca.
+
+ * reload1.c (reload): Clear forbidden_regs earlier.
+ (new_spill_reg): Mention in error message that asm clauses can also
+ cause the compiler to run out of spill regs.
+ (scan_paradoxical_regs): If SMALL_REGISTER_CLASSES, forbid
+ hard regs used in explicit user variables.
+
+ * combine.c (can_combine_p, combinable_i3pat, try_combine): Allow
+ combination involving hard regs if the hard reg is a user variable.
+
+ * gcc.c (default_compilers): If -E and the file is (e.g.) x.s,
+ don't run the assembler; similarly for .i, .ii, .adb, etc.
+
+ * Cleanups related to adding prototypes to many declarations.
+ * rtl.h: If TREE_CODE undefined, make an incomplete union for tree.
+ (STDIO_PROTO): Define here if not already defined.
+ (read_rtx): Use STDIO_PROTO.
+ (output_constant_def, immed_real_const): Use "union tree_node *".
+ (immed_real_const_1): Move declaration to real.h.
+ (rtx_to_tree_code): Supply prototype.
+ * tree.h: If RTX_CODE undefined, make an incomplete struct for rtx.
+ Add some missing declarations of functions in stmt.c.
+ (STDIO_PROTO): Define here if not already defined.
+ * real.h: Add prototypes to declarations of functions in real.c.
+ (immed_real_const_1): Move declaration from rtl.h.
+ * output.h: Add missing declarations of functions in final.c.
+ (STDIO_PROTO): Don't define here.
+ * c-tree.h (STDIO_PROTO): Likewise.
+ * reload.h (PROTO, STDIO_PROTO): Likewise.
+ * bi-opcode.c (main): Don't write overly-long line.
+ * cse.c, emit-rtl.c: Use CONST_DOUBLE_FROM_REAL_VALUE macro for immed
+ real_const_1.
+ * expmed.c: Add prototypes for static functions.
+ * expr.c (bc_expand_expr): Call expand_decl and expand_decl_init,
+ not the bc_ versions.
+ * final.c: Include stdio.h and ctype.h early.
+ Add prototypes for static functions.
+ * function.c: Add prototypes for static functions.
+ (bc_expand_function_end, expand_function_end): Call new
+ expand_fixups instead of old fixup_gotos.
+ * global.c, local-alloc.c: Add prototypes for static functions.
+ * integrate.c: Likewise.
+ Use CONST_DOUBLE_FROM_REAL_VALUE macro for immed_real_const_1.
+ * optabs.c: Likewise.
+ * real.c: Make most functions static and add prototypes for
+ all static functions.
+ (GET_REAL, PUT_REAL): Cast parameter to proper pointer type in
+ some cases; use unsigned array.
+ * stmt.c: Add prototypes for static functions.
+ (expand_fixups): New function.
+ (fixup_gotos): Now static.
+ Don't call bc_fixup_gotos with wrong type (but now probably wrong
+ value).
+ (bc_*): Now static.
+ (expand_exit_loop_if_false): Call bc_expand_goto_internal with
+ proper null pointer.
+ (expand_decl_init): Call bc_expand_decl_init if writing bytecode.
+
+Thu Apr 21 14:21:56 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ Support taking the address of a text segment symbol when using
+ MIPS -membedded-pic.
+ * mips.h (embedded_pic_fnaddr_rtx): Declare.
+ (embedded_pic_offset): Declare.
+ (mips_finalize_pic): Declare.
+ (FINALIZE_PIC): Define.
+ (GO_IF_LEGITIMATE_ADDRESS): When using -membedded-pic, reject
+ combining an embedded PIC text reference with a register.
+ (ENCODE_SECTION_INFO): Under -membedded-pic set SYMBOL_REF_FLAG to
+ 0 for text segment symbols, 1 for data segment symbols.
+ * mips.c (embedded_pic_fnaddr_rtx): New variable.
+ (embedded_pic_offset): New function.
+ (mips_finalize_pic): New function.
+ (mips_select_section): When using -membedded-pic and not using
+ -fwritable-strings, put strings in the text section, not the read
+ only data section.
+ * mips.md (movsi): When using -membedded-pic, add special code
+ when loading a symbol directly to use an offset from the start of
+ the current function.
+ (get_fnaddr): New insn to get address of current function.
+
+Wed Apr 20 19:38:38 1994 Doug Evans (dje@cygnus.com)
+
+ * regclass.c (init_reg_sets_1): Make static.
+ (init_reg_modes): New function.
+ (init_regs): Likewise.
+ * toplev.c (compile_file): Call init_regs after init_rtl.
+ (main): Delete call to init_reg_sets_1.
+
+Wed Apr 20 15:06:35 1994 Steve Chamberlain (sac@cygnus.com)
+
+ * sh.c (REG_ODD): Allow DIs and DFs into odd registers.
+ (print_operand): New command char '@', change nop insn.
+ (synth_constant): Don't allocate temp reg during reload.
+ (expand_block_move): Don't expand if TARGET_SMALLCODE.
+ (prepare_split_double_ops): Deleted.
+ (howshift, multcosts): Work out costs exactly.
+ (dump_table): Emit a label before the align.
+ (hi_const): TARGET_SHORTADDR makes more things HI consts.
+ (machine_dependent_reorg): Look through SUBREGS.
+ (from_compare): Get better code when relational args are loaded
+ into regs now.
+ (expand_acall): Cope with TARGET_BSR.
+ (general_movdst_operand): Don't allow illegal autoincs.
+ (mac_operand): New function.
+ (sh_function_arg, sh_function_partial_nregs): From sh.h
+ * sh.h (PARANOID_BIT, RETR2_BIT, CONSTLEN0_BIT, BSR_BIT,
+ SHORTADDR_BIT, TARGET_PARANOID, TARGET_RETR2, TARGET_CONSTLEN0,
+ TARGET_BSR, TARGET_SHORTADDR, TARGET_SWITCHES): New options.
+ (OVERRIDE_OPTIONS): No function_cse when TARGET_BSR.
+ (FIRST_RET_REG): Depends on TARGET_RETR2.
+ (FUNCTION_ARG, FUNCTION_ARG_PARTIAL_NREGS): Moved to sh.c
+ (HAVE_POST_INCREMENT, HAVE_PRE_DECREMENT): Define.
+ (MODE_DISP_OK_8): Define.
+ (REG_OK_FOR_PRE_POST_P): Allow a pseudoreg.
+ (GO_IF_LEGITIMATE_ADDRESS): Allow DI addressing modes.
+ (MOVE_RATIO): Depends on TARGET_SMALLCODE.
+ * sh.md (interrupt_function): New attr.
+ (define_delay): Account for interrupt functions.
+ (addc): Describe pattern better.
+ (adddi3): Expanded better.
+ (peepholes): Deleted many obsolete patterns.
+
+Wed Apr 20 13:37:58 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * expr.c (expand_expr): Don't force ignore when expanding the
+ subexpression of a WITH_CLEANUP_EXPR. Don't check ignore when
+ deciding whether or not to expand the cleanup for a TARGET_EXPR.
+
+Wed Apr 20 12:20:16 1994 Doug Evans (dje@cygnus.com)
+
+ * h8300/h8300.h (RTX_COSTS): Remove LSHIFT.
+ * h8300/h8300.md (lshrhi3_eight): Fix name.
+ (lshrhi3): Use it.
+ * i860/i860.c (safe_insn_src_p): Remove LSHIFT.
+ (single_insn_src_p): Likewise.
+ * i960/i960.c (i960_expr_alignment): Remove LSHIFT.
+ * sh/sh.c (output_shift, ASHIFTRT case): Do opposite shift as ASHIFT.
+ Delete LSHIFT case.
+ * sh/sh.h (RTX_COSTS): Remove LSHIFT, add LSHIFTRT.
+ * spur/spur.md (lshlsi3): Delete.
+
+Wed Apr 20 06:40:15 1994 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * c-lex.c (check_newline): Avoid unreachable statement when
+ HANDLE_SYSV_PRAGMA defined.
+
+Wed Apr 20 01:52:24 1994 Steve Chamberlain (sac@mole.gnu.ai.mit.edu)
+
+ * flow.c (find_auto_inc, try_pre_increment): Make sure
+ that insertion of autoinc addressing mode would yield a valid
+ instructon.
+
+Tue Apr 19 23:41:14 1994 Doug Evans (dje@cygnus.com)
+
+ * Makefile.in (expr.o): Depend on regs.h.
+ * rtl.h (choose_hard_reg_mode): Declare.
+ * regs.h (reg_raw_mode): Declare.
+ * caller-save.c (choose_hard_reg_mode): Delete from here.
+ * regclass.c (choose_hard_reg_mode): Define here.
+ (reg_raw_mode): Define.
+ (init_reg_sets_1): Initialize reg_raw_mode.
+ * expr.c: #include regs.h.
+ (use_regs): Use reg_raw_mode.
+ * reload1.c (emit_reload_insns): Record additional spill registers
+ in their intrinsic mode.
+ * combine.c (move_deaths): Record death information of remaining
+ registers in their intrinsic mode.
+ * sched.c (attach_deaths): Create partial register dead notes using
+ register's intrinsic mode.
+
+Tue Apr 19 21:40:57 1994 Mike Stump (mrs@cygnus.com)
+
+ * toplev.c (lang_options): Add -fhandle-signatures for C++
+ frontend.
+
+Tue Apr 19 19:00:30 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cccp.c (do_error): Don't terminate.
+
+Tue Apr 19 17:48:41 1994 Hallvard B Furuseth (hbf@durin.uio.no)
+
+ * gcc.c: Add new options -print-file-name= and -print-prog-name=.
+
+ * gcc.c (struct switchstr): New field LIVE_COND.
+ (process_command): Initialize it.
+ (check_live_switch): New function.
+ (handle_braces): Call it.
+
+Mon Apr 18 19:22:25 1994 Lee Iverson (leei@ai.sri.com)
+
+ * mips.h (RTX_COSTS): Remove LSHIFT.
+
+Mon Apr 18 17:56:22 1994 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * c-decl.c (duplicate_decls): Always warn when const declaration
+ follows non-const one for variables.
+
+Mon Apr 18 16:38:30 1994 Stephen R. van den Berg (berg@pool.informatik.rwth-aachen.de)
+
+ * calls.c (prepare_call_address): New arg REG_PARM_SEEN.
+ All callers changed.
+ (expand_call): Pre-load args if small reg classes and reg parms.
+ * expr.h (prepare_call_address): Extend prototype.
+ * expr.c (expand_builtin_apply): Pass new arg to prepare_call_address.
+
+Mon Apr 18 14:53:14 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (const_binop): If arg is NaN, just return it
+ (fold_convert): Handle NaN in real->int and real->real cases.
+
+ * c-lex.c (yylex): If FP value is NaN, use value of zero.
+
+ * expr.h (PROMOTE_MODE): Don't supply default here.
+ (promote_mode): Add declaration.
+ * explow.c (promote_mode): New function.
+ * calls.c (expand_call): Use it.
+ * function.c (assign_parms, promoted_input_arg, expand_function_start):
+ Likewise.
+ * expr.c (expand_expr, case VAR_DECL, SAVE_EXPR): Likewise.
+ * stmt.c (expand_value_return, expand_decl): Likewise.
+
+Mon Apr 18 11:36:04 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * Makefile.in (LIB2FUNCS): Change _op_vec_delete to _op_vec_del.
+ * libgcc2.c: Ditto.
+
+Mon Apr 18 11:19:07 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * reorg.c (redirect_with_delay_list_safe_p): New function,
+ similar to redirect_with_delay_slots_safe_p.
+ (fill_slots_from_thread): Do not redirect a jump if doing
+ so would invalidate the delay list for the jump.
+
+Mon Apr 18 03:09:30 1994 Doug Evans (dje@cygnus.com)
+
+ * scan-types.sh: Fix program's name in error message.
+ Rename dummy.c to avoid collisions in parallel makes.
+
+Sun Apr 17 18:29:00 1994 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.h (PROCESSOR_COMMON, PROCESSOR_POWER, PROCESSOR_POWERPC):
+ New macros.
+ * rs6000.c (processor_target_table): Change "all" to "common".
+ Add "power" and "powerpc" generic processors. Explicitly turn off
+ new mnemonics for all members of the POWER architecture family.
+
+Sun Apr 17 10:04:18 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * tree.h (DECL_PRINT_NAME): Deleted.
+ (struct tree_decl): Field print_name deleted.
+
+Sun Apr 17 06:59:58 1994 Pat Rankin (rankin@eql.caltech.edu)
+
+ * vax.h (RTX_COSTS), vax.c (vax_rtx_cost): Remove LSHIFT case.
+
+Sun Apr 17 01:15:27 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * function.c (locate_and_pad_parm): For ARGS_GROW_DOWNWARD,
+ Round sizetree for both upward and downward padding, nuke
+ the (now unnecessary) call to pad_below for arg_size_ptr.
+
+Sat Apr 16 21:05:40 1994 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.md (one_cmplsi2): Always use nor instruction;
+ remove extraneous minus sign from condition register set constraint.
+
+Sat Apr 16 17:12:40 1994 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k.c (print_operand): 'x' and 'y' mode letters only
+ if SUPPORT_SUN_FPA.
+ (print_operand_address): If (new) ASM_OUTPUT_CASE_FETCH defined,
+ use it to emit the address for the insn before a tablejump.
+ * m68k/mot3300.h (FUNCTION_ARG_PADDING, FUNCTION_PROLOGUE): Deleted.
+ (FUNCTION_EPILOGUE, PRINT_OPERAND, PRINT_OPERAND_ADDRESS): Deleted.
+ (SGS_SWITCH_TABLES, ASM_OUTPUT_CASE_END): Deleted.
+ (ASM_OUTPUT_FLOAT_OPERAND, ASM_OUTPUT_DOUBLE_OPERAND): Deleted.
+ (SGS_NO_LI, ASM_OUTPUT_CASE_FETCH, ASM_RETURN_CASE_JUMP): Defined.
+
+ * configure (header_files): Use ${srcdir} instead of $(srcdir).
+
+Sat Apr 16 16:51:15 1994 DJ Delorie (dj@ctron.com)
+
+ * objc/makefile.dos (OBJC_O): Add encoding.o.
+
+Sat Apr 16 16:38:32 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-lex.c (yylex): Turn off overflow flag when fixing up large
+ traditional hex constants.
+
+ * c-decl.c (finish_decl): If asmspec_tree, clear DECL_BUILT_IN
+ for function and DECL_RTL always.
+
+Wed Apr 13 13:08:10 1994 Per Bothner (bothner@cygnus.com)
+
+ * toplev.c (compile_file): Never warn about unused static consts,
+ since it is reasonable to have those in header files.
+
+Wed Apr 13 12:25:21 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * varasm.c (contains_pointers_p): When examining a RECORD_TYPE,
+ only look at the FIELD_DECLs.
+
+Tue Apr 12 18:14:42 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * Makefile.in (LIB2FUNCS): Add _op_vec_{delete,new}.
+
+ * libgcc2.c (__builtin_vec_{delete,new}): New functions per the
+ latest C++ working paper.
+ (__default_new_handler): No longer static.
+ (__set_new_handler): Lose.
+
+ * cccp.c: Don't implicitly wrap LOCAL_INCLUDE_DIR.
+ (struct default_include): Add cxx_aware field.
+ (include_defaults_array): Ditto.
+ (main): Use cxx_aware field.
+
+Tue Apr 12 16:13:10 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config.sub (next): Fix typo in m68k-next-ns3 alternative.
+
+Tue Apr 12 07:41:17 1994 Michael Meissner (meissner@osf.org)
+
+ * i386/i386.c (notice_update_cc): Remove LSHIFT case, since there
+ is no LSHIFT rtl code any more.
+
+ * halfpic.h (NO_STDIO_H): Do not include stdio.h if this is defined.
+
+Mon Apr 11 17:24:46 1994 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * scan.c (get_token): Correctly increment lineno after
+ encountering #ident (or other #-directive).
+
+Mon Apr 11 13:22:51 1994 Jim Wilson (wilson@cygnus.com)
+
+ * reorg.c (try_merge_delay_insns): Account for resources set/used
+ by a filled insn before trying to simplify insns in delay slots.
+
+ * x-iris, x-iris3, x-mips, x-sony, x-sysv (OLDCC): Change -XNh1500
+ to -XNh2000.
+
+ * c-decl.c (finish_decl): Don't preserve initializer if it is
+ error_mark_node.
+
+ * reorg.c (try_merge_delay_insns): Move next_trial update
+ immediately after the try_split call.
+
+ * mips.c (mips_select_rtx_section, mips_select_section): New
+ functions. Prefer rdata when TARGET_EMBEDDED_DATA, and prefer
+ sdata otherwise.
+ * mips.h (MASK_EMBEDDED_DATA, TARGET_EMBEDDED_DATA): New macros.
+ (TARGET_SWITCHED): Add new option -membedded-data.
+ (SELECT_RTX_SECTION, SELECT_SECTION): Call function in mips.c.
+
+ * Makefile.in (all.cross, rest.encap): Delete objc-runtime and
+ SYSCALLS.c.X.
+ (OBJC, OBJECTIVE-C): Add objc-runtime.
+ (proto): Add SYSCALLS.c.X.
+ (libgcc2.ready, libobjc.a, sublibobjc.a, SYSCALLS.c.X): Add
+ dependence on stmp-int-hdrs.
+
+ * cccp.c (rescan): Don't look for C++ // comment before directive.
+ Handle \-newline inside a C++ // comment.
+ (skip_if_group): Likewise.
+ (handle_directive): Also handle C++ // comment after #. Point
+ ip->bufp after the comment start before calling
+ skip_to_end_of_comment.
+ (validate_else): Handle \-newline inside a C++ // comment.
+ (skip_to_end_of_comment, macarg1, discard_comments): Likewise.
+
+ * varasm.c (immed_double_const): Sign-extend constants when they
+ have the most significant bit set for the target.
+
+Mon Apr 11 06:20:56 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload): When accumulating needs, use nested
+ structures to simplify and speed up the code.
+
+ * alpha.md (compare define_split): Fix bugs in last addition.
+
+ * calls.c (expand_call, emit_library_call{,_value}, store_one_arg):
+ Use convert_modes instead of convert_to_mode.
+
+ * tree.h (frame_size): Now a union.
+ (DECL_ALIGN, DECL_FRAME_SIZE, DECL_FUNCTION_CODE): Access proper
+ field of frame_size union.
+ (DECL_SET_FUNCTION_CODE): Simplified; retained for compatibility.
+ * c-decl.c (duplicate_decls, pushdecl, builtin_function):
+ Use DECL_FUNCTION_CODE instead of DECL_SET_FUNCTION_CODE.
+
+Mon Apr 11 05:50:26 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
+
+ * mips-tfile.c (update_headers): Do not copy stStatic symbols that
+ result from internal labels.
+
+Sun Apr 10 07:13:24 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rtl.def (LSHIFT): Deleted.
+ * combine.c, cse.c, function.c: No longer handle LSHIFT.
+ * genattrtab.c, loop.c, reload1.c: Likewise.
+ * expr.h (lshl_optab): Deleted.
+ * optabs.c (lshl_optab): Deleted.
+ (expand_binop, init_optabs): No longer reference it.
+ * genopinit.c, expmed.c (expand_shift): Likewise.
+
+ * arm.c, arm.h, arm.md: Remove references to LSHIFT and lshlsi3.
+ * clipper.h, clipper.md, convex.h, convex.md, elxsi.md: Likewise.
+ * fx80.h, fx80.md, gmicro.md, i370.md: Likewise.
+ * m68k.c, m68k.h, m68k.md, m88k.c, m88k.md, ns32k.md: Likewise.
+ * rs6000.md, tahoe.md: Likewise.
+
+ * combine.c (simplify_shift_count, case EQ): LSHIFT should be
+ LSHIFTRT.
+
+Sun Apr 10 04:48:37 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa-ghiux.h (LIB_SPEC): Remove last change until we've got the
+ go ahead from HP to distribute /usr/lib/end.o.
+ * pa-ghpux.h, pa-hiux.h, pa-ghiux.h: Likewise.
+
+Sat Apr 9 15:06:22 1994 Christian Kranz (kranz@sent5.uni-duisburg.de)
+
+ * config.sub: Add ns* as operating systems; default to ns2 for NeXT.
+ * configure (m68k-next-ns2*): New configuration.
+ * libgcc2.c: Include <mach.h>, not <mach/mach.h> for NeXTStep 2.1.
+ * config/nextstep21.h, m68k/next21.h: New files.
+
+Sat Apr 9 10:56:06 1994 Randy Wright (rwright@convex.com)
+
+ * combine.c (force_to_mode, case ROTATE): Don't assume
+ simplify_binary_operation always returns CONST_INT.
+ (simplify_shift_const, case IOR, PLUS): Likewise.
+
+Sat Apr 9 09:13:10 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
+
+ * i386/sequent.h (STRUCT_VALUE{,_INCOMING,_REGNUM}):
+ Redefine for calling conventions of native cc.
+
+Sat Apr 9 08:25:43 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * rs6000.h (FINAL_PRESCAN_INSN): Define.
+ * rs6000.c (rs6000_convert_preincs): New function.
+
+ * i386.md (mulhi3): Use SImode for MULT RTL.
+
+ * fold-const.c (fold): Avoid exponential work when simplifying
+ conditional expressions; don't recurse twice if ARG1 is constant.
+
+ * function.c (unitialized_vars_warning, setjmp_args_warning):
+ Reword warning to be less ambiguous.
+
+ * c-typeck.c (convert_arguments): Truncate and reextend
+ for PROMOTE_PROTOTYPES so we can give error on overflow.
+
+ * reload1.c (reload_conflicts): Rewrite to clean up and fix
+ numerous bugs; move to later in file.
+
+ * c-decl.c (duplicate_decls): Put new type in same obstack as
+ old ones, or permanent if old ones in different obstacks.
+
+Fri Apr 8 18:18:18 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * fold-const.c (fold, case GT_EXPR): Simplify X < (1 << Y)
+ into X >> Y == 0.
+
+Fri Apr 8 11:23:51 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ Add support for -membedded-pic to MIPS backend, to create
+ genuinely position independent code without using a global offset
+ table. Requires GNU as and ld.
+ * mips.h (MASK_EMBEDDED_PIC): Define.
+ (TARGET_EMBEDDED_PIC): Define.
+ (TARGET_SWITCHES): Add embedded-pic and no-embedded-pic.
+ (ASM_SPEC): Pass -membedded-pic to assembler.
+ (ASM_OUTPUT_ADDR_DIFF_ELT): If TARGET_EMBEDDED_PIC output a
+ difference, rather than using .gpword.
+ (ASM_OUTPUT_CASE_LABEL): Define.
+ * mips.md (casesi, casesi_internal): New instructions, used only
+ for TARGET_EMBEDDED_PIC.
+ * mips.c (override_options): For TARGET_EMBEDDED_PIC warn
+ if -mabicalls or -G were used, and set flag_pic and
+ mips_section_threshold.
+ (print_operand): Handle 'S' by printing a label with a leading LS.
+
+Thu Apr 7 22:20:09 1994 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
+
+ * calls.c (emit_library_call_value): Move is_const set after ifdef.
+
+Wed Apr 6 21:34:17 1994 Pat Rankin (rankin@eql.caltech.edu)
+
+ * expr.c (expand_builtin, case BUILT_IN_NEXT_ARG): Test whether
+ an argunment has been passed to __builtin_next_arg; warn if not.
+
+Wed Apr 6 17:28:44 1994 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * toplev.c (lang_options): Add -f[no-]vtable-thunks (for C++).
+
+Wed Apr 6 15:35:42 1994 Jim Wilson (wilson@cygnus.com)
+
+ * cccp.c (discard_comments): Replace comments with a single space.
+
+ * Makefile.in (USER_H): Add $(srcdir)/ before every ginclude use.
+
+ * calls.c (emit_library_call_value): New variable is_const. Clear
+ it for functions that return an aggregate in memory.
+
+ * configure (header_files): Prepend $(srcdir)/ginclude/ to each
+ element before substituting into the Makefile. Delete ginclude/
+ at each point where we set header_files.
+
+ * c-decl.c (finish_decl): Correct typo in use of tree_int_cst_sgn.
+
+Wed Apr 6 07:39:47 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.md: Add define_split to simplify "(unsigned) x > 0xffffff".
+
+ * toplev.c (lang_options): Group and alphabetize some options.
+
+Wed Apr 6 07:03:13 1994 Stephen R. van den Berg (berg@pool.informatik.rwth-aachen.de)
+
+ * function.c (push_function_context): Use current_function_varargs.
+ (pop_function_context): Likewise.
+ (assign_parms): Respect current_function_varargs.
+ Save args_so_far in any case.
+ * expr.c (expand_builtin): Allow builtin_next_arg for varargs
+ functions as well.
+ * function.h (struct function): New field for current_function_varargs.
+ * integrate.c (function_cannot_inline_p): Use current_function_varargs.
+ * va-alpha.h, va-m88k.h, va-sparc.h (va_dcl): Add ... to
+ set current_function_varargs.
+
+ * c-decl.c (warn_missing_declarations): New variable.
+ (c_decode_option): -Wmissing-declarations.
+ (start_function): Actually do the checking.
+ * toplev.c (lang_options): Add -Wmissing-declarations.
+
+ * function.c (expand_function_start): Delay copying static chain.
+
+ * calls.c (emit_library_call): Move the invocation of
+ prepare_call_address before the assignments of the function arguments.
+ (emit_library_call_value): Likewise.
+
+ * i386.h (DEBUG_PRINT_REG): Fix printing of coprocessor regs in QImode.
+
+Wed Apr 6 06:42:50 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
+
+ * mips-tfile.c (update_headers): Copy stStatic symbols from the old
+ local symbol table to the new local symbol table if they did not get
+ added via debugging psuedo ops.
+
+Wed Apr 6 06:36:05 1994 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * stdarg.h, varargs.h (__va_rounded_size): Round to multiple
+ of sizeof (short) on sysV68.
+
+ * m68k.c (output_function_prologue): pea/move: Fix typos.
+ asm_fprintf("add%.[wl] ...): Undo previous change.
+
+Tue Apr 5 20:05:10 1994 Doug Evans (dje@cygnus.com)
+
+ * gcc.c (process_command): Add "include" prefix for [foo/]stageN.
+
+Tue Apr 5 01:22:08 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa-ghiux.h (LIB_SPEC): Link in /usr/lib/end.o
+ * pa-ghpux.h, pa-hiux.h, pa-hpux.h (LIB_SPEC): Likewise.
+
+Mon Apr 4 17:36:55 1994 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
+
+ * final.c (final_scan_insn): Pass new arg, block num, to
+ sdbout_end_block.
+ * sdbout.c (sdbout_begin_block): Don't output block for function
+ level scope unless MIPS_DEBUGGING_INFO is defined.
+ (sdbout_end_block): Likewise. Add new parameter n for the block
+ number.
+
+ * calls.c (expand_call): If PCC_STATIC_STRUCT_RETURN defined, mark
+ function as addressable same time as we clear is_integrable.
+
+Mon Apr 4 17:11:17 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * Makefile.in (xsys-protos.h): Undefine __*_TYPE when
+ preprocessing fixtmp.c.
+ * fixincludes: Fix ptrdiff_t and wchar_t in system headers like we
+ do size_t.
+ * scan-types.sh: Use __WCHAR_TYPE__, __PTRDIFF_TYPE__, and
+ __SIZE_TYPE__. Still deduce size_t so that it can be used for
+ ssize_t if necessary.
+ * stddef.h (wchar_t): Always define as __WCHAR_TYPE__.
+ * cccp.c (special_symbol, case T_WCHAR_TYPE): Output "__wchar_t"
+ for C++.
+
+Sat Apr 2 08:14:02 1994 Michael Meissner (meissner@osf.org)
+
+ * i386/osfrose.h (FUNCTION_PROLOGUE, FUNCTION_PROFILER): Correct
+ code for -fpic ELF case.
+
+Fri Apr 1 17:33:35 1994 Jason Merrill (jason@deneb.cygnus.com)
+
+ * fixproto: Add strncpy, strpbrk, strrchr, strspn, strstr, strtok
+ and strxfrm to the required list for string.h.
+
+Fri Apr 1 01:05:53 1994 Jim Wilson (wilson@cygnus.com)
+
+ * configure: Change math-68881.h to ginclude/math-68881.h.
+ (EXTRA_HEADERS): Use | not / in sed command.
+ * math-68881.h, math-3300.h: Move to ginclude directory.
+
+ * libgcc2.c: Modify all uses of __attribute__ mode to use new
+ syntax.
+
+ * Makefile.in (USER_H): Files in ginclude now. Add stdarg.h,
+ stddef.h, varargs.h.
+ (all.cross, rest.encap): Move LIBGCC after stmp-headers. Add
+ objc-runtime, and SYSCALLS.c.X.
+ (for-bootstrap): Delete.
+ (OBJC, OBJECTIVE-C): Delete objc-runtime.
+ (proto): Delete SYSCALLS.c.X.
+ (*.o): Delete gvarargs.h dependencies.
+ (stmp-int-hdrs): Delete gvarargs.h, gstdarg.h, gstddef.h deps, and
+ code to copy them.
+
+ * bc-emit.c: Change <gvarargs.h> to <varargs.h>.
+ * enquire.c, libgcc2.c, sys-types.h: Change "gstddef.h" to <stddef.h>.
+ * gcc.c: Change "gstdarg.h" to <stdarg.h> and "gvarargs.h" to
+ <varargs.h>.
+ * objc/Object.m: Change "gstdarg.h" to <stdarg.h>.
+ * objc/runtime.h, scan-types.sh: Change "gstddef.h" to <stddef.h>.
+ Change "gstdarg.h" to <stdarg.h>.
+ * objc/hash.h, objc/objc.h, objc/sarry.h: Delete use of IN_GCC to
+ control stddef.h/gstddef.h include.
+ * cccp.c (pcfinclude): Modify comment referring to gstddef.h.
+ * sparc/sparc.h (CPP_PREDEFINES): Update GCC_NEW_VARARGS comment.
+ * i386/x-next, m68k/x-next (libgcc2.a, stdarg.h): Delete rules.
+ * fixincludes: Modify comment referring to gvarargs.h.
+ * cp/Makefile.in: Modify comments that refer to gvarargs.h and
+ gstddef.h.
+
+ * gstdarg.h, gstddef.h, gvarargs.h: Move to ginclude directory
+ and strip off initial `g'.
+ * va-*.h, proto.h: Move to ginclude directory.
+
+Thu Mar 31 19:49:17 1994 Jim Wilson (wilson@cygnus.com)
+
+ * sparc.h (SPARC_STACK_ALIGN): Use ~7 not 0xfffffff8 for portability.
+
+ * xcoffout.h (DBX_OUTPUT_MAIN_SOURCE_FILENAME): Disable.
+
+ * sol2.h: Delete ifdefed out section defining *_SECTION_ASM_OP
+ macros.
+ ({CTORS,DTORS}_SECTION_ASM_OP) Delete definitions.
+ * sysv4.h (INIT_SECTION_ASM_OP): Don't set the alloc flag.
+ ({CTORS,DTORS}_SECTION_ASM_OP): Set execinstr flag.
+
+ * dbxout.c (dbxout_type): Re-enable debugging output for anonymous
+ structures. Change all three places that refer to xrefs to use
+ exactly the same condition.
+
+ * c-typeck.c (pop_init_level): Correct typo in use of
+ tree_int_cst_sgn.
+
+ * mips.c (mips_rtx_classify, md_register_operand,
+ fpsw_register_operand, cmp2_op, uns_cmp_op, fcmp_op): Delete.
+ (mips_const_double_ok, mips_fill_delay_slot, output_block_move,
+ print_operand, function_epilogue): Don't treat gas differently
+ than native assembler.
+ (equality_op, cmp_op): Delete use of classify_op.
+ (override_options): Delete uses of mips_rtx_classify.
+ (final_prescan_insn): Simplify based on other changes.
+ * mips.h (mips_rtx_classify, cmp2_op, fcmp_op,
+ fpsw_register_operand, md_register_operand, uns_cmp_op,
+ classify_op, additive_op, divmod_op, unsigned_op, CLASS_*_OP,
+ NOTICE_UPDATE_CC): Delete.
+ (RTX_COSTS): Use different numbers for R3000/R6000/R4000.
+ (REGISTER_MOVE_COST): Use cost of 2 within same register class, 4
+ for FP to GR copy, 6 otherwise.
+ (ADJUST_COST): Give anti and output dependencies zero cost.
+ (PREDICATE_CODES): Delete obsolete functions from list.
+ * mips.md (addsi3_internal): Don't output subtract.
+ (subsi3_internal): Don't output add.
+ (smulsi3_highpart, umulsi3_highpart): Add missing third operand to
+ mips_move_1word call.
+
+Thu Mar 31 12:09:42 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * longlong.h: Change RS/6000 macros to use PowerPC mnemonics when
+ using -mnew-mnemonics.
+
+Wed Mar 30 17:37:16 1994 Frederic Pierresteguy (F.Pierresteguy@frcl.bull.fr)
+
+ * m68k/dpx2.h (NO_ASM_FMOVECR): Defined.
+ * m68k.c (standard_68881_constant_p): Return 0 if NO_ASM_FMOVECR
+ defined.
+
+ * configure: Add case for rs6000-bull-bosx.
+
+Wed Mar 30 17:31:24 1994 Matthias Pfaller (leo@marco.de)
+
+ * ns32k.c (global_symbolic_reference_mentioned_p): New parameter F.
+ (print_operand_address): When generating pic baseregisters are
+ only allowed if offset is CONST_INT. For {SYMBOL,LABEL}_REF
+ a indexregister has to be used instead. (sb) is no longer
+ emitted for constant absolute addresses.
+ (output_move_double): Use CONSTANT_P instead of CONSTANT_ADDRESS_P.
+ * ns32k.h (FUNCTION_PROLOGUE): use __GLOBAL_OFFSET_TABLE_,
+ not _GLOBAL_OFFSET_TABLE_.
+ (LEGITIMATE_CONSTANT_P, LEGITIMATE_PIC_OPERAND_P): Use
+ LEGITIMATE_PIC_OPERAND_P, not LEGITIMATE_CONSTANT_P,
+ to set current_function_uses_pic_offset_table.
+ (INDIRECTABLE_1_ADDRESS_P): Baseregisters are not legal
+ for {LABEL,SYMBOL}_REFS when emitting pic.
+ (GO_IF_INDEXABLE_ADDRESS): INDIRECTABLE_1_ADDRESSes are indexable too.
+ * ns32k/netbsd.h, ns32k/xm-netbsd.h: New files.
+ * configure (ns32k-pc532-netbsd*): New case, to use new files.
+
+Wed Mar 30 16:39:24 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload): Fix typo in previous change.
+
+ * gcc.c (process_command, case 'B'): If name is "stageN/",
+ add "include" to system include prefix.
+
+ * bc-emit.c, calls.c, combine.c, emit-rtl.c, final.c, g++.c:
+ Include <stdarg.h> instead of "gstdarg.h"; similarly for varargs.
+ * genattrtab.c, mips-tfile.c, protoize.c, toplev.c, tree.c: Likewise.
+
+ * fold-const.c (strip_compound_expr): New function.
+ (fold): Call it; avoid exponential work when simplifying
+ binary op over a COND_EXPR.
+
+ * cse.c (cse_insn): Add missing definition of var TEM; clean up
+ shadowed uses.
+
+ * sparc.c (sparc_type_code): Revise so it supports non-C types.
+
+Wed Mar 30 14:52:26 1994 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
+
+ * xm-alpha.h (string.h): Don't include when inhibit_libc is defined.
+
+Wed Mar 30 10:37:51 1994 Stan Coxs (coxs@dg-rtp.dg.com)
+
+ * m88k.md (movdf): Do not consider extended registers when doing
+ define_split.
+
+Wed Mar 30 01:49:06 1994 Torbjorn Granlund (tege@cygnus.com)
+
+ * config/m68k/m68k.c (output_move_double): Use `%.' where appropriate.
+
+Tue Mar 29 10:46:18 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (ASM_OUTPUT_LABEL): TARGET_GAS no longer needs trailing colons.
+ (ASM_OUTPUT_INTERNAL_LABEL, ASM_OUTPUT_COMMON): Likewise.
+
+ * pa.h (TARGET_PORTABLE_RUNTIME): Define.
+ (TARGET_SWITCHES): Add -mportable-runtime and -mno-portable-runtime.
+ (CUMULATIVE_ARGS): Now a "struct hppa_args" rathern than an int.
+ All references changed.
+ (INIT_CUMULATIVE_ARGS): Also initialize nargs_prototype.
+ (INIT_CUMULATIVE_INCOMING_ARGS): Define.
+ (FUNCTION_ARG_ADVANCE): Decrement nargs_prototype for each arg seen.
+ (FUNCTION_ARG): Handle TARGET_PORTABLE_RUNTIME.
+ (ASM_DECLARE_FUNCTION_NAME): Explicitly disallow argument relocations
+ for TARGET_PORTABLE_RUNTIME.
+ (ASM_OUTPUT_INT): Do not use a P% prefix for function references
+ if TARGET_PORTABLE_RUNTIME.
+
+ * pa.md (high and lo_sum for function addresses): Provide alternate
+ definitions for TARGET_PORTABLE_RUNTIME.
+
+ * pa.c (output_arg_descriptor): Explicitly disallow argument
+ relocations for TARGET_PORTABLE_RUNTIME.
+
+Tue Mar 29 07:45:44 1994 Chris Smith (csmith@convex.com)
+
+ * convex.h (check_float_value): fix return type in extern.
+
+Mon Mar 28 18:36:56 1994 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k/mot3300.h (ASM_IDENTIFY_GCC): Define to be non-null.
+
+Sun Mar 27 20:26:36 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * c-parse.in (attrib): Handle string args as expressions,
+ merging the two rules. `mode' attribute now takes a string arg.
+ Delete the rule for an identifier as arg.
+ * c-common.c (decl_attributes): `mode' attribute now takes string arg.
+
+Sun Mar 27 14:42:39 1994 Doug Evans (dje@cygnus.com)
+
+ * c-parse.in (attrib): Back out last patch.
+
+Fri Mar 25 17:52:44 1994 Walter Misar (misar@rbg.informatik.th-darmstadt.de)
+
+ * m68k.md (movsi): New strategy for moving small constants into dregs,
+ if it can't be done with moveq.
+ * m68k.h (CONST_COSTS): Reflect the change in m68k.md.
+
+Fri Mar 25 14:30:47 1994 Philippe De Muyter (phdm@info.ucl.ac.be)
+
+ * m68k.md (call): If (new) MOTOROLA_BSR defined, try to emit 'bsr'.
+ * m68k/mot3300.h (MOTOROLA_BSR): Defined.
+
+ * m68k.c (output_function_prologue): Use link.w on 68040;
+ emit pea fp + movl sp,fp instead of linkw 0 for 68040.
+
+Fri Mar 25 14:21:06 1994 Jim Meyering (meyering@idefix.comco.com)
+
+ * bc-emit.c (bc_emit_bytecode): Remove decl of unused variable NPUSHES.
+ (bc_emit_instruction): Remove decl of unused variable LITERAL.
+ * c-aux-info.c (gen_decl): Remove decl of unused variable.
+ * c-common.c (truthvalue_conversion): Remove decl of unused CODE.
+ * c-decl.c (push_parm_decl): Move decl of unused variable OLDDECL
+ into #if 0 block.
+ (finish_enum): Remove decls of unused variables I and TEMPORARY.
+ * c-parse.in (primary): Remove decl of unused variable CONTEXT.
+ * c-typeck.c (convert_arguments): Remove decls of unused variables.
+ * collect2.c (putenv): Remove decl of unused variable STR_LEN.
+ (main): Remove decls of unused variables LEN and CLEN.
+ * combine.c (try_combine): Remove decls of unused variables.
+ (subst): Remove decls of unused variables ORIG_CODE.
+ (simplify_if_then_else): Remove decl of unused variable C2.
+ (make_compound_operation): Remove decl of unused variable COUNT.
+ (known_cond): Remove decl of unused variable NEW.
+ (make_field_assignment): Remove decl of unused variable OURDEST.
+ (simplify_and_const_int): Remove decls of unused variables.
+ (simplify_shift_const): Remove decl of unused variable INNER.
+ * cse.c (cse_insn): Remove decl of unused variable TEM.
+ * dbxout.c (dbxout_symbol): Remove decls of unused variables.
+ * emit-rtl.c (reset_used_flags): Remove decl of unused variable.
+ (gen_sequence): Remove decl of unused variable NEWVEC.
+ * enquire.c (f_rep): Remove decl of unused variable F1.
+ * final.c (output_source_line): Remove decl of unused variable.
+ * fix-header.c (read_scan_file): Remove decl of unused variable RPTR.
+ (write_rbrac): Remove decl of unused variable PARTIAL.
+ (main): Likewise.
+ * g++.c (main): Remove decl of unused variable FN.
+ * genattr.c (main): Remove decl of unused variable MAX_ISSUE_TIME.
+ * genattrtab.c (expand_units): Remove decl of unused variable.
+ * genrecog.c (break_out_subroutines): Remove decl of unused variable.
+ * global.c (global_conflicts): Move decl of unused variable I into
+ #if 0 block.
+ * integrate.c (save_for_inline_nocopy): Remove decls of unused vars.
+ (expand_inline_function): Remove two block-scope decls of unused
+ variable COPY.
+ * jump.c (invert_jump): Remove decl of unused variable OLABEL.
+ * loop.c (init_loop): Remove decls of unused variables.
+ (loop_optimize): Remove decl of unused variable END.
+ (combine_movables): Remove decls of unused variables.
+ (check_final_value): Remove decl of unused variable TEM.
+ (check_dbra_loop): Remove decls of unused variables.
+ (maybe_eliminate_biv): Remove decls of unused variables SET and V.
+ * reload.c (find_reloads_address): Remove two block-scope decls of
+ unused variable OLDREF.
+ * rtl.c (read_rtx): Remove decl of unused variable STRINGBUFSIZE.
+ * scan.c (get_token): Remove decl of unused variable QUOTE.
+ (get_token): Remove unused label AGAIN.
+ * sched.c (clear_units): Remove decl of unused variable UNIT.
+ (actual_hazard_this_instance): Remove decl of unused variable I.
+ (actual_hazard): Remove two block-scope decls of unused variable BEST.
+ (sched_analyze_1): Remove decls of unused variables OFFSET and BIT.
+ (sched_analyze): Remove decl of unused variable DEST.
+ (sched_note_set): Remove decl of unused variable J.
+ (create_reg_dead_note): Remove decl of unused variable BACKLINK.
+ (new_sometimes_live): Remove decl of unused variable I.
+ (schedule_block): Remove decls of unused variables LAST_NOTE and REGNO.
+ (schedule_insns): Remove decls of unused variables I and INSNS.
+ * sdbout.c (sdbout_symbol): Remove decl of unused variable LETTER.
+ (sdbout_type): Remove decl of unused variable TEM.
+ * toplev.c (compile_file): Remove unused label.
+ * tree.c (stabilize_reference_1): Remove decl of unused variable.
+ * unroll.c (unroll_loop): Remove decl of unused variable V.
+ (precondition_loop_p): Remove decls of unused variables.
+ (final_giv_value): Remove decl of unused variable CODE.
+
+Fri Mar 25 13:40:05 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (DBX_REGISTER_NUMBER): Fix numerous bugs in handling
+ of FP registers and the SAR register.
+
+Fri Mar 25 12:46:56 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * i386.md (movhi, movqi): Properly recognize unsigned forms of -1
+ for dec[bw] insns.
+
+ * expr.c (expand_expr, case ADDR_EXPR): Return const0_rtx if
+ taking address of an ERROR_MARK; also do some minor cleanup.
+
+ * calls.c (expand_call): Don't require both -W and -Winline to say
+ that call can't be inlined.
+ Warn if inlining is tried but fails.
+
+ * cccp.c (for_lint): Variable renamed from `lint'.
+
+ * expr.c (expand_expr, case ABS_EXPR): Compare with 0 of proper mode.
+
+ * fold-const.c (fold, case *_DIV_EXPR): Correct result when
+ product of constants overflows.
+
+ * alpha.c (output_prolog): Correctly compute floating-reg save
+ area offset.
+
+ * stmt.c (init_stmt_for_function): Clear stack_block_stack.
+
+ * reload1.c (reload): Fix error in last change; only check
+ against group reloads and check all reloads.
+
+Thu Mar 24 13:19:43 1994 Doug Evans (dje@cygnus.com)
+
+ * toplev.c (v_pedwarn_with_decl): Don't cause compilation to fail
+ from pedantic errors in system header files.
+
+Thu Mar 24 03:01:05 1994 Frederic Pierresteguy (F.Pierresteguy@frcl.bull.fr)
+
+ * config.sub: Add case for Bull dpx20.
+
+ * config/m68k/dpx2.h (CPP_PREDEFINES): Fix typo.
+
+Wed Mar 23 17:29:56 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * reload1.c (reload): Fix error in last change; compute MODE before
+ it's used.
+
+ * loop.c (get_condition): Exit if we don't recognize SET_SRC of
+ a SET that modifies OP0.
+
+ * combine.c (simplify_rtx, case FLOAT_TRUNCATE): Simplify
+ case of (float_truncate (abs (float_extend X))).
+
+Wed Mar 23 17:20:54 1994 Jim Wilson (wilson@cygnus.com)
+
+ * dbxout.c (dbxout_parms): For parameter living in psuedo-reg that
+ was optimized away, use declared type instead of passed type.
+
+ * mips.c (mips_asm_file_start): Add comment on TARGET_GP_OPT code.
+
+ * c-decl.c (init_decl_processing): Change builtin_next_arg type so
+ that it accepts any parameter instead of none.
+ * cp/decl.c (init_decl_processing): Likewise.
+ * expr.c (expand_builtin, BUILT_IN_NEXT_ARG case): Verify that
+ parameter is last named argument.
+ * gstdarg.h (va_start): Pass LASTARG as a parameter to
+ builtin_next_arg.
+ * va-h8300.h, va-i860.h, va-i960.h, va-mips.h, va-sparc.h
+ (va_start): Likewise.
+ * va-alpha.h (va_start): Add call to builtin_next_arg.
+ * va-clipper.h, va-m88k.h, va-pa.h, va-sparc.h (va_start):
+ Likewise.
+
+Tue Mar 22 18:57:54 1994 Jim Wilson (wilson@cygnus.com)
+
+ * iris5.h (MIPS_DEFAULT_GVALUE): Define to zero.
+ * mips.c (pic_address_needs_scratch): New function.
+ (override_options): Set flag_pic when TARGET_ABICALLS.
+ * mips.h (GO_IF_LEGITIMATE_ADDRESS): Also pretend that we have REG
+ plus CONST_INT addresses by deleting an else.
+ (CONSTANT_ADDRESS_P): When pic, don't accept addresses which are
+ symbol_ref plus a large integer.
+ (LEGITIMATE_PIC_OPERAND_P): Likewise.
+ (LEGITIMIZE_ADDRESS): When pic, convert addresses which are
+ symbol_reg plus a large integer, to reg plus a large integer.
+ (ASM_OUTPUT_ADDR_DIFF_ELT): Use .gpword instead of subtracting
+ labels.
+ * mips.md (movsi): Add special handling for constants which are
+ illegal addresses when pic.
+ (tablejump_internal1, tablejump_internal2): Emit .cpadd when
+ TARGET_ABICALLS. Adjust length to include .cpadd.
+
+ * mips.h (TRAMPOLINE_TEMPLATE): Add `move $25,$3' for when
+ TARGET_ABICALLS. Delete padding for 64 bit case. Adjust offsets.
+ (TRAMPOLINE_SIZE): Increase from 9 to 10 words for 32 bit case.
+ (INITIALIZE_TRAMPOLINE): Increase offsets by 4 bytes for 32 bit case.
+
+Tue Mar 22 15:46:42 1994 Michael Meissner (meissner@osf.org)
+
+ * i386/osfrose.h (HANDLE_PRAGMA_WEAK): Define in terms of
+ TARGET_ELF.
+ (ASM_OUTPUT_DEF): Provide a definition.
+
+Mon Mar 21 15:56:58 1994 Per Bothner (bothner@cygnus.com)
+
+ * fix-header.c: Make sstring buf extern (rather than "common").
+
+Mon Mar 21 17:45:56 1994 Doug Evans (dje@cygnus.com)
+
+ * configure: Accept and ignore --without-*.
+
+Mon Mar 21 17:05:25 1994 Jim Wilson (wilson@cygnus.com)
+
+ * dbxout.c (source_label_number): New variable.
+ (dbxout_source_file): Use it. Output an Ltext label.
+
+ * c-decl.c (duplicate_decls): When pedantic, warn when any static
+ declaraction follows a non-static.
+
+ * sparc.md (seq, sne, sgt, slt, sge, sle): Add support
+ for !TARGET_HARD_QUAD.
+
+Mon Mar 21 16:59:02 1994 Mike Collison (collison@chianti.sw.stratus.com)
+
+ * reload1.c (reload): More accurately compute nongroup needs.
+ (reloads_conflict): New function.
+
+Mon Mar 21 16:21:07 1994 Doug Evans (dje@cygnus.com)
+
+ * libgcc2.c (__builtin_saveregs): Fix return type.
+
+Mon Mar 21 07:37:13 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (preserve_temp_slots): If argument is REG, see if it
+ is address of a temp slot we know about.
+ * expr.c (expand_expr, case ADDR_EXPR): Update temp slot address
+ if we put it in a register; mark result as pointer.
+
+ * cse.c (FIXED_REGNO_P): Treate global regs as fixed.
+ (CHEAP_REGNO): Renamed from CHEAP_REG.
+ (CHEAP_REG): New macro; user var in hard reg is cheap.
+ (COST): Pass RTL to CHEAP_REG, not regno.
+ (rtx_cost, case REG): Likewise.
+
+Sun Mar 20 19:38:44 1994 Stephen L Moshier (moshier@world.std.com)
+
+ * m68k/news.h (PRINT_OPERAND): Print float infinity
+ and NaN's as +/-99e999.
+
+Sun Mar 20 17:42:09 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
+
+ * mips-tfile.c (update_headers): Align symbol table sections,
+ using ALIGN_SYMTABLE_OFFSET. Provide a default definition which
+ does no alignment.
+ * alpha.h (ALIGN_SYMTABLE_OFFSET): New macro.
+
+Sun Mar 20 06:38:41 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * emit_rtl.c (try_split): Rename third parameter as LAST.
+ Recursively call try_split for each new insn created.
+
+ * combine.c (mark_used_regs_combine): Correct typo.
+
+Sun Mar 20 06:28:23 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * vax.h (CHECK_FLOAT_VALUE): Add missing continuation character.
+ * tree.c (build_real): Add `overflow' var; pass to CHECK_FLOAT_VALUE.
+
+Sat Mar 19 17:44:14 1994 Jim Wilson (wilson@cygnus.com)
+
+ * expr.c (expand_expr, case ABS_EXPR): Fix typo in last change.
+
+Sat Mar 19 17:13:47 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * combine.c (newpat_used_regs): New variable.
+ (mark_used_regs_combine): New function.
+ (try_combine): Use them.
+ (reg_dead_at_p): Registers marked in newpat_used_regs must always be
+ considered to be live.
+
+Sat Mar 19 06:29:38 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * c-parse.in (attrib): Use `identifier' instead of `IDENTIFIER'
+ since names that are (e.g.) typedef names are still OK.
+
+ * m68k/next.h (GO_IF_INDEXABLE_BASE): Make compatible with m68k.h.
+
+ * genoutput.c (output_epilogue, insn_names): Write correct names
+ for patterns before first named pattern.
+
+ * nextstep.h (SELECT_SECTION): Fix typo (arg names) in last change.
+
+ * c-decl.c (grokdeclarator): Use signed version of `sizetype' for
+ type of array index.
+
+Sat Mar 19 06:25:39 1994 Stephen L Moshier (moshier@world.std.com)
+
+ * fold-const.c (const_binop): Avoid initialized aggregate
+ local variables, for antique compilers.
+
+Fri Mar 18 18:43:28 1994 Jim Wilson (wilson@cygnus.com)
+
+ * i386/osfrose.h (SELECT_SECTION): Variables go in readonly data
+ only if the initializer is constant.
+ * i386/svr3gas.h, m88k/m88k.h, mips/mips.h, nexstep.h,
+ rs6000/rs6000.h, sparc/sparc.h, svr3.h, svr4.h, vax/vms.h
+ (SELECT_SECTION): Likewise.
+ * varasm.c (assemble_variable): Likewise.
+
+Fri Mar 18 17:54:12 1994 David Edelsohn (edelsohn@npac.syr.edu)
+
+ * rs6000.md (divmodsi4, udivsi3, divsi3, udivmodsi4): Add AIX
+ common-mode cases.
+ (mulh_call, mull_call, divss_call, divus_call, quoss_call, quous_call):
+ AIX common-mode call patterns.
+ (ashlsi3): More TARGET_POWERPC to ! TARGET_POWER changes.
+ (addsf3, subsf3, mulsf3, divsf3, etc.): Change TARGET_POWER
+ to ! TARGET_POWERPC.
+ (fix_truncdfsi2): Use POWER/2 and PowerPC FP convert instruction.
+ (fpcvtsi): New pattern.
+ (mulsidi3): Add AIX common-mode case, add imul attribute to POWER
+ pattern, add PowerPC pattern, flag input operands as commutative.
+ (smulsi3_highpart): Add AIX common-mode case.
+ (movsi matcher): Add mtjmpr attribute to ! TARGET_POWER case.
+ (movsf): Clean up load from memory or integer register test.
+ (movdi matcher): Add FP register support.
+
+ * rs6000.c (common_mode_defined): New variable.
+ (output_prolog): Define external common-mode calls.
+
+ * rs6000.h (HARD_REGNO_MODE_OK): Allow DImode in FP registers.
+ (CONDITIONAL_REGISTER_USAGE): Delete ppcas mention from comment.
+ (RTX_COSTS): Costs based upon processor_type enum.
+
+Fri Mar 18 17:53:35 1994 Torbjorn Granlund (tege@cygnus.com)
+
+ * rs6000.md (smulsi3_highpart): New patterns.
+ (umulsi3_highpart_power): New pattern.
+
+Fri Mar 18 15:26:56 1994 Jim Wilson (wilson@cygnus.com)
+
+ * sol2.h (SELECT_RTX_SECTION): Delete.
+ * sysv4.h (SELECT_RTX_SECTION): Add.
+ (ASM_SPEC): Pass -K to assembler when PIC.
+
+ * cccp.c (before_system, last_before_system): New variables.
+ (main): Handle -isystem option. Insert -isystem directories in
+ search chain at first_system_include.
+ * gcc.c (include_prefix): New variable.
+ (process_command): Add path/include to include_prefix when see a
+ -Bpath option.
+ (do_spec_1, case 'I'): Pass include_prefix directories to cpp with
+ the -isystem option.
+
+ * loop.c (scan_loop): New variable loop_depth. Increment and
+ decrement on LOOP_BEG and LOOP_END notes. Only use LOOP_VTOP note
+ if loop_depth is zero.
+ (strength_reduce): Likewise.
+
+ * sparc/sparc.h (FIXUNS_TRUNCTFSI2_LIBCALL): Define.
+ * optabs.c (init_optabs): Use FIXUNS_TRUNCTFSI2_LIBCALL macro.
+
+Thu Mar 17 13:13:46 1994 Per Bothner (bothner@kalessin.cygnus.com)
+
+ * stor-layout.c (layout_type, case BOOLEAN_TYPE):
+ Set TREE_UNSIGNED unless TYPE_MIN_VALUE is negative.
+
+Thu Mar 17 18:36:34 1994 Jim Wilson (wilson@cygnus.com)
+
+ * c-common.c (shorten_compare): When simplify compare against
+ zero, check for restype_ptr unsigned instead of primop0 unsigned.
+
+ * calls.c (expand_call): Undo Feb 27 change. Set nregs to -1 for
+ normal case.
+
+Thu Mar 17 17:43:28 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixinc.svr4: Define BYTE_ORDER in <sys/byteorder.h> as on
+ UnixWare 1.1.
+
+Thu Mar 17 06:02:24 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * stor-layout.c (layout_type, case INTEGER_TYPE): Properly test for
+ nonnegative lower bound.
+
+Wed Mar 16 12:41:19 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * tree.c (build_nt, build_parse_node): Don't declare last
+ parameter to be register, since it is used in VA_START, which
+ may take its address.
+ * genattrtab.c (attr_printf): Likewise.
+
+Wed Mar 16 12:00:40 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+
+ * pa.h (INITIALIZE_TRAMPOLINE): Do not mask off high
+ bits of address passed to icacheflush.
+
+ * pa.h (WCHAR_TYPE): Use "unsigned int" by default.
+ (WCHAR_TYPE_SIZE): Change appropriately.
+ * pa-ghiux.h, pa-ghpux.h, pa-gux7.h, pa-hiux.h, pa-hpux.h,
+ pa-hpux7.h (WCHAR_TYPE): Delete definition.
+ (WCHAR_TYPE_SIZE): Likewise.
+ * pa-osf.h (WCHAR_TYPE): Override appropriately for OSF1.
+ (WCHAR_TYPE_SIZE): Likewise.
+
+ * pa.md (DImode lo_sum): Add earlyclobber for alternative one.
+
+ * pa.h (ASM_OUTPUT_ADDR_DIFF_ELT): Rewrite to match
+ ASM_OUTPUT_ADDR_VEC_ELT which is PIC-safe.
+
+Wed Mar 16 09:07:34 1994 Matthias Pfaller (leo@marco.de)
+
+ * ns32k.c (global_symbolic_reference_mentioned_p): Recurse only
+ if GET_CODE (op) == CONST.
+
+ * ns32k.h (FUNCTION_PROLOGUE): Load sb through r0 if TARGET_REGPARM
+ is false.
+
+Wed Mar 16 06:57:45 1994 Richard Kenner (kenner@vlsi1.ultra.nyu)
+
+ * emit-rtl.c (gen_lowpart_common, gen_highpart, operand_subword):
+ Test input against RTX for FP, AP, and SP, not same register number.
+
+ * expr.c (expand_expr): Update comments and fix formatting.
+ (expand_expr, case VAR_DECL, STRING_CST, CONSTRUCTOR): If
+ flag_force_addr, put address in register unless REG.
+ (expand_expr, case CONSTRUCTOR, CONVERT_EXPR): Make TARGET with
+ TMODE, if specified.
+ (expand_expr, case IN_EXPR): Clean up. Allow INDEX to be an
+ unsigned type. Always evaluate SET and INDEX in case of side effects.
+ (expand_expr, case CONVERT_EXPR): Use convert_modes to handle consts.
+ (expand_expr, case ABS_EXPR): Simplify processing of COMPLEX.
+ Compare with zero word-by-word if required.
+ (expand_expr, case ABS_EXPR, MIN_EXPR, COND_EXPR): Don't use TARGET
+ if not MODE.
+ (expand_expr, case TRUTH_*_EXPR): Modes of input and output must agree.
+ (expand_expr, case CONJ_EXPR): Remove redundant def of MODE.
+
+ * stor-layout.c (layout_record): If the place where we were going
+ to put a field changed, lay it out again.
+
+Tue Mar 15 07:53:36 1994 Paul A Vixie (paul@vix.com)
+
+ * Makefile.in (stmp-fixproto): Add missing "-" in front of "if".
+ (install-headers-tar, gcc.xtar): Use "-" in front of tar options.
+
+Mon Mar 14 16:28:16 1994 Paul Eggert (eggert@twinsun.com)
+
+ * fixincludes: Insert newlines just before the end of 'sed'
+ command strings if the last 'sed' command is 'a' or 'i';
+ BSDI 1.1 'sed' needs this.
+
+Mon Mar 14 15:46:29 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * fixinc.svr4: Don't name variables in mmap prototype.
+
+Mon Mar 14 15:16:38 1994 Doug Evans (dje@cygnus.com)
+
+ * objc/Makefile (*.o): Add explicit dependencies for Sun's VPATH.
+
+Mon Mar 14 05:11:42 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * function.c (assign_parms, expand_function_start): Properly
+ set MEM_IN_STRUCT_P for DECL_RTL of function result.
+
+ * c-decl.c (grokdeclarator): Convert to sizetype when manipulating
+ size of array and use care to avoid mixed-type operations.
+
+ * expr.c (expand_expr): Don't call bc_expand_expr
+ if EXPAND_INITIALIZER.
+ * bc-optab.c (bc_expand_{binary,unary}_operation): Add missing
+ args to call to expand_expr.
+ * stmt.c (bc_expand_start_cond): Set exit_label if not EXITFLAG.
+ (bc_expand_end_bindings): Only define exit_label if set.
+ Don't pop nesting_stack.
+ * varasm.c (output_constant_def): Do hashing and make label
+ even if bytecode.
+ * bc-emit.c (bc_seg_write): Don't make unaligned reference to
+ seg->data.
+ * toplev.c (compile_file): Call bc_write_file here and pass
+ asm_out_file, not stdout.
+ (main): Don't call bc_write_file here.
+ Fix wording on error if -fbytecode specified on unsupported target.
+
+ * fold-const.c (fold, associate): If -ffast-math, associate FP mults.
+ (fold, case RDIV_EXPR): Split case; ignore division by 1.
+ If -ffast-math, convert to multply by reciprocal.
+ (fold, case *_DIV_EXPR): Simplify A/C1/C2.
+
+ * tree.h (tree_int_cst_sgn): New declaration.
+ * tree.c (tree_int_cst_sgn): New function.
+ * c-decl.c (finish_{decl,struct,enum}): Call it.
+ * c-typeck.c (build_binary_op, pop_init_level): Likewise.
+ (output_pending_init_elements): Likewise.
+ * expr.c (expand_builtin, case BUILT_IN_RETURN_ADDRESS): Likewise.
+ * fold-const.c (fold): Likewise.
+ (fold, case *_DIV_EXPR): Add missing conversion.
+ * convert.c (convert_to_integer): Convert integer_one_node to
+ proper type before tree_int_cst_lt call.
+
+Sun Mar 13 06:46:13 1994 Wolfgang Stukenbrock (wgstuken@immd4.informatik.uni-erlangen.de)
+
+ * gcc.c (do_spec_1): Don't duplicate a macro starting with '__'.
+
+Sun Mar 13 05:54:00 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * convert.c (convert_to_integer): When changing type of truthvalue
+ operation, change types of inputs too.
+ * c-common.c (TRUTH_*_EXPR): Convert to integer_type_node.
+
+ * tree.c: Include setjmp.h.
+ (build_real_from_int_cst): Propagate overflow flags and
+ establish float handler.
+ (build_complex): Propagate overflow flags.
+ * cse.c (simplify_binary_operation): Protect real_value_truncate
+ inside handler.
+ * fold-const.c (force_fit_value): Operate on REAL_CST as well.
+ (real_value_truncate): Don't use its own handler.
+ (const_binop): Set overflow on FP error and call force_fit_type.
+ (fold_convert): Likewise.
+ * c-common.c (constant_expression_warning, overflow_warning):
+ Handle REAL_CST and COMPLEX_CST.
+ * convex.h, convex.c, fx80.h, tahoe.h, vax.h, vax.c: Add OVERFLOW
+ operand to CHECK_FLOAT_VALUE.
+
+ * jump.c (rtx_equal_for_thread_p): Correct error in previous
+ change; add missing arg in recursive call.
+
+Sat Mar 12 19:42:03 1994 H.J. Lu (hjl@nynexst.com)
+
+ * configure (gxx-include-dir): Replacement for gxx-prefix.
+ * Makefile.in (gxx_include_dir): Likewise, for gxx_prefix.
+
+ * i386/linux.h (NO_IMPLICIT_EXTERN_C): Defined.
+
+Sat Mar 12 07:42:12 1994 Paul Eggert (eggert@twinsun.com)
+
+ * Makefile.in (stmp-fixproto): Work around a `make' bug in BSDI 1.1.
+
+Sat Mar 12 07:38:08 1994 Klaus Kaempf (kkaempf@didymus.rmi.de)
+
+ * bi-run.h: Properly test BYTES_BIG_ENDIAN.
+ * bytecode.h: Likewise for WORDS_BIG_ENDIAN.
+
+ * cccp.c (do_include, hack-vms_include_specification): Change handling
+ of '#include filename' to be compatible with VAX-C.
+
+ * genemit.c (gen_exp): Added \n to printf to shorten line for VAX-C.
+
+Sat Mar 12 06:42:38 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * expr.h (emit_float_lib_cmp): Add declaration here.
+ * optabs.c: Don't define emit_float_lib_cmp now that no longer static.
+
+ * jump.c: Add prototypes for static functions.
+ (jump_optimize, delete_insn): Use GET_RTX_CLASS to test for insns.
+ (mark_jump_label): Delete dead code.
+ (delete_computation, redirect_tablejump): No longer static.
+
+Fri Mar 11 14:40:40 1994 Jim Wilson (wilson@cygnus.com)
+
+ * lite.h (TARGET_DEFAULT): Use parentheses.
+ * sparc.h (TARGET_HARD_QUAD): New macro.
+ (TARGET_SWITCHES): Add hard-quad-float, soft-quad-float.
+ (TARGET_DEFAULT): Use parentheses.
+ ({ADDTF3,SUBTF3,MULTF3,DIVTF3,SQRTTF2,FLOATSITF2,FIX_TRUNCTFSI2,
+ EXTENDSFTF2,TRUNCTFSF2,EXTENDDFTF2,TRUNCTFDF2,EQTF2,NETF2,GTTF2,
+ GETF2,LTTF2,LETF2}_LIBCALL): New macros.
+ * sparc.md (sleu+4, sleu+7, extendsftf2, extenddftf2, trunctfsf2,
+ trunctfdf2, floatsitf2, fix_trunctfsi2, addtf3, subtf3, multf3,
+ divtf3, sqrttf2): Disable when -msoft-quad-float.
+ (beq, bne, bgt, blt, bge, ble): When -msoft-quad-float, account
+ for return value of SPARC ABI routines that differs from libgcc.
+ * flow.c (libcall_dead_p): Fail not abort for libcall that returns
+ value via invisible pointer.
+ * optabs.c (emit_float_lib_cmp): Make non static.
+ (init_optabs): Use {ADDTF3,SUBTF3,MULTF3,DIVTF3,SQRTTF2,FLOATSITF2,
+ FIX_TRUNCTFSI2,EXTENDSFTF2,TRUNCTFSF2,EXTENDDFTF2,TRUNCTFDF2,EQTF2,
+ NETF2,GTTF2,GETF2,LTTF2,LETF2}_LIBCALL macros.
+
+ * sparc/sparc.h (STARTING_FRAME_OFFSET): Depend on
+ LONG_DOUBLE_TYPE_SIZE.
+
+Fri Mar 11 08:01:54 1994 Stephen R. van den Berg (berg@pool.informatik.rwth-aachen.de)
+
+ * rtl.h, tree.h, g++.c, gcc.c (PVPROTO): New macro.
+ * combine.c, expr.h, rtl.h, tree.h, gcc.c: Use it for varargs protos..
+ * genattrtab.c, mips-tfile.c, output.h, toplev.c: Likewise.
+
+Fri Mar 11 07:21:36 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * emit-rtl.c (copy_rtx_if_shared, case LABEL_REF): Can't share.
+ * jump.c (jump_optimize): Delete REG_LABEL note if label no
+ longer in insn.
+
+ * c-decl.c (finish_decl): When preserving an initializer, ensure
+ its type is on a good obstack.
+
+Thu Mar 10 15:32:42 1994 Mike Collison (collison@sw.stratus.com)
+
+ * reload1.c (emit_reload_insns): When clearing reg_last_reload_reg,
+ clear all hard regs in reload_out.
+
+Thu Mar 10 15:23:10 1994 Hallvard B Furuseth (hbf@durin.uio.no)
+
+ * collect2.c (dup2): Catch `dup' failure. Return correct value.
+
+Thu Mar 10 15:18:08 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * gcc.c ([__MSDOS__]): Use #ifdef, not #if.
+ * collect2.c ([__MSDOS__]): Likewise.
+
+Thu Mar 10 15:03:01 1994 Paul Eggert (eggert@twinsun.com)
+
+ * cccp.c (main, finclude, check_precompiled): When safe_read
+ returns a partial buffer, this means EOF has been reached;
+ don't try to read any more.
+
+Wed Mar 9 18:47:29 1994 Paul Eggert (eggert@twinsun.com)
+
+ * real.c (target_negative): -0 counts as negative.
+
+Wed Mar 9 15:32:01 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * m68k.md (movqi): Disable special-case of stack push if operand
+ one is an address register.
+
+ * c-typeck.c (pointer_int_sum): Multiplication should be
+ done signed.
+ (pointer_diff): Likewise the division.
+ * fold-const.c (fold, case MULT_EXPR): Simplify MULT_EXPR of an
+ EXACT_DIV_EXPR with the same divisor as our multiplicand.
+
+ * jump.c (rtx_equal_for_thread_p): Commutative operations
+ are identical if the operands match in the opposite order.
+ * sched.c (rtx_equal_for_memref_p): Likewise.
+
+Wed Mar 9 12:07:29 1994 Richard Earnshaw (rwe11@cl.cam.ac.uk)
+
+ * cse.c (simplify_relational_operation): Fix typos; use
+ ARG_POINTER_REGNUM and FRAME_POINTER_REGNUM in condtionals.
+
+Tue Mar 8 16:12:07 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * explow.c (break_out_memory_refs): Don't call mark_reg_pointer
+ here.
+ (memory_address): Call it here if X changed and is now a REG
+ or REG + CONST_INT.
+
+Tue Mar 8 15:57:29 1994 Jim Wilson (wilson@cygnus.com)
+
+ * c-decl.c (finish_decl): When saving/discarding initializers,
+ don't check TREE_PERMANENT and TREE_STATIC.
+ (finish_decl, finish_function): Pass new argument to
+ permanent_allocation.
+ * cp/decl.c (finish_function): Likewise.
+ * cp/decl2.c (write_vtable_entries, finish_file): Likewise.
+ * toplev.c (compile_file): Likewise.
+ * function.h (struct function): Add momentary_function_firstobj
+ field.
+ * tree.c (momentary_function_firstobj): New variable.
+ (init_obstack): Set it.
+ (save_tree_status): Save it and set it.
+ (restore_tree_status): Use it and restore it.
+ (permanent_allocation): New parameter function_end. Clear
+ momentary_obstack to momentary_function_firstobj if true.
+ (preserve_initializer): Set base field of every momentary
+ level on the momentary stack to new momentary_firstobj.
+ (pop_momentary): Only free back to previous base.
+ * tree.h (permanent_allocation): Add prototype.
+
+Mon Mar 7 20:10:56 1994 Jim Wilson (wilson@cygnus.com)
+
+ * iris4gl.h: Rewrite. Include iris4loser.h not iris4-gdb.h.
+ Define PREFERRED_DEBUGGING_TYPE not ASM_SPEC.
+
+ * bsd-4.h (LINK_SPEC): Do not depend on gas. Don't interpret -EB
+ and -EL options, but do pass them.
+ * bsd-5.h (LINK_SPEC): Likewise.
+ * decl-osf1.h (LINK_SPEC): Likewise.
+ * iris5.h (LINK_SPEC): Likewise.
+ * mips-5.h (LINK_SPEC): Likewise.
+ * mips.h (LINK_SPEC): Likewise.
+ * svr3-4.h (LINK_SPEC): Likewise.
+ * svr3-5.h (LINK_SPEC): Likewise.
+ * svr4-4.h (LINK_SPEC): Likewise.
+ * svr4-5.h (LINK_SPEC): Likewise.
+
+ * dec-bsd.h (LINK_SPEC): Pass all normal linker options to gld.
+ (ASM_SPEC): Pass all normal assembler options to gas.
+ * osfrose.h (LINK_SPEC): Likewise.
+ (ASM_SPEC): Likewise.
+
+ * mips.h (ASM_SPEC): Make definition depend on whether or
+ not the default assembler is gas. Pass all normal assembler
+ options to gas.
+ * iris4loser.h (ASM_SPEC): Likewise. Pass -O0 if the assembler is
+ not gas.
+
+ * iris3.h (ASM_SPEC, LINK_SPEC): Delete.
+ * news4.h (ASM_SPEC, LINK_SPEC): Delete.
+ * news5.h (LINK_SPEC): Delete.
+ * nws3250v4.h (ASM_SPEC, LINK_SPEC): Delete.
+ * ultrix.h (ASM_SPEC, LINK_SPEC): Delete.
+
+ * mips.h (ASM_FINAL_SPEC): Cross compiling does not presume gas.
+
+ * osfrose.h (SIZE_TYPE): Delete.
+ (MAX_WCHAR_TYPE_SIZE): Define.
+
+ * calls.c (expand_call): For pcc_struct_value case, set
+ MEM_IN_STRUCT_P correctly on target.
+
+ * Makefile.in (mostlyclean): Don't explicitly delete ld.
+
+Mon Mar 7 20:06:38 1994 Ian Lance Taylor (ian@cygnus.com)
+
+ * mips-tdump.c (print_symbol): The index field of a global symbol
+ is the symbol table index of the corresponding local symbol, not
+ an index into the aux table.
+ (print_file_desc): Print out size of line number information
+ rather than repeating line number count. The cbLineOffset field
+ of a PDR is relative to the cbLineOffset field of the FDR. Also,
+ when computing line_end of the last PDR, use cbLineOffset, not
+ ilineBase.
+
+Mon Mar 7 17:42:35 1994 H.J. Lu (hjl@nynexst.com)
+
+ * Makefile.in (gxx_prefix): New; default to $(libdir).
+ (GPLUSPLUS_INCLUDE_DIR): Change to $(gxx_prefix)/g++-include.
+ * configure (gxx_prefix): New; default to $(libdir).
+
+ * i386/linux.h (GPLUSPLUS_INCLUDE_DIR): Deleted.
+ (STARTFILE_SPEC): Remove "-nojump".
+
+Mon Mar 7 17:06:08 1994 Stephen R. van den Berg (berg@pool.informatik.rwth-aachen.de)
+
+ * i386/xm-linux.h (malloc): Remove disabled code.
+
+Mon Mar 7 13:27:09 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * cccp.c (no_record_file): New variable.
+ (main): Set it for -imacros and -include files.
+ (do_endif): Don't call record_control_macro for -include or -imacros
+ files or files included from -imacros.
+
+Sun Mar 6 21:48:51 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * config.sub: Accept freebsd as OS.
+
+Sun Mar 6 14:40:00 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * stupid.c: Add prototypes for static functions.
+ (last_{jump,label}_suid): Deleted; all uses deleted.
+ (reg_crosses_blocks): Likewise.
+ (stupid_life_analysis): Only allocate MAX_SUID entries
+ of after_insn_hard_regs.
+ Use GET_RTX_CLASS when possible.
+ Initialize all of reg_renumber.
+ Use reg_alternate_class when reg not available in preferred class.
+ (stupid_find_reg): Delete argument CROSSES_BLOCKS.
+
+ * stupid.c (stupid_mark_refs): If setting reg_where_dead, set
+ regs_live so we don't later clobber it.
+
+ * recog.c (constrain_operands): Properly handle '#' in constraint.
+
+ * combine.c (subst): Split into five functions.
+ (simplify_{rtx,if_then_else,set,logical}): New functions.
+
+Sun Mar 6 13:12:48 1994 James Van Artsdalen (james at bigtex.cactus.org)
+
+ * reg-stack.c (find_blocks): Undo previous change to block
+ delineation algorithm.
+ (reg_to_stack): Make algorithm identical to that in find_blocks.
+
+Sat Mar 5 16:27:58 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * genattrtab.c (attr_printf): Remove `register' from decl of FMT.
+ * tree.c (build_nt, build_parse_node): Remove `register' from decl
+ of CODE.
+
+ * reload.c (get_secondary_mem): Call SECONDARY_MEMORY_NEEDED_MODE
+ if it is defined.
+ * alpha.h (SECONDARY_MEMORY_NEEDED_MODE): New macro.
+ * alpha.c (output_{pro,epi}log): Round var size to quadword boundary.
+
+ * alpha.md (unaligned_{load,store}hi): Clear low bit of
+ address before using as operand to extwl, mskwl, and inswl.
+ (movhi, reload_inhi, reload_outhi): Pass extra scratch value.
+
+Fri Mar 4 17:16:23 1994 Leonard Norrgard (vinsci@nic.funet.fi)
+
+ * c-lex.c: Delete gperf-generated source from here.
+ * c-gperf.h: New file; contains just gperf output.
+ * Makefile.in (c-gperf.h): New rule.
+ (c-lex.o): Depends on c-gperf.h.
+ (realclean): Delete c-gperf.h.
+ (distdir): Build c-gperf.h.
+ (diff): Omit differences in c-gperf.h.
+
+Fri Mar 4 06:35:26 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * svr4.h, m88k.h (ASM_FINISH_DECLARE_OBJECT): Set
+ size_directive_output to 1.
+
+ * reload1.c (emit_reload_insns): Don't call gen_input_reload if
+ src and dest are identical.
+
+Thu Mar 3 15:32:55 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+
+ * alpha.md (mskXl): Add missing NOT in patterns.
+
+ * t-m88k: Remove added realclean rule.
+
+See ChangeLog.8 for earlier changes.
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 251d45bb928..80ee04a3856 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -1,5 +1,5 @@
# Makefile for GNU C compiler.
-# Copyright (C) 1987, 88, 90-96, 1997 Free Software Foundation, Inc.
+# Copyright (C) 1987, 88, 90-97, 1998 Free Software Foundation, Inc.
#This file is part of GNU CC.
@@ -73,6 +73,7 @@ LEX = flex
LEXFLAGS =
AR = ar
AR_FLAGS = rc
+LN = @symbolic_link@
DLLTOOL = dlltool
SHELL = /bin/sh
# on sysV, define this as cp.
@@ -126,6 +127,7 @@ USER_H = $(srcdir)/ginclude/stdarg.h $(srcdir)/ginclude/stddef.h \
$(srcdir)/ginclude/va-pyr.h $(srcdir)/ginclude/va-sparc.h \
$(srcdir)/ginclude/va-clipper.h $(srcdir)/ginclude/va-spur.h \
$(srcdir)/ginclude/va-m32r.h $(srcdir)/ginclude/va-sh.h \
+ $(srcdir)/ginclude/va-v850.h $(srcdir)/ginclude/va-arc.h \
$(srcdir)/ginclude/iso646.h $(srcdir)/ginclude/va-ppc.h \
$(srcdir)/ginclude/proto.h $(EXTRA_HEADERS) \
$(LANG_EXTRA_HEADERS)
@@ -169,6 +171,14 @@ SYSTEM_HEADER_DIR = /usr/include
# Control whether to run fixproto.
STMP_FIXPROTO = stmp-fixproto
+# Test to see whether <float.h> exists in the system header files,
+# and is not derived from GCC.
+FLOAT_H_TEST = \
+ [ -f $(SYSTEM_HEADER_DIR)/float.h ] && \
+ if grep 'ifndef _FLOAT_H___' $(SYSTEM_HEADER_DIR)/float.h >/dev/null; \
+ then false; \
+ else :; fi
+
# Test to see whether <limits.h> exists in the system header files.
LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h ]
@@ -214,6 +224,8 @@ libsubdir = $(libdir)/gcc-lib/$(target_alias)/$(version)
# Directory in which the compiler finds g++ includes.
gxx_include_dir= @gxx_include_dir@
# Directory in which the old g++ header files may be found.
+# The reason we use $(libdir)/g++-include rather than using libsubdir
+# is for compatibility with older versions of libg++.
old_gxx_include_dir= $(libdir)/g++-include
# Directory to search for site-specific includes.
includedir = $(local_prefix)/include
@@ -264,7 +276,7 @@ LIBGCC2 = libgcc2.a
# we use this here because that should be enough, and also
# so that -g1 will be tested.
LIBGCC2_DEBUG_CFLAGS = -g1
-LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) $(LIBGCC2_DEBUG_CFLAGS) -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED
+LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) $(LIBGCC2_DEBUG_CFLAGS) -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -fexceptions
# Additional options to use when compiling libgcc2.a.
# Some targets override this to -Iinclude
@@ -304,9 +316,6 @@ EXTRA_OBJS = @extra_objs@
# the gcc driver.
EXTRA_GCC_OBJS =@host_extra_gcc_objs@
-# List of extra object files that should be compiled and linked with cc1.
-EXTRA_C_OBJS =@extra_c_objs@
-
# List of additional header files to install.
# Often this is edited directly by `configure'.
EXTRA_HEADERS =@extra_headers_list@
@@ -326,7 +335,7 @@ LIB1FUNCS_EXTRA =
LIB2FUNCS_EXTRA =
# Default float.h source to use for cross-compiler.
-# This is overidden by configure.
+# This is overridden by configure.
CROSS_FLOAT_H=$(srcdir)/config/float-@float_format@.h
# Program to convert libraries.
@@ -342,6 +351,10 @@ TAROUTOPTS = xpBf
# This value is overridden directly by configure.
FIXINCLUDES = @fixincludes@
+# Set to ChangeLog if we are in a CVS working directory. This lets
+# us automatically build version.c.
+VERSION_DEP = @version_dep@
+
# Additional directories of header files to run fixincludes on.
# These should be directories searched automatically by default
# just as /usr/include is.
@@ -411,6 +424,9 @@ CRTSTUFF_T_CFLAGS =
# Extra flags to use when compiling [m]crt0.o.
CRT0STUFF_T_CFLAGS =
+# "t" or nothing, for building multilibbed versions of, say, crtbegin.o.
+T =
+
# End of variables for you to override.
# Definition of `all' is here so that new rules inserted by sed
@@ -521,6 +537,7 @@ FLAGS_TO_PASS = \
"LDFLAGS=$(LDFLAGS)" \
"LEX=$(LEX)" \
"LEXFLAGS=$(LEXFLAGS)" \
+ "LN=$(LN)" \
"MAKEINFO=$(MAKEINFO)" \
"MAKEINFOFLAGS=$(MAKEINFOFLAGS)" \
"RANLIB_FOR_TARGET=$(RANLIB_FOR_TARGET)" \
@@ -537,13 +554,12 @@ FLAGS_TO_PASS = \
#
# Lists of files for various purposes.
-# Language-specific object files for C.
-C_OBJS = c-parse.o c-lang.o c-lex.o c-pragma.o $(EXTRA_C_OBJS) \
- c-decl.o c-typeck.o c-convert.o c-aux-info.o c-common.o c-iterate.o
+# Language-specific object files for C and Objective C.
+C_AND_OBJC_OBJS = c-lex.o c-pragma.o c-decl.o c-typeck.o c-convert.o \
+ c-aux-info.o c-common.o c-iterate.o @extra_c_objs@
-# Language-specific object files for Objective C.
-OBJC_OBJS = objc-parse.o objc-act.o c-lex.o c-pragma.o $(EXTRA_C_OBJS) \
- c-decl.o c-typeck.o c-convert.o c-aux-info.o c-common.o c-iterate.o
+# Language-specific object files for C.
+C_OBJS = c-parse.o c-lang.o $(C_AND_OBJC_OBJS)
# Files specific to the C interpreter bytecode compiler(s).
BC_OBJS = bc-emit.o bc-optab.o
@@ -575,14 +591,14 @@ CCCP=cccp
STAGESTUFF = *$(objext) insn-flags.h insn-config.h insn-codes.h \
insn-output.c insn-recog.c insn-emit.c insn-extract.c insn-peep.c \
insn-attr.h insn-attrtab.c insn-opinit.c \
- stamp-flags stamp-config stamp-codes stamp-mlib \
- stamp-output stamp-recog stamp-emit stamp-extract stamp-peep \
- stamp-attr stamp-attrtab stamp-opinit stamp-proto stamp-crt stamp-crtS stamp-crt0 \
+ s-flags s-config s-codes s-mlib \
+ s-output s-recog s-emit s-extract s-peep \
+ s-attr s-attrtab s-opinit s-proto s-crt s-crtS s-crt0 \
genemit$(exeext) genoutput$(exeext) genrecog$(exeext) genextract$(exeext) \
genflags$(exeext) gencodes$(exeext) genconfig$(exeext) genpeep$(exeext) \
genattrtab$(exeext) genattr$(exeext) genopinit$(exeext) \
$(BC_ALL) \
- stamp-bcarity stamp-bcopcode stamp-bcopname \
+ s-bcarity s-bcopcode s-bcopname \
bi-arity$(exeext) bi-opcode$(exeext) bi-opname$(exeext) \
xgcc$(exeext) cc1$(exeext) cpp$(exeext) $(EXTRA_PASSES) \
$(EXTRA_PARTS) $(EXTRA_PROGRAMS) gcc-cross$(exeext) \
@@ -613,7 +629,7 @@ LIB2FUNCS = _muldi3 _divdi3 _moddi3 _udivdi3 _umoddi3 _negdi2 \
_fixtfdi _fixunstfdi _floatditf \
__gcc_bcmp _varargs __dummy _eprintf _op_new _op_vnew _new_handler \
_op_delete _op_vdel _bb _shtab _clear_cache _trampoline __main _exit \
- _ctors _eh _pure
+ _ctors _eh _eh_compat _pure
# The files that "belong" in CONFIG_H are deliberately omitted
# because having them there would not be useful in actual practice.
@@ -623,13 +639,12 @@ LIB2FUNCS = _muldi3 _divdi3 _moddi3 _udivdi3 _umoddi3 _negdi2 \
# If it is, rm *.o is an easy way to do it.
# CONFIG_H = $(host_xm_file) $(tm_file)
CONFIG_H =
-RTL_H = rtl.h rtl.def machmode.h machmode.def
-TREE_H = tree.h real.h tree.def machmode.h machmode.def
+RTL_H = rtl.h rtl.def gansidecl.h machmode.h machmode.def
+TREE_H = tree.h real.h tree.def gansidecl.h machmode.h machmode.def
BYTECODE_H = bytecode.h bc-emit.h bc-optab.h
BASIC_BLOCK_H = basic-block.h bitmap.h
-
-# "t" or nothing, for building multilibbed versions of, say, crtbegin.o.
-T =
+DEMANGLE_H = demangle.h gansidecl.h
+RECOG_H = recog.h gansidecl.h
#
# Language makefile fragments.
@@ -658,6 +673,16 @@ T =
# Avoid a lot of time thinking about remaking Makefile.in and *.def.
.SUFFIXES: .in .def
+$(srcdir)/version.c: $(VERSION_DEP)
+ cd $(srcdir); cvs log -h $? >tmp-ver
+ tag=`sed '1,/^sym/d;s/ *gcc-//;s/:.*$$//;q' tmp-ver`; \
+ ver=`echo $${tag} | sed 's/-.*//' | sed 's/_/./g'`; \
+ date=`echo $${tag} | sed 's/.*-//'`; \
+ if [ $${date} != RELEASE ]; then ver="testgcc-$${ver} $${date} experimental"; fi; \
+ echo "char *version_string = \"$${ver}\";" >>tmp-version.c
+ rm -f tmp-ver
+ $(srcdir)/move-if-change tmp-version.c $(srcdir)/version.c
+
Makefile: $(srcdir)/Makefile.in config.status $(srcdir)/version.c \
$(xmake_file) $(tmake_file) $(LANG_MAKEFILES)
$(SHELL) $(srcdir)/configure.frag $(srcdir) "$(SUBDIRS)" \
@@ -682,14 +707,14 @@ $(srcdir)/config.in: $(srcdir)/cstamp-h.in
$(srcdir)/cstamp-h.in: $(srcdir)/configure.in $(srcdir)/acconfig.h
cd $(srcdir) && autoheader
echo timestamp > $(srcdir)/cstamp-h.in
-config.h: cstamp-h ; @true
+auto-config.h: cstamp-h ; @true
cstamp-h: config.in config.status
- CONFIG_HEADERS=config.h:config.in $(SHELL) config.status
+ CONFIG_HEADERS=auto-config.h:config.in $(SHELL) config.status
# Really, really stupid make features, such as SUN's KEEP_STATE, may force
# a target to build even if it is up-to-date. So we must verify that
# config.status does not exist before failing.
-config.status: configure
+config.status: configure version.c
@if [ ! -f config.status ] ; then \
echo You must configure gcc. Look at the INSTALL file for details.; \
false; \
@@ -711,7 +736,7 @@ start.encap: native xgcc specs $(LIBGCC1) xlimits.h lang.start.encap
rest.encap: stmp-headers $(LIBGCC) $(STMP_FIXPROTO) $(EXTRA_PARTS) lang.rest.encap
# This is what is made with the host's compiler
# whether making a cross compiler or not.
-native: config.status config.h cpp $(LANGUAGES) \
+native: config.status auto-config.h cpp $(LANGUAGES) \
$(EXTRA_PASSES) $(EXTRA_PROGRAMS) $(USE_COLLECT2)
# Define the names for selecting languages in LANGUAGES.
@@ -746,8 +771,9 @@ stamp-objlist: $(OBJS) $(BC_OBJS)
# We call this executable `xgcc' rather than `gcc'
# to avoid confusion if the current directory is in the path
# and CC is `gcc'. It is renamed to `gcc' when it is installed.
-xgcc: gcc.o version.o choose-temp.o pexecute.o $(LIBDEPS) $(EXTRA_GCC_OBJS)
- $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ gcc.o version.o \
+xgcc: gcc.o version.o choose-temp.o pexecute.o prefix.o version.o \
+ $(LIBDEPS) $(EXTRA_GCC_OBJS)
+ $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ gcc.o prefix.o version.o \
choose-temp.o pexecute.o $(EXTRA_GCC_OBJS) $(LIBS)
# Dump a specs file to make -B./ read these specs over installed ones.
@@ -770,8 +796,10 @@ gfloat.h: $(FLOAT_H)
cp $(FLOAT_H) gfloat.h
# Create float.h source for the native machine.
+# Make it empty if we can use the system float.h without changes.
float.h-nat: enquire
-./enquire -f > tmp-float.h
+ grep '#define [^_]' tmp-float.h >/dev/null || true > tmp-float.h
mv tmp-float.h float.h-nat
# Create a dummy float.h source for a cross-compiler.
@@ -788,8 +816,15 @@ float.h-cross:
enquire: enquire.o $(GCC_PARTS)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ENQUIRE_LDFLAGS) enquire.o -o $@
enquire.o: $(srcdir)/enquire.c $(GCC_PASSES) stmp-int-hdrs
-# Breaking this line caused a problem with one version of GNU make.
- $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) $(ENQUIRE_CFLAGS) -I. -c $(srcdir)/enquire.c
+ rm -f include/float.h
+ if $(FLOAT_H_TEST); then \
+ SYS_FLOAT_H_WRAP=1; \
+ else :; \
+ SYS_FLOAT_H_WRAP=0; \
+ fi; \
+ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) $(ENQUIRE_CFLAGS) \
+ -DSYS_FLOAT_H_WRAP=$$SYS_FLOAT_H_WRAP \
+ -I. -c $(srcdir)/enquire.c
# Build the version of limits.h that we will install.
xlimits.h: glimits.h limitx.h limity.h
@@ -932,8 +967,9 @@ libgcc2.ready: $(GCC_PASSES) $(LIBGCC2_DEPS) stmp-int-hdrs
touch libgcc2.ready; \
fi
-libgcc2.a: libgcc2.c libgcc2.ready $(CONFIG_H) $(LIB2FUNCS_EXTRA) \
- $(LANG_LIB2FUNCS) machmode.h longlong.h gbl-ctors.h config.status
+LIB2ADD = $(srcdir)/frame.c $(LIB2FUNCS_EXTRA) $(LANG_LIB2FUNCS)
+libgcc2.a: libgcc2.c libgcc2.ready $(CONFIG_H) $(LIB2ADD) \
+ machmode.h longlong.h frame.h gansidecl.h gbl-ctors.h config.status
# Actually build it in tmplibgcc2.a, then rename at end,
# so that libgcc2.a itself remains nonexistent if compilation is aborted.
-rm -f tmplibgcc2.a
@@ -958,33 +994,31 @@ libgcc2.a: libgcc2.c libgcc2.ready $(CONFIG_H) $(LIB2FUNCS_EXTRA) \
# We don't use -e here because there are if statements
# that should not make the command give up when the if condition is false.
# Instead, we test for failure after each command where it matters.
- for file in .. $(LIB2FUNCS_EXTRA) $(LANG_LIB2FUNCS); \
- do \
- if [ x$${file} != x.. ]; then \
- name=`echo $${file} | sed -e 's/[.][cSo]$$//' -e 's/[.]asm$$//' -e 's/[.]txt$$//'`; \
- oname=` echo $${name} | sed -e 's,.*/,,'`; \
- if [ $${name}.txt = $${file} ]; then \
- for f in .. `cat $${file}`; do if [ x$${f} != x.. ]; then \
- $(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
- AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" CC="$(CC)" \
- CFLAGS="$(CFLAGS)" HOST_PREFIX="$(HOST_PREFIX)" \
- HOST_PREFIX_1="$(HOST_PREFIX_1)" \
- LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" $${f}; \
- if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
- $(AR) $(AR_FLAGS) tmplibgcc2.a $${f}; \
- rm -f $${f}; \
- fi; done; \
- else \
- echo $${name}; \
- if [ $${name}.asm = $${file} ]; then \
- cp $${file} $${name}.s || exit 1; file=$${name}.s; \
- else true; fi; \
- $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) -c $${file}; \
+ for file in $(LIB2ADD); do \
+ name=`echo $${file} | sed -e 's/[.][cSo]$$//' -e 's/[.]asm$$//' -e 's/[.]txt$$//'`; \
+ oname=` echo $${name} | sed -e 's,.*/,,'`; \
+ if [ $${name}.txt = $${file} ]; then \
+ for f in .. `cat $${file}`; do if [ x$${f} != x.. ]; then \
+ $(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
+ AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" CC="$(CC)" \
+ CFLAGS="$(CFLAGS)" HOST_PREFIX="$(HOST_PREFIX)" \
+ HOST_PREFIX_1="$(HOST_PREFIX_1)" \
+ LANGUAGES="$(LANGUAGES)" \
+ LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" $${f}; \
if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
- $(AR) $(AR_FLAGS) tmplibgcc2.a $${oname}$(objext); \
- rm -f $${name}.s $${oname}$(objext); \
- fi; \
- else true; \
+ $(AR) $(AR_FLAGS) tmplibgcc2.a $${f}; \
+ rm -f $${f}; \
+ else true; \
+ fi; done; \
+ else \
+ echo $${name}; \
+ if [ $${name}.asm = $${file} ]; then \
+ cp $${file} $${name}.s || exit 1; file=$${name}.s; \
+ else true; fi; \
+ $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) -c $${file}; \
+ if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+ $(AR) $(AR_FLAGS) tmplibgcc2.a $${oname}$(objext); \
+ rm -f $${name}.s $${oname}$(objext); \
fi; \
done
mv tmplibgcc2.a libgcc2.a
@@ -1018,8 +1052,8 @@ libgcc.a: $(LIBGCC1) $(LIBGCC2)
# Use the genmultilib shell script to generate the information the gcc
# driver program needs to select the library directory based on the
# switches.
-multilib.h: stamp-mlib; @true
-stamp-mlib: $(srcdir)/genmultilib Makefile
+multilib.h: s-mlib; @true
+s-mlib: $(srcdir)/genmultilib Makefile
$(SHELL) $(srcdir)/genmultilib \
"$(MULTILIB_OPTIONS)" \
"$(MULTILIB_DIRNAMES)" \
@@ -1027,18 +1061,19 @@ stamp-mlib: $(srcdir)/genmultilib Makefile
"$(MULTILIB_EXCEPTIONS)" \
"$(MULTILIB_EXTRA_OPTS)" > tmp-mlib.h
$(srcdir)/move-if-change tmp-mlib.h multilib.h
- touch stamp-mlib
+ touch s-mlib
# Build multiple copies of libgcc.a, one for each target switch.
stmp-multilib: $(LIBGCC1) libgcc2.c libgcc2.ready $(CONFIG_H) \
- $(LIB2FUNCS_EXTRA) $(LANG_LIB2FUNCS) machmode.h longlong.h gbl-ctors.h \
- config.status
+ frame.h gansidecl.h \
+ $(LIB2ADD) machmode.h longlong.h gbl-ctors.h config.status
for i in `$(GCC_FOR_TARGET) --print-multi-lib`; do \
dir=`echo $$i | sed -e 's/;.*$$//'`; \
flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" CC="$(CC)" CFLAGS="$(CFLAGS)" \
RANLIB="$(RANLIB)" RANLIB_TEST="$(RANLIB_TEST)" \
+ LANGUAGES="$(LANGUAGES)" \
HOST_PREFIX="$(HOST_PREFIX)" HOST_PREFIX_1="$(HOST_PREFIX_1)" \
LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS) $${flags}" \
MULTILIB_CFLAGS="$${flags}" \
@@ -1059,6 +1094,7 @@ stmp-multilib-sub:
$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" CC="$(CC)" CFLAGS="$(CFLAGS)" \
HOST_PREFIX="$(HOST_PREFIX)" HOST_PREFIX_1="$(HOST_PREFIX_1)" \
+ LANGUAGES="$(LANGUAGES)" \
LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" $(LIBGCC2)
if [ x$(LIBGCC1) != xlibgcc1-asm.a ]; \
then true; \
@@ -1070,6 +1106,7 @@ stmp-multilib-sub:
$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" CC="$(CC)" CFLAGS="$(CFLAGS)" \
HOST_PREFIX="$(HOST_PREFIX)" HOST_PREFIX_1="$(HOST_PREFIX_1)" \
+ LANGUAGES="$(LANGUAGES)" \
LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" $(LIBGCC1); \
fi
rm -rf tmplibgcc.a tmpcopy
@@ -1088,6 +1125,7 @@ stmp-multilib-sub:
$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" CC="$(CC)" CFLAGS="$(CFLAGS)" \
HOST_PREFIX="$(HOST_PREFIX)" HOST_PREFIX_1="$(HOST_PREFIX_1)" \
+ LANGUAGES="$(LANGUAGES)" \
MULTILIB_CFLAGS="$(MULTILIB_CFLAGS)" T="t" t$${f}; \
mv t$${f} $(dir)/$${f}; \
else true; \
@@ -1096,21 +1134,24 @@ stmp-multilib-sub:
# Compile two additional files that are linked with every program
# linked using GCC on systems using COFF or ELF, for the sake of C++
# constructors.
-$(T)crtbegin.o: crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h
+$(T)crtbegin.o: crtstuff.c $(GCC_PASSES) $(CONFIG_H) \
+ defaults.h frame.h gbl-ctors.h
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
- -finhibit-size-directive -fno-inline-functions $(CRTSTUFF_T_CFLAGS) \
+ -finhibit-size-directive -fno-inline-functions -fno-exceptions $(CRTSTUFF_T_CFLAGS) \
-c $(srcdir)/crtstuff.c -DCRT_BEGIN -o $(T)crtbegin$(objext)
-$(T)crtend.o: crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h
+$(T)crtend.o: crtstuff.c $(GCC_PASSES) $(CONFIG_H) \
+ defaults.h frame.h gbl-ctors.h
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
- -finhibit-size-directive -fno-inline-functions $(CRTSTUFF_T_CFLAGS) \
+ -finhibit-size-directive -fno-inline-functions -fno-exceptions $(CRTSTUFF_T_CFLAGS) \
-c $(srcdir)/crtstuff.c -DCRT_END -o $(T)crtend$(objext)
# On some systems we also want to install versions of these files
# compiled using PIC for use in shared libraries.
-crtbeginS.o crtendS.o: stamp-crtS ; @true
+crtbeginS.o crtendS.o: s-crtS ; @true
-stamp-crtS: crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h
+s-crtS: crtstuff.c $(GCC_PASSES) $(CONFIG_H) \
+ defaults.h frame.h gbl-ctors.h
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS_S) \
-DCRT_BEGIN -finhibit-size-directive -fno-inline-functions \
-g0 -c $(srcdir)/crtstuff.c
@@ -1118,18 +1159,18 @@ stamp-crtS: crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS_S) \
-DCRT_END -finhibit-size-directive -fno-inline-functions \
-g0 -c $(srcdir)/crtstuff.c -o crtendS$(objext)
- touch stamp-crtS
+ touch s-crtS
# Compile the start modules crt0.o and mcrt0.o that are linked with every program
-crt0.o: stamp-crt0 ; @true
-mcrt0.o: stamp-crt0; @true
+crt0.o: s-crt0 ; @true
+mcrt0.o: s-crt0; @true
-stamp-crt0: $(CRT0_S) $(MCRT0_S) $(GCC_PASSES) $(CONFIG_H)
+s-crt0: $(CRT0_S) $(MCRT0_S) $(GCC_PASSES) $(CONFIG_H)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(CRT0STUFF_T_CFLAGS) \
-o crt0.o -c $(CRT0_S)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(CRT0STUFF_T_CFLAGS) \
-o mcrt0.o -c $(MCRT0_S)
- touch stamp-crt0
+ touch s-crt0
#
# Compiling object files from source files.
@@ -1180,16 +1221,16 @@ collect2 : collect2.o cplus-dem.o underscore.o version.o \
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ collect2.o \
cplus-dem.o underscore.o version.o choose-temp.o $(LIBS)
-collect2.o : collect2.c $(CONFIG_H) gstab.h obstack.h demangle.h
+collect2.o : collect2.c $(CONFIG_H) gansidecl.h gstab.h obstack.h $(DEMANGLE_H)
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
-DTARGET_MACHINE=\"$(target_alias)\" $(MAYBE_USE_COLLECT2) \
-c `echo $(srcdir)/collect2.c | sed 's,^\./,,'`
-cplus-dem.o: cplus-dem.c demangle.h
+cplus-dem.o: cplus-dem.c $(DEMANGLE_H)
-underscore.c: stamp-under ; @true
+underscore.c: s-under ; @true
-stamp-under: $(GCC_PASSES)
+s-under: $(GCC_PASSES)
echo "int xxy_us_dummy;" >tmp-dum.c
$(GCC_FOR_TARGET) -S tmp-dum.c
echo '/*WARNING: This file is automatically generated!*/' >tmp-under.c
@@ -1200,7 +1241,7 @@ stamp-under: $(GCC_PASSES)
fi
$(srcdir)/move-if-change tmp-under.c underscore.c
-rm -f tmp-dum.c tmp-dum.s
- touch stamp-under
+ touch s-under
# A file used by all variants of C.
@@ -1214,7 +1255,7 @@ DRIVER_DEFINES = \
-DDEFAULT_TARGET_VERSION=\"$(version)\" \
-DDEFAULT_TARGET_MACHINE=\"$(target_alias)\" \
-DTOOLDIR_BASE_PREFIX=\"$(exec_prefix)/\"
-gcc.o: gcc.c $(CONFIG_H) multilib.h Makefile $(lang_specs_files)
+gcc.o: gcc.c $(CONFIG_H) gansidecl.h multilib.h Makefile $(lang_specs_files)
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
$(DRIVER_DEFINES) \
-c `echo $(srcdir)/gcc.c | sed 's,^\./,,'`
@@ -1222,9 +1263,13 @@ gcc.o: gcc.c $(CONFIG_H) multilib.h Makefile $(lang_specs_files)
dumpvers: dumpvers.c
version.o: version.c
-obstack.o: obstack.c
-choose-temp.o: choose-temp.c
-pexecute.o: pexecute.c
+obstack.o: obstack.c $(CONFIG_H)
+choose-temp.o: choose-temp.c $(CONFIG_H) gansidecl.h
+pexecute.o: pexecute.c $(CONFIG_H) gansidecl.h
+prefix.o: prefix.c $(CONFIG_H) gansidecl.h Makefile
+ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+ -DPREFIX=\"$(prefix)\" \
+ -c `echo $(srcdir)/prefix.c | sed 's,^\./,,'`
convert.o: convert.c $(CONFIG_H) $(TREE_H) flags.h convert.h
@@ -1233,7 +1278,8 @@ print-tree.o : print-tree.c $(CONFIG_H) $(TREE_H)
stor-layout.o : stor-layout.c $(CONFIG_H) $(TREE_H) flags.h function.h
fold-const.o : fold-const.c $(CONFIG_H) $(TREE_H) flags.h
toplev.o : toplev.c $(CONFIG_H) $(TREE_H) $(RTL_H) bytecode.h bc-emit.h \
- flags.h input.h insn-attr.h xcoffout.h defaults.h output.h \
+ flags.h input.h insn-attr.h insn-codes.h insn-config.h recog.h xcoffout.h \
+ defaults.h output.h \
$(lang_options_files)
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(MAYBE_USE_COLLECT2) \
-DTARGET_NAME=\"$(target_alias)\" \
@@ -1249,89 +1295,90 @@ varasm.o : varasm.c $(CONFIG_H) $(TREE_H) $(RTL_H) flags.h function.h \
output.h bytecode.h c-pragma.h
function.o : function.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h function.h \
insn-flags.h insn-codes.h expr.h regs.h hard-reg-set.h insn-config.h \
- recog.h output.h bytecode.h bc-emit.h
+ $(RECOG_H) output.h bytecode.h bc-emit.h
stmt.o : stmt.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h function.h \
insn-flags.h insn-config.h insn-codes.h hard-reg-set.h expr.h except.h \
- loop.h recog.h bytecode.h bc-typecd.h bc-typecd.def bc-opcode.h \
+ loop.h $(RECOG_H) bytecode.h bc-typecd.h bc-typecd.def bc-opcode.h \
bc-optab.h bc-emit.h
except.o : except.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h function.h \
insn-flags.h insn-codes.h expr.h regs.h hard-reg-set.h insn-config.h \
- recog.h output.h except.h
+ $(RECOG_H) output.h except.h
expr.o : expr.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h function.h regs.h \
- insn-flags.h insn-codes.h expr.h insn-config.h recog.h output.h \
+ insn-flags.h insn-codes.h expr.h insn-config.h $(RECOG_H) output.h \
typeclass.h bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h \
bc-emit.h modemap.def hard-reg-set.h
calls.o : calls.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h expr.h insn-codes.h \
- insn-flags.h
+ insn-flags.h regs.h
expmed.o : expmed.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h \
- insn-flags.h insn-config.h insn-codes.h expr.h recog.h real.h
+ insn-flags.h insn-config.h insn-codes.h expr.h $(RECOG_H) real.h
explow.o : explow.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h hard-reg-set.h \
- insn-config.h expr.h recog.h insn-flags.h insn-codes.h
+ insn-config.h expr.h $(RECOG_H) insn-flags.h insn-codes.h
optabs.o : optabs.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h \
- insn-flags.h insn-config.h insn-codes.h expr.h recog.h reload.h
+ insn-flags.h insn-config.h insn-codes.h expr.h $(RECOG_H) reload.h
dbxout.o : dbxout.c $(CONFIG_H) $(TREE_H) $(RTL_H) flags.h regs.h \
insn-config.h reload.h gstab.h xcoffout.h defaults.h output.h
sdbout.o : sdbout.c $(CONFIG_H) $(TREE_H) $(RTL_H) flags.h except.h \
function.h expr.h output.h hard-reg-set.h regs.h defaults.h real.h \
- bytecode.h obstack.h xcoffout.h c-pragma.h
+ insn-config.h bytecode.h obstack.h xcoffout.h c-pragma.h
dwarfout.o : dwarfout.c $(CONFIG_H) $(TREE_H) $(RTL_H) dwarf.h flags.h \
insn-config.h reload.h output.h defaults.h
dwarf2out.o : dwarf2out.c $(CONFIG_H) $(TREE_H) $(RTL_H) dwarf2.h flags.h \
insn-config.h reload.h output.h defaults.h hard-reg-set.h regs.h expr.h
xcoffout.o : xcoffout.c $(CONFIG_H) $(TREE_H) $(RTL_H) xcoffout.h flags.h
-emit-rtl.o : emit-rtl.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h \
- function.h regs.h insn-config.h insn-codes.h real.h expr.h bytecode.h \
- bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h bc-emit.h bc-opname.h
+emit-rtl.o : emit-rtl.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h except.h \
+ function.h regs.h insn-config.h $(RECOG_H) real.h expr.h obstack.h \
+ bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h bc-emit.h \
+ bc-opname.h hard-reg-set.h
real.o : real.c $(CONFIG_H) $(TREE_H)
getpwd.o : getpwd.c $(CONFIG_H)
integrate.o : integrate.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h integrate.h \
insn-flags.h insn-config.h insn-codes.h expr.h real.h regs.h function.h \
- bytecode.h
+ bytecode.h output.h $(RECOG_H) except.h
jump.o : jump.c $(CONFIG_H) $(RTL_H) flags.h hard-reg-set.h regs.h \
- insn-config.h insn-flags.h insn-codes.h expr.h real.h
+ insn-config.h insn-flags.h $(RECOG_H) expr.h real.h except.h
stupid.o : stupid.c $(CONFIG_H) $(RTL_H) regs.h hard-reg-set.h flags.h
cse.o : cse.c $(CONFIG_H) $(RTL_H) regs.h hard-reg-set.h flags.h real.h \
- insn-config.h recog.h
+ insn-config.h $(RECOG_H) expr.h
profile.o : profile.c $(CONFIG_H) $(RTL_H) flags.h insn-flags.h gcov-io.h \
- tree.h output.h
+ $(TREE_H) output.h regs.h
loop.o : loop.c $(CONFIG_H) $(RTL_H) flags.h loop.h insn-config.h \
- insn-flags.h insn-codes.h regs.h hard-reg-set.h recog.h expr.h real.h
-unroll.o : unroll.c $(CONFIG_H) $(RTL_H) insn-config.h insn-codes.h \
- integrate.h regs.h flags.h expr.h loop.h
+ insn-flags.h insn-codes.h regs.h hard-reg-set.h $(RECOG_H) expr.h real.h
+unroll.o : unroll.c $(CONFIG_H) $(RTL_H) insn-config.h integrate.h regs.h \
+ $(RECOG_H) flags.h expr.h loop.h
flow.o : flow.c $(CONFIG_H) $(RTL_H) flags.h insn-config.h \
$(BASIC_BLOCK_H) regs.h hard-reg-set.h output.h
combine.o : combine.c $(CONFIG_H) $(RTL_H) flags.h \
insn-config.h insn-flags.h insn-codes.h insn-attr.h regs.h expr.h \
- $(BASIC_BLOCK_H) recog.h real.h hard-reg-set.h
+ $(BASIC_BLOCK_H) $(RECOG_H) real.h hard-reg-set.h
regclass.o : regclass.c $(CONFIG_H) $(RTL_H) hard-reg-set.h flags.h \
- $(BASIC_BLOCK_H) regs.h insn-config.h recog.h reload.h real.h bytecode.h
+ $(BASIC_BLOCK_H) regs.h insn-config.h $(RECOG_H) reload.h real.h bytecode.h
local-alloc.o : local-alloc.c $(CONFIG_H) $(RTL_H) flags.h $(BASIC_BLOCK_H) \
- regs.h hard-reg-set.h insn-config.h recog.h output.h
+ regs.h hard-reg-set.h insn-config.h $(RECOG_H) output.h
bitmap.o : bitmap.c $(CONFIG_H) $(RTL_H) flags.h $(BASIC_BLOCK_H) regs.h
global.o : global.c $(CONFIG_H) $(RTL_H) flags.h \
$(BASIC_BLOCK_H) regs.h hard-reg-set.h insn-config.h output.h
reload.o : reload.c $(CONFIG_H) $(RTL_H) flags.h output.h expr.h\
- reload.h recog.h hard-reg-set.h insn-config.h insn-codes.h regs.h real.h
+ reload.h $(RECOG_H) hard-reg-set.h insn-config.h insn-codes.h regs.h real.h
reload1.o : reload1.c $(CONFIG_H) $(RTL_H) real.h flags.h expr.h \
reload.h regs.h hard-reg-set.h insn-config.h insn-flags.h insn-codes.h \
- $(BASIC_BLOCK_H) recog.h output.h
+ $(BASIC_BLOCK_H) $(RECOG_H) output.h
caller-save.o : caller-save.c $(CONFIG_H) $(RTL_H) flags.h \
- regs.h hard-reg-set.h insn-codes.h insn-config.h $(BASIC_BLOCK_H) recog.h \
+ regs.h hard-reg-set.h insn-codes.h insn-config.h $(BASIC_BLOCK_H) $(RECOG_H) \
reload.h expr.h
reorg.o : reorg.c $(CONFIG_H) $(RTL_H) conditions.h hard-reg-set.h \
- $(BASIC_BLOCK_H) regs.h insn-config.h insn-attr.h insn-flags.h recog.h \
+ $(BASIC_BLOCK_H) regs.h insn-config.h insn-attr.h insn-flags.h $(RECOG_H) \
flags.h output.h
sched.o : $(SCHED_PREFIX)sched.c $(CONFIG_H) $(RTL_H) $(BASIC_BLOCK_H) regs.h hard-reg-set.h \
flags.h insn-config.h insn-attr.h
final.o : final.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h regs.h \
- recog.h conditions.h insn-config.h insn-attr.h except.h real.h output.h \
+ $(RECOG_H) conditions.h insn-config.h insn-attr.h except.h real.h output.h \
hard-reg-set.h insn-flags.h insn-codes.h gstab.h xcoffout.h defaults.h
recog.o : recog.c $(CONFIG_H) $(RTL_H) \
- regs.h recog.h hard-reg-set.h flags.h insn-config.h insn-attr.h \
+ regs.h $(RECOG_H) hard-reg-set.h flags.h insn-config.h insn-attr.h \
insn-flags.h insn-codes.h real.h
reg-stack.o : reg-stack.c $(CONFIG_H) $(RTL_H) $(TREE_H) \
regs.h hard-reg-set.h flags.h insn-config.h insn-flags.h
@@ -1377,7 +1424,7 @@ alloca.o: alloca.c
# Each of the other insn-* files is handled by a similar pair of rules.
# This causes an anomaly in the results of make -n
-# because insn-* is older than stamp-*
+# because insn-* is older than s-*
# and thus make -n thinks that insn-* will be updated
# and force recompilation of things that depend on it.
# We use move-if-change precisely to avoid such recompilation.
@@ -1389,84 +1436,84 @@ alloca.o: alloca.c
# versions of make which don't like empty commands (nothing after the
# trailing `;'), we call true for each.
-insn-config.h: stamp-config ; @true
-stamp-config : $(md_file) genconfig $(srcdir)/move-if-change
+insn-config.h: s-config ; @true
+s-config : $(md_file) genconfig $(srcdir)/move-if-change
./genconfig $(md_file) > tmp-config.h
$(srcdir)/move-if-change tmp-config.h insn-config.h
- touch stamp-config
+ touch s-config
-insn-flags.h: stamp-flags ; @true
-stamp-flags : $(md_file) genflags $(srcdir)/move-if-change
+insn-flags.h: s-flags ; @true
+s-flags : $(md_file) genflags $(srcdir)/move-if-change
./genflags $(md_file) > tmp-flags.h
$(srcdir)/move-if-change tmp-flags.h insn-flags.h
- touch stamp-flags
+ touch s-flags
-insn-codes.h: stamp-codes ; @true
-stamp-codes : $(md_file) gencodes $(srcdir)/move-if-change
+insn-codes.h: s-codes ; @true
+s-codes : $(md_file) gencodes $(srcdir)/move-if-change
./gencodes $(md_file) > tmp-codes.h
$(srcdir)/move-if-change tmp-codes.h insn-codes.h
- touch stamp-codes
+ touch s-codes
insn-emit.o : insn-emit.c $(CONFIG_H) $(RTL_H) expr.h real.h output.h \
insn-config.h insn-flags.h insn-codes.h
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-emit.c
-insn-emit.c: stamp-emit ; @true
-stamp-emit : $(md_file) genemit $(srcdir)/move-if-change
+insn-emit.c: s-emit ; @true
+s-emit : $(md_file) genemit $(srcdir)/move-if-change
./genemit $(md_file) > tmp-emit.c
$(srcdir)/move-if-change tmp-emit.c insn-emit.c
- touch stamp-emit
+ touch s-emit
-insn-recog.o : insn-recog.c $(CONFIG_H) $(RTL_H) insn-config.h recog.h \
+insn-recog.o : insn-recog.c $(CONFIG_H) $(RTL_H) insn-config.h $(RECOG_H) \
real.h output.h flags.h
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-recog.c
-insn-recog.c: stamp-recog ; @true
-stamp-recog : $(md_file) genrecog $(srcdir)/move-if-change
+insn-recog.c: s-recog ; @true
+s-recog : $(md_file) genrecog $(srcdir)/move-if-change
./genrecog $(md_file) > tmp-recog.c
$(srcdir)/move-if-change tmp-recog.c insn-recog.c
- touch stamp-recog
+ touch s-recog
insn-opinit.o : insn-opinit.c $(CONFIG_H) $(RTL_H) insn-codes.h insn-flags.h \
- insn-config.h flags.h rtl.h recog.h expr.h reload.h
+ insn-config.h flags.h $(RECOG_H) expr.h reload.h
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-opinit.c
-insn-opinit.c: stamp-opinit ; @true
-stamp-opinit : $(md_file) genopinit $(srcdir)/move-if-change
+insn-opinit.c: s-opinit ; @true
+s-opinit : $(md_file) genopinit $(srcdir)/move-if-change
./genopinit $(md_file) > tmp-opinit.c
$(srcdir)/move-if-change tmp-opinit.c insn-opinit.c
- touch stamp-opinit
+ touch s-opinit
insn-extract.o : insn-extract.c $(CONFIG_H) $(RTL_H)
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-extract.c
-insn-extract.c: stamp-extract ; @true
-stamp-extract : $(md_file) genextract $(srcdir)/move-if-change
+insn-extract.c: s-extract ; @true
+s-extract : $(md_file) genextract $(srcdir)/move-if-change
./genextract $(md_file) > tmp-extract.c
$(srcdir)/move-if-change tmp-extract.c insn-extract.c
- touch stamp-extract
+ touch s-extract
insn-peep.o : insn-peep.c $(CONFIG_H) $(RTL_H) regs.h output.h real.h
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-peep.c
-insn-peep.c: stamp-peep ; @true
-stamp-peep : $(md_file) genpeep $(srcdir)/move-if-change
+insn-peep.c: s-peep ; @true
+s-peep : $(md_file) genpeep $(srcdir)/move-if-change
./genpeep $(md_file) > tmp-peep.c
$(srcdir)/move-if-change tmp-peep.c insn-peep.c
- touch stamp-peep
+ touch s-peep
insn-attrtab.o : insn-attrtab.c $(CONFIG_H) $(RTL_H) regs.h real.h output.h \
insn-attr.h insn-config.h
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-attrtab.c
-insn-attr.h: stamp-attr ; @true
-stamp-attr : $(md_file) genattr $(srcdir)/move-if-change
+insn-attr.h: s-attr ; @true
+s-attr : $(md_file) genattr $(srcdir)/move-if-change
./genattr $(md_file) > tmp-attr.h
$(srcdir)/move-if-change tmp-attr.h insn-attr.h
- touch stamp-attr
+ touch s-attr
-insn-attrtab.c: stamp-attrtab ; @true
-stamp-attrtab : $(md_file) genattrtab $(srcdir)/move-if-change
+insn-attrtab.c: s-attrtab ; @true
+s-attrtab : $(md_file) genattrtab $(srcdir)/move-if-change
if cmp -s $(PREMADE_ATTRTAB_MD) $(md_file); \
then \
echo Using $(PREMADE_ATTRTAB); \
@@ -1475,18 +1522,18 @@ stamp-attrtab : $(md_file) genattrtab $(srcdir)/move-if-change
./genattrtab $(md_file) > tmp-attrtab.c; \
fi
$(srcdir)/move-if-change tmp-attrtab.c insn-attrtab.c
- touch stamp-attrtab
+ touch s-attrtab
insn-output.o : insn-output.c $(CONFIG_H) $(RTL_H) regs.h real.h conditions.h \
- hard-reg-set.h insn-config.h insn-flags.h insn-attr.h output.h recog.h \
+ hard-reg-set.h insn-config.h insn-flags.h insn-attr.h output.h $(RECOG_H) \
insn-codes.h
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-output.c
-insn-output.c: stamp-output ; @true
-stamp-output : $(md_file) genoutput $(srcdir)/move-if-change
+insn-output.c: s-output ; @true
+s-output : $(md_file) genoutput $(srcdir)/move-if-change
./genoutput $(md_file) > tmp-output.c
$(srcdir)/move-if-change tmp-output.c insn-output.c
- touch stamp-output
+ touch s-output
#
# Compile the programs that generate insn-* from the machine description.
# They are compiled with $(HOST_CC), and associated libraries,
@@ -1661,23 +1708,23 @@ bi-reverse.o: bi-reverse.c bi-defs.h
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \
$(srcdir)/bi-reverse.c
-bc-arity.h: stamp-bcarity ; @true
-stamp-bcarity : $(srcdir)/bytecode.def bi-arity $(srcdir)/move-if-change
+bc-arity.h: s-bcarity ; @true
+s-bcarity : $(srcdir)/bytecode.def bi-arity $(srcdir)/move-if-change
./bi-arity < $(srcdir)/bytecode.def >tmp-bc-arity.h
$(srcdir)/move-if-change tmp-bc-arity.h bc-arity.h
- touch stamp-bcarity
+ touch s-bcarity
-bc-opcode.h: stamp-bcopcode ; @true
-stamp-bcopcode : $(srcdir)/bytecode.def bi-opcode $(srcdir)/move-if-change
+bc-opcode.h: s-bcopcode ; @true
+s-bcopcode : $(srcdir)/bytecode.def bi-opcode $(srcdir)/move-if-change
./bi-opcode < $(srcdir)/bytecode.def >tmp-bcopcd.h
$(srcdir)/move-if-change tmp-bcopcd.h bc-opcode.h
- touch stamp-bcopcode
+ touch s-bcopcode
-bc-opname.h: stamp-bcopname ; @true
-stamp-bcopname : $(srcdir)/bytecode.def bi-opname $(srcdir)/move-if-change
+bc-opname.h: s-bcopname ; @true
+s-bcopname : $(srcdir)/bytecode.def bi-opname $(srcdir)/move-if-change
./bi-opname < $(srcdir)/bytecode.def >tmp-bcopnm.h
$(srcdir)/move-if-change tmp-bcopnm.h bc-opname.h
- touch stamp-bcopname
+ touch s-bcopname
bytecode.mostlyclean:
-rm -f bc-arity.h bc-opcode.h bc-opname.h
@@ -1696,8 +1743,8 @@ cpp: $(CCCP)
-rm -f cpp$(exeext)
ln $(CCCP)$(exeext) cpp$(exeext) > /dev/null 2>&1 \
|| cp $(CCCP)$(exeext) cpp$(exeext)
-cccp: cccp.o cexp.o version.o $(LIBDEPS)
- $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ cccp.o cexp.o \
+cccp: cccp.o cexp.o version.o prefix.o $(LIBDEPS)
+ $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ cccp.o cexp.o prefix.o \
version.o $(LIBS)
cexp.o: $(srcdir)/cexp.c $(CONFIG_H)
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c $(srcdir)/cexp.c
@@ -1705,8 +1752,6 @@ $(srcdir)/cexp.c: $(srcdir)/cexp.y
cd $(srcdir); $(BISON) -o cexp.c cexp.y
cccp.o: cccp.c $(CONFIG_H) pcp.h version.c config.status
-# The reason we use $(libdir)/g++-include rather than using libsubdir
-# is for compatibility with the current version of libg++.
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
-DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
-DGPLUSPLUS_INCLUDE_DIR=\"$(gxx_include_dir)\" \
@@ -1717,9 +1762,9 @@ cccp.o: cccp.c $(CONFIG_H) pcp.h version.c config.status
-c `echo $(srcdir)/cccp.c | sed 's,^\./,,'`
cppmain: cppmain.o cpplib.o cpphash.o cppalloc.o cpperror.o cppexp.o \
- version.o $(LIBDEPS)
+ prefix.o version.o $(LIBDEPS)
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ cppmain.o cpplib.o cpphash.o \
- cppalloc.o cpperror.o cppexp.o version.o $(LIBS)
+ cppalloc.o cpperror.o cppexp.o prefix.o version.o $(LIBS)
cppmain.o: cppmain.c $(CONFIG_H) cpplib.h
@@ -1751,16 +1796,16 @@ protoize: protoize.o getopt.o getopt1.o getpwd.o version.o \
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
protoize.o getopt.o getopt1.o getpwd.o version.o \
pexecute.o choose-temp.o $(LIBS)
-protoize.o: stamp-proto ; @true
+protoize.o: s-proto ; @true
unprotoize: unprotoize.o getopt.o getopt1.o getpwd.o version.o \
pexecute.o choose-temp.o $(LIBDEPS)
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
unprotoize.o getopt.o getopt1.o getpwd.o version.o \
pexecute.o choose-temp.o $(LIBS)
-unprotoize.o: stamp-proto ; @true
+unprotoize.o: s-proto ; @true
-stamp-proto: protoize.c getopt.h $(CONFIG_H)
+s-proto: protoize.c getopt.h $(CONFIG_H)
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
-DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
-DGPLUSPLUS_INCLUDE_DIR=\"$(gxx_include_dir)\" \
@@ -1778,7 +1823,7 @@ stamp-proto: protoize.c getopt.h $(CONFIG_H)
-DLOCAL_INCLUDE_DIR=\"$(includedir)\" \
-DSTD_PROTO_DIR=\"$(libsubdir)\" \
$(srcdir)/protoize.c
- touch stamp-proto
+ touch s-proto
getopt.o: getopt.c getopt.h
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/getopt.c
@@ -1826,7 +1871,7 @@ gcov: gcov.o $(LIBDEPS)
$(CC) $(ALL_CFLAGS) $(LDFLAGS) gcov.o $(LIBS) -o $@
#
# Build the include directory. The stamp files are stmp-* rather than
-# stamp-* so that mostlyclean does not force the include directory to
+# s-* so that mostlyclean does not force the include directory to
# be rebuilt.
# Build the include directory except for float.h (which depends upon
@@ -1836,9 +1881,11 @@ stmp-int-hdrs: stmp-fixinc $(USER_H) xlimits.h
# The sed command gets just the last file name component;
# this is necessary because VPATH could add a dirname.
# Using basename would be simpler, but some systems don't have it.
+# The touch command is here to workaround an AIX/Linux NFS bug.
for file in .. $(USER_H); do \
if [ X$$file != X.. ]; then \
realfile=`echo $$file | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
+ touch include/$$realfile; \
rm -f include/$$realfile; \
cp $$file include; \
chmod a+r include/$$realfile; \
@@ -1853,11 +1900,13 @@ stmp-int-hdrs: stmp-fixinc $(USER_H) xlimits.h
chmod a+r include/README
touch stmp-int-hdrs
-# Build the complete include directory.
+# Build the complete include directory, including float.h.
stmp-headers: stmp-int-hdrs gfloat.h
rm -f include/float.h
- cp gfloat.h include/float.h
- chmod a+r include/float.h
+ if [ -s gfloat.h ]; then \
+ cp gfloat.h include/float.h && \
+ chmod a+r include/float.h; \
+ else :; fi
touch stmp-headers
# Build fixed copies of system files.
@@ -1911,10 +1960,10 @@ xsys-protos.h: $(GCC_PASSES) $(srcdir)/sys-protos.h deduced.h gen-protos Makefil
rm -rf fixtmp.c
fix-header: fix-header.o scan-decls.o scan.o xsys-protos.h $(HOST_LIBDEPS) \
- cpplib.o cpphash.o cppalloc.o cppexp.o cpperror.o version.o
+ cpplib.o cpphash.o cppalloc.o cppexp.o cpperror.o prefix.o version.o
$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ fix-header.o \
- scan-decls.o scan.o cpplib.o cpphash.o cppalloc.o version.o \
- cppexp.o $(HOST_LIBS)
+ scan-decls.o scan.o cpplib.o cpphash.o cppalloc.o prefix.o \
+ version.o cppexp.o $(HOST_LIBS)
fix-header.o: fix-header.c obstack.h scan.h xsys-protos.h $(build_xm_file)
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/fix-header.c
@@ -1972,8 +2021,8 @@ $(srcdir)/cpp.dvi: cpp.texi
$(TEXI2DVI) $<
$(srcdir)/INSTALL: install1.texi install.texi
- $(MAKEINFO) -D INSTALLONLY --no-header --no-split \
- `echo $(srcdir)/install1.texi | sed 's,^\./,,'`
+ cd $(srcdir); $(MAKEINFO) -D INSTALLONLY --no-header \
+ --no-split install1.texi -o INSTALL
#
# Deletion of files made during compilation.
# There are four levels of this:
@@ -1996,20 +2045,16 @@ mostlyclean: bytecode.mostlyclean lang.mostlyclean
-rm -f $(HOST_PREFIX_1)alloca.c $(HOST_PREFIX_1)malloc.c
-rm -f $(HOST_PREFIX_1)obstack.c
# Delete the temp files made in the course of building libgcc.a.
- -rm -f tmplibgcc* tmpcopy xlimits.h
+ -rm -f tmplibgcc* tmpcopy xlimits.h libgcc1-test
for name in $(LIB1FUNCS); do rm -f $${name}.c; done
-# Delete other temporary files.
- -rm -f tmp-float.h tmp-gcc.xtar.gz
- -rm -f tmp-foo1 tmp-foo2 tmp-proto.* tmp-unproto.1 tmp-SYSCALLS.s
- -rm -f tmp-c-parse.y tmp-gperf.h
- -rm -f tmp-specs t-float.h-cross tmp-xlimits.h
- -rm -f tmp-fixtmp.c xsys-protos.hT
-# Delete the stamp files.
- -rm -f stamp-* tmp-*
+# Delete other built files.
+ -rm -f t-float.h-cross xsys-protos.hT fp-bit.c dp-bit.c
+# Delete the stamp and temporary files.
+ -rm -f s-* tmp-* stamp-* stmp-*
-rm -f */stamp-* */tmp-*
# Delete debugging dump files.
-rm -f *.greg *.lreg *.combine *.flow *.cse *.jump *.rtl *.tree *.loop
- -rm -f *.dbr *.jump2 *.sched *.cse2 *.sched2 *.stack
+ -rm -f *.dbr *.jump2 *.sched *.cse2 *.sched2 *.stack *.addressof
-rm -f */*.greg */*.lreg */*.combine */*.flow */*.cse */*.jump */*.rtl
-rm -f */*.tree */*.loop */*.dbr */*.jump2 */*.sched */*.cse2
-rm -f */*.sched2 */*.stack
@@ -2043,8 +2088,7 @@ clean: mostlyclean bytecode.clean lang.clean
rm -f md ; \
fi
# Delete the include directory.
- -rm -rf stmp-* include
- -rm -f */stmp-*
+ -rm -rf include
# Delete files used by the "multilib" facility (including libgcc subdirs).
-rm -f multilib.h tmpmultilib*
-if [ "x$(MULTILIB_DIRNAMES)" != x ] ; then \
@@ -2056,7 +2100,7 @@ clean: mostlyclean bytecode.clean lang.clean
# Delete all files that users would normally create
# while building and installing GCC.
distclean: clean bytecode.distclean lang.distclean
- -rm -f tm.h config.h config2.h tconfig.h hconfig.h md cstamp-h
+ -rm -f tm.h config.h auto-config.h tconfig.h hconfig.h md cstamp-h
-rm -f config.status config.run config.cache config.bak
-rm -f Make-lang Make-hooks Make-host Make-target
-rm -f Makefile specs.h options.h *.oaux
@@ -2172,12 +2216,14 @@ install-common: native installdirs $(EXTRA_PARTS) lang.install-common
if [ x"$$file" != x.. ]; then \
rm -f $(libsubdir)/$$file; \
$(INSTALL_DATA) $$file $(libsubdir)/$$file; \
+ chmod a-x $(libsubdir)/$$file; \
else true; fi; \
done
# Don't mess with specs if it doesn't exist yet.
-if [ -f specs ] ; then \
rm -f $(libsubdir)/specs; \
$(INSTALL_DATA) specs $(libsubdir)/specs; \
+ chmod a-x $(libsubdir)/specs; \
fi
# Install protoize if it was compiled.
-if [ -f protoize$(exeext) ]; \
@@ -2192,7 +2238,7 @@ install-common: native installdirs $(EXTRA_PARTS) lang.install-common
fi
-rm -f $(libsubdir)/cpp$(exeext)
$(INSTALL_PROGRAM) cpp$(exeext) $(libsubdir)/cpp$(exeext)
- # Install gcov if it was compiled.
+# Install gcov if it was compiled.
-if [ -f gcov$(exeext) ]; \
then \
rm -f $(bindir)/gcov$(exeext); \
@@ -2221,15 +2267,19 @@ install-driver: xgcc
fi
# Install the info files.
+# $(INSTALL_DATA) might be a relative pathname, so we can't cd into srcdir
+# to do the install. The sed rule was copied from stmp-int-hdrs.
install-info: doc installdirs lang.install-info
-rm -f $(infodir)/cpp.info* $(infodir)/gcc.info*
- cd $(srcdir); for f in cpp.info* gcc.info*; \
- do $(INSTALL_DATA) $$f $(infodir)/$$f; done
+ for f in $(srcdir)/cpp.info* $(srcdir)/gcc.info*; do \
+ realfile=`echo $$f | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
+ $(INSTALL_DATA) $$f $(infodir)/$$realfile; \
+ done
-chmod a-x $(infodir)/cpp.info* $(infodir)/gcc.info*
# Install the man pages.
install-man: installdirs $(srcdir)/gcc.1 $(srcdir)/cccp.1 lang.install-man
- -if [ -f gcc-cross ] ; then \
+ -if [ -f gcc-cross$(exeext) ] ; then \
rm -f $(mandir)/$(GCC_CROSS_NAME)$(manext); \
$(INSTALL_DATA) $(srcdir)/gcc.1 $(mandir)/$(GCC_CROSS_NAME)$(manext); \
chmod a-x $(mandir)/$(GCC_CROSS_NAME)$(manext); \
@@ -2347,33 +2397,29 @@ uninstall: lang.uninstall
# Update the tags table.
TAGS: force
cd $(srcdir); \
- mkdir temp; \
- mv -f c-parse.[ch] objc-parse.c cexp.c =*.[chy] temp; \
+ mkdir tmp-tags; \
+ mv -f c-parse.[ch] cexp.c =*.[chy] tmp-tags; \
etags *.y *.h *.c; \
- mv temp/* .; \
- rmdir temp
-
-# Create the distribution tar file.
-#dist: gcc-$(version).tar.gz
-dist: gcc.xtar.gz
+ mv tmp-tags/* .; \
+ rmdir tmp-tags
-gcc.xtar.gz: gcc.xtar
- gzip --best < gcc.xtar > tmp-gcc.xtar.gz
- mv tmp-gcc.xtar.gz gcc.xtar.gz
+# Create the distribution tar.gz file.
+dist: tmp-gcc.xtar
+ gzip --best < tmp-gcc.xtar > tmp-gcc.xtar.gz
+ mv tmp-gcc.xtar.gz gcc-$(version).tar.gz
-#gcc-$(version).tar.gz: gcc-$(version).tar
-# gzip < gcc-$(version).tar > gcc-$(version).tar.gz
-
-#gcc-$(version).tar:
-gcc.xtar: distdir
+tmp-gcc.xtar: distdir
# Make the distribution.
- tar -chf gcc.xtar gcc-$(version)
+ tar -chf tmp-gcc.xtar gcc-$(version)
+
+distdir-cvs: force
+ if [ -d $(srcdir)/CVS ]; then cvs -r update; fi
# This target exists to do the initial work before the language specific
# stuff gets done.
distdir-start: doc $(srcdir)/INSTALL $(srcdir)/c-parse.y $(srcdir)/c-gperf.h \
- $(srcdir)/objc-parse.y $(srcdir)/c-parse.c $(srcdir)/objc-parse.c \
- $(srcdir)/cexp.c
+ $(srcdir)/c-parse.c $(srcdir)/cexp.c $(srcdir)/config.in \
+ $(srcdir)/bi-parser.h $(srcdir)/bi-parser.c $(srcdir)/version.c TAGS
@if grep -s "for version ${mainversion}" gcc.texi > /dev/null; \
then true; \
else echo "You must update the version number in \`gcc.texi'"; sleep 10;\
@@ -2390,13 +2436,12 @@ distdir-start: doc $(srcdir)/INSTALL $(srcdir)/c-parse.y $(srcdir)/c-gperf.h \
mkdir tmp
mkdir tmp/config
mkdir tmp/ginclude
- mkdir tmp/objc
for file in *[0-9a-zA-Z+]; do \
ln $$file tmp > /dev/null 2>&1 || cp $$file tmp; \
done
cd config; \
for file in *[0-9a-zA-Z+]; do \
- if test -d $$file && test "$$file" != RCS; then \
+ if test -d $$file && test "$$file" != RCS && test "$$file" != CVS; then \
mkdir ../tmp/config/$$file; \
cd $$file; \
for subfile in *[0-9a-zA-Z+]; do \
@@ -2414,10 +2459,6 @@ distdir-start: doc $(srcdir)/INSTALL $(srcdir)/c-parse.y $(srcdir)/c-gperf.h \
ln $$file ../tmp/ginclude >/dev/null 2>&1 \
|| cp $$file ../tmp/ginclude; \
done
- cd objc; \
- for file in *[0-9a-zA-Z+]; do \
- ln $$file ../tmp/objc >/dev/null 2>&1 || cp $$file ../tmp/objc; \
- done
ln .gdbinit tmp
# Finish making `distdir', after the languages have done their thing.
@@ -2426,21 +2467,21 @@ distdir-finish:
# Get rid of everything we don't want in the distribution. We'd want
# this to use Makefile.in, but it doesn't have the `lang.foo' targets
# expanded.
- cd gcc-$(version); make extraclean
+ cd gcc-$(version); make extraclean VERSION_DEP=
-distdir: distdir-start lang.distdir distdir-finish
+distdir: distdir-cvs distdir-start lang.distdir distdir-finish
# make diff oldversion=M.N
# creates a diff file between an older distribution and this one.
# The -P option assumes this is GNU diff.
diff:
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h \
- -x cexp.c -x bi-parser.c -x objc-parse.y -x objc-parse.c \
- -x bi-parser.h -x TAGS \
+ -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL \
+ -x configure -x config.in \
-x "gcc.??" -x "gcc.??s" -x gcc.aux -x "gcc.info*" \
-x "cpp.??" -x "cpp.??s" -x cpp.aux -x "cpp.info*" \
$(LANG_DIFF_EXCLUDES) \
- gcc-$(oldversion) gcc-$(version) > diffs
+ gcc-$(oldversion) gcc-$(version) > gcc-$(oldversion)-$(version).diff
bootstrap: force
# Only build the C compiler for stage1, because that is the only one that
@@ -2543,14 +2584,15 @@ stage1-start:
-mv $(STAGESTUFF) stage1
# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
# dir will work properly.
- -if [ -f as$(exeext) ] ; then ln -s ../as$(exeext) stage1 || cp as$(exeext) stage1 ; else true ; fi
- -if [ -f ld$(exeext) ] ; then ln -s ../ld$(exeext) stage1 || cp ld$(exeext) stage1 ; else true ; fi
- -if [ -f collect-ld$(exeext) ] ; then ln -s ../collect-ld$(exeext) stage1 || cp collect-ld$(exeext) stage1 ; else true ; fi
+ -if [ -f as$(exeext) ] ; then $(LN) ../as$(exeext) stage1 ; else true ; fi
+ -if [ -f ld$(exeext) ] ; then $(LN) ../ld$(exeext) stage1 ; else true ; fi
+ -if [ -f collect-ld$(exeext) ] ; then $(LN) ../collect-ld$(exeext) stage1 ; else true ; fi
-rm -f stage1/libgcc.a
-cp libgcc.a stage1
-if $(RANLIB_TEST) ; then $(RANLIB) stage1/libgcc.a; else true; fi
-for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
cp stage1/$${f} . ; \
+ else true; \
fi; done
stage1: force stage1-start lang.stage1
@@ -2563,14 +2605,15 @@ stage2-start:
-mv $(STAGESTUFF) stage2
# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
# dir will work properly.
- -if [ -f as$(exeext) ] ; then ln -s ../as$(exeext) stage2 || cp as$(exeext) stage2 ; else true ; fi
- -if [ -f ld$(exeext) ] ; then ln -s ../ld$(exeext) stage2 || cp ld$(exeext) stage2 ; else true ; fi
- -if [ -f collect-ld ] ; then ln -s ../collect-ld$(exeext) stage2 || cp collect-ld$(exeext) stage2 ; else true ; fi
+ -if [ -f as$(exeext) ] ; then $(LN) ../as$(exeext) stage2 ; else true ; fi
+ -if [ -f ld$(exeext) ] ; then $(LN) ../ld$(exeext) stage2 ; else true ; fi
+ -if [ -f collect-ld ] ; then $(LN) ../collect-ld$(exeext) stage2 ; else true ; fi
-rm -f stage2/libgcc.a
-cp libgcc.a stage2
-if $(RANLIB_TEST) ; then $(RANLIB) stage2/libgcc.a; else true; fi
-for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
cp stage2/$${f} . ; \
+ else true; \
fi; done
stage2: force stage2-start lang.stage2
@@ -2583,14 +2626,15 @@ stage3-start:
-mv $(STAGESTUFF) stage3
# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
# dir will work properly.
- -if [ -f as$(exeext) ] ; then ln -s ../as$(exeext) stage3 || cp as$(exeext) stage3 ; else true ; fi
- -if [ -f ld$(exeext) ] ; then ln -s ../ld$(exeext) stage3 || cp ld$(exeext) stage3 ; else true ; fi
- -if [ -f collect-ld$(exeext) ] ; then ln -s ../collect-ld$(exeext) stage3 || cp collect-ld$(exeext) stage3 ; else true ; fi
+ -if [ -f as$(exeext) ] ; then $(LN) ../as$(exeext) stage3 ; else true ; fi
+ -if [ -f ld$(exeext) ] ; then $(LN) ../ld$(exeext) stage3 ; else true ; fi
+ -if [ -f collect-ld$(exeext) ] ; then $(LN) ../collect-ld$(exeext) stage3 ; else true ; fi
-rm -f stage3/libgcc.a
-cp libgcc.a stage3
-if $(RANLIB_TEST) ; then $(RANLIB) stage3/libgcc.a; else true; fi
-for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
cp stage3/$${f} . ; \
+ else true; \
fi; done
stage3: force stage3-start lang.stage3
@@ -2603,14 +2647,15 @@ stage4-start:
-mv $(STAGESTUFF) stage4
# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
# dir will work properly.
- -if [ -f as$(exeext) ] ; then ln -s ../as$(exeext) stage4 || cp as$(exeext) stage4 ; else true ; fi
- -if [ -f ld$(exeext) ] ; then ln -s ../ld$(exeext) stage4 || cp ld$(exeext) stage4 ; else true ; fi
- -if [ -f collect-ld$(exeext) ] ; then ln -s ../collect-ld$(exeext) stage4 || cp collect-ld$(exeext) stage4 ; else true ; fi
+ -if [ -f as$(exeext) ] ; then $(LN) ../as$(exeext) stage4 ; else true ; fi
+ -if [ -f ld$(exeext) ] ; then $(LN) ../ld$(exeext) stage4 ; else true ; fi
+ -if [ -f collect-ld$(exeext) ] ; then $(LN) ../collect-ld$(exeext) stage4 ; else true ; fi
-rm -f stage4/libgcc.a
-cp libgcc.a stage4
-if $(RANLIB_TEST) ; then $(RANLIB) stage4/libgcc.a; else true; fi
-for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
cp stage4/$${f} . ; \
+ else true; \
fi; done
stage4: force stage4-start lang.stage4
@@ -2618,7 +2663,7 @@ stage4: force stage4-start lang.stage4
# and delete the object files. Use this if you're just verifying a version
# that is pretty sure to work, and you are short of disk space.
risky-stage1: stage1
- - make clean
+ -make clean
risky-stage2: stage2
-make clean
diff --git a/gcc/NEWS b/gcc/NEWS
index 04d8a7c1017..d6d48942af7 100644
--- a/gcc/NEWS
+++ b/gcc/NEWS
@@ -1,71 +1,256 @@
-Noteworthy changes in GCC version 2.8.0:
+Noteworthy changes in GCC version 2.8.1
+---------------------------------------
-The -specs=file switch allows you to override default specs used in invoking
-programs like cc1, as, etc.
+Numerous bugs have been fixed and some minor performance
+improvements (compilation speed) have been made.
-The following new targets are supported:
+Noteworthy changes in GCC version 2.8.0
+---------------------------------------
- Solaris 2.5 running on UltraSPARC's.
- The sparclet cpu (a.out file format).
- Solaris 2.51 running on PowerPC's.
- Linux running on PowerPC's.
+A major change in this release is the addition of a framework for
+exception handling, currently used by C++. Many internal changes and
+optimization improvements have been made. These increase the
+maintainability and portability of GCC. GCC now uses autoconf to
+compute many host parameters.
-New features for the Hitachi H8/300(H).
+A new project, egcs (pronounced ``eggs''), is maintaining an
+experimental version of the GNU C compiler. The egcs compiler
+contains features that are candidates for inclusion in future versions
+of GCC. The standard GCC distribution is intended to contain a mature
+compiler that is stable and reliable; egcs aims at making experimental
+changes available to interested users at an earlier stage in their
+development process than would be appropriate for a production
+compiler. Please see <http://www.cygnus.com/egcs/> for more
+information about egcs. A major motivation for the egcs project was
+the long release cycle for GCC 2.8.0. This was due to changes for
+exception handling that took a long time to complete. In the future,
+changes of this nature can be developed in the egcs framework and not
+interfere with the frequent releases of the standard GCC distribution.
- -malign-300
- -ms
+Due to a bug fix related to exception handling, if you have previously
+built a sharable library with some recent unofficial versions of GCC
+on some systems and then rebuild the library with GCC 2.8.0, programs
+previously linked with that library may fail during initialization
+with a message about an undefined symbols __register_frame. If that
+happens, you must either relink the application or rebuild the
+sharable library with "-Wl,-u,__register_frame" on the command line.
+
+The following lists changes that add new features or targets.
+
+See cp/NEWS for new features of C++ in this release.
+
+New tools and features:
+
+ The Dwarf 2 debugging information format is supported on ELF systems, and
+ is the default for -ggdb where available. It can also be used for C++.
+ The Dwarf version 1 debugging format is also permitted for C++, but
+ does not work well.
+
+ gcov.c is provided for test coverage analysis and branch profiling
+ analysis is also supported; see -fprofile-arcs, -ftest-coverage,
+ and -fbranch-probabilities.
+
+ Support for the Checker memory checking tool.
+
+ New switch, -fstack-check, to check for stack overflow on systems that
+ don't have such built into their ABI.
+
+ New switches, -Wundef and -Wno-undef to warn if an undefined identifier
+ is evaluated in an #if directive.
+
+ Options -Wall and -Wimplicit now cause GCC to warn about implicit int
+ in declarations (e.g. `register i;'), since the C Standard committee
+ has decided to disallow this in the next revision of the standard;
+ -Wimplicit-function-declarations and -Wimplicit-int are subsets of
+ this.
+
+ Option -Wsign-compare causes GCC to warn about comparison of signed and
+ unsigned values.
+
+ Add -dI option of cccp for cxref.
+
+New features in configuration, installation and specs file handling:
+
+ New option --enable-c-cpplib to configure script.
+
+ You can use --with-cpu on the configure command to specify the default
+ CPU that GCC should generate code for.
+
+ The -specs=file switch allows you to override default specs used in
+ invoking programs like cc1, as, etc.
+
+ Allow including one specs file from another and renaming a specs
+ variable.
+
+ You can now relocate all GCC files with a single environment variable
+ or a registry entry under Windows 95 and Windows NT.
+
+Changes in Objective-C:
+
+ The Objective-C Runtime Library has been made thread-safe.
+
+ The Objective-C Runtime Library contains an interface for creating
+ mutexes, condition mutexes, and threads; it requires a back-end
+ implementation for the specific platform and/or thread package.
+ Currently supported are DEC/OSF1, IRIX, Mach, OS/2, POSIX, PCThreads,
+ Solaris, and Windows32. The --enable-threads parameter can be used
+ when configuring GCC to enable and select a thread back-end.
+
+ Objective-C is now configured as separate front-end language to GCC,
+ making it more convenient to conditionally build it.
+
+ The internal structures of the Objective-C Runtime Library have
+ changed sufficiently to warrant a new version number; now version 8.
+ Programs compiled with an older version must be recompiled.
+
+ The Objective-C Runtime Library can be built as a DLL on Windows 95
+ and Windows NT systems.
+
+ The Objective-C Runtime Library implements +load.
+
+The following new targets are supported (see also list under each
+individual CPU below):
+
+ Embedded target m32r-elf.
+ Embedded Hitachi Super-H using ELF.
+ RTEMS real-time system on various CPU targets.
+ ARC processor.
+ NEC V850 processor.
+ Matsushita MN10200 processor.
+ Matsushita MN10300 processor.
+ Sparc and PowerPC running on VxWorks.
+ Support both glibc versions 1 and 2 on Linux-based GNU systems.
+
+New features for DEC Alpha systems:
+
+ Allow detailed specification of IEEE fp support:
+ -mieee, -mieee-with-inexact, and -mieee-conformant
+ -mfp-trap-mode=xxx, -mfp-round-mode=xxx, -mtrap-precision=xxx
+ -mcpu=xxx for CPU selection
+ Support scheduling parameters for EV5.
+ Add support for BWX, CIX, and MAX instruction set extensions.
+ Support Linux-based GNU systems.
+ Support VMS.
+
+Additional supported processors and systems for MIPS targets:
+
+ MIPS4 instruction set.
+ R4100, R4300 and R5000 processors.
+ N32 and N64 ABI.
+ IRIX 6.2.
+ SNI SINIX.
+
+New features for Intel x86 family:
+
+ Add scheduling parameters for Pentium and Pentium Pro.
+ Support stabs on Solaris-x86.
+ Intel x86 processors running the SCO OpenServer 5 family.
+ Intel x86 processors running DG/UX.
+ Intel x86 using Cygwin32 or Mingw32 on Windows 95 and Windows NT.
+
+New features for Motorola 68k family:
+
+ Support for 68060 processor.
+ More consistent switches to specify processor.
+ Motorola 68k family running AUX.
+ 68040 running pSOS, ELF object files, DBX debugging.
+ Coldfire variant of Motorola m68k family.
-The -ms switch generates code for the Hitachi H8/S processor.
+New features for the HP PA RISC:
+
+ -mspace and m-no-space
+ -mlong-load-store and -mno-long-load-store
+ -mbig-switch -mno-big-switch
+
+ GCC on the PA requires either gas-2.7 or the HP assembler; for best
+ results using GAS is highly recommended. GAS is required for -g and
+ exception handling support.
New features for SPARC-based systems:
+ The ultrasparc cpu.
+ The sparclet cpu, supporting only a.out file format.
+ Sparc running SunOS 4 with the GNU assembler.
+ Sparc running the Linux-based GNU system.
+ Embedded Sparc processors running the ELF object file format.
-mcpu=xxx
-mtune=xxx
+ -malign-loops=xxx
+ -malign-jumps=xxx
+ -malign-functions=xxx
-mimpure-text and -mno-impure-text
-New features for PowerPC-based systems running either System V, Linux, Solaris,
-or embedded systems:
+ Options -mno-v8 and -mno-sparclite are no longer supported on SPARC
+ targets. Options -mcypress, -mv8, -msupersparc, -msparclite, -mf930,
+ and -mf934 are deprecated and will be deleted in GCC 2.9. Use
+ -mcpu=xxx instead.
+
+New features for rs6000 and PowerPC systems:
+
+ Solaris 2.51 running on PowerPC's.
+ The Linux-based GNU system running on PowerPC's.
+ -mcpu=604e,602,603e,620,801,823,mpc505,821,860,power2
+ -mtune=xxx
+ -mrelocatable-lib, m-no-relocatable-lib
+ -msim, -mmve, -memb
+ -mupdate, -mno-update
+ -mfused-madd, -mno-fused-madd
-mregnames
-meabi
- -mcall-linux
- -mcall-solaris
- -mcall-sysv-eabi
- -mcall-sysv-noeabi
- -msdata
- -memb
- -mtune=xxx
- -msim
- -mmvme
+ -mcall-linux, -mcall-solaris, -mcall-sysv-eabi, -mcall-sysv-noeabi
+ -msdata, -msdata=none, -msdata=default, -msdata=sysv, -msdata=eabi
+ -memb, -msim, -mmvme
+ -myellowknife, -mads
+ wchar_t is now of type long as per the ABI, not unsigned short.
+ -p/-pg support
+ -mcpu=403 now implies -mstrict-align.
+ Implement System V profiling.
+
+ Aix 4.1 GCC targets now default to -mcpu=common so that programs
+ compiled can be moved between rs6000 and powerpc based systems. A
+ consequence of this is that -static won't work, and that some programs
+ may be slightly slower.
+
+ You can select the default value to use for -mcpu=xxx on rs6000 and
+ powerpc targets by using the --with-cpu=xxx option when configuring the
+ compiler. In addition, a new options, -mtune=xxx was added that
+ selects the machine to schedule for but does not select the
+ architecture level.
+
+ Directory names used for storing the multilib libraries on System V
+ and embedded PowerPC systems have been shortened to work with commands
+ like tar that have fixed limits on pathname size.
+
+New features for the Hitachi H8/300(H):
-Options -mno-v8 and -mno-sparclite are no longer supported on SPARC
-targets. Options -mcypress, -mv8, -msupersparc, -msparclite, -mf930,
-and -mf934 are deprecated and will be deleted in GCC 2.9.
-Use -mcpu=xxx instead.
+ -malign-300
+ -ms (for the Hitachi H8/S processor)
+ -mint32
-GCC on the PA requires either gas-2.7 or the HP assembler; for best
-results using GAS is highly recommended. GAS is required for -g
-and exception handling support.
+New features for the ARM:
-Aix 4.1 GCC targets now default to -mcpu=common so that programs compiled can
-be moved between rs6000 and powerpc based systems. A consequence of this is
-that -static won't work, and that some programs may be slightly slower.
+ -march=xxx, -mtune=xxx, -mcpu=xxx
+ Support interworking with Thumb code.
+ ARM processor with a.out object format, COFF, or AOF assembler.
+ ARM on "semi-hosted" platform.
+ ARM running NetBSD.
+ ARM running the Linux-based GNU system.
-You can select the default value to use for -mcpu=xxx on rs6000 and powerpc
-targets by using the --with-cpu=xxx option when confiuring the compiler. In
-addition, a new options, -mtune=xxx was added that selects the machine to
-schedule for but does not select the architecture level.
+New feature for Solaris systems:
-Directory names used for storing the multilib libraries on System V and
-embedded PowerPC systems have been shortened to work with commands like tar
-that have fixed limits on pathname size.
+ GCC installation no longer makes a copy of system include files,
+ thus insulating GCC better from updates to the operating system.
-Noteworthy changes in GCC version 2.7.2:
+
+Noteworthy changes in GCC version 2.7.2
+---------------------------------------
A few bugs have been fixed (most notably the generation of an
invalid assembler opcode on some RS/6000 systems).
-Noteworthy changes in GCC version 2.7.1:
+Noteworthy changes in GCC version 2.7.1
+---------------------------------------
This release fixes numerous bugs (mostly minor) in GCC 2.7.0, but
also contains a few new features, mostly related to specific targets.
@@ -89,8 +274,9 @@ sequence used in GCC version 2.7.0. That calling sequence was based on the AIX
calling sequence without function descriptors. To compile code for that older
calling sequence, either configure the compiler for powerpc-*-eabiaix or use
the -mcall-aix switch when compiling and linking.
-
-Noteworthy changes in GCC version 2.7.0:
+
+Noteworthy changes in GCC version 2.7.0
+---------------------------------------
GCC now works better on systems that use ".obj" and ".exe" instead of
".o" and no extension. This involved changes to the driver program,
@@ -342,7 +528,7 @@ The following new configurations are supported:
GNU on x86 (instead of treating it like MACH)
NetBSD on Sparc and Motorola 68k
AIX 4.1 on RS/6000 and PowerPC systems
- Sequent DYNUX/ptx 1.x and 2.x.
+ Sequent DYNIX/ptx 1.x and 2.x.
Both COFF and ELF configurations on AViiON without using /bin/gcc
Windows/NT on x86 architecture; preliminary
AT&T DSP1610 digital signal processor chips
diff --git a/gcc/README b/gcc/README
new file mode 100644
index 00000000000..6426d4e9c32
--- /dev/null
+++ b/gcc/README
@@ -0,0 +1,26 @@
+This directory contains the version 2.8.1 release of the GNU C
+compiler. It includes all of the support for compiling C++ and
+Objective C, including a run-time library for Objective C.
+
+The GNU C compiler is free software. See the file COPYING for copying
+permission.
+
+See the file gcc.texi (together with other files that it includes) for
+installation and porting information. The file INSTALL contains a
+copy of the installation information, as plain ASCII.
+
+Installing this package will create various files in subdirectories of
+/usr/local/lib, which are passes used by the compiler and a library
+named libgcc.a. It will also create /usr/local/bin/gcc, which is
+the user-level command to do a compilation.
+
+See the Bugs chapter of the GCC Manual for how to report bugs
+usefully. An online readable version of the manual is in the files
+gcc.info*.
+
+The files pself.c and pself1.c are not part of GCC.
+They are programs that print themselves on standard output.
+They were written by Dario Dariol and Giovanni Cozzi, and are
+included for your hacking pleasure. Likewise pself2.c
+(Who is the author of that?) and pself3.c (by Vlad Taeerov and Rashit
+Fakhreyev).
diff --git a/gcc/README.RS6000 b/gcc/README.RS6000
index d29604f968a..6a32c164ff7 100644
--- a/gcc/README.RS6000
+++ b/gcc/README.RS6000
@@ -1,51 +1,25 @@
- AIX 3.1 and 3.2 assembler problems
+ AIX 4.3 assembler
-Specifying the -g flag to GCC on the RS/6000 requires upgrading the
-standard AIX assembler distributed with AIX 3.1 and versions of AIX
-3.2 earlier than 3.2.4 with a replacement that is available from IBM.
-Note that Makefile.in specifies the -g when compiling libgcc2.c.
+The AIX 4.3.0.0 assembler generates incorrect object files if the ".bs"
+pseudo-op references symbols in certain sections. If GCC is invoked with
+the -g debugging option (including during bootstrapping), incorrect object
+files will be produced and the AIX linker will fail with a severe error.
+A fix for APAR IX74254 (64BIT DISASSEMBLED OUPUT FROM COMPILER FAILS TO
+ASSEMBLE/BIND) is available from IBM Customer Support and IBM's
+service.boulder.ibm.com website.
-You can test for the presence of a fixed assembler by entering the following:
- % as -u < /dev/null
-If the command exits normally, the assembler fix already is installed.
-If the assembler complains that "-u" is an unknown flag, you need to order
-the fix.
-If you are running AIX 3.1 (lslpp -h bos.obj output reports
-03.01.0005.XXXX where the 0005 can be any higher number and the XXXX
-can be any value), call IBM Support at 800-237-5511 and ask for
-shipment of AIX/6000 fix PTF U403044 for APAR IX22829 (.extern foo
-conflicts with defining foo).
-
-If you are running AIX 3.2 but not 3.2.4 or later (lslpp -h bos.obj
-output reports 03.02.0000.0000), a newer update to the assembler fix
-is available. Ask for shipment of AIX/6000 fix PTF U416277 for
-IX32992 (.global prevents detection of duplicate symbol).
-
-If you are running AIX 3.2.4 or later, you already have the new
-assembler.
+ AIX 4.1 binder
-Any customer can order and get the replacement assembler, and install it on
-one or more machines. It is available on diskette from IBM Customer Support
-and from the IBM Internet fix anonymous ftp server (FixDist) at
-aix.boulder.ibm.com (198.17.57.66).
-
-If you contact IBM Customer Support, they may also ask you for your customer
-number. If you do not know it, you will still be able to get the fix, but
-you will have to be persistent. IBM has corresponding support organizations
-outside of North America. Call your IBM branch office and ask them to put
-you in touch with the department that handles fixes for AIX/6000. If that
-doesn't work, ask for the department that handles software defect support
-for AIX/6000 and ask for the APAR fix.
-
-If you use the GNU assembler instead of the system supplied assembler, you need
-an assembler modified after October 16th, 1995 in order to build the GNU C
-compiler. This is because the GNU C compiler wants to build a variant of its
-library, libgcc.a with the -mcpu=common switch to support building programs
-that can run on either the Power or PowerPC machines.
+Due to changes in the way that GCC invokes the binder (linker) for AIX 4.1,
+the link step now may produce warnings of duplicate symbols which were not
+reported before. The assembly files generated by GCC for AIX always have
+included multiple symbol definitions for certain global variable and
+function declarations in the original program. The warnings should not
+prevent the linker from producing a correct library or runnable executable.
- AIX NLS problems
+ AIX NLS problems
AIX on the RS/6000 provides support (NLS) for environments outside of
the United States. Compilers and assemblers use NLS to support
@@ -56,7 +30,7 @@ not produce the same floating-point formats that the assembler accepts.
If you have this problem, set the LANG environment variable to "C" or
"En_US".
-
+
AIX 3.2.5 XLC-1.3 problems
XLC version 1.3.0.0 distributed with AIX 3.2.5 will miscompile jump.c when
@@ -72,7 +46,7 @@ releases of xlc-1.2.1, including xlc-1.2.1.8. Newer releases of xlc-1.2.1
do not exhibit this problem: xlc-1.2.1.28 is known to bootstrap properly.
- AIX 3.2 common-mode support
+ AIX 3.2 common-mode support
AIX common-mode providing transparent support of both the POWER and PowerPC
architectures is usable in AIX 3.2.3 and above but an export file and
@@ -101,11 +75,48 @@ __quous 0x3380
and then link with -Wl,-bI:milli.exp.
- AIX 4.1 binder
+ AIX 3.1 and 3.2 assembler problems
+
+Specifying the -g flag to GCC on the RS/6000 requires upgrading the
+standard AIX assembler distributed with AIX 3.1 and versions of AIX
+3.2 earlier than 3.2.4 with a replacement that is available from IBM.
+Note that Makefile.in specifies the -g when compiling libgcc2.c.
-Due to changes in the way that GCC invokes the binder (linker) for AIX 4.1,
-the link step now may produce warnings of duplicate symbols which were not
-reported before. The assembly files generated by GCC for AIX always have
-included multiple symbol definitions for certain global variable and
-function declarations in the original program. The warnings should not
-prevent the linker from producing a correct library or runnable executable.
+You can test for the presence of a fixed assembler by entering the following:
+ % as -u < /dev/null
+If the command exits normally, the assembler fix already is installed.
+If the assembler complains that "-u" is an unknown flag, you need to order
+the fix.
+
+If you are running AIX 3.1 (lslpp -h bos.obj output reports
+03.01.0005.XXXX where the 0005 can be any higher number and the XXXX
+can be any value), call IBM Support at 800-237-5511 and ask for
+shipment of AIX/6000 fix PTF U403044 for APAR IX22829 (.extern foo
+conflicts with defining foo).
+
+If you are running AIX 3.2 but not 3.2.4 or later (lslpp -h bos.obj
+output reports 03.02.0000.0000), a newer update to the assembler fix
+is available. Ask for shipment of AIX/6000 fix PTF U416277 for
+IX32992 (.global prevents detection of duplicate symbol).
+
+If you are running AIX 3.2.4 or later, you already have the new
+assembler.
+
+Any customer can order and get the replacement assembler, and install it on
+one or more machines. It is available on diskette from IBM Customer Support
+and from the IBM Internet fix anonymous ftp server (FixDist) at
+aix.boulder.ibm.com (198.17.57.66).
+
+If you contact IBM Customer Support, they may also ask you for your customer
+number. If you do not know it, you will still be able to get the fix, but
+you will have to be persistent. IBM has corresponding support organizations
+outside of North America. Call your IBM branch office and ask them to put
+you in touch with the department that handles fixes for AIX/6000. If that
+doesn't work, ask for the department that handles software defect support
+for AIX/6000 and ask for the APAR fix.
+
+If you use the GNU assembler instead of the system supplied assembler, you need
+an assembler modified after October 16th, 1995 in order to build the GNU C
+compiler. This is because the GNU C compiler wants to build a variant of its
+library, libgcc.a with the -mcpu=common switch to support building programs
+that can run on either the Power or PowerPC machines.
diff --git a/gcc/README.X11 b/gcc/README.X11
index 359dd5f9603..ade0f5ab531 100644
--- a/gcc/README.X11
+++ b/gcc/README.X11
@@ -20,7 +20,7 @@ IF YOU THINK YOU MIGHT COMPILE X FOR SOLARIS 2, then you really don't
need this patch: get /contrib/R5.SunOS5.patch.tar.Z from
export.lcs.mit.edu instead. It has everything you need to do the
build for Solaris 2, sets you up to everything with GCC, and is
-backward compatible with Sunos 4.*. Get the the README
+backward compatible with SunOS 4.*. Get the the README
(/contrib/R5.SunOS5.patch.README at export) for more info.
If you see undefined symbols _dlopen, _dlsym, or _dlclose when linking
diff --git a/gcc/TESTS.FLUNK b/gcc/TESTS.FLUNK
new file mode 100644
index 00000000000..04641e3c8fb
--- /dev/null
+++ b/gcc/TESTS.FLUNK
@@ -0,0 +1,39 @@
+This is a collection of things that test suites have
+said were "wrong" with GCC--but that I don't agree with.
+
+First, test suites sometimes test for compatibility with
+traditional C. GCC with -traditional is not completely
+compatible with traditional C, and in some ways I think it
+should not be.
+
+* K&R C allowed \x to appear in a string literal (or character
+literal?) even in cases where it is *not* followed by a sequence of
+hex digits. I'm not convinced this is desirable.
+
+* K&R compilers allow comments to cross over an inclusion boundary (i.e.
+started in an include file and ended in the including file).
+I think this would be quite ugly and can't imagine it could
+be needed.
+
+Sometimes tests disagree with GCC's interpretation of the ANSI standard.
+
+* One test claims that this function should return 1.
+
+ enum {A, B} foo;
+
+ func (enum {B, A} arg)
+ {
+ return B;
+ }
+
+I think it should return 0, because the definition of B that
+applies is the one in func.
+
+* Some tests report failure when the compiler does not produce
+an error message for a certain program.
+
+ANSI C requires a "diagnostic" message for certain kinds of invalid
+programs, but a warning counts as a diagnostic. If GCC produces
+a warning but not an error, that is correct ANSI support.
+When test suites call this "failure", the tests are broken.
+
diff --git a/gcc/acconfig.h b/gcc/acconfig.h
index 690a21301a6..cca3a4d37ff 100644
--- a/gcc/acconfig.h
+++ b/gcc/acconfig.h
@@ -1,7 +1,5 @@
-
-/* Include the old config.h as config2.h to simplify the transition
- to autoconf. */
-#include "config2.h"
+/* Define if you have a working <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
/* Whether malloc must be declared even if <stdlib.h> is included. */
#undef NEED_DECLARATION_MALLOC
@@ -9,6 +7,21 @@
/* Whether realloc must be declared even if <stdlib.h> is included. */
#undef NEED_DECLARATION_REALLOC
+/* Whether calloc must be declared even if <stdlib.h> is included. */
+#undef NEED_DECLARATION_CALLOC
+
/* Whether free must be declared even if <stdlib.h> is included. */
#undef NEED_DECLARATION_FREE
+
+/* Whether index must be declared even if <stdlib.h> is included. */
+#undef NEED_DECLARATION_INDEX
+
+/* Whether rindex must be declared even if <stdlib.h> is included. */
+#undef NEED_DECLARATION_RINDEX
+
+/* Whether getenv must be declared even if <stdlib.h> is included. */
+#undef NEED_DECLARATION_GETENV
+
+/* Whether sbrk must be declared even if <stdlib.h> is included. */
+#undef NEED_DECLARATION_SBRK
@TOP@
diff --git a/gcc/aclocal.m4 b/gcc/aclocal.m4
index 6a45a4cfb81..07424f1e9a0 100644
--- a/gcc/aclocal.m4
+++ b/gcc/aclocal.m4
@@ -16,6 +16,12 @@ AC_CACHE_VAL(gcc_cv_decl_needed_$1,
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
+#endif
+#ifndef HAVE_RINDEX
+#define rindex strrchr
+#endif
+#ifndef HAVE_INDEX
+#define index strchr
#endif],
[char *(*pfn) = (char *(*)) $1],
gcc_cv_decl_needed_$1=no, gcc_cv_decl_needed_$1=yes)])
diff --git a/gcc/basic-block.h b/gcc/basic-block.h
index 4614b700380..c76d8507b7c 100644
--- a/gcc/basic-block.h
+++ b/gcc/basic-block.h
@@ -73,6 +73,12 @@ do { \
#define EXECUTE_IF_AND_COMPL_IN_REG_SET(REGSET1, REGSET2, MIN, REGNUM, CODE) \
EXECUTE_IF_AND_COMPL_IN_BITMAP (REGSET1, REGSET2, MIN, REGNUM, CODE)
+/* Loop over all registers in REGSET1 and REGSET2, starting with MIN, setting
+ REGNUM to the register number and executing CODE for all registers that are
+ set in both regsets. */
+#define EXECUTE_IF_AND_IN_REG_SET(REGSET1, REGSET2, MIN, REGNUM, CODE) \
+ EXECUTE_IF_AND_IN_BITMAP (REGSET1, REGSET2, MIN, REGNUM, CODE)
+
/* Allocate a register set with oballoc. */
#define OBSTACK_ALLOC_REG_SET(OBSTACK) BITMAP_OBSTACK_ALLOC (OBSTACK)
diff --git a/gcc/bc-emit.c b/gcc/bc-emit.c
index c93195df9e1..e67011dff7e 100644
--- a/gcc/bc-emit.c
+++ b/gcc/bc-emit.c
@@ -1,5 +1,5 @@
/* Output bytecodes for GNU C-compiler.
- Copyright (C) 1993, 1994, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1993, 1994, 1996, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -20,6 +20,7 @@ Boston, MA 02111-1307, USA. */
#include "config.h"
+#include <stdio.h>
#ifdef __STDC__
#include <stdarg.h>
#else
@@ -38,8 +39,6 @@ Boston, MA 02111-1307, USA. */
#include "bc-typecd.h"
#include "bi-run.h"
-#include <stdio.h>
-
extern char *xmalloc (), *xrealloc ();
extern struct obstack *rtl_obstack;
diff --git a/gcc/bc-optab.c b/gcc/bc-optab.c
index 3d3e539728d..4837d33850f 100644
--- a/gcc/bc-optab.c
+++ b/gcc/bc-optab.c
@@ -1,5 +1,5 @@
/* Bytecode conversion definitions for GNU C-compiler.
- Copyright (C) 1993, 1994 Free Software Foundation, Inc.
+ Copyright (C) 1993, 1994, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -20,6 +20,10 @@ Boston, MA 02111-1307, USA. */
#include "config.h"
+#include <stdio.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
#include "tree.h"
#include "rtl.h"
#include "machmode.h"
diff --git a/gcc/bitmap.c b/gcc/bitmap.c
index 0dec06ae82a..f982f46392a 100644
--- a/gcc/bitmap.c
+++ b/gcc/bitmap.c
@@ -18,20 +18,25 @@ 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 <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "flags.h"
#include "obstack.h"
#include "regs.h"
#include "basic-block.h"
-/* The contents of the current function definition are allocated
- in this obstack, and all are freed at the end of the function.
- For top-level functions, this is temporary_obstack.
- Separate obstacks are made for nested functions. */
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
-extern struct obstack *function_obstack;
+#ifdef NEED_DECLARATION_FREE
+extern void free PROTO((void *));
+#endif
+
+/* Obstack to allocate bitmap elements from. */
+static struct obstack bitmap_obstack;
+static int bitmap_obstack_init = FALSE;
#ifndef INLINE
@@ -95,8 +100,39 @@ bitmap_element_allocate (head)
bitmap_free = element->next;
}
else
- element = (bitmap_element *) obstack_alloc (function_obstack,
- sizeof (bitmap_element));
+ {
+ /* We can't use gcc_obstack_init to initialize the obstack since
+ print-rtl.c now calls bitmap functions, and bitmap is linked
+ into the gen* functions. */
+ if (!bitmap_obstack_init)
+ {
+ bitmap_obstack_init = TRUE;
+
+ /* Let particular systems override the size of a chunk. */
+#ifndef OBSTACK_CHUNK_SIZE
+#define OBSTACK_CHUNK_SIZE 0
+#endif
+ /* Let them override the alloc and free routines too. */
+#ifndef OBSTACK_CHUNK_ALLOC
+#define OBSTACK_CHUNK_ALLOC xmalloc
+#endif
+#ifndef OBSTACK_CHUNK_FREE
+#define OBSTACK_CHUNK_FREE free
+#endif
+
+#if !defined(__GNUC__) || (__GNUC__ < 2)
+#define __alignof__(type) 0
+#endif
+
+ obstack_specify_allocation (&bitmap_obstack, OBSTACK_CHUNK_SIZE,
+ __alignof__ (bitmap_element),
+ (void *(*) ()) OBSTACK_CHUNK_ALLOC,
+ (void (*) ()) OBSTACK_CHUNK_FREE);
+ }
+
+ element = (bitmap_element *) obstack_alloc (&bitmap_obstack,
+ sizeof (bitmap_element));
+ }
#if BITMAP_ELEMENT_WORDS == 2
element->bits[0] = element->bits[1] = 0;
@@ -573,11 +609,37 @@ debug_bitmap (head)
bitmap_debug_file (stdout, head);
}
-/* Release any memory allocated by bitmaps. Since we allocate off of the
- function_obstack, just zap the free list. */
+/* Function to print out the contents of a bitmap. Unlike bitmap_debug_file,
+ it does not print anything but the bits. */
+
+void
+bitmap_print (file, head, prefix, suffix)
+ FILE *file;
+ bitmap head;
+ char *prefix;
+ char *suffix;
+{
+ char *comma = "";
+ int i;
+
+ fputs (prefix, file);
+ EXECUTE_IF_SET_IN_BITMAP (head, 0, i,
+ {
+ fprintf (file, "%s%d", comma, i);
+ comma = ", ";
+ });
+ fputs (suffix, file);
+}
+
+/* Release any memory allocated by bitmaps. */
void
bitmap_release_memory ()
{
bitmap_free = 0;
+ if (bitmap_obstack_init)
+ {
+ bitmap_obstack_init = FALSE;
+ obstack_free (&bitmap_obstack, NULL_PTR);
+ }
}
diff --git a/gcc/bitmap.h b/gcc/bitmap.h
index a01e398c287..2df648965f5 100644
--- a/gcc/bitmap.h
+++ b/gcc/bitmap.h
@@ -86,7 +86,10 @@ extern int bitmap_bit_p PROTO((bitmap, int));
/* Debug functions to print a bitmap linked list. */
extern void bitmap_debug PROTO((bitmap));
-extern void bitmap_debug_file STDIO_PROTO((FILE *, bitmap));
+extern void bitmap_debug_file PROTO((FILE *, bitmap));
+
+/* Print a bitmap */
+extern void bitmap_print PROTO((FILE *, bitmap, char *, char *));
/* Initialize a bitmap header. */
extern bitmap bitmap_initialize PROTO((bitmap));
@@ -197,7 +200,7 @@ do { \
for (; ptr1_ != 0 ; ptr1_ = ptr1_->next) \
{ \
/* Advance BITMAP2 to the equivalent link, using an all \
- zero element if an equavialent link doesn't exist. */ \
+ zero element if an equivalent link doesn't exist. */ \
bitmap_element *tmp2_; \
\
while (ptr2_ != 0 && ptr2_->indx < ptr1_->indx) \
@@ -237,3 +240,76 @@ do { \
word_num_ = 0; \
} \
} while (0)
+
+/* Loop over all bits in BITMAP1 and BITMAP2, starting with MIN, setting
+ BITNUM to the bit number and executing CODE for all bits that are set in
+ the both bitmaps. */
+
+#define EXECUTE_IF_AND_IN_BITMAP(BITMAP1, BITMAP2, MIN, BITNUM, CODE) \
+do { \
+ bitmap_element *ptr1_ = (BITMAP1)->first; \
+ bitmap_element *ptr2_ = (BITMAP2)->first; \
+ unsigned int indx_ = (MIN) / BITMAP_ELEMENT_ALL_BITS; \
+ unsigned bit_num_ = (MIN) % ((unsigned) HOST_BITS_PER_WIDE_INT); \
+ unsigned word_num_ = (((MIN) / ((unsigned) HOST_BITS_PER_WIDE_INT)) \
+ % BITMAP_ELEMENT_WORDS); \
+ \
+ /* Find the block the minimum bit is in in the first bitmap. */ \
+ while (ptr1_ != 0 && ptr1_->indx < indx_) \
+ ptr1_ = ptr1_->next; \
+ \
+ if (ptr1_ != 0 && ptr1_->indx != indx_) \
+ { \
+ bit_num_ = 0; \
+ word_num_ = 0; \
+ } \
+ \
+ for (; ptr1_ != 0 ; ptr1_ = ptr1_->next) \
+ { \
+ /* Advance BITMAP2 to the equivalent link */ \
+ while (ptr2_ != 0 && ptr2_->indx < ptr1_->indx) \
+ ptr2_ = ptr2_->next; \
+ \
+ if (ptr2_ == 0) \
+ { \
+ /* If there are no more elements in BITMAP2, exit loop now.*/ \
+ ptr1_ = (bitmap_element *)0; \
+ break; \
+ } \
+ else if (ptr2_->indx > ptr1_->indx) \
+ { \
+ bit_num_ = word_num_ = 0; \
+ continue; \
+ } \
+ \
+ for (; word_num_ < BITMAP_ELEMENT_WORDS; word_num_++) \
+ { \
+ unsigned HOST_WIDE_INT word_ = (ptr1_->bits[word_num_] \
+ & ptr2_->bits[word_num_]); \
+ if (word_ != 0) \
+ { \
+ for (; bit_num_ < HOST_BITS_PER_WIDE_INT; bit_num_++) \
+ { \
+ unsigned HOST_WIDE_INT mask_ \
+ = ((unsigned HOST_WIDE_INT)1) << bit_num_; \
+ \
+ if ((word_ & mask_) != 0) \
+ { \
+ word_ &= ~ mask_; \
+ (BITNUM) = (ptr1_->indx * BITMAP_ELEMENT_ALL_BITS \
+ + word_num_ * HOST_BITS_PER_WIDE_INT \
+ + bit_num_); \
+ \
+ CODE; \
+ if (word_ == 0) \
+ break; \
+ } \
+ } \
+ } \
+ \
+ bit_num_ = 0; \
+ } \
+ \
+ word_num_ = 0; \
+ } \
+} while (0)
diff --git a/gcc/c-aux-info.c b/gcc/c-aux-info.c
index 2114a86e959..a14d6225664 100644
--- a/gcc/c-aux-info.c
+++ b/gcc/c-aux-info.c
@@ -1,7 +1,7 @@
/* Generate information regarding function declarations and definitions based
on information stored in GCC's tree structure. This code implements the
-aux-info option.
- Copyright (C) 1989, 1991, 1994, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1989, 1991, 1994, 1995, 1997 Free Software Foundation, Inc.
Contributed by Ron Guilmette (rfg@segfault.us.com).
This file is part of GNU CC.
@@ -21,8 +21,8 @@ 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 <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "flags.h"
#include "tree.h"
#include "c-tree.h"
@@ -39,14 +39,14 @@ typedef enum formals_style_enum formals_style;
static char *data_type;
-static char *concat ();
-static char *concat3 ();
-static char *gen_formal_list_for_type ();
-static int deserves_ellipsis ();
-static char *gen_formal_list_for_func_def ();
-static char *gen_type ();
-static char *gen_decl ();
-void gen_aux_info_record ();
+static char *concat PROTO((char *, char *));
+static char *concat3 PROTO((char *, char *, char *));
+static char *affix_data_type PROTO((char *));
+static char *gen_formal_list_for_type PROTO((tree, formals_style));
+static int deserves_ellipsis PROTO((tree));
+static char *gen_formal_list_for_func_def PROTO((tree, formals_style));
+static char *gen_type PROTO((char *, tree, formals_style));
+static char *gen_decl PROTO((tree, int, formals_style));
/* Take two strings and mash them together into a newly allocated area. */
diff --git a/gcc/c-common.c b/gcc/c-common.c
index c282f16663e..aa5e4cea500 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -1,5 +1,5 @@
/* Subroutines shared by all languages that are variants of C.
- Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -19,12 +19,12 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "config.h"
+#include <stdio.h>
#include "tree.h"
#include "c-lex.h"
#include "c-tree.h"
#include "flags.h"
#include "obstack.h"
-#include <stdio.h>
#include <ctype.h>
#ifndef WCHAR_TYPE_SIZE
@@ -51,6 +51,61 @@ static void add_attribute PROTO((enum attrs, char *,
static void init_attributes PROTO((void));
static void record_international_format PROTO((tree, tree, int));
+/* Keep a stack of if statements. The value recorded is the number of
+ compound statements seen up to the if keyword. */
+static int *if_stack;
+
+/* Amount of space in the if statement stack. */
+static int if_stack_space = 0;
+
+/* Stack pointer. */
+static int if_stack_pointer = 0;
+
+void
+c_expand_start_cond (cond, exitflag, compstmt_count)
+ tree cond;
+ int exitflag;
+ int compstmt_count;
+{
+ /* Make sure there is enough space on the stack. */
+ if (if_stack_space == 0)
+ {
+ if_stack_space = 10;
+ if_stack = (int *)xmalloc (10 * sizeof (int));
+ }
+ else if (if_stack_space == if_stack_pointer)
+ {
+ if_stack_space += 10;
+ if_stack = (int *)xrealloc (if_stack, if_stack_space * sizeof (int));
+ }
+
+ /* Record this if statement. */
+ if_stack[if_stack_pointer++] = compstmt_count;
+
+ expand_start_cond (cond, exitflag);
+}
+
+void
+c_expand_end_cond ()
+{
+ if_stack_pointer--;
+ expand_end_cond ();
+}
+
+void
+c_expand_start_else ()
+{
+ if (warn_parentheses
+ && if_stack_pointer > 1
+ && if_stack[if_stack_pointer - 1] == if_stack[if_stack_pointer - 2])
+ warning ("suggest explicit braces to avoid ambiguous `else'");
+
+ /* This if statement can no longer cause a dangling else. */
+ if_stack[if_stack_pointer - 1]--;
+
+ expand_start_else ();
+}
+
/* Make bindings for __FUNCTION__ and __PRETTY_FUNCTION__. */
void
@@ -268,7 +323,7 @@ init_attributes ()
add_attribute (A_COMMON, "common", 0, 0, 1);
add_attribute (A_NORETURN, "noreturn", 0, 0, 1);
add_attribute (A_NORETURN, "volatile", 0, 0, 1);
- add_attribute (A_UNUSED, "unused", 0, 0, 1);
+ add_attribute (A_UNUSED, "unused", 0, 0, 0);
add_attribute (A_CONST, "const", 0, 0, 1);
add_attribute (A_T_UNION, "transparent_union", 0, 0, 0);
add_attribute (A_CONSTRUCTOR, "constructor", 0, 0, 1);
@@ -385,8 +440,11 @@ decl_attributes (node, attributes, prefix_attributes)
break;
case A_UNUSED:
- if (TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == VAR_DECL
- || TREE_CODE (decl) == FUNCTION_DECL)
+ if (is_type)
+ TREE_USED (type) = 1;
+ else if (TREE_CODE (decl) == PARM_DECL
+ || TREE_CODE (decl) == VAR_DECL
+ || TREE_CODE (decl) == FUNCTION_DECL)
TREE_USED (decl) = 1;
else
warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
@@ -860,37 +918,39 @@ typedef struct {
/* Type of argument if length modifier `L' is used.
If NULL, then this modifier is not allowed. */
tree *bigllen;
+ /* Type of argument if length modifier `Z' is used.
+ If NULL, then this modifier is not allowed. */
+ tree *zlen;
/* List of other modifier characters allowed with these options. */
char *flag_chars;
} format_char_info;
static format_char_info print_char_table[] = {
- { "di", 0, T_I, T_I, T_L, T_LL, T_LL, "-wp0 +" },
- { "oxX", 0, T_UI, T_UI, T_UL, T_ULL, T_ULL, "-wp0#" },
- { "u", 0, T_UI, T_UI, T_UL, T_ULL, T_ULL, "-wp0" },
-/* Two GNU extensions. */
- { "Z", 0, T_ST, NULL, NULL, NULL, NULL, "-wp0" },
- { "m", 0, T_V, NULL, NULL, NULL, NULL, "-wp" },
- { "feEgG", 0, T_D, NULL, NULL, NULL, T_LD, "-wp0 +#" },
- { "c", 0, T_I, NULL, T_W, NULL, NULL, "-w" },
- { "C", 0, T_W, NULL, NULL, NULL, NULL, "-w" },
- { "s", 1, T_C, NULL, T_W, NULL, NULL, "-wp" },
- { "S", 1, T_W, NULL, NULL, NULL, NULL, "-wp" },
- { "p", 1, T_V, NULL, NULL, NULL, NULL, "-w" },
- { "n", 1, T_I, T_S, T_L, T_LL, NULL, "" },
+ { "di", 0, T_I, T_I, T_L, T_LL, T_LL, T_ST, "-wp0 +" },
+ { "oxX", 0, T_UI, T_UI, T_UL, T_ULL, T_ULL, T_ST, "-wp0#" },
+ { "u", 0, T_UI, T_UI, T_UL, T_ULL, T_ULL, T_ST, "-wp0" },
+/* A GNU extension. */
+ { "m", 0, T_V, NULL, NULL, NULL, NULL, NULL, "-wp" },
+ { "feEgGaA", 0, T_D, NULL, NULL, NULL, T_LD, NULL, "-wp0 +#" },
+ { "c", 0, T_I, NULL, T_W, NULL, NULL, NULL, "-w" },
+ { "C", 0, T_W, NULL, NULL, NULL, NULL, NULL, "-w" },
+ { "s", 1, T_C, NULL, T_W, NULL, NULL, NULL, "-wp" },
+ { "S", 1, T_W, NULL, NULL, NULL, NULL, NULL, "-wp" },
+ { "p", 1, T_V, NULL, NULL, NULL, NULL, NULL, "-w" },
+ { "n", 1, T_I, T_S, T_L, T_LL, NULL, NULL, "" },
{ NULL }
};
static format_char_info scan_char_table[] = {
- { "di", 1, T_I, T_S, T_L, T_LL, T_LL, "*" },
- { "ouxX", 1, T_UI, T_US, T_UL, T_ULL, T_ULL, "*" },
- { "efgEG", 1, T_F, NULL, T_D, NULL, T_LD, "*" },
- { "sc", 1, T_C, NULL, T_W, NULL, NULL, "*a" },
- { "[", 1, T_C, NULL, NULL, NULL, NULL, "*a" },
- { "C", 1, T_W, NULL, NULL, NULL, NULL, "*" },
- { "S", 1, T_W, NULL, NULL, NULL, NULL, "*" },
- { "p", 2, T_V, NULL, NULL, NULL, NULL, "*" },
- { "n", 1, T_I, T_S, T_L, T_LL, NULL, "" },
+ { "di", 1, T_I, T_S, T_L, T_LL, T_LL, NULL, "*" },
+ { "ouxX", 1, T_UI, T_US, T_UL, T_ULL, T_ULL, NULL, "*" },
+ { "efgEGaA", 1, T_F, NULL, T_D, NULL, T_LD, NULL, "*" },
+ { "sc", 1, T_C, NULL, T_W, NULL, NULL, NULL, "*a" },
+ { "[", 1, T_C, NULL, NULL, NULL, NULL, NULL, "*a" },
+ { "C", 1, T_W, NULL, NULL, NULL, NULL, NULL, "*" },
+ { "S", 1, T_W, NULL, NULL, NULL, NULL, NULL, "*" },
+ { "p", 2, T_V, NULL, NULL, NULL, NULL, NULL, "*" },
+ { "n", 1, T_I, T_S, T_L, T_LL, NULL, NULL, "" },
{ NULL }
};
@@ -1229,12 +1289,15 @@ check_format_info (info, params)
if (index (flag_chars, *format_chars) != 0)
{
sprintf (message, "repeated `%c' flag in format",
- *format_chars);
+ *format_chars++);
warning (message);
}
- i = strlen (flag_chars);
- flag_chars[i++] = *format_chars++;
- flag_chars[i] = 0;
+ else
+ {
+ i = strlen (flag_chars);
+ flag_chars[i++] = *format_chars++;
+ flag_chars[i] = 0;
+ }
}
/* "If the space and + flags both appear,
the space flag will be ignored." */
@@ -1334,6 +1397,12 @@ check_format_info (info, params)
pedwarn ("ANSI C does not support the `%c' length modifier",
length_char);
}
+ else if (*format_chars == 'Z')
+ {
+ length_char = *format_chars++;
+ if (pedantic)
+ pedwarn ("ANSI C does not support the `Z' length modifier");
+ }
else
length_char = 0;
if (length_char == 'l' && *format_chars == 'l')
@@ -1343,10 +1412,15 @@ check_format_info (info, params)
pedwarn ("ANSI C does not support the `ll' length modifier");
}
aflag = 0;
- if (*format_chars == 'a')
+ if (*format_chars == 'a' && info->is_scan)
{
- aflag = 1;
- format_chars++;
+ if (format_chars[1] == 's' || format_chars[1] == 'S'
+ || format_chars[1] == '[')
+ {
+ /* `a' is used as a flag. */
+ aflag = 1;
+ format_chars++;
+ }
}
if (suppressed && length_char != 0)
{
@@ -1451,6 +1525,7 @@ check_format_info (info, params)
case 'l': wanted_type = fci->llen ? *(fci->llen) : 0; break;
case 'q': wanted_type = fci->qlen ? *(fci->qlen) : 0; break;
case 'L': wanted_type = fci->bigllen ? *(fci->bigllen) : 0; break;
+ case 'Z': wanted_type = fci->zlen ? *fci->zlen : 0; break;
}
if (wanted_type == 0)
{
@@ -1485,6 +1560,8 @@ check_format_info (info, params)
++arg_num;
cur_type = TREE_TYPE (cur_param);
+ STRIP_NOPS (cur_param);
+
/* Check the types of any additional pointer arguments
that precede the "real" argument. */
for (i = 0; i < fci->pointer_count + aflag; ++i)
@@ -1492,6 +1569,12 @@ check_format_info (info, params)
if (TREE_CODE (cur_type) == POINTER_TYPE)
{
cur_type = TREE_TYPE (cur_type);
+
+ if (TREE_CODE (cur_param) == ADDR_EXPR)
+ cur_param = TREE_OPERAND (cur_param, 0);
+ else
+ cur_param = 0;
+
continue;
}
if (TREE_CODE (cur_type) != ERROR_MARK)
@@ -1506,6 +1589,21 @@ check_format_info (info, params)
break;
}
+ /* See if this is an attempt to write into a const type with
+ scanf. */
+ if (info->is_scan && i == fci->pointer_count + aflag
+ && wanted_type != 0
+ && TREE_CODE (cur_type) != ERROR_MARK
+ && (TYPE_READONLY (cur_type)
+ || (cur_param != 0
+ && (TREE_CODE_CLASS (TREE_CODE (cur_param)) == 'c'
+ || (TREE_CODE_CLASS (TREE_CODE (cur_param)) == 'd'
+ && TREE_READONLY (cur_param))))))
+ {
+ sprintf (message, "writing into constant object (arg %d)", arg_num);
+ warning (message);
+ }
+
/* Check the type of the "real" argument, if there's a type we want. */
if (i == fci->pointer_count + aflag && wanted_type != 0
&& TREE_CODE (cur_type) != ERROR_MARK
@@ -1856,7 +1954,7 @@ void
binary_op_error (code)
enum tree_code code;
{
- register char *opname = "unknown";
+ register char *opname;
switch (code)
{
@@ -1909,6 +2007,8 @@ binary_op_error (code)
case LROTATE_EXPR:
case RROTATE_EXPR:
opname = "rotate"; break;
+ default:
+ opname = "unknown"; break;
}
error ("invalid operands to binary %s", opname);
}
@@ -1995,6 +2095,8 @@ shorten_compare (op0_ptr, op1_ptr, restype_ptr, rescode_ptr)
case GE_EXPR:
code = LE_EXPR;
break;
+ default:
+ break;
}
*rescode_ptr = code;
}
@@ -2125,6 +2227,9 @@ shorten_compare (op0_ptr, op1_ptr, restype_ptr, rescode_ptr)
primop1 = TYPE_MAX_VALUE (type);
val = 0;
break;
+
+ default:
+ break;
}
type = unsigned_type (type);
}
@@ -2222,6 +2327,10 @@ shorten_compare (op0_ptr, op1_ptr, restype_ptr, rescode_ptr)
primop0))))
warning ("unsigned value < 0 is always 0");
value = boolean_false_node;
+ break;
+
+ default:
+ break;
}
if (value != 0)
@@ -2409,6 +2518,9 @@ truthvalue_conversion (expr)
if (warn_parentheses && C_EXP_ORIGINAL_CODE (expr) == MODIFY_EXPR)
warning ("suggest parentheses around assignment used as truth value");
break;
+
+ default:
+ break;
}
if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index 4662d39f2dd..9691e7c423c 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -1,5 +1,5 @@
/* Process declarations and variables for C compiler.
- Copyright (C) 1988, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1988, 92-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -27,12 +27,12 @@ Boston, MA 02111-1307, USA. */
line numbers. For example, the CONST_DECLs for enum values. */
#include "config.h"
+#include <stdio.h>
#include "tree.h"
#include "flags.h"
#include "output.h"
#include "c-tree.h"
#include "c-lex.h"
-#include <stdio.h>
/* In grokdeclarator, distinguish syntactic contexts of declarators. */
enum decl_context
@@ -471,9 +471,14 @@ int explicit_flag_signed_bitfields = 0;
int flag_no_ident = 0;
-/* Nonzero means warn about implicit declarations. */
+/* Nonzero means warn about use of implicit int. */
+
+int warn_implicit_int;
-int warn_implicit;
+/* Nonzero means message about use of implicit function declarations;
+ 1 means warning; 2 means error. */
+
+int mesg_implicit_function_declaration;
/* Nonzero means give string constants the type `const char *'
to get extra warnings from them. These warnings will be too numerous
@@ -553,9 +558,10 @@ int warn_missing_braces;
int warn_main;
-/* Warn about comparison of signed and unsigned values. */
+/* Warn about comparison of signed and unsigned values.
+ If -1, neither -Wsign-compare nor -Wno-sign-compare has been specified. */
-int warn_sign_compare;
+int warn_sign_compare = -1;
/* Nonzero means `$' can be in an identifier. */
@@ -647,10 +653,24 @@ c_decode_option (p)
flag_no_ident = 0;
else if (!strcmp (p, "-ansi"))
flag_no_asm = 1, flag_no_nonansi_builtin = 1;
+ else if (!strcmp (p, "-Werror-implicit-function-declaration"))
+ mesg_implicit_function_declaration = 2;
+ else if (!strcmp (p, "-Wimplicit-function-declaration"))
+ mesg_implicit_function_declaration = 1;
+ else if (!strcmp (p, "-Wno-implicit-function-declaration"))
+ mesg_implicit_function_declaration = 0;
+ else if (!strcmp (p, "-Wimplicit-int"))
+ warn_implicit_int = 1;
+ else if (!strcmp (p, "-Wno-implicit-int"))
+ warn_implicit_int = 0;
else if (!strcmp (p, "-Wimplicit"))
- warn_implicit = 1;
+ {
+ warn_implicit_int = 1;
+ if (mesg_implicit_function_declaration != 2)
+ mesg_implicit_function_declaration = 1;
+ }
else if (!strcmp (p, "-Wno-implicit"))
- warn_implicit = 0;
+ warn_implicit_int = 0, mesg_implicit_function_declaration = 0;
else if (!strcmp (p, "-Wwrite-strings"))
warn_write_strings = 1;
else if (!strcmp (p, "-Wno-write-strings"))
@@ -750,7 +770,8 @@ c_decode_option (p)
warning about not using it without also specifying -O. */
if (warn_uninitialized != 1)
warn_uninitialized = 2;
- warn_implicit = 1;
+ warn_implicit_int = 1;
+ mesg_implicit_function_declaration = 1;
warn_return_type = 1;
warn_unused = 1;
warn_switch = 1;
@@ -758,7 +779,6 @@ c_decode_option (p)
warn_char_subscripts = 1;
warn_parentheses = 1;
warn_missing_braces = 1;
- warn_sign_compare = 1;
/* We set this to 2 here, but 1 in -Wmain, so -ffreestanding can turn
it off only if it's not explicit. */
warn_main = 2;
@@ -1738,7 +1758,7 @@ duplicate_decls (newdecl, olddecl, different_binding_level)
/* Optionally warn about more than one declaration for the same name. */
if (errmsg == 0 && warn_redundant_decls && DECL_SOURCE_LINE (olddecl) != 0
- /* Dont warn about a function declaration
+ /* Don't warn about a function declaration
followed by a definition. */
&& !(TREE_CODE (newdecl) == FUNCTION_DECL && DECL_INITIAL (newdecl) != 0
&& DECL_INITIAL (olddecl) == 0)
@@ -1948,13 +1968,14 @@ duplicate_decls (newdecl, olddecl, different_binding_level)
}
if (different_binding_level)
{
- /* Don't output a duplicate symbol for this declaration. */
- TREE_ASM_WRITTEN (newdecl) = 1;
+ /* Don't output a duplicate symbol or debugging information for this
+ declaration. */
+ TREE_ASM_WRITTEN (newdecl) = DECL_IGNORED_P (newdecl) = 1;
return 0;
}
/* Copy most of the decl-specific fields of NEWDECL into OLDDECL.
- But preserve OLDdECL's DECL_UID. */
+ But preserve OLDDECL's DECL_UID. */
{
register unsigned olddecl_uid = DECL_UID (olddecl);
@@ -2112,7 +2133,8 @@ pushdecl (x)
if (TYPE_NAME (TREE_TYPE (x)) == 0)
TYPE_NAME (TREE_TYPE (x)) = x;
}
- else if (TREE_TYPE (x) != error_mark_node)
+ else if (TREE_TYPE (x) != error_mark_node
+ && DECL_ORIGINAL_TYPE (x) == NULL_TREE)
{
tree tt = TREE_TYPE (x);
DECL_ORIGINAL_TYPE (x) = tt;
@@ -2467,9 +2489,15 @@ implicitly_declare (functionid)
rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
- if (warn_implicit && implicit_warning)
- warning ("implicit declaration of function `%s'",
- IDENTIFIER_POINTER (functionid));
+ if (mesg_implicit_function_declaration && implicit_warning)
+ {
+ if (mesg_implicit_function_declaration == 2)
+ error ("implicit declaration of function `%s'",
+ IDENTIFIER_POINTER (functionid));
+ else
+ warning ("implicit declaration of function `%s'",
+ IDENTIFIER_POINTER (functionid));
+ }
else if (warn_traditional && traditional_warning)
warning ("function `%s' was previously declared within a block",
IDENTIFIER_POINTER (functionid));
@@ -2849,7 +2877,7 @@ init_decl_processing ()
tree traditional_ptr_type_node;
/* Data types of memcpy and strlen. */
tree memcpy_ftype, memset_ftype, strlen_ftype;
- tree void_ftype_any;
+ tree void_ftype_any, ptr_ftype_void, ptr_ftype_ptr;
int wchar_type_size;
tree temp;
tree array_domain_type;
@@ -3165,6 +3193,11 @@ init_decl_processing ()
sizetype,
endlink))));
+ ptr_ftype_void = build_function_type (ptr_type_node, endlink);
+ ptr_ftype_ptr
+ = build_function_type (ptr_type_node,
+ tree_cons (NULL_TREE, ptr_type_node, endlink));
+
builtin_function ("__builtin_constant_p", default_function_type,
BUILT_IN_CONSTANT_P, NULL_PTR);
@@ -3182,6 +3215,42 @@ init_decl_processing ()
endlink)),
BUILT_IN_FRAME_ADDRESS, NULL_PTR);
+ builtin_function ("__builtin_aggregate_incoming_address",
+ build_function_type (ptr_type_node, NULL_TREE),
+ BUILT_IN_AGGREGATE_INCOMING_ADDRESS, NULL_PTR);
+
+ /* Hooks for the DWARF 2 __throw routine. */
+ builtin_function ("__builtin_unwind_init",
+ build_function_type (void_type_node, endlink),
+ BUILT_IN_UNWIND_INIT, NULL_PTR);
+ builtin_function ("__builtin_fp", ptr_ftype_void, BUILT_IN_FP, NULL_PTR);
+ builtin_function ("__builtin_sp", ptr_ftype_void, BUILT_IN_SP, NULL_PTR);
+ builtin_function ("__builtin_dwarf_fp_regnum",
+ build_function_type (unsigned_type_node, endlink),
+ BUILT_IN_DWARF_FP_REGNUM, NULL_PTR);
+ builtin_function ("__builtin_dwarf_reg_size", int_ftype_int,
+ BUILT_IN_DWARF_REG_SIZE, NULL_PTR);
+ builtin_function ("__builtin_frob_return_addr", ptr_ftype_ptr,
+ BUILT_IN_FROB_RETURN_ADDR, NULL_PTR);
+ builtin_function ("__builtin_extract_return_addr", ptr_ftype_ptr,
+ BUILT_IN_EXTRACT_RETURN_ADDR, NULL_PTR);
+ builtin_function ("__builtin_set_return_addr_reg",
+ build_function_type (void_type_node,
+ tree_cons (NULL_TREE,
+ ptr_type_node,
+ endlink)),
+ BUILT_IN_SET_RETURN_ADDR_REG, NULL_PTR);
+ builtin_function ("__builtin_eh_stub", ptr_ftype_void,
+ BUILT_IN_EH_STUB, NULL_PTR);
+ builtin_function
+ ("__builtin_set_eh_regs",
+ build_function_type (void_type_node,
+ tree_cons (NULL_TREE, ptr_type_node,
+ tree_cons (NULL_TREE,
+ type_for_mode (ptr_mode, 0),
+ endlink))),
+ BUILT_IN_SET_EH_REGS, NULL_PTR);
+
builtin_function ("__builtin_alloca",
build_function_type (ptr_type_node,
tree_cons (NULL_TREE,
@@ -3839,6 +3908,9 @@ finish_decl (decl, init, asmspec_tree)
else
error_with_decl (decl, "storage size of `%s' isn't constant");
}
+
+ if (TREE_USED (type))
+ TREE_USED (decl) = 1;
}
/* If this is a function and an assembler name is specified, it isn't
@@ -4320,9 +4392,9 @@ grokdeclarator (declarator, declspecs, decl_context, initialized)
For now, issue a warning if -Wreturn-type and this is a function,
or if -Wimplicit; prefer the former warning since it is more
explicit. */
- if ((warn_implicit || warn_return_type) && funcdef_flag)
+ if ((warn_implicit_int || warn_return_type) && funcdef_flag)
warn_about_return_type = 1;
- else if (warn_implicit)
+ else if (warn_implicit_int)
warning ("type defaults to `int' in declaration of `%s'", name);
}
@@ -4335,7 +4407,7 @@ grokdeclarator (declarator, declspecs, decl_context, initialized)
/* Long double is a special combination. */
- if ((specbits & 1 << (int) RID_LONG)
+ if ((specbits & 1 << (int) RID_LONG) && ! longlong
&& TYPE_MAIN_VARIANT (type) == double_type_node)
{
specbits &= ~ (1 << (int) RID_LONG);
@@ -4349,11 +4421,9 @@ grokdeclarator (declarator, declspecs, decl_context, initialized)
{
int ok = 0;
- if (TREE_CODE (type) != INTEGER_TYPE)
- error ("long, short, signed or unsigned invalid for `%s'", name);
- else if ((specbits & 1 << (int) RID_LONG)
- && (specbits & 1 << (int) RID_SHORT))
- error ("long and short specified together for `%s'", name);
+ if ((specbits & 1 << (int) RID_LONG)
+ && (specbits & 1 << (int) RID_SHORT))
+ error ("both long and short specified for `%s'", name);
else if (((specbits & 1 << (int) RID_LONG)
|| (specbits & 1 << (int) RID_SHORT))
&& explicit_char)
@@ -4361,10 +4431,21 @@ grokdeclarator (declarator, declspecs, decl_context, initialized)
else if (((specbits & 1 << (int) RID_LONG)
|| (specbits & 1 << (int) RID_SHORT))
&& TREE_CODE (type) == REAL_TYPE)
- error ("long or short specified with floating type for `%s'", name);
+ {
+ static int already = 0;
+
+ error ("long or short specified with floating type for `%s'", name);
+ if (! already && ! pedantic)
+ {
+ error ("the only valid combination is `long double'");
+ already = 1;
+ }
+ }
else if ((specbits & 1 << (int) RID_SIGNED)
&& (specbits & 1 << (int) RID_UNSIGNED))
- error ("signed and unsigned given together for `%s'", name);
+ error ("both signed and unsigned specified for `%s'", name);
+ else if (TREE_CODE (type) != INTEGER_TYPE)
+ error ("long, short, signed or unsigned invalid for `%s'", name);
else
{
ok = 1;
@@ -4659,6 +4740,18 @@ grokdeclarator (declarator, declspecs, decl_context, initialized)
convert (index_type, size),
convert (index_type, size_one_node)));
+ /* If that overflowed, the array is too big.
+ ??? While a size of INT_MAX+1 technically shouldn't cause
+ an overflow (because we subtract 1), the overflow is recorded
+ during the conversion to index_type, before the subtraction.
+ Handling this case seems like an unnecessary complication. */
+ if (TREE_OVERFLOW (itype))
+ {
+ error ("size of array `%s' is too large", name);
+ type = error_mark_node;
+ continue;
+ }
+
if (size_varies)
itype = variable_size (itype);
itype = build_index_type (itype);
@@ -4834,6 +4927,13 @@ grokdeclarator (declarator, declspecs, decl_context, initialized)
/* Now TYPE has the actual type. */
+ /* Did array size calculations overflow? */
+
+ if (TREE_CODE (type) == ARRAY_TYPE
+ && TYPE_SIZE (type)
+ && TREE_OVERFLOW (TYPE_SIZE (type)))
+ error ("size of array `%s' is too large", name);
+
/* If this is declaring a typedef name, return a TYPE_DECL. */
if (specbits & (1 << (int) RID_TYPEDEF))
@@ -5054,9 +5154,6 @@ grokdeclarator (declarator, declspecs, decl_context, initialized)
if (! strcmp (IDENTIFIER_POINTER (declarator), "main"))
warning ("cannot inline function `main'");
- else if (last && (TYPE_MAIN_VARIANT (TREE_VALUE (last))
- != void_type_node))
- warning ("inline declaration ignored for function with `...'");
else
/* Assume that otherwise the function can be inlined. */
DECL_INLINE (decl) = 1;
@@ -5376,7 +5473,7 @@ parmlist_tags_warning ()
enum tree_code code = TREE_CODE (TREE_VALUE (elt));
/* An anonymous union parm type is meaningful as a GNU extension.
So don't warn for that. */
- if (code == UNION_TYPE && !pedantic)
+ if (code == UNION_TYPE && TREE_PURPOSE (elt) == 0 && !pedantic)
continue;
if (TREE_PURPOSE (elt) != 0)
warning ("`%s %s' declared inside parameter list",
@@ -5479,6 +5576,7 @@ start_struct (code, name)
if (ref && TREE_CODE (ref) == code)
{
C_TYPE_BEING_DEFINED (ref) = 1;
+ TYPE_PACKED (ref) = flag_pack_struct;
if (TYPE_FIELDS (ref))
error ((code == UNION_TYPE ? "redefinition of `union %s'"
: "redefinition of `struct %s'"),
@@ -6160,7 +6258,10 @@ start_function (declspecs, declarator, prefix_attributes, attributes, nested)
/* If the declarator is not suitable for a function definition,
cause a syntax error. */
if (decl1 == 0)
- return 0;
+ {
+ immediate_size_expand = old_immediate_size_expand;
+ return 0;
+ }
decl_attributes (decl1, prefix_attributes, attributes);
diff --git a/gcc/c-gperf.h b/gcc/c-gperf.h
new file mode 100644
index 00000000000..361b9d971df
--- /dev/null
+++ b/gcc/c-gperf.h
@@ -0,0 +1,186 @@
+/* C code produced by gperf version 2.5 (GNU C++ version) */
+/* Command-line: gperf -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,$ ./c-parse.gperf */
+/* Command-line: gperf -p -j1 -i 1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf */
+struct resword { char *name; short token; enum rid rid; };
+
+#define TOTAL_KEYWORDS 79
+#define MIN_WORD_LENGTH 2
+#define MAX_WORD_LENGTH 20
+#define MIN_HASH_VALUE 10
+#define MAX_HASH_VALUE 144
+/* maximum key range = 135, duplicates = 0 */
+
+#ifdef __GNUC__
+inline
+#endif
+static unsigned int
+hash (str, len)
+ register char *str;
+ register int unsigned len;
+{
+ static unsigned char asso_values[] =
+ {
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 25, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 1, 145, 46, 8, 15,
+ 61, 6, 36, 48, 3, 5, 145, 18, 63, 25,
+ 29, 76, 1, 145, 13, 2, 1, 51, 37, 9,
+ 9, 1, 3, 145, 145, 145, 145, 145,
+ };
+ register int hval = len;
+
+ switch (hval)
+ {
+ default:
+ case 3:
+ hval += asso_values[str[2]];
+ case 2:
+ case 1:
+ hval += asso_values[str[0]];
+ break;
+ }
+ return hval + asso_values[str[len - 1]];
+}
+
+static struct resword wordlist[] =
+{
+ {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
+ {"",},
+ {"int", TYPESPEC, RID_INT},
+ {"",}, {"",},
+ {"__typeof__", TYPEOF, NORID},
+ {"__signed__", TYPESPEC, RID_SIGNED},
+ {"__imag__", IMAGPART, NORID},
+ {"switch", SWITCH, NORID},
+ {"__inline__", SCSPEC, RID_INLINE},
+ {"else", ELSE, NORID},
+ {"__iterator__", SCSPEC, RID_ITERATOR},
+ {"__inline", SCSPEC, RID_INLINE},
+ {"__extension__", EXTENSION, NORID},
+ {"struct", STRUCT, NORID},
+ {"__real__", REALPART, NORID},
+ {"__const", TYPE_QUAL, RID_CONST},
+ {"while", WHILE, NORID},
+ {"__const__", TYPE_QUAL, RID_CONST},
+ {"case", CASE, NORID},
+ {"__complex__", TYPESPEC, RID_COMPLEX},
+ {"__iterator", SCSPEC, RID_ITERATOR},
+ {"bycopy", TYPE_QUAL, RID_BYCOPY},
+ {"",}, {"",}, {"",},
+ {"__complex", TYPESPEC, RID_COMPLEX},
+ {"",},
+ {"in", TYPE_QUAL, RID_IN},
+ {"break", BREAK, NORID},
+ {"@defs", DEFS, NORID},
+ {"",}, {"",}, {"",},
+ {"extern", SCSPEC, RID_EXTERN},
+ {"if", IF, NORID},
+ {"typeof", TYPEOF, NORID},
+ {"typedef", SCSPEC, RID_TYPEDEF},
+ {"__typeof", TYPEOF, NORID},
+ {"sizeof", SIZEOF, NORID},
+ {"",},
+ {"return", RETURN, NORID},
+ {"const", TYPE_QUAL, RID_CONST},
+ {"__volatile__", TYPE_QUAL, RID_VOLATILE},
+ {"@private", PRIVATE, NORID},
+ {"@selector", SELECTOR, NORID},
+ {"__volatile", TYPE_QUAL, RID_VOLATILE},
+ {"__asm__", ASM_KEYWORD, NORID},
+ {"",}, {"",},
+ {"continue", CONTINUE, NORID},
+ {"__alignof__", ALIGNOF, NORID},
+ {"__imag", IMAGPART, NORID},
+ {"__attribute__", ATTRIBUTE, NORID},
+ {"",}, {"",},
+ {"__attribute", ATTRIBUTE, NORID},
+ {"for", FOR, NORID},
+ {"",},
+ {"@encode", ENCODE, NORID},
+ {"id", OBJECTNAME, RID_ID},
+ {"static", SCSPEC, RID_STATIC},
+ {"@interface", INTERFACE, NORID},
+ {"",},
+ {"__signed", TYPESPEC, RID_SIGNED},
+ {"",},
+ {"__label__", LABEL, NORID},
+ {"",}, {"",},
+ {"__asm", ASM_KEYWORD, NORID},
+ {"char", TYPESPEC, RID_CHAR},
+ {"",},
+ {"inline", SCSPEC, RID_INLINE},
+ {"out", TYPE_QUAL, RID_OUT},
+ {"register", SCSPEC, RID_REGISTER},
+ {"__real", REALPART, NORID},
+ {"short", TYPESPEC, RID_SHORT},
+ {"",},
+ {"enum", ENUM, NORID},
+ {"inout", TYPE_QUAL, RID_INOUT},
+ {"",},
+ {"oneway", TYPE_QUAL, RID_ONEWAY},
+ {"union", UNION, NORID},
+ {"",},
+ {"__alignof", ALIGNOF, NORID},
+ {"",},
+ {"@implementation", IMPLEMENTATION, NORID},
+ {"",},
+ {"@class", CLASS, NORID},
+ {"",},
+ {"@public", PUBLIC, NORID},
+ {"asm", ASM_KEYWORD, NORID},
+ {"",}, {"",}, {"",}, {"",}, {"",},
+ {"default", DEFAULT, NORID},
+ {"",},
+ {"void", TYPESPEC, RID_VOID},
+ {"",},
+ {"@protected", PROTECTED, NORID},
+ {"@protocol", PROTOCOL, NORID},
+ {"",}, {"",}, {"",},
+ {"volatile", TYPE_QUAL, RID_VOLATILE},
+ {"",}, {"",},
+ {"signed", TYPESPEC, RID_SIGNED},
+ {"float", TYPESPEC, RID_FLOAT},
+ {"@end", END, NORID},
+ {"",}, {"",},
+ {"unsigned", TYPESPEC, RID_UNSIGNED},
+ {"@compatibility_alias", ALIAS, NORID},
+ {"double", TYPESPEC, RID_DOUBLE},
+ {"",}, {"",},
+ {"auto", SCSPEC, RID_AUTO},
+ {"",},
+ {"goto", GOTO, NORID},
+ {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
+ {"do", DO, NORID},
+ {"",}, {"",}, {"",}, {"",},
+ {"long", TYPESPEC, RID_LONG},
+};
+
+#ifdef __GNUC__
+inline
+#endif
+struct resword *
+is_reserved_word (str, len)
+ register char *str;
+ register unsigned int len;
+{
+ if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
+ {
+ register int key = hash (str, len);
+
+ if (key <= MAX_HASH_VALUE && key >= 0)
+ {
+ register char *s = wordlist[key].name;
+
+ if (*s == *str && !strcmp (str + 1, s + 1))
+ return &wordlist[key];
+ }
+ }
+ return 0;
+}
diff --git a/gcc/c-iterate.c b/gcc/c-iterate.c
index f8dec10b98b..2176ab4d3e3 100644
--- a/gcc/c-iterate.c
+++ b/gcc/c-iterate.c
@@ -1,5 +1,5 @@
/* Build expressions with type checking for C compiler.
- Copyright (C) 1987, 88, 89, 92, 93, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 89, 92, 93, 96, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -255,6 +255,8 @@ collect_iterators (exp, list)
break;
case RTL_EXPR:
return list;
+ default:
+ break;
}
for (i = 0; i < num_args; i++)
diff --git a/gcc/c-lang.c b/gcc/c-lang.c
index 2e59e3a15cb..b5ed3deb652 100644
--- a/gcc/c-lang.c
+++ b/gcc/c-lang.c
@@ -1,5 +1,5 @@
/* Language-specific hook definitions for C front end.
- Copyright (C) 1991, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1991, 1995, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -37,10 +37,12 @@ lang_decode_option (p)
void
lang_init ()
{
+#if !USE_CPPLIB
/* the beginning of the file is a new line; check for # */
/* With luck, we discover the real source file's name from that
and put it in input_filename. */
ungetc (check_newline (), finput);
+#endif
}
void
@@ -135,7 +137,6 @@ void
finish_file ()
{
extern tree static_ctors, static_dtors;
- extern tree get_file_function_name ();
extern tree build_function_call PROTO((tree, tree));
tree void_list_node = build_tree_list (NULL_TREE, void_type_node);
#ifndef ASM_OUTPUT_CONSTRUCTOR
diff --git a/gcc/c-lex.c b/gcc/c-lex.c
index c3c4d0e9d1c..33fecf07c03 100644
--- a/gcc/c-lex.c
+++ b/gcc/c-lex.c
@@ -1,5 +1,5 @@
/* Lexical analyzer for C and Objective C.
- Copyright (C) 1987, 88, 89, 92, 94, 95, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 89, 92, 94-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -18,12 +18,12 @@ 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 <stdio.h>
#include <errno.h>
#include <setjmp.h>
-#include "config.h"
#include "rtl.h"
#include "tree.h"
#include "input.h"
@@ -35,6 +35,13 @@ Boston, MA 02111-1307, USA. */
#include <ctype.h>
+/* MULTIBYTE_CHARS support only works for native compilers.
+ ??? Ideally what we want is to model widechar support after
+ the current floating point support. */
+#ifdef CROSS_COMPILE
+#undef MULTIBYTE_CHARS
+#endif
+
#ifdef MULTIBYTE_CHARS
#include <stdlib.h>
#include <locale.h>
@@ -118,6 +125,8 @@ char *token_buffer; /* Pointer to token buffer.
Actual allocated length is maxtoken + 2.
This is not static because objc-parse.y uses it. */
+static int indent_level = 0; /* Number of { minus number of }. */
+
/* Nonzero if end-of-file has been seen on input. */
static int end_of_file;
@@ -126,6 +135,9 @@ static int end_of_file;
static int nextchar = -1;
#endif
+static int skip_which_space PROTO((int));
+static char *extend_token_buffer PROTO((char *));
+static int readescape PROTO((int *));
int check_newline ();
/* Do not insert generated code into the source, instead, include it.
@@ -321,7 +333,6 @@ yyprint (file, yychar, yylval)
break;
}
}
-
/* If C is not whitespace, return C.
Otherwise skip whitespace and return first nonwhite char read. */
@@ -413,7 +424,6 @@ extend_token_buffer (p)
return token_buffer + offset;
}
-
#if !USE_CPPLIB
#define GET_DIRECTIVE_LINE() get_directive_line (finput)
@@ -560,7 +570,7 @@ check_newline ()
token = yylex ();
if (token != IDENTIFIER)
goto skipline;
- if (HANDLE_PRAGMA (yylval.ttype))
+ if (HANDLE_PRAGMA (finput, yylval.ttype))
{
c = GETC ();
return c;
@@ -747,6 +757,7 @@ linenum:
input_file_stack->line = old_lineno;
p->next = input_file_stack;
p->name = input_filename;
+ p->indent_level = indent_level;
input_file_stack = p;
input_file_stack_tick++;
debug_start_source_file (input_filename);
@@ -758,6 +769,14 @@ linenum:
if (input_file_stack->next)
{
struct file_stack *p = input_file_stack;
+ if (indent_level != p->indent_level)
+ {
+ warning_with_file_and_line
+ (p->name, old_lineno,
+ "This file contains more `%c's than `%c's.",
+ indent_level > p->indent_level ? '{' : '}',
+ indent_level > p->indent_level ? '}' : '{');
+ }
input_file_stack = p->next;
free (p);
input_file_stack_tick++;
@@ -816,21 +835,14 @@ linenum:
/* skip the rest of this line. */
skipline:
+#if !USE_CPPLIB
+ if (c != '\n' && c != EOF && nextchar >= 0)
+ c = nextchar, nextchar = -1;
+#endif
while (c != '\n' && c != EOF)
c = GETC();
return c;
}
-
-void
-lang_init ()
-{
-#if !USE_CPPLIB
- /* the beginning of the file is a new line; check for # */
- /* With luck, we discover the real source file's name from that
- and put it in input_filename. */
- UNGETC (check_newline ());
-#endif
-}
#ifdef HANDLE_SYSV_PRAGMA
@@ -1462,8 +1474,8 @@ yylex ()
if (floatflag != NOT_FLOAT)
{
tree type = double_type_node;
- int exceeds_double = 0;
int imag = 0;
+ int conversion_errno = 0;
REAL_VALUE_TYPE value;
jmp_buf handler;
@@ -1492,7 +1504,6 @@ yylex ()
}
*p = 0;
- errno = 0;
/* Convert string to a double, checking for overflow. */
if (setjmp (handler))
@@ -1562,7 +1573,9 @@ yylex ()
error ("both `f' and `l' in floating constant");
type = float_type_node;
+ errno = 0;
value = REAL_VALUE_ATOF (copy, TYPE_MODE (type));
+ conversion_errno = errno;
/* A diagnostic is required here by some ANSI C testsuites.
This is not pedwarn, become some people don't want
an error for this. */
@@ -1572,13 +1585,17 @@ yylex ()
else if (lflag)
{
type = long_double_type_node;
+ errno = 0;
value = REAL_VALUE_ATOF (copy, TYPE_MODE (type));
+ conversion_errno = errno;
if (REAL_VALUE_ISINF (value) && pedantic)
warning ("floating point number exceeds range of `long double'");
}
else
{
+ errno = 0;
value = REAL_VALUE_ATOF (copy, TYPE_MODE (type));
+ conversion_errno = errno;
if (REAL_VALUE_ISINF (value) && pedantic)
warning ("floating point number exceeds range of `double'");
}
@@ -1586,17 +1603,12 @@ yylex ()
set_float_handler (NULL_PTR);
}
#ifdef ERANGE
- if (errno == ERANGE && !flag_traditional && pedantic)
- {
- /* ERANGE is also reported for underflow,
- so test the value to distinguish overflow from that. */
- if (REAL_VALUES_LESS (dconst1, value)
- || REAL_VALUES_LESS (value, dconstm1))
- {
- warning ("floating point number exceeds range of `double'");
- exceeds_double = 1;
- }
- }
+ /* ERANGE is also reported for underflow,
+ so test the value to distinguish overflow from that. */
+ if (conversion_errno == ERANGE && !flag_traditional && pedantic
+ && (REAL_VALUES_LESS (dconst1, value)
+ || REAL_VALUES_LESS (value, dconstm1)))
+ warning ("floating point number exceeds range of `double'");
#endif
/* If the result is not a number, assume it must have been
@@ -1659,20 +1671,15 @@ yylex ()
c = GETC();
}
- /* If the constant is not long long and it won't fit in an
- unsigned long, or if the constant is long long and won't fit
- in an unsigned long long, then warn that the constant is out
- of range. */
+ /* If the constant won't fit in an unsigned long long,
+ then warn that the constant is out of range. */
/* ??? This assumes that long long and long integer types are
a multiple of 8 bits. This better than the original code
though which assumed that long was exactly 32 bits and long
long was exactly 64 bits. */
- if (spec_long_long)
- bytes = TYPE_PRECISION (long_long_integer_type_node) / 8;
- else
- bytes = TYPE_PRECISION (long_integer_type_node) / 8;
+ bytes = TYPE_PRECISION (long_long_integer_type_node) / 8;
warn = overflow;
for (i = bytes; i < TOTAL_PARTS; i++)
@@ -1739,11 +1746,11 @@ yylex ()
else if (! spec_unsigned && !spec_long_long
&& int_fits_type_p (yylval.ttype, long_integer_type_node))
ansi_type = long_integer_type_node;
- else if (! spec_long_long)
+ else if (! spec_long_long
+ && int_fits_type_p (yylval.ttype,
+ long_unsigned_type_node))
ansi_type = long_unsigned_type_node;
else if (! spec_unsigned
- /* Verify value does not overflow into sign bit. */
- && TREE_INT_CST_HIGH (yylval.ttype) >= 0
&& int_fits_type_p (yylval.ttype,
long_long_integer_type_node))
ansi_type = long_long_integer_type_node;
@@ -1765,8 +1772,9 @@ yylex ()
warning ("width of integer constant may change on other systems with -traditional");
}
- if (!flag_traditional && !int_fits_type_p (yylval.ttype, type)
- && !warn)
+ if (pedantic && !flag_traditional && !spec_long_long && !warn
+ && (TYPE_PRECISION (long_integer_type_node)
+ < TYPE_PRECISION (type)))
pedwarn ("integer constant out of range");
if (base == 10 && ! spec_unsigned && TREE_UNSIGNED (type))
@@ -1997,15 +2005,9 @@ yylex ()
bzero (widep + (len * WCHAR_BYTES), WCHAR_BYTES);
#else
{
- union { long l; char c[sizeof (long)]; } u;
- int big_endian;
char *wp, *cp;
- /* Determine whether host is little or big endian. */
- u.l = 1;
- big_endian = u.c[sizeof (long) - 1];
- wp = widep + (big_endian ? WCHAR_BYTES - 1 : 0);
-
+ wp = widep + (BYTES_BIG_ENDIAN ? WCHAR_BYTES - 1 : 0);
bzero (widep, (p - token_buffer) * WCHAR_BYTES);
for (cp = token_buffer + 1; cp < p; cp++)
*wp = *cp, wp += WCHAR_BYTES;
@@ -2133,13 +2135,13 @@ yylex ()
break;
case '<':
if (c1 == '%')
- { value = '{'; goto done; }
+ { value = '{'; indent_level++; goto done; }
if (c1 == ':')
{ value = '['; goto done; }
break;
case '%':
if (c1 == '>')
- { value = '}'; goto done; }
+ { value = '}'; indent_level--; goto done; }
break;
}
UNGETC (c1);
@@ -2156,6 +2158,16 @@ yylex ()
value = 1;
break;
+ case '{':
+ indent_level++;
+ value = c;
+ break;
+
+ case '}':
+ indent_level--;
+ value = c;
+ break;
+
default:
value = c;
}
diff --git a/gcc/c-parse.in b/gcc/c-parse.in
index e395f86670e..728c5e13acb 100644
--- a/gcc/c-parse.in
+++ b/gcc/c-parse.in
@@ -1,5 +1,5 @@
/* YACC parser for C syntax and for Objective C. -*-c-*-
- Copyright (C) 1987, 88, 89, 92-6, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 89, 92-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -58,11 +58,12 @@ State 434 contains 2 shift/reduce conflicts. (Four ways to parse this.) */
end ifc
%{
+#include "config.h"
+
#include <stdio.h>
#include <errno.h>
#include <setjmp.h>
-#include "config.h"
#include "tree.h"
#include "input.h"
#include "c-lex.h"
@@ -232,9 +233,11 @@ ifobjc
end ifobjc
%{
-/* Number of statements (loosely speaking) seen so far. */
+/* Number of statements (loosely speaking) and compound statements
+ seen so far. */
static int stmt_count;
-
+static int compstmt_count;
+
/* Input file and line number of the end of the body of last simple_if;
used by the stmt-rule immediately after simple_if returns. */
static char *if_stmt_file;
@@ -487,7 +490,7 @@ unary_expr:
| sizeof unary_expr %prec UNARY
{ skip_evaluation--;
if (TREE_CODE ($2) == COMPONENT_REF
- && DECL_BIT_FIELD (TREE_OPERAND ($2, 1)))
+ && DECL_C_BIT_FIELD (TREE_OPERAND ($2, 1)))
error ("`sizeof' applied to a bit-field");
$$ = c_sizeof (TREE_TYPE ($2)); }
| sizeof '(' typename ')' %prec HYPERUNARY
@@ -679,7 +682,7 @@ end ifobjc
if (IDENTIFIER_GLOBAL_VALUE ($1) != error_mark_node
|| IDENTIFIER_ERROR_LOCUS ($1) != current_function_decl)
{
- error ("`%s' undeclared (first use this function)",
+ error ("`%s' undeclared (first use in this function)",
IDENTIFIER_POINTER ($1));
if (! undeclared_variable_notice)
@@ -1735,9 +1738,11 @@ compstmt_or_error:
| error compstmt
;
-compstmt: '{' '}'
+compstmt_start: '{' { compstmt_count++; }
+
+compstmt: compstmt_start '}'
{ $$ = convert (void_type_node, integer_zero_node); }
- | '{' pushlevel maybe_label_decls decls xstmts '}'
+ | compstmt_start pushlevel maybe_label_decls decls xstmts '}'
{ emit_line_note (input_filename, lineno);
expand_end_bindings (getdecls (), 1, 0);
$$ = poplevel (1, 1, 0);
@@ -1745,7 +1750,7 @@ compstmt: '{' '}'
pop_momentary_nofree ();
else
pop_momentary (); }
- | '{' pushlevel maybe_label_decls error '}'
+ | compstmt_start pushlevel maybe_label_decls error '}'
{ emit_line_note (input_filename, lineno);
expand_end_bindings (getdecls (), kept_level_p (), 0);
$$ = poplevel (kept_level_p (), 0, 0);
@@ -1753,7 +1758,7 @@ compstmt: '{' '}'
pop_momentary_nofree ();
else
pop_momentary (); }
- | '{' pushlevel maybe_label_decls stmts '}'
+ | compstmt_start pushlevel maybe_label_decls stmts '}'
{ emit_line_note (input_filename, lineno);
expand_end_bindings (getdecls (), kept_level_p (), 0);
$$ = poplevel (kept_level_p (), 0, 0);
@@ -1766,8 +1771,8 @@ compstmt: '{' '}'
/* Value is number of statements counted as of the closeparen. */
simple_if:
if_prefix lineno_labeled_stmt
-/* Make sure expand_end_cond is run once
- for each call to expand_start_cond.
+/* Make sure c_expand_end_cond is run once
+ for each call to c_expand_start_cond.
Otherwise a crash is likely. */
| if_prefix error
;
@@ -1775,7 +1780,8 @@ simple_if:
if_prefix:
IF '(' expr ')'
{ emit_line_note ($<filename>-1, $<lineno>0);
- expand_start_cond (truthvalue_conversion ($3), 0);
+ c_expand_start_cond (truthvalue_conversion ($3), 0,
+ compstmt_count);
$<itype>$ = stmt_count;
if_stmt_file = $<filename>-1;
if_stmt_line = $<lineno>0;
@@ -1788,6 +1794,7 @@ if_prefix:
do_stmt_start:
DO
{ stmt_count++;
+ compstmt_count++;
emit_line_note ($<filename>-1, $<lineno>0);
/* See comment in `while' alternative, above. */
emit_nop ();
@@ -1850,15 +1857,15 @@ stmt:
iterator_expand ($1);
clear_momentary (); }
| simple_if ELSE
- { expand_start_else ();
+ { c_expand_start_else ();
$<itype>1 = stmt_count;
position_after_white_space (); }
lineno_labeled_stmt
- { expand_end_cond ();
+ { c_expand_end_cond ();
if (extra_warnings && stmt_count == $<itype>1)
warning ("empty body in an else-statement"); }
| simple_if %prec IF
- { expand_end_cond ();
+ { c_expand_end_cond ();
/* This warning is here instead of in simple_if, because we
do not want a warning if an empty if is followed by an
else statement. Increment stmt_count so we don't
@@ -1866,11 +1873,11 @@ stmt:
if (extra_warnings && stmt_count++ == $<itype>1)
warning_with_file_and_line (if_stmt_file, if_stmt_line,
"empty body in an if-statement"); }
-/* Make sure expand_end_cond is run once
- for each call to expand_start_cond.
+/* Make sure c_expand_end_cond is run once
+ for each call to c_expand_start_cond.
Otherwise a crash is likely. */
| simple_if ELSE error
- { expand_end_cond (); }
+ { c_expand_end_cond (); }
| WHILE
{ stmt_count++;
emit_line_note ($<filename>-1, $<lineno>0);
diff --git a/gcc/c-pragma.c b/gcc/c-pragma.c
index 886c67b9828..83b9802075f 100644
--- a/gcc/c-pragma.c
+++ b/gcc/c-pragma.c
@@ -1,5 +1,5 @@
/* Handle #pragma, system V.4 style. Supports #pragma weak and #pragma pack.
- Copyright (C) 1992 Free Software Foundation, Inc.
+ Copyright (C) 1992, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -18,8 +18,8 @@ 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 <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "tree.h"
#include "except.h"
#include "function.h"
@@ -65,7 +65,7 @@ handle_pragma_token (string, token)
if (HANDLE_PRAGMA_WEAK)
handle_pragma_weak (state, name, value);
-#endif /* HANDLE_PRAMA_WEAK */
+#endif /* HANDLE_PRAGMA_WEAK */
}
type = state = ps_start;
diff --git a/gcc/c-tree.h b/gcc/c-tree.h
index cbbf691db86..3e0e10a401f 100644
--- a/gcc/c-tree.h
+++ b/gcc/c-tree.h
@@ -177,7 +177,7 @@ extern tree convert_and_check PROTO((tree, tree));
extern void overflow_warning PROTO((tree));
extern void unsigned_conversion_warning PROTO((tree, tree));
/* Read the rest of the current #-directive line. */
-extern char *get_directive_line STDIO_PROTO((FILE *));
+extern char *get_directive_line PROTO((FILE *));
/* Subroutine of build_binary_op, used for comparison operations.
See if the operands have both been converted from subword integer types
and, if so, perhaps change them both back to their original type. */
@@ -288,12 +288,9 @@ extern void pending_xref_error PROTO((void));
extern void pop_c_function_context PROTO((void));
extern void pop_label_level PROTO((void));
extern tree poplevel PROTO((int, int, int));
-extern void print_lang_decl STDIO_PROTO((FILE *, tree,
- int));
-extern void print_lang_identifier STDIO_PROTO((FILE *, tree,
- int));
-extern void print_lang_type STDIO_PROTO((FILE *, tree,
- int));
+extern void print_lang_decl PROTO((FILE *, tree, int));
+extern void print_lang_identifier PROTO((FILE *, tree, int));
+extern void print_lang_type PROTO((FILE *, tree, int));
extern void push_c_function_context PROTO((void));
extern void push_label_level PROTO((void));
extern void push_parm_decl PROTO((tree));
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index 32111d09dc0..e0989582a98 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -1,5 +1,5 @@
/* Build expressions with type checking for C compiler.
- Copyright (C) 1987, 88, 91-6, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 91-7, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -35,12 +35,29 @@ Boston, MA 02111-1307, USA. */
#include "flags.h"
#include "output.h"
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#endif
+
/* Nonzero if we've already printed a "missing braces around initializer"
message within this initializer. */
static int missing_braces_mentioned;
+#ifdef NEED_DECLARATION_INDEX
extern char *index ();
+#endif
+
+#ifdef NEED_DECLARATION_RINDEX
extern char *rindex ();
+#endif
static tree qualify_type PROTO((tree, tree));
static int comp_target_types PROTO((tree, tree));
@@ -261,6 +278,12 @@ common_type (t1, t2)
return build_type_attribute_variant (t1, attributes);
}
+ /* Likewise, prefer long double to double even if same size. */
+ if (TYPE_MAIN_VARIANT (t1) == long_double_type_node
+ || TYPE_MAIN_VARIANT (t2) == long_double_type_node)
+ return build_type_attribute_variant (long_double_type_node,
+ attributes);
+
/* Otherwise prefer the unsigned one. */
if (TREE_UNSIGNED (t1))
@@ -507,6 +530,9 @@ comptypes (type1, type2)
if (maybe_objc_comptypes (t1, t2, 0) == 1)
val = 1;
break;
+
+ default:
+ break;
}
return attrval == 2 && val == 1 ? 2 : val;
}
@@ -776,7 +802,7 @@ signed_or_unsigned_type (unsignedp, type)
int unsignedp;
tree type;
{
- if (! INTEGRAL_TYPE_P (type)
+ if ((! INTEGRAL_TYPE_P (type) && ! POINTER_TYPE_P (type))
|| TREE_UNSIGNED (type) == unsignedp)
return type;
if (TYPE_PRECISION (type) == TYPE_PRECISION (signed_char_type_node))
@@ -1008,27 +1034,28 @@ default_conversion (exp)
type = type_for_size (MAX (TYPE_PRECISION (type),
TYPE_PRECISION (integer_type_node)),
((flag_traditional
- || TYPE_PRECISION (type) >= TYPE_PRECISION (integer_type_node))
+ || (TYPE_PRECISION (type)
+ >= TYPE_PRECISION (integer_type_node)))
&& TREE_UNSIGNED (type)));
return convert (type, exp);
}
if (TREE_CODE (exp) == COMPONENT_REF
- && DECL_BIT_FIELD (TREE_OPERAND (exp, 1)))
+ && DECL_C_BIT_FIELD (TREE_OPERAND (exp, 1)))
{
- tree width = DECL_SIZE (TREE_OPERAND (exp, 1));
- HOST_WIDE_INT low = TREE_INT_CST_LOW (width);
+ tree width = DECL_SIZE (TREE_OPERAND (exp, 1));
+ HOST_WIDE_INT low = TREE_INT_CST_LOW (width);
- /* If it's thinner than an int, promote it like a
- C_PROMOTING_INTEGER_TYPE_P, otherwise leave it alone. */
+ /* If it's thinner than an int, promote it like a
+ C_PROMOTING_INTEGER_TYPE_P, otherwise leave it alone. */
- if (low < TYPE_PRECISION (integer_type_node))
- {
- if ( flag_traditional && TREE_UNSIGNED (type))
- return convert (unsigned_type_node, exp);
- else
- return convert (integer_type_node, exp);
- }
+ if (low < TYPE_PRECISION (integer_type_node))
+ {
+ if (flag_traditional && TREE_UNSIGNED (type))
+ return convert (unsigned_type_node, exp);
+ else
+ return convert (integer_type_node, exp);
+ }
}
if (C_PROMOTING_INTEGER_TYPE_P (type))
@@ -1085,7 +1112,7 @@ default_conversion (exp)
TREE_OPERAND (exp, 0), op1);
}
- if (!lvalue_p (exp)
+ if (! lvalue_p (exp)
&& ! (TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp)))
{
error ("invalid use of non-lvalue array");
@@ -1242,6 +1269,9 @@ build_component_ref (datum, component)
(TREE_OPERAND (datum, 0),
build_component_ref (TREE_OPERAND (datum, 1), component),
build_component_ref (TREE_OPERAND (datum, 2), component));
+
+ default:
+ break;
}
/* See if there is a field or component with name COMPONENT. */
@@ -1573,6 +1603,8 @@ build_function_call (function, params)
if (coerced_params == 0)
return integer_zero_node;
return build_unary_op (ABS_EXPR, TREE_VALUE (coerced_params), 0);
+ default:
+ break;
}
{
@@ -2333,6 +2365,9 @@ build_binary_op (code, orig_op0, orig_op1, convert_p)
pedwarn ("comparison between pointer and integer");
}
break;
+
+ default:
+ break;
}
if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
@@ -2477,7 +2512,8 @@ build_binary_op (code, orig_op0, orig_op1, convert_p)
converted = 1;
resultcode = xresultcode;
- if (warn_sign_compare && skip_evaluation == 0)
+ if ((warn_sign_compare < 0 ? extra_warnings : warn_sign_compare != 0)
+ && skip_evaluation == 0)
{
int op0_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op0));
int op1_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op1));
@@ -3111,6 +3147,9 @@ build_unary_op (code, xarg, noconvert)
TREE_CONSTANT (addr) = 1;
return addr;
}
+
+ default:
+ break;
}
if (!errstring)
@@ -3179,12 +3218,16 @@ lvalue_p (ref)
case PARM_DECL:
case RESULT_DECL:
case ERROR_MARK:
- if (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
- && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE)
- return 1;
- break;
+ return (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
+ && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE);
+
+ case BIND_EXPR:
+ case RTL_EXPR:
+ return TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE;
+
+ default:
+ return 0;
}
- return 0;
}
/* Return nonzero if REF is an lvalue valid for this language;
@@ -3216,7 +3259,12 @@ unary_complex_lvalue (code, arg)
if (TREE_CODE (arg) == COMPOUND_EXPR)
{
tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
- pedantic_lvalue_warning (COMPOUND_EXPR);
+
+ /* If this returns a function type, it isn't really being used as
+ an lvalue, so don't issue a warning about it. */
+ if (TREE_CODE (TREE_TYPE (arg)) != FUNCTION_TYPE)
+ pedantic_lvalue_warning (COMPOUND_EXPR);
+
return build (COMPOUND_EXPR, TREE_TYPE (real_result),
TREE_OPERAND (arg, 0), real_result);
}
@@ -3225,6 +3273,9 @@ unary_complex_lvalue (code, arg)
if (TREE_CODE (arg) == COND_EXPR)
{
pedantic_lvalue_warning (COND_EXPR);
+ if (TREE_CODE (TREE_TYPE (arg)) != FUNCTION_TYPE)
+ pedantic_lvalue_warning (COMPOUND_EXPR);
+
return (build_conditional_expr
(TREE_OPERAND (arg, 0),
build_unary_op (code, TREE_OPERAND (arg, 1), 0),
@@ -3866,6 +3917,8 @@ build_modify_expr (lhs, modifycode, rhs)
/* But cast it to void to avoid an "unused" error. */
convert (void_type_node, rhs), cond);
}
+ default:
+ break;
}
/* If a binary op has been requested, combine the old LHS value with the RHS
@@ -3907,6 +3960,9 @@ build_modify_expr (lhs, modifycode, rhs)
pedantic_lvalue_warning (CONVERT_EXPR);
return convert (TREE_TYPE (lhs), result);
}
+
+ default:
+ break;
}
/* Now we have handled acceptable kinds of LHS that are not truly lvalues.
@@ -4420,9 +4476,10 @@ initializer_constant_valid_p (value, endtype)
return null_pointer_node;
return 0;
}
- }
- return 0;
+ default:
+ return 0;
+ }
}
/* If VALUE is a compound expr all of whose expressions are constant, then
@@ -6611,6 +6668,9 @@ c_expand_return (retval)
&& DECL_CONTEXT (inner) == current_function_decl)
warning ("function returns address of local variable");
break;
+
+ default:
+ break;
}
break;
diff --git a/gcc/caller-save.c b/gcc/caller-save.c
index f563637b413..a6d45ac4c11 100644
--- a/gcc/caller-save.c
+++ b/gcc/caller-save.c
@@ -19,6 +19,7 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "insn-config.h"
#include "flags.h"
diff --git a/gcc/calls.c b/gcc/calls.c
index 35166a5ea64..bec7f344228 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -1,5 +1,5 @@
/* Convert function calls to rtl insns, for GNU C compiler.
- Copyright (C) 1989, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1989, 92-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -19,10 +19,12 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "tree.h"
#include "flags.h"
#include "expr.h"
+#include "regs.h"
#ifdef __STDC__
#include <stdarg.h>
#else
@@ -123,7 +125,8 @@ int stack_arg_under_construction;
static int calls_function PROTO((tree, int));
static int calls_function_1 PROTO((tree, int));
-static void emit_call_1 PROTO((rtx, tree, tree, int, int, rtx, rtx,
+static void emit_call_1 PROTO((rtx, tree, tree, HOST_WIDE_INT,
+ HOST_WIDE_INT, rtx, rtx,
int, rtx, int));
static void store_one_arg PROTO ((struct arg_data *, rtx, int, int,
tree, int));
@@ -232,6 +235,9 @@ calls_function_1 (exp, which)
case RTL_EXPR:
return 0;
+
+ default:
+ break;
}
for (i = 0; i < length; i++)
@@ -267,15 +273,11 @@ prepare_call_address (funexp, fndecl, call_fusage, reg_parm_seen)
/* Make a valid memory address and copy constants thru pseudo-regs,
but not for a constant address if -fno-function-cse. */
if (GET_CODE (funexp) != SYMBOL_REF)
- funexp =
-#ifdef SMALL_REGISTER_CLASSES
/* If we are using registers for parameters, force the
- function address into a register now. */
- (SMALL_REGISTER_CLASSES && reg_parm_seen)
- ? force_not_mem (memory_address (FUNCTION_MODE, funexp))
- :
-#endif
- memory_address (FUNCTION_MODE, funexp);
+ function address into a register now. */
+ funexp = ((SMALL_REGISTER_CLASSES && reg_parm_seen)
+ ? force_not_mem (memory_address (FUNCTION_MODE, funexp))
+ : memory_address (FUNCTION_MODE, funexp));
else
{
#ifndef NO_FUNCTION_CSE
@@ -346,8 +348,8 @@ emit_call_1 (funexp, fndecl, funtype, stack_size, struct_value_size,
rtx funexp;
tree fndecl;
tree funtype;
- int stack_size;
- int struct_value_size;
+ HOST_WIDE_INT stack_size;
+ HOST_WIDE_INT struct_value_size;
rtx next_arg_reg;
rtx valreg;
int old_inhibit_defer_pop;
@@ -508,7 +510,7 @@ expand_call (exp, target, ignore)
/* Size of aggregate value wanted, or zero if none wanted
or if we are using the non-reentrant PCC calling convention
or expecting the value in registers. */
- int struct_value_size = 0;
+ HOST_WIDE_INT struct_value_size = 0;
/* Nonzero if called function returns an aggregate in memory PCC style,
by returning the address of where to find it. */
int pcc_struct_value = 0;
@@ -594,6 +596,13 @@ expand_call (exp, target, ignore)
register tree p;
register int i, j;
+ /* The value of the function call can be put in a hard register. But
+ if -fcheck-memory-usage, code which invokes functions (and thus
+ damages some hard registers) can be inserted before using the value.
+ So, target is always a pseudo-register in that case. */
+ if (flag_check_memory_usage)
+ target = 0;
+
/* See if we can find a DECL-node for the actual function.
As a result, decide whether this is a call to an integrable function. */
@@ -686,7 +695,8 @@ expand_call (exp, target, ignore)
structure_value_addr = XEXP (target, 0);
else
{
- /* Assign a temporary on the stack to hold the value. */
+ /* Assign a temporary to hold the value. */
+ tree d;
/* For variable-sized objects, we must be called with a target
specified. If we were to allocate space on the stack here,
@@ -695,10 +705,13 @@ expand_call (exp, target, ignore)
if (struct_value_size < 0)
abort ();
- structure_value_addr
- = XEXP (assign_stack_temp (BLKmode, struct_value_size, 1), 0);
- MEM_IN_STRUCT_P (structure_value_addr)
- = AGGREGATE_TYPE_P (TREE_TYPE (exp));
+ /* This DECL is just something to feed to mark_addressable;
+ it doesn't get pushed. */
+ d = build_decl (VAR_DECL, NULL_TREE, TREE_TYPE (exp));
+ DECL_RTL (d) = assign_temp (TREE_TYPE (exp), 1, 0, 1);
+ mark_addressable (d);
+ structure_value_addr = XEXP (DECL_RTL (d), 0);
+ TREE_USED (d) = 1;
target = 0;
}
}
@@ -1595,6 +1608,12 @@ expand_call (exp, target, ignore)
push_temp_slots ();
funexp = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, VOIDmode, 0);
pop_temp_slots (); /* FUNEXP can't be BLKmode */
+
+ /* Check the function is executable. */
+ if (flag_check_memory_usage)
+ emit_library_call (chkr_check_exec_libfunc, 1,
+ VOIDmode, 1,
+ funexp, ptr_mode);
emit_queue ();
}
@@ -1653,13 +1672,8 @@ expand_call (exp, target, ignore)
&& GET_CODE (SUBREG_REG (args[i].value)) == REG)))
&& args[i].mode != BLKmode
&& rtx_cost (args[i].value, SET) > 2
-#ifdef SMALL_REGISTER_CLASSES
&& ((SMALL_REGISTER_CLASSES && reg_parm_seen)
- || preserve_subexpressions_p ())
-#else
- && preserve_subexpressions_p ()
-#endif
- )
+ || preserve_subexpressions_p ()))
args[i].value = copy_to_mode_reg (args[i].mode, args[i].value);
}
@@ -1838,6 +1852,16 @@ expand_call (exp, target, ignore)
force_reg (Pmode,
force_operand (structure_value_addr,
NULL_RTX)));
+
+ /* Mark the memory for the aggregate as write-only. */
+ if (flag_check_memory_usage)
+ emit_library_call (chkr_set_right_libfunc, 1,
+ VOIDmode, 3,
+ structure_value_addr, ptr_mode,
+ GEN_INT (struct_value_size), TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_WO),
+ TYPE_MODE (integer_type_node));
+
if (GET_CODE (struct_value_rtx) == REG)
use_reg (&call_fusage, struct_value_rtx);
}
@@ -1977,7 +2001,7 @@ expand_call (exp, target, ignore)
/* If there are cleanups to be called, don't use a hard reg as target.
We need to double check this and see if it matters anymore. */
- if (any_pending_cleanups ()
+ if (any_pending_cleanups (1)
&& target && REG_P (target)
&& REGNO (target) < FIRST_PSEUDO_REGISTER)
target = 0;
@@ -2690,26 +2714,26 @@ emit_library_call VPROTO((rtx orgfun, int no_queue, enum machine_mode outmode,
#ifdef ACCUMULATE_OUTGOING_ARGS
#ifdef REG_PARM_STACK_SPACE
- if (save_area)
- {
- enum machine_mode save_mode = GET_MODE (save_area);
- rtx stack_area
- = gen_rtx (MEM, save_mode,
- memory_address (save_mode,
+ if (save_area)
+ {
+ enum machine_mode save_mode = GET_MODE (save_area);
+ rtx stack_area
+ = gen_rtx (MEM, save_mode,
+ memory_address (save_mode,
#ifdef ARGS_GROW_DOWNWARD
- plus_constant (argblock, - high_to_save)
+ plus_constant (argblock, - high_to_save)
#else
- plus_constant (argblock, low_to_save)
+ plus_constant (argblock, low_to_save)
#endif
- ));
+ ));
- if (save_mode != BLKmode)
- emit_move_insn (stack_area, save_area);
- else
- emit_block_move (stack_area, validize_mem (save_area),
- GEN_INT (high_to_save - low_to_save + 1),
- PARM_BOUNDARY / BITS_PER_UNIT);
- }
+ if (save_mode != BLKmode)
+ emit_move_insn (stack_area, save_area);
+ else
+ emit_block_move (stack_area, validize_mem (save_area),
+ GEN_INT (high_to_save - low_to_save + 1),
+ PARM_BOUNDARY / BITS_PER_UNIT);
+ }
#endif
/* If we saved any argument areas, restore them. */
@@ -2728,7 +2752,6 @@ emit_library_call VPROTO((rtx orgfun, int no_queue, enum machine_mode outmode,
highest_outgoing_arg_in_use = initial_highest_arg_in_use;
stack_usage_map = initial_stack_usage_map;
#endif
-
}
/* Like emit_library_call except that an extra argument, VALUE,
@@ -3284,26 +3307,26 @@ emit_library_call_value VPROTO((rtx orgfun, rtx value, int no_queue,
#ifdef ACCUMULATE_OUTGOING_ARGS
#ifdef REG_PARM_STACK_SPACE
- if (save_area)
- {
- enum machine_mode save_mode = GET_MODE (save_area);
- rtx stack_area
- = gen_rtx (MEM, save_mode,
- memory_address (save_mode,
+ if (save_area)
+ {
+ enum machine_mode save_mode = GET_MODE (save_area);
+ rtx stack_area
+ = gen_rtx (MEM, save_mode,
+ memory_address (save_mode,
#ifdef ARGS_GROW_DOWNWARD
- plus_constant (argblock, - high_to_save)
+ plus_constant (argblock, - high_to_save)
#else
- plus_constant (argblock, low_to_save)
+ plus_constant (argblock, low_to_save)
#endif
- ));
+ ));
- if (save_mode != BLKmode)
- emit_move_insn (stack_area, save_area);
- else
- emit_block_move (stack_area, validize_mem (save_area),
- GEN_INT (high_to_save - low_to_save + 1),
+ if (save_mode != BLKmode)
+ emit_move_insn (stack_area, save_area);
+ else
+ emit_block_move (stack_area, validize_mem (save_area),
+ GEN_INT (high_to_save - low_to_save + 1),
PARM_BOUNDARY / BITS_PER_UNIT);
- }
+ }
#endif
/* If we saved any argument areas, restore them. */
@@ -3414,7 +3437,7 @@ store_one_arg (arg, argblock, may_be_alloca, variable_size, fndecl,
if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
upper_bound = -INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1)) + 1;
else
- abort ();
+ upper_bound = 0;
lower_bound = upper_bound - arg->size.constant;
#else
@@ -3531,8 +3554,21 @@ store_one_arg (arg, argblock, may_be_alloca, variable_size, fndecl,
do_pending_stack_adjust ();
if (arg->value == arg->stack)
- /* If the value is already in the stack slot, we are done. */
- ;
+ {
+ /* If the value is already in the stack slot, we are done. */
+ if (flag_check_memory_usage && GET_CODE (arg->stack) == MEM)
+ {
+ if (arg->mode == BLKmode)
+ abort ();
+
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ XEXP (arg->stack, 0), ptr_mode,
+ GEN_INT (GET_MODE_SIZE (arg->mode)),
+ TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_RW),
+ TYPE_MODE (integer_type_node));
+ }
+ }
else if (arg->mode != BLKmode)
{
register int size;
diff --git a/gcc/cccp.1 b/gcc/cccp.1
new file mode 100644
index 00000000000..84eb19ede54
--- /dev/null
+++ b/gcc/cccp.1
@@ -0,0 +1,674 @@
+.\" Copyright (c) 1991, 1992, 1993 Free Software Foundation \-*-Text-*-
+.\" See section COPYING for conditions for redistribution
+.TH cpp 1 "30apr1993" "GNU Tools" "GNU Tools"
+.SH NAME
+cccp, cpp \- The GNU C-Compatible Compiler Preprocessor.
+.SH SYNOPSIS
+.hy 0
+.na
+.TP
+.B cccp
+.RB "[\|" \-$ "\|]"
+.RB "[\|" \-A \c
+.I predicate\c
+.RB [ (\c
+.I value\c
+.BR ) ]\|]
+.RB "[\|" \-C "\|]"
+.RB "[\|" \-D \c
+.I name\c
+.RB [ =\c
+.I definition\c
+\&]\|]
+.RB "[\|" \-dD "\|]"
+.RB "[\|" \-dM "\|]"
+.RB "[\|" "\-I\ "\c
+.I directory\c
+\&\|]
+.RB "[\|" \-H "\|]"
+.RB "[\|" \-I\- "\|]"
+.RB "[\|" "\-imacros\ "\c
+.I file\c
+\&\|]
+.RB "[\|" "\-include\ "\c
+.I file\c
+\&\|]
+.RB "[\|" "\-idirafter\ "\c
+.I dir\c
+\&\|]
+.RB "[\|" "\-iprefix\ "\c
+.I prefix\c
+\&\|]
+.RB "[\|" "\-iwithprefix\ "\c
+.I dir\c
+\&\|]
+.RB "[\|" \-lang\-c "\|]"
+.RB "[\|" \-lang\-c++ "\|]"
+.RB "[\|" \-lang\-objc "\|]"
+.RB "[\|" \-lang\-objc++ "\|]"
+.RB "[\|" \-lint "\|]"
+.RB "[\|" \-M\ [ \-MG "\|]]"
+.RB "[\|" \-MM\ [ \-MG "\|]]"
+.RB "[\|" \-MD\ \c
+.I file\ \c
+\&\|]
+.RB "[\|" \-MMD\ \c
+.I file\ \c
+\&\|]
+.RB "[\|" \-nostdinc "\|]"
+.RB "[\|" \-nostdinc++ "\|]"
+.RB "[\|" \-P "\|]"
+.RB "[\|" \-pedantic "\|]"
+.RB "[\|" \-pedantic\-errors "\|]"
+.RB "[\|" \-traditional "\|]"
+.RB "[\|" \-trigraphs "\|]"
+.RB "[\|" \-U \c
+.I name\c
+\&\|]
+.RB "[\|" \-undef "\|]"
+.RB "[\|" \-Wtrigraphs "\|]"
+.RB "[\|" \-Wcomment "\|]"
+.RB "[\|" \-Wall "\|]"
+.RB "[\|" \-Wtraditional "\|]"
+.br
+.RB "[\|" \c
+.I infile\c
+.RB | \- "\|]"
+.RB "[\|" \c
+.I outfile\c
+.RB | \- "\|]"
+.ad b
+.hy 1
+.SH DESCRIPTION
+The C preprocessor is a \c
+.I macro processor\c
+\& that is used automatically by
+the C compiler to transform your program before actual compilation. It is
+called a macro processor because it allows you to define \c
+.I macros\c
+\&,
+which are brief abbreviations for longer constructs.
+
+The C preprocessor provides four separate facilities that you can use as
+you see fit:
+.TP
+\(bu
+Inclusion of header files. These are files of declarations that can be
+substituted into your program.
+.TP
+\(bu
+Macro expansion. You can define \c
+.I macros\c
+\&, which are abbreviations
+for arbitrary fragments of C code, and then the C preprocessor will
+replace the macros with their definitions throughout the program.
+.TP
+\(bu
+Conditional compilation. Using special preprocessing directives, you
+can include or exclude parts of the program according to various
+conditions.
+.TP
+\(bu
+Line control. If you use a program to combine or rearrange source files into
+an intermediate file which is then compiled, you can use line control
+to inform the compiler of where each source line originally came from.
+.PP
+C preprocessors vary in some details. For a full explanation of the
+GNU C preprocessor, see the
+.B info
+file `\|\c
+.B cpp.info\c
+\&\|', or the manual
+.I The C Preprocessor\c
+\&. Both of these are built from the same documentation source file, `\|\c
+.B cpp.texinfo\c
+\&\|'. The GNU C
+preprocessor provides a superset of the features of ANSI Standard C.
+
+ANSI Standard C requires the rejection of many harmless constructs commonly
+used by today's C programs. Such incompatibility would be inconvenient for
+users, so the GNU C preprocessor is configured to accept these constructs
+by default. Strictly speaking, to get ANSI Standard C, you must use the
+options `\|\c
+.B \-trigraphs\c
+\&\|', `\|\c
+.B \-undef\c
+\&\|' and `\|\c
+.B \-pedantic\c
+\&\|', but in
+practice the consequences of having strict ANSI Standard C make it
+undesirable to do this.
+
+Most often when you use the C preprocessor you will not have to invoke it
+explicitly: the C compiler will do so automatically. However, the
+preprocessor is sometimes useful individually.
+
+When you call the preprocessor individually, either name
+(\c
+.B cpp\c
+\& or \c
+.B cccp\c
+\&) will do\(em\&they are completely synonymous.
+
+The C preprocessor expects two file names as arguments, \c
+.I infile\c
+\& and
+\c
+.I outfile\c
+\&. The preprocessor reads \c
+.I infile\c
+\& together with any other
+files it specifies with `\|\c
+.B #include\c
+\&\|'. All the output generated by the
+combined input files is written in \c
+.I outfile\c
+\&.
+
+Either \c
+.I infile\c
+\& or \c
+.I outfile\c
+\& may be `\|\c
+.B \-\c
+\&\|', which as \c
+.I infile\c
+\&
+means to read from standard input and as \c
+.I outfile\c
+\& means to write to
+standard output. Also, if \c
+.I outfile\c
+\& or both file names are omitted,
+the standard output and standard input are used for the omitted file names.
+.SH OPTIONS
+Here is a table of command options accepted by the C preprocessor.
+These options can also be given when compiling a C program; they are
+passed along automatically to the preprocessor when it is invoked by
+the compiler.
+.TP
+.B \-P
+Inhibit generation of `\|\c
+.B #\c
+\&\|'-lines with line-number information in
+the output from the preprocessor. This might be
+useful when running the preprocessor on something that is not C code
+and will be sent to a program which might be confused by the
+`\|\c
+.B #\c
+\&\|'-lines.
+.TP
+.B \-C
+Do not discard comments: pass them through to the output file.
+Comments appearing in arguments of a macro call will be copied to the
+output before the expansion of the macro call.
+.TP
+.B \-traditional
+Try to imitate the behavior of old-fashioned C, as opposed to ANSI C.
+.TP
+.B \-trigraphs
+Process ANSI standard trigraph sequences. These are three-character
+sequences, all starting with `\|\c
+.B ??\c
+\&\|', that are defined by ANSI C to
+stand for single characters. For example, `\|\c
+.B ??/\c
+\&\|' stands for
+`\|\c
+.BR "\e" "\|',"
+so `\|\c
+.B '??/n'\c
+\&\|' is a character constant for a newline.
+Strictly speaking, the GNU C preprocessor does not support all
+programs in ANSI Standard C unless `\|\c
+.B \-trigraphs\c
+\&\|' is used, but if
+you ever notice the difference it will be with relief.
+
+You don't want to know any more about trigraphs.
+.TP
+.B \-pedantic
+Issue warnings required by the ANSI C standard in certain cases such
+as when text other than a comment follows `\|\c
+.B #else\c
+\&\|' or `\|\c
+.B #endif\c
+\&\|'.
+.TP
+.B \-pedantic\-errors
+Like `\|\c
+.B \-pedantic\c
+\&\|', except that errors are produced rather than
+warnings.
+.TP
+.B \-Wtrigraphs
+Warn if any trigraphs are encountered (assuming they are enabled).
+.TP
+.B \-Wcomment
+.TP
+.B \-Wcomments
+Warn whenever a comment-start sequence `\|\c
+.B /*\c
+\&\|' appears in a comment.
+(Both forms have the same effect).
+.TP
+.B \-Wall
+Requests both `\|\c
+.B \-Wtrigraphs\c
+\&\|' and `\|\c
+.B \-Wcomment\c
+\&\|' (but not
+`\|\c
+.B \-Wtraditional\c
+\&\|').
+.TP
+.B \-Wtraditional
+Warn about certain constructs that behave differently in traditional and
+ANSI C.
+.TP
+.BI "\-I " directory\c
+\&
+Add the directory \c
+.I directory\c
+\& to the end of the list of
+directories to be searched for header files.
+This can be used to override a system header file, substituting your
+own version, since these directories are searched before the system
+header file directories. If you use more than one `\|\c
+.B \-I\c
+\&\|' option,
+the directories are scanned in left-to-right order; the standard
+system directories come after.
+.TP
+.B \-I\-
+Any directories specified with `\|\c
+.B \-I\c
+\&\|' options before the `\|\c
+.B \-I\-\c
+\&\|'
+option are searched only for the case of `\|\c
+.B #include "\c
+.I file\c
+\&"\c
+\&\|';
+they are not searched for `\|\c
+.B #include <\c
+.I file\c
+\&>\c
+\&\|'.
+
+If additional directories are specified with `\|\c
+.B \-I\c
+\&\|' options after
+the `\|\c
+.B \-I\-\c
+\&\|', these directories are searched for all `\|\c
+.B #include\c
+\&\|'
+directives.
+
+In addition, the `\|\c
+.B \-I\-\c
+\&\|' option inhibits the use of the current
+directory as the first search directory for `\|\c
+.B #include "\c
+.I file\c
+\&"\c
+\&\|'.
+Therefore, the current directory is searched only if it is requested
+explicitly with `\|\c
+.B \-I.\c
+\&\|'. Specifying both `\|\c
+.B \-I\-\c
+\&\|' and `\|\c
+.B \-I.\c
+\&\|'
+allows you to control precisely which directories are searched before
+the current one and which are searched after.
+.TP
+.B \-nostdinc
+Do not search the standard system directories for header files.
+Only the directories you have specified with `\|\c
+.B \-I\c
+\&\|' options
+(and the current directory, if appropriate) are searched.
+.TP
+.B \-nostdinc++
+Do not search for header files in the C++ specific standard
+directories, but do still search the other standard directories.
+(This option is used when building libg++.)
+.TP
+.BI "\-D " "name"\c
+\&
+Predefine \c
+.I name\c
+\& as a macro, with definition `\|\c
+.B 1\c
+\&\|'.
+.TP
+.BI "\-D " "name" = definition
+\&
+Predefine \c
+.I name\c
+\& as a macro, with definition \c
+.I definition\c
+\&.
+There are no restrictions on the contents of \c
+.I definition\c
+\&, but if
+you are invoking the preprocessor from a shell or shell-like program
+you may need to use the shell's quoting syntax to protect characters
+such as spaces that have a meaning in the shell syntax. If you use more than
+one `\|\c
+.B \-D\c
+\&\|' for the same
+.I name\c
+\&, the rightmost definition takes effect.
+.TP
+.BI "\-U " "name"\c
+\&
+Do not predefine \c
+.I name\c
+\&. If both `\|\c
+.B \-U\c
+\&\|' and `\|\c
+.B \-D\c
+\&\|' are
+specified for one name, the `\|\c
+.B \-U\c
+\&\|' beats the `\|\c
+.B \-D\c
+\&\|' and the name
+is not predefined.
+.TP
+.B \-undef
+Do not predefine any nonstandard macros.
+.TP
+.BI "\-A " "name(" value )
+Assert (in the same way as the \c
+.B #assert\c
+\& directive)
+the predicate \c
+.I name\c
+\& with tokenlist \c
+.I value\c
+\&. Remember to escape or quote the parentheses on
+shell command lines.
+
+You can use `\|\c
+.B \-A-\c
+\&\|' to disable all predefined assertions; it also
+undefines all predefined macros.
+.TP
+.B \-dM
+Instead of outputting the result of preprocessing, output a list of
+`\|\c
+.B #define\c
+\&\|' directives for all the macros defined during the
+execution of the preprocessor, including predefined macros. This gives
+you a way of finding out what is predefined in your version of the
+preprocessor; assuming you have no file `\|\c
+.B foo.h\c
+\&\|', the command
+.sp
+.br
+touch\ foo.h;\ cpp\ \-dM\ foo.h
+.br
+.sp
+will show the values of any predefined macros.
+.TP
+.B \-dD
+Like `\|\c
+.B \-dM\c
+\&\|' except in two respects: it does \c
+.I not\c
+\& include the
+predefined macros, and it outputs \c
+.I both\c
+\& the `\|\c
+.B #define\c
+\&\|'
+directives and the result of preprocessing. Both kinds of output go to
+the standard output file.
+.PP
+.TP
+.BR \-M\ [ \-MG ]
+Instead of outputting the result of preprocessing, output a rule
+suitable for \c
+.B make\c
+\& describing the dependencies of the main
+source file. The preprocessor outputs one \c
+.B make\c
+\& rule containing
+the object file name for that source file, a colon, and the names of
+all the included files. If there are many included files then the
+rule is split into several lines using `\|\c
+.B \\\\\c
+\&\|'-newline.
+
+`\|\c
+.B \-MG\c
+\&\|' says to treat missing header files as generated files and assume \c
+they live in the same directory as the source file. It must be specified \c
+in addition to `\|\c
+.B \-M\c
+\&\|'.
+
+This feature is used in automatic updating of makefiles.
+.TP
+.BR \-MM\ [ \-MG ]
+Like `\|\c
+.B \-M\c
+\&\|' but mention only the files included with `\|\c
+.B #include
+"\c
+.I file\c
+\&"\c
+\&\|'. System header files included with `\|\c
+.B #include
+<\c
+.I file\c
+\&>\c
+\&\|' are omitted.
+.TP
+.BI \-MD\ file
+Like `\|\c
+.B \-M\c
+\&\|' but the dependency information is written to `\|\c
+.I file\c
+\&\|'. This is in addition to compiling the file as
+specified\(em\&`\|\c
+.B \-MD\c
+\&\|' does not inhibit ordinary compilation the way
+`\|\c
+.B \-M\c
+\&\|' does.
+
+When invoking gcc, do not specify the `\|\c
+.I file\c
+\&\|' argument. Gcc will create file names made by replacing `\|\c
+.B .c\c
+\&\|' with `\|\c
+.B .d\c
+\&\|' at the end of the input file names.
+
+In Mach, you can use the utility \c
+.B md\c
+\& to merge multiple files
+into a single dependency file suitable for using with the `\|\c
+.B make\c
+\&\|'
+command.
+.TP
+.BI \-MMD\ file
+Like `\|\c
+.B \-MD\c
+\&\|' except mention only user header files, not system
+header files.
+.TP
+.B \-H
+Print the name of each header file used, in addition to other normal
+activities.
+.TP
+.BI "\-imacros " "file"\c
+\&
+Process \c
+.I file\c
+\& as input, discarding the resulting output, before
+processing the regular input file. Because the output generated from
+\c
+.I file\c
+\& is discarded, the only effect of `\|\c
+.B \-imacros \c
+.I file\c
+\&\c
+\&\|' is to
+make the macros defined in \c
+.I file\c
+\& available for use in the main
+input. The preprocessor evaluates any `\|\c
+.B \-D\c
+\&\|' and `\|\c
+.B \-U\c
+\&\|' options
+on the command line before processing `\|\c
+.B \-imacros \c
+.I file\c
+\&\|' \c
+\&.
+.TP
+.BI "\-include " "file"
+Process
+.I file
+as input, and include all the resulting output,
+before processing the regular input file.
+.TP
+.BI "-idirafter " "dir"\c
+\&
+Add the directory \c
+.I dir\c
+\& to the second include path. The directories
+on the second include path are searched when a header file is not found
+in any of the directories in the main include path (the one that
+`\|\c
+.B \-I\c
+\&\|' adds to).
+.TP
+.BI "-iprefix " "prefix"\c
+\&
+Specify \c
+.I prefix\c
+\& as the prefix for subsequent `\|\c
+.B \-iwithprefix\c
+\&\|'
+options.
+.TP
+.BI "-iwithprefix " "dir"\c
+\&
+Add a directory to the second include path. The directory's name is
+made by concatenating \c
+.I prefix\c
+\& and \c
+.I dir\c
+\&, where \c
+.I prefix\c
+\&
+was specified previously with `\|\c
+.B \-iprefix\c
+\&\|'.
+.TP
+.B \-lang-c
+.TP
+.B \-lang-c++
+.TP
+.B \-lang-objc
+.TP
+.B \-lang-objc++
+Specify the source language. `\|\c
+.B \-lang-c++\c
+\&\|' makes the preprocessor
+handle C++ comment syntax, and includes extra default include
+directories for C++, and `\|\c
+.B \-lang-objc\c
+\&\|' enables the Objective C
+`\|\c
+.B #import\c
+\&\|' directive. `\|\c
+.B \-lang-c\c
+\&\|' explicitly turns off both of
+these extensions, and `\|\c
+.B \-lang-objc++\c
+\&\|' enables both.
+
+These options are generated by the compiler driver \c
+.B gcc\c
+\&, but not
+passed from the `\|\c
+.B gcc\c
+\&\|' command line.
+.TP
+.B \-lint
+Look for commands to the program checker \c
+.B lint\c
+\& embedded in
+comments, and emit them preceded by `\|\c
+.B #pragma lint\c
+\&\|'. For example,
+the comment `\|\c
+.B /* NOTREACHED */\c
+\&\|' becomes `\|\c
+.B #pragma lint
+NOTREACHED\c
+\&\|'.
+
+This option is available only when you call \c
+.B cpp\c
+\& directly;
+\c
+.B gcc\c
+\& will not pass it from its command line.
+.TP
+.B \-$
+Forbid the use of `\|\c
+.B $\c
+\&\|' in identifiers. This was formerly required for strict conformance
+to the C Standard before the standard was corrected. \c
+
+This option is available only when you call \c
+.B cpp\c
+\& directly;
+.B gcc\c
+\& will not pass it from its command line.
+.SH "SEE ALSO"
+.RB "`\|" Cpp "\|'"
+entry in
+.B info\c
+\&;
+.I The C Preprocessor\c
+, Richard M. Stallman.
+.br
+.BR gcc "(" 1 ");"
+.RB "`\|" Gcc "\|'"
+entry in
+.B info\c
+\&;
+.I
+Using and Porting GNU CC (for version 2.0)\c
+, Richard M. Stallman.
+.SH COPYING
+Copyright (c) 1991, 1992, 1993 Free Software Foundation, Inc.
+.PP
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+.PP
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the
+entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+.PP
+Permission is granted to copy and distribute translations of this
+manual into another language, under the above conditions for modified
+versions, except that this permission notice may be included in
+translations approved by the Free Software Foundation instead of in
+the original English.
diff --git a/gcc/cccp.c b/gcc/cccp.c
index 0df37379490..28ff4ca601b 100644
--- a/gcc/cccp.c
+++ b/gcc/cccp.c
@@ -1,5 +1,5 @@
/* C Compatible Compiler Preprocessor (CCCP)
- Copyright (C) 1986, 87, 89, 92-96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1986, 87, 89, 92-97, 1998 Free Software Foundation, Inc.
Written by Paul Rubin, June 1986
Adapted to ANSI C, Richard Stallman, Jan 1987
@@ -16,88 +16,27 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+Boston, MA 02111-1307, USA. */
- In other words, you are welcome to use, share and improve this program.
- You are forbidden to forbid anyone else to use, share and improve
- what you give them. Help stamp out software-hoarding! */
-
-typedef unsigned char U_CHAR;
-
-#ifdef EMACS
-#define NO_SHORTNAMES
-#include "../src/config.h"
-#ifdef open
-#undef open
-#undef read
-#undef write
-#endif /* open */
-#endif /* EMACS */
-
-/* The macro EMACS is defined when cpp is distributed as part of Emacs,
- for the sake of machines with limited C compilers. */
-#ifndef EMACS
#include "config.h"
-#endif /* not EMACS */
-
-#ifndef STANDARD_INCLUDE_DIR
-#define STANDARD_INCLUDE_DIR "/usr/include"
-#endif
-
-#include "pcp.h"
-
-/* By default, colon separates directories in a path. */
-#ifndef PATH_SEPARATOR
-#define PATH_SEPARATOR ':'
-#endif
-
#include <sys/types.h>
#include <sys/stat.h>
#include <ctype.h>
#include <stdio.h>
#include <signal.h>
-/* The following symbols should be autoconfigured:
- HAVE_FCNTL_H
- HAVE_STDLIB_H
- HAVE_SYS_TIME_H
- HAVE_UNISTD_H
- STDC_HEADERS
- TIME_WITH_SYS_TIME
- In the mean time, we'll get by with approximations based
- on existing GCC configuration symbols. */
-
-#ifdef POSIX
-# ifndef HAVE_STDLIB_H
-# define HAVE_STDLIB_H 1
-# endif
-# ifndef HAVE_UNISTD_H
-# define HAVE_UNISTD_H 1
-# endif
-# ifndef STDC_HEADERS
-# define STDC_HEADERS 1
-# endif
-#endif /* defined (POSIX) */
-
-#if defined (POSIX) || (defined (USG) && !defined (VMS))
-# ifndef HAVE_FCNTL_H
-# define HAVE_FCNTL_H 1
-# endif
-#endif
-
-#ifndef RLIMIT_STACK
+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
# include <time.h>
#else
-# if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
# else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-# endif
+# include <time.h>
+#endif
+#endif
+
+#ifdef HAVE_SYS_RESOURCE_H
# include <sys/resource.h>
#endif
@@ -105,96 +44,72 @@ typedef unsigned char U_CHAR;
# include <fcntl.h>
#endif
+#if HAVE_LIMITS_H
+# include <limits.h>
+#endif
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
#include <errno.h>
#if HAVE_STDLIB_H
# include <stdlib.h>
-#else
-char *getenv ();
#endif
-#if STDC_HEADERS
+#ifdef HAVE_STRING_H
# include <string.h>
-# ifndef bcmp
-# define bcmp(a, b, n) memcmp (a, b, n)
-# endif
-# ifndef bcopy
-# define bcopy(s, d, n) memcpy (d, s, n)
-# endif
-# ifndef bzero
-# define bzero(d, n) memset (d, 0, n)
-# endif
-#else /* !STDC_HEADERS */
-char *index ();
-char *rindex ();
-
-# if !defined (BSTRING) && (defined (USG) || defined (VMS))
+#else
+# ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#endif
-# ifndef bcmp
-# define bcmp my_bcmp
-static int
-my_bcmp (a, b, n)
- register char *a;
- register char *b;
- register unsigned n;
-{
- while (n-- > 0)
- if (*a++ != *b++)
- return 1;
+typedef unsigned char U_CHAR;
- return 0;
-}
-# endif /* !defined (bcmp) */
+#include "gansidecl.h"
+#include "pcp.h"
-# ifndef bcopy
-# define bcopy my_bcopy
-static void
-my_bcopy (s, d, n)
- register char *s;
- register char *d;
- register unsigned n;
-{
- while (n-- > 0)
- *d++ = *s++;
-}
-# endif /* !defined (bcopy) */
+#ifdef NEED_DECLARATION_INDEX
+extern char *index ();
+#endif
-# ifndef bzero
-# define bzero my_bzero
-static void
-my_bzero (b, length)
- register char *b;
- register unsigned length;
-{
- while (length-- > 0)
- *b++ = 0;
-}
-# endif /* !defined (bzero) */
+#ifdef NEED_DECLARATION_RINDEX
+extern char *rindex ();
+#endif
-# endif /* !defined (BSTRING) && (defined (USG) || defined (VMS)) */
-#endif /* ! STDC_HEADERS */
+#ifdef NEED_DECLARATION_GETENV
+extern char *getenv ();
+#endif
#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
# define __attribute__(x)
#endif
-#ifndef PROTO
-# if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
-# define PROTO(ARGS) ARGS
-# else
-# define PROTO(ARGS) ()
-# endif
+#ifndef STANDARD_INCLUDE_DIR
+# define STANDARD_INCLUDE_DIR "/usr/include"
+#endif
+
+/* By default, colon separates directories in a path. */
+#ifndef PATH_SEPARATOR
+# define PATH_SEPARATOR ':'
+#endif
+
+/* By default, the suffix for object files is ".o". */
+#ifdef OBJECT_SUFFIX
+# define HAVE_OBJECT_SUFFIX
+#else
+# define OBJECT_SUFFIX ".o"
#endif
#if defined (__STDC__) && defined (HAVE_VPRINTF)
# include <stdarg.h>
-# define VA_START(va_list, var) va_start (va_list, var)
# define PRINTF_ALIST(msg) char *msg, ...
# define PRINTF_DCL(msg)
# define PRINTF_PROTO(ARGS, m, n) PROTO (ARGS) __attribute__ ((format (__printf__, m, n)))
#else
# include <varargs.h>
-# define VA_START(va_list, var) va_start (va_list)
# define PRINTF_ALIST(msg) msg, va_alist
# define PRINTF_DCL(msg) char *msg; va_dcl
# define PRINTF_PROTO(ARGS, m, n) () __attribute__ ((format (__printf__, m, n)))
@@ -212,10 +127,6 @@ my_bzero (b, length)
#define PRINTF_PROTO_2(ARGS) PRINTF_PROTO(ARGS, 2, 3)
#define PRINTF_PROTO_3(ARGS) PRINTF_PROTO(ARGS, 3, 4)
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
/* VMS-specific definitions */
#ifdef VMS
#include <descrip.h>
@@ -225,8 +136,8 @@ my_bzero (b, length)
#define fstat(fd,stbuf) VMS_fstat (fd,stbuf)
static int VMS_fstat (), VMS_stat ();
static int VMS_open ();
-static FILE * VMS_fopen ();
-static FILE * VMS_freopen ();
+static FILE *VMS_fopen ();
+static FILE *VMS_freopen ();
static void hack_vms_include_specification ();
#define INO_T_EQ(a, b) (!bcmp((char *) &(a), (char *) &(b), sizeof (a)))
#define INO_T_HASH(a) 0
@@ -248,18 +159,23 @@ static void hack_vms_include_specification ();
#define MAX(X,Y) ((X) > (Y) ? (X) : (Y))
/* Find the largest host integer type and set its size and type.
- Don't blindly use `long'; on some crazy hosts it is shorter than `int'. */
-
-#ifndef HOST_BITS_PER_WIDE_INT
-
-#if HOST_BITS_PER_LONG > HOST_BITS_PER_INT
-#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONG
-#define HOST_WIDE_INT long
-#else
-#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_INT
-#define HOST_WIDE_INT int
-#endif
+ Watch out: on some crazy hosts `long' is shorter than `int'. */
+#ifndef HOST_WIDE_INT
+# if HAVE_INTTYPES_H
+# include <inttypes.h>
+# define HOST_WIDE_INT intmax_t
+# else
+# if (HOST_BITS_PER_LONG <= HOST_BITS_PER_INT && HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_INT)
+# define HOST_WIDE_INT int
+# else
+# if (HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_LONG || ! (defined LONG_LONG_MAX || defined LLONG_MAX))
+# define HOST_WIDE_INT long
+# else
+# define HOST_WIDE_INT long long
+# endif
+# endif
+# endif
#endif
#ifndef S_ISREG
@@ -278,24 +194,6 @@ static void hack_vms_include_specification ();
#define INO_T_HASH(a) (a)
#endif
-/* Define a generic NULL if one hasn't already been defined. */
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-#ifndef GENERIC_PTR
-#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
-#define GENERIC_PTR void *
-#else
-#define GENERIC_PTR char *
-#endif
-#endif
-
-#ifndef NULL_PTR
-#define NULL_PTR ((GENERIC_PTR) 0)
-#endif
-
#ifndef INCLUDE_LEN_FUDGE
#define INCLUDE_LEN_FUDGE 0
#endif
@@ -303,14 +201,11 @@ static void hack_vms_include_specification ();
/* External declarations. */
extern char *version_string;
+extern char *update_path PROTO((char *, char *));
#ifndef VMS
#ifndef HAVE_STRERROR
extern int sys_nerr;
-#if defined(bsd4_4)
-extern const char *const sys_errlist[];
-#else
extern char *sys_errlist[];
-#endif
#else /* HAVE_STRERROR */
char *strerror ();
#endif
@@ -318,7 +213,7 @@ char *strerror ();
char *strerror (int,...);
#endif
HOST_WIDE_INT parse_escape PROTO((char **, HOST_WIDE_INT));
-HOST_WIDE_INT parse_c_expression PROTO((char *));
+HOST_WIDE_INT parse_c_expression PROTO((char *, int));
#ifndef errno
extern int errno;
@@ -404,6 +299,10 @@ static enum {dump_none, dump_only, dump_names, dump_definitions}
where they are defined. */
static int debug_output = 0;
+/* Nonzero means pass #include lines through to the output,
+ even if they are ifdefed out. */
+static int dump_includes;
+
/* Nonzero indicates special processing used by the pcp program. The
special effects of this mode are:
@@ -455,7 +354,7 @@ static int warn_trigraphs;
/* Nonzero means warn if undefined identifiers are evaluated in an #if. */
-int warn_undef;
+static int warn_undef;
/* Nonzero means warn if #import is used. */
@@ -479,6 +378,9 @@ int c89;
static int no_output;
+/* Nonzero means we should look for header.gcc files that remap file names. */
+static int remap;
+
/* Nonzero means this file was included with a -imacros or -include
command line and should not be recorded as an include file. */
@@ -522,7 +424,7 @@ static struct file_buf {
struct if_stack *if_stack;
/* Object to be freed at end of input at this level. */
U_CHAR *free_ptr;
- /* True if this is a header file included using <FILENAME>. */
+ /* True if this is a system header file; see is_system_include. */
char system_header_p;
} instack[INPUT_STACK_MAX];
@@ -583,6 +485,7 @@ struct file_name_list
/* The */
static struct default_include {
char *fname; /* The name of the directory. */
+ char *component; /* The component containing the directory */
int cplusplus; /* Only look here if we're compiling C++. */
int cxx_aware; /* Includes in this directory don't need to
be wrapped in extern "C" when compiling
@@ -593,40 +496,43 @@ static struct default_include {
#else
= {
/* Pick up GNU C++ specific include files. */
- { GPLUSPLUS_INCLUDE_DIR, 1, 1 },
- { OLD_GPLUSPLUS_INCLUDE_DIR, 1, 1 },
+ { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 },
+ { OLD_GPLUSPLUS_INCLUDE_DIR, 0, 1, 1 },
#ifdef CROSS_COMPILE
/* This is the dir for fixincludes. Put it just before
the files that we fix. */
- { GCC_INCLUDE_DIR, 0, 0 },
+ { GCC_INCLUDE_DIR, "GCC", 0, 0 },
/* For cross-compilation, this dir name is generated
automatically in Makefile.in. */
- { CROSS_INCLUDE_DIR, 0, 0 },
+ { CROSS_INCLUDE_DIR, "GCC", 0, 0 },
#ifdef TOOL_INCLUDE_DIR
/* This is another place that the target system's headers might be. */
- { TOOL_INCLUDE_DIR, 0, 0 },
+ { TOOL_INCLUDE_DIR, "BINUTILS", 0, 0 },
#endif
#else /* not CROSS_COMPILE */
#ifdef LOCAL_INCLUDE_DIR
/* This should be /usr/local/include and should come before
the fixincludes-fixed header files. */
- { LOCAL_INCLUDE_DIR, 0, 1 },
+ { LOCAL_INCLUDE_DIR, 0, 0, 1 },
#endif
#ifdef TOOL_INCLUDE_DIR
/* This is here ahead of GCC_INCLUDE_DIR because assert.h goes here.
Likewise, behind LOCAL_INCLUDE_DIR, where glibc puts its assert.h. */
- { TOOL_INCLUDE_DIR, 0, 0 },
+ { TOOL_INCLUDE_DIR, "BINUTILS", 0, 0 },
#endif
/* This is the dir for fixincludes. Put it just before
the files that we fix. */
- { GCC_INCLUDE_DIR, 0, 0 },
+ { GCC_INCLUDE_DIR, "GCC", 0, 0 },
/* Some systems have an extra dir of include files. */
#ifdef SYSTEM_INCLUDE_DIR
- { SYSTEM_INCLUDE_DIR, 0, 0 },
+ { SYSTEM_INCLUDE_DIR, 0, 0, 0 },
+#endif
+#ifndef STANDARD_INCLUDE_COMPONENT
+#define STANDARD_INCLUDE_COMPONENT 0
#endif
- { STANDARD_INCLUDE_DIR, 0, 0 },
+ { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0 },
#endif /* not CROSS_COMPILE */
- { 0, 0, 0 }
+ { 0, 0, 0, 0 }
};
#endif /* no INCLUDE_DEFAULTS */
@@ -958,13 +864,11 @@ struct directive {
int (*func) DO_PROTO; /* Function to handle directive */
char *name; /* Name of directive */
enum node_type type; /* Code which describes which directive. */
- char angle_brackets; /* Nonzero => <...> is special. */
- char traditional_comments; /* Nonzero: keep comments if -traditional. */
- char pass_thru; /* Copy directive to output:
- if 1, copy if dumping definitions;
- if 2, always copy, after preprocessing. */
};
+#define IS_INCLUDE_DIRECTIVE_TYPE(t) \
+((int) T_INCLUDE <= (int) (t) && (int) (t) <= (int) T_IMPORT)
+
/* These functions are declared to return int instead of void since they
are going to be placed in the table and some old compilers have trouble with
pointers to functions returning void. */
@@ -991,7 +895,7 @@ static int do_xifdef DO_PROTO;
/* Here is the actual list of #-directives, most-often-used first. */
static struct directive directive_table[] = {
- { 6, do_define, "define", T_DEFINE, 0, 1, 1},
+ { 6, do_define, "define", T_DEFINE},
{ 2, do_if, "if", T_IF},
{ 5, do_xifdef, "ifdef", T_IFDEF},
{ 6, do_xifdef, "ifndef", T_IFNDEF},
@@ -999,16 +903,16 @@ static struct directive directive_table[] = {
{ 4, do_else, "else", T_ELSE},
{ 4, do_elif, "elif", T_ELIF},
{ 4, do_line, "line", T_LINE},
- { 7, do_include, "include", T_INCLUDE, 1},
- { 12, do_include, "include_next", T_INCLUDE_NEXT, 1},
- { 6, do_include, "import", T_IMPORT, 1},
+ { 7, do_include, "include", T_INCLUDE},
+ { 12, do_include, "include_next", T_INCLUDE_NEXT},
+ { 6, do_include, "import", T_IMPORT},
{ 5, do_undef, "undef", T_UNDEF},
{ 5, do_error, "error", T_ERROR},
{ 7, do_warning, "warning", T_WARNING},
#ifdef SCCS_DIRECTIVE
{ 4, do_sccs, "sccs", T_SCCS},
#endif
- { 6, do_pragma, "pragma", T_PRAGMA, 0, 0, 2},
+ { 6, do_pragma, "pragma", T_PRAGMA},
{ 5, do_ident, "ident", T_IDENT},
{ 6, do_assert, "assert", T_ASSERT},
{ 8, do_unassert, "unassert", T_UNASSERT},
@@ -1156,7 +1060,7 @@ static void macroexpand PROTO((HASHNODE *, FILE_BUF *));
struct argdata;
static char *macarg PROTO((struct argdata *, int));
-static U_CHAR *macarg1 PROTO((U_CHAR *, U_CHAR *, int *, int *, int *, int));
+static U_CHAR *macarg1 PROTO((U_CHAR *, U_CHAR *, struct hashnode *, int *, int *, int *, int));
static int discard_comments PROTO((U_CHAR *, int, int));
@@ -1199,9 +1103,10 @@ static void make_undef PROTO((char *, FILE_BUF *));
static void make_assertion PROTO((char *, char *));
-static struct file_name_list *new_include_prefix PROTO((struct file_name_list *, char *, char *));
+static struct file_name_list *new_include_prefix PROTO((struct file_name_list *, char *, char *, char *));
static void append_include_chain PROTO((struct file_name_list *, struct file_name_list *));
+static int quote_string_for_make PROTO((char *, char *));
static void deps_output PROTO((char *, int));
static void fatal PRINTF_PROTO_1((char *, ...)) __attribute__ ((noreturn));
@@ -1326,7 +1231,7 @@ main (argc, argv)
/* Target-name to write with the dependency information. */
char *deps_target = 0;
-#ifdef RLIMIT_STACK
+#if defined (RLIMIT_STACK) && defined (HAVE_GETRLIMIT) && defined (HAVE_SETRLIMIT)
/* Get rid of any avoidable limit on stack size. */
{
struct rlimit rlim;
@@ -1337,7 +1242,7 @@ main (argc, argv)
rlim.rlim_cur = rlim.rlim_max;
setrlimit (RLIMIT_STACK, &rlim);
}
-#endif /* RLIMIT_STACK defined */
+#endif
#ifdef SIGPIPE
signal (SIGPIPE, pipe_closed);
@@ -1418,7 +1323,8 @@ main (argc, argv)
if (!strcmp (argv[i], "-isystem")) {
struct file_name_list *dirtmp;
- if (! (dirtmp = new_include_prefix (NULL_PTR, "", argv[++i])))
+ if (! (dirtmp = new_include_prefix (NULL_PTR, NULL_PTR,
+ "", argv[++i])))
break;
dirtmp->c_system_include_path = 1;
@@ -1443,7 +1349,8 @@ main (argc, argv)
prefix[strlen (prefix) - 7] = 0;
}
- if (! (dirtmp = new_include_prefix (NULL_PTR, prefix, argv[++i])))
+ if (! (dirtmp = new_include_prefix (NULL_PTR, NULL_PTR,
+ prefix, argv[++i])))
break;
if (after_include == 0)
@@ -1467,14 +1374,15 @@ main (argc, argv)
prefix[strlen (prefix) - 7] = 0;
}
- dirtmp = new_include_prefix (NULL_PTR, prefix, argv[++i]);
+ dirtmp = new_include_prefix (NULL_PTR, NULL_PTR, prefix, argv[++i]);
append_include_chain (dirtmp, dirtmp);
}
/* Add directory to end of path for includes. */
if (!strcmp (argv[i], "-idirafter")) {
struct file_name_list *dirtmp;
- if (! (dirtmp = new_include_prefix (NULL_PTR, "", argv[++i])))
+ if (! (dirtmp = new_include_prefix (NULL_PTR, NULL_PTR,
+ "", argv[++i])))
break;
if (after_include == 0)
@@ -1645,6 +1553,9 @@ main (argc, argv)
case 'D':
dump_macros = dump_definitions;
break;
+ case 'I':
+ dump_includes = 1;
+ break;
}
}
}
@@ -1738,7 +1649,7 @@ main (argc, argv)
first_bracket_include = 0;
}
else {
- dirtmp = new_include_prefix (last_include, "",
+ dirtmp = new_include_prefix (last_include, NULL_PTR, "",
argv[i][2] ? argv[i] + 2 : argv[++i]);
append_include_chain (dirtmp, dirtmp);
}
@@ -1757,6 +1668,11 @@ main (argc, argv)
no_precomp = 1;
break;
+ case 'r':
+ if (!strcmp (argv[i], "-remap"))
+ remap = 1;
+ break;
+
case 'u':
/* Sun compiler passes undocumented switch "-undef".
Let's assume it means to inhibit the predefined symbols. */
@@ -1944,6 +1860,7 @@ main (argc, argv)
include_defaults[num_dirs].fname
= startp == endp ? "." : savestring (startp);
endp[-1] = c;
+ include_defaults[num_dirs].component = 0;
include_defaults[num_dirs].cplusplus = cplusplus;
include_defaults[num_dirs].cxx_aware = 1;
num_dirs++;
@@ -1984,7 +1901,7 @@ main (argc, argv)
if (!strncmp (p->fname, default_prefix, default_len)) {
/* Yes; change prefix and add to search list. */
struct file_name_list *new
- = new_include_prefix (NULL_PTR, specd_prefix,
+ = new_include_prefix (NULL_PTR, NULL_PTR, specd_prefix,
p->fname + default_len);
if (new) {
new->c_system_include_path = !p->cxx_aware;
@@ -2000,7 +1917,7 @@ main (argc, argv)
/* Some standard dirs are only for C++. */
if (!p->cplusplus || (cplusplus && !no_standard_cplusplus_includes)) {
struct file_name_list *new
- = new_include_prefix (NULL_PTR, "", p->fname);
+ = new_include_prefix (NULL_PTR, p->component, "", p->fname);
if (new) {
new->c_system_include_path = !p->cxx_aware;
append_include_chain (new, new);
@@ -2127,11 +2044,7 @@ main (argc, argv)
q = p + (len - 4);
/* Supply our own suffix. */
-#ifndef VMS
- strcpy (q, ".o");
-#else
- strcpy (q, ".obj");
-#endif
+ strcpy (q, OBJECT_SUFFIX);
deps_output (p, ':');
deps_output (in_fname, ' ');
@@ -2197,8 +2110,11 @@ main (argc, argv)
} else {
/* Read a file whose size we can determine in advance.
For the sake of VMS, st.st_size is just an upper bound. */
- fp->buf = (U_CHAR *) xmalloc (st.st_size + 2);
- fp->length = safe_read (f, (char *) fp->buf, st.st_size);
+ size_t s = (size_t) st.st_size;
+ if (s != st.st_size || s + 2 < s)
+ memory_full ();
+ fp->buf = (U_CHAR *) xmalloc (s + 2);
+ fp->length = safe_read (f, (char *) fp->buf, s);
if (fp->length < 0) goto perror;
}
fp->bufp = fp->buf;
@@ -2314,7 +2230,8 @@ path_include (path)
continue;
q[-1] = 0;
- dirtmp = new_include_prefix (last_include, "", p == q ? "." : p);
+ dirtmp = new_include_prefix (last_include, NULL_PTR,
+ "", p == q ? "." : p);
q[-1] = c;
append_include_chain (dirtmp, dirtmp);
@@ -2839,9 +2756,11 @@ do { ip = &instack[indepth]; \
/* Handle any pending identifier;
but the L in L'...' or L"..." is not an identifier. */
- if (ident_length
- && ! (ident_length == 1 && hash == HASHSTEP (0, 'L')))
- goto specialchar;
+ if (ident_length) {
+ if (! (ident_length == 1 && hash == HASHSTEP (0, 'L')))
+ goto specialchar;
+ ident_length = hash = 0;
+ }
start_line = ip->lineno;
@@ -2860,9 +2779,11 @@ do { ip = &instack[indepth]; \
if (!traditional) {
error_with_line (line_for_error (start_line),
"unterminated string or character constant");
- error_with_line (multiline_string_line,
- "possible real start of unterminated constant");
- multiline_string_line = 0;
+ if (multiline_string_line) {
+ error_with_line (multiline_string_line,
+ "possible real start of unterminated constant");
+ multiline_string_line = 0;
+ }
}
break;
}
@@ -2891,20 +2812,25 @@ do { ip = &instack[indepth]; \
break;
case '\\':
- if (ibp >= limit)
- break;
if (*ibp == '\n') {
- /* Backslash newline is replaced by nothing at all,
- but keep the line counts correct. */
- --obp;
+ /* Backslash newline is replaced by nothing at all, but
+ keep the line counts correct. But if we are reading
+ from a macro, keep the backslash newline, since backslash
+ newlines have already been processed. */
+ if (ip->macro)
+ *obp++ = '\n';
+ else
+ --obp;
++ibp;
++ip->lineno;
} else {
/* ANSI stupidly requires that in \\ the second \
is *not* prevented from combining with a newline. */
- while (*ibp == '\\' && ibp[1] == '\n') {
- ibp += 2;
- ++ip->lineno;
+ if (!ip->macro) {
+ while (*ibp == '\\' && ibp[1] == '\n') {
+ ibp += 2;
+ ++ip->lineno;
+ }
}
*obp++ = *ibp++;
}
@@ -2921,14 +2847,13 @@ do { ip = &instack[indepth]; \
break;
case '/':
+ if (ip->macro != 0)
+ goto randomchar;
if (*ibp == '\\' && ibp[1] == '\n')
newline_fix (ibp);
-
if (*ibp != '*'
&& !(cplusplus_comments && *ibp == '/'))
goto randomchar;
- if (ip->macro != 0)
- goto randomchar;
if (ident_length)
goto specialchar;
@@ -3079,9 +3004,11 @@ do { ip = &instack[indepth]; \
if (ident_length == 0) {
for (;;) {
- while (ibp[0] == '\\' && ibp[1] == '\n') {
- ++ip->lineno;
- ibp += 2;
+ if (!ip->macro) {
+ while (ibp[0] == '\\' && ibp[1] == '\n') {
+ ++ip->lineno;
+ ibp += 2;
+ }
}
c = *ibp++;
if (!is_idchar[c] && c != '.') {
@@ -3092,9 +3019,11 @@ do { ip = &instack[indepth]; \
/* A sign can be part of a preprocessing number
if it follows an `e' or `p'. */
if (c == 'e' || c == 'E' || c == 'p' || c == 'P') {
- while (ibp[0] == '\\' && ibp[1] == '\n') {
- ++ip->lineno;
- ibp += 2;
+ if (!ip->macro) {
+ while (ibp[0] == '\\' && ibp[1] == '\n') {
+ ++ip->lineno;
+ ibp += 2;
+ }
}
if (*ibp == '+' || *ibp == '-') {
*obp++ = *ibp++;
@@ -3354,35 +3283,6 @@ randomchar:
old_iln = ip->lineno;
old_oln = op->lineno;
}
- /* A comment: copy it unchanged or discard it. */
- else if (*ibp == '/' && ibp[1] == '*') {
- if (put_out_comments) {
- *obp++ = '/';
- *obp++ = '*';
- } else if (! traditional) {
- *obp++ = ' ';
- }
- ibp += 2;
- while (ibp + 1 != limit
- && !(ibp[0] == '*' && ibp[1] == '/')) {
- /* We need not worry about newline-marks,
- since they are never found in comments. */
- if (*ibp == '\n') {
- /* Newline in a file. Count it. */
- ++ip->lineno;
- ++op->lineno;
- }
- if (put_out_comments)
- *obp++ = *ibp++;
- else
- ibp++;
- }
- ibp += 2;
- if (put_out_comments) {
- *obp++ = '*';
- *obp++ = '/';
- }
- }
else if (is_space[*ibp]) {
*obp++ = *ibp++;
if (ibp[-1] == '\n') {
@@ -3409,6 +3309,59 @@ randomchar:
}
}
}
+ else if (ip->macro)
+ break;
+ else if (*ibp == '/') {
+ /* If a comment, copy it unchanged or discard it. */
+ if (ibp[1] == '\\' && ibp[2] == '\n')
+ newline_fix (ibp + 1);
+ if (ibp[1] == '*') {
+ if (put_out_comments) {
+ *obp++ = '/';
+ *obp++ = '*';
+ } else if (! traditional) {
+ *obp++ = ' ';
+ }
+ for (ibp += 2; ibp < limit; ibp++) {
+ /* We need not worry about newline-marks,
+ since they are never found in comments. */
+ if (ibp[0] == '*') {
+ if (ibp[1] == '\\' && ibp[2] == '\n')
+ newline_fix (ibp + 1);
+ if (ibp[1] == '/') {
+ ibp += 2;
+ if (put_out_comments) {
+ *obp++ = '*';
+ *obp++ = '/';
+ }
+ break;
+ }
+ }
+ if (*ibp == '\n') {
+ /* Newline in a file. Count it. */
+ ++ip->lineno;
+ ++op->lineno;
+ }
+ if (put_out_comments)
+ *obp++ = *ibp;
+ }
+ } else if (ibp[1] == '/' && cplusplus_comments) {
+ if (put_out_comments) {
+ *obp++ = '/';
+ *obp++ = '/';
+ } else if (! traditional) {
+ *obp++ = ' ';
+ }
+ for (ibp += 2; *ibp != '\n' || ibp[-1] == '\\'; ibp++)
+ if (put_out_comments)
+ *obp++ = *ibp;
+ } else
+ break;
+ }
+ else if (ibp[0] == '\\' && ibp[1] == '\n') {
+ ibp += 2;
+ ++ip->lineno;
+ }
else break;
}
if (*ibp != '(') {
@@ -3630,8 +3583,11 @@ handle_directive (ip, op)
if (*bp != ' ' && *bp != '\t' && pedantic)
pedwarn ("%s in preprocessing directive", char_name[*bp]);
bp++;
- } else if (*bp == '/' && (bp[1] == '*'
- || (cplusplus_comments && bp[1] == '/'))) {
+ } else if (*bp == '/') {
+ if (bp[1] == '\\' && bp[2] == '\n')
+ newline_fix (bp + 1);
+ if (! (bp[1] == '*' || (cplusplus_comments && bp[1] == '/')))
+ break;
ip->bufp = bp + 2;
skip_to_end_of_comment (ip, &ip->lineno, 0);
bp = ip->bufp;
@@ -3723,7 +3679,7 @@ handle_directive (ip, op)
limit = ip->buf + ip->length;
unterminated = 0;
already_output = 0;
- keep_comments = traditional && kt->traditional_comments;
+ keep_comments = traditional && kt->type == T_DEFINE;
/* #import is defined only in Objective C, or when on the NeXT. */
if (kt->type == T_IMPORT
&& !(objc || lookup ((U_CHAR *) "__NeXT__", -1, -1)))
@@ -3749,8 +3705,25 @@ handle_directive (ip, op)
}
break;
+ case '"':
+ /* "..." is special for #include. */
+ if (IS_INCLUDE_DIRECTIVE_TYPE (kt->type)) {
+ while (bp < limit && *bp != '\n') {
+ if (*bp == '"') {
+ bp++;
+ break;
+ }
+ if (*bp == '\\' && bp[1] == '\n') {
+ ip->lineno++;
+ copy_directive = 1;
+ bp++;
+ }
+ bp++;
+ }
+ break;
+ }
+ /* Fall through. */
case '\'':
- case '\"':
bp = skip_quoted_string (bp - 1, limit, ip->lineno, &ip->lineno, &copy_directive, &unterminated);
/* Don't bother calling the directive if we already got an error
message due to unterminated string. Skip everything and pretend
@@ -3768,7 +3741,7 @@ handle_directive (ip, op)
/* <...> is special for #include. */
case '<':
- if (!kt->angle_brackets)
+ if (! IS_INCLUDE_DIRECTIVE_TYPE (kt->type))
break;
while (bp < limit && *bp != '>' && *bp != '\n') {
if (*bp == '\\' && bp[1] == '\n') {
@@ -3827,10 +3800,12 @@ handle_directive (ip, op)
RESUME_P is the next interesting data after the directive.
A comment may come between. */
- /* If a directive should be copied through, and -E was given,
+ /* If a directive should be copied through, and -C was given,
pass it through before removing comments. */
if (!no_output && put_out_comments
- && (dump_macros != dump_definitions) < kt->pass_thru) {
+ && (kt->type == T_DEFINE ? dump_macros == dump_definitions
+ : IS_INCLUDE_DIRECTIVE_TYPE (kt->type) ? dump_includes
+ : kt->type == T_PRAGMA)) {
int len;
/* Output directive name. */
@@ -3879,7 +3854,7 @@ handle_directive (ip, op)
/* <...> is special for #include. */
case '<':
- if (!kt->angle_brackets)
+ if (! IS_INCLUDE_DIRECTIVE_TYPE (kt->type))
break;
while (xp < bp && c != '>') {
c = *xp++;
@@ -3914,13 +3889,7 @@ handle_directive (ip, op)
= skip_quoted_string (xp - 1, bp, ip->lineno,
NULL_PTR, NULL_PTR, NULL_PTR);
while (xp != bp1)
- if (*xp == '\\') {
- if (*++xp != '\n')
- *cp++ = '\\';
- else
- xp++;
- } else
- *cp++ = *xp++;
+ *cp++ = *xp++;
}
break;
@@ -3954,10 +3923,12 @@ handle_directive (ip, op)
/* Some directives should be written out for cc1 to process,
just as if they were not defined. And sometimes we're copying
- definitions through. */
+ directives through. */
if (!no_output && already_output == 0
- && (dump_macros < dump_names) < kt->pass_thru) {
+ && (kt->type == T_DEFINE ? (int) dump_names <= (int) dump_macros
+ : IS_INCLUDE_DIRECTIVE_TYPE (kt->type) ? dump_includes
+ : kt->type == T_PRAGMA)) {
int len;
/* Output directive name. */
@@ -3966,13 +3937,8 @@ handle_directive (ip, op)
bcopy (kt->name, (char *) op->bufp, kt->length);
op->bufp += kt->length;
- if ((dump_macros != dump_definitions) < kt->pass_thru) {
- /* Output arguments. */
- len = (cp - buf);
- check_expand (op, len);
- bcopy (buf, (char *) op->bufp, len);
- op->bufp += len;
- } else if (kt->type == T_DEFINE && dump_macros == dump_names) {
+ if (kt->type == T_DEFINE && dump_macros == dump_names) {
+ /* Output `#define name' only. */
U_CHAR *xp = buf;
U_CHAR *yp;
SKIP_WHITE_SPACE (xp);
@@ -3981,9 +3947,14 @@ handle_directive (ip, op)
len = (xp - yp);
check_expand (op, len + 1);
*op->bufp++ = ' ';
- bcopy (yp, op->bufp, len);
- op->bufp += len;
+ bcopy (yp, (char *) op->bufp, len);
+ } else {
+ /* Output entire directive. */
+ len = (cp - buf);
+ check_expand (op, len);
+ bcopy (buf, (char *) op->bufp, len);
}
+ op->bufp += len;
} /* Don't we need a newline or #line? */
/* Call the appropriate directive handler. buf now points to
@@ -4117,6 +4088,12 @@ special_symbol (hp, op)
case T_CONST:
buf = hp->value.cpval;
+#ifdef STDC_0_IN_SYSTEM_HEADERS
+ if (ip->system_header_p
+ && hp->length == 8 && bcmp (hp->name, "__STDC__", 8) == 0
+ && !lookup ((U_CHAR *) "__STRICT_ANSI__", -1, -1))
+ buf = "0";
+#endif
if (pcp_inside_if && pcp_outfile)
/* Output a precondition for this macro use */
fprintf (pcp_outfile, "#define %s %s\n", hp->name, buf);
@@ -4276,10 +4253,15 @@ get_filename:
FILE_BUF *fp;
/* Copy the operand text, concatenating the strings. */
{
- while (fin != limit) {
- while (fin != limit && *fin != '\"')
- *fend++ = *fin++;
- fin++;
+ for (;;) {
+ for (;;) {
+ if (fin == limit)
+ goto invalid_include_file_name;
+ *fend = *fin++;
+ if (*fend == '"')
+ break;
+ fend++;
+ }
if (fin == limit)
break;
/* If not at the end, there had better be another string. */
@@ -4362,16 +4344,18 @@ get_filename:
#endif
fail:
- if (retried) {
- error ("`#%s' expects \"FILENAME\" or <FILENAME>", keyword->name);
- return 0;
- } else {
+ if (! retried) {
/* Expand buffer and then remove any newline markers.
We can't just tell expand_to_temp_buffer to omit the markers,
since it would put extra spaces in include file names. */
FILE_BUF trybuf;
U_CHAR *src;
+ int errors_before_expansion = errors;
trybuf = expand_to_temp_buffer (buf, limit, 1, 0);
+ if (errors != errors_before_expansion) {
+ free (trybuf.buf);
+ goto invalid_include_file_name;
+ }
src = trybuf.buf;
buf = (U_CHAR *) alloca (trybuf.bufp - trybuf.buf + 1);
limit = buf;
@@ -4395,9 +4379,13 @@ get_filename:
}
*limit = 0;
free (trybuf.buf);
- retried++;
+ retried = 1;
goto get_filename;
}
+
+ invalid_include_file_name:
+ error ("`#%s' expects \"FILENAME\" or <FILENAME>", keyword->name);
+ return 0;
}
/* For #include_next, skip in the search path
@@ -4678,7 +4666,7 @@ absolute_filename (filename)
Do only the simplifications allowed by Posix.
It is OK to miss simplifications on non-Posix hosts,
- since this merely leads to suboptimial results. */
+ since this merely leads to suboptimal results. */
static size_t
simplify_filename (filename)
@@ -4895,7 +4883,7 @@ open_include_file (filename, searchptr, importing, pinc)
U_CHAR *importing;
struct include_file **pinc;
{
- char *fname = remap_include_file (filename, searchptr);
+ char *fname = remap ? remap_include_file (filename, searchptr) : filename;
int fd = -2;
/* Look up FNAME in include_hashtab. */
@@ -5059,12 +5047,15 @@ finclude (f, inc, op, system_header_p, dirptr)
fp->dir = dirptr;
if (S_ISREG (inc->st.st_mode)) {
- fp->buf = (U_CHAR *) xmalloc (inc->st.st_size + 2);
+ size_t s = (size_t) inc->st.st_size;
+ if (s != inc->st.st_size || s + 2 < s)
+ memory_full ();
+ fp->buf = (U_CHAR *) xmalloc (s + 2);
fp->bufp = fp->buf;
- /* Read the file contents, knowing that inc->st.st_size is an upper bound
+ /* Read the file contents, knowing that s is an upper bound
on the number of bytes we can read. */
- fp->length = safe_read (f, (char *) fp->buf, inc->st.st_size);
+ fp->length = safe_read (f, (char *) fp->buf, s);
if (fp->length < 0) goto nope;
}
else if (S_ISDIR (inc->st.st_mode)) {
@@ -5179,8 +5170,11 @@ check_precompiled (pcf, st, fname, limit)
if (S_ISREG (st->st_mode))
{
- buf = xmalloc (st->st_size + 2);
- length = safe_read (pcf, buf, st->st_size);
+ size_t s = (size_t) st->st_size;
+ if (s != st->st_size || s + 2 < s)
+ memory_full ();
+ buf = xmalloc (s + 2);
+ length = safe_read (pcf, buf, s);
if (length < 0)
goto nope;
}
@@ -5304,12 +5298,12 @@ pcfinclude (buf, limit, name, op)
/* First skip to a longword boundary */
/* ??? Why a 4-byte boundary? On all machines? */
- /* NOTE: This works correctly even if HOST_WIDE_INT
+ /* NOTE: This works correctly even if size_t
is narrower than a pointer.
Do not try risky measures here to get another type to use!
Do not include stddef.h--it will fail! */
- if ((HOST_WIDE_INT) cp & 3)
- cp += 4 - ((HOST_WIDE_INT) cp & 3);
+ if ((size_t) cp & 3)
+ cp += 4 - ((size_t) cp & 3);
/* Now get the string. */
str = (STRINGDEF *) (GENERIC_PTR) cp;
@@ -5780,7 +5774,8 @@ compare_defs (d1, d2)
if (d1->nargs != d2->nargs)
return 1;
- if (strcmp ((char *)d1->args.argnames, (char *)d2->args.argnames))
+ if (pedantic
+ && strcmp ((char *)d1->args.argnames, (char *)d2->args.argnames))
return 1;
for (a1 = d1->pattern, a2 = d2->pattern; a1 && a2;
a1 = a1->next, a2 = a2->next) {
@@ -6797,7 +6792,7 @@ do_once ()
}
}
-/* #ident has already been copied to the output file, so just ignore it. */
+/* Report program identification. */
static int
do_ident (buf, limit, op, keyword)
@@ -6813,22 +6808,17 @@ do_ident (buf, limit, op, keyword)
pedwarn ("ANSI C does not allow `#ident'");
trybuf = expand_to_temp_buffer (buf, limit, 0, 0);
- buf = (U_CHAR *) alloca (trybuf.bufp - trybuf.buf + 1);
- bcopy ((char *) trybuf.buf, (char *) buf, trybuf.bufp - trybuf.buf);
- limit = buf + (trybuf.bufp - trybuf.buf);
- len = (limit - buf);
- free (trybuf.buf);
-
- /* Output directive name. */
- check_expand (op, 7);
+ buf = trybuf.buf;
+ len = trybuf.bufp - buf;
+
+ /* Output expanded directive. */
+ check_expand (op, 7 + len);
bcopy ("#ident ", (char *) op->bufp, 7);
op->bufp += 7;
-
- /* Output the expanded argument line. */
- check_expand (op, len);
bcopy ((char *) buf, (char *) op->bufp, len);
op->bufp += len;
+ free (buf);
return 0;
}
@@ -6857,7 +6847,7 @@ do_pragma (buf, limit, op, keyword)
int h;
U_CHAR *p = buf + 14, *fname;
SKIP_WHITE_SPACE (p);
- if (*p == '\n' || *p != '\"')
+ if (*p != '\"')
return 0;
fname = p + 1;
@@ -7005,7 +6995,8 @@ eval_if_expression (buf, length)
delete_macro (save_defined); /* clean up special symbol */
temp_obuf.buf[temp_obuf.length] = '\n';
- value = parse_c_expression ((char *) temp_obuf.buf);
+ value = parse_c_expression ((char *) temp_obuf.buf,
+ warn_undef && !instack[indepth].system_header_p);
free (temp_obuf.buf);
@@ -7160,6 +7151,7 @@ skip_if_group (ip, any, op)
/* Save info about where the group starts. */
U_CHAR *beg_of_group = bp;
int beg_lineno = ip->lineno;
+ int skipping_include_directive = 0;
if (output_conditionals && op != 0) {
char *ptr = "#failed\n";
@@ -7188,22 +7180,49 @@ skip_if_group (ip, any, op)
bp = skip_to_end_of_comment (ip, &ip->lineno, 0);
}
break;
+ case '<':
+ if (skipping_include_directive) {
+ while (bp < endb && *bp != '>' && *bp != '\n') {
+ if (*bp == '\\' && bp[1] == '\n') {
+ ip->lineno++;
+ bp++;
+ }
+ bp++;
+ }
+ }
+ break;
case '\"':
+ if (skipping_include_directive) {
+ while (bp < endb && *bp != '\n') {
+ if (*bp == '"') {
+ bp++;
+ break;
+ }
+ if (*bp == '\\' && bp[1] == '\n') {
+ ip->lineno++;
+ bp++;
+ }
+ bp++;
+ }
+ break;
+ }
+ /* Fall through. */
case '\'':
bp = skip_quoted_string (bp - 1, endb, ip->lineno, &ip->lineno,
NULL_PTR, NULL_PTR);
break;
case '\\':
- /* Char after backslash loses its special meaning. */
- if (bp < endb) {
- if (*bp == '\n')
- ++ip->lineno; /* But do update the line-count. */
+ /* Char after backslash loses its special meaning in some cases. */
+ if (*bp == '\n') {
+ ++ip->lineno;
+ bp++;
+ } else if (traditional && bp < endb)
bp++;
- }
break;
case '\n':
++ip->lineno;
beg_of_line = bp;
+ skipping_include_directive = 0;
break;
case '%':
if (beg_of_line == 0 || traditional)
@@ -7265,6 +7284,8 @@ skip_if_group (ip, any, op)
else if (*bp == '\\' && bp[1] == '\n')
bp += 2;
else if (*bp == '/') {
+ if (bp[1] == '\\' && bp[2] == '\n')
+ newline_fix (bp + 1);
if (bp[1] == '*') {
for (bp += 2; ; bp++) {
if (*bp == '\n')
@@ -7272,6 +7293,8 @@ skip_if_group (ip, any, op)
else if (*bp == '*') {
if (bp[-1] == '/' && warn_comments)
warning ("`/*' within comment");
+ if (bp[1] == '\\' && bp[2] == '\n')
+ newline_fix (bp + 1);
if (bp[1] == '/')
break;
}
@@ -7392,7 +7415,13 @@ skip_if_group (ip, any, op)
free (temp);
break;
- default:
+ case T_INCLUDE:
+ case T_INCLUDE_NEXT:
+ case T_IMPORT:
+ skipping_include_directive = 1;
+ break;
+
+ default:
break;
}
break;
@@ -7716,10 +7745,11 @@ skip_quoted_string (bp, limit, start_line, count_newlines, backslash_newlines_p,
++*count_newlines;
bp += 2;
}
- if (*bp == '\n' && count_newlines) {
+ if (*bp == '\n') {
if (backslash_newlines_p)
*backslash_newlines_p = 1;
- ++*count_newlines;
+ if (count_newlines)
+ ++*count_newlines;
}
bp++;
} else if (c == '\n') {
@@ -8153,29 +8183,30 @@ macroexpand (hp, op)
for (; i < arglen; i++) {
c = arg->raw[i];
- /* Special markers Newline Space
- generate nothing for a stringified argument. */
- if (c == '\n' && arg->raw[i+1] != '\n') {
- i++;
- continue;
- }
+ if (! in_string) {
+ /* Special markers Newline Space
+ generate nothing for a stringified argument. */
+ if (c == '\n' && arg->raw[i+1] != '\n') {
+ i++;
+ continue;
+ }
- /* Internal sequences of whitespace are replaced by one space
- except within an string or char token. */
- if (! in_string
- && (c == '\n' ? arg->raw[i+1] == '\n' : is_space[c])) {
- while (1) {
- /* Note that Newline Space does occur within whitespace
- sequences; consider it part of the sequence. */
- if (c == '\n' && is_space[arg->raw[i+1]])
- i += 2;
- else if (c != '\n' && is_space[c])
- i++;
- else break;
- c = arg->raw[i];
+ /* Internal sequences of whitespace are replaced by one space
+ except within an string or char token. */
+ if (c == '\n' ? arg->raw[i+1] == '\n' : is_space[c]) {
+ while (1) {
+ /* Note that Newline Space does occur within whitespace
+ sequences; consider it part of the sequence. */
+ if (c == '\n' && is_space[arg->raw[i+1]])
+ i += 2;
+ else if (c != '\n' && is_space[c])
+ i++;
+ else break;
+ c = arg->raw[i];
+ }
+ i--;
+ c = ' ';
}
- i--;
- c = ' ';
}
if (escaped)
@@ -8193,12 +8224,10 @@ macroexpand (hp, op)
/* Escape these chars */
if (c == '\"' || (in_string && c == '\\'))
xbuf[totlen++] = '\\';
- if (isprint (c))
- xbuf[totlen++] = c;
- else {
- sprintf ((char *) &xbuf[totlen], "\\%03o", (unsigned int) c);
- totlen += 4;
- }
+ /* We used to output e.g. \008 for control characters here,
+ but this doesn't conform to the C Standard.
+ Just output the characters as-is. */
+ xbuf[totlen++] = c;
}
if (!traditional)
xbuf[totlen++] = '\"'; /* insert ending quote */
@@ -8352,7 +8381,7 @@ macarg (argptr, rest_args)
/* Try to parse as much of the argument as exists at this
input stack level. */
- U_CHAR *bp = macarg1 (ip->bufp, ip->buf + ip->length,
+ U_CHAR *bp = macarg1 (ip->bufp, ip->buf + ip->length, ip->macro,
&paren, &newlines, &comments, rest_args);
/* If we find the end of the argument at this level,
@@ -8390,7 +8419,7 @@ macarg (argptr, rest_args)
ip = &instack[--indepth];
newlines = 0;
comments = 0;
- bp = macarg1 (ip->bufp, ip->buf + ip->length, &paren,
+ bp = macarg1 (ip->bufp, ip->buf + ip->length, ip->macro, &paren,
&newlines, &comments, rest_args);
final_start = bufsize;
bufsize += bp - ip->bufp;
@@ -8453,8 +8482,6 @@ macarg (argptr, rest_args)
#endif
if (c == '\"' || c == '\\') /* escape these chars */
totlen++;
- else if (!isprint (c))
- totlen += 3;
}
argptr->stringified_length = totlen;
}
@@ -8462,6 +8489,7 @@ macarg (argptr, rest_args)
}
/* Scan text from START (inclusive) up to LIMIT (exclusive),
+ taken from the expansion of MACRO,
counting parens in *DEPTHPTR,
and return if reach LIMIT
or before a `)' that would make *DEPTHPTR negative
@@ -8475,9 +8503,10 @@ macarg (argptr, rest_args)
Set *COMMENTS to 1 if a comment is seen. */
static U_CHAR *
-macarg1 (start, limit, depthptr, newlines, comments, rest_args)
+macarg1 (start, limit, macro, depthptr, newlines, comments, rest_args)
U_CHAR *start;
register U_CHAR *limit;
+ struct hashnode *macro;
int *depthptr, *newlines, *comments;
int rest_args;
{
@@ -8494,18 +8523,15 @@ macarg1 (start, limit, depthptr, newlines, comments, rest_args)
break;
case '\\':
/* Traditionally, backslash makes following char not special. */
- if (bp + 1 < limit && traditional)
- {
- bp++;
- /* But count source lines anyway. */
- if (*bp == '\n')
- ++*newlines;
- }
+ if (traditional && bp + 1 < limit && bp[1] != '\n')
+ bp++;
break;
case '\n':
++*newlines;
break;
case '/':
+ if (macro)
+ break;
if (bp[1] == '\\' && bp[2] == '\n')
newline_fix (bp + 1);
if (bp[1] == '*') {
@@ -8546,8 +8572,11 @@ macarg1 (start, limit, depthptr, newlines, comments, rest_args)
bp++;
if (*bp == '\n')
++*newlines;
- while (*bp == '\\' && bp[1] == '\n') {
- bp += 2;
+ if (!macro) {
+ while (*bp == '\\' && bp[1] == '\n') {
+ bp += 2;
+ ++*newlines;
+ }
}
} else if (*bp == '\n') {
++*newlines;
@@ -8643,16 +8672,16 @@ discard_comments (start, length, newlines)
obp--;
else
obp[-1] = ' ';
- ibp++;
- while (ibp + 1 < limit) {
- if (ibp[0] == '*'
- && ibp[1] == '\\' && ibp[2] == '\n')
- newline_fix (ibp + 1);
- if (ibp[0] == '*' && ibp[1] == '/')
- break;
- ibp++;
+ while (++ibp < limit) {
+ if (ibp[0] == '*') {
+ if (ibp[1] == '\\' && ibp[2] == '\n')
+ newline_fix (ibp + 1);
+ if (ibp[1] == '/') {
+ ibp += 2;
+ break;
+ }
+ }
}
- ibp += 2;
break;
case '\'':
@@ -8668,10 +8697,16 @@ discard_comments (start, length, newlines)
break;
if (c == '\n' && quotec == '\'')
break;
- if (c == '\\' && ibp < limit) {
- while (*ibp == '\\' && ibp[1] == '\n')
- ibp += 2;
- *obp++ = *ibp++;
+ if (c == '\\') {
+ if (ibp < limit && *ibp == '\n') {
+ ibp++;
+ obp--;
+ } else {
+ while (*ibp == '\\' && ibp[1] == '\n')
+ ibp += 2;
+ if (ibp < limit)
+ *obp++ = *ibp++;
+ }
}
}
}
@@ -8722,7 +8757,7 @@ change_newlines (start, length)
int quotec = c;
while (ibp < limit) {
*obp++ = c = *ibp++;
- if (c == quotec)
+ if (c == quotec && ibp[-2] != '\\')
break;
if (c == '\n' && quotec == '\'')
break;
@@ -8809,6 +8844,7 @@ static void
error_from_errno (name)
char *name;
{
+ int e = errno;
int i;
FILE_BUF *ip = NULL;
@@ -8823,7 +8859,7 @@ error_from_errno (name)
if (ip != NULL)
fprintf (stderr, "%s:%d: ", ip->nominal_fname, ip->lineno);
- fprintf (stderr, "%s: %s\n", name, my_strerror (errno));
+ fprintf (stderr, "%s: %s\n", name, my_strerror (e));
errors++;
}
@@ -9657,10 +9693,7 @@ make_definition (str, op)
if (unterminated)
return;
while (p != p1)
- if (*p == '\\' && p[1] == '\n')
- p += 2;
- else
- *q++ = *p++;
+ *q++ = *p++;
} else if (*p == '\\' && p[1] == '\n')
p += 2;
/* Change newline chars into newline-markers. */
@@ -9781,7 +9814,12 @@ make_assertion (option, str)
--indepth;
}
+#ifndef DIR_SEPARATOR
+#define DIR_SEPARATOR '/'
+#endif
+
/* The previous include prefix, if any, is PREV_FILE_NAME.
+ Translate any pathnames with COMPONENT.
Allocate a new include prefix whose name is the
simplified concatenation of PREFIX and NAME,
with a trailing / added if needed.
@@ -9789,33 +9827,38 @@ make_assertion (option, str)
e.g. because it is a duplicate of PREV_FILE_NAME. */
static struct file_name_list *
-new_include_prefix (prev_file_name, prefix, name)
+new_include_prefix (prev_file_name, component, prefix, name)
struct file_name_list *prev_file_name;
+ char *component;
char *prefix;
char *name;
{
- if (!name)
+ if (name == 0)
fatal ("Directory name missing after command line option");
- if (!*name)
+ if (*name == 0)
/* Ignore the empty string. */
return 0;
- else {
+
+ prefix = update_path (prefix, component);
+ name = update_path (name, component);
+
+ {
struct file_name_list *dir
= ((struct file_name_list *)
xmalloc (sizeof (struct file_name_list)
- + strlen (prefix) + strlen (name) + 1 /* for trailing / */));
+ + strlen (prefix) + strlen (name) + 2));
size_t len;
strcpy (dir->fname, prefix);
strcat (dir->fname, name);
len = simplify_filename (dir->fname);
/* Convert directory name to a prefix. */
- if (dir->fname[len - 1] != '/') {
+ if (dir->fname[len - 1] != DIR_SEPARATOR) {
if (len == 1 && dir->fname[len - 1] == '.')
len = 0;
else
- dir->fname[len++] = '/';
+ dir->fname[len++] = DIR_SEPARATOR;
dir->fname[len] = 0;
}
@@ -9831,6 +9874,14 @@ new_include_prefix (prev_file_name, prefix, name)
#ifndef VMS
/* VMS can't stat dir prefixes, so skip these optimizations in VMS. */
+ /* Add a trailing "." if there is a filename. This increases the number
+ of systems that can stat directories. We remove it below. */
+ if (len != 0)
+ {
+ dir->fname[len] = '.';
+ dir->fname[len + 1] = 0;
+ }
+
/* Ignore a nonexistent directory. */
if (stat (len ? dir->fname : ".", &dir->st) != 0) {
if (errno != ENOENT && errno != ENOTDIR)
@@ -9839,6 +9890,9 @@ new_include_prefix (prev_file_name, prefix, name)
return 0;
}
+ if (len != 0)
+ dir->fname[len] = 0;
+
/* Ignore a directory whose identity matches the previous one. */
if (prev_file_name
&& INO_T_EQ (prev_file_name->st.st_ino, dir->st.st_ino)
@@ -9892,6 +9946,67 @@ append_include_chain (first, last)
last_include = last;
}
+/* Place into DST a representation of the file named SRC that is suitable
+ for `make'. Do not null-terminate DST. Return its length. */
+static int
+quote_string_for_make (dst, src)
+ char *dst;
+ char *src;
+{
+ char *p = src;
+ int i = 0;
+ for (;;)
+ {
+ char c = *p++;
+ switch (c)
+ {
+ case '\0':
+ case ' ':
+ case '\t':
+ {
+ /* GNU make uses a weird quoting scheme for white space.
+ A space or tab preceded by 2N+1 backslashes represents
+ N backslashes followed by space; a space or tab
+ preceded by 2N backslashes represents N backslashes at
+ the end of a file name; and backslashes in other
+ contexts should not be doubled. */
+ char *q;
+ for (q = p - 1; src < q && q[-1] == '\\'; q--)
+ {
+ if (dst)
+ dst[i] = '\\';
+ i++;
+ }
+ }
+ if (!c)
+ return i;
+ if (dst)
+ dst[i] = '\\';
+ i++;
+ goto ordinary_char;
+
+ case '$':
+ if (dst)
+ dst[i] = c;
+ i++;
+ /* Fall through. This can mishandle things like "$(" but
+ there's no easy fix. */
+ default:
+ ordinary_char:
+ /* This can mishandle characters in the string "\0\n%*?[\\~";
+ exactly which chars are mishandled depends on the `make' version.
+ We know of no portable solution for this;
+ even GNU make 3.76.1 doesn't solve the problem entirely.
+ (Also, '\0' is mishandled due to our calling conventions.) */
+ if (dst)
+ dst[i] = c;
+ i++;
+ break;
+ }
+ }
+}
+
+
/* Add output to `deps_buffer' for the -M switch.
STRING points to the text to be output.
SPACER is ':' for targets, ' ' for dependencies. */
@@ -9901,7 +10016,7 @@ deps_output (string, spacer)
char *string;
int spacer;
{
- int size = strlen (string);
+ int size = quote_string_for_make ((char *) 0, string);
if (size == 0)
return;
@@ -9926,7 +10041,7 @@ deps_output (string, spacer)
deps_buffer[deps_size++] = ' ';
deps_column++;
}
- bcopy (string, &deps_buffer[deps_size], size);
+ quote_string_for_make (&deps_buffer[deps_size], string);
deps_size += size;
deps_column += size;
if (spacer == ':') {
@@ -9963,8 +10078,7 @@ static void
perror_with_name (name)
char *name;
{
- fprintf (stderr, "%s: ", progname);
- fprintf (stderr, "%s: %s\n", name, my_strerror (errno));
+ fprintf (stderr, "%s: %s: %s\n", progname, name, my_strerror (errno));
errors++;
}
@@ -10199,23 +10313,24 @@ hack_vms_include_specification (fname, vaxc_include)
"shr=nil"- Disallow file sharing while file is open. */
static FILE *
-freopen (fname, type, oldfile)
+VMS_freopen (fname, type, oldfile)
char *fname;
char *type;
FILE *oldfile;
{
-#undef freopen /* Get back the REAL fopen routine */
+#undef freopen /* Get back the real freopen routine. */
if (strcmp (type, "w") == 0)
- return freopen (fname, type, oldfile, "mbc=16", "deq=64", "fop=tef", "shr=nil");
+ return freopen (fname, type, oldfile,
+ "mbc=16", "deq=64", "fop=tef", "shr=nil");
return freopen (fname, type, oldfile, "mbc=16");
}
static FILE *
-fopen (fname, type)
+VMS_fopen (fname, type)
char *fname;
char *type;
{
-#undef fopen /* Get back the REAL fopen routine */
+#undef fopen /* Get back the real fopen routine. */
/* The gcc-vms-1.42 distribution's header files prototype fopen with two
fixed arguments, which matches ANSI's specification but not VAXCRTL's
pre-ANSI implementation. This hack circumvents the mismatch problem. */
@@ -10229,12 +10344,12 @@ fopen (fname, type)
}
static int
-open (fname, flags, prot)
+VMS_open (fname, flags, prot)
char *fname;
int flags;
int prot;
{
-#undef open /* Get back the REAL open routine */
+#undef open /* Get back the real open routine. */
return open (fname, flags, prot, "mbc=16", "deq=64", "fop=tef");
}
@@ -10256,7 +10371,7 @@ extern unsigned long sys$parse(), sys$search();
bad enough, but then compounding the problem by reporting the reason for
failure as "normal successful completion." */
-#undef fstat /* get back to library version */
+#undef fstat /* Get back to the library version. */
static int
VMS_fstat (fd, statbuf)
diff --git a/gcc/cexp.y b/gcc/cexp.y
index 133539f6c5d..5269c5bae7e 100644
--- a/gcc/cexp.y
+++ b/gcc/cexp.y
@@ -29,29 +29,19 @@ Boston, MA 02111-1307, USA.
#include <setjmp.h>
/* #define YYDEBUG 1 */
-/* The following symbols should be autoconfigured:
- HAVE_STDLIB_H
- STDC_HEADERS
- In the mean time, we'll get by with approximations based
- on existing GCC configuration symbols. */
-
-#ifdef POSIX
-# ifndef HAVE_STDLIB_H
-# define HAVE_STDLIB_H 1
-# endif
-# ifndef STDC_HEADERS
-# define STDC_HEADERS 1
-# endif
-#endif /* defined (POSIX) */
-#if STDC_HEADERS
+#ifdef HAVE_STRING_H
# include <string.h>
#endif
-#if HAVE_STDLIB_H || defined (MULTIBYTE_CHARS)
+#ifdef HAVE_STDLIB_H
# include <stdlib.h>
#endif
+#ifdef HAVE_LIMITS_H
+# include <limits.h>
+#endif
+
#ifdef MULTIBYTE_CHARS
#include <locale.h>
#endif
@@ -87,18 +77,36 @@ struct arglist {
#endif
/* Find the largest host integer type and set its size and type.
- Don't blindly use `long'; on some crazy hosts it is shorter than `int'. */
+ Watch out: on some crazy hosts `long' is shorter than `int'. */
-#ifndef HOST_BITS_PER_WIDE_INT
+#ifndef HOST_WIDE_INT
+# if HAVE_INTTYPES_H
+# include <inttypes.h>
+# define HOST_WIDE_INT intmax_t
+# define unsigned_HOST_WIDE_INT uintmax_t
+# else
+# if (HOST_BITS_PER_LONG <= HOST_BITS_PER_INT && HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_INT)
+# define HOST_WIDE_INT int
+# else
+# if (HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_LONG || ! (defined LONG_LONG_MAX || defined LLONG_MAX))
+# define HOST_WIDE_INT long
+# else
+# define HOST_WIDE_INT long long
+# endif
+# endif
+# endif
+#endif
-#if HOST_BITS_PER_LONG > HOST_BITS_PER_INT
-#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONG
-#define HOST_WIDE_INT long
-#else
-#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_INT
-#define HOST_WIDE_INT int
+#ifndef unsigned_HOST_WIDE_INT
+#define unsigned_HOST_WIDE_INT unsigned HOST_WIDE_INT
#endif
+#ifndef CHAR_BIT
+#define CHAR_BIT 8
+#endif
+
+#ifndef HOST_BITS_PER_WIDE_INT
+#define HOST_BITS_PER_WIDE_INT (CHAR_BIT * sizeof (HOST_WIDE_INT))
#endif
#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
@@ -137,11 +145,14 @@ struct arglist {
#define PRINTF_PROTO_1(ARGS) PRINTF_PROTO(ARGS, 1, 2)
-HOST_WIDE_INT parse_c_expression PROTO((char *));
+HOST_WIDE_INT parse_c_expression PROTO((char *, int));
static int yylex PROTO((void));
static void yyerror PROTO((char *)) __attribute__ ((noreturn));
static HOST_WIDE_INT expression_value;
+#ifdef TEST_EXP_READER
+static int expression_signedp;
+#endif
static jmp_buf parse_return_error;
@@ -152,6 +163,9 @@ static int keyword_parsing = 0;
This is a count, since unevaluated expressions can nest. */
static int skip_evaluation;
+/* Nonzero means warn if undefined identifiers are evaluated. */
+static int warn_undef;
+
/* some external tables of character types */
extern unsigned char is_idstart[], is_idchar[], is_space[];
@@ -164,9 +178,6 @@ extern int traditional;
/* Flag for -lang-c89. */
extern int c89;
-/* Flag for -Wundef. */
-extern int warn_undef;
-
#ifndef CHAR_TYPE_SIZE
#define CHAR_TYPE_SIZE BITS_PER_UNIT
#endif
@@ -199,17 +210,13 @@ extern int warn_undef;
#define MAX_WCHAR_TYPE_SIZE WCHAR_TYPE_SIZE
#endif
-#if MAX_CHAR_TYPE_SIZE < HOST_BITS_PER_WIDE_INT
-#define MAX_CHAR_TYPE_MASK (~ (~ (HOST_WIDE_INT) 0 << MAX_CHAR_TYPE_SIZE))
-#else
-#define MAX_CHAR_TYPE_MASK (~ (HOST_WIDE_INT) 0)
-#endif
+#define MAX_CHAR_TYPE_MASK (MAX_CHAR_TYPE_SIZE < HOST_BITS_PER_WIDE_INT \
+ ? (~ (~ (HOST_WIDE_INT) 0 << MAX_CHAR_TYPE_SIZE)) \
+ : ~ (HOST_WIDE_INT) 0)
-#if MAX_WCHAR_TYPE_SIZE < HOST_BITS_PER_WIDE_INT
-#define MAX_WCHAR_TYPE_MASK (~ (~ (HOST_WIDE_INT) 0 << MAX_WCHAR_TYPE_SIZE))
-#else
-#define MAX_WCHAR_TYPE_MASK (~ (HOST_WIDE_INT) 0)
-#endif
+#define MAX_WCHAR_TYPE_MASK (MAX_WCHAR_TYPE_SIZE < HOST_BITS_PER_WIDE_INT \
+ ? ~ (~ (HOST_WIDE_INT) 0 << MAX_WCHAR_TYPE_SIZE) \
+ : ~ (HOST_WIDE_INT) 0)
/* Suppose A1 + B1 = SUM1, using 2's complement arithmetic ignoring overflow.
Suppose A, B and SUM have the same respective signs as A1, B1, and SUM1.
@@ -232,8 +239,8 @@ void pedwarn PRINTF_PROTO_1((char *, ...));
void warning PRINTF_PROTO_1((char *, ...));
static int parse_number PROTO((int));
-static HOST_WIDE_INT left_shift PROTO((struct constant *, unsigned HOST_WIDE_INT));
-static HOST_WIDE_INT right_shift PROTO((struct constant *, unsigned HOST_WIDE_INT));
+static HOST_WIDE_INT left_shift PROTO((struct constant *, unsigned_HOST_WIDE_INT));
+static HOST_WIDE_INT right_shift PROTO((struct constant *, unsigned_HOST_WIDE_INT));
static void integer_overflow PROTO((void));
/* `signedp' values */
@@ -272,7 +279,12 @@ static void integer_overflow PROTO((void));
%%
start : exp1
- { expression_value = $1.value; }
+ {
+ expression_value = $1.value;
+#ifdef TEST_EXP_READER
+ expression_signedp = $1.signedp;
+#endif
+ }
;
/* Expressions, including the comma operator. */
@@ -324,7 +336,7 @@ exp : exp '*' exp
integer_overflow ();
}
else
- $$.value = ((unsigned HOST_WIDE_INT) $1.value
+ $$.value = ((unsigned_HOST_WIDE_INT) $1.value
* $3.value); }
| exp '/' exp
{ if ($3.value == 0)
@@ -341,7 +353,7 @@ exp : exp '*' exp
integer_overflow ();
}
else
- $$.value = ((unsigned HOST_WIDE_INT) $1.value
+ $$.value = ((unsigned_HOST_WIDE_INT) $1.value
/ $3.value); }
| exp '%' exp
{ if ($3.value == 0)
@@ -354,7 +366,7 @@ exp : exp '*' exp
if ($$.signedp)
$$.value = $1.value % $3.value;
else
- $$.value = ((unsigned HOST_WIDE_INT) $1.value
+ $$.value = ((unsigned_HOST_WIDE_INT) $1.value
% $3.value); }
| exp '+' exp
{ $$.value = $1.value + $3.value;
@@ -391,28 +403,28 @@ exp : exp '*' exp
if ($1.signedp & $3.signedp)
$$.value = $1.value <= $3.value;
else
- $$.value = ((unsigned HOST_WIDE_INT) $1.value
+ $$.value = ((unsigned_HOST_WIDE_INT) $1.value
<= $3.value); }
| exp GEQ exp
{ $$.signedp = SIGNED;
if ($1.signedp & $3.signedp)
$$.value = $1.value >= $3.value;
else
- $$.value = ((unsigned HOST_WIDE_INT) $1.value
+ $$.value = ((unsigned_HOST_WIDE_INT) $1.value
>= $3.value); }
| exp '<' exp
{ $$.signedp = SIGNED;
if ($1.signedp & $3.signedp)
$$.value = $1.value < $3.value;
else
- $$.value = ((unsigned HOST_WIDE_INT) $1.value
+ $$.value = ((unsigned_HOST_WIDE_INT) $1.value
< $3.value); }
| exp '>' exp
{ $$.signedp = SIGNED;
if ($1.signedp & $3.signedp)
$$.value = $1.value > $3.value;
else
- $$.value = ((unsigned HOST_WIDE_INT) $1.value
+ $$.value = ((unsigned_HOST_WIDE_INT) $1.value
> $3.value); }
| exp '&' exp
{ $$.value = $1.value & $3.value;
@@ -495,7 +507,7 @@ parse_number (olen)
{
register char *p = lexptr;
register int c;
- register unsigned HOST_WIDE_INT n = 0, nd, max_over_base;
+ register unsigned_HOST_WIDE_INT n = 0, nd, max_over_base;
register int base = 10;
register int len = olen;
register int overflow = 0;
@@ -513,7 +525,7 @@ parse_number (olen)
}
}
- max_over_base = (unsigned HOST_WIDE_INT) -1 / base;
+ max_over_base = (unsigned_HOST_WIDE_INT) -1 / base;
for (; len > 0; len--) {
c = *p++;
@@ -684,7 +696,7 @@ yylex ()
It is mostly copied from c-lex.c. */
{
register HOST_WIDE_INT result = 0;
- register num_chars = 0;
+ register int num_chars = 0;
unsigned width = MAX_CHAR_TYPE_SIZE;
int max_chars;
char *token_buffer;
@@ -751,11 +763,11 @@ yylex ()
sizeof ("__CHAR_UNSIGNED__") - 1, -1)
|| ((result >> (num_bits - 1)) & 1) == 0)
yylval.integer.value
- = result & (~ (unsigned HOST_WIDE_INT) 0
+ = result & (~ (unsigned_HOST_WIDE_INT) 0
>> (HOST_BITS_PER_WIDE_INT - num_bits));
else
yylval.integer.value
- = result | ~(~ (unsigned HOST_WIDE_INT) 0
+ = result | ~(~ (unsigned_HOST_WIDE_INT) 0
>> (HOST_BITS_PER_WIDE_INT - num_bits));
}
else
@@ -962,7 +974,7 @@ parse_escape (string_ptr, result_mask)
}
case 'x':
{
- register unsigned HOST_WIDE_INT i = 0, overflow = 0;
+ register unsigned_HOST_WIDE_INT i = 0, overflow = 0;
register int digits_found = 0, digit;
for (;;)
{
@@ -1015,7 +1027,7 @@ integer_overflow ()
static HOST_WIDE_INT
left_shift (a, b)
struct constant *a;
- unsigned HOST_WIDE_INT b;
+ unsigned_HOST_WIDE_INT b;
{
/* It's unclear from the C standard whether shifts can overflow.
The following code ignores overflow; perhaps a C standard
@@ -1023,36 +1035,39 @@ left_shift (a, b)
if (b >= HOST_BITS_PER_WIDE_INT)
return 0;
else
- return (unsigned HOST_WIDE_INT) a->value << b;
+ return (unsigned_HOST_WIDE_INT) a->value << b;
}
static HOST_WIDE_INT
right_shift (a, b)
struct constant *a;
- unsigned HOST_WIDE_INT b;
+ unsigned_HOST_WIDE_INT b;
{
if (b >= HOST_BITS_PER_WIDE_INT)
return a->signedp ? a->value >> (HOST_BITS_PER_WIDE_INT - 1) : 0;
else if (a->signedp)
return a->value >> b;
else
- return (unsigned HOST_WIDE_INT) a->value >> b;
+ return (unsigned_HOST_WIDE_INT) a->value >> b;
}
/* This page contains the entry point to this file. */
/* Parse STRING as an expression, and complain if this fails
- to use up all of the contents of STRING. */
-/* STRING may contain '\0' bytes; it is terminated by the first '\n'
- outside a string constant, so that we can diagnose '\0' properly. */
-/* We do not support C comments. They should be removed before
+ to use up all of the contents of STRING.
+ STRING may contain '\0' bytes; it is terminated by the first '\n'
+ outside a string constant, so that we can diagnose '\0' properly.
+ If WARN_UNDEFINED is nonzero, warn if undefined identifiers are evaluated.
+ We do not support C comments. They should be removed before
this function is called. */
HOST_WIDE_INT
-parse_c_expression (string)
+parse_c_expression (string, warn_undefined)
char *string;
+ int warn_undefined;
{
lexptr = string;
+ warn_undef = warn_undefined;
/* if there is some sort of scanning error, just return 0 and assume
the parsing routine has printed an error message somewhere.
@@ -1080,6 +1095,7 @@ int traditional;
int main PROTO((int, char **));
static void initialize_random_junk PROTO((void));
+static void print_unsigned_host_wide_int PROTO((unsigned_HOST_WIDE_INT));
/* Main program for testing purposes. */
int
@@ -1089,6 +1105,7 @@ main (argc, argv)
{
int n, c;
char buf[1024];
+ unsigned_HOST_WIDE_INT u;
pedantic = 1 < argc;
traditional = 2 < argc;
@@ -1104,12 +1121,35 @@ main (argc, argv)
n++;
if (c == EOF)
break;
- printf ("parser returned %ld\n", (long) parse_c_expression (buf));
+ parse_c_expression (buf, 1);
+ printf ("parser returned ");
+ u = (unsigned_HOST_WIDE_INT) expression_value;
+ if (expression_value < 0 && expression_signedp) {
+ u = -u;
+ printf ("-");
+ }
+ if (u == 0)
+ printf ("0");
+ else
+ print_unsigned_host_wide_int (u);
+ if (! expression_signedp)
+ printf("u");
+ printf ("\n");
}
return 0;
}
+static void
+print_unsigned_host_wide_int (u)
+ unsigned_HOST_WIDE_INT u;
+{
+ if (u) {
+ print_unsigned_host_wide_int (u / 10);
+ putchar ('0' + (int) (u % 10));
+ }
+}
+
/* table to tell if char can be part of a C identifier. */
unsigned char is_idchar[256];
/* table to tell if char can be first char of a c identifier. */
diff --git a/gcc/choose-temp.c b/gcc/choose-temp.c
index 798de4822a5..d8808ba02c3 100644
--- a/gcc/choose-temp.c
+++ b/gcc/choose-temp.c
@@ -1,5 +1,5 @@
/* Utility to pick a temporary filename prefix.
- Copyright (C) 1996 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of the libiberty library.
Libiberty is free software; you can redistribute it and/or
@@ -22,7 +22,11 @@ Boston, MA 02111-1307, USA. */
/* This file lives in at least two places: libiberty and gcc.
Don't change one without the other. */
-#ifndef NO_SYS_FILE_H
+#ifdef IN_GCC
+#include "config.h"
+#endif
+
+#ifdef HAVE_SYS_FILE_H
#include <sys/types.h>
#include <sys/file.h> /* May get R_OK, etc. on some systems. */
#endif
@@ -36,7 +40,6 @@ Boston, MA 02111-1307, USA. */
#include <stdio.h> /* May get P_tmpdir. */
#ifdef IN_GCC
-#include "config.h"
#include "gansidecl.h"
extern char *xmalloc ();
#else
@@ -54,7 +57,7 @@ extern char *xmalloc ();
/* On MSDOS, write temp files in current dir
because there's no place else we can expect to use. */
/* ??? Although the current directory is tried as a last resort,
- this is left in so that on MSDOS it is prefered to /tmp on the
+ this is left in so that on MSDOS it is preferred to /tmp on the
off chance that someone requires this, since that was the previous
behaviour. */
#ifdef __MSDOS__
@@ -68,7 +71,7 @@ extern char *xmalloc ();
#define TEMP_FILE "ccXXXXXX"
/* Subroutine of choose_temp_base.
- If BASE is non-NULL, returh it.
+ If BASE is non-NULL, return it.
Otherwise it checks if DIR is a usable directory.
If success, DIR is returned.
Otherwise NULL is returned. */
@@ -114,11 +117,7 @@ choose_temp_base ()
/* If all else fails, use the current directory! */
if (base == 0)
-#ifdef VMS
- base = "[";
-#else
base = ".";
-#endif
#else /* MPW */
base = ":";
diff --git a/gcc/collect2.c b/gcc/collect2.c
index e5775192f6c..7730eccf52e 100644
--- a/gcc/collect2.c
+++ b/gcc/collect2.c
@@ -34,6 +34,18 @@ Boston, MA 02111-1307, USA. */
#include <sys/file.h>
#include <sys/stat.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#endif
+
#define COLLECT
#include "demangle.h"
@@ -45,11 +57,7 @@ extern int errno;
#endif
#ifndef HAVE_STRERROR
-#if defined(bsd4_4)
-extern const char *const sys_errlist[];
-#else
extern char *sys_errlist[];
-#endif
extern int sys_nerr;
#else
char *strerror();
@@ -213,7 +221,7 @@ enum pass {
};
#ifndef NO_SYS_SIGLIST
-#ifndef DONT_DECLARE_SYS_SIGLIST
+#ifndef SYS_SIGLIST_DECLARED
extern char *sys_siglist[];
#endif
#endif
@@ -243,6 +251,7 @@ static char *initname, *fininame; /* names of init and fini funcs */
static struct head constructors; /* list of constructors found */
static struct head destructors; /* list of destructors found */
static struct head exports; /* list of exported symbols */
+static struct head frame_tables; /* list of frame unwind info tables */
struct obstack temporary_obstack;
struct obstack permanent_obstack;
@@ -295,9 +304,17 @@ static void scan_libraries PROTO((char *));
char *xcalloc ();
char *xmalloc ();
+#ifdef NEED_DECLARATION_INDEX
extern char *index ();
+#endif
+
+#ifdef NEED_DECLARATION_RINDEX
extern char *rindex ();
+#endif
+
+#ifdef NEED_DECLARATION_FREE
extern void free ();
+#endif
#ifdef NO_DUP2
int
@@ -603,13 +620,16 @@ is_ctor_dtor (s)
#ifdef NO_DOT_IN_LABEL
{ "GLOBAL__I_", sizeof ("GLOBAL__I_")-1, 1, 0 },
{ "GLOBAL__D_", sizeof ("GLOBAL__D_")-1, 2, 0 },
+ { "GLOBAL__F_", sizeof ("GLOBAL__F_")-1, 5, 0 },
#else
{ "GLOBAL_.I.", sizeof ("GLOBAL_.I.")-1, 1, 0 },
{ "GLOBAL_.D.", sizeof ("GLOBAL_.D.")-1, 2, 0 },
+ { "GLOBAL_.F.", sizeof ("GLOBAL_.F.")-1, 5, 0 },
#endif
#else
{ "GLOBAL_$I$", sizeof ("GLOBAL_$I$")-1, 1, 0 },
{ "GLOBAL_$D$", sizeof ("GLOBAL_$D$")-1, 2, 0 },
+ { "GLOBAL_$F$", sizeof ("GLOBAL_$F$")-1, 5, 0 },
#endif
{ "GLOBAL__FI_", sizeof ("GLOBAL__FI_")-1, 3, 0 },
{ "GLOBAL__FD_", sizeof ("GLOBAL__FD_")-1, 4, 0 },
@@ -997,6 +1017,7 @@ main (argc, argv)
num_c_args++;
}
obstack_free (&temporary_obstack, temporary_firstobj);
+ ++num_c_args;
c_ptr = c_argv = (char **) xcalloc (sizeof (char *), num_c_args);
@@ -1292,6 +1313,7 @@ main (argc, argv)
shared_obj = 1;
}
obstack_free (&temporary_obstack, temporary_firstobj);
+ *c_ptr++ = "-fno-exceptions";
#ifdef COLLECT_EXPORT_LIST
/* The AIX linker will discard static constructors in object files if
@@ -1397,7 +1419,8 @@ main (argc, argv)
}
if (constructors.number == 0 && destructors.number == 0
-#ifdef LDD_SUFFIX
+ && frame_tables.number == 0
+#ifdef SCAN_LIBRARIES
/* If we will be running these functions ourselves, we want to emit
stubs into the shared library so that we don't have to relink
dependent programs when we add static objects. */
@@ -1586,9 +1609,9 @@ collect_execute (prog, argv, redir)
{
unlink (redir);
if (freopen (redir, "a", stdout) == NULL)
- fatal_perror ("redirecting stdout");
+ fatal_perror ("redirecting stdout: %s", redir);
if (freopen (redir, "a", stderr) == NULL)
- fatal_perror ("redirecting stderr");
+ fatal_perror ("redirecting stderr: %s", redir);
}
execvp (argv[0], argv);
@@ -1691,6 +1714,7 @@ write_c_file_stat (stream, name)
char *name;
{
char *prefix, *p, *q;
+ int frames = (frame_tables.number > 0);
/* Figure out name of output_file, stripping off .so version. */
p = rindex (output_file, '/');
@@ -1744,15 +1768,49 @@ write_c_file_stat (stream, name)
fprintf (stream, "static int count;\n");
fprintf (stream, "typedef void entry_pt();\n");
write_list_with_asm (stream, "extern entry_pt ", constructors.first);
+
+ if (frames)
+ {
+ write_list_with_asm (stream, "extern void *", frame_tables.first);
+
+ fprintf (stream, "\tstatic void *frame_table[] = {\n");
+ write_list (stream, "\t\t&", frame_tables.first);
+ fprintf (stream, "\t0\n};\n");
+
+ /* This must match what's in frame.h. */
+ fprintf (stream, "struct object {\n");
+ fprintf (stream, " void *pc_begin;\n");
+ fprintf (stream, " void *pc_end;\n");
+ fprintf (stream, " void *fde_begin;\n");
+ fprintf (stream, " void *fde_array;\n");
+ fprintf (stream, " __SIZE_TYPE__ count;\n");
+ fprintf (stream, " struct object *next;\n");
+ fprintf (stream, "};\n");
+
+ fprintf (stream, "extern void __register_frame_info_table (void *, struct object *);\n");
+ fprintf (stream, "extern void __deregister_frame_info (void *);\n");
+
+ fprintf (stream, "static void reg_frame () {\n");
+ fprintf (stream, "\tstatic struct object ob;\n");
+ fprintf (stream, "\t__register_frame_info_table (frame_table, &ob);\n");
+ fprintf (stream, "\t}\n");
+
+ fprintf (stream, "static void dereg_frame () {\n");
+ fprintf (stream, "\t__deregister_frame_info (frame_table);\n");
+ fprintf (stream, "\t}\n");
+ }
+
fprintf (stream, "void %s() {\n", initname);
- if (constructors.number > 0)
+ if (constructors.number > 0 || frames)
{
fprintf (stream, "\tstatic entry_pt *ctors[] = {\n");
write_list (stream, "\t\t", constructors.first);
+ if (frames)
+ fprintf (stream, "\treg_frame,\n");
fprintf (stream, "\t};\n");
fprintf (stream, "\tentry_pt **p;\n");
fprintf (stream, "\tif (count++ != 0) return;\n");
- fprintf (stream, "\tp = ctors + %d;\n", constructors.number);
+ fprintf (stream, "\tp = ctors + %d;\n", constructors.number + frames);
fprintf (stream, "\twhile (p > ctors) (*--p)();\n");
}
else
@@ -1760,16 +1818,18 @@ write_c_file_stat (stream, name)
fprintf (stream, "}\n");
write_list_with_asm (stream, "extern entry_pt ", destructors.first);
fprintf (stream, "void %s() {\n", fininame);
- if (destructors.number > 0)
+ if (destructors.number > 0 || frames)
{
fprintf (stream, "\tstatic entry_pt *dtors[] = {\n");
write_list (stream, "\t\t", destructors.first);
+ if (frames)
+ fprintf (stream, "\tdereg_frame,\n");
fprintf (stream, "\t};\n");
fprintf (stream, "\tentry_pt **p;\n");
fprintf (stream, "\tif (--count != 0) return;\n");
fprintf (stream, "\tp = dtors;\n");
fprintf (stream, "\twhile (p < dtors + %d) (*p++)();\n",
- destructors.number);
+ destructors.number + frames);
}
fprintf (stream, "}\n");
@@ -1789,20 +1849,57 @@ write_c_file_glob (stream, name)
{
/* Write the tables as C code */
+ int frames = (frame_tables.number > 0);
+
fprintf (stream, "typedef void entry_pt();\n\n");
write_list_with_asm (stream, "extern entry_pt ", constructors.first);
-
+
+ if (frames)
+ {
+ write_list_with_asm (stream, "extern void *", frame_tables.first);
+
+ fprintf (stream, "\tstatic void *frame_table[] = {\n");
+ write_list (stream, "\t\t&", frame_tables.first);
+ fprintf (stream, "\t0\n};\n");
+
+ /* This must match what's in frame.h. */
+ fprintf (stream, "struct object {\n");
+ fprintf (stream, " void *pc_begin;\n");
+ fprintf (stream, " void *pc_end;\n");
+ fprintf (stream, " void *fde_begin;\n");
+ fprintf (stream, " void *fde_array;\n");
+ fprintf (stream, " __SIZE_TYPE__ count;\n");
+ fprintf (stream, " struct object *next;\n");
+ fprintf (stream, "};\n");
+
+ fprintf (stream, "extern void __register_frame_info_table (void *, struct object *);\n");
+ fprintf (stream, "extern void __deregister_frame_info (void *);\n");
+
+ fprintf (stream, "static void reg_frame () {\n");
+ fprintf (stream, "\tstatic struct object ob;\n");
+ fprintf (stream, "\t__register_frame_info_table (frame_table, &ob);\n");
+ fprintf (stream, "\t}\n");
+
+ fprintf (stream, "static void dereg_frame () {\n");
+ fprintf (stream, "\t__deregister_frame_info (frame_table);\n");
+ fprintf (stream, "\t}\n");
+ }
+
fprintf (stream, "\nentry_pt * __CTOR_LIST__[] = {\n");
- fprintf (stream, "\t(entry_pt *) %d,\n", constructors.number);
+ fprintf (stream, "\t(entry_pt *) %d,\n", constructors.number + frames);
write_list (stream, "\t", constructors.first);
+ if (frames)
+ fprintf (stream, "\treg_frame,\n");
fprintf (stream, "\t0\n};\n\n");
write_list_with_asm (stream, "extern entry_pt ", destructors.first);
fprintf (stream, "\nentry_pt * __DTOR_LIST__[] = {\n");
- fprintf (stream, "\t(entry_pt *) %d,\n", destructors.number);
+ fprintf (stream, "\t(entry_pt *) %d,\n", destructors.number + frames);
write_list (stream, "\t", destructors.first);
+ if (frames)
+ fprintf (stream, "\tdereg_frame,\n");
fprintf (stream, "\t0\n};\n\n");
fprintf (stream, "extern entry_pt %s;\n", NAME__MAIN);
@@ -1986,6 +2083,10 @@ scan_prog_file (prog_name, which_pass)
#endif
break;
+ case 5:
+ if (which_pass != PASS_LIB)
+ add_to_list (&frame_tables, name);
+
default: /* not a constructor or destructor */
continue;
}
diff --git a/gcc/combine.c b/gcc/combine.c
index 44cca31aec8..cd843158db3 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -1,5 +1,5 @@
/* Optimize by combining instructions for GNU compiler.
- Copyright (C) 1987, 88, 92-96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 92-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -970,13 +970,10 @@ can_combine_p (insn, i3, pred, succ, pdest, psrc)
inputs. */
|| (REGNO (src) < FIRST_PSEUDO_REGISTER
&& (! HARD_REGNO_MODE_OK (REGNO (src), GET_MODE (src))
-#ifdef SMALL_REGISTER_CLASSES
|| (SMALL_REGISTER_CLASSES
&& ((! all_adjacent && ! REG_USERVAR_P (src))
|| (FUNCTION_VALUE_REGNO_P (REGNO (src))
- && ! REG_USERVAR_P (src))))
-#endif
- ))))
+ && ! REG_USERVAR_P (src))))))))
return 0;
}
else if (GET_CODE (dest) != CC0)
@@ -1051,6 +1048,43 @@ can_combine_p (insn, i3, pred, succ, pdest, psrc)
return 1;
}
+/* Check if PAT is an insn - or a part of it - used to set up an
+ argument for a function in a hard register. */
+
+static int
+sets_function_arg_p (pat)
+ rtx pat;
+{
+ int i;
+ rtx inner_dest;
+
+ switch (GET_CODE (pat))
+ {
+ case INSN:
+ return sets_function_arg_p (PATTERN (pat));
+
+ case PARALLEL:
+ for (i = XVECLEN (pat, 0); --i >= 0;)
+ if (sets_function_arg_p (XVECEXP (pat, 0, i)))
+ return 1;
+
+ break;
+
+ case SET:
+ inner_dest = SET_DEST (pat);
+ while (GET_CODE (inner_dest) == STRICT_LOW_PART
+ || GET_CODE (inner_dest) == SUBREG
+ || GET_CODE (inner_dest) == ZERO_EXTRACT)
+ inner_dest = XEXP (inner_dest, 0);
+
+ return (GET_CODE (inner_dest) == REG
+ && REGNO (inner_dest) < FIRST_PSEUDO_REGISTER
+ && FUNCTION_ARG_REGNO_P (REGNO (inner_dest)));
+ }
+
+ return 0;
+}
+
/* LOC is the location within I3 that contains its pattern or the component
of a PARALLEL of the pattern. We validate that it is valid for combining.
@@ -1079,7 +1113,7 @@ can_combine_p (insn, i3, pred, succ, pdest, psrc)
If I1_NOT_IN_SRC is non-zero, it means that finding I1 in the source
of a SET must prevent combination from occurring.
- On machines where SMALL_REGISTER_CLASSES is defined, we don't combine
+ On machines where SMALL_REGISTER_CLASSES is non-zero, we don't combine
if the destination of a SET is a hard register that isn't a user
variable.
@@ -1146,22 +1180,28 @@ combinable_i3pat (i3, loc, i2dest, i1dest, i1_not_in_src, pi3dest_killed)
if ((inner_dest != dest
&& (reg_overlap_mentioned_p (i2dest, inner_dest)
|| (i1dest && reg_overlap_mentioned_p (i1dest, inner_dest))))
+
/* This is the same test done in can_combine_p except that we
allow a hard register with SMALL_REGISTER_CLASSES if SRC is a
- CALL operation.
- Moreover, we can't test all_adjacent; we don't have to, since
- this instruction will stay in place, thus we are not considering
- to increase the lifetime of INNER_DEST. */
+ CALL operation. Moreover, we can't test all_adjacent; we don't
+ have to, since this instruction will stay in place, thus we are
+ not considering increasing the lifetime of INNER_DEST.
+
+ Also, if this insn sets a function argument, combining it with
+ something that might need a spill could clobber a previous
+ function argument; the all_adjacent test in can_combine_p also
+ checks this; here, we do a more specific test for this case. */
+
|| (GET_CODE (inner_dest) == REG
&& REGNO (inner_dest) < FIRST_PSEUDO_REGISTER
&& (! HARD_REGNO_MODE_OK (REGNO (inner_dest),
GET_MODE (inner_dest))
-#ifdef SMALL_REGISTER_CLASSES
- || (SMALL_REGISTER_CLASSES
- && GET_CODE (src) != CALL && ! REG_USERVAR_P (inner_dest)
- && FUNCTION_VALUE_REGNO_P (REGNO (inner_dest)))
-#endif
- ))
+ || (SMALL_REGISTER_CLASSES && GET_CODE (src) != CALL
+ && ! REG_USERVAR_P (inner_dest)
+ && (FUNCTION_VALUE_REGNO_P (REGNO (inner_dest))
+ || (FUNCTION_ARG_REGNO_P (REGNO (inner_dest))
+ && i3 != 0
+ && sets_function_arg_p (prev_nonnote_insn (i3)))))))
|| (i1_not_in_src && reg_overlap_mentioned_p (i1dest, src)))
return 0;
@@ -1301,12 +1341,10 @@ try_combine (i3, i2, i1)
if (i1 == 0 && GET_CODE (i3) == INSN && GET_CODE (PATTERN (i3)) == SET
&& GET_CODE (SET_SRC (PATTERN (i3))) == REG
&& REGNO (SET_SRC (PATTERN (i3))) >= FIRST_PSEUDO_REGISTER
-#ifdef SMALL_REGISTER_CLASSES
&& (! SMALL_REGISTER_CLASSES
- || GET_CODE (SET_DEST (PATTERN (i3))) != REG
- || REGNO (SET_DEST (PATTERN (i3))) >= FIRST_PSEUDO_REGISTER
- || REG_USERVAR_P (SET_DEST (PATTERN (i3))))
-#endif
+ || (GET_CODE (SET_DEST (PATTERN (i3))) != REG
+ || REGNO (SET_DEST (PATTERN (i3))) >= FIRST_PSEUDO_REGISTER
+ || REG_USERVAR_P (SET_DEST (PATTERN (i3)))))
&& find_reg_note (i3, REG_DEAD, SET_SRC (PATTERN (i3)))
&& GET_CODE (PATTERN (i2)) == PARALLEL
&& ! side_effects_p (SET_DEST (PATTERN (i3)))
@@ -1401,8 +1439,8 @@ try_combine (i3, i2, i1)
as I2 will not cause a problem. */
subst_prev_insn = i1
- = gen_rtx (INSN, VOIDmode, INSN_UID (i2), 0, i2,
- XVECEXP (PATTERN (i2), 0, 1), -1, 0, 0);
+ = gen_rtx (INSN, VOIDmode, INSN_UID (i2), NULL_RTX, i2,
+ XVECEXP (PATTERN (i2), 0, 1), -1, NULL_RTX, NULL_RTX);
SUBST (PATTERN (i2), XVECEXP (PATTERN (i2), 0, 0));
SUBST (XEXP (SET_SRC (PATTERN (i2)), 0),
@@ -2059,8 +2097,21 @@ try_combine (i3, i2, i1)
&& ! reg_referenced_p (SET_DEST (XVECEXP (newpat, 0, 0)),
XVECEXP (newpat, 0, 1)))
{
- newi2pat = XVECEXP (newpat, 0, 1);
- newpat = XVECEXP (newpat, 0, 0);
+ /* Normally, it doesn't matter which of the two is done first,
+ but it does if one references cc0. In that case, it has to
+ be first. */
+#ifdef HAVE_cc0
+ if (reg_referenced_p (cc0_rtx, XVECEXP (newpat, 0, 0)))
+ {
+ newi2pat = XVECEXP (newpat, 0, 0);
+ newpat = XVECEXP (newpat, 0, 1);
+ }
+ else
+#endif
+ {
+ newi2pat = XVECEXP (newpat, 0, 1);
+ newpat = XVECEXP (newpat, 0, 0);
+ }
i2_code_number
= recog_for_combine (&newi2pat, i2, &new_i2_notes, &i2_scratches);
@@ -2286,7 +2337,9 @@ try_combine (i3, i2, i1)
}
/* If I3DEST was used in I3SRC, it really died in I3. We may need to
- put a REG_DEAD note for it somewhere. Similarly for I2 and I1.
+ put a REG_DEAD note for it somewhere. If NEWI2PAT exists and sets
+ I3DEST, the death must be somewhere before I2, not I3. If we passed I3
+ in that case, it might delete I2. Similarly for I2 and I1.
Show an additional death due to the REG_DEAD note we make here. If
we discard it in distribute_notes, we will decrement it again. */
@@ -2295,16 +2348,17 @@ try_combine (i3, i2, i1)
if (GET_CODE (i3dest_killed) == REG)
REG_N_DEATHS (REGNO (i3dest_killed))++;
- distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i3dest_killed,
- NULL_RTX),
- NULL_RTX, i3, newi2pat ? i2 : NULL_RTX,
- NULL_RTX, NULL_RTX);
+ if (newi2pat && reg_set_p (i3dest_killed, newi2pat))
+ distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i3dest_killed,
+ NULL_RTX),
+ NULL_RTX, i2, NULL_RTX, elim_i2, elim_i1);
+ else
+ distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i3dest_killed,
+ NULL_RTX),
+ NULL_RTX, i3, newi2pat ? i2 : NULL_RTX,
+ elim_i2, elim_i1);
}
- /* For I2 and I1, we have to be careful. If NEWI2PAT exists and sets
- I2DEST or I1DEST, the death must be somewhere before I2, not I3. If
- we passed I3 in that case, it might delete I2. */
-
if (i2dest_in_i2src)
{
if (GET_CODE (i2dest) == REG)
@@ -2723,6 +2777,9 @@ find_split_point (loc, insn)
unsignedp = (code == ZERO_EXTRACT);
}
break;
+
+ default:
+ break;
}
if (len && pos >= 0 && pos + len <= GET_MODE_BITSIZE (GET_MODE (inner)))
@@ -2819,6 +2876,9 @@ find_split_point (loc, insn)
SUBST (XEXP (x, 1), tem);
}
break;
+
+ default:
+ break;
}
/* Otherwise, select our actions depending on our rtx class. */
@@ -4020,11 +4080,16 @@ simplify_rtx (x, op0_mode, last, in_dest)
case XOR:
return simplify_logical (x, last);
- case ABS:
+ case ABS:
/* (abs (neg <foo>)) -> (abs <foo>) */
if (GET_CODE (XEXP (x, 0)) == NEG)
SUBST (XEXP (x, 0), XEXP (XEXP (x, 0), 0));
+ /* If the mode of the operand is VOIDmode (i.e. if it is ASM_OPERANDS),
+ do nothing. */
+ if (GET_MODE (XEXP (x, 0)) == VOIDmode)
+ break;
+
/* If operand is something known to be positive, ignore the ABS. */
if (GET_CODE (XEXP (x, 0)) == FFS || GET_CODE (XEXP (x, 0)) == ABS
|| ((GET_MODE_BITSIZE (GET_MODE (XEXP (x, 0)))
@@ -4076,6 +4141,9 @@ simplify_rtx (x, op0_mode, last, in_dest)
#endif
break;
+
+ default:
+ break;
}
return x;
@@ -4223,6 +4291,8 @@ simplify_if_then_else (x)
case LT:
case LE:
return gen_unary (NEG, mode, mode, gen_unary (ABS, mode, mode, true));
+ default:
+ break;
}
/* Look for MIN or MAX. */
@@ -4246,6 +4316,8 @@ simplify_if_then_else (x)
case LEU:
case LTU:
return gen_binary (UMIN, mode, true, false);
+ default:
+ break;
}
/* If we have (if_then_else COND (OP Z C1) Z) and OP is an identity when its
@@ -4936,6 +5008,9 @@ simplify_logical (x, last)
return gen_rtx_combine (reverse_condition (GET_CODE (op0)),
mode, XEXP (op0, 0), XEXP (op0, 1));
break;
+
+ default:
+ abort ();
}
return x;
@@ -5649,6 +5724,9 @@ extract_left_shift (x, count)
GEN_INT (INTVAL (XEXP (x, 1)) >> count));
break;
+
+ default:
+ break;
}
return 0;
@@ -5890,6 +5968,10 @@ make_compound_operation (x, in_code)
return newer;
}
+ break;
+
+ default:
+ break;
}
if (new)
@@ -5970,8 +6052,11 @@ force_to_mode (x, mode, mask, reg, just_select)
/* If this is a CALL or ASM_OPERANDS, don't do anything. Some of the
code below will do the wrong thing since the mode of such an
- expression is VOIDmode. */
- if (code == CALL || code == ASM_OPERANDS)
+ expression is VOIDmode.
+
+ Also do nothing if X is a CLOBBER; this can happen if X was
+ the return value from a call to gen_lowpart_for_combine. */
+ if (code == CALL || code == ASM_OPERANDS || code == CLOBBER)
return x;
/* We want to perform the operation is its present mode unless we know
@@ -6459,6 +6544,9 @@ force_to_mode (x, mode, mask, reg, just_select)
force_to_mode (XEXP (x, 2), mode,
mask, reg,next_select)));
break;
+
+ default:
+ break;
}
/* Ensure we return a value of the proper mode. */
@@ -6681,6 +6769,8 @@ known_cond (x, cond, reg, val)
case LT: case LE:
return gen_unary (NEG, GET_MODE (XEXP (x, 0)), GET_MODE (XEXP (x, 0)),
XEXP (x, 0));
+ default:
+ break;
}
/* The only other cases we handle are MIN, MAX, and comparisons if the
@@ -6717,6 +6807,8 @@ known_cond (x, cond, reg, val)
return unsignedp ? XEXP (x, 1) : x;
case LEU: case LTU:
return unsignedp ? XEXP (x, 0) : x;
+ default:
+ break;
}
}
}
@@ -7138,7 +7230,7 @@ simplify_and_const_int (x, mode, varop, constop)
/* We let num_sign_bit_copies recur into nonzero_bits as that is useful.
We don't let nonzero_bits recur into num_sign_bit_copies, because that
is less useful. We can't allow both, because that results in exponential
- run time recusion. There is a nullstone testcase that triggered
+ run time recursion. There is a nullstone testcase that triggered
this. This macro avoids accidental uses of num_sign_bit_copies. */
#define num_sign_bit_copies()
@@ -7428,6 +7520,8 @@ nonzero_bits (x, mode)
result_width = MIN (width0, width1);
result_low = MIN (low0, low1);
break;
+ default:
+ abort ();
}
if (result_width < mode_width)
@@ -7530,6 +7624,9 @@ nonzero_bits (x, mode)
nonzero &= (nonzero_bits (XEXP (x, 1), mode)
| nonzero_bits (XEXP (x, 2), mode));
break;
+
+ default:
+ break;
}
return nonzero;
@@ -7571,13 +7668,25 @@ num_sign_bit_copies (x, mode)
return MAX (1, (num_sign_bit_copies (x, GET_MODE (x))
- (GET_MODE_BITSIZE (GET_MODE (x)) - bitwidth)));
+ if (GET_MODE (x) != VOIDmode && bitwidth > GET_MODE_BITSIZE (GET_MODE (x)))
+ {
#ifndef WORD_REGISTER_OPERATIONS
/* If this machine does not do all register operations on the entire
register and MODE is wider than the mode of X, we can say nothing
at all about the high-order bits. */
- if (GET_MODE (x) != VOIDmode && bitwidth > GET_MODE_BITSIZE (GET_MODE (x)))
- return 1;
+ return 1;
+#else
+ /* Likewise on machines that do, if the mode of the object is smaller
+ than a word and loads of that size don't sign extend, we can say
+ nothing about the high order bits. */
+ if (GET_MODE_BITSIZE (GET_MODE (x)) < BITS_PER_WORD
+#ifdef LOAD_EXTEND_OP
+ && LOAD_EXTEND_OP (GET_MODE (x)) != SIGN_EXTEND
+#endif
+ )
+ return 1;
#endif
+ }
switch (code)
{
@@ -7817,6 +7926,10 @@ num_sign_bit_copies (x, mode)
case GEU: case GTU: case LEU: case LTU:
if (STORE_FLAG_VALUE == -1)
return bitwidth;
+ break;
+
+ default:
+ break;
}
/* If we haven't been able to figure it out by one of the above rules,
@@ -7928,6 +8041,8 @@ merge_outer_ops (pop0, pconst0, op1, const1, mode, pcomp_p)
case NEG:
op0 = NIL;
break;
+ default:
+ break;
}
}
@@ -7969,6 +8084,8 @@ merge_outer_ops (pop0, pconst0, op1, const1, mode, pcomp_p)
/* (a ^ b) & b) == (~a) & b */
*pcomp_p = 1;
break;
+ default:
+ break;
}
/* Check for NO-OP cases. */
@@ -8602,6 +8719,9 @@ simplify_shift_const (x, code, result_mode, varop, count)
continue;
}
break;
+
+ default:
+ break;
}
break;
@@ -9434,6 +9554,9 @@ simplify_comparison (code, pop0, pop1)
code = LT;
}
break;
+
+ default:
+ break;
}
/* Compute some predicates to simplify code below. */
@@ -9966,6 +10089,9 @@ simplify_comparison (code, pop0, pop1)
continue;
}
break;
+
+ default:
+ break;
}
break;
@@ -10096,9 +10222,10 @@ reversible_comparison_p (x)
x = get_last_value (XEXP (x, 0));
return (x && GET_CODE (x) == COMPARE
&& ! FLOAT_MODE_P (GET_MODE (XEXP (x, 0))));
+
+ default:
+ return 0;
}
-
- return 0;
}
/* Utility function for following routine. Called when X is part of a value
@@ -10705,8 +10832,11 @@ mark_used_regs_combine (x)
mark_used_regs_combine (XEXP (testreg, 0));
mark_used_regs_combine (SET_SRC (x));
- return;
}
+ return;
+
+ default:
+ break;
}
/* Recursively scan the operands of this expression. */
@@ -11177,15 +11307,21 @@ distribute_notes (notes, from_insn, i3, i2, elim_i2, elim_i1)
if (reg_set_p (XEXP (note, 0), PATTERN (tem)))
{
rtx set = single_set (tem);
+ rtx inner_dest = 0;
+
+ if (set != 0)
+ for (inner_dest = SET_DEST (set);
+ GET_CODE (inner_dest) == STRICT_LOW_PART
+ || GET_CODE (inner_dest) == SUBREG
+ || GET_CODE (inner_dest) == ZERO_EXTRACT;
+ inner_dest = XEXP (inner_dest, 0))
+ ;
/* Verify that it was the set, and not a clobber that
modified the register. */
if (set != 0 && ! side_effects_p (SET_SRC (set))
- && (rtx_equal_p (XEXP (note, 0), SET_DEST (set))
- || (GET_CODE (SET_DEST (set)) == SUBREG
- && rtx_equal_p (XEXP (note, 0),
- XEXP (SET_DEST (set), 0)))))
+ && rtx_equal_p (XEXP (note, 0), inner_dest))
{
/* Move the notes and links of TEM elsewhere.
This might delete other dead insns recursively.
@@ -11202,6 +11338,20 @@ distribute_notes (notes, from_insn, i3, i2, elim_i2, elim_i1)
NOTE_LINE_NUMBER (tem) = NOTE_INSN_DELETED;
NOTE_SOURCE_FILE (tem) = 0;
}
+ /* If the register is both set and used here, put the
+ REG_DEAD note here, but place a REG_UNUSED note
+ here too unless there already is one. */
+ else if (reg_referenced_p (XEXP (note, 0),
+ PATTERN (tem)))
+ {
+ place = tem;
+
+ if (! find_regno_note (tem, REG_UNUSED,
+ REGNO (XEXP (note, 0))))
+ REG_NOTES (tem)
+ = gen_rtx (EXPR_LIST, REG_UNUSED, XEXP (note, 0),
+ REG_NOTES (tem));
+ }
else
{
PUT_REG_NOTE_KIND (note, REG_UNUSED);
@@ -11258,13 +11408,12 @@ distribute_notes (notes, from_insn, i3, i2, elim_i2, elim_i1)
}
/* If the register is set or already dead at PLACE, we needn't do
- anything with this note if it is still a REG_DEAD note.
+ anything with this note if it is still a REG_DEAD note.
+ We can here if it is set at all, not if is it totally replace,
+ which is what `dead_or_set_p' checks, so also check for it being
+ set partially. */
+
- Note that we cannot use just `dead_or_set_p' here since we can
- convert an assignment to a register into a bit-field assignment.
- Therefore, we must also omit the note if the register is the
- target of a bitfield assignment. */
-
if (place && REG_NOTE_KIND (note) == REG_DEAD)
{
int regno = REGNO (XEXP (note, 0));
diff --git a/gcc/config.guess b/gcc/config.guess
index ee2742b9e0a..30230b3dfe9 100755
--- a/gcc/config.guess
+++ b/gcc/config.guess
@@ -1,6 +1,6 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+# Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 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
@@ -52,6 +52,9 @@ trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
alpha:OSF1:*:*)
+ if test $UNAME_RELEASE = "V4.0"; then
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ fi
# A Vn.n version is a released version.
# A Tn.n version is a released field test version.
# A Xn.n version is an unreleased experimental baselevel.
@@ -62,9 +65,14 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
main:
.frame \$30,0,\$26,0
.prologue 0
- .long 0x47e03d84
- cmoveq \$4,0,\$3
- addl \$3,\$31,\$0
+ .long 0x47e03d80 # implver $0
+ lda \$2,259
+ .long 0x47e20c21 # amask $2,$1
+ srl \$1,8,\$2
+ sll \$2,2,\$2
+ sll \$0,3,\$0
+ addl \$1,\$0,\$0
+ addl \$2,\$0,\$0
ret \$31,(\$26),1
.end main
EOF
@@ -72,16 +80,25 @@ EOF
if test "$?" = 0 ; then
./dummy
case "$?" in
- 1)
+ 7)
+ UNAME_MACHINE="alpha"
+ ;;
+ 15)
UNAME_MACHINE="alphaev5"
;;
- 2)
+ 14)
UNAME_MACHINE="alphaev56"
;;
+ 10)
+ UNAME_MACHINE="alphapca56"
+ ;;
+ 16)
+ UNAME_MACHINE="alphaev6"
+ ;;
esac
fi
rm -f dummy.s dummy
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'`
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]`
exit 0 ;;
21064:Windows_NT:50:3)
echo alpha-dec-winnt3.5
@@ -461,10 +478,10 @@ EOF
echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
exit 0 ;;
i*:CYGWIN*:*)
- echo i386-pc-cygwin32
+ echo ${UNAME_MACHINE}-pc-cygwin32
exit 0 ;;
i*:MINGW*:*)
- echo i386-pc-mingw32
+ echo ${UNAME_MACHINE}-pc-mingw32
exit 0 ;;
p*:CYGWIN*:*)
echo powerpcle-unknown-cygwin32
@@ -476,6 +493,12 @@ EOF
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
exit 0 ;;
*:Linux:*:*)
+ # uname on the ARM produces all sorts of strangeness, and we need to
+ # filter it out.
+ case "$UNAME_MACHINE" in
+ arm* | sa110*) UNAME_MACHINE="arm" ;;
+ esac
+
# The BFD linker knows what the default object file format is, so
# first see if it will tell us.
ld_help_string=`ld --help 2>&1`
@@ -489,6 +512,7 @@ EOF
i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;;
i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;;
sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
+ armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;;
esac
@@ -500,26 +524,47 @@ EOF
main:
.frame \$30,0,\$26,0
.prologue 0
- .long 0x47e03d84
- cmoveq \$4,0,\$3
- addl \$3,\$31,\$0
+ .long 0x47e03d80 # implver $0
+ lda \$2,259
+ .long 0x47e20c21 # amask $2,$1
+ srl \$1,8,\$2
+ sll \$2,2,\$2
+ sll \$0,3,\$0
+ addl \$1,\$0,\$0
+ addl \$2,\$0,\$0
ret \$31,(\$26),1
.end main
EOF
+ LIBC=""
${CC-cc} dummy.s -o dummy 2>/dev/null
if test "$?" = 0 ; then
./dummy
case "$?" in
- 1)
- UNAME_MACHINE="alphaev5"
- ;;
- 2)
- UNAME_MACHINE="alphaev56"
- ;;
- esac
- fi
- rm -f dummy.s dummy
- echo ${UNAME_MACHINE}-unknown-linux-gnu ; exit 0
+ 7)
+ UNAME_MACHINE="alpha"
+ ;;
+ 15)
+ UNAME_MACHINE="alphaev5"
+ ;;
+ 14)
+ UNAME_MACHINE="alphaev56"
+ ;;
+ 10)
+ UNAME_MACHINE="alphapca56"
+ ;;
+ 16)
+ UNAME_MACHINE="alphaev6"
+ ;;
+ esac
+
+ objdump --private-headers dummy | \
+ grep ld.so.1 > /dev/null
+ if test "$?" = 0 ; then
+ LIBC="libc1"
+ fi
+ fi
+ rm -f dummy.s dummy
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
elif test "${UNAME_MACHINE}" = "mips" ; then
cat >dummy.c <<EOF
main(argc, argv)
diff --git a/gcc/config.sub b/gcc/config.sub
index ed95ed00cd1..e24b8504126 100755
--- a/gcc/config.sub
+++ b/gcc/config.sub
@@ -1,6 +1,6 @@
#! /bin/sh
# Configuration validation subroutine script, version 1.1.
-# Copyright (C) 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+# Copyright (C) 1991, 92-97, 1998 Free Software Foundation, Inc.
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
# can handle that machine. It does not imply ALL GNU software can.
@@ -149,19 +149,20 @@ esac
case $basic_machine in
# Recognize the basic CPU types without company name.
# Some are omitted here because they have special meanings below.
- tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arm \
+ tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
| arme[lb] | pyramid | mn10200 | mn10300 \
| tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \
| alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \
| i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \
| mips64 | mipsel | mips64el | mips64orion | mips64orionel \
- | sparc | sparclet | sparclite | sparc64)
+ | mipstx39 | mipstx39el \
+ | sparc | sparclet | sparclite | sparc64 | v850)
basic_machine=$basic_machine-unknown
;;
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
# (2) the word "unknown" tends to confuse beginning users.
- i[3456]86)
+ i[34567]86)
basic_machine=$basic_machine-pc
;;
# Object if more than one company name word.
@@ -170,8 +171,8 @@ case $basic_machine in
exit 1
;;
# Recognize the basic CPU types with company name.
- vax-* | tahoe-* | i[3456]86-* | i860-* | m32r-* | m68k-* | m68000-* \
- | m88k-* | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
+ vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \
+ | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
| power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \
| xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* \
@@ -179,7 +180,9 @@ case $basic_machine in
| ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \
| sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
| sparc64-* | mips64-* | mipsel-* \
- | mips64el-* | mips64orion-* | mips64orionel-* | f301-*)
+ | mips64el-* | mips64orion-* | mips64orionel-* \
+ | mipstx39-* | mipstx39el-* \
+ | f301-*)
;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
@@ -206,9 +209,9 @@ case $basic_machine in
amiga | amiga-*)
basic_machine=m68k-cbm
;;
- amigados)
+ amigaos | amigados)
basic_machine=m68k-cbm
- os=-amigados
+ os=-amigaos
;;
amigaunix | amix)
basic_machine=m68k-cbm
@@ -347,19 +350,19 @@ case $basic_machine in
os=-mvs
;;
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i[3456]86v32)
+ i[34567]86v32)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv32
;;
- i[3456]86v4*)
+ i[34567]86v4*)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv4
;;
- i[3456]86v)
+ i[34567]86v)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv
;;
- i[3456]86sol2)
+ i[34567]86sol2)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-solaris2
;;
@@ -466,25 +469,23 @@ case $basic_machine in
pc532 | pc532-*)
basic_machine=ns32k-pc532
;;
- pentium | p5)
- basic_machine=i586-intel
+ pentium | p5 | k5 | nexen)
+ basic_machine=i586-pc
;;
- pentiumpro | p6)
- basic_machine=i686-intel
+ pentiumpro | p6 | k6 | 6x86)
+ basic_machine=i686-pc
;;
- pentium-* | p5-*)
+ pentiumii | pentium2)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | nexen-*)
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
- pentiumpro-* | p6-*)
+ pentiumpro-* | p6-* | k6-* | 6x86-*)
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
- k5)
- # We don't have specific support for AMD's K5 yet, so just call it a Pentium
- basic_machine=i586-amd
- ;;
- nexen)
- # We don't have specific support for Nexgen yet, so just call it a Pentium
- basic_machine=i586-nexgen
+ pentiumii-* | pentium2-*)
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pn)
basic_machine=pn-gould
@@ -568,6 +569,12 @@ case $basic_machine in
basic_machine=i386-sequent
os=-dynix
;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
tower | tower-32)
basic_machine=m68k-ncr
;;
@@ -682,9 +689,12 @@ case $os in
-solaris)
os=-solaris2
;;
- -unixware* | svr4*)
+ -svr4*)
os=-sysv4
;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
-gnu/linux*)
os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
;;
@@ -695,7 +705,8 @@ case $os in
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
| -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
@@ -829,7 +840,7 @@ case $basic_machine in
os=-sysv
;;
*-cbm)
- os=-amigados
+ os=-amigaos
;;
*-dg)
os=-dgux
diff --git a/gcc/config/1750a/1750a.c b/gcc/config/1750a/1750a.c
index 26a30da34dc..134f69de740 100644
--- a/gcc/config/1750a/1750a.c
+++ b/gcc/config/1750a/1750a.c
@@ -19,13 +19,10 @@ 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 FILE
-#include <stdio.h>
-#endif
-#include <string.h>
-
#define __datalbl
#include "config.h"
+#include <stdio.h>
+#include <string.h>
#include "rtl.h"
#include "tree.h"
#include "expr.h"
diff --git a/gcc/config/1750a/1750a.md b/gcc/config/1750a/1750a.md
index 72fa0b38f47..161d75d9bda 100644
--- a/gcc/config/1750a/1750a.md
+++ b/gcc/config/1750a/1750a.md
@@ -1105,7 +1105,7 @@
;********************
;; Bit field instructions, general cases.
-;; "o,d" constraint causes a nonoffsetable memref to match the "o"
+;; "o,d" constraint causes a nonoffsettable memref to match the "o"
;; so that its address is reloaded.
;; (define_insn "extv" ...
diff --git a/gcc/config/a29k/a29k.c b/gcc/config/a29k/a29k.c
index d6588f23573..4b28bba00bd 100644
--- a/gcc/config/a29k/a29k.c
+++ b/gcc/config/a29k/a29k.c
@@ -1,5 +1,5 @@
/* Subroutines used for code generation on AMD Am29000.
- Copyright (C) 1987, 88, 90-94, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 90-94, 1995, 1997 Free Software Foundation, Inc.
Contributed by Richard Kenner (kenner@nyu.edu)
This file is part of GNU CC.
@@ -19,8 +19,8 @@ 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 <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
diff --git a/gcc/config/a29k/a29k.h b/gcc/config/a29k/a29k.h
index 59e9a13d628..db6e378d252 100644
--- a/gcc/config/a29k/a29k.h
+++ b/gcc/config/a29k/a29k.h
@@ -987,13 +987,18 @@ extern char *a29k_function_name;
On the 29k, we must be able to place it in a delay slot, it must
not use sp if the frame pointer cannot be eliminated, and it cannot
- use local regs if we need to push the register stack. */
+ use local regs if we need to push the register stack.
+ If this is a SET with a memory as source, it might load from
+ a stack slot, unless the address is constant. */
#define ELIGIBLE_FOR_EPILOGUE_DELAY(INSN,N) \
(get_attr_in_delay_slot (INSN) == IN_DELAY_SLOT_YES \
&& ! (frame_pointer_needed \
&& reg_mentioned_p (stack_pointer_rtx, PATTERN (INSN))) \
- && ! (needs_regstack_p () && uses_local_reg_p (PATTERN (INSN))))
+ && ! (needs_regstack_p () && uses_local_reg_p (PATTERN (INSN))) \
+ && (GET_CODE (PATTERN (INSN)) != SET \
+ || GET_CODE (SET_SRC (PATTERN (INSN))) != MEM \
+ || ! rtx_varies_p (XEXP (SET_SRC (PATTERN (INSN)), 0))))
/* Output assembler code for a block containing the constant parts
of a trampoline, leaving space for the variable parts.
diff --git a/gcc/config/a29k/t-vx29k b/gcc/config/a29k/t-vx29k
index 6cf4d9f7b2a..293674efd4b 100644
--- a/gcc/config/a29k/t-vx29k
+++ b/gcc/config/a29k/t-vx29k
@@ -6,7 +6,7 @@ LIBGCC1_TEST =
# We don't want to put exit in libgcc.a for VxWorks, because VxWorks
# does not have _exit.
-LIBGCC2_CFLAGS = -O2 $(GCC_CFLAGS) -g1 -Dexit=unused_exit
+TARGET_LIBGCC2_CFLAGS = -Dexit=unused_exit
LIB2FUNCS_EXTRA = fp-bit.c dp-bit.c
dp-bit.c: $(srcdir)/config/fp-bit.c
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index c918b5b47ed..afef05c3630 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -1,5 +1,5 @@
/* Subroutines used for code generation on the DEC Alpha.
- Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
This file is part of GNU CC.
@@ -20,8 +20,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
@@ -95,10 +95,13 @@ static void add_long_const PROTO((FILE *, HOST_WIDE_INT, int, int, int));
/* Compute the size of the save area in the stack. */
static void alpha_sa_mask PROTO((unsigned long *imaskP,
unsigned long *fmaskP));
-/* Strip type information. */
-#define CURRENT_FUNCTION_ARGS_INFO \
-(TARGET_OPEN_VMS ? current_function_args_info & 0xff \
- : current_function_args_info)
+
+/* Get the number of args of a function in one of two ways. */
+#ifdef OPEN_VMS
+#define NUM_ARGS current_function_args_info.num_args
+#else
+#define NUM_ARGS current_function_args_info
+#endif
/* Parse target option strings. */
@@ -106,21 +109,42 @@ void
override_options ()
{
alpha_cpu
- = TARGET_CPU_DEFAULT & MASK_CPU_EV5 ? PROCESSOR_EV5 : PROCESSOR_EV4;
+ = TARGET_CPU_DEFAULT & MASK_CPU_EV6 ? PROCESSOR_EV6
+ : (TARGET_CPU_DEFAULT & MASK_CPU_EV5 ? PROCESSOR_EV5 : PROCESSOR_EV4);
if (alpha_cpu_string)
{
if (! strcmp (alpha_cpu_string, "ev4")
|| ! strcmp (alpha_cpu_string, "21064"))
- alpha_cpu = PROCESSOR_EV4;
+ {
+ alpha_cpu = PROCESSOR_EV4;
+ target_flags &= ~ (MASK_BWX | MASK_CIX | MASK_MAX);
+ }
else if (! strcmp (alpha_cpu_string, "ev5")
|| ! strcmp (alpha_cpu_string, "21164"))
- alpha_cpu = PROCESSOR_EV5;
+ {
+ alpha_cpu = PROCESSOR_EV5;
+ target_flags &= ~ (MASK_BWX | MASK_CIX | MASK_MAX);
+ }
else if (! strcmp (alpha_cpu_string, "ev56")
|| ! strcmp (alpha_cpu_string, "21164a"))
{
alpha_cpu = PROCESSOR_EV5;
- target_flags |= MASK_BYTE_OPS;
+ target_flags |= MASK_BWX;
+ target_flags &= ~ (MASK_CIX | MASK_MAX);
+ }
+ else if (! strcmp (alpha_cpu_string, "pca56")
+ || ! strcmp (alpha_cpu_string, "21164PC"))
+ {
+ alpha_cpu = PROCESSOR_EV5;
+ target_flags |= MASK_BWX | MASK_MAX;
+ target_flags &= ~ MASK_CIX;
+ }
+ else if (! strcmp (alpha_cpu_string, "ev6")
+ || ! strcmp (alpha_cpu_string, "21264"))
+ {
+ alpha_cpu = PROCESSOR_EV6;
+ target_flags |= MASK_BWX | MASK_CIX | MASK_MAX;
}
else
error ("bad value `%s' for -mcpu switch", alpha_cpu_string);
@@ -476,7 +500,7 @@ input_operand (op, mode)
return 1;
/* ... fall through ... */
case MEM:
- return ((TARGET_BYTE_OPS || (mode != HImode && mode != QImode))
+ return ((TARGET_BWX || (mode != HImode && mode != QImode))
&& general_operand (op, mode));
case CONST_DOUBLE:
@@ -1162,7 +1186,7 @@ alpha_adjust_cost (insn, link, dep_insn, cost)
/* EV5 costs are as given in alpha.md; exceptions are given here. */
if (alpha_cpu == PROCESSOR_EV5)
{
- /* And the lord DEC sayeth: "A special bypass provides an effective
+ /* And the lord DEC saith: "A special bypass provides an effective
latency of 0 cycles for an ICMP or ILOG insn producing the test
operand of an IBR or CMOV insn." */
if (recog_memoized (dep_insn) >= 0
@@ -1312,12 +1336,12 @@ print_operand (file, x, code)
case ',':
/* Generates single precision instruction suffix. */
- fprintf (file, "%c", (TARGET_FLOAT_VAX?'f':'s'));
+ fprintf (file, "%c", (TARGET_FLOAT_VAX ? 'f' : 's'));
break;
case '-':
/* Generates double precision instruction suffix. */
- fprintf (file, "%c", (TARGET_FLOAT_VAX?'g':'t'));
+ fprintf (file, "%c", (TARGET_FLOAT_VAX ? 'g' : 't'));
break;
case 'r':
@@ -1536,7 +1560,7 @@ struct rtx_def *
alpha_builtin_saveregs (arglist)
tree arglist;
{
- rtx block, addr, argsize;
+ rtx block, addr, dest, argsize;
tree fntype = TREE_TYPE (current_function_decl);
int stdarg = (TYPE_ARG_TYPES (fntype) != 0
&& (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype)))
@@ -1544,9 +1568,9 @@ alpha_builtin_saveregs (arglist)
/* Compute the current position into the args, taking into account
both registers and memory. Both of these are already included in
- current_function_args_info. */
+ NUM_ARGS. */
- argsize = GEN_INT (CURRENT_FUNCTION_ARGS_INFO * UNITS_PER_WORD);
+ argsize = GEN_INT (NUM_ARGS * UNITS_PER_WORD);
/* For Unix, SETUP_INCOMING_VARARGS moves the starting address base up by 48,
storing fp arg registers in the first 48 bytes, and the integer arg
@@ -1559,10 +1583,10 @@ alpha_builtin_saveregs (arglist)
if (TARGET_OPEN_VMS)
addr = plus_constant (virtual_incoming_args_rtx,
- CURRENT_FUNCTION_ARGS_INFO <= 5 + stdarg
+ NUM_ARGS <= 5 + stdarg
? UNITS_PER_WORD : - 6 * UNITS_PER_WORD);
else
- addr = (CURRENT_FUNCTION_ARGS_INFO <= 5 + stdarg
+ addr = (NUM_ARGS <= 5 + stdarg
? plus_constant (virtual_incoming_args_rtx,
6 * UNITS_PER_WORD)
: plus_constant (virtual_incoming_args_rtx,
@@ -1591,14 +1615,31 @@ alpha_builtin_saveregs (arglist)
/* Store the address of the first integer register in the __base
member. */
- emit_move_insn (change_address (block, ptr_mode, XEXP (block, 0)), addr);
-
+ dest = change_address (block, ptr_mode, XEXP (block, 0));
+ emit_move_insn (dest, addr);
+
+ if (flag_check_memory_usage)
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ dest, ptr_mode,
+ GEN_INT (GET_MODE_SIZE (ptr_mode)),
+ TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_RW),
+ TYPE_MODE (integer_type_node));
+
/* Store the argsize as the __va_offset member. */
- emit_move_insn
- (change_address (block, TYPE_MODE (integer_type_node),
- plus_constant (XEXP (block, 0),
- POINTER_SIZE/BITS_PER_UNIT)),
- argsize);
+ dest = change_address (block, TYPE_MODE (integer_type_node),
+ plus_constant (XEXP (block, 0),
+ POINTER_SIZE/BITS_PER_UNIT));
+ emit_move_insn (dest, argsize);
+
+ if (flag_check_memory_usage)
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ dest, ptr_mode,
+ GEN_INT (GET_MODE_SIZE
+ (TYPE_MODE (integer_type_node))),
+ TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_RW),
+ TYPE_MODE (integer_type_node));
/* Return the address of the va_list constructor, but don't put it in a
register. Doing so would fail when not optimizing and produce worse
@@ -1607,6 +1648,39 @@ alpha_builtin_saveregs (arglist)
}
}
+#if OPEN_VMS
+#define REG_PV 27
+#define REG_RA 26
+#else
+#define REG_RA 26
+#endif
+
+/* Find the current function's return address.
+
+ ??? It would be better to arrange things such that if we would ordinarily
+ have been a leaf function and we didn't spill the hard reg that we
+ wouldn't have to save the register in the prolog. But it's not clear
+ how to get the right information at the right time. */
+
+static rtx alpha_return_addr_rtx;
+
+rtx
+alpha_return_addr ()
+{
+ rtx ret;
+
+ if ((ret = alpha_return_addr_rtx) == NULL)
+ {
+ alpha_return_addr_rtx = ret = gen_reg_rtx (Pmode);
+
+ emit_insn_after (gen_rtx (SET, VOIDmode, ret,
+ gen_rtx (REG, Pmode, REG_RA)),
+ get_insns ());
+ }
+
+ return ret;
+}
+
/* This page contains routines that are used to determine what the function
prologue and epilogue code will do and write them out. */
@@ -1614,9 +1688,6 @@ alpha_builtin_saveregs (arglist)
#if OPEN_VMS
-#define REG_PV 27
-#define REG_RA 26
-
/* These variables are used for communication between the following functions.
They indicate various things about the current function being compiled
that are used to tell what kind of prologue, epilogue and procedure
@@ -1847,150 +1918,6 @@ add_long_const (file, c, in_reg, out_reg, temp_reg)
#if OPEN_VMS
-/*
- Quick and dirty vmskrunch routine to ensure symbols are within the
- 64 bytes limit imposed by VMS.
-
- This is written specifically for GNAT, and may not work for C++.
-
- This routine duplicates every symbol passed to it whether it is too
- long or not, which is a waste of space, fix later.
-*/
-#include <string.h>
-char*
-vmskrunch (name)
- char *name;
-{
- char *foo;
- int max = 60; /* Allow for the ..xx extension */
- int len, tlen;
-
- if (name[0] == '*')
- return (&name[1]);
-
- len = tlen = strlen (name);
- foo = xstrdup (name);
-
- /* Don't muck with the ..xx extenstion */
- if ((foo [tlen-4] == '.') && (foo [tlen-3] == '.'))
- {
- max = max + 4;
- if (tlen > max)
- {
- foo [tlen-4] = 0;
- len = len - 4;
- max = max - 4;
- }
- }
-
- if (len > max)
- {
- char *bar;
- int i, j, slen, nlen, xlen, chopchar;
-
- nlen = len;
-
- /* Change all _ and . characters to spaces, if thats enough then quit.
- For example: "foobar__foo__bar" becomes "foobar foo bar" */
-
- for (i = 0; bar = index (foo, '_'); i++)
- *bar = ' ';
- nlen = nlen - i;
-
- for (i = 0; bar = index (foo, '.'); i++)
- *bar = ' ';
- nlen = nlen - i;
-
- for (i = 0; bar = index (foo, '$'); i++)
- *bar = ' ';
- nlen = nlen - i;
-
- /* Iteratively make blank the rightmost non-blank character on the
- longest leftmost substring delmited by blanks, until it's short
- enough. For example: "foobar foo bar" becomes, successively:
- "fooba foo bar"
- "foob foo bar"
- "foo foo bar"
- "fo foo bar"
- "fo fo bar"
- "fo fo ba "
- "f fo ba "
- "f f ba "
- "f f b "
- etc. */
-
- while (nlen > max)
- {
- j = 0;
- xlen = 0;
-
- while (foo[j])
- {
- /* Find first non-blank */
- if (foo[j])
- for (i = j; foo[i]==' ' && foo[i]; i++)
- ;
-
- /* Find the first blank */
- j = i;
- if (foo[j])
- for (i = j + 1; foo[i] != ' ' && foo[i]; i++)
- ;
-
- /* If this substring is the longest so far, remember the
- position of the character to chop off. */
- slen = i - j;
- if (slen > xlen)
- {
- chopchar = i - 1;
- xlen = slen;
- }
-
- j = i;
- }
-
- /* Try to avoid chopping uppercase suffix letters */
- if (isupper (foo [chopchar]))
- {
- for (i = chopchar;
- isupper (foo[i]) && foo[i] != ' ' && i >= 0;
- i--)
- ;
- if (islower (foo[i]))
- chopchar = i;
- }
- foo [chopchar] = ' ';
- nlen--;
- }
-
- /* Put the ..xx extension back */
- if (len != tlen)
- {
- foo [len] = '.';
- len = len + 4;
- }
-
- /* Collapse all the blanks */
- j = 0;
- for (i = 0; foo[i]; i++)
- if (foo[i] != ' ')
- foo[j++] = foo[i];
- foo[j] = 0;
-
- return foo;
- }
-
- /* Put back the ..xx extension */
- if (len != tlen)
- {
- foo [len] = '.';
- len = len + 4;
- }
-
- free (foo);
- return name;
-}
-
/* On vms we have two kinds of functions:
- stack frame (PROC_STACK)
@@ -2021,7 +1948,7 @@ output_prolog (file, size)
/* Offset during register save. */
int reg_offset;
/* Label for the procedure entry. */
- char entry_label[70];
+ char *entry_label = (char *) alloca (strlen (alpha_function_name) + 5);
int i;
sa_size = alpha_sa_size ();
@@ -2034,7 +1961,7 @@ output_prolog (file, size)
fprintf (file, "\t.ent ");
assemble_name (file, alpha_function_name);
fprintf (file, "\n");
- sprintf (entry_label, "%.64s..en", alpha_function_name);
+ sprintf (entry_label, "%s..en", alpha_function_name);
ASM_OUTPUT_LABEL (file, entry_label);
inside_function = TRUE;
@@ -2156,8 +2083,18 @@ output_prolog (file, size)
STACK_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM);
/* Describe our frame. */
- fprintf (file, "\t.frame $%d,%d,$26,%d\n",
- unwind_regno, frame_size, rsa_offset);
+ fprintf (file, "\t.frame $%d,", unwind_regno);
+
+ /* If the frame size is larger than an integer, print it as zero to
+ avoid an assembler error. We won't be properly describing such a
+ frame, but that's the best we can do. */
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC,
+#if HOST_BITS_PER_WIDE_INT == 64
+ frame_size >= (1l << 31) ? 0:
+#endif
+ frame_size
+ );
+ fprintf (file, ",$26,%d\n", rsa_offset);
/* If we have to allocate space for outgoing args, do it now. */
if (current_function_outgoing_args_size != 0)
@@ -2282,6 +2219,19 @@ output_epilog (file, size)
/* Show that we know this function if it is called again. */
SYMBOL_REF_FLAG (XEXP (DECL_RTL (current_function_decl), 0)) = 1;
+
+ alpha_return_addr_rtx = 0;
+}
+
+int
+vms_valid_decl_attribute_p (decl, attributes, identifier, args)
+ tree decl;
+ tree attributes;
+ tree identifier;
+ tree args;
+{
+ if (is_attribute_p ("overlaid", identifier))
+ return (args == NULL_TREE);
}
#else /* !OPEN_VMS */
@@ -2289,7 +2239,7 @@ output_epilog (file, size)
void
output_prolog (file, size)
FILE *file;
- int size;
+ HOST_WIDE_INT size;
{
HOST_WIDE_INT out_args_size
= ALPHA_ROUND (current_function_outgoing_args_size);
@@ -2444,10 +2394,20 @@ output_prolog (file, size)
/* Describe our frame. */
if (!flag_inhibit_size_directive)
{
- fprintf (file, "\t.frame $%d,%d,$26,%d\n",
+ fprintf (file, "\t.frame $%d,",
(frame_pointer_needed
- ? HARD_FRAME_POINTER_REGNUM : STACK_POINTER_REGNUM),
- frame_size, current_function_pretend_args_size);
+ ? HARD_FRAME_POINTER_REGNUM : STACK_POINTER_REGNUM));
+
+ /* If the frame size is larger than an integer, print it as zero to
+ avoid an assembler error. We won't be properly describing such a
+ frame, but that's the best we can do. */
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC,
+#if HOST_BITS_PER_WIDE_INT == 64
+ frame_size >= (1l << 31) ? 0 :
+#endif
+ frame_size
+ );
+ fprintf (file, ",$26,%d\n", current_function_pretend_args_size);
}
/* Save register 26 if any other register needs to be saved. */
@@ -2471,8 +2431,15 @@ output_prolog (file, size)
/* Print the register mask and do floating-point saves. */
if (reg_mask && !flag_inhibit_size_directive)
- fprintf (file, "\t.mask 0x%x,%d\n", reg_mask,
- actual_start_reg_offset - frame_size);
+ {
+ fprintf (file, "\t.mask 0x%x,", reg_mask);
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC,
+#if HOST_BITS_PER_WIDE_INT == 64
+ frame_size >= (1l << 31) ? 0 :
+#endif
+ actual_start_reg_offset - frame_size);
+ fprintf (file, "\n");
+ }
start_reg_offset = reg_offset;
reg_mask = 0;
@@ -2604,6 +2571,8 @@ output_epilog (file, size)
/* Show that we know this function if it is called again. */
SYMBOL_REF_FLAG (XEXP (DECL_RTL (current_function_decl), 0)) = 1;
+
+ alpha_return_addr_rtx = 0;
}
#endif /* !OPEN_VMS */
@@ -2664,7 +2633,7 @@ alpha_output_filename (stream, name)
}
else if (name != current_function_file
- && strcmp (name, current_function_file) != 0)
+ && strcmp (name, current_function_file) != 0)
{
if (inside_function && ! TARGET_GAS)
fprintf (stream, "\t#.file\t%d ", num_source_filenames);
@@ -3043,46 +3012,39 @@ check_float_value (mode, d, overflow)
#if OPEN_VMS
-void *
-function_arg (cum, mode, type, named)
- CUMULATIVE_ARGS *cum;
- enum machine_mode mode;
- tree type;
- int named;
-{
- int arg;
+/* Return the VMS argument type corresponding to MODE. */
- if (mode == VOIDmode) /* final call, return argument information */
+enum avms_arg_type
+alpha_arg_type (mode)
+ enum machine_mode mode;
+{
+ switch (mode)
{
- return GEN_INT (*cum);
+ case SFmode:
+ return TARGET_FLOAT_VAX ? FF : FS;
+ case DFmode:
+ return TARGET_FLOAT_VAX ? FD : FT;
+ default:
+ return I64;
}
+}
- arg = *cum & 0xff;
+/* Return an rtx for an integer representing the VMS Argument Information
+ register value. */
- switch (mode)
- {
- case SFmode:
- *cum |= (((TARGET_FLOAT_VAX)?1:4) << ((arg * 3)+8)); /* 4 = AI$K_AR_FS, IEEE single */
- break;
- case DFmode:
- *cum |= (((TARGET_FLOAT_VAX)?3:5) << ((arg * 3)+8)); /* 5 = AI$K_AR_FT, IEEE double */
- break;
- case TFmode:
- *cum |= (7 << ((arg * 3)+8)); /* 5 = AI$K_AR_FT, IEEE double */
- break;
- default:
- break;
- }
+struct rtx_def *
+alpha_arg_info_reg_val (cum)
+ CUMULATIVE_ARGS cum;
+{
+ unsigned HOST_WIDE_INT regval = cum.num_args;
+ int i;
- return (arg < 6 && ! MUST_PASS_IN_STACK (mode, type)
- ? gen_rtx(REG, mode,
- (*cum & 0xff) + 16 + ((TARGET_FPREGS
- && (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT
- || GET_MODE_CLASS (mode) == MODE_FLOAT))
- * 32))
- : 0);
-}
+ for (i = 0; i < 6; i++)
+ regval |= ((int) cum.atypes[i]) << (i * 3 + 8);
+ return GEN_INT (regval);
+}
+
/* Structure to collect function names for final output
in link section. */
diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h
index 831101e298d..25740eae77b 100644
--- a/gcc/config/alpha/alpha.h
+++ b/gcc/config/alpha/alpha.h
@@ -80,7 +80,8 @@ Boston, MA 02111-1307, USA. */
enum processor_type
{PROCESSOR_EV4, /* 2106[46]{a,} */
- PROCESSOR_EV5}; /* 21164{a,} */
+ PROCESSOR_EV5, /* 21164{a,pc,} */
+ PROCESSOR_EV6}; /* 21264 */
extern enum processor_type alpha_cpu;
@@ -168,14 +169,31 @@ extern enum alpha_fp_trap_mode alpha_fptm;
#define MASK_FLOAT_VAX 512
#define TARGET_FLOAT_VAX (target_flags & MASK_FLOAT_VAX)
-/* This means that the processor has byte and half word loads and stores. */
+/* This means that the processor has byte and half word loads and stores
+ (the BWX extension). */
-#define MASK_BYTE_OPS 1024
-#define TARGET_BYTE_OPS (target_flags & MASK_BYTE_OPS)
+#define MASK_BWX 1024
+#define TARGET_BWX (target_flags & MASK_BWX)
-/* This means that the processor is an EV5 or EV56. This is defined only
- in TARGET_CPU_DEFAULT. */
-#define MASK_CPU_EV5 2048
+/* This means that the processor has the CIX extension. */
+#define MASK_CIX 2048
+#define TARGET_CIX (target_flags & MASK_CIX)
+
+/* This means that the processor has the MAX extension. */
+#define MASK_MAX 4096
+#define TARGET_MAX (target_flags & MASK_MAX)
+
+/* This means that the processor is an EV5, EV56, or PCA56. This is defined
+ only in TARGET_CPU_DEFAULT. */
+#define MASK_CPU_EV5 8192
+
+/* Likewise for EV6. */
+#define MASK_CPU_EV6 16384
+
+/* This means we support the .arch directive in the assembler. Only
+ defined in TARGET_CPU_DEFAULT. */
+#define MASK_SUPPORT_ARCH 32768
+#define TARGET_SUPPORT_ARCH (target_flags & MASK_SUPPORT_ARCH)
/* Macro to define tables used to set the flags.
This is a list in braces of pairs in braces,
@@ -196,8 +214,12 @@ extern enum alpha_fp_trap_mode alpha_fptm;
{"build-constants", MASK_BUILD_CONSTANTS}, \
{"float-vax", MASK_FLOAT_VAX}, \
{"float-ieee", -MASK_FLOAT_VAX}, \
- {"byte", MASK_BYTE_OPS}, \
- {"no-byte", -MASK_BYTE_OPS}, \
+ {"bwx", MASK_BWX}, \
+ {"no-bwx", -MASK_BWX}, \
+ {"cix", MASK_CIX}, \
+ {"no-cix", -MASK_CIX}, \
+ {"max", MASK_MAX}, \
+ {"no-max", -MASK_MAX}, \
{"", TARGET_DEFAULT | TARGET_CPU_DEFAULT} }
#define TARGET_DEFAULT MASK_FP|MASK_FPREGS
@@ -267,6 +289,23 @@ extern void override_options ();
/* Define to enable software floating point emulation. */
#define REAL_ARITHMETIC
+/* The following #defines are used when compiling the routines in
+ libgcc1.c. Since the Alpha calling conventions require single
+ precision floats to be passed in the floating-point registers
+ (rather than in the general registers) we have to build the
+ libgcc1.c routines in such a way that they know the actual types
+ of their formal arguments and the actual types of their return
+ values. Otherwise, gcc will generate calls to the libgcc1.c
+ routines, passing arguments in the floating-point registers,
+ but the libgcc1.c routines will expect their arguments on the
+ stack (where the Alpha calling conventions require structs &
+ unions to be passed). */
+
+#define FLOAT_VALUE_TYPE double
+#define INTIFY(FLOATVAL) (FLOATVAL)
+#define FLOATIFY(INTVAL) (INTVAL)
+#define FLOAT_ARG_TYPE double
+
/* Define the size of `int'. The default is the same as the word size. */
#define INT_TYPE_SIZE 32
@@ -386,7 +425,7 @@ extern void override_options ();
/* For atomic access to objects, must have at least 32-bit alignment
unless the machine has byte operations. */
-#define MINIMUM_ATOMIC_ALIGNMENT (TARGET_BYTE_OPS ? 8 : 32)
+#define MINIMUM_ATOMIC_ALIGNMENT (TARGET_BWX ? 8 : 32)
/* Align all constants and variables to at least a word boundary so
we can pick up pieces of them faster. */
@@ -674,7 +713,7 @@ enum reg_class { NO_REGS, GENERAL_REGS, FLOAT_REGS, ALL_REGS,
#define PREFERRED_RELOAD_CLASS(X, CLASS) \
(CONSTANT_P (X) && (X) != const0_rtx && (X) != CONST0_RTX (GET_MODE (X)) \
- ? ((CLASS) == FLOAT_REGS ? NO_REGS : GENERAL_REGS) \
+ ? ((CLASS) == FLOAT_REGS || (CLASS) == NO_REGS ? NO_REGS : GENERAL_REGS)\
: (CLASS))
/* Loading and storing HImode or QImode values to and from memory
@@ -694,7 +733,7 @@ enum reg_class { NO_REGS, GENERAL_REGS, FLOAT_REGS, ALL_REGS,
&& (((CLASS) == FLOAT_REGS \
&& ((MODE) == SImode || (MODE) == HImode || (MODE) == QImode)) \
|| (((MODE) == QImode || (MODE) == HImode) \
- && ! TARGET_BYTE_OPS && unaligned_memory_operand (IN, MODE)))) \
+ && ! TARGET_BWX && unaligned_memory_operand (IN, MODE)))) \
? GENERAL_REGS \
: ((CLASS) == FLOAT_REGS && GET_CODE (IN) == MEM \
&& GET_CODE (XEXP (IN, 0)) == AND) ? GENERAL_REGS \
@@ -710,8 +749,9 @@ enum reg_class { NO_REGS, GENERAL_REGS, FLOAT_REGS, ALL_REGS,
&& (GET_CODE (SUBREG_REG (OUT)) == MEM \
|| (GET_CODE (SUBREG_REG (OUT)) == REG \
&& REGNO (SUBREG_REG (OUT)) >= FIRST_PSEUDO_REGISTER)))) \
- && ((((MODE) == HImode || (MODE) == QImode) && ! TARGET_BYTE_OPS \
- || ((MODE) == SImode && (CLASS) == FLOAT_REGS)))) \
+ && ((((MODE) == HImode || (MODE) == QImode) \
+ && (! TARGET_BWX || (CLASS) == FLOAT_REGS)) \
+ || ((MODE) == SImode && (CLASS) == FLOAT_REGS))) \
? GENERAL_REGS \
: ((CLASS) == FLOAT_REGS && GET_CODE (OUT) == MEM \
&& GET_CODE (XEXP (OUT, 0)) == AND) ? GENERAL_REGS \
@@ -721,9 +761,10 @@ enum reg_class { NO_REGS, GENERAL_REGS, FLOAT_REGS, ALL_REGS,
: NO_REGS)
/* If we are copying between general and FP registers, we need a memory
- location. */
+ location unless the CIX extension is available. */
-#define SECONDARY_MEMORY_NEEDED(CLASS1,CLASS2,MODE) ((CLASS1) != (CLASS2))
+#define SECONDARY_MEMORY_NEEDED(CLASS1,CLASS2,MODE) \
+ (! TARGET_CIX && (CLASS1) != (CLASS2))
/* Specify the mode to be used for memory when a secondary memory
location is needed. If MODE is floating-point, use it. Otherwise,
@@ -873,8 +914,9 @@ enum reg_class { NO_REGS, GENERAL_REGS, FLOAT_REGS, ALL_REGS,
#define FUNCTION_VALUE(VALTYPE, FUNC) \
gen_rtx (REG, \
- (INTEGRAL_MODE_P (TYPE_MODE (VALTYPE)) \
- && TYPE_PRECISION (VALTYPE) < BITS_PER_WORD) \
+ ((INTEGRAL_TYPE_P (VALTYPE) \
+ && TYPE_PRECISION (VALTYPE) < BITS_PER_WORD) \
+ || POINTER_TYPE_P (VALTYPE)) \
? word_mode : TYPE_MODE (VALTYPE), \
((TARGET_FPREGS \
&& (TREE_CODE (VALTYPE) == REAL_TYPE \
@@ -1237,16 +1279,11 @@ __enable_execute_stack (addr) \
/* A C expression whose value is RTL representing the value of the return
address for the frame COUNT steps up from the current frame.
FRAMEADDR is the frame pointer of the COUNT frame, or the frame pointer of
- the COUNT-1 frame if RETURN_ADDR_IN_PREVIOUS_FRAME} is defined.
-
- This definition for Alpha is broken, but is put in at the request of
- Mike Stump. */
+ the COUNT-1 frame if RETURN_ADDR_IN_PREVIOUS_FRAME} is defined. */
#define RETURN_ADDR_RTX(COUNT, FRAME) \
-((COUNT == 0 && alpha_sa_size () == 0 && 0 /* not right. */) \
- ? gen_rtx (REG, Pmode, 26) \
- : gen_rtx (MEM, Pmode, \
- memory_address (Pmode, FRAME)))
+ ((COUNT) == 0 ? alpha_return_addr() : const0_rtx)
+extern struct rtx_def *alpha_return_addr ();
/* Addressing modes, and classification of registers for them. */
@@ -1526,7 +1563,7 @@ extern void final_prescan_insn ();
/* Define the value returned by a floating-point comparison instruction. */
-#define FLOAT_STORE_FLAG_VALUE 0.5
+#define FLOAT_STORE_FLAG_VALUE (TARGET_FLOAT_VAX ? 0.5 : 2.0)
/* Canonicalize a comparison from one we don't have to one we do have. */
@@ -1707,9 +1744,13 @@ extern void final_prescan_insn ();
fprintf (FILE, "\t.set noreorder\n"); \
fprintf (FILE, "\t.set volatile\n"); \
fprintf (FILE, "\t.set noat\n"); \
- fprintf (FILE, "\t.arch %s\n", \
- (TARGET_BYTE_OPS ? "ev56" \
- : alpha_cpu == PROCESSOR_EV4 ? "ev4" : "ev5")); \
+ if (TARGET_SUPPORT_ARCH) \
+ fprintf (FILE, "\t.arch %s\n", \
+ alpha_cpu == PROCESSOR_EV6 ? "ev6" \
+ : (alpha_cpu == PROCESSOR_EV5 \
+ ? (TARGET_MAX ? "pca56" : TARGET_BWX ? "ev56" : "ev5") \
+ : "ev4")); \
+ \
ASM_OUTPUT_SOURCE_FILENAME (FILE, main_input_filename); \
}
@@ -2244,11 +2285,12 @@ do { \
#else
/* In OSF/1 v3.2c, the assembler by default does not output file names which
causes mips-tfile to fail. Passing -g to the assembler fixes this problem.
- ??? Stricly speaking, we only need -g if the user specifies -g. Passing
+ ??? Strictly speaking, we need -g only if the user specifies -g. Passing
it always means that we get slightly larger than necessary object files
if the user does not specify -g. If we don't pass -g, then mips-tfile
- will need to be fixed to work in this case. */
-#define ASM_SPEC "%{!mgas:-g} -nocpp %{pg}"
+ will need to be fixed to work in this case. Pass -O0 since some
+ optimization are broken and don't help us anyway. */
+#define ASM_SPEC "%{!mgas:-g} -nocpp %{pg} -O0"
#endif
/* Specify to run a post-processor, mips-tfile after the assembler
diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md
index df12a611e3d..1feddc5eb6d 100644
--- a/gcc/config/alpha/alpha.md
+++ b/gcc/config/alpha/alpha.md
@@ -24,7 +24,7 @@
;; Processor type -- this attribute must exactly match the processor_type
;; enumeration in alpha.h.
-(define_attr "cpu" "ev4,ev5"
+(define_attr "cpu" "ev4,ev5,ev6"
(const (symbol_ref "alpha_cpu")))
;; Define an insn type attribute. This is used in function unit delay
@@ -37,7 +37,7 @@
(const_string "iadd"))
;; The TRAP_TYPE attribute marks instructions that may generate traps
-;; (which are imprecise and may need a trapb if software complention
+;; (which are imprecise and may need a trapb if software completion
;; is desired).
(define_attr "trap" "yes,no" (const_string "no"))
@@ -120,90 +120,90 @@
126 118)
;; EV5 scheduling. EV5 can issue 4 insns per clock.
-;; Multiply all costs by 4.
+;; Multiply all costs by 4. We consider the EV6 and EV5 for now.
;; EV5 has two integer units.
(define_function_unit "ev5_ebox" 2 0
- (and (eq_attr "cpu" "ev5")
+ (and (eq_attr "cpu" "ev5,ev6")
(eq_attr "type" "iadd,ilog,icmp,ldsym"))
4 4)
;; Memory takes at least 2 clocks.
;; Conditional moves always take 2 ticks.
(define_function_unit "ev5_ebox" 2 0
- (and (eq_attr "cpu" "ev5")
+ (and (eq_attr "cpu" "ev5,ev6")
(eq_attr "type" "ld,cmov"))
8 4)
;; Loads can dual issue. Store cannot; nor can loads + stores.
;; Model this with a mythical load/store unit.
(define_function_unit "ev5_ldst" 1 0
- (and (eq_attr "cpu" "ev5")
+ (and (eq_attr "cpu" "ev5,ev6")
(eq_attr "type" "ld"))
8 4 [(eq_attr "type" "st")])
(define_function_unit "ev5_ldst" 1 0
- (and (eq_attr "cpu" "ev5")
+ (and (eq_attr "cpu" "ev5,ev6")
(eq_attr "type" "st"))
4 4)
(define_function_unit "ev5_ebox" 2 0
- (and (eq_attr "cpu" "ev5")
+ (and (eq_attr "cpu" "ev5,ev6")
(eq_attr "type" "imull"))
32 4)
(define_function_unit "ev5_ebox" 2 0
- (and (eq_attr "cpu" "ev5")
+ (and (eq_attr "cpu" "ev5,ev6")
(eq_attr "type" "imulq"))
48 4)
;; Multiplies also use the integer multiplier.
(define_function_unit "ev5_imult" 1 0
- (and (eq_attr "cpu" "ev5")
+ (and (eq_attr "cpu" "ev5,ev6")
(eq_attr "type" "imull"))
16 8)
(define_function_unit "ev5_imult" 1 0
- (and (eq_attr "cpu" "ev5")
+ (and (eq_attr "cpu" "ev5,ev6")
(eq_attr "type" "imulq"))
48 32)
;; There is only 1 shifter/zapper.
(define_function_unit "ev5_shift" 1 0
- (and (eq_attr "cpu" "ev5")
+ (and (eq_attr "cpu" "ev5,ev6")
(eq_attr "type" "shift"))
4 4)
;; We pretend EV5 has symmetrical 2 fpus,
;; even though cpys is the only insn that can issue on either unit.
(define_function_unit "ev5_fpu" 2 0
- (and (eq_attr "cpu" "ev5")
+ (and (eq_attr "cpu" "ev5,ev6")
(eq_attr "type" "fadd,fmul,fcpys"))
16 4)
;; Multiplies (resp. adds) also use the fmul (resp. fadd) units.
(define_function_unit "ev5_fpmul" 1 0
- (and (eq_attr "cpu" "ev5")
+ (and (eq_attr "cpu" "ev5,ev6")
(eq_attr "type" "fmul"))
16 4)
(define_function_unit "ev5_fpadd" 1 0
- (and (eq_attr "cpu" "ev5")
+ (and (eq_attr "cpu" "ev5,ev6")
(eq_attr "type" "fadd"))
16 4)
(define_function_unit "ev5_fpadd" 1 0
- (and (eq_attr "cpu" "ev5")
+ (and (eq_attr "cpu" "ev5,ev6")
(eq_attr "type" "fbr"))
4 4)
(define_function_unit "ev5_fpadd" 1 0
- (and (eq_attr "cpu" "ev5")
+ (and (eq_attr "cpu" "ev5,ev6")
(eq_attr "type" "fdivs"))
60 4)
(define_function_unit "ev5_fpadd" 1 0
- (and (eq_attr "cpu" "ev5")
+ (and (eq_attr "cpu" "ev5,ev6")
(eq_attr "type" "fdivt"))
88 4)
@@ -805,7 +805,7 @@
(define_insn ""
[(set (match_operand:SI 0 "register_operand" "=r,r")
(zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "r,m")))]
- "TARGET_BYTE_OPS"
+ "TARGET_BWX"
"@
zapnot %1,1,%0
ldbu %0,%1"
@@ -814,7 +814,7 @@
(define_insn ""
[(set (match_operand:SI 0 "register_operand" "=r")
(zero_extend:SI (match_operand:QI 1 "register_operand" "r")))]
- "! TARGET_BYTE_OPS"
+ "! TARGET_BWX"
"zapnot %1,1,%0"
[(set_attr "type" "shift")])
@@ -827,7 +827,7 @@
(define_insn ""
[(set (match_operand:DI 0 "register_operand" "=r,r")
(zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "r,m")))]
- "TARGET_BYTE_OPS"
+ "TARGET_BWX"
"@
zapnot %1,1,%0
ldbu %0,%1"
@@ -836,7 +836,7 @@
(define_insn ""
[(set (match_operand:DI 0 "register_operand" "=r")
(zero_extend:DI (match_operand:QI 1 "register_operand" "r")))]
- "! TARGET_BYTE_OPS"
+ "! TARGET_BWX"
"zapnot %1,1,%0"
[(set_attr "type" "shift")])
@@ -849,7 +849,7 @@
(define_insn ""
[(set (match_operand:SI 0 "register_operand" "=r,r")
(zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "r,m")))]
- "TARGET_BYTE_OPS"
+ "TARGET_BWX"
"@
zapnot %1,3,%0
ldwu %0,%1"
@@ -858,7 +858,7 @@
(define_insn ""
[(set (match_operand:SI 0 "register_operand" "=r")
(zero_extend:SI (match_operand:HI 1 "register_operand" "r")))]
- "! TARGET_BYTE_OPS"
+ "! TARGET_BWX"
"zapnot %1,3,%0"
[(set_attr "type" "shift")])
@@ -871,7 +871,7 @@
(define_insn ""
[(set (match_operand:DI 0 "register_operand" "=r,r")
(zero_extend:DI (match_operand:HI 1 "nonimmediate_operand" "r,m")))]
- "TARGET_BYTE_OPS"
+ "TARGET_BWX"
"@
zapnot %1,3,%0
ldwu %0,%1"
@@ -948,6 +948,30 @@
"eqv %r1,%2,%0"
[(set_attr "type" "ilog")])
+;; Handle the FFS insn if we support CIX.
+
+(define_expand "ffsdi2"
+ [(set (match_dup 2)
+ (unspec [(match_operand:DI 1 "register_operand" "")] 1))
+ (set (match_dup 3)
+ (plus:DI (match_dup 2) (const_int 1)))
+ (set (match_operand:DI 0 "register_operand" "")
+ (if_then_else:DI (eq (match_dup 1) (const_int 0))
+ (const_int 0) (match_dup 3)))]
+ "TARGET_CIX"
+ "
+{
+ operands[2] = gen_reg_rtx (DImode);
+ operands[3] = gen_reg_rtx (DImode);
+}")
+
+(define_insn ""
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (unspec [(match_operand:DI 1 "register_operand" "r")] 1))]
+ "TARGET_CIX"
+ "cttz %1,%0"
+ [(set_attr "type" "shift")])
+
;; Next come the shifts and the various extract and insert operations.
(define_insn "ashldi3"
@@ -1015,7 +1039,7 @@
""
"
{
- if (TARGET_BYTE_OPS)
+ if (TARGET_BWX)
{
emit_insn (gen_extendqihi2x (operands[0],
force_reg (QImode, operands[1])));
@@ -1034,42 +1058,42 @@
}
operands[0] = gen_lowpart (DImode, operands[0]);
- operands[1] = gen_lowpart (DImode, force_reg (HImode, operands[1]));
+ operands[1] = gen_lowpart (DImode, force_reg (QImode, operands[1]));
operands[2] = gen_reg_rtx (DImode);
}")
(define_insn "extendqidi2x"
[(set (match_operand:DI 0 "register_operand" "=r")
(sign_extend:DI (match_operand:QI 1 "register_operand" "r")))]
- "TARGET_BYTE_OPS"
+ "TARGET_BWX"
"sextb %1,%0"
[(set_attr "type" "shift")])
(define_insn "extendhidi2x"
[(set (match_operand:DI 0 "register_operand" "=r")
(sign_extend:DI (match_operand:HI 1 "register_operand" "r")))]
- "TARGET_BYTE_OPS"
+ "TARGET_BWX"
"sextw %1,%0"
[(set_attr "type" "shift")])
(define_insn "extendqisi2x"
[(set (match_operand:SI 0 "register_operand" "=r")
(sign_extend:SI (match_operand:QI 1 "register_operand" "r")))]
- "TARGET_BYTE_OPS"
+ "TARGET_BWX"
"sextb %1,%0"
[(set_attr "type" "shift")])
(define_insn "extendhisi2x"
[(set (match_operand:SI 0 "register_operand" "=r")
(sign_extend:SI (match_operand:HI 1 "register_operand" "r")))]
- "TARGET_BYTE_OPS"
+ "TARGET_BWX"
"sextw %1,%0"
[(set_attr "type" "shift")])
(define_insn "extendqihi2x"
[(set (match_operand:HI 0 "register_operand" "=r")
(sign_extend:HI (match_operand:QI 1 "register_operand" "r")))]
- "TARGET_BYTE_OPS"
+ "TARGET_BWX"
"sextb %1,%0"
[(set_attr "type" "shift")])
@@ -1083,7 +1107,7 @@
""
"
{
- if (TARGET_BYTE_OPS)
+ if (TARGET_BWX)
{
emit_insn (gen_extendqisi2x (operands[0],
force_reg (QImode, operands[1])));
@@ -1117,7 +1141,7 @@
"
{ extern rtx get_unaligned_address ();
- if (TARGET_BYTE_OPS)
+ if (TARGET_BWX)
{
emit_insn (gen_extendqidi2x (operands[0],
force_reg (QImode, operands[1])));
@@ -1149,7 +1173,7 @@
""
"
{
- if (TARGET_BYTE_OPS)
+ if (TARGET_BWX)
{
emit_insn (gen_extendhisi2x (operands[0],
force_reg (HImode, operands[1])));
@@ -1183,7 +1207,7 @@
"
{ extern rtx get_unaligned_address ();
- if (TARGET_BYTE_OPS)
+ if (TARGET_BWX)
{
emit_insn (gen_extendhidi2x (operands[0],
force_reg (HImode, operands[1])));
@@ -1778,6 +1802,31 @@
"sub%-%)%& %R1,%R2,%0"
[(set_attr "type" "fadd")
(set_attr "trap" "yes")])
+
+(define_insn "sqrtsf2"
+ [(set (match_operand:SF 0 "register_operand" "=f")
+ (sqrt:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG")))]
+ "TARGET_FP && TARGET_CIX"
+ "sqrt%, %1,%0"
+ [(set_attr "type" "fdivs")
+ (set_attr "trap" "yes")])
+
+(define_insn "sqrtdf2"
+ [(set (match_operand:DF 0 "register_operand" "=f")
+ (sqrt:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG")))]
+ "TARGET_FP && TARGET_CIX"
+ "sqrt%- %1,%0"
+ [(set_attr "type" "fdivt")
+ (set_attr "trap" "yes")])
+
+(define_insn ""
+ [(set (match_operand:DF 0 "register_operand" "=f")
+ (sqrt:DF (float_extend:DF
+ (match_operand:SF 1 "reg_or_fp0_operand" "fG"))))]
+ "TARGET_FP && TARGET_CIX&& alpha_tp != ALPHA_TP_INSN"
+ "sqrt%- %1,%0"
+ [(set_attr "type" "fdivt")
+ (set_attr "trap" "yes")])
;; Next are all the integer comparisons, and conditional moves and branches
;; and some of the related define_expand's and define_split's.
@@ -2000,6 +2049,70 @@
(match_dup 0) (match_dup 1)))]
"")
+(define_insn "sminqi3"
+ [(set (match_operand:QI 0 "register_operand" "=r")
+ (smin:SI (match_operand:QI 1 "reg_or_0_operand" "%rJ")
+ (match_operand:QI 2 "reg_or_8bit_operand" "rI")))]
+ "TARGET_MAX"
+ "minsb8 %r1,%2,%0"
+ [(set_attr "type" "shift")])
+
+(define_insn "uminqi3"
+ [(set (match_operand:QI 0 "register_operand" "=r")
+ (umin:SI (match_operand:QI 1 "reg_or_0_operand" "%rJ")
+ (match_operand:QI 2 "reg_or_8bit_operand" "rI")))]
+ "TARGET_MAX"
+ "minub8 %r1,%2,%0"
+ [(set_attr "type" "shift")])
+
+(define_insn "smaxqi3"
+ [(set (match_operand:QI 0 "register_operand" "=r")
+ (smax:SI (match_operand:QI 1 "reg_or_0_operand" "%rJ")
+ (match_operand:QI 2 "reg_or_8bit_operand" "rI")))]
+ "TARGET_MAX"
+ "maxsb8 %r1,%2,%0"
+ [(set_attr "type" "shift")])
+
+(define_insn "umaxqi3"
+ [(set (match_operand:QI 0 "register_operand" "=r")
+ (umax:SI (match_operand:QI 1 "reg_or_0_operand" "%rJ")
+ (match_operand:QI 2 "reg_or_8bit_operand" "rI")))]
+ "TARGET_MAX"
+ "maxub8 %r1,%2,%0"
+ [(set_attr "type" "shift")])
+
+(define_insn "sminhi3"
+ [(set (match_operand:HI 0 "register_operand" "=r")
+ (smin:SI (match_operand:HI 1 "reg_or_0_operand" "%rJ")
+ (match_operand:HI 2 "reg_or_8bit_operand" "rI")))]
+ "TARGET_MAX"
+ "minsw4 %r1,%2,%0"
+ [(set_attr "type" "shift")])
+
+(define_insn "uminhi3"
+ [(set (match_operand:HI 0 "register_operand" "=r")
+ (umin:SI (match_operand:HI 1 "reg_or_0_operand" "%rJ")
+ (match_operand:HI 2 "reg_or_8bit_operand" "rI")))]
+ "TARGET_MAX"
+ "minuw4 %r1,%2,%0"
+ [(set_attr "type" "shift")])
+
+(define_insn "smaxhi3"
+ [(set (match_operand:HI 0 "register_operand" "=r")
+ (smax:SI (match_operand:HI 1 "reg_or_0_operand" "%rJ")
+ (match_operand:HI 2 "reg_or_8bit_operand" "rI")))]
+ "TARGET_MAX"
+ "maxsw4 %r1,%2,%0"
+ [(set_attr "type" "shift")])
+
+(define_insn "umaxhi3"
+ [(set (match_operand:HI 0 "register_operand" "=r")
+ (umax:SI (match_operand:HI 1 "reg_or_0_operand" "%rJ")
+ (match_operand:HI 2 "reg_or_8bit_operand" "rI")))]
+ "TARGET_MAX"
+ "maxuw4 %r1,%2,%0"
+ [(set_attr "type" "shift")])
+
(define_expand "smaxdi3"
[(set (match_dup 3)
(le:DI (match_operand:DI 1 "reg_or_0_operand" "")
@@ -2470,16 +2583,23 @@
"
{
enum machine_mode mode;
- enum rtx_code compare_code, branch_code;
+ enum rtx_code compare_code = EQ, branch_code = NE;
if (alpha_compare_fp_p)
- mode = DFmode, compare_code = EQ, branch_code = NE;
+ mode = DFmode;
else
{
- mode = DImode, compare_code = MINUS, branch_code = EQ;
- if (GET_CODE (alpha_compare_op1) == CONST_INT)
+ mode = DImode;
+ /* We want to use cmpeq/bne when we can, since there is a zero-delay
+ bypass between logicals and br/cmov on the 21164. But we don't
+ want to force valid immediate constants into registers needlessly. */
+ if (GET_CODE (alpha_compare_op1) == CONST_INT
+ && ((INTVAL (alpha_compare_op1) >= -0x8000
+ && INTVAL (alpha_compare_op1) < 0)
+ || (INTVAL (alpha_compare_op1) > 0xff
+ && INTVAL (alpha_compare_op1) < 0x8000)))
{
- compare_code = PLUS;
+ compare_code = PLUS, branch_code = EQ;
alpha_compare_op1 = GEN_INT (- INTVAL (alpha_compare_op1));
}
}
@@ -2501,16 +2621,23 @@
"
{
enum machine_mode mode;
- enum rtx_code compare_code, branch_code;
+ enum rtx_code compare_code = EQ, branch_code = EQ;
if (alpha_compare_fp_p)
- mode = DFmode, compare_code = EQ, branch_code = EQ;
+ mode = DFmode;
else
{
- mode = DImode, compare_code = MINUS, branch_code = NE;
- if (GET_CODE (alpha_compare_op1) == CONST_INT)
+ mode = DImode;
+ /* We want to use cmpeq/bne when we can, since there is a zero-delay
+ bypass between logicals and br/cmov on the 21164. But we don't
+ want to force valid immediate constants into registers needlessly. */
+ if (GET_CODE (alpha_compare_op1) == CONST_INT
+ && ((INTVAL (alpha_compare_op1) >= -0x8000
+ && INTVAL (alpha_compare_op1) < 0)
+ || (INTVAL (alpha_compare_op1) > 0xff
+ && INTVAL (alpha_compare_op1) < 0x8000)))
{
- compare_code = PLUS;
+ compare_code = PLUS, branch_code = NE;
alpha_compare_op1 = GEN_INT (- INTVAL (alpha_compare_op1));
}
}
@@ -3631,7 +3758,7 @@
(define_insn ""
[(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,r,r,m,f,f,f,m")
(match_operand:SI 1 "input_operand" "r,J,I,K,L,m,rJ,f,J,m,fG"))]
- "! TARGET_WINDOWS_NT && ! TARGET_OPEN_VMS
+ "! TARGET_WINDOWS_NT && ! TARGET_OPEN_VMS && ! TARGET_CIX
&& (register_operand (operands[0], SImode)
|| reg_or_0_operand (operands[1], SImode))"
"@
@@ -3644,16 +3771,38 @@
stl %r1,%0
cpys %1,%1,%0
cpys $f31,$f31,%0
- lds %0,%1
- sts %R1,%0"
+ ld%, %0,%1
+ st%, %R1,%0"
[(set_attr "type" "ilog,ilog,ilog,iadd,iadd,ld,st,fcpys,fcpys,ld,st")])
(define_insn ""
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,r,r,m,f,f,f,m,r,f")
+ (match_operand:SI 1 "input_operand" "r,J,I,K,L,m,rJ,f,J,m,fG,f,r"))]
+ "! TARGET_WINDOWS_NT && ! TARGET_OPEN_VMS && TARGET_CIX
+ && (register_operand (operands[0], SImode)
+ || reg_or_0_operand (operands[1], SImode))"
+ "@
+ bis %1,%1,%0
+ bis $31,$31,%0
+ bis $31,%1,%0
+ lda %0,%1
+ ldah %0,%h1
+ ldl %0,%1
+ stl %r1,%0
+ cpys %1,%1,%0
+ cpys $f31,$f31,%0
+ ld%, %0,%1
+ st%, %R1,%0
+ ftois %1,%0
+ itof%, %1,%0"
+ [(set_attr "type" "ilog,ilog,ilog,iadd,iadd,ld,st,fcpys,fcpys,ld,st,ld,st")])
+
+(define_insn ""
[(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,r,r,r,m,f,f,f,m")
(match_operand:SI 1 "input_operand" "r,J,I,K,L,s,m,rJ,f,J,m,fG"))]
"(TARGET_WINDOWS_NT || TARGET_OPEN_VMS)
- && (register_operand (operands[0], SImode)
- || reg_or_0_operand (operands[1], SImode))"
+ && (register_operand (operands[0], SImode)
+ || reg_or_0_operand (operands[1], SImode))"
"@
bis %1,%1,%0
bis $31,$31,%0
@@ -3665,14 +3814,14 @@
stl %r1,%0
cpys %1,%1,%0
cpys $f31,$f31,%0
- lds %0,%1
- sts %R1,%0"
+ ld%, %0,%1
+ st%, %R1,%0"
[(set_attr "type" "ilog,ilog,ilog,iadd,iadd,ldsym,ld,st,fcpys,fcpys,ld,st")])
(define_insn ""
[(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,r,r,f,f")
(match_operand:HI 1 "input_operand" "r,J,I,n,f,J"))]
- "! TARGET_BYTE_OPS
+ "! TARGET_BWX
&& (register_operand (operands[0], HImode)
|| register_operand (operands[1], HImode))"
"@
@@ -3687,7 +3836,7 @@
(define_insn ""
[(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,r,r,r,m,f,f")
(match_operand:HI 1 "input_operand" "r,J,I,n,m,rJ,f,J"))]
- "TARGET_BYTE_OPS
+ "TARGET_BWX
&& (register_operand (operands[0], HImode)
|| reg_or_0_operand (operands[1], HImode))"
"@
@@ -3704,7 +3853,7 @@
(define_insn ""
[(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,r,r,f,f")
(match_operand:QI 1 "input_operand" "r,J,I,n,f,J"))]
- "! TARGET_BYTE_OPS
+ "! TARGET_BWX
&& (register_operand (operands[0], QImode)
|| register_operand (operands[1], QImode))"
"@
@@ -3719,7 +3868,7 @@
(define_insn ""
[(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,r,r,r,m,f,f")
(match_operand:QI 1 "input_operand" "r,J,I,n,m,rJ,f,J"))]
- "TARGET_BYTE_OPS
+ "TARGET_BWX
&& (register_operand (operands[0], QImode)
|| reg_or_0_operand (operands[1], QImode))"
"@
@@ -3779,8 +3928,9 @@
(define_insn ""
[(set (match_operand:DI 0 "general_operand" "=r,r,r,r,r,r,r,m,f,f,f,Q")
(match_operand:DI 1 "input_operand" "r,J,I,K,L,s,m,rJ,f,J,Q,fG"))]
- "register_operand (operands[0], DImode)
- || reg_or_0_operand (operands[1], DImode)"
+ "! TARGET_CIX
+ && (register_operand (operands[0], DImode)
+ || reg_or_0_operand (operands[1], DImode))"
"@
bis %1,%1,%0
bis $31,$31,%0
@@ -3796,6 +3946,29 @@
stt %R1,%0"
[(set_attr "type" "ilog,ilog,ilog,iadd,iadd,ldsym,ld,st,fcpys,fcpys,ld,st")])
+(define_insn ""
+ [(set (match_operand:DI 0 "general_operand" "=r,r,r,r,r,r,r,m,f,f,f,Q,r,f")
+ (match_operand:DI 1 "input_operand" "r,J,I,K,L,s,m,rJ,f,J,Q,fG,f,r"))]
+ "TARGET_CIX
+ && (register_operand (operands[0], DImode)
+ || reg_or_0_operand (operands[1], DImode))"
+ "@
+ bis %1,%1,%0
+ bis $31,$31,%0
+ bis $31,%1,%0
+ lda %0,%1
+ ldah %0,%h1
+ lda %0,%1
+ ldq%A1 %0,%1
+ stq%A0 %r1,%0
+ cpys %1,%1,%0
+ cpys $f31,$f31,%0
+ ldt %0,%1
+ stt %R1,%0
+ ftoit %1,%0
+ itoft %1,%0"
+ [(set_attr "type" "ilog,ilog,ilog,iadd,iadd,ldsym,ld,st,fcpys,fcpys,ld,st,ld,st")])
+
;; We do three major things here: handle mem->mem, put 64-bit constants in
;; memory, and construct long 32-bit constants.
@@ -4011,7 +4184,7 @@
"
{ extern rtx get_unaligned_address ();
- if (TARGET_BYTE_OPS)
+ if (TARGET_BWX)
{
if (GET_CODE (operands[0]) == MEM
&& ! reg_or_0_operand (operands[1], QImode))
@@ -4123,7 +4296,7 @@
"
{ extern rtx get_unaligned_address ();
- if (TARGET_BYTE_OPS)
+ if (TARGET_BWX)
{
if (GET_CODE (operands[0]) == MEM
&& ! reg_or_0_operand (operands[1], HImode))
@@ -4237,7 +4410,7 @@
[(parallel [(match_operand:QI 0 "register_operand" "=r")
(match_operand:QI 1 "unaligned_memory_operand" "m")
(match_operand:TI 2 "register_operand" "=&r")])]
- "! TARGET_BYTE_OPS"
+ "! TARGET_BWX"
"
{ extern rtx get_unaligned_address ();
rtx addr = get_unaligned_address (operands[1], 0);
@@ -4259,7 +4432,7 @@
[(parallel [(match_operand:HI 0 "register_operand" "=r")
(match_operand:HI 1 "unaligned_memory_operand" "m")
(match_operand:TI 2 "register_operand" "=&r")])]
- "! TARGET_BYTE_OPS"
+ "! TARGET_BWX"
"
{ extern rtx get_unaligned_address ();
rtx addr = get_unaligned_address (operands[1], 0);
@@ -4281,7 +4454,7 @@
[(parallel [(match_operand:QI 0 "any_memory_operand" "=m")
(match_operand:QI 1 "register_operand" "r")
(match_operand:TI 2 "register_operand" "=&r")])]
- "! TARGET_BYTE_OPS"
+ "! TARGET_BWX"
"
{ extern rtx get_unaligned_address ();
@@ -4320,7 +4493,7 @@
[(parallel [(match_operand:HI 0 "any_memory_operand" "=m")
(match_operand:HI 1 "register_operand" "r")
(match_operand:TI 2 "register_operand" "=&r")])]
- "! TARGET_BYTE_OPS"
+ "! TARGET_BWX"
"
{ extern rtx get_unaligned_address ();
@@ -4377,14 +4550,16 @@
(define_expand "allocate_stack"
[(set (reg:DI 30)
(plus:DI (reg:DI 30)
- (match_operand:DI 0 "reg_or_cint_operand" "")))]
+ (match_operand:DI 1 "reg_or_cint_operand" "")))
+ (set (match_operand:DI 0 "register_operand" "=r")
+ (match_dup 2))]
""
"
{
- if (GET_CODE (operands[0]) == CONST_INT
- && INTVAL (operands[0]) < 32768)
+ if (GET_CODE (operands[1]) == CONST_INT
+ && INTVAL (operands[1]) < 32768)
{
- if (INTVAL (operands[0]) >= 4096)
+ if (INTVAL (operands[1]) >= 4096)
{
/* We do this the same way as in the prologue and generate explicit
probes. Then we update the stack by the constant. */
@@ -4392,14 +4567,15 @@
int probed = 4096;
emit_insn (gen_probe_stack (GEN_INT (- probed)));
- while (probed + 8192 < INTVAL (operands[0]))
+ while (probed + 8192 < INTVAL (operands[1]))
emit_insn (gen_probe_stack (GEN_INT (- (probed += 8192))));
- if (probed + 4096 < INTVAL (operands[0]))
- emit_insn (gen_probe_stack (GEN_INT (- INTVAL(operands[0]))));
+ if (probed + 4096 < INTVAL (operands[1]))
+ emit_insn (gen_probe_stack (GEN_INT (- INTVAL(operands[1]))));
}
- operands[0] = GEN_INT (- INTVAL (operands[0]));
+ operands[1] = GEN_INT (- INTVAL (operands[1]));
+ operands[2] = virtual_stack_dynamic_rtx;
}
else
{
@@ -4410,10 +4586,10 @@
rtx memref;
emit_insn (gen_subdi3 (want, stack_pointer_rtx,
- force_reg (Pmode, operands[0])));
+ force_reg (Pmode, operands[1])));
emit_insn (gen_adddi3 (tmp, stack_pointer_rtx, GEN_INT (-4096)));
- if (GET_CODE (operands[0]) != CONST_INT)
+ if (GET_CODE (operands[1]) != CONST_INT)
{
out_label = gen_label_rtx ();
emit_insn (gen_cmpdi (want, tmp));
@@ -4427,6 +4603,9 @@
emit_insn (gen_adddi3 (tmp, tmp, GEN_INT(-8192)));
emit_insn (gen_cmpdi (tmp, want));
emit_jump_insn (gen_bgtu (loop_label));
+ if (obey_regdecls)
+ gen_rtx (USE, VOIDmode, tmp);
+
memref = gen_rtx (MEM, DImode, want);
MEM_VOLATILE_P (memref) = 1;
emit_move_insn (memref, const0_rtx);
@@ -4435,7 +4614,7 @@
emit_label (out_label);
emit_move_insn (stack_pointer_rtx, want);
-
+ emit_move_insn (operands[0], virtual_stack_dynamic_rtx);
DONE;
}
}")
diff --git a/gcc/config/alpha/elf.h b/gcc/config/alpha/elf.h
index 0506b59aa80..343244dc309 100644
--- a/gcc/config/alpha/elf.h
+++ b/gcc/config/alpha/elf.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler, for DEC Alpha w/ELF.
- Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
Contributed by Richard Henderson (rth@tamu.edu).
This file is part of GNU CC.
@@ -20,10 +20,10 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* This is used on Alpha platforms that use the ELF format.
-Currently only Linux uses this. */
+ Currently only GNU/Linux uses this. */
#undef TARGET_VERSION
-#define TARGET_VERSION fprintf (stderr, " (Alpha Linux/ELF)");
+#define TARGET_VERSION fprintf (stderr, " (Alpha GNU/Linux with ELF)");
#undef OBJECT_FORMAT_COFF
#undef EXTENDED_COFF
@@ -39,6 +39,15 @@ Currently only Linux uses this. */
-Asystem(linux) -Acpu(alpha) -Amachine(alpha) -D__ELF__"
#undef LINK_SPEC
+#ifdef USE_GNULIBC_1
+#define LINK_SPEC "-m elf64alpha -G 8 %{O*:-O3} %{!O*:-O1} \
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
+ %{static:-static}}"
+#else
#define LINK_SPEC "-m elf64alpha -G 8 %{O*:-O3} %{!O*:-O1} \
%{shared:-shared} \
%{!shared: \
@@ -46,6 +55,20 @@ Currently only Linux uses this. */
%{rdynamic:-export-dynamic} \
%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
%{static:-static}}"
+#endif
+
+#ifndef USE_GNULIBC_1
+#undef DEFAULT_VTABLE_THUNKS
+#define DEFAULT_VTABLE_THUNKS 1
+#endif
+
+#ifndef USE_GNULIBC_1
+#undef LIB_SPEC
+#define LIB_SPEC \
+ "%{shared: -lc} \
+ %{!shared: %{mieee-fp:-lieee} %{pthread:-lpthread} \
+ %{profile:-lc_p} %{!profile: -lc}}"
+#endif
/* Output at beginning of assembler file. */
@@ -474,8 +497,8 @@ do { \
#undef PREFERRED_DEBUGGING_TYPE
#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
-/* Provide a STARTFILE_SPEC appropriate for Linux. Here we add
- the Linux magical crtbegin.o file (see crtstuff.c) which
+/* 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
object constructed before entering `main'. */
@@ -483,14 +506,14 @@ do { \
#define STARTFILE_SPEC \
"%{!shared: \
%{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\
- crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"
+ crti.o%s crtbegin.o%s"
-/* Provide a ENDFILE_SPEC appropriate for Linux. Here we tack on
- the Linux magical crtend.o file (see crtstuff.c) which
+/* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on
+ the GNU/Linux magical crtend.o file (see crtstuff.c) which
provides part of the support for getting C++ file-scope static
object constructed before entering `main', followed by a normal
- Linux "finalizer" file, `crtn.o'. */
+ GNU/Linux "finalizer" file, `crtn.o'. */
#undef ENDFILE_SPEC
#define ENDFILE_SPEC \
- "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+ "crtend.o%s crtn.o%s"
diff --git a/gcc/config/alpha/linux.h b/gcc/config/alpha/linux.h
index 4dbc65025cf..32428df5db0 100644
--- a/gcc/config/alpha/linux.h
+++ b/gcc/config/alpha/linux.h
@@ -1,6 +1,6 @@
-/* Definitions of target machine for GNU compiler, for Alpha Linux,
- using ECOFF.
- Copyright (C) 1996 Free Software Foundation, Inc.
+/* Definitions of target machine for GNU compiler, for Alpha Linux-based GNU
+ systems using ECOFF.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Contributed by Bob Manson.
This file is part of GNU CC.
@@ -23,7 +23,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#define TARGET_DEFAULT (3 | MASK_GAS)
#undef TARGET_VERSION
-#define TARGET_VERSION fprintf (stderr, " (Linux/Alpha)");
+#define TARGET_VERSION fprintf (stderr, " (GNU/Linux/Alpha)");
#undef CPP_PREDEFINES
#define CPP_PREDEFINES "\
@@ -65,6 +65,9 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
/* Show that we need a GP when profiling. */
#define TARGET_PROFILING_NEEDS_GP
+/* We support #pragma. */
+#define HANDLE_SYSV_PRAGMA
+
#undef ASM_FINAL_SPEC
/* Emit RTL insns to initialize the variable parts of a trampoline.
@@ -77,8 +80,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
range and so the target is in range of something on the stack.
Omitting the hint saves a bogus branch-prediction cache line load.
- Linux always has an executable stack -- no need for a system call.
- */
+ GNU/Linux always has an executable stack -- no need for a system call. */
#undef INITIALIZE_TRAMPOLINE
#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
diff --git a/gcc/config/alpha/t-linux b/gcc/config/alpha/t-linux
index e4c9fd49261..f48847720c9 100644
--- a/gcc/config/alpha/t-linux
+++ b/gcc/config/alpha/t-linux
@@ -1,4 +1,4 @@
-# Do not build libgcc1. Let gcc generate those functions. The Linux
+# Do not build libgcc1. Let gcc generate those functions. The GNU/Linux
# C library can handle them.
LIBGCC1 =
CROSS_LIBGCC1 =
diff --git a/gcc/config/alpha/vms-tramp.asm b/gcc/config/alpha/vms-tramp.asm
new file mode 100644
index 00000000000..fce9ec539ca
--- /dev/null
+++ b/gcc/config/alpha/vms-tramp.asm
@@ -0,0 +1,22 @@
+;# New Alpha OpenVMS trampoline
+;#
+ .set noreorder
+ .set volatile
+ .set noat
+ .file 1 "tramp.s"
+.text
+ .align 3
+ .globl __tramp
+ .ent __tramp
+__tramp..en:
+
+.link
+ .align 3
+__tramp:
+ .pdesc __tramp..en,null
+.text
+ ldq $1,24($27)
+ ldq $27,16($27)
+ ldq $28,8($27)
+ jmp $31,($28),0
+ .end __tramp
diff --git a/gcc/config/alpha/vms.h b/gcc/config/alpha/vms.h
index 559a1ff0be8..8e4fd6dc858 100644
--- a/gcc/config/alpha/vms.h
+++ b/gcc/config/alpha/vms.h
@@ -29,13 +29,10 @@ Boston, MA 02111-1307, USA. */
#include "alpha/alpha.h"
-/* Predefine this in CPP because VMS limits the size of command options
- and GNU CPP is not used on VMS except with GNU C. */
#undef CPP_PREDEFINES
#define CPP_PREDEFINES \
"-Dalpha -D__ALPHA -Dvms -DVMS -D__alpha__ -D__alpha -D__vms__ -D__VMS__\
- -D__VMS_VER=70000022 \
- -D__GNUC__=2 -D__GNUC_MINOR__=7 -Asystem(vms) -Acpu(alpha) -Amachine(alpha)"
+ -Asystem(vms) -Acpu(alpha) -Amachine(alpha)"
#undef CPP_SPEC
#define CPP_SPEC "\
@@ -89,10 +86,7 @@ Boston, MA 02111-1307, USA. */
#define POINTER_SIZE 32
#define POINTERS_EXTEND_UNSIGNED 0
-/* No data type wants to be aligned rounder than this. */
-#undef BIGGEST_ALIGNMENT
-#define BIGGEST_ALIGNMENT 128 /* X Complex */
-#define MAX_OFILE_ALIGNMENT 524288 /* 8 x 2^16 by DEC Test CD40VRA */
+#define MAX_OFILE_ALIGNMENT 524288 /* 8 x 2^16 by DEC Ada Test CD40VRA */
#undef FIXED_REGISTERS
#define FIXED_REGISTERS \
@@ -127,33 +121,91 @@ Boston, MA 02111-1307, USA. */
if ((TO) == STACK_POINTER_REGNUM) \
(OFFSET) += ALPHA_ROUND (current_function_outgoing_args_size); \
}
+
+/* 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.
+
+ On Alpha/VMS, this is a structure that contains the number of
+ arguments and, for each argument, the datatype of that argument.
+
+ The number of arguments is a number of words of arguments scanned so far.
+ Thus 6 or more means all following args should go on the stack. */
+
+enum avms_arg_type {I64, FF, FD, FG, FS, FT};
+typedef struct {char num_args; enum avms_arg_type atypes[6];} avms_arg_info;
+
+#undef CUMULATIVE_ARGS
+#define CUMULATIVE_ARGS avms_arg_info
+
+/* 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. */
+
+#undef INIT_CUMULATIVE_ARGS
+#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) \
+ (CUM).num_args = 0; \
+ (CUM).atypes[0] = (CUM).atypes[1] = (CUM).atypes[2] = I64; \
+ (CUM).atypes[3] = (CUM).atypes[4] = (CUM).atypes[5] = I64;
+
+/* 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.) */
+
+extern enum avms_arg_type alpha_arg_type ();
+
+/* Determine where to put an argument 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 (or VOIDmode for no more args).
+ 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 Alpha the first 6 words of args are normally in registers
+ and the rest are pushed. */
+
+extern struct rtx_def *alpha_arg_info_reg_val ();
+#undef FUNCTION_ARG
+#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
+((MODE) == VOIDmode ? alpha_arg_info_reg_val (CUM) \
+ : ((CUM.num_args) < 6 && ! MUST_PASS_IN_STACK (MODE, TYPE) \
+ ? gen_rtx(REG, (MODE), \
+ ((CUM).num_args + 16 \
+ + ((TARGET_FPREGS \
+ && (GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT \
+ || GET_MODE_CLASS (MODE) == MODE_FLOAT)) \
+ * 32))) \
+ : 0))
#undef FUNCTION_ARG_ADVANCE
#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
if (MUST_PASS_IN_STACK (MODE, TYPE)) \
- (CUM) = (CUM & ~0xff) + 6; \
+ (CUM).num_args += 6; \
else \
- (CUM) += ALPHA_ARG_SIZE (MODE, TYPE, NAMED)
+ { \
+ if ((CUM).num_args < 6) \
+ (CUM).atypes[(CUM).num_args] = alpha_arg_type (MODE); \
+ \
+ (CUM).num_args += ALPHA_ARG_SIZE (MODE, TYPE, NAMED); \
+ }
+
+/* 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. */
#undef FUNCTION_ARG_PARTIAL_NREGS
#define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) \
-((CUM & 0xff) < 6 && 6 < (CUM & 0xff) \
+((CUM).num_args < 6 && 6 < (CUM).num_args \
+ ALPHA_ARG_SIZE (MODE, TYPE, NAMED) \
- ? 6 - (CUM & 0xff) : 0)
-
-extern char *vmskrunch ();
-#undef ENCODE_SECTION_INFO
-#define ENCODE_SECTION_INFO(DECL) \
-do { \
- if (TREE_CODE (DECL) == FUNCTION_DECL && ! TREE_PUBLIC (DECL)) \
- SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1; \
- \
- if (TREE_CODE_CLASS (TREE_CODE (DECL)) == 'd' \
- && GET_CODE (DECL_RTL (DECL)) == MEM \
- && GET_CODE (XEXP (DECL_RTL (DECL), 0)) == SYMBOL_REF) \
- XSTR (XEXP (DECL_RTL (DECL), 0), 0) \
- = vmskrunch (XSTR (XEXP (DECL_RTL (DECL), 0), 0)); \
-} while (0)
+ ? 6 - (CUM).num_args : 0)
/* Perform any needed actions needed for a function that is receiving a
variable number of arguments.
@@ -178,7 +230,7 @@ do { \
#undef SETUP_INCOMING_VARARGS
#define SETUP_INCOMING_VARARGS(CUM,MODE,TYPE,PRETEND_SIZE,NO_RTL) \
-{ if ((CUM) < 6) \
+{ if ((CUM).num_args < 6) \
{ \
if (! (NO_RTL)) \
{ \
@@ -191,12 +243,6 @@ do { \
} \
}
-#undef ASM_DECLARE_FUNCTION_NAME
-#define ASM_DECLARE_FUNCTION_NAME(FILE,NAME,DECL) \
-{ \
- alpha_function_name = vmskrunch (NAME); \
-}
-
#undef ASM_FILE_START
#define ASM_FILE_START(FILE) \
{ \
@@ -226,11 +272,11 @@ do { \
}
#define LINK_SECTION_ASM_OP ".link"
-
#define READONLY_SECTION_ASM_OP ".rdata"
+#define LITERALS_SECTION_ASM_OP ".literals"
#undef EXTRA_SECTIONS
-#define EXTRA_SECTIONS in_link, in_rdata
+#define EXTRA_SECTIONS in_link, in_rdata, in_literals
#undef EXTRA_SECTION_FUNCTIONS
#define EXTRA_SECTION_FUNCTIONS \
@@ -251,6 +297,15 @@ link_section () \
fprintf (asm_out_file, "%s\n", LINK_SECTION_ASM_OP); \
in_section = in_link; \
} \
+} \
+void \
+literals_section () \
+{ \
+ if (in_section != in_literals) \
+ { \
+ fprintf (asm_out_file, "%s\n", LITERALS_SECTION_ASM_OP); \
+ in_section = in_literals; \
+ } \
}
#undef ASM_OUTPUT_ADDR_DIFF_ELT
@@ -265,10 +320,6 @@ link_section () \
#define ASM_FILE_END(FILE) alpha_write_linkage (FILE);
-#undef FUNCTION_ARG
-void *function_arg ();
-#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) function_arg (&CUM, MODE, TYPE, NAMED)
-
#undef CASE_VECTOR_MODE
#define CASE_VECTOR_MODE DImode
#undef CASE_VECTOR_PC_RELATIVE
@@ -293,80 +344,111 @@ void *function_arg ();
{ \
fprintf (FILE, "\t.quad 0\n"); \
fprintf (FILE, "\t.linkage __tramp\n"); \
+ fprintf (FILE, "\t.quad 0\n"); \
}
/* Length in units of the trampoline for entering a nested function. */
#undef TRAMPOLINE_SIZE
-#define TRAMPOLINE_SIZE 24
+#define TRAMPOLINE_SIZE 32
/* 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. */
#undef INITIALIZE_TRAMPOLINE
-#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
-{ \
- emit_move_insn (gen_rtx (MEM, Pmode, (TRAMP)), (FNADDR)); \
- emit_move_insn (gen_rtx (MEM, Pmode, \
- memory_address (Pmode, \
+#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
+{ \
+ emit_move_insn (gen_rtx (MEM, Pmode, \
+ memory_address (Pmode, \
plus_constant ((TRAMP), 16))), \
- (CXT)); \
+ (FNADDR)); \
+ emit_move_insn (gen_rtx (MEM, Pmode, \
+ memory_address (Pmode, \
+ plus_constant ((TRAMP), 24))), \
+ (CXT)); \
}
#undef TRANSFER_FROM_TRAMPOLINE
+#define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, NAME, ARGS) \
+ (vms_valid_decl_attribute_p (DECL, ATTRIBUTES, NAME, ARGS))
+extern int vms_valid_decl_attribute_p ();
+
#undef SDB_DEBUGGING_INFO
#undef MIPS_DEBUGGING_INFO
-
-#ifndef DBX_DEBUGGING_INFO
-#define DBX_DEBUGGING_INFO
-#endif
+#undef DBX_DEBUGGING_INFO
#define DWARF2_DEBUGGING_INFO
-#ifdef PREFERRED_DEBUGGING_TYPE
+/* This is how to output an assembler line
+ that says to advance the location counter
+ to a multiple of 2**LOG bytes. */
+
+#undef ASM_OUTPUT_ALIGN
+#define ASM_OUTPUT_ALIGN(FILE,LOG) \
+ fprintf (FILE, "\t.align %d\n", LOG);
+
+#define UNALIGNED_SHORT_ASM_OP ".word"
+#define UNALIGNED_INT_ASM_OP ".long"
+#define UNALIGNED_DOUBLE_INT_ASM_OP ".quad"
+
+#undef ASM_OUTPUT_ALIGNED_COMMON
+#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \
+do { \
+ fprintf ((FILE), "\t.comm\t"); \
+ assemble_name ((FILE), (NAME)); \
+ fprintf ((FILE), ",%u,%u\n", (SIZE), (ALIGN) / BITS_PER_UNIT); \
+} while (0)
+
+#define ASM_OUTPUT_SECTION(FILE,SECTION) \
+ (strcmp (SECTION, ".text") == 0) \
+ ? text_section () \
+ : named_section (NULL_TREE, SECTION, 0), \
+ ASM_OUTPUT_ALIGN (FILE, 0) \
+
+#define ASM_OUTPUT_SECTION_NAME(FILE,DECL,NAME,RELOC) \
+ do \
+ { \
+ char *flags; \
+ int ovr = 0; \
+ if (DECL && DECL_MACHINE_ATTRIBUTES (DECL) \
+ && lookup_attribute \
+ ("overlaid", DECL_MACHINE_ATTRIBUTES (DECL))) \
+ flags = ",OVR", ovr = 1; \
+ else if (strncmp (NAME,".debug", 6) == 0) \
+ flags = ",NOWRT"; \
+ else \
+ flags = ""; \
+ fputc ('\n', (FILE)); \
+ fprintf (FILE, ".section\t%s%s\n", NAME, flags); \
+ if (ovr) \
+ (NAME) = ""; \
+ } while (0)
+
+#define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \
+ do { literals_section(); \
+ fprintf ((FILE), "\t"); \
+ assemble_name (FILE, LABEL1); \
+ fprintf (FILE, " = "); \
+ assemble_name (FILE, LABEL2); \
+ fprintf (FILE, "\n"); \
+ } while (0)
+
#undef PREFERRED_DEBUGGING_TYPE
-#endif
-#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
+#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
-#ifdef ASM_FORMAT_PRIVATE_NAME
#undef ASM_FORMAT_PRIVATE_NAME
-#endif
#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 12), \
sprintf ((OUTPUT), "%s___%d", (NAME), (LABELNO)))
#undef ASM_SPEC
-#define ASM_SPEC "-nocpp %{pg}"
-
#undef ASM_FINAL_SPEC
-
-#undef LIBGCC_SPEC
-#define LIBGCC_SPEC "-lgcc2 -lgcclib"
-
-#define OPTIMIZATION_OPTIONS \
-{ \
- write_symbols = PREFERRED_DEBUGGING_TYPE; \
- debug_info_level = (enum debug_info_level) 2; \
-}
-
-#undef OVERRIDE_OPTIONS
-#define OVERRIDE_OPTIONS \
-{ \
- if (write_symbols == NO_DEBUG) \
- debug_info_level = (enum debug_info_level) 0; \
- override_options (); \
-}
-
#undef LINK_SPEC
-#define LINK_SPEC "%{g3:-g3} %{g0:-g0}"
-
#undef STARTFILE_SPEC
-#define STARTFILE_SPEC ""
-
-#undef ENDFILE_SPEC
-#define ENDFILE_SPEC "gnu:[000000]crt0.obj"
+#define ASM_SPEC "-nocpp %{pg}"
+#define LINK_SPEC "%{g3:-g3} %{g0:-g0} %{shared:-shared} %{v:-v}"
/* Define the names of the division and modulus functions. */
#define DIVSI3_LIBCALL "ots$div_i"
diff --git a/gcc/config/alpha/xm-alpha.h b/gcc/config/alpha/xm-alpha.h
index 642e1cf1a6e..f7e870f5641 100644
--- a/gcc/config/alpha/xm-alpha.h
+++ b/gcc/config/alpha/xm-alpha.h
@@ -65,14 +65,6 @@ extern void *malloc (), *realloc (), *calloc ();
#include "string.h"
#endif
-/* OSF/1 has vprintf. */
-
-#define HAVE_VPRINTF
-
-/* OSF/1 has putenv. */
-
-#define HAVE_PUTENV
-
/* OSF/1 is POSIX.1 compliant. */
#define POSIX
diff --git a/gcc/config/alpha/xm-vms.h b/gcc/config/alpha/xm-vms.h
index c96423a6e5a..6b7dad578f1 100644
--- a/gcc/config/alpha/xm-vms.h
+++ b/gcc/config/alpha/xm-vms.h
@@ -1,5 +1,5 @@
/* Configuration for GNU C-compiler for openVMS/Alpha.
- Copyright (C) 1996 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Contributed by Klaus Kaempf (kkaempf@progis.de).
This file is part of GNU CC.
@@ -53,7 +53,11 @@ Boston, MA 02111-1307, USA. */
/* Define a local equivalent (sort of) for unlink */
#define unlink remove
+
#define NEED_ATEXIT
+#define HAVE_VPRINTF
+#define HAVE_PUTENV
+#define HAVE_STRERROR
#define NO_SYS_PARAMS_H /* Don't have <sys/params.h> */
#define NO_STAB_H /* Don't have <stab.h> */
@@ -63,17 +67,11 @@ Boston, MA 02111-1307, USA. */
#define HAVE_STDLIB_H 1
#define HAVE_UNISTD_H 1
#define HAVE_STRING_H 1
+#define HAVE_LIMITS_H 1
+#define HAVE_STDDEF_H 1
+#define HAVE_TIME_H 1
#define STDC_HEADERS 1
-/* Use ANSI/SYSV style byte manipulation routines instead of BSD ones. */
-
-#define bcopy(s,d,n) memcpy((d),(s),(n))
-#define bzero(d,n) memset((d),0,(n))
-#define bcmp(l,r,n) memcmp((l),(r),(n))
-
-#define index strchr
-#define rindex strrchr
-
#if __STDC__
extern void *alloca (size_t);
#else
@@ -82,5 +80,3 @@ extern char *alloca (unsigned int);
#define OBJECT_SUFFIX ".obj"
#define EXECUTABLE_SUFFIX ".exe"
-#define DIR_SEPARATOR ']'
-#define PATH_SEPARATOR ','
diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c
new file mode 100644
index 00000000000..7272cc927c8
--- /dev/null
+++ b/gcc/config/arc/arc.c
@@ -0,0 +1,2212 @@
+/* Subroutines used for code generation on the Argonaut ARC cpu.
+ Copyright (C) 1994, 1995, 1997 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.
+
+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. */
+
+/* ??? This is an old port, and is undoubtedly suffering from bit rot. */
+
+#include <stdio.h>
+#include "config.h"
+#include "tree.h"
+#include "rtl.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 "expr.h"
+#include "recog.h"
+
+/* Which cpu we're compiling for (NULL(=base), ???). */
+char *arc_cpu_string;
+int arc_cpu_type;
+
+/* Name of mangle string to add to symbols to separate code compiled for each
+ cpu (or NULL). */
+char *arc_mangle_cpu;
+
+/* Save the operands last given to a compare for use when we
+ generate a scc or bcc insn. */
+rtx arc_compare_op0, arc_compare_op1;
+
+/* Name of text, data, and rodata sections, as specified on command line.
+ Selected by -m{text,data,rodata} flags. */
+char *arc_text_string = ARC_DEFAULT_TEXT_SECTION;
+char *arc_data_string = ARC_DEFAULT_DATA_SECTION;
+char *arc_rodata_string = ARC_DEFAULT_RODATA_SECTION;
+
+/* Name of text, data, and rodata sections used in varasm.c. */
+char *arc_text_section;
+char *arc_data_section;
+char *arc_rodata_section;
+
+/* Array of valid operand punctuation characters. */
+char arc_punct_chars[256];
+
+/* Variables used by arc_final_prescan_insn to implement conditional
+ execution. */
+static int arc_ccfsm_state;
+static int arc_ccfsm_current_cc;
+static rtx arc_ccfsm_target_insn;
+static int arc_ccfsm_target_label;
+
+/* The maximum number of insns skipped which will be conditionalised if
+ possible. */
+#define MAX_INSNS_SKIPPED 3
+
+/* A nop is needed between a 4 byte insn that sets the condition codes and
+ a branch that uses them (the same isn't true for an 8 byte insn that sets
+ the condition codes). Set by arc_final_prescan_insn. Used by
+ arc_print_operand. */
+static int last_insn_set_cc_p;
+static int current_insn_set_cc_p;
+static void record_cc_ref ();
+
+void arc_init_reg_tables ();
+
+/* Called by OVERRIDE_OPTIONS to initialize various things. */
+
+void
+arc_init (void)
+{
+ if (arc_cpu_string == 0
+ || !strcmp (arc_cpu_string, "base"))
+ {
+ /* Ensure we have a printable value for the .cpu pseudo-op. */
+ arc_cpu_string = "base";
+ arc_cpu_type = 0;
+ arc_mangle_cpu = NULL;
+ }
+ else if (ARC_EXTENSION_CPU (arc_cpu_string))
+ ; /* nothing to do */
+ else
+ {
+ error ("bad value (%s) for -mcpu switch", arc_cpu_string);
+ arc_cpu_string = "base";
+ arc_cpu_type = 0;
+ arc_mangle_cpu = NULL;
+ }
+
+ /* Set the pseudo-ops for the various standard sections. */
+ arc_text_section = xmalloc (strlen (arc_text_string) + sizeof (ARC_SECTION_FORMAT) + 1);
+ sprintf (arc_text_section, ARC_SECTION_FORMAT, arc_text_string);
+ arc_data_section = xmalloc (strlen (arc_data_string) + sizeof (ARC_SECTION_FORMAT) + 1);
+ sprintf (arc_data_section, ARC_SECTION_FORMAT, arc_data_string);
+ arc_rodata_section = xmalloc (strlen (arc_rodata_string) + sizeof (ARC_SECTION_FORMAT) + 1);
+ sprintf (arc_rodata_section, ARC_SECTION_FORMAT, arc_rodata_string);
+
+ arc_init_reg_tables ();
+
+ /* Initialize array for PRINT_OPERAND_PUNCT_VALID_P. */
+ memset (arc_punct_chars, 0, sizeof (arc_punct_chars));
+ arc_punct_chars['#'] = 1;
+ arc_punct_chars['*'] = 1;
+ arc_punct_chars['?'] = 1;
+ arc_punct_chars['!'] = 1;
+ arc_punct_chars['~'] = 1;
+}
+
+/* The condition codes of the ARC, and the inverse function. */
+static char *arc_condition_codes[] =
+{
+ "al", 0, "eq", "ne", "p", "n", "c", "nc", "v", "nv",
+ "gt", "le", "ge", "lt", "hi", "ls", "pnz", 0
+};
+
+#define ARC_INVERSE_CONDITION_CODE(X) ((X) ^ 1)
+
+/* Returns the index of the ARC condition code string in
+ `arc_condition_codes'. COMPARISON should be an rtx like
+ `(eq (...) (...))'. */
+
+static int
+get_arc_condition_code (comparison)
+ rtx comparison;
+{
+ switch (GET_CODE (comparison))
+ {
+ case EQ : return 2;
+ case NE : return 3;
+ case GT : return 10;
+ case LE : return 11;
+ case GE : return 12;
+ case LT : return 13;
+ case GTU : return 14;
+ case LEU : return 15;
+ case LTU : return 6;
+ case GEU : return 7;
+ default : abort ();
+ }
+ /*NOTREACHED*/
+ return (42);
+}
+
+/* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE,
+ return the mode to be used for the comparison. */
+
+enum machine_mode
+arc_select_cc_mode (op, x, y)
+ enum rtx_code op;
+ rtx x, y;
+{
+ switch (op)
+ {
+ case EQ :
+ case NE :
+ return CCZNmode;
+ default :
+ switch (GET_CODE (x))
+ {
+ case AND :
+ case IOR :
+ case XOR :
+ case SIGN_EXTEND :
+ case ZERO_EXTEND :
+ return CCZNmode;
+ case ASHIFT :
+ case ASHIFTRT :
+ case LSHIFTRT :
+ return CCZNCmode;
+ }
+ }
+ return CCmode;
+}
+
+/* Vectors to keep interesting information about registers where it can easily
+ be got. We use to use the actual mode value as the bit number, but there
+ is (or may be) more than 32 modes now. Instead we use two tables: one
+ indexed by hard register number, and one indexed by mode. */
+
+/* The purpose of arc_mode_class is to shrink the range of modes so that
+ they all fit (as bit numbers) in a 32 bit word (again). Each real mode is
+ mapped into one arc_mode_class mode. */
+
+enum arc_mode_class {
+ C_MODE,
+ S_MODE, D_MODE, T_MODE, O_MODE,
+ SF_MODE, DF_MODE, TF_MODE, OF_MODE
+};
+
+/* Modes for condition codes. */
+#define C_MODES (1 << (int) C_MODE)
+
+/* Modes for single-word and smaller quantities. */
+#define S_MODES ((1 << (int) S_MODE) | (1 << (int) SF_MODE))
+
+/* Modes for double-word and smaller quantities. */
+#define D_MODES (S_MODES | (1 << (int) D_MODE) | (1 << DF_MODE))
+
+/* Modes for quad-word and smaller quantities. */
+#define T_MODES (D_MODES | (1 << (int) T_MODE) | (1 << (int) TF_MODE))
+
+/* Value is 1 if register/mode pair is acceptable on arc. */
+
+unsigned int arc_hard_regno_mode_ok[] = {
+ T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES,
+ T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES,
+ T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, D_MODES,
+ D_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES,
+
+ /* ??? Leave these as S_MODES for now. */
+ S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES,
+ S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES,
+ S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES,
+ S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, C_MODES
+};
+
+unsigned int arc_mode_class [NUM_MACHINE_MODES];
+
+enum reg_class arc_regno_reg_class[FIRST_PSEUDO_REGISTER];
+
+void
+arc_init_reg_tables ()
+{
+ int i;
+
+ for (i = 0; i < NUM_MACHINE_MODES; i++)
+ {
+ switch (GET_MODE_CLASS (i))
+ {
+ case MODE_INT:
+ case MODE_PARTIAL_INT:
+ case MODE_COMPLEX_INT:
+ if (GET_MODE_SIZE (i) <= 4)
+ arc_mode_class[i] = 1 << (int) S_MODE;
+ else if (GET_MODE_SIZE (i) == 8)
+ arc_mode_class[i] = 1 << (int) D_MODE;
+ else if (GET_MODE_SIZE (i) == 16)
+ arc_mode_class[i] = 1 << (int) T_MODE;
+ else if (GET_MODE_SIZE (i) == 32)
+ arc_mode_class[i] = 1 << (int) O_MODE;
+ else
+ arc_mode_class[i] = 0;
+ break;
+ case MODE_FLOAT:
+ case MODE_COMPLEX_FLOAT:
+ if (GET_MODE_SIZE (i) <= 4)
+ arc_mode_class[i] = 1 << (int) SF_MODE;
+ else if (GET_MODE_SIZE (i) == 8)
+ arc_mode_class[i] = 1 << (int) DF_MODE;
+ else if (GET_MODE_SIZE (i) == 16)
+ arc_mode_class[i] = 1 << (int) TF_MODE;
+ else if (GET_MODE_SIZE (i) == 32)
+ arc_mode_class[i] = 1 << (int) OF_MODE;
+ else
+ arc_mode_class[i] = 0;
+ break;
+ case MODE_CC:
+ default:
+ /* mode_class hasn't been initialized yet for EXTRA_CC_MODES, so
+ we must explicitly check for them here. */
+ if (i == (int) CCmode || i == (int) CCZNmode || i == (int) CCZNCmode)
+ arc_mode_class[i] = 1 << (int) C_MODE;
+ else
+ arc_mode_class[i] = 0;
+ break;
+ }
+ }
+
+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+ {
+ if (i < 60)
+ arc_regno_reg_class[i] = GENERAL_REGS;
+ else if (i == 60)
+ arc_regno_reg_class[i] = LPCOUNT_REG;
+ else if (i == 61)
+ arc_regno_reg_class[i] = NO_REGS /* CC_REG: must be NO_REGS */;
+ else
+ arc_regno_reg_class[i] = NO_REGS;
+ }
+}
+
+/* ARC specific attribute support.
+
+ The ARC has these attributes:
+ interrupt - for interrupt functions
+*/
+
+/* Return nonzero if IDENTIFIER is a valid decl attribute. */
+
+int
+arc_valid_machine_decl_attribute (type, attributes, identifier, args)
+ tree type;
+ tree attributes;
+ tree identifier;
+ tree args;
+{
+ if (identifier == get_identifier ("__interrupt__")
+ && list_length (args) == 1
+ && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
+ {
+ tree value = TREE_VALUE (args);
+
+ if (!strcmp (TREE_STRING_POINTER (value), "ilink1")
+ || !strcmp (TREE_STRING_POINTER (value), "ilink2"))
+ return 1;
+ }
+ return 0;
+}
+
+/* Return zero if TYPE1 and TYPE are incompatible, one if they are compatible,
+ and two if they are nearly compatible (which causes a warning to be
+ generated). */
+
+int
+arc_comp_type_attributes (type1, type2)
+ tree type1, type2;
+{
+ return 1;
+}
+
+/* Set the default attributes for TYPE. */
+
+void
+arc_set_default_type_attributes (type)
+ tree type;
+{
+}
+
+/* Acceptable arguments to the call insn. */
+
+int
+call_address_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ return (symbolic_operand (op, mode)
+ || (GET_CODE (op) == CONST_INT && LEGITIMATE_CONSTANT_P (op))
+ || (GET_CODE (op) == REG));
+}
+
+int
+call_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ if (GET_CODE (op) != MEM)
+ return 0;
+ op = XEXP (op, 0);
+ return call_address_operand (op, mode);
+}
+
+/* Returns 1 if OP is a symbol reference. */
+
+int
+symbolic_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ switch (GET_CODE (op))
+ {
+ case SYMBOL_REF:
+ case LABEL_REF:
+ case CONST :
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+/* Return truth value of statement that OP is a symbolic memory
+ operand of mode MODE. */
+
+int
+symbolic_memory_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ if (GET_CODE (op) == SUBREG)
+ op = SUBREG_REG (op);
+ if (GET_CODE (op) != MEM)
+ return 0;
+ op = XEXP (op, 0);
+ return (GET_CODE (op) == SYMBOL_REF || GET_CODE (op) == CONST
+ || GET_CODE (op) == LABEL_REF);
+}
+
+/* Return true if OP is a short immediate (shimm) value. */
+
+int
+short_immediate_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ if (GET_CODE (op) != CONST_INT)
+ return 0;
+ return SMALL_INT (INTVAL (op));
+}
+
+/* Return true if OP will require a long immediate (limm) value.
+ This is currently only used when calculating length attributes. */
+
+int
+long_immediate_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ switch (GET_CODE (op))
+ {
+ case SYMBOL_REF :
+ case LABEL_REF :
+ case CONST :
+ return 1;
+ case CONST_INT :
+ return !SMALL_INT (INTVAL (op));
+ case CONST_DOUBLE :
+ /* These can happen because large unsigned 32 bit constants are
+ represented this way (the multiplication patterns can cause these
+ to be generated). They also occur for SFmode values. */
+ return 1;
+ }
+ return 0;
+}
+
+/* Return true if OP is a MEM that when used as a load or store address will
+ require an 8 byte insn.
+ Load and store instructions don't allow the same possibilities but they're
+ similar enough that this one function will do.
+ This is currently only used when calculating length attributes. */
+
+int
+long_immediate_loadstore_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ if (GET_CODE (op) != MEM)
+ return 0;
+
+ op = XEXP (op, 0);
+ switch (GET_CODE (op))
+ {
+ case SYMBOL_REF :
+ case LABEL_REF :
+ case CONST :
+ return 1;
+ case CONST_INT :
+ /* This must be handled as "st c,[limm]". Ditto for load.
+ Technically, the assembler could translate some possibilities to
+ "st c,[limm/2 + limm/2]" if limm/2 will fit in a shimm, but we don't
+ assume that it does. */
+ return 1;
+ case CONST_DOUBLE :
+ /* These can happen because large unsigned 32 bit constants are
+ represented this way (the multiplication patterns can cause these
+ to be generated). They also occur for SFmode values. */
+ return 1;
+ case REG :
+ return 0;
+ case PLUS :
+ if (GET_CODE (XEXP (op, 1)) == CONST_INT
+ && !SMALL_INT (INTVAL (XEXP (op, 1))))
+ return 1;
+ return 0;
+ }
+ return 0;
+}
+
+/* Return true if OP is an acceptable argument for a single word
+ move source. */
+
+int
+move_src_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ switch (GET_CODE (op))
+ {
+ case SYMBOL_REF :
+ case LABEL_REF :
+ case CONST :
+ return 1;
+ case CONST_INT :
+ return (LARGE_INT (INTVAL (op)));
+ case CONST_DOUBLE :
+ /* We can handle DImode integer constants in SImode if the value
+ (signed or unsigned) will fit in 32 bits. This is needed because
+ large unsigned 32 bit constants are represented as CONST_DOUBLEs. */
+ if (mode == SImode)
+ return arc_double_limm_p (op);
+ /* We can handle 32 bit floating point constants. */
+ if (mode == SFmode)
+ return GET_MODE (op) == SFmode;
+ return 0;
+ case REG :
+ return register_operand (op, mode);
+ case SUBREG :
+ /* (subreg (mem ...) ...) can occur here if the inner part was once a
+ pseudo-reg and is now a stack slot. */
+ if (GET_CODE (SUBREG_REG (op)) == MEM)
+ return address_operand (XEXP (SUBREG_REG (op), 0), mode);
+ else
+ return register_operand (op, mode);
+ case MEM :
+ return address_operand (XEXP (op, 0), mode);
+ default :
+ return 0;
+ }
+}
+
+/* Return true if OP is an acceptable argument for a double word
+ move source. */
+
+int
+move_double_src_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ switch (GET_CODE (op))
+ {
+ case REG :
+ return register_operand (op, mode);
+ case SUBREG :
+ /* (subreg (mem ...) ...) can occur here if the inner part was once a
+ pseudo-reg and is now a stack slot. */
+ if (GET_CODE (SUBREG_REG (op)) == MEM)
+ return move_double_src_operand (SUBREG_REG (op), mode);
+ else
+ return register_operand (op, mode);
+ case MEM :
+ /* Disallow auto inc/dec for now. */
+ if (GET_CODE (XEXP (op, 0)) == PRE_DEC
+ || GET_CODE (XEXP (op, 0)) == PRE_INC)
+ return 0;
+ return address_operand (XEXP (op, 0), mode);
+ case CONST_INT :
+ case CONST_DOUBLE :
+ return 1;
+ default :
+ return 0;
+ }
+}
+
+/* Return true if OP is an acceptable argument for a move destination. */
+
+int
+move_dest_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ switch (GET_CODE (op))
+ {
+ case REG :
+ return register_operand (op, mode);
+ case SUBREG :
+ /* (subreg (mem ...) ...) can occur here if the inner part was once a
+ pseudo-reg and is now a stack slot. */
+ if (GET_CODE (SUBREG_REG (op)) == MEM)
+ return address_operand (XEXP (SUBREG_REG (op), 0), mode);
+ else
+ return register_operand (op, mode);
+ case MEM :
+ return address_operand (XEXP (op, 0), mode);
+ default :
+ return 0;
+ }
+}
+
+/* Return true if OP is valid load with update operand. */
+
+int
+load_update_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ if (GET_CODE (op) != MEM
+ || GET_MODE (op) != mode)
+ return 0;
+ op = XEXP (op, 0);
+ if (GET_CODE (op) != PLUS
+ || GET_MODE (op) != Pmode
+ || !register_operand (XEXP (op, 0), Pmode)
+ || !nonmemory_operand (XEXP (op, 1), Pmode))
+ return 0;
+ return 1;
+}
+
+/* Return true if OP is valid store with update operand. */
+
+int
+store_update_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ if (GET_CODE (op) != MEM
+ || GET_MODE (op) != mode)
+ return 0;
+ op = XEXP (op, 0);
+ if (GET_CODE (op) != PLUS
+ || GET_MODE (op) != Pmode
+ || !register_operand (XEXP (op, 0), Pmode)
+ || !(GET_CODE (XEXP (op, 1)) == CONST_INT
+ && SMALL_INT (INTVAL (XEXP (op, 1)))))
+ return 0;
+ return 1;
+}
+
+/* Return true if OP is a non-volatile non-immediate operand.
+ Volatile memory refs require a special "cache-bypass" instruction
+ and only the standard movXX patterns are set up to handle them. */
+
+int
+nonvol_nonimm_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ if (GET_CODE (op) == MEM && MEM_VOLATILE_P (op))
+ return 0;
+ return nonimmediate_operand (op, mode);
+}
+
+/* Accept integer operands in the range -0x80000000..0x7fffffff. We have
+ to check the range carefully since this predicate is used in DImode
+ contexts. */
+
+int
+const_sint32_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ /* All allowed constants will fit a CONST_INT. */
+ return (GET_CODE (op) == CONST_INT
+ && (INTVAL (op) >= (-0x7fffffff - 1) && INTVAL (op) <= 0x7fffffff));
+}
+
+/* Accept integer operands in the range 0..0xffffffff. We have to check the
+ range carefully since this predicate is used in DImode contexts. Also, we
+ need some extra crud to make it work when hosted on 64-bit machines. */
+
+int
+const_uint32_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+#if HOST_BITS_PER_WIDE_INT > 32
+ /* All allowed constants will fit a CONST_INT. */
+ return (GET_CODE (op) == CONST_INT
+ && (INTVAL (op) >= 0 && INTVAL (op) <= 0xffffffffL));
+#else
+ return ((GET_CODE (op) == CONST_INT && INTVAL (op) >= 0)
+ || (GET_CODE (op) == CONST_DOUBLE && CONST_DOUBLE_HIGH (op) == 0));
+#endif
+}
+
+/* Return 1 if OP is a comparison operator valid for the mode of CC.
+ This allows the use of MATCH_OPERATOR to recognize all the branch insns.
+
+ Some insns only set a few bits in the condition code. So only allow those
+ comparisons that use the bits that are valid. */
+
+int
+proper_comparison_operator (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ enum rtx_code code = GET_CODE (op);
+
+ if (GET_RTX_CLASS (code) != '<')
+ return 0;
+
+ if (GET_MODE (XEXP (op, 0)) == CCZNmode)
+ return (code == EQ || code == NE);
+ if (GET_MODE (XEXP (op, 0)) == CCZNCmode)
+ return (code == EQ || code == NE
+ || code == LTU || code == GEU || code == GTU || code == LEU);
+ return 1;
+}
+
+/* Misc. utilities. */
+
+/* X and Y are two things to compare using CODE. Emit the compare insn and
+ return the rtx for the cc reg in the proper mode. */
+
+rtx
+gen_compare_reg (code, x, y)
+ enum rtx_code code;
+ rtx x, y;
+{
+ enum machine_mode mode = SELECT_CC_MODE (code, x, y);
+ rtx cc_reg;
+
+ cc_reg = gen_rtx (REG, mode, 61);
+
+ emit_insn (gen_rtx (SET, VOIDmode, cc_reg,
+ gen_rtx (COMPARE, mode, x, y)));
+
+ return cc_reg;
+}
+
+/* Return 1 if VALUE, a const_double, will fit in a limm (4 byte number).
+ We assume the value can be either signed or unsigned. */
+
+int
+arc_double_limm_p (value)
+ rtx value;
+{
+ HOST_WIDE_INT low, high;
+
+ if (GET_CODE (value) != CONST_DOUBLE)
+ abort ();
+
+ low = CONST_DOUBLE_LOW (value);
+ high = CONST_DOUBLE_HIGH (value);
+
+ if (low & 0x80000000)
+ {
+ return (((unsigned HOST_WIDE_INT) low <= 0xffffffff && high == 0)
+ || (((low & - (unsigned HOST_WIDE_INT) 0x80000000)
+ == - (unsigned HOST_WIDE_INT) 0x80000000)
+ && high == -1));
+ }
+ else
+ {
+ return (unsigned HOST_WIDE_INT) low <= 0x7fffffff && high == 0;
+ }
+}
+
+/* Do any needed setup for a variadic function. For the ARC, we must
+ create a register parameter block, and then copy any anonymous arguments
+ in registers to memory.
+
+ CUM has not been updated for the last named argument which has type TYPE
+ and mode MODE, and we rely on this fact.
+
+ We do things a little weird here. We're supposed to only allocate space
+ for the anonymous arguments. However we need to keep the stack eight byte
+ aligned. So we round the space up if necessary, and leave it to va-arc.h
+ to compensate. */
+
+void
+arc_setup_incoming_varargs (cum, mode, type, pretend_size, no_rtl)
+ CUMULATIVE_ARGS *cum;
+ enum machine_mode mode;
+ tree type;
+ int *pretend_size;
+ int no_rtl;
+{
+ int first_anon_arg;
+
+ /* All BLKmode values are passed by reference. */
+ if (mode == BLKmode)
+ abort ();
+
+ /* We must treat `__builtin_va_alist' as an anonymous arg. */
+ if (current_function_varargs)
+ first_anon_arg = *cum;
+ else
+ first_anon_arg = *cum + ((GET_MODE_SIZE (mode) + UNITS_PER_WORD - 1)
+ / UNITS_PER_WORD);
+
+ if (first_anon_arg < MAX_ARC_PARM_REGS && !no_rtl)
+ {
+ /* Note that first_reg_offset < MAX_ARC_PARM_REGS. */
+ int first_reg_offset = first_anon_arg;
+ /* Size in words to "pretend" allocate. */
+ int size = MAX_ARC_PARM_REGS - first_reg_offset;
+ /* Extra slop to keep stack eight byte aligned. */
+ int align_slop = size & 1;
+ rtx regblock;
+
+ regblock = gen_rtx (MEM, BLKmode,
+ plus_constant (arg_pointer_rtx,
+ FIRST_PARM_OFFSET (0)
+ + align_slop * UNITS_PER_WORD));
+ move_block_from_reg (first_reg_offset, regblock,
+ MAX_ARC_PARM_REGS - first_reg_offset,
+ ((MAX_ARC_PARM_REGS - first_reg_offset)
+ * UNITS_PER_WORD));
+
+ *pretend_size = ((MAX_ARC_PARM_REGS - first_reg_offset + align_slop)
+ * UNITS_PER_WORD);
+ }
+}
+
+/* Cost functions. */
+
+/* Provide the costs of an addressing mode that contains ADDR.
+ If ADDR is not a valid address, its cost is irrelevant. */
+
+int
+arc_address_cost (addr)
+ rtx addr;
+{
+ switch (GET_CODE (addr))
+ {
+ case REG :
+ /* This is handled in the macro that calls us.
+ It's here for documentation. */
+ return 1;
+
+ case LABEL_REF :
+ case SYMBOL_REF :
+ case CONST :
+ return 2;
+
+ case PLUS :
+ {
+ register rtx plus0 = XEXP (addr, 0);
+ register rtx plus1 = XEXP (addr, 1);
+
+ if (GET_CODE (plus0) != REG)
+ break;
+
+ switch (GET_CODE (plus1))
+ {
+ case CONST_INT :
+ return SMALL_INT (plus1) ? 1 : 2;
+ case CONST :
+ case SYMBOL_REF :
+ case LABEL_REF :
+ return 2;
+ default:
+ break;
+ }
+ break;
+ }
+ }
+
+ return 4;
+}
+
+/* Function prologue/epilogue handlers. */
+
+/* ARC stack frames look like:
+
+ Before call After call
+ +-----------------------+ +-----------------------+
+ | | | |
+ high | local variables, | | local variables, |
+ mem | reg save area, etc. | | reg save area, etc. |
+ | | | |
+ +-----------------------+ +-----------------------+
+ | | | |
+ | arguments on stack. | | arguments on stack. |
+ | | | |
+ SP+16->+-----------------------+FP+48->+-----------------------+
+ | 4 word save area for | | reg parm save area, |
+ | return addr, prev %fp | | only created for |
+ SP+0->+-----------------------+ | variable argument |
+ | functions |
+ FP+16->+-----------------------+
+ | 4 word save area for |
+ | return addr, prev %fp |
+ FP+0->+-----------------------+
+ | |
+ | local variables |
+ | |
+ +-----------------------+
+ | |
+ | register save area |
+ | |
+ +-----------------------+
+ | |
+ | alloca allocations |
+ | |
+ +-----------------------+
+ | |
+ | arguments on stack |
+ | |
+ SP+16->+-----------------------+
+ low | 4 word save area for |
+ memory | return addr, prev %fp |
+ SP+0->+-----------------------+
+
+Notes:
+1) The "reg parm save area" does not exist for non variable argument fns.
+ The "reg parm save area" can be eliminated completely if we created our
+ own va-arc.h, but that has tradeoffs as well (so it's not done). */
+
+/* Structure to be filled in by arc_compute_frame_size with register
+ save masks, and offsets for the current function. */
+struct arc_frame_info
+{
+ unsigned int total_size; /* # bytes that the entire frame takes up. */
+ unsigned int extra_size; /* # bytes of extra stuff. */
+ unsigned int pretend_size; /* # bytes we push and pretend caller did. */
+ unsigned int args_size; /* # bytes that outgoing arguments take up. */
+ unsigned int reg_size; /* # bytes needed to store regs. */
+ unsigned int var_size; /* # bytes that variables take up. */
+ unsigned int reg_offset; /* Offset from new sp to store regs. */
+ unsigned int gmask; /* Mask of saved gp registers. */
+ int initialized; /* Nonzero if frame size already calculated. */
+};
+
+/* Current frame information calculated by arc_compute_frame_size. */
+static struct arc_frame_info current_frame_info;
+
+/* Zero structure to initialize current_frame_info. */
+static struct arc_frame_info zero_frame_info;
+
+/* Type of function DECL.
+
+ The result is cached. To reset the cache at the end of a function,
+ call with DECL = NULL_TREE. */
+
+enum arc_function_type
+arc_compute_function_type (decl)
+ tree decl;
+{
+ tree a;
+ /* Cached value. */
+ static enum arc_function_type fn_type = ARC_FUNCTION_UNKNOWN;
+ /* Last function we were called for. */
+ static tree last_fn = NULL_TREE;
+
+ /* Resetting the cached value? */
+ if (decl == NULL_TREE)
+ {
+ fn_type = ARC_FUNCTION_UNKNOWN;
+ last_fn = NULL_TREE;
+ return fn_type;
+ }
+
+ if (decl == last_fn && fn_type != ARC_FUNCTION_UNKNOWN)
+ return fn_type;
+
+ /* Assume we have a normal function (not an interrupt handler). */
+ fn_type = ARC_FUNCTION_NORMAL;
+
+ /* Now see if this is an interrupt handler. */
+ for (a = DECL_MACHINE_ATTRIBUTES (current_function_decl);
+ a;
+ a = TREE_CHAIN (a))
+ {
+ tree name = TREE_PURPOSE (a), args = TREE_VALUE (a);
+
+ if (name == get_identifier ("__interrupt__")
+ && list_length (args) == 1
+ && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
+ {
+ tree value = TREE_VALUE (args);
+
+ if (!strcmp (TREE_STRING_POINTER (value), "ilink1"))
+ fn_type = ARC_FUNCTION_ILINK1;
+ else if (!strcmp (TREE_STRING_POINTER (value), "ilink2"))
+ fn_type = ARC_FUNCTION_ILINK2;
+ else
+ abort ();
+ break;
+ }
+ }
+
+ last_fn = decl;
+ return fn_type;
+}
+
+#define ILINK1_REGNUM 29
+#define ILINK2_REGNUM 30
+#define RETURN_ADDR_REGNUM 31
+#define FRAME_POINTER_MASK (1 << (FRAME_POINTER_REGNUM))
+#define RETURN_ADDR_MASK (1 << (RETURN_ADDR_REGNUM))
+
+/* Tell prologue and epilogue if register REGNO should be saved / restored.
+ The return address and frame pointer are treated separately.
+ Don't consider them here. */
+#define MUST_SAVE_REGISTER(regno, interrupt_p) \
+((regno) != RETURN_ADDR_REGNUM && (regno) != FRAME_POINTER_REGNUM \
+ && (regs_ever_live[regno] && (!call_used_regs[regno] || interrupt_p)))
+
+#define MUST_SAVE_RETURN_ADDR (regs_ever_live[RETURN_ADDR_REGNUM])
+
+/* Return the bytes needed to compute the frame pointer from the current
+ stack pointer.
+
+ SIZE is the size needed for local variables. */
+
+unsigned int
+arc_compute_frame_size (size)
+ int size; /* # of var. bytes allocated. */
+{
+ int regno;
+ unsigned int total_size, var_size, args_size, pretend_size, extra_size;
+ unsigned int reg_size, reg_offset;
+ unsigned int gmask;
+ enum arc_function_type fn_type;
+ int interrupt_p;
+
+ var_size = size;
+ args_size = current_function_outgoing_args_size;
+ pretend_size = current_function_pretend_args_size;
+ extra_size = FIRST_PARM_OFFSET (0);
+ total_size = extra_size + pretend_size + args_size + var_size;
+ reg_offset = FIRST_PARM_OFFSET(0) + current_function_outgoing_args_size;
+ reg_size = 0;
+ gmask = 0;
+
+ /* See if this is an interrupt handler. Call used registers must be saved
+ for them too. */
+ fn_type = arc_compute_function_type (current_function_decl);
+ interrupt_p = ARC_INTERRUPT_P (fn_type);
+
+ /* Calculate space needed for registers.
+ ??? We ignore the extension registers for now. */
+
+ for (regno = 0; regno <= 31; regno++)
+ {
+ if (MUST_SAVE_REGISTER (regno, interrupt_p))
+ {
+ reg_size += UNITS_PER_WORD;
+ gmask |= 1 << regno;
+ }
+ }
+
+ total_size += reg_size;
+
+ /* If the only space to allocate is the fp/blink save area this is an
+ empty frame. However, if we'll be making a function call we need to
+ allocate a stack frame for our callee's fp/blink save area. */
+ if (total_size == extra_size
+ && !MUST_SAVE_RETURN_ADDR)
+ total_size = extra_size = 0;
+
+ total_size = ARC_STACK_ALIGN (total_size);
+
+ /* Save computed information. */
+ current_frame_info.total_size = total_size;
+ current_frame_info.extra_size = extra_size;
+ current_frame_info.pretend_size = pretend_size;
+ current_frame_info.var_size = var_size;
+ current_frame_info.args_size = args_size;
+ current_frame_info.reg_size = reg_size;
+ current_frame_info.reg_offset = reg_offset;
+ current_frame_info.gmask = gmask;
+ current_frame_info.initialized = reload_completed;
+
+ /* Ok, we're done. */
+ return total_size;
+}
+
+/* Common code to save/restore registers. */
+
+void
+arc_save_restore (file, base_reg, offset, gmask, op)
+ FILE *file;
+ char *base_reg;
+ unsigned int offset;
+ unsigned int gmask;
+ char *op;
+{
+ int regno;
+
+ if (gmask == 0)
+ return;
+
+ for (regno = 0; regno <= 31; regno++)
+ {
+ if ((gmask & (1L << regno)) != 0)
+ {
+ fprintf (file, "\t%s %s,[%s,%d]\n",
+ op, reg_names[regno], base_reg, offset);
+ offset += UNITS_PER_WORD;
+ }
+ }
+}
+
+/* Set up the stack and frame pointer (if desired) for the function. */
+
+void
+arc_output_function_prologue (file, size)
+ FILE *file;
+ int size;
+{
+ char *sp_str = reg_names[STACK_POINTER_REGNUM];
+ char *fp_str = reg_names[FRAME_POINTER_REGNUM];
+ unsigned int gmask = current_frame_info.gmask;
+ enum arc_function_type fn_type = arc_compute_function_type (current_function_decl);
+
+ /* If this is an interrupt handler, set up our stack frame.
+ ??? Optimize later. */
+ if (ARC_INTERRUPT_P (fn_type))
+ {
+ fprintf (file, "\t%s interrupt handler\n",
+ ASM_COMMENT_START);
+ fprintf (file, "\tsub %s,%s,16\n", sp_str, sp_str);
+ }
+
+ /* This is only for the human reader. */
+ fprintf (file, "\t%s BEGIN PROLOGUE %s vars= %d, regs= %d, args= %d, extra= %d\n",
+ ASM_COMMENT_START, ASM_COMMENT_START,
+ current_frame_info.var_size,
+ current_frame_info.reg_size / 4,
+ current_frame_info.args_size,
+ current_frame_info.extra_size);
+
+ size = ARC_STACK_ALIGN (size);
+ size = (! current_frame_info.initialized
+ ? arc_compute_frame_size (size)
+ : current_frame_info.total_size);
+
+ /* These cases shouldn't happen. Catch them now. */
+ if (size == 0 && gmask)
+ abort ();
+
+ /* Allocate space for register arguments if this is a variadic function. */
+ if (current_frame_info.pretend_size != 0)
+ fprintf (file, "\tsub %s,%s,%d\n",
+ sp_str, sp_str, current_frame_info.pretend_size);
+
+ /* The home-grown ABI says link register is saved first. */
+ if (MUST_SAVE_RETURN_ADDR)
+ fprintf (file, "\tst %s,[%s,%d]\n",
+ reg_names[RETURN_ADDR_REGNUM], sp_str, UNITS_PER_WORD);
+
+ /* Set up the previous frame pointer next (if we need to). */
+ if (frame_pointer_needed)
+ {
+ fprintf (file, "\tst %s,[%s]\n", fp_str, sp_str);
+ fprintf (file, "\tmov %s,%s\n", fp_str, sp_str);
+ }
+
+ /* ??? We don't handle the case where the saved regs are more than 252
+ bytes away from sp. This can be handled by decrementing sp once, saving
+ the regs, and then decrementing it again. The epilogue doesn't have this
+ problem as the `ld' insn takes reg+limm values (though it would be more
+ efficient to avoid reg+limm). */
+
+ /* Allocate the stack frame. */
+ if (size - current_frame_info.pretend_size > 0)
+ fprintf (file, "\tsub %s,%s,%d\n",
+ sp_str, sp_str, size - current_frame_info.pretend_size);
+
+ /* Save any needed call-saved regs (and call-used if this is an
+ interrupt handler). */
+ arc_save_restore (file, sp_str, current_frame_info.reg_offset,
+ /* The zeroing of these two bits is unnecessary,
+ but leave this in for clarity. */
+ gmask & ~(FRAME_POINTER_MASK | RETURN_ADDR_MASK),
+ "st");
+
+ fprintf (file, "\t%s END PROLOGUE\n", ASM_COMMENT_START);
+}
+
+/* Do any necessary cleanup after a function to restore stack, frame,
+ and regs. */
+
+void
+arc_output_function_epilogue (file, size)
+ FILE *file;
+ int size;
+{
+ rtx epilogue_delay = current_function_epilogue_delay_list;
+ int noepilogue = FALSE;
+ enum arc_function_type fn_type = arc_compute_function_type (current_function_decl);
+
+ /* This is only for the human reader. */
+ fprintf (file, "\t%s EPILOGUE\n", ASM_COMMENT_START);
+
+ size = ARC_STACK_ALIGN (size);
+ size = (!current_frame_info.initialized
+ ? arc_compute_frame_size (size)
+ : current_frame_info.total_size);
+
+ if (size == 0 && epilogue_delay == 0)
+ {
+ rtx insn = get_last_insn ();
+
+ /* If the last insn was a BARRIER, we don't have to write any code
+ because a jump (aka return) was put there. */
+ if (GET_CODE (insn) == NOTE)
+ insn = prev_nonnote_insn (insn);
+ if (insn && GET_CODE (insn) == BARRIER)
+ noepilogue = TRUE;
+ }
+
+ if (!noepilogue)
+ {
+ unsigned int pretend_size = current_frame_info.pretend_size;
+ unsigned int frame_size = size - pretend_size;
+ int restored, fp_restored_p;
+ int can_trust_sp_p = !current_function_calls_alloca;
+ char *sp_str = reg_names[STACK_POINTER_REGNUM];
+ char *fp_str = reg_names[FRAME_POINTER_REGNUM];
+
+ /* ??? There are lots of optimizations that can be done here.
+ EG: Use fp to restore regs if it's closer.
+ Maybe in time we'll do them all. For now, always restore regs from
+ sp, but don't restore sp if we don't have to. */
+
+ if (!can_trust_sp_p)
+ {
+ if (!frame_pointer_needed)
+ abort ();
+ fprintf (file,"\tsub %s,%s,%d\t\t%s sp not trusted here\n",
+ sp_str, fp_str, frame_size, ASM_COMMENT_START);
+ }
+
+ /* Restore any saved registers. */
+ arc_save_restore (file, sp_str, current_frame_info.reg_offset,
+ /* The zeroing of these two bits is unnecessary,
+ but leave this in for clarity. */
+ current_frame_info.gmask & ~(FRAME_POINTER_MASK | RETURN_ADDR_MASK),
+ "ld");
+
+ if (MUST_SAVE_RETURN_ADDR)
+ fprintf (file, "\tld %s,[%s,%d]\n",
+ reg_names[RETURN_ADDR_REGNUM],
+ frame_pointer_needed ? fp_str : sp_str,
+ UNITS_PER_WORD + (frame_pointer_needed ? 0 : frame_size));
+
+ /* Keep track of how much of the stack pointer we've restored.
+ It makes the following a lot more readable. */
+ restored = 0;
+ fp_restored_p = 0;
+
+ /* We try to emit the epilogue delay slot insn right after the load
+ of the return address register so that it can execute with the
+ stack intact. Secondly, loads are delayed. */
+ /* ??? If stack intactness is important, always emit now. */
+ if (MUST_SAVE_RETURN_ADDR && epilogue_delay != NULL_RTX)
+ {
+ final_scan_insn (XEXP (epilogue_delay, 0), file, 1, -2, 1);
+ epilogue_delay = NULL_RTX;
+ }
+
+ if (frame_pointer_needed)
+ {
+ /* Try to restore the frame pointer in the delay slot. We can't,
+ however, if any of these is true. */
+ if (epilogue_delay != NULL_RTX
+ || !SMALL_INT (frame_size)
+ || pretend_size
+ || ARC_INTERRUPT_P (fn_type))
+ {
+ /* Note that we restore fp and sp here! */
+ fprintf (file, "\tld.a %s,[%s,%d]\n", fp_str, sp_str, frame_size);
+ restored += frame_size;
+ fp_restored_p = 1;
+ }
+ }
+ else if (!SMALL_INT (size /* frame_size + pretend_size */)
+ || ARC_INTERRUPT_P (fn_type))
+ {
+ fprintf (file, "\tadd %s,%s,%d\n", sp_str, sp_str, frame_size);
+ restored += frame_size;
+ }
+
+ /* These must be done before the return insn because the delay slot
+ does the final stack restore. */
+ if (ARC_INTERRUPT_P (fn_type))
+ {
+ if (epilogue_delay)
+ {
+ final_scan_insn (XEXP (epilogue_delay, 0), file, 1, -2, 1);
+ }
+ }
+
+ /* Emit the return instruction. */
+ {
+ static int regs[4] = {
+ 0, RETURN_ADDR_REGNUM, ILINK1_REGNUM, ILINK2_REGNUM
+ };
+ fprintf (file, "\tj.d %s\n", reg_names[regs[fn_type]]);
+ }
+
+ /* If the only register saved is the return address, we need a
+ nop, unless we have an instruction to put into it. Otherwise
+ we don't since reloading multiple registers doesn't reference
+ the register being loaded. */
+
+ if (ARC_INTERRUPT_P (fn_type))
+ fprintf (file, "\tadd %s,%s,16\n", sp_str, sp_str);
+ else if (epilogue_delay != NULL_RTX)
+ {
+ if (frame_pointer_needed && !fp_restored_p)
+ abort ();
+ if (restored < size)
+ abort ();
+ final_scan_insn (XEXP (epilogue_delay, 0), file, 1, -2, 1);
+ }
+ else if (frame_pointer_needed && !fp_restored_p)
+ {
+ if (!SMALL_INT (frame_size))
+ abort ();
+ /* Note that we restore fp and sp here! */
+ fprintf (file, "\tld.a %s,[%s,%d]\n", fp_str, sp_str, frame_size);
+ }
+ else if (restored < size)
+ {
+ if (!SMALL_INT (size - restored))
+ abort ();
+ fprintf (file, "\tadd %s,%s,%d\n",
+ sp_str, sp_str, size - restored);
+ }
+ else
+ fprintf (file, "\tnop\n");
+ }
+
+ /* Reset state info for each function. */
+ current_frame_info = zero_frame_info;
+ arc_compute_function_type (NULL_TREE);
+}
+
+/* Define the number of delay slots needed for the function epilogue.
+
+ Interrupt handlers can't have any epilogue delay slots (it's always needed
+ for something else, I think). For normal functions, we have to worry about
+ using call-saved regs as they'll be restored before the delay slot insn.
+ Functions with non-empty frames already have enough choices for the epilogue
+ delay slot so for now we only consider functions with empty frames. */
+
+int
+arc_delay_slots_for_epilogue ()
+{
+ if (arc_compute_function_type (current_function_decl) != ARC_FUNCTION_NORMAL)
+ return 0;
+ if (!current_frame_info.initialized)
+ (void) arc_compute_frame_size (get_frame_size ());
+ if (current_frame_info.total_size == 0)
+ return 1;
+ return 0;
+}
+
+/* Return true if TRIAL is a valid insn for the epilogue delay slot.
+ Any single length instruction which doesn't reference the stack or frame
+ pointer or any call-saved register is OK. SLOT will always be 0. */
+
+int
+arc_eligible_for_epilogue_delay (trial, slot)
+ rtx trial;
+ int slot;
+{
+ if (slot != 0)
+ abort ();
+
+ if (get_attr_length (trial) == 1
+ /* If registers where saved, presumably there's more than enough
+ possibilities for the delay slot. The alternative is something
+ more complicated (of course, if we expanded the epilogue as rtl
+ this problem would go away). */
+ /* ??? Note that this will always be true since only functions with
+ empty frames have epilogue delay slots. See
+ arc_delay_slots_for_epilogue. */
+ && current_frame_info.gmask == 0
+ && ! reg_mentioned_p (stack_pointer_rtx, PATTERN (trial))
+ && ! reg_mentioned_p (frame_pointer_rtx, PATTERN (trial)))
+ return 1;
+ return 0;
+}
+
+/* PIC */
+
+/* Set up PIC-specific rtl. This should not cause any insns
+ to be emitted. */
+
+void
+arc_initialize_pic ()
+{
+ /* nothing to do */
+}
+
+/* Emit special PIC prologues and epilogues. */
+
+void
+arc_finalize_pic ()
+{
+ /* nothing to do */
+}
+
+/* Return true if OP is a shift operator. */
+
+int
+shift_operator (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ switch (GET_CODE (op))
+ {
+ case ASHIFTRT:
+ case LSHIFTRT:
+ case ASHIFT:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+/* Output the assembler code for doing a shift.
+ We go to a bit of trouble to generate efficient code as the ARC only has
+ single bit shifts. This is taken from the h8300 port. We only have one
+ mode of shifting and can't access individual bytes like the h8300 can, so
+ this is greatly simplified (at the expense of not generating hyper-
+ efficient code).
+
+ This function is not used if the variable shift insns are present. */
+
+/* ??? We assume the output operand is the same as operand 1.
+ This can be optimized (deleted) in the case of 1 bit shifts. */
+/* ??? We use the loop register here. We don't use it elsewhere (yet) and
+ using it here will give us a chance to play with it. */
+
+char *
+output_shift (operands)
+ rtx *operands;
+{
+ static int loopend_lab;
+ rtx shift = operands[3];
+ enum machine_mode mode = GET_MODE (shift);
+ enum rtx_code code = GET_CODE (shift);
+ char *shift_one;
+
+ if (mode != SImode)
+ abort ();
+
+ switch (code)
+ {
+ case ASHIFT: shift_one = "asl %0,%0"; break;
+ case ASHIFTRT: shift_one = "asr %0,%0"; break;
+ case LSHIFTRT: shift_one = "lsr %0,%0"; break;
+ default: abort ();
+ }
+
+ if (GET_CODE (operands[2]) != CONST_INT)
+ {
+ if (optimize)
+ output_asm_insn ("mov lp_count,%2", operands);
+ else
+ output_asm_insn ("mov %4,%2", operands);
+ goto shiftloop;
+ }
+ else
+ {
+ int n = INTVAL (operands[2]);
+
+ /* If the count is negative, make it 0. */
+ if (n < 0)
+ n = 0;
+ /* If the count is too big, truncate it.
+ ANSI says shifts of GET_MODE_BITSIZE are undefined - we choose to
+ do the intuitive thing. */
+ else if (n > GET_MODE_BITSIZE (mode))
+ n = GET_MODE_BITSIZE (mode);
+
+ /* First see if we can do them inline. */
+ if (n <= 8)
+ {
+ while (--n >= 0)
+ output_asm_insn (shift_one, operands);
+ }
+ /* See if we can use a rotate/and. */
+ else if (n == BITS_PER_WORD - 1)
+ {
+ switch (code)
+ {
+ case ASHIFT :
+ output_asm_insn ("and %0,%0,1\n\tror %0,%0", operands);
+ break;
+ case ASHIFTRT :
+ /* The ARC doesn't have a rol insn. Use something else. */
+ output_asm_insn ("asl.f 0,%0\n\tsbc %0,0,0", operands);
+ break;
+ case LSHIFTRT :
+ /* The ARC doesn't have a rol insn. Use something else. */
+ output_asm_insn ("asl.f 0,%0\n\tadc %0,0,0", operands);
+ break;
+ }
+ }
+ /* Must loop. */
+ else
+ {
+ char buf[100];
+
+ if (optimize)
+ output_asm_insn ("mov lp_count,%c2", operands);
+ else
+ output_asm_insn ("mov %4,%c2", operands);
+ shiftloop:
+ if (optimize)
+ {
+ if (flag_pic)
+ sprintf ("lr %%4,[status]\n\tadd %%4,%%4,6\t%s single insn loop start",
+ ASM_COMMENT_START);
+ else
+ sprintf (buf, "mov %%4,%%%%st(1f)\t%s (single insn loop start) >> 2",
+ ASM_COMMENT_START);
+ output_asm_insn (buf, operands);
+ output_asm_insn ("sr %4,[lp_start]", operands);
+ output_asm_insn ("add %4,%4,1", operands);
+ output_asm_insn ("sr %4,[lp_end]", operands);
+ output_asm_insn ("nop\n\tnop", operands);
+ if (flag_pic)
+ asm_fprintf (asm_out_file, "\t%s single insn loop\n",
+ ASM_COMMENT_START);
+ else
+ asm_fprintf (asm_out_file, "1:\t%s single insn loop\n",
+ ASM_COMMENT_START);
+ output_asm_insn (shift_one, operands);
+ }
+ else
+ {
+ asm_fprintf (asm_out_file, "1:\t%s begin shift loop\n",
+ ASM_COMMENT_START);
+ output_asm_insn ("sub.f %4,%4,1", operands);
+ output_asm_insn ("nop", operands);
+ output_asm_insn ("bn.nd 2f", operands);
+ output_asm_insn (shift_one, operands);
+ output_asm_insn ("b.nd 1b", operands);
+ asm_fprintf (asm_out_file, "2:\t%s end shift loop\n",
+ ASM_COMMENT_START);
+ }
+ }
+ }
+
+ return "";
+}
+
+/* Nested function support. */
+
+/* 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
+arc_initialize_trampoline (tramp, fnaddr, cxt)
+ rtx tramp, fnaddr, cxt;
+{
+}
+
+/* Set the cpu type and print out other fancy things,
+ at the top of the file. */
+
+void
+arc_asm_file_start (file)
+ FILE *file;
+{
+ fprintf (file, "\t.cpu %s\n", arc_cpu_string);
+}
+
+/* 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. */
+
+void
+arc_print_operand (file, x, code)
+ FILE *file;
+ rtx x;
+ int code;
+{
+ switch (code)
+ {
+ case '#' :
+ /* Conditional branches. For now these are equivalent. */
+ case '*' :
+ /* Unconditional branches. Output the appropriate delay slot suffix. */
+ if (!final_sequence || XVECLEN (final_sequence, 0) == 1)
+ {
+ /* There's nothing in the delay slot. */
+ fputs (".nd", file);
+ }
+ else
+ {
+ rtx jump = XVECEXP (final_sequence, 0, 0);
+ rtx delay = XVECEXP (final_sequence, 0, 1);
+ if (INSN_ANNULLED_BRANCH_P (jump))
+ fputs (INSN_FROM_TARGET_P (delay) ? ".jd" : ".nd", file);
+ else
+ fputs (".d", file);
+ }
+ return;
+ case '?' : /* with leading "." */
+ case '!' : /* without leading "." */
+ /* This insn can be conditionally executed. See if the ccfsm machinery
+ says it should be conditionalized. */
+ if (arc_ccfsm_state == 3 || arc_ccfsm_state == 4)
+ {
+ /* Is this insn in a delay slot? */
+ if (final_sequence && XVECLEN (final_sequence, 0) == 2)
+ {
+ rtx insn = XVECEXP (final_sequence, 0, 1);
+
+ /* If the insn is annulled and is from the target path, we need
+ to inverse the condition test. */
+ if (INSN_ANNULLED_BRANCH_P (insn))
+ {
+ if (INSN_FROM_TARGET_P (insn))
+ fprintf (file, "%s%s",
+ code == '?' ? "." : "",
+ arc_condition_codes[ARC_INVERSE_CONDITION_CODE (arc_ccfsm_current_cc)]);
+ else
+ fprintf (file, "%s%s",
+ code == '?' ? "." : "",
+ arc_condition_codes[arc_ccfsm_current_cc]);
+ }
+ else
+ /* This insn is executed for either path, so don't
+ conditionalize it at all. */
+ ; /* nothing to do */
+ }
+ else
+ {
+ /* This insn isn't in a delay slot. */
+ fprintf (file, "%s%s",
+ code == '?' ? "." : "",
+ arc_condition_codes[arc_ccfsm_current_cc]);
+ }
+ }
+ return;
+ case '~' :
+ /* Output a nop if we're between a set of the condition codes,
+ and a conditional branch. */
+ if (last_insn_set_cc_p)
+ fputs ("nop\n\t", file);
+ return;
+ case 'd' :
+ fputs (arc_condition_codes[get_arc_condition_code (x)], file);
+ return;
+ case 'D' :
+ fputs (arc_condition_codes[ARC_INVERSE_CONDITION_CODE
+ (get_arc_condition_code (x))],
+ file);
+ return;
+ case 'R' :
+ /* Write second word of DImode or DFmode reference,
+ register or memory. */
+ if (GET_CODE (x) == REG)
+ fputs (reg_names[REGNO (x)+1], file);
+ else if (GET_CODE (x) == MEM)
+ {
+ fputc ('[', file);
+ /* Handle possible auto-increment. Since it is pre-increment and
+ we have already done it, we can just use an offset of four. */
+ /* ??? This is taken from rs6000.c I think. I don't think it is
+ currently necessary, but keep it around. */
+ if (GET_CODE (XEXP (x, 0)) == PRE_INC
+ || GET_CODE (XEXP (x, 0)) == PRE_DEC)
+ output_address (plus_constant (XEXP (XEXP (x, 0), 0), 4));
+ else
+ output_address (plus_constant (XEXP (x, 0), 4));
+ fputc (']', file);
+ }
+ else
+ output_operand_lossage ("invalid operand to %R code");
+ return;
+ case 'S' :
+ if ((GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_FLAG (x))
+ || GET_CODE (x) == LABEL_REF)
+ {
+ fprintf (file, "%%st(");
+ output_addr_const (file, x);
+ fprintf (file, ")");
+ return;
+ }
+ break;
+ case 'H' :
+ case 'L' :
+ if (GET_CODE (x) == REG)
+ {
+ /* L = least significant word, H = most significant word */
+ if ((TARGET_BIG_ENDIAN != 0) ^ (code == 'L'))
+ fputs (reg_names[REGNO (x)], file);
+ else
+ fputs (reg_names[REGNO (x)+1], file);
+ }
+ else if (GET_CODE (x) == CONST_INT
+ || GET_CODE (x) == CONST_DOUBLE)
+ {
+ rtx first, second;
+
+ split_double (x, &first, &second);
+ fprintf (file, "0x%08lx",
+ code == 'L' ? INTVAL (first) : INTVAL (second));
+ }
+ else
+ output_operand_lossage ("invalid operand to %H/%L code");
+ return;
+ case 'A' :
+ {
+ REAL_VALUE_TYPE d;
+ char str[30];
+
+ if (GET_CODE (x) != CONST_DOUBLE
+ || GET_MODE_CLASS (GET_MODE (x)) != MODE_FLOAT)
+ abort ();
+ REAL_VALUE_FROM_CONST_DOUBLE (d, x);
+ REAL_VALUE_TO_DECIMAL (d, "%.20e", str);
+ fprintf (file, "%s", str);
+ return;
+ }
+ case 'U' :
+ /* Output a load/store with update indicator if appropriate. */
+ if (GET_CODE (x) == MEM)
+ {
+ if (GET_CODE (XEXP (x, 0)) == PRE_INC
+ || GET_CODE (XEXP (x, 0)) == PRE_DEC)
+ fputs (".a", file);
+ }
+ else
+ output_operand_lossage ("invalid operand to %U code");
+ return;
+ case 'V' :
+ /* Output cache bypass indicator for a load/store insn. Volatile memory
+ refs are defined to use the cache bypass mechanism. */
+ if (GET_CODE (x) == MEM)
+ {
+ if (MEM_VOLATILE_P (x))
+ fputs (".di", file);
+ }
+ else
+ output_operand_lossage ("invalid operand to %V code");
+ return;
+ case 0 :
+ /* Do nothing special. */
+ break;
+ default :
+ /* Unknown flag. */
+ output_operand_lossage ("invalid operand output code");
+ }
+
+ switch (GET_CODE (x))
+ {
+ case REG :
+ fputs (reg_names[REGNO (x)], file);
+ break;
+ case MEM :
+ fputc ('[', file);
+ if (GET_CODE (XEXP (x, 0)) == PRE_INC)
+ output_address (plus_constant (XEXP (XEXP (x, 0), 0),
+ GET_MODE_SIZE (GET_MODE (x))));
+ else if (GET_CODE (XEXP (x, 0)) == PRE_DEC)
+ output_address (plus_constant (XEXP (XEXP (x, 0), 0),
+ - GET_MODE_SIZE (GET_MODE (x))));
+ else
+ output_address (XEXP (x, 0));
+ fputc (']', file);
+ break;
+ case CONST_DOUBLE :
+ /* We handle SFmode constants here as output_addr_const doesn't. */
+ if (GET_MODE (x) == SFmode)
+ {
+ REAL_VALUE_TYPE d;
+ long l;
+
+ REAL_VALUE_FROM_CONST_DOUBLE (d, x);
+ REAL_VALUE_TO_TARGET_SINGLE (d, l);
+ fprintf (file, "0x%08lx", l);
+ break;
+ }
+ /* Fall through. Let output_addr_const deal with it. */
+ default :
+ output_addr_const (file, x);
+ break;
+ }
+}
+
+/* Print a memory address as an operand to reference that memory location. */
+
+void
+arc_print_operand_address (file, addr)
+ FILE *file;
+ rtx addr;
+{
+ register rtx base, index = 0;
+ int offset = 0;
+
+ switch (GET_CODE (addr))
+ {
+ case REG :
+ fputs (reg_names[REGNO (addr)], file);
+ break;
+ case SYMBOL_REF :
+ if (/*???*/ 0 && SYMBOL_REF_FLAG (addr))
+ {
+ fprintf (file, "%%st(");
+ output_addr_const (file, addr);
+ fprintf (file, ")");
+ }
+ else
+ output_addr_const (file, addr);
+ break;
+ case PLUS :
+ if (GET_CODE (XEXP (addr, 0)) == CONST_INT)
+ offset = INTVAL (XEXP (addr, 0)), base = XEXP (addr, 1);
+ else if (GET_CODE (XEXP (addr, 1)) == CONST_INT)
+ offset = INTVAL (XEXP (addr, 1)), base = XEXP (addr, 0);
+ else
+ base = XEXP (addr, 0), index = XEXP (addr, 1);
+ if (GET_CODE (base) != REG)
+ abort ();
+ fputs (reg_names[REGNO (base)], file);
+ if (index == 0)
+ {
+ if (offset != 0)
+ fprintf (file, ",%d", offset);
+ }
+ else if (GET_CODE (index) == REG)
+ fprintf (file, ",%s", reg_names[REGNO (index)]);
+ else if (GET_CODE (index) == SYMBOL_REF)
+ fputc (',', file), output_addr_const (file, index);
+ else
+ abort ();
+ break;
+ case PRE_INC :
+ case PRE_DEC :
+ /* We shouldn't get here as we've lost the mode of the memory object
+ (which says how much to inc/dec by. */
+ abort ();
+ break;
+ default :
+ output_addr_const (file, addr);
+ break;
+ }
+}
+
+/* Update compare/branch separation marker. */
+
+static void
+record_cc_ref (insn)
+ rtx insn;
+{
+ last_insn_set_cc_p = current_insn_set_cc_p;
+
+ switch (get_attr_cond (insn))
+ {
+ case COND_SET :
+ case COND_SET_ZN :
+ case COND_SET_ZNC :
+ if (get_attr_length (insn) == 1)
+ current_insn_set_cc_p = 1;
+ else
+ current_insn_set_cc_p = 0;
+ break;
+ default :
+ current_insn_set_cc_p = 0;
+ break;
+ }
+}
+
+/* Conditional execution support.
+
+ This is based on the ARM port but for now is much simpler.
+
+ A finite state machine takes care of noticing whether or not instructions
+ can be conditionally executed, and thus decrease execution time and code
+ size by deleting branch instructions. The fsm is controlled by
+ final_prescan_insn, and controls the actions of PRINT_OPERAND. The patterns
+ in the .md file for the branch insns also have a hand in this. */
+
+/* The state of the fsm controlling condition codes are:
+ 0: normal, do nothing special
+ 1: don't output this insn
+ 2: don't output this insn
+ 3: make insns conditional
+ 4: make insns conditional
+
+ State transitions (state->state by whom, under what condition):
+ 0 -> 1 final_prescan_insn, if insn is conditional branch
+ 0 -> 2 final_prescan_insn, if the `target' is an unconditional branch
+ 1 -> 3 branch patterns, after having not output the conditional branch
+ 2 -> 4 branch patterns, after having not output the conditional branch
+ 3 -> 0 ASM_OUTPUT_INTERNAL_LABEL, if the `target' label is reached
+ (the target label has CODE_LABEL_NUMBER equal to
+ arc_ccfsm_target_label).
+ 4 -> 0 final_prescan_insn, if `target' unconditional branch is reached
+
+ If the jump clobbers the conditions then we use states 2 and 4.
+
+ A similar thing can be done with conditional return insns.
+
+ We also handle separating branches from sets of the condition code.
+ This is done here because knowledge of the ccfsm state is required,
+ we may not be outputting the branch. */
+
+void
+arc_final_prescan_insn (insn, opvec, noperands)
+ rtx insn;
+ rtx *opvec;
+ int noperands;
+{
+ /* BODY will hold the body of INSN. */
+ register rtx body = PATTERN (insn);
+
+ /* This will be 1 if trying to repeat the trick (ie: do the `else' part of
+ an if/then/else), and things need to be reversed. */
+ int reverse = 0;
+
+ /* If we start with a return insn, we only succeed if we find another one. */
+ int seeking_return = 0;
+
+ /* START_INSN will hold the insn from where we start looking. This is the
+ first insn after the following code_label if REVERSE is true. */
+ rtx start_insn = insn;
+
+ /* Update compare/branch separation marker. */
+ record_cc_ref (insn);
+
+ /* Allow -mdebug-ccfsm to turn this off so we can see how well it does.
+ We can't do this in macro FINAL_PRESCAN_INSN because it's called from
+ final_scan_insn which has `optimize' as a local. */
+ if (optimize < 2 || TARGET_NO_COND_EXEC)
+ return;
+
+ /* If in state 4, check if the target branch is reached, in order to
+ change back to state 0. */
+ if (arc_ccfsm_state == 4)
+ {
+ if (insn == arc_ccfsm_target_insn)
+ {
+ arc_ccfsm_target_insn = NULL;
+ arc_ccfsm_state = 0;
+ }
+ return;
+ }
+
+ /* If in state 3, it is possible to repeat the trick, if this insn is an
+ unconditional branch to a label, and immediately following this branch
+ is the previous target label which is only used once, and the label this
+ branch jumps to is not too far off. Or in other words "we've done the
+ `then' part, see if we can do the `else' part." */
+ if (arc_ccfsm_state == 3)
+ {
+ if (simplejump_p (insn))
+ {
+ start_insn = next_nonnote_insn (start_insn);
+ if (GET_CODE (start_insn) == BARRIER)
+ {
+ /* ??? Isn't this always a barrier? */
+ start_insn = next_nonnote_insn (start_insn);
+ }
+ if (GET_CODE (start_insn) == CODE_LABEL
+ && CODE_LABEL_NUMBER (start_insn) == arc_ccfsm_target_label
+ && LABEL_NUSES (start_insn) == 1)
+ reverse = TRUE;
+ else
+ return;
+ }
+ else if (GET_CODE (body) == RETURN)
+ {
+ start_insn = next_nonnote_insn (start_insn);
+ if (GET_CODE (start_insn) == BARRIER)
+ start_insn = next_nonnote_insn (start_insn);
+ if (GET_CODE (start_insn) == CODE_LABEL
+ && CODE_LABEL_NUMBER (start_insn) == arc_ccfsm_target_label
+ && LABEL_NUSES (start_insn) == 1)
+ {
+ reverse = TRUE;
+ seeking_return = 1;
+ }
+ else
+ return;
+ }
+ else
+ return;
+ }
+
+ if (GET_CODE (insn) != JUMP_INSN)
+ return;
+
+ /* This jump might be paralleled with a clobber of the condition codes,
+ the jump should always come first. */
+ if (GET_CODE (body) == PARALLEL && XVECLEN (body, 0) > 0)
+ body = XVECEXP (body, 0, 0);
+
+ if (reverse
+ || (GET_CODE (body) == SET && GET_CODE (SET_DEST (body)) == PC
+ && GET_CODE (SET_SRC (body)) == IF_THEN_ELSE))
+ {
+ int insns_skipped = 0, fail = FALSE, succeed = FALSE;
+ /* Flag which part of the IF_THEN_ELSE is the LABEL_REF. */
+ int then_not_else = TRUE;
+ /* Nonzero if next insn must be the target label. */
+ int next_must_be_target_label_p;
+ rtx this_insn = start_insn, label = 0;
+
+ /* Register the insn jumped to. */
+ if (reverse)
+ {
+ if (!seeking_return)
+ label = XEXP (SET_SRC (body), 0);
+ }
+ else if (GET_CODE (XEXP (SET_SRC (body), 1)) == LABEL_REF)
+ label = XEXP (XEXP (SET_SRC (body), 1), 0);
+ else if (GET_CODE (XEXP (SET_SRC (body), 2)) == LABEL_REF)
+ {
+ label = XEXP (XEXP (SET_SRC (body), 2), 0);
+ then_not_else = FALSE;
+ }
+ else if (GET_CODE (XEXP (SET_SRC (body), 1)) == RETURN)
+ seeking_return = 1;
+ else if (GET_CODE (XEXP (SET_SRC (body), 2)) == RETURN)
+ {
+ seeking_return = 1;
+ then_not_else = FALSE;
+ }
+ else
+ abort ();
+
+ /* See how many insns this branch skips, and what kind of insns. If all
+ insns are okay, and the label or unconditional branch to the same
+ label is not too far away, succeed. */
+ for (insns_skipped = 0, next_must_be_target_label_p = FALSE;
+ !fail && !succeed && insns_skipped < MAX_INSNS_SKIPPED;
+ insns_skipped++)
+ {
+ rtx scanbody;
+
+ this_insn = next_nonnote_insn (this_insn);
+ if (!this_insn)
+ break;
+
+ if (next_must_be_target_label_p)
+ {
+ if (GET_CODE (this_insn) == BARRIER)
+ continue;
+ if (GET_CODE (this_insn) == CODE_LABEL
+ && this_insn == label)
+ {
+ arc_ccfsm_state = 1;
+ succeed = TRUE;
+ }
+ else
+ fail = TRUE;
+ break;
+ }
+
+ scanbody = PATTERN (this_insn);
+
+ switch (GET_CODE (this_insn))
+ {
+ case CODE_LABEL:
+ /* Succeed if it is the target label, otherwise fail since
+ control falls in from somewhere else. */
+ if (this_insn == label)
+ {
+ arc_ccfsm_state = 1;
+ succeed = TRUE;
+ }
+ else
+ fail = TRUE;
+ break;
+
+ case BARRIER:
+ /* Succeed if the following insn is the target label.
+ Otherwise fail.
+ If return insns are used then the last insn in a function
+ will be a barrier. */
+ next_must_be_target_label_p = TRUE;
+ break;
+
+ case CALL_INSN:
+ /* Can handle a call insn if there are no insns after it.
+ IE: The next "insn" is the target label. We don't have to
+ worry about delay slots as such insns are SEQUENCE's inside
+ INSN's. ??? It is possible to handle such insns though. */
+ if (get_attr_cond (this_insn) == COND_CANUSE)
+ next_must_be_target_label_p = TRUE;
+ else
+ fail = TRUE;
+ break;
+
+ case JUMP_INSN:
+ /* If this is an unconditional branch to the same label, succeed.
+ If it is to another label, do nothing. If it is conditional,
+ fail. */
+ /* ??? Probably, the test for the SET and the PC are unnecessary. */
+
+ if (GET_CODE (scanbody) == SET
+ && GET_CODE (SET_DEST (scanbody)) == PC)
+ {
+ if (GET_CODE (SET_SRC (scanbody)) == LABEL_REF
+ && XEXP (SET_SRC (scanbody), 0) == label && !reverse)
+ {
+ arc_ccfsm_state = 2;
+ succeed = TRUE;
+ }
+ else if (GET_CODE (SET_SRC (scanbody)) == IF_THEN_ELSE)
+ fail = TRUE;
+ }
+ else if (GET_CODE (scanbody) == RETURN
+ && seeking_return)
+ {
+ arc_ccfsm_state = 2;
+ succeed = TRUE;
+ }
+ else if (GET_CODE (scanbody) == PARALLEL)
+ {
+ if (get_attr_cond (this_insn) != COND_CANUSE)
+ fail = TRUE;
+ }
+ break;
+
+ case INSN:
+ /* We can only do this with insns that can use the condition
+ codes (and don't set them). */
+ if (GET_CODE (scanbody) == SET
+ || GET_CODE (scanbody) == PARALLEL)
+ {
+ if (get_attr_cond (this_insn) != COND_CANUSE)
+ fail = TRUE;
+ }
+ /* We can't handle other insns like sequences. */
+ else
+ fail = TRUE;
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ if (succeed)
+ {
+ if ((!seeking_return) && (arc_ccfsm_state == 1 || reverse))
+ arc_ccfsm_target_label = CODE_LABEL_NUMBER (label);
+ else if (seeking_return || arc_ccfsm_state == 2)
+ {
+ while (this_insn && GET_CODE (PATTERN (this_insn)) == USE)
+ {
+ this_insn = next_nonnote_insn (this_insn);
+ if (this_insn && (GET_CODE (this_insn) == BARRIER
+ || GET_CODE (this_insn) == CODE_LABEL))
+ abort ();
+ }
+ if (!this_insn)
+ {
+ /* Oh dear! we ran off the end, give up. */
+ insn_extract (insn);
+ arc_ccfsm_state = 0;
+ arc_ccfsm_target_insn = NULL;
+ return;
+ }
+ arc_ccfsm_target_insn = this_insn;
+ }
+ else
+ abort ();
+
+ /* If REVERSE is true, ARM_CURRENT_CC needs to be inverted from
+ what it was. */
+ if (!reverse)
+ arc_ccfsm_current_cc = get_arc_condition_code (XEXP (SET_SRC (body),
+ 0));
+
+ if (reverse || then_not_else)
+ arc_ccfsm_current_cc = ARC_INVERSE_CONDITION_CODE (arc_ccfsm_current_cc);
+ }
+
+ /* Restore recog_operand. Getting the attributes of other insns can
+ destroy this array, but final.c assumes that it remains intact
+ across this call; since the insn has been recognized already we
+ call insn_extract direct. */
+ insn_extract (insn);
+ }
+}
+
+/* Record that we are currently outputting label NUM with prefix PREFIX.
+ It it's the label we're looking for, reset the ccfsm machinery.
+
+ Called from ASM_OUTPUT_INTERNAL_LABEL. */
+
+void
+arc_ccfsm_at_label (prefix, num)
+ char *prefix;
+ int num;
+{
+ if (arc_ccfsm_state == 3 && arc_ccfsm_target_label == num
+ && !strcmp (prefix, "L"))
+ {
+ arc_ccfsm_state = 0;
+ arc_ccfsm_target_insn = NULL_RTX;
+ }
+}
+
+/* See if the current insn, which is a conditional branch, is to be
+ deleted. */
+
+int
+arc_ccfsm_branch_deleted_p ()
+{
+ if (arc_ccfsm_state == 1 || arc_ccfsm_state == 2)
+ return 1;
+ return 0;
+}
+
+/* Record a branch isn't output because subsequent insns can be
+ conditionalized. */
+
+void
+arc_ccfsm_record_branch_deleted ()
+{
+ /* Indicate we're conditionalizing insns now. */
+ arc_ccfsm_state += 2;
+
+ /* If the next insn is a subroutine call, we still need a nop between the
+ cc setter and user. We need to undo the effect of calling record_cc_ref
+ for the just deleted branch. */
+ current_insn_set_cc_p = last_insn_set_cc_p;
+}
diff --git a/gcc/config/arc/arc.h b/gcc/config/arc/arc.h
new file mode 100644
index 00000000000..4257efaee3b
--- /dev/null
+++ b/gcc/config/arc/arc.h
@@ -0,0 +1,1643 @@
+/* Definitions of target machine for GNU compiler, Argonaut ARC cpu.
+ Copyright (C) 1994, 1995, 1997 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.
+
+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. */
+
+/* ??? This is an old port, and is undoubtedly suffering from bit rot. */
+
+/* Things to do:
+
+ - PREDICATE_CODES
+ - incscc, decscc?
+ - print active compiler options in assembler output
+*/
+
+/* ??? Create elf.h and have svr4.h include it. */
+#include "svr4.h"
+
+#undef ASM_SPEC
+#undef LINK_SPEC
+#undef STARTFILE_SPEC
+#undef ENDFILE_SPEC
+#undef SIZE_TYPE
+#undef PTRDIFF_TYPE
+#undef WCHAR_TYPE
+#undef WCHAR_TYPE_SIZE
+
+/* Print subsidiary information on the compiler version in use. */
+#define TARGET_VERSION fprintf (stderr, " (arc)")
+
+/* Names to predefine in the preprocessor for this target machine. */
+#define CPP_PREDEFINES "-Acpu(arc) -Amachine(arc) -D__arc__"
+
+/* Additional flags for the preprocessor. */
+#define CPP_SPEC "\
+%{!mcpu=*:-D__base__} %{mcpu=base:-D__base__} \
+%{EB:-D__big_endian__} \
+"
+
+/* Pass -mmangle-cpu if we get -mcpu=*.
+ Doing it this way lets one have it on as default with -mcpu=*,
+ but also lets one turn it off with -mno-mangle-cpu. */
+#define CC1_SPEC "\
+%{mcpu=*:-mmangle-cpu} \
+%{EB:%{EL:%emay not use both -EB and -EL}} \
+%{EB:-mbig-endian} %{EL:-mlittle-endian} \
+"
+
+#define ASM_SPEC "%{v} %{EB} %{EL}"
+
+#define LINK_SPEC "%{v} %{EB} %{EL}"
+
+#define STARTFILE_SPEC "%{!shared:crt0.o%s} crtinit.o%s"
+
+#define ENDFILE_SPEC "crtfini.o%s"
+
+/* Run-time compilation parameters selecting different hardware subsets. */
+
+extern int target_flags;
+
+/* Mangle all user symbols for the specified cpu.
+ ARC's can be shipped in which a collection of cpus are coupled together.
+ Each CPU may be different in some way, and thus we may need to distinguish
+ code compiled for one to ensure it isn't linked with code compiled for
+ another. */
+#define TARGET_MASK_MANGLE_CPU 1
+#define TARGET_MANGLE_CPU (target_flags & TARGET_MASK_MANGLE_CPU)
+
+#if 0
+/* Mangle libgcc symbols by adding a suffix for the specified cpu. */
+#define TARGET_MASK_MANGLE_CPU_LIBGCC 2
+#define TARGET_MANGLE_CPU_LIBGCC (target_flags & TARGET_MASK_MANGLE_CPU_LIBGCC)
+#endif
+
+/* Align loops to 32 byte boundaries (cache line size). */
+#define TARGET_MASK_ALIGN_LOOPS 4
+#define TARGET_ALIGN_LOOPS (target_flags & TARGET_MASK_ALIGN_LOOPS)
+
+/* Big Endian. */
+#define TARGET_MASK_BIG_ENDIAN 8
+#define TARGET_BIG_ENDIAN (target_flags & TARGET_MASK_BIG_ENDIAN)
+
+/* Turn off conditional execution optimization,
+ so we can see how well it does, or in case it's buggy. */
+#define TARGET_MASK_NO_COND_EXEC 0x10
+#define TARGET_NO_COND_EXEC (target_flags & TARGET_MASK_NO_COND_EXEC)
+
+/* 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 \
+{ \
+ { "mangle-cpu", TARGET_MASK_MANGLE_CPU }, \
+ { "no-mangle-cpu", -TARGET_MASK_MANGLE_CPU }, \
+/* { "mangle-cpu-libgcc", TARGET_MASK_MANGLE_CPU_LIBGCC }, */ \
+/* { "no-mangle-cpu-libgcc", -TARGET_MASK_MANGLE_CPU_LIBGCC }, */ \
+ { "align-loops", TARGET_MASK_ALIGN_LOOPS }, \
+ { "no-align-loops", -TARGET_MASK_ALIGN_LOOPS }, \
+ { "big-endian", TARGET_MASK_BIG_ENDIAN }, \
+ { "little-endian", -TARGET_MASK_BIG_ENDIAN }, \
+ { "no-cond-exec", TARGET_MASK_NO_COND_EXEC }, \
+ SUBTARGET_SWITCHES \
+ { "", TARGET_DEFAULT } \
+}
+
+#define TARGET_DEFAULT (0)
+
+#define SUBTARGET_SWITCHES
+
+/* Instruction set characteristics.
+ These are internal macros, set by the appropriate -mcpu= option. */
+
+/* Non-zero means the cpu has a barrel shifter. */
+#define TARGET_SHIFTER 0
+
+/* This macro is similar to `TARGET_SWITCHES' but defines names of
+ command options that have values. Its definition is an
+ initializer with a subgrouping for each command option.
+
+ Each subgrouping contains a string constant, that defines the
+ fixed part of the option name, and the address of a variable.
+ The variable, type `char *', is set to the variable part of the
+ given option if the fixed part matches. The actual option name
+ is made by appending `-m' to the specified name.
+
+ Here is an example which defines `-mshort-data-NUMBER'. If the
+ given option is `-mshort-data-512', the variable `m88k_short_data'
+ will be set to the string `"512"'.
+
+ extern char *m88k_short_data;
+ #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } */
+
+extern char *arc_cpu_string;
+extern char *arc_text_string,*arc_data_string,*arc_rodata_string;
+
+#define TARGET_OPTIONS \
+{ \
+ { "cpu=", &arc_cpu_string }, \
+ { "text=", &arc_text_string }, \
+ { "data=", &arc_data_string }, \
+ { "rodata=", &arc_rodata_string }, \
+}
+
+/* Which cpu we're compiling for. */
+extern int arc_cpu_type;
+
+/* Check if CPU is an extension and set `arc_cpu_type' and `arc_mangle_cpu'
+ appropriately. The result should be non-zero if the cpu is recognized,
+ otherwise zero. This is intended to be redefined in a cover file.
+ This is used by arc_init. */
+#define ARC_EXTENSION_CPU(cpu) 0
+
+/* Sometimes certain combinations of command options do not make
+ sense on a particular target machine. You can define a macro
+ `OVERRIDE_OPTIONS' to take account of this. This macro, if
+ defined, is executed once just after all the command options have
+ been parsed.
+
+ Don't use this macro to turn on various extra optimizations for
+ `-O'. That is what `OPTIMIZATION_OPTIONS' is for. */
+
+extern void arc_init ();
+
+#define OVERRIDE_OPTIONS \
+do { \
+ /* These need to be done at start up. It's convenient to do them here. */ \
+ arc_init (); \
+} while (0)
+
+/* Target machine storage layout. */
+
+/* Define to use software floating point emulator for REAL_ARITHMETIC and
+ decimal <-> binary conversion. */
+#define REAL_ARITHMETIC
+
+/* 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 (TARGET_BIG_ENDIAN)
+
+/* Define this if most significant word of a multiword number is the lowest
+ numbered. */
+#define WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN)
+
+/* Define this to set the endianness to use in libgcc2.c, which can
+ not depend on target_flags. */
+#ifdef __big_endian__
+#define LIBGCC2_WORDS_BIG_ENDIAN 1
+#else
+#define LIBGCC2_WORDS_BIG_ENDIAN 0
+#endif
+
+/* 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.
+ Note that this is not necessarily the width of data type `int';
+ if using 16-bit ints on a 68000, this would still be 32.
+ But on a machine with 16-bit registers, this would be 16. */
+#define BITS_PER_WORD 32
+
+/* Width of a word, in units (bytes). */
+#define UNITS_PER_WORD 4
+
+/* 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 (GET_MODE_CLASS (MODE) == MODE_INT \
+ && GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \
+{ \
+ (MODE) = SImode; \
+}
+
+/* Define this macro if the promotion described by `PROMOTE_MODE'
+ should also be done for outgoing function arguments. */
+#define PROMOTE_FUNCTION_ARGS
+
+/* Likewise, if the function return value is promoted. */
+#define PROMOTE_FUNCTION_RETURN
+
+/* Width in bits of a pointer.
+ See also the macro `Pmode' defined below. */
+#define POINTER_SIZE 32
+
+/* Allocation boundary (in *bits*) for storing arguments in argument list. */
+#define PARM_BOUNDARY 32
+
+/* Boundary (in *bits*) on which stack pointer should be aligned. */
+#define STACK_BOUNDARY 64
+
+/* ALIGN FRAMES on word boundaries */
+#define ARC_STACK_ALIGN(LOC) (((LOC)+7) & ~7)
+
+/* Allocation boundary (in *bits*) for the code of a function. */
+#define FUNCTION_BOUNDARY 32
+
+/* Alignment of field after `int : 0' in a structure. */
+#define EMPTY_FIELD_BOUNDARY 32
+
+/* Every structure's size must be a multiple of this. */
+#define STRUCTURE_SIZE_BOUNDARY 8
+
+/* A bitfield declared as `int' forces `int' alignment for the struct. */
+#define PCC_BITFIELD_TYPE_MATTERS 1
+
+/* No data type wants to be aligned rounder than this. */
+/* This is bigger than currently necessary for the ARC. If 8 byte floats are
+ ever added it's not clear whether they'll need such alignment or not. For
+ now we assume they will. We can always relax it if necessary but the
+ reverse isn't true. */
+#define BIGGEST_ALIGNMENT 64
+
+/* The best alignment to use in cases where we have a choice. */
+#define FASTEST_ALIGNMENT 32
+
+/* Make strings word-aligned so strcpy from constants will be faster. */
+#define CONSTANT_ALIGNMENT(EXP, ALIGN) \
+ ((TREE_CODE (EXP) == STRING_CST \
+ && (ALIGN) < FASTEST_ALIGNMENT) \
+ ? FASTEST_ALIGNMENT : (ALIGN))
+
+/* Make arrays of chars word-aligned for the same reasons. */
+#define DATA_ALIGNMENT(TYPE, ALIGN) \
+ (TREE_CODE (TYPE) == ARRAY_TYPE \
+ && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \
+ && (ALIGN) < FASTEST_ALIGNMENT ? FASTEST_ALIGNMENT : (ALIGN))
+
+/* Set this nonzero if move instructions will actually fail to work
+ when given unaligned data. */
+/* On the ARC the lower address bits are masked to 0 as necessary. The chip
+ won't croak when given an unaligned address, but the insn will still fail
+ to produce the correct result. */
+#define STRICT_ALIGNMENT 1
+
+/* Layout of source language data types. */
+
+#define SHORT_TYPE_SIZE 16
+#define INT_TYPE_SIZE 32
+#define LONG_TYPE_SIZE 32
+#define LONG_LONG_TYPE_SIZE 64
+#define FLOAT_TYPE_SIZE 32
+#define DOUBLE_TYPE_SIZE 64
+#define LONG_DOUBLE_TYPE_SIZE 64
+
+/* Define this as 1 if `char' should by default be signed; else as 0. */
+#define DEFAULT_SIGNED_CHAR 1
+
+#define SIZE_TYPE "long unsigned int"
+#define PTRDIFF_TYPE "long int"
+#define WCHAR_TYPE "short unsigned int"
+#define WCHAR_TYPE_SIZE 16
+
+/* Define results of standard character escape sequences. */
+#define TARGET_BELL 007
+#define TARGET_BS 010
+#define TARGET_TAB 011
+#define TARGET_NEWLINE 012
+#define TARGET_VT 013
+#define TARGET_FF 014
+#define TARGET_CR 015
+
+/* Standard register usage. */
+
+/* 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. */
+/* Registers 61, 62, and 63 are not really registers and we needn't treat
+ them as such. We still need a register for the condition code. */
+#define FIRST_PSEUDO_REGISTER 62
+
+/* 1 for registers that have pervasive standard uses
+ and are not available for the register allocator.
+
+ 0-28 - general purpose registers
+ 29 - ilink1 (interrupt link register)
+ 30 - ilink2 (interrupt link register)
+ 31 - blink (branch link register)
+ 32-59 - reserved for extensions
+ 60 - LP_COUNT
+ 61 - condition code
+
+ For doc purposes:
+ 61 - short immediate data indicator (setting flags)
+ 62 - long immediate data indicator
+ 63 - short immediate data indicator (not setting flags).
+
+ The general purpose registers are further broken down into:
+ 0-7 - arguments/results
+ 8-15 - call used
+ 16-23 - call saved
+ 24 - call used, static chain pointer
+ 25 - call used, gptmp
+ 26 - global pointer
+ 27 - frame pointer
+ 28 - stack pointer
+
+ By default, the extension registers are not available. */
+
+#define FIXED_REGISTERS \
+{ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 1, 1, 1, 1, 0, \
+ \
+ 1, 1, 1, 1, 1, 1, 1, 1, \
+ 1, 1, 1, 1, 1, 1, 1, 1, \
+ 1, 1, 1, 1, 1, 1, 1, 1, \
+ 1, 1, 1, 1, 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.
+ Aside from that, you can include as many other registers as you like. */
+
+#define CALL_USED_REGISTERS \
+{ 1, 1, 1, 1, 1, 1, 1, 1, \
+ 1, 1, 1, 1, 1, 1, 1, 1, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 1, 1, 1, 1, 1, 1, 1, 1, \
+ \
+ 1, 1, 1, 1, 1, 1, 1, 1, \
+ 1, 1, 1, 1, 1, 1, 1, 1, \
+ 1, 1, 1, 1, 1, 1, 1, 1, \
+ 1, 1, 1, 1, 1, 1 }
+
+/* If defined, an initializer for a vector of integers, containing the
+ numbers of hard registers in the order in which GNU CC should
+ prefer to use them (from most preferred to least). */
+#define REG_ALLOC_ORDER \
+{ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, \
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 31, \
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, \
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, \
+ 27, 28, 29, 30 }
+
+/* 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) \
+((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
+
+/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. */
+extern unsigned int arc_hard_regno_mode_ok[];
+extern unsigned int arc_mode_class[];
+#define HARD_REGNO_MODE_OK(REGNO, MODE) \
+((arc_hard_regno_mode_ok[REGNO] & arc_mode_class[MODE]) != 0)
+
+/* A C expression that is nonzero if it is desirable to choose
+ register allocation so as to avoid move instructions between a
+ value of mode MODE1 and a value of mode MODE2.
+
+ If `HARD_REGNO_MODE_OK (R, MODE1)' and `HARD_REGNO_MODE_OK (R,
+ MODE2)' are ever different for any R, then `MODES_TIEABLE_P (MODE1,
+ MODE2)' must be zero. */
+
+/* Tie QI/HI/SI modes together. */
+#define MODES_TIEABLE_P(MODE1, MODE2) \
+(GET_MODE_CLASS (MODE1) == MODE_INT \
+ && GET_MODE_CLASS (MODE2) == MODE_INT \
+ && GET_MODE_SIZE (MODE1) <= UNITS_PER_WORD \
+ && GET_MODE_SIZE (MODE2) <= UNITS_PER_WORD)
+
+/* Register classes and constants. */
+
+/* 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.
+
+ It is important that any condition codes have class NO_REGS.
+ See `register_operand'. */
+
+enum reg_class {
+ NO_REGS, LPCOUNT_REG, GENERAL_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", "LPCOUNT_REG", "GENERAL_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. */
+
+#define REG_CLASS_CONTENTS \
+{ {0, 0}, {0, 0x10000000}, {0xffffffff, 0xfffffff}, \
+ {0xffffffff, 0x1fffffff} }
+
+/* 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. */
+extern enum reg_class arc_regno_reg_class[];
+#define REGNO_REG_CLASS(REGNO) \
+(arc_regno_reg_class[REGNO])
+
+/* The class value for index registers, and the one for base regs. */
+#define INDEX_REG_CLASS GENERAL_REGS
+#define BASE_REG_CLASS GENERAL_REGS
+
+/* Get reg_class from a letter such as appears in the machine description. */
+#define REG_CLASS_FROM_LETTER(C) \
+((C) == 'l' ? LPCOUNT_REG /* ??? needed? */ \
+ : NO_REGS)
+
+/* 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.
+ Since they use reg_renumber, they are safe only once reg_renumber
+ has been allocated, which happens in local-alloc.c. */
+#define REGNO_OK_FOR_BASE_P(REGNO) \
+((REGNO) < 29 || (unsigned) reg_renumber[REGNO] < 29)
+#define REGNO_OK_FOR_INDEX_P(REGNO) \
+((REGNO) < 29 || (unsigned) reg_renumber[REGNO] < 29)
+
+/* 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) \
+(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) \
+((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
+
+/* The letters I, J, K, L, M, N, O, P 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. */
+/* 'I' is used for short immediates (always signed).
+ 'J' is used for long immediates.
+ 'K' is used for any constant up to 64 bits (for 64x32 situations?). */
+
+/* local to this file */
+#define SMALL_INT(X) ((unsigned) ((X) + 0x100) < 0x200)
+/* local to this file */
+#define LARGE_INT(X) \
+((X) >= (-(HOST_WIDE_INT) 0x7fffffff - 1) \
+ && (X) <= (unsigned HOST_WIDE_INT) 0xffffffff)
+
+#define CONST_OK_FOR_LETTER_P(VALUE, C) \
+((C) == 'I' ? SMALL_INT (VALUE) \
+ : (C) == 'J' ? LARGE_INT (VALUE) \
+ : (C) == 'K' ? 1 \
+ : 0)
+
+/* Similar, but for floating constants, and defining letters G and H.
+ Here VALUE is the CONST_DOUBLE rtx itself. */
+/* 'G' is used for integer values for the multiplication insns where the
+ operands are extended from 4 bytes to 8 bytes.
+ 'H' is used when any 64 bit constant is allowed. */
+#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \
+((C) == 'G' ? arc_double_limm_p (VALUE) \
+ : (C) == 'H' ? 1 \
+ : 0)
+
+/* A C expression that defines the optional machine-dependent constraint
+ letters that can be used to segregate specific types of operands,
+ usually memory references, for the target machine. It should return 1 if
+ VALUE corresponds to the operand type represented by the constraint letter
+ C. If C is not defined as an extra constraint, the value returned should
+ be 0 regardless of VALUE. */
+/* ??? This currently isn't used. Waiting for PIC. */
+#if 0
+#define EXTRA_CONSTRAINT(VALUE, C) \
+((C) == 'R' ? (SYMBOL_REF_FLAG (VALUE) || GET_CODE (VALUE) == LABEL_REF) \
+ : 0)
+#endif
+
+/* Stack layout and stack pointer usage. */
+
+/* Define this macro if pushing a word onto the stack moves the stack
+ pointer to 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 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 0
+
+/* Offset from the stack pointer register to the first location at which
+ outgoing arguments are placed. */
+#define STACK_POINTER_OFFSET FIRST_PARM_OFFSET (0)
+
+/* Offset of first parameter from the argument pointer register value. */
+/* 4 bytes for each of previous fp, return address, and previous gp.
+ 4 byte reserved area for future considerations. */
+#define FIRST_PARM_OFFSET(FNDECL) 16
+
+/* A C expression whose value is RTL representing the address in a
+ stack frame where the pointer to the caller's frame is stored.
+ Assume that FRAMEADDR is an RTL expression for the address of the
+ stack frame itself.
+
+ If you don't define this macro, the default is to return the value
+ of FRAMEADDR--that is, the stack frame address is also the address
+ of the stack word that points to the previous frame. */
+/* ??? unfinished */
+/*define DYNAMIC_CHAIN_ADDRESS (FRAMEADDR)*/
+
+/* A C expression whose value is RTL representing the value of the
+ return address for the frame COUNT steps up from the current frame.
+ FRAMEADDR is the frame pointer of the COUNT frame, or the frame
+ pointer of the COUNT - 1 frame if `RETURN_ADDR_IN_PREVIOUS_FRAME'
+ is defined. */
+/* The current return address is in r31. The return address of anything
+ farther back is at [%fp,4]. */
+#if 0 /* The default value should work. */
+#define RETURN_ADDR_RTX(COUNT, FRAME) \
+(((COUNT) == -1) \
+ ? gen_rtx (REG, Pmode, 31) \
+ : copy_to_reg (gen_rtx (MEM, Pmode, \
+ memory_address (Pmode, plus_constant ((FRAME), UNITS_PER_WORD)))))
+#endif
+
+/* Register to use for pushing function arguments. */
+#define STACK_POINTER_REGNUM 28
+
+/* Base register for access to local variables of the function. */
+#define FRAME_POINTER_REGNUM 27
+
+/* Base register for access to arguments of the function. */
+#define ARG_POINTER_REGNUM FRAME_POINTER_REGNUM
+
+/* Register in which static-chain is passed to a function. This must
+ not be a register used by the prologue. */
+#define STATIC_CHAIN_REGNUM 24
+
+/* A C expression which is nonzero if a function must have and use a
+ frame pointer. This expression is evaluated in the reload pass.
+ If its value is nonzero the function will have a frame pointer. */
+#define FRAME_POINTER_REQUIRED \
+(current_function_calls_alloca)
+
+/* C statement to store the difference between the frame pointer
+ and the stack pointer values immediately after the function prologue. */
+#define INITIAL_FRAME_POINTER_OFFSET(VAR) \
+((VAR) = arc_compute_frame_size (get_frame_size ()))
+
+/* Function argument passing. */
+
+/* When a prototype says `char' or `short', really pass an `int'. */
+#define PROMOTE_PROTOTYPES
+
+/* If defined, the maximum amount of space required for outgoing
+ arguments will be computed and placed into the variable
+ `current_function_outgoing_args_size'. No space will be pushed
+ onto the stack for each call; instead, the function prologue should
+ increase the stack frame size by this amount. */
+#define ACCUMULATE_OUTGOING_ARGS
+
+/* Value is the number of bytes of arguments automatically
+ popped when returning from a subroutine call.
+ FUNDECL is the declaration node of the function (as a tree),
+ FUNTYPE is the data type of the function (as a tree),
+ or for a library call it is an identifier node for the subroutine name.
+ SIZE is the number of bytes of arguments passed on the stack. */
+#define RETURN_POPS_ARGS(DECL, FUNTYPE, SIZE) 0
+
+/* 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. */
+#define CUMULATIVE_ARGS int
+
+/* 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,INDIRECT) \
+((CUM) = 0)
+
+/* The number of registers used for parameter passing. Local to this file. */
+#define MAX_ARC_PARM_REGS 8
+
+/* 1 if N is a possible register number for function argument passing. */
+#define FUNCTION_ARG_REGNO_P(N) \
+((unsigned) (N) < MAX_ARC_PARM_REGS)
+
+/* The ROUND_ADVANCE* macros are local to this file. */
+/* Round SIZE up to a word boundary. */
+#define ROUND_ADVANCE(SIZE) \
+(((SIZE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
+
+/* Round arg MODE/TYPE up to the next word boundary. */
+#define ROUND_ADVANCE_ARG(MODE, TYPE) \
+((MODE) == BLKmode \
+ ? ROUND_ADVANCE (int_size_in_bytes (TYPE)) \
+ : ROUND_ADVANCE (GET_MODE_SIZE (MODE)))
+
+/* Round CUM up to the necessary point for argument MODE/TYPE. */
+#define ROUND_ADVANCE_CUM(CUM, MODE, TYPE) \
+((((MODE) == BLKmode ? TYPE_ALIGN (TYPE) : GET_MODE_BITSIZE (MODE)) \
+ > BITS_PER_WORD) \
+ ? ((CUM) + 1 & ~1) \
+ : (CUM))
+
+/* Return boolean indicating arg of type TYPE and mode MODE will be passed in
+ a reg. This includes arguments that have to be passed by reference as the
+ pointer to them is passed in a reg if one is available (and that is what
+ we're given).
+ When passing arguments NAMED is always 1. When receiving arguments NAMED
+ is 1 for each argument except the last in a stdarg/varargs function. In
+ a stdarg function we want to treat the last named arg as named. In a
+ varargs function we want to treat the last named arg (which is
+ `__builtin_va_alist') as unnamed.
+ This macro is only used in this file. */
+extern int current_function_varargs;
+#define PASS_IN_REG_P(CUM, MODE, TYPE, NAMED) \
+((!current_function_varargs || (NAMED)) \
+ && (CUM) < MAX_ARC_PARM_REGS \
+ && ((ROUND_ADVANCE_CUM ((CUM), (MODE), (TYPE)) \
+ + ROUND_ADVANCE_ARG ((MODE), (TYPE)) \
+ <= MAX_ARC_PARM_REGS)))
+
+/* Determine where to put an argument 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 the ARC the first MAX_ARC_PARM_REGS args are normally in registers
+ and the rest are pushed. */
+#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
+(PASS_IN_REG_P ((CUM), (MODE), (TYPE), (NAMED)) \
+ ? gen_rtx (REG, (MODE), ROUND_ADVANCE_CUM ((CUM), (MODE), (TYPE))) \
+ : 0)
+
+/* A C expression for the number of words, at the beginning of an
+ argument, must be put in registers. The value must be zero for
+ arguments that are passed entirely in registers or that are entirely
+ pushed on the stack.
+
+ On some machines, certain arguments must be passed partially in
+ registers and partially in memory. On these machines, typically the
+ first @var{n} words of arguments are passed in registers, and the rest
+ on the stack. If a multi-word argument (a @code{double} or a
+ structure) crosses that boundary, its first few words must be passed
+ in registers and the rest must be pushed. This macro tells the
+ compiler when this occurs, and how many of the words should go in
+ registers. */
+#define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) 0
+
+/* A C expression that indicates when an argument must be passed by
+ reference. If nonzero for an argument, a copy of that argument is
+ made in memory and a pointer to the argument is passed instead of
+ the argument itself. The pointer is passed in whatever way is
+ appropriate for passing a pointer to that type. */
+/* All aggregates and arguments greater than 8 bytes are passed this way. */
+#define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \
+(TYPE \
+ && (AGGREGATE_TYPE_P (TYPE) \
+ || int_size_in_bytes (TYPE) > 8))
+
+/* A C expression that indicates when it is the called function's
+ responsibility to make copies of arguments passed by reference.
+ If the callee can determine that the argument won't be modified, it can
+ avoid the copy. */
+/* ??? We'd love to be able to use NAMED here. Unfortunately, it doesn't
+ include the last named argument so we keep track of the args ourselves. */
+
+#define FUNCTION_ARG_CALLEE_COPIES(CUM, MODE, TYPE, NAMED) \
+FUNCTION_ARG_PASS_BY_REFERENCE ((CUM), (MODE), (TYPE), (NAMED))
+
+/* 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) \
+((CUM) = (ROUND_ADVANCE_CUM ((CUM), (MODE), (TYPE)) \
+ + ROUND_ADVANCE_ARG ((MODE), (TYPE))))
+
+/* If defined, a C expression that gives the alignment boundary, in bits,
+ of an argument with the specified mode and type. If it is not defined,
+ PARM_BOUNDARY is used for all arguments. */
+#define FUNCTION_ARG_BOUNDARY(MODE, TYPE) \
+(((TYPE) ? TYPE_ALIGN (TYPE) : GET_MODE_BITSIZE (MODE)) <= PARM_BOUNDARY \
+ ? PARM_BOUNDARY \
+ : 2 * PARM_BOUNDARY)
+
+/* This macro offers an alternative
+ to using `__builtin_saveregs' and defining the macro
+ `EXPAND_BUILTIN_SAVEREGS'. Use it to store the anonymous register
+ arguments into the stack so that all the arguments appear to have
+ been passed consecutively on the stack. Once this is done, you
+ can use the standard implementation of varargs that works for
+ machines that pass all their arguments on the stack.
+
+ The argument ARGS_SO_FAR is the `CUMULATIVE_ARGS' data structure,
+ containing the values that obtain after processing of the named
+ arguments. The arguments MODE and TYPE describe the last named
+ argument--its machine mode and its data type as a tree node.
+
+ The macro implementation should do two things: first, push onto the
+ stack all the argument registers *not* used for the named
+ arguments, and second, store the size of the data thus pushed into
+ the `int'-valued variable whose name is supplied as the argument
+ PRETEND_SIZE. The value that you store here will serve as
+ additional offset for setting up the stack frame.
+
+ If the argument NO_RTL is nonzero, it means that the
+ arguments of the function are being analyzed for the second time.
+ This happens for an inline function, which is not actually
+ compiled until the end of the source file. The macro
+ `SETUP_INCOMING_VARARGS' should not generate any instructions in
+ this case. */
+
+#define SETUP_INCOMING_VARARGS(ARGS_SO_FAR, MODE, TYPE, PRETEND_SIZE, NO_RTL) \
+arc_setup_incoming_varargs(&ARGS_SO_FAR, MODE, TYPE, &PRETEND_SIZE, NO_RTL)
+
+/* Function results. */
+
+/* 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 0. */
+#define FUNCTION_VALUE(VALTYPE, FUNC) gen_rtx (REG, TYPE_MODE (VALTYPE), 0)
+
+/* 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, 0)
+
+/* 1 if N is a possible register number for a function value
+ as seen by the caller. */
+/* ??? What about r1 in DI/DF values. */
+#define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
+
+/* A C expression which can inhibit the returning of certain function
+ values in registers, based on the type of value. A nonzero value says
+ to return the function value in memory, just as large structures are
+ always returned. Here TYPE will be a C expression of type `tree',
+ representing the data type of the value. */
+#define RETURN_IN_MEMORY(TYPE) \
+(AGGREGATE_TYPE_P (TYPE) \
+ || int_size_in_bytes (TYPE) > 8 \
+ || TREE_ADDRESSABLE (TYPE))
+
+/* Tell GCC to use RETURN_IN_MEMORY. */
+#define DEFAULT_PCC_STRUCT_RETURN 0
+
+/* Register in which address to store a structure value
+ is passed to a function, or 0 to use `invisible' first argument. */
+#define STRUCT_VALUE 0
+
+/* Function entry and exit. */
+
+/* This macro generates the assembly code for function entry.
+ FILE is a stdio stream to output the code to.
+ SIZE is an int: how many units of temporary storage to allocate.
+ Refer to the array `regs_ever_live' to determine which registers
+ to save; `regs_ever_live[I]' is nonzero if register number I
+ is ever used in the function. This macro is responsible for
+ knowing which registers should not be saved even if used. */
+#define FUNCTION_PROLOGUE(FILE, SIZE) \
+arc_output_function_prologue (FILE, SIZE)
+
+/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
+ the stack pointer does not matter. The value is tested only in
+ functions that have frame pointers.
+ No definition is equivalent to always zero. */
+#define EXIT_IGNORE_STACK 0
+
+/* 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, SIZE) \
+arc_output_function_epilogue (FILE, SIZE)
+
+/* Epilogue delay slots. */
+#define DELAY_SLOTS_FOR_EPILOGUE arc_delay_slots_for_epilogue ()
+
+#define ELIGIBLE_FOR_EPILOGUE_DELAY(TRIAL, SLOTS_FILLED) \
+arc_eligible_for_epilogue_delay (TRIAL, SLOTS_FILLED)
+
+/* Output assembler code to FILE to increment profiler label # LABELNO
+ for profiling a function entry. */
+#define FUNCTION_PROFILER(FILE, LABELNO)
+
+/* Trampolines. */
+/* ??? This doesn't work yet because GCC will use as the address of a nested
+ function the address of the trampoline. We need to use that address
+ right shifted by 2. It looks like we'll need PSImode after all. :-( */
+
+/* Output assembler code for a block containing the constant parts
+ of a trampoline, leaving space for the variable parts. */
+/* On the ARC, the trampoline is quite simple as we have 32 bit immediate
+ constants.
+
+ mov r24,STATIC
+ j.nd FUNCTION
+*/
+#define TRAMPOLINE_TEMPLATE(FILE) \
+do { \
+ ASM_OUTPUT_INT (FILE, GEN_INT (0x631f7c00)); \
+ ASM_OUTPUT_INT (FILE, const0_rtx); \
+ ASM_OUTPUT_INT (FILE, GEN_INT (0x381f0000)); \
+ ASM_OUTPUT_INT (FILE, const0_rtx); \
+} while (0)
+
+/* Length in units of the trampoline for entering a nested function. */
+#define TRAMPOLINE_SIZE 16
+
+/* 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. */
+#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
+do { \
+ emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 4)), CXT); \
+ emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 12)), FNADDR); \
+ emit_insn (gen_flush_icache (validize_mem (gen_rtx (MEM, SImode, TRAMP)))); \
+} while (0)
+
+/* Library calls. */
+
+/* Generate calls to memcpy, memcmp and memset. */
+#define TARGET_MEM_FUNCTIONS
+
+/* Addressing modes, and classification of registers for them. */
+
+/* Maximum number of registers that can appear in a valid memory address. */
+/* The `ld' insn allows 2, but the `st' insn only allows 1. */
+#define MAX_REGS_PER_ADDRESS 1
+
+/* We have pre inc/dec (load/store with update). */
+#define HAVE_PRE_INCREMENT
+#define HAVE_PRE_DECREMENT
+
+/* Recognize any constant value that is a valid address. */
+#define CONSTANT_ADDRESS_P(X) \
+(GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF \
+ || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST)
+
+/* Nonzero if the constant value X is a legitimate general operand.
+ We can handle any 32 or 64 bit constant. */
+/* "1" should work since the largest constant should be a 64 bit critter. */
+/* ??? Not sure what to do for 64x32 compiler. */
+#define LEGITIMATE_CONSTANT_P(X) 1
+
+/* 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 unless they have been allocated suitable hard regs.
+ 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.
+ Source files for reload pass need to be strict.
+ After reload, it makes no difference, since pseudo regs have
+ been eliminated by then. */
+
+#ifndef REG_OK_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_P(X) \
+((unsigned) REGNO (X) - 29 >= FIRST_PSEUDO_REGISTER - 29)
+/* 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_P(X) \
+((unsigned) REGNO (X) - 29 >= FIRST_PSEUDO_REGISTER - 29)
+
+#else
+
+/* Nonzero if X is a hard reg that can be used as an index. */
+#define REG_OK_FOR_INDEX_P(X) 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_P(X) REGNO_OK_FOR_BASE_P (REGNO (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 `ld' insn allows [reg],[reg+shimm],[reg+limm],[reg+reg],[limm]
+ but the `st' insn only allows [reg],[reg+shimm],[limm].
+ The only thing we can do is only allow the most strict case `st' and hope
+ other parts optimize out the restrictions for `ld'. */
+
+/* local to this file */
+#define RTX_OK_FOR_BASE_P(X) \
+(REG_P (X) && REG_OK_FOR_BASE_P (X))
+
+/* local to this file */
+#define RTX_OK_FOR_INDEX_P(X) \
+(0 && /*???*/ REG_P (X) && REG_OK_FOR_INDEX_P (X))
+
+/* local to this file */
+/* ??? Loads can handle any constant, stores can only handle small ones. */
+#define RTX_OK_FOR_OFFSET_P(X) \
+(GET_CODE (X) == CONST_INT && SMALL_INT (INTVAL (X)))
+
+#define LEGITIMATE_OFFSET_ADDRESS_P(MODE, X) \
+(GET_CODE (X) == PLUS \
+ && RTX_OK_FOR_BASE_P (XEXP (X, 0)) \
+ && (RTX_OK_FOR_INDEX_P (XEXP (X, 1)) \
+ || RTX_OK_FOR_OFFSET_P (XEXP (X, 1))))
+
+#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
+{ if (RTX_OK_FOR_BASE_P (X)) \
+ goto ADDR; \
+ if (LEGITIMATE_OFFSET_ADDRESS_P ((MODE), (X))) \
+ goto ADDR; \
+ if (GET_CODE (X) == CONST_INT && LARGE_INT (INTVAL (X))) \
+ goto ADDR; \
+ if (GET_CODE (X) == SYMBOL_REF \
+ || GET_CODE (X) == LABEL_REF \
+ || GET_CODE (X) == CONST) \
+ goto ADDR; \
+ if ((GET_CODE (X) == PRE_DEC || GET_CODE (X) == PRE_INC) \
+ /* We're restricted here by the `st' insn. */ \
+ && RTX_OK_FOR_BASE_P (XEXP ((X), 0))) \
+ goto ADDR; \
+}
+
+/* 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. */
+
+#define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN)
+
+/* Go to LABEL if ADDR (a legitimate address expression)
+ has an effect that depends on the machine mode it is used for. */
+#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \
+{ if (GET_CODE (ADDR) == PRE_DEC) \
+ goto LABEL; \
+ if (GET_CODE (ADDR) == PRE_INC) \
+ goto LABEL; \
+}
+
+/* Condition code usage. */
+
+/* Some insns set all condition code flags, some only set the ZNC flags, and
+ some only set the ZN flags. */
+
+#define EXTRA_CC_MODES CCZNCmode, CCZNmode
+
+#define EXTRA_CC_NAMES "CCZNC", "CCZN"
+
+/* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE,
+ return the mode to be used for the comparison. */
+extern enum machine_mode arc_select_cc_mode ();
+#define SELECT_CC_MODE(OP, X, Y) \
+arc_select_cc_mode (OP, X, Y)
+
+/* Return non-zero if SELECT_CC_MODE will never return MODE for a
+ floating point inequality comparison. */
+#define REVERSIBLE_CC_MODE(MODE) 1 /*???*/
+
+/* Costs. */
+
+/* An insn is define to cost 4 "units", and we work from there.
+ COSTS_N_INSNS (N) is defined as (N) * 4 - 2 so that seems reasonable.
+ Some values are supposed to be defined relative to each other and thus
+ aren't necessarily related to COSTS_N_INSNS. */
+
+/* Compute the cost of computing a constant rtl expression RTX
+ whose rtx-code is CODE. The body of this macro is a portion
+ of a switch statement. If the code is computed here,
+ return it with a return statement. Otherwise, break from the switch. */
+/* Small integers are as cheap as registers. 4 byte values can be fetched
+ as immediate constants - let's give that the cost of an extra insn. */
+#define CONST_COSTS(X, CODE, OUTER_CODE) \
+ case CONST_INT : \
+ if (SMALL_INT (INTVAL (X))) \
+ return 0; \
+ /* fall through */ \
+ case CONST : \
+ case LABEL_REF : \
+ case SYMBOL_REF : \
+ return 4; \
+ case CONST_DOUBLE : \
+ { \
+ rtx high, low; \
+ split_double (X, &high, &low); \
+ return 4 * (!SMALL_INT (INTVAL (high)) \
+ + !SMALL_INT (INTVAL (low))); \
+ }
+
+/* Compute the cost of an address. */
+#define ADDRESS_COST(ADDR) (REG_P (ADDR) ? 1 : arc_address_cost (ADDR))
+
+/* Compute extra cost of moving data between one register class
+ and another. */
+#define REGISTER_MOVE_COST(CLASS1, CLASS2) 2
+
+/* Compute the cost of moving data between registers and memory. */
+/* Memory is 3 times as expensive as registers.
+ ??? Is that the right way to look at it? */
+#define MEMORY_MOVE_COST(MODE) \
+(GET_MODE_SIZE (MODE) <= UNITS_PER_WORD ? 6 : 12)
+
+/* The cost of a branch insn. */
+/* ??? What's the right value here? Branches are certainly more
+ expensive than reg->reg moves. */
+#define BRANCH_COST 2
+
+/* Provide the costs of a rtl expression. This is in the body of a
+ switch on CODE. The purpose for the cost of MULT is to encourage
+ `synth_mult' to find a synthetic multiply when reasonable.
+
+ If we need more than 12 insns to do a multiply, then go out-of-line,
+ since the call overhead will be < 10% of the cost of the multiply. */
+#define RTX_COSTS(X, CODE, OUTER_CODE) \
+ case ASHIFT : \
+ case ASHIFTRT : \
+ case LSHIFTRT : \
+ if (TARGET_SHIFTER) \
+ return COSTS_N_INSNS (1); \
+ if (GET_CODE (XEXP ((X), 1)) != CONST_INT) \
+ return COSTS_N_INSNS (16); \
+ return COSTS_N_INSNS (INTVAL (XEXP ((X), 1)));
+
+/* Nonzero if access to memory by bytes is slow and undesirable.
+ For RISC chips, it means that access to memory by bytes is no
+ better than access by words when possible, so grab a whole word
+ and maybe make use of that. */
+#define SLOW_BYTE_ACCESS 1
+
+/* Define this macro if it is as good or better to call a constant
+ function address than to call an address kept in a register. */
+/* On the ARC, calling through registers is slow. */
+#define NO_FUNCTION_CSE
+
+/* Define this macro if it is as good or better for a function to call
+ itself with an explicit address than to call an address kept in a
+ register. */
+/* On the ARC, calling through registers is slow. */
+#define NO_RECURSIVE_FUNCTION_CSE
+
+/* Section selection. */
+/* WARNING: These section names also appear in dwarfout.c. */
+
+/* The names of the text, data, and readonly-data sections are runtime
+ selectable. */
+
+#define ARC_SECTION_FORMAT "\t.section %s"
+#define ARC_DEFAULT_TEXT_SECTION ".text"
+#define ARC_DEFAULT_DATA_SECTION ".data"
+#define ARC_DEFAULT_RODATA_SECTION ".rodata"
+
+extern char *arc_text_section,*arc_data_section,*arc_rodata_section;
+
+/* initfini.c uses this in an asm. */
+#if defined (CRT_INIT) || defined (CRT_FINI)
+#define TEXT_SECTION_ASM_OP "\t.section .text"
+#else
+#define TEXT_SECTION_ASM_OP arc_text_section /*"\t.section .text"*/
+#endif
+#define DATA_SECTION_ASM_OP arc_data_section /*"\t.section .data"*/
+
+#undef CONST_SECTION_ASM_OP
+#define CONST_SECTION_ASM_OP arc_rodata_section /*"\t.section .rodata"*/
+
+#define BSS_SECTION_ASM_OP "\t.section .bss"
+
+/* Define this macro if jump tables (for tablejump insns) should be
+ output in the text section, along with the assembler instructions.
+ Otherwise, the readonly data section is used.
+ This macro is irrelevant if there is no separate readonly data section. */
+/*#define JUMP_TABLES_IN_TEXT_SECTION*/
+
+/* 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).
+
+ The macro definition, if any, is executed immediately after the
+ rtl for DECL or other node is created.
+ The value of the rtl will be a `mem' whose address is a
+ `symbol_ref'.
+
+ The usual thing for this macro to do is to store a flag in the
+ `symbol_ref' (such as `SYMBOL_REF_FLAG') or to store a modified
+ name string in the `symbol_ref' (if one bit is not enough
+ information). */
+
+/* On the ARC, function addresses are not the same as normal addresses.
+ Branch to absolute address insns take an address that is right-shifted
+ by 2. We encode the fact that we have a function here, and then emit a
+ special assembler op when outputting the address. */
+#define ENCODE_SECTION_INFO(DECL) \
+do { \
+ if (TREE_CODE (DECL) == FUNCTION_DECL) \
+ SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1; \
+} while (0)
+
+/* Decode SYM_NAME and store the real name part in VAR, sans
+ the characters that encode section info. Define this macro if
+ ENCODE_SECTION_INFO alters the symbol's name string. */
+/*#define STRIP_NAME_ENCODING(VAR, SYM_NAME)*/
+
+/* For DWARF. Marginally different than default so output is "prettier"
+ (and consistent with above). */
+#define PUSHSECTION_FORMAT "\t%s %s\n"
+
+/* Tell crtstuff.c we're using ELF. */
+#define OBJECT_FORMAT_ELF
+
+/* PIC */
+
+/* The register number of the register used to address a table of static
+ data addresses in memory. In some cases this register is defined by a
+ processor's ``application binary interface'' (ABI). When this macro
+ is defined, RTL is generated for this register once, as with the stack
+ pointer and frame pointer registers. If this macro is not defined, it
+ is up to the machine-dependent files to allocate such a register (if
+ necessary). */
+#define PIC_OFFSET_TABLE_REGNUM 26
+
+/* Define this macro if the register defined by PIC_OFFSET_TABLE_REGNUM is
+ clobbered by calls. Do not define this macro if PIC_OFFSET_TABLE_REGNUM
+ is not defined. */
+/* This register is call-saved on the ARC. */
+/*#define PIC_OFFSET_TABLE_REG_CALL_CLOBBERED*/
+
+/* By generating position-independent code, when two different programs (A
+ and B) share a common library (libC.a), the text of the library can be
+ shared whether or not the library is linked at the same address for both
+ programs. In some of these environments, position-independent code
+ requires not only the use of different addressing modes, but also
+ special code to enable the use of these addressing modes.
+
+ The FINALIZE_PIC macro serves as a hook to emit these special
+ codes once the function is being compiled into assembly code, but not
+ before. (It is not done before, because in the case of compiling an
+ inline function, it would lead to multiple PIC prologues being
+ included in functions which used inline functions and were compiled to
+ assembly language.) */
+
+#define INITIALIZE_PIC arc_initialize_pic ()
+#define FINALIZE_PIC arc_finalize_pic ()
+
+/* A C expression that is nonzero if X is a legitimate immediate
+ operand on the target machine when generating position independent code.
+ You can assume that X satisfies CONSTANT_P, so you need not
+ check this. You can also assume `flag_pic' is true, so you need not
+ check it either. You need not define this macro if all constants
+ (including SYMBOL_REF) can be immediate operands when generating
+ position independent code. */
+/*#define LEGITIMATE_PIC_OPERAND_P(X)*/
+
+/* Control the assembler format that we output. */
+
+/* Output at beginning of assembler file. */
+extern void arc_asm_file_start ();
+#undef ASM_FILE_START
+#define ASM_FILE_START(FILE) arc_asm_file_start (FILE)
+
+/* A C statement to output assembler commands which will identify the
+ object file as having been compiled with GNU CC (or another GNU
+ compiler). */
+#undef ASM_IDENTIFY_GCC
+#define ASM_IDENTIFY_GCC(FILE) /* nothing */
+
+/* Needed because we define ASM_IDENTIFY_GCC. */
+#define ASM_IDENTIFY_LANGUAGE(FILE) output_lang_identify (FILE)
+
+/* A C string constant describing how to begin a comment in the target
+ assembler language. The compiler assumes that the comment will
+ end at the end of the line. */
+#define ASM_COMMENT_START ";"
+
+/* Output to assembler file text saying following lines
+ may contain character constants, extra white space, comments, etc. */
+#define ASM_APP_ON ""
+
+/* Output to assembler file text saying following lines
+ no longer contain unusual constructs. */
+#define ASM_APP_OFF ""
+
+/* This is how to output an assembler line defining a `char' constant. */
+#define ASM_OUTPUT_CHAR(FILE, VALUE) \
+( fprintf (FILE, "\t.byte\t"), \
+ output_addr_const (FILE, (VALUE)), \
+ fprintf (FILE, "\n"))
+
+/* This is how to output an assembler line defining a `short' constant. */
+#define ASM_OUTPUT_SHORT(FILE, VALUE) \
+( fprintf (FILE, "\t.hword\t"), \
+ output_addr_const (FILE, (VALUE)), \
+ fprintf (FILE, "\n"))
+
+/* This is how to output an assembler line defining an `int' constant.
+ We also handle symbol output here. Code addresses must be right shifted
+ by 2 because that's how the jump instruction wants them. */
+#define ASM_OUTPUT_INT(FILE, VALUE) \
+do { \
+ fprintf (FILE, "\t.word\t"); \
+ if ((GET_CODE (VALUE) == SYMBOL_REF && SYMBOL_REF_FLAG (VALUE)) \
+ || GET_CODE (VALUE) == LABEL_REF) \
+ { \
+ fprintf (FILE, "%%st("); \
+ output_addr_const (FILE, (VALUE)); \
+ fprintf (FILE, ")"); \
+ } \
+ else \
+ output_addr_const (FILE, (VALUE)); \
+ fprintf (FILE, "\n"); \
+} while (0)
+
+/* This is how to output an assembler line defining a `float' constant. */
+#define ASM_OUTPUT_FLOAT(FILE, VALUE) \
+{ \
+ long t; \
+ char str[30]; \
+ REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \
+ REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \
+ fprintf (FILE, "\t.word\t0x%lx %s %s\n", \
+ t, ASM_COMMENT_START, str); \
+}
+
+/* This is how to output an assembler line defining a `double' constant. */
+#define ASM_OUTPUT_DOUBLE(FILE, VALUE) \
+{ \
+ long t[2]; \
+ char str[30]; \
+ REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \
+ REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \
+ fprintf (FILE, "\t.word\t0x%lx %s %s\n\t.word\t0x%lx\n", \
+ t[0], ASM_COMMENT_START, str, t[1]); \
+}
+
+/* This is how to output an assembler line for a numeric constant byte. */
+#define ASM_BYTE_OP ".byte"
+#define ASM_OUTPUT_BYTE(FILE, VALUE) \
+ fprintf (FILE, "\t%s\t0x%x\n", ASM_BYTE_OP, (VALUE))
+
+/* The assembler's parentheses characters. */
+#define ASM_OPEN_PAREN "("
+#define ASM_CLOSE_PAREN ")"
+
+/* 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. */
+#define ASM_OUTPUT_LABEL(FILE, NAME) \
+do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0)
+
+/* 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) \
+do { \
+ fputs ("\t.global\t", FILE); \
+ assemble_name (FILE, NAME); \
+ fputs ("\n", FILE); \
+} while (0)
+
+/* A C statement (sans semicolon) to output on FILE an assembler pseudo-op to
+ declare a library function name external. The name of the library function
+ is given by SYMREF, which has type RTX and is a SYMBOL_REF. */
+#if 0
+/* On the ARC we want to have libgcc's for multiple cpus in one binary.
+ We can't use `assemble_name' here as that will call ASM_OUTPUT_LABELREF
+ and we'll get another suffix added on if -mmangle-cpu. */
+extern char *arc_mangle_cpu;
+#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, SYMREF) \
+do { \
+ if (TARGET_MANGLE_CPU_LIBGCC) \
+ { \
+ fprintf (FILE, "\t.rename\t_%s, _%s%s\n", \
+ XSTR (SYMREF, 0), XSTR (SYMREF, 0), \
+ arc_mangle_suffix); \
+ } \
+} while (0)
+#endif
+
+/* This is how to output a reference to a user-level label named NAME.
+ `assemble_name' uses this. */
+/* We mangle all user labels to provide protection from linking code
+ compiled for different cpus. */
+/* We work around a dwarfout.c deficiency by watching for labels from it and
+ not adding the '_' prefix nor the cpu suffix. There is a comment in
+ dwarfout.c that says it should be using ASM_OUTPUT_INTERNAL_LABEL. */
+extern char *arc_mangle_cpu;
+#define ASM_OUTPUT_LABELREF(FILE, NAME) \
+do { \
+ if ((NAME)[0] == '.' && (NAME)[1] == 'L') \
+ fprintf (FILE, "%s", NAME); \
+ else \
+ { \
+ fputc ('_', FILE); \
+ if (TARGET_MANGLE_CPU && arc_mangle_cpu != NULL) \
+ fprintf (FILE, "%s_", arc_mangle_cpu); \
+ fprintf (FILE, "%s", NAME); \
+ } \
+} while (0)
+
+/* This is how to output a definition of an internal numbered label where
+ PREFIX is the class of label and NUM is the number within the class. */
+#undef ASM_OUTPUT_INTERNAL_LABEL
+#define ASM_OUTPUT_INTERNAL_LABEL(FILE, PREFIX, NUM) \
+do { \
+ arc_ccfsm_at_label (PREFIX, NUM); \
+ fprintf (FILE, ".%s%d:\n", PREFIX, NUM); \
+} while (0)
+
+/* 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. */
+#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
+( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \
+ sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO)))
+
+/* Assembler pseudo-op to equate one value with another. */
+/* ??? This is needed because dwarfout.c provides a default definition too
+ late for defaults.h (which contains the default definition of ASM_OUTPUT_DEF
+ that we use). */
+#define SET_ASM_OP ".set"
+
+/* A C statement (sans semicolon) to output an element in the table of
+ global constructors. */
+#undef ASM_OUTPUT_CONSTRUCTOR
+#define ASM_OUTPUT_CONSTRUCTOR(FILE, NAME) \
+do { \
+ ctors_section (); \
+ fprintf (FILE, "\t.word\t%%st("); \
+ assemble_name (FILE, NAME); \
+ fprintf (FILE, ")\n"); \
+} while (0)
+
+/* A C statement (sans semicolon) to output an element in the table of
+ global destructors. */
+#undef ASM_OUTPUT_DESTRUCTOR
+#define ASM_OUTPUT_DESTRUCTOR(FILE, NAME) \
+do { \
+ dtors_section (); \
+ fprintf (FILE, "\t.word\t%%st("); \
+ assemble_name (FILE, NAME); \
+ fprintf (FILE, ")\n"); \
+} while (0)
+
+/* 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", \
+ "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", \
+ "r24", "r25", "r26", "fp", "sp", "ilink1", "ilink2", "blink", \
+ "r32", "r33", "r34", "r35", "r36", "r37", "r38", "r39", \
+ "r40", "r41", "r42", "r43", "r44", "r45", "r46", "r47", \
+ "r48", "r49", "r50", "r51", "r52", "r53", "r54", "r55", \
+ "r56", "r57", "r58", "r59", "lp_count", "cc"}
+
+/* Entry to the insn conditionalizer. */
+#define FINAL_PRESCAN_INSN(INSN, OPVEC, NOPERANDS) \
+arc_final_prescan_insn (INSN, OPVEC, NOPERANDS)
+
+/* A C expression which evaluates to true if CODE is a valid
+ punctuation character for use in the `PRINT_OPERAND' macro. */
+extern char arc_punct_chars[];
+#define PRINT_OPERAND_PUNCT_VALID_P(CHAR) \
+arc_punct_chars[(unsigned char) (CHAR)]
+
+/* 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) \
+arc_print_operand (FILE, X, CODE)
+
+/* A C compound statement to output to stdio stream STREAM the
+ assembler syntax for an instruction operand that is a memory
+ reference whose address is ADDR. ADDR is an RTL expression.
+
+ On some machines, the syntax for a symbolic address depends on
+ the section that the address refers to. On these machines,
+ define the macro `ENCODE_SECTION_INFO' to store the information
+ into the `symbol_ref', and then check for it here. */
+#define PRINT_OPERAND_ADDRESS(FILE, ADDR) \
+arc_print_operand_address (FILE, ADDR)
+
+/* This is how to output an element of a case-vector that is absolute. */
+#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
+do { \
+ char label[30]; \
+ ASM_GENERATE_INTERNAL_LABEL (label, "L", VALUE); \
+ fprintf (FILE, "\t.word %%st("); \
+ assemble_name (FILE, label); \
+ fprintf (FILE, ")\n"); \
+} while (0)
+
+/* This is how to output an element of a case-vector that is relative. */
+#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \
+do { \
+ char label[30]; \
+ ASM_GENERATE_INTERNAL_LABEL (label, "L", VALUE); \
+ fprintf (FILE, "\t.word %%st("); \
+ assemble_name (FILE, label); \
+ fprintf (FILE, "-"); \
+ ASM_GENERATE_INTERNAL_LABEL (label, "L", REL); \
+ assemble_name (FILE, label); \
+ fprintf (FILE, ")\n"); \
+} while (0)
+
+/* A C expression to output text to align the location counter in the way
+ that is desirable at the beginning of a loop. */
+/* On the ARC, align loops to 32 byte boundaries (cache line size)
+ if -malign-loops. */
+#define ASM_OUTPUT_LOOP_ALIGN(FILE) \
+do { if (TARGET_ALIGN_LOOPS) ASM_OUTPUT_SKIP (FILE, 5); } while (0)
+
+/* 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) \
+do { if ((LOG) != 0) fprintf (FILE, "\t.align %d\n", 1 << (LOG)); } while (0)
+
+/* Debugging information. */
+
+/* Generate DBX and DWARF debugging information. */
+#define DBX_DEBUGGING_INFO
+#define DWARF_DEBUGGING_INFO
+
+/* Prefer STABS (for now). */
+#undef PREFERRED_DEBUGGING_TYPE
+#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
+
+/* How to renumber registers for dbx and gdb. */
+#define DBX_REGISTER_NUMBER(REGNO) (REGNO)
+
+/* Turn off splitting of long stabs. */
+#define DBX_CONTIN_LENGTH 0
+
+/* Miscellaneous. */
+
+/* Specify the machine mode that this machine uses
+ for the index in the tablejump instruction. */
+#define CASE_VECTOR_MODE Pmode
+
+/* 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. */
+/* It's not clear what PIC will look like or whether we want to use -fpic
+ for the embedded form currently being talked about. For now require -fpic
+ to get pc relative switch tables. */
+/*#define CASE_VECTOR_PC_RELATIVE*/
+
+/* Define if operations between registers always perform the operation
+ on the full register even if a narrower mode is specified. */
+#define WORD_REGISTER_OPERATIONS
+
+/* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
+ will either zero-extend or sign-extend. The value of this macro should
+ be the code that says which one of the two operations is implicitly
+ done, NIL if none. */
+#define LOAD_EXTEND_OP(MODE) ZERO_EXTEND
+
+/* Specify the tree operation to be used to convert reals to integers. */
+#define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR
+
+/* 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 4
+
+/* Define this to be nonzero if shift instructions ignore all but the low-order
+ few bits. */
+#define SHIFT_COUNT_TRUNCATED 1
+
+/* 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
+
+/* 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. */
+/* ??? The arc doesn't have full 32 bit pointers, but making this PSImode has
+ it's own problems (you have to add extendpsisi2 and trucnsipsi2 but how does
+ one do it without getting excess code?). Try to avoid it. */
+#define Pmode SImode
+
+/* A function address in a call instruction. */
+#define FUNCTION_MODE SImode
+
+/* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS
+ is a valid machine specific attribute for DECL.
+ The attributes in ATTRIBUTES have previously been assigned to TYPE. */
+extern int arc_valid_machine_attribute ();
+#define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) \
+arc_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS)
+
+/* A C expression that returns zero if the attributes on TYPE1 and TYPE2 are
+ incompatible, one if they are compatible, and two if they are
+ nearly compatible (which causes a warning to be generated). */
+extern int arc_comp_type_attributes ();
+#define COMP_TYPE_ATTRIBUTES(TYPE1, TYPE2) \
+arc_comp_type_attributes (TYPE1, TYPE2)
+
+/* Give newly defined TYPE some default attributes. */
+extern void arc_set_default_type_attributes ();
+#define SET_DEFAULT_TYPE_ATTRIBUTES(TYPE) \
+arc_set_default_type_attributes (TYPE)
+
+/* Define this if the target system supports the function
+ atexit from the ANSI C standard. If this is not defined,
+ and INIT_SECTION_ASM_OP is not defined, a default
+ exit function will be provided to support C++. */
+#define HAVE_ATEXIT
+
+/* alloca should avoid clobbering the old register save area. */
+/* ??? Not defined in tm.texi. */
+#define SETJMP_VIA_SAVE_AREA
+
+/* 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 *arc_compare_op0, *arc_compare_op1;
+
+/* Define the function that build the compare insn for scc and bcc. */
+extern struct rtx_def *gen_compare_reg ();
+
+/* Declarations for various fns used in the .md file. */
+extern char *output_shift ();
+
+/* ARC function types. */
+enum arc_function_type {
+ ARC_FUNCTION_UNKNOWN, ARC_FUNCTION_NORMAL,
+ /* These are interrupt handlers. The name corresponds to the register
+ name that contains the return address. */
+ ARC_FUNCTION_ILINK1, ARC_FUNCTION_ILINK2
+};
+#define ARC_INTERRUPT_P(TYPE) \
+((TYPE) == ARC_FUNCTION_ILINK1 || (TYPE) == ARC_FUNCTION_ILINK2)
+/* Compute the type of a function from its DECL. */
+enum arc_function_type arc_compute_function_type ();
diff --git a/gcc/config/arc/arc.md b/gcc/config/arc/arc.md
new file mode 100644
index 00000000000..328b1ebd991
--- /dev/null
+++ b/gcc/config/arc/arc.md
@@ -0,0 +1,1630 @@
+;; Machine description of the Argonaut ARC cpu for GNU C compiler
+;; Copyright (C) 1994, 1997 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.
+
+;; 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.
+
+;; See file "rtl.def" for documentation on define_insn, match_*, et. al.
+
+;; ??? This is an old port, and is undoubtedly suffering from bit rot.
+
+;; Insn type. Used to default other attribute values.
+
+(define_attr "type"
+ "move,load,store,cmove,unary,binary,compare,shift,mul,uncond_branch,branch,call,call_no_delay_slot,multi,misc"
+ (const_string "binary"))
+
+;; Length (in # of insns, long immediate constants counted too).
+;; ??? There's a nasty interaction between the conditional execution fsm
+;; and insn lengths: insns with shimm values cannot be conditionally executed.
+(define_attr "length" ""
+ (cond [(eq_attr "type" "load")
+ (if_then_else (match_operand 1 "long_immediate_loadstore_operand" "")
+ (const_int 2) (const_int 1))
+
+ (eq_attr "type" "store")
+ (if_then_else (match_operand 0 "long_immediate_loadstore_operand" "")
+ (const_int 2) (const_int 1))
+
+ (eq_attr "type" "move,unary,compare")
+ (if_then_else (match_operand 1 "long_immediate_operand" "")
+ (const_int 2) (const_int 1))
+
+ (eq_attr "type" "binary,mul")
+ (if_then_else (match_operand 2 "long_immediate_operand" "")
+ (const_int 2) (const_int 1))
+
+ (eq_attr "type" "cmove")
+ (if_then_else (match_operand 2 "register_operand" "")
+ (const_int 1) (const_int 2))
+
+ (eq_attr "type" "multi") (const_int 2)
+ ]
+
+ (const_int 1)))
+
+;; The length here is the length of a single asm. Unfortunately it might be
+;; 1 or 2 so we must allow for 2. That's ok though. How often will users
+;; lament asm's not being put in delay slots?
+(define_asm_attributes
+ [(set_attr "length" "2")
+ (set_attr "type" "multi")])
+
+;; Condition codes: this one is used by final_prescan_insn to speed up
+;; conditionalizing instructions. It saves having to scan the rtl to see if
+;; it uses or alters the condition codes.
+
+;; USE: This insn uses the condition codes (eg: a conditional branch).
+;; CANUSE: This insn can use the condition codes (for conditional execution).
+;; SET: All condition codes are set by this insn.
+;; SET_ZN: the Z and N flags are set by this insn.
+;; SET_ZNC: the Z, N, and C flags are set by this insn.
+;; CLOB: The condition codes are set to unknown values by this insn.
+;; NOCOND: This insn can't use and doesn't affect the condition codes.
+
+(define_attr "cond" "use,canuse,set,set_zn,set_znc,clob,nocond"
+ (cond [(and (eq_attr "type" "unary,binary,move")
+ (eq_attr "length" "1"))
+ (const_string "canuse")
+
+ (eq_attr "type" "compare")
+ (const_string "set")
+
+ (eq_attr "type" "cmove,branch")
+ (const_string "use")
+
+ (eq_attr "type" "multi,misc")
+ (const_string "clob")
+ ]
+
+ (const_string "nocond")))
+
+;; Delay slots.
+
+(define_attr "in_delay_slot" "false,true"
+ (cond [(eq_attr "type" "uncond_branch,branch,call,call_no_delay_slot,multi")
+ (const_string "false")
+ ]
+
+ (if_then_else (eq_attr "length" "1")
+ (const_string "true")
+ (const_string "false"))))
+
+(define_delay (eq_attr "type" "call")
+ [(eq_attr "in_delay_slot" "true")
+ (eq_attr "in_delay_slot" "true")
+ (eq_attr "in_delay_slot" "true")])
+
+(define_delay (eq_attr "type" "branch,uncond_branch")
+ [(eq_attr "in_delay_slot" "true")
+ (eq_attr "in_delay_slot" "true")
+ (eq_attr "in_delay_slot" "true")])
+
+;; Function units of the ARC
+
+;; (define_function_unit {name} {num-units} {n-users} {test}
+;; {ready-delay} {issue-delay} [{conflict-list}])
+
+;; 1) A conditional jump cannot immediately follow the insn setting the flags.
+;; This isn't a complete solution as it doesn't come with guarantees. That
+;; is done in the branch patterns and in arc_print_operand. This exists to
+;; avoid inserting a nop when we can.
+(define_function_unit "compare" 1 0 (eq_attr "type" "compare") 2 2 [(eq_attr "type" "branch")])
+
+;; 2) References to loaded registers should wait a cycle.
+
+;; Memory with load-delay of 1 (i.e., 2 cycle load).
+(define_function_unit "memory" 1 1 (eq_attr "type" "load") 2 0)
+
+;; Units that take one cycle do not need to be specified.
+
+;; Move instructions.
+
+(define_expand "movqi"
+ [(set (match_operand:QI 0 "general_operand" "")
+ (match_operand:QI 1 "general_operand" ""))]
+ ""
+ "
+{
+ /* Everything except mem = const or mem = mem can be done easily. */
+
+ if (GET_CODE (operands[0]) == MEM)
+ operands[1] = force_reg (QImode, operands[1]);
+}")
+
+(define_insn "*movqi_insn"
+ [(set (match_operand:QI 0 "move_dest_operand" "=r,r,r,m")
+ (match_operand:QI 1 "move_src_operand" "rI,Ji,m,r"))]
+;; ??? Needed?
+ "register_operand (operands[0], QImode)
+ || register_operand (operands[1], QImode)"
+ "@
+ mov%? %0,%1
+ mov%? %0,%1
+ ldb%U1%V1 %0,%1
+ stb%U0%V0 %1,%0"
+ [(set_attr "type" "move,move,load,store")])
+
+;; ??? This may never match since there's no cmpqi insn.
+
+(define_insn "*movqi_set_cc_insn"
+ [(set (reg:CCZN 61) (compare:CCZN
+ (sign_extend:SI (match_operand:QI 1 "move_src_operand" "rIJi"))
+ (const_int 0)))
+ (set (match_operand:QI 0 "move_dest_operand" "=r")
+ (match_dup 1))]
+ ""
+ "mov%?.f %0,%1"
+ [(set_attr "type" "move")
+ (set_attr "cond" "set_zn")])
+
+(define_expand "movhi"
+ [(set (match_operand:HI 0 "general_operand" "")
+ (match_operand:HI 1 "general_operand" ""))]
+ ""
+ "
+{
+ /* Everything except mem = const or mem = mem can be done easily. */
+
+ if (GET_CODE (operands[0]) == MEM)
+ operands[1] = force_reg (HImode, operands[1]);
+}")
+
+(define_insn "*movhi_insn"
+ [(set (match_operand:HI 0 "move_dest_operand" "=r,r,r,m")
+ (match_operand:HI 1 "move_src_operand" "rI,Ji,m,r"))]
+ "register_operand (operands[0], HImode)
+ || register_operand (operands[1], HImode)"
+ "@
+ mov%? %0,%1
+ mov%? %0,%1
+ ldw%U1%V1 %0,%1
+ stw%U0%V0 %1,%0"
+ [(set_attr "type" "move,move,load,store")])
+
+;; ??? Will this ever match?
+
+(define_insn "*movhi_set_cc_insn"
+ [(set (reg:CCZN 61) (compare:CCZN
+ (sign_extend:SI (match_operand:HI 1 "move_src_operand" "rIJi"))
+ (const_int 0)))
+ (set (match_operand:HI 0 "move_dest_operand" "=r")
+ (match_dup 1))]
+;; ??? Needed?
+ "register_operand (operands[0], HImode)
+ || register_operand (operands[1], HImode)"
+ "mov%?.f %0,%1"
+ [(set_attr "type" "move")
+ (set_attr "cond" "set_zn")])
+
+(define_expand "movsi"
+ [(set (match_operand:SI 0 "general_operand" "")
+ (match_operand:SI 1 "general_operand" ""))]
+ ""
+ "
+{
+ /* Everything except mem = const or mem = mem can be done easily. */
+
+ if (GET_CODE (operands[0]) == MEM)
+ operands[1] = force_reg (SImode, operands[1]);
+}")
+
+(define_insn "*movsi_insn"
+ [(set (match_operand:SI 0 "move_dest_operand" "=r,r,r,m")
+ (match_operand:SI 1 "move_src_operand" "rI,GJi,m,r"))]
+ "register_operand (operands[0], SImode)
+ || register_operand (operands[1], SImode)"
+ "@
+ mov%? %0,%1
+ mov%? %0,%S1
+ ld%U1%V1 %0,%1
+ st%U0%V0 %1,%0"
+ [(set_attr "type" "move,move,load,store")])
+
+(define_insn "*movsi_set_cc_insn"
+ [(set (reg:CCZN 61) (compare:CCZN
+ (match_operand:SI 1 "move_src_operand" "rIJi")
+ (const_int 0)))
+ (set (match_operand:SI 0 "move_dest_operand" "=r")
+ (match_dup 1))]
+ "register_operand (operands[0], SImode)
+ || register_operand (operands[1], SImode)"
+ "mov%?.f %0,%S1"
+ [(set_attr "type" "move")
+ (set_attr "cond" "set_zn")])
+
+(define_expand "movdi"
+ [(set (match_operand:DI 0 "general_operand" "")
+ (match_operand:DI 1 "general_operand" ""))]
+ ""
+ "
+{
+ /* Everything except mem = const or mem = mem can be done easily. */
+
+ if (GET_CODE (operands[0]) == MEM)
+ operands[1] = force_reg (DImode, operands[1]);
+}")
+
+(define_insn "*movdi_insn"
+ [(set (match_operand:DI 0 "move_dest_operand" "=r,r,r,m")
+ (match_operand:DI 1 "move_double_src_operand" "r,HK,m,r"))]
+ "register_operand (operands[0], DImode)
+ || register_operand (operands[1], DImode)"
+ "*
+{
+ switch (which_alternative)
+ {
+ case 0 :
+ /* We normally copy the low-numbered register first. However, if
+ the first register operand 0 is the same as the second register of
+ operand 1, we must copy in the opposite order. */
+ if (REGNO (operands[0]) == REGNO (operands[1]) + 1)
+ return \"mov %R0,%R1\;mov %0,%1\";
+ else
+ return \"mov %0,%1\;mov %R0,%R1\";
+ case 1 :
+ return \"mov %0,%L1\;mov %R0,%H1\";
+ case 2 :
+ /* If the low-address word is used in the address, we must load it
+ last. Otherwise, load it first. Note that we cannot have
+ auto-increment in that case since the address register is known to be
+ dead. */
+ if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
+ operands [1], 0))
+ return \"ld%V1 %R0,%R1\;ld%V1 %0,%1\";
+ else
+ return \"ld%V1 %0,%1\;ld%V1 %R0,%R1\";
+ case 3 :
+ return \"st%V0 %1,%0\;st%V0 %R1,%R0\";
+ }
+}"
+ [(set_attr "type" "move,move,load,store")
+ ;; ??? The ld/st values could be 4 if it's [reg,bignum].
+ (set_attr "length" "2,4,2,2")])
+
+;(define_expand "movdi"
+; [(set (match_operand:DI 0 "general_operand" "")
+; (match_operand:DI 1 "general_operand" ""))]
+; ""
+; "
+;{
+; /* Flow doesn't understand that this is effectively a DFmode move.
+; It doesn't know that all of `operands[0]' is set. */
+; emit_insn (gen_rtx (CLOBBER, VOIDmode, operands[0]));
+;
+; /* Emit insns that movsi_insn can handle. */
+; emit_insn (gen_movsi (operand_subword (operands[0], 0, 0, DImode),
+; operand_subword (operands[1], 0, 0, DImode)));
+; emit_insn (gen_movsi (operand_subword (operands[0], 1, 0, DImode),
+; operand_subword (operands[1], 1, 0, DImode)));
+; DONE;
+;}")
+
+;; Floating point move insns.
+
+(define_expand "movsf"
+ [(set (match_operand:SF 0 "general_operand" "")
+ (match_operand:SF 1 "general_operand" ""))]
+ ""
+ "
+{
+ /* Everything except mem = const or mem = mem can be done easily. */
+
+#if HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT
+ if (GET_CODE (operands[1]) == CONST_DOUBLE)
+ operands[1] = force_const_mem (SFmode, operands[1]);
+#endif
+
+ if (GET_CODE (operands[0]) == MEM)
+ operands[1] = force_reg (SFmode, operands[1]);
+}")
+
+(define_insn "*movsf_insn"
+ [(set (match_operand:SF 0 "move_dest_operand" "=r,r,r,m")
+ (match_operand:SF 1 "move_src_operand" "r,E,m,r"))]
+ "register_operand (operands[0], SFmode)
+ || register_operand (operands[1], SFmode)"
+ "@
+ mov%? %0,%1
+ mov%? %0,%1 ; %A1
+ ld%U1%V1 %0,%1
+ st%U0%V0 %1,%0"
+ [(set_attr "type" "move,move,load,store")])
+
+(define_expand "movdf"
+ [(set (match_operand:DF 0 "general_operand" "")
+ (match_operand:DF 1 "general_operand" ""))]
+ ""
+ "
+{
+ /* Everything except mem = const or mem = mem can be done easily. */
+
+#if HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT
+ if (GET_CODE (operands[1]) == CONST_DOUBLE)
+ operands[1] = force_const_mem (DFmode, operands[1]);
+#endif
+
+ if (GET_CODE (operands[0]) == MEM)
+ operands[1] = force_reg (DFmode, operands[1]);
+}")
+
+(define_insn "*movdf_insn"
+ [(set (match_operand:DF 0 "move_dest_operand" "=r,r,r,m")
+ (match_operand:DF 1 "move_double_src_operand" "r,E,m,r"))]
+ "register_operand (operands[0], DFmode)
+ || register_operand (operands[1], DFmode)"
+ "*
+{
+ switch (which_alternative)
+ {
+ case 0 :
+ /* We normally copy the low-numbered register first. However, if
+ the first register operand 0 is the same as the second register of
+ operand 1, we must copy in the opposite order. */
+ if (REGNO (operands[0]) == REGNO (operands[1]) + 1)
+ return \"mov %R0,%R1\;mov %0,%1\";
+ else
+ return \"mov %0,%1\;mov %R0,%R1\";
+ case 1 :
+ return \"mov %0,%L1\;mov %R0,%H1 ; %A1\";
+ case 2 :
+ /* If the low-address word is used in the address, we must load it
+ last. Otherwise, load it first. Note that we cannot have
+ auto-increment in that case since the address register is known to be
+ dead. */
+ if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
+ operands [1], 0))
+ return \"ld%V1 %R0,%R1\;ld%V1 %0,%1\";
+ else
+ return \"ld%V1 %0,%1\;ld%V1 %R0,%R1\";
+ case 3 :
+ return \"st%V0 %1,%0\;st%V0 %R1,%R0\";
+ }
+}"
+ [(set_attr "type" "move,move,load,store")
+ ;; ??? The ld/st values could be 4 if it's [reg,bignum].
+ (set_attr "length" "2,4,2,2")])
+
+;(define_expand "movdf"
+; [(set (match_operand:DF 0 "general_operand" "")
+; (match_operand:DF 1 "general_operand" ""))]
+; ""
+; "
+;{
+; /* Flow doesn't understand that this is effectively a DFmode move.
+; It doesn't know that all of `operands[0]' is set. */
+; emit_insn (gen_rtx (CLOBBER, VOIDmode, operands[0]));
+;
+; /* Emit insns that movsi_insn can handle. */
+; emit_insn (gen_movsi (operand_subword (operands[0], 0, 0, DFmode),
+; operand_subword (operands[1], 0, 0, DFmode)));
+; emit_insn (gen_movsi (operand_subword (operands[0], 1, 0, DFmode),
+; operand_subword (operands[1], 1, 0, DFmode)));
+; DONE;
+;}")
+
+;; Load/Store with update instructions.
+;;
+;; Some of these we can get by using pre-decrement or pre-increment, but the
+;; hardware can also do cases where the increment is not the size of the
+;; object.
+;;
+;; In all these cases, we use operands 0 and 1 for the register being
+;; incremented because those are the operands that local-alloc will
+;; tie and these are the pair most likely to be tieable (and the ones
+;; that will benefit the most).
+;;
+;; We use match_operator here because we need to know whether the memory
+;; object is volatile or not.
+
+(define_insn "*loadqi_update"
+ [(set (match_operand:QI 3 "register_operand" "=r,r")
+ (match_operator:QI 4 "load_update_operand"
+ [(match_operand:SI 1 "register_operand" "0,0")
+ (match_operand:SI 2 "nonmemory_operand" "rI,J")]))
+ (set (match_operand:SI 0 "register_operand" "=r,r")
+ (plus:SI (match_dup 1) (match_dup 2)))]
+ ""
+ "ldb.a%V4 %3,[%0,%2]"
+ [(set_attr "type" "load,load")
+ (set_attr "length" "1,2")])
+
+(define_insn "*load_zeroextendqisi_update"
+ [(set (match_operand:SI 3 "register_operand" "=r,r")
+ (zero_extend:SI (match_operator:QI 4 "load_update_operand"
+ [(match_operand:SI 1 "register_operand" "0,0")
+ (match_operand:SI 2 "nonmemory_operand" "rI,J")])))
+ (set (match_operand:SI 0 "register_operand" "=r,r")
+ (plus:SI (match_dup 1) (match_dup 2)))]
+ ""
+ "ldb.a%V4 %3,[%0,%2]"
+ [(set_attr "type" "load,load")
+ (set_attr "length" "1,2")])
+
+(define_insn "*load_signextendqisi_update"
+ [(set (match_operand:SI 3 "register_operand" "=r,r")
+ (sign_extend:SI (match_operator:QI 4 "load_update_operand"
+ [(match_operand:SI 1 "register_operand" "0,0")
+ (match_operand:SI 2 "nonmemory_operand" "rI,J")])))
+ (set (match_operand:SI 0 "register_operand" "=r,r")
+ (plus:SI (match_dup 1) (match_dup 2)))]
+ ""
+ "ldb.x.a%V4 %3,[%0,%2]"
+ [(set_attr "type" "load,load")
+ (set_attr "length" "1,2")])
+
+(define_insn "*storeqi_update"
+ [(set (match_operator:QI 4 "store_update_operand"
+ [(match_operand:SI 1 "register_operand" "0")
+ (match_operand:SI 2 "short_immediate_operand" "I")])
+ (match_operand:QI 3 "register_operand" "r"))
+ (set (match_operand:SI 0 "register_operand" "=r")
+ (plus:SI (match_dup 1) (match_dup 2)))]
+ ""
+ "stb.a%V4 %3,[%0,%2]"
+ [(set_attr "type" "store")
+ (set_attr "length" "1")])
+
+(define_insn "*loadhi_update"
+ [(set (match_operand:HI 3 "register_operand" "=r,r")
+ (match_operator:HI 4 "load_update_operand"
+ [(match_operand:SI 1 "register_operand" "0,0")
+ (match_operand:SI 2 "nonmemory_operand" "rI,J")]))
+ (set (match_operand:SI 0 "register_operand" "=r,r")
+ (plus:SI (match_dup 1) (match_dup 2)))]
+ ""
+ "ldw.a%V4 %3,[%0,%2]"
+ [(set_attr "type" "load,load")
+ (set_attr "length" "1,2")])
+
+(define_insn "*load_zeroextendhisi_update"
+ [(set (match_operand:SI 3 "register_operand" "=r,r")
+ (zero_extend:SI (match_operator:HI 4 "load_update_operand"
+ [(match_operand:SI 1 "register_operand" "0,0")
+ (match_operand:SI 2 "nonmemory_operand" "rI,J")])))
+ (set (match_operand:SI 0 "register_operand" "=r,r")
+ (plus:SI (match_dup 1) (match_dup 2)))]
+ ""
+ "ldw.a%V4 %3,[%0,%2]"
+ [(set_attr "type" "load,load")
+ (set_attr "length" "1,2")])
+
+(define_insn "*load_signextendhisi_update"
+ [(set (match_operand:SI 3 "register_operand" "=r,r")
+ (sign_extend:SI (match_operator:HI 4 "load_update_operand"
+ [(match_operand:SI 1 "register_operand" "0,0")
+ (match_operand:SI 2 "nonmemory_operand" "rI,J")])))
+ (set (match_operand:SI 0 "register_operand" "=r,r")
+ (plus:SI (match_dup 1) (match_dup 2)))]
+ ""
+ "ldw.x.a%V4 %3,[%0,%2]"
+ [(set_attr "type" "load,load")
+ (set_attr "length" "1,2")])
+
+(define_insn "*storehi_update"
+ [(set (match_operator:HI 4 "store_update_operand"
+ [(match_operand:SI 1 "register_operand" "0")
+ (match_operand:SI 2 "short_immediate_operand" "I")])
+ (match_operand:HI 3 "register_operand" "r"))
+ (set (match_operand:SI 0 "register_operand" "=r")
+ (plus:SI (match_dup 1) (match_dup 2)))]
+ ""
+ "stw.a%V4 %3,[%0,%2]"
+ [(set_attr "type" "store")
+ (set_attr "length" "1")])
+
+(define_insn "*loadsi_update"
+ [(set (match_operand:SI 3 "register_operand" "=r,r")
+ (match_operator:SI 4 "load_update_operand"
+ [(match_operand:SI 1 "register_operand" "0,0")
+ (match_operand:SI 2 "nonmemory_operand" "rI,J")]))
+ (set (match_operand:SI 0 "register_operand" "=r,r")
+ (plus:SI (match_dup 1) (match_dup 2)))]
+ ""
+ "ld.a%V4 %3,[%0,%2]"
+ [(set_attr "type" "load,load")
+ (set_attr "length" "1,2")])
+
+(define_insn "*storesi_update"
+ [(set (match_operator:SI 4 "store_update_operand"
+ [(match_operand:SI 1 "register_operand" "0")
+ (match_operand:SI 2 "short_immediate_operand" "I")])
+ (match_operand:SI 3 "register_operand" "r"))
+ (set (match_operand:SI 0 "register_operand" "=r")
+ (plus:SI (match_dup 1) (match_dup 2)))]
+ ""
+ "st.a%V4 %3,[%0,%2]"
+ [(set_attr "type" "store")
+ (set_attr "length" "1")])
+
+(define_insn "*loadsf_update"
+ [(set (match_operand:SF 3 "register_operand" "=r,r")
+ (match_operator:SF 4 "load_update_operand"
+ [(match_operand:SI 1 "register_operand" "0,0")
+ (match_operand:SI 2 "nonmemory_operand" "rI,J")]))
+ (set (match_operand:SI 0 "register_operand" "=r,r")
+ (plus:SI (match_dup 1) (match_dup 2)))]
+ ""
+ "ld.a%V4 %3,[%0,%2]"
+ [(set_attr "type" "load,load")
+ (set_attr "length" "1,2")])
+
+(define_insn "*storesf_update"
+ [(set (match_operator:SF 4 "store_update_operand"
+ [(match_operand:SI 1 "register_operand" "0")
+ (match_operand:SI 2 "short_immediate_operand" "I")])
+ (match_operand:SF 3 "register_operand" "r"))
+ (set (match_operand:SI 0 "register_operand" "=r")
+ (plus:SI (match_dup 1) (match_dup 2)))]
+ ""
+ "st.a%V4 %3,[%0,%2]"
+ [(set_attr "type" "store")
+ (set_attr "length" "1")])
+
+;; Conditional move instructions.
+
+(define_expand "movsicc"
+ [(set (match_operand:SI 0 "register_operand" "")
+ (if_then_else (match_operand 1 "comparison_operator" "")
+ (match_operand:SI 2 "nonmemory_operand" "")
+ (match_operand:SI 3 "register_operand" "")))]
+ ""
+ "
+{
+ enum rtx_code code = GET_CODE (operands[1]);
+ rtx ccreg = gen_rtx (REG,
+ SELECT_CC_MODE (code, arc_compare_op0, arc_compare_op1),
+ 61);
+
+ operands[1] = gen_rtx (code, VOIDmode, ccreg, const0_rtx);
+}")
+
+;(define_expand "movdicc"
+; [(set (match_operand:DI 0 "register_operand" "")
+; (if_then_else (match_operand 1 "comparison_operator" "")
+; (match_operand:DI 2 "nonmemory_operand" "")
+; (match_operand:DI 3 "register_operand" "")))]
+; "0 /* ??? this would work better if we had cmpdi */"
+; "
+;{
+; enum rtx_code code = GET_CODE (operands[1]);
+; rtx ccreg = gen_rtx (REG,
+; SELECT_CC_MODE (code, arc_compare_op0, arc_compare_op1),
+; 61);
+;
+; operands[1] = gen_rtx (code, VOIDmode, ccreg, const0_rtx);
+;}")
+
+(define_expand "movsfcc"
+ [(set (match_operand:SF 0 "register_operand" "")
+ (if_then_else (match_operand 1 "comparison_operator" "")
+ (match_operand:SF 2 "nonmemory_operand" "")
+ (match_operand:SF 3 "register_operand" "")))]
+ ""
+ "
+{
+ enum rtx_code code = GET_CODE (operands[1]);
+ rtx ccreg = gen_rtx (REG,
+ SELECT_CC_MODE (code, arc_compare_op0, arc_compare_op1),
+ 61);
+
+ operands[1] = gen_rtx (code, VOIDmode, ccreg, const0_rtx);
+}")
+
+;(define_expand "movdfcc"
+; [(set (match_operand:DF 0 "register_operand" "")
+; (if_then_else (match_operand 1 "comparison_operator" "")
+; (match_operand:DF 2 "nonmemory_operand" "")
+; (match_operand:DF 3 "register_operand" "")))]
+; "0 /* ??? can generate less efficient code if constants involved */"
+; "
+;{
+; enum rtx_code code = GET_CODE (operands[1]);
+; rtx ccreg = gen_rtx (REG,
+; SELECT_CC_MODE (code, arc_compare_op0, arc_compare_op1),
+; 61);
+;
+; operands[1] = gen_rtx (code, VOIDmode, ccreg, const0_rtx);
+;}")
+
+(define_insn "*movsicc_insn"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (if_then_else (match_operand 1 "comparison_operator" "")
+ (match_operand:SI 2 "nonmemory_operand" "rJi")
+ (match_operand:SI 3 "register_operand" "0")))]
+ ""
+ "mov.%d1 %0,%S2"
+ [(set_attr "type" "cmove")])
+
+; ??? This doesn't properly handle constants.
+;(define_insn "*movdicc_insn"
+; [(set (match_operand:DI 0 "register_operand" "=r,r")
+; (if_then_else (match_operand 1 "comparison_operator" "")
+; (match_operand:DI 2 "nonmemory_operand" "r,Ji")
+; (match_operand:DI 3 "register_operand" "0,0")))]
+; "0"
+; "*
+;{
+; switch (which_alternative)
+; {
+; case 0 :
+; /* We normally copy the low-numbered register first. However, if
+; the first register operand 0 is the same as the second register of
+; operand 1, we must copy in the opposite order. */
+; if (REGNO (operands[0]) == REGNO (operands[2]) + 1)
+; return \"mov.%d1 %R0,%R2\;mov.%d1 %0,%2\";
+; else
+; return \"mov.%d1 %0,%2\;mov.%d1 %R0,%R2\";
+; case 1 :
+; return \"mov.%d1 %0,%2\;mov.%d1 %R0,%R2\";
+; }
+;}"
+; [(set_attr "type" "cmove,cmove")
+; (set_attr "length" "2,4")])
+
+(define_insn "*movsfcc_insn"
+ [(set (match_operand:SF 0 "register_operand" "=r,r")
+ (if_then_else (match_operand 1 "comparison_operator" "")
+ (match_operand:SF 2 "nonmemory_operand" "r,E")
+ (match_operand:SF 3 "register_operand" "0,0")))]
+ ""
+ "@
+ mov.%d1 %0,%2
+ mov.%d1 %0,%2 ; %A2"
+ [(set_attr "type" "cmove,cmove")])
+
+;(define_insn "*movdfcc_insn"
+; [(set (match_operand:DF 0 "register_operand" "=r,r")
+; (if_then_else (match_operand 1 "comparison_operator" "")
+; (match_operand:DF 2 "nonmemory_operand" "r,E")
+; (match_operand:DF 3 "register_operand" "0,0")))]
+; "0"
+; "*
+;{
+; switch (which_alternative)
+; {
+; case 0 :
+; /* We normally copy the low-numbered register first. However, if
+; the first register operand 0 is the same as the second register of
+; operand 1, we must copy in the opposite order. */
+; if (REGNO (operands[0]) == REGNO (operands[2]) + 1)
+; return \"mov.%d1 %R0,%R2\;mov.%d1 %0,%2\";
+; else
+; return \"mov.%d1 %0,%2\;mov.%d1 %R0,%R2\";
+; case 1 :
+; return \"mov.%d1 %0,%L2\;mov.%d1 %R0,%H2 ; %A2\";
+; }
+;}"
+; [(set_attr "type" "cmove,cmove")
+; (set_attr "length" "2,4")])
+
+;; Zero extension instructions.
+;; ??? We don't support volatile memrefs here, but I'm not sure why.
+
+(define_insn "zero_extendqihi2"
+ [(set (match_operand:HI 0 "register_operand" "=r,r")
+ (zero_extend:HI (match_operand:QI 1 "nonvol_nonimm_operand" "r,m")))]
+ ""
+ "@
+ extb%? %0,%1
+ ldb%U1 %0,%1"
+ [(set_attr "type" "unary,load")])
+
+(define_insn "*zero_extendqihi2_set_cc_insn"
+ [(set (reg:CCZN 61) (compare:CCZN
+ (zero_extend:SI (match_operand:QI 1 "register_operand" "r"))
+ (const_int 0)))
+ (set (match_operand:HI 0 "register_operand" "=r")
+ (zero_extend:HI (match_dup 1)))]
+ ""
+ "extb%?.f %0,%1"
+ [(set_attr "type" "unary")
+ (set_attr "cond" "set_zn")])
+
+(define_insn "zero_extendqisi2"
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
+ (zero_extend:SI (match_operand:QI 1 "nonvol_nonimm_operand" "r,m")))]
+ ""
+ "@
+ extb%? %0,%1
+ ldb%U1 %0,%1"
+ [(set_attr "type" "unary,load")])
+
+(define_insn "*zero_extendqisi2_set_cc_insn"
+ [(set (reg:CCZN 61) (compare:CCZN
+ (zero_extend:SI (match_operand:QI 1 "register_operand" "r"))
+ (const_int 0)))
+ (set (match_operand:SI 0 "register_operand" "=r")
+ (zero_extend:SI (match_dup 1)))]
+ ""
+ "extb%?.f %0,%1"
+ [(set_attr "type" "unary")
+ (set_attr "cond" "set_zn")])
+
+(define_insn "zero_extendhisi2"
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
+ (zero_extend:SI (match_operand:HI 1 "nonvol_nonimm_operand" "r,m")))]
+ ""
+ "@
+ extw%? %0,%1
+ ldw%U1 %0,%1"
+ [(set_attr "type" "unary,load")])
+
+(define_insn "*zero_extendhisi2_set_cc_insn"
+ [(set (reg:CCZN 61) (compare:CCZN
+ (zero_extend:SI (match_operand:HI 1 "register_operand" "r"))
+ (const_int 0)))
+ (set (match_operand:SI 0 "register_operand" "=r")
+ (zero_extend:SI (match_dup 1)))]
+ ""
+ "extw%?.f %0,%1"
+ [(set_attr "type" "unary")
+ (set_attr "cond" "set_zn")])
+
+;; Sign extension instructions.
+
+(define_insn "extendqihi2"
+ [(set (match_operand:HI 0 "register_operand" "=r,r")
+ (sign_extend:HI (match_operand:QI 1 "nonvol_nonimm_operand" "r,m")))]
+ ""
+ "@
+ sexb%? %0,%1
+ ldb.x%U1 %0,%1"
+ [(set_attr "type" "unary,load")])
+
+(define_insn "*extendqihi2_set_cc_insn"
+ [(set (reg:CCZN 61) (compare:CCZN
+ (sign_extend:SI (match_operand:QI 1 "register_operand" "r"))
+ (const_int 0)))
+ (set (match_operand:HI 0 "register_operand" "=r")
+ (sign_extend:HI (match_dup 1)))]
+ ""
+ "sexb%?.f %0,%1"
+ [(set_attr "type" "unary")
+ (set_attr "cond" "set_zn")])
+
+(define_insn "extendqisi2"
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
+ (sign_extend:SI (match_operand:QI 1 "nonvol_nonimm_operand" "r,m")))]
+ ""
+ "@
+ sexb%? %0,%1
+ ldb.x%U1 %0,%1"
+ [(set_attr "type" "unary,load")])
+
+(define_insn "*extendqisi2_set_cc_insn"
+ [(set (reg:CCZN 61) (compare:CCZN
+ (sign_extend:SI (match_operand:QI 1 "register_operand" "r"))
+ (const_int 0)))
+ (set (match_operand:SI 0 "register_operand" "=r")
+ (sign_extend:SI (match_dup 1)))]
+ ""
+ "sexb%?.f %0,%1"
+ [(set_attr "type" "unary")
+ (set_attr "cond" "set_zn")])
+
+(define_insn "extendhisi2"
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
+ (sign_extend:SI (match_operand:HI 1 "nonvol_nonimm_operand" "r,m")))]
+ ""
+ "@
+ sexw%? %0,%1
+ ldw.x%U1 %0,%1"
+ [(set_attr "type" "unary,load")])
+
+(define_insn "*extendhisi2_set_cc_insn"
+ [(set (reg:CCZN 61) (compare:CCZN
+ (sign_extend:SI (match_operand:HI 1 "register_operand" "r"))
+ (const_int 0)))
+ (set (match_operand:SI 0 "register_operand" "=r")
+ (sign_extend:SI (match_dup 1)))]
+ ""
+ "sexw%?.f %0,%1"
+ [(set_attr "type" "unary")
+ (set_attr "cond" "set_zn")])
+
+;; Arithmetic instructions.
+
+(define_insn "addsi3"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (plus:SI (match_operand:SI 1 "register_operand" "%r")
+ (match_operand:SI 2 "nonmemory_operand" "rIJ")))]
+ ""
+ "add%? %0,%1,%2")
+
+(define_insn "*addsi3_set_cc_insn"
+ [(set (reg:CC 61) (compare:CC
+ (plus:SI (match_operand:SI 1 "register_operand" "%r")
+ (match_operand:SI 2 "nonmemory_operand" "rIJ"))
+ (const_int 0)))
+ (set (match_operand:SI 0 "register_operand" "=r")
+ (plus:SI (match_dup 1)
+ (match_dup 2)))]
+ ""
+ "add%?.f %0,%1,%2"
+ [(set_attr "cond" "set")])
+
+(define_insn "adddi3"
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (plus:DI (match_operand:DI 1 "nonmemory_operand" "%r")
+ (match_operand:DI 2 "nonmemory_operand" "ri")))
+ (clobber (reg:CC 61))]
+ ""
+ "*
+{
+ rtx op2 = operands[2];
+
+ if (GET_CODE (op2) == CONST_INT)
+ {
+ int sign = INTVAL (op2);
+ if (sign < 0)
+ return \"add.f %L0,%L1,%2\;adc %H0,%H1,-1\";
+ else
+ return \"add.f %L0,%L1,%2\;adc %H0,%H1,0\";
+ }
+ else
+ return \"add.f %L0,%L1,%L2\;adc %H0,%H1,%H2\";
+}"
+ [(set_attr "length" "2")])
+
+(define_insn "subsi3"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (minus:SI (match_operand:SI 1 "register_operand" "r")
+ (match_operand:SI 2 "nonmemory_operand" "rIJ")))]
+ ""
+ "sub%? %0,%1,%2")
+
+(define_insn "*subsi3_set_cc_insn"
+ [(set (reg:CC 61) (compare:CC
+ (minus:SI (match_operand:SI 1 "register_operand" "%r")
+ (match_operand:SI 2 "nonmemory_operand" "rIJ"))
+ (const_int 0)))
+ (set (match_operand:SI 0 "register_operand" "=r")
+ (minus:SI (match_dup 1)
+ (match_dup 2)))]
+ ""
+ "sub%?.f %0,%1,%2"
+ [(set_attr "cond" "set")])
+
+(define_insn "subdi3"
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (minus:DI (match_operand:DI 1 "nonmemory_operand" "r")
+ (match_operand:DI 2 "nonmemory_operand" "ri")))
+ (clobber (reg:CC 61))]
+ ""
+ "*
+{
+ rtx op2 = operands[2];
+
+ if (GET_CODE (op2) == CONST_INT)
+ {
+ int sign = INTVAL (op2);
+ if (sign < 0)
+ return \"sub.f %L0,%L1,%2\;sbc %H0,%H1,-1\";
+ else
+ return \"sub.f %L0,%L1,%2\;sbc %H0,%H1,0\";
+ }
+ else
+ return \"sub.f %L0,%L1,%L2\;sbc %H0,%H1,%H2\";
+}"
+ [(set_attr "length" "2")])
+
+;; Boolean instructions.
+;;
+;; We don't define the DImode versions as expand_binop does a good enough job.
+
+(define_insn "andsi3"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (and:SI (match_operand:SI 1 "register_operand" "%r")
+ (match_operand:SI 2 "nonmemory_operand" "rIJ")))]
+ ""
+ "and%? %0,%1,%2")
+
+(define_insn "*andsi3_set_cc_insn"
+ [(set (reg:CCZN 61) (compare:CCZN
+ (and:SI (match_operand:SI 1 "register_operand" "%r")
+ (match_operand:SI 2 "nonmemory_operand" "rIJ"))
+ (const_int 0)))
+ (set (match_operand:SI 0 "register_operand" "=r")
+ (and:SI (match_dup 1)
+ (match_dup 2)))]
+ ""
+ "and%?.f %0,%1,%2"
+ [(set_attr "cond" "set_zn")])
+
+(define_insn "*bicsi3_insn"
+ [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
+ (and:SI (match_operand:SI 1 "nonmemory_operand" "r,r,I,J")
+ (not:SI (match_operand:SI 2 "nonmemory_operand" "rI,J,r,r"))))]
+ ""
+ "bic%? %0,%1,%2"
+ [(set_attr "length" "1,2,1,2")])
+
+(define_insn "*bicsi3_set_cc_insn"
+ [(set (reg:CCZN 61) (compare:CCZN
+ (and:SI (match_operand:SI 1 "register_operand" "%r")
+ (not:SI (match_operand:SI 2 "nonmemory_operand" "rIJ")))
+ (const_int 0)))
+ (set (match_operand:SI 0 "register_operand" "=r")
+ (and:SI (match_dup 1)
+ (not:SI (match_dup 2))))]
+ ""
+ "bic%?.f %0,%1,%2"
+ [(set_attr "cond" "set_zn")])
+
+(define_insn "iorsi3"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (ior:SI (match_operand:SI 1 "register_operand" "%r")
+ (match_operand:SI 2 "nonmemory_operand" "rIJ")))]
+ ""
+ "or%? %0,%1,%2")
+
+(define_insn "*iorsi3_set_cc_insn"
+ [(set (reg:CCZN 61) (compare:CCZN
+ (ior:SI (match_operand:SI 1 "register_operand" "%r")
+ (match_operand:SI 2 "nonmemory_operand" "rIJ"))
+ (const_int 0)))
+ (set (match_operand:SI 0 "register_operand" "=r")
+ (ior:SI (match_dup 1)
+ (match_dup 2)))]
+ ""
+ "or%?.f %0,%1,%2"
+ [(set_attr "cond" "set_zn")])
+
+(define_insn "xorsi3"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (xor:SI (match_operand:SI 1 "register_operand" "%r")
+ (match_operand:SI 2 "nonmemory_operand" "rIJ")))]
+ ""
+ "xor%? %0,%1,%2")
+
+(define_insn "*xorsi3_set_cc_insn"
+ [(set (reg:CCZN 61) (compare:CCZN
+ (xor:SI (match_operand:SI 1 "register_operand" "%r")
+ (match_operand:SI 2 "nonmemory_operand" "rIJ"))
+ (const_int 0)))
+ (set (match_operand:SI 0 "register_operand" "=r")
+ (xor:SI (match_dup 1)
+ (match_dup 2)))]
+ ""
+ "xor%?.f %0,%1,%2"
+ [(set_attr "cond" "set_zn")])
+
+(define_insn "negsi2"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (neg:SI (match_operand:SI 1 "register_operand" "r")))]
+ ""
+ "sub%? %0,0,%1"
+ [(set_attr "type" "unary")])
+
+(define_insn "*negsi2_set_cc_insn"
+ [(set (reg:CC 61) (compare:CC
+ (neg:SI (match_operand:SI 1 "register_operand" "r"))
+ (const_int 0)))
+ (set (match_operand:SI 0 "register_operand" "=r")
+ (neg:SI (match_dup 1)))]
+ ""
+ "sub%?.f %0,0,%1"
+ [(set_attr "type" "unary")
+ (set_attr "cond" "set")])
+
+(define_insn "negdi2"
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (neg:DI (match_operand:DI 1 "register_operand" "r")))
+ (clobber (reg:SI 61))]
+ ""
+ "sub.f %L0,0,%L1\;sbc %H0,0,%H1"
+ [(set_attr "type" "unary")
+ (set_attr "length" "2")])
+
+(define_insn "one_cmplsi2"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (not:SI (match_operand:SI 1 "register_operand" "r")))]
+ ""
+ "xor%? %0,%1,-1"
+ [(set_attr "type" "unary")])
+
+(define_insn "*one_cmplsi2_set_cc_insn"
+ [(set (reg:CCZN 61) (compare:CC
+ (not:SI (match_operand:SI 1 "register_operand" "r"))
+ (const_int 0)))
+ (set (match_operand:SI 0 "register_operand" "=r")
+ (not:SI (match_dup 1)))]
+ ""
+ "xor%?.f %0,%1,-1"
+ [(set_attr "type" "unary")
+ (set_attr "cond" "set_zn")])
+
+;; Shift instructions.
+
+(define_expand "ashlsi3"
+ [(set (match_operand:SI 0 "register_operand" "")
+ (ashift:SI (match_operand:SI 1 "register_operand" "")
+ (match_operand:SI 2 "nonmemory_operand" "")))]
+ ""
+ "
+{
+ if (! TARGET_SHIFTER)
+ {
+ emit_insn (gen_rtx
+ (PARALLEL, VOIDmode,
+ gen_rtvec (2,
+ gen_rtx (SET, VOIDmode, operands[0],
+ gen_rtx (ASHIFT, SImode, operands[1], operands[2])),
+ gen_rtx (CLOBBER, VOIDmode, gen_rtx (SCRATCH, SImode, 0)))));
+ DONE;
+ }
+}")
+
+(define_expand "ashrsi3"
+ [(set (match_operand:SI 0 "register_operand" "")
+ (ashiftrt:SI (match_operand:SI 1 "register_operand" "")
+ (match_operand:SI 2 "nonmemory_operand" "")))]
+ ""
+ "
+{
+ if (! TARGET_SHIFTER)
+ {
+ emit_insn (gen_rtx
+ (PARALLEL, VOIDmode,
+ gen_rtvec (2,
+ gen_rtx (SET, VOIDmode, operands[0],
+ gen_rtx (ASHIFTRT, SImode, operands[1], operands[2])),
+ gen_rtx (CLOBBER, VOIDmode, gen_rtx (SCRATCH, SImode, 0)))));
+ DONE;
+ }
+}")
+
+(define_expand "lshrsi3"
+ [(set (match_operand:SI 0 "register_operand" "")
+ (lshiftrt:SI (match_operand:SI 1 "register_operand" "")
+ (match_operand:SI 2 "nonmemory_operand" "")))]
+ ""
+ "
+{
+ if (! TARGET_SHIFTER)
+ {
+ emit_insn (gen_rtx
+ (PARALLEL, VOIDmode,
+ gen_rtvec (2,
+ gen_rtx (SET, VOIDmode, operands[0],
+ gen_rtx (LSHIFTRT, SImode, operands[1], operands[2])),
+ gen_rtx (CLOBBER, VOIDmode, gen_rtx (SCRATCH, SImode, 0)))));
+ DONE;
+ }
+}")
+
+(define_insn "*ashlsi3_insn"
+ [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
+ (ashift:SI (match_operand:SI 1 "nonmemory_operand" "r,r,I,J")
+ (match_operand:SI 2 "nonmemory_operand" "rI,J,r,r")))]
+ "TARGET_SHIFTER"
+ "asl%? %0,%1,%2"
+ [(set_attr "type" "shift")
+ (set_attr "length" "1,2,1,2")])
+
+(define_insn "*ashrsi3_insn"
+ [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
+ (ashiftrt:SI (match_operand:SI 1 "nonmemory_operand" "r,r,I,J")
+ (match_operand:SI 2 "nonmemory_operand" "rI,J,r,r")))]
+ "TARGET_SHIFTER"
+ "asr%? %0,%1,%2"
+ [(set_attr "type" "shift")
+ (set_attr "length" "1,2,1,2")])
+
+(define_insn "*lshrsi3_insn"
+ [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
+ (lshiftrt:SI (match_operand:SI 1 "nonmemory_operand" "r,r,I,J")
+ (match_operand:SI 2 "nonmemory_operand" "rI,J,r,r")))]
+ "TARGET_SHIFTER"
+ "lsr%? %0,%1,%2"
+ [(set_attr "type" "shift")
+ (set_attr "length" "1,2,1,2")])
+
+(define_insn "*shift_si3"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (match_operator:SI 3 "shift_operator"
+ [(match_operand:SI 1 "register_operand" "0")
+ (match_operand:SI 2 "nonmemory_operand" "rIJ")]))
+ (clobber (match_scratch:SI 4 "=&r"))]
+ "! TARGET_SHIFTER"
+ "* return output_shift (operands);"
+ [(set_attr "type" "shift")
+ (set_attr "length" "8")])
+
+;; Compare instructions.
+;; This controls RTL generation and register allocation.
+
+;; We generate RTL for comparisons and branches by having the cmpxx
+;; patterns store away the operands. Then, the scc and bcc patterns
+;; emit RTL for both the compare and the branch.
+
+(define_expand "cmpsi"
+ [(set (reg:CC 61)
+ (compare:CC (match_operand:SI 0 "register_operand" "")
+ (match_operand:SI 1 "nonmemory_operand" "")))]
+ ""
+ "
+{
+ arc_compare_op0 = operands[0];
+ arc_compare_op1 = operands[1];
+ DONE;
+}")
+
+;; ??? We may be able to relax this a bit by adding a new constant 'K' for 0.
+;; This assumes sub.f 0,symbol,0 is a valid insn.
+;; Note that "sub.f 0,r0,1" is an 8 byte insn. To avoid unnecessarily
+;; creating 8 byte insns we duplicate %1 in the destination reg of the insn
+;; if it's a small constant.
+
+(define_insn "*cmpsi_cc_insn"
+ [(set (reg:CC 61)
+ (compare:CC (match_operand:SI 0 "register_operand" "r,r,r")
+ (match_operand:SI 1 "nonmemory_operand" "r,I,J")))]
+ ""
+ "@
+ sub.f 0,%0,%1
+ sub.f %1,%0,%1
+ sub.f 0,%0,%1"
+ [(set_attr "type" "compare,compare,compare")])
+
+(define_insn "*cmpsi_cczn_insn"
+ [(set (reg:CCZN 61)
+ (compare:CCZN (match_operand:SI 0 "register_operand" "r,r,r")
+ (match_operand:SI 1 "nonmemory_operand" "r,I,J")))]
+ ""
+ "@
+ sub.f 0,%0,%1
+ sub.f %1,%0,%1
+ sub.f 0,%0,%1"
+ [(set_attr "type" "compare,compare,compare")])
+
+(define_insn "*cmpsi_ccznc_insn"
+ [(set (reg:CCZNC 61)
+ (compare:CCZNC (match_operand:SI 0 "register_operand" "r,r,r")
+ (match_operand:SI 1 "nonmemory_operand" "r,I,J")))]
+ ""
+ "@
+ sub.f 0,%0,%1
+ sub.f %1,%0,%1
+ sub.f 0,%0,%1"
+ [(set_attr "type" "compare,compare,compare")])
+
+;; Next come the scc insns.
+
+(define_expand "seq"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (eq:SI (match_dup 1) (const_int 0)))]
+ ""
+ "
+{
+ operands[1] = gen_compare_reg (EQ, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "sne"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (ne:SI (match_dup 1) (const_int 0)))]
+ ""
+ "
+{
+ operands[1] = gen_compare_reg (NE, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "sgt"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (gt:SI (match_dup 1) (const_int 0)))]
+ ""
+ "
+{
+ operands[1] = gen_compare_reg (GT, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "sle"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (le:SI (match_dup 1) (const_int 0)))]
+ ""
+ "
+{
+ operands[1] = gen_compare_reg (LE, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "sge"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (ge:SI (match_dup 1) (const_int 0)))]
+ ""
+ "
+{
+ operands[1] = gen_compare_reg (GE, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "slt"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (lt:SI (match_dup 1) (const_int 0)))]
+ ""
+ "
+{
+ operands[1] = gen_compare_reg (LT, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "sgtu"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (gtu:SI (match_dup 1) (const_int 0)))]
+ ""
+ "
+{
+ operands[1] = gen_compare_reg (GTU, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "sleu"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (leu:SI (match_dup 1) (const_int 0)))]
+ ""
+ "
+{
+ operands[1] = gen_compare_reg (LEU, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "sgeu"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (geu:SI (match_dup 1) (const_int 0)))]
+ ""
+ "
+{
+ operands[1] = gen_compare_reg (GEU, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "sltu"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (ltu:SI (match_dup 1) (const_int 0)))]
+ ""
+ "
+{
+ operands[1] = gen_compare_reg (LTU, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_insn "*scc_insn"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (match_operator:SI 1 "comparison_operator" [(reg 61) (const_int 0)]))]
+ ""
+ "mov %0,1\;sub.%D1 %0,%0,%0"
+ [(set_attr "type" "unary")
+ (set_attr "length" "2")])
+
+;; ??? Look up negscc insn. See pa.md for example.
+(define_insn "*neg_scc_insn"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (neg:SI (match_operator:SI 1 "comparison_operator"
+ [(reg 61) (const_int 0)])))]
+ ""
+ "mov %0,-1\;sub.%D1 %0,%0,%0"
+ [(set_attr "type" "unary")
+ (set_attr "length" "2")])
+
+(define_insn "*not_scc_insn"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (not:SI (match_operator:SI 1 "comparison_operator"
+ [(reg 61) (const_int 0)])))]
+ ""
+ "mov %0,1\;sub.%d1 %0,%0,%0"
+ [(set_attr "type" "unary")
+ (set_attr "length" "2")])
+
+;; These control RTL generation for conditional jump insns
+
+(define_expand "beq"
+ [(set (pc)
+ (if_then_else (eq (match_dup 1) (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "
+{
+ operands[1] = gen_compare_reg (EQ, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "bne"
+ [(set (pc)
+ (if_then_else (ne (match_dup 1) (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "
+{
+ operands[1] = gen_compare_reg (NE, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "bgt"
+ [(set (pc)
+ (if_then_else (gt (match_dup 1) (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "
+{
+ operands[1] = gen_compare_reg (GT, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "ble"
+ [(set (pc)
+ (if_then_else (le (match_dup 1) (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "
+{
+ operands[1] = gen_compare_reg (LE, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "bge"
+ [(set (pc)
+ (if_then_else (ge (match_dup 1) (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "
+{
+ operands[1] = gen_compare_reg (GE, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "blt"
+ [(set (pc)
+ (if_then_else (lt (match_dup 1) (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "
+{
+ operands[1] = gen_compare_reg (LT, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "bgtu"
+ [(set (pc)
+ (if_then_else (gtu (match_dup 1) (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "
+{
+ operands[1] = gen_compare_reg (GTU, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "bleu"
+ [(set (pc)
+ (if_then_else (leu (match_dup 1) (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "
+{
+ operands[1] = gen_compare_reg (LEU, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "bgeu"
+ [(set (pc)
+ (if_then_else (geu (match_dup 1) (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "
+{
+ operands[1] = gen_compare_reg (GEU, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "bltu"
+ [(set (pc)
+ (if_then_else (ltu (match_dup 1) (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "
+{
+ operands[1] = gen_compare_reg (LTU, arc_compare_op0, arc_compare_op1);
+}")
+
+;; Now match both normal and inverted jump.
+
+(define_insn "*branch_insn"
+ [(set (pc)
+ (if_then_else (match_operator 1 "proper_comparison_operator"
+ [(reg 61) (const_int 0)])
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "*
+{
+ if (arc_ccfsm_branch_deleted_p ())
+ {
+ arc_ccfsm_record_branch_deleted ();
+ return \"; branch deleted, next insns conditionalized\";
+ }
+ else
+ return \"%~b%d1%# %l0\";
+}"
+ [(set_attr "type" "branch")])
+
+(define_insn "*rev_branch_insn"
+ [(set (pc)
+ (if_then_else (match_operator 1 "proper_comparison_operator"
+ [(reg 61) (const_int 0)])
+ (pc)
+ (label_ref (match_operand 0 "" ""))))]
+ "REVERSIBLE_CC_MODE (GET_MODE (XEXP (operands[1], 0)))"
+ "*
+{
+ if (arc_ccfsm_branch_deleted_p ())
+ {
+ arc_ccfsm_record_branch_deleted ();
+ return \"; branch deleted, next insns conditionalized\";
+ }
+ else
+ return \"%~b%D1%# %l0\";
+}"
+ [(set_attr "type" "branch")])
+
+;; Unconditional and other jump instructions.
+
+(define_insn "jump"
+ [(set (pc) (label_ref (match_operand 0 "" "")))]
+ ""
+ "b%* %l0"
+ [(set_attr "type" "uncond_branch")])
+
+(define_insn "indirect_jump"
+ [(set (pc) (match_operand:SI 0 "address_operand" "p"))]
+ ""
+ "j%* %a0"
+ [(set_attr "type" "uncond_branch")])
+
+;; Implement a switch statement.
+;; This wouldn't be necessary in the non-pic case if we could distinguish
+;; label refs of the jump table from other label refs. The problem is that
+;; label refs are output as "%st(.LL42)" but we don't want the %st - we want
+;; the real address since it's the address of the table.
+
+(define_expand "casesi"
+ [(set (match_dup 5)
+ (minus:SI (match_operand:SI 0 "register_operand" "")
+ (match_operand:SI 1 "nonmemory_operand" "")))
+ (set (reg:CC 61)
+ (compare:CC (match_dup 5)
+ (match_operand:SI 2 "nonmemory_operand" "")))
+ (set (pc)
+ (if_then_else (gtu (reg:CC 61)
+ (const_int 0))
+ (label_ref (match_operand 4 "" ""))
+ (pc)))
+ (parallel
+ [(set (pc)
+ (mem:SI (plus:SI (mult:SI (match_dup 5)
+ (const_int 4))
+ (label_ref (match_operand 3 "" "")))))
+ (clobber (match_scratch:SI 6 ""))
+ (clobber (match_scratch:SI 7 ""))])]
+ ""
+ "
+{
+ operands[5] = gen_reg_rtx (SImode);
+}")
+
+(define_insn "*casesi_insn"
+ [(set (pc)
+ (mem:SI (plus:SI (mult:SI (match_operand:SI 0 "register_operand" "r")
+ (const_int 4))
+ (label_ref (match_operand 1 "" "")))))
+ (clobber (match_scratch:SI 2 "=r"))
+ (clobber (match_scratch:SI 3 "=r"))]
+ ""
+ "*
+{
+ output_asm_insn (\"mov %2,%1\", operands);
+ if (TARGET_SHIFTER)
+ output_asm_insn (\"asl %3,%0,2\", operands);
+ else
+ output_asm_insn (\"asl %3,%0\;asl %3,%3\", operands);
+ output_asm_insn (\"ld %2,[%2,%3]\", operands);
+ output_asm_insn (\"j.nd %a2\", operands);
+ return \"\";
+}"
+ [(set_attr "type" "uncond_branch")
+ (set_attr "length" "6")])
+
+(define_insn "tablejump"
+ [(set (pc) (match_operand:SI 0 "address_operand" "p"))
+ (use (label_ref (match_operand 1 "" "")))]
+ "0 /* disabled -> using casesi now */"
+ "j%* %a0"
+ [(set_attr "type" "uncond_branch")])
+
+(define_expand "call"
+ ;; operands[1] is stack_size_rtx
+ ;; operands[2] is next_arg_register
+ [(parallel [(call (match_operand:SI 0 "call_operand" "")
+ (match_operand 1 "" ""))
+ (clobber (reg:SI 31))])]
+ ""
+ "")
+
+(define_insn "*call_via_reg"
+ [(call (mem:SI (match_operand:SI 0 "register_operand" "r"))
+ (match_operand 1 "" ""))
+ (clobber (reg:SI 31))]
+ ""
+ "lr blink,[status]\;j.d %0\;add blink,blink,2"
+ [(set_attr "type" "call_no_delay_slot")
+ (set_attr "length" "3")])
+
+(define_insn "*call_via_label"
+ [(call (mem:SI (match_operand:SI 0 "call_address_operand" ""))
+ (match_operand 1 "" ""))
+ (clobber (reg:SI 31))]
+ ""
+ ; The %~ is necessary in case this insn gets conditionalized and the previous
+ ; insn is the cc setter.
+ "%~bl%!%* %0"
+ [(set_attr "type" "call")
+ (set_attr "cond" "canuse")])
+
+(define_expand "call_value"
+ ;; operand 2 is stack_size_rtx
+ ;; operand 3 is next_arg_register
+ [(parallel [(set (match_operand 0 "register_operand" "=r")
+ (call (match_operand:SI 1 "call_operand" "")
+ (match_operand 2 "" "")))
+ (clobber (reg:SI 31))])]
+ ""
+ "")
+
+(define_insn "*call_value_via_reg"
+ [(set (match_operand 0 "register_operand" "=r")
+ (call (mem:SI (match_operand:SI 1 "register_operand" "r"))
+ (match_operand 2 "" "")))
+ (clobber (reg:SI 31))]
+ ""
+ "lr blink,[status]\;j.d %1\;add blink,blink,2"
+ [(set_attr "type" "call_no_delay_slot")
+ (set_attr "length" "3")])
+
+(define_insn "*call_value_via_label"
+ [(set (match_operand 0 "register_operand" "=r")
+ (call (mem:SI (match_operand:SI 1 "call_address_operand" ""))
+ (match_operand 2 "" "")))
+ (clobber (reg:SI 31))]
+ ""
+ ; The %~ is necessary in case this insn gets conditionalized and the previous
+ ; insn is the cc setter.
+ "%~bl%!%* %1"
+ [(set_attr "type" "call")
+ (set_attr "cond" "canuse")])
+
+(define_insn "nop"
+ [(const_int 0)]
+ ""
+ "nop"
+ [(set_attr "type" "misc")])
+
+;; Special pattern to flush the icache.
+;; ??? Not sure what to do here. Some ARC's are known to support this.
+
+(define_insn "flush_icache"
+ [(unspec_volatile [(match_operand 0 "memory_operand" "m")] 0)]
+ ""
+ "* return \"\";"
+ [(set_attr "type" "misc")])
+
+;; Split up troublesome insns for better scheduling.
+
+;; Peepholes go at the end.
diff --git a/gcc/config/arc/initfini.c b/gcc/config/arc/initfini.c
new file mode 100644
index 00000000000..084e2292bf5
--- /dev/null
+++ b/gcc/config/arc/initfini.c
@@ -0,0 +1,157 @@
+/* .init/.fini section handling + C++ global constructor/destructor handling.
+ This file is based on crtstuff.c, sol2-crti.asm, sol2-crtn.asm.
+
+Copyright (C) 1995, 1997 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.
+
+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. */
+
+/* As a special exception, if you link this file with files
+ compiled with GCC to produce an executable, this does not cause
+ the resulting executable to be covered by the GNU General Public License.
+ This exception does not however invalidate any other reasons why
+ the executable file might be covered by the GNU General Public License. */
+
+/* Declare a pointer to void function type. */
+typedef void (*func_ptr) (void);
+
+#ifdef CRT_INIT
+
+/* NOTE: In order to be able to support SVR4 shared libraries, we arrange
+ to have one set of symbols { __CTOR_LIST__, __DTOR_LIST__, __CTOR_END__,
+ __DTOR_END__ } per root executable and also one set of these symbols
+ per shared library. So in any given whole process image, we may have
+ multiple definitions of each of these symbols. In order to prevent
+ these definitions from conflicting with one another, and in order to
+ ensure that the proper lists are used for the initialization/finalization
+ of each individual shared library (respectively), we give these symbols
+ only internal (i.e. `static') linkage, and we also make it a point to
+ refer to only the __CTOR_END__ symbol in crtfini.o and the __DTOR_LIST__
+ symbol in crtinit.o, where they are defined. */
+
+static func_ptr __CTOR_LIST__[1] __attribute__ ((section (".ctors")))
+ = { (func_ptr) (-1) };
+
+static func_ptr __DTOR_LIST__[1] __attribute__ ((section (".dtors")))
+ = { (func_ptr) (-1) };
+
+/* Run all the global destructors on exit from the program. */
+
+/* Some systems place the number of pointers in the first word of the
+ table. On SVR4 however, that word is -1. In all cases, the table is
+ null-terminated. On SVR4, we start from the beginning of the list and
+ invoke each per-compilation-unit destructor routine in order
+ until we find that null.
+
+ Note that this function MUST be static. There will be one of these
+ functions in each root executable and one in each shared library, but
+ although they all have the same code, each one is unique in that it
+ refers to one particular associated `__DTOR_LIST__' which belongs to the
+ same particular root executable or shared library file. */
+
+static void __do_global_dtors ()
+asm ("__do_global_dtors") __attribute__ ((section (".text")));
+
+static void
+__do_global_dtors ()
+{
+ func_ptr *p;
+ for (p = __DTOR_LIST__ + 1; *p; p++)
+ (*p) ();
+}
+
+/* .init section start.
+ This must appear at the start of the .init section. */
+
+asm ("
+ .section .init\n
+ .global init\n
+ .word 0\n
+init:\n
+ st blink,[sp,4]\n
+ st fp,[sp]\n
+ mov fp,sp\n
+ sub sp,sp,16\n
+");
+
+/* .fini section start.
+ This must appear at the start of the .init section. */
+
+asm ("
+ .section .fini\n
+ .global fini\n
+ .word 0\n
+fini:\n
+ st blink,[sp,4]\n
+ st fp,[sp]\n
+ mov fp,sp\n
+ sub sp,sp,16\n
+ bl.nd __do_global_dtors
+");
+
+#endif /* CRT_INIT */
+
+#ifdef CRT_FINI
+
+/* Put a word containing zero at the end of each of our two lists of function
+ addresses. Note that the words defined here go into the .ctors and .dtors
+ sections of the crtend.o file, and since that file is always linked in
+ last, these words naturally end up at the very ends of the two lists
+ contained in these two sections. */
+
+static func_ptr __CTOR_END__[1] __attribute__ ((section (".ctors")))
+ = { (func_ptr) 0 };
+
+static func_ptr __DTOR_END__[1] __attribute__ ((section (".dtors")))
+ = { (func_ptr) 0 };
+
+/* Run all global constructors for the program.
+ Note that they are run in reverse order. */
+
+static void __do_global_ctors ()
+asm ("__do_global_ctors") __attribute__ ((section (".text")));
+
+static void
+__do_global_ctors ()
+{
+ func_ptr *p;
+ for (p = __CTOR_END__ - 1; *p != (func_ptr) -1; p--)
+ (*p) ();
+}
+
+/* .init section end.
+ This must live at the end of the .init section. */
+
+asm ("
+ .section .init\n
+ bl.nd __do_global_ctors
+ ld blink,[fp,4]\n
+ j.d blink\n
+ ld.a fp,[sp,16]\n
+");
+
+/* .fini section end.
+ This must live at the end of the .fini section. */
+
+asm ("
+ .section .fini\n
+ ld blink,[fp,4]\n
+ j.d blink\n
+ ld.a fp,[sp,16]\n
+");
+
+#endif /* CRT_FINI */
diff --git a/gcc/config/arc/lib1funcs.asm b/gcc/config/arc/lib1funcs.asm
new file mode 100644
index 00000000000..a2d509ac765
--- /dev/null
+++ b/gcc/config/arc/lib1funcs.asm
@@ -0,0 +1,273 @@
+; libgcc1 routines for ARC cpu.
+
+/* Copyright (C) 1995, 1997 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 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 with other programs, and to distribute
+those programs 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 another program.)
+
+This file 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. */
+
+/* As a special exception, if you link this library with other files,
+ some of which are compiled with GCC, to produce an executable,
+ this library does not by itself cause the resulting executable
+ to be covered by the GNU General Public License.
+ This exception does not however invalidate any other reasons why
+ the executable file might be covered by the GNU General Public License. */
+
+#ifdef L_mulsi3
+ .section .text
+ .align 4
+
+#ifdef __base__
+ .cpu base
+ .global ___mulsi3
+___mulsi3:
+
+/* This the simple version.
+
+ while (a)
+ {
+ if (a & 1)
+ r += b;
+ a >>= 1;
+ b <<= 1;
+ }
+*/
+ mov r2,0 ; Accumulate result here.
+.Lloop:
+ sub.f 0,r0,0 ; while (a)
+ nop
+ beq.nd .Ldone
+ and.f 0,r0,1 ; if (a & 1)
+ add.nz r2,r2,r1 ; r += b
+ lsr r0,r0 ; a >>= 1
+ b.d .Lloop
+ lsl r1,r1 ; b <<= 1
+.Ldone:
+ j.d blink
+ mov r0,r2
+#endif
+
+#endif /* L_mulsi3 */
+
+#ifdef L_umulsidi3
+ .section .text
+ .align 4
+
+#ifdef __base__
+ .cpu base
+ .global ___umulsidi3
+___umulsidi3:
+
+/* This the simple version.
+
+ while (a)
+ {
+ if (a & 1)
+ r += b;
+ a >>= 1;
+ b <<= 1;
+ }
+*/
+ mov r2,0 ; Top part of b.
+ mov r3,0 ; Accumulate result here.
+ mov r4,0
+.Lloop:
+ sub.f 0,r0,0 ; while (a)
+ nop
+ beq.nd .Ldone
+ and.f 0,r0,1 ; if (a & 1)
+ add.nz r4,r4,r1 ; r += b
+ adc.nz r3,r3,r2
+ lsr r0,r0 ; a >>= 1
+ lsl.f r1,r1 ; b <<= 1
+ b.d .Lloop
+ rlc r2,r2
+.Ldone:
+#ifdef __big_endian__
+ mov r1,r4
+ j.d blink
+ mov r0,r3
+#else
+ mov r0,r4
+ j.d blink
+ mov r1,r3
+#endif
+#endif
+
+#endif /* L_umulsidi3 */
+
+#ifdef L_divmod_tools
+
+; Utilities used by all routines.
+
+ .section .text
+ .align 4
+
+; inputs: r0 = numerator, r1 = denominator
+; outputs: positive r0/r1,
+; r6.bit1 = sign of numerator, r6.bit0 = sign of result
+
+ .global ___divnorm
+___divnorm:
+ mov r6,0 ; keep sign in r6
+ sub.f 0,r0,0 ; is numerator -ve?
+ sub.lt r0,0,r0 ; negate numerator
+ mov.lt r6,3 ; sign is -ve
+ sub.f 0,r1,0 ; is denominator -ve?
+ sub.lt r1,0,r1 ; negate denominator
+ xor.lt r6,r6,1 ; toggle sign
+ j.nd blink
+
+/*
+unsigned long
+udivmodsi4(int modwanted, unsigned long num, unsigned long den)
+{
+ unsigned long bit = 1;
+ unsigned long res = 0;
+
+ while (den < num && bit && !(den & (1L<<31)))
+ {
+ den <<=1;
+ bit <<=1;
+ }
+ while (bit)
+ {
+ if (num >= den)
+ {
+ num -= den;
+ res |= bit;
+ }
+ bit >>=1;
+ den >>=1;
+ }
+ if (modwanted) return num;
+ return res;
+}
+*/
+
+; inputs: r0 = numerator, r1 = denominator
+; outputs: r0 = quotient, r1 = remainder, r2/r3 trashed
+
+ .global ___udivmodsi4
+___udivmodsi4:
+ mov r2,1 ; bit = 1
+ mov r3,0 ; res = 0
+.Lloop1:
+ sub.f 0,r1,r0 ; while (den < num
+ nop
+ bnc.nd .Lloop2
+ sub.f 0,r2,0 ; && bit
+ nop
+ bz.nd .Lloop2
+ lsl.f 0,r1 ; && !(den & (1<<31))
+ nop
+ bc.nd .Lloop2
+ lsl r1,r1 ; den <<= 1
+ b.d .Lloop1
+ lsl r2,r2 ; bit <<= 1
+.Lloop2:
+ sub.f 0,r2,0 ; while (bit)
+ nop
+ bz.nd .Ldivmodend
+ sub.f 0,r0,r1 ; if (num >= den)
+ nop
+ bc.nd .Lshiftdown
+ sub r0,r0,r1 ; num -= den
+ or r3,r3,r2 ; res |= bit
+.Lshiftdown:
+ lsr r2,r2 ; bit >>= 1
+ b.d .Lloop2
+ lsr r1,r1 ; den >>= 1
+.Ldivmodend:
+ mov r1,r0 ; r1 = mod
+ j.d blink
+ mov r0,r3 ; r0 = res
+
+#endif
+
+#ifdef L_udivsi3
+ .section .text
+ .align 4
+
+#ifdef __base__
+ .cpu base
+ .global ___udivsi3
+___udivsi3:
+ mov r7,blink
+ bl.nd ___udivmodsi4
+ j.nd r7
+#endif
+
+#endif /* L_udivsi3 */
+
+#ifdef L_divsi3
+ .section .text
+ .align 4
+
+#ifdef __base__
+ .cpu base
+ .global ___divsi3
+___divsi3:
+ mov r7,blink
+ bl.nd ___divnorm
+ bl.nd ___udivmodsi4
+ and.f 0,r6,1
+ sub.nz r0,0,r0 ; cannot go in delay slot, has limm value
+ j.nd r7
+#endif
+
+#endif /* L_divsi3 */
+
+#ifdef L_umodsi3
+ .section .text
+ .align 4
+
+#ifdef __base__
+ .cpu base
+ .global ___umodsi3
+___umodsi3:
+ mov r7,blink
+ bl.nd ___udivmodsi4
+ j.d r7
+ mov r0,r1
+#endif
+
+#endif /* L_umodsi3 */
+
+#ifdef L_modsi3
+ .section .text
+ .align 4
+
+#ifdef __base__
+ .cpu base
+ .global ___modsi3
+___modsi3:
+ mov r7,blink
+ bl.nd ___divnorm
+ bl.nd ___udivmodsi4
+ and.f 0,r6,2
+ sub.nz r1,0,r1
+ j.d r7
+ mov r0,r1
+#endif
+
+#endif /* L_modsi3 */
diff --git a/gcc/config/arc/t-arc b/gcc/config/arc/t-arc
new file mode 100644
index 00000000000..d922c27ca5f
--- /dev/null
+++ b/gcc/config/arc/t-arc
@@ -0,0 +1,72 @@
+CROSS_LIBGCC1 = libgcc1-asm.a
+LIB1ASMSRC = arc/lib1funcs.asm
+LIB1ASMFUNCS = _mulsi3 _umulsidi3 _udivsi3 _divsi3 _umodsi3 _modsi3 _divmod_tools
+
+# We need libgcc routines to be mangled according to which cpu they
+# were compiled for.
+# ??? -mmangle-cpu passed by default for now.
+#LIBGCC2_CFLAGS = -g1 -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) -mmangle-cpu
+
+# These are really part of libgcc1, but this will cause them to be
+# built correctly, so...
+
+LIB2FUNCS_EXTRA = fp-bit.c dp-bit.c
+
+dp-bit.c: $(srcdir)/config/fp-bit.c
+ echo '#ifndef __big_endian__' > dp-bit.c
+ echo '#define FLOAT_BIT_ORDER_MISMATCH' >> dp-bit.c
+ echo '#endif' >> dp-bit.c
+ cat $(srcdir)/config/fp-bit.c >> dp-bit.c
+
+fp-bit.c: $(srcdir)/config/fp-bit.c
+ echo '#define FLOAT' > fp-bit.c
+ echo '#ifndef __big_endian__' >> fp-bit.c
+ echo '#define FLOAT_BIT_ORDER_MISMATCH' >> fp-bit.c
+ echo '#endif' >> fp-bit.c
+ cat $(srcdir)/config/fp-bit.c >> fp-bit.c
+
+# .init/.fini section routines
+
+x-crtinit.o: $(srcdir)/config/arc/initfini.c $(GCC_PASSES) $(CONFIG_H)
+ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS) \
+ -DCRT_INIT -finhibit-size-directive -fno-inline-functions \
+ -g0 -c $(srcdir)/config/arc/initfini.c -o $(dir)/crtinit.o
+
+x-crtfini.o: $(srcdir)/config/arc/initfini.c $(GCC_PASSES) $(CONFIG_H)
+ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS) \
+ -DCRT_FINI -finhibit-size-directive -fno-inline-functions \
+ -g0 -c $(srcdir)/config/arc/initfini.c -o $(dir)/crtfini.o
+
+MULTILIB_OPTIONS = EB
+MULTILIB_DIRNAMES = be
+
+# We need our own versions to build multiple copies of crt*.o.
+# ??? Use new support in Makefile.
+
+LIBGCC = stmp-multilib-arc
+INSTALL_LIBGCC = install-multilib-arc
+
+stmp-multilib-arc: stmp-multilib
+ for i in `$(GCC_FOR_TARGET) --print-multi-lib`; do \
+ dir=`echo $$i | sed -e 's/;.*$$//'`; \
+ flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
+ $(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
+ CC="$(CC)" CFLAGS="$(CFLAGS)" \
+ HOST_PREFIX="$(HOST_PREFIX)" HOST_PREFIX_1="$(HOST_PREFIX_1)" \
+ GCC_CFLAGS="$(GCC_CFLAGS) $${flags}" \
+ INCLUDES="$(INCLUDES)" CRTSTUFF_T_CFLAGS=$(CRTSTUFF_T_CFLAGS) \
+ dir="$${dir}" x-crtinit.o x-crtfini.o; \
+ if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+ done
+ touch stmp-multilib-arc
+
+install-multilib-arc: install-multilib
+ for i in `$(GCC_FOR_TARGET) --print-multi-lib`; do \
+ dir=`echo $$i | sed -e 's/;.*$$//'`; \
+ rm -f $(libsubdir)/$${dir}/crtinit.o; \
+ $(INSTALL_DATA) $${dir}/crtinit.o $(libsubdir)/$${dir}/crtinit.o; \
+ chmod a-x $(libsubdir)/$${dir}/crtinit.o; \
+ rm -f $(libsubdir)/$${dir}/crtfini.o; \
+ $(INSTALL_DATA) $${dir}/crtfini.o $(libsubdir)/$${dir}/crtfini.o; \
+ chmod a-x $(libsubdir)/$${dir}/crtfini.o; \
+ done
diff --git a/gcc/config/arc/xm-arc.h b/gcc/config/arc/xm-arc.h
new file mode 100644
index 00000000000..ba011e94be6
--- /dev/null
+++ b/gcc/config/arc/xm-arc.h
@@ -0,0 +1,47 @@
+/* Configuration for GNU C-compiler for the ARC processor.
+ Copyright (C) 1994, 1997 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.
+
+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. */
+
+/* #defines that need visibility everywhere. */
+#define FALSE 0
+#define TRUE 1
+
+/* This describes the machine the compiler is hosted on. */
+#define HOST_BITS_PER_CHAR 8
+#define HOST_BITS_PER_SHORT 16
+#define HOST_BITS_PER_INT 32
+#define HOST_BITS_PER_LONG 32
+#define HOST_BITS_PER_LONGLONG 64
+
+/* Doubles are stored in memory with the high order word first. This
+ matters when cross-compiling. */
+#define HOST_WORDS_BIG_ENDIAN 1
+
+/* target machine dependencies.
+ tm.h is a symbolic link to the actual target specific file. */
+#include "tm.h"
+
+/* Arguments to use with `exit'. */
+#define SUCCESS_EXIT_CODE 0
+#define FATAL_EXIT_CODE 33
+
+/* If compiled with Sun CC, the use of alloca requires this #include. */
+#ifndef __GNUC__
+#include "alloca.h"
+#endif
diff --git a/gcc/config/arm/aof.h b/gcc/config/arm/aof.h
index ab9093d068c..4d30defd5cf 100644
--- a/gcc/config/arm/aof.h
+++ b/gcc/config/arm/aof.h
@@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler, for Advanced RISC Machines
ARM compilation, AOF Assembler.
- Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by Richard Earnshaw (rearnsha@armltd.co.uk)
This file is part of GNU CC.
@@ -60,12 +60,13 @@ char *aof_text_section ();
char *aof_data_section ();
#define DATA_SECTION_ASM_OP aof_data_section ()
-#define EXTRA_SECTIONS in_zero_init, in_ctor, in_dtor
+#define EXTRA_SECTIONS in_zero_init, in_ctor, in_dtor, in_common
#define EXTRA_SECTION_FUNCTIONS \
ZERO_INIT_SECTION \
CTOR_SECTION \
-DTOR_SECTION
+DTOR_SECTION \
+COMMON_SECTION
#define ZERO_INIT_SECTION \
void \
@@ -118,6 +119,18 @@ dtor_section () \
} \
}
+/* Used by ASM_OUTPUT_COMMON (below) to tell varasm.c that we've
+ changed areas. */
+#define COMMON_SECTION \
+void \
+common_section () \
+{ \
+ static int common_count = 1; \
+ if (in_section != in_common) \
+ { \
+ in_section = in_common; \
+ } \
+}
#define CTOR_LIST_BEGIN \
asm (CTORS_SECTION_ASM_OP); \
extern func_ptr __CTOR_END__[1]; \
@@ -194,7 +207,7 @@ do { \
/* Some systems use __main in a way incompatible with its use in gcc, in these
cases use the macros NAME__MAIN to give a quoted symbol and SYMBOL__MAIN to
give the same symbol without quotes for an alternative entry point. You
- must define both, or niether. */
+ must define both, or neither. */
#define NAME__MAIN "__gccmain"
#define SYMBOL__MAIN __gccmain
@@ -277,7 +290,8 @@ do { \
/* Output of Uninitialized Variables */
#define ASM_OUTPUT_COMMON(STREAM,NAME,SIZE,ROUNDED) \
- (fprintf ((STREAM), "\tAREA "), \
+ (common_section (), \
+ fprintf ((STREAM), "\tAREA "), \
assemble_name ((STREAM), (NAME)), \
fprintf ((STREAM), ", DATA, COMMON\n\t%% %d\t%s size=%d\n", \
(ROUNDED), ASM_COMMENT_START, SIZE))
@@ -302,7 +316,7 @@ do { \
arm_main_function = 1; \
} while (0)
-#define ARM_OUTPUT_LABEL(STREAM,NAME) \
+#define ASM_OUTPUT_LABEL(STREAM,NAME) \
do { \
assemble_name (STREAM,NAME); \
fputs ("\n", STREAM); \
diff --git a/gcc/config/arm/aout.h b/gcc/config/arm/aout.h
index 7bddb1f5242..68e7227f7fc 100644
--- a/gcc/config/arm/aout.h
+++ b/gcc/config/arm/aout.h
@@ -114,7 +114,7 @@ do { \
#define ASM_DECLARE_FUNCTION_NAME(STREAM,NAME,DECL) \
ASM_OUTPUT_LABEL(STREAM, NAME)
-#define ARM_OUTPUT_LABEL(STREAM,NAME) \
+#define ASM_OUTPUT_LABEL(STREAM,NAME) \
do { \
assemble_name (STREAM,NAME); \
fputs (":\n", STREAM); \
@@ -224,10 +224,15 @@ do { char dstr[30]; \
assemble_name ((STREAM), (NAME)), \
fprintf(STREAM, ", %d\t%s %d\n", ROUNDED, ASM_COMMENT_START, SIZE))
-/* Output a local common block. /bin/as can't do this, so hack a `.space' into
- the bss segment. Note that this is *bad* practice. */
-#define ASM_OUTPUT_ALIGNED_LOCAL(STREAM,NAME,SIZE,ALIGN) \
- output_lcomm_directive (STREAM, NAME, SIZE, ALIGN)
+/* Output a local common block. /bin/as can't do this, so hack a
+ `.space' into the bss segment. Note that this is *bad* practice. */
+#define ASM_OUTPUT_ALIGNED_LOCAL(STREAM,NAME,SIZE,ALIGN) \
+ do { \
+ bss_section (); \
+ ASM_OUTPUT_ALIGN (STREAM, floor_log2 (ALIGN / BITS_PER_UNIT)); \
+ ASM_OUTPUT_LABEL (STREAM, NAME); \
+ fprintf (STREAM, "\t.space\t%d\n", SIZE); \
+ } while (0)
/* Output a zero-initialized block. */
#define ASM_OUTPUT_ALIGNED_BSS(STREAM,DECL,NAME,SIZE,ALIGN) \
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index fe263ba04d3..947504277d7 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -1,7 +1,7 @@
/* Output routines for GCC for ARM/RISCiX.
- Copyright (C) 1991, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1991, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl)
- and Martin Simmons (@harleqn.co.uk).
+ and Martin Simmons (@harleqn.co.uk).
More major hacks by Richard Earnshaw (rwe11@cl.cam.ac.uk)
This file is part of GNU CC.
@@ -21,10 +21,9 @@ 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 <stdio.h>
#include <string.h>
-#include "assert.h"
-#include "config.h"
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
@@ -176,7 +175,7 @@ static struct processors all_procs[] =
{"arm600", PROCESSOR_ARM6, FL_CO_PROC | FL_MODE32 | FL_MODE26},
{"arm610", PROCESSOR_ARM6, FL_MODE32 | FL_MODE26},
{"arm7", PROCESSOR_ARM7, FL_CO_PROC | FL_MODE32 | FL_MODE26},
- /* arm7m doesn't exist on its own, only in conjuction with D, (and I), but
+ /* arm7m doesn't exist on its own, only in conjunction with D, (and I), but
those don't alter the code, so it is sometimes known as the arm7m */
{"arm7m", PROCESSOR_ARM7, (FL_CO_PROC | FL_FAST_MULT | FL_MODE32
| FL_MODE26)},
@@ -376,7 +375,8 @@ use_return_insn ()
if (!reload_completed ||current_function_pretend_args_size
|| current_function_anonymous_args
- || (get_frame_size () && !(TARGET_APCS || frame_pointer_needed)))
+ || ((get_frame_size () + current_function_outgoing_args_size != 0)
+ && !(TARGET_APCS || frame_pointer_needed)))
return 0;
/* Can't be done if interworking with Thumb, and any registers have been
@@ -407,6 +407,13 @@ const_ok_for_arm (i)
{
unsigned HOST_WIDE_INT mask = ~0xFF;
+ /* For machines with >32 bit HOST_WIDE_INT, the bits above bit 31 must
+ be all zero, or all one. */
+ if ((i & ~(unsigned HOST_WIDE_INT) 0xffffffff) != 0
+ && ((i & ~(unsigned HOST_WIDE_INT) 0xffffffff)
+ != (((HOST_WIDE_INT) -1) & ~(unsigned HOST_WIDE_INT) 0xffffffff)))
+ return FALSE;
+
/* Fast return for 0 and powers of 2 */
if ((i & (i - 1)) == 0)
return TRUE;
@@ -1294,10 +1301,12 @@ arm_finalize_pic ()
l1 = gen_label_rtx ();
global_offset_table = gen_rtx (SYMBOL_REF, Pmode, "_GLOBAL_OFFSET_TABLE_");
+ /* The PC contains 'dot'+8, but the label L1 is on the next
+ instruction, so the offset is only 'dot'+4. */
pic_tmp = gen_rtx (CONST, VOIDmode,
gen_rtx (PLUS, Pmode,
gen_rtx (LABEL_REF, VOIDmode, l1),
- GEN_INT (8)));
+ GEN_INT (4)));
pic_tmp2 = gen_rtx (CONST, VOIDmode,
gen_rtx (PLUS, Pmode,
global_offset_table,
@@ -1501,6 +1510,17 @@ arm_rtx_costs (x, code, outer_code)
+ (REG_OR_SUBREG_REG (XEXP (x, 0)) ? 0 : 4)
+ (REG_OR_SUBREG_REG (XEXP (x, 1)) ? 0 : 4));
+ case TRUNCATE:
+ if (arm_fast_multiply && mode == SImode
+ && GET_CODE (XEXP (x, 0)) == LSHIFTRT
+ && GET_CODE (XEXP (XEXP (x, 0), 0)) == MULT
+ && (GET_CODE (XEXP (XEXP (XEXP (x, 0), 0), 0))
+ == GET_CODE (XEXP (XEXP (XEXP (x, 0), 0), 1)))
+ && (GET_CODE (XEXP (XEXP (XEXP (x, 0), 0), 0)) == ZERO_EXTEND
+ || GET_CODE (XEXP (XEXP (XEXP (x, 0), 0), 0)) == SIGN_EXTEND))
+ return 8;
+ return 99;
+
case NEG:
if (GET_MODE_CLASS (mode) == MODE_FLOAT)
return 4 + (REG_OR_SUBREG_REG (XEXP (x, 0)) ? 0 : 6);
@@ -2352,6 +2372,10 @@ load_multiple_sequence (operands, nops, regs, base, load_offset)
rtx reg;
rtx offset;
+ /* Convert a subreg of a mem into the mem itself. */
+ if (GET_CODE (operands[nops + i]) == SUBREG)
+ operands[nops + i] = alter_subreg(operands[nops + i]);
+
if (GET_CODE (operands[nops + i]) != MEM)
abort ();
@@ -2551,6 +2575,10 @@ store_multiple_sequence (operands, nops, regs, base, load_offset)
rtx reg;
rtx offset;
+ /* Convert a subreg of a mem into the mem itself. */
+ if (GET_CODE (operands[nops + i]) == SUBREG)
+ operands[nops + i] = alter_subreg(operands[nops + i]);
+
if (GET_CODE (operands[nops + i]) != MEM)
abort ();
@@ -2761,16 +2789,20 @@ arm_naked_function_p (func)
/* Routines for use in generating RTL */
rtx
-arm_gen_load_multiple (base_regno, count, from, up, write_back)
+arm_gen_load_multiple (base_regno, count, from, up, write_back, unchanging_p,
+ in_struct_p)
int base_regno;
int count;
rtx from;
int up;
int write_back;
+ int unchanging_p;
+ int in_struct_p;
{
int i = 0, j;
rtx result;
int sign = up ? 1 : -1;
+ rtx mem;
result = gen_rtx (PARALLEL, VOIDmode,
rtvec_alloc (count + (write_back ? 2 : 0)));
@@ -2785,10 +2817,13 @@ arm_gen_load_multiple (base_regno, count, from, up, write_back)
for (j = 0; i < count; i++, j++)
{
- XVECEXP (result, 0, i)
- = gen_rtx (SET, VOIDmode, gen_rtx (REG, SImode, base_regno + j),
- gen_rtx (MEM, SImode,
- plus_constant (from, j * 4 * sign)));
+ mem = gen_rtx (MEM, SImode, plus_constant (from, j * 4 * sign));
+ RTX_UNCHANGING_P (mem) = unchanging_p;
+ MEM_IN_STRUCT_P (mem) = in_struct_p;
+
+ XVECEXP (result, 0, i) = gen_rtx (SET, VOIDmode,
+ gen_rtx (REG, SImode, base_regno + j),
+ mem);
}
if (write_back)
@@ -2798,16 +2833,20 @@ arm_gen_load_multiple (base_regno, count, from, up, write_back)
}
rtx
-arm_gen_store_multiple (base_regno, count, to, up, write_back)
+arm_gen_store_multiple (base_regno, count, to, up, write_back, unchanging_p,
+ in_struct_p)
int base_regno;
int count;
rtx to;
int up;
int write_back;
+ int unchanging_p;
+ int in_struct_p;
{
int i = 0, j;
rtx result;
int sign = up ? 1 : -1;
+ rtx mem;
result = gen_rtx (PARALLEL, VOIDmode,
rtvec_alloc (count + (write_back ? 2 : 0)));
@@ -2822,10 +2861,12 @@ arm_gen_store_multiple (base_regno, count, to, up, write_back)
for (j = 0; i < count; i++, j++)
{
- XVECEXP (result, 0, i)
- = gen_rtx (SET, VOIDmode,
- gen_rtx (MEM, SImode, plus_constant (to, j * 4 * sign)),
- gen_rtx (REG, SImode, base_regno + j));
+ mem = gen_rtx (MEM, SImode, plus_constant (to, j * 4 * sign));
+ RTX_UNCHANGING_P (mem) = unchanging_p;
+ MEM_IN_STRUCT_P (mem) = in_struct_p;
+
+ XVECEXP (result, 0, i) = gen_rtx (SET, VOIDmode, mem,
+ gen_rtx (REG, SImode, base_regno + j));
}
if (write_back)
@@ -2843,6 +2884,8 @@ arm_gen_movstrqi (operands)
rtx src, dst;
rtx st_src, st_dst, end_src, end_dst, fin_src, fin_dst;
rtx part_bytes_reg = NULL;
+ rtx mem;
+ int dst_unchanging_p, dst_in_struct_p, src_unchanging_p, src_in_struct_p;
extern int optimize;
if (GET_CODE (operands[2]) != CONST_INT
@@ -2853,6 +2896,12 @@ arm_gen_movstrqi (operands)
st_dst = XEXP (operands[0], 0);
st_src = XEXP (operands[1], 0);
+
+ dst_unchanging_p = RTX_UNCHANGING_P (operands[0]);
+ dst_in_struct_p = MEM_IN_STRUCT_P (operands[0]);
+ src_unchanging_p = RTX_UNCHANGING_P (operands[1]);
+ src_in_struct_p = MEM_IN_STRUCT_P (operands[1]);
+
fin_dst = dst = copy_to_mode_reg (SImode, st_dst);
fin_src = src = copy_to_mode_reg (SImode, st_src);
@@ -2866,24 +2915,32 @@ arm_gen_movstrqi (operands)
for (i = 0; in_words_to_go >= 2; i+=4)
{
if (in_words_to_go > 4)
- emit_insn (arm_gen_load_multiple (0, 4, src, TRUE, TRUE));
+ emit_insn (arm_gen_load_multiple (0, 4, src, TRUE, TRUE,
+ src_unchanging_p, src_in_struct_p));
else
emit_insn (arm_gen_load_multiple (0, in_words_to_go, src, TRUE,
- FALSE));
+ FALSE, src_unchanging_p,
+ src_in_struct_p));
if (out_words_to_go)
{
if (out_words_to_go > 4)
- emit_insn (arm_gen_store_multiple (0, 4, dst, TRUE, TRUE));
+ emit_insn (arm_gen_store_multiple (0, 4, dst, TRUE, TRUE,
+ dst_unchanging_p,
+ dst_in_struct_p));
else if (out_words_to_go != 1)
emit_insn (arm_gen_store_multiple (0, out_words_to_go,
dst, TRUE,
(last_bytes == 0
- ? FALSE : TRUE)));
+ ? FALSE : TRUE),
+ dst_unchanging_p,
+ dst_in_struct_p));
else
{
- emit_move_insn (gen_rtx (MEM, SImode, dst),
- gen_rtx (REG, SImode, 0));
+ mem = gen_rtx (MEM, SImode, dst);
+ RTX_UNCHANGING_P (mem) = dst_unchanging_p;
+ MEM_IN_STRUCT_P (mem) = dst_in_struct_p;
+ emit_move_insn (mem, gen_rtx (REG, SImode, 0));
if (last_bytes != 0)
emit_insn (gen_addsi3 (dst, dst, GEN_INT (4)));
}
@@ -2898,9 +2955,16 @@ arm_gen_movstrqi (operands)
{
rtx sreg;
- emit_move_insn (sreg = gen_reg_rtx (SImode), gen_rtx (MEM, SImode, src));
+ mem = gen_rtx (MEM, SImode, src);
+ RTX_UNCHANGING_P (mem) = src_unchanging_p;
+ MEM_IN_STRUCT_P (mem) = src_in_struct_p;
+ emit_move_insn (sreg = gen_reg_rtx (SImode), mem);
emit_move_insn (fin_src = gen_reg_rtx (SImode), plus_constant (src, 4));
- emit_move_insn (gen_rtx (MEM, SImode, dst), sreg);
+
+ mem = gen_rtx (MEM, SImode, dst);
+ RTX_UNCHANGING_P (mem) = dst_unchanging_p;
+ MEM_IN_STRUCT_P (mem) = dst_in_struct_p;
+ emit_move_insn (mem, sreg);
emit_move_insn (fin_dst = gen_reg_rtx (SImode), plus_constant (dst, 4));
in_words_to_go--;
@@ -2913,7 +2977,10 @@ arm_gen_movstrqi (operands)
if (in_words_to_go < 0)
abort ();
- part_bytes_reg = copy_to_mode_reg (SImode, gen_rtx (MEM, SImode, src));
+ mem = gen_rtx (MEM, SImode, src);
+ RTX_UNCHANGING_P (mem) = src_unchanging_p;
+ MEM_IN_STRUCT_P (mem) = src_in_struct_p;
+ part_bytes_reg = copy_to_mode_reg (SImode, mem);
}
if (BYTES_BIG_ENDIAN && last_bytes)
@@ -2930,9 +2997,10 @@ arm_gen_movstrqi (operands)
while (last_bytes)
{
- emit_move_insn (gen_rtx (MEM, QImode,
- plus_constant (dst, last_bytes - 1)),
- gen_rtx (SUBREG, QImode, part_bytes_reg, 0));
+ mem = gen_rtx (MEM, QImode, plus_constant (dst, last_bytes - 1));
+ RTX_UNCHANGING_P (mem) = dst_unchanging_p;
+ MEM_IN_STRUCT_P (mem) = dst_in_struct_p;
+ emit_move_insn (mem, gen_rtx (SUBREG, QImode, part_bytes_reg, 0));
if (--last_bytes)
{
tmp = gen_reg_rtx (SImode);
@@ -2949,8 +3017,10 @@ arm_gen_movstrqi (operands)
if (part_bytes_reg == NULL)
abort ();
- emit_move_insn (gen_rtx (MEM, QImode, dst),
- gen_rtx (SUBREG, QImode, part_bytes_reg, 0));
+ mem = gen_rtx (MEM, QImode, dst);
+ RTX_UNCHANGING_P (mem) = dst_unchanging_p;
+ MEM_IN_STRUCT_P (mem) = dst_in_struct_p;
+ emit_move_insn (mem, gen_rtx (SUBREG, QImode, part_bytes_reg, 0));
if (--last_bytes)
{
rtx tmp = gen_reg_rtx (SImode);
@@ -2981,7 +3051,7 @@ gen_rotated_half_load (memref)
base = XEXP (base, 0);
}
- /* If we aren't allowed to generate unalligned addresses, then fail. */
+ /* If we aren't allowed to generate unaligned addresses, then fail. */
if (TARGET_SHORT_BY_BYTES
&& ((BYTES_BIG_ENDIAN ? 1 : 0) ^ ((offset & 2) == 0)))
return NULL;
@@ -3006,7 +3076,7 @@ select_dominance_cc_mode (op, x, y, cond_or)
/* Currently we will probably get the wrong result if the individual
comparisons are not simple. This also ensures that it is safe to
- reverse a comparions if necessary. */
+ reverse a comparison if necessary. */
if ((arm_select_cc_mode (cond1 = GET_CODE (x), XEXP (x, 0), XEXP (x, 1))
!= CCmode)
|| (arm_select_cc_mode (cond2 = GET_CODE (y), XEXP (y, 0), XEXP (y, 1))
@@ -3122,10 +3192,10 @@ arm_select_cc_mode (op, x, y)
|| GET_CODE (x) == ROTATERT))
return CC_SWPmode;
- /* This is a special case, that is used by combine to alow a
- comarison of a shifted byte load to be split into a zero-extend
+ /* This is a special case that is used by combine to allow a
+ comparison of a shifted byte load to be split into a zero-extend
followed by a comparison of the shifted integer (only valid for
- equalities and unsigned inequalites. */
+ equalities and unsigned inequalities). */
if (GET_MODE (x) == SImode
&& GET_CODE (x) == ASHIFT
&& GET_CODE (XEXP (x, 1)) == CONST_INT && INTVAL (XEXP (x, 1)) == 24
@@ -3201,6 +3271,16 @@ arm_reload_in_hi (operands)
rtx base = find_replacement (&XEXP (operands[1], 0));
emit_insn (gen_zero_extendqisi2 (operands[2], gen_rtx (MEM, QImode, base)));
+ /* Handle the case where the address is too complex to be offset by 1. */
+ if (GET_CODE (base) == MINUS
+ || (GET_CODE (base) == PLUS && GET_CODE (XEXP (base, 1)) != CONST_INT))
+ {
+ rtx base_plus = gen_rtx (REG, SImode, REGNO (operands[0]));
+
+ emit_insn (gen_rtx (SET, VOIDmode, base_plus, base));
+ base = base_plus;
+ }
+
emit_insn (gen_zero_extendqisi2 (gen_rtx (SUBREG, SImode, operands[0], 0),
gen_rtx (MEM, QImode,
plus_constant (base, 1))));
@@ -3454,6 +3534,7 @@ find_barrier (from, max_count)
{
int count = 0;
rtx found_barrier = 0;
+ rtx last = from;
while (from && count < max_count)
{
@@ -3467,11 +3548,12 @@ find_barrier (from, max_count)
&& CONSTANT_POOL_ADDRESS_P (SET_SRC (PATTERN (from))))
{
rtx src = SET_SRC (PATTERN (from));
- count += 2;
+ count += 8;
}
else
count += get_attr_length (from);
+ last = from;
from = NEXT_INSN (from);
}
@@ -3482,7 +3564,7 @@ find_barrier (from, max_count)
rtx label = gen_label_rtx ();
if (from)
- from = PREV_INSN (from);
+ from = PREV_INSN (last);
else
from = get_last_insn ();
@@ -3913,7 +3995,7 @@ output_move_double (operands)
{
enum rtx_code code0 = GET_CODE (operands[0]);
enum rtx_code code1 = GET_CODE (operands[1]);
- rtx otherops[2];
+ rtx otherops[3];
if (code0 == REG)
{
@@ -3964,7 +4046,21 @@ output_move_double (operands)
}
else if (code1 == CONST_INT)
{
- /* sign extend the intval into the high-order word */
+#if HOST_BITS_PER_WIDE_INT > 32
+ /* If HOST_WIDE_INT is more than 32 bits, the intval tells us
+ what the upper word is. */
+ if (WORDS_BIG_ENDIAN)
+ {
+ otherops[1] = GEN_INT (ARM_SIGN_EXTEND (INTVAL (operands[1])));
+ operands[1] = GEN_INT (INTVAL (operands[1]) >> 32);
+ }
+ else
+ {
+ otherops[1] = GEN_INT (INTVAL (operands[1]) >> 32);
+ operands[1] = GEN_INT (ARM_SIGN_EXTEND (INTVAL (operands[1])));
+ }
+#else
+ /* Sign extend the intval into the high-order word */
if (WORDS_BIG_ENDIAN)
{
otherops[1] = operands[1];
@@ -3973,6 +4069,7 @@ output_move_double (operands)
}
else
otherops[1] = INTVAL (operands[1]) < 0 ? constm1_rtx : const0_rtx;
+#endif
output_mov_immediate (otherops);
output_mov_immediate (operands);
}
@@ -4762,10 +4859,9 @@ output_func_epilogue (f, frame_size)
if (use_return_insn() && return_used_this_function)
{
- if (frame_size && !(frame_pointer_needed || TARGET_APCS))
- {
- abort ();
- }
+ if ((frame_size + current_function_outgoing_args_size) != 0
+ && !(frame_pointer_needed || TARGET_APCS))
+ abort ();
goto epilogue_done;
}
@@ -4853,10 +4949,11 @@ output_func_epilogue (f, frame_size)
else
{
/* Restore stack pointer if necessary. */
- if (frame_size)
+ if (frame_size + current_function_outgoing_args_size != 0)
{
operands[0] = operands[1] = stack_pointer_rtx;
- operands[2] = gen_rtx (CONST_INT, VOIDmode, frame_size);
+ operands[2] = GEN_INT (frame_size
+ + current_function_outgoing_args_size);
output_add_immediate (operands);
}
@@ -5028,7 +5125,8 @@ void
arm_expand_prologue ()
{
int reg;
- rtx amount = GEN_INT (- get_frame_size ());
+ rtx amount = GEN_INT (-(get_frame_size ()
+ + current_function_outgoing_args_size));
rtx push_insn;
int num_regs;
int live_regs_mask = 0;
@@ -5295,34 +5393,6 @@ arm_print_operand (stream, x, code)
}
}
-/* Output a label definition. */
-
-void
-arm_asm_output_label (stream, name)
- FILE *stream;
- char *name;
-{
- ARM_OUTPUT_LABEL (stream, name);
-}
-
-/* Output code resembling an .lcomm directive. /bin/as doesn't have this
- directive hence this hack, which works by reserving some `.space' in the
- bss segment directly.
-
- XXX This is a severe hack, which is guaranteed NOT to work since it doesn't
- define STATIC COMMON space but merely STATIC BSS space. */
-
-void
-output_lcomm_directive (stream, name, size, align)
- FILE *stream;
- char *name;
- int size, align;
-{
- bss_section ();
- ASM_OUTPUT_ALIGN (stream, floor_log2 (align / BITS_PER_UNIT));
- ARM_OUTPUT_LABEL (stream, name);
- fprintf (stream, "\t.space\t%d\n", size);
-}
/* A finite state machine takes care of noticing whether or not instructions
can be conditionally executed, and thus decrease execution time and code
@@ -5883,7 +5953,7 @@ aof_data_section ()
/* The AOF assembler is religiously strict about declarations of
imported and exported symbols, so that it is impossible to declare
- a function as imported near the begining of the file, and then to
+ a function as imported near the beginning of the file, and then to
export it later on. It is, however, possible to delay the decision
until all the functions in the file have been compiled. To get
around this, we maintain a list of the imports and exports, and
diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
index 0cdd1e6d2b5..17c9f7edef5 100644
--- a/gcc/config/arm/arm.h
+++ b/gcc/config/arm/arm.h
@@ -86,7 +86,7 @@ extern int frame_pointer_needed;
#if TARGET_CPU_DEFAULT == TARGET_CPU_arm2
#define CPP_ARCH_DEFAULT_SPEC "-D__ARM_ARCH_2__"
#else
-#if TARGET_CPU_DEFAULT == TARGET_CPU_arm6 || TARGET_CPU_DEFUALT == TARGET_CPU_arm610 || TARGET_CPU_DEFAULT == TARGET_CPU_arm7500fe
+#if TARGET_CPU_DEFAULT == TARGET_CPU_arm6 || TARGET_CPU_DEFAULT == TARGET_CPU_arm610 || TARGET_CPU_DEFAULT == TARGET_CPU_arm7500fe
#define CPP_ARCH_DEFAULT_SPEC "-D__ARM_ARCH_3__"
#else
#if TARGET_CPU_DEFAULT == TARGET_CPU_arm7m
@@ -346,7 +346,7 @@ extern char *target_fp_name;
{"apcs-float", ARM_FLAG_APCS_FLOAT}, \
{"no-apcs-float", -ARM_FLAG_APCS_FLOAT}, \
{"apcs-reentrant", ARM_FLAG_APCS_REENT}, \
- {"no-apcs-rentrant", -ARM_FLAG_APCS_REENT}, \
+ {"no-apcs-reentrant", -ARM_FLAG_APCS_REENT}, \
{"short-load-bytes", ARM_FLAG_SHORT_BYTE}, \
{"no-short-load-bytes", -ARM_FLAG_SHORT_BYTE}, \
{"short-load-words", -ARM_FLAG_SHORT_BYTE}, \
@@ -437,7 +437,7 @@ extern enum floating_point_type arm_fpu;
/* What type of floating point instructions are available */
extern enum floating_point_type arm_fpu_arch;
-/* Default floating point archtitecture. Override in sub-target if
+/* Default floating point architecture. Override in sub-target if
necessary. */
#define FP_DEFAULT FP_SOFT2
@@ -483,6 +483,11 @@ extern int arm_arch4;
(MODE) = SImode; \
}
+/* Define this macro if the promotion described by `PROMOTE_MODE'
+ should also be done for outgoing function arguments. */
+/* This is required to ensure that push insns always push a word. */
+#define PROMOTE_FUNCTION_ARGS
+
/* Define for XFmode extended real floating point support.
This will automatically cause REAL_ARITHMETIC to be defined. */
/* For the ARM:
@@ -905,7 +910,13 @@ enum reg_class
/* If we generate an insn to push BYTES bytes,
this says how many the stack pointer really advances by. */
-#define PUSH_ROUNDING(NPUSHED) (((NPUSHED) + 3) & ~3)
+/* The push insns do not do this rounding implicitly. So don't define this. */
+/* #define PUSH_ROUNDING(NPUSHED) (((NPUSHED) + 3) & ~3) */
+
+/* Define this if the maximum size of all the outgoing args is to be
+ accumulated and pushed during the prologue. The amount can be
+ found in the variable current_function_outgoing_args_size. */
+#define ACCUMULATE_OUTGOING_ARGS
/* Offset of first parameter from the argument pointer register value. */
#define FIRST_PARM_OFFSET(FNDECL) 4
@@ -1102,8 +1113,10 @@ enum reg_class
int volatile_func = arm_volatile_func (); \
if ((FROM) == ARG_POINTER_REGNUM && (TO) == HARD_FRAME_POINTER_REGNUM)\
(OFFSET) = 0; \
- else if ((FROM) == FRAME_POINTER_REGNUM && (TO) == STACK_POINTER_REGNUM)\
- (OFFSET) = (get_frame_size () + 3 & ~3); \
+ else if ((FROM) == FRAME_POINTER_REGNUM \
+ && (TO) == STACK_POINTER_REGNUM) \
+ (OFFSET) = (current_function_outgoing_args_size \
+ + (get_frame_size () + 3 & ~3)); \
else \
{ \
int regno; \
@@ -1125,8 +1138,10 @@ enum reg_class
{ \
if (! frame_pointer_needed) \
offset -= 16; \
- if (! volatile_func && (regs_ever_live[14] || saved_hard_reg)) \
+ if (! volatile_func \
+ && (regs_ever_live[14] || saved_hard_reg)) \
offset += 4; \
+ offset += current_function_outgoing_args_size; \
(OFFSET) = (get_frame_size () + 3 & ~3) + offset; \
} \
} \
@@ -1390,14 +1405,15 @@ do \
else if (BASE_REGISTER_RTX_P (xop1)) \
GO_IF_LEGITIMATE_INDEX (MODE, REGNO (xop1), xop0, LABEL); \
} \
- else if (GET_CODE (X) == MINUS) \
+ /* Reload currently can't handle MINUS, so disable this for now */ \
+ /* else if (GET_CODE (X) == MINUS) \
{ \
rtx xop0 = XEXP (X,0); \
rtx xop1 = XEXP (X,1); \
\
if (BASE_REGISTER_RTX_P (xop0)) \
GO_IF_LEGITIMATE_INDEX (MODE, -1, xop1, LABEL); \
- } \
+ } */ \
else if (GET_MODE_CLASS (MODE) != MODE_FLOAT \
&& GET_CODE (X) == SYMBOL_REF \
&& CONSTANT_POOL_ADDRESS_P (X)) \
@@ -1742,27 +1758,23 @@ extern int arm_compare_fp;
goto JUMPTO
/* Output an internal label definition. */
-#define ASM_OUTPUT_INTERNAL_LABEL(STREAM, PREFIX, NUM) \
- do \
- { \
- char *s = (char *) alloca (40 + strlen (PREFIX)); \
- extern int arm_target_label, arm_ccfsm_state; \
- extern rtx arm_target_insn; \
- \
- if (arm_ccfsm_state == 3 && arm_target_label == (NUM) \
- && !strcmp (PREFIX, "L")) \
- { \
- arm_ccfsm_state = 0; \
- arm_target_insn = NULL; \
- } \
- ASM_GENERATE_INTERNAL_LABEL (s, (PREFIX), (NUM)); \
- arm_asm_output_label (STREAM, s); \
+#define ASM_OUTPUT_INTERNAL_LABEL(STREAM, PREFIX, NUM) \
+ do \
+ { \
+ char *s = (char *) alloca (40 + strlen (PREFIX)); \
+ extern int arm_target_label, arm_ccfsm_state; \
+ extern rtx arm_target_insn; \
+ \
+ if (arm_ccfsm_state == 3 && arm_target_label == (NUM) \
+ && !strcmp (PREFIX, "L")) \
+ { \
+ arm_ccfsm_state = 0; \
+ arm_target_insn = NULL; \
+ } \
+ ASM_GENERATE_INTERNAL_LABEL (s, (PREFIX), (NUM)); \
+ ASM_OUTPUT_LABEL (STREAM, s); \
} while (0)
-/* Output a label definition. */
-#define ASM_OUTPUT_LABEL(STREAM,NAME) \
- arm_asm_output_label ((STREAM), (NAME))
-
/* Output a push or a pop instruction (only used when profiling). */
#define ASM_OUTPUT_REG_PUSH(STREAM,REGNO) \
fprintf(STREAM,"\tstmfd\t%ssp!,{%s%s}\n", \
@@ -1916,9 +1928,10 @@ do { \
shift += 8; \
} \
} \
- fprintf (FILE, "\tldr\t%spc, [%spc, #-4]\n", REGISTER_PREFIX, \
- REGISTER_PREFIX); \
- ASM_OUTPUT_INT (FILE, XEXP (DECL_RTL (FUNCTION), 0)); \
+ fputs ("\tb\t", FILE); \
+ assemble_name (FILE, \
+ IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (FUNCTION))); \
+ fputc ('\n', FILE); \
} while (0)
/* A C expression whose value is RTL representing the value of the return
@@ -1927,7 +1940,7 @@ do { \
#define RETURN_ADDR_RTX(COUNT, FRAME) \
((COUNT == 0) \
? gen_rtx (MEM, Pmode, plus_constant (FRAME, -4)) \
- : (rtx) 0)
+ : NULL_RTX)
/* Used to mask out junk bits from the return address, such as
processor state, interrupt status, condition codes and the like. */
@@ -2003,9 +2016,9 @@ int arm_valid_machine_decl_attribute (/* union tree_node *, union tree_node *,
union tree_node *,
union tree_node * */);
struct rtx_def *arm_gen_load_multiple (/* int, int, struct rtx_def *,
- int, int */);
+ int, int, int, int */);
struct rtx_def *arm_gen_store_multiple (/* int, int, struct rtx_def *,
- int, int */);
+ int, int, int, int */);
int arm_gen_movstrqi (/* struct rtx_def ** */);
struct rtx_def *gen_rotated_half_load (/* struct rtx_def * */);
enum machine_mode arm_select_cc_mode (/* enum rtx_code, struct rtx_def *,
@@ -2024,7 +2037,7 @@ char *output_mov_long_double_arm_from_fpu (/* struct rtx_def ** */);
char *output_mov_long_double_arm_from_arm (/* struct rtx_def ** */);
char *output_mov_double_fpu_from_arm (/* struct rtx_def ** */);
char *output_mov_double_arm_from_fpu (/* struct rtx_def ** */);
-char *output_mov_double (/* struct rtx_def ** */);
+char *output_move_double (/* struct rtx_def ** */);
char *output_mov_immediate (/* struct rtx_def ** */);
char *output_add_immediate (/* struct rtx_def ** */);
char *arithmetic_instr (/* struct rtx_def *, int */);
@@ -2035,8 +2048,6 @@ void output_func_prologue (/* FILE *, int */);
void output_func_epilogue (/* FILE *, int */);
void arm_expand_prologue (/* void */);
void arm_print_operand (/* FILE *, struct rtx_def *, int */);
-void arm_asm_output_label (/* FILE *, char * */);
-void output_lcomm_directive (/* FILE *, char *, int, int */);
void final_prescan_insn (/* struct rtx_def *, struct rtx_def **, int */);
#ifdef AOF_ASSEMBLER
struct rtx_def *aof_pic_entry (/* struct rtx_def * */);
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index afc2794ea1e..ee4a9086ed7 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -1,7 +1,7 @@
;;- Machine description for Advanced RISC Machines' ARM for GNU compiler
-;; Copyright (C) 1991, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+;; Copyright (C) 1991, 93-97, 1998 Free Software Foundation, Inc.
;; Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl)
-;; and Martin Simmons (@harleqn.co.uk).
+;; and Martin Simmons (@harleqn.co.uk).
;; More major hacks by Richard Earnshaw (rwe11@cl.cam.ac.uk)
;; This file is part of GNU CC.
@@ -859,6 +859,34 @@
"umull%?\\t%Q0, %R0, %1, %2"
[(set_attr "type" "mult")])
+(define_insn "smulsi3_highpart"
+ [(set (match_operand:SI 0 "s_register_operand" "=&r,&r")
+ (truncate:SI
+ (lshiftrt:DI
+ (mult:DI (sign_extend:DI
+ (match_operand:SI 1 "s_register_operand" "%r,0"))
+ (sign_extend:DI
+ (match_operand:SI 2 "s_register_operand" "r,r")))
+ (const_int 32))))
+ (clobber (match_scratch:SI 3 "=&r,&r"))]
+ "arm_fast_multiply"
+ "smull%?\\t%3, %0, %2, %1"
+[(set_attr "type" "mult")])
+
+(define_insn "umulsi3_highpart"
+ [(set (match_operand:SI 0 "s_register_operand" "=&r,&r")
+ (truncate:SI
+ (lshiftrt:DI
+ (mult:DI (zero_extend:DI
+ (match_operand:SI 1 "s_register_operand" "%r,0"))
+ (zero_extend:DI
+ (match_operand:SI 2 "s_register_operand" "r,r")))
+ (const_int 32))))
+ (clobber (match_scratch:SI 3 "=&r,&r"))]
+ "arm_fast_multiply"
+ "umull%?\\t%3, %0, %2, %1"
+[(set_attr "type" "mult")])
+
(define_insn "mulsf3"
[(set (match_operand:SF 0 "s_register_operand" "=f")
(mult:SF (match_operand:SF 1 "s_register_operand" "f")
@@ -1180,7 +1208,21 @@
"
{
HOST_WIDE_INT mask = (((HOST_WIDE_INT)1) << INTVAL (operands[1])) - 1;
+ rtx target, subtarget;
+ target = operands[0];
+ /* Avoid using a subreg as a subtarget, and avoid writing a paradoxical
+ subreg as the final target. */
+ if (GET_CODE (target) == SUBREG)
+ {
+ subtarget = gen_reg_rtx (SImode);
+ if (GET_MODE_SIZE (GET_MODE (SUBREG_REG (target)))
+ < GET_MODE_SIZE (SImode))
+ target = SUBREG_REG (target);
+ }
+ else
+ subtarget = target;
+
if (GET_CODE (operands[3]) == CONST_INT)
{
/* Since we are inserting a known constant, we may be able to
@@ -1191,7 +1233,7 @@
<< INTVAL (operands[2]));
emit_insn (gen_andsi3 (op1, operands[0], GEN_INT (~mask2)));
- emit_insn (gen_iorsi3 (operands[0], op1,
+ emit_insn (gen_iorsi3 (subtarget, op1,
GEN_INT (INTVAL (operands[3])
<< INTVAL (operands[2]))));
}
@@ -1212,7 +1254,7 @@
emit_insn (gen_iorsi3 (op1, gen_rtx (LSHIFTRT, SImode, operands[0],
operands[1]),
op0));
- emit_insn (gen_rotlsi3 (operands[0], op1, operands[1]));
+ emit_insn (gen_rotlsi3 (subtarget, op1, operands[1]));
}
else if ((INTVAL (operands[1]) + INTVAL (operands[2]) == 32)
&& ! (const_ok_for_arm (mask)
@@ -1226,8 +1268,9 @@
emit_insn (gen_ashlsi3 (op0, operands[3],
GEN_INT (32 - INTVAL (operands[1]))));
emit_insn (gen_ashlsi3 (op1, operands[0], operands[1]));
- emit_insn (gen_iorsi3 (operands[0], gen_rtx (LSHIFTRT, SImode, op1,
- operands[1]), op0));
+ emit_insn (gen_iorsi3 (subtarget,
+ gen_rtx (LSHIFTRT, SImode, op1,
+ operands[1]), op0));
}
else
{
@@ -1270,7 +1313,17 @@
if (INTVAL (operands[2]) != 0)
op1 = gen_rtx (ASHIFT, SImode, op1, operands[2]);
- emit_insn (gen_iorsi3 (operands[0], op1, op2));
+ emit_insn (gen_iorsi3 (subtarget, op1, op2));
+ }
+
+ if (subtarget != target)
+ {
+ /* If TARGET is still a SUBREG, then it must be wider than a word,
+ so we must be careful only to set the subword we were asked to. */
+ if (GET_CODE (target) == SUBREG)
+ emit_move_insn (target, subtarget);
+ else
+ emit_move_insn (target, gen_lowpart (GET_MODE (target), subtarget));
}
DONE;
@@ -2551,23 +2604,24 @@
(define_expand "storehi"
[;; store the low byte
- (set (mem:QI (match_operand:SI 1 "" "")) (match_dup 3))
+ (set (match_operand 1 "" "") (match_dup 3))
;; extract the high byte
(set (match_dup 2)
(ashiftrt:SI (match_operand 0 "" "") (const_int 8)))
;; store the high byte
- (set (mem:QI (match_dup 4))
- (subreg:QI (match_dup 2) 0))] ;explicit subreg safe
+ (set (match_dup 4) (subreg:QI (match_dup 2) 0))] ;explicit subreg safe
""
"
{
- enum rtx_code code = GET_CODE (operands[1]);
+ rtx addr = XEXP (operands[1], 0);
+ enum rtx_code code = GET_CODE (addr);
- if ((code == PLUS || code == MINUS)
- && (GET_CODE (XEXP (operands[1], 1)) == REG
- || GET_CODE (XEXP (operands[1], 0)) != REG))
- operands[1] = force_reg (SImode, operands[1]);
- operands[4] = plus_constant (operands[1], 1);
+ if ((code == PLUS && GET_CODE (XEXP (addr, 1)) != CONST_INT)
+ || code == MINUS)
+ addr = force_reg (SImode, addr);
+
+ operands[4] = change_address (operands[1], QImode, plus_constant (addr, 1));
+ operands[1] = change_address (operands[1], QImode, NULL_RTX);
operands[3] = gen_lowpart (QImode, operands[0]);
operands[0] = gen_lowpart (SImode, operands[0]);
operands[2] = gen_reg_rtx (SImode);
@@ -2575,21 +2629,22 @@
")
(define_expand "storehi_bigend"
- [(set (mem:QI (match_dup 4)) (match_dup 3))
+ [(set (match_dup 4) (match_dup 3))
(set (match_dup 2)
(ashiftrt:SI (match_operand 0 "" "") (const_int 8)))
- (set (mem:QI (match_operand 1 "" ""))
- (subreg:QI (match_dup 2) 0))]
+ (set (match_operand 1 "" "") (subreg:QI (match_dup 2) 0))]
""
"
{
- enum rtx_code code = GET_CODE (operands[1]);
- if ((code == PLUS || code == MINUS)
- && (GET_CODE (XEXP (operands[1], 1)) == REG
- || GET_CODE (XEXP (operands[1], 0)) != REG))
- operands[1] = force_reg (SImode, operands[1]);
+ rtx addr = XEXP (operands[1], 0);
+ enum rtx_code code = GET_CODE (addr);
+
+ if ((code == PLUS && GET_CODE (XEXP (addr, 1)) != CONST_INT)
+ || code == MINUS)
+ addr = force_reg (SImode, addr);
- operands[4] = plus_constant (operands[1], 1);
+ operands[4] = change_address (operands[1], QImode, plus_constant (addr, 1));
+ operands[1] = change_address (operands[1], QImode, NULL_RTX);
operands[3] = gen_lowpart (QImode, operands[0]);
operands[0] = gen_lowpart (SImode, operands[0]);
operands[2] = gen_reg_rtx (SImode);
@@ -2598,19 +2653,19 @@
;; Subroutine to store a half word integer constant into memory.
(define_expand "storeinthi"
- [(set (mem:QI (match_operand:SI 0 "" ""))
+ [(set (match_operand 0 "" "")
(subreg:QI (match_operand 1 "" "") 0))
- (set (mem:QI (match_dup 3)) (subreg:QI (match_dup 2) 0))]
+ (set (match_dup 3) (subreg:QI (match_dup 2) 0))]
""
"
{
HOST_WIDE_INT value = INTVAL (operands[1]);
- enum rtx_code code = GET_CODE (operands[0]);
+ rtx addr = XEXP (operands[0], 0);
+ enum rtx_code code = GET_CODE (addr);
- if ((code == PLUS || code == MINUS)
- && (GET_CODE (XEXP (operands[0], 1)) == REG
- || GET_CODE (XEXP (operands[0], 0)) != REG))
- operands[0] = force_reg (SImode, operands[0]);
+ if ((code == PLUS && GET_CODE (XEXP (addr, 1)) != CONST_INT)
+ || code == MINUS)
+ addr = force_reg (SImode, addr);
operands[1] = gen_reg_rtx (SImode);
if (BYTES_BIG_ENDIAN)
@@ -2636,7 +2691,8 @@
}
}
- operands[3] = plus_constant (operands[0], 1);
+ operands[3] = change_address (operands[0], QImode, plus_constant (addr, 1));
+ operands[0] = change_address (operands[0], QImode, NULL_RTX);
}
")
@@ -2667,16 +2723,15 @@
DONE;
}
if (GET_CODE (operands[1]) == CONST_INT)
- emit_insn (gen_storeinthi (XEXP (operands[0], 0), operands[1]));
+ emit_insn (gen_storeinthi (operands[0], operands[1]));
else
{
if (GET_CODE (operands[1]) == MEM)
operands[1] = force_reg (HImode, operands[1]);
if (BYTES_BIG_ENDIAN)
- emit_insn (gen_storehi_bigend (operands[1],
- XEXP (operands[0], 0)));
+ emit_insn (gen_storehi_bigend (operands[1], operands[0]));
else
- emit_insn (gen_storehi (operands[1], XEXP (operands[0], 0)));
+ emit_insn (gen_storehi (operands[1], operands[0]));
}
DONE;
}
@@ -3152,9 +3207,10 @@
FAIL;
operands[3]
- = arm_gen_load_multiple (REGNO (operands[0]), INTVAL (operands[2]),
- force_reg (SImode, XEXP (operands[1], 0)),
- TRUE, FALSE);
+ = arm_gen_load_multiple (REGNO (operands[0]), INTVAL (operands[2]),
+ force_reg (SImode, XEXP (operands[1], 0)),
+ TRUE, FALSE, RTX_UNCHANGING_P(operands[1]),
+ MEM_IN_STRUCT_P(operands[1]));
")
;; Load multiple with write-back
@@ -3221,9 +3277,10 @@
FAIL;
operands[3]
- = arm_gen_store_multiple (REGNO (operands[1]), INTVAL (operands[2]),
- force_reg (SImode, XEXP (operands[0], 0)),
- TRUE, FALSE);
+ = arm_gen_store_multiple (REGNO (operands[1]), INTVAL (operands[2]),
+ force_reg (SImode, XEXP (operands[0], 0)),
+ TRUE, FALSE, RTX_UNCHANGING_P (operands[0]),
+ MEM_IN_STRUCT_P(operands[0]));
")
;; Store multiple with write-back
@@ -3859,8 +3916,16 @@
"
{
enum rtx_code code = GET_CODE (operands[1]);
- rtx ccreg = gen_compare_reg (code, arm_compare_op0, arm_compare_op1,
- arm_compare_fp);
+ rtx ccreg;
+
+ /* When compiling for SOFT_FLOAT, ensure both arms are in registers.
+ Otherwise, ensure it is a valid FP add operand */
+ if ((! TARGET_HARD_FLOAT)
+ || (! fpu_add_operand (operands[3], SFmode)))
+ operands[3] = force_reg (SFmode, operands[3]);
+
+ ccreg = gen_compare_reg (code, arm_compare_op0, arm_compare_op1,
+ arm_compare_fp);
operands[1] = gen_rtx (code, VOIDmode, ccreg, const0_rtx);
}")
@@ -3869,7 +3934,7 @@
[(set (match_operand:DF 0 "s_register_operand" "")
(if_then_else:DF (match_operand 1 "comparison_operator" "")
(match_operand:DF 2 "s_register_operand" "")
- (match_operand:DF 3 "nonmemory_operand" "")))]
+ (match_operand:DF 3 "fpu_add_operand" "")))]
"TARGET_HARD_FLOAT"
"
{
@@ -3881,57 +3946,77 @@
}")
(define_insn "*movsicc_insn"
- [(set (match_operand:SI 0 "s_register_operand" "=r,r,r,r,r,r")
+ [(set (match_operand:SI 0 "s_register_operand" "=r,r,r,r,r,r,r,r")
(if_then_else:SI
(match_operator 3 "comparison_operator"
[(match_operand 4 "cc_register" "") (const_int 0)])
- (match_operand:SI 1 "arm_not_operand" "0,0,?rI,?rI,K,K")
- (match_operand:SI 2 "arm_not_operand" "rI,K,rI,K,rI,K")))]
+ (match_operand:SI 1 "arm_not_operand" "0,0,rI,K,rI,rI,K,K")
+ (match_operand:SI 2 "arm_not_operand" "rI,K,0,0,rI,K,rI,K")))]
""
"@
mov%D3\\t%0, %2
mvn%D3\\t%0, #%B2
+ mov%d3\\t%0, %1
+ mvn%d3\\t%0, #%B1
mov%d3\\t%0, %1\;mov%D3\\t%0, %2
mov%d3\\t%0, %1\;mvn%D3\\t%0, #%B2
mvn%d3\\t%0, #%B1\;mov%D3\\t%0, %2
mvn%d3\\t%0, #%B1\;mvn%D3\\t%0, #%B2"
- [(set_attr "length" "4,4,8,8,8,8")
+ [(set_attr "length" "4,4,4,4,8,8,8,8")
(set_attr "conds" "use")])
(define_insn "*movsfcc_hard_insn"
- [(set (match_operand:SF 0 "s_register_operand" "=f,f")
- (if_then_else:SF (match_operator 3 "comparison_operator"
- [(match_operand 4 "cc_register" "") (const_int 0)])
- (match_operand:SF 1 "s_register_operand" "0,0")
- (match_operand:SF 2 "fpu_add_operand" "fG,H")))]
+ [(set (match_operand:SF 0 "s_register_operand" "=f,f,f,f,f,f,f,f")
+ (if_then_else:SF
+ (match_operator 3 "comparison_operator"
+ [(match_operand 4 "cc_register" "") (const_int 0)])
+ (match_operand:SF 1 "fpu_add_operand" "0,0,fG,H,fG,fG,H,H")
+ (match_operand:SF 2 "fpu_add_operand" "fG,H,0,0,fG,H,fG,H")))]
"TARGET_HARD_FLOAT"
"@
mvf%D3s\\t%0, %2
- mnf%D3s\\t%0, #%N2"
- [(set_attr "type" "ffarith")
+ mnf%D3s\\t%0, #%N2
+ mvf%d3s\\t%0, %1
+ mnf%d3s\\t%0, #%N1
+ mvf%d3s\\t%0, %1\;mvf%D3s\\t%0, %2
+ mvf%d3s\\t%0, %1\;mnf%D3s\\t%0, #%N2
+ mnf%d3s\\t%0, #%N1\;mvf%D3s\\t%0, %2
+ mnf%d3s\\t%0, #%N1\;mnf%D3s\\t%0, #%N2"
+ [(set_attr "length" "4,4,4,4,8,8,8,8")
+ (set_attr "type" "ffarith")
(set_attr "conds" "use")])
(define_insn "*movsfcc_soft_insn"
- [(set (match_operand:SF 0 "s_register_operand" "=r")
+ [(set (match_operand:SF 0 "s_register_operand" "=r,r")
(if_then_else:SF (match_operator 3 "comparison_operator"
[(match_operand 4 "cc_register" "") (const_int 0)])
- (match_operand:SF 1 "s_register_operand" "0")
- (match_operand:SF 2 "s_register_operand" "r")))]
+ (match_operand:SF 1 "s_register_operand" "0,r")
+ (match_operand:SF 2 "s_register_operand" "r,0")))]
"TARGET_SOFT_FLOAT"
- "mov%D3\\t%0, %2"
+ "@
+ mov%D3\\t%0, %2
+ mov%d3\\t%0, %1"
[(set_attr "conds" "use")])
(define_insn "*movdfcc_insn"
- [(set (match_operand:DF 0 "s_register_operand" "=f,f")
- (if_then_else:DF (match_operator 3 "comparison_operator"
- [(match_operand 4 "cc_register" "") (const_int 0)])
- (match_operand:DF 1 "s_register_operand" "0,0")
- (match_operand:DF 2 "fpu_add_operand" "fG,H")))]
+ [(set (match_operand:DF 0 "s_register_operand" "=f,f,f,f,f,f,f,f")
+ (if_then_else:DF
+ (match_operator 3 "comparison_operator"
+ [(match_operand 4 "cc_register" "") (const_int 0)])
+ (match_operand:DF 1 "fpu_add_operand" "0,0,fG,H,fG,fG,H,H")
+ (match_operand:DF 2 "fpu_add_operand" "fG,H,0,0,fG,H,fG,H")))]
"TARGET_HARD_FLOAT"
"@
mvf%D3d\\t%0, %2
- mnf%D3d\\t%0, #%N2"
- [(set_attr "type" "ffarith")
+ mnf%D3d\\t%0, #%N2
+ mvf%d3d\\t%0, %1
+ mnf%d3d\\t%0, #%N1
+ mvf%d3d\\t%0, %1\;mvf%D3d\\t%0, %2
+ mvf%d3d\\t%0, %1\;mnf%D3d\\t%0, #%N2
+ mnf%d3d\\t%0, #%N1\;mvf%D3d\\t%0, %2
+ mnf%d3d\\t%0, #%N1\;mnf%D3d\\t%0, #%N2"
+ [(set_attr "length" "4,4,4,4,8,8,8,8")
+ (set_attr "type" "ffarith")
(set_attr "conds" "use")])
;; Jump and linkage insns
@@ -4158,14 +4243,17 @@
DONE;
}")
+;; The USE in this pattern is needed to tell flow analysis that this is
+;; a CASESI insn. It has no other purpose.
(define_insn "casesi_internal"
- [(set (pc)
- (if_then_else
- (leu (match_operand:SI 0 "s_register_operand" "r")
- (match_operand:SI 1 "arm_rhs_operand" "rI"))
- (mem:SI (plus:SI (mult:SI (match_dup 0) (const_int 4))
- (label_ref (match_operand 2 "" ""))))
- (label_ref (match_operand 3 "" ""))))]
+ [(parallel [(set (pc)
+ (if_then_else
+ (leu (match_operand:SI 0 "s_register_operand" "r")
+ (match_operand:SI 1 "arm_rhs_operand" "rI"))
+ (mem:SI (plus:SI (mult:SI (match_dup 0) (const_int 4))
+ (label_ref (match_operand 2 "" ""))))
+ (label_ref (match_operand 3 "" ""))))
+ (use (label_ref (match_dup 2)))])]
""
"*
if (flag_pic)
@@ -5663,8 +5751,7 @@
"sub%?s\\t%0, %1, #0"
[(set_attr "conds" "set")])
-; Peepholes to spot possible load- and store-multiples, if the ordering is
-; reversed, check that the memory references aren't volatile.
+; Peepholes to spot possible load- and store-multiples.
(define_peephole
[(set (match_operand:SI 0 "s_register_operand" "=r")
diff --git a/gcc/config/arm/coff.h b/gcc/config/arm/coff.h
index abba7c6b787..92101588c8f 100644
--- a/gcc/config/arm/coff.h
+++ b/gcc/config/arm/coff.h
@@ -30,7 +30,7 @@ Boston, MA 02111-1307, USA. */
point the default. NOT --nfp! --with{enable?} is supposed to replace it
(right?), so let's stop using it. */
#undef TARGET_DEFAULT
-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT /*+ TARGET_CPU_DEFAULT*/)
+#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32)
/* ??? Is a big-endian default intended to be supported? */
#if 0 /*TARGET_CPU_DEFAULT & ARM_FLAG_BIG_END*/
diff --git a/gcc/config/arm/lib1funcs.asm b/gcc/config/arm/lib1funcs.asm
index c2db824738f..35e6bd0d0bc 100644
--- a/gcc/config/arm/lib1funcs.asm
+++ b/gcc/config/arm/lib1funcs.asm
@@ -402,3 +402,22 @@ SYM (__div0):
RET pc, lr
#endif /* L_divmodsi_tools */
+
+#ifdef L_dvmd_lnx
+@ GNU/Linux division-by zero handler. Used in place of L_dvmd_tls
+
+#include <asm/unistd.h>
+#define SIGFPE 8 @ cant use <asm/signal.h> as it
+ @ contains too much C rubbish
+ .globl SYM (__div0)
+ .align 0
+SYM (__div0):
+ stmfd sp!, {r1, lr}
+ swi __NR_getpid
+ cmn r0, #1000
+ ldmgefd sp!, {r1, pc}RETCOND @ not much we can do
+ mov r1, #SIGFPE
+ swi __NR_kill
+ ldmfd sp!, {r1, pc}RETCOND
+
+#endif /* L_dvmd_lnx */
diff --git a/gcc/config/arm/linux-gas.h b/gcc/config/arm/linux-gas.h
index 67f5c6f0503..ea8b4f0a37e 100644
--- a/gcc/config/arm/linux-gas.h
+++ b/gcc/config/arm/linux-gas.h
@@ -1,4 +1,5 @@
-/* Definitions of target machine for GNU compiler. ARM Linux version.
+/* Definitions of target machine for GNU compiler. ARM Linux-based GNU
+ systems version.
Copyright (C) 1997 Free Software Foundation, Inc.
Contributed by Russell King <rmk92@ecs.soton.ac.uk>.
diff --git a/gcc/config/arm/linux.h b/gcc/config/arm/linux.h
index 55579cec724..fa8fef10e72 100644
--- a/gcc/config/arm/linux.h
+++ b/gcc/config/arm/linux.h
@@ -1,6 +1,6 @@
-/* Definitions for ARM running Linux
+/* Definitions for ARM running Linux-based GNU systems.
Copyright (C) 1993, 1994, 1997 Free Software Foundation, Inc.
- Adapted from ARM Linux by Russell King <rmk92@ecs.soton.ac.uk>.
+ Contributed by Russell King <rmk92@ecs.soton.ac.uk>.
This file is part of GNU CC.
@@ -31,7 +31,7 @@ Boston, MA 02111-1307, USA. */
#undef COMMENT_BEGIN
/* We default to ARM3. */
-#define TARGET_CPU_DEFAULT TARGET_CPU_arm3
+#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm3
#undef CPP_PREDEFINES
#define CPP_PREDEFINES \
@@ -56,8 +56,7 @@ Boston, MA 02111-1307, USA. */
#define HANDLE_SYSV_PRAGMA
/* Run-time Target Specification. */
-#define TARGET_VERSION \
- fputs (" (ARM Linux/a.out)", stderr);
+#define TARGET_VERSION fputs (" (ARM GNU/Linux with a.out)", stderr);
/* This is used in ASM_FILE_START */
#define ARM_OS_NAME "Linux"
diff --git a/gcc/config/arm/netbsd.h b/gcc/config/arm/netbsd.h
index 2bcd165181a..94fd024d42e 100644
--- a/gcc/config/arm/netbsd.h
+++ b/gcc/config/arm/netbsd.h
@@ -1,6 +1,5 @@
-/*
- NetBSD/arm (RiscBSD) version.
- Copyright (C) 1993, 1994 Free Software Foundation, Inc.
+/* NetBSD/arm (RiscBSD) version.
+ Copyright (C) 1993, 1994, 1997 Free Software Foundation, Inc.
Contributed by Mark Brinicombe (amb@physig.ph.kcl.ac.uk)
This file is part of GNU CC.
@@ -50,7 +49,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
arm32 is the NetBSD port name, so we always define arm32 and __arm32__. */
#undef CPP_PREDEFINES
#define CPP_PREDEFINES "\
--Dunix -Driscbsd -Darm32 -D__arm32__ -D__NetBSD__ \
+-Dunix -Driscbsd -Darm32 -D__arm32__ -D__arm__ -D__NetBSD__ \
-Asystem(unix) -Asystem(NetBSD) -Acpu(arm) -Amachine(arm)"
/* Define _POSIX_SOURCE if necessary. */
@@ -64,6 +63,13 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#undef CPP_APCS_PC_DEFAULT_SPEC
#define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
+/* Pass -X to the linker so that it will strip symbols starting with 'L' */
+#undef LINK_SPEC
+#define LINK_SPEC "\
+-X %{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{R*} \
+%{static:-Bstatic} %{assert*} \
+"
+
#undef SIZE_TYPE
#define SIZE_TYPE "unsigned int"
@@ -97,12 +103,17 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
fprintf(STREAM, "\tbl\tmcount\n"); \
}
+/* On the ARM `@' introduces a comment, so we must use something else
+ for .type directives. */
+#undef TYPE_OPERAND_FMT
+#define TYPE_OPERAND_FMT "%%%s"
+
/* VERY BIG NOTE : Change of structure alignment for RiscBSD.
There are consequences you should be aware of...
Normally GCC/arm uses a structure alignment of 32 for compatibility
with armcc. This means that structures are padded to a word
- boundry. However this causes problems with bugged NetBSD kernel
+ boundary. However this causes problems with bugged NetBSD kernel
code (possibly userland code as well - I have not checked every
binary). The nature of this bugged code is to rely on sizeof()
returning the correct size of various structures rounded to the
@@ -118,7 +129,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
structures containing shorts will be half word alinged.
structures containing ints will be word aligned.
- This means structures should be padded to a word boundry if
+ This means structures should be padded to a word boundary if
alignment of 32 is required for byte structures etc.
2. A potential performance penalty may exist if strings are no longer
diff --git a/gcc/config/arm/t-linux b/gcc/config/arm/t-linux
index c6ccfd103b2..f45e3147e98 100644
--- a/gcc/config/arm/t-linux
+++ b/gcc/config/arm/t-linux
@@ -10,7 +10,7 @@ ENQUIRE=
CROSS_LIBGCC1 = libgcc1-asm.a
LIBGCC1 = libgcc1-asm.a
LIB1ASMSRC = arm/lib1funcs.asm
-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls
+LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx
MULTILIB_OPTIONS = mapcs-32
MULTILIB_DIRNAMES = apcs-32
diff --git a/gcc/config/arm/t-netbsd b/gcc/config/arm/t-netbsd
index edcea65c751..cc2f6583679 100644
--- a/gcc/config/arm/t-netbsd
+++ b/gcc/config/arm/t-netbsd
@@ -5,7 +5,3 @@ LIBGCC2_CFLAGS=-O2 -fomit-frame-pointer $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) -g0
# Don't build enquire
ENQUIRE=
-
-CROSS_LIBGCC1 = libgcc1-asm.a
-LIB1ASMSRC = arm/lib1funcs.asm
-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls
diff --git a/gcc/config/arm/t-semi b/gcc/config/arm/t-semi
index 9e4ddba3716..7840e2f90fa 100644
--- a/gcc/config/arm/t-semi
+++ b/gcc/config/arm/t-semi
@@ -1,6 +1,6 @@
# Just for these, we omit the frame pointer since it makes such a big
# difference. It is then pointless adding debugging.
-LIBGCC2_CFLAGS=-O2 -fomit-frame-pointer $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) -g0
+LIBGCC2_CFLAGS=-O2 -fomit-frame-pointer $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) -g0
# Don't build enquire
ENQUIRE=
diff --git a/gcc/config/arm/x-riscix b/gcc/config/arm/x-riscix
index 7ab40649816..4584f95244a 100644
--- a/gcc/config/arm/x-riscix
+++ b/gcc/config/arm/x-riscix
@@ -6,4 +6,3 @@ X_CFLAGS= -DPOSIX -Dopterr=gcc_opterr -Doptind=gcc_optind \
OLDCC=/usr/ucb/cc
CC=$(OLDCC)
FIXPROTO_DEFINES= -D_POSIX_SOURCE -D_XOPEN_C -D_BSD_C -D_XOPEN_SOURCE
-INSTALL=$(srcdir)/install.sh -c
diff --git a/gcc/config/arm/xm-arm.h b/gcc/config/arm/xm-arm.h
index 00818e75eab..a6143fa9abf 100644
--- a/gcc/config/arm/xm-arm.h
+++ b/gcc/config/arm/xm-arm.h
@@ -44,12 +44,6 @@ Boston, MA 02111-1307, USA. */
#define USE_C_ALLOCA
#endif
-/* Define this if the library function putenv is available on your machine */
-#define HAVE_PUTENV 1
-
-/* Define this if the library function vprintf is available on your machine */
-#define HAVE_VPRINTF 1
-
/* Define this to be 1 if you know the host compiler supports prototypes, even
if it doesn't define __STDC__, or define it to be 0 if you do not want any
prototypes when compiling GNU CC. */
diff --git a/gcc/config/clipper/clipper.c b/gcc/config/clipper/clipper.c
index 9ee6f444981..f3bae7eead4 100644
--- a/gcc/config/clipper/clipper.c
+++ b/gcc/config/clipper/clipper.c
@@ -1,6 +1,5 @@
/* Subroutines for insn-output.c for Clipper
- Copyright (C) 1987, 1988, 1991 Free Software Foundation, Inc.
-
+ Copyright (C) 1987, 1988, 1991, 1997 Free Software Foundation, Inc.
Contributed by Holger Teutsch (holger@hotbso.rhein-main.de)
This file is part of GNU CC.
@@ -20,8 +19,8 @@ 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 <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
@@ -438,10 +437,45 @@ clipper_builtin_saveregs (arglist)
gen_rtx (CONST_INT, Pmode, 16))),
scratch);
+
+ if (flag_check_memory_usage)
+ {
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ addr, ptr_mode,
+ GEN_INT (5 * GET_MODE_SIZE (SImode)),
+ TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_RW),
+ TYPE_MODE (integer_type_node));
+
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ f0_addr, ptr_mode,
+ GEN_INT (GET_MODE_SIZE (DFmode)),
+ TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_RW),
+ TYPE_MODE (integer_type_node));
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ f1_addr, ptr_mode,
+ GEN_INT (GET_MODE_SIZE (DFmode)),
+ TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_RW),
+ TYPE_MODE (integer_type_node));
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ r0_addr, ptr_mode,
+ GEN_INT (GET_MODE_SIZE (SImode)),
+ TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_RW),
+ TYPE_MODE (integer_type_node));
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ r1_addr, ptr_mode,
+ GEN_INT (GET_MODE_SIZE (SImode)),
+ TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_RW),
+ TYPE_MODE (integer_type_node));
+ }
+
/* Return the address of the va_list constructor, but don't put it in a
register. This fails when not optimizing and produces worse code when
optimizing. */
-
return XEXP (block, 0);
}
diff --git a/gcc/config/clipper/clipper.md b/gcc/config/clipper/clipper.md
index 6790240184c..e045ce9acc8 100644
--- a/gcc/config/clipper/clipper.md
+++ b/gcc/config/clipper/clipper.md
@@ -1,5 +1,5 @@
;;- Machine description for GNU compiler, Clipper Version
-;; Copyright (C) 1987, 1988, 1991, 1993, 1994 Free Software Foundation, Inc.
+;; Copyright (C) 1987, 88, 91, 93, 94, 1997 Free Software Foundation, Inc.
;; Contributed by Holger Teutsch (holger@hotbso.rhein-main.de)
;; This file is part of GNU CC.
@@ -532,8 +532,8 @@
operands[6] = addr0;
operands[7] = addr1;
- operands[0] = gen_rtx (MEM, BLKmode, addr0);
- operands[1] = gen_rtx (MEM, BLKmode, addr1);
+ operands[0] = change_address (operands[0], VOIDmode, addr0);
+ operands[1] = change_address (operands[1], VOIDmode, addr1);
if (GET_CODE (operands[2]) != CONST_INT)
operands[2] = force_reg (SImode, operands[2]);
diff --git a/gcc/config/clipper/clix.h b/gcc/config/clipper/clix.h
index d08e2203ff0..c36e4de46a0 100644
--- a/gcc/config/clipper/clix.h
+++ b/gcc/config/clipper/clix.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler. Clipper/Clix version.
- Copyright (C) 1988, 1993, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1988, 1993, 1996, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -31,6 +31,8 @@ Boston, MA 02111-1307, USA. */
#undef LIB_SPEC
+#define TARGET_MEM_FUNCTIONS
+
#undef HAVE_ATEXIT
#define HAVE_ATEXIT
diff --git a/gcc/config/clipper/xm-clix.h b/gcc/config/clipper/xm-clix.h
index 5485c242539..726660df46a 100644
--- a/gcc/config/clipper/xm-clix.h
+++ b/gcc/config/clipper/xm-clix.h
@@ -27,13 +27,4 @@
/* isinf isn't there, but finite is. */
#define isinf(x) (!finite(x))
-
#define USG
-
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define bcmp(a,b,c) memcmp (a,b,c)
-#define index strchr
-#define rindex strrchr
-
-#define TARGET_MEM_FUNCTIONS
diff --git a/gcc/config/convex/convex.c b/gcc/config/convex/convex.c
index f642fb07c86..cd2eb55c964 100644
--- a/gcc/config/convex/convex.c
+++ b/gcc/config/convex/convex.c
@@ -1,5 +1,5 @@
/* Subroutines for insn-output.c for Convex.
- Copyright (C) 1988, 1993, 1994 Free Software Foundation, Inc.
+ Copyright (C) 1988, 1993, 1994, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -19,6 +19,7 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "config.h"
+#include <stdio.h>
#include "tree.h"
#include "rtl.h"
#include "regs.h"
@@ -31,9 +32,6 @@ Boston, MA 02111-1307, USA. */
#include "output.h"
#include "expr.h"
-#undef NULL
-#include <stdio.h>
-
/* Tables used in convex.h */
char regno_ok_for_index_p_base[1 + LAST_VIRTUAL_REGISTER + 1];
diff --git a/gcc/config/convex/x-convex b/gcc/config/convex/x-convex
index e1fbe742d03..8029ac5b91f 100644
--- a/gcc/config/convex/x-convex
+++ b/gcc/config/convex/x-convex
@@ -1,5 +1,5 @@
# ld can make exe's c2-only if this lib is searched even though not loaded
-CCLIBFLAGS = -tm c1
+CCLIBFLAGS = -tm c1
# Use -pcc to avoid surprises.
CC = cc -pcc
diff --git a/gcc/config/convex/xm-convex.h b/gcc/config/convex/xm-convex.h
index ebe334579ec..aaaa3b1464c 100644
--- a/gcc/config/convex/xm-convex.h
+++ b/gcc/config/convex/xm-convex.h
@@ -1,5 +1,5 @@
/* Configuration for GNU C-compiler for Convex.
- Copyright (C) 1989, 1993 Free Software Foundation, Inc.
+ Copyright (C) 1989, 1993, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -42,11 +42,6 @@ Boston, MA 02111-1307, USA. */
#define P_tmpdir "/tmp/"
-/* Use memcpy and memset -- either would work but these get inlined. */
-
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-
/* Convex uses Vax or IEEE floats.
Both formats have Vax semantics. */
diff --git a/gcc/config/dsp16xx/dsp16xx.c b/gcc/config/dsp16xx/dsp16xx.c
index 90b316d5a1c..f108ef926f6 100644
--- a/gcc/config/dsp16xx/dsp16xx.c
+++ b/gcc/config/dsp16xx/dsp16xx.c
@@ -1,5 +1,5 @@
/* Subroutines for assembler code output on the DSP1610.
- Copyright (C) 1994, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1994, 1995, 1997 Free Software Foundation, Inc.
Contributed by Michael Collison (collison@world.std.com).
This file is part of GNU CC.
@@ -20,8 +20,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* Some output-actions in dsp1600.md need these. */
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
diff --git a/gcc/config/dsp16xx/dsp16xx.h b/gcc/config/dsp16xx/dsp16xx.h
index 83a97f8979c..3047372cc71 100644
--- a/gcc/config/dsp16xx/dsp16xx.h
+++ b/gcc/config/dsp16xx/dsp16xx.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler. AT&T DSP1600.
- Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by Michael Collison (collison@world.std.com).
This file is part of GNU CC.
@@ -440,7 +440,7 @@ extern int target_flags;
/* 1 for registers that have pervasive standard uses
and are not available for the register allocator.
- The registers are layed out as follows:
+ The registers are laid out as follows:
{a0,a0l,a1,a1l,x,y,yl,p,pl} - Data Arithmetic Unit
{r0,r1,r2,r3,j,k,ybase} - Y Space Address Arithmetic Unit
@@ -1652,7 +1652,7 @@ const_section () \
/* This is how to output an assembler line defining a `float' constant. */
#define ASM_OUTPUT_FLOAT(FILE,VALUE) asm_output_float (FILE, VALUE)
-/* This is how to output and assembler line defininf a 'float' constant of
+/* This is how to output an assembler line defining a 'float' constant of
size HFmode. */
#define ASM_OUTPUT_SHORT_FLOAT(FILE,VALUE) asm_output_float (FILE, VALUE)
diff --git a/gcc/config/dsp16xx/dsp16xx.md b/gcc/config/dsp16xx/dsp16xx.md
index 4e8f31dfe6a..9274f47082e 100644
--- a/gcc/config/dsp16xx/dsp16xx.md
+++ b/gcc/config/dsp16xx/dsp16xx.md
@@ -1,5 +1,5 @@
;;- Machine description for the AT&T DSP1600 for GNU C compiler
-;; Copyright (C) 1994, 1995 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1995, 1997 Free Software Foundation, Inc.
;; Contributed by Michael Collison (collison@world.std.com).
;; This file is part of GNU CC.
@@ -1136,8 +1136,8 @@
operands[5] = addr0;
operands[6] = addr1;
- operands[0] = gen_rtx (MEM, BLKmode, addr0);
- operands[1] = gen_rtx (MEM, BLKmode, addr1);
+ operands[0] = change_address (operands[0], VOIDmode, addr0);
+ operands[1] = change_address (operands[1], VOIDmode, addr1);
}")
(define_insn ""
diff --git a/gcc/config/elxsi/elxsi.c b/gcc/config/elxsi/elxsi.c
index e2dadb99a39..b8818531b84 100644
--- a/gcc/config/elxsi/elxsi.c
+++ b/gcc/config/elxsi/elxsi.c
@@ -1,5 +1,5 @@
/* Subroutines for insn-output.c for GNU compiler. Elxsi version.
- Copyright (C) 1987, 1992 Free Software Foundation, Inc
+ Copyright (C) 1987, 1992, 1997 Free Software Foundation, Inc
This port, done by Mike Stump <mrs@cygnus.com> in 1988, and is the first
64 bit port of GNU CC.
Based upon the VAX port.
@@ -21,8 +21,8 @@ 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 <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
extern char *reg_names[];
diff --git a/gcc/config/float-i128.h b/gcc/config/float-i128.h
new file mode 100644
index 00000000000..6a9dd48b1a3
--- /dev/null
+++ b/gcc/config/float-i128.h
@@ -0,0 +1,96 @@
+/* float.h for target with IEEE 32, 64 and 128 bit floating point formats */
+#ifndef _FLOAT_H_
+#define _FLOAT_H_
+/* Produced by enquire version 4.3, CWI, Amsterdam */
+
+ /* Radix of exponent representation */
+#undef FLT_RADIX
+#define FLT_RADIX 2
+ /* Number of base-FLT_RADIX digits in the significand of a float */
+#undef FLT_MANT_DIG
+#define FLT_MANT_DIG 24
+ /* Number of decimal digits of precision in a float */
+#undef FLT_DIG
+#define FLT_DIG 6
+ /* Addition rounds to 0: zero, 1: nearest, 2: +inf, 3: -inf, -1: unknown */
+#undef FLT_ROUNDS
+#define FLT_ROUNDS 1
+ /* Difference between 1.0 and the minimum float greater than 1.0 */
+#undef FLT_EPSILON
+#define FLT_EPSILON 1.19209290e-07F
+ /* Minimum int x such that FLT_RADIX**(x-1) is a normalised float */
+#undef FLT_MIN_EXP
+#define FLT_MIN_EXP (-125)
+ /* Minimum normalised float */
+#undef FLT_MIN
+#define FLT_MIN 1.17549435e-38F
+ /* Minimum int x such that 10**x is a normalised float */
+#undef FLT_MIN_10_EXP
+#define FLT_MIN_10_EXP (-37)
+ /* Maximum int x such that FLT_RADIX**(x-1) is a representable float */
+#undef FLT_MAX_EXP
+#define FLT_MAX_EXP 128
+ /* Maximum float */
+#undef FLT_MAX
+#define FLT_MAX 3.40282347e+38F
+ /* Maximum int x such that 10**x is a representable float */
+#undef FLT_MAX_10_EXP
+#define FLT_MAX_10_EXP 38
+
+ /* Number of base-FLT_RADIX digits in the significand of a double */
+#undef DBL_MANT_DIG
+#define DBL_MANT_DIG 53
+ /* Number of decimal digits of precision in a double */
+#undef DBL_DIG
+#define DBL_DIG 15
+ /* Difference between 1.0 and the minimum double greater than 1.0 */
+#undef DBL_EPSILON
+#define DBL_EPSILON 2.2204460492503131e-16
+ /* Minimum int x such that FLT_RADIX**(x-1) is a normalised double */
+#undef DBL_MIN_EXP
+#define DBL_MIN_EXP (-1021)
+ /* Minimum normalised double */
+#undef DBL_MIN
+#define DBL_MIN 2.2250738585072014e-308
+ /* Minimum int x such that 10**x is a normalised double */
+#undef DBL_MIN_10_EXP
+#define DBL_MIN_10_EXP (-307)
+ /* Maximum int x such that FLT_RADIX**(x-1) is a representable double */
+#undef DBL_MAX_EXP
+#define DBL_MAX_EXP 1024
+ /* Maximum double */
+#undef DBL_MAX
+#define DBL_MAX 1.7976931348623157e+308
+ /* Maximum int x such that 10**x is a representable double */
+#undef DBL_MAX_10_EXP
+#define DBL_MAX_10_EXP 308
+
+ /* Number of base-FLT_RADIX digits in the significand of a long double */
+#undef LDBL_MANT_DIG
+#define LDBL_MANT_DIG 113
+ /* Number of decimal digits of precision in a long double */
+#undef LDBL_DIG
+#define LDBL_DIG 33
+ /* Difference between 1.0 and the minimum long double greater than 1.0 */
+#undef LDBL_EPSILON
+#define LDBL_EPSILON 1.925929944387235853055977942584927319E-34L
+ /* Minimum int x such that FLT_RADIX**(x-1) is a normalised long double */
+#undef LDBL_MIN_EXP
+#define LDBL_MIN_EXP (-16381)
+ /* Minimum normalised long double */
+#undef LDBL_MIN
+#define LDBL_MIN 3.362103143112093506262677817321752603E-4932L
+ /* Minimum int x such that 10**x is a normalised long double */
+#undef LDBL_MIN_10_EXP
+#define LDBL_MIN_10_EXP (-4931)
+ /* Maximum int x such that FLT_RADIX**(x-1) is a representable long double */
+#undef LDBL_MAX_EXP
+#define LDBL_MAX_EXP 16384
+ /* Maximum long double */
+#undef LDBL_MAX
+#define LDBL_MAX 1.189731495357231765085759326628007016E+4932L
+ /* Maximum int x such that 10**x is a representable long double */
+#undef LDBL_MAX_10_EXP
+#define LDBL_MAX_10_EXP 4932
+
+#endif /* _FLOAT_H_ */
diff --git a/gcc/config/fp-bit.c b/gcc/config/fp-bit.c
index 52103548bef..c05f215c0ee 100644
--- a/gcc/config/fp-bit.c
+++ b/gcc/config/fp-bit.c
@@ -241,7 +241,7 @@ typedef unsigned int UDItype __attribute__ ((mode (DI)));
/* numeric parameters */
/* F_D_BITOFF is the number of bits offset between the MSB of the mantissa
of a float and of a double. Assumes there are only two float types.
- (double::FRAC_BITS+double::NGARGS-(float::FRAC_BITS-float::NGARDS))
+ (double::FRAC_BITS+double::NGARDS-(float::FRAC_BITS-float::NGARDS))
*/
#define F_D_BITOFF (52+8-(23+7))
@@ -456,7 +456,7 @@ pack_d ( fp_number_type * src)
}
/* We previously used bitfields to store the number, but this doesn't
- handle little/big endian systems conviently, so use shifts and
+ handle little/big endian systems conveniently, so use shifts and
masks */
#ifdef FLOAT_BIT_ORDER_MISMATCH
dst.bits.fraction = fraction;
@@ -483,7 +483,7 @@ static void
unpack_d (FLO_union_type * src, fp_number_type * dst)
{
/* We previously used bitfields to store the number, but this doesn't
- handle little/big endian systems conviently, so use shifts and
+ handle little/big endian systems conveniently, so use shifts and
masks */
fractype fraction;
int exp;
diff --git a/gcc/config/fx80/fx80.c b/gcc/config/fx80/fx80.c
index a87be41e5e8..4e8f42086d3 100644
--- a/gcc/config/fx80/fx80.c
+++ b/gcc/config/fx80/fx80.c
@@ -1,5 +1,5 @@
/* Subroutines for insn-output.c for Alliant FX computers.
- Copyright (C) 1989,1991 Free Software Foundation, Inc.
+ Copyright (C) 1989, 1991, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -20,8 +20,8 @@ Boston, MA 02111-1307, USA. */
/* Some output-actions in alliant.md need these. */
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
diff --git a/gcc/config/gmicro/gmicro.c b/gcc/config/gmicro/gmicro.c
index 866c6c4a672..2911c9772c8 100644
--- a/gcc/config/gmicro/gmicro.c
+++ b/gcc/config/gmicro/gmicro.c
@@ -2,7 +2,7 @@
Ported by Masanobu Yuhara, Fujitsu Laboratories LTD.
(yuhara@flab.fujitsu.co.jp)
- Copyright (C) 1990, 1991 Free Software Foundation, Inc.
+ Copyright (C) 1990, 1991, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -25,8 +25,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c
index 77cb6ce9b36..6ddd8cd3eeb 100644
--- a/gcc/config/h8300/h8300.c
+++ b/gcc/config/h8300/h8300.c
@@ -1,5 +1,5 @@
/* Subroutines for insn-output.c for Hitachi H8/300.
- Copyright (C) 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
Contributed by Steve Chamberlain (sac@cygnus.com),
Jim Wilson (wilson@cygnus.com), and Doug Evans (dje@cygnus.com).
@@ -20,8 +20,8 @@ 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 <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
@@ -52,7 +52,7 @@ int cpu_type;
(either via #pragma or an attribute specification). */
int interrupt_handler;
-/* True if the current fucntion is an OS Task
+/* True if the current function is an OS Task
(via an attribute specification). */
int os_task;
diff --git a/gcc/config/h8300/h8300.h b/gcc/config/h8300/h8300.h
index a11541ff071..9002098777c 100644
--- a/gcc/config/h8300/h8300.h
+++ b/gcc/config/h8300/h8300.h
@@ -351,7 +351,7 @@ enum reg_class {
#define REG_CLASS_CONTENTS \
{ 0, /* No regs */ \
- 0x0ff, /* GENERAL_REGS */ \
+ 0x2ff, /* GENERAL_REGS */ \
0x100, /* MAC_REGS */ \
0x3ff, /* ALL_REGS */ \
}
@@ -780,7 +780,9 @@ struct rtx_def *function_arg();
#define REG_OK_FOR_INDEX_P(X) 0
/* 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_P(X) 1
+/* Don't use REGNO_OK_FOR_BASE_P here because it uses reg_renumber. */
+#define REG_OK_FOR_BASE_P(X) \
+ (REGNO (X) >= FIRST_PSEUDO_REGISTER || REGNO (X) != 8)
#define REG_OK_FOR_INDEX_P_STRICT(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
#define REG_OK_FOR_BASE_P_STRICT(X) REGNO_OK_FOR_BASE_P (REGNO (X))
#define STRICT 0
@@ -862,9 +864,7 @@ struct rtx_def *function_arg();
has an effect that depends on the machine mode it is used for.
On the H8/300, the predecrement and postincrement address depend thus
- (the amount of decrement or increment being the length of the operand)
- and all indexed address depend thus (because the index scale factor
- is the length of the operand). */
+ (the amount of decrement or increment being the length of the operand). */
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
if (GET_CODE (ADDR) == POST_INC || GET_CODE (ADDR) == PRE_DEC) goto LABEL;
@@ -986,7 +986,7 @@ h8300_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS)
/* Tell final.c how to eliminate redundant test instructions. */
/* Here we define machine-dependent flags and fields in cc_status
- (see `conditions.h'). No extra ones are needed for the vax. */
+ (see `conditions.h'). No extra ones are needed for the h8300. */
/* Store in cc_status the expressions
that the condition codes will describe
@@ -1347,7 +1347,7 @@ do { char dstr[30]; \
#define PRINT_OPERAND(FILE, X, CODE) print_operand(FILE,X,CODE)
/* Print a memory operand whose address is X, on file FILE.
- This uses a function in output-vax.c. */
+ This uses a function in h8300.c. */
#define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE, ADDR)
diff --git a/gcc/config/h8300/h8300.md b/gcc/config/h8300/h8300.md
index 79da8bfb923..ebc1a29cea4 100644
--- a/gcc/config/h8300/h8300.md
+++ b/gcc/config/h8300/h8300.md
@@ -1,5 +1,5 @@
;; GCC machine description for Hitachi H8/300
-;; Copyright (C) 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
;; Contributed by Steve Chamberlain (sac@cygnus.com),
;; Jim Wilson (wilson@cygnus.com), and Doug Evans (dje@cygnus.com).
@@ -1669,8 +1669,6 @@
""
"
{
- extern int optimize;
-
if (TARGET_H8300
&& GET_CODE (operands[1]) != CONST_INT
&& !optimize)
@@ -1753,7 +1751,6 @@
""
"
{
- extern int optimize;
if (TARGET_H8300
&& GET_CODE (operands[1]) != CONST_INT
&& !optimize)
diff --git a/gcc/config/h8300/t-h8300 b/gcc/config/h8300/t-h8300
index 236ebccc8c4..f7536b5383f 100644
--- a/gcc/config/h8300/t-h8300
+++ b/gcc/config/h8300/t-h8300
@@ -3,7 +3,7 @@ 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.
-LIBGCC2_CFLAGS = -g -O2 -DDF=SF -DDI=SI $(GCC_CFLAGS) $(LIBGCC2_INCLUDES)
+TARGET_LIBGCC2_CFLAGS = -DDF=SF -DDI=SI
LIB2FUNCS_EXTRA = fp-bit.c
diff --git a/gcc/config/i370/i370.c b/gcc/config/i370/i370.c
index 6f59c5c4ffd..55189825540 100644
--- a/gcc/config/i370/i370.c
+++ b/gcc/config/i370/i370.c
@@ -1,5 +1,5 @@
/* Subroutines for insn-output.c for System/370.
- Copyright (C) 1989, 1993, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1989, 1993, 1995, 1997 Free Software Foundation, Inc.
Contributed by Jan Stein (jan@cd.chalmers.se).
Modified for MVS C/370 by Dave Pitts (dpitts@nyx.cs.du.edu)
@@ -20,10 +20,10 @@ 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 <stdio.h>
#include <string.h>
#include <ctype.h>
-#include "config.h"
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
@@ -35,6 +35,11 @@ Boston, MA 02111-1307, USA. */
#include "insn-attr.h"
#include "flags.h"
#include "recog.h"
+#ifdef sun
+#include <sys/types.h>
+#include <ctype.h>
+#endif
+#include <time.h>
/* Label node, this structure is used to keep track of labels on the
@@ -285,7 +290,7 @@ mvs_add_label (id)
label_anchor = lp;
}
-/* Check to see if the label is in the list. If 1 is returned then a load
+/* Check to see if the label is in the list. If 1 is returned then a load
and branch on register must be generated.
ID is the label number of the label being checked. */
@@ -480,3 +485,100 @@ unsigned_jump_follows_p (insn)
return GET_CODE (insn) != GE && GET_CODE (insn) != GT
&& GET_CODE (insn) != LE && GET_CODE (insn) != LT;
}
+
+void
+i370_function_prolog (f, l)
+ FILE *f;
+ int l;
+{
+#if MACROPROLOGUE == 1
+ fprintf (f, "\tEDCPRLG USRDSAL=%d,BASEREG=%d\n",
+ STACK_POINTER_OFFSET + l - 120 +
+ current_function_outgoing_args_size, BASE_REGISTER);
+ fprintf (f, "PG%d\tEQU\t*\n", mvs_page_num );
+ fprintf (f, "\tLR\t11,1\n");
+ fprintf (f, "\tL\t%d,=A(PGT%d)\n", PAGE_REGISTER, mvs_page_num);
+ mvs_page_code = 6;
+ mvs_page_lit = 4;
+ mvs_check_page (f, 0, 0);
+ function_base_page = mvs_page_num;
+#else /* MACROPROLOGUE != 1 */
+ static int function_label_index = 1;
+ static int function_first = 0;
+ static int function_year, function_month, function_day;
+ static int function_hour, function_minute, function_second;
+ int i;
+ if (!function_first)
+ {
+ struct tm *function_time;
+ time_t lcltime;
+ time (&lcltime);
+ function_time = localtime (&lcltime);
+ function_year = function_time->tm_year + 1900;
+ function_month = function_time->tm_mon + 1;
+ function_day = function_time->tm_mday;
+ function_hour = function_time->tm_hour;
+ function_minute = function_time->tm_min;
+ function_second = function_time->tm_sec;
+ fprintf (f, "PPA2\tDS\t0F\n");
+ fprintf (f, "\tDC\tX'03',X'00',X'33',X'00'\n");
+ fprintf (f, "\tDC\tV(CEESTART),A(0)\n");
+ fprintf (f, "\tDC\tA(CEETIMES)\n");
+ fprintf (f, "CEETIMES\tDS\t0F\n");
+ fprintf (f, "\tDC\tCL4'%d',CL4'%02d%02d',CL6'%02d%02d00'\n",
+ function_year, function_month, function_day,
+ function_hour, function_minute, function_second);
+ fprintf (f, "\tDC\tCL2'01',CL4'0100'\n");
+ }
+ fprintf (f, "$DSD%03d\tDSECT\n", function_label_index);
+ fprintf (f, "\tDS\tD\n");
+ fprintf (f, "\tDS\tCL(%d)\n", STACK_POINTER_OFFSET + l
+ + current_function_outgoing_args_size);
+ fprintf (f, "\tORG\t$DSD%03d\n", function_label_index);
+ fprintf (f, "\tDS\tCL(120+8)\n");
+ fprintf (f, "\tORG\n");
+ fprintf (f, "\tDS\t0D\n");
+ fprintf (f, "$DSL%03d\tEQU\t*-$DSD%03d-8\n", function_label_index,
+ function_label_index);
+ fprintf (f, "\tDS\t0H\n");
+ assemble_name (f, mvs_function_name);
+ fprintf (f, "\tEQU\t*\n");
+ fprintf (f, "\tUSING\t*,15\n");
+ fprintf (f, "\tB\tFPL%03d\n", function_label_index);
+ fprintf (f, "\tDC\tAL1(FPL%03d+4-*)\n", function_label_index + 1);
+ fprintf (f, "\tDC\tX'CE',X'A0',AL1(16)\n");
+ fprintf (f, "\tDC\tAL4(PPA2)\n");
+ fprintf (f, "\tDC\tAL4(0)\n");
+ fprintf (f, "\tDC\tAL4($DSL%03d)\n", function_label_index);
+ fprintf (f, "FPL%03d\tEQU\t*\n", function_label_index + 1);
+ fprintf (f, "\tDC\tAL2(%d),C'%s'\n", strlen (mvs_function_name),
+ mvs_function_name);
+ fprintf (f, "FPL%03d\tDS\t0H\n", function_label_index);
+ fprintf (f, "\tSTM\t14,12,12(13)\n");
+ fprintf (f, "\tL\t2,76(,13)\n");
+ fprintf (f, "\tL\t0,16(,15)\n");
+ fprintf (f, "\tALR\t0,2\n");
+ fprintf (f, "\tCL\t0,12(,12)\n");
+ fprintf (f, "\tBNH\t*+10\n");
+ fprintf (f, "\tL\t15,116(,12)\n");
+ fprintf (f, "\tBALR\t14,15\n");
+ fprintf (f, "\tL\t15,72(,13)\n");
+ fprintf (f, "\tSTM\t15,0,72(2)\n");
+ fprintf (f, "\tMVI\t0(2),X'10'\n");
+ fprintf (f, "\tST\t2,8(,13)\n ");
+ fprintf (f, "\tST\t13,4(,2)\n ");
+ fprintf (f, "\tLR\t13,2\n");
+ fprintf (f, "\tDROP\t15\n");
+ fprintf (f, "\tBALR\t%d,0\n", BASE_REGISTER);
+ fprintf (f, "PG%d\tEQU\t*\n", mvs_page_num );
+ fprintf (f, "\tUSING\t*,%d\n", BASE_REGISTER);
+ fprintf (f, "\tLR\t11,1\n");
+ fprintf (f, "\tL\t%d,=A(PGT%d)\n", PAGE_REGISTER, mvs_page_num);
+ mvs_page_code = 4;
+ mvs_page_lit = 4;
+ mvs_check_page (f, 0, 0);
+ function_base_page = mvs_page_num;
+ function_first = 1;
+ function_label_index += 2;
+#endif /* MACROPROLOGUE */
+}
diff --git a/gcc/config/i370/i370.h b/gcc/config/i370/i370.h
index 576a44912f7..e213883075b 100644
--- a/gcc/config/i370/i370.h
+++ b/gcc/config/i370/i370.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler. System/370 version.
- Copyright (C) 1989, 1993, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1989, 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by Jan Stein (jan@cd.chalmers.se).
Modified for C/370 MVS by Dave Pitts (dpitts@nyx.cs.du.edu)
@@ -20,12 +20,6 @@ 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 sun
-#include <sys/types.h>
-#include <ctype.h>
-#endif
-#include <time.h>
-
#define TARGET_VERSION printf (" (370/MVS)");
/* Options for the preprocessor for this target machine. */
@@ -489,103 +483,7 @@ enum reg_class
/* This macro generates the assembly code for function entry.
All of the C/370 environment is preserved. */
-
-#if MACROPROLOGUE == 1
-#define FUNCTION_PROLOGUE(FILE, LSIZE) \
-{ \
- fprintf (FILE, "\tEDCPRLG USRDSAL=%d,BASEREG=%d\n", \
- STACK_POINTER_OFFSET + LSIZE - 120 + \
- current_function_outgoing_args_size, BASE_REGISTER); \
- fprintf (FILE, "PG%d\tEQU\t*\n", mvs_page_num ); \
- fprintf (FILE, "\tLR\t11,1\n"); \
- fprintf (FILE, "\tL\t%d,=A(PGT%d)\n", PAGE_REGISTER, mvs_page_num); \
- mvs_page_code = 6; \
- mvs_page_lit = 4; \
- mvs_check_page (FILE, 0, 0); \
- function_base_page = mvs_page_num; \
-}
-#else /* MACROPROLOGUE != 1 */
-#define FUNCTION_PROLOGUE(FILE, LSIZE) \
-{ \
- static int function_label_index = 1; \
- static int function_first = 0; \
- static int function_year, function_month, function_day; \
- static int function_hour, function_minute, function_second; \
- int i; \
- if (!function_first) \
- { \
- struct tm *function_time; \
- time_t lcltime; \
- time (&lcltime); \
- function_time = localtime (&lcltime); \
- function_year = function_time->tm_year + 1900; \
- function_month = function_time->tm_mon + 1; \
- function_day = function_time->tm_mday; \
- function_hour = function_time->tm_hour; \
- function_minute = function_time->tm_min; \
- function_second = function_time->tm_sec; \
- fprintf (FILE, "PPA2\tDS\t0F\n"); \
- fprintf (FILE, "\tDC\tX'03',X'00',X'33',X'00'\n"); \
- fprintf (FILE, "\tDC\tV(CEESTART),A(0)\n"); \
- fprintf (FILE, "\tDC\tA(CEETIMES)\n"); \
- fprintf (FILE, "CEETIMES\tDS\t0F\n"); \
- fprintf (FILE, "\tDC\tCL4'%d',CL4'%02d%02d',CL6'%02d%02d00'\n", \
- function_year, function_month, function_day, \
- function_hour, function_minute, function_second); \
- fprintf (FILE, "\tDC\tCL2'01',CL4'0100'\n"); \
- } \
- fprintf (FILE, "$DSD%03d\tDSECT\n", function_label_index); \
- fprintf (FILE, "\tDS\tD\n"); \
- fprintf (FILE, "\tDS\tCL(%d)\n", STACK_POINTER_OFFSET + LSIZE \
- + current_function_outgoing_args_size); \
- fprintf (FILE, "\tORG\t$DSD%03d\n", function_label_index); \
- fprintf (FILE, "\tDS\tCL(120+8)\n"); \
- fprintf (FILE, "\tORG\n"); \
- fprintf (FILE, "\tDS\t0D\n"); \
- fprintf (FILE, "$DSL%03d\tEQU\t*-$DSD%03d-8\n", function_label_index, \
- function_label_index); \
- fprintf (FILE, "\tDS\t0H\n"); \
- assemble_name (FILE, mvs_function_name); \
- fprintf (FILE, "\tEQU\t*\n"); \
- fprintf (FILE, "\tUSING\t*,15\n"); \
- fprintf (FILE, "\tB\tFPL%03d\n", function_label_index); \
- fprintf (FILE, "\tDC\tAL1(FPL%03d+4-*)\n", function_label_index + 1); \
- fprintf (FILE, "\tDC\tX'CE',X'A0',AL1(16)\n"); \
- fprintf (FILE, "\tDC\tAL4(PPA2)\n"); \
- fprintf (FILE, "\tDC\tAL4(0)\n"); \
- fprintf (FILE, "\tDC\tAL4($DSL%03d)\n", function_label_index); \
- fprintf (FILE, "FPL%03d\tEQU\t*\n", function_label_index + 1); \
- fprintf (FILE, "\tDC\tAL2(%d),C'%s'\n", strlen (mvs_function_name), \
- mvs_function_name); \
- fprintf (FILE, "FPL%03d\tDS\t0H\n", function_label_index); \
- fprintf (FILE, "\tSTM\t14,12,12(13)\n"); \
- fprintf (FILE, "\tL\t2,76(,13)\n"); \
- fprintf (FILE, "\tL\t0,16(,15)\n"); \
- fprintf (FILE, "\tALR\t0,2\n"); \
- fprintf (FILE, "\tCL\t0,12(,12)\n"); \
- fprintf (FILE, "\tBNH\t*+10\n"); \
- fprintf (FILE, "\tL\t15,116(,12)\n"); \
- fprintf (FILE, "\tBALR\t14,15\n"); \
- fprintf (FILE, "\tL\t15,72(,13)\n"); \
- fprintf (FILE, "\tSTM\t15,0,72(2)\n"); \
- fprintf (FILE, "\tMVI\t0(2),X'10'\n"); \
- fprintf (FILE, "\tST\t2,8(,13)\n "); \
- fprintf (FILE, "\tST\t13,4(,2)\n "); \
- fprintf (FILE, "\tLR\t13,2\n"); \
- fprintf (FILE, "\tDROP\t15\n"); \
- fprintf (FILE, "\tBALR\t%d,0\n", BASE_REGISTER); \
- fprintf (FILE, "PG%d\tEQU\t*\n", mvs_page_num ); \
- fprintf (FILE, "\tUSING\t*,%d\n", BASE_REGISTER); \
- fprintf (FILE, "\tLR\t11,1\n"); \
- fprintf (FILE, "\tL\t%d,=A(PGT%d)\n", PAGE_REGISTER, mvs_page_num); \
- mvs_page_code = 4; \
- mvs_page_lit = 4; \
- mvs_check_page (FILE, 0, 0); \
- function_base_page = mvs_page_num; \
- function_first = 1; \
- function_label_index += 2; \
-}
-#endif /* MACROPROLOGUE */
+#define FUNCTION_PROLOGUE(FILE, LSIZE) i370_function_prolog ((FILE), (LSIZE));
#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
{ \
diff --git a/gcc/config/i370/i370.md b/gcc/config/i370/i370.md
index e12d2f62026..c39007d2d8a 100644
--- a/gcc/config/i370/i370.md
+++ b/gcc/config/i370/i370.md
@@ -1,5 +1,5 @@
;;- Machine description for GNU compiler -- System/370 version.
-;; Copyright (C) 1989, 1993, 1994, 1995 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 93, 94, 95, 1997 Free Software Foundation, Inc.
;; Contributed by Jan Stein (jan@cd.chalmers.se).
;; Modified for MVS C/370 by Dave Pitts (dpitts@nyx.cs.du.edu)
@@ -1210,36 +1210,30 @@ check_label_emit ();
op0 = XEXP (operands[0], 0);
if (GET_CODE (op0) == REG
- || (GET_CODE (op0) == PLUS && GET_CODE (XEXP (op0, 0)) == REG
- && GET_CODE (XEXP (op0, 1)) == CONST_INT
- && (unsigned) INTVAL (XEXP (op0, 1)) < 4096))
- {
- op0 = operands[0];
- }
+ || (GET_CODE (op0) == PLUS && GET_CODE (XEXP (op0, 0)) == REG
+ && GET_CODE (XEXP (op0, 1)) == CONST_INT
+ && (unsigned) INTVAL (XEXP (op0, 1)) < 4096))
+ op0 = operands[0];
else
- {
- op0 = gen_rtx (MEM, BLKmode, copy_to_mode_reg (SImode, op0));
- }
+ op0 = change_address (operands[0], VOIDmode,
+ copy_to_mode_reg (SImode, op0));
op1 = XEXP (operands[1], 0);
if (GET_CODE (op1) == REG
|| (GET_CODE (op1) == PLUS && GET_CODE (XEXP (op1, 0)) == REG
&& GET_CODE (XEXP (op1, 1)) == CONST_INT
&& (unsigned) INTVAL (XEXP (op1, 1)) < 4096))
- {
- op1 = operands[1];
- }
+ op1 = operands[1];
else
- {
- op1 = gen_rtx (MEM, BLKmode, copy_to_mode_reg (SImode, op1));
- }
+ op1 = change_address (operands[1], VOIDmode,
+ copy_to_mode_reg (SImode, op1));
if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 256)
- {
- emit_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (2,
- gen_rtx (SET, VOIDmode, op0, op1),
- gen_rtx (USE, VOIDmode, operands[2]))));
- }
+ emit_insn (gen_rtx (PARALLEL, VOIDmode,
+ gen_rtvec (2,
+ gen_rtx (SET, VOIDmode, op0, op1),
+ gen_rtx (USE, VOIDmode, operands[2]))));
+
else
{
rtx reg1 = gen_reg_rtx (DImode);
@@ -1248,13 +1242,14 @@ check_label_emit ();
emit_insn (gen_rtx (SET, VOIDmode, subreg, operands[2]));
emit_insn (gen_rtx (SET, VOIDmode, gen_rtx (SUBREG, SImode, reg2, 1),
- subreg));
- emit_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (5,
- gen_rtx (SET, VOIDmode, op0, op1),
- gen_rtx (USE, VOIDmode, reg1),
- gen_rtx (USE, VOIDmode, reg2),
- gen_rtx (CLOBBER, VOIDmode, reg1),
- gen_rtx (CLOBBER, VOIDmode, reg2))));
+ subreg));
+ emit_insn (gen_rtx (PARALLEL, VOIDmode,
+ gen_rtvec (5,
+ gen_rtx (SET, VOIDmode, op0, op1),
+ gen_rtx (USE, VOIDmode, reg1),
+ gen_rtx (USE, VOIDmode, reg2),
+ gen_rtx (CLOBBER, VOIDmode, reg1),
+ gen_rtx (CLOBBER, VOIDmode, reg2))));
}
DONE;
}")
diff --git a/gcc/config/i370/xm-i370.h b/gcc/config/i370/xm-i370.h
index 438a6a4be9d..ac753633070 100644
--- a/gcc/config/i370/xm-i370.h
+++ b/gcc/config/i370/xm-i370.h
@@ -1,5 +1,5 @@
/* Configuration for GNU C-compiler for System/370.
- Copyright (C) 1989, 1993 Free Software Foundation, Inc.
+ Copyright (C) 1989, 1993, 1997 Free Software Foundation, Inc.
Contributed by Jan Stein (jan@cd.chalmers.se).
Modified for MVS C/370 by Dave Pitts (dpitts@nyx.cs.du.edu)
@@ -44,10 +44,6 @@ Boston, MA 02111-1307, USA. */
#include "tm.h"
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define bcmp(a,b,c) memcmp (a,b,c)
-
/* Arguments to use with `exit'. */
#define SUCCESS_EXIT_CODE 0
diff --git a/gcc/config/i386/bsd386.h b/gcc/config/i386/bsd386.h
index 935a2e06404..d64fe59e2ac 100644
--- a/gcc/config/i386/bsd386.h
+++ b/gcc/config/i386/bsd386.h
@@ -1,5 +1,5 @@
-/* Configuration for an i386 running BSDI's BSD/386 1.1 as the target
- machine. */
+/* Configuration for an i386 running BSDI's BSD/OS (formerly known as BSD/386)
+ as the target machine. */
#include "i386/386bsd.h"
@@ -16,3 +16,7 @@
#undef WCHAR_TYPE_SIZE
#define WCHAR_TYPE_SIZE 32
+
+/* This is suitable for BSD/OS 3.0; we don't know about earlier releases. */
+#undef ASM_COMMENT_START
+#define ASM_COMMENT_START " #"
diff --git a/gcc/config/i386/crtdll.h b/gcc/config/i386/crtdll.h
new file mode 100644
index 00000000000..c6b219ae020
--- /dev/null
+++ b/gcc/config/i386/crtdll.h
@@ -0,0 +1,33 @@
+/* Operating system specific defines to be used when targeting GCC for
+ hosting on Windows32, using GNU tools and the Windows32 API Library,
+ as distinct from winnt.h, which is used to build GCC for use with a
+ windows style library and tool set and uses the Microsoft tools.
+ This variant uses CRTDLL.DLL insted of MSVCRTDLL.DLL.
+ Copyright (C) 1998 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.
+
+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. */
+
+#undef LIBGCC_SPEC
+#define LIBGCC_SPEC "-lmingw32 -lgcc -lmoldname -lcrtdll"
+
+/* Specify a different entry point when linking a DLL */
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC "%{mdll:dllcrt1%O%s} %{!mdll:crt1%O%s}"
+
+#undef MATH_LIBRARY
+#define MATH_LIBRARY "-lcrtdll"
diff --git a/gcc/config/i386/cygwin32.h b/gcc/config/i386/cygwin32.h
index 88b367bc1cb..0e162869603 100644
--- a/gcc/config/i386/cygwin32.h
+++ b/gcc/config/i386/cygwin32.h
@@ -2,7 +2,7 @@
hosting on Windows NT 3.x, using a Unix style C library and tools,
as distinct from winnt.h, which is used to build GCC for use with a
windows style library and tool set and uses the Microsoft tools.
- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -21,7 +21,6 @@ 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. */
-
#define YES_UNDERSCORES
#define DBX_DEBUGGING_INFO
@@ -41,6 +40,9 @@ Boston, MA 02111-1307, USA. */
-D__cdecl=__attribute__((__cdecl__)) \
-Asystem(winnt) -Acpu(i386) -Amachine(i386)"
+#undef CPP_SPEC
+#define CPP_SPEC "-remap %(cpp_cpu) %[cpp_cpu] %{posix:-D_POSIX_SOURCE}"
+
/* We have to dynamic link to get to the system DLLs. All of libc, libm and
the Unix stuff is in cygwin.dll. The import library is called
'libcygwin.a'. For Windows applications, include more libraries, but
@@ -48,7 +50,8 @@ Boston, MA 02111-1307, USA. */
ld, but that doesn't work just yet. */
#undef LIB_SPEC
-#define LIB_SPEC "-lcygwin %{mwindows:-luser32 -lgdi32 -lcomdlg32} -lkernel32"
+#define LIB_SPEC "-lcygwin %{mwindows:-luser32 -lgdi32 -lcomdlg32} -lkernel32 \
+ -ladvapi32 -lshell32"
#define LINK_SPEC "%{mwindows:--subsystem windows}"
@@ -146,6 +149,27 @@ do \
while (0)
#endif
+/* This macro gets just the user-specified name out of the string in a
+ SYMBOL_REF. Discard trailing @[NUM] encoded by ENCODE_SECTION_INFO. */
+
+#undef STRIP_NAME_ENCODING
+#define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \
+do { \
+ char *_p; \
+ char *_name = ((SYMBOL_NAME) + ((SYMBOL_NAME)[0] == '*')); \
+ for (_p = _name; *_p && *_p != '@'; ++_p) \
+ ; \
+ if (*_p == '@') \
+ { \
+ int _len = _p - _name; \
+ (VAR) = (char *) alloca (_len + 1); \
+ strncpy ((VAR), _name, _len); \
+ (VAR)[_len] = '\0'; \
+ } \
+ else \
+ (VAR) = _name; \
+} while (0)
+
/* Emit code to check the stack when allocating more that 4000
bytes in one go. */
@@ -199,3 +223,9 @@ do { \
TREE_CODE (DECL) == FUNCTION_DECL \
? "discard" : "same_size"); \
} while (0)
+
+#undef ASM_COMMENT_START
+#define ASM_COMMENT_START " #"
+
+/* Don't assume anything about the header files. */
+#define NO_IMPLICIT_EXTERN_C
diff --git a/gcc/config/i386/dgux.c b/gcc/config/i386/dgux.c
index 23e4cf1e004..ff36135380c 100644
--- a/gcc/config/i386/dgux.c
+++ b/gcc/config/i386/dgux.c
@@ -1,6 +1,5 @@
/* Subroutines for GNU compiler for Intel 80x86 running DG/ux
- Copyright (C) 1993, 1995 Free Software Foundation, Inc.
-
+ Copyright (C) 1993, 1995, 1997 Free Software Foundation, Inc.
Currently maintained by (gcc@dg-rtp.dg.com)
This file is part of GNU CC.
@@ -96,7 +95,7 @@ output_options (file, f_options, f_len, W_options, W_len,
indent, pos, max);
pos = output_option (file, sep, "-mcpu=", ix86_cpu_string, indent, pos, max);
- pos = output_option (file, sep, "-march=", ix86_isa_string, indent, pos, max);
+ pos = output_option (file, sep, "-march=", ix86_arch_string, indent, pos, max);
fprintf (file, term);
}
diff --git a/gcc/config/i386/dgux.h b/gcc/config/i386/dgux.h
index 469ce14ddc8..a939979dde8 100644
--- a/gcc/config/i386/dgux.h
+++ b/gcc/config/i386/dgux.h
@@ -1,5 +1,5 @@
/* Target definitions for GNU compiler for Intel 80x86 running DG/ux
- Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
Currently maintained by gcc@dg-rtp.dg.com.
This file is part of GNU CC.
@@ -25,7 +25,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "i386/sysv4.h"
#ifndef VERSION_INFO2
-#define VERSION_INFO2 "$Revision: 1.5 $"
+#define VERSION_INFO2 "$Revision: 1.7 $"
#endif
#ifndef VERSION_STRING
@@ -170,7 +170,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
/* Linker and library spec's.
-static, -shared, -symbolic, -h* and -z* access AT&T V.4 link options.
-svr4 instructs gcc to place /usr/lib/values-X[cat].o on link the line.
- The absense of -msvr4 indicates linking done in a COFF environment and
+ The absence of -msvr4 indicates linking done in a COFF environment and
adds the link script to the link line. In all environments, the first
and last objects are crtbegin.o and crtend.o.
When the -G link option is used (-shared and -symbolic) a final link is
@@ -260,24 +260,6 @@ char insn; int insn_; char * file_; int line_;
warning ("argument is a structure"),0 : 0), \
(function_arg (&CUM, MODE, TYPE, NAMED)))
-/* This is how to output an assembler line
- that says to advance the location counter
- to a multiple of 2**LOG bytes. */
-
-#undef ASM_OUTPUT_ALIGN
-#define ASM_OUTPUT_ALIGN(FILE,LOG) \
- if (LOG <= 2) \
- fprintf ((FILE), "\t.align %d\n", 1<<(LOG));\
- else if ((LOG)!=0) \
- { \
- char buf[256]; \
- if (!backalign_labelno) fprintf ((FILE), "\t.align %d\n", 1); \
- ASM_GENERATE_INTERNAL_LABEL (buf, "LBA", backalign_labelno++); \
- fprintf ((FILE), "%s:", &buf[1]); \
- fprintf ((FILE), "\t.backalign %s,%d,%d\n", &buf[1], 1<<(LOG), \
- ((TARGET_PENTIUMPRO || TARGET_486) && LOG==4) ? 6 : 2);\
- }
-
-/* add .align 1 to avoid .backalign bug in assembler */
+/* Add .align 1 to avoid .backalign bug in assembler */
#undef CONST_SECTION_ASM_OP
#define CONST_SECTION_ASM_OP ".section\t.rodata\n\t.align 1"
diff --git a/gcc/config/i386/freebsd-elf.h b/gcc/config/i386/freebsd-elf.h
index 55bf23c0c63..252ebf5cf84 100644
--- a/gcc/config/i386/freebsd-elf.h
+++ b/gcc/config/i386/freebsd-elf.h
@@ -2,7 +2,7 @@
Copyright (C) 1996 Free Software Foundation, Inc.
Contributed by Eric Youngdale.
Modified for stabs-in-ELF by H.J. Lu.
- Adapted from Linux version by John Polstra.
+ Adapted from GNU/Linux version by John Polstra.
This file is part of GNU CC.
diff --git a/gcc/config/i386/freebsd.h b/gcc/config/i386/freebsd.h
index 83d1de72467..b02c31c5729 100644
--- a/gcc/config/i386/freebsd.h
+++ b/gcc/config/i386/freebsd.h
@@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler for Intel 80386
running FreeBSD.
- Copyright (C) 1988, 1992, 1994, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1988, 1992, 1994, 1996, 1997 Free Software Foundation, Inc.
Contributed by Poul-Henning Kamp <phk@login.dkuug.dk>
This file is part of GNU CC.
@@ -224,9 +224,9 @@ do { \
#ifdef FREEBSD_NATIVE
#define INCLUDE_DEFAULTS { \
- { "/usr/include", 0 }, \
- { "/usr/include/g++", 1 }, \
- { 0, 0} \
+ { "/usr/include", 0, 0, 0 }, \
+ { "/usr/include/g++", "G++", 1, 1 }, \
+ { 0, 0, 0, 0} \
}
#undef MD_EXEC_PREFIX
diff --git a/gcc/config/i386/gmon-sol2.c b/gcc/config/i386/gmon-sol2.c
index 13d87ec0e90..35ac1c9abb7 100644
--- a/gcc/config/i386/gmon-sol2.c
+++ b/gcc/config/i386/gmon-sol2.c
@@ -31,23 +31,18 @@
* SUCH DAMAGE.
*/
-/*
- * Re rework of the solaris 2 version of gmon by J.W.Hawtin 12/8/1996
- * Does not work right yet.
- */
-
/*
- * This is a modified gmon.c by J.W.Hawtin <J.W.Hawtin@lboro.ac.uk>,
+ * This is a modified gmon.c by J.W.Hawtin <oolon@ankh.org>,
* 14/8/96 based on the original gmon.c in GCC and the hacked version
* solaris 2 sparc version (config/sparc/gmon-sol.c) by Mark Eichin. To do
- * process profiling on solaris 2.4 X86
+ * process profiling on solaris 2.X X86
*
* It must be used in conjunction with sol2-gc1.asm, which is used to start
* and stop process monitoring.
*
* Differences.
*
- * On Solaris 2 _mcount is called my library functions not mcount, so support
+ * On Solaris 2 _mcount is called by library functions not mcount, so support
* has been added for both.
*
* Also the prototype for profil() is different
@@ -58,7 +53,7 @@
*
* Notes
*
- * This code could easily be integrated with the orginal gmon.c and perhaps
+ * This code could easily be integrated with the original gmon.c and perhaps
* should be.
*/
@@ -90,7 +85,7 @@ struct phdr {
#define HASHFRACTION 1
#define ARCDENSITY 2
#define MINARCS 50
-#define BASEADDRESS 0x8000000 /* On Solaris 2 X86 all excutables start here
+#define BASEADDRESS 0x8000000 /* On Solaris 2 X86 all executables start here
and not at 0 */
struct tostruct {
@@ -264,6 +259,7 @@ internal_mcount()
register struct tostruct *top;
register struct tostruct *prevtop;
register long toindex;
+ static char already_setup;
/*
* find the return address for mcount,
@@ -277,6 +273,17 @@ internal_mcount()
This identifies the caller of the function just entered. */
frompcindex = (void *) __builtin_return_address (1);
+ if(!already_setup) {
+ extern etext();
+ already_setup = 1;
+/* monstartup(0, etext); */
+ monstartup(0x08040000, etext);
+#ifdef USE_ONEXIT
+ on_exit(_mcleanup, 0);
+#else
+ atexit(_mcleanup);
+#endif
+ }
/*
* check that we are profiling
* and that we aren't recursively invoked.
diff --git a/gcc/config/i386/go32.h b/gcc/config/i386/go32.h
index b0eb84d0ef7..80a0e875c43 100644
--- a/gcc/config/i386/go32.h
+++ b/gcc/config/i386/go32.h
@@ -88,3 +88,12 @@ dtor_section () \
#undef ASM_OUTPUT_ALIGN
#define ASM_OUTPUT_ALIGN(FILE,LOG) \
if ((LOG) != 0) fprintf ((FILE), "\t.p2align %d\n", LOG)
+
+/* djgpp has atexit (). */
+#undef HAVE_ATEXIT
+#define HAVE_ATEXIT
+
+/* djgpp automatically calls it's own version of __main, so don't define one
+ in libgcc, nor call one in main(). */
+#define HAS_INIT_SECTION
+
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 895c66f4eac..a4ec3b6a3f2 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -1,5 +1,5 @@
/* Subroutines for insn-output.c for Intel X86.
- Copyright (C) 1988, 1992, 1994, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1988, 92, 94, 95, 96, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -49,7 +49,8 @@ Boston, MA 02111-1307, USA. */
#define CHECK_STACK_LIMIT -1
#endif
-enum reg_mem /* Type of an operand for ix86_{binary,unary}_operator_ok */
+/* Type of an operand for ix86_{binary,unary}_operator_ok */
+enum reg_mem
{
reg_p,
mem_p,
@@ -58,7 +59,7 @@ enum reg_mem /* Type of an operand for ix86_{binary,unary}_operator_ok */
/* Processor costs (relative to an add) */
struct processor_costs i386_cost = { /* 386 specific costs */
- 1, /* cost of an add instruction (2 cycles) */
+ 1, /* cost of an add instruction */
1, /* cost of a lea instruction */
3, /* variable shift costs */
2, /* constant shift costs */
@@ -104,6 +105,9 @@ struct processor_costs *ix86_cost = &pentium_cost;
extern FILE *asm_out_file;
extern char *strcat ();
+static void ix86_epilogue PROTO((int));
+static void ix86_prologue PROTO((int));
+
char *singlemove_string ();
char *output_move_const_single ();
char *output_fp_cc0_set ();
@@ -150,19 +154,32 @@ char *i386_reg_alloc_order;
static char regs_allocated[FIRST_PSEUDO_REGISTER];
/* # of registers to use to pass arguments. */
-char *i386_regparm_string; /* # registers to use to pass args */
-int i386_regparm; /* i386_regparm_string as a number */
+char *i386_regparm_string;
+
+/* i386_regparm_string as a number */
+int i386_regparm;
+
+/* Alignment to use for loops and jumps: */
+
+/* Power of two alignment for loops. */
+char *i386_align_loops_string;
-/* Alignment to use for loops and jumps */
-char *i386_align_loops_string; /* power of two alignment for loops */
-char *i386_align_jumps_string; /* power of two alignment for non-loop jumps */
-char *i386_align_funcs_string; /* power of two alignment for functions */
-char *i386_branch_cost_string; /* values 1-5: see jump.c */
+/* Power of two alignment for non-loop jumps. */
+char *i386_align_jumps_string;
-int i386_align_loops; /* power of two alignment for loops */
-int i386_align_jumps; /* power of two alignment for non-loop jumps */
-int i386_align_funcs; /* power of two alignment for functions */
-int i386_branch_cost; /* values 1-5: see jump.c */
+/* Values 1-5: see jump.c */
+int i386_branch_cost;
+char *i386_branch_cost_string;
+
+/* Power of two alignment for functions. */
+int i386_align_funcs;
+char *i386_align_funcs_string;
+
+/* Power of two alignment for loops. */
+int i386_align_loops;
+
+/* Power of two alignment for non-loop jumps. */
+int i386_align_jumps;
/* Sometimes certain combinations of command options do not make
sense on a particular target machine. You can define a macro
@@ -192,8 +209,10 @@ override_options ()
{PROCESSOR_I486_STRING, PROCESSOR_I486, &i486_cost, 0, 0},
{PROCESSOR_I586_STRING, PROCESSOR_PENTIUM, &pentium_cost, 0, 0},
{PROCESSOR_PENTIUM_STRING, PROCESSOR_PENTIUM, &pentium_cost, 0, 0},
- {PROCESSOR_I686_STRING, PROCESSOR_PENTIUMPRO, &pentiumpro_cost, 0, 0},
- {PROCESSOR_PENTIUMPRO_STRING, PROCESSOR_PENTIUMPRO, &pentiumpro_cost, 0, 0}};
+ {PROCESSOR_I686_STRING, PROCESSOR_PENTIUMPRO, &pentiumpro_cost,
+ 0, 0},
+ {PROCESSOR_PENTIUMPRO_STRING, PROCESSOR_PENTIUMPRO,
+ &pentiumpro_cost, 0, 0}};
int ptt_size = sizeof (processor_target_table) / sizeof (struct ptt);
@@ -201,7 +220,7 @@ override_options ()
SUBTARGET_OVERRIDE_OPTIONS;
#endif
- /* Validate registers in register allocation order */
+ /* Validate registers in register allocation order. */
if (i386_reg_alloc_order)
{
for (i = 0; (ch = i386_reg_alloc_order[i]) != '\0'; i++)
@@ -220,16 +239,16 @@ override_options ()
}
if (regs_allocated[regno])
- fatal ("Register '%c' was already specified in the allocation order", ch);
+ fatal ("Register '%c' already specified in allocation order", ch);
regs_allocated[regno] = 1;
}
}
- if (ix86_arch_string == (char *)0)
+ if (ix86_arch_string == 0)
{
ix86_arch_string = PROCESSOR_PENTIUM_STRING;
- if (ix86_cpu_string == (char *)0)
+ if (ix86_cpu_string == 0)
ix86_cpu_string = PROCESSOR_DEFAULT_STRING;
}
@@ -237,7 +256,7 @@ override_options ()
if (! strcmp (ix86_arch_string, processor_target_table[i].name))
{
ix86_arch = processor_target_table[i].processor;
- if (ix86_cpu_string == (char *)0)
+ if (ix86_cpu_string == 0)
ix86_cpu_string = processor_target_table[i].name;
break;
}
@@ -249,16 +268,17 @@ override_options ()
ix86_arch = PROCESSOR_DEFAULT;
}
- if (ix86_cpu_string == (char *)0)
- ix86_cpu_string = PROCESSOR_DEFAULT_STRING;
+ if (ix86_cpu_string == 0)
+ ix86_cpu_string = PROCESSOR_DEFAULT_STRING;
for (j = 0; j < ptt_size; j++)
if (! strcmp (ix86_cpu_string, processor_target_table[j].name))
{
ix86_cpu = processor_target_table[j].processor;
ix86_cost = processor_target_table[j].cost;
- if (i > j && (int)ix86_arch >= (int)PROCESSOR_PENTIUMPRO)
- error ("-mcpu=%s does not support -march=%s", ix86_cpu_string, ix86_arch_string);
+ if (i > j && (int) ix86_arch >= (int) PROCESSOR_PENTIUMPRO)
+ error ("-mcpu=%s does not support -march=%s",
+ ix86_cpu_string, ix86_arch_string);
target_flags |= processor_target_table[j].target_enable;
target_flags &= ~processor_target_table[j].target_disable;
@@ -271,20 +291,23 @@ override_options ()
ix86_cpu_string = PROCESSOR_DEFAULT_STRING;
ix86_cpu = PROCESSOR_DEFAULT;
}
- /* Validate -mregparm= value */
+
+ /* Validate -mregparm= value. */
if (i386_regparm_string)
{
i386_regparm = atoi (i386_regparm_string);
if (i386_regparm < 0 || i386_regparm > REGPARM_MAX)
- fatal ("-mregparm=%d is not between 0 and %d", i386_regparm, REGPARM_MAX);
+ fatal ("-mregparm=%d is not between 0 and %d",
+ i386_regparm, REGPARM_MAX);
}
- /* The 486 suffers more from non-aligned cache line fills, and the larger code
- size results in a larger cache foot-print and more misses. The 486 has a
- 16 byte cache line, pentium and pentiumpro have a 32 byte cache line */
+ /* The 486 suffers more from non-aligned cache line fills, and the
+ larger code size results in a larger cache foot-print and more misses.
+ The 486 has a 16 byte cache line, pentium and pentiumpro have a 32 byte
+ cache line. */
def_align = (TARGET_486) ? 4 : 2;
- /* Validate -malign-loops= value, or provide default */
+ /* Validate -malign-loops= value, or provide default. */
if (i386_align_loops_string)
{
i386_align_loops = atoi (i386_align_loops_string);
@@ -295,7 +318,7 @@ override_options ()
else
i386_align_loops = 2;
- /* Validate -malign-jumps= value, or provide default */
+ /* Validate -malign-jumps= value, or provide default. */
if (i386_align_jumps_string)
{
i386_align_jumps = atoi (i386_align_jumps_string);
@@ -306,7 +329,7 @@ override_options ()
else
i386_align_jumps = def_align;
- /* Validate -malign-functions= value, or provide default */
+ /* Validate -malign-functions= value, or provide default. */
if (i386_align_funcs_string)
{
i386_align_funcs = atoi (i386_align_funcs_string);
@@ -317,7 +340,7 @@ override_options ()
else
i386_align_funcs = def_align;
- /* Validate -mbranch-cost= value, or provide default */
+ /* Validate -mbranch-cost= value, or provide default. */
if (i386_branch_cost_string)
{
i386_branch_cost = atoi (i386_branch_cost_string);
@@ -328,13 +351,9 @@ override_options ()
else
i386_branch_cost = 1;
- if (TARGET_OMIT_LEAF_FRAME_POINTER) /* keep nonleaf frame pointers */
+ /* Keep nonleaf frame pointers. */
+ if (TARGET_OMIT_LEAF_FRAME_POINTER)
flag_omit_frame_pointer = 1;
-
- /* pic references don't explicitly mention pic_offset_table_rtx */
- /* code threaded into the prologue may conflict with profiling */
- if (flag_pic || profile_flag || profile_block_flag)
- target_flags &= ~MASK_SCHEDULE_PROLOGUE;
}
/* A C statement (sans semicolon) to choose the order in which to
@@ -355,7 +374,8 @@ order_regs_for_local_alloc ()
{
int i, ch, order, regno;
- /* User specified the register allocation order */
+ /* User specified the register allocation order. */
+
if (i386_reg_alloc_order)
{
for (i = order = 0; (ch = i386_reg_alloc_order[i]) != '\0'; i++)
@@ -376,26 +396,25 @@ order_regs_for_local_alloc ()
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
{
- if (!regs_allocated[i])
+ if (! regs_allocated[i])
reg_alloc_order[order++] = i;
}
}
- /* If users did not specify a register allocation order, use natural order */
+ /* If user did not specify a register allocation order, use natural order. */
else
{
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
reg_alloc_order[i] = i;
}
}
-
void
optimization_options (level)
int level;
{
- /* For -O2, and beyond, turn off -fschedule-insns by default. It tends to
- make the problem with not enough registers even worse */
+ /* For -O2 and beyond, turn off -fschedule-insns by default. It tends to
+ make the problem with not enough registers even worse. */
#ifdef INSN_SCHEDULING
if (level > 1)
flag_schedule_insns = 0;
@@ -429,45 +448,48 @@ i386_aligned_reg_p (regno)
int regno;
{
return (regno == STACK_POINTER_REGNUM
- || (!flag_omit_frame_pointer
- && regno == FRAME_POINTER_REGNUM));
+ || (! flag_omit_frame_pointer && regno == FRAME_POINTER_REGNUM));
}
int
i386_aligned_p (op)
rtx op;
{
- /* registers and immediate operands are always "aligned" */
+ /* Registers and immediate operands are always "aligned". */
if (GET_CODE (op) != MEM)
return 1;
- /* Don't even try to do any aligned optimizations with volatiles */
+ /* Don't even try to do any aligned optimizations with volatiles. */
if (MEM_VOLATILE_P (op))
return 0;
- /* Get address of memory operand */
+ /* Get address of memory operand. */
op = XEXP (op, 0);
switch (GET_CODE (op))
{
case CONST_INT:
- if (INTVAL (op) & 3)
- break;
- return 1;
+ if (INTVAL (op) & 3)
+ break;
+ return 1;
- /* match "reg + offset" */
+ /* Match "reg + offset" */
case PLUS:
- if (GET_CODE (XEXP (op, 1)) != CONST_INT)
- break;
- if (INTVAL (XEXP (op, 1)) & 3)
- break;
- op = XEXP (op, 0);
- if (GET_CODE (op) != REG)
- break;
- /* fall through */
+ if (GET_CODE (XEXP (op, 1)) != CONST_INT)
+ break;
+ if (INTVAL (XEXP (op, 1)) & 3)
+ break;
+
+ op = XEXP (op, 0);
+ if (GET_CODE (op) != REG)
+ break;
+
+ /* ... fall through ... */
+
case REG:
- return i386_aligned_reg_p (REGNO (op));
+ return i386_aligned_reg_p (REGNO (op));
}
+
return 0;
}
@@ -478,7 +500,7 @@ int
i386_cc_probably_useless_p (insn)
rtx insn;
{
- return !next_cc0_user (insn);
+ return ! next_cc0_user (insn);
}
/* Return nonzero if IDENTIFIER with arguments ARGS is a valid machine specific
@@ -516,17 +538,17 @@ i386_valid_type_attribute_p (type, attributes, identifier, args)
if (is_attribute_p ("stdcall", identifier))
return (args == NULL_TREE);
- /* Cdecl attribute says the callee is a normal C declaration */
+ /* Cdecl attribute says the callee is a normal C declaration. */
if (is_attribute_p ("cdecl", identifier))
return (args == NULL_TREE);
/* Regparm attribute specifies how many integer arguments are to be
- passed in registers */
+ passed in registers. */
if (is_attribute_p ("regparm", identifier))
{
tree cst;
- if (!args || TREE_CODE (args) != TREE_LIST
+ if (! args || TREE_CODE (args) != TREE_LIST
|| TREE_CHAIN (args) != NULL_TREE
|| TREE_VALUE (args) == NULL_TREE)
return 0;
@@ -584,20 +606,21 @@ i386_return_pops_args (fundecl, funtype, size)
{
int rtd = TARGET_RTD && (!fundecl || TREE_CODE (fundecl) != IDENTIFIER_NODE);
- /* Cdecl functions override -mrtd, and never pop the stack */
- if (!lookup_attribute ("cdecl", TYPE_ATTRIBUTES (funtype))) {
+ /* Cdecl functions override -mrtd, and never pop the stack. */
+ if (! lookup_attribute ("cdecl", TYPE_ATTRIBUTES (funtype))) {
- /* Stdcall functions will pop the stack if not variable args */
+ /* Stdcall functions will pop the stack if not variable args. */
if (lookup_attribute ("stdcall", TYPE_ATTRIBUTES (funtype)))
rtd = 1;
if (rtd
&& (TYPE_ARG_TYPES (funtype) == NULL_TREE
- || (TREE_VALUE (tree_last (TYPE_ARG_TYPES (funtype))) == void_type_node)))
+ || (TREE_VALUE (tree_last (TYPE_ARG_TYPES (funtype)))
+ == void_type_node)))
return size;
}
- /* Lose any fake structure return argument */
+ /* Lose any fake structure return argument. */
if (aggregate_value_p (TREE_TYPE (funtype)))
return GET_MODE_SIZE (Pmode);
@@ -613,7 +636,7 @@ i386_return_pops_args (fundecl, funtype, size)
void
init_cumulative_args (cum, fntype, libname)
- CUMULATIVE_ARGS *cum; /* argument info to initialize */
+ CUMULATIVE_ARGS *cum; /* Argument info to initialize */
tree fntype; /* tree ptr for function decl */
rtx libname; /* SYMBOL_REF of library name or 0 */
{
@@ -624,12 +647,9 @@ init_cumulative_args (cum, fntype, libname)
{
fprintf (stderr, "\ninit_cumulative_args (");
if (fntype)
- {
- tree ret_type = TREE_TYPE (fntype);
- fprintf (stderr, "fntype code = %s, ret code = %s",
- tree_code_name[ (int)TREE_CODE (fntype) ],
- tree_code_name[ (int)TREE_CODE (ret_type) ]);
- }
+ fprintf (stderr, "fntype code = %s, ret code = %s",
+ tree_code_name[(int) TREE_CODE (fntype)],
+ tree_code_name[(int) TREE_CODE (TREE_TYPE (fntype))]);
else
fprintf (stderr, "no fntype");
@@ -644,6 +664,7 @@ init_cumulative_args (cum, fntype, libname)
if (fntype)
{
tree attr = lookup_attribute ("regparm", TYPE_ATTRIBUTES (fntype));
+
if (attr)
cum->nregs = TREE_INT_CST_LOW (TREE_VALUE (TREE_VALUE (attr)));
}
@@ -656,11 +677,10 @@ init_cumulative_args (cum, fntype, libname)
if (cum->nregs)
{
for (param = (fntype) ? TYPE_ARG_TYPES (fntype) : 0;
- param != (tree)0;
- param = next_param)
+ param != 0; param = next_param)
{
next_param = TREE_CHAIN (param);
- if (next_param == (tree)0 && TREE_VALUE (param) != void_type_node)
+ if (next_param == 0 && TREE_VALUE (param) != void_type_node)
cum->nregs = 0;
}
}
@@ -682,12 +702,13 @@ function_arg_advance (cum, mode, type, named)
tree type; /* type of the argument or 0 if lib support */
int named; /* whether or not the argument was named */
{
- int bytes = (mode == BLKmode) ? int_size_in_bytes (type) : GET_MODE_SIZE (mode);
+ int bytes
+ = (mode == BLKmode) ? int_size_in_bytes (type) : GET_MODE_SIZE (mode);
int words = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
if (TARGET_DEBUG_ARG)
fprintf (stderr,
- "function_adv( size=%d, words=%2d, nregs=%d, mode=%4s, named=%d )\n\n",
+ "function_adv (sz=%d, wds=%2d, nregs=%d, mode=%s, named=%d)\n\n",
words, cum->words, cum->nregs, GET_MODE_NAME (mode), named);
cum->words += words;
@@ -724,12 +745,14 @@ function_arg (cum, mode, type, named)
int named; /* != 0 for normal args, == 0 for ... args */
{
rtx ret = NULL_RTX;
- int bytes = (mode == BLKmode) ? int_size_in_bytes (type) : GET_MODE_SIZE (mode);
+ int bytes
+ = (mode == BLKmode) ? int_size_in_bytes (type) : GET_MODE_SIZE (mode);
int words = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
switch (mode)
{
- default: /* for now, pass fp/complex values on the stack */
+ /* For now, pass fp/complex values on the stack. */
+ default:
break;
case BLKmode:
@@ -745,7 +768,7 @@ function_arg (cum, mode, type, named)
if (TARGET_DEBUG_ARG)
{
fprintf (stderr,
- "function_arg( size=%d, words=%2d, nregs=%d, mode=%4s, named=%d",
+ "function_arg (size=%d, wds=%2d, nregs=%d, mode=%4s, named=%d",
words, cum->words, cum->nregs, GET_MODE_NAME (mode), named);
if (ret)
@@ -772,7 +795,6 @@ function_arg_partial_nregs (cum, mode, type, named)
{
return 0;
}
-
/* Output an insn whose source is a 386 integer register. SRC is the
rtx for the register, and TEMPLATE is the op-code template. SRC may
@@ -806,18 +828,19 @@ output_op_from_reg (src, template)
if (size > UNITS_PER_WORD)
{
rtx high;
+
if (size > 2 * UNITS_PER_WORD)
{
high = gen_rtx (REG, SImode, REGNO (src) + 2);
output_asm_insn (AS1 (push%L0,%0), &high);
}
+
high = gen_rtx (REG, SImode, REGNO (src) + 1);
output_asm_insn (AS1 (push%L0,%0), &high);
}
- output_asm_insn (AS1 (push%L0,%0), &src);
+ output_asm_insn (AS1 (push%L0,%0), &src);
output_asm_insn (template, xops);
-
output_asm_insn (AS2 (add%L3,%2,%3), xops);
}
@@ -827,19 +850,25 @@ output_op_from_reg (src, template)
otherwise a `fst' float store is done. */
void
-output_to_reg (dest, dies)
+output_to_reg (dest, dies, scratch_mem)
rtx dest;
int dies;
+ rtx scratch_mem;
{
rtx xops[4];
int size = GET_MODE_SIZE (GET_MODE (dest));
- xops[0] = AT_SP (Pmode);
+ if (! scratch_mem)
+ xops[0] = AT_SP (Pmode);
+ else
+ xops[0] = scratch_mem;
+
xops[1] = stack_pointer_rtx;
xops[2] = GEN_INT (size);
xops[3] = dest;
- output_asm_insn (AS2 (sub%L1,%2,%1), xops);
+ if (! scratch_mem)
+ output_asm_insn (AS2 (sub%L1,%2,%1), xops);
if (GET_MODE_CLASS (GET_MODE (dest)) == MODE_INT)
{
@@ -848,6 +877,7 @@ output_to_reg (dest, dies)
else
output_asm_insn (AS1 (fist%z3,%y0), xops);
}
+
else if (GET_MODE_CLASS (GET_MODE (dest)) == MODE_FLOAT)
{
if (dies)
@@ -863,19 +893,38 @@ output_to_reg (dest, dies)
output_asm_insn (AS1 (fst%z3,%y0), xops);
}
}
+
else
abort ();
- output_asm_insn (AS1 (pop%L0,%0), &dest);
+ if (! scratch_mem)
+ output_asm_insn (AS1 (pop%L0,%0), &dest);
+ else
+ output_asm_insn (AS2 (mov%L0,%0,%3), xops);
+
if (size > UNITS_PER_WORD)
{
dest = gen_rtx (REG, SImode, REGNO (dest) + 1);
- output_asm_insn (AS1 (pop%L0,%0), &dest);
+ if (! scratch_mem)
+ output_asm_insn (AS1 (pop%L0,%0), &dest);
+ else
+ {
+ xops[0] = adj_offsettable_operand (xops[0], 4);
+ xops[3] = dest;
+ output_asm_insn (AS2 (mov%L0,%0,%3), xops);
+ }
+
if (size > 2 * UNITS_PER_WORD)
{
dest = gen_rtx (REG, SImode, REGNO (dest) + 1);
- output_asm_insn (AS1 (pop%L0,%0), &dest);
+ if (! scratch_mem)
+ output_asm_insn (AS1 (pop%L0,%0), &dest);
+ else
+ {
+ xops[0] = adj_offsettable_operand (xops[0], 4);
+ output_asm_insn (AS2 (mov%L0,%0,%3), xops);
+ }
}
}
}
@@ -893,9 +942,7 @@ singlemove_string (operands)
return "push%L1 %1";
}
else if (GET_CODE (operands[1]) == CONST_DOUBLE)
- {
- return output_move_const_single (operands);
- }
+ return output_move_const_single (operands);
else if (GET_CODE (operands[0]) == REG || GET_CODE (operands[1]) == REG)
return AS2 (mov%L0,%1,%0);
else if (CONSTANT_P (operands[1]))
@@ -927,11 +974,11 @@ find_addr_reg (addr)
else
abort ();
}
+
if (GET_CODE (addr) == REG)
return addr;
abort ();
}
-
/* Output an insn to add the constant N to the register X. */
@@ -958,7 +1005,6 @@ asm_add (n, x)
output_asm_insn (AS2 (add%L0,%1,%0), xops);
}
}
-
/* Output assembler code to perform a doubleword move insn
with operands OPERANDS. */
@@ -1115,8 +1161,11 @@ output_move_double (operands)
latehalf[1] = operands[1];
}
}
- else /* size is not 12: */
+
+ else
{
+ /* Size is not 12. */
+
if (optype0 == REGOP)
latehalf[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
else if (optype0 == OFFSOP)
@@ -1157,13 +1206,12 @@ output_move_double (operands)
{
/* If both halves of dest are used in the src memory address,
compute the address into latehalf of dest. */
-compadr:
+ compadr:
xops[0] = latehalf[0];
xops[1] = XEXP (operands[1], 0);
output_asm_insn (AS2 (lea%L0,%a1,%0), xops);
- if( GET_MODE (operands[1]) == XFmode )
+ if (GET_MODE (operands[1]) == XFmode)
{
-/* abort (); */
operands[1] = gen_rtx (MEM, XFmode, latehalf[0]);
middlehalf[1] = adj_offsettable_operand (operands[1], size-8);
latehalf[1] = adj_offsettable_operand (operands[1], size-4);
@@ -1174,17 +1222,18 @@ compadr:
latehalf[1] = adj_offsettable_operand (operands[1], size-4);
}
}
+
else if (size == 12
&& reg_mentioned_p (middlehalf[0], XEXP (operands[1], 0)))
{
/* Check for two regs used by both source and dest. */
if (reg_mentioned_p (operands[0], XEXP (operands[1], 0))
|| reg_mentioned_p (latehalf[0], XEXP (operands[1], 0)))
- goto compadr;
+ goto compadr;
/* JRV says this can't happen: */
if (addreg0 || addreg1)
- abort();
+ abort ();
/* Only the middle reg conflicts; simply put it last. */
output_asm_insn (singlemove_string (operands), operands);
@@ -1192,6 +1241,7 @@ compadr:
output_asm_insn (singlemove_string (middlehalf), middlehalf);
return "";
}
+
else if (reg_mentioned_p (operands[0], XEXP (operands[1], 0)))
/* If the low half of dest is mentioned in the source memory
address, the arrange to emit the move late half first. */
@@ -1206,12 +1256,13 @@ compadr:
such overlap can't happen in memory unless the user explicitly
sets it up, and that is an undefined circumstance. */
-/*
+#if 0
if (optype0 == PUSHOP || optype1 == PUSHOP
|| (optype0 == REGOP && optype1 == REGOP
&& REGNO (operands[0]) == REGNO (latehalf[1]))
|| dest_overlapped_low)
-*/
+#endif
+
if (optype0 == PUSHOP || optype1 == PUSHOP
|| (optype0 == REGOP && optype1 == REGOP
&& ((middlehalf[1] && REGNO (operands[0]) == REGNO (middlehalf[1]))
@@ -1229,17 +1280,17 @@ compadr:
/* Undo the adds we just did. */
if (addreg0)
- asm_add (-4, addreg0);
+ asm_add (-4, addreg0);
if (addreg1)
asm_add (-4, addreg1);
if (size == 12)
{
- output_asm_insn (singlemove_string (middlehalf), middlehalf);
- if (addreg0)
- asm_add (-4, addreg0);
- if (addreg1)
- asm_add (-4, addreg1);
+ output_asm_insn (singlemove_string (middlehalf), middlehalf);
+ if (addreg0)
+ asm_add (-4, addreg0);
+ if (addreg1)
+ asm_add (-4, addreg1);
}
/* Do low-numbered word. */
@@ -1278,7 +1329,6 @@ compadr:
return "";
}
-
#define MAX_TMPS 2 /* max temporary registers used */
@@ -1292,13 +1342,13 @@ output_move_pushmem (operands, insn, length, tmp_start, n_operands)
int tmp_start;
int n_operands;
{
-
- struct {
- char *load;
- char *push;
- rtx xops[2];
- } tmp_info[MAX_TMPS];
-
+ struct
+ {
+ char *load;
+ char *push;
+ rtx xops[2];
+ } tmp_info[MAX_TMPS];
+
rtx src = operands[1];
int max_tmps = 0;
int offset = 0;
@@ -1307,7 +1357,7 @@ output_move_pushmem (operands, insn, length, tmp_start, n_operands)
int i, num_tmps;
rtx xops[1];
- if (!offsettable_memref_p (src))
+ if (! offsettable_memref_p (src))
fatal_insn ("Source is not offsettable", insn);
if ((length & 3) != 0)
@@ -1343,7 +1393,8 @@ output_move_pushmem (operands, insn, length, tmp_start, n_operands)
{
tmp_info[num_tmps].load = AS2(mov%L0,%0,%1);
tmp_info[num_tmps].push = AS1(push%L0,%1);
- tmp_info[num_tmps].xops[0] = adj_offsettable_operand (src, offset + stack_offset);
+ tmp_info[num_tmps].xops[0]
+ = adj_offsettable_operand (src, offset + stack_offset);
offset -= 4;
}
@@ -1359,9 +1410,7 @@ output_move_pushmem (operands, insn, length, tmp_start, n_operands)
return "";
}
-
-
/* Output the appropriate code to move data between two memory locations */
char *
@@ -1372,11 +1421,12 @@ output_move_memory (operands, insn, length, tmp_start, n_operands)
int tmp_start;
int n_operands;
{
- struct {
- char *load;
- char *store;
- rtx xops[3];
- } tmp_info[MAX_TMPS];
+ struct
+ {
+ char *load;
+ char *store;
+ rtx xops[3];
+ } tmp_info[MAX_TMPS];
rtx dest = operands[0];
rtx src = operands[1];
@@ -1391,10 +1441,10 @@ output_move_memory (operands, insn, length, tmp_start, n_operands)
&& XEXP (XEXP (dest, 0), 0) == stack_pointer_rtx)
return output_move_pushmem (operands, insn, length, tmp_start, n_operands);
- if (!offsettable_memref_p (src))
+ if (! offsettable_memref_p (src))
fatal_insn ("Source is not offsettable", insn);
- if (!offsettable_memref_p (dest))
+ if (! offsettable_memref_p (dest))
fatal_insn ("Destination is not offsettable", insn);
/* Figure out which temporary registers we have available */
@@ -1402,7 +1452,7 @@ output_move_memory (operands, insn, length, tmp_start, n_operands)
{
if (GET_CODE (operands[i]) == REG)
{
- if ((length & 1) != 0 && !qi_tmp && QI_REG_P (operands[i]))
+ if ((length & 1) != 0 && qi_tmp == 0 && QI_REG_P (operands[i]))
qi_tmp = operands[i];
if (reg_overlap_mentioned_p (operands[i], dest))
@@ -1411,19 +1461,21 @@ output_move_memory (operands, insn, length, tmp_start, n_operands)
if (reg_overlap_mentioned_p (operands[i], src))
fatal_insn ("Temporary register overlaps the source", insn);
- tmp_info[ max_tmps++ ].xops[2] = operands[i];
+ tmp_info[max_tmps++].xops[2] = operands[i];
if (max_tmps == MAX_TMPS)
break;
}
}
if (max_tmps == 0)
- fatal_insn ("No scratch registers were found to do memory->memory moves", insn);
+ fatal_insn ("No scratch registers were found to do memory->memory moves",
+ insn);
if ((length & 1) != 0)
{
- if (!qi_tmp)
- fatal_insn ("No byte register found when moving odd # of bytes.", insn);
+ if (qi_tmp == 0)
+ fatal_insn ("No byte register found when moving odd # of bytes.",
+ insn);
}
while (length > 1)
@@ -1434,17 +1486,24 @@ output_move_memory (operands, insn, length, tmp_start, n_operands)
{
tmp_info[num_tmps].load = AS2(mov%L0,%1,%2);
tmp_info[num_tmps].store = AS2(mov%L0,%2,%0);
- tmp_info[num_tmps].xops[0] = adj_offsettable_operand (dest, offset);
- tmp_info[num_tmps].xops[1] = adj_offsettable_operand (src, offset);
+ tmp_info[num_tmps].xops[0]
+ = adj_offsettable_operand (dest, offset);
+ tmp_info[num_tmps].xops[1]
+ = adj_offsettable_operand (src, offset);
+
offset += 4;
length -= 4;
}
+
else if (length >= 2)
{
tmp_info[num_tmps].load = AS2(mov%W0,%1,%2);
tmp_info[num_tmps].store = AS2(mov%W0,%2,%0);
- tmp_info[num_tmps].xops[0] = adj_offsettable_operand (dest, offset);
- tmp_info[num_tmps].xops[1] = adj_offsettable_operand (src, offset);
+ tmp_info[num_tmps].xops[0]
+ = adj_offsettable_operand (dest, offset);
+ tmp_info[num_tmps].xops[1]
+ = adj_offsettable_operand (src, offset);
+
offset += 2;
length -= 2;
}
@@ -1470,7 +1529,6 @@ output_move_memory (operands, insn, length, tmp_start, n_operands)
return "";
}
-
int
standard_80387_constant_p (x)
@@ -1518,6 +1576,7 @@ output_move_const_single (operands)
if (conval == 2)
return "fld1";
}
+
if (GET_CODE (operands[1]) == CONST_DOUBLE)
{
REAL_VALUE_TYPE r; long l;
@@ -1529,6 +1588,7 @@ output_move_const_single (operands)
REAL_VALUE_TO_TARGET_SINGLE (r, l);
operands[1] = GEN_INT (l);
}
+
return singlemove_string (operands);
}
@@ -1545,11 +1605,13 @@ symbolic_operand (op, mode)
case SYMBOL_REF:
case LABEL_REF:
return 1;
+
case CONST:
op = XEXP (op, 0);
return ((GET_CODE (XEXP (op, 0)) == SYMBOL_REF
|| GET_CODE (XEXP (op, 0)) == LABEL_REF)
&& GET_CODE (XEXP (op, 1)) == CONST_INT);
+
default:
return 0;
}
@@ -1571,9 +1633,10 @@ call_insn_operand (op, mode)
&& general_operand (XEXP (op, 0), Pmode))
|| (GET_CODE (XEXP (op, 0)) == REG
&& XEXP (op, 0) != arg_pointer_rtx
- && !(REGNO (XEXP (op, 0)) >= FIRST_PSEUDO_REGISTER
- && REGNO (XEXP (op, 0)) <= LAST_VIRTUAL_REGISTER))))
+ && ! (REGNO (XEXP (op, 0)) >= FIRST_PSEUDO_REGISTER
+ && REGNO (XEXP (op, 0)) <= LAST_VIRTUAL_REGISTER))))
return 1;
+
return 0;
}
@@ -1589,9 +1652,10 @@ expander_call_insn_operand (op, mode)
&& (CONSTANT_ADDRESS_P (XEXP (op, 0))
|| (GET_CODE (XEXP (op, 0)) == REG
&& XEXP (op, 0) != arg_pointer_rtx
- && !(REGNO (XEXP (op, 0)) >= FIRST_PSEUDO_REGISTER
- && REGNO (XEXP (op, 0)) <= LAST_VIRTUAL_REGISTER))))
+ && ! (REGNO (XEXP (op, 0)) >= FIRST_PSEUDO_REGISTER
+ && REGNO (XEXP (op, 0)) <= LAST_VIRTUAL_REGISTER))))
return 1;
+
return 0;
}
@@ -1607,6 +1671,7 @@ arithmetic_comparison_operator (op, mode)
if (mode != VOIDmode && mode != GET_MODE (op))
return 0;
+
code = GET_CODE (op);
if (GET_RTX_CLASS (code) != '<')
return 0;
@@ -1637,6 +1702,7 @@ symbolic_reference_mentioned_p (op)
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;
}
@@ -1670,9 +1736,11 @@ ix86_expand_binary_operator (code, mode, operands)
}
/* If optimizing, copy to regs to improve CSE */
- if (TARGET_PSEUDO && optimize && ((reload_in_progress | reload_completed) == 0))
+ if (TARGET_PSEUDO && optimize
+ && ((reload_in_progress | reload_completed) == 0))
{
- if (GET_CODE (operands[1]) == MEM && !rtx_equal_p (operands[0], operands[1]))
+ if (GET_CODE (operands[1]) == MEM
+ && ! rtx_equal_p (operands[0], operands[1]))
operands[1] = force_reg (GET_MODE (operands[1]), operands[1]);
if (GET_CODE (operands[2]) == MEM)
@@ -1681,6 +1749,7 @@ ix86_expand_binary_operator (code, mode, operands)
if (GET_CODE (operands[1]) == CONST_INT && code == MINUS)
{
rtx temp = gen_reg_rtx (GET_MODE (operands[0]));
+
emit_move_insn (temp, operands[1]);
operands[1] = temp;
return TRUE;
@@ -1689,15 +1758,16 @@ ix86_expand_binary_operator (code, mode, operands)
if (!ix86_binary_operator_ok (code, mode, operands))
{
- /* If not optimizing, try to make a valid insn (optimize code previously did
- this above to improve chances of CSE) */
+ /* If not optimizing, try to make a valid insn (optimize code
+ previously did this above to improve chances of CSE) */
- if ((!TARGET_PSEUDO || !optimize)
+ if ((! TARGET_PSEUDO || !optimize)
&& ((reload_in_progress | reload_completed) == 0)
&& (GET_CODE (operands[1]) == MEM || GET_CODE (operands[2]) == MEM))
{
modified = FALSE;
- if (GET_CODE (operands[1]) == MEM && !rtx_equal_p (operands[0], operands[1]))
+ if (GET_CODE (operands[1]) == MEM
+ && ! rtx_equal_p (operands[0], operands[1]))
{
operands[1] = force_reg (GET_MODE (operands[1]), operands[1]);
modified = TRUE;
@@ -1712,12 +1782,13 @@ ix86_expand_binary_operator (code, mode, operands)
if (GET_CODE (operands[1]) == CONST_INT && code == MINUS)
{
rtx temp = gen_reg_rtx (GET_MODE (operands[0]));
+
emit_move_insn (temp, operands[1]);
operands[1] = temp;
return TRUE;
}
- if (modified && !ix86_binary_operator_ok (code, mode, operands))
+ if (modified && ! ix86_binary_operator_ok (code, mode, operands))
return FALSE;
}
else
@@ -1758,18 +1829,16 @@ ix86_expand_unary_operator (code, mode, operands)
&& optimize
&& ((reload_in_progress | reload_completed) == 0)
&& GET_CODE (operands[1]) == MEM)
- {
- operands[1] = force_reg (GET_MODE (operands[1]), operands[1]);
- }
+ operands[1] = force_reg (GET_MODE (operands[1]), operands[1]);
- if (!ix86_unary_operator_ok (code, mode, operands))
+ if (! ix86_unary_operator_ok (code, mode, operands))
{
- if ((!TARGET_PSEUDO || !optimize)
+ if ((! TARGET_PSEUDO || optimize == 0)
&& ((reload_in_progress | reload_completed) == 0)
&& GET_CODE (operands[1]) == MEM)
{
operands[1] = force_reg (GET_MODE (operands[1]), operands[1]);
- if (!ix86_unary_operator_ok (code, mode, operands))
+ if (! ix86_unary_operator_ok (code, mode, operands))
return FALSE;
}
else
@@ -1790,19 +1859,18 @@ ix86_unary_operator_ok (code, mode, operands)
{
return TRUE;
}
-
-
static rtx pic_label_rtx;
static char pic_label_name [256];
static int pic_label_no = 0;
/* This function generates code for -fpic that loads %ebx with
with the return address of the caller and then returns. */
+
void
asm_output_function_prefix (file, name)
- FILE * file;
- char * name;
+ FILE *file;
+ char *name;
{
rtx xops[2];
int pic_reg_used = flag_pic && (current_function_uses_pic_offset_table
@@ -1810,17 +1878,18 @@ asm_output_function_prefix (file, name)
xops[0] = pic_offset_table_rtx;
xops[1] = stack_pointer_rtx;
- /* deep branch prediction favors having a return for every call */
+ /* Deep branch prediction favors having a return for every call. */
if (pic_reg_used && TARGET_DEEP_BRANCH_PREDICTION)
{
tree prologue_node;
if (pic_label_rtx == 0)
{
- pic_label_rtx = (rtx) gen_label_rtx ();
+ pic_label_rtx = gen_label_rtx ();
sprintf (pic_label_name, "LPR%d", pic_label_no++);
LABEL_NAME (pic_label_rtx) = pic_label_name;
}
+
prologue_node = make_node (FUNCTION_DECL);
DECL_RESULT (prologue_node) = 0;
#ifdef ASM_DECLARE_FUNCTION_NAME
@@ -1831,95 +1900,104 @@ asm_output_function_prefix (file, name)
}
}
-/* Set up the stack and frame (if desired) for the function. */
+/* Generate the assembly code for function entry.
+ FILE is an stdio stream to output the code to.
+ SIZE is an int: how many units of temporary storage to allocate. */
void
function_prologue (file, size)
FILE *file;
int size;
{
- register int regno;
- int limit;
- rtx xops[4];
- int pic_reg_used = flag_pic && (current_function_uses_pic_offset_table
- || current_function_uses_const_pool);
- long tsize = get_frame_size ();
-
- /* pic references don't explicitly mention pic_offset_table_rtx */
if (TARGET_SCHEDULE_PROLOGUE)
{
pic_label_rtx = 0;
return;
}
- xops[0] = stack_pointer_rtx;
- xops[1] = frame_pointer_rtx;
- xops[2] = GEN_INT (tsize);
+ ix86_prologue (0);
+}
- if (frame_pointer_needed)
- {
- output_asm_insn ("push%L1 %1", xops);
- output_asm_insn (AS2 (mov%L0,%0,%1), xops);
- }
+/* Expand the prologue into a bunch of separate insns. */
- if (tsize == 0)
- ;
- else if (! TARGET_STACK_PROBE || tsize < CHECK_STACK_LIMIT)
- output_asm_insn (AS2 (sub%L0,%2,%0), xops);
- else
- {
- xops[3] = gen_rtx (REG, SImode, 0);
- output_asm_insn (AS2 (mov%L0,%2,%3), xops);
-
- xops[3] = gen_rtx (SYMBOL_REF, Pmode, "_alloca");
- output_asm_insn (AS1 (call,%P3), xops);
- }
+void
+ix86_expand_prologue ()
+{
+ if (! TARGET_SCHEDULE_PROLOGUE)
+ return;
+
+ ix86_prologue (1);
+}
- /* Note If use enter it is NOT reversed args.
- This one is not reversed from intel!!
- I think enter is slower. Also sdb doesn't like it.
- But if you want it the code is:
- {
- xops[3] = const0_rtx;
- output_asm_insn ("enter %2,%3", xops);
- }
- */
- limit = (frame_pointer_needed ? FRAME_POINTER_REGNUM : STACK_POINTER_REGNUM);
- for (regno = limit - 1; regno >= 0; regno--)
- if ((regs_ever_live[regno] && ! call_used_regs[regno])
- || (regno == PIC_OFFSET_TABLE_REGNUM && pic_reg_used))
- {
- xops[0] = gen_rtx (REG, SImode, regno);
- output_asm_insn ("push%L0 %0", xops);
- }
+void
+load_pic_register (do_rtl)
+ int do_rtl;
+{
+ rtx xops[4];
- if (pic_reg_used && TARGET_DEEP_BRANCH_PREDICTION)
+ if (TARGET_DEEP_BRANCH_PREDICTION)
{
xops[0] = pic_offset_table_rtx;
- xops[1] = gen_rtx (SYMBOL_REF, Pmode, LABEL_NAME (pic_label_rtx));
+ if (pic_label_rtx == 0)
+ {
+ pic_label_rtx = gen_label_rtx ();
+ sprintf (pic_label_name, "LPR%d", pic_label_no++);
+ LABEL_NAME (pic_label_rtx) = pic_label_name;
+ }
- output_asm_insn (AS1 (call,%P1), xops);
- output_asm_insn ("addl $_GLOBAL_OFFSET_TABLE_,%0", xops);
- pic_label_rtx = 0;
+ xops[1] = gen_rtx (MEM, QImode,
+ gen_rtx (SYMBOL_REF, Pmode,
+ LABEL_NAME (pic_label_rtx)));
+
+ if (do_rtl)
+ {
+ emit_insn (gen_prologue_get_pc (xops[0], xops[1]));
+ emit_insn (gen_prologue_set_got (xops[0],
+ gen_rtx (SYMBOL_REF, Pmode,
+ "$_GLOBAL_OFFSET_TABLE_"),
+ xops[1]));
+ }
+ else
+ {
+ output_asm_insn (AS1 (call,%P1), xops);
+ output_asm_insn ("addl $_GLOBAL_OFFSET_TABLE_,%0", xops);
+ pic_label_rtx = 0;
+ }
}
- else if (pic_reg_used)
+
+ else
{
- xops[0] = pic_offset_table_rtx;
- xops[1] = (rtx) gen_label_rtx ();
+ xops[0] = pic_offset_table_rtx;
+ xops[1] = gen_label_rtx ();
- output_asm_insn (AS1 (call,%P1), xops);
- ASM_OUTPUT_INTERNAL_LABEL (file, "L", CODE_LABEL_NUMBER (xops[1]));
- output_asm_insn (AS1 (pop%L0,%0), xops);
- output_asm_insn ("addl $_GLOBAL_OFFSET_TABLE_+[.-%P1],%0", xops);
- }
-}
+ if (do_rtl)
+ {
+ /* We can't put a raw CODE_LABEL into the RTL, and we can't emit
+ a new CODE_LABEL after reload, so we need a single pattern to
+ emit the 3 necessary instructions. */
+ emit_insn (gen_prologue_get_pc_and_set_got (xops[0]));
+ }
+ else
+ {
+ output_asm_insn (AS1 (call,%P1), xops);
+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L",
+ CODE_LABEL_NUMBER (xops[1]));
+ output_asm_insn (AS1 (pop%L0,%0), xops);
+ output_asm_insn ("addl $_GLOBAL_OFFSET_TABLE_+[.-%P1],%0", xops);
+ }
+ }
-/* This function generates the assembly code for function entry.
- FILE is an stdio stream to output the code to.
- SIZE is an int: how many units of temporary storage to allocate. */
+ /* When -fpic, we must emit a scheduling barrier, so that the instruction
+ that restores %ebx (which is PIC_OFFSET_TABLE_REGNUM), does not get
+ moved before any instruction which implicitly uses the got. */
-void
-ix86_expand_prologue ()
+ if (do_rtl)
+ emit_insn (gen_blockage ());
+}
+
+static void
+ix86_prologue (do_rtl)
+ int do_rtl;
{
register int regno;
int limit;
@@ -1928,40 +2006,90 @@ ix86_expand_prologue ()
|| current_function_uses_const_pool);
long tsize = get_frame_size ();
rtx insn;
-
- if (!TARGET_SCHEDULE_PROLOGUE)
- return;
+ int cfa_offset = INCOMING_FRAME_SP_OFFSET, cfa_store_offset = cfa_offset;
xops[0] = stack_pointer_rtx;
xops[1] = frame_pointer_rtx;
xops[2] = GEN_INT (tsize);
+
if (frame_pointer_needed)
{
- insn = emit_insn
- (gen_rtx (SET, 0,
- gen_rtx (MEM, SImode,
- gen_rtx (PRE_DEC, SImode, stack_pointer_rtx)),
- frame_pointer_rtx));
- RTX_FRAME_RELATED_P (insn) = 1;
- insn = emit_move_insn (xops[1], xops[0]);
- RTX_FRAME_RELATED_P (insn) = 1;
+ if (do_rtl)
+ {
+ insn = emit_insn (gen_rtx (SET, VOIDmode,
+ gen_rtx (MEM, SImode,
+ gen_rtx (PRE_DEC, SImode,
+ stack_pointer_rtx)),
+ frame_pointer_rtx));
+
+ RTX_FRAME_RELATED_P (insn) = 1;
+ insn = emit_move_insn (xops[1], xops[0]);
+ RTX_FRAME_RELATED_P (insn) = 1;
+ }
+
+ else
+ {
+ output_asm_insn ("push%L1 %1", xops);
+#ifdef INCOMING_RETURN_ADDR_RTX
+ if (dwarf2out_do_frame ())
+ {
+ char *l = dwarf2out_cfi_label ();
+
+ cfa_store_offset += 4;
+ cfa_offset = cfa_store_offset;
+ dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, cfa_offset);
+ dwarf2out_reg_save (l, FRAME_POINTER_REGNUM, - cfa_store_offset);
+ }
+#endif
+
+ output_asm_insn (AS2 (mov%L0,%0,%1), xops);
+#ifdef INCOMING_RETURN_ADDR_RTX
+ if (dwarf2out_do_frame ())
+ dwarf2out_def_cfa ("", FRAME_POINTER_REGNUM, cfa_offset);
+#endif
+ }
}
if (tsize == 0)
;
else if (! TARGET_STACK_PROBE || tsize < CHECK_STACK_LIMIT)
{
- insn = emit_insn (gen_subsi3 (xops[0], xops[0], xops[2]));
- RTX_FRAME_RELATED_P (insn) = 1;
+ if (do_rtl)
+ {
+ insn = emit_insn (gen_prologue_set_stack_ptr (xops[2]));
+ RTX_FRAME_RELATED_P (insn) = 1;
+ }
+ else
+ {
+ output_asm_insn (AS2 (sub%L0,%2,%0), xops);
+#ifdef INCOMING_RETURN_ADDR_RTX
+ if (dwarf2out_do_frame ())
+ {
+ cfa_store_offset += tsize;
+ if (! frame_pointer_needed)
+ {
+ cfa_offset = cfa_store_offset;
+ dwarf2out_def_cfa ("", STACK_POINTER_REGNUM, cfa_offset);
+ }
+ }
+#endif
+ }
}
else
{
xops[3] = gen_rtx (REG, SImode, 0);
+ if (do_rtl)
emit_move_insn (xops[3], xops[2]);
+ else
+ output_asm_insn (AS2 (mov%L0,%2,%3), xops);
+
xops[3] = gen_rtx (MEM, FUNCTION_MODE,
gen_rtx (SYMBOL_REF, Pmode, "_alloca"));
- emit_call_insn (gen_rtx (CALL, VOIDmode,
- xops[3], const0_rtx));
+
+ if (do_rtl)
+ emit_call_insn (gen_rtx (CALL, VOIDmode, xops[3], const0_rtx));
+ else
+ output_asm_insn (AS1 (call,%P3), xops);
}
/* Note If use enter it is NOT reversed args.
@@ -1973,57 +2101,53 @@ ix86_expand_prologue ()
output_asm_insn ("enter %2,%3", xops);
}
*/
+
limit = (frame_pointer_needed ? FRAME_POINTER_REGNUM : STACK_POINTER_REGNUM);
for (regno = limit - 1; regno >= 0; regno--)
if ((regs_ever_live[regno] && ! call_used_regs[regno])
|| (regno == PIC_OFFSET_TABLE_REGNUM && pic_reg_used))
{
xops[0] = gen_rtx (REG, SImode, regno);
- insn = emit_insn
- (gen_rtx (SET, 0,
- gen_rtx (MEM, SImode,
- gen_rtx (PRE_DEC, SImode, stack_pointer_rtx)),
- xops[0]));
-
- RTX_FRAME_RELATED_P (insn) = 1;
- }
-
- if (pic_reg_used && TARGET_DEEP_BRANCH_PREDICTION)
- {
- xops[0] = pic_offset_table_rtx;
- if (pic_label_rtx == 0)
- {
- pic_label_rtx = (rtx) gen_label_rtx ();
- sprintf (pic_label_name, "LPR%d", pic_label_no++);
- LABEL_NAME (pic_label_rtx) = pic_label_name;
- }
- xops[1] = gen_rtx (MEM, QImode, gen_rtx (SYMBOL_REF, Pmode, LABEL_NAME (pic_label_rtx)));
+ if (do_rtl)
+ {
+ insn = emit_insn (gen_rtx (SET, VOIDmode,
+ gen_rtx (MEM, SImode,
+ gen_rtx (PRE_DEC, SImode,
+ stack_pointer_rtx)),
+ xops[0]));
- emit_insn (gen_prologue_get_pc (xops[0], xops[1]));
- emit_insn (gen_prologue_set_got (xops[0],
- gen_rtx (SYMBOL_REF, Pmode, "$_GLOBAL_OFFSET_TABLE_"),
- gen_rtx (CONST_INT, Pmode, CODE_LABEL_NUMBER(xops[1]))));
- }
- else if (pic_reg_used)
- {
- xops[0] = pic_offset_table_rtx;
- xops[1] = (rtx) gen_label_rtx ();
-
- emit_insn (gen_prologue_get_pc (xops[0], gen_rtx (CONST_INT, Pmode, CODE_LABEL_NUMBER(xops[1]))));
- emit_insn (gen_pop (xops[0]));
- emit_insn (gen_prologue_set_got (xops[0],
- gen_rtx (SYMBOL_REF, Pmode, "$_GLOBAL_OFFSET_TABLE_"),
- gen_rtx (CONST_INT, Pmode, CODE_LABEL_NUMBER (xops[1]))));
- }
-}
+ RTX_FRAME_RELATED_P (insn) = 1;
+ }
+ else
+ {
+ output_asm_insn ("push%L0 %0", xops);
+#ifdef INCOMING_RETURN_ADDR_RTX
+ if (dwarf2out_do_frame ())
+ {
+ char *l = dwarf2out_cfi_label ();
+
+ cfa_store_offset += 4;
+ if (! frame_pointer_needed)
+ {
+ cfa_offset = cfa_store_offset;
+ dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, cfa_offset);
+ }
+
+ dwarf2out_reg_save (l, regno, - cfa_store_offset);
+ }
+#endif
+ }
+ }
-/* Restore function stack, frame, and registers. */
+ if (pic_reg_used)
+ load_pic_register (do_rtl);
-void
-function_epilogue (file, size)
- FILE *file;
- int size;
-{
+ /* If we are profiling, make sure no instructions are scheduled before
+ the call to mcount. However, if -fpic, the above call will have
+ done that. */
+ if ((profile_flag || profile_block_flag)
+ && ! pic_reg_used && do_rtl)
+ emit_insn (gen_blockage ());
}
/* Return 1 if it is appropriate to emit `ret' instructions in the
@@ -2064,14 +2188,30 @@ ix86_can_use_return_insn_p ()
return nregs == 0 || ! frame_pointer_needed;
}
-
/* This function generates the assembly code for function exit.
FILE is an stdio stream to output the code to.
SIZE is an int: how many units of temporary storage to deallocate. */
void
+function_epilogue (file, size)
+ FILE *file;
+ int size;
+{
+ return;
+}
+
+/* Restore function stack, frame, and registers. */
+
+void
ix86_expand_epilogue ()
{
+ ix86_epilogue (1);
+}
+
+static void
+ix86_epilogue (do_rtl)
+ int do_rtl;
+{
register int regno;
register int nregs, limit;
int offset;
@@ -2082,9 +2222,7 @@ ix86_expand_epilogue ()
/* Compute the number of registers to pop */
- limit = (frame_pointer_needed
- ? FRAME_POINTER_REGNUM
- : STACK_POINTER_REGNUM);
+ limit = (frame_pointer_needed ? FRAME_POINTER_REGNUM : STACK_POINTER_REGNUM);
nregs = 0;
@@ -2093,26 +2231,37 @@ ix86_expand_epilogue ()
|| (regno == PIC_OFFSET_TABLE_REGNUM && pic_reg_used))
nregs++;
- /* sp is often unreliable so we must go off the frame pointer,
- */
+ /* sp is often unreliable so we must go off the frame pointer.
- /* In reality, we may not care if sp is unreliable, because we can
- restore the register relative to the frame pointer. In theory,
- since each move is the same speed as a pop, and we don't need the
- leal, this is faster. For now restore multiple registers the old
- way. */
+ In reality, we may not care if sp is unreliable, because we can restore
+ the register relative to the frame pointer. In theory, since each move
+ is the same speed as a pop, and we don't need the leal, this is faster.
+ For now restore multiple registers the old way. */
- offset = -tsize - (nregs * UNITS_PER_WORD);
+ offset = - tsize - (nregs * UNITS_PER_WORD);
xops[2] = stack_pointer_rtx;
+ /* When -fpic, we must emit a scheduling barrier, so that the instruction
+ that restores %ebx (which is PIC_OFFSET_TABLE_REGNUM), does not get
+ moved before any instruction which implicitly uses the got. This
+ includes any instruction which uses a SYMBOL_REF or a LABEL_REF.
+
+ Alternatively, this could be fixed by making the dependence on the
+ PIC_OFFSET_TABLE_REGNUM explicit in the RTL. */
+
+ if (flag_pic || profile_flag || profile_block_flag)
+ emit_insn (gen_blockage ());
+
if (nregs > 1 || ! frame_pointer_needed)
{
if (frame_pointer_needed)
{
xops[0] = adj_offsettable_operand (AT_BP (QImode), offset);
- emit_insn (gen_movsi_lea (xops[2], XEXP (xops[0], 0)));
-/* output_asm_insn (AS2 (lea%L2,%0,%2), xops);*/
+ if (do_rtl)
+ emit_insn (gen_movsi_lea (xops[2], XEXP (xops[0], 0)));
+ else
+ output_asm_insn (AS2 (lea%L2,%0,%2), xops);
}
for (regno = 0; regno < limit; regno++)
@@ -2120,10 +2269,14 @@ ix86_expand_epilogue ()
|| (regno == PIC_OFFSET_TABLE_REGNUM && pic_reg_used))
{
xops[0] = gen_rtx (REG, SImode, regno);
- emit_insn (gen_pop (xops[0]));
-/* output_asm_insn ("pop%L0 %0", xops);*/
+
+ if (do_rtl)
+ emit_insn (gen_pop (xops[0]));
+ else
+ output_asm_insn ("pop%L0 %0", xops);
}
}
+
else
for (regno = 0; regno < limit; regno++)
if ((regs_ever_live[regno] && ! call_used_regs[regno])
@@ -2131,8 +2284,12 @@ ix86_expand_epilogue ()
{
xops[0] = gen_rtx (REG, SImode, regno);
xops[1] = adj_offsettable_operand (AT_BP (Pmode), offset);
- emit_move_insn (xops[0], xops[1]);
-/* output_asm_insn (AS2 (mov%L0,%1,%0), xops);*/
+
+ if (do_rtl)
+ emit_move_insn (xops[0], xops[1]);
+ else
+ output_asm_insn (AS2 (mov%L0,%1,%0), xops);
+
offset += 4;
}
@@ -2141,29 +2298,40 @@ ix86_expand_epilogue ()
/* If not an i386, mov & pop is faster than "leave". */
if (TARGET_USE_LEAVE)
- emit_insn (gen_leave());
-/* output_asm_insn ("leave", xops);*/
+ {
+ if (do_rtl)
+ emit_insn (gen_leave());
+ else
+ output_asm_insn ("leave", xops);
+ }
else
{
xops[0] = frame_pointer_rtx;
xops[1] = stack_pointer_rtx;
- emit_insn (gen_epilogue_set_stack_ptr());
-/* output_asm_insn (AS2 (mov%L2,%0,%2), xops);*/
- emit_insn (gen_pop (xops[0]));
-/* output_asm_insn ("pop%L0 %0", xops);*/
+
+ if (do_rtl)
+ {
+ emit_insn (gen_epilogue_set_stack_ptr());
+ emit_insn (gen_pop (xops[0]));
+ }
+ else
+ {
+ output_asm_insn (AS2 (mov%L2,%0,%2), xops);
+ output_asm_insn ("pop%L0 %0", xops);
+ }
}
}
+
else if (tsize)
{
/* If there is no frame pointer, we must still release the frame. */
-
xops[0] = GEN_INT (tsize);
- emit_insn (gen_rtx (SET, SImode,
- xops[2],
- gen_rtx (PLUS, SImode,
- xops[2],
- xops[0])));
-/* output_asm_insn (AS2 (add%L2,%0,%2), xops);*/
+
+ if (do_rtl)
+ emit_insn (gen_rtx (SET, VOIDmode, xops[2],
+ gen_rtx (PLUS, SImode, xops[2], xops[0])));
+ else
+ output_asm_insn (AS2 (add%L2,%0,%2), xops);
}
#ifdef FUNCTION_BLOCK_PROFILER_EXIT
@@ -2185,26 +2353,37 @@ ix86_expand_epilogue ()
{
/* ??? Which register to use here? */
xops[0] = gen_rtx (REG, SImode, 2);
- emit_insn (gen_pop (xops[0]));
-/* output_asm_insn ("pop%L0 %0", xops);*/
- emit_insn (gen_rtx (SET, SImode,
- xops[2],
- gen_rtx (PLUS, SImode,
- xops[1],
- xops[2])));
-/* output_asm_insn (AS2 (add%L2,%1,%2), xops);*/
- emit_jump_insn (xops[0]);
-/* output_asm_insn ("jmp %*%0", xops);*/
+
+ if (do_rtl)
+ {
+ emit_insn (gen_pop (xops[0]));
+ emit_insn (gen_rtx (SET, VOIDmode, xops[2],
+ gen_rtx (PLUS, SImode, xops[1], xops[2])));
+ emit_jump_insn (xops[0]);
+ }
+ else
+ {
+ output_asm_insn ("pop%L0 %0", xops);
+ output_asm_insn (AS2 (add%L2,%1,%2), xops);
+ output_asm_insn ("jmp %*%0", xops);
+ }
+ }
+ else
+ {
+ if (do_rtl)
+ emit_jump_insn (gen_return_pop_internal (xops[1]));
+ else
+ output_asm_insn ("ret %1", xops);
}
- else
- emit_jump_insn (gen_return_pop_internal (xops[1]));
-/* output_asm_insn ("ret %1", xops);*/
}
else
-/* output_asm_insn ("ret", xops);*/
- emit_jump_insn (gen_return_internal ());
+ {
+ if (do_rtl)
+ emit_jump_insn (gen_return_internal ());
+ else
+ output_asm_insn ("ret", xops);
+ }
}
-
/* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression
that is a valid memory address for an instruction.
@@ -2254,14 +2433,14 @@ legitimate_address_p (mode, addr, strict)
if (TARGET_DEBUG_ADDR)
{
fprintf (stderr,
- "\n==========\nGO_IF_LEGITIMATE_ADDRESS, mode = %s, strict = %d\n",
+ "\n======\nGO_IF_LEGITIMATE_ADDRESS, mode = %s, strict = %d\n",
GET_MODE_NAME (mode), strict);
debug_rtx (addr);
}
if (GET_CODE (addr) == REG || GET_CODE (addr) == SUBREG)
- base = addr; /* base reg */
+ base = addr;
else if (GET_CODE (addr) == PLUS)
{
@@ -2274,13 +2453,13 @@ legitimate_address_p (mode, addr, strict)
{
if (code1 == REG || code1 == SUBREG)
{
- indx = op0; /* index + base */
+ indx = op0; /* index + base */
base = op1;
}
else
{
- base = op0; /* base + displacement */
+ base = op0; /* base + displacement */
disp = op1;
}
}
@@ -2291,10 +2470,10 @@ legitimate_address_p (mode, addr, strict)
scale = XEXP (op0, 1);
if (code1 == REG || code1 == SUBREG)
- base = op1; /* index*scale + base */
+ base = op1; /* index*scale + base */
else
- disp = op1; /* index*scale + disp */
+ disp = op1; /* index*scale + disp */
}
else if (code0 == PLUS && GET_CODE (XEXP (op0, 0)) == MULT)
@@ -2307,7 +2486,7 @@ legitimate_address_p (mode, addr, strict)
else if (code0 == PLUS)
{
- indx = XEXP (op0, 0); /* index + base + disp */
+ indx = XEXP (op0, 0); /* index + base + disp */
base = XEXP (op0, 1);
disp = op1;
}
@@ -2321,12 +2500,12 @@ legitimate_address_p (mode, addr, strict)
else if (GET_CODE (addr) == MULT)
{
- indx = XEXP (addr, 0); /* index*scale */
+ indx = XEXP (addr, 0); /* index*scale */
scale = XEXP (addr, 1);
}
else
- disp = addr; /* displacement */
+ disp = addr; /* displacement */
/* Allow arg pointer and stack pointer as index if there is not scaling */
if (base && indx && !scale
@@ -2337,10 +2516,12 @@ legitimate_address_p (mode, addr, strict)
indx = tmp;
}
- /* Validate base register */
- /* Don't allow SUBREG's here, it can lead to spill failures when the base
+ /* Validate base register:
+
+ Don't allow SUBREG's here, it can lead to spill failures when the base
is one word out of a two word structure, which is represented internally
as a DImode int. */
+
if (base)
{
if (GET_CODE (base) != REG)
@@ -2349,16 +2530,17 @@ legitimate_address_p (mode, addr, strict)
return FALSE;
}
- if ((strict && !REG_OK_FOR_BASE_STRICT_P (base))
- || (!strict && !REG_OK_FOR_BASE_NONSTRICT_P (base)))
+ if ((strict && ! REG_OK_FOR_BASE_STRICT_P (base))
+ || (! strict && ! REG_OK_FOR_BASE_NONSTRICT_P (base)))
{
ADDR_INVALID ("Base is not valid.\n", base);
return FALSE;
}
}
- /* Validate index register */
- /* Don't allow SUBREG's here, it can lead to spill failures when the index
+ /* Validate index register:
+
+ Don't allow SUBREG's here, it can lead to spill failures when the index
is one word out of a two word structure, which is represented internally
as a DImode int. */
if (indx)
@@ -2369,17 +2551,17 @@ legitimate_address_p (mode, addr, strict)
return FALSE;
}
- if ((strict && !REG_OK_FOR_INDEX_STRICT_P (indx))
- || (!strict && !REG_OK_FOR_INDEX_NONSTRICT_P (indx)))
+ if ((strict && ! REG_OK_FOR_INDEX_STRICT_P (indx))
+ || (! strict && ! REG_OK_FOR_INDEX_NONSTRICT_P (indx)))
{
ADDR_INVALID ("Index is not valid.\n", indx);
return FALSE;
}
}
else if (scale)
- abort (); /* scale w/o index invalid */
+ abort (); /* scale w/o index invalid */
- /* Validate scale factor */
+ /* Validate scale factor: */
if (scale)
{
HOST_WIDE_INT value;
@@ -2407,8 +2589,8 @@ legitimate_address_p (mode, addr, strict)
{
if (GET_CODE (disp) == SYMBOL_REF
&& CONSTANT_POOL_ADDRESS_P (disp)
- && !base
- && !indx)
+ && base == 0
+ && indx == 0)
;
else if (!CONSTANT_ADDRESS_P (disp))
@@ -2434,7 +2616,8 @@ legitimate_address_p (mode, addr, strict)
else if (HALF_PIC_P () && HALF_PIC_ADDRESS_P (disp)
&& (base != NULL_RTX || indx != NULL_RTX))
{
- ADDR_INVALID ("Displacement is an invalid half-pic reference.\n", disp);
+ ADDR_INVALID ("Displacement is an invalid half-pic reference.\n",
+ disp);
return FALSE;
}
}
@@ -2445,7 +2628,6 @@ legitimate_address_p (mode, addr, strict)
/* Everything looks valid, return true */
return TRUE;
}
-
/* Return a legitimate reference for ORIG (an address) using the
register REG. If REG is 0, a new pseudo is generated.
@@ -2496,14 +2678,14 @@ legitimize_pic_address (orig, reg)
new = gen_rtx (PLUS, Pmode, pic_offset_table_rtx, orig);
else
new = gen_rtx (MEM, Pmode,
- gen_rtx (PLUS, Pmode,
- pic_offset_table_rtx, orig));
+ gen_rtx (PLUS, Pmode, pic_offset_table_rtx, orig));
emit_move_insn (reg, new);
}
current_function_uses_pic_offset_table = 1;
return reg;
}
+
else if (GET_CODE (addr) == CONST || GET_CODE (addr) == PLUS)
{
rtx base;
@@ -2533,12 +2715,12 @@ legitimize_pic_address (orig, reg)
base = gen_rtx (PLUS, Pmode, base, XEXP (addr, 0));
addr = XEXP (addr, 1);
}
- return gen_rtx (PLUS, Pmode, base, addr);
+
+ return gen_rtx (PLUS, Pmode, base, addr);
}
return new;
}
-
/* Emit insns to move operands[1] into operands[0]. */
void
@@ -2549,11 +2731,10 @@ emit_pic_move (operands, mode)
rtx temp = reload_in_progress ? operands[0] : gen_reg_rtx (Pmode);
if (GET_CODE (operands[0]) == MEM && SYMBOLIC_CONST (operands[1]))
- operands[1] = (rtx) force_reg (SImode, operands[1]);
+ operands[1] = force_reg (SImode, 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.
@@ -2587,7 +2768,8 @@ legitimize_address (x, oldx, mode)
if (TARGET_DEBUG_ADDR)
{
- fprintf (stderr, "\n==========\nLEGITIMIZE_ADDRESS, mode = %s\n", GET_MODE_NAME (mode));
+ fprintf (stderr, "\n==========\nLEGITIMIZE_ADDRESS, mode = %s\n",
+ GET_MODE_NAME (mode));
debug_rtx (x);
}
@@ -2600,14 +2782,14 @@ legitimize_address (x, oldx, mode)
&& (log = (unsigned)exact_log2 (INTVAL (XEXP (x, 1)))) < 4)
{
changed = 1;
- x = gen_rtx (MULT, Pmode,
- force_reg (Pmode, XEXP (x, 0)),
+ x = gen_rtx (MULT, Pmode, force_reg (Pmode, XEXP (x, 0)),
GEN_INT (1 << log));
}
if (GET_CODE (x) == PLUS)
{
- /* Canonicalize shifts by 0, 1, 2, 3 into multiply */
+ /* Canonicalize shifts by 0, 1, 2, 3 into multiply. */
+
if (GET_CODE (XEXP (x, 0)) == ASHIFT
&& GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT
&& (log = (unsigned)exact_log2 (INTVAL (XEXP (XEXP (x, 0), 1)))) < 4)
@@ -2628,7 +2810,7 @@ legitimize_address (x, oldx, mode)
GEN_INT (1 << log));
}
- /* Put multiply first if it isn't already */
+ /* Put multiply first if it isn't already. */
if (GET_CODE (XEXP (x, 1)) == MULT)
{
rtx tmp = XEXP (x, 0);
@@ -2645,11 +2827,13 @@ legitimize_address (x, oldx, mode)
{
changed = 1;
x = gen_rtx (PLUS, Pmode,
- gen_rtx (PLUS, Pmode, XEXP (x, 0), XEXP (XEXP (x, 1), 0)),
+ gen_rtx (PLUS, Pmode, XEXP (x, 0),
+ XEXP (XEXP (x, 1), 0)),
XEXP (XEXP (x, 1), 1));
}
- /* Canonicalize (plus (plus (mult (reg) (const)) (plus (reg) (const))) const)
+ /* Canonicalize
+ (plus (plus (mult (reg) (const)) (plus (reg) (const))) const)
into (plus (plus (mult (reg) (const)) (reg)) (const)). */
else if (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 0)) == PLUS
&& GET_CODE (XEXP (XEXP (x, 0), 0)) == MULT
@@ -2735,7 +2919,6 @@ legitimize_address (x, oldx, mode)
return x;
}
-
/* Print an integer constant expression in assembler syntax. Addition
and subtraction are the only arithmetic that may appear in these
@@ -2815,20 +2998,20 @@ output_pic_addr_const (file, x, code)
break;
case PLUS:
- /* Some assemblers need integer constants to appear last (eg masm). */
+ /* Some assemblers need integer constants to appear first. */
if (GET_CODE (XEXP (x, 0)) == CONST_INT)
{
- output_pic_addr_const (file, XEXP (x, 1), code);
- if (INTVAL (XEXP (x, 0)) >= 0)
- fprintf (file, "+");
output_pic_addr_const (file, XEXP (x, 0), code);
+ if (INTVAL (XEXP (x, 1)) >= 0)
+ fprintf (file, "+");
+ output_pic_addr_const (file, XEXP (x, 1), code);
}
else
{
- output_pic_addr_const (file, XEXP (x, 0), code);
- if (INTVAL (XEXP (x, 1)) >= 0)
- fprintf (file, "+");
output_pic_addr_const (file, XEXP (x, 1), code);
+ if (INTVAL (XEXP (x, 0)) >= 0)
+ fprintf (file, "+");
+ output_pic_addr_const (file, XEXP (x, 0), code);
}
break;
@@ -2843,71 +3026,108 @@ output_pic_addr_const (file, x, code)
}
}
-/* Append the correct conditional move suffix which corresponds to CODE */
+/* Append the correct conditional move suffix which corresponds to CODE. */
static void
-put_condition_code (code, mode, file)
+put_condition_code (code, reverse_cc, mode, file)
enum rtx_code code;
+ int reverse_cc;
enum mode_class mode;
FILE * file;
{
+ int ieee = (TARGET_IEEE_FP && (cc_prev_status.flags & CC_IN_80387)
+ && ! (cc_prev_status.flags & CC_FCOMI));
+ if (reverse_cc && ! ieee)
+ code = reverse_condition (code);
+
if (mode == MODE_INT)
- switch (code)
- {
+ switch (code)
+ {
case NE:
- if (cc_prev_status.flags & CC_Z_IN_NOT_C)
- fputs ("b", file);
- else
- fputs ("ne", file);
- return;
- case EQ:
- if (cc_prev_status.flags & CC_Z_IN_NOT_C)
- fputs ("ae", file);
- else
- fputs ("e", file);
- return;
- case GE:
- fputs ("ge", file); return;
- case GT:
- fputs ("g", file); return;
- case LE:
- fputs ("le", file); return;
- case LT:
- fputs ("l", file); return;
- case GEU:
- fputs ("ae", file); return;
- case GTU:
- fputs ("a", file); return;
- case LEU:
- fputs ("be", file); return;
- case LTU:
- fputs ("b", file); return;
- default: output_operand_lossage ("Invalid %%C operand");
- }
+ if (cc_prev_status.flags & CC_Z_IN_NOT_C)
+ fputs ("b", file);
+ else
+ fputs ("ne", file);
+ return;
+
+ case EQ:
+ if (cc_prev_status.flags & CC_Z_IN_NOT_C)
+ fputs ("ae", file);
+ else
+ fputs ("e", file);
+ return;
+
+ case GE:
+ fputs ("ge", file);
+ return;
+
+ case GT:
+ fputs ("g", file);
+ return;
+
+ case LE:
+ fputs ("le", file);
+ return;
+
+ case LT:
+ fputs ("l", file);
+ return;
+
+ case GEU:
+ fputs ("ae", file);
+ return;
+
+ case GTU:
+ fputs ("a", file);
+ return;
+
+ case LEU:
+ fputs ("be", file);
+ return;
+
+ case LTU:
+ fputs ("b", file);
+ return;
+
+ default:
+ output_operand_lossage ("Invalid %%C operand");
+ }
+
else if (mode == MODE_FLOAT)
- switch (code)
- {
+ switch (code)
+ {
case NE:
- fputs ("ne", file); return;
+ fputs (ieee ? (reverse_cc ? "ne" : "e") : "ne", file);
+ return;
case EQ:
- fputs ("e", file); return;
+ fputs (ieee ? (reverse_cc ? "ne" : "e") : "e", file);
+ return;
case GE:
- fputs ("nb", file); return;
+ fputs (ieee ? (reverse_cc ? "ne" : "e") : "nb", file);
+ return;
case GT:
- fputs ("nbe", file); return;
+ fputs (ieee ? (reverse_cc ? "ne" : "e") : "nbe", file);
+ return;
case LE:
- fputs ("be", file); return;
+ fputs (ieee ? (reverse_cc ? "nb" : "b") : "be", file);
+ return;
case LT:
- fputs ("b", file); return;
+ fputs (ieee ? (reverse_cc ? "ne" : "e") : "b", file);
+ return;
case GEU:
- fputs ("nb", file); return;
+ fputs (ieee ? (reverse_cc ? "ne" : "e") : "nb", file);
+ return;
case GTU:
- fputs ("nbe", file); return;
+ fputs (ieee ? (reverse_cc ? "ne" : "e") : "nbe", file);
+ return;
case LEU:
- fputs ("be", file); return;
+ fputs (ieee ? (reverse_cc ? "nb" : "b") : "be", file);
+ return;
case LTU:
- fputs ("b", file); return;
- default: output_operand_lossage ("Invalid %%C operand");
+ fputs (ieee ? (reverse_cc ? "ne" : "e") : "b", file);
+ return;
+ default:
+ output_operand_lossage ("Invalid %%C operand");
}
}
@@ -2931,8 +3151,7 @@ put_condition_code (code, mode, file)
k -- likewise, print the SImode name of the register.
h -- print the QImode name for a "high" register, either ah, bh, ch or dh.
y -- print "st(0)" instead of "st" as a register.
- P -- print as a PIC constant
-*/
+ P -- print as a PIC constant */
void
print_operand (file, x, code)
@@ -3054,26 +3273,25 @@ print_operand (file, x, code)
PRINT_OPERAND (file, x, 0);
fputs (AS2C (,) + 1, file);
}
+
return;
/* This is used by the conditional move instructions. */
case 'C':
- put_condition_code (GET_CODE (x), MODE_INT, file);
+ put_condition_code (GET_CODE (x), 0, MODE_INT, file);
return;
- /* like above, but reverse condition */
+ /* Like above, but reverse condition */
case 'c':
- put_condition_code (reverse_condition (GET_CODE (x)), MODE_INT, file);
- return;
+ put_condition_code (GET_CODE (x), 1, MODE_INT, file); return;
case 'F':
- put_condition_code (GET_CODE (x), MODE_FLOAT, file);
+ put_condition_code (GET_CODE (x), 0, MODE_FLOAT, file);
return;
- /* like above, but reverse condition */
+ /* Like above, but reverse condition */
case 'f':
- put_condition_code (reverse_condition (GET_CODE (x)),
- MODE_FLOAT, file);
+ put_condition_code (GET_CODE (x), 1, MODE_FLOAT, file);
return;
default:
@@ -3085,10 +3303,12 @@ print_operand (file, x, code)
}
}
}
+
if (GET_CODE (x) == REG)
{
PRINT_REG (x, code, file);
}
+
else if (GET_CODE (x) == MEM)
{
PRINT_PTR (x, file);
@@ -3102,25 +3322,34 @@ print_operand (file, x, code)
else
output_address (XEXP (x, 0));
}
+
else if (GET_CODE (x) == CONST_DOUBLE && GET_MODE (x) == SFmode)
{
- REAL_VALUE_TYPE r; long l;
+ REAL_VALUE_TYPE r;
+ long l;
+
REAL_VALUE_FROM_CONST_DOUBLE (r, x);
REAL_VALUE_TO_TARGET_SINGLE (r, l);
PRINT_IMMED_PREFIX (file);
fprintf (file, "0x%x", l);
}
+
/* These float cases don't actually occur as immediate operands. */
else if (GET_CODE (x) == CONST_DOUBLE && GET_MODE (x) == DFmode)
{
- REAL_VALUE_TYPE r; char dstr[30];
+ REAL_VALUE_TYPE r;
+ char dstr[30];
+
REAL_VALUE_FROM_CONST_DOUBLE (r, x);
REAL_VALUE_TO_DECIMAL (r, "%.22e", dstr);
fprintf (file, "%s", dstr);
}
+
else if (GET_CODE (x) == CONST_DOUBLE && GET_MODE (x) == XFmode)
{
- REAL_VALUE_TYPE r; char dstr[30];
+ REAL_VALUE_TYPE r;
+ char dstr[30];
+
REAL_VALUE_FROM_CONST_DOUBLE (r, x);
REAL_VALUE_TO_DECIMAL (r, "%.22e", dstr);
fprintf (file, "%s", dstr);
@@ -3177,38 +3406,35 @@ print_operand_address (file, addr)
offset = XEXP (addr, 1);
addr = XEXP (addr, 0);
}
- if (GET_CODE (addr) != PLUS) ;
+
+ if (GET_CODE (addr) != PLUS)
+ ;
else if (GET_CODE (XEXP (addr, 0)) == MULT)
- {
- reg1 = XEXP (addr, 0);
- addr = XEXP (addr, 1);
- }
+ reg1 = XEXP (addr, 0), addr = XEXP (addr, 1);
else if (GET_CODE (XEXP (addr, 1)) == MULT)
- {
- reg1 = XEXP (addr, 1);
- addr = XEXP (addr, 0);
- }
+ reg1 = XEXP (addr, 1), addr = XEXP (addr, 0);
else if (GET_CODE (XEXP (addr, 0)) == REG)
- {
- reg1 = XEXP (addr, 0);
- addr = XEXP (addr, 1);
- }
+ reg1 = XEXP (addr, 0), addr = XEXP (addr, 1);
else if (GET_CODE (XEXP (addr, 1)) == REG)
- {
- reg1 = XEXP (addr, 1);
- addr = XEXP (addr, 0);
- }
+ reg1 = XEXP (addr, 1), addr = XEXP (addr, 0);
+
if (GET_CODE (addr) == REG || GET_CODE (addr) == MULT)
{
- if (reg1 == 0) reg1 = addr;
- else reg2 = addr;
+ if (reg1 == 0)
+ reg1 = addr;
+ else
+ reg2 = addr;
+
addr = 0;
}
+
if (offset != 0)
{
- if (addr != 0) abort ();
+ if (addr != 0)
+ abort ();
addr = offset;
}
+
if ((reg1 && GET_CODE (reg1) == MULT)
|| (reg2 != 0 && REGNO_OK_FOR_BASE_P (REGNO (reg2))))
{
@@ -3229,10 +3455,8 @@ print_operand_address (file, addr)
{
if (flag_pic)
output_pic_addr_const (file, addr, 0);
-
else if (GET_CODE (addr) == LABEL_REF)
output_asm_label (addr);
-
else
output_addr_const (file, addr);
}
@@ -3263,6 +3487,7 @@ print_operand_address (file, addr)
case MULT:
{
int scale;
+
if (GET_CODE (XEXP (addr, 0)) == CONST_INT)
{
scale = INTVAL (XEXP (addr, 0));
@@ -3273,8 +3498,9 @@ print_operand_address (file, addr)
scale = INTVAL (XEXP (addr, 1));
ireg = XEXP (addr, 0);
}
+
output_addr_const (file, const0_rtx);
- PRINT_B_I_S ((rtx) 0, ireg, scale, file);
+ PRINT_B_I_S (NULL_RTX, ireg, scale, file);
}
break;
@@ -3315,16 +3541,7 @@ notice_update_cc (exp)
/* Jumps do not alter the cc's. */
if (SET_DEST (exp) == pc_rtx)
return;
-#ifdef IS_STACK_MODE
- /* Moving into a memory of stack_mode may have been moved
- in between the use and set of cc0 by loop_spl(). So
- old value of cc.status must be retained */
- if(GET_CODE(SET_DEST(exp))==MEM
- && IS_STACK_MODE(GET_MODE(SET_DEST(exp))))
- {
- return;
- }
-#endif
+
/* Moving register or memory into a register:
it doesn't alter the cc's, but it might invalidate
the RTX's which we remember the cc's came from.
@@ -3336,31 +3553,37 @@ notice_update_cc (exp)
if (cc_status.value1
&& reg_overlap_mentioned_p (SET_DEST (exp), cc_status.value1))
cc_status.value1 = 0;
+
if (cc_status.value2
&& reg_overlap_mentioned_p (SET_DEST (exp), cc_status.value2))
cc_status.value2 = 0;
+
return;
}
+
/* Moving register into memory doesn't alter the cc's.
It may invalidate the RTX's which we remember the cc's came from. */
if (GET_CODE (SET_DEST (exp)) == MEM
&& (REG_P (SET_SRC (exp))
|| GET_RTX_CLASS (GET_CODE (SET_SRC (exp))) == '<'))
{
- if (cc_status.value1 && GET_CODE (cc_status.value1) == MEM
- || reg_mentioned_p (SET_DEST (exp), cc_status.value1))
+ if (cc_status.value1
+ && reg_overlap_mentioned_p (SET_DEST (exp), cc_status.value1))
cc_status.value1 = 0;
- if (cc_status.value2 && GET_CODE (cc_status.value2) == MEM
- || reg_mentioned_p (SET_DEST (exp), cc_status.value2))
+ if (cc_status.value2
+ && reg_overlap_mentioned_p (SET_DEST (exp), cc_status.value2))
cc_status.value2 = 0;
+
return;
}
+
/* Function calls clobber the cc's. */
else if (GET_CODE (SET_SRC (exp)) == CALL)
{
CC_STATUS_INIT;
return;
}
+
/* Tests and compares set the cc's in predictable ways. */
else if (SET_DEST (exp) == cc0_rtx)
{
@@ -3368,14 +3591,14 @@ notice_update_cc (exp)
cc_status.value1 = SET_SRC (exp);
return;
}
+
/* Certain instructions effect the condition codes. */
else if (GET_MODE (SET_SRC (exp)) == SImode
|| GET_MODE (SET_SRC (exp)) == HImode
|| GET_MODE (SET_SRC (exp)) == QImode)
switch (GET_CODE (SET_SRC (exp)))
{
- case ASHIFTRT: case LSHIFTRT:
- case ASHIFT:
+ case ASHIFTRT: case LSHIFTRT: case ASHIFT:
/* Shifts on the 386 don't set the condition codes if the
shift count is zero. */
if (GET_CODE (XEXP (SET_SRC (exp), 1)) != CONST_INT)
@@ -3383,6 +3606,7 @@ notice_update_cc (exp)
CC_STATUS_INIT;
break;
}
+
/* We assume that the CONST_INT is non-zero (this rtx would
have been deleted if it were zero. */
@@ -3407,6 +3631,7 @@ notice_update_cc (exp)
if (SET_DEST (XVECEXP (exp, 0, 0)) == pc_rtx)
return;
if (SET_DEST (XVECEXP (exp, 0, 0)) == cc0_rtx)
+
{
CC_STATUS_INIT;
if (stack_regs_mentioned_p (SET_SRC (XVECEXP (exp, 0, 0))))
@@ -3420,6 +3645,7 @@ notice_update_cc (exp)
cc_status.value1 = SET_SRC (XVECEXP (exp, 0, 0));
return;
}
+
CC_STATUS_INIT;
}
else
@@ -3448,9 +3674,7 @@ split_di (operands, num, lo_half, hi_half)
hi_half[num] = gen_rtx (REG, SImode, REGNO (operands[num]) + 1);
}
else if (CONSTANT_P (operands[num]))
- {
- split_double (operands[num], &lo_half[num], &hi_half[num]);
- }
+ split_double (operands[num], &lo_half[num], &hi_half[num]);
else if (offsettable_memref_p (operands[num]))
{
lo_half[num] = operands[num];
@@ -3484,7 +3708,6 @@ binary_387_op (op, mode)
return 0;
}
}
-
/* Return 1 if this is a valid shift or rotate operation on a 386.
OP is the expression matched, and MODE is its mode. */
@@ -3595,12 +3818,13 @@ output_387_binary_op (insn, operands)
if (NON_STACK_REG_P (operands[1]))
{
output_op_from_reg (operands[1], strcat (buf, AS1 (%z0,%1)));
- RET;
+ return "";
}
+
else if (NON_STACK_REG_P (operands[2]))
{
output_op_from_reg (operands[2], strcat (buf, AS1 (%z0,%1)));
- RET;
+ return "";
}
if (find_regno_note (insn, REG_DEAD, REGNO (operands[2])))
@@ -3622,12 +3846,13 @@ output_387_binary_op (insn, operands)
if (NON_STACK_REG_P (operands[1]))
{
output_op_from_reg (operands[1], strcat (buf, AS1 (r%z0,%1)));
- RET;
+ return "";
}
+
else if (NON_STACK_REG_P (operands[2]))
{
output_op_from_reg (operands[2], strcat (buf, AS1 (%z0,%1)));
- RET;
+ return "";
}
if (! STACK_REG_P (operands[1]) || ! STACK_REG_P (operands[2]))
@@ -3670,8 +3895,8 @@ output_fix_trunc (insn, operands)
int stack_top_dies = find_regno_note (insn, REG_DEAD, FIRST_STACK_REG) != 0;
rtx xops[2];
- if (! STACK_TOP_P (operands[1]) ||
- (GET_MODE (operands[0]) == DImode && ! stack_top_dies))
+ if (! STACK_TOP_P (operands[1])
+ || (GET_MODE (operands[0]) == DImode && ! stack_top_dies))
abort ();
xops[0] = GEN_INT (12);
@@ -3684,7 +3909,8 @@ output_fix_trunc (insn, operands)
output_asm_insn (AS1 (fldc%W3,%3), operands);
if (NON_STACK_REG_P (operands[0]))
- output_to_reg (operands[0], stack_top_dies);
+ output_to_reg (operands[0], stack_top_dies, operands[3]);
+
else if (GET_CODE (operands[0]) == MEM)
{
if (stack_top_dies)
@@ -3742,24 +3968,26 @@ output_float_compare (insn, operands)
`fcompp' float compare */
if (unordered_compare)
- if (cc_status.flags & CC_FCOMI)
- {
- output_asm_insn (AS2 (fucomip,%y1,%0), operands);
- output_asm_insn (AS1 (fstp, %y0), operands);
- RET;
- }
- else
- output_asm_insn ("fucompp", operands);
+ {
+ if (cc_status.flags & CC_FCOMI)
+ {
+ output_asm_insn (AS2 (fucomip,%y1,%0), operands);
+ output_asm_insn (AS1 (fstp, %y0), operands);
+ return "";
+ }
+ else
+ output_asm_insn ("fucompp", operands);
+ }
else
{
- if (cc_status.flags & CC_FCOMI)
- {
- output_asm_insn (AS2 (fcomip, %y1,%0), operands);
- output_asm_insn (AS1 (fstp, %y0), operands);
- RET;
- }
- else
- output_asm_insn ("fcompp", operands);
+ if (cc_status.flags & CC_FCOMI)
+ {
+ output_asm_insn (AS2 (fcomip, %y1,%0), operands);
+ output_asm_insn (AS1 (fstp, %y0), operands);
+ return "";
+ }
+ else
+ output_asm_insn ("fcompp", operands);
}
}
else
@@ -3786,7 +4014,7 @@ output_float_compare (insn, operands)
else if (cc_status.flags & CC_FCOMI)
{
output_asm_insn (strcat (buf, AS2 (%z1,%y1,%0)), operands);
- RET;
+ return "";
}
else
output_asm_insn (strcat (buf, AS1 (%z1,%y1)), operands);
@@ -3824,24 +4052,21 @@ output_fp_cc0_set (insn)
&& GET_CODE (PATTERN (next)) == SET
&& SET_DEST (PATTERN (next)) == pc_rtx
&& GET_CODE (SET_SRC (PATTERN (next))) == IF_THEN_ELSE)
- {
- code = GET_CODE (XEXP (SET_SRC (PATTERN (next)), 0));
- }
+ code = GET_CODE (XEXP (SET_SRC (PATTERN (next)), 0));
else if (GET_CODE (PATTERN (next)) == SET)
- {
- code = GET_CODE (SET_SRC (PATTERN (next)));
- }
+ code = GET_CODE (SET_SRC (PATTERN (next)));
else
- {
- return "sahf";
- }
- if (code == GT || code == LT || code == EQ || code == NE
- || code == LE || code == GE)
- { /* We will test eax directly */
+ return "sahf";
+
+ if (code == GT || code == LT || code == EQ || code == NE
+ || code == LE || code == GE)
+ {
+ /* We will test eax directly. */
cc_status.flags |= CC_TEST_AX;
- RET;
+ return "";
}
}
+
return "sahf";
}
@@ -3853,21 +4078,22 @@ output_fp_cc0_set (insn)
&& GET_CODE (PATTERN (next)) == SET
&& SET_DEST (PATTERN (next)) == pc_rtx
&& GET_CODE (SET_SRC (PATTERN (next))) == IF_THEN_ELSE)
- {
- code = GET_CODE (XEXP (SET_SRC (PATTERN (next)), 0));
- }
+ code = GET_CODE (XEXP (SET_SRC (PATTERN (next)), 0));
else if (GET_CODE (PATTERN (next)) == SET)
{
if (GET_CODE (SET_SRC (PATTERN (next))) == IF_THEN_ELSE)
code = GET_CODE (XEXP (SET_SRC (PATTERN (next)), 0));
- else code = GET_CODE (SET_SRC (PATTERN (next)));
+ else
+ code = GET_CODE (SET_SRC (PATTERN (next)));
}
+
else if (GET_CODE (PATTERN (next)) == PARALLEL
&& GET_CODE (XVECEXP (PATTERN (next), 0, 0)) == SET)
{
if (GET_CODE (SET_SRC (XVECEXP (PATTERN (next), 0, 0))) == IF_THEN_ELSE)
- code = GET_CODE (XEXP (SET_SRC (XVECEXP (PATTERN (next), 0, 0)), 0));
- else code = GET_CODE (SET_SRC (XVECEXP (PATTERN (next), 0, 0)));
+ code = GET_CODE (XEXP (SET_SRC (XVECEXP (PATTERN (next), 0, 0)), 0));
+ else
+ code = GET_CODE (SET_SRC (XVECEXP (PATTERN (next), 0, 0)));
}
else
abort ();
@@ -3928,7 +4154,8 @@ output_fp_cc0_set (insn)
default:
abort ();
}
- RET;
+
+ return "";
}
#define MAX_386_STACK_LOCALS 2
@@ -4003,7 +4230,6 @@ assign_386_stack_local (mode, n)
return i386_stack_locals[(int) mode][n];
}
-
int is_mul(op,mode)
register rtx op;
@@ -4018,7 +4244,6 @@ int is_div(op,mode)
{
return (GET_CODE (op) == DIV);
}
-
#ifdef NOTYET
/* Create a new copy of an rtx.
@@ -4125,7 +4350,8 @@ copy_all_rtx (orig)
}
-/* try to rewrite a memory address to make it valid */
+/* Try to rewrite a memory address to make it valid */
+
void
rewrite_address (mem_rtx)
rtx mem_rtx;
@@ -4135,76 +4361,72 @@ rewrite_address (mem_rtx)
int offset_adjust = 0;
int was_only_offset = 0;
rtx mem_addr = XEXP (mem_rtx, 0);
- char *storage = (char *) oballoc (0);
+ char *storage = oballoc (0);
int in_struct = 0;
int is_spill_rtx = 0;
in_struct = MEM_IN_STRUCT_P (mem_rtx);
is_spill_rtx = RTX_IS_SPILL_P (mem_rtx);
- if (GET_CODE (mem_addr) == PLUS &&
- GET_CODE (XEXP (mem_addr, 1)) == PLUS &&
- GET_CODE (XEXP (XEXP (mem_addr, 1), 0)) == REG)
- { /* this part is utilized by the combiner */
- ret_rtx =
- gen_rtx (PLUS, GET_MODE (mem_addr),
- gen_rtx (PLUS, GET_MODE (XEXP (mem_addr, 1)),
- XEXP (mem_addr, 0),
- XEXP (XEXP (mem_addr, 1), 0)),
- XEXP (XEXP (mem_addr, 1), 1));
+ if (GET_CODE (mem_addr) == PLUS
+ && GET_CODE (XEXP (mem_addr, 1)) == PLUS
+ && GET_CODE (XEXP (XEXP (mem_addr, 1), 0)) == REG)
+ {
+ /* This part is utilized by the combiner. */
+ ret_rtx
+ = gen_rtx (PLUS, GET_MODE (mem_addr),
+ gen_rtx (PLUS, GET_MODE (XEXP (mem_addr, 1)),
+ XEXP (mem_addr, 0), XEXP (XEXP (mem_addr, 1), 0)),
+ XEXP (XEXP (mem_addr, 1), 1));
+
if (memory_address_p (GET_MODE (mem_rtx), ret_rtx))
{
XEXP (mem_rtx, 0) = ret_rtx;
RTX_IS_SPILL_P (ret_rtx) = is_spill_rtx;
return;
}
+
obfree (storage);
}
- /* this part is utilized by loop.c */
- /* If the address contains PLUS (reg,const) and this pattern is invalid
- in this case - try to rewrite the address to make it valid intel1
- */
- storage = (char *) oballoc (0);
+ /* This part is utilized by loop.c.
+ If the address contains PLUS (reg,const) and this pattern is invalid
+ in this case - try to rewrite the address to make it valid. */
+ storage = oballoc (0);
index_rtx = base_rtx = offset_rtx = NULL;
- /* find the base index and offset elements of the memory address */
+
+ /* Find the base index and offset elements of the memory address. */
if (GET_CODE (mem_addr) == PLUS)
{
if (GET_CODE (XEXP (mem_addr, 0)) == REG)
{
if (GET_CODE (XEXP (mem_addr, 1)) == REG)
- {
- base_rtx = XEXP (mem_addr, 1);
- index_rtx = XEXP (mem_addr, 0);
- }
+ base_rtx = XEXP (mem_addr, 1), index_rtx = XEXP (mem_addr, 0);
else
- {
- base_rtx = XEXP (mem_addr, 0);
- offset_rtx = XEXP (mem_addr, 1);
- }
+ base_rtx = XEXP (mem_addr, 0), offset_rtx = XEXP (mem_addr, 1);
}
+
else if (GET_CODE (XEXP (mem_addr, 0)) == MULT)
{
index_rtx = XEXP (mem_addr, 0);
if (GET_CODE (XEXP (mem_addr, 1)) == REG)
- {
- base_rtx = XEXP (mem_addr, 1);
- }
+ base_rtx = XEXP (mem_addr, 1);
else
- {
- offset_rtx = XEXP (mem_addr, 1);
- }
+ offset_rtx = XEXP (mem_addr, 1);
}
+
else if (GET_CODE (XEXP (mem_addr, 0)) == PLUS)
{
- /* intel1 */
- if (GET_CODE (XEXP (XEXP (mem_addr, 0), 0)) == PLUS &&
- GET_CODE (XEXP (XEXP (XEXP (mem_addr, 0), 0), 0)) == MULT &&
- GET_CODE (XEXP (XEXP (XEXP (XEXP (mem_addr, 0), 0), 0), 0)) == REG &&
- GET_CODE (XEXP (XEXP (XEXP (XEXP (mem_addr, 0), 0), 0), 1)) == CONST_INT &&
- GET_CODE (XEXP (XEXP (XEXP (mem_addr, 0), 0), 1)) == CONST_INT &&
- GET_CODE (XEXP (XEXP (mem_addr, 0), 1)) == REG &&
- GET_CODE (XEXP (mem_addr, 1)) == SYMBOL_REF)
+ if (GET_CODE (XEXP (XEXP (mem_addr, 0), 0)) == PLUS
+ && GET_CODE (XEXP (XEXP (XEXP (mem_addr, 0), 0), 0)) == MULT
+ && (GET_CODE (XEXP (XEXP (XEXP (XEXP (mem_addr, 0), 0), 0), 0))
+ == REG)
+ && (GET_CODE (XEXP (XEXP (XEXP (XEXP (mem_addr, 0), 0), 0), 1))
+ == CONST_INT)
+ && (GET_CODE (XEXP (XEXP (XEXP (mem_addr, 0), 0), 1))
+ == CONST_INT)
+ && GET_CODE (XEXP (XEXP (mem_addr, 0), 1)) == REG
+ && GET_CODE (XEXP (mem_addr, 1)) == SYMBOL_REF)
{
index_rtx = XEXP (XEXP (XEXP (mem_addr, 0), 0), 0);
offset_rtx = XEXP (mem_addr, 1);
@@ -4218,6 +4440,7 @@ rewrite_address (mem_rtx)
base_rtx = XEXP (XEXP (mem_addr, 0), 1);
}
}
+
else if (GET_CODE (XEXP (mem_addr, 0)) == CONST_INT)
{
was_only_offset = 1;
@@ -4239,222 +4462,137 @@ rewrite_address (mem_rtx)
}
}
else if (GET_CODE (mem_addr) == MULT)
- {
- index_rtx = mem_addr;
- }
+ index_rtx = mem_addr;
else
{
obfree (storage);
return;
}
- if (index_rtx && GET_CODE (index_rtx) == MULT)
+
+ if (index_rtx != 0 && GET_CODE (index_rtx) == MULT)
{
if (GET_CODE (XEXP (index_rtx, 1)) != CONST_INT)
{
obfree (storage);
return;
}
+
scale_rtx = XEXP (index_rtx, 1);
scale = INTVAL (scale_rtx);
index_rtx = copy_all_rtx (XEXP (index_rtx, 0));
}
- /* now find which of the elements are invalid and try to fix them */
+
+ /* Now find which of the elements are invalid and try to fix them. */
if (index_rtx && GET_CODE (index_rtx) == CONST_INT && base_rtx == NULL)
{
offset_adjust = INTVAL (index_rtx) * scale;
- if (offset_rtx && GET_CODE (offset_rtx) == CONST &&
- GET_CODE (XEXP (offset_rtx, 0)) == PLUS)
- {
- if (GET_CODE (XEXP (XEXP (offset_rtx, 0), 0)) == SYMBOL_REF &&
- GET_CODE (XEXP (XEXP (offset_rtx, 0), 1)) == CONST_INT)
- {
- offset_rtx = copy_all_rtx (offset_rtx);
- XEXP (XEXP (offset_rtx, 0), 1) =
- gen_rtx (CONST_INT, 0, INTVAL (XEXP (XEXP (offset_rtx, 0), 1)) + offset_adjust);
- if (!CONSTANT_P (offset_rtx))
- {
- obfree (storage);
- return;
- }
- }
- }
- else if (offset_rtx && GET_CODE (offset_rtx) == SYMBOL_REF)
- {
- offset_rtx =
- gen_rtx (CONST, GET_MODE (offset_rtx),
- gen_rtx (PLUS, GET_MODE (offset_rtx),
- offset_rtx,
- gen_rtx (CONST_INT, 0, offset_adjust)));
- if (!CONSTANT_P (offset_rtx))
- {
- obfree (storage);
- return;
- }
- }
- else if (offset_rtx && GET_CODE (offset_rtx) == CONST_INT)
- {
- offset_rtx = gen_rtx (CONST_INT, 0, INTVAL (offset_rtx) + offset_adjust);
- }
- else if (!offset_rtx)
- {
- offset_rtx = gen_rtx (CONST_INT, 0, 0);
- }
+
+ if (offset_rtx != 0 && CONSTANT_P (offset_rtx))
+ offset_rtx = plus_constant (offset_rtx, offset_adjust);
+ else if (offset_rtx == 0)
+ offset_rtx = const0_rtx;
+
RTX_IS_SPILL_P (XEXP (mem_rtx, 0)) = is_spill_rtx;
XEXP (mem_rtx, 0) = offset_rtx;
return;
}
- if (base_rtx && GET_CODE (base_rtx) == PLUS &&
- GET_CODE (XEXP (base_rtx, 0)) == REG &&
- GET_CODE (XEXP (base_rtx, 1)) == CONST_INT)
+
+ if (base_rtx && GET_CODE (base_rtx) == PLUS
+ && GET_CODE (XEXP (base_rtx, 0)) == REG
+ && GET_CODE (XEXP (base_rtx, 1)) == CONST_INT)
{
offset_adjust += INTVAL (XEXP (base_rtx, 1));
base_rtx = copy_all_rtx (XEXP (base_rtx, 0));
}
+
else if (base_rtx && GET_CODE (base_rtx) == CONST_INT)
{
offset_adjust += INTVAL (base_rtx);
base_rtx = NULL;
}
- if (index_rtx && GET_CODE (index_rtx) == PLUS &&
- GET_CODE (XEXP (index_rtx, 0)) == REG &&
- GET_CODE (XEXP (index_rtx, 1)) == CONST_INT)
+
+ if (index_rtx && GET_CODE (index_rtx) == PLUS
+ && GET_CODE (XEXP (index_rtx, 0)) == REG
+ && GET_CODE (XEXP (index_rtx, 1)) == CONST_INT)
{
offset_adjust += INTVAL (XEXP (index_rtx, 1)) * scale;
index_rtx = copy_all_rtx (XEXP (index_rtx, 0));
}
+
if (index_rtx)
{
- if (!LEGITIMATE_INDEX_P (index_rtx)
- && !(index_rtx == stack_pointer_rtx && scale == 1 && base_rtx == NULL))
+ if (! LEGITIMATE_INDEX_P (index_rtx)
+ && ! (index_rtx == stack_pointer_rtx && scale == 1
+ && base_rtx == NULL))
{
obfree (storage);
return;
}
}
+
if (base_rtx)
{
- if (!LEGITIMATE_INDEX_P (base_rtx) && GET_CODE (base_rtx) != REG)
+ if (! LEGITIMATE_INDEX_P (base_rtx) && GET_CODE (base_rtx) != REG)
{
obfree (storage);
return;
}
}
+
if (offset_adjust != 0)
{
- if (offset_rtx)
- {
- if (GET_CODE (offset_rtx) == CONST &&
- GET_CODE (XEXP (offset_rtx, 0)) == PLUS)
- {
- if (GET_CODE (XEXP (XEXP (offset_rtx, 0), 0)) == SYMBOL_REF &&
- GET_CODE (XEXP (XEXP (offset_rtx, 0), 1)) == CONST_INT)
- {
- offset_rtx = copy_all_rtx (offset_rtx);
- XEXP (XEXP (offset_rtx, 0), 1) =
- gen_rtx (CONST_INT, 0, INTVAL (XEXP (XEXP (offset_rtx, 0), 1)) + offset_adjust);
- if (!CONSTANT_P (offset_rtx))
- {
- obfree (storage);
- return;
- }
- }
- }
- else if (GET_CODE (offset_rtx) == SYMBOL_REF)
- {
- offset_rtx =
- gen_rtx (CONST, GET_MODE (offset_rtx),
- gen_rtx (PLUS, GET_MODE (offset_rtx),
- offset_rtx,
- gen_rtx (CONST_INT, 0, offset_adjust)));
- if (!CONSTANT_P (offset_rtx))
- {
- obfree (storage);
- return;
- }
- }
- else if (GET_CODE (offset_rtx) == CONST_INT)
- {
- offset_rtx = gen_rtx (CONST_INT, 0, INTVAL (offset_rtx) + offset_adjust);
- }
- else
- {
- obfree (storage);
- return;
- }
- }
+ if (offset_rtx != 0 && CONSTANT_P (offset_rtx))
+ offset_rtx = plus_constant (offset_rtx, offset_adjust);
else
- {
- offset_rtx = gen_rtx (CONST_INT, 0, offset_adjust);
- }
+ offset_rtx = const0_rtx;
+
if (index_rtx)
{
if (base_rtx)
{
if (scale != 1)
{
- if (GET_CODE (offset_rtx) == CONST_INT &&
- INTVAL (offset_rtx) == 0)
- {
- ret_rtx = gen_rtx (PLUS, GET_MODE (base_rtx),
- gen_rtx (MULT, GET_MODE (index_rtx), index_rtx,
- scale_rtx),
- base_rtx);
- }
- else
- {
- ret_rtx = gen_rtx (PLUS, GET_MODE (offset_rtx),
- gen_rtx (PLUS, GET_MODE (base_rtx),
- gen_rtx (MULT, GET_MODE (index_rtx), index_rtx,
- scale_rtx),
- base_rtx),
- offset_rtx);
- }
+ ret_rtx = gen_rtx (PLUS, GET_MODE (base_rtx),
+ gen_rtx (MULT, GET_MODE (index_rtx),
+ index_rtx, scale_rtx),
+ base_rtx);
+
+ if (GET_CODE (offset_rtx) != CONST_INT
+ || INTVAL (offset_rtx) != 0)
+ ret_rtx = gen_rtx (PLUS, GET_MODE (ret_rtx),
+ ret_rtx, offset_rtx);
}
else
{
- if (GET_CODE (offset_rtx) == CONST_INT &&
- INTVAL (offset_rtx) == 0)
- {
- ret_rtx = gen_rtx (PLUS, GET_MODE (index_rtx), index_rtx, base_rtx);
- }
- else
- {
- ret_rtx = gen_rtx (PLUS, GET_MODE (offset_rtx),
- gen_rtx (PLUS, GET_MODE (index_rtx), index_rtx,
- base_rtx),
- offset_rtx);
- }
+ ret_rtx = gen_rtx (PLUS, GET_MODE (index_rtx),
+ index_rtx, base_rtx);
+
+ if (GET_CODE (offset_rtx) != CONST_INT
+ || INTVAL (offset_rtx) != 0)
+ ret_rtx = gen_rtx (PLUS, GET_MODE (ret_rtx),
+ ret_rtx, offset_rtx);
}
}
else
{
if (scale != 1)
{
- if (GET_CODE (offset_rtx) == CONST_INT &&
- INTVAL (offset_rtx) == 0)
- {
- ret_rtx = gen_rtx (MULT, GET_MODE (index_rtx), index_rtx, scale_rtx);
- }
- else
- {
- ret_rtx =
- gen_rtx (PLUS, GET_MODE (offset_rtx),
- gen_rtx (MULT, GET_MODE (index_rtx), index_rtx,
- scale_rtx),
- offset_rtx);
- }
+ ret_rtx = gen_rtx (MULT, GET_MODE (index_rtx),
+ index_rtx, scale_rtx);
+
+ if (GET_CODE (offset_rtx) != CONST_INT
+ || INTVAL (offset_rtx) != 0)
+ ret_rtx = gen_rtx (PLUS, GET_MODE (ret_rtx),
+ ret_rtx, offset_rtx);
}
else
{
- if (GET_CODE (offset_rtx) == CONST_INT &&
- INTVAL (offset_rtx) == 0)
- {
- ret_rtx = index_rtx;
- }
+ if (GET_CODE (offset_rtx) == CONST_INT
+ && INTVAL (offset_rtx) == 0)
+ ret_rtx = index_rtx;
else
- {
- ret_rtx = gen_rtx (PLUS, GET_MODE (index_rtx), index_rtx, offset_rtx);
- }
+ ret_rtx = gen_rtx (PLUS, GET_MODE (index_rtx),
+ index_rtx, offset_rtx);
}
}
}
@@ -4462,26 +4600,22 @@ rewrite_address (mem_rtx)
{
if (base_rtx)
{
- if (GET_CODE (offset_rtx) == CONST_INT &&
- INTVAL (offset_rtx) == 0)
- {
- ret_rtx = base_rtx;
- }
+ if (GET_CODE (offset_rtx) == CONST_INT
+ && INTVAL (offset_rtx) == 0)
+ ret_rtx = base_rtx;
else
- {
- ret_rtx = gen_rtx (PLUS, GET_MODE (base_rtx), base_rtx, offset_rtx);
- }
+ ret_rtx = gen_rtx (PLUS, GET_MODE (base_rtx), base_rtx,
+ offset_rtx);
}
else if (was_only_offset)
- {
- ret_rtx = offset_rtx;
- }
+ ret_rtx = offset_rtx;
else
{
obfree (storage);
return;
}
}
+
XEXP (mem_rtx, 0) = ret_rtx;
RTX_IS_SPILL_P (XEXP (mem_rtx, 0)) = is_spill_rtx;
return;
@@ -4493,10 +4627,9 @@ rewrite_address (mem_rtx)
}
}
#endif /* NOTYET */
-
-/* return 1 if the first insn to set cc before insn also sets the register
- reg_rtx - otherwise return 0 */
+/* Return 1 if the first insn to set cc before INSN also sets the register
+ REG_RTX; otherwise return 0. */
int
last_to_set_cc (reg_rtx, insn)
rtx reg_rtx, insn;
@@ -4521,7 +4654,7 @@ last_to_set_cc (reg_rtx, insn)
return (0);
}
- else if (!doesnt_set_condition_code (SET_SRC (PATTERN (prev_insn))))
+ else if (! doesnt_set_condition_code (SET_SRC (PATTERN (prev_insn))))
return (0);
}
@@ -4533,7 +4666,6 @@ last_to_set_cc (reg_rtx, insn)
return (0);
}
-
int
doesnt_set_condition_code (pat)
@@ -4543,14 +4675,13 @@ doesnt_set_condition_code (pat)
{
case MEM:
case REG:
- return (1);
+ return 1;
default:
- return (0);
+ return 0;
}
}
-
int
sets_condition_code (pat)
@@ -4570,14 +4701,12 @@ sets_condition_code (pat)
case MOD:
case UDIV:
case UMOD:
- return (1);
+ return 1;
default:
return (0);
-
}
}
-
int
str_immediate_operand (op, mode)
@@ -4585,12 +4714,10 @@ str_immediate_operand (op, mode)
enum machine_mode mode;
{
if (GET_CODE (op) == CONST_INT && INTVAL (op) <= 32 && INTVAL (op) >= 0)
- {
- return (1);
- }
- return (0);
-}
+ return 1;
+ return 0;
+}
int
is_fp_insn (insn)
@@ -4600,17 +4727,15 @@ is_fp_insn (insn)
&& (GET_MODE (SET_DEST (PATTERN (insn))) == DFmode
|| GET_MODE (SET_DEST (PATTERN (insn))) == SFmode
|| GET_MODE (SET_DEST (PATTERN (insn))) == XFmode))
- {
- return (1);
- }
+ return 1;
- return (0);
+ return 0;
}
-/*
- Return 1 if the mode of the SET_DEST of insn is floating point
- and it is not an fld or a move from memory to memory.
- Otherwise return 0 */
+/* Return 1 if the mode of the SET_DEST of insn is floating point
+ and it is not an fld or a move from memory to memory.
+ Otherwise return 0 */
+
int
is_fp_dest (insn)
rtx insn;
@@ -4622,17 +4747,14 @@ is_fp_dest (insn)
&& GET_CODE (SET_DEST (PATTERN (insn))) == REG
&& REGNO (SET_DEST (PATTERN (insn))) >= FIRST_FLOAT_REG
&& GET_CODE (SET_SRC (insn)) != MEM)
- {
- return (1);
- }
+ return 1;
- return (0);
+ return 0;
}
-/*
- Return 1 if the mode of the SET_DEST floating point and is memory
- and the source is a register.
-*/
+/* Return 1 if the mode of the SET_DEST of INSN is floating point and is
+ memory and the source is a register. */
+
int
is_fp_store (insn)
rtx insn;
@@ -4643,18 +4765,14 @@ is_fp_store (insn)
|| GET_MODE (SET_DEST (PATTERN (insn))) == XFmode)
&& GET_CODE (SET_DEST (PATTERN (insn))) == MEM
&& GET_CODE (SET_SRC (PATTERN (insn))) == REG)
- {
- return (1);
- }
+ return 1;
- return (0);
+ return 0;
}
-
-/*
- Return 1 if dep_insn sets a register which insn uses as a base
- or index to reference memory.
- otherwise return 0 */
+/* Return 1 if DEP_INSN sets a register which INSN uses as a base
+ or index to reference memory.
+ otherwise return 0 */
int
agi_dependent (insn, dep_insn)
@@ -4663,36 +4781,30 @@ agi_dependent (insn, dep_insn)
if (GET_CODE (dep_insn) == INSN
&& GET_CODE (PATTERN (dep_insn)) == SET
&& GET_CODE (SET_DEST (PATTERN (dep_insn))) == REG)
- {
- return (reg_mentioned_in_mem (SET_DEST (PATTERN (dep_insn)), insn));
- }
+ return reg_mentioned_in_mem (SET_DEST (PATTERN (dep_insn)), insn);
if (GET_CODE (dep_insn) == INSN && GET_CODE (PATTERN (dep_insn)) == SET
&& GET_CODE (SET_DEST (PATTERN (dep_insn))) == MEM
&& push_operand (SET_DEST (PATTERN (dep_insn)),
GET_MODE (SET_DEST (PATTERN (dep_insn)))))
- {
- return (reg_mentioned_in_mem (stack_pointer_rtx, insn));
- }
-
- return (0);
-}
+ return reg_mentioned_in_mem (stack_pointer_rtx, insn);
+ return 0;
+}
-/*
- Return 1 if reg is used in rtl as a base or index for a memory ref
- otherwise return 0. */
+/* Return 1 if reg is used in rtl as a base or index for a memory ref
+ otherwise return 0. */
int
reg_mentioned_in_mem (reg, rtl)
rtx reg, rtl;
{
register char *fmt;
- register int i;
+ register int i, j;
register enum rtx_code code;
if (rtl == NULL)
- return (0);
+ return 0;
code = GET_CODE (rtl);
@@ -4707,35 +4819,28 @@ reg_mentioned_in_mem (reg, rtl)
case PC:
case CC0:
case SUBREG:
- return (0);
-
-
+ return 0;
}
if (code == MEM && reg_mentioned_p (reg, rtl))
- return (1);
+ return 1;
fmt = GET_RTX_FORMAT (code);
for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
{
if (fmt[i] == 'E')
- {
- register int j;
- for (j = XVECLEN (rtl, i) - 1; j >= 0; j--)
- {
- if (reg_mentioned_in_mem (reg, XVECEXP (rtl, i, j)))
- return 1;
- }
- }
+ for (j = XVECLEN (rtl, i) - 1; j >= 0; j--)
+ if (reg_mentioned_in_mem (reg, XVECEXP (rtl, i, j)))
+ return 1;
else if (fmt[i] == 'e' && reg_mentioned_in_mem (reg, XEXP (rtl, i)))
return 1;
}
- return (0);
+ return 0;
}
-/* Output the approprate insns for doing strlen if not just doing repnz; scasb
+/* Output the appropriate insns for doing strlen if not just doing repnz; scasb
operands[0] = result, initialized with the startaddress
operands[1] = alignment of the address.
@@ -4761,8 +4866,10 @@ output_strlen_unroll (operands)
/* xops[6] = gen_label_rtx (); * label when aligned to 3-byte */
/* xops[7] = gen_label_rtx (); * label when aligned to 2-byte */
xops[8] = gen_label_rtx (); /* label of main loop */
- if(TARGET_USE_Q_REG && QI_REG_P (xops[1]))
+
+ if (TARGET_USE_Q_REG && QI_REG_P (xops[1]))
xops[9] = gen_label_rtx (); /* pentium optimisation */
+
xops[10] = gen_label_rtx (); /* end label 2 */
xops[11] = gen_label_rtx (); /* end label 1 */
xops[12] = gen_label_rtx (); /* end label */
@@ -4772,65 +4879,74 @@ output_strlen_unroll (operands)
xops[16] = GEN_INT (0xff0000);
xops[17] = GEN_INT (0xff000000);
- /* Loop to check 1..3 bytes for null to get an aligned pointer */
+ /* Loop to check 1..3 bytes for null to get an aligned pointer. */
- /* is there a known alignment and is it less then 4 */
+ /* Is there a known alignment and is it less than 4? */
if (GET_CODE (operands[1]) != CONST_INT || INTVAL (operands[1]) < 4)
{
- /* is there a known alignment and is it not 2 */
+ /* Is there a known alignment and is it not 2? */
if (GET_CODE (operands[1]) != CONST_INT || INTVAL (operands[1]) != 2)
{
- xops[6] = gen_label_rtx (); /* label when aligned to 3-byte */
- xops[7] = gen_label_rtx (); /* label when aligned to 2-byte */
+ xops[6] = gen_label_rtx (); /* Label when aligned to 3-byte */
+ xops[7] = gen_label_rtx (); /* Label when aligned to 2-byte */
- /* leave just the 3 lower bits */
- /* if this is a q-register, then the high part is used later */
- /* therefore user andl rather than andb */
+ /* Leave just the 3 lower bits.
+ If this is a q-register, then the high part is used later
+ therefore use andl rather than andb. */
output_asm_insn (AS2 (and%L1,%4,%1), xops);
- /* is aligned to 4-byte adress when zero */
+
+ /* Is aligned to 4-byte address when zero */
output_asm_insn (AS1 (je,%l8), xops);
- /* side-effect even Parity when %eax == 3 */
+
+ /* Side-effect even Parity when %eax == 3 */
output_asm_insn (AS1 (jp,%6), xops);
- /* is it aligned to 2 bytes ? */
+ /* Is it aligned to 2 bytes ? */
if (QI_REG_P (xops[1]))
output_asm_insn (AS2 (cmp%L1,%3,%1), xops);
else
output_asm_insn (AS2 (cmp%L1,%3,%1), xops);
+
output_asm_insn (AS1 (je,%7), xops);
}
else
{
- /* since the alignment is 2, we have to check 2 or 0 bytes */
-
- /* check if is aligned to 4 - byte */
+ /* Since the alignment is 2, we have to check 2 or 0 bytes;
+ check if is aligned to 4 - byte. */
output_asm_insn (AS2 (and%L1,%3,%1), xops);
- /* is aligned to 4-byte adress when zero */
+
+ /* Is aligned to 4-byte address when zero */
output_asm_insn (AS1 (je,%l8), xops);
}
xops[13] = gen_rtx (MEM, QImode, xops[0]);
- /* now, compare the bytes */
- /* compare with the high part of a q-reg gives shorter code */
+
+ /* Now compare the bytes; compare with the high part of a q-reg
+ gives shorter code. */
if (QI_REG_P (xops[1]))
{
- /* compare the first n unaligned byte on a byte per byte basis */
+ /* Compare the first n unaligned byte on a byte per byte basis. */
output_asm_insn (AS2 (cmp%B1,%h1,%13), xops);
- /* when zero we reached the end */
+
+ /* When zero we reached the end. */
output_asm_insn (AS1 (je,%l12), xops);
- /* increment the address */
+
+ /* Increment the address. */
output_asm_insn (AS1 (inc%L0,%0), xops);
- /* not needed with an alignment of 2 */
+ /* Not needed with an alignment of 2 */
if (GET_CODE (operands[1]) != CONST_INT || INTVAL (operands[1]) != 2)
{
- ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L", CODE_LABEL_NUMBER (xops[7]));
+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L",
+ CODE_LABEL_NUMBER (xops[7]));
output_asm_insn (AS2 (cmp%B1,%h1,%13), xops);
output_asm_insn (AS1 (je,%l12), xops);
output_asm_insn (AS1 (inc%L0,%0), xops);
- ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L", CODE_LABEL_NUMBER (xops[6]));
+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L",
+ CODE_LABEL_NUMBER (xops[6]));
}
+
output_asm_insn (AS2 (cmp%B1,%h1,%13), xops);
}
else
@@ -4839,22 +4955,24 @@ output_strlen_unroll (operands)
output_asm_insn (AS1 (je,%l12), xops);
output_asm_insn (AS1 (inc%L0,%0), xops);
- ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L", CODE_LABEL_NUMBER (xops[7]));
+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L",
+ CODE_LABEL_NUMBER (xops[7]));
output_asm_insn (AS2 (cmp%B13,%2,%13), xops);
output_asm_insn (AS1 (je,%l12), xops);
output_asm_insn (AS1 (inc%L0,%0), xops);
- ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L", CODE_LABEL_NUMBER (xops[6]));
+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L",
+ CODE_LABEL_NUMBER (xops[6]));
output_asm_insn (AS2 (cmp%B13,%2,%13), xops);
}
+
output_asm_insn (AS1 (je,%l12), xops);
output_asm_insn (AS1 (inc%L0,%0), xops);
}
- /* Generate loop to check 4 bytes at a time */
- /* IMHO it is not a good idea to align this loop. It gives only */
- /* huge programs, but does not help to speed up */
- /* ASM_OUTPUT_LOOP_ALIGN (asm_out_file); */
+ /* Generate loop to check 4 bytes at a time. It is not a good idea to
+ align this loop. It gives only huge programs, but does not help to
+ speed up. */
ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L", CODE_LABEL_NUMBER (xops[8]));
xops[13] = gen_rtx (MEM, SImode, xops[0]);
@@ -4867,44 +4985,46 @@ output_strlen_unroll (operands)
of both *could* be zero, otherwise none of both is zero;
this saves one instruction, on i486 this is slower
tested with P-90, i486DX2-66, AMD486DX2-66 */
- if(TARGET_PENTIUM)
+ if (TARGET_PENTIUM)
{
output_asm_insn (AS2 (test%B1,%h1,%b1), xops);
output_asm_insn (AS1 (jne,%l9), xops);
}
- /* check first byte */
+ /* Check first byte. */
output_asm_insn (AS2 (test%B1,%b1,%b1), xops);
output_asm_insn (AS1 (je,%l12), xops);
- /* check second byte */
+ /* Check second byte. */
output_asm_insn (AS2 (test%B1,%h1,%h1), xops);
output_asm_insn (AS1 (je,%l11), xops);
- if(TARGET_PENTIUM)
- ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L", CODE_LABEL_NUMBER (xops[9]));
+ if (TARGET_PENTIUM)
+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L",
+ CODE_LABEL_NUMBER (xops[9]));
}
+
else
{
- /* check first byte */
+ /* Check first byte. */
output_asm_insn (AS2 (test%L1,%14,%1), xops);
output_asm_insn (AS1 (je,%l12), xops);
- /* check second byte */
+ /* Check second byte. */
output_asm_insn (AS2 (test%L1,%15,%1), xops);
output_asm_insn (AS1 (je,%l11), xops);
}
- /* check third byte */
+ /* Check third byte. */
output_asm_insn (AS2 (test%L1,%16,%1), xops);
output_asm_insn (AS1 (je,%l10), xops);
- /* check fourth byte and increment address */
+ /* Check fourth byte and increment address. */
output_asm_insn (AS2 (add%L0,%5,%0), xops);
output_asm_insn (AS2 (test%L1,%17,%1), xops);
output_asm_insn (AS1 (jne,%l8), xops);
- /* now generate fixups when the compare stops within a 4-byte word */
+ /* Now generate fixups when the compare stops within a 4-byte word. */
output_asm_insn (AS2 (sub%L0,%4,%0), xops);
ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L", CODE_LABEL_NUMBER (xops[10]));
@@ -4915,5 +5035,5 @@ output_strlen_unroll (operands)
ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L", CODE_LABEL_NUMBER (xops[12]));
- RET;
+ return "";
}
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index 8056af7e0e3..bd90ab1844d 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler for Intel X86
(386, 486, Pentium).
- Copyright (C) 1988, 92, 94, 95, 96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1988, 92, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -207,6 +207,8 @@ extern int target_flags;
{ "no-debug-arg", -MASK_DEBUG_ARG }, \
{ "stack-arg-probe", MASK_STACK_PROBE }, \
{ "no-stack-arg-probe", -MASK_STACK_PROBE }, \
+ { "windows", 0 }, \
+ { "dll", 0 }, \
SUBTARGET_SWITCHES \
{ "", MASK_SCHEDULE_PROLOGUE | TARGET_DEFAULT}}
@@ -306,12 +308,16 @@ extern int ix86_arch;
#ifdef __STDC__
#if TARGET_CPU_DEFAULT == 1
#define CPP_CPU_DEFAULT "-Di486"
-#elif TARGET_CPU_DEFAULT == 2
+#else
+#if TARGET_CPU_DEFAULT == 2
#define CPP_CPU_DEFAULT "-Di586"
-#elif TARGET_CPU_DEFAULT == 3
+#else
+#if TARGET_CPU_DEFAULT == 3
#define CPP_CPU_DEFAULT "-Di686"
#else
#define CPP_CPU_DEFAULT ""
+#endif
+#endif
#endif /* TARGET_CPU_DEFAULT */
#define CPP_CPU_SPEC "\
@@ -1512,8 +1518,9 @@ do { \
\
for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) \
if ((regs_ever_live[regno] && ! call_used_regs[regno]) \
- || (current_function_uses_pic_offset_table \
- && regno == PIC_OFFSET_TABLE_REGNUM)) \
+ || ((current_function_uses_pic_offset_table \
+ || current_function_uses_const_pool) \
+ && flag_pic && regno == PIC_OFFSET_TABLE_REGNUM)) \
offset += 4; \
\
(OFFSET) = offset + get_frame_size (); \
@@ -2360,6 +2367,12 @@ number as al, and ax.
#define INCOMING_RETURN_ADDR_RTX \
gen_rtx (MEM, VOIDmode, gen_rtx (REG, VOIDmode, STACK_POINTER_REGNUM))
+/* After the prologue, RA is at -4(AP) in the current frame. */
+#define RETURN_ADDR_RTX(COUNT, FRAME) \
+ ((COUNT) == 0 \
+ ? gen_rtx (MEM, Pmode, gen_rtx (PLUS, Pmode, arg_pointer_rtx, GEN_INT(-4)))\
+ : gen_rtx (MEM, Pmode, gen_rtx (PLUS, Pmode, (FRAME), GEN_INT(4))))
+
/* PC is dbx register 8; let's use that column for RA. */
#define DWARF_FRAME_RETURN_COLUMN 8
@@ -2610,7 +2623,6 @@ extern char *qi_high_reg_name[];
we can use for operand syntax in the extended asm */
#define ASM_OPERAND_LETTER '#'
-
#define RET return ""
#define AT_SP(mode) (gen_rtx (MEM, (mode), stack_pointer_rtx))
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index e3deee53c41..b08e68d2323 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -1,5 +1,5 @@
-;; GCC machine description for Intel X86.
-;; Copyright (C) 1988, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
+; GCC machine description for Intel X86.
+;; Copyright (C) 1988, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
;; Mostly by William Schelter.
;; This file is part of GNU CC.
@@ -60,6 +60,9 @@
;; operand 0 is the argument for `cos'.
;; 3 This is part of a `stack probe' operation. The mode of the UNSPEC is
;; always SImode. operand 0 is the size of the stack allocation.
+;; 4 This is the source of a fake SET of the frame pointer which is used to
+;; prevent insns referencing it being scheduled across the initial
+;; decrement of the stack pointer.
;; This shadows the processor_type enumeration, so changes must be made
;; to i386.h at the same time.
@@ -1316,7 +1319,7 @@
if (STACK_TOP_P (operands[1]) && NON_STACK_REG_P (operands[0]))
{
- output_to_reg (operands[0], stack_top_dies);
+ output_to_reg (operands[0], stack_top_dies, 0);
RET;
}
@@ -1502,7 +1505,7 @@
if (STACK_TOP_P (operands[1]) && NON_STACK_REG_P (operands[0]))
{
- output_to_reg (operands[0], stack_top_dies);
+ output_to_reg (operands[0], stack_top_dies, 0);
RET;
}
@@ -1686,7 +1689,7 @@
if (STACK_TOP_P (operands[1]) && NON_STACK_REG_P (operands[0]))
{
- output_to_reg (operands[0], stack_top_dies);
+ output_to_reg (operands[0], stack_top_dies, 0);
RET;
}
@@ -2186,7 +2189,7 @@
if (NON_STACK_REG_P (operands[0]))
{
- output_to_reg (operands[0], stack_top_dies);
+ output_to_reg (operands[0], stack_top_dies, 0);
RET;
}
@@ -2221,7 +2224,7 @@
if (NON_STACK_REG_P (operands[0]))
{
- output_to_reg (operands[0], stack_top_dies);
+ output_to_reg (operands[0], stack_top_dies, 0);
RET;
}
@@ -2256,7 +2259,7 @@
if (NON_STACK_REG_P (operands[0]))
{
- output_to_reg (operands[0], stack_top_dies);
+ output_to_reg (operands[0], stack_top_dies, 0);
RET;
}
@@ -2332,7 +2335,7 @@
output_asm_insn (AS1 (fld,%y1), operands);
stack_top_dies = 1;
}
- output_to_reg (operands[0], stack_top_dies);
+ output_to_reg (operands[0], stack_top_dies, 0);
RET;
}
else if (GET_CODE (operands[0]) == MEM)
@@ -2365,7 +2368,7 @@
output_asm_insn (AS1 (fld,%y1), operands);
stack_top_dies = 1;
}
- output_to_reg (operands[0], stack_top_dies);
+ output_to_reg (operands[0], stack_top_dies, 0);
RET;
}
else if (GET_CODE (operands[0]) == MEM)
@@ -2407,7 +2410,7 @@
operands[3] = gen_lowpart (SImode, operands[2]);
operands[4] = gen_reg_rtx (XFmode);
operands[5] = (rtx) assign_386_stack_local (SImode, 0);
- operands[6] = (rtx) assign_386_stack_local (SImode, 1);
+ operands[6] = (rtx) assign_386_stack_local (DImode, 1);
}")
(define_expand "fixuns_truncdfsi2"
@@ -2428,7 +2431,7 @@
operands[3] = gen_lowpart (SImode, operands[2]);
operands[4] = gen_reg_rtx (DFmode);
operands[5] = (rtx) assign_386_stack_local (SImode, 0);
- operands[6] = (rtx) assign_386_stack_local (SImode, 1);
+ operands[6] = (rtx) assign_386_stack_local (DImode, 1);
}")
(define_expand "fixuns_truncsfsi2"
@@ -2449,7 +2452,7 @@
operands[3] = gen_lowpart (SImode, operands[2]);
operands[4] = gen_reg_rtx (SFmode);
operands[5] = (rtx) assign_386_stack_local (SImode, 0);
- operands[6] = (rtx) assign_386_stack_local (SImode, 1);
+ operands[6] = (rtx) assign_386_stack_local (DImode, 1);
}")
;; Signed conversion to DImode.
@@ -2469,7 +2472,7 @@
operands[1] = copy_to_mode_reg (XFmode, operands[1]);
operands[2] = gen_reg_rtx (XFmode);
operands[3] = (rtx) assign_386_stack_local (SImode, 0);
- operands[4] = (rtx) assign_386_stack_local (SImode, 1);
+ operands[4] = (rtx) assign_386_stack_local (DImode, 1);
}")
(define_expand "fix_truncdfdi2"
@@ -2487,7 +2490,7 @@
operands[1] = copy_to_mode_reg (DFmode, operands[1]);
operands[2] = gen_reg_rtx (DFmode);
operands[3] = (rtx) assign_386_stack_local (SImode, 0);
- operands[4] = (rtx) assign_386_stack_local (SImode, 1);
+ operands[4] = (rtx) assign_386_stack_local (DImode, 1);
}")
(define_expand "fix_truncsfdi2"
@@ -2505,7 +2508,7 @@
operands[1] = copy_to_mode_reg (SFmode, operands[1]);
operands[2] = gen_reg_rtx (SFmode);
operands[3] = (rtx) assign_386_stack_local (SImode, 0);
- operands[4] = (rtx) assign_386_stack_local (SImode, 1);
+ operands[4] = (rtx) assign_386_stack_local (DImode, 1);
}")
;; These match a signed conversion of either DFmode or SFmode to DImode.
@@ -2515,7 +2518,7 @@
(fix:DI (fix:XF (match_operand:XF 1 "register_operand" "f"))))
(clobber (match_dup 1))
(clobber (match_operand:SI 2 "memory_operand" "m"))
- (clobber (match_operand:SI 3 "memory_operand" "m"))
+ (clobber (match_operand:DI 3 "memory_operand" "m"))
(clobber (match_scratch:SI 4 "=&q"))]
"TARGET_80387"
"* return output_fix_trunc (insn, operands);")
@@ -2525,7 +2528,7 @@
(fix:DI (fix:DF (match_operand:DF 1 "register_operand" "f"))))
(clobber (match_dup 1))
(clobber (match_operand:SI 2 "memory_operand" "m"))
- (clobber (match_operand:SI 3 "memory_operand" "m"))
+ (clobber (match_operand:DI 3 "memory_operand" "m"))
(clobber (match_scratch:SI 4 "=&q"))]
"TARGET_80387"
"* return output_fix_trunc (insn, operands);")
@@ -2535,7 +2538,7 @@
(fix:DI (fix:SF (match_operand:SF 1 "register_operand" "f"))))
(clobber (match_dup 1))
(clobber (match_operand:SI 2 "memory_operand" "m"))
- (clobber (match_operand:SI 3 "memory_operand" "m"))
+ (clobber (match_operand:DI 3 "memory_operand" "m"))
(clobber (match_scratch:SI 4 "=&q"))]
"TARGET_80387"
"* return output_fix_trunc (insn, operands);")
@@ -2553,7 +2556,7 @@
"
{
operands[2] = (rtx) assign_386_stack_local (SImode, 0);
- operands[3] = (rtx) assign_386_stack_local (SImode, 1);
+ operands[3] = (rtx) assign_386_stack_local (DImode, 1);
}")
(define_expand "fix_truncdfsi2"
@@ -2567,7 +2570,7 @@
"
{
operands[2] = (rtx) assign_386_stack_local (SImode, 0);
- operands[3] = (rtx) assign_386_stack_local (SImode, 1);
+ operands[3] = (rtx) assign_386_stack_local (DImode, 1);
}")
(define_expand "fix_truncsfsi2"
@@ -2581,14 +2584,14 @@
"
{
operands[2] = (rtx) assign_386_stack_local (SImode, 0);
- operands[3] = (rtx) assign_386_stack_local (SImode, 1);
+ operands[3] = (rtx) assign_386_stack_local (DImode, 1);
}")
(define_insn ""
[(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(fix:SI (fix:XF (match_operand:XF 1 "register_operand" "f"))))
(clobber (match_operand:SI 2 "memory_operand" "m"))
- (clobber (match_operand:SI 3 "memory_operand" "m"))
+ (clobber (match_operand:DI 3 "memory_operand" "m"))
(clobber (match_scratch:SI 4 "=&q"))]
"TARGET_80387"
"* return output_fix_trunc (insn, operands);")
@@ -2597,7 +2600,7 @@
[(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(fix:SI (fix:DF (match_operand:DF 1 "register_operand" "f"))))
(clobber (match_operand:SI 2 "memory_operand" "m"))
- (clobber (match_operand:SI 3 "memory_operand" "m"))
+ (clobber (match_operand:DI 3 "memory_operand" "m"))
(clobber (match_scratch:SI 4 "=&q"))]
"TARGET_80387"
"* return output_fix_trunc (insn, operands);")
@@ -2606,7 +2609,7 @@
[(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(fix:SI (fix:SF (match_operand:SF 1 "register_operand" "f"))))
(clobber (match_operand:SI 2 "memory_operand" "m"))
- (clobber (match_operand:SI 3 "memory_operand" "m"))
+ (clobber (match_operand:DI 3 "memory_operand" "m"))
(clobber (match_scratch:SI 4 "=&q"))]
"TARGET_80387"
"* return output_fix_trunc (insn, operands);")
@@ -6492,11 +6495,30 @@ byte_xor_operation:
DONE;
}")
+;; The use of UNSPEC here is currently not necessary - a simple SET of ebp
+;; to itself would be enough. But this way we are safe even if some optimizer
+;; becomes too clever in the future.
+(define_insn "prologue_set_stack_ptr"
+ [(set (reg:SI 7)
+ (minus:SI (reg:SI 7) (match_operand:SI 0 "immediate_operand" "i")))
+ (set (reg:SI 6) (unspec:SI [(reg:SI 6)] 4))]
+ ""
+ "*
+{
+ rtx xops [2];
+
+ xops[0] = operands[0];
+ xops[1] = stack_pointer_rtx;
+ output_asm_insn (AS2 (sub%L1,%0,%1), xops);
+ RET;
+}")
+
(define_insn "prologue_set_got"
[(set (match_operand:SI 0 "" "")
- (plus:SI (match_dup 0)
- (plus:SI (match_operand:SI 1 "symbolic_operand" "")
- (minus:SI (pc) (match_operand 2 "" "")))))]
+ (unspec_volatile
+ [(plus:SI (match_dup 0)
+ (plus:SI (match_operand:SI 1 "symbolic_operand" "")
+ (minus:SI (pc) (match_operand 2 "" ""))))] 1))]
""
"*
{
@@ -6509,7 +6531,7 @@ byte_xor_operation:
}
else
{
- sprintf (buffer, \"addl %s+[.-.L%d],%%0\", XSTR (operands[1], 0), INTVAL (operands[2]));
+ sprintf (buffer, \"addl %s+[.-%%P2],%%0\", XSTR (operands[1], 0));
output_asm_insn (buffer, operands);
}
RET;
@@ -6517,7 +6539,7 @@ byte_xor_operation:
(define_insn "prologue_get_pc"
[(set (match_operand:SI 0 "" "")
- (plus:SI (pc) (match_operand 1 "" "")))]
+ (unspec_volatile [(plus:SI (pc) (match_operand 1 "" ""))] 2))]
""
"*
{
@@ -6526,11 +6548,25 @@ byte_xor_operation:
output_asm_insn (AS1 (call,%P1), operands);
if (! TARGET_DEEP_BRANCH_PREDICTION)
{
- ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", INTVAL (operands[1]));
+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (operands[1]));
}
RET;
}")
+(define_insn "prologue_get_pc_and_set_got"
+ [(unspec_volatile [(match_operand:SI 0 "" "")] 3)]
+ ""
+ "*
+{
+ operands[1] = gen_label_rtx ();
+ output_asm_insn (AS1 (call,%P1), operands);
+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\",
+ CODE_LABEL_NUMBER (operands[1]));
+ output_asm_insn (AS1 (pop%L0,%0), operands);
+ output_asm_insn (\"addl $_GLOBAL_OFFSET_TABLE_+[.-%P1],%0\", operands);
+ RET;
+}")
+
(define_expand "epilogue"
[(const_int 1)]
""
@@ -6564,7 +6600,7 @@ byte_xor_operation:
(define_insn "pop"
[(set (match_operand:SI 0 "register_operand" "r")
(mem:SI (reg:SI 7)))
- (set (reg:SI 7) (minus:SI (reg:SI 7) (const_int 4)))]
+ (set (reg:SI 7) (plus:SI (reg:SI 7) (const_int 4)))]
""
"*
{
@@ -6594,8 +6630,8 @@ byte_xor_operation:
operands[5] = addr0;
operands[6] = addr1;
- operands[0] = gen_rtx (MEM, BLKmode, addr0);
- operands[1] = gen_rtx (MEM, BLKmode, addr1);
+ operands[0] = change_address (operands[0], VOIDmode, addr0);
+ operands[1] = change_address (operands[1], VOIDmode, addr1);
}")
;; It might seem that operands 0 & 1 could use predicate register_operand.
@@ -7217,11 +7253,10 @@ byte_xor_operation:
(define_expand "movsicc"
[(match_dup 4)
- (parallel [(set (match_operand 0 "register_operand" "")
+ (set (match_operand 0 "register_operand" "")
(if_then_else:SI (match_operand 1 "comparison_operator" "")
- (match_operand:SI 2 "general_operand" "")
- (match_operand:SI 3 "general_operand" "")))
- (clobber (match_scratch:SI 4 "=&r"))])]
+ (match_operand:SI 2 "nonimmediate_operand" "")
+ (match_operand:SI 3 "nonimmediate_operand" "")))]
"TARGET_CMOVE"
"
{
@@ -7230,11 +7265,10 @@ byte_xor_operation:
(define_expand "movhicc"
[(match_dup 4)
- (parallel [(set (match_operand 0 "register_operand" "")
+ (set (match_operand 0 "register_operand" "")
(if_then_else:HI (match_operand 1 "comparison_operator" "")
- (match_operand:HI 2 "general_operand" "")
- (match_operand:HI 3 "general_operand" "")))
- (clobber (match_scratch:SI 4 "=&r"))])]
+ (match_operand:HI 2 "nonimmediate_operand" "")
+ (match_operand:HI 3 "nonimmediate_operand" "")))]
"TARGET_CMOVE"
"
{
@@ -7242,120 +7276,78 @@ byte_xor_operation:
}")
(define_insn "movsicc_1"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,&r,rm")
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,&r")
(if_then_else:SI (match_operator 1 "comparison_operator"
- [(cc0) (const_int 0)])
- (match_operand:SI 2 "general_operand" "rm,0,rm,g")
- (match_operand:SI 3 "general_operand" "0,rm,rm,g")))
- (clobber (match_scratch:SI 4 "X,X,X,=&r"))]
+ [(cc0) (const_int 0)])
+ (match_operand:SI 2 "nonimmediate_operand" "rm,0,rm")
+ (match_operand:SI 3 "nonimmediate_operand" "0,rm,rm")))]
"TARGET_CMOVE"
"*
{
- if (which_alternative == 0)
+ switch (which_alternative)
{
+ case 0:
/* r <- cond ? arg : r */
output_asm_insn (AS2 (cmov%C1,%2,%0), operands);
- }
- else if (which_alternative == 1)
- {
+ break;
+
+ case 1:
/* r <- cond ? r : arg */
output_asm_insn (AS2 (cmov%c1,%3,%0), operands);
- }
- else if (which_alternative == 2)
- {
+ break;
+
+ case 2:
/* r <- cond ? arg1 : arg2 */
output_asm_insn (AS2 (cmov%C1,%2,%0), operands);
output_asm_insn (AS2 (cmov%c1,%3,%0), operands);
+ break;
}
- else if (which_alternative == 3)
- {
- /* r <- cond ? arg1 : arg2 */
- operands[5] = gen_label_rtx ();
- if (! rtx_equal_p (operands[0], operands[2]))
- if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[2]) == MEM)
- {
- output_asm_insn (AS2 (mov%z2,%2,%4), operands);
- output_asm_insn (AS2 (mov%z2,%4,%0), operands);
- }
- else
- output_asm_insn (AS2 (mov%z0,%2,%0), operands);
- if (! rtx_equal_p (operands[0], operands[3]))
- {
- output_asm_insn (\"j%C1 %l5\", operands);
- if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[3]) == MEM)
- {
- output_asm_insn (AS2 (mov%z2,%3,%4), operands);
- output_asm_insn (AS2 (mov%z2,%4,%0), operands);
- }
- else
- output_asm_insn (AS2 (mov%z0,%3,%0), operands);
- ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (operands[5]));
- }
- }
+
RET;
}")
(define_insn "movhicc_1"
- [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,&r,rm")
+ [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,&r")
(if_then_else:HI (match_operator 1 "comparison_operator"
- [(cc0) (const_int 0)])
- (match_operand:HI 2 "general_operand" "rm,0,rm,g")
- (match_operand:HI 3 "general_operand" "0,rm,rm,g")))
- (clobber (match_scratch:SI 4 "X,X,X,=&r"))]
+ [(cc0) (const_int 0)])
+ (match_operand:HI 2 "nonimmediate_operand" "rm,0,rm")
+ (match_operand:HI 3 "nonimmediate_operand" "0,rm,rm")))]
"TARGET_CMOVE"
"*
{
- if (which_alternative == 0)
+ switch (which_alternative)
{
+ case 0:
/* r <- cond ? arg : r */
output_asm_insn (AS2 (cmov%C1,%2,%0), operands);
- }
- else if (which_alternative == 1)
- {
+ break;
+
+ case 1:
/* r <- cond ? r : arg */
output_asm_insn (AS2 (cmov%c1,%3,%0), operands);
- }
- else if (which_alternative == 2)
- {
+ break;
+
+ case 2:
/* r <- cond ? arg1 : arg2 */
output_asm_insn (AS2 (cmov%C1,%2,%0), operands);
output_asm_insn (AS2 (cmov%c1,%3,%0), operands);
+ break;
}
- else if (which_alternative == 3)
- {
- /* r <- cond ? arg1 : arg2 */
- operands[5] = gen_label_rtx ();
- if (! rtx_equal_p (operands[0], operands[2]))
- if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[2]) == MEM)
- {
- output_asm_insn (AS2 (mov%z2,%2,%4), operands);
- output_asm_insn (AS2 (mov%z2,%4,%0), operands);
- }
- else
- output_asm_insn (AS2 (mov%z0,%2,%0), operands);
- if (! rtx_equal_p (operands[0], operands[3]))
- {
- output_asm_insn (\"j%C1 %l5\", operands);
- if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[3]) == MEM)
- {
- output_asm_insn (AS2 (mov%z2,%3,%4), operands);
- output_asm_insn (AS2 (mov%z2,%4,%0), operands);
- }
- else
- output_asm_insn (AS2 (mov%z0,%3,%0), operands);
- ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (operands[5]));
- }
- }
+
RET;
}")
+;; We need to disable the FP forms of these since they do not support
+;; memory as written, but no input reloads are permitted for insns
+;; that use cc0. Also, movxfcc is not present.
+
(define_expand "movsfcc"
[(match_dup 4)
- (set (match_operand 0 "general_operand" "")
+ (set (match_operand 0 "register_operand" "")
(if_then_else:SF (match_operand 1 "comparison_operator" "")
- (match_operand:SF 2 "general_operand" "")
- (match_operand:SF 3 "general_operand" "")))]
- "TARGET_CMOVE"
+ (match_operand:SF 2 "register_operand" "")
+ (match_operand:SF 3 "register_operand" "")))]
+ "0 && TARGET_CMOVE"
"
{
operands[4] = i386_compare_gen (i386_compare_op0, i386_compare_op1);
@@ -7365,9 +7357,9 @@ byte_xor_operation:
[(match_dup 4)
(set (match_operand 0 "register_operand" "t")
(if_then_else:DF (match_operand 1 "comparison_operator" "")
- (match_operand:DF 2 "general_operand" "")
- (match_operand:DF 3 "general_operand" "")))]
- "TARGET_CMOVE"
+ (match_operand:DF 2 "register_operand" "")
+ (match_operand:DF 3 "register_operand" "")))]
+ "0 && TARGET_CMOVE"
"
{
operands[4] = i386_compare_gen (i386_compare_op0, i386_compare_op1);
@@ -7375,175 +7367,75 @@ byte_xor_operation:
(define_expand "movxfcc"
[(match_dup 4)
- (set (match_operand 0 "register_operand" "t")
+ (set (match_operand 0 "register_operand" "")
(if_then_else:XF (match_operand 1 "comparison_operator" "")
- (match_operand:XF 2 "general_operand" "")
- (match_operand:XF 3 "general_operand" "")))]
- "TARGET_CMOVE"
+ (match_operand:XF 2 "register_operand" "")
+ (match_operand:XF 3 "register_operand" "")))]
+ "0 && TARGET_CMOVE"
"
{
operands[4] = i386_compare_gen (i386_compare_op0, i386_compare_op1);
}")
(define_insn "movsfcc_1"
- [(set (match_operand:SF 0 "general_operand" "=t,=t,f,fFm")
+ [(set (match_operand:SF 0 "general_operand" "=f,f,&f")
(if_then_else:SF (match_operator 1 "comparison_operator"
- [(cc0) (const_int 0)])
- (match_operand:SF 2 "general_operand" "0,f,f,fFm")
- (match_operand:SF 3 "general_operand" "f,0,f,fFm")))]
+ [(cc0) (const_int 0)])
+ (match_operand:SF 2 "register_operand" "0,f,f")
+ (match_operand:SF 3 "register_operand" "f,0,f")))]
"TARGET_CMOVE"
"*
{
- if (which_alternative == 0)
+ switch (which_alternative)
{
+ case 0:
/* r <- cond ? arg : r */
output_asm_insn (AS2 (fcmov%f1,%3,%0), operands);
- }
- else if (which_alternative == 1)
- {
+ break;
+
+ case 1:
/* r <- cond ? r : arg */
output_asm_insn (AS2 (fcmov%F1,%2,%0), operands);
- }
- else if (which_alternative == 2)
- {
+ break;
+
+ case 2:
/* r <- cond ? r : arg */
output_asm_insn (AS2 (fcmov%F1,%2,%0), operands);
output_asm_insn (AS2 (fcmov%f1,%3,%0), operands);
+ break;
}
- else if (which_alternative == 3)
- {
- rtx xops[2];
- /* r <- cond ? arg1 : arg2 */
- operands[4] = gen_label_rtx ();
-
- if (STACK_REG_P (operands[2]) || GET_CODE (operands[2]) == MEM)
- output_asm_insn (AS1 (fld%z2,%y2), operands);
- else
- {
- xops[0] = operands[0];
- xops[1] = operands[2];
- output_asm_insn (singlemove_string (xops), xops);
- }
- output_asm_insn (\"j%C1 %l4\", operands);
- if (STACK_REG_P (operands[3]) || GET_CODE (operands[0]) == MEM)
- output_asm_insn (AS1 (fld%z3,%y3), operands);
- else
- {
- xops[0] = operands[0];
- xops[1] = operands[3];
- output_asm_insn (singlemove_string (xops), xops);
- }
- ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (operands[4]));
-}
RET;
}")
(define_insn "movdfcc_1"
- [(set (match_operand:DF 0 "general_operand" "=t,=t,f,fFm")
+ [(set (match_operand:DF 0 "general_operand" "=f,f,&f")
(if_then_else:DF (match_operator 1 "comparison_operator"
- [(cc0) (const_int 0)])
- (match_operand:DF 2 "general_operand" "0,f,f,fFm")
- (match_operand:DF 3 "general_operand" "f,0,f,fFm")))]
+ [(cc0) (const_int 0)])
+ (match_operand:DF 2 "register_operand" "0,f,f")
+ (match_operand:DF 3 "register_operand" "f,0,f")))]
"TARGET_CMOVE"
"*
{
- if (which_alternative == 0)
+ switch (which_alternative)
{
+ case 0:
/* r <- cond ? arg : r */
output_asm_insn (AS2 (fcmov%f1,%3,%0), operands);
- }
- else if (which_alternative == 1)
- {
- /* r <- cond ? r : arg */
- output_asm_insn (AS2 (fcmov%F1,%2,%0), operands);
- }
- else if (which_alternative == 2)
- {
- /* r <- cond ? r : arg */
- output_asm_insn (AS2 (fcmov%F1,%2,%0), operands);
- output_asm_insn (AS2 (fcmov%f1,%3,%0), operands);
- }
- else if (which_alternative == 3)
- {
- rtx xops[2];
-
- /* r <- cond ? arg1 : arg2 */
- operands[4] = gen_label_rtx ();
-
- if (STACK_REG_P (operands[2]) || GET_CODE (operands[2]) == MEM)
- output_asm_insn (AS1 (fld%z2,%y2), operands);
- else
- {
- xops[0] = operands[0];
- xops[1] = operands[2];
- output_asm_insn (singlemove_string (xops), xops);
- }
- output_asm_insn (\"j%C1 %l4\", operands);
- if (STACK_REG_P (operands[3]) || GET_CODE (operands[0]) == MEM)
- output_asm_insn (AS1 (fld%z3,%y3), operands);
- else
- {
- xops[0] = operands[0];
- xops[1] = operands[3];
- output_asm_insn (singlemove_string (xops), xops);
- }
- ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (operands[4]));
-}
- RET;
-}")
+ break;
-(define_insn "movxfcc_1"
- [(set (match_operand:XF 0 "register_operand" "=t,=t,f,fFm")
- (if_then_else:XF (match_operator 1 "comparison_operator"
- [(cc0) (const_int 0)])
- (match_operand:XF 2 "register_operand" "0,f,f,fFm")
- (match_operand:XF 3 "register_operand" "f,0,f,fFm")))]
- "TARGET_CMOVE"
- "*
-{
- if (which_alternative == 0)
- {
- /* r <- cond ? arg : r */
- output_asm_insn (AS2 (fcmov%f1,%3,%0), operands);
- }
- else if (which_alternative == 1)
- {
+ case 1:
/* r <- cond ? r : arg */
output_asm_insn (AS2 (fcmov%F1,%2,%0), operands);
- }
- else if (which_alternative == 2)
- {
+ break;
+
+ case 2:
/* r <- cond ? r : arg */
output_asm_insn (AS2 (fcmov%F1,%2,%0), operands);
output_asm_insn (AS2 (fcmov%f1,%3,%0), operands);
+ break;
}
- else if (which_alternative == 3)
- {
- rtx xops[2];
-
- /* r <- cond ? arg1 : arg2 */
- operands[4] = gen_label_rtx ();
- if (STACK_REG_P (operands[2]) || GET_CODE (operands[2]) == MEM)
- output_asm_insn (AS1 (fld%z2,%y2), operands);
- else
- {
- xops[0] = operands[0];
- xops[1] = operands[2];
- output_asm_insn (singlemove_string (xops), xops);
- }
- output_asm_insn (\"j%C1 %l4\", operands);
- if (STACK_REG_P (operands[3]) || GET_CODE (operands[0]) == MEM)
- output_asm_insn (AS1 (fld%z3,%y3), operands);
- else
- {
- xops[0] = operands[0];
- xops[1] = operands[3];
- output_asm_insn (singlemove_string (xops), xops);
- }
- ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (operands[4]));
-}
RET;
}")
@@ -7585,20 +7477,31 @@ byte_xor_operation:
"* return AS1(call,__alloca);")
(define_expand "allocate_stack"
- [(set (reg:SI 7)
- (minus:SI (reg:SI 7) (match_operand:SI 0 "general_operand" "")))]
- "TARGET_STACK_PROBE"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (minus:SI (reg:SI 7) (match_operand:SI 1 "general_operand" "")))
+ (set (reg:SI 7) (minus:SI (reg:SI 7) (match_dup 1)))]
+ "TARGET_STACK_PROBE"
"
{
#ifdef CHECK_STACK_LIMIT
- if (GET_CODE (operands[0]) == CONST_INT
- && INTVAL (operands[0]) < CHECK_STACK_LIMIT)
+ if (GET_CODE (operands[1]) == CONST_INT
+ && INTVAL (operands[1]) < CHECK_STACK_LIMIT)
emit_insn (gen_subsi3 (stack_pointer_rtx, stack_pointer_rtx,
- operands[0]));
+ operands[1]));
else
#endif
emit_insn (gen_allocate_stack_worker (copy_to_mode_reg (SImode,
- operands[0])));
+ operands[1])));
+ emit_move_insn (operands[0], virtual_stack_dynamic_rtx);
+ DONE;
+}")
+
+(define_expand "nonlocal_goto_receiver"
+ [(const_int 0)]
+ "flag_pic"
+ "
+{
+ load_pic_register (1);
DONE;
}")
diff --git a/gcc/config/i386/isc.h b/gcc/config/i386/isc.h
index c0a51508abd..d0b2dcc7a55 100644
--- a/gcc/config/i386/isc.h
+++ b/gcc/config/i386/isc.h
@@ -87,3 +87,7 @@
} \
fputs ("\"\n", FILE); \
} while (0)
+
+/* Work around assembler forward label references generated in exception
+ handling code. */
+#define DWARF2_UNWIND_INFO 0
diff --git a/gcc/config/i386/linux-aout.h b/gcc/config/i386/linux-aout.h
index f7d807a10d0..8bf3daa5613 100644
--- a/gcc/config/i386/linux-aout.h
+++ b/gcc/config/i386/linux-aout.h
@@ -1,5 +1,5 @@
-/* Definitions for Intel 386 running Linux
- Copyright (C) 1992, 1994, 1995 Free Software Foundation, Inc.
+/* Definitions for Intel 386 running Linux-based GNU systems using a.out.
+ Copyright (C) 1992, 1994, 1995, 1997 Free Software Foundation, Inc.
Contributed by H.J. Lu (hjl@nynexst.com)
This file is part of GNU CC.
@@ -53,9 +53,8 @@ Boston, MA 02111-1307, USA. */
#if 1
/* We no longer link with libc_p.a or libg.a by default. If you
- * want to profile or debug the Linux C library, please add
- * -lc_p or -ggdb to LDFLAGS at the link time, respectively.
- */
+ want to profile or debug the GNU/Linux C library, please add
+ -lc_p or -ggdb to LDFLAGS at the link time, respectively. */
#define LIB_SPEC \
"%{mieee-fp:-lieee} %{p:-lgmon} %{pg:-lgmon} %{!ggdb:-lc} %{ggdb:-lg}"
#else
diff --git a/gcc/config/i386/linux-oldld.h b/gcc/config/i386/linux-oldld.h
index a12ab590076..9c6c21f79d4 100644
--- a/gcc/config/i386/linux-oldld.h
+++ b/gcc/config/i386/linux-oldld.h
@@ -1,5 +1,6 @@
-/* Definitions for Intel 386 running Linux with pre-BFD a.out linkers
- Copyright (C) 1995 Free Software Foundation, Inc.
+/* Definitions for Intel 386 running Linux-based GNU systems with pre-BFD
+ a.out linkers.
+ Copyright (C) 1995, 1997 Free Software Foundation, Inc.
Contributed by Michael Meissner (meissner@cygnus.com)
This file is part of GNU CC.
@@ -53,9 +54,8 @@ Boston, MA 02111-1307, USA. */
#if 1
/* We no longer link with libc_p.a or libg.a by default. If you
- * want to profile or debug the Linux C library, please add
- * -lc_p or -ggdb to LDFLAGS at the link time, respectively.
- */
+ want to profile or debug the GNU/Linux C library, please add
+ lc_p or -ggdb to LDFLAGS at the link time, respectively. */
#define LIB_SPEC \
"%{mieee-fp:-lieee} %{p:-lgmon} %{pg:-lgmon} %{!ggdb:-lc} %{ggdb:-lg}"
#else
diff --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h
index 8f0671d1faa..df27c603603 100644
--- a/gcc/config/i386/linux.h
+++ b/gcc/config/i386/linux.h
@@ -1,4 +1,4 @@
-/* Definitions for Intel 386 running Linux with ELF format
+/* Definitions for Intel 386 running Linux-based GNU systems with ELF format.
Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by Eric Youngdale.
Modified for stabs-in-ELF by H.J. Lu.
@@ -30,7 +30,7 @@ Boston, MA 02111-1307, USA. */
#include <linux.h> /* some common stuff */
#undef TARGET_VERSION
-#define TARGET_VERSION fprintf (stderr, " (i386 Linux/ELF)");
+#define TARGET_VERSION fprintf (stderr, " (i386 GNU/Linux with ELF)");
/* The svr4 ABI for the i386 says that records and unions are returned
in memory. */
@@ -160,7 +160,7 @@ Boston, MA 02111-1307, USA. */
#undef CC1_SPEC
#define CC1_SPEC "%(cc1_cpu) %{profile:-p}"
-/* Provide a LINK_SPEC appropriate for Linux. Here we provide support
+/* Provide a LINK_SPEC appropriate for GNU/Linux. Here we provide support
for the special GCC options -static and -shared, which allow us to
link things in one of these three modes by applying the appropriate
combinations of options at link-time. We like to support here for
diff --git a/gcc/config/i386/mingw32.h b/gcc/config/i386/mingw32.h
index 9eb0acf2b84..5ae1926d1cd 100644
--- a/gcc/config/i386/mingw32.h
+++ b/gcc/config/i386/mingw32.h
@@ -2,7 +2,7 @@
hosting on Windows32, using GNU tools and the Windows32 API Library,
as distinct from winnt.h, which is used to build GCC for use with a
windows style library and tool set and uses the Microsoft tools.
- Copyright (C) 1997 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -33,15 +33,61 @@ Boston, MA 02111-1307, USA. */
-D__cdecl=__attribute__((__cdecl__)) \
-Asystem(winnt) -Acpu(i386) -Amachine(i386)"
+/* Specific a different directory for the standard include files. */
+#undef STANDARD_INCLUDE_DIR
+#define STANDARD_INCLUDE_DIR "/usr/mingw32/include"
+
+#define STANDARD_INCLUDE_COMPONENT "MINGW32"
+
/* For Windows applications, include more libraries, but always include
kernel32. */
#undef LIB_SPEC
-#define LIB_SPEC "%{windows:-luser32 -lgdi32 -lcomdlg32} -lkernel32"
+#define LIB_SPEC \
+"%{mwindows:-luser32 -lgdi32 -lcomdlg32} -lkernel32 -ladvapi32 -lshell32"
-/* Include in the Windows32 API libraries with libgcc */
+/* Include in the mingw32 libraries with libgcc */
#undef LIBGCC_SPEC
-#define LIBGCC_SPEC "-lmingw32 -lgcc -lmoldname -lcrtdll"
+#define LIBGCC_SPEC "-lmingw32 -lgcc -lmoldname -lmsvcrt"
/* Specify a different entry point when linking a DLL */
#undef LINK_SPEC
-#define LINK_SPEC "%{windows:--subsystem windows} %{dll:--dll -e _DllMainCRTStartup@12}"
+#define LINK_SPEC \
+"%{mwindows:--subsystem windows} %{mdll:--dll -e _DllMainCRTStartup@12}"
+
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC "%{mdll:dllcrt2%O%s} %{!mdll:crt2%O%s}"
+
+#define MATH_LIBRARY "-lmsvcrt"
+
+/* Output STRING, a string representing a filename, to FILE. We canonicalize
+ it to be in MS-DOS format. */
+#define OUTPUT_QUOTED_STRING(FILE, STRING) \
+do { \
+ char c; \
+ \
+ putc ('\"', asm_file); \
+ if (STRING[1] == ':' \
+ && (STRING[2] == '/' || STRING[2] == '\\')) \
+ { \
+ putc ('/', asm_file); \
+ putc ('/', asm_file); \
+ putc (*string, asm_file); \
+ string += 2; \
+ } \
+ \
+ while ((c = *string++) != 0) \
+ { \
+ if (c == '\\') \
+ c = '/'; \
+ \
+ if (c == '\"') \
+ putc ('\\', asm_file); \
+ putc (c, asm_file); \
+ } \
+ \
+ putc ('\"', asm_file); \
+} while (0)
+
+/* Dwarf2 exception information does not work on this system for some
+ unknown reason, so turn it off. */
+#undef INCOMING_RETURN_ADDR_RTX
diff --git a/gcc/config/i386/rtems.h b/gcc/config/i386/rtems.h
index 99c817a14d7..b31ceb9f799 100644
--- a/gcc/config/i386/rtems.h
+++ b/gcc/config/i386/rtems.h
@@ -1,6 +1,5 @@
-/* Definitions for rtems targetting an Intel i386 using coff.
-
- Copyright (C) 1996 Free Software Foundation, Inc.
+/* Definitions for rtems targeting an Intel i386 using coff.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Contributed by Joel Sherrill (joel@OARcorp.com).
This file is part of GNU CC.
@@ -27,5 +26,3 @@ Boston, MA 02111-1307, USA. */
#undef CPP_PREDEFINES
#define CPP_PREDEFINES "-Di386 -Drtems -D__rtems__ \
-Asystem(rtems) -Acpu(i386) -Amachine(i386)"
-
-/* end of i386-rtems.h */
diff --git a/gcc/config/i386/sco5.h b/gcc/config/i386/sco5.h
index d5471ecdec3..5306000e2a0 100644
--- a/gcc/config/i386/sco5.h
+++ b/gcc/config/i386/sco5.h
@@ -1,5 +1,5 @@
/* Definitions for Intel 386 running SCO Unix System V 3.2 Version 5.
- Copyright (C) 1992, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1992, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
Contributed by Kean Johnston (hug@netcom.com)
This file is part of GNU CC.
@@ -76,6 +76,16 @@ Boston, MA 02111-1307, USA. */
#undef GLOBAL_ASM_OP
#define GLOBAL_ASM_OP "\t.globl"
+#undef EH_FRAME_SECTION_ASM_OP
+#define EH_FRAME_SECTION_ASM_OP_COFF "\t.section\t.ehfram, \"x\""
+#define EH_FRAME_SECTION_ASM_OP_ELF "\t.section\t.eh_frame, \"aw\""
+#define EH_FRAME_SECTION_ASM_OP \
+ ((TARGET_ELF) ? EH_FRAME_SECTION_ASM_OP_ELF : EH_FRAME_SECTION_ASM_OP_COFF)
+
+/* Avoid problems (long section names, forward assembler refs) with DWARF
+ exception unwinding when we're generating COFF */
+#define DWARF2_UNWIND_INFO ((TARGET_ELF) ? 1 : 0 )
+
#undef CONST_SECTION_ASM_OP
#define CONST_SECTION_ASM_OP_COFF "\t.section\t.rodata, \"x\""
#define CONST_SECTION_ASM_OP_ELF "\t.section\t.rodata"
@@ -273,6 +283,14 @@ do { \
} \
} while (0)
+/* A C statement (sans semicolon) to output to the stdio stream
+ FILE the assembler definition of uninitialized global DECL named
+ NAME whose size is SIZE bytes and alignment is ALIGN bytes.
+ Try to use asm_output_aligned_bss to implement this macro. */
+
+#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
+asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
+
#undef ESCAPES
#define ESCAPES \
"\1\1\1\1\1\1\1\1btn\1fr\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
@@ -356,6 +374,19 @@ do { \
fprintf ((FILE), "\n"); \
} while (0)
+/* Must use data section for relocatable constants when pic. */
+#undef SELECT_RTX_SECTION
+#define SELECT_RTX_SECTION(MODE,RTX) \
+{ \
+ if (TARGET_ELF) { \
+ if (flag_pic && symbolic_operand (RTX)) \
+ data_section (); \
+ else \
+ const_section (); \
+ } else \
+ readonly_data_section(); \
+}
+
#undef ASM_OUTPUT_CASE_LABEL
#define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,JUMPTABLE) \
do { \
@@ -559,6 +590,7 @@ do { \
#define DWARF_DEBUGGING_INFO 1
#define SDB_DEBUGGING_INFO 1
+#define DBX_DEBUGGING_INFO 1
#define PREFERRED_DEBUGGING_TYPE \
((TARGET_ELF) ? DWARF_DEBUG: SDB_DEBUG)
@@ -661,7 +693,7 @@ dtors_section () \
#undef NO_IMPLICIT_EXTERN_C
#define NO_IMPLICIT_EXTERN_C 1
-/* JKJ FIXME - examine the rammifications of RETURN_IN_MEMORY and
+/* JKJ FIXME - examine the ramifications of RETURN_IN_MEMORY and
RETURN_POPS_ARGS */
#undef RETURN_POPS_ARGS
@@ -737,6 +769,12 @@ dtors_section () \
#define WCHAR_TYPE "long int"
#define WCHAR_TYPE_SIZE BITS_PER_WORD
+/*
+ * New for multilib support. Set the default switches for multilib,
+ * which is -melf.
+ */
+#define MULTILIB_DEFAULTS { "melf" }
+
/* Please note that these specs may look messy but they are required in
order to emulate the SCO Development system as closely as possible.
@@ -759,20 +797,20 @@ dtors_section () \
does.
SCO also allows you to compile, link and generate either ELF or COFF
- binaries. With gcc, as with the SCO compiler, the default is coff.
- Specify -melf to gcc to produce elf binaries. -fpic will get the
+ binaries. With gcc, unlike the SCO compiler, the default is ELF.
+ Specify -mcoff to gcc to produce elf binaries. -fpic will get the
assembler and linker to produce PIC code.
*/
/* Set up assembler flags for PIC and ELF compilations */
#undef ASM_SPEC
#define ASM_SPEC \
- "-b %{melf:elf}%{!melf:coff \
- %{static:%e-static only valid with -melf} \
- %{shared:%e-shared only valid with -melf} \
- %{symbolic:%e-symbolic only valid with -melf}} \
+ "-b %{!mcoff:elf}%{mcoff:coff \
+ %{static:%e-static not valid with -mcoff} \
+ %{shared:%e-shared not valid with -mcoff} \
+ %{symbolic:%e-symbolic not valid with -mcoff}} \
%{Ym,*} %{Yd,*} %{Wa,*:%*} \
- %{melf:-E%{Xa:a}%{!Xa:%{Xc:c}%{!Xc:%{Xk:k}%{!Xk:%{Xt:t}%{!Xt:a}}}},%{ansi:ansi}%{!ansi:%{posix:posix}%{!posix:%{Xpg4:xpg4}%{!Xpg4:%{Xpg4plus:XPG4PLUS}%{!Xpg4plus:%{Xods30:ods30}%{!Xods30:XPG4PLUS}}}}},ELF %{Qn:} %{!Qy:-Qn}}"
+ %{!mcoff:-E%{Xa:a}%{!Xa:%{Xc:c}%{!Xc:%{Xk:k}%{!Xk:%{Xt:t}%{!Xt:a}}}},%{ansi:ansi}%{!ansi:%{posix:posix}%{!posix:%{Xpg4:xpg4}%{!Xpg4:%{Xpg4plus:XPG4PLUS}%{!Xpg4plus:%{Xods30:ods30}%{!Xods30:XPG4PLUS}}}}},ELF %{Qn:} %{!Qy:-Qn}}"
/* Use crt1.o as a startup file and crtn.o as a closing file. */
@@ -790,13 +828,12 @@ dtors_section () \
%{!Xc:%{Xk:values-Xk.o%s} \
%{!Xk:%{Xt:values-Xt.o%s} \
%{!Xt:values-Xa.o%s}}}}}} \
- %{!melf:crtbegin.o%s} \
- %{melf:%{static:crtbegin.o%s}%{!static:crtbeginS.o%s}}"
+ %{mcoff:crtbeginS.o%s} %{!mcoff:crtbegin.o%s}"
#undef ENDFILE_SPEC
#define ENDFILE_SPEC \
- "%{melf:%{!static:crtendS.o%s}%{static:crtend.o%s}} \
- %{!melf:crtend.o%s} \
+ "%{!mcoff:crtend.o%s} \
+ %{mcoff:crtendS.o%s} \
%{pg:gcrtn.o%s}%{!pg:crtn.o%s}"
#undef CPP_PREDEFINES
@@ -807,8 +844,8 @@ dtors_section () \
#undef CPP_SPEC
#define CPP_SPEC "%(cpp_cpu) %[cpp_cpu] \
- %{fpic:%{!melf:%e-fpic is only valid with -melf}} \
- %{fPIC:%{!melf:%e-fPIC is only valid with -melf}} \
+ %{fpic:%{mcoff:%e-fpic is not valid with -mcoff}} \
+ %{fPIC:%{mcoff:%e-fPIC is not valid with -mcoff}} \
-D__i386 -D__unix -D_SCO_DS=1 -D_M_I386 -D_M_XENIX -D_M_UNIX \
%{!Xods30:-D_STRICT_NAMES} \
%{!ansi:%{!posix:%{!Xods30:-D_SCO_XPG_VERS=4}}} \
@@ -828,9 +865,9 @@ dtors_section () \
-DM_WORDSWAP}}}} \
%{scointl:-DM_INTERNAT -D_M_INTERNAT} \
%{traditional:-D_KR -D_SVID -D_NO_PROTOTYPE} \
- %{melf:-D_SCO_ELF} \
- %{!melf:-D_M_COFF -D_SCO_COFF} \
- %{melf:%{fpic:-D__PIC__ -D__pic__} \
+ %{!mcoff:-D_SCO_ELF} \
+ %{mcoff:-D_M_COFF -D_SCO_COFF} \
+ %{!mcoff:%{fpic:-D__PIC__ -D__pic__} \
%{fPIC:%{!fpic:-D__PIC__ -D__pic__}}} \
%{Xa:-D_SCO_C_DIALECT=1} \
%{!Xa:%{Xc:-D_SCO_C_DIALECT=3} \
@@ -841,36 +878,44 @@ dtors_section () \
#undef LINK_SPEC
#define LINK_SPEC \
- "-b %{melf:elf}%{!melf:coff \
- %{static:%e-static only valid with -melf} \
- %{shared:%e-shared only valid with -melf} \
- %{symbolic:%e-symbolic only valid with -melf} \
- %{fpic:%e-fpic only valid with -melf} \
- %{fPIC:%e-fPIC only valid with -melf}} \
- -R%{Xa:a}%{!Xa:%{Xc:c}%{!Xc:%{Xk:k}%{!Xk:%{Xt:t}%{!Xt:a}}}},%{ansi:ansi}%{!ansi:%{posix:posix}%{!posix:%{Xpg4:xpg4}%{!Xpg4:%{Xpg4plus:XPG4PLUS}%{!Xpg4plus:%{Xods30:ods30}%{!Xods30:XPG4PLUS}}}}},%{melf:ELF}%{!melf:COFF} \
+ "-b %{!mcoff:elf}%{mcoff:coff \
+ %{static:%e-static not valid with -mcoff} \
+ %{shared:%e-shared not valid with -mcoff} \
+ %{symbolic:%e-symbolic not valid with -mcoff} \
+ %{fpic:%e-fpic not valid with -mcoff} \
+ %{fPIC:%e-fPIC not valid with -mcoff}} \
+ -R%{Xa:a}%{!Xa:%{Xc:c}%{!Xc:%{Xk:k}%{!Xk:%{Xt:t}%{!Xt:a}}}},%{ansi:ansi}%{!ansi:%{posix:posix}%{!posix:%{Xpg4:xpg4}%{!Xpg4:%{Xpg4plus:XPG4PLUS}%{!Xpg4plus:%{Xods30:ods30}%{!Xods30:XPG4PLUS}}}}},%{mcoff:COFF}%{!mcoff:ELF} \
%{Wl,*%*} %{YP,*} %{YL,*} %{YU,*} \
%{!YP,*:%{p:-YP,/usr/ccs/libp:/lib/libp:/usr/lib/libp:/usr/ccs/lib:/lib:/usr/lib} \
%{!p:-YP,/usr/ccs/lib:/lib:/usr/lib}} \
%{h*} %{static:-dn -Bstatic} %{shared:-G -dy %{!z*:-z text}} \
%{symbolic:-Bsymbolic -G -dy %{!z*:-z text}} %{z*} %{R*} %{Y*} \
- %{G:-G} %{melf:%{Qn:} %{!Qy:-Qn}}"
+ %{G:-G} %{!mcoff:%{Qn:} %{!Qy:-Qn}}"
+
+/* The SCO COFF linker gets confused on the difference between "-ofoo"
+ and "-o foo". So we just always force a single space. */
+
+#define SWITCHES_NEED_SPACES "o"
/* Library spec. If we are not building a shared library, provide the
standard libraries, as per the SCO compiler. */
#undef LIB_SPEC
#define LIB_SPEC \
- "%{!shared:%{!symbolic:-lcrypt -lgen -lc}}"
+ "%{shared:pic/libgcc.a%s}%{!shared:%{!symbolic:-lcrypt -lgen -lc}}"
#undef LIBGCC_SPEC
#define LIBGCC_SPEC \
- "%{!melf:-lgcc}%{melf:%{!shared:%{!symbolic:-lgcc-elf}}}"
+ "%{!shared:-lgcc}"
-#define MASK_ELF 010000000000 /* Mask for elf generation */
-#define TARGET_ELF (target_flags & MASK_ELF)
+#define MASK_COFF 010000000000 /* Mask for elf generation */
+#define TARGET_COFF (target_flags & MASK_COFF)
+#define TARGET_ELF (!(target_flags & MASK_COFF))
#undef SUBTARGET_SWITCHES
-#define SUBTARGET_SWITCHES { "elf", MASK_ELF },
+#define SUBTARGET_SWITCHES \
+ { "coff", MASK_COFF }, \
+ { "elf", -MASK_COFF },
#define NO_DOLLAR_IN_LABEL
@@ -891,6 +936,7 @@ compiler at the end of the day. Onward we go ...
# undef FINI_SECTION_ASM_OP
# undef CTORS_SECTION_ASM_OP
# undef DTORS_SECTION_ASM_OP
+# undef EH_FRAME_SECTION_ASM_OP
# undef CTOR_LIST_BEGIN
# undef CTOR_LIST_END
# undef DO_GLOBAL_CTORS_BODY
@@ -902,11 +948,13 @@ compiler at the end of the day. Onward we go ...
# define FINI_SECTION_ASM_OP FINI_SECTION_ASM_OP_ELF
# define DTORS_SECTION_ASM_OP DTORS_SECTION_ASM_OP_ELF
# define CTORS_SECTION_ASM_OP CTORS_SECTION_ASM_OP_ELF
+# define EH_FRAME_SECTION_ASM_OP EH_FRAME_SECTION_ASM_OP_ELF
# else /* ! _SCO_ELF */
# define INIT_SECTION_ASM_OP INIT_SECTION_ASM_OP_COFF
# define FINI_SECTION_ASM_OP FINI_SECTION_ASM_OP_COFF
# define DTORS_SECTION_ASM_OP DTORS_SECTION_ASM_OP_COFF
# define CTORS_SECTION_ASM_OP CTORS_SECTION_ASM_OP_COFF
+# define EH_FRAME_SECTION_ASM_OP ""
# define CTOR_LIST_BEGIN asm (INIT_SECTION_ASM_OP); asm ("pushl $0")
# define CTOR_LIST_END CTOR_LIST_BEGIN
# define DO_GLOBAL_CTORS_BODY \
@@ -917,4 +965,3 @@ do { \
} while (0)
# endif /* ! _SCO_ELF */
#endif /* CRT_BEGIN !! CRT_END */
-
diff --git a/gcc/config/i386/sol2-c1.asm b/gcc/config/i386/sol2-c1.asm
index 72fdfb87cc2..d08bcbd4aec 100644
--- a/gcc/config/i386/sol2-c1.asm
+++ b/gcc/config/i386/sol2-c1.asm
@@ -1,6 +1,6 @@
! crt1.s for Solaris 2, x86
-! Copyright (C) 1993 Free Software Foundation, Inc.
+! Copyright (C) 1993, 1998 Free Software Foundation, Inc.
! Written By Fred Fish, Nov 1992
!
! This file is free software; you can redistribute it and/or modify it
@@ -149,7 +149,7 @@ _start:
! A dummy profiling support routine for non-profiling executables,
! in case we link in some objects that have been compiled for profiling.
- .globl _mcount
+ .weak _mcount
_mcount:
ret
.type _mcount,@function
diff --git a/gcc/config/i386/sol2-gc1.asm b/gcc/config/i386/sol2-gc1.asm
index 8983a672ac2..24a1965f37e 100644
--- a/gcc/config/i386/sol2-gc1.asm
+++ b/gcc/config/i386/sol2-gc1.asm
@@ -41,7 +41,7 @@
! information obtained by single stepping executables on other i386 SVR4
! implementations. This file is the first thing linked into any executable.
-! This is a modified crt1.s by J.W.Hawtin <J.W.Hawtin@lboro.ac.uk> 15/8/96,
+! This is a modified crt1.s by J.W.Hawtin <oolon@ankh.org> 15/8/96,
! to allow program profiling, by calling monstartup on entry and _mcleanup
! on exit
diff --git a/gcc/config/i386/sol2.h b/gcc/config/i386/sol2.h
index 55fe5f775dc..fc93bf1e99e 100644
--- a/gcc/config/i386/sol2.h
+++ b/gcc/config/i386/sol2.h
@@ -1,5 +1,5 @@
/* Target definitions for GNU compiler for Intel 80386 running Solaris 2
- Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1993, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
Contributed by Fred Fish (fnf@cygnus.com).
This file is part of GNU CC.
@@ -30,7 +30,7 @@ Boston, MA 02111-1307, USA. */
executed. This macro forces the assembler to do the padding, since
it knows what it is doing. */
-#define FORCE_INIT_SECTION_ALIGN do { asm (ALIGN_ASM_OP ## " 16"); } while (0)
+#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. */
@@ -53,7 +53,7 @@ Boston, MA 02111-1307, USA. */
#define STARTFILE_SPEC "%{!shared: \
%{!symbolic: \
%{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}}}}\
- %{pg:gmon.o%s}%{!pg:crti.o%s} \
+ %{pg:gmon.o%s} crti.o%s \
%{ansi:values-Xc.o%s} \
%{!ansi: \
%{traditional:values-Xt.o%s} \
@@ -72,12 +72,14 @@ Boston, MA 02111-1307, USA. */
%{YP,*} \
%{R*} \
%{compat-bsd: \
- %{!YP,*:%{p:-Y P,/usr/ucblib:/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \
- %{!p:-Y P,/usr/ucblib:/usr/ccs/lib:/usr/lib}} \
+ %{!YP,*:%{pg:-Y P,/usr/ucblib:/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \
+ %{!pg:%{p:-Y P,/usr/ucblib:/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \
+ %{!p:-Y P,/usr/ucblib:/usr/ccs/lib:/usr/lib}}} \
-R /usr/ucblib} \
%{!compat-bsd: \
- %{!YP,*:%{p:-Y P,/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \
- %{!p:-Y P,/usr/ccs/lib:/usr/lib}}} \
+ %{!YP,*:%{pg:-Y P,/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \
+ %{!pg:%{p:-Y P,/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \
+ %{!p:-Y P,/usr/ccs/lib:/usr/lib}}}} \
%{Qy:} %{!Qn:-Qy}"
/* This defines which switch letters take arguments.
@@ -90,3 +92,4 @@ Boston, MA 02111-1307, USA. */
|| (CHAR) == 'h' \
|| (CHAR) == 'z')
+#define STDC_0_IN_SYSTEM_HEADERS
diff --git a/gcc/config/i386/sol2dbg.h b/gcc/config/i386/sol2dbg.h
index 9d09c8fd043..9f95333b4b9 100644
--- a/gcc/config/i386/sol2dbg.h
+++ b/gcc/config/i386/sol2dbg.h
@@ -14,3 +14,14 @@
#ifdef DWARF_DEBUGGING_INFO
#undef DWARF_DEBUGGING_INFO
#endif
+
+/*
+ Changed from config/svr4.h in the following ways:
+
+ - Added "%{V}".
+ - Modified "{%v:-V}" to take into account "%{V}".
+ - Added "-s" so that stabs are saved in the final executable. */
+
+#undef ASM_SPEC
+#define ASM_SPEC \
+ "%{V} %{v:%{!V:-V}} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} -s"
diff --git a/gcc/config/i386/t-freebsd b/gcc/config/i386/t-freebsd
index 47640c0a2c0..5164669d1ac 100644
--- a/gcc/config/i386/t-freebsd
+++ b/gcc/config/i386/t-freebsd
@@ -1,4 +1,5 @@
# Don't run fixproto
STMP_FIXPROTO =
# Use only native include files
-USER_H =
+USER_H = $(EXTRA_HEADERS) $(LANG_EXTRA_HEADERS)
+
diff --git a/gcc/config/i386/t-sco5 b/gcc/config/i386/t-sco5
index 8dd7c5670e9..fd3d6c63b8e 100644
--- a/gcc/config/i386/t-sco5
+++ b/gcc/config/i386/t-sco5
@@ -1,91 +1,16 @@
# The pushl in CTOR initialization interferes with frame pointer elimination.
-CRTSTUFF_T_CFLAGS =-fno-omit-frame-pointer
-CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -melf -fPIC
+CRTSTUFF_T_CFLAGS = -fPIC -fno-omit-frame-pointer
+CRTSTUFF_T_CFLAGS_S = -mcoff -fno-omit-frame-pointer
#
-# Becuase we can be compiling for either elf or coff, we need to create
-# special versions of libgcc.a. It IS possible for this not to be done
-# and let the SCO linker transform the coff objects (which are created
-# by default) into elf objects. However, this is inefficient. So,
-# we create a libgcc-elf.a, which is used in the specs in sco5.h.
-# These are the rules for doing that.
+# I am still a little unsure of the multilib architecture. The following
+# 4 lines are based on advice from meissner@cygnus.com.
#
-# NOTE: This is duplicated directly from Makefile.in. If you change it
-# there, be sure to change things here!
-#
-EXTRA_PARTS = libgcc-elf.a crtbegin.o crtend.o crtbeginS.o crtendS.o
-TAROUTOPTS = xpf
-
-libgcc1-elf.a: stamp-crtS libgcc1.c $(CONFIG_H) $(LIB1FUNCS_EXTRA) config.status
- -rm -f tmplibgcc1-elf.a
- for name in $(LIB1FUNCS); \
- do \
- echo $${name}; \
- rm -f $${name}$(objext); \
- $(OLDCC) -DIN_LIBGCC1 -dy $(CCLIBFLAGS) $(INCLUDES) -c -DL$${name} $(srcdir)/libgcc1.c; \
- if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
- mv libgcc1$(objext) $${name}$(objext); \
- $(OLDAR) $(OLDAR_FLAGS) tmplibgcc1-elf.a $${name}$(objext); \
- rm -f $${name}$(objext); \
- done
- for file in .. $(LIB1FUNCS_EXTRA); \
- do \
- if [ x$${file} != x.. ]; then \
- name=`echo $${file} | sed -e 's/[.][cS]$$//' -e 's/[.]asm$$//'`; \
- echo $${name}; \
- if [ $${name}.asm = $${file} ]; then \
- cp $${file} $${name}.s || exit 1; file=$${name}.s; \
- else true; fi; \
- $(OLDCC) -DIN_LIBGCC1 -dy $(CCLIBFLAGS) $(INCLUDES) -c $${file}; \
- if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
- $(OLDAR) $(OLDAR_FLAGS) tmplibgcc1-elf.a $${name}$(objext); \
- if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
- rm -f $${name}.s $${name}$(objext); \
- else true; \
- fi; \
- done
- -if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc1-elf.a; else true; fi
- mv tmplibgcc1-elf.a libgcc1-elf.a
-
-libgcc2-elf.a: stamp-crtS libgcc2.c libgcc2.ready $(CONFIG_H) $(LIB2FUNCS_EXTRA) \
- machmode.h longlong.h gbl-ctors.h config.status
- -rm -f tmplibgcc2-elf.a
- for name in $(LIB2FUNCS); \
- do \
- echo $${name}; \
- $(GCC_FOR_TARGET) -melf $(LIBGCC2_CFLAGS) $(INCLUDES) -c -DL$${name} \
- $(srcdir)/libgcc2.c -o $${name}$(objext); \
- if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
- $(AR) $(AR_FLAGS) tmplibgcc2-elf.a $${name}$(objext); \
- rm -f $${name}$(objext); \
- done
- for file in .. $(LIB2FUNCS_EXTRA); \
- do \
- if [ x$${file} != x.. ]; then \
- name=`echo $${file} | sed -e 's/[.][cS]$$//' -e 's/[.]asm$$//'`; \
- oname=` echo $${name} | sed -e 's,.*/,,'`; \
- echo $${name}; \
- if [ $${name}.asm = $${file} ]; then \
- cp $${file} $${name}.s || exit 1; file=$${name}.s; \
- else true; fi; \
- $(GCC_FOR_TARGET) -melf $(LIBGCC2_CFLAGS) $(INCLUDES) -c $${file}; \
- if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
- $(AR) $(AR_FLAGS) tmplibgcc2-elf.a $${oname}$(objext); \
- rm -f $${name}.s $${oname}$(objext); \
- else true; \
- fi; \
- done
- mv tmplibgcc2-elf.a libgcc2-elf.a
-
-# Combine the various libraries into a single library, libgcc.a.
-libgcc-elf.a: libgcc1-elf.a libgcc2-elf.a
- -rm -rf tmplibgcc-elf.a libgcc-elf.a tmpcopy
- mkdir tmpcopy
- -(cd tmpcopy; $(AR) x ../libgcc1-elf.a)
- -(cd tmpcopy; chmod +w * > /dev/null 2>&1)
- -(cd tmpcopy; $(AR) x ../libgcc2-elf.a)
- (cd tmpcopy; $(AR) $(AR_FLAGS) ../tmplibgcc-elf.a *$(objext))
- rm -rf tmpcopy
- -if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc-elf.a; else true; fi
- mv tmplibgcc-elf.a libgcc-elf.a
+MULTILIB_OPTIONS = mcoff/fPIC
+MULTILIB_DIRNAMES = coff pic
+MULTILIB_EXCEPTIONS = *mcoff*/*fPIC*
+MULTILIB_MATCHES = fPIC=fpic
+MULTILIB_EXTRA_OPTS =
+LIBGCC=stmp-multilib
+INSTALL_LIBGCC=install-multilib
diff --git a/gcc/config/i386/t-sol2 b/gcc/config/i386/t-sol2
index 5a17053903d..f47905ae65d 100644
--- a/gcc/config/i386/t-sol2
+++ b/gcc/config/i386/t-sol2
@@ -33,3 +33,4 @@ crtn.o: $(srcdir)/config/i386/sol2-cn.asm $(GCC_PASSES)
# routines in crtstuff.c.
CRTSTUFF_T_CFLAGS = -fPIC
+TARGET_LIBGCC2_CFLAGS = -fPIC
diff --git a/gcc/config/i386/winnt.c b/gcc/config/i386/winnt.c
index e8e5df36425..ac26a1a7190 100644
--- a/gcc/config/i386/winnt.c
+++ b/gcc/config/i386/winnt.c
@@ -1,6 +1,6 @@
/* Subroutines for insn-output.c for Windows NT.
Contributed by Douglas Rupp (drupp@cs.washington.edu)
- Copyright (C) 1995 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -19,8 +19,8 @@ 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 <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
diff --git a/gcc/config/i386/x-dgux b/gcc/config/i386/x-dgux
index 83d3455b162..322bfe3ae91 100644
--- a/gcc/config/i386/x-dgux
+++ b/gcc/config/i386/x-dgux
@@ -6,6 +6,6 @@ X_CFLAGS = -O -mstandard -mlegend
BOOT_CFLAGS = -O2 -g -mstandard -mlegend $(CFLAGS)
CLIB = -lw32
RANLIB = true
-INSTALL_HEADERS =
+USER_H = $(EXTRA_HEADERS) $(LANG_EXTRA_HEADERS)
STMP_FIXPROTO =
diff --git a/gcc/config/i386/x-osfrose b/gcc/config/i386/x-osfrose
index 27c36fe4fe7..2c5e3ba13c7 100644
--- a/gcc/config/i386/x-osfrose
+++ b/gcc/config/i386/x-osfrose
@@ -17,7 +17,6 @@ DEBUG =
DEBUG_COLLECT = # -DDEBUG
CCLIBFLAGS = -O -DNO_HALF_PIC
GCC_CFLAGS = $(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(CFLAGS) -B./ -DPOSIX -DNO_HALF_PIC
-INSTALL = installbsd -c
LDFLAGS =
MSTATS = # -mstats
OLDCC = /usr/ccs/gcc/gcc
diff --git a/gcc/config/i386/x-sco5 b/gcc/config/i386/x-sco5
index ada44eda382..e13ed742540 100644
--- a/gcc/config/i386/x-sco5
+++ b/gcc/config/i386/x-sco5
@@ -1,9 +1,10 @@
RANLIB = :
RANLIB_TEST = false
-CC = cc
+CC = cc
OLDCC = cc
CCLIBFLAGS =
-CLIB = -lPW
+# We avoid the ALLOCA in -lPW becuase it gives us an evil index()
+ALLOCA = alloca.o
# See all the declarations.
FIXPROTO_DEFINES = -D_XOPEN_SOURCE -D_POSIX_C_SOURCE=2
diff --git a/gcc/config/i386/xm-aix.h b/gcc/config/i386/xm-aix.h
index 5e5d40281a1..ea9202112a1 100644
--- a/gcc/config/i386/xm-aix.h
+++ b/gcc/config/i386/xm-aix.h
@@ -1,5 +1,5 @@
/* Configuration for GNU C-compiler for IBM PS/2 running AIX/386.
- Copyright (C) 1988, 1993 Free Software Foundation, Inc.
+ Copyright (C) 1988, 1993, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -25,13 +25,7 @@ Boston, MA 02111-1307, USA. */
#include "i386/xm-i386.h"
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define bcmp(a,b,c) memcmp (a,b,c)
-
/* If not compiled with GNU C, use the portable alloca. */
#ifndef __GNUC__
#define USE_C_ALLOCA
#endif
-
-#define HAVE_PUTENV
diff --git a/gcc/config/i386/xm-cygwin32.h b/gcc/config/i386/xm-cygwin32.h
index b3f4c04b5fb..98327f24b1d 100644
--- a/gcc/config/i386/xm-cygwin32.h
+++ b/gcc/config/i386/xm-cygwin32.h
@@ -20,9 +20,6 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#define NO_STAB_H
-#define HAVE_STRERROR
-#define HAVE_RUSAGE
-#define HAVE_FILE_H
#define EXECUTABLE_SUFFIX ".exe"
/* Even though we support "/", allow "\" since everybody tests both. */
diff --git a/gcc/config/i386/xm-dos.h b/gcc/config/i386/xm-dos.h
index 1dd0c013b1d..a734a81b94e 100644
--- a/gcc/config/i386/xm-dos.h
+++ b/gcc/config/i386/xm-dos.h
@@ -1,8 +1,5 @@
#include "i386/xm-i386.h"
-/* Inhibit cccp.c's definition of putenv. */
-#define HAVE_PUTENV
-
/* Use semicolons to separate elements of a path. */
#define PATH_SEPARATOR ';'
@@ -15,6 +12,3 @@
#define MKTEMP_EACH_FILE 1
#define NO_PRECOMPILES 1
-
-/* sys_errlist proto in cccp.c doesn't match djgpp */
-#define HAVE_STRERROR
diff --git a/gcc/config/i386/xm-go32.h b/gcc/config/i386/xm-go32.h
index d8182132ac6..88cadd1f127 100644
--- a/gcc/config/i386/xm-go32.h
+++ b/gcc/config/i386/xm-go32.h
@@ -1,5 +1,5 @@
/* Configuration for GNU C-compiler for Intel 80386 running GO32.
- Copyright (C) 1988, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1988, 1996, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -26,3 +26,5 @@ Boston, MA 02111-1307, USA. */
/* Use semicolons to separate elements of a path. */
#define PATH_SEPARATOR ';'
+
+#define EXECUTABLE_SUFFIX ".exe"
diff --git a/gcc/config/i386/xm-mingw32.h b/gcc/config/i386/xm-mingw32.h
index 57ff72abf30..38c9b6d06b0 100644
--- a/gcc/config/i386/xm-mingw32.h
+++ b/gcc/config/i386/xm-mingw32.h
@@ -1,6 +1,6 @@
/* Configuration for GNU C-compiler for hosting on Windows32.
using GNU tools and the Windows32 API Library.
- Copyright (C) 1997 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -20,9 +20,6 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#define NO_STAB_H
-#define HAVE_STRERROR
-#define HAVE_RUSAGE
-#define HAVE_FILE_H
#ifndef USG
#define USG 1
@@ -36,20 +33,12 @@ Boston, MA 02111-1307, USA. */
#define USE_PROTOTYPES 1
#endif
-#ifndef HAVE_VPRINTF
-#define HAVE_VPRINTF 1
-#endif
-
#define NO_SYS_SIGLIST 1
-#define bcmp(a,b,c) memcmp (a,b,c)
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define index strchr
-#define rindex strrchr
-#define kill(a,b) raise(b)
-#define link(a,b) -1
#define environ _environ
/* Even though we support "/", allow "\" since everybody tests both. */
#define DIR_SEPARATOR '\\'
#define EXECUTABLE_SUFFIX ".exe"
+
+#undef PATH_SEPARATOR
+#define PATH_SEPARATOR ';'
diff --git a/gcc/config/i386/xm-os2.h b/gcc/config/i386/xm-os2.h
index 5ff2899cfd5..aed925e993c 100644
--- a/gcc/config/i386/xm-os2.h
+++ b/gcc/config/i386/xm-os2.h
@@ -1,7 +1,7 @@
/* Configuration for GNU compiler
for an Intel i386 or later processor running OS/2 2.x.
- Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc.
- Contributed by Samuel Figueroa (figueroa@cs.nyu.edu)
+ Copyright (C) 1993, 1994, 1995, 1997, 1998 Free Software Foundation, Inc.
+ Contributed by Samuel Figueroa (figueroa@apple.com)
This file is part of GNU CC.
@@ -28,20 +28,24 @@ Boston, MA 02111-1307, USA. */
#include <stdlib.h> /* this defines alloca */
#define USG
#define ONLY_INT_FIELDS
-#define HAVE_PUTENV
#define USE_PROTOTYPES 1
-#define bcmp(a,b,c) memcmp (a,b,c)
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define index strchr
-#define rindex strrchr
#define strcasecmp stricmp
#define kill(a,b) raise(b)
#define mktemp tmpnam
#else
+#ifdef __EMX__
+#define EMX
+#define USG
+#define BSTRING
+#define HAVE_PUTENV
+#define HAVE_VPRINTF
+#define HAVE_STRERROR
+#define strcasecmp stricmp
+#else
#define ____386BSD____
int spawnv (int modeflag, char *path, char *argv[]);
int spawnvp (int modeflag, char *path, char *argv[]);
+#endif /* __EMX__ */
#endif /* __IBMC__ */
#ifndef PATH_SEPARATOR
@@ -52,6 +56,14 @@ int spawnvp (int modeflag, char *path, char *argv[]);
#endif
#define EXECUTABLE_SUFFIX ".exe"
+
+/* The EMX compiler uses regular .o files */
+#ifndef __EMX__
#define OBJECT_SUFFIX ".obj"
+#endif
+
+/* This is required to make temporary file names unique on file
+ systems which severely restrict the length of file names. */
+#define MKTEMP_EACH_FILE
#include "i386/xm-i386.h"
diff --git a/gcc/config/i386/xm-osf.h b/gcc/config/i386/xm-osf.h
index fda50d98f55..cd06b56b6ad 100644
--- a/gcc/config/i386/xm-osf.h
+++ b/gcc/config/i386/xm-osf.h
@@ -1,5 +1,5 @@
/* Configuration for GNU C-compiler for 386 running OSF/1
- Copyright (C) 1994 Free Software Foundation, Inc.
+ Copyright (C) 1994, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -22,11 +22,3 @@ Boston, MA 02111-1307, USA. */
#undef FALSE
#include "i386/xm-i386.h"
-
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define bcmp(a,b,c) memcmp (a,b,c)
-
-#define HAVE_PUTENV
-#define HAVE_VPRINTF
-
diff --git a/gcc/config/i386/xm-sco5.h b/gcc/config/i386/xm-sco5.h
index 27adf86490e..99bc53c2bc5 100644
--- a/gcc/config/i386/xm-sco5.h
+++ b/gcc/config/i386/xm-sco5.h
@@ -5,4 +5,14 @@
/* Big buffers improve performance. */
#define IO_BUFFER_SIZE (0x8000 - 1024)
+/* OpenServer provides no sys_siglist,
+ but does offer the same data under another name. */
+#define sys_siglist _sys_siglist
+#undef SYS_SIGLIST_DECLARED
+#define SYS_SIGLIST_DECLARED
+
+/* If not compiled with GNU C, use the portable alloca. */
+#ifndef __GNUC__
+#define USE_C_ALLOCA
+#endif
diff --git a/gcc/config/i860/fx2800.h b/gcc/config/i860/fx2800.h
index 41c5bae3d06..26c7c253755 100644
--- a/gcc/config/i860/fx2800.h
+++ b/gcc/config/i860/fx2800.h
@@ -1,6 +1,6 @@
/* Target definitions for GNU compiler for Alliant FX/2800
running Concentrix 2.2
- Copyright (C) 1991, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1991, 1996, 1998 Free Software Foundation, Inc.
Contributed by Howard Chu (hyc@hanauma.jpl.nasa.gov).
This file is part of GNU CC.
@@ -252,7 +252,7 @@ Boston, MA 02111-1307, USA. */
#define DATA_ALIGNMENT(dummy,align) \
((TREE_PUBLIC (decl) && \
- (TREE_CODE (TREE_TYPE (decl))==POINTER_TYPE)) ? 64:align)
+ (POINTER_TYPE_P (TREE_TYPE (decl)))) ? 64: align)
#undef FUNCTION_PROFILER
#define FUNCTION_PROFILER(FILE, LABELNO) \
diff --git a/gcc/config/i860/i860.c b/gcc/config/i860/i860.c
index dce13404783..dd9a6f56329 100644
--- a/gcc/config/i860/i860.c
+++ b/gcc/config/i860/i860.c
@@ -1,5 +1,5 @@
/* Subroutines for insn-output.c for Intel 860
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ Copyright (C) 1989, 1991, 1997, 1998 Free Software Foundation, Inc.
Derived from sparc.c.
Written by Richard Stallman (rms@ai.mit.edu).
@@ -26,6 +26,7 @@ Boston, MA 02111-1307, USA. */
#include "config.h"
+#include <stdio.h>
#include "flags.h"
#include "rtl.h"
#include "regs.h"
@@ -38,8 +39,6 @@ Boston, MA 02111-1307, USA. */
#include "recog.h"
#include "insn-attr.h"
-#include <stdio.h>
-
static rtx find_addr_reg ();
#ifndef I860_REG_PREFIX
@@ -1436,7 +1435,8 @@ output_delayed_branch (template, operands, insn)
/* Now recognize the insn which we put in its delay slot.
We must do this after outputting the branch insn,
since operands may just be a pointer to `recog_operand'. */
- INSN_CODE (delay_insn) = insn_code_number = recog (pat, delay_insn);
+ INSN_CODE (delay_insn) = insn_code_number
+ = recog (pat, delay_insn, NULL_PTR);
if (insn_code_number == -1)
abort ();
@@ -1490,7 +1490,7 @@ output_delay_insn (delay_insn)
}
#ifdef REGISTER_CONSTRAINTS
- if (! constrain_operands (insn_code_number))
+ if (! constrain_operands (insn_code_number, 1))
abort ();
#endif
diff --git a/gcc/config/i860/i860.h b/gcc/config/i860/i860.h
index 29a42cca316..47eb7dcfd1d 100644
--- a/gcc/config/i860/i860.h
+++ b/gcc/config/i860/i860.h
@@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler, for Intel 860.
- Copyright (C) 1989, 1991, 1993, 1995, 1996 Free Software Foundation, Inc.
- Hacked substantially by Ron Guilmette (rfg@segfault.us.com) to cater to
+ Copyright (C) 1989, 91, 93, 95, 96, 1997 Free Software Foundation, Inc.
+ Hacked substantially by Ron Guilmette (rfg@monkeys.com) to cater to
the whims of the System V Release 4 assembler.
This file is part of GNU CC.
@@ -1369,7 +1369,7 @@ extern unsigned long sfmode_constant_to_ulong ();
stack (where the i860 calling conventions require structs &
unions to be passed). */
-#define FLOAT_TYPE_VALUE float
+#define FLOAT_VALUE_TYPE float
#define INTIFY(FLOATVAL) (FLOATVAL)
#define FLOATIFY(INTVAL) (INTVAL)
#define FLOAT_ARG_TYPE float
diff --git a/gcc/config/i860/i860.md b/gcc/config/i860/i860.md
index a3df7bc4584..b5649f59e49 100644
--- a/gcc/config/i860/i860.md
+++ b/gcc/config/i860/i860.md
@@ -1,5 +1,5 @@
;;- Machine description for Intel 860 chip for GNU C compiler
-;; Copyright (C) 1989, 1990 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 1990, 1997 Free Software Foundation, Inc.
;; This file is part of GNU CC.
@@ -1004,23 +1004,26 @@
;; that anything generated as this insn will be recognized as one
;; and that it won't successfully combine with anything.
(define_expand "movstrsi"
- [(parallel [(set (mem:BLK (match_operand:BLK 0 "general_operand" ""))
- (mem:BLK (match_operand:BLK 1 "general_operand" "")))
+ [(parallel [(set (match_operand:BLK 0 "general_operand" "")
+ (match_operand:BLK 1 "general_operand" ""))
(use (match_operand:SI 2 "nonmemory_operand" ""))
(use (match_operand:SI 3 "immediate_operand" ""))
(clobber (match_dup 4))
(clobber (match_dup 5))
(clobber (match_dup 6))
- (clobber (match_dup 0))
- (clobber (match_dup 1))])]
+ (clobber (match_dup 7))
+ (clobber (match_dup 8))])]
""
"
{
- operands[0] = copy_to_mode_reg (SImode, XEXP (operands[0], 0));
- operands[1] = copy_to_mode_reg (SImode, XEXP (operands[1], 0));
operands[4] = gen_reg_rtx (SImode);
operands[5] = gen_reg_rtx (SImode);
operands[6] = gen_reg_rtx (SImode);
+ operands[7] = copy_to_mode_reg (SImode, XEXP (operands[0], 0));
+ operands[8] = copy_to_mode_reg (SImode, XEXP (operands[1], 0));
+
+ operands[0] = change_address (operands[0], VOIDmode, operands[7]);
+ operands[1] = change_address (operands[1], VOIDmode, operands[8]);
}")
(define_insn ""
diff --git a/gcc/config/i960/i960.c b/gcc/config/i960/i960.c
index 70e5f208ecc..902ed0bbb01 100644
--- a/gcc/config/i960/i960.c
+++ b/gcc/config/i960/i960.c
@@ -1,5 +1,5 @@
/* Subroutines used for code generation on intel 80960.
- Copyright (C) 1992, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1992, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
Contributed by Steven McGeady, Intel Corp.
Additional Work by Glenn Colon-Bonet, Jonathan Shapiro, Andy Wilson
Converted to GCC 2.0 by Jim Wilson and Michael Tiemann, Cygnus Support.
@@ -21,9 +21,8 @@ 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 <stdio.h>
-
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
@@ -36,7 +35,6 @@ Boston, MA 02111-1307, USA. */
#include "flags.h"
#include "tree.h"
#include "insn-codes.h"
-#include "assert.h"
#include "expr.h"
#include "except.h"
#include "function.h"
@@ -591,8 +589,13 @@ emit_move_sequence (operands, mode)
adding 4 to the memory address may not yield a valid insn. */
/* ??? We don't always need the scratch, but that would complicate things.
Maybe later. */
+ /* ??? We must also handle stores to pseudos here, because the pseudo may be
+ replaced with a MEM later. This would be cleaner if we didn't have
+ a separate pattern for unaligned DImode/TImode stores. */
if (GET_MODE_SIZE (mode) > UNITS_PER_WORD
- && GET_CODE (operands[0]) == MEM
+ && (GET_CODE (operands[0]) == MEM
+ || (GET_CODE (operands[0]) == REG
+ && REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER))
&& GET_CODE (operands[1]) == REG
&& REGNO (operands[1]) < FIRST_PSEUDO_REGISTER
&& ! HARD_REGNO_MODE_OK (REGNO (operands[1]), mode))
@@ -2242,7 +2245,8 @@ i960_arg_size_and_align (mode, type, size_out, align_out)
else if (mode == VOIDmode)
{
/* End of parm list. */
- assert (type != 0 && TYPE_MODE (type) == VOIDmode);
+ if (type == 0 || TYPE_MODE (type) != VOIDmode)
+ abort ();
size = 1;
}
else
diff --git a/gcc/config/i960/i960.h b/gcc/config/i960/i960.h
index 34dc397d030..6ced9acadf8 100644
--- a/gcc/config/i960/i960.h
+++ b/gcc/config/i960/i960.h
@@ -81,7 +81,7 @@ Boston, MA 02111-1307, USA. */
#define LINK_SPEC \
"%{mka:-AKA}%{mkb:-AKB}%{msa:-ASA}%{msb:-ASB}\
%{mmc:-AMC}%{mca:-ACA}%{mcc:-ACC}%{mcf:-ACF}\
- %{!mka:%{!mkb:%{!msa:%{!msb:%{!mmc:%{!mca:%{!mcc:%{!mcf:-AKB}}}}}}}}\
+ %{mja:-AJX}%{mjd:-AJX}%{mjf:-AJX}%{mrp:-AJX}\
%{mbout:-Fbout}%{mcoff:-Fcoff}\
%{mlink-relax:-relax}"
diff --git a/gcc/config/i960/i960.md b/gcc/config/i960/i960.md
index 32acd924ed1..f24a9401b31 100644
--- a/gcc/config/i960/i960.md
+++ b/gcc/config/i960/i960.md
@@ -1,5 +1,5 @@
;;- Machine description for Intel 80960 chip for GNU C compiler
-;; Copyright (C) 1992, 1995 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 1995, 1998 Free Software Foundation, Inc.
;; Contributed by Steven McGeady, Intel Corp.
;; Additional work by Glenn Colon-Bonet, Jonathan Shapiro, Andy Wilson
;; Converted to GCC 2.0 by Jim Wilson and Michael Tiemann, Cygnus Support.
@@ -867,17 +867,20 @@
[(set_attr "type" "move,move,load,load,store")])
(define_insn "*store_unaligned_di_reg"
- [(set (match_operand:DI 0 "memory_operand" "=m")
- (match_operand:DI 1 "register_operand" "d"))
- (clobber (match_scratch:SI 2 "=&d"))]
+ [(set (match_operand:DI 0 "general_operand" "=d,m")
+ (match_operand:DI 1 "register_operand" "d,d"))
+ (clobber (match_scratch:SI 2 "=X,&d"))]
""
"*
{
+ if (which_alternative == 0)
+ return i960_output_move_double (operands[0], operands[1]);
+
operands[3] = gen_rtx (MEM, word_mode, operands[2]);
operands[4] = adj_offsettable_operand (operands[3], UNITS_PER_WORD);
return \"lda %0,%2\;st %1,%3\;st %D1,%4\";
}"
- [(set_attr "type" "store")])
+ [(set_attr "type" "move,store")])
(define_expand "movti"
[(set (match_operand:TI 0 "general_operand" "")
@@ -946,19 +949,22 @@
[(set_attr "type" "move,move,load,load,store")])
(define_insn "*store_unaligned_ti_reg"
- [(set (match_operand:TI 0 "memory_operand" "=m")
- (match_operand:TI 1 "register_operand" "d"))
- (clobber (match_scratch:SI 2 "=&d"))]
+ [(set (match_operand:TI 0 "general_operand" "=d,m")
+ (match_operand:TI 1 "register_operand" "d,d"))
+ (clobber (match_scratch:SI 2 "=X,&d"))]
""
"*
{
+ if (which_alternative == 0)
+ return i960_output_move_quad (operands[0], operands[1]);
+
operands[3] = gen_rtx (MEM, word_mode, operands[2]);
operands[4] = adj_offsettable_operand (operands[3], UNITS_PER_WORD);
operands[5] = adj_offsettable_operand (operands[4], UNITS_PER_WORD);
operands[6] = adj_offsettable_operand (operands[5], UNITS_PER_WORD);
return \"lda %0,%2\;st %1,%3\;st %D1,%4\;st %E1,%5\;st %F1,%6\";
}"
- [(set_attr "type" "store")])
+ [(set_attr "type" "move,store")])
(define_expand "store_multiple"
[(set (match_operand:SI 0 "" "") ;;- dest
diff --git a/gcc/config/i960/rtems.h b/gcc/config/i960/rtems.h
index 9263027f22c..714706859d9 100644
--- a/gcc/config/i960/rtems.h
+++ b/gcc/config/i960/rtems.h
@@ -1,6 +1,5 @@
-/* Definitions for rtems targetting an Intel i960.
-
- Copyright (C) 1996 Free Software Foundation, Inc.
+/* Definitions for rtems targeting an Intel i960.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Contributed by Joel Sherrill (joel@OARcorp.com).
This file is part of GNU CC.
@@ -27,5 +26,3 @@ Boston, MA 02111-1307, USA. */
#undef CPP_PREDEFINES
#define CPP_PREDEFINES "-Di960 -Di80960 -DI960 -DI80960 -Drtems -D__rtems__ \
-Asystem(rtems) -Acpu(i960) -Amachine(i960)"
-
-/* end of i960-rtems.h */
diff --git a/gcc/config/i960/t-vxworks960 b/gcc/config/i960/t-vxworks960
index 9f8529125cb..c2dd5eb2060 100644
--- a/gcc/config/i960/t-vxworks960
+++ b/gcc/config/i960/t-vxworks960
@@ -3,7 +3,7 @@ CROSS_LIBGCC1 =
# We don't want to put exit in libgcc.a for VxWorks, because VxWorks
# does not have _exit.
-LIBGCC2_CFLAGS = -O2 $(GCC_CFLAGS) -g1 -Dexit=unused_exit
+TARGET_LIBGCC2_CFLAGS = -Dexit=unused_exit
LIB2FUNCS_EXTRA = fp-bit.c dp-bit.c xp-bit.c
dp-bit.c: $(srcdir)/config/fp-bit.c
diff --git a/gcc/config/linux-aout.h b/gcc/config/linux-aout.h
index 2e9a790b252..ca8a39d5070 100644
--- a/gcc/config/linux-aout.h
+++ b/gcc/config/linux-aout.h
@@ -1,5 +1,5 @@
-/* Definitions for Linux
- Copyright (C) 1995 Free Software Foundation, Inc.
+/* Definitions for Linux-based GNU systems.
+ Copyright (C) 1995, 1997 Free Software Foundation, Inc.
Contributed by H.J. Lu (hjl@nynexst.com)
This file is part of GNU CC.
@@ -25,7 +25,7 @@ Boston, MA 02111-1307, USA. */
#undef HAVE_ATEXIT
#define HAVE_ATEXIT
-/* Linux uses ctype from glibc.a. I am not sure how complete it is.
+/* GNU/Linux uses ctype from glibc.a. I am not sure how complete it is.
For now, we play safe. It may change later. */
#if 0
diff --git a/gcc/config/linux.h b/gcc/config/linux.h
index 439452600c4..e56e62a4792 100644
--- a/gcc/config/linux.h
+++ b/gcc/config/linux.h
@@ -1,7 +1,7 @@
-/* Definitions for Linux with ELF format
- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Definitions for Linux-based GNU systems with ELF format
+ Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
Contributed by Eric Youngdale.
- Modified for stabs-in-ELF by H.J. Lu.
+ Modified for stabs-in-ELF by H.J. Lu (hjl@lucon.org).
This file is part of GNU CC.
@@ -26,7 +26,7 @@ Boston, MA 02111-1307, USA. */
#undef HAVE_ATEXIT
#define HAVE_ATEXIT
-/* Linux uses ctype from glibc.a. I am not sure how complete it is.
+/* GNU/Linux uses ctype from glibc.a. I am not sure how complete it is.
For now, we play safe. It may change later. */
#if 0
@@ -59,8 +59,8 @@ Boston, MA 02111-1307, USA. */
fprintf (FILE, "\t.version\t\"01.01\"\n"); \
} while (0)
-/* Provide a STARTFILE_SPEC appropriate for Linux. Here we add
- the Linux magical crtbegin.o file (see crtstuff.c) which
+/* 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
object constructed before entering `main'. */
@@ -72,11 +72,11 @@ Boston, MA 02111-1307, USA. */
%{!profile:crt1.o%s}}}} \
crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"
-/* Provide a ENDFILE_SPEC appropriate for Linux. Here we tack on
- the Linux magical crtend.o file (see crtstuff.c) which
+/* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on
+ the GNU/Linux magical crtend.o file (see crtstuff.c) which
provides part of the support for getting C++ file-scope static
object constructed before entering `main', followed by a normal
- Linux "finalizer" file, `crtn.o'. */
+ GNU/Linux "finalizer" file, `crtn.o'. */
#undef ENDFILE_SPEC
#define ENDFILE_SPEC \
@@ -86,11 +86,15 @@ Boston, MA 02111-1307, USA. */
#undef CC1_SPEC
#define CC1_SPEC "%{profile:-p}"
+#ifndef USE_GNULIBC_1
+#undef DEFAULT_VTABLE_THUNKS
+#define DEFAULT_VTABLE_THUNKS 1
+#endif
+
#undef LIB_SPEC
/* We no longer link with libc_p.a or libg.a by default. If you
- * want to profile or debug the Linux C library, please add
- * -profile or -ggdb to LDFLAGS at the link time, respectively.
- */
+ want to profile or debug the GNU/Linux C library, please add
+ -profile or -ggdb to LDFLAGS at the link time, respectively. */
#if 1
#ifdef USE_GNULIBC_1
#define LIB_SPEC \
@@ -98,7 +102,8 @@ Boston, MA 02111-1307, USA. */
%{!profile:%{!ggdb:-lc} %{ggdb:-lg}}}"
#else
#define LIB_SPEC \
- "%{!shared: %{mieee-fp:-lieee} %{pthread:-lpthread} \
+ "%{shared: -lc} \
+ %{!shared: %{mieee-fp:-lieee} %{pthread:-lpthread} \
%{profile:-lc_p} %{!profile: -lc}}"
#endif
#else
diff --git a/gcc/config/m32r/m32r.c b/gcc/config/m32r/m32r.c
index b415dd0c7a9..48504a06e14 100644
--- a/gcc/config/m32r/m32r.c
+++ b/gcc/config/m32r/m32r.c
@@ -1,4 +1,4 @@
-/* Subroutines used for code generation on the M32R/D cpu.
+/* Subroutines used for code generation on the Mitsubishi M32R cpu.
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -18,8 +18,8 @@ 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 <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "tree.h"
#include "rtl.h"
#include "regs.h"
@@ -1655,7 +1655,7 @@ m32r_print_operand (file, x, code)
break;
case 'U' :
- /* FIXME: wip */
+ /* ??? wip */
/* Output a load/store with update indicator if appropriate. */
if (GET_CODE (x) == MEM)
{
diff --git a/gcc/config/m32r/m32r.h b/gcc/config/m32r/m32r.h
index 09d1c6a967e..99ab9c2281c 100644
--- a/gcc/config/m32r/m32r.h
+++ b/gcc/config/m32r/m32r.h
@@ -1,4 +1,4 @@
-/* Definitions of target machine for GNU compiler, for the M32R/D cpu.
+/* Definitions of target machine for GNU compiler, Mitsubishi M32R cpu.
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -22,7 +22,7 @@ Boston, MA 02111-1307, USA. */
- longlong.h?
*/
-/* FIXME: Create elf.h and have svr4.h include it. */
+/* ??? Create elf.h and have svr4.h include it. */
#include "svr4.h"
#undef SWITCH_TAKES_ARG
@@ -703,7 +703,7 @@ M32R_STACK_ALIGN (current_function_outgoing_args_size)
Do not define this macro unless there is no other way to get the
return address from the stack. */
-/* FIXME: revisit */
+/* ??? revisit */
/* #define RETURN_ADDRESS_POINTER_REGNUM */
/* Register in which static-chain is passed to a function. This must
@@ -886,7 +886,7 @@ M32R_STACK_ALIGN (current_function_outgoing_args_size)
? gen_rtx (REG, (MODE), ROUND_ADVANCE_CUM ((CUM), (MODE), (TYPE))) \
: 0)
-/* FIXME: Quick hack to try to get varargs working the normal way. */
+/* ??? Quick hack to try to get varargs working the normal way. */
#define FUNCTION_INCOMING_ARG(CUM, MODE, TYPE, NAMED) \
(((! current_function_varargs || (NAMED)) \
&& PASS_IN_REG_P ((CUM), (MODE), (TYPE), (NAMED))) \
@@ -1061,7 +1061,7 @@ m32r_output_function_epilogue (FILE, SIZE)
jmp r6
nop
- FIXME: Need addr32 support.
+ ??? Need addr32 support.
*/
/* Length in bytes of the trampoline for entering a nested function. */
@@ -1224,7 +1224,7 @@ m32r_select_cc_mode (OP, X, Y)
/* Return non-zero if SELECT_CC_MODE will never return MODE for a
floating point inequality comparison. */
-#define REVERSIBLE_CC_MODE(MODE) 1 /*FIXME*/
+#define REVERSIBLE_CC_MODE(MODE) 1 /*???*/
/* Costs. */
diff --git a/gcc/config/m32r/m32r.md b/gcc/config/m32r/m32r.md
index 94427d38549..4c8b2e54ffb 100644
--- a/gcc/config/m32r/m32r.md
+++ b/gcc/config/m32r/m32r.md
@@ -1,4 +1,4 @@
-;; Machine description of the M32R/D cpu for GNU C compiler
+;; Machine description of the Mitsubishi M32R cpu for GNU C compiler
;; Copyright (C) 1996, 1997 Free Software Foundation, Inc.
;; This file is part of GNU CC.
@@ -191,7 +191,7 @@
(define_insn "*movsi_insn"
[(set (match_operand:SI 0 "move_dest_operand" "=r,r,r,r,r,r,r,m")
-;; FIXME: Do we need a const_double constraint here for large unsigned values?
+;; ??? Do we need a const_double constraint here for large unsigned values?
(match_operand:SI 1 "move_src_operand" "r,I,J,MQ,L,N,m,r"))]
"register_operand (operands[0], SImode) || register_operand (operands[1], SImode)"
"@
@@ -221,7 +221,7 @@
int shift;
/* In all cases we will emit two instructions. However we try to
- use 2 byte instructions whereever possible. We can assume the
+ use 2 byte instructions wherever possible. We can assume the
constant isn't loadable with any of ldi, ld24, or seth. */
/* See if we can load a 24 bit unsigned value and invert it. */
@@ -265,7 +265,7 @@
;; [then seth + ld/st would work for any object in the area]. Doing this
;; would require special handling of _SDA_BASE_ (its value would be
;; (.sdata + 32K) & 0xffff0000) and reloc computations would be different
-;; [I think]. What to do about this is defered until later and for now we
+;; [I think]. What to do about this is deferred until later and for now we
;; require .sdata to be in the first 16M.
(define_expand "movsi_sda"
@@ -584,7 +584,7 @@
(set_attr "length" "4,*")])
;; Sign extension instructions.
-;; FIXME: See v850.md.
+;; ??? See v850.md.
;; These patterns originally accepted general_operands, however, slightly
;; better code is generated by only accepting register_operands, and then
@@ -901,7 +901,7 @@
;;
;; On the m32r it is more efficient to use the bxxz instructions and
;; thus merge the compare and branch into one instruction, so they are
-;; prefered.
+;; preferred.
(define_expand "cmpsi"
[(set (reg:CC 17)
diff --git a/gcc/config/m68k/a-ux.h b/gcc/config/m68k/a-ux.h
index 74aaa4ea9ad..69ecb537224 100644
--- a/gcc/config/m68k/a-ux.h
+++ b/gcc/config/m68k/a-ux.h
@@ -1,5 +1,5 @@
/* Definitions for Motorola 680x0 running A/UX
- Copyright (C) 1996 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -114,10 +114,10 @@ crt2.o%s "
For A/UX generate the result in d0, a0, or fp0 as appropriate. */
#undef FUNCTION_VALUE
-#define FUNCTION_VALUE(VALTYPE, FUNC) \
- (TREE_CODE (VALTYPE) == REAL_TYPE && TARGET_68881 \
- ? gen_rtx (REG, TYPE_MODE (VALTYPE), 16) \
- : (TREE_CODE (VALTYPE) == POINTER_TYPE \
+#define FUNCTION_VALUE(VALTYPE, FUNC) \
+ (TREE_CODE (VALTYPE) == REAL_TYPE && TARGET_68881 \
+ ? gen_rtx (REG, TYPE_MODE (VALTYPE), 16) \
+ : (POINTER_TYPE_P (VALTYPE) \
? gen_rtx (REG, TYPE_MODE (VALTYPE), 8) \
: gen_rtx (REG, TYPE_MODE (VALTYPE), 0)))
diff --git a/gcc/config/m68k/auxas.h b/gcc/config/m68k/auxas.h
index 79a242068a5..794df51558f 100644
--- a/gcc/config/m68k/auxas.h
+++ b/gcc/config/m68k/auxas.h
@@ -1,5 +1,5 @@
/* Definitions for Motorola 680x0 running A/UX using /bin/as
- Copyright (C) 1996 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -31,7 +31,7 @@ Boston, MA 02111-1307, USA. */
#define ASM_SPEC "%{m68030:-68030 }%{m68040:-68040 }"
/* Modify AT&T SGS assembler syntax */
-/* A/UX's as doesn't do dots in pseodo-ops */
+/* A/UX's as doesn't do dots in pseudo-ops */
#define SDB_DEBUGGING_INFO
diff --git a/gcc/config/m68k/linux-aout.h b/gcc/config/m68k/linux-aout.h
index 5dd84cc22df..692725edd4d 100644
--- a/gcc/config/m68k/linux-aout.h
+++ b/gcc/config/m68k/linux-aout.h
@@ -1,4 +1,4 @@
-/* Definitions for Motorola m68k running Linux
+/* Definitions for Motorola m68k running Linux-based GNU systems.
Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -50,7 +50,7 @@ Boston, MA 02111-1307, USA. */
#undef LIB_SPEC
#if 1
/* We no longer link with libc_p.a or libg.a by default. If you want
- to profile or debug the Linux C library, please add -lc_p or -ggdb
+ to profile or debug the GNU/Linux C library, please add -lc_p or -ggdb
to LDFLAGS at the link time, respectively. */
#define LIB_SPEC \
"%{mieee-fp:-lieee} %{p:-lgmon} %{pg:-lgmon} %{!ggdb:-lc} %{ggdb:-lg}"
diff --git a/gcc/config/m68k/linux.h b/gcc/config/m68k/linux.h
index 0ebc5f1ca71..9f2399da1e1 100644
--- a/gcc/config/m68k/linux.h
+++ b/gcc/config/m68k/linux.h
@@ -1,4 +1,5 @@
-/* Definitions for Motorola 68k running Linux with ELF format.
+/* Definitions for Motorola 68k running Linux-based GNU systems with
+ ELF format.
Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -26,7 +27,7 @@ Boston, MA 02111-1307, USA. */
#include <linux.h> /* some common stuff */
#undef TARGET_VERSION
-#define TARGET_VERSION fprintf (stderr, " (68k Linux/ELF)");
+#define TARGET_VERSION fprintf (stderr, " (68k GNU/Linux with ELF)");
/* 68020 with 68881 */
#define TARGET_DEFAULT (MASK_BITFIELD|MASK_68881|MASK_68020)
@@ -131,7 +132,7 @@ Boston, MA 02111-1307, USA. */
"%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \
%{m68040} %{m68060:-m68040}"
-/* Provide a LINK_SPEC appropriate for Linux. Here we provide support
+/* Provide a LINK_SPEC appropriate for GNU/Linux. Here we provide support
for the special GCC options -static and -shared, which allow us to
link things in one of these three modes by applying the appropriate
combinations of options at link-time. We like to support here for
diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c
index 781e11cf65c..5f932f0121f 100644
--- a/gcc/config/m68k/m68k.c
+++ b/gcc/config/m68k/m68k.c
@@ -20,8 +20,8 @@ Boston, MA 02111-1307, USA. */
/* Some output-actions in m68k.md need these. */
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
@@ -31,6 +31,7 @@ Boston, MA 02111-1307, USA. */
#include "insn-flags.h"
#include "output.h"
#include "insn-attr.h"
+#include "tree.h"
/* Needed for use_return_insn. */
#include "flags.h"
@@ -164,6 +165,7 @@ output_function_prologue (stream, size)
int num_saved_regs = 0;
extern char call_used_regs[];
int fsize = (size + 3) & -4;
+ int cfa_offset = INCOMING_FRAME_SP_OFFSET, cfa_store_offset = cfa_offset;
if (frame_pointer_needed)
@@ -212,6 +214,16 @@ output_function_prologue (stream, size)
reg_names[FRAME_POINTER_REGNUM], -fsize);
#endif
}
+ if (dwarf2out_do_frame ())
+ {
+ char *l = dwarf2out_cfi_label ();
+
+ cfa_store_offset += 4;
+ cfa_offset = cfa_store_offset;
+ dwarf2out_def_cfa (l, FRAME_POINTER_REGNUM, cfa_offset);
+ dwarf2out_reg_save (l, FRAME_POINTER_REGNUM, -cfa_store_offset);
+ cfa_store_offset += fsize;
+ }
}
else if (fsize)
{
@@ -282,6 +294,12 @@ output_function_prologue (stream, size)
asm_fprintf (stream, "\taddl %0I%d,%Rsp\n", - (fsize + 4));
#endif
}
+ if (dwarf2out_do_frame ())
+ {
+ cfa_store_offset += fsize;
+ cfa_offset = cfa_store_offset;
+ dwarf2out_def_cfa ("", STACK_POINTER_REGNUM, cfa_offset);
+ }
}
#ifdef SUPPORT_SUN_FPA
for (regno = 24; regno < 56; regno++)
@@ -294,13 +312,28 @@ output_function_prologue (stream, size)
asm_fprintf (stream, "\tfpmoved %s,%Rsp@-\n",
reg_names[regno]);
#endif
+ if (dwarf2out_do_frame ())
+ {
+ char *l = dwarf2out_cfi_label ();
+
+ cfa_store_offset += 8;
+ if (! frame_pointer_needed)
+ {
+ cfa_offset = cfa_store_offset;
+ dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, cfa_offset);
+ }
+ dwarf2out_reg_save (l, regno, -cfa_store_offset);
+ }
}
#endif
if (TARGET_68881)
{
for (regno = 16; regno < 24; regno++)
if (regs_ever_live[regno] && ! call_used_regs[regno])
- mask |= 1 << (regno - 16);
+ {
+ mask |= 1 << (regno - 16);
+ num_saved_regs++;
+ }
if ((mask & 0xff) != 0)
{
#ifdef MOTOROLA
@@ -308,8 +341,25 @@ output_function_prologue (stream, size)
#else
asm_fprintf (stream, "\tfmovem %0I0x%x,%Rsp@-\n", mask & 0xff);
#endif
+ if (dwarf2out_do_frame ())
+ {
+ char *l = dwarf2out_cfi_label ();
+ int n_regs;
+
+ cfa_store_offset += num_saved_regs * 12;
+ if (! frame_pointer_needed)
+ {
+ cfa_offset = cfa_store_offset;
+ dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, cfa_offset);
+ }
+ for (regno = 16, n_regs = 0; regno < 24; regno++)
+ if (mask & (1 << (regno - 16)))
+ dwarf2out_reg_save (l, regno,
+ -cfa_store_offset + n_regs++ * 12);
+ }
}
mask = 0;
+ num_saved_regs = 0;
}
for (regno = 0; regno < 16; regno++)
if (regs_ever_live[regno] && ! call_used_regs[regno])
@@ -347,13 +397,27 @@ output_function_prologue (stream, size)
/* Undo the work from above. */
for (i = 0; i< 16; i++)
if (mask & (1 << i))
- asm_fprintf (stream,
+ {
+ asm_fprintf (stream,
#ifdef MOTOROLA
- "\t%Omove.l %s,-(%Rsp)\n",
+ "\t%Omove.l %s,-(%Rsp)\n",
#else
- "\tmovel %s,%Rsp@-\n",
+ "\tmovel %s,%Rsp@-\n",
#endif
- reg_names[15 - i]);
+ reg_names[15 - i]);
+ if (dwarf2out_do_frame ())
+ {
+ char *l = dwarf2out_cfi_label ();
+
+ cfa_store_offset += 4;
+ if (! frame_pointer_needed)
+ {
+ cfa_offset = cfa_store_offset;
+ dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, cfa_offset);
+ }
+ dwarf2out_reg_save (l, 15 - i, -cfa_store_offset);
+ }
+ }
}
else if (mask)
{
@@ -392,6 +456,22 @@ output_function_prologue (stream, size)
asm_fprintf (stream, "\tmoveml %0I0x%x,%Rsp@-\n", mask);
#endif
}
+ if (dwarf2out_do_frame ())
+ {
+ char *l = dwarf2out_cfi_label ();
+ int n_regs;
+
+ cfa_store_offset += num_saved_regs * 4;
+ if (! frame_pointer_needed)
+ {
+ cfa_offset = cfa_store_offset;
+ dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, cfa_offset);
+ }
+ for (regno = 0, n_regs = 0; regno < 16; regno++)
+ if (mask & (1 << (15 - regno)))
+ dwarf2out_reg_save (l, regno,
+ -cfa_store_offset + n_regs++ * 4);
+ }
}
if (flag_pic && current_function_uses_pic_offset_table)
{
@@ -1232,6 +1312,8 @@ legitimize_pic_address (orig, mode, reg)
gen_rtx (PLUS, Pmode,
pic_offset_table_rtx, orig));
current_function_uses_pic_offset_table = 1;
+ if (reload_in_progress)
+ regs_ever_live[PIC_OFFSET_TABLE_REGNUM] = 1;
RTX_UNCHANGING_P (pic_ref) = 1;
emit_move_insn (reg, pic_ref);
return reg;
@@ -2969,7 +3051,11 @@ print_operand_address (file, addr)
{
output_addr_const (file, addr);
if (flag_pic && (breg == pic_offset_table_rtx))
- fprintf (file, "@GOT");
+ {
+ fprintf (file, "@GOT");
+ if (flag_pic == 1)
+ fprintf (file, ".w");
+ }
}
fprintf (file, "(%s", reg_names[REGNO (breg)]);
if (ireg != 0)
diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h
index 5e4dac75735..fcce3455c3c 100644
--- a/gcc/config/m68k/m68k.h
+++ b/gcc/config/m68k/m68k.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler. Sun 68000/68020 version.
- Copyright (C) 1987, 88, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 93-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -135,9 +135,9 @@ extern int target_flags;
{ "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_68020|MASK_BITFIELD|MASK_68881)}, \
{ "c68000", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY \
- |MASK_68020|MASK_BITFIELD)}, \
+ |MASK_68020|MASK_BITFIELD|MASK_68881)}, \
{ "bitfield", MASK_BITFIELD}, \
{ "nobitfield", - MASK_BITFIELD}, \
{ "rtd", MASK_RTD}, \
@@ -169,10 +169,13 @@ extern int target_flags;
{ "5200", (MASK_5200)}, \
{ "68851", 0}, \
{ "no-68851", 0}, \
- { "68302", - (MASK_5200|MASK_68060|MASK_68040|MASK_68020|MASK_BITFIELD)}, \
- { "68332", - (MASK_5200|MASK_68060|MASK_68040|MASK_BITFIELD)}, \
+ { "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)}, \
{ "68332", MASK_68020}, \
- { "cpu32", - (MASK_5200|MASK_68060|MASK_68040|MASK_BITFIELD)}, \
+ { "cpu32", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY \
+ |MASK_BITFIELD)}, \
{ "cpu32", MASK_68020}, \
{ "align-int", MASK_ALIGN_INT }, \
{ "no-align-int", -MASK_ALIGN_INT }, \
@@ -277,8 +280,8 @@ extern int target_flags;
/* No data type wants to be aligned rounder than this.
Most published ABIs say that ints should be aligned on 16 bit
- boundries, but cpus with 32 bit busses get better performance
- aligned on 32 bit boundries. Coldfires without a misalignment
+ boundaries, but cpus with 32 bit busses get better performance
+ aligned on 32 bit boundaries. Coldfires without a misalignment
module require 32 bit alignment. */
#define BIGGEST_ALIGNMENT (TARGET_ALIGN_INT ? 32 : 16)
@@ -375,7 +378,7 @@ extern int target_flags;
and are not available for the register allocator.
On the 68000, only the stack pointer is such. */
-/* fpa0 is also reserved so that it can be used to move shit back and
+/* fpa0 is also reserved so that it can be used to move data back and
forth between high fpa regs and everything else. */
#define FIXED_REGISTERS \
@@ -1052,11 +1055,20 @@ while(0)
}
#else /* !__mcf5200__ */
#if defined(MACHINE_STATE_m68010_up)
+#ifdef __HPUX_ASM__
+/* HPUX assembler does not accept %ccr. */
+#define MACHINE_STATE_SAVE(id) \
+ { \
+ asm ("move.w %cc,-(%sp)"); \
+ asm ("movm.l &0xc0c0,-(%sp)"); \
+ }
+#else /* ! __HPUX_ASM__ */
#define MACHINE_STATE_SAVE(id) \
{ \
asm ("move.w %ccr,-(%sp)"); \
asm ("movm.l &0xc0c0,-(%sp)"); \
}
+#endif /* __HPUX_ASM__ */
#else /* !MACHINE_STATE_m68010_up */
#define MACHINE_STATE_SAVE(id) \
{ \
@@ -1069,23 +1081,23 @@ while(0)
#if defined(__mcf5200__)
#define MACHINE_STATE_SAVE(id) \
{ \
- asm ("subl 20,sp"); \
- asm ("movml d0/d1/a0/a1,sp@(4)"); \
- asm ("movew cc,d0"); \
- asm ("movml d0,sp@"); \
+ asm ("subl %#20,%/sp" : ); \
+ asm ("movml %/d0/%/d1/%/a0/%/a1,%/sp@(4)" : ); \
+ asm ("movew %/cc,%/d0" : ); \
+ asm ("movml %/d0,%/sp@" : ); \
}
#else /* !__mcf5200__ */
#if defined(MACHINE_STATE_m68010_up)
#define MACHINE_STATE_SAVE(id) \
{ \
- asm ("movew cc,sp@-"); \
- asm ("moveml d0/d1/a0/a1,sp@-"); \
+ asm ("movew %/cc,%/sp@-" : ); \
+ asm ("moveml %/d0/%/d1/%/a0/%/a1,%/sp@-" : ); \
}
#else /* !MACHINE_STATE_m68010_up */
#define MACHINE_STATE_SAVE(id) \
{ \
- asm ("movew sr,sp@-"); \
- asm ("moveml d0/d1/a0/a1,sp@-"); \
+ asm ("movew %/sr,%/sp@-" : ); \
+ asm ("moveml %/d0/%/d1/%/a0/%/a1,%/sp@-" : ); \
}
#endif /* MACHINE_STATE_m68010_up */
#endif /* __mcf5200__ */
@@ -1103,26 +1115,35 @@ while(0)
asm ("add.l 20,%sp"); \
}
#else /* !__mcf5200__ */
+#ifdef __HPUX_ASM__
+/* HPUX assembler does not accept %ccr. */
+#define MACHINE_STATE_RESTORE(id) \
+ { \
+ asm ("movm.l (%sp)+,&0x0303"); \
+ asm ("move.w (%sp)+,%cc"); \
+ }
+#else /* ! __HPUX_ASM__ */
#define MACHINE_STATE_RESTORE(id) \
{ \
asm ("movm.l (%sp)+,&0x0303"); \
asm ("move.w (%sp)+,%ccr"); \
}
+#endif /* __HPUX_ASM__ */
#endif /* __mcf5200__ */
#else /* !MOTOROLA */
#if defined(__mcf5200__)
#define MACHINE_STATE_RESTORE(id) \
{ \
- asm ("movml sp@,d0"); \
- asm ("movew d0,cc"); \
- asm ("movml sp@(4),d0/d1/a0/a1"); \
- asm ("addl 20,sp"); \
+ asm ("movml %/sp@,%/d0" : ); \
+ asm ("movew %/d0,%/cc" : ); \
+ asm ("movml %/sp@(4),%/d0/%/d1/%/a0/%/a1" : ); \
+ asm ("addl %#20,%/sp" : ); \
}
#else /* !__mcf5200__ */
#define MACHINE_STATE_RESTORE(id) \
{ \
- asm ("moveml sp@+,d0/d1/a0/a1"); \
- asm ("movew sp@+,cc"); \
+ asm ("moveml %/sp@+,%/d0/%/d1/%/a0/%/a1" : ); \
+ asm ("movew %/sp@+,%/cc" : ); \
}
#endif /* __mcf5200__ */
#endif /* MOTOROLA */
@@ -1205,7 +1226,11 @@ while(0)
/* 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. */
+ CXT is an RTX for the static chain value for the function.
+
+ We generate a two-instructions program at address TRAMP :
+ movea.l &CXT,%a0
+ jmp FNADDR */
#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
{ \
@@ -1771,6 +1796,18 @@ __transfer_from_trampoline () \
#define DBX_REGISTER_NUMBER(REGNO) ((REGNO) < 16 ? (REGNO) : (REGNO) + 2)
+/* Before the prologue, RA is at 0(%sp). */
+#define INCOMING_RETURN_ADDR_RTX \
+ gen_rtx (MEM, VOIDmode, gen_rtx (REG, VOIDmode, STACK_POINTER_REGNUM))
+
+/* We must not use the DBX register numbers for the DWARF 2 CFA column
+ numbers because that maps to numbers beyond FIRST_PSEUDO_REGISTER.
+ Instead use the identity mapping. */
+#define DWARF_FRAME_REGNUM(REG) REG
+
+/* Before the prologue, the top of the frame is at 4(%sp). */
+#define INCOMING_FRAME_SP_OFFSET 4
+
/* 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. */
diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md
index 0d31de26bf7..ddcac6555be 100644
--- a/gcc/config/m68k/m68k.md
+++ b/gcc/config/m68k/m68k.md
@@ -749,12 +749,27 @@
;; Recognizers for btst instructions.
+;; Coldfire/5200 only allows "<Q>" type addresses when the bit position is
+;; specified as a constant, so we must disable all patterns that may extract
+;; from a MEM at a constant bit position if we can't use this as a constraint.
+
(define_insn ""
[(set (cc0) (zero_extract (match_operand:QI 0 "memory_operand" "o")
(const_int 1)
(minus:SI (const_int 7)
(match_operand:SI 1 "general_operand" "di"))))]
- ""
+ "!TARGET_5200"
+ "* { return output_btst (operands, operands[1], operands[0], insn, 7); }")
+
+;; This is the same as the above pattern except for the constraints. The 'i'
+;; has been deleted.
+
+(define_insn ""
+ [(set (cc0) (zero_extract (match_operand:QI 0 "memory_operand" "o")
+ (const_int 1)
+ (minus:SI (const_int 7)
+ (match_operand:SI 1 "general_operand" "d"))))]
+ "TARGET_5200"
"* { return output_btst (operands, operands[1], operands[0], insn, 7); }")
(define_insn ""
@@ -795,7 +810,7 @@
[(set (cc0) (zero_extract (match_operand:QI 0 "memory_operand" "m")
(const_int 1)
(match_operand:SI 1 "const_int_operand" "n")))]
- "(unsigned) INTVAL (operands[1]) < 8"
+ "(unsigned) INTVAL (operands[1]) < 8 && !TARGET_5200"
"*
{
operands[1] = gen_rtx (CONST_INT, VOIDmode, 7 - INTVAL (operands[1]));
@@ -806,7 +821,30 @@
[(set (cc0) (zero_extract (match_operand:SI 0 "register_operand" "do")
(const_int 1)
(match_operand:SI 1 "const_int_operand" "n")))]
- ""
+ "!TARGET_5200"
+ "*
+{
+ if (GET_CODE (operands[0]) == MEM)
+ {
+ operands[0] = adj_offsettable_operand (operands[0],
+ INTVAL (operands[1]) / 8);
+ operands[1] = gen_rtx (CONST_INT, VOIDmode,
+ 7 - INTVAL (operands[1]) % 8);
+ return output_btst (operands, operands[1], operands[0], insn, 7);
+ }
+ operands[1] = gen_rtx (CONST_INT, VOIDmode,
+ 31 - INTVAL (operands[1]));
+ return output_btst (operands, operands[1], operands[0], insn, 31);
+}")
+
+;; This is the same as the above pattern except for the constraints.
+;; The 'o' has been replaced with 'Q'.
+
+(define_insn ""
+ [(set (cc0) (zero_extract (match_operand:SI 0 "register_operand" "dQ")
+ (const_int 1)
+ (match_operand:SI 1 "const_int_operand" "n")))]
+ "TARGET_5200"
"*
{
if (GET_CODE (operands[0]) == MEM)
@@ -3675,7 +3713,7 @@
[(set (match_operand:SI 0 "general_operand" "=m,d")
(ior:SI (match_operand:SI 1 "general_operand" "%0,0")
(match_operand:SI 2 "general_operand" "dKs,dmMs")))]
- ""
+ "! TARGET_5200"
"*
{
return output_iorsi3 (operands);
@@ -3733,12 +3771,21 @@
;; On all 68k models, this makes faster code in a special case.
;; See also ashlsi_16, ashrsi_16 and lshrsi_16.
+;; ??? This pattern can not work as written, because it fails if operand 0
+;; and operand 1 are the same register. This can happen for alternative 1.
+;; This will still fail even if an early clobber is added to the output
+;; for alternative 1. This is because reload may satisfy the matching
+;; constraint by forcing the output to use exactly the same register as
+;; operand 2, without noticing that this then causes a conflict with operand 1.
+;; Possible fix: check for operand 0/1 overlap, and emit correct but slower
+;; code. This should be rare if the early clobber is added.
+
(define_insn "iorsi_zexthi_ashl16"
[(set (match_operand:SI 0 "general_operand" "=&d,d")
(ior:SI (zero_extend:SI (match_operand:HI 1 "general_operand" "dmn,dmn"))
(ashift:SI (match_operand:SI 2 "general_operand" "o,0")
(const_int 16))))]
- ""
+ "0"
"*
{
CC_STATUS_INIT;
@@ -5766,28 +5813,34 @@
else
operands[3] = adj_offsettable_operand (operands[0], 4);
if (! ADDRESS_REG_P (operands[0]))
+ {
#ifdef MOTOROLA
- return \"move%.l %0,%2\;or%.l %3,%2\;jbeq %l1\";
+ return \"move%.l %0,%2\;or%.l %3,%2\;jbeq %l1\";
#else
- return \"move%.l %0,%2\;or%.l %3,%2\;jeq %l1\";
+ return \"move%.l %0,%2\;or%.l %3,%2\;jeq %l1\";
#endif
+ }
operands[4] = gen_label_rtx();
if (TARGET_68020 || TARGET_5200)
+ {
#ifdef MOTOROLA
- output_asm_insn (\"tst%.l %0\;jbne %l4\;tst%.l %3\;jbeq %l1\", operands);
+ output_asm_insn (\"tst%.l %0\;jbne %l4\;tst%.l %3\;jbeq %l1\", operands);
#else
- output_asm_insn (\"tst%.l %0\;jne %l4\;tst%.l %3\;jeq %l1\", operands);
+ output_asm_insn (\"tst%.l %0\;jne %l4\;tst%.l %3\;jeq %l1\", operands);
#endif
+ }
else
+ {
#ifdef MOTOROLA
#ifdef SGS_CMP_ORDER
- output_asm_insn (\"cmp%.w %0,%#0\;jbne %l4\;cmp%.w %3,%#0\;jbeq %l1\", operands);
+ output_asm_insn (\"cmp%.w %0,%#0\;jbne %l4\;cmp%.w %3,%#0\;jbeq %l1\", operands);
#else
- output_asm_insn (\"cmp%.w %#0,%0\;jbne %l4\;cmp%.w %#0,%3\;jbeq %l1\", operands);
+ output_asm_insn (\"cmp%.w %#0,%0\;jbne %l4\;cmp%.w %#0,%3\;jbeq %l1\", operands);
#endif
#else
- output_asm_insn (\"cmp%.w %#0,%0\;jne %l4\;cmp%.w %#0,%3\;jeq %l1\", operands);
+ output_asm_insn (\"cmp%.w %#0,%0\;jne %l4\;cmp%.w %#0,%3\;jeq %l1\", operands);
#endif
+ }
ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\",
CODE_LABEL_NUMBER (operands[4]));
return \"\";
@@ -5821,27 +5874,33 @@
else
operands[3] = adj_offsettable_operand (operands[0], 4);
if (!ADDRESS_REG_P (operands[0]))
+ {
#ifdef MOTOROLA
- return \"move%.l %0,%2\;or%.l %3,%2\;jbne %l1\";
+ return \"move%.l %0,%2\;or%.l %3,%2\;jbne %l1\";
#else
- return \"move%.l %0,%2\;or%.l %3,%2\;jne %l1\";
+ return \"move%.l %0,%2\;or%.l %3,%2\;jne %l1\";
#endif
+ }
if (TARGET_68020 || TARGET_5200)
+ {
#ifdef MOTOROLA
- return \"tst%.l %0\;jbne %l1\;tst%.l %3\;jbne %l1\";
+ return \"tst%.l %0\;jbne %l1\;tst%.l %3\;jbne %l1\";
#else
- return \"tst%.l %0\;jne %l1\;tst%.l %3\;jne %l1\";
+ return \"tst%.l %0\;jne %l1\;tst%.l %3\;jne %l1\";
#endif
+ }
else
+ {
#ifdef MOTOROLA
#ifdef SGS_CMP_ORDER
- return \"cmp%.w %0,%#0\;jbne %l1\;cmp%.w %3,%#0\;jbne %l1\";
+ return \"cmp%.w %0,%#0\;jbne %l1\;cmp%.w %3,%#0\;jbne %l1\";
#else
- return \"cmp%.w %#0,%0\;jbne %l1\;cmp%.w %#0,%3\;jbne %l1\";
+ return \"cmp%.w %#0,%0\;jbne %l1\;cmp%.w %#0,%3\;jbne %l1\";
#endif
#else
- return \"cmp%.w %#0,%0\;jne %l1\;cmp%.w %#0,%3\;jne %l1\";
+ return \"cmp%.w %#0,%0\;jne %l1\;cmp%.w %#0,%3\;jne %l1\";
#endif
+ }
} ")
(define_insn "bge0_di"
@@ -5880,17 +5939,19 @@
if (TARGET_68020 || TARGET_5200 || ! ADDRESS_REG_P (operands[0]))
output_asm_insn(\"tst%.l %0\", operands);
else
- /* On an address reg, cmpw may replace cmpl. */
+ {
+ /* On an address reg, cmpw may replace cmpl. */
#ifdef SGS_CMP_ORDER
- output_asm_insn(\"cmp%.w %0,%#0\", operands);
+ output_asm_insn(\"cmp%.w %0,%#0\", operands);
#else
- output_asm_insn(\"cmp%.w %#0,%0\", operands);
+ output_asm_insn(\"cmp%.w %#0,%0\", operands);
#endif
+ }
#ifdef MOTOROLA
- return \"jbpl %l1\";
+ return \"jbpl %l1\";
#else
- return \"jpl %l1\";
+ return \"jpl %l1\";
#endif
} ")
@@ -5930,12 +5991,14 @@
if (TARGET_68020 || TARGET_5200 || ! ADDRESS_REG_P (operands[0]))
output_asm_insn(\"tst%.l %0\", operands);
else
- /* On an address reg, cmpw may replace cmpl. */
+ {
+ /* On an address reg, cmpw may replace cmpl. */
#ifdef SGS_CMP_ORDER
- output_asm_insn(\"cmp%.w %0,%#0\", operands);
+ output_asm_insn(\"cmp%.w %0,%#0\", operands);
#else
- output_asm_insn(\"cmp%.w %#0,%0\", operands);
+ output_asm_insn(\"cmp%.w %#0,%0\", operands);
#endif
+ }
#ifdef MOTOROLA
return \"jbmi %l1\";
@@ -6685,21 +6748,23 @@
"*
if (GET_CODE (operands[1]) == MEM
&& GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
+ {
#ifdef MOTOROLA
#ifdef HPUX_ASM
- return \"bsr.l %1\";
+ return \"bsr.l %1\";
#else
#ifdef USE_GAS
- return \"bsr.l %1@PLTPC\";
+ return \"bsr.l %1@PLTPC\";
#else
- return \"bsr %1@PLTPC\";
+ return \"bsr %1@PLTPC\";
#endif
#endif
#else
- /* The ',a1' is a dummy argument telling the Sun assembler we want PIC
- GAS just plain ignores it. */
- return \"jbsr %1,a1\";
+ /* The ',a1' is a dummy argument telling the Sun assembler we want PIC
+ GAS just plain ignores it. */
+ return \"jbsr %1,a1\";
#endif
+ }
return \"jsr %1\";
")
@@ -6924,11 +6989,13 @@
if (TARGET_68040)
output_asm_insn (\"add%.w %1,%0\", xoperands);
else
+ {
#ifdef MOTOROLA
- output_asm_insn (\"lea (%c1,%0),%0\", xoperands);
+ output_asm_insn (\"lea (%c1,%0),%0\", xoperands);
#else
- output_asm_insn (\"lea %0@(%c1),%0\", xoperands);
+ output_asm_insn (\"lea %0@(%c1),%0\", xoperands);
#endif
+ }
}
else
output_asm_insn (\"add%.l %1,%0\", xoperands);
diff --git a/gcc/config/m68k/m68kemb.h b/gcc/config/m68k/m68kemb.h
index 016a13b667f..4c02e1be6e6 100644
--- a/gcc/config/m68k/m68kemb.h
+++ b/gcc/config/m68k/m68kemb.h
@@ -43,7 +43,7 @@
-Amachine(mc68000)"
/* Override the default LIB_SPEC from gcc.c. We don't currently support
- profiling, or libg.a
+ profiling, or libg.a. */
#define LIB_SPEC "-lc"
diff --git a/gcc/config/m68k/mot3300-crt0.S b/gcc/config/m68k/mot3300-crt0.S
index c86e56b719b..66d9c58e076 100644
--- a/gcc/config/m68k/mot3300-crt0.S
+++ b/gcc/config/m68k/mot3300-crt0.S
@@ -26,7 +26,7 @@ Boston, MA 02111-1307, USA. */
# define FILE(n) file n
# define GLOBAL_SYM(s) global s
# define LOCAL_LABEL(l) L%##l
-# define SECTION(n) section n
+# define IDENT(s) ident s
# define TEXT text
#else /* Assume we are using GNU as. */
# define COMM .comm
@@ -35,8 +35,7 @@ Boston, MA 02111-1307, USA. */
# define FILE(name) .file name
# define GLOBAL_SYM(s) .globl s
# define LOCAL_LABEL(l) .L.##l
-# define SECTION(n) .section n
-# define STRING(s) .asciz s
+# define IDENT(s) .section .comment;.asciz s
# define TEXT .text
#endif
@@ -86,24 +85,14 @@ LOCAL_LABEL(isatty):
trap &0
nop
+ GLOBAL_SYM (__stop_monitor)
+__stop_monitor:
+ rts
EVEN
COMM splimit%,4
COMM environ,4
- COMM mcount,4
- COMM mcount%,4
- COMM monitor,4
-
-#ifdef STRING
- SECTION (.comment)
- STRING ("$Id: crt0.S,v 1.6 1995/12/07 17:17:47 manfred Exp $\n")
- STRING ("Contributed by manfred@lts.sel.alcatel.de (Manfred Hollstein, Germany)\n")
-#else
- byte 'C,'o,'n,'t,'r,'i,'b,'u,'t,'e,'d,' ,'b,'y
- byte ' ,'m,'a,'n,'f,'r,'e,'d,'@,'l,'t,'s,'.,'s
- byte 'e,'l,'.,'a,'l,'c,'a,'t,'e,'l,'.,'d,'e,'
- byte '(,'M,'a,'n,'f,'r,'e,'d,' ,'H,'o,'l,'l,'s
- byte 't,'e,'i,'n,',,' ,'G,'e,'r,'m,'a,'n,'y,')
- byte 10,0
-#endif
+ IDENT ("$Id: mot3300-crt0.S,v 1.1 1996/03/04 23:40:43 kenner Exp $")
+ IDENT ("Contributed by Manfred Hollstein (manfred@lts.sel.alcatel.de)")
+ IDENT ("Corrections by Philippe De Muyter (phdm@macqel.be)")
diff --git a/gcc/config/m68k/mot3300.h b/gcc/config/m68k/mot3300.h
index fc3cc52dfd0..65c2f476043 100644
--- a/gcc/config/m68k/mot3300.h
+++ b/gcc/config/m68k/mot3300.h
@@ -147,13 +147,8 @@ Boston, MA 02111-1307, USA. */
asm_fprintf (FILE, "\tmov.l %Ra0,%Rd0\n"); }
#undef FUNCTION_PROFILER
-#ifndef USE_GAS
-#define FUNCTION_PROFILER(FILE, LABEL_NO) \
- asm_fprintf (FILE, "\tmov.l %ILP%%%d,%Ra0\n\tjsr mcount%%\n", (LABEL_NO))
-#else /* USE_GAS */
#define FUNCTION_PROFILER(FILE, LABEL_NO) \
- asm_fprintf (FILE, "\tmov.l %I%.LP%d,%Ra0\n\tjsr mcount%%\n", (LABEL_NO))
-#endif /* USE_GAS */
+ asm_fprintf (FILE, "\tmov.l %I%LLP%d,%Ra0\n\tjsr mcount%%\n", (LABEL_NO))
/* This is how to output an insn to push a register on the stack.
It need not be very fast code. */
@@ -184,6 +179,9 @@ Boston, MA 02111-1307, USA. */
#undef ASCII_DATA_ASM_OP
#define ASCII_DATA_ASM_OP "byte"
+#undef SET_ASM_OP
+#define SET_ASM_OP "set"
+
#endif /* USE_GAS */
#ifdef USE_GLD
@@ -353,7 +351,7 @@ dtors_section () \
#undef ASM_BYTE
#define ASM_BYTE ".byte"
#undef ASM_BYTE_OP
-#define ASM_BYTE_OP "\t.byte"
+#define ASM_BYTE_OP ".byte"
#else
#undef ASM_LONG
#define ASM_LONG "long"
@@ -364,7 +362,7 @@ dtors_section () \
#undef ASM_BYTE
#define ASM_BYTE "byte"
#undef ASM_BYTE_OP
-#define ASM_BYTE_OP "\tbyte"
+#define ASM_BYTE_OP "byte"
#endif /* USE_GAS */
/* The sysV68 as doesn't know about double's and float's. */
@@ -433,10 +431,8 @@ do { long l; \
#undef ASM_OUTPUT_ALIGN
#define ASM_OUTPUT_ALIGN(FILE,LOG) \
- if ((LOG) == 1) \
- fprintf (FILE, "\t%s\n", ALIGN_ASM_OP); \
- else if ((LOG) != 0) \
- abort ();
+ if ((LOG) >= 1) \
+ fprintf (FILE, "\t%s\n", ALIGN_ASM_OP);
#ifndef USE_GAS
#define SKIP_ASM_OP "space"
@@ -475,7 +471,7 @@ do { long l; \
#undef ASM_OUTPUT_ASCII
#define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \
do { register int sp = 0, lp = 0; \
- fprintf ((FILE), "%s\t", ASM_BYTE_OP); \
+ fprintf ((FILE), "\t%s\t", ASM_BYTE_OP); \
loop: \
if ((PTR)[sp] > ' ' && ! ((PTR)[sp] & 0x80) && (PTR)[sp] != '\\') \
{ lp += 3; \
@@ -796,20 +792,25 @@ do {(CUM).offset = 0;\
#define MATH_LIBRARY "-lm881"
#endif
-/* Currently we do not have the atexit() function;
- * so take that from libgcc2.c
- */
+/* Currently we do not have the atexit() function,
+ so take that from libgcc2.c */
#define NEED_ATEXIT 1
#define HAVE_ATEXIT 1
#define EXIT_BODY \
do \
- { extern void monitor (); \
- extern long mcount asm ("mcount%"); \
- extern long etext; \
- \
- if (&mcount < &etext) \
- monitor (0); \
+ { \
+ __stop_monitor (); \
_cleanup (); \
} while (0)
+
+/* FINALIZE_TRAMPOLINE clears the instruction cache. */
+
+#undef FINALIZE_TRAMPOLINE
+#define FINALIZE_TRAMPOLINE(TRAMP) \
+ if (!TARGET_68040) \
+ ; \
+ else \
+ emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "__clear_insn_cache"), \
+ 0, VOIDmode, 0)
diff --git a/gcc/config/m68k/mot3300Mcrt0.S b/gcc/config/m68k/mot3300Mcrt0.S
index 52561e630d1..b0a9dd920f7 100644
--- a/gcc/config/m68k/mot3300Mcrt0.S
+++ b/gcc/config/m68k/mot3300Mcrt0.S
@@ -1,5 +1,5 @@
/* The start module mcrt0.s for the SysV68 Motorola 3300 Delta Series.
- Copyright (C) 1996 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Contributed by Manfred Hollstein (manfred@lts.sel.alcatel.de).
This file is part of GNU CC.
@@ -26,7 +26,7 @@ Boston, MA 02111-1307, USA. */
# define FILE(n) file n
# define GLOBAL_SYM(s) global s
# define LOCAL_LABEL(l) L%##l
-# define SECTION(n) section n
+# define IDENT(s) ident s
# define TEXT text
#else /* Assume we are using GNU as. */
# define COMM .comm
@@ -35,8 +35,7 @@ Boston, MA 02111-1307, USA. */
# define FILE(name) .file name
# define GLOBAL_SYM(s) .globl s
# define LOCAL_LABEL(l) .L.##l
-# define SECTION(n) .section n
-# define STRING(s) .asciz s
+# define IDENT(s) .section .comment;.asciz s
# define TEXT .text
#endif
@@ -110,30 +109,27 @@ LOCAL_LABEL(isatty):
jsr exit
_exit: moveq &1,%d0
trap &0
-
- GLOBAL_SYM (mcount)
- EVEN
-mcount: bra mcount%
+ GLOBAL_SYM (__stop_monitor)
+__stop_monitor:
+ clr.l -(%sp)
+ jsr monitor
+ add.w &4,%sp
+ rts
LOCAL_LABEL(errtxt):
-#ifdef STRING
- STRING ("No space for monitor buffer\n")
-#else
byte 'N,'o,' ,'s,'p,'a,'c,'e,' ,'f,'o,'r,' ,'m,'o,'n
- byte 'i,'t,'o,'r,' ,'b,'u,'f,'f,'e,'r,'\n,0
-#endif
+ byte 'i,'t,'o,'r,' ,'b,'u,'f,'f,'e,'r,'\n
+LOCAL_LABEL(errtxt_end):
EVEN
LOCAL_LABEL(3):
- mov.l &28,-(%sp)
- mov.l &LOCAL_LABEL(errtxt),-(%sp)
- moveq &2,%d0
- mov.l %d0,-(%sp)
+ pea LOCAL_LABEL(errtxt_end)-LOCAL_LABEL(errtxt)
+ pea LOCAL_LABEL(errtxt)(%pc)
+ pea 2
jsr write
bra.b _exit
LOCAL_LABEL(endofstart):
- nop
EVEN
@@ -141,15 +137,6 @@ LOCAL_LABEL(endofstart):
COMM environ,4
COMM _countbase,4
-#ifdef STRING
- SECTION (.comment)
- STRING ("$Id: mcrt0.S,v 1.5 1995/12/07 17:23:39 manfred Exp $\n")
- STRING ("Contributed by manfred@lts.sel.alcatel.de (Manfred Hollstein, Germany)\n")
-#else
- byte 'C,'o,'n,'t,'r,'i,'b,'u,'t,'e,'d,' ,'b,'y
- byte ' ,'m,'a,'n,'f,'r,'e,'d,'@,'l,'t,'s,'.,'s
- byte 'e,'l,'.,'a,'l,'c,'a,'t,'e,'l,'.,'d,'e,'
- byte '(,'M,'a,'n,'f,'r,'e,'d,' ,'H,'o,'l,'l,'s
- byte 't,'e,'i,'n,',,' ,'G,'e,'r,'m,'a,'n,'y,')
- byte 10,0
-#endif
+ IDENT ("$Id: mot3300Mcrt0.S,v 1.1 1996/03/04 23:41:33 kenner Exp $")
+ IDENT ("Contributed by Manfred Hollstein (manfred@lts.sel.alcatel.de)")
+ IDENT ("Corrections by Philippe De Muyter (phdm@macqel.be)")
diff --git a/gcc/config/m68k/next.h b/gcc/config/m68k/next.h
index a296e0b1f00..8391ab50cb1 100644
--- a/gcc/config/m68k/next.h
+++ b/gcc/config/m68k/next.h
@@ -172,7 +172,7 @@ Boston, MA 02111-1307, USA. */
Previously, references to labels generated pc-relative addressing modes
while references to symbol names generated absolute addressing modes. */
-#undef GO_IF_INDEXABLE_BASE(X, ADDR)
+#undef GO_IF_INDEXABLE_BASE
#define GO_IF_INDEXABLE_BASE(X, ADDR) \
{ if (LEGITIMATE_BASE_REG_P (X)) goto ADDR; }
diff --git a/gcc/config/m68k/rtems.h b/gcc/config/m68k/rtems.h
index 8bb921db09d..77c02f8e9c8 100644
--- a/gcc/config/m68k/rtems.h
+++ b/gcc/config/m68k/rtems.h
@@ -1,5 +1,5 @@
-/* Definitions for rtems targetting a Motorola m68k using coff.
- Copyright (C) 1996 Free Software Foundation, Inc.
+/* Definitions for rtems targeting a Motorola m68k using coff.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Contributed by Joel Sherrill (joel@OARcorp.com).
This file is part of GNU CC.
@@ -26,5 +26,3 @@ Boston, MA 02111-1307, USA. */
#undef CPP_PREDEFINES
#define CPP_PREDEFINES "-Dmc68000 -Drtems -D__rtems__ \
-Asystem(rtems) -Acpu(mc68000) -Acpu(m68k) -Amachine(m68k)"
-
-/* end of m68k-rtems.h */
diff --git a/gcc/config/m68k/sun2o4.h b/gcc/config/m68k/sun2o4.h
index 6f1ae7a7a6c..da722cfa6ec 100644
--- a/gcc/config/m68k/sun2o4.h
+++ b/gcc/config/m68k/sun2o4.h
@@ -1,5 +1,5 @@
-/* Definitions of target machine for GNU compiler. Sun 2 running Sunos 4.
- Copyright (C) 1987, 1988, 1993, 1996 Free Software Foundation, Inc.
+/* Definitions of target machine for GNU compiler. Sun 2 running SunOS 4.
+ Copyright (C) 1987, 1988, 1993, 1996, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
diff --git a/gcc/config/m68k/sun3mach.h b/gcc/config/m68k/sun3mach.h
index 86c48d0f7c3..1c76cc4b828 100644
--- a/gcc/config/m68k/sun3mach.h
+++ b/gcc/config/m68k/sun3mach.h
@@ -6,7 +6,7 @@
/* Specify extra dir to search for include files. */
#define SYSTEM_INCLUDE_DIR "/usr/mach/include"
-/* LINK_SPEC is needed only for Sunos 4. */
+/* LINK_SPEC is needed only for SunOS 4. */
#undef LINK_SPEC
diff --git a/gcc/config/m68k/sun3n3.h b/gcc/config/m68k/sun3n3.h
index 1c962bd68b8..38680d805e2 100644
--- a/gcc/config/m68k/sun3n3.h
+++ b/gcc/config/m68k/sun3n3.h
@@ -1,5 +1,5 @@
#include "m68k/sun3n.h"
-/* LINK_SPEC is needed only for Sunos 4. */
+/* LINK_SPEC is needed only for SunOS 4. */
#undef LINK_SPEC
diff --git a/gcc/config/m68k/sun3o3.h b/gcc/config/m68k/sun3o3.h
index 4d3e3dd2584..95f1ff65d03 100644
--- a/gcc/config/m68k/sun3o3.h
+++ b/gcc/config/m68k/sun3o3.h
@@ -1,5 +1,5 @@
#include "m68k/sun3.h"
-/* LINK_SPEC is needed only for Sunos 4. */
+/* LINK_SPEC is needed only for SunOS 4. */
#undef LINK_SPEC
diff --git a/gcc/config/m68k/t-linux b/gcc/config/m68k/t-linux
index 169661f6296..b60654d3895 100644
--- a/gcc/config/m68k/t-linux
+++ b/gcc/config/m68k/t-linux
@@ -3,7 +3,7 @@ STMP_FIXPROTO =
# Don't make libgcc1.a
LIBGCC1 =
CROSS_LIBGCC1 =
-# On Linux we can print long double
+# On GNU/Linux we can print long double
ENQUIRE_CFLAGS = -DNO_MEM -O0
# Don't install assert.h
INSTALL_ASSERT_H =
diff --git a/gcc/config/m68k/t-linux-aout b/gcc/config/m68k/t-linux-aout
index 85f13a7f1ed..4ef9e1acaed 100644
--- a/gcc/config/m68k/t-linux-aout
+++ b/gcc/config/m68k/t-linux-aout
@@ -1,5 +1,5 @@
# Don't make libgcc1.a
LIBGCC1 =
CROSS_LIBGCC1 =
-# On Linux we can print long double
+# On GNU/Linux we can print long double
ENQUIRE_CFLAGS = -DNO_MEM -O0
diff --git a/gcc/config/m68k/t-vxworks68 b/gcc/config/m68k/t-vxworks68
index 7be1bb0ee76..7fa59430a28 100644
--- a/gcc/config/m68k/t-vxworks68
+++ b/gcc/config/m68k/t-vxworks68
@@ -7,7 +7,7 @@ LIB1ASMFUNCS = _mulsi3 _udivsi3 _divsi3 _umodsi3 _modsi3 \
# We don't want to put exit in libgcc.a for VxWorks, because VxWorks
# does not have _exit.
-LIBGCC2_CFLAGS = -O2 $(GCC_CFLAGS) -g1 -Dexit=unused_exit
+TARGET_LIBGCC2_CFLAGS = -Dexit=unused_exit
# These are really part of libgcc1, but this will cause them to be
# built correctly, so...
diff --git a/gcc/config/m68k/x-hp3bsd44 b/gcc/config/m68k/x-hp3bsd44
index 936b5797801..b8dffd03805 100644
--- a/gcc/config/m68k/x-hp3bsd44
+++ b/gcc/config/m68k/x-hp3bsd44
@@ -1,2 +1 @@
-CC=/usr/local/bin/gcc
-INSTALL_HEADERS=
+USER_H = $(EXTRA_HEADERS) $(LANG_EXTRA_HEADERS)
diff --git a/gcc/config/m68k/xm-3b1.h b/gcc/config/m68k/xm-3b1.h
index 9d6ad5412a3..c966bc16309 100644
--- a/gcc/config/m68k/xm-3b1.h
+++ b/gcc/config/m68k/xm-3b1.h
@@ -2,12 +2,6 @@
#include "m68k/xm-m68k.h"
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define bcmp(a,b,c) memcmp (a,b,c)
-#define index strchr
-#define rindex strrchr
-
/* Override part of the obstack macros. */
#define __PTR_TO_INT(P) ((int)(P))
diff --git a/gcc/config/m68k/xm-atari.h b/gcc/config/m68k/xm-atari.h
index a28a98606ef..323d89052c0 100644
--- a/gcc/config/m68k/xm-atari.h
+++ b/gcc/config/m68k/xm-atari.h
@@ -1,6 +1,6 @@
/* Definitions of host machine for GNU compiler.
Atari TT ASV version.
- Copyright (C) 1994, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1994, 1995, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
diff --git a/gcc/config/m68k/xm-crds.h b/gcc/config/m68k/xm-crds.h
index 3bd3461ce10..80925dc8714 100644
--- a/gcc/config/m68k/xm-crds.h
+++ b/gcc/config/m68k/xm-crds.h
@@ -6,13 +6,6 @@
#include "m68k/xm-m68k.h"
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define bcmp(a,b,c) memcmp (a,b,c)
-
-/* UNOS has vprintf() */
-#define HAVE_VPRINTF
-
/* Avoid conflict with C library by changing name of this symbol. */
#define gettime gcc_gettime
diff --git a/gcc/config/m68k/xm-mot3300.h b/gcc/config/m68k/xm-mot3300.h
index b20be33f99e..c61bd293e25 100644
--- a/gcc/config/m68k/xm-mot3300.h
+++ b/gcc/config/m68k/xm-mot3300.h
@@ -1,6 +1,6 @@
/* Configuration for GNU C-compiler for Motorola 68000 family.
SysV68 Motorola 3300 Delta Series
- Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -24,22 +24,23 @@ Boston, MA 02111-1307, USA. */
#include "m68k/xm-m68k.h"
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define bcmp(a,b,c) memcmp (a,b,c)
-
-#define rindex strrchr
-#define index strchr
-
#define NO_SYS_SIGLIST
/* do not use alloca from -lPW with cc, because function epilogues use %sp */
#ifndef __GNUC__
#define USE_C_ALLOCA
+#ifdef __STDC__
+extern void *alloca ();
+#else
extern char *alloca ();
#endif
+#endif
/* Override part of the obstack macros. */
#define __PTR_TO_INT(P) ((int)(P))
#define __INT_TO_PTR(P) ((char *)(P))
+
+/* We need POSIX/XOPEN symbols; otherwise make check will fail. */
+#define ADD_MISSING_POSIX 1
+#define ADD_MISSING_XOPEN 1
diff --git a/gcc/config/m68k/xm-plexus.h b/gcc/config/m68k/xm-plexus.h
index 6d191ceed26..fbc9a32846e 100644
--- a/gcc/config/m68k/xm-plexus.h
+++ b/gcc/config/m68k/xm-plexus.h
@@ -3,13 +3,6 @@
#include "m68k/xm-m68k.h"
#define USG
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define bcmp(a,b,c) memcmp (a,b,c)
-
-#define rindex strrchr
-#define index strchr
-
#ifndef __GNUC__
#define USE_C_ALLOCA
#endif
diff --git a/gcc/config/m88k/dgux.h b/gcc/config/m88k/dgux.h
index edeffdf4f16..e767701b90b 100644
--- a/gcc/config/m88k/dgux.h
+++ b/gcc/config/m88k/dgux.h
@@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler.
Motorola m88100 running DG/UX.
- Copyright (C) 1988, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1988, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@mcc.com)
Currently maintained by (gcc@dg-rtp.dg.com)
@@ -30,7 +30,7 @@ Boston, MA 02111-1307, USA. */
(TARGET_SVR4 ? DWARF_DEBUG : SDB_DEBUG)
#ifndef VERSION_INFO2
-#define VERSION_INFO2 "$Revision: 1.23 $"
+#define VERSION_INFO2 "$Revision: 1.24 $"
#endif
#ifndef NO_BUGS
#define AS_BUG_IMMEDIATE_LABEL
@@ -134,16 +134,18 @@ Boston, MA 02111-1307, USA. */
{ "startfile_default", STARTFILE_DEFAULT_SPEC }, \
{ "startfile_crtbegin", STARTFILE_CRTBEGIN_SPEC }
+/* Keep this left justified, no white space is allowed between
+ the arguments to the -Wc option */
#define ASM_CPU_SPEC "\
- %{v:-V}\
- %{g:\
- %{mno-legend:-Wc,off}\
- %{!mno-legend:-Wc,-fix-bb,-s\"%i\"\
- %{traditional:,-lc}\
- %{!traditional:,-lansi-c}\
- %{mstandard:,-keep-std}\
- %{mexternal-legend:,-external}\
- %{mocs-frame-position:,-ocs}}}"
+%{v:-V} \
+%{g:\
+%{mno-legend:-Wc,off}\
+%{!mno-legend:-Wc,-fix-bb,-s\"%i\"\
+%{traditional:,-lc}\
+%{!traditional:,-lansi-c}\
+%{mstandard:,-keep-std}\
+%{mexternal-legend:,-external}\
+%{mocs-frame-position:,-ocs}}}"
#define CPP_CPU_SPEC "\
%{!m88000:%{!m88100:%{m88110:-D__m88110__}}} \
diff --git a/gcc/config/m88k/dolph.h b/gcc/config/m88k/dolph.h
index 48c0378636a..bd772273d3f 100644
--- a/gcc/config/m88k/dolph.h
+++ b/gcc/config/m88k/dolph.h
@@ -1,7 +1,7 @@
/* Definitions of target machine for GNU compiler.
Motorola m88100 running the Dolphin UNIX System V/88 Release 3.2,
Version 3.8/7.83 and 3.6/5.86
- Copyright (C) 1992, 1993 Free Software Foundation, Inc.
+ Copyright (C) 1992, 1993, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -41,14 +41,3 @@ Boston, MA 02111-1307, USA. */
#undef CPU_DEFAULT
#define CPU_DEFAULT MASK_88000
-
-#undef INITIALIZE_TRAMPOLINE
-#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
-{ \
- emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 40)), FNADDR); \
- emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 36)), CXT); \
- emit_call_insn (gen_call( gen_rtx (MEM, SImode, \
- gen_rtx(SYMBOL_REF,Pmode, \
- "__enable_execute_stack")), \
- const0_rtx)); \
-}
diff --git a/gcc/config/m88k/luna.h b/gcc/config/m88k/luna.h
index 677afcdae56..ab6dbded109 100644
--- a/gcc/config/m88k/luna.h
+++ b/gcc/config/m88k/luna.h
@@ -1,7 +1,7 @@
/* Definitions of target machine for GNU compiler.
Motorola m88100 running Omron Luna/88k.
- Copyright (C) 1991 Free Software Foundation, Inc.
- Contributed by Jeffery Friedl (jfriedl@omron.co.jp)
+ Copyright (C) 1991, 1997 Free Software Foundation, Inc.
+ Contributed by Jeffrey Friedl (jfriedl@omron.co.jp)
This file is part of GNU CC.
diff --git a/gcc/config/m88k/m88k.c b/gcc/config/m88k/m88k.c
index b3138376b66..7c2debe018e 100644
--- a/gcc/config/m88k/m88k.c
+++ b/gcc/config/m88k/m88k.c
@@ -1,5 +1,5 @@
/* Subroutines for insn-output.c for Motorola 88000.
- Copyright (C) 1988, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1988, 92, 93, 94, 95, 16, 1997 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@mcc.com)
Currently maintained by (gcc@dg-rtp.dg.com)
@@ -20,13 +20,13 @@ 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 <stdio.h>
#include <sys/types.h>
#include <time.h>
#include <ctype.h>
-#include "assert.h"
-#include "config.h"
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
@@ -500,9 +500,10 @@ expand_block_move (dest_mem, src_mem, operands)
int bytes = (constp ? INTVAL (operands[2]) : 0);
int target = (int) m88k_cpu;
- assert (PROCESSOR_M88100 == 0);
- assert (PROCESSOR_M88110 == 1);
- assert (PROCESSOR_M88000 == 2);
+ if (! (PROCESSOR_M88100 == 0
+ && PROCESSOR_M88110 == 1
+ && PROCESSOR_M88000 == 2))
+ abort ();
if (constp && bytes <= 0)
return;
@@ -1938,7 +1939,7 @@ m88k_begin_prologue (stream, size)
int size;
{
if (TARGET_OMIT_LEAF_FRAME_POINTER && ! quiet_flag && leaf_function_p ())
- fprintf (stderr, "$");\
+ fprintf (stderr, "$");
m88k_prologue_done = 1; /* it's ok now to put out ln directives */
}
@@ -2585,7 +2586,7 @@ struct rtx_def *
m88k_builtin_saveregs (arglist)
tree arglist;
{
- rtx block, addr, argsize;
+ rtx block, addr, argsize, dest;
tree fntype = TREE_TYPE (current_function_decl);
int argadj = ((!(TYPE_ARG_TYPES (fntype) != 0
&& (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype)))
@@ -2610,6 +2611,7 @@ m88k_builtin_saveregs (arglist)
/* Allocate the va_list constructor */
block = assign_stack_local (BLKmode, 3 * UNITS_PER_WORD, BITS_PER_WORD);
+ MEM_IN_STRUCT_P (block) = 1;
RTX_UNCHANGING_P (block) = 1;
RTX_UNCHANGING_P (XEXP (block, 0)) = 1;
@@ -2635,12 +2637,29 @@ m88k_builtin_saveregs (arglist)
/* Now store the incoming registers. */
if (fixed < 8)
- move_block_from_reg
- (2 + fixed,
- change_address (addr, Pmode,
- plus_constant (XEXP (addr, 0),
- fixed * UNITS_PER_WORD)),
- 8 - fixed, UNITS_PER_WORD * (8 - fixed));
+ {
+ dest = change_address (addr, Pmode,
+ plus_constant (XEXP (addr, 0),
+ fixed * UNITS_PER_WORD));
+ move_block_from_reg (2 + fixed, dest, 8 - fixed,
+ UNITS_PER_WORD * (8 - fixed));
+ }
+
+ if (flag_check_memory_usage)
+ {
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ block, ptr_mode,
+ GEN_INT (3 * UNITS_PER_WORD), TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_RW),
+ TYPE_MODE (integer_type_node));
+ if (fixed < 8)
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ dest, ptr_mode,
+ GEN_INT (UNITS_PER_WORD * (8 - fixed)),
+ TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_RW),
+ TYPE_MODE (integer_type_node));
+ }
/* Return the address of the va_list constructor, but don't put it in a
register. This fails when not optimizing and produces worse code when
diff --git a/gcc/config/m88k/m88k.h b/gcc/config/m88k/m88k.h
index 8a45610a9b2..3719d654ed4 100644
--- a/gcc/config/m88k/m88k.h
+++ b/gcc/config/m88k/m88k.h
@@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler for
Motorola m88100 in an 88open OCS/BCS environment.
- Copyright (C) 1988, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1988, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com).
Currently maintained by (gcc@dg-rtp.dg.com)
@@ -198,13 +198,13 @@ extern char * reg_names[];
Redefined in sysv4.h, and luna.h. */
#define VERSION_INFO1 "m88k, "
#ifndef VERSION_INFO2
-#define VERSION_INFO2 "$Revision: 1.72 $"
+#define VERSION_INFO2 "$Revision: 1.73 $"
#endif
#ifndef VERSION_STRING
#define VERSION_STRING version_string
#ifdef __STDC__
-#define TM_RCS_ID "@(#)" __FILE__ " $Revision: 1.72 $ " __DATE__
+#define TM_RCS_ID "@(#)" __FILE__ " $Revision: 1.73 $ " __DATE__
#else
#define TM_RCS_ID "$What: <@(#) m88k.h,v 1.1.1.2.2.2> $"
#endif /* __STDC__ */
@@ -1547,6 +1547,7 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
/* Tell when to handle #pragma weak. This is only done for V.4. */
#define SUPPORTS_WEAK TARGET_SVR4
+#define SUPPORTS_ONE_ONLY TARGET_SVR4
/* Max number of bytes we can move from memory to memory
in one reasonably fast instruction. */
diff --git a/gcc/config/m88k/sysv3.h b/gcc/config/m88k/sysv3.h
index 62fe8973d4f..ef351897398 100644
--- a/gcc/config/m88k/sysv3.h
+++ b/gcc/config/m88k/sysv3.h
@@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler.
Motorola m88100 running the AT&T/Unisoft/Motorola V.3 reference port.
- Copyright (C) 1990, 1991 Free Software Foundation, Inc.
+ Copyright (C) 1990, 1991, 1997 Free Software Foundation, Inc.
Contributed by Ray Essick (ressick@mot.com)
Enhanced by Tom Wood (Tom_Wood@NeXT.com)
@@ -137,3 +137,14 @@ do { \
if (((int *)__DTOR_LIST__)[i] != -1) \
__DTOR_LIST__[i] (); \
} while (0)
+
+#undef INITIALIZE_TRAMPOLINE
+#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
+{ \
+ emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 40)), FNADDR); \
+ emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 36)), CXT); \
+ emit_call_insn (gen_call (gen_rtx (MEM, SImode, \
+ gen_rtx (SYMBOL_REF, Pmode, \
+ "__enable_execute_stack")), \
+ const0_rtx)); \
+}
diff --git a/gcc/config/m88k/x-dgux b/gcc/config/m88k/x-dgux
index 9282cfdd752..f2c55a7d79e 100644
--- a/gcc/config/m88k/x-dgux
+++ b/gcc/config/m88k/x-dgux
@@ -1,5 +1,6 @@
CC = gcc
BISONFLAGS = -l
-INSTALL_HEADERS =
+USER_H = $(EXTRA_HEADERS) $(LANG_EXTRA_HEADERS)
+
STMP_FIXPROTO =
X_CFLAGS = -O -mstandard -mlegend
diff --git a/gcc/config/m88k/x-dguxbcs b/gcc/config/m88k/x-dguxbcs
index 8495b8db43d..8baf0caaf3f 100644
--- a/gcc/config/m88k/x-dguxbcs
+++ b/gcc/config/m88k/x-dguxbcs
@@ -1,5 +1,4 @@
CC = gcc
BISONFLAGS = -l
-INSTALL_HEADERS =
+USER_H = $(EXTRA_HEADERS) $(LANG_EXTRA_HEADERS)
STMP_FIXPROTO =
-
diff --git a/gcc/config/m88k/xm-m88k.h b/gcc/config/m88k/xm-m88k.h
index 8691f865643..b330f5980fc 100644
--- a/gcc/config/m88k/xm-m88k.h
+++ b/gcc/config/m88k/xm-m88k.h
@@ -1,6 +1,6 @@
/* Configuration for GNU compiler.
Motorola m88100 in an 88open OCS/BCS environment.
- Copyright (C) 1988, 1989, 1990, 1991, 1993 Free Software Foundation, Inc.
+ Copyright (C) 1988, 89, 90, 91, 93, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -37,24 +37,15 @@ Boston, MA 02111-1307, USA. */
#define SUCCESS_EXIT_CODE 0
#define FATAL_EXIT_CODE 33
-/* Use System V memory functions. */
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define bcmp(a,b,c) memcmp (a,b,c)
-
-#define rindex strrchr
-#define index strchr
-
/* The 88open BCS (and ABI) environment doesn't support BSD features
(vfork, getrusage), so use USG. The Omron Luna/88k is BSD though. */
#ifndef luna88k
+#ifndef USG
#define USG
+#endif
#define NO_SYS_SIGLIST
#endif
-/* Define HAVE_VPRINTF if it is available on host system. */
-#define HAVE_VPRINTF
-
/* If not compiled with GNU C, use the C alloca */
#ifndef __GNUC__
#define USE_C_ALLOCA
diff --git a/gcc/config/m88k/xm-sysv3.h b/gcc/config/m88k/xm-sysv3.h
index 05d3e4cf4d4..3e8ab39dc95 100644
--- a/gcc/config/m88k/xm-sysv3.h
+++ b/gcc/config/m88k/xm-sysv3.h
@@ -1,6 +1,6 @@
/* Configuration for GNU C-compiler.
Motorola m88100 running the AT&T/Unisoft/Motorola V.3 reference port.
- Copyright (C) 1990 Free Software Foundation, Inc.
+ Copyright (C) 1990, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -28,3 +28,7 @@ Boston, MA 02111-1307, USA. */
/* for the emacs version of alloca */
#define STACK_DIRECTION -1
+
+/* We need POSIX/XOPEN symbols; otherwise make check will fail. */
+#define ADD_MISSING_POSIX 1
+#define ADD_MISSING_XOPEN 1
diff --git a/gcc/config/mips/abi64.h b/gcc/config/mips/abi64.h
index 1cf561a6803..a3e768cdc2d 100644
--- a/gcc/config/mips/abi64.h
+++ b/gcc/config/mips/abi64.h
@@ -213,6 +213,9 @@ extern struct rtx_def *mips_function_value ();
(mips_abi == ABI_EABI && (NAMED) \
&& FUNCTION_ARG_PASS_BY_REFERENCE (CUM, MODE, TYPE, NAMED))
+#undef LONG_MAX_SPEC
+#define LONG_MAX_SPEC "%{!mno-long64:-D__LONG_MAX__=9223372036854775807LL}"
+
/* ??? Unimplemented stuff follows. */
/* ??? Add support for 16 byte/128 bit long doubles here when
@@ -227,3 +230,5 @@ extern struct rtx_def *mips_function_value ();
into the field decl, so that if we use the field, we can take the value from
a register instead of from memory. */
+
+
diff --git a/gcc/config/mips/elf.h b/gcc/config/mips/elf.h
index 8f5e32be396..51ca470dfa3 100644
--- a/gcc/config/mips/elf.h
+++ b/gcc/config/mips/elf.h
@@ -24,7 +24,9 @@ Boston, MA 02111-1307, USA. */
/* Until we figure out what MIPS ELF targets normally use, just do
stabs in ELF. */
+#ifndef PREFERRED_DEBUGGING_TYPE
#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
+#endif
/* Mostly like ECOFF. */
#include "mips/ecoff.h"
diff --git a/gcc/config/mips/iris5.h b/gcc/config/mips/iris5.h
index d7840b45a4a..54cedc4fcd3 100644
--- a/gcc/config/mips/iris5.h
+++ b/gcc/config/mips/iris5.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler. Iris version 5.
- Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1993, 1995, 1996, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -122,6 +122,9 @@ Boston, MA 02111-1307, USA. */
#undef SDB_DEBUGGING_INFO
#undef MIPS_DEBUGGING_INFO
+/* Likewise, the assembler doesn't handle DWARF2 directives. */
+#define DWARF2_UNWIND_INFO 0
+
#undef MACHINE_TYPE
#define MACHINE_TYPE "SGI running IRIX 5.x"
diff --git a/gcc/config/mips/iris5gas.h b/gcc/config/mips/iris5gas.h
index e519df72b25..adc90e83223 100644
--- a/gcc/config/mips/iris5gas.h
+++ b/gcc/config/mips/iris5gas.h
@@ -7,6 +7,10 @@
#define SDB_DEBUGGING_INFO
#define MIPS_DEBUGGING_INFO
+/* GNU as does handle DWARF2 directives. */
+#undef DWARF2_UNWIND_INFO
+#define DWARF2_UNWIND_INFO 1
+
/* Irix 5 does not have some strange restrictions that Irix 3 had. */
#undef SET_FILE_NUMBER
#define SET_FILE_NUMBER() ++num_source_filenames
diff --git a/gcc/config/mips/iris6.h b/gcc/config/mips/iris6.h
index 3521fdd3b3b..0d88750f7b8 100644
--- a/gcc/config/mips/iris6.h
+++ b/gcc/config/mips/iris6.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler. Iris version 6.
- Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -30,9 +30,8 @@ Boston, MA 02111-1307, USA. */
#include "mips/iris5.h"
#include "mips/abi64.h"
-/* For Irix 6, -mips3 implies TARGET_LONG64. */
-#undef TARGET_LONG64
-#define TARGET_LONG64 (mips_abi == ABI_64)
+/* For Irix 6, -mabi=64 implies TARGET_LONG64. */
+/* This is handled in override_options. */
#undef SUBTARGET_CC1_SPEC
#define SUBTARGET_CC1_SPEC "%{static: -mno-abicalls}"
@@ -141,7 +140,7 @@ Boston, MA 02111-1307, USA. */
} while (0)
/* Tell function_prologue in mips.c that we have already output the .ent/.end
- psuedo-ops. */
+ pseudo-ops. */
#define FUNCTION_NAME_ALREADY_DECLARED
#undef SET_ASM_OP /* Has no equivalent. See ASM_OUTPUT_DEF below. */
@@ -249,6 +248,10 @@ Boston, MA 02111-1307, USA. */
(TARGET_LONG64 ? ".section\t.dtors,1,2,0,8" : ".section\t.dtors,1,2,0,4")
#endif /* defined (CRT_BEGIN) || defined (CRT_END) */
+/* dwarf2out will handle padding this data properly. We definitely don't
+ want it 8-byte aligned on n32. */
+#define EH_FRAME_SECTION_ASM_OP ".section\t.eh_frame,1,2,0,1"
+
/* A default list of other sections which we might be "in" at any given
time. For targets that use additional sections (e.g. .tdesc) you
should override this definition in the target-specific file which
@@ -496,18 +499,18 @@ do { \
%{!pg:%{p:/usr/lib32/mips3/nonshared/mcrt1.o%s \
/usr/lib32/mips3/nonshared/libprof1.a%s} \
%{!p:/usr/lib32/mips3/nonshared/crt1.o%s}}}}}} \
- %{mabi=n32: %{mips4:-L/usr/lib32/mips4} %{!mips4:-L/usr/lib32/mips3} \
+ crtbegin.o%s"
+
+#undef LIB_SPEC
+#define LIB_SPEC \
+ "%{mabi=n32: %{mips4:-L/usr/lib32/mips4} %{!mips4:-L/usr/lib32/mips3} \
-L/usr/lib32} \
%{mabi=64: %{mips4:-L/usr/lib64/mips4} %{!mips4:-L/usr/lib64/mips3} \
-L/usr/lib64} \
%{!mabi*: %{mips4:-L/usr/lib32/mips4} %{!mips4:-L/usr/lib32/mips3} \
-L/usr/lib32} \
- crtbegin.o%s"
-
-#undef LIB_SPEC
-#define LIB_SPEC "\
-%{!shared: \
- -dont_warn_unused %{p:libprof1.a%s}%{pg:libprof1.a%s} -lc -warn_unused}"
+ %{!shared: \
+ -dont_warn_unused %{p:libprof1.a%s}%{pg:libprof1.a%s} -lc -warn_unused}"
/* Avoid getting two warnings for libgcc.a everytime we link. */
#undef LIBGCC_SPEC
@@ -538,5 +541,5 @@ do { \
%{!static: \
%{!shared: %{!non_shared: %{!call_shared: -call_shared -no_unresolved}}}} \
%{rpath} -init __do_global_ctors -fini __do_global_dtors \
-%{shared:-hidden_symbol __do_global_ctors,__do_global_dtors} \
+%{shared:-hidden_symbol __do_global_ctors,__do_global_dtors,__EH_FRAME_BEGIN__,__frame_dummy} \
-_SYSTYPE_SVR4 %{mabi=32: -32}%{mabi=n32: -n32}%{mabi=64: -64} %{!mabi*: -n32}"
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 7ebb5083648..79b022b0d68 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -1,5 +1,5 @@
/* Subroutines for insn-output.c for MIPS
- Copyright (C) 1989, 90, 91, 93-95, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1989, 90, 91, 93-97, 1998 Free Software Foundation, Inc.
Contributed by A. Lichnewsky, lich@inria.inria.fr.
Changes by Michael Meissner, meissner@osf.org.
64 bit r4000 support by Ian Lance Taylor, ian@cygnus.com, and
@@ -27,6 +27,9 @@ Boston, MA 02111-1307, USA. */
be replaced with something better designed. */
#include "config.h"
+
+#include <stdio.h>
+
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
@@ -42,7 +45,6 @@ Boston, MA 02111-1307, USA. */
#undef MAX /* sys/param.h may also define these */
#undef MIN
-#include <stdio.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/file.h>
@@ -3208,7 +3210,9 @@ function_arg (cum, mode, type, named)
% BITS_PER_WORD == 0))
break;
- if (! field)
+ /* If the whole struct fits a DFmode register,
+ we don't need the PARALLEL. */
+ if (! field || mode == DFmode)
ret = gen_rtx (REG, mode, regbase + *arg_words + bias);
else
{
@@ -3222,11 +3226,6 @@ function_arg (cum, mode, type, named)
/* ??? If this is a packed structure, then the last hunk won't
be 64 bits. */
- /* ??? If this is a structure with a single double field,
- it would be more convenient to return (REG:DI %fX) than
- a parallel. However, we would have to modify the mips
- backend to allow DImode values in fp registers. */
-
chunks = TREE_INT_CST_LOW (TYPE_SIZE (type)) / BITS_PER_WORD;
if (chunks + *arg_words + bias > MAX_ARGS_IN_REGISTERS)
chunks = MAX_ARGS_IN_REGISTERS - *arg_words - bias;
@@ -3479,8 +3478,10 @@ override_options ()
if (mips_abi == ABI_32)
target_flags &= ~ (MASK_FLOAT64|MASK_64BIT);
- /* In the EABI in 64 bit mode, longs and pointers are 64 bits. */
- if (mips_abi == ABI_EABI && TARGET_64BIT)
+ /* In the EABI in 64 bit mode, longs and pointers are 64 bits. Likewise
+ for the SGI Irix6 N64 ABI. */
+ if ((mips_abi == ABI_EABI && TARGET_64BIT)
+ || mips_abi == ABI_64)
target_flags |= MASK_LONG64;
/* ??? This doesn't work yet, so don't let people try to use it. */
@@ -3555,6 +3556,8 @@ override_options ()
case '3':
if (!strcmp (p, "3000") || !strcmp (p, "3k") || !strcmp (p, "3K"))
mips_cpu = PROCESSOR_R3000;
+ else if (!strcmp (p, "3900"))
+ mips_cpu = PROCESSOR_R3900;
break;
case '4':
@@ -3684,7 +3687,7 @@ override_options ()
}
/* This optimization requires a linker that can support a R_MIPS_LO16
- relocation which is not immediately preceeded by a R_MIPS_HI16 relocation.
+ relocation which is not immediately preceded by a R_MIPS_HI16 relocation.
GNU ld has this support, but not all other MIPS linkers do, so we enable
this optimization only if the user requests it, or if GNU ld is the
standard linker for this configuration. */
@@ -4316,7 +4319,7 @@ mips_output_external (file, decl, name)
#ifdef ASM_OUTPUT_UNDEF_FUNCTION
if (TREE_CODE (decl) == FUNCTION_DECL
/* ??? Don't include alloca, since gcc will always expand it
- inline. If we don't do this, libg++ fails to build. */
+ inline. If we don't do this, the C++ library fails to build. */
&& strcmp (name, "alloca")
/* ??? Don't include __builtin_next_arg, because then gcc will not
bootstrap under Irix 5.1. */
@@ -4855,8 +4858,10 @@ compute_frame_size (size)
/* The gp reg is caller saved in the 32 bit ABI, so there is no need
for leaf routines (total_size == extra_size) to save the gp reg.
The gp reg is callee saved in the 64 bit ABI, so all routines must
- save the gp reg. */
- if (total_size == extra_size && (mips_abi == ABI_32 || mips_abi == ABI_EABI))
+ save the gp reg. This is not a leaf routine if -p, because of the
+ call to mcount. */
+ if (total_size == extra_size && (mips_abi == ABI_32 || mips_abi == ABI_EABI)
+ && ! profile_flag)
total_size = extra_size = 0;
else if (TARGET_ABICALLS)
{
@@ -4989,7 +4994,8 @@ save_restore_insns (store_p, large_reg, large_offset, file)
insn = emit_insn (gen_adddi3 (base_reg_rtx, large_reg, stack_pointer_rtx));
else
insn = emit_insn (gen_addsi3 (base_reg_rtx, large_reg, stack_pointer_rtx));
- RTX_FRAME_RELATED_P (insn) = 1;
+ if (store_p)
+ RTX_FRAME_RELATED_P (insn) = 1;
}
else
fprintf (file, "\t%s\t%s,%s,%s\n",
@@ -5005,13 +5011,38 @@ save_restore_insns (store_p, large_reg, large_offset, file)
base_offset = gp_offset;
if (file == (FILE *)0)
{
- insn = emit_move_insn (base_reg_rtx, GEN_INT (gp_offset));
- RTX_FRAME_RELATED_P (insn) = 1;
+ rtx gp_offset_rtx = GEN_INT (gp_offset);
+
+ /* Instruction splitting doesn't preserve the RTX_FRAME_RELATED_P
+ bit, so make sure that we don't emit anything that can be
+ split. */
+ /* ??? There is no DImode ori immediate pattern, so we can only
+ do this for 32 bit code. */
+ if (large_int (gp_offset_rtx)
+ && GET_MODE (base_reg_rtx) == SImode)
+ {
+ insn = emit_move_insn (base_reg_rtx,
+ GEN_INT (gp_offset & 0xffff0000));
+ if (store_p)
+ RTX_FRAME_RELATED_P (insn) = 1;
+ insn = emit_insn (gen_iorsi3 (base_reg_rtx, base_reg_rtx,
+ GEN_INT (gp_offset & 0x0000ffff)));
+ if (store_p)
+ RTX_FRAME_RELATED_P (insn) = 1;
+ }
+ else
+ {
+ insn = emit_move_insn (base_reg_rtx, gp_offset_rtx);
+ if (store_p)
+ RTX_FRAME_RELATED_P (insn) = 1;
+ }
+
if (TARGET_LONG64)
insn = emit_insn (gen_adddi3 (base_reg_rtx, base_reg_rtx, stack_pointer_rtx));
else
insn = emit_insn (gen_addsi3 (base_reg_rtx, base_reg_rtx, stack_pointer_rtx));
- RTX_FRAME_RELATED_P (insn) = 1;
+ if (store_p)
+ RTX_FRAME_RELATED_P (insn) = 1;
}
else
fprintf (file, "\tli\t%s,0x%.08lx\t# %ld\n\t%s\t%s,%s,%s\n",
@@ -5106,7 +5137,8 @@ save_restore_insns (store_p, large_reg, large_offset, file)
insn = emit_insn (gen_adddi3 (base_reg_rtx, large_reg, stack_pointer_rtx));
else
insn = emit_insn (gen_addsi3 (base_reg_rtx, large_reg, stack_pointer_rtx));
- RTX_FRAME_RELATED_P (insn) = 1;
+ if (store_p)
+ RTX_FRAME_RELATED_P (insn) = 1;
}
else
fprintf (file, "\t%s\t%s,%s,%s\n",
@@ -5122,13 +5154,40 @@ save_restore_insns (store_p, large_reg, large_offset, file)
base_offset = fp_offset;
if (file == (FILE *)0)
{
- insn = emit_move_insn (base_reg_rtx, GEN_INT (fp_offset));
- RTX_FRAME_RELATED_P (insn) = 1;
+ rtx fp_offset_rtx = GEN_INT (fp_offset);
+
+ /* Instruction splitting doesn't preserve the RTX_FRAME_RELATED_P
+ bit, so make sure that we don't emit anything that can be
+ split. */
+ /* ??? There is no DImode ori immediate pattern, so we can only
+ do this for 32 bit code. */
+ if (large_int (fp_offset_rtx)
+ && GET_MODE (base_reg_rtx) == SImode)
+ {
+ insn = emit_move_insn (base_reg_rtx,
+ GEN_INT (fp_offset & 0xffff0000));
+ if (store_p)
+ RTX_FRAME_RELATED_P (insn) = 1;
+ insn = emit_insn (gen_iorsi3 (base_reg_rtx, base_reg_rtx,
+ GEN_INT (fp_offset & 0x0000ffff)));
+ if (store_p)
+ RTX_FRAME_RELATED_P (insn) = 1;
+ }
+ else
+ {
+ insn = emit_move_insn (base_reg_rtx, fp_offset_rtx);
+ if (store_p)
+ RTX_FRAME_RELATED_P (insn) = 1;
+ }
+
+ if (store_p)
+ RTX_FRAME_RELATED_P (insn) = 1;
if (TARGET_LONG64)
insn = emit_insn (gen_adddi3 (base_reg_rtx, base_reg_rtx, stack_pointer_rtx));
else
insn = emit_insn (gen_addsi3 (base_reg_rtx, base_reg_rtx, stack_pointer_rtx));
- RTX_FRAME_RELATED_P (insn) = 1;
+ if (store_p)
+ RTX_FRAME_RELATED_P (insn) = 1;
}
else
fprintf (file, "\tli\t%s,0x%.08lx\t# %ld\n\t%s\t%s,%s,%s\n",
@@ -5204,29 +5263,35 @@ function_prologue (file, size)
exactly matches the name used in ASM_DECLARE_FUNCTION_NAME. */
fnname = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0);
- fputs ("\t.ent\t", file);
- assemble_name (file, fnname);
- fputs ("\n", file);
+ if (!flag_inhibit_size_directive)
+ {
+ fputs ("\t.ent\t", file);
+ assemble_name (file, fnname);
+ fputs ("\n", file);
+ }
assemble_name (file, fnname);
fputs (":\n", file);
#endif
- fprintf (file, "\t.frame\t%s,%d,%s\t\t# vars= %d, regs= %d/%d, args= %d, extra= %d\n",
- reg_names[ (frame_pointer_needed) ? FRAME_POINTER_REGNUM : STACK_POINTER_REGNUM ],
- tsize,
- reg_names[31 + GP_REG_FIRST],
- current_frame_info.var_size,
- current_frame_info.num_gp,
- current_frame_info.num_fp,
- current_function_outgoing_args_size,
- current_frame_info.extra_size);
-
- fprintf (file, "\t.mask\t0x%08lx,%d\n\t.fmask\t0x%08lx,%d\n",
- current_frame_info.mask,
- current_frame_info.gp_save_offset,
- current_frame_info.fmask,
- current_frame_info.fp_save_offset);
+ if (!flag_inhibit_size_directive)
+ {
+ fprintf (file, "\t.frame\t%s,%d,%s\t\t# vars= %d, regs= %d/%d, args= %d, extra= %d\n",
+ reg_names[ (frame_pointer_needed) ? FRAME_POINTER_REGNUM : STACK_POINTER_REGNUM ],
+ tsize,
+ reg_names[31 + GP_REG_FIRST],
+ current_frame_info.var_size,
+ current_frame_info.num_gp,
+ current_frame_info.num_fp,
+ current_function_outgoing_args_size,
+ current_frame_info.extra_size);
+
+ fprintf (file, "\t.mask\t0x%08lx,%d\n\t.fmask\t0x%08lx,%d\n",
+ current_frame_info.mask,
+ current_frame_info.gp_save_offset,
+ current_frame_info.fmask,
+ current_frame_info.fp_save_offset);
+ }
if (TARGET_ABICALLS && mips_abi == ABI_32)
{
@@ -5241,6 +5306,9 @@ function_prologue (file, size)
sp_str, sp_str, tsize);
fprintf (file, "\t.cprestore %d\n", current_frame_info.args_size);
}
+
+ if (dwarf2out_do_frame ())
+ dwarf2out_def_cfa ("", STACK_POINTER_REGNUM, tsize);
}
}
@@ -5438,7 +5506,8 @@ mips_expand_prologue ()
}
if (TARGET_ABICALLS && mips_abi != ABI_32)
- emit_insn (gen_loadgp (XEXP (DECL_RTL (current_function_decl), 0)));
+ emit_insn (gen_loadgp (XEXP (DECL_RTL (current_function_decl), 0),
+ gen_rtx (REG, DImode, 25)));
}
/* If we are profiling, make sure no instructions are scheduled before
@@ -5467,9 +5536,12 @@ function_epilogue (file, size)
exactly matches the name used in ASM_DECLARE_FUNCTION_NAME. */
fnname = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0);
- fputs ("\t.end\t", file);
- assemble_name (file, fnname);
- fputs ("\n", file);
+ if (!flag_inhibit_size_directive)
+ {
+ fputs ("\t.end\t", file);
+ assemble_name (file, fnname);
+ fputs ("\n", file);
+ }
#endif
if (TARGET_STATS)
@@ -5568,6 +5640,13 @@ mips_expand_epilogue ()
else
emit_insn (gen_movsi (stack_pointer_rtx, frame_pointer_rtx));
}
+ /* The GP/PIC register is implicitly used by all SYMBOL_REFs, so if we
+ are going to restore it, then we must emit a blockage insn to
+ prevent the scheduler from moving the restore out of the epilogue. */
+ else if (TARGET_ABICALLS && mips_abi != ABI_32
+ && (current_frame_info.mask
+ & (1L << (PIC_OFFSET_TABLE_REGNUM - GP_REG_FIRST))))
+ emit_insn (gen_blockage ());
save_restore_insns (FALSE, tmp_rtx, tsize, (FILE *)0);
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index 58ed718cad7..557fb09878c 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -28,11 +28,8 @@ Boston, MA 02111-1307, USA. */
extern char *asm_file_name;
extern char call_used_regs[];
extern int current_function_calls_alloca;
-extern int flag_omit_frame_pointer;
-extern int frame_pointer_needed;
extern char *language_string;
extern int may_call_alloca;
-extern int optimize;
extern char **save_argv;
extern int target_flags;
extern char *version_string;
@@ -64,6 +61,7 @@ enum delay_type {
enum processor_type {
PROCESSOR_DEFAULT,
PROCESSOR_R3000,
+ PROCESSOR_R3900,
PROCESSOR_R6000,
PROCESSOR_R4000,
PROCESSOR_R4100,
@@ -276,6 +274,7 @@ extern void text_section ();
#define MASK_SINGLE_FLOAT 0x00020000 /* Only single precision FPU. */
#define MASK_MAD 0x00040000 /* Generate mad/madu as on 4650. */
#define MASK_4300_MUL_FIX 0x00080000 /* Work-around early Vr4300 CPU bug */
+#define MASK_MIPS3900 0x00100000 /* like -mips1 only 3900 */
/* Dummy switches used only in spec's*/
#define MASK_MIPS_TFILE 0x00000000 /* flag for mips-tfile usage */
@@ -291,7 +290,6 @@ extern void text_section ();
#define MASK_DEBUG_G 0x00800000 /* don't support 64 bit arithmetic */
#define MASK_DEBUG_H 0x00400000 /* allow ints in FP registers */
#define MASK_DEBUG_I 0x00200000 /* unused */
-#define MASK_DEBUG_J 0x00100000 /* unused */
/* r4000 64 bit sizes */
#define TARGET_INT64 (target_flags & MASK_INT64)
@@ -302,6 +300,9 @@ extern void text_section ();
/* Mips vs. GNU linker */
#define TARGET_SPLIT_ADDRESSES (target_flags & MASK_SPLIT_ADDR)
+/* generate mips 3900 insns */
+#define TARGET_MIPS3900 (target_flags & MASK_MIPS3900)
+
/* Mips vs. GNU assembler */
#define TARGET_GAS (target_flags & MASK_GAS)
#define TARGET_UNIX_ASM (!TARGET_GAS)
@@ -318,7 +319,6 @@ extern void text_section ();
#define TARGET_DEBUG_G_MODE (target_flags & MASK_DEBUG_G)
#define TARGET_DEBUG_H_MODE (target_flags & MASK_DEBUG_H)
#define TARGET_DEBUG_I_MODE (target_flags & MASK_DEBUG_I)
-#define TARGET_DEBUG_J_MODE (target_flags & MASK_DEBUG_J)
/* Reg. Naming in .s ($21 vs. $a0) */
#define TARGET_NAME_REGS (target_flags & MASK_NAME_REGS)
@@ -425,6 +425,7 @@ extern void text_section ();
{"fix4300", MASK_4300_MUL_FIX}, \
{"no-fix4300", -MASK_4300_MUL_FIX}, \
{"4650", MASK_MAD | MASK_SINGLE_FLOAT}, \
+ {"3900", MASK_MIPS3900}, \
{"debug", MASK_DEBUG}, \
{"debuga", MASK_DEBUG_A}, \
{"debugb", MASK_DEBUG_B}, \
@@ -435,7 +436,6 @@ extern void text_section ();
{"debugg", MASK_DEBUG_G}, \
{"debugh", MASK_DEBUG_H}, \
{"debugi", MASK_DEBUG_I}, \
- {"debugj", MASK_DEBUG_J}, \
{"", (TARGET_DEFAULT \
| TARGET_CPU_DEFAULT \
| TARGET_ENDIAN_DEFAULT)} \
@@ -507,10 +507,16 @@ extern void text_section ();
/* This is meant to be redefined in the host dependent files. */
#define SUBTARGET_TARGET_OPTIONS
+#define GENERATE_BRANCHLIKELY (TARGET_MIPS3900 || (mips_isa >= 2))
+#define GENERATE_MULT3 (TARGET_MIPS3900)
+#define GENERATE_MADD (TARGET_MIPS3900)
+
+
+
/* Macros to decide whether certain features are available or not,
depending on the instruction set architecture level. */
-#define BRANCH_LIKELY_P() (mips_isa >= 2)
+#define BRANCH_LIKELY_P() GENERATE_BRANCHLIKELY
#define HAVE_SQRT_P() (mips_isa >= 2)
/* CC1_SPEC causes -mips3 and -mips4 to set -mfp64 and -mgp64; -mips1 or
@@ -664,7 +670,7 @@ while (0)
/* GAS_ASM_SPEC is passed when using gas, rather than the MIPS
assembler. */
-#define GAS_ASM_SPEC "%{mcpu=*} %{m4650} %{mmad:-m4650} %{v}"
+#define GAS_ASM_SPEC "%{mcpu=*} %{m4650} %{mmad:-m4650} %{m3900} %{v}"
/* TARGET_ASM_SPEC is used to select either MIPS_AS_ASM_SPEC or
GAS_ASM_SPEC as the default, depending upon the value of
@@ -791,6 +797,7 @@ while (0)
%{mfp64:%{msingle-float:%emay not use both -mfp64 and -msingle-float}} \
%{mfp64:%{m4650:%emay not use both -mfp64 and -m4650}} \
%{m4650:-mcpu=r4650} \
+%{m3900:-mips1 -mcpu=r3900 -mfp32 -mgp32} \
%{G*} %{EB:-meb} %{EL:-mel} %{EB:%{EL:%emay not use both -EB and -EL}} \
%{pic-none: -mno-half-pic} \
%{pic-lib: -mhalf-pic} \
@@ -817,6 +824,16 @@ while (0)
#define SUBTARGET_CPP_SPEC ""
#endif
+/* If we're using 64bit longs, then we have to define __LONG_MAX__
+ correctly. Similarly for 64bit ints and __INT_MAX__. */
+#ifndef LONG_MAX_SPEC
+#if ((TARGET_DEFAULT | TARGET_CPU_DEFAULT) & MASK_LONG64)
+#define LONG_MAX_SPEC "%{!mno-long64:-D__LONG_MAX__=9223372036854775807L}"
+#else
+#define LONG_MAX_SPEC "%{mlong64:-D__LONG_MAX__=9223372036854775807L}"
+#endif
+#endif
+
/* CPP_SPEC is the set of arguments to pass to the preprocessor. */
#ifndef CPP_SPEC
@@ -838,6 +855,7 @@ while (0)
%{mabi=eabi:-D__mips_eabi} \
%{EB:-UMIPSEL -U_MIPSEL -U__MIPSEL -U__MIPSEL__ -D_MIPSEB -D__MIPSEB -D__MIPSEB__ %{!ansi:-DMIPSEB}} \
%{EL:-UMIPSEB -U_MIPSEB -U__MIPSEB -U__MIPSEB__ -D_MIPSEL -D__MIPSEL -D__MIPSEL__ %{!ansi:-DMIPSEL}} \
+%(long_max_spec) \
%(subtarget_cpp_spec) "
#endif
@@ -855,6 +873,7 @@ while (0)
{ "subtarget_cc1_spec", SUBTARGET_CC1_SPEC }, \
{ "subtarget_cpp_spec", SUBTARGET_CPP_SPEC }, \
{ "subtarget_cpp_size_spec", SUBTARGET_CPP_SIZE_SPEC }, \
+ { "long_max_spec", LONG_MAX_SPEC }, \
{ "mips_as_asm_spec", MIPS_AS_ASM_SPEC }, \
{ "gas_asm_spec", GAS_ASM_SPEC }, \
{ "target_asm_spec", TARGET_ASM_SPEC }, \
@@ -948,12 +967,11 @@ while (0)
#define DBX_REGISTER_NUMBER(REGNO) mips_dbx_regno[ (REGNO) ]
/* The mapping from gcc register number to DWARF 2 CFA column number.
- This mapping does not allow for tracking DBX register 0, since column 0
- is used for the frame address, but since register 0 is fixed this is
- not really a problem. */
+ This mapping does not allow for tracking register 0, since SGI's broken
+ dwarf reader thinks column 0 is used for the frame address, but since
+ register 0 is fixed this is not a problem. */
#define DWARF_FRAME_REGNUM(REG) \
- (REG == GP_REG_FIRST + 31 ? DWARF_FRAME_RETURN_COLUMN \
- : DBX_REGISTER_NUMBER (REG))
+ (REG == GP_REG_FIRST + 31 ? DWARF_FRAME_RETURN_COLUMN : REG)
/* The DWARF 2 CFA column which tracks the return address. */
#define DWARF_FRAME_RETURN_COLUMN (FP_REG_LAST + 1)
@@ -1430,7 +1448,7 @@ do { \
On the MIPS, all general registers are one word long. Except on
the R4000 with the FR bit set, the floating point uses register
- pairs, with the second register not being allocatable. */
+ pairs, with the second register not being allocable. */
#define HARD_REGNO_NREGS(REGNO, MODE) \
(! FP_REG_P (REGNO) \
@@ -2331,6 +2349,13 @@ typedef struct mips_args {
#define TRAMPOLINE_ALIGNMENT (TARGET_LONG64 ? 64 : 32)
+/* INITIALIZE_TRAMPOLINE calls this library function to flush
+ program and data caches. */
+
+#ifndef CACHE_FLUSH_FUNC
+#define CACHE_FLUSH_FUNC "_flush_cache"
+#endif
+
/* A C statement to initialize the variable parts of a trampoline.
ADDR is an RTX for the address of the trampoline; FNADDR is an
RTX for the address of the nested function; STATIC_CHAIN is an
@@ -2354,7 +2379,7 @@ typedef struct mips_args {
/* Flush both caches. We need to flush the data cache in case \
the system has a write-back cache. */ \
/* ??? Should check the return value for errors. */ \
- emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "_flush_cache"), \
+ emit_library_call (gen_rtx (SYMBOL_REF, Pmode, CACHE_FLUSH_FUNC), \
0, VOIDmode, 3, addr, Pmode, \
GEN_INT (TRAMPOLINE_SIZE), TYPE_MODE (integer_type_node),\
GEN_INT (3), TYPE_MODE (integer_type_node)); \
@@ -2969,7 +2994,8 @@ while (0)
enum machine_mode xmode = GET_MODE (X); \
if (xmode == SFmode || xmode == DFmode) \
{ \
- if (mips_cpu == PROCESSOR_R3000) \
+ if (mips_cpu == PROCESSOR_R3000 \
+ || mips_cpu == PROCESSOR_R3900) \
return COSTS_N_INSNS (2); \
else if (mips_cpu == PROCESSOR_R6000) \
return COSTS_N_INSNS (3); \
@@ -2992,6 +3018,7 @@ while (0)
if (xmode == SFmode) \
{ \
if (mips_cpu == PROCESSOR_R3000 \
+ || mips_cpu == PROCESSOR_R3900 \
|| mips_cpu == PROCESSOR_R5000) \
return COSTS_N_INSNS (4); \
else if (mips_cpu == PROCESSOR_R6000) \
@@ -3003,6 +3030,7 @@ while (0)
if (xmode == DFmode) \
{ \
if (mips_cpu == PROCESSOR_R3000 \
+ || mips_cpu == PROCESSOR_R3900 \
|| mips_cpu == PROCESSOR_R5000) \
return COSTS_N_INSNS (5); \
else if (mips_cpu == PROCESSOR_R6000) \
@@ -3013,6 +3041,8 @@ while (0)
\
if (mips_cpu == PROCESSOR_R3000) \
return COSTS_N_INSNS (12); \
+ else if (mips_cpu == PROCESSOR_R3900) \
+ return COSTS_N_INSNS (2); \
else if (mips_cpu == PROCESSOR_R6000) \
return COSTS_N_INSNS (17); \
else if (mips_cpu == PROCESSOR_R5000) \
@@ -3027,7 +3057,8 @@ while (0)
enum machine_mode xmode = GET_MODE (X); \
if (xmode == SFmode) \
{ \
- if (mips_cpu == PROCESSOR_R3000) \
+ if (mips_cpu == PROCESSOR_R3000 \
+ || mips_cpu == PROCESSOR_R3900) \
return COSTS_N_INSNS (12); \
else if (mips_cpu == PROCESSOR_R6000) \
return COSTS_N_INSNS (15); \
@@ -3037,7 +3068,8 @@ while (0)
\
if (xmode == DFmode) \
{ \
- if (mips_cpu == PROCESSOR_R3000) \
+ if (mips_cpu == PROCESSOR_R3000 \
+ || mips_cpu == PROCESSOR_R3900) \
return COSTS_N_INSNS (19); \
else if (mips_cpu == PROCESSOR_R6000) \
return COSTS_N_INSNS (16); \
@@ -3049,7 +3081,8 @@ while (0)
\
case UDIV: \
case UMOD: \
- if (mips_cpu == PROCESSOR_R3000) \
+ if (mips_cpu == PROCESSOR_R3000 \
+ || mips_cpu == PROCESSOR_R3900) \
return COSTS_N_INSNS (35); \
else if (mips_cpu == PROCESSOR_R6000) \
return COSTS_N_INSNS (38); \
diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md
index 770a91c97a3..a3ac491de70 100644
--- a/gcc/config/mips/mips.md
+++ b/gcc/config/mips/mips.md
@@ -3,7 +3,7 @@
;; Changes by Michael Meissner, meissner@osf.org
;; 64 bit r4000 support by Ian Lance Taylor, ian@cygnus.com, and
;; Brendan Eich, brendan@microunity.com.
-;; Copyright (C) 1989, 90-96, 1997 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 90-97, 1998 Free Software Foundation, Inc.
;; This file is part of GNU CC.
@@ -88,15 +88,14 @@
;; ??? Fix everything that tests this attribute.
(define_attr "cpu"
- "default,r3000,r6000,r4000,r4100,r4300,r4600,r4650,r5000,r8000"
+ "default,r3000,r3900,r6000,r4000,r4100,r4300,r4600,r4650,r5000,r8000"
(const (symbol_ref "mips_cpu_attr")))
;; Attribute defining whether or not we can use the branch-likely instructions
-;; (MIPS ISA level 2)
(define_attr "branch_likely" "no,yes"
(const
- (if_then_else (ge (symbol_ref "mips_isa") (const_int 2))
+ (if_then_else (ne (symbol_ref "GENERATE_BRANCHLIKELY") (const_int 0))
(const_string "yes")
(const_string "no"))))
@@ -147,12 +146,12 @@
(define_function_unit "memory" 1 0
(and (eq_attr "type" "load")
- (eq_attr "cpu" "!r3000,r4600,r4650,r4100,r4300,r5000"))
+ (eq_attr "cpu" "!r3000,r3900,r4600,r4650,r4100,r4300,r5000"))
3 0)
(define_function_unit "memory" 1 0
(and (eq_attr "type" "load")
- (eq_attr "cpu" "r3000,r4600,r4650,r4100,r4300,r5000"))
+ (eq_attr "cpu" "r3000,r3900,r4600,r4650,r4100,r4300,r5000"))
2 0)
(define_function_unit "memory" 1 0 (eq_attr "type" "store") 1 0)
@@ -165,11 +164,11 @@
(define_function_unit "imuldiv" 1 0
(and (eq_attr "type" "imul")
- (eq_attr "cpu" "!r3000,r4000,r4600,r4650,r4100,r4300,r5000"))
+ (eq_attr "cpu" "!r3000,r3900,r4000,r4600,r4650,r4100,r4300,r5000"))
17 17)
(define_function_unit "imuldiv" 1 0
- (and (eq_attr "type" "imul") (eq_attr "cpu" "r3000"))
+ (and (eq_attr "type" "imul") (eq_attr "cpu" "r3000,r3900"))
12 12)
(define_function_unit "imuldiv" 1 0
@@ -207,11 +206,11 @@
(define_function_unit "imuldiv" 1 0
(and (eq_attr "type" "idiv")
- (eq_attr "cpu" "!r3000,r4000,r4600,r4650,r4100,r4300,r5000"))
+ (eq_attr "cpu" "!r3000,r3900,r4000,r4600,r4650,r4100,r4300,r5000"))
38 38)
(define_function_unit "imuldiv" 1 0
- (and (eq_attr "type" "idiv") (eq_attr "cpu" "r3000"))
+ (and (eq_attr "type" "idiv") (eq_attr "cpu" "r3000,r3900"))
35 35)
(define_function_unit "imuldiv" 1 0
@@ -256,7 +255,7 @@
(and (eq_attr "mode" "DI") (eq_attr "cpu" "r5000")))
68 68)
-;; The R4300 does *NOT* have a seperate Floating Point Unit, instead
+;; The R4300 does *NOT* have a separate Floating Point Unit, instead
;; the FP hardware is part of the normal ALU circuitry. This means FP
;; instructions affect the pipe-line, and no functional unit
;; parallelism can occur on R4300 processors. To force GCC into coding
@@ -264,11 +263,11 @@
;; instructions to be processed in the "imuldiv" unit.
(define_function_unit "adder" 1 1
- (and (eq_attr "type" "fcmp") (eq_attr "cpu" "!r3000,r6000,r4300,r5000"))
+ (and (eq_attr "type" "fcmp") (eq_attr "cpu" "!r3000,r3900,r6000,r4300,r5000"))
3 0)
(define_function_unit "adder" 1 1
- (and (eq_attr "type" "fcmp") (eq_attr "cpu" "r3000,r6000"))
+ (and (eq_attr "type" "fcmp") (eq_attr "cpu" "r3000,r3900,r6000"))
2 0)
(define_function_unit "adder" 1 1
@@ -276,11 +275,11 @@
1 0)
(define_function_unit "adder" 1 1
- (and (eq_attr "type" "fadd") (eq_attr "cpu" "!r3000,r6000,r4300"))
+ (and (eq_attr "type" "fadd") (eq_attr "cpu" "!r3000,r3900,r6000,r4300"))
4 0)
(define_function_unit "adder" 1 1
- (and (eq_attr "type" "fadd") (eq_attr "cpu" "r3000"))
+ (and (eq_attr "type" "fadd") (eq_attr "cpu" "r3000,r3900"))
2 0)
(define_function_unit "adder" 1 1
@@ -289,22 +288,22 @@
(define_function_unit "adder" 1 1
(and (eq_attr "type" "fabs,fneg")
- (eq_attr "cpu" "!r3000,r4600,r4650,r4300,r5000"))
+ (eq_attr "cpu" "!r3000,r3900,r4600,r4650,r4300,r5000"))
2 0)
(define_function_unit "adder" 1 1
- (and (eq_attr "type" "fabs,fneg") (eq_attr "cpu" "r3000,r4600,r4650,r5000"))
+ (and (eq_attr "type" "fabs,fneg") (eq_attr "cpu" "r3000,r3900,r4600,r4650,r5000"))
1 0)
(define_function_unit "mult" 1 1
(and (eq_attr "type" "fmul")
(and (eq_attr "mode" "SF")
- (eq_attr "cpu" "!r3000,r6000,r4600,r4650,r4300,r5000")))
+ (eq_attr "cpu" "!r3000,r3900,r6000,r4600,r4650,r4300,r5000")))
7 0)
(define_function_unit "mult" 1 1
(and (eq_attr "type" "fmul")
- (and (eq_attr "mode" "SF") (eq_attr "cpu" "r3000,r5000")))
+ (and (eq_attr "mode" "SF") (eq_attr "cpu" "r3000,r3900,r5000")))
4 0)
(define_function_unit "mult" 1 1
@@ -319,12 +318,12 @@
(define_function_unit "mult" 1 1
(and (eq_attr "type" "fmul")
- (and (eq_attr "mode" "DF") (eq_attr "cpu" "!r3000,r6000,r4300,r5000")))
+ (and (eq_attr "mode" "DF") (eq_attr "cpu" "!r3000,r3900,r6000,r4300,r5000")))
8 0)
(define_function_unit "mult" 1 1
(and (eq_attr "type" "fmul")
- (and (eq_attr "mode" "DF") (eq_attr "cpu" "r3000,r5000")))
+ (and (eq_attr "mode" "DF") (eq_attr "cpu" "r3000,r3900,r5000")))
5 0)
(define_function_unit "mult" 1 1
@@ -335,12 +334,12 @@
(define_function_unit "divide" 1 1
(and (eq_attr "type" "fdiv")
(and (eq_attr "mode" "SF")
- (eq_attr "cpu" "!r3000,r6000,r4600,r4650,r4300,r5000")))
+ (eq_attr "cpu" "!r3000,r3900,r6000,r4600,r4650,r4300,r5000")))
23 0)
(define_function_unit "divide" 1 1
(and (eq_attr "type" "fdiv")
- (and (eq_attr "mode" "SF") (eq_attr "cpu" "r3000")))
+ (and (eq_attr "mode" "SF") (eq_attr "cpu" "r3000,r3900")))
12 0)
(define_function_unit "divide" 1 1
@@ -361,12 +360,12 @@
(define_function_unit "divide" 1 1
(and (eq_attr "type" "fdiv")
(and (eq_attr "mode" "DF")
- (eq_attr "cpu" "!r3000,r6000,r4600,r4650,r4300")))
+ (eq_attr "cpu" "!r3000,r3900,r6000,r4600,r4650,r4300")))
36 0)
(define_function_unit "divide" 1 1
(and (eq_attr "type" "fdiv")
- (and (eq_attr "mode" "DF") (eq_attr "cpu" "r3000")))
+ (and (eq_attr "mode" "DF") (eq_attr "cpu" "r3000,r3900")))
19 0)
(define_function_unit "divide" 1 1
@@ -1031,7 +1030,9 @@
""
"
{
- if (TARGET_MAD)
+ if (GENERATE_MULT3)
+ emit_insn (gen_mulsi3_mult3 (operands[0], operands[1], operands[2]));
+ else if (TARGET_MAD)
emit_insn (gen_mulsi3_r4650 (operands[0], operands[1], operands[2]));
else if (mips_cpu != PROCESSOR_R4000)
emit_insn (gen_mulsi3_internal (operands[0], operands[1], operands[2]));
@@ -1040,6 +1041,19 @@
DONE;
}")
+(define_insn "mulsi3_mult3"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (mult:SI (match_operand:SI 1 "register_operand" "d")
+ (match_operand:SI 2 "register_operand" "d")))
+ (clobber (match_scratch:SI 3 "=h"))
+ (clobber (match_scratch:SI 4 "=l"))
+ (clobber (match_scratch:SI 5 "=a"))]
+ "GENERATE_MULT3"
+ "mult\\t%0,%1,%2"
+ [(set_attr "type" "imul")
+ (set_attr "mode" "SI")
+ (set_attr "length" "1")])
+
(define_insn "mulsi3_internal"
[(set (match_operand:SI 0 "register_operand" "=l")
(mult:SI (match_operand:SI 1 "register_operand" "d")
@@ -1286,8 +1300,14 @@
(match_dup 0)))
(clobber (match_scratch:SI 3 "=h"))
(clobber (match_scratch:SI 4 "=a"))]
- "TARGET_MAD"
- "mad\\t%1,%2"
+ "TARGET_MAD || GENERATE_MADD"
+ "*
+{
+ if (TARGET_MAD)
+ return \"mad\\t%1,%2\";
+ else
+ return \"madd\\t%1,%2\";
+}"
[(set_attr "type" "imul")
(set_attr "mode" "SI")
(set_attr "length" "1")])
@@ -1350,6 +1370,20 @@
(set_attr "mode" "SI")
(set_attr "length" "1")])
+(define_insn "madd3"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (plus:SI (mult:SI (match_operand:SI 1 "register_operand" "d")
+ (match_operand:SI 2 "register_operand" "d"))
+ (match_operand:SI 3 "register_operand" "l")))
+ (clobber (match_scratch:SI 4 "=l"))
+ (clobber (match_scratch:SI 5 "=h"))
+ (clobber (match_scratch:SI 6 "=a"))]
+ "GENERATE_MADD"
+ "madd\\t%0,%1,%2"
+ [(set_attr "type" "imul")
+ (set_attr "mode" "SI")
+ (set_attr "length" "1")])
+
;; Floating point multiply accumulate instructions.
(define_insn ""
@@ -1775,7 +1809,7 @@
if (REGNO (operands[0]) == REGNO (operands[1]))
{
- if (mips_isa >= 2)
+ if (GENERATE_BRANCHLIKELY)
return \"%(bltzl\\t%1,1f\\n\\tsubu\\t%0,%z2,%0\\n1:%)\";
else
return \"bgez\\t%1,1f%#\\n\\tsubu\\t%0,%z2,%0\\n1:\";
@@ -2731,11 +2765,17 @@ move\\t%0,%z4\\n\\
;; operand zero, because then the address in the move instruction will be
;; clobbered. We mark the scratch register as early clobbered to prevent this.
+;; We need the ?X in alternative 1 so that it will be choosen only if the
+;; destination is a floating point register. Otherwise, alternative 1 can
+;; have lower cost than alternative 0 (because there is one less loser), and
+;; can be choosen when it won't work (because integral reloads into FP
+;; registers are not supported).
+
(define_insn "fix_truncdfsi2"
[(set (match_operand:SI 0 "general_operand" "=d,*f,R,o")
(fix:SI (match_operand:DF 1 "register_operand" "f,*f,f,f")))
(clobber (match_scratch:SI 2 "=d,*d,&d,&d"))
- (clobber (match_scratch:DF 3 "=f,*X,f,f"))]
+ (clobber (match_scratch:DF 3 "=f,?*X,f,f"))]
"TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT"
"*
{
@@ -2760,7 +2800,7 @@ move\\t%0,%z4\\n\\
[(set (match_operand:SI 0 "general_operand" "=d,*f,R,o")
(fix:SI (match_operand:SF 1 "register_operand" "f,*f,f,f")))
(clobber (match_scratch:SI 2 "=d,*d,&d,&d"))
- (clobber (match_scratch:SF 3 "=f,*X,f,f"))]
+ (clobber (match_scratch:SF 3 "=f,?*X,f,f"))]
"TARGET_HARD_FLOAT"
"*
{
@@ -2793,7 +2833,7 @@ move\\t%0,%z4\\n\\
(define_insn "fix_truncdfdi2"
[(set (match_operand:DI 0 "general_operand" "=d,*f,R,o")
(fix:DI (match_operand:DF 1 "register_operand" "f,*f,f,f")))
- (clobber (match_scratch:DF 2 "=f,*X,f,f"))]
+ (clobber (match_scratch:DF 2 "=f,?*X,f,f"))]
"TARGET_HARD_FLOAT && TARGET_64BIT && TARGET_DOUBLE_FLOAT"
"*
{
@@ -2820,7 +2860,7 @@ move\\t%0,%z4\\n\\
(define_insn "fix_truncsfdi2"
[(set (match_operand:DI 0 "general_operand" "=d,*f,R,o")
(fix:DI (match_operand:SF 1 "register_operand" "f,*f,f,f")))
- (clobber (match_scratch:DF 2 "=f,*X,f,f"))]
+ (clobber (match_scratch:DF 2 "=f,?*X,f,f"))]
"TARGET_HARD_FLOAT && TARGET_64BIT && TARGET_DOUBLE_FLOAT"
"*
{
@@ -3118,6 +3158,9 @@ move\\t%0,%z4\\n\\
if (GET_CODE (operands[1]) != MEM)
FAIL;
+ /* Change the mode to BLKmode for aliasing purposes. */
+ operands[1] = change_address (operands[1], BLKmode, XEXP (operands[1], 0));
+
/* Otherwise, emit a lwl/lwr pair to load the value. */
emit_insn (gen_movsi_ulw (operands[0], operands[1]));
DONE;
@@ -3142,6 +3185,9 @@ move\\t%0,%z4\\n\\
if (GET_CODE (operands[1]) != MEM)
FAIL;
+ /* Change the mode to BLKmode for aliasing purposes. */
+ operands[1] = change_address (operands[1], BLKmode, XEXP (operands[1], 0));
+
/* Otherwise, emit a lwl/lwr pair to load the value. */
emit_insn (gen_movsi_ulw (operands[0], operands[1]));
DONE;
@@ -3166,6 +3212,9 @@ move\\t%0,%z4\\n\\
if (GET_CODE (operands[0]) != MEM)
FAIL;
+ /* Change the mode to BLKmode for aliasing purposes. */
+ operands[0] = change_address (operands[0], BLKmode, XEXP (operands[0], 0));
+
/* Otherwise, emit a swl/swr pair to load the value. */
emit_insn (gen_movsi_usw (operands[0], operands[3]));
DONE;
@@ -3175,7 +3224,7 @@ move\\t%0,%z4\\n\\
(define_insn "movsi_ulw"
[(set (match_operand:SI 0 "register_operand" "=&d,&d")
- (unspec [(match_operand:QI 1 "general_operand" "R,o")] 0))]
+ (unspec:SI [(match_operand:BLK 1 "general_operand" "R,o")] 0))]
""
"*
{
@@ -3203,8 +3252,8 @@ move\\t%0,%z4\\n\\
(set_attr "length" "2,4")])
(define_insn "movsi_usw"
- [(set (match_operand:QI 0 "memory_operand" "=R,o")
- (unspec [(match_operand:SI 1 "reg_or_0_operand" "dJ,dJ")] 1))]
+ [(set (match_operand:BLK 0 "memory_operand" "=R,o")
+ (unspec:BLK [(match_operand:SI 1 "reg_or_0_operand" "dJ,dJ")] 1))]
""
"*
{
@@ -4026,10 +4075,11 @@ move\\t%0,%z4\\n\\
(define_insn "loadgp"
[(set (reg:DI 28)
- (unspec_volatile [(match_operand:DI 0 "address_operand" "")] 2))
+ (unspec_volatile:DI [(match_operand:DI 0 "address_operand" "")
+ (match_operand:DI 1 "register_operand" "")] 2))
(clobber (reg:DI 1))]
""
- "%[lui\\t$1,%%hi(%%neg(%%gp_rel(%a0)))\\n\\taddiu\\t$1,$1,%%lo(%%neg(%%gp_rel(%a0)))\\n\\tdaddu\\t$gp,$1,$25%]"
+ "%[lui\\t$1,%%hi(%%neg(%%gp_rel(%a0)))\\n\\taddiu\\t$1,$1,%%lo(%%neg(%%gp_rel(%a0)))\\n\\tdaddu\\t$gp,$1,%1%]"
[(set_attr "type" "move")
(set_attr "mode" "DI")
(set_attr "length" "3")])
@@ -4041,8 +4091,8 @@ move\\t%0,%z4\\n\\
;; Argument 3 is the alignment
(define_expand "movstrsi"
- [(parallel [(set (mem:BLK (match_operand:BLK 0 "general_operand" ""))
- (mem:BLK (match_operand:BLK 1 "general_operand" "")))
+ [(parallel [(set (match_operand:BLK 0 "general_operand" "")
+ (match_operand:BLK 1 "general_operand" ""))
(use (match_operand:SI 2 "arith32_operand" ""))
(use (match_operand:SI 3 "immediate_operand" ""))])]
""
@@ -4069,7 +4119,7 @@ move\\t%0,%z4\\n\\
(use (const_int 0))] ;; normal block move
""
"* return output_block_move (insn, operands, 4, BLOCK_MOVE_NORMAL);"
- [(set_attr "type" "multi")
+ [(set_attr "type" "store")
(set_attr "mode" "none")
(set_attr "length" "20")])
@@ -4128,7 +4178,7 @@ move\\t%0,%z4\\n\\
(use (const_int 1))] ;; all but last store
""
"* return output_block_move (insn, operands, 4, BLOCK_MOVE_NOT_LAST);"
- [(set_attr "type" "multi")
+ [(set_attr "type" "store")
(set_attr "mode" "none")
(set_attr "length" "20")])
@@ -6392,6 +6442,42 @@ move\\t%0,%z4\\n\\
(set_attr "mode" "none")
(set_attr "length" "6")])
+;; ??? This is a hack to work around a problem with expand_builtin_setjmp.
+;; It restores the frame pointer, and then does a call to restore the global
+;; pointer (gp) register. The call insn implicitly (via the assembler) reloads
+;; gp from the stack. However, call insns do not depend on $fp, so it is
+;; possible for the instruction scheduler to move the fp restore after the
+;; call, which then causes gp to be corrupted. We fix this by emitting a
+;; scheduler barrier. A better fix is to put code here that restores the
+;; $gp, and then the call is unnecessary. This is only a problem when PIC
+;; (TARGET_ABICALLS), and only when the gp register is caller-saved
+;; (irix5/o32, but not irix6/n32/n64).
+
+(define_expand "nonlocal_goto_receiver"
+ [(const_int 0)]
+ ""
+ "
+{
+ emit_insn (gen_blockage ());
+}")
+
+;; For n32/n64, we need to restore gp after a builtin setjmp. We do this
+;; by making use of the fact that we've just called __dummy.
+;; ??? Note that nothing guarantees that we're *right* after the return, but
+;; we usually are. There seems to be no way to make that guarantee.
+
+(define_expand "builtin_setjmp_receiver"
+ [(const_int 0)]
+ "TARGET_ABICALLS && mips_abi != ABI_32"
+ "
+{
+ rtx label = gen_label_rtx ();
+
+ emit_label (label);
+ emit_insn (gen_loadgp (gen_rtx (LABEL_REF, Pmode, label),
+ gen_rtx (REG, DImode, 31)));
+ emit_insn (gen_blockage ());
+}")
;;
;; ....................
diff --git a/gcc/config/mips/netbsd.h b/gcc/config/mips/netbsd.h
index 9ed8dfd8dfc..3fce9fb1de3 100644
--- a/gcc/config/mips/netbsd.h
+++ b/gcc/config/mips/netbsd.h
@@ -1,5 +1,5 @@
/* Definitions for DECstation running BSD as target machine for GNU compiler.
- Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -30,11 +30,11 @@ Boston, MA 02111-1307, USA. */
#define GCC_INCLUDE_DIR "/usr/include"
#undef INCLUDE_DEFAULTS
-#define INCLUDE_DEFAULTS \
- { \
- { GPLUSPLUS_INCLUDE_DIR, 1, 1 }, \
- { GCC_INCLUDE_DIR, 0, 0 }, \
- { 0, 0, 0 } \
+#define INCLUDE_DEFAULTS \
+ { \
+ { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 }, \
+ { GCC_INCLUDE_DIR, "GCC", 0, 0 }, \
+ { 0, 0, 0, 0 } \
}
/* Under NetBSD, the normal location of the various *crt*.o files is the
diff --git a/gcc/config/mips/news4.h b/gcc/config/mips/news4.h
index f7c464cf353..9f816c19258 100644
--- a/gcc/config/mips/news4.h
+++ b/gcc/config/mips/news4.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler. Sony RISC NEWS (mips)
- Copyright (C) 1991 Free Software Foundation, Inc.
+ Copyright (C) 1991, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -33,4 +33,8 @@ Boston, MA 02111-1307, USA. */
#define MACHINE_TYPE "RISC NEWS-OS"
+/* INITIALIZE_TRAMPOLINE calls this library function to flush
+ program and data caches. */
+#define CACHE_FLUSH_FUNC "cacheflush"
+
#include "mips/mips.h"
diff --git a/gcc/config/mips/r3900.h b/gcc/config/mips/r3900.h
new file mode 100644
index 00000000000..c1867430129
--- /dev/null
+++ b/gcc/config/mips/r3900.h
@@ -0,0 +1,71 @@
+/* Definitions of MIPS sub target machine for GNU compiler.
+ Toshiba r3900. You should include mips.h after this.
+
+ Copyright (C) 1989, 90-6, 1997 Free Software Foundation, Inc.
+ Contributed by Gavin Koch (gavin@cygnus.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. */
+
+#define SUBTARGET_CPP_SPEC "\
+%{!mabi=32: %{!mabi=n32: %{!mabi=64: -D__mips_eabi}}} \
+%{!msingle-float:-D__mips_soft_float} \
+%{mhard-float:%e-mhard-float not supported.} \
+%{msingle-float:%{msoft-float: \
+ %e-msingle-float and -msoft-float can not both be specified.}}"
+
+/* The following is needed because -mips3 and -mips4 set gp64 which in
+ combination with abi=eabi, causes long64 to be set. */
+#define SUBTARGET_CPP_SIZE_SPEC "\
+%{mips3:-D__SIZE_TYPE__=long\\ unsigned\\ int -D__PTRDIFF_TYPE__=long\\ int} \
+%{mips4:-D__SIZE_TYPE__=long\\ unsigned\\ int -D__PTRDIFF_TYPE__=long\\ int} \
+%{!mips3:%{!mips4:%{!m4650:\
+ -D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int}}} "
+
+/* by default (if not mips-something-else) produce code for the r3900 */
+#define SUBTARGET_CC1_SPEC "\
+%{mhard-float:%e-mhard-float not supported.} \
+%{msingle-float:%{msoft-float: \
+ %e-msingle-float and -msoft-float can not both be specified.}}"
+
+#define TARGET_DEFAULT (MASK_SOFT_FLOAT | MASK_MIPS3900)
+#define MIPS_CPU_STRING_DEFAULT "R3900"
+#define MIPS_ISA_DEFAULT 1
+
+#define MULTILIB_DEFAULTS { "EB", "mips1", "msoft-float" }
+
+/* We use the MIPS EABI by default. */
+#define MIPS_ABI_DEFAULT ABI_EABI
+
+
+/* Debugging */
+
+#define DWARF2_DEBUGGING_INFO
+#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
+
+/* For the 'preferred' cases ("gN" and "ggdbN") we need to tell the
+ gnu assembler "dwarf-2" */
+
+#define SUBTARGET_ASM_DEBUGGING_SPEC "\
+%{!mmips-as: \
+ %{g:-gdwarf-2} %{g0:-gdwarf-2} %{g1:-gdwarf-2} %{g2:-gdwarf-2} %{g3:-gdwarf-2} \
+ %{ggdb:-gdwarf-2} %{ggdb0:-gdwarf-2} %{ggdb1:-gdwarf-2} %{ggdb2:-gdwarf-2} %{ggdb3:-gdwarf-2} \
+ %{gdwarf-2*:-gdwarf-2}} \
+%{gstabs:-g} %{gstabs0:-g0} %{gstabs1:-g1} %{gstabs2:-g2} %{gstabs3:-g3} \
+%{gstabs+:-g} %{gstabs+0:-g0} %{gstabs+1:-g1} %{gstabs+2:-g2} %{gstabs+3:-g3} \
+%{gcoff:-g} %{gcoff0:-g0} %{gcoff1:-g1} %{gcoff2:-g2} %{gcoff3:-g3}"
+
diff --git a/gcc/config/mips/rtems64.h b/gcc/config/mips/rtems64.h
index d4d8ac0ab3f..6433ed56498 100644
--- a/gcc/config/mips/rtems64.h
+++ b/gcc/config/mips/rtems64.h
@@ -1,6 +1,5 @@
-/* Definitions for rtems targetting a MIPS ORION using ecoff.
-
- Copyright (C) 1996 Free Software Foundation, Inc.
+/* Definitions for rtems targeting a MIPS ORION using ecoff.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Contributed by Joel Sherrill (joel@OARcorp.com).
This file is part of GNU CC.
@@ -27,5 +26,3 @@ Boston, MA 02111-1307, USA. */
#undef CPP_PREDEFINES
#define CPP_PREDEFINES "-Dmips -DMIPSEB -DR4000 -D_mips -D_MIPSEB -D_R4000 \
-Drtems -D__rtems__ -Asystem(rtems)"
-
-/* end of rtems64.h */
diff --git a/gcc/config/mips/ultrix.h b/gcc/config/mips/ultrix.h
index cb18a5d4eba..7fb101a9151 100644
--- a/gcc/config/mips/ultrix.h
+++ b/gcc/config/mips/ultrix.h
@@ -1,5 +1,5 @@
-/* Definitions of target machine for GNU compiler. DECstation (ultrix) version.
- Copyright (C) 1991 Free Software Foundation, Inc.
+/* Definitions of target machine for GNU compiler; DECstation (Ultrix) version.
+ Copyright (C) 1991, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -46,4 +46,12 @@ Boston, MA 02111-1307, USA. */
/* Generate calls to memcpy, etc., not bcopy, etc. */
#define TARGET_MEM_FUNCTIONS
+/* Work around assembler forward label references generated in exception
+ handling code. */
+#define DWARF2_UNWIND_INFO 0
+
+/* INITIALIZE_TRAMPOLINE calls this library function to flush
+ program and data caches. */
+#define CACHE_FLUSH_FUNC "cacheflush"
+
#include "mips/mips.h"
diff --git a/gcc/config/mips/x-dec-osf1 b/gcc/config/mips/x-dec-osf1
index a3aff92b37b..6e46f0eafd5 100644
--- a/gcc/config/mips/x-dec-osf1
+++ b/gcc/config/mips/x-dec-osf1
@@ -11,7 +11,6 @@
CC = $(OLDCC)
OPT = -O1
OLDCC = cc -Wf,-XNg1500 -Olimit 3000 $(OPT)
-INSTALL = installbsd -c
# The bison output files are machine-indep,
# so different flags for a particular machine are not useful.
diff --git a/gcc/config/mips/x-iris b/gcc/config/mips/x-iris
index 3d49e4c7467..0f04f099f16 100644
--- a/gcc/config/mips/x-iris
+++ b/gcc/config/mips/x-iris
@@ -9,9 +9,11 @@
# can use -O2. Down with fixed size tables!
# The -cckr is to turn off strict ANSI checking.
-CC = $(OLDCC)
-OPT = -O1
-OLDCC = cc -Wf,-XNh2000,-XNg1500 -Olimit 3000 -cckr $(OPT)
+# These definitions are commented out because they cause trouble with
+# autoconf. It is believed that they aren't needed anymore.
+#CC = $(OLDCC)
+#OPT = -O1
+#OLDCC = cc -Wf,-XNh2000,-XNg1500 -Olimit 3000 -cckr $(OPT)
# The bison output files are machine-indep,
# so different flags for a particular machine are not useful.
diff --git a/gcc/config/mips/x-iris3 b/gcc/config/mips/x-iris3
index d4b55dde20a..2743ab743d9 100644
--- a/gcc/config/mips/x-iris3
+++ b/gcc/config/mips/x-iris3
@@ -12,9 +12,11 @@
# the -cckr option, so, lets try without it for all versions of Irix 3.x.
# The -cckr is to turn off strict ANSI checking.
-CC = $(OLDCC)
-OPT = -O1
-OLDCC = cc -Wf,-XNh2000,-XNg1500 -Olimit 3000 $(OPT)
+# These definitions are commented out because they cause trouble with
+# autoconf. It is believed that they aren't needed anymore.
+#CC = $(OLDCC)
+#OPT = -O1
+#OLDCC = cc -Wf,-XNh2000,-XNg1500 -Olimit 3000 $(OPT)
# The bison output files are machine-indep,
# so different flags for a particular machine are not useful.
diff --git a/gcc/config/mips/x-netbsd b/gcc/config/mips/x-netbsd
index ed1709cc044..49a89f35d1b 100644
--- a/gcc/config/mips/x-netbsd
+++ b/gcc/config/mips/x-netbsd
@@ -3,7 +3,8 @@ STMP_FIXPROTO =
# We don't need GCC's own include files.
USER_H = $(srcdir)/ginclude/stdarg.h $(srcdir)/ginclude/varargs.h \
- $(srcdir)/ginclude/va-mips.h
+ $(srcdir)/ginclude/va-mips.h $(EXTRA_HEADERS) $(LANG_EXTRA_HEADERS)
+
XLIMITS_H =
# We don't need even the files GCC insists we need.
diff --git a/gcc/config/mips/x-osfrose b/gcc/config/mips/x-osfrose
index 20ed4772863..825276c25c7 100644
--- a/gcc/config/mips/x-osfrose
+++ b/gcc/config/mips/x-osfrose
@@ -17,7 +17,6 @@ DEBUG =
DEBUG_COLLECT = # -DDEBUG
CCLIBFLAGS = -O -DNO_HALF_PIC
GCC_CFLAGS = $(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(CFLAGS) -B./ -DPOSIX -DNO_HALF_PIC
-INSTALL = installbsd -c
LIBGCC2_CFLAGS = -O2 $(GCC_CFLAGS) -g1 -pic-extern
LDFLAGS =
MSTATS = # -mstats
diff --git a/gcc/config/mips/xm-iris5.h b/gcc/config/mips/xm-iris5.h
index 72387b29ccc..f3eb9cdb753 100644
--- a/gcc/config/mips/xm-iris5.h
+++ b/gcc/config/mips/xm-iris5.h
@@ -1,9 +1,11 @@
#include "mips/xm-mips.h"
#define USG
-#define HAVE_VPRINTF
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define bcmp(a,b,c) memcmp (a,b,c)
+/* On SGI IRIX 5.3, inttypes.h clashes with sys/types.h, but the clash
+ (when compiled with GCC) is a warning, so configure.in thinks it's OK
+ to use it. Work around this problem. */
+#ifdef HAVE_INTTYPES_H
+#undef HAVE_INTTYPES_H
+#endif
diff --git a/gcc/config/mips/xm-iris6.h b/gcc/config/mips/xm-iris6.h
index ed7dd316b5b..4d429c72edc 100644
--- a/gcc/config/mips/xm-iris6.h
+++ b/gcc/config/mips/xm-iris6.h
@@ -5,17 +5,13 @@
extern void *alloca ();
#endif
-#include "mips/xm-iris5.h"
+#include "mips/xm-mips.h"
+
+#define USG
#undef HOST_BITS_PER_LONG
#define HOST_BITS_PER_LONG _MIPS_SZLONG
-/* Declare some functions needed for this machine. We don't want to
- include these in the sources since other machines might define them
- differently. */
-
-extern void *malloc (), *realloc (), *calloc ();
-
#ifndef inhibit_libc
#include "string.h"
#endif
diff --git a/gcc/config/mips/xm-mips.h b/gcc/config/mips/xm-mips.h
index 6c9df7c0f28..e10f78e5fca 100644
--- a/gcc/config/mips/xm-mips.h
+++ b/gcc/config/mips/xm-mips.h
@@ -1,5 +1,5 @@
/* Configuration for GNU C-compiler for MIPS Rx000 family
- Copyright (C) 1989, 1990, 1991, 1993 Free Software Foundation, Inc.
+ Copyright (C) 1989, 1990, 1991, 1993, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -64,7 +64,11 @@ Boston, MA 02111-1307, USA. */
#ifndef __GNUC__
#define USE_C_ALLOCA
+#ifdef __STDC__
+extern void * alloca ();
+#else
extern char * alloca ();
+#endif
/* for the emacs version of alloca */
#define STACK_DIRECTION -1
@@ -73,8 +77,6 @@ extern char * alloca ();
/* Say if we have vprintf. BSD Mips targets probably don't have vfprintf. */
#if defined(__OSF1__) || defined(__OSF__) || defined(__osf__) || defined(bsd4_4)
-#define HAVE_VPRINTF
-#define HAVE_PUTENV
#else
#define NO_STAB_H /* mips doesn't typically have stab.h */
diff --git a/gcc/config/mn10200/mn10200.c b/gcc/config/mn10200/mn10200.c
index 6c929c81136..5435f773c8d 100644
--- a/gcc/config/mn10200/mn10200.c
+++ b/gcc/config/mn10200/mn10200.c
@@ -19,8 +19,8 @@ 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 <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
@@ -611,12 +611,12 @@ expand_prologue ()
if (!regs_ever_live[5])
{
regs_ever_live[5] = 1;
- zero_dreg = gen_rtx (REG, HImode, 5);
+ zero_areg = gen_rtx (REG, HImode, 5);
}
if (!regs_ever_live[6])
{
regs_ever_live[6] = 1;
- zero_dreg = gen_rtx (REG, HImode, 6);
+ zero_areg = gen_rtx (REG, HImode, 6);
}
}
@@ -864,16 +864,6 @@ call_address_operand (op, mode)
return (GET_CODE (op) == SYMBOL_REF || GET_CODE (op) == REG);
}
-/* Return true if OP is an indirect memory operand, the "bset" and "bclr"
- insns use this predicate. */
-int
-indirect_memory_operand (op, mode)
- rtx op;
- enum machine_mode mode;
-{
- return (GET_CODE (op) == MEM && GET_CODE (XEXP (op, 0)) == REG);
-}
-
/* Return true if OP is a memory operand with a constant address.
A special PSImode move pattern uses this predicate. */
int
@@ -906,7 +896,7 @@ secondary_reload_class (class, mode, in, input)
&& class == ADDRESS_REGS)
return DATA_REGS;
- /* Address register stores which are not PSImode need a scrach register. */
+ /* Address register stores which are not PSImode need a scratch register. */
if (! input
&& GET_CODE (in) == MEM
&& (mode != PSImode)
diff --git a/gcc/config/mn10200/mn10200.h b/gcc/config/mn10200/mn10200.h
index 53ec0de0a71..7eb26dd7c0d 100644
--- a/gcc/config/mn10200/mn10200.h
+++ b/gcc/config/mn10200/mn10200.h
@@ -1,5 +1,4 @@
-/* Definitions of target machine for GNU compiler.
- Matsushita MN10200 series
+/* Definitions of target machine for GNU compiler. Matsushita MN10200 series
Copyright (C) 1997 Free Software Foundation, Inc.
Contributed by Jeff Law (law@cygnus.com).
@@ -566,7 +565,7 @@ extern struct rtx_def *function_arg();
#define TRAMPOLINE_TEMPLATE(FILE) \
do { \
fprintf (FILE, "\t.byte 0xfd\n"); \
- fprintf (FILE, "\t.byte 0x03\n"); \
+ fprintf (FILE, "\t.byte 0x00\n"); \
fprintf (FILE, "\t.byte 0x00\n"); \
fprintf (FILE, "\tmov (a3),a0\n"); \
fprintf (FILE, "\tadd -4,a3\n"); \
@@ -614,10 +613,15 @@ extern struct rtx_def *function_arg();
#define CONSTANT_ADDRESS_P(X) CONSTANT_P (X)
/* Extra constraints. */
+#define OK_FOR_R(OP) \
+ (GET_CODE (OP) == MEM \
+ && GET_MODE (OP) == QImode \
+ && REG_P (XEXP (OP, 0)))
/* Q is used for sp + <something> in the {zero,sign}_extendpsisi2 patterns. */
#define EXTRA_CONSTRAINT(OP, C) \
- ((C) == 'S' ? GET_CODE (OP) == SYMBOL_REF : \
+ ((C) == 'R' ? OK_FOR_R (OP) : \
+ (C) == 'S' ? GET_CODE (OP) == SYMBOL_REF : \
(C) == 'Q' ? GET_CODE (OP) == PLUS : 0)
/* Maximum number of registers that can appear in a valid memory address. */
@@ -663,6 +667,11 @@ extern struct rtx_def *function_arg();
The MODE argument is the machine mode for the MEM expression
that wants to use this address.
+ We used to allow reg+reg addresses for QImode and HImode; however,
+ they tended to cause the register allocator to run out of registers.
+ Basically, an indexed load/store always keeps 2 data and one address
+ register live, which is just too many for this machine.
+
The other macros defined here are used only in GO_IF_LEGITIMATE_ADDRESS,
except for CONSTANT_ADDRESS_P which is actually machine-independent. */
@@ -692,10 +701,6 @@ extern struct rtx_def *function_arg();
{ \
if (GET_CODE (index) == CONST_INT) \
goto ADDR; \
- if (GET_CODE (index) == REG \
- && REG_OK_FOR_INDEX_P (index) \
- && GET_MODE_SIZE (MODE) <= word_mode) \
- goto ADDR; \
} \
} \
}
@@ -948,7 +953,7 @@ do { char dstr[30]; \
if ((LOG) != 0) \
fprintf (FILE, "\t.align %d\n", (LOG))
-/* We don't have to worry about dbx compatability for the mn10200. */
+/* We don't have to worry about dbx compatibility for the mn10200. */
#define DEFAULT_GDB_EXTENSIONS 1
/* Use stabs debugging info by default. */
diff --git a/gcc/config/mn10200/mn10200.md b/gcc/config/mn10200/mn10200.md
index 90eac0e9e08..9dc753c3023 100644
--- a/gcc/config/mn10200/mn10200.md
+++ b/gcc/config/mn10200/mn10200.md
@@ -30,7 +30,7 @@
;; none_0hit - insn does not affect cc but it does modify operand 0
;; This attribute is used to keep track of when operand 0 changes.
;; See the description of NOTICE_UPDATE_CC for more info.
-;; set_znv - sets z,n,v to useable values; c is unknown.
+;; set_znv - sets z,n,v to usable values; c is unknown.
;; set_zn - sets z,n to usable values; v,c is unknown.
;; compare - compare instruction
;; clobber - value of cc is unknown
@@ -497,13 +497,21 @@
;;
;; We could do HImode negations with a "not;add" sequence, but
;; generally it's generated slightly worse code.
+;;
+;; The second alternative is not strictly necesasry, but helps
+;; when the register allocators start running short of registers.
(define_insn "neghi2"
- [(set (match_operand:HI 0 "general_operand" "=&d")
- (neg:HI (match_operand:HI 1 "general_operand" "d")))]
+ [(set (match_operand:HI 0 "general_operand" "=&d,d")
+ (neg:HI (match_operand:HI 1 "general_operand" "d,0")))]
""
- "sub %0,%0\;sub %1,%0"
+ "@
+ sub %0,%0\;sub %1,%0
+ not %0\;add 1,%0"
[(set_attr "cc" "set_zn")])
+;; The not/and sequence won't work here. It's not clear if we'll
+;; ever need to provide an alternate sequence since this should
+;; be used much less frequently than neghi2.
(define_insn "negpsi2"
[(set (match_operand:PSI 0 "general_operand" "=&d")
(neg:PSI (match_operand:PSI 1 "general_operand" "d")))]
@@ -642,54 +650,66 @@
;; BIT INSTRUCTIONS
;; -----------------------------------------------------------------
-;; When clearing a set of bits in memory, we load the inverted bitmask into
-;; a register, then use bclr.
+;; These clears a constant set of bits in memory or in a register.
+;; We must support register destinations to make reload happy.
(define_insn ""
- [(set (match_operand:QI 0 "indirect_memory_operand" "")
+ [(set (match_operand:QI 0 "general_operand" "R,d")
(subreg:QI
(and:HI (subreg:HI (match_dup 0) 0)
(match_operand 1 "const_int_operand" "")) 0))
- (clobber (match_scratch:HI 2 "=&d"))]
+ (clobber (match_scratch:HI 2 "=&d,X"))]
""
- "mov %N1,%2\;bclr %2,%0"
+ "@
+ mov %N1,%2\;bclr %2,%0
+ and %1,%0"
[(set_attr "cc" "clobber")])
-;; These clear a non-constant set of bits in memory.
+;; This clears a variable set of bits in memory or in a register.
(define_insn ""
- [(set (match_operand:QI 0 "indirect_memory_operand" "")
+ [(set (match_operand:QI 0 "general_operand" "R,d")
(subreg:QI
(and:HI (subreg:HI (match_dup 0) 0)
- (not:HI (match_operand:HI 1 "general_operand" "d"))) 0))]
+ (not:HI (match_operand:HI 1 "general_operand" "d,d"))) 0))
+ (clobber (match_scratch:HI 2 "=X,&d"))]
""
- "bclr %1,%0"
+ "@
+ bclr %1,%0
+ mov %1,%2\;not %2\;and %2,%0"
[(set_attr "cc" "clobber")])
(define_insn ""
- [(set (match_operand:QI 0 "indirect_memory_operand" "")
+ [(set (match_operand:QI 0 "general_operand" "R,d")
(subreg:QI
- (and:HI (not:HI (match_operand:HI 1 "general_operand" "d"))
- (subreg:HI (match_dup 0) 0)) 0))]
+ (and:HI (not:HI (match_operand:HI 1 "general_operand" "d,d"))
+ (subreg:HI (match_dup 0) 0)) 0))
+ (clobber (match_scratch:HI 2 "=X,&d"))]
""
- "bclr %1,%0"
+ "@
+ bclr %1,%0
+ mov %1,%2\;not %2\;and %2,%0"
[(set_attr "cc" "clobber")])
;; These set bits in memory.
(define_insn ""
- [(set (match_operand:QI 0 "indirect_memory_operand" "")
+ [(set (match_operand:QI 0 "general_operand" "R,d")
(subreg:QI
(ior:HI (subreg:HI (match_dup 0) 0)
- (match_operand:HI 1 "general_operand" "d")) 0))]
+ (match_operand:HI 1 "general_operand" "d,d")) 0))]
""
- "bset %1,%0"
+ "@
+ bset %1,%0
+ or %1,%0"
[(set_attr "cc" "clobber")])
(define_insn ""
- [(set (match_operand:QI 0 "indirect_memory_operand" "")
+ [(set (match_operand:QI 0 "general_operand" "R,d")
(subreg:QI
- (ior:HI (match_operand:HI 1 "general_operand" "d")
+ (ior:HI (match_operand:HI 1 "general_operand" "d,d")
(subreg:HI (match_dup 0) 0)) 0))]
""
- "bset %1,%0"
+ "@
+ bset %1,%0
+ or %1,%0"
[(set_attr "cc" "clobber")])
;; Not any shorter/faster than using cmp, but it might save a
@@ -1688,7 +1708,7 @@
;; a few times, then truncating the value to PSImode.
;;
;; This first pattern combines the shifting & truncation operations, by
-;; itself it is a win because the shifts end up occuring in PSImode instead
+;; itself it is a win because the shifts end up occurring in PSImode instead
;; of SImode. However, it has the secondary effect of giving us the
;; opportunity to match patterns which allow us to remove the initial
;; extension completely, which is a big win.
diff --git a/gcc/config/mn10200/t-mn10200 b/gcc/config/mn10200/t-mn10200
index 70a2c43e7de..9486837cd9a 100644
--- a/gcc/config/mn10200/t-mn10200
+++ b/gcc/config/mn10200/t-mn10200
@@ -35,7 +35,7 @@ LIB1ASMFUNCS = _divhi3 \
# built correctly, so...
# We do not have DF or DI types, so fake out the libgcc2 compilation.
-LIBGCC2_CFLAGS = -g -O2 -DDF=SF -DDI=SI $(GCC_CFLAGS) $(LIBGCC2_INCLUDES)
+TARGET_LIBGCC2_CFLAGS=-DDF=SF -DDI=SI
LIB2FUNCS_EXTRA = fp-bit.c $(srcdir)/config/mn10200/udivmodsi4.c \
$(srcdir)/config/mn10200/divmod.c $(srcdir)/config/mn10200/udivmod.c
diff --git a/gcc/config/mn10300/mn10300.c b/gcc/config/mn10300/mn10300.c
index d6fd8206493..f46e4232083 100644
--- a/gcc/config/mn10300/mn10300.c
+++ b/gcc/config/mn10300/mn10300.c
@@ -19,8 +19,8 @@ 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 <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
@@ -254,6 +254,18 @@ print_operand (file, x, code)
output_address (GEN_INT ((~INTVAL (x)) & 0xff));
break;
+ /* For shift counts. The hardware ignores the upper bits of
+ any immediate, but the assembler will flag an out of range
+ shift count as an error. So we mask off the high bits
+ of the immediate here. */
+ case 'S':
+ if (GET_CODE (x) == CONST_INT)
+ {
+ fprintf (file, "%d", INTVAL (x) & 0x1f);
+ break;
+ }
+ /* FALL THROUGH */
+
default:
switch (GET_CODE (x))
{
@@ -535,7 +547,21 @@ expand_epilogue ()
size = get_frame_size () + current_function_outgoing_args_size;
size += (current_function_outgoing_args_size ? 4 : 0);
- /* Cut back the stack. */
+ /* Maybe cut back the stack, except for the register save area.
+
+ If the frame pointer exists, then use the frame pointer to
+ cut back the stack.
+
+ If the stack size + register save area is more than 255 bytes,
+ then the stack must be cut back here since the size + register
+ save size is too big for a ret/retf instruction.
+
+ Else leave it alone, it will be cut back as part of the
+ ret/retf instruction, or there wasn't any stack to begin with.
+
+ Under no circumstances should the register save area be
+ deallocated here, that would leave a window where an interrupt
+ could occur and trash the register save area. */
if (frame_pointer_needed)
{
emit_move_insn (stack_pointer_rtx, frame_pointer_rtx);
@@ -543,7 +569,7 @@ expand_epilogue ()
}
else if ((regs_ever_live[2] || regs_ever_live[3]
|| regs_ever_live[6] || regs_ever_live[7])
- && size > 255)
+ && size + 16 > 255)
{
emit_insn (gen_addsi3 (stack_pointer_rtx,
stack_pointer_rtx,
@@ -555,11 +581,11 @@ expand_epilogue ()
the stack with one instruction.
?!? Only save registers which are actually used. Reduces
- stack requireents and is faster. */
+ stack requirements and is faster. */
if (regs_ever_live[2] || regs_ever_live[3]
|| regs_ever_live[6] || regs_ever_live[7]
|| frame_pointer_needed)
- emit_jump_insn (gen_return_internal_regs (GEN_INT (size)));
+ emit_jump_insn (gen_return_internal_regs (GEN_INT (size + 16)));
else
{
if (size)
@@ -963,3 +989,77 @@ impossible_plus_operand (op, mode)
return 0;
}
+
+/* Return 1 if X contains a symbolic expression. We know these
+ expressions will have one of a few well defined forms, so
+ we need only check those forms. */
+int
+symbolic_operand (op, mode)
+ register rtx op;
+ enum machine_mode mode;
+{
+ switch (GET_CODE (op))
+ {
+ case SYMBOL_REF:
+ case LABEL_REF:
+ return 1;
+ case CONST:
+ op = XEXP (op, 0);
+ return ((GET_CODE (XEXP (op, 0)) == SYMBOL_REF
+ || GET_CODE (XEXP (op, 0)) == LABEL_REF)
+ && GET_CODE (XEXP (op, 1)) == CONST_INT);
+ default:
+ return 0;
+ }
+}
+
+/* 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.
+
+ Normally it is always safe for this macro to do nothing. It exists to
+ recognize opportunities to optimize the output.
+
+ But on a few ports with segmented architectures and indexed addressing
+ (mn10300, hppa) it is used to rewrite certain problematical addresses. */
+rtx
+legitimize_address (x, oldx, mode)
+ rtx x;
+ rtx oldx;
+ enum machine_mode mode;
+{
+ /* Uh-oh. We might have an address for x[n-100000]. This needs
+ special handling to avoid creating an indexed memory address
+ with x-100000 as the base. */
+ if (GET_CODE (x) == PLUS
+ && symbolic_operand (XEXP (x, 1), VOIDmode))
+ {
+ /* Ugly. We modify things here so that the address offset specified
+ by the index expression is computed first, then added to x to form
+ the entire address. */
+
+ rtx regx1, regx2, regy1, regy2, y;
+
+ /* Strip off any CONST. */
+ y = XEXP (x, 1);
+ if (GET_CODE (y) == CONST)
+ y = XEXP (y, 0);
+
+ if (GET_CODE (y) == PLUS || GET_CODE (y) == MINUS)
+ {
+ regx1 = force_reg (Pmode, force_operand (XEXP (x, 0), 0));
+ regy1 = force_reg (Pmode, force_operand (XEXP (y, 0), 0));
+ regy2 = force_reg (Pmode, force_operand (XEXP (y, 1), 0));
+ regx1 = force_reg (Pmode,
+ gen_rtx (GET_CODE (y), Pmode, regx1, regy2));
+ return force_reg (Pmode, gen_rtx (PLUS, Pmode, regx1, regy1));
+ }
+ }
+ return x;
+}
diff --git a/gcc/config/mn10300/mn10300.h b/gcc/config/mn10300/mn10300.h
index 88065a2ece3..9ebcec147c1 100644
--- a/gcc/config/mn10300/mn10300.h
+++ b/gcc/config/mn10300/mn10300.h
@@ -1,5 +1,4 @@
-/* Definitions of target machine for GNU compiler.
- Matsushita MN10300 series
+/* Definitions of target machine for GNU compiler. Matsushita MN10300 series
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Contributed by Jeff Law (law@cygnus.com).
@@ -49,11 +48,15 @@ extern struct rtx_def *zero_areg;
where VALUE is the bits to set or minus the bits to clear.
An empty string NAME is used to identify the default VALUE. */
+/* Generate code to work around mul/mulq bugs on the mn10300. */
+#define TARGET_MULT_BUG (target_flags & 0x1)
#define TARGET_SWITCHES \
- {{ "", TARGET_DEFAULT}}
+ {{ "mult-bug", 0x1}, \
+ { "no-mult-bug", -0x1}, \
+ { "", TARGET_DEFAULT}}
#ifndef TARGET_DEFAULT
-#define TARGET_DEFAULT 0
+#define TARGET_DEFAULT 0x1
#endif
/* Print subsidiary information on the compiler version in use. */
@@ -635,7 +638,18 @@ extern struct rtx_def *mn10300_builtin_saveregs ();
The other macros defined here are used only in GO_IF_LEGITIMATE_ADDRESS,
except for CONSTANT_ADDRESS_P which is actually
- machine-independent. */
+ machine-independent.
+
+ On the mn10300, the value in the address register must be
+ in the same memory space/segment as the effective address.
+
+ This is problematical for reload since it does not understand
+ that base+index != index+base in a memory reference.
+
+ Note it is still possible to use reg+reg addressing modes,
+ it's just much more difficult. For a discussion of a possible
+ workaround and solution, see the comments in pa.c before the
+ function record_unscaled_index_insn_codes. */
/* Accept either REG or SUBREG where a register is valid. */
@@ -661,11 +675,7 @@ extern struct rtx_def *mn10300_builtin_saveregs ();
base = XEXP (X, 1), index = XEXP (X, 0); \
if (base != 0 && index != 0) \
{ \
- if (CONSTANT_ADDRESS_P (index)) \
- goto ADDR; \
- if (REG_P (index) \
- && REG_OK_FOR_INDEX_P (index) \
- && GET_MODE_SIZE (mode) <= GET_MODE_SIZE (word_mode)) \
+ if (GET_CODE (index) == CONST_INT) \
goto ADDR; \
} \
} \
@@ -685,7 +695,12 @@ extern struct rtx_def *mn10300_builtin_saveregs ();
It is always safe for this macro to do nothing. It exists to recognize
opportunities to optimize the output. */
-#define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) {}
+extern struct rtx_def *legitimize_address ();
+#define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) \
+{ rtx orig_x = (X); \
+ (X) = legitimize_address (X, OLDX, MODE); \
+ if ((X) != orig_x && memory_address_p (MODE, X)) \
+ goto WIN; }
/* Go to LABEL if ADDR (a legitimate address expression)
has an effect that depends on the machine mode it is used for. */
@@ -921,7 +936,7 @@ do { char dstr[30]; \
if ((LOG) != 0) \
fprintf (FILE, "\t.align %d\n", (LOG))
-/* We don't have to worry about dbx compatability for the mn10300. */
+/* We don't have to worry about dbx compatibility for the mn10300. */
#define DEFAULT_GDB_EXTENSIONS 1
/* Use stabs debugging info by default. */
@@ -998,3 +1013,4 @@ extern int impossible_plus_operand ();
extern enum reg_class secondary_reload_class ();
extern int initial_offset ();
extern char *output_tst ();
+int symbolic_operand ();
diff --git a/gcc/config/mn10300/mn10300.md b/gcc/config/mn10300/mn10300.md
index f821e499f2a..2ff8a8162ea 100644
--- a/gcc/config/mn10300/mn10300.md
+++ b/gcc/config/mn10300/mn10300.md
@@ -1,4 +1,4 @@
-; GCC machine description for Matsushita MN10300
+;; GCC machine description for Matsushita MN10300
;; Copyright (C) 1996, 1997 Free Software Foundation, Inc.
;; Contributed by Jeff Law (law@cygnus.com).
@@ -30,8 +30,8 @@
;; none_0hit - insn does not affect cc but it does modify operand 0
;; This attribute is used to keep track of when operand 0 changes.
;; See the description of NOTICE_UPDATE_CC for more info.
-;; set_znv - insn sets z,n,v to useable values; c is unusable.
-;; set_zn - insn sets z,n to useable values; v,c are unuseable.
+;; set_znv - insn sets z,n,v to usable values; c is unusable.
+;; set_zn - insn sets z,n to usable values; v,c are unusable.
;; compare - compare instruction
;; invert -- like compare, but flags are inverted.
;; clobber - value of cc is unknown
@@ -57,7 +57,7 @@
}")
(define_insn ""
- [(set (match_operand:QI 0 "general_operand" "=d,a,d,a,d,a,d,a,d,m")
+ [(set (match_operand:QI 0 "general_operand" "=d,*a,d,*a,d,*a,d,*a,d,m")
(match_operand:QI 1 "general_operand" "0,0,I,I,a,d,di,ia,m,d"))]
"register_operand (operands[0], QImode)
|| register_operand (operands[1], QImode)"
@@ -112,7 +112,7 @@
}")
(define_insn ""
- [(set (match_operand:HI 0 "general_operand" "=d,a,d,a,d,a,d,a,d,m")
+ [(set (match_operand:HI 0 "general_operand" "=d,*a,d,*a,d,*a,d,*a,d,m")
(match_operand:HI 1 "general_operand" "0,0,I,I,a,d,di,ia,m,d"))]
"register_operand (operands[0], HImode)
|| register_operand (operands[1], HImode)"
@@ -730,7 +730,13 @@
(mult:SI (match_operand:SI 1 "register_operand" "%0")
(match_operand:SI 2 "register_operand" "d")))]
""
- "mul %2,%0"
+ "*
+{
+ if (TARGET_MULT_BUG)
+ return \"nop\;nop\;mul %2,%0\";
+ else
+ return \"mul %2,%0\";
+}"
[(set_attr "cc" "set_zn")])
(define_insn "udivmodsi4"
@@ -1269,7 +1275,7 @@
asl2 %0
asl2 %0\;add %0,%0
asl2 %0\;asl2 %0
- asl %2,%0"
+ asl %S2,%0"
[(set_attr "cc" "set_zn")])
(define_insn "lshrsi3"
@@ -1278,7 +1284,7 @@
(match_operand:SI 1 "register_operand" "0")
(match_operand:QI 2 "nonmemory_operand" "di")))]
""
- "lsr %2,%0"
+ "lsr %S2,%0"
[(set_attr "cc" "set_zn")])
(define_insn "ashrsi3"
@@ -1287,7 +1293,7 @@
(match_operand:SI 1 "register_operand" "0")
(match_operand:QI 2 "nonmemory_operand" "di")))]
""
- "asr %2,%0"
+ "asr %S2,%0"
[(set_attr "cc" "set_zn")])
;; ----------------------------------------------------------------------
diff --git a/gcc/config/msdos/top.sed b/gcc/config/msdos/top.sed
index 7881236d9b7..0dd99c4908f 100644
--- a/gcc/config/msdos/top.sed
+++ b/gcc/config/msdos/top.sed
@@ -19,9 +19,9 @@ host_xm_file=config/i386/xm-dos.h
/^xmake_file=/ d
/^tmake_file=/ d
/^version=/ c\
-version=2.7.2
+version=2.8.1
/^mainversion=/ c\
-mainversion=2.7.2
+mainversion=2.8.1
s/CC = cc/CC = gcc/
s/:\$/: \$/g
s/^ \ *\.\// /
diff --git a/gcc/config/netbsd.h b/gcc/config/netbsd.h
index 860e10107e5..5fecd35d483 100644
--- a/gcc/config/netbsd.h
+++ b/gcc/config/netbsd.h
@@ -13,11 +13,11 @@
#define GCC_INCLUDE_DIR "/usr/include"
#undef INCLUDE_DEFAULTS
-#define INCLUDE_DEFAULTS \
- { \
- { GPLUSPLUS_INCLUDE_DIR, 1, 1 }, \
- { GCC_INCLUDE_DIR, 0, 0 }, \
- { 0, 0, 0 } \
+#define INCLUDE_DEFAULTS \
+ { \
+ { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 }, \
+ { GCC_INCLUDE_DIR, "GCC", 0, 0 }, \
+ { 0, 0, 0, 0 } \
}
/* Under NetBSD, the normal location of the compiler back ends is the
diff --git a/gcc/config/nextstep.h b/gcc/config/nextstep.h
index de8fbdc8bf0..96435fc67ea 100644
--- a/gcc/config/nextstep.h
+++ b/gcc/config/nextstep.h
@@ -27,42 +27,43 @@ Boston, MA 02111-1307, USA. */
#undef INCLUDE_DEFAULTS
#define INCLUDE_DEFAULTS \
{ \
- { GPLUSPLUS_INCLUDE_DIR, 1, 1 }, \
- { LOCAL_INCLUDE_DIR, 0, 1 }, \
- { TOOL_INCLUDE_DIR, 0, 1 }, \
- { GCC_INCLUDE_DIR, 0, 0 }, \
+ { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 }, \
+ { LOCAL_INCLUDE_DIR, 0, 0, 1 }, \
+ { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1 }, \
+ { GCC_INCLUDE_DIR, "GCC", 0, 0 }, \
/* These are for fixincludes-fixed ansi/bsd headers \
which wouldn't be found otherwise. \
(The use of string catenation here is OK since \
NeXT's native compiler is derived from GCC.) */ \
- { GCC_INCLUDE_DIR "/ansi", 0, 0 }, \
- { GCC_INCLUDE_DIR "/bsd", 0, 0 }, \
- { "/NextDeveloper/Headers", 0, 0 }, \
- { "/NextDeveloper/Headers/ansi", 0, 0 }, \
- { "/NextDeveloper/Headers/bsd", 0, 0 }, \
- { "/LocalDeveloper/Headers", 0, 0 }, \
- { "/LocalDeveloper/Headers/ansi", 0, 0 }, \
- { "/LocalDeveloper/Headers/bsd", 0, 0 }, \
- { "/NextDeveloper/2.0CompatibleHeaders", 0, 0 }, \
- { STANDARD_INCLUDE_DIR, 0, 0 }, \
- { "/usr/include/bsd", 0, 0 }, \
- { 0, 0, 0 } \
+ { GCC_INCLUDE_DIR "/ansi", 0, 0, 0 }, \
+ { GCC_INCLUDE_DIR "/bsd", 0, 0, 0 }, \
+ { "/NextDeveloper/Headers", 0, 0, 0 }, \
+ { "/NextDeveloper/Headers/ansi", 0, 0, 0 }, \
+ { "/NextDeveloper/Headers/bsd", 0, 0, 0 }, \
+ { "/LocalDeveloper/Headers", 0, 0, 0 }, \
+ { "/LocalDeveloper/Headers/ansi", 0, 0, 0 }, \
+ { "/LocalDeveloper/Headers/bsd", 0, 0, 0 }, \
+ { "/NextDeveloper/2.0CompatibleHeaders", 0, 0, 0 }, \
+ { STANDARD_INCLUDE_DIR, 0, 0, 0 }, \
+ { "/usr/include/bsd", 0, 0, 0 }, \
+ { 0, 0, 0, 0 } \
}
#else /* CROSS_COMPILE */
#undef INCLUDE_DEFAULTS
#define INCLUDE_DEFAULTS \
{ \
- { GPLUSPLUS_INCLUDE_DIR, 1, 1 }, \
- { LOCAL_INCLUDE_DIR, 0, 1 }, \
- { GCC_INCLUDE_DIR, 0, 0 }, \
- { GCC_INCLUDE_DIR "/ansi", 0, 0 }, \
- { GCC_INCLUDE_DIR "/bsd", 0, 0 }, \
- { TOOL_INCLUDE_DIR, 0, 1 }, \
- { TOOL_INCLUDE_DIR "/ansi", 0, 0 }, \
- { TOOL_INCLUDE_DIR "/bsd", 0, 0 }, \
- { STANDARD_INCLUDE_DIR, 0, 0 }, \
- { "/usr/include/bsd", 0, 0 }, \
- { 0, 0, 0 } \
+ { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 }, \
+ { GPLUSPLUS_INCLUDE_DIR, 0, 1, 1 }, \
+ { LOCAL_INCLUDE_DIR, 0, 0, 1 }, \
+ { GCC_INCLUDE_DIR, "GCC", 0, 0 }, \
+ { GCC_INCLUDE_DIR "/ansi", 0, 0, 0 }, \
+ { GCC_INCLUDE_DIR "/bsd", 0, 0, 0 }, \
+ { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1 }, \
+ { TOOL_INCLUDE_DIR "/ansi", 0, 0, 0 }, \
+ { TOOL_INCLUDE_DIR "/bsd", 0, 0, 0 }, \
+ { STANDARD_INCLUDE_DIR, 0, 0, 0 }, \
+ { "/usr/include/bsd", 0, 0, 0 }, \
+ { 0, 0, 0, 0 } \
}
#endif /* CROSS_COMPILE */
@@ -581,3 +582,9 @@ objc_section_init () \
const_section (); \
} \
while (0)
+
+#ifdef ASM_COMMENT_START
+# undef ASM_COMMENT_START
+#endif
+
+#define ASM_COMMENT_START ";#"
diff --git a/gcc/config/ns32k/ns32k.c b/gcc/config/ns32k/ns32k.c
index 0e07662fa31..187a6fbd071 100644
--- a/gcc/config/ns32k/ns32k.c
+++ b/gcc/config/ns32k/ns32k.c
@@ -1,5 +1,5 @@
/* Subroutines for assembler code output on the NS32000.
- Copyright (C) 1988, 1994, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1988, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -19,8 +19,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* Some output-actions in ns32k.md need these. */
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
diff --git a/gcc/config/pa/lib1funcs.asm b/gcc/config/pa/lib1funcs.asm
index a3e4995f929..95eb75e1398 100644
--- a/gcc/config/pa/lib1funcs.asm
+++ b/gcc/config/pa/lib1funcs.asm
@@ -8,6 +8,14 @@
; 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 with other programs, and to distribute
+; those programs 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 another program.)
+
; 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
diff --git a/gcc/config/pa/lib2funcs.asm b/gcc/config/pa/lib2funcs.asm
index 854aa9c62be..cf57cbb9b92 100644
--- a/gcc/config/pa/lib2funcs.asm
+++ b/gcc/config/pa/lib2funcs.asm
@@ -14,6 +14,14 @@
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
+; 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 with other programs, and to distribute
+; those programs 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 another program.)
+
; 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,
diff --git a/gcc/config/pa/pa-hpux10.h b/gcc/config/pa/pa-hpux10.h
index 1c57d5ee6ea..ab7cee39389 100644
--- a/gcc/config/pa/pa-hpux10.h
+++ b/gcc/config/pa/pa-hpux10.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler, for HP PA-RISC 1.1
- Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by Tim Moore (moore@defmacro.cs.utah.edu)
This file is part of GNU CC.
@@ -20,7 +20,7 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* We can debug dynamically linked executables on hpux9; we also want
- derefercing of a NULL pointer to cause a SEGV. */
+ dereferencing of a NULL pointer to cause a SEGV. */
#undef LINK_SPEC
#if ((TARGET_DEFAULT | TARGET_CPU_DEFAULT) & 1)
#define LINK_SPEC \
diff --git a/gcc/config/pa/pa-hpux9.h b/gcc/config/pa/pa-hpux9.h
index 95b031e8c8d..8d039d2637e 100644
--- a/gcc/config/pa/pa-hpux9.h
+++ b/gcc/config/pa/pa-hpux9.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler, for HP PA-RISC 1.1
- Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by Tim Moore (moore@defmacro.cs.utah.edu)
This file is part of GNU CC.
@@ -20,7 +20,7 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* We can debug dynamically linked executables on hpux9; we also want
- derefercing of a NULL pointer to cause a SEGV. */
+ dereferencing of a NULL pointer to cause a SEGV. */
#undef LINK_SPEC
#if ((TARGET_DEFAULT | TARGET_CPU_DEFAULT) & 1)
#define LINK_SPEC \
diff --git a/gcc/config/pa/pa-pro-end.h b/gcc/config/pa/pa-pro-end.h
index 267057c8506..8b1de1c5e5f 100644
--- a/gcc/config/pa/pa-pro-end.h
+++ b/gcc/config/pa/pa-pro-end.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler, for PRO.
- Copyright (C) 1996 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -31,7 +31,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#undef CPP_PREDEFINES
#define CPP_PREDEFINES "-Dhppa -DPWB -Acpu(hppa) -Amachine(hppa)"
-/* hpux8 and later have C++ compatable include files, so do not
+/* hpux8 and later have C++ compatible include files, so do not
pretend they are `extern "C"'. */
#define NO_IMPLICIT_EXTERN_C
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index db6c4957489..d2265e6efba 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -1,5 +1,5 @@
/* Subroutines for insn-output.c for HPPA.
- Copyright (C) 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
Contributed by Tim Moore (moore@cs.utah.edu), based on sparc.c
This file is part of GNU CC.
@@ -19,8 +19,8 @@ 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 <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
@@ -37,6 +37,9 @@ Boston, MA 02111-1307, USA. */
#include "expr.h"
#include "obstack.h"
+static void restore_unscaled_index_insn_codes PROTO((rtx));
+static void record_unscaled_index_insn_codes PROTO((rtx));
+
/* Save the operands last given to a compare for use when we
generate a scc or bcc insn. */
@@ -77,6 +80,13 @@ struct deferred_plabel
} *deferred_plabels = 0;
int n_deferred_plabels = 0;
+/* Array indexed by INSN_UIDs holding the INSN_CODE of an insn which
+ uses an unscaled indexed address before delay slot scheduling. */
+static int *unscaled_index_insn_codes;
+
+/* Upper bound for the array. */
+static int max_unscaled_index_insn_codes_uid;
+
void
override_options ()
{
@@ -111,17 +121,17 @@ override_options ()
if (flag_pic && (TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS))
{
- warning ("PIC code generation is not compatable with fast indirect calls\n");
+ warning ("PIC code generation is not compatible with fast indirect calls\n");
}
if (flag_pic && profile_flag)
{
- warning ("PIC code generation is not compatable with profiling\n");
+ warning ("PIC code generation is not compatible with profiling\n");
}
if (TARGET_SPACE && (flag_pic || profile_flag))
{
- warning ("Out of line entry/exit sequences are not compatable\n");
+ warning ("Out of line entry/exit sequences are not compatible\n");
warning ("with PIC or profiling\n");
}
@@ -282,7 +292,8 @@ move_operand (op, mode)
/* Since move_operand is only used for source operands, we can always
allow scaled indexing! */
- if (GET_CODE (op) == PLUS
+ if (! TARGET_DISABLE_INDEXING
+ && GET_CODE (op) == PLUS
&& ((GET_CODE (XEXP (op, 0)) == MULT
&& GET_CODE (XEXP (XEXP (op, 0), 0)) == REG
&& GET_CODE (XEXP (XEXP (op, 0), 1)) == CONST_INT
@@ -1051,6 +1062,7 @@ emit_move_sequence (operands, mode, scratch_reg)
{
register rtx operand0 = operands[0];
register rtx operand1 = operands[1];
+ register rtx tem;
if (reload_in_progress && GET_CODE (operand0) == REG
&& REGNO (operand0) >= FIRST_PSEUDO_REGISTER)
@@ -1074,6 +1086,15 @@ emit_move_sequence (operands, mode, scratch_reg)
operand1 = alter_subreg (operand1);
}
+ if (reload_in_progress && GET_CODE (operand0) == MEM
+ && ((tem = find_replacement (&XEXP (operand0, 0)))
+ != XEXP (operand0, 0)))
+ operand0 = gen_rtx (MEM, GET_MODE (operand0), tem);
+ if (reload_in_progress && GET_CODE (operand1) == MEM
+ && ((tem = find_replacement (&XEXP (operand1, 0)))
+ != XEXP (operand1, 0)))
+ operand1 = gen_rtx (MEM, GET_MODE (operand1), tem);
+
/* Handle secondary reloads for loads/stores of FP registers from
REG+D addresses where D does not fit in 5 bits, including
(subreg (mem (addr))) cases. */
@@ -1869,7 +1890,7 @@ find_addr_reg (addr)
OPERANDS[4] is the size as a CONST_INT
OPERANDS[3] is a register for temporary storage.
OPERANDS[5] is the alignment safe to use, as a CONST_INT.
- OPERNADS[6] is another temporary register. */
+ OPERANDS[6] is another temporary register. */
char *
output_block_move (operands, size_is_constant)
@@ -2562,6 +2583,9 @@ output_function_prologue (file, size)
total_code_bytes = -1;
remove_useless_addtr_insns (get_insns (), 0);
+
+ /* Restore INSN_CODEs for insn which use unscaled indexed addresses. */
+ restore_unscaled_index_insn_codes (get_insns ());
}
void
@@ -2911,6 +2935,11 @@ output_function_epilogue (file, size)
fputs ("\tnop\n", file);
fputs ("\t.EXIT\n\t.PROCEND\n", file);
+
+ /* Free up stuff we don't need anymore. */
+ if (unscaled_index_insn_codes)
+ free (unscaled_index_insn_codes);
+ max_unscaled_index_insn_codes_uid = 0;
}
void
@@ -4190,6 +4219,15 @@ secondary_reload_class (class, mode, in)
else
regno = -1;
+ /* If we have something like (mem (mem (...)), we can safely assume the
+ inner MEM will end up in a general register after reloading, so there's
+ no need for a secondary reload. */
+ if (GET_CODE (in) == MEM
+ && GET_CODE (XEXP (in, 0)) == MEM)
+ return NO_REGS;
+
+ /* Handle out of range displacement for integer mode loads/stores of
+ FP registers. */
if (((regno >= FIRST_PSEUDO_REGISTER || regno == -1)
&& GET_MODE_CLASS (mode) == MODE_INT
&& FP_REG_CLASS_P (class))
@@ -4218,6 +4256,7 @@ secondary_reload_class (class, mode, in)
|| GET_CODE (XEXP (tmp, 0)) == LABEL_REF)
&& GET_CODE (XEXP (tmp, 1)) == CONST_INT);
break;
+
default:
is_symbolic = 0;
break;
@@ -4269,7 +4308,7 @@ struct rtx_def *
hppa_builtin_saveregs (arglist)
tree arglist;
{
- rtx offset;
+ rtx offset, dest;
tree fntype = TREE_TYPE (current_function_decl);
int argadj = ((!(TYPE_ARG_TYPES (fntype) != 0
&& (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype)))
@@ -4282,11 +4321,28 @@ hppa_builtin_saveregs (arglist)
offset = current_function_arg_offset_rtx;
/* Store general registers on the stack. */
- move_block_from_reg (23,
- gen_rtx (MEM, BLKmode,
- plus_constant
- (current_function_internal_arg_pointer, -16)),
- 4, 4 * UNITS_PER_WORD);
+ dest = gen_rtx (MEM, BLKmode,
+ plus_constant (current_function_internal_arg_pointer, -16));
+ move_block_from_reg (23, dest, 4, 4 * UNITS_PER_WORD);
+
+ /* move_block_from_reg will emit code to store the argument registers
+ individually as scalar stores.
+
+ However, other insns may later load from the same addresses for
+ a structure load (passing a struct to a varargs routine).
+
+ The alias code assumes that such aliasing can never happen, so we
+ have to keep memory referencing insns from moving up beyond the
+ last argument register store. So we emit a blockage insn here. */
+ emit_insn (gen_blockage ());
+
+ if (flag_check_memory_usage)
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ dest, ptr_mode,
+ GEN_INT (4 * UNITS_PER_WORD), TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_RW),
+ TYPE_MODE (integer_type_node));
+
return copy_to_reg (expand_binop (Pmode, add_optab,
current_function_internal_arg_pointer,
offset, 0, 0, OPTAB_LIB_WIDEN));
@@ -5745,10 +5801,14 @@ output_parallel_addb (operands, length)
}
}
-/* Return nonzero if INSN (a jump insn) immediately follows a call. This
- is used to discourage creating parallel movb/addb insns since a jump
- which immediately follows a call can execute in the delay slot of the
- call. */
+/* Return nonzero if INSN (a jump insn) immediately follows a call to
+ a named function. This is used to discourage creating parallel movb/addb
+ insns since a jump which immediately follows a call can execute in the
+ delay slot of the call.
+
+ It is also used to avoid filling the delay slot of a jump which
+ immediately follows a call since the jump can usually be eliminated
+ completely by modifying RP in the delay slot of the call. */
following_call (insn)
rtx insn;
@@ -5760,7 +5820,8 @@ following_call (insn)
/* Check for CALL_INSNs and millicode calls. */
if (insn
- && (GET_CODE (insn) == CALL_INSN
+ && ((GET_CODE (insn) == CALL_INSN
+ && get_attr_type (insn) != TYPE_DYNCALL)
|| (GET_CODE (insn) == INSN
&& GET_CODE (PATTERN (insn)) != SEQUENCE
&& GET_CODE (PATTERN (insn)) != USE
@@ -5771,6 +5832,97 @@ following_call (insn)
return 0;
}
+/* Restore any INSN_CODEs for insns with unscaled indexed addresses since
+ the INSN_CODE might be clobberd by rerecognition triggered by reorg. */
+
+static void
+restore_unscaled_index_insn_codes (insns)
+ rtx insns;
+{
+ rtx insn;
+
+ for (insn = insns; insn; insn = NEXT_INSN (insn))
+ {
+ if (INSN_UID (insn) < max_unscaled_index_insn_codes_uid
+ && unscaled_index_insn_codes[INSN_UID (insn)] != -1)
+ INSN_CODE (insn) = unscaled_index_insn_codes[INSN_UID (insn)];
+ }
+}
+
+/* Severe braindamage:
+
+ On the PA, address computations within MEM expressions are not
+ commutative because of the implicit space register selection
+ from the base register (instead of the entire effective address).
+
+ Because of this mis-feature we have to know which register in a reg+reg
+ address is the base and which is the index.
+
+ Before reload, the base can be identified by REGNO_POINTER_FLAG. We use
+ this to force base + index addresses to match a different insn than
+ index + base addresses.
+
+ We assume that no pass during or after reload creates new unscaled indexed
+ addresses, so any unscaled indexed address we find after reload must have
+ at one time been recognized a base + index or index + base and we accept
+ any register as a base register.
+
+ This scheme assumes that no pass during/after reload will rerecognize an
+ insn with an unscaled indexed address. This failed due to a reorg call
+ to rerecognize certain insns.
+
+ So, we record if an insn uses an unscaled indexed address and which
+ register is the base (via recording of the INSN_CODE for such insns).
+
+ Just before we output code for the function, we make sure all the insns
+ using unscaled indexed addresses have the same INSN_CODE as they did
+ immediately before delay slot scheduling.
+
+ This is extremely gross. Long term, I'd like to be able to look at
+ REG_POINTER_FLAG to handle these kinds of problems. */
+
+static void
+record_unscaled_index_insn_codes (insns)
+ rtx insns;
+{
+ rtx insn;
+
+ max_unscaled_index_insn_codes_uid = get_max_uid ();
+ unscaled_index_insn_codes
+ = (int *)xmalloc (max_unscaled_index_insn_codes_uid * sizeof (int));
+ memset (unscaled_index_insn_codes, -1,
+ max_unscaled_index_insn_codes_uid * sizeof (int));
+
+ for (insn = insns; insn; insn = NEXT_INSN (insn))
+ {
+ rtx set = single_set (insn);
+ rtx mem = NULL_RTX;
+
+ /* Ignore anything that isn't a normal SET. */
+ if (set == NULL_RTX)
+ continue;
+
+ /* No insns can have more than one MEM. */
+ if (GET_CODE (SET_SRC (set)) == MEM)
+ mem = SET_SRC (set);
+
+ if (GET_CODE (SET_DEST (set)) == MEM)
+ mem = SET_DEST (set);
+
+ /* If neither operand is a mem, then there's nothing to do. */
+ if (mem == NULL_RTX)
+ continue;
+
+ if (GET_CODE (XEXP (mem, 0)) != PLUS)
+ continue;
+
+ /* If both are REGs (or SUBREGs), then record the insn code for
+ this insn. */
+ if (REG_P (XEXP (XEXP (mem, 0), 0)) && REG_P (XEXP (XEXP (mem, 0), 1)))
+ unscaled_index_insn_codes[INSN_UID (insn)] = INSN_CODE (insn);
+ }
+}
+
/* We use this hook to perform a PA specific optimization which is difficult
to do in earlier passes.
@@ -5795,13 +5947,24 @@ following_call (insn)
The jump instructions within the table are special; we must be able
to identify them during assembly output (if the jumps don't get filled
we need to emit a nop rather than nullifying the delay slot)). We
- identify jumps in switch tables by marking the SET with DImode. */
+ identify jumps in switch tables by marking the SET with DImode.
+
+ We also surround the jump table itself with BEGIN_BRTAB and END_BRTAB
+ insns. This serves two purposes, first it prevents jump.c from
+ noticing that the last N entries in the table jump to the instruction
+ immediately after the table and deleting the jumps. Second, those
+ insns mark where we should emit .begin_brtab and .end_brtab directives
+ when using GAS (allows for better link time optimizations). */
pa_reorg (insns)
rtx insns;
{
rtx insn;
+ /* Keep track of which insns have unscaled indexed addresses, and which
+ register is the base address in such insns. */
+ record_unscaled_index_insn_codes (insns);
+
remove_useless_addtr_insns (insns, 1);
pa_combine_instructions (get_insns ());
@@ -5809,25 +5972,25 @@ pa_reorg (insns)
/* This is fairly cheap, so always run it if optimizing. */
if (optimize > 0 && !TARGET_BIG_SWITCH)
{
- /* Find and explode all ADDR_VEC insns. */
+ /* Find and explode all ADDR_VEC or ADDR_DIFF_VEC insns. */
insns = get_insns ();
for (insn = insns; insn; insn = NEXT_INSN (insn))
{
rtx pattern, tmp, location;
unsigned int length, i;
- /* Find an ADDR_VEC insn to explode. */
+ /* Find an ADDR_VEC or ADDR_DIFF_VEC insn to explode. */
if (GET_CODE (insn) != JUMP_INSN
- || GET_CODE (PATTERN (insn)) != ADDR_VEC)
+ || (GET_CODE (PATTERN (insn)) != ADDR_VEC
+ && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC))
continue;
- /* If needed, emit marker for the beginning of the branch table. */
- if (TARGET_GAS)
- emit_insn_before (gen_begin_brtab (), insn);
+ /* Emit marker for the beginning of the branch table. */
+ emit_insn_before (gen_begin_brtab (), insn);
pattern = PATTERN (insn);
location = PREV_INSN (insn);
- length = XVECLEN (pattern, 0);
+ length = XVECLEN (pattern, GET_CODE (pattern) == ADDR_DIFF_VEC);
for (i = 0; i < length; i++)
{
@@ -5838,31 +6001,40 @@ pa_reorg (insns)
emit_label_after (tmp, location);
location = NEXT_INSN (location);
- /* Emit the jump itself. */
- tmp = gen_switch_jump (XEXP (XVECEXP (pattern, 0, i), 0));
- tmp = emit_jump_insn_after (tmp, location);
- JUMP_LABEL (tmp) = XEXP (XVECEXP (pattern, 0, i), 0);
- LABEL_NUSES (JUMP_LABEL (tmp))++;
- location = NEXT_INSN (location);
+ if (GET_CODE (pattern) == ADDR_VEC)
+ {
+ /* Emit the jump itself. */
+ tmp = gen_switch_jump (XEXP (XVECEXP (pattern, 0, i), 0));
+ tmp = emit_jump_insn_after (tmp, location);
+ JUMP_LABEL (tmp) = XEXP (XVECEXP (pattern, 0, i), 0);
+ LABEL_NUSES (JUMP_LABEL (tmp))++;
+ location = NEXT_INSN (location);
+ }
+ else
+ {
+ /* Emit the jump itself. */
+ tmp = gen_switch_jump (XEXP (XVECEXP (pattern, 1, i), 0));
+ tmp = emit_jump_insn_after (tmp, location);
+ JUMP_LABEL (tmp) = XEXP (XVECEXP (pattern, 1, i), 0);
+ LABEL_NUSES (JUMP_LABEL (tmp))++;
+ location = NEXT_INSN (location);
+ }
/* Emit a BARRIER after the jump. */
emit_barrier_after (location);
location = NEXT_INSN (location);
}
- /* If needed, emit marker for the end of the branch table. */
- if (TARGET_GAS)
- {
- emit_insn_before (gen_end_brtab (), location);
- location = NEXT_INSN (location);
- emit_barrier_after (location);
- }
+ /* Emit marker for the end of the branch table. */
+ emit_insn_before (gen_end_brtab (), location);
+ location = NEXT_INSN (location);
+ emit_barrier_after (location);
- /* Delete the ADDR_VEC. */
+ /* Delete the ADDR_VEC or ADDR_DIFF_VEC. */
delete_insn (insn);
}
}
- else if (TARGET_GAS)
+ else
{
/* Sill need an end_brtab insn. */
insns = get_insns ();
@@ -5870,11 +6042,12 @@ pa_reorg (insns)
{
/* Find an ADDR_VEC insn. */
if (GET_CODE (insn) != JUMP_INSN
- || GET_CODE (PATTERN (insn)) != ADDR_VEC)
+ || (GET_CODE (PATTERN (insn)) != ADDR_VEC
+ && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC))
continue;
/* Now generate markers for the beginning and end of the
- branc table. */
+ branch table. */
emit_insn_before (gen_begin_brtab (), insn);
emit_insn_after (gen_end_brtab (), insn);
}
@@ -5931,7 +6104,7 @@ pa_combine_instructions (insns)
/* This can get expensive since the basic algorithm is on the
order of O(n^2) (or worse). Only do it for -O2 or higher
- levels of optimizaton. */
+ levels of optimization. */
if (optimize < 2)
return;
diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h
index daf63c7e24d..79f2bfe4859 100644
--- a/gcc/config/pa/pa.h
+++ b/gcc/config/pa/pa.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler, for the HP Spectrum.
- Copyright (C) 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com) of Cygnus Support
and Tim Moore (moore@defmacro.cs.utah.edu) of the Center for
Software Science at the University of Utah.
@@ -72,7 +72,7 @@ extern int target_flags;
this option will fail miserably if the executable is dynamically linked
or uses nested functions!
- This is also used to trigger agressive unscaled index addressing. */
+ This is also used to trigger aggressive unscaled index addressing. */
#define TARGET_NO_SPACE_REGS (target_flags & 4)
/* Allow unconditional jumps in the delay slots of call instructions. */
@@ -113,7 +113,7 @@ extern int target_flags;
#define TARGET_FAST_INDIRECT_CALLS (target_flags & 1024)
/* Generate code with big switch statements to avoid out of range branches
- occuring within the switch table. */
+ occurring within the switch table. */
#define TARGET_BIG_SWITCH (target_flags & 2048)
/* Macro to define tables used to set the flags.
@@ -276,7 +276,7 @@ extern int target_flags;
or "static /usr/lib/X11R5/libX11.sl".
HPUX 10.20 also has lines like "static branch prediction ..."
- so we filter that out explcitly.
+ so we filter that out explicitly.
We also try to bound our search for libraries with marker
lines. What a pain. */
@@ -1529,6 +1529,7 @@ extern struct rtx_def *hppa_builtin_saveregs ();
|| INT_5_BITS (index))) \
goto ADDR; \
if (! TARGET_SOFT_FLOAT \
+ && ! TARGET_DISABLE_INDEXING \
&& base \
&& (mode == SFmode || mode == DFmode) \
&& GET_CODE (index) == MULT \
diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md
index 848567a5175..79c973b6b4d 100644
--- a/gcc/config/pa/pa.md
+++ b/gcc/config/pa/pa.md
@@ -1,6 +1,5 @@
;;- Machine description for HP PA-RISC architecture for GNU C compiler
-;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
;; Contributed by the Center for Software Science at the University
;; of Utah.
@@ -2049,18 +2048,20 @@
;; that anything generated as this insn will be recognized as one
;; and that it will not successfully combine with anything.
(define_expand "movstrsi"
- [(parallel [(set (mem:BLK (match_operand:BLK 0 "" ""))
- (mem:BLK (match_operand:BLK 1 "" "")))
- (clobber (match_dup 0))
- (clobber (match_dup 1))
+ [(parallel [(set (match_operand:BLK 0 "" "")
+ (match_operand:BLK 1 "" ""))
+ (clobber (match_dup 7))
+ (clobber (match_dup 8))
(clobber (match_dup 4))
(clobber (match_dup 5))
+ (clobber (match_dup 6))
(use (match_operand:SI 2 "arith_operand" ""))
(use (match_operand:SI 3 "const_int_operand" ""))])]
""
"
{
int size, align;
+
/* HP provides very fast block move library routine for the PA;
this routine includes:
@@ -2093,22 +2094,25 @@
/* If size/alignment > 8 (eg size is large in respect to alignment),
then use the library routines. */
- if (size/align > 16)
+ if (size / align > 16)
FAIL;
/* This does happen, but not often enough to worry much about. */
- if (size/align < MOVE_RATIO)
+ if (size / align < MOVE_RATIO)
FAIL;
/* Fall through means we're going to use our block move pattern. */
- operands[0] = copy_to_mode_reg (SImode, XEXP (operands[0], 0));
- operands[1] = copy_to_mode_reg (SImode, XEXP (operands[1], 0));
+ operands[0]
+ = change_address (operands[0], VOIDmode,
+ copy_to_mode_reg (SImode, XEXP (operands[0], 0)));
+ operands[1]
+ = change_address (operands[1], VOIDmode,
+ copy_to_mode_reg (SImode, XEXP (operands[1], 0)));
operands[4] = gen_reg_rtx (SImode);
operands[5] = gen_reg_rtx (SImode);
- emit_insn (gen_movstrsi_internal (operands[0], operands[1], operands[4],
- operands[5], operands[2], operands[3],
- gen_reg_rtx (SImode)));
- DONE;
+ operands[6] = gen_reg_rtx (SImode);
+ operands[7] = XEXP (operands[0], 0);
+ operands[8] = XEXP (operands[1], 0);
}")
;; The operand constraints are written like this to support both compile-time
@@ -4387,15 +4391,29 @@
;; begin and end.
(define_insn "begin_brtab"
[(const_int 1)]
- "TARGET_GAS"
- ".begin_brtab"
+ ""
+ "*
+{
+ /* Only GAS actually supports this pseudo-op. */
+ if (TARGET_GAS)
+ return \".begin_brtab\";
+ else
+ return \"\";
+}"
[(set_attr "type" "move")
(set_attr "length" "0")])
(define_insn "end_brtab"
[(const_int 2)]
- "TARGET_GAS"
- ".end_brtab"
+ ""
+ "*
+{
+ /* Only GAS actually supports this pseudo-op. */
+ if (TARGET_GAS)
+ return \".end_brtab\";
+ else
+ return \"\";
+}"
[(set_attr "type" "move")
(set_attr "length" "0")])
@@ -4811,8 +4829,8 @@
;; Clean up turds left by reload.
(define_peephole
[(set (match_operand 0 "reg_or_nonsymb_mem_operand" "")
- (match_operand 1 "register_operand" "f"))
- (set (match_operand 2 "register_operand" "f")
+ (match_operand 1 "register_operand" "fr"))
+ (set (match_operand 2 "register_operand" "fr")
(match_dup 0))]
"! TARGET_SOFT_FLOAT
&& GET_CODE (operands[0]) == MEM
@@ -4820,6 +4838,9 @@
&& GET_MODE (operands[0]) == GET_MODE (operands[1])
&& GET_MODE (operands[0]) == GET_MODE (operands[2])
&& GET_MODE (operands[0]) == DFmode
+ && GET_CODE (operands[1]) == REG
+ && GET_CODE (operands[2]) == REG
+ && ! side_effects_p (XEXP (operands[0], 0))
&& REGNO_REG_CLASS (REGNO (operands[1]))
== REGNO_REG_CLASS (REGNO (operands[2]))"
"*
@@ -4847,9 +4868,9 @@
}")
(define_peephole
- [(set (match_operand 0 "register_operand" "f")
+ [(set (match_operand 0 "register_operand" "fr")
(match_operand 1 "reg_or_nonsymb_mem_operand" ""))
- (set (match_operand 2 "register_operand" "f")
+ (set (match_operand 2 "register_operand" "fr")
(match_dup 1))]
"! TARGET_SOFT_FLOAT
&& GET_CODE (operands[1]) == MEM
@@ -4857,7 +4878,10 @@
&& GET_MODE (operands[0]) == GET_MODE (operands[1])
&& GET_MODE (operands[0]) == GET_MODE (operands[2])
&& GET_MODE (operands[0]) == DFmode
- && REGNO_REG_CLASS (REGNO (operands[1]))
+ && GET_CODE (operands[0]) == REG
+ && GET_CODE (operands[2]) == REG
+ && ! side_effects_p (XEXP (operands[1], 0))
+ && REGNO_REG_CLASS (REGNO (operands[0]))
== REGNO_REG_CLASS (REGNO (operands[2]))"
"*
{
@@ -5048,7 +5072,7 @@
/* Must import the magic millicode routine. */
output_asm_insn (\".IMPORT $$sh_func_adrs,MILLICODE\", NULL);
- /* This is absolutely fucking amazing.
+ /* This is absolutely amazing.
First, copy our input parameter into %r29 just in case we don't
need to call $$sh_func_adrs. */
@@ -5104,7 +5128,7 @@
(const_int 0)))
(const_int 32)
-;; PORTABLE_RUTNIME
+;; PORTABLE_RUNTIME
(ne (symbol_ref "TARGET_PORTABLE_RUNTIME")
(const_int 0))
(const_int 40)]
diff --git a/gcc/config/pa/rtems.h b/gcc/config/pa/rtems.h
index 0eba88628c0..eebfd4f5cc1 100644
--- a/gcc/config/pa/rtems.h
+++ b/gcc/config/pa/rtems.h
@@ -24,7 +24,3 @@ Boston, MA 02111-1307, USA. */
#undef CPP_PREDEFINES
#define CPP_PREDEFINES "-Dhppa -DPWB -Acpu(hppa) -Amachine(hppa) \
-Drtems -D__rtems__ -Asystem(rtems)"
-
-#undef SUBTARGET_SWITCHES
-#define SUBTARGET_SWITCHES \
- { "rtems", 0 },
diff --git a/gcc/config/pa/x-pa b/gcc/config/pa/x-pa
index c1409ab77b4..4c250477358 100644
--- a/gcc/config/pa/x-pa
+++ b/gcc/config/pa/x-pa
@@ -1,3 +1,3 @@
# BSD on the PA already has ANSI include files which are c++ compatible.
-INSTALL_HEADERS=
+USER_H = $(EXTRA_HEADERS) $(LANG_EXTRA_HEADERS)
STMP_FIXPROTO=
diff --git a/gcc/config/pa/xm-pa.h b/gcc/config/pa/xm-pa.h
index 3d86e88986c..0249055bf6e 100644
--- a/gcc/config/pa/xm-pa.h
+++ b/gcc/config/pa/xm-pa.h
@@ -50,9 +50,6 @@ extern int errno;
/* Don't try to use sys_siglist. */
#define NO_SYS_SIGLIST
-/* We have strerror, don't try to use sys_errlist. */
-#define HAVE_STRERROR
-
/* 4.3BSD, OSF1 and Lites on the PA are all derived from NET2 or
later code from Berkeley. */
#define __BSD_NET2__
diff --git a/gcc/config/pa/xm-pahpux.h b/gcc/config/pa/xm-pahpux.h
index 97e9403b158..09c949b358e 100644
--- a/gcc/config/pa/xm-pahpux.h
+++ b/gcc/config/pa/xm-pahpux.h
@@ -1,5 +1,5 @@
/* Configuration for GNU C-compiler for PA-RISC.
- Copyright (C) 1988, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1988, 1995, 1997 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com).
This file is part of GNU CC.
@@ -24,13 +24,6 @@ Boston, MA 02111-1307, USA. */
#define USG
/* Use System V memory functions. */
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define bcmp(a,b,c) memcmp (a,b,c)
-
-#define rindex strrchr
-#define index strchr
-
/* #defines that need visibility everywhere. */
#define FALSE 0
#define TRUE 1
diff --git a/gcc/config/pa/xm-papro.h b/gcc/config/pa/xm-papro.h
index 66ec811b4ac..d36e2015ce7 100644
--- a/gcc/config/pa/xm-papro.h
+++ b/gcc/config/pa/xm-papro.h
@@ -50,9 +50,6 @@ extern int errno;
/* Don't try to use sys_siglist. */
#define NO_SYS_SIGLIST
-/* We have strerror, don't try to use sys_errlist. */
-#define HAVE_STRERROR
-
/* HP's compiler has problems with enum bitfields. */
#define ONLY_INT_FIELDS
diff --git a/gcc/config/pdp11/pdp11.c b/gcc/config/pdp11/pdp11.c
index 19b41485e7d..20628d42792 100644
--- a/gcc/config/pdp11/pdp11.c
+++ b/gcc/config/pdp11/pdp11.c
@@ -1,5 +1,5 @@
/* Subroutines for gcc2 for pdp11.
- Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by Michael K. Gschwind (mike@vlsivie.tuwien.ac.at).
This file is part of GNU CC.
@@ -19,10 +19,8 @@ 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 FILE
-#include <stdio.h>
-#endif
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
diff --git a/gcc/config/pdp11/pdp11.md b/gcc/config/pdp11/pdp11.md
index d23c2cd6657..ec6a43f66d1 100644
--- a/gcc/config/pdp11/pdp11.md
+++ b/gcc/config/pdp11/pdp11.md
@@ -1,5 +1,5 @@
;;- Machine description for the pdp11 for GNU C compiler
-;; Copyright (C) 1994, 1995 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1995, 1997 Free Software Foundation, Inc.
;; Contributed by Michael K. Gschwind (mike@vlsivie.tuwien.ac.at).
;; This file is part of GNU CC.
@@ -48,7 +48,7 @@
;; The only thing that remains to be done then is output
;; the floats in a way the assembler can handle it (and
;; if you're really into it, use a PDP11 float emulation
-;; libary to do floating point constant folding - but
+;; library to do floating point constant folding - but
;; I guess you'll get reasonable results even when not
;; doing this)
;; the last thing to do is fix the UPDATE_CC macro to check
@@ -682,20 +682,26 @@
;; let constraints only accept a register ...
(define_expand "movstrhi"
- [(parallel [(set (mem:BLK (match_operand:BLK 0 "general_operand" "=g,g"))
- (mem:BLK (match_operand:BLK 1 "general_operand" "g,g")))
+ [(parallel [(set (match_operand:BLK 0 "general_operand" "=g,g")
+ (match_operand:BLK 1 "general_operand" "g,g"))
(use (match_operand:HI 2 "arith_operand" "n,&mr"))
(use (match_operand:HI 3 "immediate_operand" "i,i"))
(clobber (match_scratch:HI 4 "=&r,X"))
- (clobber (match_dup 0))
- (clobber (match_dup 1))
+ (clobber (match_dup 5))
+ (clobber (match_dup 6))
(clobber (match_dup 2))])]
"(TARGET_BCOPY_BUILTIN)"
"
{
- operands[0] = copy_to_mode_reg (Pmode, XEXP (operands[0], 0));
- operands[1] = copy_to_mode_reg (Pmode, XEXP (operands[1], 0));
- operands[2] = force_not_mem (operands[2]);
+ operands[0]
+ = change_address (operands[0], VOIDmode,
+ copy_to_mode_reg (Pmode, XEXP (operands[0], 0)));
+ operands[1]
+ = change_address (operands[1], VOIDmode,
+ copy_to_mode_reg (Pmode, XEXP (operands[1], 0)));
+
+ operands[5] = XEXP (operands[0], 0);
+ operands[6] = XEXP (operands[1], 0);
}")
diff --git a/gcc/config/ptx4.h b/gcc/config/ptx4.h
index 80b7b165d0c..db761655674 100644
--- a/gcc/config/ptx4.h
+++ b/gcc/config/ptx4.h
@@ -1,6 +1,6 @@
/* Operating system specific defines to be used when targeting GCC for some
generic System V Release 4 system.
- Copyright (C) 1996 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Contributed by Ron Guilmette (rfg@monkeys.com).
Renamed and changed to suit Dynix/ptx v4 and later.
Modified by Tim Wright (timw@sequent.com).
@@ -123,7 +123,7 @@ Boston, MA 02111-1307, USA.
support here for as many of the other svr4 linker options as seems
reasonable, given that some of them conflict with options for other
svr4 tools (e.g. the assembler). In particular, we do support the
- -h*, -z*, -V, -b, -t, -Qy, -Qn, and -YP* options here, and the -e*,
+ -z*, -V, -b, -t, -Qy, -Qn, and -YP* options here, and the -e*,
-l*, -o*, -r, -s, -u*, and -L* options are directly supported
by gcc.c itself. We don't directly support the -m (generate load
map) option because that conflicts with the -m (run m4) option of
@@ -143,8 +143,8 @@ Boston, MA 02111-1307, USA.
#define LINK_SPEC "%{h*} %{v:-V} \
%{b} %{Wl,*:%*} \
%{static:-dn -Bstatic} \
- %{shared:-G -dy -z text %{!h*:%{o*:-h %*}}} \
- %{symbolic:-Bsymbolic -G -dy -z text %{!h*:%{o*:-h %*}}} \
+ %{shared:-G -dy -z text} \
+ %{symbolic:-Bsymbolic -G -dy -z text} \
%{G:-G} \
%{YP,*} \
%{!YP,*:%{p:-Y P,/lib/libp:/usr/lib/libp:/lib:/usr/lib} \
@@ -333,7 +333,7 @@ while (0)
#define ASM_OUTPUT_SKIP(FILE,SIZE) \
fprintf (FILE, "\t%s\t%u\n", SKIP_ASM_OP, (SIZE))
-/* The prefix to add to user-visible assembler symbols. */
+/* The prefix to add to user-visible assembler symbols.
For System V Release 4 the convention is *not* to prepend a leading
underscore onto user-level symbol names. */
diff --git a/gcc/config/pyr/pyr.c b/gcc/config/pyr/pyr.c
index 3203377e2c7..46ea25c0374 100644
--- a/gcc/config/pyr/pyr.c
+++ b/gcc/config/pyr/pyr.c
@@ -1,5 +1,5 @@
/* Subroutines for insn-output.c for Pyramid 90x, 9000, and MIServer Series.
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ Copyright (C) 1989, 1991, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -19,8 +19,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* Some output-actions in pyr.md need these. */
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
diff --git a/gcc/config/pyr/pyr.md b/gcc/config/pyr/pyr.md
index 3c03beaec6f..97d91014595 100644
--- a/gcc/config/pyr/pyr.md
+++ b/gcc/config/pyr/pyr.md
@@ -1,5 +1,5 @@
;; GNU C machine description for Pyramid 90x, 9000, MIServer Series
-;; Copyright (C) 1989, 1990, 1995 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 1990, 1995, 1997 Free Software Foundation, Inc.
;; This file is part of GNU CC.
@@ -903,7 +903,6 @@
""
"*
{
- extern int optimize;
if (optimize && REG_P (operands[0]) && REG_P (operands[1])
&& REGNO (operands[0]) == REGNO (operands[1])
&& already_sign_extended (insn, HImode, operands[0]))
@@ -920,7 +919,6 @@
""
"*
{
- extern int optimize;
if (optimize && REG_P (operands[0]) && REG_P (operands[1])
&& REGNO (operands[0]) == REGNO (operands[1])
&& already_sign_extended (insn, QImode, operands[0]))
@@ -1029,7 +1027,6 @@
""
"*
{
- extern int optimize;
if (optimize)
switch (GET_CODE (operands[0]))
{
@@ -1056,7 +1053,6 @@
""
"*
{
- extern int optimize;
if (optimize)
switch (GET_CODE (operands[0]))
{
diff --git a/gcc/config/romp/romp.c b/gcc/config/romp/romp.c
index 5926b74dce7..ed36259f652 100644
--- a/gcc/config/romp/romp.c
+++ b/gcc/config/romp/romp.c
@@ -1,5 +1,5 @@
/* Subroutines used for code generation on ROMP.
- Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
+ Copyright (C) 1990, 1991, 1992, 1993, 1997 Free Software Foundation, Inc.
Contributed by Richard Kenner (kenner@nyu.edu)
This file is part of GNU CC.
@@ -20,8 +20,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
@@ -1317,7 +1317,7 @@ struct symref_hashent {
static struct symref_hashent *symref_hash_table[SYMHASHSIZE];
-/* Given a name (allocatable in temporary storage), return a SYMBOL_REF
+/* Given a name (allocable in temporary storage), return a SYMBOL_REF
for the name. The rtx is allocated from the current rtl_obstack, while
the name string is allocated from the permanent obstack. */
rtx
diff --git a/gcc/config/rs6000/cygwin32.h b/gcc/config/rs6000/cygwin32.h
index 557b3016ad9..f527736a020 100644
--- a/gcc/config/rs6000/cygwin32.h
+++ b/gcc/config/rs6000/cygwin32.h
@@ -5,7 +5,7 @@
to build GCC for use with a windows style library and tool
set, winnt.h uses the Microsoft tools to do that.
- Copyright (C) 1996 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -36,6 +36,9 @@ Boston, MA 02111-1307, USA. */
#define CPP_PREDEFINES "-D_WIN32 -DWINNT -D__CYGWIN32__ -DPOSIX \
-D_POWER -D_ARCH_PPC -D__PPC__ -Asystem(winnt) -Acpu(powerpc) -Amachine(powerpc)"
+#undef CPP_SPEC
+#define CPP_SPEC "-remap %{posix: -D_POSIX_SOURCE} %(cpp_cpu)"
+
/* We have to dynamic link to get to the system DLLs. All of libc, libm and
the Unix stuff is in cygwin.dll. The import library is called
'libcygwin.a'. For Windows applications, include more libraries, but
diff --git a/gcc/config/rs6000/linux.h b/gcc/config/rs6000/linux.h
index 2483f41ccc6..10474e4d5cf 100644
--- a/gcc/config/rs6000/linux.h
+++ b/gcc/config/rs6000/linux.h
@@ -28,7 +28,9 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#undef LINK_SPEC
#define LINK_SPEC "-m elf32ppc %{shared:-shared} \
%{!shared: \
- %{!static: %{rdynamic:-export-dynamic}} \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
%{static:-static}}"
#undef LIB_DEFAULT_SPEC
@@ -47,7 +49,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
#undef TARGET_VERSION
-#define TARGET_VERSION fprintf (stderr, " (PowerPC Linux)");
+#define TARGET_VERSION fprintf (stderr, " (PowerPC GNU/Linux)");
/* Define this macro as a C expression for the initializer of an
array of string to tell the driver program which options are
@@ -60,3 +62,6 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#undef MULTILIB_DEFAULTS
#define MULTILIB_DEFAULTS { "mbig", "mcall-linux" }
+
+#undef DEFAULT_VTABLE_THUNKS
+#define DEFAULT_VTABLE_THUNKS 1
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 60262a9aba4..48bdc28fdb2 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -1,5 +1,5 @@
/* Subroutines used for code generation on IBM RS/6000.
- Copyright (C) 1991, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1991, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
This file is part of GNU CC.
@@ -673,28 +673,47 @@ num_insns_constant (op, mode)
return num_insns_constant_wide ((HOST_WIDE_INT)l);
}
- else if (GET_CODE (op) == CONST_DOUBLE && TARGET_32BIT)
- return (num_insns_constant_wide (CONST_DOUBLE_LOW (op))
- + num_insns_constant_wide (CONST_DOUBLE_HIGH (op)));
-
- else if (GET_CODE (op) == CONST_DOUBLE && TARGET_64BIT)
+ else if (GET_CODE (op) == CONST_DOUBLE)
{
- HOST_WIDE_INT low = CONST_DOUBLE_LOW (op);
- HOST_WIDE_INT high = CONST_DOUBLE_HIGH (op);
-
- if (high == 0 && (low & 0x80000000) == 0)
- return num_insns_constant_wide (low);
+ HOST_WIDE_INT low;
+ HOST_WIDE_INT high;
+ long l[2];
+ REAL_VALUE_TYPE rv;
+ int endian = (WORDS_BIG_ENDIAN == 0);
- else if (((high & 0xffffffff) == 0xffffffff)
- && ((low & 0x80000000) != 0))
- return num_insns_constant_wide (low);
+ if (mode == VOIDmode || mode == DImode)
+ {
+ high = CONST_DOUBLE_HIGH (op);
+ low = CONST_DOUBLE_LOW (op);
+ }
+ else
+ {
+ REAL_VALUE_FROM_CONST_DOUBLE (rv, op);
+ REAL_VALUE_TO_TARGET_DOUBLE (rv, l);
+ high = l[endian];
+ low = l[1 - endian];
+ }
- else if (low == 0)
- return num_insns_constant_wide (high) + 1;
+ if (TARGET_32BIT)
+ return (num_insns_constant_wide (low)
+ + num_insns_constant_wide (high));
else
- return (num_insns_constant_wide (high)
- + num_insns_constant_wide (low) + 1);
+ {
+ if (high == 0 && (low & 0x80000000) == 0)
+ return num_insns_constant_wide (low);
+
+ else if (((high & 0xffffffff) == 0xffffffff)
+ && ((low & 0x80000000) != 0))
+ return num_insns_constant_wide (low);
+
+ else if (low == 0)
+ return num_insns_constant_wide (high) + 1;
+
+ else
+ return (num_insns_constant_wide (high)
+ + num_insns_constant_wide (low) + 1);
+ }
}
else
@@ -1148,6 +1167,33 @@ init_cumulative_args (cum, fntype, libname, incoming)
}
}
+/* If defined, a C expression which determines whether, and in which
+ direction, to pad out an argument with extra space. The value
+ should be of type `enum direction': either `upward' to pad above
+ the argument, `downward' to pad below, or `none' to inhibit
+ padding.
+
+ For the AIX ABI structs are always stored left shifted in their
+ argument slot. */
+
+enum direction
+function_arg_padding (mode, type)
+ enum machine_mode mode;
+ tree type;
+{
+ if (type != 0 && AGGREGATE_TYPE_P (type))
+ return upward;
+
+ /* This is the default definition. */
+ return (! BYTES_BIG_ENDIAN
+ ? upward
+ : ((mode == BLKmode
+ ? (type && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
+ && int_size_in_bytes (type) < (PARM_BOUNDARY / BITS_PER_UNIT))
+ : GET_MODE_BITSIZE (mode) < PARM_BOUNDARY)
+ ? downward : upward));
+}
+
/* If defined, a C expression that gives the alignment boundary, in bits,
of an argument with the specified mode and type. If it is not defined,
PARM_BOUNDARY is used for all arguments.
@@ -1330,9 +1376,11 @@ function_arg (cum, mode, type, named)
const0_rtx)));
}
- /* Long longs won't be split between register and stack */
+ /* Long longs won't be split between register and stack;
+ FP arguments get passed on the stack if they didn't get a register. */
else if ((DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS) &&
- align_words + RS6000_ARG_SIZE (mode, type, named) > GP_ARG_NUM_REG)
+ (align_words + RS6000_ARG_SIZE (mode, type, named) > GP_ARG_NUM_REG
+ || (GET_MODE_CLASS (mode) == MODE_FLOAT && TARGET_HARD_FLOAT)))
{
return NULL_RTX;
}
@@ -1438,11 +1486,14 @@ setup_incoming_varargs (cum, mode, type, pretend_size, no_rtl)
"setup_vararg: words = %2d, fregno = %2d, nargs = %4d, proto = %d, mode = %4s, no_rtl= %d\n",
cum->words, cum->fregno, cum->nargs_prototype, cum->prototype, GET_MODE_NAME (mode), no_rtl);
- if ((DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS) && !no_rtl)
+ if (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)
{
rs6000_sysv_varargs_p = 1;
- save_area = plus_constant (frame_pointer_rtx, RS6000_VARARGS_OFFSET);
+ if (! no_rtl)
+ save_area = plus_constant (frame_pointer_rtx, RS6000_VARARGS_OFFSET);
}
+ else
+ rs6000_sysv_varargs_p = 0;
if (cum->words < 8)
{
@@ -2119,7 +2170,7 @@ rs6000_got_register (value)
}
-/* Replace all occurances of register FROM with an new pseduo register in an insn X.
+/* Replace all occurrences of register FROM with an new pseudo register in an insn X.
Store the pseudo register used in REG.
This is only safe during FINALIZE_PIC, since the registers haven't been setup
yet. */
@@ -2194,7 +2245,7 @@ void
rs6000_finalize_pic ()
{
/* Loop through all of the insns, replacing the special GOT_TOC_REGNUM
- with an appropriate pseduo register. If we find we need GOT/TOC,
+ with an appropriate pseudo register. If we find we need GOT/TOC,
add the appropriate init code. */
if (flag_pic && (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS))
{
@@ -2236,7 +2287,7 @@ rs6000_finalize_pic ()
}
-/* Search for any occurrance of the GOT_TOC register marker that should
+/* Search for any occurrence of the GOT_TOC register marker that should
have been eliminated, but may have crept back in. */
void
@@ -2261,6 +2312,7 @@ struct machine_function
int save_toc_p;
int fpmem_size;
int fpmem_offset;
+ rtx pic_offset_table_rtx;
};
/* Functions to save and restore rs6000_fpmem_size.
@@ -2278,6 +2330,7 @@ rs6000_save_machine_status (p)
machine->sysv_varargs_p = rs6000_sysv_varargs_p;
machine->fpmem_size = rs6000_fpmem_size;
machine->fpmem_offset = rs6000_fpmem_offset;
+ machine->pic_offset_table_rtx = pic_offset_table_rtx;
}
void
@@ -2289,6 +2342,7 @@ rs6000_restore_machine_status (p)
rs6000_sysv_varargs_p = machine->sysv_varargs_p;
rs6000_fpmem_size = machine->fpmem_size;
rs6000_fpmem_offset = machine->fpmem_offset;
+ pic_offset_table_rtx = machine->pic_offset_table_rtx;
free (machine);
p->machine = (struct machine_function *)0;
@@ -2315,8 +2369,10 @@ rs6000_init_expanders ()
#if TARGET_ELF
#define SMALL_DATA_RELOC ((rs6000_sdata == SDATA_EABI) ? "sda21" : "sdarel")
+#define SMALL_DATA_REG ((rs6000_sdata == SDATA_EABI) ? 0 : 13)
#else
#define SMALL_DATA_RELOC "sda21"
+#define SMALL_DATA_REG 0
#endif
void
@@ -2515,7 +2571,8 @@ print_operand (file, x, code)
else
output_address (plus_constant (XEXP (x, 0), 4));
if (small_data_operand (x, GET_MODE (x)))
- fprintf (file, "@%s(%s)", SMALL_DATA_RELOC, reg_names[0]);
+ fprintf (file, "@%s(%s)", SMALL_DATA_RELOC,
+ reg_names[SMALL_DATA_REG]);
}
return;
@@ -2743,7 +2800,8 @@ print_operand (file, x, code)
else
output_address (plus_constant (XEXP (x, 0), 8));
if (small_data_operand (x, GET_MODE (x)))
- fprintf (file, "@%s(%s)", SMALL_DATA_RELOC, reg_names[0]);
+ fprintf (file, "@%s(%s)", SMALL_DATA_RELOC,
+ reg_names[SMALL_DATA_REG]);
}
return;
@@ -2792,7 +2850,8 @@ print_operand (file, x, code)
else
output_address (plus_constant (XEXP (x, 0), 12));
if (small_data_operand (x, GET_MODE (x)))
- fprintf (file, "@%s(%s)", SMALL_DATA_RELOC, reg_names[0]);
+ fprintf (file, "@%s(%s)", SMALL_DATA_RELOC,
+ reg_names[SMALL_DATA_REG]);
}
return;
@@ -2834,7 +2893,8 @@ print_operand_address (file, x)
{
output_addr_const (file, x);
if (small_data_operand (x, GET_MODE (x)))
- fprintf (file, "@%s(%s)", SMALL_DATA_RELOC, reg_names[0]);
+ fprintf (file, "@%s(%s)", SMALL_DATA_RELOC,
+ reg_names[SMALL_DATA_REG]);
#ifdef TARGET_NO_TOC
else if (TARGET_NO_TOC)
@@ -3168,7 +3228,8 @@ rs6000_stack_info ()
else if (abi == ABI_V4 || abi == ABI_NT || abi == ABI_SOLARIS)
info_ptr->push_p = (total_raw_size > info_ptr->fixed_size
- || info_ptr->lr_save_p);
+ || (abi == ABI_NT ? info_ptr->lr_save_p
+ : info_ptr->calls_p));
else
info_ptr->push_p = (frame_pointer_needed
@@ -4408,28 +4469,33 @@ output_function_profiler (file, labelno)
if (flag_pic == 1)
{
fprintf (file, "\tbl _GLOBAL_OFFSET_TABLE_@local-4\n");
+ fprintf (file, "\t%s %s,4(%s)\n",
+ (TARGET_NEW_MNEMONICS) ? "stw" : "st",
+ reg_names[0], reg_names[1]);
fprintf (file, "\tmflr %s\n", reg_names[11]);
fprintf (file, "\t%s %s,", (TARGET_NEW_MNEMONICS) ? "lwz" : "l",
- reg_names[11]);
+ reg_names[0]);
assemble_name (file, buf);
fprintf (file, "@got(%s)\n", reg_names[11]);
}
#if TARGET_ELF
else if (flag_pic > 1 || TARGET_RELOCATABLE)
{
- fprintf (file, "\tstw %s,4(%s)\n", reg_names[0], reg_names[1]);
- fprintf (file, "%s\n", MINIMAL_TOC_SECTION_ASM_OP);
- assemble_name (file, buf);
- fprintf (file, "X = .-.LCTOC1\n");
- fprintf (file, "\t.long ");
- assemble_name (file, buf);
- fputs ("\n\t.previous\n", file);
+ fprintf (file, "\t%s %s,4(%s)\n",
+ (TARGET_NEW_MNEMONICS) ? "stw" : "st",
+ reg_names[0], reg_names[1]);
rs6000_pic_func_labelno = rs6000_pic_labelno;
rs6000_output_load_toc_table (file, 11);
fprintf (file, "\t%s %s,", (TARGET_NEW_MNEMONICS) ? "lwz" : "l",
reg_names[11]);
assemble_name (file, buf);
fprintf (file, "X(%s)\n", reg_names[11]);
+ fprintf (file, "%s\n", MINIMAL_TOC_SECTION_ASM_OP);
+ assemble_name (file, buf);
+ fprintf (file, "X = .-.LCTOC1\n");
+ fprintf (file, "\t.long ");
+ assemble_name (file, buf);
+ fputs ("\n\t.previous\n", file);
}
#endif
else if (TARGET_NEW_MNEMONICS)
@@ -4438,7 +4504,7 @@ output_function_profiler (file, labelno)
assemble_name (file, buf);
fprintf (file, "@ha\n");
fprintf (file, "\tstw %s,4(%s)\n", reg_names[0], reg_names[1]);
- fprintf (file, "\taddi %s,%s,", reg_names[11], reg_names[11]);
+ fprintf (file, "\taddi %s,%s,", reg_names[0], reg_names[11]);
assemble_name (file, buf);
fputs ("@l\n", file);
}
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 60b4c529e82..6eefaba2f86 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler, for IBM RS/6000.
- Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
This file is part of GNU CC.
@@ -52,7 +52,7 @@ Boston, MA 02111-1307, USA. */
#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} %(cpp_cpu)"
-/* Common CPP definitions used by CPP_SPEC amonst the various targets
+/* Common CPP definitions used by CPP_SPEC among the various targets
for handling -mcpu=xxx switches. */
#define CPP_CPU_SPEC \
"%{!mcpu*: \
@@ -101,7 +101,7 @@ Boston, MA 02111-1307, USA. */
#define CPP_SYSV_DEFAULT_SPEC ""
#endif
-/* Common ASM definitions used by ASM_SPEC amonst the various targets
+/* Common ASM definitions used by ASM_SPEC among the various targets
for handling -mcpu=xxx switches. */
#define ASM_CPU_SPEC \
"%{!mcpu*: \
@@ -242,7 +242,7 @@ extern int target_flags;
if there are more than 16K unique variables/constant in a single module.
This is at the cost of having 2 extra loads and one extra store per
- function, and one less allocatable register. */
+ function, and one less allocable register. */
#define MASK_MINIMAL_TOC 0x00000200
/* Nonzero for the 64bit model: ints, longs, and pointers are 64 bits. */
@@ -424,7 +424,7 @@ extern enum processor_type rs6000_cpu;
extern char *m88k_short_data;
#define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } */
-/* This is meant to be overriden in target specific files. */
+/* This is meant to be overridden in target specific files. */
#ifndef SUBTARGET_OPTIONS
#define SUBTARGET_OPTIONS
#endif
@@ -604,6 +604,7 @@ extern int rs6000_debug_arg; /* debug argument handling */
((TREE_CODE (STRUCT) == RECORD_TYPE \
|| TREE_CODE (STRUCT) == UNION_TYPE \
|| TREE_CODE (STRUCT) == QUAL_UNION_TYPE) \
+ && TYPE_FIELDS (STRUCT) != 0 \
&& DECL_MODE (TYPE_FIELDS (STRUCT)) == DFmode \
? MAX (MAX ((COMPUTED), (SPECIFIED)), BIGGEST_ALIGNMENT) \
: MAX ((COMPUTED), (SPECIFIED)))
@@ -908,7 +909,7 @@ extern int rs6000_debug_arg; /* debug argument handling */
Also, cr0 is the only condition code register that can be used in
arithmetic insns, so make a separate class for it.
- There is a special 'registrer' (76), which is not a register, but a
+ There is a special 'register' (76), which is not a register, but a
placeholder for memory allocated to convert between floating point and
integral types. This works around a problem where if we allocate memory
with allocate_stack_{local,temp} and the function is an inline function, the
@@ -1460,6 +1461,15 @@ typedef struct rs6000_args
#define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \
function_arg_pass_by_reference(&CUM, MODE, TYPE, NAMED)
+/* If defined, a C expression which determines whether, and in which
+ direction, to pad out an argument with extra space. The value
+ should be of type `enum direction': either `upward' to pad above
+ the argument, `downward' to pad below, or `none' to inhibit
+ padding. */
+
+#define FUNCTION_ARG_PADDING(MODE, TYPE) \
+ function_arg_padding (MODE, TYPE)
+
/* If defined, a C expression that gives the alignment boundary, in bits,
of an argument with the specified mode and type. If it is not defined,
PARM_BOUNDARY is used for all arguments. */
@@ -2041,10 +2051,14 @@ typedef struct rs6000_args
/* Define if the object format being used is COFF or a superset. */
#define OBJECT_FORMAT_COFF
-/* Define the magic numbers that we recognize as COFF. */
+/* Define the magic numbers that we recognize as COFF.
+ AIX 4.3 adds U803XTOCMAGIC (0757) for 64-bit executables, but collect2.c
+ does not include these files in the right order to conditionally define
+ the value in the macro. */
#define MY_ISCOFF(magic) \
- ((magic) == U802WRMAGIC || (magic) == U802ROMAGIC || (magic) == U802TOCMAGIC)
+ ((magic) == U802WRMAGIC || (magic) == U802ROMAGIC \
+ || (magic) == U802TOCMAGIC || (magic) == 0757)
/* This is the only version of nm that collect2 can work with. */
#define REAL_NM_FILE_NAME "/usr/ucb/nm"
@@ -2903,12 +2917,17 @@ do { \
#define ASM_OUTPUT_ASCII(FILE, P, N) output_ascii ((FILE), (P), (N))
/* This is how to output code to push a register on the stack.
- It need not be very fast code. */
+ It need not be very fast code.
+
+ On the rs6000, we must keep the backchain up to date. In order
+ to simplify things, always allocate 16 bytes for a push (System V
+ wants to keep stack aligned to a 16 byte boundary). */
#define ASM_OUTPUT_REG_PUSH(FILE,REGNO) \
do { \
extern char *reg_names[]; \
- asm_fprintf (FILE, "\{tstu|stwu} %s,-4(%s)\n", reg_names[REGNO], \
+ asm_fprintf (FILE, "\t{stu|stwu} %s,-16(%s)\n\t{st|stw} %s,8(%s)\n", \
+ reg_names[1], reg_names[1], reg_names[REGNO], \
reg_names[1]); \
} while (0)
@@ -2918,7 +2937,7 @@ do { \
#define ASM_OUTPUT_REG_POP(FILE,REGNO) \
do { \
extern char *reg_names[]; \
- asm_fprintf (FILE, "\t{l|lwz} %s,0(%s)\n\t{ai|addic} %s,%s,4\n", \
+ asm_fprintf (FILE, "\t{l|lwz} %s,8(%s)\n\t{ai|addic} %s,%s,16\n", \
reg_names[REGNO], reg_names[1], reg_names[1], \
reg_names[1]); \
} while (0)
@@ -3065,7 +3084,7 @@ do { \
/* indicate that issue rate is defined for this machine
(no need to use the default) */
-#define MACHINE_issue_rate
+#define ISSUE_RATE get_issue_rate ()
/* General flags. */
extern int flag_pic;
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 1616e2e5846..8e5c122e680 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -1388,14 +1388,6 @@
"divs %0,%1,%2"
[(set_attr "type" "idiv")])
-(define_insn ""
- [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
- (div:SI (match_operand:SI 1 "gpc_reg_operand" "r")
- (match_operand:SI 2 "gpc_reg_operand" "r")))]
- "TARGET_POWERPC"
- "divw %0,%1,%2"
- [(set_attr "type" "idiv")])
-
(define_expand "udivsi3"
[(set (match_operand:SI 0 "gpc_reg_operand" "")
(udiv:SI (match_operand:SI 1 "gpc_reg_operand" "")
@@ -1411,13 +1403,27 @@
emit_move_insn (operands[0], gen_rtx (REG, SImode, 3));
DONE;
}
+ else if (TARGET_POWER)
+ {
+ emit_insn (gen_udivsi3_mq (operands[0], operands[1], operands[2]));
+ DONE;
+ }
}")
-(define_insn ""
+(define_insn "udivsi3_mq"
+ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
+ (udiv:SI (match_operand:SI 1 "gpc_reg_operand" "r")
+ (match_operand:SI 2 "gpc_reg_operand" "r")))
+ (clobber (match_scratch:SI 3 "=q"))]
+ "TARGET_POWERPC && TARGET_POWER"
+ "divwu %0,%1,%2"
+ [(set_attr "type" "idiv")])
+
+(define_insn "*udivsi3_no_mq"
[(set (match_operand:SI 0 "gpc_reg_operand" "=r")
(udiv:SI (match_operand:SI 1 "gpc_reg_operand" "r")
(match_operand:SI 2 "gpc_reg_operand" "r")))]
- "TARGET_POWERPC"
+ "TARGET_POWERPC && ! TARGET_POWER"
"divwu %0,%1,%2"
[(set_attr "type" "idiv")])
@@ -1436,7 +1442,14 @@
&& exact_log2 (INTVAL (operands[2])) >= 0)
;
else if (TARGET_POWERPC)
- operands[2] = force_reg (SImode, operands[2]);
+ {
+ operands[2] = force_reg (SImode, operands[2]);
+ if (TARGET_POWER)
+ {
+ emit_insn (gen_divsi3_mq (operands[0], operands[1], operands[2]));
+ DONE;
+ }
+ }
else if (TARGET_POWER)
FAIL;
else
@@ -1449,6 +1462,23 @@
}
}")
+(define_insn "divsi3_mq"
+ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
+ (div:SI (match_operand:SI 1 "gpc_reg_operand" "r")
+ (match_operand:SI 2 "gpc_reg_operand" "r")))
+ (clobber (match_scratch:SI 3 "=q"))]
+ "TARGET_POWERPC && TARGET_POWER"
+ "divw %0,%1,%2"
+ [(set_attr "type" "idiv")])
+
+(define_insn "*divsi3_no_mq"
+ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
+ (div:SI (match_operand:SI 1 "gpc_reg_operand" "r")
+ (match_operand:SI 2 "gpc_reg_operand" "r")))]
+ "TARGET_POWERPC && ! TARGET_POWER"
+ "divw %0,%1,%2"
+ [(set_attr "type" "idiv")])
+
(define_expand "modsi3"
[(use (match_operand:SI 0 "gpc_reg_operand" ""))
(use (match_operand:SI 1 "gpc_reg_operand" ""))
@@ -2089,8 +2119,8 @@
int start = INTVAL (operands[2]) & 31;
int size = INTVAL (operands[1]) & 31;
- operands[4] = gen_rtx (CONST_INT, VOIDmode, 32 - start - size);
- operands[1] = gen_rtx (CONST_INT, VOIDmode, start + size - 1);
+ operands[4] = GEN_INT (32 - start - size);
+ operands[1] = GEN_INT (start + size - 1);
return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\";
}")
@@ -2107,8 +2137,8 @@
int start = INTVAL (operands[2]) & 31;
int size = INTVAL (operands[1]) & 31;
- operands[4] = gen_rtx (CONST_INT, VOIDmode, shift - start - size);
- operands[1] = gen_rtx (CONST_INT, VOIDmode, start + size - 1);
+ operands[4] = GEN_INT (shift - start - size);
+ operands[1] = GEN_INT (start + size - 1);
return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\";
}")
@@ -2125,8 +2155,8 @@
int start = INTVAL (operands[2]) & 31;
int size = INTVAL (operands[1]) & 31;
- operands[4] = gen_rtx (CONST_INT, VOIDmode, 32 - shift - start - size);
- operands[1] = gen_rtx (CONST_INT, VOIDmode, start + size - 1);
+ operands[4] = GEN_INT (32 - shift - start - size);
+ operands[1] = GEN_INT (start + size - 1);
return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\";
}")
@@ -2143,8 +2173,8 @@
int start = INTVAL (operands[2]) & 31;
int size = INTVAL (operands[1]) & 31;
- operands[4] = gen_rtx (CONST_INT, VOIDmode, 32 - shift - start - size);
- operands[1] = gen_rtx (CONST_INT, VOIDmode, start + size - 1);
+ operands[4] = GEN_INT (32 - shift - start - size);
+ operands[1] = GEN_INT (start + size - 1);
return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\";
}")
@@ -2166,7 +2196,7 @@
/* Align extract field with insert field */
operands[5] = gen_rtx (CONST_INT, VOIDmode,
extract_start + extract_size - insert_start - insert_size);
- operands[1] = gen_rtx (CONST_INT, VOIDmode, insert_start + insert_size - 1);
+ operands[1] = GEN_INT (insert_start + insert_size - 1);
return \"{rlimi|rlwimi} %0,%3,%h5,%h2,%h1\";
}")
@@ -2181,7 +2211,7 @@
int start = INTVAL (operands[2]) & 63;
int size = INTVAL (operands[1]) & 63;
- operands[2] = gen_rtx (CONST_INT, VOIDmode, 64 - start - size);
+ operands[2] = GEN_INT (64 - start - size);
return \"rldimi %0,%3,%H2,%H1\";
}")
@@ -2215,7 +2245,7 @@
if (start + size >= 32)
operands[3] = const0_rtx;
else
- operands[3] = gen_rtx (CONST_INT, VOIDmode, start + size);
+ operands[3] = GEN_INT (start + size);
return \"{rlinm|rlwinm} %0,%1,%3,%s2,31\";
}")
@@ -2252,7 +2282,7 @@
if (start + size >= 32)
operands[3] = const0_rtx;
else
- operands[3] = gen_rtx (CONST_INT, VOIDmode, start + size);
+ operands[3] = GEN_INT (start + size);
return \"{rlinm.|rlwinm.} %4,%1,%3,%s2,31\";
}"
[(set_attr "type" "compare")])
@@ -2273,14 +2303,14 @@
if (start >= 16 && start + size == 32)
{
- operands[3] = gen_rtx (CONST_INT, VOIDmode, (1 << (32 - start)) - 1);
+ operands[3] = GEN_INT ((1 << (32 - start)) - 1);
return \"{andil.|andi.} %0,%1,%3\";
}
if (start + size >= 32)
operands[3] = const0_rtx;
else
- operands[3] = gen_rtx (CONST_INT, VOIDmode, start + size);
+ operands[3] = GEN_INT (start + size);
return \"{rlinm.|rlwinm.} %0,%1,%3,%s2,31\";
}"
[(set_attr "type" "delayed_compare")])
@@ -2299,8 +2329,8 @@
if (start + size >= 64)
operands[3] = const0_rtx;
else
- operands[3] = gen_rtx (CONST_INT, VOIDmode, start + size);
- operands[2] = gen_rtx (CONST_INT, VOIDmode, 64 - size);
+ operands[3] = GEN_INT (start + size);
+ operands[2] = GEN_INT (64 - size);
return \"rldicl %0,%1,%3,%2\";
}")
@@ -2320,8 +2350,8 @@
if (start + size >= 64)
operands[3] = const0_rtx;
else
- operands[3] = gen_rtx (CONST_INT, VOIDmode, start + size);
- operands[2] = gen_rtx (CONST_INT, VOIDmode, 64 - size);
+ operands[3] = GEN_INT (start + size);
+ operands[2] = GEN_INT (64 - size);
return \"rldicl. %4,%1,%3,%2\";
}")
@@ -2342,8 +2372,8 @@
if (start + size >= 64)
operands[3] = const0_rtx;
else
- operands[3] = gen_rtx (CONST_INT, VOIDmode, start + size);
- operands[2] = gen_rtx (CONST_INT, VOIDmode, 64 - size);
+ operands[3] = GEN_INT (start + size);
+ operands[2] = GEN_INT (64 - size);
return \"rldicl. %0,%1,%3,%2\";
}")
@@ -2722,7 +2752,7 @@
(subreg:QI
(lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
(match_operand:SI 2 "const_int_operand" "i")) 0)))]
- "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 255))"
+ "includes_rshift_p (operands[2], GEN_INT (255))"
"{rlinm|rlwinm} %0,%1,%s2,0xff")
(define_insn ""
@@ -2734,7 +2764,7 @@
(match_operand:SI 2 "const_int_operand" "i")) 0))
(const_int 0)))
(clobber (match_scratch:SI 3 "=r"))]
- "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 255))"
+ "includes_rshift_p (operands[2], GEN_INT (255))"
"{rlinm.|rlwinm.} %3,%1,%s2,0xff"
[(set_attr "type" "delayed_compare")])
@@ -2748,7 +2778,7 @@
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "=r")
(zero_extend:SI (subreg:QI (lshiftrt:SI (match_dup 1) (match_dup 2)) 0)))]
- "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 255))"
+ "includes_rshift_p (operands[2], GEN_INT (255))"
"{rlinm.|rlwinm.} %0,%1,%s2,0xff"
[(set_attr "type" "delayed_compare")])
@@ -2758,7 +2788,7 @@
(subreg:HI
(lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
(match_operand:SI 2 "const_int_operand" "i")) 0)))]
- "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 65535))"
+ "includes_rshift_p (operands[2], GEN_INT (65535))"
"{rlinm|rlwinm} %0,%1,%s2,0xffff")
(define_insn ""
@@ -2770,7 +2800,7 @@
(match_operand:SI 2 "const_int_operand" "i")) 0))
(const_int 0)))
(clobber (match_scratch:SI 3 "=r"))]
- "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 65535))"
+ "includes_rshift_p (operands[2], GEN_INT (65535))"
"{rlinm.|rlwinm.} %3,%1,%s2,0xffff"
[(set_attr "type" "delayed_compare")])
@@ -2784,7 +2814,7 @@
(const_int 0)))
(set (match_operand:SI 0 "gpc_reg_operand" "=r")
(zero_extend:SI (subreg:HI (lshiftrt:SI (match_dup 1) (match_dup 2)) 0)))]
- "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 65535))"
+ "includes_rshift_p (operands[2], GEN_INT (65535))"
"{rlinm.|rlwinm.} %0,%1,%s2,0xffff"
[(set_attr "type" "delayed_compare")])
@@ -3351,7 +3381,7 @@
(plus:DF (mult:DF (match_operand:DF 1 "gpc_reg_operand" "%f")
(match_operand:DF 2 "gpc_reg_operand" "f"))
(match_operand:DF 3 "gpc_reg_operand" "f")))]
- "TARGET_HARD_FLOAT"
+ "TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
"{fma|fmadd} %0,%1,%2,%3"
[(set_attr "type" "dmul")])
@@ -3360,7 +3390,7 @@
(minus:DF (mult:DF (match_operand:DF 1 "gpc_reg_operand" "%f")
(match_operand:DF 2 "gpc_reg_operand" "f"))
(match_operand:DF 3 "gpc_reg_operand" "f")))]
- "TARGET_HARD_FLOAT"
+ "TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
"{fms|fmsub} %0,%1,%2,%3"
[(set_attr "type" "dmul")])
@@ -3369,7 +3399,7 @@
(neg:DF (plus:DF (mult:DF (match_operand:DF 1 "gpc_reg_operand" "%f")
(match_operand:DF 2 "gpc_reg_operand" "f"))
(match_operand:DF 3 "gpc_reg_operand" "f"))))]
- "TARGET_HARD_FLOAT"
+ "TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
"{fnma|fnmadd} %0,%1,%2,%3"
[(set_attr "type" "dmul")])
@@ -3378,7 +3408,7 @@
(neg:DF (minus:DF (mult:DF (match_operand:DF 1 "gpc_reg_operand" "%f")
(match_operand:DF 2 "gpc_reg_operand" "f"))
(match_operand:DF 3 "gpc_reg_operand" "f"))))]
- "TARGET_HARD_FLOAT"
+ "TARGET_HARD_FLOAT && TARGET_FUSED_MADD"
"{fnms|fnmsub} %0,%1,%2,%3"
[(set_attr "type" "dmul")])
@@ -4020,11 +4050,11 @@
[(set_attr "type" "imul")
(set_attr "length" "8")])
-(define_insn "*mulsidi3_powerpc"
+(define_insn "*mulsidi3_no_mq"
[(set (match_operand:DI 0 "gpc_reg_operand" "=&r")
(mult:DI (sign_extend:DI (match_operand:SI 1 "gpc_reg_operand" "%r"))
(sign_extend:DI (match_operand:SI 2 "gpc_reg_operand" "r"))))]
- "TARGET_POWERPC && ! TARGET_POWERPC64"
+ "TARGET_POWERPC && ! TARGET_POWER && ! TARGET_POWERPC64"
"*
{
return (WORDS_BIG_ENDIAN)
@@ -4054,11 +4084,40 @@
operands[4] = operand_subword (operands[0], 1 - endian, 0, DImode);
}")
-(define_insn "umulsidi3"
+(define_expand "umulsidi3"
+ [(set (match_operand:DI 0 "gpc_reg_operand" "")
+ (mult:DI (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" ""))
+ (zero_extend:DI (match_operand:SI 2 "gpc_reg_operand" ""))))]
+ "TARGET_POWERPC && ! TARGET_POWERPC64"
+ "
+{
+ if (TARGET_POWER)
+ {
+ emit_insn (gen_umulsidi3_mq (operands[0], operands[1], operands[2]));
+ DONE;
+ }
+}")
+
+(define_insn "umulsidi3_mq"
+ [(set (match_operand:DI 0 "gpc_reg_operand" "=&r")
+ (mult:DI (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" "%r"))
+ (zero_extend:DI (match_operand:SI 2 "gpc_reg_operand" "r"))))
+ (clobber (match_scratch:SI 3 "=q"))]
+ "TARGET_POWERPC && TARGET_POWER"
+ "*
+{
+ return (WORDS_BIG_ENDIAN)
+ ? \"mulhwu %0,%1,%2\;mullw %L0,%1,%2\"
+ : \"mulhwu %L0,%1,%2\;mullw %0,%1,%2\";
+}"
+ [(set_attr "type" "imul")
+ (set_attr "length" "8")])
+
+(define_insn "*umulsidi3_no_mq"
[(set (match_operand:DI 0 "gpc_reg_operand" "=&r")
(mult:DI (zero_extend:DI (match_operand:SI 1 "gpc_reg_operand" "%r"))
(zero_extend:DI (match_operand:SI 2 "gpc_reg_operand" "r"))))]
- "TARGET_POWERPC && ! TARGET_POWERPC64"
+ "TARGET_POWERPC && ! TARGET_POWER && ! TARGET_POWERPC64"
"*
{
return (WORDS_BIG_ENDIAN)
@@ -4127,7 +4186,7 @@
"mul %0,%1,%2"
[(set_attr "type" "imul")])
-(define_insn ""
+(define_insn "*smulsi3_highpart_no_mq"
[(set (match_operand:SI 0 "gpc_reg_operand" "=r")
(truncate:SI
(lshiftrt:DI (mult:DI (sign_extend:DI
@@ -4135,11 +4194,42 @@
(sign_extend:DI
(match_operand:SI 2 "gpc_reg_operand" "r")))
(const_int 32))))]
- "TARGET_POWERPC"
+ "TARGET_POWERPC && ! TARGET_POWER"
"mulhw %0,%1,%2"
[(set_attr "type" "imul")])
-(define_insn "umulsi3_highpart"
+(define_expand "umulsi3_highpart"
+ [(set (match_operand:SI 0 "gpc_reg_operand" "")
+ (truncate:SI
+ (lshiftrt:DI (mult:DI (zero_extend:DI
+ (match_operand:SI 1 "gpc_reg_operand" ""))
+ (zero_extend:DI
+ (match_operand:SI 2 "gpc_reg_operand" "")))
+ (const_int 32))))]
+ "TARGET_POWERPC"
+ "
+{
+ if (TARGET_POWER)
+ {
+ emit_insn (gen_umulsi3_highpart_mq (operands[0], operands[1], operands[2]));
+ DONE;
+ }
+}")
+
+(define_insn "umulsi3_highpart_mq"
+ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
+ (truncate:SI
+ (lshiftrt:DI (mult:DI (zero_extend:DI
+ (match_operand:SI 1 "gpc_reg_operand" "%r"))
+ (zero_extend:DI
+ (match_operand:SI 2 "gpc_reg_operand" "r")))
+ (const_int 32))))
+ (clobber (match_scratch:SI 3 "=q"))]
+ "TARGET_POWERPC && TARGET_POWER"
+ "mulhwu %0,%1,%2"
+ [(set_attr "type" "imul")])
+
+(define_insn "*umulsi3_highpart_no_mq"
[(set (match_operand:SI 0 "gpc_reg_operand" "=r")
(truncate:SI
(lshiftrt:DI (mult:DI (zero_extend:DI
@@ -4147,7 +4237,7 @@
(zero_extend:DI
(match_operand:SI 2 "gpc_reg_operand" "r")))
(const_int 32))))]
- "TARGET_POWERPC"
+ "TARGET_POWERPC && ! TARGET_POWER"
"mulhwu %0,%1,%2"
[(set_attr "type" "imul")])
@@ -4168,13 +4258,13 @@
[(set_attr "length" "8")])
(define_insn "lshrdi3_power"
- [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,r,r,&r")
+ [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,&r")
(lshiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "r,r,0,r")
(match_operand:SI 2 "reg_or_cint_operand" "M,i,r,r")))
(clobber (match_scratch:SI 3 "=X,q,q,q"))]
"TARGET_POWER"
"@
- {cal %0,0(0)|li %0,0}\;{s%A2i|s%A2wi} %L0,%1,%h2
+ {s%A2i|s%A2wi} %L0,%1,%h2\;{cal %0,0(0)|li %0,0}
sr%I2q %0,%1,%h2\;srl%I2q %L0,%L1,%h2
sr%I2q %0,%1,%h2\;srl%I2q %L0,%L1,%h2
sr%I2q %0,%1,%h2\;srl%I2q %L0,%L1,%h2"
@@ -4769,8 +4859,8 @@
second_c = orig | ~ first_c;
- operands[3] = gen_rtx (CONST_INT, VOIDmode, first_c);
- operands[4] = gen_rtx (CONST_INT, VOIDmode, second_c);
+ operands[3] = GEN_INT (first_c);
+ operands[4] = GEN_INT (second_c);
}")
(define_insn "iordi3"
@@ -4818,7 +4908,7 @@
{
operands[3] = gen_rtx (CONST_INT, VOIDmode,
INTVAL (operands[2]) & (~ (HOST_WIDE_INT) 0xffff));
- operands[4] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & 0xffff);
+ operands[4] = GEN_INT (INTVAL (operands[2]) & 0xffff);
}")
(define_insn "xordi3"
@@ -4866,7 +4956,7 @@
{
operands[3] = gen_rtx (CONST_INT, VOIDmode,
INTVAL (operands[2]) & 0xffff0000);
- operands[4] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & 0xffff);
+ operands[4] = GEN_INT (INTVAL (operands[2]) & 0xffff);
}")
(define_insn ""
@@ -5066,6 +5156,34 @@
"{l|lwz} %0,%a1@got(%2)"
[(set_attr "type" "load")])
+;; Sometimes, though, the GOT `register' will be on the stack. Deal with
+;; this case specially.
+;; Force final to split this insn (if it hasn't been split already) to
+;; avoid having to create a suitable output template.
+(define_insn "*movsi_got_internal_mem"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (unspec [(match_operand:SI 1 "got_no_const_operand" "")
+ (match_operand:SI 2 "memory_operand" "m")] 8))]
+ "(DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)
+ && flag_pic == 1
+ && (reload_in_progress || reload_completed)"
+ "#"
+ [(set_attr "type" "load")
+ (set_attr "length" "8")])
+
+;; Used by sched, shorten_branches and final when the GOT pseudo reg
+;; didn't get allocated to a hard register.
+(define_split
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (unspec [(match_operand:SI 1 "got_no_const_operand" "")
+ (match_operand:SI 2 "memory_operand" "m")] 8))]
+ "(DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)
+ && flag_pic == 1
+ && (reload_in_progress || reload_completed)"
+ [(set (match_dup 0) (match_dup 2))
+ (set (match_dup 0) (unspec [(match_dup 1)(match_dup 0)] 8))]
+ "")
+
;; For SI, we special-case integers that can't be loaded in one insn. We
;; do the load 16-bits at a time. We could do this by loading from memory,
;; and this is even supposed to be faster, but it is simpler not to get
@@ -5237,7 +5355,7 @@
{
operands[2] = gen_rtx (CONST_INT, VOIDmode,
INTVAL (operands[1]) & 0xffff0000);
- operands[3] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) & 0xffff);
+ operands[3] = GEN_INT (INTVAL (operands[1]) & 0xffff);
}")
(define_insn ""
@@ -5616,16 +5734,16 @@
"
{
int endian = (WORDS_BIG_ENDIAN == 0);
+ long l[2];
+ REAL_VALUE_TYPE rv;
+
+ REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
+ REAL_VALUE_TO_TARGET_DOUBLE (rv, l);
+
operands[2] = operand_subword (operands[0], endian, 0, DFmode);
operands[3] = operand_subword (operands[0], 1 - endian, 0, DFmode);
-
-#ifdef HOST_WORDS_BIG_ENDIAN
- operands[4] = GEN_INT (CONST_DOUBLE_LOW (operands[1]));
- operands[5] = GEN_INT (CONST_DOUBLE_HIGH (operands[1]));
-#else
- operands[4] = GEN_INT (CONST_DOUBLE_HIGH (operands[1]));
- operands[5] = GEN_INT (CONST_DOUBLE_LOW (operands[1]));
-#endif
+ operands[4] = GEN_INT (l[endian]);
+ operands[5] = GEN_INT (l[1 - endian]);
}")
(define_split
@@ -5644,16 +5762,15 @@
HOST_WIDE_INT high;
HOST_WIDE_INT low;
int endian = (WORDS_BIG_ENDIAN == 0);
+ long l[2];
+ REAL_VALUE_TYPE rv;
rtx high_reg = operand_subword (operands[0], endian, 0, DFmode);
rtx low_reg = operand_subword (operands[0], 1 - endian, 0, DFmode);
-#ifdef HOST_WORDS_BIG_ENDIAN
- high = CONST_DOUBLE_LOW (operands[1]);
- low = CONST_DOUBLE_HIGH (operands[1]);
-#else
- high = CONST_DOUBLE_HIGH (operands[1]);
- low = CONST_DOUBLE_LOW (operands[1]);
-#endif
+ REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
+ REAL_VALUE_TO_TARGET_DOUBLE (rv, l);
+ high = l[endian];
+ low = l[1 - endian];
if (((unsigned HOST_WIDE_INT) (low + 0x8000) < 0x10000)
|| (low & 0xffff) == 0)
@@ -5688,10 +5805,17 @@
(set (match_dup 3) (ior:SI (match_dup 3) (match_dup 7)))]
"
{
- HOST_WIDE_INT high = CONST_DOUBLE_HIGH (operands[1]);
- HOST_WIDE_INT low = CONST_DOUBLE_LOW (operands[1]);
+ HOST_WIDE_INT high;
+ HOST_WIDE_INT low;
+ long l[2];
+ REAL_VALUE_TYPE rv;
int endian = (WORDS_BIG_ENDIAN == 0);
+ REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
+ REAL_VALUE_TO_TARGET_DOUBLE (rv, l);
+ high = l[endian];
+ low = l[1 - endian];
+
operands[2] = operand_subword (operands[0], endian, 0, DFmode);
operands[3] = operand_subword (operands[0], 1 - endian, 0, DFmode);
operands[4] = GEN_INT (high & 0xffff0000);
@@ -6994,8 +7118,10 @@
;; We move the back-chain and decrement the stack pointer.
(define_expand "allocate_stack"
- [(set (reg:SI 1)
- (minus:SI (reg:SI 1) (match_operand:SI 0 "reg_or_short_operand" "")))]
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (minus:SI (reg:SI 1) (match_operand:SI 1 "reg_or_short_operand" "")))
+ (set (reg:SI 1)
+ (minus:SI (reg:SI 1) (match_dup 1)))]
""
"
{ rtx chain = gen_reg_rtx (Pmode);
@@ -7004,31 +7130,32 @@
emit_move_insn (chain, stack_bot);
- /* Under Windows NT, we need to add stack probes for large/variable allocations,
- so do it via a call to the external function alloca, instead of doing it
- inline. */
+ /* Under Windows NT, we need to add stack probes for large/variable
+ allocations, so do it via a call to the external function alloca
+ instead of doing it inline. */
if (DEFAULT_ABI == ABI_NT
- && (GET_CODE (operands[0]) != CONST_INT || INTVAL (operands[0]) > 4096))
+ && (GET_CODE (operands[1]) != CONST_INT || INTVAL (operands[1]) > 4096))
{
rtx tmp = gen_reg_rtx (SImode);
emit_library_call_value (gen_rtx (SYMBOL_REF, Pmode, \"__allocate_stack\"),
- tmp, 0, SImode, 1, operands[0], Pmode);
+ tmp, 0, SImode, 1, operands[1], Pmode);
emit_insn (gen_set_sp (tmp));
+ emit_move_insn (operands[0], tmp);
DONE;
}
- if (GET_CODE (operands[0]) != CONST_INT
- || INTVAL (operands[0]) < -32767
- || INTVAL (operands[0]) > 32768)
+ if (GET_CODE (operands[1]) != CONST_INT
+ || INTVAL (operands[1]) < -32767
+ || INTVAL (operands[1]) > 32768)
{
neg_op0 = gen_reg_rtx (Pmode);
if (TARGET_32BIT)
- emit_insn (gen_negsi2 (neg_op0, operands[0]));
+ emit_insn (gen_negsi2 (neg_op0, operands[1]));
else
- emit_insn (gen_negdi2 (neg_op0, operands[0]));
+ emit_insn (gen_negdi2 (neg_op0, operands[1]));
}
else
- neg_op0 = GEN_INT (- INTVAL (operands[0]));
+ neg_op0 = GEN_INT (- INTVAL (operands[1]));
if (TARGET_UPDATE)
emit_insn ((* ((TARGET_32BIT) ? gen_movsi_update : gen_movdi_update))
@@ -7042,6 +7169,8 @@
stack_pointer_rtx),
chain);
}
+
+ emit_move_insn (operands[0], virtual_stack_dynamic_rtx);
DONE;
}")
@@ -7112,11 +7241,11 @@
DONE;
}")
-;; If we have -mmiminal-toc, we need to reload r30 after a nonlocal goto.
+;; If we have -mminimal-toc, we need to reload r30 after a nonlocal goto.
(define_insn "nonlocal_goto_receiver"
[(unspec_volatile [(const_int 0)] 1)]
- "TARGET_TOC && TARGET_MINIMAL_TOC && get_pool_size () != 0"
+ "TARGET_TOC && TARGET_MINIMAL_TOC"
"*
{
rs6000_output_load_toc_table (asm_out_file, 30);
@@ -7396,7 +7525,7 @@
else if (INTVAL (operands[2]) & CALL_V4_CLEAR_FP_ARGS)
output_asm_insn (\"creqv 6,6,6\", operands);
- return \"bl %z0\";
+ return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z0@local\" : \"bl %z0\";
}"
[(set_attr "type" "branch")
(set_attr "length" "4,8")])
@@ -7451,7 +7580,7 @@
else if (INTVAL (operands[2]) & CALL_V4_CLEAR_FP_ARGS)
output_asm_insn (\"creqv 6,6,6\", operands);
- return (flag_pic == 1) ? \"bl %z0@plt\" : \"bl %z0\";
+ return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z0@plt\" : \"bl %z0\";
}"
[(set_attr "type" "branch")
(set_attr "length" "4,8")])
@@ -7471,7 +7600,7 @@
else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS)
output_asm_insn (\"creqv 6,6,6\", operands);
- return \"bl %z1\";
+ return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z1@local\" : \"bl %z1\";
}"
[(set_attr "type" "branch")
(set_attr "length" "4,8")])
@@ -7521,7 +7650,7 @@
else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS)
output_asm_insn (\"creqv 6,6,6\", operands);
- return (flag_pic == 1) ? \"bl %z1@plt\" : \"bl %z1\";
+ return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z1@plt\" : \"bl %z1\";
}"
[(set_attr "type" "branch")
(set_attr "length" "4,8")])
@@ -7966,8 +8095,8 @@
int sextc = (c << 16) >> 16;
int xorv = c ^ sextc;
- operands[4] = gen_rtx (CONST_INT, VOIDmode, xorv);
- operands[5] = gen_rtx (CONST_INT, VOIDmode, sextc);
+ operands[4] = GEN_INT (xorv);
+ operands[5] = GEN_INT (sextc);
}")
(define_insn ""
@@ -8094,8 +8223,8 @@
else
count = 32 - (put_bit - is_bit);
- operands[4] = gen_rtx (CONST_INT, VOIDmode, count);
- operands[5] = gen_rtx (CONST_INT, VOIDmode, put_bit);
+ operands[4] = GEN_INT (count);
+ operands[5] = GEN_INT (put_bit);
return \"%D1mfcr %0\;{rlinm|rlwinm} %0,%0,%4,%5,%5\";
}"
@@ -8124,8 +8253,8 @@
else
count = 32 - (put_bit - is_bit);
- operands[5] = gen_rtx (CONST_INT, VOIDmode, count);
- operands[6] = gen_rtx (CONST_INT, VOIDmode, put_bit);
+ operands[5] = GEN_INT (count);
+ operands[6] = GEN_INT (put_bit);
return \"%D1mfcr %4\;{rlinm.|rlwinm.} %4,%4,%5,%6,%6\";
}"
diff --git a/gcc/config/rs6000/rtems.h b/gcc/config/rs6000/rtems.h
index b63b44c5747..10c6bf77b57 100644
--- a/gcc/config/rs6000/rtems.h
+++ b/gcc/config/rs6000/rtems.h
@@ -1,5 +1,4 @@
-/* Definitions for rtems targetting a PowerPC using elf.
-
+/* Definitions for rtems targeting a PowerPC using elf.
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Contributed by Joel Sherrill (joel@OARcorp.com).
diff --git a/gcc/config/rs6000/sol2.h b/gcc/config/rs6000/sol2.h
index f75ad2b5885..0a73c4d26d5 100644
--- a/gcc/config/rs6000/sol2.h
+++ b/gcc/config/rs6000/sol2.h
@@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler,
for IBM RS/6000 running AIX version 3.1.
- Copyright (C) 1996 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Contributed by David Reese (Dave.Reese@East.Sun.COM)
This file is part of GNU CC.
@@ -46,6 +46,15 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#undef LINK_START_DEFAULT_SPEC
#define LINK_START_DEFAULT_SPEC "%(link_start_solaris)"
+#undef CPP_SPEC
+#define CPP_SPEC "%{posix: -D_POSIX_SOURCE}\
+%(cpp_sysv) %(cpp_endian) %(cpp_cpu) \
+%{mmvme: %(cpp_os_mvme) } \
+%{msim: %(cpp_os_sim) } \
+%{mcall-linux: %(cpp_os_linux) } \
+%{mcall-solaris: %(cpp_os_solaris) } \
+%{!mmvme: %{!msim: %{!mcall-linux: %{!mcall-solaris: %(cpp_os_default) }}}}"
+
#undef CPP_OS_DEFAULT_SPEC
#define CPP_OS_DEFAULT_SPEC "%(cpp_os_solaris)"
@@ -165,3 +174,5 @@ while (0)
#undef MULTILIB_DEFAULTS
#define MULTILIB_DEFAULTS { "mlittle", "mcall-solaris" }
+
+#define STDC_0_IN_SYSTEM_HEADERS
diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
index 294debf3f98..1fdd2f032d8 100644
--- a/gcc/config/rs6000/sysv4.h
+++ b/gcc/config/rs6000/sysv4.h
@@ -1,5 +1,5 @@
/* Target definitions for GNU compiler for PowerPC running System V.4
- Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by Cygnus Support.
This file is part of GNU CC.
@@ -91,12 +91,18 @@ extern enum rs6000_sdata_type rs6000_sdata;
{ "sdata", 0 }, \
{ "no-sdata", 0 }, \
{ "sim", 0 }, \
+ { "ads", 0 }, \
+ { "yellowknife", 0 }, \
{ "mvme", 0 }, \
{ "emb", 0 }, \
{ "solaris-cclib", 0 }, \
{ "shlib", 0 }, \
+ EXTRA_SUBTARGET_SWITCHES \
{ "newlib", 0 },
+/* This is meant to be redefined in the host dependent files */
+#define EXTRA_SUBTARGET_SWITCHES
+
/* Default ABI to use */
#define RS6000_ABI_NAME "sysv"
@@ -323,6 +329,9 @@ do { \
#undef ASM_OUTPUT_EXTERNAL
+/* Put jump tables in read-only memory, rather than in .text. */
+#undef JUMP_TABLES_IN_TEXT_SECTION
+
/* Undefine some things which are defined by the generic svr4.h. */
#undef ASM_FILE_END
@@ -575,7 +584,7 @@ extern void rs6000_select_rtx_section (), rs6000_select_section ();
we can't check that since not every file that uses
GO_IF_LEGITIMATE_ADDRESS_P includes real.h.
- Unlike AIX, we don't key off of -mmininal-toc, but instead do not
+ Unlike AIX, we don't key off of -mminimal-toc, but instead do not
allow floating point constants in the TOC if -mrelocatable. */
#undef ASM_OUTPUT_SPECIAL_POOL_ENTRY_P
@@ -704,7 +713,7 @@ do { \
} \
} while (0)
-/* Describe how to emit unitialized external linkage items */
+/* Describe how to emit uninitialized external linkage items */
#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
do { \
ASM_GLOBALIZE_LABEL (FILE, NAME); \
@@ -991,11 +1000,13 @@ do { \
/* Default starting address if specified */
#ifndef LINK_START_SPEC
#define LINK_START_SPEC "\
+%{mads: %(link_start_ads) } \
+%{myellowknife: %(link_start_yellowknife) } \
%{mmvme: %(link_start_mvme) } \
%{msim: %(link_start_sim) } \
%{mcall-linux: %(link_start_linux) } \
%{mcall-solaris: %(link_start_solaris) } \
-%{!mmvme: %{!msim: %{!mcall-linux: %{!mcall-solaris: %(link_start_default) }}}}"
+%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-linux: %{!mcall-solaris: %(link_start_default) }}}}}}"
#endif
#ifndef LINK_START_DEFAULT_SPEC
@@ -1019,13 +1030,13 @@ do { \
#undef LINK_SHLIB_SPEC
#ifndef NO_SHARED_LIB_SUPPORT
-/* Shared libaries are default. */
+/* Shared libraries are default. */
#define LINK_SHLIB_SPEC "\
%{!static: %(link_path) %{!R*:%{L*:-R %*}}} \
%{mshlib: } \
%{static:-dn -Bstatic} \
-%{shared:-G -dy -z text %{!h*:%{o*:-h %*}}} \
-%{symbolic:-Bsymbolic -G -dy -z text %{!h*:%{o*:-h %*}}}"
+%{shared:-G -dy -z text} \
+%{symbolic:-Bsymbolic -G -dy -z text}"
#else
/* Shared libraries are not default. */
@@ -1033,8 +1044,8 @@ do { \
%{mshlib: %(link_path) } \
%{!mshlib: %{!shared: %{!symbolic: -dn -Bstatic}}} \
%{static: } \
-%{shared:-G -dy -z text %{!h*:%{o*:-h %*}} %(link_path) } \
-%{symbolic:-Bsymbolic -G -dy -z text %{!h*:%{o*:-h %*}} %(link_path) }"
+%{shared:-G -dy -z text %(link_path) } \
+%{symbolic:-Bsymbolic -G -dy -z text %(link_path) }"
#endif
/* Override the default target of the linker. */
@@ -1046,11 +1057,13 @@ do { \
/* Any specific OS flags */
#ifndef LINK_OS_SPEC
#define LINK_OS_SPEC "\
+%{mads: %(link_os_ads) } \
+%{myellowknife: %(link_os_yellowknife) } \
%{mmvme: %(link_os_mvme) } \
%{msim: %(link_os_sim) } \
%{mcall-linux: %(link_os_linux) } \
%{mcall-solaris: %(link_os_solaris) } \
-%{!mmvme: %{!msim: %{!mcall-linux: %{!mcall-solaris: %(link_os_default) }}}}"
+%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-linux: %{!mcall-solaris: %(link_os_default) }}}}}}"
#endif
#ifndef LINK_OS_DEFAULT_SPEC
@@ -1101,11 +1114,13 @@ do { \
#undef CPP_SPEC
#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} %(cpp_sysv) %(cpp_endian) %(cpp_cpu) \
+%{mads: %(cpp_os_ads) } \
+%{myellowknife: %(cpp_os_yellowknife) } \
%{mmvme: %(cpp_os_mvme) } \
%{msim: %(cpp_os_sim) } \
%{mcall-linux: %(cpp_os_linux) } \
%{mcall-solaris: %(cpp_os_solaris) } \
-%{!mmvme: %{!msim: %{!mcall-linux: %{!mcall-solaris: %(cpp_os_default) }}}}"
+%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-linux: %{!mcall-solaris: %(cpp_os_default) }}}}}}"
#ifndef CPP_OS_DEFAULT_SPEC
#define CPP_OS_DEFAULT_SPEC ""
@@ -1113,22 +1128,26 @@ do { \
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "\
+%{mads: %(startfile_ads) } \
+%{myellowknife: %(startfile_yellowknife) } \
%{mmvme: %(startfile_mvme) } \
%{msim: %(startfile_sim) } \
%{mcall-linux: %(startfile_linux) } \
%{mcall-solaris: %(startfile_solaris) } \
-%{!mmvme: %{!msim: %{!mcall-linux: %{!mcall-solaris: %(startfile_default) }}}}"
+%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-linux: %{!mcall-solaris: %(startfile_default) }}}}}}"
#undef STARTFILE_DEFAULT_SPEC
#define STARTFILE_DEFAULT_SPEC ""
#undef LIB_SPEC
#define LIB_SPEC "\
+%{mads: %(lib_ads) } \
+%{myellowknife: %(lib_yellowknife) } \
%{mmvme: %(lib_mvme) } \
%{msim: %(lib_sim) } \
%{mcall-linux: %(lib_linux) } \
%{mcall-solaris: %(lib_solaris) } \
-%{!mmvme: %{!msim: %{!mcall-linux: %{!mcall-solaris: %(lib_default) }}}}"
+%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-linux: %{!mcall-solaris: %(lib_default) }}}}}}"
#undef LIBGCC_SPEC
#define LIBGCC_SPEC "libgcc.a%s"
@@ -1139,22 +1158,74 @@ do { \
#undef ENDFILE_SPEC
#define ENDFILE_SPEC "\
+%{mads: ecrtn.o%s} \
+%{myellowknife: ecrtn.o%s} \
%{mmvme: ecrtn.o%s} \
%{msim: ecrtn.o%s} \
%{mcall-linux: } \
%{mcall-solaris: scrtn.o%s} \
-%{!mmvme: %{!msim: %{!mcall-linux: %{!mcall-solaris: %(endfile_default) }}}}"
+%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mcall-linux: %{!mcall-solaris: %(endfile_default) }}}}}}"
#undef ENDFILE_DEFAULT_SPEC
#define ENDFILE_DEFAULT_SPEC ""
+/* Motorola ADS support. */
+#ifndef LIB_ADS_SPEC
+#define LIB_ADS_SPEC "--start-group -lads -lc --end-group"
+#endif
+
+#ifndef STARTFILE_ADS_SPEC
+#define STARTFILE_ADS_SPEC "ecrti.o%s crt0.o%s"
+#endif
+
+#ifndef ENDFILE_ADS_SPEC
+#define ENDFILE_ADS_SPEC "ecrtn.o%s"
+#endif
+
+#ifndef LINK_START_ADS_SPEC
+#define LINK_START_ADS_SPEC "-T ads.ld%s"
+#endif
+
+#ifndef LINK_OS_ADS_SPEC
+#define LINK_OS_ADS_SPEC ""
+#endif
+
+#ifndef CPP_OS_ADS_SPEC
+#define CPP_OS_ADS_SPEC ""
+#endif
+
+/* Motorola Yellowknife support. */
+#ifndef LIB_YELLOWKNIFE_SPEC
+#define LIB_YELLOWKNIFE_SPEC "--start-group -lyk -lc --end-group"
+#endif
+
+#ifndef STARTFILE_YELLOWKNIFE_SPEC
+#define STARTFILE_YELLOWKNIFE_SPEC "ecrti.o%s crt0.o%s"
+#endif
+
+#ifndef ENDFILE_YELLOWKNIFE_SPEC
+#define ENDFILE_YELLOWKNIFE_SPEC "ecrtn.o%s"
+#endif
+
+#ifndef LINK_START_YELLOWKNIFE_SPEC
+#define LINK_START_YELLOWKNIFE_SPEC "-T yellowknife.ld%s"
+#endif
+
+#ifndef LINK_OS_YELLOWKNIFE_SPEC
+#define LINK_OS_YELLOWKNIFE_SPEC ""
+#endif
+
+#ifndef CPP_OS_YELLOWKNIFE_SPEC
+#define CPP_OS_YELLOWKNIFE_SPEC ""
+#endif
+
/* Motorola MVME support. */
#ifndef LIB_MVME_SPEC
-#define LIB_MVME_SPEC "-( -lmvme -lc -)"
+#define LIB_MVME_SPEC "--start-group -lmvme -lc --end-group"
#endif
#ifndef STARTFILE_MVME_SPEC
-#define STARTFILE_MVME_SPEC "ecrti.o%s mvme-crt0.o%s"
+#define STARTFILE_MVME_SPEC "ecrti.o%s crt0.o%s"
#endif
#ifndef ENDFILE_MVME_SPEC
@@ -1162,7 +1233,7 @@ do { \
#endif
#ifndef LINK_START_MVME_SPEC
-#define LINK_START_MVME_SPEC ""
+#define LINK_START_MVME_SPEC "%{!Wl,-T*: %{!T*: -Ttext 0x40000}}"
#endif
#ifndef LINK_OS_MVME_SPEC
@@ -1175,7 +1246,7 @@ do { \
/* PowerPC simulator based on netbsd system calls support. */
#ifndef LIB_SIM_SPEC
-#define LIB_SIM_SPEC "-( -lsim -lc -)"
+#define LIB_SIM_SPEC "--start-group -lsim -lc --end-group"
#endif
#ifndef STARTFILE_SIM_SPEC
@@ -1198,9 +1269,9 @@ do { \
#define CPP_OS_SIM_SPEC ""
#endif
-/* Linux support. */
+/* GNU/Linux support. */
#ifndef LIB_LINUX_SPEC
-#define LIB_LINUX_SPEC "%{mnewlib: -( -llinux -lc -) } %{!mnewlib: -lc }"
+#define LIB_LINUX_SPEC "%{mnewlib: --start-group -llinux -lc --end-group } %{!mnewlib: -lc }"
#endif
#ifndef STARTFILE_LINUX_SPEC
@@ -1248,7 +1319,7 @@ do { \
#ifndef LIB_SOLARIS_SPEC
#define LIB_SOLARIS_SPEC "\
-%{mnewlib: -( -lsolaris -lc -) } \
+%{mnewlib: --start-group -lsolaris -lc --end-group } \
%{!mnewlib: \
%{ansi:values-Xc.o%s} \
%{!ansi: \
@@ -1292,16 +1363,22 @@ do { \
/* Define any extra SPECS that the compiler needs to generate. */
#undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \
+ { "lib_ads", LIB_ADS_SPEC }, \
+ { "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \
{ "lib_mvme", LIB_MVME_SPEC }, \
{ "lib_sim", LIB_SIM_SPEC }, \
{ "lib_linux", LIB_LINUX_SPEC }, \
{ "lib_solaris", LIB_SOLARIS_SPEC }, \
{ "lib_default", LIB_DEFAULT_SPEC }, \
+ { "startfile_ads", STARTFILE_ADS_SPEC }, \
+ { "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \
{ "startfile_mvme", STARTFILE_MVME_SPEC }, \
{ "startfile_sim", STARTFILE_SIM_SPEC }, \
{ "startfile_linux", STARTFILE_LINUX_SPEC }, \
{ "startfile_solaris", STARTFILE_SOLARIS_SPEC }, \
{ "startfile_default", STARTFILE_DEFAULT_SPEC }, \
+ { "endfile_ads", ENDFILE_ADS_SPEC }, \
+ { "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \
{ "endfile_mvme", ENDFILE_MVME_SPEC }, \
{ "endfile_sim", ENDFILE_SIM_SPEC }, \
{ "endfile_linux", ENDFILE_LINUX_SPEC }, \
@@ -1311,12 +1388,16 @@ do { \
{ "link_shlib", LINK_SHLIB_SPEC }, \
{ "link_target", LINK_TARGET_SPEC }, \
{ "link_start", LINK_START_SPEC }, \
+ { "link_start_ads", LINK_START_ADS_SPEC }, \
+ { "link_start_yellowknife", LINK_START_YELLOWKNIFE_SPEC }, \
{ "link_start_mvme", LINK_START_MVME_SPEC }, \
{ "link_start_sim", LINK_START_SIM_SPEC }, \
{ "link_start_linux", LINK_START_LINUX_SPEC }, \
{ "link_start_solaris", LINK_START_SOLARIS_SPEC }, \
{ "link_start_default", LINK_START_DEFAULT_SPEC }, \
{ "link_os", LINK_OS_SPEC }, \
+ { "link_os_ads", LINK_OS_ADS_SPEC }, \
+ { "link_os_yellowknife", LINK_OS_YELLOWKNIFE_SPEC }, \
{ "link_os_mvme", LINK_OS_MVME_SPEC }, \
{ "link_os_sim", LINK_OS_SIM_SPEC }, \
{ "link_os_linux", LINK_OS_LINUX_SPEC }, \
@@ -1325,6 +1406,8 @@ do { \
{ "cpp_endian_big", CPP_ENDIAN_BIG_SPEC }, \
{ "cpp_endian_little", CPP_ENDIAN_LITTLE_SPEC }, \
{ "cpp_endian_solaris", CPP_ENDIAN_SOLARIS_SPEC }, \
+ { "cpp_os_ads", CPP_OS_ADS_SPEC }, \
+ { "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \
{ "cpp_os_mvme", CPP_OS_MVME_SPEC }, \
{ "cpp_os_sim", CPP_OS_SIM_SPEC }, \
{ "cpp_os_linux", CPP_OS_LINUX_SPEC }, \
diff --git a/gcc/config/rs6000/t-ppccomm b/gcc/config/rs6000/t-ppccomm
index 145fcaede22..c6f9b6c7629 100644
--- a/gcc/config/rs6000/t-ppccomm
+++ b/gcc/config/rs6000/t-ppccomm
@@ -67,3 +67,7 @@ $(T)scrtn$(objext): scrtn.S
$(T)scrt0$(objext): scrt0.c
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -c scrt0.c -o $(T)scrt0$(objext)
+
+# It is important that crtbegin.o, etc., aren't surprised by stuff in .sdata.
+CRTSTUFF_T_CFLAGS = -msdata=none
+CRTSTUFF_T_CFLAGS_S = -fpic -msdata=none
diff --git a/gcc/config/rs6000/t-ppcos b/gcc/config/rs6000/t-ppcos
index fe1d6ad64c1..480665a8937 100644
--- a/gcc/config/rs6000/t-ppcos
+++ b/gcc/config/rs6000/t-ppcos
@@ -1,4 +1,5 @@
-# Target config file for a System V based system (Solaris, Linux, Netbsd) with gas
+# Target config file for a System V based system (Solaris, GNU/Linux, Netbsd)
+# with gas.
# Build libgcc.a with different options. With gas, build pic libraries
# as well no floating point
diff --git a/gcc/config/rs6000/tramp.asm b/gcc/config/rs6000/tramp.asm
index 57b47013748..47ab7d65b1f 100644
--- a/gcc/config/rs6000/tramp.asm
+++ b/gcc/config/rs6000/tramp.asm
@@ -1,8 +1,6 @@
-/* CYGNUS LOCAL -- waiting for FSF sources to be restored/meissner */
-/*
- * special support for trampolines
+/* Special support for trampolines
*
- * Copyright (C) 1996 Free Software Foundation, Inc.
+ * Copyright (C) 1996, 1997 Free Software Foundation, Inc.
* Written By Michael Meissner
*
* This file is free software; you can redistribute it and/or modify it
@@ -82,7 +80,7 @@ FUNC_START(__trampoline_setup)
mflr r11
lwz r12,(.LCL0-.LCF0)(r11)
add r11,r12,r11
- lwz r7,.Ltramp(r11) /* trampoline addres -4 */
+ lwz r7,.Ltramp(r11) /* trampoline address -4 */
li r8,__trampoline_size /* verify that the trampoline is big enough */
cmpw cr1,r8,r4
diff --git a/gcc/config/rs6000/win-nt.h b/gcc/config/rs6000/win-nt.h
index 7c11c1b2ae6..2fcf44647d2 100644
--- a/gcc/config/rs6000/win-nt.h
+++ b/gcc/config/rs6000/win-nt.h
@@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler, for PowerPC
running Windows/NT.
- Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by Cygnus Support.
This file is part of GNU CC.
@@ -162,7 +162,7 @@ do { \
ASM_OUTPUT_SKIP (FILE, SIZE); \
} while (0)
-/* Describe how to emit unitialized external linkage items */
+/* Describe how to emit uninitialized external linkage items */
#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
do { \
ASM_GLOBALIZE_LABEL (FILE, NAME); \
diff --git a/gcc/config/rs6000/x-aix31 b/gcc/config/rs6000/x-aix31
index 635167c2ed7..9f171fc9926 100644
--- a/gcc/config/rs6000/x-aix31
+++ b/gcc/config/rs6000/x-aix31
@@ -1,6 +1,4 @@
# configuration for IBM rs6000 running aix
-INSTALL=/usr/ucb/install -c
-
# Show we need to use the C version of ALLOCA
ALLOCA=alloca.o
diff --git a/gcc/config/rs6000/x-rs6000 b/gcc/config/rs6000/x-rs6000
index ecfc0899079..0d8f3113fb5 100644
--- a/gcc/config/rs6000/x-rs6000
+++ b/gcc/config/rs6000/x-rs6000
@@ -1,5 +1,4 @@
# configuration for IBM rs6000 running aix
-INSTALL=/usr/ucb/install -c
# Show we need to use the C version of ALLOCA
ALLOCA=alloca.o
diff --git a/gcc/config/rs6000/xm-cygwin32.h b/gcc/config/rs6000/xm-cygwin32.h
index f7e30a15524..677254b371c 100644
--- a/gcc/config/rs6000/xm-cygwin32.h
+++ b/gcc/config/rs6000/xm-cygwin32.h
@@ -1,6 +1,6 @@
/* Configuration for GNU C-compiler for hosting on Windows NT.
using a unix style C library.
- Copyright (C) 1995 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -23,7 +23,4 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "rs6000/xm-rs6000.h"
-#define HAVE_STRERROR
-#define HAVE_RUSAGE
-#define HAVE_FILE_H
#define EXECUTABLE_SUFFIX ".exe"
diff --git a/gcc/config/rs6000/xm-rs6000.h b/gcc/config/rs6000/xm-rs6000.h
index df6e4e7ad97..a027e3a63cd 100644
--- a/gcc/config/rs6000/xm-rs6000.h
+++ b/gcc/config/rs6000/xm-rs6000.h
@@ -44,7 +44,11 @@ Boston, MA 02111-1307, USA. */
/* If not compiled with GNU C, use the C alloca and use only int bitfields. */
#ifndef __GNUC__
#define USE_C_ALLOCA
+#if __STDC__
+extern void *alloca ();
+#else
extern char *alloca ();
+#endif
#define ONLY_INT_FIELDS
#endif
@@ -59,10 +63,3 @@ extern char *alloca ();
collect has a chance to see them, so scan the object files directly. */
#define COLLECT_EXPORT_LIST
#endif
-
-#ifndef __STDC__
-extern char *malloc (), *realloc (), *calloc ();
-#else
-extern void *malloc (), *realloc (), *calloc ();
-#endif
-extern void free ();
diff --git a/gcc/config/rs6000/xm-sysv4.h b/gcc/config/rs6000/xm-sysv4.h
index 5283dfcf98a..bc8f4bf299b 100644
--- a/gcc/config/rs6000/xm-sysv4.h
+++ b/gcc/config/rs6000/xm-sysv4.h
@@ -51,17 +51,15 @@ Boston, MA 02111-1307, USA. */
/* if not compiled with GNU C, use the C alloca and use only int bitfields. */
#ifndef __GNUC__
#define USE_C_ALLOCA
+#ifdef __STDC__
+extern void *alloca ();
+#else
extern char *alloca ();
+#endif
#undef ONLY_INT_FIELDS
#define ONLY_INT_FIELDS
#endif
-/* Solaris has a different declaration of sys_siglist than collect uses. */
-#define DONT_DECLARE_SYS_SIGLIST
-
-/* We have STRERROR */
-#define HAVE_STRERROR
-
#ifdef __PPC__
#ifndef __STDC__
extern char *malloc (), *realloc (), *calloc ();
diff --git a/gcc/config/sh/elf.h b/gcc/config/sh/elf.h
index 2c3294b4935..a56077e544e 100644
--- a/gcc/config/sh/elf.h
+++ b/gcc/config/sh/elf.h
@@ -25,10 +25,6 @@ Boston, MA 02111-1307, USA. */
/* No SDB debugging info. */
#undef SDB_DEBUGGING_INFO
-/* Prefer stabs. */
-#undef PREFERRED_DEBUGGING_TYPE
-#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
-
/* Undefine some macros defined in both sh.h and svr4.h. */
#undef IDENT_ASM_OP
#undef ASM_FILE_END
@@ -40,10 +36,30 @@ Boston, MA 02111-1307, USA. */
#undef ASM_OUTPUT_CONSTRUCTOR
#undef ASM_OUTPUT_DESTRUCTOR
#undef ASM_DECLARE_FUNCTION_NAME
+#undef PREFERRED_DEBUGGING_TYPE
/* Be ELF-like. */
#include "svr4.h"
+/* The prefix to add to user-visible assembler symbols.
+ Note that svr4.h redefined it from the original value (that we want)
+ in sh.h */
+
+#undef USER_LABEL_PREFIX
+#define USER_LABEL_PREFIX "_"
+
+#undef LOCAL_LABEL_PREFIX
+#define LOCAL_LABEL_PREFIX "."
+
+#undef ASM_FILE_START
+#define ASM_FILE_START(FILE) do { \
+ output_file_directive ((FILE), main_input_filename); \
+ if (TARGET_LITTLE_ENDIAN) \
+ fprintf ((FILE), "\t.little\n"); \
+} while (0)
+
+
+
/* Let code know that this is ELF. */
#define CPP_PREDEFINES "-D__sh__ -D__ELF__ -Acpu(sh) -Amachine(sh)"
@@ -52,7 +68,7 @@ Boston, MA 02111-1307, USA. */
#define ASM_SPEC "%{ml:-little} %{mrelax:-relax}"
#undef LINK_SPEC
-#define LINK_SPEC "%{ml:-m shl} %{mrelax:-relax}"
+#define LINK_SPEC "%{ml:-m shlelf} %{mrelax:-relax}"
/* svr4.h undefined DBX_REGISTER_NUMBER, so we need to define it
again. */
@@ -63,29 +79,26 @@ Boston, MA 02111-1307, USA. */
symbol names. */
#undef ASM_OUTPUT_LABELREF
#define ASM_OUTPUT_LABELREF(STREAM,NAME) \
- fprintf (STREAM, "_%s", NAME)
-
-/* Because SH ELF uses underscores, we don't put a '.' before local
- labels, for easy compatibility with the COFF implementation. */
+ asm_fprintf (STREAM, "%U%s", NAME)
#undef ASM_GENERATE_INTERNAL_LABEL
#define ASM_GENERATE_INTERNAL_LABEL(STRING, PREFIX, NUM) \
- sprintf (STRING, "*%s%d", PREFIX, NUM)
+ sprintf ((STRING), "*%s%s%d", LOCAL_LABEL_PREFIX, (PREFIX), (NUM))
#undef ASM_OUTPUT_INTERNAL_LABEL
#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \
- fprintf (FILE, "%s%d:\n", PREFIX, NUM)
+ asm_fprintf ((FILE), "%L%s%d:\n", (PREFIX), (NUM))
#undef ASM_OUTPUT_SOURCE_LINE
#define ASM_OUTPUT_SOURCE_LINE(file, line) \
do \
{ \
static int sym_lineno = 1; \
- fprintf (file, ".stabn 68,0,%d,LM%d-", \
- line, sym_lineno); \
- assemble_name (file, \
+ asm_fprintf ((file), ".stabn 68,0,%d,%LLM%d-", \
+ (line), sym_lineno); \
+ assemble_name ((file), \
XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0));\
- fprintf (file, "\nLM%d:\n", sym_lineno); \
+ asm_fprintf ((file), "\n%LLM%d:\n", sym_lineno); \
sym_lineno += 1; \
} \
while (0)
@@ -94,7 +107,7 @@ while (0)
#define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE, FILENAME) \
do { \
text_section (); \
- fprintf (FILE, "\t.stabs \"\",%d,0,0,Letext\nLetext:\n", N_SO); \
+ fprintf ((FILE), "\t.stabs \"\",%d,0,0,Letext\nLetext:\n", N_SO); \
} while (0)
/* Arrange to call __main, rather than using crtbegin.o and crtend.o
@@ -103,3 +116,7 @@ do { \
#undef FINI_SECTION_ASM_OP
#undef STARTFILE_SPEC
#undef ENDFILE_SPEC
+
+/* HANDLE_SYSV_PRAGMA (defined by svr4.h) takes precedence over HANDLE_PRAGMA.
+ We want to use the HANDLE_PRAGMA from sh.h. */
+#undef HANDLE_SYSV_PRAGMA
diff --git a/gcc/config/sh/lib1funcs.asm b/gcc/config/sh/lib1funcs.asm
index 6d8d3e8ffb4..923fa38c9f5 100644
--- a/gcc/config/sh/lib1funcs.asm
+++ b/gcc/config/sh/lib1funcs.asm
@@ -1,4 +1,4 @@
-/* Copyright (C) 1994, 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1994, 1995, 1997 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 the
@@ -39,6 +39,16 @@ Boston, MA 02111-1307, USA. */
!! recoded in assembly by Toshiyasu Morita
!! tm@netcom.com
+/* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and
+ ELF local label prefixes by J"orn Rennecke
+ amylaar@cygnus.com */
+
+#ifdef __ELF__
+#define LOCAL(X) .L_##X
+#else
+#define LOCAL(X) L_##X
+#endif
+
#ifdef L_ashiftrt
.global ___ashiftrt_r4_0
.global ___ashiftrt_r4_1
@@ -178,123 +188,127 @@ ___ashiftrt_r4_0:
.align 2
___ashrsi3:
mov #31,r0
- cmp/hi r0,r5
- bt L_ashrsi3_31
- mova L_ashrsi3_table,r0
+ and r0,r5
+ mova LOCAL(ashrsi3_table),r0
mov.b @(r0,r5),r5
- add r5,r0 ! Change to braf when gas is fixed
+#ifdef __sh1__
+ add r5,r0
jmp @r0
+#else
+ braf r5
+#endif
mov r4,r0
-L_ashrsi3_table:
- .byte L_ashrsi3_0-L_ashrsi3_table
- .byte L_ashrsi3_1-L_ashrsi3_table
- .byte L_ashrsi3_2-L_ashrsi3_table
- .byte L_ashrsi3_3-L_ashrsi3_table
- .byte L_ashrsi3_4-L_ashrsi3_table
- .byte L_ashrsi3_5-L_ashrsi3_table
- .byte L_ashrsi3_6-L_ashrsi3_table
- .byte L_ashrsi3_7-L_ashrsi3_table
- .byte L_ashrsi3_8-L_ashrsi3_table
- .byte L_ashrsi3_9-L_ashrsi3_table
- .byte L_ashrsi3_10-L_ashrsi3_table
- .byte L_ashrsi3_11-L_ashrsi3_table
- .byte L_ashrsi3_12-L_ashrsi3_table
- .byte L_ashrsi3_13-L_ashrsi3_table
- .byte L_ashrsi3_14-L_ashrsi3_table
- .byte L_ashrsi3_15-L_ashrsi3_table
- .byte L_ashrsi3_16-L_ashrsi3_table
- .byte L_ashrsi3_17-L_ashrsi3_table
- .byte L_ashrsi3_18-L_ashrsi3_table
- .byte L_ashrsi3_19-L_ashrsi3_table
- .byte L_ashrsi3_20-L_ashrsi3_table
- .byte L_ashrsi3_21-L_ashrsi3_table
- .byte L_ashrsi3_22-L_ashrsi3_table
- .byte L_ashrsi3_23-L_ashrsi3_table
- .byte L_ashrsi3_24-L_ashrsi3_table
- .byte L_ashrsi3_25-L_ashrsi3_table
- .byte L_ashrsi3_26-L_ashrsi3_table
- .byte L_ashrsi3_27-L_ashrsi3_table
- .byte L_ashrsi3_28-L_ashrsi3_table
- .byte L_ashrsi3_29-L_ashrsi3_table
- .byte L_ashrsi3_30-L_ashrsi3_table
- .byte L_ashrsi3_31-L_ashrsi3_table
-
-L_ashrsi3_31:
+ .align 2
+LOCAL(ashrsi3_table):
+ .byte LOCAL(ashrsi3_0)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_1)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_2)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_3)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_4)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_5)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_6)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_7)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_8)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_9)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_10)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_11)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_12)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_13)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_14)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_15)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_16)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_17)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_18)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_19)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_20)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_21)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_22)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_23)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_24)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_25)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_26)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_27)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_28)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_29)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_30)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_31)-LOCAL(ashrsi3_table)
+
+LOCAL(ashrsi3_31):
rotcl r0
rts
subc r0,r0
-L_ashrsi3_30:
+LOCAL(ashrsi3_30):
shar r0
-L_ashrsi3_29:
+LOCAL(ashrsi3_29):
shar r0
-L_ashrsi3_28:
+LOCAL(ashrsi3_28):
shar r0
-L_ashrsi3_27:
+LOCAL(ashrsi3_27):
shar r0
-L_ashrsi3_26:
+LOCAL(ashrsi3_26):
shar r0
-L_ashrsi3_25:
+LOCAL(ashrsi3_25):
shar r0
-L_ashrsi3_24:
+LOCAL(ashrsi3_24):
shlr16 r0
shlr8 r0
rts
exts.b r0,r0
-L_ashrsi3_23:
+LOCAL(ashrsi3_23):
shar r0
-L_ashrsi3_22:
+LOCAL(ashrsi3_22):
shar r0
-L_ashrsi3_21:
+LOCAL(ashrsi3_21):
shar r0
-L_ashrsi3_20:
+LOCAL(ashrsi3_20):
shar r0
-L_ashrsi3_19:
+LOCAL(ashrsi3_19):
shar r0
-L_ashrsi3_18:
+LOCAL(ashrsi3_18):
shar r0
-L_ashrsi3_17:
+LOCAL(ashrsi3_17):
shar r0
-L_ashrsi3_16:
+LOCAL(ashrsi3_16):
shlr16 r0
rts
exts.w r0,r0
-L_ashrsi3_15:
+LOCAL(ashrsi3_15):
shar r0
-L_ashrsi3_14:
+LOCAL(ashrsi3_14):
shar r0
-L_ashrsi3_13:
+LOCAL(ashrsi3_13):
shar r0
-L_ashrsi3_12:
+LOCAL(ashrsi3_12):
shar r0
-L_ashrsi3_11:
+LOCAL(ashrsi3_11):
shar r0
-L_ashrsi3_10:
+LOCAL(ashrsi3_10):
shar r0
-L_ashrsi3_9:
+LOCAL(ashrsi3_9):
shar r0
-L_ashrsi3_8:
+LOCAL(ashrsi3_8):
shar r0
-L_ashrsi3_7:
+LOCAL(ashrsi3_7):
shar r0
-L_ashrsi3_6:
+LOCAL(ashrsi3_6):
shar r0
-L_ashrsi3_5:
+LOCAL(ashrsi3_5):
shar r0
-L_ashrsi3_4:
+LOCAL(ashrsi3_4):
shar r0
-L_ashrsi3_3:
+LOCAL(ashrsi3_3):
shar r0
-L_ashrsi3_2:
+LOCAL(ashrsi3_2):
shar r0
-L_ashrsi3_1:
+LOCAL(ashrsi3_1):
rts
shar r0
-L_ashrsi3_0:
+LOCAL(ashrsi3_0):
rts
nop
@@ -322,136 +336,136 @@ L_ashrsi3_0:
.align 2
___ashlsi3:
mov #31,r0
- cmp/hi r0,r5
- bt L_ashlsi3_32
- mova L_ashlsi3_table,r0
+ and r0,r5
+ mova LOCAL(ashlsi3_table),r0
mov.b @(r0,r5),r5
- add r5,r0 ! Change to braf when gas is fixed
+#ifdef __sh1__
+ add r5,r0
jmp @r0
+#else
+ braf r5
+#endif
mov r4,r0
-L_ashlsi3_table:
- .byte L_ashlsi3_0-L_ashlsi3_table
- .byte L_ashlsi3_1-L_ashlsi3_table
- .byte L_ashlsi3_2-L_ashlsi3_table
- .byte L_ashlsi3_3-L_ashlsi3_table
- .byte L_ashlsi3_4-L_ashlsi3_table
- .byte L_ashlsi3_5-L_ashlsi3_table
- .byte L_ashlsi3_6-L_ashlsi3_table
- .byte L_ashlsi3_7-L_ashlsi3_table
- .byte L_ashlsi3_8-L_ashlsi3_table
- .byte L_ashlsi3_9-L_ashlsi3_table
- .byte L_ashlsi3_10-L_ashlsi3_table
- .byte L_ashlsi3_11-L_ashlsi3_table
- .byte L_ashlsi3_12-L_ashlsi3_table
- .byte L_ashlsi3_13-L_ashlsi3_table
- .byte L_ashlsi3_14-L_ashlsi3_table
- .byte L_ashlsi3_15-L_ashlsi3_table
- .byte L_ashlsi3_16-L_ashlsi3_table
- .byte L_ashlsi3_17-L_ashlsi3_table
- .byte L_ashlsi3_18-L_ashlsi3_table
- .byte L_ashlsi3_19-L_ashlsi3_table
- .byte L_ashlsi3_20-L_ashlsi3_table
- .byte L_ashlsi3_21-L_ashlsi3_table
- .byte L_ashlsi3_22-L_ashlsi3_table
- .byte L_ashlsi3_23-L_ashlsi3_table
- .byte L_ashlsi3_24-L_ashlsi3_table
- .byte L_ashlsi3_25-L_ashlsi3_table
- .byte L_ashlsi3_26-L_ashlsi3_table
- .byte L_ashlsi3_27-L_ashlsi3_table
- .byte L_ashlsi3_28-L_ashlsi3_table
- .byte L_ashlsi3_29-L_ashlsi3_table
- .byte L_ashlsi3_30-L_ashlsi3_table
- .byte L_ashlsi3_31-L_ashlsi3_table
-
-L_ashlsi3_6:
+ .align 2
+LOCAL(ashlsi3_table):
+ .byte LOCAL(ashlsi3_0)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_1)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_2)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_3)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_4)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_5)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_6)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_7)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_8)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_9)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_10)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_11)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_12)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_13)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_14)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_15)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_16)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_17)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_18)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_19)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_20)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_21)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_22)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_23)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_24)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_25)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_26)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_27)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_28)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_29)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_30)-LOCAL(ashlsi3_table)
+ .byte LOCAL(ashlsi3_31)-LOCAL(ashlsi3_table)
+
+LOCAL(ashlsi3_6):
shll2 r0
-L_ashlsi3_4:
+LOCAL(ashlsi3_4):
shll2 r0
-L_ashlsi3_2:
+LOCAL(ashlsi3_2):
rts
shll2 r0
-L_ashlsi3_7:
+LOCAL(ashlsi3_7):
shll2 r0
-L_ashlsi3_5:
+LOCAL(ashlsi3_5):
shll2 r0
-L_ashlsi3_3:
+LOCAL(ashlsi3_3):
shll2 r0
-L_ashlsi3_1:
+LOCAL(ashlsi3_1):
rts
shll r0
-L_ashlsi3_14:
+LOCAL(ashlsi3_14):
shll2 r0
-L_ashlsi3_12:
+LOCAL(ashlsi3_12):
shll2 r0
-L_ashlsi3_10:
+LOCAL(ashlsi3_10):
shll2 r0
-L_ashlsi3_8:
+LOCAL(ashlsi3_8):
rts
shll8 r0
-L_ashlsi3_15:
+LOCAL(ashlsi3_15):
shll2 r0
-L_ashlsi3_13:
+LOCAL(ashlsi3_13):
shll2 r0
-L_ashlsi3_11:
+LOCAL(ashlsi3_11):
shll2 r0
-L_ashlsi3_9:
+LOCAL(ashlsi3_9):
shll8 r0
rts
shll r0
-L_ashlsi3_22:
+LOCAL(ashlsi3_22):
shll2 r0
-L_ashlsi3_20:
+LOCAL(ashlsi3_20):
shll2 r0
-L_ashlsi3_18:
+LOCAL(ashlsi3_18):
shll2 r0
-L_ashlsi3_16:
+LOCAL(ashlsi3_16):
rts
shll16 r0
-L_ashlsi3_23:
+LOCAL(ashlsi3_23):
shll2 r0
-L_ashlsi3_21:
+LOCAL(ashlsi3_21):
shll2 r0
-L_ashlsi3_19:
+LOCAL(ashlsi3_19):
shll2 r0
-L_ashlsi3_17:
+LOCAL(ashlsi3_17):
shll16 r0
rts
shll r0
-L_ashlsi3_30:
+LOCAL(ashlsi3_30):
shll2 r0
-L_ashlsi3_28:
+LOCAL(ashlsi3_28):
shll2 r0
-L_ashlsi3_26:
+LOCAL(ashlsi3_26):
shll2 r0
-L_ashlsi3_24:
+LOCAL(ashlsi3_24):
shll16 r0
rts
shll8 r0
-L_ashlsi3_31:
+LOCAL(ashlsi3_31):
shll2 r0
-L_ashlsi3_29:
+LOCAL(ashlsi3_29):
shll2 r0
-L_ashlsi3_27:
+LOCAL(ashlsi3_27):
shll2 r0
-L_ashlsi3_25:
+LOCAL(ashlsi3_25):
shll16 r0
shll8 r0
rts
shll r0
-L_ashlsi3_32:
- rts
- mov #0,r0
-
-L_ashlsi3_0:
+LOCAL(ashlsi3_0):
rts
nop
@@ -479,136 +493,136 @@ L_ashlsi3_0:
.align 2
___lshrsi3:
mov #31,r0
- cmp/hi r0,r5
- bt L_lshrsi3_32
- mova L_lshrsi3_table,r0
+ and r0,r5
+ mova LOCAL(lshrsi3_table),r0
mov.b @(r0,r5),r5
- add r5,r0 ! Change to braf when gas is fixed
+#ifdef __sh1__
+ add r5,r0
jmp @r0
+#else
+ braf r5
+#endif
mov r4,r0
-L_lshrsi3_table:
- .byte L_lshrsi3_0-L_lshrsi3_table
- .byte L_lshrsi3_1-L_lshrsi3_table
- .byte L_lshrsi3_2-L_lshrsi3_table
- .byte L_lshrsi3_3-L_lshrsi3_table
- .byte L_lshrsi3_4-L_lshrsi3_table
- .byte L_lshrsi3_5-L_lshrsi3_table
- .byte L_lshrsi3_6-L_lshrsi3_table
- .byte L_lshrsi3_7-L_lshrsi3_table
- .byte L_lshrsi3_8-L_lshrsi3_table
- .byte L_lshrsi3_9-L_lshrsi3_table
- .byte L_lshrsi3_10-L_lshrsi3_table
- .byte L_lshrsi3_11-L_lshrsi3_table
- .byte L_lshrsi3_12-L_lshrsi3_table
- .byte L_lshrsi3_13-L_lshrsi3_table
- .byte L_lshrsi3_14-L_lshrsi3_table
- .byte L_lshrsi3_15-L_lshrsi3_table
- .byte L_lshrsi3_16-L_lshrsi3_table
- .byte L_lshrsi3_17-L_lshrsi3_table
- .byte L_lshrsi3_18-L_lshrsi3_table
- .byte L_lshrsi3_19-L_lshrsi3_table
- .byte L_lshrsi3_20-L_lshrsi3_table
- .byte L_lshrsi3_21-L_lshrsi3_table
- .byte L_lshrsi3_22-L_lshrsi3_table
- .byte L_lshrsi3_23-L_lshrsi3_table
- .byte L_lshrsi3_24-L_lshrsi3_table
- .byte L_lshrsi3_25-L_lshrsi3_table
- .byte L_lshrsi3_26-L_lshrsi3_table
- .byte L_lshrsi3_27-L_lshrsi3_table
- .byte L_lshrsi3_28-L_lshrsi3_table
- .byte L_lshrsi3_29-L_lshrsi3_table
- .byte L_lshrsi3_30-L_lshrsi3_table
- .byte L_lshrsi3_31-L_lshrsi3_table
-
-L_lshrsi3_6:
+ .align 2
+LOCAL(lshrsi3_table):
+ .byte LOCAL(lshrsi3_0)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_1)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_2)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_3)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_4)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_5)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_6)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_7)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_8)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_9)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_10)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_11)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_12)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_13)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_14)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_15)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_16)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_17)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_18)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_19)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_20)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_21)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_22)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_23)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_24)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_25)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_26)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_27)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_28)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_29)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_30)-LOCAL(lshrsi3_table)
+ .byte LOCAL(lshrsi3_31)-LOCAL(lshrsi3_table)
+
+LOCAL(lshrsi3_6):
shlr2 r0
-L_lshrsi3_4:
+LOCAL(lshrsi3_4):
shlr2 r0
-L_lshrsi3_2:
+LOCAL(lshrsi3_2):
rts
shlr2 r0
-L_lshrsi3_7:
+LOCAL(lshrsi3_7):
shlr2 r0
-L_lshrsi3_5:
+LOCAL(lshrsi3_5):
shlr2 r0
-L_lshrsi3_3:
+LOCAL(lshrsi3_3):
shlr2 r0
-L_lshrsi3_1:
+LOCAL(lshrsi3_1):
rts
shlr r0
-L_lshrsi3_14:
+LOCAL(lshrsi3_14):
shlr2 r0
-L_lshrsi3_12:
+LOCAL(lshrsi3_12):
shlr2 r0
-L_lshrsi3_10:
+LOCAL(lshrsi3_10):
shlr2 r0
-L_lshrsi3_8:
+LOCAL(lshrsi3_8):
rts
shlr8 r0
-L_lshrsi3_15:
+LOCAL(lshrsi3_15):
shlr2 r0
-L_lshrsi3_13:
+LOCAL(lshrsi3_13):
shlr2 r0
-L_lshrsi3_11:
+LOCAL(lshrsi3_11):
shlr2 r0
-L_lshrsi3_9:
+LOCAL(lshrsi3_9):
shlr8 r0
rts
shlr r0
-L_lshrsi3_22:
+LOCAL(lshrsi3_22):
shlr2 r0
-L_lshrsi3_20:
+LOCAL(lshrsi3_20):
shlr2 r0
-L_lshrsi3_18:
+LOCAL(lshrsi3_18):
shlr2 r0
-L_lshrsi3_16:
+LOCAL(lshrsi3_16):
rts
shlr16 r0
-L_lshrsi3_23:
+LOCAL(lshrsi3_23):
shlr2 r0
-L_lshrsi3_21:
+LOCAL(lshrsi3_21):
shlr2 r0
-L_lshrsi3_19:
+LOCAL(lshrsi3_19):
shlr2 r0
-L_lshrsi3_17:
+LOCAL(lshrsi3_17):
shlr16 r0
rts
shlr r0
-L_lshrsi3_30:
+LOCAL(lshrsi3_30):
shlr2 r0
-L_lshrsi3_28:
+LOCAL(lshrsi3_28):
shlr2 r0
-L_lshrsi3_26:
+LOCAL(lshrsi3_26):
shlr2 r0
-L_lshrsi3_24:
+LOCAL(lshrsi3_24):
shlr16 r0
rts
shlr8 r0
-L_lshrsi3_31:
+LOCAL(lshrsi3_31):
shlr2 r0
-L_lshrsi3_29:
+LOCAL(lshrsi3_29):
shlr2 r0
-L_lshrsi3_27:
+LOCAL(lshrsi3_27):
shlr2 r0
-L_lshrsi3_25:
+LOCAL(lshrsi3_25):
shlr16 r0
shlr8 r0
rts
shlr r0
-L_lshrsi3_32:
- rts
- mov #0,r0
-
-L_lshrsi3_0:
+LOCAL(lshrsi3_0):
rts
nop
diff --git a/gcc/config/sh/rtems.h b/gcc/config/sh/rtems.h
new file mode 100644
index 00000000000..2e864ad5c29
--- /dev/null
+++ b/gcc/config/sh/rtems.h
@@ -0,0 +1,28 @@
+/* Definitions for rtems targeting a SH using elf.
+ Copyright (C) 1997 Free Software Foundation, Inc.
+ Contributed by Joel Sherrill (joel@OARcorp.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 "sh/elf.h"
+
+/* Specify predefined symbols in preprocessor. */
+
+#undef CPP_PREDEFINES
+#define CPP_PREDEFINES "-D__sh__ -D__ELF__ -Drtems -D__rtems__ \
+ -Asystem(rtems) -Acpu(sh) -Amachine(sh)"
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index 30406f66acb..b4be01e76ec 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -1,5 +1,5 @@
/* Output routines for GCC for Hitachi Super-H.
- Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -35,6 +35,8 @@ Boston, MA 02111-1307, USA. */
#include "output.h"
#include "insn-attr.h"
+int code_for_indirect_jump_scratch = CODE_FOR_indirect_jump_scratch;
+
#define MSW (TARGET_LITTLE_ENDIAN ? 1 : 0)
#define LSW (TARGET_LITTLE_ENDIAN ? 0 : 1)
@@ -84,6 +86,10 @@ enum processor_type sh_cpu;
rtx sh_compare_op0;
rtx sh_compare_op1;
+enum machine_mode sh_addr_diff_vec_mode;
+rtx *uid_align;
+int uid_align_max;
+
/* Provides the class number of the smallest class containing
reg number. */
@@ -114,6 +120,8 @@ enum reg_class reg_class_from_letter[] =
/* u */ NO_REGS, /* v */ NO_REGS, /* w */ FP0_REGS, /* x */ MAC_REGS,
/* y */ FPUL_REGS, /* z */ R0_REGS
};
+
+static void split_branches PROTO ((rtx));
/* Print the operand address in x to the stream. */
@@ -170,6 +178,7 @@ print_operand_address (stream, x)
according to modifier code.
'.' print a .s if insn needs delay slot
+ ',' print LOCAL_LABEL_PREFIX
'@' print trap, rte or rts depending upon pragma interruptness
'#' output a nop if there is nothing to put in the delay slot
'O' print a constant without the #
@@ -188,7 +197,10 @@ print_operand (stream, x, code)
case '.':
if (final_sequence
&& ! INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence, 0, 0)))
- fprintf (stream, ".s");
+ fprintf (stream, ASSEMBLER_DIALECT ? "/s" : ".s");
+ break;
+ case ',':
+ fprintf (stream, "%s", LOCAL_LABEL_PREFIX);
break;
case '@':
if (trap_exit)
@@ -389,13 +401,12 @@ prepare_scc_operands (code)
mode = GET_MODE (sh_compare_op1);
sh_compare_op0 = force_reg (mode, sh_compare_op0);
- if (code != EQ && code != NE
- && (sh_compare_op1 != const0_rtx
- || code == GTU || code == GEU || code == LTU || code == LEU))
+ if ((code != EQ && code != NE
+ && (sh_compare_op1 != const0_rtx
+ || code == GTU || code == GEU || code == LTU || code == LEU))
+ || TARGET_SH3E && GET_MODE_CLASS (mode) == MODE_FLOAT)
sh_compare_op1 = force_reg (mode, sh_compare_op1);
- /* ??? This should be `mode' not `SImode' in the compare, but that would
- require fixing the branch patterns too. */
emit_insn (gen_rtx (SET, VOIDmode, t_reg,
gen_rtx (code, SImode, sh_compare_op0,
sh_compare_op1)));
@@ -410,20 +421,31 @@ from_compare (operands, code)
rtx *operands;
int code;
{
- if (code != EQ && code != NE)
+ enum machine_mode mode = GET_MODE (sh_compare_op0);
+ rtx insn;
+ if (mode == VOIDmode)
+ mode = GET_MODE (sh_compare_op1);
+ if (code != EQ
+ || mode == DImode
+ || (TARGET_SH3E && GET_MODE_CLASS (mode) == MODE_FLOAT))
{
- enum machine_mode mode = GET_MODE (sh_compare_op0);
- if (mode == VOIDmode)
- mode = GET_MODE (sh_compare_op1);
-
/* Force args into regs, since we can't use constants here. */
sh_compare_op0 = force_reg (mode, sh_compare_op0);
if (sh_compare_op1 != const0_rtx
- || code == GTU || code == GEU || code == LTU || code == LEU)
+ || code == GTU || code == GEU
+ || (TARGET_SH3E && GET_MODE_CLASS (mode) == MODE_FLOAT))
sh_compare_op1 = force_reg (mode, sh_compare_op1);
}
- operands[1] = sh_compare_op0;
- operands[2] = sh_compare_op1;
+ if (TARGET_SH3E && GET_MODE_CLASS (mode) == MODE_FLOAT && code == GE)
+ {
+ from_compare (operands, GT);
+ insn = gen_ieee_ccmpeqsf_t (sh_compare_op0, sh_compare_op1);
+ }
+ else
+ insn = gen_rtx (SET, VOIDmode,
+ gen_rtx (REG, SImode, 18),
+ gen_rtx (code, SImode, sh_compare_op0, sh_compare_op1));
+ emit_insn (insn);
}
/* Functions to output assembly code. */
@@ -520,33 +542,54 @@ print_slot (insn)
INSN_DELETED_P (XVECEXP (insn, 0, 1)) = 1;
}
-/* We can't tell if we need a register as a scratch for the jump
- until after branch shortening, and then it's too late to allocate a
- register the 'proper' way. These instruction sequences are rare
- anyway, so to avoid always using a reg up from our limited set, we'll
- grab one when we need one on output. */
-
-/* ??? Should fix compiler so that using a clobber scratch in jump
- instructions works, and then this will be unnecessary. */
-
char *
output_far_jump (insn, op)
rtx insn;
rtx op;
{
- rtx thislab = gen_label_rtx ();
+ struct { rtx lab, reg, op; } this;
+ char *jump;
+ int far;
- /* Output the delay slot insn first if any. */
- if (dbr_sequence_length ())
- print_slot (final_sequence);
+ this.lab = gen_label_rtx ();
- output_asm_insn ("mov.l r13,@-r15", 0);
- output_asm_insn ("mov.l %O0,r13", &thislab);
- output_asm_insn ("jmp @r13", 0);
- output_asm_insn ("mov.l @r15+,r13", 0);
- output_asm_insn (".align 2", 0);
- ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L", CODE_LABEL_NUMBER (thislab));
- output_asm_insn (".long %O0", &op);
+ if (braf_branch_p (insn, 0))
+ {
+ far = 0;
+ jump = "mov.w %O0,%1;braf %1";
+ }
+ else
+ {
+ far = 1;
+ jump = "mov.l %O0,%1;jmp @%1";
+ }
+ /* If we have a scratch register available, use it. */
+ if (GET_CODE (PREV_INSN (insn)) == INSN
+ && INSN_CODE (PREV_INSN (insn)) == CODE_FOR_indirect_jump_scratch)
+ {
+ this.reg = SET_DEST (PATTERN (PREV_INSN (insn)));
+ output_asm_insn (jump, &this.lab);
+ if (dbr_sequence_length ())
+ print_slot (final_sequence);
+ else
+ output_asm_insn ("nop", 0);
+ }
+ else
+ {
+ /* Output the delay slot insn first if any. */
+ if (dbr_sequence_length ())
+ print_slot (final_sequence);
+
+ this.reg = gen_rtx (REG, SImode, 13);
+ output_asm_insn ("mov.l r13,@-r15", 0);
+ output_asm_insn (jump, &this.lab);
+ output_asm_insn ("mov.l @r15+,r13", 0);
+ }
+ if (far)
+ output_asm_insn (".align 2", 0);
+ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L", CODE_LABEL_NUMBER (this.lab));
+ this.op = op;
+ output_asm_insn (far ? ".long %O2" : ".word %O2-%O0", &this.lab);
return "";
}
@@ -563,97 +606,100 @@ output_branch (logic, insn, operands)
rtx insn;
rtx *operands;
{
- int label = lf++;
- int length = get_attr_length (insn);
- int adjusted_length;
+ int offset
+ = (insn_addresses[INSN_UID (XEXP (XEXP (SET_SRC (PATTERN (insn)), 1), 0))]
+ - insn_addresses[INSN_UID (insn)]);
- /* Undo the effects of ADJUST_INSN_LENGTH, so that we get the real
- length. If NEXT_INSN (PREV_INSN (insn)) != insn, then the insn
- is inside a sequence, and ADJUST_INSN_LENGTH was not called on
- it. */
- if (PREV_INSN (insn) == NULL
- || NEXT_INSN (PREV_INSN (insn)) == insn)
+ if (offset == 260
+ && final_sequence
+ && ! INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence, 0, 0)))
{
- adjusted_length = length;
- ADJUST_INSN_LENGTH (insn, adjusted_length);
- length -= (adjusted_length - length);
+ /* The filling of the delay slot has caused a forward branch to exceed
+ its range.
+ Just emit the insn from the delay slot in front of the branch. */
+ /* The call to print_slot will clobber the operands. */
+ rtx op0 = operands[0];
+ print_slot (final_sequence);
+ operands[0] = op0;
}
-
- switch (length)
+ else if (offset < -252 || offset > 258)
{
- case 2:
- /* A branch with an unfilled delay slot. */
- case 4:
- /* Simple branch in range -252..+258 bytes */
- return logic ? "bt%. %l0" : "bf%. %l0";
+ /* This can happen when other condbranches hoist delay slot insn
+ from their destination, thus leading to code size increase.
+ But the branch will still be in the range -4092..+4098 bytes. */
- case 6:
- /* A branch with an unfilled delay slot. */
- case 8:
- /* Branch in range -4092..+4098 bytes. */
- {
- /* The call to print_slot will clobber the operands. */
- rtx op0 = operands[0];
+ int label = lf++;
+ /* The call to print_slot will clobber the operands. */
+ rtx op0 = operands[0];
- /* If the instruction in the delay slot is annulled (true), then
- there is no delay slot where we can put it now. The only safe
- place for it is after the label. */
+ /* If the instruction in the delay slot is annulled (true), then
+ there is no delay slot where we can put it now. The only safe
+ place for it is after the label. final will do that by default. */
- if (final_sequence)
- {
- fprintf (asm_out_file, "\tb%c%s\tLF%d\n", logic ? 'f' : 't',
- INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence, 0, 0))
- ? "" : ".s", label);
- if (! INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence, 0, 0)))
- print_slot (final_sequence);
- }
- else
- fprintf (asm_out_file, "\tb%c\tLF%d\n", logic ? 'f' : 't', label);
+ if (final_sequence
+ && ! INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence, 0, 0)))
+ {
+ asm_fprintf (asm_out_file, "\tb%s%ss\t%LLF%d\n", logic ? "f" : "t",
+ ASSEMBLER_DIALECT ? "/" : ".", label);
+ print_slot (final_sequence);
+ }
+ else
+ asm_fprintf (asm_out_file, "\tb%s\t%LLF%d\n", logic ? "f" : "t", label);
- output_asm_insn ("bra %l0", &op0);
- fprintf (asm_out_file, "\tnop\n");
- fprintf (asm_out_file, "LF%d:\n", label);
+ output_asm_insn ("bra\t%l0", &op0);
+ fprintf (asm_out_file, "\tnop\n");
+ ASM_OUTPUT_INTERNAL_LABEL(asm_out_file, "LF", label);
- if (final_sequence
- && INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence, 0, 0)))
- print_slot (final_sequence);
- }
return "";
+ }
+ return logic ? "bt%.\t%l0" : "bf%.\t%l0";
+}
- case 16:
- /* A branch with an unfilled delay slot. */
- case 18:
- /* Branches a long way away. */
- {
- /* The call to print_slot will clobber the operands. */
- rtx op0 = operands[0];
-
- /* If the instruction in the delay slot is annulled (true), then
- there is no delay slot where we can put it now. The only safe
- place for it is after the label. */
+int branch_offset ();
- if (final_sequence)
- {
- fprintf (asm_out_file, "\tb%c%s\tLF%d\n", logic ? 'f' : 't',
- INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence, 0, 0))
- ? "" : ".s", label);
- if (! INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence, 0, 0)))
- print_slot (final_sequence);
- }
- else
- fprintf (asm_out_file, "\tb%c\tLF%d\n", logic ? 'f' : 't', label);
-
- output_far_jump (insn, op0);
- fprintf (asm_out_file, "LF%d:\n", label);
+char *
+output_branchy_insn (code, template, insn, operands)
+ char *template;
+ enum rtx_code code;
+ rtx insn;
+ rtx *operands;
+{
+ rtx next_insn = NEXT_INSN (insn);
+ int label_nr;
- if (final_sequence
- && INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence, 0, 0)))
- print_slot (final_sequence);
- }
- return "";
+ if (next_insn && GET_CODE (next_insn) == JUMP_INSN && condjump_p (next_insn))
+ {
+ rtx src = SET_SRC (PATTERN (next_insn));
+ if (GET_CODE (src) == IF_THEN_ELSE && GET_CODE (XEXP (src, 0)) != code)
+ {
+ /* Following branch not taken */
+ operands[9] = gen_label_rtx ();
+ emit_label_after (operands[9], next_insn);
+ return template;
+ }
+ else
+ {
+ int offset = branch_offset (next_insn) + 4;
+ if (offset >= -252 && offset <= 256)
+ {
+ if (GET_CODE (src) == IF_THEN_ELSE)
+ /* branch_true */
+ src = XEXP (src, 1);
+ operands[9] = src;
+ return template;
+ }
+ }
}
+ operands[9] = gen_label_rtx ();
+ emit_label_after (operands[9], insn);
+ return template;
+}
- abort ();
+char *
+output_ieee_ccmpeq (insn, operands)
+ rtx insn, operands;
+{
+ output_branchy_insn (NE, "bt\t%l9\\;fcmp/eq\t%1,%0", insn, operands);
}
/* Output to FILE the start of the assembler file. */
@@ -751,20 +797,15 @@ shiftcosts (x)
/* If shift by a non constant, then this will be expensive. */
if (GET_CODE (XEXP (x, 1)) != CONST_INT)
- {
- if (TARGET_SH3)
- return 2;
- /* If not an sh3 then we don't even have an instruction for it. */
- return 20;
- }
+ return SH_DYNAMIC_SHIFT_COST;
/* Otherwise, return the true cost in instructions. */
if (GET_CODE (x) == ASHIFTRT)
{
int cost = ashiftrt_insns[value];
/* If SH3, then we put the constant in a reg and use shad. */
- if (TARGET_SH3 && cost > 3)
- cost = 3;
+ if (cost > 1 + SH_DYNAMIC_SHIFT_COST)
+ cost = 1 + SH_DYNAMIC_SHIFT_COST;
return cost;
}
else
@@ -999,9 +1040,11 @@ expand_ashiftrt (operands)
emit_insn (gen_ashrsi3_d (operands[0], operands[1], count));
return 1;
}
- else if (ashiftrt_insns[INTVAL (operands[2])] > 3)
+ else if (ashiftrt_insns[INTVAL (operands[2]) & 31]
+ > 1 + SH_DYNAMIC_SHIFT_COST)
{
- rtx count = force_reg (SImode, GEN_INT (- INTVAL (operands[2])));
+ rtx count
+ = force_reg (SImode, GEN_INT (- (INTVAL (operands[2]) & 31)));
emit_insn (gen_ashrsi3_d (operands[0], operands[1], count));
return 1;
}
@@ -1009,7 +1052,7 @@ expand_ashiftrt (operands)
if (GET_CODE (operands[2]) != CONST_INT)
return 0;
- value = INTVAL (operands[2]);
+ value = INTVAL (operands[2]) & 31;
if (value == 31)
{
@@ -1050,6 +1093,12 @@ expand_ashiftrt (operands)
return 1;
}
+int sh_dynamicalize_shift_p (count)
+ rtx count;
+{
+ return shift_insns[INTVAL (count)] > 1 + SH_DYNAMIC_SHIFT_COST;
+}
+
/* Try to find a good way to implement the combiner pattern
[(set (match_operand:SI 0 "register_operand" "r")
(and:SI (ashift:SI (match_operand:SI 1 "register_operand" "r")
@@ -1434,7 +1483,7 @@ shl_sext_kind (left_rtx, size_rtx, costp)
if (TARGET_SH3)
{
/* Try to use a dynamic shift. */
- cost = shift_insns[32 - insize] + 3;
+ cost = shift_insns[32 - insize] + 1 + SH_DYNAMIC_SHIFT_COST;
if (cost < best_cost)
{
kind = 0;
@@ -1645,6 +1694,8 @@ typedef struct
static pool_node pool_vector[MAX_POOL_SIZE];
static int pool_size;
+static int max_uid_before_fixup_addr_diff_vecs;
+
/* ??? If we need a constant in HImode which is the truncated value of a
constant we need in SImode, we could combine the two entries thus saving
two bytes. Is this common enough to be worth the effort of implementing
@@ -1735,7 +1786,8 @@ dump_table (scan)
scan = emit_label_after (gen_label_rtx (), scan);
scan = emit_insn_after (gen_align_4 (), scan);
}
- scan = emit_label_after (p->label, scan);
+ if (p->label)
+ scan = emit_label_after (p->label, scan);
scan = emit_insn_after (gen_consttable_4 (p->value), scan);
break;
case DFmode:
@@ -1746,7 +1798,8 @@ dump_table (scan)
scan = emit_label_after (gen_label_rtx (), scan);
scan = emit_insn_after (gen_align_4 (), scan);
}
- scan = emit_label_after (p->label, scan);
+ if (p->label)
+ scan = emit_label_after (p->label, scan);
scan = emit_insn_after (gen_consttable_8 (p->value), scan);
break;
default:
@@ -1792,7 +1845,8 @@ broken_move (insn)
order bits end up as. */
&& GET_MODE (SET_DEST (pat)) != QImode
&& CONSTANT_P (SET_SRC (pat))
- && ! (GET_CODE (SET_SRC (pat)) == CONST_DOUBLE
+ && ! (TARGET_SH3E
+ && GET_CODE (SET_SRC (pat)) == CONST_DOUBLE
&& (fp_zero_operand (SET_SRC (pat))
|| fp_one_operand (SET_SRC (pat)))
&& GET_CODE (SET_DEST (pat)) == REG
@@ -1806,28 +1860,49 @@ broken_move (insn)
return 0;
}
+int
+cache_align_p (insn)
+ rtx insn;
+{
+ rtx pat;
+
+ if (! insn)
+ return 1;
+
+ if (GET_CODE (insn) != INSN)
+ return 0;
+
+ pat = PATTERN (insn);
+ return (GET_CODE (pat) == UNSPEC_VOLATILE
+ && XINT (pat, 1) == 1
+ && INTVAL (XVECEXP (pat, 0, 0)) == CACHE_LOG);
+}
+
+static int
+mova_p (insn)
+ rtx insn;
+{
+ return (GET_CODE (insn) == INSN
+ && GET_CODE (PATTERN (insn)) == SET
+ && GET_CODE (SET_SRC (PATTERN (insn))) == UNSPEC
+ && XINT (SET_SRC (PATTERN (insn)), 1) == 1);
+}
+
/* Find the last barrier from insn FROM which is close enough to hold the
constant pool. If we can't find one, then create one near the end of
the range. */
-/* ??? It would be good to put constant pool tables between a case jump and
- the jump table. This fails for two reasons. First, there is no
- barrier after the case jump. This is a bug in the casesi pattern.
- Second, inserting the table here may break the mova instruction that
- loads the jump table address, by moving the jump table too far away.
- We fix that problem by never outputting the constant pool between a mova
- and its label. */
-
static rtx
-find_barrier (from)
- rtx from;
+find_barrier (num_mova, mova, from)
+ int num_mova;
+ rtx mova, from;
{
int count_si = 0;
int count_hi = 0;
int found_hi = 0;
int found_si = 0;
- rtx found_barrier = 0;
- rtx found_mova = 0;
+ int leading_mova = num_mova;
+ rtx barrier_before_mova, found_barrier = 0, good_barrier = 0;
int si_limit;
int hi_limit;
@@ -1843,83 +1918,100 @@ find_barrier (from)
before the table, subtract 2 for the instruction that fills the jump
delay slot. This gives 1018. */
- /* If not optimizing, then it is possible that the jump instruction we add
- won't be shortened, and thus will have a length of 14 instead of 2.
- We must adjust the limits downwards to account for this, giving a limit
- of 1008 for SImode and 500 for HImode. */
+ /* The branch will always be shortened now that the reference address for
+ forward branches is the successor address, thus we need no longer make
+ adjustments to the [sh]i_limit for -O0. */
- if (optimize)
- {
- si_limit = 1018;
- hi_limit = 510;
- }
- else
- {
- si_limit = 1008;
- hi_limit = 500;
- }
-
- /* If not optimizing for space, then the constant pool will be
- aligned to a 4 to 16 byte boundary. We must make room for that
- alignment that by reducing the limits.
- ??? It would be better to not align the constant pool, but
- ASM_OUTPUT_ALIGN_CODE does not make any provision for basing the
- alignment on the instruction. */
-
- if (! TARGET_SMALLCODE)
- {
- if (TARGET_SH3 || TARGET_SH3E)
- {
- si_limit -= 14;
- hi_limit -= 14;
- }
- else
- {
- si_limit -= 2;
- hi_limit -= 2;
- }
- }
+ si_limit = 1018;
+ hi_limit = 510;
while (from && count_si < si_limit && count_hi < hi_limit)
{
- int inc = get_attr_length (from);
+ int inc = 0;
+
+ /* The instructions created by fixup_addr_diff_vecs have no valid length
+ info yet. They should be considered to have zero at this point. */
+ if (INSN_UID (from) < max_uid_before_fixup_addr_diff_vecs)
+ inc = get_attr_length (from);
if (GET_CODE (from) == BARRIER)
- found_barrier = from;
+ {
+ found_barrier = from;
+ /* If we are at the end of the function, or in front of an alignment
+ instruction, we need not insert an extra alignment. We prefer
+ this kind of barrier. */
+
+ if (cache_align_p (next_real_insn (found_barrier)))
+ good_barrier = from;
+ }
if (broken_move (from))
{
- rtx pat = PATTERN (from);
- rtx src = SET_SRC (pat);
- rtx dst = SET_DEST (pat);
- enum machine_mode mode = GET_MODE (dst);
+ rtx pat, src, dst;
+ enum machine_mode mode;
+
+ pat = PATTERN (from);
+ if (GET_CODE (pat) == PARALLEL)
+ pat = XVECEXP (pat, 0, 0);
+ src = SET_SRC (pat);
+ dst = SET_DEST (pat);
+ mode = GET_MODE (dst);
/* We must explicitly check the mode, because sometimes the
front end will generate code to load unsigned constants into
HImode targets without properly sign extending them. */
if (mode == HImode || (mode == SImode && hi_const (src)))
{
- found_hi = 1;
+ found_hi += 2;
/* We put the short constants before the long constants, so
we must count the length of short constants in the range
for the long constants. */
/* ??? This isn't optimal, but is easy to do. */
- if (found_si)
- count_si += 2;
+ si_limit -= 2;
}
else
- found_si = 1;
+ {
+ if (found_si > count_si)
+ count_si = found_si;
+ found_si += GET_MODE_SIZE (mode);
+ if (num_mova)
+ si_limit -= GET_MODE_SIZE (mode);
+ }
}
if (GET_CODE (from) == INSN
&& GET_CODE (PATTERN (from)) == SET
&& GET_CODE (SET_SRC (PATTERN (from))) == UNSPEC
&& XINT (SET_SRC (PATTERN (from)), 1) == 1)
- found_mova = from;
+ {
+ if (! num_mova++)
+ {
+ leading_mova = 0;
+ mova = from;
+ barrier_before_mova = good_barrier ? good_barrier : found_barrier;
+ }
+ if (found_si > count_si)
+ count_si = found_si;
+ }
else if (GET_CODE (from) == JUMP_INSN
&& (GET_CODE (PATTERN (from)) == ADDR_VEC
|| GET_CODE (PATTERN (from)) == ADDR_DIFF_VEC))
- found_mova = 0;
+ {
+ if (num_mova)
+ num_mova--;
+ if (cache_align_p (NEXT_INSN (next_nonnote_insn (from))))
+ {
+ /* We have just passed the barrier in front front of the
+ ADDR_DIFF_VEC. Since the ADDR_DIFF_VEC is accessed
+ as data, just like our pool constants, this is a good
+ opportunity to accommodate what we have gathered so far.
+ If we waited any longer, we could end up at a barrier in
+ front of code, which gives worse cache usage for separated
+ instruction / data caches. */
+ good_barrier = found_barrier;
+ break;
+ }
+ }
if (found_si)
count_si += inc;
@@ -1928,12 +2020,42 @@ find_barrier (from)
from = NEXT_INSN (from);
}
- /* Insert the constant pool table before the mova instruction, to prevent
- the mova label reference from going out of range. */
- if (found_mova)
- from = found_mova;
+ if (num_mova)
+ if (leading_mova)
+ {
+ /* Try as we might, the leading mova is out of range. Change
+ it into a load (which will become a pcload) and retry. */
+ SET_SRC (PATTERN (mova)) = XVECEXP (SET_SRC (PATTERN (mova)), 0, 0);
+ INSN_CODE (mova) = -1;
+ return find_barrier (0, 0, mova);
+ }
+ else
+ {
+ /* Insert the constant pool table before the mova instruction,
+ to prevent the mova label reference from going out of range. */
+ from = mova;
+ good_barrier = found_barrier = barrier_before_mova;
+ }
- if (! found_barrier)
+ if (found_barrier)
+ {
+ /* We have before prepared barriers to come in pairs, with an
+ alignment instruction in-between. We want to use the first
+ barrier, so that the alignment applies to the code.
+ If we are compiling for SH3 or newer, there are some exceptions
+ when the second barrier and the alignment doesn't exist yet, so
+ we have to add it. */
+ if (good_barrier)
+ found_barrier = good_barrier;
+ else if (! TARGET_SMALLCODE)
+ {
+ found_barrier
+ = emit_insn_before (gen_align_log (GEN_INT (CACHE_LOG)),
+ found_barrier);
+ found_barrier = emit_barrier_before (found_barrier);
+ }
+ }
+ else
{
/* We didn't find a barrier in time to dump our stuff,
so we'll make one. */
@@ -1961,6 +2083,11 @@ find_barrier (from)
LABEL_NUSES (label) = 1;
found_barrier = emit_barrier_after (from);
emit_label_after (label, found_barrier);
+ if (! TARGET_SMALLCODE)
+ {
+ emit_barrier_after (found_barrier);
+ emit_insn_after (gen_align_log (GEN_INT (CACHE_LOG)), found_barrier);
+ }
}
return found_barrier;
@@ -1970,7 +2097,7 @@ find_barrier (from)
positively find the register that is used to call the sfunc, and this
register is not used anywhere else in this instruction - except as the
destination of a set, return this register; else, return 0. */
-static rtx
+rtx
sfunc_uses_reg (insn)
rtx insn;
{
@@ -1986,7 +2113,7 @@ sfunc_uses_reg (insn)
for (reg_part = 0, i = XVECLEN (pattern, 0) - 1; i >= 1; i--)
{
part = XVECEXP (pattern, 0, i);
- if (GET_CODE (part) == USE)
+ if (GET_CODE (part) == USE && GET_MODE (XEXP (part, 0)) == SImode)
reg_part = part;
}
if (! reg_part)
@@ -2092,6 +2219,480 @@ noncall_uses_reg (reg, insn, set)
return 0;
}
+/* Given a X, a pattern of an insn or a part of it, return a mask of used
+ general registers. Bits 0..15 mean that the respective registers
+ are used as inputs in the instruction. Bits 16..31 mean that the
+ registers 0..15, respectively, are used as outputs, or are clobbered.
+ IS_DEST should be set to 16 if X is the destination of a SET, else to 0. */
+int
+regs_used (x, is_dest)
+ rtx x; int is_dest;
+{
+ enum rtx_code code;
+ char *fmt;
+ int i, used = 0;
+
+ if (! x)
+ return used;
+ code = GET_CODE (x);
+ switch (code)
+ {
+ case REG:
+ if (REGNO (x) < 16)
+ return (((1 << HARD_REGNO_NREGS (0, GET_MODE (x))) - 1)
+ << (REGNO (x) + is_dest));
+ return 0;
+ case SUBREG:
+ {
+ rtx y = SUBREG_REG (x);
+
+ if (GET_CODE (y) != REG)
+ break;
+ if (REGNO (y) < 16)
+ return (((1 << HARD_REGNO_NREGS (0, GET_MODE (x))) - 1)
+ << (REGNO (y) + SUBREG_WORD (x) + is_dest));
+ return 0;
+ }
+ case SET:
+ return regs_used (SET_SRC (x), 0) | regs_used (SET_DEST (x), 16);
+ case RETURN:
+ /* If there was a return value, it must have been indicated with USE. */
+ return 0x00ffff00;
+ case CLOBBER:
+ is_dest = 1;
+ break;
+ case MEM:
+ is_dest = 0;
+ break;
+ case CALL:
+ used |= 0x00ff00f0;
+ break;
+ }
+
+ fmt = GET_RTX_FORMAT (code);
+
+ for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
+ {
+ if (fmt[i] == 'E')
+ {
+ register int j;
+ for (j = XVECLEN (x, i) - 1; j >= 0; j--)
+ used |= regs_used (XVECEXP (x, i, j), is_dest);
+ }
+ else if (fmt[i] == 'e')
+ used |= regs_used (XEXP (x, i), is_dest);
+ }
+ return used;
+}
+
+/* Create an instruction that prevents redirection of a conditional branch
+ to the destination of the JUMP with address ADDR.
+ If the branch needs to be implemented as an indirect jump, try to find
+ a scratch register for it.
+ If NEED_BLOCK is 0, don't do anything unless we need a scratch register.
+ If any preceding insn that doesn't fit into a delay slot is good enough,
+ pass 1. Pass 2 if a definite blocking insn is needed.
+ -1 is used internally to avoid deep recursion.
+ If a blocking instruction is made or recognized, return it. */
+
+static rtx
+gen_block_redirect (jump, addr, need_block)
+ rtx jump;
+ int addr, need_block;
+{
+ int dead = 0;
+ rtx prev = prev_nonnote_insn (jump);
+ rtx dest;
+
+ /* First, check if we already have an instruction that satisfies our need. */
+ if (prev && GET_CODE (prev) == INSN && ! INSN_DELETED_P (prev))
+ {
+ if (INSN_CODE (prev) == CODE_FOR_indirect_jump_scratch)
+ return prev;
+ if (GET_CODE (PATTERN (prev)) == USE
+ || GET_CODE (PATTERN (prev)) == CLOBBER
+ || get_attr_in_delay_slot (prev) == IN_DELAY_SLOT_YES)
+ prev = jump;
+ else if ((need_block &= ~1) < 0)
+ return prev;
+ else if (recog_memoized (prev) == CODE_FOR_block_branch_redirect)
+ need_block = 0;
+ }
+ /* We can't use JUMP_LABEL here because it might be undefined
+ when not optimizing. */
+ dest = XEXP (SET_SRC (PATTERN (jump)), 0);
+ /* If the branch is out of range, try to find a scratch register for it. */
+ if (optimize
+ && (insn_addresses[INSN_UID (dest)] - addr + 4092U > 4092 + 4098))
+ {
+ rtx scan;
+ /* Don't look for the stack pointer as a scratch register,
+ it would cause trouble if an interrupt occurred. */
+ unsigned try = 0x7fff, used;
+ int jump_left = flag_expensive_optimizations + 1;
+
+ /* It is likely that the most recent eligible instruction is wanted for
+ the delay slot. Therefore, find out which registers it uses, and
+ try to avoid using them. */
+
+ for (scan = jump; scan = PREV_INSN (scan); )
+ {
+ enum rtx_code code;
+
+ if (INSN_DELETED_P (scan))
+ continue;
+ code = GET_CODE (scan);
+ if (code == CODE_LABEL || code == JUMP_INSN)
+ break;
+ if (code == INSN
+ && GET_CODE (PATTERN (scan)) != USE
+ && GET_CODE (PATTERN (scan)) != CLOBBER
+ && get_attr_in_delay_slot (scan) == IN_DELAY_SLOT_YES)
+ {
+ try &= ~regs_used (PATTERN (scan), 0);
+ break;
+ }
+ }
+ for (used = dead = 0, scan = JUMP_LABEL (jump); scan = NEXT_INSN (scan); )
+ {
+ enum rtx_code code;
+
+ if (INSN_DELETED_P (scan))
+ continue;
+ code = GET_CODE (scan);
+ if (GET_RTX_CLASS (code) == 'i')
+ {
+ used |= regs_used (PATTERN (scan), 0);
+ if (code == CALL_INSN)
+ used |= regs_used (CALL_INSN_FUNCTION_USAGE (scan), 0);
+ dead |= (used >> 16) & ~used;
+ if (dead & try)
+ {
+ dead &= try;
+ break;
+ }
+ if (code == JUMP_INSN)
+ if (jump_left-- && simplejump_p (scan))
+ scan = JUMP_LABEL (scan);
+ else
+ break;
+ }
+ }
+ /* Mask out the stack pointer again, in case it was
+ the only 'free' register we have found. */
+ dead &= 0x7fff;
+ }
+ /* If the immediate destination is still in range, check for possible
+ threading with a jump beyond the delay slot insn.
+ Don't check if we are called recursively; the jump has been or will be
+ checked in a different invocation then. */
+
+ else if (optimize && need_block >= 0)
+ {
+ rtx next = next_active_insn (next_active_insn (dest));
+ if (next && GET_CODE (next) == JUMP_INSN
+ && GET_CODE (PATTERN (next)) == SET
+ && recog_memoized (next) == CODE_FOR_jump)
+ {
+ dest = JUMP_LABEL (next);
+ if (dest
+ && insn_addresses[INSN_UID (dest)] - addr + 4092U > 4092 + 4098)
+ gen_block_redirect (next, insn_addresses[INSN_UID (next)], -1);
+ }
+ }
+
+ if (dead)
+ {
+ rtx reg = gen_rtx (REG, SImode, exact_log2 (dead & -dead));
+
+ /* It would be nice if we could convert the jump into an indirect
+ jump / far branch right now, and thus exposing all constituent
+ instructions to further optimization. However, reorg uses
+ simplejump_p to determine if there is an unconditional jump where
+ it should try to schedule instructions from the target of the
+ branch; simplejump_p fails for indirect jumps even if they have
+ a JUMP_LABEL. */
+ rtx insn = emit_insn_before (gen_indirect_jump_scratch
+ (reg, GEN_INT (INSN_UID (JUMP_LABEL (jump))))
+ , jump);
+ INSN_CODE (insn) = CODE_FOR_indirect_jump_scratch;
+ return insn;
+ }
+ else if (need_block)
+ /* We can't use JUMP_LABEL here because it might be undefined
+ when not optimizing. */
+ return emit_insn_before (gen_block_branch_redirect
+ (GEN_INT (INSN_UID (XEXP (SET_SRC (PATTERN (jump)), 0))))
+ , jump);
+ return prev;
+}
+
+#define CONDJUMP_MIN -252
+#define CONDJUMP_MAX 262
+struct far_branch
+{
+ /* A label (to be placed) in front of the jump
+ that jumps to our ultimate destination. */
+ rtx near_label;
+ /* Where we are going to insert it if we cannot move the jump any farther,
+ or the jump itself if we have picked up an existing jump. */
+ rtx insert_place;
+ /* The ultimate destination. */
+ rtx far_label;
+ struct far_branch *prev;
+ /* If the branch has already been created, its address;
+ else the address of its first prospective user. */
+ int address;
+};
+
+enum mdep_reorg_phase_e mdep_reorg_phase;
+void
+gen_far_branch (bp)
+ struct far_branch *bp;
+{
+ rtx insn = bp->insert_place;
+ rtx jump;
+ rtx label = gen_label_rtx ();
+
+ emit_label_after (label, insn);
+ if (bp->far_label)
+ {
+ jump = emit_jump_insn_after (gen_jump (bp->far_label), insn);
+ LABEL_NUSES (bp->far_label)++;
+ }
+ else
+ jump = emit_jump_insn_after (gen_return (), insn);
+ emit_label_after (bp->near_label, insn);
+ JUMP_LABEL (jump) = bp->far_label;
+ if (! invert_jump (insn, label))
+ abort ();
+ /* Prevent reorg from undoing our splits. */
+ gen_block_redirect (jump, bp->address += 2, 2);
+}
+
+static void
+fixup_aligns ()
+{
+ rtx insn = get_last_insn ();
+ rtx align_tab[MAX_BITS_PER_WORD];
+ int i;
+
+ for (i = CACHE_LOG; i >= 0; i--)
+ align_tab[i] = insn;
+ bzero ((char *) uid_align, uid_align_max * sizeof *uid_align);
+ for (; insn; insn = PREV_INSN (insn))
+ {
+ int uid = INSN_UID (insn);
+ if (uid < uid_align_max)
+ uid_align[uid] = align_tab[1];
+ if (GET_CODE (insn) == INSN)
+ {
+ rtx pat = PATTERN (insn);
+ if (GET_CODE (pat) == UNSPEC_VOLATILE && XINT (pat, 1) == 1)
+ {
+ /* Found an alignment instruction. */
+ int log = INTVAL (XVECEXP (pat, 0, 0));
+ uid_align[uid] = align_tab[log];
+ for (i = log - 1; i >= 0; i--)
+ align_tab[i] = insn;
+ }
+ }
+ else if (GET_CODE (insn) == JUMP_INSN
+ && GET_CODE (PATTERN (insn)) == SET)
+ {
+ rtx dest = SET_SRC (PATTERN (insn));
+ if (GET_CODE (dest) == IF_THEN_ELSE)
+ dest = XEXP (dest, 1);
+ if (GET_CODE (dest) == LABEL_REF)
+ {
+ dest = XEXP (dest, 0);
+ if (! uid_align[INSN_UID (dest)])
+ /* Mark backward branch. */
+ uid_align[uid] = 0;
+ }
+ }
+ }
+}
+
+/* Fix up ADDR_DIFF_VECs. */
+void
+fixup_addr_diff_vecs (first)
+ rtx first;
+{
+ rtx insn;
+ int max_address;
+ int need_fixup_aligns = 0;
+
+ if (optimize)
+ max_address = insn_addresses[INSN_UID (get_last_insn ())] + 2;
+ for (insn = first; insn; insn = NEXT_INSN (insn))
+ {
+ rtx vec_lab, rel_lab, pat, min_lab, max_lab, adj;
+ int len, i, min, max, size;
+
+ if (GET_CODE (insn) != JUMP_INSN
+ || GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC)
+ continue;
+ pat = PATTERN (insn);
+ rel_lab = vec_lab = XEXP (XEXP (pat, 0), 0);
+ if (TARGET_SH2)
+ {
+ rtx prev, prevpat, x;
+
+ /* Search the matching casesi_jump_2. */
+ for (prev = vec_lab; ; prev = PREV_INSN (prev))
+ {
+ if (GET_CODE (prev) != JUMP_INSN)
+ continue;
+ prevpat = PATTERN (prev);
+ if (GET_CODE (prevpat) != PARALLEL || XVECLEN (prevpat, 0) != 2)
+ continue;
+ x = XVECEXP (prevpat, 0, 1);
+ if (GET_CODE (x) != USE)
+ continue;
+ x = XEXP (x, 0);
+ if (GET_CODE (x) == LABEL_REF && XEXP (x, 0) == vec_lab)
+ break;
+ }
+ /* Fix up the ADDR_DIF_VEC to be relative
+ to the reference address of the braf. */
+ XEXP (XEXP (pat, 0), 0)
+ = rel_lab = XEXP (XEXP (SET_SRC (XVECEXP (prevpat, 0, 0)), 1), 0);
+ }
+ if (! optimize)
+ continue;
+ len = XVECLEN (pat, 1);
+ if (len <= 0)
+ abort ();
+ for (min = max_address, max = 0, i = len - 1; i >= 0; i--)
+ {
+ rtx lab = XEXP (XVECEXP (pat, 1, i), 0);
+ int addr = insn_addresses[INSN_UID (lab)];
+ if (addr < min)
+ {
+ min = addr;
+ min_lab = lab;
+ }
+ if (addr > max)
+ {
+ max = addr;
+ max_lab = lab;
+ }
+ }
+ adj
+ = emit_insn_before (gen_addr_diff_vec_adjust (min_lab, max_lab, rel_lab,
+ GEN_INT (len)), vec_lab);
+ size = (XVECLEN (pat, 1) * GET_MODE_SIZE (GET_MODE (pat))
+ - addr_diff_vec_adjust (adj, 0));
+ /* If this is a very small table, we want to remove the alignment after
+ the table. */
+ if (! TARGET_SMALLCODE && size <= 1 << (CACHE_LOG - 2))
+ {
+ rtx align = NEXT_INSN (next_nonnote_insn (insn));
+ PUT_CODE (align, NOTE);
+ NOTE_LINE_NUMBER (align) = NOTE_INSN_DELETED;
+ NOTE_SOURCE_FILE (align) = 0;
+ need_fixup_aligns = 1;
+ }
+ }
+ if (need_fixup_aligns)
+ fixup_aligns ();
+}
+
+/* Say how much the ADDR_DIFF_VEC following INSN can be shortened.
+ If FIRST_PASS is nonzero, all addresses and length of following
+ insns are still uninitialized. */
+int
+addr_diff_vec_adjust (insn, first_pass)
+ rtx insn;
+ int first_pass;
+{
+ rtx pat = PATTERN (insn);
+ rtx min_lab = XEXP (XVECEXP (pat, 0, 0), 0);
+ rtx max_lab = XEXP (XVECEXP (pat, 0, 1), 0);
+ rtx rel_lab = XEXP (XVECEXP (pat, 0, 2), 0);
+ int len = INTVAL (XVECEXP (pat, 0, 3));
+ int addr, min_addr, max_addr, saving, prev_saving = 0, offset;
+ rtx align_insn = uid_align[INSN_UID (rel_lab)];
+ int standard_size = TARGET_BIGTABLE ? 4 : 2;
+ int last_size = GET_MODE_SIZE ( GET_MODE(pat));
+ int align_fuzz = 0;
+
+ if (! insn_addresses)
+ return 0;
+ if (first_pass)
+ /* If optimizing, we may start off with an optimistic guess. */
+ return optimize ? len & ~1 : 0;
+ addr = insn_addresses[INSN_UID (rel_lab)];
+ min_addr = insn_addresses[INSN_UID (min_lab)];
+ max_addr = insn_addresses[INSN_UID (max_lab)];
+ if (! last_size)
+ last_size = standard_size;
+ if (TARGET_SH2)
+ prev_saving = ((standard_size - last_size) * len) & ~1;
+
+ /* The savings are linear to the vector length. However, if we have an
+ odd saving, we need one byte again to reinstate 16 bit alignment. */
+ saving = ((standard_size - 1) * len) & ~1;
+ offset = prev_saving - saving;
+
+ if ((insn_addresses[INSN_UID (align_insn)] < max_addr
+ || (insn_addresses[INSN_UID (align_insn)] == max_addr
+ && next_real_insn (max_lab) != align_insn))
+ && GET_CODE (align_insn) == INSN)
+ {
+ int align = 1 << INTVAL (XVECEXP (PATTERN (align_insn), 0, 0));
+ int align_addr = insn_addresses[INSN_UID (align_insn)];
+ if (align_addr > insn_addresses[INSN_UID (insn)])
+ {
+ int old_offset = offset;
+ offset = (align_addr - 1 & align - 1) + offset & -align;
+ align_addr += old_offset;
+ }
+ align_fuzz += (align_addr - 1) & (align - 2);
+ align_insn = uid_align[INSN_UID (align_insn)];
+ if (insn_addresses[INSN_UID (align_insn)] <= max_addr
+ && GET_CODE (align_insn) == INSN)
+ {
+ int align2 = 1 << INTVAL (XVECEXP (PATTERN (align_insn), 0, 0));
+ align_addr = insn_addresses[INSN_UID (align_insn)];
+ if (align_addr > insn_addresses[INSN_UID (insn)])
+ {
+ int old_offset = offset;
+ offset = (align_addr - 1 & align2 - 1) + offset & -align2;
+ align_addr += old_offset;
+ }
+ align_fuzz += (align_addr - 1) & (align2 - align);
+ }
+ }
+
+ if (min_addr >= addr
+ && max_addr + offset - addr + align_fuzz <= 255)
+ {
+ PUT_MODE (pat, QImode);
+ return saving;
+ }
+ saving = 2 * len;
+/* Since alignment might play a role in min_addr if it is smaller than addr,
+ we may not use it without exact alignment compensation; a 'worst case'
+ estimate is not good enough, because it won't prevent infinite oscillation
+ of shorten_branches.
+ ??? We should fix that eventually, but the code to deal with alignments
+ should go in a new function. */
+#if 0
+ if (TARGET_BIGTABLE && min_addr - ((1 << CACHE_LOG) - 2) - addr >= -32768
+#else
+ if (TARGET_BIGTABLE && (min_addr >= addr || addr <= 32768)
+#endif
+ && max_addr - addr <= 32767 + saving - prev_saving)
+ {
+ PUT_MODE (pat, HImode);
+ return saving;
+ }
+ PUT_MODE (pat, TARGET_BIGTABLE ? SImode : HImode);
+ return 0;
+}
+
/* Exported to toplev.c.
Do a final pass over the function, just before delayed branch
@@ -2101,7 +2702,10 @@ void
machine_dependent_reorg (first)
rtx first;
{
- rtx insn;
+ rtx insn, mova;
+ int num_mova;
+ rtx r0_rtx = gen_rtx (REG, Pmode, 0);
+ rtx r0_inc_rtx = gen_rtx (POST_INC, Pmode, r0_rtx);
/* If relaxing, generate pseudo-ops to associate function calls with
the symbols they call. It does no harm to not generate these
@@ -2109,6 +2713,7 @@ machine_dependent_reorg (first)
linker to potentially relax the jsr to a bsr, and eliminate the
register load and, possibly, the constant pool entry. */
+ mdep_reorg_phase = SH_INSERT_USES_LABELS;
if (TARGET_RELAX)
{
/* Remove all REG_LABEL notes. We want to use them for our own
@@ -2330,21 +2935,178 @@ machine_dependent_reorg (first)
}
}
+ /* The following processing passes need length information.
+ addr_diff_vec_adjust needs to know if insn_addresses is valid. */
+ insn_addresses = 0;
+
+ /* If not optimizing for space, we want extra alignment for code after
+ a barrier, so that it starts on a word / cache line boundary.
+ We used to emit the alignment for the barrier itself and associate the
+ instruction length with the following instruction, but that had two
+ problems:
+ i) A code label that follows directly after a barrier gets too low an
+ address. When there is a forward branch to it, the incorrect distance
+ calculation can lead to out of range branches. That happened with
+ compile/920625-2 -O -fomit-frame-pointer in copyQueryResult.
+ ii) barriers before constant tables get the extra alignment too.
+ That is just a waste of space.
+
+ So what we do now is to insert align_* instructions after the
+ barriers. By doing that before literal tables are generated, we
+ don't have to care about these. */
+ /* We also want alignment in front of ADDR_DIFF_VECs; this is done already
+ by ASM_OUTPUT_CASE_LABEL, but when optimizing, we have to make it
+ explicit in the RTL in order to correctly shorten branches. */
+
+ if (optimize)
+ for (insn = first; insn; insn = NEXT_INSN (insn))
+ {
+ rtx addr_diff_vec;
+
+ if (GET_CODE (insn) == BARRIER
+ && (addr_diff_vec = next_real_insn (insn)))
+ if (GET_CODE (PATTERN (addr_diff_vec)) == ADDR_DIFF_VEC)
+ emit_insn_before (gen_align_4 (),
+ XEXP (XEXP (PATTERN (addr_diff_vec), 0), 0));
+ else if (TARGET_SMALLCODE)
+ continue;
+ else if (TARGET_SH3)
+ {
+ /* We align for an entire cache line. If there is a immediately
+ preceding branch to the insn beyond the barrier, it does not
+ make sense to insert the align, because we are more likely
+ to discard useful information from the current cache line
+ when doing the align than to fetch unneeded insns when not. */
+ rtx prev = prev_real_insn (prev_real_insn (insn));
+ int slot, credit;
+
+ for (slot = 2, credit = 1 << (CACHE_LOG - 2) + 2;
+ credit >= 0 && prev && GET_CODE (prev) == INSN;
+ prev = prev_real_insn (prev))
+ {
+ if (GET_CODE (PATTERN (prev)) == USE
+ || GET_CODE (PATTERN (prev)) == CLOBBER)
+ continue;
+ if (slot &&
+ get_attr_in_delay_slot (prev) == IN_DELAY_SLOT_YES)
+ slot = 0;
+ credit -= get_attr_length (prev);
+ }
+ if (! prev || GET_CODE (prev) != JUMP_INSN
+ || (next_real_insn (JUMP_LABEL (prev))
+ != next_real_insn (insn))
+ || (credit - slot
+ < (GET_CODE (SET_SRC (PATTERN (prev))) == PC ? 2 : 0)))
+ {
+ insn = emit_insn_after (gen_align_log (GEN_INT (CACHE_LOG)),
+ insn);
+ insn = emit_barrier_after (insn);
+ }
+ }
+ else
+ {
+ insn = emit_insn_after (gen_align_4 (), insn);
+ insn = emit_barrier_after (insn);
+ }
+ else if (TARGET_SMALLCODE)
+ continue;
+ else if (GET_CODE (insn) == NOTE
+ && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG)
+ {
+ rtx next = next_nonnote_insn (insn);
+ if (next && GET_CODE (next) == CODE_LABEL)
+ emit_insn_after (gen_align_4 (), insn);
+ }
+ }
+
+ /* If TARGET_IEEE, we might have to split some branches before fixup_align.
+ If optimizing, the double call to shorten_branches will split insns twice,
+ unless we split now all that is to split and delete the original insn. */
+ if (TARGET_IEEE || optimize)
+ for (insn = NEXT_INSN (first); insn; insn = NEXT_INSN (insn))
+ if (GET_RTX_CLASS (GET_CODE (insn)) == 'i' && ! INSN_DELETED_P (insn))
+ {
+ rtx old = insn;
+ insn = try_split (PATTERN (insn), insn, 1);
+ if (INSN_DELETED_P (old))
+ {
+ PUT_CODE (old, NOTE);
+ NOTE_LINE_NUMBER (old) = NOTE_INSN_DELETED;
+ NOTE_SOURCE_FILE (old) = 0;
+ }
+ }
+
+ max_uid_before_fixup_addr_diff_vecs = get_max_uid ();
+
+ if (optimize)
+ {
+ uid_align_max = get_max_uid ();
+ uid_align = (rtx *) alloca (uid_align_max * sizeof *uid_align);
+ fixup_aligns ();
+ mdep_reorg_phase = SH_SHORTEN_BRANCHES0;
+ shorten_branches (first);
+ }
+ fixup_addr_diff_vecs (first);
/* Scan the function looking for move instructions which have to be
changed to pc-relative loads and insert the literal tables. */
- for (insn = first; insn; insn = NEXT_INSN (insn))
+ mdep_reorg_phase = SH_FIXUP_PCLOAD;
+ for (insn = first, num_mova = 0; insn; insn = NEXT_INSN (insn))
{
+ if (mova_p (insn))
+ {
+ if (! num_mova++)
+ mova = insn;
+ }
+ else if (GET_CODE (insn) == JUMP_INSN
+ && GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC
+ && num_mova)
+ {
+ rtx scan;
+ int total;
+
+ num_mova--;
+
+ /* Some code might have been inserted between the mova and
+ its ADDR_DIFF_VEC. Check if the mova is still in range. */
+ for (scan = mova, total = 0; scan != insn; scan = NEXT_INSN (scan))
+ if (INSN_UID (scan) < max_uid_before_fixup_addr_diff_vecs)
+ total += get_attr_length (scan);
+
+ /* range of mova is 1020, add 4 because pc counts from address of
+ second instruction after this one, subtract 2 in case pc is 2
+ byte aligned. Possible alignment needed for the ADDR_DIFF_VEC
+ cancels out with alignment effects of the mova itself. */
+ if (total > 1022)
+ {
+ /* Change the mova into a load, and restart scanning
+ there. broken_move will then return true for mova. */
+ SET_SRC (PATTERN (mova))
+ = XVECEXP (SET_SRC (PATTERN (mova)), 0, 0);
+ INSN_CODE (mova) = -1;
+ insn = mova;
+ }
+ }
if (broken_move (insn))
{
rtx scan;
/* Scan ahead looking for a barrier to stick the constant table
behind. */
- rtx barrier = find_barrier (insn);
+ rtx barrier = find_barrier (num_mova, mova, insn);
+ rtx last_float_move, last_float = 0, *last_float_addr;
+ if (num_mova && ! mova_p (mova))
+ {
+ /* find_barrier had to change the first mova into a
+ pcload; thus, we have to start with this new pcload. */
+ insn = mova;
+ num_mova = 0;
+ }
/* Now find all the moves between the points and modify them. */
for (scan = insn; scan != barrier; scan = NEXT_INSN (scan))
{
+ if (GET_CODE (scan) == CODE_LABEL)
+ last_float = 0;
if (broken_move (scan))
{
rtx *patp = &PATTERN (scan), pat = *patp;
@@ -2373,17 +3135,306 @@ machine_dependent_reorg (first)
dst = gen_rtx (REG, HImode, REGNO (dst) + offset);
}
- lab = add_constant (src, mode);
- newsrc = gen_rtx (MEM, mode,
- gen_rtx (LABEL_REF, VOIDmode, lab));
+ if (GET_CODE (dst) == REG
+ && ((REGNO (dst) >= FIRST_FP_REG
+ && REGNO (dst) <= LAST_FP_REG)
+ || REGNO (dst) == FPUL_REG))
+ {
+ if (last_float
+ && reg_set_between_p (r0_rtx, last_float_move, scan))
+ last_float = 0;
+ lab = add_constant (src, mode, last_float);
+ if (lab)
+ emit_insn_before (gen_mova (lab), scan);
+ else
+ *last_float_addr = r0_inc_rtx;
+ last_float_move = scan;
+ last_float = src;
+ newsrc = gen_rtx (MEM, mode,
+ (REGNO (dst) == FPUL_REG
+ ? r0_inc_rtx
+ : r0_rtx));
+ last_float_addr = &XEXP (newsrc, 0);
+ }
+ else
+ {
+ lab = add_constant (src, mode, 0);
+ newsrc = gen_rtx (MEM, mode,
+ gen_rtx (LABEL_REF, VOIDmode, lab));
+ }
RTX_UNCHANGING_P (newsrc) = 1;
*patp = gen_rtx (SET, VOIDmode, dst, newsrc);
INSN_CODE (scan) = -1;
}
}
dump_table (barrier);
+ insn = barrier;
}
}
+
+ mdep_reorg_phase = SH_SHORTEN_BRANCHES1;
+ insn_addresses = 0;
+ split_branches (first);
+
+ /* The INSN_REFERENCES_ARE_DELAYED in sh.h is problematic because it
+ also has an effect on the register that holds the address of the sfunc.
+ Insert an extra dummy insn in front of each sfunc that pretends to
+ use this register. */
+ if (flag_delayed_branch)
+ {
+ for (insn = first; insn; insn = NEXT_INSN (insn))
+ {
+ rtx reg = sfunc_uses_reg (insn);
+
+ if (! reg)
+ continue;
+ emit_insn_before (gen_use_sfunc_addr (reg), insn);
+ }
+ }
+ mdep_reorg_phase = SH_AFTER_MDEP_REORG;
+}
+
+int
+get_dest_uid (label, max_uid)
+ rtx label;
+ int max_uid;
+{
+ rtx dest = next_real_insn (label);
+ int dest_uid;
+ if (! dest)
+ /* This can happen for an undefined label. */
+ return 0;
+ dest_uid = INSN_UID (dest);
+ /* If this is a newly created branch redirection blocking instruction,
+ we cannot index the branch_uid or insn_addresses arrays with its
+ uid. But then, we won't need to, because the actual destination is
+ the following branch. */
+ while (dest_uid >= max_uid)
+ {
+ dest = NEXT_INSN (dest);
+ dest_uid = INSN_UID (dest);
+ }
+ if (GET_CODE (dest) == JUMP_INSN && GET_CODE (PATTERN (dest)) == RETURN)
+ return 0;
+ return dest_uid;
+}
+
+/* Split condbranches that are out of range. Also add clobbers for
+ scratch registers that are needed in far jumps.
+ We do this before delay slot scheduling, so that it can take our
+ newly created instructions into account. It also allows us to
+ find branches with common targets more easily. */
+
+static void
+split_branches (first)
+ rtx first;
+{
+ rtx insn;
+ struct far_branch **uid_branch, *far_branch_list = 0;
+ int max_uid = get_max_uid ();
+
+ /* Find out which branches are out of range. */
+ uid_align_max = get_max_uid ();
+ uid_align = (rtx *) alloca (uid_align_max * sizeof *uid_align);
+ fixup_aligns ();
+ shorten_branches (first);
+
+ uid_branch = (struct far_branch **) alloca (max_uid * sizeof *uid_branch);
+ bzero ((char *) uid_branch, max_uid * sizeof *uid_branch);
+
+ for (insn = first; insn; insn = NEXT_INSN (insn))
+ if (GET_RTX_CLASS (GET_CODE (insn)) != 'i')
+ continue;
+ else if (INSN_DELETED_P (insn))
+ {
+ /* Shorten_branches would split this instruction again,
+ so transform it into a note. */
+ PUT_CODE (insn, NOTE);
+ NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
+ NOTE_SOURCE_FILE (insn) = 0;
+ }
+ else if (GET_CODE (insn) == JUMP_INSN
+ /* Don't mess with ADDR_DIFF_VEC */
+ && (GET_CODE (PATTERN (insn)) == SET
+ || GET_CODE (PATTERN (insn)) == RETURN))
+ {
+ enum attr_type type = get_attr_type (insn);
+ if (type == TYPE_CBRANCH)
+ {
+ rtx next, beyond;
+
+ if (get_attr_length (insn) > 4)
+ {
+ rtx src = SET_SRC (PATTERN (insn));
+ rtx cond = XEXP (src, 0);
+ rtx olabel = XEXP (XEXP (src, 1), 0);
+ rtx jump;
+ int addr = insn_addresses[INSN_UID (insn)];
+ rtx label = 0;
+ int dest_uid = get_dest_uid (olabel, max_uid);
+ struct far_branch *bp = uid_branch[dest_uid];
+
+ /* redirect_jump needs a valid JUMP_LABEL, and it might delete
+ the label if th lABEL_BUSES count drops to zero. There is
+ always a jump_optimize pass that sets these values, but it
+ proceeds to delete unreferenced code, and then if not
+ optimizing, to un-delete the deleted instructions, thus
+ leaving labels with too low uses counts. */
+ if (! optimize)
+ {
+ JUMP_LABEL (insn) = olabel;
+ LABEL_NUSES (olabel)++;
+ }
+ if (! bp)
+ {
+ bp = (struct far_branch *) alloca (sizeof *bp);
+ uid_branch[dest_uid] = bp;
+ bp->prev = far_branch_list;
+ far_branch_list = bp;
+ bp->far_label
+ = XEXP (XEXP (SET_SRC (PATTERN (insn)), 1), 0);
+ LABEL_NUSES (bp->far_label)++;
+ }
+ else
+ {
+ label = bp->near_label;
+ if (! label && bp->address - addr >= CONDJUMP_MIN)
+ {
+ rtx block = bp->insert_place;
+
+ if (GET_CODE (PATTERN (block)) == RETURN)
+ block = PREV_INSN (block);
+ else
+ block = gen_block_redirect (block,
+ bp->address, 2);
+ label = emit_label_after (gen_label_rtx (),
+ PREV_INSN (block));
+ bp->near_label = label;
+ }
+ else if (label && ! NEXT_INSN (label))
+ if (addr + 2 - bp->address <= CONDJUMP_MAX)
+ bp->insert_place = insn;
+ else
+ gen_far_branch (bp);
+ }
+ if (! label
+ || NEXT_INSN (label) && bp->address - addr < CONDJUMP_MIN)
+ {
+ bp->near_label = label = gen_label_rtx ();
+ bp->insert_place = insn;
+ bp->address = addr;
+ }
+ if (! redirect_jump (insn, label))
+ abort ();
+ }
+ else
+ {
+ /* get_attr_length (insn) == 2 */
+ /* Check if we have a pattern where reorg wants to redirect
+ the branch to a label from an unconditional branch that
+ is too far away. */
+ /* We can't use JUMP_LABEL here because it might be undefined
+ when not optimizing. */
+ beyond
+ = next_active_insn (XEXP (XEXP (SET_SRC (PATTERN (insn)), 1),
+ 0));
+
+ if ((GET_CODE (beyond) == JUMP_INSN
+ || (GET_CODE (beyond = next_active_insn (beyond))
+ == JUMP_INSN))
+ && GET_CODE (PATTERN (beyond)) == SET
+ && recog_memoized (beyond) == CODE_FOR_jump
+ && ((insn_addresses[INSN_UID (XEXP (SET_SRC (PATTERN (beyond)), 0))]
+ - insn_addresses[INSN_UID (insn)] + 252U)
+ > 252 + 258 + 2))
+ gen_block_redirect (beyond,
+ insn_addresses[INSN_UID (beyond)], 1);
+ }
+
+ next = next_active_insn (insn);
+
+ if ((GET_CODE (next) == JUMP_INSN
+ || GET_CODE (next = next_active_insn (next)) == JUMP_INSN)
+ && GET_CODE (PATTERN (next)) == SET
+ && recog_memoized (next) == CODE_FOR_jump
+ && ((insn_addresses[INSN_UID (XEXP (SET_SRC (PATTERN (next)), 0))]
+ - insn_addresses[INSN_UID (insn)] + 252U)
+ > 252 + 258 + 2))
+ gen_block_redirect (next, insn_addresses[INSN_UID (next)], 1);
+ }
+ else if (type == TYPE_JUMP || type == TYPE_RETURN)
+ {
+ int addr = insn_addresses[INSN_UID (insn)];
+ rtx far_label = 0;
+ int dest_uid = 0;
+ struct far_branch *bp;
+
+ if (type == TYPE_JUMP)
+ {
+ far_label = XEXP (SET_SRC (PATTERN (insn)), 0);
+ dest_uid = get_dest_uid (far_label, max_uid);
+ if (! dest_uid)
+ {
+ /* Parse errors can lead to labels outside
+ the insn stream. */
+ if (! NEXT_INSN (far_label))
+ continue;
+
+ if (! optimize)
+ {
+ JUMP_LABEL (insn) = far_label;
+ LABEL_NUSES (far_label)++;
+ }
+ redirect_jump (insn, NULL_RTX);
+ far_label = 0;
+ }
+ }
+ bp = uid_branch[dest_uid];
+ if (! bp)
+ {
+ bp = (struct far_branch *) alloca (sizeof *bp);
+ uid_branch[dest_uid] = bp;
+ bp->prev = far_branch_list;
+ far_branch_list = bp;
+ bp->near_label = 0;
+ bp->far_label = far_label;
+ if (far_label)
+ LABEL_NUSES (far_label)++;
+ }
+ else if (bp->near_label && ! NEXT_INSN (bp->near_label))
+ if (addr - bp->address <= CONDJUMP_MAX)
+ emit_label_after (bp->near_label, PREV_INSN (insn));
+ else
+ {
+ gen_far_branch (bp);
+ bp->near_label = 0;
+ }
+ else
+ bp->near_label = 0;
+ bp->address = addr;
+ bp->insert_place = insn;
+ if (! far_label)
+ emit_insn_before (gen_block_branch_redirect (const0_rtx), insn);
+ else
+ gen_block_redirect (insn, addr, bp->near_label ? 2 : 0);
+ }
+ }
+ /* Generate all pending far branches,
+ and free our references to the far labels. */
+ while (far_branch_list)
+ {
+ if (far_branch_list->near_label
+ && ! NEXT_INSN (far_branch_list->near_label))
+ gen_far_branch (far_branch_list);
+ if (optimize
+ && far_branch_list->far_label
+ && ! --LABEL_NUSES (far_branch_list->far_label))
+ delete_insn (far_branch_list->far_label);
+ far_branch_list = far_branch_list->prev;
+ }
+ uid_align_max = get_max_uid ();
+ uid_align = (rtx *) oballoc (uid_align_max * sizeof *uid_align);
+ fixup_aligns ();
}
/* Dump out instruction addresses, which is useful for debugging the
@@ -2425,8 +3476,8 @@ final_prescan_insn (insn, opvec, noperands)
|| (GET_CODE (pattern) == SET
&& (GET_CODE (SET_SRC (pattern)) == CALL
|| get_attr_type (insn) == TYPE_SFUNC)))
- fprintf (asm_out_file, "\t.uses L%d\n",
- CODE_LABEL_NUMBER (XEXP (note, 0)));
+ asm_fprintf (asm_out_file, "\t.uses %LL%d\n",
+ CODE_LABEL_NUMBER (XEXP (note, 0)));
else if (GET_CODE (pattern) == SET)
ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L",
CODE_LABEL_NUMBER (XEXP (note, 0)));
@@ -2545,10 +3596,11 @@ push (rn)
rtx x;
if ((rn >= FIRST_FP_REG && rn <= LAST_FP_REG)
|| rn == FPUL_REG)
- x = emit_insn (gen_push_e (gen_rtx (REG, SFmode, rn)));
+ x = gen_push_e (gen_rtx (REG, SFmode, rn));
else
- x = emit_insn (gen_push (gen_rtx (REG, SImode, rn)));
+ x = gen_push (gen_rtx (REG, SImode, rn));
+ x = emit_insn (x);
REG_NOTES (x) = gen_rtx (EXPR_LIST, REG_INC,
gen_rtx(REG, SImode, STACK_POINTER_REGNUM), 0);
}
@@ -2562,16 +3614,16 @@ pop (rn)
rtx x;
if ((rn >= FIRST_FP_REG && rn <= LAST_FP_REG)
|| rn == FPUL_REG)
- x = emit_insn (gen_pop_e (gen_rtx (REG, SFmode, rn)));
+ x = gen_pop_e (gen_rtx (REG, SFmode, rn));
else
- x = emit_insn (gen_pop (gen_rtx (REG, SImode, rn)));
+ x = gen_pop (gen_rtx (REG, SImode, rn));
+ x = emit_insn (x);
REG_NOTES (x) = gen_rtx (EXPR_LIST, REG_INC,
gen_rtx(REG, SImode, STACK_POINTER_REGNUM), 0);
}
-/* Generate code to push the regs specified in the mask, and return
- the number of bytes the insns take. */
+/* Generate code to push the regs specified in the mask. */
static void
push_regs (mask, mask2)
@@ -2579,16 +3631,21 @@ push_regs (mask, mask2)
{
int i;
+ /* Push PR last; this gives better latencies after the prologue, and
+ candidates for the return delay slot when there are no general
+ registers pushed. */
for (i = 0; i < 32; i++)
- if (mask & (1 << i))
+ if (mask & (1 << i) && i != PR_REG)
push (i);
for (i = 32; i < FIRST_PSEUDO_REGISTER; i++)
if (mask2 & (1 << (i - 32)))
push (i);
+ if (mask & (1 << PR_REG))
+ push (PR_REG);
}
/* Work out the registers which need to be saved, both as a mask and a
- count.
+ count of saved words.
If doing a pragma interrupt function, then push all regs used by the
function, and if we call another function (we can tell by looking at PR),
@@ -2601,40 +3658,28 @@ calc_live_regs (count_ptr, live_regs_mask2)
{
int reg;
int live_regs_mask = 0;
- int count = 0;
+ int count;
*live_regs_mask2 = 0;
- for (reg = 0; reg < FIRST_PSEUDO_REGISTER; reg++)
+ for (count = 0, reg = FIRST_PSEUDO_REGISTER - 1; reg >= 0; reg--)
{
- if (pragma_interrupt && ! pragma_trapa)
+ if ((pragma_interrupt && ! pragma_trapa)
+ ? (/* Need to save all the regs ever live. */
+ (regs_ever_live[reg]
+ || (call_used_regs[reg]
+ && (! fixed_regs[reg] || reg == MACH_REG || reg == MACL_REG)
+ && regs_ever_live[PR_REG]))
+ && reg != STACK_POINTER_REGNUM && reg != ARG_POINTER_REGNUM
+ && reg != RETURN_ADDRESS_POINTER_REGNUM
+ && reg != T_REG && reg != GBR_REG)
+ : (/* Only push those regs which are used and need to be saved. */
+ regs_ever_live[reg] && ! call_used_regs[reg]))
{
- /* Need to save all the regs ever live. */
- if ((regs_ever_live[reg]
- || (call_used_regs[reg]
- && (! fixed_regs[reg] || reg == MACH_REG || reg == MACL_REG)
- && regs_ever_live[PR_REG]))
- && reg != STACK_POINTER_REGNUM && reg != ARG_POINTER_REGNUM
- && reg != RETURN_ADDRESS_POINTER_REGNUM
- && reg != T_REG && reg != GBR_REG)
- {
- if (reg >= 32)
- *live_regs_mask2 |= 1 << (reg - 32);
- else
- live_regs_mask |= 1 << reg;
- count++;
- }
- }
- else
- {
- /* Only push those regs which are used and need to be saved. */
- if (regs_ever_live[reg] && ! call_used_regs[reg])
- {
- if (reg >= 32)
- *live_regs_mask2 |= 1 << (reg - 32);
- else
- live_regs_mask |= (1 << reg);
- count++;
- }
+ if (reg >= 32)
+ *live_regs_mask2 |= 1 << (reg - 32);
+ else
+ live_regs_mask |= 1 << reg;
+ count++;
}
}
@@ -2650,7 +3695,6 @@ sh_expand_prologue ()
int live_regs_mask;
int d, i;
int live_regs_mask2;
- live_regs_mask = calc_live_regs (&d, &live_regs_mask2);
/* We have pretend args if we had an object sent partially in registers
and partially on the stack, e.g. a large structure. */
@@ -2667,7 +3711,7 @@ sh_expand_prologue ()
/* This is not used by the SH3E calling convention */
if (!TARGET_SH3E)
- {
+ {
/* Push arg regs as if they'd been provided by caller in stack. */
for (i = 0; i < NPARM_REGS(SImode); i++)
{
@@ -2679,13 +3723,14 @@ sh_expand_prologue ()
push (rn);
extra_push += 4;
}
- }
+ }
}
/* If we're supposed to switch stacks at function entry, do so now. */
if (sp_switch)
emit_insn (gen_sp_switch_1 ());
+ live_regs_mask = calc_live_regs (&d, &live_regs_mask2);
push_regs (live_regs_mask, live_regs_mask2);
output_stack_adjust (-get_frame_size (), stack_pointer_rtx, 3);
@@ -2701,7 +3746,6 @@ sh_expand_epilogue ()
int d, i;
int live_regs_mask2;
- live_regs_mask = calc_live_regs (&d, &live_regs_mask2);
if (frame_pointer_needed)
{
@@ -2726,10 +3770,13 @@ sh_expand_epilogue ()
/* Pop all the registers. */
+ live_regs_mask = calc_live_regs (&d, &live_regs_mask2);
+ if (live_regs_mask & (1 << PR_REG))
+ pop (PR_REG);
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
{
int j = (FIRST_PSEUDO_REGISTER - 1) - i;
- if (j < 32 && (live_regs_mask & (1 << j)))
+ if (j < 32 && (live_regs_mask & (1 << j)) && j != PR_REG)
pop (j);
else if (j >= 32 && (live_regs_mask2 & (1 << (j - 32))))
pop (j);
@@ -2794,17 +3841,19 @@ sh_builtin_saveregs (arglist)
named args need not be saved.
We explicitly build a pointer to the buffer because it halves the insn
count when not optimizing (otherwise the pointer is built for each reg
- saved). */
+ saved).
+ We emit the moves in reverse order so that we can use predecrement. */
fpregs = gen_reg_rtx (Pmode);
emit_move_insn (fpregs, XEXP (regbuf, 0));
- for (regno = first_floatreg; regno < NPARM_REGS (SFmode); regno ++)
- emit_move_insn (gen_rtx (MEM, SFmode,
- plus_constant (fpregs,
- GET_MODE_SIZE (SFmode)
- * (regno - first_floatreg))),
- gen_rtx (REG, SFmode,
- BASE_ARG_REG (SFmode) + regno));
+ emit_insn (gen_addsi3 (fpregs, fpregs,
+ GEN_INT (n_floatregs * UNITS_PER_WORD)));
+ for (regno = NPARM_REGS (SFmode) - 1; regno >= first_floatreg; regno--)
+ {
+ emit_insn (gen_addsi3 (fpregs, fpregs, GEN_INT (- UNITS_PER_WORD)));
+ emit_move_insn (gen_rtx (MEM, SFmode, fpregs),
+ gen_rtx (REG, SFmode, BASE_ARG_REG (SFmode) + regno));
+ }
/* Return the address of the regbuf. */
return XEXP (regbuf, 0);
@@ -2821,9 +3870,11 @@ initial_elimination_offset (from, to)
int regs_saved;
int total_saved_regs_space;
int total_auto_space = get_frame_size ();
+ int save_flags = target_flags;
int live_regs_mask, live_regs_mask2;
live_regs_mask = calc_live_regs (&regs_saved, &live_regs_mask2);
+ target_flags = save_flags;
total_saved_regs_space = (regs_saved) * 4;
@@ -2840,13 +3891,10 @@ initial_elimination_offset (from, to)
if (from == RETURN_ADDRESS_POINTER_REGNUM
&& (to == FRAME_POINTER_REGNUM || to == STACK_POINTER_REGNUM))
{
- int i, n = 0;
- for (i = PR_REG+1; i < 32; i++)
+ int i, n = total_saved_regs_space;
+ for (i = PR_REG-1; i >= 0; i--)
if (live_regs_mask & (1 << i))
- n += 4;
- for (i = 32; i < FIRST_PSEUDO_REGISTER; i++)
- if (live_regs_mask2 & (1 << (i - 32)))
- n += 4;
+ n -= 4;
return n + total_auto_space;
}
@@ -2888,7 +3936,7 @@ handle_pragma (file, t)
sp_switch -- specifies an alternate stack for an interrupt handler
to run on.
- trap_exit -- use a trapa to exit an interrupt function intead of
+ trap_exit -- use a trapa to exit an interrupt function instead of
an rte instruction. */
int
@@ -3121,6 +4169,205 @@ fp_one_operand (op)
REAL_VALUE_FROM_CONST_DOUBLE (r, op);
return REAL_VALUES_EQUAL (r, dconst1);
}
+
+int
+braf_label_ref_operand(op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ rtx prev;
+
+ if (GET_CODE (op) != LABEL_REF)
+ return 0;
+ prev = prev_real_insn (XEXP (op, 0));
+ if (GET_CODE (prev) != JUMP_INSN)
+ return 0;
+ prev = PATTERN (prev);
+ if (GET_CODE (prev) != PARALLEL || XVECLEN (prev, 0) != 2)
+ return 0;
+ prev = XVECEXP (prev, 0, 0);
+ if (GET_CODE (prev) != SET)
+ return 0;
+ prev = SET_SRC (prev);
+ if (GET_CODE (prev) != PLUS || XEXP (prev, 1) != op)
+ return 0;
+}
+
+/* Return the offset of a branch. Offsets for backward branches are
+ reported relative to the branch instruction, while offsets for forward
+ branches are reported relative to the following instruction. */
+
+int
+branch_offset (branch)
+ rtx branch;
+{
+ rtx dest = SET_SRC (PATTERN (branch)), dest_next;
+ int branch_uid = INSN_UID (branch);
+ int dest_uid, dest_addr;
+ rtx branch_align = uid_align[branch_uid];
+
+ if (GET_CODE (dest) == IF_THEN_ELSE)
+ dest = XEXP (dest, 1);
+ dest = XEXP (dest, 0);
+ dest_uid = INSN_UID (dest);
+ dest_addr = insn_addresses[dest_uid];
+ if (branch_align)
+ {
+ /* Forward branch. */
+ /* If branch is in a sequence, get the successor of the sequence. */
+ rtx next = NEXT_INSN (NEXT_INSN (PREV_INSN (branch)));
+ int next_addr = insn_addresses[INSN_UID (next)];
+ int diff;
+
+ /* If NEXT has been hoisted in a sequence further on, it address has
+ been clobbered in the previous pass. However, if that is the case,
+ we know that it is exactly 2 bytes long (because it fits in a delay
+ slot), and that there is a following label (the destination of the
+ instruction that filled its delay slot with NEXT). The address of
+ this label is reliable. */
+ if (NEXT_INSN (next))
+ {
+ int next_next_addr = insn_addresses[INSN_UID (NEXT_INSN (next))];
+ if (next_addr > next_next_addr)
+ next_addr = next_next_addr - 2;
+ }
+ diff = dest_addr - next_addr;
+ /* If BRANCH_ALIGN has been the last insn, it might be a barrier or
+ a note. */
+ if ((insn_addresses[INSN_UID (branch_align)] < dest_addr
+ || (insn_addresses[INSN_UID (branch_align)] == dest_addr
+ && next_real_insn (dest) != branch_align))
+ && GET_CODE (branch_align) == INSN)
+ {
+ int align = 1 << INTVAL (XVECEXP (PATTERN (branch_align), 0, 0));
+ int align_addr = insn_addresses[INSN_UID (branch_align)];
+ diff += (align_addr - 1) & (align - 2);
+ branch_align = uid_align[INSN_UID (branch_align)];
+ if (insn_addresses[INSN_UID (branch_align)] <= dest_addr
+ && GET_CODE (branch_align) == INSN)
+ {
+ int align2 = 1 << INTVAL (XVECEXP (PATTERN (branch_align), 0, 0));
+ align_addr = insn_addresses[INSN_UID (branch_align)];
+ diff += (align_addr - 1) & (align2 - align);
+ }
+ }
+ return diff;
+ }
+ else
+ {
+ /* Backward branch. */
+ int branch_addr = insn_addresses[branch_uid];
+ int diff = dest_addr - branch_addr;
+ int old_align = 2;
+
+ while (dest_uid >= uid_align_max || ! uid_align[dest_uid])
+ {
+ /* Label might be outside the insn stream, or even in a separate
+ insn stream, after a syntax error. */
+ if (! NEXT_INSN (dest))
+ return 0;
+ dest = NEXT_INSN (dest), dest_uid = INSN_UID (dest);
+ }
+
+ /* By searching for a known destination, we might already have
+ stumbled on the alignment instruction. */
+ if (GET_CODE (dest) == INSN
+ && GET_CODE (PATTERN (dest)) == UNSPEC_VOLATILE
+ && XINT (PATTERN (dest), 1) == 1
+ && INTVAL (XVECEXP (PATTERN (dest), 0, 0)) > 1)
+ branch_align = dest;
+ else
+ branch_align = uid_align[dest_uid];
+ while (insn_addresses[INSN_UID (branch_align)] <= branch_addr
+ && GET_CODE (branch_align) == INSN)
+ {
+ int align = 1 << INTVAL (XVECEXP (PATTERN (branch_align), 0, 0));
+ int align_addr = insn_addresses[INSN_UID (branch_align)];
+ diff -= (align_addr - 1) & (align - old_align);
+ old_align = align;
+ branch_align = uid_align[INSN_UID (branch_align)];
+ }
+ return diff;
+ }
+}
+
+int
+short_cbranch_p (branch)
+ rtx branch;
+{
+ int offset;
+
+ if (! insn_addresses)
+ return 0;
+ if (mdep_reorg_phase <= SH_FIXUP_PCLOAD)
+ return 0;
+ offset = branch_offset (branch);
+ return (offset >= -252
+ && offset <= (NEXT_INSN (PREV_INSN (branch)) == branch ? 256 : 254));
+}
+
+/* The maximum range used for SImode constant pool entrys is 1018. A final
+ instruction can add 8 bytes while only being 4 bytes in size, thus we
+ can have a total of 1022 bytes in the pool. Add 4 bytes for a branch
+ instruction around the pool table, 2 bytes of alignment before the table,
+ and 30 bytes of alignment after the table. That gives a maximum total
+ pool size of 1058 bytes.
+ Worst case code/pool content size ratio is 1:2 (using asms).
+ Thus, in the worst case, there is one instruction in front of a maximum
+ sized pool, and then there are 1052 bytes of pool for every 508 bytes of
+ code. For the last n bytes of code, there are 2n + 36 bytes of pool.
+ If we have a forward branch, the initial table will be put after the
+ unconditional branch.
+
+ ??? We could do much better by keeping track of the actual pcloads within
+ the branch range and in the pcload range in front of the branch range. */
+
+int
+med_branch_p (branch, condlen)
+ rtx branch;
+ int condlen;
+{
+ int offset;
+
+ if (! insn_addresses)
+ return 0;
+ offset = branch_offset (branch);
+ if (mdep_reorg_phase <= SH_FIXUP_PCLOAD)
+ return offset - condlen >= -990 && offset <= 998;
+ return offset - condlen >= -4092 && offset <= 4094;
+}
+
+int
+braf_branch_p (branch, condlen)
+ rtx branch;
+ int condlen;
+{
+ int offset;
+
+ if (! insn_addresses)
+ return 0;
+ if (! TARGET_SH2)
+ return 0;
+ offset = branch_offset (branch);
+ if (mdep_reorg_phase <= SH_FIXUP_PCLOAD)
+ return offset - condlen >= -10330 && offset <= 10330;
+ return offset -condlen >= -32764 && offset <= 32766;
+}
+
+int
+align_length (insn)
+ rtx insn;
+{
+ int align = 1 << INTVAL (XVECEXP (PATTERN (insn), 0, 0));
+ if (! insn_addresses)
+ if (optimize
+ && (mdep_reorg_phase == SH_SHORTEN_BRANCHES0
+ || mdep_reorg_phase == SH_SHORTEN_BRANCHES1))
+ return 0;
+ else
+ return align - 2;
+ return align - 2 - ((insn_addresses[INSN_UID (insn)] - 2) & (align - 2));
+}
/* Return non-zero if REG is not used after INSN.
We assume REG is a reload reg, and therefore does
diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h
index ce5e26a3300..a3aa90253e6 100644
--- a/gcc/config/sh/sh.h
+++ b/gcc/config/sh/sh.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler for Hitachi Super-H.
- Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by Steve Chamberlain (sac@cygnus.com).
Improved by Jim Wilson (wilson@cygnus.com).
@@ -24,6 +24,10 @@ Boston, MA 02111-1307, USA. */
#define TARGET_VERSION \
fputs (" (Hitachi SH)", stderr);
+/* Unfortunately, insn-attrtab.c doesn't include insn-codes.h. We can't
+ include it here, because hconfig.h is also included by gencodes.c . */
+extern int code_for_indirect_jump_scratch;
+
/* Generate SDB debugging information. */
#define SDB_DEBUGGING_INFO
@@ -38,7 +42,8 @@ Boston, MA 02111-1307, USA. */
%{m1:-D__sh1__} \
%{m2:-D__sh2__} \
%{m3:-D__sh3__} \
-%{m3e:-D__SH3E__}"
+%{m3e:-D__SH3E__} \
+%{!m1:%{!m2:%{!m3:%{!m3e:-D__sh1__}}}}"
#define CPP_PREDEFINES "-D__sh__ -Acpu(sh) -Amachine(sh)"
@@ -55,6 +60,7 @@ Boston, MA 02111-1307, USA. */
int regno; \
for (regno = FIRST_FP_REG; regno <= LAST_FP_REG; regno++) \
fixed_regs[regno] = call_used_regs[regno] = 1; \
+ fixed_regs[FPUL_REG] = call_used_regs[FPUL_REG] = 1; \
} \
/* Hitachi saves and restores mac registers on call. */ \
if (TARGET_HITACHI) \
@@ -71,7 +77,6 @@ Boston, MA 02111-1307, USA. */
extern int target_flags;
#define ISIZE_BIT (1<<1)
#define DALIGN_BIT (1<<6)
-#define SH0_BIT (1<<7)
#define SH1_BIT (1<<8)
#define SH2_BIT (1<<9)
#define SH3_BIT (1<<10)
@@ -82,6 +87,7 @@ extern int target_flags;
#define HITACHI_BIT (1<<22)
#define PADSTRUCT_BIT (1<<28)
#define LITTLE_ENDIAN_BIT (1<<29)
+#define IEEE_BIT (1<<30)
/* Nonzero if we should dump out instruction size info. */
#define TARGET_DUMPISIZE (target_flags & ISIZE_BIT)
@@ -89,11 +95,6 @@ extern int target_flags;
/* Nonzero to align doubles on 64 bit boundaries. */
#define TARGET_ALIGN_DOUBLE (target_flags & DALIGN_BIT)
-/* Nonzero if we should generate code using type 0 insns. */
-/* ??? Is there such a thing as SH0? If not, we should delete all
- references to it. */
-#define TARGET_SH0 (target_flags & SH0_BIT)
-
/* Nonzero if we should generate code using type 1 insns. */
#define TARGET_SH1 (target_flags & SH1_BIT)
@@ -106,6 +107,9 @@ extern int target_flags;
/* Nonzero if we should generate code using type 3E insns. */
#define TARGET_SH3E (target_flags & SH3E_BIT)
+/* Nonzero if we respect NANs. */
+#define TARGET_IEEE (target_flags & IEEE_BIT)
+
/* Nonzero if we should generate smaller code rather than faster code. */
#define TARGET_SMALLCODE (target_flags & SPACE_BIT)
@@ -130,8 +134,7 @@ extern int target_flags;
#define TARGET_LITTLE_ENDIAN (target_flags & LITTLE_ENDIAN_BIT)
#define TARGET_SWITCHES \
-{ {"0", SH0_BIT}, \
- {"1", SH1_BIT}, \
+{ {"1", SH1_BIT}, \
{"2", SH2_BIT}, \
{"3", SH3_BIT|SH2_BIT}, \
{"3e", SH3E_BIT|SH3_BIT|SH2_BIT}, \
@@ -139,23 +142,28 @@ extern int target_flags;
{"bigtable", BIGTABLE_BIT}, \
{"dalign", DALIGN_BIT}, \
{"hitachi", HITACHI_BIT}, \
+ {"ieee", IEEE_BIT}, \
{"isize", ISIZE_BIT}, \
{"l", LITTLE_ENDIAN_BIT}, \
+ {"no-ieee", -IEEE_BIT}, \
{"padstruct", PADSTRUCT_BIT}, \
{"relax", RELAX_BIT}, \
{"space", SPACE_BIT}, \
+ SUBTARGET_SWITCHES \
{"", TARGET_DEFAULT} \
}
+/* This are meant to be redefined in the host dependent files */
+#define SUBTARGET_SWITCHES
+
#define TARGET_DEFAULT (0)
#define PRESERVE_DEATH_INFO_REGNO_P(regno) (TARGET_RELAX || optimize)
+#define ASSEMBLER_DIALECT 0 /* will allow to distinguish b[tf].s and b[tf]/s . */
#define OVERRIDE_OPTIONS \
do { \
- sh_cpu = CPU_SH0; \
- if (TARGET_SH1) \
- sh_cpu = CPU_SH1; \
+ sh_cpu = CPU_SH1; \
if (TARGET_SH2) \
sh_cpu = CPU_SH2; \
if (TARGET_SH3) \
@@ -167,6 +175,7 @@ do { \
break global alloc, and generates slower code anyway due \
to the pressure on R0. */ \
flag_schedule_insns = 0; \
+ sh_addr_diff_vec_mode = TARGET_BIGTABLE ? SImode : HImode; \
} while (0)
/* Target machine storage layout. */
@@ -218,10 +227,14 @@ do { \
/* Boundary (in *bits*) on which stack pointer should be aligned. */
#define STACK_BOUNDARY 32
+/* The log (base 2) of the cache line size, in bytes. Processors prior to
+ SH3 have no actual cache, but they fetch code in chunks of 4 bytes. */
+#define CACHE_LOG (TARGET_SH3 ? 4 : 2)
+
/* Allocation boundary (in *bits*) for the code of a function.
32 bit alignment is faster, because instructions are always fetched as a
pair from a longword boundary. */
-#define FUNCTION_BOUNDARY (TARGET_SMALLCODE ? 16 : 32)
+#define FUNCTION_BOUNDARY (TARGET_SMALLCODE ? 16 : (1 << CACHE_LOG) * 8)
/* Alignment of field after `int : 0' in a structure. */
#define EMPTY_FIELD_BOUNDARY 32
@@ -307,11 +320,11 @@ do { \
0, 0, 0, 0, \
0, 0, 0, 1, \
1, 1, 1, 1, \
- 1, 1, 1, 1, \
+ 1, 1, 0, 1, \
+ 0, 0, 0, 0, \
0, 0, 0, 0, \
0, 0, 0, 0, \
0, 0, 0, 0, \
- 0, 0, 0, 0 \
}
/* 1 for registers not available across function calls.
@@ -331,7 +344,7 @@ do { \
1, 1, 1, 1, \
1, 1, 1, 1, \
1, 1, 1, 1, \
- 0, 0, 0, 0 \
+ 0, 0, 0, 0, \
}
/* Return number of consecutive hard regs needed starting at reg REGNO
@@ -391,7 +404,7 @@ do { \
frame pointer register can often be eliminated in favor of the stack
pointer register. Secondly, the argument pointer register can always be
eliminated; it is replaced with either the stack or frame pointer.
- Third, there is the retuen address pointer, which can also be replaced
+ Third, there is the return address pointer, which can also be replaced
with either the stack or the frame pointer. */
/* This is an array of structures. Each structure initializes one pair
@@ -424,7 +437,7 @@ do { \
its replacement, at the start of a routine. */
#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
- OFFSET = initial_elimination_offset (FROM, TO)
+ OFFSET = initial_elimination_offset ((FROM), (TO))
/* Base register for access to arguments of the function. */
#define ARG_POINTER_REGNUM 16
@@ -472,6 +485,14 @@ do { \
be used as the destination of some of the arithmetic ops. There are
also some special purpose registers; the T bit register, the
Procedure Return Register and the Multiply Accumulate Registers. */
+/* Place GENERAL_REGS after FPUL_REGS so that it will be preferred by
+ reg_class_subunion. We don't want to have an actual union class
+ of these, because it would only be used when both classes are calculated
+ to give the same cost, but there is only one FPUL register.
+ Besides, regclass fails to notice the different REGISTER_MOVE_COSTS
+ applying to the actual instruction alternative considered. E.g., the
+ y/r alternative of movsi_ie is considered to have no more cost that
+ the r/r alternative, which is patently untrue. */
enum reg_class
{
@@ -480,8 +501,8 @@ enum reg_class
PR_REGS,
T_REGS,
MAC_REGS,
- GENERAL_REGS,
FPUL_REGS,
+ GENERAL_REGS,
FP0_REGS,
FP_REGS,
GENERAL_FP_REGS,
@@ -499,8 +520,8 @@ enum reg_class
"PR_REGS", \
"T_REGS", \
"MAC_REGS", \
- "GENERAL_REGS", \
"FPUL_REGS", \
+ "GENERAL_REGS", \
"FP0_REGS", \
"FP_REGS", \
"GENERAL_FP_REGS", \
@@ -518,8 +539,8 @@ enum reg_class
{ 0x00020000, 0x00000000 }, /* PR_REGS */ \
{ 0x00040000, 0x00000000 }, /* T_REGS */ \
{ 0x00300000, 0x00000000 }, /* MAC_REGS */ \
- { 0x0081FFFF, 0x00000000 }, /* GENERAL_REGS */ \
{ 0x00400000, 0x00000000 }, /* FPUL_REGS */ \
+ { 0x0081FFFF, 0x00000000 }, /* GENERAL_REGS */ \
{ 0x01000000, 0x00000000 }, /* FP0_REGS */ \
{ 0xFF000000, 0x000000FF }, /* FP_REGS */ \
{ 0xFF81FFFF, 0x000000FF }, /* GENERAL_FP_REGS */ \
@@ -532,7 +553,7 @@ enum reg_class
or could index an array. */
extern int regno_reg_class[];
-#define REGNO_REG_CLASS(REGNO) regno_reg_class[REGNO]
+#define REGNO_REG_CLASS(REGNO) regno_reg_class[(REGNO)]
/* When defined, the compiler allows registers explicitly used in the
rtl to be used as spill registers but prevents the compiler from
@@ -541,9 +562,12 @@ extern int regno_reg_class[];
#define SMALL_REGISTER_CLASSES 1
/* The order in which register should be allocated. */
+/* Sometimes FP0_REGS becomes the preferred class of a floating point pseudo,
+ and GENERAL_FP_REGS the alternate class. Since FP0 is likely to be
+ spilled or used otherwise, we better have the FP_REGS allocated first. */
#define REG_ALLOC_ORDER \
- { 1,2,3,7,6,5,4,0,8,9,10,11,12,13,14, \
- 24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39, \
+ { 25,26,27,28,29,30,31,24,32,33,34,35,36,37,38,39, \
+ 1,2,3,7,6,5,4,0,8,9,10,11,12,13,14, \
22,15,16,17,18,19,20,21,23 }
/* The class value for index registers, and the one for base regs. */
@@ -594,22 +618,30 @@ extern enum reg_class reg_class_from_letter[];
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) CLASS
+#define PREFERRED_RELOAD_CLASS(X, CLASS) (CLASS)
-/* ??? Should make FPUL register a nn-fixed register and make it's
- use explicit in the rtl; then change this definition here to
- ... ? FPUL_REGS : NO_REGS) . */
#define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS,MODE,X) \
- ((((CLASS == FP_REGS || CLASS == FP0_REGS) \
- && GET_CODE (X) == REG && REGNO (X) <= AP_REG) \
- || (CLASS == GENERAL_REGS && GET_CODE (X) == REG \
- && REGNO (X) <= FIRST_FP_REG && REGNO (X) >= LAST_FP_REG)) \
- ? /* FPUL_REGS */ NO_REGS : NO_REGS)
+ ((((((CLASS) == FP_REGS || (CLASS) == FP0_REGS) \
+ && (GET_CODE (X) == REG && REGNO (X) <= AP_REG)) \
+ || (((CLASS) == GENERAL_REGS || (CLASS) == R0_REGS) \
+ && GET_CODE (X) == REG \
+ && REGNO (X) >= FIRST_FP_REG && REGNO (X) <= LAST_FP_REG)) \
+ && MODE == SFmode) \
+ ? FPUL_REGS \
+ : ((CLASS) == FPUL_REGS \
+ && (GET_CODE (X) == MEM \
+ || GET_CODE (X) == REG && REGNO (X) >= FIRST_PSEUDO_REGISTER))\
+ ? GENERAL_REGS \
+ : (((CLASS) == MAC_REGS || (CLASS) == PR_REGS) \
+ && GET_CODE (X) == REG && REGNO (X) > 15 \
+ && (CLASS) != REGNO_REG_CLASS (REGNO (X))) \
+ ? GENERAL_REGS : NO_REGS)
#define SECONDARY_INPUT_RELOAD_CLASS(CLASS,MODE,X) \
- (((CLASS == FP_REGS || CLASS == FP0_REGS) && immediate_operand (X, MODE)\
- && ! (fp_one_operand (X) || fp_one_operand (X))) \
- ? R0_REGS : SECONDARY_OUTPUT_RELOAD_CLASS(CLASS,MODE,X))
+ ((((CLASS) == FP_REGS || (CLASS) == FP0_REGS) \
+ && immediate_operand ((X), (MODE)) \
+ && ! (fp_zero_operand (X) || fp_one_operand (X))) \
+ ? R0_REGS : SECONDARY_OUTPUT_RELOAD_CLASS((CLASS),(MODE),(X)))
/* Return the maximum number of consecutive registers
needed to represent mode MODE in a register of class CLASS.
@@ -624,7 +656,9 @@ extern enum reg_class reg_class_from_letter[];
These macros are used only in other macro definitions below. */
#define NPARM_REGS(MODE) \
- ((TARGET_SH3E && ((MODE) == SFmode)) ? 8 : 4)
+ (TARGET_SH3E && (MODE) == SFmode \
+ ? 8 \
+ : 4)
#define FIRST_PARM_REG 4
#define FIRST_RET_REG 0
@@ -648,7 +682,12 @@ extern enum reg_class reg_class_from_letter[];
/* If we generate an insn to push BYTES bytes,
this says how many the stack pointer really advances by. */
+/* Don't define PUSH_ROUNDING, since the hardware doesn't do this.
+ When PUSH_ROUNDING is not defined, PARM_BOUNDARY will cause gcc to
+ do correct alignment. */
+#if 0
#define PUSH_ROUNDING(NPUSHED) (((NPUSHED) + 3) & ~3)
+#endif
/* Offset of first parameter from the argument pointer register value. */
#define FIRST_PARM_OFFSET(FNDECL) 0
@@ -687,7 +726,7 @@ extern enum reg_class reg_class_from_letter[];
/* 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, BASE_RETURN_VALUE_REG (MODE));
+ gen_rtx (REG, (MODE), BASE_RETURN_VALUE_REG (MODE));
/* 1 if N is a possible register number for a function value. */
#define FUNCTION_VALUE_REGNO_P(REGNO) \
@@ -695,8 +734,8 @@ extern enum reg_class reg_class_from_letter[];
/* 1 if N is a possible register number for function argument passing. */
#define FUNCTION_ARG_REGNO_P(REGNO) \
- (((REGNO) >= FIRST_PARM_REG && (REGNO) < (FIRST_PARM_REG + 4)) \
- || (TARGET_SH3E \
+ (((REGNO) >= FIRST_PARM_REG && (REGNO) < (FIRST_PARM_REG + 4)) \
+ || (TARGET_SH3E \
&& (REGNO) >= FIRST_FP_PARM_REG && (REGNO) < (FIRST_FP_PARM_REG + 8)))
/* Define a data type for recording info about an argument list
@@ -721,7 +760,7 @@ struct sh_args {
((TARGET_SH3E && ((MODE) == SFmode)) ? SH_ARG_FLOAT : SH_ARG_INT)
#define ROUND_ADVANCE(SIZE) \
- ((SIZE + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
+ (((SIZE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
/* Round a register number up to a proper boundary for an arg of mode
MODE.
@@ -741,7 +780,7 @@ struct sh_args {
For a library call, FNTYPE is 0.
On SH, the offset always starts at 0: the first parm reg is always
- the same reg. */
+ the same reg for a given argument class. */
#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT) \
do { \
@@ -765,9 +804,16 @@ struct sh_args {
This macro is only used in this file. */
#define PASS_IN_REG_P(CUM, MODE, TYPE) \
- (ROUND_REG ((CUM), (MODE)) < NPARM_REGS (MODE) \
- && ((TYPE) == 0 || ! TREE_ADDRESSABLE ((tree)(TYPE))) \
- && (! TARGET_SH3E || (ROUND_REG((CUM), (MODE)) + (GET_MODE_SIZE(MODE)/4) <= NPARM_REGS (MODE))))
+ (((TYPE) == 0 || ! TREE_ADDRESSABLE ((tree)(TYPE))) \
+ && (TARGET_SH3E \
+ ? ((MODE) == BLKmode \
+ ? (((CUM).arg_count[(int) SH_ARG_INT] * UNITS_PER_WORD \
+ + int_size_in_bytes (TYPE)) \
+ <= NPARM_REGS (SImode) * UNITS_PER_WORD) \
+ : ((ROUND_REG((CUM), (MODE)) \
+ + HARD_REGNO_NREGS (BASE_ARG_REG (MODE), (MODE))) \
+ <= NPARM_REGS (MODE))) \
+ : ROUND_REG ((CUM), (MODE)) < NPARM_REGS (MODE)))
/* Define where to put the arguments to a function.
Value is zero to push the argument on the stack,
@@ -788,9 +834,9 @@ struct sh_args {
its data type forbids. */
#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
- ((PASS_IN_REG_P ((CUM), (MODE), (TYPE)) \
- && (NAMED || TARGET_SH3E)) \
- ? gen_rtx (REG, (MODE), \
+ ((PASS_IN_REG_P ((CUM), (MODE), (TYPE)) \
+ && ((NAMED) || TARGET_SH3E)) \
+ ? gen_rtx (REG, (MODE), \
(BASE_ARG_REG (MODE) + ROUND_REG ((CUM), (MODE)))) \
: 0)
@@ -802,7 +848,7 @@ struct sh_args {
#define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) \
((PASS_IN_REG_P ((CUM), (MODE), (TYPE)) \
- && (NAMED || TARGET_SH3E) \
+ && ((NAMED) || TARGET_SH3E) \
&& (ROUND_REG ((CUM), (MODE)) \
+ (MODE != BLKmode \
? ROUND_ADVANCE (GET_MODE_SIZE (MODE)) \
@@ -826,10 +872,10 @@ extern int current_function_anonymous_args;
#define FUNCTION_PROFILER(STREAM,LABELNO) \
{ \
- fprintf(STREAM, " .align 2\n"); \
- fprintf(STREAM, " trapa #33\n"); \
- fprintf(STREAM, " .align 2\n"); \
- fprintf(STREAM, " .long LP%d\n", (LABELNO)); \
+ fprintf((STREAM), "\t.align\t2\n"); \
+ fprintf((STREAM), "\ttrapa\t#33\n"); \
+ fprintf((STREAM), "\t.align\t2\n"); \
+ asm_fprintf((STREAM), "\t.long\t%LLP%d\n", (LABELNO)); \
}
/* Define this macro if the code for function profiling should come
@@ -848,33 +894,23 @@ extern int current_function_anonymous_args;
/* Generate the assembly code for function exit
Just dump out any accumulated constant table. */
-#define FUNCTION_EPILOGUE(STREAM, SIZE) function_epilogue (STREAM, SIZE)
-
-/* Output assembler code for a block containing the constant parts
- of a trampoline, leaving space for the variable parts.
+#define FUNCTION_EPILOGUE(STREAM, SIZE) function_epilogue ((STREAM), (SIZE))
+/*
On the SH, the trampoline looks like
- 1 0000 D301 mov.l l1,r3
2 0002 DD02 mov.l l2,r13
+ 1 0000 D301 mov.l l1,r3
3 0004 4D2B jmp @r13
- 4 0006 200B or r0,r0
+ 4 0006 0009 nop
5 0008 00000000 l1: .long function
6 000c 00000000 l2: .long area */
-#define TRAMPOLINE_TEMPLATE(FILE) \
-{ \
- fprintf ((FILE), " .word 0xd301\n"); \
- fprintf ((FILE), " .word 0xdd02\n"); \
- fprintf ((FILE), " .word 0x4d2b\n"); \
- fprintf ((FILE), " .word 0x200b\n"); \
- fprintf ((FILE), " .long 0\n"); \
- fprintf ((FILE), " .long 0\n"); \
-}
/* Length in units of the trampoline for entering a nested function. */
#define TRAMPOLINE_SIZE 16
-/* Alignment required for a trampoline in units. */
-#define TRAMPOLINE_ALIGN 4
+/* Alignment required for a trampoline in bits . */
+#define TRAMPOLINE_ALIGNMENT \
+ ((CACHE_LOG < 3 || TARGET_SMALLCODE) ? 32 : 64) \
/* Emit RTL insns to initialize the variable parts of a trampoline.
FNADDR is an RTX for the address of the function's pure code.
@@ -882,6 +918,10 @@ extern int current_function_anonymous_args;
#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
{ \
+ emit_move_insn (gen_rtx (MEM, SImode, (TRAMP)), \
+ GEN_INT (TARGET_LITTLE_ENDIAN ? 0xd301dd02 : 0xdd02d301));\
+ emit_move_insn (gen_rtx (MEM, SImode, plus_constant ((TRAMP), 4)), \
+ GEN_INT (TARGET_LITTLE_ENDIAN ? 0x00094d2b : 0x4d2b0009));\
emit_move_insn (gen_rtx (MEM, SImode, plus_constant ((TRAMP), 8)), \
(CXT)); \
emit_move_insn (gen_rtx (MEM, SImode, plus_constant ((TRAMP), 12)), \
@@ -894,7 +934,7 @@ extern int current_function_anonymous_args;
can ignore COUNT. */
#define RETURN_ADDR_RTX(COUNT, FRAME) \
- ((COUNT == 0) \
+ (((COUNT) == 0) \
? gen_rtx (MEM, Pmode, gen_rtx (REG, Pmode, RETURN_ADDRESS_POINTER_REGNUM)) \
: (rtx) 0)
@@ -974,18 +1014,18 @@ extern struct rtx_def *sh_builtin_saveregs ();
/* Nonzero if X/OFFSET is a hard reg that can be used as an index. */
#define SUBREG_OK_FOR_INDEX_P(X, OFFSET) \
- (REGNO_OK_FOR_INDEX_P (REGNO (X)) && OFFSET == 0)
+ (REGNO_OK_FOR_INDEX_P (REGNO (X)) && (OFFSET) == 0)
#endif
/* The 'Q' constraint is a pc relative load operand. */
#define EXTRA_CONSTRAINT_Q(OP) \
(GET_CODE (OP) == MEM && \
- ((GET_CODE (XEXP (OP, 0)) == LABEL_REF) \
- || (GET_CODE (XEXP (OP, 0)) == CONST \
- && GET_CODE (XEXP (XEXP (OP, 0), 0)) == PLUS \
- && GET_CODE (XEXP (XEXP (XEXP (OP, 0), 0), 0)) == LABEL_REF \
- && GET_CODE (XEXP (XEXP (XEXP (OP, 0), 0), 1)) == CONST_INT)))
+ ((GET_CODE (XEXP ((OP), 0)) == LABEL_REF) \
+ || (GET_CODE (XEXP ((OP), 0)) == CONST \
+ && GET_CODE (XEXP (XEXP ((OP), 0), 0)) == PLUS \
+ && GET_CODE (XEXP (XEXP (XEXP ((OP), 0), 0), 0)) == LABEL_REF \
+ && GET_CODE (XEXP (XEXP (XEXP ((OP), 0), 0), 1)) == CONST_INT)))
#define EXTRA_CONSTRAINT(OP, C) \
((C) == 'Q' ? EXTRA_CONSTRAINT_Q (OP) \
@@ -1000,7 +1040,7 @@ extern struct rtx_def *sh_builtin_saveregs ();
#define MODE_DISP_OK_4(X,MODE) \
(GET_MODE_SIZE (MODE) == 4 && (unsigned) INTVAL (X) < 64 \
- && ! (INTVAL (X) & 3) && ! (TARGET_SH3E && MODE == SFmode))
+ && ! (INTVAL (X) & 3) && ! (TARGET_SH3E && (MODE) == SFmode))
#define MODE_DISP_OK_8(X,MODE) ((GET_MODE_SIZE(MODE)==8) && ((unsigned)INTVAL(X)<60) && (!(INTVAL(X) &3)))
#define BASE_REGISTER_RTX_P(X) \
@@ -1044,8 +1084,8 @@ extern struct rtx_def *sh_builtin_saveregs ();
do { \
if (GET_CODE (OP) == CONST_INT) \
{ \
- if (MODE_DISP_OK_4 (OP, MODE)) goto LABEL; \
- if (MODE_DISP_OK_8 (OP, MODE)) goto LABEL; \
+ if (MODE_DISP_OK_4 ((OP), (MODE))) goto LABEL; \
+ if (MODE_DISP_OK_8 ((OP), (MODE))) goto LABEL; \
} \
} while(0)
@@ -1054,14 +1094,14 @@ extern struct rtx_def *sh_builtin_saveregs ();
if (BASE_REGISTER_RTX_P (X)) \
goto LABEL; \
else if ((GET_CODE (X) == POST_INC || GET_CODE (X) == PRE_DEC) \
- && BASE_REGISTER_RTX_P (XEXP (X, 0))) \
+ && BASE_REGISTER_RTX_P (XEXP ((X), 0))) \
goto LABEL; \
- else if (GET_CODE (X) == PLUS) \
+ else if (GET_CODE (X) == PLUS && MODE != PSImode) \
{ \
- rtx xop0 = XEXP (X, 0); \
- rtx xop1 = XEXP (X, 1); \
+ rtx xop0 = XEXP ((X), 0); \
+ rtx xop1 = XEXP ((X), 1); \
if (GET_MODE_SIZE (MODE) <= 8 && BASE_REGISTER_RTX_P (xop0)) \
- GO_IF_LEGITIMATE_INDEX (MODE, xop1, LABEL); \
+ GO_IF_LEGITIMATE_INDEX ((MODE), xop1, LABEL); \
if (GET_MODE_SIZE (MODE) <= 4) \
{ \
if (BASE_REGISTER_RTX_P (xop1) && INDEX_REGISTER_RTX_P (xop0))\
@@ -1094,15 +1134,15 @@ extern struct rtx_def *sh_builtin_saveregs ();
if (GET_CODE (X) == PLUS \
&& (GET_MODE_SIZE (MODE) == 4 \
|| GET_MODE_SIZE (MODE) == 8) \
- && GET_CODE (XEXP (X, 1)) == CONST_INT \
- && BASE_REGISTER_RTX_P (XEXP (X, 0)) \
- && ! (TARGET_SH3E && MODE == SFmode)) \
+ && GET_CODE (XEXP ((X), 1)) == CONST_INT \
+ && BASE_REGISTER_RTX_P (XEXP ((X), 0)) \
+ && ! (TARGET_SH3E && (MODE) == SFmode)) \
{ \
- rtx index_rtx = XEXP (X, 1); \
+ rtx index_rtx = XEXP ((X), 1); \
HOST_WIDE_INT offset = INTVAL (index_rtx), offset_base; \
rtx sum; \
\
- GO_IF_LEGITIMATE_INDEX (MODE, index_rtx, WIN); \
+ GO_IF_LEGITIMATE_INDEX ((MODE), index_rtx, WIN); \
/* On rare occasions, we might get an unaligned pointer \
that is indexed in a way to give an aligned address. \
Therefore, keep the lower two bits in offset_base. */ \
@@ -1120,7 +1160,7 @@ extern struct rtx_def *sh_builtin_saveregs ();
prevalent. */ \
if (GET_MODE_SIZE (MODE) + offset - offset_base <= 64) \
{ \
- sum = expand_binop (Pmode, add_optab, XEXP (X, 0), \
+ sum = expand_binop (Pmode, add_optab, XEXP ((X), 0), \
GEN_INT (offset_base), NULL_RTX, 0, \
OPTAB_LIB_WIDEN); \
\
@@ -1131,7 +1171,13 @@ extern struct rtx_def *sh_builtin_saveregs ();
}
/* Go to LABEL if ADDR (a legitimate address expression)
- has an effect that depends on the machine mode it is used for. */
+ has an effect that depends on the machine mode it is used for.
+
+ ??? Strictly speaking, we should also include all indexed addressing,
+ because the index scale factor is the length of the operand.
+ However, the impact of GO_IF_MODE_DEPENDENT_ADDRESS would be to
+ high if we did that. So we rely on reload to fix things up. */
+
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
{ \
if (GET_CODE(ADDR) == PRE_DEC || GET_CODE(ADDR) == POST_INC) \
@@ -1203,14 +1249,11 @@ extern struct rtx_def *sh_builtin_saveregs ();
that the native compiler puts too large (> 32) immediate shift counts
into a register and shifts by the register, letting the SH decide what
to do instead of doing that itself. */
-/* ??? This is defined, but the library routines in lib1funcs.asm do not
- truncate the shift count. This may result in incorrect results for
- unusual cases. Truncating the shift counts in the library routines would
- make them faster. However, the SH3 has hardware shifts that do not
- truncate, so it appears that we need to leave this undefined for correct
- SH3 code. We can still using truncation in the library routines though to
- make them faster. */
-#define SHIFT_COUNT_TRUNCATED 1
+/* ??? The library routines in lib1funcs.asm truncate the shift count.
+ However, the SH3 has hardware shifts that do not truncate exactly as gcc
+ expects - the sign bit is significant - so it appears that we need to
+ leave this zero for correct SH3 code. */
+#define SHIFT_COUNT_TRUNCATED (! TARGET_SH3)
/* All integers have the same format so truncation is easy. */
#define TRULY_NOOP_TRUNCATION(OUTPREC,INPREC) 1
@@ -1237,7 +1280,7 @@ extern struct rtx_def *sh_builtin_saveregs ();
return 0; \
else if (CONST_OK_FOR_I (INTVAL (RTX))) \
return 1; \
- else if ((OUTER_CODE == AND || OUTER_CODE == IOR || OUTER_CODE == XOR) \
+ else if (((OUTER_CODE) == AND || (OUTER_CODE) == IOR || (OUTER_CODE) == XOR) \
&& CONST_OK_FOR_L (INTVAL (RTX))) \
return 1; \
else \
@@ -1303,15 +1346,12 @@ extern struct rtx_def *sh_builtin_saveregs ();
#define ADDRESS_COST(RTX) 1
/* Compute extra cost of moving data between one register class
- and another.
-
- On the SH it is hard to move into the T reg, but simple to load
- from it. */
+ and another. */
#define REGISTER_MOVE_COST(SRCCLASS, DSTCLASS) \
- (((DSTCLASS == T_REGS) || (DSTCLASS == PR_REG)) ? 10 \
- : ((DSTCLASS == FP_REGS && SRCCLASS == GENERAL_REGS) \
- || (DSTCLASS == GENERAL_REGS && SRCCLASS == FP_REGS)) ? 4 \
+ ((DSTCLASS) == PR_REG ? 10 \
+ : (((DSTCLASS) == FP_REGS && (SRCCLASS) == GENERAL_REGS) \
+ || ((DSTCLASS) == GENERAL_REGS && (SRCCLASS) == FP_REGS)) ? 4 \
: 1)
/* ??? Perhaps make MEMORY_MOVE_COST depend on compiler option? This
@@ -1377,10 +1417,10 @@ dtors_section() \
do { fprintf (FILE, ".section\t%s\n", NAME); } while (0)
#define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \
- do { ctors_section(); fprintf(FILE,"\t.long\t_%s\n", NAME); } while (0)
+ do { ctors_section(); asm_fprintf((FILE),"\t.long\t%U%s\n", (NAME)); } while (0)
#define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \
- do { dtors_section(); fprintf(FILE,"\t.long\t_%s\n", NAME); } while (0)
+ do { dtors_section(); asm_fprintf((FILE),"\t.long\t%U%s\n", (NAME)); } while (0)
#undef DO_GLOBAL_CTORS_BODY
@@ -1410,10 +1450,10 @@ dtors_section() \
}
#define ASM_OUTPUT_REG_PUSH(file, v) \
- fprintf (file, "\tmov.l r%s,-@r15\n", v);
+ fprintf ((file), "\tmov.l\tr%s,-@r15\n", (v));
#define ASM_OUTPUT_REG_POP(file, v) \
- fprintf (file, "\tmov.l @r15+,r%s\n", v);
+ fprintf ((file), "\tmov.l\t@r15+,r%s\n", (v));
/* The assembler's names for the registers. RFP need not always be used as
the Real framepointer; it can also be used as a normal general register.
@@ -1436,7 +1476,7 @@ dtors_section() \
/* Output a label definition. */
#define ASM_OUTPUT_LABEL(FILE,NAME) \
- do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0)
+ do { assemble_name ((FILE), (NAME)); fputs (":\n", (FILE)); } while (0)
/* This is how to output an assembler line
that says to advance the location counter
@@ -1444,29 +1484,33 @@ dtors_section() \
#define ASM_OUTPUT_ALIGN(FILE,LOG) \
if ((LOG) != 0) \
- fprintf (FILE, "\t.align %d\n", LOG)
+ fprintf ((FILE), "\t.align %d\n", (LOG))
/* Output a function label definition. */
#define ASM_DECLARE_FUNCTION_NAME(STREAM,NAME,DECL) \
- ASM_OUTPUT_LABEL(STREAM, NAME)
+ ASM_OUTPUT_LABEL((STREAM), (NAME))
/* Output a globalising directive for a label. */
#define ASM_GLOBALIZE_LABEL(STREAM,NAME) \
- (fprintf (STREAM, "\t.global\t"), \
- assemble_name (STREAM, NAME), \
- fputc ('\n',STREAM))
+ (fprintf ((STREAM), "\t.global\t"), \
+ assemble_name ((STREAM), (NAME)), \
+ fputc ('\n', (STREAM)))
/* The prefix to add to user-visible assembler symbols. */
#define USER_LABEL_PREFIX "_"
+/* The prefix to add to an internally generated label. */
+
+#define LOCAL_LABEL_PREFIX ""
+
/* Make an internal label into a string. */
#define ASM_GENERATE_INTERNAL_LABEL(STRING, PREFIX, NUM) \
- sprintf (STRING, "*%s%d", PREFIX, NUM)
+ sprintf ((STRING), "*%s%s%d", LOCAL_LABEL_PREFIX, (PREFIX), (NUM))
/* Output an internal label definition. */
#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \
- fprintf (FILE, "%s%d:\n", PREFIX, NUM)
+ asm_fprintf ((FILE), "%L%s%d:\n", (PREFIX), (NUM))
/* #define ASM_OUTPUT_CASE_END(STREAM,NUM,TABLE) */
@@ -1477,23 +1521,31 @@ dtors_section() \
/* Jump tables must be 32 bit aligned, no matter the size of the element. */
#define ASM_OUTPUT_CASE_LABEL(STREAM,PREFIX,NUM,TABLE) \
- fprintf (STREAM, "\t.align 2\n%s%d:\n", PREFIX, NUM);
+ fprintf ((STREAM), "\t.align 2\n%s%d:\n", (PREFIX), (NUM));
/* Output a relative address table. */
#define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM,VALUE,REL) \
- if (TARGET_BIGTABLE) \
- fprintf (STREAM, "\t.long L%d-L%d\n", VALUE,REL); \
- else \
- fprintf (STREAM, "\t.word L%d-L%d\n", VALUE,REL); \
+ switch (sh_addr_diff_vec_mode) \
+ { \
+ case SImode: \
+ asm_fprintf ((STREAM), "\t.long\t%LL%d-%LL%d\n", (VALUE),(REL)); \
+ break; \
+ case HImode: \
+ asm_fprintf ((STREAM), "\t.word\t%LL%d-%LL%d\n", (VALUE),(REL)); \
+ break; \
+ case QImode: \
+ asm_fprintf ((STREAM), "\t.byte\t%LL%d-%LL%d\n", (VALUE),(REL)); \
+ break; \
+ }
/* Output an absolute table element. */
#define ASM_OUTPUT_ADDR_VEC_ELT(STREAM,VALUE) \
if (TARGET_BIGTABLE) \
- fprintf (STREAM, "\t.long L%d\n", VALUE); \
+ asm_fprintf ((STREAM), "\t.long\t%LL%d\n", (VALUE)); \
else \
- fprintf (STREAM, "\t.word L%d\n", VALUE); \
+ asm_fprintf ((STREAM), "\t.word\t%LL%d\n", (VALUE)); \
/* Output various types of constants. */
@@ -1502,50 +1554,46 @@ dtors_section() \
#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \
do { char dstr[30]; \
REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \
- fprintf (FILE, "\t.double %s\n", dstr); \
+ fprintf ((FILE), "\t.double %s\n", dstr); \
} while (0)
/* This is how to output an assembler line defining a `float' constant. */
#define ASM_OUTPUT_FLOAT(FILE,VALUE) \
do { char dstr[30]; \
REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \
- fprintf (FILE, "\t.float %s\n", dstr); \
+ fprintf ((FILE), "\t.float %s\n", dstr); \
} while (0)
-#define ASM_OUTPUT_INT(STREAM, EXP) \
- (fprintf (STREAM, "\t.long\t"), \
- output_addr_const (STREAM, (EXP)), \
- fputc ('\n', STREAM))
+#define ASM_OUTPUT_INT(STREAM, EXP) \
+ (fprintf ((STREAM), "\t.long\t"), \
+ output_addr_const ((STREAM), (EXP)), \
+ fputc ('\n', (STREAM)))
#define ASM_OUTPUT_SHORT(STREAM, EXP) \
- (fprintf (STREAM, "\t.short\t"), \
- output_addr_const (STREAM, (EXP)), \
- fputc ('\n', STREAM))
+ (fprintf ((STREAM), "\t.short\t"), \
+ output_addr_const ((STREAM), (EXP)), \
+ fputc ('\n', (STREAM)))
-#define ASM_OUTPUT_CHAR(STREAM, EXP) \
- (fprintf (STREAM, "\t.byte\t"), \
- output_addr_const (STREAM, (EXP)), \
- fputc ('\n', STREAM))
+#define ASM_OUTPUT_CHAR(STREAM, EXP) \
+ (fprintf ((STREAM), "\t.byte\t"), \
+ output_addr_const ((STREAM), (EXP)), \
+ fputc ('\n', (STREAM)))
#define ASM_OUTPUT_BYTE(STREAM, VALUE) \
- fprintf (STREAM, "\t.byte\t%d\n", VALUE) \
+ fprintf ((STREAM), "\t.byte\t%d\n", (VALUE)) \
-/* Align loops and labels after unconditional branches to get faster
- code. */
+/* The next two are used for debug info when compiling with -gdwarf. */
+#define UNALIGNED_SHORT_ASM_OP ".uaword"
+#define UNALIGNED_INT_ASM_OP ".ualong"
-#define ASM_OUTPUT_LOOP_ALIGN(FILE) \
- if (! TARGET_SMALLCODE) \
- ASM_OUTPUT_ALIGN ((FILE), 2)
-
-#define ASM_OUTPUT_ALIGN_CODE(FILE) \
- if (! TARGET_SMALLCODE) \
- ASM_OUTPUT_ALIGN ((FILE), (TARGET_SH3 || TARGET_SH3E) ? 4 : 2)
+/* Loop alignment is now done in machine_dependent_reorg, so that
+ branch shortening can know about it. */
/* 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.space %d\n", (SIZE))
+ fprintf ((FILE), "\t.space %d\n", (SIZE))
/* This says how to output an assembler line
to define a global common symbol. */
@@ -1558,7 +1606,7 @@ do { char dstr[30]; \
/* This says how to output an assembler line
to define a local common symbol. */
-#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE,ROUNDED) \
+#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \
( fputs ("\t.lcomm ", (FILE)), \
assemble_name ((FILE), (NAME)), \
fprintf ((FILE), ",%d\n", (SIZE)))
@@ -1576,23 +1624,33 @@ do { char dstr[30]; \
#define TARGET_FF 014
#define TARGET_CR 015
-/* Only perform branch elimination (by making instructions conditional) if
- we're optimizing. Otherwise it's of no use anyway. */
+/* A C statement to be executed just prior to the output of
+ assembler code for INSN, to modify the extracted operands so
+ they will be output differently.
+
+ Here the argument OPVEC is the vector containing the operands
+ extracted from INSN, and NOPERANDS is the number of elements of
+ the vector which contain meaningful data for this insn.
+ The contents of this vector are what will be used to convert the insn
+ template into assembler code, so you can change the assembler output
+ by changing the contents of the vector. */
+
#define FINAL_PRESCAN_INSN(INSN, OPVEC, NOPERANDS) \
- final_prescan_insn (INSN, OPVEC, NOPERANDS)
+ final_prescan_insn ((INSN), (OPVEC), (NOPERANDS))
/* 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(STREAM, X, CODE) print_operand (STREAM, X, CODE)
+#define PRINT_OPERAND(STREAM, X, CODE) print_operand ((STREAM), (X), (CODE))
/* Print a memory address as an operand to reference that memory location. */
-#define PRINT_OPERAND_ADDRESS(STREAM,X) print_operand_address (STREAM, X)
+#define PRINT_OPERAND_ADDRESS(STREAM,X) print_operand_address ((STREAM), (X))
#define PRINT_OPERAND_PUNCT_VALID_P(CHAR) \
- ((CHAR)=='.' || (CHAR) == '#' || (CHAR)=='@')
+ ((CHAR) == '.' || (CHAR) == '#' || (CHAR) == '@' || (CHAR) == ',' \
+ || (CHAR) == '$')
extern struct rtx_def *sh_compare_op0;
extern struct rtx_def *sh_compare_op1;
@@ -1602,7 +1660,6 @@ extern struct rtx_def *prepare_scc_operands();
match exactly the cpu attribute in the sh.md file. */
enum processor_type {
- PROCESSOR_SH0,
PROCESSOR_SH1,
PROCESSOR_SH2,
PROCESSOR_SH3,
@@ -1612,15 +1669,39 @@ enum processor_type {
#define sh_cpu_attr ((enum attr_cpu)sh_cpu)
extern enum processor_type sh_cpu;
+extern enum machine_mode sh_addr_diff_vec_mode;
+
+extern int optimize; /* needed for gen_casesi, and addr_diff_vec_adjust. */
+
/* Declare functions defined in sh.c and used in templates. */
extern char *output_branch();
+extern char *output_ieee_ccmpeq();
+extern char *output_branchy_insn();
extern char *output_shift();
extern char *output_movedouble();
extern char *output_movepcrel();
extern char *output_jump_label_table();
extern char *output_far_jump();
+enum mdep_reorg_phase_e
+{
+ SH_BEFORE_MDEP_REORG,
+ SH_INSERT_USES_LABELS,
+ SH_SHORTEN_BRANCHES0,
+ SH_FIXUP_PCLOAD,
+ SH_SHORTEN_BRANCHES1,
+ SH_AFTER_MDEP_REORG
+};
+
+void machine_dependent_reorg ();
+int short_cbranch_p ();
+int med_branch_p ();
+int braf_branch_p ();
+int align_length ();
+int addr_diff_vec_adjust ();
+struct rtx_def *sfunc_uses_reg ();
+
#define MACHINE_DEPENDENT_REORG(X) machine_dependent_reorg(X)
/* Generate calls to memcpy, memcmp and memset. */
@@ -1633,7 +1714,7 @@ extern char *output_far_jump();
text can be read. CH is the first character after the #pragma. The
result of the expression is the terminating character found
(newline or EOF). */
-#define HANDLE_PRAGMA(FILE, NODE) handle_pragma (FILE, NODE)
+#define HANDLE_PRAGMA(FILE, NODE) handle_pragma ((FILE), (NODE))
/* Set when processing a function with pragma interrupt turned on. */
@@ -1662,45 +1743,32 @@ sh_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS)
#define ADJUST_INSN_LENGTH(X, LENGTH) \
if (((GET_CODE (X) == INSN \
- && GET_CODE (PATTERN (X)) != SEQUENCE \
&& GET_CODE (PATTERN (X)) != USE \
&& GET_CODE (PATTERN (X)) != CLOBBER) \
|| GET_CODE (X) == CALL_INSN \
|| (GET_CODE (X) == JUMP_INSN \
&& GET_CODE (PATTERN (X)) != ADDR_DIFF_VEC \
&& GET_CODE (PATTERN (X)) != ADDR_VEC)) \
+ && GET_CODE (PATTERN (NEXT_INSN (PREV_INSN (X)))) != SEQUENCE \
&& get_attr_needs_delay_slot (X) == NEEDS_DELAY_SLOT_YES) \
- LENGTH += 2; \
- if (! TARGET_SMALLCODE) \
+ (LENGTH) += 2; \
+ if (GET_CODE (X) == INSN \
+ && GET_CODE (PATTERN (X)) == UNSPEC_VOLATILE \
+ && XINT (PATTERN (X), 1) == 7) \
+ (LENGTH) -= addr_diff_vec_adjust (X, LENGTH); \
+ if (GET_CODE (X) == INSN \
+ && GET_CODE (PATTERN (X)) == UNSPEC_VOLATILE \
+ && XINT (PATTERN (X), 1) == 1) \
+ (LENGTH) = align_length (X); \
+ if (GET_CODE (X) == JUMP_INSN \
+ && GET_CODE (PATTERN (X)) == ADDR_DIFF_VEC) \
{ \
- /* After the folowing loop, PAD will be an upper bound \
- for the number of padding bytes the alignment will \
- require. */ \
- rtx aip; \
- int pad = 0; \
- for (aip = PREV_INSN (X); aip; aip = PREV_INSN (aip)) \
- { \
- if (GET_CODE (aip) == BARRIER) \
- { \
- if (TARGET_SH3 || TARGET_SH3E) \
- pad = 14; \
- else \
- pad = 2; \
- break; \
- } \
- else if ((GET_CODE (aip) == NOTE \
- && NOTE_LINE_NUMBER (aip) == NOTE_INSN_LOOP_BEG)) \
- { \
- pad = 2; \
- /* Don't break here, because there might be a \
- preceding BARRIER, which requires mores \
- alignment for SH3[E] . */ \
- } \
- else if (GET_CODE (aip) != NOTE \
- && GET_CODE (aip) != CODE_LABEL) \
- break; \
- } \
- LENGTH += pad; \
+ /* The code before an ADDR_DIFF_VEC is even aligned, \
+ thus any odd estimate is wrong. */ \
+ (LENGTH) &= ~1; \
+ /* If not optimizing, the alignment is implicit. */ \
+ if (! optimize) \
+ (LENGTH) += 2; \
}
/* Enable a bug fix for the shorten_branches pass. */
@@ -1708,12 +1776,14 @@ sh_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS)
/* Define the codes that are matched by predicates in sh.c. */
#define PREDICATE_CODES \
- {"arith_reg_operand", {SUBREG, REG}}, \
{"arith_operand", {SUBREG, REG, CONST_INT}}, \
+ {"arith_reg_operand", {SUBREG, REG}}, \
{"arith_reg_or_0_operand", {SUBREG, REG, CONST_INT}}, \
- {"logical_operand", {SUBREG, REG, CONST_INT}}, \
+ {"braf_label_ref_operand", {LABEL_REF}}, \
{"general_movsrc_operand", {SUBREG, REG, CONST_INT, MEM}}, \
- {"general_movdst_operand", {SUBREG, REG, CONST_INT, MEM}},
+ {"general_movdst_operand", {SUBREG, REG, CONST_INT, MEM}}, \
+ {"logical_operand", {SUBREG, REG, CONST_INT}}, \
+ {"register_operand", {SUBREG, REG}},
/* 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,
@@ -1727,7 +1797,7 @@ sh_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS)
#define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE) \
if (GET_MODE_CLASS (MODE) == MODE_INT \
&& GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \
- MODE = SImode;
+ (MODE) = SImode;
/* Defining PROMOTE_FUNCTION_ARGS eliminates some unnecessary zero/sign
extensions applied to char/short functions arguments. Defining
@@ -1749,11 +1819,10 @@ sh_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS)
the scheduler that an output- or anti-dependence does not incur
the same cost as a data-dependence. */
-/* ??? Should anticipate the effect of delayed branch scheduling
- and arrange for a second instruction to be put between the
- load of the function's address and the call. */
-
#define ADJUST_COST(insn,link,dep_insn,cost) \
+do { \
+ rtx reg; \
+ \
if (GET_CODE(insn) == CALL_INSN) \
{ \
/* The only input for a call that is timing-critical is the \
@@ -1764,14 +1833,32 @@ sh_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS)
call = XVECEXP (call, 0 ,0); \
if (GET_CODE (call) == SET) \
call = SET_SRC (call); \
- if (GET_CODE (call) == CALL && GET_CODE (XEXP (call, 0)) == MEM) \
- { \
- rtx set = single_set (dep_insn); \
- \
- if (set && ! rtx_equal_p (SET_DEST (set), XEXP (XEXP (call, 0), 0)))\
- (cost) = 0; \
- } \
- }
+ if (GET_CODE (call) == CALL && GET_CODE (XEXP (call, 0)) == MEM \
+ && ! reg_set_p (XEXP (XEXP (call, 0), 0), dep_insn)) \
+ (cost) = 0; \
+ } \
+ /* All sfunc calls are parallels with at least four components. \
+ Exploit this to avoid unnecessary calls to sfunc_uses_reg. */ \
+ else if (GET_CODE (PATTERN (insn)) == PARALLEL \
+ && XVECLEN (PATTERN (insn), 0) >= 4 \
+ && (reg = sfunc_uses_reg (insn))) \
+ { \
+ /* Likewise, the most timing critical input for an sfuncs call \
+ is the function address. However, sfuncs typically start \
+ using their arguments pretty quickly. \
+ Assume a four cycle delay before they are needed. */ \
+ if (! reg_set_p (reg, dep_insn)) \
+ cost -= 4; \
+ } \
+ /* Adjust load_si / pcload_si type insns latency. Use the known \
+ nominal latency and form of the insn to speed up the check. */ \
+ else if (cost == 3 \
+ && GET_CODE (PATTERN (dep_insn)) == SET \
+ /* Latency for dmpy type insns is also 3, so check the that \
+ it's actually a move insn. */ \
+ && general_movsrc_operand (SET_SRC (PATTERN (dep_insn)), SImode))\
+ cost = 2; \
+} while (0) \
/* Since the SH architecture lacks negative address offsets,
the givs should be sorted smallest to largest so combine_givs
@@ -1783,3 +1870,5 @@ sh_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS)
/* For the sake of libgcc2.c, indicate target supports atexit. */
#define HAVE_ATEXIT
+
+#define SH_DYNAMIC_SHIFT_COST (TARGET_SH3 ? (TARGET_SMALLCODE ? 1 : 2) : 20)
diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md
index 1b0e35d6ff7..35432aa665d 100644
--- a/gcc/config/sh/sh.md
+++ b/gcc/config/sh/sh.md
@@ -1,5 +1,5 @@
;;- Machine description for the Hitachi SH.
-;; Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
;; Contributed by Steve Chamberlain (sac@cygnus.com).
;; Improved by Jim Wilson (wilson@cygnus.com).
@@ -69,67 +69,87 @@
;; Target CPU.
-(define_attr "cpu" "sh0,sh1,sh2,sh3,sh3e"
+(define_attr "cpu"
+ "sh1,sh2,sh3,sh3e"
(const (symbol_ref "sh_cpu_attr")))
+(define_attr "endian" "big,little"
+ (const (if_then_else (symbol_ref "TARGET_LITTLE_ENDIAN")
+ (const_string "little") (const_string "big"))))
+
;; cbranch conditional branch instructions
;; jump unconditional jumps
;; arith ordinary arithmetic
+;; arith3 a compound insn that behaves similarly to a sequence of
+;; three insns of type arith
+;; arith3b like above, but might end with a redirected branch
;; load from memory
+;; load_si Likewise, SImode variant for general register.
;; store to memory
;; move register to register
+;; fmove register to register, floating point
;; smpy word precision integer multiply
;; dmpy longword or doublelongword precision integer multiply
;; return rts
;; pload load of pr reg, which can't be put into delay slot of rts
;; pstore store of pr reg, which can't be put into delay slot of jsr
;; pcload pc relative load of constant value
+;; pcload_si Likewise, SImode variant for general register.
;; rte return from exception
;; sfunc special function call with known used registers
;; call function call
;; fp floating point
;; fdiv floating point divide (or square root)
+;; gp_fpul move between general purpose register and fpul
+;; nil no-op move, will be deleted.
(define_attr "type"
- "cbranch,jump,arith,other,load,store,move,smpy,dmpy,return,pload,pstore,pcload,rte,sfunc,call,fp,fdiv"
+ "cbranch,jump,jump_ind,arith,arith3,arith3b,dyn_shift,other,load,load_si,store,move,fmove,smpy,dmpy,return,pload,pstore,pcload,pcload_si,rte,sfunc,call,fp,fdiv,gp_fpul,nil"
(const_string "other"))
; If a conditional branch destination is within -252..258 bytes away
; from the instruction it can be 2 bytes long. Something in the
; range -4090..4100 bytes can be 6 bytes long. All other conditional
-; branches are 16 bytes long.
+; branches are initially assumed to be 16 bytes long.
+; In machine_dependent_reorg, we split all branches that are longer than
+; 2 bytes.
; An unconditional jump in the range -4092..4098 can be 2 bytes long.
-; Otherwise, it must be 14 bytes long.
+; For wider ranges, we need a combination of a code and a data part.
+; If we can get a scratch register for a long range jump, the code
+; part can be 4 bytes long; otherwise, it must be 8 bytes long.
+; If the jump is in the range -32764..32770, the data part can be 2 bytes
+; long; otherwise, it must be 6 bytes long.
; All other instructions are two bytes long by default.
-; All positive offsets have an adjustment added, which is the number of bytes
-; difference between this instruction length and the next larger instruction
-; length. This is because shorten_branches starts with the largest
-; instruction size and then tries to reduce them.
-
(define_attr "length" ""
(cond [(eq_attr "type" "cbranch")
- (if_then_else (and (ge (minus (match_dup 0) (pc))
- (const_int -252))
- (le (minus (match_dup 0) (pc))
- (const_int 262)))
- (const_int 2)
- (if_then_else (and (ge (minus (match_dup 0) (pc))
- (const_int -4090))
- (le (minus (match_dup 0) (pc))
- (const_int 4110)))
- (const_int 6)
- (const_int 16)))
-
+ (cond [(ne (symbol_ref "short_cbranch_p (insn)") (const_int 0))
+ (const_int 2)
+ (ne (symbol_ref "med_branch_p (insn, 2)") (const_int 0))
+ (const_int 6)
+ (ne (symbol_ref "braf_branch_p (insn, 2)") (const_int 0))
+ (const_int 10)
+ (ne (pc) (pc))
+ (const_int 12)
+ ] (const_int 16))
(eq_attr "type" "jump")
- (if_then_else (and (ge (minus (match_dup 0) (pc))
- (const_int -4092))
- (le (minus (match_dup 0) (pc))
- (const_int 4110)))
- (const_int 2)
- (const_int 14))
+ (cond [(ne (symbol_ref "med_branch_p (insn, 0)") (const_int 0))
+ (const_int 2)
+ (and (eq (symbol_ref "GET_CODE (PREV_INSN (insn))")
+ (symbol_ref "INSN"))
+ (eq (symbol_ref "INSN_CODE (PREV_INSN (insn))")
+ (symbol_ref "code_for_indirect_jump_scratch")))
+ (if_then_else (ne (symbol_ref "braf_branch_p (insn, 0)")
+ (const_int 0))
+ (const_int 6)
+ (const_int 10))
+ (ne (symbol_ref "braf_branch_p (insn, 0)") (const_int 0))
+ (const_int 10)
+ (ne (pc) (pc))
+ (const_int 12)
+ ] (const_int 14))
] (const_int 2)))
;; (define_function_unit {name} {num-units} {n-users} {test}
@@ -140,16 +160,41 @@
;; gcc to separate load and store instructions by one instruction,
;; which makes it more likely that the linker will be able to word
;; align them when relaxing.
+
+;; Loads have a latency of two.
+;; However, call insn can have ;; a delay slot, so that we want one more
+;; insn to be scheduled between the load of the function address and the call.
+;; This is equivalent to a latency of three.
+;; We cannot use a conflict list for this, because we need to distinguish
+;; between the actual call address and the function arguments.
+;; ADJUST_COST can only properly handle reductions of the cost, so we
+;; use a latency of three here.
+;; We only do this for SImode loads of general registers, to make the work
+;; for ADJUST_COST easier.
+(define_function_unit "memory" 1 0
+ (eq_attr "type" "load_si,pcload_si")
+ 3 2)
(define_function_unit "memory" 1 0
- (eq_attr "type" "load,pcload,pload,store,pstore") 2 2)
+ (eq_attr "type" "load,pcload,pload,store,pstore")
+ 2 2)
+
+(define_function_unit "int" 1 0
+ (eq_attr "type" "arith3,arith3b") 3 3)
+
+(define_function_unit "int" 1 0
+ (eq_attr "type" "dyn_shift") 2 2)
+
+(define_function_unit "int" 1 0
+ (eq_attr "type" "arith,arith3b,dyn_shift") 2 2)
;; ??? These are approximations.
(define_function_unit "mpy" 1 0 (eq_attr "type" "smpy") 2 2)
(define_function_unit "mpy" 1 0 (eq_attr "type" "dmpy") 3 3)
-(define_function_unit "fp" 1 0 (eq_attr "type" "fp") 2 1)
+(define_function_unit "fp" 1 0 (eq_attr "type" "fp,fmove") 2 1)
(define_function_unit "fp" 1 0 (eq_attr "type" "fdiv") 13 12)
+
; Definitions for filling branch delay slots.
(define_attr "needs_delay_slot" "yes,no" (const_string "no"))
@@ -161,7 +206,7 @@
(define_attr "in_delay_slot" "yes,no"
(cond [(eq_attr "type" "cbranch") (const_string "no")
- (eq_attr "type" "pcload") (const_string "no")
+ (eq_attr "type" "pcload,pcload_si") (const_string "no")
(eq_attr "needs_delay_slot" "yes") (const_string "no")
(eq_attr "length" "2") (const_string "yes")
] (const_string "no")))
@@ -197,14 +242,9 @@
;; Say that we have annulled true branches, since this gives smaller and
;; faster code when branches are predicted as not taken.
-;; ??? Branches which are out-of-range actually have two delay slots,
-;; the first is either always executed or else annulled false, and the
-;; second is always annulled false. Handling these differently from
-;; in range branches would give better code.
-
(define_delay
(and (eq_attr "type" "cbranch")
- (eq_attr "cpu" "sh2,sh3"))
+ (ne (symbol_ref "TARGET_SH2") (const_int 0)))
[(eq_attr "in_delay_slot" "yes") (eq_attr "in_delay_slot" "yes") (nil)])
;; -------------------------------------------------------------------------
@@ -212,13 +252,6 @@
;; -------------------------------------------------------------------------
(define_insn ""
- [(set (match_operand:SI 0 "arith_reg_operand" "=r")
- (eq:SI (reg:SI 18)
- (const_int 1)))]
- ""
- "movt %0")
-
-(define_insn ""
[(set (reg:SI 18)
(eq:SI (and:SI (match_operand:SI 0 "arith_reg_operand" "z,r")
(match_operand:SI 1 "arith_operand" "L,r"))
@@ -288,6 +321,93 @@
}")
;; -------------------------------------------------------------------------
+;; DImode signed integer comparisons
+;; -------------------------------------------------------------------------
+
+;; ??? Could get better scheduling by splitting the initial test from the
+;; rest of the insn after reload. However, the gain would hardly justify
+;; the sh.md size increase necessary to do that.
+
+(define_insn ""
+ [(set (reg:SI 18)
+ (eq:SI (and:DI (match_operand:DI 0 "arith_reg_operand" "r")
+ (match_operand:DI 1 "arith_operand" "r"))
+ (const_int 0)))]
+ ""
+ "* return output_branchy_insn (EQ, \"tst\\t%S1,%S0\;bf\\t%l9\;tst\\t%R1,%R0\",
+ insn, operands);"
+ [(set_attr "length" "6")
+ (set_attr "type" "arith3b")])
+
+(define_insn "cmpeqdi_t"
+ [(set (reg:SI 18) (eq:SI (match_operand:DI 0 "arith_reg_operand" "r,r")
+ (match_operand:DI 1 "arith_reg_or_0_operand" "N,r")))]
+ ""
+ "*
+ return output_branchy_insn
+ (EQ,
+ (which_alternative
+ ? \"cmp/eq\\t%S1,%S0\;bf\\t%l9\;cmp/eq\\t%R1,%R0\"
+ : \"tst\\t%S0,%S0\;bf\\t%l9\;tst\\t%R0,%R0\"),
+ insn, operands);"
+ [(set_attr "length" "6")
+ (set_attr "type" "arith3b")])
+
+(define_insn "cmpgtdi_t"
+ [(set (reg:SI 18) (gt:SI (match_operand:DI 0 "arith_reg_operand" "r,r")
+ (match_operand:DI 1 "arith_reg_or_0_operand" "r,N")))]
+ "TARGET_SH2"
+ "@
+ cmp/eq\\t%S1,%S0\;bf{.|/}s\\t%,Ldi%=\;cmp/gt\\t%S1,%S0\;cmp/hi\\t%R1,%R0\\n%,Ldi%=:
+ tst\\t%S0,%S0\;bf{.|/}s\\t%,Ldi%=\;cmp/pl\\t%S0\;cmp/hi\\t%S0,%R0\\n%,Ldi%=:"
+ [(set_attr "length" "8")
+ (set_attr "type" "arith3")])
+
+(define_insn "cmpgedi_t"
+ [(set (reg:SI 18) (ge:SI (match_operand:DI 0 "arith_reg_operand" "r,r")
+ (match_operand:DI 1 "arith_reg_or_0_operand" "r,N")))]
+ "TARGET_SH2"
+ "@
+ cmp/eq\\t%S1,%S0\;bf{.|/}s\\t%,Ldi%=\;cmp/ge\\t%S1,%S0\;cmp/hs\\t%R1,%R0\\n%,Ldi%=:
+ cmp/pz\\t%S0"
+ [(set_attr "length" "8,2")
+ (set_attr "type" "arith3,arith")])
+
+;; -------------------------------------------------------------------------
+;; DImode unsigned integer comparisons
+;; -------------------------------------------------------------------------
+
+(define_insn "cmpgeudi_t"
+ [(set (reg:SI 18) (geu:SI (match_operand:DI 0 "arith_reg_operand" "r")
+ (match_operand:DI 1 "arith_reg_operand" "r")))]
+ "TARGET_SH2"
+ "cmp/eq\\t%S1,%S0\;bf{.|/}s\\t%,Ldi%=\;cmp/hs\\t%S1,%S0\;cmp/hs\\t%R1,%R0\\n%,Ldi%=:"
+ [(set_attr "length" "8")
+ (set_attr "type" "arith3")])
+
+(define_insn "cmpgtudi_t"
+ [(set (reg:SI 18) (gtu:SI (match_operand:DI 0 "arith_reg_operand" "r")
+ (match_operand:DI 1 "arith_reg_operand" "r")))]
+ "TARGET_SH2"
+ "cmp/eq\\t%S1,%S0\;bf{.|/}s\\t%,Ldi%=\;cmp/hi\\t%S1,%S0\;cmp/hi\\t%R1,%R0\\n%,Ldi%=:"
+ [(set_attr "length" "8")
+ (set_attr "type" "arith3")])
+
+;; We save the compare operands in the cmpxx patterns and use them when
+;; we generate the branch.
+
+(define_expand "cmpdi"
+ [(set (reg:SI 18) (compare (match_operand:DI 0 "arith_operand" "")
+ (match_operand:DI 1 "arith_operand" "")))]
+ "TARGET_SH2"
+ "
+{
+ sh_compare_op0 = operands[0];
+ sh_compare_op1 = operands[1];
+ DONE;
+}")
+
+;; -------------------------------------------------------------------------
;; Addition instructions
;; -------------------------------------------------------------------------
@@ -299,9 +419,50 @@
(match_operand:DI 2 "arith_reg_operand" "r")))
(clobber (reg:SI 18))]
""
- "clrt\;addc %R2,%R0\;addc %S2,%S0"
+ "#"
[(set_attr "length" "6")])
+(define_split
+ [(set (match_operand:DI 0 "arith_reg_operand" "=r")
+ (plus:DI (match_operand:DI 1 "arith_reg_operand" "%0")
+ (match_operand:DI 2 "arith_reg_operand" "r")))
+ (clobber (reg:SI 18))]
+ "reload_completed"
+ [(const_int 0)]
+ "
+{
+ rtx high0, high2, low0 = gen_lowpart (SImode, operands[0]);
+ high0 = gen_rtx (REG, SImode,
+ true_regnum (operands[0]) + (TARGET_LITTLE_ENDIAN ? 1 : 0));
+ high2 = gen_rtx (REG, SImode,
+ true_regnum (operands[2]) + (TARGET_LITTLE_ENDIAN ? 1 : 0));
+ emit_insn (gen_clrt ());
+ emit_insn (gen_addc (low0, low0, gen_lowpart (SImode, operands[2])));
+ emit_insn (gen_addc1 (high0, high0, high2));
+ DONE;
+}")
+
+(define_insn "addc"
+ [(set (match_operand:SI 0 "arith_reg_operand" "=r")
+ (plus:SI (plus:SI (match_operand:SI 1 "arith_reg_operand" "0")
+ (match_operand:SI 2 "arith_reg_operand" "r"))
+ (reg:SI 18)))
+ (set (reg:SI 18)
+ (ltu:SI (plus:SI (match_dup 1) (match_dup 2)) (match_dup 1)))]
+ ""
+ "addc %2,%0"
+ [(set_attr "type" "arith")])
+
+(define_insn "addc1"
+ [(set (match_operand:SI 0 "arith_reg_operand" "=r")
+ (plus:SI (plus:SI (match_operand:SI 1 "arith_reg_operand" "0")
+ (match_operand:SI 2 "arith_reg_operand" "r"))
+ (reg:SI 18)))
+ (clobber (reg:SI 18))]
+ ""
+ "addc %2,%0"
+ [(set_attr "type" "arith")])
+
(define_insn "addsi3"
[(set (match_operand:SI 0 "arith_reg_operand" "=r")
(plus:SI (match_operand:SI 1 "arith_operand" "%0")
@@ -322,9 +483,50 @@
(match_operand:DI 2 "arith_reg_operand" "r")))
(clobber (reg:SI 18))]
""
- "clrt\;subc %R2,%R0\;subc %S2,%S0"
+ "#"
[(set_attr "length" "6")])
+(define_split
+ [(set (match_operand:DI 0 "arith_reg_operand" "=r")
+ (minus:DI (match_operand:DI 1 "arith_reg_operand" "0")
+ (match_operand:DI 2 "arith_reg_operand" "r")))
+ (clobber (reg:SI 18))]
+ "reload_completed"
+ [(const_int 0)]
+ "
+{
+ rtx high0, high2, low0 = gen_lowpart (SImode, operands[0]);
+ high0 = gen_rtx (REG, SImode,
+ true_regnum (operands[0]) + (TARGET_LITTLE_ENDIAN ? 1 : 0));
+ high2 = gen_rtx (REG, SImode,
+ true_regnum (operands[2]) + (TARGET_LITTLE_ENDIAN ? 1 : 0));
+ emit_insn (gen_clrt ());
+ emit_insn (gen_subc (low0, low0, gen_lowpart (SImode, operands[2])));
+ emit_insn (gen_subc1 (high0, high0, high2));
+ DONE;
+}")
+
+(define_insn "subc"
+ [(set (match_operand:SI 0 "arith_reg_operand" "=r")
+ (minus:SI (minus:SI (match_operand:SI 1 "arith_reg_operand" "0")
+ (match_operand:SI 2 "arith_reg_operand" "r"))
+ (reg:SI 18)))
+ (set (reg:SI 18)
+ (gtu:SI (minus:SI (match_dup 1) (match_dup 2)) (match_dup 1)))]
+ ""
+ "subc %2,%0"
+ [(set_attr "type" "arith")])
+
+(define_insn "subc1"
+ [(set (match_operand:SI 0 "arith_reg_operand" "=r")
+ (minus:SI (minus:SI (match_operand:SI 1 "arith_reg_operand" "0")
+ (match_operand:SI 2 "arith_reg_operand" "r"))
+ (reg:SI 18)))
+ (clobber (reg:SI 18))]
+ ""
+ "subc %2,%0"
+ [(set_attr "type" "arith")])
+
(define_insn "*subsi3_internal"
[(set (match_operand:SI 0 "arith_reg_operand" "=r")
(minus:SI (match_operand:SI 1 "arith_reg_operand" "0")
@@ -360,6 +562,17 @@
;; We take advantage of the library routines which don't clobber as many
;; registers as a normal function call would.
+;; The INSN_REFERENCES_ARE_DELAYED in sh.h is problematic because it
+;; also has an effect on the register that holds the address of the sfunc.
+;; To make this work, we have an extra dummy insns that shows the use
+;; of this register for reorg.
+
+(define_insn "use_sfunc_addr"
+ [(set (reg:SI 17) (unspec [(match_operand:SI 0 "register_operand" "r")] 5))]
+ ""
+ ""
+ [(set_attr "length" "0")])
+
;; We must use a pseudo-reg forced to reg 0 in the SET_DEST rather than
;; hard register 0. If we used hard register 0, then the next instruction
;; would be a move from hard register 0 to a pseudo-reg. If the pseudo-reg
@@ -369,14 +582,14 @@
;; If we let reload allocate r0, then this problem can never happen.
(define_insn ""
- [(set (match_operand:SI 1 "register_operand" "=z")
+ [(set (match_operand:SI 0 "register_operand" "=z")
(udiv:SI (reg:SI 4) (reg:SI 5)))
(clobber (reg:SI 18))
(clobber (reg:SI 17))
(clobber (reg:SI 4))
- (use (match_operand:SI 0 "arith_reg_operand" "r"))]
+ (use (match_operand:SI 1 "arith_reg_operand" "r"))]
""
- "jsr @%0%#"
+ "jsr @%1%#"
[(set_attr "type" "sfunc")
(set_attr "needs_delay_slot" "yes")])
@@ -395,16 +608,16 @@
"operands[3] = gen_reg_rtx(SImode);")
(define_insn ""
- [(set (match_operand:SI 1 "register_operand" "=z")
+ [(set (match_operand:SI 0 "register_operand" "=z")
(div:SI (reg:SI 4) (reg:SI 5)))
(clobber (reg:SI 18))
(clobber (reg:SI 17))
(clobber (reg:SI 1))
(clobber (reg:SI 2))
(clobber (reg:SI 3))
- (use (match_operand:SI 0 "arith_reg_operand" "r"))]
+ (use (match_operand:SI 1 "arith_reg_operand" "r"))]
""
- "jsr @%0%#"
+ "jsr @%1%#"
[(set_attr "type" "sfunc")
(set_attr "needs_delay_slot" "yes")])
@@ -676,7 +889,8 @@
(ior:SI (match_operand:SI 1 "arith_reg_operand" "%0,0")
(match_operand:SI 2 "logical_operand" "r,L")))]
""
- "or %2,%0")
+ "or %2,%0"
+ [(set_attr "type" "arith")])
(define_insn "xorsi3"
[(set (match_operand:SI 0 "arith_reg_operand" "=z,r")
@@ -697,7 +911,8 @@
(set (reg:SI 18)
(lshiftrt:SI (match_dup 1) (const_int 31)))]
""
- "rotl %0")
+ "rotl %0"
+ [(set_attr "type" "arith")])
(define_insn "rotlsi3_31"
[(set (match_operand:SI 0 "arith_reg_operand" "=r")
@@ -705,14 +920,16 @@
(const_int 31)))
(clobber (reg:SI 18))]
""
- "rotr %0")
+ "rotr %0"
+ [(set_attr "type" "arith")])
-(define_insn ""
+(define_insn "rotlsi3_16"
[(set (match_operand:SI 0 "arith_reg_operand" "=r")
(rotate:SI (match_operand:SI 1 "arith_reg_operand" "r")
(const_int 16)))]
""
- "swap.w %1,%0")
+ "swap.w %1,%0"
+ [(set_attr "type" "arith")])
(define_expand "rotlsi3"
[(set (match_operand:SI 0 "arith_reg_operand" "")
@@ -721,29 +938,62 @@
""
"
{
+ static char rot_tab[] = {
+ 000, 000, 000, 000, 000, 000, 010, 001,
+ 001, 001, 011, 013, 003, 003, 003, 003,
+ 003, 003, 003, 003, 003, 013, 012, 002,
+ 002, 002, 010, 000, 000, 000, 000, 000,
+ };
+
+ int count, choice;
+
if (GET_CODE (operands[2]) != CONST_INT)
FAIL;
-
- if (INTVAL (operands[2]) == 1)
- {
- emit_insn (gen_rotlsi3_1 (operands[0], operands[1]));
- DONE;
- }
- else if (INTVAL (operands[2]) == 31)
+ count = INTVAL (operands[2]);
+ choice = rot_tab[count];
+ if (choice & 010 && SH_DYNAMIC_SHIFT_COST <= 1)
+ FAIL;
+ choice &= 7;
+ switch (choice)
{
- emit_insn (gen_rotlsi3_31 (operands[0], operands[1]));
- DONE;
+ case 0:
+ emit_move_insn (operands[0], operands[1]);
+ count -= (count & 16) * 2;
+ break;
+ case 3:
+ emit_insn (gen_rotlsi3_16 (operands[0], operands[1]));
+ count -= 16;
+ break;
+ case 1:
+ case 2:
+ {
+ rtx parts[2];
+ parts[0] = gen_reg_rtx (SImode);
+ parts[1] = gen_reg_rtx (SImode);
+ emit_insn (gen_rotlsi3_16 (parts[2-choice], operands[1]));
+ parts[choice-1] = operands[1];
+ emit_insn (gen_ashlsi3 (parts[0], parts[0], GEN_INT (8)));
+ emit_insn (gen_lshrsi3 (parts[1], parts[1], GEN_INT (8)));
+ emit_insn (gen_iorsi3 (operands[0], parts[0], parts[1]));
+ count = (count & ~16) - 8;
+ }
}
- else if (INTVAL (operands[2]) != 16)
- FAIL;
+
+ for (; count > 0; count--)
+ emit_insn (gen_rotlsi3_1 (operands[0], operands[0]));
+ for (; count < 0; count++)
+ emit_insn (gen_rotlsi3_31 (operands[0], operands[0]));
+
+ DONE;
}")
-(define_insn ""
+(define_insn "*rotlhi3_8"
[(set (match_operand:HI 0 "arith_reg_operand" "=r")
(rotate:HI (match_operand:HI 1 "arith_reg_operand" "r")
(const_int 8)))]
""
- "swap.b %1,%0")
+ "swap.b %1,%0"
+ [(set_attr "type" "arith")])
(define_expand "rotlhi3"
[(set (match_operand:HI 0 "arith_reg_operand" "")
@@ -764,7 +1014,8 @@
(ashift:SI (match_operand:SI 1 "arith_reg_operand" "0")
(match_operand:SI 2 "arith_reg_operand" "r")))]
"TARGET_SH3"
- "shld %2,%0")
+ "shld %2,%0"
+ [(set_attr "type" "dyn_shift")])
(define_insn "ashlsi3_k"
[(set (match_operand:SI 0 "arith_reg_operand" "=r,r")
@@ -773,7 +1024,8 @@
"CONST_OK_FOR_K (INTVAL (operands[2]))"
"@
add %0,%0
- shll%O2 %0")
+ shll%O2 %0"
+ [(set_attr "type" "arith")])
(define_insn "ashlhi3_k"
[(set (match_operand:HI 0 "arith_reg_operand" "=r,r")
@@ -782,14 +1034,15 @@
"CONST_OK_FOR_K (INTVAL (operands[2]))"
"@
add %0,%0
- shll%O2 %0")
+ shll%O2 %0"
+ [(set_attr "type" "arith")])
(define_insn "ashlsi3_n"
[(set (match_operand:SI 0 "arith_reg_operand" "=r")
(ashift:SI (match_operand:SI 1 "arith_reg_operand" "0")
(match_operand:SI 2 "const_int_operand" "n")))
(clobber (reg:SI 18))]
- ""
+ "! sh_dynamicalize_shift_p (operands[2])"
"#"
[(set (attr "length")
(cond [(eq (symbol_ref "shift_insns_rtx (insn)") (const_int 1))
@@ -822,6 +1075,9 @@
""
"
{
+ if (GET_CODE (operands[2]) == CONST_INT
+ && sh_dynamicalize_shift_p (operands[2]))
+ operands[2] = force_reg (SImode, operands[2]);
if (TARGET_SH3 && arith_reg_operand (operands[2], GET_MODE (operands[2])))
{
emit_insn (gen_ashlsi3_d (operands[0], operands[1], operands[2]));
@@ -888,27 +1144,59 @@
(ashiftrt:SI (match_operand:SI 1 "arith_reg_operand" "r")
(const_int 16)))]
""
- "swap.w %1,%0\;exts.w %0,%0"
+ "#"
[(set_attr "length" "4")])
+(define_split
+ [(set (match_operand:SI 0 "arith_reg_operand" "=r")
+ (ashiftrt:SI (match_operand:SI 1 "arith_reg_operand" "r")
+ (const_int 16)))]
+ ""
+ [(set (match_dup 0) (rotate:SI (match_dup 1) (const_int 16)))
+ (set (match_dup 0) (sign_extend:SI (match_dup 2)))]
+ "operands[2] = gen_lowpart (HImode, operands[0]);")
+
;; ??? This should be a define expand.
(define_insn "ashrsi2_31"
[(set (match_operand:SI 0 "arith_reg_operand" "=r")
- (ashiftrt:SI (match_operand:SI 1 "arith_reg_operand" "0")
- (const_int 31)))
+ (ashiftrt:SI (match_operand:SI 1 "arith_reg_operand" "0")
+ (const_int 31)))
(clobber (reg:SI 18))]
""
- "@
- shll %0\;subc %0,%0"
+ "#"
[(set_attr "length" "4")])
+(define_split
+ [(set (match_operand:SI 0 "arith_reg_operand" "=r")
+ (ashiftrt:SI (match_operand:SI 1 "arith_reg_operand" "0")
+ (const_int 31)))
+ (clobber (reg:SI 18))]
+ ""
+ [(const_int 0)]
+ "
+{
+ emit_insn (gen_ashlsi_c (operands[0], operands[1], operands[1]));
+ emit_insn (gen_subc1 (operands[0], operands[0], operands[0]));
+ DONE;
+}")
+
+(define_insn "ashlsi_c"
+ [(set (match_operand:SI 0 "arith_reg_operand" "=r")
+ (ashift:SI (match_operand:SI 1 "arith_reg_operand" "0") (const_int 1)))
+ (set (reg:SI 18) (lt:SI (match_operand:SI 2 "arith_reg_operand" "0")
+ (const_int 0)))]
+ ""
+ "shll %0"
+ [(set_attr "type" "arith")])
+
(define_insn "ashrsi3_d"
[(set (match_operand:SI 0 "arith_reg_operand" "=r")
(ashiftrt:SI (match_operand:SI 1 "arith_reg_operand" "0")
(neg:SI (match_operand:SI 2 "arith_reg_operand" "r"))))]
"TARGET_SH3"
- "shad %2,%0")
+ "shad %2,%0"
+ [(set_attr "type" "dyn_shift")])
(define_insn "ashrsi3_n"
[(set (reg:SI 4)
@@ -937,7 +1225,8 @@
(lshiftrt:SI (match_operand:SI 1 "arith_reg_operand" "0")
(neg:SI (match_operand:SI 2 "arith_reg_operand" "r"))))]
"TARGET_SH3"
- "shld %2,%0")
+ "shld %2,%0"
+ [(set_attr "type" "dyn_shift")])
;; Only the single bit shift clobbers the T bit.
@@ -947,7 +1236,8 @@
(match_operand:SI 2 "const_int_operand" "M")))
(clobber (reg:SI 18))]
"CONST_OK_FOR_M (INTVAL (operands[2]))"
- "shlr %0")
+ "shlr %0"
+ [(set_attr "type" "arith")])
(define_insn "lshrsi3_k"
[(set (match_operand:SI 0 "arith_reg_operand" "=r")
@@ -955,7 +1245,8 @@
(match_operand:SI 2 "const_int_operand" "K")))]
"CONST_OK_FOR_K (INTVAL (operands[2]))
&& ! CONST_OK_FOR_M (INTVAL (operands[2]))"
- "shlr%O2 %0")
+ "shlr%O2 %0"
+ [(set_attr "type" "arith")])
(define_insn "lshrhi3_m"
[(set (match_operand:HI 0 "arith_reg_operand" "=r")
@@ -963,7 +1254,8 @@
(match_operand:HI 2 "const_int_operand" "M")))
(clobber (reg:SI 18))]
"CONST_OK_FOR_M (INTVAL (operands[2]))"
- "shlr %0")
+ "shlr %0"
+ [(set_attr "type" "arith")])
(define_insn "lshrhi3_k"
[(set (match_operand:HI 0 "arith_reg_operand" "=r")
@@ -971,14 +1263,15 @@
(match_operand:HI 2 "const_int_operand" "K")))]
"CONST_OK_FOR_K (INTVAL (operands[2]))
&& ! CONST_OK_FOR_M (INTVAL (operands[2]))"
- "shlr%O2 %0")
+ "shlr%O2 %0"
+ [(set_attr "type" "arith")])
(define_insn "lshrsi3_n"
[(set (match_operand:SI 0 "arith_reg_operand" "=r")
(lshiftrt:SI (match_operand:SI 1 "arith_reg_operand" "0")
(match_operand:SI 2 "const_int_operand" "n")))
(clobber (reg:SI 18))]
- ""
+ "! sh_dynamicalize_shift_p (operands[2])"
"#"
[(set (attr "length")
(cond [(eq (symbol_ref "shift_insns_rtx (insn)") (const_int 1))
@@ -1011,6 +1304,9 @@
""
"
{
+ if (GET_CODE (operands[2]) == CONST_INT
+ && sh_dynamicalize_shift_p (operands[2]))
+ operands[2] = force_reg (SImode, operands[2]);
if (TARGET_SH3 && arith_reg_operand (operands[2], GET_MODE (operands[2])))
{
rtx count = copy_to_mode_reg (SImode, operands[2]);
@@ -1060,7 +1356,8 @@
(clobber (reg:SI 18))]
""
"shll %R0\;rotcl %S0"
- [(set_attr "length" "4")])
+ [(set_attr "length" "4")
+ (set_attr "type" "arith")])
(define_expand "ashldi3"
[(parallel [(set (match_operand:DI 0 "arith_reg_operand" "")
@@ -1080,7 +1377,8 @@
(clobber (reg:SI 18))]
""
"shlr %S0\;rotcr %R0"
- [(set_attr "length" "4")])
+ [(set_attr "length" "4")
+ (set_attr "type" "arith")])
(define_expand "lshrdi3"
[(parallel [(set (match_operand:DI 0 "arith_reg_operand" "")
@@ -1100,7 +1398,8 @@
(clobber (reg:SI 18))]
""
"shar %S0\;rotcr %R0"
- [(set_attr "length" "4")])
+ [(set_attr "length" "4")
+ (set_attr "type" "arith")])
(define_expand "ashrdi3"
[(parallel [(set (match_operand:DI 0 "arith_reg_operand" "")
@@ -1306,7 +1605,8 @@
(lshiftrt:SI (match_operand:SI 2 "arith_reg_operand" "0")
(const_int 16))))]
""
- "xtrct %1,%0")
+ "xtrct %1,%0"
+ [(set_attr "type" "arith")])
(define_insn "xtrct_right"
[(set (match_operand:SI 0 "arith_reg_operand" "=r")
@@ -1315,7 +1615,8 @@
(ashift:SI (match_operand:SI 2 "arith_reg_operand" "r")
(const_int 16))))]
""
- "xtrct %2,%0")
+ "xtrct %2,%0"
+ [(set_attr "type" "arith")])
;; -------------------------------------------------------------------------
;; Unary arithmetic
@@ -1400,13 +1701,8 @@
;; ??? This should be a define expand.
;; ??? Or perhaps it should be dropped?
-(define_insn "extendsidi2"
- [(set (match_operand:DI 0 "arith_reg_operand" "=r")
- (sign_extend:DI (match_operand:SI 1 "arith_reg_operand" "r")))
- (clobber (reg:SI 18))]
- ""
- "mov %1,%S0\;mov %1,%R0\;shll %S0\;subc %S0,%S0"
- [(set_attr "length" "8")])
+/* There is no point in defining extendsidi2; convert_move generates good
+ code for that. */
(define_insn "extendhisi2"
[(set (match_operand:SI 0 "arith_reg_operand" "=r,r")
@@ -1499,17 +1795,17 @@
""
"sett")
-;; t/z is first, so that it will be preferred over r/r when reloading a move
+;; t/r is first, so that it will be preferred over r/r when reloading a move
;; of a pseudo-reg into the T reg
(define_insn "movsi_i"
- [(set (match_operand:SI 0 "general_movdst_operand" "=t,r,r,r,r,r,m,<,xl,xl,r")
- (match_operand:SI 1 "general_movsrc_operand" "z,Q,rI,m,xl,t,r,xl,r,>,i"))]
+ [(set (match_operand:SI 0 "general_movdst_operand" "=t,r,r,r,r,r,m,<,<,xl,x,l,r")
+ (match_operand:SI 1 "general_movsrc_operand" "r,Q,rI,m,xl,t,r,x,l,r,>,>,i"))]
"
- ! TARGET_SH3E &&
- (register_operand (operands[0], SImode)
- || register_operand (operands[1], SImode))"
+ ! TARGET_SH3E
+ && (register_operand (operands[0], SImode)
+ || register_operand (operands[1], SImode))"
"@
- tst %1,%1\;rotcl %1\;xor #1,%1\;rotcr %1
+ cmp/pl %1
mov.l %1,%0
mov %1,%0
mov.l %1,%0
@@ -1517,39 +1813,58 @@
movt %0
mov.l %1,%0
sts.l %1,%0
+ sts.l %1,%0
lds %1,%0
lds.l %1,%0
+ lds.l %1,%0
fake %1,%0"
- [(set_attr "type" "move,pcload,move,load,move,store,store,move,load,move,pcload")
- (set_attr "length" "8,*,*,*,*,*,*,*,*,*,*")])
+ [(set_attr "type" "*,pcload_si,move,load_si,move,move,store,store,pstore,move,load,pload,pcload_si")
+ (set_attr "length" "*,*,*,*,*,*,*,*,*,*,*,*,*")])
-;; t/z is first, so that it will be preferred over r/r when reloading a move
-;; of a pseudo-reg into the T reg
+;; t/r must come after r/r, lest reload will try to reload stuff like
+;; (subreg:SI (reg:SF 38 fr14) 0) into T (compiling stdlib/strtod.c -m3e -O2)
;; ??? This allows moves from macl to fpul to be recognized, but these moves
;; will require a reload.
(define_insn "movsi_ie"
- [(set (match_operand:SI 0 "general_movdst_operand" "=t,r,r,r,r,r,m,<,xl,xl,r,y,r")
- (match_operand:SI 1 "general_movsrc_operand" "z,Q,rI,m,xl,t,r,xl,r,>,i,r,y"))]
+ [(set (match_operand:SI 0 "general_movdst_operand" "=r,r,t,r,r,r,m,<,<,xl,x,l,r,y,r,y")
+ (match_operand:SI 1 "general_movsrc_operand" "Q,rI,r,m,xl,t,r,x,l,r,>,>,i,r,y,y"))]
"TARGET_SH3E
&& (register_operand (operands[0], SImode)
|| register_operand (operands[1], SImode))"
"@
- tst %1,%1\;rotcl %1\;xor #1,%1\;rotcr %1
mov.l %1,%0
mov %1,%0
+ cmp/pl %1
mov.l %1,%0
sts %1,%0
movt %0
mov.l %1,%0
sts.l %1,%0
+ sts.l %1,%0
lds %1,%0
lds.l %1,%0
+ lds.l %1,%0
fake %1,%0
lds %1,%0
- sts %1,%0"
- [(set_attr "type" "move,pcload,move,load,move,store,store,move,load,move,pcload,move,move")
- (set_attr "length" "8,*,*,*,*,*,*,*,*,*,*,*,*")])
-
+ sts %1,%0
+ ! move optimized away"
+ [(set_attr "type" "pcload_si,move,*,load_si,move,move,store,store,pstore,move,load,pload,pcload_si,gp_fpul,gp_fpul,nil")
+ (set_attr "length" "*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,0")])
+
+(define_insn "movsi_i_lowpart"
+ [(set (strict_low_part (match_operand:SI 0 "general_movdst_operand" "=r,r,r,r,r,m,r"))
+ (match_operand:SI 1 "general_movsrc_operand" "Q,rI,m,xl,t,r,i"))]
+ "register_operand (operands[0], SImode)
+ || register_operand (operands[1], SImode)"
+ "@
+ mov.l %1,%0
+ mov %1,%0
+ mov.l %1,%0
+ sts %1,%0
+ movt %0
+ mov.l %1,%0
+ fake %1,%0"
+ [(set_attr "type" "pcload,move,load,move,move,store,pcload")])
(define_expand "movsi"
[(set (match_operand:SI 0 "general_movdst_operand" "")
(match_operand:SI 1 "general_movsrc_operand" ""))]
@@ -1600,14 +1915,16 @@
;; ??? This should be a define expand.
+;; x/r can be created by inlining/cse, e.g. for execute/961213-1.c
+;; compiled with -m2 -ml -O3 -funroll-loops
(define_insn ""
- [(set (match_operand:DI 0 "general_movdst_operand" "=r,r,r,m,r,r,r")
- (match_operand:DI 1 "general_movsrc_operand" "Q,r,m,r,I,i,x"))]
+ [(set (match_operand:DI 0 "general_movdst_operand" "=r,r,r,m,r,r,r,*!x")
+ (match_operand:DI 1 "general_movsrc_operand" "Q,r,m,r,I,i,x,r"))]
"arith_reg_operand (operands[0], DImode)
|| arith_reg_operand (operands[1], DImode)"
"* return output_movedouble (insn, operands, DImode);"
[(set_attr "length" "4")
- (set_attr "type" "pcload,move,load,store,move,pcload,move")])
+ (set_attr "type" "pcload,move,load,store,move,pcload,move,move")])
;; If the output is a register and the input is memory or a register, we have
;; to be careful and see which word needs to be loaded first.
@@ -1779,15 +2096,19 @@
[(set (match_operand:DF 0 "general_movdst_operand" "")
(match_operand:DF 1 "general_movsrc_operand" ""))]
""
- "{ if (prepare_move_operands (operands, DFmode)) DONE; }")
+ "
+{
+ if (prepare_move_operands (operands, DFmode)) DONE;
+}")
+
(define_insn "movsf_i"
[(set (match_operand:SF 0 "general_movdst_operand" "=r,r,r,r,m,l,r")
(match_operand:SF 1 "general_movsrc_operand" "r,I,FQ,m,r,r,l"))]
"
- ! TARGET_SH3E &&
- (arith_reg_operand (operands[0], SFmode)
- || arith_reg_operand (operands[1], SFmode))"
+ ! TARGET_SH3E
+ && (arith_reg_operand (operands[0], SFmode)
+ || arith_reg_operand (operands[1], SFmode))"
"@
mov %1,%0
mov %1,%0
@@ -1798,12 +2119,15 @@
sts %1,%0"
[(set_attr "type" "move,move,pcload,load,store,move,move")])
+;; We may not split the ry/yr/XX alternatives to movsi_ie, since
+;; update_flow_info would not know where to put REG_EQUAL notes
+;; when the destination changes mode.
(define_insn "movsf_ie"
[(set (match_operand:SF 0 "general_movdst_operand"
- "=f,r,f,f,?f,f,m,r,r,m,!??r,!??f")
+ "=f,r,f,f,fy,f,m,r,r,m,f,y,y,rf,r,y,y")
(match_operand:SF 1 "general_movsrc_operand"
- "f,r,G,H,FQ,m,f,FQ,m,r,f,r"))
- (clobber (match_scratch:SI 2 "=X,X,X,X,&z,X,X,X,X,X,X,X"))]
+ "f,r,G,H,FQ,m,f,FQ,m,r,y,f,>,fr,y,r,y"))
+ (clobber (match_scratch:SI 2 "=X,X,X,X,&z,X,X,X,X,X,X,X,X,y,X,X,X"))]
"TARGET_SH3E
&& (arith_reg_operand (operands[0], SFmode)
@@ -1819,28 +2143,26 @@
mov.l %1,%0
mov.l %1,%0
mov.l %1,%0
- flds %1,fpul\;sts fpul,%0
- lds %1,fpul\;fsts fpul,%0"
- [(set_attr "type" "move,move,fp,fp,pcload,load,store,pcload,load,store,move,fp")
- (set_attr "length" "*,*,*,*,4,*,*,*,*,*,4,4")])
+ fsts fpul,%0
+ flds %1,fpul
+ lds.l %1,%0
+ #
+ sts %1,%0
+ lds %1,%0
+ ! move optimized away"
+ [(set_attr "type" "fmove,move,fmove,fmove,pcload,load,store,pcload,load,store,fmove,fmove,load,*,gp_fpul,gp_fpul,nil")
+ (set_attr "length" "*,*,*,*,4,*,*,*,*,*,2,2,2,*,2,2,0")])
(define_split
- [(set (match_operand:SF 0 "general_movdst_operand" "")
- (match_operand:SF 1 "general_movsrc_operand" ""))
- (clobber (reg:SI 0))]
- "GET_CODE (operands[0]) == REG && REGNO (operands[0]) < FIRST_PSEUDO_REGISTER"
- [(parallel [(set (match_dup 0) (match_dup 1))
+ [(set (match_operand:SF 0 "register_operand" "")
+ (match_operand:SF 1 "register_operand" ""))
+ (clobber (reg:SI 22))]
+ ""
+ [(parallel [(set (reg:SF 22) (match_dup 1))
+ (clobber (scratch:SI))])
+ (parallel [(set (match_dup 0) (reg:SF 22))
(clobber (scratch:SI))])]
- "
-{
- if (REGNO (operands[0]) >= FIRST_FP_REG && REGNO (operands[0]) <= LAST_FP_REG)
- {
- if (GET_CODE (operands[1]) != MEM)
- FAIL;
- emit_insn (gen_mova (XEXP (operands[1], 0)));
- XEXP (operands[1], 0) = gen_rtx (REG, Pmode, 0);
- }
-}")
+ "")
(define_expand "movsf"
[(set (match_operand:SF 0 "general_movdst_operand" "")
@@ -1884,47 +2206,45 @@
"* return output_branch (0, insn, operands);"
[(set_attr "type" "cbranch")])
-(define_insn "inverse_branch_true"
- [(set (pc) (if_then_else (ne (reg:SI 18) (const_int 0))
- (pc)
- (label_ref (match_operand 0 "" ""))))]
+;; Patterns to prevent reorg from re-combining a condbranch with a branch
+;; which destination is too far away.
+;; The const_int_operand is distinct for each branch target; it avoids
+;; unwanted matches with redundant_insn.
+(define_insn "block_branch_redirect"
+ [(set (pc) (unspec [(match_operand 0 "const_int_operand" "")] 4))]
""
- "* return output_branch (0, insn, operands);"
- [(set_attr "type" "cbranch")])
+ ""
+ [(set_attr "length" "0")])
-(define_insn "inverse_branch_false"
- [(set (pc) (if_then_else (eq (reg:SI 18) (const_int 0))
- (pc)
- (label_ref (match_operand 0 "" ""))))]
+;; This one has the additional purpose to record a possible scratch register
+;; for the following branch.
+(define_insn "indirect_jump_scratch"
+ [(set (match_operand 0 "register_operand" "r")
+ (unspec [(match_operand 1 "const_int_operand" "")] 4))]
""
- "* return output_branch (1, insn, operands);"
- [(set_attr "type" "cbranch")])
+ ""
+ [(set_attr "length" "0")])
;; Conditional branch insns
(define_expand "beq"
- [(set (reg:SI 18) (eq:SI (match_dup 1) (match_dup 2)))
- (set (pc)
+ [(set (pc)
(if_then_else (ne (reg:SI 18) (const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
""
"from_compare (operands, EQ);")
-; There is no bne compare, so we reverse the branch arms.
-
(define_expand "bne"
- [(set (reg:SI 18) (eq:SI (match_dup 1) (match_dup 2)))
- (set (pc)
- (if_then_else (ne (reg:SI 18) (const_int 0))
- (pc)
- (label_ref (match_operand 0 "" ""))))]
+ [(set (pc)
+ (if_then_else (eq (reg:SI 18) (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
""
- "from_compare (operands, NE);")
+ "from_compare (operands, EQ);")
(define_expand "bgt"
- [(set (reg:SI 18) (gt:SI (match_dup 1) (match_dup 2)))
- (set (pc)
+ [(set (pc)
(if_then_else (ne (reg:SI 18) (const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
@@ -1932,11 +2252,10 @@
"from_compare (operands, GT);")
(define_expand "blt"
- [(set (reg:SI 18) (ge:SI (match_dup 1) (match_dup 2)))
- (set (pc)
- (if_then_else (ne (reg:SI 18) (const_int 0))
- (pc)
- (label_ref (match_operand 0 "" ""))))]
+ [(set (pc)
+ (if_then_else (eq (reg:SI 18) (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
""
"
{
@@ -1948,28 +2267,41 @@
emit_insn (gen_bgt (operands[0]));
DONE;
}
- from_compare (operands, LT);
+ from_compare (operands, GE);
}")
(define_expand "ble"
- [(set (reg:SI 18) (gt:SI (match_dup 1) (match_dup 2)))
- (set (pc)
- (if_then_else (ne (reg:SI 18) (const_int 0))
- (pc)
- (label_ref (match_operand 0 "" ""))))]
+ [(set (pc)
+ (if_then_else (eq (reg:SI 18) (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
""
- "from_compare (operands, LE);")
+ "
+{
+ if (TARGET_SH3E
+ && TARGET_IEEE
+ && GET_MODE_CLASS (GET_MODE (sh_compare_op0)) == MODE_FLOAT)
+ {
+ rtx tmp = sh_compare_op0;
+ sh_compare_op0 = sh_compare_op1;
+ sh_compare_op1 = tmp;
+ emit_insn (gen_bge (operands[0]));
+ DONE;
+ }
+ from_compare (operands, GT);
+}")
(define_expand "bge"
- [(set (reg:SI 18) (ge:SI (match_dup 1) (match_dup 2)))
- (set (pc)
+ [(set (pc)
(if_then_else (ne (reg:SI 18) (const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
""
"
{
- if (GET_MODE (sh_compare_op0) == SFmode)
+ if (TARGET_SH3E
+ && ! TARGET_IEEE
+ && GET_MODE_CLASS (GET_MODE (sh_compare_op0)) == MODE_FLOAT)
{
rtx tmp = sh_compare_op0;
sh_compare_op0 = sh_compare_op1;
@@ -1981,8 +2313,7 @@
}")
(define_expand "bgtu"
- [(set (reg:SI 18) (gtu:SI (match_dup 1) (match_dup 2)))
- (set (pc)
+ [(set (pc)
(if_then_else (ne (reg:SI 18) (const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
@@ -1990,17 +2321,15 @@
"from_compare (operands, GTU); ")
(define_expand "bltu"
- [(set (reg:SI 18) (geu:SI (match_dup 1) (match_dup 2)))
- (set (pc)
- (if_then_else (ne (reg:SI 18) (const_int 0))
- (pc)
- (label_ref (match_operand 0 "" ""))))]
+ [(set (pc)
+ (if_then_else (eq (reg:SI 18) (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
""
- "from_compare (operands, LTU);")
+ "from_compare (operands, GEU);")
(define_expand "bgeu"
- [(set (reg:SI 18) (geu:SI (match_dup 1) (match_dup 2)))
- (set (pc)
+ [(set (pc)
(if_then_else (ne (reg:SI 18) (const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
@@ -2008,13 +2337,12 @@
"from_compare (operands, GEU);")
(define_expand "bleu"
- [(set (reg:SI 18) (gtu:SI (match_dup 1) (match_dup 2)))
- (set (pc)
- (if_then_else (ne (reg:SI 18) (const_int 0))
- (pc)
- (label_ref (match_operand 0 "" ""))))]
+ [(set (pc)
+ (if_then_else (eq (reg:SI 18) (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
""
- "from_compare (operands, LEU);")
+ "from_compare (operands, GTU);")
;; ------------------------------------------------------------------------
;; Jump and linkage insns
@@ -2027,7 +2355,7 @@
"*
{
/* The length is 16 if the delay slot is unfilled. */
- if (get_attr_length(insn) >= 14)
+ if (get_attr_length(insn) > 4)
return output_far_jump(insn, operands[0]);
else
return \"bra %l0%#\";
@@ -2074,19 +2402,38 @@
(match_operand:SI 0 "arith_reg_operand" "r"))]
""
"jmp @%0%#"
- [(set_attr "needs_delay_slot" "yes")])
+ [(set_attr "needs_delay_slot" "yes")
+ (set_attr "type" "jump_ind")])
-;; This might seem redundant, but it helps us distinguish case table jumps
+;; The use of operand 1 / 2 helps us distinguish case table jumps
;; which can be present in structured code from indirect jumps which can not
;; be present in structured code. This allows -fprofile-arcs to work.
-(define_insn "*casesi_jump"
+;; For SH1 processors.
+(define_insn "casesi_jump_1"
[(set (pc)
- (match_operand:SI 0 "arith_reg_operand" "r"))
+ (match_operand:SI 0 "register_operand" "r"))
(use (label_ref (match_operand 1 "" "")))]
""
- "jmp @%0%#"
- [(set_attr "needs_delay_slot" "yes")])
+ "jmp @%0%#"
+ [(set_attr "needs_delay_slot" "yes")
+ (set_attr "type" "jump_ind")])
+
+;; For all later processors.
+(define_insn "casesi_jump_2"
+ [(set (pc) (plus:SI (match_operand:SI 0 "register_operand" "r")
+ (match_operand 1 "braf_label_ref_operand" "")))
+ (use (label_ref (match_operand 2 "" "")))]
+ ""
+ "braf %0%#"
+ [(set_attr "needs_delay_slot" "yes")
+ (set_attr "type" "jump_ind")])
+
+(define_insn "dummy_jump"
+ [(set (pc) (const_int 0))]
+ ""
+ ""
+ [(set_attr "length" "0")])
;; Call subroutine returning any type.
;; ??? This probably doesn't work.
@@ -2127,22 +2474,26 @@
(eq:SI (match_operand:SI 0 "arith_reg_operand" "+r") (const_int 1)))
(set (match_dup 0) (plus:SI (match_dup 0) (const_int -1)))]
"TARGET_SH2"
- "dt %0")
+ "dt %0"
+ [(set_attr "type" "arith")])
(define_insn "nop"
[(const_int 0)]
""
"nop")
-;; Load address of a label. This is only generated by the casesi expand.
-;; This must use unspec, because this only works immediately before a casesi.
+;; Load address of a label. This is only generated by the casesi expand,
+;; and by machine_dependent_reorg (fixing up fp moves).
+;; This must use unspec, because this only works for labels that are
+;; within range,
(define_insn "mova"
[(set (reg:SI 0)
(unspec [(label_ref (match_operand 0 "" ""))] 1))]
""
"mova %O0,r0"
- [(set_attr "in_delay_slot" "no")])
+ [(set_attr "in_delay_slot" "no")
+ (set_attr "type" "arith")])
;; case instruction for switch statements.
@@ -2152,56 +2503,157 @@
;; operand 3 is CODE_LABEL for the table;
;; operand 4 is the CODE_LABEL to go to if index out of range.
-;; ??? There should be a barrier after the jump at the end.
-
(define_expand "casesi"
- [(set (match_dup 5) (match_operand:SI 0 "arith_reg_operand" ""))
- (set (match_dup 5) (minus:SI (match_dup 5)
+ [(match_operand:SI 0 "arith_reg_operand" "")
+ (match_operand:SI 1 "arith_reg_operand" "")
+ (match_operand:SI 2 "arith_reg_operand" "")
+ (match_operand 3 "" "") (match_operand 4 "" "")]
+ ""
+ "
+{
+ rtx reg = gen_reg_rtx (SImode);
+ rtx reg2 = gen_reg_rtx (SImode);
+ operands[1] = copy_to_mode_reg (SImode, operands[1]);
+ operands[2] = copy_to_mode_reg (SImode, operands[2]);
+ /* If optimizing, casesi_worker depends on the mode of the instruction
+ before label it 'uses' - operands[3]. */
+ emit_insn (gen_casesi_0 (operands[0], operands[1], operands[2], operands[4],
+ reg));
+ emit_insn (gen_casesi_worker_0 (reg2, reg, operands[3]));
+ if (TARGET_SH2)
+ {
+ rtx lab = gen_label_rtx ();
+ emit_jump_insn (gen_casesi_jump_2 (reg2,
+ gen_rtx (LABEL_REF, VOIDmode, lab),
+ operands[3]));
+ emit_label (lab);
+ /* Put a fake jump after the label, lest some optimization might
+ delete the barrier and LAB. */
+ emit_jump_insn (gen_dummy_jump ());
+ }
+ else
+ {
+ emit_jump_insn (gen_casesi_jump_1 (reg2, operands[3]));
+ }
+ /* For SH2 and newer, the ADDR_DIFF_VEC is not actually relative to
+ operands[3], but to lab. We will fix this up in
+ machine_dependent_reorg. */
+ emit_barrier ();
+ DONE;
+}")
+
+(define_expand "casesi_0"
+ [(set (match_operand:SI 4 "" "") (match_operand:SI 0 "arith_reg_operand" ""))
+ (set (match_dup 4) (minus:SI (match_dup 4)
(match_operand:SI 1 "arith_operand" "")))
(set (reg:SI 18)
- (gtu:SI (match_dup 5)
+ (gtu:SI (match_dup 4)
(match_operand:SI 2 "arith_reg_operand" "")))
(set (pc)
(if_then_else (ne (reg:SI 18)
(const_int 0))
- (label_ref (match_operand 4 "" ""))
- (pc)))
- (set (match_dup 6) (match_dup 5))
- (set (match_dup 6) (ashift:SI (match_dup 6) (match_dup 7)))
- (set (reg:SI 0) (unspec [(label_ref (match_operand 3 "" ""))] 1))
- (parallel [(set (reg:SI 0) (plus:SI (reg:SI 0)
- (mem:HI (plus:SI (reg:SI 0)
- (match_dup 6)))))
- (set (match_dup 6) (mem:HI (plus:SI (reg:SI 0) (match_dup 6))))])
- (parallel [(set (pc) (reg:SI 0))
- (use (label_ref (match_dup 3)))])]
+ (label_ref (match_operand 3 "" ""))
+ (pc)))]
""
- "
-{
- operands[1] = copy_to_mode_reg (SImode, operands[1]);
- operands[2] = copy_to_mode_reg (SImode, operands[2]);
- operands[5] = gen_reg_rtx (SImode);
- operands[6] = gen_reg_rtx (SImode);
- operands[7] = GEN_INT (TARGET_BIGTABLE ? 2 : 1);
-}")
+ "")
-(define_insn "casesi_worker"
- [(set (reg:SI 0)
- (plus:SI (reg:SI 0)
- (mem:HI (plus:SI (reg:SI 0)
- (match_operand:SI 0 "arith_reg_operand" "+r")))))
- (set (match_dup 0) (mem:HI (plus:SI (reg:SI 0)
- (match_dup 0))))]
+;; ??? reload might clobber r0 if we use it explicitly in the RTL before
+;; reload; using a R0_REGS pseudo reg is likely to give poor code.
+;; So we keep the use of r0 hidden in a R0_REGS clobber until after reload.
+
+(define_insn "casesi_worker_0"
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
+ (unspec [(match_operand 1 "register_operand" "0,r")
+ (label_ref (match_operand 2 "" ""))] 2))
+ (clobber (match_scratch:SI 3 "=X,1"))
+ (clobber (match_scratch:SI 4 "=&z,z"))]
+ ""
+ "#")
+
+(define_split
+ [(set (match_operand:SI 0 "register_operand" "")
+ (unspec [(match_operand 1 "register_operand" "")
+ (label_ref (match_operand 2 "" ""))] 2))
+ (clobber (match_scratch:SI 3 ""))
+ (clobber (match_scratch:SI 4 ""))]
+ "! TARGET_SH2 && reload_completed"
+ [(set (reg:SI 0) (unspec [(label_ref (match_dup 2))] 1))
+ (parallel [(set (match_dup 0)
+ (unspec [(reg:SI 0) (match_dup 1) (label_ref (match_dup 2))] 2))
+ (clobber (match_dup 3))])
+ (set (match_dup 0) (plus:SI (match_dup 0) (reg:SI 0)))]
+ "LABEL_NUSES (operands[2])++;")
+
+(define_split
+ [(set (match_operand:SI 0 "register_operand" "")
+ (unspec [(match_operand 1 "register_operand" "")
+ (label_ref (match_operand 2 "" ""))] 2))
+ (clobber (match_scratch:SI 3 ""))
+ (clobber (match_scratch:SI 4 ""))]
+ "TARGET_SH2 && reload_completed"
+ [(set (reg:SI 0) (unspec [(label_ref (match_dup 2))] 1))
+ (parallel [(set (match_dup 0)
+ (unspec [(reg:SI 0) (match_dup 1) (label_ref (match_dup 2))] 2))
+ (clobber (match_dup 3))])]
+ "LABEL_NUSES (operands[2])++;")
+
+(define_insn "*casesi_worker"
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
+ (unspec [(reg:SI 0) (match_operand 1 "register_operand" "0,r")
+ (label_ref (match_operand 2 "" ""))] 2))
+ (clobber (match_scratch:SI 3 "=X,1"))]
""
"*
{
- if (TARGET_BIGTABLE)
- return \"mov.l @(r0,%0),%0\;add %0,r0\";
- else
- return \"mov.w @(r0,%0),%0\;add %0,r0\";
+ enum machine_mode mode
+ = optimize
+ ? GET_MODE (PATTERN (prev_real_insn (operands[2])))
+ : sh_addr_diff_vec_mode;
+ switch (mode)
+ {
+ case SImode:
+ return \"shll2 %1\;mov.l @(r0,%1),%0\";
+ case HImode:
+ return \"add %1,%1\;mov.w @(r0,%1),%0\";
+ case QImode:
+ {
+ rtx adj = PATTERN (prev_real_insn (operands[2]));
+ if ((insn_addresses[INSN_UID (XEXP ( XVECEXP (adj, 0, 1), 0))]
+ - insn_addresses[INSN_UID (XEXP (XVECEXP (adj, 0, 2), 0))])
+ <= 126)
+ return \"mov.b @(r0,%1),%0\";
+ return \"mov.b @(r0,%1),%0\;extu.b %0,%0\";
+ }
+ default:
+ abort ();
+ }
}"
[(set_attr "length" "4")])
+;; Include ADDR_DIFF_VECS in the shorten_branches pass; we have to
+;; use a negative-length instruction to actually accomplish this.
+(define_insn "addr_diff_vec_adjust"
+ [(unspec_volatile [(label_ref (match_operand 0 "" ""))
+ (label_ref (match_operand 1 "" ""))
+ (label_ref (match_operand 2 "" ""))
+ (match_operand 3 "const_int_operand" "")] 7)]
+ ""
+ "*
+{
+ /* ??? ASM_OUTPUT_ADDR_DIFF_ELT gets passed no context information, so
+ we must use a kludge with a global variable. */
+ sh_addr_diff_vec_mode = GET_MODE (PATTERN (insn));
+ return \"\";
+}"
+;; Need a variable length for this to be processed in each shorten_branch pass.
+;; The actual work is done in ADJUST_INSN_LENGTH, because length attributes
+;; need to be (a choice of) constants.
+;; We use the calculated length before ADJUST_INSN_LENGTH to
+;; determine if the insn_addresses array contents are valid.
+ [(set (attr "length")
+ (if_then_else (eq (pc) (const_int -1))
+ (const_int 2) (const_int 0)))])
+
(define_insn "return"
[(return)]
"reload_completed"
@@ -2233,7 +2685,8 @@
[(set (match_operand:SI 0 "arith_reg_operand" "=r")
(eq:SI (reg:SI 18) (const_int 1)))]
""
- "movt %0")
+ "movt %0"
+ [(set_attr "type" "arith")])
(define_expand "seq"
[(set (match_operand:SI 0 "arith_reg_operand" "")
@@ -2248,18 +2701,15 @@
"operands[1] = prepare_scc_operands (LT);")
(define_expand "sle"
- [(set (match_operand:SI 0 "arith_reg_operand" "")
- (match_dup 1))]
+ [(match_operand:SI 0 "arith_reg_operand" "")]
""
"
{
- if (GET_MODE (sh_compare_op0) == SFmode)
- {
- emit_insn (gen_sgt (operands[0]));
- emit_insn (gen_xorsi3 (operands[0], operands[0], const1_rtx));
- DONE;
- }
- operands[1] = prepare_scc_operands (LE);
+ rtx tmp = sh_compare_op0;
+ sh_compare_op0 = sh_compare_op1;
+ sh_compare_op1 = tmp;
+ emit_insn (gen_sge (operands[0]));
+ DONE;
}")
(define_expand "sgt"
@@ -2276,8 +2726,22 @@
{
if (GET_MODE (sh_compare_op0) == SFmode)
{
- emit_insn (gen_slt (operands[0]));
- emit_insn (gen_xorsi3 (operands[0], operands[0], const1_rtx));
+ if (TARGET_IEEE)
+ {
+ rtx t_reg = gen_rtx (REG, SImode, T_REG);
+ rtx lab = gen_label_rtx ();
+ emit_insn (gen_rtx (SET, VOIDmode, t_reg,
+ gen_rtx (EQ, SImode, sh_compare_op0,
+ sh_compare_op1)));
+ emit_jump_insn (gen_branch_true (lab));
+ emit_insn (gen_rtx (SET, VOIDmode, t_reg,
+ gen_rtx (GT, SImode, sh_compare_op0,
+ sh_compare_op1)));
+ emit_label (lab);
+ emit_insn (gen_movt (operands[0]));
+ }
+ else
+ emit_insn (gen_movnegt (operands[0], prepare_scc_operands (LT)));
DONE;
}
operands[1] = prepare_scc_operands (GE);
@@ -2330,8 +2794,20 @@
operands[2] = gen_reg_rtx (SImode);
}")
+;; Use the same trick for FP sle / sge
+(define_expand "movnegt"
+ [(set (match_dup 2) (const_int -1))
+ (parallel [(set (match_operand 0 "" "")
+ (neg:SI (plus:SI (match_dup 1)
+ (match_dup 2))))
+ (set (reg:SI 18)
+ (ne:SI (ior:SI (match_operand 1 "" "") (match_dup 2))
+ (const_int 0)))])]
+ ""
+ "operands[2] = gen_reg_rtx (SImode);")
+
;; Recognize mov #-1/negc/neg sequence, and change it to movt/add #-1.
-;; This prevents a regression that occured when we switched from xor to
+;; This prevents a regression that occurred when we switched from xor to
;; mov/neg for sne.
(define_split
@@ -2416,22 +2892,42 @@
[(set_attr "length" "8")
(set_attr "in_delay_slot" "no")])
+;; Alignment is needed for some constant tables; it may also be added for
+;; Instructions at the start of loops, or after unconditional branches.
+;; ??? We would get more accurate lengths if we did instruction
+;; alignment based on the value of INSN_CURRENT_ADDRESS; the approach used
+;; here is too conservative.
+
; align to a two byte boundary
(define_insn "align_2"
- [(unspec_volatile [(const_int 0)] 10)]
+ [(unspec_volatile [(const_int 1)] 1)]
""
".align 1"
[(set_attr "length" "0")
(set_attr "in_delay_slot" "no")])
; align to a four byte boundary
+;; align_4 and align_log are instructions for the starts of loops, or
+;; after unconditional branches, which may take up extra room.
+
+(define_expand "align_4"
+ [(unspec_volatile [(const_int 2)] 1)]
+ ""
+ "")
+
+; align to a cache line boundary
-(define_insn "align_4"
- [(unspec_volatile [(const_int 0)] 5)]
+(define_insn "align_log"
+ [(unspec_volatile [(match_operand 0 "const_int_operand" "")] 1)]
""
- ".align 2"
- [(set_attr "in_delay_slot" "no")])
+ ".align %O0"
+;; Need a variable length for this to be processed in each shorten_branch pass.
+;; The actual work is done in ADJUST_INSN_LENGTH, because length attributes
+;; need to be (a choice of) constants.
+ [(set (attr "length")
+ (if_then_else (ne (pc) (pc)) (const_int 2) (const_int 0)))
+ (set_attr "in_delay_slot" "no")])
; emitted at the end of the literal table, used to emit the
; 32bit branch labels if needed.
@@ -2508,7 +3004,7 @@
(define_insn "subsf3"
[(set (match_operand:SF 0 "arith_reg_operand" "=f")
(minus:SF (match_operand:SF 1 "arith_reg_operand" "0")
- (match_operand:SF 2 "arith_reg_operand" "f")))]
+ (match_operand:SF 2 "arith_reg_operand" "f")))]
"TARGET_SH3E"
"fsub %2,%0"
[(set_attr "type" "fp")])
@@ -2533,81 +3029,64 @@
(define_insn "divsf3"
[(set (match_operand:SF 0 "arith_reg_operand" "=f")
(div:SF (match_operand:SF 1 "arith_reg_operand" "0")
- (match_operand:SF 2 "arith_reg_operand" "f")))]
+ (match_operand:SF 2 "arith_reg_operand" "f")))]
"TARGET_SH3E"
"fdiv %2,%0"
[(set_attr "type" "fdiv")])
-;; ??? This is the right solution, but it fails because the movs[if] patterns
-;; silently clobber FPUL (r22) for int<->fp moves. Thus we can not explicitly
-;; use FPUL here.
-;;
-;;(define_expand "floatsisf2"
-;; [(set (reg:SI 22)
-;; (match_operand:SI 1 "arith_reg_operand" ""))
-;; (set (match_operand:SF 0 "arith_reg_operand" "")
-;; (float:SF (reg:SI 22)))]
-;; "TARGET_SH3E"
-;; "")
-;;
-;;(define_insn "*floatsisf"
-;; [(set (match_operand:SF 0 "arith_reg_operand" "=f")
-;; (float:SF (reg:SI 22)))]
-;; "TARGET_SH3E"
-;; "float fpul,%0")
+(define_expand "floatsisf2"
+ [(set (reg:SI 22)
+ (match_operand:SI 1 "arith_reg_operand" ""))
+ (set (match_operand:SF 0 "arith_reg_operand" "")
+ (float:SF (reg:SI 22)))]
+ "TARGET_SH3E"
+ "")
-(define_insn "floatsisf2"
+(define_insn "*floatsisf2_ie"
[(set (match_operand:SF 0 "arith_reg_operand" "=f")
- (float:SF (match_operand:SI 1 "arith_reg_operand" "r")))]
+ (float:SF (reg:SI 22)))]
"TARGET_SH3E"
- "lds %1,fpul\;float fpul,%0"
- [(set_attr "length" "4")
- (set_attr "type" "fp")])
+ "float fpul,%0"
+ [(set_attr "type" "fp")])
-;; ??? This is the right solution, but it fails because the movs[if] patterns
-;; silently clobber FPUL (r22) for int<->fp moves. Thus we can not explicitly
-;; use FPUL here.
-;;
-;;(define_expand "fix_truncsfsi2"
-;; [(set (reg:SI 22)
-;; (fix:SI (match_operand:SF 1 "arith_reg_operand" "f")))
-;; (set (match_operand:SI 0 "arith_reg_operand" "=r")
-;; (reg:SI 22))]
-;; "TARGET_SH3E"
-;; "")
-;;
-;;(define_insn "*fixsfsi"
-;; [(set (reg:SI 22)
-;; (fix:SI (match_operand:SF 0 "arith_reg_operand" "f")))]
-;; "TARGET_SH3E"
-;; "ftrc %0,fpul")
+(define_expand "fix_truncsfsi2"
+ [(set (reg:SI 22)
+ (fix:SI (match_operand:SF 1 "arith_reg_operand" "f")))
+ (set (match_operand:SI 0 "arith_reg_operand" "=r")
+ (reg:SI 22))]
+ "TARGET_SH3E"
+ "")
-(define_insn "fix_truncsfsi2"
- [(set (match_operand:SI 0 "arith_reg_operand" "=r")
- (fix:SI (match_operand:SF 1 "arith_reg_operand" "f")))]
+(define_insn "*fixsfsi"
+ [(set (reg:SI 22)
+ (fix:SI (match_operand:SF 0 "arith_reg_operand" "f")))]
"TARGET_SH3E"
- "ftrc %1,fpul\;sts fpul,%0"
- [(set_attr "length" "4")
- (set_attr "type" "move")])
+ "ftrc %0,fpul"
+ [(set_attr "type" "fp")])
-;; ??? This should be SFmode not SImode in the compare, but that would
-;; require fixing the branch patterns too.
-(define_insn "*cmpgtsf_t"
+(define_insn "cmpgtsf_t"
[(set (reg:SI 18) (gt:SI (match_operand:SF 0 "arith_reg_operand" "f")
(match_operand:SF 1 "arith_reg_operand" "f")))]
"TARGET_SH3E"
"fcmp/gt %1,%0"
[(set_attr "type" "fp")])
-;; ??? This should be SFmode not SImode in the compare, but that would
-;; require fixing the branch patterns too.
-(define_insn "*cmpeqsf_t"
+(define_insn "cmpeqsf_t"
[(set (reg:SI 18) (eq:SI (match_operand:SF 0 "arith_reg_operand" "f")
(match_operand:SF 1 "arith_reg_operand" "f")))]
"TARGET_SH3E"
"fcmp/eq %1,%0"
[(set_attr "type" "fp")])
+(define_insn "ieee_ccmpeqsf_t"
+ [(set (reg:SI 18) (ior:SI (reg:SI 18)
+ (eq:SI (match_operand:SF 0 "arith_reg_operand" "f")
+ (match_operand:SF 1 "arith_reg_operand" "f"))))]
+ "TARGET_SH3E && TARGET_IEEE"
+ "* return output_ieee_ccmpeq (insn, operands);"
+ [(set_attr "length" "4")])
+
+
(define_expand "cmpsf"
[(set (reg:SI 18) (compare (match_operand:SF 0 "arith_operand" "")
(match_operand:SF 1 "arith_operand" "")))]
@@ -2813,7 +3292,7 @@
|| (GET_CODE (operands[2]) == SUBREG
&& REGNO (SUBREG_REG (operands[2])) >= FIRST_FP_REG))
&& reg_unused_after (operands[0], insn)"
- "fmov.s %2,@(%0,%1)")
+ "fmov{.s|} %2,@(%0,%1)")
(define_peephole
[(set (match_operand:SI 0 "register_operand" "=r")
@@ -2826,7 +3305,7 @@
|| (GET_CODE (operands[2]) == SUBREG
&& REGNO (SUBREG_REG (operands[2])) >= FIRST_FP_REG))
&& reg_unused_after (operands[0], insn)"
- "fmov.s @(%0,%1),%2")
+ "fmov{.s|} @(%0,%1),%2")
;; Switch to a new stack with its address in sp_switch (a SYMBOL_REF). */
(define_insn "sp_switch_1"
@@ -2843,7 +3322,7 @@
}"
[(set_attr "length" "10")])
-;; Switch back to the original stack for interrupt funtions with the
+;; Switch back to the original stack for interrupt functions with the
;; sp_switch attribute. */
(define_insn "sp_switch_2"
[(const_int 2)]
diff --git a/gcc/config/sh/xm-sh.h b/gcc/config/sh/xm-sh.h
index 3d8ef8410b8..f51b787f6df 100644
--- a/gcc/config/sh/xm-sh.h
+++ b/gcc/config/sh/xm-sh.h
@@ -1,5 +1,6 @@
/* Configuration for GNU C-compiler for Hitachi SH.
- Copyright (C) 1993 Free Software Foundation, Inc.
+ Copyright (C) 1993, 1997 Free Software Foundation, Inc.
+
This file is part of GNU CC.
GNU CC is free software; you can redistribute it and/or modify
@@ -32,9 +33,6 @@ Boston, MA 02111-1307, USA. */
#define alloca __builtin_alloca
#endif
-/* We have the vprintf function. */
-#define HAVE_VPRINTF 1
-
/* target machine dependencies.
tm.h is a symbolic link to the actual target specific file. */
#include "tm.h"
diff --git a/gcc/config/sparc/elf.h b/gcc/config/sparc/elf.h
new file mode 100644
index 00000000000..70cb26a93be
--- /dev/null
+++ b/gcc/config/sparc/elf.h
@@ -0,0 +1,42 @@
+/* Definitions of target machine for GNU compiler,
+ for SPARC running in an embedded environment using the ELF file format.
+ Copyright (C) 1997 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.
+
+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 "sol2.h"
+
+#undef CPP_PREDEFINES
+#define CPP_PREDEFINES "-Dsparc -D__elf__ -Acpu(sparc) -Amachine(sparc)"
+
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC "crt0.o%s crti.o%s crtbegin.o%s"
+
+#undef ENDFILE_SPEC
+#define ENDFILE_SPEC "crtend.o%s crtn.o%s"
+
+/* Use the default. */
+#undef LINK_SPEC
+
+/* Don't set the target flags, this is done by the linker script */
+#undef LIB_SPEC
+#define LIB_SPEC ""
+
+/* FIXME: until fixed */
+#undef LONG_DOUBLE_TYPE_SIZE
+#define LONG_DOUBLE_TYPE_SIZE 64
diff --git a/gcc/config/sparc/linux-aout.h b/gcc/config/sparc/linux-aout.h
index f48d7f3e017..7075b5fbe7c 100644
--- a/gcc/config/sparc/linux-aout.h
+++ b/gcc/config/sparc/linux-aout.h
@@ -1,5 +1,5 @@
-/* Definitions for SPARC running Linux with a.out
- Copyright (C) 1996 Free Software Foundation, Inc.
+/* Definitions for SPARC running Linux-based GNU systems with a.out.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Contributed by Eddie C. Dost (ecd@skynet.be)
This file is part of GNU CC.
@@ -28,7 +28,7 @@ Boston, MA 02111-1307, USA. */
#undef HAVE_ATEXIT
#define HAVE_ATEXIT
-/* Linux uses ctype from glibc.a. I am not sure how complete it is.
+/* GNU/Linux uses ctype from glibc.a. I am not sure how complete it is.
For now, we play safe. It may change later. */
#if 0
@@ -36,11 +36,6 @@ Boston, MA 02111-1307, USA. */
#define MULTIBYTE_CHARS 1
#endif
-/* There are conflicting reports about whether this system uses
- a different assembler syntax. wilson@cygnus.com says # is right. */
-#undef COMMENT_BEGIN
-#define COMMENT_BEGIN "#"
-
/* We need that too. */
#define HANDLE_SYSV_PRAGMA
@@ -60,7 +55,7 @@ Boston, MA 02111-1307, USA. */
#define STARTFILE_SPEC "%{pg:gcrt0.o%s} %{!pg:%{p:gcrt0.o%s} %{!p:crt0.o%s}} %{static:-static}"
#undef TARGET_VERSION
-#define TARGET_VERSION fprintf (stderr, " (sparc Linux/a.out)");
+#define TARGET_VERSION fprintf (stderr, " (sparc GNU/Linux with a.out)");
#undef SIZE_TYPE
#define SIZE_TYPE "unsigned int"
@@ -75,10 +70,11 @@ Boston, MA 02111-1307, USA. */
#define WCHAR_TYPE_SIZE BITS_PER_WORD
#undef CPP_PREDEFINES
-#define CPP_PREDEFINES "-Dunix -Dsparc -Dlinux -Asystem(unix) -Asystem(posix) -Acpu(sparc) -Amachine(sparc)"
+#define CPP_PREDEFINES "-Dunix -Dsparc -Dlinux -Asystem(unix) -Asystem(posix)"
-#undef CPP_SPEC
-#define CPP_SPEC "%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{msparclite:-D__sparclite__} %{mv8:-D__sparc_v8__} %{msupersparc:-D__supersparc__ -D__sparc_v8__} %{posix:-D_POSIX_SOURCE}"
+#undef CPP_SUBTARGET_SPEC
+#define CPP_SUBTARGET_SPEC \
+"%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE}"
/* Don't default to pcc-struct-return, because gcc is the only compiler,
and we want to retain compatibility with older gcc versions. */
@@ -88,9 +84,8 @@ Boston, MA 02111-1307, USA. */
#if 1
/* We no longer link with libc_p.a or libg.a by default. If you
- * want to profile or debug the Linux C library, please add
- * -lc_p or -ggdb to LDFLAGS at the link time, respectively.
- */
+ want to profile or debug the GNU/Linux C library, please add
+ -lc_p or -ggdb to LDFLAGS at the link time, respectively. */
#define LIB_SPEC \
"%{mieee-fp:-lieee} %{p:-lgmon} %{pg:-lgmon} %{!ggdb:-lc} %{ggdb:-lg}"
#else
@@ -110,7 +105,7 @@ Boston, MA 02111-1307, USA. */
#if 0
/* Define for support of TFmode long double and REAL_ARITHMETIC.
- Sparc ABI says that long double is 4 words. Linux does not support
+ Sparc ABI says that long double is 4 words. GNU/Linux does not support
long double yet. */
#define LONG_DOUBLE_TYPE_SIZE 128
#endif
diff --git a/gcc/config/sparc/linux.h b/gcc/config/sparc/linux.h
index 8129e4265e0..a5807ecc632 100644
--- a/gcc/config/sparc/linux.h
+++ b/gcc/config/sparc/linux.h
@@ -1,5 +1,5 @@
-/* Definitions for SPARC running Linux with ELF
- Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Definitions for SPARC running Linux-based GNU systems with ELF.
+ Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
Contributed by Eddie C. Dost (ecd@skynet.be)
This file is part of GNU CC.
@@ -27,7 +27,7 @@ Boston, MA 02111-1307, USA. */
#undef HAVE_ATEXIT
#define HAVE_ATEXIT
-/* Linux uses ctype from glibc.a. I am not sure how complete it is.
+/* GNU/Linux uses ctype from glibc.a. I am not sure how complete it is.
For now, we play safe. It may change later. */
#if 0
@@ -35,13 +35,14 @@ Boston, MA 02111-1307, USA. */
#define MULTIBYTE_CHARS 1
#endif
-/* There are conflicting reports about whether this system uses
- a different assembler syntax. wilson@cygnus.com says # is right. */
-#undef COMMENT_BEGIN
-#define COMMENT_BEGIN "#"
+#ifndef USE_GNULIBC_1
+#undef DEFAULT_VTABLE_THUNKS
+#define DEFAULT_VTABLE_THUNKS 1
+#endif
/* Use stabs instead of DWARF debug format. */
#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
+
#include <sparc/sysv4.h>
#undef MD_EXEC_PREFIX
@@ -56,8 +57,8 @@ Boston, MA 02111-1307, USA. */
fprintf (FILE, "\t.version\t\"01.01\"\n"); \
} while (0)
-/* Provide a STARTFILE_SPEC appropriate for Linux. Here we add
- the Linux magical crtbegin.o file (see crtstuff.c) which
+/* 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
object constructed before entering `main'. */
@@ -67,11 +68,11 @@ Boston, MA 02111-1307, USA. */
%{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\
crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"
-/* Provide a ENDFILE_SPEC appropriate for Linux. Here we tack on
- the Linux magical crtend.o file (see crtstuff.c) which
+/* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on
+ the GNU/Linux magical crtend.o file (see crtstuff.c) which
provides part of the support for getting C++ file-scope static
object constructed before entering `main', followed by a normal
- Linux "finalizer" file, `crtn.o'. */
+ GNU/Linux "finalizer" file, `crtn.o'. */
#undef ENDFILE_SPEC
#define ENDFILE_SPEC \
@@ -87,7 +88,7 @@ Boston, MA 02111-1307, USA. */
"
#undef TARGET_VERSION
-#define TARGET_VERSION fprintf (stderr, " (sparc Linux/ELF)");
+#define TARGET_VERSION fprintf (stderr, " (sparc GNU/Linux with ELF)");
#undef SIZE_TYPE
#define SIZE_TYPE "unsigned int"
@@ -102,20 +103,21 @@ Boston, MA 02111-1307, USA. */
#define WCHAR_TYPE_SIZE BITS_PER_WORD
#undef CPP_PREDEFINES
-#define CPP_PREDEFINES "-D__ELF__ -Dunix -Dsparc -Dlinux -Asystem(unix) -Asystem(posix) -Acpu(sparc) -Amachine(sparc)"
+#define CPP_PREDEFINES "-D__ELF__ -Dunix -Dsparc -Dlinux -Asystem(unix) -Asystem(posix)"
-#undef CPP_SPEC
+#undef CPP_SUBTARGET_SPEC
#ifdef USE_GNULIBC_1
-#define CPP_SPEC "%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{msparclite:-D__sparclite__} %{mv8:-D__sparc_v8__} %{msupersparc:-D__supersparc__ -D__sparc_v8__} %{posix:-D_POSIX_SOURCE}"
+#define CPP_SUBTARGET_SPEC \
+"%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE}"
#else
-#define CPP_SPEC "%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{msparclite:-D__sparclite__} %{mv8:-D__sparc_v8__} %{msupersparc:-D__supersparc__ -D__sparc_v8__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
+#define CPP_SUBTARGET_SPEC \
+"%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
#endif
#undef LIB_SPEC
/* We no longer link with libc_p.a or libg.a by default. If you
- * want to profile or debug the Linux C library, please add
- * -lc_p or -ggdb to LDFLAGS at the link time, respectively.
- */
+ want to profile or debug the GNU/Linux C library, please add
+ -lc_p or -ggdb to LDFLAGS at the link time, respectively. */
#if 1
#ifdef USE_GNULIBC_1
#define LIB_SPEC \
@@ -123,7 +125,8 @@ Boston, MA 02111-1307, USA. */
%{!profile:%{!ggdb:-lc} %{ggdb:-lg}}}"
#else
#define LIB_SPEC \
- "%{!shared: %{mieee-fp:-lieee} %{pthread:-lpthread} \
+ "%{shared: -lc} \
+ %{!shared: %{mieee-fp:-lieee} %{pthread:-lpthread} \
%{profile:-lc_p} %{!profile: -lc}}"
#endif
#else
@@ -133,7 +136,7 @@ Boston, MA 02111-1307, USA. */
%{!p:%{!pg:%{!g*:-lc} %{g*:-lg}}}}"
#endif
-/* Provide a LINK_SPEC appropriate for Linux. Here we provide support
+/* Provide a LINK_SPEC appropriate for GNU/Linux. Here we provide support
for the special GCC options -static and -shared, which allow us to
link things in one of these three modes by applying the appropriate
combinations of options at link-time. We like to support here for
@@ -231,7 +234,7 @@ do { \
#if 0
/* Define for support of TFmode long double and REAL_ARITHMETIC.
- Sparc ABI says that long double is 4 words. Linux does not support
+ Sparc ABI says that long double is 4 words. GNU/Linux does not support
long double yet. */
#define LONG_DOUBLE_TYPE_SIZE 128
#endif
diff --git a/gcc/config/sparc/linux64.h b/gcc/config/sparc/linux64.h
new file mode 100644
index 00000000000..b676e72a50f
--- /dev/null
+++ b/gcc/config/sparc/linux64.h
@@ -0,0 +1,232 @@
+/* Definitions for 64-bit SPARC running Linux-based GNU systems with ELF.
+ Copyright 1996, 1997, 1998 Free Software Foundation, Inc.
+ Contributed by David S. Miller (davem@caip.rutgers.edu)
+
+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. */
+
+/* ??? bi-architecture support will require changes to the linker
+ related specs, among perhaps other things (multilibs). */
+/* #define SPARC_BI_ARCH */
+
+#define LINUX_DEFAULT_ELF
+
+/* Don't assume anything about the header files. */
+#define NO_IMPLICIT_EXTERN_C
+
+#undef HAVE_ATEXIT
+#define HAVE_ATEXIT
+
+#include <sparc/sysv4.h>
+
+#undef MD_EXEC_PREFIX
+#undef MD_STARTFILE_PREFIX
+
+/* Output at beginning of assembler file. */
+/* The .file command should always begin the output. */
+#undef ASM_FILE_START
+#define ASM_FILE_START(FILE) \
+ do { \
+ output_file_directive (FILE, main_input_filename); \
+ fprintf (FILE, "\t.version\t\"01.01\"\n"); \
+ } while (0)
+
+#undef ASM_CPU_DEFAULT_SPEC
+#define ASM_CPU_DEFAULT_SPEC "-Av9a"
+
+/* 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
+ object constructed before entering `main'. */
+
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC \
+ "%{!shared: \
+ %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\
+ crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"
+
+/* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on
+ the GNU/Linux magical crtend.o file (see crtstuff.c) which
+ provides part of the support for getting C++ file-scope static
+ object constructed before entering `main', followed by a normal
+ GNU/Linux "finalizer" file, `crtn.o'. */
+
+#undef ENDFILE_SPEC
+#define ENDFILE_SPEC \
+ "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+
+#undef TARGET_VERSION
+#define TARGET_VERSION fprintf (stderr, " (sparc64 GNU/Linux with ELF)");
+
+/* A 64 bit v9 compiler with stack-bias,
+ in a Medium/Anywhere code model environment. */
+
+#undef TARGET_DEFAULT
+#define TARGET_DEFAULT \
+ (MASK_V9 + MASK_PTR64 + MASK_64BIT /* + MASK_HARD_QUAD */ \
+ + MASK_STACK_BIAS + MASK_APP_REGS + MASK_EPILOGUE + MASK_FPU)
+
+/* The default code model. */
+#undef SPARC_DEFAULT_CMODEL
+#define SPARC_DEFAULT_CMODEL CM_MEDANY
+
+#undef SIZE_TYPE
+#define SIZE_TYPE "long long unsigned int"
+
+#undef PTRDIFF_TYPE
+#define PTRDIFF_TYPE "long long int"
+
+#undef WCHAR_TYPE
+#define WCHAR_TYPE "long int"
+
+#undef WCHAR_TYPE_SIZE
+#define WCHAR_TYPE_SIZE BITS_PER_WORD
+
+#undef LONG_DOUBLE_TYPE_SIZE
+#define LONG_DOUBLE_TYPE_SIZE 128
+
+#undef CPP_PREDEFINES
+#define CPP_PREDEFINES "-D__ELF__ -Dunix -Dsparc -Dlinux -Asystem(unix) -Asystem(posix)"
+
+#undef CPP_SUBTARGET_SPEC
+#define CPP_SUBTARGET_SPEC "\
+%{fPIC:-D__PIC__ -D__pic__} \
+%{fpic:-D__PIC__ -D__pic__} \
+%{posix:-D_POSIX_SOURCE} \
+%{pthread:-D_REENTRANT} \
+"
+
+#undef LIB_SPEC
+#define LIB_SPEC \
+ "%{shared: -lc} \
+ %{!shared: %{mieee-fp:-lieee} %{pthread:-lpthread} \
+ %{profile:-lc_p} %{!profile: -lc}}"
+
+/* Provide a LINK_SPEC appropriate for GNU/Linux. Here we provide support
+ for the special GCC options -static and -shared, which allow us to
+ link things in one of these three modes by applying the appropriate
+ combinations of options at link-time. We like to support here for
+ as many of the other GNU linker options as possible. But I don't
+ have the time to search for those flags. I am sure how to add
+ support for -soname shared_object_name. H.J.
+
+ I took out %{v:%{!V:-V}}. It is too much :-(. They can use
+ -Wl,-V.
+
+ When the -shared link option is used a final link is not being
+ done. */
+
+/* If ELF is the default format, we should not use /lib/elf. */
+
+#undef LINK_SPEC
+#define LINK_SPEC "-m elf64_sparc -Y P,/usr/lib %{shared:-shared} \
+ %{!shared: \
+ %{!ibcs: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux64.so.2}} \
+ %{static:-static}}} \
+%{mlittle-endian:-EL} \
+"
+
+/* The sun bundled assembler doesn't accept -Yd, (and neither does gas).
+ It's safe to pass -s always, even if -g is not used. */
+#undef ASM_SPEC
+#define ASM_SPEC "\
+%{V} \
+%{v:%{!V:-V}} \
+%{!Qn:-Qy} \
+%{n} \
+%{T} \
+%{Ym,*} \
+%{Wa,*:%*} \
+-s %{fpic:-K PIC} %{fPIC:-K PIC} \
+%{mlittle-endian:-EL} \
+%(asm_cpu) %(asm_arch) \
+"
+
+/* Same as sparc.h */
+#undef DBX_REGISTER_NUMBER
+#define DBX_REGISTER_NUMBER(REGNO) (REGNO)
+
+/* System V Release 4 uses DWARF debugging info. Buf DWARF1 doesn't do
+ 64-bit anything, so we use DWARF2. */
+
+#undef DWARF2_DEBUGGING_INFO
+#undef DWARF_DEBUGGING_INFO
+#undef DBX_DEBUGGING_INFO
+#define DWARF2_DEBUGGING_INFO
+#define DBX_DEBUGGING_INFO
+
+#undef PREFERRED_DEBUGGING_TYPE
+#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
+
+#undef ASM_OUTPUT_ALIGNED_LOCAL
+#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \
+do { \
+ fputs ("\t.local\t", (FILE)); \
+ assemble_name ((FILE), (NAME)); \
+ putc ('\n', (FILE)); \
+ ASM_OUTPUT_ALIGNED_COMMON (FILE, NAME, SIZE, ALIGN); \
+} while (0)
+
+#undef COMMON_ASM_OP
+#define COMMON_ASM_OP "\t.common"
+
+/* This is how to output a definition of an internal numbered label where
+ PREFIX is the class of label and NUM is the number within the class. */
+
+#undef ASM_OUTPUT_INTERNAL_LABEL
+#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \
+ fprintf (FILE, ".L%s%d:\n", PREFIX, NUM)
+
+/* This is how to output a reference to an internal numbered label where
+ PREFIX is the class of label and NUM is the number within the class. */
+
+#undef ASM_OUTPUT_INTERNAL_LABELREF
+#define ASM_OUTPUT_INTERNAL_LABELREF(FILE,PREFIX,NUM) \
+ fprintf (FILE, ".L%s%d", PREFIX, NUM)
+
+/* This is how to store into the string LABEL
+ the symbol_ref name of an internal numbered label where
+ PREFIX is the class of label and NUM is the number within the class.
+ This is suitable for output with `assemble_name'. */
+
+#undef ASM_GENERATE_INTERNAL_LABEL
+#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \
+ sprintf (LABEL, "*.L%s%d", PREFIX, NUM)
+
+/* Stabs doesn't use this, and it confuses a simulator. */
+/* ??? Need to see what DWARF needs, if anything. */
+#undef ASM_IDENTIFY_GCC
+#define ASM_IDENTIFY_GCC(FILE)
+
+/* Define the names of various pseudo-ops used by the Sparc/svr4 assembler.
+ ??? If ints are 64 bits then UNALIGNED_INT_ASM_OP (defined elsewhere) is
+ misnamed. These should all refer to explicit sizes (half/word/xword?),
+ anything other than short/int/long/etc. */
+
+#define UNALIGNED_DOUBLE_INT_ASM_OP ".uaxword"
+
+/* DWARF bits. */
+
+/* Follow Irix 6 and not the Dwarf2 draft in using 64-bit offsets.
+ Obviously the Dwarf2 folks havn't tried to actually build systems
+ with their spec. On a 64-bit system, only 64-bit relocs become
+ RELATIVE relocations. */
+
+/* #define DWARF_OFFSET_SIZE PTR_SIZE */
diff --git a/gcc/config/sparc/rtems.h b/gcc/config/sparc/rtems.h
index 5e5ea14b1ee..55b7779818a 100644
--- a/gcc/config/sparc/rtems.h
+++ b/gcc/config/sparc/rtems.h
@@ -1,6 +1,5 @@
-/* Definitions for rtems targetting a SPARC using a.out.
-
- Copyright (C) 1996 Free Software Foundation, Inc.
+/* Definitions for rtems targeting a SPARC using a.out.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Contributed by Joel Sherrill (joel@OARcorp.com).
This file is part of GNU CC.
@@ -27,5 +26,3 @@ Boston, MA 02111-1307, USA. */
#undef CPP_PREDEFINES
#define CPP_PREDEFINES "-Dsparc -D__GCC_NEW_VARARGS__ -Drtems -D__rtems__ \
-Asystem(rtems) -Acpu(sparc) -Amachine(sparc)"
-
-/* end of sparc-rtems.h */
diff --git a/gcc/config/sparc/sol2-sld.h b/gcc/config/sparc/sol2-sld.h
new file mode 100644
index 00000000000..a82498791b9
--- /dev/null
+++ b/gcc/config/sparc/sol2-sld.h
@@ -0,0 +1,11 @@
+/* Definitions of target machine for GNU compiler, for SPARC running Solaris 2
+ using the system linker. */
+
+#include "sparc/sol2.h"
+
+/* At least up through Solaris 2.6,
+ the system linker does not work with DWARF or DWARF2,
+ since it does not have working support for relocations
+ to unaligned data. */
+
+#define LINKER_DOES_NOT_WORK_WITH_DWARF2
diff --git a/gcc/config/sparc/sol2.h b/gcc/config/sparc/sol2.h
index 97c315d942d..ff3339d0f1f 100644
--- a/gcc/config/sparc/sol2.h
+++ b/gcc/config/sparc/sol2.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler, for SPARC running Solaris 2
- Copyright 1992, 1995, 1996 Free Software Foundation, Inc.
+ Copyright 1992, 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by Ron Guilmette (rfg@netcom.com).
Additional changes by David V. Henkel-Wallace (gumby@cygnus.com).
@@ -25,14 +25,12 @@ Boston, MA 02111-1307, USA. */
#undef CPP_PREDEFINES
#define CPP_PREDEFINES \
- "-Dsun -Dsparc -Dunix -D__svr4__ -D__SVR4 \
- -Asystem(unix) -Asystem(svr4) -Acpu(sparc) -Amachine(sparc)\
- -D__GCC_NEW_VARARGS__"
+"-Dsparc -Dsun -Dunix -D__svr4__ -D__SVR4 \
+-Asystem(unix) -Asystem(svr4)"
-#undef CPP_SPEC
-#define CPP_SPEC "\
+#undef CPP_SUBTARGET_SPEC
+#define CPP_SUBTARGET_SPEC "\
%{compat-bsd:-iwithprefixbefore ucbinclude -I/usr/ucbinclude} \
-%(cpp_cpu) \
"
/* The sun bundled assembler doesn't accept -Yd, (and neither does gas).
@@ -46,15 +44,19 @@ Boston, MA 02111-1307, USA. */
/* This is here rather than in sparc.h because it's not known what
other assemblers will accept. */
-#if TARGET_CPU_DEFAULT == TARGET_CPU_sparc64
-#undef ASM_DEFAULT_SPEC
-#define ASM_DEFAULT_SPEC "-xarch=v8plus"
+#if TARGET_CPU_DEFAULT == TARGET_CPU_v9
+#undef ASM_CPU_DEFAULT_SPEC
+#define ASM_CPU_DEFAULT_SPEC "-xarch=v8plus"
+#endif
+#if TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc
+#undef ASM_CPU_DEFAULT_SPEC
+#define ASM_CPU_DEFAULT_SPEC "-xarch=v8plusa"
#endif
#undef ASM_CPU_SPEC
#define ASM_CPU_SPEC "\
%{mcpu=v8plus:-xarch=v8plus} \
-%{mcpu=ultrasparc:-xarch=v8plus} \
-%{!mcpu*:%(asm_default)} \
+%{mcpu=ultrasparc:-xarch=v8plusa} \
+%{!mcpu*:%(asm_cpu_default)} \
"
/* However it appears that Solaris 2.0 uses the same reg numbering as
@@ -140,8 +142,8 @@ Boston, MA 02111-1307, USA. */
"%{h*} %{v:-V} \
%{b} %{Wl,*:%*} \
%{static:-dn -Bstatic} \
- %{shared:-G -dy %{!mimpure-text:-z text} %{!h*:%{o*:-h %*}}} \
- %{symbolic:-Bsymbolic -G -dy -z text %{!h*:%{o*:-h %*}}} \
+ %{shared:-G -dy %{!mimpure-text:-z text}} \
+ %{symbolic:-Bsymbolic -G -dy -z text} \
%{G:-G} \
%{YP,*} \
%{R*} \
@@ -172,3 +174,8 @@ Boston, MA 02111-1307, USA. */
/* Define for support of TFmode long double and REAL_ARITHMETIC.
Sparc ABI says that long double is 4 words. */
#define LONG_DOUBLE_TYPE_SIZE 128
+
+/* But indicate that it isn't supported by the hardware. */
+#define WIDEST_HARDWARE_FP_SIZE 64
+
+#define STDC_0_IN_SYSTEM_HEADERS
diff --git a/gcc/config/sparc/sp64-aout.h b/gcc/config/sparc/sp64-aout.h
index f17cd6dfb1f..fbd4ef372f9 100644
--- a/gcc/config/sparc/sp64-aout.h
+++ b/gcc/config/sparc/sp64-aout.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler, for SPARC64, a.out.
- Copyright (C) 1994, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1994, 1996, 1997 Free Software Foundation, Inc.
Contributed by Doug Evans, dje@cygnus.com.
This file is part of GNU CC.
@@ -19,14 +19,6 @@ 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. */
-/* This is a v9 only compiler. -mv8 is not expected to work. If you want
- a v8/v9 compiler, this isn't the place to do it.
-
- The only code model supported is Medium/Low. */
-
-#define SPARC_V9 1 /* See sparc.h. */
-#define SPARC_ARCH64 1
-
#include "sparc/sparc.h"
#include "aoutos.h"
@@ -35,5 +27,9 @@ Boston, MA 02111-1307, USA. */
#undef TARGET_DEFAULT
#define TARGET_DEFAULT \
- (MASK_V9 + MASK_ARCH64 + MASK_PTR64 + MASK_HARD_QUAD \
- + MASK_MEDLOW + MASK_APP_REGS + MASK_EPILOGUE + MASK_FPU)
+ (MASK_V9 + MASK_PTR64 + MASK_64BIT + MASK_HARD_QUAD \
+ + MASK_APP_REGS + MASK_EPILOGUE + MASK_FPU)
+
+/* The only code model supported is Medium/Low. */
+#undef SPARC_DEFAULT_CMODEL
+#define SPARC_DEFAULT_CMODEL CM_MEDLOW
diff --git a/gcc/config/sparc/sp64-elf.h b/gcc/config/sparc/sp64-elf.h
index f0a36e6a1d1..0c0bb6bfbab 100644
--- a/gcc/config/sparc/sp64-elf.h
+++ b/gcc/config/sparc/sp64-elf.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler, for SPARC64, ELF.
- Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by Doug Evans, dje@cygnus.com.
This file is part of GNU CC.
@@ -19,12 +19,6 @@ 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. */
-/* This is a v9 only compiler. -mv8 is not expected to work. If you want
- a v8/v9 compiler, this isn't the place to do it. */
-
-#define SPARC_V9 1 /* See sparc.h. */
-#define SPARC_ARCH64 1
-
/* ??? We're taking the scheme of including another file and then overriding
the values we don't like a bit too far here. The alternative is to more or
less duplicate all of svr4.h, sparc/sysv4.h, and sparc/sol2.h here
@@ -35,28 +29,22 @@ Boston, MA 02111-1307, USA. */
#undef TARGET_VERSION
#define TARGET_VERSION fprintf (stderr, " (sparc64-elf)")
-/* A v9 compiler with stack-bias, 32 bit integers and 64 bit pointers,
- in a Medium/Anywhere code model environment. */
+/* A 64 bit v9 compiler without stack-bias,
+ in a Medium/Anywhere code model environment.
+ There is no stack bias as this configuration is intended for
+ embedded systems. */
#undef TARGET_DEFAULT
#define TARGET_DEFAULT \
- (MASK_V9 + MASK_ARCH64 + MASK_PTR64 + MASK_HARD_QUAD \
- + MASK_STACK_BIAS + MASK_MEDANY + MASK_APP_REGS + MASK_EPILOGUE + MASK_FPU)
-
-/* __svr4__ is used by the C library */
-/* ??? __arch64__ is subject to change. */
-#undef CPP_PREDEFINES
-#define CPP_PREDEFINES "\
--D__sparc__ -D__sparc_v9__ -D__arch64__ -D__svr4__ \
--Acpu(sparc64) -Amachine(sparc64) \
-"
+(MASK_V9 + MASK_PTR64 + MASK_64BIT + MASK_HARD_QUAD \
+ + MASK_APP_REGS + MASK_EPILOGUE + MASK_FPU)
-#undef CPP_SPEC
-#define CPP_SPEC "\
-%{mint64:-D__INT_MAX__=9223372036854775807LL -D__LONG_MAX__=9223372036854775807LL} \
-%{mlong64:-D__LONG_MAX__=9223372036854775807LL} \
-%{mlittle-endian:-D__LITTLE_ENDIAN__} \
-"
+#undef SPARC_DEFAULT_CMODEL
+#define SPARC_DEFAULT_CMODEL CM_EMBMEDANY
+
+/* __svr4__ is used by the C library (FIXME) */
+#undef CPP_SUBTARGET_SPEC
+#define CPP_SUBTARGET_SPEC "-D__svr4__"
#undef MD_EXEC_PREFIX
#undef MD_STARTFILE_PREFIX
@@ -65,6 +53,7 @@ Boston, MA 02111-1307, USA. */
#define ASM_SPEC "\
%{v:-V} -s %{fpic:-K PIC} %{fPIC:-K PIC} \
%{mlittle-endian:-EL} \
+%(asm_cpu) %(asm_arch) \
"
/* This is taken from sol2.h. */
@@ -100,16 +89,6 @@ crtbegin.o%s \
#undef WORDS_BIG_ENDIAN
#define WORDS_BIG_ENDIAN (! TARGET_LITTLE_ENDIAN)
-/* Unfortunately, svr4.h redefines these so we have to restore them to
- their original values in sparc.h. */
-/* ??? It might be possible to eventually get svr4.h to do the right thing. */
-
-#undef PTRDIFF_TYPE
-#define PTRDIFF_TYPE "long long int"
-
-#undef SIZE_TYPE
-#define SIZE_TYPE "long long unsigned int"
-
/* ??? This should be 32 bits for v9 but what can we do? */
#undef WCHAR_TYPE
#define WCHAR_TYPE "short unsigned int"
@@ -117,9 +96,18 @@ crtbegin.o%s \
#undef WCHAR_TYPE_SIZE
#define WCHAR_TYPE_SIZE 16
+#undef LONG_DOUBLE_TYPE_SIZE
+#define LONG_DOUBLE_TYPE_SIZE 128
+
+#undef PTRDIFF_TYPE
+#define PTRDIFF_TYPE "long long int"
+#undef SIZE_TYPE
+#define SIZE_TYPE "long long unsigned int"
+
/* The medium/anywhere code model practically requires us to put jump tables
in the text section as gcc is unable to distinguish LABEL_REF's of jump
tables from other label refs (when we need to). */
+/* ??? Revisit this. */
#undef JUMP_TABLES_IN_TEXT_SECTION
#define JUMP_TABLES_IN_TEXT_SECTION
@@ -128,6 +116,7 @@ crtbegin.o%s \
anyway so it is the default. */
#define DWARF_DEBUGGING_INFO
+#define DWARF2_DEBUGGING_INFO
#define DBX_DEBUGGING_INFO
#undef PREFERRED_DEBUGGING_TYPE
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index ead4da03144..e3f5ab414c8 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -1,5 +1,5 @@
/* Subroutines for insn-output.c for Sun SPARC.
- Copyright (C) 1987, 88, 89, 92-96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 89, 92-97, 1998 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com)
64 bit SPARC V9 support by Michael Tiemann, Jim Wilson, and Doug Evans,
at Cygnus Support.
@@ -21,8 +21,8 @@ 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 <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "tree.h"
#include "rtl.h"
#include "regs.h"
@@ -64,17 +64,6 @@ static int actual_fsize;
rtx sparc_compare_op0, sparc_compare_op1;
-/* Count of named arguments (v9 only).
- ??? INIT_CUMULATIVE_ARGS initializes these, and FUNCTION_ARG_ADVANCE
- increments SPARC_ARG_COUNT. They are then used by
- FUNCTION_ARG_CALLEE_COPIES to determine if the argument is really a named
- argument or not. This hack is necessary because the NAMED argument to the
- FUNCTION_ARG_XXX macros is not what it says it is: it does not include the
- last named argument. */
-
-int sparc_arg_count;
-int sparc_n_named_args;
-
/* We may need an epilogue if we spill too many registers.
If this is non-zero, then we branch here for the epilogue. */
static rtx leaf_label;
@@ -111,11 +100,38 @@ char leaf_reg_remap[] =
static char *frame_base_name;
static int frame_base_offset;
-static rtx find_addr_reg ();
-static void sparc_init_modes ();
+static rtx pic_setup_code PROTO((void));
+static rtx find_addr_reg PROTO((rtx));
+static void sparc_init_modes PROTO((void));
+static int save_regs PROTO((FILE *, int, int, char *,
+ int, int, int));
+static int restore_regs PROTO((FILE *, int, int, char *, int, int));
+static void build_big_number PROTO((FILE *, int, char *));
+static function_arg_slotno PROTO((const CUMULATIVE_ARGS *,
+ enum machine_mode, tree, int, int,
+ int *, int *));
+
+#ifdef DWARF2_DEBUGGING_INFO
+extern char *dwarf2out_cfi_label ();
+#endif
/* Option handling. */
+/* Code model option as passed by user. */
+char *sparc_cmodel_string;
+/* Parsed value. */
+enum cmodel sparc_cmodel;
+
+/* Record alignment options as passed by user. */
+char *sparc_align_loops_string;
+char *sparc_align_jumps_string;
+char *sparc_align_funcs_string;
+
+/* Parsed values, as a power of two. */
+int sparc_align_loops;
+int sparc_align_jumps;
+int sparc_align_funcs;
+
struct sparc_cpu_select sparc_select[] =
{
/* switch name, tune arch */
@@ -134,16 +150,30 @@ enum processor_type sparc_cpu;
void
sparc_override_options ()
{
+ static struct code_model {
+ char *name;
+ int value;
+ } cmodels[] = {
+ { "32", CM_32 },
+ { "medlow", CM_MEDLOW },
+ { "medmid", CM_MEDMID },
+ { "medany", CM_MEDANY },
+ { "embmedany", CM_EMBMEDANY },
+ { 0, 0 }
+ };
+ struct code_model *cmodel;
/* Map TARGET_CPU_DEFAULT to value for -m{arch,tune}=. */
static struct cpu_default {
int cpu;
char *name;
} cpu_default[] = {
+ /* There must be one entry here for each TARGET_CPU value. */
{ TARGET_CPU_sparc, "cypress" },
- { TARGET_CPU_v8, "v8" },
- { TARGET_CPU_supersparc, "supersparc" },
{ TARGET_CPU_sparclet, "tsc701" },
{ TARGET_CPU_sparclite, "f930" },
+ { TARGET_CPU_v8, "v8" },
+ { TARGET_CPU_supersparc, "supersparc" },
+ { TARGET_CPU_v9, "v9" },
{ TARGET_CPU_ultrasparc, "ultrasparc" },
{ 0 }
};
@@ -168,22 +198,47 @@ sparc_override_options ()
{ "sparclet", PROCESSOR_SPARCLET, MASK_ISA, MASK_SPARCLET },
/* TEMIC sparclet */
{ "tsc701", PROCESSOR_TSC701, MASK_ISA, MASK_SPARCLET },
- /* "v9" is used to specify a true 64 bit architecture.
- "v8plus" is what Sun calls Solaris2 running on UltraSPARC's. */
+ /* "v8plus" is what Sun calls Solaris2.5 running on UltraSPARC's. */
{ "v8plus", PROCESSOR_V8PLUS, MASK_ISA, MASK_V9 },
-#if SPARC_ARCH64
{ "v9", PROCESSOR_V9, MASK_ISA, MASK_V9 },
-#endif
/* TI ultrasparc */
{ "ultrasparc", PROCESSOR_ULTRASPARC, MASK_ISA, MASK_V9 },
{ 0 }
};
struct cpu_table *cpu;
struct sparc_cpu_select *sel;
+ int fpu;
- int fpu = TARGET_FPU; /* save current -mfpu status */
+#ifndef SPARC_BI_ARCH
+ /* Check for unsupported architecture size. */
+ if (! TARGET_64BIT != DEFAULT_ARCH32_P)
+ {
+ error ("%s is not supported by this configuration",
+ DEFAULT_ARCH32_P ? "-m64" : "-m32");
+ }
+#endif
- /* Set the default. */
+ /* Code model selection. */
+ sparc_cmodel = SPARC_DEFAULT_CMODEL;
+ if (sparc_cmodel_string != NULL)
+ {
+ if (TARGET_ARCH64)
+ {
+ for (cmodel = &cmodels[0]; cmodel->name; cmodel++)
+ if (strcmp (sparc_cmodel_string, cmodel->name) == 0)
+ break;
+ if (cmodel->name == NULL)
+ error ("bad value (%s) for -mcmodel= switch", sparc_cmodel_string);
+ else
+ sparc_cmodel = cmodel->value;
+ }
+ else
+ error ("-mcmodel= is not supported on 32 bit systems");
+ }
+
+ fpu = TARGET_FPU; /* save current -mfpu status */
+
+ /* Set the default CPU. */
for (def = &cpu_default[0]; def->name; ++def)
if (def->cpu == TARGET_CPU_DEFAULT)
break;
@@ -223,6 +278,47 @@ sparc_override_options ()
if (TARGET_V9 && TARGET_ARCH32)
target_flags |= MASK_DEPRECATED_V8_INSNS;
+ /* Validate -malign-loops= value, or provide default. */
+ if (sparc_align_loops_string)
+ {
+ sparc_align_loops = exact_log2 (atoi (sparc_align_loops_string));
+ if (sparc_align_loops < 2 || sparc_align_loops > 7)
+ fatal ("-malign-loops=%s is not between 4 and 128 or is not a power of two",
+ sparc_align_loops_string);
+ }
+ else
+ {
+ /* ??? This relies on ASM_OUTPUT_ALIGN to not emit the alignment if
+ its 0. This sounds a bit kludgey. */
+ sparc_align_loops = 0;
+ }
+
+ /* Validate -malign-jumps= value, or provide default. */
+ if (sparc_align_jumps_string)
+ {
+ sparc_align_jumps = exact_log2 (atoi (sparc_align_jumps_string));
+ if (sparc_align_jumps < 2 || sparc_align_loops > 7)
+ fatal ("-malign-jumps=%s is not between 4 and 128 or is not a power of two",
+ sparc_align_jumps_string);
+ }
+ else
+ {
+ /* ??? This relies on ASM_OUTPUT_ALIGN to not emit the alignment if
+ its 0. This sounds a bit kludgey. */
+ sparc_align_jumps = 0;
+ }
+
+ /* Validate -malign-functions= value, or provide default. */
+ if (sparc_align_funcs_string)
+ {
+ sparc_align_funcs = exact_log2 (atoi (sparc_align_funcs_string));
+ if (sparc_align_funcs < 2 || sparc_align_loops > 7)
+ fatal ("-malign-functions=%s is not between 4 and 128 or is not a power of two",
+ sparc_align_funcs_string);
+ }
+ else
+ sparc_align_funcs = DEFAULT_SPARC_ALIGN_FUNCS;
+
/* Do various machine dependent initializations. */
sparc_init_modes ();
}
@@ -244,7 +340,7 @@ static rtx fpconv_stack_temp;
/* Called once for each function. */
void
-sparc64_init_expanders ()
+sparc_init_expanders ()
{
fpconv_stack_temp = NULL_RTX;
}
@@ -255,10 +351,10 @@ rtx
sparc64_fpconv_stack_temp ()
{
if (fpconv_stack_temp == NULL_RTX)
- fpconv_stack_temp =
- assign_stack_local (DImode, GET_MODE_SIZE (DImode), 0);
+ fpconv_stack_temp =
+ assign_stack_local (DImode, GET_MODE_SIZE (DImode), 0);
- return fpconv_stack_temp;
+ return fpconv_stack_temp;
}
/* Miscellaneous utilities. */
@@ -492,7 +588,7 @@ sp64_medium_pic_operand (op, mode)
/* Return 1 if the operand is a data segment reference. This includes
the readonly data segment, or in other words anything but the text segment.
This is needed in the medium/anywhere code model on v9. These values
- are accessed with MEDANY_BASE_REG. */
+ are accessed with EMBMEDANY_BASE_REG. */
int
data_segment_operand (op, mode)
@@ -587,7 +683,7 @@ move_operand (op, mode)
if (register_operand (op, mode))
return 1;
if (GET_CODE (op) == CONST_INT)
- return (SMALL_INT (op) || (INTVAL (op) & 0x3ff) == 0);
+ return SMALL_INT (op) || SPARC_SETHI_P (INTVAL (op));
if (GET_MODE (op) != mode)
return 0;
@@ -787,11 +883,11 @@ arith_double_operand (op, mode)
|| (GET_CODE (op) == CONST_INT && SMALL_INT (op))
|| (! TARGET_ARCH64
&& GET_CODE (op) == CONST_DOUBLE
- && (unsigned) (CONST_DOUBLE_LOW (op) + 0x1000) < 0x2000
- && (unsigned) (CONST_DOUBLE_HIGH (op) + 0x1000) < 0x2000)
+ && (unsigned HOST_WIDE_INT) (CONST_DOUBLE_LOW (op) + 0x1000) < 0x2000
+ && (unsigned HOST_WIDE_INT) (CONST_DOUBLE_HIGH (op) + 0x1000) < 0x2000)
|| (TARGET_ARCH64
&& GET_CODE (op) == CONST_DOUBLE
- && (unsigned) (CONST_DOUBLE_LOW (op) + 0x1000) < 0x2000
+ && (unsigned HOST_WIDE_INT) (CONST_DOUBLE_LOW (op) + 0x1000) < 0x2000
&& ((CONST_DOUBLE_HIGH (op) == -1
&& (CONST_DOUBLE_LOW (op) & 0x1000) == 0x1000)
|| (CONST_DOUBLE_HIGH (op) == 0
@@ -811,14 +907,14 @@ arith11_double_operand (op, mode)
return (register_operand (op, mode)
|| (GET_CODE (op) == CONST_DOUBLE
&& (GET_MODE (op) == mode || GET_MODE (op) == VOIDmode)
- && (unsigned) (CONST_DOUBLE_LOW (op) + 0x400) < 0x800
+ && (unsigned HOST_WIDE_INT) (CONST_DOUBLE_LOW (op) + 0x400) < 0x800
&& ((CONST_DOUBLE_HIGH (op) == -1
&& (CONST_DOUBLE_LOW (op) & 0x400) == 0x400)
|| (CONST_DOUBLE_HIGH (op) == 0
&& (CONST_DOUBLE_LOW (op) & 0x400) == 0)))
|| (GET_CODE (op) == CONST_INT
&& (GET_MODE (op) == mode || GET_MODE (op) == VOIDmode)
- && (unsigned) (INTVAL (op) + 0x400) < 0x800));
+ && (unsigned HOST_WIDE_INT) (INTVAL (op) + 0x400) < 0x800));
}
/* Return true if OP is a register, or is a CONST_INT or CONST_DOUBLE that
@@ -841,7 +937,7 @@ arith10_double_operand (op, mode)
&& (CONST_DOUBLE_LOW (op) & 0x200) == 0)))
|| (GET_CODE (op) == CONST_INT
&& (GET_MODE (op) == mode || GET_MODE (op) == VOIDmode)
- && (unsigned) (INTVAL (op) + 0x200) < 0x400));
+ && (unsigned HOST_WIDE_INT) (INTVAL (op) + 0x200) < 0x400));
}
/* Return truth value of whether OP is a integer which fits the
@@ -1236,9 +1332,8 @@ reg_unused_after (reg, insn)
return 1;
}
-/* The rtx for the global offset table which is a special form
- that *is* a position independent symbolic constant. */
-static rtx pic_pc_rtx;
+/* The table we use to reference PIC data. */
+static rtx global_offset_table;
/* Ensure that we are not using patterns that are not OK with PIC. */
@@ -1251,7 +1346,11 @@ check_pic (i)
case 1:
if (GET_CODE (recog_operand[i]) == SYMBOL_REF
|| (GET_CODE (recog_operand[i]) == CONST
- && ! rtx_equal_p (pic_pc_rtx, recog_operand[i])))
+ && ! (GET_CODE (XEXP (recog_operand[i], 0)) == MINUS
+ && (XEXP (XEXP (recog_operand[i], 0), 0)
+ == global_offset_table)
+ && (GET_CODE (XEXP (XEXP (recog_operand[i], 0), 1))
+ == CONST))))
abort ();
case 2:
default:
@@ -1384,102 +1483,108 @@ initialize_pic ()
{
}
-/* Emit special PIC prologues and epilogues. */
+/* Return the RTX for insns to set the PIC register. */
-void
-finalize_pic ()
+static rtx
+pic_setup_code ()
{
- /* The table we use to reference PIC data. */
- rtx global_offset_table;
- /* Labels to get the PC in the prologue of this function. */
+ rtx pic_pc_rtx;
rtx l1, l2;
rtx seq;
- int orig_flag_pic = flag_pic;
-
- if (current_function_uses_pic_offset_table == 0)
- return;
-
- if (! flag_pic)
- abort ();
-
- flag_pic = 0;
-
- /* ??? sparc64 pic currently under construction. */
start_sequence ();
+ /* If -O0, show the PIC register remains live before this. */
+ if (obey_regdecls)
+ emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx));
+
l1 = gen_label_rtx ();
- /* Initialize every time through, since we can't easily
- know this to be permanent. */
- global_offset_table = gen_rtx (SYMBOL_REF, Pmode, "_GLOBAL_OFFSET_TABLE_");
pic_pc_rtx = gen_rtx (CONST, Pmode,
gen_rtx (MINUS, Pmode,
global_offset_table,
gen_rtx (CONST, Pmode,
gen_rtx (MINUS, Pmode,
- gen_rtx (LABEL_REF, VOIDmode, l1),
+ gen_rtx (LABEL_REF,
+ VOIDmode, l1),
pc_rtx))));
- if (! TARGET_ARCH64)
- {
- l2 = gen_label_rtx ();
- emit_label (l1);
- /* Note that we pun calls and jumps here! */
- emit_jump_insn (gen_get_pc_sp32 (l2));
- emit_label (l2);
-
- emit_insn (gen_rtx (SET, VOIDmode, pic_offset_table_rtx,
- gen_rtx (HIGH, Pmode, pic_pc_rtx)));
+ /* sparc64: the RDPC instruction doesn't pair, and puts 4 bubbles in the
+ pipe to boot. So don't use it here, especially when we're
+ doing a save anyway because of %l7. */
- emit_insn (gen_rtx (SET, VOIDmode,
- pic_offset_table_rtx,
- gen_rtx (LO_SUM, Pmode,
- pic_offset_table_rtx, pic_pc_rtx)));
- emit_insn (gen_rtx (SET, VOIDmode,
- pic_offset_table_rtx,
- gen_rtx (PLUS, Pmode,
- pic_offset_table_rtx,
- gen_rtx (REG, Pmode, 15))));
+ l2 = gen_label_rtx ();
+ emit_label (l1);
- /* emit_insn (gen_rtx (ASM_INPUT, VOIDmode, "!#PROLOGUE# 1")); */
- LABEL_PRESERVE_P (l1) = 1;
- LABEL_PRESERVE_P (l2) = 1;
- }
- else
- {
- /* ??? This definately isn't right for -mfullany. */
- /* ??? And it doesn't quite seem right for the others either. */
- emit_label (l1);
- emit_insn (gen_get_pc_sp64 (gen_rtx (REG, Pmode, 1)));
+ /* Iff we are doing delay branch optimization, slot the sethi up
+ here so that it will fill the delay slot of the call. */
+ if (flag_delayed_branch)
+ emit_insn (gen_rtx (SET, VOIDmode, pic_offset_table_rtx,
+ gen_rtx (HIGH, Pmode, pic_pc_rtx)));
- /* Don't let the scheduler separate the previous insn from `l1'. */
- emit_insn (gen_blockage ());
+ /* Note that we pun calls and jumps here! */
+ emit_jump_insn (gen_get_pc_via_call (l2, l1));
- emit_insn (gen_rtx (SET, VOIDmode, pic_offset_table_rtx,
- gen_rtx (HIGH, Pmode, pic_pc_rtx)));
+ emit_label (l2);
- emit_insn (gen_rtx (SET, VOIDmode,
- pic_offset_table_rtx,
- gen_rtx (LO_SUM, Pmode,
- pic_offset_table_rtx, pic_pc_rtx)));
- emit_insn (gen_rtx (SET, VOIDmode,
- pic_offset_table_rtx,
- gen_rtx (PLUS, Pmode,
- pic_offset_table_rtx, gen_rtx (REG, Pmode, 1))));
+ if (!flag_delayed_branch)
+ emit_insn (gen_rtx (SET, VOIDmode, pic_offset_table_rtx,
+ gen_rtx (HIGH, Pmode, pic_pc_rtx)));
- /* emit_insn (gen_rtx (ASM_INPUT, VOIDmode, "!#PROLOGUE# 1")); */
- LABEL_PRESERVE_P (l1) = 1;
- }
+ emit_insn (gen_rtx (SET, VOIDmode,
+ pic_offset_table_rtx,
+ gen_rtx (LO_SUM, Pmode,
+ pic_offset_table_rtx, pic_pc_rtx)));
+ emit_insn (gen_rtx (SET, VOIDmode,
+ pic_offset_table_rtx,
+ gen_rtx (PLUS, Pmode,
+ pic_offset_table_rtx,
+ gen_rtx (REG, Pmode, 15))));
- flag_pic = orig_flag_pic;
+ /* emit_insn (gen_rtx (ASM_INPUT, VOIDmode, "!#PROLOGUE# 1")); */
+ LABEL_PRESERVE_P (l1) = 1;
+ LABEL_PRESERVE_P (l2) = 1;
seq = gen_sequence ();
end_sequence ();
- emit_insn_after (seq, get_insns ());
+
+ return seq;
+}
+
+/* Emit special PIC prologues and epilogues. */
+
+void
+finalize_pic ()
+{
+ /* Labels to get the PC in the prologue of this function. */
+ int orig_flag_pic = flag_pic;
+ rtx insn;
+
+ if (current_function_uses_pic_offset_table == 0)
+ return;
+
+ if (! flag_pic)
+ abort ();
+
+ /* Initialize every time through, since we can't easily
+ know this to be permanent. */
+ global_offset_table = gen_rtx (SYMBOL_REF, Pmode, "_GLOBAL_OFFSET_TABLE_");
+ flag_pic = 0;
+
+ emit_insn_after (pic_setup_code (), get_insns ());
+
+ /* Insert the code in each nonlocal goto receiver. */
+ for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
+ if (GET_CODE (insn) == INSN && GET_CODE (PATTERN (insn)) == UNSPEC_VOLATILE
+ && XINT (PATTERN (insn), 1) == 4)
+ emit_insn_after (pic_setup_code (), insn);
+
+ flag_pic = orig_flag_pic;
/* Need to emit this whether or not we obey regdecls,
- since setjmp/longjmp can cause life info to screw up. */
+ since setjmp/longjmp can cause life info to screw up.
+ ??? In the case where we don't obey regdecls, this is not sufficient
+ since we may not fall out the bottom. */
emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx));
}
@@ -1569,10 +1674,10 @@ emit_move_sequence (operands, mode)
}
else if (GET_CODE (operand1) == CONST_INT
? (! SMALL_INT (operand1)
- && (INTVAL (operand1) & 0x3ff) != 0)
- : (GET_CODE (operand1) == CONST_DOUBLE
- ? ! arith_double_operand (operand1, DImode)
- : 1))
+ && ! SPARC_SETHI_P (INTVAL (operand1)))
+ : GET_CODE (operand1) == CONST_DOUBLE
+ ? ! arith_double_operand (operand1, DImode)
+ : 1)
{
/* For DImode values, temp must be operand0 because of the way
HI and LO_SUM work. The LO_SUM operator only copies half of
@@ -1596,6 +1701,10 @@ emit_move_sequence (operands, mode)
emit_insn (gen_rtx (SET, VOIDmode, temp,
gen_rtx (HIGH, mode, operand1)));
+ if (GET_CODE (operand1) == CONST_INT)
+ operand1 = GEN_INT (INTVAL (operand1) & 0xffffffff);
+ else if (GET_CODE (operand1) == CONST_DOUBLE)
+ operand1 = GEN_INT (CONST_DOUBLE_LOW (operand1) & 0xffffffff);
operands[1] = gen_rtx (LO_SUM, mode, temp, operand1);
}
}
@@ -1605,7 +1714,12 @@ emit_move_sequence (operands, mode)
}
/* Return the best assembler insn template
- for moving operands[1] into operands[0] as a fullword. */
+ for moving operands[1] into operands[0] as a 4 byte quantity.
+
+ This isn't intended to be very smart. It is up to the caller to
+ choose the best way to do things.
+
+ Note that OPERANDS may be modified to suit the returned string. */
char *
singlemove_string (operands)
@@ -1631,7 +1745,7 @@ singlemove_string (operands)
REAL_VALUE_FROM_CONST_DOUBLE (r, operands[1]);
REAL_VALUE_TO_TARGET_SINGLE (r, i);
- operands[1] = gen_rtx (CONST_INT, VOIDmode, i);
+ operands[1] = GEN_INT (i);
if (CONST_OK_FOR_LETTER_P (i, 'I'))
return "mov %1,%0";
@@ -1643,10 +1757,11 @@ singlemove_string (operands)
else if (GET_CODE (operands[1]) == CONST_INT
&& ! CONST_OK_FOR_LETTER_P (INTVAL (operands[1]), 'I'))
{
- int i = INTVAL (operands[1]);
+ HOST_WIDE_INT i = INTVAL (operands[1]);
/* If all low order 10 bits are clear, then we only need a single
sethi insn to load the constant. */
+ /* FIXME: Use SETHI_P. */
if ((i & 0x000003FF) != 0)
return "sethi %%hi(%a1),%0\n\tor %0,%%lo(%a1),%0";
else
@@ -1655,7 +1770,59 @@ singlemove_string (operands)
/* Operand 1 must be a register, or a 'I' type CONST_INT. */
return "mov %1,%0";
}
-
+
+/* Return the best assembler insn template
+ for moving operands[1] into operands[0] as an 8 byte quantity.
+
+ This isn't intended to be very smart. It is up to the caller to
+ choose the best way to do things.
+
+ Note that OPERANDS may be modified to suit the returned string. */
+
+char *
+doublemove_string (operands)
+ rtx *operands;
+{
+ rtx op0 = operands[0], op1 = operands[1];
+
+ if (GET_CODE (op0) == MEM)
+ {
+ if (GET_CODE (op1) == REG)
+ {
+ if (FP_REG_P (op1))
+ return "std %1,%0";
+ return TARGET_ARCH64 ? "stx %1,%0" : "std %1,%0";
+ }
+ if (TARGET_ARCH64
+ && (op1 == const0_rtx
+ || (GET_MODE (op1) != VOIDmode
+ && op1 == CONST0_RTX (GET_MODE (op1)))))
+ return "stx %r1,%0";
+ abort ();
+ }
+ else if (GET_CODE (op1) == MEM)
+ {
+ if (GET_CODE (op0) != REG)
+ abort ();
+ if (FP_REG_P (op0))
+ return "ldd %1,%0";
+ return TARGET_ARCH64 ? "ldx %1,%0" : "ldd %1,%0";
+ }
+ else if (GET_CODE (operands[1]) == CONST_DOUBLE)
+ {
+ /* ??? Unfinished, and maybe not needed. */
+ abort ();
+ }
+ else if (GET_CODE (operands[1]) == CONST_INT
+ && ! CONST_OK_FOR_LETTER_P (INTVAL (operands[1]), 'I'))
+ {
+ /* ??? Unfinished, and maybe not needed. */
+ abort ();
+ }
+ /* Operand 1 must be a register, or a 'I' type CONST_INT. */
+ return "mov %1,%0";
+}
+
/* Return non-zero if it is OK to assume that the given memory operand is
aligned at least to a 8-byte boundary. This should only be called
for memory accesses whose size is 8 bytes or larger. */
@@ -1996,17 +2163,25 @@ output_move_quad (operands)
if (optype0 == REGOP)
{
- wordpart[0][0] = gen_rtx (REG, SImode, REGNO (op0) + 0);
- wordpart[1][0] = gen_rtx (REG, SImode, REGNO (op0) + 1);
- wordpart[2][0] = gen_rtx (REG, SImode, REGNO (op0) + 2);
- wordpart[3][0] = gen_rtx (REG, SImode, REGNO (op0) + 3);
+ wordpart[0][0] = gen_rtx (REG, word_mode, REGNO (op0) + 0);
+ wordpart[1][0] = gen_rtx (REG, word_mode, REGNO (op0) + 1);
+ if (TARGET_ARCH32)
+ {
+ wordpart[2][0] = gen_rtx (REG, word_mode, REGNO (op0) + 2);
+ wordpart[3][0] = gen_rtx (REG, word_mode, REGNO (op0) + 3);
+ }
}
else if (optype0 == OFFSOP)
{
wordpart[0][0] = adj_offsettable_operand (op0, 0);
- wordpart[1][0] = adj_offsettable_operand (op0, 4);
- wordpart[2][0] = adj_offsettable_operand (op0, 8);
- wordpart[3][0] = adj_offsettable_operand (op0, 12);
+ if (TARGET_ARCH32)
+ {
+ wordpart[1][0] = adj_offsettable_operand (op0, 4);
+ wordpart[2][0] = adj_offsettable_operand (op0, 8);
+ wordpart[3][0] = adj_offsettable_operand (op0, 12);
+ }
+ else
+ wordpart[1][0] = adj_offsettable_operand (op0, 8);
}
else
{
@@ -2018,17 +2193,25 @@ output_move_quad (operands)
if (optype1 == REGOP)
{
- wordpart[0][1] = gen_rtx (REG, SImode, REGNO (op1) + 0);
- wordpart[1][1] = gen_rtx (REG, SImode, REGNO (op1) + 1);
- wordpart[2][1] = gen_rtx (REG, SImode, REGNO (op1) + 2);
- wordpart[3][1] = gen_rtx (REG, SImode, REGNO (op1) + 3);
+ wordpart[0][1] = gen_rtx (REG, word_mode, REGNO (op1) + 0);
+ wordpart[1][1] = gen_rtx (REG, word_mode, REGNO (op1) + 1);
+ if (TARGET_ARCH32)
+ {
+ wordpart[2][1] = gen_rtx (REG, word_mode, REGNO (op1) + 2);
+ wordpart[3][1] = gen_rtx (REG, word_mode, REGNO (op1) + 3);
+ }
}
else if (optype1 == OFFSOP)
{
wordpart[0][1] = adj_offsettable_operand (op1, 0);
- wordpart[1][1] = adj_offsettable_operand (op1, 4);
- wordpart[2][1] = adj_offsettable_operand (op1, 8);
- wordpart[3][1] = adj_offsettable_operand (op1, 12);
+ if (TARGET_ARCH32)
+ {
+ wordpart[1][1] = adj_offsettable_operand (op1, 4);
+ wordpart[2][1] = adj_offsettable_operand (op1, 8);
+ wordpart[3][1] = adj_offsettable_operand (op1, 12);
+ }
+ else
+ wordpart[1][1] = adj_offsettable_operand (op1, 8);
}
else if (optype1 == CNSTOP)
{
@@ -2075,12 +2258,13 @@ output_move_quad (operands)
/* If this is a floating point register higher than %f31,
then we *must* use an aligned load, since `ld' will not accept
the register number. */
- || (TARGET_V9 && REGNO (reg) >= 64))
+ || (TARGET_V9 && REGNO (reg) >= SPARC_FIRST_V9_FP_REG))
{
if (TARGET_V9 && FP_REG_P (reg) && TARGET_HARD_QUAD)
{
if ((REGNO (reg) & 3) != 0)
abort ();
+ /* ??? Can `mem' have an inappropriate alignment here? */
return (mem == op1 ? "ldq %1,%0" : "stq %1,%0");
}
operands[2] = adj_offsettable_operand (mem, 8);
@@ -2095,21 +2279,36 @@ output_move_quad (operands)
/* If the first move would clobber the source of the second one,
do them in the other order. */
- /* Overlapping registers. */
- if (optype0 == REGOP && optype1 == REGOP
- && (REGNO (op0) == REGNO (wordpart[1][3])
- || REGNO (op0) == REGNO (wordpart[1][2])
- || REGNO (op0) == REGNO (wordpart[1][1])))
+ /* Overlapping registers? */
+ if (TARGET_ARCH32)
{
- /* Do fourth word. */
- output_asm_insn (singlemove_string (wordpart[3]), wordpart[3]);
- /* Do the third word. */
- output_asm_insn (singlemove_string (wordpart[2]), wordpart[2]);
- /* Do the second word. */
- output_asm_insn (singlemove_string (wordpart[1]), wordpart[1]);
- /* Do lowest-numbered word. */
- return singlemove_string (wordpart[0]);
+ if (optype0 == REGOP && optype1 == REGOP
+ && (REGNO (op0) == REGNO (wordpart[1][3])
+ || REGNO (op0) == REGNO (wordpart[1][2])
+ || REGNO (op0) == REGNO (wordpart[1][1])))
+ {
+ /* Do fourth word. */
+ output_asm_insn (singlemove_string (wordpart[3]), wordpart[3]);
+ /* Do the third word. */
+ output_asm_insn (singlemove_string (wordpart[2]), wordpart[2]);
+ /* Do the second word. */
+ output_asm_insn (singlemove_string (wordpart[1]), wordpart[1]);
+ /* Do lowest-numbered word. */
+ output_asm_insn (singlemove_string (wordpart[0]), wordpart[0]);
+ return "";
+ }
}
+ else /* TARGET_ARCH64 */
+ {
+ if (optype0 == REGOP && optype1 == REGOP
+ && REGNO (op0) == REGNO (wordpart[1][1]))
+ {
+ output_asm_insn ("mov %1,%0", wordpart[1]);
+ output_asm_insn ("mov %1,%0", wordpart[0]);
+ return "";
+ }
+ }
+
/* Loading into a register which overlaps a register used in the address. */
if (optype0 == REGOP && optype1 != REGOP
&& reg_overlap_mentioned_p (op0, op1))
@@ -2122,42 +2321,64 @@ output_move_quad (operands)
abort ();
}
- /* Normal case: move the four words in lowest to highest address order. */
+ /* Normal case: move the words in lowest to highest address order. */
- output_asm_insn (singlemove_string (wordpart[0]), wordpart[0]);
+ if (TARGET_ARCH32)
+ {
+ output_asm_insn (singlemove_string (wordpart[0]), wordpart[0]);
- /* Make any unoffsettable addresses point at the second word. */
- if (addreg0)
- output_asm_insn ("add %0,0x4,%0", &addreg0);
- if (addreg1)
- output_asm_insn ("add %0,0x4,%0", &addreg1);
+ /* Make any unoffsettable addresses point at the second word. */
+ if (addreg0)
+ output_asm_insn ("add %0,0x4,%0", &addreg0);
+ if (addreg1)
+ output_asm_insn ("add %0,0x4,%0", &addreg1);
- /* Do the second word. */
- output_asm_insn (singlemove_string (wordpart[1]), wordpart[1]);
+ /* Do the second word. */
+ output_asm_insn (singlemove_string (wordpart[1]), wordpart[1]);
- /* Make any unoffsettable addresses point at the third word. */
- if (addreg0)
- output_asm_insn ("add %0,0x4,%0", &addreg0);
- if (addreg1)
- output_asm_insn ("add %0,0x4,%0", &addreg1);
+ /* Make any unoffsettable addresses point at the third word. */
+ if (addreg0)
+ output_asm_insn ("add %0,0x4,%0", &addreg0);
+ if (addreg1)
+ output_asm_insn ("add %0,0x4,%0", &addreg1);
+
+ /* Do the third word. */
+ output_asm_insn (singlemove_string (wordpart[2]), wordpart[2]);
- /* Do the third word. */
- output_asm_insn (singlemove_string (wordpart[2]), wordpart[2]);
+ /* Make any unoffsettable addresses point at the fourth word. */
+ if (addreg0)
+ output_asm_insn ("add %0,0x4,%0", &addreg0);
+ if (addreg1)
+ output_asm_insn ("add %0,0x4,%0", &addreg1);
- /* Make any unoffsettable addresses point at the fourth word. */
- if (addreg0)
- output_asm_insn ("add %0,0x4,%0", &addreg0);
- if (addreg1)
- output_asm_insn ("add %0,0x4,%0", &addreg1);
+ /* Do the fourth word. */
+ output_asm_insn (singlemove_string (wordpart[3]), wordpart[3]);
- /* Do the fourth word. */
- output_asm_insn (singlemove_string (wordpart[3]), wordpart[3]);
+ /* Undo the adds we just did. */
+ if (addreg0)
+ output_asm_insn ("add %0,-0xc,%0", &addreg0);
+ if (addreg1)
+ output_asm_insn ("add %0,-0xc,%0", &addreg1);
+ }
+ else /* TARGET_ARCH64 */
+ {
+ output_asm_insn (doublemove_string (wordpart[0]), wordpart[0]);
- /* Undo the adds we just did. */
- if (addreg0)
- output_asm_insn ("add %0,-0xc,%0", &addreg0);
- if (addreg1)
- output_asm_insn ("add %0,-0xc,%0", &addreg1);
+ /* Make any unoffsettable addresses point at the second word. */
+ if (addreg0)
+ output_asm_insn ("add %0,0x8,%0", &addreg0);
+ if (addreg1)
+ output_asm_insn ("add %0,0x8,%0", &addreg1);
+
+ /* Do the second word. */
+ output_asm_insn (doublemove_string (wordpart[1]), wordpart[1]);
+
+ /* Undo the adds we just did. */
+ if (addreg0)
+ output_asm_insn ("add %0,-0x8,%0", &addreg0);
+ if (addreg1)
+ output_asm_insn ("add %0,-0x8,%0", &addreg1);
+ }
return "";
}
@@ -2207,8 +2428,10 @@ output_fp_move_quad (operands)
{
if (FP_REG_P (op1))
{
- if (TARGET_V9)
+ if (TARGET_V9 && TARGET_HARD_QUAD)
return "fmovq %1,%0";
+ else if (TARGET_V9)
+ return "fmovd %1,%0\n\tfmovd %S1,%S0";
else
return "fmovs %1,%0\n\tfmovs %R1,%R0\n\tfmovs %S1,%S0\n\tfmovs %T1,%T0";
}
@@ -2282,7 +2505,7 @@ output_sized_memop (opname, mode, signedp)
fprintf (asm_out_file, "\t%s%s", opname, modename);
}
-
+
void
output_move_with_extension (operands)
rtx *operands;
@@ -2888,9 +3111,6 @@ sparc_init_modes ()
N_REGS is the number of 4-byte regs saved thus far. This applies even to
v9 int regs as it simplifies the code. */
-#ifdef __GNUC__
-__inline__
-#endif
static int
save_regs (file, low, high, base, offset, n_regs, real_offset)
FILE *file;
@@ -2910,10 +3130,8 @@ save_regs (file, low, high, base, offset, n_regs, real_offset)
{
fprintf (file, "\tstx %s,[%s+%d]\n",
reg_names[i], base, offset + 4 * n_regs);
-#ifdef DWARF2_DEBUGGING_INFO
- if (write_symbols == DWARF2_DEBUG)
+ if (dwarf2out_do_frame ())
dwarf2out_reg_save ("", i, real_offset + 4 * n_regs);
-#endif
n_regs += 2;
}
}
@@ -2927,34 +3145,28 @@ save_regs (file, low, high, base, offset, n_regs, real_offset)
{
fprintf (file, "\tstd %s,[%s+%d]\n",
reg_names[i], base, offset + 4 * n_regs);
-#ifdef DWARF2_DEBUGGING_INFO
- if (write_symbols == DWARF2_DEBUG)
+ if (dwarf2out_do_frame ())
{
- char *l = (char *) dwarf2out_cfi_label ();
+ char *l = dwarf2out_cfi_label ();
dwarf2out_reg_save (l, i, real_offset + 4 * n_regs);
dwarf2out_reg_save (l, i+1, real_offset + 4 * n_regs + 4);
}
-#endif
n_regs += 2;
}
else
{
fprintf (file, "\tst %s,[%s+%d]\n",
reg_names[i], base, offset + 4 * n_regs);
-#ifdef DWARF2_DEBUGGING_INFO
- if (write_symbols == DWARF2_DEBUG)
+ if (dwarf2out_do_frame ())
dwarf2out_reg_save ("", i, real_offset + 4 * n_regs);
-#endif
n_regs += 2;
}
else if (regs_ever_live[i+1] && ! call_used_regs[i+1])
{
fprintf (file, "\tst %s,[%s+%d]\n",
reg_names[i+1], base, offset + 4 * n_regs + 4);
-#ifdef DWARF2_DEBUGGING_INFO
- if (write_symbols == DWARF2_DEBUG)
+ if (dwarf2out_do_frame ())
dwarf2out_reg_save ("", i + 1, real_offset + 4 * n_regs + 4);
-#endif
n_regs += 2;
}
}
@@ -2967,9 +3179,6 @@ save_regs (file, low, high, base, offset, n_regs, real_offset)
N_REGS is the number of 4-byte regs saved thus far. This applies even to
v9 int regs as it simplifies the code. */
-#ifdef __GNUC__
-__inline__
-#endif
static int
restore_regs (file, low, high, base, offset, n_regs)
FILE *file;
@@ -3028,10 +3237,7 @@ compute_frame_size (size, leaf_function)
{
int n_regs = 0, i;
int outgoing_args_size = (current_function_outgoing_args_size
-#if ! SPARC_ARCH64
- + REG_PARM_STACK_SPACE (current_function_decl)
-#endif
- );
+ + REG_PARM_STACK_SPACE (current_function_decl));
if (TARGET_EPILOGUE)
{
@@ -3078,10 +3284,9 @@ compute_frame_size (size, leaf_function)
/* Make sure nothing can clobber our register windows.
If a SAVE must be done, or there is a stack-local variable,
the register window area must be allocated.
- ??? For v9 we need an additional 8 bytes of reserved space, apparently
- it's needed by v8 as well. */
+ ??? For v8 we apparently need an additional 8 bytes of reserved space. */
if (leaf_function == 0 || size > 0)
- actual_fsize += (16 * UNITS_PER_WORD) + 8;
+ actual_fsize += (16 * UNITS_PER_WORD) + (TARGET_ARCH64 ? 0 : 8);
return SPARC_STACK_ALIGN (actual_fsize);
}
@@ -3141,7 +3346,7 @@ output_function_prologue (file, size, leaf_function)
}
/* This is only for the human reader. */
- fprintf (file, "\t!#PROLOGUE# 0\n");
+ fprintf (file, "\t%s#PROLOGUE# 0\n", ASM_COMMENT_START);
if (actual_fsize == 0)
/* do nothing. */ ;
@@ -3163,8 +3368,8 @@ output_function_prologue (file, size, leaf_function)
else if (! leaf_function && TARGET_BROKEN_SAVERESTORE)
{
/* We assume the environment will properly handle or otherwise avoid
- trouble associated with an interrupt occuring after the `save' or
- trap occuring during it. */
+ trouble associated with an interrupt occurring after the `save' or
+ trap occurring during it. */
fprintf (file, "\tsave\n");
if (actual_fsize <= 4096)
@@ -3196,10 +3401,9 @@ output_function_prologue (file, size, leaf_function)
}
}
-#ifdef DWARF2_DEBUGGING_INFO
- if (write_symbols == DWARF2_DEBUG && actual_fsize)
+ if (dwarf2out_do_frame () && actual_fsize)
{
- char *label = (char *) dwarf2out_cfi_label ();
+ char *label = dwarf2out_cfi_label ();
/* The canonical frame address refers to the top of the frame. */
dwarf2out_def_cfa (label, (leaf_function ? STACK_POINTER_REGNUM
@@ -3217,11 +3421,10 @@ output_function_prologue (file, size, leaf_function)
dwarf2out_return_reg (label, 31);
}
}
-#endif
/* If doing anything with PIC, do it now. */
if (! flag_pic)
- fprintf (file, "\t!#PROLOGUE# 1\n");
+ fprintf (file, "\t%s#PROLOGUE# 1\n", ASM_COMMENT_START);
/* Call saved registers are saved just above the outgoing argument area. */
if (num_gfregs)
@@ -3379,87 +3582,671 @@ output_function_epilogue (file, size, leaf_function)
target_flags |= old_target_epilogue;
}
}
+
+/* Functions for handling argument passing.
+
+ For v8 the first six args are normally in registers and the rest are
+ pushed. Any arg that starts within the first 6 words is at least
+ partially passed in a register unless its data type forbids.
+
+ For v9, the argument registers are laid out as an array of 16 elements
+ and arguments are added sequentially. The first 6 int args and up to the
+ first 16 fp args (depending on size) are passed in regs.
+
+ Slot Stack Integral Float Float in structure Double Long Double
+ ---- ----- -------- ----- ------------------ ------ -----------
+ 15 [SP+248] %f31 %f30,%f31 %d30
+ 14 [SP+240] %f29 %f28,%f29 %d28 %q28
+ 13 [SP+232] %f27 %f26,%f27 %d26
+ 12 [SP+224] %f25 %f24,%f25 %d24 %q24
+ 11 [SP+216] %f23 %f22,%f23 %d22
+ 10 [SP+208] %f21 %f20,%f21 %d20 %q20
+ 9 [SP+200] %f19 %f18,%f19 %d18
+ 8 [SP+192] %f17 %f16,%f17 %d16 %q16
+ 7 [SP+184] %f15 %f14,%f15 %d14
+ 6 [SP+176] %f13 %f12,%f13 %d12 %q12
+ 5 [SP+168] %o5 %f11 %f10,%f11 %d10
+ 4 [SP+160] %o4 %f9 %f8,%f9 %d8 %q8
+ 3 [SP+152] %o3 %f7 %f6,%f7 %d6
+ 2 [SP+144] %o2 %f5 %f4,%f5 %d4 %q4
+ 1 [SP+136] %o1 %f3 %f2,%f3 %d2
+ 0 [SP+128] %o0 %f1 %f0,%f1 %d0 %q0
+
+ Here SP = %sp if -mno-stack-bias or %sp+stack_bias otherwise.
+
+ Integral arguments are always passed as 64 bit quantities appropriately
+ extended.
+
+ Passing of floating point values is handled as follows.
+ If a prototype is in scope:
+ If the value is in a named argument (i.e. not a stdarg function or a
+ value not part of the `...') then the value is passed in the appropriate
+ fp reg.
+ If the value is part of the `...' and is passed in one of the first 6
+ slots then the value is passed in the appropriate int reg.
+ If the value is part of the `...' and is not passed in one of the first 6
+ slots then the value is passed in memory.
+ If a prototype is not in scope:
+ If the value is one of the first 6 arguments the value is passed in the
+ appropriate integer reg and the appropriate fp reg.
+ If the value is not one of the first 6 arguments the value is passed in
+ the appropriate fp reg and in memory.
+ */
+
+/* Maximum number of int regs for args. */
+#define SPARC_INT_ARG_MAX 6
+/* Maximum number of fp regs for args. */
+#define SPARC_FP_ARG_MAX 16
+
+#define ROUND_ADVANCE(SIZE) (((SIZE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
+
+/* Handle the INIT_CUMULATIVE_ARGS macro.
+ 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. */
-/* Do what is necessary for `va_start'. The argument is ignored.
- !v9: We look at the current function to determine if stdarg or varargs
- is used and return the address of the first unnamed parameter.
- v9: We save the argument integer and floating point regs in a buffer, and
- return the address of this buffer. The rest is handled in va-sparc.h. */
-/* ??? This is currently conditioned on SPARC_ARCH64 because
- current_function_args_info is different in each compiler. */
+void
+init_cumulative_args (cum, fntype, libname, indirect)
+ CUMULATIVE_ARGS *cum;
+ tree fntype, libname;
+ int indirect;
+{
+ cum->words = 0;
+ cum->prototype_p = fntype && TYPE_ARG_TYPES (fntype);
+ cum->libcall_p = fntype == 0;
+}
-#if SPARC_ARCH64
+/* Compute the slot number to pass an argument in.
+ Returns the slot number or -1 if passing on the stack.
+
+ CUM is a variable of type CUMULATIVE_ARGS which gives info about
+ the preceding args and about the function being called.
+ 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.
+ NAMED is nonzero if this argument is a named parameter
+ (otherwise it is an extra parameter matching an ellipsis).
+ INCOMING_P is zero for FUNCTION_ARG, nonzero for FUNCTION_INCOMING_ARG.
+ *PREGNO records the register number to use if scalar type.
+ *PPADDING records the amount of padding needed in words. */
+
+static int
+function_arg_slotno (cum, mode, type, named, incoming_p, pregno, ppadding)
+ const CUMULATIVE_ARGS *cum;
+ enum machine_mode mode;
+ tree type;
+ int named;
+ int incoming_p;
+ int *pregno;
+ int *ppadding;
+{
+ int regbase = (incoming_p
+ ? SPARC_INCOMING_INT_ARG_FIRST
+ : SPARC_OUTGOING_INT_ARG_FIRST);
+ int slotno = cum->words;
+ int regno;
+
+ *ppadding = 0;
+
+ if (type != 0 && TREE_ADDRESSABLE (type))
+ return -1;
+ if (TARGET_ARCH32
+ && type != 0 && mode == BLKmode
+ && TYPE_ALIGN (type) % PARM_BOUNDARY != 0)
+ return -1;
+
+ switch (mode)
+ {
+ case VOIDmode :
+ /* MODE is VOIDmode when generating the actual call.
+ See emit_call_1. */
+ return -1;
+
+ case QImode : case CQImode :
+ case HImode : case CHImode :
+ case SImode : case CSImode :
+ case DImode : case CDImode :
+ if (slotno >= SPARC_INT_ARG_MAX)
+ return -1;
+ regno = regbase + slotno;
+ break;
+
+ case SFmode : case SCmode :
+ case DFmode : case DCmode :
+ case TFmode : case TCmode :
+ if (TARGET_ARCH32)
+ {
+ if (slotno >= SPARC_INT_ARG_MAX)
+ return -1;
+ regno = regbase + slotno;
+ }
+ else
+ {
+ if ((mode == TFmode || mode == TCmode)
+ && (slotno & 1) != 0)
+ slotno++, *ppadding = 1;
+ if (TARGET_FPU && named)
+ {
+ if (slotno >= SPARC_FP_ARG_MAX)
+ return 0;
+ regno = SPARC_FP_ARG_FIRST + slotno * 2;
+ if (mode == SFmode)
+ regno++;
+ }
+ else
+ {
+ if (slotno >= SPARC_INT_ARG_MAX)
+ return -1;
+ regno = regbase + slotno;
+ }
+ }
+ break;
+
+ case BLKmode :
+ /* For sparc64, objects requiring 16 byte alignment get it. */
+ if (TARGET_ARCH64)
+ {
+ if (type && TYPE_ALIGN (type) == 128 && (slotno & 1) != 0)
+ slotno++, *ppadding = 1;
+ }
+
+ if (TARGET_ARCH32
+ || type && TREE_CODE (type) == UNION_TYPE)
+ {
+ if (slotno >= SPARC_INT_ARG_MAX)
+ return -1;
+ regno = regbase + slotno;
+ }
+ else
+ {
+ tree field;
+ int intregs_p = 0, fpregs_p = 0;
+ /* The ABI obviously doesn't specify how packed
+ structures are passed. These are defined to be passed
+ in int regs if possible, otherwise memory. */
+ int packed_p = 0;
+
+ /* First see what kinds of registers we need. */
+ for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
+ {
+ if (TREE_CODE (field) == FIELD_DECL)
+ {
+ if (TREE_CODE (TREE_TYPE (field)) == REAL_TYPE
+ && TARGET_FPU)
+ fpregs_p = 1;
+ else
+ intregs_p = 1;
+ if (DECL_PACKED (field))
+ packed_p = 1;
+ }
+ }
+ if (packed_p || !named)
+ fpregs_p = 0, intregs_p = 1;
+
+ /* If all arg slots are filled, then must pass on stack. */
+ if (fpregs_p && slotno >= SPARC_FP_ARG_MAX)
+ return -1;
+ /* If there are only int args and all int arg slots are filled,
+ then must pass on stack. */
+ if (!fpregs_p && intregs_p && slotno >= SPARC_INT_ARG_MAX)
+ return -1;
+ /* Note that even if all int arg slots are filled, fp members may
+ still be passed in regs if such regs are available.
+ *PREGNO isn't set because there may be more than one, it's up
+ to the caller to compute them. */
+ return slotno;
+ }
+ break;
+
+ default :
+ abort ();
+ }
+
+ *pregno = regno;
+ return slotno;
+}
+
+/* Handle the FUNCTION_ARG macro.
+ Determine where to put an argument to a function.
+ Value is zero to push the argument on the stack,
+ or a hard register in which to store the argument.
+
+ CUM is a variable of type CUMULATIVE_ARGS which gives info about
+ the preceding args and about the function being called.
+ 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.
+ NAMED is nonzero if this argument is a named parameter
+ (otherwise it is an extra parameter matching an ellipsis).
+ INCOMING_P is zero for FUNCTION_ARG, nonzero for FUNCTION_INCOMING_ARG. */
rtx
-sparc_builtin_saveregs (arglist)
- tree arglist;
+function_arg (cum, mode, type, named, incoming_p)
+ const CUMULATIVE_ARGS *cum;
+ enum machine_mode mode;
+ tree type;
+ int named;
+ int incoming_p;
{
- tree fntype = TREE_TYPE (current_function_decl);
- /* First unnamed integer register. */
- int first_intreg = current_function_args_info.arg_count[(int) SPARC_ARG_INT];
- /* Number of integer registers we need to save. */
- int n_intregs = MAX (0, NPARM_REGS (SImode) - first_intreg);
- /* First unnamed SFmode float reg (no, you can't pass SFmode floats as
- unnamed arguments, we just number them that way). We must round up to
- the next double word float reg - that is the first one to save. */
- int first_floatreg = current_function_args_info.arg_count[(int) SPARC_ARG_FLOAT] + 1 & ~1;
- /* Number of SFmode float regs to save. */
- int n_floatregs = MAX (0, NPARM_REGS (SFmode) - first_floatreg);
- int ptrsize = GET_MODE_SIZE (Pmode);
- rtx valist, regbuf, fpregs;
- int bufsize, adjust, regno;
-
- /* Allocate block of memory for the regs.
- We only allocate as much as we need, but we must ensure quadword float
- regs are stored with the appropriate alignment. */
- /* ??? If n_intregs + n_floatregs == 0, should we allocate at least 1 byte?
- Or can assign_stack_local accept a 0 SIZE argument? */
-
- bufsize = (n_intregs * UNITS_PER_WORD) + (n_floatregs * (UNITS_PER_WORD / 2));
- /* Add space in front of the int regs to ensure proper alignment of quadword
- fp regs. We must add the space in front because va_start assumes this. */
- if (n_floatregs >= 4)
- adjust = ((n_intregs + first_floatreg / 2) % 2) * UNITS_PER_WORD;
+ int regbase = (incoming_p
+ ? SPARC_INCOMING_INT_ARG_FIRST
+ : SPARC_OUTGOING_INT_ARG_FIRST);
+ int slotno, regno, padding;
+ rtx reg;
+
+ slotno = function_arg_slotno (cum, mode, type, named, incoming_p,
+ &regno, &padding);
+
+ if (slotno == -1)
+ return 0;
+
+ if (TARGET_ARCH32)
+ {
+ reg = gen_rtx (REG, mode, regno);
+ return reg;
+ }
+
+ /* v9 fp args in reg slots beyond the int reg slots get passed in regs
+ but also have the slot allocated for them.
+ If no prototype is in scope fp values in register slots get passed
+ in two places, either fp regs and int regs or fp regs and memory. */
+ if ((GET_MODE_CLASS (mode) == MODE_FLOAT
+ || GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT)
+ && SPARC_FP_REG_P (regno))
+ {
+ reg = gen_rtx (REG, mode, regno);
+ if (cum->prototype_p || cum->libcall_p)
+ {
+ /* "* 2" because fp reg numbers are recorded in 4 byte
+ quantities. */
+ /* ??? This will cause the value to be passed in the fp reg and
+ in the stack. When a prototype exists we want to pass the
+ value in the reg but reserve space on the stack. That's an
+ optimization, and is deferred [for a bit]. */
+ if ((regno - SPARC_FP_ARG_FIRST) >= SPARC_INT_ARG_MAX * 2)
+ return gen_rtx (PARALLEL, mode,
+ gen_rtvec (2,
+ gen_rtx (EXPR_LIST, VOIDmode,
+ NULL_RTX, const0_rtx),
+ gen_rtx (EXPR_LIST, VOIDmode,
+ reg, const0_rtx)));
+ else
+ return reg;
+ }
+ else
+ {
+ if ((regno - SPARC_FP_ARG_FIRST) < SPARC_INT_ARG_MAX * 2)
+ {
+ int regbase = (incoming_p
+ ? SPARC_INCOMING_INT_ARG_FIRST
+ : SPARC_OUTGOING_INT_ARG_FIRST);
+ int intreg = regbase + (regno - SPARC_FP_ARG_FIRST) / 2;
+ return gen_rtx (PARALLEL, mode,
+ gen_rtvec (2,
+ gen_rtx (EXPR_LIST, VOIDmode,
+ gen_rtx (REG, mode, intreg),
+ const0_rtx),
+ gen_rtx (EXPR_LIST, VOIDmode,
+ reg, const0_rtx)));
+ }
+ else
+ return gen_rtx (PARALLEL, mode,
+ gen_rtvec (2,
+ gen_rtx (EXPR_LIST, VOIDmode,
+ NULL_RTX, const0_rtx),
+ gen_rtx (EXPR_LIST, VOIDmode,
+ reg, const0_rtx)));
+ }
+ }
+ else if (type && TREE_CODE (type) == RECORD_TYPE)
+ {
+ /* Structures up to 16 bytes in size are passed in arg slots on the
+ stack and are promoted to registers where possible. */
+ tree field;
+ rtx ret;
+ int i;
+ int nregs;
+ /* Starting bit position of a sequence of integer fields, counted from
+ msb of left most byte, -1 if last field wasn't an int. */
+ /* ??? This isn't entirely necessary, some simplification
+ may be possible. */
+ int start_int_bitpos;
+ /* Current bitpos in struct, counted from msb of left most byte. */
+ int bitpos, this_slotno;
+ /* The ABI obviously doesn't specify how packed
+ structures are passed. These are defined to be passed
+ in int regs if possible, otherwise memory. */
+ int packed_p = 0;
+
+ if (int_size_in_bytes (type) > 16)
+ abort (); /* shouldn't get here */
+
+ /* We need to compute how many registers are needed so we can allocate
+ the PARALLEL but before we can do that we need to know whether there
+ are any packed fields. If there are, int regs are used regardless of
+ whether there are fp values present. */
+ for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
+ {
+ if (TREE_CODE (field) == FIELD_DECL
+ && DECL_PACKED (field))
+ {
+ packed_p = 1;
+ break;
+ }
+ }
+
+ /* Compute how many registers we need. */
+ nregs = 0;
+ start_int_bitpos = -1;
+ for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
+ {
+ bitpos = TREE_INT_CST_LOW (DECL_FIELD_BITPOS (field));
+ this_slotno = slotno + bitpos / BITS_PER_WORD;
+ if (TREE_CODE (field) == FIELD_DECL)
+ {
+ if (TREE_CODE (TREE_TYPE (field)) == REAL_TYPE
+ && TARGET_FPU
+ && ! packed_p
+ && named)
+ {
+ /* There's no need to check this_slotno < SPARC_FP_ARG MAX.
+ If it wasn't true we wouldn't be here. */
+ nregs++;
+ start_int_bitpos = -1;
+ }
+ else if (this_slotno < SPARC_INT_ARG_MAX)
+ {
+ if (start_int_bitpos == -1)
+ {
+ nregs++;
+ start_int_bitpos = bitpos;
+ }
+ else
+ {
+ if (bitpos % BITS_PER_WORD == 0)
+ nregs++;
+ }
+ }
+ }
+ }
+ if (nregs == 0)
+ abort ();
+
+ ret = gen_rtx (PARALLEL, BLKmode, rtvec_alloc (nregs + 1));
+
+ /* ??? This causes the entire struct to be passed in memory.
+ This isn't necessary, but is left for later. */
+ XVECEXP (ret, 0, 0) = gen_rtx (EXPR_LIST, VOIDmode, NULL_RTX,
+ const0_rtx);
+
+ /* Fill in the entries. */
+ start_int_bitpos = -1;
+ for (i = 1, field = TYPE_FIELDS (type);
+ field;
+ field = TREE_CHAIN (field))
+ {
+ bitpos = TREE_INT_CST_LOW (DECL_FIELD_BITPOS (field));
+ this_slotno = slotno + bitpos / BITS_PER_WORD;
+ if (TREE_CODE (field) == FIELD_DECL)
+ {
+ if (TREE_CODE (TREE_TYPE (field)) == REAL_TYPE
+ && TARGET_FPU
+ && ! packed_p
+ && named)
+ {
+ reg = gen_rtx (REG, DECL_MODE (field),
+ (SPARC_FP_ARG_FIRST + this_slotno * 2
+ + (DECL_MODE (field) == SFmode
+ && (bitpos & 32) != 0)));
+ XVECEXP (ret, 0, i) = gen_rtx (EXPR_LIST, VOIDmode, reg,
+ GEN_INT (bitpos / BITS_PER_UNIT));
+ i++;
+ start_int_bitpos = -1;
+ }
+ else
+ {
+ if (this_slotno < SPARC_INT_ARG_MAX
+ && (start_int_bitpos == -1
+ || bitpos % BITS_PER_WORD == 0))
+ {
+ enum machine_mode mode;
+
+ /* If this is the trailing part of a word, only load
+ that much into the register. Otherwise load the
+ whole register. Note that in the latter case we may
+ pick up unwanted bits. It's not a problem at the
+ moment but may wish to revisit. */
+ if (bitpos % BITS_PER_WORD != 0)
+ mode = mode_for_size (BITS_PER_WORD - bitpos % BITS_PER_WORD,
+ MODE_INT, 0);
+ else
+ mode = word_mode;
+
+ regno = regbase + this_slotno;
+ reg = gen_rtx (REG, mode, regno);
+ XVECEXP (ret, 0, i) = gen_rtx (EXPR_LIST, VOIDmode, reg,
+ GEN_INT (bitpos / BITS_PER_UNIT));
+ i++;
+ if (start_int_bitpos == -1)
+ start_int_bitpos = bitpos;
+ }
+ }
+ }
+ }
+ if (i != nregs + 1)
+ abort ();
+
+ return ret;
+ }
+ else if (type && TREE_CODE (type) == UNION_TYPE)
+ {
+ enum machine_mode mode;
+ int bytes = int_size_in_bytes (type);
+
+ if (bytes > 16)
+ abort ();
+
+ mode = mode_for_size (bytes * BITS_PER_UNIT, MODE_INT, 0);
+ reg = gen_rtx (REG, mode, regno);
+ }
+ else
+ {
+ /* Scalar or complex int. */
+ reg = gen_rtx (REG, mode, regno);
+ }
+
+ return reg;
+}
+
+/* Handle the FUNCTION_ARG_PARTIAL_NREGS macro.
+ 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.
+
+ Any arg that starts in the first 6 regs but won't entirely fit in them
+ needs partial registers on v8. On v9, structures with integer
+ values in arg slots 5,6 will be passed in %o5 and SP+176, and complex fp
+ values that begin in the last fp reg [where "last fp reg" varies with the
+ mode] will be split between that reg and memory. */
+
+int
+function_arg_partial_nregs (cum, mode, type, named)
+ const CUMULATIVE_ARGS *cum;
+ enum machine_mode mode;
+ tree type;
+ int named;
+{
+ int slotno, regno, padding;
+
+ /* We pass 0 for incoming_p here, it doesn't matter. */
+ slotno = function_arg_slotno (cum, mode, type, named, 0, &regno, &padding);
+
+ if (slotno == -1)
+ return 0;
+
+ if (TARGET_ARCH32)
+ {
+ if ((slotno + (mode == BLKmode
+ ? ROUND_ADVANCE (int_size_in_bytes (type))
+ : ROUND_ADVANCE (GET_MODE_SIZE (mode))))
+ > NPARM_REGS (SImode))
+ return NPARM_REGS (SImode) - slotno;
+ return 0;
+ }
+ else
+ {
+ if (type && AGGREGATE_TYPE_P (type))
+ {
+ int size = int_size_in_bytes (type);
+ int align = TYPE_ALIGN (type);
+
+ if (align == 16)
+ slotno += slotno & 1;
+ if (size > 8 && size <= 16
+ && slotno == SPARC_INT_ARG_MAX - 1)
+ return 1;
+ }
+ else if (GET_MODE_CLASS (mode) == MODE_COMPLEX_INT
+ || (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT
+ && ! TARGET_FPU))
+ {
+ if (GET_MODE_ALIGNMENT (mode) == 128)
+ {
+ slotno += slotno & 1;
+ if (slotno == SPARC_INT_ARG_MAX - 2)
+ return 1;
+ }
+ else
+ {
+ if (slotno == SPARC_INT_ARG_MAX - 1)
+ return 1;
+ }
+ }
+ else if (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT)
+ {
+ if (GET_MODE_ALIGNMENT (mode) == 128)
+ slotno += slotno & 1;
+ if ((slotno + GET_MODE_SIZE (mode) / UNITS_PER_WORD)
+ > SPARC_FP_ARG_MAX)
+ return 1;
+ }
+ return 0;
+ }
+}
+
+/* Handle the FUNCTION_ARG_PASS_BY_REFERENCE macro.
+ !v9: The SPARC ABI stipulates passing struct arguments (of any size) and
+ quad-precision floats by invisible reference.
+ v9: aggregates greater than 16 bytes are passed by reference.
+ For Pascal, also pass arrays by reference. */
+
+int
+function_arg_pass_by_reference (cum, mode, type, named)
+ const CUMULATIVE_ARGS *cum;
+ enum machine_mode mode;
+ tree type;
+ int named;
+{
+ if (TARGET_ARCH32)
+ {
+ return (type && AGGREGATE_TYPE_P (type)
+ || mode == TFmode || mode == TCmode);
+ }
+ else
+ {
+ return ((type && TREE_CODE (type) == ARRAY_TYPE)
+ || (type && AGGREGATE_TYPE_P (type)
+ && int_size_in_bytes (type) > 16));
+ }
+}
+
+/* Handle the FUNCTION_ARG_ADVANCE macro.
+ 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
+function_arg_advance (cum, mode, type, named)
+ CUMULATIVE_ARGS *cum;
+ enum machine_mode mode;
+ tree type;
+ int named;
+{
+ int slotno, regno, padding;
+
+ /* We pass 0 for incoming_p here, it doesn't matter. */
+ slotno = function_arg_slotno (cum, mode, type, named, 0, &regno, &padding);
+
+ /* If register required leading padding, add it. */
+ if (slotno != -1)
+ cum->words += padding;
+
+ if (TARGET_ARCH32)
+ {
+ cum->words += (mode != BLKmode
+ ? ROUND_ADVANCE (GET_MODE_SIZE (mode))
+ : ROUND_ADVANCE (int_size_in_bytes (type)));
+ }
else
- adjust = 0;
-
- regbuf = assign_stack_local (BLKmode, bufsize + adjust,
- GET_MODE_BITSIZE (TFmode));
- regbuf = gen_rtx (MEM, BLKmode, plus_constant (XEXP (regbuf, 0), adjust));
- MEM_IN_STRUCT_P (regbuf) = 1;
-
- /* Save int args.
- This is optimized to only save the regs that are necessary. Explicitly
- named args need not be saved. */
-
- if (n_intregs > 0)
- move_block_from_reg (BASE_INCOMING_ARG_REG (SImode) + first_intreg,
- regbuf, n_intregs, n_intregs * UNITS_PER_WORD);
-
- /* Save float args.
- This is optimized to only save the regs that are necessary. Explicitly
- named args need not be saved.
- We explicitly build a pointer to the buffer because it halves the insn
- count when not optimizing (otherwise the pointer is built for each reg
- saved). */
-
- fpregs = gen_reg_rtx (Pmode);
- emit_move_insn (fpregs, plus_constant (XEXP (regbuf, 0),
- n_intregs * UNITS_PER_WORD));
- for (regno = first_floatreg; regno < NPARM_REGS (SFmode); regno += 2)
- emit_move_insn (gen_rtx (MEM, DFmode,
- plus_constant (fpregs,
- GET_MODE_SIZE (SFmode)
- * (regno - first_floatreg))),
- gen_rtx (REG, DFmode,
- BASE_INCOMING_ARG_REG (DFmode) + regno));
-
- /* Return the address of the regbuf. */
-
- return XEXP (regbuf, 0);
+ {
+ if (type && AGGREGATE_TYPE_P (type))
+ {
+ int size = int_size_in_bytes (type);
+
+ if (size <= 8)
+ ++cum->words;
+ else if (size <= 16)
+ cum->words += 2;
+ else /* passed by reference */
+ ++cum->words;
+ }
+ else if (GET_MODE_CLASS (mode) == MODE_COMPLEX_INT)
+ {
+ cum->words += 2;
+ }
+ else if (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT)
+ {
+ cum->words += GET_MODE_SIZE (mode) / UNITS_PER_WORD;
+ }
+ else
+ {
+ cum->words += (mode != BLKmode
+ ? ROUND_ADVANCE (GET_MODE_SIZE (mode))
+ : ROUND_ADVANCE (int_size_in_bytes (type)));
+ }
+ }
+}
+
+/* Handle the FUNCTION_ARG_PADDING macro.
+ For the 64 bit ABI structs are always stored left shifted in their
+ argument slot. */
+
+enum direction
+function_arg_padding (mode, type)
+ enum machine_mode mode;
+ tree type;
+{
+ if (TARGET_ARCH64 && type && TREE_CODE (type) == RECORD_TYPE)
+ {
+ return upward;
+ }
+
+ /* This is the default definition. */
+ return (! BYTES_BIG_ENDIAN
+ ? upward
+ : ((mode == BLKmode
+ ? (type && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
+ && int_size_in_bytes (type) < (PARM_BOUNDARY / BITS_PER_UNIT))
+ : GET_MODE_BITSIZE (mode) < PARM_BOUNDARY)
+ ? downward : upward));
}
+
+/* Do what is necessary for `va_start'. The argument is ignored.
-#else /* ! SPARC_ARCH64 */
+ We look at the current function to determine if stdarg or varargs
+ is used and return the address of the first unnamed parameter. */
rtx
sparc_builtin_saveregs (arglist)
@@ -3469,34 +4256,35 @@ sparc_builtin_saveregs (arglist)
int stdarg = (TYPE_ARG_TYPES (fntype) != 0
&& (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype)))
!= void_type_node));
- int first_reg = current_function_args_info;
+ int first_reg = current_function_args_info.words;
rtx address;
int regno;
-#if 0 /* This code seemed to have no effect except to make
- varargs not work right when va_list wasn't the first arg. */
- if (! stdarg)
- first_reg = 0;
-#endif
-
- for (regno = first_reg; regno < NPARM_REGS (SImode); regno++)
+ for (regno = first_reg; regno < NPARM_REGS (word_mode); regno++)
emit_move_insn (gen_rtx (MEM, word_mode,
gen_rtx (PLUS, Pmode,
frame_pointer_rtx,
GEN_INT (STACK_POINTER_OFFSET
+ UNITS_PER_WORD * regno))),
- gen_rtx (REG, word_mode, BASE_INCOMING_ARG_REG (word_mode)
- + regno));
+ gen_rtx (REG, word_mode,
+ BASE_INCOMING_ARG_REG (word_mode) + regno));
address = gen_rtx (PLUS, Pmode,
frame_pointer_rtx,
GEN_INT (STACK_POINTER_OFFSET
+ UNITS_PER_WORD * first_reg));
+ if (flag_check_memory_usage
+ && first_reg < NPARM_REGS (word_mode))
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ address, ptr_mode,
+ GEN_INT (UNITS_PER_WORD
+ * (NPARM_REGS (word_mode) - first_reg)),
+ TYPE_MODE (sizetype), GEN_INT (MEMORY_USE_RW),
+ TYPE_MODE (integer_type_node));
+
return address;
}
-
-#endif /* ! SPARC_ARCH64 */
/* Return the string to output a conditional branch to LABEL, which is
the operand number of the label. OP is the conditional expression.
@@ -3974,8 +4762,8 @@ print_operand (file, x, code)
fputs ("\n\tnop", file);
return;
case '_':
- /* Output the Medium/Anywhere code model base register. */
- fputs (MEDANY_BASE_REG, file);
+ /* Output the Embedded Medium/Anywhere code model base register. */
+ fputs (EMBMEDANY_BASE_REG, file);
return;
case '@':
/* Print out what we are using as the frame pointer. This might
@@ -4207,11 +4995,22 @@ output_double_int (file, value)
{
if (GET_CODE (value) == CONST_INT)
{
+ /* ??? This has endianness issues. */
+#if HOST_BITS_PER_WIDE_INT == 64
+ HOST_WIDE_INT xword = INTVAL (value);
+ HOST_WIDE_INT high, low;
+
+ high = (xword >> 32) & 0xffffffff;
+ low = xword & 0xffffffff;
+ ASM_OUTPUT_INT (file, gen_rtx (CONST_INT, VOIDmode, high));
+ ASM_OUTPUT_INT (file, gen_rtx (CONST_INT, VOIDmode, low));
+#else
if (INTVAL (value) < 0)
ASM_OUTPUT_INT (file, constm1_rtx);
else
ASM_OUTPUT_INT (file, const0_rtx);
ASM_OUTPUT_INT (file, value);
+#endif
}
else if (GET_CODE (value) == CONST_DOUBLE)
{
@@ -4228,7 +5027,7 @@ output_double_int (file, value)
|| GET_CODE (value) == CODE_LABEL
|| GET_CODE (value) == MINUS)))
{
- if (!TARGET_V9 || TARGET_MEDLOW)
+ if (!TARGET_V9 || TARGET_CM_MEDLOW)
{
ASM_OUTPUT_INT (file, const0_rtx);
ASM_OUTPUT_INT (file, value);
@@ -4678,7 +5477,8 @@ sparc_flat_compute_frame_size (size)
DOUBLEWORD_OP is either "std" for save, "ldd" for restore. */
void
-sparc_flat_save_restore (file, base_reg, offset, gmask, fmask, word_op, doubleword_op, base_offset)
+sparc_flat_save_restore (file, base_reg, offset, gmask, fmask, word_op,
+ doubleword_op, base_offset)
FILE *file;
char *base_reg;
unsigned int offset;
@@ -4718,15 +5518,13 @@ sparc_flat_save_restore (file, base_reg, offset, gmask, fmask, word_op, doublewo
fprintf (file, "\t%s %s,[%s+%d]\n",
doubleword_op, reg_names[regno],
base_reg, offset);
-#ifdef DWARF2_DEBUGGING_INFO
- if (write_symbols == DWARF2_DEBUG)
+ if (dwarf2out_do_frame ())
{
- char *l = (char *) dwarf2out_cfi_label ();
+ char *l = dwarf2out_cfi_label ();
dwarf2out_reg_save (l, regno, offset + base_offset);
dwarf2out_reg_save
(l, regno+1, offset+base_offset + UNITS_PER_WORD);
}
-#endif
}
else
fprintf (file, "\t%s [%s+%d],%s\n",
@@ -4743,10 +5541,8 @@ sparc_flat_save_restore (file, base_reg, offset, gmask, fmask, word_op, doublewo
fprintf (file, "\t%s %s,[%s+%d]\n",
word_op, reg_names[regno],
base_reg, offset);
-#ifdef DWARF2_DEBUGGING_INFO
- if (write_symbols == DWARF2_DEBUG)
+ if (dwarf2out_do_frame ())
dwarf2out_reg_save ("", regno, offset + base_offset);
-#endif
}
else
fprintf (file, "\t%s [%s+%d],%s\n",
@@ -4769,10 +5565,8 @@ sparc_flat_save_restore (file, base_reg, offset, gmask, fmask, word_op, doublewo
fprintf (file, "\t%s %s,[%s+%d]\n",
word_op, reg_names[regno],
base_reg, offset);
-#ifdef DWARF2_DEBUGGING_INFO
- if (write_symbols == DWARF2_DEBUG)
+ if (dwarf2out_do_frame ())
dwarf2out_reg_save ("", regno, offset + base_offset);
-#endif
}
else
fprintf (file, "\t%s [%s+%d],%s\n",
@@ -4795,8 +5589,9 @@ sparc_flat_output_function_prologue (file, size)
unsigned long gmask = current_frame_info.gmask;
/* This is only for the human reader. */
- fprintf (file, "\t!#PROLOGUE# 0\n");
- fprintf (file, "\t!# vars= %d, regs= %d/%d, args= %d, extra= %d\n",
+ fprintf (file, "\t%s#PROLOGUE# 0\n", ASM_COMMENT_START);
+ fprintf (file, "\t%s# vars= %d, regs= %d/%d, args= %d, extra= %d\n",
+ ASM_COMMENT_START,
current_frame_info.var_size,
current_frame_info.gp_reg_size / 4,
current_frame_info.fp_reg_size / 4,
@@ -4852,8 +5647,8 @@ sparc_flat_output_function_prologue (file, size)
{
fprintf (file, "\tst %s,[%s+%d]\n",
fp_str, sp_str, reg_offset);
- fprintf (file, "\tsub %s,%d,%s\t!# set up frame pointer\n",
- sp_str, -size, fp_str);
+ fprintf (file, "\tsub %s,%d,%s\t%s# set up frame pointer\n",
+ sp_str, -size, fp_str, ASM_COMMENT_START);
reg_offset += 4;
}
}
@@ -4865,15 +5660,14 @@ sparc_flat_output_function_prologue (file, size)
{
fprintf (file, "\tst %s,[%s+%d]\n",
fp_str, sp_str, reg_offset);
- fprintf (file, "\tadd %s,%s,%s\t!# set up frame pointer\n",
- sp_str, t1_str, fp_str);
+ fprintf (file, "\tadd %s,%s,%s\t%s# set up frame pointer\n",
+ sp_str, t1_str, fp_str, ASM_COMMENT_START);
reg_offset += 4;
}
}
-#ifdef DWARF2_DEBUGGING_INFO
- if (write_symbols == DWARF2_DEBUG)
+ if (dwarf2out_do_frame ())
{
- char *l = (char *) dwarf2out_cfi_label ();
+ char *l = dwarf2out_cfi_label ();
if (gmask & FRAME_POINTER_MASK)
{
dwarf2out_reg_save (l, FRAME_POINTER_REGNUM,
@@ -4883,15 +5677,12 @@ sparc_flat_output_function_prologue (file, size)
else
dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, size);
}
-#endif
if (gmask & RETURN_ADDR_MASK)
{
fprintf (file, "\tst %s,[%s+%d]\n",
reg_names[RETURN_ADDR_REGNUM], sp_str, reg_offset);
-#ifdef DWARF2_DEBUGGING_INFO
- if (write_symbols == DWARF2_DEBUG)
+ if (dwarf2out_do_frame ())
dwarf2out_return_save ("", reg_offset - size);
-#endif
reg_offset += 4;
}
sparc_flat_save_restore (file, sp_str, reg_offset,
@@ -4914,8 +5705,9 @@ sparc_flat_output_function_prologue (file, size)
sp_str, -size1, sp_str);
if (gmask & FRAME_POINTER_MASK)
{
- fprintf (file, "\tst %s,[%s+%d]\n\tsub %s,%d,%s\t!# set up frame pointer\n",
- fp_str, sp_str, offset, sp_str, -size1, fp_str);
+ fprintf (file, "\tst %s,[%s+%d]\n\tsub %s,%d,%s\t%s# set up frame pointer\n",
+ fp_str, sp_str, offset, sp_str, -size1, fp_str,
+ ASM_COMMENT_START);
offset += 4;
}
}
@@ -4925,15 +5717,15 @@ sparc_flat_output_function_prologue (file, size)
size1, t1_str, sp_str, t1_str, sp_str);
if (gmask & FRAME_POINTER_MASK)
{
- fprintf (file, "\tst %s,[%s+%d]\n\tadd %s,%s,%s\t!# set up frame pointer\n",
- fp_str, sp_str, offset, sp_str, t1_str, fp_str);
+ fprintf (file, "\tst %s,[%s+%d]\n\tadd %s,%s,%s\t%s# set up frame pointer\n",
+ fp_str, sp_str, offset, sp_str, t1_str, fp_str,
+ ASM_COMMENT_START);
offset += 4;
}
}
-#ifdef DWARF2_DEBUGGING_INFO
- if (write_symbols == DWARF2_DEBUG)
+ if (dwarf2out_do_frame ())
{
- char *l = (char *) dwarf2out_cfi_label ();
+ char *l = dwarf2out_cfi_label ();
if (gmask & FRAME_POINTER_MASK)
{
dwarf2out_reg_save (l, FRAME_POINTER_REGNUM,
@@ -4943,17 +5735,14 @@ sparc_flat_output_function_prologue (file, size)
else
dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, size1);
}
-#endif
if (gmask & RETURN_ADDR_MASK)
{
fprintf (file, "\tst %s,[%s+%d]\n",
reg_names[RETURN_ADDR_REGNUM], sp_str, offset);
-#ifdef DWARF2_DEBUGGING_INFO
- if (write_symbols == DWARF2_DEBUG)
+ if (dwarf2out_do_frame ())
/* offset - size1 == reg_offset - size
if reg_offset were updated above like offset. */
dwarf2out_return_save ("", offset - size1);
-#endif
offset += 4;
}
sparc_flat_save_restore (file, sp_str, offset,
@@ -4962,15 +5751,13 @@ sparc_flat_output_function_prologue (file, size)
"st", "std", -size1);
fprintf (file, "\tset %d,%s\n\tsub %s,%s,%s\n",
size - size1, t1_str, sp_str, t1_str, sp_str);
-#ifdef DWARF2_DEBUGGING_INFO
- if (write_symbols == DWARF2_DEBUG)
+ if (dwarf2out_do_frame ())
if (! (gmask & FRAME_POINTER_MASK))
dwarf2out_def_cfa ("", STACK_POINTER_REGNUM, size);
-#endif
}
}
- fprintf (file, "\t!#PROLOGUE# 1\n");
+ fprintf (file, "\t%s#PROLOGUE# 1\n", ASM_COMMENT_START);
}
/* Do any necessary cleanup after a function to restore stack, frame,
@@ -4985,7 +5772,7 @@ sparc_flat_output_function_epilogue (file, size)
int noepilogue = FALSE;
/* This is only for the human reader. */
- fprintf (file, "\t!#EPILOGUE#\n");
+ fprintf (file, "\t%s#EPILOGUE#\n", ASM_COMMENT_START);
/* The epilogue does not depend on any registers, but the stack
registers, so we assume that if we have 1 pending nop, it can be
@@ -5027,11 +5814,11 @@ sparc_flat_output_function_epilogue (file, size)
if (frame_pointer_needed)
{
if (size > 4095)
- fprintf (file,"\tsub %s,%s,%s\t\t!# sp not trusted here\n",
- fp_str, t1_str, sp_str);
+ fprintf (file,"\tsub %s,%s,%s\t\t%s# sp not trusted here\n",
+ fp_str, t1_str, sp_str, ASM_COMMENT_START);
else
- fprintf (file,"\tsub %s,%d,%s\t\t!# sp not trusted here\n",
- fp_str, size, sp_str);
+ fprintf (file,"\tsub %s,%d,%s\t\t%s# sp not trusted here\n",
+ fp_str, size, sp_str, ASM_COMMENT_START);
}
/* Is the entire register save area offsettable from %sp? */
diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h
index ac86c3a1b41..d839432e766 100644
--- a/gcc/config/sparc/sparc.h
+++ b/gcc/config/sparc/sparc.h
@@ -1,6 +1,5 @@
/* Definitions of target machine for GNU compiler, for Sun SPARC.
- Copyright (C) 1987, 88, 89, 92, 94, 95, 96, 1997 Free Software Foundation,
- Inc.
+ Copyright (C) 1987, 88, 89, 92, 94-6, 1997 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com).
64 bit SPARC V9 support by Michael Tiemann, Jim Wilson, and Doug Evans,
at Cygnus Support.
@@ -23,105 +22,131 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* Note that some other tm.h files include this one and then override
- many of the definitions that relate to assembler syntax. */
-
-/* Sparc64 support has been added by trying to allow for a day when one
- compiler can handle both v8 and v9. There are a few cases where this
- isn't doable, but keep them to a minimum!
-
- TARGET_V9 is used to select at runtime the sparc64 chip.
- TARGET_ARCH64 is used to select at runtime a 64 bit environment.
- SPARC_V9 is defined as 0 or 1 (so it may be used inside and outside
- #define's), and says whether the cpu is a sparc64 chip (which may be
- running in a 32 or 64 bit environment).
- SPARC_ARCH64 is defined as 0 for a 32 bit environment and 1 for a 64 bit
- environment.
-
- In places where it is possible to choose at runtime, use TARGET_V9 and
- TARGET_ARCH64. In places where it is currently not possible to select
- between the two at runtime use SPARC_{V9,ARCH64}. Again, keep uses of
- SPARC_{V9,ARCH64} to a minimum. No attempt is made to support both v8
- and v9 in the v9 compiler.
-
- ??? All uses of SPARC_V9 have been removed. Try not to add new ones.
-*/
+ whatever definitions are necessary. */
-#ifndef SPARC_V9
-#define SPARC_V9 0
-#endif
-#ifndef SPARC_ARCH64
-#define SPARC_ARCH64 0
+/* Specify this in a cover file to provide bi-architecture (32/64) support. */
+/* #define SPARC_BI_ARCH */
+
+/* Macro used later in this file to determine default architecture. */
+#define DEFAULT_ARCH32_P ((TARGET_DEFAULT & MASK_64BIT) == 0)
+
+/* TARGET_ARCH{32,64} are the main macros to decide which of the two
+ architectures to compile for. We allow targets to choose compile time or
+ runtime selection. */
+#ifdef SPARC_BI_ARCH
+#define TARGET_ARCH32 (! TARGET_64BIT)
+#else
+#define TARGET_ARCH32 (DEFAULT_ARCH32_P)
#endif
+#define TARGET_ARCH64 (! TARGET_ARCH32)
+
+/* Code model selection.
+ -mcmodel is used to select the v9 code model.
+ Different code models aren't supported for v8 code.
+
+ TARGET_CM_32: 32 bit address space, top 32 bits = 0,
+ pointers are 32 bits. Note that this isn't intended
+ to imply a v8 abi.
+
+ TARGET_CM_MEDLOW: 32 bit address space, top 32 bits = 0,
+ avoid generating %uhi and %ulo terms,
+ pointers are 64 bits.
+
+ TARGET_CM_MEDMID: 64 bit address space.
+ The executable must be in the low 16 TB of memory.
+ This corresponds to the low 44 bits, and the %[hml]44
+ relocs are used.
+
+ TARGET_CM_MEDANY: 64 bit address space.
+ The text and data segments have a maximum size of 31
+ bits and may be located anywhere. The maximum offset
+ from any instruction to the label _GLOBAL_OFFSET_TABLE_
+ is 31 bits.
+
+ TARGET_CM_EMBMEDANY: 64 bit address space.
+ The text and data segments have a maximum size of 31 bits
+ and may be located anywhere. Register %g4 contains
+ the start address of the data segment.
+*/
-/* Values of TARGET_CPU_DEFAULT, set via -D in the Makefile. */
+enum cmodel {
+ CM_32,
+ CM_MEDLOW,
+ CM_MEDMID,
+ CM_MEDANY,
+ CM_EMBMEDANY
+};
+
+/* Value of -mcmodel specified by user. */
+extern char *sparc_cmodel_string;
+/* One of CM_FOO. */
+extern enum cmodel sparc_cmodel;
+
+/* V9 code model selection. */
+#define TARGET_CM_MEDLOW (sparc_cmodel == CM_MEDLOW)
+#define TARGET_CM_MEDMID (sparc_cmodel == CM_MEDMID)
+#define TARGET_CM_MEDANY (sparc_cmodel == CM_MEDANY)
+#define TARGET_CM_EMBMEDANY (sparc_cmodel == CM_EMBMEDANY)
+
+#define SPARC_DEFAULT_CMODEL CM_MEDLOW
+
+/* This is call-clobbered in the normal ABI, but is reserved in the
+ home grown (aka upward compatible) embedded ABI. */
+#define EMBMEDANY_BASE_REG "%g4"
+
+/* Values of TARGET_CPU_DEFAULT, set via -D in the Makefile,
+ and specified by the user via --with-cpu=foo.
+ This specifies the cpu implementation, not the architecture size. */
#define TARGET_CPU_sparc 0
#define TARGET_CPU_v7 0 /* alias for previous */
#define TARGET_CPU_sparclet 1
#define TARGET_CPU_sparclite 2
-#define TARGET_CPU_v8 3
+#define TARGET_CPU_v8 3 /* generic v8 implementation */
#define TARGET_CPU_supersparc 4
-#define TARGET_CPU_ultrasparc 5
-#define TARGET_CPU_sparc64 5 /* alias for ultrasparc */
+#define TARGET_CPU_v9 5 /* generic v9 implementation */
+#define TARGET_CPU_sparc64 5 /* alias */
+#define TARGET_CPU_ultrasparc 6
#if TARGET_CPU_DEFAULT == TARGET_CPU_sparc || TARGET_CPU_DEFAULT == TARGET_CPU_v8 || TARGET_CPU_DEFAULT == TARGET_CPU_supersparc
-#define CPP_DEFAULT_SPEC ""
-#define ASM_DEFAULT_SPEC ""
-#else
+#define CPP_CPU_DEFAULT_SPEC ""
+#define ASM_CPU_DEFAULT_SPEC ""
+#endif
#if TARGET_CPU_DEFAULT == TARGET_CPU_sparclet
-#define CPP_DEFAULT_SPEC "-D__sparclet__"
-#define ASM_DEFAULT_SPEC "-Asparclet"
-#else
+#define CPP_CPU_DEFAULT_SPEC "-D__sparclet__"
+#define ASM_CPU_DEFAULT_SPEC "-Asparclet"
+#endif
#if TARGET_CPU_DEFAULT == TARGET_CPU_sparclite
-#define CPP_DEFAULT_SPEC "-D__sparclite__"
-#define ASM_DEFAULT_SPEC "-Asparclite"
-#else
-#if TARGET_CPU_DEFAULT == TARGET_CPU_sparc64
+#define CPP_CPU_DEFAULT_SPEC "-D__sparclite__"
+#define ASM_CPU_DEFAULT_SPEC "-Asparclite"
+#endif
+#if TARGET_CPU_DEFAULT == TARGET_CPU_v9
/* ??? What does Sun's CC pass? */
-#define CPP_DEFAULT_SPEC "-D__sparc_v9__"
+#define CPP_CPU_DEFAULT_SPEC "-D__sparc_v9__"
/* ??? It's not clear how other assemblers will handle this, so by default
use GAS. Sun's Solaris assembler recognizes -xarch=v8plus, but this case
is handled in sol2.h. */
-#define ASM_DEFAULT_SPEC "-Av9"
-#else
-Unrecognized value in TARGET_CPU_DEFAULT.
-#endif
+#define ASM_CPU_DEFAULT_SPEC "-Av9"
#endif
+#if TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc
+#define CPP_CPU_DEFAULT_SPEC "-D__sparc_v9__"
+#define ASM_CPU_DEFAULT_SPEC "-Av9a"
#endif
+#ifndef CPP_CPU_DEFAULT_SPEC
+Unrecognized value in TARGET_CPU_DEFAULT.
#endif
-/* Names to predefine in the preprocessor for this target machine. */
+/* Names to predefine in the preprocessor for this target machine.
+ ??? It would be nice to not include any subtarget specific values here,
+ however there's no way to portably provide subtarget values to
+ CPP_PREFINES. Also, -D values in CPP_SUBTARGET_SPEC don't get turned into
+ into foo, __foo and __foo__. */
-/* ??? The GCC_NEW_VARARGS macro is now obsolete, because gcc always uses
- the right varags.h file when bootstrapping. */
-/* ??? It's not clear what value we want to use for -Acpu/machine for
- sparc64 in 32 bit environments, so for now we only use `sparc64' in
- 64 bit environments. */
-/* ??? __arch64__ is subject to change. */
-
-#if SPARC_ARCH64
-#define CPP_PREDEFINES \
- "-Dsparc -Dsun -Dunix -D__arch64__ \
- -Asystem(unix) -Asystem(bsd) -Acpu(sparc64) -Amachine(sparc64)"
-#else
-#define CPP_PREDEFINES \
- "-Dsparc -Dsun -Dunix -D__GCC_NEW_VARARGS__ \
- -Asystem(unix) -Asystem(bsd) -Acpu(sparc) -Amachine(sparc)"
-#endif
+#define CPP_PREDEFINES "-Dsparc -Dsun -Dunix -Asystem(unix) -Asystem(bsd)"
/* Define macros to distinguish architectures. */
-#if SPARC_ARCH64
-#define CPP_SPEC "\
-%{mint64:-D__INT_MAX__=9223372036854775807LL -D__LONG_MAX__=9223372036854775807LL} \
-%{mlong64:-D__LONG_MAX__=9223372036854775807LL} \
-"
-#else
-#define CPP_SPEC "%(cpp_cpu)"
-#endif
-
/* Common CPP definitions used by CPP_SPEC amongst the various targets
for handling -mcpu=xxx switches. */
-/* ??? v8plus/v9/ultrasparc handling is tentative */
#define CPP_CPU_SPEC "\
%{mcypress:} \
%{msparclite:-D__sparclite__} \
@@ -136,9 +161,34 @@ Unrecognized value in TARGET_CPU_DEFAULT.
%{mcpu=v8plus:-D__sparc_v9__} \
%{mcpu=v9:-D__sparc_v9__} \
%{mcpu=ultrasparc:-D__sparc_v9__} \
-%{!mcpu*:%{!mcypress:%{!msparclite:%{!mf930:%{!mf934:%{!mv8:%{!msupersparc:%(cpp_default)}}}}}}} \
+%{!mcpu*:%{!mcypress:%{!msparclite:%{!mf930:%{!mf934:%{!mv8:%{!msupersparc:%(cpp_cpu_default)}}}}}}} \
"
+/* ??? The GCC_NEW_VARARGS macro is now obsolete, because gcc always uses
+ the right varags.h file when bootstrapping. */
+/* ??? It's not clear what value we want to use for -Acpu/machine for
+ sparc64 in 32 bit environments, so for now we only use `sparc64' in
+ 64 bit environments. */
+
+#define CPP_ARCH32_SPEC "-D__GCC_NEW_VARARGS__ -Acpu(sparc) -Amachine(sparc)"
+#define CPP_ARCH64_SPEC "-D__arch64__ -Acpu(sparc64) -Amachine(sparc64)"
+#define CPP_ARCH_DEFAULT_SPEC \
+(DEFAULT_ARCH32_P ? CPP_ARCH32_SPEC : CPP_ARCH64_SPEC)
+
+#define CPP_ARCH_SPEC "\
+%{m32:%(cpp_arch32)} \
+%{m64:%(cpp_arch64)} \
+%{!m32:%{!m64:%(cpp_arch_default)}} \
+"
+
+/* Macros to distinguish endianness. */
+#define CPP_ENDIAN_SPEC "%{mlittle-endian:-D__LITTLE_ENDIAN__}"
+
+/* Macros to distinguish the particular subtarget. */
+#define CPP_SUBTARGET_SPEC ""
+
+#define CPP_SPEC "%(cpp_cpu) %(cpp_arch) %(cpp_endian) %(cpp_subtarget)"
+
/* Prevent error on `-sun4' and `-target sun4' options. */
/* This used to translate -dalign to -malign, but that is no good
because it can't turn off the usual meaning of making debugging dumps. */
@@ -152,13 +202,32 @@ Unrecognized value in TARGET_CPU_DEFAULT.
%{mv8:-mcpu=v8} %{msupersparc:-mcpu=supersparc} \
"
-#define LIB_SPEC "%{!shared:%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p} %{g:-lg}}"
+/* Override in target specific files. */
+#define ASM_CPU_SPEC "\
+%{mcpu=sparclet:-Asparclet} %{mcpu=tsc701:-Asparclet} \
+%{msparclite:-Asparclite} \
+%{mf930:-Asparclite} %{mf934:-Asparclite} \
+%{mcpu=sparclite:-Asparclite} \
+%{mcpu=f930:-Asparclite} %{mcpu=f934:-Asparclite} \
+%{mcpu=v8plus:-Av8plus} \
+%{mcpu=v9:-Av9} \
+%{mcpu=ultrasparc:-Av9a} \
+%{!mcpu*:%{!mcypress:%{!msparclite:%{!mf930:%{!mf934:%{!mv8:%{!msupersparc:%(asm_cpu_default)}}}}}}} \
+"
-/* Provide required defaults for linker -e and -d switches. */
+/* Word size selection, among other things.
+ This is what GAS uses. Add %(asm_arch) to ASM_SPEC to enable. */
-#define LINK_SPEC \
- "%{!shared:%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp} %{static:-Bstatic} \
- %{assert*} %{shared:%{!mimpure-text:-assert pure-text}}"
+#define ASM_ARCH32_SPEC "-32"
+#define ASM_ARCH64_SPEC "-64"
+#define ASM_ARCH_DEFAULT_SPEC \
+(DEFAULT_ARCH32_P ? ASM_ARCH32_SPEC : ASM_ARCH64_SPEC)
+
+#define ASM_ARCH_SPEC "\
+%{m32:%(asm_arch32)} \
+%{m64:%(asm_arch64)} \
+%{!m32:%{!m64:%(asm_arch_default)}} \
+"
/* Special flags to the Sun-4 assembler when using pipe for input. */
@@ -167,18 +236,13 @@ Unrecognized value in TARGET_CPU_DEFAULT.
%(asm_cpu) \
"
-/* Override in target specific files. */
-#define ASM_CPU_SPEC "\
-%{mcpu=sparclet:-Asparclet} %{mcpu=tsc701:-Asparclet} \
-%{msparclite:-Asparclite} \
-%{mf930:-Asparclite} %{mf934:-Asparclite} \
-%{mcpu=sparclite:-Asparclite} \
-%{mcpu=f930:-Asparclite} %{mcpu=f934:-Asparclite} \
-%{mcpu=v8plus:-Av9} \
-%{mcpu=v9:-Av9} \
-%{mcpu=ultrasparc:-Av9} \
-%{!mcpu*:%{!mcypress:%{!msparclite:%{!mf930:%{!mf934:%{!mv8:%{!msupersparc:%(asm_default)}}}}}}} \
-"
+#define LIB_SPEC "%{!shared:%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p} %{g:-lg}}"
+
+/* Provide required defaults for linker -e and -d switches. */
+
+#define LINK_SPEC \
+ "%{!shared:%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp} %{static:-Bstatic} \
+ %{assert*} %{shared:%{!mimpure-text:-assert pure-text}}"
/* This macro defines names of additional specifications to put in the specs
that can be used in various specifications like CC1_SPEC. Its definition
@@ -190,22 +254,31 @@ Unrecognized value in TARGET_CPU_DEFAULT.
Do not define this macro if it does not need to do anything. */
-#define EXTRA_SPECS \
+#define EXTRA_SPECS \
{ "cpp_cpu", CPP_CPU_SPEC }, \
- { "cpp_default", CPP_DEFAULT_SPEC }, \
+ { "cpp_cpu_default", CPP_CPU_DEFAULT_SPEC }, \
+ { "cpp_arch32", CPP_ARCH32_SPEC }, \
+ { "cpp_arch64", CPP_ARCH64_SPEC }, \
+ { "cpp_arch_default", CPP_ARCH_DEFAULT_SPEC }, \
+ { "cpp_arch", CPP_ARCH_SPEC }, \
+ { "cpp_endian", CPP_ENDIAN_SPEC }, \
+ { "cpp_subtarget", CPP_SUBTARGET_SPEC }, \
{ "asm_cpu", ASM_CPU_SPEC }, \
- { "asm_default", ASM_DEFAULT_SPEC }, \
+ { "asm_cpu_default", ASM_CPU_DEFAULT_SPEC }, \
+ { "asm_arch32", ASM_ARCH32_SPEC }, \
+ { "asm_arch64", ASM_ARCH64_SPEC }, \
+ { "asm_arch_default", ASM_ARCH_DEFAULT_SPEC }, \
+ { "asm_arch", ASM_ARCH_SPEC }, \
SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS
-#if SPARC_ARCH64
-#define PTRDIFF_TYPE "long long int"
-#define SIZE_TYPE "long long unsigned int"
-#else
-#define PTRDIFF_TYPE "int"
-/* The default value for SIZE_TYPE is "unsigned int" which is what we want. */
+#ifdef SPARC_BI_ARCH
+#define NO_BUILTIN_PTRDIFF_TYPE
+#define NO_BUILTIN_SIZE_TYPE
#endif
+#define PTRDIFF_TYPE (TARGET_ARCH64 ? "long long int" : "int")
+#define SIZE_TYPE (TARGET_ARCH64 ? "long long unsigned int" : "unsigned int")
/* ??? This should be 32 bits for v9 but what can we do? */
#define WCHAR_TYPE "short unsigned int"
@@ -336,16 +409,7 @@ extern int target_flags;
#define MASK_LITTLE_ENDIAN 0x1000
#define TARGET_LITTLE_ENDIAN (target_flags & MASK_LITTLE_ENDIAN)
-/* Nonzero if ints are 64 bits.
- This automatically implies longs are 64 bits too.
- This option is for v9 only. */
-#define MASK_INT64 0x2000
-#define TARGET_INT64 (target_flags & MASK_INT64)
-
-/* Nonzero if longs are 64 bits.
- This option is for v9 only. */
-#define MASK_LONG64 0x4000
-#define TARGET_LONG64 (target_flags & MASK_LONG64)
+/* 0x2000, 0x4000 are unused */
/* Nonzero if pointers are 64 bits.
This is not a user selectable option, though it may be one day -
@@ -353,31 +417,13 @@ extern int target_flags;
#define MASK_PTR64 0x8000
#define TARGET_PTR64 (target_flags & MASK_PTR64)
-/* Nonzero if generating code to run in a 64 bit environment. */
-#define MASK_ARCH64 0x10000
-#define TARGET_ARCH64 (target_flags & MASK_ARCH64)
-#define TARGET_ARCH32 (! TARGET_ARCH64)
-
-/* SPARC64 memory models.
- TARGET_MEDLOW: 32 bit address space, top 32 bits = 0,
- avoid generating %uhi and %ulo terms.
- (pointers can be 32 or 64 bits)
- TARGET_MEDANY: 64 bit address space, data segment restricted to 4G, but
- can be loaded anywhere (use %g4 as offset).
- TARGET_FULLANY: 64 bit address space, no restrictions.
- This option is not fully supported yet.
- These options are for v9 only. All mask values are nonzero so the v8
- compiler can assume this stuff won't interfere. */
-#define MASK_MEDLOW 0x20000
-#define MASK_MEDANY 0x40000
-#define MASK_FULLANY 0x60000
-#define MASK_CODE_MODEL (MASK_MEDLOW + MASK_MEDANY)
-#define TARGET_MEDLOW ((target_flags & MASK_CODE_MODEL) == MASK_MEDLOW)
-#define TARGET_MEDANY ((target_flags & MASK_CODE_MODEL) == MASK_MEDANY)
-#define TARGET_FULLANY ((target_flags & MASK_CODE_MODEL) == MASK_FULLANY)
-
-/* ??? There are hardcoded references to this reg in the .md file. */
-#define MEDANY_BASE_REG "%g4"
+/* Nonzero if generating code to run in a 64 bit environment.
+ This is intended to only be used by TARGET_ARCH{32,64} as they are the
+ mechanism used to control compile time or run time selection. */
+#define MASK_64BIT 0x10000
+#define TARGET_64BIT (target_flags & MASK_64BIT)
+
+/* 0x20000,0x40000 unused */
/* Non-zero means use a stack bias of 2047. Stack offsets are obtained by
adding 2047 to %sp. This option is for v9 only and is the default. */
@@ -394,8 +440,8 @@ extern int target_flags;
/* Non-zero means the cpu has broken `save' and `restore' insns, only
the trivial versions work (save %g0,%g0,%g0; restore %g0,%g0,%g0).
We assume the environment will properly handle or otherwise avoid
- trouble associated with an interrupt occuring after the `save' or trap
- occuring during it. */
+ trouble associated with an interrupt occurring after the `save' or trap
+ occurring during it. */
#define MASK_BROKEN_SAVERESTORE 0x200000
#define TARGET_BROKEN_SAVERESTORE (target_flags & MASK_BROKEN_SAVERESTORE)
@@ -428,15 +474,22 @@ extern int target_flags;
{"no-app-regs", -MASK_APP_REGS}, \
{"hard-quad-float", MASK_HARD_QUAD}, \
{"soft-quad-float", -MASK_HARD_QUAD}, \
- /* ??? These are coerced to -mcpu=. Delete in 2.9. */ \
+ /* ??? These are deprecated, coerced to -mcpu=. Delete in 2.9. */ \
{"cypress", 0}, \
{"sparclite", 0}, \
{"f930", 0}, \
{"f934", 0}, \
{"v8", 0}, \
{"supersparc", 0}, \
+ /* End of deprecated options. */ \
+ /* -mptrNN exists for *experimental* purposes. */ \
+/* {"ptr64", MASK_PTR64}, */ \
+/* {"ptr32", -MASK_PTR64}, */ \
+ {"32", -MASK_64BIT}, \
+ {"64", MASK_64BIT}, \
+ {"stack-bias", MASK_STACK_BIAS}, \
+ {"no-stack-bias", -MASK_STACK_BIAS}, \
SUBTARGET_SWITCHES \
- ARCH64_SWITCHES \
{ "", TARGET_DEFAULT}}
/* MASK_APP_REGS must always be the default because that's what
@@ -447,32 +500,6 @@ extern int target_flags;
/* This is meant to be redefined in target specific files. */
#define SUBTARGET_SWITCHES
-/* ??? Until we support a combination 32/64 bit compiler, these options
- are only defined for the v9 compiler in a true 64 bit environment. */
-#if SPARC_ARCH64
-#define ARCH64_SWITCHES \
-/* {"arch32", -MASK_ARCH64}, */ \
-/* {"arch64", MASK_ARCH64}, */ \
- {"int64", MASK_INT64+MASK_LONG64}, \
- {"int32", -MASK_INT64}, \
- {"int32", MASK_LONG64}, \
- {"long64", -MASK_INT64}, \
- {"long64", MASK_LONG64}, \
- {"long32", -(MASK_INT64+MASK_LONG64)}, \
-/* {"ptr64", MASK_PTR64}, */ \
-/* {"ptr32", -MASK_PTR64}, */ \
- {"stack-bias", MASK_STACK_BIAS}, \
- {"no-stack-bias", -MASK_STACK_BIAS}, \
- {"medlow", -MASK_CODE_MODEL}, \
- {"medlow", MASK_MEDLOW}, \
- {"medany", -MASK_CODE_MODEL}, \
- {"medany", MASK_MEDANY}, \
- {"fullany", -MASK_CODE_MODEL}, \
- {"fullany", MASK_FULLANY},
-#else
-#define ARCH64_SWITCHES
-#endif
-
/* Processor type.
These must match the values for the cpu attribute in sparc.md. */
enum processor_type {
@@ -515,10 +542,14 @@ extern enum processor_type sparc_cpu;
#define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } */
#define TARGET_OPTIONS \
-{ \
- {"cpu=", &sparc_select[1].string}, \
- {"tune=", &sparc_select[2].string}, \
- SUBTARGET_OPTIONS \
+{ \
+ { "cpu=", &sparc_select[1].string }, \
+ { "tune=", &sparc_select[2].string }, \
+ { "cmodel=", &sparc_cmodel_string }, \
+ { "align-loops=", &sparc_align_loops_string }, \
+ { "align-jumps=", &sparc_align_jumps_string }, \
+ { "align-functions=", &sparc_align_funcs_string }, \
+ SUBTARGET_OPTIONS \
}
/* This is meant to be redefined in target specific files. */
@@ -534,6 +565,18 @@ struct sparc_cpu_select
};
extern struct sparc_cpu_select sparc_select[];
+
+/* Variables to record values the user passes. */
+extern char *sparc_align_loops_string;
+extern char *sparc_align_jumps_string;
+extern char *sparc_align_funcs_string;
+/* Parsed values as a power of two. */
+extern int sparc_align_loops;
+extern int sparc_align_jumps;
+extern int sparc_align_funcs;
+
+#define DEFAULT_SPARC_ALIGN_FUNCS \
+(sparc_cpu == PROCESSOR_ULTRASPARC ? 5 : 2)
/* target machine storage layout */
@@ -577,16 +620,17 @@ extern struct sparc_cpu_select sparc_select[];
/* Now define the sizes of the C data types. */
#define SHORT_TYPE_SIZE 16
-#define INT_TYPE_SIZE (TARGET_INT64 ? 64 : 32)
-#define LONG_TYPE_SIZE (TARGET_LONG64 ? 64 : 32)
+#define INT_TYPE_SIZE 32
+#define LONG_TYPE_SIZE (TARGET_ARCH64 ? 64 : 32)
#define LONG_LONG_TYPE_SIZE 64
#define FLOAT_TYPE_SIZE 32
#define DOUBLE_TYPE_SIZE 64
-#define MAX_INT_TYPE_SIZE 64
+#if defined (SPARC_BI_ARCH)
#define MAX_LONG_TYPE_SIZE 64
+#endif
-#if SPARC_ARCH64
+#if 0
/* ??? This does not work in SunOS 4.x, so it is not enabled here.
Instead, it is enabled in sol2.h, because it does work under Solaris. */
/* Define for support of TFmode long double and REAL_ARITHMETIC.
@@ -598,6 +642,34 @@ extern struct sparc_cpu_select sparc_select[];
See also the macro `Pmode' defined below. */
#define POINTER_SIZE (TARGET_PTR64 ? 64 : 32)
+/* A macro to update MODE and UNSIGNEDP when an object whose type
+ is TYPE and which has the specified mode and signedness is to be
+ stored in a register. This macro is only called when TYPE is a
+ scalar type. */
+#define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE) \
+if (TARGET_ARCH64 \
+ && GET_MODE_CLASS (MODE) == MODE_INT \
+ && GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \
+{ \
+ (MODE) = DImode; \
+}
+
+/* Define this macro if the promotion described by PROMOTE_MODE
+ should also be done for outgoing function arguments. */
+/* This is only needed for TARGET_ARCH64, but since PROMOTE_MODE is a no-op
+ for TARGET_ARCH32 this is ok. Otherwise we'd need to add a runtime test
+ for this value. */
+#define PROMOTE_FUNCTION_ARGS
+
+/* Define this macro if the promotion described by PROMOTE_MODE
+ should also be done for the return value of functions.
+ If this macro is defined, FUNCTION_VALUE must perform the same
+ promotions done by PROMOTE_MODE. */
+/* This is only needed for TARGET_ARCH64, but since PROMOTE_MODE is a no-op
+ for TARGET_ARCH32 this is ok. Otherwise we'd need to add a runtime test
+ for this value. */
+#define PROMOTE_FUNCTION_RETURN
+
/* Allocation boundary (in *bits*) for storing arguments in argument list. */
#define PARM_BOUNDARY (TARGET_ARCH64 ? 64 : 32)
@@ -610,10 +682,9 @@ extern struct sparc_cpu_select sparc_select[];
(TARGET_ARCH64 ? (((LOC)+15) & ~15) : (((LOC)+7) & ~7))
/* Allocation boundary (in *bits*) for the code of a function. */
-#define FUNCTION_BOUNDARY 32
+#define FUNCTION_BOUNDARY (1 << (sparc_align_funcs + 3))
/* Alignment of field after `int : 0' in a structure. */
-/* ??? Should this be based on TARGET_INT64? */
#define EMPTY_FIELD_BOUNDARY (TARGET_ARCH64 ? 64 : 32)
/* Every structure's size must be a multiple of this. */
@@ -718,9 +789,10 @@ extern struct sparc_cpu_select sparc_select[];
#define FIRST_PSEUDO_REGISTER 101
+#define SPARC_FIRST_FP_REG 32
/* Additional V9 fp regs. */
-#define SPARC_FIRST_V9_FP_REG 64
-#define SPARC_LAST_V9_FP_REG 95
+#define SPARC_FIRST_V9_FP_REG 64
+#define SPARC_LAST_V9_FP_REG 95
/* V9 %fcc[0123]. V8 uses (figuratively) %fcc0. */
#define SPARC_FIRST_V9_FCC_REG 96
#define SPARC_LAST_V9_FCC_REG 99
@@ -729,18 +801,33 @@ extern struct sparc_cpu_select sparc_select[];
/* Integer CC reg. We don't distinguish %icc from %xcc. */
#define SPARC_ICC_REG 100
+/* Nonzero if REGNO is an fp reg. */
+#define SPARC_FP_REG_P(REGNO) \
+((REGNO) >= SPARC_FIRST_FP_REG && (REGNO) <= SPARC_LAST_V9_FP_REG)
+
+/* Argument passing regs. */
+#define SPARC_OUTGOING_INT_ARG_FIRST 8
+#define SPARC_INCOMING_INT_ARG_FIRST 24
+#define SPARC_FP_ARG_FIRST 32
+
/* 1 for registers that have pervasive standard uses
and are not available for the register allocator.
+
On non-v9 systems:
g1 is free to use as temporary.
g2-g4 are reserved for applications. Gcc normally uses them as
temporaries, but this can be disabled via the -mno-app-regs option.
g5 through g7 are reserved for the operating system.
+
On v9 systems:
- g1 and g5 are free to use as temporaries.
- g2-g4 are reserved for applications. Gcc normally uses them as
+ g1,g5 are free to use as temporaries, and are free to use between calls
+ if the call is to an external function via the PLT.
+ g4 is free to use as a temporary in the non-embedded case.
+ g4 is reserved in the embedded case.
+ g2-g3 are reserved for applications. Gcc normally uses them as
temporaries, but this can be disabled via the -mno-app-regs option.
- g6-g7 are reserved for the operating system.
+ g6-g7 are reserved for the operating system (or application in
+ embedded case).
??? Register 1 is used as a temporary by the 64 bit sethi pattern, so must
currently be a fixed register until this pattern is rewritten.
Register 1 is also used when restoring call-preserved registers in large
@@ -799,17 +886,13 @@ extern struct sparc_cpu_select sparc_select[];
#define CONDITIONAL_REGISTER_USAGE \
do \
{ \
- if (! SPARC_ARCH64) \
+ if (TARGET_ARCH32) \
{ \
fixed_regs[5] = 1; \
} \
- if (SPARC_ARCH64) \
+ else \
{ \
- int regno; \
fixed_regs[1] = 1; \
- /* ??? We need to scan argv for -fcall-used-. */ \
- for (regno = 48; regno < 80; regno++) \
- call_used_regs[regno] = 0; \
} \
if (! TARGET_V9) \
{ \
@@ -833,7 +916,7 @@ do \
/* Don't unfix g2-g4 if they were fixed with -ffixed-. */ \
fixed_regs[2] |= ! TARGET_APP_REGS; \
fixed_regs[3] |= ! TARGET_APP_REGS; \
- fixed_regs[4] |= ! TARGET_APP_REGS || TARGET_MEDANY; \
+ fixed_regs[4] |= ! TARGET_APP_REGS || TARGET_CM_EMBMEDANY; \
if (TARGET_FLAT) \
{ \
/* Let the compiler believe the frame pointer is still \
@@ -902,15 +985,19 @@ extern int sparc_mode_class[];
/* Register to use for pushing function arguments. */
#define STACK_POINTER_REGNUM 14
-/* Actual top-of-stack address is 92/136 greater than the contents of the
+/* Actual top-of-stack address is 92/176 greater than the contents of the
stack pointer register for !v9/v9. That is:
- !v9: 64 bytes for the in and local registers, 4 bytes for structure return
- address, and 24 bytes for the 6 register parameters.
- - v9: 128 bytes for the in and local registers + 8 bytes reserved. */
+ address, and 6*4 bytes for the 6 register parameters.
+ - v9: 128 bytes for the in and local registers + 6*8 bytes for the integer
+ parameter regs. */
#define STACK_POINTER_OFFSET FIRST_PARM_OFFSET(0)
/* The stack bias (amount by which the hardware register is offset by). */
-#define SPARC_STACK_BIAS (TARGET_STACK_BIAS ? 2047 : 0)
+#define SPARC_STACK_BIAS ((TARGET_ARCH64 && TARGET_STACK_BIAS) ? 2047 : 0)
+
+/* Is stack biased? */
+#define STACK_BIAS SPARC_STACK_BIAS
/* Base register for access to local variables of the function. */
#define FRAME_POINTER_REGNUM 30
@@ -961,11 +1048,16 @@ extern int sparc_mode_class[];
/* Sparc ABI says that quad-precision floats and all structures are returned
in memory.
- For v9, all aggregates are returned in memory. */
+ For v9: unions <= 32 bytes in size are returned in int regs,
+ structures up to 32 bytes are returned in int and fp regs.
+ FIXME: wip */
+
#define RETURN_IN_MEMORY(TYPE) \
- (TYPE_MODE (TYPE) == BLKmode \
- || (! TARGET_ARCH64 && (TYPE_MODE (TYPE) == TFmode \
- || TYPE_MODE (TYPE) == TCmode)))
+(TARGET_ARCH32 \
+ ? (TYPE_MODE (TYPE) == BLKmode \
+ || TYPE_MODE (TYPE) == TFmode \
+ || TYPE_MODE (TYPE) == TCmode) \
+ : TYPE_MODE (TYPE) == BLKmode)
/* Functions which return large structures get the address
to place the wanted value at offset 64 from the frame.
@@ -1008,7 +1100,9 @@ extern int sparc_mode_class[];
For any two classes, it is very desirable that there be another
class that represents their union. */
-/* The SPARC has two kinds of registers, general and floating point.
+/* The SPARC has various kinds of registers: general, floating point,
+ and condition codes [well, it has others as well, but none that we
+ care directly about].
For v9 we must distinguish between the upper and lower floating point
registers because the upper ones can't hold SFmode values.
@@ -1037,7 +1131,7 @@ extern int sparc_mode_class[];
It is important that SPARC_ICC_REG have class NO_REGS. Otherwise combine
may try to use it to hold an SImode value. See register_operand.
- ??? Should %fcc[0123] be handled similarily?
+ ??? Should %fcc[0123] be handled similarly?
*/
enum reg_class { NO_REGS, FPCC_REGS, GENERAL_REGS, FP_REGS, EXTRA_FP_REGS,
@@ -1075,10 +1169,7 @@ extern enum reg_class sparc_regno_reg_class[];
We put %f0/%f1 last among the float registers, so as to make it more
likely that a pseudo-register which dies in the float return register
will get allocated to the float return register, thus saving a move
- instruction at the end of the function.
-
- The float registers are ordered a little "funny" because in the 64 bit
- architecture, some of them (%f16-%f47) are call-preserved. */
+ instruction at the end of the function. */
#define REG_ALLOC_ORDER \
{ 8, 9, 10, 11, 12, 13, 2, 3, \
@@ -1086,21 +1177,19 @@ extern enum reg_class sparc_regno_reg_class[];
23, 24, 25, 26, 27, 28, 29, 31, \
34, 35, 36, 37, 38, 39, /* %f2-%f7 */ \
40, 41, 42, 43, 44, 45, 46, 47, /* %f8-%f15 */ \
- 80, 81, 82, 83, 84, 85, 86, 87, /* %f48-%f55 */ \
- 88, 89, 90, 91, 92, 93, 94, 95, /* %f56-%f63 */ \
48, 49, 50, 51, 52, 53, 54, 55, /* %f16-%f23 */ \
56, 57, 58, 59, 60, 61, 62, 63, /* %f24-%f31 */ \
64, 65, 66, 67, 68, 69, 70, 71, /* %f32-%f39 */ \
72, 73, 74, 75, 76, 77, 78, 79, /* %f40-%f47 */ \
+ 80, 81, 82, 83, 84, 85, 86, 87, /* %f48-%f55 */ \
+ 88, 89, 90, 91, 92, 93, 94, 95, /* %f56-%f63 */ \
32, 33, /* %f0,%f1 */ \
96, 97, 98, 99, 100, /* %fcc0-3, %icc */ \
1, 4, 5, 6, 7, 0, 14, 30}
/* This is the order in which to allocate registers for
leaf functions. If all registers can fit in the "i" registers,
- then we have the possibility of having a leaf function.
- The floating point registers are ordered a little "funny" because in the
- 64 bit architecture some of them (%f16-%f47) are call-preserved. */
+ then we have the possibility of having a leaf function. */
#define REG_LEAF_ALLOC_ORDER \
{ 2, 3, 24, 25, 26, 27, 28, 29, \
@@ -1108,12 +1197,12 @@ extern enum reg_class sparc_regno_reg_class[];
16, 17, 18, 19, 20, 21, 22, 23, \
34, 35, 36, 37, 38, 39, \
40, 41, 42, 43, 44, 45, 46, 47, \
- 80, 81, 82, 83, 84, 85, 86, 87, \
- 88, 89, 90, 91, 92, 93, 94, 95, \
48, 49, 50, 51, 52, 53, 54, 55, \
56, 57, 58, 59, 60, 61, 62, 63, \
64, 65, 66, 67, 68, 69, 70, 71, \
72, 73, 74, 75, 76, 77, 78, 79, \
+ 80, 81, 82, 83, 84, 85, 86, 87, \
+ 88, 89, 90, 91, 92, 93, 94, 95, \
32, 33, \
96, 97, 98, 99, 100, \
1, 4, 5, 6, 7, 0, 14, 30, 31}
@@ -1178,17 +1267,19 @@ extern char leaf_reg_remap[];
`L' is used for the range of constants supported by the movcc insns.
`M' is used for the range of constants supported by the movrcc insns. */
-#define SPARC_SIMM10_P(X) ((unsigned HOST_WIDE_INT) ((X) + 0x200) < 0x400)
-#define SPARC_SIMM11_P(X) ((unsigned HOST_WIDE_INT) ((X) + 0x400) < 0x800)
-#define SPARC_SIMM13_P(X) ((unsigned HOST_WIDE_INT) ((X) + 0x1000) < 0x2000)
+#define SPARC_SIMM10_P(X) ((unsigned HOST_WIDE_INT) (X) + 0x200 < 0x400)
+#define SPARC_SIMM11_P(X) ((unsigned HOST_WIDE_INT) (X) + 0x400 < 0x800)
+#define SPARC_SIMM13_P(X) ((unsigned HOST_WIDE_INT) (X) + 0x1000 < 0x2000)
/* 10 and 11 bit immediates are only used for a few specific insns.
SMALL_INT is used throughout the port so we continue to use it. */
#define SMALL_INT(X) (SPARC_SIMM13_P (INTVAL (X)))
+#define SPARC_SETHI_P(X) \
+(((unsigned HOST_WIDE_INT) (X) & ~(unsigned HOST_WIDE_INT) 0xfffffc00) == 0)
#define CONST_OK_FOR_LETTER_P(VALUE, C) \
((C) == 'I' ? SPARC_SIMM13_P (VALUE) \
: (C) == 'J' ? (VALUE) == 0 \
- : (C) == 'K' ? ((VALUE) & 0x3ff) == 0 \
+ : (C) == 'K' ? SPARC_SETHI_P (VALUE) \
: (C) == 'L' ? SPARC_SIMM11_P (VALUE) \
: (C) == 'M' ? SPARC_SIMM10_P (VALUE) \
: 0)
@@ -1274,13 +1365,15 @@ extern char leaf_reg_remap[];
/* Stack layout; function entry, exit and calling. */
/* Define the number of register that can hold parameters.
- These two macros are used only in other macro definitions below.
+ This macro is only used in other macro definitions below and in sparc.c.
MODE is the mode of the argument.
!v9: All args are passed in %o0-%o5.
- v9: Non-float args are passed in %o0-5 and float args are passed in
- %f0-%f15. */
+ v9: %o0-%o5 and %f0-%f31 are cumulatively used to pass values.
+ See the description in sparc.c. */
#define NPARM_REGS(MODE) \
- (TARGET_ARCH64 ? (GET_MODE_CLASS (MODE) == MODE_FLOAT ? 16 : 6) : 6)
+(TARGET_ARCH64 \
+ ? (GET_MODE_CLASS (MODE) == MODE_FLOAT ? 32 : 6) \
+ : 6)
/* Define this if pushing a word on the stack
makes the stack pointer a smaller address. */
@@ -1309,16 +1402,16 @@ extern char leaf_reg_remap[];
/* Offset of first parameter from the argument pointer register value.
!v9: This is 64 for the ins and locals, plus 4 for the struct-return reg
even if this function isn't going to use it.
- v9: This is 128 for the ins and locals, plus a reserved space of 8. */
+ v9: This is 128 for the ins and locals. */
#define FIRST_PARM_OFFSET(FNDECL) \
- (TARGET_ARCH64 ? (SPARC_STACK_BIAS + 136) \
+ (TARGET_ARCH64 ? (SPARC_STACK_BIAS + 16 * UNITS_PER_WORD) \
: (STRUCT_VALUE_OFFSET + UNITS_PER_WORD))
/* When a parameter is passed in a register, stack space is still
allocated for it. */
-#if ! SPARC_ARCH64
-#define REG_PARM_STACK_SPACE(DECL) (NPARM_REGS (SImode) * UNITS_PER_WORD)
-#endif
+/* This only takes into account the int regs.
+ fp regs are handled elsewhere. */
+#define REG_PARM_STACK_SPACE(DECL) (6 * UNITS_PER_WORD)
/* Keep the stack pointer constant throughout the function.
This is both an optimization and a necessity: longjmp
@@ -1408,11 +1501,12 @@ extern char leaf_reg_remap[];
#define APPLY_RESULT_SIZE 16
/* 1 if N is a possible register number for function argument passing.
- On SPARC, these are the "output" registers. v9 also uses %f0-%f15. */
+ On SPARC, these are the "output" registers. v9 also uses %f0-%f31. */
#define FUNCTION_ARG_REGNO_P(N) \
- (TARGET_ARCH64 ? (((N) < 14 && (N) > 7) || (N) > 31 && (N) < 48) \
- : ((N) < 14 && (N) > 7))
+(TARGET_ARCH64 \
+ ? (((N) >= 8 && (N) <= 13) || ((N) >= 32 && (N) <= 63)) \
+ : ((N) >= 8 && (N) <= 13))
/* Define a data type for recording info about an argument list
during the scan of that argument list. This data type should
@@ -1425,129 +1519,30 @@ extern char leaf_reg_remap[];
if any, which holds the structure-value-address).
Thus 7 or more means all following args should go on the stack.
- For v9, we record how many of each type has been passed. Different
- types get passed differently.
-
- - Float args are passed in %f0-15, after which they go to the stack
- where floats and doubles are passed 8 byte aligned and long doubles
- are passed 16 byte aligned.
- - All aggregates are passed by reference. The callee copies
- the structure if necessary, except if stdarg/varargs and the struct
- matches the ellipse in which case the caller makes a copy.
- - Any non-float argument might be split between memory and reg %o5.
- ??? I don't think this can ever happen now that structs are no
- longer passed in regs.
+ For v9, we also need to know whether a prototype is present. */
- For v9 return values:
-
- - For all aggregates, the caller allocates space for the return value,
- and passes the pointer as an implicit first argument, which is
- allocated like all other arguments.
- - The unimp instruction stuff for structure returns is gone. */
-
-#if SPARC_ARCH64
-enum sparc_arg_class { SPARC_ARG_INT = 0, SPARC_ARG_FLOAT = 1 };
struct sparc_args {
- int arg_count[2]; /* must be int! (for __builtin_args_info) */
+ int words; /* number of words passed so far */
+ int prototype_p; /* non-zero if a prototype is present */
+ int libcall_p; /* non-zero if a library call */
};
#define CUMULATIVE_ARGS struct sparc_args
-/* Return index into CUMULATIVE_ARGS. */
-
-#define GET_SPARC_ARG_CLASS(MODE) \
- (GET_MODE_CLASS (MODE) == MODE_FLOAT ? SPARC_ARG_FLOAT : SPARC_ARG_INT)
-
-/* Round a register number up to a proper boundary for an arg of mode MODE.
- This macro is only used in this file.
-
- The "& (0x10000 - ...)" is used to round up to the next appropriate reg. */
-
-#define ROUND_REG(CUM, MODE) \
- (GET_MODE_CLASS (MODE) != MODE_FLOAT \
- ? (CUM).arg_count[(int) GET_SPARC_ARG_CLASS (MODE)] \
- : ((CUM).arg_count[(int) GET_SPARC_ARG_CLASS (MODE)] \
- + GET_MODE_UNIT_SIZE (MODE) / 4 - 1) \
- & (0x10000 - GET_MODE_UNIT_SIZE (MODE) / 4))
-
-#define ROUND_ADVANCE(SIZE) \
- (((SIZE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
-
-#else /* ! SPARC_ARCH64 */
-
-#define CUMULATIVE_ARGS int
-
-#define ROUND_REG(CUM, MODE) (CUM)
-
-#define ROUND_ADVANCE(SIZE) \
- ((SIZE + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
-#endif /* ! SPARC_ARCH64 */
-
/* 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.
+ For a library call, FNTYPE is 0. */
- On SPARC, the offset always starts at 0: the first parm reg is always
- the same reg. */
-
-#if SPARC_ARCH64
-extern int sparc_arg_count,sparc_n_named_args;
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) \
- do { \
- (CUM).arg_count[(int) SPARC_ARG_INT] = 0; \
- (CUM).arg_count[(int) SPARC_ARG_FLOAT] = 0; \
- sparc_arg_count = 0; \
- sparc_n_named_args = \
- ((FNTYPE) && TYPE_ARG_TYPES (FNTYPE) \
- ? (list_length (TYPE_ARG_TYPES (FNTYPE)) \
- + (TREE_CODE (TREE_TYPE (FNTYPE)) == RECORD_TYPE \
- || TREE_CODE (TREE_TYPE (FNTYPE)) == QUAL_UNION_TYPE\
- || TREE_CODE (TREE_TYPE (FNTYPE)) == SET_TYPE \
- || TREE_CODE (TREE_TYPE (FNTYPE)) == UNION_TYPE)) \
- /* Can't tell, treat 'em all as named. */ \
- : 10000); \
- } while (0)
-#else
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) ((CUM) = 0)
-#endif
+extern void init_cumulative_args ();
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT) \
+init_cumulative_args (& (CUM), (FNTYPE), (LIBNAME), (INDIRECT));
/* 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.) */
-
-#if SPARC_ARCH64
-#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
- do { \
- (CUM).arg_count[(int) GET_SPARC_ARG_CLASS (MODE)] = \
- ROUND_REG ((CUM), (MODE)) \
- + (GET_MODE_CLASS (MODE) == MODE_FLOAT \
- ? GET_MODE_SIZE (MODE) / 4 \
- : ROUND_ADVANCE ((MODE) == BLKmode \
- ? GET_MODE_SIZE (Pmode) \
- : GET_MODE_SIZE (MODE))); \
- sparc_arg_count++; \
- } while (0)
-#else
-#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
- ((CUM) += ((MODE) != BLKmode \
- ? ROUND_ADVANCE (GET_MODE_SIZE (MODE)) \
- : ROUND_ADVANCE (int_size_in_bytes (TYPE))))
-#endif
+ TYPE is null for libcalls where that information may not be available. */
-/* Return boolean indicating arg of mode MODE will be passed in a reg.
- This macro is only used in this file. */
-
-#if SPARC_ARCH64
-#define PASS_IN_REG_P(CUM, MODE, TYPE) \
- (ROUND_REG ((CUM), (MODE)) < NPARM_REGS (MODE) \
- && ((TYPE)==0 || ! TREE_ADDRESSABLE ((tree)(TYPE))) \
- && ((TYPE)==0 || (MODE) != BLKmode))
-#else
-#define PASS_IN_REG_P(CUM, MODE, TYPE) \
- ((CUM) < NPARM_REGS (SImode) \
- && ((TYPE)==0 || ! TREE_ADDRESSABLE ((tree)(TYPE))) \
- && ((TYPE)==0 || (MODE) != BLKmode \
- || (TYPE_ALIGN (TYPE) % PARM_BOUNDARY == 0)))
-#endif
+extern void function_arg_advance ();
+#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
+function_arg_advance (& (CUM), (MODE), (TYPE), (NAMED))
/* Determine where to put an argument to a function.
Value is zero to push the argument on the stack,
@@ -1562,64 +1557,52 @@ extern int sparc_arg_count,sparc_n_named_args;
NAMED is nonzero if this argument is a named parameter
(otherwise it is an extra parameter matching an ellipsis). */
-/* On SPARC the first six args are normally in registers
- and the rest are pushed. Any arg that starts within the first 6 words
- is at least partially passed in a register unless its data type forbids.
- For v9, the first 6 int args are passed in regs and the first N
- float args are passed in regs (where N is such that %f0-15 are filled).
- The rest are pushed. Any arg that starts within the first 6 words
- is at least partially passed in a register unless its data type forbids. */
-
-#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
- (PASS_IN_REG_P ((CUM), (MODE), (TYPE)) \
- ? gen_rtx (REG, (MODE), \
- (BASE_PASSING_ARG_REG (MODE) + ROUND_REG ((CUM), (MODE))))\
- : 0)
+extern struct rtx_def *function_arg ();
+#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
+function_arg (& (CUM), (MODE), (TYPE), (NAMED), 0)
/* Define where a function finds its arguments.
This is different from FUNCTION_ARG because of register windows. */
-#define FUNCTION_INCOMING_ARG(CUM, MODE, TYPE, NAMED) \
- (PASS_IN_REG_P ((CUM), (MODE), (TYPE)) \
- ? gen_rtx (REG, (MODE), \
- (BASE_INCOMING_ARG_REG (MODE) + ROUND_REG ((CUM), (MODE))))\
- : 0)
+#define FUNCTION_INCOMING_ARG(CUM, MODE, TYPE, NAMED) \
+function_arg (& (CUM), (MODE), (TYPE), (NAMED), 1)
/* 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.
- Any arg that starts in the first 6 regs but won't entirely fit in them
- needs partial registers on the Sparc (!v9). On v9, there are no arguments
- that are passed partially in registers (??? complex values?). */
-
-#if ! SPARC_ARCH64
-#define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) \
- (PASS_IN_REG_P ((CUM), (MODE), (TYPE)) \
- && ((CUM) + ((MODE) == BLKmode \
- ? ROUND_ADVANCE (int_size_in_bytes (TYPE)) \
- : ROUND_ADVANCE (GET_MODE_SIZE (MODE))) - NPARM_REGS (SImode) > 0)\
- ? (NPARM_REGS (SImode) - (CUM)) \
- : 0)
-#endif
-
-/* The SPARC ABI stipulates passing struct arguments (of any size) and
- (!v9) quad-precision floats by invisible reference.
- For Pascal, also pass arrays by reference. */
-#define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \
- ((TYPE && AGGREGATE_TYPE_P (TYPE)) \
- || (!TARGET_ARCH64 && MODE == TFmode))
-
-/* A C expression that indicates when it is the called function's
- responsibility to make copies of arguments passed by reference.
- If the callee can determine that the argument won't be modified, it can
- avoid the copy. */
-/* ??? We'd love to be able to use NAMED here. Unfortunately, it doesn't
- include the last named argument so we keep track of the args ourselves. */
-
-#if SPARC_ARCH64
-#define FUNCTION_ARG_CALLEE_COPIES(CUM, MODE, TYPE, NAMED) \
- (sparc_arg_count < sparc_n_named_args)
-#endif
+ For args passed entirely in registers or entirely in memory, zero. */
+
+extern int function_arg_partial_nregs ();
+#define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) \
+function_arg_partial_nregs (& (CUM), (MODE), (TYPE), (NAMED))
+
+/* A C expression that indicates when an argument must be passed by reference.
+ If nonzero for an argument, a copy of that argument is made in memory and a
+ pointer to the argument is passed instead of the argument itself.
+ The pointer is passed in whatever way is appropriate for passing a pointer
+ to that type. */
+
+extern int function_arg_pass_by_reference ();
+#define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \
+function_arg_pass_by_reference (& (CUM), (MODE), (TYPE), (NAMED))
+
+/* If defined, a C expression which determines whether, and in which direction,
+ to pad out an argument with extra space. The value should be of type
+ `enum direction': either `upward' to pad above the argument,
+ `downward' to pad below, or `none' to inhibit padding. */
+extern enum direction function_arg_padding ();
+#define FUNCTION_ARG_PADDING(MODE, TYPE) \
+function_arg_padding ((MODE), (TYPE))
+
+/* If defined, a C expression that gives the alignment boundary, in bits,
+ of an argument with the specified mode and type. If it is not defined,
+ PARM_BOUNDARY is used for all arguments.
+ For sparc64, objects requiring 16 byte alignment are passed that way. */
+
+#define FUNCTION_ARG_BOUNDARY(MODE, TYPE) \
+((TARGET_ARCH64 \
+ && (GET_MODE_ALIGNMENT (MODE) == 128 \
+ || ((TYPE) && TYPE_ALIGN (TYPE) == 128))) \
+ ? 128 : PARM_BOUNDARY)
/* Initialize data used by insn expanders. This is called from
init_emit, once for each function, before code is generated.
@@ -1628,11 +1611,9 @@ extern int sparc_arg_count,sparc_n_named_args;
space at some point.
??? Use assign_stack_temp? */
-extern void sparc64_init_expanders ();
+extern void sparc_init_expanders ();
extern struct rtx_def *sparc64_fpconv_stack_temp ();
-#if SPARC_ARCH64
-#define INIT_EXPANDERS sparc64_init_expanders ()
-#endif
+#define INIT_EXPANDERS sparc_init_expanders ()
/* 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
@@ -1704,8 +1685,6 @@ extern int leaf_function;
fputs ("\tsethi %hi(", FILE); \
assemble_name (FILE, buf); \
fputs ("),%o0\n", FILE); \
- if (TARGET_MEDANY) \
- fprintf (FILE, "\tadd %o0,%s,%o0\n", MEDANY_BASE_REG); \
fputs ("\tcall mcount\n\tadd %o0,%lo(", FILE); \
assemble_name (FILE, buf); \
fputs ("),%o0\n", FILE); \
@@ -1805,20 +1784,12 @@ do \
switch (profile_block_flag) \
{ \
case 2: \
- if (TARGET_MEDANY) \
- fprintf (FILE, "\tsethi %%hi(LPBX0),%%o0\n\tor %%0,%%lo(LPBX0),%%o0\n\tadd %%o0,%s,%%o0\n\tsethi %%hi(%d),%%o1\n\tcall ___bb_init_trace_func\n\tadd %g0,%%lo(%d),%%o1\n",\
- MEDANY_BASE_REG, bol, bol); \
- else \
- fprintf (FILE, "\tsethi %%hi(LPBX0),%%o0\n\tor %%o0,%%lo(LPBX0),%%o0\n\tsethi %%hi(%d),%%o1\n\tcall ___bb_init_trace_func\n\tor %%o1,%%lo(%d),%%o1\n",\
- bol, bol); \
+ fprintf (FILE, "\tsethi %%hi(LPBX0),%%o0\n\tor %%o0,%%lo(LPBX0),%%o0\n\tsethi %%hi(%d),%%o1\n\tcall ___bb_init_trace_func\n\tor %%o1,%%lo(%d),%%o1\n",\
+ bol, bol); \
break; \
default: \
- if (TARGET_MEDANY) \
- fprintf (FILE, "\tsethi %%hi(LPBX0),%%o0\n\tor %%0,%%lo(LPBX0),%%o0\n\tld [%s+%%o0],%%o1\n\ttst %%o1\n\tbne LPY%d\n\tadd %%o0,%s,%%o0\n\tcall ___bb_init_func\n\tnop\nLPY%d:\n",\
- MEDANY_BASE_REG, bol, MEDANY_BASE_REG, bol);\
- else \
- fprintf (FILE, "\tsethi %%hi(LPBX0),%%o0\n\tld [%%lo(LPBX0)+%%o0],%%o1\n\ttst %%o1\n\tbne LPY%d\n\tadd %%o0,%%lo(LPBX0),%%o0\n\tcall ___bb_init_func\n\tnop\nLPY%d:\n",\
- bol, bol); \
+ fprintf (FILE, "\tsethi %%hi(LPBX0),%%o0\n\tld [%%lo(LPBX0)+%%o0],%%o1\n\ttst %%o1\n\tbne LPY%d\n\tadd %%o0,%%lo(LPBX0),%%o0\n\tcall ___bb_init_func\n\tnop\nLPY%d:\n",\
+ bol, bol); \
break; \
} \
} \
@@ -1896,21 +1867,13 @@ do \
switch (profile_block_flag) \
{ \
case 2: \
- if (TARGET_MEDANY) \
- fprintf (FILE, "\tsethi %%hi(___bb),%%g1\n\tor %%0,%%lo(___bb),%%g1\n\tsethi %%hi(%d),%%g2\n\tor %%g2,%%lo(%d),%%g2\n\tst %%g2,[%s+%%g1]\n\tsethi %%hi(LPBX0),%%g2\n\tor %%0,%%lo(LPBX0),%%g2\n\tadd %%g2,%s,%%g2\n\tadd 4,%%g1,%%g1\n\tst %%g2,[%%g1+%%lo(___bb)]\n\tmov %%o7,%%g2\n\tcall ___bb_trace_func\n\tnop\n\tmov %%g2,%%o7\n",\
- blockn, blockn, MEDANY_BASE_REG, MEDANY_BASE_REG); \
- else \
- fprintf (FILE, "\tsethi %%hi(___bb),%%g1\n\tsethi %%hi(%d),%%g2\n\tor %%g2,%%lo(%d),%%g2\n\tst %%g2,[%%lo(___bb)+%%g1]\n\tsethi %%hi(LPBX0),%%g2\n\tor %%g2,%%lo(LPBX0),%%g2\n\tadd 4,%%g1,%%g1\n\tst %%g2,[%%lo(___bb)+%%g1]\n\tmov %%o7,%%g2\n\tcall ___bb_trace_func\n\tnop\n\tmov %%g2,%%o7\n",\
- blockn, blockn); \
+ fprintf (FILE, "\tsethi %%hi(___bb),%%g1\n\tsethi %%hi(%d),%%g2\n\tor %%g2,%%lo(%d),%%g2\n\tst %%g2,[%%lo(___bb)+%%g1]\n\tsethi %%hi(LPBX0),%%g2\n\tor %%g2,%%lo(LPBX0),%%g2\n\tadd 4,%%g1,%%g1\n\tst %%g2,[%%lo(___bb)+%%g1]\n\tmov %%o7,%%g2\n\tcall ___bb_trace_func\n\tnop\n\tmov %%g2,%%o7\n",\
+ blockn, blockn); \
break; \
default: \
- if (TARGET_MEDANY) \
- fprintf (FILE, "\tsethi %%hi(LPBX2+%d),%%g1\n\tor %%g1,%%lo(LPBX2+%d),%%g1\n\tld [%%g1+%s],%%g2\n\tadd %%g2,1,%%g2\n\tst %%g2,[%%g1+%s]\n", \
- 4 * blockn, 4 * blockn, MEDANY_BASE_REG, MEDANY_BASE_REG); \
- else \
- fprintf (FILE, "\tsethi %%hi(LPBX2+%d),%%g1\n\tld [%%lo(LPBX2+%d)+%%g1],%%g2\n\
+ fprintf (FILE, "\tsethi %%hi(LPBX2+%d),%%g1\n\tld [%%lo(LPBX2+%d)+%%g1],%%g2\n\
\tadd %%g2,1,%%g2\n\tst %%g2,[%%lo(LPBX2+%d)+%%g1]\n", \
- 4 * blockn, 4 * blockn, 4 * blockn); \
+ 4 * blockn, 4 * blockn, 4 * blockn); \
break; \
} \
} \
@@ -2114,6 +2077,7 @@ extern union tree_node *current_function_decl;
nop
.xword context
.xword function */
+/* ??? Stack is execute-protected in v9. */
#define TRAMPOLINE_TEMPLATE(FILE) \
do { \
@@ -2158,9 +2122,24 @@ void sparc64_initialize_trampoline ();
/* Generate necessary RTL for __builtin_saveregs().
ARGLIST is the argument list; see expr.c. */
+
extern struct rtx_def *sparc_builtin_saveregs ();
#define EXPAND_BUILTIN_SAVEREGS(ARGLIST) sparc_builtin_saveregs (ARGLIST)
+/* Define this macro if the location where a function argument is passed
+ depends on whether or not it is a named argument.
+
+ This macro controls how the NAMED argument to FUNCTION_ARG
+ is set for varargs and stdarg functions. With this macro defined,
+ the NAMED argument is always true for named arguments, and false for
+ unnamed arguments. If this is not defined, but SETUP_INCOMING_VARARGS
+ is defined, then all arguments are treated as named. Otherwise, all named
+ arguments except the last are treated as named.
+ For the v9 we want NAMED to mean what it says it means. */
+/* ??? This needn't be set for v8, but I don't want to make this runtime
+ selectable if I don't have to. */
+#define STRICT_ARGUMENT_NAMING
+
/* Generate RTL to flush the register windows so as to make arbitrary frames
available. */
#define SETUP_FRAME_ADDRESSES() \
@@ -2194,6 +2173,18 @@ extern struct rtx_def *sparc_builtin_saveregs ();
: gen_rtx (MEM, Pmode, \
memory_address (Pmode, plus_constant (frame, 15 * UNITS_PER_WORD))))
+/* Before the prologue, the return address is %o7 + 8. OK, sometimes it's
+ +12, but always using +8 is close enough for frame unwind purposes.
+ Actually, just using %o7 is close enough for unwinding, but %o7+8
+ is something you can return to. */
+#define INCOMING_RETURN_ADDR_RTX \
+ gen_rtx (PLUS, word_mode, gen_rtx (REG, word_mode, 15), GEN_INT (8))
+
+/* The offset from the incoming value of %sp to the top of the stack frame
+ for the current function. On sparc64, we have to account for the stack
+ bias if present. */
+#define INCOMING_FRAME_SP_OFFSET SPARC_STACK_BIAS
+
#define DOESNT_NEED_UNWINDER (! TARGET_FLAT)
/* Addressing modes, and classification of registers for them. */
@@ -2457,12 +2448,12 @@ extern struct rtx_def *legitimize_pic_address ();
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)
/* If we are referencing a function make the SYMBOL_REF special.
- In the Medium/Anywhere code model, %g4 points to the data segment so we
- must not add it to function addresses. */
+ In the Embedded Medium/Anywhere code model, %g4 points to the data segment
+ so we must not add it to function addresses. */
#define ENCODE_SECTION_INFO(DECL) \
do { \
- if (TARGET_MEDANY && TREE_CODE (DECL) == FUNCTION_DECL) \
+ if (TARGET_CM_EMBMEDANY && TREE_CODE (DECL) == FUNCTION_DECL) \
SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1; \
} while (0)
@@ -2686,8 +2677,7 @@ extern struct rtx_def *legitimize_pic_address ();
return 8;
/* Compute the cost of an address. For the sparc, all valid addresses are
- the same cost.
- ??? Is this true for v9? */
+ the same cost. */
#define ADDRESS_COST(RTX) 1
@@ -2707,7 +2697,7 @@ extern struct rtx_def *legitimize_pic_address ();
#define RTX_COSTS(X,CODE,OUTER_CODE) \
case MULT: \
- return (TARGET_V8 || TARGET_SPARCLITE || TARGET_V9) \
+ return (TARGET_V8 || TARGET_SPARCLITE) \
? COSTS_N_INSNS (5) : COSTS_N_INSNS (25); \
case DIV: \
case UDIV: \
@@ -2737,6 +2727,12 @@ extern struct rtx_def *legitimize_pic_address ();
#define ASM_FILE_START(file)
+/* A C string constant describing how to begin a comment in the target
+ assembler language. The compiler assumes that the comment will end at
+ the end of the line. */
+
+#define ASM_COMMENT_START "!"
+
/* Output to assembler file text saying following lines
may contain character constants, extra white space, comments, etc. */
@@ -2843,34 +2839,51 @@ extern struct rtx_def *legitimize_pic_address ();
#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \
sprintf (LABEL, "*%s%d", PREFIX, NUM)
-/* This is how to output an assembler line defining a `double' constant. */
+/* This is how to output an assembler line defining a `float' constant.
+ We always have to use a .long pseudo-op to do this because the native
+ SVR4 ELF assembler is buggy and it generates incorrect values when we
+ try to use the .float pseudo-op instead. */
-#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \
- { \
- long t[2]; \
- REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \
- fprintf (FILE, "\t%s\t0x%lx\n\t%s\t0x%lx\n", \
- ASM_LONG, t[0], ASM_LONG, t[1]); \
- }
+#define ASM_OUTPUT_FLOAT(FILE,VALUE) \
+ { \
+ long t; \
+ char str[30]; \
+ REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \
+ REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \
+ fprintf (FILE, "\t%s\t0x%lx %s ~%s\n", ASM_LONG, t, \
+ ASM_COMMENT_START, str); \
+ } \
-/* This is how to output an assembler line defining a `float' constant. */
+/* This is how to output an assembler line defining a `double' constant.
+ We always have to use a .long pseudo-op to do this because the native
+ SVR4 ELF assembler is buggy and it generates incorrect values when we
+ try to use the .float pseudo-op instead. */
-#define ASM_OUTPUT_FLOAT(FILE,VALUE) \
- { \
- long t; \
- REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \
- fprintf (FILE, "\t%s\t0x%lx\n", ASM_LONG, t); \
- } \
+#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \
+ { \
+ long t[2]; \
+ char str[30]; \
+ REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \
+ REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \
+ fprintf (FILE, "\t%s\t0x%lx %s ~%s\n", ASM_LONG, t[0], \
+ ASM_COMMENT_START, str); \
+ fprintf (FILE, "\t%s\t0x%lx\n", ASM_LONG, t[1]); \
+ }
/* This is how to output an assembler line defining a `long double'
constant. */
-#define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \
- { \
- long t[4]; \
- REAL_VALUE_TO_TARGET_LONG_DOUBLE ((VALUE), t); \
- fprintf (FILE, "\t%s\t0x%lx\n\t%s\t0x%lx\n\t%s\t0x%lx\n\t%s\t0x%lx\n", \
- ASM_LONG, t[0], ASM_LONG, t[1], ASM_LONG, t[2], ASM_LONG, t[3]); \
+#define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \
+ { \
+ long t[4]; \
+ char str[30]; \
+ REAL_VALUE_TO_TARGET_LONG_DOUBLE ((VALUE), t); \
+ REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \
+ fprintf (FILE, "\t%s\t0x%lx %s ~%s\n", ASM_LONG, t[0], \
+ ASM_COMMENT_START, str); \
+ fprintf (FILE, "\t%s\t0x%lx\n", ASM_LONG, t[1]); \
+ fprintf (FILE, "\t%s\t0x%lx\n", ASM_LONG, t[2]); \
+ fprintf (FILE, "\t%s\t0x%lx\n", ASM_LONG, t[3]); \
}
/* This is how to output an assembler line defining an `int' constant. */
@@ -2909,7 +2922,7 @@ do { \
ASM_GENERATE_INTERNAL_LABEL (label, "L", VALUE); \
if (Pmode == SImode) \
fprintf (FILE, "\t.word\t"); \
- else if (TARGET_MEDLOW) \
+ else if (TARGET_CM_MEDLOW) \
fprintf (FILE, "\t.word\t0\n\t.word\t"); \
else \
fprintf (FILE, "\t.xword\t"); \
@@ -2926,7 +2939,7 @@ do { \
ASM_GENERATE_INTERNAL_LABEL (label, "L", VALUE); \
if (Pmode == SImode) \
fprintf (FILE, "\t.word\t"); \
- else if (TARGET_MEDLOW) \
+ else if (TARGET_CM_MEDLOW) \
fprintf (FILE, "\t.word\t0\n\t.word\t"); \
else \
fprintf (FILE, "\t.xword\t"); \
@@ -2942,6 +2955,12 @@ do { \
if ((LOG) != 0) \
fprintf (FILE, "\t.align %d\n", (1<<(LOG)))
+#define ASM_OUTPUT_ALIGN_CODE(FILE) \
+ ASM_OUTPUT_ALIGN (FILE, sparc_align_jumps)
+
+#define ASM_OUTPUT_LOOP_ALIGN(FILE) \
+ ASM_OUTPUT_ALIGN (FILE, sparc_align_loops)
+
#define ASM_OUTPUT_SKIP(FILE,SIZE) \
fprintf (FILE, "\t.skip %u\n", (SIZE))
@@ -3007,7 +3026,7 @@ do { \
(FILE, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (FUNCTION))); \
fprintf (FILE, ",0\n"); \
} \
- else if (TARGET_MEDANY || TARGET_FULLANY) \
+ else if (TARGET_CM_EMBMEDANY) \
{ \
fprintf (FILE, "\tsetx "); \
assemble_name \
@@ -3048,7 +3067,7 @@ do { \
#define TARGET_CR 015
#define PRINT_OPERAND_PUNCT_VALID_P(CHAR) \
- ((CHAR) == '#' || (CHAR) == '*' || (CHAR) == '^' || (CHAR) == '(')
+ ((CHAR) == '#' || (CHAR) == '*' || (CHAR) == '^' || (CHAR) == '(' || (CHAR) == '_')
/* 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.
@@ -3126,6 +3145,7 @@ do { \
/* Declare functions defined in sparc.c and used in templates. */
extern char *singlemove_string ();
+extern char *doublemove_string ();
extern char *output_move_double ();
extern char *output_move_quad ();
extern char *output_fp_move_double ();
@@ -3139,10 +3159,3 @@ extern char *output_return ();
/* Defined in flags.h, but insn-emit.c does not include flags.h. */
extern int flag_pic;
-
-/* Before the prologue, the return address is %o7 + 8. OK, sometimes it's
- +12, but always using +8 is close enough for frame unwind purposes.
- Actually, just using %o7 is close enough for unwinding, but %o7+8
- is something you can return to. */
-#define INCOMING_RETURN_ADDR_RTX \
- gen_rtx (PLUS, word_mode, gen_rtx (REG, word_mode, 15), GEN_INT (8))
diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md
index 9ac695f4577..6efa3320852 100644
--- a/gcc/config/sparc/sparc.md
+++ b/gcc/config/sparc/sparc.md
@@ -272,6 +272,43 @@
;; The multiply unit has a latency of 5.
(define_function_unit "tsc701_mul" 1 0
(and (eq_attr "type" "imul") (eq_attr "cpu" "tsc701")) 5 5)
+
+;; ----- The UltraSPARC-1 scheduling
+;; The Ultrasparc can issue 1 - 4 insns per cycle; here we assume
+;; four insns/cycle, and hence multiply all costs by four.
+
+;; Memory delivers its result in three cycles to IU, three cycles to FP
+(define_function_unit "memory" 1 0
+ (and (eq_attr "type" "load,fpload") (eq_attr "cpu" "ultrasparc")) 12 4)
+(define_function_unit "memory" 1 0
+ (and (eq_attr "type" "store,fpstore") (eq_attr "cpu" "ultrasparc")) 4 4)
+(define_function_unit "ieu" 1 0
+ (and (eq_attr "type" "ialu") (eq_attr "cpu" "ultrasparc")) 1 2)
+(define_function_unit "ieu" 1 0
+ (and (eq_attr "type" "shift") (eq_attr "cpu" "ultrasparc")) 1 4)
+(define_function_unit "ieu" 1 0
+ (and (eq_attr "type" "cmove") (eq_attr "cpu" "ultrasparc")) 8 4)
+
+;; Timings; throughput/latency
+;; ?? FADD 1/3 add/sub, format conv, compar, abs, neg
+;; ?? FMUL 1/3
+;; ?? FDIVs 1/12
+;; ?? FDIVd 1/22
+;; ?? FSQRTs 1/12
+;; ?? FSQRTd 1/22
+
+(define_function_unit "fp" 1 0
+ (and (eq_attr "type" "fp") (eq_attr "cpu" "ultrasparc")) 12 2)
+(define_function_unit "fp" 1 0
+ (and (eq_attr "type" "fpcmp") (eq_attr "cpu" "ultrasparc")) 8 2)
+(define_function_unit "fp" 1 0
+ (and (eq_attr "type" "fpmul") (eq_attr "cpu" "ultrasparc")) 12 2)
+(define_function_unit "fp" 1 0
+ (and (eq_attr "type" "fpdivs") (eq_attr "cpu" "ultrasparc")) 48 2)
+(define_function_unit "fp" 1 0
+ (and (eq_attr "type" "fpdivd") (eq_attr "cpu" "ultrasparc")) 88 2)
+(define_function_unit "fp" 1 0
+ (and (eq_attr "type" "fpsqrt") (eq_attr "cpu" "ultrasparc")) 48 2)
;; Compare instructions.
;; This controls RTL generation and register allocation.
@@ -1480,30 +1517,30 @@
[(set_attr "type" "move")
(set_attr "length" "1")])
-(define_insn "*sethi_si"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (high:SI (match_operand 1 "" "")))]
- "check_pic (1)"
- "sethi %%hi(%a1),%0"
- [(set_attr "type" "move")
- (set_attr "length" "1")])
+(define_insn "pic_lo_sum_di"
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (lo_sum:SI (match_operand:DI 1 "register_operand" "r")
+ (unspec:SI [(match_operand:DI 2 "immediate_operand" "in")] 0)))]
+ "TARGET_ARCH64 && flag_pic"
+ "add %1,%%lo(%a2),%0"
+ [(set_attr "length" "1")])
-(define_insn "*sethi_hi"
- [(set (match_operand:HI 0 "register_operand" "=r")
- (high:HI (match_operand 1 "" "")))]
- "check_pic (1)"
+(define_insn "pic_sethi_di"
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (high:SI (unspec:SI [(match_operand 1 "" "")] 0)))]
+ "TARGET_ARCH64 && flag_pic && check_pic (1)"
"sethi %%hi(%a1),%0"
[(set_attr "type" "move")
(set_attr "length" "1")])
-(define_insn "get_pc_sp32"
+(define_insn "get_pc_via_call"
[(set (pc) (label_ref (match_operand 0 "" "")))
- (set (reg:SI 15) (label_ref (match_dup 0)))]
- "! TARGET_PTR64"
+ (set (reg:SI 15) (label_ref (match_operand 1 "" "")))]
+ ""
"call %l0%#"
[(set_attr "type" "uncond_branch")])
-(define_insn "get_pc_sp64"
+(define_insn "get_pc_via_rdpc"
[(set (match_operand:DI 0 "register_operand" "=r") (pc))]
"TARGET_PTR64"
"rd %%pc,%0"
@@ -1564,6 +1601,24 @@
(const_int 2)
(const_int 5)))])
+(define_insn "*sethi_hi"
+ [(set (match_operand:HI 0 "register_operand" "=r")
+ (high:HI (match_operand 1 "" "")))]
+ "check_pic (1)"
+ "sethi %%hi(%a1),%0"
+ [(set_attr "type" "move")
+ (set_attr "length" "1")])
+
+;; This must appear after the PIC sethi so that the PIC unspec will not
+;; be matched as part of the operand.
+(define_insn "*sethi_si"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (high:SI (match_operand 1 "" "")))]
+ "check_pic (1)"
+ "sethi %%hi(%a1),%0"
+ [(set_attr "type" "move")
+ (set_attr "length" "1")])
+
(define_insn "*lo_sum_di_sp32"
[(set (match_operand:DI 0 "register_operand" "=r")
(lo_sum:DI (match_operand:DI 1 "register_operand" "0")
@@ -1574,7 +1629,12 @@
/* Don't output a 64 bit constant, since we can't trust the assembler to
handle it correctly. */
if (GET_CODE (operands[2]) == CONST_DOUBLE)
- operands[2] = gen_rtx (CONST_INT, VOIDmode, CONST_DOUBLE_LOW (operands[2]));
+ operands[2] = GEN_INT (CONST_DOUBLE_LOW (operands[2]));
+ else if (GET_CODE (operands[2]) == CONST_INT
+ && HOST_BITS_PER_WIDE_INT > 32
+ && INTVAL (operands[2]) > 0xffffffff)
+ operands[2] = GEN_INT (INTVAL (operands[2]) & 0xffffffff);
+
return \"or %L1,%%lo(%a2),%L0\";
}"
;; Need to set length for this arith insn because operand2
@@ -1593,7 +1653,12 @@
/* Don't output a 64 bit constant, since we can't trust the assembler to
handle it correctly. */
if (GET_CODE (operands[2]) == CONST_DOUBLE)
- operands[2] = gen_rtx (CONST_INT, VOIDmode, CONST_DOUBLE_LOW (operands[2]));
+ operands[2] = GEN_INT (CONST_DOUBLE_LOW (operands[2]));
+ else if (GET_CODE (operands[2]) == CONST_INT
+ && HOST_BITS_PER_WIDE_INT > 32
+ && INTVAL (operands[2]) > 0xffffffff)
+ operands[2] = GEN_INT (INTVAL (operands[2]) & 0xffffffff);
+
/* Note that we use add here. This is important because Medium/Anywhere
code model support depends on it. */
return \"add %1,%%lo(%a2),%0\";
@@ -1625,11 +1690,11 @@
else if (GET_CODE (op1) == CONST_DOUBLE)
{
operands[0] = operand_subword (op0, 1, 0, DImode);
- operands[1] = gen_rtx (CONST_INT, VOIDmode, CONST_DOUBLE_LOW (op1));
+ operands[1] = GEN_INT (CONST_DOUBLE_LOW (op1));
output_asm_insn (\"sethi %%hi(%a1),%0\", operands);
operands[0] = operand_subword (op0, 0, 0, DImode);
- operands[1] = gen_rtx (CONST_INT, VOIDmode, CONST_DOUBLE_HIGH (op1));
+ operands[1] = GEN_INT (CONST_DOUBLE_HIGH (op1));
return singlemove_string (operands);
}
else
@@ -1663,6 +1728,7 @@
"TARGET_ARCH64 && check_pic (1)"
"*
{
+#if HOST_BITS_PER_WIDE_INT == 32
rtx high, low;
split_double (operands[1], &high, &low);
@@ -1682,6 +1748,26 @@
if (low != const0_rtx)
output_asm_insn (\"sethi %%hi(%a1),%%g1; or %0,%%g1,%0\", operands);
}
+#else
+ rtx op = operands[1];
+
+ if (! SPARC_SETHI_P (INTVAL(op)))
+ {
+ operands[1] = GEN_INT (INTVAL (op) >> 32);
+ output_asm_insn (singlemove_string (operands), operands);
+
+ output_asm_insn (\"sllx %0,32,%0\", operands);
+ if (INTVAL (op) & 0xffffffff)
+ {
+ operands[1] = GEN_INT (INTVAL (op) & 0xffffffff);
+ output_asm_insn (\"sethi %%hi(%a1),%%g1; or %0,%%g1,%0\", operands);
+ }
+ }
+ else
+ {
+ output_asm_insn (\"sethi %%hi(%a1),%0\", operands);
+ }
+#endif
return \"\";
}"
@@ -1691,21 +1777,27 @@
;; Most of the required support for the various code models is here.
;; We can do this because sparcs need the high insn to load the address. We
;; just need to get high to do the right thing for each code model. Then each
-;; uses the same "%X+%lo(...)" in the load/store insn.
+;; uses the same "%X+%lo(...)" in the load/store insn, though in the case of
+;; the medium/middle code model "%lo" is written "%l44".
-;; When TARGET_MEDLOW, assume that the upper 32 bits of symbol addresses are
+;; When TARGET_CM_MEDLOW, assume that the upper 32 bits of symbol addresses are
;; always 0.
-;; When TARGET_MEDANY, the text and data segments have a maximum size of 32
-;; bits and may be located anywhere. MEDANY_BASE_REG contains the start
+;; When TARGET_CM_MEDMID, the executable must be in the low 16 TB of memory.
+;; This corresponds to the low 44 bits, and the %[hml]44 relocs are used.
+;; ??? Not implemented yet.
+;; When TARGET_CM_EMBMEDANY, the text and data segments have a maximum size of
+;; 31 bits and may be located anywhere. EMBMEDANY_BASE_REG contains the start
;; address of the data segment, currently %g4.
-;; When TARGET_FULLANY, symbolic addresses are 64 bits.
+;; When TARGET_CM_MEDANY, the text and data segments have a maximum size of 31
+;; bits and may be located anywhere. The maximum offset from any instruction
+;; to the label _GLOBAL_OFFSET_TABLE_ is 31 bits.
(define_insn "*sethi_di_medlow"
[(set (match_operand:DI 0 "register_operand" "=r")
(high:DI (match_operand 1 "" "")))
;; The clobber is here because emit_move_sequence assumes the worst case.
(clobber (reg:DI 1))]
- "TARGET_MEDLOW && check_pic (1)"
+ "TARGET_CM_MEDLOW && check_pic (1)"
"sethi %%hi(%a1),%0"
[(set_attr "type" "move")
(set_attr "length" "1")])
@@ -1713,7 +1805,7 @@
(define_insn "*sethi_di_medium_pic"
[(set (match_operand:DI 0 "register_operand" "=r")
(high:DI (match_operand 1 "sp64_medium_pic_operand" "")))]
- "(TARGET_MEDLOW || TARGET_MEDANY) && check_pic (1)"
+ "(TARGET_CM_MEDLOW || TARGET_CM_EMBMEDANY) && check_pic (1)"
"sethi %%hi(%a1),%0"
[(set_attr "type" "move")
(set_attr "length" "1")])
@@ -1721,31 +1813,22 @@
;; WARNING: %0 gets %hi(%1)+%g4.
;; You cannot OR in %lo(%1), it must be added in.
-(define_insn "*sethi_di_medany_data"
+(define_insn "*sethi_di_embmedany_data"
[(set (match_operand:DI 0 "register_operand" "=r")
(high:DI (match_operand 1 "data_segment_operand" "")))
;; The clobber is here because emit_move_sequence assumes the worst case.
(clobber (reg:DI 1))]
- "TARGET_MEDANY && check_pic (1)"
- "sethi %%hi(%a1),%0; add %0,%%g4,%0"
+ "TARGET_CM_EMBMEDANY && check_pic (1)"
+ "sethi %%hi(%a1),%0; add %0,%_,%0"
[(set_attr "type" "move")
(set_attr "length" "2")])
-(define_insn "*sethi_di_medany_text"
+(define_insn "*sethi_di_embmedany_text"
[(set (match_operand:DI 0 "register_operand" "=r")
(high:DI (match_operand 1 "text_segment_operand" "")))
;; The clobber is here because emit_move_sequence assumes the worst case.
(clobber (reg:DI 1))]
- "TARGET_MEDANY && check_pic (1)"
- "sethi %%uhi(%a1),%%g1; or %%g1,%%ulo(%a1),%%g1; sllx %%g1,32,%%g1; sethi %%hi(%a1),%0; or %0,%%g1,%0"
- [(set_attr "type" "move")
- (set_attr "length" "5")])
-
-(define_insn "*sethi_di_fullany"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (high:DI (match_operand 1 "" "")))
- (clobber (reg:DI 1))]
- "TARGET_FULLANY && check_pic (1)"
+ "TARGET_CM_EMBMEDANY && check_pic (1)"
"sethi %%uhi(%a1),%%g1; or %%g1,%%ulo(%a1),%%g1; sllx %%g1,32,%%g1; sethi %%hi(%a1),%0; or %0,%%g1,%0"
[(set_attr "type" "move")
(set_attr "length" "5")])
@@ -1993,8 +2076,7 @@
return \"sethi %%hi(%a1),%0\";
else
{
- operands[1] = gen_rtx (CONST_INT, VOIDmode,
- ~ INTVAL (operands[1]));
+ operands[1] = GEN_INT (~INTVAL (operands[1]));
output_asm_insn (\"sethi %%hi(%a1),%0\", operands);
/* The low 10 bits are already zero, but invert the rest.
Assemblers don't accept 0x1c00, so use -0x400 instead. */
@@ -2075,7 +2157,10 @@
(define_insn "*movsf_const_insn"
[(set (match_operand:SF 0 "general_operand" "=?r,f,m")
(match_operand:SF 1 "" "?F,m,G"))]
- "TARGET_FPU && GET_CODE (operands[1]) == CONST_DOUBLE"
+ "TARGET_FPU
+ && GET_CODE (operands[1]) == CONST_DOUBLE
+ && (GET_CODE (operands[0]) == REG
+ || fp_zero_operand (operands[1]))"
"*
{
switch (which_alternative)
@@ -2149,7 +2234,10 @@
(define_insn "*movdf_const_insn"
[(set (match_operand:DF 0 "general_operand" "=?r,e,o")
(match_operand:DF 1 "" "?F,m,G"))]
- "TARGET_FPU && GET_CODE (operands[1]) == CONST_DOUBLE"
+ "TARGET_FPU
+ && GET_CODE (operands[1]) == CONST_DOUBLE
+ && (GET_CODE (operands[0]) == REG
+ || fp_zero_operand (operands[1]))"
"*
{
switch (which_alternative)
@@ -2267,7 +2355,10 @@
(define_insn "*movtf_const_insn"
[(set (match_operand:TF 0 "general_operand" "=?r,e,o")
(match_operand:TF 1 "" "?F,m,G"))]
- "TARGET_FPU && GET_CODE (operands[1]) == CONST_DOUBLE"
+ "TARGET_FPU
+ && GET_CODE (operands[1]) == CONST_DOUBLE
+ && (GET_CODE (operands[0]) == REG
+ || fp_zero_operand (operands[1]))"
"*
{
switch (which_alternative)
@@ -2661,7 +2752,7 @@
(const_int 0)])
(match_operand:TF 3 "register_operand" "e,0")
(match_operand:TF 4 "register_operand" "0,e")))]
- "TARGET_V9 && TARGET_FPU"
+ "TARGET_V9 && TARGET_FPU && TARGET_HARD_QUAD"
"@
fmovq%C1 %x2,%3,%0
fmovq%c1 %x2,%4,%0"
@@ -2772,7 +2863,7 @@
"
{
rtx temp = gen_reg_rtx (SImode);
- rtx shift_16 = gen_rtx (CONST_INT, VOIDmode, 16);
+ rtx shift_16 = GEN_INT (16);
int op1_subword = 0;
if (GET_CODE (operand1) == SUBREG)
@@ -2850,7 +2941,7 @@
"
{
rtx temp = gen_reg_rtx (DImode);
- rtx shift_48 = gen_rtx (CONST_INT, VOIDmode, 48);
+ rtx shift_48 = GEN_INT (48);
int op1_subword = 0;
if (GET_CODE (operand1) == SUBREG)
@@ -2944,7 +3035,7 @@
"
{
rtx temp = gen_reg_rtx (SImode);
- rtx shift_16 = gen_rtx (CONST_INT, VOIDmode, 16);
+ rtx shift_16 = GEN_INT (16);
int op1_subword = 0;
if (GET_CODE (operand1) == SUBREG)
@@ -2974,7 +3065,7 @@
"
{
rtx temp = gen_reg_rtx (SImode);
- rtx shift_24 = gen_rtx (CONST_INT, VOIDmode, 24);
+ rtx shift_24 = GEN_INT (24);
int op1_subword = 0;
int op0_subword = 0;
@@ -3011,7 +3102,7 @@
"
{
rtx temp = gen_reg_rtx (SImode);
- rtx shift_24 = gen_rtx (CONST_INT, VOIDmode, 24);
+ rtx shift_24 = GEN_INT (24);
int op1_subword = 0;
if (GET_CODE (operand1) == SUBREG)
@@ -3041,7 +3132,7 @@
"
{
rtx temp = gen_reg_rtx (DImode);
- rtx shift_56 = gen_rtx (CONST_INT, VOIDmode, 56);
+ rtx shift_56 = GEN_INT (56);
int op1_subword = 0;
if (GET_CODE (operand1) == SUBREG)
@@ -3071,7 +3162,7 @@
"
{
rtx temp = gen_reg_rtx (DImode);
- rtx shift_48 = gen_rtx (CONST_INT, VOIDmode, 48);
+ rtx shift_48 = GEN_INT (48);
int op1_subword = 0;
if (GET_CODE (operand1) == SUBREG)
@@ -3127,7 +3218,7 @@
int pos = 32 - INTVAL (operands[2]) - len;
unsigned mask = ((1 << len) - 1) << pos;
- operands[1] = gen_rtx (CONST_INT, VOIDmode, mask);
+ operands[1] = GEN_INT (mask);
return \"andcc %0,%1,%%g0\";
}")
@@ -3143,9 +3234,9 @@
{
int len = INTVAL (operands[1]);
int pos = 64 - INTVAL (operands[2]) - len;
- unsigned mask = ((1 << len) - 1) << pos;
+ unsigned HOST_WIDE_INT mask = (((unsigned HOST_WIDE_INT) 1 << len) - 1) << pos;
- operands[1] = gen_rtx (CONST_INT, VOIDmode, mask);
+ operands[1] = GEN_INT (mask);
return \"andcc %0,%1,%%g0\";
}")
@@ -4063,7 +4154,7 @@
(set (match_dup 0) (and:SI (not:SI (match_dup 3)) (match_dup 1)))]
"
{
- operands[4] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2]));
+ operands[4] = GEN_INT (~INTVAL (operands[2]));
}")
(define_insn "*and_not_di_sp32"
@@ -4149,7 +4240,7 @@
(set (match_dup 0) (ior:SI (not:SI (match_dup 3)) (match_dup 1)))]
"
{
- operands[4] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2]));
+ operands[4] = GEN_INT (~INTVAL (operands[2]));
}")
(define_insn "*or_not_di_sp32"
@@ -4235,7 +4326,7 @@
(set (match_dup 0) (not:SI (xor:SI (match_dup 3) (match_dup 1))))]
"
{
- operands[4] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2]));
+ operands[4] = GEN_INT (~INTVAL (operands[2]));
}")
(define_split
@@ -4250,7 +4341,7 @@
(set (match_dup 0) (xor:SI (match_dup 3) (match_dup 1)))]
"
{
- operands[4] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2]));
+ operands[4] = GEN_INT (~INTVAL (operands[2]));
}")
;; xnor patterns. Note that (a ^ ~b) == (~a ^ b) == ~(a ^ b).
@@ -4818,7 +4909,7 @@
"*
{
if (GET_CODE (operands[2]) == CONST_INT
- && (unsigned) INTVAL (operands[2]) > 31)
+ && (unsigned HOST_WIDE_INT) INTVAL (operands[2]) > 31)
operands[2] = GEN_INT (INTVAL (operands[2]) & 0x1f);
return \"sll %1,%2,%0\";
@@ -4833,7 +4924,7 @@
"*
{
if (GET_CODE (operands[2]) == CONST_INT
- && (unsigned) INTVAL (operands[2]) > 63)
+ && (unsigned HOST_WIDE_INT) INTVAL (operands[2]) > 31)
operands[2] = GEN_INT (INTVAL (operands[2]) & 0x3f);
return \"sllx %1,%2,%0\";
@@ -4866,7 +4957,7 @@
"*
{
if (GET_CODE (operands[2]) == CONST_INT
- && (unsigned) INTVAL (operands[2]) > 31)
+ && (unsigned HOST_WIDE_INT) INTVAL (operands[2]) > 31)
operands[2] = GEN_INT (INTVAL (operands[2]) & 0x1f);
return \"sra %1,%2,%0\";
@@ -4881,7 +4972,7 @@
"*
{
if (GET_CODE (operands[2]) == CONST_INT
- && (unsigned) INTVAL (operands[2]) > 63)
+ && (unsigned HOST_WIDE_INT) INTVAL (operands[2]) > 63)
operands[2] = GEN_INT (INTVAL (operands[2]) & 0x3f);
return \"srax %1,%2,%0\";
@@ -4895,7 +4986,7 @@
"*
{
if (GET_CODE (operands[2]) == CONST_INT
- && (unsigned) INTVAL (operands[2]) > 31)
+ && (unsigned HOST_WIDE_INT) INTVAL (operands[2]) > 31)
operands[2] = GEN_INT (INTVAL (operands[2]) & 0x1f);
return \"srl %1,%2,%0\";
@@ -4910,7 +5001,7 @@
"*
{
if (GET_CODE (operands[2]) == CONST_INT
- && (unsigned) INTVAL (operands[2]) > 63)
+ && (unsigned HOST_WIDE_INT) INTVAL (operands[2]) > 63)
operands[2] = GEN_INT (INTVAL (operands[2]) & 0x3f);
return \"srlx %1,%2,%0\";
@@ -4923,7 +5014,21 @@
(define_insn "jump"
[(set (pc) (label_ref (match_operand 0 "" "")))]
""
- "b%* %l0%("
+ "*
+{
+ /* Some implementations are reported to have problems with
+ foo: b,a foo
+ i.e. an empty loop with the annul bit set. The workaround is to use
+ foo: b foo; nop
+ instead. */
+
+ if (flag_delayed_branch
+ && (insn_addresses[INSN_UID (operands[0])]
+ == insn_addresses[INSN_UID (insn)]))
+ return \"b %l0%#\";
+ else
+ return \"b%* %l0%(\";
+}"
[(set_attr "type" "uncond_branch")])
(define_expand "tablejump"
@@ -5038,9 +5143,9 @@
means 6 on the sparc. */
#if 0
if (operands[2])
- nregs_rtx = gen_rtx (CONST_INT, VOIDmode, REGNO (operands[2]) - 8);
+ nregs_rtx = GEN_INT (REGNO (operands[2]) - 8);
else
- nregs_rtx = gen_rtx (CONST_INT, VOIDmode, 6);
+ nregs_rtx = GEN_INT (6);
#else
nregs_rtx = const0_rtx;
#endif
@@ -6045,3 +6150,12 @@
(set (reg:CC 100) (compare (match_dup 0) (const_int 0)))]
""
"subxcc %r1,0,%0")
+
+;; After a nonlocal goto, we need to restore the PIC register, but only
+;; if we need it. So do nothing much here, but we'll check for this in
+;; finalize_pic.
+
+(define_insn "nonlocal_goto_receiver"
+ [(unspec_volatile [(const_int 0)] 4)]
+ "flag_pic"
+ "")
diff --git a/gcc/config/sparc/splet.h b/gcc/config/sparc/splet.h
index 9c2eface23d..23c6414417a 100644
--- a/gcc/config/sparc/splet.h
+++ b/gcc/config/sparc/splet.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler, for SPARClet.
- Copyright (C) 1996 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Contributed by Doug Evans (dje@cygnus.com).
This file is part of GNU CC.
@@ -36,12 +36,6 @@ Boston, MA 02111-1307, USA. */
{"broken-saverestore", MASK_BROKEN_SAVERESTORE}, \
{"no-broken-saverestore", -MASK_BROKEN_SAVERESTORE},
-#undef CPP_SPEC
-#define CPP_SPEC "\
-%(cpp_cpu) \
-%{mlittle-endian:-D__LITTLE_ENDIAN__} \
-"
-
#undef ASM_SPEC
#define ASM_SPEC "%{mlittle-endian:-EL} %(asm_cpu)"
diff --git a/gcc/config/sparc/sun4gas.h b/gcc/config/sparc/sun4gas.h
new file mode 100644
index 00000000000..3cea9560b4f
--- /dev/null
+++ b/gcc/config/sparc/sun4gas.h
@@ -0,0 +1,27 @@
+/* Definitions of target machine for GNU compiler, for SunOS 4.x with gas
+ Copyright (C) 1997 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.
+
+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. */
+
+/* gas supports unaligned data. */
+#define UNALIGNED_DOUBLE_INT_ASM_OP ".uaxword"
+#define UNALIGNED_INT_ASM_OP ".uaword"
+#define UNALIGNED_SHORT_ASM_OP ".uahalf"
+
+/* defaults.h will define DWARF2_UNWIND_INFO for us. */
+#undef DWARF2_UNWIND_INFO
diff --git a/gcc/config/sparc/sun4o3.h b/gcc/config/sparc/sun4o3.h
index 5fcb72f4a63..68ddc632794 100644
--- a/gcc/config/sparc/sun4o3.h
+++ b/gcc/config/sparc/sun4o3.h
@@ -5,6 +5,6 @@
fprintf (FILE, "\tsethi %%hi(LP%d),%%o0\n\tcall .mcount\n\tor %%lo(LP%d),%%o0,%%o0\n", \
(LABELNO), (LABELNO))
-/* LINK_SPEC is needed only for Sunos 4. */
+/* LINK_SPEC is needed only for SunOS 4. */
#undef LINK_SPEC
diff --git a/gcc/config/sparc/sunos4.h b/gcc/config/sparc/sunos4.h
index 1b58a17d282..070f41aa3b5 100644
--- a/gcc/config/sparc/sunos4.h
+++ b/gcc/config/sparc/sunos4.h
@@ -25,3 +25,6 @@ Boston, MA 02111-1307, USA. */
#define DBX_USE_BINCL
#include "sparc/sparc.h"
+
+/* The Sun as doesn't like unaligned data. */
+#define DWARF2_UNWIND_INFO 0
diff --git a/gcc/config/sparc/sysv4.h b/gcc/config/sparc/sysv4.h
index 38ddd4815ca..3a1a82d9fe9 100644
--- a/gcc/config/sparc/sysv4.h
+++ b/gcc/config/sparc/sysv4.h
@@ -1,7 +1,6 @@
/* Target definitions for GNU compiler for Sparc running System V.4
- Copyright (C) 1991, 1992, 1995, 1996 Free Software Foundation, Inc.
-
- Written by Ron Guilmette (rfg@netcom.com).
+ Copyright (C) 1991, 92, 95, 96, 97, 1998 Free Software Foundation, Inc.
+ Contributed by Ron Guilmette (rfg@monkeys.com).
This file is part of GNU CC.
@@ -52,9 +51,7 @@ Boston, MA 02111-1307, USA. */
the Sparc running svr4. __svr4__ is our extension. */
#define CPP_PREDEFINES \
- "-Dsparc -Dunix -D__svr4__ \
- -Asystem(unix) -Asystem(svr4) -Acpu(sparc) -Amachine(sparc) \
- -D__GCC_NEW_VARARGS__"
+"-Dsparc -Dunix -D__svr4__ -Asystem(unix) -Asystem(svr4)"
/* The native assembler can't compute differences between symbols in different
sections when generating pic code, so we must put jump tables in the
@@ -77,11 +74,6 @@ Boston, MA 02111-1307, USA. */
const_section (); \
}
-/* This is the string used to begin an assembly language comment for the
- Sparc/svr4 assembler. */
-
-#define ASM_COMMENT_START "!"
-
/* Define the names of various pseudo-op used by the Sparc/svr4 assembler.
Note that many of these are different from the typical pseudo-ops used
by most svr4 assemblers. That is probably due to a (misguided?) attempt
@@ -91,6 +83,7 @@ Boston, MA 02111-1307, USA. */
#define STRING_ASM_OP ".asciz"
#define COMMON_ASM_OP ".common"
#define SKIP_ASM_OP ".skip"
+#define UNALIGNED_DOUBLE_INT_ASM_OP ".uaxword"
#define UNALIGNED_INT_ASM_OP ".uaword"
#define UNALIGNED_SHORT_ASM_OP ".uahalf"
#define PUSHSECTION_ASM_OP ".pushsection"
@@ -142,10 +135,7 @@ do { ASM_OUTPUT_ALIGN ((FILE), Pmode == SImode ? 2 : 3); \
f0-f31 32-63 40-71
*/
-#define DBX_REGISTER_NUMBER(REGNO) \
- (((REGNO) < 32) ? (REGNO) \
- : ((REGNO) < 63) ? ((REGNO) + 8) \
- : (abort (), 0))
+#define DBX_REGISTER_NUMBER(REGNO) ((REGNO) < 32 ? (REGNO) : (REGNO) + 8)
/* A set of symbol definitions for assembly pseudo-ops which will
get us switched to various sections of interest. These are used
@@ -179,6 +169,8 @@ do { ASM_OUTPUT_ALIGN ((FILE), Pmode == SImode ? 2 : 3); \
#define CTORS_SECTION_ASM_OP ".section\t\".ctors\",#alloc,#write"
#undef DTORS_SECTION_ASM_OP
#define DTORS_SECTION_ASM_OP ".section\t\".dtors\",#alloc,#write"
+#undef EH_FRAME_SECTION_ASM_OP
+#define EH_FRAME_SECTION_ASM_OP ".section\t\".eh_frame\",#alloc,#write"
/* A C statement to output something to the assembler file to switch to section
NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or
@@ -196,44 +188,6 @@ do { \
else \
fprintf (FILE, ".section\t\"%s\",#alloc,#write\n", (NAME)); \
} while (0)
-
-/* This is how to output assembly code to define a `float' constant.
- We always have to use a .long pseudo-op to do this because the native
- SVR4 ELF assembler is buggy and it generates incorrect values when we
- try to use the .float pseudo-op instead. */
-
-#undef ASM_OUTPUT_FLOAT
-#define ASM_OUTPUT_FLOAT(FILE,VALUE) \
-do { long value; \
- REAL_VALUE_TO_TARGET_SINGLE ((VALUE), value); \
- fprintf((FILE), "\t%s\t0x%x\n", ASM_LONG, value); \
- } while (0)
-
-/* This is how to output assembly code to define a `double' constant.
- We always have to use a pair of .long pseudo-ops to do this because
- the native SVR4 ELF assembler is buggy and it generates incorrect
- values when we try to use the the .double pseudo-op instead. */
-
-#undef ASM_OUTPUT_DOUBLE
-#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \
-do { long value[2]; \
- REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), value); \
- fprintf((FILE), "\t%s\t0x%x\n", ASM_LONG, value[0]); \
- fprintf((FILE), "\t%s\t0x%x\n", ASM_LONG, value[1]); \
- } while (0)
-
-/* This is how to output an assembler line defining a `long double'
- constant. */
-
-#undef ASM_OUTPUT_LONG_DOUBLE
-#define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \
-do { long value[4]; \
- REAL_VALUE_TO_TARGET_LONG_DOUBLE ((VALUE), value); \
- fprintf((FILE), "\t%s\t0x%x\n", ASM_LONG, value[0]); \
- fprintf((FILE), "\t%s\t0x%x\n", ASM_LONG, value[1]); \
- fprintf((FILE), "\t%s\t0x%x\n", ASM_LONG, value[2]); \
- fprintf((FILE), "\t%s\t0x%x\n", ASM_LONG, value[3]); \
- } while (0)
/* Output assembler code to FILE to initialize this source file's
basic block profiling info, if that has not already been done. */
@@ -241,12 +195,8 @@ do { long value[4]; \
#undef FUNCTION_BLOCK_PROFILER
#define FUNCTION_BLOCK_PROFILER(FILE, LABELNO) \
do { \
- if (TARGET_MEDANY) \
- fprintf (FILE, "\tsethi %%hi(.LLPBX0),%%o0\n\tor %%0,%%lo(.LLPBX0),%%o0\n\tld [%s+%%o0],%%o1\n\ttst %%o1\n\tbne .LLPY%d\n\tadd %%o0,%s,%%o0\n\tcall __bb_init_func\n\tnop\nLPY%d:\n", \
- MEDANY_BASE_REG, (LABELNO), MEDANY_BASE_REG, (LABELNO)); \
- else \
- fprintf (FILE, "\tsethi %%hi(.LLPBX0),%%o0\n\tld [%%lo(.LLPBX0)+%%o0],%%o1\n\ttst %%o1\n\tbne LPY%d\n\tadd %%o0,%%lo(.LLPBX0),%%o0\n\tcall __bb_init_func\n\tnop\nLPY%d:\n", \
- (LABELNO), (LABELNO)); \
+ fprintf (FILE, "\tsethi %%hi(.LLPBX0),%%o0\n\tld [%%lo(.LLPBX0)+%%o0],%%o1\n\ttst %%o1\n\tbne LPY%d\n\tadd %%o0,%%lo(.LLPBX0),%%o0\n\tcall __bb_init_func\n\tnop\nLPY%d:\n", \
+ (LABELNO), (LABELNO)); \
} while (0)
/* Output assembler code to FILE to increment the entry-count for
@@ -256,13 +206,9 @@ do { long value[4]; \
#define BLOCK_PROFILER(FILE, BLOCKNO) \
{ \
int blockn = (BLOCKNO); \
- if (TARGET_MEDANY) \
- fprintf (FILE, "\tsethi %%hi(.LLPBX2+%d),%%g1\n\tor %%g1,%%lo(.LLPBX2+%d),%%g1\n\tld [%%g1+%s],%%g2\n\tadd %%g2,1,%%g2\n\tst %%g2,[%%g1+%s]\n", \
- 4 * blockn, 4 * blockn, MEDANY_BASE_REG, MEDANY_BASE_REG); \
- else \
- fprintf (FILE, "\tsethi %%hi(.LLPBX2+%d),%%g1\n\tld [%%lo(.LLPBX2+%d)+%%g1],%%g2\n\
+ fprintf (FILE, "\tsethi %%hi(.LLPBX2+%d),%%g1\n\tld [%%lo(.LLPBX2+%d)+%%g1],%%g2\n\
\tadd %%g2,1,%%g2\n\tst %%g2,[%%lo(.LLPBX2+%d)+%%g1]\n", \
- 4 * blockn, 4 * blockn, 4 * blockn); \
+ 4 * blockn, 4 * blockn, 4 * blockn); \
}
/* A C statement (sans semicolon) to output to the stdio stream
diff --git a/gcc/config/sparc/t-elf b/gcc/config/sparc/t-elf
new file mode 100644
index 00000000000..da9df38368e
--- /dev/null
+++ b/gcc/config/sparc/t-elf
@@ -0,0 +1,39 @@
+# we need to supply our own assembly versions of libgcc1.c files,
+# since the user may not have native 'cc' available
+
+CROSS_LIBGCC1 = libgcc1-asm.a
+LIB1ASMSRC = sparc/lb1spc.asm
+LIB1ASMFUNCS = _mulsi3 _divsi3 _modsi3
+
+# crt0 is built elsewhere
+LIBGCC1_TEST =
+
+# These are really part of libgcc1, but this will cause them to be
+# built correctly, so...
+
+LIB2FUNCS_EXTRA = fp-bit.c dp-bit.c
+
+dp-bit.c: $(srcdir)/config/fp-bit.c
+ cat $(srcdir)/config/fp-bit.c > dp-bit.c
+
+fp-bit.c: $(srcdir)/config/fp-bit.c
+ echo '#define FLOAT' > fp-bit.c
+ cat $(srcdir)/config/fp-bit.c >> fp-bit.c
+
+# MULTILIB_OPTIONS should have msparclite too, but we'd have to make
+# gas build...
+#MULTILIB_OPTIONS = msoft-float mcpu=v8
+MULTILIB_OPTIONS = msoft-float
+#MULTILIB_DIRNAMES = soft v8
+MULTILIB_DIRNAMES = soft
+#MULTILIB_MATCHES = msoft-float=mno-fpu mcpu?v8=mv8
+MULTILIB_MATCHES = msoft-float=mno-fpu
+
+LIBGCC = stmp-multilib
+INSTALL_LIBGCC = install-multilib
+
+# Assemble startup files.
+crti.o: $(srcdir)/config/sparc/sol2-ci.asm $(GCC_PASSES)
+ $(GCC_FOR_TARGET) -c -o crti.o -x assembler $(srcdir)/config/sparc/sol2-ci.asm
+crtn.o: $(srcdir)/config/sparc/sol2-cn.asm $(GCC_PASSES)
+ $(GCC_FOR_TARGET) -c -o crtn.o -x assembler $(srcdir)/config/sparc/sol2-cn.asm
diff --git a/gcc/config/sparc/t-linux b/gcc/config/sparc/t-linux
index 5a4690eab1f..6e37a023005 100644
--- a/gcc/config/sparc/t-linux
+++ b/gcc/config/sparc/t-linux
@@ -1,6 +1,6 @@
LIBGCC1 =
CROSS_LIBGCC1 =
-# We don't want to build .umul, etc., because Linux provides them,
+# We don't want to build .umul, etc., because gnu/Linux provides them,
# which means that libgcc1-test will fail for cross-compiler.
LIBGCC1_TEST =
diff --git a/gcc/config/sparc/t-sp64 b/gcc/config/sparc/t-sp64
index e0de5edd98a..99acd5d5423 100644
--- a/gcc/config/sparc/t-sp64
+++ b/gcc/config/sparc/t-sp64
@@ -1,3 +1,2 @@
LIBGCC1 =
CROSS_LIBGCC1 =
-LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) -g1
diff --git a/gcc/config/sparc/t-sparcbare b/gcc/config/sparc/t-sparcbare
index 3c7c740b138..8bd978b068d 100644
--- a/gcc/config/sparc/t-sparcbare
+++ b/gcc/config/sparc/t-sparcbare
@@ -1,4 +1,4 @@
-# configuration file for a bare sparc cpu, aout format files
+# configuration file for a bare sparc cpu
CROSS_LIBGCC1 = libgcc1-asm.a
LIB1ASMSRC = sparc/lb1spc.asm
diff --git a/gcc/config/sparc/t-vxsparc b/gcc/config/sparc/t-vxsparc
index 3adba438bd9..0c7a14a4429 100644
--- a/gcc/config/sparc/t-vxsparc
+++ b/gcc/config/sparc/t-vxsparc
@@ -7,7 +7,7 @@ LIBGCC1_TEST =
# We don't want to put exit in libgcc.a for VxWorks, because VxWorks
# does not have _exit.
-LIBGCC2_CFLAGS = -O2 $(GCC_CFLAGS) -g1 -Dexit=unused_exit
+TARGET_LIBGCC2_CFLAGS = -Dexit=unused_exit
MULTILIB_OPTIONS=msoft-float mv8
MULTILIB_DIRNAMES=soft v8
diff --git a/gcc/config/sparc/xm-linux.h b/gcc/config/sparc/xm-linux.h
index 64dc7c8ddf9..f68f5715662 100644
--- a/gcc/config/sparc/xm-linux.h
+++ b/gcc/config/sparc/xm-linux.h
@@ -1,5 +1,5 @@
-/* Configuration for GCC for SPARC running Linux.
- Copyright (C) 1996 Free Software Foundation, Inc.
+/* Configuration for GCC for SPARC running Linux-based GNU systems.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Contributed by Eddie C. Dost (ecd@skynet.be)
This file is part of GNU CC.
@@ -19,5 +19,10 @@ 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 <sparc/xm-sparc.h>
+#ifndef inhibit_libc
+#include <alloca.h>
+#include <stdlib.h>
+#include <string.h>
+#endif
+
#include <xm-linux.h>
diff --git a/gcc/config/sparc/xm-sol2.h b/gcc/config/sparc/xm-sol2.h
index 234ed999d05..a799f12b946 100644
--- a/gcc/config/sparc/xm-sol2.h
+++ b/gcc/config/sparc/xm-sol2.h
@@ -4,9 +4,3 @@
#ifndef __GNUC__
#include <alloca.h>
#endif
-
-/* We have _sys_siglist, but the declaration in <signal.h> conflicts with
- the declarations in collect2.c and mips-tfile.c, so disable the declarations
- in those files. */
-
-#define DONT_DECLARE_SYS_SIGLIST
diff --git a/gcc/config/sparc/xm-sp64.h b/gcc/config/sparc/xm-sp64.h
new file mode 100644
index 00000000000..5954affa3b5
--- /dev/null
+++ b/gcc/config/sparc/xm-sp64.h
@@ -0,0 +1,25 @@
+/* Configuration for GCC for Sparc v9 running 64-bit native.
+ Copyright (C) 1997 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.
+
+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 <sparc/xm-sparc.h>
+
+/* This describes the machine the compiler is hosted on. */
+#undef HOST_BITS_PER_LONG
+#define HOST_BITS_PER_LONG 64
diff --git a/gcc/config/sparc/xm-sparc.h b/gcc/config/sparc/xm-sparc.h
index afc44ae889d..e553a0df0b2 100644
--- a/gcc/config/sparc/xm-sparc.h
+++ b/gcc/config/sparc/xm-sparc.h
@@ -1,5 +1,5 @@
/* Configuration for GNU C-compiler for Sun Sparc.
- Copyright (C) 1988, 1993, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1988, 1993, 1995, 1997 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com).
This file is part of GNU CC.
@@ -43,8 +43,6 @@ Boston, MA 02111-1307, USA. */
#define SUCCESS_EXIT_CODE 0
#define FATAL_EXIT_CODE 33
-#define HAVE_POPEN
-
/* If compiled with Sun CC, the use of alloca requires this #include. */
#ifndef __GNUC__
#include "alloca.h"
diff --git a/gcc/config/spur/spur.c b/gcc/config/spur/spur.c
index 5837cbbfe3a..4145af261de 100644
--- a/gcc/config/spur/spur.c
+++ b/gcc/config/spur/spur.c
@@ -1,6 +1,6 @@
/* Subroutines for insn-output.c for SPUR. Adapted from routines for
the Motorola 68000 family.
- Copyright (C) 1988, 1991 Free Software Foundation, Inc.
+ Copyright (C) 1988, 1991, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -20,6 +20,7 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
diff --git a/gcc/config/svr4.h b/gcc/config/svr4.h
index d70aa117558..a7f5a37beb8 100644
--- a/gcc/config/svr4.h
+++ b/gcc/config/svr4.h
@@ -1,6 +1,6 @@
/* Operating system specific defines to be used when targeting GCC for some
generic System V Release 4 system.
- Copyright (C) 1991, 1994, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1991, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by Ron Guilmette (rfg@monkeys.com).
This file is part of GNU CC.
@@ -141,7 +141,7 @@ Boston, MA 02111-1307, USA.
support here for as many of the other svr4 linker options as seems
reasonable, given that some of them conflict with options for other
svr4 tools (e.g. the assembler). In particular, we do support the
- -h*, -z*, -V, -b, -t, -Qy, -Qn, and -YP* options here, and the -e*,
+ -z*, -V, -b, -t, -Qy, -Qn, and -YP* options here, and the -e*,
-l*, -o*, -r, -s, -u*, and -L* options are directly supported
by gcc.c itself. We don't directly support the -m (generate load
map) option because that conflicts with the -m (run m4) option of
@@ -162,8 +162,8 @@ Boston, MA 02111-1307, USA.
#define LINK_SPEC "%{h*} %{v:-V} \
%{b} %{Wl,*:%*} \
%{static:-dn -Bstatic} \
- %{shared:-G -dy -z text %{!h*:%{o*:-h %*}}} \
- %{symbolic:-Bsymbolic -G -dy -z text %{!h*:%{o*:-h %*}}} \
+ %{shared:-G -dy -z text} \
+ %{symbolic:-Bsymbolic -G -dy -z text} \
%{G:-G} \
%{YP,*} \
%{Qy:} %{!Qn:-Qy}"
@@ -171,8 +171,8 @@ Boston, MA 02111-1307, USA.
#define LINK_SPEC "%{h*} %{v:-V} \
%{b} %{Wl,*:%*} \
%{static:-dn -Bstatic} \
- %{shared:-G -dy -z text %{!h*:%{o*:-h %*}}} \
- %{symbolic:-Bsymbolic -G -dy -z text %{!h*:%{o*:-h %*}}} \
+ %{shared:-G -dy -z text} \
+ %{symbolic:-Bsymbolic -G -dy -z text} \
%{G:-G} \
%{YP,*} \
%{!YP,*:%{p:-Y P,/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \
diff --git a/gcc/config/t-svr4 b/gcc/config/t-svr4
index d4abf488905..e6be0c3b0c8 100644
--- a/gcc/config/t-svr4
+++ b/gcc/config/t-svr4
@@ -2,6 +2,7 @@
# crtstuff.c. This is only really needed when we are going to use gcc/g++
# to produce a shared library, but since we don't know ahead of time when
# we will be doing that, we just always use -fPIC when compiling the
-# routines in crtstuff.c.
+# routines in crtstuff.c. Likewise for libgcc2.c.
CRTSTUFF_T_CFLAGS = -fPIC
+TARGET_LIBGCC2_CFLAGS = -fPIC
diff --git a/gcc/config/tahoe/tahoe.c b/gcc/config/tahoe/tahoe.c
index 6fec44418f4..9dd189bde2f 100644
--- a/gcc/config/tahoe/tahoe.c
+++ b/gcc/config/tahoe/tahoe.c
@@ -1,5 +1,5 @@
/* Subroutines for insn-output.c for Tahoe.
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ Copyright (C) 1989, 1991, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -20,6 +20,7 @@ Boston, MA 02111-1307, USA. */
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
@@ -51,7 +52,7 @@ Boston, MA 02111-1307, USA. */
rtx tahoe_reg_conversion_loc;
int
-extendable_operand (op, mode)
+extensible_operand (op, mode)
rtx op;
enum machine_mode mode;
{
@@ -67,8 +68,6 @@ extendable_operand (op, mode)
/* since the modes are basically the same. I had to add a special case, */
/* though, for symbol references with offsets. */
-#include <stdio.h>
-
print_operand_address (file, addr)
FILE *file;
register rtx addr;
diff --git a/gcc/config/tahoe/tahoe.md b/gcc/config/tahoe/tahoe.md
index 101d69f6822..0fdbb0cb775 100644
--- a/gcc/config/tahoe/tahoe.md
+++ b/gcc/config/tahoe/tahoe.md
@@ -1,5 +1,5 @@
;; Machine description for GNU compiler, Tahoe version
-;; Copyright (C) 1989, 1994, 1996 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 1994, 1996, 1997 Free Software Foundation, Inc.
;; This file is part of GNU CC.
@@ -1143,7 +1143,7 @@
(define_insn "tsthi"
[(set (cc0)
- (match_operand:HI 0 "extendable_operand" "m,!r"))]
+ (match_operand:HI 0 "extensible_operand" "m,!r"))]
"GET_MODE (operands[0]) != VOIDmode"
"*
{
@@ -1179,7 +1179,7 @@
(define_insn "tstqi"
[(set (cc0)
- (match_operand:QI 0 "extendable_operand" "m,!r"))]
+ (match_operand:QI 0 "extensible_operand" "m,!r"))]
"GET_MODE (operands[0]) != VOIDmode"
"*
{
diff --git a/gcc/config/v850/lib1funcs.asm b/gcc/config/v850/lib1funcs.asm
new file mode 100644
index 00000000000..b140c4385e1
--- /dev/null
+++ b/gcc/config/v850/lib1funcs.asm
@@ -0,0 +1,1269 @@
+/* libgcc1 routines for NEC V850.
+ Copyright (C) 1996, 1997 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 with other programs, and to distribute
+those programs 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 another program.)
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; see the file COPYING. If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* As a special exception, if you link this library with files
+ compiled with GCC to produce an executable, this does not cause
+ the resulting executable to be covered by the GNU General Public License.
+ This exception does not however invalidate any other reasons why
+ the executable file might be covered by the GNU General Public License. */
+
+#ifdef L_mulsi3
+ .text
+ .globl ___mulsi3
+ .type ___mulsi3,@function
+
+/*
+ * In order to not deal with negative numbers (mulh is a signed multiply
+ * and we want an unsigned multiply, code the multiplication as a series
+ * of 7 bit multiplies).
+ *
+ * int __mulsi3 (unsigned a, unsigned b)
+ * {
+ * int i, j;
+ * int ret = 0;
+ *
+ * for (i = 0; i < 32; i += 7)
+ * {
+ * short a_part = a & 0x7f;
+ * unsigned b_tmp = b;
+ * a >>= 7;
+ *
+ * for (j = 0; (i+j) < 32; j += 7)
+ * {
+ * short b_part = b_tmp & 0x7f;
+ * ret += (((int)a_part) * ((int)b_part)) << (i+j);
+ * b_tmp >>= 7;
+ * }
+ * }
+ *
+ * return ret;
+ * }
+ */
+
+___mulsi3:
+ mov 0,r10 /* total */
+ mov 0,r14 /* i = 0, index for multiply a's part */
+ movea lo(31),r0,r16 /* upper bounds for loop */
+.L5:
+ mov r7,r13 /* b_tmp = b */
+ andi 0x7f,r6,r15 /* a_part = (a & 127) */
+ shr 7,r6 /* a >>= 7 */
+ mov r14,r12 /* i+j = i */
+.L9:
+ andi 0x7f,r13,r11 /* b_part = (b_tmp & 127) */
+ mulh r15,r11 /* ((int)a_part) * ((int)b_part) */
+ shr 7,r13 /* b_tmp >>= 7 */
+ shl r12,r11 /* (((int)a_part) * ((int)b_part)) << (i+j) */
+ add r11,r10 /* ret += (((int)a_part) * ((int)b_part)) << (i+j) */
+ add 7,r12 /* i+j += 7 */
+ cmp r16,r12 /* i+j < 32 */
+ ble .L9
+
+ add 7,r14 /* i += 7 */
+ cmp r16,r14 /* i < 32 */
+ ble .L5
+
+ jmp [r31] /* return */
+ .size __mulsi3,.-__mulsi3
+#endif
+
+#ifdef L_udivsi3
+ .global ___udivsi3
+___udivsi3:
+ mov 1,r12
+ mov 0,r10
+ cmp r6,r7
+ bnl .L12
+ movhi hi(-2147483648),r0,r13
+ cmp r0,r7
+ blt .L12
+.L4:
+ shl 1,r7
+ shl 1,r12
+ cmp r6,r7
+ bnl .L12
+ cmp r0,r12
+ be .L8
+ mov r7,r5
+ and r13,r5
+ be .L4
+ br .L12
+.L9:
+ cmp r7,r6
+ bl .L10
+ sub r7,r6
+ or r12,r10
+.L10:
+ shr 1,r12
+ shr 1,r7
+.L12:
+ cmp r0,r12
+ bne .L9
+.L8:
+ jmp [r31]
+ .size __udivsi3,.-__udivsi3
+#endif
+
+#ifdef L_divsi3
+ .text
+ .globl ___divsi3
+ .type ___divsi3,@function
+___divsi3:
+ add -8,sp
+ st.w r31,4[sp]
+ st.w r22,0[sp]
+ mov 1,r22
+ tst r7,r7
+ bp .L3
+ subr r0,r7
+ subr r0,r22
+.L3:
+ tst r6,r6
+ bp .L4
+ subr r0,r6
+ subr r0,r22
+.L4:
+ jarl ___udivsi3,r31
+ cmp r0,r22
+ bp .L7
+ subr r0,r10
+.L7:
+ ld.w 0[sp],r22
+ ld.w 4[sp],r31
+ add 8,sp
+ jmp [r31]
+ .size __divsi3,.-__divsi3
+#endif
+
+#ifdef L_umodsi3
+ .text
+ .globl ___umodsi3
+ .type ___umodsi3,@function
+___umodsi3:
+ add -12,sp
+ st.w r31,8[sp]
+ st.w r7,4[sp]
+ st.w r6,0[sp]
+ jarl ___udivsi3,r31
+ ld.w 4[sp],r7
+ mov r10,r6
+ jarl ___mulsi3,r31
+ ld.w 0[sp],r6
+ subr r6,r10
+ ld.w 8[sp],r31
+ add 12,sp
+ jmp [r31]
+ .size __umodsi3,.-__umodsi3
+#endif /* L_umodsi3 */
+
+#ifdef L_modsi3
+ .text
+ .globl ___modsi3
+ .type ___modsi3,@function
+___modsi3:
+ add -12,sp
+ st.w r31,8[sp]
+ st.w r7,4[sp]
+ st.w r6,0[sp]
+ jarl ___divsi3,r31
+ ld.w 4[sp],r7
+ mov r10,r6
+ jarl ___mulsi3,r31
+ ld.w 0[sp],r6
+ subr r6,r10
+ ld.w 8[sp],r31
+ add 12,sp
+ jmp [r31]
+ .size __modsi3,.-__modsi3
+#endif /* L_modsi3 */
+
+#ifdef L_save_2
+ .text
+ .align 2
+ .globl __save_r2_r29
+ .type __save_r2_r29,@function
+ /* Allocate space and save registers 2, 20 .. 29 on the stack */
+ /* Called via: jalr __save_r2_r29,r10 */
+__save_r2_r29:
+ mov ep,r1
+ addi -44,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r25,16[ep]
+ sst.w r24,20[ep]
+ sst.w r23,24[ep]
+ sst.w r22,28[ep]
+ sst.w r21,32[ep]
+ sst.w r20,36[ep]
+ sst.w r2,40[ep]
+ mov r1,ep
+ jmp [r10]
+ .size __save_r2_r29,.-__save_r2_r29
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r2_r29 */
+ .align 2
+ .globl __return_r2_r29
+ .type __return_r2_r29,@function
+__return_r2_r29:
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r25
+ sld.w 20[ep],r24
+ sld.w 24[ep],r23
+ sld.w 28[ep],r22
+ sld.w 32[ep],r21
+ sld.w 36[ep],r20
+ sld.w 40[ep],r2
+ addi 44,sp,sp
+ mov r1,ep
+ jmp [r31]
+ .size __return_r2_r29,.-__return_r2_r29
+#endif /* L_save_2 */
+
+#ifdef L_save_20
+ .text
+ .align 2
+ .globl __save_r20_r29
+ .type __save_r20_r29,@function
+ /* Allocate space and save registers 20 .. 29 on the stack */
+ /* Called via: jalr __save_r20_r29,r10 */
+__save_r20_r29:
+ mov ep,r1
+ addi -40,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r25,16[ep]
+ sst.w r24,20[ep]
+ sst.w r23,24[ep]
+ sst.w r22,28[ep]
+ sst.w r21,32[ep]
+ sst.w r20,36[ep]
+ mov r1,ep
+ jmp [r10]
+ .size __save_r20_r29,.-__save_r20_r29
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r20_r29 */
+ .align 2
+ .globl __return_r20_r29
+ .type __return_r20_r29,@function
+__return_r20_r29:
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r25
+ sld.w 20[ep],r24
+ sld.w 24[ep],r23
+ sld.w 28[ep],r22
+ sld.w 32[ep],r21
+ sld.w 36[ep],r20
+ addi 40,sp,sp
+ mov r1,ep
+ jmp [r31]
+ .size __return_r20_r29,.-__return_r20_r29
+#endif /* L_save_20 */
+
+#ifdef L_save_21
+ .text
+ .align 2
+ .globl __save_r21_r29
+ .type __save_r21_r29,@function
+ /* Allocate space and save registers 21 .. 29 on the stack */
+ /* Called via: jalr __save_r21_r29,r10 */
+__save_r21_r29:
+ mov ep,r1
+ addi -36,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r25,16[ep]
+ sst.w r24,20[ep]
+ sst.w r23,24[ep]
+ sst.w r22,28[ep]
+ sst.w r21,32[ep]
+ mov r1,ep
+ jmp [r10]
+ .size __save_r21_r29,.-__save_r21_r29
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r21_r29 */
+ .align 2
+ .globl __return_r21_r29
+ .type __return_r21_r29,@function
+__return_r21_r29:
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r25
+ sld.w 20[ep],r24
+ sld.w 24[ep],r23
+ sld.w 28[ep],r22
+ sld.w 32[ep],r21
+ addi 36,sp,sp
+ mov r1,ep
+ jmp [r31]
+ .size __return_r21_r29,.-__return_r21_r29
+#endif /* L_save_21 */
+
+#ifdef L_save_22
+ .text
+ .align 2
+ .globl __save_r22_r29
+ .type __save_r22_r29,@function
+ /* Allocate space and save registers 22 .. 29 on the stack */
+ /* Called via: jalr __save_r22_r29,r10 */
+__save_r22_r29:
+ mov ep,r1
+ addi -32,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r25,16[ep]
+ sst.w r24,20[ep]
+ sst.w r23,24[ep]
+ sst.w r22,28[ep]
+ mov r1,ep
+ jmp [r10]
+ .size __save_r22_r29,.-__save_r22_r29
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r22_r29 */
+ .align 2
+ .globl __return_r22_r29
+ .type __return_r22_r29,@function
+__return_r22_r29:
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r25
+ sld.w 20[ep],r24
+ sld.w 24[ep],r23
+ sld.w 28[ep],r22
+ addi 32,sp,sp
+ mov r1,ep
+ jmp [r31]
+ .size __return_r22_r29,.-__return_r22_r29
+#endif /* L_save_22 */
+
+#ifdef L_save_23
+ .text
+ .align 2
+ .globl __save_r23_r29
+ .type __save_r23_r29,@function
+ /* Allocate space and save registers 23 .. 29 on the stack */
+ /* Called via: jalr __save_r23_r29,r10 */
+__save_r23_r29:
+ mov ep,r1
+ addi -28,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r25,16[ep]
+ sst.w r24,20[ep]
+ sst.w r23,24[ep]
+ mov r1,ep
+ jmp [r10]
+ .size __save_r23_r29,.-__save_r23_r29
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r23_r29 */
+ .align 2
+ .globl __return_r23_r29
+ .type __return_r23_r29,@function
+__return_r23_r29:
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r25
+ sld.w 20[ep],r24
+ sld.w 24[ep],r23
+ addi 28,sp,sp
+ mov r1,ep
+ jmp [r31]
+ .size __return_r23_r29,.-__return_r23_r29
+#endif /* L_save_23 */
+
+#ifdef L_save_24
+ .text
+ .align 2
+ .globl __save_r24_r29
+ .type __save_r24_r29,@function
+ /* Allocate space and save registers 24 .. 29 on the stack */
+ /* Called via: jalr __save_r24_r29,r10 */
+__save_r24_r29:
+ mov ep,r1
+ addi -24,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r25,16[ep]
+ sst.w r24,20[ep]
+ mov r1,ep
+ jmp [r10]
+ .size __save_r24_r29,.-__save_r24_r29
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r24_r29 */
+ .align 2
+ .globl __return_r24_r29
+ .type __return_r24_r29,@function
+__return_r24_r29:
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r25
+ sld.w 20[ep],r24
+ addi 24,sp,sp
+ mov r1,ep
+ jmp [r31]
+ .size __return_r24_r29,.-__return_r24_r29
+#endif /* L_save_24 */
+
+#ifdef L_save_25
+ .text
+ .align 2
+ .globl __save_r25_r29
+ .type __save_r25_r29,@function
+ /* Allocate space and save registers 25 .. 29 on the stack */
+ /* Called via: jalr __save_r25_r29,r10 */
+__save_r25_r29:
+ mov ep,r1
+ addi -20,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r25,16[ep]
+ mov r1,ep
+ jmp [r10]
+ .size __save_r25_r29,.-__save_r25_r29
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r25_r29 */
+ .align 2
+ .globl __return_r25_r29
+ .type __return_r25_r29,@function
+__return_r25_r29:
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r25
+ addi 20,sp,sp
+ mov r1,ep
+ jmp [r31]
+ .size __return_r25_r29,.-__return_r25_r29
+#endif /* L_save_25 */
+
+#ifdef L_save_26
+ .text
+ .align 2
+ .globl __save_r26_r29
+ .type __save_r26_r29,@function
+ /* Allocate space and save registers 26 .. 29 on the stack */
+ /* Called via: jalr __save_r26_r29,r10 */
+__save_r26_r29:
+ mov ep,r1
+ add -16,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ mov r1,ep
+ jmp [r10]
+ .size __save_r26_r29,.-__save_r26_r29
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r26_r29 */
+ .align 2
+ .globl __return_r26_r29
+ .type __return_r26_r29,@function
+__return_r26_r29:
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ addi 16,sp,sp
+ mov r1,ep
+ jmp [r31]
+ .size __return_r26_r29,.-__return_r26_r29
+#endif /* L_save_26 */
+
+#ifdef L_save_27
+ .text
+ .align 2
+ .globl __save_r27_r29
+ .type __save_r27_r29,@function
+ /* Allocate space and save registers 27 .. 29 on the stack */
+ /* Called via: jalr __save_r27_r29,r10 */
+__save_r27_r29:
+ add -12,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ st.w r27,8[sp]
+ jmp [r10]
+ .size __save_r27_r29,.-__save_r27_r29
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r27_r29 */
+ .align 2
+ .globl __return_r27_r29
+ .type __return_r27_r29,@function
+__return_r27_r29:
+ ld.w 0[sp],r29
+ ld.w 4[sp],r28
+ ld.w 8[sp],r27
+ add 12,sp
+ jmp [r31]
+ .size __return_r27_r29,.-__return_r27_r29
+#endif /* L_save_27 */
+
+#ifdef L_save_28
+ .text
+ .align 2
+ .globl __save_r28_r29
+ .type __save_r28_r29,@function
+ /* Allocate space and save registers 28,29 on the stack */
+ /* Called via: jalr __save_r28_r29,r10 */
+__save_r28_r29:
+ add -8,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ jmp [r10]
+ .size __save_r28_r29,.-__save_r28_r29
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r28_r29 */
+ .align 2
+ .globl __return_r28_r29
+ .type __return_r28_r29,@function
+__return_r28_r29:
+ ld.w 0[sp],r29
+ ld.w 4[sp],r28
+ add 8,sp
+ jmp [r31]
+ .size __return_r28_r29,.-__return_r28_r29
+#endif /* L_save_28 */
+
+#ifdef L_save_29
+ .text
+ .align 2
+ .globl __save_r29
+ .type __save_r29,@function
+ /* Allocate space and save register 29 on the stack */
+ /* Called via: jalr __save_r29,r10 */
+__save_r29:
+ add -4,sp
+ st.w r29,0[sp]
+ jmp [r10]
+ .size __save_r29,.-__save_r29
+
+ /* Restore saved register 29, deallocate stack and return to the user */
+ /* Called via: jr __return_r29 */
+ .align 2
+ .globl __return_r29
+ .type __return_r29,@function
+__return_r29:
+ ld.w 0[sp],r29
+ add 4,sp
+ jmp [r31]
+ .size __return_r29,.-__return_r29
+#endif /* L_save_28 */
+
+#ifdef L_save_2c
+ .text
+ .align 2
+ .globl __save_r2_r31
+ .type __save_r2_r31,@function
+ /* Allocate space and save registers 20 .. 29, 31 on the stack */
+ /* Also allocate space for the argument save area */
+ /* Called via: jalr __save_r2_r31,r10 */
+__save_r2_r31:
+ mov ep,r1
+ addi -64,sp,sp
+ mov sp,ep
+ sst.w r29,16[ep]
+ sst.w r28,20[ep]
+ sst.w r27,24[ep]
+ sst.w r26,28[ep]
+ sst.w r25,32[ep]
+ sst.w r24,36[ep]
+ sst.w r23,40[ep]
+ sst.w r22,44[ep]
+ sst.w r21,48[ep]
+ sst.w r20,52[ep]
+ sst.w r2,56[ep]
+ sst.w r31,60[ep]
+ mov r1,ep
+ jmp [r10]
+ .size __save_r2_r31,.-__save_r2_r31
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r20_r31 */
+ .align 2
+ .globl __return_r2_r31
+ .type __return_r2_r31,@function
+__return_r2_r31:
+ mov ep,r1
+ mov sp,ep
+ sld.w 16[ep],r29
+ sld.w 20[ep],r28
+ sld.w 24[ep],r27
+ sld.w 28[ep],r26
+ sld.w 32[ep],r25
+ sld.w 36[ep],r24
+ sld.w 40[ep],r23
+ sld.w 44[ep],r22
+ sld.w 48[ep],r21
+ sld.w 52[ep],r20
+ sld.w 56[ep],r2
+ sld.w 60[ep],r31
+ addi 64,sp,sp
+ mov r1,ep
+ jmp [r31]
+ .size __return_r2_r31,.-__return_r2_r31
+#endif /* L_save_2c */
+
+#ifdef L_save_20c
+ .text
+ .align 2
+ .globl __save_r20_r31
+ .type __save_r20_r31,@function
+ /* Allocate space and save registers 20 .. 29, 31 on the stack */
+ /* Also allocate space for the argument save area */
+ /* Called via: jalr __save_r20_r31,r10 */
+__save_r20_r31:
+ mov ep,r1
+ addi -60,sp,sp
+ mov sp,ep
+ sst.w r29,16[ep]
+ sst.w r28,20[ep]
+ sst.w r27,24[ep]
+ sst.w r26,28[ep]
+ sst.w r25,32[ep]
+ sst.w r24,36[ep]
+ sst.w r23,40[ep]
+ sst.w r22,44[ep]
+ sst.w r21,48[ep]
+ sst.w r20,52[ep]
+ sst.w r31,56[ep]
+ mov r1,ep
+ jmp [r10]
+ .size __save_r20_r31,.-__save_r20_r31
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r20_r31 */
+ .align 2
+ .globl __return_r20_r31
+ .type __return_r20_r31,@function
+__return_r20_r31:
+ mov ep,r1
+ mov sp,ep
+ sld.w 16[ep],r29
+ sld.w 20[ep],r28
+ sld.w 24[ep],r27
+ sld.w 28[ep],r26
+ sld.w 32[ep],r25
+ sld.w 36[ep],r24
+ sld.w 40[ep],r23
+ sld.w 44[ep],r22
+ sld.w 48[ep],r21
+ sld.w 52[ep],r20
+ sld.w 56[ep],r31
+ addi 60,sp,sp
+ mov r1,ep
+ jmp [r31]
+ .size __return_r20_r31,.-__return_r20_r31
+#endif /* L_save_20c */
+
+#ifdef L_save_21c
+ .text
+ .align 2
+ .globl __save_r21_r31
+ .type __save_r21_r31,@function
+ /* Allocate space and save registers 21 .. 29, 31 on the stack */
+ /* Also allocate space for the argument save area */
+ /* Called via: jalr __save_r21_r31,r10 */
+__save_r21_r31:
+ mov ep,r1
+ addi -56,sp,sp
+ mov sp,ep
+ sst.w r29,16[ep]
+ sst.w r28,20[ep]
+ sst.w r27,24[ep]
+ sst.w r26,28[ep]
+ sst.w r25,32[ep]
+ sst.w r24,36[ep]
+ sst.w r23,40[ep]
+ sst.w r22,44[ep]
+ sst.w r21,48[ep]
+ sst.w r31,52[ep]
+ mov r1,ep
+ jmp [r10]
+ .size __save_r21_r31,.-__save_r21_r31
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r21_r31 */
+ .align 2
+ .globl __return_r21_r31
+ .type __return_r21_r31,@function
+__return_r21_r31:
+ mov ep,r1
+ mov sp,ep
+ sld.w 16[ep],r29
+ sld.w 20[ep],r28
+ sld.w 24[ep],r27
+ sld.w 28[ep],r26
+ sld.w 32[ep],r25
+ sld.w 36[ep],r24
+ sld.w 40[ep],r23
+ sld.w 44[ep],r22
+ sld.w 48[ep],r21
+ sld.w 52[ep],r31
+ addi 56,sp,sp
+ mov r1,ep
+ jmp [r31]
+ .size __return_r21_r31,.-__return_r21_r31
+#endif /* L_save_21c */
+
+#ifdef L_save_22c
+ .text
+ .align 2
+ .globl __save_r22_r31
+ .type __save_r22_r31,@function
+ /* Allocate space and save registers 22 .. 29, 31 on the stack */
+ /* Also allocate space for the argument save area */
+ /* Called via: jalr __save_r22_r31,r10 */
+__save_r22_r31:
+ mov ep,r1
+ addi -52,sp,sp
+ mov sp,ep
+ sst.w r29,16[ep]
+ sst.w r28,20[ep]
+ sst.w r27,24[ep]
+ sst.w r26,28[ep]
+ sst.w r25,32[ep]
+ sst.w r24,36[ep]
+ sst.w r23,40[ep]
+ sst.w r22,44[ep]
+ sst.w r31,48[ep]
+ mov r1,ep
+ jmp [r10]
+ .size __save_r22_r31,.-__save_r22_r31
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r22_r31 */
+ .align 2
+ .globl __return_r22_r31
+ .type __return_r22_r31,@function
+__return_r22_r31:
+ mov ep,r1
+ mov sp,ep
+ sld.w 16[ep],r29
+ sld.w 20[ep],r28
+ sld.w 24[ep],r27
+ sld.w 28[ep],r26
+ sld.w 32[ep],r25
+ sld.w 36[ep],r24
+ sld.w 40[ep],r23
+ sld.w 44[ep],r22
+ sld.w 48[ep],r31
+ addi 52,sp,sp
+ mov r1,ep
+ jmp [r31]
+ .size __return_r22_r31,.-__return_r22_r31
+#endif /* L_save_22c */
+
+#ifdef L_save_23c
+ .text
+ .align 2
+ .globl __save_r23_r31
+ .type __save_r23_r31,@function
+ /* Allocate space and save registers 23 .. 29, 31 on the stack */
+ /* Also allocate space for the argument save area */
+ /* Called via: jalr __save_r23_r31,r10 */
+__save_r23_r31:
+ mov ep,r1
+ addi -48,sp,sp
+ mov sp,ep
+ sst.w r29,16[ep]
+ sst.w r28,20[ep]
+ sst.w r27,24[ep]
+ sst.w r26,28[ep]
+ sst.w r25,32[ep]
+ sst.w r24,36[ep]
+ sst.w r23,40[ep]
+ sst.w r31,44[ep]
+ mov r1,ep
+ jmp [r10]
+ .size __save_r23_r31,.-__save_r23_r31
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r23_r31 */
+ .align 2
+ .globl __return_r23_r31
+ .type __return_r23_r31,@function
+__return_r23_r31:
+ mov ep,r1
+ mov sp,ep
+ sld.w 16[ep],r29
+ sld.w 20[ep],r28
+ sld.w 24[ep],r27
+ sld.w 28[ep],r26
+ sld.w 32[ep],r25
+ sld.w 36[ep],r24
+ sld.w 40[ep],r23
+ sld.w 44[ep],r31
+ addi 48,sp,sp
+ mov r1,ep
+ jmp [r31]
+ .size __return_r23_r31,.-__return_r23_r31
+#endif /* L_save_23c */
+
+#ifdef L_save_24c
+ .text
+ .align 2
+ .globl __save_r24_r31
+ .type __save_r24_r31,@function
+ /* Allocate space and save registers 24 .. 29, 31 on the stack */
+ /* Also allocate space for the argument save area */
+ /* Called via: jalr __save_r24_r31,r10 */
+__save_r24_r31:
+ mov ep,r1
+ addi -44,sp,sp
+ mov sp,ep
+ sst.w r29,16[ep]
+ sst.w r28,20[ep]
+ sst.w r27,24[ep]
+ sst.w r26,28[ep]
+ sst.w r25,32[ep]
+ sst.w r24,36[ep]
+ sst.w r31,40[ep]
+ mov r1,ep
+ jmp [r10]
+ .size __save_r24_r31,.-__save_r24_r31
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r24_r31 */
+ .align 2
+ .globl __return_r24_r31
+ .type __return_r24_r31,@function
+__return_r24_r31:
+ mov ep,r1
+ mov sp,ep
+ sld.w 16[ep],r29
+ sld.w 20[ep],r28
+ sld.w 24[ep],r27
+ sld.w 28[ep],r26
+ sld.w 32[ep],r25
+ sld.w 36[ep],r24
+ sld.w 40[ep],r31
+ addi 44,sp,sp
+ mov r1,ep
+ jmp [r31]
+ .size __return_r24_r31,.-__return_r24_r31
+#endif /* L_save_24c */
+
+#ifdef L_save_25c
+ .text
+ .align 2
+ .globl __save_r25_r31
+ .type __save_r25_r31,@function
+ /* Allocate space and save registers 25 .. 29, 31 on the stack */
+ /* Also allocate space for the argument save area */
+ /* Called via: jalr __save_r25_r31,r10 */
+__save_r25_r31:
+ mov ep,r1
+ addi -40,sp,sp
+ mov sp,ep
+ sst.w r29,16[ep]
+ sst.w r28,20[ep]
+ sst.w r27,24[ep]
+ sst.w r26,28[ep]
+ sst.w r25,32[ep]
+ sst.w r31,36[ep]
+ mov r1,ep
+ jmp [r10]
+ .size __save_r25_r31,.-__save_r25_r31
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r25_r31 */
+ .align 2
+ .globl __return_r25_r31
+ .type __return_r25_r31,@function
+__return_r25_r31:
+ mov ep,r1
+ mov sp,ep
+ sld.w 16[ep],r29
+ sld.w 20[ep],r28
+ sld.w 24[ep],r27
+ sld.w 28[ep],r26
+ sld.w 32[ep],r25
+ sld.w 36[ep],r31
+ addi 40,sp,sp
+ mov r1,ep
+ jmp [r31]
+ .size __return_r25_r31,.-__return_r25_r31
+#endif /* L_save_25c */
+
+#ifdef L_save_26c
+ .text
+ .align 2
+ .globl __save_r26_r31
+ .type __save_r26_r31,@function
+ /* Allocate space and save registers 26 .. 29, 31 on the stack */
+ /* Also allocate space for the argument save area */
+ /* Called via: jalr __save_r26_r31,r10 */
+__save_r26_r31:
+ mov ep,r1
+ addi -36,sp,sp
+ mov sp,ep
+ sst.w r29,16[ep]
+ sst.w r28,20[ep]
+ sst.w r27,24[ep]
+ sst.w r26,28[ep]
+ sst.w r31,32[ep]
+ mov r1,ep
+ jmp [r10]
+ .size __save_r26_r31,.-__save_r26_r31
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r26_r31 */
+ .align 2
+ .globl __return_r26_r31
+ .type __return_r26_r31,@function
+__return_r26_r31:
+ mov ep,r1
+ mov sp,ep
+ sld.w 16[ep],r29
+ sld.w 20[ep],r28
+ sld.w 24[ep],r27
+ sld.w 28[ep],r26
+ sld.w 32[ep],r31
+ addi 36,sp,sp
+ mov r1,ep
+ jmp [r31]
+ .size __return_r26_r31,.-__return_r26_r31
+#endif /* L_save_26c */
+
+#ifdef L_save_27c
+ .text
+ .align 2
+ .globl __save_r27_r31
+ .type __save_r27_r31,@function
+ /* Allocate space and save registers 27 .. 29, 31 on the stack */
+ /* Also allocate space for the argument save area */
+ /* Called via: jalr __save_r27_r31,r10 */
+__save_r27_r31:
+ mov ep,r1
+ addi -32,sp,sp
+ mov sp,ep
+ sst.w r29,16[ep]
+ sst.w r28,20[ep]
+ sst.w r27,24[ep]
+ sst.w r31,28[ep]
+ mov r1,ep
+ jmp [r10]
+ .size __save_r27_r31,.-__save_r27_r31
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r27_r31 */
+ .align 2
+ .globl __return_r27_r31
+ .type __return_r27_r31,@function
+__return_r27_r31:
+ mov ep,r1
+ mov sp,ep
+ sld.w 16[ep],r29
+ sld.w 20[ep],r28
+ sld.w 24[ep],r27
+ sld.w 28[ep],r31
+ addi 32,sp,sp
+ mov r1,ep
+ jmp [r31]
+ .size __return_r27_r31,.-__return_r27_r31
+#endif /* L_save_27c */
+
+#ifdef L_save_28c
+ .text
+ .align 2
+ .globl __save_r28_r31
+ .type __save_r28_r31,@function
+ /* Allocate space and save registers 28 .. 29, 31 on the stack */
+ /* Also allocate space for the argument save area */
+ /* Called via: jalr __save_r28_r31,r10 */
+__save_r28_r31:
+ addi -28,sp,sp
+ st.w r29,16[sp]
+ st.w r28,20[sp]
+ st.w r31,24[sp]
+ jmp [r10]
+ .size __save_r28_r31,.-__save_r28_r31
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r28_r31 */
+ .align 2
+ .globl __return_r28_r31
+ .type __return_r28_r31,@function
+__return_r28_r31:
+ ld.w 16[sp],r29
+ ld.w 20[sp],r28
+ ld.w 24[sp],r31
+ addi 28,sp,sp
+ jmp [r31]
+ .size __return_r28_r31,.-__return_r28_r31
+#endif /* L_save_28c */
+
+#ifdef L_save_29c
+ .text
+ .align 2
+ .globl __save_r29_r31
+ .type __save_r29_r31,@function
+ /* Allocate space and save registers 29 & 31 on the stack */
+ /* Also allocate space for the argument save area */
+ /* Called via: jalr __save_r29_r31,r10 */
+__save_r29_r31:
+ addi -24,sp,sp
+ st.w r29,16[sp]
+ st.w r31,20[sp]
+ jmp [r10]
+ .size __save_r29_r31,.-__save_r29_r31
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r29_r31 */
+ .align 2
+ .globl __return_r29_r31
+ .type __return_r29_r31,@function
+__return_r29_r31:
+ ld.w 16[sp],r29
+ ld.w 20[sp],r31
+ addi 24,sp,sp
+ jmp [r31]
+ .size __return_r29_r31,.-__return_r29_r31
+#endif /* L_save_29c */
+
+#ifdef L_save_31c
+ .text
+ .align 2
+ .globl __save_r31
+ .type __save_r31,@function
+ /* Allocate space and save register 31 on the stack */
+ /* Also allocate space for the argument save area */
+ /* Called via: jalr __save_r29_r31,r10 */
+__save_r31:
+ addi -20,sp,sp
+ st.w r31,16[sp]
+ jmp [r10]
+ .size __save_r31,.-__save_r31
+
+ /* Restore saved registers, deallocate stack and return to the user */
+ /* Called via: jr __return_r31 */
+ .align 2
+ .globl __return_r31
+ .type __return_r31,@function
+__return_r31:
+ ld.w 16[sp],r31
+ addi 20,sp,sp
+ jmp [r31]
+ .size __return_r29_r31,.-__return_r29_r31
+#endif /* L_save_31c */
+
+#ifdef L_save_varargs
+ .text
+ .align 2
+ .globl __save_r6_r9
+ .type __save_r6_r9,@function
+ /* Save registers 6 .. 9 on the stack for variable argument functions */
+ /* Called via: jalr __save_r6_r9,r10 */
+__save_r6_r9:
+ mov ep,r1
+ mov sp,ep
+ sst.w r6,0[ep]
+ sst.w r7,4[ep]
+ sst.w r8,8[ep]
+ sst.w r9,12[ep]
+ mov r1,ep
+ jmp [r10]
+ .size __save_r6_r9,.-__save_r6_r9
+#endif /* L_save_varargs */
+
+#ifdef L_save_interrupt
+ .text
+ .align 2
+ .globl __save_interrupt
+ .type __save_interrupt,@function
+ /* Save registers r1, r4 on stack and load up with expected values */
+ /* Note, 12 bytes of stack have already been allocated. */
+ /* Called via: jalr __save_interrupt,r10 */
+__save_interrupt:
+ st.w ep,0[sp]
+ st.w gp,4[sp]
+ st.w r1,8[sp]
+ movhi hi(__ep),r0,ep
+ movea lo(__ep),ep,ep
+ movhi hi(__gp),r0,gp
+ movea lo(__gp),gp,gp
+ jmp [r10]
+ .size __save_interrupt,.-__save_interrupt
+
+ /* Restore saved registers, deallocate stack and return from the interrupt */
+ /* Called via: jr __return_interrupt */
+ .align 2
+ .globl __return_interrupt
+ .type __return_interrupt,@function
+__return_interrupt:
+ ld.w 0[sp],ep
+ ld.w 4[sp],gp
+ ld.w 8[sp],r1
+ ld.w 12[sp],r10
+ add 16,sp
+ reti
+ .size __return_interrupt,.-__return_interrupt
+#endif /* L_save_interrupt */
+
+#ifdef L_save_all_interrupt
+ .text
+ .align 2
+ .globl __save_all_interrupt
+ .type __save_all_interrupt,@function
+ /* Save all registers except for those saved in __save_interrupt */
+ /* allocate enough stack for all of the registers & 16 bytes of space */
+ /* Called via: jalr __save_all_interrupt,r10 */
+__save_all_interrupt:
+ addi -120,sp,sp
+ mov ep,r1
+ mov sp,ep
+ sst.w r31,116[ep]
+ sst.w r2,112[ep]
+ sst.w gp,108[ep]
+ sst.w r6,104[ep]
+ sst.w r7,100[ep]
+ sst.w r8,96[ep]
+ sst.w r9,92[ep]
+ sst.w r11,88[ep]
+ sst.w r12,84[ep]
+ sst.w r13,80[ep]
+ sst.w r14,76[ep]
+ sst.w r15,72[ep]
+ sst.w r16,68[ep]
+ sst.w r17,64[ep]
+ sst.w r18,60[ep]
+ sst.w r19,56[ep]
+ sst.w r20,52[ep]
+ sst.w r21,48[ep]
+ sst.w r22,44[ep]
+ sst.w r23,40[ep]
+ sst.w r24,36[ep]
+ sst.w r25,32[ep]
+ sst.w r26,28[ep]
+ sst.w r27,24[ep]
+ sst.w r28,20[ep]
+ sst.w r29,16[ep]
+ mov r1,ep
+ jmp [r10]
+ .size __save_all_interrupt,.-__save_all_interrupt
+
+ .globl __restore_all_interrupt
+ .type __restore_all_interrupt,@function
+ /* Restore all registers saved in __save_all_interrupt */
+ /* & deallocate the stack space */
+ /* Called via: jalr __restore_all_interrupt,r10 */
+__restore_all_interrupt:
+ mov ep,r1
+ mov sp,ep
+ sld.w 116[ep],r31
+ sld.w 112[ep],r2
+ sld.w 108[ep],gp
+ sld.w 104[ep],r6
+ sld.w 100[ep],r7
+ sld.w 96[ep],r8
+ sld.w 92[ep],r9
+ sld.w 88[ep],r11
+ sld.w 84[ep],r12
+ sld.w 80[ep],r13
+ sld.w 76[ep],r14
+ sld.w 72[ep],r15
+ sld.w 68[ep],r16
+ sld.w 64[ep],r17
+ sld.w 60[ep],r18
+ sld.w 56[ep],r19
+ sld.w 52[ep],r20
+ sld.w 48[ep],r21
+ sld.w 44[ep],r22
+ sld.w 40[ep],r23
+ sld.w 36[ep],r24
+ sld.w 32[ep],r25
+ sld.w 28[ep],r26
+ sld.w 24[ep],r27
+ sld.w 20[ep],r28
+ sld.w 16[ep],r29
+ mov r1,ep
+ addi 120,sp,sp
+ jmp [r10]
+ .size __restore_all_interrupt,.-__restore_all_interrupt
+#endif /* L_save_all_interrupt */
diff --git a/gcc/config/v850/t-v850 b/gcc/config/v850/t-v850
new file mode 100644
index 00000000000..d1d9b16f1b6
--- /dev/null
+++ b/gcc/config/v850/t-v850
@@ -0,0 +1,52 @@
+CROSS_LIBGCC1 = libgcc1-asm.a
+LIB1ASMSRC = v850/lib1funcs.asm
+LIB1ASMFUNCS = _mulsi3 \
+ _divsi3 \
+ _udivsi3 \
+ _modsi3 \
+ _umodsi3 \
+ _save_2 \
+ _save_20 \
+ _save_21 \
+ _save_22 \
+ _save_23 \
+ _save_24 \
+ _save_25 \
+ _save_26 \
+ _save_27 \
+ _save_28 \
+ _save_29 \
+ _save_2c \
+ _save_20c \
+ _save_21c \
+ _save_22c \
+ _save_23c \
+ _save_24c \
+ _save_25c \
+ _save_26c \
+ _save_27c \
+ _save_28c \
+ _save_29c \
+ _save_31c \
+ _save_varargs \
+ _save_interrupt \
+ _save_all_interrupt
+
+
+# These are really part of libgcc1, but this will cause them to be
+# built correctly, so...
+
+LIB2FUNCS_EXTRA = fp-bit.c dp-bit.c
+
+dp-bit.c: $(srcdir)/config/fp-bit.c
+ echo '#ifdef __LITTLE_ENDIAN__' > dp-bit.c
+ echo '#define FLOAT_BIT_ORDER_MISMATCH' >>dp-bit.c
+ echo '#endif' >> dp-bit.c
+ cat $(srcdir)/config/fp-bit.c >> dp-bit.c
+
+fp-bit.c: $(srcdir)/config/fp-bit.c
+ echo '#define FLOAT' > fp-bit.c
+ echo '#ifdef __LITTLE_ENDIAN__' >> fp-bit.c
+ echo '#define FLOAT_BIT_ORDER_MISMATCH' >>fp-bit.c
+ echo '#endif' >> fp-bit.c
+ cat $(srcdir)/config/fp-bit.c >> fp-bit.c
diff --git a/gcc/config/v850/v850.c b/gcc/config/v850/v850.c
new file mode 100644
index 00000000000..8f5c768bbe2
--- /dev/null
+++ b/gcc/config/v850/v850.c
@@ -0,0 +1,2284 @@
+/* Subroutines for insn-output.c for NEC V850 series
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+ Contributed by Jeff Law (law@cygnus.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 <stdio.h>
+#include <ctype.h>
+#include "config.h"
+#include "rtl.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 "expr.h"
+#include "tree.h"
+#include "obstack.h"
+
+/* True if the current function has anonymous arguments. */
+int current_function_anonymous_args;
+
+/* Information about the various small memory areas. */
+struct small_memory_info small_memory[ (int)SMALL_MEMORY_max ] =
+{
+ /* name value max physical max */
+ { "tda", (char *)0, 0, 256 },
+ { "sda", (char *)0, 0, 65536 },
+ { "zda", (char *)0, 0, 32768 },
+};
+
+/* True if we don't need to check any more if the current
+ function is an interrupt handler */
+static int v850_interrupt_cache_p = FALSE;
+
+/* Whether current function is an interrupt handler. */
+static int v850_interrupt_p = FALSE;
+
+
+/* Sometimes certain combinations of command options do not make
+ sense on a particular target machine. You can define a macro
+ `OVERRIDE_OPTIONS' to take account of this. This macro, if
+ defined, is executed once just after all the command options have
+ been parsed.
+
+ Don't use this macro to turn on various extra optimizations for
+ `-O'. That is what `OPTIMIZATION_OPTIONS' is for. */
+
+void
+override_options ()
+{
+ int i;
+ extern int atoi ();
+
+ /* Parse -m{s,t,z}da=nnn switches */
+ for (i = 0; i < (int)SMALL_MEMORY_max; i++)
+ {
+ if (small_memory[i].value)
+ {
+ if (!isdigit (*small_memory[i].value))
+ error ("%s=%s is not numeric.",
+ small_memory[i].name,
+ small_memory[i].value);
+ else
+ {
+ small_memory[i].max = atoi (small_memory[i].value);
+ if (small_memory[i].max > small_memory[i].physical_max)
+ error ("%s=%s is too large.",
+ small_memory[i].name,
+ small_memory[i].value);
+ }
+ }
+ }
+}
+
+
+/* Output assembly code for the start of the file. */
+
+void
+asm_file_start (file)
+ FILE *file;
+{
+ output_file_directive (file, main_input_filename);
+}
+
+
+/* Return an RTX to represent where a value with mode MODE will be returned
+ from a function. If the result is 0, the argument is pushed. */
+
+rtx
+function_arg (cum, mode, type, named)
+ CUMULATIVE_ARGS *cum;
+ enum machine_mode mode;
+ tree type;
+ int named;
+{
+ rtx result = 0;
+ int size, align;
+
+ if (TARGET_GHS && !named)
+ return NULL_RTX;
+
+ if (mode == BLKmode)
+ size = int_size_in_bytes (type);
+ else
+ size = GET_MODE_SIZE (mode);
+
+ if (type)
+ align = TYPE_ALIGN (type) / BITS_PER_UNIT;
+ else
+ align = size;
+
+ cum->nbytes = (cum->nbytes + align - 1) &~(align - 1);
+
+ if (cum->nbytes > 4 * UNITS_PER_WORD)
+ return 0;
+
+ if (type == NULL_TREE
+ && cum->nbytes + size > 4 * UNITS_PER_WORD)
+ return 0;
+
+ switch (cum->nbytes / UNITS_PER_WORD)
+ {
+ case 0:
+ result = gen_rtx (REG, mode, 6);
+ break;
+ case 1:
+ result = gen_rtx (REG, mode, 7);
+ break;
+ case 2:
+ result = gen_rtx (REG, mode, 8);
+ break;
+ case 3:
+ result = gen_rtx (REG, mode, 9);
+ break;
+ default:
+ result = 0;
+ }
+
+ return result;
+}
+
+
+/* Return the number of words which must be put into registers
+ for values which are part in registers and part in memory. */
+
+int
+function_arg_partial_nregs (cum, mode, type, named)
+ CUMULATIVE_ARGS *cum;
+ enum machine_mode mode;
+ tree type;
+ int named;
+{
+ int size, align;
+
+ if (TARGET_GHS && !named)
+ return 0;
+
+ if (mode == BLKmode)
+ size = int_size_in_bytes (type);
+ else
+ size = GET_MODE_SIZE (mode);
+
+ if (type)
+ align = TYPE_ALIGN (type) / BITS_PER_UNIT;
+ else
+ align = size;
+
+ cum->nbytes = (cum->nbytes + align - 1) &~(align - 1);
+
+ if (cum->nbytes > 4 * UNITS_PER_WORD)
+ return 0;
+
+ if (cum->nbytes + size <= 4 * UNITS_PER_WORD)
+ return 0;
+
+ if (type == NULL_TREE
+ && cum->nbytes + size > 4 * UNITS_PER_WORD)
+ return 0;
+
+ return (4 * UNITS_PER_WORD - cum->nbytes) / UNITS_PER_WORD;
+}
+
+
+/* Return the high and low words of a CONST_DOUBLE */
+
+static void
+const_double_split (x, p_high, p_low)
+ rtx x;
+ HOST_WIDE_INT *p_high;
+ HOST_WIDE_INT *p_low;
+{
+ if (GET_CODE (x) == CONST_DOUBLE)
+ {
+ long t[2];
+ REAL_VALUE_TYPE rv;
+
+ switch (GET_MODE (x))
+ {
+ case DFmode:
+ REAL_VALUE_FROM_CONST_DOUBLE (rv, x);
+ REAL_VALUE_TO_TARGET_DOUBLE (rv, t);
+ *p_high = t[1]; /* since v850 is little endian */
+ *p_low = t[0]; /* high is second word */
+ return;
+
+ case SFmode:
+ REAL_VALUE_FROM_CONST_DOUBLE (rv, x);
+ REAL_VALUE_TO_TARGET_SINGLE (rv, *p_high);
+ *p_low = 0;
+ return;
+
+ case VOIDmode:
+ case DImode:
+ *p_high = CONST_DOUBLE_HIGH (x);
+ *p_low = CONST_DOUBLE_LOW (x);
+ return;
+ }
+ }
+
+ fatal_insn ("const_double_split got a bad insn:", x);
+}
+
+
+/* Return the cost of the rtx R with code CODE. */
+
+static int
+const_costs_int (value, zero_cost)
+ HOST_WIDE_INT value;
+ int zero_cost;
+{
+ if (CONST_OK_FOR_I (value))
+ return zero_cost;
+ else if (CONST_OK_FOR_J (value))
+ return 1;
+ else if (CONST_OK_FOR_K (value))
+ return 2;
+ else
+ return 4;
+}
+
+int
+const_costs (r, c)
+ rtx r;
+ enum rtx_code c;
+{
+ HOST_WIDE_INT high, low;
+
+ switch (c)
+ {
+ case CONST_INT:
+ return const_costs_int (INTVAL (r), 0);
+
+ case CONST_DOUBLE:
+ const_double_split (r, &high, &low);
+ if (GET_MODE (r) == SFmode)
+ return const_costs_int (high, 1);
+ else
+ return const_costs_int (high, 1) + const_costs_int (low, 1);
+
+ case SYMBOL_REF:
+ case LABEL_REF:
+ case CONST:
+ return 2;
+
+ case HIGH:
+ return 1;
+
+ default:
+ return 4;
+ }
+}
+
+
+/* Print operand X using operand code CODE to assembly language output file
+ FILE. */
+
+void
+print_operand (file, x, code)
+ FILE *file;
+ rtx x;
+ int code;
+{
+ HOST_WIDE_INT high, low;
+
+ switch (code)
+ {
+ case 'b':
+ case 'B':
+ case 'c':
+ case 'C':
+ switch ((code == 'B' || code == 'C')
+ ? reverse_condition (GET_CODE (x)) : GET_CODE (x))
+ {
+ case NE:
+ if (code == 'c' || code == 'C')
+ fprintf (file, "nz");
+ else
+ fprintf (file, "ne");
+ break;
+ case EQ:
+ if (code == 'c' || code == 'C')
+ fprintf (file, "z");
+ else
+ fprintf (file, "e");
+ break;
+ case GE:
+ fprintf (file, "ge");
+ break;
+ case GT:
+ fprintf (file, "gt");
+ break;
+ case LE:
+ fprintf (file, "le");
+ break;
+ case LT:
+ fprintf (file, "lt");
+ break;
+ case GEU:
+ fprintf (file, "nl");
+ break;
+ case GTU:
+ fprintf (file, "h");
+ break;
+ case LEU:
+ fprintf (file, "nh");
+ break;
+ case LTU:
+ fprintf (file, "l");
+ break;
+ default:
+ abort ();
+ }
+ break;
+ case 'F': /* high word of CONST_DOUBLE */
+ if (GET_CODE (x) == CONST_INT)
+ fprintf (file, "%d", (INTVAL (x) >= 0) ? 0 : -1);
+ else if (GET_CODE (x) == CONST_DOUBLE)
+ {
+ const_double_split (x, &high, &low);
+ fprintf (file, "%ld", (long) high);
+ }
+ else
+ abort ();
+ break;
+ case 'G': /* low word of CONST_DOUBLE */
+ if (GET_CODE (x) == CONST_INT)
+ fprintf (file, "%ld", (long) INTVAL (x));
+ else if (GET_CODE (x) == CONST_DOUBLE)
+ {
+ const_double_split (x, &high, &low);
+ fprintf (file, "%ld", (long) low);
+ }
+ else
+ abort ();
+ break;
+ case 'L':
+ fprintf (file, "%d\n", INTVAL (x) & 0xffff);
+ break;
+ case 'M':
+ fprintf (file, "%d", exact_log2 (INTVAL (x)));
+ break;
+ case 'O':
+ if (special_symbolref_operand (x, VOIDmode))
+ {
+ char* name;
+
+ if (GET_CODE (x) == SYMBOL_REF)
+ name = XSTR (x, 0);
+ else if (GET_CODE (x) == CONST)
+ name = XSTR (XEXP (XEXP (x, 0), 0), 0);
+ else
+ abort ();
+
+ if (ZDA_NAME_P (name))
+ fprintf (file, "zdaoff");
+ else if (SDA_NAME_P (name))
+ fprintf (file, "sdaoff");
+ else if (TDA_NAME_P (name))
+ fprintf (file, "tdaoff");
+ else
+ abort();
+ }
+ else
+ abort();
+ break;
+ case 'P':
+ if (special_symbolref_operand (x, VOIDmode))
+ output_addr_const (file, x);
+ else
+ abort();
+ break;
+ case 'Q':
+ if (special_symbolref_operand (x, VOIDmode))
+ {
+ char* name;
+
+ if (GET_CODE (x) == SYMBOL_REF)
+ name = XSTR (x, 0);
+ else if (GET_CODE (x) == CONST)
+ name = XSTR (XEXP (XEXP (x, 0), 0), 0);
+ else
+ abort ();
+
+ if (ZDA_NAME_P (name))
+ fprintf (file, "r0");
+ else if (SDA_NAME_P (name))
+ fprintf (file, "gp");
+ else if (TDA_NAME_P (name))
+ fprintf (file, "ep");
+ else
+ abort();
+ }
+ else
+ abort();
+ break;
+ case 'R': /* 2nd word of a double. */
+ switch (GET_CODE (x))
+ {
+ case REG:
+ fprintf (file, reg_names[REGNO (x) + 1]);
+ break;
+ case MEM:
+ print_operand_address (file,
+ XEXP (adj_offsettable_operand (x, 4), 0));
+ break;
+ }
+ break;
+ case 'S':
+ {
+ /* if it's a reference to a TDA variable, use sst/sld vs. st/ld */
+ if (GET_CODE (x) == MEM && ep_memory_operand (x, GET_MODE (x), FALSE))
+ fputs ("s", file);
+
+ break;
+ }
+ case 'T':
+ {
+ /* Like an 'S' operand above, but for unsigned loads only. */
+ if (GET_CODE (x) == MEM && ep_memory_operand (x, GET_MODE (x), TRUE))
+ fputs ("s", file);
+
+ break;
+ }
+ case 'W': /* print the instruction suffix */
+ switch (GET_MODE (x))
+ {
+ default:
+ abort ();
+
+ case QImode: fputs (".b", file); break;
+ case HImode: fputs (".h", file); break;
+ case SImode: fputs (".w", file); break;
+ case SFmode: fputs (".w", file); break;
+ }
+ break;
+ case '.': /* register r0 */
+ fputs (reg_names[0], file);
+ break;
+ case 'z': /* reg or zero */
+ if (x == const0_rtx)
+ fputs (reg_names[0], file);
+ else if (GET_CODE (x) == REG)
+ fputs (reg_names[REGNO (x)], file);
+ else
+ abort ();
+ break;
+ default:
+ switch (GET_CODE (x))
+ {
+ case MEM:
+ if (GET_CODE (XEXP (x, 0)) == CONST_INT)
+ output_address (gen_rtx (PLUS, SImode,
+ gen_rtx (REG, SImode, 0),
+ XEXP (x, 0)));
+ else
+ output_address (XEXP (x, 0));
+ break;
+
+ case REG:
+ fputs (reg_names[REGNO (x)], file);
+ break;
+ case SUBREG:
+ fputs (reg_names[REGNO (SUBREG_REG (x)) + SUBREG_WORD (x)], file);
+ break;
+ case CONST_INT:
+ case SYMBOL_REF:
+ case CONST:
+ case LABEL_REF:
+ case CODE_LABEL:
+ print_operand_address (file, x);
+ break;
+ default:
+ abort ();
+ }
+ break;
+
+ }
+}
+
+
+/* Output assembly language output for the address ADDR to FILE. */
+
+void
+print_operand_address (file, addr)
+ FILE *file;
+ rtx addr;
+{
+ switch (GET_CODE (addr))
+ {
+ case REG:
+ fprintf (file, "0[");
+ print_operand (file, addr, 0);
+ fprintf (file, "]");
+ break;
+ case LO_SUM:
+ if (GET_CODE (XEXP (addr, 0)) == REG)
+ {
+ /* reg,foo */
+ fprintf (file, "lo(");
+ print_operand (file, XEXP (addr, 1), 0);
+ fprintf (file, ")[");
+ print_operand (file, XEXP (addr, 0), 0);
+ fprintf (file, "]");
+ }
+ break;
+ case PLUS:
+ if (GET_CODE (XEXP (addr, 0)) == REG
+ || GET_CODE (XEXP (addr, 0)) == SUBREG)
+ {
+ /* reg,foo */
+ print_operand (file, XEXP (addr, 1), 0);
+ fprintf (file, "[");
+ print_operand (file, XEXP (addr, 0), 0);
+ fprintf (file, "]");
+ }
+ else
+ {
+ print_operand (file, XEXP (addr, 0), 0);
+ fprintf (file, "+");
+ print_operand (file, XEXP (addr, 1), 0);
+ }
+ break;
+ case SYMBOL_REF:
+ if (ENCODED_NAME_P (XSTR (addr, 0)))
+ {
+ char* name = XSTR (addr, 0);
+ char* off_name;
+ char* reg_name;
+
+ if (ZDA_NAME_P (name))
+ {
+ off_name = "zdaoff";
+ reg_name = "r0";
+ }
+ else if (SDA_NAME_P (name))
+ {
+ off_name = "sdaoff";
+ reg_name = "gp";
+ }
+ else if (TDA_NAME_P (name))
+ {
+ off_name = "tdaoff";
+ reg_name = "ep";
+ }
+ else
+ abort();
+
+ fprintf (file, "%s(", off_name);
+ output_addr_const (file, addr);
+ fprintf (file, ")[%s]", reg_name);
+ }
+ else
+ output_addr_const (file, addr);
+ break;
+ case CONST:
+ if (special_symbolref_operand (addr, VOIDmode))
+ {
+ char* name = XSTR (XEXP (XEXP (addr, 0), 0), 0);
+ char* off_name;
+ char* reg_name;
+
+ if (ZDA_NAME_P (name))
+ {
+ off_name = "zdaoff";
+ reg_name = "r0";
+ }
+ else if (SDA_NAME_P (name))
+ {
+ off_name = "sdaoff";
+ reg_name = "gp";
+ }
+ else if (TDA_NAME_P (name))
+ {
+ off_name = "tdaoff";
+ reg_name = "ep";
+ }
+ else
+ abort();
+
+ fprintf (file, "%s(", off_name);
+ output_addr_const (file, addr);
+ fprintf (file, ")[%s]", reg_name);
+ }
+ else
+ output_addr_const (file, addr);
+ break;
+ default:
+ output_addr_const (file, addr);
+ break;
+ }
+}
+
+
+/* Return appropriate code to load up a 1, 2, or 4 integer/floating
+ point value. */
+
+char *
+output_move_single (operands)
+ rtx *operands;
+{
+ rtx dst = operands[0];
+ rtx src = operands[1];
+
+ if (REG_P (dst))
+ {
+ if (REG_P (src))
+ return "mov %1,%0";
+
+ else if (GET_CODE (src) == CONST_INT)
+ {
+ HOST_WIDE_INT value = INTVAL (src);
+
+ if (CONST_OK_FOR_J (value)) /* signed 5 bit immediate */
+ return "mov %1,%0";
+
+ else if (CONST_OK_FOR_K (value)) /* signed 16 bit immediate */
+ return "movea lo(%1),%.,%0";
+
+ else if (CONST_OK_FOR_L (value)) /* upper 16 bits were set */
+ return "movhi hi(%1),%.,%0";
+
+ else /* random constant */
+ return "movhi hi(%1),%.,%0\n\tmovea lo(%1),%0,%0";
+ }
+
+ else if (GET_CODE (src) == CONST_DOUBLE && GET_MODE (src) == SFmode)
+ {
+ HOST_WIDE_INT high, low;
+
+ const_double_split (src, &high, &low);
+ if (CONST_OK_FOR_J (high)) /* signed 5 bit immediate */
+ return "mov %F1,%0";
+
+ else if (CONST_OK_FOR_K (high)) /* signed 16 bit immediate */
+ return "movea lo(%F1),%.,%0";
+
+ else if (CONST_OK_FOR_L (high)) /* upper 16 bits were set */
+ return "movhi hi(%F1),%.,%0";
+
+ else /* random constant */
+ return "movhi hi(%F1),%.,%0\n\tmovea lo(%F1),%0,%0";
+ }
+
+ else if (GET_CODE (src) == MEM)
+ return "%S1ld%W1 %1,%0";
+
+ else if (special_symbolref_operand (src, VOIDmode))
+ return "movea %O1(%P1),%Q1,%0";
+
+ else if (GET_CODE (src) == LABEL_REF
+ || GET_CODE (src) == SYMBOL_REF
+ || GET_CODE (src) == CONST)
+ {
+ return "movhi hi(%1),%.,%0\n\tmovea lo(%1),%0,%0";
+ }
+
+ else if (GET_CODE (src) == HIGH)
+ return "movhi hi(%1),%.,%0";
+
+ else if (GET_CODE (src) == LO_SUM)
+ {
+ operands[2] = XEXP (src, 0);
+ operands[3] = XEXP (src, 1);
+ return "movea lo(%3),%2,%0";
+ }
+ }
+
+ else if (GET_CODE (dst) == MEM)
+ {
+ if (REG_P (src))
+ return "%S0st%W0 %1,%0";
+
+ else if (GET_CODE (src) == CONST_INT && INTVAL (src) == 0)
+ return "%S0st%W0 %.,%0";
+
+ else if (GET_CODE (src) == CONST_DOUBLE
+ && CONST0_RTX (GET_MODE (dst)) == src)
+ return "%S0st%W0 %.,%0";
+ }
+
+ fatal_insn ("output_move_single:", gen_rtx (SET, VOIDmode, dst, src));
+ return "";
+}
+
+
+/* Return appropriate code to load up an 8 byte integer or floating point value */
+
+char *
+output_move_double (operands)
+ rtx *operands;
+{
+ enum machine_mode mode = GET_MODE (operands[0]);
+ rtx dst = operands[0];
+ rtx src = operands[1];
+
+ if (register_operand (dst, mode)
+ && register_operand (src, mode))
+ {
+ if (REGNO (src) + 1 == REGNO (dst))
+ return "mov %R1,%R0\n\tmov %1,%0";
+ else
+ return "mov %1,%0\n\tmov %R1,%R0";
+ }
+
+ /* Storing 0 */
+ if (GET_CODE (dst) == MEM
+ && ((GET_CODE (src) == CONST_INT && INTVAL (src) == 0)
+ || (GET_CODE (src) == CONST_DOUBLE && CONST_DOUBLE_OK_FOR_G (src))))
+ return "st.w %.,%0\n\tst.w %.,%R0";
+
+ if (GET_CODE (src) == CONST_INT || GET_CODE (src) == CONST_DOUBLE)
+ {
+ HOST_WIDE_INT high_low[2];
+ int i;
+ rtx xop[10];
+
+ if (GET_CODE (src) == CONST_DOUBLE)
+ const_double_split (src, &high_low[1], &high_low[0]);
+ else
+ {
+ high_low[0] = INTVAL (src);
+ high_low[1] = (INTVAL (src) >= 0) ? 0 : -1;
+ }
+
+ for (i = 0; i < 2; i++)
+ {
+ xop[0] = gen_rtx (REG, SImode, REGNO (dst)+i);
+ xop[1] = GEN_INT (high_low[i]);
+ output_asm_insn (output_move_single (xop), xop);
+ }
+
+ return "";
+ }
+
+ if (GET_CODE (src) == MEM)
+ {
+ int ptrreg = -1;
+ int dreg = REGNO (dst);
+ rtx inside = XEXP (src, 0);
+
+ if (GET_CODE (inside) == REG)
+ ptrreg = REGNO (inside);
+ else if (GET_CODE (inside) == SUBREG)
+ ptrreg = REGNO (SUBREG_REG (inside)) + SUBREG_WORD (inside);
+ else if (GET_CODE (inside) == PLUS)
+ ptrreg = REGNO (XEXP (inside, 0));
+ else if (GET_CODE (inside) == LO_SUM)
+ ptrreg = REGNO (XEXP (inside, 0));
+
+ if (dreg == ptrreg)
+ return "ld.w %R1,%R0\n\tld.w %1,%0";
+ }
+
+ if (GET_CODE (src) == MEM)
+ return "ld.w %1,%0\n\tld.w %R1,%R0";
+
+ if (GET_CODE (dst) == MEM)
+ return "st.w %1,%0\n\tst.w %R1,%R0";
+
+ return "mov %1,%0\n\tmov %R1,%R0";
+}
+
+
+/* Return maximum offset supported for a short EP memory reference of mode
+ MODE and signedness UNSIGNEDP. */
+
+int
+ep_memory_offset (mode, unsignedp)
+ enum machine_mode mode;
+ int unsignedp;
+{
+ int max_offset = 0;
+
+ switch (mode)
+ {
+ case QImode:
+ max_offset = (1 << 7);
+ break;
+
+ case HImode:
+ max_offset = (1 << 8);
+ break;
+
+ case SImode:
+ case SFmode:
+ max_offset = (1 << 8);
+ break;
+ }
+
+ return max_offset;
+}
+
+/* Return true if OP is a valid short EP memory reference */
+
+int
+ep_memory_operand (op, mode, unsigned_load)
+ rtx op;
+ enum machine_mode mode;
+ int unsigned_load;
+{
+ rtx addr, op0, op1;
+ int max_offset;
+ int mask;
+
+ if (GET_CODE (op) != MEM)
+ return FALSE;
+
+ max_offset = ep_memory_offset (mode, unsigned_load);
+
+ mask = GET_MODE_SIZE (mode) - 1;
+
+ addr = XEXP (op, 0);
+ if (GET_CODE (addr) == CONST)
+ addr = XEXP (addr, 0);
+
+ switch (GET_CODE (addr))
+ {
+ default:
+ break;
+
+ case SYMBOL_REF:
+ return TDA_NAME_P (XSTR (addr, 0));
+
+ case REG:
+ return REGNO (addr) == EP_REGNUM;
+
+ case PLUS:
+ op0 = XEXP (addr, 0);
+ op1 = XEXP (addr, 1);
+ if (GET_CODE (op1) == CONST_INT
+ && INTVAL (op1) < max_offset
+ && (INTVAL (op1) & mask) == 0)
+ {
+ if (GET_CODE (op0) == REG && REGNO (op0) == EP_REGNUM)
+ return TRUE;
+
+ if (GET_CODE (op0) == SYMBOL_REF && TDA_NAME_P (XSTR (op0, 0)))
+ return TRUE;
+ }
+ break;
+ }
+
+ return FALSE;
+}
+
+/* Return true if OP is either a register or 0 */
+
+int
+reg_or_0_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ if (GET_CODE (op) == CONST_INT)
+ return INTVAL (op) == 0;
+
+ else if (GET_CODE (op) == CONST_DOUBLE)
+ return CONST_DOUBLE_OK_FOR_G (op);
+
+ else
+ return register_operand (op, mode);
+}
+
+/* Return true if OP is either a register or a signed five bit integer */
+
+int
+reg_or_int5_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ if (GET_CODE (op) == CONST_INT)
+ return CONST_OK_FOR_J (INTVAL (op));
+
+ else
+ return register_operand (op, mode);
+}
+
+/* Return true if OP is a valid call operand. */
+
+int
+call_address_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ /* Only registers are valid call operands if TARGET_LONG_CALLS. */
+ if (TARGET_LONG_CALLS)
+ return GET_CODE (op) == REG;
+ return (GET_CODE (op) == SYMBOL_REF || GET_CODE (op) == REG);
+}
+
+int
+special_symbolref_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ if (GET_CODE (op) == SYMBOL_REF)
+ return ENCODED_NAME_P (XSTR (op, 0));
+
+ else if (GET_CODE (op) == CONST)
+ return (GET_CODE (XEXP (op, 0)) == PLUS
+ && GET_CODE (XEXP (XEXP (op, 0), 0)) == SYMBOL_REF
+ && ENCODED_NAME_P (XSTR (XEXP (XEXP (op, 0), 0), 0))
+ && GET_CODE (XEXP (XEXP (op, 0), 1)) == CONST_INT
+ && CONST_OK_FOR_K (INTVAL (XEXP (XEXP (op, 0), 1))));
+
+ return FALSE;
+}
+
+int
+movsi_source_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ /* Some constants, as well as symbolic operands
+ must be done with HIGH & LO_SUM patterns. */
+ if (CONSTANT_P (op)
+ && GET_CODE (op) != HIGH
+ && !(GET_CODE (op) == CONST_INT
+ && (CONST_OK_FOR_J (INTVAL (op))
+ || CONST_OK_FOR_K (INTVAL (op))
+ || CONST_OK_FOR_L (INTVAL (op)))))
+ return special_symbolref_operand (op, mode);
+ else
+ return general_operand (op, mode);
+}
+
+int
+power_of_two_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ if (GET_CODE (op) != CONST_INT)
+ return 0;
+
+ if (exact_log2 (INTVAL (op)) == -1)
+ return 0;
+ return 1;
+}
+
+int
+not_power_of_two_operand (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ unsigned int mask;
+
+ if (mode == QImode)
+ mask = 0xff;
+ else if (mode == HImode)
+ mask = 0xffff;
+ else if (mode == SImode)
+ mask = 0xffffffff;
+ else
+ return 0;
+
+ if (GET_CODE (op) != CONST_INT)
+ return 0;
+
+ if (exact_log2 (~INTVAL (op) & mask) == -1)
+ return 0;
+ return 1;
+}
+
+
+/* Substitute memory references involving a pointer, to use the ep pointer,
+ taking care to save and preserve the ep. */
+
+static void
+substitute_ep_register (first_insn, last_insn, uses, regno, p_r1, p_ep)
+ rtx first_insn;
+ rtx last_insn;
+ int uses;
+ int regno;
+ rtx *p_r1;
+ rtx *p_ep;
+{
+ rtx reg = gen_rtx (REG, Pmode, regno);
+ rtx insn;
+ int i;
+
+ if (!*p_r1)
+ {
+ regs_ever_live[1] = 1;
+ *p_r1 = gen_rtx (REG, Pmode, 1);
+ *p_ep = gen_rtx (REG, Pmode, 30);
+ }
+
+ if (TARGET_DEBUG)
+ fprintf (stderr, "Saved %d bytes (%d uses of register %s) in function %s, starting as insn %d, ending at %d\n",
+ 2 * (uses - 3), uses, reg_names[regno],
+ IDENTIFIER_POINTER (DECL_NAME (current_function_decl)),
+ INSN_UID (first_insn), INSN_UID (last_insn));
+
+ if (GET_CODE (first_insn) == NOTE)
+ first_insn = next_nonnote_insn (first_insn);
+
+ last_insn = next_nonnote_insn (last_insn);
+ for (insn = first_insn; insn && insn != last_insn; insn = NEXT_INSN (insn))
+ {
+ if (GET_CODE (insn) == INSN)
+ {
+ rtx pattern = single_set (insn);
+
+ /* Replace the memory references. */
+ if (pattern)
+ {
+ rtx *p_mem;
+ /* Memory operands are signed by default. */
+ int unsignedp = FALSE;
+
+ if (GET_CODE (SET_DEST (pattern)) == MEM
+ && GET_CODE (SET_SRC (pattern)) == MEM)
+ p_mem = (rtx *)0;
+
+ else if (GET_CODE (SET_DEST (pattern)) == MEM)
+ p_mem = &SET_DEST (pattern);
+
+ else if (GET_CODE (SET_SRC (pattern)) == MEM)
+ p_mem = &SET_SRC (pattern);
+
+ else
+ p_mem = (rtx *)0;
+
+ if (p_mem)
+ {
+ rtx addr = XEXP (*p_mem, 0);
+
+ if (GET_CODE (addr) == REG && REGNO (addr) == regno)
+ *p_mem = change_address (*p_mem, VOIDmode, *p_ep);
+
+ else if (GET_CODE (addr) == PLUS
+ && GET_CODE (XEXP (addr, 0)) == REG
+ && REGNO (XEXP (addr, 0)) == regno
+ && GET_CODE (XEXP (addr, 1)) == CONST_INT
+ && (((unsigned)INTVAL (XEXP (addr, 1)))
+ < ep_memory_offset (GET_MODE (*p_mem),
+ unsignedp)))
+ *p_mem = change_address (*p_mem, VOIDmode,
+ gen_rtx (PLUS, Pmode,
+ *p_ep, XEXP (addr, 1)));
+ }
+ }
+ }
+ }
+
+ /* Optimize back to back cases of ep <- r1 & r1 <- ep. */
+ insn = prev_nonnote_insn (first_insn);
+ if (insn && GET_CODE (insn) == INSN
+ && GET_CODE (PATTERN (insn)) == SET
+ && SET_DEST (PATTERN (insn)) == *p_ep
+ && SET_SRC (PATTERN (insn)) == *p_r1)
+ delete_insn (insn);
+ else
+ emit_insn_before (gen_rtx (SET, Pmode, *p_r1, *p_ep), first_insn);
+
+ emit_insn_before (gen_rtx (SET, Pmode, *p_ep, reg), first_insn);
+ emit_insn_before (gen_rtx (SET, Pmode, *p_ep, *p_r1), last_insn);
+}
+
+
+/* In rare cases, correct code generation requires extra machine
+ dependent processing between the second jump optimization pass and
+ delayed branch scheduling. On those machines, define this macro
+ as a C statement to act on the code starting at INSN.
+
+ On the 850, we use it to implement the -mep mode to copy heavily used
+ pointers to ep to use the implicit addressing */
+
+void v850_reorg (start_insn)
+ rtx start_insn;
+{
+ struct {
+ int uses;
+ rtx first_insn;
+ rtx last_insn;
+ } regs[FIRST_PSEUDO_REGISTER];
+
+ int i;
+ int use_ep = FALSE;
+ rtx r1 = NULL_RTX;
+ rtx ep = NULL_RTX;
+ rtx insn;
+ rtx pattern;
+
+ /* If not ep mode, just return now */
+ if (!TARGET_EP)
+ return;
+
+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+ {
+ regs[i].uses = 0;
+ regs[i].first_insn = NULL_RTX;
+ regs[i].last_insn = NULL_RTX;
+ }
+
+ for (insn = start_insn; insn != NULL_RTX; insn = NEXT_INSN (insn))
+ {
+ switch (GET_CODE (insn))
+ {
+ /* End of basic block */
+ default:
+ if (!use_ep)
+ {
+ int max_uses = -1;
+ int max_regno = -1;
+
+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+ {
+ if (max_uses < regs[i].uses)
+ {
+ max_uses = regs[i].uses;
+ max_regno = i;
+ }
+ }
+
+ if (max_uses > 3)
+ substitute_ep_register (regs[max_regno].first_insn,
+ regs[max_regno].last_insn,
+ max_uses, max_regno, &r1, &ep);
+ }
+
+ use_ep = FALSE;
+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+ {
+ regs[i].uses = 0;
+ regs[i].first_insn = NULL_RTX;
+ regs[i].last_insn = NULL_RTX;
+ }
+ break;
+
+ case NOTE:
+ break;
+
+ case INSN:
+ pattern = single_set (insn);
+
+ /* See if there are any memory references we can shorten */
+ if (pattern)
+ {
+ rtx src = SET_SRC (pattern);
+ rtx dest = SET_DEST (pattern);
+ rtx mem;
+ /* Memory operands are signed by default. */
+ int unsignedp = FALSE;
+
+ if (GET_CODE (dest) == MEM && GET_CODE (src) == MEM)
+ mem = NULL_RTX;
+
+ else if (GET_CODE (dest) == MEM)
+ mem = dest;
+
+ else if (GET_CODE (src) == MEM)
+ mem = src;
+
+ else
+ mem = NULL_RTX;
+
+ if (mem && ep_memory_operand (mem, GET_MODE (mem), unsignedp))
+ use_ep = TRUE;
+
+ else if (!use_ep && mem
+ && GET_MODE_SIZE (GET_MODE (mem)) <= UNITS_PER_WORD)
+ {
+ rtx addr = XEXP (mem, 0);
+ int regno = -1;
+ int short_p;
+
+ if (GET_CODE (addr) == REG)
+ {
+ short_p = TRUE;
+ regno = REGNO (addr);
+ }
+
+ else if (GET_CODE (addr) == PLUS
+ && GET_CODE (XEXP (addr, 0)) == REG
+ && GET_CODE (XEXP (addr, 1)) == CONST_INT
+ && (((unsigned)INTVAL (XEXP (addr, 1)))
+ < ep_memory_offset (GET_MODE (mem), unsignedp)))
+ {
+ short_p = TRUE;
+ regno = REGNO (XEXP (addr, 0));
+ }
+
+ else
+ short_p = FALSE;
+
+ if (short_p)
+ {
+ regs[regno].uses++;
+ regs[regno].last_insn = insn;
+ if (!regs[regno].first_insn)
+ regs[regno].first_insn = insn;
+ }
+ }
+
+ /* Loading up a register in the basic block zaps any savings
+ for the register */
+ if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG)
+ {
+ enum machine_mode mode = GET_MODE (dest);
+ int word = 0;
+ int regno;
+ int endregno;
+
+ while (GET_CODE (dest) == SUBREG)
+ {
+ word = SUBREG_WORD (dest);
+ dest = SUBREG_REG (dest);
+ }
+
+ regno = REGNO (dest) + word;
+ endregno = regno + HARD_REGNO_NREGS (regno, mode);
+
+ if (!use_ep)
+ {
+ /* See if we can use the pointer before this
+ modification. */
+ int max_uses = -1;
+ int max_regno = -1;
+
+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+ {
+ if (max_uses < regs[i].uses)
+ {
+ max_uses = regs[i].uses;
+ max_regno = i;
+ }
+ }
+
+ if (max_uses > 3
+ && max_regno >= regno
+ && max_regno < endregno)
+ {
+ substitute_ep_register (regs[max_regno].first_insn,
+ regs[max_regno].last_insn,
+ max_uses, max_regno, &r1, &ep);
+
+ /* Since we made a substitution, zap all remembered
+ registers. */
+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+ {
+ regs[i].uses = 0;
+ regs[i].first_insn = NULL_RTX;
+ regs[i].last_insn = NULL_RTX;
+ }
+ }
+ }
+
+ for (i = regno; i < endregno; i++)
+ {
+ regs[i].uses = 0;
+ regs[i].first_insn = NULL_RTX;
+ regs[i].last_insn = NULL_RTX;
+ }
+ }
+ }
+ }
+ }
+}
+
+
+/* # of registers saved by the interrupt handler. */
+#define INTERRUPT_FIXED_NUM 4
+
+/* # of bytes for registers saved by the interrupt handler. */
+#define INTERRUPT_FIXED_SAVE_SIZE (4 * INTERRUPT_FIXED_NUM)
+
+/* # of registers saved in register parameter area. */
+#define INTERRUPT_REGPARM_NUM 4
+/* # of words saved for other registers. */
+#define INTERRUPT_ALL_SAVE_NUM \
+ (30 - INTERRUPT_FIXED_NUM + INTERRUPT_REGPARM_NUM)
+
+#define INTERRUPT_ALL_SAVE_SIZE (4 * INTERRUPT_ALL_SAVE_NUM)
+
+int
+compute_register_save_size (p_reg_saved)
+ long *p_reg_saved;
+{
+ int size = 0;
+ int i;
+ int interrupt_handler = v850_interrupt_function_p (current_function_decl);
+ int call_p = regs_ever_live[31];
+ long reg_saved = 0;
+
+ /* Count the return pointer if we need to save it. */
+ if (profile_flag && !call_p)
+ regs_ever_live[31] = call_p = 1;
+
+ /* Count space for the register saves. */
+ if (interrupt_handler)
+ {
+ for (i = 0; i <= 31; i++)
+ switch (i)
+ {
+ default:
+ if (regs_ever_live[i] || call_p)
+ {
+ size += 4;
+ reg_saved |= 1L << i;
+ }
+ break;
+
+ /* We don't save/restore r0 or the stack pointer */
+ case 0:
+ case STACK_POINTER_REGNUM:
+ break;
+
+ /* For registers with fixed use, we save them, set them to the
+ appropriate value, and then restore them.
+ These registers are handled specially, so don't list them
+ on the list of registers to save in the prologue. */
+ case 1: /* temp used to hold ep */
+ case 4: /* gp */
+ case 10: /* temp used to call interrupt save/restore */
+ case EP_REGNUM: /* ep */
+ size += 4;
+ break;
+ }
+ }
+
+ else
+ for (i = 0; i <= 31; i++)
+ if (regs_ever_live[i] && ((! call_used_regs[i]) || i == 31))
+ {
+ size += 4;
+ reg_saved |= 1L << i;
+ }
+
+ if (p_reg_saved)
+ *p_reg_saved = reg_saved;
+
+ return size;
+}
+
+int
+compute_frame_size (size, p_reg_saved)
+ int size;
+ long *p_reg_saved;
+{
+ extern int current_function_outgoing_args_size;
+
+ return (size
+ + compute_register_save_size (p_reg_saved)
+ + current_function_outgoing_args_size);
+}
+
+
+void
+expand_prologue ()
+{
+ unsigned int i;
+ int offset;
+ unsigned int size = get_frame_size ();
+ unsigned int actual_fsize;
+ unsigned int init_stack_alloc = 0;
+ rtx save_regs[32];
+ rtx save_all;
+ int num_save;
+ int default_stack;
+ int code;
+ int interrupt_handler = v850_interrupt_function_p (current_function_decl);
+ long reg_saved = 0;
+
+ actual_fsize = compute_frame_size (size, &reg_saved);
+
+ /* Save/setup global registers for interrupt functions right now */
+ if (interrupt_handler)
+ {
+ emit_insn (gen_save_interrupt ());
+ actual_fsize -= INTERRUPT_FIXED_SAVE_SIZE;
+ if (((1L << 31) & reg_saved) != 0)
+ actual_fsize -= INTERRUPT_ALL_SAVE_SIZE;
+ }
+
+ /* Save arg registers to the stack if necessary. */
+ else if (current_function_anonymous_args)
+ {
+ if (TARGET_PROLOG_FUNCTION)
+ emit_insn (gen_save_r6_r9 ());
+ else
+ {
+ offset = 0;
+ for (i = 6; i < 10; i++)
+ {
+ emit_move_insn (gen_rtx (MEM, SImode,
+ plus_constant (stack_pointer_rtx,
+ offset)),
+ gen_rtx (REG, SImode, i));
+ offset += 4;
+ }
+ }
+ }
+
+ /* Identify all of the saved registers */
+ num_save = 0;
+ default_stack = 0;
+ for (i = 1; i < 31; i++)
+ {
+ if (((1L << i) & reg_saved) != 0)
+ save_regs[num_save++] = gen_rtx (REG, Pmode, i);
+ }
+
+ /* If the return pointer is saved, the helper functions also allocate
+ 16 bytes of stack for arguments to be saved in. */
+ if (((1L << 31) & reg_saved) != 0)
+ {
+ save_regs[num_save++] = gen_rtx (REG, Pmode, 31);
+ default_stack = 16;
+ }
+
+ /* See if we have an insn that allocates stack space and saves the particular
+ registers we want to. */
+ save_all = NULL_RTX;
+ if (TARGET_PROLOG_FUNCTION && num_save > 0 && actual_fsize >= default_stack)
+ {
+ int alloc_stack = (4 * num_save) + default_stack;
+ int unalloc_stack = actual_fsize - alloc_stack;
+ int save_func_len = 4;
+ int save_normal_len;
+
+ if (unalloc_stack)
+ save_func_len += CONST_OK_FOR_J (unalloc_stack) ? 2 : 4;
+
+ /* see if we would have used ep to save the stack */
+ if (TARGET_EP && num_save > 3 && (unsigned)actual_fsize < 255)
+ save_normal_len = (3 * 2) + (2 * num_save);
+ else
+ save_normal_len = 4 * num_save;
+
+ save_normal_len += CONST_OK_FOR_J (actual_fsize) ? 2 : 4;
+
+ /* Don't bother checking if we don't actually save any space.
+ This happens for instance if one register is saved and additional
+ stack space is allocated. */
+ if (save_func_len < save_normal_len)
+ {
+ save_all = gen_rtx (PARALLEL, VOIDmode, rtvec_alloc (num_save + (TARGET_V850 ? 2 : 1)));
+ XVECEXP (save_all, 0, 0) = gen_rtx (SET, VOIDmode,
+ stack_pointer_rtx,
+ gen_rtx (PLUS, Pmode,
+ stack_pointer_rtx,
+ GEN_INT (-alloc_stack)));
+
+ if (TARGET_V850)
+ {
+ XVECEXP (save_all, 0, num_save+1)
+ = gen_rtx (CLOBBER, VOIDmode, gen_rtx (REG, Pmode, 10));
+ }
+
+ offset = - default_stack;
+ for (i = 0; i < num_save; i++)
+ {
+ XVECEXP (save_all, 0, i+1)
+ = gen_rtx (SET, VOIDmode,
+ gen_rtx (MEM, Pmode,
+ plus_constant (stack_pointer_rtx, offset)),
+ save_regs[i]);
+ offset -= 4;
+ }
+
+ code = recog (save_all, NULL_RTX, NULL_PTR);
+ if (code >= 0)
+ {
+ rtx insn = emit_insn (save_all);
+ INSN_CODE (insn) = code;
+ actual_fsize -= alloc_stack;
+
+ if (TARGET_DEBUG)
+ fprintf (stderr, "Saved %d bytes via prologue function (%d vs. %d) for function %s\n",
+ save_normal_len - save_func_len,
+ save_normal_len, save_func_len,
+ IDENTIFIER_POINTER (DECL_NAME (current_function_decl)));
+ }
+ else
+ save_all = NULL_RTX;
+ }
+ }
+
+ /* If no prolog save function is available, store the registers the old fashioned
+ way (one by one). */
+ if (!save_all)
+ {
+ /* Special case interrupt functions that save all registers for a call. */
+ if (interrupt_handler && ((1L << 31) & reg_saved) != 0)
+ emit_insn (gen_save_all_interrupt ());
+
+ else
+ {
+ /* If the stack is too big, allocate it in chunks so we can do the
+ register saves. We use the register save size so we use the ep
+ register. */
+ if (actual_fsize && !CONST_OK_FOR_K (-actual_fsize))
+ init_stack_alloc = compute_register_save_size (NULL);
+ else
+ init_stack_alloc = actual_fsize;
+
+ /* Save registers at the beginning of the stack frame */
+ offset = init_stack_alloc - 4;
+
+ if (init_stack_alloc)
+ emit_insn (gen_addsi3 (stack_pointer_rtx,
+ stack_pointer_rtx,
+ GEN_INT (-init_stack_alloc)));
+
+ /* Save the return pointer first. */
+ if (num_save > 0 && REGNO (save_regs[num_save-1]) == 31)
+ {
+ emit_move_insn (gen_rtx (MEM, SImode,
+ plus_constant (stack_pointer_rtx,
+ offset)),
+ save_regs[--num_save]);
+ offset -= 4;
+ }
+
+ for (i = 0; i < num_save; i++)
+ {
+ emit_move_insn (gen_rtx (MEM, SImode,
+ plus_constant (stack_pointer_rtx,
+ offset)),
+ save_regs[i]);
+ offset -= 4;
+ }
+ }
+ }
+
+ /* Allocate the rest of the stack that was not allocated above (either it is
+ > 32K or we just called a function to save the registers and needed more
+ stack. */
+ if (actual_fsize > init_stack_alloc)
+ {
+ int diff = actual_fsize - init_stack_alloc;
+ if (CONST_OK_FOR_K (diff))
+ emit_insn (gen_addsi3 (stack_pointer_rtx,
+ stack_pointer_rtx,
+ GEN_INT (-diff)));
+ else
+ {
+ rtx reg = gen_rtx (REG, Pmode, 12);
+ emit_move_insn (reg, GEN_INT (-diff));
+ emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, reg));
+ }
+ }
+
+ /* If we need a frame pointer, set it up now. */
+ if (frame_pointer_needed)
+ emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx);
+}
+
+
+void
+expand_epilogue ()
+{
+ unsigned int i;
+ int offset;
+ unsigned int size = get_frame_size ();
+ long reg_saved = 0;
+ unsigned int actual_fsize = compute_frame_size (size, &reg_saved);
+ unsigned int init_stack_free = 0;
+ rtx restore_regs[32];
+ rtx restore_all;
+ int num_restore;
+ int default_stack;
+ int code;
+ int interrupt_handler = v850_interrupt_function_p (current_function_decl);
+
+ /* Eliminate the initial stack stored by interrupt functions. */
+ if (interrupt_handler)
+ {
+ actual_fsize -= INTERRUPT_FIXED_SAVE_SIZE;
+ if (((1L << 31) & reg_saved) != 0)
+ actual_fsize -= INTERRUPT_ALL_SAVE_SIZE;
+ }
+
+ /* Cut off any dynamic stack created. */
+ if (frame_pointer_needed)
+ emit_move_insn (stack_pointer_rtx, hard_frame_pointer_rtx);
+
+ /* Identify all of the saved registers */
+ num_restore = 0;
+ default_stack = 0;
+ for (i = 1; i < 31; i++)
+ {
+ if (((1L << i) & reg_saved) != 0)
+ restore_regs[num_restore++] = gen_rtx (REG, Pmode, i);
+ }
+
+ /* If the return pointer is saved, the helper functions also allocate
+ 16 bytes of stack for arguments to be saved in. */
+ if (((1L << 31) & reg_saved) != 0)
+ {
+ restore_regs[num_restore++] = gen_rtx (REG, Pmode, 31);
+ default_stack = 16;
+ }
+
+ /* See if we have an insn that restores the particular registers we
+ want to. */
+ restore_all = NULL_RTX;
+ if (TARGET_PROLOG_FUNCTION && num_restore > 0 && actual_fsize >= default_stack
+ && !interrupt_handler)
+ {
+ int alloc_stack = (4 * num_restore) + default_stack;
+ int unalloc_stack = actual_fsize - alloc_stack;
+ int restore_func_len = 4;
+ int restore_normal_len;
+
+ if (unalloc_stack)
+ restore_func_len += CONST_OK_FOR_J (unalloc_stack) ? 2 : 4;
+
+ /* see if we would have used ep to restore the registers */
+ if (TARGET_EP && num_restore > 3 && (unsigned)actual_fsize < 255)
+ restore_normal_len = (3 * 2) + (2 * num_restore);
+ else
+ restore_normal_len = 4 * num_restore;
+
+ restore_normal_len += (CONST_OK_FOR_J (actual_fsize) ? 2 : 4) + 2;
+
+ /* Don't bother checking if we don't actually save any space. */
+ if (restore_func_len < restore_normal_len)
+ {
+ restore_all = gen_rtx (PARALLEL, VOIDmode,
+ rtvec_alloc (num_restore + 2));
+ XVECEXP (restore_all, 0, 0) = gen_rtx (RETURN, VOIDmode);
+ XVECEXP (restore_all, 0, 1)
+ = gen_rtx (SET, VOIDmode, stack_pointer_rtx,
+ gen_rtx (PLUS, Pmode,
+ stack_pointer_rtx,
+ GEN_INT (alloc_stack)));
+
+ offset = alloc_stack - 4;
+ for (i = 0; i < num_restore; i++)
+ {
+ XVECEXP (restore_all, 0, i+2)
+ = gen_rtx (SET, VOIDmode,
+ restore_regs[i],
+ gen_rtx (MEM, Pmode,
+ plus_constant (stack_pointer_rtx, offset)));
+ offset -= 4;
+ }
+
+ code = recog (restore_all, NULL_RTX, NULL_PTR);
+ if (code >= 0)
+ {
+ rtx insn;
+
+ actual_fsize -= alloc_stack;
+ if (actual_fsize)
+ {
+ if (CONST_OK_FOR_K (actual_fsize))
+ emit_insn (gen_addsi3 (stack_pointer_rtx,
+ stack_pointer_rtx,
+ GEN_INT (actual_fsize)));
+ else
+ {
+ rtx reg = gen_rtx (REG, Pmode, 12);
+ emit_move_insn (reg, GEN_INT (actual_fsize));
+ emit_insn (gen_addsi3 (stack_pointer_rtx,
+ stack_pointer_rtx,
+ reg));
+ }
+ }
+
+ insn = emit_jump_insn (restore_all);
+ INSN_CODE (insn) = code;
+
+ if (TARGET_DEBUG)
+ fprintf (stderr, "Saved %d bytes via epilogue function (%d vs. %d) in function %s\n",
+ restore_normal_len - restore_func_len,
+ restore_normal_len, restore_func_len,
+ IDENTIFIER_POINTER (DECL_NAME (current_function_decl)));
+ }
+ else
+ restore_all = NULL_RTX;
+ }
+ }
+
+ /* If no epilog save function is available, restore the registers the
+ old fashioned way (one by one). */
+ if (!restore_all)
+ {
+ /* If the stack is large, we need to cut it down in 2 pieces. */
+ if (actual_fsize && !CONST_OK_FOR_K (-actual_fsize))
+ init_stack_free = 4 * num_restore;
+ else
+ init_stack_free = actual_fsize;
+
+ /* Deallocate the rest of the stack if it is > 32K or if extra stack
+ was allocated for an interrupt handler that makes a call. */
+ if (actual_fsize > init_stack_free || (interrupt_handler && actual_fsize))
+ {
+ int diff = actual_fsize - ((interrupt_handler) ? 0 : init_stack_free);
+ if (CONST_OK_FOR_K (diff))
+ emit_insn (gen_addsi3 (stack_pointer_rtx,
+ stack_pointer_rtx,
+ GEN_INT (diff)));
+ else
+ {
+ rtx reg = gen_rtx (REG, Pmode, 12);
+ emit_move_insn (reg, GEN_INT (diff));
+ emit_insn (gen_addsi3 (stack_pointer_rtx,
+ stack_pointer_rtx,
+ reg));
+ }
+ }
+
+ /* Special case interrupt functions that save all registers
+ for a call. */
+ if (interrupt_handler && ((1L << 31) & reg_saved) != 0)
+ emit_insn (gen_restore_all_interrupt ());
+ else
+ {
+ /* Restore registers from the beginning of the stack frame */
+ offset = init_stack_free - 4;
+
+ /* Restore the return pointer first. */
+ if (num_restore > 0 && REGNO (restore_regs[num_restore-1]) == 31)
+ {
+ emit_move_insn (restore_regs[--num_restore],
+ gen_rtx (MEM, SImode,
+ plus_constant (stack_pointer_rtx,
+ offset)));
+ offset -= 4;
+ }
+
+ for (i = 0; i < num_restore; i++)
+ {
+ emit_move_insn (restore_regs[i],
+ gen_rtx (MEM, SImode,
+ plus_constant (stack_pointer_rtx,
+ offset)));
+
+ offset -= 4;
+ }
+
+ /* Cut back the remainder of the stack. */
+ if (init_stack_free)
+ emit_insn (gen_addsi3 (stack_pointer_rtx,
+ stack_pointer_rtx,
+ GEN_INT (init_stack_free)));
+ }
+
+ /* And return or use reti for interrupt handlers. */
+ if (interrupt_handler)
+ emit_jump_insn (gen_restore_interrupt ());
+ else if (actual_fsize)
+ emit_jump_insn (gen_return_internal ());
+ else
+ emit_jump_insn (gen_return ());
+ }
+
+ current_function_anonymous_args = 0;
+ v850_interrupt_cache_p = FALSE;
+ v850_interrupt_p = FALSE;
+}
+
+
+/* Update the condition code from the insn. */
+
+void
+notice_update_cc (body, insn)
+ rtx body;
+ rtx insn;
+{
+ switch (get_attr_cc (insn))
+ {
+ case CC_NONE:
+ /* Insn does not affect CC at all. */
+ break;
+
+ case CC_NONE_0HIT:
+ /* Insn does not change CC, but the 0'th operand has been changed. */
+ if (cc_status.value1 != 0
+ && reg_overlap_mentioned_p (recog_operand[0], cc_status.value1))
+ cc_status.value1 = 0;
+ break;
+
+ case CC_SET_ZN:
+ /* Insn sets the Z,N flags of CC to recog_operand[0].
+ V,C is in an unusable state. */
+ CC_STATUS_INIT;
+ cc_status.flags |= CC_OVERFLOW_UNUSABLE | CC_NO_CARRY;
+ cc_status.value1 = recog_operand[0];
+ break;
+
+ case CC_SET_ZNV:
+ /* Insn sets the Z,N,V flags of CC to recog_operand[0].
+ C is in an unusable state. */
+ CC_STATUS_INIT;
+ cc_status.flags |= CC_NO_CARRY;
+ cc_status.value1 = recog_operand[0];
+ break;
+
+ case CC_COMPARE:
+ /* The insn is a compare instruction. */
+ CC_STATUS_INIT;
+ cc_status.value1 = SET_SRC (body);
+ break;
+
+ case CC_CLOBBER:
+ /* Insn doesn't leave CC in a usable state. */
+ CC_STATUS_INIT;
+ break;
+ }
+}
+
+
+/* Return nonzero if ATTR is a valid attribute for DECL.
+ ATTRIBUTES are any existing attributes and ARGS are the arguments
+ supplied with ATTR.
+
+ Supported attributes:
+
+ interrupt_handler or interrupt: output a prologue and epilogue suitable
+ for an interrupt handler. */
+
+int
+v850_valid_machine_decl_attribute (decl, attributes, attr, args)
+ tree decl;
+ tree attributes;
+ tree attr;
+ tree args;
+{
+ if (args != NULL_TREE)
+ return 0;
+
+ if (is_attribute_p ("interrupt_handler", attr)
+ || is_attribute_p ("interrupt", attr))
+ return TREE_CODE (decl) == FUNCTION_DECL;
+
+ return 0;
+}
+
+
+/* Return nonzero if FUNC is an interrupt function as specified
+ by the "interrupt" attribute. */
+
+int
+v850_interrupt_function_p (func)
+ tree func;
+{
+ tree a;
+ int ret = 0;
+
+ if (v850_interrupt_cache_p)
+ return v850_interrupt_p;
+
+ if (TREE_CODE (func) != FUNCTION_DECL)
+ return 0;
+
+ a = lookup_attribute ("interrupt_handler", DECL_MACHINE_ATTRIBUTES (func));
+ if (a != NULL_TREE)
+ ret = 1;
+
+ else
+ {
+ a = lookup_attribute ("interrupt", DECL_MACHINE_ATTRIBUTES (func));
+ ret = a != NULL_TREE;
+ }
+
+ /* Its not safe to trust global variables until after function inlining has
+ been done. */
+ if (reload_completed | reload_in_progress)
+ v850_interrupt_p = ret;
+
+ return ret;
+}
+
+
+extern struct obstack *saveable_obstack;
+
+v850_encode_data_area (decl)
+ tree decl;
+{
+ char *str = XSTR (XEXP (DECL_RTL (decl), 0), 0);
+ int len = strlen (str);
+ char *newstr;
+
+ /* In the Cygnus sources we actually do something; this is just
+ here to make merges easier. */
+ return;
+}
+
+/* Return true if the given RTX is a register which can be restored
+ by a function epilogue. */
+int
+register_is_ok_for_epilogue (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ /* The save/restore routines can only cope with registers 2, and 20 - 31 */
+ return (GET_CODE (op) == REG)
+ && (((REGNO (op) >= 20) && REGNO (op) <= 31)
+ || REGNO (op) == 2);
+}
+
+/* Return non-zero if the given RTX is suitable for collapsing into
+ jump to a function epilogue. */
+int
+pattern_is_ok_for_epilogue (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ int count = XVECLEN (op, 0);
+ int i;
+
+ /* If there are no registers to restore then the function epilogue
+ is not suitable. */
+ if (count <= 2)
+ return 0;
+
+ /* The pattern matching has already established that we are performing a
+ function epilogue and that we are popping at least one register. We must
+ now check the remaining entries in the vector to make sure that they are
+ also register pops. There is no good reason why there should ever be
+ anything else in this vector, but being paranoid always helps...
+
+ The test below performs the C equivalent of this machine description
+ pattern match:
+
+ (set (match_operand:SI n "register_is_ok_for_epilogue" "r")
+ (mem:SI (plus:SI (reg:SI 3) (match_operand:SI n "immediate_operand" "i"))))
+ */
+
+ for (i = 3; i < count; i++)
+ {
+ rtx vector_element = XVECEXP (op, 0, i);
+ rtx dest;
+ rtx src;
+ rtx plus;
+
+ if (GET_CODE (vector_element) != SET)
+ return 0;
+
+ dest = SET_DEST (vector_element);
+ src = SET_SRC (vector_element);
+
+ if (GET_CODE (dest) != REG
+ || GET_MODE (dest) != SImode
+ || ! register_is_ok_for_epilogue (dest, SImode)
+ || GET_CODE (src) != MEM
+ || GET_MODE (src) != SImode)
+ return 0;
+
+ plus = XEXP (src, 0);
+
+ if (GET_CODE (plus) != PLUS
+ || GET_CODE (XEXP (plus, 0)) != REG
+ || GET_MODE (XEXP (plus, 0)) != SImode
+ || REGNO (XEXP (plus, 0)) != STACK_POINTER_REGNUM
+ || GET_CODE (XEXP (plus, 1)) != CONST_INT)
+ return 0;
+ }
+
+ return 1;
+}
+
+/* Construct a JR instruction to a routine that will perform the equivalent of
+ the RTL passed in as an argument. This RTL is a function epilogue that
+ pops registers off the stack and possibly releases some extra stack space
+ as well. The code has already verified that the RTL matches these
+ requirements. */
+char *
+construct_restore_jr (op)
+ rtx op;
+{
+ int count = XVECLEN (op, 0);
+ int stack_bytes;
+ unsigned long int mask;
+ unsigned long int first;
+ unsigned long int last;
+ int i;
+ static char buff [100]; /* XXX */
+
+ if (count <= 2)
+ {
+ error ("Bogus JR construction: %d\n", count);
+ return NULL;
+ }
+
+ /* Work out how many bytes to pop off the stack before retrieving
+ registers. */
+ if (GET_CODE (XVECEXP (op, 0, 1)) != SET)
+ abort ();
+ if (GET_CODE (SET_SRC (XVECEXP (op, 0, 1))) != PLUS)
+ abort ();
+ if (GET_CODE (XEXP (SET_SRC (XVECEXP (op, 0, 1)), 1)) != CONST_INT)
+ abort ();
+
+ stack_bytes = INTVAL (XEXP (SET_SRC (XVECEXP (op, 0, 1)), 1));
+
+ /* Each pop will remove 4 bytes from the stack... */
+ stack_bytes -= (count - 2) * 4;
+
+ /* Make sure that the amount we are popping either 0 or 16 bytes. */
+ if (stack_bytes != 0 && stack_bytes != 16)
+ {
+ error ("Bad amount of stack space removal: %d", stack_bytes);
+ return NULL;
+ }
+
+ /* Now compute the bit mask of registers to push. */
+ mask = 0;
+ for (i = 2; i < count; i++)
+ {
+ rtx vector_element = XVECEXP (op, 0, i);
+
+ if (GET_CODE (vector_element) != SET)
+ abort ();
+ if (GET_CODE (SET_DEST (vector_element)) != REG)
+ abort ();
+ if (! register_is_ok_for_epilogue (SET_DEST (vector_element), SImode))
+ abort ();
+
+ mask |= 1 << REGNO (SET_DEST (vector_element));
+ }
+
+ /* Scan for the first register to pop. */
+ for (first = 0; first < 32; first++)
+ {
+ if (mask & (1 << first))
+ break;
+ }
+
+ if (first >= 32)
+ abort ();
+
+ /* Discover the last register to pop. */
+ if (mask & (1 << 31))
+ {
+ if (stack_bytes != 16)
+ abort ();
+
+ last = 31;
+ }
+ else
+ {
+ if (stack_bytes != 0)
+ abort ();
+ if ((mask & (1 << 29)) == 0)
+ abort ();
+
+ last = 29;
+ }
+
+ /* Paranoia */
+ for (i = (first == 2 ? 20 : first + 1); i < 29; i++)
+ if ((mask & (1 << i)) == 0)
+ abort ();
+
+ if (first == last)
+ sprintf (buff, "jr __return_%s", reg_names [first]);
+ else
+ sprintf (buff, "jr __return_%s_%s", reg_names [first], reg_names [last]);
+
+ return buff;
+}
+
+
+/* Return non-zero if the given RTX is suitable for collapsing into
+ a jump to a function prologue. */
+int
+pattern_is_ok_for_prologue (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ int count = XVECLEN (op, 0);
+ int i;
+ rtx vector_element;
+
+ /* If there are no registers to save then the function prologue
+ is not suitable. */
+ if (count <= 2)
+ return 0;
+
+ /* The pattern matching has already established that we are adjusting the
+ stack and pushing at least one register. We must now check that the
+ remaining entries in the vector to make sure that they are also register
+ pushes, except for the last entry which should be a CLOBBER of r10.
+
+ The test below performs the C equivalent of this machine description
+ pattern match:
+
+ (set (mem:SI (plus:SI (reg:SI 3)
+ (match_operand:SI 2 "immediate_operand" "i")))
+ (match_operand:SI 3 "register_is_ok_for_epilogue" "r"))
+
+ */
+
+ for (i = 2; i < count - 1; i++)
+ {
+ rtx dest;
+ rtx src;
+ rtx plus;
+
+ vector_element = XVECEXP (op, 0, i);
+
+ if (GET_CODE (vector_element) != SET)
+ return 0;
+
+ dest = SET_DEST (vector_element);
+ src = SET_SRC (vector_element);
+
+ if (GET_CODE (dest) != MEM
+ || GET_MODE (dest) != SImode
+ || GET_CODE (src) != REG
+ || GET_MODE (src) != SImode
+ || ! register_is_ok_for_epilogue (src, SImode))
+ return 0;
+
+ plus = XEXP (dest, 0);
+
+ if ( GET_CODE (plus) != PLUS
+ || GET_CODE (XEXP (plus, 0)) != REG
+ || GET_MODE (XEXP (plus, 0)) != SImode
+ || REGNO (XEXP (plus, 0)) != STACK_POINTER_REGNUM
+ || GET_CODE (XEXP (plus, 1)) != CONST_INT)
+ return 0;
+
+ /* If the register is being pushed somewhere other than the stack
+ space just acquired by the first operand then abandon this quest.
+ Note: the test is <= because both values are negative. */
+ if (INTVAL (XEXP (plus, 1))
+ <= INTVAL (XEXP (SET_SRC (XVECEXP (op, 0, 0)), 1)))
+ {
+ return 0;
+ }
+ }
+
+ /* Make sure that the last entry in the vector is a clobber. */
+ vector_element = XVECEXP (op, 0, i);
+
+ if (GET_CODE (vector_element) != CLOBBER
+ || GET_CODE (XEXP (vector_element, 0)) != REG
+ || REGNO (XEXP (vector_element, 0)) != 10)
+ return 0;
+
+ return 1;
+}
+
+/* Construct a JARL instruction to a routine that will perform the equivalent
+ of the RTL passed as a parameter. This RTL is a function prologue that
+ saves some of the registers r20 - r31 onto the stack, and possibly acquires
+ some stack space as well. The code has already verified that the RTL
+ matches these requirements. */
+char *
+construct_save_jarl (op)
+ rtx op;
+{
+ int count = XVECLEN (op, 0);
+ int stack_bytes;
+ unsigned long int mask;
+ unsigned long int first;
+ unsigned long int last;
+ int i;
+ static char buff [100]; /* XXX */
+
+ if (count <= 2)
+ {
+ error ("Bogus JARL construction: %d\n", count);
+ return NULL;
+ }
+
+ /* Paranoia. */
+ if (GET_CODE (XVECEXP (op, 0, 0)) != SET)
+ abort ();
+ if (GET_CODE (SET_SRC (XVECEXP (op, 0, 0))) != PLUS)
+ abort ();
+ if (GET_CODE (XEXP (SET_SRC (XVECEXP (op, 0, 0)), 0)) != REG)
+ abort ();
+ if (GET_CODE (XEXP (SET_SRC (XVECEXP (op, 0, 0)), 1)) != CONST_INT)
+ abort ();
+
+ /* Work out how many bytes to push onto the stack after storing the
+ registers. */
+ stack_bytes = INTVAL (XEXP (SET_SRC (XVECEXP (op, 0, 0)), 1));
+
+ /* Each push will put 4 bytes from the stack... */
+ stack_bytes += (count - 2) * 4;
+
+ /* Make sure that the amount we are popping either 0 or 16 bytes. */
+ if (stack_bytes != 0 && stack_bytes != -16)
+ {
+ error ("Bad amount of stack space removal: %d", stack_bytes);
+ return NULL;
+ }
+
+ /* Now compute the bit mask of registers to push. */
+ mask = 0;
+ for (i = 1; i < count - 1; i++)
+ {
+ rtx vector_element = XVECEXP (op, 0, i);
+
+ if (GET_CODE (vector_element) != SET)
+ abort ();
+ if (GET_CODE (SET_SRC (vector_element)) != REG)
+ abort ();
+ if (! register_is_ok_for_epilogue (SET_SRC (vector_element), SImode))
+ abort ();
+
+ mask |= 1 << REGNO (SET_SRC (vector_element));
+ }
+
+ /* Scan for the first register to push. */
+ for (first = 0; first < 32; first++)
+ {
+ if (mask & (1 << first))
+ break;
+ }
+
+ if (first >= 32)
+ abort ();
+
+ /* Discover the last register to push. */
+ if (mask & (1 << 31))
+ {
+ if (stack_bytes != -16)
+ abort();
+
+ last = 31;
+ }
+ else
+ {
+ if (stack_bytes != 0)
+ abort ();
+ if ((mask & (1 << 29)) == 0)
+ abort ();
+
+ last = 29;
+ }
+
+ /* Paranoia */
+ for (i = (first == 2 ? 20 : first + 1); i < 29; i++)
+ if ((mask & (1 << i)) == 0)
+ abort ();
+
+ if (first == last)
+ sprintf (buff, "jarl __save_%s, r10", reg_names [first]);
+ else
+ sprintf (buff, "jarl __save_%s_%s, r10", reg_names [first],
+ reg_names [last]);
+
+ return buff;
+}
+
diff --git a/gcc/config/v850/v850.h b/gcc/config/v850/v850.h
new file mode 100644
index 00000000000..19eab5fdaf8
--- /dev/null
+++ b/gcc/config/v850/v850.h
@@ -0,0 +1,1475 @@
+/* Definitions of target machine for GNU compiler. NEC V850 series
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+ Contributed by Jeff Law (law@cygnus.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 "svr4.h" /* Automatically does #undef CPP_PREDEFINES */
+
+#undef ASM_SPEC
+#define ASM_SPEC "%{mv*:-mv%*}"
+
+#ifndef CPP_SPEC
+#define CPP_SPEC "-D__v850__"
+#endif
+
+#undef ASM_FINAL_SPEC
+#undef LIB_SPEC
+#undef ENDFILE_SPEC
+#undef LINK_SPEC
+#undef STARTFILE_SPEC
+
+/* Names to predefine in the preprocessor for this target machine. */
+#define CPP_PREDEFINES "-D__v851__ -D__v850"
+
+/* Print subsidiary information on the compiler version in use. */
+
+#ifndef TARGET_VERSION
+#define TARGET_VERSION fprintf (stderr, " (NEC V850)");
+#endif
+
+
+/* Run-time compilation parameters selecting different hardware subsets. */
+
+extern int target_flags;
+
+/* Target flags bits, see below for an explanation of the bits. */
+#define MASK_GHS 0x00000001
+#define MASK_LONG_CALLS 0x00000002
+#define MASK_EP 0x00000004
+#define MASK_PROLOG_FUNCTION 0x00000008
+#define MASK_DEBUG 0x40000000
+
+#define MASK_CPU 0x00000030
+#define MASK_V850 0x00000010
+
+#define MASK_BIG_SWITCH 0x00000100
+
+#ifndef MASK_DEFAULT
+#define MASK_DEFAULT MASK_V850
+#endif
+
+#define TARGET_V850 ((target_flags & MASK_CPU) == MASK_V850)
+
+
+/* Macros used in the machine description to test the flags. */
+
+/* The GHS calling convention support doesn't really work,
+ mostly due to a lack of documentation. Outstanding issues:
+
+ * How do varargs & stdarg really work. How to they handle
+ passing structures (if at all).
+
+ * Doubles are normally 4 byte aligned, except in argument
+ lists where they are 8 byte aligned. Is the alignment
+ in the argument list based on the first parameter,
+ first stack parameter, etc etc.
+
+ * Passing/returning of large structures probably isn't the same
+ as GHS. We don't have enough documentation on their conventions
+ to be compatible.
+
+ * Tests of SETUP_INCOMING_VARARGS need to be made runtime checks
+ since it depends on TARGET_GHS. */
+#define TARGET_GHS (target_flags & MASK_GHS)
+
+/* Don't do PC-relative calls, instead load the address of the target
+ function into a register and perform a register indirect call. */
+#define TARGET_LONG_CALLS (target_flags & MASK_LONG_CALLS)
+
+/* Whether to optimize space by using ep (r30) for pointers with small offsets
+ in basic blocks. */
+#define TARGET_EP (target_flags & MASK_EP)
+
+/* Whether to call out-of-line functions to save registers or not. */
+#define TARGET_PROLOG_FUNCTION (target_flags & MASK_PROLOG_FUNCTION)
+
+/* Whether to emit 2 byte per entry or 4 byte per entry switch tables. */
+#define TARGET_BIG_SWITCH (target_flags & MASK_BIG_SWITCH)
+
+/* General debug flag */
+#define TARGET_DEBUG (target_flags & MASK_DEBUG)
+
+/* 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 \
+ {{ "ghs", MASK_GHS }, \
+ { "no-ghs", -MASK_GHS }, \
+ { "long-calls", MASK_LONG_CALLS }, \
+ { "no-long-calls", -MASK_LONG_CALLS }, \
+ { "ep", MASK_EP }, \
+ { "no-ep", -MASK_EP }, \
+ { "prolog-function", MASK_PROLOG_FUNCTION }, \
+ { "no-prolog-function", -MASK_PROLOG_FUNCTION }, \
+ { "space", MASK_EP | MASK_PROLOG_FUNCTION }, \
+ { "debug", MASK_DEBUG }, \
+ { "v850", MASK_V850 }, \
+ { "v850", -(MASK_V850 ^ MASK_CPU) }, \
+ { "big-switch", MASK_BIG_SWITCH }, \
+ EXTRA_SWITCHES \
+ { "", TARGET_DEFAULT}}
+
+#ifndef EXTRA_SWITCHES
+#define EXTRA_SWITCHES
+#endif
+
+#ifndef TARGET_DEFAULT
+#define TARGET_DEFAULT MASK_DEFAULT
+#endif
+
+/* Information about the various small memory areas. */
+struct small_memory_info {
+ char *name;
+ char *value;
+ long max;
+ long physical_max;
+};
+
+enum small_memory_type {
+ /* tiny data area, using EP as base register */
+ SMALL_MEMORY_TDA = 0,
+ /* small data area using dp as base register */
+ SMALL_MEMORY_SDA,
+ /* zero data area using r0 as base register */
+ SMALL_MEMORY_ZDA,
+ SMALL_MEMORY_max
+};
+
+extern struct small_memory_info small_memory[(int)SMALL_MEMORY_max];
+
+/* This macro is similar to `TARGET_SWITCHES' but defines names of
+ command options that have values. Its definition is an
+ initializer with a subgrouping for each command option.
+
+ Each subgrouping contains a string constant, that defines the
+ fixed part of the option name, and the address of a variable. The
+ variable, type `char *', is set to the variable part of the given
+ option if the fixed part matches. The actual option name is made
+ by appending `-m' to the specified name.
+
+ Here is an example which defines `-mshort-data-NUMBER'. If the
+ given option is `-mshort-data-512', the variable `m88k_short_data'
+ will be set to the string `"512"'.
+
+ extern char *m88k_short_data;
+ #define TARGET_OPTIONS \
+ { { "short-data-", &m88k_short_data } } */
+
+#define TARGET_OPTIONS \
+{ \
+ { "tda=", &small_memory[ (int)SMALL_MEMORY_TDA ].value }, \
+ { "tda-", &small_memory[ (int)SMALL_MEMORY_TDA ].value }, \
+ { "sda=", &small_memory[ (int)SMALL_MEMORY_SDA ].value }, \
+ { "sda-", &small_memory[ (int)SMALL_MEMORY_SDA ].value }, \
+ { "zda=", &small_memory[ (int)SMALL_MEMORY_ZDA ].value }, \
+ { "zda-", &small_memory[ (int)SMALL_MEMORY_ZDA ].value }, \
+}
+
+/* Sometimes certain combinations of command options do not make
+ sense on a particular target machine. You can define a macro
+ `OVERRIDE_OPTIONS' to take account of this. This macro, if
+ defined, is executed once just after all the command options have
+ been parsed.
+
+ Don't use this macro to turn on various extra optimizations for
+ `-O'. That is what `OPTIMIZATION_OPTIONS' is for. */
+#define OVERRIDE_OPTIONS override_options ()
+
+
+/* Show we can debug even without a frame pointer. */
+#define CAN_DEBUG_WITHOUT_FP
+
+/* Some machines may desire to change what optimizations are
+ performed for various optimization levels. This macro, if
+ defined, is executed once just after the optimization level is
+ determined and before the remainder of the command options have
+ been parsed. Values set in this macro are used as the default
+ values for the other command line options.
+
+ LEVEL is the optimization level specified; 2 if `-O2' is
+ specified, 1 if `-O' is specified, and 0 if neither is specified.
+
+ You should not use this macro to change options that are not
+ machine-specific. These should uniformly selected by the same
+ optimization level on all supported machines. Use this macro to
+ enable machine-specific optimizations.
+
+ *Do not examine `write_symbols' in this macro!* The debugging
+ options are not supposed to alter the generated code. */
+
+#define OPTIMIZATION_OPTIONS(LEVEL) \
+{ \
+ if (LEVEL) \
+ target_flags |= (MASK_EP | MASK_PROLOG_FUNCTION); \
+}
+
+
+/* Target machine storage layout */
+
+/* Define this if most significant bit is lowest numbered
+ in instructions that operate on numbered bit-fields.
+ This is not true on the NEC V850. */
+#define BITS_BIG_ENDIAN 0
+
+/* Define this if most significant byte of a word is the lowest numbered. */
+/* This is not true on the NEC V850. */
+#define BYTES_BIG_ENDIAN 0
+
+/* Define this if most significant word of a multiword number is lowest
+ numbered.
+ This is not true on the NEC V850. */
+#define WORDS_BIG_ENDIAN 0
+
+/* 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.
+ Note that this is not necessarily the width of data type `int';
+ if using 16-bit ints on a 68000, this would still be 32.
+ But on a machine with 16-bit registers, this would be 16. */
+#define BITS_PER_WORD 32
+
+/* Width of a word, in units (bytes). */
+#define UNITS_PER_WORD 4
+
+/* Width in bits of a pointer.
+ See also the macro `Pmode' defined below. */
+#define POINTER_SIZE 32
+
+/* 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.
+
+ Some simple experiments have shown that leaving UNSIGNEDP alone
+ generates the best overall code. */
+
+#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \
+ if (GET_MODE_CLASS (MODE) == MODE_INT \
+ && GET_MODE_SIZE (MODE) < 4) \
+ { (MODE) = SImode; }
+
+/* Allocation boundary (in *bits*) for storing arguments in argument list. */
+#define PARM_BOUNDARY 32
+
+/* The stack goes in 32 bit lumps. */
+#define STACK_BOUNDARY 32
+
+/* Allocation boundary (in *bits*) for the code of a function.
+ 16 is the minimum boundary; 32 would give better performance. */
+#define FUNCTION_BOUNDARY 16
+
+/* No data type wants to be aligned rounder than this. */
+#define BIGGEST_ALIGNMENT 32
+
+/* Alignment of field after `int : 0' in a structure. */
+#define EMPTY_FIELD_BOUNDARY 32
+
+/* No structure field wants to be aligned rounder than this. */
+#define BIGGEST_FIELD_ALIGNMENT 32
+
+/* Define this if move instructions will actually fail to work
+ when given unaligned data. */
+#define STRICT_ALIGNMENT 1
+
+/* Define this as 1 if `char' should by default be signed; else as 0.
+
+ On the NEC V850, loads do sign extension, so make this default. */
+#define DEFAULT_SIGNED_CHAR 1
+
+/* Define results of standard character escape sequences. */
+#define TARGET_BELL 007
+#define TARGET_BS 010
+#define TARGET_TAB 011
+#define TARGET_NEWLINE 012
+#define TARGET_VT 013
+#define TARGET_FF 014
+#define TARGET_CR 015
+
+/* Standard register usage. */
+
+/* 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. */
+
+#define FIRST_PSEUDO_REGISTER 34
+
+/* 1 for registers that have pervasive standard uses
+ and are not available for the register allocator. */
+
+#define FIXED_REGISTERS \
+ { 1, 1, 0, 1, 1, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 1, 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.
+ Aside from that, you can include as many other registers as you
+ like. */
+
+#define CALL_USED_REGISTERS \
+ { 1, 1, 0, 1, 1, 1, 1, 1, \
+ 1, 1, 1, 1, 1, 1, 1, 1, \
+ 1, 1, 1, 1, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 1, 1, \
+ 1, 1}
+
+/* List the order in which to allocate registers. Each register must be
+ listed once, even those in FIXED_REGISTERS.
+
+ On the 850, we make the return registers first, then all of the volatile
+ registers, then the saved registers in reverse order to better save the
+ registers with an out of line function, and finally the fixed
+ registers. */
+
+#define REG_ALLOC_ORDER \
+{ \
+ 10, 11, /* return registers */ \
+ 12, 13, 14, 15, 16, 17, 18, 19, /* scratch registers */ \
+ 6, 7, 8, 9, 31, /* argument registers */ \
+ 29, 28, 27, 26, 25, 24, 23, 22, /* saved registers */ \
+ 21, 20, 2, \
+ 0, 1, 3, 4, 5, 30, 32, 33 /* fixed registers */ \
+}
+
+/* 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) \
+ ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
+
+/* Value is 1 if hard register REGNO can hold a value of machine-mode
+ MODE. */
+
+#define HARD_REGNO_MODE_OK(REGNO, MODE) \
+ ((((REGNO) & 1) == 0) || (GET_MODE_SIZE (MODE) <= 4))
+
+/* 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 == MODE2 || GET_MODE_SIZE (MODE1) <= 4 && GET_MODE_SIZE (MODE2) <= 4)
+
+
+/* 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. */
+
+enum reg_class {
+ NO_REGS, GENERAL_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", "GENERAL_REGS", "ALL_REGS", "LIM_REGS" }
+
+/* Define which registers fit in which classes.
+ This is an initializer for a vector of HARD_REG_SET
+ of length N_REG_CLASSES. */
+
+#define REG_CLASS_CONTENTS \
+{ 0x00000000, /* No regs */ \
+ 0xffffffff, /* GENERAL_REGS */ \
+ 0xffffffff, /* 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) GENERAL_REGS
+
+/* The class value for index registers, and the one for base regs. */
+
+#define INDEX_REG_CLASS NO_REGS
+#define BASE_REG_CLASS GENERAL_REGS
+
+/* Get reg_class from a letter such as appears in the machine description. */
+
+#define REG_CLASS_FROM_LETTER(C) (NO_REGS)
+
+/* Macros to check register numbers against specific register classes. */
+
+/* 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.
+ Since they use reg_renumber, they are safe only once reg_renumber
+ has been allocated, which happens in local-alloc.c. */
+
+#define REGNO_OK_FOR_BASE_P(regno) \
+ ((regno) < FIRST_PSEUDO_REGISTER || reg_renumber[regno] >= 0)
+
+#define REGNO_OK_FOR_INDEX_P(regno) 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) (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) \
+ ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
+
+/* The letters I, J, K, L, M, N, O, P 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 INT_7_BITS(VALUE) ((unsigned) (VALUE) + 0x40 < 0x80)
+#define INT_8_BITS(VALUE) ((unsigned) (VALUE) + 0x80 < 0x100)
+/* zero */
+#define CONST_OK_FOR_I(VALUE) ((VALUE) == 0)
+/* 5 bit signed immediate */
+#define CONST_OK_FOR_J(VALUE) ((unsigned) (VALUE) + 0x10 < 0x20)
+/* 16 bit signed immediate */
+#define CONST_OK_FOR_K(VALUE) ((unsigned) (VALUE) + 0x8000 < 0x10000)
+/* valid constant for movhi instruction. */
+#define CONST_OK_FOR_L(VALUE) \
+ (((unsigned) ((int) (VALUE) >> 16) + 0x8000 < 0x10000) \
+ && CONST_OK_FOR_I ((VALUE & 0xffff)))
+/* 16 bit unsigned immediate */
+#define CONST_OK_FOR_M(VALUE) ((unsigned)(VALUE) < 0x10000)
+/* 5 bit unsigned immediate in shift instructions */
+#define CONST_OK_FOR_N(VALUE) ((unsigned) (VALUE) <= 31)
+
+#define CONST_OK_FOR_O(VALUE) 0
+#define CONST_OK_FOR_P(VALUE) 0
+
+
+#define CONST_OK_FOR_LETTER_P(VALUE, C) \
+ ((C) == 'I' ? CONST_OK_FOR_I (VALUE) : \
+ (C) == 'J' ? CONST_OK_FOR_J (VALUE) : \
+ (C) == 'K' ? CONST_OK_FOR_K (VALUE) : \
+ (C) == 'L' ? CONST_OK_FOR_L (VALUE) : \
+ (C) == 'M' ? CONST_OK_FOR_M (VALUE) : \
+ (C) == 'N' ? CONST_OK_FOR_N (VALUE) : \
+ (C) == 'O' ? CONST_OK_FOR_O (VALUE) : \
+ (C) == 'P' ? CONST_OK_FOR_P (VALUE) : \
+ 0)
+
+/* Similar, but for floating constants, and defining letters G and H.
+ Here VALUE is the CONST_DOUBLE rtx itself.
+
+ `G' is a zero of some form. */
+
+#define CONST_DOUBLE_OK_FOR_G(VALUE) \
+ ((GET_MODE_CLASS (GET_MODE (VALUE)) == MODE_FLOAT \
+ && (VALUE) == CONST0_RTX (GET_MODE (VALUE))) \
+ || (GET_MODE_CLASS (GET_MODE (VALUE)) == MODE_INT \
+ && CONST_DOUBLE_LOW (VALUE) == 0 \
+ && CONST_DOUBLE_HIGH (VALUE) == 0))
+
+#define CONST_DOUBLE_OK_FOR_H(VALUE) 0
+
+#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \
+ ((C) == 'G' ? CONST_DOUBLE_OK_FOR_G (VALUE) \
+ : (C) == 'H' ? CONST_DOUBLE_OK_FOR_H (VALUE) \
+ : 0)
+
+
+/* Stack layout; function entry, exit and calling. */
+
+/* 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 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 0
+
+/* Offset of first parameter from the argument pointer register value. */
+/* Is equal to the size of the saved fp + pc, even if an fp isn't
+ saved since the value is used before we know. */
+
+#define FIRST_PARM_OFFSET(FNDECL) 0
+
+/* Specify the registers used for certain standard purposes.
+ The values of these macros are register numbers. */
+
+/* Register to use for pushing function arguments. */
+#define STACK_POINTER_REGNUM 3
+
+/* Base register for access to local variables of the function. */
+#define FRAME_POINTER_REGNUM 32
+
+/* On some machines the offset between the frame pointer and starting
+ offset of the automatic variables is not known until after register
+ allocation has been done (for example, because the saved registers
+ are between these two locations). On those machines, define
+ `FRAME_POINTER_REGNUM' the number of a special, fixed register to
+ be used internally until the offset is known, and define
+ `HARD_FRAME_POINTER_REGNUM' to be actual the hard register number
+ used for the frame pointer.
+
+ You should define this macro only in the very rare circumstances
+ when it is not possible to calculate the offset between the frame
+ pointer and the automatic variables until after register
+ allocation has been completed. When this macro is defined, you
+ must also indicate in your definition of `ELIMINABLE_REGS' how to
+ eliminate `FRAME_POINTER_REGNUM' into either
+ `HARD_FRAME_POINTER_REGNUM' or `STACK_POINTER_REGNUM'.
+
+ Do not define this macro if it would be the same as
+ `FRAME_POINTER_REGNUM'. */
+#define HARD_FRAME_POINTER_REGNUM 29
+
+/* Base register for access to arguments of the function. */
+#define ARG_POINTER_REGNUM 33
+
+/* Register in which static-chain is passed to a function. */
+#define STATIC_CHAIN_REGNUM 5
+
+/* 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
+
+/* If defined, this macro specifies a table of register pairs used to
+ eliminate unneeded registers that point into the stack frame. If
+ it is not defined, the only elimination attempted by the compiler
+ is to replace references to the frame pointer with references to
+ the stack pointer.
+
+ The definition of this macro is a list of structure
+ initializations, each of which specifies an original and
+ replacement register.
+
+ On some machines, the position of the argument pointer is not
+ known until the compilation is completed. In such a case, a
+ separate hard register must be used for the argument pointer.
+ This register can be eliminated by replacing it with either the
+ frame pointer or the argument pointer, depending on whether or not
+ the frame pointer has been eliminated.
+
+ In this case, you might specify:
+ #define ELIMINABLE_REGS \
+ {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
+ {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
+ {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}
+
+ Note that the elimination of the argument pointer with the stack
+ pointer is specified first since that is the preferred elimination. */
+
+#define ELIMINABLE_REGS \
+{{ FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM }, \
+ { FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM }, \
+ { ARG_POINTER_REGNUM, STACK_POINTER_REGNUM }, \
+ { ARG_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM }} \
+
+/* A C expression that returns non-zero if the compiler is allowed to
+ try to replace register number FROM-REG with register number
+ TO-REG. This macro need only be defined if `ELIMINABLE_REGS' is
+ defined, and will usually be the constant 1, since most of the
+ cases preventing register elimination are things that the compiler
+ already knows about. */
+
+#define CAN_ELIMINATE(FROM, TO) \
+ ((TO) == STACK_POINTER_REGNUM ? ! frame_pointer_needed : 1)
+
+/* This macro is similar to `INITIAL_FRAME_POINTER_OFFSET'. It
+ specifies the initial difference between the specified pair of
+ registers. This macro must be defined if `ELIMINABLE_REGS' is
+ defined. */
+
+#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
+{ \
+ if ((FROM) == FRAME_POINTER_REGNUM) \
+ (OFFSET) = get_frame_size () + current_function_outgoing_args_size; \
+ else if ((FROM) == ARG_POINTER_REGNUM) \
+ (OFFSET) = compute_frame_size (get_frame_size (), (long *)0); \
+ else \
+ abort (); \
+}
+
+/* A guess for the V850. */
+#define PROMOTE_PROTOTYPES 1
+
+/* Keep the stack pointer constant throughout the function. */
+#define ACCUMULATE_OUTGOING_ARGS
+
+/* Value is the number of bytes of arguments automatically
+ popped when returning from a subroutine call.
+ FUNDECL is the declaration node of the function (as a tree),
+ FUNTYPE is the data type of the function (as a tree),
+ or for a library call it is an identifier node for the subroutine name.
+ SIZE is the number of bytes of arguments passed on the stack. */
+
+#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0
+
+
+/* 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. */
+
+#define CUMULATIVE_ARGS struct cum_arg
+struct cum_arg { int nbytes; };
+
+/* 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). */
+
+struct rtx_def *function_arg();
+#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
+ function_arg (&CUM, MODE, TYPE, NAMED)
+
+#define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) \
+ function_arg_partial_nregs (&CUM, MODE, TYPE, NAMED)
+
+/* 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,INDIRECT) \
+ ((CUM).nbytes = 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) \
+ ((CUM).nbytes += ((MODE) != BLKmode \
+ ? (GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) & -UNITS_PER_WORD \
+ : (int_size_in_bytes (TYPE) + UNITS_PER_WORD - 1) & -UNITS_PER_WORD))
+
+/* When a parameter is passed in a register, stack space is still
+ allocated for it. */
+#define REG_PARM_STACK_SPACE(DECL) (!TARGET_GHS ? 16 : 0)
+
+/* 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
+
+extern int current_function_anonymous_args;
+/* Do any setup necessary for varargs/stdargs functions. */
+#define SETUP_INCOMING_VARARGS(CUM, MODE, TYPE, PAS, SECOND) \
+ current_function_anonymous_args = (!TARGET_GHS ? 1 : 0);
+
+#define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \
+ ((TYPE) && int_size_in_bytes (TYPE) > 8)
+
+#define FUNCTION_ARG_CALLEE_COPIES(CUM, MODE, TYPE, NAMED) \
+ ((TYPE) && int_size_in_bytes (TYPE) > 8)
+
+/* 1 if N is a possible register number for function argument passing. */
+
+#define FUNCTION_ARG_REGNO_P(N) (N >= 6 && N <= 9)
+
+/* 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 0. */
+
+#define FUNCTION_VALUE(VALTYPE, FUNC) \
+ gen_rtx (REG, TYPE_MODE (VALTYPE), 10)
+
+/* 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, 10)
+
+/* 1 if N is a possible register number for a function value. */
+
+#define FUNCTION_VALUE_REGNO_P(N) ((N) == 10)
+
+/* Return values > 8 bytes in length in memory. */
+#define DEFAULT_PCC_STRUCT_RETURN 0
+#define RETURN_IN_MEMORY(TYPE) \
+ (int_size_in_bytes (TYPE) > 8 || TYPE_MODE (TYPE) == BLKmode)
+
+/* Register in which address to store a structure value
+ is passed to a function. On the V850 it's passed as
+ the first parameter. */
+
+#define STRUCT_VALUE 0
+
+/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
+ the stack pointer does not matter. The value is tested only in
+ functions that have frame pointers.
+ No definition is equivalent to always zero. */
+
+#define EXIT_IGNORE_STACK 1
+
+/* Output assembler code to FILE to increment profiler label # LABELNO
+ for profiling a function entry. */
+
+#define FUNCTION_PROFILER(FILE, LABELNO) ;
+
+#define TRAMPOLINE_TEMPLATE(FILE) \
+ do { \
+ fprintf (FILE, "\tjarl .+4,r12\n"); \
+ fprintf (FILE, "\tld.w 12[r12],r5\n"); \
+ fprintf (FILE, "\tld.w 16[r12],r12\n"); \
+ fprintf (FILE, "\tjmp [r12]\n"); \
+ fprintf (FILE, "\tnop\n"); \
+ fprintf (FILE, "\t.long 0\n"); \
+ fprintf (FILE, "\t.long 0\n"); \
+ } while (0)
+
+/* Length in units of the trampoline for entering a nested function. */
+
+#define TRAMPOLINE_SIZE 24
+
+/* 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. */
+
+#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
+{ \
+ emit_move_insn (gen_rtx (MEM, SImode, plus_constant ((TRAMP), 16)), \
+ (CXT)); \
+ emit_move_insn (gen_rtx (MEM, SImode, plus_constant ((TRAMP), 20)), \
+ (FNADDR)); \
+}
+
+/* Addressing modes, and classification of registers for them. */
+
+
+/* 1 if X is an rtx for a constant that is a valid address. */
+
+/* ??? This seems too exclusive. May get better code by accepting more
+ possibilities here, in particular, should accept ZDA_NAME SYMBOL_REFs. */
+
+#define CONSTANT_ADDRESS_P(X) \
+ (GET_CODE (X) == CONST_INT \
+ && CONST_OK_FOR_K (INTVAL (X)))
+
+/* Maximum number of registers that can appear in a valid memory address. */
+
+#define MAX_REGS_PER_ADDRESS 1
+
+/* 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 unless they have been allocated suitable hard regs.
+ 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.
+ Source files for reload pass need to be strict.
+ After reload, it makes no difference, since pseudo regs have
+ been eliminated by then. */
+
+#ifndef REG_OK_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_P(X) 0
+/* 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_P(X) 1
+#define REG_OK_FOR_INDEX_P_STRICT(X) 0
+#define REG_OK_FOR_BASE_P_STRICT(X) REGNO_OK_FOR_BASE_P (REGNO (X))
+#define STRICT 0
+
+#else
+
+/* Nonzero if X is a hard reg that can be used as an index. */
+#define REG_OK_FOR_INDEX_P(X) 0
+/* Nonzero if X is a hard reg that can be used as a base reg. */
+#define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
+#define STRICT 1
+
+#endif
+
+/* A C expression that defines the optional machine-dependent
+ constraint letters that can be used to segregate specific types of
+ operands, usually memory references, for the target machine.
+ Normally this macro will not be defined. If it is required for a
+ particular target machine, it should return 1 if VALUE corresponds
+ to the operand type represented by the constraint letter C. If C
+ is not defined as an extra constraint, the value returned should
+ be 0 regardless of VALUE.
+
+ For example, on the ROMP, load instructions cannot have their
+ output in r0 if the memory reference contains a symbolic address.
+ Constraint letter `Q' is defined as representing a memory address
+ that does *not* contain a symbolic address. An alternative is
+ specified with a `Q' constraint on the input and `r' on the
+ output. The next alternative specifies `m' on the input and a
+ register class that does not include r0 on the output. */
+
+#define EXTRA_CONSTRAINT(OP, C) \
+ ((C) == 'Q' ? ep_memory_operand (OP, GET_MODE (OP)) \
+ : (C) == 'R' ? special_symbolref_operand (OP, VOIDmode) \
+ : (C) == 'S' ? (GET_CODE (OP) == SYMBOL_REF && ! ZDA_NAME_P (XSTR (OP, 0))) \
+ : (C) == 'T' ? 0 \
+ : (C) == 'U' ? ((GET_CODE (OP) == SYMBOL_REF && ZDA_NAME_P (XSTR (OP, 0))) \
+ || (GET_CODE (OP) == CONST \
+ && GET_CODE (XEXP (OP, 0)) == PLUS \
+ && GET_CODE (XEXP (XEXP (OP, 0), 0)) == SYMBOL_REF \
+ && ZDA_NAME_P (XSTR (XEXP (XEXP (OP, 0), 0), 0)))) \
+ : 0)
+
+/* 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. */
+
+/* Accept either REG or SUBREG where a register is valid. */
+
+#define RTX_OK_FOR_BASE_P(X) \
+ ((REG_P (X) && REG_OK_FOR_BASE_P (X)) \
+ || (GET_CODE (X) == SUBREG && REG_P (SUBREG_REG (X)) \
+ && REG_OK_FOR_BASE_P (SUBREG_REG (X))))
+
+#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
+do { \
+ if (RTX_OK_FOR_BASE_P (X)) goto ADDR; \
+ if (CONSTANT_ADDRESS_P (X) \
+ && (MODE == QImode || INTVAL (X) % 2 == 0)) \
+ goto ADDR; \
+ if (GET_CODE (X) == LO_SUM \
+ && GET_CODE (XEXP (X, 0)) == REG \
+ && REG_OK_FOR_BASE_P (XEXP (X, 0)) \
+ && CONSTANT_P (XEXP (X, 1)) \
+ && (GET_CODE (XEXP (X, 1)) != CONST_INT \
+ || ((MODE == QImode || INTVAL (XEXP (X, 1)) % 2 == 0) \
+ && CONST_OK_FOR_K (INTVAL (XEXP (X, 1))))) \
+ && GET_MODE_SIZE (MODE) <= GET_MODE_SIZE (word_mode)) \
+ goto ADDR; \
+ if (special_symbolref_operand (X, MODE) \
+ && (GET_MODE_SIZE (MODE) <= GET_MODE_SIZE (word_mode))) \
+ goto ADDR; \
+ if (GET_CODE (X) == PLUS \
+ && CONSTANT_ADDRESS_P (XEXP (X, 1)) \
+ && (MODE == QImode || INTVAL (XEXP (X, 1)) % 2 == 0) \
+ && RTX_OK_FOR_BASE_P (XEXP (X, 0))) goto ADDR; \
+} while (0)
+
+
+/* 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. */
+
+#define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) {}
+
+/* Go to LABEL if ADDR (a legitimate address expression)
+ has an effect that depends on the machine mode it is used for. */
+
+#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) {}
+
+/* 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) \
+ (GET_CODE (X) == CONST_DOUBLE \
+ || !(GET_CODE (X) == CONST \
+ && GET_CODE (XEXP (X, 0)) == PLUS \
+ && GET_CODE (XEXP (XEXP (X, 0), 0)) == SYMBOL_REF \
+ && GET_CODE (XEXP (XEXP (X, 0), 1)) == CONST_INT \
+ && ! CONST_OK_FOR_K (INTVAL (XEXP (XEXP (X, 0), 1)))))
+
+/* In rare cases, correct code generation requires extra machine
+ dependent processing between the second jump optimization pass and
+ delayed branch scheduling. On those machines, define this macro
+ as a C statement to act on the code starting at INSN. */
+
+#define MACHINE_DEPENDENT_REORG(INSN) v850_reorg (INSN)
+
+
+/* Tell final.c how to eliminate redundant test instructions. */
+
+/* Here we define machine-dependent flags and fields in cc_status
+ (see `conditions.h'). No extra ones are needed for the vax. */
+
+/* Store in cc_status the expressions
+ that the condition codes will describe
+ after execution of an instruction whose pattern is EXP.
+ Do not alter them if the instruction would not alter the cc's. */
+
+#define CC_OVERFLOW_UNUSABLE 0x200
+#define CC_NO_CARRY CC_NO_OVERFLOW
+#define NOTICE_UPDATE_CC(EXP, INSN) notice_update_cc(EXP, INSN)
+
+/* 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)'. */
+
+#define CONST_COSTS(RTX,CODE,OUTER_CODE) \
+ case CONST_INT: \
+ case CONST_DOUBLE: \
+ case CONST: \
+ case SYMBOL_REF: \
+ case LABEL_REF: \
+ { \
+ int _zxy = const_costs(RTX, CODE); \
+ return (_zxy) ? COSTS_N_INSNS (_zxy) : 0; \
+ }
+
+/* A crude cut at RTX_COSTS for the V850. */
+
+/* Provide the costs of a rtl expression. This is in the body of a
+ switch on CODE.
+
+ There aren't DImode MOD, DIV or MULT operations, so call them
+ very expensive. Everything else is pretty much a constant cost. */
+
+#define RTX_COSTS(RTX,CODE,OUTER_CODE) \
+ case MOD: \
+ case DIV: \
+ return 60; \
+ case MULT: \
+ return 20;
+
+/* All addressing modes have the same cost on the V850 series. */
+#define ADDRESS_COST(ADDR) 1
+
+/* Nonzero if access to memory by bytes or half words is no faster
+ than accessing full words. */
+#define SLOW_BYTE_ACCESS 1
+
+/* Define this if zero-extension is slow (more than one real instruction). */
+#define SLOW_ZERO_EXTEND
+
+/* According expr.c, a value of around 6 should minimize code size, and
+ for the V850 series, that's our primary concern. */
+#define MOVE_RATIO 6
+
+/* Indirect calls are expensive, never turn a direct call
+ into an indirect call. */
+#define NO_FUNCTION_CSE
+
+/* A list of names for sections other than the standard two, which are
+ `in_text' and `in_data'. You need not define this macro on a
+ system with no other sections (that GCC needs to use). */
+#undef EXTRA_SECTIONS
+#define EXTRA_SECTIONS in_tdata, in_sdata, in_zdata, in_const, in_ctors, in_dtors
+
+/* One or more functions to be defined in `varasm.c'. These
+ functions should do jobs analogous to those of `text_section' and
+ `data_section', for your additional sections. Do not define this
+ macro if you do not define `EXTRA_SECTIONS'. */
+#undef EXTRA_SECTION_FUNCTIONS
+#define EXTRA_SECTION_FUNCTIONS \
+CONST_SECTION_FUNCTION \
+CTORS_SECTION_FUNCTION \
+DTORS_SECTION_FUNCTION \
+ \
+void \
+sdata_section () \
+{ \
+ if (in_section != in_sdata) \
+ { \
+ fprintf (asm_out_file, "%s\n", SDATA_SECTION_ASM_OP); \
+ in_section = in_sdata; \
+ } \
+} \
+ \
+void \
+tdata_section () \
+{ \
+ if (in_section != in_tdata) \
+ { \
+ fprintf (asm_out_file, "%s\n", TDATA_SECTION_ASM_OP); \
+ in_section = in_tdata; \
+ } \
+} \
+ \
+void \
+zdata_section () \
+{ \
+ if (in_section != in_zdata) \
+ { \
+ fprintf (asm_out_file, "%s\n", ZDATA_SECTION_ASM_OP); \
+ in_section = in_zdata; \
+ } \
+}
+
+#define TEXT_SECTION_ASM_OP "\t.section .text"
+#define DATA_SECTION_ASM_OP "\t.section .data"
+#define BSS_SECTION_ASM_OP "\t.section .bss"
+#define SDATA_SECTION_ASM_OP "\t.section .sdata,\"aw\""
+#define SBSS_SECTION_ASM_OP "\t.section .sbss,\"aw\""
+#define ZDATA_SECTION_ASM_OP "\t.section .zdata,\"aw\""
+#define ZBSS_SECTION_ASM_OP "\t.section .zbss,\"aw\""
+#define TDATA_SECTION_ASM_OP "\t.section .tdata,\"aw\""
+
+/* A C statement or statements to switch to the appropriate section
+ for output of EXP. You can assume that EXP is either a `VAR_DECL'
+ node or a constant of some sort. RELOC indicates whether the
+ initial value of EXP requires link-time relocations. Select the
+ section by calling `text_section' or one of the alternatives for
+ other sections.
+
+ Do not define this macro if you put all read-only variables and
+ constants in the read-only data section (usually the text section). */
+#undef SELECT_SECTION
+#define SELECT_SECTION(EXP, RELOC) \
+do { \
+ if (TREE_CODE (EXP) == VAR_DECL) \
+ { \
+ if (!TREE_READONLY (EXP) || TREE_SIDE_EFFECTS (EXP) \
+ || !DECL_INITIAL (EXP) \
+ || (DECL_INITIAL (EXP) != error_mark_node \
+ && !TREE_CONSTANT (DECL_INITIAL (EXP)))) \
+ data_section (); \
+ else \
+ const_section (); \
+ } \
+ else if (TREE_CODE (EXP) == STRING_CST) \
+ { \
+ if (! flag_writable_strings) \
+ const_section (); \
+ else \
+ data_section (); \
+ } \
+ \
+ else \
+ const_section (); \
+ \
+} while (0)
+
+/* A C statement or statements to switch to the appropriate section
+ for output of RTX in mode MODE. You can assume that RTX is some
+ kind of constant in RTL. The argument MODE is redundant except in
+ the case of a `const_int' rtx. Select the section by calling
+ `text_section' or one of the alternatives for other sections.
+
+ Do not define this macro if you put all constants in the read-only
+ data section. */
+/* #define SELECT_RTX_SECTION(MODE, RTX) */
+
+/* Output at beginning/end of assembler file. */
+#undef ASM_FILE_START
+#define ASM_FILE_START(FILE) asm_file_start(FILE)
+
+#define ASM_COMMENT_START "#"
+
+/* Output to assembler file text saying following lines
+ may contain character constants, extra white space, comments, etc. */
+
+#define ASM_APP_ON "#APP\n"
+
+/* Output to assembler file text saying following lines
+ no longer contain unusual constructs. */
+
+#define ASM_APP_OFF "#NO_APP\n"
+
+/* This is how to output an assembler line defining a `double' constant.
+ It is .double or .float, depending. */
+
+#define ASM_OUTPUT_DOUBLE(FILE, VALUE) \
+do { char dstr[30]; \
+ REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \
+ fprintf (FILE, "\t.double %s\n", dstr); \
+ } while (0)
+
+
+/* This is how to output an assembler line defining a `float' constant. */
+#define ASM_OUTPUT_FLOAT(FILE, VALUE) \
+do { char dstr[30]; \
+ REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \
+ fprintf (FILE, "\t.float %s\n", dstr); \
+ } while (0)
+
+/* This is how to output an assembler line defining an `int' constant. */
+
+#define ASM_OUTPUT_INT(FILE, VALUE) \
+( fprintf (FILE, "\t.long "), \
+ output_addr_const (FILE, (VALUE)), \
+ fprintf (FILE, "\n"))
+
+/* Likewise for `char' and `short' constants. */
+
+#define ASM_OUTPUT_SHORT(FILE, VALUE) \
+( fprintf (FILE, "\t.hword "), \
+ output_addr_const (FILE, (VALUE)), \
+ fprintf (FILE, "\n"))
+
+#define ASM_OUTPUT_CHAR(FILE, VALUE) \
+( fprintf (FILE, "\t.byte "), \
+ output_addr_const (FILE, (VALUE)), \
+ fprintf (FILE, "\n"))
+
+/* This is how to output an assembler line for a numeric constant byte. */
+#define ASM_OUTPUT_BYTE(FILE, VALUE) \
+ fprintf (FILE, "\t.byte 0x%x\n", (VALUE))
+
+/* Define the parentheses used to group arithmetic operations
+ in assembler code. */
+
+#define ASM_OPEN_PAREN "("
+#define ASM_CLOSE_PAREN ")"
+
+/* This says how to output the assembler to define a global
+ uninitialized but not common symbol.
+ Try to use asm_output_bss to implement this macro. */
+
+#define ASM_OUTPUT_BSS(FILE, DECL, NAME, SIZE, ROUNDED) \
+ asm_output_bss ((FILE), (DECL), (NAME), (SIZE), (ROUNDED))
+
+/* 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. */
+
+#define ASM_OUTPUT_LABEL(FILE, NAME) \
+ do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0)
+
+/* 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) \
+ do { fputs ("\t.global ", FILE); assemble_name (FILE, NAME); fputs ("\n", FILE);} while (0)
+
+/* This is how to output a reference to a user-level label named NAME.
+ `assemble_name' uses this. */
+
+#undef ASM_OUTPUT_LABELREF
+#define ASM_OUTPUT_LABELREF(FILE, NAME) \
+ do { \
+ char* real_name; \
+ STRIP_NAME_ENCODING (real_name, (NAME)); \
+ fprintf (FILE, "_%s", real_name); \
+ } while (0)
+
+/* 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. */
+
+#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
+( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \
+ sprintf ((OUTPUT), "%s___%d", (NAME), (LABELNO)))
+
+/* This is how we tell the assembler that two symbols have the same value. */
+
+#define ASM_OUTPUT_DEF(FILE,NAME1,NAME2) \
+ do { assemble_name(FILE, NAME1); \
+ fputs(" = ", FILE); \
+ assemble_name(FILE, NAME2); \
+ fputc('\n', FILE); } while (0)
+
+
+/* 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", "sp", "gp", "r5", "r6" , "r7", \
+ "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", \
+ "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", \
+ "r24", "r25", "r26", "r27", "r28", "r29", "ep", "r31", \
+ ".fp", ".ap"}
+
+#define ADDITIONAL_REGISTER_NAMES \
+{ { "zero", 0 }, \
+ { "hp", 2 }, \
+ { "r3", 3 }, \
+ { "r4", 4 }, \
+ { "tp", 5 }, \
+ { "fp", 29 }, \
+ { "r30", 30 }, \
+ { "lp", 31} }
+
+/* Print an instruction operand X on file FILE.
+ look in v850.c for details */
+
+#define PRINT_OPERAND(FILE, X, CODE) print_operand(FILE,X,CODE)
+
+#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
+ ((CODE) == '.')
+
+/* Print a memory operand whose address is X, on file FILE.
+ This uses a function in output-vax.c. */
+
+#define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE, ADDR)
+
+#define ASM_OUTPUT_REG_PUSH(FILE,REGNO)
+#define ASM_OUTPUT_REG_POP(FILE,REGNO)
+
+/* This is how to output an element of a case-vector that is absolute. */
+
+#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
+ asm_fprintf (FILE, "\t%s .L%d\n", \
+ (TARGET_BIG_SWITCH ? ".long" : ".short"), VALUE)
+
+/* This is how to output an element of a case-vector that is relative. */
+
+#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \
+ fprintf (FILE, "\t%s .L%d-.L%d\n", \
+ (TARGET_BIG_SWITCH ? ".long" : ".short"), \
+ VALUE, REL)
+
+#define ASM_OUTPUT_ALIGN(FILE,LOG) \
+ if ((LOG) != 0) \
+ fprintf (FILE, "\t.align %d\n", (LOG))
+
+/* We don't have to worry about dbx compatibility for the v850. */
+#define DEFAULT_GDB_EXTENSIONS 1
+
+/* Use stabs debugging info by default. */
+#undef PREFERRED_DEBUGGING_TYPE
+#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
+
+#define DBX_REGISTER_NUMBER(REGNO) REGNO
+
+/* Define to use software floating point emulator for REAL_ARITHMETIC and
+ decimal <-> binary conversion. */
+#define REAL_ARITHMETIC
+
+/* Specify the machine mode that this machine uses
+ for the index in the tablejump instruction. */
+#define CASE_VECTOR_MODE (TARGET_BIG_SWITCH ? SImode : HImode)
+
+/* Define this if the case instruction drops through after the table
+ when the index is out of range. Don't define it if the case insn
+ jumps to the default label instead. */
+/* #define CASE_DROPS_THROUGH */
+
+/* We must use a PC relative entry for small tables. It would be more
+ efficient to use an absolute entry for big tables, but this is not
+ a runtime choice yet. */
+#define CASE_VECTOR_PC_RELATIVE
+
+/* The switch instruction requires that the jump table immediately follow
+ it. */
+#define JUMP_TABLES_IN_TEXT_SECTION
+
+/* svr4.h defines this assuming that 4 byte alignment is required. */
+#undef ASM_OUTPUT_BEFORE_CASE_LABEL
+#define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE,PREFIX,NUM,TABLE) \
+ ASM_OUTPUT_ALIGN ((FILE), (TARGET_BIG_SWITCH ? 2 : 1));
+
+#define WORD_REGISTER_OPERATIONS
+
+/* Byte and short loads sign extend the value to a word. */
+#define LOAD_EXTEND_OP(MODE) SIGN_EXTEND
+
+/* Specify the tree operation to be used to convert reals to integers. */
+#define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR
+
+/* This flag, if defined, says the same insns that convert to a signed fixnum
+ also convert validly to an unsigned one. */
+#define FIXUNS_TRUNC_LIKE_FIX_TRUNC
+
+/* 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 4
+
+/* 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 1
+
+/* 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
+
+#define STORE_FLAG_VALUE 1
+
+/* 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 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 C expression whose value is nonzero if IDENTIFIER with arguments ARGS
+ is a valid machine specific attribute for DECL.
+ The attributes in ATTRIBUTES have previously been assigned to DECL. */
+#define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) \
+v850_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS)
+
+/* Tell compiler we have {ZDA,TDA,SDA} small data regions */
+#define HAVE_ZDA 1
+#define HAVE_SDA 1
+#define HAVE_TDA 1
+
+/* Tell compiler we want to support GHS pragmas */
+#define HANDLE_GHS_PRAGMA
+
+/* The assembler op to to start the file. */
+
+#define FILE_ASM_OP "\t.file\n"
+
+/* Enable the register move pass to improve code. */
+#define ENABLE_REGMOVE_PASS
+
+
+/* Implement ZDA, TDA, and SDA */
+
+#define EP_REGNUM 30 /* ep register number */
+
+#define ENCODE_SECTION_INFO(DECL) \
+do { \
+ if ((TREE_STATIC (DECL) || DECL_EXTERNAL (DECL)) \
+ && TREE_CODE (DECL) == VAR_DECL) \
+ v850_encode_data_area (DECL); \
+} while (0)
+
+#define ZDA_NAME_FLAG_CHAR '@'
+#define TDA_NAME_FLAG_CHAR '%'
+#define SDA_NAME_FLAG_CHAR '&'
+
+#define ZDA_NAME_P(NAME) (*(NAME) == ZDA_NAME_FLAG_CHAR)
+#define TDA_NAME_P(NAME) (*(NAME) == TDA_NAME_FLAG_CHAR)
+#define SDA_NAME_P(NAME) (*(NAME) == SDA_NAME_FLAG_CHAR)
+
+#define ENCODED_NAME_P(SYMBOL_NAME) \
+ (ZDA_NAME_P (SYMBOL_NAME) \
+ || TDA_NAME_P (SYMBOL_NAME) \
+ || SDA_NAME_P (SYMBOL_NAME))
+
+#define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \
+ (VAR) = (SYMBOL_NAME) + (ENCODED_NAME_P (SYMBOL_NAME) || *(SYMBOL_NAME) == '*')
+
+/* Define this if you have defined special-purpose predicates in the
+ file `MACHINE.c'. This macro is called within an initializer of an
+ array of structures. The first field in the structure is the name
+ of a predicate and the second field is an array of rtl codes. For
+ each predicate, list all rtl codes that can be in expressions
+ matched by the predicate. The list should have a trailing comma. */
+
+#define PREDICATE_CODES \
+{ "ep_memory_operand", { MEM }}, \
+{ "reg_or_0_operand", { REG, SUBREG, CONST_INT, CONST_DOUBLE }}, \
+{ "reg_or_int5_operand", { REG, SUBREG, CONST_INT }}, \
+{ "call_address_operand", { REG, SYMBOL_REF }}, \
+{ "movsi_source_operand", { LABEL_REF, SYMBOL_REF, CONST_INT, \
+ CONST_DOUBLE, CONST, HIGH, MEM, \
+ REG, SUBREG }}, \
+{ "special_symbolref_operand", { SYMBOL_REF }}, \
+{ "power_of_two_operand", { CONST_INT }}, \
+{ "pattern_is_ok_for_prologue", { PARALLEL }}, \
+{ "pattern_is_ok_for_epilogue", { PARALLEL }}, \
+{ "register_is_ok_for_epilogue",{ REG }}, \
+{ "not_power_of_two_operand", { CONST_INT }},
+
+extern void override_options ();
+extern void asm_file_start ();
+extern int function_arg_partial_nregs ();
+extern int const_costs ();
+extern void print_operand ();
+extern void print_operand_address ();
+extern char *output_move_double ();
+extern char *output_move_single ();
+extern int ep_operand ();
+extern int reg_or_0_operand ();
+extern int reg_or_int5_operand ();
+extern int call_address_operand ();
+extern int movsi_source_operand ();
+extern int power_of_two_operand ();
+extern int not_power_of_two_operand ();
+extern void v850_reorg ();
+extern int compute_register_save_size ();
+extern int compute_frame_size ();
+extern void expand_prologue ();
+extern void expand_epilogue ();
+extern void notice_update_cc ();
+extern int v850_valid_machine_decl_attribute ();
+extern int v850_interrupt_function_p ();
+
+extern int pattern_is_ok_for_prologue();
+extern int pattern_is_ok_for_epilogue();
+extern int register_is_ok_for_epilogue ();
+extern char *construct_save_jarl ();
+extern char *construct_restore_jr ();
+
+
diff --git a/gcc/config/v850/v850.md b/gcc/config/v850/v850.md
new file mode 100644
index 00000000000..0ba10ca0cc0
--- /dev/null
+++ b/gcc/config/v850/v850.md
@@ -0,0 +1,1273 @@
+;; GCC machine description for NEC V850
+;; Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+
+;; Contributed by Jeff Law (law@cygnus.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.
+
+;; The original PO technology requires these to be ordered by speed,
+;; so that assigner will pick the fastest.
+
+;; See file "rtl.def" for documentation on define_insn, match_*, et. al.
+
+;; The V851 manual states that the instruction address space is 16M;
+;; the various branch/call instructions only have a 22bit offset (4M range).
+;;
+;; One day we'll probably need to handle calls to targets more than 4M
+;; away.
+
+;; The size of instructions in bytes.
+
+(define_attr "length" ""
+ (const_int 200))
+
+;; Types of instructions (for scheduling purposes).
+
+(define_attr "type" "load,mult,other"
+ (const_string "other"))
+
+;; Condition code settings.
+;; none - insn does not affect cc
+;; none_0hit - insn does not affect cc but it does modify operand 0
+;; This attribute is used to keep track of when operand 0 changes.
+;; See the description of NOTICE_UPDATE_CC for more info.
+;; set_znv - sets z,n,v to usable values; c is unknown.
+;; set_zn - sets z,n to usable values; v,c is unknown.
+;; compare - compare instruction
+;; clobber - value of cc is unknown
+(define_attr "cc" "none,none_0hit,set_zn,set_znv,compare,clobber"
+ (const_string "clobber"))
+
+;; Function units for the V850. As best as I can tell, there's
+;; a traditional memory load/use stall as well as a stall if
+;; the result of a multiply is used too early.
+;;
+(define_function_unit "memory" 1 0 (eq_attr "type" "load") 2 0)
+(define_function_unit "mult" 1 0 (eq_attr "type" "mult") 2 0)
+
+
+;; ----------------------------------------------------------------------
+;; MOVE INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+;; movqi
+
+(define_expand "movqi"
+ [(set (match_operand:QI 0 "general_operand" "")
+ (match_operand:QI 1 "general_operand" ""))]
+ ""
+ "
+{
+ /* One of the ops has to be in a register or 0 */
+ if (!register_operand (operand0, QImode)
+ && !reg_or_0_operand (operand1, QImode))
+ operands[1] = copy_to_mode_reg (QImode, operand1);
+}")
+
+(define_insn "*movqi_internal"
+ [(set (match_operand:QI 0 "general_operand" "=r,r,r,Q,r,m,m")
+ (match_operand:QI 1 "general_operand" "Jr,n,Q,Ir,m,r,I"))]
+ "register_operand (operands[0], QImode)
+ || reg_or_0_operand (operands[1], QImode)"
+ "* return output_move_single (operands);"
+ [(set_attr "length" "2,4,2,2,4,4,4")
+ (set_attr "cc" "none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit")
+ (set_attr "type" "other,other,load,other,load,other,other")])
+
+;; movhi
+
+(define_expand "movhi"
+ [(set (match_operand:HI 0 "general_operand" "")
+ (match_operand:HI 1 "general_operand" ""))]
+ ""
+ "
+{
+ /* One of the ops has to be in a register or 0 */
+ if (!register_operand (operand0, HImode)
+ && !reg_or_0_operand (operand1, HImode))
+ operands[1] = copy_to_mode_reg (HImode, operand1);
+}")
+
+(define_insn "*movhi_internal"
+ [(set (match_operand:HI 0 "general_operand" "=r,r,r,Q,r,m,m")
+ (match_operand:HI 1 "general_operand" "Jr,n,Q,Ir,m,r,I"))]
+ "register_operand (operands[0], HImode)
+ || reg_or_0_operand (operands[1], HImode)"
+ "* return output_move_single (operands);"
+ [(set_attr "length" "2,4,2,2,4,4,4")
+ (set_attr "cc" "none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit")
+ (set_attr "type" "other,other,load,other,load,other,other")])
+
+;; movsi and helpers
+
+(define_insn "*movsi_high"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (high:SI (match_operand 1 "" "")))]
+ ""
+ "movhi hi(%1),%.,%0"
+ [(set_attr "length" "4")
+ (set_attr "cc" "none_0hit")
+ (set_attr "type" "other")])
+
+(define_insn "*movsi_lo"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (lo_sum:SI (match_operand:SI 1 "register_operand" "r")
+ (match_operand:SI 2 "immediate_operand" "i")))]
+ ""
+ "movea lo(%2),%1,%0"
+ [(set_attr "length" "4")
+ (set_attr "cc" "none_0hit")
+ (set_attr "type" "other")])
+
+(define_expand "movsi"
+ [(set (match_operand:SI 0 "general_operand" "")
+ (match_operand:SI 1 "general_operand" ""))]
+ ""
+ "
+{
+ /* One of the ops has to be in a register or 0 */
+ if (!register_operand (operand0, SImode)
+ && !reg_or_0_operand (operand1, SImode))
+ operands[1] = copy_to_mode_reg (SImode, operand1);
+
+ /* Some constants, as well as symbolic operands
+ must be done with HIGH & LO_SUM patterns. */
+ if (CONSTANT_P (operands[1])
+ && GET_CODE (operands[1]) != HIGH
+ && !special_symbolref_operand (operands[1], VOIDmode)
+ && !(GET_CODE (operands[1]) == CONST_INT
+ && (CONST_OK_FOR_J (INTVAL (operands[1]))
+ || CONST_OK_FOR_K (INTVAL (operands[1]))
+ || CONST_OK_FOR_L (INTVAL (operands[1])))))
+ {
+ rtx high;
+ rtx temp;
+
+ if (reload_in_progress || reload_completed)
+ temp = operands[0];
+ else
+ temp = gen_reg_rtx (SImode);
+
+ emit_insn (gen_rtx (SET, SImode, temp,
+ gen_rtx (HIGH, SImode, operand1)));
+ emit_insn (gen_rtx (SET, SImode, operand0,
+ gen_rtx (LO_SUM, SImode, temp, operand1)));
+ DONE;
+ }
+}")
+
+(define_insn "*movsi_internal"
+ [(set (match_operand:SI 0 "general_operand" "=r,r,r,r,Q,r,r,m,m")
+ (match_operand:SI 1 "movsi_source_operand" "Jr,K,L,Q,Ir,m,R,r,I"))]
+ "register_operand (operands[0], SImode)
+ || reg_or_0_operand (operands[1], SImode)"
+ "* return output_move_single (operands);"
+ [(set_attr "length" "2,4,4,2,2,4,4,4,4")
+ (set_attr "cc" "none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit")
+ (set_attr "type" "other,other,other,load,other,load,other,other,other")])
+
+
+
+(define_expand "movdi"
+ [(set (match_operand:DI 0 "general_operand" "")
+ (match_operand:DI 1 "general_operand" ""))]
+ ""
+ "
+{
+ /* One of the ops has to be in a register or 0 */
+ if (!register_operand (operand0, DImode)
+ && !reg_or_0_operand (operand1, DImode))
+ operands[1] = copy_to_mode_reg (DImode, operand1);
+}")
+
+(define_insn "*movdi_internal"
+ [(set (match_operand:DI 0 "general_operand" "=r,r,r,r,r,m,m,r")
+ (match_operand:DI 1 "general_operand" "Jr,K,L,i,m,r,IG,iF"))]
+ "register_operand (operands[0], DImode)
+ || reg_or_0_operand (operands[1], DImode)"
+ "* return output_move_double (operands);"
+ [(set_attr "length" "4,8,8,16,8,8,8,16")
+ (set_attr "cc" "none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit")
+ (set_attr "type" "other,other,other,other,load,other,other,other")])
+
+(define_expand "movsf"
+ [(set (match_operand:SF 0 "general_operand" "")
+ (match_operand:SF 1 "general_operand" ""))]
+ ""
+ "
+{
+ /* One of the ops has to be in a register or 0 */
+ if (!register_operand (operand0, SFmode)
+ && !reg_or_0_operand (operand1, SFmode))
+ operands[1] = copy_to_mode_reg (SFmode, operand1);
+}")
+
+(define_insn "*movsf_internal"
+ [(set (match_operand:SF 0 "general_operand" "=r,r,r,r,r,Q,r,m,m,r")
+ (match_operand:SF 1 "general_operand" "Jr,K,L,n,Q,Ir,m,r,IG,iF"))]
+ "register_operand (operands[0], SFmode)
+ || reg_or_0_operand (operands[1], SFmode)"
+ "* return output_move_single (operands);"
+ [(set_attr "length" "2,4,4,8,2,2,4,4,4,8")
+ (set_attr "cc" "none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit")
+ (set_attr "type" "other,other,other,other,load,other,load,other,other,other")])
+
+(define_expand "movdf"
+ [(set (match_operand:DF 0 "general_operand" "")
+ (match_operand:DF 1 "general_operand" ""))]
+ ""
+ "
+{
+ /* One of the ops has to be in a register or 0 */
+ if (!register_operand (operand0, DFmode)
+ && !reg_or_0_operand (operand1, DFmode))
+ operands[1] = copy_to_mode_reg (DFmode, operand1);
+}")
+
+(define_insn "*movdf_internal"
+ [(set (match_operand:DF 0 "general_operand" "=r,r,r,r,r,m,m,r")
+ (match_operand:DF 1 "general_operand" "Jr,K,L,i,m,r,IG,iF"))]
+ "register_operand (operands[0], DFmode)
+ || reg_or_0_operand (operands[1], DFmode)"
+ "* return output_move_double (operands);"
+ [(set_attr "length" "4,8,8,16,8,8,8,16")
+ (set_attr "cc" "none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit")
+ (set_attr "type" "other,other,other,other,load,other,other,other")])
+
+
+;; ----------------------------------------------------------------------
+;; TEST INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+(define_insn "*v850_tst1"
+ [(set (cc0) (zero_extract:SI (match_operand:QI 0 "memory_operand" "m")
+ (const_int 1)
+ (match_operand:QI 1 "const_int_operand" "n")))]
+ ""
+ "tst1 %1,%0"
+ [(set_attr "length" "4")
+ (set_attr "cc" "clobber")])
+
+;; This replaces ld.b;sar;andi with tst1;setf nz.
+
+;; ??? The zero_extract sets the Z bit to the opposite of what one would
+;; expect. This perhaps should be wrapped in a (eq: X (const_int 0)).
+
+(define_split
+ [(set (match_operand:SI 0 "register_operand" "")
+ (zero_extract:SI (match_operand:QI 1 "memory_operand" "")
+ (const_int 1)
+ (match_operand 2 "const_int_operand" "")))]
+ ""
+ [(set (cc0) (zero_extract:SI (match_dup 1)
+ (const_int 1)
+ (match_dup 2)))
+ (set (match_dup 0) (ne:SI (cc0) (const_int 0)))])
+
+(define_insn "tstsi"
+ [(set (cc0) (match_operand:SI 0 "register_operand" "r"))]
+ ""
+ "cmp %.,%0"
+ [(set_attr "length" "2")
+ (set_attr "cc" "set_znv")])
+
+(define_insn "cmpsi"
+ [(set (cc0)
+ (compare (match_operand:SI 0 "register_operand" "r,r")
+ (match_operand:SI 1 "reg_or_int5_operand" "r,J")))]
+ ""
+ "@
+ cmp %1,%0
+ cmp %1,%0"
+ [(set_attr "length" "2,2")
+ (set_attr "cc" "compare")])
+
+;; ----------------------------------------------------------------------
+;; ADD INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+(define_insn "addsi3"
+ [(set (match_operand:SI 0 "register_operand" "=r,r,r")
+ (plus:SI (match_operand:SI 1 "register_operand" "%0,r,r")
+ (match_operand:SI 2 "nonmemory_operand" "rJ,K,U")))]
+ ""
+ "@
+ add %2,%0
+ addi %2,%1,%0
+ addi %O2(%P2),%1,%0"
+ [(set_attr "length" "2,4,4")
+ (set_attr "cc" "set_zn,set_zn,set_zn")])
+
+;; ----------------------------------------------------------------------
+;; SUBTRACT INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+(define_insn "subsi3"
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
+ (minus:SI (match_operand:SI 1 "register_operand" "0,r")
+ (match_operand:SI 2 "register_operand" "r,0")))]
+ ""
+ "@
+ sub %2,%0
+ subr %1,%0"
+ [(set_attr "length" "2,2")
+ (set_attr "cc" "set_zn")])
+
+(define_insn "negsi2"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (neg:SI (match_operand:SI 1 "register_operand" "0")))]
+ ""
+ "subr %.,%0"
+ [(set_attr "length" "2")
+ (set_attr "cc" "set_zn")])
+
+;; ----------------------------------------------------------------------
+;; MULTIPLY INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+(define_expand "mulhisi3"
+ [(set (match_operand:SI 0 "register_operand" "")
+ (mult:SI
+ (sign_extend:SI (match_operand:HI 1 "register_operand" ""))
+ (sign_extend:SI (match_operand:HI 2 "nonmemory_operand" ""))))]
+ ""
+ "")
+
+(define_insn "*mulhisi3_internal1"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (mult:SI
+ (sign_extend:SI (match_operand:HI 1 "register_operand" "%0"))
+ (sign_extend:SI (match_operand:HI 2 "register_operand" "r"))))]
+ ""
+ "mulh %2,%0"
+ [(set_attr "length" "2")
+ (set_attr "cc" "none_0hit")
+ (set_attr "type" "mult")])
+
+;; ??? Sign extending constants isn't valid. Fix?
+
+(define_insn "*mulhisi3_internal2"
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
+ (mult:SI
+ (sign_extend:SI (match_operand:HI 1 "register_operand" "%0,r"))
+ (sign_extend:SI (match_operand 2 "const_int_operand" "J,K"))))]
+ ""
+ "@
+ mulh %2,%0
+ mulhi %2,%1,%0"
+ [(set_attr "length" "2,4")
+ (set_attr "cc" "none_0hit,none_0hit")
+ (set_attr "type" "mult")])
+
+
+;; ----------------------------------------------------------------------
+;; AND INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+(define_insn "*v850_clr1_1"
+ [(set (match_operand:QI 0 "memory_operand" "=m")
+ (subreg:QI
+ (and:SI (subreg:SI (match_dup 0) 0)
+ (match_operand:QI 1 "not_power_of_two_operand" "")) 0))]
+ ""
+ "*
+{
+ rtx xoperands[2];
+ xoperands[0] = operands[0];
+ xoperands[1] = GEN_INT (~INTVAL (operands[1]) & 0xff);
+ output_asm_insn (\"clr1 %M1,%0\", xoperands);
+ return \"\";
+}"
+ [(set_attr "length" "4")
+ (set_attr "cc" "clobber")])
+
+(define_insn "*v850_clr1_2"
+ [(set (match_operand:HI 0 "memory_operand" "=m")
+ (subreg:HI
+ (and:SI (subreg:SI (match_dup 0) 0)
+ (match_operand:HI 1 "not_power_of_two_operand" "")) 0))]
+ ""
+ "*
+{
+ int log2 = exact_log2 (~INTVAL (operands[1]) & 0xffff);
+
+ rtx xoperands[2];
+ xoperands[0] = gen_rtx (MEM, QImode,
+ plus_constant (XEXP (operands[0], 0), log2 / 8));
+ xoperands[1] = GEN_INT (log2 % 8);
+ output_asm_insn (\"clr1 %1,%0\", xoperands);
+ return \"\";
+}"
+ [(set_attr "length" "4")
+ (set_attr "cc" "clobber")])
+
+(define_insn "*v850_clr1_3"
+ [(set (match_operand:SI 0 "memory_operand" "=m")
+ (and:SI (match_dup 0)
+ (match_operand:SI 1 "not_power_of_two_operand" "")))]
+ ""
+ "*
+{
+ int log2 = exact_log2 (~INTVAL (operands[1]) & 0xffffffff);
+
+ rtx xoperands[2];
+ xoperands[0] = gen_rtx (MEM, QImode,
+ plus_constant (XEXP (operands[0], 0), log2 / 8));
+ xoperands[1] = GEN_INT (log2 % 8);
+ output_asm_insn (\"clr1 %1,%0\", xoperands);
+ return \"\";
+}"
+ [(set_attr "length" "4")
+ (set_attr "cc" "clobber")])
+
+(define_insn "andsi3"
+ [(set (match_operand:SI 0 "register_operand" "=r,r,r")
+ (and:SI (match_operand:SI 1 "register_operand" "%0,0,r")
+ (match_operand:SI 2 "nonmemory_operand" "r,I,M")))]
+ ""
+ "@
+ and %2,%0
+ and %.,%0
+ andi %2,%1,%0"
+ [(set_attr "length" "2,2,4")
+ (set_attr "cc" "set_znv")])
+
+;; ----------------------------------------------------------------------
+;; OR INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+(define_insn "*v850_set1_1"
+ [(set (match_operand:QI 0 "memory_operand" "=m")
+ (subreg:QI (ior:SI (subreg:SI (match_dup 0) 0)
+ (match_operand 1 "power_of_two_operand" "")) 0))]
+ ""
+ "set1 %M1,%0"
+ [(set_attr "length" "4")
+ (set_attr "cc" "clobber")])
+
+(define_insn "*v850_set1_2"
+ [(set (match_operand:HI 0 "memory_operand" "=m")
+ (subreg:HI (ior:SI (subreg:SI (match_dup 0) 0)
+ (match_operand 1 "power_of_two_operand" "")) 0))]
+ ""
+ "*
+{
+ int log2 = exact_log2 (INTVAL (operands[1]));
+
+ if (log2 < 8)
+ return \"set1 %M1,%0\";
+ else
+ {
+ rtx xoperands[2];
+ xoperands[0] = gen_rtx (MEM, QImode,
+ plus_constant (XEXP (operands[0], 0), log2 / 8));
+ xoperands[1] = GEN_INT (log2 % 8);
+ output_asm_insn (\"set1 %1,%0\", xoperands);
+ }
+ return \"\";
+}"
+ [(set_attr "length" "4")
+ (set_attr "cc" "clobber")])
+
+(define_insn "*v850_set1_3"
+ [(set (match_operand:SI 0 "memory_operand" "=m")
+ (ior:SI (match_dup 0)
+ (match_operand 1 "power_of_two_operand" "")))]
+ ""
+ "*
+{
+ int log2 = exact_log2 (INTVAL (operands[1]));
+
+ if (log2 < 8)
+ return \"set1 %M1,%0\";
+ else
+ {
+ rtx xoperands[2];
+ xoperands[0] = gen_rtx (MEM, QImode,
+ plus_constant (XEXP (operands[0], 0), log2 / 8));
+ xoperands[1] = GEN_INT (log2 % 8);
+ output_asm_insn (\"set1 %1,%0\", xoperands);
+ }
+ return \"\";
+}"
+ [(set_attr "length" "4")
+ (set_attr "cc" "clobber")])
+
+(define_insn "iorsi3"
+ [(set (match_operand:SI 0 "register_operand" "=r,r,r")
+ (ior:SI (match_operand:SI 1 "register_operand" "%0,0,r")
+ (match_operand:SI 2 "nonmemory_operand" "r,I,M")))]
+ ""
+ "@
+ or %2,%0
+ or %.,%0
+ ori %2,%1,%0"
+ [(set_attr "length" "2,2,4")
+ (set_attr "cc" "set_znv")])
+
+;; ----------------------------------------------------------------------
+;; XOR INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+(define_insn "*v850_not1_1"
+ [(set (match_operand:QI 0 "memory_operand" "=m")
+ (subreg:QI (xor:SI (subreg:SI (match_dup 0) 0)
+ (match_operand 1 "power_of_two_operand" "")) 0))]
+ ""
+ "not1 %M1,%0"
+ [(set_attr "length" "4")
+ (set_attr "cc" "clobber")])
+
+(define_insn "*v850_not1_2"
+ [(set (match_operand:HI 0 "memory_operand" "=m")
+ (subreg:HI (xor:SI (subreg:SI (match_dup 0) 0)
+ (match_operand 1 "power_of_two_operand" "")) 0))]
+ ""
+ "*
+{
+ int log2 = exact_log2 (INTVAL (operands[1]));
+
+ if (log2 < 8)
+ return \"not1 %M1,%0\";
+ else
+ {
+ rtx xoperands[2];
+ xoperands[0] = gen_rtx (MEM, QImode,
+ plus_constant (XEXP (operands[0], 0), log2 / 8));
+ xoperands[1] = GEN_INT (log2 % 8);
+ output_asm_insn (\"not1 %1,%0\", xoperands);
+ }
+ return \"\";
+}"
+ [(set_attr "length" "4")
+ (set_attr "cc" "clobber")])
+
+(define_insn "*v850_not1_3"
+ [(set (match_operand:SI 0 "memory_operand" "=m")
+ (xor:SI (match_dup 0)
+ (match_operand 1 "power_of_two_operand" "")))]
+ ""
+ "*
+{
+ int log2 = exact_log2 (INTVAL (operands[1]));
+
+ if (log2 < 8)
+ return \"not1 %M1,%0\";
+ else
+ {
+ rtx xoperands[2];
+ xoperands[0] = gen_rtx (MEM, QImode,
+ plus_constant (XEXP (operands[0], 0), log2 / 8));
+ xoperands[1] = GEN_INT (log2 % 8);
+ output_asm_insn (\"not1 %1,%0\", xoperands);
+ }
+ return \"\";
+}"
+ [(set_attr "length" "4")
+ (set_attr "cc" "clobber")])
+
+(define_insn "xorsi3"
+ [(set (match_operand:SI 0 "register_operand" "=r,r,r")
+ (xor:SI (match_operand:SI 1 "register_operand" "%0,0,r")
+ (match_operand:SI 2 "nonmemory_operand" "r,I,M")))]
+ ""
+ "@
+ xor %2,%0
+ xor %.,%0
+ xori %2,%1,%0"
+ [(set_attr "length" "2,2,4")
+ (set_attr "cc" "set_znv")])
+
+;; ----------------------------------------------------------------------
+;; NOT INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+(define_insn "one_cmplsi2"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (not:SI (match_operand:SI 1 "register_operand" "r")))]
+ ""
+ "not %1,%0"
+ [(set_attr "length" "2")
+ (set_attr "cc" "set_znv")])
+
+;; -----------------------------------------------------------------
+;; BIT FIELDS
+;; -----------------------------------------------------------------
+
+;; ??? Is it worth defining insv and extv for the V850 series?!?
+
+;; An insv pattern would be useful, but does not get used because
+;; store_bit_field never calls insv when storing a constant value into a
+;; single-bit bitfield.
+
+;; extv/extzv patterns would be useful, but do not get used because
+;; optimize_bitfield_compare in fold-const usually converts single
+;; bit extracts into an AND with a mask.
+
+;; -----------------------------------------------------------------
+;; Scc INSTRUCTIONS
+;; -----------------------------------------------------------------
+
+(define_insn "sle"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (le:SI (cc0) (const_int 0)))]
+ ""
+ "*
+{
+ if ((cc_status.flags & CC_OVERFLOW_UNUSABLE) != 0)
+ return 0;
+
+ return \"setf le,%0\";
+}"
+ [(set_attr "length" "4")
+ (set_attr "cc" "none_0hit")])
+
+(define_insn "sleu"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (leu:SI (cc0) (const_int 0)))]
+ ""
+ "setf nh,%0"
+ [(set_attr "length" "4")
+ (set_attr "cc" "none_0hit")])
+
+(define_insn "sge"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (ge:SI (cc0) (const_int 0)))]
+ ""
+ "*
+{
+ if ((cc_status.flags & CC_OVERFLOW_UNUSABLE) != 0)
+ return 0;
+
+ return \"setf ge,%0\";
+}"
+ [(set_attr "length" "4")
+ (set_attr "cc" "none_0hit")])
+
+(define_insn "sgeu"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (geu:SI (cc0) (const_int 0)))]
+ ""
+ "setf nl,%0"
+ [(set_attr "length" "4")
+ (set_attr "cc" "none_0hit")])
+
+(define_insn "slt"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (lt:SI (cc0) (const_int 0)))]
+ ""
+ "*
+{
+ if ((cc_status.flags & CC_OVERFLOW_UNUSABLE) != 0)
+ return 0;
+
+ return \"setf lt,%0\";
+}"
+ [(set_attr "length" "4")
+ (set_attr "cc" "none_0hit")])
+
+(define_insn "sltu"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (ltu:SI (cc0) (const_int 0)))]
+ ""
+ "setf l,%0"
+ [(set_attr "length" "4")
+ (set_attr "cc" "none_0hit")])
+
+(define_insn "sgt"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (gt:SI (cc0) (const_int 0)))]
+ ""
+ "*
+{
+ if ((cc_status.flags & CC_OVERFLOW_UNUSABLE) != 0)
+ return 0;
+
+ return \"setf gt,%0\";
+}"
+ [(set_attr "length" "4")
+ (set_attr "cc" "none_0hit")])
+
+(define_insn "sgtu"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (gtu:SI (cc0) (const_int 0)))]
+ ""
+ "setf h,%0"
+ [(set_attr "length" "4")
+ (set_attr "cc" "none_0hit")])
+
+(define_insn "seq"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (eq:SI (cc0) (const_int 0)))]
+ ""
+ "setf z,%0"
+ [(set_attr "length" "4")
+ (set_attr "cc" "none_0hit")])
+
+(define_insn "sne"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (ne:SI (cc0) (const_int 0)))]
+ ""
+ "setf nz,%0"
+ [(set_attr "length" "4")
+ (set_attr "cc" "none_0hit")])
+
+
+;; ----------------------------------------------------------------------
+;; JUMP INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+;; Conditional jump instructions
+
+(define_expand "ble"
+ [(set (pc)
+ (if_then_else (le (cc0)
+ (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "")
+
+(define_expand "bleu"
+ [(set (pc)
+ (if_then_else (leu (cc0)
+ (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "")
+
+(define_expand "bge"
+ [(set (pc)
+ (if_then_else (ge (cc0)
+ (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "")
+
+(define_expand "bgeu"
+ [(set (pc)
+ (if_then_else (geu (cc0)
+ (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "")
+
+(define_expand "blt"
+ [(set (pc)
+ (if_then_else (lt (cc0)
+ (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "")
+
+(define_expand "bltu"
+ [(set (pc)
+ (if_then_else (ltu (cc0)
+ (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "")
+
+(define_expand "bgt"
+ [(set (pc)
+ (if_then_else (gt (cc0)
+ (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "")
+
+(define_expand "bgtu"
+ [(set (pc)
+ (if_then_else (gtu (cc0)
+ (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "")
+
+(define_expand "beq"
+ [(set (pc)
+ (if_then_else (eq (cc0)
+ (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "")
+
+(define_expand "bne"
+ [(set (pc)
+ (if_then_else (ne (cc0)
+ (const_int 0))
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "")
+
+(define_insn "*branch_normal"
+ [(set (pc)
+ (if_then_else (match_operator 1 "comparison_operator"
+ [(cc0) (const_int 0)])
+ (label_ref (match_operand 0 "" ""))
+ (pc)))]
+ ""
+ "*
+{
+ if ((cc_status.flags & CC_OVERFLOW_UNUSABLE) != 0
+ && (GET_CODE (operands[1]) == GT
+ || GET_CODE (operands[1]) == GE
+ || GET_CODE (operands[1]) == LE
+ || GET_CODE (operands[1]) == LT))
+ return 0;
+
+ if (get_attr_length (insn) == 2)
+ return \"b%b1 %l0\";
+ else
+ return \"b%B1 .+6\;jr %l0\";
+}"
+ [(set (attr "length")
+ (if_then_else (lt (abs (minus (match_dup 0) (pc)))
+ (const_int 256))
+ (const_int 2)
+ (const_int 6)))
+ (set_attr "cc" "none")])
+
+(define_insn "*branch_invert"
+ [(set (pc)
+ (if_then_else (match_operator 1 "comparison_operator"
+ [(cc0) (const_int 0)])
+ (pc)
+ (label_ref (match_operand 0 "" ""))))]
+ ""
+ "*
+{
+ if ((cc_status.flags & CC_OVERFLOW_UNUSABLE) != 0
+ && (GET_CODE (operands[1]) == GT
+ || GET_CODE (operands[1]) == GE
+ || GET_CODE (operands[1]) == LE
+ || GET_CODE (operands[1]) == LT))
+ return 0;
+ if (get_attr_length (insn) == 2)
+ return \"b%B1 %l0\";
+ else
+ return \"b%b1 .+6\;jr %l0\";
+}"
+ [(set (attr "length")
+ (if_then_else (lt (abs (minus (match_dup 0) (pc)))
+ (const_int 256))
+ (const_int 2)
+ (const_int 6)))
+ (set_attr "cc" "none")])
+
+;; Unconditional and other jump instructions.
+
+(define_insn "jump"
+ [(set (pc)
+ (label_ref (match_operand 0 "" "")))]
+ ""
+ "*
+{
+ if (get_attr_length (insn) == 2)
+ return \"br %0\";
+ else
+ return \"jr %0\";
+}"
+ [(set (attr "length")
+ (if_then_else (lt (abs (minus (match_dup 0) (pc)))
+ (const_int 256))
+ (const_int 2)
+ (const_int 4)))
+ (set_attr "cc" "none")])
+
+(define_insn "indirect_jump"
+ [(set (pc) (match_operand:SI 0 "register_operand" "r"))]
+ ""
+ "jmp %0"
+ [(set_attr "length" "2")
+ (set_attr "cc" "none")])
+
+(define_insn "tablejump"
+ [(set (pc) (match_operand:SI 0 "register_operand" "r"))
+ (use (label_ref (match_operand 1 "" "")))]
+ ""
+ "jmp %0"
+ [(set_attr "length" "2")
+ (set_attr "cc" "none")])
+
+(define_expand "casesi"
+ [(match_operand:SI 0 "register_operand" "")
+ (match_operand:SI 1 "register_operand" "")
+ (match_operand:SI 2 "register_operand" "")
+ (match_operand 3 "" "") (match_operand 4 "" "")]
+ ""
+ "
+{
+ rtx reg = gen_reg_rtx (SImode);
+ rtx tableaddress = gen_reg_rtx (SImode);
+ rtx mem;
+
+ /* Subtract the lower bound from the index. */
+ emit_insn (gen_subsi3 (reg, operands[0], operands[1]));
+ /* Compare the result against the number of table entries. */
+ emit_insn (gen_cmpsi (reg, operands[2]));
+ /* Branch to the default label if out of range of the table. */
+ emit_jump_insn (gen_bgtu (operands[4]));
+
+ /* Shift index for the table array access. */
+ emit_insn (gen_ashlsi3 (reg, reg, GEN_INT (TARGET_BIG_SWITCH ? 2 : 1)));
+ /* Load the table address into a pseudo. */
+ emit_insn (gen_movsi (tableaddress,
+ gen_rtx (LABEL_REF, VOIDmode, operands[3])));
+ /* Add the table address to the index. */
+ emit_insn (gen_addsi3 (reg, reg, tableaddress));
+ /* Load the table entry. */
+ mem = gen_rtx (MEM, CASE_VECTOR_MODE, reg);
+ RTX_UNCHANGING_P (mem);
+ if (! TARGET_BIG_SWITCH)
+ {
+ rtx reg2 = gen_reg_rtx (HImode);
+ emit_insn (gen_movhi (reg2, mem));
+ emit_insn (gen_extendhisi2 (reg, reg2));
+ }
+ else
+ emit_insn (gen_movsi (reg, mem));
+ /* Add the table address. */
+ emit_insn (gen_addsi3 (reg, reg, tableaddress));
+ /* Branch to the switch label. */
+ emit_jump_insn (gen_tablejump (reg, operands[3]));
+ DONE;
+}")
+
+;; Call subroutine with no return value.
+
+(define_expand "call"
+ [(call (match_operand:QI 0 "general_operand" "")
+ (match_operand:SI 1 "general_operand" ""))]
+ ""
+ "
+{
+ if (! call_address_operand (XEXP (operands[0], 0))
+ || TARGET_LONG_CALLS)
+ XEXP (operands[0], 0) = force_reg (SImode, XEXP (operands[0], 0));
+ emit_call_insn (gen_call_internal (XEXP (operands[0], 0), operands[1]));
+ DONE;
+}")
+
+(define_insn "call_internal"
+ [(call (mem:QI (match_operand:SI 0 "call_address_operand" "S,r"))
+ (match_operand:SI 1 "general_operand" "g,g"))
+ (clobber (reg:SI 31))]
+ ""
+ "@
+ jarl %0,r31
+ jarl .+4,r31\\n\\tadd 4,r31\\n\\tjmp %0"
+ [(set_attr "length" "4,8")])
+
+;; Call subroutine, returning value in operand 0
+;; (which must be a hard register).
+
+(define_expand "call_value"
+ [(set (match_operand 0 "" "")
+ (call (match_operand:QI 1 "general_operand" "")
+ (match_operand:SI 2 "general_operand" "")))]
+ ""
+ "
+{
+ if (! call_address_operand (XEXP (operands[1], 0))
+ || TARGET_LONG_CALLS)
+ XEXP (operands[1], 0) = force_reg (SImode, XEXP (operands[1], 0));
+ emit_call_insn (gen_call_value_internal (operands[0],
+ XEXP (operands[1], 0),
+ operands[2]));
+ DONE;
+}")
+
+(define_insn "call_value_internal"
+ [(set (match_operand 0 "" "=r,r")
+ (call (mem:QI (match_operand:SI 1 "call_address_operand" "S,r"))
+ (match_operand:SI 2 "general_operand" "g,g")))
+ (clobber (reg:SI 31))]
+ ""
+ "@
+ jarl %1,r31
+ jarl .+4,r31\\n\\tadd 4,r31\\n\\tjmp %1"
+ [(set_attr "length" "4,8")])
+
+(define_insn "nop"
+ [(const_int 0)]
+ ""
+ "nop"
+ [(set_attr "length" "2")
+ (set_attr "cc" "none")])
+
+;; ----------------------------------------------------------------------
+;; EXTEND INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+
+(define_insn "zero_extendhisi2"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (zero_extend:SI
+ (match_operand:HI 1 "register_operand" "r")))]
+ ""
+ "andi 65535,%1,%0"
+ [(set_attr "length" "4")
+ (set_attr "cc" "set_znv")])
+
+
+(define_insn "zero_extendqisi2"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (zero_extend:SI
+ (match_operand:QI 1 "register_operand" "r")))]
+ ""
+ "andi 255,%1,%0"
+ [(set_attr "length" "4")
+ (set_attr "cc" "set_znv")])
+
+;;- sign extension instructions
+
+
+;; ??? This is missing a sign extend from memory pattern to match the ld.h
+;; instruction.
+
+(define_expand "extendhisi2"
+ [(set (match_dup 2)
+ (ashift:SI (match_operand:HI 1 "register_operand" "")
+ (const_int 16)))
+ (set (match_operand:SI 0 "register_operand" "")
+ (ashiftrt:SI (match_dup 2)
+ (const_int 16)))]
+ ""
+ "
+{
+ operands[1] = gen_lowpart (SImode, operands[1]);
+ operands[2] = gen_reg_rtx (SImode);
+}")
+
+
+;; ??? This is missing a sign extend from memory pattern to match the ld.b
+;; instruction.
+
+(define_expand "extendqisi2"
+ [(set (match_dup 2)
+ (ashift:SI (match_operand:QI 1 "register_operand" "")
+ (const_int 24)))
+ (set (match_operand:SI 0 "register_operand" "")
+ (ashiftrt:SI (match_dup 2)
+ (const_int 24)))]
+ ""
+ "
+{
+ operands[1] = gen_lowpart (SImode, operands[1]);
+ operands[2] = gen_reg_rtx (SImode);
+}")
+
+;; ----------------------------------------------------------------------
+;; SHIFTS
+;; ----------------------------------------------------------------------
+
+(define_insn "ashlsi3"
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
+ (ashift:SI
+ (match_operand:SI 1 "register_operand" "0,0")
+ (match_operand:SI 2 "nonmemory_operand" "r,N")))]
+ ""
+ "@
+ shl %2,%0
+ shl %2,%0"
+ [(set_attr "length" "4,2")
+ (set_attr "cc" "set_znv")])
+
+(define_insn "lshrsi3"
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
+ (lshiftrt:SI
+ (match_operand:SI 1 "register_operand" "0,0")
+ (match_operand:SI 2 "nonmemory_operand" "r,N")))]
+ ""
+ "@
+ shr %2,%0
+ shr %2,%0"
+ [(set_attr "length" "4,2")
+ (set_attr "cc" "set_znv")])
+
+(define_insn "ashrsi3"
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
+ (ashiftrt:SI
+ (match_operand:SI 1 "register_operand" "0,0")
+ (match_operand:SI 2 "nonmemory_operand" "r,N")))]
+ ""
+ "@
+ sar %2,%0
+ sar %2,%0"
+ [(set_attr "length" "4,2")
+ (set_attr "cc" "set_znv")])
+
+;; ----------------------------------------------------------------------
+;; PROLOGUE/EPILOGUE
+;; ----------------------------------------------------------------------
+(define_expand "prologue"
+ [(const_int 0)]
+ ""
+ "expand_prologue (); DONE;")
+
+(define_expand "epilogue"
+ [(return)]
+ ""
+ "
+{
+ /* Try to use the trivial return first. Else use the
+ full epilogue. */
+ if (0)
+ emit_jump_insn (gen_return ());
+ else
+ expand_epilogue ();
+ DONE;
+}")
+
+(define_insn "return"
+ [(return)]
+ "reload_completed && compute_frame_size (get_frame_size (), (long *)0) == 0"
+ "jmp [r31]"
+ [(set_attr "length" "2")
+ (set_attr "cc" "none")])
+
+(define_insn "return_internal"
+ [(return)
+ (use (reg:SI 31))]
+ ""
+ "jmp [r31]"
+ [(set_attr "length" "2")
+ (set_attr "cc" "none")])
+
+
+
+;; ----------------------------------------------------------------------
+;; HELPER INSTRUCTIONS for saving the prologue and epilog registers
+;; ----------------------------------------------------------------------
+
+;; This pattern will match a stack adjust RTX followed by any number of push
+;; RTXs. These RTXs will then be turned into a suitable call to a worker
+;; function.
+
+
+(define_insn ""
+ [(match_parallel 0 "pattern_is_ok_for_prologue"
+ [(set (reg:SI 3)
+ (plus:SI (reg:SI 3) (match_operand:SI 1 "immediate_operand" "i")))
+ (set (mem:SI (plus:SI (reg:SI 3)
+ (match_operand:SI 2 "immediate_operand" "i")))
+ (match_operand:SI 3 "register_is_ok_for_epilogue" "r"))])]
+ "TARGET_PROLOG_FUNCTION"
+ "* return construct_save_jarl (operands[0]);
+ "
+ [(set_attr "length" "4")
+ (set_attr "cc" "clobber")])
+
+
+;; Initialize an interrupt function. Do not depend on TARGET_PROLOG_FUNCTION.
+(define_insn "save_interrupt"
+ [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -16)))
+ (set (mem:SI (reg:SI 3)) (reg:SI 30))
+ (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 10))
+ (set (mem:SI (plus:SI (reg:SI 3) (const_int -8))) (reg:SI 4))
+ (set (mem:SI (plus:SI (reg:SI 3) (const_int -12))) (reg:SI 1))]
+ ""
+ "add -16,sp\;st.w r10,12[sp]\;jarl __save_interrupt,r10"
+ [(set_attr "length" "12")
+ (set_attr "cc" "clobber")])
+
+
+;; Save all registers except for the registers saved in save_interrupt when
+;; an interrupt function makes a call.
+;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and
+;; all of memory. This blocks insns from being moved across this point.
+;; This is needed because the rest of the compiler is not ready to handle
+;; insns this complicated.
+
+(define_insn "save_all_interrupt"
+ [(unspec_volatile [(const_int 0)] 0)]
+ ""
+ "jarl __save_all_interrupt,r10"
+ [(set_attr "length" "4")
+ (set_attr "cc" "clobber")])
+
+
+
+
+;; This pattern will match a return RTX followed by any number of pop RTXs
+;; and possible a stack adjustment as well. These RTXs will be turned into
+;; a suitable call to a worker function.
+
+
+(define_insn ""
+[(match_parallel 0 "pattern_is_ok_for_epilogue"
+ [(return)
+ (set (reg:SI 3)
+ (plus:SI (reg:SI 3) (match_operand:SI 1 "immediate_operand" "i")))
+ (set (match_operand:SI 2 "register_is_ok_for_epilogue" "r")
+ (mem:SI (plus:SI (reg:SI 3)
+ (match_operand:SI 3 "immediate_operand" "i"))))])]
+ "TARGET_PROLOG_FUNCTION && TARGET_V850"
+ "* return construct_restore_jr (operands[0]);
+ "
+ [(set_attr "length" "4")
+ (set_attr "cc" "clobber")])
+
+;; Restore r1, r4, r10, and return from the interrupt
+(define_insn "restore_interrupt"
+ [(return)
+ (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 16)))
+ (set (reg:SI 30) (mem:SI (plus:SI (reg:SI 3) (const_int 12))))
+ (set (reg:SI 10) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
+ (set (reg:SI 4) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))
+ (set (reg:SI 1) (mem:SI (reg:SI 3)))]
+ ""
+ "jr __return_interrupt"
+ [(set_attr "length" "4")
+ (set_attr "cc" "clobber")])
+
+;; Restore all registers saved when an interrupt function makes a call.
+;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and
+;; all of memory. This blocks insns from being moved across this point.
+;; This is needed because the rest of the compiler is not ready to handle
+;; insns this complicated.
+
+(define_insn "restore_all_interrupt"
+ [(unspec_volatile [(const_int 0)] 1)]
+ ""
+ "jarl __restore_all_interrupt,r10"
+ [(set_attr "length" "4")
+ (set_attr "cc" "clobber")])
+
+;; Save r6-r9 for a variable argument function
+(define_insn "save_r6_r9"
+ [(set (mem:SI (reg:SI 3)) (reg:SI 6))
+ (set (mem:SI (plus:SI (reg:SI 3) (const_int 4))) (reg:SI 7))
+ (set (mem:SI (plus:SI (reg:SI 3) (const_int 8))) (reg:SI 8))
+ (set (mem:SI (plus:SI (reg:SI 3) (const_int 12))) (reg:SI 9))
+ (clobber (reg:SI 10))]
+ "TARGET_PROLOG_FUNCTION"
+ "jarl __save_r6_r9,r10"
+ [(set_attr "length" "4")
+ (set_attr "cc" "clobber")])
+
diff --git a/gcc/config/v850/xm-v850.h b/gcc/config/v850/xm-v850.h
new file mode 100644
index 00000000000..1e43d033f6f
--- /dev/null
+++ b/gcc/config/v850/xm-v850.h
@@ -0,0 +1,49 @@
+/* Configuration for NEC V850.
+ Copyright (C) 1996 Free Software Foundation, Inc.
+ Contributed by Cygnus Support.
+
+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. */
+
+/* #defines that need visibility everywhere. */
+#define FALSE 0
+#define TRUE 1
+
+/* This describes the machine the compiler is hosted on. */
+#define HOST_BITS_PER_CHAR 8
+#define HOST_BITS_PER_SHORT 16
+#define HOST_BITS_PER_INT 32
+#define HOST_BITS_PER_LONG 32
+#define HOST_BITS_PER_LONGLONG 64
+
+/* Arguments to use with `exit'. */
+#define SUCCESS_EXIT_CODE 0
+#define FATAL_EXIT_CODE 33
+
+#ifdef __v850
+#ifndef __STDC__
+extern char *malloc (), *realloc (), *calloc ();
+#else
+extern void *malloc (), *realloc (), *calloc ();
+#endif
+extern void free ();
+#endif
+
+/* target machine dependencies.
+ tm.h is a symbolic link to the actual target specific file. */
+
+#include "tm.h"
diff --git a/gcc/config/vax/ultrix.h b/gcc/config/vax/ultrix.h
index 7181e5b0019..3a14419c102 100644
--- a/gcc/config/vax/ultrix.h
+++ b/gcc/config/vax/ultrix.h
@@ -7,3 +7,6 @@
#define PTRDIFF_TYPE "int"
#define WCHAR_TYPE "unsigned int"
#define WCHAR_TYPE_SIZE 32
+
+/* True for Ultrix 4.3 and later and possibly earlier. */
+#define HAVE_ATEXIT
diff --git a/gcc/config/vax/vax.c b/gcc/config/vax/vax.c
index 35448cb5fa5..ad10c08cbcf 100644
--- a/gcc/config/vax/vax.c
+++ b/gcc/config/vax/vax.c
@@ -18,8 +18,8 @@ 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 <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
diff --git a/gcc/config/vax/vax.h b/gcc/config/vax/vax.h
index 1d4d67ddb38..c0fe4699077 100644
--- a/gcc/config/vax/vax.h
+++ b/gcc/config/vax/vax.h
@@ -446,7 +446,7 @@ gen_rtx (PLUS, Pmode, frame, gen_rtx (CONST_INT, VOIDmode, 12))
/* This macro generates the assembly code for function entry.
FILE is a stdio stream to output the code to.
SIZE is an int: how many units of temporary storage to allocate,
- adjusted by STARTING_FRAME_OFFSET to accomodate vms.h.
+ adjusted by STARTING_FRAME_OFFSET to accommodate vms.h.
Refer to the array `regs_ever_live' to determine which registers
to save; `regs_ever_live[I]' is nonzero if register number I
is ever used in the function. This macro is responsible for
diff --git a/gcc/config/vax/vax.md b/gcc/config/vax/vax.md
index c3a2ae39588..ea2fba1ba4e 100644
--- a/gcc/config/vax/vax.md
+++ b/gcc/config/vax/vax.md
@@ -1,5 +1,5 @@
;;- Machine description for GNU compiler, Vax Version
-;; Copyright (C) 1987, 88, 91, 94, 95, 1996 Free Software Foundation, Inc.
+;; Copyright (C) 1987, 88, 91, 94-96, 1998 Free Software Foundation, Inc.
;; This file is part of GNU CC.
@@ -1837,9 +1837,12 @@
;; Note that operand 1 is total size of args, in bytes,
;; and what the call insn wants is the number of words.
+;; It is used in the call instruction as a byte, but in the addl2 as
+;; a word. Since the only time we actually use it in the call instruction
+;; is when it is a constant, SImode (for addl2) is the proper mode.
(define_insn "call_pop"
[(call (match_operand:QI 0 "memory_operand" "m")
- (match_operand:QI 1 "general_operand" "g"))
+ (match_operand:SI 1 "general_operand" "g"))
(set (reg:SI 14) (plus:SI (reg:SI 14)
(match_operand:SI 3 "immediate_operand" "i")))]
""
@@ -1854,7 +1857,7 @@
(define_insn "call_value_pop"
[(set (match_operand 0 "" "=g")
(call (match_operand:QI 1 "memory_operand" "m")
- (match_operand:QI 2 "general_operand" "g")))
+ (match_operand:SI 2 "general_operand" "g")))
(set (reg:SI 14) (plus:SI (reg:SI 14)
(match_operand:SI 4 "immediate_operand" "i")))]
""
@@ -1870,7 +1873,7 @@
;; operands. In that case, combine may simplify the adjustment of sp.
(define_insn ""
[(call (match_operand:QI 0 "memory_operand" "m")
- (match_operand:QI 1 "general_operand" "g"))
+ (match_operand:SI 1 "general_operand" "g"))
(set (reg:SI 14) (reg:SI 14))]
""
"*
@@ -1884,7 +1887,7 @@
(define_insn ""
[(set (match_operand 0 "" "=g")
(call (match_operand:QI 1 "memory_operand" "m")
- (match_operand:QI 2 "general_operand" "g")))
+ (match_operand:SI 2 "general_operand" "g")))
(set (reg:SI 14) (reg:SI 14))]
""
"*
diff --git a/gcc/config/vax/vms.h b/gcc/config/vax/vms.h
index d8580b5c1a1..35020a18858 100644
--- a/gcc/config/vax/vms.h
+++ b/gcc/config/vax/vms.h
@@ -304,9 +304,9 @@ const_section () \
/* The following definitions are used in libgcc2.c with the __main
function. The _SHR symbol is used when the sharable image library
- for libg++ is used - this is picked up automatically by the linker
- and this symbol points to the start of the __CTOR_LIST__ from libg++.
- If libg++ is not being used, then __CTOR_LIST_SHR__ occurs just after
+ for the C++ library is used - this is picked up automatically by the linker
+ and this symbol points to the start of __CTOR_LIST__ from the C++ library.
+ If the C++ library is not used, then __CTOR_LIST_SHR__ occurs just after
__CTOR_LIST__, and essentially points to the same list as __CTOR_LIST. */
#ifdef L__main
@@ -357,3 +357,13 @@ do { \
} while (0)
#endif /* L__main */
+
+/* Specify the list of include file directories. */
+#define INCLUDE_DEFAULTS \
+{ \
+ { "GNU_GXX_INCLUDE:", "G++", 1, 1 }, \
+ { "GNU_CC_INCLUDE:", "GCC", 0, 0 }, /* GNU includes */ \
+ { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0 }, /* VAX-11 "C" includes */ \
+ { ".", 0, 0, 1 }, /* Make normal VMS filespecs work. */ \
+ { 0, 0, 0, 0 } \
+}
diff --git a/gcc/config/vax/xm-vms.h b/gcc/config/vax/xm-vms.h
index 430905b0483..a559a039476 100644
--- a/gcc/config/vax/xm-vms.h
+++ b/gcc/config/vax/xm-vms.h
@@ -22,6 +22,14 @@ Boston, MA 02111-1307, USA. */
#define FALSE 0
#define TRUE 1
+/* Other configurations get these via autoconfig. */
+#define STDC_HEADERS 1
+#define HAVE_STDLIB_H 1
+#define HAVE_STRING_H 1
+#ifdef __DECC
+#define HAVE_UNISTD_H 1
+#endif
+
#if defined(VAXC) || defined(__DECC)
/* if compiling with VAXC, need to fix problem with <stdio.h>
which defines a macro called FILE_TYPE that breaks "tree.h".
@@ -69,16 +77,6 @@ Boston, MA 02111-1307, USA. */
/* and define a local equivalent (sort of) for unlink */
#define unlink remove
-/* Specify the list of include file directories. */
-#define INCLUDE_DEFAULTS \
-{ \
- { "GNU_GXX_INCLUDE:", 1, 1 }, \
- { "GNU_CC_INCLUDE:", 0, 0 }, /* GNU includes */ \
- { "SYS$SYSROOT:[SYSLIB.]", 0, 0 }, /* VAX-11 "C" includes */ \
- { ".", 0, 1 }, /* Make normal VMS filespecs work. */ \
- { 0, 0, 0 } \
-}
-
/* Used by the preprocessor to limit size of disk I/O chunks.
64K - 1 is the maximum supported by VAXCRTL. Amounts in excess
of 35 blocks will bypass the VMS V6.x VIOC [Virtual I/O Cache],
@@ -144,12 +142,6 @@ Boston, MA 02111-1307, USA. */
#define QSORT_WORKAROUND /* do not use VAXCRTL's qsort */
/* use ANSI/SYSV style byte manipulation routines instead of BSD ones */
-#define bcopy(s,d,n) memcpy((d),(s),(n))
-#define bzero(d,n) memset((d),0,(n))
-#define bcmp(l,r,n) memcmp((l),(r),(n))
-#define index strchr
-#define rindex strrchr
-
/* rename all too-long external symbol names to avoid warnings */
#define bc_check_for_full_enumeration_handling bc_check_for_full_enum_handling
#define check_for_full_enumeration_handling check_for_full_enum_handling
@@ -165,11 +157,14 @@ Boston, MA 02111-1307, USA. */
#define current_function_uses_const_pool curfunc_uses_const_pool
#define current_function_uses_pic_offset_table curfunc_uses_pic_offset_table
#define dbxout_resume_previous_source_file dbxout_resume_previous_src_file
+#define expand_builtin_extract_return_addr expand_builtin_extract_ret_addr
+#define expand_builtin_set_return_addr_reg expand_builtin_set_ret_addr_reg
#define expand_start_loop_continue_elsewhere expnd_start_loop_cont_elsewhere
#define flag_schedule_insns_after_reload flag_sched_insns_after_reload
#define get_dynamic_handler_chain_libfunc get_dynamic_hndlr_chain_libfunc
#define lookup_name_current_level_global lookup_name_current_level_gbl
#define maybe_building_objc_message_expr maybe_building_objc_msg_expr
+#define mesg_implicit_function_declaration mesg_implicit_func_declaration
#define output_deferred_addressed_constants output_deferred_addr_constants
#define protect_cleanup_actions_with_terminate protect_cleanup_act_w_terminate
#define reg_overlap_mentioned_for_reload_p reg_overlap_mtnd_for_reload_p
diff --git a/gcc/config/we32k/we32k.c b/gcc/config/we32k/we32k.c
index 3dceb07e8c9..091f3c6680b 100644
--- a/gcc/config/we32k/we32k.c
+++ b/gcc/config/we32k/we32k.c
@@ -1,6 +1,6 @@
/* Subroutines for insn-output.c for AT&T we32000 Family.
Contributed by John Wehle (john@feith1.uucp)
- Copyright (C) 1991-1992 Free Software Foundation, Inc.
+ Copyright (C) 1991, 1992, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -20,8 +20,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "real.h"
diff --git a/gcc/config/winnt/config-nt.sed b/gcc/config/winnt/config-nt.sed
index ee0088ad818..8323f7c733b 100644
--- a/gcc/config/winnt/config-nt.sed
+++ b/gcc/config/winnt/config-nt.sed
@@ -13,7 +13,7 @@ s/$(srcdir)\/c-gperf/c-gperf/g
/^lang_specs_files=/ d
/^lang_options_files=/ d
/^version=/ c\
-version=2.7.2
+version=2.8.1
s/CC = cc/CC = cl/
s/^SHELL =.*/SHELL =/
s/CFLAGS = -g/CFLAGS =/
diff --git a/gcc/config/winnt/win-nt.h b/gcc/config/winnt/win-nt.h
index 4b93f8c118d..14f3f87bcdb 100644
--- a/gcc/config/winnt/win-nt.h
+++ b/gcc/config/winnt/win-nt.h
@@ -1,6 +1,6 @@
/* Operating system specific defines to be used when targeting GCC for
Windows NT 3.x.
- Copyright (C) 1994, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1994, 1995, 1997 Free Software Foundation, Inc.
Contributed by Douglas B. Rupp (drupp@cs.washington.edu).
This file is part of GNU CC.
@@ -29,7 +29,7 @@ Boston, MA 02111-1307, USA. */
#define LINK_SPEC "-stack 5000000,5000000 -noinhibit-exec %{g}"
#undef CPP_SPEC
-#define CPP_SPEC "-lang-c-c++-comments"
+#define CPP_SPEC ""
#undef STANDARD_EXEC_PREFIX
#define STANDARD_EXEC_PREFIX ""
@@ -51,7 +51,7 @@ Boston, MA 02111-1307, USA. */
#undef INCLUDE_DEFAULTS
#define INCLUDE_DEFAULTS \
{ \
- { 0, 0, 0 } \
+ { 0, 0, 0, 0 } \
}
#undef STDC_VALUE
diff --git a/gcc/config/winnt/xm-winnt.h b/gcc/config/winnt/xm-winnt.h
index be62d020138..f56073cb8de 100644
--- a/gcc/config/winnt/xm-winnt.h
+++ b/gcc/config/winnt/xm-winnt.h
@@ -1,5 +1,5 @@
/* Configuration for GNU compiler for processor running Windows NT 3.x.
- Copyright (C) 1993, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1993, 1995, 1997 Free Software Foundation, Inc.
Contributed by Douglas B. Rupp (drupp@cs.washington.edu)
This file is part of GNU CC.
@@ -42,11 +42,6 @@ Boston, MA 02111-1307, USA. */
#endif
#define NO_SYS_SIGLIST 1
-#define bcmp(a,b,c) memcmp (a,b,c)
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define index strchr
-#define rindex strrchr
#define kill(a,b) raise(b)
#define OBJECT_SUFFIX ".obj"
@@ -66,4 +61,3 @@ Boston, MA 02111-1307, USA. */
#define S_IRWXU S_IRUSR | S_IWUSR | S_IXUSR
#define S_ISREG(m) (((m)&S_IFMT) == S_IFREG)
#define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR)
-
diff --git a/gcc/config/xm-gnu.h b/gcc/config/xm-gnu.h
index 62debf6de94..64e8e2fa817 100644
--- a/gcc/config/xm-gnu.h
+++ b/gcc/config/xm-gnu.h
@@ -23,7 +23,6 @@ Boston, MA 02111-1307, USA. */
instead $xm_file should be CPU/xm-gnu.h, which should include both
CPU/xm-CPU.h and this file xm-gnu.h. */
-#define HAVE_STRERROR /* GNU has strerror. */
#define POSIX /* GNU complies to POSIX.1. */
#ifndef inhibit_libc
diff --git a/gcc/config/xm-std32.h b/gcc/config/xm-std32.h
new file mode 100644
index 00000000000..c52782e9741
--- /dev/null
+++ b/gcc/config/xm-std32.h
@@ -0,0 +1,34 @@
+/* Configuration for GNU C-compiler for standard 32-bit host machine.
+ Copyright (C) 1997 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.
+
+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. */
+
+/* #defines that need visibility everywhere. */
+#define FALSE 0
+#define TRUE 1
+
+/* This describes the machine the compiler is hosted on. */
+#define HOST_BITS_PER_CHAR 8
+#define HOST_BITS_PER_SHORT 16
+#define HOST_BITS_PER_INT 32
+#define HOST_BITS_PER_LONG 32
+#define HOST_BITS_PER_LONGLONG 64
+
+/* Arguments to use with `exit'. */
+#define SUCCESS_EXIT_CODE 0
+#define FATAL_EXIT_CODE 33
diff --git a/gcc/configure.in b/gcc/configure.in
index 4a92d77de3b..c12f8b9ce64 100644
--- a/gcc/configure.in
+++ b/gcc/configure.in
@@ -1,7 +1,7 @@
# configure.in for GNU CC
# Process this file with autoconf to generate a configuration script.
-# Copyright (C) 1997 Free Software Foundation, Inc.
+# Copyright (C) 1997, 1998 Free Software Foundation, Inc.
#This file is part of GNU CC.
@@ -22,7 +22,7 @@
# Initialization and defaults
AC_INIT(tree.c)
-AC_CONFIG_HEADER(config.h:config.in)
+AC_CONFIG_HEADER(auto-config.h:config.in)
native_prefix=/usr
remove=rm
@@ -121,23 +121,60 @@ esac
# Determine the host, build, and target systems
AC_CANONICAL_SYSTEM
+# Find the native compiler
+AC_PROG_CC
+AC_PROG_MAKE_SET
+
# Find some useful tools
AC_PROG_AWK
AC_PROG_LEX
-AC_PROG_LN_S
AC_PROG_RANLIB
AC_PROG_YACC
AC_PROG_INSTALL
-# Find the native compiler
-AC_PROG_CC
-AC_PROG_MAKE_SET
+AC_HEADER_STDC
+AC_HEADER_TIME
+AC_CHECK_HEADERS(limits.h stddef.h string.h strings.h stdlib.h time.h fcntl.h unistd.h sys/file.h sys/time.h sys/resource.h sys/param.h sys/times.h)
+
+# Use <inttypes.h> only if it exists,
+# doesn't clash with <sys/types.h>, and declares intmax_t.
+AC_MSG_CHECKING(for inttypes.h)
+AC_CACHE_VAL(gcc_cv_header_inttypes_h,
+[AC_TRY_COMPILE(
+ [#include <sys/types.h>
+#include <inttypes.h>],
+ [intmax_t i = -1;],
+ gcc_cv_header_inttypes_h=yes,
+ gcc_cv_header_inttypes_h=no)])
+AC_MSG_RESULT($gcc_cv_header_inttypes_h)
+if test $gcc_cv_header_inttypes_h = yes; then
+ AC_DEFINE(HAVE_INTTYPES_H)
+fi
-AC_CHECK_HEADERS(stddef.h string.h strings.h stdlib.h time.h unistd.h)
+AC_CHECK_FUNCS(strerror)
+AC_CHECK_FUNCS(putenv)
+AC_CHECK_FUNCS(popen)
+AC_CHECK_FUNCS(vprintf)
+AC_CHECK_FUNCS(bcopy)
+AC_CHECK_FUNCS(bzero)
+AC_CHECK_FUNCS(bcmp)
+AC_CHECK_FUNCS(index)
+AC_CHECK_FUNCS(rindex)
+AC_CHECK_FUNCS(kill)
+AC_CHECK_FUNCS(getrlimit)
+AC_CHECK_FUNCS(setrlimit)
+AC_CHECK_FUNCS(sysconf)
GCC_NEED_DECLARATION(malloc)
GCC_NEED_DECLARATION(realloc)
+GCC_NEED_DECLARATION(calloc)
GCC_NEED_DECLARATION(free)
+GCC_NEED_DECLARATION(index)
+GCC_NEED_DECLARATION(rindex)
+GCC_NEED_DECLARATION(getenv)
+GCC_NEED_DECLARATION(sbrk)
+
+AC_DECL_SYS_SIGLIST
# File extensions
manext='.1'
@@ -204,7 +241,7 @@ for machine in $build $host $target; do
c*-convex-*)
cpu_type=convex
;;
- i[[3456]]86-*-*)
+ i[[34567]]86-*-*)
cpu_type=i386
;;
hppa*-*-*)
@@ -275,21 +312,32 @@ for machine in $build $host $target; do
fixincludes=Makefile.in
gas=yes gnu_ld=yes
;;
+ alpha*-*-linux-gnulibc1*)
+ tm_file="${tm_file} alpha/linux.h alpha/elf.h"
+ xm_file="${xm_file} alpha/xm-linux.h"
+ target_cpu_default="MASK_GAS"
+ tmake_file="t-linux t-linux-gnulibc1 alpha/t-linux"
+ xmake_file=none
+ fixincludes=Makefile.in
+ gas=yes gnu_ld=yes
+ if [[ x$enable_threads = xyes ]]; then
+ thread_file='posix'
+ fi
+ ;;
alpha*-*-linux-gnu*)
tm_file="${tm_file} alpha/linux.h alpha/elf.h"
xm_file="${xm_file} alpha/xm-linux.h"
target_cpu_default="MASK_GAS"
- gas=no
tmake_file="t-linux alpha/t-linux"
+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
xmake_file=none
fixincludes=Makefile.in
- extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
gas=yes gnu_ld=yes
if [[ x$enable_threads = xyes ]]; then
thread_file='posix'
fi
;;
- alpha*-dec-osf[[456789]]*)
+ alpha*-dec-osf*)
if [[ x$stabs = xyes ]]
then
tm_file="${tm_file} dbx.h"
@@ -300,51 +348,24 @@ for machine in $build $host $target; do
fi
broken_install=yes
use_collect2=yes
- # Some versions of OSF4 (specifically X4.0-9 296.7) have
- # a broken tar, so we use cpio instead.
case $machine in
- alpha*-dec-osf4*)
+ *-*-osf1.2)
+ tm_file="${tm_file} alpha/osf12.h alpha/osf2or3.h"
+ ;;
+ *-*-osf[[23]]*)
+ tm_file="${tm_file} alpha/osf2or3.h"
+ ;;
+ *-*-osf4*)
+ # Some versions of OSF4 (specifically X4.0-9 296.7) have
+ # a broken tar, so we use cpio instead.
install_headers_dir=install-headers-cpio
;;
esac
- ;;
- alpha*-dec-osf[[23]]*)
- tm_file="${tm_file} alpha/osf2or3.h"
- if [[ x$stabs = xyes ]]
- then
- tm_file="${tm_file} dbx.h"
- fi
- if [[ x$gas != xyes ]]
- then
- extra_passes="mips-tfile mips-tdump"
- fi
- broken_install=yes
- use_collect2=yes
- ;;
- alpha*-dec-osf1.2)
- tm_file="${tm_file} alpha/osf12.h"
- if [[ x$stabs = xyes ]]
- then
- tm_file="${tm_file} dbx.h"
- fi
- if [[ x$gas != xyes ]]
- then
- extra_passes="mips-tfile mips-tdump"
- fi
- broken_install=yes
- use_collect2=yes
- ;;
- alpha*-*-osf*)
- if [[ x$stabs = xyes ]]
- then
- tm_file="${tm_file} dbx.h"
- fi
- if [[ x$gas != xyes ]]
- then
- extra_passes="mips-tfile mips-tdump"
- fi
- broken_install=yes
- use_collect2=yes
+ case $machine in
+ *-*-osf4.0[[b-z]] | *-*-osf4.[[1-9]]*)
+ target_cpu_default=MASK_SUPPORT_ARCH
+ ;;
+ esac
;;
alpha*-*-winnt3*)
tm_file="${tm_file} alpha/win-nt.h"
@@ -369,6 +390,9 @@ for machine in $build $host $target; do
tmake_file=alpha/t-vms
fixincludes=Makefile.in
;;
+ arc-*-elf*)
+ extra_parts="crtinit.o crtfini.o"
+ ;;
arm-*-coff* | armel-*-coff*)
tm_file=arm/coff.h
tmake_file=arm/t-bare
@@ -401,12 +425,11 @@ for machine in $build $host $target; do
arm-*-netbsd*)
tm_file=arm/netbsd.h
xm_file=arm/xm-netbsd.h
- tmake_file=arm/t-netbsd
- # On NetBSD, the headers are already okay.
- fixincludes=Makefile.in
- use_collect2=yes
+ tmake_file="t-netbsd arm/t-netbsd"
+ # On NetBSD, the headers are already okay, except for math.h.
+ fixincludes=fixinc.math
;;
- arm-*-linux-gnuaout*) # ARM Linux
+ arm-*-linux-gnuaout*) # ARM GNU/Linux
cpu_type=arm
xm_file=arm/xm-linux.h
xmake_file=x-linux
@@ -418,6 +441,7 @@ for machine in $build $host $target; do
;;
arm-*-aout)
tm_file=arm/aout.h
+ tmake_file=arm/t-bare
;;
c1-convex-*) # Convex C1
target_cpu_default=1
@@ -642,7 +666,7 @@ for machine in $build $host $target; do
;;
i370-*-mvs*)
;;
- i[[3456]]86-ibm-aix*) # IBM PS/2 running AIX
+ i[[34567]]86-ibm-aix*) # IBM PS/2 running AIX
if [[ x$gas = xyes ]]
then
tm_file=i386/aix386.h
@@ -668,7 +692,7 @@ for machine in $build $host $target; do
extra_parts="crtbegin.o crtend.o"
tmake_file=i386/t-crtpic
;;
- i[[3456]]86-next-*)
+ i[[34567]]86-next-*)
tm_file=i386/next.h
xm_file=i386/xm-next.h
tmake_file=i386/t-next
@@ -678,7 +702,7 @@ for machine in $build $host $target; do
thread_file='mach'
fi
;;
- i[[3456]]86-sequent-bsd*) # 80386 from Sequent
+ i[[34567]]86-sequent-bsd*) # 80386 from Sequent
use_collect2=yes
if [[ x$gas = xyes ]]
then
@@ -687,7 +711,7 @@ for machine in $build $host $target; do
tm_file=i386/sequent.h
fi
;;
- i[[3456]]86-sequent-ptx1*)
+ i[[34567]]86-sequent-ptx1*)
xm_file=i386/xm-sysv3.h
xmake_file=i386/x-sysv3
tm_file=i386/seq-sysv3.h
@@ -697,7 +721,7 @@ for machine in $build $host $target; do
install_headers_dir=install-headers-cpio
broken_install=yes
;;
- i[[3456]]86-sequent-ptx2* | i[[3456]]86-sequent-sysv3*)
+ i[[34567]]86-sequent-ptx2* | i[[34567]]86-sequent-sysv3*)
xm_file=i386/xm-sysv3.h
xmake_file=i386/x-sysv3
tm_file=i386/seq2-sysv3.h
@@ -707,7 +731,7 @@ for machine in $build $host $target; do
install_headers_dir=install-headers-cpio
broken_install=yes
;;
- i[[3456]]86-sequent-ptx4* | i[[3456]]86-sequent-sysv4*)
+ i[[34567]]86-sequent-ptx4* | i[[34567]]86-sequent-sysv4*)
xm_file=i386/xm-sysv4.h
xmake_file=x-svr4
tm_file=i386/ptx4-i.h
@@ -722,54 +746,51 @@ for machine in $build $host $target; do
tm_file=i386/sun.h
use_collect2=yes
;;
- i[[3456]]86-*-aout*)
+ i[[34567]]86-*-aout*)
tm_file=i386/i386-aout.h
tmake_file=i386/t-i386bare
;;
- i[[3456]]86-*-bsdi* | i[[345]]86-*-bsd386*)
+ i[[34567]]86-*-bsdi* | i[[34567]]86-*-bsd386*)
tm_file=i386/bsd386.h
xm_file=i386/xm-bsd386.h
# tmake_file=t-libc-ok
;;
- i[[3456]]86-*-bsd*)
+ i[[34567]]86-*-bsd*)
tm_file=i386/386bsd.h
xm_file=i386/xm-bsd386.h
# tmake_file=t-libc-ok
# Next line turned off because both 386BSD and BSD/386 use GNU ld.
# use_collect2=yes
;;
- i[[3456]]86-*-freebsdelf*)
+ i[[34567]]86-*-freebsdelf*)
tm_file="i386/i386.h i386/att.h linux.h i386/freebsd-elf.h i386/perform.h"
- xm_file=i386/xm-freebsd.h
- # On FreeBSD, the headers are already ok.
- fixincludes=Makefile.in
+ # On FreeBSD, the headers are already ok, except for math.h.
+ fixincludes=fixinc.math
tmake_file=i386/t-freebsd
gas=yes
gnu_ld=yes
stabs=yes
;;
- i[[3456]]86-*-freebsd*)
+ i[[34567]]86-*-freebsd*)
tm_file=i386/freebsd.h
- xm_file=i386/xm-freebsd.h
- # On FreeBSD, the headers are already ok.
- fixincludes=Makefile.in
+ # On FreeBSD, the headers are already ok, except for math.h.
+ fixincludes=fixinc.math
tmake_file=i386/t-freebsd
;;
- i[[3456]]86-*-netbsd*)
+ i[[34567]]86-*-netbsd*)
tm_file=i386/netbsd.h
- xm_file=i386/xm-netbsd.h
- # On NetBSD, the headers are already okay.
- fixincludes=Makefile.in
+ # On NetBSD, the headers are already okay, except for math.h.
+ fixincludes=fixinc.math
tmake_file=t-netbsd
;;
- i[[3456]]86-*-coff*)
+ i[[34567]]86-*-coff*)
tm_file=i386/i386-coff.h
tmake_file=i386/t-i386bare
;;
- i[[3456]]86-*-isc*) # 80386 running ISC system
+ i[[34567]]86-*-isc*) # 80386 running ISC system
xm_file=i386/xm-isc.h
case $machine in
- i[[345]]86-*-isc[[34]]*)
+ i[[34567]]86-*-isc[[34]]*)
xmake_file=i386/x-isc3
;;
*)
@@ -789,65 +810,72 @@ for machine in $build $host $target; do
install_headers_dir=install-headers-cpio
broken_install=yes
;;
- i[[3456]]86-*-linux-gnuoldld*) # Intel 80386's running Linux
+ i[[34567]]86-*-linux-gnuoldld*) # Intel 80386's running GNU/Linux
xm_file=i386/xm-linux.h # with a.out format using pre BFD linkers
xmake_file=x-linux-aout
tmake_file="t-linux-aout i386/t-crtstuff"
tm_file=i386/linux-oldld.h
- fixincludes=Makefile.in #On Linux, the headers are ok already.
+ fixincludes=Makefile.in
broken_install=yes
gnu_ld=yes
;;
- i[[3456]]86-*-linux-gnuaout*) # Intel 80386's running Linux
+ i[[34567]]86-*-linux-gnuaout*) # Intel 80386's running GNU/Linux
xm_file=i386/xm-linux.h # with a.out format
xmake_file=x-linux-aout
tmake_file="t-linux-aout i386/t-crtstuff"
tm_file=i386/linux-aout.h
- fixincludes=Makefile.in #On Linux, the headers are ok already.
+ fixincludes=Makefile.in #The headers are ok already.
broken_install=yes
gnu_ld=yes
;;
- i[[3456]]86-*-linux-gnulibc1)
- xm_file=i386/xm-linux.h # Intel 80386's running Linux
+ i[[34567]]86-*-linux-gnulibc1)
+ xm_file=i386/xm-linux.h # Intel 80386's running GNU/Linux
xmake_file=x-linux # with ELF format using the
- tm_file=i386/linux.h # Linux C library 5
+ tm_file=i386/linux.h # GNU/Linux C library 5
tmake_file="t-linux t-linux-gnulibc1 i386/t-crtstuff"
extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
- fixincludes=Makefile.in #On Linux, the headers are ok already.
+ fixincludes=Makefile.in # The headers are ok already.
broken_install=yes
gnu_ld=yes
if [[ x$enable_threads = xyes ]]; then
thread_file='single'
fi
;;
- i[[3456]]86-*-linux-gnu*) # Intel 80386's running Linux
+ i[[34567]]86-*-linux-gnu*) # Intel 80386's running GNU/Linux
xm_file=i386/xm-linux.h # with ELF format using glibc 2
- xmake_file=x-linux # aka Linux C library 6
+ xmake_file=x-linux # aka GNU/Linux C library 6
tm_file=i386/linux.h
tmake_file="t-linux i386/t-crtstuff"
extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
- fixincludes=Makefile.in #On Linux, the headers are ok already.
+ fixincludes=Makefile.in # The headers are ok already.
broken_install=yes
gnu_ld=yes
if [[ x$enable_threads = xyes ]]; then
thread_file='posix'
fi
;;
- i[[3456]]86-*-gnu*)
+ i[[34567]]86-*-gnu*)
+ ;;
+ i[[34567]]86-go32-msdos | i[[34567]]86-*-go32*)
+ xm_file=i386/xm-go32.h
+ tm_file=i386/go32.h
+ tmake_file=i386/t-go32
;;
- i[[3456]]86-go32-msdos | i[[3456]]86-*-go32*)
+ i[[34567]]86-pc-msdosdjgpp*)
xm_file=i386/xm-go32.h
tm_file=i386/go32.h
tmake_file=i386/t-go32
+ gnu_ld=yes
+ gas=yes
;;
- i[[3456]]86-moss-msdos* | i[[3456]]86-*-moss*)
+ i[[34567]]86-moss-msdos* | i[[34567]]86-*-moss*)
tm_file=i386/moss.h
tmake_file=t-libc-ok
fixincludes=Makefile.in
gnu_ld=yes
gas=yes
;;
- i[[3456]]86-*-lynxos*)
+ i[[34567]]86-*-lynxos*)
if [[ x$gas = xyes ]]
then
tm_file=i386/lynx.h
@@ -858,12 +886,12 @@ for machine in $build $host $target; do
tmake_file=i386/t-i386bare
xmake_file=x-lynx
;;
- i[[3456]]86-*-mach*)
+ i[[34567]]86-*-mach*)
tm_file=i386/mach.h
# tmake_file=t-libc-ok
use_collect2=yes
;;
- i[[3456]]86-*-osfrose*) # 386 using OSF/rose
+ i[[34567]]86-*-osfrose*) # 386 using OSF/rose
if [[ x$elf = xyes ]]
then
tm_file=i386/osfelf.h
@@ -877,27 +905,28 @@ for machine in $build $host $target; do
tmake_file=i386/t-osf
extra_objs=halfpic.o
;;
- i[[345]]86-go32-rtems*)
+ i[[34567]]86-go32-rtems*)
cpu_type=i386
xm_file=i386/xm-go32.h
tm_file=i386/go32-rtems.h
tmake_file="i386/t-go32 t-rtems"
;;
- i[[345]]86-*-rtems*)
+ i[[34567]]86-*-rtems*)
cpu_type=i386
tm_file=i386/rtems.h
tmake_file="i386/t-i386bare t-rtems"
;;
- i[[3456]]86-*-sco3.2v5*) # 80386 running SCO Open Server 5
+ i[[34567]]86-*-sco3.2v5*) # 80386 running SCO Open Server 5
xm_file=i386/xm-sco5.h
xmake_file=i386/x-sco5
fixincludes=fixinc.sco
broken_install=yes
+ install_headers_dir=install-headers-cpio
tm_file=i386/sco5.h
tmake_file=i386/t-sco5
extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
;;
- i[[3456]]86-*-sco3.2v4*) # 80386 running SCO 3.2v4 system
+ i[[34567]]86-*-sco3.2v4*) # 80386 running SCO 3.2v4 system
xm_file=i386/xm-sco.h
xmake_file=i386/x-sco4
fixincludes=fixinc.sco
@@ -915,7 +944,7 @@ for machine in $build $host $target; do
fi
truncate_target=yes
;;
- i[[3456]]86-*-sco*) # 80386 running SCO system
+ i[[34567]]86-*-sco*) # 80386 running SCO system
xm_file=i386/xm-sco.h
xmake_file=i386/x-sco
broken_install=yes
@@ -932,7 +961,7 @@ for machine in $build $host $target; do
fi
truncate_target=yes
;;
- i[[3456]]86-*-solaris2*)
+ i[[34567]]86-*-solaris2*)
xm_file=i386/xm-sysv4.h
if [[ x$stabs = xyes ]]
then
@@ -941,15 +970,15 @@ for machine in $build $host $target; do
tm_file=i386/sol2.h
fi
tmake_file=i386/t-sol2
- extra_parts="crt1.o crti.o crtn.o crtbegin.o crtend.o"
+ extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o"
xmake_file=x-svr4
- fixincludes=fixinc.svr4
+ fixincludes=fixinc.math
broken_install=yes
if [[ x$enable_threads = xyes ]]; then
thread_file='solaris'
fi
;;
- i[[3456]]86-*-sysv4*) # Intel 80386's running system V.4
+ i[[34567]]86-*-sysv4*) # Intel 80386's running system V.4
xm_file=i386/xm-sysv4.h
tm_file=i386/sysv4.h
if [[ x$stabs = xyes ]]
@@ -960,7 +989,7 @@ for machine in $build $host $target; do
xmake_file=x-svr4
extra_parts="crtbegin.o crtend.o"
;;
- i[[3456]]86-*-sysv*) # Intel 80386's running system V
+ i[[34567]]86-*-sysv*) # Intel 80386's running system V
xm_file=i386/xm-sysv3.h
xmake_file=i386/x-sysv3
if [[ x$gas = xyes ]]
@@ -987,7 +1016,7 @@ for machine in $build $host $target; do
tmake_file=i386/t-vsta
xmake_file=i386/x-vsta
;;
- i[[3456]]86-*-pe | i[[3456]]86-*-cygwin32)
+ i[[34567]]86-*-pe | i[[34567]]86-*-cygwin32)
xm_file="${xm_file} i386/xm-cygwin32.h"
tmake_file=i386/t-cygwin32
tm_file=i386/cygwin32.h
@@ -999,7 +1028,7 @@ for machine in $build $host $target; do
fi
exeext=.exe
;;
- i[[3456]]86-*-mingw32)
+ i[[34567]]86-*-mingw32*)
tm_file=i386/mingw32.h
xm_file="${xm_file} i386/xm-mingw32.h"
tmake_file=i386/t-cygwin32
@@ -1010,8 +1039,15 @@ for machine in $build $host $target; do
thread_file='win32'
fi
exeext=.exe
+ case $machine in
+ *mingw32msv*)
+ ;;
+ *minwg32crt* | *mingw32*)
+ tm_file="${tm_file} i386/crtdll.h"
+ ;;
+ esac
;;
- i[[3456]]86-*-winnt3*)
+ i[[34567]]86-*-winnt3*)
tm_file=i386/win-nt.h
out_file=i386/i386.c
xm_file=i386/xm-winnt.h
@@ -1028,18 +1064,18 @@ for machine in $build $host $target; do
thread_file='win32'
fi
;;
- i[[3456]]86-dg-dgux)
+ i[[34567]]86-dg-dgux*)
xm_file=i386/xm-dgux.h
out_file=i386/dgux.c
tm_file=i386/dgux.h
tmake_file=i386/t-dgux
xmake_file=i386/x-dgux
- fixincludes=fixinc.dgux
+ fixincludes=Makefile.in # There is nothing to fix
install_headers_dir=install-headers-cpio
;;
i860-alliant-*) # Alliant FX/2800
tm_file="${tm_file} svr4.h i860/sysv4.h i860/fx2800.h"
- xm_file="${xm_file} i860/xm-fx2800.h"
+ xm_file="${xm_file}"
xmake_file=i860/x-fx2800
tmake_file=i860/t-fx2800
extra_parts="crtbegin.o crtend.o"
@@ -1080,7 +1116,7 @@ for machine in $build $host $target; do
tmake_file=i960/t-vxworks960
use_collect2=yes
;;
- i960-wrs-vxworks5*)
+ i960-wrs-vxworks5* | i960-wrs-vxworks)
tm_file="${tm_file} dbxcoff.h i960/i960-coff.h i960/vx960-coff.h"
tmake_file=i960/t-vxworks960
use_collect2=yes
@@ -1246,7 +1282,7 @@ for machine in $build $host $target; do
;;
m68k-ncr-sysv*) # NCR Tower 32 SVR3
tm_file=m68k/tower-as.h
- xm_file=m68k/xm-tower.h
+ xm_file="${xm_file} xm-svr3.h"
xmake_file=m68k/x-tower
extra_parts="crtbegin.o crtend.o"
extra_headers=math-68881.h
@@ -1398,7 +1434,6 @@ for machine in $build $host $target; do
else
tm_file=m68k/sun3.h
fi
- xm_file=m68k/xm-sun3.h
use_collect2=yes
extra_headers=math-68881.h
;;
@@ -1431,9 +1466,8 @@ for machine in $build $host $target; do
;;
m68k-*-netbsd*)
tm_file=m68k/netbsd.h
- xm_file=m68k/xm-netbsd.h
- # On NetBSD, the headers are already okay.
- fixincludes=Makefile.in
+ # On NetBSD, the headers are already okay, except for math.h.
+ fixincludes=fixinc.math
tmake_file=t-netbsd
;;
m68k-*-sysv3*) # Motorola m68k's running system V.3
@@ -1449,32 +1483,32 @@ for machine in $build $host $target; do
extra_parts="crtbegin.o crtend.o"
extra_headers=math-68881.h
;;
- m68k-*-linux-gnuaout*) # Motorola m68k's running Linux
+ m68k-*-linux-gnuaout*) # Motorola m68k's running GNU/Linux
xm_file=m68k/xm-linux.h # with a.out format
xmake_file=x-linux
tm_file=m68k/linux-aout.h
tmake_file="t-linux-aout m68k/t-linux-aout"
- fixincludes=Makefile.in #On Linux, the headers are ok already.
+ fixincludes=Makefile.in # The headers are ok already.
extra_headers=math-68881.h
gnu_ld=yes
;;
- m68k-*-linux-gnulibc1) # Motorola m68k's running Linux
+ m68k-*-linux-gnulibc1) # Motorola m68k's running GNU/Linux
xm_file=m68k/xm-linux.h # with ELF format using the
- xmake_file=x-linux # Linux C library 5
+ xmake_file=x-linux # GNU/Linux C library 5
tm_file=m68k/linux.h
tmake_file="t-linux t-linux-gnulibc1 m68k/t-linux"
extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
- fixincludes=Makefile.in #On Linux, the headers are ok already.
+ fixincludes=Makefile.in # The headers are ok already.
extra_headers=math-68881.h
gnu_ld=yes
;;
- m68k-*-linux-gnu*) # Motorola m68k's running Linux
+ m68k-*-linux-gnu*) # Motorola m68k's running GNU/Linux
xm_file=m68k/xm-linux.h # with ELF format using glibc 2
- xmake_file=x-linux # aka the Linux C library 6.
+ xmake_file=x-linux # aka the GNU/Linux C library 6.
tm_file=m68k/linux.h
tmake_file="t-linux m68k/t-linux"
extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
- fixincludes=Makefile.in #On Linux, the headers are ok already.
+ fixincludes=Makefile.in # The headers are ok already.
extra_headers=math-68881.h
gnu_ld=yes
if [[ x$enable_threads = xyes ]]; then
@@ -1738,14 +1772,12 @@ for machine in $build $host $target; do
;;
mips-dec-netbsd*) # Decstation running NetBSD
tm_file=mips/netbsd.h
- xm_file=mips/xm-netbsd.h
- # On NetBSD, the headers are already okay.
- fixincludes=Makefile.in
+ # On NetBSD, the headers are already okay, except for math.h.
+ fixincludes=fixinc.math
tmake_file=t-netbsd
if [[ x$prefix = xNONE ]]; then
prefix=$native_prefix
fi
- prefix=$native_prefix
;;
mips-sony-bsd* | mips-sony-newsos*) # Sony NEWS 3600 or risc/news.
tm_file=mips/news4.h
@@ -2000,6 +2032,14 @@ for machine in $build $host $target; do
tm_file=mips/rtems64.h
tmake_file="mips/t-ecoff t-rtems"
;;
+ mipstx39el-*-elf*)
+ tm_file="mips/r3900.h mips/elfl.h mips/abi64.h libgloss.h"
+ tmake_file=mips/t-ecoff
+ ;;
+ mipstx39-*-elf*)
+ tm_file="mips/r3900.h mips/elf.h mips/abi64.h libgloss.h"
+ tmake_file=mips/t-ecoff
+ ;;
mips-*-*) # Default MIPS RISC-OS 4.0.
if [[ x$stabs = xyes ]]; then
tm_file="${tm_file} dbx.h"
@@ -2074,9 +2114,8 @@ for machine in $build $host $target; do
;;
ns32k-pc532-netbsd*)
tm_file=ns32k/netbsd.h
- xm_file=ns32k/xm-netbsd.h
- # On NetBSD, the headers are already okay.
- fixincludes=Makefile.in
+ # On NetBSD, the headers are already okay, except for math.h.
+ fixincludes=fixinc.math
tmake_file=t-netbsd
;;
pdp11-*-bsd)
@@ -2229,7 +2268,7 @@ for machine in $build $host $target; do
tmake_file="rs6000/t-ppc rs6000/t-ppccomm"
fi
xmake_file=rs6000/x-sysv4
- fixincludes=fixinc.svr4
+ fixincludes=fixinc.math
extra_headers=ppc-asm.h
;;
rs6000-ibm-aix3.[[01]]*)
@@ -2281,6 +2320,11 @@ for machine in $build $host $target; do
tm_file=sh/elf.h
float_format=sh
;;
+ sh-*-rtems*)
+ tmake_file="sh/t-sh t-rtems"
+ tm_file=sh/rtems.h
+ float_format=sh
+ ;;
sh-*-*)
float_format=sh
;;
@@ -2299,39 +2343,45 @@ for machine in $build $host $target; do
;;
sparc-*-netbsd*)
tm_file=sparc/netbsd.h
- xm_file=sparc/xm-netbsd.h
- # On NetBSD, the headers are already okay.
- fixincludes=Makefile.in
+ # On NetBSD, the headers are already okay, except for math.h.
+ fixincludes=fixinc.math
tmake_file=t-netbsd
;;
sparc-*-bsd*)
tm_file=sparc/bsd.h
;;
- sparc-*-linux-gnuaout*) # Sparc's running Linux, a.out
- xm_file=sparc/xm-linux.h
+ sparc-*-elf*)
+ tm_file=sparc/elf.h
+ tmake_file=sparc/t-elf
+ extra_parts="crti.o crtn.o crtbegin.o crtend.o"
+ #float_format=i128
+ float_format=i64
+ ;;
+ sparc-*-linux-gnuaout*) # Sparc's running GNU/Linux, a.out
+ xm_file="sparc/xm-sparc.h sparc/xm-linux.h"
tm_file=sparc/linux-aout.h
xmake_file=x-linux
- fixincludes=Makefile.in #On Linux, the headers are ok already.
+ fixincludes=Makefile.in # The headers are ok already.
broken_install=yes
gnu_ld=yes
;;
- sparc-*-linux-gnulibc1*) # Sparc's running Linux
- xm_file=sparc/xm-linux.h # with ELF format using the
- xmake_file=x-linux # Linux C library 5.
+ sparc-*-linux-gnulibc1*) # Sparc's running GNU/Linux, libc5
+ xm_file="sparc/xm-sparc.h sparc/xm-linux.h"
+ xmake_file=x-linux
tm_file=sparc/linux.h
tmake_file="t-linux t-linux-gnulibc1 sparc/t-linux"
extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
- fixincludes=Makefile.in #On Linux, the headers are ok already.
+ fixincludes=Makefile.in # The headers are ok already.
broken_install=yes
gnu_ld=yes
;;
- sparc-*-linux-gnu*) # Sparc's running Linux
- xm_file=sparc/xm-linux.h # with ELF format using glibc 2
- xmake_file=x-linux # aka the Linux C library 6.
+ sparc-*-linux-gnu*) # Sparc's running GNU/Linux, libc6
+ xm_file="sparc/xm-sparc.h sparc/xm-linux.h"
+ xmake_file=x-linux
tm_file=sparc/linux.h
tmake_file="t-linux sparc/t-linux"
extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
- fixincludes=Makefile.in #On Linux, the headers are ok already.
+ fixincludes=Makefile.in # The headers are ok already.
broken_install=yes
gnu_ld=yes
if [[ x$enable_threads = xyes ]]; then
@@ -2354,12 +2404,18 @@ for machine in $build $host $target; do
tm_file=sparc/rtems.h
;;
sparc-*-solaris2*)
- tm_file=sparc/sol2.h
+ if [[ x$gnu_ld = xyes ]]
+ then
+ tm_file=sparc/sol2.h
+ else
+ tm_file=sparc/sol2-sld.h
+ fi
xm_file=sparc/xm-sol2.h
tmake_file=sparc/t-sol2
xmake_file=sparc/x-sysv4
extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o"
- fixincludes=fixinc.svr4
+ fixincludes=fixinc.math
+ float_format=i128
broken_install=yes
if [[ x$enable_threads = xyes ]]; then
thread_file='solaris'
@@ -2374,6 +2430,9 @@ for machine in $build $host $target; do
tm_file=sparc/sunos4.h
tmake_file=sparc/t-sunos41
use_collect2=yes
+ if [[ x$gas = xyes ]]; then
+ tm_file="${tm_file} sparc/sun4gas.h"
+ fi
;;
sparc-*-sunos3*)
tm_file=sparc/sun4o3.h
@@ -2413,6 +2472,14 @@ for machine in $build $host $target; do
tm_file=sparc/sp64-elf.h
extra_parts="crtbegin.o crtend.o"
;;
+ sparc64-*-linux*) # 64-bit Sparc's running GNU/Linux
+ tmake_file=sparc/t-sp64
+ xm_file="sparc/xm-sp64.h sparc/xm-linux.h"
+ tm_file=sparc/linux64.h
+ xmake_file=x-linux
+ fixincludes=Makefile.in # The headers are ok already.
+ gnu_ld=yes
+ ;;
# This hasn't been upgraded to GCC 2.
# tahoe-harris-*) # Harris tahoe, using COFF.
# tm_file=tahoe/harris.h
@@ -2424,20 +2491,29 @@ for machine in $build $host $target; do
# cpu_type=gmicro
# use_collect2=yes
# ;;
+ v850-*-*)
+ cpu_type=v850
+ tm_file="v850/v850.h"
+ xm_file="v850/xm-v850.h"
+ if [[ x$stabs = xyes ]]
+ then
+ tm_file="${tm_file} dbx.h"
+ fi
+ use_collect2=no
+ ;;
vax-*-bsd*) # vaxen running BSD
use_collect2=yes
float_format=vax
;;
vax-*-sysv*) # vaxen running system V
tm_file="${tm_file} vax/vaxv.h"
- xm_file="${tm_file} vax/xm-vaxv.h"
+ xm_file="${xm_file} vax/xm-vaxv.h"
float_format=vax
;;
vax-*-netbsd*)
tm_file="${tm_file} netbsd.h vax/netbsd.h"
- xm_file="${xm_file} xm-netbsd.h"
- # On NetBSD, the headers are already okay.
- fixincludes=Makefile.in
+ # On NetBSD, the headers are already okay, except for math.h.
+ fixincludes=fixinc.math
tmake_file=t-netbsd
float_format=vax
;;
@@ -2496,7 +2572,7 @@ for machine in $build $host $target; do
;;
esac
- # Distinguish i[3456]86
+ # Distinguish i[34567]86
# Also, do not run mips-tfile on MIPS if using gas.
# Process --with-cpu= for PowerPC/rs6000
target_cpu_default2=
@@ -2507,13 +2583,19 @@ for machine in $build $host $target; do
i586-*-*)
target_cpu_default2=2
;;
- i686-*-*)
+ i686-*-* | i786-*-*)
target_cpu_default2=3
;;
alpha*-*-*)
case $machine in
+ alphaev6*)
+ target_cpu_default2="MASK_CPU_EV6|MASK_BXW|MASK_CIX|MASK_MAX"
+ ;;
+ alphapca56*)
+ target_cpu_default2="MASK_CPU_EV5|MASK_BWX|TASK_MAX"
+ ;;
alphaev56*)
- target_cpu_default2="MASK_CPU_EV5|MASK_BYTE_OPS"
+ target_cpu_default2="MASK_CPU_EV5|MASK_BWX"
;;
alphaev5*)
target_cpu_default2="MASK_CPU_EV5"
@@ -2530,6 +2612,37 @@ for machine in $build $host $target; do
fi
fi
;;
+ arm*-*-*)
+ case "x$with_cpu" in
+ x)
+ # The most generic
+ target_cpu_default2="TARGET_CPU_generic"
+ ;;
+
+ # Distinguish cores, and major variants
+ # arm7m doesn't exist, but D & I don't affect code
+ xarm[23678] | xarm250 | xarm[67][01]0 \
+ | xarm7m | xarm7dm | xarm7dmi | xarm7tdmi \
+ | xarm7100 | xarm7500 | xarm7500fe | xarm810 \
+ | xstrongarm | xstrongarm110)
+ target_cpu_default2="TARGET_CPU_$with_cpu"
+ ;;
+
+ xyes | xno)
+ echo "--with-cpu must be passed a value" 1>&2
+ exit 1
+ ;;
+
+ *)
+ if [[ x$pass2done = xyes ]]
+ then
+ echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2
+ exit 1
+ fi
+ ;;
+ esac
+ ;;
+
mips*-*-ecoff* | mips*-*-elf*)
if [[ x$gas = xyes ]]
then
@@ -2556,7 +2669,7 @@ for machine in $build $host $target; do
| xrios1 | xrios2 | xrsc | xrsc1 \
| x601 | x602 | x603 | x603e | x604 | x604e | x620 \
| x403 | x505 | x801 | x821 | x823 | x860)
- target_cpu_default2="'\"$with_cpu\"'"
+ target_cpu_default2="\"$with_cpu\""
;;
xyes | xno)
@@ -2565,8 +2678,11 @@ for machine in $build $host $target; do
;;
*)
- echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2
- exit 1
+ if [[ x$pass2done = xyes ]]
+ then
+ echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2
+ exit 1
+ fi
;;
esac
;;
@@ -2575,12 +2691,15 @@ for machine in $build $host $target; do
.)
target_cpu_default2=TARGET_CPU_"`echo $machine | sed 's/-.*$//'`"
;;
- .supersparc | .ultrasparc | .v7 | .v8)
+ .supersparc | .ultrasparc | .v7 | .v8 | .v9)
target_cpu_default2="TARGET_CPU_$with_cpu"
;;
*)
- echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2
- exit 1
+ if [[ x$pass2done = xyes ]]
+ then
+ echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2
+ exit 1
+ fi
;;
esac
;;
@@ -2711,10 +2830,11 @@ fi
# Set up the header files.
# $links is the list of header files to create.
# $vars is the list of shell variables with file names to include.
-# config2.h is the old config.h. It is included by the new config.h which
-# created from config.in. The goal is to simplify the transition to autoconf.
+# auto-conf.h is the file containing items generated by autoconf and is
+# the first file included by config.h.
+host_xm_file="auto-config.h ${host_xm_file}"
vars="host_xm_file tm_file xm_file build_xm_file"
-links="config2.h tm.h tconfig.h hconfig.h"
+links="config.h tm.h tconfig.h hconfig.h"
rm -f config.bak
if [[ -f config.status ]]; then mv -f config.status config.bak; fi
@@ -2740,17 +2860,26 @@ do
done
done
-# Truncate the target if necessary
-if [[ x$host_truncate_target != x ]]; then
- target=`echo $target | sed -e 's/\(..............\).*/\1/'`
+# If we have a CVS directory, set up a rule so verion.c will be made
+# from CVS tag information and use a dummy version number here if we
+# don't have version.c.
+
+version_dep=
+if [[ -d $srcdir/CVS ]]; then
+ version_dep=ChangeLog
fi
-# Get the version number from the toplevel
-version=`sed -e 's/.*\"\([[^ \"]]*\)[[ \"]].*/\1/' < ${srcdir}/version.c`
+if [[ ! -f $srcdir/version.c -a -d $srcdir/CVS ]]
+then
+ version=unknown
+else
+ # Get the version number from the toplevel
+ version=`sed -e 's/.*\"\([[^ \"]]*\)[[ \"]].*/\1/' < ${srcdir}/version.c`
+fi
# Are we using gcc as the native compiler?
case $host in
-*linux*) # All Linux's use gcc as the native compiler.
+*linux* | *cygwin32* | *mingw32*)
if [[ x$prefix = xNONE ]]; then
prefix=$native_prefix
fi
@@ -2793,11 +2922,18 @@ done
# FLAGS_TO_PASS so CC="stage1/xgcc -Bstage1/" works.
# Otherwise, we can use "CC=$(CC)".
rm -f symtest.tem
-if $symbolic_link symtest1.tem symtest.tem 2>/dev/null
+if $symbolic_link $srcdir/gcc.c symtest.tem 2>/dev/null
then
cc_set_by_configure="\$(CC)"
stage_prefix_set_by_configure="\$(STAGE_PREFIX)"
else
+ rm -f symtest.tem
+ if cp -p $srcdir/gcc.c symtest.tem 2>/dev/null
+ then
+ symbolic_link="cp -p"
+ else
+ symbolic_link="cp"
+ fi
cc_set_by_configure="\`case '\$(CC)' in stage*) echo '\$(CC)' | sed -e 's|stage|../stage|g';; *) echo '\$(CC)';; esac\`"
stage_prefix_set_by_configure="\`case '\$(STAGE_PREFIX)' in stage*) echo '\$(STAGE_PREFIX)' | sed -e 's|stage|../stage|g';; *) echo '\$(STAGE_PREFIX)';; esac\`"
fi
@@ -3009,6 +3145,24 @@ do
echo "lang.$t: $x" >> Make-hooks
done
+# If we're not building in srcdir, create .gdbinit.
+
+if [[ ! -f Makefile.in ]]; then
+ echo "dir ." > .gdbinit
+ echo "dir ${srcdir}" >> .gdbinit
+ if [[ x$gdb_needs_out_file_path = xyes ]]
+ then
+ echo "dir ${srcdir}/config/"`dirname ${out_file}` >> .gdbinit
+ fi
+ if [[ "x$subdirs" != x ]]; then
+ for s in $subdirs
+ do
+ echo "dir ${srcdir}/$s" >> .gdbinit
+ done
+ fi
+ echo "source ${srcdir}/.gdbinit" >> .gdbinit
+fi
+
# Process the language and host/target makefile fragments.
${CONFIG_SHELL-/bin/sh} $srcdir/configure.frag $srcdir "$subdirs" "$dep_host_xmake_file" "$dep_tmake_file"
@@ -3052,6 +3206,8 @@ AC_SUBST(will_use_collect2)
AC_SUBST(maybe_use_collect2)
AC_SUBST(cc_set_by_configure)
AC_SUBST(stage_prefix_set_by_configure)
+AC_SUBST(symbolic_link)
+AC_SUBST(version_dep)
AC_SUBST_FILE(target_overrides)
AC_SUBST_FILE(host_overrides)
@@ -3087,6 +3243,11 @@ then
echo " ${str2}${str3}." 1>&2
fi
+# Truncate the target if necessary
+if [[ x$host_truncate_target != x ]]; then
+ target=`echo $target | sed -e 's/\(..............\).*/\1/'`
+fi
+
# Configure the subdirectories
# AC_CONFIG_SUBDIRS($subdirs)
@@ -3096,9 +3257,29 @@ AC_OUTPUT($all_outputs,
[
. $srcdir/configure.lang
case x$CONFIG_HEADERS in
-xconfig.h:config.in)
+xauto-config.h:config.in)
echo > cstamp-h ;;
esac
+# If the host supports symlinks, point stage[1234] at ../stage[1234] so
+# bootstrapping and the installation procedure can still use
+# CC="stage1/xgcc -Bstage1/". If the host doesn't support symlinks,
+# FLAGS_TO_PASS has been modified to solve the problem there.
+# This is virtually a duplicate of what happens in configure.lang; we do
+# an extra check to make sure this only happens if ln -s can be used.
+if [[ "$symbolic_link" = "ln -s" ]]; then
+ for d in .. ${subdirs} ; do
+ if [[ $d != .. ]]; then
+ STARTDIR=`pwd`
+ cd $d
+ for t in stage1 stage2 stage3 stage4 include
+ do
+ rm -f $t
+ $symbolic_link ../$t $t 2>/dev/null
+ done
+ cd $STARTDIR
+ fi
+ done
+else true ; fi
],
[
host='${host}'
@@ -3107,7 +3288,9 @@ target='${target}'
target_alias='${target_alias}'
srcdir='${srcdir}'
subdirs='${subdirs}'
+oldstyle_subdirs='${oldstyle_subdirs}'
symbolic_link='${symbolic_link}'
+version_dep='${version_dep}'
program_transform_set='${program_transform_set}'
program_transform_name='${program_transform_name}'
dep_host_xmake_file='${dep_host_xmake_file}'
@@ -3119,6 +3302,7 @@ version='${version}'
local_prefix='${local_prefix}'
build_install_headers_dir='${build_install_headers_dir}'
build_exeext='${build_exeext}'
+out_file='${out_file}'
gdb_needs_out_file_path='${gdb_needs_out_file_path}'
SET_MAKE='${SET_MAKE}'
build_broken_install='${build_broken_install}'
diff --git a/gcc/configure.lang b/gcc/configure.lang
index daaac58dd4f..df28127fb89 100644
--- a/gcc/configure.lang
+++ b/gcc/configure.lang
@@ -1,6 +1,6 @@
# configure.lang for GNU CC
# This script is run by configure for configuration of language
-# subdirectories which conform to the old GCC configure mechansim
+# subdirectories which conform to the old GCC configure mechanism
# for such subdirectories.
# Copyright (C) 1997 Free Software Foundation, Inc.
@@ -27,7 +27,7 @@ savesrcdir=$srcdir
for subdir in . $oldstyle_subdirs
do
# We only want to do this in language subdirs, but we have to handle
- # the case of $subdirs = "".
+ # the case of $oldstyle_subdirs = "".
if [ $subdir = . ]
then
continue
@@ -69,17 +69,12 @@ do
rm -f .gdbinit
echo "dir ." > .gdbinit
echo "dir ${srcdir}" >> .gdbinit
+ echo "dir ${mainsrcdir}" >> .gdbinit
if [ x$gdb_needs_out_file_path = xyes ]
then
- echo "dir ${srcdir}/config/"`dirname ${out_file}` >> .gdbinit
+ echo "dir ${mainsrcdir}/config/"`dirname ${out_file}` >> .gdbinit
fi
- if [ "x$subdirs" != x ]; then
- for s in $subdirs
- do
- echo "dir ${srcdir}/$s" >> .gdbinit
- done
- fi
- echo "source ${srcdir}/.gdbinit" >> .gdbinit
+ echo "source ${mainsrcdir}/.gdbinit" >> .gdbinit
;;
esac
diff --git a/gcc/convert.c b/gcc/convert.c
index 472f47e9543..744490f9256 100644
--- a/gcc/convert.c
+++ b/gcc/convert.c
@@ -1,5 +1,5 @@
/* Utility routines for data type conversion for GNU C.
- Copyright (C) 1987, 88, 91, 92, 94, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 91, 92, 94, 95, 1997 Free Software Foundation, Inc.
This file is part of GNU C.
@@ -397,7 +397,10 @@ convert_to_integer (type, expr)
convert (type, TREE_OPERAND (expr, 2))));
}
}
+ break;
+ default:
+ break;
}
return build1 (NOP_EXPR, type, expr);
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 164551b48a8..13087ee99d2 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,1270 @@
+Mon Nov 24 12:15:55 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * typeck.c (mark_addressable): Don't assume a FUNCTION_DECL
+ has DECL_LANG_SPECIFIC.
+
+Mon Dec 8 23:17:13 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * decl.c (copy_args_p): Handle copy elision for types with virtual
+ bases.
+ * call.c (build_over_call): Likewise.
+
+Tue Dec 2 01:37:19 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * exception.cc (__cp_pop_exception): Lose handler arg.
+ * except.c (do_pop_exception): Likewise.
+ (push_eh_cleanup): Let the cleanup mechanism supply the handler.
+ (expand_end_catch_block): Likewise.
+
+Sun Feb 8 23:47:38 1998 scott snyder <sss@d0linux01.fnal.gov>
+
+ * method.c (make_thunk): Avoid name buffer overflow.
+
+Fri Feb 6 21:32:25 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * config-lang.in (diff_excludes): Use basename only.
+
+Sun Jan 25 13:20:00 1998 Jason Merrill <jason@rhino.cygnus.com>
+
+ * decl.c (cp_finish_decl): When bailing on a comdat variable, also
+ unset DECL_NOT_REALLY_EXTERN.
+
+Mon Dec 22 17:46:17 1997 Mark Mitchell <mmitchell@usa.net>
+
+ * method.c (build_overload_name): Fix mangling for __null.
+
+Sat Dec 20 13:00:30 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * pt.c (instantiate_decl): Defer all templates but inline functions.
+
+Fri Dec 19 09:37:26 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * cp-tree.h (struct lang_decl_flags): Add comdat.
+ (DECL_COMDAT): New macro.
+ * decl.c (duplicate_decls): Propagate it.
+ (cp_finish_decl): Handle it.
+ * decl2.c (import_export_decl): Just set DECL_COMDAT on VAR_DECLs.
+
+ * except.c (expand_start_catch_block): suspend_momentary for the
+ terminate handler.
+
+Sat Dec 13 09:23:54 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * Make-lang.in (g++.c, cxxmain.o): Use $(LN).
+
+Wed Dec 3 08:47:27 1997 Paul Eggert <eggert@twinsun.com>
+
+ * pt.c (check_explicit_specialization): Fix misspelling in
+ diagnostic: `preceeded'.
+ * typeck.c (get_delta_difference): Fix misspelling in diagnostic:
+ `conversiona'.
+
+Fri Nov 28 12:35:19 1997 Scott Christley <scottc@net-community.com>
+
+ * repo.c: Prototype rindex only if needed.
+ * xref.c: Likewise.
+
+Thu Nov 27 09:39:31 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * except.c: Call terminate without caching so many bits.
+
+ * class.c: Remove static pending_hard_virtuals.
+ (add_virtual_function): Take pointers to pending_virtuals
+ and pending_hard_virtuals.
+ (finish_struct_1): Pass them. Declare pending_hard_virtuals.
+
+1997-11-26 Mark Mitchell <mmitchell@usa.net>
+
+ * pt.c (unify): Handle `void' template parameters in
+ specializations.
+
+Wed Nov 26 20:28:49 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * rtti.c (build_dynamic_cast): Handle template case here.
+ (build_dynamic_cast_1): Not here.
+
+ * typeck2.c (digest_init): Make copies where appropriate.
+
+ * decl2.c (delete_sanity): resolve_offset_ref.
+
+ * except.c (expand_throw): Call mark_used on the destructor.
+
+ * except.c (expand_start_catch_block): Fix catching a reference
+ to pointer.
+
+Tue Nov 25 11:28:21 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * init.c (build_new): Copy size to the saveable obstack.
+
+Wed Nov 26 15:13:48 1997 Jeffrey A Law (law@cygnus.com)
+
+ * lex.c (lang_init): Enable flag_exceptions by default if no
+ command line switch was specified.
+
+Mon Nov 24 12:15:55 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * init.c (build_new): Stick a CLEANUP_POINT_EXPR inside the
+ TRY_CATCH_EXPR for now.
+
+ * exception.cc (struct cp_eh_info): Add handlers field.
+ (__cp_push_exception): Initialize it.
+ (__cp_pop_exception): Decrement it. Don't pop unless it's 0.
+ (__throw_bad_exception): Remove.
+ * except.c (call_eh_info): Add handlers field.
+ (get_eh_handlers): New fn.
+ (push_eh_cleanup): Increment handlers.
+
+Fri Nov 21 12:22:07 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * except.c (expand_start_catch_block): We only need the rethrow
+ region for non-sjlj exceptions.
+ (expand_end_catch_block): Likewise. Use outer_context_label_stack.
+
+Thu Nov 20 14:40:17 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * method.c (build_decl_overload_real): Don't mess with global
+ placement delete.
+
+ * init.c (build_new): Check for null throw spec, not nothrow_t.
+
+ * decl.c (duplicate_decls): Don't complain about different exceptions
+ from an internal declaration.
+
+ * call.c (build_op_delete_call): Fix check for member fns again.
+
+ * decl2.c (import_export_decl): Interface hackery affects
+ virtual synthesized methods.
+
+Wed Nov 19 18:24:14 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * decl.c (start_decl): Don't just complain about a mismatched
+ scope, fix it.
+
+ * decl.c (make_implicit_typename): Handle case where t is not
+ actually from context.
+ * tree.c (get_type_decl): Lose identifier case.
+ * spew.c (yylex): Lose useless call to identifer_typedecl_value.
+ * parse.y (nonnested_type): Just use lookup_name.
+ (complex_type_name): Just use IDENTIFIER_GLOBAL_VALUE.
+
+Wed Nov 19 10:39:27 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * decl.c (make_implicit_typename): New fn.
+ (lookup_name_real): Use it. Use current_class_type as the context.
+
+Mon Nov 17 23:42:03 1997 Bruno Haible <haible@ilog.fr>
+
+ * pt.c (do_poplevel): Don't prohibit jumps into this contour.
+
+Mon Nov 17 02:01:28 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * friend.c (do_friend): Warn about non-template friends in templates.
+
+ * call.c (build_op_delete_call): Fix handling of inherited delete.
+
+ * search.c (dfs_record_inheritance): Ignore template type parms.
+
+Sat Nov 15 00:30:51 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * call.c (build_new_op): Fix copy error.
+ (build_op_new_call): New fn.
+ (build_op_delete_call): New fn.
+ * cp-tree.h: Declare them.
+ * init.c (build_new): Use them. Support placement delete.
+ (build_x_delete): Use build_op_delete_call.
+ (build_delete): Likewise.
+ * decl2.c (delete_sanity): Likewise.
+ (coerce_delete_type): Don't complain about placement delete.
+
+Thu Nov 13 01:52:36 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * call.c (build_new_function_call): Remove unused 'obj' parm.
+ * cp-tree.h, typeck.c: Adjust.
+
+ * init.c (build_new): Make the cleanup last longer.
+ (expand_vec_init): Call do_pending_stack_adjust.
+
+Wed Nov 12 11:04:33 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * pt.c (do_type_instantiation): Fix typo.
+ (mark_class_instantiated): If we support one_only but not weak
+ symbols, don't mark this as known.
+
+ * init.c (build_new): Handle vec delete in EH cleanup.
+
+Wed Nov 12 08:11:55 1997 Benjamin Kosnik <bkoz@rhino.cygnus.com>
+
+ * call.c (build_method_call): Call complete_type before checking
+ for destructor.
+
+Wed Nov 12 00:48:16 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * init.c (build_new): Handle freeing allocated memory when the
+ constructor throws.
+
+ * call.c (build_new_method_call): Fix flags arg.
+
+ * pt.c (do_type_instantiation): Don't try to instantiate
+ member templates.
+ (mark_decl_instantiated): If we support one_only but not
+ weak symbols, mark this one_only.
+ * decl2.c (import_export_vtable): Don't defer handling of vtables
+ if MULTIPLE_SYMBOL_SPACES.
+
+Tue Nov 11 12:02:12 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * except.c (expand_end_catch_block): Lose call to __sjpopnthrow.
+
+Tue Nov 11 02:53:44 1997 Jason Merrill <jason@lasher.cygnus.com>
+
+ * except.c (do_pop_exception): Return a value.
+
+Mon Nov 10 20:25:31 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * call.c (build_new_method_call): Handle getting a
+ TEMPLATE_ID_EXPR around a TEMPLATE_DECL. Don't look for a field
+ if we got template parms.
+ * typeck.c (build_x_function_call): Remember the TEMPLATE_ID_EXPR,
+ not just the args.
+ * decl2.c (build_expr_from_tree): Tweak last change.
+ * pt.c (tsubst_copy): Use get_first_fn instead of TREE_VALUE.
+ (maybe_fold_nontype_arg): Split out from tsubst_copy.
+ * tree.c (get_first_fn): Just return a TEMPLATE_ID_EXPR.
+
+Mon Nov 10 20:08:38 1997 Kriang Lerdsuwanakij <lerdsuwa@scf-fs.usc.edu>
+
+ * pt.c (tsubst_copy): Handle explicit template arguments in
+ function calls.
+ * typeck.c (build_x_function_call): Likewise.
+ * decl2.c (build_expr_from_tree): Lookup function name if it
+ hasn't been done.
+
+ * pt.c (tsubst): Instantiate template functions properly when
+ template parameter does not appear in function arguments and return
+ type.
+ (comp_template_args): Handle member templates required by tsubst.
+
+Mon Nov 10 20:08:29 1997 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de>
+
+ * pt.c (coerce_template_parms): Tweak error message.
+
+Mon Nov 10 03:04:20 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ Complete nested exception support.
+ * except.c (do_pop_exception): Split out...
+ (push_eh_cleanup): From here. Handle the EH region by hand.
+ (expand_start_catch_block): Add a new level for the catch parm.
+ Move the rethrow region outside the two cleanup regions.
+ Protect the initializer for the catch parm with terminate.
+ (expand_end_catch_block): Likewise. End the region for the eh_cleanup.
+ * exception.cc (__cp_pop_exception): Now takes two parms. Handle
+ popping off the middle of the stack.
+ * tree.c (lvalue_p, real_lvalue_p): Handle TRY_CATCH_EXPR,
+ WITH_CLEANUP_EXPR, and UNSAVE_EXPR.
+ (build_cplus_new): Only wrap CALL_EXPRs.
+ * init.c (expand_default_init): Handle a TRY_CATCH_EXPR around
+ the constructor call.
+
+Sun Nov 9 18:00:26 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * Make-lang.in (c++.distdir): Make inc subdirectory.
+
+Fri Nov 7 11:57:28 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * decl2.c (finish_file): Put back some code.
+
+Thu Nov 6 11:28:14 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * decl2.c (finish_file): Remove redundant code.
+ * method.c (emit_thunk): Don't let the backend defer generic thunks.
+
+Wed Nov 5 23:52:50 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * except.c (call_eh_info): Split out...
+ (push_eh_info): From here.
+ (expand_builtin_throw): Use it.
+ (expand_start_catch_block): Move region start back.
+
+Tue Nov 4 13:45:10 1997 Doug Evans <devans@canuck.cygnus.com>
+
+ * lex.c (MULTIBYTE_CHARS): #undef if cross compiling.
+ (real_yylex): Record wide strings using target endianness, not host.
+
+1997-11-03 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * repo.c (rindex): Add decl unconditionally.
+ (get_base_filename, open_repo_file): Don't cast rindex.
+ * xref.c (rindex): Add decl unconditionally.
+ (index): Remove unused decl.
+ (open_xref_file): Don't cast rindex.
+
+Sun Nov 2 15:04:12 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * class.c (build_vbase_path): Propagate the result type properly.
+
+1997-11-01 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * lex.c (FILE_NAME_NONDIRECTORY): Delete macro.
+ (file_name_nondirectory): New function, doing the same as the macro.
+ (set_typedecl_interface_info): Use it instead of the macro.
+ (check_newline): Likewise.
+ (handle_cp_pragma): Likewise.
+
+ * repo.c (get_base_filename): Cast result of rindex to char*.
+ (open_repo_file): Likewise.
+ * xref.c (open_xref_file): Likewise.
+ * error.c (dump_char): Make its arg int, not char.
+
+ * except.c (expand_builtin_throw) [!DWARF2_UNWIND_INFO]: Replace
+ remaining use of saved_throw_type with a call to get_eh_type.
+
+1997-10-31 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * except.c (push_eh_info): Pass the number of fields - 1 down, not
+ the exact number of fields.
+
+Fri Oct 31 01:47:57 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ Support for nested exceptions.
+ * tinfo2.cc (__is_pointer): New fn.
+ * exception.cc (struct cp_eh_info): Define.
+ (__cp_exception_info, __uncatch_exception): New fns.
+ (__cp_push_exception, __cp_pop_exception): New fns.
+ * except.c: Lose saved_throw_{type,value,cleanup,in_catch}.
+ Lose empty_fndecl.
+ (init_exception_processing): Likewise. __eh_pc is now external.
+ (push_eh_info): New fn.
+ (get_eh_{info,value,type,caught}): New fns.
+ (push_eh_cleanup): Just call __cp_pop_exception.
+ (expand_start_catch_block): Use push_eh_info. Start the eh region
+ sooner.
+ (expand_end_eh_spec): Use push_eh_info.
+ (expand_throw): Call __cp_push_exception to set up the exception info.
+ Just pass the destructor or 0 as the cleanup. Call __uncatch_exception
+ when we rethrow.
+ (expand_builtin_throw): Don't refer to empty_fndecl.
+
+Sun Oct 26 01:28:29 1997 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * typeck.c (rationalize_conditional_expr): Handle {MIN,MAX}_EXPR.
+ (unary_complex_lvalue): Call it for {MIN,MAX}_EXPR.
+
+ * decl.c (init_decl_processing): Call using_eh_for_cleanups.
+
+Sun Oct 26 01:52:52 1997 Jeffrey A Law (law@cygnus.com)
+
+ * Makefile.in (g++): Depend on prefix.o. Link in prefix.o.
+
+Thu Oct 23 02:01:30 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * pt.c (instantiate_decl): SET_DECL_IMPLICIT_INSTANTIATION on new decl.
+
+1997-10-22 Brendan Kehoe <brendan@cygnus.com>
+
+ * method.c (build_template_parm_names, build_decl_overload_real):
+ Add static to definitions.
+ * pt.c (add_to_template_args, note_template_header,
+ processing_explicit_specialization, type_unification_real): Likewise.
+ ({determine,check}_explicit_specialization): Use a single string for
+ error messages.
+
+Mon Oct 20 12:06:34 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * except.c (expand_exception_blocks): Call do_pending_stack_adust.
+ (expand_end_catch_block): Likewise.
+ (expand_end_eh_spec): Likewise.
+
+Mon Oct 20 11:44:20 1997 Mark Mitchell <mmitchell@usa.net>
+
+ * decl.c (duplicate_decls): Handle template specializations
+ correctly.
+ * error.c (dump_function_name): Fix printing of specializations of
+ member functions that are not member templates.
+ * cp-tree.h (processing_specialization): Make global.
+ * pt.c (processing_specialization): Likewise.
+ * lex.c (cons_up_default_function): Save and restore
+ processing_specialization to avoid confusion.
+
+Mon Oct 20 10:52:22 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * decl.c (init_decl_processing): Give null_node unknown* type.
+ * typeck.c (comp_target_types): Handle UNKNOWN_TYPE.
+ (common_type): Likewise.
+ * error.c (args_as_string): Recognize null_node.
+
+Thu Oct 16 15:31:09 1997 Judy Goldberg <judygold@sanwafp.com>
+
+ * pt.c (determine_explicit_specialization): Initialize "dummy"
+ to keep Purify quiet.
+
+Thu Oct 16 00:14:48 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * method.c (build_overload_value): Handle TEMPLATE_CONST_PARMs here.
+ (build_overload_int): Not here.
+
+Wed Oct 15 00:35:28 1997 Mike Stump <mrs@wrs.com>
+
+ * class.c (build_type_pathname): Remove.
+ (prepare_fresh_vtable): Fix problem with complex MI vtable names.
+
+1997-10-14 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * parse.y (unary_expr): Give a pedwarn if someone tries to use the
+ &&label GNU extension.
+
+Tue Oct 14 12:01:00 1997 Mark Mitchell <mmitchell@usa.net>
+
+ * decl.c (pushtag): Unset DECL_ASSEMBLER_NAME before setting it,
+ so as to avoid incorrect manglings.
+ * method.c (build_decl_overload_real): Don't mangle return types
+ for constructors.
+
+Tue Oct 14 11:46:14 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * cp-tree.h (scratchalloc, build_scratch_list, make_scratch_vec,
+ scratch_tree_cons): Define as macros for now.
+ * call.c, class.c, cvt.c, decl.c, decl2.c, except.c, expr.c, init.c,
+ lex.c, method.c, parse.y, pt.c, rtti.c, search.c, tree.c, typeck.c,
+ typeck2.c: Use them and the expression_obstack variants.
+
+Mon Oct 13 17:41:26 1997 Benjamin Kosnik <bkoz@rhino.cygnus.com>
+
+ * decl.c (store_return_init): Allow classes with explicit ctors to
+ be used with the named return values extension.
+
+Fri Oct 10 12:21:11 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * pt.c (instantiate_decl): Fix previous change.
+
+Thu Oct 9 12:08:21 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * pt.c (tsubst): Fix thinko.
+ (instantiate_decl): Really use the original template.
+
+ * call.c (build_new_method_call): Use simple constructor_name for
+ error messages.
+
+Wed Oct 8 22:44:42 1997 Jeffrey A Law (law@cygnus.com)
+
+ * method.c (build_underscore_int): Don't use ANSI specific
+ features.
+
+Wed Oct 8 00:18:22 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * decl2.c (finish_prevtable_vardecl): Check DECL_REALLY_EXTERN
+ for our key method; it might have been inlined by -O3.
+
+Tue Oct 7 23:00:12 1997 Mark Mitchell <mmitchell@usa.net>
+
+ * decl.c (make_typename_type): Do not try to call lookup_field for
+ non-aggregate types.
+
+Tue Oct 7 22:52:10 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * typeck.c (build_reinterpret_cast): Tweak.
+
+Tue Oct 7 22:45:31 1997 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * typeck.c (build_reinterpret_cast): converting a void pointer
+ to function pointer with a reinterpret_cast produces a warning
+ if -pedantic is issued
+
+Tue Oct 7 22:43:43 1997 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de>
+
+ * typeck.c (c_expand_return): Don't warn about returning a
+ reference-type variable as a reference.
+
+Tue Oct 7 21:11:22 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * method.c (build_static_name): Fix typo.
+
+1997-10-07 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * decl.c (duplicate_decls): Make sure DECL_LANG_SPECIFIC is set on
+ OLDDECL before we try to do DECL_USE_TEMPLATE.
+
+Tue Oct 7 00:48:36 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * decl.c (duplicate_decls): Don't warn about template instances.
+
+ * typeck.c (mark_addressable): Lose ancient code that unsets
+ DECL_EXTERNAL.
+
+ * pt.c (do_decl_instantiation): Lose support for instantiating
+ non-templates.
+
+ * call.c (build_new_function_call): Fix handling of null explicit
+ template args.
+ (build_new_method_call): Likewise.
+
+Mon Oct 6 23:44:34 1997 Mark Mitchell <mmitchell@usa.net>
+
+ * method.c (build_underscore_int): Fix typo.
+
+1997-10-06 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * tree.c (print_lang_statistics): #if 0 call to
+ print_inline_obstack_statistics until its definition is checked in.
+
+Mon Oct 6 09:27:29 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * decl2.c (finish_file): Move dump_tree_statistics to end.
+
+ * pt.c (instantiate_decl): Look for the original template.
+ (tsubst): Set DECL_IMPLICIT_INSTANTIATION on partial instantiations
+ of member templates.
+
+Wed Oct 1 08:41:38 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * Makefile.in (g++FAQ.*): New rules.
+ (CONFLICTS): Update.
+ * g++FAQ.texi: Moved from libg++.
+
+ * parse.y (PFUNCNAME): Only specify the type once.
+
+1997-10-01 Brendan Kehoe <brendan@lasher.cygnus.com>
+
+ * lex.c (real_yylex): Clean up the code to fully behave the way
+ the c-lex.c parser does for complex and real numbers.
+
+Tue Sep 30 08:51:36 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * method.c (build_decl_overload_real): Reformat.
+
+Tue Sep 30 00:18:26 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * method.c (synthesize_method): If at_eof, determine our linkage.
+
+1997-09-29 Paul Eggert <eggert@twinsun.com>
+
+ * lex.c (real_yylex): Treat `$' just like `_', except issue a
+ diagnostic if !dollars_in_ident or if pedantic.
+
+ * lang-specs.h (@c++): -ansi no longer implies -$.
+
+ * decl2.c (lang_decode_option):
+ -traditional and -ansi now do not mess with
+ dollars_in_ident.
+
+Mon Sep 29 19:57:51 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * Makefile.in (parse.o, decl.o): Also depend on
+ $(srcdir)/../except.h $(srcdir)/../output.h.
+ (decl2.o): Also depend on $(srcdir)/../expr.h ../insn-codes.h
+ $(srcdir)/../except.h $(srcdir)/../output.h.
+ (typeck.o, init.o): Also depend on $(srcdir)/../expr.h
+ ../insn-codes.h.
+
+ * call.c, cp-tree.h, decl.c, tree.c: Finish prototyping.
+
+ * expr.c (cplus_expand_expr): Make it static.
+
+ * decl2.c, init.c, typeck.c: Include "expr.h".
+ (expand_expr): Use proper values when calling the function.
+
+Mon Sep 29 11:05:54 1997 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * lang-options.h: new -Wold-style-cast flag.
+ * cp-tree.h (warn_old_style_cast): new variable.
+ * decl2.c (warn_old_style_cast): ditto.
+ (lang_decode_option): support -Wold-style-cast.
+ (reparse_absdcl_as_casts): produce old-style-cast warning.
+
+Mon Sep 29 09:20:53 1997 Benjamin Kosnik <bkoz@rhino.cygnus.com>
+
+ * decl.c (cp_finish_decl): Allow expand_aggr_init to set
+ TREE_USED, reset value based on already_used.
+
+ * init.c (expand_member_init): Revert change.
+
+Mon Sep 29 08:57:53 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * cp-tree.h, decl.c, decl2.c, pt.c:
+ Lose DECL_C_STATIC and DECL_PUBLIC. Don't pretend statics are public.
+
+ * decl2.c (lang_decode_option): Add missing ;.
+
+Sat Sep 27 16:22:48 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * friend.c (do_friend): Disable injection for all template-derived
+ decls.
+ * decl2.c (lang_decode_option): Handle -fguiding-decls.
+ * parse.y (notype_template_declarator): New nonterminal.
+ (direct_notype_declarator): Use it.
+ (complex_direct_notype_declarator): Likewise.
+ (object_template_id): Accept any kind of identifier after TEMPLATE.
+ (notype_qualified_id): Don't add template declarators here.
+
+Sat Sep 27 16:21:58 1997 Mark Mitchell <mmitchell@usa.net>
+
+ * call.c (add_template_candidate): Add explicit_targs parameter.
+ (build_scoped_method_call): Use it.
+ (build_overload_call_real): Likewise.
+ (build_user_type_conversion_1): Likewise.
+ (build_new_function_call): Likewise.
+ (build_object_call): Likewise.
+ (build_new_op): Likewise.
+ (build_new_method_call): Likewise.
+ (build_new_function_call): Handle TEMPLATE_ID_EXPR.
+ (build_new_method_call): Likewise.
+
+ * class.c (finish_struct_methods): Add specialization pass to
+ determine which methods were specializing which other methods.
+ (instantiate_type): Handle TEMPLATE_ID_EXPR.
+
+ * cp-tree.def (TEMPLATE_ID_EXPR): New tree code.
+
+ * cp-tree.h (name_mangling_version): New variable.
+ (flag_guiding_decls): Likewise.
+ (build_template_decl_overload): New function.
+ (begin_specialization): Likewise.
+ (reset_specialization): Likewise.
+ (end_specialization): Likewise.
+ (determine_explicit_specialization): Likewise.
+ (check_explicit_specialization): Likewise.
+ (lookup_template_function): Likewise.
+ (fn_type_unification): Add explicit_targs parameter.
+ (type_unification): Likewise.
+
+ * decl.c (duplicate_decls): Add smarts for explicit
+ specializations.
+ (grokdeclarator): Handle TEMPLATE_ID_EXPR, and function
+ specializations.
+ (grokfndecl): Call check_explicit_specialization.
+
+ * decl2.c (lang_decode_option): Handle -fname-mangling-version.
+ (build_expr_from_tree): Handle TEMPLATE_ID_EXPR.
+ (check_classfn): Handle specializations.
+
+ * error.c (dump_function_name): Print specialization arguments.
+
+ * friend.c (do_friend): Don't call pushdecl for template
+ instantiations.
+
+ * init.c (build_member_call): Handle TEMPLATE_ID_EXPR.
+
+ * lang-options.h: Add -fname-mangling-version, -fguiding-decls,
+ and -fno-guiding-decls.
+
+ * lex.c (identifier_type): Return PFUNCNAME for template function
+ names.
+
+ * method.c (build_decl_overload_real): New function.
+ (build_template_parm_names): New function.
+ (build_overload_identifier): Use it.
+ (build_underscore_int): New function.
+ (build_overload_int): Use it. Add levels for template
+ parameters.
+ (build_overload_name): Likewise. Also, handle TYPENAME_TYPEs.
+ (build_overload_nested_names): Handle template type parameters.
+ (build_template_decl_overload): New function.
+
+ * parse.y (YYSTYPE): New ntype member.
+ (nested_name_specifier): Use it.
+ (nested_name_specifier_1): Likewise.
+ (PFUNCNAME): New token.
+ (template_id, object_template_id): New non-terminals.
+ (template_parm_list): Note specializations.
+ (template_def): Likewise.
+ (structsp): Likewise.
+ (fn.def2): Handle member template specializations.
+ (component_decl_1): Likewise.
+ (direct_notype_declarator): Handle template-ids.
+ (component_decl_1): Likewise.
+ (direct_notype_declarator): Handle template-ids.
+ (primary): Handle TEMPLATE_ID_EXPR, and template-ids.
+
+ * pt.c (processing_specializations): New variable.
+ (template_header_count): Likewise.
+ (type_unification_real): New function.
+ (processing_explicit_specialization): Likewise.
+ (note_template_header): Likewise.
+ (is_member_template): Handle specializations.
+ (end_template_decl): Call reset_specialization.
+ (push_template_decl): Handle member template specializations.
+ (tsubst): Likewise.
+ (tsubst_copy): Handle TEMPLATE_ID_EXPR.
+ (instantiate_template): Handle specializations.
+ (instantiate_decl): Likewise.
+ (fn_type_unification): Handle explicit_targs.
+ (type_unification): Likewise. Allow incomplete unification
+ without an error message, if allow_incomplete.
+ (get_bindings): Use new calling sequence for fn_type_unification.
+
+ * spew.c (yylex): Handle PFUNCNAME.
+
+ * tree.c (is_overloaded_fn): Handle TEMPLATE_ID_EXPR.
+ (really_overloaded_fn): Likewise.
+ (get_first_fn): Handle function templates.
+
+ * typeck.c (build_x_function_call): Use really_overloaded_fn.
+ Handle TEMPLATE_ID_EXPR.
+ (build_x_unary_op): Likewise.
+ (build_unary_op): Likewise.
+ (mark_addressable): Templates whose address is taken are marked
+ as used.
+
+1997-09-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * decl.c (init_decl_processing): Declare __builtin_constant_p as
+ accepting any kind of type, not only int.
+
+Fri Sep 26 00:22:56 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * search.c (get_matching_virtual): Notice virtual bases when sorrying
+ about covariant returns.
+
+ * parse.y (member_init): Also imply typename here. Remove ancient
+ extension for initializing base members.
+
+Thu Sep 25 11:11:13 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ Handle multi-level typenames and implicit typename in base list.
+ * parse.y (typename_sub{,[0-2]}): New rules.
+ (structsp, rule TYPENAME_KEYWORD): Use typename_sub.
+ (nonnested_type): New rule.
+ (complete_type_name): Use it.
+ (base_class.1): Use typename_sub and nonnested_type.
+ (nested_name_specifier): Don't elide std:: here.
+ * decl.c (make_typename_type): Handle getting a type for NAME.
+ (lookup_name_real): Turn std:: into :: here.
+
+ Rvalue conversions were removed in London.
+ * call.c (is_subseq): Don't consider lvalue transformations.
+ (build_conv): LVALUE_CONV and RVALUE_CONV get IDENTITY_RANK.
+ (joust): Reenable ?: kludge.
+
+1997-09-22 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * decl.c (start_function): Up warning of no return type to be a
+ pedwarn.
+
+Mon Sep 22 14:15:34 1997 Benjamin Kosnik <bkoz@rhino.cygnus.com>
+
+ * init.c (expand_member_init): Don't set TREE_USED.
+ * decl.c (cp_finish_decl): Mark decls used if type has TREE_USED
+ set,don't clear TREE_USED wholesale.
+
+Sat Sep 20 15:31:00 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * call.c (build_over_call): Do require_complete_type before
+ build_cplus_new.
+
+Thu Sep 18 16:47:52 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * search.c (lookup_field): Call complete_type in all cases.
+
+ * decl.c (finish_function): Just warn about flowing off the end.
+
+Wed Sep 17 10:31:25 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * decl.c (grokparms): Don't bash a permanent list node if we're
+ in a function.
+
+1997-09-17 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * Makefile.in (CONFLICTS): Fix s/r conflict count to 18.
+
+Tue Sep 16 14:06:56 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * call.c (build_new_op): Give better error for syntactically
+ correct, but semantically invalid, use of undeclared template.
+
+ * call.c (compare_qual): Handle pmfs.
+
+ * decl.c (store_parm_decls): last_parm_cleanup_insn is the insn
+ after the exception spec.
+
+Mon Sep 15 11:52:13 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * call.c (null_ptr_cst_p): Integer type, not integral type.
+
+ * call.c (joust): Disable warnings until they can be moved to the
+ right place.
+
+Fri Sep 12 16:11:13 1997 Per Bothner <bothner@cygnus.com>
+
+ * Makefile.in, config-lang.in: Convert to autoconf.
+
+Thu Sep 11 17:14:55 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * decl.c (lookup_name_real): Add implicit 'typename' to types from
+ base classes.
+
+ * pt.c (most_specialized_class): Fix typo.
+ (tsubst): Move constant folding to TREE_VEC case.
+
+Thu Sep 11 10:08:45 1997 Mark Mitchell <mmitchell@usa.net>
+
+ * pt.c (do_poplevel): Don't warn about unused local variables
+ while processing_template_decl since we don't always know whether
+ or not they will need constructing/destructing.
+
+ * pt.c (uses_template_parms): Check the values of an enumeration
+ type to make sure they don't depend on template parms.
+
+ * decl.c (make_typename_type): Don't lookup the field if the
+ context uses template parms, even if we're not
+ processing_template_decl at the moment.
+
+ * pt.c (coerce_template_parms): Avoid looking at the
+ TYPE_LANG_DECL portion of a typename type, since there won't be
+ one.
+ (tsubst): Do constant folding as necessary to make sure that
+ arguments passed to lookup_template_class really are constants.
+
+Wed Sep 10 11:21:55 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * except.c (expand_builtin_throw): #ifndef DWARF2_UNWIND_INFO.
+ * decl2.c (finish_file): Only register exception tables if we
+ need to.
+
+ * decl.c (init_decl_processing): Add __builtin_[fs]p.
+
+Tue Sep 9 19:49:38 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * pt.c (unify): Just return 0 for a TYPENAME_TYPE.
+
+Tue Sep 9 17:57:25 1997 Mark Mitchell <mmitchell@usa.net>
+
+ * error.c (dump_decl): Avoid crashing when presented with a
+ uninitialized constant, as can occur with a template parameter.
+ (dump_expr): Make sure that there are enough levels of
+ current_template_parms before we start diving through them.
+
+1997-09-09 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * typeck.c (build_indirect_ref): Heed FLAG_VOLATILE similar to
+ c-typeck.c.
+
+Tue Sep 9 09:36:39 1997 Benjamin Kosnik <bkoz@rhino.cygnus.com>
+
+ * except.c (expand_throw): Call build_delete for all
+ exception types, not just objects with destructors.
+
+Mon Sep 8 02:33:20 1997 Jody Goldberg <jodyg@idt.net>
+
+ * decl.c (current_local_enum): Remove static.
+ * pt.c (tsubst_enum): Save and restore value of current_local_enum
+ in case template is expanded in enum decl.
+ (instantiate_class_template) : Use new tsubst_enum signature.
+ (tsubst_expr): Likewise.
+
+Mon Sep 8 01:21:43 1997 Mark Mitchell <mmitchell@usa.net>
+
+ * pt.c (begin_member_template_processing): Take a function as
+ argument, not a set of template arguments. Use the template
+ parameters, rather than the arguments. Handle non-type parameters
+ correctly. Push a binding level for the parameters so that multiple
+ member templates using the same parameter names can be declared.
+ (end_member_template_processing): Pop the binding level.
+ (push_template_decl): Mark member templates as static when
+ appropriate.
+
+ * lex.c (do_pending_inlines): Pass the function, not its template
+ arguments, to begin_member_template_processing.
+ (process_next_inline): Likewise.
+ (do_pending_defargs): Likewise.
+
+ * error.c (dump_expr): Obtain the correct declaration for a
+ TEMPLATE_CONST_PARM.
+
+ * call.c (add_template_conv_candidate): New function.
+ (build_object_call): Handle member templates, as done in the other
+ build_ functions.
+
+Sat Sep 6 10:20:27 1997 Mark Mitchell <mmitchell@usa.net>
+
+ * decl.c (replace_defag): Undo previous change.
+ * lex.c (do_pending_defargs): Deal with member templates.
+
+ * pt.c (is_member_template): Avoid crashing when passed a
+ non-function argument.
+
+Fri Sep 5 17:27:38 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * class.c (grow_method): Remove check for redeclaration.
+
+Fri Sep 5 01:37:17 1997 Mark Mitchell <mmitchell@usa.net>
+
+ * cp-tree.h (INNERMOST_TEMPLATE_PARMS): New macro.
+ (DECL_INNERMOST_TEMPLATE_PARMS): Likewise.
+ (PRIMARY_TEMPLATE_P): Use it.
+ * call.c (build_overload_call_real): Use it.
+ * class.c (instantiate_type): Likewise.
+ * decl.c (decls_match): Likewise.
+ * method.c (build_overload_identifier): Likewise.
+ * pt.c (push_template_decl): Likewise.
+ (classtype_mangled_name): Likewise.
+ (lookup_template_class): Likewise.
+
+ * cp-tree.h (DECL_NTPARMS): Change name from DECL_NT_PARMS to
+ DECL_NTPARMS to conform to usage elsewhere.
+ * call.c (add_template_candidate): Likewise.
+ * class.c (instantiate_type): Likewise.
+ * pt.c (instantiate_template): Likewise.
+ (get_bindings): Likewise.
+
+ * class.c (grow_method): Use DECL_FUNCTION_TEMPLATE_P instead of
+ is_member_template.
+
+ * pt.c (unify): Undo changes to allow multiple levels of template
+ parameters.
+ (type_unification): Likewise.
+ (fn_type_unification): Likewise.
+ (get_class_bindings): Likewise.
+ * cp-tree.h (Likewise).
+
+ * decl.c (replace_defarg): Check that the type of the default
+ parameter does not invlove a template type before complaining
+ about the initialization.
+
+ * error.c (dump_expr): Deal with template constant parameters in
+ member templates correctly.
+
+ * pt.c (is_member_template): Deal with class specializations
+ correctly.
+ (tsubst): Handle "partial instantiation" of member templates
+ correctly.
+
+Wed Sep 3 12:30:24 1997 Mark Mitchell <mmitchell@usa.net>
+
+ * pt.c (type_unification): Change calling squence to allow for
+ multiple levels of template parameters.
+ (tsubst_expr): Likewise.
+ (tsubst): Likewise.
+ (tsubst_copy): Likewise.
+ (instantiate_template): Likewise.
+ (unify): Likewise.
+ * call.c (build_overload_call_real): Use it.
+ (add_builtin_candidate): Use it.
+ (build_new_method_call): Use it.
+ * class.c (instantiate_type): Use it.
+ * decl.c (grokdeclarator): Use it.
+ * decl2.c (finish_file): Use it.
+ * method.c (build_overload_identifier): Use it.
+
+ * call.c (add_template_candidate): Add additional parameter for
+ the function return type. Call fn_type_unification istead of
+ type_unification.
+ (build_user_type_conversion_1): Handle member templates.
+ (build_new_function_call): Likewise.
+ (build_new_op): Likewise.
+ (build_new_method_call): Likewise.
+
+ * class.c (grow_method): Don't give an error message indicating
+ that two member templates with the same name are ambiguous.
+ (finish_struct): Treat member template functions just like member
+ functions.
+
+ * cp-tree.h (check_member_template): Add declaration.
+ (begin_member_template_processing): Likewise.
+ (end_member_template_processing): Likewise.
+ (fn_type_unification): Likewise.
+ (is_member_template): Likewise.
+ (tsubst): Change prototype.
+ (tsubst_expr): Likewise.
+ (tsubst_copy): Likewise.
+ (instantiate_template): Likewise.
+ (get_bindings): Likewise.
+
+ * decl.c (decls_match): Handle multiple levels of template
+ parameters.
+ (pushdecl): Handle template type params just like other type
+ declarations.
+ (push_class_level_binding): Return immediately if the
+ class_binding_level is NULL.
+ (grokfndecl): If check_classfn() returns a member_template, use
+ the result of the template, not the template itself.
+
+ * decl2.c (check_member_template): New function. Check to see
+ that the entity declared to be a member template can be one.
+ (check_classfn): Allow redeclaration of member template functions
+ with different types; the new functions can be specializations or
+ explicit instantiations.
+
+ * error.c (dump_decl): Handle multiple levels of template
+ parameters.
+ (dump_function_decl): Update to handle function templates.
+
+ * lex.c (do_pending_inlines): Set up template parameter context
+ for member templates.
+ (process_next_inline): Likewise.
+
+ * method. (build_overload_identifier): Adjust for multiple levels
+ of template parameters.
+
+ * parse.y (fn.def2): Add member templates.
+ (component_decl_1): Likewise.
+
+ * pt.c (begin_member_template_processing): New function.
+ (end_member_template_processing): Likewise.
+ (is_member_template): Likewise.
+ (fn_type_unification): Likewise.
+ (current_template_parms): Return a vector of all the template
+ parms, not just the innermost level of parms.
+ (push_template_decl): Deal with the possibility of member
+ templates.
+ (lookup_template_class): Likewise.
+ (uses_template_parms): Likewise.
+ (tsubst): Modify processing to TEMPLATE_TYPE_PARM and
+ TEMPLATE_CONST_PARM to deal with multiple levels of template
+ arguments. Add processing of TEMPLATE_DECL to produce new
+ TEMPLATE_DECLs from old ones.
+ (do_decl_instantiation): Handle member templates.
+
+ * search.c (lookup_fnfields_1): Handle member template conversion
+ operators.
+
+ * tree.c (cp_tree_equal): Check the levels, as well as the
+ indices, of TEMPLATE_CONST_PARMs.
+
+ * typeck.c (comptypes): Check the levels, as well as the indices,
+ fo TEMPLATE_TYPE_PARMs.
+ (build_x_function_call): Treat member templates like member
+ functions.
+
+Wed Sep 3 11:09:25 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * typeck.c (c_expand_return): Always convert_for_initialization
+ before checking for returning a pointer to local.
+
+ * pt.c (type_unification): If strict and the function parm doesn't
+ use template parms, just compare types.
+
+Wed Sep 3 10:35:49 1997 Klaus Espenlaub <kespenla@student.informatik.uni-ulm.de>
+
+ * method.c (build_overloaded_value): Replace direct call
+ to the floating point emulator with REAL_VALUE_TO_DECIMAL macro.
+
+Wed Sep 3 00:02:53 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * typeck.c (convert_arguments): Don't arbitrarily choose the first
+ of a set of overloaded functions.
+
+Tue Sep 2 12:09:13 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * lex.c (real_yylex): Don't elide __FUNCTION__.
+
+ * method.c (build_overload_value): Add in_template parm.
+ (build_overload_int): Likewise.
+ (build_overload_identifier): Pass it.
+
+ * decl.c (duplicate_decls): Don't bash a previous template
+ definition with a redeclaration.
+
+ * pt.c (unify): float doesn't match double.
+
+ * pt.c (do_type_instantiation): Handle getting a _TYPE or a
+ TYPE_DECL. Handle getting non-template types.
+ * parse.y (explicit_instantiation): Use typespec instead of
+ aggr template_type.
+
+Tue Sep 2 10:27:08 1997 Richard Henderson <rth@cygnus.com>
+
+ * typeck.c (build_ptrmemfunc1): Clean up ptr->int cast warnings.
+
+Mon Sep 1 13:19:04 1997 Eugene Mamchits <eugin@ips.ras.ru>
+
+ * call.c (add_builtin_candidate): Add missing TREE_TYPE.
+ (compare_ics): Likewise.
+
+Mon Sep 1 13:19:04 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * call.c (joust): Warn about choosing one conversion op over
+ another because of 'this' argument when the other return type is
+ better.
+ (source_type): New fn.
+
+ * call.c (build_new_op): Strip leading REF_BIND from first operand
+ to builtin operator.
+
+ * decl2.c (mark_vtable_entries): Mark abort_fndecl as used when we
+ use its RTL.
+
+Thu Aug 28 09:45:23 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * call.c (null_ptr_cst_p): Remove support for (void*)0.
+
+Wed Aug 27 02:03:34 1997 Jeffrey A Law (law@cygnus.com)
+
+ * typeck.c (expand_target_expr): Make definition match declaration.
+
+ * class.c (get_basefndecls): Make definition match declaration.
+
+Mon Aug 25 14:30:02 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * input.c (sub_getch): Eventually give up and release the input file.
+
+ * decl.c (cp_finish_decl): If #p i/i, put inline statics in the
+ right place.
+
+ * call.c (joust): Tweak message.
+
+Sat Aug 23 18:02:59 1997 Mark Mitchell <mmitchell@usa.net>
+
+ * error.c (type_as_string): Put const/volatile on template type
+ parameters where appropriate.
+
+Sat Aug 23 17:47:22 1997 Jeffrey A Law (law@cygnus.com)
+
+ * call.c (strictly_better): Make arguments unsigned ints.
+
+Thu Aug 21 18:48:44 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * lex.c (real_yylex): Refer to __complex instead of complex.
+
+Thu Aug 21 22:25:46 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * lex.c (real_yylex): Don't use getc directly.
+
+Wed Aug 20 17:25:08 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * call.c (is_subseq): Don't try to be clever.
+
+Wed Aug 20 03:13:36 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * parse.y, pt.c: Include "except.h".
+ * call.c, class.c, class.h, cp-tree.h, cvt.c, decl.c, decl2.c,
+ error.c, except.c, expr.c, friend.c, g++spec.c, init.c, input.c,
+ lex.c, lex.h, method.c, parse.y, pt.c, repo.c, rtti.c, search.c,
+ sig.c, spew.c, tree.c, typeck.c, typeck2.c, xref.c: Finish
+ prototyping.
+
+Wed Aug 20 01:34:40 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * decl2.c (mark_vtable_entries): Instead of replacing pure
+ virtuals with a reference to __pure_virtual, copy the decl and
+ change the RTL.
+
+Tue Aug 19 02:26:07 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * pt.c (lookup_nested_type_by_name): Handle typedef wierdness.
+
+ * pt.c (instantiate_class_template): Call repo_template_used
+ before finish_prevtable_vardecl.
+
+ * call.c (is_subseq): New fn.
+ (compare_ics): Use it.
+
+ * repo.c (finish_repo): Don't crash on no args.
+
+ * parse.y (named_complex_class_head_sans_basetype): Handle
+ explicit global scope.
+ * decl2.c (handle_class_head): New fn.
+
+ * Makefile.in (BISON): Add -L flag.
+
+ * pt.c (unify): Add CONST_DECL case.
+
+Thu Aug 14 10:05:13 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * rtti.c (permanent_obstack): Fix decl to not be a pointer.
+
+ * cp-tree.h (report_type_mismatch): Add prototype.
+ * call.c (build_overload_call_real): Remove erroneous fourth
+ argument to report_type_mismatch.
+ (build_user_type_conversion_1): Remove erroneous second arg to
+ tourney.
+ (build_new_function_call): Likewise.
+ (build_object_call): Likewise.
+ (build_new_op): Likewise.
+ (build_new_method_call): Likewise.
+
+Wed Aug 13 19:19:25 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * error.c (dump_decl): Don't bother processing a function with no
+ DECL_LANG_SPECIFIC.
+
+ * method.c (emit_thunk): Call init_function_start in the macro case.
+
+Wed Aug 13 10:46:19 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * decl2.c (DEFAULT_VTABLE_THUNKS): Define to be 0 if not
+ defined and used to set flag_vtable_thunks.
+
+Tue Aug 12 20:13:57 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * parse.y: Don't clear the inlines from their obstack until they've
+ all been processed.
+
+ * decl.c (duplicate_decls): Don't complain about exception
+ specification mismatch if flag_exceptions is off.
+
+ * Makefile.in (BISON): bison, not byacc or bison -y.
+ (parse.c): Use bison flags.
+
+Mon Aug 11 15:01:56 1997 Marc Lehmann <pcg@goof.com>
+
+ * Make-lang.in (c++.distclean): Remove g++.c on make distclean.
+
+Sun Aug 10 12:06:09 1997 Paul Eggert <eggert@twinsun.com>
+
+ * cp-tree.h: Replace STDIO_PROTO with PROTO in include files.
+ * cvt.c, error.c, except.c, expr.c, friend.c, init.c, rtti.c:
+ Include <stdio.h> before include files that formerly used STDIO_PROTO.
+
+ * decl.c, g++spec.c, lex.c, method.c, repo.c:
+ Include "config.h" first, as per autoconf manual.
+
+Fri Aug 8 11:47:48 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * decl.c (duplicate_decls): Tweak wording.
+ * lex.c (do_pending_defargs): Don't die if we see a default arg
+ that isn't a DEFAULT_ARG.
+ * error.c (dump_expr): Handle DEFAULT_ARG.
+
+ * decl2.c (lang_decode_option): Handle -fhandle-exceptions.
+ * lang-options.h: Add -fhandle-exceptions.
+
+ * class.c (build_vtable): vtables are artificial.
+ (prepare_fresh_vtable): Likewise.
+
+Wed Aug 6 11:02:36 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * cvt.c (ocp_convert): After converting to the target type, set
+ LOOKUP_NO_CONVERSION.
+
+ * call.c (joust): Warn about potentially confusing promotion rules
+ with -Wsign-promo.
+ * cp-tree.h, lang-options.h, decl2.c: Support -Wsign-promo.
+
+Tue Aug 5 15:15:07 1997 Michael Meissner <meissner@cygnus.com>
+
+ * exception.cc: Declare __terminate_func with noreturn attribute.
+
+Fri Aug 1 03:18:15 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * parse.y: Break out eat_saved_input, handle errors.
+ (function_try_block): Use compstmt instead of compstmt_or_error.
+
+Thu Jul 31 17:14:04 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * tree.c (build_cplus_new): Don't set TREE_ADDRESSABLE.
+
+Fri Jul 4 01:45:16 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * Make-lang.in (cplib2.txt, cplib2.ready): Instead of checking for
+ existence of cc1plus check whether $(LANGUAGES) contains C++.
+
+Wed Jul 30 13:04:21 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * method.c (do_build_copy_constructor): When copying an anonymous
+ union member loop around to handle nested anonymous unions. Use
+ the offset of the member relative to the outer structure, not the
+ union.
+
+Tue Jul 29 21:17:29 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * call.c (resolve_args): New fn.
+ (build_new_function_call): Use it.
+ (build_object_call): Likewise.
+ (build_new_method_call): Likewise.
+
+Mon Jul 28 16:02:36 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * call.c (build_over_call): tsubst all default parms from templates.
+
Wed Jul 23 13:36:25 1997 Jason Merrill <jason@yorick.cygnus.com>
* decl.c (struct cp_function): Add static_labelno.
@@ -52,11 +1319,6 @@ Wed Jul 16 23:47:08 1997 Jason Merrill <jason@yorick.cygnus.com>
* lex.c (do_scoped_id): convert_from_reference.
* init.c (build_offset_ref): Likewise.
-Wed Jul 16 15:57:42 1997 Benjamin Kosnik <bkoz@rhino.cygnus.com>
-
- * parse.y (empty_parms): Only use VOID_LIST_NODE for the PARMS if
- we're in a C++ struct/class, not if we're doing `extern "C"'.
-
Wed Jul 16 12:34:29 1997 Benjamin Kosnik <bkoz@lisa.cygnus.com>
* error.c (dump_expr): Check TREE_OPERAND before dump_expr_list.
@@ -378,8 +1640,7 @@ Tue May 20 13:55:57 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
* hash.h: Regenerate.
* lex.h (rid): Add RID_COMPLEX.
(RID_LAST_MODIFIER): Set to RID_COMPLEX.
- * lex.c (init_lex): Add building of RID_COMPLEX. Unset reserved
- word "complex" if -fno-gnu-keywords.
+ * lex.c (init_lex): Add building of RID_COMPLEX.
(real_yylex): General cleanup in line with what c-lex.c also has,
sans the cruft for traditional; add handling of SPEC_IMAG, complex
types, and imaginary numeric constants.
@@ -542,6 +1803,8 @@ Mon Apr 21 15:42:27 1997 Jason Merrill <jason@yorick.cygnus.com>
function is not changed.
* call.c (build_over_call): Move setting of conv into the loop.
+ Note: this change, along with the related changes of the 18th thru
+ the 20th of April, fix an infinite loop problem in conversions.
Sun Apr 20 16:24:29 1997 Jason Merrill <jason@yorick.cygnus.com>
@@ -5486,9455 +6749,10 @@ Wed Oct 11 16:30:34 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
* parse.y (fn.def1): Call split_specs_attrs in
declmods notype_declarator case.
+
+Use a consistent time stamp format in ChangeLog entries.
+Not everyone has Emacs 20 yet, so stick with Emacs 19 format for now.
-Sun Nov 26 14:47:42 1995 Richard Kenner <kenner@mole.gnu.ai.mit.edu>
-
- * Version 2.7.2 released.
-
-Mon Nov 20 14:05:00 1995 Mike Stump <mrs@cygnus.com>
-
- * g++.c (pfatal_with_name): Add missing third argument to concat.
-
-Thu Oct 26 13:59:54 1995 Mike Stump <mrs@cygnus.com>
-
- * init.c (expand_aggr_init): Handle cv qualifiers on the object's
- type.
-
-Sat Nov 11 08:25:55 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-
- * Version 2.7.1 released.
-
-Thu Nov 2 17:02:47 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * call.c (convert_harshness): Handle references to arrays.
-
-Fri Oct 27 14:20:21 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * typeck.c (comp_target_types): Check multi-level pointer
- conversions in both directions.
-
-Tue Oct 17 21:39:05 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * parse.y (explicit_instantiation): Fix 'extern template' with no
- return type.
-
-Mon Oct 16 14:35:20 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * parse.y (explicit_instantiation): Support automatic instantiation
- of constructors.
- (named_class_head_*): Support out-of-class definition of nested
- types.
-
-Wed Oct 11 12:20:56 1995 Mike Stump <mrs@cygnus.com>
-
- * search.c (envelope_add_decl): New routine. Fix so that
- methods are hidden in the same way that other members are.
- (dfs_pushdecls): Cleanup and move functionality out of line,
- into envelope_add_decl.
-
-Tue Oct 10 15:46:01 1995 Mike Stump <mrs@cygnus.com>
-
- * typeck.c (mark_addressable): Only call assemble_external if we
- have started the output file.
-
-Tue Oct 10 11:27:18 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * decl.c (start_function): Fix earlier cv-quals change.
-
-Mon Oct 9 23:53:05 1995 Mike Stump <mrs@cygnus.com>
-
- * parse.y (complex_direct_notype_declarator): Only push the class if
- we are not already in the class.
-
-Mon Oct 9 11:22:03 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * decl.c (duplicate_decls): Call merge_machine_decl_attributes.
- Update olddecl's attributes too.
- (grokdeclarator): #if 0 out call to build_decl_attribute_variant.
- * typeck.c (common_type): Call merge_machine_type_attributes.
-
-Fri Oct 6 14:44:27 1995 Mike Stump <mrs@cygnus.com>
-
- * typeck.c (mark_addressable): Add missing call to
- assemble_external.
-
-Wed Oct 4 15:06:39 1995 Mike Stump <mrs@cygnus.com>
-
- * decl.c (store_parm_decls): Make sure the unwinder start comes
- before the exception specification start.
- * except.c (expand_exception_blocks): Make sure the unwinder end
- comes after the terminate protected catch clause region and after
- the end of the exception specification region.
-
-Wed Oct 4 12:47:02 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * lex.c (real_yylex): Fix identifier case for linemode.
- (handle_sysv_pragma): Don't abort when we see a pragma we don't
- recognize.
-
-Tue Oct 3 14:09:46 1995 Mike Stump <mrs@cygnus.com>
-
- * decl.c (store_parm_decls): Add a call to start_eh_unwinder.
- * except.c (init_exception_processing): __throw doesn't take any
- arguments.
- (expand_builtin_throw): Likewise. Always use Pmode, instead of SImode
- for all pointers. Use expand_builtin_return_addr to unwind the
- first level off the stack.
- (do_unwind): Always use Pmode, instead of SImode for all pointers.
- (expand_exception_blocks): Add a call to end_eh_unwinder.
- (start_eh_unwinder, end_eh_unwinder): New routines to build machine
- independent stack unwinders for function/method calls.
-
-Mon Oct 2 17:20:42 1995 Mike Stump <mrs@cygnus.com>
-
- * tree.c (unsave_expr_now): Make sure we process the argument list
- of any called functions. Fixes incorrect code generation for
- cleanups.
-
-Mon Oct 2 13:04:16 1995 Mike Stump <mrs@cygnus.com>
-
- * typeck.c (get_member_function_from_ptrfunc): Save function if it
- needs it. Cures core dump on things like (this->*(f()))().
-
-Sat Sep 23 22:51:25 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (start_function): Conform to gcc cv-quals convention (no
- expression has a cv-qualified type) in RESULT_DECLs.
- * method.c (make_thunk): Likewise.
-
-Fri Sep 22 10:21:13 1995 Mike Stump <mrs@cygnus.com>
-
- * decl.c (pushtag): Add in the namespace name for the tag.
-
-Thu Sep 21 13:11:13 1995 Mike Stump <mrs@cygnus.com>
-
- * parse.y (maybe_base_class_list, base_class_list, base_class,
- base_class_access_list): Make sure we see the typenames for base
- classes.
- * lex.c (see_typename): Instead of failing to see a typename when
- there is no next token, perfer a typename, and get the next token.
-
-Wed Sep 20 12:35:27 1995 Michael Meissner <meissner@cygnus.com>
-
- * decl.c (init_decl_processing): Add __builtin_expect.
-
-Tue Sep 19 16:48:11 1995 Mike Stump <mrs@cygnus.com>
-
- * cvt.c (cp_convert_to_pointer): Don't allow leftover conversions to
- or from pointer to member functions, they must all be handled before
- this point.
-
-Fri Sep 15 17:14:47 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * init.c (resolve_offset_ref): Fix wording of non-static member
- being referenced as a static.
-
-Fri Sep 15 12:39:11 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (build_indirect_ref): Only bash pointer if we actually
- call build_expr_type_conversion.
-
-Thu Sep 14 18:24:56 1995 Jason Merrill <jason@deneb.cygnus.com>
-
- * cvt.c (build_expr_type_conversion): Handle conversion from
- reference.
- * typeck.c (build_indirect_ref): Avoid infinite recursion.
-
-Thu Sep 14 17:23:28 1995 Mike Stump <mrs@cygnus.com>
-
- * decl.c (expand_start_early_try_stmts): New routine to start a try
- block at the start of the function, for function-try-blocks.
- * cp-tree.h (expand_start_early_try_stmts): Declare it.
- * parse.y (function_try_block): Use it, instead of doing it here, as
- we don't want to include rtl.h here, as that conflicts with RETURN
- in the parser.
-
-Wed Sep 13 18:32:24 1995 Mike Stump <mrs@cygnus.com>
-
- * lex.c (reinit_parse_for_block): Support saving inline
- function-try-blocks, uses peekyylex.
- * parse.y (eat_saved_input): New rule, permit the parser to see that
- END_OF_SAVED_INPUT is ok, as it can see this when parsing the
- handlers of a function-try-block.
- (fndef): Use it.
- (component_decl): Make sure TRY and RETURN can come after fn.def2.
- * spew.c (peekyylex): New routine to peek at what will come next.
-
-Wed Sep 13 16:52:06 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (comptypes): Tighten up comparisons of template type
- parms.
-
- * decl.c (duplicate_decls): Turn off whining about virtual functions
- redeclared inline for now.
-
-Wed Sep 13 11:13:40 1995 Mike Stump <mrs@cygnus.com>
-
- * decl.c (store_in_parms): New routine to put things before we
- put base inits.
- * cp-tree.h (store_in_parms): Declare it.
- * decl.c (store_parm_decls): Use it to makr sure the starting of the
- eh spec comes before base inits.
- (finish_function): Use sequences instead of the obsolete
- reorder_insns.
- * parse.y (fndef): Enhance readability and maintainability. Update
- to include function_try_block syntax.
- (function_try_block): Add.
-
-Tue Sep 12 17:43:07 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * call.c (convert_harshness): Use comptypes, not ==, to check if
- TYPE and PARMTYPE are equivalent on a function type.
-
-Tue Sep 12 17:31:33 1995 Douglas Rupp <drupp@cs.washington.edu>
-
- * Make-lang.in (cc1plus) : Removed unnecessary $(exeext).
-
-Mon Sep 11 23:24:07 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (expand_throw): Never allocate storage for thrown pointer
- to objects.
-
-Mon Sep 11 19:36:45 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (expand_start_catch_block): Pointers to objects come
- back from catch matching already dereferenced, don't dereference
- again.
-
-Mon Sep 11 15:46:28 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (expand_throw): Only decay the throw expression, don't do
- any default conversions. This is so that one can throw and catch
- characters, and not have them match integers.
-
-Mon Sep 11 13:46:45 1995 Mike Stump <mrs@cygnus.com>
-
- * error.c (dump_aggr_type): Deal with anonymous unions that don't
- have a TYPE_NAME.
-
-Fri Sep 8 20:40:27 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * lex.c (handle_sysv_pragma): Deal with getting a comma from yylex.
-
-Fri Sep 8 15:51:41 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (expand_end_eh_spec): Handle empty EH specifications.
-
-Fri Sep 8 15:27:22 1995 Mike Stump <mrs@cygnus.com>
-
- * cp-tree.h (expand_start_eh_spec): Declare new routine.
- (expand_end_eh_spec): Likewise.
- * decl.c (store_parm_decls): Call expand_start_eh_spec to process
- exception specifications.
- * except.c (expand_leftover_cleanups): Remove unused parameter.
- (expand_end_catch_block): Likewise.
- (expand_exception_blocks): Likewise.
- (expand_start_eh_spec): New routine to mark the start of an
- exception specification region.
- (expand_end_eh_spec): New routine to mark the end of an exception
- specification region.
- (expand_exception_blocks): Call expand_end_eh_spec to process
- exception specifications.
-
-Fri Sep 8 14:40:48 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * lex.c (do_identifier): Use global binding in preference of
- dead for local variable.
-
-Wed Sep 6 19:32:59 1995 Mike Stump <mrs@cygnus.com>
-
- * cp-tree.h (build_exception_variant): Remove used first argument.
- * decl.c (duplicate_decls): Likewise.
- (grokfndecl): Likewise.
- (revert_static_member_fn): Likewise.
- * decl2.c (grok_method_quals): Likewise.
- * tree.c (build_exception_variant): Likewise.
- * typeck.c (common_type): Likewise.
- * decl2.c (grokclassfn): After changing the type, call
- build_exception_variant, if necessary.
-
-Tue Sep 5 15:56:27 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (expand_throw): Run cleanups for the throw expression.
-
-Wed Aug 30 15:24:38 1995 Stephen L. Favor <sfavor@tigger.intecom.com>
-
- * except.c (expand_builtin_throw): Moved gen_label_rtx calls beyond
- the store_parm_decls call which does initialization in the emit_*
- code concerning label numbering.
-
-Thu Aug 31 09:01:07 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (expand_internal_throw): Let the frontend be responsible
- for managing all frontend EH parameters, the backend routine only
- needs to deal with backend values. type and value are no longer
- passed to __throw.
- (init_exception_processing): Likewise.
- (expand_start_all_catch): Likewise.
- (expand_end_all_catch): Likewise.
- (expand_leftover_cleanups): Likewise.
- (expand_end_catch_block): Likewise.
- (expand_builtin_throw): Likewise.
- (expand_throw): Likewise.
-
-Tue Aug 29 15:04:36 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * cp-tree.h (DECL_REAL_CONTEXT): Give the real declaration context
- for a decl.
- * decl.c (cp_finish_decl): Use it.
-
-Tue Aug 29 10:30:27 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (expand_internal_throw): Oops, almost forgot type and
- value are now trees.
-
-Mon Aug 28 17:57:45 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- Fix the attribute handling to make sure they get noted before we
- create the function's RTL, in case they can affect that.
- * decl.c (grokfndecl): New arg ATTRLIST. Run
- cplus_decl_attributes before creating the decl's rtl.
- (grokdeclarator): New arg ATTRLIST, passed down into grokfndecl.
- (shadow_tag, groktypename, start_decl, start_method): Pass a
- NULL_TREE to grokdeclarator's new last arg.
- * decl2.c (grokfield): New arg ATTRLIST, passed into grokdeclarator.
- (grokbitfield, grokoptypename): Pass a NULL_TREE to
- grokdeclarator's new last arg.
- * except.c (expand_start_catch_block): Likewise.
- * pt.c (process_template_parm, end_template_decl,
- do_function_instantiation): Likewise.
- * cp-tree.h (grokfield): Add arg.
- (grokdeclarator): Move the prototype from here...
- * decl.h: ...to here.
- * lex.c (cons_up_default_function): Pass NULL_TREE to grokfield
- ATTRLIST argument.
- * parse.y: Create a list for the grokfield arg where appropriate,
- and pass it down instead of calling cplus_decl_attributes.
-
-Mon Aug 28 15:07:24 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c: Always allow turning on exception handling. Allow cross
- compilations to use EH.
-
-Thu Aug 24 17:39:24 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (saved_pc, saved_throw_type, saved_throw_value): Use
- trees, instead of rtxs, and don't depend on using special machine
- dependent registers.
- (expand_internal_throw): Likewise.
- (init_exception_processing): Likewise.
- (expand_start_all_catch): Likewise.
- (expand_end_all_catch): Likewise.
- (expand_start_catch_block): Likewise.
- (expand_leftover_cleanups): Likewise.
- (expand_end_catch_block): Likewise.
- (expand_builtin_throw): Likewise.
- (expand_throw): Likewise.
-
-Wed Aug 23 17:25:51 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * cvt.c (build_expr_type_conversion): Handle conversions to
- reference types.
-
-Wed Aug 23 15:33:59 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (do_unwind): Work around backend bug with -fpic.
-
-Tue Aug 22 17:20:07 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * decl2.c (flag_new_for_scope): Add a new mode that follows ANSI
- for-scoping, but supports (and warns about) old programs.
- Make the new mode (with value 1) the default.
- (lang_f_options): The on-value for flag_new_for_scope is now 2.
- * cp-tree.h (DECL_DEAD_FOR_LOCAL, DECL_ERROR_REPORTED): New macros
- (DECL_SHADOWED_FOR_VAR): Likewise.
- * decl.c (struct binding_level): New fields dead_vars_from_for
- and is_for_scope.
- (note_level_for_for): New function.
- (poplevel): Special processing if is_for_scope.
- (pushdecl): Warn if for-scope variable shadows local.
- * lex.c (do_identifier): Handle old (non-ANSI) for scoping,
- and warn if conflicts.
- * parse.y (FOR): Call note_level_for_for.
-
-Mon Aug 21 10:28:31 1995 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl2.c (import_export_inline): Class interface hackery does not
- apply to synthesized methods.
-
-Sun Aug 20 16:29:00 1995 Mike Stump <mrs@cygnus.com>
-
- * search.c (virtual_context): Find the right context more often.
- Solves a `recoverable compiler error, fixups for virtual function'
- problem.
-
-Sun Aug 20 13:53:24 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (expand_start_all_catch): Ensure that we always transfer
- control to the right EH handler, by rethrowing the end label on the
- region, instead of hoping we are nested and falling through.
- (expand_leftover_cleanups): Likewise.
- (end_protect): Since we now rethrow the end label, put a
- nop after it, so that outer regions are recognized.
- * init.c (build_vec_delete_1): New routine to handle most of vector
- deleting, all code moved here from build_vec_delete.
- (build_array_eh_cleanup): Use build_vec_delete_1 to do all the real
- work.
- (expand_vec_init): If the array needs partial destructing, setup an
- EH region to handle it.
- (build_vec_delete): Move lots of code to build_vec_delete_1, use
- build_vec_delete_1 to do the grunt work.
-
-Sat Aug 19 14:25:33 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- Handle decl attributes properly for function definitions without
- previous attribute-loaded declarations.
- * decl.c (start_function): New arg ATTRS. Add a call to
- cplus_decl_attributes with it before we create the RTL.
- * cp-tree.h (start_function): Update prototype.
- * parse.y (fn.def1): Pass ATTRS into start_function instead of
- trying to call cplus_decl_attributes too late. Pass a NULL_TREE
- for other use.
- * decl2.c (finish_file): Pass NULL_TREE as fourth arg to
- start_function.
- * method.c (synthesize_method): Likewise.
- * except.c (expand_builtin_throw): Likewise for start on __throw.
-
-Sat Aug 19 13:36:08 1995 Mike Stump <mrs@cygnus.com>
-
- * class.c (set_rtti_entry): Turn on -fvtable-thunk -frtti support.
- This changes -fvtable-thunks vtable layout, so a recompile will be
- necessary, if you use -fvtable-thunks.
- (get_vtable_entry): Use n, instead of i to be consistent with the
- rest of the compiler.
- (get_vtable_entry_n): Likewise.
- (add_virtual_function): Add a slot for the tdesc, if -fvtable-thunks
- are being used.
- (finish_struct_1): Likewise.
- (skip_rtti_stuff): New routine to collapse similar code from many
- different parts of the compiler. I think I got them all.
- (modify_one_vtable): Use it.
- (fixup_vtable_deltas1): Likewise.
- (override_one_vtable): Likewise.
- * decl2.c (mark_vtable_entries): Likewise.
- * tree.c (debug_binfo): Likewise.
- * search.c (expand_upcast_fixups): Likewise.
- (get_abstract_virtuals_1): Likewise. Use virtuals, instead of tmp to
- consistent with the rest of the compiler.
- (get_abstract_virtuals): Likewise.
- * cp-tree.h (skip_rtti_stuff): New routine, declare it.
- * gc.c (build_headof): Support -fvtable-thunk and -frtti together.
- (build_typeid): Likewise.
- (build_classof): Remove old style way of doing rtti. Remove support
- for `classof' and `headof'.
- * gxx.gperf: Likewise.
- * hash.h: Likewise.
- * parse.y: Likewise.
-
-Fri Aug 18 17:31:58 1995 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (start_function): Clear ctor_label and dtor_label.
-
- * class.c (finish_struct_1): Fix handling of access decls.
-
-Tue Aug 15 19:21:54 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * class.c (finish_struct): Only do minimal processing here, so it
- can be used for class template definitions, as well.
- (finish_struct_1): New function with the rest of the code.
-
-Tue Aug 15 09:46:16 1995 Mike Stump <mrs@cygnus.com>
-
- * class.c (prepare_fresh_vtable): On second though, always build the
- offset (see Aug 10 change), unless -fvtable-thunks is given. It
- does this by calling the new routine set_rtti_entry.
- (finish_struct): Likewise.
- (set_rtti_entry): New routine to update the rtti information at the
- start of the vtable.
-
-Mon Aug 14 12:21:22 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * error.c (dump_decl, case IDENTIFIER_NODE): Only work on a dtor
- if it's declared in the C++ language spec.
- (dump_function_decl): Likewise.
- (dump_function_name): Likewise.
- (ident_fndecl): Make sure we got something back from lookup_name.
- * decl.c (start_function): Likewise.
-
-Fri Aug 11 16:52:15 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * call.c (build_method_call): Don't call build_new when calling a
- constructor without an instance.
-
-Thu Aug 10 20:00:17 1995 Mike Stump <mrs@cygnus.com>
-
- * class.c (prepare_fresh_vtable): Always build the offset to the
- complete object, as it doesn't cost much. This allows dynamic_cast
- to void * to work when -frtti isn't given.
- (finish_struct): Likewise.
-
-Thu Aug 10 16:31:28 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (build_eh_type): Split out some functionality to new
- routine named build_eh_type_type.
- (build_eh_type_type): New routine.
- (expand_start_catch_block): Use build_eh_type_type, as we never want
- the dynamic type of the catch parameter, just the static type.
- Fixes core dumps when -frtti is used and one catchs pointers to
- classes.
-
-Thu Aug 10 14:55:29 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (expand_builtin_throw): Since we now use normal calling
- conventions for __throw, we have to remove the first layer off the
- stack, so that the next context we search for handlers is the outer
- context instead of the context that had the call to __throw, if we
- don't immediately find the desired context.
-
-Tue Aug 8 17:44:23 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * tree.c (cp_expand_decl_cleanup): Returns int, not tree.
- * cp-tree.h: Update.
-
- * parse.y (template_type_parm): Add support for `typename'.
-
-Tue Aug 8 12:06:31 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (expand_internal_throw): New internal routine to throw a
- value.
- (expand_end_all_catch, expand_leftover_cleanups): All throwers
- changed to use `expand_internal_throw' instead of jumping to throw
- label.
- (expand_end_catch_block, expand_throw): Likewise.
- (throw_label): Removed.
- (expand_builtin_throw): Changed so that EH parameters are passed by
- normal function call conventions. Completes Aug 4th work.
-
-Fri Aug 4 17:17:08 1995 Mike Stump <mrs@cygnus.com>
-
- * cp-tree.h (expand_builtin_throw): Declare it.
- * decl2.c (finish_file): Call expand_builtin_throw.
- * except.c (make_first_label): Remove.
- (init_exception_processing): Don't use a LABEL_REF for throw_label,
- instead use a SYMBOL_REF, this is so that we don't use LABEL_REFs in
- other functions that don't really appear in those functions. This
- solves a problem where cc1plus consumed exponential amounts of
- memory when -Wall was used.
- (expand_end_all_catch, expand_leftover_cleanups,
- expand_end_catch_block, expand_throw): Change all uses of
- throw_label to match new style.
- (do_unwind): Rename parameter to inner_throw_label, as it is now
- different from throw_label. Also, assume that our caller will wrap
- the passed label with a LABEL_REF, if needed.
- (expand_builtin_throw): Make external, change so that the generated
- throw is now a real function.
- (expand_exception_blocks): Never generate throw code inside another
- function.
-
-Fri Aug 4 12:20:02 1995 Mike Stump <mrs@cygnus.com>
-
- * decl.c (grokdeclarator): Move checking of mutable const objects
- and mutable static objects down, as we might decide during parsing
- to unset staticp or constp (for example, when const is part of the
- object being pointed to).
-
-Thu Aug 3 17:13:43 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (output_exception_table_entry): Enhance portability to
- weird machines.
- (emit_exception_table): Likewise.
-
-Thu Aug 3 16:41:38 1995 Mike Stump <mrs@cygnus.com>
-
- * typeck.c (build_ptrmemfunc): Handle casting of pointer to
- non-virtual member functions.
-
-Wed Aug 2 11:58:25 1995 Mike Stump <mrs@cygnus.com>
-
- * gc.c (build_typeid): Strip cv qualifiers so that const T&, T&, T
- and const T all match.
-
-Wed Aug 2 11:25:33 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (build_eh_type): Strip cv qualifiers so that const T&,
- T&, T and const T all match.
-
-Tue Aug 1 14:20:16 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c: Fix up comments, cleanup code and eliminate exceptNode,
- exceptStack, exceptstack, push_except_stmts, pop_except_stmts,
- new_except_stack, push_last_insn, pop_last_insn, insn_save_node and
- InsnSave. Also, numerous speed improvements, and correctness
- improvements. Double faulting in all situations should now be
- handled correctly.
- (expand_start_all_catch): Instead of having many terminate protected
- regions, just have one.
- (expand_start_catch_block): No longer have to protect
- false_label_rtx, as it isn't used for EH region marking.
- (expand_end_catch_block): Expand out EH cleanups here by using
- expand_leftover_cleanups.
- (expand_end_all_catch): Use sequences instead of playing with insn
- links directly.
- (expand_exception_blocks): Likewise. Also protect all catch clauses
- with one terminate region.
-
-Mon Jul 31 13:24:30 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * method.c (report_type_mismatch): Don't talk about an object
- parameter for non-methods.
-
-Sun Jul 30 13:13:02 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * class.c (finish_struct): Catch private and protected members of
- anonymous unions here.
- * decl2.c (finish_anon_union): And here.
- * parse.y: Instead of here.
-
- * errfn.c (ARGSLIST): Support passing four args.
- * error.c (cv_as_string): New function.
- (cp_printers): Add it.
- * call.c (build_method_call): Report 'const' at end of pseudo-decl.
-
- * method.c (report_type_mismatch): Deal with a bad_arg of 0.
-
- * init.c (expand_aggr_init): Handle volatile objects, too.
-
-Sat Jul 29 13:42:03 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (struct binding_level): Keep list of incomplete decls.
- (print_binding_level): Use list_length to count them.
- (pushdecl): Build up the list.
- (hack_incomplete_structures): Walk it and prune completed decls.
-
-Fri Jul 28 15:26:44 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (comp_target_types): Don't check const and volatile for
- function types.
- (comp_ptr_ttypes_real): Likewise.
-
-Thu Jul 27 15:40:48 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (comp_target_types): Fix.
-
-Thu Jul 27 15:10:48 1995 Mike Stump <mrs@cygnus.com>
-
- * cp-tree.h (unsave_expr_now, build_unsave_expr,
- cp_expand_decl_cleanup): Declare new routines.
- * decl.c (cp_finish_decl, store_parm_decls,
- hack_incomplete_structures): Change all cals from
- expand_decl_cleanup to cp_expand_decl_cleanup.
- * gc.c (protect_value_from_gc): Likewise.
- * expr.c (cplus_expand_expr): Handle UNSAVE_EXPRs.
- * tree.c (unsave_expr): New routine to build an UNSAVE_EXPR.
- (unsave_expr_now): Backend routine used by tree expander.
- (cp_expand_decl_cleanup): Wrap second argument in an UNSAVE_EXPR to
- work around a limitation in the backend. The backend uses the
- cleanups multiple times, on disjoint control flows, so we cannot
- pass unsaved SAVE_EXPRs to the backend.
- * tree.def (UNSAVE_EXPR): New tree code.
- * typeck.c (c_expand_return): Move goto/return code up inside
- conditional, as we don't always want to do this, we only want to do
- this when we don't otherwise finish with this control flow.
-
-Thu Jul 27 10:38:43 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * parse.y (typespec): Only complain about typeof if we're not
- getting it from a system header.
-
-Thu Jul 27 10:26:23 1995 Doug Evans <dje@canuck.cygnus.com>
-
- Clean up prefix attribute handling.
- * parse.y (reserved_declspecs): Link prefix attributes with declspecs.
- (declmods): Likewise.
- (all rules that reference typed_declspecs and declmods): Call
- split_specs_attrs or strip_attrs to separate declspecs and attrs.
- (lang_extdef): Delete resetting of prefix_attributes.
- (template_def, notype_declarator rule): Use NULL_TREE for
- prefix_attributes.
- (condition): Use NULL_TREE for prefix_attributes.
- (setattrs): Deleted.
- (nomods_initdcl0): Set prefix_attributes to NULL_TREE.
- (component_decl): Delete resetting of prefix_attributes.
- (component_decl_1, notype_components rule): Use NULL_TREE for
- prefix_attributes.
- (simple_stmt): Delete resetting of prefix_attributes.
-
-Mon Jul 24 13:37:53 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * call.c (convert_harshness): Deal with reference conversions before
- others. Actually do array->pointer decay. Call comp_target_types
- with pointer types rather than their targets.
-
- * typeck.c (comp_target_types): Avoid assigning D const * to B *.
-
-Mon Jul 24 08:54:46 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * pt.c (to_be_restored): Move decl to global scope.
-
-Sat Jul 22 12:22:11 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (start_decl): Put back clearing of DECL_IN_AGGR_P.
-
-Fri Jul 21 17:09:02 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (grokdeclarator): Downgrade error about 'extern int A::i'
- to pedwarn.
-
- * pt.c (instantiate_template): Also avoid instantiation if the
- function has already been declared to be a specialization.
-
- * decl2.c (check_classfn): Ignore cname argument, and return the
- matching function.
-
- * decl.c (start_decl): Handle declarations of member functions
- outside of the class (i.e. specialization declarations).
-
-Thu Jul 20 10:34:48 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * class.c (finish_struct): Don't mess with the type of bitfields.
-
- * various.c: s/TYPE_POINTER_TO/build_pointer_type/.
-
-Thu Jul 20 01:43:10 1995 Mike Stump <mrs@cygnus.com>
-
- * init.c (expand_aggr_init): Assume LOOKUP_ONLYCONVERTING if init
- is not a parameter list (TREE_LIST).
- (expand_default_init): If LOOKUP_ONLYCONVERTING is set, then set
- LOOKUP_NO_CONVERSION so that we don't allow two-level conversions,
- but don't set it otherwise.
-
-Wed Jul 19 20:32:01 1995 Mike Stump <mrs@cygnus.com>
-
- * init.c (expand_default_init): Don't allow two-level conversions
- during construction.
-
-Wed Jul 19 18:06:37 1995 Mike Stump <mrs@cygnus.com>
-
- * gc.c (build_headof): The type of dyncasting to a pointer to cv
- void, should be pointer to cv void.
-
-Wed Jul 19 17:25:43 1995 Mike Stump <mrs@cygnus.com>
-
- * gc.c (build_dynamic_cast): Allow casting in const.
-
-Wed Jul 19 16:34:27 1995 Mike Stump <mrs@cygnus.com>
-
- * typeck.c (build_const_cast): If we are passed error_mark_node,
- return it.
-
-Wed Jul 19 15:24:48 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * class.c (push_nested_class): Make sure TYPE is non-nil.
-
- * cvt.c (type_promotes_to): Watch for error_mark_node on the
- incoming TYPE.
-
-Wed Jul 19 13:23:12 1995 Gerald Baumgartner <gb@alexander.cs.purdue.edu>
-
- * cp-tree.h (SIGTABLE_VT_OFF_NAME): Renamed from SIGTABLE_OFFSET_NAME.
- (SIGTABLE_VB_OFF_NAME): New macro.
- (vt_off_identifier): Renamed from offset_identifier.
- (vb_off_identifier): Added extern declaration.
-
- * decl.c (vt_off_identifier): Renamed from offset identifier.
- (vb_off_identifier): New variable to hold the identifier for the
- sigtable field vb_off.
- (init_decl_processing): Initialize vb_off_identifier.
- Renamed vt_off_identifier from offset_identifier.
- * sig.c (build_signature_method_call): Renamed offset_identifier and
- local variable offset to vt_off_identifer and vt_off, respecitively.
- * sig.c (build_signature_table_constructor): Renamed offset to vt_off.
-
- * decl.c (init_decl_processing): Add vb_off field to
- sigtable_entry_type. Reorder fields so that pfn gets properly
- aligned at a 64 bit boundary on the Alpha.
- * sig.c (build_signature_table_constructor): Build the constructor
- according to the new layout. Set the vb_off field to -1 for now.
-
- * decl.c (init_decl_processing): Align sigtable_entry_type on word
- boundaries instead of double word boundaries to save space.
-
-Tue Jul 18 16:58:37 1995 Mike Stump <mrs@cygnus.com>
-
- * cvt.c (cp_convert): Always call build_cplus_new for a ctor.
-
-Tue Jul 18 14:24:53 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * parse.y (opt.component_decl_list): Only forbid private/protected
- in anonymous unions. We need to make this know when the type is
- defined for an object, to not give the error.
-
-Mon Jul 17 14:22:44 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * parse.y (opt.component_decl_list): Don't allow access control
- as private or protected for union members.
-
-Sun Jul 16 14:01:00 1995 Jim Wilson <wilson@chestnut.cygnus.com>
-
- * lex.c (check_newline): For 'p' case, move goto skipline line to
- before end brace for 'pragma'.
-
-Fri Jul 7 13:55:58 1995 Mike Stump <mrs@cygnus.com>
-
- * g++.1: Tiny updates.
-
-Fri Jul 7 13:05:20 1995 Mike Stump <mrs@cygnus.com>
-
- * decl.c (cp_finish_decl): Only destruct local static variables if
- they are constructed, and only construct the first time control
- passes completely through its declaration (if not initialized with a
- constant-expression).
- (expand_static_init): Likewise.
-
-Wed Jul 5 14:05:04 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * typeck.c (comptypes, case OFFSET_REF): If either offset basetype
- is a TEMPLATE_TYPE_PARM, give a match.
-
-Fri Jun 30 15:42:57 1995 Mike Stump <mrs@cygnus.com>
-
- * method.c (build_overload_value): Handle encoding of null pointer
- constants (or any pointer with a constant numeric value) for
- templates.
-
-Fri Jun 30 13:45:51 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * call.c (convert_harshness): Add QUAL_CODE when we're faced with
- const vs non-const for void conversions.
-
-Fri Jun 30 10:19:52 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (expand_start_all_catch): Fix problem with finding an
- outer nested try block when there is no code to separate it from an
- inner try block.
-
-Fri Jun 30 02:22:26 1995 Mike Stump <mrs@cygnus.com>
-
- * search.c (dfs_pushdecls): Consume 2 or 3 orders of magnitude less
- memory please when virtual bases are used.
-
-Thu Jun 29 19:03:47 1995 Mike Stump <mrs@cygnus.com>
-
- * class.c (build_vbase_path): Avoid testing things that cannot be
- null to see if they are null.
- * cvt.c (convert_pointer_to_vbase): Remove code that doesn't work.
- * decl.c (finish_function): Pass a type into the new
- convert_pointer_to_vbase instead of a binfo.
- * search.c (convert_pointer_to_vbase): Rewritten to use get_vbase
- and convert_pointer_to_real.
- (expand_indirect_vtbls_init): Use convert_pointer_to_vbase instead
- of the more cryptic call to get_vbase.
-
-Thu Jun 29 09:35:05 1995 Mike Stump <mrs@cygnus.com>
-
- * decl.c (BOOL_TYPE_SIZE): Fix broken SLOW_BYTE_ACCESS check.
-
-Thu Jun 29 03:43:55 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * pt.c (instantiate_template): Don't strip 'this' twice.
-
- * pt.c (coerce_template_parms): Allow null pointer constants.
-
- * decl.c (revert_static_member_fn): But only if DECL_ARGUMENTS is
- set.
-
-Wed Jun 28 18:39:03 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (revert_static_member_fn): Also remove 'this' from
- DECL_ARGUMENTS.
- * decl2.c (check_classfn): Don't revert this function until we get a
- match.
-
-Wed Jun 28 14:07:27 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * parse.y (component_decl): Clear PREFIX_ATTRIBUTES here.
-
-Wed Jun 28 11:05:13 1995 Mike Stump <mrs@cygnus.com>
-
- * decl2.c (finish_file): Handle global vector news.
- * init.c (build_new): Encode vector news so that later we will know
- how many elements there are.
-
-Mon Jun 26 13:38:06 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * expr.c (cplus_expand_expr): Don't mess with temp slots.
-
- * decl2.c (warn_if_unknown_interface): Don't crash if tinst_for_decl
- returns null.
-
- * decl2.c (check_classfn): Use revert_static_member_fn.
- * decl.c (revert_static_member_fn): Diagnose static member functions
- declared const or volatile.
-
- * decl2.c (grokfield): Check for missing default args here, too.
- (check_default_args): Function to do the checking.
- * decl.c (pushdecl): Use it.
-
- * decl.c (pushdecl): Don't warn about shadowing a member of `this'
- if there is no `this'.
-
-Sun Jun 25 11:34:25 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * call.c (build_method_call): Downgrade 'called before definition'
- to a warning, as it ought to go away after Monterey.
-
-Sat Jun 24 14:18:42 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * pt.c (coerce_template_parms): Don't do extra checking on pointer
- to member arguments.
-
- * class.c (finish_struct): const and reference members don't prevent
- a class from being an aggregate.
-
- * class.c (finish_struct): Signatures are always aggregates.
-
-Fri Jun 23 17:20:29 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl2.c (check_classfn): Improve error message.
-
- * pt.c (tsubst): Handle PROMOTE_PROTOTYPES.
-
-Thu Jun 22 01:50:42 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (comptypes): Don't ignore method quals.
-
- * class.c (finish_struct): Non-abstract virtuals are always USED.
-
- * decl.c (build_ptrmemfunc_type): The underlying union type isn't
- IS_AGGR_TYPE, either.
- * class.c (finish_struct): Use CLASSTYPE_NON_AGGREGATE instead.
- * cp-tree.h: Likewise.
-
- * cp-tree.h (lang_type): Add aggregate.
- (CLASSTYPE_AGGREGATE): New macro.
- (TYPE_NON_AGGREGATE_CLASS): Likewise.
- * class.c (finish_struct): Determine whether a class is an
- aggregate.
- * decl.c (cp_finish_decl): Check TYPE_NON_AGGREGATE_CLASS instead of
- TYPE_NEEDS_CONSTRUCTING.
- * typeck2.c (digest_init): Check TYPE_NON_AGGREGATE_CLASS for
- subobjects, too.
-
- * pt.c (tsubst, PARM_TYPE): Propagate DECL_ARTIFICIAL.
-
- * decl.c (start_function): For pre-parsed functions, layout all of
- the parm decls again.
- (grokvardecl): TREE_PUBLIC depends on DECL_THIS_EXTERN, not
- DECL_EXTERNAL.
-
- * pt.c (coerce_template_parms): Improve checking for invalid
- template parms.
-
-Wed Jun 21 12:01:16 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * decl.c (grokdeclarator): Forbid declaration of a static member
- with the same name as its enclosing class.
-
-Mon Jun 19 10:28:14 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (finish_function): Clear current_class_decl.
-
- * typeck.c (build_conditional_expr): Use convert (boolean_type_node
- instead of truthvalue_conversion.
-
- * class.c (finish_struct): A data member with the same name as the
- class doesn't suppress constructors.
-
-Fri Jun 16 18:11:39 1995 Gerald Baumgartner <gb@alexander.cs.purdue.edu>
-
- * decl.c (start_function): If current_class_decl is a signature
- pointer, don't dereference it but set C_C_D to current_class_decl.
-
-Fri Jun 16 17:06:28 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (duplicate_decls): Complain about virtual functions
- redeclared to be inline.
-
-Fri Jun 16 13:20:38 1995 Mike Stump <mrs@cygnus.com>
-
- * decl.c (get_unique_name): New routine to name unnamed namespaces.
- (push_namespace): Use get_unique_name for naming unnamed namespaces.
-
-Thu Jun 15 15:00:41 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * parse.y: Call cplus_decl_attributes with prefix_attributes where
- appropriate.
-
-Wed Jun 14 19:24:49 1995 Mike Stump <mrs@cygnus.com>
-
- * search.c (get_vbase): New routine to switch hierarchies from the
- CLASSTYPE_VBASECLASSES to the normal one.
- (expand_indirect_vtbls_init): Use get_vbase to figure out how we
- want to convert to a vbase pointer.
-
-Mon Jun 12 17:50:30 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * pt.c (instantiate_class_template): Add the new instantiation to
- template_classes.
- (do_pending_expansions): Call instantiate_member_templates on all of
- the classes in template_classes.
-
-Mon Jun 12 12:36:59 1995 Mike Stump <mrs@cygnus.com>
-
- * decl.c (complete_array_type): Fill in the TYPE_DOMAIN of our
- TYPE_MAIN_VARIANT if it is not filled in.
- * init.c (build_delete): If the TYPE_DOMAIN is not set, give an
- error instead of core dumping.
-
-Mon Jun 12 10:41:40 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * call.c (can_convert): Also check for distance > 0.
- (can_convert_arg): Likewise.
- (user_harshness): Likewise.
-
-Fri Jun 9 19:17:21 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * g++.c (MATH_LIBRARY): Provide default.
- (main): Always link with the math library if we link with libstdc++.
-
- * decl.c (start_function): Complain about redefinition of a function
- even when the pending_inline version is compiled after the other
- version.
-
-Thu Jun 8 15:44:38 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * gc.c (build_dynamic_cast): Build up a reference to a parameter of
- aggregate type.
-
-Wed Jun 7 15:31:57 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * init.c (build_vec_delete): Resolve an offset ref before we try to
- use it.
-
-Wed Jun 7 14:19:32 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (build_modify_expr): If the class lacks a constructor or
- assignment operator, return error_mark_node.
- (common_type): Use build_cplus_array_type.
-
-Tue Jun 6 09:41:27 1995 Mike Stump <mrs@cygnus.com>
-
- * class.c (dont_allow_type_definitions): New variable set when types
- cannot be defined.
- (finish_struct): Use it.
- * cp-tree.h (dont_allow_type_definitions): Define it.
- * parse.y (primary, handler_seq): Set it.
-
-Mon Jun 5 18:49:38 1995 Mike Stump <mrs@cygnus.com>
-
- * method.c (build_opfncall): Use DECL_CHAIN, not TREE_CHAIN for
- results from lookup_fnfields. Always give warning/error on bad
- code.
-
-Mon Jun 5 11:39:37 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * init.c (member_init_ok_or_else): Don't allow initialization of
- an ancestor's member from within a constructor.
-
-Mon Jun 5 11:20:34 1995 Gerald Baumgartner <gb@alexander.cs.purdue.edu>
-
- * sig.c (build_signature_table_constructor): Use DECL_CONTEXT
- instead of DECL_CLASS_CONTEXT for calculating the vfield offset so
- abstract virtual functions are handled correctly.
-
- * sig.c (build_signature_table_constructor): Store the correct
- delta in signature table entries. It does not yet work for
- classes with virtual base classes as implementations of signatures.
- (build_signature_method_call): Add the delta to the object_ptr
- before generating the function call.
-
- * call.c (build_method_call): Make instance_ptr the signature
- pointer itself instead of dereferencing the optr.
- * sig.c (build_signature_method_call): Dereference the optr for the
- direct and virtual calls.
-
- * sig.c (build_signature_table_constructor): Make the tag for
- default implementations -1 instead of 2.
- (build_signature_method_call): Change the generated conditional
- expression correspondingly.
-
- * sig.c (build_signature_pointer_constructor): Deleted the sorry
- message that said we can't handle multiple inheritance for
- implementations of signatures
- (build_signature_method_call): Use the offset from the sigtable
- entry instead of the vptr field from the signature pointer for
- building a virtual function call.
-
- * class.c (build_vfn_ref): Deleted signature specific code, we don't
- call this function anymore from build_signature_method_call.
-
- * cp-tree.h (SIGNATURE_VPTR_NAME): Deleted. We use the right vptr
- field in the object now instead of in the signature pointer/ref.
- (build_vptr_ref): Deleted extern declaration.
- * sig.c (build_vptr_ref): Deleted.
- (build_signature_pointer_or_reference_type): Deleted construction of
- the vptr field.
- (build_signature_pointer_constructor): Deleted initialization of/
- assignment to the vptr field.
-
- * sig.c (build_signature_table_constructor): Convert the signature
- table entry fields to their correct types.
-
- * sig.c (build_signature_table_constructor): Don't call digest_init
- for the fields of a sigtable entry, it's wasted time.
-
- * sig.c (build_signature_table_constructor): Correctly set the
- offset and index fields of a sigtable entry. Build the constructor
- the way digest_init does, digest_init can't handle initializing an
- anonymous union inside a struct.
- (build_signature_method_call): Use the index field instead of the
- delta field to get the vtable index.
-
- * decl.c (init_decl_processing): Fix number of fields for building
- sigtable_entry_type.
-
- * cp-tree.h (tag_identifier, offset_identifier): Added extern decls.
- (SIGTABLE_CODE_NAME): Renamed to SIGTABLE_TAG_NAME.
- (SIGTABLE_PFN_NAME): Deleted, we'll use VTABLE_PFN_NAME instead.
- * decl.c (tag_identifier, offset_identifier): New variables to
- hold the identifiers for the sigtable fields tag and offset.
- (init_decl_processing): Initialize these variables.
- (init_decl_processing): Use these variables to build the
- sigtable_entry_type structure. Rename the code and offset fields
- to tag and delta, respectively; add offset and index fields. Changed
- types of fields from short_integer_type_node to delta_type_node.
- * sig.c (build_signature_table_constructor): Rename code and offset
- to tag and delta, respectively.
- (build_signature_method_call): Likewise. Use above variables.
-
-Thu Jun 1 17:03:51 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (lookup_name_real): Don't try to look anything up in an
- erroneous object.
-
-Fri Jun 2 10:30:14 1995 Mike Stump <mrs@cygnus.com>
-
- * method.c (build_overload_int): New routine. Break out
- functionality from build_overload_value so we can reuse it.
- (build_overload_value): Handle pointer to member functions as value
- parameters for templates.
- (build_overload_identifier): Since template parameters are shared
- among all instantiations, we have to substitute in the real types
- in TREE_TYPE (parm).
- pt.c (coerce_template_parms): Likewise.
- (push_template_decls): Likewise.
- (grok_template_type): Deleted as template parameters are shared
- among all instantiations.
-
-Wed May 31 19:10:32 1995 Mike Stump <mrs@cygnus.com>
-
- * decl.c (grokdeclarator): Always give errors on constant overflow
- for array indices.
-
-Wed May 31 11:39:43 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (commonparms): Don't abort if simple_cst_equal returns < 0.
- (build_c_cast): Don't tack on a NON_LVALUE_EXPR when casting to
- reference type.
- (build_indirect_ref): Fix check for *&.
-
-Fri Jun 16 06:54:03 1995 Mike Stump <mrs@cygnus.com>
-
- * Version 2.7.0 released.
-
-Fri Jun 16 15:07:29 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-
- * Make-lang.in (DEMANGLER_PROG): Add LIBS.
-
-Thu Jun 15 15:00:41 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (define_function): Don't set DECL_INTERFACE_KNOWN.
-
-Wed Jun 7 20:00:31 1995 Mike Stump <mrs@cygnus.com>
-
- * *.[chy]: Change all callers of finish_decl to cp_finish_decl.
- * decl.c (finish_decl): New routine to handle call backs from the
- mid end (declare_hidden_char_array).
-
-Wed Jun 7 19:02:50 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (start_function): Handle setting C_C_D here.
- (set_C_C_D): Removed.
- (struct saved_scope): Remove class_decl.
- (push_to_top_level): Don't save current_class_decl.
- (pop_from_top_level): Don't restore current_class_decl or C_C_D.
- (struct cp_function): Add C_C_D.
- (push_cp_function_context): Save C_C_D.
- (pop_cp_function_context): Restore C_C_D.
-
-Fri Jun 2 11:05:58 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (set_C_C_D): New function. suspend_momentary before
- building C_C_D.
- (pop_from_top_level): Call it.
- (start_function): Likewise.
- (pop_cp_function_context): Likewise.
-
- * class.c, cp-tree.h, decl.c, decl2.c, parse.y: Lose all references
- to current_vtable_decl, CLASSTYPE_INST_VAR and CLASSTYPE_VTBL_PTR.
-
- * decl.c (push_cp_function_context): Save current_class_decl.
- (pop_cp_function_context): Restore current_class_decl and set C_C_D.
- (pop_from_top_level): Don't use CLASSTYPE_INST_VAR to set C_C_D.
- (start_function): Likewise.
-
- * class.c (popclass): Don't mess with current_class_decl,
- current_vtable_decl, or C_C_D.
-
-Mon May 29 12:45:10 1995 Paul Eggert <eggert@twinsun.com>
-
- * Make-lang.in (c++.mostlyclean): Remove $(DEMANGLER_PROG).
-
-Wed May 24 15:55:18 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-
- * decl.c (duplicate_decls): Check simple_cst_equal result against 0.
- * decl2.c (finish_anon_union): Likewise.
- * method.c (largest_union_member): Likewise.
-
-Wed May 24 14:41:11 1995 H.J. Lu <hjl@nynexst.com>
-
- * Make-lang.in (cxxmain.o): Replace single quotes with backslashes.
-
-Mon May 22 17:38:48 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-
- * Make-lang.in (g++, g++-cross, cc1plus, DEMANGLER_PROG):
- Use $@ instead of output name so works even if have .exe.
- (cxxmain.o): Use cp if ln -s fails.
- (c++.install-man): Use $(exeext) in executable names.
- (c++.mostlyclean, stage[1-4]): Use $(objext) in object file names.
- * Makefile.in (../cc1plus): Use $(exeext) in name of executable.
-
-Wed May 24 01:39:03 1995 Jason Merrill <jason@deneb.cygnus.com>
-
- * call.c (build_method_call): parms can be null, duh.
-
-Tue May 23 01:32:09 1995 Jason Merrill <jason@deneb.cygnus.com>
-
- * call.c (build_method_call): If convert_arguments failed, just bail.
-
-Fri May 19 10:31:11 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * cvt.c (convert_force): Pass LOOKUP_NORMAL to cp_convert.
-
- * tree.c (copy_to_permanent): Oops.
-
-Fri May 19 10:01:07 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * cp-tree.h (break_out_target_exprs): Add decl.
-
-Thu May 18 13:02:30 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (start_function): Move *all* interface handling stuff after
- the pushdecl.
-
- * tree.c (mapcar): Renamed from make_deep_copy and generalized.
- (perm_manip): Return t if permanent, otherwise 0.
- (copy_to_permanent): Use them.
- (bot_manip): Helper for break_out_target_exprs.
- (break_out_target_exprs): New function. Uses mapcar.
-
- * typeck.c (convert_arguments): Use it.
-
- * method.c (hack_identifier): Use convert_from_reference to
- dereference a reference.
-
-Wed May 17 17:54:54 1995 Mike Stump <mrs@cygnus.com>
-
- * call.c (convert_harshness): Move reference bashing before pointer
- to member bashing.
-
-Wed May 17 16:57:53 1995 Mike Stump <mrs@cygnus.com>
-
- * cvt.c (convert_to_reference): Only complain, if complaints are
- wanted.
- * typeck.c (build_function_call_real): Likewise. If
- LOOKUP_SPECULATIVELY is set and something won't work, return
- NULL_TREE.
- * cvt.c (cp_convert): Likewise. Pass flags down to build_method_call.
- (convert): Pass LOOKUP_NORMAL to cp_convert.
- * typeck.c (convert_for_assignment): Likewise.
- (convert_force): Pass LOOKUP_COMPLAIN to cp_convert.
- (convert_arguments): Get out early if we get an error_mark_node.
- (convert_for_initialization): Use cp_convert instead of convert so
- that we can pass flags down.
- * cp-tree.h (LOOKUP_SPECULATIVELY): Added documentation.
-
-Wed May 17 01:43:58 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck2.c (store_init_value): Don't take the MAIN_VARIANT of the
- decl type.
-
- * class.c (finish_struct): Don't complain about a class with no
- user-defined constructors but with a member that has no default
- constructor, as this is OK for aggregates.
-
- * expr.c (cplus_expand_expr, NEW_EXPR): If this is an explicit
- constructor call, mark slot addressable.
-
-Tue May 16 18:37:51 1995 Douglas Rupp <drupp@cs.washington.edu>
-
- * g++.c: Changed WINNT to _WIN32.
-
-Tue May 16 12:40:16 1995 Jason Merrill <jason@lisa.cygnus.com>
-
- * lex.c (handle_sysv_pragma): Don't use token_buffer.
-
-Tue May 16 12:05:26 1995 Mike Stump <mrs@cygnus.com>
-
- * call.c (resolve_scope_to_name): Add initial semantic support for
- namespaces.
- * class.c (finish_struct): Likewise.
- * cp-tree.h (NAMESPACE_LEVEL): Likewise.
- * cvt.c (build_up_reference, convert_to_reference): Likewise.
- * decl.c (binding_level::namespace_p, suspend_binding_level): Likewise.
- (resume_binding_level, toplevel_bindings_p): Likewise
- (namespace_bindings_p, declare_namespace_level): Likewise.
- (resume_level, push_namespace, pop_namespace): Likewise.
- (pop_everything, pushtag, duplicate_decls, pushdecl): Likewise.
- (implicitly_declare, lookup_namespace_name): Likewise.
- (lookup_name_real, start_decl, make_temporary_for_reference): Likewise.
- (obscure_complex_init, finish_decl, expand_static_init): Likewise.
- (grokvardecl, grokdeclarator, parmlist_is_exprlist): Likewise.
- (store_parm_decls, hack_incomplete_structures): Likewise.
- * decl2.c (get_temp_name, finish_anon_union): Likewise.
- (current_namespace, push_namespace, pop_namespace): Likewise.
- (do_namespace_alias, do_toplevel_using_decl): Likewise.
- (do_class_using_decl): Likewise.
- * error.c (dump_decl): Likewise.
- * init.c (build_member_call, build_offset_ref): Likewise.
- * lex.c (identifier_type): Likewise.
- * parse.y (lang_extdef, using_decl, extdef): Likewise.
- (component_decl_1, nested_name_specifier_1): Likewise.
- * spew.c (yylex): Likewise.
- * tree.def (NAMESPACE_DECL): Likewise.
-
-Tue May 16 11:55:35 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (push_overloaded_decl): Return the new decl even if it
- can't be pushed.
-
-Tue May 16 11:00:37 1995 Jason Merrill <jason@lisa.cygnus.com>
-
- * typeck.c (decay_conversion): Split out from default_conversion.
- (default_conversion): Call it.
- (build_binary_op): Likewise.
- (build_binary_op_nodefault): Use decay_conversion for truth ops.
-
-Mon May 15 12:47:56 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (warn_extern_redeclared_static): This is a pedwarn.
- (duplicate_decls): Always use the old decl's linkage info. Don't
- play with linkage of consts.
- (pushdecl): Don't play with linkage of consts.
- (redeclaration_error_message): Don't complain about an old public
- decl and a new non-public decl here.
- (grokvardecl): Handle linkage of consts here.
- (grokdeclarator): An 'extern inline' is public. Pass constp to
- grokvardecl.
- (start_function): Wait until after the pushdecl to do some linkage
- stuff.
-
- * decl2.c (import_export_vtable): Make duplicates weak rather than
- static if supported.
- (import_export_inline): Likewise.
- * pt.c (do_pending_expansions): Likewise.
-
- * class.c (build_vbase_path): flag_assume_nonnull_objects only
- affects reference conversion.
-
- * init.c (emit_base_init): Build up an RTL_EXPR and add it to
- rtl_expr_chain.
- * decl.c, decl2.c: s/base_init_insns/base_init_expr/.
-
-Tue May 16 07:06:28 1995 Paul Eggert <eggert@twinsun.com>
-
- * method.c (numeric_output_need_bar): Renamed from misspelling.
-
- * typeck.c (build_ptrmemfunc): Fix misspellings in messages.
-
-Sun May 14 10:26:22 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-
- * lang-options.h, lang-specs.h: New files.
-
-Thu May 11 00:31:48 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (default_conversion): Don't check for BLKmode before
- pulling out the decl_constant_value.
-
- * decl.c (start_function): Clear named_labels and shadowed_labels.
-
- * typeck.c (build_function_call_real): Also synthesize methods here.
-
-Wed May 10 00:55:59 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl2.c (finish_file): Synthesize exported methods before the
- reconsider loop.
-
- * parse.y: Move declaration of flag_new_for_scope to file scope.
-
-Tue May 9 19:10:33 1995 Mike Stump <mrs@cygnus.com>
-
- * decl2.c: Add flag_new_for_scope for new -ffor-scope flag.
- * parse.y (FOR): Conditionalize the pushing and poping of scope for
- the for-init-statement upon the new flag_new_for_scope.
- * parse.y (try_block): Simplify and use compstmt.
-
-Mon May 8 12:41:52 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (define_function): Mark function decl artificial.
-
-Sun May 7 00:51:28 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * parse.y (simple_stmt, FOR): Put back push/pop for condition scope.
-
- * decl2.c (grokclassfn): DECLs don't have cv-qualified types.
- * tree.c (build_cplus_method_type): Likewise.
-
- * cp-tree.h (SET_DECL_ARTIFICIAL): Just set DECL_ARTIFICIAL to 1.
-
- * typeck.c (build_function_call_real): If convert_arguments failed,
- just bail.
- (convert_arguments): If one of the arguments is error_mark_node,
- just bail.
-
-Sat May 6 02:39:41 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (duplicate_decls): Don't check DECL_NOT_REALLY_EXTERN for
- decls that don't include it.
-
-Fri May 5 14:23:30 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (duplicate_decls): Decls that have DECL_INTERFACE_KNOWN or
- DECL_NOT_REALLY_EXTERN set aren't extern decls.
-
- * typeck.c (build_indirect_ref): Don't call default_conversion for a
- parameter of reference_type.
- * cvt.c (convert_from_reference): Just use build_indirect_ref.
-
- * pt.c (do_type_instantiation): Only instantiate member functions
- that actually come from templates.
-
-Fri May 5 09:46:05 1995 Mike Stump <mrs@cygnus.com>
-
- * parse.y: Generalized cleanup of poplevels, and compound statements
- and compound statements in try blocks. Rewritten `for' rule so that
- the scope of variables declared in the for clause is shortened to
- span just to the end of the statement, instead of the whole
- containing block.
-
-Fri May 5 00:37:14 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * call.c (convert_harshness): Handle pointers to members better.
-
-Thu May 4 16:00:26 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl2.c (delete_sanity): Do access control here.
- * init.c (build_delete): Instead of here.
-
- * Make-lang.in: Build c++filt.
-
-Wed May 3 02:59:53 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl2.c (cplus_decl_attributes): If we just modified a TYPE_DECL,
- update our IDENTIFIER_TYPE_VALUE.
-
-Fri Apr 28 07:58:41 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * lex.c (cons_up_default_function): Fix linkage of #pragma
- implemented functions.
-
-Thu Apr 27 16:56:24 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * method.c (build_overload_name): Simplify and fix repeated type
- folding.
-
- * decl.c (grokdeclarator): Prohibit pointers to void or reference
- members.
-
-Thu Apr 27 09:49:07 1995 Mike Stump <mrs@cygnus.com>
-
- * typeck2.c (process_init_constructor): Make sure initializers are
- fully digested.
-
-Thu Apr 27 01:11:55 1995 Jason Merrill <jason@python.cygnus.com>
-
- * lex.c (cons_up_default_function): Always defer synthesis.
-
-Thu Apr 27 00:20:37 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl2.c (mark_inline_for_output): Don't play with pending_inline
- stuff.
-
-Wed Apr 26 17:48:24 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * call.c (user_harshness): New function; like build_type_conversion,
- but doesn't actually build anything.
- (compute_conversion_costs): Use it instead of build_type_conversion.
-
-Wed Apr 26 17:11:25 1995 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (build_function_call_real): Improve error message for
- calling a non-function.
-
- * method.c (hack_identifier): Lose check for calling a data member.
-
-Wed Apr 26 16:59:13 1995 Mike Stump <mrs@cygnus.com>
-
- * typeck2.c (build_functional_cast): Remove very old cruft.
- Seems like good code is generated without it.
-
-Wed Apr 26 00:47:16 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * method.c (do_build_assign_ref): Fix handling of anonymous unions.
- (do_build_copy_constructor): Likewise.
-
- * parse.y (simple_stmt, SWITCH): Call {push,pop}_switch.
-
- * decl.c (push_switch): New function.
- (pop_switch): Likewise.
- (define_case_label): Check for jumping over initialization.
-
- * call.c (build_method_call): Check for an inline function being
- called before its definition has been seen.
- * typeck.c (build_function_call_real): Likewise.
-
- * decl.c (duplicate_decls): Check for a function being redeclared
- inline after its address has been taken.
-
- * typeck.c (build_conditional_expr): Handle related class lvalues.
-
-Tue Apr 25 13:20:45 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * pt.c (do_pending_expansions): Don't expand unused templates.
-
- * parse.y (component_decl): Accept a lone semicolon.
-
-Tue Apr 25 00:25:56 1995 Jason Merrill <jason@rtl.cygnus.com>
-
- * call.c (build_method_call): Don't allow an RTL_EXPR to serve as the
- object parameter anymore.
-
- * expr.c (cplus_expand_expr): Don't create RTL_EXPRs with no insns.
-
-Mon Apr 24 12:35:48 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * parse.y (simple_stmt, decl case): Clear prefix_attributes.
- (lang_extdef): Likewise.
-
- * parse.y (maybe_parmlist): New rule for use in declarators where
- this could either be a list of expressions or parameters. Calls
- suspend_momentary before deciding which.
- (direct_after_type_declarator): Use it.
- (complex_direct_notype_declarator): Use it.
-
- * pt.c (tsubst): Propagate attributes const and noreturn.
-
- * typeck.c (build_modify_expr): If warn_synth, call build_opfncall
- before doing the default thing.
-
-Thu Apr 27 21:49:36 1995 Doug Evans <dje@cygnus.com>
-
- * typeck.c (common_type): Call lookup_attribute instead of
- value_member.
-
-Tue Apr 25 18:07:43 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-
- * Make-lang.in: Change "realclean" to "maintainer-clean".
-
-Sun Apr 23 12:32:38 1995 Mike Stump <mrs@cygnus.com>
-
- * decl2.c (finish_file): Fix broken linked list handling.
-
-Fri Apr 21 18:08:43 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * class.c (finish_base_struct): Don't set TYPE_HAS_COMPLEX_*_REF
- as often.
- (finish_struct): Likewise.
-
- * various: Use TYPE_HAS_TRIVIAL_* instead of TYPE_HAS_COMPLEX_*.
-
- * cp-tree.h (TYPE_HAS_TRIVIAL_INIT_REF): New macro.
- (TYPE_HAS_TRIVIAL_ASSIGN_REF): New macro.
-
-Fri Apr 21 15:52:22 1995 Jason Merrill <jason@python.cygnus.com>
-
- * typeck.c (c_expand_return): Only expand a returned TARGET_EXPR if
- it is of the same type as the return value.
-
-Fri Apr 21 03:01:46 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl2.c (finish_file): Reconsider if synthesizing a method wrote
- out its assembly.
-
- * typeck.c (convert_for_initialization): Don't call a trivial copy
- constructor.
-
- * typeck2.c (store_init_value): Only abort if the type has a
- non-trivial copy constructor.
-
- * typeck.c (c_expand_return): If we're returning in a register and
- the return value is a TARGET_EXPR, expand it. Only do
- expand_aggr_init if we're returning in memory.
- (expand_target_expr): Function to expand a TARGET_EXPR.
- (build_modify_expr): Use it.
-
- * tree.c (build_cplus_new): Layout the slot.
-
- * expr.c (cplus_expand_expr): Use expand_call to expand the call
- under a NEW_EXPR, so the target is not discarded.
-
-Thu Apr 20 14:59:31 1995 Mike Stump <mrs@cygnus.com>
-
- * gc.c (build_dynamic_cast): Tighten error checking.
-
-Thu Apr 20 11:23:54 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * expr.c (cplus_expand_expr): Only abort if the returned target is
- different from what we expected if the type has a non-trivial copy
- constructor.
-
- * decl2.c (cplus_decl_attributes): Attributes applied to a template
- really apply to the template's result.
-
- * tree.c (lvalue_p): Check IS_AGGR_TYPE instead of TREE_ADDRESSABLE
- to decide whether to consider a CALL_EXPR an lvalue.
-
- * class.c (finish_struct_bits): Only set TREE_ADDRESSABLE if the
- type has a non-trivial copy constructor.
-
- * decl.c (start_function): If interface_known, unset
- DECL_NOT_REALLY_EXTERN on the function.
-
-Wed Apr 19 16:53:13 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * pt.c (do_function_instantiation): Handle explicit instantiation of
- member functions.
- (do_type_instantiation): Handle 'inline template class foo<int>',
- meaning just spit out the vtable.
-
- * lex.c (cons_up_default_function): Set DECL_NOT_REALLY_EXTERN on
- the consed functions.
-
- * decl2.c (import_export_inline): Set DECL_INTERFACE_KNOWN.
-
-Wed Apr 19 16:28:17 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * call.c, class.c, decl2.c, gc.c, init.c, parse.y, pt.c, search.c,
- typeck.c: Include output.h.
-
-Wed Apr 19 14:57:21 1995 Gerald Baumgartner <gb@alexander.cs.purdue.edu>
-
- * call.c (build_method_call): Allow a signature member functions to
- be called from a default implementation.
-
-Wed Apr 19 10:21:17 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * repo.c (finish_repo): Remember what directory we are in.
-
- * search.c (expand_upcast_fixups): Don't mess with abort_fndecl.
-
- * repo.c: Use obstacks instead of fixed-size buffers. Don't spit
- out the second copy of the symbol name. Don't remember COLLECT_GCC.
-
-Wed Apr 19 02:32:40 1995 Mike Stump <mrs@cygnus.com>
-
- * search.c (virtual_context): New function to get the virtual
- context of a function.
- (expand_upcast_fixups): New function to generate runtime vtables.
- (fixup_virtual_upcast_offsets): Likewise.
- (expand_indirect_vtbls_init): Use fixup_virtual_upcast_offsets to
- ensure that the this offsets for upcasts from virtual bases into
- other virtual bases or non-virtual bases are correct at construction
- time and destruction time.
- * class.c (fixup_vtable_deltas): Modify to fixup all offsets in all
- vtables in all virtual bases, instead of just one vtable in each
- virtual base.
- (fixup_vtable_deltas1): Likewise.
-
-Tue Apr 18 03:57:35 1995 Michael Meissner <meissner@cygnus.com>
-
- * Makefile.in (lex.o): Add dependency on c-pragma.h.
-
- * lex.c (handle_sysv_pragma): Use NULL_PTR and NULL_TREE as
- appropriate, instead of 0.
-
-Mon Apr 17 12:28:42 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (pushdecl): Use decls_match, not duplicate_decls, for
- comparing local and global decls.
-
-Fri Apr 14 01:46:52 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (convert_arguments): Only prohibit passing to ... of
- types with non-trivial copy constructors.
-
- * repo.c (repo_template_used): Don't try to mess with no id.
-
-Fri Apr 14 23:32:50 1995 Per Bothner <bothner@rtl.cygnus.com>
-
- * decl.c (duplicate_decls): Use cp_warning_at for redundant-decls.
-
-Thu Apr 13 15:37:42 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * cp-tree.h (current_tinst_level): Delete declaration, since it's
- static inside pt.c.
-
- * typeck.c (build_modify_expr): Catch incompatible array assignment.
-
- * parse.y (attribute_list, attrib): Rewrite actions to feed the
- right stuff to decl_attributes.
-
-Thu Apr 13 11:24:10 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * search.c (dfs_debug_mark): Check for magic virtual like
- import_export_vtable.
-
- * typeck.c (build_binary_op_nodefault): Don't call cp_pedwarn with
- four args.
-
-Wed Apr 12 12:02:57 1995 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl2.c (finish_file): Move prevtable pass before needs_messing_up
- decision.
-
-Tue Apr 11 11:20:27 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (finish_decl): If we're writing out a static data member of
- a class, we want the debug info for that class.
-
- * gc.c (build_t_desc): Check linkage of a class properly.
-
- * class.c (finish_struct): Set the 'headof' offset for the main
- vtable properly.
- (prepare_fresh_vtable): Fix typeinfo pointer here.
- (modify_one_vtable): Instead of here.
-
-Mon Apr 10 12:15:59 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * repo.c (repo_get_id): New function to return the interesting
- identifier for a repo entity.
- (repo_template_used): Use it.
- (repo_template_instantiated): Mark the id as chosen.
- (init_repo): Record whether or not the id was chosen.
- (finish_repo): Note if an id was newly chosen.
-
- * pt.c (do_function_instantiation): Call repo_template_instantiated.
- (do_type_instantiation): Likewise. Don't diagnose multiple
- instantiation.
-
- * decl2.c (finish_file): Use DECL_NOT_REALLY_EXTERN when deciding
- whether or not to synthesize a method.
-
- Undo these changes:
- * class.c (finish_vtbls): build more vtables if flag_rtti is on.
- * class.c (modify_all_direct_vtables): ditto.
- * init.c (expand_direct_vtbls_init): expand more vtables if
- flag_rtti is on.
-
-Sat Apr 8 17:45:41 1995 Mike Stump <mrs@cygnus.com>
-
- * gc.c (build_headof): Use ptrdiff_type_node instead of
- integer_type_node on pointer arithmetic.
-
-Sat Apr 8 11:57:04 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (build_modify_expr): Undo previous change.
-
-Thu Apr 6 01:23:50 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (compiler): Remove ../cc1plus before rebuilding it.
-
- * repo.c (get_base_filename): Put the .rpo file in the directory
- with the object file, not the source.
-
- * typeck.c (build_conditional_expr): Handle pmf's better.
-
- * repo.c (finish_repo): Also use ASM_OUTPUT_LABELREF to print out
- the name of the symbol.
-
-Wed Apr 5 15:24:12 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * repo.c (open_repo_file): Make repo filename DOS-compliant.
- (*): Also write a new repo file if some previously-used
- templates are no longer used. Only remember the identifier.
-
- * lex.c (cons_up_default_function): If this function belongs to a
- template class, call repo_template_used for it.
-
- * repo.c (repo_template_used): Using a class means using its vtable,
- if any.
- (finish_repo): Likewise.
-
- * typeck.c (build_modify_expr): Only wrap TARGET_EXPRs in RTL_EXPRs
- if the type has a complex copy constructor.
-
- * decl2.c (lang_decode_option): -frepo implies
- -fno-implicit-templates.
-
- * decl.c (start_function): Clear current_{base,member}_init_list.
-
- * lex.c (init_lex): Also unset *_eq if ! flag_operator_names.
-
-Tue Apr 4 16:11:08 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (struct cp_function): Add {base,member}_init_list.
- (push_cp_function_context): Save current_{base,member}_init_list.
- (pop_cp_function_context): Restore them.
-
-Mon Apr 3 16:55:08 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * repo.c (get_base_filename): Take filename parm, fix logic bug.
-
- * typeck.c (build_compound_expr): Do not warn about a compound expr
- in which the first expression has no side effects.
- (build_x_compound_expr): Warn here instead.
- (build_conditional_expr): Don't warn about a conditional expression
- between an enum and the type it promotes to.
-
- * init.c (build_new): Handle initialization of arrays of builtins
- properly.
-
-Mon Apr 3 15:08:04 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * repo.c: Include config.h to get definitions of bcopy and rindex
- on systems that don't have them (e.g., SVR4).
-
-Mon Apr 3 14:41:55 1995 Mike Stump <mrs@cygnus.com>
-
- * decl2.c (finish_table): Pass NULL_TREE instead of init to
- finish_decl so that it won't try and do error checking on the
- initializer.
-
-Mon Apr 3 10:45:50 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * repo.c (get_base_filename): Analyze COLLECT_GCC_OPTIONS to
- determine whether this compile used -c -o.
- (open_repo_file): Use get_base_filename. Remove the extension.
- (finish_repo): Spit out the values of main_input_filename,
- COLLECT_GCC and COLLECT_GCC_OPTIONS.
-
- * parse.y (structsp): Add TYPENAME_KEYWORD complex_type_name.
-
-Sun Apr 2 23:43:51 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * search.c (compute_access): Don't try to do access control on
- nested types.
-
-Fri Mar 31 10:14:23 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * repo.c: New file to handle things repo.
-
- * pt.c (instantiate_template): Call repo_template_used if the
- definition is accessible.
- (mark_function_instantiated): Split out from
- do_function_instantiation.
- (mark_class_instantiated): Split out from do_type_instantiation.
-
- * parse.y (template_instantiate_once): Call repo_template_used.
-
- * lex.c (lang_init): Call init_repo.
-
- * decl2.c: Handle flag_use_repository.
- (finish_file): Call finish_repo.
-
- * decl.c (start_method): Call repo_template_used if this is a
- template method.
-
- * Makefile.in (CXX_OBJS): Add repo.o.
- (repo.o): Add dependencies.
-
- * Make-lang.in (CXX_SRCS): Add repo.c.
-
- * decl.c (start_function): If DECL_INTERFACE_KNOWN and
- DECL_NOT_REALLY_EXTERN are both set, unset DECL_EXTERNAL.
-
- * typeck.c (build_binary_op_nodefault): Identify the invalid operand
- types used.
-
- * decl.c (duplicate_decls): Propagate DECL_NOT_REALLY_EXTERN.
-
-Thu Mar 30 17:54:42 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (build_binary_op_nodefault): Tidy up use of build_type
- and result_type. When checking for comparison between signed
- and unsigned, use result_type rather than the (possibly shortened)
- type of op0. Also, don't warn about equality comparison of a
- signed operand to an unsigned constant that fits in the signed
- type.
-
- * method.c (do_build_copy_constructor): Reverse
- current_base_init_list after we've built it up.
-
-Thu Mar 30 14:35:18 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (build_throw): Never warn about the value of throw not
- being used.
-
-Thu Mar 30 13:16:54 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (expand_start_catch_block): Check for bad catch parameter
- declarations.
-
-Thu Mar 30 13:06:11 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (finish_function): Only set DECL_NOT_REALLY_EXTERN if
- DECL_EXTERNAL is not already set.
-
-Thu Mar 30 11:26:24 1995 Mike Stump <mrs@cygnus.com>
-
- * method.c (emit_thunk): Let poplevel know that the last level is
- for a function so it can create a BLOCK_NODE and set DECL_INITIAL.
-
-Thu Mar 30 11:15:06 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl2.c (import_export_inline): Don't set DECL_NOT_REALLY_EXTERN
- here.
-
- * decl.c (grokdeclarator): OK, don't abort if we see a decl with
- METHOD_TYPE.
- (finish_function): Set DECL_EXTERNAL and DECL_NOT_REALLY_EXTERN on
- all deferred inlines.
-
-Wed Mar 29 19:35:02 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * cp-tree.h (DECL_THIS_INLINE): New macro.
- (DECL_NOT_REALLY_EXTERN): New macro.
- (DECL_THIS_STATIC): New macro.
-
- * decl.c: Lose all references to current_extern_inline. Break
- inline semantics into DECL_INLINE for actual inlining and
- DECL_THIS_INLINE for the linkage wierdness. Use DECL_THIS_STATIC.
- * decl2.c: Use DECL_NOT_REALLY_EXTERN to indicate that we want to
- emit an inline here. Associated changes.
- * lex.c: Likewise.
- * pt.c: Likewise.
- * typeck.c: Likewise.
-
- * call.c (build_method_call): Don't bother trying to handle inlines
- specially.
- * cvt.c (convert_to_aggr): Likewise.
-
- * pt.c (do_function_instantiation): Handle instantiation of
- public inlines, too.
-
-Wed Mar 29 16:04:25 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (init_exception_processing): Change the interface for
- __throw_type_match and add decl for new rtti matching routine
- __throw_type_match_rtti.
- (build_eh_type): New routine to build a run time descriptor for the
- expression given.
- (expand_start_catch_block): Update to use new calling convention for
- the matcher.
- (expand_throw): Update to use build_eh_type.
-
-Mon Mar 27 07:14:33 1995 Warner Losh <imp@village.org>
-
- * g++.c: Removed __NetBSD__ from conditional.
- Declare strerror if HAVE_STRERROR is defined; otherwise
- declare sys_errlist and sys_nerr.
- (my_strerror): New function.
-
-Tue Mar 28 14:16:35 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * search.c (get_binfo): Don't try to be so clever.
-
- * tree.c (copy_to_permanent): Also suspend_momentary().
-
- * cvt.c (cp_convert_to_pointer): Hand off to convert_fn_pointer even
- if the types are the same.
-
- * decl.c (start_function): Handle extern inlines more like C++ says
- we should.
-
- * init.c (build_member_call): Hand constructor calls off to
- build_functional_cast.
-
- * typeck2.c (build_functional_cast): Use DECL_NESTED_TYPENAME to get
- the name of the type.
-
-Tue Mar 28 13:13:56 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * decl.c (grokdeclarator): Check for the decl returned by
- grokfndecl to be null before using build_decl_attribute_variant.
-
-Mon Mar 27 18:04:41 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * init.c (build_new): Use build_pointer_type instead of
- TYPE_POINTER_TO.
-
-Fri Mar 24 12:11:24 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (build_conditional_expr): Handle pmfs.
- (convert_for_assignment): Fix pmf support.
-
- * cvt.c (convert_fn_ptr): Support !flag_vtable_thunks.
- (cp_convert_to_pointer): Handle pmfs.
- (cp_convert): Pass pmfs to cp_convert_to_pointer.
-
- * typeck.c (common_type): Handle inheritance for pmfs.
-
- * typeck2.c (build_m_component_ref): Do access control.
-
- * typeck.c (comp_target_types): Check for conversion to void *
- before checking trickier conversions.
-
- * decl.c (duplicate_decls): Propagate DECL_ABSTRACT_VIRTUAL_P.
-
- * pt.c (push_tinst_level): Complain if template instantiation depth
- is greater than max_tinst_depth.
-
- * typeck.c (common_type): Assume that we can call common_type to
- unify the target type of a pointer.
-
-Thu Mar 23 00:48:44 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl2.c (finish_file): Don't synthesize methods at
- finish_vtable_prevardecl time. Do synthesize methods that are not
- used, but are public and not external.
-
- * cvt.c (build_type_conversion): Only give an error if for_sure.
-
- * typeck.c (comp_target_types): Only support pointer conversions if
- nptrs > 0.
-
-Wed Mar 22 19:30:15 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * init.c (build_new): Catch use of an initializer list where it
- shouldn't be.
-
-Wed Mar 22 16:21:07 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * init.c (build_new): Wrap alloc_expr in an RTL_EXPR if nelts is
- non-constant.
-
- * decl2.c: temp_name_counter is now public.
-
- * decl.c (struct cp_function): Add temp_name_counter field.
- (push_cp_function_context): Save it.
- (pop_cp_function_context): Restore it.
-
- * typeck.c (common_type): Handle unifying function types, and unify
- unmatched things to void* with a compiler_error, rather than
- silently like before.
-
-Wed Mar 22 15:10:34 1995 Mike Stump <mrs@cygnus.com>
-
- * decl2.c (finish_prevtable_vardecl, finish_vtable_vardecl): Revert
- Brendan's last change and fix latent problem that causes TD entries
- to not come out when the things that need them has yet to be
- expanded.
-
-Wed Mar 22 15:12:00 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (build_binary_op_nodefault, comparison ops): Update type0
- and type1, since we might have changed op0 or op1.
-
-Wed Mar 22 13:33:45 1995 Jason Merrill <jason@python.cygnus.com>
-
- * typeck.c (common_type): Don't mess up templates.
-
-Wed Mar 22 04:56:00 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (common_type): Handle ptms properly. Also handle
- T* -> void*.
- (build_binary_op_nodefault): New variable build_type controls what
- type is given to the expression when it is created. Set this to
- boolean_type_node for comparison ops instead of using result_type.
- (comp_target_types): Allow T * -> void *.
-
- * cvt.c (cp_convert_to_pointer): Do access control when converting
- ptms, too.
-
-Tue Mar 21 17:25:06 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * parse.y (extern_lang_string): Catch use of linkage specs that
- aren't all naming the same language.
-
- * class.c (finish_struct): Delete accidental duplicate code.
-
-Tue Mar 21 14:00:57 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (build_binary_op_nodefault): Disable pedwarns about
- comparing functions and incomplete types.
-
- * decl.c (finish_function): Only unset current_function_decl if
- !nested.
- (duplicate_decls): Last change went too far; we only want to stop
- checking for value/reference ambiguity.
-
-Tue Mar 21 01:26:39 1995 Mike Stump <mrs@cygnus.com>
-
- * gc.c (build_generic_desc): Zap the DECL_SIZE so that we can lay it
- out fresh, as the new type may be larger.
-
-Mon Mar 20 19:01:10 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * expr.c (extract_init): Try to expand the RTL for the
- initialization and figure out what it will look like so we can avoid
- run-time initialization. Disabled for now.
- (extract_scalar_init): Helper for scalar initialization.
- (extract_aggr_init): Helper for aggregate initialization.
-
- * decl.c (duplicate_decls): Don't complain about ambiguous
- declarations.
- (obscure_complex_init): Now returns a tree. Call extract_init if
- we're optimizing and this is a toplevel decl.
- (finish_decl): Update accordingly.
-
- * lex.c (check_newline): If we're just changing files (not pushing
- or popping), update input_file_stack->name.
-
-Mon Mar 20 17:55:04 1995 Mike Stump <mrs@cygnus.com>
-
- * pt.c (type_unification): Only TEMPLATE_DECLs are handled right now
- in the transitive unification code.
-
-Mon Mar 20 16:07:50 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * decl.c (shadow_tag): Don't allow inline, virtual, or explicit on
- non-functions.
- (grokdeclarator): Don't allow friends to be defined in local classes.
-
-Sat Mar 18 04:03:33 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl2.c (finish_prevtable_vardecl): Use DECL_DECLARED_STATIC
- rather than DECL_SAVED_INSNS to decide whether or not this method
- was declared inline.
-
- * method.c (synthesize_method): Turn off DECL_INLINE if
- function_cannot_inline_p thinks we're too large.
-
- * typeck.c (build_indirect_ref): Use build_expr_type_conversion.
-
-Fri Mar 17 17:47:36 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * class.c (instantiate_type): Handle pmfs.
-
- * typeck.c (convert_for_assignment): Check types when assigning one
- pmf to another.
-
- * decl.c (define_label): Fix logic for printing out the name of the
- label in an error message.
-
- * error.c (dump_expr): Support ARRAY_REF.
-
-Fri Mar 17 17:43:02 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * decl2.c (finish_vtable_vardecl): Call build_t_desc here.
- (finish_prevtable_vardecl): Instead of here.
-
-Fri Mar 17 14:40:45 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (expand_static_init): Also use expand_aggr_init if the
- initializer is a TREE_LIST.
- (grokdeclarator): Only pedwarn about extra qualification if -pedantic.
-
- * pt.c (unify): Fix unification of return type.
-
- * expr.c (fixup_result_decl): Use store_expr, rather than
- emit_move_insn, to move the return value into the place where
- callers will expect it.
-
-Thu Mar 16 22:05:25 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * init.c (build_offset_ref): Call assmble_external on functions.
- * typeck.c (build_component_ref): Likewise.
-
-Thu Mar 16 20:28:16 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * decl.c (struct saved_scope): Add members base_init_list and
- member_init_list.
- (push_to_top_level): Save current_base_init_list and
- current_member_init_list to them.
- (pop_from_top_level): Put it back.
-
-Thu Mar 16 19:21:14 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * pt.c (instantiate_template): Call assemble_external.
-
-Thu Mar 16 18:07:54 1995 Brendan Kehoe <brendan@phydeaux.cygnus.com>
-
- * class.c: Include rtl.h, to get NULL_RTX.
- (finish_struct): Also zero out DECL_SAVED_INSNS, to avoid problems
- on hosts with different sizes for each part of the union.
- * tree.c: Also include rtl.h.
- (layout_basetypes): Same change for DECL_SAVED_INSNS.
-
-Thu Mar 16 13:57:36 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * pt.c (unify): Fix array domain unification for 64-bit targets.
-
- * decl2.c (finish_file): Push bizarre type decl before walking the
- vtables the first time.
- (walk_vtables): OK, don't set prev to vars if the vardecl_fn messed
- with TREE_CHAIN (prev).
-
- * init.c (emit_base_init): Use convert_pointer_to_real instead of
- convert_pointer_to when converting to a direct base.
-
-Wed Mar 15 20:26:29 1995 Mike Stump <mrs@cygnus.com>
-
- * pt.c (type_unification): Handle transitive unification better.
-
-Wed Mar 15 13:56:16 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl2.c (walk_vtables): Always set prev to vars.
- (mark_vtable_entries): Call assemble_external on the vtable entries.
-
- * class.c (finish_struct): Set the vtable's size to NULL_TREE before
- calling layout_decl, so that it gets updated properly.
-
- Finally re-enable dynamic synthesis. This time it works.
- * method.c (synthesize_method): Pass decl_function_context (fndecl)
- to {push,pop}_cp_function_context.
- * decl.c (push_cp_function_context): Now takes a tree argument.
- (pop_cp_function_context): Likewise.
- * call.c (build_method_call): Enable synthesis.
- * lex.c (cons_up_default_function): Likewise.
-
-Tue Mar 14 19:14:19 1995 Doug Evans <dje@chestnut.cygnus.com>
-
- * parse.y (setattrs): Chain onto prefix_attributes rather than
- setting it.
-
-Wed Mar 15 13:00:00 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * decl.c (pushdecl): Check if the type of the VAR_DECL is an
- error_mark_node before trying to read TYPE_LANG_SPECIFIC.
-
-Mon Mar 13 21:00:28 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * decl.c (grokdeclarator, case ARRAY_REF): Wrap the exp with fold,
- and convert the size and integer_one_node to the index type.
-
-Mon Mar 13 08:01:02 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (get_member_function_from_ptrfunc): Save the instance
- argument, and tack it onto the front of the COND_EXPR to make the
- semantics come out right. Grab the instance argument from
- '*instance_ptrptr', rather than having it passed in separately.
-
- * various: Change various consed-up comparison operations to have
- boolean type. Remove the instance argument in calls to
- get_member_function_from_ptrfunc.
-
- * error.c (dump_expr): Dump true and false as "true" and "false".
-
- * decl2.c (finish_file): Also set DECL_STATIC_FUNCTION_P on the
- global init function.
-
- * decl.c (finish_function): Only set DECL_EXTERNAL here if the
- inline function is public.
-
-Sat Mar 11 00:58:03 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * init.c (is_friend): Be more careful about checking
- DECL_CLASS_CONTEXT on non-member functions.
-
- * decl2.c (finish_vtable_vardecl): Don't bother calling
- assemble_external here.
- (prune_vtable_vardecl): New function that just splices out the
- vtable decl from the top-level decls.
- (import_export_inline): Unset DECL_EXTERNAL at first.
- (finish_file): Don't bother calling assemble_external here. Do
- splice out all of the vtables.
-
-Fri Mar 10 14:42:29 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (finish_function): If we're not emitting the function yet,
- call assemble_external for it.
-
- * decl2.c (finish_prevtable_vardecl): Don't call mark_vtable_entries
- here.
- (finish_vtable_vardecl): Don't do the linkage deduction thing here.
- Also don't splice out the current vtable if it is unused.
- (finish_file): Move the second walk_vtables and the synthesis check
- inside the 'reconsider' loop. Move thunk emission after the
- 'reconsider' loop.
-
-Thu Mar 9 16:28:16 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * pt.c (tsubst): Don't bother calling cp_build_type_variant, since it
- was passing bogus values for readonly and volatile from the original
- template decl, not the resultant type of the tsubst call.
-
- * class.c (duplicate_tag_error): Use cp_error_at to point out the
- previous definition of the tag.
-
-Thu Mar 9 10:46:17 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (start_function): Clear base_init_insns and protect_list.
- (struct cp_function): Add base_init_insns field.
- (push_cp_function_context): Also save base_init_insns.
- (pop_cp_function_context): Also restore base_init_insns.
-
-Wed Mar 8 13:31:44 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * init.c (member_init_ok_or_else): Check for initializing a static
- member here.
- (emit_base_init): Instead of here.
-
-Tue Mar 7 16:03:26 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * call.c (build_method_call): Disable synthesis as needed.
- * lex.c (cons_up_default_function): Likewise.
-
-Tue Mar 7 10:14:29 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * parse.y: New rules to allow attributes in a prefix position.
- (prefix_attributes): New variable. Pass it into cplus_decl_attributes.
- (setattr): New rule.
- (reserved_declspecs, declmods): Catch attributes here.
- * decl2.c (cplus_decl_attributes): Add PREFIX_ATTRIBUTES argument.
- * decl.c (duplicate_decls): Pass DECL_MACHINE_ATTRIBUTES to
- descendent typedef.
- (grokdeclarator): Added code to support machine attributes.
- * Makefile.in (stamp-parse): Expect 5 shift/reduce failures.
-
-Mon Mar 6 15:07:02 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * call.c (build_method_call): Don't synthesize methods outside of a
- function.
-
- Make base initialization more re-entrant so that synthesis on the
- fly will work (and, eventually, template instantation on the fly).
- * init.c (sort_member_init): Don't bother with members that can't be
- initialized. Reorganize a bit. Don't initialize base members here.
- (sort_base_init): New function, like sort_member_init, but for base
- classes. Steals some code from emit_base_init.
- (emit_base_init): Simplify. Call sort_{member,base}_init before
- doing any initialization, so we don't have to save
- current_{member,base}_init_list in push_cp_function_context.
- (expand_aggr_vbase_init_1): Adjust for sort_base_init.
- (expand_aggr_vbase_init): Simplify.
- * decl.c (struct cp_function): Add protect_list field.
- (push_cp_function_context): Also save protect_list.
- (pop_cp_function_context): Also restore protect_list.
- * call.c (build_method_call): Enable synthesis at point of call.
- * lex.c (cons_up_default_function): Likewise.
-
- * parse.y: Turn -ansi checks back into -pedantic checks.
-
- * init.c (build_new): Fix -fcheck-new for array new.
-
-Sat Mar 4 15:55:42 1995 Fergus Henderson <fjh@cs.mu.oz.au>
-
- * typeck.c (build_compound_expr): warn if left-hand operand of
- comma expression has no side-effects.
-
-Fri Mar 3 15:16:45 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * parse.y (primary): Change 'object qualified_id *' rules to 'object
- overqualified_id *'.
-
-Fri Mar 3 12:48:17 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * parse.y (unary_expr): Catch doing sizeof an overloaded function.
- Make the error look the same as the one we issue in c_sizeof.
-
- * typeck.c (build_binary_op_nodefault): Give an error for trying
- to compare a pointer-to-member to `void *'.
-
-Fri Mar 3 11:28:50 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (build_unary_op): Handle bool increment with smoke and
- mirrors here, rather than in expand_increment where it belongs,
- because Kenner doesn't agree with me.
-
-Fri Mar 3 00:08:10 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * decl.c (grokparms): Catch a PARM_DECL being used for a default
- argument as well.
-
-Thu Mar 2 20:05:54 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * init.c (build_new): Don't allow new on a function type.
-
- * parse.y (primary): Avoid a crash when seeing if the arg is of
- the same type as that given for the typespec in an explicit dtor call.
-
-Thu Mar 2 00:49:38 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (finish_function): Change test for calling
- mark_inline_for_output.
-
-Wed Mar 1 11:23:46 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (build_modify_expr): Complain if
- build_default_binary_type_conversion fails.
-
- * init.c (expand_default_init): Handle arguments of unknown type
- properly.
-
- * cvt.c (build_expr_type_conversion): Only complain about ambiguity
- if 'complain'.
- * various: Pass 'complain'.
-
- * typeck.c (comptypes): Be more picky about comparing UPTs.
-
-Wed Mar 1 11:03:41 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * decl.c (grokdeclarator): If declarator is null, say that the
- type used has an incomplete type.
-
-Wed Mar 1 10:06:20 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * pt.c (instantiate_template): Copy the template arguments to the
- permanent_obstack. Also use simple_cst_equal to compare them when
- looking for a previous instantiation.
-
- * tree.c (make_deep_copy): Support copying INTEGER_TYPEs (assuming
- they are array domain types).
-
-Tue Feb 28 23:24:55 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * cp-tree.h: Define WANT_* constants for passing to
- build_expr_type_conversion.
- * cvt.c (build_expr_type_conversion): New function to build
- conversion to one of a group of suitable types.
- (build_default_binary_type_conversion): Use it.
- * decl2.c (grok_array_decl): Likewise.
- * typeck.c (build_unary_op): Likewise.
- (build_array_ref): Tidy up a bit.
- (build_binary_op): Likewise.
-
-Tue Feb 28 19:57:31 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * decl.c (grokdeclarator): Don't allow decl of an argument as `void'.
-
-Tue Feb 28 17:23:36 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * parse.y (typed_declspecs1): Add 'typespec reserved_typespecquals
- reserved_declspecs' rule.
-
- * parse.y (expr_or_declarator): Remove notype_qualified_id rule.
- (direct_notype_declarator): Likewise.
- (complex_direct_notype_declarator): Add notype_qualified_id rule.
-
- * lex.c (real_yylex): Handle :> digraph properly.
-
-Tue Feb 28 12:26:29 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * decl.c (grokdeclarator): Check if it's a friend, not if it's
- non-virtual, that's being initialized. Move the check up to
- before FRIENDP would get cleared. Catch an unnamed var/field
- being declared void. Say just `field' instead of `structure field'
- in the error message. Only go for the operator name if DECLARATOR
- is non-null.
-
-Tue Feb 28 00:08:01 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (start_function): Complain about abstract return type.
- (grokdeclarator): Complain about declaring constructors and
- destructors to be const or volatile. Complain about declaring
- destructors to be static.
-
- * pt.c (uses_template_parms): Handle pmfs.
-
- * decl.c (grokdeclarator): Don't call variable_size for array bounds
- that only depend on template constant parameters.
-
-Mon Feb 27 15:38:16 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * error.c (dump_decl): Only look to see if it's a vtable if we
- actually have a name to check out.
-
-Mon Feb 27 13:37:53 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * cvt.c (convert_to_aggr): Lose misleading shortcut.
-
-Sun Feb 26 17:27:32 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * decl.c (set_nested_typename): Always set DECL_IGNORED_P,
- not just for dwarf.
-
-Sun Feb 26 00:10:18 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * decl.c (grokdeclarator): Don't allow a static member to be
- declared `register'.
-
- * init.c (make_friend_class): Move up to a pedwarn for the warning
- about a class declaring friends with itself.
-
- * decl.c (grokdeclarator): You can't do `volatile friend class foo'
- or `inline friend class foo'. Only try to make a friend out of
- TYPE if we didn't already reset it to integer_type_node.
-
-Sat Feb 25 22:32:03 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * decl.c (grokdeclarator): Don't allow initialization of a
- non-virtual function.
-
- * decl.c (start_function): Do a pedwarn if we're changing `main'
- to have an int return type.
-
-Sat Feb 25 00:02:05 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (build_modify_expr): Handle simple assignment from
- TARGET_EXPRs by building up an RTL_EXPR to force expansion. Whew.
-
-Fri Feb 24 18:27:14 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * decl.c (grokdeclarator): Also don't allow virtual outside of a
- class decl for a scope method definition performed at global binding.
-
- * init.c (build_offset_ref): Don't allow creation of an OFFSET_REF
- of a bitfield.
-
- * decl.c (grokdeclarator): Don't allow a const to be declared mutable.
-
- * typeck.c (build_binary_op): Return an error_mark_node if either
- one of the args turned into an error_mark_node when we tried to
- use default_conversion.
-
- * typeck.c (build_unary_op): Forbid using postfix -- on a bool.
-
- * decl.c (grokdeclarator): Allow `signed' and `unsigned' to be
- used on `__wchar_t'.
-
-Fri Feb 24 13:59:53 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (end_protect_partials): Do it the right way.
-
-Wed Feb 22 15:42:56 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (build_binary_op_nodefault): Upgrade warning about
- comparing distinct pointer types to pedwarn.
-
- * typeck2.c (digest_init): Cope with extra braces.
-
- * typeck.c (build_binary_op_nodefault): Use tree_int_cst_sgn instead
- of INT_CST_LT (..., interger_zero_node).
-
-Wed Feb 22 14:45:52 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * except.c [!TRY_NEW_EH] (end_protect_partials): Define dummy
- function for systems that don't have EH.
-
-Tue Feb 21 19:18:31 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * call.c (can_convert_arg): Like can_convert, but takes an arg as
- well.
-
- * pt.c (type_unification): Allow implicit conversions for parameters
- that do not depend on template parameters.
-
-Tue Feb 21 18:43:48 1995 Douglas Rupp <drupp@cs.washington.edu>
-
- * Make-lang.in, config-lang.in: ($exeext): New macro.
- * Make-lang.in: Try a "cp" if "ln" fails.
- * cp-tree.h (decl_attributes): Added argument.
- * decl2.c (cplus_decl_attribute): Add arg to decl_attributes.
- * cp/g++.c: Added #ifdefs for sys/file.h and process.h for NT.
- Modified spawnvp to have to correct number of arguments for OS/2, NT.
-
-Tue Feb 21 18:36:55 1995 Mike Stump <mrs@cygnus.com>
-
- * decl.c (finish_function): Add calls to end_protect_partials to end
- the exception region that protects constructors so that partially
- constructed objects can be partially destructed when the constructor
- throws an exception.
- * init.c (perform_member_init, sort_member_init, emit_base_init):
- Added support for partially constructed objects.
- * init.c (build_partial_cleanup_for): New routine to do partial
- cleanups of a base class.
- * decl2.c (finish_file): Move the emitting of the exception table
- down, after we emit all code that might have exception regions in
- them.
- * except.c (end_protect_partials, might_have_exceptions_p): New
- routines.
- (emit_exception_table): Always output table if called.
- * cp-tree.h (protect_list, end_protect_partials,
- might_have_exceptions_p, emit_exception_table): Added.
-
-Tue Feb 21 16:05:59 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * gc.c (build_typeid): Pass a NULL_TREE, not the bogus, unused
- address of a local variable.
- * class.c (build_vfn_ref): Only try to build the PLUS_EXPR if we
- were given a non-null PTR_TO_INSTPTR.
-
-Tue Feb 21 01:53:18 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (duplicate_decls): Always lay out the merged decl.
-
- * decl2.c (finish_vtable_vardecl): Don't do vtable hack on templates.
- (finish_prevtable_vardecl): Likewise.
-
- * method.c (synthesize_method): Set interface_{unknown,only}
- according to the settings for our class, not the file where it comes
- from.
-
-Sat Feb 18 12:26:48 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c: Handle systems that define __i386__ but not __i386.
-
-Fri Feb 17 15:31:31 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl2.c (reparse_decl_as_expr): Support being called without a
- type argument.
-
- * parse.y (primary): Add '(' expr_or_declarator ')'. Adds 4 r/r
- conflicts. Sigh.
-
-Fri Feb 17 12:02:06 1995 Mike Stump <mrs@cygnus.com>
-
- * parse.y (template_def, fndef, fn.def1, return_init, condition,
- initdcl0, initdcl, notype_initdcl0, nomods_initdcl0,
- component_decl_1, after_type_component_declarator0,
- notype_component_declarator0, after_type_component_declarator,
- notype_component_declarator, after_type_component_declarator,
- full_parm, maybe_raises, exception_specification_opt): Fix up,
- include exception_specification_opt maybeasm maybe_attribute and
- maybe_init if missing. Rename maybe_raises to
- exception_specification_opt to match draft wording. Use maybe_init
- to simplify rules.
-
-Fri Feb 17 01:54:46 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * init.c (build_new): Set TREE_NO_UNUSED_WARNING on COMPOUND_EXPRs
- built for news of scalar types.
-
-Thu Feb 16 17:48:28 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (build_binary_op_nodefault): Update code for warning
- about signed/unsigned comparisons from C frontend. Realize that the
- code in the C frontend is, if anything, even more bogus. Fix it.
- (build_binary_op): Undo default_conversion if it wasn't useful.
-
- * typeck.c (build_unary_op, ADDR_EXPR): Lose bogus special case for
- PRE*CREMENT_EXPR.
-
- * decl2.c (import_export_vtable): Don't try the vtable hack
- if the class doesn't have any real non-inline virtual functions.
- (finish_vtable_vardecl): Don't bother trying to find a non-inline
- virtual function in a non-polymorphic class.
- (finish_prevtable_vardecl): Likewise.
-
- * decl2.c (import_export_vtable): Use and set DECL_INTERFACE_KNOWN.
-
- * cp-tree.h (DECL_INTERFACE_KNOWN): Use DECL_LANG_FLAG_5.
-
- * init.c (expand_virtual_init): Always call assemble_external.
-
- * class.c (build_vfn_ref): Always call assemble_external.
- (build_vtable): Always call import_export_vtable.
- (prepare_fresh_vtable): Likewise.
- (add_virtual_function): Don't bother setting TREE_ADDRESSABLE.
-
-Thu Feb 16 03:28:49 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * class.c (finish_struct): Use TYPE_{MIN,MAX}_VALUE to determine
- whether an enumerated type fits in a bitfield.
-
-Wed Feb 15 15:38:12 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * class.c (grow_method): Update method_vec after growing the class
- obstack.
-
-Wed Feb 15 13:42:59 1995 Mike Stump <mrs@cygnus.com>
-
- * parse.y (handler_seq): Push a level for the catch parameters.
-
-Wed Feb 15 12:42:57 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * init.c (emit_base_init): Update BINFO_INHERITANCE_CHAIN on my
- bases, in case they've been clobbered.
-
-Wed Feb 15 12:07:29 1995 Mike Stump <mrs@cygnus.com>
-
- * class.c (finish_base_struct): Set up BINFO_INHERITANCE_CHAIN here,
- so that one day it will always be valid.
- * tree.c (propagate_binfo_offsets, layout_vbasetypes): Likewise.
-
- * cp-tree.h (copy_binfo): Removed, unused.
- * tree.c (copy_binfo): Likewise.
-
-Wed Feb 15 00:05:30 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * init.c (build_new): Save the allocation before calling
- expand_vec_init on it.
-
- * decl.c (finish_enum): The TYPE_PRECISION of the enum type mush
- match the TYPE_PRECISION of the underlying type for constant folding
- to work.
-
-Tue Feb 14 15:31:25 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (push_eh_entry, expand_start_all_catch,
- expand_leftover_cleanups, expand_end_catch_block): Keep track of
- the context in which the exception region occurs.
- (build_exception_table): If the region was not output, don't output
- the entry in the eh table for it.
-
-Tue Feb 14 02:15:43 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * init.c (expand_default_init): Only use a previous constructor call
- if it's a call to our constructor. Does the word "Duh" mean
- anything to you?
-
- * decl.c (grokparms): Fine, just don't call
- convert_for_initialization at all. OK? Happy now?
-
-Mon Feb 13 02:23:44 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * cp-tree.h (CLASSTYPE_FIRST_CONVERSION): Make sure that the class
- method vector has a second element before returning it.
-
- * decl.c (grokparms): Don't strip REFERENCE_TYPE before calling
- convert_for_initialization.
-
-Sun Feb 12 03:57:06 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (build_modify_expr): Compare function name to
- constructor_name (current_class_type) instead of current_class_name.
-
- * decl.c (grokparms): Don't do anything with the return value of
- convert_for_initialization.
-
- * error.c (dump_decl): Also dump_readonly_or_volatile on the decl.
-
- * decl.c (duplicate_decls): Tweak error message.
-
- * typeck.c (build_const_cast): Implement checking.
- (build_reinterpret_cast): Implement some checking.
-
- * cp-tree.h (CONV_FORCE_TEMP): Require a new temporary when
- converting to the same aggregate type.
- (CONV_STATIC_CAST): Include it.
- (CONV_C_CAST): Likewise.
- * cvt.c (convert_force): Use CONV_C_CAST instead of CONV_OLD_CONVERT.
- (cp_convert): Only force a new temporary if CONV_FORCE_TEMP.
-
-Fri Feb 10 16:18:52 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (build_c_cast): Use non_lvalue to tack something on
- where necessary.
-
- * decl.c (auto_function): Now a function.
- * except.c (init_exception_processing): terminate, unexpected,
- set_terminate, and set_unexpected have C++ linkage.
-
- * typeck.c (build_unary_op, TRUTH_NOT_EXPR): Use convert instead of
- truthvalue_conversion for converting to bool, as it handles
- user-defined conversions properly.
- (condition_conversion): Likewise.
-
- * except.c (expand_throw): Don't call convert_to_reference.
- Pass the correct parameters to build_new.
-
- * method.c (do_build_assign_ref): Don't use access control when
- converting to a base reference here.
- (do_build_copy_constructor): Or here.
-
- * init.c (build_new): Unset TREE_READONLY on the dereferenced
- pointer before assigning to it.
-
- * decl.c (maybe_build_cleanup): Don't bother stripping const here.
-
- * decl2.c (delete_sanity): You can now delete pointer to const.
-
-Fri Feb 10 13:28:38 1995 Jason Merrill <jason@python.cygnus.com>
-
- * decl.c (finish_function): Don't rely on actual parameters being
- evaluated left-to-right.
- * except.c (expand_end_catch_block): Likewise.
-
-Fri Feb 10 00:52:04 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * tree.c (real_lvalue_p): Like lvalue_p, but class temps aren't
- considered lvalues.
- * cvt.c (convert_to_reference): Use real_lvalue_p instead of
- lvalue_p.
-
- * cvt.c (build_type_conversion_1): Don't call convert on aggregate
- types.
- (convert_to_reference): Fix erroneous text substitution.
-
- * typeck2.c (initializer_constant_valid_p): Update from C frontend.
- Add new argument to all callers.
-
- * typeck.c (convert_arguments): Check for error_mark_node before
- trying to do anything with the actual parameter.
-
- * typeck.c (condition_conversion): Build up a CLEANUP_POINT_EXPR and
- fold it.
- (bool_truthvalue_conversion): Remove. Fix all callers to call
- truthvalue_conversion instead.
- (various): Fold CLEANUP_POINT_EXPRs.
-
- * parse.y (conditions): Call condition_conversion rather than
- building up a CLEANUP_POINT_EXPR.
-
- * pt.c (end_template_decl): Don't warn_if_unknown_interface here
- under -falt-external-templates.
-
-Thu Feb 9 05:24:10 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * init.c (build_new): Complain about new of const type without
- initializer. Other cleanup.
-
- * call.c (compute_conversion_costs): Don't call
- build_type_conversion with a reference type; convert to the target
- type and check its lvaluetude.
- * cvt.c (convert_to_reference): Likewise.
-
- * cvt.c (build_type_conversion_1): There will never be any need to
- dereference references here now.
-
-Thu Feb 9 00:37:47 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (expand_builtin_throw): Make sure we only `use' the
- value of return_val_rtx.
-
-Wed Feb 8 15:45:55 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * parse.y (structsp): Don't complain about declaring a type being
- defined to be a friend.
-
- * decl2.c (warn_if_unknown_interface): Note the template in question
- and the point of instantiation, for -falt-external-templates.
- * lex.c (reinit_parse_for_method): Pass the decl to
- warn_if_unknown_interface.
- * pt.c (instantiate_template): Likewise.
- (end_template_decl): Likewise.
-
- * decl.c (set_nested_typename): Set IDENTIFIER_TYPE_VALUE on the
- nested name again, to make local classes work a bit better.
-
- * typeck.c (build_function_call_real): Dereference reference after
- checking for incomplete type.
-
- * init.c (build_new): Accept new of const and volatile types.
-
-Wed Feb 8 14:04:16 1995 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (grokdeclarator): Fix error message.
-
-Wed Feb 8 03:16:15 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (convert_for_initialization): Do bash arrays when
- converting to a reference to non-array.
-
-Tue Feb 7 15:50:33 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * cvt.c (cp_convert): Don't call convert_to_reference, or
- automatically dereference references. Do pass reference conversions
- to cp_convert_to_pointer.
- (cp_convert_to_pointer): Support references.
-
- * call.c (build_method_call): Don't build up a reference to the
- parameter here; let build_overload_call handle that.
-
- * typeck.c (build_c_cast): Call convert_to_reference directly if
- converting to a reference type.
- * method.c (do_build_copy_constructor): Likewise.
- * method.c (do_build_copy_constructor): Likewise.
- (do_build_assign_ref): Likewise.
-
- * call.c (build_method_call): Dereference a returned reference.
- * typeck.c (build_function_call_real): Likewise.
-
- * decl.c (xref_basetypes): Check for unions with basetypes here.
- (xref_tag): Instead of here.
-
- * pt.c (process_template_parm): Template type parm decls are
- artificial.
-
-Mon Feb 6 04:32:09 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * parse.y (typed_declspecs): Add missing semicolon.
- (do_xref_defn): Resurrect.
- (named_class_head_sans_basetype): Move template specialization
- definition cases to named_class_head_sans_basetype_defn.
-
- * decl2.c (grokfield): Call pushdecl_class_level after setting the
- TYPE_NAME, not before.
-
-Sun Feb 5 02:50:45 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * call.c (convert_harshness): Don't call sorry here. Don't allow
- conversions between function pointer types if pedantic.
-
- * pt.c (overload_template_name): Pass globalize=1 to xref_tag.
-
- * lex.c (cons_up_default_function): Use the full name for the return
- type of op=.
-
- * decl.c (set_nested_typename): Don't worry about anonymous types,
- as they already have a unique name.
- (pushdecl): Remove redundant set_nested_typename
- (xref_tag): Split out base handling into xref_basetypes.
-
- * cp-tree.h (TYPE_INCOMPLETE): New macro; TEMPLATE_TYPE_PARMs are
- not considered incomplete even though their definition is unknown.
-
- * decl.c (xref_defn_tag): Lose.
- (xref_tag): xref_next_defn = ! globalize.
- (pushdecl): Don't set DECL_NESTED_TYPENAME on artificial decls. The
- ones that should have it set will have it set by pushtag.
- (pushdecl_class_level): Likewise.
- (pushtag): Tidy up a bit.
- (set_nested_typename): Push a decl for the nested typename from
- here, rather than from xref_defn_tag.
-
- * parse.y (do_xref): Lose.
- (named_class_head): If we see 'class foo:' we know it's a
- definition, so don't worry about base lists for non-definitions.
-
- * pt.c (push_template_decls): Template parm decls are artificial.
-
- * decl.c (duplicate_decls): Restore check for qualifier
- disagreement for non-functions.
- (decls_match): Remove check for qualifier disagreement.
-
-Fri Feb 3 14:58:58 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (grok_reference_init): Convert initializer from
- reference.
- * typeck.c (convert_for_initialization): Likewise.
-
- * decl.c (duplicate_decls): Propagate DECL_NESTED_TYPENAME.
-
- * cvt.c (cp_convert): Don't convert to the same class type by just
- tacking on a NOP_EXPR.
- (convert_to_reference): Use comp_target_types instead of comptypes
- so that we don't allow conversions two levels down.
-
-Thu Feb 2 15:07:58 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * class.c (build_vbase_path): Bash types to make the backend happy.
- * cvt.c (build_up_reference): Bash the types bashed by
- build_vbase_path to be reference types instead of pointer types.
- (convert_to_reference): Likewise.
-
- * typeck.c (build_c_cast): Don't strip NOPs if we're converting to a
- reference type.
-
- * parse.y (structsp): Put back error for 'struct B: public A;'.
-
-Wed Feb 1 23:02:06 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c: Add support for mips systems that don't define __mips
- but do define mips, like Ultrix.
-
-Wed Feb 1 22:39:07 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c: Add support for exception handling on the Alpha.
-
-Wed Feb 1 10:12:14 1995 Mike Stump <mrs@cygnus.com>
-
- * decl2.c (finish_file): Fix bug in Jan 31st change.
-
-Tue Jan 31 16:59:15 1995 Gerald Baumgartner <gb@lorenzo.cs.purdue.edu>
-
- * sig.c (build_signature_pointer_or_reference_type): Don't set
- IS_AGGR_TYPE for signature pointers/reference so expand_default_init
- doesn't expect to find a copy constructor.
- * call.c (build_method_call): Treat signature pointers/reference
- as if IS_AGGR_TYPE were set.
-
-Tue Jan 31 13:28:56 1995 Mike Stump <mrs@cygnus.com>
-
- * gc.c (get_typeid): Pawn off error messages to build_t_desc.
- (build_t_desc): Inform the user here if they try and build
- with -frtti and don't include <typeinfo.h>.
-
- * decl2.c (finish_prevtable_vardecl): Support rescanning.
- (finish_file): Move finish_prevtable_vardecl up to before the global
- initializers are done as tdecls are initialized in the global
- initializer. Also Pick up any new tdecls or vtables needed by
- synthesized methods.
-
- * class.c (finish_struct): Simplify. We have to do rtti scanning at
- end, so we might as well do all of it there.
-
-Tue Jan 31 05:35:02 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * call.c (build_method_call): Fix -fthis-is-variable for 32-bit
- targets, too.
-
-Tue Jan 31 00:11:04 1995 Mike Stump <mrs@cygnus.com>
-
- * decl2.c (finish_prevtable_vardecl): New routine, mostly split from
- finish_vtable_vardecl. It has the first half functionality from
- that routine.
- * decl2.c (finish_vtable_vardecl): Update to not include stuff not
- in finish_prevtable_vardecl.
- * decl2.c (finish_file): Call finish_prevtable_vardecl.
- * gc.c (build_generic_desc): Allow it to be called when not at the
- global binding layer, but behave as if we were.
- (build_t_desc): Rearrange a bit so that it really works and is
- easier to follow.
- * class.c (finish_struct): Don't decide on tdecls here, as we have
- to wait until the end of the file in general to decide whether or
- not they come out.
-
-Mon Jan 30 01:00:40 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * init.c (build_delete): Check access to operator delete before
- calling the destructor.
- * method.c (build_opfncall, DELETE_EXPR): build_method is allowed to
- return error_mark_node.
- * call.c (build_method_call): Use the one-argument op delete even if
- it's an error.
-
- * init.c (build_new): Fix -fthis-is-variable support.
- * call.c (build_method_call): Likewise.
-
- * call.c (convert_harshness): Make conversion from a pointer to bool
- worse than conversion to another pointer.
-
-Sat Jan 28 16:46:10 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * init.c (build_new): Check new return value if -fcheck-new.
-
- * lex.c (check_newline): Clear end_of_file when we're done, too.
-
-Sat Jan 28 10:38:39 1995 Mike Stump <mrs@cygnus.com>
-
- * decl2.c (finish_vtable_vardecl): Make rtti TD tables follow
- vtables whereever they go.
-
- * gc.c (build_t_desc): Remove old way of setting it up, as it wasn't
- right.
-
-Sat Jan 28 09:10:44 1995 Mike Stump <mrs@cygnus.com>
-
- * decl2.c (finish_vtable_vardecl): Now set the
- interface/implementation of vtables on the first virtual function,
- if one exists, otherwise we use the old method. This is a major win
- in terms of cutting down the size of objects and executables in
- terms of text space and data space. Now most of the savings that
- #pragma interface/implementation gives is automatic in a fair number
- of cases.
-
-Sat Jan 28 04:57:33 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (grokdeclarator): Discard the template parameters in a
- template constructor declaration so that the function is always
- named constructor_name (ctype).
-
- * lex.c (check_newline): Use ungetc to put back the character before
- calling HANDLE_PRAGMA.
-
-Fri Jan 27 17:23:47 1995 Mike Stump <mrs@cygnus.com>
-
- * decl2.c (check_classfn): If the cname is T<int> and fn_name is T,
- make sure we still match them.
-
-Fri Jan 27 16:32:10 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * parse.y: Add END_OF_LINE token.
-
- * lex.c (check_newline): Set linemode when we see a # directive, and
- unset it when we're done. Turn all 'return's into 'goto skipline'.
- Fix all uses of '\n', since we won't see it anymore. Put back the
- character we read before checking for a sysv or target pragma.
- (real_yylex): If we see an EOF in linemode, return END_OF_LINE.
- (handle_sysv_pragma): Don't look at the input stream; quit when we
- see an END_OF_LINE token.
-
- * input.c (getch): Return EOF if we're in line mode and at the end
- of a line.
- (put_back): Don't put back an EOF.
-
-Thu Jan 26 19:26:34 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (expand_throw): Do the newing of the exception object
- before we load the type descriptor or the address so that we don't
- wipe any of the values out.
-
-Thu Jan 26 19:20:00 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (init_exception_processing): Don't use r12 on the rs6000.
-
-Tue Jan 24 16:36:31 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (grokparms): Don't try to build up a reference at this point.
-
- * typeck2.c (build_functional_cast): Don't assume that a NOP_EXPR
- will suffice to convert from integer_zero_node.
-
-Wed Jan 25 15:02:09 1995 David S. Miller <davem@nadzieja.rutgers.edu>
-
- * class.c (instantiate_type): Change error message text.
- * typeck2.c (store_init_value): Likewise.
-
-Mon Jan 23 21:57:14 1995 Mike Stump <mrs@cygnus.com>
-
- * pt.c (tsubst): When we copy a node, don't forget to copy
- TREE_CHAIN, we use it later.
-
-Mon Jan 23 03:33:47 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (convert_for_assignment): Initialize variable before use.
-
-Fri Jan 20 01:17:59 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * g++.c (main): Link with both libstdc++ and libg++ if called as
- something ending with "g++", otherwise only libstdc++. Move -lm to
- the end of the line.
-
-Thu Jan 19 15:43:11 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * call.c (build_method_call): Don't mess with 'this' before calling
- compute_conversion_costs.
-
-Wed Jan 18 15:40:55 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * search.c (get_matching_virtual): Give line number for previous
- declaration.
-
- * call.c (convert_harshness): Handle conversions to references
- better.
-
- * cvt.c (build_up_reference): OK, handle {MIN,MAX}_EXPR *properly*.
-
-Wed Jan 18 15:21:38 1995 Mike Stump <mrs@cygnus.com>
-
- * class.c (instantiate_type): Use DECL_CHAIN to walk lists instead,
- as the TREE_CHAIN for methods will take us to the next differently
- named function, DECL_CHAIN won't.
-
-Wed Jan 18 14:26:59 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * tree.c (lvalue_p): Handle {MIN,MAX}_EXPR.
-
- * decl2.c (lang_decode_option): -Wall implies -Wparentheses.
- warn_parentheses defaults to 0.
-
- * decl.c (grokparms): Put back call to require_instantiated_type.
-
-Tue Jan 17 19:56:15 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c (exception_section): Use the data section on the rs6000.
- Change calling convention for named_section.
-
-Wed Jan 17 18:20:57 1994 Fergus Henderson <fjh@munta.cs.mu.oz.au>
-
- * cp-tree.h : Make if (x=0) warn with wall
- * parse.y : Make if (x=0) warn with wall
-
-Tue Jan 17 14:12:00 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (BOOL_TYPE_SIZE): BITS_PER_WORD if SLOW_BYTE_ACCESS,
- BITS_PER_UNIT otherwise.
-
- * search.c (get_matching_virtual): Don't check the binfo if the
- types are the same.
-
- * cvt.c (cp_convert): Just call truthvalue_conversion to convert to
- bool.
-
-Mon Jan 16 13:28:48 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * various: Use boolean_type_node, boolean_true_node,
- boolean_false_node.
-
- * search.c (get_matching_virtual): Allow covariant returns that
- don't require pointer adjustment.
-
- * typeck.c (build_conditional_expr): Don't call default_conversion
- on ifexp.
-
- * cvt.c (build_up_reference): Handle MIN_EXPR and MAX_EXPR.
-
- * decl.c (grokdeclarator): Upgrade warning about &const to pedwarn.
-
-Sun Jan 15 22:17:32 1995 David Binderman <dcb@lovat.fmrco.COM>
-
- * pt.c (do_function_instantiation): Free targs once we're done.
-
-Sun Jan 15 22:17:32 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (BOOL_TYPE_SIZE): Defaults to BITS_PER_WORD.
- (init_decl_processing): Use BOOL_TYPE_SIZE instead of CHAR_TYPE_SIZE
- for bool.
-
-Sat Jan 14 05:33:55 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl2.c (finish_file): We need to mess up if there are any
- variables in the list, not just if there is one with a constructor.
-
-Fri Jan 13 14:42:55 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (duplicate_decls): Propagate DECL_STATIC_{CON,DE}STRUCTOR.
- (finish_function): Handle DECL_STATIC_{CON,DE}STRUCTOR.
- (finish_function): Trust rest_of_compilation.
-
- * decl2.c (finish_file): Also call functions designated as static
- constructors/destructors.
-
- * decl.c (grokdeclarator): Allow access decls of operator functions.
- (grokparms): Only do convert_for_initialization if the initializer
- has a type.
- (duplicate_decls): Put back push_obstacks_nochange call.
-
- * lex.c (real_yylex): Downgrade complaint about the escape sequence
- being too large from pedwarn to warning.
-
- * decl.c (grokdeclarator): Don't complain about long long in system
- headers.
-
- * lex.c (real_yylex): Handle digraphs.
-
-Thu Jan 12 12:17:24 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (init_decl_processing): -f{no-,}strict-prototype only
- affects C linkage declarations now.
-
- * typeck.c (comp_target_types): Grok simple contravariant conversions.
- (common_type): t1 and t2 are interchangeable.
-
- * various: Test return value of comp_target_types differently in
- different places; it now returns -1 for a contravariant conversion
- (which is fine in symmetric cases).
-
- (common_type): Prefer long double to double even when
- they have the same precision.
-
- * decl.c (grokparms): Call convert_for_initialization to check
- default arguments.
-
- * init.c (build_new): void_type_node has a size (of 0).
-
- * decl.c (decls_match): Also check for agreement of TREE_READONLY
- and TREE_THIS_VOLATILE.
- (push_class_level_binding): Properly handle shadowing of
- nested tags by fields.
-
- * search.c (dfs_pushdecls): Likewise.
-
- * decl2.c (finish_file): Don't second-guess self-initialization.
-
- * cvt.c (convert_to_reference): Work with expr directly, rather than
- a copy.
-
- * decl.c (push_overloaded_decl): Only shadow artificial TYPE_DECLs.
-
- * init.c (add_friend): Downgrade duplicate friend message from
- pedwarn to warning.
-
- * decl.c (duplicate_decls): Push obstacks before calling common_type.
-
-Thu Jan 12 17:15:21 1995 Michael Ben-Gershon <mybg@cs.huji.ac.il>
-
- * except.c (push_eh_entry): set LABEL_PRESERVE_P flag for
- exception table labels.
- (expand_start_all_catch): Likewise.
- (expand_leftover_cleanups): Likewise.
- (expand_end_catch_block): Likewise.
- * except.c (make_first_label): new function.
- (expand_start_all_catch): add a call to make_first_label() before
- using a label as a jump destination.
- (expand_end_all_catch): Likewise.
- (expand_leftover_cleanups): Likewise.
- (expand_end_catch_block): Likewise.
- (expand_builtin_throw): Likewise.
- (expand_throw): Likewise.
- * except.c: Add ARM processor support for exception handling.
-
-Thu Jan 12 12:17:24 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- (complete_array_type): Copy code from C frontend.
-
- * lex.c (real_yylex): Don't multiply the length of a wide string
- literal by WCHAR_BYTES.
-
- * decl.c (pushdecl): Check for redeclaration of wchar_t here.
- (duplicate_decls): Instead of here.
- (define_label): Complain about a label named wchar_t.
- (grokdeclarator): Complain about declarations of
- operator-function-ids as non-functions.
-
- * typeck.c (unary_complex_lvalue): Also wrap prefix -- and ++ in
- COMPOUND_EXPRs.
- (build_unary_op): Wrap unary plus in a NON_LVALUE_EXPR.
-
- * lex.c (real_yylex): Don't skip whitespace when reading the next
- character after ->.
-
-Wed Jan 11 16:32:49 1995 Mike Stump <mrs@cygnus.com>
-
- * except.c: Allow cc1plus to be built with native compiler on rs6000.
- (expand_start_all_catch): Add assemble_external calls for various
- routines we call.
- (expand_leftover_cleanups): Likewise.
- (expand_start_catch_block): Likewise.
- (do_unwind): Likewise.
- (expand_builtin_throw): Likewise.
-
-Wed Jan 11 01:05:42 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (pushtag): Only look for a previous decl in the current
- binding level. Use explicit global scope in DECL_NESTED_TYPENAME.
-
- * gxx.gperf: Add __signature__ and __sigof__ keywords.
-
- * decl2.c (lang_decode_option): -ansi does not set flag_no_asm. It
- does set flag_no_gnu_keywords and flag_operator_names.
-
- * lex.c (init_lex): 'overload' is not a keyword unless -traditional.
- Unset extension keywords if -fno-gnu-keywords.
- Allow operator names ('bitand') if -foperator-names.
- Never unset 'asm'; -fno-asm only affects 'typeof'.
-
- * decl.c (lookup_name_real): The got_object special lookup only
- applies to types.
-
-Tue Jan 10 18:07:51 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * spew.c (yylex): Also use DECL_NESTED_TYPENAME if got_object is set.
-
- * parse.y (primary): Unset got_object after all rules that use the
- 'object' nonterminal.
- (object): Set got_object.
-
- * lex.h: Declare got_object.
-
- * decl.c (lookup_name_real): Also lookup names in the context of an
- object specified.
-
-Tue Jan 10 14:30:30 1995 Mike Stump <mrs@cygnus.com>
-
- * typeck.c (get_member_function_from_ptrfunc): Use ptrdiff_type_node
- for things that have to be added to pointers, not size_type. Cures
- problems with pointer to members on Alphas.
- (build_binary_op_nodefault): Likewise.
- (get_delta_difference_: Likewise.
- (build_ptrmemfunc): Likewise.
-
-Tue Jan 10 01:49:25 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (pushtag): Stick the new decl in TYPE_NAME before pushing
- it.
-
- * typeck.c (build_component_ref): Don't build up a COMPONENT_REF
- when dealing with overloaded member functions; just act like
- build_offset_ref.
- (commonparms): Remove misleading comment.
-
- * decl.c (duplicate_decls): Complain about repeated default
- arguments here.
- (redeclaration_error_message): Instead of here.
- (pushdecl): Complain about missing default arguments here.
- (grokparms): Instead of here.
- (lookup_name_current_level): Also match on DECL_ASSEMBLER_NAME.
- (grok_reference_init): Do not complain about missing initializer if
- declared 'extern'.
-
- * search.c (lookup_field): Don't return a TYPE_DECL if there is a
- function alternative and want_type is not set.
-
-Mon Jan 9 18:16:23 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (pushtag): Don't set TYPE_NAME to an identifier. Do push
- the decl when the type has no TYPE_NAME.
- (lookup_nested_type): Don't assume that type has TYPE_NAME set.
- (lookup_name_real): Call lookup_field with want_type =
- prefer_type.
-
- * search.c (lookup_field): Handle want_type properly in the presence
- of fields with the same name.
-
- * decl.c (set_nested_typename): Set nested name for file-scope types
- to include leading ::.
- (pushdecl): Set the nested typename if the decl doesn't have one,
- rather than if the type's canonical decl doesn't have one.
-
-Mon Jan 9 03:44:33 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (convert_for_assignment): Complain about contravariance
- violation here.
- (comp_target_types): Instead of here.
- (build_unary_op): resolve_offset_ref before checking for a valid
- type.
-
- * spew.c (yylex): Decrement looking_for_typename after we see a
- _DEFN.
-
- * decl.c (pushdecl): Don't install an artificial TYPE_DECL in
- IDENTIFIER_LOCAL_VALUE if we already have a decl with that name.
-
- * typeck.c (convert_for_assignment): Converting pointers to bool
- does not need a cast.
-
-Sun Jan 8 18:16:45 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * class.c (instantiate_type): Initialize nsubsts parm.
-
- * pt.c (do_function_instantiation): Likewise.
-
-Sat Jan 7 14:37:05 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * pt.c (tsubst): Use TREE_STATIC instead of DECL_INLINE &&
- DECL_SAVED_INSNS to determine whether or not we've seen a definition
- of this function.
- (instantiate_template): Likewise.
-
- * call.c (convert_harshness): Allow const reference binding when
- called from the overloading code, but not when called from
- can_convert (since it isn't a conversion).
- (convert_harshness): Put back some disabled code.
-
-Fri Jan 6 14:10:57 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * call.c (convert_harshness): There is no implicit conversion from
- void* to other pointer types (unless the parameter is (void*)0).
- (convert_harshness): Non-lvalues do not convert to reference types.
-
- * class.c (finish_struct_methods): Still set
- TYPE_HAS_{INT,REAL}_CONVERSION.
-
- * call.c (can_convert): Don't use aggregate initialization.
-
- * cp-tree.h: Declare lookup_conversions.
-
-Thu Jan 5 21:08:00 1995 Mike Stump <mrs@cygnus.com>
-
- * parse.y (simple_stmt): Fix duplicate case value error messages to
- be more readable.
-
-Wed Jan 4 16:44:19 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * cvt.c (build_type_conversion): Total rewrite to use
- convert_harshness instead of reproducing conversion logic here. Now
- much shorter.
-
- * call.c (convert_harshness): Support conversions to bool.
- (can_convert): Checks whether a conversion is less harsh
- than USER_CODE, for build_type_conversion.
-
- * search.c (add_conversions): Function for passing to dfs_walk which
- adds all the type conversion operators in the current type to a list.
- (lookup_conversions): Calls dfs_walk with add_conversions and return
- the list.
- (dfs_walk): Don't require a qfn.
-
- * cp-tree.h: Lose CLASSTYPE_CONVERSIONS hackery.
- (CLASSTYPE_FIRST_CONVERSION): Points to elt 1 of CLASSTYPE_METHOD_VEC.
-
- * class.c (finish_struct_bits): Lose CLASSTYPE_CONVERSIONS hackery.
- (grow_method): A separate function for building onto the growing
- method vector.
- (finish_struct_methods): Use it. Put all type conversion operators
- right after the constructors. Perhaps we should sort the methods
- alphabetically?
-
-Mon Jan 2 14:42:58 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * call.c (build_method_call): Lose another misleading shortcut.
-
-Fri Dec 30 17:57:30 1994 Mike Stump <mrs@cygnus.com>
-
- * gc.c (build_bltn_desc): Handle bool as a built-in type.
-
-Fri Dec 30 14:20:21 1994 Mike Stump <mrs@cygnus.com>
-
- * tree.c (layout_vbasetypes): Ensure that we don't loose alignment
- on the complete type because of small virtual bases.
-
-Fri Dec 30 12:22:29 1994 Mike Stump <mrs@cygnus.com>
-
- * decl.c (n_incomplete): Bump n_incomplete up to int to match C
- front end.
- (pushdecl): Also count decls pushed that are of a type being defined
- as incomplete things.
- * class.c (finish_struct): Move hack_incomplete_structures up to
- just after we set it as not being defined, so that the decls we
- build for RTTI don't count as incomplete.
-
-Thu Dec 29 18:20:57 1994 Mike Stump <mrs@cygnus.com>
-
- * pt.c (tsubst): Fix problem with defining constructors in templated
- classes with virtual bases.
-
-Wed Dec 28 08:31:00 1994 Mike Stump <mrs@cygnus.com>
-
- * parse.y (TYPEID): Strip top-level cv-qualifiers on typeid
- expressions.
- * gc.c (build_typeid): Likewise.
-
-Thu Dec 22 17:26:33 1994 Mike Stump <mrs@cygnus.com>
-
- * cvt.c (build_up_reference): Fix breakage introduced on Nov 29,
- don't assert on complex AGGR inits.
-
-Thu Dec 22 14:32:31 1994 Mike Stump <mrs@cygnus.com>
-
- * method.c (build_overload_value): Handle pointer to members as
- template arguments.
-
-Thu Dec 22 13:09:07 1994 Mike Stump <mrs@cygnus.com>
-
- * typeck.c (unary_complex_lvalue): Don't call sorry if we know how
- to do take the address of a data member for a pointer to data
- member.
-
-Thu Dec 22 10:04:19 1994 Mike Stump <mrs@cygnus.com>
-
- * decl.c (grokdeclarator): Use the typedef name for linkage if the
- type doesn't otherwise have a name.
-
- * decl2.c (grokfield): Likewise.
-
- * class.c (finish_struct): Since we reuse the TYPE_DECL for the
- DECL_NAME of enums, structs and classes, we have to avoid trying to
- put it in the TYPE_FIELDS again.
-
-Wed Dec 21 11:07:05 1994 Mike Stump <mrs@cygnus.com>
-
- * decl2.c (check_classfn): Ignore this parameter on static functions
- when checking to see if we match.
-
-Tue Dec 20 17:47:02 1994 Mike Stump <mrs@cygnus.com>
-
- * typeck.c (unary_complex_lvalue): Handle address of non-left most
- pointers to members by calling get_delta_difference.
-
-Mon Dec 19 22:40:53 1994 Mike Stump <mrs@cygnus.com>
-
- * decl2.c (check_classfn): Don't use decls_match yet, as it modifies
- static functions to early.
-
-Thu Dec 19 22:37:48 1994 Mike Stump <mrs@cygnus.com>
-
- * method.c (make_thunk): Handle encoding of positive thunk offsets.
-
-Sat Dec 17 13:29:50 1994 Doug Evans <dje@canuck.cygnus.com>
-
- * Make-lang.in (.PHONY): Tell GNU make C++ and c++ are phony targets.
-
-Thu Dec 15 16:32:12 1994 Mike Stump <mrs@cygnus.com>
-
- * decl2.c (check_classfn): Use decls_match to check if this has
- already been declared, as the DECL_ASSEMBLER_NAME may have been
- changed via asm("new_name").
- * decl.c (decls_match): Make public.
-
-Thu Dec 15 15:17:55 1994 Mike Stump <mrs@cygnus.com>
-
- * *.[chy] (expand_aggr_init) Add fourth argument to handle
- distinction between = init and (init) style of initializations.
- * *.[chy] (finish_decl): Add fifth argument to to handle
- distinction between = init and (init) style of initializations.
-
-Tue Dec 13 19:16:05 1994 Mike Stump <mrs@cygnus.com>
-
- Fix some random `explicit' bugs.
-
- * cvt.c (convert_to_reference): Add third parameter to
- convert_force.
- (convert_force): Likewise.
- * call.c (build_method_call): Likewise.
- * decl2.c (setup_vtbl_ptr): Likewise.
- * init.c (expand_virtual_init): Likewise.
- (build_member_call): Likewise.
- (build_delete): Likewise.
- (build_vbase_delete): Likewise.
- * typeck.c (build_component_addr): Likewise.
- (build_c_cast): Likewise.
- (build_modify_expr): Likewise.
- * cp-tree.h (CONV_NONCONVERTING): Likewise. Add so that we can
- distinguish the context in which the conversion appears. Add thrid
- argument to build_c_cast.
- * cvt.c (cp_convert): Pass whether or not we want to consider
- non-converting constructors down to build_method_call.
- * decl2.c (reparse_absdcl_as_casts): Add third argument to
- build_c_cast.
- * gc.c (build_m_desc): Likewise.
- * init.c (build_new): Likewise.
- * parse.y (expr_no_commas): Likewise.
- (primary): Likewise.
- * typeck.c (build_x_function_call): Likewise.
- (build_static_cast): Likewise.
- (build_reinterpret_cast): Likewise.
- (build_const_cast): Likewise.
- (build_c_cast): Likewise.
- (build_ptrmemfunc): Likewise.
- * typeck2.c (build_functional_cast): Likewise.
- * init.c (expand_aggr_init): Added LOOKUP_ONLYCONVERTING to
- expand_aggr_init_1 as inits are converted to the destination type.
-
-Tue Dec 13 16:18:57 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Make-lang.in (cc1plus): Depends on c-pragma.o.
-
- * Makefile.in (OBJ{DEP,}S): Add ../c-pragma.o.
-
- * lex.c (check_newline): If the #pragma is not recognized by g++,
- try machine-specific ones too.
- (handle_sysv_pragma): Copied from c-lex.c.
-
-Mon Dec 12 23:53:06 1994 Mike Stump <mrs@cygnus.com>
-
- * except.c (expand_throw): Fix Dec 6th change, build_new likes a
- reference better.
-
-Mon Dec 12 18:01:00 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (build_binary_op): Lose checks on TYPE_PTRMEMFUNC_P with
- IS_AGGR_TYPE, since now they will not both be set on the same type.
-
- * pt.c (do_pending_expansions): Don't clear TREE_PUBLIC on
- instantiations controlled by -fexternal-templates.
-
- * decl.c (duplicate_decls): Don't complain about different values of
- __attribute__ ((const)) and ((noreturn)).
-
-Fri Dec 9 18:17:37 1994 Doug Evans <dje@cygnus.com>
-
- * Makefile.in (BISONFLAGS): Delete --yacc.
- (PARSE_H): Depend on $(PARSE_C), for parallel makes.
- (PARSE_C): Undo last patch.
-
-Fri Dec 2 10:44:36 1994 Mike Stump <mrs@cygnus.com>
-
- * Makefile.in (BISONFLAGS): Add --yacc so that output winds up in
- y.tab.c.
-
-Thu Dec 8 17:39:46 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (finish_decl): Don't call obscure_complex_init for decls
- of indeterminate size.
-
-Wed Dec 7 16:49:22 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (obscure_complex_init): Function to tweak the decl to
- prevent expand_decl from tring to initialize it.
- (finish_decl): Use it rather than writing the same code in three
- different places.
-
- * parse.y (bad_parm): Stop trying to support parms without types.
-
-Wed Dec 7 12:06:56 1994 Mike Stump <mrs@cygnus.com>
-
- * decl2.c (grokfield): Make asm specs on static member functions
- work.
-
-Tue Dec 6 15:43:20 1994 Mike Stump <mrs@cygnus.com>
-
- * except.c (expand_throw): Make a copy of the thrown object.
-
-Tue Dec 6 14:16:34 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * parse.y: : has lower precedence than =.
-
-Tue Dec 6 12:46:17 1994 Mike Stump <mrs@cygnus.com>
-
- * decl.c (pushdecl): Use DECL_NAME of VAR_DECLs to avoid namespace
- manglings.
- (grokvardecl): Add namespace into variable name.
-
-Tue Dec 6 11:26:55 1994 Mike Stump <mrs@cygnus.com>
-
- * decl2.c (current_namespace_id): New routine to transform a simple
- name into a name in a namespace.
- * decl.c (grokdeclarator): Use it.
- * decl2.c (get_namespace_id): Find the name of the current
- namespace.
- (push_namespace, pop_namespace): Complete out missing
- functionality.
-
-Mon Dec 5 17:11:51 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * class.c (finish_struct): Don't use LONG_LONG_TYPE_SIZE, as it may
- not be defined. Fix warning message for enums and restore warning
- for non-enums.
-
- * decl2.c (push_namespace): Dummy function.
- (pop_namespace): Likewise.
- (do_namespace_alias): Likewise.
- (do_using_decl): Likewise.
- (do_using_directive): Likewise.
-
- * parse.y: New token NSNAME for namespace names.
- (extdef): Add namespace, using definitions.
- (using_decl): New rule for using declarations.
- (any_id): New rule for identifiers with any degree of scoping.
- (identifier): Add NSNAME.
- (notype_identifier): Likewise.
- (component_decl): Add using_decl.
- (nested_name_specifier): Add NSNAME SCOPE.
-
- * typeck.c (convert_for_assignment): Handle conversions between
- enums and bool.
-
- * decl.c (duplicate_decls): Only propagate DECL_MAIN_VARIANT on
- FUNCTION_DECLs.
-
-Mon Dec 5 13:03:16 1994 Mike Stump <mrs@cygnus.com>
-
- * class.c (finish_struct): Give an error if one tries to declare a
- bit-field's size greater than a long long, as the backend will dump.
- It is not an error to declare an enum bit-field greater than its
- precision. Warn if an enum bit-field is too small to hold all
- its values.
-
-Mon Dec 5 11:41:50 1994 Mike Stump <mrs@cygnus.com>
-
- * typeck.c (convert_for_assignment): Use cp_convert instead of
- convert so that we don't get static casts.
-
-Sun Dec 4 11:59:01 1994 Mike Stump <mrs@cygnus.com>
-
- * cvt.c (cp_convert): Don't complain about int->enum conversion if
- we are doing static casts.
-
-Fri Dec 2 18:32:41 1994 Mike Stump <mrs@cygnus.com>
-
- * error.c (dump_expr): Do something more intelligent with SAVE_EXPRs
- when dumping expressions in error messages.
-
-Fri Dec 2 17:04:27 1994 Mike Stump <mrs@cygnus.com>
-
- * gc.c (build_dynamic_cast): Change interface to libg++, ensure that
- the return type is the right type, and make references work.
-
-Fri Dec 2 16:36:43 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (poplevel): Don't be confused by function-scope
- declarations of non-nested functions.
- (duplicate_decls): Propagate DECL_MAIN_VARIANT.
- (pushdecl): Use duplicate_decls to copy info from old decl into new
- function-scope one rather than doing it here.
-
- * decl2.c (mark_inline_for_output): Deal with the DECL_MAIN_VARIANT
- of this decl, in case this is a function-scope declaration.
-
- * decl.c (finish_enum): Make sure that the type has the right
- precision when we call fixup_*_type.
-
-Tue Nov 29 19:12:07 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * cvt.c (build_up_reference): Strip superfluous NOP_EXPRs; we do
- want to build up references to rvalues if possible.
- (cp_convert): Stick on a NOP_EXPR when converting to the same type.
-
-Tue Nov 29 11:28:59 1994 Mike Stump <mrs@cygnus.com>
-
- * parse.y (maybe_raises): Handle throw ().
- * parse.y (ansi_raise_identifier): grok type-ids in exception
- specifications.
- * tree.c (build_exception_variant): Use list compare to check if
- two exception specifications match.
- * decl.c (duplicate_decls, bad_specifiers): Enhance wording on error
- messages.
- * call.c (build_method_call): Remove TREE_RAISES.
- * cvt.c (convert_to_aggr): Likewise.
- * typeck.c (build_function_call_real, convert_arguments): Likewise.
- * init.c (expand_aggr_init_1): Likewise.
-
-Tue Nov 29 09:50:39 1994 Mike Stump <mrs@cygnus.com>
-
- * except.c: Add support for m68k and mips exception handling
- support.
-
-Tue Nov 29 08:48:33 1994 Mike Stump <mrs@cygnus.com>
-
- * except.c (expand_end_all_catch): Throw into outer context, if we
- fall off end of catch handlers.
-
-Mon Nov 28 16:44:41 1994 Mike Stump <mrs@cygnus.com>
-
- * Makefile.in: Make is easier to decide where parse.[ch] will be
- built.
-
-Thu Nov 17 20:11:24 1994 Doug Evans <dje@cygnus.com>
-
- * cp/Make-lang.in (CXX_INSTALL_NAME) Use program_transform_name.
- (GXX_INSTALL_NAME) Likewise.
- (CXX_CROSS_NAME) Use program_transform_cross_name.
- (GXX_CROSS_NAME) Likewise.
- (c++.install-man): Use program_transform_name on g++.1.
- (c++.uninstall): Likewise.
-
-Mon Nov 28 13:53:03 1994 Mike Stump <mrs@cygnus.com>
-
- * parse.y (THROW): Fix precedence of throw expressions.
-
-Mon Nov 28 13:15:16 1994 Mike Stump <mrs@cygnus.com>
-
- * typeck.c (build_unary_op): Allow promotions from bool to int on
- unary ~.
-
-Sun Nov 27 00:16:21 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * method.c (build_overload_name): Use DECL_ASSEMBLER_NAME for
- classes when appropriate.
- (build_overload_nested_name): When dealing with a function context,
- use ASM_FORMAT_PRIVATE_NAME to tweak the name of the function to
- avoid conflicts between local classes of the same name.
-
-Wed Nov 23 17:59:42 1994 Mike Stump <mrs@cygnus.com>
-
- * gxx.gperf, parse.y, lex.h, hash.h, lex.c (init_lex), delc.c
- (duplicate_decls, grokdeclarator), cp-tree.h: Add support for
- `explicit'.
- * cvt.c (convert_to_reference, cp_convert, build_type_conversion_1,
- build_type_conversion): Use LOOKUP_ONLYCONVERTING in
- build_method_calls so that non-converting constructors are not used.
- * call.c (build_method_call): If we shouldn't use a non-converting
- constructor, then don't.
-
-Wed Nov 23 14:46:56 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * call.c (build_method_call): Don't try to synthesize methods yet.
-
-Tue Nov 22 12:45:21 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * pt.c (push_template_decls): Create CONST_DECLs for template
- constant parameters, not VAR_DECLs.
-
-Sat Nov 19 15:28:31 1994 Jim Wilson <wilson@chestnut.cygnus.com>
-
- * typeck.c (build_binary_op_nodefault): Can shorten shift only if
- shift count is less than size in bits of arg0.
-
-Thu Nov 17 15:30:50 1994 Mike Stump <mrs@cygnus.com>
-
- * gxx.gperf, hash.h, lex.c (init_lex, real_yylex), parse.y: Add new
- ANSI keywords and, and_eq, bitand, bitor, explicit, namespace, not,
- not_eq, or, or_eq, typename, using, xor, xor_eq to g++. Still need
- to add support for explicit, namespace, typename, and using, support
- for the rest is already in.
-
-Fri Nov 4 19:04:18 1994 Mike Stump <mrs@cygnus.com>
-
- * gc.c (get_bad_cast_node): New routine to support compile time
- throws of bad_cast.
- * gc.c (build_dynamic_cast): Support throwing of bad_cast at compile
- time.
-
-Fri Nov 4 11:12:00 1994 Mike Stump <mrs@cygnus.com>
-
- * except.c: Add hppa support.
-
-Fri Nov 4 10:50:50 1994 Mike Stump <mrs@cygnus.com>
-
- * except.c: Add rs6000 support.
-
-Thu Nov 3 14:24:23 1994 Mike Stump <mrs@cygnus.com>
-
- * except.c (do_unwind): Add i[34]86 support.
-
-Thu Nov 3 00:10:46 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * pt.c (do_pending_expansions): Unset TREE_PUBLIC on implicit
- instantiations.
-
-Wed Nov 2 15:08:24 1994 Kung Hsu <kung@mexican.cygnus.com>
-
- * decl.c (finish_function): Emit types used in method parameters
- into symbol table.
-
-Wed Nov 2 15:05:47 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * pt.c (process_template_parm): Allow pointer to member function
- template parameter types.
- (uses_template_parms): Handle pointer to member function
- CONSTRUCTORs.
-
- * g++.c (main): Cast first argument of bzero to (char *).
- Pass -lstdc++ instead of -lg++ unless we are invoked as 'g++'.
-
-Mon Oct 31 14:50:48 1994 Kung Hsu <kung@mexican.cygnus.com>
-
- * gc.c (build_dynamic_cast): rewrite to make it work.
- * class.c (finish_vtbls): build more vtables if flag_rtti is on.
- * class.c (modify_all_direct_vtables): ditto.
- * init.c (expand_direct_vtbls_init): expand more vtables if
- flag_rtti is on.
- * decl.c (init_type_desc): add default return.
-
-Tue Oct 25 17:13:09 1994 Kung Hsu <kung@mexican.cygnus.com>
-
- * tree.c (debug_binfo): get rid of the initial size entry of
- vtable.
- * cp-tree.h: change flag_dossier to flag rtti, define type
- descriptor type nodes.
- * decl.c (init_type_desc): new function to initialize type
- descriptor type nodes.
- * decl.c (record_builtin_type): change flag_dossier to flag_rtti.
- * lex.c (init_lex): ditto.
- * decl.c : change variable flag_dossier to flag_rtti.
- * decl.c (duplicate_decls): get rid initial size entry of vtable.
- * decl.c (hack_incomplete_structures): take out assert 164.
- * search.c (get_abstract_virtuals_1): ditto.
- * search.c (dfs_init_vbase_pointers): change CLASSTYPE_DOSSIER to
- CLASSTYPE_RTTI.
- * parse.y: ditto.
- * class.c (prepare_fresh_vtable): for virtual bases, get right
- offset.
- * class.c (add_virtual_function): change flag_dossier to
- flag_rtti.
- * class.c (modify_one_vtable): modify the right rtti entry.
- * class.c (override_one_vtable): get rid of size entry.
- * class.c (finish_struct): change flag_dossier to flag_rtti, and
- build extra vtables, build type descriptors for polymorphic
- classes.
- * gc.c (build_headof): make headof() works correctly with new
- rtti.
- * gc.c (build_typeid): make this function work with new rtti.
- * gc.c (get_typeid): make this function work with new rtti.
- * gc.c (build_bltn_desc): new function for new rtti.
- * gc.c (build_user_desc): ditto.
- * gc.c (build_class_desc): ditto.
- * gc.c (build_ptr_desc): ditto.
- * gc.c (build_attr_desc): ditto.
- * gc.c (build_func_desc): ditto.
- * gc.c (build_ptmf_desc): ditto.
- * gc.c (build_ptmd_desc): ditto.
- * gc.c (build_t_desc): ditto.
- * gc.c : comment out old build_t_desc, build_i_desc, build_m_desc.
-
-Tue Oct 25 13:37:41 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * call.c (convert_harshness): Check for TREE_UNSIGNED differences
- after checking for integral conversions.
-
-Wed Nov 30 19:13:50 1994 Mike Stump <mrs@cygnus.com>
-
- * Version 2.6.3 released.
-
-Thu Nov 17 10:56:50 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck2.c (build_m_component_ref): Check the basetype of the
- member pointer against the main variant of the object type.
-
-Mon Nov 14 14:21:52 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * cvt.c (convert_to_reference): Make sure that the original expr
- gets its type back when converting a reference.
-
- * method.c (build_overload_name): Clear numeric_outputed_need_bar here.
- (build_decl_overload): Instead of here.
-
-Tue Nov 8 17:11:24 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * cvt.c (cp_convert): Don't build a TARGET_EXPR if we're not in a
- function.
-
- * typeck.c (convert_for_initialization): Handle initialization from
- a TARGET_EXPR.
-
-Sun Nov 6 01:34:24 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * pt.c (lookup_nested_type_by_name): Fix list-walking logic.
- (tsubst): When replacing a TEMPLATE_TYPE_PARM, propagate
- TYPE_READONLY and TYPE_VOLATILE from the argument.
- (unify): When unifying with a TEMPLATE_TYPE_PARM, remove cv-quals
- present in parm from arg.
- (type_unification): Strip REFERENCE_TYPE from the argument type.
- (unify): Don't strip REFERENCE_TYPE from the argument type.
-
-Sat Nov 5 22:42:15 1994 Greg McGary <gkm@magilla.cichlid.com>
-
- * pt.c (do_type_instantiation): Check to see if there's a
- IDENTIFIER_TEMPLATE on a class before calling
- instantiate_member_templates().
-
-Sat Nov 12 06:35:42 1994 Mike Stump <mrs@cygnus.com>
-
- * Version 2.6.2 released.
-
-Thu Nov 3 18:48:19 1994 Paul Eggert <eggert@twinsun.com>
-
- * Makefile.in (spew.o, lex.o, pt.o):
- Depend on $(srcdir)/parse.h, not parse.h.
-
-Tue Nov 1 19:19:41 1994 Mike Stump <mrs@cygnus.com>
-
- * Version 2.6.1 released.
-
-Sun Oct 23 13:19:55 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl2.c: Declare flag_access_control.
- (struct lang_f_options): Add access-control.
- * expr.c (cplus_expand_expr, NEW_EXPR): Unset flag_access_control
- for the call to expand_aggr_init to copy the object out of the
- pcc_struct_return slot.
- * search.c (compute_access): if (!flag_access_control) return
- access_public.
-
-Fri Oct 21 00:32:54 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * lex.c (cons_up_default_function): Don't try to defer method
- synthesis now.
-
- * decl.c (init_decl_processing): Use __pure_virtual for abort_fndecl
- instead of abort, since the OSF/1 dynamic linker doesn't like to see
- relocation entries for abort.
-
- * tree.c (array_type_nelts_total): Use sizetype, not
- integer_type_node.
- (array_type_nelts_top): Likewise.
-
-Thu Oct 20 15:48:27 1994 Mike Stump <mrs@cygnus.com>
-
- * decl.c (grokdeclarator): Added handling for catch parameters
- (CATCHPARM).
- * except.c (expand_start_catch_block): Use the new CATCHPARM context
- instead of NORMAL.
- * except.c (expand_throw): Don't let convert_to_reference complain
- about what we are doing.
-
-Thu Oct 20 12:55:24 1994 Jim Wilson <wilson@cygnus.com>
-
- * method.c (emit_thunk): Call instantiate_virtual_regs.
-
-Wed Oct 19 14:15:33 1994 Mike Stump <mrs@cygnus.com>
-
- * except.c (expand_exception_blocks): Make sure throw code doesn't
- get put in function that won't be output.
-
-Mon Oct 17 18:03:15 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (init_decl_processing): Make alloca a builtin.
-
-Thu Oct 27 21:10:25 1994 Craig Burley <craig@burley>
-
- * g++.c (main): Only decrement "added" and set "library" to
- NULL when "library" != NULL (just like 940829 fix).
-
-Mon Oct 17 15:56:11 1994 Mike Stump <mrs@cygnus.com>
-
- * except.c (expand_start_catch_block): Make sure the false label
- gets onto the permanent obstack, as it is used for the exception
- table.
-
-Fri Oct 14 18:54:48 1994 Mike Stump <mrs@cygnus.com>
-
- * class.c (modify_one_vtable): Since the DECL_CONTEXT of fndecl can
- be set just below, use current_fndecl instead.
-
-Fri Oct 14 15:12:22 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * init.c (expand_aggr_vbase_init_1): Don't call expand_aggr_init_1
- with LOOKUP_SPECULATIVELY.
- (expand_default_init): Abort if build_method_call returns NULL_TREE.
-
- * typeck.c (build_modify_expr): Don't just build a MODIFY_EXPR if
- the rhs is a TARGET_EXPR.
-
- * parse.y (left_curly): Anonymous types are not affected by #pragma
- interface/implementation.
-
- * method.c (synthesize_method): Don't call setup_vtbl_ptr for the
- default constructor if it isn't needed.
-
- * lex.c (cons_up_default_function): Do synthesize methods for
- anonymous types if necessary.
-
-Thu Oct 13 17:44:55 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * method.c (build_decl_overload): Set numeric_outputed_need_bar to 0.
-
-Wed Oct 12 13:27:57 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeck.c (build_modify_expr): Understand how to copy an aggregate.
-
- * init.c (expand_default_init): Likewise. Also remove some of the
- crufty code that assumes methods will not be synthesized properly.
-
- * lex.c (cons_up_default_function): If the containing type has no
- name, these functions should never need to be called, so just
- declare them.
-
- * lex.c (real_yylex): Use HOST_BITS_PER_WIDE_INT to determine the
- bitmask for lexing character constants.
-
- * call.c (build_method_call): Disable code that tries to do tricky
- stuff with a default parameter that is a constructor call, but
- actually does other tricky stuff that breaks things.
-
-Wed Oct 12 16:14:01 1994 Benoit Belley <belley@cae.ca>
-
- * decl.c (finish_enum): Disable code which forces enums to be signed,
- since this conflicts with their use as bitfields. type_promotes_to
- handles promotion of enums of underlying unsigned types to signed
- integer types.
-
-Wed Oct 12 13:24:03 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * cvt.c (type_promotes_to): Also promote enums to long if
- appropriate.
-
- * typeck.c (default_conversion): Don't expect type_promotes_to to
- return a main variant.
-
-Wed Oct 12 12:19:45 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * call.c (build_scoped_method_call): Don't lose side effects in the
- object expression when calling a non-existent destructor.
-
-Fri Sep 2 19:05:21 1994 Rohan Lenard <rjl@iassf.easams.com.au>
-
- * call.c (build_scoped_method_call): Remove erroneous error message
- when destructor call is written as a scoped call.
-
-Tue Oct 11 23:48:31 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * various: Cast pointer arguments to bzero and bcopy to char *.
-
-Tue Oct 11 19:34:32 1994 Mike Stump <mrs@cygnus.com>
-
- * class.c (get_derived_offset): Added a type parameter to limit how
- far up the CLASSTYPE_VFIELD_PARENT chain we search.
- * class.c (modify_one_vtable, fixup_vtable_deltas): When forming the
- offset to put into the vtable for the this parameter, make sure we
- don't offset from a parent of the DECL_CONTEXT of the function.
-
-Tue Oct 11 16:10:52 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * pt.c (do_function_instantiation): Set DECL_EXTERNAL and
- TREE_STATIC when setting DECL_INTERFACE_KNOWN.
- (do_type_instantiation): Likewise.
-
- * lex.c (cons_up_default_function): Set DECL_INTERFACE_KNOWN,
- DECL_EXTERNAL and TREE_STATIC as appropriate.
-
- * decl2.c (finish_file): Also synthesize methods that don't have
- DECL_EXTERNAL set. Set interface_unknown before doing so.
-
- * decl.c (start_function): If DECL_INTERFACE_KNOWN is set on the
- function decl, don't muck with TREE_PUBLIC and DECL_EXTERNAL.
-
-Mon Oct 10 00:56:53 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * lex.c (cons_up_default_function): Mark methods in a template class
- as template instances. Store the values of interface_unknown and
- interface_only for do_pending_inlines.
- (do_pending_inlines): Use them.
-
- * decl2.c (finish_file): If we haven't seen a definition of a
- function declared static, make the decl non-PUBLIC so compile_file
- can give an error.
-
-Sun Oct 9 02:42:29 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * method.c (do_build_copy_constructor): Handle anonymous unions.
- (do_build_assign_ref): Likewise.
- (largest_union_member): Move from lex.c.
-
-Sat Oct 8 14:59:43 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- Re-implement g++'s vague linkage independent of TREE_PUBLIC.
- * pt.c (instantiate_member_templates): Lose redundant
- -fexternal-templates handling.
- (tsubst): Set TREE_PUBLIC and DECL_EXTERNAL on new decls. Don't set
- TREE_STATIC or DECL_INTERFACE_KNOWN.
- (do_pending_expansions): Predicate on DECL_INTERFACE_KNOWN instead
- of DECL_EXTERNAL for explicit instantiations.
- (do_function_instantiation): Do the new thing.
- (do_type_instantiation): Likewise.
- (instantiate_template): Deal with member templates defined in a .cc
- file with -fexternal-templates.
- * except.c (expand_exception_blocks): Use DECL_LINKAGE_KNOWN to
- decide whether to stick builtin_throw here.
- * decl2.c (import_export_inline): Predicate on DECL_INTERFACE_KNOWN
- rather than TREE_PUBLIC. Generally fix rules.
- (finish_file): Use DECL_INITIAL to determine whether or not a method
- has been synthesized, rather than TREE_ASM_WRITTEN.
- * decl.c (warn_extern_redeclared_static): Use DECL_PUBLIC instead of
- TREE_PUBLIC.
- (pushdecl): Likewise.
- (duplicate_decls): Likewise. Deal with DECL_DECLARED_STATIC and
- DECL_INTERFACE_KNOWN.
- (redeclaration_error_message): Fix checking for conflicting linkage.
- (define_function): Set DECL_INTERFACE_KNOWN.
- (grokfndecl): Function decls are PUBLIC until we are sure about
- their linkage. Set DECL_DECLARED_STATIC as needed.
- (start_function): Deal with linkage. Move pushdecl after linkage
- magic.
- (finish_function): Don't set TREE_ASM_WRITTEN on discarded inlines.
- * cp-tree.h (lang_decl_flags): Add interface_known and
- declared_static.
- (DECL_INTERFACE_KNOWN): New macro.
- (DECL_DECLARED_STATIC): New macro.
- (DECL_PUBLIC): New macro.
-
- Clean up bogus use of TREE_PUBLIC.
- * class.c (alter_access): Fix mistaken use of TREE_PUBLIC (it
- doesn't correspond to TREE_PROTECTED and TREE_PRIVATE).
- * init.c (do_friend): Don't arbitrarily set TREE_PUBLIC.
-
-Wed Oct 5 13:44:41 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * call.c (build_overload_call_real): Don't immediately do
- array->pointer conversion.
-
- * pt.c (type_unification): If not passing to a reference, strip
- cv-quals. Also handle array->pointer conversion.
-
-Tue Oct 4 17:45:37 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (grokdeclarator): Don't warn about applying const to a
- const typedef or template type parameter.
-
- * decl2.c (finish_file): Also synthesize methods after walking the
- vtables. Ugly ugly ugly.
-
-Mon Oct 3 15:02:41 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * various: Remove lingering remnants of old exception handling code.
-
- * decl2.c (finish_file): Synthesize methods before walking the
- vtables, so that the vtables get emitted as needed.
-
- * decl.c (shadow_tag): Remove obsolete code for pushing tags and
- dealing with exceptions.
-
-Mon Oct 3 13:05:27 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
-
- * Make-lang.in (g++-cross): Depend upon version.o and $(LIBDEPS).
-
-Mon Oct 3 02:59:28 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl2.c (finish_file): Fix inline handling.
-
-Sun Oct 2 00:21:56 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * decl.c (grokdeclarator): Handle redundant scope even better.
- ({push,pop}_cp_function_context): Take toplev parameter.
-
- * method.c (synthesize_method): Pass toplev parameter to
- {push,pop}_cp_function_context depending on decl_function_context
- (fndecl).
-
- * typeck.c (build_x_unary_op): Unary & on OFFSET_REFs is always the
- built-in version.
-
- * method.c (synthesize_method): Don't be confused by __in_chrg
- parameter.
-
- * class.c (popclass): Set C_C_D like start_function does.
-
- * decl.c (grokdeclarator): Handle redundant scope better.
-
- * parse.y (expr_or_declarator): Add '(' expr_or_declarator ')' rule.
- (direct_notype_declarator): Likewise.
- (complex_direct_notype_declarator): Remove it here.
-
-Sat Oct 1 21:42:18 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * init.c (resolve_offset_ref): Fix types used in resolving .*
- expressions.
-
-Sat Oct 1 15:18:49 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- Beginnings of work to synthesize methods only when needed.
- * call.c (build_method_call): Synthesize methods as necessary
- (currently never necessary).
- * class.c (popclass): Don't try to set C_C_D here, as it'll end up
- on the wrong obstack.
- * decl.c (push_cp_function_context): Mostly copied from
- push_c_function_context.
- (pop_cp_function_context): Similarly.
- (finish_function): Reverse order of poplevel and pop_nested_class so
- that current_class_decl is restored properly.
- (start_function): Likewise.
- (finish_function): Add parameter 'nested'. Don't call
- permanent_allocation if (nested).
- * various: Pass extra parameter to finish_function.
- * decl2.c (finish_file): Reorganize end-of-file inline handling,
- synthesizing methods as necessary.
- * lex.c (cons_up_default_function): Call mark_inline_for_output.
- Only synthesize methods immediately if #pragma implementation
- (currently disabled).
- (do_pending_inlines): Call synthesize_method.
- * method.c (synthesize_method): New function; all method synthesis
- goes through here. Calls do_build_assign_ref and
- do_build_copy_constructor.
- (build_default_constructor): Remove.
- (build_dtor): Likewise.
- (build_assign_ref): Rename to do_build_assign_ref and remove stuff
- done by synthesize_method.
- (build_copy_constructor): Similarly.
-
-Thu Sep 29 16:58:52 1994 Mike Stump <mrs@cygnus.com>
-
- * typeck.c (c_expand_return): Use magic so the backend can fixup the
- assignment into the return register, so cleanups won't clobber it.
-
-Thu Sep 29 13:08:50 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * method.c (hack_identifier): Don't call assemble_external for
- template decls.
-
- * decl.c (finish_decl): Also end temporary allocation if the decl in
- question has a type of error_mark_node.
-
-Wed Sep 28 21:45:00 1994 Mike Stump <mrs@cygnus.com>
-
- * typeck.c (build_modify_expr): When optimizing ?: on lhs, make sure
- that if the ?: was a reference type, that the subparts will be also.
-
-Wed Sep 28 16:14:04 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * except.c (register_exception_table): Use Pmode, not PTRmode.
-
-Fri Sep 23 13:54:27 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * lex.c (do_pending_inlines): Do method synthesis after the
- pending_inlines have been reversed.
-
-Thu Sep 22 12:53:03 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * decl2.c (finish_file): Fix Brendan's fix: Only call
- register_exception_table if there is a non-empty exception table.
-
-Thu Sep 22 12:03:46 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * decl2.c (finish_file): Only do register_exception_table if
- -fhandle-exceptions is being used.
-
-Wed Sep 21 19:01:51 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * except.c (output_exception_table_entry): Simplify
- by using assemble_integer.
- (build_exception_table): Change to return a count.
- Cleanup to use standard macros, instead of hard-wired
- sparc asm format. Don't make __EXCEPTION_TABLE__ global.
- (register_exception_table): New function. Generate call to builtin.
- * decl2.c (finish_file): Call register_exception_table.
- * cp-tree.h (build_exception_table): Fix prototype.
-
-Wed Sep 21 13:20:42 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * tree.c (break_out_calls): Don't try to duplicate the DECL_INITIAL.
-
- * decl2.c (delete_sanity): Give an error at trying to delete a
- function.
-
-Wed Sep 21 11:47:10 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * lex.c (cons_up_default_function): Mark synthesized destructors
- inline.
-
- * decl.c (duplicate_decls): Ignore redeclarations of wchar_t as
- something other than __wchar_t, complaining if -pedantic and not in
- a system header.
-
-Tue Sep 20 09:43:28 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (xref_tag): Set up BINFO_INHERITANCE_CHAIN on base binfos
- here.
-
- * typeck.c (build_modify_expr): Require complete type after checking
- for error_mark_node.
-
- * call.c (build_method_call): Print parmtypes when complaining of
- ambiguous call.
-
- * typeck.c (build_modify_expr): Handle assignment to array from
- non-array.
-
- * decl.c (lookup_name_real): Deal with got_scope == error_mark_node.
-
- * call.c (build_method_call): Don't bother with the exact match.
-
-Mon Sep 19 00:51:39 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * init.c (expand_aggr_init): If we munge the type of the variable,
- also munge the type of the initializer.
-
- * decl.c (grokdeclarator): Use <= when comparing to RID_LAST_MODIFIER.
- (init_decl_processing): Push artificial declaration of wchar_t so
- people don't have to declare it before they can use it.
-
- * error.c (cp_line_of): return lineno in lieu of 0.
-
- * typeck.c (convert_for_assignment): Handle conversion of pmfs to
- int and bool.
- (build_component_ref): Fold the COMPONENT_REF in case it can be
- reduced.
-
- * typeck2.c (store_init_value): Don't pedwarn about non-constant
- bracketed initializers for automatic variables.
-
-Sun Sep 18 10:12:12 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * error.c (dump_decl): Don't say `typedef enum foo foo'.
-
- * decl.c (start_decl): Don't set TREE_PUBLIC on template decls just
- because they're affected by #pragma i/i. We'll deal with that when
- they get instantiated.
-
- * typeck.c (build_unary_op): Clean up cruft in ADDR_EXPR case.
-
- * class.c (instantiate_type): Set TREE_CONSTANT on instantiated
- ADDR_EXPRs if appropriate.
-
- * decl.c (build_ptrmemfunc_type): Unset IS_AGGR_TYPE on pmf types.
-
- * typeck.c (build_ptrmemfunc): Handle &overloaded_method as an
- initializer properly.
- * typeck2.c (digest_init): Likewise.
-
- * tree.c (cp_build_type_variant): Like c_build_type_variant, except
- it uses build_cplus_array_type.
- * *.c: Use cp_build_type_variant instead of c_build_type_variant.
-
- * pt.c (do_type_instantiation): Don't try to instantiate nested
- enums.
-
-Tue Sep 13 10:56:58 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cvt.c (build_up_reference): Handle preincrement and predecrement
- properly.
-
-Tue Sep 13 09:51:59 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * decl.c (finish_decl): Only lay out the rtl for DECL if it is, in
- fact, static.
-
-Mon Sep 12 14:40:30 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * decl.c (finish_decl): Lay out the rtl for DECL before doing
- grok_reference_init, in case it's static.
-
-Mon Sep 12 12:45:38 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * class.c (finish_struct): Don't synthesize constructors if the
- class has a field with the same name as the class. Don't die on
- classes with no constructors or destructors. Don't die if the head
- and tail of the class are in different files.
-
- * decl.c (grokdeclarator): Don't treat a function pointer field
- with the same name as the class as a constructor.
-
-Fri Sep 9 13:17:00 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (build_c_cast): Pull constant values out of their
- variables here.
-
- * decl.c (duplicate_decls): Only propagate DECL_CHAIN in
- FUNCTION_DECLs and TEMPLATE_DECLs.
-
-Thu Sep 8 10:07:48 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (duplicate_decls): Propagate DECL_CHAIN in all DECLs that
- have it.
-
- * pt.c (unify): REALs and INTEGERs only unify with their own genus.
- (instantiate_member_templates): Don't muck with DECL_EXTERNAL and
- TREE_PUBLIC unless -fexternal-templates.
-
-Wed Sep 7 13:17:10 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * pt.c (do_type_instantiation): Call instantiate_member_templates.
- Deal with specializations.
- (tsubst): Don't stick the mangled name in DECL_NAME for function
- instantiations. Don't push them, either.
-
- * decl2.c (grokfield): Move code for generating the
- DECL_ASSEMBLER_NAME for static members from here.
- * method.c (build_static_name): To here.
- * decl.c (grokvardecl): Call build_static_name.
- (duplicate_decls): Keep old DECL_ASSEMBLER_NAME.
-
-Mon Sep 5 12:49:18 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * call.c (build_method_call): if -Wsynth, warn when selecting
- synthesized op= over user-supplied one cfront would select.
- * decl2.c (lang_decode_option): Handle -Wsynth.
-
-Fri Sep 2 15:11:59 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (finish_enum): Overhaul to fix several bugs.
- (start_enum): Disable useless code.
-
-Thu Sep 1 16:04:54 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (c_expand_return): Warn about returning a reference to a
- temporary.
- (convert_arguments): Increment argument counter when using default
- arguments, too.
-
-Wed Aug 31 14:29:22 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (finish_decl): If the type of decl is error_mark_node,
- don't bother trying to do anything.
-
- * typeck.c (convert_for_initialization): If the rhs contains a
- constructor call, pretend the lhs type needs to be constructed.
-
- * init.c (expand_default_init): If we stick the object inside the
- initializer, mark the initializer used.
-
-Tue Aug 30 13:50:18 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * method.c (build_assign_ref): return *this;
- (build_assign_ref): Fix base assignment order.
- (build_copy_constructor): Fix member init order.
-
-Mon Aug 29 13:54:39 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * g++.c (main): Remember to clear out SAW_SPECLANG after we see
- its argument.
-
-Sat Aug 27 09:36:03 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * method.c (build_copy_constructor): Also copy virtual bases.
-
-Fri Aug 26 17:05:15 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * lex.c (do_pending_inlines): Clear out pending_inlines before doing
- any synthesis. Also first set deja_vu on all pending_inlines.
-
- * method.c (build_assign_ref): Use build_member_call to invoke base
- operator=, rather than build_modify_expr. And use
- build_reference_type instead of TYPE_REFERENCE_TO.
- (build_copy_constructor): Use TYPE_NESTED_NAME to identify the
- basetype.
-
- * decl2.c (grokfield): Don't complain about undefined local class
- methods.
-
- * class.c (finish_struct): Don't try to synthesize methods here.
- * lex.c (do_pending_inlines): Instead, synthesize them here.
- (init_lex): Initialize synth_obstack.
- (cons_up_default_function): Stick synthesis request on
- pending_inlines.
-
-Fri Aug 26 12:24:14 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * call.c (build_method_call) [PCC_STATIC_STRUCT_RETURN]: Also
- accept an RTL_EXPR in what we're about to use for the instance,
- since anything which would end up with pcc_struct_return set
- inside cplus_expand_expr.
-
- * cp-tree.h (cons_up_default_function): Note change of prototype.
-
-Thu Aug 25 23:05:30 1994 Gerald Baumgartner <gb@cs.purdue.edu>
-
- * class.c (finish_struct): Undid change from Aug 21 testing
- CLASSTYPE_INTERFACE and CLASSTYPE_VTABLE_NEEDS_WRITING.
- * parse.y (left_curly): Likewise, undid change from Aug 21.
- * decl.c (xref_tag): Undid change from Aug 21, set
- CLASSTYPE_INTERFACE correctly, and added comments.
-
-Thu Aug 25 00:36:31 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- Rework approach to synthesized methods; don't go through the parser
- anymore.
- * class.c (finish_struct): Use new synthesis approach.
- * lex.c (cons_up_default_function): Now just creates declaration,
- not code.
- (largest_union_member): #if 0 out.
- (default_assign_ref_body): Likewise.
- (default_copy_constructor_body): Likewise.
- * method.c (build_default_constructor): New function to synthesize X().
- (build_copy_constructor): Synthesize X(X&).
- (build_assign_ref): Synthesize X::operator=(X&).
- (build_dtor): Synthesize ~X().
-
- * error.c (cp_line_of): If we're dealing with an artificial
- TYPE_DECL, look at the type instead.
-
-Wed Aug 24 11:11:50 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * init.c (sort_member_init): Check warn_reorder.
- * decl2.c (lang_decode_option): Handle -W{no-,}reorder.
-
- * cp-tree.h (CLASSTYPE_SOURCE_LINE): New macro.
- * error.c (cp_line_of): Use CLASSTYPE_SOURCE_LINE for aggregates.
- * class.c (finish_struct): Set CLASSTYPE_SOURCE_LINE.
-
-Tue Aug 23 09:28:35 1994 Mike Stump <mrs@cygnus.com>
-
- * error.c (dump_decl): Improve wording, so that error messages
- dont't read template<, class foo>...
-
-Mon Aug 22 15:30:51 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * parse.y (label_colon): Also match a TYPENAME as a label name,
- since they may have declared a class by that name but have also
- tried to have a local label under the same name.
-
- * pt.c (coerce_template_parms): Call cp_error, not cp_error_at,
- for the message so they know at what point it was instantiated.
-
-Sun Aug 21 23:07:35 1994 Gerald Baumgartner <gb@cs.purdue.edu>
-
- * class.c (finish_struct): Move setting of CLASSTYPE_INTERFACE and
- CLASSTYPE_VTABLE_NEEDS_WRITING for signatures up to left_curly time.
- * decl.c (xref_tag): Move setting of CLASSTYPE_INTERFACE and
- CLASSTYPE_VTABLE_NEEDS_WRITING for signatures down to left_curly time.
- * parse.y (left_curly): New final resting place for setting
- CLASSTYPE_INTERFACE and CLASSTYPE_VTABLE_NEEDS_WRITING for signatures.
-
- * class.c (finish_struct): Don't test for function/field name
- conflicts in signatures, since all the fields are compiler-constructed.
-
-Fri Aug 19 14:04:47 1994 Kung Hsu <kung@mexican.cygnus.com>
-
- * method.c (build_overload_nested_name): in qualified name
- mangling, the template with value instantiation will have numeric
- at end and may mixed with the name length of next nested level.
- Add a '_' in between.
- * method.c (build_overload_name): ditto.
- * method.c (build_overload_identifier): ditto.
-
-Thu Aug 18 16:24:43 1994 Mike Stump <mrs@cygnus.com>
-
- * error.c (dump_decl): Handle NULL args.
-
-Thu Sep 29 16:15:36 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
-
- * g++.c: Rework last change so it's done like collect.c (and
- gcc.c).
-
-Wed Sep 14 10:17:27 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
-
- * g++.c: Include <sys/errno.h> in case `errno' is a macro
- as permitted by ANSI C.
-
-Thu Aug 18 12:48:09 1994 Mike Stump <mrs@cygnus.com>
-
- * class.c (finish_struct): Move setting of CLASSTYPE_INTERFACE and
- CLASSTYPE_VTABLE_NEEDS_WRITING up to left_curly time.
- * decl.c (xref_tag): Move setting of CLASSTYPE_INTERFACE and
- CLASSTYPE_VTABLE_NEEDS_WRITING down to left_curly time.
- * parse.y (left_curly): New final resting place for setting
- CLASSTYPE_INTERFACE and CLASSTYPE_VTABLE_NEEDS_WRITING.
-
-Thu Aug 11 11:32:42 1994 H.J. Lu <hjl@nynexst.com>
-
- * g++.c (main): Only decrement "added" and set "library" to
- NULL when "library" != NULL.
-
-Sat Aug 13 00:14:52 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (grokdeclarator): Don't set TREE_PUBLIC on a function decl
- just because its class has a known interface.
- (decls_match): Deal with new format of template parms.
-
- * lex.c (cons_up_default_function): Don't play with TREE_PUBLIC and
- DECL_EXTERNAL here.
-
-Fri Aug 12 01:55:15 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (pushtag): SET_DECL_ARTIFICIAL on gratuitous typedefs.
- (xref_defn_tag): Likewise.
- (pushdecl): Only allow artificial typedefs to be shadowed.
-
- * init.c (emit_base_init): Pass the right binfos to
- expand_aggr_init_1.
-
- * class.c (delete_duplicate_fields_1): Make it work right.
- (finish_struct): Catch function/field name conflict.
-
- * decl2.c (check_classfn): Pass the function to cp_error, not just
- the name.
-
- * init.c (sort_member_init): Warn when order of member initializers
- does not match order of member declarations.
- (emit_base_init): Call expand_aggr_init_1 with LOOKUP_PROTECT.
-
- * error.c (dump_expr): Handle lists of functions.
-
- * decl.c (start_function): #pragma interface only affects functions
- that would otherwise be static.
- (finish_decl): Don't warn about an unused variable if it has both
- constructor and destructor, since the 'resource allocation is
- initialization' idiom is relatively common.
-
- * typeck.c (comp_target_types): Don't handle TEMPLATE_TYPE_PARMs.
- (comp_target_parms): Likewise.
- (compparms): Never consider default parms.
- (common_base_type): Don't choose a virtual baseclass if there is a
- more derived class in common.
- (build_conditional_expr): If pedantic, pedwarn about conversion to
- common base in conditional expr.
-
- * class.c (instantiate_type): Handle template instantiation better.
-
- * typeck.c (convert_arguments): Don't try to get tricky and convert
- to int directly when PROMOTE_PROTOTYPES is set, as it breaks
- user-defined conversions.
-
- * lex.c (check_for_missing_semicolon): Also give error at end of
- file.
-
- * call.c (build_method_call): Don't promote arrays to pointers here.
-
- * typeck.c (convert_arguments): Don't require the actual parameter
- to be of a complete type if the formal parameter is a reference.
-
-Thu Aug 11 15:21:40 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (grokdeclarator): Soften 'static' on member function error
- to pedwarn.
-
- * init.c (build_new): Don't automatically save rval.
- (build_offset_ref): Do field lookup with proper basetype_path.
-
-Thu Aug 11 12:46:54 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * errfn.c (cp_silent): Declare to mark when we should avoid
- emitting warnings and errors.
- (cp_error): Check it.
- (cp_warning): Likewise.
- (cp_pedwarn): Likewise.
- (cp_compiler_error): Likewise.
- (cp_error_at): Likewise.
- (cp_warning_at): Likewise.
- (cp_pedwarn_at): Likewise.
- * call.c (compute_conversion_costs): Set CP_SILENT when we start
- out, and make sure we turn it off before we leave.
-
-Thu Aug 11 00:02:54 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl2.c (grok_array_decl): Try computing *(A+B) if neither
- argument is obviously an array.
-
-Wed Aug 10 15:32:04 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (c_expand_start_case): Do cleanups here.
-
- * parse.y (xcond): Do bool conversion here, too.
- (simple_stmt, SWITCH case): Don't do cleanups here.
-
- * decl.c (duplicate_decls): Don't treat builtins that have been
- explicitly declared specially.
-
-Tue Aug 9 01:16:09 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * tree.c (make_deep_copy): Support copying pointer, reference,
- function, array, offset and method types.
-
- * decl.c (init_decl_processing): Mark exit and abort as
- BUILT_IN_NONANSI so that duplicate_decls is kinder about
- redeclaration.
- (duplicate_decls): Don't give two errors for redeclaring a C
- function with the same parms but a different return type.
-
- * parse.y (paren_cond_or_null): Do cleanup and bool conversion here.
- (condition): Instead of here.
- (simple_stmt, SWITCH case): Also do cleanup here.
-
- * decl2.c (finish_anon_union): Only break out FIELD_DECLs.
-
- * call.c (build_method_call): Don't throw away the side effects of
- the object in a call to a non-existent constructor.
- * parse.y (primary): Likewise.
-
- * method.c (build_decl_overload): Oop.
-
- * decl2.c (lang_decode_option): Deal with flag_no_nonansi_builtin,
- warn about uselessness of specifying -fansi-overloading.
-
- * method.c (build_decl_overload): Treat any non-member new with one
- parameter as __builtin_new.
-
- * decl.c (init_decl_processing): Setup built-in meanings of exit,
- _exit and abort.
-
-Mon Aug 8 15:03:30 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * error.c (dump_readonly_or_volatile): Put a space between const and
- volatile if both apply.
-
- * init.c (perform_member_init): Clean up after this initialization.
- (emit_base_init): Clean up after each base init, not after all have
- been done.
- (expand_aggr_vbase_init_1): Clean up after this init.
-
-Sun Aug 7 14:55:05 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * call.c (build_method_call): Deal with destroying references.
-
- * parse.y (condition): Do bool_truthvalue_conversion here.
- (paren_expr_or_null): And here.
- (simple_if): Not here.
- (simple_stmt): Or here.
-
-Sat Aug 6 22:29:45 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y (paren_expr_or_null): Wrap the expression in a
- CLEANUP_POINT_EXPR.
- (condition): Likewise.
-
-Sat Aug 6 19:46:37 1994 Rohan Lenard <rjl@easams.com.au>
-
- * call.c (build_scoped_method_call): Fix error message when
- destructor call refers to a nonexistent type.
-
-Sat Apr 16 22:43:30 1993 Gerald Baumgartner <gb@cs.purdue.edu>
-
- * lex.h (rid): Deleted RID_RAISES, it's never used.
- Moved RID_PUBLIC, RID_PRIVATE, RID_PROTECTED, RID_EXCEPTION,
- RID_TEMPLATE and RID_SIGNATURE to the end of the enumeration,
- they don't need to be touched in `grokdeclarator.'
- (RID_LAST_MODIFIER): Defined macro to be RID_MUTABLE.
-
- * decl.c (grokdeclarator): Use RID_LAST_MODIFIER instead of
- RID_MAX as loop limit for finding declaration specifiers.
-
-Sat Apr 3 21:59:07 1993 Gerald Baumgartner <gb@cs.purdue.edu>
-
- * lex.c (debug_yytranslate): Moved to parse.y since it needs to
- access `yytname,' which is static in parse.c.
-
-Fri Apr 2 23:36:57 1993 Gerald Baumgarnter <gb@cs.purdue.edu>
-
- * cp-tree.h (GNU_xref_ref): Fixed typo in extern declaration, it
- was `GNU_xref_def' instead of `GNU_xref_ref.'
-
-Fri Aug 5 14:20:16 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * pt.c (do_function_instantiation): Don't set TREE_PUBLIC and
- DECL_EXTERNAL on 'extern' instantiations; wait until EOF to do that.
- (do_type_instantiation): Likewise.
-
- * decl2.c (import_export_inline): Decides at EOF what an inline's
- linkage should be.
- (finish_file): Call it.
-
- * decl.c (start_function): Don't rely on the settings of TREE_PUBLIC
- and DECL_EXTERNAL from do_*_instantiation. Only set
- DECL_DEFER_OUTPUT on inlines whose linkage might actually change.
- (finish_function): Use DECL_DEFER_OUTPUT to decide which inlines to
- mark for later consideration, rather than DECL_FUNCTION_MEMBER_P.
-
-Fri Aug 5 01:12:20 1994 Mike Stump <mrs@cygnus.com>
-
- * class.c (get_class_offset_1, get_class_offset): New routine to
- find the offset of the class where a virtual function is defined,
- from the complete type.
- * class.c (modify_one_vtable, fixup_vtable_deltas): Use
- get_class_offset instead of virtual_offset as get_class_offset will
- always provide the right answer.
- * tree.c (virtual_offset): Remove. It only ever worked some of the
- time.
-
-Tue Aug 2 12:44:21 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * call.c (build_method_call): Put back unary_complex_lvalue call
- that I thought was redundant.
-
- * typeck.c (c_expand_return): Fix a case I missed before.
-
-Sun Jul 31 17:54:02 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * pt.c (unify): Strip cv-quals from template type arguments (when
- 'const T*' is matched to 'const char*', that does not mean that T is
- 'const char').
-
-Fri Jul 29 01:03:06 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * pt.c (do_type_instantiation): Instantiate nested TAGS, not
- typedefs. Third time's the charm?
-
- * parse.y (template_parm): Support default template parms.
- * pt.c (process_template_parm): Likewise.
- (end_template_parm_list): Likewise.
- (coerce_template_parms): Likewise.
- (mangle_class_name_for_template): Likewise.
- (push_template_decls): Likewise.
- (unify): Likewise.
- * method.c (build_overload_identifier): Likewise.
- * error.c (dump_decl): Likewise.
-
-Wed Jul 27 17:47:00 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * pt.c (do_type_instantiation): Only instantiate nested *classes*.
-
-Tue Jul 26 13:22:40 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * search.c (note_debug_info_needed): Also emit debugging information
- for the types of fields.
-
-Mon Jul 25 00:34:44 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * pt.c (lookup_template_class): Pass 'template' to
- coerce_template_parms instead of 'in_decl', since it's a more
- meaningful context.
-
- * typeck.c (c_expand_return): Make sure any cleanups for the return
- expression get run.
- (build_c_cast): Use CONVERT_EXPR for conversion to void.
-
- * pt.c (do_type_instantiation): Also instantiate nested types.
-
- * typeck.c (convert_for_assignment): Don't die when comparing
- pointers with different levels of indirection.
-
- * decl.c (grokdeclarator): The sub-call to grokdeclarator for
- class-local typedefs sets DECL_ARGUMENTS, so we need to clear it
- out.
-
- * decl2.c (finish_anon_union): Don't die if the union has no
- members.
-
- * decl.c (grokdeclarator): Undo changes to declspecs when we're done
- so that 'typedef int foo, bar;' will work.
-
- * decl2.c (finish_file): Don't call expand_aggr_init for
- non-aggregates.
-
-Mon Jul 25 00:03:10 1994 Teemu Torma <tot@trema.fi>
-
- * decl.c (finish_function): We can't inline constructors and
- destructors under some conditions with -fpic, but don't unset
- DECL_INLINE.
-
-Mon Jul 25 00:03:10 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (build_object_ref): Make sure 'datum' is a valid object.
-
-Sun Jul 24 14:19:31 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * class.c (finish_struct): Don't set DECL_FIELD_BITPOS on
- non-fields.
- (finish_struct_methods): Use copy_assignment_arg_p.
-
- * cvt.c (cp_convert): If expr is an OFFSET_REF, resolve it instead
- of giving an error.
-
- * typeck.c (build_binary_op_nodefault): Don't set result_type if we
- don't know how to compare the operands.
-
- * decl.c (grokdeclarator): Avoid seg fault when someone uses '__op'
- as a declarator-id in their program. Like the Linux headers do.
- Arrgh.
-
- * tree.c (lvalue_p): Treat calls to functions returning objects by
- value as lvalues again.
-
- * typeck.c (build_component_addr): Use convert_force to convert the
- pointer in case the component type is also a private base class.
-
- * search.c (get_matching_virtual): Fix bogus warning of overloaded
- virtual.
-
- * pt.c (overload_template_name): Set DECL_ARTIFICIAL on the created
- TYPE_DECL to fix bogus shadowing warnings.
-
-Fri Jul 22 01:15:32 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * init.c (expand_aggr_init_1): const and volatile mismatches do not
- prevent a TARGET_EXPR from initializing an object directly.
-
-Tue Jul 19 17:55:37 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cvt.c (build_up_reference): Allow building up references to
- `this', don't warn about making references to artificial variables
- (like `this').
-
- * tree.c (lvalue_p): `this' is not an lvalue.
-
- * call.c (build_method_call): Accept using a typedef name (or
- template type parameter) for explicit destructor calls.
-
-Thu Jul 14 09:42:23 1994 Mike Stump <mrs@cygnus.com>
-
- * Version 2.6.0 released.
-
-Wed Jul 13 03:57:54 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * method.c (hack_identifier): Put back old code so lists of
- non-functions will be handled properly.
-
- * cp-tree.h (TYPE_NEEDS_CONSTRUCTING): #if 0 out; this macro is now
- defined in the language-independent tree.h.
-
- * tree.c (count_functions): Avoid bogus warning when compiling this
- function.
-
-Mon Jul 11 18:37:20 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (grok_reference_init): Always save the initializer of a
- reference.
-
-Fri Jul 8 17:41:46 1994 Mike Stump <mrs@cygnus.com>
-
- * decl.c (cplus_expand_expr_stmt): Wrap statement expressions inside
- CLEANUP_POINT_EXPRs so that the stack slots can be reused.
- (disabled for now)
-
-Fri Jul 8 12:59:38 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * method.c (hack_identifier): Fix for new overloading.
-
- * typeck.c (build_binary_op_nodefault): Don't mess with division by
- zero.
-
-Fri Jul 8 13:20:28 1994 Gerald Baumgartner <gb@cs.purdue.edu>
-
- * decl2.c (finish_file): Only call walk_sigtables, if
- flag_handle_signatures is turned on, don't waste time otherwise.
-
-Fri Jul 8 02:27:41 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (push_overloaded_decl): Don't create overloads of one when
- shadowing a class type.
- * typeck.c (build_x_function_call): Complain about overloads of one.
-
- * decl.c (grokdeclarator): Don't try to treat a char* as a tree.
- (grokdeclarator): Fix setting of TREE_STATIC.
- (start_decl): Clear DECL_IN_AGGR_P after calling duplicate_decls.
-
-Thu Jul 7 22:20:46 1994 Gerald Baumgartner <gb@andros.cygnus.com>
-
- * cp-tree.h (walk_sigtables): Created extern declaration.
- * decl2.c (walk_sigtables): Created function, patterned after
- walk_vtables, even though we only need it to write out sigtables.
- (finish_sigtable_vardecl): Created function.
- (finish_vtable_vardecl): Changed 0 to NULL_PTR.
- (finish_file): Call walk_sigtables.
-
- * sig.c (build_signature_table_constructor): Mark class member
- function pointed to from signature table entry as addressable.
-
-Thu Jul 7 13:39:37 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (start_decl): Check new decl of static member variable
- against the declaration in the class here.
- (grokvardecl): Instead of here.
-
- * class.c (prepare_fresh_vtable): Call import_export_vtable if not
- -fvtable-thunks.
- (build_vtable): Likewise.
-
- * decl2.c (import_export_vtable): Move logic for deciding the
- interface of a template class from here.
- (import_export_template): To here.
- (finish_vtable_vardecl): Call import_export_template before
- import_export_vtable.
-
-Wed Jul 6 20:25:48 1994 Mike Stump <mrs@cygnus.com>
-
- * except.c (init_exception_processing): Setup interim_eh_hook to
- call lang_interim_eh.
- * except.c (do_unwind): Propagate throw object value across
- stack unwinding.
- * except.c (saved_throw_value): Used to hold the value of the object
- being thrown. It is always a reference to the real value.
- * except.c (expand_start_catch_block): Add handling for the
- value of the exception object.
- * except.c (expand_start_catch_block): Add handler for the handler,
- so that throws inside the handler go to the outer block.
- * except.c (expand_end_catch_block): Likewise.
- * parse.y (handler_args): Use parm instead, as the other doesn't yet
- handle references correctly.
-
-Wed Jul 6 17:55:32 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * decl2.c (mark_vtable_entries): If -ftable-thunks, set the
- vtable entry properly to abort.
-
-Tue Jul 5 14:07:54 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (build_binary_op_nodefault): Downgrade division by zero
- errors to warnings.
-
- * call.c (build_overload_call_real): Handle fnname being a list of
- functions.
- * typeck.c (build_x_function_call): Pass list of functions to
- build_overload_call, not just the name.
- * tree.c (count_functions): Complain when called for invalid
- argument.
-
- * decl.c (grokdeclarator): Fix settings of TREE_STATIC, TREE_PUBLIC
- and DECL_EXTERNAL on static members and initialized const members.
- * decl2.c (grokfield): Reflect this change.
-
-Fri Jul 1 09:35:51 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y (init): ANSI C++ does not forbid { }.
-
-Thu Jun 30 00:35:22 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl2.c (lang_decode_option): Set warn_nonvdtor along with -Wall.
- warn_nonvdtor defaults to off.
-
- * class.c (instantiate_type): Use comptypes rather than relying on
- types to satisfy ==.
-
- * decl.c (start_function): Set DECL_DEFER_OUTPUT on all inlines that
- might be static.
-
- * tree.c (build_cplus_new): Never build WITH_CLEANUP_EXPRs.
-
- * decl.c (grok_reference_init): Deal with ADDR_EXPRs of TARGET_EXPRs.
-
- * cvt.c (cp_convert): Pass 0 to with_cleanup_p arg of
- build_cplus_new.
-
-Wed Jun 29 22:31:09 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl2.c (finish_file): Maybe consider static inlines multiple
- times, in case they reference each other.
-
-Tue Jun 28 11:58:38 1994 Gerald Baumgartner <gb@cs.purdue.edu>
-
- * class.c (finish_struct): Don't `cons_up_default_function's
- for signatures.
- (finish_struct): Handle an empty method_vec correctly.
-
- * decl.c (grokdeclarator): Don't warn about a signature being
- empty in a signature pointer declaration if we only saw a
- forward declaration of the signature. Changed `warning's into
- `cp_warning's.
-
- * sig.c (build_sigtable): Don't die if a null signature table
- constructor is returned.
- (build_signature_pointer_constructor): If the signature table
- constructor is null, the _sptr field is set to a null pointer
- and cast to the appropriate type. Make copies of all null
- pointers so that the type null_pointer_node doesn't get changed.
- (build_signature_table_constructor): Added comments.
-
- * sig.c (build_signature_pointer_constructor): Complain if we
- try to assign to/initialize a signature pointer/reference of
- an undefined signature.
-
-Mon Jun 27 14:05:16 1994 Gerald Baumgartner <gb@cs.purdue.edu>
-
- * typeck2.c (store_init_value): Don't be pedantic about
- non-constant initializers of signature tables/pointers/references.
-
-Fri Jun 24 16:49:41 1994 Gerald Baumgartner <gb@cs.purdue.edu>
-
- * decl.c (grokdeclarator): If we are grokking an opaque typedef
- in a signature, don't complain about it begin static.
-
-Wed Jun 29 16:44:45 1994 Mike Stump <mrs@cygnus.com>
-
- Fixes a problem of the this pointer being wrong in virtual calls to
- methods that are not overridden in more derived classes.
-
- * class.c (fixup_vtable_delta): New routine. It will fixup the
- delta entries in vtables, wheever they need updating.
- * class.c (finish_struct): Call the new routine for all virtual
- bases, as they can have different offsets, than those used in base
- classes that we derive our vtable from.
-
-Tue Jun 28 23:49:28 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (build_binary_op): Use the types before default
- conversions in the error message.
-
- * *.c: Use c_build_type_variant instead of build_type_variant where
- the type might be an array.
-
- * call.c (build_method_call): Call build_type_variant and
- build_reference_type in the right order.
- * decl.c (record_builtin_type): Likewise.
-
-Wed Jun 29 16:58:53 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * call.c (build_method_call): Call build_type_variant and
- build_reference_type in the right order.
- * decl.c (record_builtin_type): Likewise.
-
-Tue Jun 28 23:49:28 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (build_binary_op): Use the types before default
- conversions in the error message.
-
- * *.c: Use c_build_type_variant instead of build_type_variant where
- the type might be an array.
-
-Sat Jun 25 11:50:54 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cvt.c (convert_to_reference): Try UDC's before doing the
- reinterpret_cast thang, though.
-
-Fri Jun 24 01:24:01 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (c_expand_return): Don't USE the return value location
- after we've expanded the jump.
-
- * decl2.c (finish_file): Make sure DECL_SAVED_INSNS is not 0 before
- trying to write out an inline.
-
- * cvt.c (build_up_reference): Also do address adjustment when the
- target type uses MI.
- (convert_to_reference): Try UDCs only after built-in conversions.
- (build_type_conversion_1): Don't play games with the argument to the
- method.
- (build_type_conversion): #if 0 out code for binding to reference.
-
-Thu Jun 23 00:22:28 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl2.c (finish_file): Use TREE_SYMBOL_REFERENCED to decide
- whether to emit inlines.
-
- * decl.c (grokdeclarator): Set explicit_int for decls that just
- specify, say, 'long'.
-
- * init.c (do_friend): Do overload C functions (or call pushdecl,
- anyaway).
-
-Wed Jun 22 13:40:49 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cvt.c (build_up_reference): Don't call readonly_error.
- (convert_to_reference): Propagate const and volatile from expr to
- its type.
-
- * tree.c (lvalue_p): Random CALL_EXPRs are not lvalues.
-
- * cvt.c (build_up_reference): Break out WITH_CLEANUP_EXPR when
- creating a temporary.
- (convert_to_reference): Lose excessive and incorrect trickiness.
- (cp_convert): Call build_cplus_new with with_cleanup_p set.
-
- * typeck2.c (build_functional_cast): Likewise.
-
-Tue Jun 21 17:38:38 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (grokdeclarator): signed, unsigned, long and short all
- imply 'int'.
-
- * decl.c (grokdeclarator): Allow "this is a type" syntax.
- (grok_reference_init): Simplify and fix.
-
-Sun Jun 19 17:08:48 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (grokdeclarator): pedwarn about a typedef that specifies no
- type.
-
-Sat Jun 18 04:16:50 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (start_function): Move TREE_PUBLIC and DECL_EXTERNAL
- tinkering to after call to pushdecl.
-
-Fri Jun 17 14:48:28 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * call.c (build_method_call): Handle destructors for non-aggregate
- types properly.
-
-Thu Jun 16 16:48:05 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * call.c (build_method_call): Make sure that the name given for the
- destructor matches the constructor_name of the instance.
-
- * pt.c (do_function_instantiation): A non-extern instantiation
- overrides a later extern one.
- (do_type_instantiation): Likewise.
-
-Wed Jun 15 19:34:54 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * init.c (expand_aggr_init): Use TYPE_MAIN_VARIANT to get the
- unqualified array type.
-
- * cp-tree.h (EMPTY_CONSTRUCTOR_P): Tests whether NODE is a
- CONSTRUCTOR with no elements.
-
- * decl.c (various): Lose empty_init_node.
- (finish_decl): Use EMPTY_CONSTRUCTOR_P, do the empty CONSTRUCTOR
- thing depending on the value of DECL_COMMON instead of
- flag_conserve_space, do the empty CONSTRUCTOR thing for types that
- don't have constructors, don't treat a real empty CONSTRUCTOR
- specially.
-
- * typeck2.c (process_init_constructor): Don't treat empty_init_node
- specially.
-
-Wed Jun 15 19:05:25 1994 Mike Stump <mrs@cygnus.com>
-
- * class.c (override_one_vtable): Don't forget to merge in an old
- overrider when we wanted to reuse a vtable, but couldn't.
-
-Wed Jun 15 15:03:16 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (start_decl): Put statics in common again.
-
- * decl.c (grokdeclarator): Return NULL_TREE for an error rather than
- setting the type to error_mark_node.
-
- * typeck.c (build_modify_expr): Build up a COMPOUND_EXPR for enum
- bitfield assignments.
-
-Tue Jun 14 12:23:38 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (grok_op_properties): Const objects can be passed by value.
-
-Mon Jun 13 03:10:59 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl2.c (import_export_vtable): Force implicit instantiations to
- be interface_only when -fno-implicit-templates.
-
- * decl.c (duplicate_decls): Redeclaring a class template name is an
- error.
-
- * pt.c (end_template_decl): Call GNU_xref_decl for class templates.
- * xref.c (GNU_xref_decl): Support templates.
-
-Sat Jun 11 17:09:05 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (grok_op_properties): Split out checking for whether this
- function should suppress the default assignment operator.
- * decl2.c (grok_function_init): Likewise.
- (copy_assignment_arg_p): New function do do just that.
- Now considers virtual assignment operators that take a base as an
- argument to count as copy assignment operators.
-
- * search.c (dfs_debug_mark): Lose checks for DWARF_DEBUG and
- TREE_ASM_WRITTEN, as they are redundant.
-
- * pt.c (end_template_decl): Don't try to set DECL_CLASS_CONTEXT on a
- decl that has no LANG_SPECIFIC part.
- (do_type_instantiation): Force the debugging information for this
- type to be emitted.
-
- * decl.c (start_decl): Clear up uses of various types of templates
- (say sorry for static data members, rather than "invalid template").
- (expand_static_init): Fix initialization of static data members of
- template classes.
-
-Fri Jun 10 00:41:19 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (grokdeclarator): Set DECL_CONTEXT on static data members.
-
- * g++.c (main): Use -xc++-cpp-output for .i files.
-
- * pt.c (tsubst): Give meaningful error about declaring template for
- a copy constructor which was not declared in the class template.
- (do_type_instantiation): Explicit instantiation before the class
- template is an error.
- (instantiate_template): Don't die if tsubst returns error_mark_node.
-
-Thu Jun 9 19:04:59 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- Don't synthesize the copy assignment operator if the one in a base
- class is pure virtual.
- * cp-tree.h (TYPE_HAS_ABSTRACT_ASSIGN_REF): New macro to indicate
- whether the type has a pure virtual copy assignment operator.
- * class.c (finish_base_struct): Don't generate the copy assignment
- operator if a base class has a pure virtual one.
- * decl.c (grok_op_properties): Add disabled code to set
- TYPE_HAS_ABSTRACT_ASSIGN_REF with comment pointing to where it is
- actually set.
- * decl2.c (grok_function_init): Set TYPE_HAS_ABSTRACT_ASSIGN_REF.
-
- * decl2.c (import_export_vtable): Always treat template
- instantiations as if write_virtuals >= 2, and treat implicit
- instantiations as external if -fno-implicit-templates.
- (finish_file): Output all pending inlines if
- flag_keep_inline_functions.
-
-Wed Jun 8 20:48:02 1994 Mike Stump <mrs@cygnus.com>
-
- * tree.c (layout_vbasetypes): Align virtual base classes inside
- complete objects, so that we don't core dump on machines such as
- SPARCs when we access members that require larger than normal
- alignments, such as a double. Also, we bump up the total alignment
- on the complete type, as necessary.
-
-Wed Jun 8 16:18:14 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * gxxint.texi (Free Store): New section with code for examining
- cookie.
- (Limitations of g++): Remove operator delete entry, since it is no
- longer accurate. Fix access control entry.
-
- * typeck.c (build_unary_op): Pedwarn about taking the address of or
- incrementing a cast to non-reference type.
- (build_modify_expr): Use convert instead of convert_force again.
-
- * search.c (get_base_distance): Use IS_AGGR_TYPE_CODE to check for
- class type, not == RECORD_TYPE.
-
- * decl.c (grokdeclarator): Cope with grokfndecl returning NULL_TREE.
-
- * typeck2.c (report_case_error): #if 0 out.
- * lex.c (real_yylex): Lose RANGE.
- * parse.y: Likewise.
-
-Tue Jun 7 18:17:35 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y (simple_stmt, case ranges): Use ELLIPSIS instead of RANGE.
-
-Mon Jun 6 19:39:57 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (build_c_cast): Don't shortcut conversions to the same
- type. Don't replace consts with their values here, since that's now
- done in cp_convert.
-
- * cvt.c (cp_convert): When converting to bool, take
- integer_zero_node to false_node and all other INTEGER_CSTs to
- true_node.
- (build_type_conversion): Don't complain about multiple conversions
- to float if we're not really converting.
-
-Fri Jun 3 02:10:56 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- Implement 'extern template class A<int>;' syntax for suppressing
- specific implicit instantiations.
- * cp-tree.h: Update prototypes for do_*_instantiation.
- * pt.c (do_pending_expansions): Don't compile 'extern' explicit
- instantiations.
- (do_function_instantiation): Set DECL_EXTERNAL on 'extern' explicit
- instantiations.
- (do_type_instantiation): Likewise.
- * parse.y (explicit_instantiation): Support 'extern template class
- A<int>;' syntax.
- * decl.c (start_function): Don't modify the settings of TREE_PUBLIC
- and DECL_EXTERNAL on explicit instantiations.
-
- * cvt.c (cp_convert): Replace constants with their values before
- converting.
- (cp_convert): Consistently use 'e' instead of 'expr'.
-
-Thu Jun 2 03:53:30 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck2.c (build_x_arrow): Resolve OFFSET_REFs first.
-
-Wed Jun 1 18:57:35 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck2.c (digest_init): Handle initializing a pmf with an
- overloaded method.
- * typeck.c (build_ptrmemfunc): Handle overloaded methods.
-
- * decl.c (pushtag): Use build_decl to make TYPE_DECLs.
- (xref_defn_tag): Likewise.
- * pt.c (process_template_parm): Likewise.
- (lookup_template_class): Likewise.
- (push_template_decls): Likewise.
- (instantiate_class_template): Likewise.
- (create_nested_upt): Likewise.
- * class.c (finish_struct): Don't try to set DECL_CLASS_CONTEXT on
- TYPE_DECLs.
-
- * typeck.c (convert_arguments): Make sure type is not NULL before
- checking its TREE_CODE.
-
-Wed Jun 1 17:40:39 1994 Mike Stump <mrs@cygnus.com>
-
- * class.c (get_derived_offset): New routine.
- * class.c (finish_base_struct): Make sure we set BINFO_VTABLE and
- BINFO_VIRTUALS when we choose a new base class to inherit from.
- * class.c (modify_one_vtable): Use get_derived_offset to get the
- offset to the most base class subobject that we derived this binfo
- from.
- * class.c (finish_struct): Move code to calculate the
- DECL_FIELD_BITPOS of the vfield up, as we need might need it for
- new calls to get_derived_offset in modify_one_vtable.
-
-Wed Jun 1 16:50:59 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * init.c (build_member_call): Use build_pointer_type instead of
- TYPE_POINTER_TO.
-
-Wed Jun 1 11:11:15 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * decl.c (grokdeclarator): Make sure we have a DNAME set before we
- try to use it in an error.
-
-Wed Jun 1 09:48:49 1994 Mike Stump <mrs@cygnus.com>
-
- * typeck.c (convert_arguments, convert_for_initialization): Don't
- strip NOP_EXPRs, when we are converting to a reference.
-
-Wed Jun 1 01:11:38 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (build_modify_expr): Don't dereference references when
- initializing them.
-
- * decl2.c (grokfield): Don't check for grokdeclarator returning
- error_mark_node any more.
-
- * decl.c (grokfndecl): Return NULL_TREE instead of error_mark_node.
- (start_method): Return void_type_node instead of error_mark_node.
-
- * typeck.c (build_modify_expr): Resolve offset refs earlier.
-
-Tue May 31 16:06:58 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * call.c (build_method_call): Resolve OFFSET_REFs in the object.
-
- * typeck.c (build_modify_expr): Dereference references before trying
- to assign to them.
-
- * call.c (build_method_call): Don't confuse type conversion
- operators with constructors.
- * typeck2.c (build_functional_cast): Just call build_c_cast if there
- was only one parameter.
- * method.c (build_typename_overload): Don't set
- IDENTIFIER_GLOBAL_VALUE on these identifiers.
- * decl.c (grok_op_properties): Warn about defining a type conversion
- operator that converts to a base class (or reference to it).
- * cvt.c (cp_convert): Don't try to use a type conversion operator
- when converting to a base class.
- (build_type_conversion_1): Don't call constructor_name_full on an
- identifier.
- * cp-tree.h (DERIVED_FROM_P): Should be self-explanatory.
-
- * decl.c (start_decl): Don't complain that error_mark_node is an
- incomplete type.
- (finish_decl): Check for type == error_mark_node.
-
-Mon May 30 23:38:55 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (start_function): Set DECL_DEFER_OUTPUT on implicit
- instantiations and inline members.
-
- * spew.c (yylex): Set looking_for_template if the next token is a '<'.
-
- * lex.h: Declare looking_for_template.
-
- * decl.c (lookup_name_real): Use looking_for_template to arbitrate
- between type and template interpretations of an identifier.
-
-Sat May 28 04:07:40 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * pt.c (instantiate_template): Zero out p if we found a
- specialization.
-
- * decl.c (grokdeclarator): Elucidate warning.
- (grokdeclarator): If pedantic AND -ansi, complain about long long.
-
- Make explicit instantiation work reasonably. It is now appropriate
- to deprecate the use of -fexternal-templates.
- * pt.c (instantiate_template): Set DECL_TEMPLATE_SPECIALIZATION or
- DECL_IMPLICIT_INSTANTIATION on fndecl as appropriate.
- (end_template_instantiation): Reflect changes in USE_TEMPLATE
- semantics.
- (do_pending_expansions): if (!flag_implicit_templates) DECIDE(0);
- (do_function_instantiation): Don't set EXPLICIT_INST if
- flag_external_templates is set. Do set TREE_PUBLIC and DECL_EXTERN
- appropriately otherwise.
- (do_type_instantiation): Set interface info for class. Set
- TREE_PUBLIC and DECL_EXTERN for methods. Do none of this if
- flag_external_templates is set.
- * parse.y: Reflect changes in USE_TEMPLATE semantics.
- * decl2.c: New flag flag_implicit_templates determines whether or
- not implicit instantiations get emitted. This flag currently
- defaults to true, and must be true for -fexternal-templates to work.
- (finish_file): Consider flag_implement_inlines when
- setting DECL_EXTERNAL. Consider flag_implicit_templates when
- deciding whether or not to emit a static copy.
- * decl.c (start_function): Set TREE_PUBLIC and DECL_EXTERNAL
- properly for template instantiations.
- (start_method): Set DECL_IMPLICIT_INSTANTIATION on methods of a
- template class.
- * cp-tree.h (CLASSTYPE_USE_TEMPLATE): Change semantics.
- (DECL_USE_TEMPLATE): Parallel macro for FUNCTION and VAR_DECLs.
- (various others): Accessor macros for the above.
-
-Fri May 27 13:57:40 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (build_binary_op_nodefault): Division by constant zero is
- an error.
-
-Fri May 27 13:50:15 1994 Mike Stump <mrs@cygnus.com>
-
- * class.c (override_one_vtable): Don't modify things we don't own.
-
-Fri May 27 01:42:58 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (finish_decl): Don't postpone processing the initializer of
- a decl with DECL_EXTERNAL set, and do call rest_of_compilation for a
- PUBLIC const at toplevel.
- (grokdeclarator): pedwarn about initializing non-const or
- non-integral statics in the class body.
-
- * decl.c (pushtag): Don't try to set DECL_CLASS_CONTEXT on a
- TYPE_DECL.
-
- * call.c (convert_harshness): Dereference reference on rhs before
- proceeding, properly grok passing const things to non-const
- references.
-
- * typeck.c (build_unary_op): Soften error about taking the address
- of main() to a pedwarn.
-
- * lex.c (default_copy_constructor_body): Unambiguously specify base
- classes (i.e. A((const class ::A&)_ctor_arg) ).
- (default_assign_ref_body): Likewise.
-
-Thu May 26 13:13:55 1994 Gerald Baumgartner <gb@mexican.cygnus.com>
-
- * decl2.c (grokfield): Don't complain about local signature
- method declaration without definition.
-
- * call.c (convert_harshness): If `type' is a signature pointer
- and `parmtype' is a pointer to a signature, just return 0. We
- don't really convert in this case; it's a result of making the
- `this' parameter of a signature method a signature pointer.
-
- * call.c (build_method_call): Distinguish calling the default copy
- constructor of a signature pointer/reference from a signature
- member function call.
-
-Thu May 26 12:56:25 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl2.c (grokfield): Don't set TREE_PUBLIC on member function
- declarations.
-
- * decl.c (duplicate_decls): A previous function declaration as
- static overrides a subsequent non-static definition.
- (grokdeclarator): Don't set TREE_PUBLIC on inline method
- declarations.
-
-Wed May 25 14:36:38 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (grokdeclarator): Handle initialization of static const
- members.
- (finish_decl): Likewise.
-
- * decl2.c (grokfield): Allow initialization of static const members
- even when pedantic.
-
- * decl2.c (grokfield): Deal with grokdeclarator returning
- error_mark_node.
-
- * decl.c (grok_ctor_properties): Return 0 for A(A) constructor.
- (grokfndecl): Check the return value of grok_ctor_properties.
- (start_method): Likewise.
-
- * parse.y (absdcl): Expand type_quals inline.
-
-Tue May 24 19:10:32 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (pushtag): Use IS_AGGR_TYPE rather than checking for a
- RECORD_TYPE.
-
-Tue May 24 18:09:16 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * cp-tree.h (VTABLE_NAME_FORMAT): If flag_vtable_thunks,
- always use "__vt_%s".
- * decl2.c (finish_vtable_vardecl): Don't consider abstract virtuals
- when looking for a "sentinal" method (to decide on emitting vtables).
- * decl2.c (finish_file): Scan all decls for thunks that need
- to be emitted.
- * decl2.c (finish_vtable_vardecl): Don't bother calling emit_thunk.
- * method.c (make_thunk): Use a more meaningful label. If there
- exists a matching top-level THUNK_DECL re-use it; otherwise
- create a new THUNK_DECL (and declare it).
- * method.c (emit_thunk): Make thunk external/public depending
- on the underlying method.
-
-Tue May 24 00:22:04 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * pt.c (tsubst): Use lookup_name_nonclass to find guiding decls, not
- lookup_name.
-
- * call.c (build_overload_call_real): Don't immediately pick a
- function which matches perfectly.
-
- * decl.c (grokdeclarator): Use c_build_type_variant for arrays.
- (grokdeclarator): Warn about, and throw away, cv-quals attached to a
- reference (like 'int &const j').
-
- * typeck.c (convert_arguments): Don't mess with i for methods.
- * call.c (build_method_call): Pass the function decl to
- convert_arguments.
-
- * typeck.c (comp_ptr_ttypes_real): New function. Implements the
- checking for which multi-level pointer conversions are allowed.
- (comp_target_types): Call it.
- (convert_for_assignment): Check const parity on the ultimate target
- type, too. And make those warnings pedwarns.
-
-Mon May 23 14:11:24 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * error.c (dump_char): Use TARGET_* for character constants.
-
-Mon May 23 13:03:03 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * tree.c (debug_no_list_hash): Make static.
-
- * decl.c (decls_match): Say the types don't match if newdecl ends up
- with a null type, after we've checked if olddecl does.
- (pushdecl): Check if the decls themselves match before looking for
- an extern redeclared as static, to avoid inappropriate and incorrect
- warnings.
-
-Fri May 20 14:04:34 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (grokdeclarator): Make warning about duplicate short, etc.
- a pedwarn.
-
- * typeck.c (build_c_cast): Casting to function or method type is an
- error.
-
- * class.c (finish_struct): Make warning for anonymous class with no
- instances a pedwarn.
-
- * Makefile.in (stamp-parse): Expect a s/r conflict.
-
- * typeck.c (build_modify_expr): pedwarn about using a non-lvalue
- cast as an lvalue.
-
-Thu May 19 12:08:48 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cvt.c (type_promotes_to): Make sure bool promotes to int rather
- than unsigned on platforms where sizeof(char)==sizeof(int).
-
-Wed May 18 14:27:06 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (build_c_cast): Tack on a NOP_EXPR when casting to
- another variant.
- (build_modify_expr): Don't strip NOP_EXPRs, and don't get tricky
- and treat them as lvalues.
-
- * decl.c (shadow_tag): Do complain about forward declarations of
- enums and empty declarations.
- * parse.y: Don't complain about forward declarations of enums and
- empty declarations.
-
- * typeck.c (convert_for_assignment): Complain about changing
- the signedness of a pointer's target type.
-
- * parse.y (stmt): Move duplicated code for checking case values from
- here.
- * decl2.c (check_cp_case_value): To here. And add a call to
- constant_expression_warning.
-
- * typeck.c (convert_for_assignment): Don't complain about assigning
- a negative value to bool.
-
- * decl.c (init_decl_processing): Make bool unsigned.
-
- * class.c (finish_struct): Allow bool bitfields.
-
-Wed May 18 12:35:27 1994 Ian Lance Taylor <ian@tweedledumb.cygnus.com>
-
- * Make-lang.in (c++.install-man): Get g++.1 from $(srcdir)/cp.
-
-Wed May 18 03:28:35 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cvt.c (build_type_conversion): Lose special handling of
- truthvalues.
-
- * search.c (dfs_pushdecls): Improve shadowing warning.
-
-Tue May 17 13:34:46 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * init.c (build_delete): Throw away const and volatile on `this'.
-
- * decl.c (finish_enum): Put the constants in TYPE_VALUES again,
- rather than the enumerators.
- (pushtag): s/cdecl/c_decl/g
-
-Mon May 16 23:04:01 1994 Stephen R. van den Berg <berg@pool.informatik.rwth-aachen.de>
-
- * cp/typeck.c (common_type): Attribute merging.
- (comp_types): Utilise COMP_TYPE_ATTRIBUTES macro.
-
- * cp/parse.y: Revamp attribute parsing.
-
-Mon May 16 01:40:34 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (shadow_tag): Also check for inappropriate use of auto and
- register.
-
- * method.c (build_overload_name): Clarify that the illegal case is a
- pointer or reference to array of unknown bound.
-
- * error.c (dump_type_prefix): Print references to arrays properly.
-
- * typeck.c (various): Be more helpful in pointer
- comparison diagnostics.
-
- * tree.c (lvalue_p): MODIFY_EXPRs are lvalues again. Isn't this
- fun?
-
- * parse.y: Also catch an error after valid stmts.
-
- * search.c (dfs_init_vbase_pointers): Don't abort because `this' is
- const.
-
- * typeck.c (convert_for_initialization): If call to
- convert_to_reference generated a diagnostic, print out the parm
- number and function decl if any.
-
- * errfn.c (cp_thing): Check atarg1 to determine whether or not we're
- specifying a line, not atarg.
-
- * tree.c (build_cplus_method_type): Always make `this' const.
-
- * decl2.c (grokclassfn): If -fthis-is-variable and this function is
- a constructor or destructor, make `this' non-const.
-
- * typeck.c (build_modify_expr): Don't warn specially about
- assignment to `this' here anymore, since it will be caught by the
- usual machinery.
-
- * various: Disallow specific GNU extensions (variable-size arrays,
- etc.) when flag_ansi is set, not necessarily when pedantic is set,
- so that people can compile with -pedantic-errors for tighter const
- checking and such without losing desirable extensions.
-
- * typeck2.c (build_functional_cast): Call build_method_call with
- LOOKUP_PROTECT.
- (process_init_constructor): Only process FIELD_DECLs.
-
- * decl.c (finish_decl): Also force static consts with no explicit
- initializer that need constructing into the data segment.
-
- * init.c (build_delete): Undo last patch, as it interferes with
- automatic cleanups.
-
-Sat May 14 01:59:31 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * call.c, class.h, cp-tree.h, cvt.c, decl2.c: Lose old overloading
- code.
-
- * init.c (build_delete): pedwarn about using plain delete to delete
- an array.
-
-Fri May 13 16:45:07 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (comp_target_types): Be more helpful in contravariance
- warnings, and make them pedwarns.
-
- * decl.c (grokdeclarator): Use decl_context to decide whether or not
- this is an access declaration.
-
- * class.c (finish_struct_bits): Set TYPE_HAS_INT_CONVERSION if it
- has a conversion to enum or bool, too.
-
-Fri May 13 16:31:27 1994 Mike Stump <mrs@cygnus.com>
-
- * method.c (emit_thunk): Make declaration for
- current_call_is_indirect local (needed for hppa).
-
-Fri May 13 16:16:37 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * pt.c (uses_template_parms): Grok BOOLEAN_TYPE.
- (tsubst): Likewise.
-
-Fri May 13 16:23:32 1994 Mike Stump <mrs@cygnus.com>
-
- * pt.c (tsubst): If there is already a function for this expansion,
- use it.
- * pt.c (instantiate_template): Likewise.
-
-Fri May 13 10:30:42 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * parse.y (implicitly_scoped_stmt, simple_stmt case): Use
- kept_level_p for MARK_ENDS argument to expand_end_bindings, to avoid
- generating debug info for unemitted symbols on some systems.
-
- * cp-tree.h (build_static_cast, build_reinterpret_cast,
- build_const_cast): Add declarations.
-
-Fri May 13 09:50:31 1994 Mike Stump <mrs@cygnus.com>
-
- * search.c (expand_indirect_vtbls_init): Fix breakage from Apr 27
- fix. We now try get_binfo, and if that doesn't find what we want,
- we go back to the old method, which still sometimes fails.
-
-Fri May 13 01:43:18 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y (initdcl): Call cplus_decl_attributes on the right
- variable.
- * decl2.c (cplus_decl_attributes): Don't call decl_attributes for
- void_type_node.
-
- * typeck.c (build_binary_op_nodefault): Change result_type for
- comparison ops to bool.
- (build_binary_op): Convert args of && and || to bool.
- * cvt.c (build_default_binary_type_conversion): Convert args of &&
- and || to bool.
- (build_default_unary_type_conversion): Convert arg of ! to bool.
- (type_promotes_to): bool promotes to int.
-
-Fri May 13 01:43:18 1994 Mike Stump <mrs@cygnus.com>
-
- Implement the new builtin `bool' type.
- * typeck.c (build_binary_op_nodefault): Convert args of && and || to
- bool.
- (build_unary_op): Convert arg of ! to bool.
- * parse.y: Know true and false. Use bool_truthvalue_conversion.
- * method.c (build_overload_value): Know bool.
- (build_overload_name): Likewise.
- * lex.c (init_lex): Set up RID_BOOL.
- * gxx.gperf: Add bool, true, false.
- * error.c (*): Know bool.
- * decl.c (init_decl_processing): Set up bool, true, false.
- * cvt.c (cp_convert): Handle conversion to bool.
- (build_type_conversion): Likewise.
- * *.c: Accept bool where integers and enums are accepted (use
- INTEGRAL_CODE_P macro).
-
-Thu May 12 19:13:54 1994 Richard Earnshaw <rwe11@cl.cam.ac.uk>
-
- * g++.c: Use #ifdef for __MSDOS__, not #if.
-
-Thu May 12 18:05:18 1994 Mike Stump <mrs@cygnus.com>
-
- * decl2.c (lang_f_options): Handle -fshort-temps. -fshort-temps
- gives old behavior , and destroys temporaries earlier. Default
- behavior now conforms to the ANSI working paper.
-
-Thu May 12 14:45:35 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (build_modify_expr): Understand MODIFY_EXPR as an lvalue.
- Use convert_force to convert the result of a recursive call when we
- are dealing with a NOP_EXPR. Don't automatically wrap MODIFY_EXPRs
- in COMPOUND_EXPRs any more.
- (various): Lose pedantic_lvalue_warning.
- (unary_complex_lvalue): Understand MODIFY_EXPR.
-
- * cvt.c (convert_to_reference): Allow DECL to be error_mark_node if
- we don't know what we're initializing.
-
-Wed May 11 01:59:36 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cvt.c (convert_to_reference): Modify to use convtype parameter.
- Only create temporaries when initializing a reference, not when
- casting.
- (cp_convert): New main function.
- (convert): Call cp_convert.
- * cvt.c, decl.c, typeck.c: Fix calls to convert_to_reference.
- * cp-tree.h (CONV_*): New constants used by conversion code for
- selecting conversions to perform.
-
- * tree.c (lvalue_p): MODIFY_EXPRs are no longer lvalues.
-
- * typeck.c (build_{static,reinterpret,const_cast): Stubs that just
- call build_c_cast.
- * parse.y: Add {static,reinterpret,const}_cast.
- * gxx.gperf: Likewise.
-
- * typeck.c (common_type): Allow methods with basetypes of different
- UPTs.
- (comptypes): Deal with UPTs.
- (build_modify_expr): Wrap all MODIFY_EXPRs in a COMPOUND_EXPR.
-
- * pt.c (end_template_decl): Check for multiple definitions of member
- templates.
-
- * call.c (build_method_call): Complain about calling an abstract
- virtual from a constructor.
-
- * typeck.c (pointer_int_sum): Check for the integer operand being 0
- after checking the validity of the pointer operand.
-
- * typeck2.c (digest_init): Pedwarn about string initializer being
- too long.
-
-Tue May 10 12:10:28 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (push_overloaded_decl): Only throw away a builtin if the
- decl in question is the artificial one.
-
- * parse.y (simple_stmt, switch): Use implicitly_scoped_stmt because
- expand_{start,end}_case cannot happen in the middle of a block.
-
- * cvt.c (build_type_conversion_1): Use convert again.
-
-Tue May 10 11:52:04 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * typeck2.c (digest_init): Make sure we check for signed and
- unsigned chars as well when warning about string initializers.
-
- * init.c (emit_base_init): Check if there's a DECL_NAME on the
- member before trying to do an initialization for it.
-
-Tue May 10 11:34:37 1994 Mike Stump <mrs@cygnus.com>
-
- * except.c: Don't do anything useful when cross compiling.
-
-Tue May 10 03:04:13 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (duplicate_decls): Fix up handling of builtins yet again.
- (push_overloaded_decl): Likewise.
-
- * cvt.c (convert): Don't look for void type conversion.
-
-Mon May 9 18:05:41 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * init.c (do_friend): Only do a pushdecl for friends, not
- pushdecl_top_level.
-
-Mon May 9 13:36:34 1994 Jim Wilson <wilson@sphagnum.cygnus.com>
-
- * decl.c (lookup_name_current_level): Put empty statement after
- the label OUT to make the code valid C.
-
-Mon May 9 12:20:57 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (build_binary_op_nodefault): Only complain about
- comparing void * and a function pointer if void * is smaller.
-
-Sun May 8 01:29:13 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (lookup_name_current_level): Move through temporary binding
- levels.
-
- * parse.y (already_scoped_stmt): Revive.
- (simple_stmt): Use it again.
-
- * decl.c (poplevel): Always call poplevel recursively if we're
- dealing with a temporary binding level.
-
-Sat May 7 10:52:28 1994 Mike Stump <mrs@cygnus.com>
-
- * decl.c (finish_decl): Make sure we run cleanups for initial values
- of decls. Cures memory leak.
- * decl.c (expand_static_init): Likewise for static variables.
- * decl2.c (finish_file): Likewise for globals.
-
-Sat May 7 03:57:44 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (commonparms): Don't complain about redefining default
- args.
-
- * decl.c (duplicate_decls): Don't complain twice about conflicting
- function decls.
- (decls_match): Don't look at default args.
- (redeclaration_error_message): Complain about redefining default
- args.
-
- * call.c (build_overload_call_real): Also deal with guiding
- declarations coming BEFORE the template decl.
-
- * pt.c (unify): Allow different parms to have different
- cv-qualifiers.
- (unify): Allow trivial conversions on non-template parms.
-
-Fri May 6 03:53:23 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * pt.c (tsubst): Support OFFSET_TYPEs.
- (unify): Likewise.
-
- * decl2.c (finish_decl_parsing): Call push_nested_class with a type.
-
- * init.c (build_offset_ref): Fix error message.
- * search.c (lookup_field): Likewise.
-
- * call.c (build_scoped_method_call): Pass binfo to
- build_method_call.
- * typeck.c (build_object_ref): Likewise.
-
- * typeck2.c (binfo_or_else): Don't return a _TYPE.
-
- * class.c (finish_struct): Don't complain about re-use of inherited
- names or shadowing of type decls.
- * decl.c (pushdecl_class_level): Likewise.
-
- * decl.c (finish_enum): Set the type of all the enums.
-
- * class.c (finish_struct): Don't get confused by access decls.
-
- * cp-tree.h (TYPE_MAIN_DECL): New macro to get the _DECL for a
- _TYPE. You can stop using TYPE_NAME for that now.
-
- * parse.y: Lose doing_explicit (check $0 instead).
- * gxx.gperf: 'template' now has a RID.
- * lex.h (rid): Likewise.
- * lex.c (init_lex): Set up the RID for 'template'.
-
- * parse.y (type_specifier_seq): typed_typespecs or
- nonempty_type_quals. Use it.
- (handler_args): Fix bogus syntax.
- (raise_identifier{,s}, optional_identifier): Lose.
- * except.c (expand_start_catch_block): Use grokdeclarator to parse
- the catch variable.
- (init_exception_processing): The second argument to
- __throw_type_match is ptr_type_node.
-
- Fri May 6 07:18:54 1994 Chip Salzenberg <chip@fin.uucp>
-
- [ change propagated from c-decl.c of snapshot 940429 ]
- * cp/decl.c (finish_decl): Setting asmspec_tree should not
- zero out the old RTL.
-
-Fri May 6 01:25:38 1994 Mike Stump <mrs@cygnus.com>
-
- Add alpha exception handling support to the compiler.
- Quick and dirty backend in except.c.
-
- * cp/*: Remove most remnants of old exception handling support.
- * decl.c (finish_function): Call expand_exception_blocks to put
- the exception hanlding blocks at the end of the function.
- * dec.c (hack_incomplete_structures): Make sure expand_decl_cleanup
- comes after expand_decl_init.
- * except.c: Reimplementation.
- * expr.c (cplus_expand_expr): Handle THROW_EXPRs.
- * lex.c (init_lex): Always have catch, try and throw be reserved
- words, so that we may always parse exception handling.
- * parse.y: Cleanup to support new interface into exception handling.
- * tree.def (THROW_EXPR): Add.
-
-Thu May 5 17:35:37 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y (simple_stmt, for loops): Use implicitly_scoped_stmt.
- (various): Lose .kindof_pushlevel and partially_scoped_stmt.
-
-Thu May 5 16:17:27 1994 Kung Hsu <kung@mexican.cygnus.com>
-
- * parse.y (already_scoped_stmt): move expand_end_binding() to
- fix the unmatched LBB/LBE in stabs.
-
-Thu May 5 14:36:17 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (set_nested_typename): Set TREE_MANGLED on the new
- identifiers.
- (pushdecl): Check TREE_MANGLED.
- (xref_tag): Likewise.
- * cp-tree.h (TREE_MANGLED): This identifier is a
- DECL_NESTED_TYPENAME (named to allow for future use to denote
- mangled function names as well).
-
- Implement inconsistency checking specified in [class.scope0].
- * decl.c (lookup_name_real): Don't set ICV here after all.
- (finish_enum): Also set the type of the enumerators themselves.
- (build_enumerator): Put the CONST_DECL in the list instead of its
- initial value.
- (pushdecl_class_level): Check inconsistent use of a name in the
- class body.
- * class.c (finish_struct): Check inconsistent use of a name in the
- class body. Don't set DECL_CONTEXT on types here anymore.
- * parse.y (qualified_type_name): Note that the identifier has now
- been used (as a type) in the class body.
- * lex.c (do_identifier): Note that the identifier has now been used
- (as a constant) in the class body.
- * error.c (dump_decl): Print type and enum decls better.
-
-Thu May 5 09:35:35 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * typeck.c (build_modify_expr): Warn about assignment to `this'.
-
-Wed May 4 15:55:49 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * init.c (build_delete): Use the global operator delete when
- requested.
-
- * decl.c (lookup_name_real): If we find the type we're looking in a
- base class while defining a class, set IDENTIFIER_CLASS_VALUE for
- the type.
-
- * class.c (finish_struct): Remove a couple of dependencies on
- language linkage.
-
- * decl.c (pushtag): Classes do nest in extern "C" blocks.
- (pushdecl): Only set DECL_NESTED_TYPENAME on the canonical one for
- the type.
- (pushtag): Remove another dependency on the language linkage.
-
- * lex.c (cons_up_default_function): Don't set DECL_CLASS_CONTEXT to
- a const-qualified type.
-
- * decl.c (push_overloaded_decl): Throw away built-in decls here.
- (duplicate_decls): Instead of here.
-
-Wed May 4 15:27:40 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * typeck.c (get_member_function_from_ptrfunc): Do The Right
- Thing (I hope) if we're using thunks.
-
-Wed May 4 13:52:38 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y (specialization): aggr template_type_name ';'.
- (named_class_head_sans_basetype): Use it.
- (explicit_instantiation): Likewise.
- (tmpl.2): Revert.
-
- * cvt.c (build_type_conversion_1): Use convert_for_initialization,
- rather than convert, to do conversions after the UDC.
-
- * cp-tree.h (SHARED_MEMBER_P): This member is shared between all
- instances of the class.
-
- * search.c (lookup_field): If the entity found by two routes is the
- same, it's not ambiguous.
-
-Wed May 4 12:10:00 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * decl.c (lookup_name_real): Check for a NULL TREE_VALUE,
- to prevent the compiler from crashing ...
-
-Wed May 4 11:19:45 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * call.c (build_method_call): If we don't have an object, check
- basetype_path to figure out where to look up the function.
-
- * typeck.c (convert_for_initialization): Pass TYPE_BINFO (type) to
- build_method_call in case exp is NULL_TREE.
-
-Tue May 3 16:02:53 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- Give a vtable entries a unique named type, for the sake of gdb.
- * class.c (build_vtable_entry): The addres of a thunk now has
- type vtable_entry_type, not ptr_type_node.
- * method.c (make_thunk): Fix type of THUNK_DECL.
- * class.c (add_virtual_function, override_one_vtable): Use
- vfunc_ptr_type_node, instead of ptr_type_node.
- * cp-tree.h (vfunc_ptr_type_node): New macro.
- * decl.c (init_decl_processing): Make vtable_entry_type
- be a unique type of pointer to a unique function type.
-
-Tue May 3 09:20:44 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y (do_explicit): Sets doing_explicit to 1.
- (explicit_instantiation): Use do_explicit rather than TEMPLATE
- directly, add "do_explicit error" rule.
- (datadef): Set doing_explicit to 0 after an explicit instantiation.
- (tmpl.2): Don't instantiate if we see a ';' unless we're doing an
- explicit instantiation.
- (named_class_head_sans_basetype): Remove aggr template_type_name
- ';' again.
-
-Mon May 2 23:17:21 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * search.c (lookup_nested_tag): Lose.
-
- * decl2.c (grokfield): Set DECL_CONTEXT on TYPE_DECLs.
- (lookup_name_nonclass): Lose.
-
- * decl.c (poplevel_class): Add force parameter.
- (lookup_name_real): Fix handling of explicit scoping which specifies
- a class currently being defined. Add 'nonclass' argument.
- (lookup_name, lookup_name_nonclass): Shells for lookup_name_real.
-
- * class.c (finish_struct): Don't unset IDENTIFIER_CLASS_VALUEs here.
- (popclass): Force clearing of IDENTIFIER_CLASS_VALUEs if we're being
- called from finish_struct.
-
-Mon May 2 19:06:21 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * decl.c (init_decl_processing), cp-tree.h: Removed memptr_type.
- (It seeems redundant, given build_ptrmemfunc_type.)
- * typeck.c (get_member_function_from_ptrfunc), gc.c (build_headof,
- build_classof): Use vtable_entry_type instead of memptr_type.
- * method.c (emit_thunk): Call poplevel with functionbody==0
- to prevent DECL_INITIAL being set to a BLOCK.
-
-Mon May 2 15:02:11 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y (named_class_head_sans_basetype): Add "aggr
- template_type_name ';'" rule for forward declaration of
- specializations.
-
-Mon May 2 15:02:11 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * class.c (instantiate_type): Deal with pmf's.
-
- * Make-lang.in (cc1plus): Don't depend on OBJS or BC_OBJS, since
- stamp-objlist does.
-
- * Makefile.in (../cc1plus): Depend on OBJDEPS.
- (OBJDEPS): Dependency version of OBJS.
-
-Mon May 2 12:51:31 1994 Kung Hsu <kung@mexican.cygnus.com>
-
- * search.c (dfs_debug_mark): unmark TYPE_DECL_SUPPRESS_DEBUG, not
- DECL_IGNORED_P.
-
-Fri Apr 29 12:29:56 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * class.c (finish_struct): Clear out memory of local tags. And
- typedefs.
-
- * decl2.c (grokclassfn): Don't set DECL_CONTEXT to a cv-qualified
- type.
- * search.c (get_matching_virtual): Be more helpful in error message.
-
- * *: Use DECL_ARTIFICIAL (renamed from DECL_SYNTHESIZED).
-
- * lex.c (default_assign_ref_body): Expect TYPE_NESTED_NAME to work.
- (default_copy_constructor_body): Likewise.
-
- * class.c (finish_struct): Don't gratuitously create multiple decls
- for nested classes.
-
-Thu Apr 28 23:39:38 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- Avoid clobbering the arg types of other functions when reverting
- static member functions.
- * decl.c (revert_static_member_fn): Rearrange arguments, don't
- require values for 'fn' and 'argtypes', add warning to comment
- above.
- (decls_match): Rearrange arguments in call to rsmf.
- (grok_op_properties): Don't pass values for fn and argtypes.
- * pt.c (instantiate_template): Don't pass values for fn and argtypes.
-
-Thu Apr 28 16:29:11 1994 Doug Evans <dje@canuck.cygnus.com>
-
- * Make-lang.in (cc1plus): Depend on stamp-objlist.
- * Makefile.in (BC_OBJS): Delete.
- (OBJS): Cat ../stamp-objlist to get language independent files.
- Include ../c-common.o.
- (../cc1plus): Delete reference to BC_OBJS.
-
-Thu Apr 28 02:12:08 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * search.c (compute_access): No really, deal with static members
- properly. Would I lie to you?
-
- Implement lexical hiding of function declarations.
- * pt.c (tsubst): Use lookup_name to look for function decls to guide
- instantiation.
- * method.c (build_opfncall): Use lookup_name_nonclass to look for
- non-member functions.
- * init.c (do_friend): Use lookup_name_nonclass to look for
- functions.
- * error.c (ident_fndecl): Use lookup_name to look for functions.
- * decl2.c (lookup_name_nonclass): New function, skips over
- CLASS_VALUE.
- * decl.c (struct binding_level): Lose overloads_shadowed field.
- (poplevel): Don't deal with overloads_shadowed.
- (push_overloaded_decl): Do lexical hiding for functions.
- * class.c (instantiate_type): Don't check non-members if we have
- members with the same name.
- * call.c (build_method_call): Use lookup_name_nonclass instead of
- IDENTIFIER_GLOBAL_VALUE to check for non-member functions.
- (build_overload_call_real): Likewise.
-
- * decl.c (duplicate_decls): Check for ambiguous overloads here.
- (push_overloaded_decl): Instead of here.
-
- * decl.c (pushdecl): Back out Chip's last change.
-
- * decl.c (grok_op_properties): operators cannot be static members.
-
- * cp-tree.h (DECL_SYNTHESIZED): DECL_SOURCE_LINE == 0
- (SET_DECL_SYNTHESIZED): DECL_SOURCE_LINE = 0
- * lex.c (cons_up_default_function): Use SET_DECL_SYNTHESIZED.
-
- * method.c (do_inline_function_hair): Don't put friends of local
- classes into global scope, either.
-
- * typeck2.c (build_functional_cast): Don't look for a function call
- interpretation.
-
-Thu Apr 28 15:19:46 1994 Mike Stump <mrs@cygnus.com>
-
- * cp-tree.h: disable use of backend EH.
-
-Wed Apr 27 21:01:24 1994 Doug Evans <dje@canuck.cygnus.com>
-
- * Make-lang.in (c++.distdir): mkdir tmp/cp first.
- * Makefile.in (INCLUDES): Move definition to same place as
- parent makefile.
- (ALLOCA): Define.
- (OLDAR_FLAGS): Delete.
- (OLDCC): Define.
- (DIR): Delete.
- (CLIB): Define.
- (####site): Delete.
- (SUBDIR_USE_ALLOCA): Don't use ALLOCA if compiling with gcc.
-
-Wed Apr 27 19:10:04 1994 Kung Hsu <kung@mexican.cygnus.com>
-
- * decl.c (xref_tag): not to use strstr(), it's not available on
- all platforms.
-
-Wed Apr 27 18:10:12 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * class.c (finish_struct): Resolve yet another class/pmf confusion.
-
- * call.c (build_overload_call_real): Don't take the single-function
- shortcut if we're dealing with an overloaded operator.
-
-Wed Apr 27 17:35:37 1994 Mike Stump <mrs@cygnus.com>
-
- * search.c (get_base_distance): Search the virtual base class
- binfos, incase someone wants to convert to a real virtual base
- class.
- * search.c (expand_indirect_vtbls_init): Use convert_pointer_to_real
- instead of convert_pointer_to, as it now will work.
-
-Wed Apr 27 15:36:49 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cvt.c (convert_to_reference): Don't complain about casting away
- const and volatile.
-
- * typeck.c (build_unary_op): References are too lvalues.
-
-Wed Apr 27 13:58:05 1994 Mike Stump <mrs@cygnus.com>
-
- * class.c (override_one_vtable): We have to prepare_fresh_vtable
- before we modify it, not after, also, we cannot reuse an old vtable,
- once we commit to a new vtable. Implement ambiguous overrides in
- virtual bases as abstract. Hack until we make the class
- ill-formed.
-
-Wed Apr 27 01:17:08 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y (unary_expr): Expand new_placement[opt] and
- new_initializer[opt] inline.
-
- * search.c (lookup_fnfields): Don't throw away the inheritance
- information here, either.
- (compute_access): Handle static members properly.
-
- * init.c (build_member_call): Always set basetype_path, and pass it
- to lookup_fnfields.
-
- * search.c (lookup_field): Deal properly with the case where
- xbasetype is a chain of binfos; don't throw away the inheritance
- information.
- (compute_access): protected_ok always starts out at 0.
-
- * init.c (resolve_offset_ref): Don't cast `this' to the base type
- until we've got our basetype_path.
-
- * cp-tree.h (IS_OVERLOAD_TYPE): aggregate or enum.
-
- * cvt.c (build_up_reference): Use build_pointer_type rather than
- TYPE_POINTER_TO.
-
- * call.c (convert_harshness_ansi): Call type_promotes_to for reals
- as well.
-
- * cvt.c (type_promotes_to): Retain const and volatile, add
- float->double promotion.
-
- * decl.c (grokdeclarator): Don't bash references to arrays into
- references to pointers in function parms. Use type_promotes_to.
-
-Tue Apr 26 23:44:36 1994 Mike Stump <mrs@cygnus.com>
-
- Finish off Apr 19th work.
-
- * class.c (finish_struct_bits): Rename has_abstract_virtuals to
- might_have_abstract_virtuals.
- * class.c (strictly_overrides, override_one_vtable,
- merge_overrides): New routines to handle virtual base overrides.
- * class.c (finish_struct): Call merge_overrides to handle overrides
- in virtual bases.
-
-Tue Apr 26 12:45:53 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (build_function_call): Call build_function_call_real with
- LOOKUP_NORMAL.
-
- * *: Don't deal with TYPE_EXPRs.
-
- * tree.c (lvalue_p): If the type of the expression is a reference,
- it's an lvalue.
-
- * cvt.c (convert_to_reference): Complain about passing const
- lvalues to non-const references.
- (convert_from_reference): Don't arbitrarily throw away const and
- volatile on the target type.
-
- * parse.y: Simplify and fix rules for `new'.
-
- * decl.c (grok_op_properties): operator void is illegal.
-
-Mon Apr 25 02:36:28 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y (components): Anonymous bitfields can still have declspecs.
-
- * decl.c (pushdecl): Postpone handling of function templates like we
- do C functions.
-
- * search.c (expand_indirect_vtbls_init): Fix infinite loop when
- convert_pointer_to fails.
-
- * call.c (compute_conversion_costs_ansi): A user-defined conversion
- by itself is better than that UDC followed by standard conversions.
- Don't treat integers and reals specially.
-
- * cp-tree.h: Declare flag_ansi.
-
- * typeck.c (c_expand_return): pedwarn on return in void function
- even if the expression is of type void.
- (build_c_cast): Don't do as much checking for casts to void.
- (build_modify_expr): pedwarn about array assignment if this code
- wasn't generated by the compiler.
-
- * tree.c (lvalue_p): A comma expression is an lvalue if its second
- operand is.
-
- * typeck.c (default_conversion): Move code for promoting enums and
- ints from here.
- * cvt.c (type_promotes_to): To here.
- * call.c (convert_harshness_ansi): Use type_promotes_to. Also fix
- promotion semantics for reals.
-
-Sun Apr 24 16:52:51 1994 Doug Evans <dje@canuck.cygnus.com>
-
- * Make-lang.in (c++.install-common): Check for g++-cross.
- * Makefile.in: Remove Cygnus cruft.
- (config.status): Delete.
- (RTL_H): Define.
- (TREE_H): Use complete pathname, some native makes have minimal
- VPATH support.
- (*.o): Use complete pathname to headers in parent dir.
- (doc, info, dvi): Delete.
-
-Sun Apr 24 16:52:51 1994 Doug Evans <dje@canuck.cygnus.com>
-
- * Make-lang.in (c++.install-common): Check for g++-cross.
- * Makefile.in: Remove Cygnus cruft.
- (config.status): Delete.
- (RTL_H): Define.
- (TREE_H): Use complete pathname, some native makes have minimal
- VPATH support.
- (*.o): Use complete pathname to headers in parent dir.
- (doc, info, dvi): Delete.
-
-Sun Apr 24 00:47:49 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (pushdecl): Avoid redundant warning on redeclaring function
- with different return type.
- (decls_match): Compare return types strictly.
-
-Fri Apr 22 12:55:42 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cvt.c (build_type_conversion): Do try to convert through other
- pointers. This will fail if the class defines multiple pointer
- conversions.
-
- * error.c (dump_type_prefix): Print out pointers to arrays properly.
- (dump_type_suffix): Likewise. (was 'int *[]', now 'int (*)[]')
-
- * typeck.c (build_unary_op): Disallow ++/-- on pointers to
- incomplete type.
-
- * decl.c (duplicate_decls): Check mismatched TREE_CODES after
- checking for shadowing a builtin. If we're redeclaring a builtin
- function, bash the old decl to avoid an ambiguous overload.
-
- * cvt.c (convert_to_reference): Don't force arrays to decay here.
-
- * tree.c (lvalue_p): A MODIFY_EXPR is an lvalue.
-
- * decl.c (duplicate_decls): Don't assume that the decls will have
- types.
-
- Mon Apr 18 11:35:32 1994 Chip Salzenberg <chip@fin.uucp>
-
- [ cp/* changes propagated from c-* changes in 940318 snapshot ]
- * c-decl.c (pushdecl): Warn if type mismatch with another external decl
- in a global scope.
-
- Fri Apr 22 06:38:56 1994 Chip Salzenberg <chip@fin.uucp>
-
- * cp/typeck2.c (signature_error): Use cp_error for "%T".
-
- Mon Apr 18 11:59:59 1994 Chip Salzenberg <chip@fin.uucp>
-
- [ cp/* changes propagated from c-* changes in 940415 snapshot ]
- * cp/decl.c (duplicate_decls, pushdecl, builtin_function):
- Use DECL_FUNCTION_CODE instead of DECL_SET_FUNCTION_CODE.
-
- Mon Apr 18 11:55:18 1994 Chip Salzenberg <chip@fin.uucp>
-
- [ cp/* changes propagated from c-* changes in 940409 snapshot ]
- * cp/decl.c (duplicate_decls): Put new type in same obstack as
- old ones, or permanent if old ones in different obstacks.
-
- Mon Apr 18 11:48:49 1994 Chip Salzenberg <chip@fin.uucp>
-
- [ cp/* changes propagated from c-* changes in 940401 snapshot ]
- * cp/parse.y (attrib): Handle string args as expressions,
- merging the two rules. `mode' attribute now takes a string arg.
- Delete the rule for an identifier as arg.
-
- Mon Apr 18 11:24:00 1994 Chip Salzenberg <chip@fin.uucp>
-
- [ cp/* changes propagated from c-* changes in 940312 snapshot ]
- * cp/typeck.c (pointer_int_sum): Multiplication should be done signed.
- (pointer_diff): Likewise the division.
-
- Sun Mar 6 19:43:39 1994 Chip Salzenberg <chip@fin.uucp>
-
- [ cp/* changes propagated from c-* changes in 940304 snapshot ]
- * cp/decl.c (finish_decl): Issue warning for large objects,
- if requested.
-
- Sat Feb 19 22:20:32 1994 Chip Salzenberg <chip@fin.uucp>
-
- [ cp/* changes propagated from c-* changes in 940218 snapshot ]
- * cp/parse.y (attrib): Handle attribute ((section ("string"))).
- * cp/decl.c (duplicate_decls): Merge section name into new decl.
-
- Tue Feb 8 09:49:17 1994 Chip Salzenberg <chip@fin.uucp>
-
- [ cp/* changes propagated from c-* changes in 940206 snapshot ]
- * cp/typeck.c (signed_or_unsigned_type): Check for any
- INTEGRAL_TYPE_P not just INTEGER_TYPE.
-
- Mon Dec 6 13:35:31 1993 Norbert Kiesel (norbert@i3.INformatik.rwth-aachen.DE)
-
- * cp/decl.c (finish_enum): Start from 0 when determining precision
- for short enums.
-
- Fri Dec 3 17:07:58 1993 Ralph Campbell (ralphc@pyramid.COM)
-
- * cp/parse.y (unary_expr): Look at $1 for tree_code rather than
- casting $$.
-
- Wed Nov 17 19:22:09 1993 Chip Salzenberg <chip@fin.uucp>
-
- * cp/typeck.c (build_binary_op_nodefault): Propagate code
- from C front-end to optimize unsigned short division.
- (build_conditional_expr): Fix bug in "1 ? 42 : (void *) 8".
-
- Wed Nov 17 19:17:18 1993 Chip Salzenberg <chip@fin.uucp>
-
- * cp/call.c (convert_harshness_ansi): Given an (e.g.) char
- constant, prefer 'const char &' to 'int'.
-
- Wed Feb 3 13:11:48 1993 Chip Salzenberg <chip@fin.uucp>
-
- * cp/class.c (finish_struct_methods): Handle multiple
- constructors in fn_fields list.
-
-Fri Apr 22 12:48:10 1994 Kung Hsu <kung@mexican.cygnus.com>
-
- * class.c (finish_struct): use TYPE_DECL_SUPPRESS_DEBUG to flag
- types not to be dumped in stabs, like types in #pragma interface.
- * decl.c (init_decl_processing): use TYPE_DECL_SUPPRESS_DEBUG to
- mark unknown type.
-
-Fri Apr 22 03:27:26 1994 Doug Evans <dje@cygnus.com>
-
- * Language directory reorganization.
- See parent makefile.
-
-Thu Apr 21 18:27:57 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * cp-tree.h (THUNK_DELTA): It is normally negative, so
- use signed .i variant of frame_size rather than unsigned .u.
- * cp-tree.h (VTABLE_NAME_FORMAT): If flag_vtable_thunks,
- use "VT" rather than "vt" due to binary incompatibility.
- * class.c (get_vtable_name): Use strlen of VTABLE_NAME_FORMAT,
- rather than sizeof, since it is now an expression.
- * class.c (modify_one_vtable): Modify to skip initial element
- containing a count of the vtable.
-
-Thu Apr 21 00:09:02 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * lex.c (check_newline): Force interface_unknown on main input file.
-
- * pt.c (do_pending_expansions): Always emit functions that have been
- explicitly instantiated.
- (do_function_instantiation): Set DECL_EXPLICITLY_INSTANTIATED.
- (do_type_instantiation): Set CLASSTYPE_VTABLE_NEEDS_WRITING and
- DECL_EXPLICITLY_INSTANTIATED on all my methods.
- * parse.y (explicit_instantiation): Call do_type_instantiation for
- types.
- * decl2.c (finish_vtable_vardecl): Call import_export_vtable.
- * decl.c (start_function): Don't set DECL_EXTERNAL on a function
- that has been explicitly instantiated.
- * cp-tree.h (DECL_EXPLICITLY_INSTANTIATED): Alias for
- DECL_LANG_FLAG_4.
- * class.c: Move import_export_vtable to decl2.c, and comment out all
- uses.
-
-Wed Apr 20 16:51:06 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * lex.c (process_next_inline): Don't muck with DECL_INLINE.
- (do_pending_inlines): Likewise.
-
-Tue Apr 19 22:25:41 1994 Mike Stump <mrs@cygnus.com>
-
- Reimplement vtable building, and most vtable pointer setting.
- Allows for earier maintenance, easier understandability, and most
- importantly, correct semantics.
-
- * class.c (build_vtable): Removed unneeded
- SET_BINFO_VTABLE_PATH_MARKED.
- * class.c (prepare_fresh_vtable): Likewise. Added argument.
- * class.c (modify_vtable_entry): General cleanup.
- * class.c (related_vslot, is_normal, modify_other_vtable_entries,
- modify_vtable_entries): Removed.
- * class.c (add_virtual_function): General cleanup.
- * class.c (finish_base_struct): Setup BINFO_VTABLE and
- BINFO_VIRTUALS as early as we can, so that modify_all_vtables can
- work.
- * class.c (finish_vtbls): New routine, mostly from
- unmark_finished_struct.
- * class.c (overrides): New routine.
- * class.c (modify_one_vtable): New routine, mostly from
- modify_other_vtable_entries and modify_vtable_entries.
- * class.c (modify_all_direct_vtables, modify_all_indirect_vtables,
- modify_all_vtables): New routines.
- * class.c (finish_struct): Added arguemnt to prepare_fresh_vtable
- call. General cleanup on how pending_hard_virtuals are handled.
- General cleanup on modifying vtables. Use finish_vtbls, instead of
- unmark_finished_struct.
- * cp-tree.h (init_vtbl_ptrs, expand_direct_vtbls_init,
- get_first_matching_virtual, get_matching_virtual,
- expand_vbase_vtables_init, expand_indirect_vtbls_init): Update.
- * cvt.c (convert_pointer_to_real): cleanup error message.
- * decl.c (grokfndecl): General cleanup.
- * decl.c (finish_function): Change init_vtbl_ptrs call to
- expand_direct_vtbls_init. Change expand_vbase_vtables_init call to
- expand_indirect_vtbls_init.
- * init.c (expand_virtual_init): Remove unneeded argument.
- * init.c (init_vtbl_ptrs): Rename to expand_direct_vtbls_init, added
- two arguments to make more general. Made more general. Now can be
- used for vtable pointer initialization from virtual bases.
- * init.c (emit_base_init): Change expand_vbase_vtables_init call to
- expand_indirect_vtbls_init. Change init_vtbl_ptrs call to
- expand_direct_vtbls_init.
- * init.c (expand_virtual_init): General cleanup.
- * init.c (expand_default_init): Change expand_vbase_vtables_init
- call to expand_indirect_vtbls_init.
- * init.c (expand_recursive_init_1): Change expand_vbase_vtables_init
- call to expand_indirect_vtbls_init.
- * init.c (expand_recursive_init): Change expand_vbase_vtables_init
- call to expand_indirect_vtbls_init.
- * search.c (get_first_matching_virtual): Rename to
- get_matching_virtual. General cleanup and remove setting of
- DECL_CONTEXT. That is now done in a cleaner way in
- modify_vtable_entry and add_virtual_function.
- * search.c (expand_vbase_vtables_init): Rename to
- expand_indirect_vtbls_init. General cleanup. Use
- expand_direct_vtbls_init to do hard work. Ensures that _all_ vtable
- pointers from virtual bases are set up.
- * search.c (bfs_unmark_finished_struct, unmark_finished_struct):
- Removed.
-
- * *.[chy]: Remove support for VTABLE_USES_MASK.
-
-Tue Apr 19 12:51:59 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cvt.c (convert_to_reference): Use NOP_EXPRs to switch between
- reference and pointer types instead of bashing the types directly.
-
- * call.c (build_overload_call_real): Use the TREE_CODE to determine
- whether the function is overloaded or not, rather than
- TREE_OVERLOADED.
- * *: Remove all uses of TREE_OVERLOADED.
-
- * decl.c (grokdeclarator): Only complain about initializing const
- fields when -ansi or -pedantic.
-
-Tue Apr 19 12:42:42 1994 Doug Evans <dje@canuck.cygnus.com>
-
- * cp-tree.h (THUNK_DELTA): frame_size is now a union.
-
-Mon Apr 18 00:17:13 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- Do overloading on a block-by-block basis, not function-by-function.
- * decl.c: Lose overloads_to_forget.
- (struct binding_level): Add overloads_shadowed field.
- (poplevel): Restore overloads_shadowed.
- (push_overloaded_decl): Use overloads_shadowed instead of
- overloads_to_forget.
- (finish_function): Don't look at overloads_to_forget.
-
- Copy enum_overflow logic from c-decl.c.
- * decl.c (start_enum): Initialize enum_overflow.
- (build_enumerator): Use enum_overflow. Also use current_scope().
-
- * search.c (current_scope): Move Brendan's comment from
- build_enumerator here.
-
- * typeck.c (convert_for_assignment): Change warnings to pedwarns for
- discarding const/volatile.
-
-Sat Apr 16 01:18:21 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (comp_target_parms): Accept TEMPLATE_TYPE_PARMs on the rhs.
- (comp_target_types): Likewise.
-
- * decl.c (lookup_name): Don't unset got_scope here.
-
- * spew.c (yylex): Only replace yylval with the TYPE_NESTED_NAME if
- got_scope != NULL_TREE.
-
-Fri Apr 15 16:36:33 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- Horrible kludge to prevent templates from being instantiated by
- their base classes.
- * parse.y (template_instantiate_once): Unset TYPE_BEING_DEFINED
- before we get to left_curly.
- * pt.c (instantiate_class_template): Set TYPE_BEING_DEFINED.
-
- * error.c (dump_decl): If it's a typedef, print out the name of the
- decl, not just the underlying type.
-
- * decl.c (pushdecl): If the old duplicate decl was a TYPE_DECL,
- update the IDENTIFIER_TYPE_VALUE of its name.
-
- * decl2.c (finish_file): When processing the initializer for a
- static member, pretend that the dummy function is a member of the
- same class.
-
-Fri Apr 15 15:56:35 1994 Kung Hsu <kung@mexican.cygnus.com>
-
- * class.c (build_vtable_entry): revert Apr 4 change.
- * decl2.c (mark_vtable_entries): replace pure virtual function
- decl with abort's.
-
-Fri Apr 15 13:49:33 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (build_conditional_expr): Pedwarn on pointer/integer
- mismatch, and don't pedwarn on 0/function pointer mismatch.
-
- * typeck2.c (digest_init): Lose code for special handling of unions.
- (process_init_constructor): Since they're handled just fine here.
- Pedwarn on excess elements.
-
- * decl2.c (grokfield): Complain about local class method declaration
- without definition.
-
-Fri Apr 15 13:19:40 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * method.c (emit_thunk): Add extern declaration for
- current_call_is_indirect (needed for hppa).
-
-Thu Apr 14 16:12:31 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- Improve local class support; allow classes in different blocks to
- have the same name.
- * decl.c (pushtag): Support local classes better.
- (pushdecl_nonclass_level): New function for pushing mangled decls of
- nested types into the appropriate scope.
- (xref_defn_tag): Use pushdecl_nonclass_level instead of
- pushdecl_top_level.
- (grokfndecl): Don't mess with IDENTIFIER_GLOBAL_VALUE for local
- class methods.
- * method.c (do_inline_function_hair): Likewise.
-
- * class.c (finish_struct): It is legal for a class with no
- constructors to have nonstatic const and reference members.
-
-Thu Apr 14 07:15:11 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * decl.c (push_overloaded_decl): Avoid giving errors about
- built-ins, since duplicate_decls will have given warnings/errors
- for them.
-
-Thu Apr 14 03:45:12 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cvt.c (convert_to_reference): Warn about casting pointer type to
- reference type when this is probably not what they wanted.
-
-Wed Apr 13 13:12:35 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * decl.c (finish_decl): Don't mindlessly set TREE_USED for
- static consts any more (toplev.c has now been modified to
- not emit warnings if they are unused).
-
-Wed Apr 13 00:22:35 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (grok_op_properties): If op new/delete get here with
- METHOD_TYPEs, do a revert_static_member_fn.
-
- * cp-tree.h (IDENTIFIER_CLASS_TYPE_VALUE): Lose.
- * init.c (is_aggr_typedef): Don't look at
- IDENTIFIER_CLASS_TYPE_VALUE.
- (get_aggr_from_typedef): Likewise.
- (get_type_value): Likewise.
- * call.c (build_scoped_method_call): Don't rely on overloaded
- template names having IDENTIFIER_CLASS_VALUE set.
-
- * parse.y (component_decl_1, fn.def2): Revert rules for
- constructors.
- (component_decl_1, fn.def2): Use $1 instead of $$, since $$ is being
- clobbered.
-
- * decl.c (start_function): Only warn about `void main()' if pedantic
- || warn_return_type.
-
-Tue Apr 12 02:14:17 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- Clean up overloading of the template name.
- * class.c (pushclass): overload the template name whenever pushing
- into the scope of a template class, not just if it is
- uninstantiated.
- (popclass): Correspondingly.
- * search.c (push_class_decls): Don't overload_template_name.
- * pt.c (overload_template_name): Don't set IDENTIFIER_LOCAL_VALUE or
- DECL_CONTEXT on things.
- * parse.y (left_curly): Don't overload_template_name.
- * class.c (finish_struct): Don't undo_template_name_overload.
-
- * method.c (build_opfncall): Only pass one argument to global op
- delete.
-
- * call.c (build_method_call): Use TYPE_VEC_DELETE_TAKES_SIZE to
- decide how many arguments to use for vec delete.
-
- * decl.c (grok_op_properties): Be consistent in modifying
- current_class_type.
- (grokdeclarator): Only complain about function decls with no return
- type if we're being pedantic.
-
-Mon Apr 11 00:10:53 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- Add support for operator new [] and operator delete [].
-
- * tree.def: Add VEC_NEW_EXPR and VEC_DELETE_EXPR.
- * ptree.c (print_lang_type): Indicate vec new/delete.
- * parse.y: Support vec new/delete.
- * method.c (build_decl_overload): Deal with vec new/delete.
- (build_opfncall): Likewise.
- * lex.c (init_lex): Set up values of ansi_opname and opname_tab for
- vec new/delete. vec new uses "__vn", and vec delete uses "__vd".
- * init.c (init_init_processing): Set up BIVN and BIVD.
- (do_friend): Don't clean up after mistaken setting of TREE_GETS_NEW,
- since it doesn't happen any more.
- (build_new): Support vec new. Always call something.
- (build_x_delete): Support vec delete.
- (build_vec_delete): Lose dtor_dummy argument, add use_global_delete,
- and pass it to build_x_delete.
- * decl2.c (delete_sanity): Don't change behavior by whether or not
- the type has a destructor. Pass use_global_delete to
- build_vec_delete.
- (coerce_delete_type): Make sure that the type returned has a first
- argument of ptr_type_node.
- * decl.c (init_decl_processing): Also declare the global vec
- new/delete.
- (grokdeclarator): Also force vec new/delete to be static.
- (grok_op_properties): Note presence of vec new/delete, and play with
- their args. If vec delete takes the optional size_t argument, set
- TYPE_VEC_DELETE_TAKES_SIZE.
- * cp-tree.h (TYPE_GETS_{REG,VEC}_DELETE): New macros to simplify
- checking for one delete or the other.
- (lang_type): gets_new and gets_delete are now two bits long. The
- low bit is for the non-array version. Lose gets_placed_new.
- (TYPE_VEC_DELETE_TAKES_SIZE): New macro indicating that the vec
- delete defined by this class wants to know how much space it is
- deleting.
- (TYPE_VEC_NEW_USES_COOKIE): New macro to indicate when vec new must
- add a header containing the number of elements in the vector; i.e.
- when the elements need to be destroyed or vec delete wants to know
- the size.
- * class.c (finish_struct_methods): Also check for overloading vec
- delete.
- * call.c (build_method_call): Also delete second argument for vec
- delete.
-
- * decl.c (grokdeclarator): Correct complaints again.
- (grokdeclarator): Fix segfault on null declarator.
- (decls_match): Also accept redeclaration with no arguments if both
- declarations were in C context. Bash TREE_TYPE (newdecl) here.
- (duplicate_decls): Instead of here.
-
- * parse.y (nested_name_specifier_1): Lose rules for dealing with
- syntax errors nicely, since they break parsing of 'const i;'.
-
- * decl.c (lookup_name): if (got_scope == current_class_type)
- val = IDENTIFIER_CLASS_VALUE (name).
-
- * search.c (lookup_nested_tag): Look in enclosing classes, too.
-
- * spew.c (yylex): Only look one character ahead when checking for a
- SCOPE.
-
- * lex.c (check_newline): Read first nonwhite char before
- incrementing lineno.
-
- * decl.c (grokdeclarator): Don't claim that typedefs are variables
- in warning.
-
- * parse.y: Divide up uses of unqualified_id into
- notype_unqualified_id and unqualified_id, so that TYPENAME can be
- used as an identifier after an object.
-
- * class.c (push_nested_class): Don't push into non-class scope.
-
- * decl.c (grokdeclarator): If an identifier could be a type
- conversion operator, but has no associated type, it's not a type
- conversion operator.
-
- * pt.c (unify): Check for equality of constants better.
-
- * decl.c (grokdeclarator): Don't complain about access decls.
-
-Sun Apr 10 02:39:55 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (grokdeclarator): pedwarn about data definitions without
- types here.
-
- * parse.y (datadef): Don't pedwarn about decls without types here,
- since that is valid for functions.
- (fn.def2, component_decl): Support constructors with declmods again.
- (nomods_initdecls): For decls without any mods, so that we don't try
- to get declspecs from some arbitrary $0.
-
- * search.c (lookup_field): Use cp_error.
-
- * parse.y (nested_name_specifier_1): Don't check aggr/non-aggr type
- here; it breaks destructors for non-aggr types.
-
- * decl.c (lookup_name): Only look for TYPE_DECLs in base classes of
- a type being defined, like the comment says.
- If got_scope is not an aggregate, just return NULL_TREE.
-
- * pt.c (create_nested_upt): Kung's code for creating types nested
- within uninstantiated templates now lives here (it used to live in
- hack_more_ids). It needs to be expanded.
-
- * parse.y: Stop calling see_typename so much.
-
- * decl.c (lookup_name): Deal with TTPs and UPTs.
-
- * lex.c (real_yylex): Don't set looking_for_typename just because we
- saw a 'new'.
- (dont_see_typename): #if 0 out.
-
- * spew.c (yylex): Increment looking_for_typename if the next
- character is SCOPE, rather than setting it to 1; this way, the value
- from seeing an aggr specifier will not be lost. This kinda relies
- on looking_for_typename never being < 0, which is now true.
-
- * parse.y (nested_name_specifier_1): Accept TEMPLATE_TYPE_PARMs,
- too.
- (named_class_head_sans_basetype): Accept template types, too. Oops.
-
-Fri Apr 8 16:39:35 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl2.c (reparse_decl_as_expr1): Handle SCOPE_REFs.
-
- * parse.y: Lose START_DECLARATOR.
-
- * search.c (lookup_nested_tag): New function to scan CLASSTYPE_TAGS
- for a class.
-
- * parse.y: Simplify fn.def2 and component_decl. Support 'enum
- A::foo' syntax. Catch invalid scopes better.
-
- * parse.y, lex.c: lose TYPENAME_COLON.
-
- * decl2.c (groktypefield): #if 0 out.
-
- * decl.c (lookup_name): If the type denoted by got_scope is
- currently being defined, look in CLASSTYPE_TAGS rather than FIELDS.
-
- * class.c (push_nested_class): Don't try to push into
- error_mark_node.
-
-Fri Apr 8 07:26:36 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * Makefile.in (stamp-parse): Update count of conflicts to 33.
-
-Thu Apr 7 17:47:53 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- A saner implementation of nested types that treats template types
- no differently from non-template types. There are still some
- shortcomings of our system; most notably, it is difficult to look
- for a nested type that is hidden by another name, because of the way
- we keep track of hidden types. But this shouldn't be a problem for
- just about anyone. Perhaps lookup_field should be fixed up a bit.
-
- * spew.c: Moved handling of nested types/scoping from the lexer
- into the parser. Removed variable template_type_seen_before_scope.
- Removed functions frob_identifier, hack_more_ids, and various cruft
- that was #if 0'd out in the past, reducing the size of the file from
- 1146 lines to 450 lines. We can't quite do away with spew.c yet,
- though; we still need it for do_aggr () and checking for SCOPE after
- the current identifier. And setting lastiddecl.
-
- * parse.y: Moved handling of nested types/scoping from the lexer
- into the parser, using a new global variable `got_scope'. Reduced
- the number of states by 53. Implemented all uses of explicit global
- scope. Removed terminals SCOPED_TYPENAME and SCOPED_NAME. Removed
- nonterminals tmpl.1, scoped_base_class, id_scope, typename_scope,
- scoped_typename. Added nonterminals nested_type,
- qualified_type_name, complete_type_name, qualified_id, ptr_to_mem,
- nested_name_specifier, global_scope, overqualified_id, type_name.
- Changed many others. Added 9 new reduce/reduce conflicts, which are
- nested type parallels of 9 that were already in the grammar for
- non-nested types. Eight of the now 33 conflicts should be removed
- in the process of resolving the late binding between variable and
- function decls.
-
- * gxxint.texi (Parser): Update.
-
- * cp-tree.h (IS_AGGR_TYPE_CODE): Add UNINSTANTIATED_P_TYPE.
-
- * lex.h: Add decl for got_scope.
-
- * lex.c (see_typename): Claim to be the lexer when calling
- lookup_name.
-
- * decl.c (lookup_name): When called from the lexer, look at
- got_scope and looking_at_typename; otherwise don't.
-
-Thu Apr 7 22:05:47 1994 Mike Stump <mrs@cygnus.com>
-
- 31th Cygnus<->FSF merge.
-
-Thu Apr 7 17:47:53 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl2.c (mark_vtable_entries): Call this to mark all the
- entries in the vtable addressable.
- (finish_decl_parsing): Handle SCOPE_REFs.
-
- * decl.c (decls_match): Always call compparms with strict == 1.
- Handle the special case of C function redecl here.
- (duplicate_decls): Only keep the old type if the new decl takes no
- arguments.
-
- * typeck.c (compparms): Also allow t1 to be ... if strict == 0.
-
-Thu Apr 7 16:17:50 1994 Mike Stump <mrs@cygnus.com>
-
- * class.c (build_vtable_entry): Fix breakage introduced Apr 5
- 17:48:41.
-
-Wed Apr 6 16:05:10 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * init.c (build_virtual_init), search.c (build_vbase_vtables_init),
- ch-tree.h: Every place these functions were called, the result was
- immediately passed to expand_expr_stmt. Reduce redundancy by
- calling expand_expr_init *inside* these functions. These
- makes for a simpler interface, and we don't have to build
- compound expressions. Hence, rename these function to:
- expand_virtual_init and expand_vbase_vtables_init respectively.
- * init.c, decl.c: Change callers of these functions.
- * init.c, cp-tree.h (expand_virtual_init): Make static.
-
- * decl2.c (finish_file): Check TREE_PUBLIC||TREE_ADDRESSABLE
- rather than DECL_SAVED_INSNS before emitting inlines.
-
-Wed Apr 6 13:06:39 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * spew.c (init_spew): #if 0 out stuff used by arbitrate_lookup.
-
- * decl.c (duplicate_decls): If this is a new declaration of an
- extern "C" function, keep the type (for the argtypes).
- (redeclaration_error_message): Don't check DECL_LANGUAGE here.
- (decls_match): Call compparms with a value of strict dependent on
- the value of strict_prototypes for DECL_LANGUAGE (oldecl).
-
- * typeck.c (compparms): ... is only equivalent to non-promoting
- parms if we're not being strict.
-
- * parse.y (empty_parms): Don't check flag_ansi || pedantic here.
-
- * decl.c (init_decl_processing): if (flag_ansi || pedantic)
- strict_prototypes_lang_c = strict_prototypes_lang_cplusplus;
-
- * decl2.c (grok_function_init): Don't set DECL_INITIAL on pure
- virtuals.
-
-Tue Apr 5 17:48:41 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- Support for implementing vtables with thunks.
- * tree.def (THUNK_DECL): New TREE_CODE.
- * cp-tree.h (FNADDR_FROM_VTABLE_ENTRY), tree.c
- (fnaddr_from_vtable_entry): Handle flag_vtable_thunks case.
- * cp-tree.h (memptr_type): New variable.
- * class.c (build_vtable_entry): Build thunk if necessary.
- * class.c (build_vfn_ref): If using thunks, don't need
- to add delta field from vtable (there is none!).
- * decl.c: Add memptr_type as well as vtable_entry_type.
- If using thunks, the latter is just ptr_type_node.
- * gc.c, typeck.c: Use memptr_typeChange, not vtable_entry_type.
- * decl2.c (finish_vtable_vardecl): Handle thunks.
- * expr.c (cplus_expand_expr): Support THUNK_DECL.
-
- * decl.c (grokdeclarator): Set DECL_THIS_EXTERN if "extern".
- * decl.c (start_function): Set current_extern_inline based on
- DECL_THIS_EXTERN, not TREE_PUBLIC.
- * decl.c (finish_function): Call mark_inline_for_output if needed,
-
- Improve intelligence about when to emit inlines.
- * cp-tree.h (lang_decl_flags): New field saved_inline.
- * cp-tree.h (DECL_SAVED_INLINE): New macro.
- * class.c (add_virtual_function): Don't set TREE_ADDRESSABLE.
- * decl.h, decl.c (pending_addressable_inlines): Removed.
- * decl2.c (pending_addressable_inlines): Renamed to saved_inlines.
- * decl2.c (mark_inline_for_output): Do nothing if
- DECL_SAVED_INLINE; otherwise set it (and add to saved_inlines list).
- * decl2.c (finish_vtable_vardecl): SET_CLASSTYPE_INTERFACE_KNOWN
- and set CLASSTYPE_INTERFACE_ONLY if there is a non-inline virtual.
- * decl2.c (finish_file): Writing out inlines later, so we can
- also handle the ones needed for vtbales.
- * decl2.c (write_vtable_entries, finish_vtable_typedecl): Removed.
-
- * cp-tree.h, class.c, decl2.c, search.c: Remove -fvtable-hack
- and flag_vtable_hack. Use -fvtable-thunks and flag_vtable_thunks
- instead. (The rationale is that these optimizations both break binary
- compatibility, but should become the default in a future release.)
-
-Wed Apr 6 10:53:56 1994 Mike Stump <mrs@cygnus.com>
-
- * class.c (modify_vtable_entries): Never reset the DECL_CONTEXT
- of a fndecl, as we might not be from that vfield.
-
-Tue Apr 5 17:43:35 1994 Kung Hsu <kung@mexican.cygnus.com>
-
- * class.c (add_virtual_function): fix bug for pure virtual, so
- that DECL_VINDEX of the dummy decl copied won't be error.
- (see also Apr 4 change)
-
-Tue Apr 5 17:23:45 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * typeck.c (c_expand_return): Before checking that we're not
- returning the address of a local, make sure it's a VAR_DECL.
- (And don't worry about it being a TREE_LIST.)
-
-Tue Apr 5 13:26:42 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y (YYDEBUG): Always define.
- * lex.c (YYDEBUG): Likewise.
-
-Mon Apr 4 11:28:17 1994 Kung Hsu <kung@mexican.cygnus.com>
-
- * class.c (finish_struct): backup out the change below, put the
- new change for the same purpose. The change below breaks code.
-
- * class.c (finish_struct): if pure virtual, copy node and make
- RTL point to abort, then put in virtual table.
- * decl2.c (grok_function_iit): reinstate Mar 31 change.
-
-Sat Apr 2 03:12:58 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * init.c (build_new): pedwarn about newing const and volatile
- types.
-
- * tree.c (get_identifier_list): Only do the special handling
- thing if we're dealing with the main variant of the record type.
-
- * cvt.c (convert_to_reference): When converting between
- compatible reference types, use the pointer conversion machinery.
- Don't just blindly overwrite the old type.
-
-Fri Apr 1 17:14:42 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * call.c (build_method_call): When looking at global functions,
- be sure to use instance_ptr for the first argument, not some version
- of it that has been cast to a base class. Also do this before
- comparing candidates.
-
-Thu Mar 31 19:50:35 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * call.c (build_method_call): Constructors can be called for
- const objects.
-
-Thu Mar 31 16:20:16 1994 Kung Hsu <kung@mexican.cygnus.com>
-
- * decl2.c (grok_func_init): do not abort as rtl for pur virtual
- fucntions. They can be defined somewhere else.
-
-Sat Jan 23 23:23:26 1994 Stephen R. van den Berg (berg@pool.informatik.rwth-aachen.de)
-
- * decl.c (init_decl_processing): Declare __builtin_return_address
- and __builtin_frame_address for C++ as well.
-
-Thu Mar 31 12:35:49 1994 Mike Stump <mrs@cygnus.com>
-
- * typeck2.c (store_init_value): Integral constant variables are
- always constant, even when doing -fpic.
-
-Sat Jan 23 23:23:26 1994 Stephen R. van den Berg (berg@pool.informatik.rwth-aachen.de)
-
- * decl.c (redeclaration_error_message): Pass the types to
- comptypes.
-
-Wed Mar 30 21:29:25 1994 Mike Stump <mrs@cygnus.com>
-
- Cures incorrect errors about pure virtuals in a class, when they
- have been overridden in a derived class.
-
- * search.c (get_abstract_virtuals): Reimplement.
- * search.c (get_abstract_virtuals_1): New routine.
-
-Wed Mar 30 14:10:04 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * pt.c (push_template_decls): Make the pushed level pseudo
- global.
-
- * parse.y (extdefs): Don't pop everything if the current binding
- level is pseudo_global.
-
- * decl.c (pop_everything): Stop on reaching a pseudo-global
- binding level.
-
- * cp-tree.h (DECL_FUNCTION_MEMBER_P): Change to more reliable test.
-
- * decl.c (duplicate_decls): Only copy DECL_SOURCE_{FILE_LINE} if
- the old decl actually had an initializer.
-
- * {various}: Clean up gcc -W complaints.
-
- * cp-tree.h (DECL_FUNCTION_MEMBER_P): Currently defined to be
- (DECL_CONTEXT (NODE) != NULL_TREE).
-
- * parse.y (lang_extdef): Call pop_everything if necessary.
-
- * decl.c (pop_everything): New function for popping binding
- levels left over after a syntax error.
- (pushdecl): Use DECL_FUNCTION_MEMBER_P to decide whether or not
- a function is a member.
-
-Wed Mar 30 14:20:50 1994 Mike Stump <mrs@cygnus.com>
-
- Cures calling a more base base class function, when a more derived
- base class member should be called in some MI situations.
-
- * search.c (make_binfo): Use more the more specialized base
- binfos from the binfo given as the second argument to make_binfo,
- instead of the unspecialized ones from the TYPE_BINFO.
- * class.c (finish_base_struct): Likewise, update callers.
- * search.c (dfs_get_vbase_types): Likewise.
- * tree.c (propagate_binfo_offsets, layout_vbasetypes): Likewise.
- * decl.c (xref_tag): Use NULL_TREE instead of 0.
- * lex.c (make_lang_type): Likewise.
-
-Wed Mar 30 14:10:04 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (pushdecl): If pushing a C-linkage function, only do a
- push_overloaded_decl.
- (duplicate_decls): Standard overloading does not shadow built-ins.
-
-Tue Mar 29 00:54:18 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * pt.c (end_template_decl): Don't call push_overloaded_decl.
-
- * init.c (do_friend): Don't call push_overloaded_decl.
-
- * decl.c (pushdecl): Call push_overloaded_decl for functions and
- function templates.
- (duplicate_decls): functions and function templates are not
- duplicates, but don't complain about calling this function to
- compare them.
- (push_overloaded_decl): Don't deal with linkage. Call
- duplicate_decls.
- (redeclaration_error_message): Deal with linkage.
-
- * decl.c (start_function): If push_overloaded_decl returns an
- older version of the function, deal with it.
-
- * decl.c (start_function): Be sure only to push_overloaded_decl
- for non-members.
-
- * decl.c (grokfndecl): Put back clearing of DECL_CHAIN for
- methods.
- (start_function): Lose broken and redundant code for checking old
- decl.
-
- * init.c (add_friend): Give line numbers of both friend decls
- when warning about re-friending.
-
- * pt.c (tsubst): Use comptypes rather than == to compare the
- types of the method as declared and as defined, since default
- parameters may be different.
-
- * call.c (build_method_call): Use brendan's candidate printing
- routine.
-
- * decl.c (start_method): Methods defined in the class body are
- inline whether or not it's a template class.
-
-Mon Mar 28 16:39:26 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y (initdcl0): Add "extern" to current_declspecs if
- have_extern_spec && ! used_extern_spcec.
-
- * tree.c (really_overloaded_fn): A fn with more than one
- overload.
-
- * pt.c (end_template_decl): Use really_overloaded_fn.
-
- * decl.c (duplicate_decls): When smashing a decl into a previous
- definition, keep the old file and line.
- Don't deal with overloaded functions.
- Lose old code for checking arg types of functions.
- Check for overloaded C functions.
- (pushdecl): Deal with overloaded functions.
- (start_decl): Expect pushdecl to return an appropriate function decl.
- (start_function): Likewise.
- (push_overloaded_decl): Don't check for overloaded C functions.
-
- * *.c: Stop using DECL_OVERLOADED, it being archaic.
- TREE_OVERLOADED should probably go, too.
-
-Mon Mar 28 14:00:45 1994 Ron Guilmette <rfg@netcom.com>
-
- * typeck.c (comp_target_types): Call comp_target_parms with
- strict == 1.
-
-Sun Mar 27 00:07:45 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y (empty_parms): Don't parse () as (...) in extern "C"
- sections if we're compiling with -ansi or -pedantic.
-
- * decl.c (decls_match): Don't treat (int) and (int&) as matching.
-
- * decl2.c (grokfield): Don't pedwarn twice about initializing
- field.
-
- * decl.c (push_overloaded_decl): Warn about shadowing
- constructor.
- (redeclaration_error_message): Don't allow 'int a; int a;'
-
- * cvt.c (build_up_reference): Only check for valid upcast if
- LOOKUP_PROTECT is set, not just any flag.
-
-Fri Mar 25 01:22:31 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * lex.c (check_newline): When we see a #pragma implementation,
- also set it for the main input file.
-
- * init.c (build_new): Convert array size argument to size_t.
-
- * parse.y (primary): If we're doing a parenthesized type-id, call
- groktypename before passing it to build_new.
-
- * call.c (build_method_call): Deal properly with const and
- volatile for instances of reference type.
-
- * decl.c (store_return_init): Change 'if (pedantic) error' to 'if
- (pedantic) pedwarn'.
-
- * decl.c (grokdeclarator): Don't complain about putting `static'
- and `inline' on template function decls.
-
-Thu Mar 24 23:18:19 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * call.c (build_method_call): Preserve const & volatile on
- `this'.
-
-Thu Mar 24 16:21:52 1994 Mike Stump <mrs@cygnus.com>
-
- * init.c (build_new, build_vec_delete): Use global new and delete
- for arrays.
- * decl2.c (delete_sanity): Likewise.
-
-Thu Mar 24 02:10:46 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cvt.c (convert_to_reference): If i is an lvalue,
- (int &)i -> *(int*)&i, as per 5.2.8p9 of the latest WP.
- (convert_force): Call convert_to_reference with LOOKUP_COMPLAIN.
-
-Wed Mar 23 17:45:37 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (duplicate_decls): Also propagate DECL_TEMPLATE_MEMBERS
- and DECL_TEMPLATE_INSTANTIATIONS.
-
- * init.c (build_new): Handle array typedefs properly.
-
-Wed Mar 23 18:23:33 1994 Mike Stump <mrs@cygnus.com>
-
- 30th Cygnus<->FSF merge.
-
-Wed Mar 23 00:46:24 1994 Mike Stump <mrs@cygnus.com>
-
- * class.c (modify_vtable_entries): Avoid running off the end of the
- virtuals list when processing a virtual destructor.
- * class.c (get_vtable_entry): Likewise.
-
-Wed Mar 23 00:23:59 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (duplicate_decls): If two template decls don't match,
- just return 0.
-
-Tue Mar 22 23:49:41 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (convert_for_assignment): Don't pedwarn about
- converting function pointer to void *.
-
-Tue Mar 22 22:23:19 1994 Mike Stump <mrs@cygnus.com>
-
- Major revamp of pointer to member functions. Cures major
- nonfunctionality when used in casts, and MI situations.
-
- * cvt.c (convert_force): Update call site of build_ptrmemfunc.
- * typeck.c (convert_for_assignment): Likewise.
- * typeck2.c (digest_init): Likewise.
- * typeck2.c (process_init_constructor): Simplify by moving code into
- digest_init.
- * typeck2.c (digest_init): Do default_conversions on init value, if
- we are processing pointer to member functions.
- * class.c (get_vfield_offset): Now non-static. Convert bit offset
- into byte offset.
- * cp-tree.h (get_vfield_offset): Likewise.
- * typeck.c (get_member_function_from_ptrfunc): Convert down to right
- instance, before fetching vtable pointer.
- * typeck.c (get_delta_difference): New routine.
- * typeck.c (build_ptrmemfunc): Revamp to handle casting better, also
- get vtable pointer out of right subobject.
-
-Tue Mar 22 17:56:48 1994 Mike Stump <mrs@cygnus.com>
-
- * search.c (get_binfo): Return NULL instead of aborting, when
- passed a UNION_TYPE.
-
-Tue Mar 22 12:44:54 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- These patches implement handling of redefinition/redeclaration of
- templates.
-
- * typeck.c (comptypes): Simplify. All TEMPLATE_TYPE_PARMs are
- considered compatible.
-
- * parse.y (template_def): Pass defn argument to end_template_decl.
-
- * pt.c (end_template_decl): Add defn argument. Check for
- redefinition. Simplify.
-
- * error.c (OB_UNPUT): New macro, to remove mistakes.
- (aggr_variety): Subroutine of dump_aggr_type.
-
- * decl.c (decls_match): Support templates.
- (duplicate_decls): No longer static. Don't try to lay out template
- decls.
- (pushdecl): Simplify.
-
- * cp-tree.h (DECL_TEMPLATE_MEMBERS): Use DECL_SIZE instead of
- DECL_INITIAL.
-
-Mon Mar 21 11:46:55 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * error.c (dump_decl): Support class template decls.
- (dump_type): Don't adorn template type parms.
-
- * decl.c (duplicate_decls): Save DECL_TEMPLATE_INFO from old decl
- if it was a definition.
- (redeclaration_error_message): Do the cp_error thang, and reject
- redefinition of templates.
-
-Mon Mar 21 19:36:06 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * decl.c (grokdeclarator): Set TREE_PUBLIC for METHOD_TYPE
- in FIELD context, when appropriate. Also,
- CLASSTYPE_INTERFACE_ONLY is irrelevant to setting TREE_PUBLIC.
- Also, simplify check for bogus return specifiers.
-
-Mon Mar 21 11:46:55 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y (after_type_declarator1): Expand type_quals.
- (notype_declarator1): Likewise.
- (absdcl1): Likewise.
-
-Sat Mar 19 01:05:17 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (grokdeclarator): Treat class-local typedefs like static
- members; i.e. 'typedef int f();' means that f is a function type,
- not a method type.
-
- * parse.y (decl): Change direct_* back to *.
- (type_id): Change direct_abstract_declarator to absdcl.
- (direct_declarator, direct_initdecls, direct_initdcl0): Remove again.
-
-Fri Mar 18 12:47:59 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- These two patches fix crashes on instantiating a template inside a
- function with C linkage or containing labels.
-
- * class.c (current_lang_stacksize): No longer static.
-
- * decl.c (struct saved_scope): Add lang_base, lang_stack,
- lang_name, lang_stacksize, and named_labels.
- (push_to_top_level): Save them.
- (pop_from_top_level): Restore them.
-
- * gxxint.texi (Parser): Update.
-
- These two patches finish moving the task of expr/declarator
- ambiguity resolution from the lexer to the parser, and add one more
- r/r conflict. START_DECLARATOR can now be nuked.
-
- * parse.y (decl): Add "direct_" in typespec X rules.
- (direct_declarator): New nonterminal for
- direct_after_type_declarator and direct_notype_declarator.
- (direct_initdecls): Like initdecls, but uses direct_initdcl0.
- (direct_initdcl0): Like initdcl0, but uses direct_declarator.
- (named_parm): Add typespec direct_declarator rule.
-
- * spew.c (yylex): #if 0 out START_DECLARATOR insertion.
-
- These two patches disable some excessive cleverness on the part of
- g++; a non-class declaration always hides a class declaration in the
- same scope, and g++ was trying to unhide it depending on the
- enclosing expression.
-
- * spew.c (arbitrate_lookup): #if 0 out.
-
- * decl.c (lookup_name): Never call arbitrate_lookup.
-
- * parse.y (complex_notype_declarator1): Add '*'
- complex_notype_declarator1 and '&' complex_notype_declarator1 rules.
-
- * parse.y (complex_direct_notype_declarator): Restore id_scope
- see_typename TYPENAME rule, remove all other rules beginning with
- those tokens.
- (notype_unqualified_id): Add '~' see_typename IDENTIFIER rule.
-
-Thu Mar 17 17:30:01 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- These changes fix the compiler's handling of the functional cast/
- object declaration ambiguities in section 6.8 of the ARM. They also
- add 11 reduce/reduce conflicts. Sigh.
-
- * parse.y: Add precedence decls for OPERATOR and '~'.
- (notype_unqualified_id): New nonterminal, encompasses all of the
- ANSI unqualified-id nonterminal except TYPENAMEs.
- (expr_or_declarator): New nonterminal to delay parsing of code like
- `int (*a)'.
- (primary): Use notype_unqualified_id.
- (decl): Add typespec initdecls ';' and typespec declarator ';'
- rules.
- (initdcl0): Deal with the above.
- (complex_notype_declarator1): A notype_declarator that is not also
- an expr_or_declarator.
- (complex_direct_notype_declarator): A direct_notype_declarator that
- doesn't conflict with expr_or_declarator. Use
- notype_unqualified_id. Remove id_scope see_typename TYPENAME rule.
- (functional_cast): New nonterminal, for the three functional cast
- rules. So that they can be moved after
- complex_direct_notype_declarator.
- (see_typename): Don't accept type_quals any more.
-
- * decl2.c (reparse_decl_as_expr): New function to deal with parse
- nodes for code like `int (*a)++;'.
- (reparse_decl_as_expr1): Recursive subroutine of the above.
- (finish_decl_parsing): New function to deal with parse nodes for
- code like `int (*a);'. See the difference?
-
-Thu Mar 17 12:16:10 1994 Mike Stump <mrs@cygnus.com>
-
- These changes break binary compatibility in code with classes
- that use virtual bases.
-
- * search.c (dfs_get_vbase_types): Simplify and correct to make
- sure virtual bases are initialized in dfs ordering.
- * search.c (get_vbase_types): Simplify and make readable.
-
-Thu Mar 17 12:01:10 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y: s/ typename / type_id /g
-
-Wed Mar 16 17:42:52 1994 Kung Hsu <kung@mexican.cygnus.com>
-
- * parse.y (typespec): add SCOPE TYPENAME for global scoped
- type. e.g. ::B x.
-
- * decl.c (complete_array_type): fix a bug that in -pendantic
- mode even there's no initializer, it will continue to build
- default index.
-
-Wed Mar 16 17:43:07 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y (direct_notype_declarator): Add PTYPENAME rule, remove
- all of the scoped PTYPENAME rules.
-
-Wed Mar 16 16:39:02 1994 Mike Stump <mrs@cygnus.com>
-
- * init.c (build_offset_ref): The value of A::typedef_name is
- always the TYPE_DECL, and never an error.
-
-Tue Mar 15 20:02:35 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * search.c (get_base_distance_recursive): Two binfos can only
- represent the same object if they are both via_virtual.
-
- * class.c (finish_base_struct): Check vbases for ambiguity, too.
-
- * search.c (get_vbase_types): Accept binfo argument, too.
-
-Tue Mar 15 19:22:05 1994 Kung Hsu <kung@mexican.cygnus.com>
-
- * decl.c (complete_array_type): complete TYPE_DOMAIN of the
- initializer also, because back-end requires it.
-
-Tue Mar 15 15:33:31 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * error.c (dump_expr): Support member functions (which show up as
- OFFSET_REFs).
-
-Mon Mar 14 16:24:36 1994 Mike Stump <mrs@cygnus.com>
-
- * init.c (build_new): Set the return type of multidimensional
- news correctly.
-
-Fri Mar 11 15:35:39 1994 Kung Hsu <kung@mexican.cygnus.com>
-
- * call.c (build_method_call): if basetype not equal to type
- of the instance, use the type of the instance in building
- destructor.
-
-Thu Mar 10 17:07:10 1994 Kung Hsu <kung@mexican.cygnus.com>
-
- * parse.y (direct_notype_declarator): add push_nested_type for
- 'template_type SCOPED_NAME' rule.
-
-Tue Mar 8 00:19:58 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y (parm): Add typed_declspec1 {absdcl, epsilon} rules.
-
-Sat Mar 5 04:47:48 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y (regcast_or_absdcl): New nonterminal to implement late
- reduction of constructs like `int ((int)(int)(int))'.
- (cast_expr): Use it.
- (sub_cast_expr): Everything that can come after a cast.
- (typed_declspecs1): typed_declspecs that are not typed_typespecs.
- (direct_after_type_declarator): Lose PAREN_STAR_PAREN rule.
- (direct_abstract_declarator): Replace '(' parmlist ')' rule with
- '(' complex_parmlist ')' and regcast_or_absdcl.
- (parmlist): Split
- (complex_parmlist): Parmlists that are not also typenames.
- (parms_comma): Enabler.
- (named_parm): A parm that is not also a typename. Use declarator
- rather than dont_see_typename abs_or_notype_decl. Expand
- typed_declspecs inline.
- (abs_or_notype_decl): Lose.
- (dont_see_typename): Comment out.
- (bad_parm): Break out abs_or_notype_decl into two rules.
-
-Fri Mar 4 18:22:39 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl2.c (reparse_decl_as_casts): New function to change parse
- nodes for `(int)(int)(int)' from "function taking int and returning
- function taking int and returning function taking int" to "... cast
- to int, cast to int, cast to int".
-
- * decl2.c (reparse_decl_as_expr): Recursive function to change
- parse nodes for `A()()' from "function returning function returning
- A" to "A().operator()".
-
- * parse.y (primary): Replace `typespec LEFT_RIGHT' rule with
- `typespec fcast_or_absdcl' rule.
- (fcast_or_absdcl): New nonterminal to implement late reduction of
- constructs like `A()()()()'.
- (typename): Replace `typespec absdcl1' rule with
- `typespec direct_abstract_declarator' rule.
- (direct_abstract_declarator): Replace `LEFT_RIGHT type_quals' rule
- with `fcast_or_absdcl type_quals' rule.
-
-Fri Mar 4 16:18:03 1994 Mike Stump <mrs@cygnus.com>
-
- * tree.c (lvalue_p): Improve OFFSET_REF handling, so that it
- matches Section 5.5.
-
-Fri Mar 4 14:01:59 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * error.c (dump_type_prefix): Don't print basetype twice for
- pmfs.
-
-Fri Mar 4 13:24:33 1994 Mike Stump <mrs@cygnus.com>
-
- * typeck.c (convert_arguments): Handle setHandler(A::handlerFn)
- so that it is like setHandler(&A::handlerFn). Cures an `invalid
- lvalue in unary `&''.
-
-Fri Mar 4 11:15:59 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * gxxint.texi (Copying Objects): New section discussing default
- op= problems with virtual inheritance.
-
- * decl2.c (grokoptypename): Just does grokdeclarator and
- build_typename_overload, since the parser can't call grokdeclarator
- directly.
-
- * method.c (build_typename_overload): Set IDENTIFIER_GLOBAL_VALUE
- and TREE_TYPE on generated identifiers.
-
- * decl.c (grokdeclarator): Don't deal with TYPE_EXPRs anymore.
-
- * parse.y (parm): Convert `const char *' to `__opPCc' here.
-
- * error.c (dump_decl): Say sorry rather than my_friendly_aborting
- if we can't figure out what to do.
- (dump_type*): Likewise.
-
- * typeck2.c (build_m_component_ref): 'component' is an expr, not
- a decl. Also move the IS_AGGR_TYPE check after the stripping of
- REFERENCE_TYPE.
-
-Fri Mar 4 04:46:05 1994 Mike Stump <mrs@cygnus.com>
-
- * call.c (build_method_call): Handle b->setHandler(A::handlerFn)
- so that it is like b->setHandler(&A::handlerFn). Cures an `invalid
- lvalue in unary `&''.
-
-Thu Mar 3 12:38:15 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y: Add precedence specification for START_DECLARATOR.
- (type_quals): Move before primary.
- (typename): Move before typed_declspecs, add 'typespec absdcl1' rule.
-
- * decl2.c (grokoptypename): Lose.
-
- * decl.c (grokdeclarator): Parse TYPE_EXPRs in the initial scan,
- rather than waiting until later.
-
-Wed Mar 2 14:12:23 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y (unary_expr): Use 'typename' in 'new' rules, rather
- than expanding it inline.
- (typename): Expand empty option of (former) absdcl inline.
- (abs_or_notype_decl): Likewise.
- (absdcl): Lose empty rule.
- (conversion_declarator): New nonterminal for 'typename' of 'operator
- typename'.
- (operator_name): Use it instead of absdcl.
-
- * parse.y: Add precedence declarations for SCOPED_TYPENAME,
- TYPEOF, and SIGOF.
- (typed_declspecs): Accept typed_typespecs, rather than typespec
- directly. Add rules with reserved_typespecquals.
- (reserved_declspecs): Don't accept typespecqual_reserved at the
- beginning of the list. The typed_declspecs rule will deal with this
- omission.
- (declmods): Accept nonempty_type_quals, rather than TYPE_QUAL
- directly.
-
- * parse.y (direct_notype_declarator,
- direct_after_type_declarator, direct_abstract_declarator): Split up
- the declarator1 nonterminals to match the draft standard and avoid
- ambiguities.
- (new_type_id, new_declarator, direct_new_declarator,
- new_member_declarator): New nonterminals to implement the subset of
- 'typename' allowed in new expressions.
- (unary_expr): Use new_type_id instead of typename.
- (after_type_declarator1, absdcl1): Fix semantics of member pointers.
- (abs_member_declarator, after_type_member_declarator): Lose.
-
- * parse.y (absdcl1): Don't require parens around
- abs_member_declarator.
- (abs_member_declarator): Lose see_typename from rules.
- (after_type_member_declarator): Likewise.
-
- * tree.c (get_identifier_list): New function, containing code
- previously duplicated in get_decl_list and list_hash_lookup_or_cons.
- (get_decl_list): Use it.
- (list_hash_lookup_or_cons): Likewise.
-
- * parse.y (typed_declspecs, declmods): It's not necessary to hash
- the declspecs on class_obstack, so don't. This way typed_typespecs
- can reduce to typed_declspecs.
-
-Wed Mar 2 14:29:18 1994 Jason Merrill <jason@cygnus.com>
-
- * cvt.c (build_up_reference): If we aren't checking visibility,
- also allow base->derived conversions.
-
-Mon Feb 28 15:14:29 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * typeck.c (build_c_cast): Remove bogus hack when converting
- to a reference type.
-
- * cp-tree.h (lang_decl::vbase_init_list, DECL_VBASE_INIT_LIST):
- Removed, not used.
- (lang_stype::methods, lang_decl::next_method): New fields.
- (CLASSTYPE_METHODS, DECL_NEXT_METHOD): New macros.
- * decl.c (duplicate_decls): Preserve DECL_NEXT_METHOD.
-
- * cp-tree.h, decl2.c (flag_vtable_hack): New flag.
- * decl2.c (finish_vtable_vardecl): If flag_vtable_hack,
- and !CLASSTYPE_INTERFACE_KNOWN, try to use the presence of
- a non-inline virtual function to control emitting of vtables.
- * class.c (finish_struct): Build CLASSTYPE_METHODS list.
- * search.c (build_vbase_vtables_init): Don't assemble_external
- (yet) if flag_vtable_hack.
- * class.c (build_vfn_ref): Likewise.
-
-Mon Feb 28 14:54:13 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y (component_decl): Don't include "typed_declspecs
- declarator ';'" speedup, since it breaks enums.
-
-Fri Feb 25 15:43:44 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * class.c (finish_struct): Minor optimization for building
- fn_fields list.
-
-Fri Feb 25 15:23:42 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (start_function): Fix detection of function overloading.
-
-Thu Feb 24 22:26:19 1994 Mike Stump <mrs@cygnus.com>
-
- * lex.c (check_newline): #pragma interface can take a string
- argument, just like #pragma implementation. #pragma implementation
- checks for garbage on the line, line #pragma interface does. Main
- input files do not auto implement like named files, #pragma
- implementation must be used explicitly.
-
-Thu Feb 24 17:09:01 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y (components): Handle list of one again.
- (notype_components): Likewise.
- (after_type_declarator1): Take maybe_raises out again.
-
- * gxxint.texi (Parser): Document additional r/r conflict.
-
-Wed Feb 23 14:42:55 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * gxxint.texi (Parser): Add node.
-
- * Makefile.in (stamp-parse): Update expected conflict count.
-
- * parse.y (various): Replace "declmods declarator" with "declmods
- notype_declarator". The comment saying that "declmods declarator ';'"
- corresponds to "int i;" was wrong; it corresponds to "const i;".
- (component_decl): Add "typed_declspecs declarator ';'" rule; this
- *does* correspond to "int i;". Change "declmods components" to
- "declmods notype_components".
- (components): Don't deal with a list of one anymore.
- (notype_components): New nonterminal, corresponds to notype_declarator.
- ({after_,no}type_component_decl{,0}): More new nonterminals.
- ({after_,no}type_declarator): Fold in START_DECLARATOR token.
- Eliminates four reduce/reduce conflicts.
-
- (expr): Depend on nontrivial_exprlist instead of nonnull_exprlist.
- (nontrivial_exprlist): New nonterminal: A list of at least two
- expr_no_commas's.
- (nonnull_exprlist): Depend on nontrival_exprlist.
- Eliminates four reduce/reduce conflicts.
-
- (named_class_head): Move intermediate code block into separate
- nonterminal so that we can stick %prec EMPTY on it.
-
- Add more %prec EMPTY's to eliminate remaining shift/reduce
- conflicts.
-
- (after_type_declarator): Add maybe_raises to fndecl rules.
- (after_type_declarator_no_typename): Remove.
- For correctness.
-
- Document remaining reduce/reduce conflicts.
-
-Tue Feb 22 12:10:32 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * search.c (get_base_distance): Only bash BINFO_INHERITANCE_CHAIN
- (TYPE_BINFO (type)) if we care about the path.
-
- * tree.c (lvalue_p): A COND_EXPR is an lvalue if both of the
- options are.
-
-Mon Feb 21 19:59:40 1994 Mike Stump <mrs@cygnus.com>
-
- * Makefile.in (mostlyclean): lex.c is a source file, don't
- remove.
-
-Sat Feb 19 01:27:14 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * parse.y: Eliminate 20 shift/reduce conflicts.
-
-Fri Feb 18 11:49:42 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * pt.c (type_unification): Add subr argument; if set, it means
- that we are calling ourselves recursively, so a partial match is OK.
- (unify): Support pointers to methods and functions.
- (tsubst): Support method pointers.
- * decl.c (build_ptrmemfunc_type): No longer static, so that
- tsubst can get at it.
-
- * init.c (is_aggr_typedef): Pretend template type parms are
- aggregates.
- * decl2.c (build_push_scope): If cname refers to a template type
- parm, just grin and nod.
-
- * call.c (build_overload_call_real): Pass subr argument to
- type_unification.
- * pt.c (do_function_instantiation): Likewise.
- * class.c (instantiate_type): Likewise.
-
- * search.c (get_base_distance): If BINFO is a binfo, use it and
- don't mess with its BINFO_INHERITANCE_CHAIN.
-
- * cvt.c (convert_to_reference): Fix temporary generation.
- If ambiguous, return error_mark_node.
-
- * init.c (build_new): Put back some necessary code.
-
-Thu Feb 17 15:39:47 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * init.c (build_new): Deal with array types properly.
-
- * search.c (get_binfo): Become a shell for get_base_distance.
- (get_binfo_recursive): Lose.
- (get_base_distance_recursive): Find the path to the via_virtual base
- that provides the most access.
- (get_base_distance): Likewise.
-
- * parse.y (explicit_instantiation): Syntax is 'template class
- A<int>', not 'template A<int>'.
-
- * typeck.c (convert_for_initialization): Remove bogus warning.
-
- * parse.y (datadef): Revert patch of Oct 27.
-
-Thu Feb 17 15:12:29 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * class.c (build_vfn_ref): Cast delta field to ptrdiff_type_node,
- rather than integer_type_node. Does wonders for the Alpha.
-
-Thu Feb 17 13:36:21 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (build_ptrmemfunc_type): Make sure that the pmf type
- goes onto the same obstack as its target type.
-
-Wed Feb 16 00:34:46 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cvt.c (convert_to_reference): If converting via constructor
- on local level, go back to build_cplus_new approach.
-
- * tree.c (build_cplus_new): If with_cleanup_p, set cleanup slot
- to error_mark_node to prevent expand_expr from building a cleanup
- for this variable.
-
- * lex.c (default_assign_ref_body): Return *this from the memcpy
- version, too.
-
- * decl.c (grok_reference_init): Just return if called with
- error_mark_node, don't worry about initializing non-const reference
- with temporary.
-
- * cvt.c (convert_to_reference): Do the right thing for
- non-aggregate reference conversions, pedwarn when generating a
- non-const reference to a temporary.
-
- * class.c (finish_struct): TYPE_HAS_COMPLEX_{INIT,ASSIGN}_REF and
- TYPE_NEEDS_CONSTRUCTING all depend on TYPE_USES_VIRTUAL_BASECLASSES
- again.
-
-Tue Feb 15 19:47:19 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (grok_reference_init): Pawn off a lot of the work on
- convert_to_reference. Generally do the right thing.
-
- * cvt.c (convert_to_reference): Conform to the initial comment;
- i.e. don't create temps if decl != error_mark_node. Handle
- cleanups better for temps that do get created. Don't pretend
- that we can use an 'A' to initialize a 'const double &' just by
- tacking on a NOP_EXPR. Support LOOKUP_SPECULATIVELY.
-
- * call.c (build_method_call): Set TREE_HAS_CONSTRUCTOR on
- constructor calls.
-
-Mon Feb 14 14:50:17 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (grok_reference_init): Make a temporary for initializing
- const reference from constant expression.
-
-Mon Feb 14 11:31:31 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * cp-tree.h, decl.c (set_identifier_local_value): Deleted function.
- * decl.c (pushdecl): Define decl in correct binding_level
- (which isn't always the inner_binding_level).
-
- * cvt.c (build_up_reference): Don't ever call expand_aggr_init.
- It's ugly, and I don't think it's the right thing to do.
-
- * cp-tree.h, class.c, decl.c, decl2.c, sp/search.c:
- Remove NEW_CLASS_SCOPING, assuming it is always 1.
- * decl.c (pop_decl_level): Removed; manually inlined.
-
-Sun Feb 13 19:04:56 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * class.h (candidate): Add basetypes field.
-
- * call.c (build_method_call): Do access checking after choosing a
- function, not before.
-
- * Makefile.in (cvt.o, call.o, method.o): Depend on class.h.
- (mostlyclean): Remove ../cc1plus.
-
-Fri Feb 11 11:52:26 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * class.c (finish_struct): Don't allow adjusting access to a field
- of a base class if a local field has the same name.
-
- * error.c (dump_type_prefix): Output basetype for METHOD_TYPEs.
-
-hu Jan 13 17:55:51 EST 1994 Gnanasekaran Swaminathan <gs4t@virginia.edu>
-
- * cp-tree.h (DESTRUCTOR_NAME_P): do not confuse AUTO_TEMP names
- with destructor names when either NO_DOLLAR_IN_LABEL or
- NO_DOT_IN_LABEL are not defined.
-
- Now `template <class T, T f(T&), const T*> class A {...}' works.
-
- * pt.c (grok_template_type): substitute template parm types
- with actual types in complex type as well.
- (coerce_template_parms): update the grok_template_type ()
- function call.
-
- * pt.c (tsubst): Traverse method list using DECL_CHAIN.
-
- * decl.c (grok_op_properties): Allow operator++/-- to have
- default arguments.
-
- * typeck2.c (store_init_value): Don't abort when called to
- initialize a type that needs constructing with a CONSTRUCTOR.
-
- * init.c (expand_aggr_init_1, CONSTRUCTOR case): If
- store_init_value fails, build and expand an INIT_EXPR. If
- store_init_value succeeds, call expand_decl_init.
-
-Fri Feb 11 02:49:23 1994 Mike Stump <mrs@cygnus.com>
-
- * class.c (build_vbase_path): Use complete_type_p instead of
- resolves_to_fixed_type_p to determine if the virtual bases are in
- their right place for the type of expr. Cures problem of thinking a
- virtual base class is one place, when it is in fact someplace else.
-
-Fri Feb 11 00:26:46 1994 Mike Stump <mrs@cygnus.com>
-
- * init.c (resolve_offset_ref): Make sure we first convert to
- intermediate type, if given, when dealing with members off `this'.
- Solves an incorrrect `type `foo' is not a base type for type
- `multiple'' when it is infact, a base type.
-
-Thu Feb 10 21:49:35 1994 Mike Stump <mrs@cygnus.com>
-
- * class.c (modify_other_vtable_entries): Use get_binfo, instead
- of binfo_value. Solves problem with compiler giving a `base class
- `B' ambiguous in binfo_value (compiler error)' on complex MI
- herarchies, when a virtual function is first defied in a virtual
- base class.
-
-Thu Feb 10 17:19:32 1994 Mike Stump <mrs@cygnus.com>
-
- * class.c (build_vbase_path): Don't complain about ambiguous
- intermediate conversion when converting down to a virtual base
- class, even if they might seem to be ambiguous.
-
-Thu Feb 10 12:18:26 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck2.c (build_functional_cast): #if 0 out constructor
- inheritance code, improve error messages.
-
- * class.c (finish_base_struct): Complain about base with only
- non-default constructors in derived class with no constructors.
-
- * decl.c (grokdeclarator): Fix detection of virtual new/delete.
-
-Wed Feb 9 22:02:32 1994 Mike Stump <mrs@cygnus.com>
-
- * search.c (build_mi_virtuals, add_mi_virtuals,
- report_ambiguous_mi_virtuals): Removed unneeded code.
- * class.c (finish_struct_bits): Likewise.
-
-Wed Feb 9 11:27:17 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * pt.c (end_template_instantiation): Push decl before
- pop_from_top_level.
-
- * typeck2.c (build_m_component_ref): Make sure datum is of
- aggregate type.
-
- * init.c (get_type_value): New function, returns
- IDENTIFIER_TYPE_VALUE or IDENTIFIER_CLASS_TYPE_VALUE or NULL_TREE.
-
- * call.c (build_method_call): Don't die on call to destructor for
- non-type.
-
- * decl.c (grokdeclarator): Complain about virtual op new and op
- delete, make static virtuals unvirtual instead of unstatic.
-
- * typeck.c (build_c_cast): Also call default_conversion on
- methods.
-
- * decl.c (grokdeclarator): Don't complain about anonymous
- bitfields.
-
- * parse.y (simple_stmt, for loops): Move the continue point after
- the cleanups.
-
- * class.c (finish_struct): Fix setting of
- TYPE_HAS_COMPLEX_INIT_REF.
-
-Tue Feb 8 13:21:40 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * init.c (build_new): Deal with `new double (1)'.
-
- * class.c (finish_struct): TYPE_HAS_COMPLEX_*_REF are supersets of
- TYPE_HAS_REAL_*_REF, but TYPE_HAS_COMPLEX_INIT_REF is independent of
- TYPE_NEEDS_CONSTRUCTING.
-
- * decl.c (duplicate_decls): Propagate access decls.
-
- * typeck2.c (process_init_constructor): Accept empty_init_node
- for initializing unions.
-
- * class.c, lex.c, cp-tree.h: Use
- TYPE_HAS_COMPLEX_ASSIGN_REF where TYPE_HAS_REAL_ASSIGN_REF was used
- before, use TYPE_HAS_COMPLEX_INIT_REF for TYPE_NEEDS_CONSTRUCTING in
- some places.
-
- * decl.c (finish_decl): Don't complain about uninitialized const
- if it was initialized before.
-
-Mon Feb 7 18:12:34 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * lex.c (default_assign_ref_body): Don't deal with vbases for
- now.
-
- * decl.c (finish_decl): Fix reversed logic for objects and other
- things that need to be constructed but have no initializer.
-
- * class.c (finish_struct): Don't set TYPE_HAS_* flags that are
- set by grok_op_properties or finish_decl.
-
- * decl.c: Don't warn about extern redeclared inline unless
- -Wextern-inline is given.
- * decl2.c (lang_decode_option): Likewise.
- * cp-tree.h: Likewise.
-
-Mon Feb 7 17:29:24 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * decl.c (pushdecl_with_scope): Fix thinko. Add forward
- declaration.
-
- * decl.c (pushdecl_with_scope): New function.
- * decl.c (pushdecl_top_level): Use new function.
- * decl.c (pushtag): Initialize newdecl.
- * decl.c (pushtag): Push new type decl into correct scope.
-
-Mon Feb 7 14:42:03 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * call.c, cvt.c, init.c, search.c, cp-tree.h:
- Eradicate LOOKUP_PROTECTED_OK.
-
-Mon Feb 7 13:57:19 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * decl.c (pushtag, xref_tag), cp-tree.h: Add extra parameter
- 'globalize' to signify implicit declarations.
- * decl.c (globalize_nested_type, maybe_globalize_type): Removed.
- * decl.c (set_identifier_type_value_with_scope): New function.
- * decl.c (set_identifier_local_value): Simplify.
- * spew.c (yylex, do_addr): Modify to return a _DEFN if a
- forward declaration (followed by ';' and not preceded by 'friend').
- * class.c, decl.c, except.c, init.c, parse.y,
- pt.c, search.c: Add new argument to calls to xref_tag and
- pushtag.
-
-Mon Feb 7 00:22:59 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-tree.h (ACCESSIBLY_UNIQUELY_DERIVED_P): New macro, means what
- ACCESSIBLY_DERIVED_FROM_P meant before.
- (ACCESSIBLY_DERIVED_FROM_P): Now disregards ambiguity.
-
- * cvt.c (build_up_reference): Call get_binfo with PROTECT == 1.
-
- * search.c (get_base_distance_recursive): Members and friends of
- a class X can implicitly convert an X* to a pointer to a private or
- protected immediate base class of X.
- (get_binfo_recursive): Likewise.
- (get_base_distance): Ignore ambiguity if PROTECT < 0.
- (get_binfo): Lose multiple values of PROTECT.
- (compute_access): Protected is OK if the start of the
- search is an accessible base class of current_class_type.
-
- * method.c (build_opfncall): Do check access on operator new here.
-
- * decl.c (finish_function): Don't check access on operator new
- here.
-
-Sun Feb 6 14:06:58 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (xref_tag): The base of a derived struct is NOT always
- public. Duh.
-
- * pt.c (do_explicit_instantiation): New function, called from
- parser to do explicit function instantiation.
- (type_unification): Allow the args list to be terminated with
- void_list_node.
- (do_pending_expansions): Look at i->interface for non-member
- templates.
-
- * parse.y (datadef): Move explicit_instantiation here.
- (structsp): From here.
- (datadef): Complain about `int;'.
-
-Sun Feb 6 12:33:18 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * pt.c (end_template_instantiation), cp-tree.h: Remove unused
- second parameter, and simplify first from a TREE_LIST where
- we only care about its TREE_VALUE to just the value (an IDENTIFIER).
- * pt.c (instantiate_member_templates): Simplify argument list
- from a TREE_LIST to just an IDENTIFIER.
- * lex.c (yyprint): PRE_PARSED_CLASS_DECL is now just an IDENTIFIER.
- * parse.y (template_instantiate_once): Simplify accordingly.
- * decl.c (inner_binding_level): New. Use various places to
- simplify.
-
-Sun Feb 6 02:49:37 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck2.c (build_functional_cast): int() -> int(0).
-
-Sat Feb 5 00:53:21 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * class.c (finish_struct): Don't do a bitwise copy for op= if the
- class has a virtual function table.
-
- * typeck.c (convert_for_initialization): Restore warnings about
- not using defined op=. Should really be my_friendly_aborts, I
- s'pose.
-
-Fri Feb 4 14:21:00 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * class.c (finish_struct): Tidy up conditions for doing bitwise
- copies of objects.
-
- * decl.c (build_default_constructor): #if 0 out.
-
- * *: Eradicate TYPE_GETS_{ASSIGNMENT,ASSIGN_REF,CONST_ASSIGN_REF,
- CONST_INIT_REF}, TYPE_HAS_REAL_CONSTRUCTOR.
-
- * decl.c (grokdeclarator): Don't return void_type_node for
- friends being defined here.
-
- * init.c (perform_member_init): Only do the init if it's useful.
-
- * lex.c (default_copy_constructor_body): If we don't need to do
- memberwise init, just call __builtin_memcpy.
- (default_assign_ref_body): Likewise.
-
- * decl.c (grokdeclarator): If friendp && virtualp, friendp = 0.
-
-Fri Feb 4 13:02:56 1994 Mike Stump <mrs@cygnus.com>
-
- * lex.c (reinit_parse_for_method, cons_up_default_function):
- Don't give warn_if_unknown_interface warning when it came from a
- system header file.
- * pt.c (end_template_decl, instantiate_template): Likewise.
- * decl.c (start_decl): Likewise.
-
-Fri Feb 4 00:41:21 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (grokdeclarator): Don't try to set TYPE_WAS_ANONYMOUS on
- enums.
-
- * decl2.c (constructor_name_full): Use IS_AGGR_TYPE_CODE instead of
- IS_AGGR_TYPE, since we don't know it's a type.
-
-Thu Feb 3 11:36:46 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (grokdeclarator): Don't complain about anonymous unions.
-
- * cp-tree.h (TYPE_WAS_ANONYMOUS): This struct was originally
- anonymous, but had a name given to it by a typedef.
-
- * decl.c (grokdeclarator): When renaming an anonymous struct, set
- TYPE_WAS_ANONYMOUS.
-
- * decl2.c (constructor_name_full): Use TYPE_WAS_ANONYMOUS.
-
- * cp-tree.h (DECL_UNDEFINED_FRIENDS): #if 0 out.
-
- * init.c (xref_friend): Don't set up DECL_UNDEFINED_FRIENDS.
- (embrace_waiting_friends): Don't use DECL_UNDEFINED_FRIENDS.
-
- * decl.c (grokdeclarator): Set TYPE_NESTED_NAME properly on nested
- anonymous structs that get typedef'd.
-
- * decl.c (grokdeclarator): Always return void_type_node for
- friends.
-
- * error.c (dump_function_decl): Don't use DECL_CLASS_CONTEXT for
- friends.
- (dump_function_decl): Don't print out default args for
- a function used in an expression.
-
- * decl.c (grokdeclarator): Give error on abstract declarator used
- in an invalid context (i.e. `void (*)();').
-
- * error.c (cp_line_of): Support _TYPE nodes.
- (cp_file_of): Likewise.
-
- * cvt.c (build_up_reference): Don't abort if passed a SAVE_EXPR;
- it can happen for the RHS of an assignment stmt where the LHS is
- a COND_EXPR.
-
- * init.c (expand_aggr_init_1): Deal with bracketed initializer
- lists properly.
-
- * class.c (finish_struct): Deal with enumerators and typedefs
- again.
-
-Wed Feb 2 11:30:22 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * class.c (finish_struct): Tidy up loop over fields.
-
- * errfn.c (cp_thing): Don't advance twice after a format.
-
- * class.c (finish_struct): Complain about needing a constructor
- if a member has only non-default constructors, and don't try to
- generate a default constructor.
-
- * decl.c (finish_decl): Also do the constructor thing if
- TYPE_NEEDS_CONSTRUCTING is set (for arrays).
-
- * search.c (unuse_fields): New function: mark all fields in this
- type unused.
- (dfs_unuse_fields): Helper function.
-
- * class.c (pushclass): If the new class is the same as the old
- class, still unuse the fields.
- (unuse_fields): Move to search.c.
-
- * decl.c (grok_op_properties): Add friendp argument.
- (grokfndecl): Pass it.
- (start_method): Likewise.
-
- * decl2.c (delete_sanity): Add use_global_delete parameter to catch
- ::delete calls.
-
- * parse.y (unary_expr): Pass new parameter to delete_sanity.
-
- * lex.c (default_copy_constructor_body): Don't choke if the union
- has no fields.
- (default_assign_ref_body): Likewise.
-
- * call.c (compute_conversion_costs_ansi): Do the right thing for
- ellipsis matches.
-
- * decl.c (push_to_top_level): Optimize.
-
- * decl.c (start_function): Look for the lexical scope of a friend
- in DECL_CLASS_CONTEXT.
-
- * init.c (do_friend): Set DECL_CLASS_CONTEXT on global friends.
-
-Tue Feb 1 15:59:24 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-tree.h (TREE_GETS_PLACED_NEW): New macro.
-
- * init.c (init_init_processing): Don't assign BIN/BID to the
- IDENTIFIER_GLOBAL_VALUEs of their respective operators.
- (build_new): Check TREE_GETS_PLACED_NEW.
-
- * decl.c (grok_op_properties): Don't set TREE_GETS_NEW for a decl of
- op new with placement, set TREE_GETS_PLACED_NEW.
-
- * cp-tree.h (ANON_UNION_P): New macro. Applies to decls.
-
- * class.c (finish_struct): Don't treat anonymous unions like
- other aggregate members. Do synthesize methods for unions without
- a name, since they may or may not be "anonymous unions".
-
- * decl2.c (grok_x_components): Wipe out memory of synthesized methods
- in anonymous unions.
-
- * lex.c (default_copy_constructor_body): Support unions.
- (default_assign_ref_body): Likewise.
-
-Mon Jan 31 12:07:30 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-tree.h: Fix documentation of LOOKUP_GLOBAL, add prototypes.
-
- * error.c (args_as_string): New function (%A), like type_as_string
- except NULL_TREE -> "..."
-
- * call.c (build_overload_call_real): Fix for new overloading.
-
- * decl.c (grok_op_properties): Set all of the TYPE_OVERLOADS_* flags
- here.
-
- * parse.y (operator_name): Instead of here.
-
- * typeck2.c (build_functional_cast): Treat a TREE_LIST as a list
- of functions.
-
- * call.c (build_overload_call_real): Support LOOKUP_SPECULATIVELY.
-
- * method.c (build_opfncall): Don't need to massage return value
- any more, call build_overload_call with all flags.
-
- * typeck.c (build_x_binary_op): Put back speculative call to
- build_opfncall.
- (build_x_unary_op): Likewise.
- (build_x_conditional_expr): Likewise.
-
-Mon Jan 31 10:00:30 1994 Mike Stump <mrs@cygnus.com>
-
- * cvt.c (build_type_conversion_1): Change call to pedwarn into
- warning, and conditionalize upon warn_cast_qual.
-
-Fri Jan 28 11:48:15 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * search.c (lookup_field): If xbasetype is a binfo, copy it to
- avoid clobbering its inheritance info.
-
- * call.c (build_method_call): Don't overwrite basetype_path with
- TYPE_BINFO (inst_ptr_basetype) if they have the same type.
-
- * search.c (compute_access): Fix handling of protected inheritance
- and friendship with the enclosing class.
-
- * typeck2.c (store_init_value): Allow passing of TREE_CHAIN for
- initialization of arbitrary variable.
-
- * typeck2.c (build_functional_cast): Only try calling a method if
- one exists.
-
- * decl.c (grokdeclarator): Move handling of constructor syntax
- initialization into first loop for generality.
- (parmlist_is_random): Lose.
-
- * lex.c (cons_up_default_function): Set TREE_PARMLIST on arguments
- to default function.
-
-Thu Jan 27 19:26:51 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (grokparms): Abort if we get called with something we don't
- expect.
-
-Thu Jan 27 17:37:25 1994 Mike Stump <mrs@cygnus.com>
-
- * call.c (build_overload_call_real): Change argument complain to
- flags to match style of rest of code. Pass it down to
- build_function_call_real as necessary.
- * call.c (build_overload_call, build_overload_call_maybe): Change
- argument complain to flags to match style of rest of code.
- * cp-tree.h (build_function_call_real): Added fourth flags
- argument.
- * cvt.c (convert_to_reference): Only give warning messages, if
- LOOKUP_COMPLAIN is set.
- * typeck.c (build_x_function_call): Change simple complain
- argument to build_overload_call_maybe and build_overload_call, to
- LOOKUP_COMPLAIN to match style of rest of code.
- * typeck2.c (build_functional_cast): Likewise.
- * typeck.c (build_function_call_real): Add flags, so that we can
- not complain, if we don't want to complain. Complain about
- arguments, if we are complaining, otherwise don't.
- * typeck.c (build_function_call, build_function_call_maybe):
- Stick in flags argument.
- * typeck.c (build_x_binary_op, build_x_unary_op,
- build_x_conditional_expr, build_x_compound_expr): Follow style of
- build_x_indirect_ref, as it is more correct and more common.
-
-Thu Jan 27 14:36:20 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * call.c (build_method_call): Don't check for being called with
- a pointer.
-
- * decl2.c (finish_file): Don't play with DECL_CLASS_CONTEXT for the
- static initializer function.
-
- * init.c (build_member_call): Use convert_force here, too.
-
- * search.c (compute_access): Only treat static members specially
- if they are referenced directly.
-
-Wed Jan 26 18:28:14 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * gxxint.texi (Access Control): New node.
-
- * search.c (current_scope): New function; returns whichever of
- current_class_type and current_function_decl is the most nested.
- (compute_access): Total overhaul to make it clearer and more
- correct. Don't use the cache for now; in the only situation where
- it was used before, it gained nothing. This frees up three of the
- DECL_LANG_FLAGs for possible other use!
-
- * cp-tree.h: #if 0 out DECL_PUBLIC & friends.
-
- * typeck.c (build_component_ref_1): Don't check DECL_PUBLIC.
-
- * call.c (build_method_call): Use convert_force to cast `this' --
- rely on the access checking for the method itself.
-
- * init.c (is_friend): Do the nesting thing, handle types. I am
- my own friend.
- (is_friend_type): Become a shell for is_friend.
- (add_friend): Never stick in ctype.
- Why are the friendship functions in init.c, anyway?
-
-Wed Jan 26 17:50:00 1994 Mike Stump <mrs@cygnus.com>
-
- * cvt.c (build_type_conversion_1): Don't conditionalize call to
- pedwarn upon pedantic.
-
-Wed Jan 26 17:20:46 1994 Mike Stump <mrs@cygnus.com>
-
- * cvt.c (convert_to_reference): Add 8.4.3 checking so that one
- gets a warning if one tries to initialize a non-const & from a
- non-lvalue.
- * cvt.c (convert_to_reference): Use %P format for argument
- numbers in warnings.
-
-Wed Jan 26 14:35:06 1994 Mike Stump <mrs@cygnus.com>
-
- * init.c (build_delete): Follow style in call.c to construct the
- virtual call to the desctructor, as that code is right. Fixes a
- problem of the compiler saying a pointer conversion is ambiguous.
-
-Wed Jan 26 11:28:14 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-tree.h (VTABLE_NAME_P): Change other occurrence of
- VTABLE_NAME_FORMAT to VTABLE_NAME.
-
- * *: s/visibility/access/g
-
-Tue Jan 25 18:39:12 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (build_modify_expr): Don't smash references if INIT_EXPR.
-
-Tue Jan 25 13:54:29 1994 Mike Stump <mrs@cygnus.com>
-
- * init.c (build_delete): Back out Jan 17th & 18th pacthes, as
- they break libg++.
-
-Tue Jan 25 13:11:45 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * decl.c (duplicate_decls): Fix pointer arithmetic.
-
-Mon Jan 24 15:50:06 1994 Chip Salzenberg <chip@fin.uucp>
-
- [ cp-* changes propagated from c-* changes in 940114 snapshot ]
- * cp-parse.y (maybe_attribute): Allow multiple __attribute__
- clauses on a declaration.
-
-Mon Jan 24 17:06:23 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * class.c (finish_struct): Do synthesize methods for anon
- structs, just not unions.
-
-Mon Jan 24 13:50:13 1994 Kung Hsu <kung@mexican.cygnus.com>
-
- * decl.c (xref_tag): handle anonymous nested type.
- * decl.c (globalize_nested_type): add no globalize bit check.
- * spew.c (hack_more_ids) : templated nested decl not push top
- level.
-
- * parse.y : get rid of 'goto do_components'. It is much better
- for debugging.
-
- * decl.c (is_anon_name): get rid of the function and use the
- macro ANON_AGGRNAME_P.
- * pt.c : ditto.
-
-Fri Jan 21 14:06:02 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * class.c (finish_struct): Don't synthesize any methods for
- anonymous structs/unions.
-
- * typeck.c (build_modify_expr): Don't treat pmf's as class objects.
-
-Thu Jan 20 18:56:46 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * method.c (build_opfncall): Call build_indirect_ref on
- synthesized instance for operator delete.
-
- * pt.c (type_unification): Don't abort if called with a list of
- types in ARGS.
-
- * class.c (instantiate_type): Deal with function templates.
-
-Thu Jan 20 16:55:35 1994 Jim Wilson <wilson@sphagnum.cygnus.com>
-
- * Makefile.in (CC): Default to cc not gcc.
-
-Thu Jan 20 13:47:54 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (build_modify_expr): Call constructor if appropriate.
-
- * decl.c (push_to_top_level): Clear out class-level bindings cache.
-
-Wed Jan 19 13:51:22 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * call.c (resolve_scope_to_name): Work recursively (previously only
- looked down one level).
-
- * lex.c (do_pending_inlines): If we're still dealing with the last
- batch of inlines, don't start working on a new one.
-
- * Makefile.in (stamp-parse): Update conflict count.
- (TAGS): Fix.
-
- * parse.y (explicit_instantiation): New rule; implements
- 'template A<int>' syntax (though not 'template foo(int)' yet).
- (structsp): Add explicit_instantiation.
-
-Tue Jan 18 13:53:05 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * class.c (finish_struct, etc.): Simplify decision to synthesize
- a destructor.
-
- * call.c, class.c, cp-tree.h, decl.c, init.c,
- ptree.c, search.c, typeck.c, typeck2.c: Nuke
- TYPE_NEEDS_CONSTRUCTOR (change all calls to TYPE_NEEDS_CONSTRUCTING).
- * init.c (expand_aggr_init_1): Don't try non-constructor methods
- of initializing objects.
- (build_new): Don't try other methods if the constructor lookup fails.
-
- * class.c (finish_base_struct): Set cant_have_default_ctor and
- cant_synth_copy_ctor properly.
- (finish_struct): Likewise.
-
-Mon Jan 17 13:58:18 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * typeck.c (build_modify_expr_1): #if 0 out again.
- (build_modify_expr): #if 0 out memberwise init code again.
-
- * lex.c (default_copy_constructor_body): Be const-correct.
- (default_assign_ref_body): Likewise.
-
- * init.c (perform_member_init): Use TYPE_HAS_CONSTRUCTOR to decide
- whether or not to use it, rather than TYPE_NEEDS_CONSTRUCTING.
- (expand_aggr_init): Disable silent conversion from initializer list
- to list of args for a constructor.
-
- * class.c (base_info): Lose needs_default_ctor.
- (finish_base_struct): Likewise.
- (finish_struct): Likewise.
-
- * decl.c (init_decl_processing): Don't turn off flag_default_inline
- just because flag_no_inline is on.
- (finish_decl): Use TYPE_HAS_CONSTRUCTOR to decide to use
- constructor.
-
- * class.c (finish_struct): Synthesize default ctor whenever
- allowed.
-
- * Makefile.in (TAGS): Don't try to run etags on cp-parse.y.
-
-Sat Jan 15 18:34:33 1994 Mike Stump <mrs@cygnus.com>
-
- * Makefile.in, configure: Handle the C++ front-end in a
- subdirectory.
- * cp-*: Move C++ front-end to cp/*.
-
-Fri Jan 14 14:09:37 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-typeck.c (build_function_call_real): Modify to match other
- instances of taking the address of the function.
-
- * cp-class.c (finish_struct): Set TYPE_HAS_REAL_CONSTRUCTOR to 1 if
- there are non-synthesized constructors.
- Only set TYPE_NEEDS_CONSTRUCTOR if TYPE_HAS_REAL_CONSTRUCTOR.
- Always generate copy constructor if possible.
-
- * cp-tree.h (lang_type): Add has_real_constructor bitfield.
- (TYPE_HAS_REAL_CONSTRUCTOR): Define.
-
- * cp-lex.c (default_copy_constructor_body): Use init syntax
- for all bases.
-
- * cp-type2.c (store_init_value): Only give error for initializer list
- if TYPE_HAS_REAL_CONSTRUCTOR.
-
-Thu Jan 13 15:38:29 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-tree.h (DECL_SYNTHESIZED): Add defn.
- (lang_decl): Add synthesized bitfield to decl_flags.
-
- * cp-lex.c (cons_up_default_function): Use DECL_SYNTHESIZED to mark
- artificial methods, rather than a line # of 0.
-
-Fri Jan 14 18:25:29 1994 Kung Hsu <kung@mexican.cygnus.com>
-
- * cp-decl (xref_tag): fix a bug in conflict type.
- * cp-parse.y : add SCOPED_NAME for uninstantiated template nested
- type reference.
- * cp-spew.c (yylex) : generated SCOPED_NAME token.
- * cp-lex.c (yyprint): handle SCOPED_NAME.
-
-Fri Jan 14 17:00:29 1994 Mike Stump <mrs@cygnus.com>
-
- * cp-decl.c (pushdecl): Revert patch from Jan 11 19:33:03, as it is
- not right.
-
-Thu Jan 13 14:00:35 1994 Kung Hsu <kung@mexican.cygnus.com>
-
- * cp-decl2.c (grok_x_components): fix a bug that enum type does not
- have type_flags.
-
-Thu Jan 13 11:39:34 1994 Mike Stump <mrs@cygnus.com>
-
- Ensure that all vtable pointers are initialized with all the right
- values.
-
- * cp-class.c (is_normal): Changed to reflect new meaning of
- CLASSTYPE_VFIELD_PARENT.
- * cp-class.c (maybe_fixup_vptrs): Use of
- CLASSTYPE_NEEDS_VIRTUAL_REINIT here is misguided. Use
- BINFO_MODIFIED instead.
- * cp-class.c (finish_struct): Changed to reflect new meaning of
- CLASSTYPE_VFIELD_PARENT.
- * cp-decl.c (get_binfo_from_vfield): Removed, unneeded now.
- * cp-decl.c (finish_function): Use init_vtbl_ptrs, instead of open
- coding it here.
- * cp-init.c (init_vfields): Changed name to init_vtbl_ptrs, and
- re-implement.
- * cp-init.c (emit_base_init): Use new name init_vtbl_ptrs.
- * cp-tree.h (vfield_parent): Changed to integer.
- * cp-tree.h (CLASSTYPE_VFIELD_PARENT): Changed docs to reflect new
- meaning.
- * cp-tree.h (init_vtbl_ptrs): Added init_vtbl_ptrs.
-
-Wed Jan 12 18:24:16 1994 Kung Hsu <kung@mexican.cygnus.com>
-
- * cp-decl.c (xref_tag): re-implement globalize nested type.
- * cp-decl2.c (grok_x_components): ditto.
- * cp-parse.y: ditto.
- * cp-tree.h (lang_type): add no_globalize bit in type_flags.
-
-Wed Jan 12 14:08:09 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-decl.c (grokdeclarator): Don't set TREE_PUBLIC on friend
- decls with a definition attached.
-
- * cp-typeck.c (build_modify_expr): Undo previous change in the case
- of INIT_EXPRs.
-
-Tue Jan 11 19:33:03 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-typeck.c (build_modify_expr): Replace code for generating
- assignment semantics for classes with an error.
- (build_modify_expr_1): #if 0 out.
-
- * cp-decl.c (pushdecl): Patch bogus design of pushdecl
- behavior for overloaded functions (it doesn't push anything).
-
- * cp-class.c (finish_struct): When generating default op=,
- set TYPE_HAS_ASSIGNMENT.
-
-Mon Jan 10 18:48:06 1994 Mike Stump <mrs@cygnus.com>
-
- * cp-cvt.c (convert): Make {double, clashing enum} -> enum
- invalid.
- * cp-typeck.c (convert_for_assignment): Simplify.
- * cp-decl2.c (warn_enum_clash): Removed.
- * invoke.texi (-Wenum-clash): Removed.
- * toplev.c (-Wenum-clash): Removed.
-
-Mon Jan 10 17:48:37 1994 Kung Hsu <kung@mexican.cygnus.com>
-
- * cp-decl.c (finish_decl): fix incorrect popclass call.
-
- * cp-decl.c (is_anon_name): new function, check whether the name
- is anonymous name generated by compiler.
- * cp-decl.c (grokdeclarator): allow nested SCOPE_REF
- * cp-spew.c (hack_more_ids): handle nested type in template.
- * cp-parse.y : handle nested type reference in uninstantiated
- template.
- * cp-call.c (build_method_call): handle uninstantiated template
- case.
- * cp-pt.c (search_nested_type_in_tmpl): new function, search nested
- type in template.
- * cp-pt.c (lookup_nested_type_by_name): new function, lookup nested
- type by name.
- * cp-pt.c (tsubst): handle nested type search by name.
-
-Mon Jan 10 14:32:18 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-init.c (build_member_call): Propagate qualifiers to new type.
-
- * cp-call.c (build_method_call): Count functions the new way.
-
-Fri Jan 7 19:03:26 1994 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-decl.c (pushtag): Set DECL_ASSEMBLER_NAME for nested classes,
- too.
-
-Tue Jan 4 16:45:51 1994 Kung Hsu <kung@cirdan.cygnus.com>
-
- * cp-parse.y: change to handle whether to globalize nested class.
- * cp-decl.c(xref_tag, maybe_globalize_type): Likewise.
-
-Mon Jan 3 22:22:32 1994 Gerald Baumgartner <gb@cygnus.com>
-
- * Makefile.in cp-call.c cp-class.c cp-cvt.c cp-decl.c cp-decl2.c
- cp-error.c cp-init.c cp-lex.c cp-lex.h cp-method.c cp-parse.y
- cp-spew.c cp-tree.c cp-tree.h cp-type2.c cp-typeck.c cp-xref.c
- gplus.gperf toplev.c: Incorporated C++ signature extension.
- * cp-sig.c: New file, contains most of signature processing.
- * cp-hash.h: Regenerated from gplus.gperf.
-
- * gcc.1 g++.1: Added explanation for the `-fhandle-signatures'
- and `-fno-handle-signatures' command line flags.
-
- * gcc.texi: Changed the last-modification date.
- * invoke.texi: Added `-fhandle-signatures' in the list of
- C++ language options. Added explanation for this option.
-
-Tue Dec 28 21:10:03 1993 Mike Stump <mrs@cygnus.com>
-
- * cp-init.c (expand_vec_init): Remove comptypes test, as it is too
- harsh here.
-
-Tue Dec 28 13:42:22 1993 Mike Stump <mrs@cygnus.com>
-
- * cp-pt.c (do_pending_expansions): Decide to expand a template
- member function, based upon it's class type, not the class type of
- the first place it was declared.
-
-Tue Dec 28 05:42:31 1993 Mike Stump <mrs@cygnus.com>
-
- * cp-class.c (is_normal): New routine, use to determine when the
- given binfo is the normal one. (The one that should have the simple
- vtable name.)
- * cp-class.c (modify_other_vtable_entries): Use DECL_ASSEMBLER_NAME
- to check if two fndecls are `the same'. Sometimes this routine can
- modify the main vtable, and normal should be 1, in that case, so use
- is_normal() to determine if this is the main vtable for the class.
- Don't recurse down virtual bases, as they are shared, and we take
- care of them elsewhere.
- * cp-class.c (modify_vtable_entries): If we have already updated the
- vtable with the new virtual, don't do it again.
- * cp-class.c (finish_struct): Set CLASSTYPE_VFIELD_PARENT as
- appropriate. Do virtual function overriding in virtual bases, after
- normal overriding, so that the base function list in DECL_VINDEX is
- not overridden, before we have a chance to run through the list.
- Use DECL_ASSEMBLER_NAME to check if two fndecls are `the same'.
- Make sure we pass the right address into modify_vtable_entries.
- * cp-tree.h (CLASSTYPE_VFIELD_PARENT): New field to indicate which
- binfo is the one that has the vtable that we based our vtable on.
-
-Fri Dec 24 09:40:52 1993 Michael Tiemann <tiemann@blues.cygnus.com>
-
- * cp-typeck.c (c_expand_start_case): Use default_conversion to
- convert expression from reference type if necessary.
-
-Wed Dec 22 17:58:43 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-typeck.c (build_unary_op): Make sure that it's a TREE_LIST before
- trying to read its TREE_VALUE.
-
- * cp-class.c (finish_struct_methods): Clear DECL_IN_AGGR_P here.
- (finish_struct): Instead of here.
-
-Tue Dec 21 14:34:25 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * cp-tree.c (list_hash_lookup_or_cons): Make sure the type doesn't
- have TYPE_PTRMEMFUNC_P set before we try to build its
- CLASSTYPE_ID_AS_LIST.
- (get_decl_list): Likewise, when trying to read it.
-
- * cp-tree.h (VTABLE_NAME): No def with NO_{DOLLAR,DOT} defined.
- (VTABLE_NAME_P): Use it instead of VTABLE_NAME_FORMAT.
-
-Mon Dec 20 13:35:03 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * cp-typeck.c (rationalize_conditional_expr): New function.
- (unary_complex_lvalue): Use it.
- (build_modify_expr): Use it, since trying to do an ADDR_EXPR of it
- with build_unary_op won't cut it. Don't wrap the COND_EXPR with a
- SAVE_EXPR either.
-
- * cp-decl2.c (explicit_warn_return_type): Deleted variable.
- (lang_decode_option): Set warn_return_type, not explicit_*, for
- -Wreturn-type and -Wall. This is what rest_of_compilation uses to
- decide if it should go into jump_optimize or not.
- * cp-tree.h (explicit_warn_return_type): Deleted.
- * cp-decl.c (grokdeclarator): Use warn_return_type, not explicit_*.
- (finish_function): Also complain about no return in a non-void fn if
- we're being pedantic (don't rely on use of -Wreturn-type).
-
-Fri Dec 17 15:45:46 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * cp-decl.c (grokdeclarator): Forbid declaration of a function as
- static if it's being done inside another function.
-
- * cp-search.c (compute_visibility): Check for friendship both ways.
-
-Fri Dec 17 14:28:25 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-cvt.c (build_default_binary_type_conversion): Make error
- messages more helpful.
-
- * cp-error.c (op_as_string): New function, returns "operator =="
- given EQ_EXPR or suchlike.
-
-Fri Dec 17 13:28:11 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * cp-call.c (print_n_candidates): New function.
- (build_overload_call_real): Use it when we complain about a call
- being ambiguous.
-
-Fri Dec 17 12:41:17 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-call.c (build_method_call): Fix checking for static call
- context.
-
- * cp-method.c (build_opfncall): Call build_indirect_ref on argument
- to operator new.
-
- * cp-init.c (build_new): Don't mess with rval when building
- indirect ref.
-
-Thu Dec 16 16:48:05 1993 Kung Hsu <kung@cirdan.cygnus.com>
-
- * cp-lex.c (default_assign_ref_body): add check when TYPE_NESTED_
- NAME(type) may not be exist. It's not a problem for old compiler.
-
-Thu Dec 16 14:46:06 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * cp-tree.h (CLASSTYPE_ALTERS_VISIBILITIES_P): Delete macro, it's
- never used for anything.
- (struct lang_type, member type_flags): Delete field
- `alters_visibility', and up `dummy' by 1.
- * cp-class.c (finish_base_struct): Delete code that copies the
- setting of CLASSTYPE_ALTERS_VISIBILITIES_P.
- (finish_struct): Delete code that sets it.
-
-Thu Dec 16 14:44:39 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-decl.c, cp-init.c, cp-typeck.c: Fix arguments to
- build_method_call that I messed up before.
-
- * cp-search.c (get_base_distance): If protect > 1, allow immediate
- private base.
-
- * cp-class.c (finish_base_struct): Set cant_synth_* correctly.
- (finish_struct): Likewise. Well, nigh-correctly; it won't deal
- properly with the case where a class contains an object of an
- ambiguous base class which has a protected op=. Should be fixed
- when the access control code gets overhauled.
- (finish_struct_methods): Set TYPE_HAS_NONPUBLIC_* correctly.
-
-Thu Dec 16 12:17:06 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * cp-lex.c (real_yylex): Turn the code back on that deals with
- __FUNCTION__ and __PRETTY_FUNCTION__. Don't use lookup_name, to
- avoid the ambiguity problems that led to it being turned off in the
- first place.
-
- * cp-method.c (hack_identifier): Also check for a TYPE_PTRMEMFUNC_P
- to see if something is a method.
-
-Wed Dec 15 18:35:58 1993 Mike Stump <mrs@cygnus.com>
-
- * cp-typeck.c (build_modify_expr): Avoid error messages on small
- enum bit fields.
- * cp-typeck.c (convert_for_assignment): Add missing argument to
- cp_warning and cp_pedwarn calls.
-
-Wed Dec 15 18:25:32 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-parse.y (member_init): ANSI C++ doesn't forbid old-style base
- initializers; it's just anachronistic.
-
- * cp-decl.c (finish_decl): Don't require external-linkage arrays
- to have a complete type at declaration time when pedantic.
-
-Tue Dec 14 11:37:23 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-decl.c (pushdecl): Don't set DECL_CONTEXT if it's already set.
-
- * cp-call.c (build_method_call): Don't dereference pointer given
- as instance.
-
- * cp-decl.c (finish_function): Don't pass pointer to
- build_method_call.
- (finish_function): Likewise.
-
- * cp-typeck.c (build_x_function_call): Likewise.
-
- * cp-method.c (build_component_type_expr): Likewise.
-
- * cp-init.c (build_member_call): Likewise.
- (build_new): Likewise.
-
-Mon Dec 13 18:04:33 1993 Kung Hsu <kung@cirdan.cygnus.com>
-
- * cp-decl.c (xref_tag): fix regression created by changes made
- in Dec. 7 1993.
- * cp-decl.c (xref_defn_tag): fix parallel nested class problem.
-
-Fri Dec 10 12:40:25 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * cp-call.c (compute_conversion_costs_ansi) [DEBUG_MATCHING]: Print
- out the final evaluation of the function, so we can see if ELLIPSIS,
- USER, and EVIL were set at the end.
-
- * cp-call.c (convert_harshness_ansi): When the parm isn't an lvalue,
- only go for setting TRIVIAL_CODE if we are dealing with types that
- are compatible.
-
-Thu Dec 9 18:27:22 1993 Mike Stump <mrs@cygnus.com>
-
- * cp-decl.c (flag_huge_objects): New flag to allow large objects.
- * toplev.c (lang_options): Likewise.
- * cp-decl2.c (flag_huge_objects, lang_f_options): Likewise.
- * cp-decl.c (delta_type_node): New type for delta entries.
- * cp-tree.h (delta_type_node): Likewise.
- * cp-decl.c (init_decl_processing): Setup delta_type_node.
- * cp-decl.c (init_decl_processing, build_ptrmemfunc_type): Use
- delta_type_node instead of short_integer_type_node.
- * cp-class.c (build_vtable_entry): Likewise.
-
-Thu Dec 9 16:19:05 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * cp-tree.h (OPERATOR_TYPENAME_P): Define outside of
- NO_{DOLLAR,DOT} macro checks, so it always gets defined.
- (VTABLE_NAME_P): Define for NO_DOT && NO_DOLLAR_IN_LABEL.
-
-Wed Dec 8 17:38:06 1993 Mike Stump <mrs@cygnus.com>
-
- * cp-decl.c (finish_decl): Make sure things that can go into
- "common", do go into common, if -fcommon is given.
-
-Wed Dec 8 13:01:54 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * cp-call.c (print_harshness) [DEBUG_MATCHING]: New function.
- (compute_conversion_costs_ansi) [DEBUG_MATCHING]: Print out
- argument matching diagnostics to make instantly clear what the
- compiler is doing.
-
- * cp-call.c (convert_harshness_ansi): If the parm isn't an lvalue,
- then check to see if the penalty was increased due to
- signed/unsigned mismatch, and use a TRIVIAL_CODE if it wasn't.
-
-Tue Dec 7 18:29:14 1993 Kung Hsu <kung@cirdan.cygnus.com>
-
- * cp-decl.c (xref_tag, pushtag): Fix nested class search/resolution
- problem.
-
-Tue Dec 7 16:09:34 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-class.c (finish_struct): Before synthesizing methods, if no
- methods have yet been declared then set nonprivate_method. Don't
- set non_private method after synthesizing a method.
-
- * cp-lex.c (extract_interface_info): If flag_alt_external_templates
- is set, tie emitted code to the location of template instantiation,
- rather than definition.
-
- * cp-tree.h: Declare flag_alt_external_templates.
-
- * cp-decl2.c (lang_decode_option): Support -falt-external-templates.
-
- * toplev.c (lang_options): Likewise.
-
-Mon Oct 4 12:50:02 1993 Chip Salzenberg <chip@fin.uucp>
-
- [changes propagated from 930810 snapshot]
- * cp-decl.c (init_decl_processing): Make long long available for use
- as SIZE_TYPE and PTRDIFF_TYPE.
- (finish_decl): Allow file-scope static incomplete array.
- (grokdeclarator): Don't pass on const and volatile fron function
- value type to function type.
- Warn here for volatile fn returning non-void type.
- * cp-parse.y (attrib): Accept attributes `volatile' with alias
- `noreturn', and `const'.
- * cp-typeck.c (default_conversion): Don't lose const and volatile.
- (build_binary_op_nodefault): Generate pedantic warning for comparison
- of complete pointer type with incomplete pointer type.
- (build_c_cast): Be careful that null pointer constant be INTEGER_CST.
-
-Tue Dec 7 10:46:48 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-init.c (expand_vec_init): When creating a temporary for copying
- arrays, use the type of the source, not the target.
-
- * cp-cvt.c (convert): Pass an argument for errtype to
- convert_to_reference.
-
- * cp-error.c (dump_expr, COMPONENT_REF & CALL_EXPR): Deal with
- methods, -> and `this'.
-
-Mon Dec 6 17:12:33 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-error.c (parm_as_string): New function; returns `this' or arg
- number. Corresponds to %P.
- (dump_expr): Deal with method calls.
-
- * cp-cvt.c (convert_to_reference): Stop using warn_for_assignment.
- * cp-typeck.c (convert_for_assignment): Likewise.
- (warn_for_assignment): Lose.
-
-Mon Dec 6 11:33:35 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * cp-call.c (ideal_candidate_ansi): Delete code that was never
- doing anything useful. Instead, sort once, and DO NOT wipe
- out any codes with EVIL_CODE, since that's what we use as a
- marker for the end of the list of candidates.
-
- * cp-cvt.c (convert_to_aggr): Make sure to always set H_LEN.
-
-Mon Dec 6 12:49:17 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-init.c (get_aggr_from_typedef): New function, like
- is_aggr_typedef but returns the _TYPE.
-
- * cp-call.c, cp-init.c, cp-method.c: Eradicate err_name.
-
-Sun Dec 5 18:12:48 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * cp-lex.c (readescape): Pedwarn when a hex escape is out of range.
-
-Thu Nov 25 23:50:19 1993 Chip Salzenberg <chip@fin.uucp>
-
- Delay language context change until beginning of next decl.
-
- * cp-lex.h (c_header_level): Removed.
- (pending_lang_change): Declared.
- * cp-lex.c (c_header_level): Renamed from in_c_header, made static.
- (pending_lang_change): Defined.
- (check_newline): Rework code that recognizes line number and
- filename changes. Instead of pushing and popping lang context,
- increment and decrement pending_lang_change.
- (do_pending_lang_change): Push and pop lang context according
- to value of pending_lang_change.
- * cp-parse.y (extdefs): Use lang_extdef instead of extdef.
- (extdef): Same as extdef, but call do_pending_lang_change() first.
-
-Mon Nov 15 15:39:15 1993 Chip Salzenberg <chip@fin.uucp>
-
- * cp-typeck.c (build_binary_op_nodefault): Warn for ordered
- compare of ptr with 0 only if pedantic in both cases.
-
-Thu Nov 25 13:31:37 1993 Chip Salzenberg <chip@fin.uucp>
-
- Reinstate the below patch, which got lost in the Cygnus merge:
- Tue Nov 23 13:59:24 1993 Hallvard B Furuseth (hbf@durin.uio.no)
- * cp-parse.y (maybe_type_qual): Don't fail to set $$.
-
-Wed Nov 17 19:03:30 1993 Chip Salzenberg <chip@fin.uucp>
-
- * cp-parse.y (attrib): Allow "ident(ident)" like the C front end.
-
-Fri Oct 22 20:43:37 1993 Paul Eggert <eggert@twinsun.com>
-
- * cp-lex.c (real_yylex): Diagnose floating point constants
- that are too large.
-
-Wed Nov 17 19:10:37 1993 Chip Salzenberg <chip@fin.uucp>
-
- * cp-type2.c (build_functional_cast): ARM page 16: When a class
- and an object, function or enumerator are declared in the same
- scope with the same name, the class name is hidden.
-
-Wed Nov 17 19:07:18 1993 Chip Salzenberg <chip@fin.uucp>
-
- * cp-call.c (convert_harshness_ansi): Distinguish float, double,
- and long double from each other when overloading.
- (compute_conversion_costs_{ansi,old}, build_method_call,
- build_overlay_call_real, convert_to_aggr): Always set and
- always use H_LEN member of candidate structure.
-
-Mon Oct 11 23:10:53 1993 Chip Salzenberg <chip@fin.uucp>
-
- * cp-decl.c (duplicate_decls): Note redeclarations of library
- functions, and generate distinct warnings for them.
-
-Mon Oct 4 12:26:49 1993 Chip Salzenberg <chip@fin.uucp>
-
- Support format warnings in G++.
-
- * cp-tree.h: Protect against multiple inclusion.
- Declare all public functions in c-common.c (copy from c-tree.h).
- (STDIO_PROTO): Define.
- (warn_format): Declare.
- (record_format_info): Remove declaration.
- * cp-decl.c (init_decl_processing): Call init_function_format_info.
- * cp-decl2.c (lang_decode_option): Make "-Wall" include warn_format.
- * cp-typeck.c (build_function_call_real): Call check_function_format.
- (record_format_info): Remove -- obsolete stub.
-
-Sat Jul 24 12:04:29 1993 Chip Salzenberg <chip@fin.uucp>
-
- * cp-decl.c (duplicate_decls): Don't warn for non-extern var decl
- following an extern one (for -Wredundant-decls).
- * cp-parse.y (primary): In statement expression case, if compstmt
- returns something other than a BLOCK, return it unchanged.
-
-Thu Dec 2 20:44:58 1993 Chip Salzenberg <chip@fin.uucp>
-
- * cp-decl.c (warn_extern_redeclared_static): New function made
- from code extracted from pushdecl.
- (duplicate_decls, pushdecl): Call new function.
- (lookup_name_current_level): Allow for IDENTIFIER_GLOBAL_VALUE
- to be a TREE_LIST when function is declared in 'extern "C" {}'.
-
-Fri Dec 3 16:01:10 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-class.c (duplicate_tag_error): Use cp_error.
- (finish_base_struct): Check for ambiguity with direct base, and don't
- generate op= or copy ctor if it exists.
-
-Fri Dec 3 15:32:34 1993 Kung Hsu <kung@cirdan.cygnus.com>
-
- * cp-init.c (expand_member_init): when initializer name is null,
- don't try to build it now because emit_base_init will handle it.
-
-Fri Dec 3 12:28:59 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-lex.c (init_lex): Initialize input_filename to "<internal>" for
- code such as ExceptionHandler::operator=.
-
-Fri Dec 3 10:32:08 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-decl.c (grokdeclarator): Don't try to print out dname when
- complaining about arrays of references if decl_context==TYPENAME,
- since it will be null.
-
- * cp-decl2.c: Default to flag_ansi_overloading.
-
-Thu Dec 2 18:05:56 1993 Kung Hsu <kung@cirdan.cygnus.com>
-
- * cp-call.c (build_method_call): use binfo from instance if it's
- different from binfo (basetype_path) passed from above.
-
-Wed Nov 17 19:14:29 1993 Chip Salzenberg <chip@fin.uucp>
-
- cp-error.c (dump_expr): Use unsigned chars to output a
- TREE_REAL_CST in hex.
-
-Thu Dec 2 11:05:48 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-class.c (finish_struct): Fix typo in setting
- cant_synth_asn_ref.
-
- * cp-tree.h (TYPE_NESTED_NAME): New macro, does
- DECL_NESTED_TYPENAME (TYPE_NAME (NODE)).
-
- * cp-lex.c (default_copy_constructor_body): Change
- DECL_NAME (TYPE_NAME (btype)) to TYPE_NESTED_NAME (btype).
- (default_assign_ref_body): Likewise.
- (default_copy_constructor_body): Call operator= explicitly for
- base classes that have no constructor.
-
-Thu Dec 2 10:47:15 1993 Michael Tiemann <tiemann@blues.cygnus.com>
-
- * cp-call.c (build_method_call): If the instance variable is
- converted to error_mark_node when we're trying to convert it to the
- base type of a method we're looking up, return error_mark_node.
-
-Thu Dec 2 10:41:16 1993 Torbjorn Granlund <tege@cygnus.com>
-
- * cp-typeck.c (build_binary_op_nodefault): In *_DIV_EXPR *_MOD_EXPR
- cases, tests for unsigned operands by peeking inside a NOP_EXPR.
-
-Wed Dec 1 13:33:34 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * cp-call.c (compute_conversion_costs_ansi): Use the size of struct
- harshness_code, not the size of short, for clearing out the
- ansi_harshness.
-
- * cp-call.c (print_candidates): New function.
- (build_method_call): When we had some candidates, but didn't get a
- usable match, don't report that we got an error with the first
- candidate. Instead, say there were no matches, and list the
- candidates with print_candidates. In the second pass, make sure we
- clear out ever_seen, so we can accurately count the number of
- functions that qualified.
-
-Wed Dec 1 09:53:59 1993 Torbjorn Granlund <tege@cygnus.com>
-
- * cp-typeck.c (build_binary_op_nodefault): Shorten for *_MOD_EXPR
- only if op1 is known to be != -1.
- (build_binary_op_nodefault): Handle *_DIV_EXPR likewise.
-
-Tue Nov 30 14:07:26 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * cp-method.c (hack_identifier): If the field itself is private, and
- not from a private base class, say so.
-
-Mon Nov 29 03:00:56 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-decl.c (grokdeclarator): Always warn on initialization of
- const member.
-
-Wed Nov 24 00:49:35 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-class.c (finish_struct): Set TYPE_GETS_CONST_* properly.
- (finish_base_struct): Set cant_synth_asn_ref properly.
-
- * cp-lex.c (cons_up_default_function): Add section for operator=.
- (default_assign_ref_body): New function, mostly cribbed from
- default_copy_constructor_body.
-
- * cp-class.c (base_info): Add members cant_synth_copy_ctor,
- cant_synth_asn_ref, no_const_asn_ref.
- (finish_base_struct): Update no_const_asn_ref, note that you should
- update cant_synth_*, propagate TYPE_GETS_ASSIGN_REF.
- (finish_struct): Add decls for cant_synth_*, no_const_asn_ref, and
- initialize them properly. Set no_const_asn_ref properly. Set
- cant_synth_* in some of the situations where they should be set.
- Propagate TYPE_GETS_ASSIGN_REF. Use cant_synth_copy_ctor. Add call
- to cons_up_default_function for operator=.
-
-Tue Nov 23 20:24:58 1993 Mike Stump <mrs@cygnus.com>
-
- * cp-cvt.c (convert_force): Add code to perform casting of pointer
- to member function types.
- * cp-typeck.c (build_ptrmemfunc): Add FORCE parameter to indicate
- when the conversion should be done, regardless.
- * cp-tree.h (build_ptrmemfunc): Likewise.
- * cp-type2.c (digest_init): Likewise.
- * cp-typeck.c (convert_for_assignment): Likewise.
-
-Tue Nov 23 18:06:58 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-error.c (dump_expr): Do the right thing for variables of
- reference type.
-
- * cp-decl.c (grok_op_properties): Set TYPE_HAS_ASSIGN_REF
- and its kin properly.
- (xref_tag): Propagate TYPE_GETS_ASSIGN_REF.
-
-Tue Nov 23 12:26:13 1993 Mike Stump <mrs@cygnus.com>
-
- * cp-method.c (build_opfncall): Don't count pointer to member
- functions as aggregates here, as we don't want to look up methods in
- them. The compiler would core dump if we did, as they don't have
- normal names.
- * cp-typeck.c (build_indirect_ref): Improve wording on error
- message.
-
-Mon Nov 22 14:22:23 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-decl.c (grok_op_properties): Allow operator?: with pedwarn
- (since it's supported in other compiler bits).
-
- * cp-method.c (report_type_mismatch): Use cp_error; ignore err_name
- argument.
-
- * cp-error.c (dump_function_decl): Don't print return type for
- constructors and destructors.
-
- * cp-cvt.c (cp_convert_to_pointer): Import code from
- convert_to_pointer so we can return error_mark_node in the case of an
- error, and to allow more meaningful error messages.
- (build_type_conversion): Don't go through void* when trying
- to convert to a pointer type.
-
- * cp-decl.c (grokfndecl): Move call to grok_op_properties back
- after grokclassfn so that it's dealing with the right decl.
- (grok_op_properties): Don't assert !methodp for op new and op delete.
-
- * cp-init.c (build_delete): Don't use TYPE_BUILT_IN (there are now
- no uses of it in the compiler).
-
- * cp-call.c (build_scoped_method_call): Fix for destructors of simple
- types.
- (build_method_call): Likewise.
-
-Fri Nov 19 12:59:38 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-tree.c (count_functions): Abstraction function.
-
- * cp-call.c (build_overload_call_real): Deal with new overloading
- properly, remove dead code.
-
- * gcc.c (default_compilers): Generate and use .ii files in the
- intermediate stage of compiling C++ source.
-
-Fri Nov 19 11:26:09 1993 Jim Wilson <wilson@sphagnum.cygnus.com>
-
- * cp-expr.c (cplus_expand_expr): Make call_target a valid memory
- address before using it, so it can be later safely compared.
-
-Fri Nov 12 15:30:27 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-pt.c (tsubst): Deal with new overloading.
-
- * cp-typeck.c (fntype_p): is the arg function type?
- (comp_target_parms): pedwarn on conversion from (anything) to (...).
- (build_x_function_call): Deal with new overloading.
-
- * cp-tree.c (decl_list_length): Deal with new overloading.
- (decl_value_member): Like value_member, but for DECL_CHAINs.
-
- * cp-decl.c (duplicate_decls): Deal with new overloading.
- (start_decl): Likewise.
-
- * cp-class.c (instantiate_type): Deal with new overloading.
-
- * cp-call.c (convert_harshness_ansi): Deal with new overloading.
- (convert_harshness_old): Deal with new overloading.
- (build_overload_call_real): Likewise.
-
-Mon Nov 8 13:50:49 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-tree.c (get_unique_fn): New function; returns FUNCTION_DECL
- if unambiguous, NULL_TREE otherwise.
- (get_first_fn): Returns the first appropriate FUNCTION_DECL.
- (is_overloaded_fn): Returns whether or not the passed tree is
- a function or list of functions.
-
- * cp-init.c (init_init_processing): use `get_first_fn' to find
- the FUNCTION_DEFN for new and delete.
-
- * cp-decl.c (push_overloaded_decl): Use new overloading strategy, cut
- code size in half (I spit on special cases).
-
-Tue Sep 7 20:03:33 1993 Jason Merrill <jason@deneb.cygnus.com>
-
- * cp-decl.c: Allow references and template type parameters as well
+Local Variables:
+add-log-time-format: current-time-string
+End:
diff --git a/gcc/cp/ChangeLog.1 b/gcc/cp/ChangeLog.1
new file mode 100644
index 00000000000..024a4e62126
--- /dev/null
+++ b/gcc/cp/ChangeLog.1
@@ -0,0 +1,9451 @@
+Sun Nov 26 14:47:42 1995 Richard Kenner <kenner@mole.gnu.ai.mit.edu>
+
+ * Version 2.7.2 released.
+
+Mon Nov 20 14:05:00 1995 Mike Stump <mrs@cygnus.com>
+
+ * g++.c (pfatal_with_name): Add missing third argument to concat.
+
+Thu Oct 26 13:59:54 1995 Mike Stump <mrs@cygnus.com>
+
+ * init.c (expand_aggr_init): Handle cv qualifiers on the object's
+ type.
+
+Sat Nov 11 08:25:55 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * Version 2.7.1 released.
+
+Thu Nov 2 17:02:47 1995 Jason Merrill <jason@yorick.cygnus.com>
+
+ * call.c (convert_harshness): Handle references to arrays.
+
+Fri Oct 27 14:20:21 1995 Jason Merrill <jason@yorick.cygnus.com>
+
+ * typeck.c (comp_target_types): Check multi-level pointer
+ conversions in both directions.
+
+Tue Oct 17 21:39:05 1995 Jason Merrill <jason@yorick.cygnus.com>
+
+ * parse.y (explicit_instantiation): Fix 'extern template' with no
+ return type.
+
+Mon Oct 16 14:35:20 1995 Jason Merrill <jason@yorick.cygnus.com>
+
+ * parse.y (explicit_instantiation): Support automatic instantiation
+ of constructors.
+ (named_class_head_*): Support out-of-class definition of nested
+ types.
+
+Wed Oct 11 12:20:56 1995 Mike Stump <mrs@cygnus.com>
+
+ * search.c (envelope_add_decl): New routine. Fix so that
+ methods are hidden in the same way that other members are.
+ (dfs_pushdecls): Cleanup and move functionality out of line,
+ into envelope_add_decl.
+
+Tue Oct 10 15:46:01 1995 Mike Stump <mrs@cygnus.com>
+
+ * typeck.c (mark_addressable): Only call assemble_external if we
+ have started the output file.
+
+Tue Oct 10 11:27:18 1995 Jason Merrill <jason@yorick.cygnus.com>
+
+ * decl.c (start_function): Fix earlier cv-quals change.
+
+Mon Oct 9 23:53:05 1995 Mike Stump <mrs@cygnus.com>
+
+ * parse.y (complex_direct_notype_declarator): Only push the class if
+ we are not already in the class.
+
+Mon Oct 9 11:22:03 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * decl.c (duplicate_decls): Call merge_machine_decl_attributes.
+ Update olddecl's attributes too.
+ (grokdeclarator): #if 0 out call to build_decl_attribute_variant.
+ * typeck.c (common_type): Call merge_machine_type_attributes.
+
+Fri Oct 6 14:44:27 1995 Mike Stump <mrs@cygnus.com>
+
+ * typeck.c (mark_addressable): Add missing call to
+ assemble_external.
+
+Wed Oct 4 15:06:39 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl.c (store_parm_decls): Make sure the unwinder start comes
+ before the exception specification start.
+ * except.c (expand_exception_blocks): Make sure the unwinder end
+ comes after the terminate protected catch clause region and after
+ the end of the exception specification region.
+
+Wed Oct 4 12:47:02 1995 Jason Merrill <jason@yorick.cygnus.com>
+
+ * lex.c (real_yylex): Fix identifier case for linemode.
+ (handle_sysv_pragma): Don't abort when we see a pragma we don't
+ recognize.
+
+Tue Oct 3 14:09:46 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl.c (store_parm_decls): Add a call to start_eh_unwinder.
+ * except.c (init_exception_processing): __throw doesn't take any
+ arguments.
+ (expand_builtin_throw): Likewise. Always use Pmode, instead of SImode
+ for all pointers. Use expand_builtin_return_addr to unwind the
+ first level off the stack.
+ (do_unwind): Always use Pmode, instead of SImode for all pointers.
+ (expand_exception_blocks): Add a call to end_eh_unwinder.
+ (start_eh_unwinder, end_eh_unwinder): New routines to build machine
+ independent stack unwinders for function/method calls.
+
+Mon Oct 2 17:20:42 1995 Mike Stump <mrs@cygnus.com>
+
+ * tree.c (unsave_expr_now): Make sure we process the argument list
+ of any called functions. Fixes incorrect code generation for
+ cleanups.
+
+Mon Oct 2 13:04:16 1995 Mike Stump <mrs@cygnus.com>
+
+ * typeck.c (get_member_function_from_ptrfunc): Save function if it
+ needs it. Cures core dump on things like (this->*(f()))().
+
+Sat Sep 23 22:51:25 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (start_function): Conform to gcc cv-quals convention (no
+ expression has a cv-qualified type) in RESULT_DECLs.
+ * method.c (make_thunk): Likewise.
+
+Fri Sep 22 10:21:13 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl.c (pushtag): Add in the namespace name for the tag.
+
+Thu Sep 21 13:11:13 1995 Mike Stump <mrs@cygnus.com>
+
+ * parse.y (maybe_base_class_list, base_class_list, base_class,
+ base_class_access_list): Make sure we see the typenames for base
+ classes.
+ * lex.c (see_typename): Instead of failing to see a typename when
+ there is no next token, perfer a typename, and get the next token.
+
+Wed Sep 20 12:35:27 1995 Michael Meissner <meissner@cygnus.com>
+
+ * decl.c (init_decl_processing): Add __builtin_expect.
+
+Tue Sep 19 16:48:11 1995 Mike Stump <mrs@cygnus.com>
+
+ * cvt.c (cp_convert_to_pointer): Don't allow leftover conversions to
+ or from pointer to member functions, they must all be handled before
+ this point.
+
+Fri Sep 15 17:14:47 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * init.c (resolve_offset_ref): Fix wording of non-static member
+ being referenced as a static.
+
+Fri Sep 15 12:39:11 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (build_indirect_ref): Only bash pointer if we actually
+ call build_expr_type_conversion.
+
+Thu Sep 14 18:24:56 1995 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cvt.c (build_expr_type_conversion): Handle conversion from
+ reference.
+ * typeck.c (build_indirect_ref): Avoid infinite recursion.
+
+Thu Sep 14 17:23:28 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl.c (expand_start_early_try_stmts): New routine to start a try
+ block at the start of the function, for function-try-blocks.
+ * cp-tree.h (expand_start_early_try_stmts): Declare it.
+ * parse.y (function_try_block): Use it, instead of doing it here, as
+ we don't want to include rtl.h here, as that conflicts with RETURN
+ in the parser.
+
+Wed Sep 13 18:32:24 1995 Mike Stump <mrs@cygnus.com>
+
+ * lex.c (reinit_parse_for_block): Support saving inline
+ function-try-blocks, uses peekyylex.
+ * parse.y (eat_saved_input): New rule, permit the parser to see that
+ END_OF_SAVED_INPUT is ok, as it can see this when parsing the
+ handlers of a function-try-block.
+ (fndef): Use it.
+ (component_decl): Make sure TRY and RETURN can come after fn.def2.
+ * spew.c (peekyylex): New routine to peek at what will come next.
+
+Wed Sep 13 16:52:06 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (comptypes): Tighten up comparisons of template type
+ parms.
+
+ * decl.c (duplicate_decls): Turn off whining about virtual functions
+ redeclared inline for now.
+
+Wed Sep 13 11:13:40 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl.c (store_in_parms): New routine to put things before we
+ put base inits.
+ * cp-tree.h (store_in_parms): Declare it.
+ * decl.c (store_parm_decls): Use it to makr sure the starting of the
+ eh spec comes before base inits.
+ (finish_function): Use sequences instead of the obsolete
+ reorder_insns.
+ * parse.y (fndef): Enhance readability and maintainability. Update
+ to include function_try_block syntax.
+ (function_try_block): Add.
+
+Tue Sep 12 17:43:07 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * call.c (convert_harshness): Use comptypes, not ==, to check if
+ TYPE and PARMTYPE are equivalent on a function type.
+
+Tue Sep 12 17:31:33 1995 Douglas Rupp <drupp@cs.washington.edu>
+
+ * Make-lang.in (cc1plus) : Removed unnecessary $(exeext).
+
+Mon Sep 11 23:24:07 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_throw): Never allocate storage for thrown pointer
+ to objects.
+
+Mon Sep 11 19:36:45 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_start_catch_block): Pointers to objects come
+ back from catch matching already dereferenced, don't dereference
+ again.
+
+Mon Sep 11 15:46:28 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_throw): Only decay the throw expression, don't do
+ any default conversions. This is so that one can throw and catch
+ characters, and not have them match integers.
+
+Mon Sep 11 13:46:45 1995 Mike Stump <mrs@cygnus.com>
+
+ * error.c (dump_aggr_type): Deal with anonymous unions that don't
+ have a TYPE_NAME.
+
+Fri Sep 8 20:40:27 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * lex.c (handle_sysv_pragma): Deal with getting a comma from yylex.
+
+Fri Sep 8 15:51:41 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_end_eh_spec): Handle empty EH specifications.
+
+Fri Sep 8 15:27:22 1995 Mike Stump <mrs@cygnus.com>
+
+ * cp-tree.h (expand_start_eh_spec): Declare new routine.
+ (expand_end_eh_spec): Likewise.
+ * decl.c (store_parm_decls): Call expand_start_eh_spec to process
+ exception specifications.
+ * except.c (expand_leftover_cleanups): Remove unused parameter.
+ (expand_end_catch_block): Likewise.
+ (expand_exception_blocks): Likewise.
+ (expand_start_eh_spec): New routine to mark the start of an
+ exception specification region.
+ (expand_end_eh_spec): New routine to mark the end of an exception
+ specification region.
+ (expand_exception_blocks): Call expand_end_eh_spec to process
+ exception specifications.
+
+Fri Sep 8 14:40:48 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * lex.c (do_identifier): Use global binding in preference of
+ dead for local variable.
+
+Wed Sep 6 19:32:59 1995 Mike Stump <mrs@cygnus.com>
+
+ * cp-tree.h (build_exception_variant): Remove used first argument.
+ * decl.c (duplicate_decls): Likewise.
+ (grokfndecl): Likewise.
+ (revert_static_member_fn): Likewise.
+ * decl2.c (grok_method_quals): Likewise.
+ * tree.c (build_exception_variant): Likewise.
+ * typeck.c (common_type): Likewise.
+ * decl2.c (grokclassfn): After changing the type, call
+ build_exception_variant, if necessary.
+
+Tue Sep 5 15:56:27 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_throw): Run cleanups for the throw expression.
+
+Wed Aug 30 15:24:38 1995 Stephen L. Favor <sfavor@tigger.intecom.com>
+
+ * except.c (expand_builtin_throw): Moved gen_label_rtx calls beyond
+ the store_parm_decls call which does initialization in the emit_*
+ code concerning label numbering.
+
+Thu Aug 31 09:01:07 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_internal_throw): Let the frontend be responsible
+ for managing all frontend EH parameters, the backend routine only
+ needs to deal with backend values. type and value are no longer
+ passed to __throw.
+ (init_exception_processing): Likewise.
+ (expand_start_all_catch): Likewise.
+ (expand_end_all_catch): Likewise.
+ (expand_leftover_cleanups): Likewise.
+ (expand_end_catch_block): Likewise.
+ (expand_builtin_throw): Likewise.
+ (expand_throw): Likewise.
+
+Tue Aug 29 15:04:36 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * cp-tree.h (DECL_REAL_CONTEXT): Give the real declaration context
+ for a decl.
+ * decl.c (cp_finish_decl): Use it.
+
+Tue Aug 29 10:30:27 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_internal_throw): Oops, almost forgot type and
+ value are now trees.
+
+Mon Aug 28 17:57:45 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ Fix the attribute handling to make sure they get noted before we
+ create the function's RTL, in case they can affect that.
+ * decl.c (grokfndecl): New arg ATTRLIST. Run
+ cplus_decl_attributes before creating the decl's rtl.
+ (grokdeclarator): New arg ATTRLIST, passed down into grokfndecl.
+ (shadow_tag, groktypename, start_decl, start_method): Pass a
+ NULL_TREE to grokdeclarator's new last arg.
+ * decl2.c (grokfield): New arg ATTRLIST, passed into grokdeclarator.
+ (grokbitfield, grokoptypename): Pass a NULL_TREE to
+ grokdeclarator's new last arg.
+ * except.c (expand_start_catch_block): Likewise.
+ * pt.c (process_template_parm, end_template_decl,
+ do_function_instantiation): Likewise.
+ * cp-tree.h (grokfield): Add arg.
+ (grokdeclarator): Move the prototype from here...
+ * decl.h: ...to here.
+ * lex.c (cons_up_default_function): Pass NULL_TREE to grokfield
+ ATTRLIST argument.
+ * parse.y: Create a list for the grokfield arg where appropriate,
+ and pass it down instead of calling cplus_decl_attributes.
+
+Mon Aug 28 15:07:24 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c: Always allow turning on exception handling. Allow cross
+ compilations to use EH.
+
+Thu Aug 24 17:39:24 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (saved_pc, saved_throw_type, saved_throw_value): Use
+ trees, instead of rtxs, and don't depend on using special machine
+ dependent registers.
+ (expand_internal_throw): Likewise.
+ (init_exception_processing): Likewise.
+ (expand_start_all_catch): Likewise.
+ (expand_end_all_catch): Likewise.
+ (expand_start_catch_block): Likewise.
+ (expand_leftover_cleanups): Likewise.
+ (expand_end_catch_block): Likewise.
+ (expand_builtin_throw): Likewise.
+ (expand_throw): Likewise.
+
+Wed Aug 23 17:25:51 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * cvt.c (build_expr_type_conversion): Handle conversions to
+ reference types.
+
+Wed Aug 23 15:33:59 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (do_unwind): Work around backend bug with -fpic.
+
+Tue Aug 22 17:20:07 1995 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * decl2.c (flag_new_for_scope): Add a new mode that follows ANSI
+ for-scoping, but supports (and warns about) old programs.
+ Make the new mode (with value 1) the default.
+ (lang_f_options): The on-value for flag_new_for_scope is now 2.
+ * cp-tree.h (DECL_DEAD_FOR_LOCAL, DECL_ERROR_REPORTED): New macros
+ (DECL_SHADOWED_FOR_VAR): Likewise.
+ * decl.c (struct binding_level): New fields dead_vars_from_for
+ and is_for_scope.
+ (note_level_for_for): New function.
+ (poplevel): Special processing if is_for_scope.
+ (pushdecl): Warn if for-scope variable shadows local.
+ * lex.c (do_identifier): Handle old (non-ANSI) for scoping,
+ and warn if conflicts.
+ * parse.y (FOR): Call note_level_for_for.
+
+Mon Aug 21 10:28:31 1995 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl2.c (import_export_inline): Class interface hackery does not
+ apply to synthesized methods.
+
+Sun Aug 20 16:29:00 1995 Mike Stump <mrs@cygnus.com>
+
+ * search.c (virtual_context): Find the right context more often.
+ Solves a `recoverable compiler error, fixups for virtual function'
+ problem.
+
+Sun Aug 20 13:53:24 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_start_all_catch): Ensure that we always transfer
+ control to the right EH handler, by rethrowing the end label on the
+ region, instead of hoping we are nested and falling through.
+ (expand_leftover_cleanups): Likewise.
+ (end_protect): Since we now rethrow the end label, put a
+ nop after it, so that outer regions are recognized.
+ * init.c (build_vec_delete_1): New routine to handle most of vector
+ deleting, all code moved here from build_vec_delete.
+ (build_array_eh_cleanup): Use build_vec_delete_1 to do all the real
+ work.
+ (expand_vec_init): If the array needs partial destructing, setup an
+ EH region to handle it.
+ (build_vec_delete): Move lots of code to build_vec_delete_1, use
+ build_vec_delete_1 to do the grunt work.
+
+Sat Aug 19 14:25:33 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ Handle decl attributes properly for function definitions without
+ previous attribute-loaded declarations.
+ * decl.c (start_function): New arg ATTRS. Add a call to
+ cplus_decl_attributes with it before we create the RTL.
+ * cp-tree.h (start_function): Update prototype.
+ * parse.y (fn.def1): Pass ATTRS into start_function instead of
+ trying to call cplus_decl_attributes too late. Pass a NULL_TREE
+ for other use.
+ * decl2.c (finish_file): Pass NULL_TREE as fourth arg to
+ start_function.
+ * method.c (synthesize_method): Likewise.
+ * except.c (expand_builtin_throw): Likewise for start on __throw.
+
+Sat Aug 19 13:36:08 1995 Mike Stump <mrs@cygnus.com>
+
+ * class.c (set_rtti_entry): Turn on -fvtable-thunk -frtti support.
+ This changes -fvtable-thunks vtable layout, so a recompile will be
+ necessary, if you use -fvtable-thunks.
+ (get_vtable_entry): Use n, instead of i to be consistent with the
+ rest of the compiler.
+ (get_vtable_entry_n): Likewise.
+ (add_virtual_function): Add a slot for the tdesc, if -fvtable-thunks
+ are being used.
+ (finish_struct_1): Likewise.
+ (skip_rtti_stuff): New routine to collapse similar code from many
+ different parts of the compiler. I think I got them all.
+ (modify_one_vtable): Use it.
+ (fixup_vtable_deltas1): Likewise.
+ (override_one_vtable): Likewise.
+ * decl2.c (mark_vtable_entries): Likewise.
+ * tree.c (debug_binfo): Likewise.
+ * search.c (expand_upcast_fixups): Likewise.
+ (get_abstract_virtuals_1): Likewise. Use virtuals, instead of tmp to
+ consistent with the rest of the compiler.
+ (get_abstract_virtuals): Likewise.
+ * cp-tree.h (skip_rtti_stuff): New routine, declare it.
+ * gc.c (build_headof): Support -fvtable-thunk and -frtti together.
+ (build_typeid): Likewise.
+ (build_classof): Remove old style way of doing rtti. Remove support
+ for `classof' and `headof'.
+ * gxx.gperf: Likewise.
+ * hash.h: Likewise.
+ * parse.y: Likewise.
+
+Fri Aug 18 17:31:58 1995 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (start_function): Clear ctor_label and dtor_label.
+
+ * class.c (finish_struct_1): Fix handling of access decls.
+
+Tue Aug 15 19:21:54 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * class.c (finish_struct): Only do minimal processing here, so it
+ can be used for class template definitions, as well.
+ (finish_struct_1): New function with the rest of the code.
+
+Tue Aug 15 09:46:16 1995 Mike Stump <mrs@cygnus.com>
+
+ * class.c (prepare_fresh_vtable): On second though, always build the
+ offset (see Aug 10 change), unless -fvtable-thunks is given. It
+ does this by calling the new routine set_rtti_entry.
+ (finish_struct): Likewise.
+ (set_rtti_entry): New routine to update the rtti information at the
+ start of the vtable.
+
+Mon Aug 14 12:21:22 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * error.c (dump_decl, case IDENTIFIER_NODE): Only work on a dtor
+ if it's declared in the C++ language spec.
+ (dump_function_decl): Likewise.
+ (dump_function_name): Likewise.
+ (ident_fndecl): Make sure we got something back from lookup_name.
+ * decl.c (start_function): Likewise.
+
+Fri Aug 11 16:52:15 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * call.c (build_method_call): Don't call build_new when calling a
+ constructor without an instance.
+
+Thu Aug 10 20:00:17 1995 Mike Stump <mrs@cygnus.com>
+
+ * class.c (prepare_fresh_vtable): Always build the offset to the
+ complete object, as it doesn't cost much. This allows dynamic_cast
+ to void * to work when -frtti isn't given.
+ (finish_struct): Likewise.
+
+Thu Aug 10 16:31:28 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (build_eh_type): Split out some functionality to new
+ routine named build_eh_type_type.
+ (build_eh_type_type): New routine.
+ (expand_start_catch_block): Use build_eh_type_type, as we never want
+ the dynamic type of the catch parameter, just the static type.
+ Fixes core dumps when -frtti is used and one catchs pointers to
+ classes.
+
+Thu Aug 10 14:55:29 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_builtin_throw): Since we now use normal calling
+ conventions for __throw, we have to remove the first layer off the
+ stack, so that the next context we search for handlers is the outer
+ context instead of the context that had the call to __throw, if we
+ don't immediately find the desired context.
+
+Tue Aug 8 17:44:23 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * tree.c (cp_expand_decl_cleanup): Returns int, not tree.
+ * cp-tree.h: Update.
+
+ * parse.y (template_type_parm): Add support for `typename'.
+
+Tue Aug 8 12:06:31 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_internal_throw): New internal routine to throw a
+ value.
+ (expand_end_all_catch, expand_leftover_cleanups): All throwers
+ changed to use `expand_internal_throw' instead of jumping to throw
+ label.
+ (expand_end_catch_block, expand_throw): Likewise.
+ (throw_label): Removed.
+ (expand_builtin_throw): Changed so that EH parameters are passed by
+ normal function call conventions. Completes Aug 4th work.
+
+Fri Aug 4 17:17:08 1995 Mike Stump <mrs@cygnus.com>
+
+ * cp-tree.h (expand_builtin_throw): Declare it.
+ * decl2.c (finish_file): Call expand_builtin_throw.
+ * except.c (make_first_label): Remove.
+ (init_exception_processing): Don't use a LABEL_REF for throw_label,
+ instead use a SYMBOL_REF, this is so that we don't use LABEL_REFs in
+ other functions that don't really appear in those functions. This
+ solves a problem where cc1plus consumed exponential amounts of
+ memory when -Wall was used.
+ (expand_end_all_catch, expand_leftover_cleanups,
+ expand_end_catch_block, expand_throw): Change all uses of
+ throw_label to match new style.
+ (do_unwind): Rename parameter to inner_throw_label, as it is now
+ different from throw_label. Also, assume that our caller will wrap
+ the passed label with a LABEL_REF, if needed.
+ (expand_builtin_throw): Make external, change so that the generated
+ throw is now a real function.
+ (expand_exception_blocks): Never generate throw code inside another
+ function.
+
+Fri Aug 4 12:20:02 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl.c (grokdeclarator): Move checking of mutable const objects
+ and mutable static objects down, as we might decide during parsing
+ to unset staticp or constp (for example, when const is part of the
+ object being pointed to).
+
+Thu Aug 3 17:13:43 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (output_exception_table_entry): Enhance portability to
+ weird machines.
+ (emit_exception_table): Likewise.
+
+Thu Aug 3 16:41:38 1995 Mike Stump <mrs@cygnus.com>
+
+ * typeck.c (build_ptrmemfunc): Handle casting of pointer to
+ non-virtual member functions.
+
+Wed Aug 2 11:58:25 1995 Mike Stump <mrs@cygnus.com>
+
+ * gc.c (build_typeid): Strip cv qualifiers so that const T&, T&, T
+ and const T all match.
+
+Wed Aug 2 11:25:33 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (build_eh_type): Strip cv qualifiers so that const T&,
+ T&, T and const T all match.
+
+Tue Aug 1 14:20:16 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c: Fix up comments, cleanup code and eliminate exceptNode,
+ exceptStack, exceptstack, push_except_stmts, pop_except_stmts,
+ new_except_stack, push_last_insn, pop_last_insn, insn_save_node and
+ InsnSave. Also, numerous speed improvements, and correctness
+ improvements. Double faulting in all situations should now be
+ handled correctly.
+ (expand_start_all_catch): Instead of having many terminate protected
+ regions, just have one.
+ (expand_start_catch_block): No longer have to protect
+ false_label_rtx, as it isn't used for EH region marking.
+ (expand_end_catch_block): Expand out EH cleanups here by using
+ expand_leftover_cleanups.
+ (expand_end_all_catch): Use sequences instead of playing with insn
+ links directly.
+ (expand_exception_blocks): Likewise. Also protect all catch clauses
+ with one terminate region.
+
+Mon Jul 31 13:24:30 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * method.c (report_type_mismatch): Don't talk about an object
+ parameter for non-methods.
+
+Sun Jul 30 13:13:02 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * class.c (finish_struct): Catch private and protected members of
+ anonymous unions here.
+ * decl2.c (finish_anon_union): And here.
+ * parse.y: Instead of here.
+
+ * errfn.c (ARGSLIST): Support passing four args.
+ * error.c (cv_as_string): New function.
+ (cp_printers): Add it.
+ * call.c (build_method_call): Report 'const' at end of pseudo-decl.
+
+ * method.c (report_type_mismatch): Deal with a bad_arg of 0.
+
+ * init.c (expand_aggr_init): Handle volatile objects, too.
+
+Sat Jul 29 13:42:03 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (struct binding_level): Keep list of incomplete decls.
+ (print_binding_level): Use list_length to count them.
+ (pushdecl): Build up the list.
+ (hack_incomplete_structures): Walk it and prune completed decls.
+
+Fri Jul 28 15:26:44 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (comp_target_types): Don't check const and volatile for
+ function types.
+ (comp_ptr_ttypes_real): Likewise.
+
+Thu Jul 27 15:40:48 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (comp_target_types): Fix.
+
+Thu Jul 27 15:10:48 1995 Mike Stump <mrs@cygnus.com>
+
+ * cp-tree.h (unsave_expr_now, build_unsave_expr,
+ cp_expand_decl_cleanup): Declare new routines.
+ * decl.c (cp_finish_decl, store_parm_decls,
+ hack_incomplete_structures): Change all cals from
+ expand_decl_cleanup to cp_expand_decl_cleanup.
+ * gc.c (protect_value_from_gc): Likewise.
+ * expr.c (cplus_expand_expr): Handle UNSAVE_EXPRs.
+ * tree.c (unsave_expr): New routine to build an UNSAVE_EXPR.
+ (unsave_expr_now): Backend routine used by tree expander.
+ (cp_expand_decl_cleanup): Wrap second argument in an UNSAVE_EXPR to
+ work around a limitation in the backend. The backend uses the
+ cleanups multiple times, on disjoint control flows, so we cannot
+ pass unsaved SAVE_EXPRs to the backend.
+ * tree.def (UNSAVE_EXPR): New tree code.
+ * typeck.c (c_expand_return): Move goto/return code up inside
+ conditional, as we don't always want to do this, we only want to do
+ this when we don't otherwise finish with this control flow.
+
+Thu Jul 27 10:38:43 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * parse.y (typespec): Only complain about typeof if we're not
+ getting it from a system header.
+
+Thu Jul 27 10:26:23 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ Clean up prefix attribute handling.
+ * parse.y (reserved_declspecs): Link prefix attributes with declspecs.
+ (declmods): Likewise.
+ (all rules that reference typed_declspecs and declmods): Call
+ split_specs_attrs or strip_attrs to separate declspecs and attrs.
+ (lang_extdef): Delete resetting of prefix_attributes.
+ (template_def, notype_declarator rule): Use NULL_TREE for
+ prefix_attributes.
+ (condition): Use NULL_TREE for prefix_attributes.
+ (setattrs): Deleted.
+ (nomods_initdcl0): Set prefix_attributes to NULL_TREE.
+ (component_decl): Delete resetting of prefix_attributes.
+ (component_decl_1, notype_components rule): Use NULL_TREE for
+ prefix_attributes.
+ (simple_stmt): Delete resetting of prefix_attributes.
+
+Mon Jul 24 13:37:53 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * call.c (convert_harshness): Deal with reference conversions before
+ others. Actually do array->pointer decay. Call comp_target_types
+ with pointer types rather than their targets.
+
+ * typeck.c (comp_target_types): Avoid assigning D const * to B *.
+
+Mon Jul 24 08:54:46 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * pt.c (to_be_restored): Move decl to global scope.
+
+Sat Jul 22 12:22:11 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (start_decl): Put back clearing of DECL_IN_AGGR_P.
+
+Fri Jul 21 17:09:02 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (grokdeclarator): Downgrade error about 'extern int A::i'
+ to pedwarn.
+
+ * pt.c (instantiate_template): Also avoid instantiation if the
+ function has already been declared to be a specialization.
+
+ * decl2.c (check_classfn): Ignore cname argument, and return the
+ matching function.
+
+ * decl.c (start_decl): Handle declarations of member functions
+ outside of the class (i.e. specialization declarations).
+
+Thu Jul 20 10:34:48 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * class.c (finish_struct): Don't mess with the type of bitfields.
+
+ * various.c: s/TYPE_POINTER_TO/build_pointer_type/.
+
+Thu Jul 20 01:43:10 1995 Mike Stump <mrs@cygnus.com>
+
+ * init.c (expand_aggr_init): Assume LOOKUP_ONLYCONVERTING if init
+ is not a parameter list (TREE_LIST).
+ (expand_default_init): If LOOKUP_ONLYCONVERTING is set, then set
+ LOOKUP_NO_CONVERSION so that we don't allow two-level conversions,
+ but don't set it otherwise.
+
+Wed Jul 19 20:32:01 1995 Mike Stump <mrs@cygnus.com>
+
+ * init.c (expand_default_init): Don't allow two-level conversions
+ during construction.
+
+Wed Jul 19 18:06:37 1995 Mike Stump <mrs@cygnus.com>
+
+ * gc.c (build_headof): The type of dyncasting to a pointer to cv
+ void, should be pointer to cv void.
+
+Wed Jul 19 17:25:43 1995 Mike Stump <mrs@cygnus.com>
+
+ * gc.c (build_dynamic_cast): Allow casting in const.
+
+Wed Jul 19 16:34:27 1995 Mike Stump <mrs@cygnus.com>
+
+ * typeck.c (build_const_cast): If we are passed error_mark_node,
+ return it.
+
+Wed Jul 19 15:24:48 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * class.c (push_nested_class): Make sure TYPE is non-nil.
+
+ * cvt.c (type_promotes_to): Watch for error_mark_node on the
+ incoming TYPE.
+
+Wed Jul 19 13:23:12 1995 Gerald Baumgartner <gb@alexander.cs.purdue.edu>
+
+ * cp-tree.h (SIGTABLE_VT_OFF_NAME): Renamed from SIGTABLE_OFFSET_NAME.
+ (SIGTABLE_VB_OFF_NAME): New macro.
+ (vt_off_identifier): Renamed from offset_identifier.
+ (vb_off_identifier): Added extern declaration.
+
+ * decl.c (vt_off_identifier): Renamed from offset identifier.
+ (vb_off_identifier): New variable to hold the identifier for the
+ sigtable field vb_off.
+ (init_decl_processing): Initialize vb_off_identifier.
+ Renamed vt_off_identifier from offset_identifier.
+ * sig.c (build_signature_method_call): Renamed offset_identifier and
+ local variable offset to vt_off_identifer and vt_off, respecitively.
+ * sig.c (build_signature_table_constructor): Renamed offset to vt_off.
+
+ * decl.c (init_decl_processing): Add vb_off field to
+ sigtable_entry_type. Reorder fields so that pfn gets properly
+ aligned at a 64 bit boundary on the Alpha.
+ * sig.c (build_signature_table_constructor): Build the constructor
+ according to the new layout. Set the vb_off field to -1 for now.
+
+ * decl.c (init_decl_processing): Align sigtable_entry_type on word
+ boundaries instead of double word boundaries to save space.
+
+Tue Jul 18 16:58:37 1995 Mike Stump <mrs@cygnus.com>
+
+ * cvt.c (cp_convert): Always call build_cplus_new for a ctor.
+
+Tue Jul 18 14:24:53 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * parse.y (opt.component_decl_list): Only forbid private/protected
+ in anonymous unions. We need to make this know when the type is
+ defined for an object, to not give the error.
+
+Mon Jul 17 14:22:44 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * parse.y (opt.component_decl_list): Don't allow access control
+ as private or protected for union members.
+
+Sun Jul 16 14:01:00 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * lex.c (check_newline): For 'p' case, move goto skipline line to
+ before end brace for 'pragma'.
+
+Fri Jul 7 13:55:58 1995 Mike Stump <mrs@cygnus.com>
+
+ * g++.1: Tiny updates.
+
+Fri Jul 7 13:05:20 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl.c (cp_finish_decl): Only destruct local static variables if
+ they are constructed, and only construct the first time control
+ passes completely through its declaration (if not initialized with a
+ constant-expression).
+ (expand_static_init): Likewise.
+
+Wed Jul 5 14:05:04 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * typeck.c (comptypes, case OFFSET_REF): If either offset basetype
+ is a TEMPLATE_TYPE_PARM, give a match.
+
+Fri Jun 30 15:42:57 1995 Mike Stump <mrs@cygnus.com>
+
+ * method.c (build_overload_value): Handle encoding of null pointer
+ constants (or any pointer with a constant numeric value) for
+ templates.
+
+Fri Jun 30 13:45:51 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * call.c (convert_harshness): Add QUAL_CODE when we're faced with
+ const vs non-const for void conversions.
+
+Fri Jun 30 10:19:52 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_start_all_catch): Fix problem with finding an
+ outer nested try block when there is no code to separate it from an
+ inner try block.
+
+Fri Jun 30 02:22:26 1995 Mike Stump <mrs@cygnus.com>
+
+ * search.c (dfs_pushdecls): Consume 2 or 3 orders of magnitude less
+ memory please when virtual bases are used.
+
+Thu Jun 29 19:03:47 1995 Mike Stump <mrs@cygnus.com>
+
+ * class.c (build_vbase_path): Avoid testing things that cannot be
+ null to see if they are null.
+ * cvt.c (convert_pointer_to_vbase): Remove code that doesn't work.
+ * decl.c (finish_function): Pass a type into the new
+ convert_pointer_to_vbase instead of a binfo.
+ * search.c (convert_pointer_to_vbase): Rewritten to use get_vbase
+ and convert_pointer_to_real.
+ (expand_indirect_vtbls_init): Use convert_pointer_to_vbase instead
+ of the more cryptic call to get_vbase.
+
+Thu Jun 29 09:35:05 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl.c (BOOL_TYPE_SIZE): Fix broken SLOW_BYTE_ACCESS check.
+
+Thu Jun 29 03:43:55 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * pt.c (instantiate_template): Don't strip 'this' twice.
+
+ * pt.c (coerce_template_parms): Allow null pointer constants.
+
+ * decl.c (revert_static_member_fn): But only if DECL_ARGUMENTS is
+ set.
+
+Wed Jun 28 18:39:03 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (revert_static_member_fn): Also remove 'this' from
+ DECL_ARGUMENTS.
+ * decl2.c (check_classfn): Don't revert this function until we get a
+ match.
+
+Wed Jun 28 14:07:27 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * parse.y (component_decl): Clear PREFIX_ATTRIBUTES here.
+
+Wed Jun 28 11:05:13 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl2.c (finish_file): Handle global vector news.
+ * init.c (build_new): Encode vector news so that later we will know
+ how many elements there are.
+
+Mon Jun 26 13:38:06 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * expr.c (cplus_expand_expr): Don't mess with temp slots.
+
+ * decl2.c (warn_if_unknown_interface): Don't crash if tinst_for_decl
+ returns null.
+
+ * decl2.c (check_classfn): Use revert_static_member_fn.
+ * decl.c (revert_static_member_fn): Diagnose static member functions
+ declared const or volatile.
+
+ * decl2.c (grokfield): Check for missing default args here, too.
+ (check_default_args): Function to do the checking.
+ * decl.c (pushdecl): Use it.
+
+ * decl.c (pushdecl): Don't warn about shadowing a member of `this'
+ if there is no `this'.
+
+Sun Jun 25 11:34:25 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * call.c (build_method_call): Downgrade 'called before definition'
+ to a warning, as it ought to go away after Monterey.
+
+Sat Jun 24 14:18:42 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * pt.c (coerce_template_parms): Don't do extra checking on pointer
+ to member arguments.
+
+ * class.c (finish_struct): const and reference members don't prevent
+ a class from being an aggregate.
+
+ * class.c (finish_struct): Signatures are always aggregates.
+
+Fri Jun 23 17:20:29 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl2.c (check_classfn): Improve error message.
+
+ * pt.c (tsubst): Handle PROMOTE_PROTOTYPES.
+
+Thu Jun 22 01:50:42 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (comptypes): Don't ignore method quals.
+
+ * class.c (finish_struct): Non-abstract virtuals are always USED.
+
+ * decl.c (build_ptrmemfunc_type): The underlying union type isn't
+ IS_AGGR_TYPE, either.
+ * class.c (finish_struct): Use CLASSTYPE_NON_AGGREGATE instead.
+ * cp-tree.h: Likewise.
+
+ * cp-tree.h (lang_type): Add aggregate.
+ (CLASSTYPE_AGGREGATE): New macro.
+ (TYPE_NON_AGGREGATE_CLASS): Likewise.
+ * class.c (finish_struct): Determine whether a class is an
+ aggregate.
+ * decl.c (cp_finish_decl): Check TYPE_NON_AGGREGATE_CLASS instead of
+ TYPE_NEEDS_CONSTRUCTING.
+ * typeck2.c (digest_init): Check TYPE_NON_AGGREGATE_CLASS for
+ subobjects, too.
+
+ * pt.c (tsubst, PARM_TYPE): Propagate DECL_ARTIFICIAL.
+
+ * decl.c (start_function): For pre-parsed functions, layout all of
+ the parm decls again.
+ (grokvardecl): TREE_PUBLIC depends on DECL_THIS_EXTERN, not
+ DECL_EXTERNAL.
+
+ * pt.c (coerce_template_parms): Improve checking for invalid
+ template parms.
+
+Wed Jun 21 12:01:16 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * decl.c (grokdeclarator): Forbid declaration of a static member
+ with the same name as its enclosing class.
+
+Mon Jun 19 10:28:14 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (finish_function): Clear current_class_decl.
+
+ * typeck.c (build_conditional_expr): Use convert (boolean_type_node
+ instead of truthvalue_conversion.
+
+ * class.c (finish_struct): A data member with the same name as the
+ class doesn't suppress constructors.
+
+Fri Jun 16 18:11:39 1995 Gerald Baumgartner <gb@alexander.cs.purdue.edu>
+
+ * decl.c (start_function): If current_class_decl is a signature
+ pointer, don't dereference it but set C_C_D to current_class_decl.
+
+Fri Jun 16 17:06:28 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (duplicate_decls): Complain about virtual functions
+ redeclared to be inline.
+
+Fri Jun 16 13:20:38 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl.c (get_unique_name): New routine to name unnamed namespaces.
+ (push_namespace): Use get_unique_name for naming unnamed namespaces.
+
+Thu Jun 15 15:00:41 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * parse.y: Call cplus_decl_attributes with prefix_attributes where
+ appropriate.
+
+Wed Jun 14 19:24:49 1995 Mike Stump <mrs@cygnus.com>
+
+ * search.c (get_vbase): New routine to switch hierarchies from the
+ CLASSTYPE_VBASECLASSES to the normal one.
+ (expand_indirect_vtbls_init): Use get_vbase to figure out how we
+ want to convert to a vbase pointer.
+
+Mon Jun 12 17:50:30 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * pt.c (instantiate_class_template): Add the new instantiation to
+ template_classes.
+ (do_pending_expansions): Call instantiate_member_templates on all of
+ the classes in template_classes.
+
+Mon Jun 12 12:36:59 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl.c (complete_array_type): Fill in the TYPE_DOMAIN of our
+ TYPE_MAIN_VARIANT if it is not filled in.
+ * init.c (build_delete): If the TYPE_DOMAIN is not set, give an
+ error instead of core dumping.
+
+Mon Jun 12 10:41:40 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * call.c (can_convert): Also check for distance > 0.
+ (can_convert_arg): Likewise.
+ (user_harshness): Likewise.
+
+Fri Jun 9 19:17:21 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * g++.c (MATH_LIBRARY): Provide default.
+ (main): Always link with the math library if we link with libstdc++.
+
+ * decl.c (start_function): Complain about redefinition of a function
+ even when the pending_inline version is compiled after the other
+ version.
+
+Thu Jun 8 15:44:38 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * gc.c (build_dynamic_cast): Build up a reference to a parameter of
+ aggregate type.
+
+Wed Jun 7 15:31:57 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * init.c (build_vec_delete): Resolve an offset ref before we try to
+ use it.
+
+Wed Jun 7 14:19:32 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (build_modify_expr): If the class lacks a constructor or
+ assignment operator, return error_mark_node.
+ (common_type): Use build_cplus_array_type.
+
+Tue Jun 6 09:41:27 1995 Mike Stump <mrs@cygnus.com>
+
+ * class.c (dont_allow_type_definitions): New variable set when types
+ cannot be defined.
+ (finish_struct): Use it.
+ * cp-tree.h (dont_allow_type_definitions): Define it.
+ * parse.y (primary, handler_seq): Set it.
+
+Mon Jun 5 18:49:38 1995 Mike Stump <mrs@cygnus.com>
+
+ * method.c (build_opfncall): Use DECL_CHAIN, not TREE_CHAIN for
+ results from lookup_fnfields. Always give warning/error on bad
+ code.
+
+Mon Jun 5 11:39:37 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * init.c (member_init_ok_or_else): Don't allow initialization of
+ an ancestor's member from within a constructor.
+
+Mon Jun 5 11:20:34 1995 Gerald Baumgartner <gb@alexander.cs.purdue.edu>
+
+ * sig.c (build_signature_table_constructor): Use DECL_CONTEXT
+ instead of DECL_CLASS_CONTEXT for calculating the vfield offset so
+ abstract virtual functions are handled correctly.
+
+ * sig.c (build_signature_table_constructor): Store the correct
+ delta in signature table entries. It does not yet work for
+ classes with virtual base classes as implementations of signatures.
+ (build_signature_method_call): Add the delta to the object_ptr
+ before generating the function call.
+
+ * call.c (build_method_call): Make instance_ptr the signature
+ pointer itself instead of dereferencing the optr.
+ * sig.c (build_signature_method_call): Dereference the optr for the
+ direct and virtual calls.
+
+ * sig.c (build_signature_table_constructor): Make the tag for
+ default implementations -1 instead of 2.
+ (build_signature_method_call): Change the generated conditional
+ expression correspondingly.
+
+ * sig.c (build_signature_pointer_constructor): Deleted the sorry
+ message that said we can't handle multiple inheritance for
+ implementations of signatures
+ (build_signature_method_call): Use the offset from the sigtable
+ entry instead of the vptr field from the signature pointer for
+ building a virtual function call.
+
+ * class.c (build_vfn_ref): Deleted signature specific code, we don't
+ call this function anymore from build_signature_method_call.
+
+ * cp-tree.h (SIGNATURE_VPTR_NAME): Deleted. We use the right vptr
+ field in the object now instead of in the signature pointer/ref.
+ (build_vptr_ref): Deleted extern declaration.
+ * sig.c (build_vptr_ref): Deleted.
+ (build_signature_pointer_or_reference_type): Deleted construction of
+ the vptr field.
+ (build_signature_pointer_constructor): Deleted initialization of/
+ assignment to the vptr field.
+
+ * sig.c (build_signature_table_constructor): Convert the signature
+ table entry fields to their correct types.
+
+ * sig.c (build_signature_table_constructor): Don't call digest_init
+ for the fields of a sigtable entry, it's wasted time.
+
+ * sig.c (build_signature_table_constructor): Correctly set the
+ offset and index fields of a sigtable entry. Build the constructor
+ the way digest_init does, digest_init can't handle initializing an
+ anonymous union inside a struct.
+ (build_signature_method_call): Use the index field instead of the
+ delta field to get the vtable index.
+
+ * decl.c (init_decl_processing): Fix number of fields for building
+ sigtable_entry_type.
+
+ * cp-tree.h (tag_identifier, offset_identifier): Added extern decls.
+ (SIGTABLE_CODE_NAME): Renamed to SIGTABLE_TAG_NAME.
+ (SIGTABLE_PFN_NAME): Deleted, we'll use VTABLE_PFN_NAME instead.
+ * decl.c (tag_identifier, offset_identifier): New variables to
+ hold the identifiers for the sigtable fields tag and offset.
+ (init_decl_processing): Initialize these variables.
+ (init_decl_processing): Use these variables to build the
+ sigtable_entry_type structure. Rename the code and offset fields
+ to tag and delta, respectively; add offset and index fields. Changed
+ types of fields from short_integer_type_node to delta_type_node.
+ * sig.c (build_signature_table_constructor): Rename code and offset
+ to tag and delta, respectively.
+ (build_signature_method_call): Likewise. Use above variables.
+
+Thu Jun 1 17:03:51 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (lookup_name_real): Don't try to look anything up in an
+ erroneous object.
+
+Fri Jun 2 10:30:14 1995 Mike Stump <mrs@cygnus.com>
+
+ * method.c (build_overload_int): New routine. Break out
+ functionality from build_overload_value so we can reuse it.
+ (build_overload_value): Handle pointer to member functions as value
+ parameters for templates.
+ (build_overload_identifier): Since template parameters are shared
+ among all instantiations, we have to substitute in the real types
+ in TREE_TYPE (parm).
+ pt.c (coerce_template_parms): Likewise.
+ (push_template_decls): Likewise.
+ (grok_template_type): Deleted as template parameters are shared
+ among all instantiations.
+
+Wed May 31 19:10:32 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl.c (grokdeclarator): Always give errors on constant overflow
+ for array indices.
+
+Wed May 31 11:39:43 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (commonparms): Don't abort if simple_cst_equal returns < 0.
+ (build_c_cast): Don't tack on a NON_LVALUE_EXPR when casting to
+ reference type.
+ (build_indirect_ref): Fix check for *&.
+
+Fri Jun 16 06:54:03 1995 Mike Stump <mrs@cygnus.com>
+
+ * Version 2.7.0 released.
+
+Fri Jun 16 15:07:29 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * Make-lang.in (DEMANGLER_PROG): Add LIBS.
+
+Thu Jun 15 15:00:41 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (define_function): Don't set DECL_INTERFACE_KNOWN.
+
+Wed Jun 7 20:00:31 1995 Mike Stump <mrs@cygnus.com>
+
+ * *.[chy]: Change all callers of finish_decl to cp_finish_decl.
+ * decl.c (finish_decl): New routine to handle call backs from the
+ mid end (declare_hidden_char_array).
+
+Wed Jun 7 19:02:50 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (start_function): Handle setting C_C_D here.
+ (set_C_C_D): Removed.
+ (struct saved_scope): Remove class_decl.
+ (push_to_top_level): Don't save current_class_decl.
+ (pop_from_top_level): Don't restore current_class_decl or C_C_D.
+ (struct cp_function): Add C_C_D.
+ (push_cp_function_context): Save C_C_D.
+ (pop_cp_function_context): Restore C_C_D.
+
+Fri Jun 2 11:05:58 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (set_C_C_D): New function. suspend_momentary before
+ building C_C_D.
+ (pop_from_top_level): Call it.
+ (start_function): Likewise.
+ (pop_cp_function_context): Likewise.
+
+ * class.c, cp-tree.h, decl.c, decl2.c, parse.y: Lose all references
+ to current_vtable_decl, CLASSTYPE_INST_VAR and CLASSTYPE_VTBL_PTR.
+
+ * decl.c (push_cp_function_context): Save current_class_decl.
+ (pop_cp_function_context): Restore current_class_decl and set C_C_D.
+ (pop_from_top_level): Don't use CLASSTYPE_INST_VAR to set C_C_D.
+ (start_function): Likewise.
+
+ * class.c (popclass): Don't mess with current_class_decl,
+ current_vtable_decl, or C_C_D.
+
+Mon May 29 12:45:10 1995 Paul Eggert <eggert@twinsun.com>
+
+ * Make-lang.in (c++.mostlyclean): Remove $(DEMANGLER_PROG).
+
+Wed May 24 15:55:18 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * decl.c (duplicate_decls): Check simple_cst_equal result against 0.
+ * decl2.c (finish_anon_union): Likewise.
+ * method.c (largest_union_member): Likewise.
+
+Wed May 24 14:41:11 1995 H.J. Lu <hjl@nynexst.com>
+
+ * Make-lang.in (cxxmain.o): Replace single quotes with backslashes.
+
+Mon May 22 17:38:48 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * Make-lang.in (g++, g++-cross, cc1plus, DEMANGLER_PROG):
+ Use $@ instead of output name so works even if have .exe.
+ (cxxmain.o): Use cp if ln -s fails.
+ (c++.install-man): Use $(exeext) in executable names.
+ (c++.mostlyclean, stage[1-4]): Use $(objext) in object file names.
+ * Makefile.in (../cc1plus): Use $(exeext) in name of executable.
+
+Wed May 24 01:39:03 1995 Jason Merrill <jason@deneb.cygnus.com>
+
+ * call.c (build_method_call): parms can be null, duh.
+
+Tue May 23 01:32:09 1995 Jason Merrill <jason@deneb.cygnus.com>
+
+ * call.c (build_method_call): If convert_arguments failed, just bail.
+
+Fri May 19 10:31:11 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * cvt.c (convert_force): Pass LOOKUP_NORMAL to cp_convert.
+
+ * tree.c (copy_to_permanent): Oops.
+
+Fri May 19 10:01:07 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * cp-tree.h (break_out_target_exprs): Add decl.
+
+Thu May 18 13:02:30 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (start_function): Move *all* interface handling stuff after
+ the pushdecl.
+
+ * tree.c (mapcar): Renamed from make_deep_copy and generalized.
+ (perm_manip): Return t if permanent, otherwise 0.
+ (copy_to_permanent): Use them.
+ (bot_manip): Helper for break_out_target_exprs.
+ (break_out_target_exprs): New function. Uses mapcar.
+
+ * typeck.c (convert_arguments): Use it.
+
+ * method.c (hack_identifier): Use convert_from_reference to
+ dereference a reference.
+
+Wed May 17 17:54:54 1995 Mike Stump <mrs@cygnus.com>
+
+ * call.c (convert_harshness): Move reference bashing before pointer
+ to member bashing.
+
+Wed May 17 16:57:53 1995 Mike Stump <mrs@cygnus.com>
+
+ * cvt.c (convert_to_reference): Only complain, if complaints are
+ wanted.
+ * typeck.c (build_function_call_real): Likewise. If
+ LOOKUP_SPECULATIVELY is set and something won't work, return
+ NULL_TREE.
+ * cvt.c (cp_convert): Likewise. Pass flags down to build_method_call.
+ (convert): Pass LOOKUP_NORMAL to cp_convert.
+ * typeck.c (convert_for_assignment): Likewise.
+ (convert_force): Pass LOOKUP_COMPLAIN to cp_convert.
+ (convert_arguments): Get out early if we get an error_mark_node.
+ (convert_for_initialization): Use cp_convert instead of convert so
+ that we can pass flags down.
+ * cp-tree.h (LOOKUP_SPECULATIVELY): Added documentation.
+
+Wed May 17 01:43:58 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck2.c (store_init_value): Don't take the MAIN_VARIANT of the
+ decl type.
+
+ * class.c (finish_struct): Don't complain about a class with no
+ user-defined constructors but with a member that has no default
+ constructor, as this is OK for aggregates.
+
+ * expr.c (cplus_expand_expr, NEW_EXPR): If this is an explicit
+ constructor call, mark slot addressable.
+
+Tue May 16 18:37:51 1995 Douglas Rupp <drupp@cs.washington.edu>
+
+ * g++.c: Changed WINNT to _WIN32.
+
+Tue May 16 12:40:16 1995 Jason Merrill <jason@lisa.cygnus.com>
+
+ * lex.c (handle_sysv_pragma): Don't use token_buffer.
+
+Tue May 16 12:05:26 1995 Mike Stump <mrs@cygnus.com>
+
+ * call.c (resolve_scope_to_name): Add initial semantic support for
+ namespaces.
+ * class.c (finish_struct): Likewise.
+ * cp-tree.h (NAMESPACE_LEVEL): Likewise.
+ * cvt.c (build_up_reference, convert_to_reference): Likewise.
+ * decl.c (binding_level::namespace_p, suspend_binding_level): Likewise.
+ (resume_binding_level, toplevel_bindings_p): Likewise
+ (namespace_bindings_p, declare_namespace_level): Likewise.
+ (resume_level, push_namespace, pop_namespace): Likewise.
+ (pop_everything, pushtag, duplicate_decls, pushdecl): Likewise.
+ (implicitly_declare, lookup_namespace_name): Likewise.
+ (lookup_name_real, start_decl, make_temporary_for_reference): Likewise.
+ (obscure_complex_init, finish_decl, expand_static_init): Likewise.
+ (grokvardecl, grokdeclarator, parmlist_is_exprlist): Likewise.
+ (store_parm_decls, hack_incomplete_structures): Likewise.
+ * decl2.c (get_temp_name, finish_anon_union): Likewise.
+ (current_namespace, push_namespace, pop_namespace): Likewise.
+ (do_namespace_alias, do_toplevel_using_decl): Likewise.
+ (do_class_using_decl): Likewise.
+ * error.c (dump_decl): Likewise.
+ * init.c (build_member_call, build_offset_ref): Likewise.
+ * lex.c (identifier_type): Likewise.
+ * parse.y (lang_extdef, using_decl, extdef): Likewise.
+ (component_decl_1, nested_name_specifier_1): Likewise.
+ * spew.c (yylex): Likewise.
+ * tree.def (NAMESPACE_DECL): Likewise.
+
+Tue May 16 11:55:35 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (push_overloaded_decl): Return the new decl even if it
+ can't be pushed.
+
+Tue May 16 11:00:37 1995 Jason Merrill <jason@lisa.cygnus.com>
+
+ * typeck.c (decay_conversion): Split out from default_conversion.
+ (default_conversion): Call it.
+ (build_binary_op): Likewise.
+ (build_binary_op_nodefault): Use decay_conversion for truth ops.
+
+Mon May 15 12:47:56 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (warn_extern_redeclared_static): This is a pedwarn.
+ (duplicate_decls): Always use the old decl's linkage info. Don't
+ play with linkage of consts.
+ (pushdecl): Don't play with linkage of consts.
+ (redeclaration_error_message): Don't complain about an old public
+ decl and a new non-public decl here.
+ (grokvardecl): Handle linkage of consts here.
+ (grokdeclarator): An 'extern inline' is public. Pass constp to
+ grokvardecl.
+ (start_function): Wait until after the pushdecl to do some linkage
+ stuff.
+
+ * decl2.c (import_export_vtable): Make duplicates weak rather than
+ static if supported.
+ (import_export_inline): Likewise.
+ * pt.c (do_pending_expansions): Likewise.
+
+ * class.c (build_vbase_path): flag_assume_nonnull_objects only
+ affects reference conversion.
+
+ * init.c (emit_base_init): Build up an RTL_EXPR and add it to
+ rtl_expr_chain.
+ * decl.c, decl2.c: s/base_init_insns/base_init_expr/.
+
+Tue May 16 07:06:28 1995 Paul Eggert <eggert@twinsun.com>
+
+ * method.c (numeric_output_need_bar): Renamed from misspelling.
+
+ * typeck.c (build_ptrmemfunc): Fix misspellings in messages.
+
+Sun May 14 10:26:22 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * lang-options.h, lang-specs.h: New files.
+
+Thu May 11 00:31:48 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (default_conversion): Don't check for BLKmode before
+ pulling out the decl_constant_value.
+
+ * decl.c (start_function): Clear named_labels and shadowed_labels.
+
+ * typeck.c (build_function_call_real): Also synthesize methods here.
+
+Wed May 10 00:55:59 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl2.c (finish_file): Synthesize exported methods before the
+ reconsider loop.
+
+ * parse.y: Move declaration of flag_new_for_scope to file scope.
+
+Tue May 9 19:10:33 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl2.c: Add flag_new_for_scope for new -ffor-scope flag.
+ * parse.y (FOR): Conditionalize the pushing and poping of scope for
+ the for-init-statement upon the new flag_new_for_scope.
+ * parse.y (try_block): Simplify and use compstmt.
+
+Mon May 8 12:41:52 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (define_function): Mark function decl artificial.
+
+Sun May 7 00:51:28 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * parse.y (simple_stmt, FOR): Put back push/pop for condition scope.
+
+ * decl2.c (grokclassfn): DECLs don't have cv-qualified types.
+ * tree.c (build_cplus_method_type): Likewise.
+
+ * cp-tree.h (SET_DECL_ARTIFICIAL): Just set DECL_ARTIFICIAL to 1.
+
+ * typeck.c (build_function_call_real): If convert_arguments failed,
+ just bail.
+ (convert_arguments): If one of the arguments is error_mark_node,
+ just bail.
+
+Sat May 6 02:39:41 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (duplicate_decls): Don't check DECL_NOT_REALLY_EXTERN for
+ decls that don't include it.
+
+Fri May 5 14:23:30 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (duplicate_decls): Decls that have DECL_INTERFACE_KNOWN or
+ DECL_NOT_REALLY_EXTERN set aren't extern decls.
+
+ * typeck.c (build_indirect_ref): Don't call default_conversion for a
+ parameter of reference_type.
+ * cvt.c (convert_from_reference): Just use build_indirect_ref.
+
+ * pt.c (do_type_instantiation): Only instantiate member functions
+ that actually come from templates.
+
+Fri May 5 09:46:05 1995 Mike Stump <mrs@cygnus.com>
+
+ * parse.y: Generalized cleanup of poplevels, and compound statements
+ and compound statements in try blocks. Rewritten `for' rule so that
+ the scope of variables declared in the for clause is shortened to
+ span just to the end of the statement, instead of the whole
+ containing block.
+
+Fri May 5 00:37:14 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * call.c (convert_harshness): Handle pointers to members better.
+
+Thu May 4 16:00:26 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl2.c (delete_sanity): Do access control here.
+ * init.c (build_delete): Instead of here.
+
+ * Make-lang.in: Build c++filt.
+
+Wed May 3 02:59:53 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl2.c (cplus_decl_attributes): If we just modified a TYPE_DECL,
+ update our IDENTIFIER_TYPE_VALUE.
+
+Fri Apr 28 07:58:41 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * lex.c (cons_up_default_function): Fix linkage of #pragma
+ implemented functions.
+
+Thu Apr 27 16:56:24 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * method.c (build_overload_name): Simplify and fix repeated type
+ folding.
+
+ * decl.c (grokdeclarator): Prohibit pointers to void or reference
+ members.
+
+Thu Apr 27 09:49:07 1995 Mike Stump <mrs@cygnus.com>
+
+ * typeck2.c (process_init_constructor): Make sure initializers are
+ fully digested.
+
+Thu Apr 27 01:11:55 1995 Jason Merrill <jason@python.cygnus.com>
+
+ * lex.c (cons_up_default_function): Always defer synthesis.
+
+Thu Apr 27 00:20:37 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl2.c (mark_inline_for_output): Don't play with pending_inline
+ stuff.
+
+Wed Apr 26 17:48:24 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * call.c (user_harshness): New function; like build_type_conversion,
+ but doesn't actually build anything.
+ (compute_conversion_costs): Use it instead of build_type_conversion.
+
+Wed Apr 26 17:11:25 1995 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (build_function_call_real): Improve error message for
+ calling a non-function.
+
+ * method.c (hack_identifier): Lose check for calling a data member.
+
+Wed Apr 26 16:59:13 1995 Mike Stump <mrs@cygnus.com>
+
+ * typeck2.c (build_functional_cast): Remove very old cruft.
+ Seems like good code is generated without it.
+
+Wed Apr 26 00:47:16 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * method.c (do_build_assign_ref): Fix handling of anonymous unions.
+ (do_build_copy_constructor): Likewise.
+
+ * parse.y (simple_stmt, SWITCH): Call {push,pop}_switch.
+
+ * decl.c (push_switch): New function.
+ (pop_switch): Likewise.
+ (define_case_label): Check for jumping over initialization.
+
+ * call.c (build_method_call): Check for an inline function being
+ called before its definition has been seen.
+ * typeck.c (build_function_call_real): Likewise.
+
+ * decl.c (duplicate_decls): Check for a function being redeclared
+ inline after its address has been taken.
+
+ * typeck.c (build_conditional_expr): Handle related class lvalues.
+
+Tue Apr 25 13:20:45 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * pt.c (do_pending_expansions): Don't expand unused templates.
+
+ * parse.y (component_decl): Accept a lone semicolon.
+
+Tue Apr 25 00:25:56 1995 Jason Merrill <jason@rtl.cygnus.com>
+
+ * call.c (build_method_call): Don't allow an RTL_EXPR to serve as the
+ object parameter anymore.
+
+ * expr.c (cplus_expand_expr): Don't create RTL_EXPRs with no insns.
+
+Mon Apr 24 12:35:48 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * parse.y (simple_stmt, decl case): Clear prefix_attributes.
+ (lang_extdef): Likewise.
+
+ * parse.y (maybe_parmlist): New rule for use in declarators where
+ this could either be a list of expressions or parameters. Calls
+ suspend_momentary before deciding which.
+ (direct_after_type_declarator): Use it.
+ (complex_direct_notype_declarator): Use it.
+
+ * pt.c (tsubst): Propagate attributes const and noreturn.
+
+ * typeck.c (build_modify_expr): If warn_synth, call build_opfncall
+ before doing the default thing.
+
+Thu Apr 27 21:49:36 1995 Doug Evans <dje@cygnus.com>
+
+ * typeck.c (common_type): Call lookup_attribute instead of
+ value_member.
+
+Tue Apr 25 18:07:43 1995 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * Make-lang.in: Change "realclean" to "maintainer-clean".
+
+Sun Apr 23 12:32:38 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl2.c (finish_file): Fix broken linked list handling.
+
+Fri Apr 21 18:08:43 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * class.c (finish_base_struct): Don't set TYPE_HAS_COMPLEX_*_REF
+ as often.
+ (finish_struct): Likewise.
+
+ * various: Use TYPE_HAS_TRIVIAL_* instead of TYPE_HAS_COMPLEX_*.
+
+ * cp-tree.h (TYPE_HAS_TRIVIAL_INIT_REF): New macro.
+ (TYPE_HAS_TRIVIAL_ASSIGN_REF): New macro.
+
+Fri Apr 21 15:52:22 1995 Jason Merrill <jason@python.cygnus.com>
+
+ * typeck.c (c_expand_return): Only expand a returned TARGET_EXPR if
+ it is of the same type as the return value.
+
+Fri Apr 21 03:01:46 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl2.c (finish_file): Reconsider if synthesizing a method wrote
+ out its assembly.
+
+ * typeck.c (convert_for_initialization): Don't call a trivial copy
+ constructor.
+
+ * typeck2.c (store_init_value): Only abort if the type has a
+ non-trivial copy constructor.
+
+ * typeck.c (c_expand_return): If we're returning in a register and
+ the return value is a TARGET_EXPR, expand it. Only do
+ expand_aggr_init if we're returning in memory.
+ (expand_target_expr): Function to expand a TARGET_EXPR.
+ (build_modify_expr): Use it.
+
+ * tree.c (build_cplus_new): Layout the slot.
+
+ * expr.c (cplus_expand_expr): Use expand_call to expand the call
+ under a NEW_EXPR, so the target is not discarded.
+
+Thu Apr 20 14:59:31 1995 Mike Stump <mrs@cygnus.com>
+
+ * gc.c (build_dynamic_cast): Tighten error checking.
+
+Thu Apr 20 11:23:54 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * expr.c (cplus_expand_expr): Only abort if the returned target is
+ different from what we expected if the type has a non-trivial copy
+ constructor.
+
+ * decl2.c (cplus_decl_attributes): Attributes applied to a template
+ really apply to the template's result.
+
+ * tree.c (lvalue_p): Check IS_AGGR_TYPE instead of TREE_ADDRESSABLE
+ to decide whether to consider a CALL_EXPR an lvalue.
+
+ * class.c (finish_struct_bits): Only set TREE_ADDRESSABLE if the
+ type has a non-trivial copy constructor.
+
+ * decl.c (start_function): If interface_known, unset
+ DECL_NOT_REALLY_EXTERN on the function.
+
+Wed Apr 19 16:53:13 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * pt.c (do_function_instantiation): Handle explicit instantiation of
+ member functions.
+ (do_type_instantiation): Handle 'inline template class foo<int>',
+ meaning just spit out the vtable.
+
+ * lex.c (cons_up_default_function): Set DECL_NOT_REALLY_EXTERN on
+ the consed functions.
+
+ * decl2.c (import_export_inline): Set DECL_INTERFACE_KNOWN.
+
+Wed Apr 19 16:28:17 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * call.c, class.c, decl2.c, gc.c, init.c, parse.y, pt.c, search.c,
+ typeck.c: Include output.h.
+
+Wed Apr 19 14:57:21 1995 Gerald Baumgartner <gb@alexander.cs.purdue.edu>
+
+ * call.c (build_method_call): Allow a signature member functions to
+ be called from a default implementation.
+
+Wed Apr 19 10:21:17 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * repo.c (finish_repo): Remember what directory we are in.
+
+ * search.c (expand_upcast_fixups): Don't mess with abort_fndecl.
+
+ * repo.c: Use obstacks instead of fixed-size buffers. Don't spit
+ out the second copy of the symbol name. Don't remember COLLECT_GCC.
+
+Wed Apr 19 02:32:40 1995 Mike Stump <mrs@cygnus.com>
+
+ * search.c (virtual_context): New function to get the virtual
+ context of a function.
+ (expand_upcast_fixups): New function to generate runtime vtables.
+ (fixup_virtual_upcast_offsets): Likewise.
+ (expand_indirect_vtbls_init): Use fixup_virtual_upcast_offsets to
+ ensure that the this offsets for upcasts from virtual bases into
+ other virtual bases or non-virtual bases are correct at construction
+ time and destruction time.
+ * class.c (fixup_vtable_deltas): Modify to fixup all offsets in all
+ vtables in all virtual bases, instead of just one vtable in each
+ virtual base.
+ (fixup_vtable_deltas1): Likewise.
+
+Tue Apr 18 03:57:35 1995 Michael Meissner <meissner@cygnus.com>
+
+ * Makefile.in (lex.o): Add dependency on c-pragma.h.
+
+ * lex.c (handle_sysv_pragma): Use NULL_PTR and NULL_TREE as
+ appropriate, instead of 0.
+
+Mon Apr 17 12:28:42 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (pushdecl): Use decls_match, not duplicate_decls, for
+ comparing local and global decls.
+
+Fri Apr 14 01:46:52 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (convert_arguments): Only prohibit passing to ... of
+ types with non-trivial copy constructors.
+
+ * repo.c (repo_template_used): Don't try to mess with no id.
+
+Fri Apr 14 23:32:50 1995 Per Bothner <bothner@rtl.cygnus.com>
+
+ * decl.c (duplicate_decls): Use cp_warning_at for redundant-decls.
+
+Thu Apr 13 15:37:42 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * cp-tree.h (current_tinst_level): Delete declaration, since it's
+ static inside pt.c.
+
+ * typeck.c (build_modify_expr): Catch incompatible array assignment.
+
+ * parse.y (attribute_list, attrib): Rewrite actions to feed the
+ right stuff to decl_attributes.
+
+Thu Apr 13 11:24:10 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * search.c (dfs_debug_mark): Check for magic virtual like
+ import_export_vtable.
+
+ * typeck.c (build_binary_op_nodefault): Don't call cp_pedwarn with
+ four args.
+
+Wed Apr 12 12:02:57 1995 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl2.c (finish_file): Move prevtable pass before needs_messing_up
+ decision.
+
+Tue Apr 11 11:20:27 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (finish_decl): If we're writing out a static data member of
+ a class, we want the debug info for that class.
+
+ * gc.c (build_t_desc): Check linkage of a class properly.
+
+ * class.c (finish_struct): Set the 'headof' offset for the main
+ vtable properly.
+ (prepare_fresh_vtable): Fix typeinfo pointer here.
+ (modify_one_vtable): Instead of here.
+
+Mon Apr 10 12:15:59 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * repo.c (repo_get_id): New function to return the interesting
+ identifier for a repo entity.
+ (repo_template_used): Use it.
+ (repo_template_instantiated): Mark the id as chosen.
+ (init_repo): Record whether or not the id was chosen.
+ (finish_repo): Note if an id was newly chosen.
+
+ * pt.c (do_function_instantiation): Call repo_template_instantiated.
+ (do_type_instantiation): Likewise. Don't diagnose multiple
+ instantiation.
+
+ * decl2.c (finish_file): Use DECL_NOT_REALLY_EXTERN when deciding
+ whether or not to synthesize a method.
+
+ Undo these changes:
+ * class.c (finish_vtbls): build more vtables if flag_rtti is on.
+ * class.c (modify_all_direct_vtables): ditto.
+ * init.c (expand_direct_vtbls_init): expand more vtables if
+ flag_rtti is on.
+
+Sat Apr 8 17:45:41 1995 Mike Stump <mrs@cygnus.com>
+
+ * gc.c (build_headof): Use ptrdiff_type_node instead of
+ integer_type_node on pointer arithmetic.
+
+Sat Apr 8 11:57:04 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (build_modify_expr): Undo previous change.
+
+Thu Apr 6 01:23:50 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * Makefile.in (compiler): Remove ../cc1plus before rebuilding it.
+
+ * repo.c (get_base_filename): Put the .rpo file in the directory
+ with the object file, not the source.
+
+ * typeck.c (build_conditional_expr): Handle pmf's better.
+
+ * repo.c (finish_repo): Also use ASM_OUTPUT_LABELREF to print out
+ the name of the symbol.
+
+Wed Apr 5 15:24:12 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * repo.c (open_repo_file): Make repo filename DOS-compliant.
+ (*): Also write a new repo file if some previously-used
+ templates are no longer used. Only remember the identifier.
+
+ * lex.c (cons_up_default_function): If this function belongs to a
+ template class, call repo_template_used for it.
+
+ * repo.c (repo_template_used): Using a class means using its vtable,
+ if any.
+ (finish_repo): Likewise.
+
+ * typeck.c (build_modify_expr): Only wrap TARGET_EXPRs in RTL_EXPRs
+ if the type has a complex copy constructor.
+
+ * decl2.c (lang_decode_option): -frepo implies
+ -fno-implicit-templates.
+
+ * decl.c (start_function): Clear current_{base,member}_init_list.
+
+ * lex.c (init_lex): Also unset *_eq if ! flag_operator_names.
+
+Tue Apr 4 16:11:08 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (struct cp_function): Add {base,member}_init_list.
+ (push_cp_function_context): Save current_{base,member}_init_list.
+ (pop_cp_function_context): Restore them.
+
+Mon Apr 3 16:55:08 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * repo.c (get_base_filename): Take filename parm, fix logic bug.
+
+ * typeck.c (build_compound_expr): Do not warn about a compound expr
+ in which the first expression has no side effects.
+ (build_x_compound_expr): Warn here instead.
+ (build_conditional_expr): Don't warn about a conditional expression
+ between an enum and the type it promotes to.
+
+ * init.c (build_new): Handle initialization of arrays of builtins
+ properly.
+
+Mon Apr 3 15:08:04 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * repo.c: Include config.h to get definitions of bcopy and rindex
+ on systems that don't have them (e.g., SVR4).
+
+Mon Apr 3 14:41:55 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl2.c (finish_table): Pass NULL_TREE instead of init to
+ finish_decl so that it won't try and do error checking on the
+ initializer.
+
+Mon Apr 3 10:45:50 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * repo.c (get_base_filename): Analyze COLLECT_GCC_OPTIONS to
+ determine whether this compile used -c -o.
+ (open_repo_file): Use get_base_filename. Remove the extension.
+ (finish_repo): Spit out the values of main_input_filename,
+ COLLECT_GCC and COLLECT_GCC_OPTIONS.
+
+ * parse.y (structsp): Add TYPENAME_KEYWORD complex_type_name.
+
+Sun Apr 2 23:43:51 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * search.c (compute_access): Don't try to do access control on
+ nested types.
+
+Fri Mar 31 10:14:23 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * repo.c: New file to handle things repo.
+
+ * pt.c (instantiate_template): Call repo_template_used if the
+ definition is accessible.
+ (mark_function_instantiated): Split out from
+ do_function_instantiation.
+ (mark_class_instantiated): Split out from do_type_instantiation.
+
+ * parse.y (template_instantiate_once): Call repo_template_used.
+
+ * lex.c (lang_init): Call init_repo.
+
+ * decl2.c: Handle flag_use_repository.
+ (finish_file): Call finish_repo.
+
+ * decl.c (start_method): Call repo_template_used if this is a
+ template method.
+
+ * Makefile.in (CXX_OBJS): Add repo.o.
+ (repo.o): Add dependencies.
+
+ * Make-lang.in (CXX_SRCS): Add repo.c.
+
+ * decl.c (start_function): If DECL_INTERFACE_KNOWN and
+ DECL_NOT_REALLY_EXTERN are both set, unset DECL_EXTERNAL.
+
+ * typeck.c (build_binary_op_nodefault): Identify the invalid operand
+ types used.
+
+ * decl.c (duplicate_decls): Propagate DECL_NOT_REALLY_EXTERN.
+
+Thu Mar 30 17:54:42 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (build_binary_op_nodefault): Tidy up use of build_type
+ and result_type. When checking for comparison between signed
+ and unsigned, use result_type rather than the (possibly shortened)
+ type of op0. Also, don't warn about equality comparison of a
+ signed operand to an unsigned constant that fits in the signed
+ type.
+
+ * method.c (do_build_copy_constructor): Reverse
+ current_base_init_list after we've built it up.
+
+Thu Mar 30 14:35:18 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (build_throw): Never warn about the value of throw not
+ being used.
+
+Thu Mar 30 13:16:54 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_start_catch_block): Check for bad catch parameter
+ declarations.
+
+Thu Mar 30 13:06:11 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (finish_function): Only set DECL_NOT_REALLY_EXTERN if
+ DECL_EXTERNAL is not already set.
+
+Thu Mar 30 11:26:24 1995 Mike Stump <mrs@cygnus.com>
+
+ * method.c (emit_thunk): Let poplevel know that the last level is
+ for a function so it can create a BLOCK_NODE and set DECL_INITIAL.
+
+Thu Mar 30 11:15:06 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl2.c (import_export_inline): Don't set DECL_NOT_REALLY_EXTERN
+ here.
+
+ * decl.c (grokdeclarator): OK, don't abort if we see a decl with
+ METHOD_TYPE.
+ (finish_function): Set DECL_EXTERNAL and DECL_NOT_REALLY_EXTERN on
+ all deferred inlines.
+
+Wed Mar 29 19:35:02 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * cp-tree.h (DECL_THIS_INLINE): New macro.
+ (DECL_NOT_REALLY_EXTERN): New macro.
+ (DECL_THIS_STATIC): New macro.
+
+ * decl.c: Lose all references to current_extern_inline. Break
+ inline semantics into DECL_INLINE for actual inlining and
+ DECL_THIS_INLINE for the linkage wierdness. Use DECL_THIS_STATIC.
+ * decl2.c: Use DECL_NOT_REALLY_EXTERN to indicate that we want to
+ emit an inline here. Associated changes.
+ * lex.c: Likewise.
+ * pt.c: Likewise.
+ * typeck.c: Likewise.
+
+ * call.c (build_method_call): Don't bother trying to handle inlines
+ specially.
+ * cvt.c (convert_to_aggr): Likewise.
+
+ * pt.c (do_function_instantiation): Handle instantiation of
+ public inlines, too.
+
+Wed Mar 29 16:04:25 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (init_exception_processing): Change the interface for
+ __throw_type_match and add decl for new rtti matching routine
+ __throw_type_match_rtti.
+ (build_eh_type): New routine to build a run time descriptor for the
+ expression given.
+ (expand_start_catch_block): Update to use new calling convention for
+ the matcher.
+ (expand_throw): Update to use build_eh_type.
+
+Mon Mar 27 07:14:33 1995 Warner Losh <imp@village.org>
+
+ * g++.c: Removed __NetBSD__ from conditional.
+ Declare strerror if HAVE_STRERROR is defined; otherwise
+ declare sys_errlist and sys_nerr.
+ (my_strerror): New function.
+
+Tue Mar 28 14:16:35 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * search.c (get_binfo): Don't try to be so clever.
+
+ * tree.c (copy_to_permanent): Also suspend_momentary().
+
+ * cvt.c (cp_convert_to_pointer): Hand off to convert_fn_pointer even
+ if the types are the same.
+
+ * decl.c (start_function): Handle extern inlines more like C++ says
+ we should.
+
+ * init.c (build_member_call): Hand constructor calls off to
+ build_functional_cast.
+
+ * typeck2.c (build_functional_cast): Use DECL_NESTED_TYPENAME to get
+ the name of the type.
+
+Tue Mar 28 13:13:56 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * decl.c (grokdeclarator): Check for the decl returned by
+ grokfndecl to be null before using build_decl_attribute_variant.
+
+Mon Mar 27 18:04:41 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * init.c (build_new): Use build_pointer_type instead of
+ TYPE_POINTER_TO.
+
+Fri Mar 24 12:11:24 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (build_conditional_expr): Handle pmfs.
+ (convert_for_assignment): Fix pmf support.
+
+ * cvt.c (convert_fn_ptr): Support !flag_vtable_thunks.
+ (cp_convert_to_pointer): Handle pmfs.
+ (cp_convert): Pass pmfs to cp_convert_to_pointer.
+
+ * typeck.c (common_type): Handle inheritance for pmfs.
+
+ * typeck2.c (build_m_component_ref): Do access control.
+
+ * typeck.c (comp_target_types): Check for conversion to void *
+ before checking trickier conversions.
+
+ * decl.c (duplicate_decls): Propagate DECL_ABSTRACT_VIRTUAL_P.
+
+ * pt.c (push_tinst_level): Complain if template instantiation depth
+ is greater than max_tinst_depth.
+
+ * typeck.c (common_type): Assume that we can call common_type to
+ unify the target type of a pointer.
+
+Thu Mar 23 00:48:44 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl2.c (finish_file): Don't synthesize methods at
+ finish_vtable_prevardecl time. Do synthesize methods that are not
+ used, but are public and not external.
+
+ * cvt.c (build_type_conversion): Only give an error if for_sure.
+
+ * typeck.c (comp_target_types): Only support pointer conversions if
+ nptrs > 0.
+
+Wed Mar 22 19:30:15 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * init.c (build_new): Catch use of an initializer list where it
+ shouldn't be.
+
+Wed Mar 22 16:21:07 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * init.c (build_new): Wrap alloc_expr in an RTL_EXPR if nelts is
+ non-constant.
+
+ * decl2.c: temp_name_counter is now public.
+
+ * decl.c (struct cp_function): Add temp_name_counter field.
+ (push_cp_function_context): Save it.
+ (pop_cp_function_context): Restore it.
+
+ * typeck.c (common_type): Handle unifying function types, and unify
+ unmatched things to void* with a compiler_error, rather than
+ silently like before.
+
+Wed Mar 22 15:10:34 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl2.c (finish_prevtable_vardecl, finish_vtable_vardecl): Revert
+ Brendan's last change and fix latent problem that causes TD entries
+ to not come out when the things that need them has yet to be
+ expanded.
+
+Wed Mar 22 15:12:00 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (build_binary_op_nodefault, comparison ops): Update type0
+ and type1, since we might have changed op0 or op1.
+
+Wed Mar 22 13:33:45 1995 Jason Merrill <jason@python.cygnus.com>
+
+ * typeck.c (common_type): Don't mess up templates.
+
+Wed Mar 22 04:56:00 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (common_type): Handle ptms properly. Also handle
+ T* -> void*.
+ (build_binary_op_nodefault): New variable build_type controls what
+ type is given to the expression when it is created. Set this to
+ boolean_type_node for comparison ops instead of using result_type.
+ (comp_target_types): Allow T * -> void *.
+
+ * cvt.c (cp_convert_to_pointer): Do access control when converting
+ ptms, too.
+
+Tue Mar 21 17:25:06 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * parse.y (extern_lang_string): Catch use of linkage specs that
+ aren't all naming the same language.
+
+ * class.c (finish_struct): Delete accidental duplicate code.
+
+Tue Mar 21 14:00:57 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (build_binary_op_nodefault): Disable pedwarns about
+ comparing functions and incomplete types.
+
+ * decl.c (finish_function): Only unset current_function_decl if
+ !nested.
+ (duplicate_decls): Last change went too far; we only want to stop
+ checking for value/reference ambiguity.
+
+Tue Mar 21 01:26:39 1995 Mike Stump <mrs@cygnus.com>
+
+ * gc.c (build_generic_desc): Zap the DECL_SIZE so that we can lay it
+ out fresh, as the new type may be larger.
+
+Mon Mar 20 19:01:10 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * expr.c (extract_init): Try to expand the RTL for the
+ initialization and figure out what it will look like so we can avoid
+ run-time initialization. Disabled for now.
+ (extract_scalar_init): Helper for scalar initialization.
+ (extract_aggr_init): Helper for aggregate initialization.
+
+ * decl.c (duplicate_decls): Don't complain about ambiguous
+ declarations.
+ (obscure_complex_init): Now returns a tree. Call extract_init if
+ we're optimizing and this is a toplevel decl.
+ (finish_decl): Update accordingly.
+
+ * lex.c (check_newline): If we're just changing files (not pushing
+ or popping), update input_file_stack->name.
+
+Mon Mar 20 17:55:04 1995 Mike Stump <mrs@cygnus.com>
+
+ * pt.c (type_unification): Only TEMPLATE_DECLs are handled right now
+ in the transitive unification code.
+
+Mon Mar 20 16:07:50 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * decl.c (shadow_tag): Don't allow inline, virtual, or explicit on
+ non-functions.
+ (grokdeclarator): Don't allow friends to be defined in local classes.
+
+Sat Mar 18 04:03:33 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl2.c (finish_prevtable_vardecl): Use DECL_DECLARED_STATIC
+ rather than DECL_SAVED_INSNS to decide whether or not this method
+ was declared inline.
+
+ * method.c (synthesize_method): Turn off DECL_INLINE if
+ function_cannot_inline_p thinks we're too large.
+
+ * typeck.c (build_indirect_ref): Use build_expr_type_conversion.
+
+Fri Mar 17 17:47:36 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * class.c (instantiate_type): Handle pmfs.
+
+ * typeck.c (convert_for_assignment): Check types when assigning one
+ pmf to another.
+
+ * decl.c (define_label): Fix logic for printing out the name of the
+ label in an error message.
+
+ * error.c (dump_expr): Support ARRAY_REF.
+
+Fri Mar 17 17:43:02 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * decl2.c (finish_vtable_vardecl): Call build_t_desc here.
+ (finish_prevtable_vardecl): Instead of here.
+
+Fri Mar 17 14:40:45 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (expand_static_init): Also use expand_aggr_init if the
+ initializer is a TREE_LIST.
+ (grokdeclarator): Only pedwarn about extra qualification if -pedantic.
+
+ * pt.c (unify): Fix unification of return type.
+
+ * expr.c (fixup_result_decl): Use store_expr, rather than
+ emit_move_insn, to move the return value into the place where
+ callers will expect it.
+
+Thu Mar 16 22:05:25 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * init.c (build_offset_ref): Call assmble_external on functions.
+ * typeck.c (build_component_ref): Likewise.
+
+Thu Mar 16 20:28:16 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * decl.c (struct saved_scope): Add members base_init_list and
+ member_init_list.
+ (push_to_top_level): Save current_base_init_list and
+ current_member_init_list to them.
+ (pop_from_top_level): Put it back.
+
+Thu Mar 16 19:21:14 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * pt.c (instantiate_template): Call assemble_external.
+
+Thu Mar 16 18:07:54 1995 Brendan Kehoe <brendan@phydeaux.cygnus.com>
+
+ * class.c: Include rtl.h, to get NULL_RTX.
+ (finish_struct): Also zero out DECL_SAVED_INSNS, to avoid problems
+ on hosts with different sizes for each part of the union.
+ * tree.c: Also include rtl.h.
+ (layout_basetypes): Same change for DECL_SAVED_INSNS.
+
+Thu Mar 16 13:57:36 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * pt.c (unify): Fix array domain unification for 64-bit targets.
+
+ * decl2.c (finish_file): Push bizarre type decl before walking the
+ vtables the first time.
+ (walk_vtables): OK, don't set prev to vars if the vardecl_fn messed
+ with TREE_CHAIN (prev).
+
+ * init.c (emit_base_init): Use convert_pointer_to_real instead of
+ convert_pointer_to when converting to a direct base.
+
+Wed Mar 15 20:26:29 1995 Mike Stump <mrs@cygnus.com>
+
+ * pt.c (type_unification): Handle transitive unification better.
+
+Wed Mar 15 13:56:16 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl2.c (walk_vtables): Always set prev to vars.
+ (mark_vtable_entries): Call assemble_external on the vtable entries.
+
+ * class.c (finish_struct): Set the vtable's size to NULL_TREE before
+ calling layout_decl, so that it gets updated properly.
+
+ Finally re-enable dynamic synthesis. This time it works.
+ * method.c (synthesize_method): Pass decl_function_context (fndecl)
+ to {push,pop}_cp_function_context.
+ * decl.c (push_cp_function_context): Now takes a tree argument.
+ (pop_cp_function_context): Likewise.
+ * call.c (build_method_call): Enable synthesis.
+ * lex.c (cons_up_default_function): Likewise.
+
+Tue Mar 14 19:14:19 1995 Doug Evans <dje@chestnut.cygnus.com>
+
+ * parse.y (setattrs): Chain onto prefix_attributes rather than
+ setting it.
+
+Wed Mar 15 13:00:00 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * decl.c (pushdecl): Check if the type of the VAR_DECL is an
+ error_mark_node before trying to read TYPE_LANG_SPECIFIC.
+
+Mon Mar 13 21:00:28 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * decl.c (grokdeclarator, case ARRAY_REF): Wrap the exp with fold,
+ and convert the size and integer_one_node to the index type.
+
+Mon Mar 13 08:01:02 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (get_member_function_from_ptrfunc): Save the instance
+ argument, and tack it onto the front of the COND_EXPR to make the
+ semantics come out right. Grab the instance argument from
+ '*instance_ptrptr', rather than having it passed in separately.
+
+ * various: Change various consed-up comparison operations to have
+ boolean type. Remove the instance argument in calls to
+ get_member_function_from_ptrfunc.
+
+ * error.c (dump_expr): Dump true and false as "true" and "false".
+
+ * decl2.c (finish_file): Also set DECL_STATIC_FUNCTION_P on the
+ global init function.
+
+ * decl.c (finish_function): Only set DECL_EXTERNAL here if the
+ inline function is public.
+
+Sat Mar 11 00:58:03 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * init.c (is_friend): Be more careful about checking
+ DECL_CLASS_CONTEXT on non-member functions.
+
+ * decl2.c (finish_vtable_vardecl): Don't bother calling
+ assemble_external here.
+ (prune_vtable_vardecl): New function that just splices out the
+ vtable decl from the top-level decls.
+ (import_export_inline): Unset DECL_EXTERNAL at first.
+ (finish_file): Don't bother calling assemble_external here. Do
+ splice out all of the vtables.
+
+Fri Mar 10 14:42:29 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (finish_function): If we're not emitting the function yet,
+ call assemble_external for it.
+
+ * decl2.c (finish_prevtable_vardecl): Don't call mark_vtable_entries
+ here.
+ (finish_vtable_vardecl): Don't do the linkage deduction thing here.
+ Also don't splice out the current vtable if it is unused.
+ (finish_file): Move the second walk_vtables and the synthesis check
+ inside the 'reconsider' loop. Move thunk emission after the
+ 'reconsider' loop.
+
+Thu Mar 9 16:28:16 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * pt.c (tsubst): Don't bother calling cp_build_type_variant, since it
+ was passing bogus values for readonly and volatile from the original
+ template decl, not the resultant type of the tsubst call.
+
+ * class.c (duplicate_tag_error): Use cp_error_at to point out the
+ previous definition of the tag.
+
+Thu Mar 9 10:46:17 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (start_function): Clear base_init_insns and protect_list.
+ (struct cp_function): Add base_init_insns field.
+ (push_cp_function_context): Also save base_init_insns.
+ (pop_cp_function_context): Also restore base_init_insns.
+
+Wed Mar 8 13:31:44 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * init.c (member_init_ok_or_else): Check for initializing a static
+ member here.
+ (emit_base_init): Instead of here.
+
+Tue Mar 7 16:03:26 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * call.c (build_method_call): Disable synthesis as needed.
+ * lex.c (cons_up_default_function): Likewise.
+
+Tue Mar 7 10:14:29 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * parse.y: New rules to allow attributes in a prefix position.
+ (prefix_attributes): New variable. Pass it into cplus_decl_attributes.
+ (setattr): New rule.
+ (reserved_declspecs, declmods): Catch attributes here.
+ * decl2.c (cplus_decl_attributes): Add PREFIX_ATTRIBUTES argument.
+ * decl.c (duplicate_decls): Pass DECL_MACHINE_ATTRIBUTES to
+ descendent typedef.
+ (grokdeclarator): Added code to support machine attributes.
+ * Makefile.in (stamp-parse): Expect 5 shift/reduce failures.
+
+Mon Mar 6 15:07:02 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * call.c (build_method_call): Don't synthesize methods outside of a
+ function.
+
+ Make base initialization more re-entrant so that synthesis on the
+ fly will work (and, eventually, template instantation on the fly).
+ * init.c (sort_member_init): Don't bother with members that can't be
+ initialized. Reorganize a bit. Don't initialize base members here.
+ (sort_base_init): New function, like sort_member_init, but for base
+ classes. Steals some code from emit_base_init.
+ (emit_base_init): Simplify. Call sort_{member,base}_init before
+ doing any initialization, so we don't have to save
+ current_{member,base}_init_list in push_cp_function_context.
+ (expand_aggr_vbase_init_1): Adjust for sort_base_init.
+ (expand_aggr_vbase_init): Simplify.
+ * decl.c (struct cp_function): Add protect_list field.
+ (push_cp_function_context): Also save protect_list.
+ (pop_cp_function_context): Also restore protect_list.
+ * call.c (build_method_call): Enable synthesis at point of call.
+ * lex.c (cons_up_default_function): Likewise.
+
+ * parse.y: Turn -ansi checks back into -pedantic checks.
+
+ * init.c (build_new): Fix -fcheck-new for array new.
+
+Sat Mar 4 15:55:42 1995 Fergus Henderson <fjh@cs.mu.oz.au>
+
+ * typeck.c (build_compound_expr): warn if left-hand operand of
+ comma expression has no side-effects.
+
+Fri Mar 3 15:16:45 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * parse.y (primary): Change 'object qualified_id *' rules to 'object
+ overqualified_id *'.
+
+Fri Mar 3 12:48:17 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * parse.y (unary_expr): Catch doing sizeof an overloaded function.
+ Make the error look the same as the one we issue in c_sizeof.
+
+ * typeck.c (build_binary_op_nodefault): Give an error for trying
+ to compare a pointer-to-member to `void *'.
+
+Fri Mar 3 11:28:50 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (build_unary_op): Handle bool increment with smoke and
+ mirrors here, rather than in expand_increment where it belongs,
+ because Kenner doesn't agree with me.
+
+Fri Mar 3 00:08:10 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * decl.c (grokparms): Catch a PARM_DECL being used for a default
+ argument as well.
+
+Thu Mar 2 20:05:54 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * init.c (build_new): Don't allow new on a function type.
+
+ * parse.y (primary): Avoid a crash when seeing if the arg is of
+ the same type as that given for the typespec in an explicit dtor call.
+
+Thu Mar 2 00:49:38 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (finish_function): Change test for calling
+ mark_inline_for_output.
+
+Wed Mar 1 11:23:46 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (build_modify_expr): Complain if
+ build_default_binary_type_conversion fails.
+
+ * init.c (expand_default_init): Handle arguments of unknown type
+ properly.
+
+ * cvt.c (build_expr_type_conversion): Only complain about ambiguity
+ if 'complain'.
+ * various: Pass 'complain'.
+
+ * typeck.c (comptypes): Be more picky about comparing UPTs.
+
+Wed Mar 1 11:03:41 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * decl.c (grokdeclarator): If declarator is null, say that the
+ type used has an incomplete type.
+
+Wed Mar 1 10:06:20 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * pt.c (instantiate_template): Copy the template arguments to the
+ permanent_obstack. Also use simple_cst_equal to compare them when
+ looking for a previous instantiation.
+
+ * tree.c (make_deep_copy): Support copying INTEGER_TYPEs (assuming
+ they are array domain types).
+
+Tue Feb 28 23:24:55 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * cp-tree.h: Define WANT_* constants for passing to
+ build_expr_type_conversion.
+ * cvt.c (build_expr_type_conversion): New function to build
+ conversion to one of a group of suitable types.
+ (build_default_binary_type_conversion): Use it.
+ * decl2.c (grok_array_decl): Likewise.
+ * typeck.c (build_unary_op): Likewise.
+ (build_array_ref): Tidy up a bit.
+ (build_binary_op): Likewise.
+
+Tue Feb 28 19:57:31 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * decl.c (grokdeclarator): Don't allow decl of an argument as `void'.
+
+Tue Feb 28 17:23:36 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * parse.y (typed_declspecs1): Add 'typespec reserved_typespecquals
+ reserved_declspecs' rule.
+
+ * parse.y (expr_or_declarator): Remove notype_qualified_id rule.
+ (direct_notype_declarator): Likewise.
+ (complex_direct_notype_declarator): Add notype_qualified_id rule.
+
+ * lex.c (real_yylex): Handle :> digraph properly.
+
+Tue Feb 28 12:26:29 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * decl.c (grokdeclarator): Check if it's a friend, not if it's
+ non-virtual, that's being initialized. Move the check up to
+ before FRIENDP would get cleared. Catch an unnamed var/field
+ being declared void. Say just `field' instead of `structure field'
+ in the error message. Only go for the operator name if DECLARATOR
+ is non-null.
+
+Tue Feb 28 00:08:01 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (start_function): Complain about abstract return type.
+ (grokdeclarator): Complain about declaring constructors and
+ destructors to be const or volatile. Complain about declaring
+ destructors to be static.
+
+ * pt.c (uses_template_parms): Handle pmfs.
+
+ * decl.c (grokdeclarator): Don't call variable_size for array bounds
+ that only depend on template constant parameters.
+
+Mon Feb 27 15:38:16 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * error.c (dump_decl): Only look to see if it's a vtable if we
+ actually have a name to check out.
+
+Mon Feb 27 13:37:53 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * cvt.c (convert_to_aggr): Lose misleading shortcut.
+
+Sun Feb 26 17:27:32 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * decl.c (set_nested_typename): Always set DECL_IGNORED_P,
+ not just for dwarf.
+
+Sun Feb 26 00:10:18 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * decl.c (grokdeclarator): Don't allow a static member to be
+ declared `register'.
+
+ * init.c (make_friend_class): Move up to a pedwarn for the warning
+ about a class declaring friends with itself.
+
+ * decl.c (grokdeclarator): You can't do `volatile friend class foo'
+ or `inline friend class foo'. Only try to make a friend out of
+ TYPE if we didn't already reset it to integer_type_node.
+
+Sat Feb 25 22:32:03 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * decl.c (grokdeclarator): Don't allow initialization of a
+ non-virtual function.
+
+ * decl.c (start_function): Do a pedwarn if we're changing `main'
+ to have an int return type.
+
+Sat Feb 25 00:02:05 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (build_modify_expr): Handle simple assignment from
+ TARGET_EXPRs by building up an RTL_EXPR to force expansion. Whew.
+
+Fri Feb 24 18:27:14 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * decl.c (grokdeclarator): Also don't allow virtual outside of a
+ class decl for a scope method definition performed at global binding.
+
+ * init.c (build_offset_ref): Don't allow creation of an OFFSET_REF
+ of a bitfield.
+
+ * decl.c (grokdeclarator): Don't allow a const to be declared mutable.
+
+ * typeck.c (build_binary_op): Return an error_mark_node if either
+ one of the args turned into an error_mark_node when we tried to
+ use default_conversion.
+
+ * typeck.c (build_unary_op): Forbid using postfix -- on a bool.
+
+ * decl.c (grokdeclarator): Allow `signed' and `unsigned' to be
+ used on `__wchar_t'.
+
+Fri Feb 24 13:59:53 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (end_protect_partials): Do it the right way.
+
+Wed Feb 22 15:42:56 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (build_binary_op_nodefault): Upgrade warning about
+ comparing distinct pointer types to pedwarn.
+
+ * typeck2.c (digest_init): Cope with extra braces.
+
+ * typeck.c (build_binary_op_nodefault): Use tree_int_cst_sgn instead
+ of INT_CST_LT (..., interger_zero_node).
+
+Wed Feb 22 14:45:52 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * except.c [!TRY_NEW_EH] (end_protect_partials): Define dummy
+ function for systems that don't have EH.
+
+Tue Feb 21 19:18:31 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * call.c (can_convert_arg): Like can_convert, but takes an arg as
+ well.
+
+ * pt.c (type_unification): Allow implicit conversions for parameters
+ that do not depend on template parameters.
+
+Tue Feb 21 18:43:48 1995 Douglas Rupp <drupp@cs.washington.edu>
+
+ * Make-lang.in, config-lang.in: ($exeext): New macro.
+ * Make-lang.in: Try a "cp" if "ln" fails.
+ * cp-tree.h (decl_attributes): Added argument.
+ * decl2.c (cplus_decl_attribute): Add arg to decl_attributes.
+ * cp/g++.c: Added #ifdefs for sys/file.h and process.h for NT.
+ Modified spawnvp to have to correct number of arguments for OS/2, NT.
+
+Tue Feb 21 18:36:55 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl.c (finish_function): Add calls to end_protect_partials to end
+ the exception region that protects constructors so that partially
+ constructed objects can be partially destructed when the constructor
+ throws an exception.
+ * init.c (perform_member_init, sort_member_init, emit_base_init):
+ Added support for partially constructed objects.
+ * init.c (build_partial_cleanup_for): New routine to do partial
+ cleanups of a base class.
+ * decl2.c (finish_file): Move the emitting of the exception table
+ down, after we emit all code that might have exception regions in
+ them.
+ * except.c (end_protect_partials, might_have_exceptions_p): New
+ routines.
+ (emit_exception_table): Always output table if called.
+ * cp-tree.h (protect_list, end_protect_partials,
+ might_have_exceptions_p, emit_exception_table): Added.
+
+Tue Feb 21 16:05:59 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * gc.c (build_typeid): Pass a NULL_TREE, not the bogus, unused
+ address of a local variable.
+ * class.c (build_vfn_ref): Only try to build the PLUS_EXPR if we
+ were given a non-null PTR_TO_INSTPTR.
+
+Tue Feb 21 01:53:18 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (duplicate_decls): Always lay out the merged decl.
+
+ * decl2.c (finish_vtable_vardecl): Don't do vtable hack on templates.
+ (finish_prevtable_vardecl): Likewise.
+
+ * method.c (synthesize_method): Set interface_{unknown,only}
+ according to the settings for our class, not the file where it comes
+ from.
+
+Sat Feb 18 12:26:48 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c: Handle systems that define __i386__ but not __i386.
+
+Fri Feb 17 15:31:31 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl2.c (reparse_decl_as_expr): Support being called without a
+ type argument.
+
+ * parse.y (primary): Add '(' expr_or_declarator ')'. Adds 4 r/r
+ conflicts. Sigh.
+
+Fri Feb 17 12:02:06 1995 Mike Stump <mrs@cygnus.com>
+
+ * parse.y (template_def, fndef, fn.def1, return_init, condition,
+ initdcl0, initdcl, notype_initdcl0, nomods_initdcl0,
+ component_decl_1, after_type_component_declarator0,
+ notype_component_declarator0, after_type_component_declarator,
+ notype_component_declarator, after_type_component_declarator,
+ full_parm, maybe_raises, exception_specification_opt): Fix up,
+ include exception_specification_opt maybeasm maybe_attribute and
+ maybe_init if missing. Rename maybe_raises to
+ exception_specification_opt to match draft wording. Use maybe_init
+ to simplify rules.
+
+Fri Feb 17 01:54:46 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * init.c (build_new): Set TREE_NO_UNUSED_WARNING on COMPOUND_EXPRs
+ built for news of scalar types.
+
+Thu Feb 16 17:48:28 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (build_binary_op_nodefault): Update code for warning
+ about signed/unsigned comparisons from C frontend. Realize that the
+ code in the C frontend is, if anything, even more bogus. Fix it.
+ (build_binary_op): Undo default_conversion if it wasn't useful.
+
+ * typeck.c (build_unary_op, ADDR_EXPR): Lose bogus special case for
+ PRE*CREMENT_EXPR.
+
+ * decl2.c (import_export_vtable): Don't try the vtable hack
+ if the class doesn't have any real non-inline virtual functions.
+ (finish_vtable_vardecl): Don't bother trying to find a non-inline
+ virtual function in a non-polymorphic class.
+ (finish_prevtable_vardecl): Likewise.
+
+ * decl2.c (import_export_vtable): Use and set DECL_INTERFACE_KNOWN.
+
+ * cp-tree.h (DECL_INTERFACE_KNOWN): Use DECL_LANG_FLAG_5.
+
+ * init.c (expand_virtual_init): Always call assemble_external.
+
+ * class.c (build_vfn_ref): Always call assemble_external.
+ (build_vtable): Always call import_export_vtable.
+ (prepare_fresh_vtable): Likewise.
+ (add_virtual_function): Don't bother setting TREE_ADDRESSABLE.
+
+Thu Feb 16 03:28:49 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * class.c (finish_struct): Use TYPE_{MIN,MAX}_VALUE to determine
+ whether an enumerated type fits in a bitfield.
+
+Wed Feb 15 15:38:12 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * class.c (grow_method): Update method_vec after growing the class
+ obstack.
+
+Wed Feb 15 13:42:59 1995 Mike Stump <mrs@cygnus.com>
+
+ * parse.y (handler_seq): Push a level for the catch parameters.
+
+Wed Feb 15 12:42:57 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * init.c (emit_base_init): Update BINFO_INHERITANCE_CHAIN on my
+ bases, in case they've been clobbered.
+
+Wed Feb 15 12:07:29 1995 Mike Stump <mrs@cygnus.com>
+
+ * class.c (finish_base_struct): Set up BINFO_INHERITANCE_CHAIN here,
+ so that one day it will always be valid.
+ * tree.c (propagate_binfo_offsets, layout_vbasetypes): Likewise.
+
+ * cp-tree.h (copy_binfo): Removed, unused.
+ * tree.c (copy_binfo): Likewise.
+
+Wed Feb 15 00:05:30 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * init.c (build_new): Save the allocation before calling
+ expand_vec_init on it.
+
+ * decl.c (finish_enum): The TYPE_PRECISION of the enum type mush
+ match the TYPE_PRECISION of the underlying type for constant folding
+ to work.
+
+Tue Feb 14 15:31:25 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (push_eh_entry, expand_start_all_catch,
+ expand_leftover_cleanups, expand_end_catch_block): Keep track of
+ the context in which the exception region occurs.
+ (build_exception_table): If the region was not output, don't output
+ the entry in the eh table for it.
+
+Tue Feb 14 02:15:43 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * init.c (expand_default_init): Only use a previous constructor call
+ if it's a call to our constructor. Does the word "Duh" mean
+ anything to you?
+
+ * decl.c (grokparms): Fine, just don't call
+ convert_for_initialization at all. OK? Happy now?
+
+Mon Feb 13 02:23:44 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * cp-tree.h (CLASSTYPE_FIRST_CONVERSION): Make sure that the class
+ method vector has a second element before returning it.
+
+ * decl.c (grokparms): Don't strip REFERENCE_TYPE before calling
+ convert_for_initialization.
+
+Sun Feb 12 03:57:06 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (build_modify_expr): Compare function name to
+ constructor_name (current_class_type) instead of current_class_name.
+
+ * decl.c (grokparms): Don't do anything with the return value of
+ convert_for_initialization.
+
+ * error.c (dump_decl): Also dump_readonly_or_volatile on the decl.
+
+ * decl.c (duplicate_decls): Tweak error message.
+
+ * typeck.c (build_const_cast): Implement checking.
+ (build_reinterpret_cast): Implement some checking.
+
+ * cp-tree.h (CONV_FORCE_TEMP): Require a new temporary when
+ converting to the same aggregate type.
+ (CONV_STATIC_CAST): Include it.
+ (CONV_C_CAST): Likewise.
+ * cvt.c (convert_force): Use CONV_C_CAST instead of CONV_OLD_CONVERT.
+ (cp_convert): Only force a new temporary if CONV_FORCE_TEMP.
+
+Fri Feb 10 16:18:52 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (build_c_cast): Use non_lvalue to tack something on
+ where necessary.
+
+ * decl.c (auto_function): Now a function.
+ * except.c (init_exception_processing): terminate, unexpected,
+ set_terminate, and set_unexpected have C++ linkage.
+
+ * typeck.c (build_unary_op, TRUTH_NOT_EXPR): Use convert instead of
+ truthvalue_conversion for converting to bool, as it handles
+ user-defined conversions properly.
+ (condition_conversion): Likewise.
+
+ * except.c (expand_throw): Don't call convert_to_reference.
+ Pass the correct parameters to build_new.
+
+ * method.c (do_build_assign_ref): Don't use access control when
+ converting to a base reference here.
+ (do_build_copy_constructor): Or here.
+
+ * init.c (build_new): Unset TREE_READONLY on the dereferenced
+ pointer before assigning to it.
+
+ * decl.c (maybe_build_cleanup): Don't bother stripping const here.
+
+ * decl2.c (delete_sanity): You can now delete pointer to const.
+
+Fri Feb 10 13:28:38 1995 Jason Merrill <jason@python.cygnus.com>
+
+ * decl.c (finish_function): Don't rely on actual parameters being
+ evaluated left-to-right.
+ * except.c (expand_end_catch_block): Likewise.
+
+Fri Feb 10 00:52:04 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * tree.c (real_lvalue_p): Like lvalue_p, but class temps aren't
+ considered lvalues.
+ * cvt.c (convert_to_reference): Use real_lvalue_p instead of
+ lvalue_p.
+
+ * cvt.c (build_type_conversion_1): Don't call convert on aggregate
+ types.
+ (convert_to_reference): Fix erroneous text substitution.
+
+ * typeck2.c (initializer_constant_valid_p): Update from C frontend.
+ Add new argument to all callers.
+
+ * typeck.c (convert_arguments): Check for error_mark_node before
+ trying to do anything with the actual parameter.
+
+ * typeck.c (condition_conversion): Build up a CLEANUP_POINT_EXPR and
+ fold it.
+ (bool_truthvalue_conversion): Remove. Fix all callers to call
+ truthvalue_conversion instead.
+ (various): Fold CLEANUP_POINT_EXPRs.
+
+ * parse.y (conditions): Call condition_conversion rather than
+ building up a CLEANUP_POINT_EXPR.
+
+ * pt.c (end_template_decl): Don't warn_if_unknown_interface here
+ under -falt-external-templates.
+
+Thu Feb 9 05:24:10 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * init.c (build_new): Complain about new of const type without
+ initializer. Other cleanup.
+
+ * call.c (compute_conversion_costs): Don't call
+ build_type_conversion with a reference type; convert to the target
+ type and check its lvaluetude.
+ * cvt.c (convert_to_reference): Likewise.
+
+ * cvt.c (build_type_conversion_1): There will never be any need to
+ dereference references here now.
+
+Thu Feb 9 00:37:47 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_builtin_throw): Make sure we only `use' the
+ value of return_val_rtx.
+
+Wed Feb 8 15:45:55 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * parse.y (structsp): Don't complain about declaring a type being
+ defined to be a friend.
+
+ * decl2.c (warn_if_unknown_interface): Note the template in question
+ and the point of instantiation, for -falt-external-templates.
+ * lex.c (reinit_parse_for_method): Pass the decl to
+ warn_if_unknown_interface.
+ * pt.c (instantiate_template): Likewise.
+ (end_template_decl): Likewise.
+
+ * decl.c (set_nested_typename): Set IDENTIFIER_TYPE_VALUE on the
+ nested name again, to make local classes work a bit better.
+
+ * typeck.c (build_function_call_real): Dereference reference after
+ checking for incomplete type.
+
+ * init.c (build_new): Accept new of const and volatile types.
+
+Wed Feb 8 14:04:16 1995 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (grokdeclarator): Fix error message.
+
+Wed Feb 8 03:16:15 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (convert_for_initialization): Do bash arrays when
+ converting to a reference to non-array.
+
+Tue Feb 7 15:50:33 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * cvt.c (cp_convert): Don't call convert_to_reference, or
+ automatically dereference references. Do pass reference conversions
+ to cp_convert_to_pointer.
+ (cp_convert_to_pointer): Support references.
+
+ * call.c (build_method_call): Don't build up a reference to the
+ parameter here; let build_overload_call handle that.
+
+ * typeck.c (build_c_cast): Call convert_to_reference directly if
+ converting to a reference type.
+ * method.c (do_build_copy_constructor): Likewise.
+ * method.c (do_build_copy_constructor): Likewise.
+ (do_build_assign_ref): Likewise.
+
+ * call.c (build_method_call): Dereference a returned reference.
+ * typeck.c (build_function_call_real): Likewise.
+
+ * decl.c (xref_basetypes): Check for unions with basetypes here.
+ (xref_tag): Instead of here.
+
+ * pt.c (process_template_parm): Template type parm decls are
+ artificial.
+
+Mon Feb 6 04:32:09 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * parse.y (typed_declspecs): Add missing semicolon.
+ (do_xref_defn): Resurrect.
+ (named_class_head_sans_basetype): Move template specialization
+ definition cases to named_class_head_sans_basetype_defn.
+
+ * decl2.c (grokfield): Call pushdecl_class_level after setting the
+ TYPE_NAME, not before.
+
+Sun Feb 5 02:50:45 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * call.c (convert_harshness): Don't call sorry here. Don't allow
+ conversions between function pointer types if pedantic.
+
+ * pt.c (overload_template_name): Pass globalize=1 to xref_tag.
+
+ * lex.c (cons_up_default_function): Use the full name for the return
+ type of op=.
+
+ * decl.c (set_nested_typename): Don't worry about anonymous types,
+ as they already have a unique name.
+ (pushdecl): Remove redundant set_nested_typename
+ (xref_tag): Split out base handling into xref_basetypes.
+
+ * cp-tree.h (TYPE_INCOMPLETE): New macro; TEMPLATE_TYPE_PARMs are
+ not considered incomplete even though their definition is unknown.
+
+ * decl.c (xref_defn_tag): Lose.
+ (xref_tag): xref_next_defn = ! globalize.
+ (pushdecl): Don't set DECL_NESTED_TYPENAME on artificial decls. The
+ ones that should have it set will have it set by pushtag.
+ (pushdecl_class_level): Likewise.
+ (pushtag): Tidy up a bit.
+ (set_nested_typename): Push a decl for the nested typename from
+ here, rather than from xref_defn_tag.
+
+ * parse.y (do_xref): Lose.
+ (named_class_head): If we see 'class foo:' we know it's a
+ definition, so don't worry about base lists for non-definitions.
+
+ * pt.c (push_template_decls): Template parm decls are artificial.
+
+ * decl.c (duplicate_decls): Restore check for qualifier
+ disagreement for non-functions.
+ (decls_match): Remove check for qualifier disagreement.
+
+Fri Feb 3 14:58:58 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (grok_reference_init): Convert initializer from
+ reference.
+ * typeck.c (convert_for_initialization): Likewise.
+
+ * decl.c (duplicate_decls): Propagate DECL_NESTED_TYPENAME.
+
+ * cvt.c (cp_convert): Don't convert to the same class type by just
+ tacking on a NOP_EXPR.
+ (convert_to_reference): Use comp_target_types instead of comptypes
+ so that we don't allow conversions two levels down.
+
+Thu Feb 2 15:07:58 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * class.c (build_vbase_path): Bash types to make the backend happy.
+ * cvt.c (build_up_reference): Bash the types bashed by
+ build_vbase_path to be reference types instead of pointer types.
+ (convert_to_reference): Likewise.
+
+ * typeck.c (build_c_cast): Don't strip NOPs if we're converting to a
+ reference type.
+
+ * parse.y (structsp): Put back error for 'struct B: public A;'.
+
+Wed Feb 1 23:02:06 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c: Add support for mips systems that don't define __mips
+ but do define mips, like Ultrix.
+
+Wed Feb 1 22:39:07 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c: Add support for exception handling on the Alpha.
+
+Wed Feb 1 10:12:14 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl2.c (finish_file): Fix bug in Jan 31st change.
+
+Tue Jan 31 16:59:15 1995 Gerald Baumgartner <gb@lorenzo.cs.purdue.edu>
+
+ * sig.c (build_signature_pointer_or_reference_type): Don't set
+ IS_AGGR_TYPE for signature pointers/reference so expand_default_init
+ doesn't expect to find a copy constructor.
+ * call.c (build_method_call): Treat signature pointers/reference
+ as if IS_AGGR_TYPE were set.
+
+Tue Jan 31 13:28:56 1995 Mike Stump <mrs@cygnus.com>
+
+ * gc.c (get_typeid): Pawn off error messages to build_t_desc.
+ (build_t_desc): Inform the user here if they try and build
+ with -frtti and don't include <typeinfo.h>.
+
+ * decl2.c (finish_prevtable_vardecl): Support rescanning.
+ (finish_file): Move finish_prevtable_vardecl up to before the global
+ initializers are done as tdecls are initialized in the global
+ initializer. Also Pick up any new tdecls or vtables needed by
+ synthesized methods.
+
+ * class.c (finish_struct): Simplify. We have to do rtti scanning at
+ end, so we might as well do all of it there.
+
+Tue Jan 31 05:35:02 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * call.c (build_method_call): Fix -fthis-is-variable for 32-bit
+ targets, too.
+
+Tue Jan 31 00:11:04 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl2.c (finish_prevtable_vardecl): New routine, mostly split from
+ finish_vtable_vardecl. It has the first half functionality from
+ that routine.
+ * decl2.c (finish_vtable_vardecl): Update to not include stuff not
+ in finish_prevtable_vardecl.
+ * decl2.c (finish_file): Call finish_prevtable_vardecl.
+ * gc.c (build_generic_desc): Allow it to be called when not at the
+ global binding layer, but behave as if we were.
+ (build_t_desc): Rearrange a bit so that it really works and is
+ easier to follow.
+ * class.c (finish_struct): Don't decide on tdecls here, as we have
+ to wait until the end of the file in general to decide whether or
+ not they come out.
+
+Mon Jan 30 01:00:40 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * init.c (build_delete): Check access to operator delete before
+ calling the destructor.
+ * method.c (build_opfncall, DELETE_EXPR): build_method is allowed to
+ return error_mark_node.
+ * call.c (build_method_call): Use the one-argument op delete even if
+ it's an error.
+
+ * init.c (build_new): Fix -fthis-is-variable support.
+ * call.c (build_method_call): Likewise.
+
+ * call.c (convert_harshness): Make conversion from a pointer to bool
+ worse than conversion to another pointer.
+
+Sat Jan 28 16:46:10 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * init.c (build_new): Check new return value if -fcheck-new.
+
+ * lex.c (check_newline): Clear end_of_file when we're done, too.
+
+Sat Jan 28 10:38:39 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl2.c (finish_vtable_vardecl): Make rtti TD tables follow
+ vtables whereever they go.
+
+ * gc.c (build_t_desc): Remove old way of setting it up, as it wasn't
+ right.
+
+Sat Jan 28 09:10:44 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl2.c (finish_vtable_vardecl): Now set the
+ interface/implementation of vtables on the first virtual function,
+ if one exists, otherwise we use the old method. This is a major win
+ in terms of cutting down the size of objects and executables in
+ terms of text space and data space. Now most of the savings that
+ #pragma interface/implementation gives is automatic in a fair number
+ of cases.
+
+Sat Jan 28 04:57:33 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (grokdeclarator): Discard the template parameters in a
+ template constructor declaration so that the function is always
+ named constructor_name (ctype).
+
+ * lex.c (check_newline): Use ungetc to put back the character before
+ calling HANDLE_PRAGMA.
+
+Fri Jan 27 17:23:47 1995 Mike Stump <mrs@cygnus.com>
+
+ * decl2.c (check_classfn): If the cname is T<int> and fn_name is T,
+ make sure we still match them.
+
+Fri Jan 27 16:32:10 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * parse.y: Add END_OF_LINE token.
+
+ * lex.c (check_newline): Set linemode when we see a # directive, and
+ unset it when we're done. Turn all 'return's into 'goto skipline'.
+ Fix all uses of '\n', since we won't see it anymore. Put back the
+ character we read before checking for a sysv or target pragma.
+ (real_yylex): If we see an EOF in linemode, return END_OF_LINE.
+ (handle_sysv_pragma): Don't look at the input stream; quit when we
+ see an END_OF_LINE token.
+
+ * input.c (getch): Return EOF if we're in line mode and at the end
+ of a line.
+ (put_back): Don't put back an EOF.
+
+Thu Jan 26 19:26:34 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_throw): Do the newing of the exception object
+ before we load the type descriptor or the address so that we don't
+ wipe any of the values out.
+
+Thu Jan 26 19:20:00 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (init_exception_processing): Don't use r12 on the rs6000.
+
+Tue Jan 24 16:36:31 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (grokparms): Don't try to build up a reference at this point.
+
+ * typeck2.c (build_functional_cast): Don't assume that a NOP_EXPR
+ will suffice to convert from integer_zero_node.
+
+Wed Jan 25 15:02:09 1995 David S. Miller <davem@nadzieja.rutgers.edu>
+
+ * class.c (instantiate_type): Change error message text.
+ * typeck2.c (store_init_value): Likewise.
+
+Mon Jan 23 21:57:14 1995 Mike Stump <mrs@cygnus.com>
+
+ * pt.c (tsubst): When we copy a node, don't forget to copy
+ TREE_CHAIN, we use it later.
+
+Mon Jan 23 03:33:47 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (convert_for_assignment): Initialize variable before use.
+
+Fri Jan 20 01:17:59 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * g++.c (main): Link with both libstdc++ and libg++ if called as
+ something ending with "g++", otherwise only libstdc++. Move -lm to
+ the end of the line.
+
+Thu Jan 19 15:43:11 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * call.c (build_method_call): Don't mess with 'this' before calling
+ compute_conversion_costs.
+
+Wed Jan 18 15:40:55 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * search.c (get_matching_virtual): Give line number for previous
+ declaration.
+
+ * call.c (convert_harshness): Handle conversions to references
+ better.
+
+ * cvt.c (build_up_reference): OK, handle {MIN,MAX}_EXPR *properly*.
+
+Wed Jan 18 15:21:38 1995 Mike Stump <mrs@cygnus.com>
+
+ * class.c (instantiate_type): Use DECL_CHAIN to walk lists instead,
+ as the TREE_CHAIN for methods will take us to the next differently
+ named function, DECL_CHAIN won't.
+
+Wed Jan 18 14:26:59 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * tree.c (lvalue_p): Handle {MIN,MAX}_EXPR.
+
+ * decl2.c (lang_decode_option): -Wall implies -Wparentheses.
+ warn_parentheses defaults to 0.
+
+ * decl.c (grokparms): Put back call to require_instantiated_type.
+
+Tue Jan 17 19:56:15 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c (exception_section): Use the data section on the rs6000.
+ Change calling convention for named_section.
+
+Wed Jan 17 18:20:57 1994 Fergus Henderson <fjh@munta.cs.mu.oz.au>
+
+ * cp-tree.h : Make if (x=0) warn with wall
+ * parse.y : Make if (x=0) warn with wall
+
+Tue Jan 17 14:12:00 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (BOOL_TYPE_SIZE): BITS_PER_WORD if SLOW_BYTE_ACCESS,
+ BITS_PER_UNIT otherwise.
+
+ * search.c (get_matching_virtual): Don't check the binfo if the
+ types are the same.
+
+ * cvt.c (cp_convert): Just call truthvalue_conversion to convert to
+ bool.
+
+Mon Jan 16 13:28:48 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * various: Use boolean_type_node, boolean_true_node,
+ boolean_false_node.
+
+ * search.c (get_matching_virtual): Allow covariant returns that
+ don't require pointer adjustment.
+
+ * typeck.c (build_conditional_expr): Don't call default_conversion
+ on ifexp.
+
+ * cvt.c (build_up_reference): Handle MIN_EXPR and MAX_EXPR.
+
+ * decl.c (grokdeclarator): Upgrade warning about &const to pedwarn.
+
+Sun Jan 15 22:17:32 1995 David Binderman <dcb@lovat.fmrco.COM>
+
+ * pt.c (do_function_instantiation): Free targs once we're done.
+
+Sun Jan 15 22:17:32 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (BOOL_TYPE_SIZE): Defaults to BITS_PER_WORD.
+ (init_decl_processing): Use BOOL_TYPE_SIZE instead of CHAR_TYPE_SIZE
+ for bool.
+
+Sat Jan 14 05:33:55 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl2.c (finish_file): We need to mess up if there are any
+ variables in the list, not just if there is one with a constructor.
+
+Fri Jan 13 14:42:55 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (duplicate_decls): Propagate DECL_STATIC_{CON,DE}STRUCTOR.
+ (finish_function): Handle DECL_STATIC_{CON,DE}STRUCTOR.
+ (finish_function): Trust rest_of_compilation.
+
+ * decl2.c (finish_file): Also call functions designated as static
+ constructors/destructors.
+
+ * decl.c (grokdeclarator): Allow access decls of operator functions.
+ (grokparms): Only do convert_for_initialization if the initializer
+ has a type.
+ (duplicate_decls): Put back push_obstacks_nochange call.
+
+ * lex.c (real_yylex): Downgrade complaint about the escape sequence
+ being too large from pedwarn to warning.
+
+ * decl.c (grokdeclarator): Don't complain about long long in system
+ headers.
+
+ * lex.c (real_yylex): Handle digraphs.
+
+Thu Jan 12 12:17:24 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (init_decl_processing): -f{no-,}strict-prototype only
+ affects C linkage declarations now.
+
+ * typeck.c (comp_target_types): Grok simple contravariant conversions.
+ (common_type): t1 and t2 are interchangeable.
+
+ * various: Test return value of comp_target_types differently in
+ different places; it now returns -1 for a contravariant conversion
+ (which is fine in symmetric cases).
+
+ (common_type): Prefer long double to double even when
+ they have the same precision.
+
+ * decl.c (grokparms): Call convert_for_initialization to check
+ default arguments.
+
+ * init.c (build_new): void_type_node has a size (of 0).
+
+ * decl.c (decls_match): Also check for agreement of TREE_READONLY
+ and TREE_THIS_VOLATILE.
+ (push_class_level_binding): Properly handle shadowing of
+ nested tags by fields.
+
+ * search.c (dfs_pushdecls): Likewise.
+
+ * decl2.c (finish_file): Don't second-guess self-initialization.
+
+ * cvt.c (convert_to_reference): Work with expr directly, rather than
+ a copy.
+
+ * decl.c (push_overloaded_decl): Only shadow artificial TYPE_DECLs.
+
+ * init.c (add_friend): Downgrade duplicate friend message from
+ pedwarn to warning.
+
+ * decl.c (duplicate_decls): Push obstacks before calling common_type.
+
+Thu Jan 12 17:15:21 1995 Michael Ben-Gershon <mybg@cs.huji.ac.il>
+
+ * except.c (push_eh_entry): set LABEL_PRESERVE_P flag for
+ exception table labels.
+ (expand_start_all_catch): Likewise.
+ (expand_leftover_cleanups): Likewise.
+ (expand_end_catch_block): Likewise.
+ * except.c (make_first_label): new function.
+ (expand_start_all_catch): add a call to make_first_label() before
+ using a label as a jump destination.
+ (expand_end_all_catch): Likewise.
+ (expand_leftover_cleanups): Likewise.
+ (expand_end_catch_block): Likewise.
+ (expand_builtin_throw): Likewise.
+ (expand_throw): Likewise.
+ * except.c: Add ARM processor support for exception handling.
+
+Thu Jan 12 12:17:24 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ (complete_array_type): Copy code from C frontend.
+
+ * lex.c (real_yylex): Don't multiply the length of a wide string
+ literal by WCHAR_BYTES.
+
+ * decl.c (pushdecl): Check for redeclaration of wchar_t here.
+ (duplicate_decls): Instead of here.
+ (define_label): Complain about a label named wchar_t.
+ (grokdeclarator): Complain about declarations of
+ operator-function-ids as non-functions.
+
+ * typeck.c (unary_complex_lvalue): Also wrap prefix -- and ++ in
+ COMPOUND_EXPRs.
+ (build_unary_op): Wrap unary plus in a NON_LVALUE_EXPR.
+
+ * lex.c (real_yylex): Don't skip whitespace when reading the next
+ character after ->.
+
+Wed Jan 11 16:32:49 1995 Mike Stump <mrs@cygnus.com>
+
+ * except.c: Allow cc1plus to be built with native compiler on rs6000.
+ (expand_start_all_catch): Add assemble_external calls for various
+ routines we call.
+ (expand_leftover_cleanups): Likewise.
+ (expand_start_catch_block): Likewise.
+ (do_unwind): Likewise.
+ (expand_builtin_throw): Likewise.
+
+Wed Jan 11 01:05:42 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (pushtag): Only look for a previous decl in the current
+ binding level. Use explicit global scope in DECL_NESTED_TYPENAME.
+
+ * gxx.gperf: Add __signature__ and __sigof__ keywords.
+
+ * decl2.c (lang_decode_option): -ansi does not set flag_no_asm. It
+ does set flag_no_gnu_keywords and flag_operator_names.
+
+ * lex.c (init_lex): 'overload' is not a keyword unless -traditional.
+ Unset extension keywords if -fno-gnu-keywords.
+ Allow operator names ('bitand') if -foperator-names.
+ Never unset 'asm'; -fno-asm only affects 'typeof'.
+
+ * decl.c (lookup_name_real): The got_object special lookup only
+ applies to types.
+
+Tue Jan 10 18:07:51 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * spew.c (yylex): Also use DECL_NESTED_TYPENAME if got_object is set.
+
+ * parse.y (primary): Unset got_object after all rules that use the
+ 'object' nonterminal.
+ (object): Set got_object.
+
+ * lex.h: Declare got_object.
+
+ * decl.c (lookup_name_real): Also lookup names in the context of an
+ object specified.
+
+Tue Jan 10 14:30:30 1995 Mike Stump <mrs@cygnus.com>
+
+ * typeck.c (get_member_function_from_ptrfunc): Use ptrdiff_type_node
+ for things that have to be added to pointers, not size_type. Cures
+ problems with pointer to members on Alphas.
+ (build_binary_op_nodefault): Likewise.
+ (get_delta_difference_: Likewise.
+ (build_ptrmemfunc): Likewise.
+
+Tue Jan 10 01:49:25 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (pushtag): Stick the new decl in TYPE_NAME before pushing
+ it.
+
+ * typeck.c (build_component_ref): Don't build up a COMPONENT_REF
+ when dealing with overloaded member functions; just act like
+ build_offset_ref.
+ (commonparms): Remove misleading comment.
+
+ * decl.c (duplicate_decls): Complain about repeated default
+ arguments here.
+ (redeclaration_error_message): Instead of here.
+ (pushdecl): Complain about missing default arguments here.
+ (grokparms): Instead of here.
+ (lookup_name_current_level): Also match on DECL_ASSEMBLER_NAME.
+ (grok_reference_init): Do not complain about missing initializer if
+ declared 'extern'.
+
+ * search.c (lookup_field): Don't return a TYPE_DECL if there is a
+ function alternative and want_type is not set.
+
+Mon Jan 9 18:16:23 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (pushtag): Don't set TYPE_NAME to an identifier. Do push
+ the decl when the type has no TYPE_NAME.
+ (lookup_nested_type): Don't assume that type has TYPE_NAME set.
+ (lookup_name_real): Call lookup_field with want_type =
+ prefer_type.
+
+ * search.c (lookup_field): Handle want_type properly in the presence
+ of fields with the same name.
+
+ * decl.c (set_nested_typename): Set nested name for file-scope types
+ to include leading ::.
+ (pushdecl): Set the nested typename if the decl doesn't have one,
+ rather than if the type's canonical decl doesn't have one.
+
+Mon Jan 9 03:44:33 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (convert_for_assignment): Complain about contravariance
+ violation here.
+ (comp_target_types): Instead of here.
+ (build_unary_op): resolve_offset_ref before checking for a valid
+ type.
+
+ * spew.c (yylex): Decrement looking_for_typename after we see a
+ _DEFN.
+
+ * decl.c (pushdecl): Don't install an artificial TYPE_DECL in
+ IDENTIFIER_LOCAL_VALUE if we already have a decl with that name.
+
+ * typeck.c (convert_for_assignment): Converting pointers to bool
+ does not need a cast.
+
+Sun Jan 8 18:16:45 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * class.c (instantiate_type): Initialize nsubsts parm.
+
+ * pt.c (do_function_instantiation): Likewise.
+
+Sat Jan 7 14:37:05 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * pt.c (tsubst): Use TREE_STATIC instead of DECL_INLINE &&
+ DECL_SAVED_INSNS to determine whether or not we've seen a definition
+ of this function.
+ (instantiate_template): Likewise.
+
+ * call.c (convert_harshness): Allow const reference binding when
+ called from the overloading code, but not when called from
+ can_convert (since it isn't a conversion).
+ (convert_harshness): Put back some disabled code.
+
+Fri Jan 6 14:10:57 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * call.c (convert_harshness): There is no implicit conversion from
+ void* to other pointer types (unless the parameter is (void*)0).
+ (convert_harshness): Non-lvalues do not convert to reference types.
+
+ * class.c (finish_struct_methods): Still set
+ TYPE_HAS_{INT,REAL}_CONVERSION.
+
+ * call.c (can_convert): Don't use aggregate initialization.
+
+ * cp-tree.h: Declare lookup_conversions.
+
+Thu Jan 5 21:08:00 1995 Mike Stump <mrs@cygnus.com>
+
+ * parse.y (simple_stmt): Fix duplicate case value error messages to
+ be more readable.
+
+Wed Jan 4 16:44:19 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * cvt.c (build_type_conversion): Total rewrite to use
+ convert_harshness instead of reproducing conversion logic here. Now
+ much shorter.
+
+ * call.c (convert_harshness): Support conversions to bool.
+ (can_convert): Checks whether a conversion is less harsh
+ than USER_CODE, for build_type_conversion.
+
+ * search.c (add_conversions): Function for passing to dfs_walk which
+ adds all the type conversion operators in the current type to a list.
+ (lookup_conversions): Calls dfs_walk with add_conversions and return
+ the list.
+ (dfs_walk): Don't require a qfn.
+
+ * cp-tree.h: Lose CLASSTYPE_CONVERSIONS hackery.
+ (CLASSTYPE_FIRST_CONVERSION): Points to elt 1 of CLASSTYPE_METHOD_VEC.
+
+ * class.c (finish_struct_bits): Lose CLASSTYPE_CONVERSIONS hackery.
+ (grow_method): A separate function for building onto the growing
+ method vector.
+ (finish_struct_methods): Use it. Put all type conversion operators
+ right after the constructors. Perhaps we should sort the methods
+ alphabetically?
+
+Mon Jan 2 14:42:58 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * call.c (build_method_call): Lose another misleading shortcut.
+
+Fri Dec 30 17:57:30 1994 Mike Stump <mrs@cygnus.com>
+
+ * gc.c (build_bltn_desc): Handle bool as a built-in type.
+
+Fri Dec 30 14:20:21 1994 Mike Stump <mrs@cygnus.com>
+
+ * tree.c (layout_vbasetypes): Ensure that we don't loose alignment
+ on the complete type because of small virtual bases.
+
+Fri Dec 30 12:22:29 1994 Mike Stump <mrs@cygnus.com>
+
+ * decl.c (n_incomplete): Bump n_incomplete up to int to match C
+ front end.
+ (pushdecl): Also count decls pushed that are of a type being defined
+ as incomplete things.
+ * class.c (finish_struct): Move hack_incomplete_structures up to
+ just after we set it as not being defined, so that the decls we
+ build for RTTI don't count as incomplete.
+
+Thu Dec 29 18:20:57 1994 Mike Stump <mrs@cygnus.com>
+
+ * pt.c (tsubst): Fix problem with defining constructors in templated
+ classes with virtual bases.
+
+Wed Dec 28 08:31:00 1994 Mike Stump <mrs@cygnus.com>
+
+ * parse.y (TYPEID): Strip top-level cv-qualifiers on typeid
+ expressions.
+ * gc.c (build_typeid): Likewise.
+
+Thu Dec 22 17:26:33 1994 Mike Stump <mrs@cygnus.com>
+
+ * cvt.c (build_up_reference): Fix breakage introduced on Nov 29,
+ don't assert on complex AGGR inits.
+
+Thu Dec 22 14:32:31 1994 Mike Stump <mrs@cygnus.com>
+
+ * method.c (build_overload_value): Handle pointer to members as
+ template arguments.
+
+Thu Dec 22 13:09:07 1994 Mike Stump <mrs@cygnus.com>
+
+ * typeck.c (unary_complex_lvalue): Don't call sorry if we know how
+ to do take the address of a data member for a pointer to data
+ member.
+
+Thu Dec 22 10:04:19 1994 Mike Stump <mrs@cygnus.com>
+
+ * decl.c (grokdeclarator): Use the typedef name for linkage if the
+ type doesn't otherwise have a name.
+
+ * decl2.c (grokfield): Likewise.
+
+ * class.c (finish_struct): Since we reuse the TYPE_DECL for the
+ DECL_NAME of enums, structs and classes, we have to avoid trying to
+ put it in the TYPE_FIELDS again.
+
+Wed Dec 21 11:07:05 1994 Mike Stump <mrs@cygnus.com>
+
+ * decl2.c (check_classfn): Ignore this parameter on static functions
+ when checking to see if we match.
+
+Tue Dec 20 17:47:02 1994 Mike Stump <mrs@cygnus.com>
+
+ * typeck.c (unary_complex_lvalue): Handle address of non-left most
+ pointers to members by calling get_delta_difference.
+
+Mon Dec 19 22:40:53 1994 Mike Stump <mrs@cygnus.com>
+
+ * decl2.c (check_classfn): Don't use decls_match yet, as it modifies
+ static functions to early.
+
+Thu Dec 19 22:37:48 1994 Mike Stump <mrs@cygnus.com>
+
+ * method.c (make_thunk): Handle encoding of positive thunk offsets.
+
+Sat Dec 17 13:29:50 1994 Doug Evans <dje@canuck.cygnus.com>
+
+ * Make-lang.in (.PHONY): Tell GNU make C++ and c++ are phony targets.
+
+Thu Dec 15 16:32:12 1994 Mike Stump <mrs@cygnus.com>
+
+ * decl2.c (check_classfn): Use decls_match to check if this has
+ already been declared, as the DECL_ASSEMBLER_NAME may have been
+ changed via asm("new_name").
+ * decl.c (decls_match): Make public.
+
+Thu Dec 15 15:17:55 1994 Mike Stump <mrs@cygnus.com>
+
+ * *.[chy] (expand_aggr_init) Add fourth argument to handle
+ distinction between = init and (init) style of initializations.
+ * *.[chy] (finish_decl): Add fifth argument to to handle
+ distinction between = init and (init) style of initializations.
+
+Tue Dec 13 19:16:05 1994 Mike Stump <mrs@cygnus.com>
+
+ Fix some random `explicit' bugs.
+
+ * cvt.c (convert_to_reference): Add third parameter to
+ convert_force.
+ (convert_force): Likewise.
+ * call.c (build_method_call): Likewise.
+ * decl2.c (setup_vtbl_ptr): Likewise.
+ * init.c (expand_virtual_init): Likewise.
+ (build_member_call): Likewise.
+ (build_delete): Likewise.
+ (build_vbase_delete): Likewise.
+ * typeck.c (build_component_addr): Likewise.
+ (build_c_cast): Likewise.
+ (build_modify_expr): Likewise.
+ * cp-tree.h (CONV_NONCONVERTING): Likewise. Add so that we can
+ distinguish the context in which the conversion appears. Add thrid
+ argument to build_c_cast.
+ * cvt.c (cp_convert): Pass whether or not we want to consider
+ non-converting constructors down to build_method_call.
+ * decl2.c (reparse_absdcl_as_casts): Add third argument to
+ build_c_cast.
+ * gc.c (build_m_desc): Likewise.
+ * init.c (build_new): Likewise.
+ * parse.y (expr_no_commas): Likewise.
+ (primary): Likewise.
+ * typeck.c (build_x_function_call): Likewise.
+ (build_static_cast): Likewise.
+ (build_reinterpret_cast): Likewise.
+ (build_const_cast): Likewise.
+ (build_c_cast): Likewise.
+ (build_ptrmemfunc): Likewise.
+ * typeck2.c (build_functional_cast): Likewise.
+ * init.c (expand_aggr_init): Added LOOKUP_ONLYCONVERTING to
+ expand_aggr_init_1 as inits are converted to the destination type.
+
+Tue Dec 13 16:18:57 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * Make-lang.in (cc1plus): Depends on c-pragma.o.
+
+ * Makefile.in (OBJ{DEP,}S): Add ../c-pragma.o.
+
+ * lex.c (check_newline): If the #pragma is not recognized by g++,
+ try machine-specific ones too.
+ (handle_sysv_pragma): Copied from c-lex.c.
+
+Mon Dec 12 23:53:06 1994 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_throw): Fix Dec 6th change, build_new likes a
+ reference better.
+
+Mon Dec 12 18:01:00 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (build_binary_op): Lose checks on TYPE_PTRMEMFUNC_P with
+ IS_AGGR_TYPE, since now they will not both be set on the same type.
+
+ * pt.c (do_pending_expansions): Don't clear TREE_PUBLIC on
+ instantiations controlled by -fexternal-templates.
+
+ * decl.c (duplicate_decls): Don't complain about different values of
+ __attribute__ ((const)) and ((noreturn)).
+
+Fri Dec 9 18:17:37 1994 Doug Evans <dje@cygnus.com>
+
+ * Makefile.in (BISONFLAGS): Delete --yacc.
+ (PARSE_H): Depend on $(PARSE_C), for parallel makes.
+ (PARSE_C): Undo last patch.
+
+Fri Dec 2 10:44:36 1994 Mike Stump <mrs@cygnus.com>
+
+ * Makefile.in (BISONFLAGS): Add --yacc so that output winds up in
+ y.tab.c.
+
+Thu Dec 8 17:39:46 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (finish_decl): Don't call obscure_complex_init for decls
+ of indeterminate size.
+
+Wed Dec 7 16:49:22 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (obscure_complex_init): Function to tweak the decl to
+ prevent expand_decl from tring to initialize it.
+ (finish_decl): Use it rather than writing the same code in three
+ different places.
+
+ * parse.y (bad_parm): Stop trying to support parms without types.
+
+Wed Dec 7 12:06:56 1994 Mike Stump <mrs@cygnus.com>
+
+ * decl2.c (grokfield): Make asm specs on static member functions
+ work.
+
+Tue Dec 6 15:43:20 1994 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_throw): Make a copy of the thrown object.
+
+Tue Dec 6 14:16:34 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * parse.y: : has lower precedence than =.
+
+Tue Dec 6 12:46:17 1994 Mike Stump <mrs@cygnus.com>
+
+ * decl.c (pushdecl): Use DECL_NAME of VAR_DECLs to avoid namespace
+ manglings.
+ (grokvardecl): Add namespace into variable name.
+
+Tue Dec 6 11:26:55 1994 Mike Stump <mrs@cygnus.com>
+
+ * decl2.c (current_namespace_id): New routine to transform a simple
+ name into a name in a namespace.
+ * decl.c (grokdeclarator): Use it.
+ * decl2.c (get_namespace_id): Find the name of the current
+ namespace.
+ (push_namespace, pop_namespace): Complete out missing
+ functionality.
+
+Mon Dec 5 17:11:51 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * class.c (finish_struct): Don't use LONG_LONG_TYPE_SIZE, as it may
+ not be defined. Fix warning message for enums and restore warning
+ for non-enums.
+
+ * decl2.c (push_namespace): Dummy function.
+ (pop_namespace): Likewise.
+ (do_namespace_alias): Likewise.
+ (do_using_decl): Likewise.
+ (do_using_directive): Likewise.
+
+ * parse.y: New token NSNAME for namespace names.
+ (extdef): Add namespace, using definitions.
+ (using_decl): New rule for using declarations.
+ (any_id): New rule for identifiers with any degree of scoping.
+ (identifier): Add NSNAME.
+ (notype_identifier): Likewise.
+ (component_decl): Add using_decl.
+ (nested_name_specifier): Add NSNAME SCOPE.
+
+ * typeck.c (convert_for_assignment): Handle conversions between
+ enums and bool.
+
+ * decl.c (duplicate_decls): Only propagate DECL_MAIN_VARIANT on
+ FUNCTION_DECLs.
+
+Mon Dec 5 13:03:16 1994 Mike Stump <mrs@cygnus.com>
+
+ * class.c (finish_struct): Give an error if one tries to declare a
+ bit-field's size greater than a long long, as the backend will dump.
+ It is not an error to declare an enum bit-field greater than its
+ precision. Warn if an enum bit-field is too small to hold all
+ its values.
+
+Mon Dec 5 11:41:50 1994 Mike Stump <mrs@cygnus.com>
+
+ * typeck.c (convert_for_assignment): Use cp_convert instead of
+ convert so that we don't get static casts.
+
+Sun Dec 4 11:59:01 1994 Mike Stump <mrs@cygnus.com>
+
+ * cvt.c (cp_convert): Don't complain about int->enum conversion if
+ we are doing static casts.
+
+Fri Dec 2 18:32:41 1994 Mike Stump <mrs@cygnus.com>
+
+ * error.c (dump_expr): Do something more intelligent with SAVE_EXPRs
+ when dumping expressions in error messages.
+
+Fri Dec 2 17:04:27 1994 Mike Stump <mrs@cygnus.com>
+
+ * gc.c (build_dynamic_cast): Change interface to libg++, ensure that
+ the return type is the right type, and make references work.
+
+Fri Dec 2 16:36:43 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (poplevel): Don't be confused by function-scope
+ declarations of non-nested functions.
+ (duplicate_decls): Propagate DECL_MAIN_VARIANT.
+ (pushdecl): Use duplicate_decls to copy info from old decl into new
+ function-scope one rather than doing it here.
+
+ * decl2.c (mark_inline_for_output): Deal with the DECL_MAIN_VARIANT
+ of this decl, in case this is a function-scope declaration.
+
+ * decl.c (finish_enum): Make sure that the type has the right
+ precision when we call fixup_*_type.
+
+Tue Nov 29 19:12:07 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * cvt.c (build_up_reference): Strip superfluous NOP_EXPRs; we do
+ want to build up references to rvalues if possible.
+ (cp_convert): Stick on a NOP_EXPR when converting to the same type.
+
+Tue Nov 29 11:28:59 1994 Mike Stump <mrs@cygnus.com>
+
+ * parse.y (maybe_raises): Handle throw ().
+ * parse.y (ansi_raise_identifier): grok type-ids in exception
+ specifications.
+ * tree.c (build_exception_variant): Use list compare to check if
+ two exception specifications match.
+ * decl.c (duplicate_decls, bad_specifiers): Enhance wording on error
+ messages.
+ * call.c (build_method_call): Remove TREE_RAISES.
+ * cvt.c (convert_to_aggr): Likewise.
+ * typeck.c (build_function_call_real, convert_arguments): Likewise.
+ * init.c (expand_aggr_init_1): Likewise.
+
+Tue Nov 29 09:50:39 1994 Mike Stump <mrs@cygnus.com>
+
+ * except.c: Add support for m68k and mips exception handling
+ support.
+
+Tue Nov 29 08:48:33 1994 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_end_all_catch): Throw into outer context, if we
+ fall off end of catch handlers.
+
+Mon Nov 28 16:44:41 1994 Mike Stump <mrs@cygnus.com>
+
+ * Makefile.in: Make is easier to decide where parse.[ch] will be
+ built.
+
+Thu Nov 17 20:11:24 1994 Doug Evans <dje@cygnus.com>
+
+ * cp/Make-lang.in (CXX_INSTALL_NAME) Use program_transform_name.
+ (GXX_INSTALL_NAME) Likewise.
+ (CXX_CROSS_NAME) Use program_transform_cross_name.
+ (GXX_CROSS_NAME) Likewise.
+ (c++.install-man): Use program_transform_name on g++.1.
+ (c++.uninstall): Likewise.
+
+Mon Nov 28 13:53:03 1994 Mike Stump <mrs@cygnus.com>
+
+ * parse.y (THROW): Fix precedence of throw expressions.
+
+Mon Nov 28 13:15:16 1994 Mike Stump <mrs@cygnus.com>
+
+ * typeck.c (build_unary_op): Allow promotions from bool to int on
+ unary ~.
+
+Sun Nov 27 00:16:21 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * method.c (build_overload_name): Use DECL_ASSEMBLER_NAME for
+ classes when appropriate.
+ (build_overload_nested_name): When dealing with a function context,
+ use ASM_FORMAT_PRIVATE_NAME to tweak the name of the function to
+ avoid conflicts between local classes of the same name.
+
+Wed Nov 23 17:59:42 1994 Mike Stump <mrs@cygnus.com>
+
+ * gxx.gperf, parse.y, lex.h, hash.h, lex.c (init_lex), delc.c
+ (duplicate_decls, grokdeclarator), cp-tree.h: Add support for
+ `explicit'.
+ * cvt.c (convert_to_reference, cp_convert, build_type_conversion_1,
+ build_type_conversion): Use LOOKUP_ONLYCONVERTING in
+ build_method_calls so that non-converting constructors are not used.
+ * call.c (build_method_call): If we shouldn't use a non-converting
+ constructor, then don't.
+
+Wed Nov 23 14:46:56 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * call.c (build_method_call): Don't try to synthesize methods yet.
+
+Tue Nov 22 12:45:21 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * pt.c (push_template_decls): Create CONST_DECLs for template
+ constant parameters, not VAR_DECLs.
+
+Sat Nov 19 15:28:31 1994 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * typeck.c (build_binary_op_nodefault): Can shorten shift only if
+ shift count is less than size in bits of arg0.
+
+Thu Nov 17 15:30:50 1994 Mike Stump <mrs@cygnus.com>
+
+ * gxx.gperf, hash.h, lex.c (init_lex, real_yylex), parse.y: Add new
+ ANSI keywords and, and_eq, bitand, bitor, explicit, namespace, not,
+ not_eq, or, or_eq, typename, using, xor, xor_eq to g++. Still need
+ to add support for explicit, namespace, typename, and using, support
+ for the rest is already in.
+
+Fri Nov 4 19:04:18 1994 Mike Stump <mrs@cygnus.com>
+
+ * gc.c (get_bad_cast_node): New routine to support compile time
+ throws of bad_cast.
+ * gc.c (build_dynamic_cast): Support throwing of bad_cast at compile
+ time.
+
+Fri Nov 4 11:12:00 1994 Mike Stump <mrs@cygnus.com>
+
+ * except.c: Add hppa support.
+
+Fri Nov 4 10:50:50 1994 Mike Stump <mrs@cygnus.com>
+
+ * except.c: Add rs6000 support.
+
+Thu Nov 3 14:24:23 1994 Mike Stump <mrs@cygnus.com>
+
+ * except.c (do_unwind): Add i[34]86 support.
+
+Thu Nov 3 00:10:46 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * pt.c (do_pending_expansions): Unset TREE_PUBLIC on implicit
+ instantiations.
+
+Wed Nov 2 15:08:24 1994 Kung Hsu <kung@mexican.cygnus.com>
+
+ * decl.c (finish_function): Emit types used in method parameters
+ into symbol table.
+
+Wed Nov 2 15:05:47 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * pt.c (process_template_parm): Allow pointer to member function
+ template parameter types.
+ (uses_template_parms): Handle pointer to member function
+ CONSTRUCTORs.
+
+ * g++.c (main): Cast first argument of bzero to (char *).
+ Pass -lstdc++ instead of -lg++ unless we are invoked as 'g++'.
+
+Mon Oct 31 14:50:48 1994 Kung Hsu <kung@mexican.cygnus.com>
+
+ * gc.c (build_dynamic_cast): rewrite to make it work.
+ * class.c (finish_vtbls): build more vtables if flag_rtti is on.
+ * class.c (modify_all_direct_vtables): ditto.
+ * init.c (expand_direct_vtbls_init): expand more vtables if
+ flag_rtti is on.
+ * decl.c (init_type_desc): add default return.
+
+Tue Oct 25 17:13:09 1994 Kung Hsu <kung@mexican.cygnus.com>
+
+ * tree.c (debug_binfo): get rid of the initial size entry of
+ vtable.
+ * cp-tree.h: change flag_dossier to flag rtti, define type
+ descriptor type nodes.
+ * decl.c (init_type_desc): new function to initialize type
+ descriptor type nodes.
+ * decl.c (record_builtin_type): change flag_dossier to flag_rtti.
+ * lex.c (init_lex): ditto.
+ * decl.c : change variable flag_dossier to flag_rtti.
+ * decl.c (duplicate_decls): get rid initial size entry of vtable.
+ * decl.c (hack_incomplete_structures): take out assert 164.
+ * search.c (get_abstract_virtuals_1): ditto.
+ * search.c (dfs_init_vbase_pointers): change CLASSTYPE_DOSSIER to
+ CLASSTYPE_RTTI.
+ * parse.y: ditto.
+ * class.c (prepare_fresh_vtable): for virtual bases, get right
+ offset.
+ * class.c (add_virtual_function): change flag_dossier to
+ flag_rtti.
+ * class.c (modify_one_vtable): modify the right rtti entry.
+ * class.c (override_one_vtable): get rid of size entry.
+ * class.c (finish_struct): change flag_dossier to flag_rtti, and
+ build extra vtables, build type descriptors for polymorphic
+ classes.
+ * gc.c (build_headof): make headof() works correctly with new
+ rtti.
+ * gc.c (build_typeid): make this function work with new rtti.
+ * gc.c (get_typeid): make this function work with new rtti.
+ * gc.c (build_bltn_desc): new function for new rtti.
+ * gc.c (build_user_desc): ditto.
+ * gc.c (build_class_desc): ditto.
+ * gc.c (build_ptr_desc): ditto.
+ * gc.c (build_attr_desc): ditto.
+ * gc.c (build_func_desc): ditto.
+ * gc.c (build_ptmf_desc): ditto.
+ * gc.c (build_ptmd_desc): ditto.
+ * gc.c (build_t_desc): ditto.
+ * gc.c : comment out old build_t_desc, build_i_desc, build_m_desc.
+
+Tue Oct 25 13:37:41 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * call.c (convert_harshness): Check for TREE_UNSIGNED differences
+ after checking for integral conversions.
+
+Wed Nov 30 19:13:50 1994 Mike Stump <mrs@cygnus.com>
+
+ * Version 2.6.3 released.
+
+Thu Nov 17 10:56:50 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck2.c (build_m_component_ref): Check the basetype of the
+ member pointer against the main variant of the object type.
+
+Mon Nov 14 14:21:52 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * cvt.c (convert_to_reference): Make sure that the original expr
+ gets its type back when converting a reference.
+
+ * method.c (build_overload_name): Clear numeric_outputed_need_bar here.
+ (build_decl_overload): Instead of here.
+
+Tue Nov 8 17:11:24 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * cvt.c (cp_convert): Don't build a TARGET_EXPR if we're not in a
+ function.
+
+ * typeck.c (convert_for_initialization): Handle initialization from
+ a TARGET_EXPR.
+
+Sun Nov 6 01:34:24 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * pt.c (lookup_nested_type_by_name): Fix list-walking logic.
+ (tsubst): When replacing a TEMPLATE_TYPE_PARM, propagate
+ TYPE_READONLY and TYPE_VOLATILE from the argument.
+ (unify): When unifying with a TEMPLATE_TYPE_PARM, remove cv-quals
+ present in parm from arg.
+ (type_unification): Strip REFERENCE_TYPE from the argument type.
+ (unify): Don't strip REFERENCE_TYPE from the argument type.
+
+Sat Nov 5 22:42:15 1994 Greg McGary <gkm@magilla.cichlid.com>
+
+ * pt.c (do_type_instantiation): Check to see if there's a
+ IDENTIFIER_TEMPLATE on a class before calling
+ instantiate_member_templates().
+
+Sat Nov 12 06:35:42 1994 Mike Stump <mrs@cygnus.com>
+
+ * Version 2.6.2 released.
+
+Thu Nov 3 18:48:19 1994 Paul Eggert <eggert@twinsun.com>
+
+ * Makefile.in (spew.o, lex.o, pt.o):
+ Depend on $(srcdir)/parse.h, not parse.h.
+
+Tue Nov 1 19:19:41 1994 Mike Stump <mrs@cygnus.com>
+
+ * Version 2.6.1 released.
+
+Sun Oct 23 13:19:55 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl2.c: Declare flag_access_control.
+ (struct lang_f_options): Add access-control.
+ * expr.c (cplus_expand_expr, NEW_EXPR): Unset flag_access_control
+ for the call to expand_aggr_init to copy the object out of the
+ pcc_struct_return slot.
+ * search.c (compute_access): if (!flag_access_control) return
+ access_public.
+
+Fri Oct 21 00:32:54 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * lex.c (cons_up_default_function): Don't try to defer method
+ synthesis now.
+
+ * decl.c (init_decl_processing): Use __pure_virtual for abort_fndecl
+ instead of abort, since the OSF/1 dynamic linker doesn't like to see
+ relocation entries for abort.
+
+ * tree.c (array_type_nelts_total): Use sizetype, not
+ integer_type_node.
+ (array_type_nelts_top): Likewise.
+
+Thu Oct 20 15:48:27 1994 Mike Stump <mrs@cygnus.com>
+
+ * decl.c (grokdeclarator): Added handling for catch parameters
+ (CATCHPARM).
+ * except.c (expand_start_catch_block): Use the new CATCHPARM context
+ instead of NORMAL.
+ * except.c (expand_throw): Don't let convert_to_reference complain
+ about what we are doing.
+
+Thu Oct 20 12:55:24 1994 Jim Wilson <wilson@cygnus.com>
+
+ * method.c (emit_thunk): Call instantiate_virtual_regs.
+
+Wed Oct 19 14:15:33 1994 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_exception_blocks): Make sure throw code doesn't
+ get put in function that won't be output.
+
+Mon Oct 17 18:03:15 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (init_decl_processing): Make alloca a builtin.
+
+Thu Oct 27 21:10:25 1994 Craig Burley <craig@burley>
+
+ * g++.c (main): Only decrement "added" and set "library" to
+ NULL when "library" != NULL (just like 940829 fix).
+
+Mon Oct 17 15:56:11 1994 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_start_catch_block): Make sure the false label
+ gets onto the permanent obstack, as it is used for the exception
+ table.
+
+Fri Oct 14 18:54:48 1994 Mike Stump <mrs@cygnus.com>
+
+ * class.c (modify_one_vtable): Since the DECL_CONTEXT of fndecl can
+ be set just below, use current_fndecl instead.
+
+Fri Oct 14 15:12:22 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * init.c (expand_aggr_vbase_init_1): Don't call expand_aggr_init_1
+ with LOOKUP_SPECULATIVELY.
+ (expand_default_init): Abort if build_method_call returns NULL_TREE.
+
+ * typeck.c (build_modify_expr): Don't just build a MODIFY_EXPR if
+ the rhs is a TARGET_EXPR.
+
+ * parse.y (left_curly): Anonymous types are not affected by #pragma
+ interface/implementation.
+
+ * method.c (synthesize_method): Don't call setup_vtbl_ptr for the
+ default constructor if it isn't needed.
+
+ * lex.c (cons_up_default_function): Do synthesize methods for
+ anonymous types if necessary.
+
+Thu Oct 13 17:44:55 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * method.c (build_decl_overload): Set numeric_outputed_need_bar to 0.
+
+Wed Oct 12 13:27:57 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * typeck.c (build_modify_expr): Understand how to copy an aggregate.
+
+ * init.c (expand_default_init): Likewise. Also remove some of the
+ crufty code that assumes methods will not be synthesized properly.
+
+ * lex.c (cons_up_default_function): If the containing type has no
+ name, these functions should never need to be called, so just
+ declare them.
+
+ * lex.c (real_yylex): Use HOST_BITS_PER_WIDE_INT to determine the
+ bitmask for lexing character constants.
+
+ * call.c (build_method_call): Disable code that tries to do tricky
+ stuff with a default parameter that is a constructor call, but
+ actually does other tricky stuff that breaks things.
+
+Wed Oct 12 16:14:01 1994 Benoit Belley <belley@cae.ca>
+
+ * decl.c (finish_enum): Disable code which forces enums to be signed,
+ since this conflicts with their use as bitfields. type_promotes_to
+ handles promotion of enums of underlying unsigned types to signed
+ integer types.
+
+Wed Oct 12 13:24:03 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * cvt.c (type_promotes_to): Also promote enums to long if
+ appropriate.
+
+ * typeck.c (default_conversion): Don't expect type_promotes_to to
+ return a main variant.
+
+Wed Oct 12 12:19:45 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * call.c (build_scoped_method_call): Don't lose side effects in the
+ object expression when calling a non-existent destructor.
+
+Fri Sep 2 19:05:21 1994 Rohan Lenard <rjl@iassf.easams.com.au>
+
+ * call.c (build_scoped_method_call): Remove erroneous error message
+ when destructor call is written as a scoped call.
+
+Tue Oct 11 23:48:31 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * various: Cast pointer arguments to bzero and bcopy to char *.
+
+Tue Oct 11 19:34:32 1994 Mike Stump <mrs@cygnus.com>
+
+ * class.c (get_derived_offset): Added a type parameter to limit how
+ far up the CLASSTYPE_VFIELD_PARENT chain we search.
+ * class.c (modify_one_vtable, fixup_vtable_deltas): When forming the
+ offset to put into the vtable for the this parameter, make sure we
+ don't offset from a parent of the DECL_CONTEXT of the function.
+
+Tue Oct 11 16:10:52 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * pt.c (do_function_instantiation): Set DECL_EXTERNAL and
+ TREE_STATIC when setting DECL_INTERFACE_KNOWN.
+ (do_type_instantiation): Likewise.
+
+ * lex.c (cons_up_default_function): Set DECL_INTERFACE_KNOWN,
+ DECL_EXTERNAL and TREE_STATIC as appropriate.
+
+ * decl2.c (finish_file): Also synthesize methods that don't have
+ DECL_EXTERNAL set. Set interface_unknown before doing so.
+
+ * decl.c (start_function): If DECL_INTERFACE_KNOWN is set on the
+ function decl, don't muck with TREE_PUBLIC and DECL_EXTERNAL.
+
+Mon Oct 10 00:56:53 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * lex.c (cons_up_default_function): Mark methods in a template class
+ as template instances. Store the values of interface_unknown and
+ interface_only for do_pending_inlines.
+ (do_pending_inlines): Use them.
+
+ * decl2.c (finish_file): If we haven't seen a definition of a
+ function declared static, make the decl non-PUBLIC so compile_file
+ can give an error.
+
+Sun Oct 9 02:42:29 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * method.c (do_build_copy_constructor): Handle anonymous unions.
+ (do_build_assign_ref): Likewise.
+ (largest_union_member): Move from lex.c.
+
+Sat Oct 8 14:59:43 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ Re-implement g++'s vague linkage independent of TREE_PUBLIC.
+ * pt.c (instantiate_member_templates): Lose redundant
+ -fexternal-templates handling.
+ (tsubst): Set TREE_PUBLIC and DECL_EXTERNAL on new decls. Don't set
+ TREE_STATIC or DECL_INTERFACE_KNOWN.
+ (do_pending_expansions): Predicate on DECL_INTERFACE_KNOWN instead
+ of DECL_EXTERNAL for explicit instantiations.
+ (do_function_instantiation): Do the new thing.
+ (do_type_instantiation): Likewise.
+ (instantiate_template): Deal with member templates defined in a .cc
+ file with -fexternal-templates.
+ * except.c (expand_exception_blocks): Use DECL_LINKAGE_KNOWN to
+ decide whether to stick builtin_throw here.
+ * decl2.c (import_export_inline): Predicate on DECL_INTERFACE_KNOWN
+ rather than TREE_PUBLIC. Generally fix rules.
+ (finish_file): Use DECL_INITIAL to determine whether or not a method
+ has been synthesized, rather than TREE_ASM_WRITTEN.
+ * decl.c (warn_extern_redeclared_static): Use DECL_PUBLIC instead of
+ TREE_PUBLIC.
+ (pushdecl): Likewise.
+ (duplicate_decls): Likewise. Deal with DECL_DECLARED_STATIC and
+ DECL_INTERFACE_KNOWN.
+ (redeclaration_error_message): Fix checking for conflicting linkage.
+ (define_function): Set DECL_INTERFACE_KNOWN.
+ (grokfndecl): Function decls are PUBLIC until we are sure about
+ their linkage. Set DECL_DECLARED_STATIC as needed.
+ (start_function): Deal with linkage. Move pushdecl after linkage
+ magic.
+ (finish_function): Don't set TREE_ASM_WRITTEN on discarded inlines.
+ * cp-tree.h (lang_decl_flags): Add interface_known and
+ declared_static.
+ (DECL_INTERFACE_KNOWN): New macro.
+ (DECL_DECLARED_STATIC): New macro.
+ (DECL_PUBLIC): New macro.
+
+ Clean up bogus use of TREE_PUBLIC.
+ * class.c (alter_access): Fix mistaken use of TREE_PUBLIC (it
+ doesn't correspond to TREE_PROTECTED and TREE_PRIVATE).
+ * init.c (do_friend): Don't arbitrarily set TREE_PUBLIC.
+
+Wed Oct 5 13:44:41 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * call.c (build_overload_call_real): Don't immediately do
+ array->pointer conversion.
+
+ * pt.c (type_unification): If not passing to a reference, strip
+ cv-quals. Also handle array->pointer conversion.
+
+Tue Oct 4 17:45:37 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (grokdeclarator): Don't warn about applying const to a
+ const typedef or template type parameter.
+
+ * decl2.c (finish_file): Also synthesize methods after walking the
+ vtables. Ugly ugly ugly.
+
+Mon Oct 3 15:02:41 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * various: Remove lingering remnants of old exception handling code.
+
+ * decl2.c (finish_file): Synthesize methods before walking the
+ vtables, so that the vtables get emitted as needed.
+
+ * decl.c (shadow_tag): Remove obsolete code for pushing tags and
+ dealing with exceptions.
+
+Mon Oct 3 13:05:27 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * Make-lang.in (g++-cross): Depend upon version.o and $(LIBDEPS).
+
+Mon Oct 3 02:59:28 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl2.c (finish_file): Fix inline handling.
+
+Sun Oct 2 00:21:56 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ * decl.c (grokdeclarator): Handle redundant scope even better.
+ ({push,pop}_cp_function_context): Take toplev parameter.
+
+ * method.c (synthesize_method): Pass toplev parameter to
+ {push,pop}_cp_function_context depending on decl_function_context
+ (fndecl).
+
+ * typeck.c (build_x_unary_op): Unary & on OFFSET_REFs is always the
+ built-in version.
+
+ * method.c (synthesize_method): Don't be confused by __in_chrg
+ parameter.
+
+ * class.c (popclass): Set C_C_D like start_function does.
+
+ * decl.c (grokdeclarator): Handle redundant scope better.
+
+ * parse.y (expr_or_declarator): Add '(' expr_or_declarator ')' rule.
+ (direct_notype_declarator): Likewise.
+ (complex_direct_notype_declarator): Remove it here.
+
+Sat Oct 1 21:42:18 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * init.c (resolve_offset_ref): Fix types used in resolving .*
+ expressions.
+
+Sat Oct 1 15:18:49 1994 Jason Merrill <jason@phydeaux.cygnus.com>
+
+ Beginnings of work to synthesize methods only when needed.
+ * call.c (build_method_call): Synthesize methods as necessary
+ (currently never necessary).
+ * class.c (popclass): Don't try to set C_C_D here, as it'll end up
+ on the wrong obstack.
+ * decl.c (push_cp_function_context): Mostly copied from
+ push_c_function_context.
+ (pop_cp_function_context): Similarly.
+ (finish_function): Reverse order of poplevel and pop_nested_class so
+ that current_class_decl is restored properly.
+ (start_function): Likewise.
+ (finish_function): Add parameter 'nested'. Don't call
+ permanent_allocation if (nested).
+ * various: Pass extra parameter to finish_function.
+ * decl2.c (finish_file): Reorganize end-of-file inline handling,
+ synthesizing methods as necessary.
+ * lex.c (cons_up_default_function): Call mark_inline_for_output.
+ Only synthesize methods immediately if #pragma implementation
+ (currently disabled).
+ (do_pending_inlines): Call synthesize_method.
+ * method.c (synthesize_method): New function; all method synthesis
+ goes through here. Calls do_build_assign_ref and
+ do_build_copy_constructor.
+ (build_default_constructor): Remove.
+ (build_dtor): Likewise.
+ (build_assign_ref): Rename to do_build_assign_ref and remove stuff
+ done by synthesize_method.
+ (build_copy_constructor): Similarly.
+
+Thu Sep 29 16:58:52 1994 Mike Stump <mrs@cygnus.com>
+
+ * typeck.c (c_expand_return): Use magic so the backend can fixup the
+ assignment into the return register, so cleanups won't clobber it.
+
+Thu Sep 29 13:08:50 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * method.c (hack_identifier): Don't call assemble_external for
+ template decls.
+
+ * decl.c (finish_decl): Also end temporary allocation if the decl in
+ question has a type of error_mark_node.
+
+Wed Sep 28 21:45:00 1994 Mike Stump <mrs@cygnus.com>
+
+ * typeck.c (build_modify_expr): When optimizing ?: on lhs, make sure
+ that if the ?: was a reference type, that the subparts will be also.
+
+Wed Sep 28 16:14:04 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * except.c (register_exception_table): Use Pmode, not PTRmode.
+
+Fri Sep 23 13:54:27 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * lex.c (do_pending_inlines): Do method synthesis after the
+ pending_inlines have been reversed.
+
+Thu Sep 22 12:53:03 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * decl2.c (finish_file): Fix Brendan's fix: Only call
+ register_exception_table if there is a non-empty exception table.
+
+Thu Sep 22 12:03:46 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * decl2.c (finish_file): Only do register_exception_table if
+ -fhandle-exceptions is being used.
+
+Wed Sep 21 19:01:51 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * except.c (output_exception_table_entry): Simplify
+ by using assemble_integer.
+ (build_exception_table): Change to return a count.
+ Cleanup to use standard macros, instead of hard-wired
+ sparc asm format. Don't make __EXCEPTION_TABLE__ global.
+ (register_exception_table): New function. Generate call to builtin.
+ * decl2.c (finish_file): Call register_exception_table.
+ * cp-tree.h (build_exception_table): Fix prototype.
+
+Wed Sep 21 13:20:42 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * tree.c (break_out_calls): Don't try to duplicate the DECL_INITIAL.
+
+ * decl2.c (delete_sanity): Give an error at trying to delete a
+ function.
+
+Wed Sep 21 11:47:10 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * lex.c (cons_up_default_function): Mark synthesized destructors
+ inline.
+
+ * decl.c (duplicate_decls): Ignore redeclarations of wchar_t as
+ something other than __wchar_t, complaining if -pedantic and not in
+ a system header.
+
+Tue Sep 20 09:43:28 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (xref_tag): Set up BINFO_INHERITANCE_CHAIN on base binfos
+ here.
+
+ * typeck.c (build_modify_expr): Require complete type after checking
+ for error_mark_node.
+
+ * call.c (build_method_call): Print parmtypes when complaining of
+ ambiguous call.
+
+ * typeck.c (build_modify_expr): Handle assignment to array from
+ non-array.
+
+ * decl.c (lookup_name_real): Deal with got_scope == error_mark_node.
+
+ * call.c (build_method_call): Don't bother with the exact match.
+
+Mon Sep 19 00:51:39 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * init.c (expand_aggr_init): If we munge the type of the variable,
+ also munge the type of the initializer.
+
+ * decl.c (grokdeclarator): Use <= when comparing to RID_LAST_MODIFIER.
+ (init_decl_processing): Push artificial declaration of wchar_t so
+ people don't have to declare it before they can use it.
+
+ * error.c (cp_line_of): return lineno in lieu of 0.
+
+ * typeck.c (convert_for_assignment): Handle conversion of pmfs to
+ int and bool.
+ (build_component_ref): Fold the COMPONENT_REF in case it can be
+ reduced.
+
+ * typeck2.c (store_init_value): Don't pedwarn about non-constant
+ bracketed initializers for automatic variables.
+
+Sun Sep 18 10:12:12 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * error.c (dump_decl): Don't say `typedef enum foo foo'.
+
+ * decl.c (start_decl): Don't set TREE_PUBLIC on template decls just
+ because they're affected by #pragma i/i. We'll deal with that when
+ they get instantiated.
+
+ * typeck.c (build_unary_op): Clean up cruft in ADDR_EXPR case.
+
+ * class.c (instantiate_type): Set TREE_CONSTANT on instantiated
+ ADDR_EXPRs if appropriate.
+
+ * decl.c (build_ptrmemfunc_type): Unset IS_AGGR_TYPE on pmf types.
+
+ * typeck.c (build_ptrmemfunc): Handle &overloaded_method as an
+ initializer properly.
+ * typeck2.c (digest_init): Likewise.
+
+ * tree.c (cp_build_type_variant): Like c_build_type_variant, except
+ it uses build_cplus_array_type.
+ * *.c: Use cp_build_type_variant instead of c_build_type_variant.
+
+ * pt.c (do_type_instantiation): Don't try to instantiate nested
+ enums.
+
+Tue Sep 13 10:56:58 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cvt.c (build_up_reference): Handle preincrement and predecrement
+ properly.
+
+Tue Sep 13 09:51:59 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * decl.c (finish_decl): Only lay out the rtl for DECL if it is, in
+ fact, static.
+
+Mon Sep 12 14:40:30 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * decl.c (finish_decl): Lay out the rtl for DECL before doing
+ grok_reference_init, in case it's static.
+
+Mon Sep 12 12:45:38 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * class.c (finish_struct): Don't synthesize constructors if the
+ class has a field with the same name as the class. Don't die on
+ classes with no constructors or destructors. Don't die if the head
+ and tail of the class are in different files.
+
+ * decl.c (grokdeclarator): Don't treat a function pointer field
+ with the same name as the class as a constructor.
+
+Fri Sep 9 13:17:00 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (build_c_cast): Pull constant values out of their
+ variables here.
+
+ * decl.c (duplicate_decls): Only propagate DECL_CHAIN in
+ FUNCTION_DECLs and TEMPLATE_DECLs.
+
+Thu Sep 8 10:07:48 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (duplicate_decls): Propagate DECL_CHAIN in all DECLs that
+ have it.
+
+ * pt.c (unify): REALs and INTEGERs only unify with their own genus.
+ (instantiate_member_templates): Don't muck with DECL_EXTERNAL and
+ TREE_PUBLIC unless -fexternal-templates.
+
+Wed Sep 7 13:17:10 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * pt.c (do_type_instantiation): Call instantiate_member_templates.
+ Deal with specializations.
+ (tsubst): Don't stick the mangled name in DECL_NAME for function
+ instantiations. Don't push them, either.
+
+ * decl2.c (grokfield): Move code for generating the
+ DECL_ASSEMBLER_NAME for static members from here.
+ * method.c (build_static_name): To here.
+ * decl.c (grokvardecl): Call build_static_name.
+ (duplicate_decls): Keep old DECL_ASSEMBLER_NAME.
+
+Mon Sep 5 12:49:18 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * call.c (build_method_call): if -Wsynth, warn when selecting
+ synthesized op= over user-supplied one cfront would select.
+ * decl2.c (lang_decode_option): Handle -Wsynth.
+
+Fri Sep 2 15:11:59 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (finish_enum): Overhaul to fix several bugs.
+ (start_enum): Disable useless code.
+
+Thu Sep 1 16:04:54 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (c_expand_return): Warn about returning a reference to a
+ temporary.
+ (convert_arguments): Increment argument counter when using default
+ arguments, too.
+
+Wed Aug 31 14:29:22 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (finish_decl): If the type of decl is error_mark_node,
+ don't bother trying to do anything.
+
+ * typeck.c (convert_for_initialization): If the rhs contains a
+ constructor call, pretend the lhs type needs to be constructed.
+
+ * init.c (expand_default_init): If we stick the object inside the
+ initializer, mark the initializer used.
+
+Tue Aug 30 13:50:18 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * method.c (build_assign_ref): return *this;
+ (build_assign_ref): Fix base assignment order.
+ (build_copy_constructor): Fix member init order.
+
+Mon Aug 29 13:54:39 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * g++.c (main): Remember to clear out SAW_SPECLANG after we see
+ its argument.
+
+Sat Aug 27 09:36:03 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * method.c (build_copy_constructor): Also copy virtual bases.
+
+Fri Aug 26 17:05:15 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * lex.c (do_pending_inlines): Clear out pending_inlines before doing
+ any synthesis. Also first set deja_vu on all pending_inlines.
+
+ * method.c (build_assign_ref): Use build_member_call to invoke base
+ operator=, rather than build_modify_expr. And use
+ build_reference_type instead of TYPE_REFERENCE_TO.
+ (build_copy_constructor): Use TYPE_NESTED_NAME to identify the
+ basetype.
+
+ * decl2.c (grokfield): Don't complain about undefined local class
+ methods.
+
+ * class.c (finish_struct): Don't try to synthesize methods here.
+ * lex.c (do_pending_inlines): Instead, synthesize them here.
+ (init_lex): Initialize synth_obstack.
+ (cons_up_default_function): Stick synthesis request on
+ pending_inlines.
+
+Fri Aug 26 12:24:14 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * call.c (build_method_call) [PCC_STATIC_STRUCT_RETURN]: Also
+ accept an RTL_EXPR in what we're about to use for the instance,
+ since anything which would end up with pcc_struct_return set
+ inside cplus_expand_expr.
+
+ * cp-tree.h (cons_up_default_function): Note change of prototype.
+
+Thu Aug 25 23:05:30 1994 Gerald Baumgartner <gb@cs.purdue.edu>
+
+ * class.c (finish_struct): Undid change from Aug 21 testing
+ CLASSTYPE_INTERFACE and CLASSTYPE_VTABLE_NEEDS_WRITING.
+ * parse.y (left_curly): Likewise, undid change from Aug 21.
+ * decl.c (xref_tag): Undid change from Aug 21, set
+ CLASSTYPE_INTERFACE correctly, and added comments.
+
+Thu Aug 25 00:36:31 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ Rework approach to synthesized methods; don't go through the parser
+ anymore.
+ * class.c (finish_struct): Use new synthesis approach.
+ * lex.c (cons_up_default_function): Now just creates declaration,
+ not code.
+ (largest_union_member): #if 0 out.
+ (default_assign_ref_body): Likewise.
+ (default_copy_constructor_body): Likewise.
+ * method.c (build_default_constructor): New function to synthesize X().
+ (build_copy_constructor): Synthesize X(X&).
+ (build_assign_ref): Synthesize X::operator=(X&).
+ (build_dtor): Synthesize ~X().
+
+ * error.c (cp_line_of): If we're dealing with an artificial
+ TYPE_DECL, look at the type instead.
+
+Wed Aug 24 11:11:50 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * init.c (sort_member_init): Check warn_reorder.
+ * decl2.c (lang_decode_option): Handle -W{no-,}reorder.
+
+ * cp-tree.h (CLASSTYPE_SOURCE_LINE): New macro.
+ * error.c (cp_line_of): Use CLASSTYPE_SOURCE_LINE for aggregates.
+ * class.c (finish_struct): Set CLASSTYPE_SOURCE_LINE.
+
+Tue Aug 23 09:28:35 1994 Mike Stump <mrs@cygnus.com>
+
+ * error.c (dump_decl): Improve wording, so that error messages
+ dont't read template<, class foo>...
+
+Mon Aug 22 15:30:51 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * parse.y (label_colon): Also match a TYPENAME as a label name,
+ since they may have declared a class by that name but have also
+ tried to have a local label under the same name.
+
+ * pt.c (coerce_template_parms): Call cp_error, not cp_error_at,
+ for the message so they know at what point it was instantiated.
+
+Sun Aug 21 23:07:35 1994 Gerald Baumgartner <gb@cs.purdue.edu>
+
+ * class.c (finish_struct): Move setting of CLASSTYPE_INTERFACE and
+ CLASSTYPE_VTABLE_NEEDS_WRITING for signatures up to left_curly time.
+ * decl.c (xref_tag): Move setting of CLASSTYPE_INTERFACE and
+ CLASSTYPE_VTABLE_NEEDS_WRITING for signatures down to left_curly time.
+ * parse.y (left_curly): New final resting place for setting
+ CLASSTYPE_INTERFACE and CLASSTYPE_VTABLE_NEEDS_WRITING for signatures.
+
+ * class.c (finish_struct): Don't test for function/field name
+ conflicts in signatures, since all the fields are compiler-constructed.
+
+Fri Aug 19 14:04:47 1994 Kung Hsu <kung@mexican.cygnus.com>
+
+ * method.c (build_overload_nested_name): in qualified name
+ mangling, the template with value instantiation will have numeric
+ at end and may mixed with the name length of next nested level.
+ Add a '_' in between.
+ * method.c (build_overload_name): ditto.
+ * method.c (build_overload_identifier): ditto.
+
+Thu Aug 18 16:24:43 1994 Mike Stump <mrs@cygnus.com>
+
+ * error.c (dump_decl): Handle NULL args.
+
+Thu Sep 29 16:15:36 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
+
+ * g++.c: Rework last change so it's done like collect.c (and
+ gcc.c).
+
+Wed Sep 14 10:17:27 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
+
+ * g++.c: Include <sys/errno.h> in case `errno' is a macro
+ as permitted by ANSI C.
+
+Thu Aug 18 12:48:09 1994 Mike Stump <mrs@cygnus.com>
+
+ * class.c (finish_struct): Move setting of CLASSTYPE_INTERFACE and
+ CLASSTYPE_VTABLE_NEEDS_WRITING up to left_curly time.
+ * decl.c (xref_tag): Move setting of CLASSTYPE_INTERFACE and
+ CLASSTYPE_VTABLE_NEEDS_WRITING down to left_curly time.
+ * parse.y (left_curly): New final resting place for setting
+ CLASSTYPE_INTERFACE and CLASSTYPE_VTABLE_NEEDS_WRITING.
+
+Thu Aug 11 11:32:42 1994 H.J. Lu <hjl@nynexst.com>
+
+ * g++.c (main): Only decrement "added" and set "library" to
+ NULL when "library" != NULL.
+
+Sat Aug 13 00:14:52 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (grokdeclarator): Don't set TREE_PUBLIC on a function decl
+ just because its class has a known interface.
+ (decls_match): Deal with new format of template parms.
+
+ * lex.c (cons_up_default_function): Don't play with TREE_PUBLIC and
+ DECL_EXTERNAL here.
+
+Fri Aug 12 01:55:15 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (pushtag): SET_DECL_ARTIFICIAL on gratuitous typedefs.
+ (xref_defn_tag): Likewise.
+ (pushdecl): Only allow artificial typedefs to be shadowed.
+
+ * init.c (emit_base_init): Pass the right binfos to
+ expand_aggr_init_1.
+
+ * class.c (delete_duplicate_fields_1): Make it work right.
+ (finish_struct): Catch function/field name conflict.
+
+ * decl2.c (check_classfn): Pass the function to cp_error, not just
+ the name.
+
+ * init.c (sort_member_init): Warn when order of member initializers
+ does not match order of member declarations.
+ (emit_base_init): Call expand_aggr_init_1 with LOOKUP_PROTECT.
+
+ * error.c (dump_expr): Handle lists of functions.
+
+ * decl.c (start_function): #pragma interface only affects functions
+ that would otherwise be static.
+ (finish_decl): Don't warn about an unused variable if it has both
+ constructor and destructor, since the 'resource allocation is
+ initialization' idiom is relatively common.
+
+ * typeck.c (comp_target_types): Don't handle TEMPLATE_TYPE_PARMs.
+ (comp_target_parms): Likewise.
+ (compparms): Never consider default parms.
+ (common_base_type): Don't choose a virtual baseclass if there is a
+ more derived class in common.
+ (build_conditional_expr): If pedantic, pedwarn about conversion to
+ common base in conditional expr.
+
+ * class.c (instantiate_type): Handle template instantiation better.
+
+ * typeck.c (convert_arguments): Don't try to get tricky and convert
+ to int directly when PROMOTE_PROTOTYPES is set, as it breaks
+ user-defined conversions.
+
+ * lex.c (check_for_missing_semicolon): Also give error at end of
+ file.
+
+ * call.c (build_method_call): Don't promote arrays to pointers here.
+
+ * typeck.c (convert_arguments): Don't require the actual parameter
+ to be of a complete type if the formal parameter is a reference.
+
+Thu Aug 11 15:21:40 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (grokdeclarator): Soften 'static' on member function error
+ to pedwarn.
+
+ * init.c (build_new): Don't automatically save rval.
+ (build_offset_ref): Do field lookup with proper basetype_path.
+
+Thu Aug 11 12:46:54 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * errfn.c (cp_silent): Declare to mark when we should avoid
+ emitting warnings and errors.
+ (cp_error): Check it.
+ (cp_warning): Likewise.
+ (cp_pedwarn): Likewise.
+ (cp_compiler_error): Likewise.
+ (cp_error_at): Likewise.
+ (cp_warning_at): Likewise.
+ (cp_pedwarn_at): Likewise.
+ * call.c (compute_conversion_costs): Set CP_SILENT when we start
+ out, and make sure we turn it off before we leave.
+
+Thu Aug 11 00:02:54 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl2.c (grok_array_decl): Try computing *(A+B) if neither
+ argument is obviously an array.
+
+Wed Aug 10 15:32:04 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (c_expand_start_case): Do cleanups here.
+
+ * parse.y (xcond): Do bool conversion here, too.
+ (simple_stmt, SWITCH case): Don't do cleanups here.
+
+ * decl.c (duplicate_decls): Don't treat builtins that have been
+ explicitly declared specially.
+
+Tue Aug 9 01:16:09 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * tree.c (make_deep_copy): Support copying pointer, reference,
+ function, array, offset and method types.
+
+ * decl.c (init_decl_processing): Mark exit and abort as
+ BUILT_IN_NONANSI so that duplicate_decls is kinder about
+ redeclaration.
+ (duplicate_decls): Don't give two errors for redeclaring a C
+ function with the same parms but a different return type.
+
+ * parse.y (paren_cond_or_null): Do cleanup and bool conversion here.
+ (condition): Instead of here.
+ (simple_stmt, SWITCH case): Also do cleanup here.
+
+ * decl2.c (finish_anon_union): Only break out FIELD_DECLs.
+
+ * call.c (build_method_call): Don't throw away the side effects of
+ the object in a call to a non-existent constructor.
+ * parse.y (primary): Likewise.
+
+ * method.c (build_decl_overload): Oop.
+
+ * decl2.c (lang_decode_option): Deal with flag_no_nonansi_builtin,
+ warn about uselessness of specifying -fansi-overloading.
+
+ * method.c (build_decl_overload): Treat any non-member new with one
+ parameter as __builtin_new.
+
+ * decl.c (init_decl_processing): Setup built-in meanings of exit,
+ _exit and abort.
+
+Mon Aug 8 15:03:30 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * error.c (dump_readonly_or_volatile): Put a space between const and
+ volatile if both apply.
+
+ * init.c (perform_member_init): Clean up after this initialization.
+ (emit_base_init): Clean up after each base init, not after all have
+ been done.
+ (expand_aggr_vbase_init_1): Clean up after this init.
+
+Sun Aug 7 14:55:05 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * call.c (build_method_call): Deal with destroying references.
+
+ * parse.y (condition): Do bool_truthvalue_conversion here.
+ (paren_expr_or_null): And here.
+ (simple_if): Not here.
+ (simple_stmt): Or here.
+
+Sat Aug 6 22:29:45 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y (paren_expr_or_null): Wrap the expression in a
+ CLEANUP_POINT_EXPR.
+ (condition): Likewise.
+
+Sat Aug 6 19:46:37 1994 Rohan Lenard <rjl@easams.com.au>
+
+ * call.c (build_scoped_method_call): Fix error message when
+ destructor call refers to a nonexistent type.
+
+Sat Apr 16 22:43:30 1993 Gerald Baumgartner <gb@cs.purdue.edu>
+
+ * lex.h (rid): Deleted RID_RAISES, it's never used.
+ Moved RID_PUBLIC, RID_PRIVATE, RID_PROTECTED, RID_EXCEPTION,
+ RID_TEMPLATE and RID_SIGNATURE to the end of the enumeration,
+ they don't need to be touched in `grokdeclarator.'
+ (RID_LAST_MODIFIER): Defined macro to be RID_MUTABLE.
+
+ * decl.c (grokdeclarator): Use RID_LAST_MODIFIER instead of
+ RID_MAX as loop limit for finding declaration specifiers.
+
+Sat Apr 3 21:59:07 1993 Gerald Baumgartner <gb@cs.purdue.edu>
+
+ * lex.c (debug_yytranslate): Moved to parse.y since it needs to
+ access `yytname,' which is static in parse.c.
+
+Fri Apr 2 23:36:57 1993 Gerald Baumgarnter <gb@cs.purdue.edu>
+
+ * cp-tree.h (GNU_xref_ref): Fixed typo in extern declaration, it
+ was `GNU_xref_def' instead of `GNU_xref_ref.'
+
+Fri Aug 5 14:20:16 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * pt.c (do_function_instantiation): Don't set TREE_PUBLIC and
+ DECL_EXTERNAL on 'extern' instantiations; wait until EOF to do that.
+ (do_type_instantiation): Likewise.
+
+ * decl2.c (import_export_inline): Decides at EOF what an inline's
+ linkage should be.
+ (finish_file): Call it.
+
+ * decl.c (start_function): Don't rely on the settings of TREE_PUBLIC
+ and DECL_EXTERNAL from do_*_instantiation. Only set
+ DECL_DEFER_OUTPUT on inlines whose linkage might actually change.
+ (finish_function): Use DECL_DEFER_OUTPUT to decide which inlines to
+ mark for later consideration, rather than DECL_FUNCTION_MEMBER_P.
+
+Fri Aug 5 01:12:20 1994 Mike Stump <mrs@cygnus.com>
+
+ * class.c (get_class_offset_1, get_class_offset): New routine to
+ find the offset of the class where a virtual function is defined,
+ from the complete type.
+ * class.c (modify_one_vtable, fixup_vtable_deltas): Use
+ get_class_offset instead of virtual_offset as get_class_offset will
+ always provide the right answer.
+ * tree.c (virtual_offset): Remove. It only ever worked some of the
+ time.
+
+Tue Aug 2 12:44:21 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * call.c (build_method_call): Put back unary_complex_lvalue call
+ that I thought was redundant.
+
+ * typeck.c (c_expand_return): Fix a case I missed before.
+
+Sun Jul 31 17:54:02 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * pt.c (unify): Strip cv-quals from template type arguments (when
+ 'const T*' is matched to 'const char*', that does not mean that T is
+ 'const char').
+
+Fri Jul 29 01:03:06 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * pt.c (do_type_instantiation): Instantiate nested TAGS, not
+ typedefs. Third time's the charm?
+
+ * parse.y (template_parm): Support default template parms.
+ * pt.c (process_template_parm): Likewise.
+ (end_template_parm_list): Likewise.
+ (coerce_template_parms): Likewise.
+ (mangle_class_name_for_template): Likewise.
+ (push_template_decls): Likewise.
+ (unify): Likewise.
+ * method.c (build_overload_identifier): Likewise.
+ * error.c (dump_decl): Likewise.
+
+Wed Jul 27 17:47:00 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * pt.c (do_type_instantiation): Only instantiate nested *classes*.
+
+Tue Jul 26 13:22:40 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * search.c (note_debug_info_needed): Also emit debugging information
+ for the types of fields.
+
+Mon Jul 25 00:34:44 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * pt.c (lookup_template_class): Pass 'template' to
+ coerce_template_parms instead of 'in_decl', since it's a more
+ meaningful context.
+
+ * typeck.c (c_expand_return): Make sure any cleanups for the return
+ expression get run.
+ (build_c_cast): Use CONVERT_EXPR for conversion to void.
+
+ * pt.c (do_type_instantiation): Also instantiate nested types.
+
+ * typeck.c (convert_for_assignment): Don't die when comparing
+ pointers with different levels of indirection.
+
+ * decl.c (grokdeclarator): The sub-call to grokdeclarator for
+ class-local typedefs sets DECL_ARGUMENTS, so we need to clear it
+ out.
+
+ * decl2.c (finish_anon_union): Don't die if the union has no
+ members.
+
+ * decl.c (grokdeclarator): Undo changes to declspecs when we're done
+ so that 'typedef int foo, bar;' will work.
+
+ * decl2.c (finish_file): Don't call expand_aggr_init for
+ non-aggregates.
+
+Mon Jul 25 00:03:10 1994 Teemu Torma <tot@trema.fi>
+
+ * decl.c (finish_function): We can't inline constructors and
+ destructors under some conditions with -fpic, but don't unset
+ DECL_INLINE.
+
+Mon Jul 25 00:03:10 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (build_object_ref): Make sure 'datum' is a valid object.
+
+Sun Jul 24 14:19:31 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * class.c (finish_struct): Don't set DECL_FIELD_BITPOS on
+ non-fields.
+ (finish_struct_methods): Use copy_assignment_arg_p.
+
+ * cvt.c (cp_convert): If expr is an OFFSET_REF, resolve it instead
+ of giving an error.
+
+ * typeck.c (build_binary_op_nodefault): Don't set result_type if we
+ don't know how to compare the operands.
+
+ * decl.c (grokdeclarator): Avoid seg fault when someone uses '__op'
+ as a declarator-id in their program. Like the Linux headers do.
+ Arrgh.
+
+ * tree.c (lvalue_p): Treat calls to functions returning objects by
+ value as lvalues again.
+
+ * typeck.c (build_component_addr): Use convert_force to convert the
+ pointer in case the component type is also a private base class.
+
+ * search.c (get_matching_virtual): Fix bogus warning of overloaded
+ virtual.
+
+ * pt.c (overload_template_name): Set DECL_ARTIFICIAL on the created
+ TYPE_DECL to fix bogus shadowing warnings.
+
+Fri Jul 22 01:15:32 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * init.c (expand_aggr_init_1): const and volatile mismatches do not
+ prevent a TARGET_EXPR from initializing an object directly.
+
+Tue Jul 19 17:55:37 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cvt.c (build_up_reference): Allow building up references to
+ `this', don't warn about making references to artificial variables
+ (like `this').
+
+ * tree.c (lvalue_p): `this' is not an lvalue.
+
+ * call.c (build_method_call): Accept using a typedef name (or
+ template type parameter) for explicit destructor calls.
+
+Thu Jul 14 09:42:23 1994 Mike Stump <mrs@cygnus.com>
+
+ * Version 2.6.0 released.
+
+Wed Jul 13 03:57:54 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * method.c (hack_identifier): Put back old code so lists of
+ non-functions will be handled properly.
+
+ * cp-tree.h (TYPE_NEEDS_CONSTRUCTING): #if 0 out; this macro is now
+ defined in the language-independent tree.h.
+
+ * tree.c (count_functions): Avoid bogus warning when compiling this
+ function.
+
+Mon Jul 11 18:37:20 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (grok_reference_init): Always save the initializer of a
+ reference.
+
+Fri Jul 8 17:41:46 1994 Mike Stump <mrs@cygnus.com>
+
+ * decl.c (cplus_expand_expr_stmt): Wrap statement expressions inside
+ CLEANUP_POINT_EXPRs so that the stack slots can be reused.
+ (disabled for now)
+
+Fri Jul 8 12:59:38 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * method.c (hack_identifier): Fix for new overloading.
+
+ * typeck.c (build_binary_op_nodefault): Don't mess with division by
+ zero.
+
+Fri Jul 8 13:20:28 1994 Gerald Baumgartner <gb@cs.purdue.edu>
+
+ * decl2.c (finish_file): Only call walk_sigtables, if
+ flag_handle_signatures is turned on, don't waste time otherwise.
+
+Fri Jul 8 02:27:41 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (push_overloaded_decl): Don't create overloads of one when
+ shadowing a class type.
+ * typeck.c (build_x_function_call): Complain about overloads of one.
+
+ * decl.c (grokdeclarator): Don't try to treat a char* as a tree.
+ (grokdeclarator): Fix setting of TREE_STATIC.
+ (start_decl): Clear DECL_IN_AGGR_P after calling duplicate_decls.
+
+Thu Jul 7 22:20:46 1994 Gerald Baumgartner <gb@andros.cygnus.com>
+
+ * cp-tree.h (walk_sigtables): Created extern declaration.
+ * decl2.c (walk_sigtables): Created function, patterned after
+ walk_vtables, even though we only need it to write out sigtables.
+ (finish_sigtable_vardecl): Created function.
+ (finish_vtable_vardecl): Changed 0 to NULL_PTR.
+ (finish_file): Call walk_sigtables.
+
+ * sig.c (build_signature_table_constructor): Mark class member
+ function pointed to from signature table entry as addressable.
+
+Thu Jul 7 13:39:37 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (start_decl): Check new decl of static member variable
+ against the declaration in the class here.
+ (grokvardecl): Instead of here.
+
+ * class.c (prepare_fresh_vtable): Call import_export_vtable if not
+ -fvtable-thunks.
+ (build_vtable): Likewise.
+
+ * decl2.c (import_export_vtable): Move logic for deciding the
+ interface of a template class from here.
+ (import_export_template): To here.
+ (finish_vtable_vardecl): Call import_export_template before
+ import_export_vtable.
+
+Wed Jul 6 20:25:48 1994 Mike Stump <mrs@cygnus.com>
+
+ * except.c (init_exception_processing): Setup interim_eh_hook to
+ call lang_interim_eh.
+ * except.c (do_unwind): Propagate throw object value across
+ stack unwinding.
+ * except.c (saved_throw_value): Used to hold the value of the object
+ being thrown. It is always a reference to the real value.
+ * except.c (expand_start_catch_block): Add handling for the
+ value of the exception object.
+ * except.c (expand_start_catch_block): Add handler for the handler,
+ so that throws inside the handler go to the outer block.
+ * except.c (expand_end_catch_block): Likewise.
+ * parse.y (handler_args): Use parm instead, as the other doesn't yet
+ handle references correctly.
+
+Wed Jul 6 17:55:32 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * decl2.c (mark_vtable_entries): If -ftable-thunks, set the
+ vtable entry properly to abort.
+
+Tue Jul 5 14:07:54 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (build_binary_op_nodefault): Downgrade division by zero
+ errors to warnings.
+
+ * call.c (build_overload_call_real): Handle fnname being a list of
+ functions.
+ * typeck.c (build_x_function_call): Pass list of functions to
+ build_overload_call, not just the name.
+ * tree.c (count_functions): Complain when called for invalid
+ argument.
+
+ * decl.c (grokdeclarator): Fix settings of TREE_STATIC, TREE_PUBLIC
+ and DECL_EXTERNAL on static members and initialized const members.
+ * decl2.c (grokfield): Reflect this change.
+
+Fri Jul 1 09:35:51 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y (init): ANSI C++ does not forbid { }.
+
+Thu Jun 30 00:35:22 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl2.c (lang_decode_option): Set warn_nonvdtor along with -Wall.
+ warn_nonvdtor defaults to off.
+
+ * class.c (instantiate_type): Use comptypes rather than relying on
+ types to satisfy ==.
+
+ * decl.c (start_function): Set DECL_DEFER_OUTPUT on all inlines that
+ might be static.
+
+ * tree.c (build_cplus_new): Never build WITH_CLEANUP_EXPRs.
+
+ * decl.c (grok_reference_init): Deal with ADDR_EXPRs of TARGET_EXPRs.
+
+ * cvt.c (cp_convert): Pass 0 to with_cleanup_p arg of
+ build_cplus_new.
+
+Wed Jun 29 22:31:09 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl2.c (finish_file): Maybe consider static inlines multiple
+ times, in case they reference each other.
+
+Tue Jun 28 11:58:38 1994 Gerald Baumgartner <gb@cs.purdue.edu>
+
+ * class.c (finish_struct): Don't `cons_up_default_function's
+ for signatures.
+ (finish_struct): Handle an empty method_vec correctly.
+
+ * decl.c (grokdeclarator): Don't warn about a signature being
+ empty in a signature pointer declaration if we only saw a
+ forward declaration of the signature. Changed `warning's into
+ `cp_warning's.
+
+ * sig.c (build_sigtable): Don't die if a null signature table
+ constructor is returned.
+ (build_signature_pointer_constructor): If the signature table
+ constructor is null, the _sptr field is set to a null pointer
+ and cast to the appropriate type. Make copies of all null
+ pointers so that the type null_pointer_node doesn't get changed.
+ (build_signature_table_constructor): Added comments.
+
+ * sig.c (build_signature_pointer_constructor): Complain if we
+ try to assign to/initialize a signature pointer/reference of
+ an undefined signature.
+
+Mon Jun 27 14:05:16 1994 Gerald Baumgartner <gb@cs.purdue.edu>
+
+ * typeck2.c (store_init_value): Don't be pedantic about
+ non-constant initializers of signature tables/pointers/references.
+
+Fri Jun 24 16:49:41 1994 Gerald Baumgartner <gb@cs.purdue.edu>
+
+ * decl.c (grokdeclarator): If we are grokking an opaque typedef
+ in a signature, don't complain about it begin static.
+
+Wed Jun 29 16:44:45 1994 Mike Stump <mrs@cygnus.com>
+
+ Fixes a problem of the this pointer being wrong in virtual calls to
+ methods that are not overridden in more derived classes.
+
+ * class.c (fixup_vtable_delta): New routine. It will fixup the
+ delta entries in vtables, wheever they need updating.
+ * class.c (finish_struct): Call the new routine for all virtual
+ bases, as they can have different offsets, than those used in base
+ classes that we derive our vtable from.
+
+Tue Jun 28 23:49:28 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (build_binary_op): Use the types before default
+ conversions in the error message.
+
+ * *.c: Use c_build_type_variant instead of build_type_variant where
+ the type might be an array.
+
+ * call.c (build_method_call): Call build_type_variant and
+ build_reference_type in the right order.
+ * decl.c (record_builtin_type): Likewise.
+
+Wed Jun 29 16:58:53 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * call.c (build_method_call): Call build_type_variant and
+ build_reference_type in the right order.
+ * decl.c (record_builtin_type): Likewise.
+
+Tue Jun 28 23:49:28 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (build_binary_op): Use the types before default
+ conversions in the error message.
+
+ * *.c: Use c_build_type_variant instead of build_type_variant where
+ the type might be an array.
+
+Sat Jun 25 11:50:54 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cvt.c (convert_to_reference): Try UDC's before doing the
+ reinterpret_cast thang, though.
+
+Fri Jun 24 01:24:01 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (c_expand_return): Don't USE the return value location
+ after we've expanded the jump.
+
+ * decl2.c (finish_file): Make sure DECL_SAVED_INSNS is not 0 before
+ trying to write out an inline.
+
+ * cvt.c (build_up_reference): Also do address adjustment when the
+ target type uses MI.
+ (convert_to_reference): Try UDCs only after built-in conversions.
+ (build_type_conversion_1): Don't play games with the argument to the
+ method.
+ (build_type_conversion): #if 0 out code for binding to reference.
+
+Thu Jun 23 00:22:28 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl2.c (finish_file): Use TREE_SYMBOL_REFERENCED to decide
+ whether to emit inlines.
+
+ * decl.c (grokdeclarator): Set explicit_int for decls that just
+ specify, say, 'long'.
+
+ * init.c (do_friend): Do overload C functions (or call pushdecl,
+ anyaway).
+
+Wed Jun 22 13:40:49 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cvt.c (build_up_reference): Don't call readonly_error.
+ (convert_to_reference): Propagate const and volatile from expr to
+ its type.
+
+ * tree.c (lvalue_p): Random CALL_EXPRs are not lvalues.
+
+ * cvt.c (build_up_reference): Break out WITH_CLEANUP_EXPR when
+ creating a temporary.
+ (convert_to_reference): Lose excessive and incorrect trickiness.
+ (cp_convert): Call build_cplus_new with with_cleanup_p set.
+
+ * typeck2.c (build_functional_cast): Likewise.
+
+Tue Jun 21 17:38:38 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (grokdeclarator): signed, unsigned, long and short all
+ imply 'int'.
+
+ * decl.c (grokdeclarator): Allow "this is a type" syntax.
+ (grok_reference_init): Simplify and fix.
+
+Sun Jun 19 17:08:48 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (grokdeclarator): pedwarn about a typedef that specifies no
+ type.
+
+Sat Jun 18 04:16:50 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (start_function): Move TREE_PUBLIC and DECL_EXTERNAL
+ tinkering to after call to pushdecl.
+
+Fri Jun 17 14:48:28 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * call.c (build_method_call): Handle destructors for non-aggregate
+ types properly.
+
+Thu Jun 16 16:48:05 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * call.c (build_method_call): Make sure that the name given for the
+ destructor matches the constructor_name of the instance.
+
+ * pt.c (do_function_instantiation): A non-extern instantiation
+ overrides a later extern one.
+ (do_type_instantiation): Likewise.
+
+Wed Jun 15 19:34:54 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * init.c (expand_aggr_init): Use TYPE_MAIN_VARIANT to get the
+ unqualified array type.
+
+ * cp-tree.h (EMPTY_CONSTRUCTOR_P): Tests whether NODE is a
+ CONSTRUCTOR with no elements.
+
+ * decl.c (various): Lose empty_init_node.
+ (finish_decl): Use EMPTY_CONSTRUCTOR_P, do the empty CONSTRUCTOR
+ thing depending on the value of DECL_COMMON instead of
+ flag_conserve_space, do the empty CONSTRUCTOR thing for types that
+ don't have constructors, don't treat a real empty CONSTRUCTOR
+ specially.
+
+ * typeck2.c (process_init_constructor): Don't treat empty_init_node
+ specially.
+
+Wed Jun 15 19:05:25 1994 Mike Stump <mrs@cygnus.com>
+
+ * class.c (override_one_vtable): Don't forget to merge in an old
+ overrider when we wanted to reuse a vtable, but couldn't.
+
+Wed Jun 15 15:03:16 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (start_decl): Put statics in common again.
+
+ * decl.c (grokdeclarator): Return NULL_TREE for an error rather than
+ setting the type to error_mark_node.
+
+ * typeck.c (build_modify_expr): Build up a COMPOUND_EXPR for enum
+ bitfield assignments.
+
+Tue Jun 14 12:23:38 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (grok_op_properties): Const objects can be passed by value.
+
+Mon Jun 13 03:10:59 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl2.c (import_export_vtable): Force implicit instantiations to
+ be interface_only when -fno-implicit-templates.
+
+ * decl.c (duplicate_decls): Redeclaring a class template name is an
+ error.
+
+ * pt.c (end_template_decl): Call GNU_xref_decl for class templates.
+ * xref.c (GNU_xref_decl): Support templates.
+
+Sat Jun 11 17:09:05 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (grok_op_properties): Split out checking for whether this
+ function should suppress the default assignment operator.
+ * decl2.c (grok_function_init): Likewise.
+ (copy_assignment_arg_p): New function do do just that.
+ Now considers virtual assignment operators that take a base as an
+ argument to count as copy assignment operators.
+
+ * search.c (dfs_debug_mark): Lose checks for DWARF_DEBUG and
+ TREE_ASM_WRITTEN, as they are redundant.
+
+ * pt.c (end_template_decl): Don't try to set DECL_CLASS_CONTEXT on a
+ decl that has no LANG_SPECIFIC part.
+ (do_type_instantiation): Force the debugging information for this
+ type to be emitted.
+
+ * decl.c (start_decl): Clear up uses of various types of templates
+ (say sorry for static data members, rather than "invalid template").
+ (expand_static_init): Fix initialization of static data members of
+ template classes.
+
+Fri Jun 10 00:41:19 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (grokdeclarator): Set DECL_CONTEXT on static data members.
+
+ * g++.c (main): Use -xc++-cpp-output for .i files.
+
+ * pt.c (tsubst): Give meaningful error about declaring template for
+ a copy constructor which was not declared in the class template.
+ (do_type_instantiation): Explicit instantiation before the class
+ template is an error.
+ (instantiate_template): Don't die if tsubst returns error_mark_node.
+
+Thu Jun 9 19:04:59 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ Don't synthesize the copy assignment operator if the one in a base
+ class is pure virtual.
+ * cp-tree.h (TYPE_HAS_ABSTRACT_ASSIGN_REF): New macro to indicate
+ whether the type has a pure virtual copy assignment operator.
+ * class.c (finish_base_struct): Don't generate the copy assignment
+ operator if a base class has a pure virtual one.
+ * decl.c (grok_op_properties): Add disabled code to set
+ TYPE_HAS_ABSTRACT_ASSIGN_REF with comment pointing to where it is
+ actually set.
+ * decl2.c (grok_function_init): Set TYPE_HAS_ABSTRACT_ASSIGN_REF.
+
+ * decl2.c (import_export_vtable): Always treat template
+ instantiations as if write_virtuals >= 2, and treat implicit
+ instantiations as external if -fno-implicit-templates.
+ (finish_file): Output all pending inlines if
+ flag_keep_inline_functions.
+
+Wed Jun 8 20:48:02 1994 Mike Stump <mrs@cygnus.com>
+
+ * tree.c (layout_vbasetypes): Align virtual base classes inside
+ complete objects, so that we don't core dump on machines such as
+ SPARCs when we access members that require larger than normal
+ alignments, such as a double. Also, we bump up the total alignment
+ on the complete type, as necessary.
+
+Wed Jun 8 16:18:14 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * gxxint.texi (Free Store): New section with code for examining
+ cookie.
+ (Limitations of g++): Remove operator delete entry, since it is no
+ longer accurate. Fix access control entry.
+
+ * typeck.c (build_unary_op): Pedwarn about taking the address of or
+ incrementing a cast to non-reference type.
+ (build_modify_expr): Use convert instead of convert_force again.
+
+ * search.c (get_base_distance): Use IS_AGGR_TYPE_CODE to check for
+ class type, not == RECORD_TYPE.
+
+ * decl.c (grokdeclarator): Cope with grokfndecl returning NULL_TREE.
+
+ * typeck2.c (report_case_error): #if 0 out.
+ * lex.c (real_yylex): Lose RANGE.
+ * parse.y: Likewise.
+
+Tue Jun 7 18:17:35 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y (simple_stmt, case ranges): Use ELLIPSIS instead of RANGE.
+
+Mon Jun 6 19:39:57 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (build_c_cast): Don't shortcut conversions to the same
+ type. Don't replace consts with their values here, since that's now
+ done in cp_convert.
+
+ * cvt.c (cp_convert): When converting to bool, take
+ integer_zero_node to false_node and all other INTEGER_CSTs to
+ true_node.
+ (build_type_conversion): Don't complain about multiple conversions
+ to float if we're not really converting.
+
+Fri Jun 3 02:10:56 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ Implement 'extern template class A<int>;' syntax for suppressing
+ specific implicit instantiations.
+ * cp-tree.h: Update prototypes for do_*_instantiation.
+ * pt.c (do_pending_expansions): Don't compile 'extern' explicit
+ instantiations.
+ (do_function_instantiation): Set DECL_EXTERNAL on 'extern' explicit
+ instantiations.
+ (do_type_instantiation): Likewise.
+ * parse.y (explicit_instantiation): Support 'extern template class
+ A<int>;' syntax.
+ * decl.c (start_function): Don't modify the settings of TREE_PUBLIC
+ and DECL_EXTERNAL on explicit instantiations.
+
+ * cvt.c (cp_convert): Replace constants with their values before
+ converting.
+ (cp_convert): Consistently use 'e' instead of 'expr'.
+
+Thu Jun 2 03:53:30 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck2.c (build_x_arrow): Resolve OFFSET_REFs first.
+
+Wed Jun 1 18:57:35 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck2.c (digest_init): Handle initializing a pmf with an
+ overloaded method.
+ * typeck.c (build_ptrmemfunc): Handle overloaded methods.
+
+ * decl.c (pushtag): Use build_decl to make TYPE_DECLs.
+ (xref_defn_tag): Likewise.
+ * pt.c (process_template_parm): Likewise.
+ (lookup_template_class): Likewise.
+ (push_template_decls): Likewise.
+ (instantiate_class_template): Likewise.
+ (create_nested_upt): Likewise.
+ * class.c (finish_struct): Don't try to set DECL_CLASS_CONTEXT on
+ TYPE_DECLs.
+
+ * typeck.c (convert_arguments): Make sure type is not NULL before
+ checking its TREE_CODE.
+
+Wed Jun 1 17:40:39 1994 Mike Stump <mrs@cygnus.com>
+
+ * class.c (get_derived_offset): New routine.
+ * class.c (finish_base_struct): Make sure we set BINFO_VTABLE and
+ BINFO_VIRTUALS when we choose a new base class to inherit from.
+ * class.c (modify_one_vtable): Use get_derived_offset to get the
+ offset to the most base class subobject that we derived this binfo
+ from.
+ * class.c (finish_struct): Move code to calculate the
+ DECL_FIELD_BITPOS of the vfield up, as we need might need it for
+ new calls to get_derived_offset in modify_one_vtable.
+
+Wed Jun 1 16:50:59 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * init.c (build_member_call): Use build_pointer_type instead of
+ TYPE_POINTER_TO.
+
+Wed Jun 1 11:11:15 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * decl.c (grokdeclarator): Make sure we have a DNAME set before we
+ try to use it in an error.
+
+Wed Jun 1 09:48:49 1994 Mike Stump <mrs@cygnus.com>
+
+ * typeck.c (convert_arguments, convert_for_initialization): Don't
+ strip NOP_EXPRs, when we are converting to a reference.
+
+Wed Jun 1 01:11:38 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (build_modify_expr): Don't dereference references when
+ initializing them.
+
+ * decl2.c (grokfield): Don't check for grokdeclarator returning
+ error_mark_node any more.
+
+ * decl.c (grokfndecl): Return NULL_TREE instead of error_mark_node.
+ (start_method): Return void_type_node instead of error_mark_node.
+
+ * typeck.c (build_modify_expr): Resolve offset refs earlier.
+
+Tue May 31 16:06:58 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * call.c (build_method_call): Resolve OFFSET_REFs in the object.
+
+ * typeck.c (build_modify_expr): Dereference references before trying
+ to assign to them.
+
+ * call.c (build_method_call): Don't confuse type conversion
+ operators with constructors.
+ * typeck2.c (build_functional_cast): Just call build_c_cast if there
+ was only one parameter.
+ * method.c (build_typename_overload): Don't set
+ IDENTIFIER_GLOBAL_VALUE on these identifiers.
+ * decl.c (grok_op_properties): Warn about defining a type conversion
+ operator that converts to a base class (or reference to it).
+ * cvt.c (cp_convert): Don't try to use a type conversion operator
+ when converting to a base class.
+ (build_type_conversion_1): Don't call constructor_name_full on an
+ identifier.
+ * cp-tree.h (DERIVED_FROM_P): Should be self-explanatory.
+
+ * decl.c (start_decl): Don't complain that error_mark_node is an
+ incomplete type.
+ (finish_decl): Check for type == error_mark_node.
+
+Mon May 30 23:38:55 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (start_function): Set DECL_DEFER_OUTPUT on implicit
+ instantiations and inline members.
+
+ * spew.c (yylex): Set looking_for_template if the next token is a '<'.
+
+ * lex.h: Declare looking_for_template.
+
+ * decl.c (lookup_name_real): Use looking_for_template to arbitrate
+ between type and template interpretations of an identifier.
+
+Sat May 28 04:07:40 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * pt.c (instantiate_template): Zero out p if we found a
+ specialization.
+
+ * decl.c (grokdeclarator): Elucidate warning.
+ (grokdeclarator): If pedantic AND -ansi, complain about long long.
+
+ Make explicit instantiation work reasonably. It is now appropriate
+ to deprecate the use of -fexternal-templates.
+ * pt.c (instantiate_template): Set DECL_TEMPLATE_SPECIALIZATION or
+ DECL_IMPLICIT_INSTANTIATION on fndecl as appropriate.
+ (end_template_instantiation): Reflect changes in USE_TEMPLATE
+ semantics.
+ (do_pending_expansions): if (!flag_implicit_templates) DECIDE(0);
+ (do_function_instantiation): Don't set EXPLICIT_INST if
+ flag_external_templates is set. Do set TREE_PUBLIC and DECL_EXTERN
+ appropriately otherwise.
+ (do_type_instantiation): Set interface info for class. Set
+ TREE_PUBLIC and DECL_EXTERN for methods. Do none of this if
+ flag_external_templates is set.
+ * parse.y: Reflect changes in USE_TEMPLATE semantics.
+ * decl2.c: New flag flag_implicit_templates determines whether or
+ not implicit instantiations get emitted. This flag currently
+ defaults to true, and must be true for -fexternal-templates to work.
+ (finish_file): Consider flag_implement_inlines when
+ setting DECL_EXTERNAL. Consider flag_implicit_templates when
+ deciding whether or not to emit a static copy.
+ * decl.c (start_function): Set TREE_PUBLIC and DECL_EXTERNAL
+ properly for template instantiations.
+ (start_method): Set DECL_IMPLICIT_INSTANTIATION on methods of a
+ template class.
+ * cp-tree.h (CLASSTYPE_USE_TEMPLATE): Change semantics.
+ (DECL_USE_TEMPLATE): Parallel macro for FUNCTION and VAR_DECLs.
+ (various others): Accessor macros for the above.
+
+Fri May 27 13:57:40 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (build_binary_op_nodefault): Division by constant zero is
+ an error.
+
+Fri May 27 13:50:15 1994 Mike Stump <mrs@cygnus.com>
+
+ * class.c (override_one_vtable): Don't modify things we don't own.
+
+Fri May 27 01:42:58 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (finish_decl): Don't postpone processing the initializer of
+ a decl with DECL_EXTERNAL set, and do call rest_of_compilation for a
+ PUBLIC const at toplevel.
+ (grokdeclarator): pedwarn about initializing non-const or
+ non-integral statics in the class body.
+
+ * decl.c (pushtag): Don't try to set DECL_CLASS_CONTEXT on a
+ TYPE_DECL.
+
+ * call.c (convert_harshness): Dereference reference on rhs before
+ proceeding, properly grok passing const things to non-const
+ references.
+
+ * typeck.c (build_unary_op): Soften error about taking the address
+ of main() to a pedwarn.
+
+ * lex.c (default_copy_constructor_body): Unambiguously specify base
+ classes (i.e. A((const class ::A&)_ctor_arg) ).
+ (default_assign_ref_body): Likewise.
+
+Thu May 26 13:13:55 1994 Gerald Baumgartner <gb@mexican.cygnus.com>
+
+ * decl2.c (grokfield): Don't complain about local signature
+ method declaration without definition.
+
+ * call.c (convert_harshness): If `type' is a signature pointer
+ and `parmtype' is a pointer to a signature, just return 0. We
+ don't really convert in this case; it's a result of making the
+ `this' parameter of a signature method a signature pointer.
+
+ * call.c (build_method_call): Distinguish calling the default copy
+ constructor of a signature pointer/reference from a signature
+ member function call.
+
+Thu May 26 12:56:25 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl2.c (grokfield): Don't set TREE_PUBLIC on member function
+ declarations.
+
+ * decl.c (duplicate_decls): A previous function declaration as
+ static overrides a subsequent non-static definition.
+ (grokdeclarator): Don't set TREE_PUBLIC on inline method
+ declarations.
+
+Wed May 25 14:36:38 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (grokdeclarator): Handle initialization of static const
+ members.
+ (finish_decl): Likewise.
+
+ * decl2.c (grokfield): Allow initialization of static const members
+ even when pedantic.
+
+ * decl2.c (grokfield): Deal with grokdeclarator returning
+ error_mark_node.
+
+ * decl.c (grok_ctor_properties): Return 0 for A(A) constructor.
+ (grokfndecl): Check the return value of grok_ctor_properties.
+ (start_method): Likewise.
+
+ * parse.y (absdcl): Expand type_quals inline.
+
+Tue May 24 19:10:32 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (pushtag): Use IS_AGGR_TYPE rather than checking for a
+ RECORD_TYPE.
+
+Tue May 24 18:09:16 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * cp-tree.h (VTABLE_NAME_FORMAT): If flag_vtable_thunks,
+ always use "__vt_%s".
+ * decl2.c (finish_vtable_vardecl): Don't consider abstract virtuals
+ when looking for a "sentinal" method (to decide on emitting vtables).
+ * decl2.c (finish_file): Scan all decls for thunks that need
+ to be emitted.
+ * decl2.c (finish_vtable_vardecl): Don't bother calling emit_thunk.
+ * method.c (make_thunk): Use a more meaningful label. If there
+ exists a matching top-level THUNK_DECL re-use it; otherwise
+ create a new THUNK_DECL (and declare it).
+ * method.c (emit_thunk): Make thunk external/public depending
+ on the underlying method.
+
+Tue May 24 00:22:04 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * pt.c (tsubst): Use lookup_name_nonclass to find guiding decls, not
+ lookup_name.
+
+ * call.c (build_overload_call_real): Don't immediately pick a
+ function which matches perfectly.
+
+ * decl.c (grokdeclarator): Use c_build_type_variant for arrays.
+ (grokdeclarator): Warn about, and throw away, cv-quals attached to a
+ reference (like 'int &const j').
+
+ * typeck.c (convert_arguments): Don't mess with i for methods.
+ * call.c (build_method_call): Pass the function decl to
+ convert_arguments.
+
+ * typeck.c (comp_ptr_ttypes_real): New function. Implements the
+ checking for which multi-level pointer conversions are allowed.
+ (comp_target_types): Call it.
+ (convert_for_assignment): Check const parity on the ultimate target
+ type, too. And make those warnings pedwarns.
+
+Mon May 23 14:11:24 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * error.c (dump_char): Use TARGET_* for character constants.
+
+Mon May 23 13:03:03 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * tree.c (debug_no_list_hash): Make static.
+
+ * decl.c (decls_match): Say the types don't match if newdecl ends up
+ with a null type, after we've checked if olddecl does.
+ (pushdecl): Check if the decls themselves match before looking for
+ an extern redeclared as static, to avoid inappropriate and incorrect
+ warnings.
+
+Fri May 20 14:04:34 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (grokdeclarator): Make warning about duplicate short, etc.
+ a pedwarn.
+
+ * typeck.c (build_c_cast): Casting to function or method type is an
+ error.
+
+ * class.c (finish_struct): Make warning for anonymous class with no
+ instances a pedwarn.
+
+ * Makefile.in (stamp-parse): Expect a s/r conflict.
+
+ * typeck.c (build_modify_expr): pedwarn about using a non-lvalue
+ cast as an lvalue.
+
+Thu May 19 12:08:48 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cvt.c (type_promotes_to): Make sure bool promotes to int rather
+ than unsigned on platforms where sizeof(char)==sizeof(int).
+
+Wed May 18 14:27:06 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (build_c_cast): Tack on a NOP_EXPR when casting to
+ another variant.
+ (build_modify_expr): Don't strip NOP_EXPRs, and don't get tricky
+ and treat them as lvalues.
+
+ * decl.c (shadow_tag): Do complain about forward declarations of
+ enums and empty declarations.
+ * parse.y: Don't complain about forward declarations of enums and
+ empty declarations.
+
+ * typeck.c (convert_for_assignment): Complain about changing
+ the signedness of a pointer's target type.
+
+ * parse.y (stmt): Move duplicated code for checking case values from
+ here.
+ * decl2.c (check_cp_case_value): To here. And add a call to
+ constant_expression_warning.
+
+ * typeck.c (convert_for_assignment): Don't complain about assigning
+ a negative value to bool.
+
+ * decl.c (init_decl_processing): Make bool unsigned.
+
+ * class.c (finish_struct): Allow bool bitfields.
+
+Wed May 18 12:35:27 1994 Ian Lance Taylor <ian@tweedledumb.cygnus.com>
+
+ * Make-lang.in (c++.install-man): Get g++.1 from $(srcdir)/cp.
+
+Wed May 18 03:28:35 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cvt.c (build_type_conversion): Lose special handling of
+ truthvalues.
+
+ * search.c (dfs_pushdecls): Improve shadowing warning.
+
+Tue May 17 13:34:46 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * init.c (build_delete): Throw away const and volatile on `this'.
+
+ * decl.c (finish_enum): Put the constants in TYPE_VALUES again,
+ rather than the enumerators.
+ (pushtag): s/cdecl/c_decl/g
+
+Mon May 16 23:04:01 1994 Stephen R. van den Berg <berg@pool.informatik.rwth-aachen.de>
+
+ * cp/typeck.c (common_type): Attribute merging.
+ (comp_types): Utilise COMP_TYPE_ATTRIBUTES macro.
+
+ * cp/parse.y: Revamp attribute parsing.
+
+Mon May 16 01:40:34 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (shadow_tag): Also check for inappropriate use of auto and
+ register.
+
+ * method.c (build_overload_name): Clarify that the illegal case is a
+ pointer or reference to array of unknown bound.
+
+ * error.c (dump_type_prefix): Print references to arrays properly.
+
+ * typeck.c (various): Be more helpful in pointer
+ comparison diagnostics.
+
+ * tree.c (lvalue_p): MODIFY_EXPRs are lvalues again. Isn't this
+ fun?
+
+ * parse.y: Also catch an error after valid stmts.
+
+ * search.c (dfs_init_vbase_pointers): Don't abort because `this' is
+ const.
+
+ * typeck.c (convert_for_initialization): If call to
+ convert_to_reference generated a diagnostic, print out the parm
+ number and function decl if any.
+
+ * errfn.c (cp_thing): Check atarg1 to determine whether or not we're
+ specifying a line, not atarg.
+
+ * tree.c (build_cplus_method_type): Always make `this' const.
+
+ * decl2.c (grokclassfn): If -fthis-is-variable and this function is
+ a constructor or destructor, make `this' non-const.
+
+ * typeck.c (build_modify_expr): Don't warn specially about
+ assignment to `this' here anymore, since it will be caught by the
+ usual machinery.
+
+ * various: Disallow specific GNU extensions (variable-size arrays,
+ etc.) when flag_ansi is set, not necessarily when pedantic is set,
+ so that people can compile with -pedantic-errors for tighter const
+ checking and such without losing desirable extensions.
+
+ * typeck2.c (build_functional_cast): Call build_method_call with
+ LOOKUP_PROTECT.
+ (process_init_constructor): Only process FIELD_DECLs.
+
+ * decl.c (finish_decl): Also force static consts with no explicit
+ initializer that need constructing into the data segment.
+
+ * init.c (build_delete): Undo last patch, as it interferes with
+ automatic cleanups.
+
+Sat May 14 01:59:31 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * call.c, class.h, cp-tree.h, cvt.c, decl2.c: Lose old overloading
+ code.
+
+ * init.c (build_delete): pedwarn about using plain delete to delete
+ an array.
+
+Fri May 13 16:45:07 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (comp_target_types): Be more helpful in contravariance
+ warnings, and make them pedwarns.
+
+ * decl.c (grokdeclarator): Use decl_context to decide whether or not
+ this is an access declaration.
+
+ * class.c (finish_struct_bits): Set TYPE_HAS_INT_CONVERSION if it
+ has a conversion to enum or bool, too.
+
+Fri May 13 16:31:27 1994 Mike Stump <mrs@cygnus.com>
+
+ * method.c (emit_thunk): Make declaration for
+ current_call_is_indirect local (needed for hppa).
+
+Fri May 13 16:16:37 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * pt.c (uses_template_parms): Grok BOOLEAN_TYPE.
+ (tsubst): Likewise.
+
+Fri May 13 16:23:32 1994 Mike Stump <mrs@cygnus.com>
+
+ * pt.c (tsubst): If there is already a function for this expansion,
+ use it.
+ * pt.c (instantiate_template): Likewise.
+
+Fri May 13 10:30:42 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * parse.y (implicitly_scoped_stmt, simple_stmt case): Use
+ kept_level_p for MARK_ENDS argument to expand_end_bindings, to avoid
+ generating debug info for unemitted symbols on some systems.
+
+ * cp-tree.h (build_static_cast, build_reinterpret_cast,
+ build_const_cast): Add declarations.
+
+Fri May 13 09:50:31 1994 Mike Stump <mrs@cygnus.com>
+
+ * search.c (expand_indirect_vtbls_init): Fix breakage from Apr 27
+ fix. We now try get_binfo, and if that doesn't find what we want,
+ we go back to the old method, which still sometimes fails.
+
+Fri May 13 01:43:18 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y (initdcl): Call cplus_decl_attributes on the right
+ variable.
+ * decl2.c (cplus_decl_attributes): Don't call decl_attributes for
+ void_type_node.
+
+ * typeck.c (build_binary_op_nodefault): Change result_type for
+ comparison ops to bool.
+ (build_binary_op): Convert args of && and || to bool.
+ * cvt.c (build_default_binary_type_conversion): Convert args of &&
+ and || to bool.
+ (build_default_unary_type_conversion): Convert arg of ! to bool.
+ (type_promotes_to): bool promotes to int.
+
+Fri May 13 01:43:18 1994 Mike Stump <mrs@cygnus.com>
+
+ Implement the new builtin `bool' type.
+ * typeck.c (build_binary_op_nodefault): Convert args of && and || to
+ bool.
+ (build_unary_op): Convert arg of ! to bool.
+ * parse.y: Know true and false. Use bool_truthvalue_conversion.
+ * method.c (build_overload_value): Know bool.
+ (build_overload_name): Likewise.
+ * lex.c (init_lex): Set up RID_BOOL.
+ * gxx.gperf: Add bool, true, false.
+ * error.c (*): Know bool.
+ * decl.c (init_decl_processing): Set up bool, true, false.
+ * cvt.c (cp_convert): Handle conversion to bool.
+ (build_type_conversion): Likewise.
+ * *.c: Accept bool where integers and enums are accepted (use
+ INTEGRAL_CODE_P macro).
+
+Thu May 12 19:13:54 1994 Richard Earnshaw <rwe11@cl.cam.ac.uk>
+
+ * g++.c: Use #ifdef for __MSDOS__, not #if.
+
+Thu May 12 18:05:18 1994 Mike Stump <mrs@cygnus.com>
+
+ * decl2.c (lang_f_options): Handle -fshort-temps. -fshort-temps
+ gives old behavior , and destroys temporaries earlier. Default
+ behavior now conforms to the ANSI working paper.
+
+Thu May 12 14:45:35 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (build_modify_expr): Understand MODIFY_EXPR as an lvalue.
+ Use convert_force to convert the result of a recursive call when we
+ are dealing with a NOP_EXPR. Don't automatically wrap MODIFY_EXPRs
+ in COMPOUND_EXPRs any more.
+ (various): Lose pedantic_lvalue_warning.
+ (unary_complex_lvalue): Understand MODIFY_EXPR.
+
+ * cvt.c (convert_to_reference): Allow DECL to be error_mark_node if
+ we don't know what we're initializing.
+
+Wed May 11 01:59:36 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cvt.c (convert_to_reference): Modify to use convtype parameter.
+ Only create temporaries when initializing a reference, not when
+ casting.
+ (cp_convert): New main function.
+ (convert): Call cp_convert.
+ * cvt.c, decl.c, typeck.c: Fix calls to convert_to_reference.
+ * cp-tree.h (CONV_*): New constants used by conversion code for
+ selecting conversions to perform.
+
+ * tree.c (lvalue_p): MODIFY_EXPRs are no longer lvalues.
+
+ * typeck.c (build_{static,reinterpret,const_cast): Stubs that just
+ call build_c_cast.
+ * parse.y: Add {static,reinterpret,const}_cast.
+ * gxx.gperf: Likewise.
+
+ * typeck.c (common_type): Allow methods with basetypes of different
+ UPTs.
+ (comptypes): Deal with UPTs.
+ (build_modify_expr): Wrap all MODIFY_EXPRs in a COMPOUND_EXPR.
+
+ * pt.c (end_template_decl): Check for multiple definitions of member
+ templates.
+
+ * call.c (build_method_call): Complain about calling an abstract
+ virtual from a constructor.
+
+ * typeck.c (pointer_int_sum): Check for the integer operand being 0
+ after checking the validity of the pointer operand.
+
+ * typeck2.c (digest_init): Pedwarn about string initializer being
+ too long.
+
+Tue May 10 12:10:28 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (push_overloaded_decl): Only throw away a builtin if the
+ decl in question is the artificial one.
+
+ * parse.y (simple_stmt, switch): Use implicitly_scoped_stmt because
+ expand_{start,end}_case cannot happen in the middle of a block.
+
+ * cvt.c (build_type_conversion_1): Use convert again.
+
+Tue May 10 11:52:04 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * typeck2.c (digest_init): Make sure we check for signed and
+ unsigned chars as well when warning about string initializers.
+
+ * init.c (emit_base_init): Check if there's a DECL_NAME on the
+ member before trying to do an initialization for it.
+
+Tue May 10 11:34:37 1994 Mike Stump <mrs@cygnus.com>
+
+ * except.c: Don't do anything useful when cross compiling.
+
+Tue May 10 03:04:13 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (duplicate_decls): Fix up handling of builtins yet again.
+ (push_overloaded_decl): Likewise.
+
+ * cvt.c (convert): Don't look for void type conversion.
+
+Mon May 9 18:05:41 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * init.c (do_friend): Only do a pushdecl for friends, not
+ pushdecl_top_level.
+
+Mon May 9 13:36:34 1994 Jim Wilson <wilson@sphagnum.cygnus.com>
+
+ * decl.c (lookup_name_current_level): Put empty statement after
+ the label OUT to make the code valid C.
+
+Mon May 9 12:20:57 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (build_binary_op_nodefault): Only complain about
+ comparing void * and a function pointer if void * is smaller.
+
+Sun May 8 01:29:13 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (lookup_name_current_level): Move through temporary binding
+ levels.
+
+ * parse.y (already_scoped_stmt): Revive.
+ (simple_stmt): Use it again.
+
+ * decl.c (poplevel): Always call poplevel recursively if we're
+ dealing with a temporary binding level.
+
+Sat May 7 10:52:28 1994 Mike Stump <mrs@cygnus.com>
+
+ * decl.c (finish_decl): Make sure we run cleanups for initial values
+ of decls. Cures memory leak.
+ * decl.c (expand_static_init): Likewise for static variables.
+ * decl2.c (finish_file): Likewise for globals.
+
+Sat May 7 03:57:44 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (commonparms): Don't complain about redefining default
+ args.
+
+ * decl.c (duplicate_decls): Don't complain twice about conflicting
+ function decls.
+ (decls_match): Don't look at default args.
+ (redeclaration_error_message): Complain about redefining default
+ args.
+
+ * call.c (build_overload_call_real): Also deal with guiding
+ declarations coming BEFORE the template decl.
+
+ * pt.c (unify): Allow different parms to have different
+ cv-qualifiers.
+ (unify): Allow trivial conversions on non-template parms.
+
+Fri May 6 03:53:23 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * pt.c (tsubst): Support OFFSET_TYPEs.
+ (unify): Likewise.
+
+ * decl2.c (finish_decl_parsing): Call push_nested_class with a type.
+
+ * init.c (build_offset_ref): Fix error message.
+ * search.c (lookup_field): Likewise.
+
+ * call.c (build_scoped_method_call): Pass binfo to
+ build_method_call.
+ * typeck.c (build_object_ref): Likewise.
+
+ * typeck2.c (binfo_or_else): Don't return a _TYPE.
+
+ * class.c (finish_struct): Don't complain about re-use of inherited
+ names or shadowing of type decls.
+ * decl.c (pushdecl_class_level): Likewise.
+
+ * decl.c (finish_enum): Set the type of all the enums.
+
+ * class.c (finish_struct): Don't get confused by access decls.
+
+ * cp-tree.h (TYPE_MAIN_DECL): New macro to get the _DECL for a
+ _TYPE. You can stop using TYPE_NAME for that now.
+
+ * parse.y: Lose doing_explicit (check $0 instead).
+ * gxx.gperf: 'template' now has a RID.
+ * lex.h (rid): Likewise.
+ * lex.c (init_lex): Set up the RID for 'template'.
+
+ * parse.y (type_specifier_seq): typed_typespecs or
+ nonempty_type_quals. Use it.
+ (handler_args): Fix bogus syntax.
+ (raise_identifier{,s}, optional_identifier): Lose.
+ * except.c (expand_start_catch_block): Use grokdeclarator to parse
+ the catch variable.
+ (init_exception_processing): The second argument to
+ __throw_type_match is ptr_type_node.
+
+ Fri May 6 07:18:54 1994 Chip Salzenberg <chip@fin.uucp>
+
+ [ change propagated from c-decl.c of snapshot 940429 ]
+ * cp/decl.c (finish_decl): Setting asmspec_tree should not
+ zero out the old RTL.
+
+Fri May 6 01:25:38 1994 Mike Stump <mrs@cygnus.com>
+
+ Add alpha exception handling support to the compiler.
+ Quick and dirty backend in except.c.
+
+ * cp/*: Remove most remnants of old exception handling support.
+ * decl.c (finish_function): Call expand_exception_blocks to put
+ the exception hanlding blocks at the end of the function.
+ * dec.c (hack_incomplete_structures): Make sure expand_decl_cleanup
+ comes after expand_decl_init.
+ * except.c: Reimplementation.
+ * expr.c (cplus_expand_expr): Handle THROW_EXPRs.
+ * lex.c (init_lex): Always have catch, try and throw be reserved
+ words, so that we may always parse exception handling.
+ * parse.y: Cleanup to support new interface into exception handling.
+ * tree.def (THROW_EXPR): Add.
+
+Thu May 5 17:35:37 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y (simple_stmt, for loops): Use implicitly_scoped_stmt.
+ (various): Lose .kindof_pushlevel and partially_scoped_stmt.
+
+Thu May 5 16:17:27 1994 Kung Hsu <kung@mexican.cygnus.com>
+
+ * parse.y (already_scoped_stmt): move expand_end_binding() to
+ fix the unmatched LBB/LBE in stabs.
+
+Thu May 5 14:36:17 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (set_nested_typename): Set TREE_MANGLED on the new
+ identifiers.
+ (pushdecl): Check TREE_MANGLED.
+ (xref_tag): Likewise.
+ * cp-tree.h (TREE_MANGLED): This identifier is a
+ DECL_NESTED_TYPENAME (named to allow for future use to denote
+ mangled function names as well).
+
+ Implement inconsistency checking specified in [class.scope0].
+ * decl.c (lookup_name_real): Don't set ICV here after all.
+ (finish_enum): Also set the type of the enumerators themselves.
+ (build_enumerator): Put the CONST_DECL in the list instead of its
+ initial value.
+ (pushdecl_class_level): Check inconsistent use of a name in the
+ class body.
+ * class.c (finish_struct): Check inconsistent use of a name in the
+ class body. Don't set DECL_CONTEXT on types here anymore.
+ * parse.y (qualified_type_name): Note that the identifier has now
+ been used (as a type) in the class body.
+ * lex.c (do_identifier): Note that the identifier has now been used
+ (as a constant) in the class body.
+ * error.c (dump_decl): Print type and enum decls better.
+
+Thu May 5 09:35:35 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * typeck.c (build_modify_expr): Warn about assignment to `this'.
+
+Wed May 4 15:55:49 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * init.c (build_delete): Use the global operator delete when
+ requested.
+
+ * decl.c (lookup_name_real): If we find the type we're looking in a
+ base class while defining a class, set IDENTIFIER_CLASS_VALUE for
+ the type.
+
+ * class.c (finish_struct): Remove a couple of dependencies on
+ language linkage.
+
+ * decl.c (pushtag): Classes do nest in extern "C" blocks.
+ (pushdecl): Only set DECL_NESTED_TYPENAME on the canonical one for
+ the type.
+ (pushtag): Remove another dependency on the language linkage.
+
+ * lex.c (cons_up_default_function): Don't set DECL_CLASS_CONTEXT to
+ a const-qualified type.
+
+ * decl.c (push_overloaded_decl): Throw away built-in decls here.
+ (duplicate_decls): Instead of here.
+
+Wed May 4 15:27:40 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * typeck.c (get_member_function_from_ptrfunc): Do The Right
+ Thing (I hope) if we're using thunks.
+
+Wed May 4 13:52:38 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y (specialization): aggr template_type_name ';'.
+ (named_class_head_sans_basetype): Use it.
+ (explicit_instantiation): Likewise.
+ (tmpl.2): Revert.
+
+ * cvt.c (build_type_conversion_1): Use convert_for_initialization,
+ rather than convert, to do conversions after the UDC.
+
+ * cp-tree.h (SHARED_MEMBER_P): This member is shared between all
+ instances of the class.
+
+ * search.c (lookup_field): If the entity found by two routes is the
+ same, it's not ambiguous.
+
+Wed May 4 12:10:00 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * decl.c (lookup_name_real): Check for a NULL TREE_VALUE,
+ to prevent the compiler from crashing ...
+
+Wed May 4 11:19:45 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * call.c (build_method_call): If we don't have an object, check
+ basetype_path to figure out where to look up the function.
+
+ * typeck.c (convert_for_initialization): Pass TYPE_BINFO (type) to
+ build_method_call in case exp is NULL_TREE.
+
+Tue May 3 16:02:53 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ Give a vtable entries a unique named type, for the sake of gdb.
+ * class.c (build_vtable_entry): The addres of a thunk now has
+ type vtable_entry_type, not ptr_type_node.
+ * method.c (make_thunk): Fix type of THUNK_DECL.
+ * class.c (add_virtual_function, override_one_vtable): Use
+ vfunc_ptr_type_node, instead of ptr_type_node.
+ * cp-tree.h (vfunc_ptr_type_node): New macro.
+ * decl.c (init_decl_processing): Make vtable_entry_type
+ be a unique type of pointer to a unique function type.
+
+Tue May 3 09:20:44 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y (do_explicit): Sets doing_explicit to 1.
+ (explicit_instantiation): Use do_explicit rather than TEMPLATE
+ directly, add "do_explicit error" rule.
+ (datadef): Set doing_explicit to 0 after an explicit instantiation.
+ (tmpl.2): Don't instantiate if we see a ';' unless we're doing an
+ explicit instantiation.
+ (named_class_head_sans_basetype): Remove aggr template_type_name
+ ';' again.
+
+Mon May 2 23:17:21 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * search.c (lookup_nested_tag): Lose.
+
+ * decl2.c (grokfield): Set DECL_CONTEXT on TYPE_DECLs.
+ (lookup_name_nonclass): Lose.
+
+ * decl.c (poplevel_class): Add force parameter.
+ (lookup_name_real): Fix handling of explicit scoping which specifies
+ a class currently being defined. Add 'nonclass' argument.
+ (lookup_name, lookup_name_nonclass): Shells for lookup_name_real.
+
+ * class.c (finish_struct): Don't unset IDENTIFIER_CLASS_VALUEs here.
+ (popclass): Force clearing of IDENTIFIER_CLASS_VALUEs if we're being
+ called from finish_struct.
+
+Mon May 2 19:06:21 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * decl.c (init_decl_processing), cp-tree.h: Removed memptr_type.
+ (It seeems redundant, given build_ptrmemfunc_type.)
+ * typeck.c (get_member_function_from_ptrfunc), gc.c (build_headof,
+ build_classof): Use vtable_entry_type instead of memptr_type.
+ * method.c (emit_thunk): Call poplevel with functionbody==0
+ to prevent DECL_INITIAL being set to a BLOCK.
+
+Mon May 2 15:02:11 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y (named_class_head_sans_basetype): Add "aggr
+ template_type_name ';'" rule for forward declaration of
+ specializations.
+
+Mon May 2 15:02:11 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * class.c (instantiate_type): Deal with pmf's.
+
+ * Make-lang.in (cc1plus): Don't depend on OBJS or BC_OBJS, since
+ stamp-objlist does.
+
+ * Makefile.in (../cc1plus): Depend on OBJDEPS.
+ (OBJDEPS): Dependency version of OBJS.
+
+Mon May 2 12:51:31 1994 Kung Hsu <kung@mexican.cygnus.com>
+
+ * search.c (dfs_debug_mark): unmark TYPE_DECL_SUPPRESS_DEBUG, not
+ DECL_IGNORED_P.
+
+Fri Apr 29 12:29:56 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * class.c (finish_struct): Clear out memory of local tags. And
+ typedefs.
+
+ * decl2.c (grokclassfn): Don't set DECL_CONTEXT to a cv-qualified
+ type.
+ * search.c (get_matching_virtual): Be more helpful in error message.
+
+ * *: Use DECL_ARTIFICIAL (renamed from DECL_SYNTHESIZED).
+
+ * lex.c (default_assign_ref_body): Expect TYPE_NESTED_NAME to work.
+ (default_copy_constructor_body): Likewise.
+
+ * class.c (finish_struct): Don't gratuitously create multiple decls
+ for nested classes.
+
+Thu Apr 28 23:39:38 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ Avoid clobbering the arg types of other functions when reverting
+ static member functions.
+ * decl.c (revert_static_member_fn): Rearrange arguments, don't
+ require values for 'fn' and 'argtypes', add warning to comment
+ above.
+ (decls_match): Rearrange arguments in call to rsmf.
+ (grok_op_properties): Don't pass values for fn and argtypes.
+ * pt.c (instantiate_template): Don't pass values for fn and argtypes.
+
+Thu Apr 28 16:29:11 1994 Doug Evans <dje@canuck.cygnus.com>
+
+ * Make-lang.in (cc1plus): Depend on stamp-objlist.
+ * Makefile.in (BC_OBJS): Delete.
+ (OBJS): Cat ../stamp-objlist to get language independent files.
+ Include ../c-common.o.
+ (../cc1plus): Delete reference to BC_OBJS.
+
+Thu Apr 28 02:12:08 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * search.c (compute_access): No really, deal with static members
+ properly. Would I lie to you?
+
+ Implement lexical hiding of function declarations.
+ * pt.c (tsubst): Use lookup_name to look for function decls to guide
+ instantiation.
+ * method.c (build_opfncall): Use lookup_name_nonclass to look for
+ non-member functions.
+ * init.c (do_friend): Use lookup_name_nonclass to look for
+ functions.
+ * error.c (ident_fndecl): Use lookup_name to look for functions.
+ * decl2.c (lookup_name_nonclass): New function, skips over
+ CLASS_VALUE.
+ * decl.c (struct binding_level): Lose overloads_shadowed field.
+ (poplevel): Don't deal with overloads_shadowed.
+ (push_overloaded_decl): Do lexical hiding for functions.
+ * class.c (instantiate_type): Don't check non-members if we have
+ members with the same name.
+ * call.c (build_method_call): Use lookup_name_nonclass instead of
+ IDENTIFIER_GLOBAL_VALUE to check for non-member functions.
+ (build_overload_call_real): Likewise.
+
+ * decl.c (duplicate_decls): Check for ambiguous overloads here.
+ (push_overloaded_decl): Instead of here.
+
+ * decl.c (pushdecl): Back out Chip's last change.
+
+ * decl.c (grok_op_properties): operators cannot be static members.
+
+ * cp-tree.h (DECL_SYNTHESIZED): DECL_SOURCE_LINE == 0
+ (SET_DECL_SYNTHESIZED): DECL_SOURCE_LINE = 0
+ * lex.c (cons_up_default_function): Use SET_DECL_SYNTHESIZED.
+
+ * method.c (do_inline_function_hair): Don't put friends of local
+ classes into global scope, either.
+
+ * typeck2.c (build_functional_cast): Don't look for a function call
+ interpretation.
+
+Thu Apr 28 15:19:46 1994 Mike Stump <mrs@cygnus.com>
+
+ * cp-tree.h: disable use of backend EH.
+
+Wed Apr 27 21:01:24 1994 Doug Evans <dje@canuck.cygnus.com>
+
+ * Make-lang.in (c++.distdir): mkdir tmp/cp first.
+ * Makefile.in (INCLUDES): Move definition to same place as
+ parent makefile.
+ (ALLOCA): Define.
+ (OLDAR_FLAGS): Delete.
+ (OLDCC): Define.
+ (DIR): Delete.
+ (CLIB): Define.
+ (####site): Delete.
+ (SUBDIR_USE_ALLOCA): Don't use ALLOCA if compiling with gcc.
+
+Wed Apr 27 19:10:04 1994 Kung Hsu <kung@mexican.cygnus.com>
+
+ * decl.c (xref_tag): not to use strstr(), it's not available on
+ all platforms.
+
+Wed Apr 27 18:10:12 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * class.c (finish_struct): Resolve yet another class/pmf confusion.
+
+ * call.c (build_overload_call_real): Don't take the single-function
+ shortcut if we're dealing with an overloaded operator.
+
+Wed Apr 27 17:35:37 1994 Mike Stump <mrs@cygnus.com>
+
+ * search.c (get_base_distance): Search the virtual base class
+ binfos, incase someone wants to convert to a real virtual base
+ class.
+ * search.c (expand_indirect_vtbls_init): Use convert_pointer_to_real
+ instead of convert_pointer_to, as it now will work.
+
+Wed Apr 27 15:36:49 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cvt.c (convert_to_reference): Don't complain about casting away
+ const and volatile.
+
+ * typeck.c (build_unary_op): References are too lvalues.
+
+Wed Apr 27 13:58:05 1994 Mike Stump <mrs@cygnus.com>
+
+ * class.c (override_one_vtable): We have to prepare_fresh_vtable
+ before we modify it, not after, also, we cannot reuse an old vtable,
+ once we commit to a new vtable. Implement ambiguous overrides in
+ virtual bases as abstract. Hack until we make the class
+ ill-formed.
+
+Wed Apr 27 01:17:08 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y (unary_expr): Expand new_placement[opt] and
+ new_initializer[opt] inline.
+
+ * search.c (lookup_fnfields): Don't throw away the inheritance
+ information here, either.
+ (compute_access): Handle static members properly.
+
+ * init.c (build_member_call): Always set basetype_path, and pass it
+ to lookup_fnfields.
+
+ * search.c (lookup_field): Deal properly with the case where
+ xbasetype is a chain of binfos; don't throw away the inheritance
+ information.
+ (compute_access): protected_ok always starts out at 0.
+
+ * init.c (resolve_offset_ref): Don't cast `this' to the base type
+ until we've got our basetype_path.
+
+ * cp-tree.h (IS_OVERLOAD_TYPE): aggregate or enum.
+
+ * cvt.c (build_up_reference): Use build_pointer_type rather than
+ TYPE_POINTER_TO.
+
+ * call.c (convert_harshness_ansi): Call type_promotes_to for reals
+ as well.
+
+ * cvt.c (type_promotes_to): Retain const and volatile, add
+ float->double promotion.
+
+ * decl.c (grokdeclarator): Don't bash references to arrays into
+ references to pointers in function parms. Use type_promotes_to.
+
+Tue Apr 26 23:44:36 1994 Mike Stump <mrs@cygnus.com>
+
+ Finish off Apr 19th work.
+
+ * class.c (finish_struct_bits): Rename has_abstract_virtuals to
+ might_have_abstract_virtuals.
+ * class.c (strictly_overrides, override_one_vtable,
+ merge_overrides): New routines to handle virtual base overrides.
+ * class.c (finish_struct): Call merge_overrides to handle overrides
+ in virtual bases.
+
+Tue Apr 26 12:45:53 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (build_function_call): Call build_function_call_real with
+ LOOKUP_NORMAL.
+
+ * *: Don't deal with TYPE_EXPRs.
+
+ * tree.c (lvalue_p): If the type of the expression is a reference,
+ it's an lvalue.
+
+ * cvt.c (convert_to_reference): Complain about passing const
+ lvalues to non-const references.
+ (convert_from_reference): Don't arbitrarily throw away const and
+ volatile on the target type.
+
+ * parse.y: Simplify and fix rules for `new'.
+
+ * decl.c (grok_op_properties): operator void is illegal.
+
+Mon Apr 25 02:36:28 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y (components): Anonymous bitfields can still have declspecs.
+
+ * decl.c (pushdecl): Postpone handling of function templates like we
+ do C functions.
+
+ * search.c (expand_indirect_vtbls_init): Fix infinite loop when
+ convert_pointer_to fails.
+
+ * call.c (compute_conversion_costs_ansi): A user-defined conversion
+ by itself is better than that UDC followed by standard conversions.
+ Don't treat integers and reals specially.
+
+ * cp-tree.h: Declare flag_ansi.
+
+ * typeck.c (c_expand_return): pedwarn on return in void function
+ even if the expression is of type void.
+ (build_c_cast): Don't do as much checking for casts to void.
+ (build_modify_expr): pedwarn about array assignment if this code
+ wasn't generated by the compiler.
+
+ * tree.c (lvalue_p): A comma expression is an lvalue if its second
+ operand is.
+
+ * typeck.c (default_conversion): Move code for promoting enums and
+ ints from here.
+ * cvt.c (type_promotes_to): To here.
+ * call.c (convert_harshness_ansi): Use type_promotes_to. Also fix
+ promotion semantics for reals.
+
+Sun Apr 24 16:52:51 1994 Doug Evans <dje@canuck.cygnus.com>
+
+ * Make-lang.in (c++.install-common): Check for g++-cross.
+ * Makefile.in: Remove Cygnus cruft.
+ (config.status): Delete.
+ (RTL_H): Define.
+ (TREE_H): Use complete pathname, some native makes have minimal
+ VPATH support.
+ (*.o): Use complete pathname to headers in parent dir.
+ (doc, info, dvi): Delete.
+
+Sun Apr 24 16:52:51 1994 Doug Evans <dje@canuck.cygnus.com>
+
+ * Make-lang.in (c++.install-common): Check for g++-cross.
+ * Makefile.in: Remove Cygnus cruft.
+ (config.status): Delete.
+ (RTL_H): Define.
+ (TREE_H): Use complete pathname, some native makes have minimal
+ VPATH support.
+ (*.o): Use complete pathname to headers in parent dir.
+ (doc, info, dvi): Delete.
+
+Sun Apr 24 00:47:49 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (pushdecl): Avoid redundant warning on redeclaring function
+ with different return type.
+ (decls_match): Compare return types strictly.
+
+Fri Apr 22 12:55:42 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cvt.c (build_type_conversion): Do try to convert through other
+ pointers. This will fail if the class defines multiple pointer
+ conversions.
+
+ * error.c (dump_type_prefix): Print out pointers to arrays properly.
+ (dump_type_suffix): Likewise. (was 'int *[]', now 'int (*)[]')
+
+ * typeck.c (build_unary_op): Disallow ++/-- on pointers to
+ incomplete type.
+
+ * decl.c (duplicate_decls): Check mismatched TREE_CODES after
+ checking for shadowing a builtin. If we're redeclaring a builtin
+ function, bash the old decl to avoid an ambiguous overload.
+
+ * cvt.c (convert_to_reference): Don't force arrays to decay here.
+
+ * tree.c (lvalue_p): A MODIFY_EXPR is an lvalue.
+
+ * decl.c (duplicate_decls): Don't assume that the decls will have
+ types.
+
+ Mon Apr 18 11:35:32 1994 Chip Salzenberg <chip@fin.uucp>
+
+ [ cp/* changes propagated from c-* changes in 940318 snapshot ]
+ * c-decl.c (pushdecl): Warn if type mismatch with another external decl
+ in a global scope.
+
+ Fri Apr 22 06:38:56 1994 Chip Salzenberg <chip@fin.uucp>
+
+ * cp/typeck2.c (signature_error): Use cp_error for "%T".
+
+ Mon Apr 18 11:59:59 1994 Chip Salzenberg <chip@fin.uucp>
+
+ [ cp/* changes propagated from c-* changes in 940415 snapshot ]
+ * cp/decl.c (duplicate_decls, pushdecl, builtin_function):
+ Use DECL_FUNCTION_CODE instead of DECL_SET_FUNCTION_CODE.
+
+ Mon Apr 18 11:55:18 1994 Chip Salzenberg <chip@fin.uucp>
+
+ [ cp/* changes propagated from c-* changes in 940409 snapshot ]
+ * cp/decl.c (duplicate_decls): Put new type in same obstack as
+ old ones, or permanent if old ones in different obstacks.
+
+ Mon Apr 18 11:48:49 1994 Chip Salzenberg <chip@fin.uucp>
+
+ [ cp/* changes propagated from c-* changes in 940401 snapshot ]
+ * cp/parse.y (attrib): Handle string args as expressions,
+ merging the two rules. `mode' attribute now takes a string arg.
+ Delete the rule for an identifier as arg.
+
+ Mon Apr 18 11:24:00 1994 Chip Salzenberg <chip@fin.uucp>
+
+ [ cp/* changes propagated from c-* changes in 940312 snapshot ]
+ * cp/typeck.c (pointer_int_sum): Multiplication should be done signed.
+ (pointer_diff): Likewise the division.
+
+ Sun Mar 6 19:43:39 1994 Chip Salzenberg <chip@fin.uucp>
+
+ [ cp/* changes propagated from c-* changes in 940304 snapshot ]
+ * cp/decl.c (finish_decl): Issue warning for large objects,
+ if requested.
+
+ Sat Feb 19 22:20:32 1994 Chip Salzenberg <chip@fin.uucp>
+
+ [ cp/* changes propagated from c-* changes in 940218 snapshot ]
+ * cp/parse.y (attrib): Handle attribute ((section ("string"))).
+ * cp/decl.c (duplicate_decls): Merge section name into new decl.
+
+ Tue Feb 8 09:49:17 1994 Chip Salzenberg <chip@fin.uucp>
+
+ [ cp/* changes propagated from c-* changes in 940206 snapshot ]
+ * cp/typeck.c (signed_or_unsigned_type): Check for any
+ INTEGRAL_TYPE_P not just INTEGER_TYPE.
+
+ Mon Dec 6 13:35:31 1993 Norbert Kiesel (norbert@i3.INformatik.rwth-aachen.DE)
+
+ * cp/decl.c (finish_enum): Start from 0 when determining precision
+ for short enums.
+
+ Fri Dec 3 17:07:58 1993 Ralph Campbell (ralphc@pyramid.COM)
+
+ * cp/parse.y (unary_expr): Look at $1 for tree_code rather than
+ casting $$.
+
+ Wed Nov 17 19:22:09 1993 Chip Salzenberg <chip@fin.uucp>
+
+ * cp/typeck.c (build_binary_op_nodefault): Propagate code
+ from C front-end to optimize unsigned short division.
+ (build_conditional_expr): Fix bug in "1 ? 42 : (void *) 8".
+
+ Wed Nov 17 19:17:18 1993 Chip Salzenberg <chip@fin.uucp>
+
+ * cp/call.c (convert_harshness_ansi): Given an (e.g.) char
+ constant, prefer 'const char &' to 'int'.
+
+ Wed Feb 3 13:11:48 1993 Chip Salzenberg <chip@fin.uucp>
+
+ * cp/class.c (finish_struct_methods): Handle multiple
+ constructors in fn_fields list.
+
+Fri Apr 22 12:48:10 1994 Kung Hsu <kung@mexican.cygnus.com>
+
+ * class.c (finish_struct): use TYPE_DECL_SUPPRESS_DEBUG to flag
+ types not to be dumped in stabs, like types in #pragma interface.
+ * decl.c (init_decl_processing): use TYPE_DECL_SUPPRESS_DEBUG to
+ mark unknown type.
+
+Fri Apr 22 03:27:26 1994 Doug Evans <dje@cygnus.com>
+
+ * Language directory reorganization.
+ See parent makefile.
+
+Thu Apr 21 18:27:57 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * cp-tree.h (THUNK_DELTA): It is normally negative, so
+ use signed .i variant of frame_size rather than unsigned .u.
+ * cp-tree.h (VTABLE_NAME_FORMAT): If flag_vtable_thunks,
+ use "VT" rather than "vt" due to binary incompatibility.
+ * class.c (get_vtable_name): Use strlen of VTABLE_NAME_FORMAT,
+ rather than sizeof, since it is now an expression.
+ * class.c (modify_one_vtable): Modify to skip initial element
+ containing a count of the vtable.
+
+Thu Apr 21 00:09:02 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * lex.c (check_newline): Force interface_unknown on main input file.
+
+ * pt.c (do_pending_expansions): Always emit functions that have been
+ explicitly instantiated.
+ (do_function_instantiation): Set DECL_EXPLICITLY_INSTANTIATED.
+ (do_type_instantiation): Set CLASSTYPE_VTABLE_NEEDS_WRITING and
+ DECL_EXPLICITLY_INSTANTIATED on all my methods.
+ * parse.y (explicit_instantiation): Call do_type_instantiation for
+ types.
+ * decl2.c (finish_vtable_vardecl): Call import_export_vtable.
+ * decl.c (start_function): Don't set DECL_EXTERNAL on a function
+ that has been explicitly instantiated.
+ * cp-tree.h (DECL_EXPLICITLY_INSTANTIATED): Alias for
+ DECL_LANG_FLAG_4.
+ * class.c: Move import_export_vtable to decl2.c, and comment out all
+ uses.
+
+Wed Apr 20 16:51:06 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * lex.c (process_next_inline): Don't muck with DECL_INLINE.
+ (do_pending_inlines): Likewise.
+
+Tue Apr 19 22:25:41 1994 Mike Stump <mrs@cygnus.com>
+
+ Reimplement vtable building, and most vtable pointer setting.
+ Allows for earier maintenance, easier understandability, and most
+ importantly, correct semantics.
+
+ * class.c (build_vtable): Removed unneeded
+ SET_BINFO_VTABLE_PATH_MARKED.
+ * class.c (prepare_fresh_vtable): Likewise. Added argument.
+ * class.c (modify_vtable_entry): General cleanup.
+ * class.c (related_vslot, is_normal, modify_other_vtable_entries,
+ modify_vtable_entries): Removed.
+ * class.c (add_virtual_function): General cleanup.
+ * class.c (finish_base_struct): Setup BINFO_VTABLE and
+ BINFO_VIRTUALS as early as we can, so that modify_all_vtables can
+ work.
+ * class.c (finish_vtbls): New routine, mostly from
+ unmark_finished_struct.
+ * class.c (overrides): New routine.
+ * class.c (modify_one_vtable): New routine, mostly from
+ modify_other_vtable_entries and modify_vtable_entries.
+ * class.c (modify_all_direct_vtables, modify_all_indirect_vtables,
+ modify_all_vtables): New routines.
+ * class.c (finish_struct): Added arguemnt to prepare_fresh_vtable
+ call. General cleanup on how pending_hard_virtuals are handled.
+ General cleanup on modifying vtables. Use finish_vtbls, instead of
+ unmark_finished_struct.
+ * cp-tree.h (init_vtbl_ptrs, expand_direct_vtbls_init,
+ get_first_matching_virtual, get_matching_virtual,
+ expand_vbase_vtables_init, expand_indirect_vtbls_init): Update.
+ * cvt.c (convert_pointer_to_real): cleanup error message.
+ * decl.c (grokfndecl): General cleanup.
+ * decl.c (finish_function): Change init_vtbl_ptrs call to
+ expand_direct_vtbls_init. Change expand_vbase_vtables_init call to
+ expand_indirect_vtbls_init.
+ * init.c (expand_virtual_init): Remove unneeded argument.
+ * init.c (init_vtbl_ptrs): Rename to expand_direct_vtbls_init, added
+ two arguments to make more general. Made more general. Now can be
+ used for vtable pointer initialization from virtual bases.
+ * init.c (emit_base_init): Change expand_vbase_vtables_init call to
+ expand_indirect_vtbls_init. Change init_vtbl_ptrs call to
+ expand_direct_vtbls_init.
+ * init.c (expand_virtual_init): General cleanup.
+ * init.c (expand_default_init): Change expand_vbase_vtables_init
+ call to expand_indirect_vtbls_init.
+ * init.c (expand_recursive_init_1): Change expand_vbase_vtables_init
+ call to expand_indirect_vtbls_init.
+ * init.c (expand_recursive_init): Change expand_vbase_vtables_init
+ call to expand_indirect_vtbls_init.
+ * search.c (get_first_matching_virtual): Rename to
+ get_matching_virtual. General cleanup and remove setting of
+ DECL_CONTEXT. That is now done in a cleaner way in
+ modify_vtable_entry and add_virtual_function.
+ * search.c (expand_vbase_vtables_init): Rename to
+ expand_indirect_vtbls_init. General cleanup. Use
+ expand_direct_vtbls_init to do hard work. Ensures that _all_ vtable
+ pointers from virtual bases are set up.
+ * search.c (bfs_unmark_finished_struct, unmark_finished_struct):
+ Removed.
+
+ * *.[chy]: Remove support for VTABLE_USES_MASK.
+
+Tue Apr 19 12:51:59 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cvt.c (convert_to_reference): Use NOP_EXPRs to switch between
+ reference and pointer types instead of bashing the types directly.
+
+ * call.c (build_overload_call_real): Use the TREE_CODE to determine
+ whether the function is overloaded or not, rather than
+ TREE_OVERLOADED.
+ * *: Remove all uses of TREE_OVERLOADED.
+
+ * decl.c (grokdeclarator): Only complain about initializing const
+ fields when -ansi or -pedantic.
+
+Tue Apr 19 12:42:42 1994 Doug Evans <dje@canuck.cygnus.com>
+
+ * cp-tree.h (THUNK_DELTA): frame_size is now a union.
+
+Mon Apr 18 00:17:13 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ Do overloading on a block-by-block basis, not function-by-function.
+ * decl.c: Lose overloads_to_forget.
+ (struct binding_level): Add overloads_shadowed field.
+ (poplevel): Restore overloads_shadowed.
+ (push_overloaded_decl): Use overloads_shadowed instead of
+ overloads_to_forget.
+ (finish_function): Don't look at overloads_to_forget.
+
+ Copy enum_overflow logic from c-decl.c.
+ * decl.c (start_enum): Initialize enum_overflow.
+ (build_enumerator): Use enum_overflow. Also use current_scope().
+
+ * search.c (current_scope): Move Brendan's comment from
+ build_enumerator here.
+
+ * typeck.c (convert_for_assignment): Change warnings to pedwarns for
+ discarding const/volatile.
+
+Sat Apr 16 01:18:21 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (comp_target_parms): Accept TEMPLATE_TYPE_PARMs on the rhs.
+ (comp_target_types): Likewise.
+
+ * decl.c (lookup_name): Don't unset got_scope here.
+
+ * spew.c (yylex): Only replace yylval with the TYPE_NESTED_NAME if
+ got_scope != NULL_TREE.
+
+Fri Apr 15 16:36:33 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ Horrible kludge to prevent templates from being instantiated by
+ their base classes.
+ * parse.y (template_instantiate_once): Unset TYPE_BEING_DEFINED
+ before we get to left_curly.
+ * pt.c (instantiate_class_template): Set TYPE_BEING_DEFINED.
+
+ * error.c (dump_decl): If it's a typedef, print out the name of the
+ decl, not just the underlying type.
+
+ * decl.c (pushdecl): If the old duplicate decl was a TYPE_DECL,
+ update the IDENTIFIER_TYPE_VALUE of its name.
+
+ * decl2.c (finish_file): When processing the initializer for a
+ static member, pretend that the dummy function is a member of the
+ same class.
+
+Fri Apr 15 15:56:35 1994 Kung Hsu <kung@mexican.cygnus.com>
+
+ * class.c (build_vtable_entry): revert Apr 4 change.
+ * decl2.c (mark_vtable_entries): replace pure virtual function
+ decl with abort's.
+
+Fri Apr 15 13:49:33 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (build_conditional_expr): Pedwarn on pointer/integer
+ mismatch, and don't pedwarn on 0/function pointer mismatch.
+
+ * typeck2.c (digest_init): Lose code for special handling of unions.
+ (process_init_constructor): Since they're handled just fine here.
+ Pedwarn on excess elements.
+
+ * decl2.c (grokfield): Complain about local class method declaration
+ without definition.
+
+Fri Apr 15 13:19:40 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * method.c (emit_thunk): Add extern declaration for
+ current_call_is_indirect (needed for hppa).
+
+Thu Apr 14 16:12:31 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ Improve local class support; allow classes in different blocks to
+ have the same name.
+ * decl.c (pushtag): Support local classes better.
+ (pushdecl_nonclass_level): New function for pushing mangled decls of
+ nested types into the appropriate scope.
+ (xref_defn_tag): Use pushdecl_nonclass_level instead of
+ pushdecl_top_level.
+ (grokfndecl): Don't mess with IDENTIFIER_GLOBAL_VALUE for local
+ class methods.
+ * method.c (do_inline_function_hair): Likewise.
+
+ * class.c (finish_struct): It is legal for a class with no
+ constructors to have nonstatic const and reference members.
+
+Thu Apr 14 07:15:11 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * decl.c (push_overloaded_decl): Avoid giving errors about
+ built-ins, since duplicate_decls will have given warnings/errors
+ for them.
+
+Thu Apr 14 03:45:12 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cvt.c (convert_to_reference): Warn about casting pointer type to
+ reference type when this is probably not what they wanted.
+
+Wed Apr 13 13:12:35 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * decl.c (finish_decl): Don't mindlessly set TREE_USED for
+ static consts any more (toplev.c has now been modified to
+ not emit warnings if they are unused).
+
+Wed Apr 13 00:22:35 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (grok_op_properties): If op new/delete get here with
+ METHOD_TYPEs, do a revert_static_member_fn.
+
+ * cp-tree.h (IDENTIFIER_CLASS_TYPE_VALUE): Lose.
+ * init.c (is_aggr_typedef): Don't look at
+ IDENTIFIER_CLASS_TYPE_VALUE.
+ (get_aggr_from_typedef): Likewise.
+ (get_type_value): Likewise.
+ * call.c (build_scoped_method_call): Don't rely on overloaded
+ template names having IDENTIFIER_CLASS_VALUE set.
+
+ * parse.y (component_decl_1, fn.def2): Revert rules for
+ constructors.
+ (component_decl_1, fn.def2): Use $1 instead of $$, since $$ is being
+ clobbered.
+
+ * decl.c (start_function): Only warn about `void main()' if pedantic
+ || warn_return_type.
+
+Tue Apr 12 02:14:17 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ Clean up overloading of the template name.
+ * class.c (pushclass): overload the template name whenever pushing
+ into the scope of a template class, not just if it is
+ uninstantiated.
+ (popclass): Correspondingly.
+ * search.c (push_class_decls): Don't overload_template_name.
+ * pt.c (overload_template_name): Don't set IDENTIFIER_LOCAL_VALUE or
+ DECL_CONTEXT on things.
+ * parse.y (left_curly): Don't overload_template_name.
+ * class.c (finish_struct): Don't undo_template_name_overload.
+
+ * method.c (build_opfncall): Only pass one argument to global op
+ delete.
+
+ * call.c (build_method_call): Use TYPE_VEC_DELETE_TAKES_SIZE to
+ decide how many arguments to use for vec delete.
+
+ * decl.c (grok_op_properties): Be consistent in modifying
+ current_class_type.
+ (grokdeclarator): Only complain about function decls with no return
+ type if we're being pedantic.
+
+Mon Apr 11 00:10:53 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ Add support for operator new [] and operator delete [].
+
+ * tree.def: Add VEC_NEW_EXPR and VEC_DELETE_EXPR.
+ * ptree.c (print_lang_type): Indicate vec new/delete.
+ * parse.y: Support vec new/delete.
+ * method.c (build_decl_overload): Deal with vec new/delete.
+ (build_opfncall): Likewise.
+ * lex.c (init_lex): Set up values of ansi_opname and opname_tab for
+ vec new/delete. vec new uses "__vn", and vec delete uses "__vd".
+ * init.c (init_init_processing): Set up BIVN and BIVD.
+ (do_friend): Don't clean up after mistaken setting of TREE_GETS_NEW,
+ since it doesn't happen any more.
+ (build_new): Support vec new. Always call something.
+ (build_x_delete): Support vec delete.
+ (build_vec_delete): Lose dtor_dummy argument, add use_global_delete,
+ and pass it to build_x_delete.
+ * decl2.c (delete_sanity): Don't change behavior by whether or not
+ the type has a destructor. Pass use_global_delete to
+ build_vec_delete.
+ (coerce_delete_type): Make sure that the type returned has a first
+ argument of ptr_type_node.
+ * decl.c (init_decl_processing): Also declare the global vec
+ new/delete.
+ (grokdeclarator): Also force vec new/delete to be static.
+ (grok_op_properties): Note presence of vec new/delete, and play with
+ their args. If vec delete takes the optional size_t argument, set
+ TYPE_VEC_DELETE_TAKES_SIZE.
+ * cp-tree.h (TYPE_GETS_{REG,VEC}_DELETE): New macros to simplify
+ checking for one delete or the other.
+ (lang_type): gets_new and gets_delete are now two bits long. The
+ low bit is for the non-array version. Lose gets_placed_new.
+ (TYPE_VEC_DELETE_TAKES_SIZE): New macro indicating that the vec
+ delete defined by this class wants to know how much space it is
+ deleting.
+ (TYPE_VEC_NEW_USES_COOKIE): New macro to indicate when vec new must
+ add a header containing the number of elements in the vector; i.e.
+ when the elements need to be destroyed or vec delete wants to know
+ the size.
+ * class.c (finish_struct_methods): Also check for overloading vec
+ delete.
+ * call.c (build_method_call): Also delete second argument for vec
+ delete.
+
+ * decl.c (grokdeclarator): Correct complaints again.
+ (grokdeclarator): Fix segfault on null declarator.
+ (decls_match): Also accept redeclaration with no arguments if both
+ declarations were in C context. Bash TREE_TYPE (newdecl) here.
+ (duplicate_decls): Instead of here.
+
+ * parse.y (nested_name_specifier_1): Lose rules for dealing with
+ syntax errors nicely, since they break parsing of 'const i;'.
+
+ * decl.c (lookup_name): if (got_scope == current_class_type)
+ val = IDENTIFIER_CLASS_VALUE (name).
+
+ * search.c (lookup_nested_tag): Look in enclosing classes, too.
+
+ * spew.c (yylex): Only look one character ahead when checking for a
+ SCOPE.
+
+ * lex.c (check_newline): Read first nonwhite char before
+ incrementing lineno.
+
+ * decl.c (grokdeclarator): Don't claim that typedefs are variables
+ in warning.
+
+ * parse.y: Divide up uses of unqualified_id into
+ notype_unqualified_id and unqualified_id, so that TYPENAME can be
+ used as an identifier after an object.
+
+ * class.c (push_nested_class): Don't push into non-class scope.
+
+ * decl.c (grokdeclarator): If an identifier could be a type
+ conversion operator, but has no associated type, it's not a type
+ conversion operator.
+
+ * pt.c (unify): Check for equality of constants better.
+
+ * decl.c (grokdeclarator): Don't complain about access decls.
+
+Sun Apr 10 02:39:55 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (grokdeclarator): pedwarn about data definitions without
+ types here.
+
+ * parse.y (datadef): Don't pedwarn about decls without types here,
+ since that is valid for functions.
+ (fn.def2, component_decl): Support constructors with declmods again.
+ (nomods_initdecls): For decls without any mods, so that we don't try
+ to get declspecs from some arbitrary $0.
+
+ * search.c (lookup_field): Use cp_error.
+
+ * parse.y (nested_name_specifier_1): Don't check aggr/non-aggr type
+ here; it breaks destructors for non-aggr types.
+
+ * decl.c (lookup_name): Only look for TYPE_DECLs in base classes of
+ a type being defined, like the comment says.
+ If got_scope is not an aggregate, just return NULL_TREE.
+
+ * pt.c (create_nested_upt): Kung's code for creating types nested
+ within uninstantiated templates now lives here (it used to live in
+ hack_more_ids). It needs to be expanded.
+
+ * parse.y: Stop calling see_typename so much.
+
+ * decl.c (lookup_name): Deal with TTPs and UPTs.
+
+ * lex.c (real_yylex): Don't set looking_for_typename just because we
+ saw a 'new'.
+ (dont_see_typename): #if 0 out.
+
+ * spew.c (yylex): Increment looking_for_typename if the next
+ character is SCOPE, rather than setting it to 1; this way, the value
+ from seeing an aggr specifier will not be lost. This kinda relies
+ on looking_for_typename never being < 0, which is now true.
+
+ * parse.y (nested_name_specifier_1): Accept TEMPLATE_TYPE_PARMs,
+ too.
+ (named_class_head_sans_basetype): Accept template types, too. Oops.
+
+Fri Apr 8 16:39:35 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl2.c (reparse_decl_as_expr1): Handle SCOPE_REFs.
+
+ * parse.y: Lose START_DECLARATOR.
+
+ * search.c (lookup_nested_tag): New function to scan CLASSTYPE_TAGS
+ for a class.
+
+ * parse.y: Simplify fn.def2 and component_decl. Support 'enum
+ A::foo' syntax. Catch invalid scopes better.
+
+ * parse.y, lex.c: lose TYPENAME_COLON.
+
+ * decl2.c (groktypefield): #if 0 out.
+
+ * decl.c (lookup_name): If the type denoted by got_scope is
+ currently being defined, look in CLASSTYPE_TAGS rather than FIELDS.
+
+ * class.c (push_nested_class): Don't try to push into
+ error_mark_node.
+
+Fri Apr 8 07:26:36 1994 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * Makefile.in (stamp-parse): Update count of conflicts to 33.
+
+Thu Apr 7 17:47:53 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ A saner implementation of nested types that treats template types
+ no differently from non-template types. There are still some
+ shortcomings of our system; most notably, it is difficult to look
+ for a nested type that is hidden by another name, because of the way
+ we keep track of hidden types. But this shouldn't be a problem for
+ just about anyone. Perhaps lookup_field should be fixed up a bit.
+
+ * spew.c: Moved handling of nested types/scoping from the lexer
+ into the parser. Removed variable template_type_seen_before_scope.
+ Removed functions frob_identifier, hack_more_ids, and various cruft
+ that was #if 0'd out in the past, reducing the size of the file from
+ 1146 lines to 450 lines. We can't quite do away with spew.c yet,
+ though; we still need it for do_aggr () and checking for SCOPE after
+ the current identifier. And setting lastiddecl.
+
+ * parse.y: Moved handling of nested types/scoping from the lexer
+ into the parser, using a new global variable `got_scope'. Reduced
+ the number of states by 53. Implemented all uses of explicit global
+ scope. Removed terminals SCOPED_TYPENAME and SCOPED_NAME. Removed
+ nonterminals tmpl.1, scoped_base_class, id_scope, typename_scope,
+ scoped_typename. Added nonterminals nested_type,
+ qualified_type_name, complete_type_name, qualified_id, ptr_to_mem,
+ nested_name_specifier, global_scope, overqualified_id, type_name.
+ Changed many others. Added 9 new reduce/reduce conflicts, which are
+ nested type parallels of 9 that were already in the grammar for
+ non-nested types. Eight of the now 33 conflicts should be removed
+ in the process of resolving the late binding between variable and
+ function decls.
+
+ * gxxint.texi (Parser): Update.
+
+ * cp-tree.h (IS_AGGR_TYPE_CODE): Add UNINSTANTIATED_P_TYPE.
+
+ * lex.h: Add decl for got_scope.
+
+ * lex.c (see_typename): Claim to be the lexer when calling
+ lookup_name.
+
+ * decl.c (lookup_name): When called from the lexer, look at
+ got_scope and looking_at_typename; otherwise don't.
+
+Thu Apr 7 22:05:47 1994 Mike Stump <mrs@cygnus.com>
+
+ 31th Cygnus<->FSF merge.
+
+Thu Apr 7 17:47:53 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl2.c (mark_vtable_entries): Call this to mark all the
+ entries in the vtable addressable.
+ (finish_decl_parsing): Handle SCOPE_REFs.
+
+ * decl.c (decls_match): Always call compparms with strict == 1.
+ Handle the special case of C function redecl here.
+ (duplicate_decls): Only keep the old type if the new decl takes no
+ arguments.
+
+ * typeck.c (compparms): Also allow t1 to be ... if strict == 0.
+
+Thu Apr 7 16:17:50 1994 Mike Stump <mrs@cygnus.com>
+
+ * class.c (build_vtable_entry): Fix breakage introduced Apr 5
+ 17:48:41.
+
+Wed Apr 6 16:05:10 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * init.c (build_virtual_init), search.c (build_vbase_vtables_init),
+ ch-tree.h: Every place these functions were called, the result was
+ immediately passed to expand_expr_stmt. Reduce redundancy by
+ calling expand_expr_init *inside* these functions. These
+ makes for a simpler interface, and we don't have to build
+ compound expressions. Hence, rename these function to:
+ expand_virtual_init and expand_vbase_vtables_init respectively.
+ * init.c, decl.c: Change callers of these functions.
+ * init.c, cp-tree.h (expand_virtual_init): Make static.
+
+ * decl2.c (finish_file): Check TREE_PUBLIC||TREE_ADDRESSABLE
+ rather than DECL_SAVED_INSNS before emitting inlines.
+
+Wed Apr 6 13:06:39 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * spew.c (init_spew): #if 0 out stuff used by arbitrate_lookup.
+
+ * decl.c (duplicate_decls): If this is a new declaration of an
+ extern "C" function, keep the type (for the argtypes).
+ (redeclaration_error_message): Don't check DECL_LANGUAGE here.
+ (decls_match): Call compparms with a value of strict dependent on
+ the value of strict_prototypes for DECL_LANGUAGE (oldecl).
+
+ * typeck.c (compparms): ... is only equivalent to non-promoting
+ parms if we're not being strict.
+
+ * parse.y (empty_parms): Don't check flag_ansi || pedantic here.
+
+ * decl.c (init_decl_processing): if (flag_ansi || pedantic)
+ strict_prototypes_lang_c = strict_prototypes_lang_cplusplus;
+
+ * decl2.c (grok_function_init): Don't set DECL_INITIAL on pure
+ virtuals.
+
+Tue Apr 5 17:48:41 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ Support for implementing vtables with thunks.
+ * tree.def (THUNK_DECL): New TREE_CODE.
+ * cp-tree.h (FNADDR_FROM_VTABLE_ENTRY), tree.c
+ (fnaddr_from_vtable_entry): Handle flag_vtable_thunks case.
+ * cp-tree.h (memptr_type): New variable.
+ * class.c (build_vtable_entry): Build thunk if necessary.
+ * class.c (build_vfn_ref): If using thunks, don't need
+ to add delta field from vtable (there is none!).
+ * decl.c: Add memptr_type as well as vtable_entry_type.
+ If using thunks, the latter is just ptr_type_node.
+ * gc.c, typeck.c: Use memptr_typeChange, not vtable_entry_type.
+ * decl2.c (finish_vtable_vardecl): Handle thunks.
+ * expr.c (cplus_expand_expr): Support THUNK_DECL.
+
+ * decl.c (grokdeclarator): Set DECL_THIS_EXTERN if "extern".
+ * decl.c (start_function): Set current_extern_inline based on
+ DECL_THIS_EXTERN, not TREE_PUBLIC.
+ * decl.c (finish_function): Call mark_inline_for_output if needed,
+
+ Improve intelligence about when to emit inlines.
+ * cp-tree.h (lang_decl_flags): New field saved_inline.
+ * cp-tree.h (DECL_SAVED_INLINE): New macro.
+ * class.c (add_virtual_function): Don't set TREE_ADDRESSABLE.
+ * decl.h, decl.c (pending_addressable_inlines): Removed.
+ * decl2.c (pending_addressable_inlines): Renamed to saved_inlines.
+ * decl2.c (mark_inline_for_output): Do nothing if
+ DECL_SAVED_INLINE; otherwise set it (and add to saved_inlines list).
+ * decl2.c (finish_vtable_vardecl): SET_CLASSTYPE_INTERFACE_KNOWN
+ and set CLASSTYPE_INTERFACE_ONLY if there is a non-inline virtual.
+ * decl2.c (finish_file): Writing out inlines later, so we can
+ also handle the ones needed for vtbales.
+ * decl2.c (write_vtable_entries, finish_vtable_typedecl): Removed.
+
+ * cp-tree.h, class.c, decl2.c, search.c: Remove -fvtable-hack
+ and flag_vtable_hack. Use -fvtable-thunks and flag_vtable_thunks
+ instead. (The rationale is that these optimizations both break binary
+ compatibility, but should become the default in a future release.)
+
+Wed Apr 6 10:53:56 1994 Mike Stump <mrs@cygnus.com>
+
+ * class.c (modify_vtable_entries): Never reset the DECL_CONTEXT
+ of a fndecl, as we might not be from that vfield.
+
+Tue Apr 5 17:43:35 1994 Kung Hsu <kung@mexican.cygnus.com>
+
+ * class.c (add_virtual_function): fix bug for pure virtual, so
+ that DECL_VINDEX of the dummy decl copied won't be error.
+ (see also Apr 4 change)
+
+Tue Apr 5 17:23:45 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * typeck.c (c_expand_return): Before checking that we're not
+ returning the address of a local, make sure it's a VAR_DECL.
+ (And don't worry about it being a TREE_LIST.)
+
+Tue Apr 5 13:26:42 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y (YYDEBUG): Always define.
+ * lex.c (YYDEBUG): Likewise.
+
+Mon Apr 4 11:28:17 1994 Kung Hsu <kung@mexican.cygnus.com>
+
+ * class.c (finish_struct): backup out the change below, put the
+ new change for the same purpose. The change below breaks code.
+
+ * class.c (finish_struct): if pure virtual, copy node and make
+ RTL point to abort, then put in virtual table.
+ * decl2.c (grok_function_iit): reinstate Mar 31 change.
+
+Sat Apr 2 03:12:58 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * init.c (build_new): pedwarn about newing const and volatile
+ types.
+
+ * tree.c (get_identifier_list): Only do the special handling
+ thing if we're dealing with the main variant of the record type.
+
+ * cvt.c (convert_to_reference): When converting between
+ compatible reference types, use the pointer conversion machinery.
+ Don't just blindly overwrite the old type.
+
+Fri Apr 1 17:14:42 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * call.c (build_method_call): When looking at global functions,
+ be sure to use instance_ptr for the first argument, not some version
+ of it that has been cast to a base class. Also do this before
+ comparing candidates.
+
+Thu Mar 31 19:50:35 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * call.c (build_method_call): Constructors can be called for
+ const objects.
+
+Thu Mar 31 16:20:16 1994 Kung Hsu <kung@mexican.cygnus.com>
+
+ * decl2.c (grok_func_init): do not abort as rtl for pur virtual
+ fucntions. They can be defined somewhere else.
+
+Sat Jan 23 23:23:26 1994 Stephen R. van den Berg (berg@pool.informatik.rwth-aachen.de)
+
+ * decl.c (init_decl_processing): Declare __builtin_return_address
+ and __builtin_frame_address for C++ as well.
+
+Thu Mar 31 12:35:49 1994 Mike Stump <mrs@cygnus.com>
+
+ * typeck2.c (store_init_value): Integral constant variables are
+ always constant, even when doing -fpic.
+
+Sat Jan 23 23:23:26 1994 Stephen R. van den Berg (berg@pool.informatik.rwth-aachen.de)
+
+ * decl.c (redeclaration_error_message): Pass the types to
+ comptypes.
+
+Wed Mar 30 21:29:25 1994 Mike Stump <mrs@cygnus.com>
+
+ Cures incorrect errors about pure virtuals in a class, when they
+ have been overridden in a derived class.
+
+ * search.c (get_abstract_virtuals): Reimplement.
+ * search.c (get_abstract_virtuals_1): New routine.
+
+Wed Mar 30 14:10:04 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * pt.c (push_template_decls): Make the pushed level pseudo
+ global.
+
+ * parse.y (extdefs): Don't pop everything if the current binding
+ level is pseudo_global.
+
+ * decl.c (pop_everything): Stop on reaching a pseudo-global
+ binding level.
+
+ * cp-tree.h (DECL_FUNCTION_MEMBER_P): Change to more reliable test.
+
+ * decl.c (duplicate_decls): Only copy DECL_SOURCE_{FILE_LINE} if
+ the old decl actually had an initializer.
+
+ * {various}: Clean up gcc -W complaints.
+
+ * cp-tree.h (DECL_FUNCTION_MEMBER_P): Currently defined to be
+ (DECL_CONTEXT (NODE) != NULL_TREE).
+
+ * parse.y (lang_extdef): Call pop_everything if necessary.
+
+ * decl.c (pop_everything): New function for popping binding
+ levels left over after a syntax error.
+ (pushdecl): Use DECL_FUNCTION_MEMBER_P to decide whether or not
+ a function is a member.
+
+Wed Mar 30 14:20:50 1994 Mike Stump <mrs@cygnus.com>
+
+ Cures calling a more base base class function, when a more derived
+ base class member should be called in some MI situations.
+
+ * search.c (make_binfo): Use more the more specialized base
+ binfos from the binfo given as the second argument to make_binfo,
+ instead of the unspecialized ones from the TYPE_BINFO.
+ * class.c (finish_base_struct): Likewise, update callers.
+ * search.c (dfs_get_vbase_types): Likewise.
+ * tree.c (propagate_binfo_offsets, layout_vbasetypes): Likewise.
+ * decl.c (xref_tag): Use NULL_TREE instead of 0.
+ * lex.c (make_lang_type): Likewise.
+
+Wed Mar 30 14:10:04 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (pushdecl): If pushing a C-linkage function, only do a
+ push_overloaded_decl.
+ (duplicate_decls): Standard overloading does not shadow built-ins.
+
+Tue Mar 29 00:54:18 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * pt.c (end_template_decl): Don't call push_overloaded_decl.
+
+ * init.c (do_friend): Don't call push_overloaded_decl.
+
+ * decl.c (pushdecl): Call push_overloaded_decl for functions and
+ function templates.
+ (duplicate_decls): functions and function templates are not
+ duplicates, but don't complain about calling this function to
+ compare them.
+ (push_overloaded_decl): Don't deal with linkage. Call
+ duplicate_decls.
+ (redeclaration_error_message): Deal with linkage.
+
+ * decl.c (start_function): If push_overloaded_decl returns an
+ older version of the function, deal with it.
+
+ * decl.c (start_function): Be sure only to push_overloaded_decl
+ for non-members.
+
+ * decl.c (grokfndecl): Put back clearing of DECL_CHAIN for
+ methods.
+ (start_function): Lose broken and redundant code for checking old
+ decl.
+
+ * init.c (add_friend): Give line numbers of both friend decls
+ when warning about re-friending.
+
+ * pt.c (tsubst): Use comptypes rather than == to compare the
+ types of the method as declared and as defined, since default
+ parameters may be different.
+
+ * call.c (build_method_call): Use brendan's candidate printing
+ routine.
+
+ * decl.c (start_method): Methods defined in the class body are
+ inline whether or not it's a template class.
+
+Mon Mar 28 16:39:26 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y (initdcl0): Add "extern" to current_declspecs if
+ have_extern_spec && ! used_extern_spcec.
+
+ * tree.c (really_overloaded_fn): A fn with more than one
+ overload.
+
+ * pt.c (end_template_decl): Use really_overloaded_fn.
+
+ * decl.c (duplicate_decls): When smashing a decl into a previous
+ definition, keep the old file and line.
+ Don't deal with overloaded functions.
+ Lose old code for checking arg types of functions.
+ Check for overloaded C functions.
+ (pushdecl): Deal with overloaded functions.
+ (start_decl): Expect pushdecl to return an appropriate function decl.
+ (start_function): Likewise.
+ (push_overloaded_decl): Don't check for overloaded C functions.
+
+ * *.c: Stop using DECL_OVERLOADED, it being archaic.
+ TREE_OVERLOADED should probably go, too.
+
+Mon Mar 28 14:00:45 1994 Ron Guilmette <rfg@netcom.com>
+
+ * typeck.c (comp_target_types): Call comp_target_parms with
+ strict == 1.
+
+Sun Mar 27 00:07:45 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y (empty_parms): Don't parse () as (...) in extern "C"
+ sections if we're compiling with -ansi or -pedantic.
+
+ * decl.c (decls_match): Don't treat (int) and (int&) as matching.
+
+ * decl2.c (grokfield): Don't pedwarn twice about initializing
+ field.
+
+ * decl.c (push_overloaded_decl): Warn about shadowing
+ constructor.
+ (redeclaration_error_message): Don't allow 'int a; int a;'
+
+ * cvt.c (build_up_reference): Only check for valid upcast if
+ LOOKUP_PROTECT is set, not just any flag.
+
+Fri Mar 25 01:22:31 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * lex.c (check_newline): When we see a #pragma implementation,
+ also set it for the main input file.
+
+ * init.c (build_new): Convert array size argument to size_t.
+
+ * parse.y (primary): If we're doing a parenthesized type-id, call
+ groktypename before passing it to build_new.
+
+ * call.c (build_method_call): Deal properly with const and
+ volatile for instances of reference type.
+
+ * decl.c (store_return_init): Change 'if (pedantic) error' to 'if
+ (pedantic) pedwarn'.
+
+ * decl.c (grokdeclarator): Don't complain about putting `static'
+ and `inline' on template function decls.
+
+Thu Mar 24 23:18:19 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * call.c (build_method_call): Preserve const & volatile on
+ `this'.
+
+Thu Mar 24 16:21:52 1994 Mike Stump <mrs@cygnus.com>
+
+ * init.c (build_new, build_vec_delete): Use global new and delete
+ for arrays.
+ * decl2.c (delete_sanity): Likewise.
+
+Thu Mar 24 02:10:46 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cvt.c (convert_to_reference): If i is an lvalue,
+ (int &)i -> *(int*)&i, as per 5.2.8p9 of the latest WP.
+ (convert_force): Call convert_to_reference with LOOKUP_COMPLAIN.
+
+Wed Mar 23 17:45:37 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (duplicate_decls): Also propagate DECL_TEMPLATE_MEMBERS
+ and DECL_TEMPLATE_INSTANTIATIONS.
+
+ * init.c (build_new): Handle array typedefs properly.
+
+Wed Mar 23 18:23:33 1994 Mike Stump <mrs@cygnus.com>
+
+ 30th Cygnus<->FSF merge.
+
+Wed Mar 23 00:46:24 1994 Mike Stump <mrs@cygnus.com>
+
+ * class.c (modify_vtable_entries): Avoid running off the end of the
+ virtuals list when processing a virtual destructor.
+ * class.c (get_vtable_entry): Likewise.
+
+Wed Mar 23 00:23:59 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (duplicate_decls): If two template decls don't match,
+ just return 0.
+
+Tue Mar 22 23:49:41 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (convert_for_assignment): Don't pedwarn about
+ converting function pointer to void *.
+
+Tue Mar 22 22:23:19 1994 Mike Stump <mrs@cygnus.com>
+
+ Major revamp of pointer to member functions. Cures major
+ nonfunctionality when used in casts, and MI situations.
+
+ * cvt.c (convert_force): Update call site of build_ptrmemfunc.
+ * typeck.c (convert_for_assignment): Likewise.
+ * typeck2.c (digest_init): Likewise.
+ * typeck2.c (process_init_constructor): Simplify by moving code into
+ digest_init.
+ * typeck2.c (digest_init): Do default_conversions on init value, if
+ we are processing pointer to member functions.
+ * class.c (get_vfield_offset): Now non-static. Convert bit offset
+ into byte offset.
+ * cp-tree.h (get_vfield_offset): Likewise.
+ * typeck.c (get_member_function_from_ptrfunc): Convert down to right
+ instance, before fetching vtable pointer.
+ * typeck.c (get_delta_difference): New routine.
+ * typeck.c (build_ptrmemfunc): Revamp to handle casting better, also
+ get vtable pointer out of right subobject.
+
+Tue Mar 22 17:56:48 1994 Mike Stump <mrs@cygnus.com>
+
+ * search.c (get_binfo): Return NULL instead of aborting, when
+ passed a UNION_TYPE.
+
+Tue Mar 22 12:44:54 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ These patches implement handling of redefinition/redeclaration of
+ templates.
+
+ * typeck.c (comptypes): Simplify. All TEMPLATE_TYPE_PARMs are
+ considered compatible.
+
+ * parse.y (template_def): Pass defn argument to end_template_decl.
+
+ * pt.c (end_template_decl): Add defn argument. Check for
+ redefinition. Simplify.
+
+ * error.c (OB_UNPUT): New macro, to remove mistakes.
+ (aggr_variety): Subroutine of dump_aggr_type.
+
+ * decl.c (decls_match): Support templates.
+ (duplicate_decls): No longer static. Don't try to lay out template
+ decls.
+ (pushdecl): Simplify.
+
+ * cp-tree.h (DECL_TEMPLATE_MEMBERS): Use DECL_SIZE instead of
+ DECL_INITIAL.
+
+Mon Mar 21 11:46:55 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * error.c (dump_decl): Support class template decls.
+ (dump_type): Don't adorn template type parms.
+
+ * decl.c (duplicate_decls): Save DECL_TEMPLATE_INFO from old decl
+ if it was a definition.
+ (redeclaration_error_message): Do the cp_error thang, and reject
+ redefinition of templates.
+
+Mon Mar 21 19:36:06 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * decl.c (grokdeclarator): Set TREE_PUBLIC for METHOD_TYPE
+ in FIELD context, when appropriate. Also,
+ CLASSTYPE_INTERFACE_ONLY is irrelevant to setting TREE_PUBLIC.
+ Also, simplify check for bogus return specifiers.
+
+Mon Mar 21 11:46:55 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y (after_type_declarator1): Expand type_quals.
+ (notype_declarator1): Likewise.
+ (absdcl1): Likewise.
+
+Sat Mar 19 01:05:17 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (grokdeclarator): Treat class-local typedefs like static
+ members; i.e. 'typedef int f();' means that f is a function type,
+ not a method type.
+
+ * parse.y (decl): Change direct_* back to *.
+ (type_id): Change direct_abstract_declarator to absdcl.
+ (direct_declarator, direct_initdecls, direct_initdcl0): Remove again.
+
+Fri Mar 18 12:47:59 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ These two patches fix crashes on instantiating a template inside a
+ function with C linkage or containing labels.
+
+ * class.c (current_lang_stacksize): No longer static.
+
+ * decl.c (struct saved_scope): Add lang_base, lang_stack,
+ lang_name, lang_stacksize, and named_labels.
+ (push_to_top_level): Save them.
+ (pop_from_top_level): Restore them.
+
+ * gxxint.texi (Parser): Update.
+
+ These two patches finish moving the task of expr/declarator
+ ambiguity resolution from the lexer to the parser, and add one more
+ r/r conflict. START_DECLARATOR can now be nuked.
+
+ * parse.y (decl): Add "direct_" in typespec X rules.
+ (direct_declarator): New nonterminal for
+ direct_after_type_declarator and direct_notype_declarator.
+ (direct_initdecls): Like initdecls, but uses direct_initdcl0.
+ (direct_initdcl0): Like initdcl0, but uses direct_declarator.
+ (named_parm): Add typespec direct_declarator rule.
+
+ * spew.c (yylex): #if 0 out START_DECLARATOR insertion.
+
+ These two patches disable some excessive cleverness on the part of
+ g++; a non-class declaration always hides a class declaration in the
+ same scope, and g++ was trying to unhide it depending on the
+ enclosing expression.
+
+ * spew.c (arbitrate_lookup): #if 0 out.
+
+ * decl.c (lookup_name): Never call arbitrate_lookup.
+
+ * parse.y (complex_notype_declarator1): Add '*'
+ complex_notype_declarator1 and '&' complex_notype_declarator1 rules.
+
+ * parse.y (complex_direct_notype_declarator): Restore id_scope
+ see_typename TYPENAME rule, remove all other rules beginning with
+ those tokens.
+ (notype_unqualified_id): Add '~' see_typename IDENTIFIER rule.
+
+Thu Mar 17 17:30:01 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ These changes fix the compiler's handling of the functional cast/
+ object declaration ambiguities in section 6.8 of the ARM. They also
+ add 11 reduce/reduce conflicts. Sigh.
+
+ * parse.y: Add precedence decls for OPERATOR and '~'.
+ (notype_unqualified_id): New nonterminal, encompasses all of the
+ ANSI unqualified-id nonterminal except TYPENAMEs.
+ (expr_or_declarator): New nonterminal to delay parsing of code like
+ `int (*a)'.
+ (primary): Use notype_unqualified_id.
+ (decl): Add typespec initdecls ';' and typespec declarator ';'
+ rules.
+ (initdcl0): Deal with the above.
+ (complex_notype_declarator1): A notype_declarator that is not also
+ an expr_or_declarator.
+ (complex_direct_notype_declarator): A direct_notype_declarator that
+ doesn't conflict with expr_or_declarator. Use
+ notype_unqualified_id. Remove id_scope see_typename TYPENAME rule.
+ (functional_cast): New nonterminal, for the three functional cast
+ rules. So that they can be moved after
+ complex_direct_notype_declarator.
+ (see_typename): Don't accept type_quals any more.
+
+ * decl2.c (reparse_decl_as_expr): New function to deal with parse
+ nodes for code like `int (*a)++;'.
+ (reparse_decl_as_expr1): Recursive subroutine of the above.
+ (finish_decl_parsing): New function to deal with parse nodes for
+ code like `int (*a);'. See the difference?
+
+Thu Mar 17 12:16:10 1994 Mike Stump <mrs@cygnus.com>
+
+ These changes break binary compatibility in code with classes
+ that use virtual bases.
+
+ * search.c (dfs_get_vbase_types): Simplify and correct to make
+ sure virtual bases are initialized in dfs ordering.
+ * search.c (get_vbase_types): Simplify and make readable.
+
+Thu Mar 17 12:01:10 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y: s/ typename / type_id /g
+
+Wed Mar 16 17:42:52 1994 Kung Hsu <kung@mexican.cygnus.com>
+
+ * parse.y (typespec): add SCOPE TYPENAME for global scoped
+ type. e.g. ::B x.
+
+ * decl.c (complete_array_type): fix a bug that in -pendantic
+ mode even there's no initializer, it will continue to build
+ default index.
+
+Wed Mar 16 17:43:07 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y (direct_notype_declarator): Add PTYPENAME rule, remove
+ all of the scoped PTYPENAME rules.
+
+Wed Mar 16 16:39:02 1994 Mike Stump <mrs@cygnus.com>
+
+ * init.c (build_offset_ref): The value of A::typedef_name is
+ always the TYPE_DECL, and never an error.
+
+Tue Mar 15 20:02:35 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * search.c (get_base_distance_recursive): Two binfos can only
+ represent the same object if they are both via_virtual.
+
+ * class.c (finish_base_struct): Check vbases for ambiguity, too.
+
+ * search.c (get_vbase_types): Accept binfo argument, too.
+
+Tue Mar 15 19:22:05 1994 Kung Hsu <kung@mexican.cygnus.com>
+
+ * decl.c (complete_array_type): complete TYPE_DOMAIN of the
+ initializer also, because back-end requires it.
+
+Tue Mar 15 15:33:31 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * error.c (dump_expr): Support member functions (which show up as
+ OFFSET_REFs).
+
+Mon Mar 14 16:24:36 1994 Mike Stump <mrs@cygnus.com>
+
+ * init.c (build_new): Set the return type of multidimensional
+ news correctly.
+
+Fri Mar 11 15:35:39 1994 Kung Hsu <kung@mexican.cygnus.com>
+
+ * call.c (build_method_call): if basetype not equal to type
+ of the instance, use the type of the instance in building
+ destructor.
+
+Thu Mar 10 17:07:10 1994 Kung Hsu <kung@mexican.cygnus.com>
+
+ * parse.y (direct_notype_declarator): add push_nested_type for
+ 'template_type SCOPED_NAME' rule.
+
+Tue Mar 8 00:19:58 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y (parm): Add typed_declspec1 {absdcl, epsilon} rules.
+
+Sat Mar 5 04:47:48 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y (regcast_or_absdcl): New nonterminal to implement late
+ reduction of constructs like `int ((int)(int)(int))'.
+ (cast_expr): Use it.
+ (sub_cast_expr): Everything that can come after a cast.
+ (typed_declspecs1): typed_declspecs that are not typed_typespecs.
+ (direct_after_type_declarator): Lose PAREN_STAR_PAREN rule.
+ (direct_abstract_declarator): Replace '(' parmlist ')' rule with
+ '(' complex_parmlist ')' and regcast_or_absdcl.
+ (parmlist): Split
+ (complex_parmlist): Parmlists that are not also typenames.
+ (parms_comma): Enabler.
+ (named_parm): A parm that is not also a typename. Use declarator
+ rather than dont_see_typename abs_or_notype_decl. Expand
+ typed_declspecs inline.
+ (abs_or_notype_decl): Lose.
+ (dont_see_typename): Comment out.
+ (bad_parm): Break out abs_or_notype_decl into two rules.
+
+Fri Mar 4 18:22:39 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl2.c (reparse_decl_as_casts): New function to change parse
+ nodes for `(int)(int)(int)' from "function taking int and returning
+ function taking int and returning function taking int" to "... cast
+ to int, cast to int, cast to int".
+
+ * decl2.c (reparse_decl_as_expr): Recursive function to change
+ parse nodes for `A()()' from "function returning function returning
+ A" to "A().operator()".
+
+ * parse.y (primary): Replace `typespec LEFT_RIGHT' rule with
+ `typespec fcast_or_absdcl' rule.
+ (fcast_or_absdcl): New nonterminal to implement late reduction of
+ constructs like `A()()()()'.
+ (typename): Replace `typespec absdcl1' rule with
+ `typespec direct_abstract_declarator' rule.
+ (direct_abstract_declarator): Replace `LEFT_RIGHT type_quals' rule
+ with `fcast_or_absdcl type_quals' rule.
+
+Fri Mar 4 16:18:03 1994 Mike Stump <mrs@cygnus.com>
+
+ * tree.c (lvalue_p): Improve OFFSET_REF handling, so that it
+ matches Section 5.5.
+
+Fri Mar 4 14:01:59 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * error.c (dump_type_prefix): Don't print basetype twice for
+ pmfs.
+
+Fri Mar 4 13:24:33 1994 Mike Stump <mrs@cygnus.com>
+
+ * typeck.c (convert_arguments): Handle setHandler(A::handlerFn)
+ so that it is like setHandler(&A::handlerFn). Cures an `invalid
+ lvalue in unary `&''.
+
+Fri Mar 4 11:15:59 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * gxxint.texi (Copying Objects): New section discussing default
+ op= problems with virtual inheritance.
+
+ * decl2.c (grokoptypename): Just does grokdeclarator and
+ build_typename_overload, since the parser can't call grokdeclarator
+ directly.
+
+ * method.c (build_typename_overload): Set IDENTIFIER_GLOBAL_VALUE
+ and TREE_TYPE on generated identifiers.
+
+ * decl.c (grokdeclarator): Don't deal with TYPE_EXPRs anymore.
+
+ * parse.y (parm): Convert `const char *' to `__opPCc' here.
+
+ * error.c (dump_decl): Say sorry rather than my_friendly_aborting
+ if we can't figure out what to do.
+ (dump_type*): Likewise.
+
+ * typeck2.c (build_m_component_ref): 'component' is an expr, not
+ a decl. Also move the IS_AGGR_TYPE check after the stripping of
+ REFERENCE_TYPE.
+
+Fri Mar 4 04:46:05 1994 Mike Stump <mrs@cygnus.com>
+
+ * call.c (build_method_call): Handle b->setHandler(A::handlerFn)
+ so that it is like b->setHandler(&A::handlerFn). Cures an `invalid
+ lvalue in unary `&''.
+
+Thu Mar 3 12:38:15 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y: Add precedence specification for START_DECLARATOR.
+ (type_quals): Move before primary.
+ (typename): Move before typed_declspecs, add 'typespec absdcl1' rule.
+
+ * decl2.c (grokoptypename): Lose.
+
+ * decl.c (grokdeclarator): Parse TYPE_EXPRs in the initial scan,
+ rather than waiting until later.
+
+Wed Mar 2 14:12:23 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y (unary_expr): Use 'typename' in 'new' rules, rather
+ than expanding it inline.
+ (typename): Expand empty option of (former) absdcl inline.
+ (abs_or_notype_decl): Likewise.
+ (absdcl): Lose empty rule.
+ (conversion_declarator): New nonterminal for 'typename' of 'operator
+ typename'.
+ (operator_name): Use it instead of absdcl.
+
+ * parse.y: Add precedence declarations for SCOPED_TYPENAME,
+ TYPEOF, and SIGOF.
+ (typed_declspecs): Accept typed_typespecs, rather than typespec
+ directly. Add rules with reserved_typespecquals.
+ (reserved_declspecs): Don't accept typespecqual_reserved at the
+ beginning of the list. The typed_declspecs rule will deal with this
+ omission.
+ (declmods): Accept nonempty_type_quals, rather than TYPE_QUAL
+ directly.
+
+ * parse.y (direct_notype_declarator,
+ direct_after_type_declarator, direct_abstract_declarator): Split up
+ the declarator1 nonterminals to match the draft standard and avoid
+ ambiguities.
+ (new_type_id, new_declarator, direct_new_declarator,
+ new_member_declarator): New nonterminals to implement the subset of
+ 'typename' allowed in new expressions.
+ (unary_expr): Use new_type_id instead of typename.
+ (after_type_declarator1, absdcl1): Fix semantics of member pointers.
+ (abs_member_declarator, after_type_member_declarator): Lose.
+
+ * parse.y (absdcl1): Don't require parens around
+ abs_member_declarator.
+ (abs_member_declarator): Lose see_typename from rules.
+ (after_type_member_declarator): Likewise.
+
+ * tree.c (get_identifier_list): New function, containing code
+ previously duplicated in get_decl_list and list_hash_lookup_or_cons.
+ (get_decl_list): Use it.
+ (list_hash_lookup_or_cons): Likewise.
+
+ * parse.y (typed_declspecs, declmods): It's not necessary to hash
+ the declspecs on class_obstack, so don't. This way typed_typespecs
+ can reduce to typed_declspecs.
+
+Wed Mar 2 14:29:18 1994 Jason Merrill <jason@cygnus.com>
+
+ * cvt.c (build_up_reference): If we aren't checking visibility,
+ also allow base->derived conversions.
+
+Mon Feb 28 15:14:29 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * typeck.c (build_c_cast): Remove bogus hack when converting
+ to a reference type.
+
+ * cp-tree.h (lang_decl::vbase_init_list, DECL_VBASE_INIT_LIST):
+ Removed, not used.
+ (lang_stype::methods, lang_decl::next_method): New fields.
+ (CLASSTYPE_METHODS, DECL_NEXT_METHOD): New macros.
+ * decl.c (duplicate_decls): Preserve DECL_NEXT_METHOD.
+
+ * cp-tree.h, decl2.c (flag_vtable_hack): New flag.
+ * decl2.c (finish_vtable_vardecl): If flag_vtable_hack,
+ and !CLASSTYPE_INTERFACE_KNOWN, try to use the presence of
+ a non-inline virtual function to control emitting of vtables.
+ * class.c (finish_struct): Build CLASSTYPE_METHODS list.
+ * search.c (build_vbase_vtables_init): Don't assemble_external
+ (yet) if flag_vtable_hack.
+ * class.c (build_vfn_ref): Likewise.
+
+Mon Feb 28 14:54:13 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y (component_decl): Don't include "typed_declspecs
+ declarator ';'" speedup, since it breaks enums.
+
+Fri Feb 25 15:43:44 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * class.c (finish_struct): Minor optimization for building
+ fn_fields list.
+
+Fri Feb 25 15:23:42 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (start_function): Fix detection of function overloading.
+
+Thu Feb 24 22:26:19 1994 Mike Stump <mrs@cygnus.com>
+
+ * lex.c (check_newline): #pragma interface can take a string
+ argument, just like #pragma implementation. #pragma implementation
+ checks for garbage on the line, line #pragma interface does. Main
+ input files do not auto implement like named files, #pragma
+ implementation must be used explicitly.
+
+Thu Feb 24 17:09:01 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y (components): Handle list of one again.
+ (notype_components): Likewise.
+ (after_type_declarator1): Take maybe_raises out again.
+
+ * gxxint.texi (Parser): Document additional r/r conflict.
+
+Wed Feb 23 14:42:55 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * gxxint.texi (Parser): Add node.
+
+ * Makefile.in (stamp-parse): Update expected conflict count.
+
+ * parse.y (various): Replace "declmods declarator" with "declmods
+ notype_declarator". The comment saying that "declmods declarator ';'"
+ corresponds to "int i;" was wrong; it corresponds to "const i;".
+ (component_decl): Add "typed_declspecs declarator ';'" rule; this
+ *does* correspond to "int i;". Change "declmods components" to
+ "declmods notype_components".
+ (components): Don't deal with a list of one anymore.
+ (notype_components): New nonterminal, corresponds to notype_declarator.
+ ({after_,no}type_component_decl{,0}): More new nonterminals.
+ ({after_,no}type_declarator): Fold in START_DECLARATOR token.
+ Eliminates four reduce/reduce conflicts.
+
+ (expr): Depend on nontrivial_exprlist instead of nonnull_exprlist.
+ (nontrivial_exprlist): New nonterminal: A list of at least two
+ expr_no_commas's.
+ (nonnull_exprlist): Depend on nontrival_exprlist.
+ Eliminates four reduce/reduce conflicts.
+
+ (named_class_head): Move intermediate code block into separate
+ nonterminal so that we can stick %prec EMPTY on it.
+
+ Add more %prec EMPTY's to eliminate remaining shift/reduce
+ conflicts.
+
+ (after_type_declarator): Add maybe_raises to fndecl rules.
+ (after_type_declarator_no_typename): Remove.
+ For correctness.
+
+ Document remaining reduce/reduce conflicts.
+
+Tue Feb 22 12:10:32 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * search.c (get_base_distance): Only bash BINFO_INHERITANCE_CHAIN
+ (TYPE_BINFO (type)) if we care about the path.
+
+ * tree.c (lvalue_p): A COND_EXPR is an lvalue if both of the
+ options are.
+
+Mon Feb 21 19:59:40 1994 Mike Stump <mrs@cygnus.com>
+
+ * Makefile.in (mostlyclean): lex.c is a source file, don't
+ remove.
+
+Sat Feb 19 01:27:14 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * parse.y: Eliminate 20 shift/reduce conflicts.
+
+Fri Feb 18 11:49:42 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * pt.c (type_unification): Add subr argument; if set, it means
+ that we are calling ourselves recursively, so a partial match is OK.
+ (unify): Support pointers to methods and functions.
+ (tsubst): Support method pointers.
+ * decl.c (build_ptrmemfunc_type): No longer static, so that
+ tsubst can get at it.
+
+ * init.c (is_aggr_typedef): Pretend template type parms are
+ aggregates.
+ * decl2.c (build_push_scope): If cname refers to a template type
+ parm, just grin and nod.
+
+ * call.c (build_overload_call_real): Pass subr argument to
+ type_unification.
+ * pt.c (do_function_instantiation): Likewise.
+ * class.c (instantiate_type): Likewise.
+
+ * search.c (get_base_distance): If BINFO is a binfo, use it and
+ don't mess with its BINFO_INHERITANCE_CHAIN.
+
+ * cvt.c (convert_to_reference): Fix temporary generation.
+ If ambiguous, return error_mark_node.
+
+ * init.c (build_new): Put back some necessary code.
+
+Thu Feb 17 15:39:47 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * init.c (build_new): Deal with array types properly.
+
+ * search.c (get_binfo): Become a shell for get_base_distance.
+ (get_binfo_recursive): Lose.
+ (get_base_distance_recursive): Find the path to the via_virtual base
+ that provides the most access.
+ (get_base_distance): Likewise.
+
+ * parse.y (explicit_instantiation): Syntax is 'template class
+ A<int>', not 'template A<int>'.
+
+ * typeck.c (convert_for_initialization): Remove bogus warning.
+
+ * parse.y (datadef): Revert patch of Oct 27.
+
+Thu Feb 17 15:12:29 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * class.c (build_vfn_ref): Cast delta field to ptrdiff_type_node,
+ rather than integer_type_node. Does wonders for the Alpha.
+
+Thu Feb 17 13:36:21 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (build_ptrmemfunc_type): Make sure that the pmf type
+ goes onto the same obstack as its target type.
+
+Wed Feb 16 00:34:46 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cvt.c (convert_to_reference): If converting via constructor
+ on local level, go back to build_cplus_new approach.
+
+ * tree.c (build_cplus_new): If with_cleanup_p, set cleanup slot
+ to error_mark_node to prevent expand_expr from building a cleanup
+ for this variable.
+
+ * lex.c (default_assign_ref_body): Return *this from the memcpy
+ version, too.
+
+ * decl.c (grok_reference_init): Just return if called with
+ error_mark_node, don't worry about initializing non-const reference
+ with temporary.
+
+ * cvt.c (convert_to_reference): Do the right thing for
+ non-aggregate reference conversions, pedwarn when generating a
+ non-const reference to a temporary.
+
+ * class.c (finish_struct): TYPE_HAS_COMPLEX_{INIT,ASSIGN}_REF and
+ TYPE_NEEDS_CONSTRUCTING all depend on TYPE_USES_VIRTUAL_BASECLASSES
+ again.
+
+Tue Feb 15 19:47:19 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (grok_reference_init): Pawn off a lot of the work on
+ convert_to_reference. Generally do the right thing.
+
+ * cvt.c (convert_to_reference): Conform to the initial comment;
+ i.e. don't create temps if decl != error_mark_node. Handle
+ cleanups better for temps that do get created. Don't pretend
+ that we can use an 'A' to initialize a 'const double &' just by
+ tacking on a NOP_EXPR. Support LOOKUP_SPECULATIVELY.
+
+ * call.c (build_method_call): Set TREE_HAS_CONSTRUCTOR on
+ constructor calls.
+
+Mon Feb 14 14:50:17 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (grok_reference_init): Make a temporary for initializing
+ const reference from constant expression.
+
+Mon Feb 14 11:31:31 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * cp-tree.h, decl.c (set_identifier_local_value): Deleted function.
+ * decl.c (pushdecl): Define decl in correct binding_level
+ (which isn't always the inner_binding_level).
+
+ * cvt.c (build_up_reference): Don't ever call expand_aggr_init.
+ It's ugly, and I don't think it's the right thing to do.
+
+ * cp-tree.h, class.c, decl.c, decl2.c, sp/search.c:
+ Remove NEW_CLASS_SCOPING, assuming it is always 1.
+ * decl.c (pop_decl_level): Removed; manually inlined.
+
+Sun Feb 13 19:04:56 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * class.h (candidate): Add basetypes field.
+
+ * call.c (build_method_call): Do access checking after choosing a
+ function, not before.
+
+ * Makefile.in (cvt.o, call.o, method.o): Depend on class.h.
+ (mostlyclean): Remove ../cc1plus.
+
+Fri Feb 11 11:52:26 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * class.c (finish_struct): Don't allow adjusting access to a field
+ of a base class if a local field has the same name.
+
+ * error.c (dump_type_prefix): Output basetype for METHOD_TYPEs.
+
+hu Jan 13 17:55:51 EST 1994 Gnanasekaran Swaminathan <gs4t@virginia.edu>
+
+ * cp-tree.h (DESTRUCTOR_NAME_P): do not confuse AUTO_TEMP names
+ with destructor names when either NO_DOLLAR_IN_LABEL or
+ NO_DOT_IN_LABEL are not defined.
+
+ Now `template <class T, T f(T&), const T*> class A {...}' works.
+
+ * pt.c (grok_template_type): substitute template parm types
+ with actual types in complex type as well.
+ (coerce_template_parms): update the grok_template_type ()
+ function call.
+
+ * pt.c (tsubst): Traverse method list using DECL_CHAIN.
+
+ * decl.c (grok_op_properties): Allow operator++/-- to have
+ default arguments.
+
+ * typeck2.c (store_init_value): Don't abort when called to
+ initialize a type that needs constructing with a CONSTRUCTOR.
+
+ * init.c (expand_aggr_init_1, CONSTRUCTOR case): If
+ store_init_value fails, build and expand an INIT_EXPR. If
+ store_init_value succeeds, call expand_decl_init.
+
+Fri Feb 11 02:49:23 1994 Mike Stump <mrs@cygnus.com>
+
+ * class.c (build_vbase_path): Use complete_type_p instead of
+ resolves_to_fixed_type_p to determine if the virtual bases are in
+ their right place for the type of expr. Cures problem of thinking a
+ virtual base class is one place, when it is in fact someplace else.
+
+Fri Feb 11 00:26:46 1994 Mike Stump <mrs@cygnus.com>
+
+ * init.c (resolve_offset_ref): Make sure we first convert to
+ intermediate type, if given, when dealing with members off `this'.
+ Solves an incorrrect `type `foo' is not a base type for type
+ `multiple'' when it is infact, a base type.
+
+Thu Feb 10 21:49:35 1994 Mike Stump <mrs@cygnus.com>
+
+ * class.c (modify_other_vtable_entries): Use get_binfo, instead
+ of binfo_value. Solves problem with compiler giving a `base class
+ `B' ambiguous in binfo_value (compiler error)' on complex MI
+ herarchies, when a virtual function is first defied in a virtual
+ base class.
+
+Thu Feb 10 17:19:32 1994 Mike Stump <mrs@cygnus.com>
+
+ * class.c (build_vbase_path): Don't complain about ambiguous
+ intermediate conversion when converting down to a virtual base
+ class, even if they might seem to be ambiguous.
+
+Thu Feb 10 12:18:26 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck2.c (build_functional_cast): #if 0 out constructor
+ inheritance code, improve error messages.
+
+ * class.c (finish_base_struct): Complain about base with only
+ non-default constructors in derived class with no constructors.
+
+ * decl.c (grokdeclarator): Fix detection of virtual new/delete.
+
+Wed Feb 9 22:02:32 1994 Mike Stump <mrs@cygnus.com>
+
+ * search.c (build_mi_virtuals, add_mi_virtuals,
+ report_ambiguous_mi_virtuals): Removed unneeded code.
+ * class.c (finish_struct_bits): Likewise.
+
+Wed Feb 9 11:27:17 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * pt.c (end_template_instantiation): Push decl before
+ pop_from_top_level.
+
+ * typeck2.c (build_m_component_ref): Make sure datum is of
+ aggregate type.
+
+ * init.c (get_type_value): New function, returns
+ IDENTIFIER_TYPE_VALUE or IDENTIFIER_CLASS_TYPE_VALUE or NULL_TREE.
+
+ * call.c (build_method_call): Don't die on call to destructor for
+ non-type.
+
+ * decl.c (grokdeclarator): Complain about virtual op new and op
+ delete, make static virtuals unvirtual instead of unstatic.
+
+ * typeck.c (build_c_cast): Also call default_conversion on
+ methods.
+
+ * decl.c (grokdeclarator): Don't complain about anonymous
+ bitfields.
+
+ * parse.y (simple_stmt, for loops): Move the continue point after
+ the cleanups.
+
+ * class.c (finish_struct): Fix setting of
+ TYPE_HAS_COMPLEX_INIT_REF.
+
+Tue Feb 8 13:21:40 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * init.c (build_new): Deal with `new double (1)'.
+
+ * class.c (finish_struct): TYPE_HAS_COMPLEX_*_REF are supersets of
+ TYPE_HAS_REAL_*_REF, but TYPE_HAS_COMPLEX_INIT_REF is independent of
+ TYPE_NEEDS_CONSTRUCTING.
+
+ * decl.c (duplicate_decls): Propagate access decls.
+
+ * typeck2.c (process_init_constructor): Accept empty_init_node
+ for initializing unions.
+
+ * class.c, lex.c, cp-tree.h: Use
+ TYPE_HAS_COMPLEX_ASSIGN_REF where TYPE_HAS_REAL_ASSIGN_REF was used
+ before, use TYPE_HAS_COMPLEX_INIT_REF for TYPE_NEEDS_CONSTRUCTING in
+ some places.
+
+ * decl.c (finish_decl): Don't complain about uninitialized const
+ if it was initialized before.
+
+Mon Feb 7 18:12:34 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * lex.c (default_assign_ref_body): Don't deal with vbases for
+ now.
+
+ * decl.c (finish_decl): Fix reversed logic for objects and other
+ things that need to be constructed but have no initializer.
+
+ * class.c (finish_struct): Don't set TYPE_HAS_* flags that are
+ set by grok_op_properties or finish_decl.
+
+ * decl.c: Don't warn about extern redeclared inline unless
+ -Wextern-inline is given.
+ * decl2.c (lang_decode_option): Likewise.
+ * cp-tree.h: Likewise.
+
+Mon Feb 7 17:29:24 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * decl.c (pushdecl_with_scope): Fix thinko. Add forward
+ declaration.
+
+ * decl.c (pushdecl_with_scope): New function.
+ * decl.c (pushdecl_top_level): Use new function.
+ * decl.c (pushtag): Initialize newdecl.
+ * decl.c (pushtag): Push new type decl into correct scope.
+
+Mon Feb 7 14:42:03 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * call.c, cvt.c, init.c, search.c, cp-tree.h:
+ Eradicate LOOKUP_PROTECTED_OK.
+
+Mon Feb 7 13:57:19 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * decl.c (pushtag, xref_tag), cp-tree.h: Add extra parameter
+ 'globalize' to signify implicit declarations.
+ * decl.c (globalize_nested_type, maybe_globalize_type): Removed.
+ * decl.c (set_identifier_type_value_with_scope): New function.
+ * decl.c (set_identifier_local_value): Simplify.
+ * spew.c (yylex, do_addr): Modify to return a _DEFN if a
+ forward declaration (followed by ';' and not preceded by 'friend').
+ * class.c, decl.c, except.c, init.c, parse.y,
+ pt.c, search.c: Add new argument to calls to xref_tag and
+ pushtag.
+
+Mon Feb 7 00:22:59 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-tree.h (ACCESSIBLY_UNIQUELY_DERIVED_P): New macro, means what
+ ACCESSIBLY_DERIVED_FROM_P meant before.
+ (ACCESSIBLY_DERIVED_FROM_P): Now disregards ambiguity.
+
+ * cvt.c (build_up_reference): Call get_binfo with PROTECT == 1.
+
+ * search.c (get_base_distance_recursive): Members and friends of
+ a class X can implicitly convert an X* to a pointer to a private or
+ protected immediate base class of X.
+ (get_binfo_recursive): Likewise.
+ (get_base_distance): Ignore ambiguity if PROTECT < 0.
+ (get_binfo): Lose multiple values of PROTECT.
+ (compute_access): Protected is OK if the start of the
+ search is an accessible base class of current_class_type.
+
+ * method.c (build_opfncall): Do check access on operator new here.
+
+ * decl.c (finish_function): Don't check access on operator new
+ here.
+
+Sun Feb 6 14:06:58 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (xref_tag): The base of a derived struct is NOT always
+ public. Duh.
+
+ * pt.c (do_explicit_instantiation): New function, called from
+ parser to do explicit function instantiation.
+ (type_unification): Allow the args list to be terminated with
+ void_list_node.
+ (do_pending_expansions): Look at i->interface for non-member
+ templates.
+
+ * parse.y (datadef): Move explicit_instantiation here.
+ (structsp): From here.
+ (datadef): Complain about `int;'.
+
+Sun Feb 6 12:33:18 1994 Per Bothner <bothner@kalessin.cygnus.com>
+
+ * pt.c (end_template_instantiation), cp-tree.h: Remove unused
+ second parameter, and simplify first from a TREE_LIST where
+ we only care about its TREE_VALUE to just the value (an IDENTIFIER).
+ * pt.c (instantiate_member_templates): Simplify argument list
+ from a TREE_LIST to just an IDENTIFIER.
+ * lex.c (yyprint): PRE_PARSED_CLASS_DECL is now just an IDENTIFIER.
+ * parse.y (template_instantiate_once): Simplify accordingly.
+ * decl.c (inner_binding_level): New. Use various places to
+ simplify.
+
+Sun Feb 6 02:49:37 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck2.c (build_functional_cast): int() -> int(0).
+
+Sat Feb 5 00:53:21 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * class.c (finish_struct): Don't do a bitwise copy for op= if the
+ class has a virtual function table.
+
+ * typeck.c (convert_for_initialization): Restore warnings about
+ not using defined op=. Should really be my_friendly_aborts, I
+ s'pose.
+
+Fri Feb 4 14:21:00 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * class.c (finish_struct): Tidy up conditions for doing bitwise
+ copies of objects.
+
+ * decl.c (build_default_constructor): #if 0 out.
+
+ * *: Eradicate TYPE_GETS_{ASSIGNMENT,ASSIGN_REF,CONST_ASSIGN_REF,
+ CONST_INIT_REF}, TYPE_HAS_REAL_CONSTRUCTOR.
+
+ * decl.c (grokdeclarator): Don't return void_type_node for
+ friends being defined here.
+
+ * init.c (perform_member_init): Only do the init if it's useful.
+
+ * lex.c (default_copy_constructor_body): If we don't need to do
+ memberwise init, just call __builtin_memcpy.
+ (default_assign_ref_body): Likewise.
+
+ * decl.c (grokdeclarator): If friendp && virtualp, friendp = 0.
+
+Fri Feb 4 13:02:56 1994 Mike Stump <mrs@cygnus.com>
+
+ * lex.c (reinit_parse_for_method, cons_up_default_function):
+ Don't give warn_if_unknown_interface warning when it came from a
+ system header file.
+ * pt.c (end_template_decl, instantiate_template): Likewise.
+ * decl.c (start_decl): Likewise.
+
+Fri Feb 4 00:41:21 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (grokdeclarator): Don't try to set TYPE_WAS_ANONYMOUS on
+ enums.
+
+ * decl2.c (constructor_name_full): Use IS_AGGR_TYPE_CODE instead of
+ IS_AGGR_TYPE, since we don't know it's a type.
+
+Thu Feb 3 11:36:46 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (grokdeclarator): Don't complain about anonymous unions.
+
+ * cp-tree.h (TYPE_WAS_ANONYMOUS): This struct was originally
+ anonymous, but had a name given to it by a typedef.
+
+ * decl.c (grokdeclarator): When renaming an anonymous struct, set
+ TYPE_WAS_ANONYMOUS.
+
+ * decl2.c (constructor_name_full): Use TYPE_WAS_ANONYMOUS.
+
+ * cp-tree.h (DECL_UNDEFINED_FRIENDS): #if 0 out.
+
+ * init.c (xref_friend): Don't set up DECL_UNDEFINED_FRIENDS.
+ (embrace_waiting_friends): Don't use DECL_UNDEFINED_FRIENDS.
+
+ * decl.c (grokdeclarator): Set TYPE_NESTED_NAME properly on nested
+ anonymous structs that get typedef'd.
+
+ * decl.c (grokdeclarator): Always return void_type_node for
+ friends.
+
+ * error.c (dump_function_decl): Don't use DECL_CLASS_CONTEXT for
+ friends.
+ (dump_function_decl): Don't print out default args for
+ a function used in an expression.
+
+ * decl.c (grokdeclarator): Give error on abstract declarator used
+ in an invalid context (i.e. `void (*)();').
+
+ * error.c (cp_line_of): Support _TYPE nodes.
+ (cp_file_of): Likewise.
+
+ * cvt.c (build_up_reference): Don't abort if passed a SAVE_EXPR;
+ it can happen for the RHS of an assignment stmt where the LHS is
+ a COND_EXPR.
+
+ * init.c (expand_aggr_init_1): Deal with bracketed initializer
+ lists properly.
+
+ * class.c (finish_struct): Deal with enumerators and typedefs
+ again.
+
+Wed Feb 2 11:30:22 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * class.c (finish_struct): Tidy up loop over fields.
+
+ * errfn.c (cp_thing): Don't advance twice after a format.
+
+ * class.c (finish_struct): Complain about needing a constructor
+ if a member has only non-default constructors, and don't try to
+ generate a default constructor.
+
+ * decl.c (finish_decl): Also do the constructor thing if
+ TYPE_NEEDS_CONSTRUCTING is set (for arrays).
+
+ * search.c (unuse_fields): New function: mark all fields in this
+ type unused.
+ (dfs_unuse_fields): Helper function.
+
+ * class.c (pushclass): If the new class is the same as the old
+ class, still unuse the fields.
+ (unuse_fields): Move to search.c.
+
+ * decl.c (grok_op_properties): Add friendp argument.
+ (grokfndecl): Pass it.
+ (start_method): Likewise.
+
+ * decl2.c (delete_sanity): Add use_global_delete parameter to catch
+ ::delete calls.
+
+ * parse.y (unary_expr): Pass new parameter to delete_sanity.
+
+ * lex.c (default_copy_constructor_body): Don't choke if the union
+ has no fields.
+ (default_assign_ref_body): Likewise.
+
+ * call.c (compute_conversion_costs_ansi): Do the right thing for
+ ellipsis matches.
+
+ * decl.c (push_to_top_level): Optimize.
+
+ * decl.c (start_function): Look for the lexical scope of a friend
+ in DECL_CLASS_CONTEXT.
+
+ * init.c (do_friend): Set DECL_CLASS_CONTEXT on global friends.
+
+Tue Feb 1 15:59:24 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-tree.h (TREE_GETS_PLACED_NEW): New macro.
+
+ * init.c (init_init_processing): Don't assign BIN/BID to the
+ IDENTIFIER_GLOBAL_VALUEs of their respective operators.
+ (build_new): Check TREE_GETS_PLACED_NEW.
+
+ * decl.c (grok_op_properties): Don't set TREE_GETS_NEW for a decl of
+ op new with placement, set TREE_GETS_PLACED_NEW.
+
+ * cp-tree.h (ANON_UNION_P): New macro. Applies to decls.
+
+ * class.c (finish_struct): Don't treat anonymous unions like
+ other aggregate members. Do synthesize methods for unions without
+ a name, since they may or may not be "anonymous unions".
+
+ * decl2.c (grok_x_components): Wipe out memory of synthesized methods
+ in anonymous unions.
+
+ * lex.c (default_copy_constructor_body): Support unions.
+ (default_assign_ref_body): Likewise.
+
+Mon Jan 31 12:07:30 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-tree.h: Fix documentation of LOOKUP_GLOBAL, add prototypes.
+
+ * error.c (args_as_string): New function (%A), like type_as_string
+ except NULL_TREE -> "..."
+
+ * call.c (build_overload_call_real): Fix for new overloading.
+
+ * decl.c (grok_op_properties): Set all of the TYPE_OVERLOADS_* flags
+ here.
+
+ * parse.y (operator_name): Instead of here.
+
+ * typeck2.c (build_functional_cast): Treat a TREE_LIST as a list
+ of functions.
+
+ * call.c (build_overload_call_real): Support LOOKUP_SPECULATIVELY.
+
+ * method.c (build_opfncall): Don't need to massage return value
+ any more, call build_overload_call with all flags.
+
+ * typeck.c (build_x_binary_op): Put back speculative call to
+ build_opfncall.
+ (build_x_unary_op): Likewise.
+ (build_x_conditional_expr): Likewise.
+
+Mon Jan 31 10:00:30 1994 Mike Stump <mrs@cygnus.com>
+
+ * cvt.c (build_type_conversion_1): Change call to pedwarn into
+ warning, and conditionalize upon warn_cast_qual.
+
+Fri Jan 28 11:48:15 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * search.c (lookup_field): If xbasetype is a binfo, copy it to
+ avoid clobbering its inheritance info.
+
+ * call.c (build_method_call): Don't overwrite basetype_path with
+ TYPE_BINFO (inst_ptr_basetype) if they have the same type.
+
+ * search.c (compute_access): Fix handling of protected inheritance
+ and friendship with the enclosing class.
+
+ * typeck2.c (store_init_value): Allow passing of TREE_CHAIN for
+ initialization of arbitrary variable.
+
+ * typeck2.c (build_functional_cast): Only try calling a method if
+ one exists.
+
+ * decl.c (grokdeclarator): Move handling of constructor syntax
+ initialization into first loop for generality.
+ (parmlist_is_random): Lose.
+
+ * lex.c (cons_up_default_function): Set TREE_PARMLIST on arguments
+ to default function.
+
+Thu Jan 27 19:26:51 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (grokparms): Abort if we get called with something we don't
+ expect.
+
+Thu Jan 27 17:37:25 1994 Mike Stump <mrs@cygnus.com>
+
+ * call.c (build_overload_call_real): Change argument complain to
+ flags to match style of rest of code. Pass it down to
+ build_function_call_real as necessary.
+ * call.c (build_overload_call, build_overload_call_maybe): Change
+ argument complain to flags to match style of rest of code.
+ * cp-tree.h (build_function_call_real): Added fourth flags
+ argument.
+ * cvt.c (convert_to_reference): Only give warning messages, if
+ LOOKUP_COMPLAIN is set.
+ * typeck.c (build_x_function_call): Change simple complain
+ argument to build_overload_call_maybe and build_overload_call, to
+ LOOKUP_COMPLAIN to match style of rest of code.
+ * typeck2.c (build_functional_cast): Likewise.
+ * typeck.c (build_function_call_real): Add flags, so that we can
+ not complain, if we don't want to complain. Complain about
+ arguments, if we are complaining, otherwise don't.
+ * typeck.c (build_function_call, build_function_call_maybe):
+ Stick in flags argument.
+ * typeck.c (build_x_binary_op, build_x_unary_op,
+ build_x_conditional_expr, build_x_compound_expr): Follow style of
+ build_x_indirect_ref, as it is more correct and more common.
+
+Thu Jan 27 14:36:20 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * call.c (build_method_call): Don't check for being called with
+ a pointer.
+
+ * decl2.c (finish_file): Don't play with DECL_CLASS_CONTEXT for the
+ static initializer function.
+
+ * init.c (build_member_call): Use convert_force here, too.
+
+ * search.c (compute_access): Only treat static members specially
+ if they are referenced directly.
+
+Wed Jan 26 18:28:14 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * gxxint.texi (Access Control): New node.
+
+ * search.c (current_scope): New function; returns whichever of
+ current_class_type and current_function_decl is the most nested.
+ (compute_access): Total overhaul to make it clearer and more
+ correct. Don't use the cache for now; in the only situation where
+ it was used before, it gained nothing. This frees up three of the
+ DECL_LANG_FLAGs for possible other use!
+
+ * cp-tree.h: #if 0 out DECL_PUBLIC & friends.
+
+ * typeck.c (build_component_ref_1): Don't check DECL_PUBLIC.
+
+ * call.c (build_method_call): Use convert_force to cast `this' --
+ rely on the access checking for the method itself.
+
+ * init.c (is_friend): Do the nesting thing, handle types. I am
+ my own friend.
+ (is_friend_type): Become a shell for is_friend.
+ (add_friend): Never stick in ctype.
+ Why are the friendship functions in init.c, anyway?
+
+Wed Jan 26 17:50:00 1994 Mike Stump <mrs@cygnus.com>
+
+ * cvt.c (build_type_conversion_1): Don't conditionalize call to
+ pedwarn upon pedantic.
+
+Wed Jan 26 17:20:46 1994 Mike Stump <mrs@cygnus.com>
+
+ * cvt.c (convert_to_reference): Add 8.4.3 checking so that one
+ gets a warning if one tries to initialize a non-const & from a
+ non-lvalue.
+ * cvt.c (convert_to_reference): Use %P format for argument
+ numbers in warnings.
+
+Wed Jan 26 14:35:06 1994 Mike Stump <mrs@cygnus.com>
+
+ * init.c (build_delete): Follow style in call.c to construct the
+ virtual call to the desctructor, as that code is right. Fixes a
+ problem of the compiler saying a pointer conversion is ambiguous.
+
+Wed Jan 26 11:28:14 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-tree.h (VTABLE_NAME_P): Change other occurrence of
+ VTABLE_NAME_FORMAT to VTABLE_NAME.
+
+ * *: s/visibility/access/g
+
+Tue Jan 25 18:39:12 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (build_modify_expr): Don't smash references if INIT_EXPR.
+
+Tue Jan 25 13:54:29 1994 Mike Stump <mrs@cygnus.com>
+
+ * init.c (build_delete): Back out Jan 17th & 18th pacthes, as
+ they break libg++.
+
+Tue Jan 25 13:11:45 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * decl.c (duplicate_decls): Fix pointer arithmetic.
+
+Mon Jan 24 15:50:06 1994 Chip Salzenberg <chip@fin.uucp>
+
+ [ cp-* changes propagated from c-* changes in 940114 snapshot ]
+ * cp-parse.y (maybe_attribute): Allow multiple __attribute__
+ clauses on a declaration.
+
+Mon Jan 24 17:06:23 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * class.c (finish_struct): Do synthesize methods for anon
+ structs, just not unions.
+
+Mon Jan 24 13:50:13 1994 Kung Hsu <kung@mexican.cygnus.com>
+
+ * decl.c (xref_tag): handle anonymous nested type.
+ * decl.c (globalize_nested_type): add no globalize bit check.
+ * spew.c (hack_more_ids) : templated nested decl not push top
+ level.
+
+ * parse.y : get rid of 'goto do_components'. It is much better
+ for debugging.
+
+ * decl.c (is_anon_name): get rid of the function and use the
+ macro ANON_AGGRNAME_P.
+ * pt.c : ditto.
+
+Fri Jan 21 14:06:02 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * class.c (finish_struct): Don't synthesize any methods for
+ anonymous structs/unions.
+
+ * typeck.c (build_modify_expr): Don't treat pmf's as class objects.
+
+Thu Jan 20 18:56:46 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * method.c (build_opfncall): Call build_indirect_ref on
+ synthesized instance for operator delete.
+
+ * pt.c (type_unification): Don't abort if called with a list of
+ types in ARGS.
+
+ * class.c (instantiate_type): Deal with function templates.
+
+Thu Jan 20 16:55:35 1994 Jim Wilson <wilson@sphagnum.cygnus.com>
+
+ * Makefile.in (CC): Default to cc not gcc.
+
+Thu Jan 20 13:47:54 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (build_modify_expr): Call constructor if appropriate.
+
+ * decl.c (push_to_top_level): Clear out class-level bindings cache.
+
+Wed Jan 19 13:51:22 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * call.c (resolve_scope_to_name): Work recursively (previously only
+ looked down one level).
+
+ * lex.c (do_pending_inlines): If we're still dealing with the last
+ batch of inlines, don't start working on a new one.
+
+ * Makefile.in (stamp-parse): Update conflict count.
+ (TAGS): Fix.
+
+ * parse.y (explicit_instantiation): New rule; implements
+ 'template A<int>' syntax (though not 'template foo(int)' yet).
+ (structsp): Add explicit_instantiation.
+
+Tue Jan 18 13:53:05 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * class.c (finish_struct, etc.): Simplify decision to synthesize
+ a destructor.
+
+ * call.c, class.c, cp-tree.h, decl.c, init.c,
+ ptree.c, search.c, typeck.c, typeck2.c: Nuke
+ TYPE_NEEDS_CONSTRUCTOR (change all calls to TYPE_NEEDS_CONSTRUCTING).
+ * init.c (expand_aggr_init_1): Don't try non-constructor methods
+ of initializing objects.
+ (build_new): Don't try other methods if the constructor lookup fails.
+
+ * class.c (finish_base_struct): Set cant_have_default_ctor and
+ cant_synth_copy_ctor properly.
+ (finish_struct): Likewise.
+
+Mon Jan 17 13:58:18 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * typeck.c (build_modify_expr_1): #if 0 out again.
+ (build_modify_expr): #if 0 out memberwise init code again.
+
+ * lex.c (default_copy_constructor_body): Be const-correct.
+ (default_assign_ref_body): Likewise.
+
+ * init.c (perform_member_init): Use TYPE_HAS_CONSTRUCTOR to decide
+ whether or not to use it, rather than TYPE_NEEDS_CONSTRUCTING.
+ (expand_aggr_init): Disable silent conversion from initializer list
+ to list of args for a constructor.
+
+ * class.c (base_info): Lose needs_default_ctor.
+ (finish_base_struct): Likewise.
+ (finish_struct): Likewise.
+
+ * decl.c (init_decl_processing): Don't turn off flag_default_inline
+ just because flag_no_inline is on.
+ (finish_decl): Use TYPE_HAS_CONSTRUCTOR to decide to use
+ constructor.
+
+ * class.c (finish_struct): Synthesize default ctor whenever
+ allowed.
+
+ * Makefile.in (TAGS): Don't try to run etags on cp-parse.y.
+
+Sat Jan 15 18:34:33 1994 Mike Stump <mrs@cygnus.com>
+
+ * Makefile.in, configure: Handle the C++ front-end in a
+ subdirectory.
+ * cp-*: Move C++ front-end to cp/*.
+
+Fri Jan 14 14:09:37 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-typeck.c (build_function_call_real): Modify to match other
+ instances of taking the address of the function.
+
+ * cp-class.c (finish_struct): Set TYPE_HAS_REAL_CONSTRUCTOR to 1 if
+ there are non-synthesized constructors.
+ Only set TYPE_NEEDS_CONSTRUCTOR if TYPE_HAS_REAL_CONSTRUCTOR.
+ Always generate copy constructor if possible.
+
+ * cp-tree.h (lang_type): Add has_real_constructor bitfield.
+ (TYPE_HAS_REAL_CONSTRUCTOR): Define.
+
+ * cp-lex.c (default_copy_constructor_body): Use init syntax
+ for all bases.
+
+ * cp-type2.c (store_init_value): Only give error for initializer list
+ if TYPE_HAS_REAL_CONSTRUCTOR.
+
+Thu Jan 13 15:38:29 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-tree.h (DECL_SYNTHESIZED): Add defn.
+ (lang_decl): Add synthesized bitfield to decl_flags.
+
+ * cp-lex.c (cons_up_default_function): Use DECL_SYNTHESIZED to mark
+ artificial methods, rather than a line # of 0.
+
+Fri Jan 14 18:25:29 1994 Kung Hsu <kung@mexican.cygnus.com>
+
+ * cp-decl (xref_tag): fix a bug in conflict type.
+ * cp-parse.y : add SCOPED_NAME for uninstantiated template nested
+ type reference.
+ * cp-spew.c (yylex) : generated SCOPED_NAME token.
+ * cp-lex.c (yyprint): handle SCOPED_NAME.
+
+Fri Jan 14 17:00:29 1994 Mike Stump <mrs@cygnus.com>
+
+ * cp-decl.c (pushdecl): Revert patch from Jan 11 19:33:03, as it is
+ not right.
+
+Thu Jan 13 14:00:35 1994 Kung Hsu <kung@mexican.cygnus.com>
+
+ * cp-decl2.c (grok_x_components): fix a bug that enum type does not
+ have type_flags.
+
+Thu Jan 13 11:39:34 1994 Mike Stump <mrs@cygnus.com>
+
+ Ensure that all vtable pointers are initialized with all the right
+ values.
+
+ * cp-class.c (is_normal): Changed to reflect new meaning of
+ CLASSTYPE_VFIELD_PARENT.
+ * cp-class.c (maybe_fixup_vptrs): Use of
+ CLASSTYPE_NEEDS_VIRTUAL_REINIT here is misguided. Use
+ BINFO_MODIFIED instead.
+ * cp-class.c (finish_struct): Changed to reflect new meaning of
+ CLASSTYPE_VFIELD_PARENT.
+ * cp-decl.c (get_binfo_from_vfield): Removed, unneeded now.
+ * cp-decl.c (finish_function): Use init_vtbl_ptrs, instead of open
+ coding it here.
+ * cp-init.c (init_vfields): Changed name to init_vtbl_ptrs, and
+ re-implement.
+ * cp-init.c (emit_base_init): Use new name init_vtbl_ptrs.
+ * cp-tree.h (vfield_parent): Changed to integer.
+ * cp-tree.h (CLASSTYPE_VFIELD_PARENT): Changed docs to reflect new
+ meaning.
+ * cp-tree.h (init_vtbl_ptrs): Added init_vtbl_ptrs.
+
+Wed Jan 12 18:24:16 1994 Kung Hsu <kung@mexican.cygnus.com>
+
+ * cp-decl.c (xref_tag): re-implement globalize nested type.
+ * cp-decl2.c (grok_x_components): ditto.
+ * cp-parse.y: ditto.
+ * cp-tree.h (lang_type): add no_globalize bit in type_flags.
+
+Wed Jan 12 14:08:09 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-decl.c (grokdeclarator): Don't set TREE_PUBLIC on friend
+ decls with a definition attached.
+
+ * cp-typeck.c (build_modify_expr): Undo previous change in the case
+ of INIT_EXPRs.
+
+Tue Jan 11 19:33:03 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-typeck.c (build_modify_expr): Replace code for generating
+ assignment semantics for classes with an error.
+ (build_modify_expr_1): #if 0 out.
+
+ * cp-decl.c (pushdecl): Patch bogus design of pushdecl
+ behavior for overloaded functions (it doesn't push anything).
+
+ * cp-class.c (finish_struct): When generating default op=,
+ set TYPE_HAS_ASSIGNMENT.
+
+Mon Jan 10 18:48:06 1994 Mike Stump <mrs@cygnus.com>
+
+ * cp-cvt.c (convert): Make {double, clashing enum} -> enum
+ invalid.
+ * cp-typeck.c (convert_for_assignment): Simplify.
+ * cp-decl2.c (warn_enum_clash): Removed.
+ * invoke.texi (-Wenum-clash): Removed.
+ * toplev.c (-Wenum-clash): Removed.
+
+Mon Jan 10 17:48:37 1994 Kung Hsu <kung@mexican.cygnus.com>
+
+ * cp-decl.c (finish_decl): fix incorrect popclass call.
+
+ * cp-decl.c (is_anon_name): new function, check whether the name
+ is anonymous name generated by compiler.
+ * cp-decl.c (grokdeclarator): allow nested SCOPE_REF
+ * cp-spew.c (hack_more_ids): handle nested type in template.
+ * cp-parse.y : handle nested type reference in uninstantiated
+ template.
+ * cp-call.c (build_method_call): handle uninstantiated template
+ case.
+ * cp-pt.c (search_nested_type_in_tmpl): new function, search nested
+ type in template.
+ * cp-pt.c (lookup_nested_type_by_name): new function, lookup nested
+ type by name.
+ * cp-pt.c (tsubst): handle nested type search by name.
+
+Mon Jan 10 14:32:18 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-init.c (build_member_call): Propagate qualifiers to new type.
+
+ * cp-call.c (build_method_call): Count functions the new way.
+
+Fri Jan 7 19:03:26 1994 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-decl.c (pushtag): Set DECL_ASSEMBLER_NAME for nested classes,
+ too.
+
+Tue Jan 4 16:45:51 1994 Kung Hsu <kung@cirdan.cygnus.com>
+
+ * cp-parse.y: change to handle whether to globalize nested class.
+ * cp-decl.c(xref_tag, maybe_globalize_type): Likewise.
+
+Mon Jan 3 22:22:32 1994 Gerald Baumgartner <gb@cygnus.com>
+
+ * Makefile.in cp-call.c cp-class.c cp-cvt.c cp-decl.c cp-decl2.c
+ cp-error.c cp-init.c cp-lex.c cp-lex.h cp-method.c cp-parse.y
+ cp-spew.c cp-tree.c cp-tree.h cp-type2.c cp-typeck.c cp-xref.c
+ gplus.gperf toplev.c: Incorporated C++ signature extension.
+ * cp-sig.c: New file, contains most of signature processing.
+ * cp-hash.h: Regenerated from gplus.gperf.
+
+ * gcc.1 g++.1: Added explanation for the `-fhandle-signatures'
+ and `-fno-handle-signatures' command line flags.
+
+ * gcc.texi: Changed the last-modification date.
+ * invoke.texi: Added `-fhandle-signatures' in the list of
+ C++ language options. Added explanation for this option.
+
+Tue Dec 28 21:10:03 1993 Mike Stump <mrs@cygnus.com>
+
+ * cp-init.c (expand_vec_init): Remove comptypes test, as it is too
+ harsh here.
+
+Tue Dec 28 13:42:22 1993 Mike Stump <mrs@cygnus.com>
+
+ * cp-pt.c (do_pending_expansions): Decide to expand a template
+ member function, based upon it's class type, not the class type of
+ the first place it was declared.
+
+Tue Dec 28 05:42:31 1993 Mike Stump <mrs@cygnus.com>
+
+ * cp-class.c (is_normal): New routine, use to determine when the
+ given binfo is the normal one. (The one that should have the simple
+ vtable name.)
+ * cp-class.c (modify_other_vtable_entries): Use DECL_ASSEMBLER_NAME
+ to check if two fndecls are `the same'. Sometimes this routine can
+ modify the main vtable, and normal should be 1, in that case, so use
+ is_normal() to determine if this is the main vtable for the class.
+ Don't recurse down virtual bases, as they are shared, and we take
+ care of them elsewhere.
+ * cp-class.c (modify_vtable_entries): If we have already updated the
+ vtable with the new virtual, don't do it again.
+ * cp-class.c (finish_struct): Set CLASSTYPE_VFIELD_PARENT as
+ appropriate. Do virtual function overriding in virtual bases, after
+ normal overriding, so that the base function list in DECL_VINDEX is
+ not overridden, before we have a chance to run through the list.
+ Use DECL_ASSEMBLER_NAME to check if two fndecls are `the same'.
+ Make sure we pass the right address into modify_vtable_entries.
+ * cp-tree.h (CLASSTYPE_VFIELD_PARENT): New field to indicate which
+ binfo is the one that has the vtable that we based our vtable on.
+
+Fri Dec 24 09:40:52 1993 Michael Tiemann <tiemann@blues.cygnus.com>
+
+ * cp-typeck.c (c_expand_start_case): Use default_conversion to
+ convert expression from reference type if necessary.
+
+Wed Dec 22 17:58:43 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-typeck.c (build_unary_op): Make sure that it's a TREE_LIST before
+ trying to read its TREE_VALUE.
+
+ * cp-class.c (finish_struct_methods): Clear DECL_IN_AGGR_P here.
+ (finish_struct): Instead of here.
+
+Tue Dec 21 14:34:25 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * cp-tree.c (list_hash_lookup_or_cons): Make sure the type doesn't
+ have TYPE_PTRMEMFUNC_P set before we try to build its
+ CLASSTYPE_ID_AS_LIST.
+ (get_decl_list): Likewise, when trying to read it.
+
+ * cp-tree.h (VTABLE_NAME): No def with NO_{DOLLAR,DOT} defined.
+ (VTABLE_NAME_P): Use it instead of VTABLE_NAME_FORMAT.
+
+Mon Dec 20 13:35:03 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * cp-typeck.c (rationalize_conditional_expr): New function.
+ (unary_complex_lvalue): Use it.
+ (build_modify_expr): Use it, since trying to do an ADDR_EXPR of it
+ with build_unary_op won't cut it. Don't wrap the COND_EXPR with a
+ SAVE_EXPR either.
+
+ * cp-decl2.c (explicit_warn_return_type): Deleted variable.
+ (lang_decode_option): Set warn_return_type, not explicit_*, for
+ -Wreturn-type and -Wall. This is what rest_of_compilation uses to
+ decide if it should go into jump_optimize or not.
+ * cp-tree.h (explicit_warn_return_type): Deleted.
+ * cp-decl.c (grokdeclarator): Use warn_return_type, not explicit_*.
+ (finish_function): Also complain about no return in a non-void fn if
+ we're being pedantic (don't rely on use of -Wreturn-type).
+
+Fri Dec 17 15:45:46 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * cp-decl.c (grokdeclarator): Forbid declaration of a function as
+ static if it's being done inside another function.
+
+ * cp-search.c (compute_visibility): Check for friendship both ways.
+
+Fri Dec 17 14:28:25 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-cvt.c (build_default_binary_type_conversion): Make error
+ messages more helpful.
+
+ * cp-error.c (op_as_string): New function, returns "operator =="
+ given EQ_EXPR or suchlike.
+
+Fri Dec 17 13:28:11 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * cp-call.c (print_n_candidates): New function.
+ (build_overload_call_real): Use it when we complain about a call
+ being ambiguous.
+
+Fri Dec 17 12:41:17 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-call.c (build_method_call): Fix checking for static call
+ context.
+
+ * cp-method.c (build_opfncall): Call build_indirect_ref on argument
+ to operator new.
+
+ * cp-init.c (build_new): Don't mess with rval when building
+ indirect ref.
+
+Thu Dec 16 16:48:05 1993 Kung Hsu <kung@cirdan.cygnus.com>
+
+ * cp-lex.c (default_assign_ref_body): add check when TYPE_NESTED_
+ NAME(type) may not be exist. It's not a problem for old compiler.
+
+Thu Dec 16 14:46:06 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * cp-tree.h (CLASSTYPE_ALTERS_VISIBILITIES_P): Delete macro, it's
+ never used for anything.
+ (struct lang_type, member type_flags): Delete field
+ `alters_visibility', and up `dummy' by 1.
+ * cp-class.c (finish_base_struct): Delete code that copies the
+ setting of CLASSTYPE_ALTERS_VISIBILITIES_P.
+ (finish_struct): Delete code that sets it.
+
+Thu Dec 16 14:44:39 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-decl.c, cp-init.c, cp-typeck.c: Fix arguments to
+ build_method_call that I messed up before.
+
+ * cp-search.c (get_base_distance): If protect > 1, allow immediate
+ private base.
+
+ * cp-class.c (finish_base_struct): Set cant_synth_* correctly.
+ (finish_struct): Likewise. Well, nigh-correctly; it won't deal
+ properly with the case where a class contains an object of an
+ ambiguous base class which has a protected op=. Should be fixed
+ when the access control code gets overhauled.
+ (finish_struct_methods): Set TYPE_HAS_NONPUBLIC_* correctly.
+
+Thu Dec 16 12:17:06 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * cp-lex.c (real_yylex): Turn the code back on that deals with
+ __FUNCTION__ and __PRETTY_FUNCTION__. Don't use lookup_name, to
+ avoid the ambiguity problems that led to it being turned off in the
+ first place.
+
+ * cp-method.c (hack_identifier): Also check for a TYPE_PTRMEMFUNC_P
+ to see if something is a method.
+
+Wed Dec 15 18:35:58 1993 Mike Stump <mrs@cygnus.com>
+
+ * cp-typeck.c (build_modify_expr): Avoid error messages on small
+ enum bit fields.
+ * cp-typeck.c (convert_for_assignment): Add missing argument to
+ cp_warning and cp_pedwarn calls.
+
+Wed Dec 15 18:25:32 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-parse.y (member_init): ANSI C++ doesn't forbid old-style base
+ initializers; it's just anachronistic.
+
+ * cp-decl.c (finish_decl): Don't require external-linkage arrays
+ to have a complete type at declaration time when pedantic.
+
+Tue Dec 14 11:37:23 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-decl.c (pushdecl): Don't set DECL_CONTEXT if it's already set.
+
+ * cp-call.c (build_method_call): Don't dereference pointer given
+ as instance.
+
+ * cp-decl.c (finish_function): Don't pass pointer to
+ build_method_call.
+ (finish_function): Likewise.
+
+ * cp-typeck.c (build_x_function_call): Likewise.
+
+ * cp-method.c (build_component_type_expr): Likewise.
+
+ * cp-init.c (build_member_call): Likewise.
+ (build_new): Likewise.
+
+Mon Dec 13 18:04:33 1993 Kung Hsu <kung@cirdan.cygnus.com>
+
+ * cp-decl.c (xref_tag): fix regression created by changes made
+ in Dec. 7 1993.
+ * cp-decl.c (xref_defn_tag): fix parallel nested class problem.
+
+Fri Dec 10 12:40:25 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * cp-call.c (compute_conversion_costs_ansi) [DEBUG_MATCHING]: Print
+ out the final evaluation of the function, so we can see if ELLIPSIS,
+ USER, and EVIL were set at the end.
+
+ * cp-call.c (convert_harshness_ansi): When the parm isn't an lvalue,
+ only go for setting TRIVIAL_CODE if we are dealing with types that
+ are compatible.
+
+Thu Dec 9 18:27:22 1993 Mike Stump <mrs@cygnus.com>
+
+ * cp-decl.c (flag_huge_objects): New flag to allow large objects.
+ * toplev.c (lang_options): Likewise.
+ * cp-decl2.c (flag_huge_objects, lang_f_options): Likewise.
+ * cp-decl.c (delta_type_node): New type for delta entries.
+ * cp-tree.h (delta_type_node): Likewise.
+ * cp-decl.c (init_decl_processing): Setup delta_type_node.
+ * cp-decl.c (init_decl_processing, build_ptrmemfunc_type): Use
+ delta_type_node instead of short_integer_type_node.
+ * cp-class.c (build_vtable_entry): Likewise.
+
+Thu Dec 9 16:19:05 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * cp-tree.h (OPERATOR_TYPENAME_P): Define outside of
+ NO_{DOLLAR,DOT} macro checks, so it always gets defined.
+ (VTABLE_NAME_P): Define for NO_DOT && NO_DOLLAR_IN_LABEL.
+
+Wed Dec 8 17:38:06 1993 Mike Stump <mrs@cygnus.com>
+
+ * cp-decl.c (finish_decl): Make sure things that can go into
+ "common", do go into common, if -fcommon is given.
+
+Wed Dec 8 13:01:54 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * cp-call.c (print_harshness) [DEBUG_MATCHING]: New function.
+ (compute_conversion_costs_ansi) [DEBUG_MATCHING]: Print out
+ argument matching diagnostics to make instantly clear what the
+ compiler is doing.
+
+ * cp-call.c (convert_harshness_ansi): If the parm isn't an lvalue,
+ then check to see if the penalty was increased due to
+ signed/unsigned mismatch, and use a TRIVIAL_CODE if it wasn't.
+
+Tue Dec 7 18:29:14 1993 Kung Hsu <kung@cirdan.cygnus.com>
+
+ * cp-decl.c (xref_tag, pushtag): Fix nested class search/resolution
+ problem.
+
+Tue Dec 7 16:09:34 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-class.c (finish_struct): Before synthesizing methods, if no
+ methods have yet been declared then set nonprivate_method. Don't
+ set non_private method after synthesizing a method.
+
+ * cp-lex.c (extract_interface_info): If flag_alt_external_templates
+ is set, tie emitted code to the location of template instantiation,
+ rather than definition.
+
+ * cp-tree.h: Declare flag_alt_external_templates.
+
+ * cp-decl2.c (lang_decode_option): Support -falt-external-templates.
+
+ * toplev.c (lang_options): Likewise.
+
+Mon Oct 4 12:50:02 1993 Chip Salzenberg <chip@fin.uucp>
+
+ [changes propagated from 930810 snapshot]
+ * cp-decl.c (init_decl_processing): Make long long available for use
+ as SIZE_TYPE and PTRDIFF_TYPE.
+ (finish_decl): Allow file-scope static incomplete array.
+ (grokdeclarator): Don't pass on const and volatile fron function
+ value type to function type.
+ Warn here for volatile fn returning non-void type.
+ * cp-parse.y (attrib): Accept attributes `volatile' with alias
+ `noreturn', and `const'.
+ * cp-typeck.c (default_conversion): Don't lose const and volatile.
+ (build_binary_op_nodefault): Generate pedantic warning for comparison
+ of complete pointer type with incomplete pointer type.
+ (build_c_cast): Be careful that null pointer constant be INTEGER_CST.
+
+Tue Dec 7 10:46:48 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-init.c (expand_vec_init): When creating a temporary for copying
+ arrays, use the type of the source, not the target.
+
+ * cp-cvt.c (convert): Pass an argument for errtype to
+ convert_to_reference.
+
+ * cp-error.c (dump_expr, COMPONENT_REF & CALL_EXPR): Deal with
+ methods, -> and `this'.
+
+Mon Dec 6 17:12:33 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-error.c (parm_as_string): New function; returns `this' or arg
+ number. Corresponds to %P.
+ (dump_expr): Deal with method calls.
+
+ * cp-cvt.c (convert_to_reference): Stop using warn_for_assignment.
+ * cp-typeck.c (convert_for_assignment): Likewise.
+ (warn_for_assignment): Lose.
+
+Mon Dec 6 11:33:35 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * cp-call.c (ideal_candidate_ansi): Delete code that was never
+ doing anything useful. Instead, sort once, and DO NOT wipe
+ out any codes with EVIL_CODE, since that's what we use as a
+ marker for the end of the list of candidates.
+
+ * cp-cvt.c (convert_to_aggr): Make sure to always set H_LEN.
+
+Mon Dec 6 12:49:17 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-init.c (get_aggr_from_typedef): New function, like
+ is_aggr_typedef but returns the _TYPE.
+
+ * cp-call.c, cp-init.c, cp-method.c: Eradicate err_name.
+
+Sun Dec 5 18:12:48 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * cp-lex.c (readescape): Pedwarn when a hex escape is out of range.
+
+Thu Nov 25 23:50:19 1993 Chip Salzenberg <chip@fin.uucp>
+
+ Delay language context change until beginning of next decl.
+
+ * cp-lex.h (c_header_level): Removed.
+ (pending_lang_change): Declared.
+ * cp-lex.c (c_header_level): Renamed from in_c_header, made static.
+ (pending_lang_change): Defined.
+ (check_newline): Rework code that recognizes line number and
+ filename changes. Instead of pushing and popping lang context,
+ increment and decrement pending_lang_change.
+ (do_pending_lang_change): Push and pop lang context according
+ to value of pending_lang_change.
+ * cp-parse.y (extdefs): Use lang_extdef instead of extdef.
+ (extdef): Same as extdef, but call do_pending_lang_change() first.
+
+Mon Nov 15 15:39:15 1993 Chip Salzenberg <chip@fin.uucp>
+
+ * cp-typeck.c (build_binary_op_nodefault): Warn for ordered
+ compare of ptr with 0 only if pedantic in both cases.
+
+Thu Nov 25 13:31:37 1993 Chip Salzenberg <chip@fin.uucp>
+
+ Reinstate the below patch, which got lost in the Cygnus merge:
+ Tue Nov 23 13:59:24 1993 Hallvard B Furuseth (hbf@durin.uio.no)
+ * cp-parse.y (maybe_type_qual): Don't fail to set $$.
+
+Wed Nov 17 19:03:30 1993 Chip Salzenberg <chip@fin.uucp>
+
+ * cp-parse.y (attrib): Allow "ident(ident)" like the C front end.
+
+Fri Oct 22 20:43:37 1993 Paul Eggert <eggert@twinsun.com>
+
+ * cp-lex.c (real_yylex): Diagnose floating point constants
+ that are too large.
+
+Wed Nov 17 19:10:37 1993 Chip Salzenberg <chip@fin.uucp>
+
+ * cp-type2.c (build_functional_cast): ARM page 16: When a class
+ and an object, function or enumerator are declared in the same
+ scope with the same name, the class name is hidden.
+
+Wed Nov 17 19:07:18 1993 Chip Salzenberg <chip@fin.uucp>
+
+ * cp-call.c (convert_harshness_ansi): Distinguish float, double,
+ and long double from each other when overloading.
+ (compute_conversion_costs_{ansi,old}, build_method_call,
+ build_overlay_call_real, convert_to_aggr): Always set and
+ always use H_LEN member of candidate structure.
+
+Mon Oct 11 23:10:53 1993 Chip Salzenberg <chip@fin.uucp>
+
+ * cp-decl.c (duplicate_decls): Note redeclarations of library
+ functions, and generate distinct warnings for them.
+
+Mon Oct 4 12:26:49 1993 Chip Salzenberg <chip@fin.uucp>
+
+ Support format warnings in G++.
+
+ * cp-tree.h: Protect against multiple inclusion.
+ Declare all public functions in c-common.c (copy from c-tree.h).
+ (STDIO_PROTO): Define.
+ (warn_format): Declare.
+ (record_format_info): Remove declaration.
+ * cp-decl.c (init_decl_processing): Call init_function_format_info.
+ * cp-decl2.c (lang_decode_option): Make "-Wall" include warn_format.
+ * cp-typeck.c (build_function_call_real): Call check_function_format.
+ (record_format_info): Remove -- obsolete stub.
+
+Sat Jul 24 12:04:29 1993 Chip Salzenberg <chip@fin.uucp>
+
+ * cp-decl.c (duplicate_decls): Don't warn for non-extern var decl
+ following an extern one (for -Wredundant-decls).
+ * cp-parse.y (primary): In statement expression case, if compstmt
+ returns something other than a BLOCK, return it unchanged.
+
+Thu Dec 2 20:44:58 1993 Chip Salzenberg <chip@fin.uucp>
+
+ * cp-decl.c (warn_extern_redeclared_static): New function made
+ from code extracted from pushdecl.
+ (duplicate_decls, pushdecl): Call new function.
+ (lookup_name_current_level): Allow for IDENTIFIER_GLOBAL_VALUE
+ to be a TREE_LIST when function is declared in 'extern "C" {}'.
+
+Fri Dec 3 16:01:10 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-class.c (duplicate_tag_error): Use cp_error.
+ (finish_base_struct): Check for ambiguity with direct base, and don't
+ generate op= or copy ctor if it exists.
+
+Fri Dec 3 15:32:34 1993 Kung Hsu <kung@cirdan.cygnus.com>
+
+ * cp-init.c (expand_member_init): when initializer name is null,
+ don't try to build it now because emit_base_init will handle it.
+
+Fri Dec 3 12:28:59 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-lex.c (init_lex): Initialize input_filename to "<internal>" for
+ code such as ExceptionHandler::operator=.
+
+Fri Dec 3 10:32:08 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-decl.c (grokdeclarator): Don't try to print out dname when
+ complaining about arrays of references if decl_context==TYPENAME,
+ since it will be null.
+
+ * cp-decl2.c: Default to flag_ansi_overloading.
+
+Thu Dec 2 18:05:56 1993 Kung Hsu <kung@cirdan.cygnus.com>
+
+ * cp-call.c (build_method_call): use binfo from instance if it's
+ different from binfo (basetype_path) passed from above.
+
+Wed Nov 17 19:14:29 1993 Chip Salzenberg <chip@fin.uucp>
+
+ cp-error.c (dump_expr): Use unsigned chars to output a
+ TREE_REAL_CST in hex.
+
+Thu Dec 2 11:05:48 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-class.c (finish_struct): Fix typo in setting
+ cant_synth_asn_ref.
+
+ * cp-tree.h (TYPE_NESTED_NAME): New macro, does
+ DECL_NESTED_TYPENAME (TYPE_NAME (NODE)).
+
+ * cp-lex.c (default_copy_constructor_body): Change
+ DECL_NAME (TYPE_NAME (btype)) to TYPE_NESTED_NAME (btype).
+ (default_assign_ref_body): Likewise.
+ (default_copy_constructor_body): Call operator= explicitly for
+ base classes that have no constructor.
+
+Thu Dec 2 10:47:15 1993 Michael Tiemann <tiemann@blues.cygnus.com>
+
+ * cp-call.c (build_method_call): If the instance variable is
+ converted to error_mark_node when we're trying to convert it to the
+ base type of a method we're looking up, return error_mark_node.
+
+Thu Dec 2 10:41:16 1993 Torbjorn Granlund <tege@cygnus.com>
+
+ * cp-typeck.c (build_binary_op_nodefault): In *_DIV_EXPR *_MOD_EXPR
+ cases, tests for unsigned operands by peeking inside a NOP_EXPR.
+
+Wed Dec 1 13:33:34 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * cp-call.c (compute_conversion_costs_ansi): Use the size of struct
+ harshness_code, not the size of short, for clearing out the
+ ansi_harshness.
+
+ * cp-call.c (print_candidates): New function.
+ (build_method_call): When we had some candidates, but didn't get a
+ usable match, don't report that we got an error with the first
+ candidate. Instead, say there were no matches, and list the
+ candidates with print_candidates. In the second pass, make sure we
+ clear out ever_seen, so we can accurately count the number of
+ functions that qualified.
+
+Wed Dec 1 09:53:59 1993 Torbjorn Granlund <tege@cygnus.com>
+
+ * cp-typeck.c (build_binary_op_nodefault): Shorten for *_MOD_EXPR
+ only if op1 is known to be != -1.
+ (build_binary_op_nodefault): Handle *_DIV_EXPR likewise.
+
+Tue Nov 30 14:07:26 1993 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * cp-method.c (hack_identifier): If the field itself is private, and
+ not from a private base class, say so.
+
+Mon Nov 29 03:00:56 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-decl.c (grokdeclarator): Always warn on initialization of
+ const member.
+
+Wed Nov 24 00:49:35 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-class.c (finish_struct): Set TYPE_GETS_CONST_* properly.
+ (finish_base_struct): Set cant_synth_asn_ref properly.
+
+ * cp-lex.c (cons_up_default_function): Add section for operator=.
+ (default_assign_ref_body): New function, mostly cribbed from
+ default_copy_constructor_body.
+
+ * cp-class.c (base_info): Add members cant_synth_copy_ctor,
+ cant_synth_asn_ref, no_const_asn_ref.
+ (finish_base_struct): Update no_const_asn_ref, note that you should
+ update cant_synth_*, propagate TYPE_GETS_ASSIGN_REF.
+ (finish_struct): Add decls for cant_synth_*, no_const_asn_ref, and
+ initialize them properly. Set no_const_asn_ref properly. Set
+ cant_synth_* in some of the situations where they should be set.
+ Propagate TYPE_GETS_ASSIGN_REF. Use cant_synth_copy_ctor. Add call
+ to cons_up_default_function for operator=.
+
+Tue Nov 23 20:24:58 1993 Mike Stump <mrs@cygnus.com>
+
+ * cp-cvt.c (convert_force): Add code to perform casting of pointer
+ to member function types.
+ * cp-typeck.c (build_ptrmemfunc): Add FORCE parameter to indicate
+ when the conversion should be done, regardless.
+ * cp-tree.h (build_ptrmemfunc): Likewise.
+ * cp-type2.c (digest_init): Likewise.
+ * cp-typeck.c (convert_for_assignment): Likewise.
+
+Tue Nov 23 18:06:58 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-error.c (dump_expr): Do the right thing for variables of
+ reference type.
+
+ * cp-decl.c (grok_op_properties): Set TYPE_HAS_ASSIGN_REF
+ and its kin properly.
+ (xref_tag): Propagate TYPE_GETS_ASSIGN_REF.
+
+Tue Nov 23 12:26:13 1993 Mike Stump <mrs@cygnus.com>
+
+ * cp-method.c (build_opfncall): Don't count pointer to member
+ functions as aggregates here, as we don't want to look up methods in
+ them. The compiler would core dump if we did, as they don't have
+ normal names.
+ * cp-typeck.c (build_indirect_ref): Improve wording on error
+ message.
+
+Mon Nov 22 14:22:23 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-decl.c (grok_op_properties): Allow operator?: with pedwarn
+ (since it's supported in other compiler bits).
+
+ * cp-method.c (report_type_mismatch): Use cp_error; ignore err_name
+ argument.
+
+ * cp-error.c (dump_function_decl): Don't print return type for
+ constructors and destructors.
+
+ * cp-cvt.c (cp_convert_to_pointer): Import code from
+ convert_to_pointer so we can return error_mark_node in the case of an
+ error, and to allow more meaningful error messages.
+ (build_type_conversion): Don't go through void* when trying
+ to convert to a pointer type.
+
+ * cp-decl.c (grokfndecl): Move call to grok_op_properties back
+ after grokclassfn so that it's dealing with the right decl.
+ (grok_op_properties): Don't assert !methodp for op new and op delete.
+
+ * cp-init.c (build_delete): Don't use TYPE_BUILT_IN (there are now
+ no uses of it in the compiler).
+
+ * cp-call.c (build_scoped_method_call): Fix for destructors of simple
+ types.
+ (build_method_call): Likewise.
+
+Fri Nov 19 12:59:38 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-tree.c (count_functions): Abstraction function.
+
+ * cp-call.c (build_overload_call_real): Deal with new overloading
+ properly, remove dead code.
+
+ * gcc.c (default_compilers): Generate and use .ii files in the
+ intermediate stage of compiling C++ source.
+
+Fri Nov 19 11:26:09 1993 Jim Wilson <wilson@sphagnum.cygnus.com>
+
+ * cp-expr.c (cplus_expand_expr): Make call_target a valid memory
+ address before using it, so it can be later safely compared.
+
+Fri Nov 12 15:30:27 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-pt.c (tsubst): Deal with new overloading.
+
+ * cp-typeck.c (fntype_p): is the arg function type?
+ (comp_target_parms): pedwarn on conversion from (anything) to (...).
+ (build_x_function_call): Deal with new overloading.
+
+ * cp-tree.c (decl_list_length): Deal with new overloading.
+ (decl_value_member): Like value_member, but for DECL_CHAINs.
+
+ * cp-decl.c (duplicate_decls): Deal with new overloading.
+ (start_decl): Likewise.
+
+ * cp-class.c (instantiate_type): Deal with new overloading.
+
+ * cp-call.c (convert_harshness_ansi): Deal with new overloading.
+ (convert_harshness_old): Deal with new overloading.
+ (build_overload_call_real): Likewise.
+
+Mon Nov 8 13:50:49 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-tree.c (get_unique_fn): New function; returns FUNCTION_DECL
+ if unambiguous, NULL_TREE otherwise.
+ (get_first_fn): Returns the first appropriate FUNCTION_DECL.
+ (is_overloaded_fn): Returns whether or not the passed tree is
+ a function or list of functions.
+
+ * cp-init.c (init_init_processing): use `get_first_fn' to find
+ the FUNCTION_DEFN for new and delete.
+
+ * cp-decl.c (push_overloaded_decl): Use new overloading strategy, cut
+ code size in half (I spit on special cases).
+
+Tue Sep 7 20:03:33 1993 Jason Merrill <jason@deneb.cygnus.com>
+
+ * cp-decl.c: Allow references and template type parameters as well
diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in
index 47cf4de18cc..7646cf66bdf 100644
--- a/gcc/cp/Make-lang.in
+++ b/gcc/cp/Make-lang.in
@@ -1,5 +1,5 @@
# Top level makefile fragment for GNU C++.
-# Copyright (C) 1994, 1995 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995, 1997 Free Software Foundation, Inc.
#This file is part of GNU CC.
@@ -74,7 +74,7 @@ C++ c++: cc1plus
g++.c: $(srcdir)/gcc.c
-rm -f $@
- ln -s $(srcdir)/gcc.c $@ || cp $(srcdir)/gcc.c $@
+ $(LN) $(srcdir)/gcc.c $@
g++spec.o: $(srcdir)/cp/g++spec.c
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/cp/g++spec.c
@@ -90,9 +90,9 @@ g++.o: $(CONFIG_H) multilib.h config.status $(lang_specs_files) g++.c
-c g++.c
# Create the compiler driver for g++.
-g++$(exeext): g++.o g++spec.o version.o choose-temp.o pexecute.o $(LIBDEPS) $(EXTRA_GCC_OBJS)
- $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ g++.o g++spec.o version.o \
- choose-temp.o pexecute.o $(EXTRA_GCC_OBJS) $(LIBS)
+g++$(exeext): g++.o g++spec.o version.o choose-temp.o pexecute.o prefix.o $(LIBDEPS) $(EXTRA_GCC_OBJS)
+ $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ g++.o g++spec.o prefix.o \
+ version.o choose-temp.o pexecute.o $(EXTRA_GCC_OBJS) $(LIBS)
# Create a version of the g++ driver which calls the cross-compiler.
g++-cross$(exeext): g++$(exeext)
@@ -101,8 +101,7 @@ g++-cross$(exeext): g++$(exeext)
cxxmain.o: cplus-dem.c demangle.h
rm -f cxxmain.c
- ln -s $(srcdir)/cplus-dem.c cxxmain.c > /dev/null 2>&1 \
- || cp $(srcdir)/cplus-dem.c cxxmain.c
+ $(LN) $(srcdir)/cplus-dem.c cxxmain.c
$(CC) -c -DMAIN $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
-DVERSION=\"$(version)\" cxxmain.c
rm -f cxxmain.c
@@ -157,21 +156,23 @@ new2.o: cc1plus $(srcdir)/cp/new2.cc
# We want to update cplib2.txt if any of the source files change...
cplib2.txt: $(CXX_LIB2SRCS) $(CXX_EXTRA_HEADERS) cplib2.ready
- if [ -f cc1plus ]; then \
- echo $(CXX_LIB2FUNCS) > cplib2.new; \
- else \
- echo "" > cplib2.new; \
- fi
+ case " $(LANGUAGES) " in \
+ *" "[cC]"++ "*) \
+ echo $(CXX_LIB2FUNCS) > cplib2.new;; \
+ *) \
+ echo "" > cplib2.new;; \
+ esac
mv -f cplib2.new cplib2.txt
# Or if it would be different.
cplib2.ready: $(GCC_PASSES) $(LANGUAGES) $(LIBGCC2_DEPS) stmp-int-hdrs
@if [ -r cplib2.txt ]; then \
- if [ -f cc1plus ]; then \
- echo $(CXX_LIB2FUNCS) > cplib2.new; \
- else \
- echo "" > cplib2.new; \
- fi; \
+ case " $(LANGUAGES) " in \
+ *" "[cC]"++ "*) \
+ echo $(CXX_LIB2FUNCS) > cplib2.new;; \
+ *) \
+ echo "" > cplib2.new;; \
+ esac; \
if cmp -s cplib2.new cplib2.txt; then true; else \
touch cplib2.ready; \
fi; \
@@ -245,6 +246,7 @@ c++.clean:
c++.distclean:
-rm -f cp/config.status cp/Makefile
-rm -f cp/parse.output
+ -rm -f g++.c
c++.extraclean:
c++.maintainer-clean:
-rm -f cp/parse.c cp/parse.h
@@ -267,8 +269,14 @@ c++.stage4: stage4-start
# distribution anyway. It then copies the files to the distdir directory.
c++.distdir:
mkdir tmp/cp
+ mkdir tmp/cp/inc
cd cp ; $(MAKE) $(FLAGS_TO_PASS) $(CXX_FLAGS_TO_PASS) parse.c hash.h
cd cp; \
for file in *[0-9a-zA-Z+]; do \
ln $$file ../tmp/cp >/dev/null 2>&1 || cp $$file ../tmp/cp; \
done
+ cd cp/inc; \
+ for file in *[0-9a-zA-Z+]; do \
+ ln $$file ../../tmp/cp/inc >/dev/null 2>&1 \
+ || cp $$file ../../tmp/cp/inc; \
+ done
diff --git a/gcc/cp/Makefile.in b/gcc/cp/Makefile.in
index b7f3826bdab..9007bf28dab 100644
--- a/gcc/cp/Makefile.in
+++ b/gcc/cp/Makefile.in
@@ -54,7 +54,7 @@ T_CFLAGS =
X_CPPFLAGS =
T_CPPFLAGS =
-CC = cc
+CC = @CC@
BISON = bison
BISONFLAGS =
LEX = flex
@@ -83,14 +83,15 @@ GCC_CFLAGS=$(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(CFLAGS)
# These are used because `configure' appends `cross-make'
# to the makefile when making a cross-compiler.
-target= ... `configure' substitutes actual target name here.
-xmake_file= ... `configure' substitutes actual x- file name here.
-tmake_file= ... `configure' substitutes actual t- file name here.
+target=@target@
+xmake_file=@dep_host_xmake_file@
+tmake_file=@dep_tmake_file@
#version=`sed -e 's/.*\"\([^ \"]*\)[ \"].*/\1/' < $(srcdir)/version.c`
#mainversion=`sed -e 's/.*\"\([0-9]*\.[0-9]*\).*/\1/' < $(srcdir)/version.c`
# Directory where sources are, from where we are.
-srcdir = .
+srcdir = @srcdir@
+VPATH = @srcdir@
# Additional system libraries to link with.
CLIB=
@@ -113,16 +114,21 @@ all: all.indirect
# sed inserts variable overrides after the following line.
####target overrides
+@target_overrides@
####host overrides
+@host_overrides@
####cross overrides
+@cross_defines@
+@cross_overrides@
####build overrides
+@build_overrides@
#
# Now figure out from those variables how to compile and link.
all.indirect: Makefile ../cc1plus
# IN_GCC tells obstack.h that we are using gcc's <stddef.h> file.
-INTERNAL_CFLAGS = $(CROSS) -DIN_GCC
+INTERNAL_CFLAGS = $(CROSS) -DIN_GCC @extra_c_flags@
# This is the variable actually used when we compile.
ALL_CFLAGS = $(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(CFLAGS) $(XCFLAGS)
@@ -191,11 +197,12 @@ CXX_TREE_H = $(TREE_H) cp-tree.h cp-tree.def
PARSE_H = $(srcdir)/parse.h
PARSE_C = $(srcdir)/parse.c
-parse.o : $(PARSE_C) $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h lex.h
+parse.o : $(PARSE_C) $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h lex.h \
+ $(srcdir)/../except.h $(srcdir)/../output.h
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(BIG_SWITCHFLAG) \
`echo $(PARSE_C) | sed 's,^\./,,'`
-CONFLICTS = expect 18 shift/reduce conflicts and 39 reduce/reduce conflicts.
+CONFLICTS = expect 19 shift/reduce conflicts and 39 reduce/reduce conflicts.
$(PARSE_H) : $(PARSE_C)
$(PARSE_C) : $(srcdir)/parse.y
@echo $(CONFLICTS)
@@ -224,15 +231,19 @@ spew.o : spew.c $(CONFIG_H) $(CXX_TREE_H) \
lex.o : lex.c $(CONFIG_H) $(CXX_TREE_H) \
$(PARSE_H) input.c $(srcdir)/../flags.h hash.h lex.h $(srcdir)/../c-pragma.h
decl.o : decl.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h \
- lex.h decl.h $(srcdir)/../stack.h
+ lex.h decl.h $(srcdir)/../stack.h $(srcdir)/../output.h \
+ $(srcdir)/../except.h
decl2.o : decl2.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h \
- lex.h decl.h
+ lex.h decl.h $(srcdir)/../expr.h ../insn-codes.h $(srcdir)/../except.h \
+ $(srcdir)/../output.h $(srcdir)/../except.h
typeck2.o : typeck2.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h
-typeck.o : typeck.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h $(RTL_H)
+typeck.o : typeck.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h $(RTL_H) \
+ $(srcdir)/../expr.h ../insn-codes.h
class.o : class.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h
call.o : call.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h class.h
friend.o : friend.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h $(RTL_H)
-init.o : init.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h $(RTL_H)
+init.o : init.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h $(RTL_H) \
+ $(srcdir)/../expr.h ../insn-codes.h
method.o : method.c $(CONFIG_H) $(CXX_TREE_H) class.h
cvt.o : cvt.c $(CONFIG_H) $(CXX_TREE_H) class.h
search.o : search.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../stack.h $(srcdir)/../flags.h
@@ -262,3 +273,32 @@ TAGS: force
.PHONY: TAGS
force:
+
+g++FAQ.info: $(srcdir)/g++FAQ.texi
+ $(MAKEINFO) --no-split $(srcdir)/g++FAQ.texi -o ./g++FAQ.info
+
+# Preprocess the texi file so that the final document will have
+# hyperlinks.
+# It would be nice if texi2html could do something like this itself.
+
+# Assumption 1: the FAQ puts all http: and ftp: links in a @file{...}.
+# Assumption 2: newsgroups are like @file{comp.foo}
+# Assumption 3: email addresses match the regexp shown.
+
+g++FAQ.html: $(srcdir)/g++FAQ.texi
+ mkdir work
+ sed -e 's?@file{\([fth]*p://[^}]*\)}?@strong{<A HREF="\1">\1</A>}?' \
+ -e 's?@file{\(comp\.[-a-z+.]*\)}?<A HREF="news:\1">\1</A>?' \
+ -e 's?@file{\(gnu\.[-a-z+.]*\)}?<A HREF="news:\1">\1</A>?' \
+ -e 's?\([.+a-zA-Z0-9-]*@@[.a-zA-Z0-9-]*[a-zA-Z0-9]\)?<A HREF="mailto:\1">\1</A>?' \
+ $(srcdir)/g++FAQ.texi > work/g++FAQ.texi
+ cd work; texi2html g++FAQ.texi
+ mv work/*.html .
+ rm -r work
+
+# Make plain-text form.
+
+g++FAQ.txt: $(srcdir)/g++FAQ.texi
+ $(MAKEINFO) --no-split --no-headers -o - $(srcdir)/g++FAQ.texi |\
+ sed '/^Concept Index/,$$d' > g++FAQ.txt
+
diff --git a/gcc/cp/NEWS b/gcc/cp/NEWS
new file mode 100644
index 00000000000..7548830396d
--- /dev/null
+++ b/gcc/cp/NEWS
@@ -0,0 +1,189 @@
+*** Changes since G++ version 2.7.2:
+
+* A public review copy of the December 1996 Draft of the ISO/ANSI C++
+ standard is now available. See
+
+ http://www.cygnus.com/misc/wp/
+
+ for more information.
+
+* g++ now uses a new implementation of templates. The basic idea is that
+ now templates are minimally parsed when seen and then expanded later.
+ This allows conformant early name binding and instantiation controls,
+ since instantiations no longer have to go through the parser.
+
+ What you get:
+
+ + Inlining of template functions works without any extra effort or
+ modifications.
+ + Instantiations of class templates and methods defined in the class
+ body are deferred until they are actually needed (unless
+ -fexternal-templates is specified).
+ + Nested types in class templates work.
+ + Static data member templates work.
+ + Member function templates are now supported.
+ + Partial specialization of class templates is now supported.
+ + Explicit specification of template parameters to function templates
+ is now supported.
+
+ Things you may need to fix in your code:
+
+ + Syntax errors in templates that are never instantiated will now be
+ diagnosed.
+ + Types and class templates used in templates must be declared
+ first, or the compiler will assume they are not types, and fail.
+ + Similarly, nested types of template type parameters must be tagged
+ with the 'typename' keyword, except in base lists. In many cases,
+ but not all, the compiler will tell you where you need to add
+ 'typename'. For more information, see
+
+ http://www.cygnus.com/misc/wp/dec96pub/template.html#temp.res
+
+ + Guiding declarations are no longer supported. Function declarations,
+ including friend declarations, do not refer to template instantiations.
+ You can restore the old behavior with -fguiding-decls until you fix
+ your code.
+
+ Other features:
+
+ + Default function arguments in templates will not be evaluated (or
+ checked for semantic validity) unless they are needed. Default
+ arguments in class bodies will not be parsed until the class
+ definition is complete.
+ + The -ftemplate-depth-NN flag can be used to increase the maximum
+ recursive template instantiation depth, which defaults to 17. If you
+ need to use this flag, the compiler will tell you.
+ + Explicit instantiation of template constructors and destructors is
+ now supported. For instance:
+
+ template A<int>::A(const A&);
+
+ Still not supported:
+
+ + Member class templates.
+ + Template template parameters.
+ + Template friends.
+
+* Exception handling support has been significantly improved and is on by
+ default. The compiler supports two mechanisms for walking back up the
+ call stack; one relies on static information about how registers are
+ saved, and causes no runtime overhead for code that does not throw
+ exceptions. The other mechanism uses setjmp and longjmp equivalents, and
+ can result in quite a bit of runtime overhead. You can determine which
+ mechanism is the default for your target by compiling a testcase that
+ uses exceptions and doing an 'nm' on the object file; if it uses __throw,
+ it's using the first mechanism. If it uses __sjthrow, it's using the
+ second.
+
+ You can turn EH support off with -fno-exceptions.
+
+* RTTI support has been rewritten to work properly and is now on by default.
+ This means code that uses virtual functions will have a modest space
+ overhead. You can use the -fno-rtti flag to disable RTTI support.
+
+* On ELF systems, duplicate copies of symbols with 'initialized common'
+ linkage (such as template instantiations, vtables, and extern inlines)
+ will now be discarded by the GNU linker, so you don't need to use -frepo.
+ This support requires GNU ld from binutils 2.8 or later.
+
+* The overload resolution code has been rewritten to conform to the latest
+ C++ Working Paper. Built-in operators are now considered as candidates
+ in operator overload resolution. Function template overloading chooses
+ the more specialized template, and handles base classes in type deduction
+ and guiding declarations properly. In this release the old code can
+ still be selected with -fno-ansi-overloading, although this is not
+ supported and will be removed in a future release.
+
+* Standard usage syntax for the std namespace is supported; std is treated
+ as an alias for global scope. General namespaces are still not supported.
+
+* New flags:
+
+ + New warning -Wno-pmf-conversion (don't warn about
+ converting from a bound member function pointer to function
+ pointer).
+
+ + A flag -Weffc++ has been added for violations of some of the style
+ guidelines in Scott Meyers' _Effective C++_ books.
+
+ + -Woverloaded-virtual now warns if a virtual function in a base
+ class is hidden in a derived class, rather than warning about
+ virtual functions being overloaded (even if all of the inherited
+ signatures are overridden) as it did before.
+
+ + -Wall no longer implies -W. The new warning flag, -Wsign-compare,
+ included in -Wall, warns about dangerous comparisons of signed and
+ unsigned values. Only the flag is new; it was previously part of
+ -W.
+
+ + The new flag, -fno-weak, disables the use of weak symbols.
+
+* Synthesized methods are now emitted in any translation units that need
+ an out-of-line copy. They are no longer affected by #pragma interface
+ or #pragma implementation.
+
+* __FUNCTION__ and __PRETTY_FUNCTION__ are now treated as variables by the
+ parser; previously they were treated as string constants. So code like
+ `printf (__FUNCTION__ ": foo")' must be rewritten to
+ `printf ("%s: foo", __FUNCTION__)'. This is necessary for templates.
+
+* local static variables in extern inline functions will be shared between
+ translation units.
+
+* -fvtable-thunks is supported for all targets, and is the default for
+ Linux with glibc 2.x (also called libc 6.x).
+
+* bool is now always the same size as another built-in type. Previously,
+ a 64-bit RISC target using a 32-bit ABI would have 32-bit pointers and a
+ 64-bit bool. This should only affect Irix 6, which was not supported in
+ 2.7.2.
+
+* new (nothrow) is now supported.
+
+* Synthesized destructors are no longer made virtual just because the class
+ already has virtual functions, only if they override a virtual destructor
+ in a base class. The compiler will warn if this affects your code.
+
+* The g++ driver now only links against libstdc++, not libg++; it is
+ functionally identical to the c++ driver.
+
+* (void *)0 is no longer considered a null pointer constant; NULL in
+ <stddef.h> is now defined as __null, a magic constant of type (void *)
+ normally, or (size_t) with -ansi.
+
+* The name of a class is now implicitly declared in its own scope; A::A
+ refers to A.
+
+* Local classes are now supported, though not inside templates.
+
+* __attribute__ can now be attached to types as well as declarations.
+
+* The compiler no longer emits a warning if an ellipsis is used as a
+ function's argument list.
+
+* Definition of nested types outside of their containing class is now
+ supported. For instance:
+
+ struct A {
+ struct B;
+ B* bp;
+ };
+
+ struct A::B {
+ int member;
+ };
+
+* On the HPPA, some classes that do not define a copy constructor
+ will be passed and returned in memory again so that functions
+ returning those types can be inlined.
+
+*** The g++ team thanks everyone that contributed to this release,
+ but especially:
+
+* Joe Buck <jbuck@synopsys.com>, the maintainer of the g++ FAQ.
+* Brendan Kehoe <brendan@cygnus.com>, who coordinates testing of g++.
+* Jason Merrill <jason@cygnus.com>, the g++ maintainer.
+* Mark Mitchell <mmitchell@usa.net>, who implemented member function
+ templates and explicit qualification of function templates.
+* Mike Stump <mrs@wrs.com>, the previous g++ maintainer, who did most of
+ the exception handling work.
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 14f84084314..d0e800c4687 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -1,7 +1,7 @@
/* Functions related to invoking methods and overloaded functions.
- Copyright (C) 1987, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 92-97, 1998 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com) and
- hacked by Brendan Kehoe (brendan@cygnus.com).
+ modified by Brendan Kehoe (brendan@cygnus.com).
This file is part of GNU CC.
@@ -31,12 +31,14 @@ Boston, MA 02111-1307, USA. */
#include "output.h"
#include "flags.h"
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
#include "obstack.h"
#define obstack_chunk_alloc xmalloc
#define obstack_chunk_free free
-extern void sorry ();
-
extern int inhibit_warnings;
extern tree ctor_label, dtor_label;
@@ -46,6 +48,62 @@ extern tree ctor_label, dtor_label;
static struct harshness_code convert_harshness PROTO((register tree, register tree, tree));
static tree build_new_method_call PROTO((tree, tree, tree, tree, int));
+static int rank_for_ideal PROTO((struct candidate *,
+ struct candidate *));
+static int user_harshness PROTO((tree, tree));
+static int strictly_better PROTO((unsigned int, unsigned int));
+static struct candidate * ideal_candidate PROTO((struct candidate *,
+ int, int));
+static int may_be_remote PROTO((tree));
+static tree build_field_call PROTO((tree, tree, tree, tree));
+static tree find_scoped_type PROTO((tree, tree, tree));
+static void print_candidates PROTO((tree));
+static struct z_candidate * tourney PROTO((struct z_candidate *));
+static int joust PROTO((struct z_candidate *, struct z_candidate *));
+static int compare_qual PROTO((tree, tree));
+static int compare_ics PROTO((tree, tree));
+static tree build_over_call PROTO((tree, tree, tree, int));
+static tree convert_default_arg PROTO((tree, tree));
+static void enforce_access PROTO((tree, tree));
+static tree convert_like PROTO((tree, tree));
+static void op_error PROTO((enum tree_code, enum tree_code, tree, tree,
+ tree, char *));
+static tree build_object_call PROTO((tree, tree));
+static tree resolve_args PROTO((tree));
+static struct z_candidate * build_user_type_conversion_1
+ PROTO ((tree, tree, int));
+static void print_z_candidates PROTO((struct z_candidate *));
+static tree build_this PROTO((tree));
+static struct z_candidate * splice_viable PROTO((struct z_candidate *));
+static int any_viable PROTO((struct z_candidate *));
+static struct z_candidate * add_template_candidate
+ PROTO((struct z_candidate *, tree, tree, tree, tree, int));
+static struct z_candidate * add_template_conv_candidate
+ PROTO((struct z_candidate *, tree, tree, tree, tree));
+static struct z_candidate * add_builtin_candidates
+ PROTO((struct z_candidate *, enum tree_code, enum tree_code,
+ tree, tree *, int));
+static struct z_candidate * add_builtin_candidate
+ PROTO((struct z_candidate *, enum tree_code, enum tree_code,
+ tree, tree, tree, tree *, tree *, int));
+static int is_complete PROTO((tree));
+static struct z_candidate * build_builtin_candidate
+ PROTO((struct z_candidate *, tree, tree, tree, tree *, tree *,
+ int));
+static struct z_candidate * add_conv_candidate
+ PROTO((struct z_candidate *, tree, tree, tree));
+static struct z_candidate * add_function_candidate
+ PROTO((struct z_candidate *, tree, tree, int));
+static tree implicit_conversion PROTO((tree, tree, tree, int));
+static tree standard_conversion PROTO((tree, tree, tree));
+static tree reference_binding PROTO((tree, tree, tree, int));
+static tree strip_top_quals PROTO((tree));
+static tree non_reference PROTO((tree));
+static tree build_conv PROTO((enum tree_code, tree, tree));
+static void print_n_candidates PROTO((struct candidate *, int));
+static tree default_parm_conversions PROTO((tree, tree *));
+static int is_subseq PROTO((tree, tree));
+
#define EVIL_RETURN(ARG) ((ARG).code = EVIL_CODE, (ARG))
#define STD_RETURN(ARG) ((ARG).code = STD_CODE, (ARG))
#define QUAL_RETURN(ARG) ((ARG).code = QUAL_CODE, (ARG))
@@ -1031,7 +1089,7 @@ compute_conversion_costs (function, tta_in, cp, arglen)
static int
strictly_better (x, y)
- unsigned short x, y;
+ unsigned int x, y;
{
unsigned short xor;
@@ -1072,7 +1130,7 @@ ideal_candidate (candidates, n_candidates, len)
functions. */
qsort (candidates, n_candidates, sizeof (struct candidate),
- rank_for_overload);
+ (int (*) PROTO((const void *, const void *))) rank_for_overload);
best_code = cp[-1].h.code;
/* If they're at least as good as each other, do an arg-by-arg check. */
@@ -1086,7 +1144,7 @@ ideal_candidate (candidates, n_candidates, len)
break;
qsort (candidates+j, n_candidates-j, sizeof (struct candidate),
- rank_for_ideal);
+ (int (*) PROTO((const void *, const void *))) rank_for_ideal);
for (i = 0; i < len; i++)
{
if (cp[-1].harshness[i].code < cp[-2].harshness[i].code)
@@ -1209,7 +1267,7 @@ build_field_call (basetype_path, instance_ptr, name, parms)
if (TREE_CODE (TREE_TYPE (TREE_TYPE (instance))) == FUNCTION_TYPE)
return build_function_call (instance, parms);
else if (TREE_CODE (TREE_TYPE (TREE_TYPE (instance))) == METHOD_TYPE)
- return build_function_call (instance, tree_cons (NULL_TREE, current_class_ptr, parms));
+ return build_function_call (instance, expr_tree_cons (NULL_TREE, current_class_ptr, parms));
}
}
return NULL_TREE;
@@ -1754,7 +1812,7 @@ build_method_call (instance, name, parms, basetype_path, flags)
return cp_convert (void_type_node, instance);
}
- if (! TYPE_HAS_DESTRUCTOR (basetype))
+ if (! TYPE_HAS_DESTRUCTOR (complete_type (basetype)))
return cp_convert (void_type_node, instance);
instance = default_conversion (instance);
instance_ptr = build_unary_op (ADDR_EXPR, instance, 0);
@@ -2052,14 +2110,14 @@ build_method_call (instance, name, parms, basetype_path, flags)
of the signature pointer? */
constp = TYPE_READONLY (basetype);
volatilep = TYPE_VOLATILE (basetype);
- parms = tree_cons (NULL_TREE, instance_ptr, parms);
+ parms = expr_tree_cons (NULL_TREE, instance_ptr, parms);
}
else if (instance)
{
/* TREE_READONLY (instance) fails for references. */
constp = TYPE_READONLY (TREE_TYPE (TREE_TYPE (instance_ptr)));
volatilep = TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (instance_ptr)));
- parms = tree_cons (NULL_TREE, instance_ptr, parms);
+ parms = expr_tree_cons (NULL_TREE, instance_ptr, parms);
}
else
{
@@ -2068,18 +2126,18 @@ build_method_call (instance, name, parms, basetype_path, flags)
&& ! (flags & LOOKUP_HAS_IN_CHARGE))
{
flags |= LOOKUP_HAS_IN_CHARGE;
- parms = tree_cons (NULL_TREE, integer_one_node, parms);
- parmtypes = tree_cons (NULL_TREE, integer_type_node, parmtypes);
+ parms = expr_tree_cons (NULL_TREE, integer_one_node, parms);
+ parmtypes = scratch_tree_cons (NULL_TREE, integer_type_node, parmtypes);
}
constp = 0;
volatilep = 0;
instance_ptr = build_int_2 (0, 0);
TREE_TYPE (instance_ptr) = build_pointer_type (basetype);
- parms = tree_cons (NULL_TREE, instance_ptr, parms);
+ parms = expr_tree_cons (NULL_TREE, instance_ptr, parms);
}
- parmtypes = tree_cons (NULL_TREE, TREE_TYPE (instance_ptr), parmtypes);
+ parmtypes = scratch_tree_cons (NULL_TREE, TREE_TYPE (instance_ptr), parmtypes);
if (last == NULL_TREE)
last = parmtypes;
@@ -2113,10 +2171,10 @@ build_method_call (instance, name, parms, basetype_path, flags)
tree tmplist;
flags |= LOOKUP_HAS_IN_CHARGE;
- tmplist = tree_cons (NULL_TREE, integer_zero_node,
+ tmplist = expr_tree_cons (NULL_TREE, integer_zero_node,
TREE_CHAIN (parms));
TREE_CHAIN (parms) = tmplist;
- tmplist = tree_cons (NULL_TREE, integer_type_node, TREE_CHAIN (parmtypes));
+ tmplist = scratch_tree_cons (NULL_TREE, integer_type_node, TREE_CHAIN (parmtypes));
TREE_CHAIN (parmtypes) = tmplist;
}
basetype = BINFO_TYPE (tmp);
@@ -2167,7 +2225,7 @@ build_method_call (instance, name, parms, basetype_path, flags)
else
my_friendly_abort (167);
- friend_parms = tree_cons (NULL_TREE, parm, TREE_CHAIN (parms));
+ friend_parms = expr_tree_cons (NULL_TREE, parm, TREE_CHAIN (parms));
cp->h_len = len;
cp->harshness = (struct harshness_code *)
@@ -2217,7 +2275,7 @@ build_method_call (instance, name, parms, basetype_path, flags)
#endif
ever_seen++;
if (pass > 0)
- found_fns = tree_cons (NULL_TREE, function, found_fns);
+ found_fns = scratch_tree_cons (NULL_TREE, function, found_fns);
/* Not looking for friends here. */
if (TREE_CODE (TREE_TYPE (function)) == FUNCTION_TYPE
@@ -2548,7 +2606,7 @@ build_method_call (instance, name, parms, basetype_path, flags)
instance_ptr = convert_pointer_to (basetype, instance_ptr);
instance = build_indirect_ref (instance_ptr, NULL_PTR);
}
- parms = tree_cons (NULL_TREE, instance_ptr,
+ parms = expr_tree_cons (NULL_TREE, instance_ptr,
convert_arguments (NULL_TREE, TREE_CHAIN (TYPE_ARG_TYPES (fntype)), TREE_CHAIN (parms), function, sub_flags));
}
else
@@ -2596,7 +2654,7 @@ build_method_call (instance, name, parms, basetype_path, flags)
|| TREE_OPERAND (instance, 0) != instance_ptr)
instance = build_indirect_ref (instance_ptr, NULL_PTR);
}
- parms = tree_cons (NULL_TREE, instance_ptr,
+ parms = expr_tree_cons (NULL_TREE, instance_ptr,
convert_arguments (NULL_TREE, TREE_CHAIN (TYPE_ARG_TYPES (fntype)), TREE_CHAIN (parms), function, LOOKUP_NORMAL));
}
@@ -2783,13 +2841,14 @@ build_overload_call_real (fnname, parms, flags, final_cp, require_complete)
}
if (TREE_CODE (function) == TEMPLATE_DECL)
{
- int ntparms = TREE_VEC_LENGTH (DECL_TEMPLATE_PARMS (function));
- tree *targs = (tree *) alloca (sizeof (tree) * ntparms);
+ int ntparms = DECL_NTPARMS (function);
+ tree targs = make_scratch_vec (ntparms);
int i;
- i = type_unification (DECL_TEMPLATE_PARMS (function), targs,
+ i = type_unification (DECL_INNERMOST_TEMPLATE_PARMS (function),
+ &TREE_VEC_ELT (targs, 0),
TYPE_ARG_TYPES (TREE_TYPE (function)),
- parms, &template_cost, 0, 0);
+ parms, NULL_TREE, &template_cost, 0, 0);
if (i == 0)
{
function = instantiate_template (function, targs);
@@ -2826,7 +2885,7 @@ build_overload_call_real (fnname, parms, flags, final_cp, require_complete)
passed to calling function. */
cp->h_len = parmlength;
cp->harshness = (struct harshness_code *)
- oballoc ((parmlength + 1) * sizeof (struct harshness_code));
+ scratchalloc ((parmlength + 1) * sizeof (struct harshness_code));
compute_conversion_costs (function, parms, cp, parmlength);
@@ -2885,8 +2944,7 @@ build_overload_call_real (fnname, parms, flags, final_cp, require_complete)
return NULL_TREE;
if (flags & LOOKUP_COMPLAIN)
- report_type_mismatch (cp, parms, "function",
- decl_as_string (cp->function, 1));
+ report_type_mismatch (cp, parms, "function");
return error_mark_node;
}
@@ -2937,21 +2995,12 @@ struct z_candidate {
#define USER_CONV_FN(NODE) TREE_OPERAND (NODE, 1)
-static struct z_candidate * build_user_type_conversion_1 ();
-static tree convert_like ();
-static tree build_over_call ();
-static struct z_candidate * tourney ();
-static void enforce_access ();
-
int
null_ptr_cst_p (t)
tree t;
{
if (t == null_node
- || integer_zerop (t) && INTEGRAL_TYPE_P (TREE_TYPE (t)))
- return 1;
- /* Remove this eventually. */
- if (! pedantic && TREE_TYPE (t) == ptr_type_node && integer_zerop (t))
+ || integer_zerop (t) && TREE_CODE (TREE_TYPE (t)) == INTEGER_TYPE)
return 1;
return 0;
}
@@ -2973,9 +3022,7 @@ build_conv (code, type, from)
rank = STD_RANK;
break;
- case LVALUE_CONV:
case QUAL_CONV:
- case RVALUE_CONV:
if (rank < EXACT_RANK)
rank = EXACT_RANK;
@@ -3332,7 +3379,7 @@ add_function_candidate (candidates, fn, arglist, flags)
}
len = list_length (argnode);
- convs = make_tree_vec (len);
+ convs = make_scratch_vec (len);
for (i = 0; i < len; ++i)
{
@@ -3381,7 +3428,7 @@ add_function_candidate (candidates, fn, arglist, flags)
break;
}
- cand = (struct z_candidate *) oballoc (sizeof (struct z_candidate));
+ cand = (struct z_candidate *) scratchalloc (sizeof (struct z_candidate));
cand->fn = fn;
cand->convs = convs;
@@ -3407,7 +3454,7 @@ add_conv_candidate (candidates, fn, obj, arglist)
tree totype = TREE_TYPE (TREE_TYPE (fn));
tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (totype));
int i, len = list_length (arglist) + 1;
- tree convs = make_tree_vec (len);
+ tree convs = make_scratch_vec (len);
tree parmnode = parmlist;
tree argnode = arglist;
int viable = 1;
@@ -3458,7 +3505,7 @@ add_conv_candidate (candidates, fn, obj, arglist)
break;
}
- cand = (struct z_candidate *) oballoc (sizeof (struct z_candidate));
+ cand = (struct z_candidate *) scratchalloc (sizeof (struct z_candidate));
cand->fn = fn;
cand->convs = convs;
@@ -3487,7 +3534,7 @@ build_builtin_candidate (candidates, fnname, type1, type2,
types[0] = type1;
types[1] = type2;
- convs = make_tree_vec (args[2] ? 3 : (args[1] ? 2 : 1));
+ convs = make_scratch_vec (args[2] ? 3 : (args[1] ? 2 : 1));
for (i = 0; i < 2; ++i)
{
@@ -3518,7 +3565,7 @@ build_builtin_candidate (candidates, fnname, type1, type2,
viable = 0;
}
- cand = (struct z_candidate *) oballoc (sizeof (struct z_candidate));
+ cand = (struct z_candidate *) scratchalloc (sizeof (struct z_candidate));
cand->fn = fnname;
cand->convs = convs;
@@ -3649,7 +3696,7 @@ add_builtin_candidate (candidates, code, code2, fnname, type1, type2,
{
tree c1 = TREE_TYPE (type1);
tree c2 = (TYPE_PTRMEMFUNC_P (type2)
- ? TYPE_METHOD_BASETYPE (TYPE_PTRMEMFUNC_FN_TYPE (type2))
+ ? TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type2)))
: TYPE_OFFSET_BASETYPE (TREE_TYPE (type2)));
if (IS_AGGR_TYPE (c1) && DERIVED_FROM_P (c2, c1)
@@ -4027,10 +4074,10 @@ add_builtin_candidates (candidates, code, code2, fnname, args, flags)
if (code == COND_EXPR)
{
if (real_lvalue_p (args[i]))
- types[i] = tree_cons
+ types[i] = scratch_tree_cons
(NULL_TREE, build_reference_type (argtypes[i]), types[i]);
- types[i] = tree_cons
+ types[i] = scratch_tree_cons
(NULL_TREE, TYPE_MAIN_VARIANT (argtypes[i]), types[i]);
}
@@ -4048,37 +4095,37 @@ add_builtin_candidates (candidates, code, code2, fnname, args, flags)
continue;
if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
- types[i] = tree_cons (NULL_TREE, type, types[i]);
+ types[i] = scratch_tree_cons (NULL_TREE, type, types[i]);
type = non_reference (type);
if (i != 0 || ! ref1)
{
type = TYPE_MAIN_VARIANT (type_decays_to (type));
if (code == COND_EXPR && TREE_CODE (type) == ENUMERAL_TYPE)
- types[i] = tree_cons (NULL_TREE, type, types[i]);
+ types[i] = scratch_tree_cons (NULL_TREE, type, types[i]);
if (INTEGRAL_TYPE_P (type))
type = type_promotes_to (type);
}
if (! value_member (type, types[i]))
- types[i] = tree_cons (NULL_TREE, type, types[i]);
+ types[i] = scratch_tree_cons (NULL_TREE, type, types[i]);
}
}
else
{
if (code == COND_EXPR && real_lvalue_p (args[i]))
- types[i] = tree_cons
+ types[i] = scratch_tree_cons
(NULL_TREE, build_reference_type (argtypes[i]), types[i]);
type = non_reference (argtypes[i]);
if (i != 0 || ! ref1)
{
type = TYPE_MAIN_VARIANT (type_decays_to (type));
if (code == COND_EXPR && TREE_CODE (type) == ENUMERAL_TYPE)
- types[i] = tree_cons (NULL_TREE, type, types[i]);
+ types[i] = scratch_tree_cons (NULL_TREE, type, types[i]);
if (INTEGRAL_TYPE_P (type))
type = type_promotes_to (type);
}
- types[i] = tree_cons (NULL_TREE, type, types[i]);
+ types[i] = scratch_tree_cons (NULL_TREE, type, types[i]);
}
}
@@ -4098,21 +4145,30 @@ add_builtin_candidates (candidates, code, code2, fnname, args, flags)
return candidates;
}
+/* If TMPL can be successfully instantiated as indicated by
+ EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
+
+ TMPL is the template. EXPLICIT_TARGS are any explicit template arguments.
+ ARGLIST is the arguments provided at the call-site. The RETURN_TYPE
+ is the desired type for conversion operators. FLAGS are as for
+ add_function_candidate. */
+
static struct z_candidate *
-add_template_candidate (candidates, tmpl, arglist, flags)
+add_template_candidate (candidates, tmpl, explicit_targs,
+ arglist, return_type, flags)
struct z_candidate *candidates;
- tree tmpl, arglist;
+ tree tmpl, explicit_targs, arglist, return_type;
int flags;
{
- int ntparms = TREE_VEC_LENGTH (DECL_TEMPLATE_PARMS (tmpl));
- tree *targs = (tree *) alloca (sizeof (tree) * ntparms);
+ int ntparms = DECL_NTPARMS (tmpl);
+ tree targs = make_scratch_vec (ntparms);
struct z_candidate *cand;
- int i, dummy = 0;
+ int i;
tree fn;
- i = type_unification (DECL_TEMPLATE_PARMS (tmpl), targs,
- TYPE_ARG_TYPES (TREE_TYPE (tmpl)),
- arglist, &dummy, 0, 0);
+ i = fn_type_unification (tmpl, explicit_targs, targs, arglist,
+ return_type, 0);
+
if (i != 0)
return candidates;
@@ -4125,6 +4181,33 @@ add_template_candidate (candidates, tmpl, arglist, flags)
return cand;
}
+
+static struct z_candidate *
+add_template_conv_candidate (candidates, tmpl, obj, arglist, return_type)
+ struct z_candidate *candidates;
+ tree tmpl, obj, arglist, return_type;
+{
+ int ntparms = DECL_NTPARMS (tmpl);
+ tree targs = make_scratch_vec (ntparms);
+ struct z_candidate *cand;
+ int i;
+ tree fn;
+
+ i = fn_type_unification (tmpl, NULL_TREE, targs, arglist, return_type, 0);
+
+ if (i != 0)
+ return candidates;
+
+ fn = instantiate_template (tmpl, targs);
+ if (fn == error_mark_node)
+ return candidates;
+
+ cand = add_conv_candidate (candidates, fn, obj, arglist);
+ cand->template = DECL_TEMPLATE_INFO (fn);
+ return cand;
+}
+
+
static int
any_viable (cands)
struct z_candidate *cands;
@@ -4208,6 +4291,7 @@ build_user_type_conversion_1 (totype, expr, flags)
tree fromtype = TREE_TYPE (expr);
tree ctors = NULL_TREE, convs = NULL_TREE, *p;
tree args;
+ tree templates = NULL_TREE;
if (IS_AGGR_TYPE (totype))
ctors = lookup_fnfields (TYPE_BINFO (totype), ctor_identifier, 0);
@@ -4222,10 +4306,10 @@ build_user_type_conversion_1 (totype, expr, flags)
{
tree t = build_int_2 (0, 0);
TREE_TYPE (t) = build_pointer_type (totype);
- args = build_tree_list (NULL_TREE, expr);
+ args = build_scratch_list (NULL_TREE, expr);
if (TYPE_USES_VIRTUAL_BASECLASSES (totype))
- args = tree_cons (NULL_TREE, integer_one_node, args);
- args = tree_cons (NULL_TREE, t, args);
+ args = scratch_tree_cons (NULL_TREE, integer_one_node, args);
+ args = scratch_tree_cons (NULL_TREE, t, args);
ctors = TREE_VALUE (ctors);
}
@@ -4234,13 +4318,26 @@ build_user_type_conversion_1 (totype, expr, flags)
if (DECL_NONCONVERTING_P (ctors))
continue;
- candidates = add_function_candidate (candidates, ctors, args, flags);
- candidates->second_conv = build1 (IDENTITY_CONV, totype, NULL_TREE);
- candidates->basetype_path = TYPE_BINFO (totype);
+ if (TREE_CODE (ctors) == TEMPLATE_DECL)
+ {
+ templates = scratch_tree_cons (NULL_TREE, ctors, templates);
+ candidates =
+ add_template_candidate (candidates, ctors,
+ NULL_TREE, args, NULL_TREE, flags);
+ }
+ else
+ candidates = add_function_candidate (candidates, ctors,
+ args, flags);
+
+ if (candidates)
+ {
+ candidates->second_conv = build1 (IDENTITY_CONV, totype, NULL_TREE);
+ candidates->basetype_path = TYPE_BINFO (totype);
+ }
}
if (convs)
- args = build_tree_list (NULL_TREE, build_this (expr));
+ args = build_scratch_list (NULL_TREE, build_this (expr));
for (; convs; convs = TREE_CHAIN (convs))
{
@@ -4263,11 +4360,24 @@ build_user_type_conversion_1 (totype, expr, flags)
else if (ics)
for (; fn; fn = DECL_CHAIN (fn))
{
- candidates = add_function_candidate (candidates, fn, args, flags);
- candidates->second_conv = ics;
- candidates->basetype_path = TREE_PURPOSE (convs);
- if (candidates->viable == 1 && ICS_BAD_FLAG (ics))
- candidates->viable = -1;
+ if (TREE_CODE (fn) == TEMPLATE_DECL)
+ {
+ templates = scratch_tree_cons (NULL_TREE, fn, templates);
+ candidates =
+ add_template_candidate (candidates, fn, NULL_TREE,
+ args, totype, flags);
+ }
+ else
+ candidates = add_function_candidate (candidates, fn,
+ args, flags);
+
+ if (candidates)
+ {
+ candidates->second_conv = ics;
+ candidates->basetype_path = TREE_PURPOSE (convs);
+ if (candidates->viable == 1 && ICS_BAD_FLAG (ics))
+ candidates->viable = -1;
+ }
}
}
@@ -4287,7 +4397,7 @@ build_user_type_conversion_1 (totype, expr, flags)
}
candidates = splice_viable (candidates);
- cand = tourney (candidates, totype);
+ cand = tourney (candidates);
if (cand == 0)
{
@@ -4309,11 +4419,19 @@ build_user_type_conversion_1 (totype, expr, flags)
for (p = &(cand->second_conv); TREE_CODE (*p) != IDENTITY_CONV; )
p = &(TREE_OPERAND (*p, 0));
+ /* Pedantically, normal function declarations are never considered
+ to refer to template instantiations, so we only do this with
+ -fguiding-decls. */
+ if (flag_guiding_decls && templates && ! cand->template
+ && !DECL_INITIAL (cand->fn)
+ && TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE)
+ add_maybe_template (cand->fn, templates);
+
*p = build
(USER_CONV,
(DECL_CONSTRUCTOR_P (cand->fn)
? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
- NULL_TREE, cand->fn, cand->convs, cand->basetype_path);
+ expr, cand->fn, cand->convs, cand->basetype_path);
ICS_USER_FLAG (cand->second_conv) = 1;
if (cand->viable == -1)
ICS_BAD_FLAG (cand->second_conv) = 1;
@@ -4338,37 +4456,63 @@ build_user_type_conversion (totype, expr, flags)
return NULL_TREE;
}
+/* Do any initial processing on the arguments to a function call. */
+
+static tree
+resolve_args (args)
+ tree args;
+{
+ tree t;
+ for (t = args; t; t = TREE_CHAIN (t))
+ {
+ if (TREE_VALUE (t) == error_mark_node)
+ return error_mark_node;
+ else if (TREE_CODE (TREE_TYPE (TREE_VALUE (t))) == VOID_TYPE)
+ {
+ error ("invalid use of void expression");
+ return error_mark_node;
+ }
+ else if (TREE_CODE (TREE_VALUE (t)) == OFFSET_REF)
+ TREE_VALUE (t) = resolve_offset_ref (TREE_VALUE (t));
+ }
+ return args;
+}
+
tree
-build_new_function_call (fn, args, obj)
- tree fn, args, obj;
+build_new_function_call (fn, args)
+ tree fn, args;
{
struct z_candidate *candidates = 0, *cand;
-
- if (obj == NULL_TREE && TREE_CODE (fn) == TREE_LIST)
+ tree explicit_targs = NULL_TREE;
+ int template_only = 0;
+
+ if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
+ {
+ explicit_targs = TREE_OPERAND (fn, 1);
+ fn = TREE_OPERAND (fn, 0);
+ template_only = 1;
+ }
+
+ if (really_overloaded_fn (fn))
{
tree t;
tree templates = NULL_TREE;
- for (t = args; t; t = TREE_CHAIN (t))
- {
- if (TREE_VALUE (t) == error_mark_node)
- return error_mark_node;
- else if (TREE_CODE (TREE_TYPE (TREE_VALUE (t))) == VOID_TYPE)
- {
- error ("invalid use of void expression");
- return error_mark_node;
- }
- }
-
+ args = resolve_args (args);
+
+ if (args == error_mark_node)
+ return error_mark_node;
+
for (t = TREE_VALUE (fn); t; t = DECL_CHAIN (t))
{
if (TREE_CODE (t) == TEMPLATE_DECL)
{
- templates = decl_tree_cons (NULL_TREE, t, templates);
+ templates = scratch_tree_cons (NULL_TREE, t, templates);
candidates = add_template_candidate
- (candidates, t, args, LOOKUP_NORMAL);
+ (candidates, t, explicit_targs, args, NULL_TREE,
+ LOOKUP_NORMAL);
}
- else
+ else if (! template_only)
candidates = add_function_candidate
(candidates, t, args, LOOKUP_NORMAL);
}
@@ -4384,7 +4528,7 @@ build_new_function_call (fn, args, obj)
return error_mark_node;
}
candidates = splice_viable (candidates);
- cand = tourney (candidates, NULL_TREE);
+ cand = tourney (candidates);
if (cand == 0)
{
@@ -4394,10 +4538,11 @@ build_new_function_call (fn, args, obj)
return error_mark_node;
}
- /* Pedantically, it is ill-formed to define a function that could
- also be a template instantiation, but we won't implement that
- until things settle down. */
- if (templates && ! cand->template && ! DECL_INITIAL (cand->fn))
+ /* Pedantically, normal function declarations are never considered
+ to refer to template instantiations, so we only do this with
+ -fguiding-decls. */
+ if (flag_guiding_decls && templates && ! cand->template
+ && ! DECL_INITIAL (cand->fn))
add_maybe_template (cand->fn, templates);
return build_over_call (cand->fn, cand->convs, args, LOOKUP_NORMAL);
@@ -4413,19 +4558,36 @@ build_object_call (obj, args)
struct z_candidate *candidates = 0, *cand;
tree fns, convs, mem_args;
tree type = TREE_TYPE (obj);
+ tree templates = NULL_TREE;
fns = lookup_fnfields (TYPE_BINFO (type), ansi_opname [CALL_EXPR], 0);
+ args = resolve_args (args);
+
+ if (args == error_mark_node)
+ return error_mark_node;
+
if (fns)
{
tree fn = TREE_VALUE (fns);
- mem_args = tree_cons (NULL_TREE, build_this (obj), args);
+ mem_args = scratch_tree_cons (NULL_TREE, build_this (obj), args);
for (; fn; fn = DECL_CHAIN (fn))
{
- candidates = add_function_candidate
- (candidates, fn, mem_args, LOOKUP_NORMAL);
- candidates->basetype_path = TREE_PURPOSE (fns);
+ if (TREE_CODE (fn) == TEMPLATE_DECL)
+ {
+ templates = scratch_tree_cons (NULL_TREE, fn, templates);
+ candidates
+ = add_template_candidate (candidates, fn, NULL_TREE,
+ mem_args, NULL_TREE,
+ LOOKUP_NORMAL);
+ }
+ else
+ candidates = add_function_candidate
+ (candidates, fn, mem_args, LOOKUP_NORMAL);
+
+ if (candidates)
+ candidates->basetype_path = TREE_PURPOSE (fns);
}
}
@@ -4440,8 +4602,20 @@ build_object_call (obj, args)
&& TREE_CODE (TREE_TYPE (totype)) == FUNCTION_TYPE)
for (; fn; fn = DECL_CHAIN (fn))
{
- candidates = add_conv_candidate (candidates, fn, obj, args);
- candidates->basetype_path = TREE_PURPOSE (convs);
+ if (TREE_CODE (fn) == TEMPLATE_DECL)
+ {
+ templates = scratch_tree_cons (NULL_TREE, fn, templates);
+ candidates = add_template_conv_candidate (candidates,
+ fn,
+ obj,
+ args,
+ totype);
+ }
+ else
+ candidates = add_conv_candidate (candidates, fn, obj, args);
+
+ if (candidates)
+ candidates->basetype_path = TREE_PURPOSE (convs);
}
}
@@ -4453,7 +4627,7 @@ build_object_call (obj, args)
}
candidates = splice_viable (candidates);
- cand = tourney (candidates, NULL_TREE);
+ cand = tourney (candidates);
if (cand == 0)
{
@@ -4513,12 +4687,21 @@ build_new_op (code, flags, arg1, arg2, arg3)
tree fns, mem_arglist, arglist, fnname;
enum tree_code code2 = NOP_EXPR;
tree templates = NULL_TREE;
+ tree conv;
if (arg1 == error_mark_node
|| arg2 == error_mark_node
|| arg3 == error_mark_node)
return error_mark_node;
+ /* This can happen if a template takes all non-type parameters, e.g.
+ undeclared_template<1, 5, 72>a; */
+ if (code == LT_EXPR && TREE_CODE (arg1) == TEMPLATE_DECL)
+ {
+ cp_error ("`%D' must be declared before use", arg1);
+ return error_mark_node;
+ }
+
if (code == MODIFY_EXPR)
{
code2 = TREE_CODE (arg3);
@@ -4535,10 +4718,10 @@ build_new_op (code, flags, arg1, arg2, arg3)
{
tree rval;
- arglist = tree_cons (NULL_TREE, arg2, arg3);
+ arglist = scratch_tree_cons (NULL_TREE, arg2, arg3);
if (flags & LOOKUP_GLOBAL)
return build_new_function_call
- (lookup_name_nonclass (fnname), arglist, NULL_TREE);
+ (lookup_name_nonclass (fnname), arglist);
/* FIXME */
rval = build_method_call
@@ -4563,9 +4746,9 @@ build_new_op (code, flags, arg1, arg2, arg3)
if (flags & LOOKUP_GLOBAL)
return build_new_function_call
(lookup_name_nonclass (fnname),
- build_tree_list (NULL_TREE, arg1), NULL_TREE);
+ build_scratch_list (NULL_TREE, arg1));
- arglist = tree_cons (NULL_TREE, arg1, build_tree_list (NULL_TREE, arg2));
+ arglist = scratch_tree_cons (NULL_TREE, arg1, build_scratch_list (NULL_TREE, arg2));
arg1 = TREE_TYPE (arg1);
@@ -4627,16 +4810,16 @@ build_new_op (code, flags, arg1, arg2, arg3)
if (code == POSTINCREMENT_EXPR || code == POSTDECREMENT_EXPR)
arg2 = integer_zero_node;
- fns = lookup_name_nonclass (fnname);
- /* + Koenig lookup */
-
if (arg2 && arg3)
- arglist = tree_cons (NULL_TREE, arg1, tree_cons
- (NULL_TREE, arg2, build_tree_list (NULL_TREE, arg3)));
+ arglist = scratch_tree_cons (NULL_TREE, arg1, scratch_tree_cons
+ (NULL_TREE, arg2, build_scratch_list (NULL_TREE, arg3)));
else if (arg2)
- arglist = tree_cons (NULL_TREE, arg1, build_tree_list (NULL_TREE, arg2));
+ arglist = scratch_tree_cons (NULL_TREE, arg1, build_scratch_list (NULL_TREE, arg2));
else
- arglist = build_tree_list (NULL_TREE, arg1);
+ arglist = build_scratch_list (NULL_TREE, arg1);
+
+ fns = lookup_name_nonclass (fnname);
+ /* + Koenig lookup */
if (fns && TREE_CODE (fns) == TREE_LIST)
fns = TREE_VALUE (fns);
@@ -4644,9 +4827,11 @@ build_new_op (code, flags, arg1, arg2, arg3)
{
if (TREE_CODE (fns) == TEMPLATE_DECL)
{
- templates = decl_tree_cons (NULL_TREE, fns, templates);
- candidates = add_template_candidate
- (candidates, fns, arglist, flags);
+ templates = scratch_tree_cons (NULL_TREE, fns, templates);
+ candidates
+ = add_template_candidate (candidates, fns, NULL_TREE,
+ arglist, TREE_TYPE (fnname),
+ flags);
}
else
candidates = add_function_candidate (candidates, fns, arglist, flags);
@@ -4660,16 +4845,31 @@ build_new_op (code, flags, arg1, arg2, arg3)
if (fns)
{
tree fn = TREE_VALUE (fns);
- mem_arglist = tree_cons (NULL_TREE, build_this (arg1), TREE_CHAIN (arglist));
+ mem_arglist = scratch_tree_cons (NULL_TREE, build_this (arg1), TREE_CHAIN (arglist));
for (; fn; fn = DECL_CHAIN (fn))
{
+ tree this_arglist;
+
if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
- candidates = add_function_candidate
- (candidates, fn, mem_arglist, flags);
+ this_arglist = mem_arglist;
else
- candidates = add_function_candidate (candidates, fn, arglist, flags);
-
- candidates->basetype_path = TREE_PURPOSE (fns);
+ this_arglist = arglist;
+
+ if (TREE_CODE (fn) == TEMPLATE_DECL)
+ {
+ /* A member template. */
+ templates = scratch_tree_cons (NULL_TREE, fn, templates);
+ candidates
+ = add_template_candidate (candidates, fn, NULL_TREE,
+ this_arglist, TREE_TYPE (fnname),
+ flags);
+ }
+ else
+ candidates = add_function_candidate
+ (candidates, fn, this_arglist, flags);
+
+ if (candidates)
+ candidates->basetype_path = TREE_PURPOSE (fns);
}
}
@@ -4728,7 +4928,7 @@ build_new_op (code, flags, arg1, arg2, arg3)
return error_mark_node;
}
candidates = splice_viable (candidates);
- cand = tourney (candidates, NULL_TREE);
+ cand = tourney (candidates);
if (cand == 0)
{
@@ -4760,10 +4960,11 @@ build_new_op (code, flags, arg1, arg2, arg3)
if (DECL_FUNCTION_MEMBER_P (cand->fn))
enforce_access (cand->basetype_path, cand->fn);
- /* Pedantically, it is ill-formed to define a function that could
- also be a template instantiation, but we won't implement that
- until things settle down. */
- if (templates && ! cand->template && ! DECL_INITIAL (cand->fn)
+ /* Pedantically, normal function declarations are never considered
+ to refer to template instantiations, so we only do this with
+ -fguiding-decls. */
+ if (flag_guiding_decls && templates && ! cand->template
+ && ! DECL_INITIAL (cand->fn)
&& TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE)
add_maybe_template (cand->fn, templates);
@@ -4794,8 +4995,13 @@ build_new_op (code, flags, arg1, arg2, arg3)
}
}
- arg1 = convert_from_reference
- (convert_like (TREE_VEC_ELT (cand->convs, 0), arg1));
+ /* We need to strip any leading REF_BIND so that bitfields don't cause
+ errors. This should not remove any important conversions, because
+ builtins don't apply to class objects directly. */
+ conv = TREE_VEC_ELT (cand->convs, 0);
+ if (TREE_CODE (conv) == REF_BIND)
+ conv = TREE_OPERAND (conv, 0);
+ arg1 = convert_like (conv, arg1);
if (arg2)
arg2 = convert_like (TREE_VEC_ELT (cand->convs, 1), arg2);
if (arg3)
@@ -4865,6 +5071,145 @@ builtin:
}
}
+/* Build up a call to operator new. This has to be handled differently
+ from other operators in the way lookup is handled; first members are
+ considered, then globals. CODE is either NEW_EXPR or VEC_NEW_EXPR.
+ TYPE is the type to be created. ARGS are any new-placement args.
+ FLAGS are the usual overloading flags. */
+
+tree
+build_op_new_call (code, type, args, flags)
+ enum tree_code code;
+ tree type, args;
+ int flags;
+{
+ tree fnname = ansi_opname[code];
+
+ if (IS_AGGR_TYPE (type) && ! (flags & LOOKUP_GLOBAL)
+ && (TYPE_GETS_NEW (type) & (1 << (code == VEC_NEW_EXPR))))
+ {
+ tree dummy = build1 (NOP_EXPR, build_pointer_type (type),
+ error_mark_node);
+ dummy = build_indirect_ref (dummy, "new");
+ return build_method_call (dummy, fnname, args, NULL_TREE, flags);
+ }
+ else
+ return build_new_function_call (lookup_name_nonclass (fnname), args);
+}
+
+/* Build a call to operator delete. This has to be handled very specially,
+ because the restrictions on what signatures match are different from all
+ other call instances. For a normal delete, only a delete taking (void *)
+ or (void *, size_t) is accepted. For a placement delete, only an exact
+ match with the placement new is accepted.
+
+ CODE is either DELETE_EXPR or VEC_DELETE_EXPR.
+ ADDR is the pointer to be deleted. For placement delete, it is also
+ used to determine what the corresponding new looked like.
+ SIZE is the size of the memory block to be deleted.
+ FLAGS are the usual overloading flags. */
+
+tree
+build_op_delete_call (code, addr, size, flags)
+ enum tree_code code;
+ tree addr, size;
+ int flags;
+{
+ tree fn, fns, fnname, fntype, argtypes, args, type;
+ int placement;
+
+ if (addr == error_mark_node)
+ return error_mark_node;
+
+ type = TREE_TYPE (TREE_TYPE (addr));
+ fnname = ansi_opname[code];
+
+ if (IS_AGGR_TYPE (type) && ! (flags & LOOKUP_GLOBAL))
+ fns = lookup_fnfields (TYPE_BINFO (type), fnname, 0);
+ else
+ fns = NULL_TREE;
+
+ if (fns)
+ {
+ /* Build this up like build_offset_ref does. */
+ fns = build_tree_list (error_mark_node, fns);
+ TREE_TYPE (fns) = build_offset_type (type, unknown_type_node);
+ }
+ else
+ fns = lookup_name_nonclass (fnname);
+
+ /* We can recognize a placement delete because of LOOKUP_SPECULATIVELY;
+ if we are doing placement delete we do nothing if we don't find a
+ matching op delete. */
+ placement = !!(flags & LOOKUP_SPECULATIVELY);
+ if (placement)
+ {
+ /* If placement, we are coming from build_new, and we know that addr
+ is the allocation expression, so extract the info we need from it.
+ Obviously, if the build_new process changes this may have to
+ change as well. */
+ /* The SAVE_EXPR. */
+ tree t = TREE_OPERAND (addr, 0);
+ /* The CALL_EXPR. */
+ t = TREE_OPERAND (t, 0);
+ /* The function. */
+ argtypes = TREE_OPERAND (TREE_OPERAND (t, 0), 0);
+ /* The second parm type. */
+ argtypes = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (argtypes)));
+ /* The second argument. */
+ args = TREE_CHAIN (TREE_OPERAND (t, 1));
+ }
+ else
+ {
+ /* First try it without the size argument. */
+ argtypes = void_list_node;
+ args = NULL_TREE;
+ }
+
+ argtypes = tree_cons (NULL_TREE, ptr_type_node, argtypes);
+ fntype = build_function_type (void_type_node, argtypes);
+
+ /* Strip const and volatile from addr. */
+ if (type != TYPE_MAIN_VARIANT (type))
+ addr = cp_convert (build_pointer_type (TYPE_MAIN_VARIANT (type)), addr);
+
+ /* instantiate_type will always return a plain function; pretend it's
+ overloaded. */
+ if (TREE_CODE (fns) == FUNCTION_DECL)
+ fns = scratch_tree_cons (NULL_TREE, fns, NULL_TREE);
+
+ fn = instantiate_type (fntype, fns, 0);
+
+ if (fn != error_mark_node)
+ {
+ if (TREE_CODE (TREE_VALUE (fns)) == TREE_LIST)
+ /* Member functions. */
+ enforce_access (TREE_PURPOSE (TREE_VALUE (fns)), fn);
+ return build_function_call (fn, expr_tree_cons (NULL_TREE, addr, args));
+ }
+
+ if (placement)
+ return NULL_TREE;
+
+ /* Normal delete; now try to find a match including the size argument. */
+ argtypes = tree_cons (NULL_TREE, ptr_type_node,
+ tree_cons (NULL_TREE, sizetype, void_list_node));
+ fntype = build_function_type (void_type_node, argtypes);
+
+ fn = instantiate_type (fntype, fns, 0);
+
+ if (fn != error_mark_node)
+ return build_function_call
+ (fn, expr_tree_cons (NULL_TREE, addr,
+ build_expr_list (NULL_TREE, size)));
+
+ cp_error ("no suitable operator delete for `%T'", type);
+ return error_mark_node;
+}
+
+/* If the current scope isn't allowed to access FUNCTION along
+ BASETYPE_PATH, give an error. */
+
static void
enforce_access (basetype_path, function)
tree basetype_path, function;
@@ -4928,10 +5273,10 @@ convert_like (convs, expr)
tree t = build_int_2 (0, 0);
TREE_TYPE (t) = build_pointer_type (DECL_CONTEXT (fn));
- args = build_tree_list (NULL_TREE, expr);
+ args = build_scratch_list (NULL_TREE, expr);
if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
- args = tree_cons (NULL_TREE, integer_one_node, args);
- args = tree_cons (NULL_TREE, t, args);
+ args = scratch_tree_cons (NULL_TREE, integer_one_node, args);
+ args = scratch_tree_cons (NULL_TREE, t, args);
}
else
args = build_this (expr);
@@ -5026,19 +5371,19 @@ build_over_call (fn, convs, args, flags)
int is_method = 0;
if (args && TREE_CODE (args) != TREE_LIST)
- args = build_tree_list (NULL_TREE, args);
+ args = build_scratch_list (NULL_TREE, args);
arg = args;
/* The implicit parameters to a constructor are not considered by overload
resolution, and must be of the proper type. */
if (DECL_CONSTRUCTOR_P (fn))
{
- converted_args = tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args);
+ converted_args = expr_tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args);
arg = TREE_CHAIN (arg);
parm = TREE_CHAIN (parm);
if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
{
- converted_args = tree_cons
+ converted_args = expr_tree_cons
(NULL_TREE, TREE_VALUE (arg), converted_args);
arg = TREE_CHAIN (arg);
parm = TREE_CHAIN (parm);
@@ -5061,7 +5406,7 @@ build_over_call (fn, convs, args, flags)
cp_pedwarn ("passing `%T' as `this' argument of `%#D' discards %s",
TREE_TYPE (argtype), fn, p);
}
- converted_args = tree_cons
+ converted_args = expr_tree_cons
(NULL_TREE, convert_force (TREE_VALUE (parm), TREE_VALUE (arg), CONV_C_CAST),
converted_args);
parm = TREE_CHAIN (parm);
@@ -5105,7 +5450,7 @@ build_over_call (fn, convs, args, flags)
&& (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
val = default_conversion (val);
#endif
- converted_args = tree_cons (NULL_TREE, val, converted_args);
+ converted_args = expr_tree_cons (NULL_TREE, val, converted_args);
}
/* Default arguments */
@@ -5113,13 +5458,12 @@ build_over_call (fn, convs, args, flags)
{
tree arg = TREE_PURPOSE (parm);
- if (DECL_TEMPLATE_INFO (fn) && uses_template_parms (arg))
+ if (DECL_TEMPLATE_INFO (fn))
/* This came from a template. Instantiate the default arg here,
not in tsubst. */
- arg = tsubst_expr (arg,
- &TREE_VEC_ELT (DECL_TI_ARGS (fn), 0),
+ arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
TREE_VEC_LENGTH (DECL_TI_ARGS (fn)), NULL_TREE);
- converted_args = tree_cons
+ converted_args = expr_tree_cons
(NULL_TREE, convert_default_arg (TREE_VALUE (parm), arg),
converted_args);
}
@@ -5142,7 +5486,7 @@ build_over_call (fn, convs, args, flags)
/* Convert `short' and `char' to full-size `int'. */
val = default_conversion (val);
- converted_args = tree_cons (NULL_TREE, val, converted_args);
+ converted_args = expr_tree_cons (NULL_TREE, val, converted_args);
}
converted_args = nreverse (converted_args);
@@ -5154,7 +5498,10 @@ build_over_call (fn, convs, args, flags)
&& copy_args_p (fn))
{
tree targ;
- arg = TREE_VALUE (TREE_CHAIN (converted_args));
+ arg = TREE_CHAIN (converted_args);
+ if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
+ arg = TREE_CHAIN (arg);
+ arg = TREE_VALUE (arg);
/* Pull out the real argument, disregarding const-correctness. */
targ = arg;
@@ -5246,9 +5593,10 @@ build_over_call (fn, convs, args, flags)
fn = build_call (fn, TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))), converted_args);
if (TREE_TYPE (fn) == void_type_node)
return fn;
+ fn = require_complete_type (fn);
if (IS_AGGR_TYPE (TREE_TYPE (fn)))
fn = build_cplus_new (TREE_TYPE (fn), fn);
- return convert_from_reference (require_complete_type (fn));
+ return convert_from_reference (fn);
}
static tree
@@ -5257,18 +5605,31 @@ build_new_method_call (instance, name, args, basetype_path, flags)
int flags;
{
struct z_candidate *candidates = 0, *cand;
+ tree explicit_targs = NULL_TREE;
tree basetype, mem_args, fns, instance_ptr;
tree pretty_name;
tree user_args = args;
+ tree templates = NULL_TREE;
+ int template_only = 0;
+
+ if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
+ {
+ explicit_targs = TREE_OPERAND (name, 1);
+ name = TREE_OPERAND (name, 0);
+ if (TREE_CODE (name) == TEMPLATE_DECL)
+ name = DECL_NAME (name);
+ template_only = 1;
+ }
/* If there is an extra argument for controlling virtual bases,
remove it for error reporting. */
if (flags & LOOKUP_HAS_IN_CHARGE)
user_args = TREE_CHAIN (args);
- for (fns = args; fns; fns = TREE_CHAIN (fns))
- if (TREE_VALUE (fns) == error_mark_node)
- return error_mark_node;
+ args = resolve_args (args);
+
+ if (args == error_mark_node)
+ return error_mark_node;
if (instance == NULL_TREE)
basetype = BINFO_TYPE (basetype_path);
@@ -5309,10 +5670,13 @@ build_new_method_call (instance, name, args, basetype_path, flags)
{
instance_ptr = build_this (instance);
- /* XXX this should be handled before we get here. */
- fns = build_field_call (basetype_path, instance_ptr, name, args);
- if (fns)
- return fns;
+ if (! template_only)
+ {
+ /* XXX this should be handled before we get here. */
+ fns = build_field_call (basetype_path, instance_ptr, name, args);
+ if (fns)
+ return fns;
+ }
}
else
{
@@ -5321,7 +5685,7 @@ build_new_method_call (instance, name, args, basetype_path, flags)
}
pretty_name
- = (name == ctor_identifier ? constructor_name_full (basetype) : name);
+ = (name == ctor_identifier ? constructor_name (basetype) : name);
fns = lookup_fnfields (basetype_path, name, 1);
@@ -5334,22 +5698,38 @@ build_new_method_call (instance, name, args, basetype_path, flags)
&& ! (flags & LOOKUP_HAS_IN_CHARGE))
{
flags |= LOOKUP_HAS_IN_CHARGE;
- args = tree_cons (NULL_TREE, integer_one_node, args);
+ args = scratch_tree_cons (NULL_TREE, integer_one_node, args);
}
- mem_args = tree_cons (NULL_TREE, instance_ptr, args);
+ mem_args = scratch_tree_cons (NULL_TREE, instance_ptr, args);
for (; t; t = DECL_CHAIN (t))
{
+ tree this_arglist;
+
/* We can end up here for copy-init of same or base class. */
if (name == ctor_identifier
&& (flags & LOOKUP_ONLYCONVERTING)
&& DECL_NONCONVERTING_P (t))
continue;
if (TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE)
- candidates = add_function_candidate
- (candidates, t, mem_args, flags);
+ this_arglist = mem_args;
else
- candidates = add_function_candidate (candidates, t, args, flags);
- candidates->basetype_path = TREE_PURPOSE (fns);
+ this_arglist = args;
+
+ if (TREE_CODE (t) == TEMPLATE_DECL)
+ {
+ /* A member template. */
+ templates = scratch_tree_cons (NULL_TREE, t, templates);
+ candidates =
+ add_template_candidate (candidates, t, explicit_targs,
+ this_arglist,
+ TREE_TYPE (name), flags);
+ }
+ else if (! template_only)
+ candidates = add_function_candidate (candidates, t,
+ this_arglist, flags);
+
+ if (candidates)
+ candidates->basetype_path = TREE_PURPOSE (fns);
}
}
@@ -5364,7 +5744,7 @@ build_new_method_call (instance, name, args, basetype_path, flags)
return error_mark_node;
}
candidates = splice_viable (candidates);
- cand = tourney (candidates, NULL_TREE);
+ cand = tourney (candidates);
if (cand == 0)
{
@@ -5391,6 +5771,13 @@ build_new_method_call (instance, name, args, basetype_path, flags)
|| resolves_to_fixed_type_p (instance, 0)))
flags |= LOOKUP_NONVIRTUAL;
+ /* Pedantically, normal function declarations are never considered
+ to refer to template instantiations, so we only do this with
+ -fguiding-decls. */
+ if (flag_guiding_decls && templates && ! cand->template
+ && ! DECL_INITIAL (cand->fn))
+ add_maybe_template (cand->fn, templates);
+
return build_over_call
(cand->fn, cand->convs,
TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE ? mem_args : args,
@@ -5407,6 +5794,11 @@ compare_qual (ics1, ics2)
tree to1 = TREE_TYPE (ics1);
tree to2 = TREE_TYPE (ics2);
+ if (TYPE_PTRMEMFUNC_P (to1))
+ to1 = TYPE_PTRMEMFUNC_FN_TYPE (to1);
+ if (TYPE_PTRMEMFUNC_P (to2))
+ to2 = TYPE_PTRMEMFUNC_FN_TYPE (to2);
+
to1 = TREE_TYPE (to1);
to2 = TREE_TYPE (to2);
@@ -5431,6 +5823,34 @@ compare_qual (ics1, ics2)
return 0;
}
+/* Determine whether standard conversion sequence ICS1 is a proper
+ subsequence of ICS2. We assume that a conversion of the same code
+ between the same types indicates a subsequence. */
+
+static int
+is_subseq (ics1, ics2)
+ tree ics1, ics2;
+{
+ /* Do not consider lvalue transformations here. */
+ if (TREE_CODE (ics2) == RVALUE_CONV
+ || TREE_CODE (ics2) == LVALUE_CONV)
+ return 0;
+
+ for (;; ics2 = TREE_OPERAND (ics2, 0))
+ {
+ if (TREE_CODE (ics2) == TREE_CODE (ics1)
+ && comptypes (TREE_TYPE (ics2), TREE_TYPE (ics1), 1)
+ && comptypes (TREE_TYPE (TREE_OPERAND (ics2, 0)),
+ TREE_TYPE (TREE_OPERAND (ics1, 0)), 1))
+ return 1;
+
+ if (TREE_CODE (ics2) == USER_CONV
+ || TREE_CODE (ics2) == AMBIG_CONV
+ || TREE_CODE (ics2) == IDENTITY_CONV)
+ return 0;
+ }
+}
+
/* Compare two implicit conversion sequences according to the rules set out in
[over.ics.rank]. Return values:
@@ -5528,7 +5948,14 @@ compare_ics (ics1, ics2)
#endif
if (TREE_CODE (main1) != TREE_CODE (main2))
- return 0;
+ {
+ /* ...if S1 is a proper subsequence of S2 */
+ if (is_subseq (main1, main2))
+ return 1;
+ if (is_subseq (main2, main1))
+ return -1;
+ return 0;
+ }
if (TREE_CODE (main1) == PTR_CONV || TREE_CODE (main1) == PMEM_CONV
|| TREE_CODE (main1) == REF_BIND || TREE_CODE (main1) == BASE_CONV)
@@ -5558,8 +5985,8 @@ compare_ics (ics1, ics2)
if (TYPE_PTRMEMFUNC_P (to1))
{
- to1 = TYPE_METHOD_BASETYPE (TYPE_PTRMEMFUNC_FN_TYPE (to1));
- from1 = TYPE_METHOD_BASETYPE (TYPE_PTRMEMFUNC_FN_TYPE (from1));
+ to1 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to1)));
+ from1 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from1)));
}
else if (TREE_CODE (main1) != BASE_CONV)
{
@@ -5576,8 +6003,8 @@ compare_ics (ics1, ics2)
if (TYPE_PTRMEMFUNC_P (to2))
{
- to2 = TYPE_METHOD_BASETYPE (TYPE_PTRMEMFUNC_FN_TYPE (to2));
- from2 = TYPE_METHOD_BASETYPE (TYPE_PTRMEMFUNC_FN_TYPE (from2));
+ to2 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (to2)));
+ from2 = TYPE_METHOD_BASETYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (from2)));
}
else if (TREE_CODE (main1) != BASE_CONV)
{
@@ -5678,6 +6105,22 @@ compare_ics (ics1, ics2)
return 0;
}
+/* The source type for this standard conversion sequence. */
+
+static tree
+source_type (t)
+ tree t;
+{
+ for (;; t = TREE_OPERAND (t, 0))
+ {
+ if (TREE_CODE (t) == USER_CONV
+ || TREE_CODE (t) == AMBIG_CONV
+ || TREE_CODE (t) == IDENTITY_CONV)
+ return TREE_TYPE (t);
+ }
+ my_friendly_abort (1823);
+}
+
/* Compare two candidates for overloading as described in
[over.match.best]. Return values:
@@ -5729,11 +6172,38 @@ joust (cand1, cand2)
for (i = 0; i < len; ++i)
{
- int comp = compare_ics (TREE_VEC_ELT (cand1->convs, i+off1),
- TREE_VEC_ELT (cand2->convs, i+off2));
+ tree t1 = TREE_VEC_ELT (cand1->convs, i+off1);
+ tree t2 = TREE_VEC_ELT (cand2->convs, i+off2);
+ int comp = compare_ics (t1, t2);
if (comp != 0)
{
+#if 0 /* move this warning to tourney. */
+ if (warn_sign_promo
+ && ICS_RANK (t1) + ICS_RANK (t2) == STD_RANK + PROMO_RANK
+ && TREE_CODE (t1) == STD_CONV
+ && TREE_CODE (t2) == STD_CONV
+ && TREE_CODE (TREE_TYPE (t1)) == INTEGER_TYPE
+ && TREE_CODE (TREE_TYPE (t2)) == INTEGER_TYPE
+ && (TYPE_PRECISION (TREE_TYPE (t1))
+ == TYPE_PRECISION (TREE_TYPE (t2)))
+ && (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (t1, 0)))
+ || (TREE_CODE (TREE_TYPE (TREE_OPERAND (t1, 0)))
+ == ENUMERAL_TYPE)))
+ {
+ tree type = TREE_TYPE (TREE_OPERAND (t1, 0));
+ tree type1, type2;
+ if (comp > 0)
+ type1 = TREE_TYPE (t1), type2 = TREE_TYPE (t2);
+ else
+ type1 = TREE_TYPE (t2), type2 = TREE_TYPE (t1);
+
+ cp_warning ("passing `%T' chooses `%T' over `%T'",
+ type, type1, type2);
+ cp_warning (" in call to `%D'", DECL_NAME (cand1->fn));
+ }
+#endif
+
if (winner && comp != winner)
{
winner = 0;
@@ -5743,6 +6213,29 @@ joust (cand1, cand2)
}
}
+#if 0 /* move this warning to tourney. */
+ /* warn about confusing overload resolution */
+ if (winner && cand1->second_conv
+ && ! DECL_CONSTRUCTOR_P (cand1->fn)
+ && ! DECL_CONSTRUCTOR_P (cand2->fn))
+ {
+ int comp = compare_ics (cand1->second_conv, cand2->second_conv);
+ if (comp && comp != winner)
+ {
+ struct z_candidate *w, *l;
+ if (winner == 1)
+ w = cand1, l = cand2;
+ else
+ w = cand2, l = cand1;
+ cp_warning ("choosing `%D' over `%D'", w->fn, l->fn);
+ cp_warning (" for conversion from `%T' to `%T'",
+ TREE_TYPE (source_type (TREE_VEC_ELT (w->convs, 0))),
+ TREE_TYPE (w->second_conv));
+ cp_warning (" because conversion sequence for `this' argument is better");
+ }
+ }
+#endif
+
if (winner)
return winner;
@@ -5778,10 +6271,10 @@ joust (cand1, cand2)
break;
if (i == TREE_VEC_LENGTH (cand1->convs))
return 1;
-#if 0
+
/* Kludge around broken overloading rules whereby
- bool ? void *const & : void *const & is ambiguous. */
- /* Huh? Explain the problem better. */
+ Integer a, b; test ? a : b; is ambiguous, since there's a builtin
+ that takes references and another that takes values. */
if (cand1->fn == ansi_opname[COND_EXPR])
{
tree c1 = TREE_VEC_ELT (cand1->convs, 1);
@@ -5797,7 +6290,6 @@ joust (cand1, cand2)
return -1;
}
}
-#endif
}
tweak:
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 5ab16582b61..01a736ac7ac 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -1,5 +1,5 @@
/* Functions related to building classes and their related objects.
- Copyright (C) 1987, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1987, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com)
This file is part of GNU CC.
@@ -72,7 +72,7 @@ struct class_level
int unused;
};
-/* The currect_class_ptr is the pointer to the current class.
+/* The current_class_ptr is the pointer to the current class.
current_class_ref is the actual current class. */
tree current_class_ptr, current_class_ref;
@@ -82,7 +82,49 @@ tree current_class_type; /* _TYPE: the type of the current class */
tree previous_class_type; /* _TYPE: the previous type that was a class */
tree previous_class_values; /* TREE_LIST: copy of the class_shadowed list
when leaving an outermost class scope. */
+
+struct base_info;
+
static tree get_vfield_name PROTO((tree));
+static void finish_struct_anon PROTO((tree));
+static tree build_vbase_pointer PROTO((tree, tree));
+static int complete_type_p PROTO((tree));
+static int typecode_p PROTO((tree, enum tree_code));
+static tree build_vtable_entry PROTO((tree, tree));
+static tree get_vtable_name PROTO((tree));
+static tree get_derived_offset PROTO((tree, tree));
+static tree get_basefndecls PROTO((tree, tree));
+static void set_rtti_entry PROTO((tree, tree, tree));
+static tree build_vtable PROTO((tree, tree));
+static void prepare_fresh_vtable PROTO((tree, tree));
+static void fixup_vtable_deltas1 PROTO((tree, tree));
+static void fixup_vtable_deltas PROTO((tree, int, tree));
+static void grow_method PROTO((tree, tree *));
+static void finish_vtbls PROTO((tree, int, tree));
+static void modify_vtable_entry PROTO((tree, tree, tree));
+static tree get_vtable_entry_n PROTO((tree, unsigned HOST_WIDE_INT));
+static void add_virtual_function PROTO((tree *, tree *, int *, tree, tree));
+static tree delete_duplicate_fields_1 PROTO((tree, tree));
+static void delete_duplicate_fields PROTO((tree));
+static void finish_struct_bits PROTO((tree, int));
+static int alter_access PROTO((tree, tree, tree));
+static int overrides PROTO((tree, tree));
+static int strictly_overrides PROTO((tree, tree));
+static void merge_overrides PROTO((tree, tree, int, tree));
+static void override_one_vtable PROTO((tree, tree, tree));
+static void mark_overriders PROTO((tree, tree));
+static void check_for_override PROTO((tree, tree));
+static tree maybe_fixup_vptrs PROTO((tree, tree, tree));
+static tree get_class_offset_1 PROTO((tree, tree, tree, tree, tree));
+static tree get_class_offset PROTO((tree, tree, tree, tree));
+static void modify_one_vtable PROTO((tree, tree, tree, tree));
+static void modify_all_vtables PROTO((tree, tree, tree));
+static void modify_all_direct_vtables PROTO((tree, int, tree, tree,
+ tree));
+static void modify_all_indirect_vtables PROTO((tree, int, int, tree,
+ tree, tree));
+static void build_class_init_list PROTO((tree));
+static int finish_base_struct PROTO((tree, struct base_info *, tree));
/* Way of stacking language names. */
tree *current_lang_base, *current_lang_stack;
@@ -227,6 +269,7 @@ build_vbase_path (code, type, expr, path, alias_this)
{
tree reverse_path = NULL_TREE;
+ push_expression_obstack ();
while (path)
{
tree r = copy_node (path);
@@ -235,6 +278,7 @@ build_vbase_path (code, type, expr, path, alias_this)
path = BINFO_INHERITANCE_CHAIN (path);
}
path = reverse_path;
+ pop_obstacks ();
}
basetype = BINFO_TYPE (path);
@@ -297,7 +341,8 @@ build_vbase_path (code, type, expr, path, alias_this)
if (null_expr)
{
TREE_OPERAND (expr, 2) = nonnull_expr;
- TREE_TYPE (TREE_OPERAND (expr, 1)) = TREE_TYPE (nonnull_expr);
+ TREE_TYPE (expr) = TREE_TYPE (TREE_OPERAND (expr, 1))
+ = TREE_TYPE (nonnull_expr);
}
else
expr = nonnull_expr;
@@ -371,11 +416,6 @@ build_vbase_path (code, type, expr, path, alias_this)
/* Virtual function things. */
-/* Virtual functions to be dealt with after laying out our base
- classes. We do all overrides after we layout virtual base classes. */
-
-static tree pending_hard_virtuals;
-
/* Build an entry in the virtual function table.
DELTA is the offset for the `this' pointer.
PFN is an ADDR_EXPR containing a pointer to the virtual function.
@@ -404,9 +444,9 @@ build_vtable_entry (delta, pfn)
else
{
extern int flag_huge_objects;
- tree elems = tree_cons (NULL_TREE, delta,
- tree_cons (NULL_TREE, integer_zero_node,
- build_tree_list (NULL_TREE, pfn)));
+ tree elems = expr_tree_cons (NULL_TREE, delta,
+ expr_tree_cons (NULL_TREE, integer_zero_node,
+ build_expr_list (NULL_TREE, pfn)));
tree entry = build (CONSTRUCTOR, vtable_entry_type, NULL_TREE, elems);
/* DELTA is constructed by `size_int', which means it may be an
@@ -543,8 +583,8 @@ get_vtable_name (type)
tree type;
{
tree type_id = build_typename_overload (type);
- char *buf = (char *)alloca (strlen (VTABLE_NAME_FORMAT)
- + IDENTIFIER_LENGTH (type_id) + 2);
+ char *buf = (char *) alloca (strlen (VTABLE_NAME_FORMAT)
+ + IDENTIFIER_LENGTH (type_id) + 2);
char *ptr = IDENTIFIER_POINTER (type_id);
int i;
for (i = 0; ptr[i] == OPERATOR_TYPENAME_FORMAT[i]; i++) ;
@@ -671,6 +711,7 @@ build_vtable (binfo, type)
TYPE_BINFO_VTABLE (type) = decl;
TYPE_BINFO_VIRTUALS (type) = virtuals;
+ DECL_ARTIFICIAL (decl) = 1;
TREE_STATIC (decl) = 1;
#ifndef WRITABLE_VTABLES
/* Make them READONLY by default. (mrs) */
@@ -691,69 +732,6 @@ build_vtable (binfo, type)
return decl;
}
-/* Given a base type PARENT, and a derived type TYPE, build
- a name which distinguishes exactly the PARENT member of TYPE's type.
-
- FORMAT is a string which controls how sprintf formats the name
- we have generated.
-
- For example, given
-
- class A; class B; class C : A, B;
-
- it is possible to distinguish "A" from "C's A". And given
-
- class L;
- class A : L; class B : L; class C : A, B;
-
- it is possible to distinguish "L" from "A's L", and also from
- "C's L from A".
-
- Make sure to use the DECL_ASSEMBLER_NAME of the TYPE_NAME of the
- type, as template have DECL_NAMEs like: X<int>, whereas the
- DECL_ASSEMBLER_NAME is set to be something the assembler can handle. */
-
-static tree
-build_type_pathname (format, parent, type)
- char *format;
- tree parent, type;
-{
- extern struct obstack temporary_obstack;
- char *first, *base, *name;
- int i;
- tree id;
-
- parent = TYPE_MAIN_VARIANT (parent);
-
- /* Remember where to cut the obstack to. */
- first = obstack_base (&temporary_obstack);
-
- /* Put on TYPE+PARENT. */
- obstack_grow (&temporary_obstack,
- TYPE_ASSEMBLER_NAME_STRING (type),
- TYPE_ASSEMBLER_NAME_LENGTH (type));
-#ifdef JOINER
- obstack_1grow (&temporary_obstack, JOINER);
-#else
- obstack_1grow (&temporary_obstack, '_');
-#endif
- obstack_grow0 (&temporary_obstack,
- TYPE_ASSEMBLER_NAME_STRING (parent),
- TYPE_ASSEMBLER_NAME_LENGTH (parent));
- i = obstack_object_size (&temporary_obstack);
- base = obstack_base (&temporary_obstack);
- obstack_finish (&temporary_obstack);
-
- /* Put on FORMAT+TYPE+PARENT. */
- obstack_blank (&temporary_obstack, strlen (format) + i + 1);
- name = obstack_base (&temporary_obstack);
- sprintf (name, format, base);
- id = get_identifier (name);
- obstack_free (&temporary_obstack, first);
-
- return id;
-}
-
extern tree signed_size_zero_node;
/* Give TYPE a new virtual function table which is initialized
@@ -764,23 +742,87 @@ extern tree signed_size_zero_node;
FOR_TYPE is the derived type which caused this table to
be needed.
- BINFO is the type association which provided TYPE for FOR_TYPE. */
+ BINFO is the type association which provided TYPE for FOR_TYPE.
+
+ The order in which vtables are built (by calling this function) for
+ an object must remain the same, otherwise a binary incompatibility
+ can result. */
static void
prepare_fresh_vtable (binfo, for_type)
tree binfo, for_type;
{
- tree basetype = BINFO_TYPE (binfo);
+ tree basetype;
tree orig_decl = BINFO_VTABLE (binfo);
- /* This name is too simplistic. We can have multiple basetypes for
- for_type, and we really want different names. (mrs) */
- tree name = build_type_pathname (VTABLE_NAME_FORMAT, basetype, for_type);
- tree new_decl = build_decl (VAR_DECL, name, TREE_TYPE (orig_decl));
+ tree name;
+ tree new_decl;
tree offset;
+ tree path = binfo;
+ char *buf, *buf2;
+ char joiner = '_';
+ int i;
+
+#ifdef JOINER
+ joiner = JOINER;
+#endif
+
+ basetype = TYPE_MAIN_VARIANT (BINFO_TYPE (binfo));
+
+ buf2 = TYPE_ASSEMBLER_NAME_STRING (basetype);
+ i = TYPE_ASSEMBLER_NAME_LENGTH (basetype) + 1;
+
+ /* We know that the vtable that we are going to create doesn't exist
+ yet in the global namespace, and when we finish, it will be
+ pushed into the global namespace. In complex MI hierarchies, we
+ have to loop while the name we are thinking of adding is globally
+ defined, adding more name components to the vtable name as we
+ loop, until the name is unique. This is because in complex MI
+ cases, we might have the same base more than once. This means
+ that the order in which this function is called for vtables must
+ remain the same, otherwise binary compatibility can be
+ compromised. */
+ while (1)
+ {
+ char *buf1 = (char *) alloca (TYPE_ASSEMBLER_NAME_LENGTH (for_type) + 1 + i);
+ char *new_buf2;
+
+ sprintf (buf1, "%s%c%s", TYPE_ASSEMBLER_NAME_STRING (for_type), joiner,
+ buf2);
+ buf = (char *) alloca (strlen (VTABLE_NAME_FORMAT) + strlen (buf1) + 1);
+ sprintf (buf, VTABLE_NAME_FORMAT, buf1);
+ name = get_identifier (buf);
+
+ /* If this name doesn't clash, then we can use it, otherwise
+ we add more to the name until it is unique. */
+
+ if (! IDENTIFIER_GLOBAL_VALUE (name))
+ break;
+
+ /* Set values for next loop through, if the name isn't unique. */
+
+ path = BINFO_INHERITANCE_CHAIN (path);
+
+ /* We better not run out of stuff to make it unique. */
+ my_friendly_assert (path != NULL_TREE, 368);
+
+ basetype = TYPE_MAIN_VARIANT (BINFO_TYPE (path));
+
+ /* We better not run out of stuff to make it unique. */
+ my_friendly_assert (for_type != basetype, 369);
+
+ i = TYPE_ASSEMBLER_NAME_LENGTH (basetype) + 1 + i;
+ new_buf2 = (char *) alloca (i);
+ sprintf (new_buf2, "%s%c%s",
+ TYPE_ASSEMBLER_NAME_STRING (basetype), joiner, buf2);
+ buf2 = new_buf2;
+ }
+
+ new_decl = build_decl (VAR_DECL, name, TREE_TYPE (orig_decl));
/* Remember which class this vtable is really for. */
DECL_CONTEXT (new_decl) = for_type;
+ DECL_ARTIFICIAL (new_decl) = 1;
TREE_STATIC (new_decl) = 1;
BINFO_VTABLE (binfo) = pushdecl_top_level (new_decl);
DECL_VIRTUAL_P (new_decl) = 1;
@@ -906,13 +948,16 @@ get_vtable_entry_n (virtuals, n)
vtable for the type, and we build upon the PENDING_VIRTUALS list
and return it. */
-static tree
-add_virtual_function (pending_virtuals, has_virtual, fndecl, t)
- tree pending_virtuals;
+static void
+add_virtual_function (pv, phv, has_virtual, fndecl, t)
+ tree *pv, *phv;
int *has_virtual;
tree fndecl;
tree t; /* Structure type. */
{
+ tree pending_virtuals = *pv;
+ tree pending_hard_virtuals = *phv;
+
/* FUNCTION_TYPEs and OFFSET_TYPEs no longer freely
convert to void *. Make such a conversion here. */
tree vfn = build1 (ADDR_EXPR, vfunc_ptr_type_node, fndecl);
@@ -976,7 +1021,8 @@ add_virtual_function (pending_virtuals, has_virtual, fndecl, t)
Deal with this after we have laid out our virtual base classes. */
pending_hard_virtuals = temp_tree_cons (fndecl, vfn, pending_hard_virtuals);
}
- return pending_virtuals;
+ *pv = pending_virtuals;
+ *phv = pending_hard_virtuals;
}
/* Obstack on which to build the vector of class methods. */
@@ -1827,33 +1873,10 @@ grow_method (fndecl, method_vec_ptr)
if (testp < (tree *) obstack_next_free (&class_obstack))
{
- tree x, prev_x;
-
- for (x = *testp; x; x = DECL_CHAIN (x))
- {
- if (DECL_NAME (fndecl) == ansi_opname[(int) DELETE_EXPR]
- || DECL_NAME (fndecl) == ansi_opname[(int) VEC_DELETE_EXPR])
- {
- /* ANSI C++ June 5 1992 WP 12.5.5.1 */
- cp_error_at ("`%D' overloaded", fndecl);
- cp_error_at ("previous declaration as `%D' here", x);
- }
- if (DECL_ASSEMBLER_NAME (fndecl) == DECL_ASSEMBLER_NAME (x))
- {
- /* Friend-friend ambiguities are warned about outside
- this loop. */
- cp_error_at ("ambiguous method `%#D' in structure", fndecl);
- break;
- }
- prev_x = x;
- }
- if (x == 0)
- {
- if (*testp)
- DECL_CHAIN (prev_x) = fndecl;
- else
- *testp = fndecl;
- }
+ tree *p;
+ for (p = testp; *p; )
+ p = &DECL_CHAIN (*p);
+ *p = fndecl;
}
else
{
@@ -2057,6 +2080,53 @@ finish_struct_methods (t, fn_fields, nonprivate_method)
obstack_free (current_obstack, baselink_vec);
}
+ /* Now, figure out what any member template specializations were
+ specializing. */
+ for (i = 0; i < TREE_VEC_LENGTH (method_vec); ++i)
+ {
+ tree fn;
+ for (fn = TREE_VEC_ELT (method_vec, i);
+ fn != NULL_TREE;
+ fn = DECL_CHAIN (fn))
+ if (DECL_TEMPLATE_SPECIALIZATION (fn))
+ {
+ tree f;
+ tree spec_args;
+
+ /* If there is a template, and t uses template parms, we
+ are dealing with a specialization of a member
+ template in a template class, and we must grab the
+ template, rather than the function. */
+ if (DECL_TI_TEMPLATE (fn) && uses_template_parms (t))
+ f = DECL_TI_TEMPLATE (fn);
+ else
+ f = fn;
+
+ /* We want the specialization arguments, which will be the
+ innermost ones. */
+ if (DECL_TI_ARGS (f)
+ && TREE_CODE (DECL_TI_ARGS (f)) == TREE_VEC)
+ spec_args
+ = TREE_VEC_ELT (DECL_TI_ARGS (f), 0);
+ else
+ spec_args = DECL_TI_ARGS (f);
+
+ check_explicit_specialization
+ (lookup_template_function (DECL_NAME (f), spec_args),
+ f, 0, 1);
+
+ /* Now, the assembler name will be correct for fn, so we
+ make its RTL. */
+ DECL_RTL (f) = 0;
+ make_decl_rtl (f, NULL_PTR, 1);
+ if (f != fn)
+ {
+ DECL_RTL (fn) = 0;
+ make_decl_rtl (fn, NULL_PTR, 1);
+ }
+ }
+ }
+
return method_vec;
}
@@ -2727,7 +2797,7 @@ merge_overrides (binfo, old, do_self, t)
overridden or hidden by FNDECL as a list. We set TREE_PURPOSE with
the overrider/hider. */
-tree
+static tree
get_basefndecls (fndecl, t)
tree fndecl, t;
{
@@ -3038,6 +3108,7 @@ finish_struct_1 (t, warn_anon)
int has_virtual;
int max_has_virtual;
tree pending_virtuals = NULL_TREE;
+ tree pending_hard_virtuals = NULL_TREE;
tree abstract_virtuals = NULL_TREE;
tree vfield;
tree vfields;
@@ -3204,8 +3275,8 @@ finish_struct_1 (t, warn_anon)
if (DECL_VINDEX (x)
|| (all_virtual == 1 && ! DECL_CONSTRUCTOR_P (x)))
{
- pending_virtuals = add_virtual_function (pending_virtuals,
- &has_virtual, x, t);
+ add_virtual_function (&pending_virtuals, &pending_hard_virtuals,
+ &has_virtual, x, t);
if (DECL_ABSTRACT_VIRTUAL_P (x))
abstract_virtuals = tree_cons (NULL_TREE, x, abstract_virtuals);
#if 0
@@ -3255,7 +3326,7 @@ finish_struct_1 (t, warn_anon)
fdecl = lookup_fnfields (binfo, sname, 0);
if (fdecl)
- access_decls = tree_cons (access, fdecl, access_decls);
+ access_decls = scratch_tree_cons (access, fdecl, access_decls);
else
cp_error_at ("no members matching `%D' in `%#T'", x, ctype);
continue;
@@ -3592,8 +3663,8 @@ finish_struct_1 (t, warn_anon)
fn_fields = dtor;
if (DECL_VINDEX (dtor))
- pending_virtuals = add_virtual_function (pending_virtuals,
- &has_virtual, dtor, t);
+ add_virtual_function (&pending_virtuals, &pending_hard_virtuals,
+ &has_virtual, dtor, t);
nonprivate_method = 1;
}
}
@@ -4339,7 +4410,8 @@ finish_struct (t, list_of_fieldlists, attributes, warn_anon)
}
}
- if (TREE_CODE (x) == FUNCTION_DECL)
+ if (TREE_CODE (x) == FUNCTION_DECL
+ || DECL_FUNCTION_TEMPLATE_P (x))
{
DECL_CLASS_CONTEXT (x) = t;
if (last_x)
@@ -4854,6 +4926,8 @@ instantiate_type (lhstype, rhs, complain)
tree lhstype, rhs;
int complain;
{
+ tree explicit_targs = NULL_TREE;
+
if (TREE_CODE (lhstype) == UNKNOWN_TYPE)
{
if (complain)
@@ -4968,6 +5042,13 @@ instantiate_type (lhstype, rhs, complain)
return rhs;
}
+ case TEMPLATE_ID_EXPR:
+ {
+ explicit_targs = TREE_OPERAND (rhs, 1);
+ rhs = TREE_OPERAND (rhs, 0);
+ }
+ /* fall through */
+
case TREE_LIST:
{
tree elem, baselink, name;
@@ -5002,14 +5083,17 @@ instantiate_type (lhstype, rhs, complain)
if (globals > 0)
{
elem = get_first_fn (rhs);
- while (elem)
- if (! comptypes (lhstype, TREE_TYPE (elem), 1))
- elem = DECL_CHAIN (elem);
- else
- {
- mark_used (elem);
- return elem;
- }
+ /* If there are explicit_targs, only a template function
+ can match. */
+ if (explicit_targs == NULL_TREE)
+ while (elem)
+ if (! comptypes (lhstype, TREE_TYPE (elem), 1))
+ elem = DECL_CHAIN (elem);
+ else
+ {
+ mark_used (elem);
+ return elem;
+ }
/* No exact match found, look for a compatible template. */
{
@@ -5017,12 +5101,14 @@ instantiate_type (lhstype, rhs, complain)
for (elem = get_first_fn (rhs); elem; elem = DECL_CHAIN (elem))
if (TREE_CODE (elem) == TEMPLATE_DECL)
{
- int n = TREE_VEC_LENGTH (DECL_TEMPLATE_PARMS (elem));
- tree *t = (tree *) alloca (sizeof (tree) * n);
+ int n = DECL_NTPARMS (elem);
+ tree t = make_scratch_vec (n);
int i, d = 0;
- i = type_unification (DECL_TEMPLATE_PARMS (elem), t,
- TYPE_ARG_TYPES (TREE_TYPE (elem)),
- TYPE_ARG_TYPES (lhstype), &d, 0, 1);
+ i = type_unification
+ (DECL_INNERMOST_TEMPLATE_PARMS (elem),
+ &TREE_VEC_ELT (t, 0), TYPE_ARG_TYPES (TREE_TYPE (elem)),
+ TYPE_ARG_TYPES (lhstype), explicit_targs, &d,
+ 1, 1);
if (i == 0)
{
if (save_elem)
@@ -5044,38 +5130,47 @@ instantiate_type (lhstype, rhs, complain)
}
}
- /* No match found, look for a compatible function. */
- elem = get_first_fn (rhs);
- while (elem && comp_target_types (lhstype,
- TREE_TYPE (elem), 1) <= 0)
- elem = DECL_CHAIN (elem);
- if (elem)
+ /* If there are explicit_targs, only a template function
+ can match. */
+ if (explicit_targs == NULL_TREE)
{
- tree save_elem = elem;
- elem = DECL_CHAIN (elem);
+ /* No match found, look for a compatible function. */
+ elem = get_first_fn (rhs);
while (elem && comp_target_types (lhstype,
- TREE_TYPE (elem), 0) <= 0)
+ TREE_TYPE (elem), 1) <= 0)
elem = DECL_CHAIN (elem);
if (elem)
{
- if (complain)
+ tree save_elem = elem;
+ elem = DECL_CHAIN (elem);
+ while (elem
+ && comp_target_types (lhstype,
+ TREE_TYPE (elem), 0) <= 0)
+ elem = DECL_CHAIN (elem);
+ if (elem)
{
- cp_error ("cannot resolve overload to target type `%#T'",
- lhstype);
- cp_error_at (" ambiguity between `%#D'", save_elem);
- cp_error_at (" and `%#D', at least", elem);
+ if (complain)
+ {
+ cp_error
+ ("cannot resolve overload to target type `%#T'",
+ lhstype);
+ cp_error_at (" ambiguity between `%#D'",
+ save_elem);
+ cp_error_at (" and `%#D', at least", elem);
+ }
+ return error_mark_node;
}
- return error_mark_node;
+ mark_used (save_elem);
+ return save_elem;
}
- mark_used (save_elem);
- return save_elem;
}
if (complain)
{
cp_error ("cannot resolve overload to target type `%#T'",
lhstype);
- cp_error (" because no suitable overload of function `%D' exists",
- TREE_PURPOSE (rhs));
+ cp_error
+ (" because no suitable overload of function `%D' exists",
+ TREE_PURPOSE (rhs));
}
return error_mark_node;
}
@@ -5312,8 +5407,8 @@ get_vfield_name (type)
binfo = BINFO_BASETYPE (binfo, 0);
type = BINFO_TYPE (binfo);
- buf = (char *)alloca (sizeof (VFIELD_NAME_FORMAT)
- + TYPE_NAME_LENGTH (type) + 2);
+ buf = (char *) alloca (sizeof (VFIELD_NAME_FORMAT)
+ + TYPE_NAME_LENGTH (type) + 2);
sprintf (buf, VFIELD_NAME_FORMAT, TYPE_NAME_STRING (type));
return get_identifier (buf);
}
diff --git a/gcc/cp/class.h b/gcc/cp/class.h
index 1c83d5beb7a..12e45f78415 100644
--- a/gcc/cp/class.h
+++ b/gcc/cp/class.h
@@ -103,7 +103,7 @@ struct candidate
-5 if contravariance violation. */
} u;
};
-int rank_for_overload ();
+int rank_for_overload PROTO ((struct candidate *, struct candidate *));
/* Variables shared between class.c and call.c. */
diff --git a/gcc/cp/config-lang.in b/gcc/cp/config-lang.in
index 66fe112519e..9b39d51ed87 100644
--- a/gcc/cp/config-lang.in
+++ b/gcc/cp/config-lang.in
@@ -32,8 +32,10 @@ compilers="cc1plus\$(exeext)"
stagestuff="g++\$(exeext) g++-cross\$(exeext) cc1plus\$(exeext)"
-diff_excludes="-x cp/parse.c -x cp/parse.h"
+diff_excludes="-x parse.c -x parse.h"
headers='$(CXX_EXTRA_HEADERS)'
lib2funcs=cplib2.txt
+
+outputs=cp/Makefile
diff --git a/gcc/cp/cp-tree.def b/gcc/cp/cp-tree.def
index a92bf8a6f11..65d20a71e5e 100644
--- a/gcc/cp/cp-tree.def
+++ b/gcc/cp/cp-tree.def
@@ -91,7 +91,7 @@ DEFTREECODE (TYPENAME_TYPE, "typename_type", "t", 0)
/* Index into a template parameter list. This parameter must not be a
type. */
-DEFTREECODE (TEMPLATE_CONST_PARM, "template_const_parm", "c", 2)
+DEFTREECODE (TEMPLATE_CONST_PARM, "template_const_parm", "c", 3)
/* A thunk is a stub function.
@@ -113,6 +113,14 @@ DEFTREECODE (USING_DECL, "using_decl", "d", 0)
/* An un-parsed default argument. Looks like an IDENTIFIER_NODE. */
DEFTREECODE (DEFAULT_ARG, "default_arg", "c", 2)
+/* A template-id, like foo<int>. The first operand is the template.
+ The second is the list of explicitly specified arguments. The
+ template will be a FUNCTION_DECL, TEMPLATE_DECL, or a list of
+ overloaded functions and templates if the template-id refers to
+ a global template. If the template-id refers to a member template,
+ the template will will be an IDENTIFIER_NODE. */
+DEFTREECODE (TEMPLATE_ID_EXPR, "template_id_expr", "e", 2)
+
/* A whole bunch of tree codes for the initial, superficial parsing of
templates. */
DEFTREECODE (LOOKUP_EXPR, "lookup_expr", "e", 2)
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index 201db3e6e15..67cc22face8 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -248,10 +248,19 @@ extern int warn_pmf2ptr;
extern int warn_ecpp;
+/* Nonzero means warn where overload resolution chooses a promotion from
+ unsigned to signed over a conversion to an unsigned of the same size. */
+
+extern int warn_sign_promo;
+
/* Non-zero means warn when a function is declared extern and later inline. */
extern int warn_extern_inline;
+/* Non-zero means warn when an old-style cast is used. */
+
+extern int warn_old_style_cast;
+
/* Nonzero means to treat bitfields as unsigned unless they say `signed'. */
extern int flag_signed_bitfields;
@@ -302,6 +311,14 @@ extern int flag_handle_signatures;
inline by default. */
extern int flag_default_inline;
+
+/* The name-mangling scheme to use. Versions of gcc before 2.8 use
+ version 0. */
+extern int name_mangling_version;
+
+/* Nonzero means that guiding declarations are allowed. */
+extern int flag_guiding_decls;
+
/* C++ language-specific tree codes. */
#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) SYM,
@@ -923,10 +940,10 @@ struct lang_decl_flags
unsigned saved_inline : 1;
unsigned use_template : 2;
- unsigned c_static : 1;
unsigned nonconverting : 1;
unsigned declared_inline : 1;
unsigned not_really_extern : 1;
+ unsigned comdat : 1;
unsigned dummy : 4;
tree access;
@@ -1086,6 +1103,7 @@ struct lang_decl
#define CLASSTYPE_TI_TEMPLATE(NODE) TI_TEMPLATE (CLASSTYPE_TEMPLATE_INFO (NODE))
#define CLASSTYPE_TI_ARGS(NODE) TI_ARGS (CLASSTYPE_TEMPLATE_INFO (NODE))
#define CLASSTYPE_TI_SPEC_INFO(NODE) TI_SPEC_INFO (CLASSTYPE_TEMPLATE_INFO (NODE))
+#define INNERMOST_TEMPLATE_PARMS(NODE) TREE_VALUE(NODE)
#define DECL_SAVED_TREE(NODE) DECL_MEMFUNC_POINTER_TO (NODE)
#define COMPOUND_STMT_NO_SCOPE(NODE) TREE_LANG_FLAG_0 (NODE)
@@ -1329,6 +1347,10 @@ extern int flag_new_for_scope;
/* Accessor macros for C++ template decl nodes. */
#define DECL_TEMPLATE_PARMS(NODE) DECL_ARGUMENTS(NODE)
+#define DECL_INNERMOST_TEMPLATE_PARMS(NODE) \
+ INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (NODE))
+#define DECL_NTPARMS(NODE) \
+ TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (NODE))
/* For class templates. */
#define DECL_TEMPLATE_SPECIALIZATIONS(NODE) DECL_SIZE(NODE)
/* For function, method, class-data templates. */
@@ -1341,7 +1363,7 @@ extern int flag_new_for_scope;
&& TREE_CODE (DECL_TEMPLATE_RESULT (NODE)) == FUNCTION_DECL)
#define PRIMARY_TEMPLATE_P(NODE) \
- (TREE_TYPE (DECL_TEMPLATE_PARMS (NODE)) == (NODE))
+ (TREE_TYPE (DECL_INNERMOST_TEMPLATE_PARMS (NODE)) == (NODE))
#define CLASSTYPE_TEMPLATE_LEVEL(NODE) \
(TREE_INT_CST_HIGH (TREE_PURPOSE (CLASSTYPE_TI_TEMPLATE (NODE))))
@@ -1384,11 +1406,6 @@ extern int flag_new_for_scope;
/* We know what we're doing with this decl now. */
#define DECL_INTERFACE_KNOWN(NODE) DECL_LANG_FLAG_5 (NODE)
-/* This decl was declared or deduced to have internal linkage. This is
- only meaningful if TREE_PUBLIC is set. */
-#define DECL_C_STATIC(NODE) \
- (DECL_LANG_SPECIFIC (NODE)->decl_flags.c_static)
-
/* This function was declared inline. This flag controls the linkage
semantics of 'inline'; whether or not the function is inlined is
controlled by DECL_INLINE. */
@@ -1404,9 +1421,9 @@ extern int flag_new_for_scope;
#define DECL_REALLY_EXTERN(NODE) \
(DECL_EXTERNAL (NODE) && ! DECL_NOT_REALLY_EXTERN (NODE))
-#define DECL_PUBLIC(NODE) \
- (TREE_CODE (NODE) == FUNCTION_DECL \
- ? ! DECL_C_STATIC (NODE) : TREE_PUBLIC (NODE))
+/* Used to tell cp_finish_decl that it should approximate comdat linkage
+ as best it can for this decl. */
+#define DECL_COMDAT(NODE) (DECL_LANG_SPECIFIC (NODE)->decl_flags.comdat)
#define THUNK_DELTA(DECL) ((DECL)->decl.frame_size.i)
@@ -1419,7 +1436,7 @@ extern int flag_new_for_scope;
#define DEFARG_POINTER(NODE) IDENTIFIER_POINTER(NODE)
#define builtin_function(NAME, TYPE, CODE, LIBNAME) \
- define_function (NAME, TYPE, CODE, (void (*)())pushdecl, LIBNAME)
+ define_function (NAME, TYPE, CODE, (void (*) PROTO((tree)))pushdecl, LIBNAME)
/* An enumeration of the kind of tags that C++ accepts. */
enum tag_types { record_type, class_type, union_type, enum_type,
@@ -1463,7 +1480,7 @@ extern tree convert_and_check PROTO((tree, tree));
extern void overflow_warning PROTO((tree));
extern void unsigned_conversion_warning PROTO((tree, tree));
/* Read the rest of the current #-directive line. */
-extern char *get_directive_line STDIO_PROTO((FILE *));
+extern char *get_directive_line PROTO((FILE *));
/* Subroutine of build_binary_op, used for comparison operations.
See if the operands have both been converted from subword integer types
and, if so, perhaps change them both back to their original type. */
@@ -1943,8 +1960,10 @@ extern tree build_overload_call PROTO((tree, tree, int));
extern int null_ptr_cst_p PROTO((tree));
extern tree type_decays_to PROTO((tree));
extern tree build_user_type_conversion PROTO((tree, tree, int));
-extern tree build_new_function_call PROTO((tree, tree, tree));
+extern tree build_new_function_call PROTO((tree, tree));
extern tree build_new_op PROTO((enum tree_code, int, tree, tree, tree));
+extern tree build_op_new_call PROTO((enum tree_code, tree, tree, int));
+extern tree build_op_delete_call PROTO((enum tree_code, tree, tree, int));
extern int can_convert PROTO((tree, tree));
extern int can_convert_arg PROTO((tree, tree, tree));
@@ -1971,6 +1990,7 @@ extern void print_class_statistics PROTO((void));
extern void maybe_push_cache_obstack PROTO((void));
extern unsigned HOST_WIDE_INT skip_rtti_stuff PROTO((tree *));
extern tree build_self_reference PROTO((void));
+extern void warn_hidden PROTO((tree));
/* in cvt.c */
extern tree convert_to_reference PROTO((tree, tree, int, int, tree));
@@ -2001,15 +2021,15 @@ extern void pushlevel PROTO((int));
extern void note_level_for_for PROTO((void));
extern void pushlevel_temporary PROTO((int));
extern tree poplevel PROTO((int, int, int));
-/* resume_level */
+extern void resume_level PROTO((struct binding_level *));
extern void delete_block PROTO((tree));
extern void insert_block PROTO((tree));
extern void add_block_current_level PROTO((tree));
extern void set_block PROTO((tree));
extern void pushlevel_class PROTO((void));
extern tree poplevel_class PROTO((int));
-/* skip print_other_binding_stack and print_binding_level */
extern void print_binding_stack PROTO((void));
+extern void print_binding_level PROTO((struct binding_level *));
extern void push_namespace PROTO((tree));
extern void pop_namespace PROTO((void));
extern void maybe_push_to_top_level PROTO((int));
@@ -2050,7 +2070,9 @@ extern tree lookup_name_current_level PROTO((tree));
extern tree auto_function PROTO((tree, tree, enum built_in_function));
extern void init_decl_processing PROTO((void));
extern int init_type_desc PROTO((void));
-/* skipped define_function */
+extern tree define_function
+ PROTO((char *, tree, enum built_in_function,
+ void (*) (tree), char *));
extern void shadow_tag PROTO((tree));
extern tree groktypename PROTO((tree));
extern tree start_decl PROTO((tree, tree, int));
@@ -2089,6 +2111,9 @@ extern int id_in_current_class PROTO((tree));
extern void push_cp_function_context PROTO((tree));
extern void pop_cp_function_context PROTO((tree));
extern int in_function_p PROTO((void));
+extern void replace_defarg PROTO((tree, tree));
+extern void print_other_binding_stack PROTO((struct binding_level *));
+extern tree strip_attrs PROTO((tree));
/* in decl2.c */
extern int flag_assume_nonnull_objects;
@@ -2101,6 +2126,7 @@ extern tree grok_alignof PROTO((tree));
extern tree grok_array_decl PROTO((tree, tree));
extern tree delete_sanity PROTO((tree, tree, int, int));
extern tree check_classfn PROTO((tree, tree));
+extern void check_member_template PROTO((tree));
extern tree grokfield PROTO((tree, tree, tree, tree, tree));
extern tree grokbitfield PROTO((tree, tree, tree));
extern tree groktypefield PROTO((tree, tree));
@@ -2122,8 +2148,10 @@ extern tree coerce_delete_type PROTO((tree));
extern void comdat_linkage PROTO((tree));
extern void import_export_vtable PROTO((tree, tree, int));
extern int finish_prevtable_vardecl PROTO((tree, tree));
-extern int walk_vtables PROTO((void (*)(), int (*)()));
-extern void walk_sigtables PROTO((void (*)(), void (*)()));
+extern int walk_vtables PROTO((void (*)(tree, tree),
+ int (*)(tree, tree)));
+extern void walk_sigtables PROTO((void (*)(tree, tree),
+ void (*)(tree, tree)));
extern void import_export_decl PROTO((tree));
extern tree build_cleanup PROTO((tree));
extern void finish_file PROTO((void));
@@ -2141,6 +2169,7 @@ extern tree do_class_using_decl PROTO((tree));
extern void do_using_directive PROTO((tree));
extern void check_default_args PROTO((tree));
extern void mark_used PROTO((tree));
+extern tree handle_class_head PROTO((tree, tree, tree));
/* in errfn.c */
extern void cp_error ();
@@ -2166,6 +2195,8 @@ extern char *op_as_string PROTO((enum tree_code, int));
extern char *assop_as_string PROTO((enum tree_code, int));
extern char *cv_as_string PROTO((tree, int));
extern char *lang_decl_name PROTO((tree, int));
+extern char *cp_file_of PROTO((tree));
+extern int cp_line_of PROTO((tree));
/* in except.c */
extern void init_exception_processing PROTO((void));
@@ -2180,7 +2211,6 @@ extern void expand_throw PROTO((tree));
extern tree build_throw PROTO((tree));
/* in expr.c */
-/* skip cplus_expand_expr */
extern void init_cplus_expand PROTO((void));
extern void fixup_result_decl PROTO((tree, struct rtx_def *));
extern int extract_init PROTO((tree, tree));
@@ -2235,13 +2265,11 @@ extern void print_parse_statistics PROTO((void));
extern void extract_interface_info PROTO((void));
extern void do_pending_inlines PROTO((void));
extern void process_next_inline PROTO((tree));
-/* skip save_pending_input */
-/* skip restore_pending_input */
+extern struct pending_input *save_pending_input PROTO((void));
+extern void restore_pending_input PROTO((struct pending_input *));
extern void yyungetc PROTO((int, int));
extern void reinit_parse_for_method PROTO((int, tree));
-#if 0
extern void reinit_parse_for_block PROTO((int, struct obstack *));
-#endif
extern tree cons_up_default_function PROTO((tree, tree, int));
extern void check_for_missing_semicolon PROTO((tree));
extern void note_got_semicolon PROTO((tree));
@@ -2261,14 +2289,22 @@ extern tree make_lang_type PROTO((enum tree_code));
extern void dump_time_statistics PROTO((void));
/* extern void compiler_error PROTO((char *, HOST_WIDE_INT, HOST_WIDE_INT)); */
extern void yyerror PROTO((char *));
+extern void clear_inline_text_obstack PROTO((void));
+extern void maybe_snarf_defarg PROTO((void));
+extern tree snarf_defarg PROTO((void));
+extern void add_defarg_fn PROTO((tree));
+extern void do_pending_defargs PROTO((void));
+extern int identifier_type PROTO((tree));
+extern void yyhook PROTO((int));
/* in method.c */
extern void init_method PROTO((void));
extern void do_inline_function_hair PROTO((tree, tree));
-/* skip report_type_mismatch */
+extern void report_type_mismatch PROTO((struct candidate *, tree, char *));
extern char *build_overload_name PROTO((tree, int, int));
extern tree build_static_name PROTO((tree, tree));
extern tree build_decl_overload PROTO((tree, tree, int));
+extern tree build_template_decl_overload PROTO((tree, tree, tree, tree, tree, int));
extern tree build_typename_overload PROTO((tree));
extern tree build_overload_with_type PROTO((tree, tree));
extern tree build_opfncall PROTO((enum tree_code, int, tree, tree, tree));
@@ -2276,24 +2312,34 @@ extern tree hack_identifier PROTO((tree, tree));
extern tree make_thunk PROTO((tree, int));
extern void emit_thunk PROTO((tree));
extern void synthesize_method PROTO((tree));
+extern tree get_id_2 PROTO((char *, tree));
/* in pt.c */
-extern tree tsubst PROTO ((tree, tree*, int, tree));
-extern tree tsubst_expr PROTO ((tree, tree*, int, tree));
-extern tree tsubst_copy PROTO ((tree, tree*, int, tree));
+extern tree tsubst PROTO ((tree, tree, int, tree));
+extern tree tsubst_expr PROTO ((tree, tree, int, tree));
+extern tree tsubst_copy PROTO ((tree, tree, int, tree));
extern tree tsubst_chain PROTO((tree, tree));
+extern void begin_member_template_processing PROTO((tree));
+extern void end_member_template_processing PROTO((void));
extern void begin_template_parm_list PROTO((void));
+extern void begin_specialization PROTO((void));
+extern void reset_specialization PROTO((void));
+extern void end_specialization PROTO((void));
+extern tree determine_explicit_specialization PROTO((tree, tree, tree *, int, int));
+extern int check_explicit_specialization PROTO((tree, tree, int, int));
extern tree process_template_parm PROTO((tree, tree));
extern tree end_template_parm_list PROTO((tree));
extern void end_template_decl PROTO((void));
extern tree current_template_args PROTO((void));
extern void push_template_decl PROTO((tree));
extern tree lookup_template_class PROTO((tree, tree, tree));
+extern tree lookup_template_function PROTO((tree, tree));
extern int uses_template_parms PROTO((tree));
extern tree instantiate_class_template PROTO((tree));
-extern tree instantiate_template PROTO((tree, tree *));
+extern tree instantiate_template PROTO((tree, tree));
extern void overload_template_name PROTO((tree));
-extern int type_unification PROTO((tree, tree *, tree, tree, int *, int, int));
+extern int fn_type_unification PROTO((tree, tree, tree, tree, tree, int));
+extern int type_unification PROTO((tree, tree *, tree, tree, tree, int *, int, int));
struct tinst_level *tinst_for_decl PROTO((void));
extern void mark_decl_instantiated PROTO((tree, int));
extern int more_specialized PROTO((tree, tree));
@@ -2303,10 +2349,17 @@ extern void do_type_instantiation PROTO((tree, tree));
extern tree instantiate_decl PROTO((tree));
extern tree lookup_nested_type_by_name PROTO((tree, tree));
extern tree do_poplevel PROTO((void));
-extern tree *get_bindings PROTO((tree, tree));
+extern tree get_bindings PROTO((tree, tree));
/* CONT ... */
extern void add_tree PROTO((tree));
extern void add_maybe_template PROTO((tree, tree));
+extern void pop_tinst_level PROTO((void));
+extern tree most_specialized PROTO((tree, tree));
+extern tree most_specialized_class PROTO((tree, tree));
+extern int more_specialized_class PROTO((tree, tree));
+extern void do_pushlevel PROTO((void));
+extern int is_member_template PROTO((tree));
+extern int processing_specialization;
/* in repo.c */
extern void repo_template_used PROTO((tree));
@@ -2350,7 +2403,7 @@ extern void add_mi_virtuals PROTO((int, tree));
extern void report_ambiguous_mi_virtuals PROTO((int, tree));
extern void note_debug_info_needed PROTO((tree));
extern void push_class_decls PROTO((tree));
-extern void pop_class_decls PROTO(());
+extern void pop_class_decls PROTO((void));
extern void unuse_fields PROTO((tree));
extern void unmark_finished_struct PROTO((tree));
extern void print_search_statistics PROTO((void));
@@ -2370,7 +2423,7 @@ extern void append_signature_fields PROTO((tree));
/* in spew.c */
extern void init_spew PROTO((void));
-extern int peek_yylex PROTO((void));
+extern int peekyylex PROTO((void));
extern int yylex PROTO((void));
extern tree arbitrate_lookup PROTO((tree, tree, tree));
@@ -2405,12 +2458,12 @@ extern tree fnaddr_from_vtable_entry PROTO((tree));
extern tree function_arg_chain PROTO((tree));
extern int promotes_to_aggr_type PROTO((tree, enum tree_code));
extern int is_aggr_type_2 PROTO((tree, tree));
-extern void message_2_types PROTO((void (*)(), char *, tree, tree));
extern char *lang_printable_name PROTO((tree, int));
extern tree build_exception_variant PROTO((tree, tree));
extern tree copy_to_permanent PROTO((tree));
extern void print_lang_statistics PROTO((void));
-/* skip __eprintf */
+extern void __eprintf
+ PROTO((const char *, const char *, unsigned, const char *));
extern tree array_type_nelts_total PROTO((tree));
extern tree array_type_nelts_top PROTO((tree));
extern tree break_out_target_exprs PROTO((tree));
@@ -2419,6 +2472,17 @@ extern tree vec_binfo_member PROTO((tree, tree));
extern tree hack_decl_function_context PROTO((tree));
extern tree lvalue_type PROTO((tree));
extern tree error_type PROTO((tree));
+extern tree make_temp_vec PROTO((int));
+extern int varargs_function_p PROTO((tree));
+extern int really_overloaded_fn PROTO((tree));
+extern int cp_tree_equal PROTO((tree, tree));
+extern int can_free PROTO((struct obstack *, tree));
+extern tree mapcar PROTO((tree, tree (*) (tree)));
+extern void debug_binfo PROTO((tree));
+#define scratchalloc expralloc
+#define scratch_tree_cons expr_tree_cons
+#define build_scratch_list build_expr_list
+#define make_scratch_vec make_temp_vec
/* in typeck.c */
extern tree condition_conversion PROTO((tree));
@@ -2504,7 +2568,8 @@ extern tree build_m_component_ref PROTO((tree, tree));
extern tree build_functional_cast PROTO((tree, tree));
extern char *enum_name_string PROTO((tree, tree));
extern void report_case_error PROTO((int, tree, tree, tree));
-extern void check_for_new_typeid PROTO((char *,flagged_type_tree));
+extern void check_for_new_type PROTO((char *,flagged_type_tree));
+extern tree initializer_constant_valid_p PROTO((tree, tree));
/* in xref.c */
extern void GNU_xref_begin PROTO((char *));
diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c
index 8dbbf4ad9e5..29964928005 100644
--- a/gcc/cp/cvt.c
+++ b/gcc/cp/cvt.c
@@ -26,14 +26,27 @@ Boston, MA 02111-1307, USA. */
but what kind of conversions it does will depend on the language. */
#include "config.h"
+#include <stdio.h>
#include "tree.h"
#include "flags.h"
#include "cp-tree.h"
#include "class.h"
#include "convert.h"
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
extern tree static_aggregates;
+static tree build_thunk PROTO((tree, tree));
+static tree convert_fn_ptr PROTO((tree, tree));
+static tree cp_convert_to_pointer PROTO((tree, tree));
+static tree convert_to_pointer_force PROTO((tree, tree));
+static tree build_up_reference PROTO((tree, tree, int, int));
+static tree build_type_conversion_1 PROTO((tree, tree, tree, tree,
+ int));
+
/* Change of width--truncation and extension of integers or reals--
is represented with NOP_EXPR. Proper functioning of many things
assumes that no other conversions can be NOP_EXPRs.
@@ -566,7 +579,7 @@ convert_to_reference (reftype, expr, convtype, flags, decl)
&& ! CLASSTYPE_ABSTRACT_VIRTUALS (type)
&& (rval = build_method_call
(NULL_TREE, ctor_identifier,
- build_tree_list (NULL_TREE, expr), TYPE_BINFO (type),
+ build_expr_list (NULL_TREE, expr), TYPE_BINFO (type),
LOOKUP_NO_CONVERSION|LOOKUP_SPECULATIVELY
| LOOKUP_ONLYCONVERTING)))
{
@@ -576,7 +589,7 @@ convert_to_reference (reftype, expr, convtype, flags, decl)
{
tree t = get_temp_name (type, toplevel_bindings_p ());
init = build_method_call (t, ctor_identifier,
- build_tree_list (NULL_TREE, expr),
+ build_expr_list (NULL_TREE, expr),
TYPE_BINFO (type),
LOOKUP_NORMAL|LOOKUP_NO_CONVERSION
| LOOKUP_ONLYCONVERTING);
@@ -591,7 +604,7 @@ convert_to_reference (reftype, expr, convtype, flags, decl)
else
{
init = build_method_call (NULL_TREE, ctor_identifier,
- build_tree_list (NULL_TREE, expr),
+ build_expr_list (NULL_TREE, expr),
TYPE_BINFO (type),
LOOKUP_NORMAL|LOOKUP_NO_CONVERSION
|LOOKUP_ONLYCONVERTING);
@@ -698,18 +711,18 @@ convert_to_aggr (type, expr, msgp, protect)
can_be_private = 0;
can_be_protected = IDENTIFIER_CLASS_VALUE (name) || name == current_class_name;
- parmlist = build_tree_list (NULL_TREE, expr);
- parmtypes = tree_cons (NULL_TREE, TREE_TYPE (expr), void_list_node);
+ parmlist = build_expr_list (NULL_TREE, expr);
+ parmtypes = scratch_tree_cons (NULL_TREE, TREE_TYPE (expr), void_list_node);
if (TYPE_USES_VIRTUAL_BASECLASSES (basetype))
{
- parmtypes = tree_cons (NULL_TREE, integer_type_node, parmtypes);
- parmlist = tree_cons (NULL_TREE, integer_one_node, parmlist);
+ parmtypes = expr_tree_cons (NULL_TREE, integer_type_node, parmtypes);
+ parmlist = scratch_tree_cons (NULL_TREE, integer_one_node, parmlist);
}
/* The type of the first argument will be filled in inside the loop. */
- parmlist = tree_cons (NULL_TREE, integer_zero_node, parmlist);
- parmtypes = tree_cons (NULL_TREE, build_pointer_type (basetype), parmtypes);
+ parmlist = expr_tree_cons (NULL_TREE, integer_zero_node, parmlist);
+ parmtypes = scratch_tree_cons (NULL_TREE, build_pointer_type (basetype), parmtypes);
/* No exact conversion was found. See if an approximate
one will do. */
@@ -779,7 +792,7 @@ convert_to_aggr (type, expr, msgp, protect)
qsort (candidates, /* char *base */
cp - candidates, /* int nel */
sizeof (struct candidate), /* int width */
- rank_for_overload); /* int (*compar)() */
+ (int (*) PROTO((const void *, const void *))) rank_for_overload); /* int (*compar)() */
--cp;
if (cp->h.code & EVIL_CODE)
@@ -1100,10 +1113,13 @@ ocp_convert (type, expr, convtype, flags)
if ((flags & LOOKUP_ONLYCONVERTING)
&& ! (IS_AGGR_TYPE (dtype) && DERIVED_FROM_P (type, dtype)))
- ctor = build_user_type_conversion (type, ctor, flags);
+ {
+ ctor = build_user_type_conversion (type, ctor, flags);
+ flags |= LOOKUP_NO_CONVERSION;
+ }
if (ctor)
ctor = build_method_call (NULL_TREE, ctor_identifier,
- build_tree_list (NULL_TREE, ctor),
+ build_expr_list (NULL_TREE, ctor),
TYPE_BINFO (type), flags);
if (ctor)
return build_cplus_new (type, ctor);
@@ -1123,7 +1139,7 @@ ocp_convert (type, expr, convtype, flags)
if (TYPE_HAS_CONSTRUCTOR (complete_type (type)))
ctor = build_method_call (NULL_TREE, ctor_identifier,
- build_tree_list (NULL_TREE, e),
+ build_expr_list (NULL_TREE, e),
TYPE_BINFO (type),
(flags & LOOKUP_NORMAL)
| LOOKUP_SPECULATIVELY
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index a1aa9bbe7c1..f336f064265 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -1,6 +1,6 @@
/* Process declarations and variables for C compiler.
- Copyright (C) 1988, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
- Hacked by Michael Tiemann (tiemann@cygnus.com)
+ Copyright (C) 1988, 92-97, 1998 Free Software Foundation, Inc.
+ Contributed by Michael Tiemann (tiemann@cygnus.com)
This file is part of GNU CC.
@@ -27,8 +27,8 @@ Boston, MA 02111-1307, USA. */
/* ??? not all decl nodes are given the most useful possible
line numbers. For example, the CONST_DECLs for enum values. */
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "tree.h"
#include "rtl.h"
#include "flags.h"
@@ -39,6 +39,16 @@ Boston, MA 02111-1307, USA. */
#include <signal.h>
#include "obstack.h"
#include "defaults.h"
+#include "output.h"
+#include "except.h"
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef NEED_DECLARATION_FREE
+extern void free PROTO((void *));
+#endif
#define obstack_chunk_alloc xmalloc
#define obstack_chunk_free free
@@ -130,8 +140,43 @@ static void revert_static_member_fn PROTO((tree *, tree *, tree *));
static tree push_overloaded_decl PROTO((tree, int));
static void push_overloaded_decl_top_level PROTO((tree, int));
-tree define_function
- PROTO((char *, tree, enum built_in_function, void (*)(), char *));
+static struct stack_level *push_decl_level PROTO((struct stack_level *,
+ struct obstack *));
+static void push_binding_level PROTO((struct binding_level *, int,
+ int));
+static void pop_binding_level PROTO((void));
+static void suspend_binding_level PROTO((void));
+static void resume_binding_level PROTO((struct binding_level *));
+static struct binding_level *make_binding_level PROTO((void));
+static int namespace_bindings_p PROTO((void));
+static void declare_namespace_level PROTO((void));
+static tree get_unique_name PROTO((void));
+static void signal_catch PROTO((int));
+static void storedecls PROTO((tree));
+static void storetags PROTO((tree));
+static void require_complete_types_for_parms PROTO((tree));
+static void push_overloaded_decl_1 PROTO((tree));
+static int ambi_op_p PROTO((tree));
+static int unary_op_p PROTO((tree));
+static tree store_bindings PROTO((tree, tree));
+static tree lookup_tag_reverse PROTO((tree, tree));
+static tree obscure_complex_init PROTO((tree, tree));
+static tree maybe_build_cleanup_1 PROTO((tree, tree));
+static tree lookup_name_real PROTO((tree, int, int));
+static void warn_extern_redeclared_static PROTO((tree, tree));
+static void grok_reference_init PROTO((tree, tree, tree, tree *));
+static tree grokfndecl PROTO((tree, tree, tree, tree, int,
+ enum overload_flags,
+ tree, tree, tree, int, int, int, int, int, int));
+static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int));
+static tree lookup_tag PROTO((enum tree_code, tree,
+ struct binding_level *, int));
+static void set_identifier_type_value_with_scope
+ PROTO((tree, tree, struct binding_level *));
+static void record_builtin_type PROTO((enum rid, char *, tree));
+static int member_function_or_else PROTO((tree, tree, char *));
+static void bad_specifiers PROTO((tree, char *, int, int, int, int,
+ int));
/* a node which has tree code ERROR_MARK, and whose type is itself.
All erroneous expressions are replaced with this node. All functions
@@ -2122,6 +2167,7 @@ pushtag (name, type, globalize)
DECL_IGNORED_P (d) = 1;
TYPE_CONTEXT (type) = DECL_CONTEXT (d);
+ DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
DECL_ASSEMBLER_NAME (d)
= get_identifier (build_overload_name (type, 1, 1));
}
@@ -2269,23 +2315,40 @@ decls_match (newdecl, olddecl)
{
tree newargs = DECL_TEMPLATE_PARMS (newdecl);
tree oldargs = DECL_TEMPLATE_PARMS (olddecl);
- int i, len = TREE_VEC_LENGTH (newargs);
+ int i;
- if (TREE_VEC_LENGTH (oldargs) != len)
- return 0;
-
- for (i = 0; i < len; i++)
+ /* Run through all the levels of template parameters, checking
+ that they match. */
+ while (newargs && oldargs)
{
- tree newarg = TREE_VALUE (TREE_VEC_ELT (newargs, i));
- tree oldarg = TREE_VALUE (TREE_VEC_ELT (oldargs, i));
- if (TREE_CODE (newarg) != TREE_CODE (oldarg))
- return 0;
- else if (TREE_CODE (newarg) == TYPE_DECL)
- /* continue */;
- else if (! comptypes (TREE_TYPE (newarg), TREE_TYPE (oldarg), 1))
+ int len = TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS (newargs));
+
+ if (TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS (oldargs)) != len)
return 0;
+
+ for (i = 0; i < len; i++)
+ {
+ tree newarg =
+ TREE_VALUE (TREE_VEC_ELT
+ (INNERMOST_TEMPLATE_PARMS (newargs), i));
+ tree oldarg =
+ TREE_VALUE (TREE_VEC_ELT
+ (INNERMOST_TEMPLATE_PARMS (oldargs), i));
+ if (TREE_CODE (newarg) != TREE_CODE (oldarg))
+ return 0;
+ else if (TREE_CODE (newarg) == TYPE_DECL)
+ /* continue */;
+ else if (! comptypes (TREE_TYPE (newarg), TREE_TYPE (oldarg), 1))
+ return 0;
+ }
+ newargs = TREE_CHAIN (newargs);
+ oldargs = TREE_CHAIN (oldargs);
}
+ if ((newargs == NULL_TREE) != (oldargs == NULL_TREE))
+ /* One declaration has more levels that the other. */
+ return 0;
+
if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
types_match = 1;
else
@@ -2406,7 +2469,7 @@ duplicate_decls (newdecl, olddecl)
/* If you declare a built-in or predefined function name as static,
the old definition is overridden, but optionally warn this was a
bad choice of name. Ditto for overloads. */
- if (! DECL_PUBLIC (newdecl)
+ if (! TREE_PUBLIC (newdecl)
|| (TREE_CODE (newdecl) == FUNCTION_DECL
&& DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl)))
{
@@ -2509,6 +2572,20 @@ duplicate_decls (newdecl, olddecl)
cp_error_at ("previous declaration as `%#D'", olddecl);
}
}
+ else if ((TREE_CODE (olddecl) == FUNCTION_DECL
+ && DECL_TEMPLATE_SPECIALIZATION (olddecl)
+ && (!DECL_TEMPLATE_SPECIALIZATION (newdecl)
+ || (DECL_TI_TEMPLATE (newdecl)
+ != DECL_TI_TEMPLATE (olddecl))))
+ || (TREE_CODE (newdecl) == FUNCTION_DECL
+ && DECL_TEMPLATE_SPECIALIZATION (newdecl)
+ && (!DECL_TEMPLATE_SPECIALIZATION (olddecl)
+ || (DECL_TI_TEMPLATE (olddecl) != DECL_TI_TEMPLATE
+ (newdecl)))))
+ /* It's OK to have a template specialization and a non-template
+ with the same type, or to have specializations of two
+ different templates with the same type. */
+ return 0;
else
{
char *errmsg = redeclaration_error_message (newdecl, olddecl);
@@ -2547,8 +2624,9 @@ duplicate_decls (newdecl, olddecl)
}
}
- if (TREE_CODE (olddecl) == FUNCTION_DECL
- && ! DECL_USE_TEMPLATE (olddecl))
+ if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
+ ;
+ else if (TREE_CODE (olddecl) == FUNCTION_DECL)
{
tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
@@ -2576,7 +2654,7 @@ duplicate_decls (newdecl, olddecl)
{
cp_error ("default argument given for parameter %d of `%#D'",
i, newdecl);
- cp_error_at ("conflicts with previous specification in `%#D'",
+ cp_error_at ("after previous specification in `%#D'",
olddecl);
}
}
@@ -2661,9 +2739,12 @@ duplicate_decls (newdecl, olddecl)
if (TREE_CODE (newdecl) == TEMPLATE_DECL)
{
- TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
- DECL_TEMPLATE_RESULT (olddecl) = DECL_TEMPLATE_RESULT (newdecl);
- DECL_TEMPLATE_PARMS (olddecl) = DECL_TEMPLATE_PARMS (newdecl);
+ if (DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)) == NULL_TREE)
+ {
+ TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
+ DECL_TEMPLATE_RESULT (olddecl) = DECL_TEMPLATE_RESULT (newdecl);
+ DECL_TEMPLATE_PARMS (olddecl) = DECL_TEMPLATE_PARMS (newdecl);
+ }
return 1;
}
@@ -2698,7 +2779,9 @@ duplicate_decls (newdecl, olddecl)
TREE_TYPE (olddecl) = build_exception_variant (newtype,
TYPE_RAISES_EXCEPTIONS (oldtype));
- if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
+ if ((pedantic || (! DECL_IN_SYSTEM_HEADER (olddecl)
+ && DECL_SOURCE_LINE (olddecl) != 0))
+ && flag_exceptions
&& ! compexcepttypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
{
cp_pedwarn ("declaration of `%D' throws different exceptions",
@@ -2776,17 +2859,18 @@ duplicate_decls (newdecl, olddecl)
if (! DECL_EXTERNAL (olddecl))
DECL_EXTERNAL (newdecl) = 0;
- if (TREE_CODE (newdecl) == FUNCTION_DECL)
- DECL_C_STATIC (newdecl) |= DECL_C_STATIC (olddecl);
-
if (DECL_LANG_SPECIFIC (newdecl))
{
DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
+ DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
}
if (TREE_CODE (newdecl) == FUNCTION_DECL)
{
+ if (DECL_TEMPLATE_INSTANTIATION (olddecl) &&
+ !DECL_TEMPLATE_INSTANTIATION (newdecl))
+ DECL_USE_TEMPLATE (olddecl) = DECL_USE_TEMPLATE (newdecl);
DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
/* If either decl says `inline', this fn is inline, unless its
@@ -2962,7 +3046,7 @@ pushdecl (x)
/* Type are looked up using the DECL_NAME, as that is what the rest of the
compiler wants to use. */
if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
- || TREE_CODE (x) == NAMESPACE_DECL)
+ || TREE_CODE (x) == NAMESPACE_DECL || TREE_CODE (x) == TEMPLATE_TYPE_PARM)
name = DECL_NAME (x);
if (name)
@@ -2972,7 +3056,9 @@ pushdecl (x)
char *file;
int line;
#endif
-
+ if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
+ name = TREE_OPERAND (name, 0);
+
t = lookup_name_current_level (name);
if (t == error_mark_node)
{
@@ -3140,7 +3226,7 @@ pushdecl (x)
/* If the first global decl has external linkage,
warn if we later see static one. */
- if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && DECL_PUBLIC (x))
+ if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
TREE_PUBLIC (name) = 1;
/* Don't install an artificial TYPE_DECL if we already have
@@ -3452,6 +3538,11 @@ push_class_level_binding (name, x)
tree name;
tree x;
{
+ /* The class_binding_level will be NULL if x is a template
+ parameter name in a member template. */
+ if (!class_binding_level)
+ return;
+
if (TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
&& purpose_member (name, class_binding_level->class_shadowed))
return;
@@ -4254,16 +4345,21 @@ make_typename_type (context, name)
{
tree t, d;
- if (TREE_CODE (name) == TYPE_DECL)
+ if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
+ name = TYPE_IDENTIFIER (name);
+ else if (TREE_CODE (name) == TYPE_DECL)
name = DECL_NAME (name);
else if (TREE_CODE (name) != IDENTIFIER_NODE)
my_friendly_abort (2000);
- if (! processing_template_decl
- || ! uses_template_parms (context)
+ if (! uses_template_parms (context)
|| context == current_class_type)
{
- t = lookup_field (context, name, 0, 1);
+ if (IS_AGGR_TYPE (context))
+ t = lookup_field (context, name, 0, 1);
+ else
+ t = NULL_TREE;
+
if (t == NULL_TREE)
{
cp_error ("no type named `%#T' in `%#T'", name, context);
@@ -4288,6 +4384,44 @@ make_typename_type (context, name)
return t;
}
+/* Given a TYPE_DECL T looked up in CONTEXT, return a TYPENAME_TYPE
+ where the scope is either CONTEXT or the first base of CONTEXT along the
+ inheritance chain to T that depends on template parameters.
+
+ Called from lookup_name_real to implement the implicit typename
+ extension. */
+
+static tree
+make_implicit_typename (context, t)
+ tree context, t;
+{
+ tree retval;
+
+ if (uses_template_parms (DECL_CONTEXT (t))
+ && DECL_CONTEXT (t) != context)
+ {
+ tree binfo = get_binfo (DECL_CONTEXT (t), context, 0);
+ while (binfo)
+ {
+ tree next = BINFO_INHERITANCE_CHAIN (binfo);
+ if (! uses_template_parms (BINFO_TYPE (next))
+ || BINFO_TYPE (next) == context)
+ break;
+ binfo = next;
+ }
+ if (binfo)
+ retval = make_typename_type (BINFO_TYPE (binfo), DECL_NAME (t));
+ else
+ /* FIXME: find the enclosing class whose base t comes from. */
+ retval = make_typename_type (DECL_CONTEXT (t), DECL_NAME (t));
+ }
+ else
+ retval = make_typename_type (context, DECL_NAME (t));
+
+ TREE_TYPE (retval) = TREE_TYPE (t);
+ return retval;
+}
+
/* Look up NAME in the current binding level and its superiors in the
namespace of variables, functions and typedefs. Return a ..._DECL
node of some kind representing its definition if there is only one
@@ -4316,6 +4450,10 @@ lookup_name_real (name, prefer_type, nonclass)
yylex = 1;
prefer_type = looking_for_typename;
+ /* std:: becomes :: for now. */
+ if (got_scope == std_node)
+ got_scope = void_type_node;
+
if (got_scope)
type = got_scope;
else if (got_object != error_mark_node)
@@ -4369,18 +4507,16 @@ lookup_name_real (name, prefer_type, nonclass)
else
val = NULL_TREE;
-#if 1
+ /* Add implicit 'typename' to scoped types from other classes. */
if (got_scope && processing_template_decl
&& got_scope != current_class_type
&& uses_template_parms (got_scope)
&& val && TREE_CODE (val) == TYPE_DECL
&& ! DECL_ARTIFICIAL (val))
{
- tree t = make_typename_type (got_scope, DECL_NAME (val));
- TREE_TYPE (t) = TREE_TYPE (val);
+ tree t = make_implicit_typename (got_scope, val);
val = TYPE_MAIN_DECL (t);
}
-#endif
if (got_scope)
goto done;
@@ -4410,6 +4546,17 @@ lookup_name_real (name, prefer_type, nonclass)
created the COMPONENT_REF or anything like that. */
if (classval == NULL_TREE)
classval = lookup_nested_field (name, ! yylex);
+
+ /* Add implicit 'typename' to types from base classes. */
+ if (processing_template_decl
+ && classval && TREE_CODE (classval) == TYPE_DECL
+ && DECL_CONTEXT (classval) != current_class_type
+ && uses_template_parms (DECL_CONTEXT (classval))
+ && ! DECL_ARTIFICIAL (classval))
+ {
+ tree t = make_implicit_typename (current_class_type, classval);
+ classval = TYPE_MAIN_DECL (t);
+ }
}
if (locval && classval)
@@ -4624,7 +4771,7 @@ auto_function (name, type, code)
enum built_in_function code;
{
return define_function
- (IDENTIFIER_POINTER (name), type, code, (void (*)())push_overloaded_decl_1,
+ (IDENTIFIER_POINTER (name), type, code, push_overloaded_decl_1,
IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
0)));
}
@@ -4651,7 +4798,7 @@ init_decl_processing ()
tree string_ftype_ptr_ptr, int_ftype_string_string;
tree sizetype_endlink;
tree ptr_ftype, ptr_ftype_unsigned, ptr_ftype_sizetype;
- tree void_ftype, void_ftype_int, void_ftype_ptr;
+ tree void_ftype, void_ftype_int, void_ftype_ptr, ptr_ftype_void;
/* Have to make these distinct before we try using them. */
lang_name_cplusplus = get_identifier ("C++");
@@ -4891,11 +5038,6 @@ init_decl_processing ()
TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
layout_type (TREE_TYPE (null_pointer_node));
- if (flag_ansi)
- TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
- else
- TREE_TYPE (null_node) = build_pointer_type (void_type_node);
-
/* Used for expressions that do nothing, but are not errors. */
void_zero_node = build_int_2 (0, 0);
TREE_TYPE (void_zero_node) = void_type_node;
@@ -5019,7 +5161,7 @@ init_decl_processing ()
else
delta_type_node = short_integer_type_node;
- builtin_function ("__builtin_constant_p", int_ftype_int,
+ builtin_function ("__builtin_constant_p", default_function_type,
BUILT_IN_CONSTANT_P, NULL_PTR);
builtin_return_address_fndecl
@@ -5029,6 +5171,10 @@ init_decl_processing ()
builtin_function ("__builtin_frame_address", ptr_ftype_unsigned,
BUILT_IN_FRAME_ADDRESS, NULL_PTR);
+ ptr_ftype_void = build_function_type (ptr_type_node, endlink);
+ builtin_function ("__builtin_fp", ptr_ftype_void, BUILT_IN_FP, NULL_PTR);
+ builtin_function ("__builtin_sp", ptr_ftype_void, BUILT_IN_SP, NULL_PTR);
+
builtin_function ("__builtin_alloca", ptr_ftype_sizetype,
BUILT_IN_ALLOCA, "alloca");
builtin_function ("__builtin_ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
@@ -5204,7 +5350,14 @@ init_decl_processing ()
TYPE_MODE (unknown_type_node) = TYPE_MODE (void_type_node);
/* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
TREE_TYPE (unknown_type_node) = unknown_type_node;
- /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same result. */
+
+ if (flag_ansi)
+ TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
+ else
+ TREE_TYPE (null_node) = build_pointer_type (unknown_type_node);
+
+ /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
+ result. */
TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
@@ -5469,6 +5622,9 @@ init_decl_processing ()
/* Prepare to check format strings against argument lists. */
init_function_format_info ();
+
+ /* Show we use EH for cleanups. */
+ using_eh_for_cleanups ();
}
/* initialize type descriptor type node of various rtti type. */
@@ -5554,7 +5710,7 @@ define_function (name, type, function_code, pfn, library_name)
char *name;
tree type;
enum built_in_function function_code;
- void (*pfn)();
+ void (*pfn) PROTO((tree));
char *library_name;
{
tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
@@ -5865,7 +6021,12 @@ start_decl (declarator, declspecs, initialized)
else
{
if (DECL_CONTEXT (field) != context)
- cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'", DECL_CONTEXT (field), DECL_NAME (decl), context, DECL_NAME (decl));
+ {
+ cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
+ DECL_CONTEXT (field), DECL_NAME (decl),
+ context, DECL_NAME (decl));
+ DECL_CONTEXT (decl) = DECL_CONTEXT (field);
+ }
if (duplicate_decls (decl, field))
decl = field;
}
@@ -6202,6 +6363,7 @@ cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
int temporary = allocation_temporary_p ();
char *asmspec = NULL;
int was_readonly = 0;
+ int already_used = 0;
/* If this is 0, then we did not change obstacks. */
if (! decl)
@@ -6266,7 +6428,7 @@ cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
/* If we have installed this as the canonical typedef for this
type, and that type has not been defined yet, delay emitting
- the debug informaion for it, as we will emit it later. */
+ the debug information for it, as we will emit it later. */
if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
&& TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
@@ -6540,12 +6702,17 @@ cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
&& current_function_decl
&& DECL_CONTEXT (decl) == current_function_decl
&& DECL_THIS_INLINE (current_function_decl)
- && DECL_PUBLIC (current_function_decl))
+ && TREE_PUBLIC (current_function_decl))
{
+ if (DECL_INTERFACE_KNOWN (current_function_decl))
+ {
+ TREE_PUBLIC (decl) = 1;
+ DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
+ }
/* We can only do this if we can use common or weak, and we
can't if it has been initialized and we don't support weak. */
- if (DECL_INITIAL (decl) == NULL_TREE
- || DECL_INITIAL (decl) == error_mark_node)
+ else if (DECL_INITIAL (decl) == NULL_TREE
+ || DECL_INITIAL (decl) == error_mark_node)
{
TREE_PUBLIC (decl) = 1;
DECL_COMMON (decl) = 1;
@@ -6560,6 +6727,35 @@ cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
}
+ else if (TREE_CODE (decl) == VAR_DECL
+ && DECL_LANG_SPECIFIC (decl)
+ && DECL_COMDAT (decl))
+ {
+ /* Dynamically initialized vars go into common. */
+ if (DECL_INITIAL (decl) == NULL_TREE
+ || DECL_INITIAL (decl) == error_mark_node)
+ DECL_COMMON (decl) = 1;
+ else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
+ {
+ DECL_COMMON (decl) = 1;
+ DECL_INITIAL (decl) = error_mark_node;
+ }
+ else
+ {
+ /* Statically initialized vars are weak or comdat, if
+ supported. */
+ if (flag_weak)
+ make_decl_one_only (decl);
+ else
+ {
+ /* we can't do anything useful; leave vars for explicit
+ instantiation. */
+ DECL_EXTERNAL (decl) = 1;
+ DECL_NOT_REALLY_EXTERN (decl) = 0;
+ }
+ }
+ }
+
if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
make_decl_rtl (decl, NULL_PTR, toplev);
else if (TREE_CODE (decl) == VAR_DECL
@@ -6756,6 +6952,7 @@ cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
{
/* Compute and store the initial value. */
expand_decl_init (decl);
+ already_used = TREE_USED (decl) || TREE_USED (type);
if (init || TYPE_NEEDS_CONSTRUCTING (type))
{
@@ -6768,10 +6965,19 @@ cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
was initialized was ever used. Don't do this if it has a
destructor, so we don't complain about the 'resource
allocation is initialization' idiom. */
+ /* Now set attribute((unused)) on types so decls of
+ of that type will be marked used. (see TREE_USED, above.)
+ This avoids the warning problems this particular code
+ tried to work around. */
+
if (TYPE_NEEDS_CONSTRUCTING (type)
+ && ! already_used
&& cleanup == NULL_TREE
&& DECL_NAME (decl))
TREE_USED (decl) = 0;
+
+ if (already_used)
+ TREE_USED (decl) = 1;
}
/* Cleanup any temporaries needed for the initial value. */
@@ -6923,7 +7129,7 @@ expand_static_init (decl, init)
end_anon_func ();
mark_addressable (cleanup);
cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
- fcall = build_function_call (Atexit, tree_cons (NULL_TREE, cleanup, NULL_TREE));
+ fcall = build_function_call (Atexit, expr_tree_cons (NULL_TREE, cleanup, NULL_TREE));
expand_expr_stmt (fcall);
}
@@ -7084,14 +7290,16 @@ bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
not look, and -1 if we should not call `grokclassfn' at all. */
static tree
-grokfndecl (ctype, type, declarator, virtualp, flags, quals,
- raises, attrlist, check, publicp, inlinep, funcdef_flag)
+grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
+ raises, attrlist, check, friendp, publicp, inlinep, funcdef_flag,
+ template_count)
tree ctype, type;
tree declarator;
+ tree orig_declarator;
int virtualp;
enum overload_flags flags;
tree quals, raises, attrlist;
- int check, publicp, inlinep, funcdef_flag;
+ int check, friendp, publicp, inlinep, funcdef_flag, template_count;
{
tree cname, decl;
int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
@@ -7111,7 +7319,7 @@ grokfndecl (ctype, type, declarator, virtualp, flags, quals,
decl = build_lang_decl (FUNCTION_DECL, declarator, type);
/* propagate volatile out from type to decl */
if (TYPE_VOLATILE (type))
- TREE_THIS_VOLATILE (decl) = 1;
+ TREE_THIS_VOLATILE (decl) = 1;
/* Should probably propagate const out from type to decl I bet (mrs). */
if (staticp)
@@ -7123,10 +7331,6 @@ grokfndecl (ctype, type, declarator, virtualp, flags, quals,
if (ctype)
DECL_CLASS_CONTEXT (decl) = ctype;
- /* All function decls start out public; we'll fix their linkage later (at
- definition or EOF) if appropriate. */
- TREE_PUBLIC (decl) = 1;
-
if (ctype == NULL_TREE && ! strcmp (IDENTIFIER_POINTER (declarator), "main"))
{
if (inlinep)
@@ -7137,8 +7341,12 @@ grokfndecl (ctype, type, declarator, virtualp, flags, quals,
publicp = 1;
}
+ TREE_PUBLIC (decl) = publicp;
if (! publicp)
- DECL_C_STATIC (decl) = 1;
+ {
+ DECL_INTERFACE_KNOWN (decl) = 1;
+ DECL_NOT_REALLY_EXTERN (decl) = 1;
+ }
if (inlinep)
DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
@@ -7155,7 +7363,7 @@ grokfndecl (ctype, type, declarator, virtualp, flags, quals,
grok_op_properties (decl, virtualp, check < 0);
if (ctype && hack_decl_function_context (decl))
- DECL_NO_STATIC_CHAIN (decl) = 1;
+ DECL_NO_STATIC_CHAIN (decl) = 1;
for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
if (TREE_PURPOSE (t)
@@ -7166,6 +7374,11 @@ grokfndecl (ctype, type, declarator, virtualp, flags, quals,
}
/* Caller will do the rest of this. */
+ check_explicit_specialization (orig_declarator, decl,
+ template_count,
+ funcdef_flag ? 2 :
+ (friendp ? 3 : 0));
+
if (check < 0)
return decl;
@@ -7183,9 +7396,14 @@ grokfndecl (ctype, type, declarator, virtualp, flags, quals,
DECL_CONSTRUCTOR_P (decl) = 1;
grokclassfn (ctype, declarator, decl, flags, quals);
+
if (check)
{
tmp = check_classfn (ctype, decl);
+
+ if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
+ tmp = DECL_TEMPLATE_RESULT(tmp);
+
if (tmp && DECL_ARTIFICIAL (tmp))
cp_error ("definition of implicitly-declared `%D'", tmp);
if (tmp && duplicate_decls (decl, tmp))
@@ -7224,6 +7442,10 @@ grokfndecl (ctype, type, declarator, virtualp, flags, quals,
if (ctype != NULL_TREE && check)
{
tmp = check_classfn (ctype, decl);
+
+ if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
+ tmp = DECL_TEMPLATE_RESULT(tmp);
+
if (tmp && DECL_STATIC_FUNCTION_P (tmp)
&& TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
{
@@ -7499,6 +7721,7 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
enum overload_flags flags = NO_SPECIAL;
tree quals = NULL_TREE;
tree raises = NULL_TREE;
+ int template_count = 0;
RIDBIT_RESET_ALL (specbits);
if (decl_context == FUNCDEF)
@@ -7587,6 +7810,9 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
init = TREE_OPERAND (decl, 1);
decl = start_decl (declarator, declspecs, 1);
+ /* Look for __unused__ attribute */
+ if (TREE_USED (TREE_TYPE (decl)))
+ TREE_USED (decl) = 1;
finish_decl (decl, init, NULL_TREE);
return 0;
}
@@ -7612,9 +7838,27 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
}
ctype = NULL_TREE;
break;
+
+ case TEMPLATE_ID_EXPR:
+ {
+ tree fns = TREE_OPERAND (decl, 0);
+
+ if (TREE_CODE (fns) == LOOKUP_EXPR)
+ fns = TREE_OPERAND (fns, 0);
+
+ if (TREE_CODE (fns) == IDENTIFIER_NODE)
+ dname = fns;
+ else if (really_overloaded_fn (fns))
+ dname = DECL_NAME (get_first_fn (fns));
+ else
+ dname = DECL_NAME (fns);
+ }
+ /* fall through */
case IDENTIFIER_NODE:
- dname = decl;
+ if (TREE_CODE (decl) == IDENTIFIER_NODE)
+ dname = decl;
+
next = 0;
if (is_rid (dname))
@@ -7624,7 +7868,7 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
name = IDENTIFIER_POINTER (dname);
}
if (! IDENTIFIER_OPNAME_P (dname)
- /* Linux headers use '__op'. Arrgh. */
+ /* GNU/Linux headers use '__op'. Arrgh. */
|| IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname))
name = IDENTIFIER_POINTER (dname);
else
@@ -8310,7 +8554,8 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
Descend through it, creating more complex types, until we reach
the declared identifier (or NULL_TREE, in an absolute declarator). */
- while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE)
+ while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
+ && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
{
/* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
an INDIRECT_REF (for *...),
@@ -8564,6 +8809,9 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
inner_decl = TREE_OPERAND (inner_decl, 1);
+ if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
+ inner_decl = dname;
+
/* Pick up type qualifiers which should be applied to `this'. */
quals = TREE_OPERAND (declarator, 2);
@@ -8573,9 +8821,11 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
/* Say it's a definition only for the CALL_EXPR
closest to the identifier. */
funcdecl_p
- = inner_decl && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
- || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
-
+ = inner_decl
+ && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
+ || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
+ || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
+
if (ctype == NULL_TREE
&& decl_context == FIELD
&& funcdecl_p
@@ -8864,6 +9114,8 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
resolve to. The code here just needs to build
up appropriate member types. */
tree sname = TREE_OPERAND (declarator, 1);
+ tree t;
+
/* Destructors can have their visibilities changed as well. */
if (TREE_CODE (sname) == BIT_NOT_EXPR)
sname = TREE_OPERAND (sname, 0);
@@ -8888,8 +9140,10 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
&& uses_template_parms (current_class_type))
{
tree args = current_template_args ();
- type = tsubst (type, &TREE_VEC_ELT (args, 0),
- TREE_VEC_LENGTH (args), NULL_TREE);
+ type = tsubst (type, args,
+ TREE_VEC_LENGTH (TREE_VEC_ELT
+ (args, 0)),
+ NULL_TREE);
}
/* This pop_nested_class corresponds to the
@@ -8913,6 +9167,18 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
}
ctype = TREE_OPERAND (declarator, 0);
+ t = ctype;
+ while (t != NULL_TREE)
+ {
+ if (CLASSTYPE_TEMPLATE_INFO (t))
+ template_count += 1;
+ t = TYPE_MAIN_DECL (t);
+ if (DECL_LANG_SPECIFIC (t))
+ t = DECL_CLASS_CONTEXT (t);
+ else
+ t = NULL_TREE;
+ }
+
if (sname == NULL_TREE)
goto done_scoping;
@@ -9331,10 +9597,13 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
/* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
publicp = (! friendp || ! staticp);
- decl = grokfndecl (ctype, type, declarator,
+ decl = grokfndecl (ctype, type,
+ TREE_CODE (declarator) != TEMPLATE_ID_EXPR
+ ? declarator : dname,
+ declarator,
virtualp, flags, quals, raises, attrlist,
- friendp ? -1 : 0, publicp, inlinep,
- funcdef_flag);
+ friendp ? -1 : 0, friendp, publicp, inlinep,
+ funcdef_flag, template_count);
if (decl == NULL_TREE)
return NULL_TREE;
#if 0
@@ -9352,9 +9621,10 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
members of other classes. */
/* All method decls are public, so tell grokfndecl to set
TREE_PUBLIC, also. */
- decl = grokfndecl (ctype, type, declarator,
+ decl = grokfndecl (ctype, type, declarator, declarator,
virtualp, flags, quals, raises, attrlist,
- friendp ? -1 : 0, 1, 0, funcdef_flag);
+ friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
+ template_count);
if (decl == NULL_TREE)
return NULL_TREE;
}
@@ -9479,12 +9749,17 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
}
else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
{
- tree original_name = declarator;
+ tree original_name;
int publicp = 0;
if (! declarator)
return NULL_TREE;
+ if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
+ original_name = dname;
+ else
+ original_name = declarator;
+
if (RIDBIT_SETP (RID_AUTO, specbits))
error ("storage class `auto' invalid for function `%s'", name);
else if (RIDBIT_SETP (RID_REGISTER, specbits))
@@ -9522,7 +9797,9 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
&& IDENTIFIER_POINTER (original_name)[1] == '_'
&& strncmp (IDENTIFIER_POINTER (original_name)+2, "builtin_", 8) == 0))
/* Plain overloading: will not be grok'd by grokclassfn. */
- declarator = build_decl_overload (dname, TYPE_ARG_TYPES (type), 0);
+ if (name_mangling_version < 1
+ || TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
+ declarator = build_decl_overload (dname, TYPE_ARG_TYPES (type), 0);
}
else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
type = build_cplus_method_type (build_type_variant (ctype, constp, volatilep),
@@ -9533,16 +9810,19 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
|| RIDBIT_SETP (RID_EXTERN, specbits)
|| !RIDBIT_SETP (RID_STATIC, specbits));
- decl = grokfndecl (ctype, type, original_name,
+ decl = grokfndecl (ctype, type, original_name, declarator,
virtualp, flags, quals, raises, attrlist,
- friendp ? 2 : 1,
- publicp, inlinep, funcdef_flag);
+ friendp ? 2 : 1, friendp,
+ publicp, inlinep, funcdef_flag,
+ template_count);
if (decl == NULL_TREE)
return NULL_TREE;
- if (ctype == NULL_TREE && DECL_LANGUAGE (decl) != lang_c)
+ if (ctype == NULL_TREE && DECL_LANGUAGE (decl) != lang_c
+ && (!DECL_TEMPLATE_SPECIALIZATION (decl) ||
+ name_mangling_version < 1))
DECL_ASSEMBLER_NAME (decl) = current_namespace_id (declarator);
-
+
if (staticp == 1)
{
int illegal_static = 0;
@@ -9947,7 +10227,7 @@ grokparms (first_parm, funcdef_flag)
TREE_CHAIN (last_decl) = decl;
last_decl = decl;
}
- if (TREE_PERMANENT (list_node))
+ if (! current_function_decl && TREE_PERMANENT (list_node))
{
TREE_PURPOSE (list_node) = init;
TREE_VALUE (list_node) = type;
@@ -10004,6 +10284,9 @@ copy_args_p (d)
tree d;
{
tree t = FUNCTION_ARG_CHAIN (d);
+ if (DECL_CONSTRUCTOR_P (d)
+ && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
+ t = TREE_CHAIN (t);
if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
&& (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
== DECL_CLASS_CONTEXT (d))
@@ -10719,7 +11002,7 @@ xref_basetypes (code_type_node, name, ref, binfo)
}
-static tree current_local_enum = NULL_TREE;
+tree current_local_enum = NULL_TREE;
/* Begin compiling the definition of an enumeration type.
NAME is its name (or null if anonymous).
@@ -11125,7 +11408,7 @@ start_function (declspecs, declarator, attrs, pre_parsed_p)
&& ! CLASSTYPE_GOT_SEMICOLON (restype))
{
cp_error ("semicolon missing after declaration of `%#T'", restype);
- shadow_tag (build_tree_list (NULL_TREE, restype));
+ shadow_tag (build_expr_list (NULL_TREE, restype));
CLASSTYPE_GOT_SEMICOLON (restype) = 1;
if (TREE_CODE (fntype) == FUNCTION_TYPE)
fntype = build_function_type (integer_type_node,
@@ -11200,7 +11483,7 @@ start_function (declspecs, declarator, attrs, pre_parsed_p)
}
if (warn_about_return_type)
- warning ("return-type defaults to `int'");
+ pedwarn ("return-type defaults to `int'");
/* Effective C++ rule 15. See also c_expand_return. */
if (warn_ecpp
@@ -11249,11 +11532,7 @@ start_function (declspecs, declarator, attrs, pre_parsed_p)
= (interface_only
|| (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines));
else
- {
- DECL_EXTERNAL (decl1) = 0;
- if (DECL_C_STATIC (decl1))
- TREE_PUBLIC (decl1) = 0;
- }
+ DECL_EXTERNAL (decl1) = 0;
DECL_NOT_REALLY_EXTERN (decl1) = 0;
DECL_INTERFACE_KNOWN (decl1) = 1;
}
@@ -11269,11 +11548,7 @@ start_function (declspecs, declarator, attrs, pre_parsed_p)
&& ! hack_decl_function_context (decl1))
DECL_DEFER_OUTPUT (decl1) = 1;
else
- {
- DECL_INTERFACE_KNOWN (decl1) = 1;
- if (DECL_C_STATIC (decl1))
- TREE_PUBLIC (decl1) = 0;
- }
+ DECL_INTERFACE_KNOWN (decl1) = 1;
}
if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1))
@@ -11587,8 +11862,6 @@ store_parm_decls ()
expand_start_bindings (0);
}
- last_parm_cleanup_insn = get_last_insn ();
-
if (! processing_template_decl && flag_exceptions)
{
/* Do the starting of the exception specifications, if we have any. */
@@ -11596,6 +11869,7 @@ store_parm_decls ()
expand_start_eh_spec ();
}
+ last_parm_cleanup_insn = get_last_insn ();
last_dtor_insn = get_last_insn ();
}
@@ -11651,7 +11925,7 @@ store_return_init (return_id, init)
add_tree (build_min_nt (RETURN_INIT, return_id,
copy_to_permanent (init)));
else
- cp_finish_decl (decl, init, NULL_TREE, 0, LOOKUP_ONLYCONVERTING);
+ cp_finish_decl (decl, init, NULL_TREE, 0, 0);
}
}
@@ -11829,7 +12103,7 @@ finish_function (lineno, call_poplevel, nested)
expand_expr_stmt
(build_scoped_method_call
(current_class_ref, vb, dtor_identifier,
- build_tree_list (NULL_TREE, integer_zero_node)));
+ build_expr_list (NULL_TREE, integer_zero_node)));
}
vbases = TREE_CHAIN (vbases);
}
@@ -11854,8 +12128,8 @@ finish_function (lineno, call_poplevel, nested)
error_mark_node),
NULL_PTR),
ansi_opname[(int) DELETE_EXPR],
- tree_cons (NULL_TREE, current_class_ptr,
- build_tree_list (NULL_TREE, virtual_size)),
+ expr_tree_cons (NULL_TREE, current_class_ptr,
+ build_expr_list (NULL_TREE, virtual_size)),
NULL_TREE, LOOKUP_NORMAL);
else if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
exprstmt = build_x_delete (ptr_type_node, current_class_ptr, 0,
@@ -11877,7 +12151,7 @@ finish_function (lineno, call_poplevel, nested)
poplevel (2, 0, 0); /* XXX change to 1 */
/* Back to the top of destructor. */
- /* Dont execute destructor code if `this' is NULL. */
+ /* Don't execute destructor code if `this' is NULL. */
start_sequence ();
@@ -12172,7 +12446,7 @@ finish_function (lineno, call_poplevel, nested)
{
/* If this function returns non-void and control can drop through,
complain. */
- cp_pedwarn ("control reaches end of non-void function `%D'", fndecl);
+ cp_warning ("control reaches end of non-void function `%D'", fndecl);
}
/* With just -W, complain only if function returns both with
and without a value. */
@@ -12491,8 +12765,8 @@ maybe_build_cleanup_1 (decl, auto_delete)
if (TYPE_USES_VIRTUAL_BASECLASSES (type)
&& ! TYPE_HAS_DESTRUCTOR (type))
- rval = build_compound_expr (tree_cons (NULL_TREE, rval,
- build_tree_list (NULL_TREE, build_vbase_delete (type, decl))));
+ rval = build_compound_expr (expr_tree_cons (NULL_TREE, rval,
+ build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
if (TREE_CODE (decl) != PARM_DECL)
resume_momentary (temp);
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index b4fced4a127..dd2bb436698 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -36,10 +36,25 @@ Boston, MA 02111-1307, USA. */
#include "decl.h"
#include "lex.h"
#include "output.h"
+#include "except.h"
+#include "expr.h"
-extern tree get_file_function_name ();
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+static tree get_sentry PROTO((tree));
+static void mark_vtable_entries PROTO((tree));
+static void import_export_template PROTO((tree));
static void grok_function_init PROTO((tree, tree));
-void import_export_decl ();
+static int finish_vtable_vardecl PROTO((tree, tree));
+static int prune_vtable_vardecl PROTO((tree, tree));
+static void finish_sigtable_vardecl PROTO((tree, tree));
+
extern int current_class_depth;
/* A list of virtual function tables we must make sure to write out. */
@@ -158,11 +173,10 @@ int warn_ctor_dtor_privacy = 1;
/* True if we want to implement vtables using "thunks".
The default is off. */
-#if defined(NEW_OVER) && defined (__i386__)
-int flag_vtable_thunks = 1;
-#else
-int flag_vtable_thunks;
+#ifndef DEFAULT_VTABLE_THUNKS
+#define DEFAULT_VTABLE_THUNKS 0
#endif
+int flag_vtable_thunks = DEFAULT_VTABLE_THUNKS;
/* True if we want to deal with repository information. */
@@ -246,10 +260,18 @@ int warn_pmf2ptr = 1;
/* Nonzero means warn about violation of some Effective C++ style rules. */
-int warn_ecpp = 0;
+int warn_ecpp;
-/* Nonzero means `$' can be in an identifier.
- See cccp.c for reasons why this breaks some obscure ANSI C programs. */
+/* Nonzero means warn where overload resolution chooses a promotion from
+ unsigned to signed over a conversion to an unsigned of the same size. */
+
+int warn_sign_promo;
+
+/* Nonzero means warn when an old-style cast is used. */
+
+int warn_old_style_cast;
+
+/* Nonzero means `$' can be in an identifier. */
#ifndef DOLLARS_IN_IDENTIFIERS
#define DOLLARS_IN_IDENTIFIERS 1
@@ -301,7 +323,9 @@ int flag_memoize_lookups; int flag_save_memoized_contexts;
int write_virtuals;
-/* Nonzero means we should attempt to elide constructors when possible. */
+/* Nonzero means we should attempt to elide constructors when possible.
+ FIXME: This flag is obsolete, and should be torn out along with the
+ old overloading code. */
int flag_elide_constructors;
@@ -384,6 +408,14 @@ int flag_weak = 1;
int max_tinst_depth = 17;
+/* The name-mangling scheme to use. Must be 1 or greater to support
+ template functions with identical types, but different template
+ arguments. */
+int name_mangling_version = 1;
+
+/* Nonzero means that guiding declarations are allowed. */
+int flag_guiding_decls;
+
/* Table of language-dependent -f options.
STRING is the option name. VARIABLE is the address of the variable.
ON_VALUE is the value to store in VARIABLE
@@ -409,6 +441,7 @@ static struct { char *string; int *variable; int on_value;} lang_f_options[] =
{"all-virtual", &flag_all_virtual, 1},
{"memoize-lookups", &flag_memoize_lookups, 1},
{"elide-constructors", &flag_elide_constructors, 1},
+ {"handle-exceptions", &flag_exceptions, 1},
{"handle-signatures", &flag_handle_signatures, 1},
{"default-inline", &flag_default_inline, 1},
{"dollars-in-identifiers", &dollars_in_ident, 1},
@@ -442,7 +475,7 @@ lang_decode_option (p)
char *p;
{
if (!strcmp (p, "-ftraditional") || !strcmp (p, "-traditional"))
- dollars_in_ident = 1, flag_writable_strings = 1,
+ flag_writable_strings = 1,
flag_this_is_variable = 1, flag_new_for_scope = 0;
/* The +e options are for cfront compatibility. They come in as
`-+eN', to kludge around gcc.c's argument handling. */
@@ -470,13 +503,17 @@ lang_decode_option (p)
p += 2;
/* Try special -f options. */
+ if (!strcmp (p, "handle-exceptions")
+ || !strcmp (p, "no-handle-exceptions"))
+ warning ("-fhandle-exceptions has been renamed to -fexceptions (and is now on by default)");
+
if (!strcmp (p, "save-memoized"))
{
flag_memoize_lookups = 1;
flag_save_memoized_contexts = 1;
found = 1;
}
- if (!strcmp (p, "no-save-memoized"))
+ else if (!strcmp (p, "no-save-memoized"))
{
flag_memoize_lookups = 0;
flag_save_memoized_contexts = 0;
@@ -499,6 +536,17 @@ lang_decode_option (p)
flag_implicit_templates = 0;
found = 1;
}
+ else if (!strcmp (p, "guiding-decls"))
+ {
+ flag_guiding_decls = 1;
+ name_mangling_version = 0;
+ found = 1;
+ }
+ else if (!strcmp (p, "no-guiding-decls"))
+ {
+ flag_guiding_decls = 0;
+ found = 1;
+ }
else if (!strncmp (p, "template-depth-", 15))
{
char *endp = p + 15;
@@ -515,6 +563,22 @@ lang_decode_option (p)
max_tinst_depth = atoi (p + 15);
template_depth_lose: ;
}
+ else if (!strncmp (p, "name-mangling-version-", 22))
+ {
+ char *endp = p + 22;
+ while (*endp)
+ {
+ if (*endp >= '0' && *endp <= '9')
+ endp++;
+ else
+ {
+ error ("Invalid option `%s'", p - 2);
+ goto mangling_version_lose;
+ }
+ }
+ name_mangling_version = atoi (p + 22);
+ mangling_version_lose: ;
+ }
else for (j = 0;
!found && j < sizeof (lang_f_options) / sizeof (lang_f_options[0]);
j++)
@@ -585,6 +649,10 @@ lang_decode_option (p)
warn_pmf2ptr = setting;
else if (!strcmp (p, "effc++"))
warn_ecpp = setting;
+ else if (!strcmp (p, "sign-promo"))
+ warn_sign_promo = setting;
+ else if (!strcmp (p, "old-style-cast"))
+ warn_old_style_cast = setting;
else if (!strcmp (p, "comment"))
; /* cpp handles this one. */
else if (!strcmp (p, "comments"))
@@ -613,6 +681,7 @@ lang_decode_option (p)
warn_uninitialized = (setting ? 2 : 0);
warn_template_debugging = setting;
warn_reorder = setting;
+ warn_sign_promo = setting;
}
else if (!strcmp (p, "overloaded-virtual"))
@@ -620,7 +689,7 @@ lang_decode_option (p)
else return 0;
}
else if (!strcmp (p, "-ansi"))
- dollars_in_ident = 0, flag_no_nonansi_builtin = 1, flag_ansi = 1,
+ flag_no_nonansi_builtin = 1, flag_ansi = 1,
flag_no_gnu_keywords = 1, flag_operator_names = 1;
#ifdef SPEW_DEBUG
/* Undocumented, only ever used when you're invoking cc1plus by hand, since
@@ -1173,7 +1242,10 @@ delete_sanity (exp, size, doing_vec, use_global_delete)
return t;
}
- t = stabilize_reference (convert_from_reference (exp));
+ t = exp;
+ if (TREE_CODE (t) == OFFSET_REF)
+ t = resolve_offset_ref (t);
+ t = stabilize_reference (convert_from_reference (t));
type = TREE_TYPE (t);
code = TREE_CODE (type);
@@ -1201,15 +1273,14 @@ delete_sanity (exp, size, doing_vec, use_global_delete)
if (code == POINTER_TYPE)
{
#if 0
- /* As of Valley Forge, you can delete a pointer to constant. */
- /* You can't delete a pointer to constant. */
+ /* As of Valley Forge, you can delete a pointer to const. */
if (TREE_READONLY (TREE_TYPE (type)))
{
error ("`const *' cannot be deleted");
return error_mark_node;
}
#endif
- /* You also can't delete functions. */
+ /* You can't delete functions. */
if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
{
error ("cannot delete a function");
@@ -1241,8 +1312,8 @@ delete_sanity (exp, size, doing_vec, use_global_delete)
{
/* Only do access checking here; we'll be calling op delete
from the destructor. */
- tree tmp = build_opfncall (DELETE_EXPR, LOOKUP_NORMAL, t,
- size_zero_node, NULL_TREE);
+ tree tmp = build_op_delete_call (DELETE_EXPR, t,
+ size_zero_node, LOOKUP_NORMAL);
if (tmp == error_mark_node)
return error_mark_node;
}
@@ -1252,6 +1323,59 @@ delete_sanity (exp, size, doing_vec, use_global_delete)
}
}
+/* Report an error if the indicated template declaration is not the
+ sort of thing that should be a member template. */
+
+void
+check_member_template (tmpl)
+ tree tmpl;
+{
+ tree decl;
+
+ my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 0);
+ decl = DECL_TEMPLATE_RESULT (tmpl);
+
+ if (TREE_CODE (decl) == FUNCTION_DECL)
+ {
+ if (current_function_decl)
+ /* 14.5.2.2 [temp.mem]
+
+ A local class shall not have member templates. */
+ cp_error ("declaration of of member template `%#D' in local class",
+ decl);
+
+ if (DECL_VIRTUAL_P (decl))
+ {
+ /* 14.5.2.3 [temp.mem]
+
+ A member function template shall not be virtual. */
+ cp_error
+ ("invalid use of `virtual' in template declaration of `%#D'",
+ decl);
+ DECL_VIRTUAL_P (decl) = 0;
+ }
+
+ /* The debug-information generating code doesn't know what to do
+ with member templates. */
+ DECL_IGNORED_P (tmpl) = 1;
+ }
+ else if (TREE_CODE (decl) == TYPE_DECL &&
+ AGGREGATE_TYPE_P (TREE_TYPE (decl)))
+ {
+ if (current_function_decl)
+ /* 14.5.2.2 [temp.mem]
+
+ A local class shall not have member templates. */
+ cp_error ("declaration of of member template `%#D' in local class",
+ decl);
+
+ /* We don't handle member template classes yet. */
+ sorry ("member templates classes");
+ }
+ else
+ cp_error ("template declaration of `%#D'", decl);
+}
+
/* Sanity check: report error if this function FUNCTION is not
really a member of the class (CTYPE) it is supposed to belong to.
CNAME is the same here as it is for grokclassfn above. */
@@ -1265,6 +1389,7 @@ check_classfn (ctype, function)
tree method_vec = CLASSTYPE_METHOD_VEC (complete_type (ctype));
tree *methods = 0;
tree *end = 0;
+ tree templates = NULL_TREE;
if (method_vec != 0)
{
@@ -1281,6 +1406,7 @@ check_classfn (ctype, function)
while (++methods != end)
{
+ fndecl = *methods;
if (fn_name == DECL_NAME (*methods))
{
got_it:
@@ -1310,16 +1436,46 @@ check_classfn (ctype, function)
if (comptypes (TREE_TYPE (TREE_TYPE (function)),
TREE_TYPE (TREE_TYPE (fndecl)), 1)
- && compparms (p1, p2, 3))
+ && compparms (p1, p2, 3)
+ && (DECL_TEMPLATE_SPECIALIZATION (function)
+ == DECL_TEMPLATE_SPECIALIZATION (fndecl))
+ && (!DECL_TEMPLATE_SPECIALIZATION (function)
+ || (DECL_TI_TEMPLATE (function)
+ == DECL_TI_TEMPLATE (fndecl))))
return fndecl;
+
+ if (is_member_template (fndecl))
+ /* This function might be an instantiation
+ or specialization of fndecl. */
+ templates =
+ scratch_tree_cons (NULL_TREE, fndecl, templates);
}
#endif
fndecl = DECL_CHAIN (fndecl);
}
break; /* loser */
}
- }
- }
+ else if (TREE_CODE (fndecl) == TEMPLATE_DECL
+ && IDENTIFIER_TYPENAME_P (DECL_NAME (fndecl))
+ && IDENTIFIER_TYPENAME_P (fn_name))
+ /* The method in the class is a member template
+ conversion operator. We are declaring another
+ conversion operator. It is possible that even though
+ the names don't match, there is some specialization
+ occurring. */
+ templates =
+ scratch_tree_cons (NULL_TREE, fndecl, templates);
+ }
+ }
+
+ if (templates)
+ /* This function might be an instantiation or a specialization.
+ We should verify that this is possible. If it is, we must
+ somehow add the new declaration to the method vector for the
+ class. Perhaps we should use add_method? For now, we simply
+ return NULL_TREE, which lets the caller know that this
+ function is new, but we don't print an error message. */
+ return NULL_TREE;
if (methods != end)
{
@@ -2063,7 +2219,7 @@ finish_anon_union (anon_union_decl)
DECL_INITIAL (decl) = NULL_TREE;
/* If there's a cleanup to do, it belongs in the
TREE_PURPOSE of the following TREE_LIST. */
- elems = tree_cons (NULL_TREE, decl, elems);
+ elems = scratch_tree_cons (NULL_TREE, decl, elems);
TREE_TYPE (elems) = type;
}
if (static_p)
@@ -2249,6 +2405,7 @@ coerce_delete_type (type)
|| TREE_VALUE (arg_types) != ptr_type_node)
e2 = 1, error ("`operator delete' takes type `void *' as first parameter");
+#if 0
if (arg_types
&& TREE_CHAIN (arg_types)
&& TREE_CHAIN (arg_types) != void_list_node)
@@ -2280,8 +2437,12 @@ coerce_delete_type (type)
arg_types = tree_cons (NULL_TREE, ptr_type_node, TREE_CHAIN (arg_types));
}
else e3 |= e1;
+#endif
- if (e3)
+ if (e2)
+ arg_types = tree_cons (NULL_TREE, ptr_type_node,
+ arg_types ? TREE_CHAIN (arg_types): NULL_TREE);
+ if (e2 || e1)
type = build_function_type (void_type_node, arg_types);
return type;
@@ -2312,7 +2473,11 @@ mark_vtable_entries (decl)
tree fn = TREE_OPERAND (fnaddr, 0);
TREE_ADDRESSABLE (fn) = 1;
if (DECL_LANG_SPECIFIC (fn) && DECL_ABSTRACT_VIRTUAL_P (fn))
- TREE_OPERAND (fnaddr, 0) = fn = abort_fndecl;
+ {
+ TREE_OPERAND (fnaddr, 0) = fn = copy_node (fn);
+ DECL_RTL (fn) = DECL_RTL (abort_fndecl);
+ mark_used (abort_fndecl);
+ }
if (TREE_CODE (fn) == THUNK_DECL && DECL_EXTERNAL (fn))
{
DECL_EXTERNAL (fn) = 0;
@@ -2370,6 +2535,7 @@ import_export_vtable (decl, type, final)
int found = CLASSTYPE_TEMPLATE_INSTANTIATION (type);
+#ifndef MULTIPLE_SYMBOL_SPACES
if (! found && ! final)
{
tree method;
@@ -2383,6 +2549,7 @@ import_export_vtable (decl, type, final)
break;
}
}
+#endif
if (final || ! found)
{
@@ -2431,8 +2598,9 @@ finish_prevtable_vardecl (prev, vars)
&& !DECL_ABSTRACT_VIRTUAL_P (method))
{
SET_CLASSTYPE_INTERFACE_KNOWN (ctype);
- CLASSTYPE_VTABLE_NEEDS_WRITING (ctype) = ! DECL_EXTERNAL (method);
- CLASSTYPE_INTERFACE_ONLY (ctype) = DECL_EXTERNAL (method);
+ CLASSTYPE_VTABLE_NEEDS_WRITING (ctype)
+ = ! DECL_REALLY_EXTERN (method);
+ CLASSTYPE_INTERFACE_ONLY (ctype) = DECL_REALLY_EXTERN (method);
break;
}
}
@@ -2508,8 +2676,8 @@ prune_vtable_vardecl (prev, vars)
int
walk_vtables (typedecl_fn, vardecl_fn)
- register void (*typedecl_fn)();
- register int (*vardecl_fn)();
+ register void (*typedecl_fn) PROTO ((tree, tree));
+ register int (*vardecl_fn) PROTO ((tree, tree));
{
tree prev, vars;
int flag = 0;
@@ -2556,8 +2724,8 @@ finish_sigtable_vardecl (prev, vars)
void
walk_sigtables (typedecl_fn, vardecl_fn)
- register void (*typedecl_fn)();
- register void (*vardecl_fn)();
+ register void (*typedecl_fn) PROTO((tree, tree));
+ register void (*vardecl_fn) PROTO((tree, tree));
{
tree prev, vars;
@@ -2600,26 +2768,8 @@ import_export_decl (decl)
{
if (TREE_CODE (decl) == FUNCTION_DECL)
comdat_linkage (decl);
- /* Dynamically initialized vars go into common. */
- else if (DECL_INITIAL (decl) == NULL_TREE
- || DECL_INITIAL (decl) == error_mark_node)
- DECL_COMMON (decl) = 1;
- else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
- {
- DECL_COMMON (decl) = 1;
- DECL_INITIAL (decl) = error_mark_node;
- }
else
- {
- /* Statically initialized vars are weak or comdat, if
- supported. */
- if (flag_weak)
- make_decl_one_only (decl);
- else
- /* we can't do anything useful; leave vars for explicit
- instantiation. */
- DECL_NOT_REALLY_EXTERN (decl) = 0;
- }
+ DECL_COMDAT (decl) = 1;
}
else
DECL_NOT_REALLY_EXTERN (decl) = 0;
@@ -2627,7 +2777,8 @@ import_export_decl (decl)
else if (DECL_FUNCTION_MEMBER_P (decl))
{
tree ctype = DECL_CLASS_CONTEXT (decl);
- if (CLASSTYPE_INTERFACE_KNOWN (ctype) && ! DECL_ARTIFICIAL (decl))
+ if (CLASSTYPE_INTERFACE_KNOWN (ctype)
+ && (! DECL_ARTIFICIAL (decl) || DECL_VINDEX (decl)))
{
DECL_NOT_REALLY_EXTERN (decl)
= ! (CLASSTYPE_INTERFACE_ONLY (ctype)
@@ -2652,8 +2803,6 @@ import_export_decl (decl)
else
comdat_linkage (decl);
}
- else if (DECL_C_STATIC (decl))
- TREE_PUBLIC (decl) = 0;
else
comdat_linkage (decl);
@@ -2685,7 +2834,6 @@ extern tree pending_templates;
extern tree maybe_templates;
extern struct obstack permanent_obstack;
-extern tree get_id_2 ();
static tree
get_sentry (base)
@@ -2726,9 +2874,6 @@ finish_file ()
at_eof = 1;
- if (flag_detailed_statistics)
- dump_tree_statistics ();
-
/* Bad parse errors. Just forget about it. */
if (! global_bindings_p () || current_class_type)
return;
@@ -2759,7 +2904,7 @@ finish_file ()
for (fnname = maybe_templates; fnname; fnname = TREE_CHAIN (fnname))
{
- tree *args, fn, decl = TREE_VALUE (fnname);
+ tree args, fn, decl = TREE_VALUE (fnname);
if (DECL_INITIAL (decl))
continue;
@@ -2767,7 +2912,6 @@ finish_file ()
fn = TREE_PURPOSE (fnname);
args = get_bindings (fn, decl);
fn = instantiate_template (fn, args);
- free (args);
instantiate_decl (fn);
}
@@ -2802,7 +2946,8 @@ finish_file ()
/* Walk to mark the inline functions we need, then output them so
that we can pick up any other tdecls that those routines need. */
- walk_vtables ((void (*)())0, finish_prevtable_vardecl);
+ walk_vtables ((void (*) PROTO ((tree, tree))) 0,
+ finish_prevtable_vardecl);
for (vars = pending_statics; vars; vars = TREE_CHAIN (vars))
{
@@ -2821,7 +2966,7 @@ finish_file ()
rest_of_decl_compilation (TREE_VALUE (vars), 0, 1, 1);
vars = static_aggregates;
- if (static_ctors || vars || exception_table_p ())
+ if (static_ctors || vars || register_exception_table_p ())
needs_messing_up = 1;
if (static_dtors)
needs_cleaning = 1;
@@ -2920,7 +3065,7 @@ finish_file ()
push_momentary ();
expand_start_bindings (0);
- if (exception_table_p ())
+ if (register_exception_table_p ())
register_exception_table ();
while (vars)
@@ -2973,7 +3118,7 @@ finish_file ()
expand_expr (expand_vec_init (decl, TREE_VEC_ELT (init, 0),
TREE_VEC_ELT (init, 1),
TREE_VEC_ELT (init, 2), 0),
- const0_rtx, VOIDmode, 0);
+ const0_rtx, VOIDmode, EXPAND_NORMAL);
}
else
expand_assignment (decl, init, 0, 0);
@@ -3044,7 +3189,8 @@ finish_file ()
start_time = get_run_time ();
if (flag_handle_signatures)
- walk_sigtables ((void (*)())0, finish_sigtable_vardecl);
+ walk_sigtables ((void (*) PROTO ((tree, tree))) 0,
+ finish_sigtable_vardecl);
for (fnname = saved_inlines; fnname; fnname = TREE_CHAIN (fnname))
{
@@ -3070,7 +3216,8 @@ finish_file ()
SET_DECL_ARTIFICIAL (vars);
pushdecl (vars);
- reconsider |= walk_vtables ((void (*)())0, finish_vtable_vardecl);
+ reconsider |= walk_vtables ((void (*) PROTO((tree, tree))) 0,
+ finish_vtable_vardecl);
while (*p)
{
@@ -3106,11 +3253,10 @@ finish_file ()
DECL_EXTERNAL (decl) = 0;
reconsider = 1;
/* We can't inline this function after it's been
- emitted, so just disable inlining. We want a
- variant of output_inline_function that doesn't
- prevent subsequent integration... */
- flag_no_inline = 1;
- temporary_allocation ();
+ emitted. We want a variant of
+ output_inline_function that doesn't prevent
+ subsequent integration... */
+ DECL_INLINE (decl) = 0;
output_inline_function (decl);
permanent_allocation (1);
}
@@ -3126,15 +3272,8 @@ finish_file ()
/* Now delete from the chain of variables all virtual function tables.
We output them all ourselves, because each will be treated specially. */
- walk_vtables ((void (*)())0, prune_vtable_vardecl);
-
- for (vars = getdecls (); vars; vars = TREE_CHAIN (vars))
- {
- if (TREE_CODE (vars) == FUNCTION_DECL
- && ! DECL_INTERFACE_KNOWN (vars)
- && DECL_C_STATIC (vars))
- TREE_PUBLIC (vars) = 0;
- }
+ walk_vtables ((void (*) PROTO((tree, tree))) 0,
+ prune_vtable_vardecl);
if (write_virtuals == 2)
{
@@ -3156,7 +3295,10 @@ finish_file ()
varconst_time += this_time - start_time;
if (flag_detailed_statistics)
- dump_time_statistics ();
+ {
+ dump_tree_statistics ();
+ dump_time_statistics ();
+ }
}
/* This is something of the form 'A()()()()()+1' that has turned out to be an
@@ -3229,6 +3371,9 @@ reparse_absdcl_as_casts (decl, expr)
expr = build_c_cast (type, expr);
}
+ if (warn_old_style_cast)
+ warning ("use of old-style cast");
+
return expr;
}
@@ -3252,6 +3397,11 @@ build_expr_from_tree (t)
else
return do_identifier (TREE_OPERAND (t, 0), 0);
+ case TEMPLATE_ID_EXPR:
+ return (lookup_template_function
+ (build_expr_from_tree (TREE_OPERAND (t, 0)),
+ build_expr_from_tree (TREE_OPERAND (t, 1))));
+
case INDIRECT_REF:
return build_x_indirect_ref
(build_expr_from_tree (TREE_OPERAND (t, 0)), "unary *");
@@ -3409,7 +3559,8 @@ build_expr_from_tree (t)
else
{
tree name = TREE_OPERAND (t, 0);
- if (! really_overloaded_fn (name))
+ if (TREE_CODE (name) == TEMPLATE_ID_EXPR
+ || ! really_overloaded_fn (name))
name = build_expr_from_tree (name);
return build_x_function_call
(name, build_expr_from_tree (TREE_OPERAND (t, 1)),
@@ -3438,7 +3589,7 @@ build_expr_from_tree (t)
chain = TREE_CHAIN (t);
if (chain && chain != void_type_node)
chain = build_expr_from_tree (chain);
- return tree_cons (purpose, value, chain);
+ return expr_tree_cons (purpose, value, chain);
}
case COMPONENT_REF:
@@ -3485,7 +3636,7 @@ reparse_decl_as_expr (type, decl)
{
decl = build_expr_from_tree (decl);
if (type)
- return build_functional_cast (type, build_tree_list (NULL_TREE, decl));
+ return build_functional_cast (type, build_expr_list (NULL_TREE, decl));
else
return decl;
}
@@ -3698,3 +3849,22 @@ mark_used (decl)
if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
instantiate_decl (decl);
}
+
+/* Helper function for named_class_head_sans_basetype nonterminal. */
+
+tree
+handle_class_head (aggr, scope, id)
+ tree aggr, scope, id;
+{
+ if (TREE_CODE (id) == TYPE_DECL)
+ return id;
+
+ if (scope)
+ cp_error ("`%T' does not have a nested type named `%D'", scope, id);
+ else
+ cp_error ("no file-scope type named `%D'", id);
+
+ id = xref_tag
+ (aggr, make_anon_name (), NULL_TREE, 1);
+ return TYPE_MAIN_DECL (id);
+}
diff --git a/gcc/cp/error.c b/gcc/cp/error.c
index 98ca15f02aa..d6c6586b9dd 100644
--- a/gcc/cp/error.c
+++ b/gcc/cp/error.c
@@ -20,6 +20,7 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "config.h"
+#include <stdio.h>
#include "tree.h"
#include "cp-tree.h"
#include "obstack.h"
@@ -85,10 +86,24 @@ static char *scratch_firstobj;
# define NEXT_CODE(t) (TREE_CODE (TREE_TYPE (t)))
-static void dump_type (), dump_decl (), dump_function_decl ();
-static void dump_expr (), dump_unary_op (), dump_binary_op ();
-static void dump_aggr_type (), dump_type_prefix (), dump_type_suffix ();
-static void dump_function_name ();
+enum pad { none, before, after };
+
+static void dump_type PROTO((tree, int));
+static void dump_decl PROTO((tree, int));
+static void dump_function_decl PROTO((tree, int));
+static void dump_expr PROTO((tree, int));
+static void dump_unary_op PROTO((char *, tree, int));
+static void dump_binary_op PROTO((char *, tree));
+static void dump_aggr_type PROTO((tree, int));
+static void dump_type_prefix PROTO((tree, int));
+static void dump_type_suffix PROTO((tree, int));
+static void dump_function_name PROTO((tree));
+static void dump_expr_list PROTO((tree));
+static void dump_global_iord PROTO((tree));
+static void dump_readonly_or_volatile PROTO((tree, enum pad));
+static void dump_char PROTO((int));
+static char *aggr_variety PROTO((tree));
+static tree ident_fndecl PROTO((tree));
void
init_error ()
@@ -97,8 +112,6 @@ init_error ()
scratch_firstobj = (char *)obstack_alloc (&scratch_obstack, 0);
}
-enum pad { none, before, after };
-
static void
dump_readonly_or_volatile (t, p)
tree t;
@@ -153,7 +166,7 @@ dump_type (t, v)
if (TREE_PURPOSE (t) && v)
{
OB_PUTS (" = ");
- dump_expr (TREE_PURPOSE (t));
+ dump_expr (TREE_PURPOSE (t), 0);
}
if (TREE_CHAIN (t))
{
@@ -182,7 +195,7 @@ dump_type (t, v)
&& (IS_SIGNATURE_POINTER (t) || IS_SIGNATURE_REFERENCE (t)))
{
if (TYPE_READONLY (t) | TYPE_VOLATILE (t))
- dump_readonly_or_volatile (t);
+ dump_readonly_or_volatile (t, after);
dump_type (SIGNATURE_TYPE (t), v);
if (IS_SIGNATURE_POINTER (t))
OB_PUTC ('*');
@@ -217,6 +230,7 @@ dump_type (t, v)
break;
case TEMPLATE_TYPE_PARM:
+ dump_readonly_or_volatile (t, after);
if (TYPE_IDENTIFIER (t))
OB_PUTID (TYPE_IDENTIFIER (t));
else
@@ -534,7 +548,7 @@ dump_type_suffix (t, v)
/* Return a function declaration which corresponds to the IDENTIFIER_NODE
argument. */
-tree
+static tree
ident_fndecl (t)
tree t;
{
@@ -566,7 +580,7 @@ ident_fndecl (t)
#define GLOBAL_IORD_P(NODE) \
! strncmp (IDENTIFIER_POINTER(NODE), GLOBAL_THING, sizeof (GLOBAL_THING) - 1)
-void
+static void
dump_global_iord (t)
tree t;
{
@@ -700,39 +714,50 @@ dump_decl (t, v)
case FUNCTION_DECL:
if (GLOBAL_IORD_P (DECL_ASSEMBLER_NAME (t)))
dump_global_iord (DECL_ASSEMBLER_NAME (t));
+ else if (! DECL_LANG_SPECIFIC (t))
+ OB_PUTS ("{internal}");
else
dump_function_decl (t, v);
break;
case TEMPLATE_DECL:
{
- tree args = DECL_TEMPLATE_PARMS (t);
- int i, len = args ? TREE_VEC_LENGTH (args) : 0;
- OB_PUTS ("template <");
- for (i = 0; i < len; i++)
+ tree orig_args = DECL_TEMPLATE_PARMS (t);
+ tree args;
+ int i;
+ for (args = orig_args = nreverse (orig_args);
+ args;
+ args = TREE_CHAIN (args))
{
- tree arg = TREE_VEC_ELT (args, i);
- tree defval = TREE_PURPOSE (arg);
- arg = TREE_VALUE (arg);
- if (TREE_CODE (arg) == TYPE_DECL)
- {
- OB_PUTS ("class ");
- OB_PUTID (DECL_NAME (arg));
- }
- else
- dump_decl (arg, 1);
+ int len = TREE_VEC_LENGTH (TREE_VALUE (args));
- if (defval)
+ OB_PUTS ("template <");
+ for (i = 0; i < len; i++)
{
- OB_PUTS (" = ");
- dump_decl (defval, 1);
- }
+ tree arg = TREE_VEC_ELT (TREE_VALUE (args), i);
+ tree defval = TREE_PURPOSE (arg);
+ arg = TREE_VALUE (arg);
+ if (TREE_CODE (arg) == TYPE_DECL)
+ {
+ OB_PUTS ("class ");
+ OB_PUTID (DECL_NAME (arg));
+ }
+ else
+ dump_decl (arg, 1);
- OB_PUTC2 (',', ' ');
+ if (defval)
+ {
+ OB_PUTS (" = ");
+ dump_decl (defval, 1);
+ }
+
+ OB_PUTC2 (',', ' ');
+ }
+ if (len != 0)
+ OB_UNPUT (2);
+ OB_PUTC2 ('>', ' ');
}
- if (len != 0)
- OB_UNPUT (2);
- OB_PUTC2 ('>', ' ');
+ nreverse(orig_args);
if (TREE_CODE (DECL_TEMPLATE_RESULT (t)) == TYPE_DECL)
dump_type (TREE_TYPE (t), v);
@@ -757,10 +782,13 @@ dump_decl (t, v)
case CONST_DECL:
if ((TREE_TYPE (t) != NULL_TREE && NEXT_CODE (t) == ENUMERAL_TYPE)
- || TREE_CODE (DECL_INITIAL (t)) == TEMPLATE_CONST_PARM)
+ || (DECL_INITIAL (t) &&
+ TREE_CODE (DECL_INITIAL (t)) == TEMPLATE_CONST_PARM))
goto general;
- else
+ else if (DECL_INITIAL (t))
dump_expr (DECL_INITIAL (t), 0);
+ else
+ OB_PUTS ("enumerator");
break;
case USING_DECL:
@@ -785,11 +813,18 @@ dump_function_decl (t, v)
tree t;
int v;
{
- tree name = DECL_ASSEMBLER_NAME (t);
- tree fntype = TREE_TYPE (t);
- tree parmtypes = TYPE_ARG_TYPES (fntype);
+ tree name;
+ tree fntype;
+ tree parmtypes;
tree cname = NULL_TREE;
+ if (TREE_CODE (t) == TEMPLATE_DECL)
+ t = DECL_TEMPLATE_RESULT (t);
+
+ name = DECL_ASSEMBLER_NAME (t);
+ fntype = TREE_TYPE (t);
+ parmtypes = TYPE_ARG_TYPES (fntype);
+
/* Friends have DECL_CLASS_CONTEXT set, but not DECL_CONTEXT. */
if (DECL_CONTEXT (t))
cname = DECL_CLASS_CONTEXT (t);
@@ -889,11 +924,77 @@ dump_function_name (t)
}
else
dump_decl (name, 0);
+
+ if ((DECL_TEMPLATE_SPECIALIZATION (t) || DECL_IMPLICIT_INSTANTIATION (t))
+ && (DECL_CLASS_CONTEXT (t) == NULL_TREE || is_member_template (t)))
+ {
+ tree args = DECL_TEMPLATE_INFO (t)
+ ? DECL_TI_ARGS (t) : NULL_TREE;
+
+ OB_PUTC ('<');
+
+ /* Be careful only to print things when we have them, so as not
+ to crash producing error messages. */
+ if (args)
+ {
+ if (TREE_CODE (args) == TREE_LIST)
+ {
+ tree arg;
+ int need_comma = 0;
+
+ for (arg = args; arg; arg = TREE_CHAIN (arg))
+ {
+ tree a = TREE_VALUE (arg);
+
+ if (need_comma)
+ OB_PUTS (", ");
+
+ if (a)
+ {
+ if (TREE_CODE_CLASS (TREE_CODE (a)) == 't')
+ dump_type (a, 0);
+ else
+ dump_expr (a, 0);
+ }
+
+ need_comma = 1;
+ }
+ }
+ else if (TREE_CODE (args) == TREE_VEC)
+ {
+ int i;
+ int need_comma = 0;
+
+ if (TREE_VEC_LENGTH (args) > 0
+ && TREE_CODE (TREE_VEC_ELT (args, 0)) == TREE_VEC)
+ args = TREE_VEC_ELT (args, 0);
+
+ for (i = 0; i < TREE_VEC_LENGTH (args); i++)
+ {
+ tree a = TREE_VEC_ELT (args, i);
+
+ if (need_comma)
+ OB_PUTS (", ");
+
+ if (a)
+ {
+ if (TREE_CODE_CLASS (TREE_CODE (a)) == 't')
+ dump_type (a, 0);
+ else
+ dump_expr (a, 0);
+ }
+
+ need_comma = 1;
+ }
+ }
+ }
+ OB_PUTC ('>');
+ }
}
static void
dump_char (c)
- char c;
+ int c;
{
switch (c)
{
@@ -1277,7 +1378,7 @@ dump_expr (t, nop)
if (integer_all_onesp (idx))
{
tree pfn = PFN_FROM_PTRMEMFUNC (t);
- dump_expr (pfn);
+ dump_expr (pfn, 0);
break;
}
if (TREE_CODE (idx) == INTEGER_CST
@@ -1303,7 +1404,7 @@ dump_expr (t, nop)
}
if (virtuals)
{
- dump_expr (FNADDR_FROM_VTABLE_ENTRY (TREE_VALUE (virtuals)));
+ dump_expr (FNADDR_FROM_VTABLE_ENTRY (TREE_VALUE (virtuals)), 0);
break;
}
}
@@ -1331,18 +1432,33 @@ dump_expr (t, nop)
}
case TEMPLATE_CONST_PARM:
- if (current_template_parms)
- {
- tree r = TREE_VEC_ELT (TREE_VALUE (current_template_parms),
- TEMPLATE_CONST_IDX (t));
- dump_decl (TREE_VALUE (r), -1);
- }
- else
- {
- OB_PUTS ("<tparm ");
- OB_PUTI (TEMPLATE_CONST_IDX (t));
- OB_PUTS (">");
- }
+ {
+ int l = current_template_parms ?
+ list_length (current_template_parms) : 0;
+
+ if (l >= TEMPLATE_CONST_LEVEL (t))
+ {
+ int i;
+ tree parms = current_template_parms;
+ tree r;
+
+ for (i = 0; i < l - TEMPLATE_CONST_LEVEL (t); ++i)
+ {
+ parms = TREE_CHAIN (parms);
+ my_friendly_assert (parms != NULL_TREE, 0);
+ }
+
+ r = TREE_VEC_ELT (TREE_VALUE (parms),
+ TEMPLATE_CONST_IDX (t));
+ dump_decl (TREE_VALUE (r), -1);
+ }
+ else
+ {
+ OB_PUTS ("<tparm ");
+ OB_PUTI (TEMPLATE_CONST_IDX (t));
+ OB_PUTS (">");
+ }
+ }
break;
case IDENTIFIER_NODE:
@@ -1388,6 +1504,10 @@ dump_expr (t, nop)
OB_PUTC (')');
break;
+ case DEFAULT_ARG:
+ OB_PUTS ("{unparsed}");
+ break;
+
case TREE_LIST:
if (TREE_VALUE (t) && TREE_CODE (TREE_VALUE (t)) == FUNCTION_DECL)
{
@@ -1644,7 +1764,10 @@ args_as_string (p, v)
OB_INIT ();
for (; p; p = TREE_CHAIN (p))
{
- dump_type (error_type (TREE_VALUE (p)), v);
+ if (TREE_VALUE (p) == null_node)
+ OB_PUTS ("NULL");
+ else
+ dump_type (error_type (TREE_VALUE (p)), v);
if (TREE_CHAIN (p))
OB_PUTS (", ");
}
diff --git a/gcc/cp/except.c b/gcc/cp/except.c
index 55ffa346507..c59cf71bbf9 100644
--- a/gcc/cp/except.c
+++ b/gcc/cp/except.c
@@ -1,5 +1,5 @@
/* Handle exceptional things in C++.
- Copyright (C) 1989, 92-95, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1989, 92-97, 1998 Free Software Foundation, Inc.
Contributed by Michael Tiemann <tiemann@cygnus.com>
Rewritten by Mike Stump <mrs@cygnus.com>, based upon an
initial re-implementation courtesy Tad Hunt.
@@ -23,6 +23,7 @@ Boston, MA 02111-1307, USA. */
#include "config.h"
+#include <stdio.h>
#include "tree.h"
#include "rtl.h"
#include "cp-tree.h"
@@ -32,6 +33,7 @@ Boston, MA 02111-1307, USA. */
#include "output.h"
#include "except.h"
#include "function.h"
+#include "defaults.h"
rtx expand_builtin_return_addr PROTO((enum built_in_function, int, rtx));
@@ -43,8 +45,13 @@ tree builtin_return_address_fndecl;
/* Used to cache a call to __builtin_return_address. */
static tree BuiltinReturnAddress;
-
-#include <stdio.h>
+static void easy_expand_asm PROTO((char *));
+static void push_eh_cleanup PROTO((void));
+static void do_unwind PROTO((rtx));
+static rtx do_function_call PROTO((tree, tree, tree));
+static tree build_eh_type_type PROTO((tree));
+static tree build_eh_type PROTO((tree));
+static void expand_end_eh_spec PROTO((tree));
static void
easy_expand_asm (str)
@@ -157,9 +164,6 @@ asm (TEXT_SECTION_ASM_OP);
===================================================================== */
-extern rtx emit_insn PROTO((rtx));
-extern rtx gen_nop PROTO(());
-
/* local globals for function calls
====================================================================== */
@@ -173,11 +177,6 @@ static tree FirstExceptionMatch;
/* Used to cache a call to __unwind_function. */
static tree Unwind;
-/* Holds a ready to emit call to "terminate". */
-static tree TerminateFunctionCall;
-
-static tree empty_fndecl;
-
/* ====================================================================== */
@@ -192,14 +191,6 @@ static tree empty_fndecl;
/* Holds the pc for doing "throw" */
static tree saved_pc;
-/* Holds the type of the thing being thrown. */
-static tree saved_throw_type;
-/* Holds the value being thrown. */
-static tree saved_throw_value;
-/* Holds the cleanup for the value being thrown. */
-static tree saved_cleanup;
-/* Indicates if we are in a catch clause. */
-static tree saved_in_catch;
extern int throw_used;
extern rtx catch_clauses;
@@ -231,7 +222,6 @@ do_function_call (func, params, return_type)
void
init_exception_processing ()
{
- extern tree define_function ();
tree unexpected_fndecl, terminate_fndecl;
tree set_unexpected_fndecl, set_terminate_fndecl;
tree catch_match_fndecl;
@@ -287,15 +277,9 @@ init_exception_processing ()
tree_cons (NULL_TREE, ptr_type_node,
void_list_node)),
NOT_BUILT_IN, NULL_PTR);
- empty_fndecl
- = builtin_function ("__empty",
- vtype,
- NOT_BUILT_IN, NULL_PTR);
- DECL_EXTERNAL (empty_fndecl) = 1;
- TREE_PUBLIC (empty_fndecl) = 1;
Unexpected = default_conversion (unexpected_fndecl);
- Terminate = default_conversion (terminate_fndecl);
+ Terminate = terminate_fndecl;
SetTerminate = default_conversion (set_terminate_fndecl);
SetUnexpected = default_conversion (set_unexpected_fndecl);
CatchMatch = default_conversion (catch_match_fndecl);
@@ -303,51 +287,142 @@ init_exception_processing ()
Unwind = default_conversion (unwind_fndecl);
BuiltinReturnAddress = default_conversion (builtin_return_address_fndecl);
- TerminateFunctionCall = build_function_call (Terminate, NULL_TREE);
-
pop_lang_context ();
- declspecs = tree_cons (NULL_TREE, get_identifier ("void"), NULL_TREE);
- d = build_parse_node (INDIRECT_REF, get_identifier ("__eh_pc"));
- d = start_decl (d, declspecs, 0);
- DECL_COMMON (d) = 1;
- cp_finish_decl (d, NULL_TREE, NULL_TREE, 1, 0);
- saved_pc = lookup_name (get_identifier ("__eh_pc"), 0);
-
- declspecs = tree_cons (NULL_TREE, get_identifier ("void"), NULL_TREE);
- d = build_parse_node (INDIRECT_REF, get_identifier ("__eh_type"));
- d = start_decl (d, declspecs, 0);
- DECL_COMMON (d) = 1;
- cp_finish_decl (d, NULL_TREE, NULL_TREE, 1, 0);
- saved_throw_type = lookup_name (get_identifier ("__eh_type"), 0);
-
- declspecs = tree_cons (NULL_TREE, get_identifier ("void"), NULL_TREE);
- d = build_parse_node (INDIRECT_REF, get_identifier ("__eh_value"));
- d = start_decl (d, declspecs, 0);
- DECL_COMMON (d) = 1;
- cp_finish_decl (d, NULL_TREE, NULL_TREE, 1, 0);
- saved_throw_value = lookup_name (get_identifier ("__eh_value"), 0);
-
- declspecs = tree_cons (NULL_TREE, get_identifier ("void"), NULL_TREE);
- d = build_parse_node (INDIRECT_REF, get_identifier ("__eh_cleanup"));
- d = make_call_declarator (d, void_list_node, NULL_TREE, NULL_TREE);
- d = start_decl (d, declspecs, 0);
- DECL_COMMON (d) = 1;
- cp_finish_decl (d, NULL_TREE, NULL_TREE, 1, 0);
- saved_cleanup = lookup_name (get_identifier ("__eh_cleanup"), 0);
-
- declspecs = tree_cons (NULL_TREE, get_identifier ("bool"), NULL_TREE);
- d = get_identifier ("__eh_in_catch");
- d = start_decl (d, declspecs, 0);
- DECL_COMMON (d) = 1;
- cp_finish_decl (d, NULL_TREE, NULL_TREE, 1, 0);
- saved_in_catch = lookup_name (get_identifier ("__eh_in_catch"), 0);
+ d = build_decl (VAR_DECL, get_identifier ("__eh_pc"), ptr_type_node);
+ TREE_PUBLIC (d) = 1;
+ DECL_EXTERNAL (d) = 1;
+ DECL_ARTIFICIAL (d) = 1;
+ cp_finish_decl (d, NULL_TREE, NULL_TREE, 0, 0);
+ saved_pc = d;
/* If we use setjmp/longjmp EH, arrange for all cleanup actions to
be protected with __terminate. */
protect_cleanup_actions_with_terminate = 1;
}
+/* Retrieve a pointer to the cp_eh_info node for the current exception. */
+
+static tree
+call_eh_info ()
+{
+ tree fn;
+
+ fn = get_identifier ("__cp_exception_info");
+ if (IDENTIFIER_GLOBAL_VALUE (fn))
+ fn = IDENTIFIER_GLOBAL_VALUE (fn);
+ else
+ {
+ tree t, fields[6];
+
+ /* Declare cp_eh_info * __cp_exception_info (void),
+ as defined in exception.cc. */
+ push_obstacks_nochange ();
+ end_temporary_allocation ();
+
+ /* struct cp_eh_info. This must match exception.cc. Note that this
+ type is not pushed anywhere. */
+ t = make_lang_type (RECORD_TYPE);
+ fields[0] = build_lang_field_decl (FIELD_DECL, get_identifier ("value"),
+ ptr_type_node);
+ fields[1] = build_lang_field_decl (FIELD_DECL, get_identifier ("type"),
+ ptr_type_node);
+ fields[2] = build_lang_field_decl
+ (FIELD_DECL, get_identifier ("cleanup"),
+ build_pointer_type (build_function_type
+ (ptr_type_node, tree_cons
+ (NULL_TREE, ptr_type_node, void_list_node))));
+ fields[3] = build_lang_field_decl (FIELD_DECL, get_identifier ("caught"),
+ boolean_type_node);
+ fields[4] = build_lang_field_decl (FIELD_DECL, get_identifier ("next"),
+ build_pointer_type (t));
+ fields[5] = build_lang_field_decl
+ (FIELD_DECL, get_identifier ("handlers"), long_integer_type_node);
+ /* N.B.: The fourth field LEN is expected to be
+ the number of fields - 1, not the total number of fields. */
+ finish_builtin_type (t, "cp_eh_info", fields, 5, ptr_type_node);
+ t = build_pointer_type (t);
+
+ /* And now the function. */
+ fn = build_lang_decl (FUNCTION_DECL, fn,
+ build_function_type (t, void_list_node));
+ DECL_EXTERNAL (fn) = 1;
+ TREE_PUBLIC (fn) = 1;
+ DECL_ARTIFICIAL (fn) = 1;
+ pushdecl_top_level (fn);
+ make_function_rtl (fn);
+ assemble_external (fn);
+ pop_obstacks ();
+ }
+ return build_function_call (fn, NULL_TREE);
+}
+
+/* Retrieve a pointer to the cp_eh_info node for the current exception
+ and save it in the current binding level. */
+
+static void
+push_eh_info ()
+{
+ tree decl, fn = call_eh_info ();
+
+ /* Remember the pointer to the current exception info; it won't change
+ during this catch block. */
+ decl = build_decl (VAR_DECL, get_identifier ("__exception_info"),
+ TREE_TYPE (fn));
+ DECL_ARTIFICIAL (decl) = 1;
+ DECL_INITIAL (decl) = fn;
+ decl = pushdecl (decl);
+ cp_finish_decl (decl, fn, NULL_TREE, 0, 0);
+}
+
+/* Returns a reference to the cp_eh_info node for the current exception. */
+
+static tree
+get_eh_info ()
+{
+ /* Look for the pointer pushed in push_eh_info. */
+ tree t = lookup_name (get_identifier ("__exception_info"), 0);
+ return build_indirect_ref (t, NULL_PTR);
+}
+
+/* Returns a reference to the current exception object. */
+
+static tree
+get_eh_value ()
+{
+ return build_component_ref (get_eh_info (), get_identifier ("value"),
+ NULL_TREE, 0);
+}
+
+/* Returns a reference to the current exception type. */
+
+static tree
+get_eh_type ()
+{
+ return build_component_ref (get_eh_info (), get_identifier ("type"),
+ NULL_TREE, 0);
+}
+
+/* Returns a reference to whether or not the current exception
+ has been caught. */
+
+static tree
+get_eh_caught ()
+{
+ return build_component_ref (get_eh_info (), get_identifier ("caught"),
+ NULL_TREE, 0);
+}
+
+/* Returns a reference to whether or not the current exception
+ has been caught. */
+
+static tree
+get_eh_handlers ()
+{
+ return build_component_ref (get_eh_info (), get_identifier ("handlers"),
+ NULL_TREE, 0);
+}
+
/* Build a type value for use at runtime for a type that is matched
against by the exception handling system. */
@@ -393,25 +468,60 @@ build_eh_type (exp)
return build_eh_type_type (TREE_TYPE (exp));
}
-/* This routine creates the cleanup for the exception handling object. */
+/* Build up a call to __cp_pop_exception, to destroy the exception object
+ for the current catch block. HANDLER is either true or false, telling
+ the library whether or not it is being called from an exception handler;
+ if it is, it avoids destroying the object on rethrow. */
+
+static tree
+do_pop_exception ()
+{
+ tree fn, cleanup;
+ fn = get_identifier ("__cp_pop_exception");
+ if (IDENTIFIER_GLOBAL_VALUE (fn))
+ fn = IDENTIFIER_GLOBAL_VALUE (fn);
+ else
+ {
+ /* Declare void __cp_pop_exception (void *),
+ as defined in exception.cc. */
+ push_obstacks_nochange ();
+ end_temporary_allocation ();
+ fn = build_lang_decl
+ (FUNCTION_DECL, fn,
+ build_function_type (void_type_node, tree_cons
+ (NULL_TREE, ptr_type_node, void_list_node)));
+ DECL_EXTERNAL (fn) = 1;
+ TREE_PUBLIC (fn) = 1;
+ DECL_ARTIFICIAL (fn) = 1;
+ pushdecl_top_level (fn);
+ make_function_rtl (fn);
+ assemble_external (fn);
+ pop_obstacks ();
+ }
+
+ /* Arrange to do a dynamically scoped cleanup upon exit from this region. */
+ cleanup = lookup_name (get_identifier ("__exception_info"), 0);
+ cleanup = build_function_call (fn, expr_tree_cons
+ (NULL_TREE, cleanup, NULL_TREE));
+ return cleanup;
+}
+
+/* This routine creates the cleanup for the current exception. */
static void
push_eh_cleanup ()
{
- /* All cleanups must last longer than normal. */
- int yes = suspend_momentary ();
+ int yes;
- /* Arrange to do a dynamically scoped cleanup upon exit from this region. */
- tree cleanup = build_function_call (saved_cleanup, NULL_TREE);
- cleanup = build (COMPOUND_EXPR, void_type_node, cleanup,
- build_modify_expr (saved_in_catch, NOP_EXPR,
- build_modify_expr (saved_throw_type, NOP_EXPR, integer_zero_node)));
- expand_decl_cleanup (NULL_TREE, cleanup);
+ expand_expr (build_unary_op (PREINCREMENT_EXPR, get_eh_handlers (), 1),
+ const0_rtx, VOIDmode, EXPAND_NORMAL);
+ yes = suspend_momentary ();
+ /* All cleanups must last longer than normal. */
+ expand_decl_cleanup (NULL_TREE, do_pop_exception ());
resume_momentary (yes);
}
-
/* call this to start a catch block. Typename is the typename, and identifier
is the variable to place the object in or NULL if the variable doesn't
matter. If typename is NULL, that means its a "catch (...)" or catch
@@ -444,7 +554,19 @@ expand_start_catch_block (declspecs, declarator)
if (! doing_eh (1))
return;
- /* Create a binding level for the parm. */
+ /* If we are not doing setjmp/longjmp EH, because we are reordered
+ out of line, we arrange to rethrow in the outer context so as to
+ skip through the terminate region we are nested in, should we
+ encounter an exception in the catch handler. We also need to do
+ this because we are not physically within the try block, if any,
+ that contains this catch block.
+
+ Matches the end in expand_end_catch_block. */
+ if (! exceptions_via_longjmp)
+ expand_eh_region_start ();
+
+ /* Create a binding level for the eh_info and the exception object
+ cleanup. */
pushlevel (0);
expand_start_bindings (0);
@@ -453,25 +575,21 @@ expand_start_catch_block (declspecs, declarator)
emit_line_note (input_filename, lineno);
+ push_eh_info ();
+
if (declspecs)
{
- tree exp;
- rtx call_rtx, return_value_rtx;
- tree init_type;
-
decl = grokdeclarator (declarator, declspecs, CATCHPARM, 1, NULL_TREE);
if (decl == NULL_TREE)
- {
- error ("invalid catch parameter");
-
- /* This is cheap, but we want to maintain the data
- structures. */
-
- expand_eh_region_start ();
+ error ("invalid catch parameter");
+ }
- return;
- }
+ if (decl)
+ {
+ tree exp;
+ rtx call_rtx, return_value_rtx;
+ tree init_type;
/* Make sure we mark the catch param as used, otherwise we'll get
a warning about an unused ((anonymous)). */
@@ -483,12 +601,19 @@ expand_start_catch_block (declspecs, declarator)
&& TREE_CODE (init_type) != POINTER_TYPE)
init_type = build_reference_type (init_type);
- exp = saved_throw_value;
- exp = tree_cons (NULL_TREE,
+ exp = get_eh_value ();
+
+ /* Since pointers are passed by value, initialize a reference to
+ pointer catch parm with the address of the value slot. */
+ if (TREE_CODE (init_type) == REFERENCE_TYPE
+ && TREE_CODE (TREE_TYPE (init_type)) == POINTER_TYPE)
+ exp = build_unary_op (ADDR_EXPR, exp, 1);
+
+ exp = expr_tree_cons (NULL_TREE,
build_eh_type_type (TREE_TYPE (decl)),
- tree_cons (NULL_TREE,
- saved_throw_type,
- tree_cons (NULL_TREE, exp, NULL_TREE)));
+ expr_tree_cons (NULL_TREE,
+ get_eh_type (),
+ expr_tree_cons (NULL_TREE, exp, NULL_TREE)));
exp = build_function_call (CatchMatch, exp);
call_rtx = expand_call (exp, NULL_RTX, 0);
assemble_external (TREE_OPERAND (CatchMatch, 0));
@@ -504,35 +629,46 @@ expand_start_catch_block (declspecs, declarator)
push_eh_cleanup ();
- init = convert_from_reference (save_expr (make_tree (init_type, call_rtx)));
+ /* Create a binding level for the parm. */
+ pushlevel (0);
+ expand_start_bindings (0);
+
+ init = convert_from_reference (make_tree (init_type, call_rtx));
+
+ /* If the constructor for the catch parm exits via an exception, we
+ must call terminate. See eh23.C. */
+ if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
+ {
+ int yes = suspend_momentary ();
+ tree term = build_function_call (Terminate, NULL_TREE);
+ resume_momentary (yes);
+
+ /* Generate the copy constructor call directly so we can wrap it.
+ See also expand_default_init. */
+ init = ocp_convert (TREE_TYPE (decl), init,
+ CONV_IMPLICIT|CONV_FORCE_TEMP, 0);
+ init = build (TRY_CATCH_EXPR, TREE_TYPE (init), init, term);
+ }
- /* Do we need the below two lines? */
/* Let `cp_finish_decl' know that this initializer is ok. */
DECL_INITIAL (decl) = init;
decl = pushdecl (decl);
+
cp_finish_decl (decl, init, NULL_TREE, 0, LOOKUP_ONLYCONVERTING);
}
else
{
push_eh_cleanup ();
+ /* Create a binding level for the parm. */
+ pushlevel (0);
+ expand_start_bindings (0);
+
/* Fall into the catch all section. */
}
- emit_move_insn (DECL_RTL (saved_in_catch), const1_rtx);
-
- /* If we are not doing setjmp/longjmp EH, because we are reordered
- out of line, we arrange to rethrow in the outer context so as to
- skip through the terminate region we are nested in, should we
- encounter an exception in the catch handler.
-
- If we are doing setjmp/longjmp EH, we need to skip through the EH
- object cleanup region. This isn't quite right, as we really need
- to clean the object up, but we cannot do that until we track
- multiple EH objects.
-
- Matches the end in expand_end_catch_block. */
- expand_eh_region_start ();
+ init = build_modify_expr (get_eh_caught (), NOP_EXPR, integer_one_node);
+ expand_expr (init, const0_rtx, VOIDmode, EXPAND_NORMAL);
emit_line_note (input_filename, lineno);
}
@@ -546,43 +682,39 @@ expand_start_catch_block (declspecs, declarator)
void
expand_end_catch_block ()
{
- rtx start_region_label_rtx;
- rtx end_region_label_rtx;
- tree decls, t;
-
if (! doing_eh (1))
return;
- t = make_node (RTL_EXPR);
- TREE_TYPE (t) = void_type_node;
- RTL_EXPR_RTL (t) = const0_rtx;
- TREE_SIDE_EFFECTS (t) = 1;
- start_sequence_for_rtl_expr (t);
+ /* Cleanup the EH parameter. */
+ expand_end_bindings (getdecls (), kept_level_p (), 0);
+ poplevel (kept_level_p (), 1, 0);
+
+ /* Cleanup the EH object. */
+ expand_end_bindings (getdecls (), kept_level_p (), 0);
+ poplevel (kept_level_p (), 1, 0);
- if (exceptions_via_longjmp)
- {
- /* If we are doing setjmp/longjmp EH, we need to skip through
- the EH object cleanup region. This isn't quite right, as we
- really need to clean the object up, but we cannot do that
- until we track multiple EH objects. */
-
- emit_library_call (sjpopnthrow_libfunc, 0, VOIDmode, 0);
- emit_barrier ();
- }
- else
+ if (! exceptions_via_longjmp)
{
/* If we are not doing setjmp/longjmp EH, we need an extra
region around the whole catch block to skip through the
terminate region we are nested in. */
- expand_internal_throw (DECL_RTL (top_label_entry (&caught_return_label_stack)));
- }
+ tree t = make_node (RTL_EXPR);
+ TREE_TYPE (t) = void_type_node;
+ RTL_EXPR_RTL (t) = const0_rtx;
+ TREE_SIDE_EFFECTS (t) = 1;
+ do_pending_stack_adjust ();
+ start_sequence_for_rtl_expr (t);
- RTL_EXPR_SEQUENCE (t) = get_insns ();
- end_sequence ();
+ expand_internal_throw (outer_context_label_stack->u.rlabel);
- /* Matches the start in expand_start_catch_block. */
- expand_eh_region_end (t);
+ do_pending_stack_adjust ();
+ RTL_EXPR_SEQUENCE (t) = get_insns ();
+ end_sequence ();
+
+ /* For the rethrow region. */
+ expand_eh_region_end (t);
+ }
/* Fall to outside the try statement when done executing handler and
we fall off end of handler. This is jump Lresume in the
@@ -591,10 +723,6 @@ expand_end_catch_block ()
expand_leftover_cleanups ();
- /* Cleanup the EH parameter. */
- expand_end_bindings (getdecls (), kept_level_p (), 0);
- poplevel (kept_level_p (), 1, 0);
-
/* label we emit to jump to if this catch block didn't match. */
/* This the closing } in the `if (eq) {' of the documentation. */
emit_label (pop_label_entry (&false_label_stack));
@@ -607,14 +735,15 @@ do_unwind (inner_throw_label)
rtx inner_throw_label;
{
#if defined (SPARC_STACK_ALIGN) /* was sparc */
- /* This doesn't work for the flat model sparc, I bet. */
+ /* This doesn't work for the flat model sparc, nor does it need to
+ as the default unwinder is only used to unwind non-flat frames. */
tree fcall;
tree params;
rtx next_pc;
rtx temp;
/* Call to __builtin_return_address. */
- params = tree_cons (NULL_TREE, integer_zero_node, NULL_TREE);
+ params = expr_tree_cons (NULL_TREE, integer_zero_node, NULL_TREE);
fcall = build_function_call (BuiltinReturnAddress, params);
next_pc = expand_expr (fcall, NULL_RTX, Pmode, 0);
/* In the return, the new pc is pc+8, as the value coming in is
@@ -667,14 +796,14 @@ do_unwind (inner_throw_label)
#if 0
/* I would like to do this here, but the move below doesn't seem to work. */
/* Call to __builtin_return_address. */
- params = tree_cons (NULL_TREE, integer_zero_node, NULL_TREE);
+ params = expr_tree_cons (NULL_TREE, integer_zero_node, NULL_TREE);
fcall = build_function_call (BuiltinReturnAddress, params);
next_pc = expand_expr (fcall, NULL_RTX, Pmode, 0);
emit_move_insn (next_pc, inner_throw_label);
/* So, for now, just pass throw label to stack unwinder. */
#endif
- params = tree_cons (NULL_TREE, make_tree (ptr_type_node,
+ params = expr_tree_cons (NULL_TREE, make_tree (ptr_type_node,
inner_throw_label), NULL_TREE);
do_function_call (Unwind, params, NULL_TREE);
@@ -702,6 +831,7 @@ do_unwind (inner_throw_label)
void
expand_builtin_throw ()
{
+#ifndef DWARF2_UNWIND_INFO
tree fcall;
tree params;
rtx handler;
@@ -741,13 +871,15 @@ expand_builtin_throw ()
/* These two can be frontend specific. If wanted, they can go in
expand_throw. */
/* Do we have a valid object we are throwing? */
- emit_cmp_insn (DECL_RTL (saved_throw_type), const0_rtx, EQ, NULL_RTX,
- GET_MODE (DECL_RTL (saved_throw_type)), 0, 0);
+ t = call_eh_info ();
+ emit_cmp_insn (expand_expr (t, NULL_RTX, Pmode, 0),
+ const0_rtx, EQ, NULL_RTX,
+ GET_MODE (DECL_RTL (t)), 0, 0);
emit_jump_insn (gen_beq (gotta_call_terminate));
/* search for an exception handler for the saved_pc */
handler = do_function_call (FirstExceptionMatch,
- tree_cons (NULL_TREE, saved_pc,
+ expr_tree_cons (NULL_TREE, saved_pc,
NULL_TREE),
ptr_type_node);
assemble_external (TREE_OPERAND (FirstExceptionMatch, 0));
@@ -795,7 +927,7 @@ expand_builtin_throw ()
emit_move_insn (next_pc,
gen_rtx (MEM, Pmode, plus_constant (hard_frame_pointer_rtx, -4)));
#else
- params = tree_cons (NULL_TREE, integer_zero_node, NULL_TREE);
+ params = expr_tree_cons (NULL_TREE, integer_zero_node, NULL_TREE);
fcall = build_function_call (BuiltinReturnAddress, params);
next_pc = expand_expr (fcall, NULL_RTX, Pmode, 0);
#endif
@@ -838,7 +970,8 @@ expand_builtin_throw ()
#ifdef DONT_ACCESS_GBLS_AFTER_EPILOGUE
if (DONT_ACCESS_GBLS_AFTER_EPILOGUE)
{
- t = make_tree (build_pointer_type (TREE_TYPE (empty_fndecl)),
+ t = build_function_type (void_type_node, void_list_node);
+ t = make_tree (build_pointer_type (t),
hard_function_value (ptr_type_node,
NULL_TREE));
t = build_function_call (t, NULL_TREE);
@@ -851,7 +984,6 @@ expand_builtin_throw ()
/* no it didn't --> therefore we need to call terminate */
emit_label (gotta_call_terminate);
do_function_call (Terminate, NULL_TREE, NULL_TREE);
- assemble_external (TREE_OPERAND (Terminate, 0));
{
rtx ret_val, x;
@@ -895,6 +1027,7 @@ expand_builtin_throw ()
pop_momentary ();
finish_function (lineno, 0, 0);
+#endif /* DWARF2_UNWIND_INFO */
}
@@ -919,6 +1052,7 @@ expand_end_eh_spec (raises)
TREE_TYPE (expr) = void_type_node;
RTL_EXPR_RTL (expr) = const0_rtx;
TREE_SIDE_EFFECTS (expr) = 1;
+ do_pending_stack_adjust ();
start_sequence_for_rtl_expr (expr);
cont = gen_label_rtx ();
emit_move_insn (ret, gen_rtx (LABEL_REF, Pmode, cont));
@@ -926,8 +1060,8 @@ expand_end_eh_spec (raises)
emit_label (cont);
jumpif (make_tree (integer_type_node, flag), end);
do_function_call (Terminate, NULL_TREE, NULL_TREE);
- assemble_external (TREE_OPERAND (Terminate, 0));
emit_barrier ();
+ do_pending_stack_adjust ();
RTL_EXPR_SEQUENCE (expr) = get_insns ();
end_sequence ();
@@ -937,6 +1071,7 @@ expand_end_eh_spec (raises)
TREE_TYPE (expr) = void_type_node;
RTL_EXPR_RTL (expr) = const0_rtx;
TREE_SIDE_EFFECTS (expr) = 1;
+ do_pending_stack_adjust ();
start_sequence_for_rtl_expr (expr);
cont = gen_label_rtx ();
@@ -954,6 +1089,9 @@ expand_end_eh_spec (raises)
emit_label (check);
emit_move_insn (flag, const1_rtx);
cont = gen_label_rtx ();
+
+ push_eh_info ();
+
while (raises)
{
tree exp;
@@ -962,12 +1100,12 @@ expand_end_eh_spec (raises)
if (match_type)
{
/* check TREE_VALUE (raises) here */
- exp = saved_throw_value;
- exp = tree_cons (NULL_TREE,
+ exp = get_eh_value ();
+ exp = expr_tree_cons (NULL_TREE,
build_eh_type_type (match_type),
- tree_cons (NULL_TREE,
- saved_throw_type,
- tree_cons (NULL_TREE, exp, NULL_TREE)));
+ expr_tree_cons (NULL_TREE,
+ get_eh_type (),
+ expr_tree_cons (NULL_TREE, exp, NULL_TREE)));
exp = build_function_call (CatchMatch, exp);
assemble_external (TREE_OPERAND (CatchMatch, 0));
@@ -981,6 +1119,7 @@ expand_end_eh_spec (raises)
emit_indirect_jump (ret);
emit_label (end);
+ do_pending_stack_adjust ();
RTL_EXPR_SEQUENCE (expr) = get_insns ();
end_sequence ();
@@ -994,8 +1133,10 @@ expand_end_eh_spec (raises)
void
expand_exception_blocks ()
{
+ do_pending_stack_adjust ();
push_to_sequence (catch_clauses);
expand_leftover_cleanups ();
+ do_pending_stack_adjust ();
catch_clauses = get_insns ();
end_sequence ();
@@ -1006,8 +1147,10 @@ expand_exception_blocks ()
if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
{
expand_end_eh_spec (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)));
+ do_pending_stack_adjust ();
push_to_sequence (catch_clauses);
expand_leftover_cleanups ();
+ do_pending_stack_adjust ();
catch_clauses = get_insns ();
end_sequence ();
}
@@ -1022,9 +1165,6 @@ expand_exception_blocks ()
the setjmp/longjmp approach. */
if (exceptions_via_longjmp == 0)
{
- /* Is this necessary? */
- assemble_external (TREE_OPERAND (Terminate, 0));
-
expand_eh_region_start ();
}
@@ -1032,7 +1172,7 @@ expand_exception_blocks ()
catch_clauses = NULL_RTX;
if (exceptions_via_longjmp == 0)
- expand_eh_region_end (TerminateFunctionCall);
+ expand_eh_region_end (build_function_call (Terminate, NULL_TREE));
expand_leftover_cleanups ();
@@ -1058,7 +1198,7 @@ start_anon_func ()
interface_unknown = 1;
params = void_list_node;
- /* tcf stands for throw clean funciton. */
+ /* tcf stands for throw clean function. */
sprintf (name, "__tcf_%d", counter++);
t = make_call_declarator (get_identifier (name), params, NULL_TREE,
NULL_TREE);
@@ -1107,6 +1247,8 @@ expand_throw (exp)
tree exp;
{
rtx label;
+ tree fn;
+ static tree cleanup_type;
if (! doing_eh (1))
return;
@@ -1114,12 +1256,26 @@ expand_throw (exp)
if (exp)
{
tree throw_type;
- tree cleanup = empty_fndecl, e;
+ tree cleanup = NULL_TREE, e;
/* throw expression */
/* First, decay it. */
exp = decay_conversion (exp);
+ /* cleanup_type is void (*)(void *, int),
+ the internal type of a destructor. */
+ if (cleanup_type == NULL_TREE)
+ {
+ push_obstacks_nochange ();
+ end_temporary_allocation ();
+ cleanup_type = build_pointer_type
+ (build_function_type
+ (void_type_node, tree_cons
+ (NULL_TREE, ptr_type_node, tree_cons
+ (NULL_TREE, integer_type_node, void_list_node))));
+ pop_obstacks ();
+ }
+
if (TREE_CODE (TREE_TYPE (exp)) == POINTER_TYPE)
{
throw_type = build_eh_type (exp);
@@ -1131,7 +1287,7 @@ expand_throw (exp)
/* Make a copy of the thrown object. WP 15.1.5 */
exp = build_new (NULL_TREE, TREE_TYPE (exp),
- build_tree_list (NULL_TREE, exp),
+ build_expr_list (NULL_TREE, exp),
0);
if (exp == error_mark_node)
@@ -1140,47 +1296,84 @@ expand_throw (exp)
object = build_indirect_ref (exp, NULL_PTR);
throw_type = build_eh_type (object);
- start_sequence ();
- object = build_reinterpret_cast (TREE_TYPE (exp), saved_throw_value);
- object = build_indirect_ref (object, NULL_PTR);
- cleanup = maybe_build_cleanup_and_delete (object);
- end_sequence ();
-
- if (cleanup)
+ if (TYPE_HAS_DESTRUCTOR (TREE_TYPE (object)))
{
- cleanup = start_anon_func ();
-
- expand_expr (maybe_build_cleanup_and_delete (object),
- const0_rtx, VOIDmode, 0);
-
- end_anon_func ();
-
+ cleanup = lookup_fnfields (TYPE_BINFO (TREE_TYPE (object)),
+ dtor_identifier, 0);
+ cleanup = TREE_VALUE (cleanup);
+ mark_used (cleanup);
mark_addressable (cleanup);
- }
- else
- {
- cleanup = empty_fndecl;
+ /* Pretend it's a normal function. */
+ cleanup = build1 (ADDR_EXPR, cleanup_type, cleanup);
}
}
- if (cleanup == empty_fndecl)
- assemble_external (empty_fndecl);
-
- e = build_modify_expr (saved_throw_type, NOP_EXPR, throw_type);
- expand_expr (e, const0_rtx, VOIDmode, 0);
+ if (cleanup == NULL_TREE)
+ {
+ cleanup = build_int_2 (0, 0);
+ TREE_TYPE (cleanup) = cleanup_type;
+ }
- e = build_modify_expr (saved_throw_value, NOP_EXPR, exp);
- e = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (e), e);
- expand_expr (e, const0_rtx, VOIDmode, 0);
+ fn = get_identifier ("__cp_push_exception");
+ if (IDENTIFIER_GLOBAL_VALUE (fn))
+ fn = IDENTIFIER_GLOBAL_VALUE (fn);
+ else
+ {
+ /* Declare __cp_push_exception (void*, void*, void (*)(void*, int)),
+ as defined in exception.cc. */
+ tree tmp;
+ push_obstacks_nochange ();
+ end_temporary_allocation ();
+ tmp = tree_cons
+ (NULL_TREE, ptr_type_node, tree_cons
+ (NULL_TREE, ptr_type_node, tree_cons
+ (NULL_TREE, cleanup_type, void_list_node)));
+ fn = build_lang_decl (FUNCTION_DECL, fn,
+ build_function_type (void_type_node, tmp));
+ DECL_EXTERNAL (fn) = 1;
+ TREE_PUBLIC (fn) = 1;
+ DECL_ARTIFICIAL (fn) = 1;
+ pushdecl_top_level (fn);
+ make_function_rtl (fn);
+ assemble_external (fn);
+ pop_obstacks ();
+ }
- cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
- cleanup = build_modify_expr (saved_cleanup, NOP_EXPR, cleanup);
- expand_expr (cleanup, const0_rtx, VOIDmode, 0);
+ /* The throw expression is a full-expression. */
+ exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
+ e = expr_tree_cons (NULL_TREE, exp, expr_tree_cons
+ (NULL_TREE, throw_type, expr_tree_cons
+ (NULL_TREE, cleanup, NULL_TREE)));
+ e = build_function_call (fn, e);
+ expand_expr (e, const0_rtx, VOIDmode, 0);
}
else
{
- /* rethrow current exception */
- /* This part is easy, as we don't have to do anything else. */
+ /* rethrow current exception; note that it's no longer caught. */
+
+ tree fn = get_identifier ("__uncatch_exception");
+ if (IDENTIFIER_GLOBAL_VALUE (fn))
+ fn = IDENTIFIER_GLOBAL_VALUE (fn);
+ else
+ {
+ /* Declare void __uncatch_exception (void)
+ as defined in exception.cc. */
+ push_obstacks_nochange ();
+ end_temporary_allocation ();
+ fn = build_lang_decl (FUNCTION_DECL, fn,
+ build_function_type (void_type_node,
+ void_list_node));
+ DECL_EXTERNAL (fn) = 1;
+ TREE_PUBLIC (fn) = 1;
+ DECL_ARTIFICIAL (fn) = 1;
+ pushdecl_top_level (fn);
+ make_function_rtl (fn);
+ assemble_external (fn);
+ pop_obstacks ();
+ }
+
+ exp = build_function_call (fn, NULL_TREE);
+ expand_expr (exp, const0_rtx, VOIDmode, EXPAND_NORMAL);
}
if (exceptions_via_longjmp)
diff --git a/gcc/cp/exception.cc b/gcc/cp/exception.cc
index 5d9503fac54..088b1e24e3b 100644
--- a/gcc/cp/exception.cc
+++ b/gcc/cp/exception.cc
@@ -1,5 +1,5 @@
// Functions for Exception Support for -*- C++ -*-
-// Copyright (C) 1994, 1995, 1996 Free Software Foundation
+// Copyright (C) 1994, 1995, 1996, 1998 Free Software Foundation
// This file is part of GNU CC.
@@ -33,7 +33,7 @@
/* Define terminate, unexpected, set_terminate, set_unexpected as
well as the default terminate func and default unexpected func. */
-extern terminate_handler __terminate_func;
+extern terminate_handler __terminate_func __attribute__((__noreturn__));
void
terminate ()
@@ -73,6 +73,103 @@ unexpected ()
__unexpected_func ();
}
+/* C++-specific state about the current exception.
+ This must match init_exception_processing().
+
+ Note that handlers and caught are not redundant; when rethrown, an
+ exception can have multiple active handlers and still be considered
+ uncaught. */
+
+struct cp_eh_info
+{
+ void *value;
+ void *type;
+ void (*cleanup)(void *, int);
+ bool caught;
+ cp_eh_info *next;
+ long handlers;
+};
+
+/* Language-specific EH info pointer, defined in libgcc2. */
+
+extern cp_eh_info *__eh_info; // actually void*
+
+/* Is P the type_info node for a pointer of some kind? */
+
+extern bool __is_pointer (void *);
+
+/* Compiler hook to return a pointer to the info for the current exception.
+ Used by get_eh_info (). */
+
+extern "C" cp_eh_info *
+__cp_exception_info (void)
+{
+ return __eh_info;
+}
+
+/* Compiler hook to push a new exception onto the stack.
+ Used by expand_throw(). */
+
+extern "C" void
+__cp_push_exception (void *value, void *type, void (*cleanup)(void *, int))
+{
+ cp_eh_info *p = new cp_eh_info;
+ p->value = value;
+ p->type = type;
+ p->cleanup = cleanup;
+ p->handlers = 0;
+ p->caught = false;
+ p->next = __eh_info;
+ __eh_info = p;
+}
+
+/* Compiler hook to pop an exception that has been finalized. Used by
+ push_eh_cleanup(). P is the info for the exception caught by the
+ current catch block. */
+
+extern "C" void
+__cp_pop_exception (cp_eh_info *p)
+{
+ cp_eh_info **q = &__eh_info;
+
+ --p->handlers;
+
+ /* Don't really pop if there are still active handlers for our exception,
+ or if our exception is being rethrown (i.e. if the active exception is
+ our exception and it is uncaught). */
+ if (p->handlers != 0
+ || (p == *q && !p->caught))
+ return;
+
+ for (; *q; q = &((*q)->next))
+ if (*q == p)
+ break;
+
+ if (! *q)
+ terminate ();
+
+ *q = p->next;
+
+ if (p->cleanup)
+ /* 3 is a magic value for destructors; see build_delete(). */
+ p->cleanup (p->value, 3);
+ else if (__is_pointer (p->type))
+ /* do nothing; pointers are passed directly in p->value. */;
+ else
+ delete p->value;
+
+ delete p;
+}
+
+extern "C" void
+__uncatch_exception (void)
+{
+ cp_eh_info *p = __cp_exception_info ();
+ if (p)
+ p->caught = false;
+ /* otherwise __throw will call terminate(); don't crash here. */
+}
+
extern "C" void
__throw_bad_cast (void)
{
@@ -85,18 +182,13 @@ __throw_bad_typeid (void)
throw bad_typeid ();
}
-extern "C" void
-__throw_bad_exception (void)
-{
- throw bad_exception ();
-}
+/* Has the current exception been caught? */
bool
uncaught_exception ()
{
- extern void *__eh_type;
- extern bool __eh_in_catch;
- return __eh_type && ! __eh_in_catch;
+ cp_eh_info *p = __cp_exception_info ();
+ return p && ! p->caught;
}
const char * exception::
diff --git a/gcc/cp/expr.c b/gcc/cp/expr.c
index 56db108ccde..2162b0d7cf0 100644
--- a/gcc/cp/expr.c
+++ b/gcc/cp/expr.c
@@ -21,15 +21,21 @@ Boston, MA 02111-1307, USA. */
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "tree.h"
#include "flags.h"
#include "expr.h"
#include "cp-tree.h"
+static tree extract_aggr_init PROTO((tree, tree));
+static tree extract_scalar_init PROTO((tree, tree));
+static rtx cplus_expand_expr PROTO((tree, rtx, enum machine_mode,
+ enum expand_modifier));
+
/* Hook used by expand_expr to expand language-specific tree codes. */
-rtx
+static rtx
cplus_expand_expr (exp, target, tmode, modifier)
tree exp;
rtx target;
@@ -106,7 +112,7 @@ cplus_expand_expr (exp, target, tmode, modifier)
parameter value. */
mark_addressable (slot);
if (TREE_PERMANENT (args))
- args = tree_cons (0, build1 (ADDR_EXPR, type, slot),
+ args = expr_tree_cons (0, build1 (ADDR_EXPR, type, slot),
TREE_CHAIN (args));
else
TREE_VALUE (args) = build1 (ADDR_EXPR, type, slot);
diff --git a/gcc/cp/friend.c b/gcc/cp/friend.c
index 99295e65b9c..28c0bb44a68 100644
--- a/gcc/cp/friend.c
+++ b/gcc/cp/friend.c
@@ -19,12 +19,20 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "config.h"
+#include <stdio.h>
#include "tree.h"
#include "rtl.h"
#include "cp-tree.h"
#include "flags.h"
#include "output.h"
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+static void add_friend PROTO((tree, tree));
+static void add_friends PROTO((tree, tree, tree));
+
/* Friend data structures:
Lists of friend functions come from TYPE_DECL nodes. Since all
@@ -372,9 +380,27 @@ do_friend (ctype, declarator, decl, parmdecls, flags, quals, funcdef_flag)
if (funcdef_flag)
DECL_CLASS_CONTEXT (decl) = current_class_type;
- /* We can call pushdecl here, because the TREE_CHAIN of this
- FUNCTION_DECL is not needed for other purposes. */
- decl = pushdecl (decl);
+ if (! DECL_USE_TEMPLATE (decl))
+ {
+ /* We can call pushdecl here, because the TREE_CHAIN of this
+ FUNCTION_DECL is not needed for other purposes. Don't do this
+ for a template instantiation. */
+ decl = pushdecl (decl);
+
+ if (! funcdef_flag && ! flag_guiding_decls
+ && current_template_parms && uses_template_parms (decl))
+ {
+ static int explained;
+ cp_warning ("friend declaration `%#D'", decl);
+ warning (" will not be treated as a template instantiation");
+ if (! explained)
+ {
+ warning (" unless you compile with -fguiding-decls");
+ warning (" or add <> after the function name");
+ explained = 1;
+ }
+ }
+ }
make_decl_rtl (decl, NULL_PTR, 1);
add_friend (current_class_type, decl);
diff --git a/gcc/cp/g++FAQ.texi b/gcc/cp/g++FAQ.texi
new file mode 100644
index 00000000000..f0064f346b1
--- /dev/null
+++ b/gcc/cp/g++FAQ.texi
@@ -0,0 +1,2158 @@
+\input texinfo.tex @c -*-texinfo-*-
+@c %**start of header
+@setfilename g++FAQ.info
+@settitle Frequently asked questions about the GNU C++ compiler
+@setchapternewpage off
+@c version: @(#)g++FAQ.texi 1.56 09/15/97
+@c %**end of header
+
+@iftex
+@finalout
+@end iftex
+@titlepage
+@title G++ FAQ
+@subtitle Frequently asked questions about the GNU C++ compiler
+@subtitle September 14, 1997
+@sp 1
+@author Joe Buck
+@page
+@end titlepage
+
+@ifinfo
+@node Top, basics, (dir), (dir)
+@top
+@unnumbered FAQ for g++ and libg++, by Joe Buck (jbuck@@synopsys.com)
+@end ifinfo
+
+@cindex FAQ for g++, latest version
+@cindex Archive site for FAQ lists
+@cindex rtfm.mit.edu
+@cindex Joe Buck <jbuck@@synopsys.com>
+@cindex FAQ for C++
+
+This is a list of frequently asked questions (FAQ) for g++ users; thanks to
+all those who sent suggestions for improvements. Thanks to Marcus Speh
+for doing the index. A hypertext version is available on the World Wide
+Web at @file{http://www.cygnus.com/misc/g++FAQ_toc.html}.
+
+This document has just been reorganized a bit. There is some new
+information about upcoming g++ releases and egcs; more needs to be done
+but that will need to wait for next time. A diff would look misleadingly
+large, since I blew away and rebuilt the texinfo menus.
+
+Please send updates and corrections to the FAQ to
+@code{jbuck@@synopsys.com}. Please do @emph{not} use me as a resource
+to get your questions answered; that's what @file{gnu.g++.help} is for and I
+don't have the time to support the net's use of g++.
+
+Many FAQs, including this one, are available on the archive site
+``rtfm.mit.edu''; see @*
+@file{ftp://rtfm.mit.edu/pub/usenet/news.answers}.
+This FAQ may be found in the subdirectory g++-FAQ.
+
+@cindex Marshall Cline
+@cindex comp.lang.c++
+@cindex C++ FAQ
+This FAQ is intended to supplement, not replace, Marshall Cline's
+excellent FAQ for the C++ language and for the newsgroup
+@file{comp.lang.c++}. Especially if g++ is the first C++
+compiler you've ever used, the question ``How do I do <X> with g++?''
+is probably really ``How do I do <X> in C++?''.
+You can find this FAQ at
+@file{ftp://rtfm.mit.edu/pub/usenet/comp.lang.c++},
+or in HTML form at @file{http://www.cerfnet.com/~mpcline/On-Line-C++-FAQs/}.
+
+@menu
+* basics:: What is g++? How do I get it?
+* installation:: How to install, installation problems
+* evolution:: The Evolution of g++
+* User Problems:: Commonly reported problems and bugs
+* legalities:: Lawyer stuff, GPL, LGPL, etc.
+* index:: Index of terms
+
+ --- The Detailed Node Listing ---
+
+The basics: what is g++?
+
+* latest versions::
+* g++ for Unix::
+* g++ for HP::
+* g++ for Solaris 2.x::
+* g++ for other platforms::
+* 1.x vs 2.x versions::
+
+Installation Issues and Problems
+
+* gcc-2 + g++-1::
+* what else do I need?::
+* use GNU linker?::
+* Use GNU assembler?::
+* shared libraries::
+* repository::
+* repo bugs::
+* Use GNU C library?::
+* Global constructor problems::
+* Strange assembler errors::
+* Other problems building libg++::
+* More size_t problems::
+* Rebuild libg++?::
+* co-existing versions::
+* Installing on Linux::
+* Linux Slackware 3.0::
+
+The Evolution of g++
+
+* version 2.7.x::
+* libstdc++::
+* new work::
+* egcs::
+* When?::
+
+User Problems
+
+* missing virtual table::
+* for scope::
+* const constructor::
+* unused parameter warnings::
+* jump crosses initialization::
+* Demangler::
+* static data members::
+* internal compiler error::
+* bug reports::
+* porting to g++::
+* name mangling::
+* problems linking with other libraries::
+* documentation::
+* templates::
+* undefined templates::
+* redundant templates::
+* Standard Template Library::
+* STL and string::
+* exceptions::
+* namespaces::
+* agreement with standards::
+* compiling standard libraries::
+* debugging on SVR4 systems::
+* debugging problems on Solaris::
+* X11 conflicts with libg++::
+* assignment to streams::
+@end menu
+
+@node basics, installation, Top, Top
+@chapter The basics: what is g++?
+
+@cindex Free Software Foundation
+@cindex GNU Public License
+@cindex GPL
+
+g++ is the traditional nickname of GNU C++, a freely redistributable
+C++ compiler produced by the Free Software Foundation plus dozens of
+skilled volunteers. I say ``traditional nickname'' because the GNU
+compiler suite, gcc, bundles together compilers for C, Objective-C,
+and C++ in one package.
+
+While the source code to gcc/g++ can be downloaded for free,
+it is not public domain, but is protected by the GNU Public License,
+or GPL (@pxref{legalities}).
+
+@menu
+* latest versions::
+* g++ for Unix::
+* g++ for HP::
+* g++ for Solaris 2.x::
+* g++ for other platforms::
+* 1.x vs 2.x versions::
+@end menu
+
+@node latest versions, g++ for Unix, basics, basics
+@section What is the latest version of gcc, g++, and libg++?
+
+@cindex gcc/g++, version date
+The current version of gcc/g++ is 2.7.2.3, released August 20, 1997.
+Although that looks very recent, the only change is a minor patch to
+resolve a problem with Linux and the GNU C library; users not interested
+in that functionality have no reason to upgrade.
+
+The current version of libg++ is 2.7.2, released July 4, 1996.
+The last release of gcc/g++ with improvements to the C++ front end was
+2.7.2, released Nov. 25, 1995, nearly two years ago.
+
+I would strongly recommend that anyone using a g++ version earlier
+than 2.7.2 should upgrade if at all possible (@pxref{version 2.7.x}).
+
+For some non-Unix platforms, the latest port of gcc may be an earlier
+version (2.6.3, say). You'll need to use a version of libg++ that
+has the same first two digits as the compiler version, e.g. use libg++
+2.6.x (for the latest x you can find) with gcc version 2.6.3.
+
+The latest "1.x" version of gcc is 1.42, and the latest "1.x" version of
+g++ is 1.42.0.
+While gcc 1.42 is quite usable for C programs,
+I recommend against using g++ 1.x except in special circumstances
+(and I can't think of any such circumstances).
+
+@node g++ for Unix, g++ for HP, latest versions, basics
+@section How do I get a copy of g++ for Unix?
+
+First, you may already have it if you have gcc for your platform;
+g++ and gcc are combined now (as of gcc version 2.0).
+@cindex GNU gcc, version
+@cindex GNU g++ and gcc
+
+You can get g++ from a friend who has a copy, by anonymous FTP or
+UUCP, or by ordering a tape or CD-ROM from the Free Software
+Foundation.
+@cindex g++, ordering
+@cindex g++, getting a copy
+
+The Free Software Foundation is a nonprofit organization that
+distributes software and manuals to raise funds for more GNU
+development. Getting your copy from the FSF contributes directly to
+paying staff to develop GNU software. CD-ROMs cost $400 if an
+organization is buying, or $100 if an individual is buying. Tapes
+cost around $200 depending on media type. I recommend asking for
+version 2, not version 1, of g++.
+@cindex FSF [Free Software Foundation]
+@cindex GNU [GNU's not unix]
+
+For more information about ordering from the FSF, contact
+gnu@@prep.ai.mit.edu, phone (617) 542-5942 or anonymous ftp file
+@file{ftp://prep.ai.mit.edu/pub/gnu/GNUinfo/ORDERS} (you can
+also use one of the sites listed below if you can't get into ``prep'').
+
+@cindex FSF, contact <gnu@@prep.ai.mit.edu>
+
+Here is a list of anonymous FTP archive sites for GNU software.
+If no directory is given, look in @file{/pub/gnu}.
+
+@cindex GNUware, anonymous FTP sites
+
+@example
+ASIA: ftp.cs.titech.ac.jp, tron.um.u-tokyo.ac.jp:/pub/GNU/prep
+cair-archive.kaist.ac.kr, ftp.nectec.or.th:/pub/mirrors/gnu
+
+AUSTRALIA: archie.au:/gnu (archie.oz or archie.oz.au for ACSnet)
+
+AFRICA: ftp.sun.ac.za
+
+MIDDLE-EAST: ftp.technion.ac.il:/pub/unsupported/gnu
+
+EUROPE: irisa.irisa.fr, ftp.univ-lyon1.fr,
+ftp.mcc.ac.uk, unix.hensa.ac.uk:/mirrors/uunet/systems/gnu,
+src.doc.ic.ac.uk:/gnu, ftp.ieunet.ie, ftp.eunet.ch,
+nic.switch.ch:/mirror/gnu, ftp.informatik.rwth-aachen.de,
+ftp.informatik.tu-muenchen.de, ftp.win.tue.nl, ftp.nl.net,
+ftp.etsimo.uniovi.es, ftp.funet.fi, ftp.denet.dk,
+ftp.stacken.kth.se, isy.liu.se, ftp.luth.se:/pub/unix/gnu,
+ftp.sunet.se, archive.eu.net
+
+SOUTH AMERICA: ftp.inf.utfsm.cl, ftp.unicamp.br
+
+WESTERN CANADA: ftp.cs.ubc.ca:/mirror2/gnu
+
+USA: wuarchive.wustl.edu:/systems/gnu, labrea.stanford.edu,
+ftp.digex.net, ftp.kpc.com:/pub/mirror/gnu, f.ms.uky.edu:/pub3/gnu,
+jaguar.utah.edu:/gnustuff, ftp.hawaii.edu:/mirrors/gnu,
+uiarchive.cso.uiuc.edu, ftp.cs.columbia.edu:/archives/gnu/prep,
+gatekeeper.dec.com:/pub/GNU, ftp.uu.net:/systems/gnu
+@end example
+
+The ``official site'' is prep.ai.mit.edu, but your transfer will probably
+go faster if you use one of the above machines.
+
+@cindex gzip
+Most GNU utilities are compressed with ``gzip'', the GNU compression
+utility. All GNU archive sites should have a copy of this program,
+which you will need to uncompress the distributions.
+
+@cindex libg++
+Don't forget to retrieve libg++ as well!
+
+@node g++ for HP, g++ for Solaris 2.x, g++ for Unix, basics
+@section Getting gcc/g++ for the HP Precision Architecture
+
+@cindex HP Precision Architecture
+@cindex Hewlett-Packard
+@cindex GNU GAS
+@cindex GNU gdb
+
+If you use the HP Precision Architecture (HP-9000/7xx and HP-9000/8xx)
+and you want to use debugging, you'll need to use the GNU assembler, GAS
+(version 2.3 or later). If you build from source, you must tell the
+configure program that you are using GAS or you won't get debugging
+support. A non-standard debug format is used, since until recently HP
+considered their debug format a trade secret. Thanks to the work of
+lots of good folks both inside and outside HP, the company has seen the
+error of its ways and has now released the required information. The
+team at the University of Utah that did the gcc port now has code that
+understands the native HP format.
+
+There are binaries for GNU tools in
+@file{ftp://jaguar.cs.utah.edu/dist/},
+but these are older versions.
+
+Jeff Law has left the University of Utah, so the Utah prebuilt
+binaries may be discontinued.
+
+@node g++ for Solaris 2.x, g++ for other platforms, g++ for HP, basics
+@section Getting gcc/g++ binaries for Solaris 2.x
+
+``Sun took the C compiler out of Solaris 2.x. Am I stuck?''
+
+@cindex Solaris
+@cindex gcc/g++ binaries for Solaris
+
+You'll need to get prebuilt binaries from someone.
+
+It used to be that you could get GCC binaries from prep.ai.mit.edu;
+these are no longer there.
+
+@cindex Solaris pkgadd utility
+The WWW site @file{http://smc.vnet.net/solaris_2.5.html}
+contains various
+GNU and freeware programs for Solaris2.5 running on the sparc. These are
+packaged to enable easy installation using the Solaris ``pkgadd'' utility.
+These include GNU emacs, gcc, gdb, perl, and others. These versions
+are more recent than the binaries at ``prep'' (gcc 2.7.2 and libg++
+2.7.1 are there).
+
+@node g++ for other platforms, 1.x vs 2.x versions, g++ for Solaris 2.x, basics
+@section How do I get a copy of g++ for (some other platform)?
+
+@cindex Windows NT support
+As of gcc-2.7.x, there is Windows NT support in gcc. Some special
+utilities are required. See the INSTALL file from the distribution.
+If you're interested in GNU tools on Windows NT, see
+@file{http://www.cygnus.com/misc/gnu-win32/} on the WWW, or the
+anonymous FTP directory
+@file{ftp://ftp.cygnus.com/pub/gnu-win32/}.
+
+@cindex VMS support
+@cindex VAX
+@cindex VMS, g++/libg++ precompiled
+
+The standard gcc/g++ distribution includes VMS support for the Vax.
+Since the FSF people don't use VMS, it's likely to be somewhat less
+solid than the Unix version. Precompiled copies of g++ and libg++ in
+VMS-installable form for the Vax are available by FTP from
+@file{ftp://mango.rsmas.miami.edu/pub/VMS-gcc/}.
+
+@cindex OpenVMS/Alpha
+Klaus Kaempf (kkaempf@@progis.de)
+has done a port to OpenVMS for the Alpha; this is not yet a
+part of the official gcc/g++.
+The port includes g++ and all libraries from the libg++ distribution. See
+@file{http://www.progis.de} for more details.
+
+@cindex MS-DOS support
+@cindex Delorie's gcc/g++
+@cindex DJGPP
+@cindex EMX
+There are two different versions of gcc/g++ for MS-DOS: EMX and DJGPP.
+EMX also works for OS/2 and is described later.
+DJGPP is DJ Delorie's port. It can be found on many FTP archive
+sites; try
+@file{ftp://ftp.coast.net/SimTel/vendors/djgpp/}
+or, for a complete list, see
+@file{http://www.delorie.com/djgpp/getting.html}.
+
+
+The latest version of DJGPP is 2.00. See
+@file{http://www.delorie.com/djgpp/v2/} for information on this version.
+
+FSF sells floppies with DJGPP on them; see above for ordering software
+from the FSF.
+
+DJGPP has its own newsgroup: @file{comp.os.msdos.djgpp}.
+
+@cindex Amiga support
+Development and porting efforts for GNU tools, including gcc/g++, for
+the Amiga are maintained by an initiative named ADE (Amiga Developers
+Environment. More information about ADE is available at
+@file{http://www.ninemoons.com/}.
+
+For more information on Amiga ports of gcc/g++, retrieve the file
+@file{ftp://prep.ai.mit.edu/pub/gnu/MicrosPorts/Amiga}.
+
+@cindex Atari ST support
+A port of gcc to the Atari ST can be found at @*
+@file{ftp://atari.archive.umich.edu/atari/Gnustuff/Tos}
+along with many
+other GNU programs. This version is usually the same as the latest FSF
+release. See the ``Software FAQ'' for the Usenet group
+@file{comp.sys.atari.st} for more information.
+
+@cindex EMX port
+@cindex OS/2 support
+
+EMX is a port of gcc to OS/2; it can also be used on MS-DOS. In addition to
+the compiler port, the EMX port's C library attempts to provide a
+Unix-like environment. For more information ask around on
+@file{comp.os.os2.programmer.porting}. Version 0.9c, based on gcc-2.7.2.1,
+was released in
+November 1996. It is available by FTP and the WWW from, among other
+places
+
+@example
+@file{http://www.os2ss.com/unix/emx09c/}
+@file{ftp://ftp.cdrom.com/pub/os2/emx09c/} (US)
+@file{ftp://ftp.leo.org/pub/comp/os/os2/leo/devtools/emx+gcc/} (Germany)
+@end example
+
+Eberhard Mattes did the EMX port. His address is
+mattes@@azu.informatik.uni-stuttgart.de.
+Read the FAQ file included with the distribution before harassing the author.
+
+@cindex Apple support
+@cindex Macintosh support
+
+I'm looking for more information on gcc/g++ support on the Apple
+Macintosh. Until recently, this FAQ did not provide such information,
+but FSF is no longer boycotting Apple as the League for Programming
+Freedom boycott has been dropped.
+
+Versions 1.37.1 and 2.3.3 of gcc were ported by Stan Shebs and are available
+at @*
+@file{ftp://ftp.cygnus.com/pub/mac}
+
+They are both interfaced to MPW.
+Stan is working on a version using the current (post-2.7) sources, contact
+him directly (shebs@@cygnus.com) for more information.
+
+@node 1.x vs 2.x versions, , g++ for other platforms, basics
+@section But I can only find g++-1.42!
+
+``I keep hearing people talking about g++ 2.7.2 (or some other number
+starting with 2), but the latest version I can find is g++ 1.42.
+Where is it?''
+
+@cindex Objective-C
+@cindex g++, version number
+As of gcc 2.0, C, C++, and Objective-C as well are all combined into a
+single distribution called gcc. If you get gcc you already have g++. The
+standard installation procedure for any gcc version 2 compiler will
+install the C++ compiler as well.
+
+One could argue that we shouldn't even refer to "g++-2.x.y" but it's a
+convention. It means ``the C++ compiler included with gcc-2.x.y.''
+
+@node installation, evolution, basics, Top
+@chapter Installation Issues and Problems
+
+@menu
+* gcc-2 + g++-1::
+* what else do I need?::
+* use GNU linker?::
+* Use GNU assembler?::
+* shared libraries::
+* repository::
+* repo bugs::
+* Use GNU C library?::
+* Global constructor problems::
+* Strange assembler errors::
+* Other problems building libg++::
+* More size_t problems::
+* Rebuild libg++?::
+* co-existing versions::
+* Installing on Linux::
+* Linux Slackware 3.0::
+@end menu
+
+@node gcc-2 + g++-1, what else do I need?, installation, installation
+@section I can't build g++ 1.x.y with gcc-2.x.y!
+
+``I obtained gcc-2.x.y and g++ 1.x.y and I'm trying to build it, but
+I'm having major problems. What's going on?''
+
+@cindex g++, building
+If you wish to build g++-1.42, you must obtain gcc-1.42 first. The
+installation instructions for g++ version 1 leave a lot to be desired,
+unfortunately, and I would recommend that, unless you have a special
+reason for needing the 1.x compiler, that C++ users use the latest
+g++-2.x version, as it
+is the version that is being actively maintained.
+
+@cindex g++, template support
+@cindex Templates
+@cindex ANSI draft standard
+There is no template support in g++-1.x, and it is generally much further
+away from the ANSI draft standard than g++-2.x is.
+
+@node what else do I need?, use GNU linker?, gcc-2 + g++-1, installation
+@section OK, I've obtained gcc; what else do I need?
+
+@cindex libg++
+First off, you'll want libg++ as you can do almost nothing without it
+(unless you replace it with some other class library).
+
+@cindex GNU GAS
+@cindex GNU GAS [assembler]
+Second, depending on your platform, you may need "GAS", the GNU assembler,
+or the GNU linker (see next question).
+
+@cindex GNU gdb
+Finally, while it is not required, you'll almost certainly want the GNU
+debugger, gdb. The latest version is
+4.16, released April 22, 1996.
+Other debuggers (like dbx, for example) will normally not be able to
+understand at least some of the debug information produced by g++.
+
+@node use GNU linker?, Use GNU assembler?, what else do I need?, installation
+@section Should I use the GNU linker, or should I use "collect"?
+
+@cindex Linker
+@cindex System VR3, linker
+@cindex System VR4, linker
+First off, for novices: special measures must be taken with C++ to arrange
+for the calling of constructors for global or static objects before the
+execution of your program, and for the calling of destructors at the end.
+(Exception: System VR3 and System VR4 linkers, Linux/ELF, and some other
+systems support user-defined
+segments; g++ on these systems requires neither the GNU linker nor
+collect. So if you have such a system, the answer is that you don't
+need either one, though using GNU ld does have some advantages over
+the native linker in some cases).
+
+@cindex AT&T cfront
+@cindex Cfront-end
+@cindex collect program
+@cindex GNU linker
+@cindex GNU binutils
+If you have experience with AT&T's "cfront", this function is performed
+there by programs named "patch" or "munch". With GNU C++, it is performed
+either by the GNU linker or by a program known as "collect". The collect
+program is part of the gcc-2.x distribution; you can obtain the GNU linker
+separately as part of the "binutils" package. The latest version of
+binutils is 2.7, released July 10, 1996; 2.6 is in common use and works
+well.
+
+(To be technical, it's "collect2"; there were originally several
+alternative versions of collect, and this is the one that survived).
+
+There are advantages and disadvantages to either choice.
+
+Advantages of the GNU linker:
+@cindex GNU linker, advantages
+@cindex GNU ld
+@cindex ld [GNU linker]
+
+It's faster than using collect -- collect basically runs the standard Unix
+linker on your program twice, inserting some extra code after the first
+pass to call the constructors. This is a sizable time penalty for large
+programs. The GNU linker does not require this extra pass.
+
+GNU ld reports undefined symbols using their true names, not the mangled
+names (but as of 2.7.0 so does collect).
+
+If there are undefined symbols, GNU ld reports which object file(s) refer to
+the undefined symbol(s). On some OSes (e.g. SunOS, Solaris) the native
+linker does not do this, so you have to track down who's referring to
+the missing symbols yourself.
+
+As of binutils version 2.2, on systems that use the so-called "a.out"
+debug format (e.g. Suns running SunOS 4.x), the GNU linker compresses
+the debug symbol table considerably. The 2.7 version adds some symbol
+table compression for ELF and Solaris targets.
+
+@cindex collect linker, advantages
+Advantages of collect:
+
+@cindex Shared libraries
+If your native linker supports shared libraries, you can use shared
+libraries with collect. This used to be a strong reason @emph{not}
+to use the GNU linker, but recent versions of GNU ld support linking
+with shared libraries on many platforms, and creating shared libraries
+on a few (such as Intel x86 systems that use ELF object format as well
+as SunOS and Solaris).
+
+@xref{shared libraries}
+
+@cindex GNU linker, porting
+The GNU linker has not been ported to as many platforms as g++ has, so you
+may be forced to use collect.
+
+If you use collect, you don't need to get something extra and figure out
+how to install it; the standard gcc installation procedure will do it for you.
+
+I used to say at this point that I don't see a clear win for either
+linking alternative, but with all the improvements in the GNU linker
+I think that it is now the better choice. Take your pick.
+
+If you run Linux, the only available linker is the GNU linker.
+
+@node Use GNU assembler?, shared libraries, use GNU linker?, installation
+@section Should I use the GNU assembler, or my vendor's assembler?
+
+@cindex Assembler
+@cindex GNU GAS
+This depends on your platform and your decision about the GNU linker. For
+most platforms, you'll need to use GAS if you use the GNU linker. For
+some platforms, you have no choice; check the gcc installation notes to
+see whether you must use GAS. But you can usually use the vendor's
+assembler if you don't use the GNU linker.
+
+The GNU assembler assembles faster than many native assemblers; however,
+on many platforms it cannot support the local debugging format.
+
+It used to be that the GNU assembler couldn't handle
+position-independent code on SunOS. This is no longer true if you
+have version 2.6 or newer.
+
+On HPUX or IRIX, you must use GAS (and configure gcc with the
+@code{--with-gnu-as} option) to debug your programs. GAS is
+strongly recommended particularly on the HP platform because of
+limitations in the HP assembler.
+
+The GNU assembler has been merged with the binutils
+distribution, so the GNU assembler and linker are now together in
+this package (as of binutils version 2.5.1).
+
+On Linux the assembler is the GNU assembler.
+
+@node shared libraries, repository, Use GNU assembler?, installation
+@section How do I build shared libraries with g++?
+
+For gcc-2.7.0 and later, building C++ shared libraries should work fine
+on supported platforms (HPUX 9+, IRIX 5+, DEC UNIX (formerly OSF/1),
+SGI/IRIX, AIX, SunOS 4, Linux/ELF and all targets using SVR4-style ELF shared
+libraries). There are two separate issues: building libg++ as a shared
+library, and making your own shared libraries. For libg++ it is simply
+a matter of giving the @code{--enable-shared} option to the configure
+program. When compiling your own code for shared libraries you
+generally
+must use the @code{-fPIC} flag to get position-independent code.
+
+@cindex -shared flag of gcc
+
+If your shared library contains global or static objects with
+constructors, then make sure to use @code{gcc -shared}, not
+@code{ld}, to create the shared library. This will make sure
+that any processor-specific magic needed to execute the constructors
+is included.
+
+In theory, constructors for objects in your shared library should be
+called when the library is opened (by dlopen or equivalent). This
+does not work on some platforms (e.g. SunOS4; it does work on Solaris
+and ELF systems such as Linux): on the broken platforms, the
+constructors are not called correctly.
+
+David Nilsen has suggested the following workaround:
+
+The thing to realize is that if you link your dynamic module with the
+@code{-shared} flag, the collect program nicely groups all the static
+ctors/dtors for you into a list and sets up a function that will call
+them (Note: this means that this trick won't work if you use the GNU
+linker without collect (@pxref{use GNU linker?}).
+
+The magic is knowing these function names. Currently, they're called:
+
+@example
+_GLOBAL__DI <-- calls all module constructors
+_GLOBAL__DD <-- calls all module destructors
+@end example
+
+[ possibly the leading underscore will differ between platforms: jbuck ]
+
+Therefore, if you make a wrapper around dlopen that looks up the
+symbol @code{_GLOBAL__DI} (or @code{__GLOBAL__DI} on SunOS4 machines), and
+calls it, you'll simulate getting the constructors called.
+
+You also need to set up the destructors to be called as well, so you
+need to put a wrapper around dlclose, which will call the
+@code{_GLOBAL__DD} function in the module when/if it's unloaded.
+
+Lastly, to get things 100% correct, you need to set up the destructors
+to also be called if the module is not unloaded, but the main program
+exits. I do this by registering a single function with @code{atexit()} that
+calls all the destructors left in dynamically loaded modules.
+
+@cindex Shared version of libg++
+Check the file @file{README.SHLIB} from the libg++ distribution for more
+about making and using shared libraries.
+
+@cindex Shared libraries with HP
+
+A patch is needed to build shared versions of version 2.7.2 of libg++
+and libstdc++ on the HP-PA architecture. You can find the patch at
+@file{ftp://ftp.cygnus.com/pub/g++/libg++-2.7.2-hppa-gcc-fix}.
+
+@node repository, repo bugs, shared libraries, installation
+@section How do I use the new repository code?
+
+@cindex repo patch
+Because there is some disagreement about the details of the template
+repository mechanism, you'll need to obtain a patch from Cygnus Support
+to enable the 2.7.2 repository code. You can obtain the patch by
+anonymous FTP: @file{ftp://ftp.cygnus.com/pub/g++/gcc-2.7.2-repo.gz}.
+
+There are patches for 2.7.0 and 2.7.1 in the same directory, though
+if you're going to rebuild the compiler you should use the latest one.
+
+@cindex repo patch for BSD
+If you're running NetBSD or BSDI, the Cygnus repo patch is not quite
+correct. Tim Liddelow has made an alternate version available at
+@file{ftp://ftp.cst.com.au/pub/gcc-2.7.2-repo-bsd.gz}.
+
+After you've applied the patch, the @code{-frepo} flag will enable the
+repository mechanism. The flag works much like the existing
+@code{-fno-implicit-templates} flag, except that auxiliary files, with
+an @file{.rpo} extension, are built that specify what template
+expansions are needed. At link time, the (patched) collect program
+detects missing templates and recompiles some of the object files
+so that the required templates are expanded.
+
+Note that the mechanism differs from that of cfront in that template
+definitions still must be visible at the point where they are to be
+expanded. No assumption is made that @file{foo.C} contains template
+definitions corresponding to template declarations in @file{foo.h}.
+
+@cindex closure with repo
+@cindex template closure
+Jason Merrill writes: ``To perform closure on a set of objects, just try
+to link them together. It will fail, but as a side effect all needed
+instances will be generated in the objects.''
+
+@node repo bugs, Use GNU C library?, repository, installation
+@section Known bugs and problems with the repo patch
+
+``The @code{-frepo} won't expand templated friend functions!''
+
+This is a known bug; currently you'll have to explicitly instantiate
+friend functions when using @code{-frepo} due to this bug (in 2.7.0
+through 2.7.2 at least).
+
+With earlier versions of the repo patch, there was a bug that happens
+when you have given a quoted command line switch, something like
+
+@example
+-D'MESSAGE="hello there"'
+@end example
+
+The repo code tries to recompile files using the same flags you
+originally specified, but doesn't quote arguments that need quoting,
+resulting in failures in some cases. This is no longer a problem
+with the 2.7.2 patch.
+
+@node Use GNU C library?, Global constructor problems, repo bugs, installation
+@section Should I use the GNU C library?
+
+@cindex GNU C library
+@cindex libg++
+At this point in time, no (unless you are running Linux or the GNU Hurd
+system). The GNU C library is still very young, and
+libg++ still conflicts with it in some places. Use your native C library
+unless you know a lot about the gory details of libg++ and gnu-libc. This
+will probably change in the future.
+
+@node Global constructor problems, Strange assembler errors, Use GNU C library?, installation
+@section Global constructors aren't being called
+
+@cindex global constructors
+``I've installed gcc and it almost works, but constructors and
+destructors for global objects and objects at file scope aren't being
+called. What did I do wrong?''
+
+@cindex collect program
+It appears that you are running on a platform that requires you to
+install either "collect2" or the GNU linker, and you have done neither.
+For more information, see the section discussing the GNU linker
+(@pxref{use GNU linker?}).
+
+@cindex constructor problems on Solaris
+@cindex Solaris, constructor problems
+On Solaris 2.x, you shouldn't need a collect program and GNU ld doesn't run.
+If your global constructors aren't being called, you may need to install
+a patch, available from Sun, to fix your linker. The number of the
+``jumbo patch'' that applies is 101409-03. Thanks to Russell Street
+(r.street@@auckland.ac.nz) for this info.
+
+@cindex IRIX, installing collect
+It appears that on IRIX, the collect2 program is not being installed
+by default during the installation process, though it is required;
+you can install it manually by executing
+
+@example
+make install-collect2
+@end example
+
+from the gcc source directory after installing the compiler. (I'm
+not certain for which versions of gcc this problem occurs, and whether
+it is still present).
+
+@node Strange assembler errors, Other problems building libg++, Global constructor problems, installation
+@section Strange assembler errors when linking C++ programs
+
+``I've installed gcc and it seemed to go OK, but when I attempt to link
+any C++ program, I'm getting strange errors from the assembler! How
+can that be?''
+
+The messages in question might look something like
+
+@example
+as: "/usr/tmp/cca14605.s", line 8: error: statement syntax
+as: "/usr/tmp/cca14605.s", line 14: error: statement syntax
+@end example
+
+(on a Sun, different on other platforms). The important thing is that
+the errors come out at the link step, @emph{not} when a C++ file is
+being compiled.
+
+@cindex nm program
+@cindex GNU nm program
+Here's what's going on: the collect2 program uses the Unix ``nm''
+program to obtain a list of symbols for the global constructors and
+destructors, and it builds a little assembly language module that
+will permit them all to be called. If you're seeing this symptom,
+you have an old version of GNU nm somewhere on your path. This old
+version prints out symbol names in a format that the collect2 program
+does not expect, so bad assembly code is generated.
+
+The solution is either to remove the old version of GNU nm from your
+path (and that of everyone else who uses g++), or to install a newer
+version (it is part of the GNU "binutils" package). Recent versions
+of GNU nm do not have this problem.
+
+@node Other problems building libg++, More size_t problems, Strange assembler errors, installation
+@section Other problems building libg++
+@cindex libg++ on Ultrix
+@cindex libg++ on SunOS
+
+``I am having trouble building libg++. Help!''
+
+On some platforms (for example, Ultrix), you may see errors complaining
+about being unable to open dummy.o. On other platforms (for example,
+SunOS), you may see problems having to do with the type of size_t.
+The fix for these problems is to make libg++ by saying "make CC=gcc".
+According to Per Bothner, it should no longer be necessary to specify
+"CC=gcc" for libg++-2.3.1 or later.
+
+``I built and installed libg++, but g++ can't find it. Help!''
+
+The string given to @file{configure} that identifies your system must
+be the same when you install libg++ as it was when you installed gcc.
+Also, if you used the @code{--prefix} option to install gcc somewhere
+other than @file{/usr/local}, you must use the same value for
+@code{--prefix} when installing libg++, or else g++ will not be able
+to find libg++.
+
+@cindex patch for libg++-2.6.2
+
+The toplevel Makefile in the libg++ 2.6.2 distribution is broken, which
+along with a bug in g++ 2.6.3 causes problems linking programs that use the
+libstdc++ complex classes. A patch for this is available from
+@file{ftp://ftp.cygnus.com//pub/g++/libg++-2.6.2-fix.gz}.
+
+@node More size_t problems, Rebuild libg++?, Other problems building libg++, installation
+@section But I'm @emph{still} having problems with @code{size_t}!
+
+@cindex Type of size_t
+``I did all that, and I'm @emph{still} having problems with disagreeing
+definitions of size_t, SIZE_TYPE, and the type of functions like
+@code{strlen}.''
+
+@cindex _G_config.h
+The problem may be that you have an old version of @file{_G_config.h}
+lying around. As of libg++ version 2.4, @file{_G_config.h}, since it is
+platform-specific, is inserted into a different directory; most include
+files are in @file{$prefix/lib/g++-include}, but this file now lives in
+@file{$prefix/$arch/include}. If, after upgrading your libg++, you find that
+there is an old copy of @file{_G_config.h} left around, remove it,
+otherwise g++ will find the old one first.
+
+@node Rebuild libg++?, co-existing versions, More size_t problems, installation
+@section Do I need to rebuild libg++ to go with my new g++?
+
+``After I upgraded g++ to the latest version, I'm seeing undefined
+symbols.''
+
+or
+
+``If I upgrade to a new version of g++, do I need to reinstall libg++?''
+
+@cindex Incompatibilities between g++ versions
+
+As a rule, the first two digits of your g++ and libg++ should be the
+same. Normally when you do an upgrade in the ``minor version number''
+(2.5.7 to 2.5.8, say) there isn't a need to rebuild libg++, but there
+have been a couple of exceptions in the past.
+
+@node co-existing versions, Installing on Linux, Rebuild libg++?, installation
+@section I want several versions of g++ and libg++ to co-exist.
+
+I recommend against using the @code{-V} flag to make multiple versions
+of gcc/g++ co-exist, unless they are different minor releases that can use
+the same compiled version of libg++. The reason is that all these
+versions will try to use the same libg++ version, which usually will
+not work.
+
+Instead, use the @code{--prefix} flag when configuring gcc. Use a
+different value of @code{--prefix} for each gcc version. Use the
+same value of @code{--prefix} when configuring libg++. You can then
+have any number of co-existing gcc/libg++ pairs. Symbolic links can
+be used so that users don't need to put all these different directories
+on their paths.
+
+One possible system to use is to set @code{--prefix} to
+@file{/usr/local/gcc-2.x.y} for version 2.x.y of gcc, and to link
+whichever version of gcc you wish to be the default into
+@file{/usr/local/bin/gcc} and @file{/usr/local/bin/g++}.
+
+@node Installing on Linux, Linux Slackware 3.0, co-existing versions, installation
+@section Trouble installing g++ and libg++ on Linux
+
+``I've downloaded the latest g++ and libg++ and I'm trying to install
+them on Linux, and I'm having lots of problems.''
+
+@cindex Linux
+FSF releases of libg++ won't install on Linux unchanged, since Linux
+uses are part of the libio library from libg++ for its standard C
+library, only this is changed in a way that it clashes with libg++.
+This means that you'll need a patched version of libg++ for it to
+work.
+
+If you want to upgrade to a new gcc/libg++ combination, the easiest
+thing to do is to grab the prebuilt versions of gcc and libg++ for Linux
+from @file{ftp://tsx-11.mit.edu/pub/linux/packages/GCC}. Follow the
+directions carefully. If you want to build from source, you'll need
+a patch for libg++; the Linux developers have named the patched libg++
+version libg++-2.7.1.3 and there is a patch file in the above-named
+directory.
+
+See @file{http://sunsite.unc.edu/LDP/HOWTO/GCC-HOWTO.html},
+the Linux GCC HOWTO, for more on gcc/g++ and Linux.
+
+Linux is in the process of switching over to the GNU C library, version
+2, which will become Linux libc version 6. Once this process is
+complete, there's a good chance that the installation process on Linux
+will be smoother, but only experts should try making this new library
+work at this point.
+
+@node Linux Slackware 3.0, , Installing on Linux, installation
+@section Problems with g++ on Linux Slackware 3.0
+
+@cindex Slackware
+@cindex Linux Slackware
+``When I try to compile the traditional Hello, world program on Linux,
+the compiler can't find @file{iostream.h}. What's the deal?''
+
+You probably have the Slackware 3.0 release. There's an error in the
+setup. It's easy to fix, though; log in as root, and make a symbolic
+link:
+
+@example
+ln -s /usr/lib/g++-include /usr/include/g++
+@end example
+
+@node evolution, User Problems, installation, Top
+@chapter The Evolution of g++
+
+This chapter discusses the evolution of g++ and describes what can be expected
+in the future.
+
+@menu
+* version 2.7.x:: What's changed in 2.7.x from earlier versions
+* libstdc++:: The GNU C++ standard library
+* new work:: What's been done since 2.7.x
+* egcs:: The Experimental GNU Compiler System
+* When?:: When can I get all this new stuff?
+@end menu
+
+@node version 2.7.x, libstdc++, evolution, evolution
+@section What's new in version 2.7.x of gcc/g++
+
+The current version of gcc/g++ is 2.7.2.2, released February 10, 1997.
+The only change between 2.7.2.1 and 2.7.2.2 is that support was added
+for using the GNU C library, version 2, on Linux; users not interested
+in that functionality have no reason to upgrade.
+The previous version of gcc/g++ is 2.7.2.1, released August 14, 1996.
+The current version of libg++ is 2.7.2, released July 4, 1996.
+
+Note that gcc 2.7.2.1 just consists of several small patches to
+gcc-2.7.2. The release is mainly
+intended to fix platform-specific bugs and does not affect the C++
+``front end'' of the compiler (the part that parses your C++ code).
+
+The 2.7.x releases represent a great deal of work on the part of the g++
+maintainers to fix outstanding bugs and move the compiler closer to the
+current ANSI/ISO standards committee's working paper, including
+supporting many of the new features that have been added to the
+language. I recommend that everyone read the NEWS file contained in the
+distribution (and that system administrators make the file available to
+their users). I've borrowed liberally from this file here.
+
+@cindex C++ working paper
+If any features seem unfamiliar, you will probably want to
+look at the recently-released public review copy of the C++ Working
+Paper. A new draft, dated 2 December 1996, has been released for
+public comment. You can find it on the web at
+@file{http://www.cygnus.com/misc/wp/} or
+@file{http://www.maths.warwick.ac.uk/c++/pub/wp/html/cd2/}.
+See
+@file{http://www.setech.com/x3.html}
+or
+@file{http://www.maths.warwick.ac.uk/c++/pub/} to download the
+document in PostScript, PDF (Adobe Acrobat), HTML, or ASCII
+form.
+
+Here are the main points:
+
+@itemize @bullet
+@item
+@cindex for scope
+As described above, the scope of variables declared in the
+initialization part of a for statement has been changed; such variables
+are now visible only in the loop body. Use @code{-fno-for-scope} to get
+the old behavior. You'll need this flag to build groff version 1.09,
+Ptolemy, and many other free software packages.
+
+@item
+@cindex vtable duplication
+Code that does not use #pragma interface/implementation will most
+likely shrink dramatically, as g++ now only emits the vtable for a
+class in the translation unit where its first non-inline, non-abstract
+virtual function is defined.
+
+@item
+@cindex automatic template instantiation
+Support for automatic template instantiation has @emph{not} been enabled
+in the official distribution, due to a disagreement over design philosophies.
+But you can get a patch from Cygnus to turn it on; retrieve the patch
+from @file{ftp://ftp.cygnus.com/pub/g++/gcc-2.7.2-repo.gz} to patch
+gcc-2.7.2 (there are also patches for earlier gcc versions).
+
+@item
+@cindex exception handling, 2.7.0
+
+@xref{exceptions}
+
+@item
+@cindex run-time type identification
+Support for Run-Time Type Identification has been added with @code{-frtti}.
+This support is still in alpha; one major restriction is that any file
+compiled with @code{-frtti} must include @code{<typeinfo>} (@emph{not}
+@code{typeinfo.h} as the NEWS file says).
+Also, all C++ code you link with (including libg++) has to be built with
+@code{-frtti}, so it's still tricky to use.
+
+@item
+@cindex compiler-generated operators
+Synthesis of compiler-generated constructors, destructors and
+assignment operators is now deferred until the functions are used.
+
+@item
+@cindex assignment in conditional expressions
+The parsing of expressions such as @code{a ? b : c = 1}
+has changed from
+@code{(a ? b : c) = 1} to @code{a ? b : (c = 1)}. This is a new C/C++
+incompatibility brought to you by the ANSI/ISO standards committee.
+
+@item
+@cindex new operator keywords
+The operator keywords and, and_eq, bitand, bitor, compl, not, not_eq,
+or, or_eq, xor and xor_eq are now supported. Use @code{-ansi} or
+@code{-foperator-names} to enable them.
+
+@item
+@cindex explicit keyword
+The @code{explicit} keyword is now supported. @code{explicit} is used to mark
+constructors and type conversion operators that should not be used
+implicitly.
+
+@item
+@cindex user-defined type conversion
+Handling of user-defined type conversion has been improved.
+
+@item
+@cindex explicit template instantiation
+Explicit instantiation of template methods is now supported. Also,
+@code{inline template class foo<int>;}
+can be used to emit only the vtable
+for a template class.
+
+@item
+@cindex -fcheck-new
+With -fcheck-new, g++ will check the return value of all calls to
+operator new, and not attempt to modify a returned null pointer.
+
+@item
+collect2 now demangles linker output, and c++filt has become part of
+the gcc distribution.
+
+@item
+Improvements to template instantiation: only members actually used
+are instantiated. (Actually this is not quite true: some inline
+templates that are not successfully inlined may be expanded even
+though they are not needed).
+
+@end itemize
+
+@node libstdc++, new work, version 2.7.x, evolution
+@section The GNU Standard C++ Library
+
+The GNU Standard C++ Library (also called the ``GNU ANSI C++ Library''
+in places in the code) is not libg++, though it is included in the
+libg++ distribution. Rather, it contains classes and functions
+required by the ANSI/ISO standard. The copyright conditions are the
+same as those for for the iostreams classes; the LGPL is not used
+(@pxref{legalities}).
+
+This library, libstdc++, is in the libg++ distribution in versions 2.6.2
+and later. It requires at least gcc 2.6.3 to build the libg++-2.6.2
+version; use at least gcc 2.7.0 to build the libg++ 2.7.0 version. It
+contains a hacked-up version of HP's implementation of the Standard
+Template Library (@pxref{Standard Template Library}). I've
+successfully used this Standard Template Library version to build
+a number of the demos you'll see on various web pages.
+
+As of version 2.7.0, the streams classes are now in libstdc++ instead of
+libg++, and libiostream is being phased out (don't use it). The g++
+program searches this library.
+
+The maintainers of libg++ have de-emphasized work on the older libg++ classes
+in favor of enhancing libstdc++ to cover the full language, so while libg++
+will always be available, enhancements to it should not be expected.
+
+@node new work, egcs, libstdc++, evolution
+@section What can we expect in future gcc releases?
+
+A great deal of work has gone into enhancements to the C++ front end, as well
+as to other aspects of the compiler.
+
+The next major release(s) of gcc/g++ can be expected to have the following
+features:
+
+@itemize @bullet
+@cindex new template implementation
+@item
+A completely new template implementation, much closer to the draft
+standard. Limitations in 2.7.2.x concerning inlining template functions
+will be eliminated. Static template data members, template class member
+functions, partial specification, and default template arguments will be
+supported. An instantiation method resembling that used in Borland C++
+(instantiating functions possibly in multiple .o files and using weak
+symbols to link correctly) will be provided, in addition to other
+options. The SGI version of STL will be shipped with libstdc++ and will
+compile unchanged.
+
+@item
+@cindex new exception implementation
+Exception handling has been re-worked; exceptions will work together
+with optimization.
+Actually, there are two separate implementations: one based on setjmp/longjmp
+and designed to be highly portable, and one designed to be more efficient but
+requiring more processor-specific support (getting exceptions right has proven
+to be extremely difficult and has been the chief obstacle to getting a new
+release out).
+
+@item
+@cindex RTTI
+RTTI has been re-done to work correctly and is on by default.
+
+@item
+@cindex overloading
+Overloading has been re-worked to conform to the latest draft of the
+standard.
+@end itemize
+
+Features that are still missing include namespaces and templates as
+template arguments.
+
+@node egcs, When?, new work, evolution
+@section What's this I hear about egcs?
+
+The egcs effort is a new effort to merge several threads of gcc
+development and to provide a faster development process.
+For more information see @file{http://www.cygnus.com/egcs/}.
+
+@node When?, , egcs, evolution
+@section OK, when can I get this stuff?
+
+The FSF has a policy of never announcing release dates in advance.
+I'm sure this is frustrating to a lot of people, since it's taken
+so long, and this frustration was one of the reasons the egcs effort
+was created. An egcs release should be expected to occur in the
+very near future. [ More on this next time ].
+
+@node User Problems, legalities, evolution, Top
+@chapter User Problems
+
+@menu
+* missing virtual table::
+* for scope::
+* const constructor::
+* unused parameter warnings::
+* jump crosses initialization::
+* Demangler::
+* static data members::
+* internal compiler error::
+* bug reports::
+* porting to g++::
+* name mangling::
+* problems linking with other libraries::
+* documentation::
+* templates::
+* undefined templates::
+* redundant templates::
+* Standard Template Library::
+* STL and string::
+* exceptions::
+* namespaces::
+* agreement with standards::
+* compiling standard libraries::
+* debugging on SVR4 systems::
+* debugging problems on Solaris::
+* X11 conflicts with libg++::
+* assignment to streams::
+@end menu
+
+@node missing virtual table, for scope, User Problems, User Problems
+@section Linker complains about missing virtual table
+
+``I'm getting a message complaining about an undefined virtual table. Is
+this a compiler bug?''
+
+(On platforms that run neither collect nor the GNU linker, like Solaris,
+you may see an odd undefined symbol like "_vt.3foo", where foo is a
+class name).
+
+This is probably because you are missing a definition for the first
+(non-inline) virtual function of the class. Since gcc-2.7.0, g++ uses
+a trick borrowed from cfront: the .o file containing the definition for
+the first non-inline virtual function for the class will also contain
+the virtual function table.
+
+@node for scope, const constructor, missing virtual table, User Problems
+@section gcc-2.7.0 breaks declarations in "for" statements!
+
+@cindex declarations in for statements
+@cindex for statements: declarations
+
+gcc-2.7.0 implements the new ANSI/ISO rule on the scope of variables
+declared in for loops.
+
+@example
+for (int i = 1; i <= 10; i++) @{
+ // do something here
+@}
+foo(i);
+@end example
+
+In the above example, most existing C++ compilers would pass the
+value 11 to the function @code{foo}. In gcc 2.7 and in the ANSI/ISO
+working paper, the scope of @code{i} is only the for loop body, so
+this is an error. So that old code can be compiled, the new gcc has
+a flag @code{-fno-for-scope} that causes the old rule to be used.
+@cindex -fno-for-scope
+
+As of 2.7.1, the compiler attempts to issue warnings about code that
+has different meanings under the two sets of rules, but the code is
+not perfect: the intent was that code that has valid, but different,
+meanings under the ARM rules and the working paper rules would give
+warnings but have the new behavior, and this doesn't seem to happen.
+
+The @code{-ffor-scope} flag under 2.7.1 and 2.7.2 gives the 2.7.0 behavior.
+
+@node const constructor, unused parameter warnings, for scope, User Problems
+@section g++ seems to want a const constructor. What's that?
+
+gcc-2.7.1 introduced a bug that causes the compiler to ask for a
+const constructor (there's no such thing in C++) in certain situations
+where a const object appears in a template class. Most cases have been
+fixed in gcc-2.7.2, but unfortunately not all. Still, if you're running
+gcc-2.7.1 and have this problem, upgrade to 2.7.2; it is a vast improvement.
+
+@cindex ObjectSpace<STL>
+
+The default constructor for the template @code{pair} in ObjectSpace's
+implementation of STL triggers the bug in one place, for gcc 2.7.2. If
+you're using ObjectSpace<STL> and having this problem, simply
+change the default constructor from
+
+@example
+os_pair () : first (T1 ()), second (T2 ()) @{@}
+@end example
+
+to just
+
+@example
+os_pair () @{@}
+@end example
+
+Once this is done, ObjectSpace<STL> works fairly well.
+
+@node unused parameter warnings, jump crosses initialization, const constructor, User Problems
+@section How to silence ``unused parameter'' warnings
+
+@cindex -Wall
+@cindex -Wunused
+
+``When I use @code{-Wall} (or @code{-Wunused}), g++ warns about
+unused parameters. But the parameters have to be there, for use
+in derived class functions. How do I get g++ to stop complaining?''
+
+The answer is to simply omit the names of the unused parameters when
+defining the function. This makes clear, both to g++ and to readers
+of your code, that the parameter is unused. For example:
+
+@example
+int Foo::bar(int arg) @{ return 0; @}
+@end example
+
+will give a warning for the unused parameter @code{arg}. To suppress
+the warning write
+
+@example
+int Foo::bar(int) @{ return 0; @}
+@end example
+
+@node jump crosses initialization, Demangler, unused parameter warnings, User Problems
+@section g++ objects to a declaration in a case statement
+
+``The compiler objects to my declaring a variable in one of the branches
+of a case statement. Earlier versions used to accept this code. Why?''
+
+The draft standard does not allow a goto or a jump to a case label to
+skip over an initialization of a variable or a class object. For
+example:
+
+@example
+switch ( i ) @{
+ case 1:
+ Object obj(0);
+ ...
+ break;
+ case 2:
+ ...
+ break;
+@}
+@end example
+
+The reason is that @code{obj} is also in scope in the rest of the switch
+statement.
+
+As of version 2.7.0, the compiler will object that the jump to the
+second case level crosses the initialization of @code{obj}. Older
+compiler versions would object only if class Object has a destructor.
+In either case, the solution is to add a set of curly braces around
+the case branch:
+
+@example
+ case 1:
+ @{
+ Object obj(0);
+ ...
+ break;
+ @}
+@end example
+
+@node Demangler, static data members, jump crosses initialization, User Problems
+@section Where can I find a demangler?
+
+@cindex demangler program
+A g++-compatible demangler named @code{c++filt} can be found in the
+@file{binutils} distribution. This distribution (which also contains
+the GNU linker) can be found at any GNU archive site.
+
+As of version 2.7.0, @code{c++filt} is included with gcc and is
+installed automatically. Even better, it is used by the @code{collect}
+linker, so you don't see mangled symbols anymore (except on platforms
+that use neither collect nor the GNU linker, like Solaris).
+
+@node static data members, internal compiler error, Demangler, User Problems
+@section Linker reports undefined symbols for static data members
+
+@cindex Static data members
+``g++ reports undefined symbols for all my static data members when I link,
+even though the program works correctly for compiler XYZ. What's going on?''
+
+The problem is almost certainly that you don't give definitions for
+your static data members. If you have
+
+@example
+class Foo @{
+ ...
+ void method();
+ static int bar;
+@};
+@end example
+
+you have only declared that there is an int named Foo::bar and a member
+function named Foo::method that is defined somewhere. You still need to
+define @emph{both} method() and bar in some source file. According to
+the draft ANSI standard, you must supply an initializer, such as
+
+@example
+int Foo::bar = 0;
+@end example
+
+@noindent
+in one (and only one) source file.
+
+@node internal compiler error, bug reports, static data members, User Problems
+@section What does ``Internal compiler error'' mean?
+
+It means that the compiler has detected a bug in itself. Unfortunately,
+g++ still has many bugs, though it is a lot better than it used to be.
+If you see this message, please send in a complete bug report (see next
+section).
+
+@node bug reports, porting to g++, internal compiler error, User Problems
+@section I think I have found a bug in g++.
+
+@cindex Bug in g++, newly found
+``I think I have found a bug in g++, but I'm not sure. How do I know,
+and who should I tell?''
+
+@cindex Manual, for gcc
+First, see the excellent section on bugs and bug reports in the gcc manual
+(which is included in the gcc distribution). As a short summary of that
+section: if the compiler gets a fatal signal, for any input, it's a bug
+(newer versions of g++ will ask you to send in a bug report when they
+detect an error in themselves). Same thing for producing invalid
+assembly code.
+
+When you report a bug, make sure to describe your platform (the type of
+computer, and the version of the operating system it is running) and the
+version of the compiler that you are running. See the output of the
+command @code{g++ -v} if you aren't sure. Also provide enough code
+so that the g++ maintainers can duplicate your bug. Remember that the
+maintainers won't have your header files; one possibility is to send
+the output of the preprocessor (use @code{g++ -E} to get this). This
+is what a ``complete bug report'' means.
+
+I will add some extra notes that are C++-specific, since the notes from
+the gcc documentation are generally C-specific.
+
+@cindex g++ bug report
+First, mail your bug report to "bug-g++@@prep.ai.mit.edu". You may also
+post to @file{gnu.g++.bug}, but it's better to use mail, particularly if you
+have any doubt as to whether your news software generates correct reply
+addresses. Don't mail C++ bugs to bug-gcc@@prep.ai.mit.edu.
+
+@strong{News:} as I write this (late February 1996) the gateway
+connecting the bug-g++ mailing list and the @file{gnu.g++.bug} newsgroup
+is (temporarily?) broken. Please mail, do not post bug reports.
+
+@cindex libg++ bug report
+If your bug involves libg++ rather than the compiler, mail to
+bug-lib-g++@@prep.ai.mit.edu. If you're not sure, choose one, and if you
+guessed wrong, the maintainers will forward it to the other list.
+
+@cindex C++, reference books
+@cindex ARM [Annotated C++ Ref Manual]
+Second, if your program does one thing, and you think it should do
+something else, it is best to consult a good reference if in doubt.
+The standard reference is the draft working paper from the ANSI/ISO
+C++ standardization committee, which you can get on the net.
+For PostScript and PDF (Adobe Acrobat) versions, see the
+archive at @file{ftp://research.att.com/dist/stdc++/WP}. For HTML and ASCII
+versions, see @file{ftp://ftp.cygnus.com/pub/g++}. On the World Wide Web, see
+@file{http://www.cygnus.com/misc/wp/}.
+
+An older
+standard reference is "The Annotated C++ Reference Manual", by Ellis and
+Stroustrup (copyright 1990, ISBN #0-201-51459-1). This is what they're
+talking about on the net when they refer to ``the ARM''. But you should
+know that changes have been made to the language since then.
+
+The ANSI/ISO C++ standards committee have adopted some changes to the
+C++ language since the publication of the original ARM, and newer
+versions of g++ (2.5.x and later) support some of these changes, notably
+the mutable keyword (added in 2.5.0), the bool type (added in 2.6.0),
+and changes in the scope of variables defined in for statements (added
+in 2.7.0).
+You can obtain an addendum to the ARM explaining many of these changes by FTP
+from @file{ftp://ftp.std.com/AW/stroustrup2e/new_iso.ps}.
+
+@cindex AT&T cfront
+Note that the behavior of (any version of) AT&T's "cfront" compiler is
+NOT the standard for the language.
+
+@node porting to g++, name mangling, bug reports, User Problems
+@section Porting programs from other compilers to g++
+
+``I have a program that runs on <some other C++ compiler>, and I want
+to get it running under g++. Is there anything I should watch out
+for?''
+
+@cindex Porting to g++
+
+Note that g++ supports many of the newer keywords that have recently
+been added to the language. Your other C++ compiler may not support
+them, so you may need to rename variables and members that conflict
+with these keywords.
+
+There are two other reasons why a program that worked under one compiler
+might fail under another: your program may depend on the order of
+evaluation of side effects in an expression, or it may depend on the
+lifetime of a temporary (you may be assuming that a temporary object
+"lives" longer than the standard guarantees). As an example of the
+first:
+
+@example
+void func(int,int);
+
+int i = 3;
+func(i++,i++);
+@end example
+
+@cindex Order of evaluation, problems in porting
+Novice programmers think that the increments will be evaluated in strict
+left-to-right order. Neither C nor C++ guarantees this; the second
+increment might happen first, for example. func might get 3,4, or it
+might get 4,3.
+
+@cindex Classes, problems in porting
+@cindex Problems in porting, class
+The second problem often happens with classes like the libg++ String
+class. Let's say I have
+
+@example
+String func1();
+void func2(const char*);
+@end example
+
+and I say
+
+@example
+func2(func1());
+@end example
+
+because I know that class String has an "operator const char*". So what
+really happens is
+
+@example
+func2(func1().convert());
+@end example
+
+@cindex temporaries
+where I'm pretending I have a convert() method that is the same as the
+cast. This is unsafe in g++ versions before 2.6.0, because the
+temporary String object may be deleted after its last use (the call to
+the conversion function), leaving the pointer pointing to garbage, so by
+the time func2 is called, it gets an invalid argument.
+
+@cindex ANSI draft standard
+Both the cfront and the old g++ behaviors are legal according to the ARM,
+but the powers that be have decided that compiler writers were given
+too much freedom here.
+
+The ANSI C++ committee has now come to a resolution of the lifetime of
+temporaries problem: they specify that temporaries should be deleted at
+end-of-statement (and at a couple of other points). This means that g++
+versions before 2.6.0 now delete temporaries too early, and cfront
+deletes temporaries too late. As of version 2.6.0, g++ does things
+according to the new standard.
+
+@cindex Scope, problems in porting
+@cindex Problems in porting, scope
+For now, the safe way to write such code is to give the temporary a name,
+which forces it to live until the end of the scope of the name. For
+example:
+
+@example
+String& tmp = func1();
+func2(tmp);
+@end example
+
+Finally, like all compilers (but especially C++ compilers, it seems),
+g++ has bugs, and you may have tweaked one. If so, please file a bug
+report (after checking the above issues).
+
+@node name mangling, problems linking with other libraries, porting to g++, User Problems
+@section Why does g++ mangle names differently from other C++ compilers?
+
+See the answer to the next question.
+@cindex Mangling names
+
+@node problems linking with other libraries, documentation, name mangling, User Problems
+@section Why can't g++ code link with code from other C++ compilers?
+
+``Why can't I link g++-compiled programs against libraries compiled by
+some other C++ compiler?''
+
+@cindex Mangling names
+@cindex Cygnus Support
+Some people think that,
+if only the FSF and Cygnus Support folks would stop being
+stubborn and mangle names the same way that, say, cfront does, then any
+g++-compiled program would link successfully against any cfront-compiled
+library and vice versa. Name mangling is the least of the problems.
+Compilers differ as to how objects are laid out, how multiple inheritance
+is implemented, how virtual function calls are handled, and so on, so if
+the name mangling were made the same, your programs would link against
+libraries provided from other compilers but then crash when run. For this
+reason, the ARM @emph{encourages} compiler writers to make their name mangling
+different from that of other compilers for the same platform.
+Incompatible libraries are then detected at link time, rather than at run
+time.
+@cindex ARM [Annotated C++ Ref Manual]
+@cindex Compiler differences
+
+@node documentation, templates, problems linking with other libraries, User Problems
+@section What documentation exists for g++ 2.x?
+
+@cindex g++, documentation
+Relatively little.
+While the gcc manual that comes with the distribution has some coverage
+of the C++ part of the compiler, it focuses mainly on the C compiler
+(though the information on the ``back end'' pertains to C++ as well).
+Still, there is useful information on the command line options and the
+#pragma interface and #pragma implementation directives in the manual,
+and there is a useful section on template instantiation in the 2.6 version.
+There is a Unix-style manual entry, "g++.1", in the gcc-2.x
+distribution; the information here is a subset of what is in the manual.
+
+You can buy a nicely printed and bound copy of this manual from the FSF;
+see above for ordering information.
+
+A draft of a document describing the g++ internals appears in the gcc
+distribution (called g++int.texi); it is incomplete but gives lots of
+information.
+
+For class libraries, there are several resources available:
+
+@itemize @bullet
+@item
+The libg++ distribution has a manual
+@file{libg++/libg++.texi} describing the old libg++ classes, and
+another manual @file{libio/iostream.texi} describing the iostreams
+implementation.
+@item
+While there is no libg++-specific document describing the STL
+implementation, SGI's web site, at @file{http://www.sgi.com/Technology/STL/},
+is an excellent resource.
+@end itemize
+
+@node templates, undefined templates, documentation, User Problems
+@section Problems with the template implementation
+
+@cindex g++, template support
+@cindex Templates
+
+g++ does not implement a separate pass to instantiate template functions
+and classes at this point; for this reason, it will not work, for the most
+part, to declare your template functions in one file and define them in
+another. The compiler will need to see the entire definition of the
+function, and will generate a static copy of the function in each file
+in which it is used.
+
+(The experimental template repository code (@pxref{repository}) that
+can be added to 2.7.0 or later does implement a separate pass, but there
+is still no searching of files that the compiler never saw).
+
+@cindex -fno-implicit-templates
+For version 2.6.0, however, a new switch @code{-fno-implicit-templates}
+was added; with this switch, templates are expanded only under user
+control. I recommend that all g++ users that use templates read the
+section ``Template Instantiation'' in the gcc manual (version 2.6.x
+and newer). g++ now supports explicit template expansion using the
+syntax from the latest C++ working paper:
+
+@example
+template class A<int>;
+template ostream& operator << (ostream&, const A<int>&);
+@end example
+
+@cindex template limitations
+As of version 2.6.3, there are still a few limitations in the template
+implementation besides the above (thanks to Jason Merrill for this info):
+These are still present in version 2.7.2, but a new implementation of
+templates planned for version 2.8 will eliminate them.
+
+@enumerate 1
+@item
+Static data member templates are not supported. You can work around
+this by explicitly declaring the static variable for each template
+specialization:
+
+@example
+template <class T> struct A @{
+ static T t;
+@};
+
+template <class T> T A<T>::t = 0; // gets bogus error
+int A<int>::t = 0; // OK (workaround)
+@end example
+
+(still a limitation in 2.7.2)
+
+@item
+Template member names are not available when defining member function
+templates.
+
+@example
+template <class T> struct A @{
+ typedef T foo;
+ void f (foo);
+ void g (foo arg) @{ ... @}; // this works
+@};
+
+template <class T> void A<T>::f (foo) @{ @} // gets bogus error
+@end example
+
+@item
+Templates are instantiated using the parser. This results in two
+problems:
+
+a) Class templates are instantiated in some situations where such
+instantiation should not occur.
+
+@example
+template <class T> class A @{ @};
+A<int> *aip = 0; // should not instantiate A<int> (but does)
+@end example
+
+b) Function templates cannot be inlined at the site of their
+instantiation.
+
+@example
+template <class T> inline T min (T a, T b) @{ return a < b ? a : b; @}
+
+void f () @{
+ int i = min (1, 0); // not inlined
+@}
+
+void g () @{
+ int j = min (1, 0); // inlined
+@}
+@end example
+
+A workaround that works in version 2.6.1 and later is to specify
+
+@example
+extern template int min (int, int);
+@end example
+
+before @code{f()}; this will force it to be instantiated (though not
+emitted).
+
+@item
+Member function templates are always instantiated when their containing
+class is. This is wrong.
+@end enumerate
+
+@node undefined templates, redundant templates, templates, User Problems
+@section I get undefined symbols when using templates
+
+(Thanks to Jason Merrill for this section).
+
+@cindex template instantiation
+g++ does not automatically instantiate templates defined in other files.
+Because of this, code written for cfront will often produce undefined
+symbol errors when compiled with g++. You need to tell g++ which template
+instances you want, by explicitly instantiating them in the file where they
+are defined. For instance, given the files
+
+@file{templates.h}:
+@example
+template <class T>
+class A @{
+public:
+ void f ();
+ T t;
+@};
+
+template <class T> void g (T a);
+@end example
+
+@file{templates.cc}:
+@example
+#include "templates.h"
+
+template <class T>
+void A<T>::f () @{ @}
+
+template <class T>
+void g (T a) @{ @}
+@end example
+
+
+main.cc:
+@example
+#include "templates.h"
+
+main ()
+@{
+ A<int> a;
+ a.f ();
+ g (a);
+@}
+@end example
+
+compiling everything with @code{g++ main.cc templates.cc} will result in
+undefined symbol errors for @samp{A<int>::f ()} and @samp{g (A<int>)}. To
+fix these errors, add the lines
+
+@example
+template class A<int>;
+template void g (A<int>);
+@end example
+
+to the bottom of @samp{templates.cc} and recompile.
+
+@node redundant templates, Standard Template Library, undefined templates, User Problems
+@section I get multiply defined symbols using templates
+
+You may be running into a bug that was introduced in version 2.6.1
+(and is still present in 2.6.3) that generated external linkage
+for templates even when neither @code{-fexternal-templates} nor
+@code{-fno-implicit-templates} is specified. There is a patch for
+this problem at @*
+@file{ftp://ftp.cygnus.com/pub/g++/gcc-2.6.3-template-fix}.
+
+I recommend either applying the patch or
+using @code{-fno-implicit-templates}
+together with explicit template instantiation as described in previous
+sections.
+
+This bug is fixed in 2.7.0.
+
+@node Standard Template Library, STL and string, redundant templates, User Problems
+@section Does g++ support the Standard Template Library?
+
+@cindex STL
+@cindex Standard Template Library
+The Standard Template Library (STL) uses many of the extensions that the
+ANSI/ISO committee has made to templates, and g++ doesn't support
+some of these yet. So if you grab HP's free implementation of STL it
+isn't going to work. However, starting with libg++-2.6.2 libg++ contains a
+hacked version of STL, based on work by Carsten Bormann, which permits
+g++ to compile at least the containers (thanks to Per Bothner for this
+text).
+
+Actually, as of libg++ version 2.7.2 most of this works quite well, most
+of the time;
+I've succeeded
+in making significant use of it.
+Almost all of the ObjectSpace examples (a set of
+over 200 simple examples of STL usage) now work.
+
+When version 2.8.0 is out (with its complete redesign of the template
+implementation) a much more complete implementation of the
+STL (based on a newer free implementation from SGI) will be included.
+In the meantime, a group at the Moscow Center for Sparc Technology has
+a port of the SGI STL implementation that mostly works with gcc-2.7.2.
+See
+@file{http://www.ipmce.su/people/fbp/stl/stlport.html}.
+
+In addition, there are several commercial suppliers of STL implementations;
+ObjectSpace's version supports gcc-2.7.x.
+
+Mumit Khan has produced an ``STL newbie guide'' with lots of information
+on using STL with gcc. See
+
+@file{http://www.xraylith.wisc.edu/~khan/software/stl/STL.newbie.html}
+
+@node STL and string, exceptions, Standard Template Library, User Problems
+@section I'm having problems mixing STL and the standard string class
+
+This is due to a bug in g++ version 2.7.2 and 2.7.2.1; the compiler
+is confused by the operator declarations. There is an easy workaround,
+however; just make sure that the @code{<string>} header is included
+before any STL headers. That is, just say
+
+@example
+#include <string>
+@end example
+
+before any other @code{#include} directives.
+
+Unfortunately, this doesn't solve all problems; you may still have
+difficulty with the relational operators !=, <=, >, and >=, thanks
+to a conflict with the very general definition of these operators
+in function.h. One trick that sometimes works is to try to use ==
+and < in your code instead of the other operators. Another is to
+use a derived class of <string>. The only completely satisfactory
+solution, I'm afraid, is to wait for the new release.
+
+@node exceptions, namespaces, STL and string, User Problems
+@section Problems and limitations with exceptions
+
+Recent g++ versions provide limited support for exceptions. You must
+provide the @code{-fhandle-exceptions} flag to enable exception
+handling. As of version 2.7.2, exceptions may not work properly
+(and you may get odd error messages when compiling) if you turn
+on optimization (the @code{-O} flag).
+
+You must give the @code{-frtti} switch to enable catching
+of derived exception objects with handlers for the base exception class;
+if @code{-frtti} is not given, only exact type matching works.
+
+For exception handling to work with 2.7.0 your CPU must be a SPARC,
+RS6000/PowerPC, 386/486/Pentium, or ARM. Release 2.7.1 added support
+for the Alpha, and ``m68k is rumored to work on some platforms''
+and ``VAX may also work'' (according to Mike Stump).
+@emph{It still doesn't work on HP-PA or MIPS platforms.}
+
+@node namespaces, agreement with standards, exceptions, User Problems
+@section Does g++ support namespaces?
+
+As of version 2.7.2, g++ recognizes the keywords @code{namespace} and
+@code{using}, and there is some rudimentary code present, but almost
+nothing connected with namespaces works yet. It appears that this will
+still be true when 2.8.0 is released.
+
+@node agreement with standards, compiling standard libraries, namespaces, User Problems
+@section What are the differences between g++ and the ARM specification of C++?
+
+@cindex ARM [Annotated C++ Ref Manual]
+@cindex exceptions
+As of version 2.7.0, g++ has exception support on most but not all
+platforms
+(no support on MIPS-based platforms yet), but
+it doesn't work right if optimization is enabled, which means the
+exception
+implementation is still
+not really ready for production use.
+
+
+@cindex mutable
+Some features that the ANSI/ISO standardization committee has voted in
+that don't appear in the ARM are supported, notably the @code{mutable}
+keyword, in version 2.5.x. 2.6.x adds support for the built-in boolean
+type @code{bool}, with constants @code{true} and @code{false}. The
+beginnings of run-time type identification are present, so there are
+more reserved words: @code{typeid}, @code{static_cast},
+@code{reinterpret_cast}, @code{const_cast}, and @code{dynamic_cast}.
+
+@cindex g++ bugs
+As with any beta-test compiler, there are bugs. You can help improve
+the compiler by submitting detailed bug reports.
+
+One of the weakest areas of g++ other than templates is the resolution
+of overloaded functions and operators in complex cases. The usual
+symptom is that in a case where the ARM says that it is ambiguous which
+function should be chosen, g++ chooses one (often the first one
+declared). This is usually not a problem when porting C++ code from
+other compilers to g++, but shows up as errors when code developed under
+g++ is ported to other compilers. (I believe this is no longer a
+significant problem in 2.7.0).
+
+[A full bug list would be very long indeed, so I won't put one here.
+I may add a list of frequently-reported bugs and "non-bugs" like the
+static class members issue mentioned above].
+
+@node compiling standard libraries, debugging on SVR4 systems, agreement with standards, User Problems
+@section Will g++ compile InterViews? The NIH class library? Rogue Wave?
+
+@cindex NIH class library
+@cindex NIHCL with g++
+The NIH class library uses a non-portable, compiler-dependent hack
+to initialize itself, which makes life difficult for g++ users.
+It will not work without modification, and I don't know what modifications
+are required or whether anyone has done them successfully.
+
+In short, it's not going to happen any time soon (previous FAQs referred
+to patches that a new NIHCL release would hopefully contain, but this
+hasn't happened).
+
+@strong{Note:} I thought I saw an item indicating that someone
+@emph{had} patched NIHCL to work with g++. Any pointers?
+
+@cindex InterViews
+I think that as of version 2.5.6, the standard g++ will compile the
+standard 3.1 InterViews completely successfully.
+Note that you'll need the @code{-fno-for-scope} flag
+if you use gcc-2.7.0; with 2.7.2 you may be able to omit this flag
+but you'll get warnings.
+
+@cindex Rogue Wave
+According to Jason Merrill, gcc-2.7.0 and newer works with Rogue
+Wave's @code{tools.h++} class library, but you may want to grab
+@file{ftp://ftp.cygnus.com/pub/g++/Tools.h++-6.1-patch}. Again,
+you'll need the @code{-fno-for-scope} flag since Rogue Wave hasn't
+fixed their code to comply with the new standard yet.
+
+@node debugging on SVR4 systems, debugging problems on Solaris, compiling standard libraries, User Problems
+@section Debugging on SVR4 systems
+@cindex System VR4, debugging
+
+``How do I get debugging to work on my System V Release 4 system?''
+
+@cindex DWARF debug format
+
+Most systems based on System V Release 4 (except Solaris) encode symbolic
+debugging information in a format known as `DWARF'.
+
+Although the GNU C compiler already knows how to write out symbolic debugging
+information in the DWARF format, the GNU C++ compiler does not yet have this
+feature yet. However, work is in progress for DWARF 2 debug support for
+gcc and g++ and will be available in a future release (probably 2.8.0).
+
+@cindex stabs
+@cindex --with-stabs
+
+In the meantime, you @emph{can} get g++ debugging under SVR4 systems by
+configuring gcc with the @code{--with-stabs} option. This causes gcc to
+use an alternate debugging format, one more like that used under SunOS4.
+You won't need to do anything special to GDB; it will always understand
+the ``stabs'' format.
+
+@node debugging problems on Solaris, X11 conflicts with libg++, debugging on SVR4 systems, User Problems
+@section debugging problems on Solaris
+
+``I'm on Solaris, and gdb says it doesn't know about some of my local
+symbols. Help!''
+
+This problem was introduced in gcc 2.7.2; debug symbols for
+locals that aren't declared at the beginning of a block come out in the
+wrong order, and gdb can't find such symbols.
+
+This problem is fixed in gcc-2.7.2.1.
+
+@node X11 conflicts with libg++, assignment to streams, debugging problems on Solaris, User Problems
+@section X11 conflicts with libg++ in definition of String
+@cindex String, conflicts in definition
+
+``X11 and Motif define String, and this conflicts with the String class
+in libg++. How can I use both together?''
+
+One possible method is the following:
+
+@example
+#define String XString
+#include <X11/Intrinsic.h>
+/* include other X11 and Motif headers */
+#undef String
+@end example
+
+and remember to use the correct @code{String} or @code{XString} when
+you declare things later.
+
+@node assignment to streams, , X11 conflicts with libg++, User Problems
+@section Why can't I assign one stream to another?
+
+[ Thanks to Per Bothner and Jerry Schwarz for this section. ]
+
+Assigning one stream to another seems like a reasonable thing to do, but
+it's a bad idea. Usually, this comes up because people want to assign
+to @code{cout}. This is poor style, especially for libraries, and is
+contrary to good object-oriented design. (Libraries that write directly
+to @code{cout} are less flexible, modular, and object-oriented).
+
+The iostream classes do not allow assigning to arbitrary streams, because
+this can violate typing:
+
+@example
+ifstream foo ("foo");
+istrstream str(...);
+foo = str;
+foo->close (); /* Oops! Not defined for istrstream! */
+@end example
+
+@cindex assignment to cout
+
+The original cfront implementation of iostreams by Jerry Schwarz allows
+you to assign to @code{cin}, @code{cout}, @code{cerr}, and @code{clog},
+but this is not part of the draft standard for iostreams and generally
+isn't considered a good idea, so standard-conforming code shouldn't use
+this technique.
+
+The GNU implementation of iostream did not support assigning to
+@code{cin}, @code{cout}, @code{cerr}, and @code{clog}
+for quite a while, but it now does, for backward
+compatibility with cfront iostream (versions 2.6.1 and later of libg++).
+
+The ANSI/ISO C++ Working Paper does provide ways of changing the
+streambuf associated with a stream. Assignment isn't allowed;
+there is an explicit named member that must be used.
+
+However, it is not wise to do this, and the results are confusing. For
+example: @code{fstream::rdbuf} is supposed to return the @emph{original}
+filebuf, not the one you assigned. (This is not yet implemented in GNU
+iostream.) This must be so because @code{fstream::rdbuf} is defined to
+return a @code{filebuf *}.
+
+@node legalities, index, User Problems, Top
+@chapter What are the rules for shipping code built with g++ and libg++?
+@cindex Shipping rules
+@cindex GPL [GNU Public License]
+
+``Is it is possible to distribute programs for profit that are created
+with g++ and use the g++ libraries?''
+
+I am not a lawyer, and this is not legal advice. In any case, I have
+little interest in telling people how to violate the spirit of the
+GNU licenses without violating the letter. This section tells you
+how to comply with the intention of the GNU licenses as best I understand
+them.
+
+@cindex FSF [Free Software Foundation]
+The FSF has no objection to your making money. Its only interest is that
+source code to their programs, and libraries, and to modified versions of
+their programs and libraries, is always available.
+
+The short answer is that you do not need to release the source to
+your program, but you can't just ship a stripped executable either,
+unless you use only the subset of libg++ that includes the iostreams
+classes (see discussion below) or the new libstdc++ library (available
+in libg++ 2.6.2 and later).
+
+Compiling your code with a GNU compiler does not affect its copyright;
+it is still yours. However, in order to ship code that links in a GNU
+library such as libg++ there are certain rules you must follow. The
+rules are described in the file COPYING.LIB that accompanies gcc
+distributions; it is also included in the libg++ distribution.
+See that file for the exact rules. The agreement is called the
+Library GNU Public License or LGPL. It is much "looser" than the
+GNU Public License, or GPL, that covers must GNU programs.
+
+@cindex libg++, shipping code
+Here's the deal: let's say that you use some version of libg++,
+completely unchanged, in your software, and you want to ship only
+a binary form of your code. You can do this, but there are several
+special requirements. If you want to use libg++ but ship only object
+code for your code, you have to ship source for libg++ (or ensure
+somehow that your customer already has the source for the exact
+version you are using), and ship your application in linkable form.
+You cannot forbid your customer from reverse-engineering or extending
+your program by exploiting its linkable form.
+
+@cindex libg++, modifying
+Furthermore, if you modify libg++ itself, you must provide source
+for your modifications (making a derived class does not count as
+modifying the library -- that is "a work that uses the library").
+
+@cindex special copying conditions for iostreams
+For certain portions of libg++ that implement required parts of the C++
+language (such as iostreams and other standard classes), the FSF has
+loosened the copyright requirement still more by adding the ``special
+exception'' clause, which reads as follows:
+
+@quotation
+As a special exception, if you link this library with files
+compiled with GCC to produce an executable, this does not cause
+the resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why
+the executable file might be covered by the GNU General Public License.
+@end quotation
+
+If your only use of libg++ uses code with this exception, you may ship
+stripped executables or license your executables under different
+conditions without fear of violating an FSF copyright. It is the intent
+of FSF and Cygnus that, as the other classes required by the ANSI/ISO
+draft standard are developed, these will also be placed under this
+``special exception'' license.
+The code in the new libstdc++ library, intended to implement standard
+classes as defined by ANSI/ISO, is also licensed this way.
+
+To avoid coming under the influence of the LGPL, you can link with
+@file{-liostream} rather than @file{-lg++} (for version 2.6.x and
+earlier), or @file{-lstdc++} now that it is available. In version 2.7.0
+all the standard classes are in @file{-lstdc++}; you can do the link
+step with @code{c++} instead of @code{g++} to search only the
+@file{-lstdc++} library and avoid the LGPL'ed code in @file{-lg++}.
+
+If you wish to discuss legal issues connected with GNU software on the
+net, please use @file{gnu.misc.discuss}, not the technical newsgroups.
+
+@node index, , legalities, Top
+@comment node-name, next, previous, up
+@appendix Concept Index
+
+@printindex cp
+
+@page
+@contents
+@bye
diff --git a/gcc/cp/g++spec.c b/gcc/cp/g++spec.c
index d41c516f64e..66b27565766 100644
--- a/gcc/cp/g++spec.c
+++ b/gcc/cp/g++spec.c
@@ -1,9 +1,38 @@
+/* Specific flags and argument handling of the C++ front-end.
+ Copyright (C) 1996, 1997 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.
+
+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 <sys/types.h>
#include <stdio.h>
-#include "config.h"
#include "gansidecl.h"
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
/* This bit is set if we saw a `-xfoo' language specification. */
#define LANGSPEC (1<<1)
/* This bit is set if they did `-lm' or `-lmath'. */
diff --git a/gcc/cp/gxxint.texi b/gcc/cp/gxxint.texi
index 5fe34b0a6df..5f7346561c5 100644
--- a/gcc/cp/gxxint.texi
+++ b/gcc/cp/gxxint.texi
@@ -238,6 +238,13 @@ The functions @code{convert_to_aggr} and @code{build_method_call} use
a given candidate function (that's how we get the list of candidates for
@code{ideal_candidate}).
+@item The Explicit Keyword
+
+The use of @code{explicit} on a constructor is used by @code{grokdeclarator}
+to set the field @code{DECL_NONCONVERTING_P}. That value is used by
+@code{build_method_call} and @code{build_user_type_conversion_1} to decide
+if a particular constructor should be used as a candidate for conversions.
+
@end itemize
@node Glossary, Macros, Implementation Specifics, Top
@@ -1185,29 +1192,28 @@ arrays. Exception specifications are now handled. Thrown objects are
now cleaned up all the time. We can now tell if we have an active
exception being thrown or not (__eh_type != 0). We use this to call
terminate if someone does a throw; without there being an active
-exception object. uncaught_exception () works.
+exception object. uncaught_exception () works. Exception handling
+should work right if you optimize. Exception handling should work with
+-fpic or -fPIC.
The below points out some flaws in g++'s exception handling, as it now
stands.
Only exact type matching or reference matching of throw types works when
--fno-rtti is used. Only works on a SPARC (like Suns), SPARClite, i386,
-arm, rs6000, PowerPC, Alpha, mips, VAX, m68k and z8k machines. Partial
-support is in for all other machines, but a stack unwinder called
-__unwind_function has to be written, and added to libgcc2 for them. The
-new EH code doesn't rely upon the __unwind_function for C++ code,
-instead it creates per function unwinders right inside the function,
-unfortunately, on many platforms the definition of RETURN_ADDR_RTX in
-the tm.h file for the machine port is wrong. The HPPA has a brain dead
-abi that prevents exception handling from just working. See below for
-details on __unwind_function. Don't expect exception handling to work
-right if you optimize, in fact the compiler will probably core dump.
-RTL_EXPRs for EH cond variables for && and || exprs should probably be
-wrapped in UNSAVE_EXPRs, and RTL_EXPRs tweaked so that they can be
-unsaved, and the UNSAVE_EXPR code should be in the backend, or
-alternatively, UNSAVE_EXPR should be ripped out and exactly one
-finalization allowed to be expanded by the backend. I talked with
-kenner about this, and we have to allow multiple expansions.
+-fno-rtti is used. Only works on a SPARC (like Suns) (both -mflat and
+-mno-flat models work), SPARClite, Hitachi SH, i386, arm, rs6000,
+PowerPC, Alpha, mips, VAX, m68k and z8k machines. SPARC v9 may not
+work. HPPA is mostly done, but throwing between a shared library and
+user code doesn't yet work. Some targets have support for data-driven
+unwinding. Partial support is in for all other machines, but a stack
+unwinder called __unwind_function has to be written, and added to
+libgcc2 for them. The new EH code doesn't rely upon the
+__unwind_function for C++ code, instead it creates per function
+unwinders right inside the function, unfortunately, on many platforms
+the definition of RETURN_ADDR_RTX in the tm.h file for the machine port
+is wrong. See below for details on __unwind_function. RTL_EXPRs for EH
+cond variables for && and || exprs should probably be wrapped in
+UNSAVE_EXPRs, and RTL_EXPRs tweaked so that they can be unsaved.
We only do pointer conversions on exception matching a la 15.3 p2 case
3: `A handler with type T, const T, T&, or const T& is a match for a
@@ -1397,6 +1403,33 @@ things: first, a way to figure out where the frame pointer was stored,
and second, a functional @code{__builtin_return_address} implementation
for except.c to be able to use it.
+Or just support DWARF 2 unwind info.
+
+@subsection New Backend Exception Support
+
+This subsection discusses various aspects of the design of the
+data-driven model being implemented for the exception handling backend.
+
+The goal is to generate enough data during the compilation of user code,
+such that we can dynamically unwind through functions at run time with a
+single routine (@code{__throw}) that lives in libgcc.a, built by the
+compiler, and dispatch into associated exception handlers.
+
+This information is generated by the DWARF 2 debugging backend, and
+includes all of the information __throw needs to unwind an arbitrary
+frame. It specifies where all of the saved registers and the return
+address can be found at any point in the function.
+
+Major disadvantages when enabling exceptions are:
+
+@itemize @bullet
+@item
+Code that uses caller saved registers, can't, when flow can be
+transferred into that code from an exception handler. In high performance
+code this should not usually be true, so the effects should be minimal.
+
+@end itemize
+
@subsection Backend Exception Support
The backend must be extended to fully support exceptions. Right now
@@ -1445,7 +1478,7 @@ This can be passed in many ways, currently a tree is used. Another
possibility would be insns for the handler, or a label that denotes a
handler. I have a feeling insns might be the the best way to pass it.
Semantics are, if an exception is thrown inside the region, control is
-transfered unconditionally to the handler. If control passes through
+transferred unconditionally to the handler. If control passes through
the handler, then the backend is to rethrow the exception, in the
context of the end of the original region. The handler is protected by
the conventional mechanisms; it is the frontend's responsibility to
@@ -1643,12 +1676,23 @@ For example @code{Foo::\u0319::Bar} is encoded as
@subsection Templates
-A template instantiation is encoded as the letter @samp{t},
+A class template instantiation is encoded as the letter @samp{t},
followed by the encoding of the template name, followed
the number of template parameters, followed by encoding of the template
parameters. If a template parameter is a type, it is written
as a @samp{Z} followed by the encoding of the type.
+A function template specialization (either an instantiation or an
+explicit specialization) is encoded by an @samp{H} followed by the
+encoding of the template parameters, as described above, followed by
+an @samp{_}, the encoding of the argument types template function (not the
+specialization), another @samp{_}, and the return type. (Like the
+argument types, the return type is the return type of the function
+template, not the specialization.) Template parameters in the argument
+and return types are encoded by an @samp{X} for type parameters, or a
+@samp{Y} for constant parameters, and an index indicating their position
+in the template parameter list declaration.
+
@subsection Arrays
C++ array types are mangled by emitting @samp{A}, followed by
@@ -1694,6 +1738,9 @@ Encodes the C++ and Java @code{float} types.
@item F
Used to indicate a function type.
+@item H
+Used to indicate a template function.
+
@item i
Encodes the C++ and Java @code{int} types.
@@ -1749,6 +1796,12 @@ Encodes the C++ @code{wchar_t} type, and the Java @code{char} types.
@item x
Encodes the GNU C++ @code{long long} type, and the Java @code{long} type.
+@item X
+Encodes a template type parameter, when part of a function type.
+
+@item Y
+Encodes a template constant parameter, when part of a function type.
+
@item Z
Used for template type parameters.
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index 19853396acc..576c937c0f7 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -1,5 +1,5 @@
/* Handle initialization things in C++.
- Copyright (C) 1987, 89, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1987, 89, 92-96, 1997 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com)
This file is part of GNU CC.
@@ -22,12 +22,16 @@ Boston, MA 02111-1307, USA. */
/* High-level class interface. */
#include "config.h"
+#include <stdio.h>
#include "tree.h"
#include "rtl.h"
#include "cp-tree.h"
#include "flags.h"
#include "output.h"
#include "except.h"
+#include "expr.h"
+
+extern void compiler_error ();
/* In C++, structures with well-defined constructors are initialized by
those constructors, unasked. CURRENT_BASE_INIT_LIST
@@ -40,15 +44,23 @@ Boston, MA 02111-1307, USA. */
line. Perhaps this was not intended. */
tree current_base_init_list, current_member_init_list;
-void emit_base_init ();
-void check_base_init ();
-static void expand_aggr_vbase_init ();
-void expand_member_init ();
-void expand_aggr_init ();
-
-static void expand_aggr_init_1 PROTO((tree, tree, tree, tree, int, int));
+static void expand_aggr_vbase_init_1 PROTO((tree, tree, tree, tree));
+static void expand_aggr_vbase_init PROTO((tree, tree, tree, tree));
+static void expand_aggr_init_1 PROTO((tree, tree, tree, tree, int,
+ int));
+static void expand_default_init PROTO((tree, tree, tree, tree, int,
+ int));
+static tree build_vec_delete_1 PROTO((tree, tree, tree, tree, tree,
+ int));
+static void perform_member_init PROTO((tree, tree, tree, int));
+static void sort_base_init PROTO((tree, tree *, tree *));
+static tree build_builtin_call PROTO((tree, tree, tree));
+static tree build_array_eh_cleanup PROTO((tree, tree, tree));
+static int member_init_ok_or_else PROTO((tree, tree, char *));
static void expand_virtual_init PROTO((tree, tree));
-tree expand_vec_init ();
+static tree sort_member_init PROTO((tree));
+static tree build_partial_cleanup_for PROTO((tree));
+static tree initializing_context PROTO((tree));
/* Cache _builtin_new and _builtin_delete exprs. */
static tree BIN, BID, BIVN, BIVD;
@@ -161,7 +173,7 @@ perform_member_init (member, name, init, explicit)
/* Since `init' is already a TREE_LIST on the current_member_init_list,
only build it into one if we aren't already a list. */
if (init != NULL_TREE && TREE_CODE (init) != TREE_LIST)
- init = build_tree_list (NULL_TREE, init);
+ init = build_expr_list (NULL_TREE, init);
decl = build_component_ref (current_class_ref, name, NULL_TREE, explicit);
@@ -477,7 +489,7 @@ build_partial_cleanup_for (binfo)
{
return build_scoped_method_call
(current_class_ref, binfo, dtor_identifier,
- build_tree_list (NULL_TREE, integer_zero_node));
+ build_expr_list (NULL_TREE, integer_zero_node));
}
/* Perform whatever initializations have yet to be done on the base
@@ -1254,7 +1266,17 @@ expand_default_init (binfo, true_exp, exp, init, alias_this, flags)
&& TREE_CODE (init) == TARGET_EXPR && TREE_TYPE (init) == type))
init = ocp_convert (type, init, CONV_IMPLICIT|CONV_FORCE_TEMP, flags);
- expand_assignment (exp, init, 0, 0);
+ if (TREE_CODE (init) == TRY_CATCH_EXPR)
+ /* We need to protect the initialization of a catch parm
+ with a call to terminate(), which shows up as a TRY_CATCH_EXPR
+ around the TARGET_EXPR for the copy constructor. See
+ expand_start_catch_block. */
+ TREE_OPERAND (init, 0) = build (INIT_EXPR, TREE_TYPE (exp), exp,
+ TREE_OPERAND (init, 0));
+ else
+ init = build (INIT_EXPR, TREE_TYPE (exp), exp, init);
+ TREE_SIDE_EFFECTS (init) = 1;
+ expand_expr_stmt (init);
return;
}
@@ -1275,14 +1297,14 @@ expand_default_init (binfo, true_exp, exp, init, alias_this, flags)
return;
}
else
- parms = build_tree_list (NULL_TREE, init);
+ parms = build_expr_list (NULL_TREE, init);
if (TYPE_USES_VIRTUAL_BASECLASSES (type))
{
if (true_exp == exp)
- parms = tree_cons (NULL_TREE, integer_one_node, parms);
+ parms = expr_tree_cons (NULL_TREE, integer_one_node, parms);
else
- parms = tree_cons (NULL_TREE, integer_zero_node, parms);
+ parms = expr_tree_cons (NULL_TREE, integer_zero_node, parms);
flags |= LOOKUP_HAS_IN_CHARGE;
}
@@ -1422,7 +1444,7 @@ expand_aggr_init_1 (binfo, true_exp, exp, init, alias_this, flags)
/* Unify the initialization targets. */
DECL_RTL (TREE_OPERAND (init, 0)) = DECL_RTL (exp);
else
- DECL_RTL (TREE_OPERAND (init, 0)) = expand_expr (exp, NULL_RTX, VOIDmode, 0);
+ DECL_RTL (TREE_OPERAND (init, 0)) = expand_expr (exp, NULL_RTX, VOIDmode, EXPAND_NORMAL);
expand_expr_stmt (init);
return;
@@ -1461,7 +1483,7 @@ expand_aggr_init_1 (binfo, true_exp, exp, init, alias_this, flags)
if (exp == DECL_RESULT (current_function_decl))
DECL_INITIAL (exp) = init;
TREE_SIDE_EFFECTS (init) = 1;
- expand_expr (init, const0_rtx, VOIDmode, 0);
+ expand_expr (init, const0_rtx, VOIDmode, EXPAND_NORMAL);
free_temp_slots ();
return;
}
@@ -1537,7 +1559,7 @@ expand_aggr_init_1 (binfo, true_exp, exp, init, alias_this, flags)
{
/* See if there is a constructor for``type'' that takes a
``ttype''-typed object. */
- tree parms = build_tree_list (NULL_TREE, init);
+ tree parms = build_expr_list (NULL_TREE, init);
tree as_cons = NULL_TREE;
if (TYPE_HAS_CONSTRUCTOR (type))
as_cons = build_method_call (exp, ctor_identifier,
@@ -1670,7 +1692,7 @@ build_member_call (type, name, parmlist)
tree type, name, parmlist;
{
tree t;
- tree method_name = name;
+ tree method_name;
int dtor = 0;
int dont_use_this = 0;
tree basetype_path, decl;
@@ -1679,6 +1701,11 @@ build_member_call (type, name, parmlist)
return build_x_function_call (do_scoped_id (name, 0), parmlist,
current_class_ref);
+ if (TREE_CODE (name) != TEMPLATE_ID_EXPR)
+ method_name = name;
+ else
+ method_name = TREE_OPERAND (name, 0);
+
if (TREE_CODE (method_name) == BIT_NOT_EXPR)
{
method_name = TREE_OPERAND (method_name, 0);
@@ -1747,7 +1774,10 @@ build_member_call (type, name, parmlist)
|| method_name == constructor_name_full (type))
return build_functional_cast (type, parmlist);
if (t = lookup_fnfields (basetype_path, method_name, 0))
- return build_method_call (decl, method_name, parmlist, basetype_path,
+ return build_method_call (decl,
+ TREE_CODE (name) == TEMPLATE_ID_EXPR
+ ? name : method_name,
+ parmlist, basetype_path,
LOOKUP_NORMAL|LOOKUP_NONVIRTUAL);
if (TREE_CODE (name) == IDENTIFIER_NODE
&& ((t = lookup_field (TYPE_BINFO (type), name, 1, 0))))
@@ -2111,7 +2141,7 @@ resolve_offset_ref (exp)
member = cp_convert (ptrdiff_type_node,
build_unary_op (ADDR_EXPR, member, 0));
- /* Pointer to data mebers are offset by one, so that a null
+ /* Pointer to data members are offset by one, so that a null
pointer with a real value of 0 is distinguishable from an
offset of the first member of a structure. */
member = build_binary_op (MINUS_EXPR, member,
@@ -2422,16 +2452,6 @@ build_new (placement, decl, init, use_global_new)
return error_mark_node;
}
- /* If the first placement arg is of type nothrow_t, it's allowed to
- return 0 on allocation failure. */
- nothrow = (placement && TREE_VALUE (placement)
- && TREE_TYPE (TREE_VALUE (placement))
- && IS_AGGR_TYPE (TREE_TYPE (TREE_VALUE (placement)))
- && (TYPE_IDENTIFIER (TREE_TYPE (TREE_VALUE (placement)))
- == get_identifier ("nothrow_t")));
-
- check_new = flag_check_new || nothrow;
-
#if 1
/* Get a little extra space to store a couple of things before the new'ed
array, if this isn't the default placement new. */
@@ -2463,18 +2483,9 @@ build_new (placement, decl, init, use_global_new)
}
/* Allocate the object. */
- if (! use_global_new && TYPE_LANG_SPECIFIC (true_type)
- && (TYPE_GETS_NEW (true_type) & (1 << has_array)))
- rval = build_opfncall (code, LOOKUP_NORMAL,
- build_pointer_type (true_type), size, placement);
- else if (placement)
- {
- rval = build_opfncall (code, LOOKUP_GLOBAL|LOOKUP_COMPLAIN,
- ptr_type_node, size, placement);
- rval = cp_convert (build_pointer_type (true_type), rval);
- }
- else if (! has_array && flag_this_is_variable > 0
- && TYPE_NEEDS_CONSTRUCTING (true_type) && init != void_type_node)
+
+ if (! has_array && ! placement && flag_this_is_variable > 0
+ && TYPE_NEEDS_CONSTRUCTING (true_type) && init != void_type_node)
{
if (init == NULL_TREE || TREE_CODE (init) == TREE_LIST)
rval = NULL_TREE;
@@ -2486,13 +2497,46 @@ build_new (placement, decl, init, use_global_new)
}
else
{
- rval = build_builtin_call (build_pointer_type (true_type),
- has_array ? BIVN : BIN,
- build_tree_list (NULL_TREE, size));
- TREE_CALLS_NEW (rval) = 1;
+ rval = build_op_new_call
+ (code, true_type, expr_tree_cons (NULL_TREE, size, placement),
+ LOOKUP_NORMAL | (use_global_new * LOOKUP_GLOBAL));
+ rval = cp_convert (build_pointer_type (true_type), rval);
+ }
+
+ /* unless an allocation function is declared with an empty excep-
+ tion-specification (_except.spec_), throw(), it indicates failure to
+ allocate storage by throwing a bad_alloc exception (clause _except_,
+ _lib.bad.alloc_); it returns a non-null pointer otherwise If the allo-
+ cation function is declared with an empty exception-specification,
+ throw(), it returns null to indicate failure to allocate storage and a
+ non-null pointer otherwise.
+
+ So check for a null exception spec on the op new we just called. */
+
+ nothrow = 0;
+ if (rval)
+ {
+ /* The CALL_EXPR. */
+ tree t = TREE_OPERAND (rval, 0);
+ /* The function. */
+ t = TREE_OPERAND (TREE_OPERAND (t, 0), 0);
+ t = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (t));
+
+ if (t && TREE_VALUE (t) == NULL_TREE)
+ nothrow = 1;
}
+ check_new = flag_check_new || nothrow;
- if (check_new && rval)
+ if (flag_exceptions && rval)
+ {
+ /* This must last longer so we can use it in the cleanup.
+ The subexpressions don't need to last, because we won't look at
+ them when expanding the cleanup. */
+ int yes = suspend_momentary ();
+ alloc_expr = rval = save_expr (rval);
+ resume_momentary (yes);
+ }
+ else if (check_new && rval)
alloc_expr = rval = save_expr (rval);
else
alloc_expr = NULL_TREE;
@@ -2518,8 +2562,8 @@ build_new (placement, decl, init, use_global_new)
rval = cp_convert (build_pointer_type (true_type), rval);
TREE_CALLS_NEW (rval) = 1;
TREE_SIDE_EFFECTS (rval) = 1;
- rval = build_compound_expr (tree_cons (NULL_TREE, exp1,
- build_tree_list (NULL_TREE, rval)));
+ rval = build_compound_expr (expr_tree_cons (NULL_TREE, exp1,
+ build_expr_list (NULL_TREE, rval)));
}
if (rval == error_mark_node)
@@ -2570,7 +2614,7 @@ build_new (placement, decl, init, use_global_new)
if (rval && TYPE_USES_VIRTUAL_BASECLASSES (true_type))
{
- init = tree_cons (NULL_TREE, integer_one_node, init);
+ init = expr_tree_cons (NULL_TREE, integer_one_node, init);
flags |= LOOKUP_HAS_IN_CHARGE;
}
@@ -2630,7 +2674,7 @@ build_new (placement, decl, init, use_global_new)
do_pending_stack_adjust ();
start_sequence_for_rtl_expr (xval);
emit_note (0, -1);
- rtxval = expand_expr (alloc_expr, NULL_RTX, VOIDmode, 0);
+ rtxval = expand_expr (alloc_expr, NULL_RTX, VOIDmode, EXPAND_NORMAL);
do_pending_stack_adjust ();
TREE_SIDE_EFFECTS (xval) = 1;
RTL_EXPR_SEQUENCE (xval) = get_insns ();
@@ -2675,13 +2719,47 @@ build_new (placement, decl, init, use_global_new)
rval = xval;
}
#endif
+
+ /* If any part of the object initialization terminates by throwing
+ an exception and the new-expression does not contain a
+ new-placement, then the deallocation function is called to free
+ the memory in which the object was being constructed. */
+ if (flag_exceptions && alloc_expr)
+ {
+ enum tree_code dcode = has_array? VEC_DELETE_EXPR : DELETE_EXPR;
+ tree cleanup, args = NULL_TREE;
+ int flags = LOOKUP_NORMAL | (use_global_new * LOOKUP_GLOBAL);
+
+ /* All cleanups must last longer than normal. */
+ int yes = suspend_momentary ();
+
+ if (placement)
+ flags |= LOOKUP_SPECULATIVELY;
+
+ /* Copy size to the saveable obstack. */
+ size = copy_node (size);
+
+ cleanup = build_op_delete_call (dcode, alloc_expr, size, flags);
+
+ resume_momentary (yes);
+
+ if (cleanup)
+ {
+ /* FIXME: this is a workaround for a crash due to overlapping
+ exception regions. Cleanups shouldn't really happen here. */
+ rval = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (rval), rval);
+
+ rval = build (TRY_CATCH_EXPR, TREE_TYPE (rval), rval, cleanup);
+ rval = build (COMPOUND_EXPR, TREE_TYPE (rval), alloc_expr, rval);
+ }
+ }
}
else if (TYPE_READONLY (true_type))
cp_error ("uninitialized const in `new' of `%#T'", true_type);
done:
- if (alloc_expr && rval != alloc_expr)
+ if (check_new && alloc_expr && rval != alloc_expr)
{
/* Did we modify the storage? */
tree ifexp = build_binary_op (NE_EXPR, alloc_expr,
@@ -2697,7 +2775,7 @@ build_new (placement, decl, init, use_global_new)
if (pending_sizes)
rval = build_compound_expr (chainon (pending_sizes,
- build_tree_list (NULL_TREE, rval)));
+ build_expr_list (NULL_TREE, rval)));
return rval;
}
@@ -2765,7 +2843,7 @@ build_vec_delete_1 (base, maxindex, type, auto_delete_vec, auto_delete,
1));
/* This is the real size */
virtual_size = size_binop (PLUS_EXPR, virtual_size, BI_header_size);
- body = build_tree_list (NULL_TREE,
+ body = build_expr_list (NULL_TREE,
build_x_delete (ptype, base_tbd,
2 | use_global_delete,
virtual_size));
@@ -2777,24 +2855,24 @@ build_vec_delete_1 (base, maxindex, type, auto_delete_vec, auto_delete,
else
body = NULL_TREE;
- body = tree_cons (NULL_TREE,
+ body = expr_tree_cons (NULL_TREE,
build_delete (ptype, tbase, auto_delete,
LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 1),
body);
- body = tree_cons (NULL_TREE,
+ body = expr_tree_cons (NULL_TREE,
build_modify_expr (tbase, NOP_EXPR, build (MINUS_EXPR, ptype, tbase, size_exp)),
body);
- body = tree_cons (NULL_TREE,
+ body = expr_tree_cons (NULL_TREE,
build (EXIT_EXPR, void_type_node,
build (EQ_EXPR, boolean_type_node, base, tbase)),
body);
loop = build (LOOP_EXPR, void_type_node, build_compound_expr (body));
- loop = tree_cons (NULL_TREE, tbase_init,
- tree_cons (NULL_TREE, loop, NULL_TREE));
+ loop = expr_tree_cons (NULL_TREE, tbase_init,
+ expr_tree_cons (NULL_TREE, loop, NULL_TREE));
loop = build_compound_expr (loop);
no_destructor:
@@ -2835,8 +2913,8 @@ build_vec_delete_1 (base, maxindex, type, auto_delete_vec, auto_delete,
if (loop && deallocate_expr != integer_zero_node)
{
- body = tree_cons (NULL_TREE, loop,
- tree_cons (NULL_TREE, deallocate_expr, NULL_TREE));
+ body = expr_tree_cons (NULL_TREE, loop,
+ expr_tree_cons (NULL_TREE, deallocate_expr, NULL_TREE));
body = build_compound_expr (body);
}
else
@@ -3082,13 +3160,15 @@ expand_vec_init (decl, base, maxindex, init, from_array)
TREE_TYPE (cleanup) = void_type_node;
RTL_EXPR_RTL (cleanup) = const0_rtx;
TREE_SIDE_EFFECTS (cleanup) = 1;
+ do_pending_stack_adjust ();
start_sequence_for_rtl_expr (cleanup);
e1 = build_array_eh_cleanup
(rval,
build_binary_op (MINUS_EXPR, maxindex, iterator, 1),
type);
- expand_expr (e1, const0_rtx, VOIDmode, 0);
+ expand_expr (e1, const0_rtx, VOIDmode, EXPAND_NORMAL);
+ do_pending_stack_adjust ();
RTL_EXPR_SEQUENCE (cleanup) = get_insns ();
end_sequence ();
@@ -3130,16 +3210,10 @@ build_x_delete (type, addr, which_delete, virtual_size)
{
int use_global_delete = which_delete & 1;
int use_vec_delete = !!(which_delete & 2);
- tree rval;
enum tree_code code = use_vec_delete ? VEC_DELETE_EXPR : DELETE_EXPR;
+ int flags = LOOKUP_NORMAL | (use_global_delete * LOOKUP_GLOBAL);
- if (! use_global_delete && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
- && (TYPE_GETS_DELETE (TREE_TYPE (type)) & (1 << use_vec_delete)))
- rval = build_opfncall (code, LOOKUP_NORMAL, addr, virtual_size, NULL_TREE);
- else
- rval = build_builtin_call (void_type_node, use_vec_delete ? BIVD : BID,
- build_tree_list (NULL_TREE, addr));
- return rval;
+ return build_op_delete_call (code, addr, virtual_size, flags);
}
/* Generate a call to a destructor. TYPE is the type to cast ADDR to.
@@ -3189,7 +3263,7 @@ build_delete (type, addr, auto_delete, flags, use_global_delete)
{
/* Call the builtin operator delete. */
return build_builtin_call (void_type_node, BID,
- build_tree_list (NULL_TREE, addr));
+ build_expr_list (NULL_TREE, addr));
}
if (TREE_SIDE_EFFECTS (addr))
addr = save_expr (addr);
@@ -3236,18 +3310,9 @@ build_delete (type, addr, auto_delete, flags, use_global_delete)
if (auto_delete == integer_zero_node)
return void_zero_node;
- /* Pass the size of the object down to the operator delete() in
- addition to the ADDR. */
- if (TYPE_GETS_REG_DELETE (type) && !use_global_delete)
- {
- tree virtual_size = c_sizeof_nowarn (type);
- return build_opfncall (DELETE_EXPR, LOOKUP_NORMAL, addr,
- virtual_size, NULL_TREE);
- }
-
- /* Call the builtin operator delete. */
- return build_builtin_call (void_type_node, BID,
- build_tree_list (NULL_TREE, addr));
+ return build_op_delete_call
+ (DELETE_EXPR, addr, c_sizeof_nowarn (type),
+ LOOKUP_NORMAL | (use_global_delete * LOOKUP_GLOBAL));
}
/* Below, we will reverse the order in which these calls are made.
@@ -3264,7 +3329,7 @@ build_delete (type, addr, auto_delete, flags, use_global_delete)
tree cond = fold (build (BIT_AND_EXPR, integer_type_node,
auto_delete, integer_one_node));
tree call = build_builtin_call
- (void_type_node, BID, build_tree_list (NULL_TREE, addr));
+ (void_type_node, BID, build_expr_list (NULL_TREE, addr));
cond = fold (build (COND_EXPR, void_type_node, cond,
call, void_zero_node));
@@ -3278,7 +3343,7 @@ build_delete (type, addr, auto_delete, flags, use_global_delete)
passed_auto_delete = auto_delete;
expr = build_method_call
- (ref, dtor_identifier, build_tree_list (NULL_TREE, passed_auto_delete),
+ (ref, dtor_identifier, build_expr_list (NULL_TREE, passed_auto_delete),
NULL_TREE, flags);
if (do_delete)
@@ -3317,14 +3382,14 @@ build_delete (type, addr, auto_delete, flags, use_global_delete)
cond = build (COND_EXPR, void_type_node,
build (BIT_AND_EXPR, integer_type_node, auto_delete, integer_one_node),
build_builtin_call (void_type_node, BID,
- build_tree_list (NULL_TREE, addr)),
+ build_expr_list (NULL_TREE, addr)),
void_zero_node);
}
else
cond = NULL_TREE;
if (cond)
- exprstmt = build_tree_list (NULL_TREE, cond);
+ exprstmt = build_expr_list (NULL_TREE, cond);
if (base_binfo
&& ! TREE_VIA_VIRTUAL (base_binfo)
@@ -3339,8 +3404,8 @@ build_delete (type, addr, auto_delete, flags, use_global_delete)
expr = build_scoped_method_call
(ref, base_binfo, dtor_identifier,
- build_tree_list (NULL_TREE, this_auto_delete));
- exprstmt = tree_cons (NULL_TREE, expr, exprstmt);
+ build_expr_list (NULL_TREE, this_auto_delete));
+ exprstmt = expr_tree_cons (NULL_TREE, expr, exprstmt);
}
/* Take care of the remaining baseclasses. */
@@ -3353,9 +3418,9 @@ build_delete (type, addr, auto_delete, flags, use_global_delete)
expr = build_scoped_method_call
(ref, base_binfo, dtor_identifier,
- build_tree_list (NULL_TREE, integer_zero_node));
+ build_expr_list (NULL_TREE, integer_zero_node));
- exprstmt = tree_cons (NULL_TREE, expr, exprstmt);
+ exprstmt = expr_tree_cons (NULL_TREE, expr, exprstmt);
}
for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
@@ -3367,7 +3432,7 @@ build_delete (type, addr, auto_delete, flags, use_global_delete)
tree this_member = build_component_ref (ref, DECL_NAME (member), NULL_TREE, 0);
tree this_type = TREE_TYPE (member);
expr = build_delete (this_type, this_member, integer_two_node, flags, 0);
- exprstmt = tree_cons (NULL_TREE, expr, exprstmt);
+ exprstmt = expr_tree_cons (NULL_TREE, expr, exprstmt);
}
}
@@ -3394,7 +3459,7 @@ build_vbase_delete (type, decl)
{
tree this_addr = convert_force (build_pointer_type (BINFO_TYPE (vbases)),
addr, 0);
- result = tree_cons (NULL_TREE,
+ result = expr_tree_cons (NULL_TREE,
build_delete (TREE_TYPE (this_addr), this_addr,
integer_zero_node,
LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 0),
diff --git a/gcc/cp/input.c b/gcc/cp/input.c
index 923f27c9591..cb9dfa8b71f 100644
--- a/gcc/cp/input.c
+++ b/gcc/cp/input.c
@@ -33,9 +33,6 @@ Boston, MA 02111-1307, USA. */
extern FILE *finput;
-struct pending_input *save_pending_input ();
-void restore_pending_input ();
-
struct input_source {
/* saved string */
char *str;
@@ -62,6 +59,17 @@ extern int lineno;
#define inline
#endif
+extern void feed_input PROTO((char *, int));
+extern void put_input PROTO((int));
+extern void put_back PROTO((int));
+extern int getch PROTO((void));
+extern int input_redirected PROTO((void));
+
+static inline struct input_source * allocate_input PROTO((void));
+static inline void free_input PROTO((struct input_source *));
+static inline void end_input PROTO((void));
+static inline int sub_getch PROTO((void));
+
static inline struct input_source *
allocate_input ()
{
@@ -150,7 +158,13 @@ sub_getch ()
if (input->offset >= input->length)
{
my_friendly_assert (putback_char == -1, 223);
- return EOF;
+ ++(input->offset);
+ if (input->offset - input->length < 64)
+ return EOF;
+
+ /* We must be stuck in an error-handling rule; give up. */
+ end_input ();
+ return getch ();
}
return (unsigned char)input->str[input->offset++];
}
diff --git a/gcc/cp/lang-options.h b/gcc/cp/lang-options.h
index 707282dae88..045584965f8 100644
--- a/gcc/cp/lang-options.h
+++ b/gcc/cp/lang-options.h
@@ -48,8 +48,12 @@ Boston, MA 02111-1307, USA. */
"-fno-external-templates",
"-ffor-scope",
"-fno-for-scope",
+ "-fguiding-decls",
+ "-fno-guiding-decls",
"-fgnu-keywords",
"-fno-gnu-keywords",
+ "-fhandle-exceptions",
+ "-fno-handle-exceptions",
"-fhandle-signatures",
"-fno-handle-signatures",
"-fhuge-objects",
@@ -62,6 +66,7 @@ Boston, MA 02111-1307, USA. */
"-fno-labels-ok",
"-fmemoize-lookups",
"-fno-memoize-lookups",
+ "-fname-mangling-version-",
"-fnonnull-objects",
"-fno-nonnull-objects",
"-foperator-names",
@@ -104,3 +109,7 @@ Boston, MA 02111-1307, USA. */
"-Wno-pmf-conversions",
"-Weffc++",
"-Wno-effc++",
+ "-Wsign-promo",
+ "-Wno-sign-promo",
+ "-Wold-style-cast",
+ "-Wno-old-style-cast",
diff --git a/gcc/cp/lang-specs.h b/gcc/cp/lang-specs.h
index 11f0db28cb8..381bec56ecb 100644
--- a/gcc/cp/lang-specs.h
+++ b/gcc/cp/lang-specs.h
@@ -32,7 +32,7 @@ Boston, MA 02111-1307, USA. */
%{C:%{!E:%eGNU C++ does not support -C without using -E}}\
%{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
-undef -D__GNUC__=%v1 -D__GNUG__=%v1 -D__cplusplus -D__GNUC_MINOR__=%v2\
- %{ansi:-trigraphs -$ -D__STRICT_ANSI__} %{!undef:%{!ansi:%p} %P}\
+ %{ansi:-trigraphs -D__STRICT_ANSI__} %{!undef:%{!ansi:%p} %P}\
%{!fno-exceptions:-D__EXCEPTIONS}\
%c %{O*:%{!O0:-D__OPTIMIZE__}} %{trigraphs}\
%{g*} %{W*} %{w} %{pedantic*} %{H} %{d*} %C %{D*} %{U*} %{i*} %Z\
diff --git a/gcc/cp/lex.c b/gcc/cp/lex.c
index 0e5e13e2b26..f634b213505 100644
--- a/gcc/cp/lex.c
+++ b/gcc/cp/lex.c
@@ -1,5 +1,5 @@
/* Separate lexical analyzer for GNU C++.
- Copyright (C) 1987, 89, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1987, 89, 92-96, 1997 Free Software Foundation, Inc.
Hacked by Michael Tiemann (tiemann@cygnus.com)
This file is part of GNU CC.
@@ -25,11 +25,11 @@ Boston, MA 02111-1307, USA. */
/* Cause the `yydebug' variable to be defined. */
#define YYDEBUG 1
+#include "config.h"
#include <sys/types.h>
#include <stdio.h>
#include <errno.h>
#include <setjmp.h>
-#include "config.h"
#include "input.h"
#include "tree.h"
#include "lex.h"
@@ -39,11 +39,33 @@ Boston, MA 02111-1307, USA. */
#include "obstack.h"
#include "c-pragma.h"
+/* MULTIBYTE_CHARS support only works for native compilers.
+ ??? Ideally what we want is to model widechar support after
+ the current floating point support. */
+#ifdef CROSS_COMPILE
+#undef MULTIBYTE_CHARS
+#endif
+
#ifdef MULTIBYTE_CHARS
#include <stdlib.h>
#include <locale.h>
#endif
+#ifdef HAVE_STDLIB_H
+#ifndef MULTIBYTE_CHARS
+#include <stdlib.h>
+#endif
+#else
+extern double atof ();
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+extern char *index ();
+extern char *rindex ();
+#endif
+
#ifndef errno
extern int errno; /* needed for VAX. */
#endif
@@ -54,20 +76,40 @@ extern int errno; /* needed for VAX. */
extern struct obstack permanent_obstack;
extern struct obstack *current_obstack, *saveable_obstack;
-extern double atof ();
-
-extern char *get_directive_line (); /* In c-common.c */
+extern void yyprint PROTO((FILE *, int, YYSTYPE));
+extern void set_float_handler PROTO((jmp_buf));
+extern void compiler_error PROTO((char *, HOST_WIDE_INT,
+ HOST_WIDE_INT));
+
+static tree get_time_identifier PROTO((char *));
+static int check_newline PROTO((void));
+static int skip_white_space PROTO((int));
+static int yynextch PROTO((void));
+static void finish_defarg PROTO((void));
+static int my_get_run_time PROTO((void));
+static int get_last_nonwhite_on_line PROTO((void));
+static int interface_strcmp PROTO((char *));
+static int readescape PROTO((int *));
+static char *extend_token_buffer PROTO((char *));
+static void consume_string PROTO((struct obstack *, int));
+static void set_typedecl_interface_info PROTO((tree, tree));
+static void feed_defarg PROTO((tree, tree));
+static int set_vardecl_interface_info PROTO((tree, tree));
+static void store_pending_inline PROTO((tree, struct pending_inline *));
+static void reinit_parse_for_expr PROTO((struct obstack *));
/* Given a file name X, return the nondirectory portion.
Keep in mind that X can be computed more than once. */
-#ifndef FILE_NAME_NONDIRECTORY
-#define FILE_NAME_NONDIRECTORY(X) \
- (rindex (X, '/') != 0 ? rindex (X, '/') + 1 : X)
-#endif
-
-extern char *index ();
-extern char *rindex ();
-void yyerror ();
+char *
+file_name_nondirectory (x)
+ char *x;
+{
+ char *tmp = (char *) rindex (x, '/');
+ if (tmp)
+ return (char *) (tmp + 1);
+ else
+ return x;
+}
/* This obstack is needed to hold text. It is not safe to use
TOKEN_BUFFER because `check_newline' calls `yylex'. */
@@ -123,7 +165,6 @@ tree ridpointers[(int) RID_MAX];
/* We may keep statistics about how long which files took to compile. */
static int header_time, body_time;
-static tree get_time_identifier ();
static tree filename_times;
static tree this_filename_time;
@@ -272,13 +313,10 @@ char *token_buffer; /* Pointer to token buffer.
#include "hash.h"
-static int check_newline ();
/* Nonzero tells yylex to ignore \ in string constants. */
static int ignore_escape_flag = 0;
-static int skip_white_space ();
-
static tree
get_time_identifier (name)
char *name;
@@ -362,6 +400,10 @@ lang_init ()
put_back (check_newline ());
if (flag_gnu_xref) GNU_xref_begin (input_filename);
init_repo (input_filename);
+
+ /* See comments in toplev.c before the call to lang_init. */
+ if (flag_exceptions == 2)
+ flag_exceptions = 1;
}
void
@@ -402,12 +444,9 @@ reinit_lang_specific ()
}
#endif
-int *init_parse ();
-
void
init_lex ()
{
- extern char *(*decl_printable_name) ();
extern int flag_no_gnu_keywords;
extern int flag_operator_names;
@@ -641,7 +680,7 @@ init_lex ()
ridpointers[(int) RID_REGISTER] = get_identifier ("register");
SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_REGISTER],
build_tree_list (NULL_TREE, ridpointers[(int) RID_REGISTER]));
- ridpointers[(int) RID_COMPLEX] = get_identifier ("complex");
+ ridpointers[(int) RID_COMPLEX] = get_identifier ("__complex");
SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_COMPLEX],
build_tree_list (NULL_TREE, ridpointers[(int) RID_COMPLEX]));
@@ -811,8 +850,6 @@ init_lex ()
UNSET_RESERVED_WORD ("signature");
UNSET_RESERVED_WORD ("sigof");
}
- if (flag_no_gnu_keywords)
- UNSET_RESERVED_WORD ("complex");
if (flag_no_asm || flag_no_gnu_keywords)
UNSET_RESERVED_WORD ("typeof");
if (! flag_operator_names)
@@ -1109,7 +1146,7 @@ set_typedecl_interface_info (prev, vars)
tree type = TREE_TYPE (vars);
CLASSTYPE_INTERFACE_ONLY (type) = TREE_INT_CST_LOW (fileinfo)
- = interface_strcmp (FILE_NAME_NONDIRECTORY (DECL_SOURCE_FILE (vars)));
+ = interface_strcmp (file_name_nondirectory (DECL_SOURCE_FILE (vars)));
}
static int
@@ -1170,6 +1207,8 @@ do_pending_inlines ()
context = hack_decl_function_context (t->fndecl);
if (context)
push_cp_function_context (context);
+ if (is_member_template (t->fndecl))
+ begin_member_template_processing (t->fndecl);
if (t->len > 0)
{
feed_input (t->buf, t->len);
@@ -1206,7 +1245,9 @@ process_next_inline (t)
{
tree context;
struct pending_inline *i = (struct pending_inline *) TREE_PURPOSE (t);
- context = hack_decl_function_context (i->fndecl);
+ context = hack_decl_function_context (i->fndecl);
+ if (is_member_template (i->fndecl))
+ end_member_template_processing ();
if (context)
pop_cp_function_context (context);
i = i->next;
@@ -1229,6 +1270,8 @@ process_next_inline (t)
context = hack_decl_function_context (i->fndecl);
if (context)
push_cp_function_context (context);
+ if (is_member_template (i->fndecl))
+ begin_member_template_processing (i->fndecl);
feed_input (i->buf, i->len);
lineno = i->lineno;
input_filename = i->filename;
@@ -1414,8 +1457,6 @@ store_pending_inline (decl, t)
pending_inlines = t;
}
-static void reinit_parse_for_block PROTO((int, struct obstack *));
-
void
reinit_parse_for_method (yychar, decl)
int yychar;
@@ -1465,7 +1506,7 @@ reinit_parse_for_method (yychar, decl)
/* Consume a block -- actually, a method beginning
with `:' or `{' -- and save it away on the specified obstack. */
-static void
+void
reinit_parse_for_block (pyychar, obstackp)
int pyychar;
struct obstack *obstackp;
@@ -1759,7 +1800,6 @@ snarf_defarg ()
int len;
char *buf;
tree arg;
- struct pending_inline *t;
reinit_parse_for_expr (&inline_text_obstack);
len = obstack_object_size (&inline_text_obstack);
@@ -1845,14 +1885,15 @@ do_pending_defargs ()
tree defarg_fn = TREE_VALUE (defarg_fns);
if (defarg_parm == NULL_TREE)
{
- tree p;
-
push_nested_class (TREE_PURPOSE (defarg_fns), 1);
pushlevel (0);
+ if (is_member_template (defarg_fn))
+ begin_member_template_processing (defarg_fn);
if (TREE_CODE (defarg_fn) == FUNCTION_DECL)
{
#if 0
+ tree p;
for (p = DECL_ARGUMENTS (defarg_fn); p; p = TREE_CHAIN (p))
pushdecl (copy_node (p));
#endif
@@ -1865,10 +1906,9 @@ do_pending_defargs ()
defarg_parm = TREE_CHAIN (defarg_parm);
for (; defarg_parm; defarg_parm = TREE_CHAIN (defarg_parm))
- if (TREE_PURPOSE (defarg_parm))
+ if (TREE_PURPOSE (defarg_parm)
+ && TREE_CODE (TREE_PURPOSE (defarg_parm)) == DEFAULT_ARG)
{
- my_friendly_assert (TREE_CODE (TREE_PURPOSE (defarg_parm))
- == DEFAULT_ARG, 2349);
feed_defarg (defarg_fn, defarg_parm);
/* Return to the parser, which will process this defarg
@@ -1876,6 +1916,8 @@ do_pending_defargs ()
return;
}
+ if (is_member_template (defarg_fn))
+ end_member_template_processing ();
poplevel (0, 0, 0);
pop_nested_class (1);
}
@@ -1961,10 +2003,16 @@ cons_up_default_function (type, full_name, kind)
{
tree declarator = make_call_declarator (name, args, NULL_TREE, NULL_TREE);
+ int saved_processing_specialization;
if (retref)
declarator = build_parse_node (ADDR_EXPR, declarator);
-
+
+ /* The following is in case we're generating the default
+ implementation in the midst of handling a specialization. */
+ saved_processing_specialization = processing_specialization;
+ processing_specialization = 0;
fn = grokfield (declarator, declspecs, NULL_TREE, NULL_TREE, NULL_TREE);
+ processing_specialization = saved_processing_specialization;
}
if (fn == void_type_node)
@@ -2160,9 +2208,9 @@ get_last_nonwhite_on_line ()
int linemode;
#ifdef HANDLE_SYSV_PRAGMA
-static int handle_sysv_pragma ();
+static int handle_sysv_pragma PROTO((FILE *, int));
#endif
-static int handle_cp_pragma ();
+static int handle_cp_pragma PROTO((char *));
static int
check_newline ()
@@ -2403,7 +2451,7 @@ linenum:
{
while (ifiles->next)
ifiles = ifiles->next;
- ifiles->filename = FILE_NAME_NONDIRECTORY (input_filename);
+ ifiles->filename = file_name_nondirectory (input_filename);
}
main_input_filename = input_filename;
@@ -2692,7 +2740,6 @@ readescape (ignore_ptr)
int looking_for_typename = 0;
#ifdef __GNUC__
-extern __inline int identifier_type ();
__inline
#endif
int
@@ -2703,6 +2750,15 @@ identifier_type (decl)
{
if (TREE_CODE (DECL_RESULT (decl)) == TYPE_DECL)
return PTYPENAME;
+ else if (looking_for_template)
+ return PFUNCNAME;
+ }
+ if (looking_for_template && really_overloaded_fn (decl))
+ {
+ tree t;
+ for (t = TREE_VALUE (decl); t != NULL_TREE; t = DECL_CHAIN (t))
+ if (DECL_FUNCTION_TEMPLATE_P (t))
+ return PFUNCNAME;
}
if (TREE_CODE (decl) == NAMESPACE_DECL)
return NSNAME;
@@ -3060,13 +3116,12 @@ real_yylex ()
break;
case '$':
- if (dollars_in_ident)
- {
- dollar_seen = 1;
- goto letter;
- }
- value = '$';
- goto done;
+ if (! dollars_in_ident)
+ error ("`$' in identifier");
+ else if (pedantic)
+ pedwarn ("`$' in identifier");
+ dollar_seen = 1;
+ goto letter;
case 'L':
/* Capital L may start a wide-string or wide-character constant. */
@@ -3117,13 +3172,19 @@ real_yylex ()
input sources. */
while (isalnum (c) || (c == '_') || c == '$')
{
- if (c == '$' && ! dollars_in_ident)
- break;
+ if (c == '$')
+ {
+ if (! dollars_in_ident)
+ error ("`$' in identifier");
+ else if (pedantic)
+ pedwarn ("`$' in identifier");
+ }
+
if (p >= token_buffer + maxtoken)
p = extend_token_buffer (p);
*p++ = c;
- c = getch (finput);
+ c = getch ();
}
if (linemode && c == '\n')
@@ -3141,8 +3202,14 @@ real_yylex ()
while (isalnum (c) || (c == '_') || c == '$')
{
- if (c == '$' && ! dollars_in_ident)
- break;
+ if (c == '$')
+ {
+ if (! dollars_in_ident)
+ error ("`$' in identifier");
+ else if (pedantic)
+ pedwarn ("`$' in identifier");
+ }
+
if (p >= token_buffer + maxtoken)
p = extend_token_buffer (p);
@@ -3294,30 +3361,6 @@ real_yylex ()
#endif
yylval.ttype = tmp;
-
- /* A user-invisible read-only initialized variable
- should be replaced by its value. We only handle strings
- since that's the only case used in C (and C++). */
- /* Note we go right after the local value for the identifier
- (e.g., __FUNCTION__ or __PRETTY_FUNCTION__). We used to
- call lookup_name, but that could result in an error about
- ambiguities. */
- tmp = IDENTIFIER_LOCAL_VALUE (yylval.ttype);
- if (tmp != NULL_TREE
- && TREE_CODE (tmp) == VAR_DECL
- && DECL_IGNORED_P (tmp)
- && TREE_READONLY (tmp)
- && DECL_INITIAL (tmp) != NULL_TREE
- && TREE_CODE (DECL_INITIAL (tmp)) == STRING_CST)
- {
- tree stringval = DECL_INITIAL (tmp);
-
- /* Copy the string value so that we won't clobber anything
- if we put something in the TREE_CHAIN of this one. */
- yylval.ttype = build_string (TREE_STRING_LENGTH (stringval),
- TREE_STRING_POINTER (stringval));
- value = STRING;
- }
}
if (value == NEW && ! global_bindings_p ())
{
@@ -3634,7 +3677,7 @@ real_yylex ()
p = extend_token_buffer (p);
*p++ = c;
*p = 0;
- c = getch (finput);
+ c = getch ();
}
/* The second argument, machine_mode, of REAL_VALUE_ATOF
@@ -3742,7 +3785,7 @@ real_yylex ()
if (p >= token_buffer + maxtoken - 3)
p = extend_token_buffer (p);
*p++ = c;
- c = getch (finput);
+ c = getch ();
}
/* If the constant is not long long and it won't fit in an
@@ -3783,17 +3826,14 @@ real_yylex ()
yylval.ttype = build_int_2 (low, high);
TREE_TYPE (yylval.ttype) = long_long_unsigned_type_node;
+ /* Calculate the ANSI type. */
if (!spec_long && !spec_unsigned
&& int_fits_type_p (yylval.ttype, integer_type_node))
- {
- type = integer_type_node;
- }
+ type = integer_type_node;
else if (!spec_long && (base != 10 || spec_unsigned)
&& int_fits_type_p (yylval.ttype, unsigned_type_node))
- {
- /* Nondecimal constants try unsigned even in traditional C. */
- type = unsigned_type_node;
- }
+ /* Nondecimal constants try unsigned even in traditional C. */
+ type = unsigned_type_node;
else if (!spec_unsigned && !spec_long_long
&& int_fits_type_p (yylval.ttype, long_integer_type_node))
type = long_integer_type_node;
@@ -3805,31 +3845,28 @@ real_yylex ()
&& int_fits_type_p (yylval.ttype,
long_long_integer_type_node))
type = long_long_integer_type_node;
- else if (int_fits_type_p (yylval.ttype,
- long_long_unsigned_type_node))
+ else
type = long_long_unsigned_type_node;
- else
- {
- type = long_long_integer_type_node;
- warning ("integer constant out of range");
+ if (!int_fits_type_p (yylval.ttype, type) && !warn)
+ pedwarn ("integer constant out of range");
- if (base == 10 && ! spec_unsigned && TREE_UNSIGNED (type))
- warning ("decimal integer constant is so large that it is unsigned");
- if (spec_imag)
- {
- if (TYPE_PRECISION (type)
- <= TYPE_PRECISION (integer_type_node))
- yylval.ttype
- = build_complex (NULL_TREE, integer_zero_node,
- cp_convert (integer_type_node,
- yylval.ttype));
- else
- error ("complex integer constant is too wide for `complex int'");
- }
- }
+ if (base == 10 && ! spec_unsigned && TREE_UNSIGNED (type))
+ warning ("decimal integer constant is so large that it is unsigned");
- TREE_TYPE (yylval.ttype) = type;
+ if (spec_imag)
+ {
+ if (TYPE_PRECISION (type)
+ <= TYPE_PRECISION (integer_type_node))
+ yylval.ttype
+ = build_complex (NULL_TREE, integer_zero_node,
+ cp_convert (integer_type_node,
+ yylval.ttype));
+ else
+ error ("complex integer constant is too wide for `__complex int'");
+ }
+ else
+ TREE_TYPE (yylval.ttype) = type;
}
put_back (c);
@@ -4034,15 +4071,9 @@ real_yylex ()
bzero (widep + (len * WCHAR_BYTES), WCHAR_BYTES);
#else
{
- union { long l; char c[sizeof (long)]; } u;
- int big_endian;
char *wp, *cp;
- /* Determine whether host is little or big endian. */
- u.l = 1;
- big_endian = u.c[sizeof (long) - 1];
- wp = widep + (big_endian ? WCHAR_BYTES - 1 : 0);
-
+ wp = widep + (BYTES_BIG_ENDIAN ? WCHAR_BYTES - 1 : 0);
bzero (widep, (p - token_buffer) * WCHAR_BYTES);
for (cp = token_buffer + 1; cp < p; cp++)
*wp = *cp, wp += WCHAR_BYTES;
@@ -4445,7 +4476,7 @@ make_lang_type (code)
pi[--i] = 0;
TYPE_LANG_SPECIFIC (t) = (struct lang_type *) pi;
- CLASSTYPE_AS_LIST (t) = build_tree_list (NULL_TREE, t);
+ CLASSTYPE_AS_LIST (t) = build_expr_list (NULL_TREE, t);
SET_CLASSTYPE_INTERFACE_UNKNOWN_X (t, interface_unknown);
CLASSTYPE_INTERFACE_ONLY (t) = interface_only;
CLASSTYPE_VBASE_SIZE (t) = integer_zero_node;
@@ -4584,7 +4615,7 @@ handle_cp_pragma (pname)
tree fileinfo = IDENTIFIER_CLASS_VALUE (get_time_identifier (input_filename));
char *main_filename = input_filename;
- main_filename = FILE_NAME_NONDIRECTORY (main_filename);
+ main_filename = file_name_nondirectory (main_filename);
token = real_yylex ();
@@ -4614,7 +4645,7 @@ handle_cp_pragma (pname)
main_input_filename = input_filename;
#ifdef AUTO_IMPLEMENT
- filename = FILE_NAME_NONDIRECTORY (main_input_filename);
+ filename = file_name_nondirectory (main_input_filename);
fi = get_time_identifier (filename);
fi = IDENTIFIER_CLASS_VALUE (fi);
TREE_INT_CST_LOW (fi) = 0;
@@ -4639,7 +4670,7 @@ handle_cp_pragma (pname)
tree fileinfo = IDENTIFIER_CLASS_VALUE (get_time_identifier (input_filename));
char *main_filename = main_input_filename ? main_input_filename : input_filename;
- main_filename = FILE_NAME_NONDIRECTORY (main_filename);
+ main_filename = file_name_nondirectory (main_filename);
token = real_yylex ();
if (token != END_OF_LINE)
{
diff --git a/gcc/cp/lex.h b/gcc/cp/lex.h
index fcea57af7a4..8df6b76a270 100644
--- a/gcc/cp/lex.h
+++ b/gcc/cp/lex.h
@@ -132,7 +132,4 @@ extern tree got_object;
Positive is push count, negative is pop count. */
extern int pending_lang_change;
-extern tree make_pointer_declarator (), make_reference_declarator ();
-extern void reinit_parse_for_function ();
-extern void reinit_parse_for_method ();
-extern int yylex ();
+extern int yylex PROTO((void));
diff --git a/gcc/cp/method.c b/gcc/cp/method.c
index 7a3a7228867..7a8cf989500 100644
--- a/gcc/cp/method.c
+++ b/gcc/cp/method.c
@@ -1,9 +1,9 @@
/* Handle the hair of processing (but not expanding) inline functions.
Also manage function and variable name overloading.
- Copyright (C) 1987, 89, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1987, 89, 92-97, 1998 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com)
- This file is part of GNU CC.
+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
@@ -26,8 +26,8 @@ Boston, MA 02111-1307, USA. */
#endif
/* Handle method declarations. */
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "tree.h"
#include "cp-tree.h"
#include "class.h"
@@ -39,6 +39,12 @@ Boston, MA 02111-1307, USA. */
#include "hard-reg-set.h"
#include "flags.h"
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+extern char *index ();
+#endif
+
/* TREE_LIST of the current inline functions that need to be
processed. */
struct pending_inline *pending_inlines;
@@ -52,6 +58,24 @@ int static_labelno;
static struct obstack scratch_obstack;
static char *scratch_firstobj;
+static void icat PROTO((HOST_WIDE_INT));
+static void dicat PROTO((HOST_WIDE_INT, HOST_WIDE_INT));
+static void flush_repeats PROTO((tree));
+static void build_overload_identifier PROTO((tree));
+static void build_overload_nested_name PROTO((tree));
+static void build_overload_int PROTO((tree, int));
+static void build_overload_identifier PROTO((tree));
+static void build_qualified_name PROTO((tree));
+static void build_overload_value PROTO((tree, tree, int));
+static char *thunk_printable_name PROTO((tree));
+static void do_build_assign_ref PROTO((tree));
+static void do_build_copy_constructor PROTO((tree));
+static tree largest_union_member PROTO((tree));
+static tree build_decl_overload_real PROTO((tree, tree, tree, tree,
+ tree, int));
+static void build_template_parm_names PROTO((tree, tree));
+static void build_underscore_int PROTO((int));
+
# define OB_INIT() (scratch_firstobj ? (obstack_free (&scratch_obstack, scratch_firstobj), 0) : 0)
# define OB_PUTC(C) (obstack_1grow (&scratch_obstack, (C)))
# define OB_PUTC2(C1,C2) \
@@ -355,7 +379,6 @@ flush_repeats (type)
}
static int numeric_output_need_bar;
-static void build_overload_identifier ();
static void
build_overload_nested_name (decl)
@@ -364,9 +387,16 @@ build_overload_nested_name (decl)
if (DECL_CONTEXT (decl))
{
tree context = DECL_CONTEXT (decl);
- if (TREE_CODE_CLASS (TREE_CODE (context)) == 't')
- context = TYPE_NAME (context);
- build_overload_nested_name (context);
+ /* For a template type parameter, we want to output an 'Xn'
+ rather than 'T' or some such. */
+ if (TREE_CODE (context) == TEMPLATE_TYPE_PARM)
+ build_overload_name (context, 0, 0);
+ else
+ {
+ if (TREE_CODE_CLASS (TREE_CODE (context)) == 't')
+ context = TYPE_NAME (context);
+ build_overload_nested_name (context);
+ }
}
if (TREE_CODE (decl) == FUNCTION_DECL)
@@ -387,24 +417,25 @@ build_overload_nested_name (decl)
build_overload_identifier (decl);
}
+static void
+build_underscore_int (i)
+ int i;
+{
+ if (i > 9)
+ OB_PUTC ('_');
+ icat (i);
+ if (i > 9)
+ OB_PUTC ('_');
+}
+
/* Encoding for an INTEGER_CST value. */
static void
-build_overload_int (value)
+build_overload_int (value, in_template)
tree value;
+ int in_template;
{
- if (TREE_CODE (value) == TEMPLATE_CONST_PARM)
- {
- OB_PUTC ('Y');
- if (TEMPLATE_CONST_IDX (value) > 9)
- OB_PUTC ('_');
- icat (TEMPLATE_CONST_IDX (value));
- if (TEMPLATE_CONST_IDX (value) > 9)
- OB_PUTC ('_');
- return;
- }
- else if (processing_template_decl
- && TREE_CODE (value) != INTEGER_CST)
+ if (in_template && TREE_CODE (value) != INTEGER_CST)
/* We don't ever want this output, but it's inconvenient not to
be able to build the string. This should cause assembler
errors we'll notice. */
@@ -432,8 +463,9 @@ build_overload_int (value)
}
static void
-build_overload_value (type, value)
+build_overload_value (type, value, in_template)
tree type, value;
+ int in_template;
{
while (TREE_CODE (value) == NON_LVALUE_EXPR
|| TREE_CODE (value) == NOP_EXPR)
@@ -447,6 +479,14 @@ build_overload_value (type, value)
numeric_output_need_bar = 0;
}
+ if (TREE_CODE (value) == TEMPLATE_CONST_PARM)
+ {
+ OB_PUTC ('Y');
+ build_underscore_int (TEMPLATE_CONST_IDX (value));
+ build_underscore_int (TEMPLATE_CONST_LEVEL (value));
+ return;
+ }
+
if (TREE_CODE (type) == POINTER_TYPE
&& TREE_CODE (TREE_TYPE (type)) == OFFSET_TYPE)
{
@@ -469,7 +509,7 @@ build_overload_value (type, value)
case ENUMERAL_TYPE:
case BOOLEAN_TYPE:
{
- build_overload_int (value);
+ build_overload_int (value, in_template);
numeric_output_need_bar = 1;
return;
}
@@ -477,7 +517,6 @@ build_overload_value (type, value)
{
REAL_VALUE_TYPE val;
char *bufp = digit_buffer;
- extern char *index ();
pedwarn ("ANSI C++ forbids floating-point template arguments");
@@ -500,7 +539,7 @@ build_overload_value (type, value)
}
else
{
- ereal_to_decimal (val, bufp);
+ REAL_VALUE_TO_DECIMAL (val, "%.20e", bufp);
bufp = (char *) index (bufp, 'e');
if (!bufp)
strcat (digit_buffer, "e0");
@@ -556,9 +595,9 @@ build_overload_value (type, value)
if (TREE_CODE (a1) == INTEGER_CST
&& TREE_CODE (a2) == INTEGER_CST)
{
- build_overload_int (a1);
+ build_overload_int (a1, in_template);
OB_PUTC ('_');
- build_overload_int (a2);
+ build_overload_int (a2, in_template);
OB_PUTC ('_');
if (TREE_CODE (a3) == ADDR_EXPR)
{
@@ -573,7 +612,7 @@ build_overload_value (type, value)
else if (TREE_CODE (a3) == INTEGER_CST)
{
OB_PUTC ('i');
- build_overload_int (a3);
+ build_overload_int (a3, in_template);
numeric_output_need_bar = 1;
return;
}
@@ -585,7 +624,7 @@ build_overload_value (type, value)
if (TREE_CODE (value) == INTEGER_CST
|| TREE_CODE (value) == TEMPLATE_CONST_PARM)
{
- build_overload_int (value);
+ build_overload_int (value, in_template);
numeric_output_need_bar = 1;
return;
}
@@ -613,6 +652,41 @@ build_overload_value (type, value)
}
}
+
+/* Add encodings for the vector of template parameters in PARMLIST,
+ given the vector of arguments to be substituted in ARGLIST. */
+
+static void
+build_template_parm_names (parmlist, arglist)
+ tree parmlist;
+ tree arglist;
+{
+ int i, nparms;
+
+ nparms = TREE_VEC_LENGTH (parmlist);
+ icat (nparms);
+ for (i = 0; i < nparms; i++)
+ {
+ tree parm = TREE_VALUE (TREE_VEC_ELT (parmlist, i));
+ tree arg = TREE_VEC_ELT (arglist, i);
+ if (TREE_CODE (parm) == TYPE_DECL)
+ {
+ /* This parameter is a type. */
+ OB_PUTC ('Z');
+ build_overload_name (arg, 0, 0);
+ }
+ else
+ {
+ parm = tsubst (parm, arglist,
+ TREE_VEC_LENGTH (arglist), NULL_TREE);
+ /* It's a PARM_DECL. */
+ build_overload_name (TREE_TYPE (parm), 0, 0);
+ build_overload_value (parm, arg, uses_template_parms (arglist));
+ }
+ }
+ }
+
+
static void
build_overload_identifier (name)
tree name;
@@ -623,36 +697,15 @@ build_overload_identifier (name)
&& PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (TREE_TYPE (name))))
{
tree template, parmlist, arglist, tname;
- int i, nparms;
template = CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (name));
arglist = TREE_VALUE (template);
template = TREE_PURPOSE (template);
tname = DECL_NAME (template);
- parmlist = DECL_ARGUMENTS (template);
- nparms = TREE_VEC_LENGTH (parmlist);
+ parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
OB_PUTC ('t');
icat (IDENTIFIER_LENGTH (tname));
OB_PUTID (tname);
- icat (nparms);
- for (i = 0; i < nparms; i++)
- {
- tree parm = TREE_VALUE (TREE_VEC_ELT (parmlist, i));
- tree arg = TREE_VEC_ELT (arglist, i);
- if (TREE_CODE (parm) == TYPE_DECL)
- {
- /* This parameter is a type. */
- OB_PUTC ('Z');
- build_overload_name (arg, 0, 0);
- }
- else
- {
- parm = tsubst (parm, &TREE_VEC_ELT (arglist, 0),
- TREE_VEC_LENGTH (arglist), NULL_TREE);
- /* It's a PARM_DECL. */
- build_overload_name (TREE_TYPE (parm), 0, 0);
- build_overload_value (parm, arg);
- }
- }
+ build_template_parm_names (parmlist, arglist);
}
else
{
@@ -986,28 +1039,26 @@ build_overload_name (parmtypes, begin, end)
}
case UNKNOWN_TYPE:
- /* This will take some work. */
- OB_PUTC ('?');
+ /* We can get here if __null is defined to have type ({unkown
+ type}*), which it is if -ansi is not used. Treat this
+ like 'void*'. */
+ OB_PUTC ('v');
break;
case TEMPLATE_TYPE_PARM:
OB_PUTC ('X');
- if (TEMPLATE_TYPE_IDX (parmtype) > 9)
- OB_PUTC ('_');
- icat (TEMPLATE_TYPE_IDX (parmtype));
- if (TEMPLATE_TYPE_IDX (parmtype) > 9)
- OB_PUTC ('_');
+ build_underscore_int (TEMPLATE_TYPE_IDX (parmtype));
+ build_underscore_int (TEMPLATE_TYPE_LEVEL (parmtype));
break;
case TYPENAME_TYPE:
- /* We don't ever want this output, but it's inconvenient not to
- be able to build the string. This should cause assembler
- errors we'll notice. */
- {
- static int n;
- sprintf (digit_buffer, " *%d", n++);
- OB_PUTCP (digit_buffer);
- }
+ /* When mangling the type of a function template whose
+ declaration looks like:
+
+ template <class T> void foo(typename T::U)
+
+ we have to mangle these. */
+ build_qualified_name (parmtype);
break;
default:
@@ -1047,7 +1098,7 @@ build_static_name (context, name)
#else
OB_PUTS ("__static_");
build_qualified_name (context);
- OB_PUTC (' ');
+ OB_PUTC ('_');
#endif
OB_PUTID (name);
OB_FINISH ();
@@ -1055,37 +1106,30 @@ build_static_name (context, name)
return get_identifier ((char *)obstack_base (&scratch_obstack));
}
-/* Change the name of a function definition so that it may be
- overloaded. NAME is the name of the function to overload,
- PARMS is the parameter list (which determines what name the
- final function obtains).
-
- FOR_METHOD is 1 if this overload is being performed
- for a method, rather than a function type. It is 2 if
- this overload is being performed for a constructor. */
-
-tree
-build_decl_overload (dname, parms, for_method)
+static tree
+build_decl_overload_real (dname, parms, ret_type, tparms, targs,
+ for_method)
tree dname;
tree parms;
+ tree ret_type;
+ tree tparms;
+ tree targs;
int for_method;
{
char *name = IDENTIFIER_POINTER (dname);
/* member operators new and delete look like methods at this point. */
- if (! for_method && parms != NULL_TREE && TREE_CODE (parms) == TREE_LIST)
+ if (! for_method && parms != NULL_TREE && TREE_CODE (parms) == TREE_LIST
+ && TREE_CHAIN (parms) == void_list_node)
{
if (dname == ansi_opname[(int) DELETE_EXPR])
return get_identifier ("__builtin_delete");
else if (dname == ansi_opname[(int) VEC_DELETE_EXPR])
return get_identifier ("__builtin_vec_delete");
- else if (TREE_CHAIN (parms) == void_list_node)
- {
- if (dname == ansi_opname[(int) NEW_EXPR])
- return get_identifier ("__builtin_new");
- else if (dname == ansi_opname[(int) VEC_NEW_EXPR])
- return get_identifier ("__builtin_vec_new");
- }
+ if (dname == ansi_opname[(int) NEW_EXPR])
+ return get_identifier ("__builtin_new");
+ else if (dname == ansi_opname[(int) VEC_NEW_EXPR])
+ return get_identifier ("__builtin_vec_new");
}
OB_INIT ();
@@ -1101,6 +1145,8 @@ build_decl_overload (dname, parms, for_method)
/* We can get away without doing this. */
OB_PUTC ('M');
#endif
+ if (tparms != NULL_TREE)
+ OB_PUTC ('H');
{
tree this_type = TREE_VALUE (parms);
@@ -1112,13 +1158,21 @@ build_decl_overload (dname, parms, for_method)
TREE_CHAIN (parms));
}
}
+ else if (tparms)
+ OB_PUTC ('H');
else
OB_PUTC ('F');
+ if (tparms)
+ {
+ build_template_parm_names (tparms, targs);
+ OB_PUTC ('_');
+ }
+
if (parms == NULL_TREE)
- OB_PUTC2 ('e', '\0');
+ OB_PUTC ('e');
else if (parms == void_list_node)
- OB_PUTC2 ('v', '\0');
+ OB_PUTC ('v');
else
{
ALLOCATE_TYPEVEC (parms);
@@ -1131,14 +1185,23 @@ build_decl_overload (dname, parms, for_method)
TREE_USED (TREE_VALUE (parms)) = 1;
if (TREE_CHAIN (parms))
- build_overload_name (TREE_CHAIN (parms), 0, 1);
+ build_overload_name (TREE_CHAIN (parms), 0, 0);
else
- OB_PUTC2 ('e', '\0');
+ OB_PUTC ('e');
}
else
- build_overload_name (parms, 0, 1);
+ build_overload_name (parms, 0, 0);
DEALLOCATE_TYPEVEC (parms);
}
+
+ if (ret_type != NULL_TREE && for_method != 2)
+ {
+ /* Add the return type. */
+ OB_PUTC ('_');
+ build_overload_name (ret_type, 0, 0);
+ }
+
+ OB_FINISH ();
{
tree n = get_identifier (obstack_base (&scratch_obstack));
if (IDENTIFIER_OPNAME_P (dname))
@@ -1147,6 +1210,43 @@ build_decl_overload (dname, parms, for_method)
}
}
+/* Change the name of a function definition so that it may be
+ overloaded. NAME is the name of the function to overload,
+ PARMS is the parameter list (which determines what name the
+ final function obtains).
+
+ FOR_METHOD is 1 if this overload is being performed
+ for a method, rather than a function type. It is 2 if
+ this overload is being performed for a constructor. */
+
+tree
+build_decl_overload (dname, parms, for_method)
+ tree dname;
+ tree parms;
+ int for_method;
+{
+ return build_decl_overload_real (dname, parms, NULL_TREE, NULL_TREE,
+ NULL_TREE, for_method);
+}
+
+
+/* Like build_decl_overload, but for template functions. */
+
+tree
+build_template_decl_overload (dname, parms, ret_type, tparms, targs,
+ for_method)
+ tree dname;
+ tree parms;
+ tree ret_type;
+ tree tparms;
+ tree targs;
+ int for_method;
+{
+ return build_decl_overload_real (dname, parms, ret_type, tparms, targs,
+ for_method);
+}
+
+
/* Build an overload name for the type expression TYPE. */
tree
@@ -1275,7 +1375,7 @@ build_opfncall (code, flags, xarg1, xarg2, arg3)
case VEC_NEW_EXPR:
case NEW_EXPR:
{
- tree args = tree_cons (NULL_TREE, xarg2, arg3);
+ tree args = expr_tree_cons (NULL_TREE, xarg2, arg3);
fnname = ansi_opname[(int) code];
if (flags & LOOKUP_GLOBAL)
return build_overload_call (fnname, args, flags & LOOKUP_COMPLAIN);
@@ -1301,7 +1401,7 @@ build_opfncall (code, flags, xarg1, xarg2, arg3)
fnname = ansi_opname[(int) code];
if (flags & LOOKUP_GLOBAL)
return build_overload_call (fnname,
- build_tree_list (NULL_TREE, xarg1),
+ build_expr_list (NULL_TREE, xarg1),
flags & LOOKUP_COMPLAIN);
arg1 = TREE_TYPE (xarg1);
@@ -1325,8 +1425,8 @@ build_opfncall (code, flags, xarg1, xarg2, arg3)
(build_indirect_ref (build1 (NOP_EXPR, arg1,
error_mark_node),
NULL_PTR),
- fnname, tree_cons (NULL_TREE, xarg1,
- build_tree_list (NULL_TREE, xarg2)),
+ fnname, expr_tree_cons (NULL_TREE, xarg1,
+ build_expr_list (NULL_TREE, xarg2)),
NULL_TREE, flags);
#if 0
/* This can happen when operator delete is protected. */
@@ -1504,25 +1604,25 @@ build_opfncall (code, flags, xarg1, xarg2, arg3)
}
else if (code == COND_EXPR)
{
- parms = tree_cons (NULL_TREE, xarg2, build_tree_list (NULL_TREE, arg3));
+ parms = expr_tree_cons (NULL_TREE, xarg2, build_expr_list (NULL_TREE, arg3));
rval = build_method_call (xarg1, fnname, parms, NULL_TREE, flags);
}
else if (code == METHOD_CALL_EXPR)
{
/* must be a member function. */
- parms = tree_cons (NULL_TREE, xarg2, arg3);
+ parms = expr_tree_cons (NULL_TREE, xarg2, arg3);
return build_method_call (xarg1, fnname, parms, NULL_TREE,
LOOKUP_NORMAL);
}
else if (fields1)
{
- parms = build_tree_list (NULL_TREE, xarg2);
+ parms = build_expr_list (NULL_TREE, xarg2);
rval = build_method_call (xarg1, fnname, parms, NULL_TREE, flags);
}
else
{
- parms = tree_cons (NULL_TREE, xarg1,
- build_tree_list (NULL_TREE, xarg2));
+ parms = expr_tree_cons (NULL_TREE, xarg1,
+ build_expr_list (NULL_TREE, xarg2));
rval = build_overload_call (fnname, parms, flags);
}
@@ -1705,7 +1805,7 @@ make_thunk (function, delta)
tree function;
int delta;
{
- char buffer[250];
+ char *buffer;
tree thunk_id;
tree thunk;
char *func_name;
@@ -1716,6 +1816,7 @@ make_thunk (function, delta)
if (TREE_CODE (func_decl) != FUNCTION_DECL)
abort ();
func_name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (func_decl));
+ buffer = (char *)alloca (strlen (func_name) + 32);
if (delta<=0)
sprintf (buffer, "__thunk_%d_%s", -delta, func_name);
else
@@ -1777,6 +1878,7 @@ emit_thunk (thunk_fndecl)
DECL_RESULT (thunk_fndecl)
= build_decl (RESULT_DECL, 0, integer_type_node);
fnname = XSTR (XEXP (DECL_RTL (thunk_fndecl), 0), 0);
+ init_function_start (thunk_fndecl, input_filename, lineno);
assemble_start_function (thunk_fndecl, fnname);
ASM_OUTPUT_MI_THUNK (asm_out_file, thunk_fndecl, delta, function);
assemble_end_function (thunk_fndecl, fnname);
@@ -1818,14 +1920,21 @@ emit_thunk (thunk_fndecl)
t = build_int_2 (delta, -1 * (delta < 0));
TREE_TYPE (t) = signed_type (sizetype);
t = fold (build (PLUS_EXPR, TREE_TYPE (a), a, t));
- t = tree_cons (NULL_TREE, t, NULL_TREE);
+ t = expr_tree_cons (NULL_TREE, t, NULL_TREE);
for (a = TREE_CHAIN (a); a; a = TREE_CHAIN (a))
- t = tree_cons (NULL_TREE, a, t);
+ t = expr_tree_cons (NULL_TREE, a, t);
t = nreverse (t);
t = build_call (function, TREE_TYPE (TREE_TYPE (function)), t);
c_expand_return (t);
finish_function (lineno, 0, 0);
+
+ /* Don't let the backend defer this function. */
+ if (DECL_DEFER_OUTPUT (thunk_fndecl))
+ {
+ output_inline_function (thunk_fndecl);
+ permanent_allocation (1);
+ }
#endif /* ASM_OUTPUT_MI_THUNK */
}
@@ -1924,6 +2033,8 @@ do_build_copy_constructor (fndecl)
if (TREE_CODE (field) != FIELD_DECL)
continue;
+
+ init = parm;
if (DECL_NAME (field))
{
if (VFIELD_NAME_P (DECL_NAME (field)))
@@ -1939,11 +2050,21 @@ do_build_copy_constructor (fndecl)
&& TREE_CODE (t) == UNION_TYPE
&& ANON_AGGRNAME_P (TYPE_IDENTIFIER (t))
&& TYPE_FIELDS (t) != NULL_TREE)
- field = largest_union_member (t);
+ {
+ do
+ {
+ init = build (COMPONENT_REF, t, init, field);
+ field = largest_union_member (t);
+ }
+ while ((t = TREE_TYPE (field)) != NULL_TREE
+ && TREE_CODE (t) == UNION_TYPE
+ && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t))
+ && TYPE_FIELDS (t) != NULL_TREE);
+ }
else
continue;
- init = build (COMPONENT_REF, TREE_TYPE (field), parm, field);
+ init = build (COMPONENT_REF, TREE_TYPE (field), init, field);
init = build_tree_list (NULL_TREE, init);
current_member_init_list
@@ -1989,7 +2110,7 @@ do_build_assign_ref (fndecl)
CONV_IMPLICIT|CONV_CONST, LOOKUP_COMPLAIN, NULL_TREE);
p = convert_from_reference (p);
p = build_member_call (basetype, ansi_opname [MODIFY_EXPR],
- build_tree_list (NULL_TREE, p));
+ build_expr_list (NULL_TREE, p));
expand_expr_stmt (p);
}
for (; fields; fields = TREE_CHAIN (fields))
@@ -2017,6 +2138,9 @@ do_build_assign_ref (fndecl)
continue;
}
+ comp = current_class_ref;
+ init = parm;
+
if (DECL_NAME (field))
{
if (VFIELD_NAME_P (DECL_NAME (field)))
@@ -2032,12 +2156,23 @@ do_build_assign_ref (fndecl)
&& TREE_CODE (t) == UNION_TYPE
&& ANON_AGGRNAME_P (TYPE_IDENTIFIER (t))
&& TYPE_FIELDS (t) != NULL_TREE)
- field = largest_union_member (t);
+ {
+ do
+ {
+ comp = build (COMPONENT_REF, t, comp, field);
+ init = build (COMPONENT_REF, t, init, field);
+ field = largest_union_member (t);
+ }
+ while ((t = TREE_TYPE (field)) != NULL_TREE
+ && TREE_CODE (t) == UNION_TYPE
+ && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t))
+ && TYPE_FIELDS (t) != NULL_TREE);
+ }
else
continue;
- comp = build (COMPONENT_REF, TREE_TYPE (field), current_class_ref, field);
- init = build (COMPONENT_REF, TREE_TYPE (field), parm, field);
+ comp = build (COMPONENT_REF, TREE_TYPE (field), comp, field);
+ init = build (COMPONENT_REF, TREE_TYPE (field), init, field);
expand_expr_stmt (build_modify_expr (comp, NOP_EXPR, init));
}
@@ -2053,6 +2188,9 @@ synthesize_method (fndecl)
int nested = (current_function_decl != NULL_TREE);
tree context = hack_decl_function_context (fndecl);
+ if (at_eof)
+ import_export_decl (fndecl);
+
if (! context)
push_to_top_level ();
else if (nested)
diff --git a/gcc/cp/parse.y b/gcc/cp/parse.y
index fe519b83e73..9187d8ab2b2 100644
--- a/gcc/cp/parse.y
+++ b/gcc/cp/parse.y
@@ -1,5 +1,5 @@
/* YACC parser for C++ syntax.
- Copyright (C) 1988, 89, 93, 94, 95, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1988, 89, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
Hacked by Michael Tiemann (tiemann@cygnus.com)
This file is part of GNU CC.
@@ -41,6 +41,7 @@ Boston, MA 02111-1307, USA. */
#include "lex.h"
#include "cp-tree.h"
#include "output.h"
+#include "except.h"
/* Since parsers are distinct for each language, put the language string
definition here. (fnf) */
@@ -61,8 +62,6 @@ extern tree last_tree;
extern tree strip_attrs PROTO((tree));
/* END FSF LOCAL */
-void yyerror ();
-
/* Like YYERROR but do call yyerror. */
#define YYERROR1 { yyerror ("syntax error"); YYERROR; }
@@ -73,12 +72,12 @@ void yyerror ();
error message if the user supplies an empty conditional expression. */
static char *cond_stmt_keyword;
+static tree empty_parms PROTO((void));
+
/* Nonzero if we have an `extern "C"' acting as an extern specifier. */
int have_extern_spec;
int used_extern_spec;
-void yyhook ();
-
/* Cons up an empty parameter list. */
#ifdef __GNUC__
__inline
@@ -89,10 +88,7 @@ empty_parms ()
tree parms;
if (strict_prototype
- /* Only go ahead with using the void list node if we're actually
- parsing a class in C++, not a struct in extern "C" mode. */
- || (current_class_type != NULL
- && current_lang_name == lang_name_cplusplus))
+ || current_class_type != NULL)
parms = void_list_node;
else
parms = NULL_TREE;
@@ -114,6 +110,9 @@ empty_parms ()
%token TYPENAME
%token SELFNAME
+/* A template function. */
+%token PFUNCNAME
+
/* Reserved words that specify storage class.
yylval contains an IDENTIFIER_NODE which indicates which one. */
%token SCSPEC
@@ -166,7 +165,7 @@ empty_parms ()
%nonassoc IF
%nonassoc ELSE
-%left IDENTIFIER TYPENAME SELFNAME PTYPENAME SCSPEC TYPESPEC CV_QUALIFIER ENUM AGGR ELLIPSIS TYPEOF SIGOF OPERATOR NSNAME TYPENAME_KEYWORD
+%left IDENTIFIER PFUNCNAME TYPENAME SELFNAME PTYPENAME SCSPEC TYPESPEC CV_QUALIFIER ENUM AGGR ELLIPSIS TYPEOF SIGOF OPERATOR NSNAME TYPENAME_KEYWORD
%left '{' ',' ';'
@@ -197,6 +196,7 @@ empty_parms ()
%type <code> unop
%type <ttype> identifier IDENTIFIER TYPENAME CONSTANT expr nonnull_exprlist
+%type <ttype> PFUNCNAME
%type <ttype> paren_expr_or_null nontrivial_exprlist SELFNAME
%type <ttype> expr_no_commas cast_expr unary_expr primary string STRING
%type <ttype> reserved_declspecs boolean.literal
@@ -228,6 +228,7 @@ empty_parms ()
%type <ttype> fcast_or_absdcl regcast_or_absdcl
%type <ttype> expr_or_declarator complex_notype_declarator
%type <ttype> notype_unqualified_id unqualified_id qualified_id
+%type <ttype> template_id object_template_id notype_template_declarator
%type <ttype> overqualified_id notype_qualified_id any_id
%type <ttype> complex_direct_notype_declarator functional_cast
%type <ttype> complex_parmlist parms_comma
@@ -262,12 +263,12 @@ empty_parms ()
%type <ttype> template_type template_arg_list template_arg
%type <ttype> condition xcond paren_cond_or_null
%type <ttype> type_name nested_name_specifier nested_type ptr_to_mem
-%type <ttype> complete_type_name notype_identifier
+%type <ttype> complete_type_name notype_identifier nonnested_type
%type <ttype> complex_type_name nested_name_specifier_1
%type <itype> nomods_initdecls nomods_initdcl0
%type <ttype> new_initializer new_placement
%type <ttype> using_decl .poplevel
-
+%type <ttype> typename_sub typename_sub0 typename_sub1 typename_sub2
/* in order to recognize aggr tags as defining and thus shadowing. */
%token TYPENAME_DEFN IDENTIFIER_DEFN PTYPENAME_DEFN
%type <ttype> named_class_head_sans_basetype_defn
@@ -301,7 +302,7 @@ static tree current_aggr;
/* Tell yyparse how to print a token's value, if yydebug is set. */
#define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL)
-extern void yyprint ();
+extern void yyprint PROTO((FILE *, int, YYSTYPE));
extern tree combine_strings PROTO((tree));
%}
@@ -363,7 +364,7 @@ lang_extdef:
;
extdef:
- fndef
+ fndef eat_saved_input
{ if (pending_inlines) do_pending_inlines (); }
| datadef
{ if (pending_inlines) do_pending_inlines (); }
@@ -374,7 +375,7 @@ extdef:
assemble_asm ($3); }
| extern_lang_string '{' extdefs_opt '}'
{ pop_lang_context (); }
- | extern_lang_string .hush_warning fndef .warning_ok
+ | extern_lang_string .hush_warning fndef .warning_ok eat_saved_input
{ if (pending_inlines) do_pending_inlines ();
pop_lang_context (); }
| extern_lang_string .hush_warning datadef .warning_ok
@@ -435,7 +436,8 @@ template_header:
template_parm_list '>'
{ $$ = end_template_parm_list ($4); }
| TEMPLATE '<' '>'
- { $$ = NULL_TREE; }
+ { begin_specialization();
+ $$ = NULL_TREE; }
;
template_parm_list:
@@ -487,10 +489,20 @@ template_parm:
template_def:
template_header
extdef
- { end_template_decl (); }
+ {
+ if ($1)
+ end_template_decl ();
+ else
+ end_specialization ();
+ }
| template_header
error %prec EMPTY
- { end_template_decl (); }
+ {
+ if ($1)
+ end_template_decl ();
+ else
+ end_specialization ();
+ }
;
datadef:
@@ -539,8 +551,9 @@ fndef:
fn.def1 maybe_return_init ctor_initializer_opt compstmt_or_error
{ finish_function (lineno, (int)$3, 0); }
| fn.def1 maybe_return_init function_try_block
- { if ($<ttype>$) process_next_inline ($<ttype>$); }
- eat_saved_input
+ { }
+ | fn.def1 maybe_return_init error
+ { }
;
constructor_declarator:
@@ -702,6 +715,27 @@ fn.def2:
$$ = start_method (specs, $2); goto rest_of_mdef; }
| constructor_declarator
{ $$ = start_method (NULL_TREE, $$); goto rest_of_mdef; }
+ | template_header fn.def2
+ {
+ if ($1)
+ end_template_decl ();
+ else
+ end_specialization ();
+
+ if ($2 && DECL_TEMPLATE_INFO ($2)
+ && !DECL_TEMPLATE_SPECIALIZATION ($2))
+ {
+ $$ = DECL_TI_TEMPLATE ($2);
+ check_member_template ($$);
+ }
+ else if ($2)
+ $$ = $2;
+ else
+ {
+ cp_error("invalid member template declaration");
+ $$ = NULL_TREE;
+ }
+ }
;
return_id:
@@ -729,7 +763,7 @@ base_init:
error ("no base initializers given following ':'");
setup_vtbl_ptr ();
/* Always keep the BLOCK node associated with the outermost
- pair of curley braces of a function. These are needed
+ pair of curly braces of a function. These are needed
for correct operation of dwarfout.c. */
keep_next_level ();
}
@@ -781,19 +815,16 @@ member_init:
{ expand_member_init (current_class_ref, $1, $3); }
| notype_identifier LEFT_RIGHT
{ expand_member_init (current_class_ref, $1, void_type_node); }
- | complete_type_name '(' nonnull_exprlist ')'
+ | nonnested_type '(' nonnull_exprlist ')'
{ expand_member_init (current_class_ref, $1, $3); }
- | complete_type_name LEFT_RIGHT
+ | nonnested_type LEFT_RIGHT
{ expand_member_init (current_class_ref, $1, void_type_node); }
- /* GNU extension */
- | notype_qualified_id '(' nonnull_exprlist ')'
- {
- do_member_init (OP0 ($1), OP1 ($1), $3);
- }
- | notype_qualified_id LEFT_RIGHT
- {
- do_member_init (OP0 ($1), OP1 ($1), void_type_node);
- }
+ | typename_sub '(' nonnull_exprlist ')'
+ { expand_member_init (current_class_ref, TYPE_MAIN_DECL ($1),
+ $3); }
+ | typename_sub LEFT_RIGHT
+ { expand_member_init (current_class_ref, TYPE_MAIN_DECL ($1),
+ void_type_node); }
;
identifier:
@@ -817,8 +848,9 @@ identifier_defn:
;
explicit_instantiation:
- TEMPLATE aggr template_type
- { do_type_instantiation ($3, NULL_TREE); }
+ TEMPLATE typespec ';'
+ { do_type_instantiation ($2.t, NULL_TREE);
+ yyungetc (';', 1); }
| TEMPLATE typed_declspecs declarator
{ tree specs = strip_attrs ($2.t);
do_decl_instantiation (specs, $3, NULL_TREE); }
@@ -826,8 +858,9 @@ explicit_instantiation:
{ do_decl_instantiation (NULL_TREE, $2, NULL_TREE); }
| TEMPLATE constructor_declarator
{ do_decl_instantiation (NULL_TREE, $2, NULL_TREE); }
- | SCSPEC TEMPLATE aggr template_type
- { do_type_instantiation ($4, $1); }
+ | SCSPEC TEMPLATE typespec ';'
+ { do_type_instantiation ($3.t, $1);
+ yyungetc (';', 1); }
| SCSPEC TEMPLATE typed_declspecs declarator
{ tree specs = strip_attrs ($3.t);
do_decl_instantiation (specs, $4, $1); }
@@ -1016,20 +1049,20 @@ already_scoped_stmt:
nontrivial_exprlist:
expr_no_commas ',' expr_no_commas
- { $$ = tree_cons (NULL_TREE, $$,
- build_tree_list (NULL_TREE, $3)); }
+ { $$ = expr_tree_cons (NULL_TREE, $$,
+ build_expr_list (NULL_TREE, $3)); }
| expr_no_commas ',' error
- { $$ = tree_cons (NULL_TREE, $$,
- build_tree_list (NULL_TREE, error_mark_node)); }
+ { $$ = expr_tree_cons (NULL_TREE, $$,
+ build_expr_list (NULL_TREE, error_mark_node)); }
| nontrivial_exprlist ',' expr_no_commas
- { chainon ($$, build_tree_list (NULL_TREE, $3)); }
+ { chainon ($$, build_expr_list (NULL_TREE, $3)); }
| nontrivial_exprlist ',' error
- { chainon ($$, build_tree_list (NULL_TREE, error_mark_node)); }
+ { chainon ($$, build_expr_list (NULL_TREE, error_mark_node)); }
;
nonnull_exprlist:
expr_no_commas
- { $$ = build_tree_list (NULL_TREE, $$); }
+ { $$ = build_expr_list (NULL_TREE, $$); }
| nontrivial_exprlist
;
@@ -1055,6 +1088,8 @@ unary_expr:
/* Refer to the address of a label as a pointer. */
| ANDAND identifier
{ tree label = lookup_label ($2);
+ if (pedantic)
+ pedwarn ("ANSI C++ forbids `&&'");
if (label == NULL_TREE)
$$ = null_pointer_node;
else
@@ -1251,12 +1286,35 @@ expr_no_commas:
notype_unqualified_id:
'~' see_typename identifier
{ $$ = build_parse_node (BIT_NOT_EXPR, $3); }
+ | template_id
| operator_name
| IDENTIFIER
| PTYPENAME
| NSNAME %prec EMPTY
;
+template_id:
+ PFUNCNAME '<' template_arg_list template_close_bracket
+ { $$ = lookup_template_function ($1, $3); }
+ | PFUNCNAME '<' template_close_bracket
+ { $$ = lookup_template_function ($1, NULL_TREE); }
+ | operator_name '<' template_arg_list template_close_bracket
+ { $$ = lookup_template_function
+ (do_identifier ($1, 1), $3); }
+ | operator_name '<' template_close_bracket
+ { $$ = lookup_template_function
+ (do_identifier ($1, 1), NULL_TREE); }
+ ;
+
+object_template_id:
+ TEMPLATE identifier '<' template_arg_list template_close_bracket
+ { $$ = lookup_template_function ($2, $4); }
+ | TEMPLATE PFUNCNAME '<' template_arg_list template_close_bracket
+ { $$ = lookup_template_function (DECL_NAME ($2), $4); }
+ | TEMPLATE operator_name '<' template_arg_list template_close_bracket
+ { $$ = lookup_template_function (DECL_NAME ($2), $4); }
+ ;
+
unqualified_id:
notype_unqualified_id
| TYPENAME
@@ -1273,9 +1331,17 @@ expr_or_declarator:
{ $$ = $2; }
;
+notype_template_declarator:
+ IDENTIFIER '<' template_arg_list template_close_bracket
+ { $$ = lookup_template_function ($1, $3); }
+ | NSNAME '<' template_arg_list template_close_bracket
+ { $$ = lookup_template_function ($1, $3); }
+ ;
+
direct_notype_declarator:
complex_direct_notype_declarator
| notype_unqualified_id
+ | notype_template_declarator
| '(' expr_or_declarator ')'
{ $$ = finish_decl_parsing ($2); }
;
@@ -1285,7 +1351,7 @@ primary:
{
if (TREE_CODE ($$) == BIT_NOT_EXPR)
$$ = build_x_unary_op (BIT_NOT_EXPR, TREE_OPERAND ($$, 0));
- else
+ else if (TREE_CODE ($$) != TEMPLATE_ID_EXPR)
$$ = do_identifier ($$, 1);
}
| CONSTANT
@@ -1488,6 +1554,20 @@ primary:
NULL_TREE, NULL_TREE);
else
$$ = build_member_call (OP0 ($$), OP1 ($$), NULL_TREE); }
+ | object object_template_id %prec UNARY
+ {
+ $$ = build_x_component_ref ($$, $2, NULL_TREE, 1);
+ }
+ | object object_template_id '(' nonnull_exprlist ')'
+ {
+ $$ = build_method_call ($1, $2, $4,
+ NULL_TREE, LOOKUP_NORMAL);
+ }
+ | object object_template_id LEFT_RIGHT
+ {
+ $$ = build_method_call ($1, $2, NULL_TREE,
+ NULL_TREE, LOOKUP_NORMAL);
+ }
| object unqualified_id %prec UNARY
{ $$ = build_x_component_ref ($$, $2, NULL_TREE, 1); }
| object overqualified_id %prec UNARY
@@ -1644,7 +1724,7 @@ nodecls:
store_parm_decls ();
setup_vtbl_ptr ();
/* Always keep the BLOCK node associated with the outermost
- pair of curley braces of a function. These are needed
+ pair of curly braces of a function. These are needed
for correct operation of dwarfout.c. */
keep_next_level ();
}
@@ -2091,16 +2171,16 @@ initlist:
init
{ $$ = build_tree_list (NULL_TREE, $$); }
| initlist ',' init
- { $$ = tree_cons (NULL_TREE, $3, $$); }
+ { $$ = expr_tree_cons (NULL_TREE, $3, $$); }
/* These are for labeled elements. */
| '[' expr_no_commas ']' init
- { $$ = build_tree_list ($2, $4); }
+ { $$ = build_expr_list ($2, $4); }
| initlist ',' CASE expr_no_commas ':' init
- { $$ = tree_cons ($4, $6, $$); }
+ { $$ = expr_tree_cons ($4, $6, $$); }
| identifier ':' init
- { $$ = build_tree_list ($$, $3); }
+ { $$ = build_expr_list ($$, $3); }
| initlist ',' identifier ':' init
- { $$ = tree_cons ($3, $5, $$); }
+ { $$ = expr_tree_cons ($3, $5, $$); }
;
fn.defpen:
@@ -2109,19 +2189,23 @@ fn.defpen:
NULL_TREE, 1);
reinit_parse_for_function (); }
-pending_inlines:
- /* empty */
- | pending_inlines fn.defpen maybe_return_init ctor_initializer_opt
- compstmt_or_error
+pending_inline:
+ fn.defpen maybe_return_init ctor_initializer_opt compstmt_or_error
{
int nested = (hack_decl_function_context
(current_function_decl) != NULL_TREE);
- finish_function (lineno, (int)$4, nested);
- process_next_inline ($2);
+ finish_function (lineno, (int)$3, nested);
+ process_next_inline ($1);
}
- | pending_inlines fn.defpen maybe_return_init function_try_block
- { process_next_inline ($2); }
- eat_saved_input
+ | fn.defpen maybe_return_init function_try_block
+ { process_next_inline ($1); }
+ | fn.defpen maybe_return_init error
+ { process_next_inline ($1); }
+ ;
+
+pending_inlines:
+ /* empty */
+ | pending_inlines pending_inline eat_saved_input
;
/* A regurgitated default argument. The value of DEFARG_MARKER will be
@@ -2129,6 +2213,8 @@ pending_inlines:
defarg_again:
DEFARG_MARKER expr_no_commas END_OF_SAVED_INPUT
{ replace_defarg ($1, $2); }
+ | DEFARG_MARKER error END_OF_SAVED_INPUT
+ { replace_defarg ($1, error_mark_node); }
pending_defargs:
/* empty */ %prec EMPTY
@@ -2169,14 +2255,13 @@ structsp:
| ENUM complex_type_name
{ $$.t = xref_tag (enum_type_node, $2, NULL_TREE, 1);
$$.new_type_flag = 0; }
- | TYPENAME_KEYWORD nested_name_specifier identifier
- { $$.t = make_typename_type ($2, $3);
- $$.new_type_flag = 0; }
- | TYPENAME_KEYWORD global_scope nested_name_specifier identifier
- { $$.t = make_typename_type ($3, $4);
+ | TYPENAME_KEYWORD typename_sub
+ { $$.t = $2;
$$.new_type_flag = 0; }
/* C++ extensions, merged with C to avoid shift/reduce conflicts */
- | class_head left_curly opt.component_decl_list '}' maybe_attribute
+ | class_head left_curly
+ { reset_specialization(); }
+ opt.component_decl_list '}' maybe_attribute
{
int semi;
tree id;
@@ -2199,7 +2284,7 @@ structsp:
;
else
{
- $<ttype>$ = finish_struct ($1, $3, $5, semi);
+ $<ttype>$ = finish_struct ($1, $4, $6, semi);
if (semi) note_got_semicolon ($<ttype>$);
}
@@ -2208,7 +2293,7 @@ structsp:
if (! semi)
check_for_missing_semicolon ($1);
if (current_scope () == current_function_decl)
- do_pending_defargs ($1);
+ do_pending_defargs ();
}
pending_defargs
{
@@ -2218,9 +2303,9 @@ structsp:
}
pending_inlines
{
- $$.t = $<ttype>6;
+ $$.t = $<ttype>7;
$$.new_type_flag = 1;
- if (current_scope () == current_function_decl)
+ if (current_class_type == NULL_TREE)
clear_inline_text_obstack ();
}
| class_head %prec EMPTY
@@ -2273,16 +2358,17 @@ named_complex_class_head_sans_basetype:
aggr nested_name_specifier identifier
{
current_aggr = $1;
- if (TREE_CODE ($3) == TYPE_DECL)
- $$ = $3;
- else
- {
- cp_error ("`%T' does not have a nested type named `%D'",
- $2, $3);
- $$ = xref_tag
- (current_aggr, make_anon_name (), NULL_TREE, 1);
- $$ = TYPE_MAIN_DECL ($$);
- }
+ $$ = handle_class_head ($1, $2, $3);
+ }
+ | aggr global_scope nested_name_specifier identifier
+ {
+ current_aggr = $1;
+ $$ = handle_class_head ($1, $3, $4);
+ }
+ | aggr global_scope identifier
+ {
+ current_aggr = $1;
+ $$ = handle_class_head ($1, NULL_TREE, $3);
}
| aggr template_type
{ current_aggr = $$; $$ = $2; }
@@ -2415,11 +2501,9 @@ base_class:
;
base_class.1:
- complete_type_name
- | TYPENAME_KEYWORD nested_name_specifier identifier
- { $$ = TYPE_MAIN_DECL (make_typename_type ($2, $3)); }
- | TYPENAME_KEYWORD global_scope nested_name_specifier identifier
- { $$ = TYPE_MAIN_DECL (make_typename_type ($3, $4)); }
+ typename_sub
+ { $$ = TYPE_MAIN_DECL ($1); }
+ | nonnested_type
| SIGOF '(' expr ')'
{
if (current_aggr == signature_type_node)
@@ -2705,7 +2789,27 @@ component_decl_1:
build_tree_list ($3, NULL_TREE)); }
| using_decl
{ $$ = do_class_using_decl ($1); }
- ;
+ | template_header component_decl_1
+ {
+ if ($1)
+ end_template_decl ();
+ else
+ end_specialization ();
+
+ if ($2 && DECL_TEMPLATE_INFO ($2)
+ && !DECL_TEMPLATE_SPECIALIZATION ($2))
+ {
+ $$ = DECL_TI_TEMPLATE ($2);
+ check_member_template ($$);
+ }
+ else if ($2)
+ $$ = $2;
+ else
+ {
+ cp_error("invalid member template declaration");
+ $$ = NULL_TREE;
+ }
+ }
/* The case of exactly one component is handled directly by component_decl. */
/* ??? Huh? ^^^ */
@@ -2908,23 +3012,20 @@ after_type_declarator:
| direct_after_type_declarator
;
-complete_type_name:
+nonnested_type:
type_name %prec EMPTY
{
if (TREE_CODE ($1) == IDENTIFIER_NODE)
{
+ $$ = lookup_name ($1, 1);
if (current_class_type
&& TYPE_BEING_DEFINED (current_class_type)
&& ! IDENTIFIER_CLASS_VALUE ($1))
{
- /* Be sure to get an inherited typedef. */
- $$ = lookup_name ($1, 1);
/* Remember that this name has been used in the class
definition, as per [class.scope0] */
pushdecl_class_level ($$);
}
- else
- $$ = identifier_typedecl_value ($1);
}
else
$$ = $1;
@@ -2932,11 +3033,15 @@ complete_type_name:
| global_scope type_name
{
if (TREE_CODE ($2) == IDENTIFIER_NODE)
- $$ = identifier_typedecl_value ($2);
+ $$ = IDENTIFIER_GLOBAL_VALUE ($2);
else
$$ = $2;
got_scope = NULL_TREE;
}
+ ;
+
+complete_type_name:
+ nonnested_type
| nested_type
| global_scope nested_type
{ $$ = $2; }
@@ -3014,18 +3119,33 @@ complex_direct_notype_declarator:
TREE_COMPLEXITY ($$) = current_class_depth;
}
}
+ | nested_name_specifier notype_template_declarator
+ { got_scope = NULL_TREE;
+ $$ = build_parse_node (SCOPE_REF, $1, $2);
+ if ($1 != current_class_type)
+ {
+ push_nested_class ($1, 3);
+ TREE_COMPLEXITY ($$) = current_class_depth;
+ }
+ }
;
qualified_id:
nested_name_specifier unqualified_id
{ got_scope = NULL_TREE;
$$ = build_parse_node (SCOPE_REF, $$, $2); }
+ | nested_name_specifier object_template_id
+ { got_scope = NULL_TREE;
+ $$ = build_parse_node (SCOPE_REF, $1, $2); }
;
notype_qualified_id:
nested_name_specifier notype_unqualified_id
{ got_scope = NULL_TREE;
$$ = build_parse_node (SCOPE_REF, $$, $2); }
+ | nested_name_specifier object_template_id
+ { got_scope = NULL_TREE;
+ $$ = build_parse_node (SCOPE_REF, $1, $2); }
;
overqualified_id:
@@ -3082,11 +3202,7 @@ nested_name_specifier_1:
{
if (TREE_CODE ($$) == IDENTIFIER_NODE)
$$ = lastiddecl;
- if (TREE_CODE ($$) == NAMESPACE_DECL
- && DECL_NAME ($$) == get_identifier ("std"))
- got_scope = void_type_node;
- else
- got_scope = $$;
+ got_scope = $$;
}
| template_type SCOPE
{ got_scope = $$ = complete_type (TREE_TYPE ($1)); }
@@ -3102,11 +3218,71 @@ nested_name_specifier_1:
{ goto failed_scope; } */
;
+typename_sub:
+ typename_sub0
+ | global_scope typename_sub0
+ { $$ = $2; }
+ ;
+
+typename_sub0:
+ typename_sub1 identifier
+ {
+ if (TREE_CODE_CLASS (TREE_CODE ($1)) == 't')
+ $$ = make_typename_type ($1, $2);
+ else if (TREE_CODE ($2) == IDENTIFIER_NODE)
+ cp_error ("`%T' is not a class or namespace", $2);
+ else
+ $$ = $2;
+ }
+ ;
+
+typename_sub1:
+ typename_sub2
+ {
+ if (TREE_CODE ($1) == IDENTIFIER_NODE)
+ cp_error ("`%T' is not a class or namespace", $1);
+ }
+ | typename_sub1 typename_sub2
+ {
+ if (TREE_CODE_CLASS (TREE_CODE ($1)) == 't')
+ $$ = make_typename_type ($1, $2);
+ else if (TREE_CODE ($2) == IDENTIFIER_NODE)
+ cp_error ("`%T' is not a class or namespace", $2);
+ else
+ $$ = $2;
+ }
+ ;
+
+typename_sub2:
+ TYPENAME SCOPE
+ {
+ if (TREE_CODE ($1) != IDENTIFIER_NODE)
+ $$ = lastiddecl;
+ got_scope = $$ = complete_type (TREE_TYPE ($$));
+ }
+ | SELFNAME SCOPE
+ {
+ if (TREE_CODE ($1) != IDENTIFIER_NODE)
+ $$ = lastiddecl;
+ got_scope = $$ = complete_type (TREE_TYPE ($$));
+ }
+ | template_type SCOPE
+ { got_scope = $$ = complete_type (TREE_TYPE ($$)); }
+ | PTYPENAME SCOPE
+ | IDENTIFIER SCOPE
+ | NSNAME SCOPE
+ {
+ if (TREE_CODE ($$) == IDENTIFIER_NODE)
+ $$ = lastiddecl;
+ got_scope = $$;
+ }
+ ;
+
complex_type_name:
global_scope type_name
{
if (TREE_CODE ($2) == IDENTIFIER_NODE)
- $$ = identifier_typedecl_value ($2);
+ $$ = IDENTIFIER_GLOBAL_VALUE ($2);
else
$$ = $2;
got_scope = NULL_TREE;
@@ -3712,7 +3888,7 @@ function_try_block:
store_parm_decls ();
expand_start_early_try_stmts ();
}
- ctor_initializer_opt compstmt_or_error
+ ctor_initializer_opt compstmt
{ expand_start_all_catch (); }
handler_seq
{
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index f43488d62cf..9f42d008ec6 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -1,5 +1,5 @@
/* Handle parameterized types (templates) for GNU C++.
- Copyright (C) 1992, 93, 94, 95, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
Rewritten by Jason Merrill (jason@cygnus.com).
@@ -22,9 +22,6 @@ Boston, MA 02111-1307, USA. */
/* Known bugs or deficiencies include:
- templates for class static data don't work (methods only),
- duplicated method templates can crash the compiler,
- interface/impl data is taken from file defining the template,
all methods must be provided in header files; can't use a source
file that contains only the method templates and "just win". */
@@ -40,6 +37,11 @@ Boston, MA 02111-1307, USA. */
#include "lex.h"
#include "output.h"
#include "defaults.h"
+#include "except.h"
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
extern struct obstack permanent_obstack;
@@ -58,21 +60,187 @@ static tree *maybe_template_tail = &maybe_templates;
int minimal_parse_mode;
+int processing_specialization;
+static int template_header_count;
+
#define obstack_chunk_alloc xmalloc
#define obstack_chunk_free free
-static int unify ();
-
-void pop_template_decls ();
-
-static tree classtype_mangled_name ();
-static char * mangle_class_name_for_template ();
-static tree tsubst_expr_values ();
+static int unify PROTO((tree, tree *, int, tree, tree, int *, int));
+static void add_pending_template PROTO((tree));
+static int push_tinst_level PROTO((tree));
+static tree classtype_mangled_name PROTO((tree));
+static char *mangle_class_name_for_template PROTO((char *, tree, tree));
+static tree tsubst_expr_values PROTO((tree, tree));
static int comp_template_args PROTO((tree, tree));
-tree most_specialized_class PROTO((tree, tree));
+static int list_eq PROTO((tree, tree));
static tree get_class_bindings PROTO((tree, tree, tree));
-tree make_temp_vec PROTO((int));
-static tree tsubst_enum PROTO((tree, tree *, int));
+static tree coerce_template_parms PROTO((tree, tree, tree));
+static tree tsubst_enum PROTO((tree, tree, int, tree *));
+static tree add_to_template_args PROTO((tree, tree));
+static int type_unification_real PROTO((tree, tree *, tree, tree, int*,
+ int, int, int));
+static int processing_explicit_specialization PROTO((int));
+static void note_template_header PROTO((int));
+
+/* Restore the template parameter context. */
+
+void
+begin_member_template_processing (decl)
+ tree decl;
+{
+ tree parms;
+ int i;
+
+ parms = DECL_INNERMOST_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl));
+
+ ++processing_template_decl;
+ current_template_parms
+ = tree_cons (build_int_2 (0, processing_template_decl),
+ parms, current_template_parms);
+ pushlevel (0);
+ for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
+ {
+ tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
+ my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (parm)) == 'd', 0);
+
+ switch (TREE_CODE (parm))
+ {
+ case TYPE_DECL:
+ pushdecl (parm);
+ break;
+
+ case PARM_DECL:
+ {
+ /* Make a CONST_DECL as is done in process_template_parm. */
+ tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
+ TREE_TYPE (parm));
+ DECL_INITIAL (decl) = DECL_INITIAL (parm);
+ pushdecl (decl);
+ }
+ break;
+
+ default:
+ my_friendly_abort (0);
+ }
+ }
+}
+
+/* Undo the effects of begin_member_template_processing. */
+
+void
+end_member_template_processing ()
+{
+ if (! processing_template_decl)
+ return;
+
+ --processing_template_decl;
+ current_template_parms = TREE_CHAIN (current_template_parms);
+ poplevel (0, 0, 0);
+}
+
+/* Returns non-zero iff T is a member template function. Works if T
+ is either a FUNCTION_DECL or a TEMPLATE_DECL. */
+
+int
+is_member_template (t)
+ tree t;
+{
+ int r = 0;
+
+ if (TREE_CODE (t) != FUNCTION_DECL
+ && !DECL_FUNCTION_TEMPLATE_P (t))
+ /* Anything that isn't a template or a template function is
+ certainly not a member template. */
+ return 0;
+
+ if ((DECL_FUNCTION_MEMBER_P (t)
+ && !DECL_TEMPLATE_SPECIALIZATION (t))
+ || (TREE_CODE (t) == TEMPLATE_DECL &&
+ DECL_FUNCTION_MEMBER_P (DECL_TEMPLATE_RESULT (t))))
+ {
+ tree tmpl = NULL_TREE;
+
+ if (DECL_FUNCTION_TEMPLATE_P (t))
+ tmpl = t;
+ else if (DECL_TEMPLATE_INFO (t)
+ && DECL_FUNCTION_TEMPLATE_P (DECL_TI_TEMPLATE (t)))
+ tmpl = DECL_TI_TEMPLATE (t);
+
+ if (tmpl)
+ {
+ tree parms = DECL_TEMPLATE_PARMS (tmpl);
+ int parm_levels = list_length (parms);
+ int template_class_levels = 0;
+ tree ctx = DECL_CLASS_CONTEXT (t);
+
+ if (CLASSTYPE_TEMPLATE_INFO (ctx))
+ {
+ tree args;
+
+ /* Here, we should really count the number of levels
+ deep ctx is, making sure not to count any levels that
+ are just specializations. Since there are no member
+ template classes yet, we don't have to do all that. */
+
+ if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (ctx))
+ template_class_levels = 1;
+ else
+ {
+ int i;
+
+ args = CLASSTYPE_TI_ARGS (ctx);
+
+ if (args == NULL_TREE)
+ template_class_levels = 1;
+ else
+ for (i = 0; i < TREE_VEC_LENGTH (args); ++i)
+ if (uses_template_parms (TREE_VEC_ELT (args, i)))
+ {
+ template_class_levels++;
+ break;
+ }
+ }
+ }
+
+ if (parm_levels > template_class_levels)
+ r = 1;
+ }
+ }
+
+ return r;
+}
+
+/* Return a new template argument vector which contains all of ARGS,
+ but has as its innermost set of arguments the EXTRA_ARGS. */
+
+static tree
+add_to_template_args (args, extra_args)
+ tree args;
+ tree extra_args;
+{
+ tree new_args;
+
+ if (TREE_CODE (TREE_VEC_ELT (args, 0)) != TREE_VEC)
+ {
+ new_args = make_tree_vec (2);
+ TREE_VEC_ELT (new_args, 0) = args;
+ }
+ else
+ {
+ int i;
+
+ new_args = make_tree_vec (TREE_VEC_LENGTH (args) - 1);
+
+ for (i = 0; i < TREE_VEC_LENGTH (args); ++i)
+ TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (args, i);
+ }
+
+ TREE_VEC_ELT (new_args,
+ TREE_VEC_LENGTH (new_args) - 1) = extra_args;
+
+ return new_args;
+}
/* We've got a template header coming up; push to a new level for storing
the parms. */
@@ -83,8 +251,388 @@ begin_template_parm_list ()
pushlevel (0);
declare_pseudo_global_level ();
++processing_template_decl;
+ note_template_header (0);
}
+
+/* We've just seen template <>. */
+
+void
+begin_specialization ()
+{
+ note_template_header (1);
+}
+
+
+/* Called at then end of processing a declaration preceded by
+ template<>. */
+
+void
+end_specialization ()
+{
+ reset_specialization ();
+}
+
+
+/* Any template <>'s that we have seen thus far are not referring to a
+ function specialization. */
+
+void
+reset_specialization ()
+{
+ processing_specialization = 0;
+ template_header_count = 0;
+}
+
+
+/* We've just seen a template header. If SPECIALIZATION is non-zero,
+ it was of the form template <>. */
+
+static void
+note_template_header (specialization)
+ int specialization;
+{
+ processing_specialization = specialization;
+ template_header_count++;
+}
+
+
+/* Returns non-zero iff a declarator, in which the number of template
+ types that appeared was TEMPLATE_COUNT, is an explicit
+ specialization. */
+
+static int
+processing_explicit_specialization (template_count)
+ int template_count;
+{
+ /* A function declaration is an explicit specialization of a member
+ template if all of the following conditions hold:
+
+ o There was a template <...> preceding the declaration.
+ o The last template <...> was in fact template <>.
+ o The number of template <...>'s preceding the declaration, less
+ the number of template classes with arguments specified used to
+ qualify the function name, is 1.
+
+ For example:
+
+ template <> void S<int>::foo();
+ template <class T> template <> void S<T>::foo();
+ template <> struct S<int> { ... template <> void foo(); }
+
+ The first of these is not a specialization of S<int>::foo() (it
+ is instead a specialization of S<T>::foo), while the next two are
+ specializations of member template functions. */
+
+ return processing_specialization
+ && template_header_count > template_count;
+}
+
+/* Returns the template function specialized by TEMPLATE_ID, or
+ NULL_TREE if there is none.
+
+ The TEMPLATE_ID is a TEMPLATE_ID_EXPR. The TYPE is
+ the type it has been declared to have. Return the TEMPLATE_DECL
+ that is being specialized, and put the specialization arguments in
+ *TARGS. If no appropriate specialization can be found, NULL_TREE is
+ returned, and *TARGS is assigned NULL_TREE. If complain is
+ non-zero, error messages are printed where appropriate. */
+
+tree
+determine_explicit_specialization (template_id, type, targs_out,
+ need_member_template,
+ complain)
+ tree template_id;
+ tree type;
+ tree* targs_out;
+ int need_member_template;
+ int complain;
+{
+ int i;
+ int overloaded;
+ tree fns;
+ tree matching_fns = NULL_TREE;
+ tree name = NULL_TREE;
+ tree result;
+ tree fn;
+
+ my_friendly_assert (TREE_CODE (template_id) == TEMPLATE_ID_EXPR,
+ 0);
+
+ fns = TREE_OPERAND (template_id, 0);
+
+ overloaded = fns != NULL_TREE && really_overloaded_fn (fns);
+
+ for (fn = (fns != NULL_TREE) ? get_first_fn (fns) : NULL_TREE;
+ fn != NULL_TREE;
+ fn = overloaded ? DECL_CHAIN (fn) : NULL_TREE)
+ {
+ int dummy = 0;
+ tree targs;
+
+ if (name == NULL_TREE)
+ name = DECL_NAME (fn);
+
+ if (TREE_CODE (fn) != TEMPLATE_DECL
+ || (need_member_template && !is_member_template (fn)))
+ continue;
+
+ if (list_length (TREE_OPERAND (template_id, 1)) > DECL_NTPARMS (fn))
+ continue;
+
+ targs = make_scratch_vec (DECL_NTPARMS (fn));
+
+ /* We allow incomplete unification here, because we are going to
+ check all the functions. */
+ i = type_unification (DECL_INNERMOST_TEMPLATE_PARMS (fn),
+ &TREE_VEC_ELT (targs, 0),
+ type
+ ? TYPE_ARG_TYPES (TREE_TYPE (fn)) : NULL_TREE,
+ type ? TYPE_ARG_TYPES (type) : NULL_TREE,
+ TREE_OPERAND (template_id, 1),
+ &dummy, 1, 1);
+
+ if (i == 0)
+ {
+ /* Unification was successful. See if the return types
+ match. */
+ if (type != NULL_TREE)
+ {
+ tree tmpl_return_type = tsubst (TREE_TYPE (TREE_TYPE (fn)),
+ targs,
+ DECL_NTPARMS (fn),
+ NULL_TREE);
+
+ if (tmpl_return_type != TREE_TYPE (type))
+ {
+ /* Always complain about this. With ambiguity, some
+ other context, might resolve things. But, a
+ non-matching return type will always be a
+ problem. */
+ cp_error ("Return type of explicit specialization of");
+ cp_error ("`%D' is `%T', but should be `%T'.",
+ fn, TREE_TYPE (type), tmpl_return_type);
+ *targs_out = NULL_TREE;
+ return NULL_TREE;
+ }
+ }
+
+ matching_fns = scratch_tree_cons (fn, targs, matching_fns);
+ }
+ }
+
+ if (matching_fns == NULL_TREE)
+ {
+ if (complain)
+ cp_error ("Specialization of `%s' does not match any template declaration.",
+ IDENTIFIER_POINTER (name));
+ *targs_out = NULL_TREE;
+ return NULL_TREE;
+ }
+
+ if (TREE_CHAIN (matching_fns) != NULL_TREE)
+ {
+ if (complain)
+ {
+ tree fn;
+
+ cp_error ("Ambiguous explicit specialization. Candidates are:");
+ for (fn = matching_fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
+ cp_error (" %D", TREE_PURPOSE (fn));
+ }
+
+ *targs_out = NULL_TREE;
+ return NULL_TREE;
+ }
+
+ /* We have one, and exactly one, match. */
+ *targs_out = TREE_VALUE (matching_fns);
+ return TREE_PURPOSE (matching_fns);
+}
+
+
+/* Check to see if the function just declared, as indicated in
+ DECLARATOR, and in DECL, is a specialization. Check that the
+ specialization is OK. If FLAGS == 1, we are being called by
+ finish_struct_methods. If FLAGS == 2, we are being called by
+ grokfndecl, and the function has a definition, or is a friend. If
+ FLAGS == 3, this is a friend declaration.
+ Returns 0 if the decl is not an explicit specialization or
+ instantiation, 1 if it is an explicit specialization, and 2 if it
+ is an explicit instantiation. */
+
+int
+check_explicit_specialization (declarator, decl, template_count, flags)
+ tree declarator;
+ tree decl;
+ int template_count;
+ int flags;
+{
+ int finish_member = flags == 1;
+ int have_def = flags == 2;
+ int is_friend = flags == 3;
+
+ if (processing_explicit_specialization (template_count)
+ || finish_member
+ || TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
+ {
+ tree tmpl = NULL_TREE;
+ tree dname = DECL_NAME (decl);
+ tree ctype = DECL_CLASS_CONTEXT (decl);
+ tree targs;
+
+ /* We've come across a declarator that looks like: U f<T1,
+ T2, ...>(A1, A2, ..). This is an explicit template
+ specialization. Check that:
+
+ o The explicitly specified parameters together with those
+ that can be deduced by template argument deduction
+ uniquely determine a particular specialization.
+
+ See [temp.expl.spec]. */
+
+ if (!finish_member
+ && TREE_CODE (declarator) == TEMPLATE_ID_EXPR
+ && !processing_explicit_specialization (template_count)
+ && !is_friend)
+ {
+ if (!have_def)
+ /* This is not an explicit specialization. It must be
+ an explicit instantiation. */
+ return 2;
+ else if (pedantic)
+ pedwarn ("Explicit specialization not preceded by `template <>'");
+ }
+
+ if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
+ {
+ tree fns;
+
+ my_friendly_assert (TREE_CODE (declarator) == IDENTIFIER_NODE,
+ 0);
+ if (!ctype)
+ fns = IDENTIFIER_GLOBAL_VALUE (dname);
+ else
+ fns = dname;
+
+ declarator = lookup_template_function (fns, NULL_TREE);
+ }
+
+ if (TREE_CODE (TREE_OPERAND (declarator, 0)) == LOOKUP_EXPR)
+ {
+ /* A friend declaration. We can't do much, because we don't
+ know what this resolves to, yet. */
+ my_friendly_assert (is_friend != 0, 0);
+ SET_DECL_IMPLICIT_INSTANTIATION (decl);
+ return 1;
+ }
+
+ if (ctype
+ && TREE_CODE (TREE_OPERAND (declarator, 0)) == IDENTIFIER_NODE)
+ {
+ tree fns;
+
+ if (TYPE_BEING_DEFINED (ctype) && !finish_member)
+ {
+ /* Since finish_struct_1 has not been called yet, we
+ can't call lookup_fnfields. We note that this
+ template is a specialization, and proceed, letting
+ finish_struct_methods fix this up later. */
+ SET_DECL_TEMPLATE_SPECIALIZATION (decl);
+ DECL_TEMPLATE_INFO (decl)
+ = perm_tree_cons (NULL_TREE,
+ TREE_OPERAND (declarator, 1),
+ NULL_TREE);
+ return 1;
+ }
+
+ fns = lookup_fnfields (TYPE_BINFO (ctype),
+ TREE_OPERAND (declarator, 0),
+ 1);
+
+ if (fns == NULL_TREE)
+ {
+ cp_error ("No member template `%s' declared in `%T'",
+ IDENTIFIER_POINTER (TREE_OPERAND (declarator,
+ 0)),
+ ctype);
+ return 1;
+ }
+ else
+ TREE_OPERAND (declarator, 0) = fns;
+ }
+
+ tmpl =
+ determine_explicit_specialization
+ (declarator, TREE_TYPE (decl), &targs,
+ TREE_CODE (decl) == TEMPLATE_DECL, 1);
+
+ if (tmpl)
+ {
+ /* Mangle the function name appropriately. */
+ if (name_mangling_version >= 1)
+ {
+ tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (tmpl));
+
+ if (ctype
+ && TREE_CODE (TREE_TYPE (tmpl)) == FUNCTION_TYPE)
+ arg_types =
+ hash_tree_chain (build_pointer_type (ctype),
+ arg_types);
+
+ DECL_ASSEMBLER_NAME (decl)
+ = build_template_decl_overload
+ (DECL_NAME (decl),
+ arg_types,
+ TREE_TYPE (TREE_TYPE (tmpl)),
+ DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
+ targs, ctype != NULL_TREE);
+ }
+
+ if (is_friend && !have_def)
+ {
+ /* This is not really a declaration of a specialization.
+ It's just the name of an instantiation. But, it's not
+ a request for an instantiation, either. */
+ SET_DECL_IMPLICIT_INSTANTIATION (decl);
+ DECL_TEMPLATE_INFO (decl)
+ = perm_tree_cons (tmpl, targs, NULL_TREE);
+ return 1;
+ }
+
+ /* This function declaration is a template specialization.
+ Record that fact. */
+ SET_DECL_TEMPLATE_SPECIALIZATION (decl);
+ DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
+ = perm_tree_cons (targs, decl,
+ DECL_TEMPLATE_SPECIALIZATIONS
+ (tmpl));
+ /* If DECL_TI_TEMPLATE (decl), the decl is an
+ instantiation of a specialization of a member template.
+ (In other words, there was a member template, in a
+ class template. That member template was specialized.
+ We then instantiated the class, so there is now an
+ instance of that specialization.)
+
+ According to the CD2,
+
+ 14.7.3.13 [tmpl.expl.spec]
+
+ A specialization of a member function template or
+ member class template of a non-specialized class
+ template is itself a template.
+
+ So, we just leave the template info alone in this case. */
+ if (!(DECL_TEMPLATE_INFO (decl) && DECL_TI_TEMPLATE (decl)))
+ DECL_TEMPLATE_INFO (decl)
+ = perm_tree_cons (tmpl, targs, NULL_TREE);
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
/* Process information from new template parameter NEXT and append it to the
LIST being built. */
@@ -195,6 +743,8 @@ end_template_parm_list (parms)
void
end_template_decl ()
{
+ reset_specialization ();
+
if (! processing_template_decl)
return;
@@ -212,7 +762,10 @@ tree
current_template_args ()
{
tree header = current_template_parms;
- tree args = NULL_TREE;
+ int length = list_length (header);
+ tree args = make_tree_vec (length);
+ int l = length;
+
while (header)
{
tree a = copy_node (TREE_VALUE (header));
@@ -220,20 +773,26 @@ current_template_args ()
TREE_TYPE (a) = NULL_TREE;
while (i--)
{
- tree t = TREE_VALUE (TREE_VEC_ELT (a, i));
- if (TREE_CODE (t) == TYPE_DECL)
- t = TREE_TYPE (t);
- else
- t = DECL_INITIAL (t);
+ tree t = TREE_VEC_ELT (a, i);
+
+ /* t will be a list if we are called from within a
+ begin/end_template_parm_list pair, but a vector directly
+ if within a begin/end_member_template_processing pair. */
+ if (TREE_CODE (t) == TREE_LIST)
+ {
+ t = TREE_VALUE (t);
+
+ if (TREE_CODE (t) == TYPE_DECL)
+ t = TREE_TYPE (t);
+ else
+ t = DECL_INITIAL (t);
+ }
+
TREE_VEC_ELT (a, i) = t;
}
- args = tree_cons (TREE_PURPOSE (header), a, args);
+ TREE_VEC_ELT (args, --l) = a;
header = TREE_CHAIN (header);
}
- args = nreverse (args);
-
- /* FIXME Remove this when we support member templates. */
- args = TREE_VALUE (args);
return args;
}
@@ -286,12 +845,28 @@ push_template_decl (decl)
if (! ctx || TYPE_BEING_DEFINED (ctx))
{
tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
- DECL_TEMPLATE_PARMS (tmpl) = TREE_VALUE (current_template_parms);
+ DECL_TEMPLATE_PARMS (tmpl) = current_template_parms;
DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
+ if (DECL_LANG_SPECIFIC (decl))
+ {
+ DECL_CLASS_CONTEXT (tmpl) = DECL_CLASS_CONTEXT (decl);
+ DECL_STATIC_FUNCTION_P (tmpl) =
+ DECL_STATIC_FUNCTION_P (decl);
+
+ if (DECL_TEMPLATE_SPECIALIZATION (decl))
+ {
+ /* A specialization of a member template of a template
+ class. */
+ SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
+ DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
+ DECL_TEMPLATE_INFO (decl) = NULL_TREE;
+ }
+ }
}
else
{
tree t;
+ tree a;
if (CLASSTYPE_TEMPLATE_INSTANTIATION (ctx))
cp_error ("must specialize `%#T' before defining member `%#D'",
@@ -305,19 +880,54 @@ push_template_decl (decl)
}
else
tmpl = DECL_TI_TEMPLATE (decl);
+
+ if (is_member_template (tmpl))
+ {
+ a = TREE_VEC_ELT (args, TREE_VEC_LENGTH (args) - 1);
+ t = DECL_INNERMOST_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl));
+ if (TREE_VEC_LENGTH (t)
+ != TREE_VEC_LENGTH (a))
+ {
+ cp_error ("got %d template parameters for `%#D'",
+ TREE_VEC_LENGTH (a), decl);
+ cp_error (" but %d required", TREE_VEC_LENGTH (t));
+ }
+ if (TREE_VEC_LENGTH (args) > 1)
+ /* Get the template parameters for the enclosing template
+ class. */
+ a = TREE_VEC_ELT (args, TREE_VEC_LENGTH (args) - 2);
+ else
+ a = NULL_TREE;
+ }
+ else
+ a = TREE_VEC_ELT (args, TREE_VEC_LENGTH (args) - 1);
+
+ t = NULL_TREE;
if (CLASSTYPE_TEMPLATE_SPECIALIZATION (ctx))
- t = TREE_VALUE (CLASSTYPE_TI_SPEC_INFO (ctx));
- else
- t = DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (ctx));
+ {
+ /* When processing an inline member template of a
+ specialized class, there is no CLASSTYPE_TI_SPEC_INFO. */
+ if (CLASSTYPE_TI_SPEC_INFO (ctx))
+ t = TREE_VALUE (CLASSTYPE_TI_SPEC_INFO (ctx));
+ }
+ else if (CLASSTYPE_TEMPLATE_INFO (ctx))
+ t = DECL_INNERMOST_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (ctx));
+
+ /* There should be template arguments if and only if there is a
+ template class. */
+ my_friendly_assert((a != NULL_TREE) == (t != NULL_TREE), 0);
- if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (args))
+ if (t != NULL_TREE
+ && TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
{
cp_error ("got %d template parameters for `%#D'",
- TREE_VEC_LENGTH (args), decl);
+ TREE_VEC_LENGTH (a), decl);
cp_error (" but `%#T' has %d", ctx, TREE_VEC_LENGTH (t));
}
}
+ /* Get the innermost set of template arguments. */
+ args = TREE_VEC_ELT (args, TREE_VEC_LENGTH (args) - 1);
DECL_TEMPLATE_RESULT (tmpl) = decl;
TREE_TYPE (tmpl) = TREE_TYPE (decl);
@@ -326,7 +936,7 @@ push_template_decl (decl)
tmpl = pushdecl_top_level (tmpl);
if (primary)
- TREE_TYPE (DECL_TEMPLATE_PARMS (tmpl)) = tmpl;
+ TREE_TYPE (DECL_INNERMOST_TEMPLATE_PARMS (tmpl)) = tmpl;
info = perm_tree_cons (tmpl, args, NULL_TREE);
@@ -341,8 +951,6 @@ push_template_decl (decl)
DECL_TEMPLATE_INFO (decl) = info;
}
-tree tsubst PROTO ((tree, tree*, int, tree));
-
/* Convert all template arguments to their appropriate types, and return
a vector containing the resulting values. If any error occurs, return
error_mark_node. */
@@ -397,10 +1005,10 @@ coerce_template_parms (parms, arglist, in_decl)
else if (TREE_CODE (TREE_VALUE (TREE_VEC_ELT (parms, i)))
== TYPE_DECL)
arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (parms, i)),
- &TREE_VEC_ELT (vec, 0), i, in_decl);
+ vec, i, in_decl);
else
arg = tsubst_expr (TREE_PURPOSE (TREE_VEC_ELT (parms, i)),
- &TREE_VEC_ELT (vec, 0), i, in_decl);
+ vec, i, in_decl);
TREE_VEC_ELT (vec, i) = arg;
}
@@ -446,7 +1054,8 @@ coerce_template_parms (parms, arglist, in_decl)
if (! processing_template_decl)
{
tree t = target_type (val);
- if (IS_AGGR_TYPE (t)
+ if (TREE_CODE (t) != TYPENAME_TYPE
+ && IS_AGGR_TYPE (t)
&& decl_function_context (TYPE_MAIN_DECL (t)))
{
cp_error ("type `%T' composed from a local class is not a valid template-argument", val);
@@ -456,7 +1065,7 @@ coerce_template_parms (parms, arglist, in_decl)
}
else
{
- tree t = tsubst (TREE_TYPE (parm), &TREE_VEC_ELT (vec, 0),
+ tree t = tsubst (TREE_TYPE (parm), vec,
TREE_VEC_LENGTH (vec), in_decl);
if (processing_template_decl)
val = arg;
@@ -476,7 +1085,7 @@ coerce_template_parms (parms, arglist, in_decl)
}
else if (!TREE_CONSTANT (val))
{
- cp_error ("non-const `%E' cannot be used as template argument",
+ cp_error ("non-constant `%E' cannot be used as template argument",
arg);
val = error_mark_node;
}
@@ -500,7 +1109,7 @@ coerce_template_parms (parms, arglist, in_decl)
else if (TREE_CODE (a) != VAR_DECL
&& TREE_CODE (a) != FUNCTION_DECL)
goto bad;
- else if (! DECL_PUBLIC (a))
+ else if (! TREE_PUBLIC (a))
{
cp_error ("address of non-extern `%E' cannot be used as template argument", a);
val = error_mark_node;
@@ -536,6 +1145,9 @@ comp_template_args (oldargs, newargs)
{
int i;
+ if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
+ return 0;
+
for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
{
tree nt = TREE_VEC_ELT (newargs, i);
@@ -545,7 +1157,13 @@ comp_template_args (oldargs, newargs)
continue;
if (TREE_CODE (nt) != TREE_CODE (ot))
return 0;
- if (TREE_CODE_CLASS (TREE_CODE (ot)) == 't')
+ if (TREE_CODE (nt) == TREE_VEC)
+ {
+ /* For member templates */
+ if (comp_template_args (nt, ot))
+ continue;
+ }
+ else if (TREE_CODE_CLASS (TREE_CODE (ot)) == 't')
{
if (comptypes (ot, nt, 1))
continue;
@@ -652,7 +1270,7 @@ classtype_mangled_name (t)
tree name = DECL_NAME (CLASSTYPE_TI_TEMPLATE (t));
char *mangled_name = mangle_class_name_for_template
(IDENTIFIER_POINTER (name),
- DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (t)),
+ DECL_INNERMOST_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (t)),
CLASSTYPE_TI_ARGS (t));
tree id = get_identifier (mangled_name);
IDENTIFIER_TEMPLATE (id) = name;
@@ -682,6 +1300,35 @@ add_pending_template (d)
TI_PENDING_TEMPLATE_FLAG (ti) = 1;
}
+
+/* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS (which
+ may be either a _DECL or an overloaded function or an
+ IDENTIFIER_NODE), and ARGLIST. */
+
+tree
+lookup_template_function (fns, arglist)
+ tree fns, arglist;
+{
+ if (fns == NULL_TREE)
+ {
+ cp_error ("non-template used as template");
+ return error_mark_node;
+ }
+
+ if (arglist != NULL_TREE && !TREE_PERMANENT (arglist))
+ {
+ push_obstacks (&permanent_obstack, &permanent_obstack);
+ arglist = copy_list (arglist);
+ pop_obstacks ();
+ }
+
+ return build_min (TEMPLATE_ID_EXPR,
+ TREE_TYPE (fns)
+ ? TREE_TYPE (fns) : unknown_type_node,
+ fns, arglist);
+}
+
+
/* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
parameters, find the desired type.
@@ -736,7 +1383,7 @@ lookup_template_class (d1, arglist, in_decl)
if (PRIMARY_TEMPLATE_P (template))
{
- parmlist = DECL_TEMPLATE_PARMS (template);
+ parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
arglist = coerce_template_parms (parmlist, arglist, template);
if (arglist == error_mark_node)
@@ -815,7 +1462,7 @@ lookup_template_class (d1, arglist, in_decl)
/* We need to set this again after CLASSTYPE_TEMPLATE_INFO is set up. */
DECL_ASSEMBLER_NAME (TYPE_MAIN_DECL (t)) = id;
- if (! uses_template_parms (arglist))
+ /* if (! uses_template_parms (arglist)) */
DECL_ASSEMBLER_NAME (TYPE_MAIN_DECL (t))
= get_identifier (build_overload_name (t, 1, 1));
@@ -934,10 +1581,19 @@ uses_template_parms (t)
case REAL_TYPE:
case COMPLEX_TYPE:
case VOID_TYPE:
- case ENUMERAL_TYPE:
case BOOLEAN_TYPE:
return 0;
+ case ENUMERAL_TYPE:
+ {
+ tree v;
+
+ for (v = TYPE_VALUES (t); v != NULL_TREE; v = TREE_CHAIN (v))
+ if (uses_template_parms (TREE_VALUE (v)))
+ return 1;
+ }
+ return 0;
+
/* constants */
case INTEGER_CST:
case REAL_CST:
@@ -1205,7 +1861,7 @@ instantiate_class_template (type)
tree elt;
TREE_VEC_ELT (bases, i) = elt
- = tsubst (TREE_VEC_ELT (pbases, i), &TREE_VEC_ELT (args, 0),
+ = tsubst (TREE_VEC_ELT (pbases, i), args,
TREE_VEC_LENGTH (args), NULL_TREE);
BINFO_INHERITANCE_CHAIN (elt) = binfo;
@@ -1237,10 +1893,9 @@ instantiate_class_template (type)
/* These will add themselves to CLASSTYPE_TAGS for the new type. */
if (TREE_CODE (tag) == ENUMERAL_TYPE)
{
- tree e, newtag = tsubst_enum (tag, &TREE_VEC_ELT (args, 0),
- TREE_VEC_LENGTH (args));
+ tree e, newtag = tsubst_enum (tag, args,
+ TREE_VEC_LENGTH (args), field_chain);
- *field_chain = grok_enum_decls (newtag, NULL_TREE);
while (*field_chain)
{
DECL_FIELD_CONTEXT (*field_chain) = type;
@@ -1248,7 +1903,7 @@ instantiate_class_template (type)
}
}
else
- tsubst (tag, &TREE_VEC_ELT (args, 0),
+ tsubst (tag, args,
TREE_VEC_LENGTH (args), NULL_TREE);
}
@@ -1256,7 +1911,7 @@ instantiate_class_template (type)
for (t = TYPE_FIELDS (pattern); t; t = TREE_CHAIN (t))
if (TREE_CODE (t) != CONST_DECL)
{
- tree r = tsubst (t, &TREE_VEC_ELT (args, 0),
+ tree r = tsubst (t, args,
TREE_VEC_LENGTH (args), NULL_TREE);
if (TREE_CODE (r) == VAR_DECL)
{
@@ -1284,19 +1939,19 @@ instantiate_class_template (type)
DECL_FRIENDLIST (TYPE_MAIN_DECL (type))
= tsubst (DECL_FRIENDLIST (TYPE_MAIN_DECL (pattern)),
- &TREE_VEC_ELT (args, 0), TREE_VEC_LENGTH (args), NULL_TREE);
+ args, TREE_VEC_LENGTH (args), NULL_TREE);
{
tree d = CLASSTYPE_FRIEND_CLASSES (type)
- = tsubst (CLASSTYPE_FRIEND_CLASSES (pattern), &TREE_VEC_ELT (args, 0),
+ = tsubst (CLASSTYPE_FRIEND_CLASSES (pattern), args,
TREE_VEC_LENGTH (args), NULL_TREE);
/* This does injection for friend classes. */
for (; d; d = TREE_CHAIN (d))
TREE_VALUE (d) = xref_tag_from_type (TREE_VALUE (d), NULL_TREE, 1);
- d = tsubst (DECL_TEMPLATE_INJECT (template), &TREE_VEC_ELT (args, 0),
- TREE_VEC_LENGTH (args), NULL_TREE);
+ d = tsubst (DECL_TEMPLATE_INJECT (template), args,
+ TREE_VEC_LENGTH (args), NULL_TREE);
for (; d; d = TREE_CHAIN (d))
{
@@ -1321,10 +1976,10 @@ instantiate_class_template (type)
type = finish_struct_1 (type, 0);
CLASSTYPE_GOT_SEMICOLON (type) = 1;
- if (at_eof && TYPE_BINFO_VTABLE (type) != NULL_TREE)
- finish_prevtable_vardecl (NULL, TYPE_BINFO_VTABLE (type));
repo_template_used (type);
+ if (at_eof && TYPE_BINFO_VTABLE (type) != NULL_TREE)
+ finish_prevtable_vardecl (NULL, TYPE_BINFO_VTABLE (type));
}
else
{
@@ -1368,15 +2023,50 @@ lookup_nested_type_by_name (ctype, name)
for (t = CLASSTYPE_TAGS (ctype); t; t = TREE_CHAIN (t))
{
- if (name == TREE_PURPOSE (t))
+ if (name == TREE_PURPOSE (t)
+ /* this catches typedef enum { foo } bar; */
+ || name == TYPE_IDENTIFIER (TREE_VALUE (t)))
return TREE_VALUE (t);
}
return NULL_TREE;
}
+/* If arg is a non-type template parameter that does not depend on template
+ arguments, fold it like we weren't in the body of a template. */
+
+static tree
+maybe_fold_nontype_arg (arg)
+ tree arg;
+{
+ if (TREE_CODE_CLASS (TREE_CODE (arg)) != 't'
+ && !uses_template_parms (arg))
+ {
+ /* Sometimes, one of the args was an expression involving a
+ template constant parameter, like N - 1. Now that we've
+ tsubst'd, we might have something like 2 - 1. This will
+ confuse lookup_template_class, so we do constant folding
+ here. We have to unset processing_template_decl, to
+ fool build_expr_from_tree() into building an actual
+ tree. */
+
+ int saved_processing_template_decl = processing_template_decl;
+ processing_template_decl = 0;
+ arg = fold (build_expr_from_tree (arg));
+ processing_template_decl = saved_processing_template_decl;
+ }
+ return arg;
+}
+
+/* Take the tree structure T and replace template parameters used therein
+ with the argument vector ARGS. NARGS is the number of args; should
+ be removed. IN_DECL is an associated decl for diagnostics.
+
+ tsubst is used for dealing with types, decls and the like; for
+ expressions, use tsubst_expr or tsubst_copy. */
+
tree
tsubst (t, args, nargs, in_decl)
- tree t, *args;
+ tree t, args;
int nargs;
tree in_decl;
{
@@ -1465,20 +2155,116 @@ tsubst (t, args, nargs, in_decl)
}
case TEMPLATE_TYPE_PARM:
+ case TEMPLATE_CONST_PARM:
{
- tree arg = args[TEMPLATE_TYPE_IDX (t)];
- return cp_build_type_variant
- (arg, TYPE_READONLY (arg) || TYPE_READONLY (t),
- TYPE_VOLATILE (arg) || TYPE_VOLATILE (t));
+ int idx;
+ int level;
+
+ if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
+ {
+ idx = TEMPLATE_TYPE_IDX (t);
+ level = TEMPLATE_TYPE_LEVEL (t);
+ }
+ else
+ {
+ idx = TEMPLATE_CONST_IDX (t);
+ level = TEMPLATE_CONST_LEVEL (t);
+ }
+
+ if (TREE_VEC_LENGTH (args) > 0)
+ {
+ tree arg = NULL_TREE;
+
+ if (TREE_CODE (TREE_VEC_ELT (args, 0)) == TREE_VEC)
+ {
+ if (TREE_VEC_LENGTH (args) >= level - 1)
+ arg = TREE_VEC_ELT
+ (TREE_VEC_ELT (args, level - 1), idx);
+ }
+ else if (level == 1)
+ arg = TREE_VEC_ELT (args, idx);
+
+ if (arg != NULL_TREE)
+ {
+ if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
+ return cp_build_type_variant
+ (arg, TYPE_READONLY (arg) || TYPE_READONLY (t),
+ TYPE_VOLATILE (arg) || TYPE_VOLATILE (t));
+ else
+ return arg;
+ }
+ }
+
+ /* If we get here, we must have been looking at a parm for a
+ more deeply nested template. */
+ my_friendly_assert((TREE_CODE (t) == TEMPLATE_CONST_PARM
+ && TEMPLATE_CONST_LEVEL (t) > 1)
+ || (TREE_CODE (t) == TEMPLATE_TYPE_PARM
+ && TEMPLATE_TYPE_LEVEL (t) > 1),
+ 0);
+ return t;
}
- case TEMPLATE_CONST_PARM:
- return args[TEMPLATE_CONST_IDX (t)];
+ case TEMPLATE_DECL:
+ {
+ /* We can get here when processing a member template function
+ of a template class. */
+ tree tmpl;
+ tree decl = DECL_TEMPLATE_RESULT (t);
+ tree new_decl;
+ tree parms;
+ tree spec;
+ int i;
+
+ /* We might already have an instance of this template. */
+ tree instances = DECL_TEMPLATE_INSTANTIATIONS (t);
+ tree ctx = tsubst (DECL_CLASS_CONTEXT (t), args, nargs, in_decl);
+
+ for (; instances; instances = TREE_CHAIN (instances))
+ if (DECL_CLASS_CONTEXT (TREE_VALUE (instances)) == ctx)
+ return TREE_VALUE (instances);
+
+ /* Make a new template decl. It will be similar to the
+ original, but will record the current template arguments.
+ We also create a new function declaration, which is just
+ like the old one, but points to this new template, rather
+ than the old one. */
+ tmpl = copy_node (t);
+ copy_lang_decl (tmpl);
+ my_friendly_assert (DECL_LANG_SPECIFIC (tmpl) != 0, 0);
+ DECL_CHAIN (tmpl) = NULL_TREE;
+ TREE_CHAIN (tmpl) = NULL_TREE;
+ DECL_TEMPLATE_INFO (tmpl) = build_tree_list (t, args);
+ new_decl = tsubst (decl, args, nargs, in_decl);
+ DECL_RESULT (tmpl) = new_decl;
+ DECL_TI_TEMPLATE (new_decl) = tmpl;
+ TREE_TYPE (tmpl) = TREE_TYPE (new_decl);
+ DECL_TEMPLATE_INSTANTIATIONS (tmpl) = NULL_TREE;
+ SET_DECL_IMPLICIT_INSTANTIATION (tmpl);
+
+ /* The template parameters for this new template are all the
+ template parameters for the old template, except the
+ outermost level of parameters. */
+ DECL_TEMPLATE_PARMS (tmpl)
+ = copy_node (DECL_TEMPLATE_PARMS (tmpl));
+ for (parms = DECL_TEMPLATE_PARMS (tmpl);
+ TREE_CHAIN (parms) != NULL_TREE;
+ parms = TREE_CHAIN (parms))
+ TREE_CHAIN (parms) = copy_node (TREE_CHAIN (parms));
+
+ /* Record this partial instantiation. */
+ DECL_TEMPLATE_INSTANTIATIONS (t)
+ = perm_tree_cons (NULL_TREE, tmpl,
+ DECL_TEMPLATE_INSTANTIATIONS (t));
+
+ DECL_TEMPLATE_SPECIALIZATIONS (tmpl) = NULL_TREE;
+ return tmpl;
+ }
case FUNCTION_DECL:
{
tree r = NULL_TREE;
- tree arg_types, ctx;
+ tree ctx;
int member;
@@ -1499,23 +2285,16 @@ tsubst (t, args, nargs, in_decl)
type = tsubst (type, args, nargs, in_decl);
}
- if (type == TREE_TYPE (t)
- && (! member || ctx == DECL_CLASS_CONTEXT (t)))
- {
- t = copy_node (t);
- copy_lang_decl (t);
- return t;
- }
-
/* Do we already have this instantiation? */
if (DECL_TEMPLATE_INFO (t) != NULL_TREE)
{
- tree tmpl = TREE_PURPOSE (DECL_TEMPLATE_INFO (t));
+ tree tmpl = DECL_TI_TEMPLATE (t);
tree decls = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
for (; decls; decls = TREE_CHAIN (decls))
if (TREE_TYPE (TREE_VALUE (decls)) == type
- && DECL_CLASS_CONTEXT (TREE_VALUE (decls)) == ctx)
+ && DECL_CLASS_CONTEXT (TREE_VALUE (decls)) == ctx
+ && comp_template_args (TREE_PURPOSE (decls), args))
return TREE_VALUE (decls);
}
@@ -1541,12 +2320,6 @@ tsubst (t, args, nargs, in_decl)
DECL_NAME (r) = build_typename_overload (TREE_TYPE (type));
}
- arg_types = TYPE_VALUES (type);
-
- if (member && TREE_CODE (type) == FUNCTION_TYPE)
- arg_types = hash_tree_chain
- (build_pointer_type (DECL_CONTEXT (r)), arg_types);
-
if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (t)))
{
char *buf, *dbuf = build_overload_name (ctx, 1, 1);
@@ -1558,9 +2331,79 @@ tsubst (t, args, nargs, in_decl)
strcat (buf, dbuf);
DECL_ASSEMBLER_NAME (r) = get_identifier (buf);
}
- else
- DECL_ASSEMBLER_NAME (r)
- = build_decl_overload (DECL_NAME (r), arg_types, member);
+ else
+ {
+ /* Instantiations of template functions must be mangled
+ specially, in order to conform to 14.5.5.1
+ [temp.over.link]. We use in_decl below rather than
+ DECL_TI_TEMPLATE (r) because the latter is set to
+ NULL_TREE in instantiate_decl. */
+ tree tmpl;
+ tree arg_types;
+
+ if (DECL_TEMPLATE_INFO (r))
+ tmpl = DECL_TI_TEMPLATE (r);
+ else
+ tmpl = in_decl;
+
+ /* tmpl will be NULL if this is a specialization of a
+ member template of a template class. */
+ if (name_mangling_version < 1
+ || tmpl == NULL_TREE
+ || (member && !is_member_template (tmpl)
+ && !DECL_TEMPLATE_INFO (tmpl)))
+ {
+ arg_types = TYPE_ARG_TYPES (type);
+ if (member && TREE_CODE (type) == FUNCTION_TYPE)
+ arg_types = hash_tree_chain
+ (build_pointer_type (DECL_CONTEXT (r)),
+ arg_types);
+
+ DECL_ASSEMBLER_NAME (r)
+ = build_decl_overload (DECL_NAME (r), arg_types,
+ member);
+ }
+ else
+ {
+ /* We pass the outermost template parameters to
+ build_template_decl_overload since the innermost
+ template parameters are still just template
+ parameters; there are no corresponding substitution
+ arguments. */
+ /* FIXME The messed up thing here is that we get here with
+ full args and only one level of parms. This is necessary
+ because when we partially instantiate a member template,
+ even though there's really only one level of parms left
+ we re-use the parms from the original template, which
+ have level 2. When this is fixed we can remove the
+ add_to_template_args from instantiate_template. */
+ tree tparms = DECL_TEMPLATE_PARMS (tmpl);
+
+ while (tparms && TREE_CHAIN (tparms) != NULL_TREE)
+ tparms = TREE_CHAIN (tparms);
+
+ my_friendly_assert (tparms != NULL_TREE
+ && TREE_CODE (tparms) == TREE_LIST,
+ 0);
+ tparms = TREE_VALUE (tparms);
+
+ arg_types = TYPE_ARG_TYPES (TREE_TYPE (tmpl));
+ if (member && TREE_CODE (type) == FUNCTION_TYPE)
+ arg_types = hash_tree_chain
+ (build_pointer_type (DECL_CONTEXT (r)),
+ arg_types);
+
+ DECL_ASSEMBLER_NAME (r)
+ = build_template_decl_overload
+ (DECL_NAME (r), arg_types,
+ TREE_TYPE (TREE_TYPE (tmpl)),
+ tparms,
+ TREE_CODE (TREE_VEC_ELT (args, 0)) == TREE_VEC
+ ? TREE_VEC_ELT (args, TREE_VEC_LENGTH (args) - 1) :
+ args,
+ member);
+ }
+ }
DECL_RTL (r) = 0;
make_decl_rtl (r, NULL_PTR, 1);
@@ -1616,8 +2459,10 @@ tsubst (t, args, nargs, in_decl)
{
tree tmpl = DECL_TI_TEMPLATE (t);
tree *declsp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
- tree argvec = tsubst (TREE_VALUE (DECL_TEMPLATE_INFO (t)),
- args, nargs, in_decl);
+ tree argvec = tsubst (DECL_TI_ARGS (t), args, nargs, in_decl);
+
+ if (DECL_TEMPLATE_INFO (tmpl) && DECL_TI_ARGS (tmpl))
+ argvec = add_to_template_args (DECL_TI_ARGS (tmpl), argvec);
DECL_TEMPLATE_INFO (r) = perm_tree_cons (tmpl, argvec, NULL_TREE);
*declsp = perm_tree_cons (argvec, r, *declsp);
@@ -1721,8 +2566,7 @@ tsubst (t, args, nargs, in_decl)
{
tree tmpl = DECL_TI_TEMPLATE (t);
tree *declsp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
- tree argvec = tsubst (TREE_VALUE (DECL_TEMPLATE_INFO (t)),
- args, nargs, in_decl);
+ tree argvec = tsubst (DECL_TI_ARGS (t), args, nargs, in_decl);
DECL_TEMPLATE_INFO (r) = perm_tree_cons (tmpl, argvec, NULL_TREE);
*declsp = perm_tree_cons (argvec, r, *declsp);
@@ -1777,6 +2621,8 @@ tsubst (t, args, nargs, in_decl)
case TREE_VEC:
if (type != NULL_TREE)
{
+ /* A binfo node. */
+
t = copy_node (t);
if (type == TREE_TYPE (t))
@@ -1792,6 +2638,8 @@ tsubst (t, args, nargs, in_decl)
}
return t;
}
+
+ /* Otherwise, a vector of template arguments. */
{
int len = TREE_VEC_LENGTH (t), need_new = 0, i;
tree *elts = (tree *) alloca (len * sizeof (tree));
@@ -1800,7 +2648,9 @@ tsubst (t, args, nargs, in_decl)
for (i = 0; i < len; i++)
{
- elts[i] = tsubst_expr (TREE_VEC_ELT (t, i), args, nargs, in_decl);
+ elts[i] = maybe_fold_nontype_arg
+ (tsubst_expr (TREE_VEC_ELT (t, i), args, nargs, in_decl));
+
if (elts[i] != TREE_VEC_ELT (t, i))
need_new = 1;
}
@@ -1998,16 +2848,28 @@ tree
do_poplevel ()
{
tree t;
+ int saved_warn_unused;
- expand_end_bindings (getdecls (), kept_level_p (), 1);
+ if (processing_template_decl)
+ {
+ saved_warn_unused = warn_unused;
+ warn_unused = 0;
+ }
+ expand_end_bindings (getdecls (), kept_level_p (), 0);
+ if (processing_template_decl)
+ warn_unused = saved_warn_unused;
t = poplevel (kept_level_p (), 1, 0);
pop_momentary ();
return t;
}
+/* Like tsubst, but deals with expressions. This function just replaces
+ template parms; to finish processing the resultant expression, use
+ tsubst_expr. */
+
tree
tsubst_copy (t, args, nargs, in_decl)
- tree t, *args;
+ tree t, args;
int nargs;
tree in_decl;
{
@@ -2042,6 +2904,12 @@ tsubst_copy (t, args, nargs, in_decl)
mark_used (t);
return t;
+ case TEMPLATE_DECL:
+ if (is_member_template (t))
+ return tsubst (t, args, nargs, in_decl);
+ else
+ return t;
+
#if 0
case IDENTIFIER_NODE:
return do_identifier (t, 0);
@@ -2118,7 +2986,7 @@ tsubst_copy (t, args, nargs, in_decl)
{
tree fn = TREE_OPERAND (t, 0);
if (really_overloaded_fn (fn))
- fn = tsubst_copy (TREE_VALUE (fn), args, nargs, in_decl);
+ fn = tsubst_copy (get_first_fn (fn), args, nargs, in_decl);
else
fn = tsubst_copy (fn, args, nargs, in_decl);
return build_nt
@@ -2178,6 +3046,18 @@ tsubst_copy (t, args, nargs, in_decl)
return r;
}
+ case TEMPLATE_ID_EXPR:
+ {
+ /* Substituted template arguments */
+ tree targs = tsubst_copy (TREE_OPERAND (t, 1), args, nargs, in_decl);
+ tree chain;
+ for (chain = targs; chain; chain = TREE_CHAIN (chain))
+ TREE_VALUE (chain) = maybe_fold_nontype_arg (TREE_VALUE (chain));
+
+ return lookup_template_function
+ (tsubst_copy (TREE_OPERAND (t, 0), args, nargs, in_decl), targs);
+ }
+
case TREE_LIST:
{
tree purpose, value, chain;
@@ -2233,9 +3113,11 @@ tsubst_copy (t, args, nargs, in_decl)
}
}
+/* Like tsubst_copy, but also does semantic processing and RTL expansion. */
+
tree
tsubst_expr (t, args, nargs, in_decl)
- tree t, *args;
+ tree t, args;
int nargs;
tree in_decl;
{
@@ -2526,7 +3408,7 @@ tsubst_expr (t, args, nargs, in_decl)
lineno = TREE_COMPLEXITY (t);
t = TREE_TYPE (t);
if (TREE_CODE (t) == ENUMERAL_TYPE)
- tsubst_enum (t, args, nargs);
+ tsubst_enum (t, args, nargs, NULL);
break;
default:
@@ -2537,24 +3419,37 @@ tsubst_expr (t, args, nargs, in_decl)
tree
instantiate_template (tmpl, targ_ptr)
- tree tmpl, *targ_ptr;
+ tree tmpl, targ_ptr;
{
tree fndecl;
int i, len;
struct obstack *old_fmp_obstack;
extern struct obstack *function_maybepermanent_obstack;
+ my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 283);
+
+ if (DECL_FUNCTION_TEMPLATE_P (tmpl))
+ {
+ tree specs;
+
+ /* Check to see if there is a matching specialization. */
+ for (specs = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
+ specs != NULL_TREE;
+ specs = TREE_CHAIN (specs))
+ if (comp_template_args (TREE_PURPOSE (specs), targ_ptr))
+ return TREE_VALUE (specs);
+ }
+
push_obstacks (&permanent_obstack, &permanent_obstack);
old_fmp_obstack = function_maybepermanent_obstack;
function_maybepermanent_obstack = &permanent_obstack;
- my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 283);
- len = TREE_VEC_LENGTH (DECL_TEMPLATE_PARMS (tmpl));
+ len = DECL_NTPARMS (tmpl);
i = len;
while (i--)
{
- tree t = targ_ptr [i];
+ tree t = TREE_VEC_ELT (targ_ptr, i);
if (TREE_CODE_CLASS (TREE_CODE (t)) == 't')
{
tree nt = target_type (t);
@@ -2566,8 +3461,12 @@ instantiate_template (tmpl, targ_ptr)
goto out;
}
}
- targ_ptr[i] = copy_to_permanent (t);
+ TREE_VEC_ELT (targ_ptr, i) = copy_to_permanent (t);
}
+ targ_ptr = copy_to_permanent (targ_ptr);
+
+ if (DECL_TEMPLATE_INFO (tmpl) && DECL_TI_ARGS (tmpl))
+ targ_ptr = add_to_template_args (DECL_TI_ARGS (tmpl), targ_ptr);
/* substitute template parameters */
fndecl = tsubst (DECL_RESULT (tmpl), targ_ptr, len, tmpl);
@@ -2600,6 +3499,43 @@ overload_template_name (type)
pushdecl_class_level (decl);
}
+/* Like type_unification but designed specially to handle conversion
+ operators. */
+
+int
+fn_type_unification (fn, explicit_targs, targs, args, return_type, strict)
+ tree fn, explicit_targs, targs, args, return_type;
+ int strict;
+{
+ int i, dummy = 0;
+ tree fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
+ tree decl_arg_types = args;
+
+ my_friendly_assert (TREE_CODE (fn) == TEMPLATE_DECL, 0);
+
+ if (IDENTIFIER_TYPENAME_P (DECL_NAME (fn)))
+ {
+ /* This is a template conversion operator. Use the return types
+ as well as the argument types. */
+ fn_arg_types = scratch_tree_cons (NULL_TREE,
+ TREE_TYPE (TREE_TYPE (fn)),
+ fn_arg_types);
+ decl_arg_types = scratch_tree_cons (NULL_TREE,
+ return_type,
+ decl_arg_types);
+ }
+
+ i = type_unification (DECL_INNERMOST_TEMPLATE_PARMS (fn),
+ &TREE_VEC_ELT (targs, 0),
+ fn_arg_types,
+ decl_arg_types,
+ explicit_targs,
+ &dummy, strict, 0);
+
+ return i;
+}
+
+
/* Type unification.
We have a function template signature with one or more references to
@@ -2624,25 +3560,54 @@ overload_template_name (type)
addresses, explicit instantiation, and more_specialized). */
int
-type_unification (tparms, targs, parms, args, nsubsts, subr, strict)
+type_unification (tparms, targs, parms, args, targs_in, nsubsts,
+ strict, allow_incomplete)
+ tree tparms, *targs, parms, args, targs_in;
+ int *nsubsts, strict, allow_incomplete;
+{
+ int ntparms = TREE_VEC_LENGTH (tparms);
+ tree t;
+ int i;
+ int r;
+
+ bzero ((char *) targs, sizeof (tree) * ntparms);
+
+ /* Insert any explicit template arguments. They are encoded as the
+ operands of NOP_EXPRs so that unify can tell that they are
+ explicit arguments. */
+ for (i = 0, t = targs_in; t != NULL_TREE; t = TREE_CHAIN (t), ++i)
+ targs[i] = build1 (NOP_EXPR, NULL_TREE, TREE_VALUE (t));
+
+ r = type_unification_real (tparms, targs, parms, args, nsubsts, 0,
+ strict, allow_incomplete);
+
+ for (i = 0, t = targs_in; t != NULL_TREE; t = TREE_CHAIN (t), ++i)
+ if (TREE_CODE (targs[i]) == NOP_EXPR)
+ targs[i] = TREE_OPERAND (targs[i], 0);
+
+ return r;
+}
+
+
+static int
+type_unification_real (tparms, targs, parms, args, nsubsts, subr,
+ strict, allow_incomplete)
tree tparms, *targs, parms, args;
- int *nsubsts, subr, strict;
+ int *nsubsts, subr, strict, allow_incomplete;
{
tree parm, arg;
int i;
int ntparms = TREE_VEC_LENGTH (tparms);
my_friendly_assert (TREE_CODE (tparms) == TREE_VEC, 289);
- my_friendly_assert (TREE_CODE (parms) == TREE_LIST, 290);
+ my_friendly_assert (parms == NULL_TREE
+ || TREE_CODE (parms) == TREE_LIST, 290);
/* ARGS could be NULL (via a call from parse.y to
build_x_function_call). */
if (args)
my_friendly_assert (TREE_CODE (args) == TREE_LIST, 291);
my_friendly_assert (ntparms > 0, 292);
- if (!subr)
- bzero ((char *) targs, sizeof (tree) * ntparms);
-
while (parms
&& parms != void_list_node
&& args
@@ -2658,11 +3623,38 @@ type_unification (tparms, targs, parms, args, nsubsts, subr, strict)
if (arg == unknown_type_node)
return 1;
- if (! uses_template_parms (parm)
- && TREE_CODE_CLASS (TREE_CODE (arg)) != 't')
+ /* Conversions will be performed on a function argument that
+ corresponds with a function parameter that contains only
+ non-deducible template parameters and explicitly specified
+ template parameters. */
+ if (! uses_template_parms (parm))
{
- if (can_convert_arg (parm, TREE_TYPE (arg), arg))
- continue;
+ tree type;
+
+ if (TREE_CODE_CLASS (TREE_CODE (arg)) != 't')
+ type = TREE_TYPE (arg);
+ else
+ {
+ type = arg;
+ arg = NULL_TREE;
+ }
+
+ if (strict)
+ {
+ if (comptypes (parm, type, 1))
+ continue;
+ }
+ else if (arg)
+ {
+ if (can_convert_arg (parm, type, arg))
+ continue;
+ }
+ else
+ {
+ if (can_convert (parm, type))
+ continue;
+ }
+
return 1;
}
@@ -2685,12 +3677,15 @@ type_unification (tparms, targs, parms, args, nsubsts, subr, strict)
/* Have to back unify here */
arg = TREE_VALUE (arg);
nsubsts = 0;
- ntparms = TREE_VEC_LENGTH (DECL_TEMPLATE_PARMS (arg));
+ ntparms = DECL_NTPARMS (arg);
targs = (tree *) alloca (sizeof (tree) * ntparms);
- parm = tree_cons (NULL_TREE, parm, NULL_TREE);
- return type_unification (DECL_TEMPLATE_PARMS (arg), targs,
- TYPE_ARG_TYPES (TREE_TYPE (arg)),
- parm, &nsubsts, 0, strict);
+ parm = expr_tree_cons (NULL_TREE, parm, NULL_TREE);
+ return
+ type_unification (DECL_INNERMOST_TEMPLATE_PARMS (arg),
+ targs,
+ TYPE_ARG_TYPES (TREE_TYPE (arg)),
+ parm, NULL_TREE, &nsubsts, strict,
+ allow_incomplete);
}
arg = TREE_TYPE (arg);
}
@@ -2730,7 +3725,8 @@ type_unification (tparms, targs, parms, args, nsubsts, subr, strict)
for (i = 0; i < ntparms; i++)
if (!targs[i])
{
- error ("incomplete type unification");
+ if (!allow_incomplete)
+ error ("incomplete type unification");
return 2;
}
return 0;
@@ -2761,9 +3757,26 @@ unify (tparms, targs, ntparms, parm, arg, nsubsts, strict)
switch (TREE_CODE (parm))
{
+ case TYPENAME_TYPE:
+ /* In a type which contains a nested-name-specifier, template
+ argument values cannot be deduced for template parameters used
+ within the nested-name-specifier. */
+ return 0;
+
case TEMPLATE_TYPE_PARM:
(*nsubsts)++;
idx = TEMPLATE_TYPE_IDX (parm);
+ /* Check for mixed types and values. */
+ if (TREE_CODE (TREE_VALUE (TREE_VEC_ELT (tparms, idx))) != TYPE_DECL)
+ return 1;
+
+ if (!strict && targs[idx] != NULL_TREE &&
+ TREE_CODE (targs[idx]) == NOP_EXPR)
+ /* An explicit template argument. Don't even try to match
+ here; the overload resolution code will manage check to
+ see whether the call is legal. */
+ return 0;
+
if (strict && (TYPE_READONLY (arg) < TYPE_READONLY (parm)
|| TYPE_VOLATILE (arg) < TYPE_VOLATILE (parm)))
return 1;
@@ -2783,13 +3796,13 @@ unify (tparms, targs, ntparms, parm, arg, nsubsts, strict)
}
#endif
/* Simple cases: Value already set, does match or doesn't. */
- if (targs[idx] == arg)
+ if (targs[idx] == arg
+ || (targs[idx]
+ && TREE_CODE (targs[idx]) == NOP_EXPR
+ && TREE_OPERAND (targs[idx], 0) == arg))
return 0;
else if (targs[idx])
return 1;
- /* Check for mixed types and values. */
- if (TREE_CODE (TREE_VALUE (TREE_VEC_ELT (tparms, idx))) != TYPE_DECL)
- return 1;
targs[idx] = arg;
return 0;
case TEMPLATE_CONST_PARM:
@@ -2838,6 +3851,7 @@ unify (tparms, targs, ntparms, parm, arg, nsubsts, strict)
case COMPLEX_TYPE:
case INTEGER_TYPE:
case BOOLEAN_TYPE:
+ case VOID_TYPE:
if (TREE_CODE (arg) != TREE_CODE (parm))
return 1;
@@ -2852,6 +3866,10 @@ unify (tparms, targs, ntparms, parm, arg, nsubsts, strict)
TYPE_MAX_VALUE (arg), nsubsts, strict))
return 1;
}
+ else if (TREE_CODE (parm) == REAL_TYPE
+ && TYPE_MAIN_VARIANT (arg) != TYPE_MAIN_VARIANT (parm))
+ return 1;
+
/* As far as unification is concerned, this wins. Later checks
will invalidate it if necessary. */
return 0;
@@ -2933,8 +3951,9 @@ unify (tparms, targs, ntparms, parm, arg, nsubsts, strict)
if (unify (tparms, targs, ntparms, TREE_TYPE (parm),
TREE_TYPE (arg), nsubsts, strict))
return 1;
- return type_unification (tparms, targs, TYPE_ARG_TYPES (parm),
- TYPE_ARG_TYPES (arg), nsubsts, 1, strict);
+ return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
+ TYPE_ARG_TYPES (arg), nsubsts, 1,
+ strict, 0);
case OFFSET_TYPE:
if (TREE_CODE (arg) != OFFSET_TYPE)
@@ -2945,6 +3964,11 @@ unify (tparms, targs, ntparms, parm, arg, nsubsts, strict)
return unify (tparms, targs, ntparms, TREE_TYPE (parm),
TREE_TYPE (arg), nsubsts, strict);
+ case CONST_DECL:
+ if (arg != decl_constant_value (parm))
+ return 1;
+ return 0;
+
default:
sorry ("use of `%s' in template type unification",
tree_code_name [(int) TREE_CODE (parm)]);
@@ -2965,6 +3989,11 @@ mark_decl_instantiated (result, extern_p)
{
DECL_INTERFACE_KNOWN (result) = 1;
DECL_NOT_REALLY_EXTERN (result) = 1;
+
+ /* For WIN32 we also want to put explicit instantiations in
+ linkonce sections. */
+ if (supports_one_only () && ! SUPPORTS_WEAK)
+ comdat_linkage (result);
}
else if (TREE_CODE (result) == FUNCTION_DECL)
mark_inline_for_output (result);
@@ -2980,20 +4009,18 @@ int
more_specialized (pat1, pat2)
tree pat1, pat2;
{
- tree *targs;
+ tree targs;
int winner = 0;
targs = get_bindings (pat1, pat2);
if (targs)
{
- free (targs);
--winner;
}
targs = get_bindings (pat2, pat1);
if (targs)
{
- free (targs);
++winner;
}
@@ -3029,20 +4056,21 @@ more_specialized_class (pat1, pat2)
/* Return the template arguments that will produce the function signature
DECL from the function template FN. */
-tree *
+tree
get_bindings (fn, decl)
tree fn, decl;
{
- int ntparms = TREE_VEC_LENGTH (DECL_TEMPLATE_PARMS (fn));
- tree *targs = (tree *) malloc (sizeof (tree) * ntparms);
- int i, dummy = 0;
- i = type_unification (DECL_TEMPLATE_PARMS (fn), targs,
- TYPE_ARG_TYPES (TREE_TYPE (fn)),
- TYPE_ARG_TYPES (TREE_TYPE (decl)),
- &dummy, 0, 1);
+ int ntparms = DECL_NTPARMS (fn);
+ tree targs = make_scratch_vec (ntparms);
+ int i;
+
+ i = fn_type_unification (fn, NULL_TREE, targs,
+ TYPE_ARG_TYPES (TREE_TYPE (decl)),
+ TREE_TYPE (TREE_TYPE (decl)),
+ 1);
+
if (i == 0)
return targs;
- free (targs);
return 0;
}
@@ -3080,7 +4108,7 @@ tree
most_specialized (fns, decl)
tree fns, decl;
{
- tree fn, champ, *args, *p;
+ tree fn, champ, args, *p;
int fate;
for (p = &fns; *p; )
@@ -3088,7 +4116,6 @@ most_specialized (fns, decl)
args = get_bindings (TREE_VALUE (*p), decl);
if (args)
{
- free (args);
p = &TREE_CHAIN (*p);
}
else
@@ -3173,7 +4200,7 @@ most_specialized_class (specs, mainargs)
for (t = list; t && t != champ; t = TREE_CHAIN (t))
{
- fate = more_specialized (champ, t);
+ fate = more_specialized_class (champ, t);
if (fate != 1)
return error_mark_node;
}
@@ -3192,6 +4219,7 @@ do_decl_instantiation (declspecs, declarator, storage)
tree fn;
tree result = NULL_TREE;
int extern_p = 0;
+ tree templates = NULL_TREE;
if (! DECL_LANG_SPECIFIC (decl))
{
@@ -3219,43 +4247,51 @@ do_decl_instantiation (declspecs, declarator, storage)
fn = IDENTIFIER_GLOBAL_VALUE (name),
fn && DECL_TEMPLATE_INSTANTIATION (fn))
result = fn;
+ else
+ {
+ /* Maybe this is an instantiation of a member template
+ function. */
+ tree ctype = DECL_CONTEXT (decl);
+
+ name = DECL_NAME (decl);
+ fn = lookup_fnfields (TYPE_BINFO (ctype), name, 1);
+ if (fn)
+ fn = TREE_VALUE (fn);
+
+ for (; fn; fn = DECL_CHAIN (fn))
+ if (TREE_CODE (fn) == TEMPLATE_DECL)
+ templates = decl_tree_cons (NULL_TREE, fn, templates);
+ }
}
else if (name = DECL_NAME (decl), fn = IDENTIFIER_GLOBAL_VALUE (name), fn)
{
- tree templates = NULL_TREE;
for (fn = get_first_fn (fn); fn; fn = DECL_CHAIN (fn))
- if (decls_match (fn, decl)
- && DECL_DEFER_OUTPUT (fn))
- {
- result = fn;
- break;
- }
- else if (TREE_CODE (fn) == TEMPLATE_DECL)
+ if (TREE_CODE (fn) == TEMPLATE_DECL)
templates = decl_tree_cons (NULL_TREE, fn, templates);
+ }
- if (! result)
+ if (templates && !result)
+ {
+ tree args;
+ result = most_specialized (templates, decl);
+ if (result == error_mark_node)
{
- tree *args;
- result = most_specialized (templates, decl);
- if (result == error_mark_node)
+ char *str = "candidates are:";
+ cp_error ("ambiguous template instantiation for `%D' requested", decl);
+ for (fn = templates; fn; fn = TREE_CHAIN (fn))
{
- char *str = "candidates are:";
- cp_error ("ambiguous template instantiation for `%D' requested", decl);
- for (fn = templates; fn; fn = TREE_CHAIN (fn))
- {
- cp_error_at ("%s %+#D", str, TREE_VALUE (fn));
- str = " ";
- }
- return;
- }
- else if (result)
- {
- args = get_bindings (result, decl);
- result = instantiate_template (result, args);
- free (args);
+ cp_error_at ("%s %+#D", str, TREE_VALUE (fn));
+ str = " ";
}
+ return;
+ }
+ else if (result)
+ {
+ args = get_bindings (result, decl);
+ result = instantiate_template (result, args);
}
}
+
if (! result)
{
cp_error ("no matching template for `%D' found", decl);
@@ -3291,8 +4327,16 @@ mark_class_instantiated (t, extern_p)
int extern_p;
{
SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
- SET_CLASSTYPE_INTERFACE_KNOWN (t);
- CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
+
+ if (supports_one_only () && ! SUPPORTS_WEAK)
+ /* For WIN32 we also want to put explicit instantiations in
+ linkonce sections. */;
+ else
+ {
+ SET_CLASSTYPE_INTERFACE_KNOWN (t);
+ CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
+ }
+
CLASSTYPE_VTABLE_NEEDS_WRITING (t) = ! extern_p;
TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
if (! extern_p)
@@ -3303,14 +4347,22 @@ mark_class_instantiated (t, extern_p)
}
void
-do_type_instantiation (name, storage)
- tree name, storage;
+do_type_instantiation (t, storage)
+ tree t, storage;
{
- tree t = TREE_TYPE (name);
int extern_p = 0;
int nomem_p = 0;
int static_p = 0;
+ if (TREE_CODE (t) == TYPE_DECL)
+ t = TREE_TYPE (t);
+
+ if (! IS_AGGR_TYPE (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
+ {
+ cp_error ("explicit instantiation of non-template type `%T'", t);
+ return;
+ }
+
complete_type (t);
/* With -fexternal-templates, explicit instantiations are treated the same
@@ -3359,7 +4411,8 @@ do_type_instantiation (name, storage)
if (! static_p)
for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
- if (DECL_TEMPLATE_INSTANTIATION (tmp))
+ if (TREE_CODE (tmp) == FUNCTION_DECL
+ && DECL_TEMPLATE_INSTANTIATION (tmp))
{
mark_decl_instantiated (tmp, extern_p);
repo_template_instantiated (tmp, extern_p);
@@ -3390,7 +4443,7 @@ instantiate_decl (d)
tree tmpl = TI_TEMPLATE (ti);
tree args = TI_ARGS (ti);
tree td;
- tree pattern = DECL_TEMPLATE_RESULT (tmpl);
+ tree decl_pattern, code_pattern;
tree save_ti;
int nested = in_function_p ();
int d_defined;
@@ -3398,20 +4451,41 @@ instantiate_decl (d)
int line = lineno;
char *file = input_filename;
+ for (td = tmpl; DECL_TEMPLATE_INSTANTIATION (td); )
+ td = DECL_TI_TEMPLATE (td);
+
+ /* In the case of a member template, decl_pattern is the partially
+ instantiated declaration (in the instantiated class), and code_pattern
+ is the original template definition. */
+ decl_pattern = DECL_TEMPLATE_RESULT (tmpl);
+ code_pattern = DECL_TEMPLATE_RESULT (td);
+
if (TREE_CODE (d) == FUNCTION_DECL)
{
d_defined = (DECL_INITIAL (d) != NULL_TREE);
- pattern_defined = (DECL_INITIAL (pattern) != NULL_TREE);
+ pattern_defined = (DECL_INITIAL (code_pattern) != NULL_TREE);
}
else
{
d_defined = ! DECL_IN_AGGR_P (d);
- pattern_defined = ! DECL_IN_AGGR_P (pattern);
+ pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
}
if (d_defined)
return d;
+ if (TREE_CODE (d) == FUNCTION_DECL)
+ {
+ tree specs;
+
+ /* Check to see if there is a matching specialization. */
+ for (specs = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
+ specs != NULL_TREE;
+ specs = TREE_CHAIN (specs))
+ if (comp_template_args (TREE_PURPOSE (specs), args))
+ return TREE_VALUE (specs);
+ }
+
/* This needs to happen before any tsubsting. */
if (! push_tinst_level (d))
return d;
@@ -3423,12 +4497,11 @@ instantiate_decl (d)
/* We need to set up DECL_INITIAL regardless of pattern_defined if the
variable is a static const initialized in the class body. */
if (TREE_CODE (d) == VAR_DECL
- && ! DECL_INITIAL (d) && DECL_INITIAL (pattern))
+ && ! DECL_INITIAL (d) && DECL_INITIAL (code_pattern))
{
pushclass (DECL_CONTEXT (d), 2);
- DECL_INITIAL (d) = tsubst_expr
- (DECL_INITIAL (pattern), &TREE_VEC_ELT (args, 0),
- TREE_VEC_LENGTH (args), tmpl);
+ DECL_INITIAL (d) = tsubst_expr (DECL_INITIAL (code_pattern), args,
+ TREE_VEC_LENGTH (args), tmpl);
popclass (1);
}
@@ -3444,28 +4517,29 @@ instantiate_decl (d)
if (interface_unknown)
warn_if_unknown_interface (d);
}
- else if (DECL_INTERFACE_KNOWN (pattern))
+ else if (DECL_INTERFACE_KNOWN (code_pattern))
{
DECL_INTERFACE_KNOWN (d) = 1;
- DECL_NOT_REALLY_EXTERN (d) = ! DECL_EXTERNAL (pattern);
+ DECL_NOT_REALLY_EXTERN (d) = ! DECL_EXTERNAL (code_pattern);
}
else
- warn_if_unknown_interface (pattern);
+ warn_if_unknown_interface (code_pattern);
}
if (at_eof)
import_export_decl (d);
}
+ /* Reject all external templates except inline functions. */
+ if (DECL_INTERFACE_KNOWN (d)
+ && ! DECL_NOT_REALLY_EXTERN (d)
+ && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d)))
+ goto out;
+
+ /* Defer all templates except inline functions used in another function. */
if (! pattern_defined
- || (TREE_CODE (d) == FUNCTION_DECL && ! DECL_INLINE (d)
- && (! DECL_INTERFACE_KNOWN (d)
- || ! DECL_NOT_REALLY_EXTERN (d)))
- /* Kludge: if we compile a constructor in the middle of processing a
- toplevel declaration, we blow away the declspecs in
- temp_decl_obstack when we call permanent_allocation in
- finish_function. So don't compile it yet. */
- || (TREE_CODE (d) == FUNCTION_DECL && ! nested && ! at_eof))
+ || (! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d) && nested)
+ && ! at_eof))
{
add_pending_template (d);
goto out;
@@ -3475,24 +4549,31 @@ instantiate_decl (d)
input_filename = DECL_SOURCE_FILE (d);
/* Trick tsubst into giving us a new decl in case the template changed. */
- save_ti = DECL_TEMPLATE_INFO (pattern);
- DECL_TEMPLATE_INFO (pattern) = NULL_TREE;
- td = tsubst (pattern, &TREE_VEC_ELT (args, 0), TREE_VEC_LENGTH (args), tmpl);
- DECL_TEMPLATE_INFO (pattern) = save_ti;
+ save_ti = DECL_TEMPLATE_INFO (decl_pattern);
+ DECL_TEMPLATE_INFO (decl_pattern) = NULL_TREE;
+ td = tsubst (decl_pattern, args, TREE_VEC_LENGTH (args), tmpl);
+ SET_DECL_IMPLICIT_INSTANTIATION (td);
+ DECL_TEMPLATE_INFO (decl_pattern) = save_ti;
/* And set up DECL_INITIAL, since tsubst doesn't. */
if (TREE_CODE (td) == VAR_DECL)
{
pushclass (DECL_CONTEXT (d), 2);
- DECL_INITIAL (td) = tsubst_expr
- (DECL_INITIAL (pattern), &TREE_VEC_ELT (args, 0),
- TREE_VEC_LENGTH (args), tmpl);
+ DECL_INITIAL (td) = tsubst_expr (DECL_INITIAL (code_pattern), args,
+ TREE_VEC_LENGTH (args), tmpl);
popclass (1);
}
- /* Convince duplicate_decls to use the DECL_ARGUMENTS from the new decl. */
if (TREE_CODE (d) == FUNCTION_DECL)
- DECL_INITIAL (td) = error_mark_node;
+ {
+ /* Convince duplicate_decls to use the DECL_ARGUMENTS from the
+ new decl. */
+ DECL_INITIAL (td) = error_mark_node;
+
+ if (DECL_TEMPLATE_SPECIALIZATION (td) && !DECL_TEMPLATE_INFO (td))
+ /* Set up the information about what is being specialized. */
+ DECL_TEMPLATE_INFO (td) = DECL_TEMPLATE_INFO (d);
+ }
duplicate_decls (td, d);
if (TREE_CODE (d) == FUNCTION_DECL)
DECL_INITIAL (td) = 0;
@@ -3511,7 +4592,7 @@ instantiate_decl (d)
}
else if (TREE_CODE (d) == FUNCTION_DECL)
{
- tree t = DECL_SAVED_TREE (pattern);
+ tree t = DECL_SAVED_TREE (code_pattern);
start_function (NULL_TREE, d, NULL_TREE, 1);
store_parm_decls ();
@@ -3520,7 +4601,7 @@ instantiate_decl (d)
{
store_return_init
(TREE_OPERAND (t, 0),
- tsubst_expr (TREE_OPERAND (t, 1), &TREE_VEC_ELT (args, 0),
+ tsubst_expr (TREE_OPERAND (t, 1), args,
TREE_VEC_LENGTH (args), tmpl));
t = TREE_CHAIN (t);
}
@@ -3536,13 +4617,12 @@ instantiate_decl (d)
setup_vtbl_ptr ();
/* Always keep the BLOCK node associated with the outermost
- pair of curley braces of a function. These are needed
+ pair of curly braces of a function. These are needed
for correct operation of dwarfout.c. */
keep_next_level ();
my_friendly_assert (TREE_CODE (t) == COMPOUND_STMT, 42);
- tsubst_expr (t, &TREE_VEC_ELT (args, 0),
- TREE_VEC_LENGTH (args), tmpl);
+ tsubst_expr (t, args, TREE_VEC_LENGTH (args), tmpl);
finish_function (lineno, 0, nested);
}
@@ -3563,14 +4643,13 @@ tsubst_chain (t, argvec)
{
if (t)
{
- tree first = tsubst (t, &TREE_VEC_ELT (argvec, 0),
+ tree first = tsubst (t, argvec,
TREE_VEC_LENGTH (argvec), NULL_TREE);
tree last = first;
for (t = TREE_CHAIN (t); t; t = TREE_CHAIN (t))
{
- tree x = tsubst (t, &TREE_VEC_ELT (argvec, 0),
- TREE_VEC_LENGTH (argvec), NULL_TREE);
+ tree x = tsubst (t, argvec, TREE_VEC_LENGTH (argvec), NULL_TREE);
TREE_CHAIN (last) = x;
last = x;
}
@@ -3589,9 +4668,9 @@ tsubst_expr_values (t, argvec)
for (; t; t = TREE_CHAIN (t))
{
- tree pur = tsubst_copy (TREE_PURPOSE (t), &TREE_VEC_ELT (argvec, 0),
+ tree pur = tsubst_copy (TREE_PURPOSE (t), argvec,
TREE_VEC_LENGTH (argvec), NULL_TREE);
- tree val = tsubst_expr (TREE_VALUE (t), &TREE_VEC_ELT (argvec, 0),
+ tree val = tsubst_expr (TREE_VALUE (t), argvec,
TREE_VEC_LENGTH (argvec), NULL_TREE);
*p = build_tree_list (pur, val);
p = &TREE_CHAIN (*p);
@@ -3640,10 +4719,14 @@ add_maybe_template (d, fns)
tsubst_expr. */
static tree
-tsubst_enum (tag, args, nargs)
- tree tag, *args;
+tsubst_enum (tag, args, nargs, field_chain)
+ tree tag, args;
int nargs;
+ tree * field_chain;
{
+ extern tree current_local_enum;
+ tree prev_local_enum = current_local_enum;
+
tree newtag = start_enum (TYPE_IDENTIFIER (tag));
tree e, values = NULL_TREE;
@@ -3658,5 +4741,10 @@ tsubst_enum (tag, args, nargs)
finish_enum (newtag, values);
+ if (NULL != field_chain)
+ *field_chain = grok_enum_decls (newtag, NULL_TREE);
+
+ current_local_enum = prev_local_enum;
+
return newtag;
}
diff --git a/gcc/cp/repo.c b/gcc/cp/repo.c
index d9b4486d1f0..c1d756c91c2 100644
--- a/gcc/cp/repo.c
+++ b/gcc/cp/repo.c
@@ -1,5 +1,5 @@
/* Code to maintain a C++ template repository.
- Copyright (C) 1995 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1997 Free Software Foundation, Inc.
Contributed by Jason Merrill (jason@cygnus.com)
This file is part of GNU CC.
@@ -25,16 +25,34 @@ Boston, MA 02111-1307, USA. */
The results of the automatic process should be easily reproducible with
explicit code. */
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "tree.h"
#include "cp-tree.h"
#include "input.h"
#include "obstack.h"
-extern char * rindex ();
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#else
extern char * getenv ();
-extern char * getpwd ();
+#endif
+
+#ifdef NEED_DECLARATION_RINDEX
+extern char *rindex ();
+#endif rindex
+extern char *getpwd PROTO((void));
+
+static tree repo_get_id PROTO((tree));
+static char *save_string PROTO((char *, int));
+static char *extract_string PROTO((char **));
+static char *get_base_filename PROTO((char *));
+static void open_repo_file PROTO((char *));
+static char *afgets PROTO((FILE *));
+static void reopen_repo_file_for_write PROTO((void));
static tree pending_repo;
static tree original_repo;
@@ -420,7 +438,7 @@ finish_repo ()
if (strcmp (old_main, main_input_filename) != 0
|| strcmp (old_dir, dir) != 0
|| (args == NULL) != (old_args == NULL)
- || strcmp (old_args, args) != 0)
+ || (args && strcmp (old_args, args) != 0))
repo_changed = 1;
if (! repo_changed || errorcount || sorrycount)
diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c
index 929298cb33e..49406962722 100644
--- a/gcc/cp/rtti.c
+++ b/gcc/cp/rtti.c
@@ -21,6 +21,7 @@ Boston, MA 02111-1307, USA. */
#include "config.h"
+#include <stdio.h>
#include "tree.h"
#include "cp-tree.h"
#include "flags.h"
@@ -31,9 +32,22 @@ Boston, MA 02111-1307, USA. */
#define INT_TYPE_SIZE BITS_PER_WORD
#endif
-extern tree define_function ();
-extern tree build_t_desc_overload ();
-extern struct obstack *permanent_obstack;
+extern struct obstack permanent_obstack;
+
+static tree call_void_fn PROTO((char *));
+static tree build_headof_sub PROTO((tree));
+static tree build_headof PROTO((tree));
+static tree get_tinfo_var PROTO((tree));
+static tree get_typeid_1 PROTO((tree));
+static tree ifnonnull PROTO((tree, tree));
+static tree build_dynamic_cast_1 PROTO((tree, tree));
+static void expand_si_desc PROTO((tree, tree));
+static void expand_class_desc PROTO((tree, tree));
+static void expand_attr_desc PROTO((tree, tree));
+static void expand_ptr_desc PROTO((tree, tree));
+static void expand_generic_desc PROTO((tree, tree, char *));
+static tree throw_bad_cast PROTO((void));
+static tree throw_bad_typeid PROTO((void));
tree type_info_type_node;
tree tinfo_fn_id;
@@ -255,7 +269,7 @@ build_x_typeid (exp)
tree bad = throw_bad_typeid ();
bad = build_compound_expr
- (tree_cons (NULL_TREE, bad, build_tree_list
+ (expr_tree_cons (NULL_TREE, bad, build_expr_list
(NULL_TREE, cp_convert (type, integer_zero_node))));
exp = build (COND_EXPR, type, cond, exp, bad);
}
@@ -414,15 +428,6 @@ build_dynamic_cast_1 (type, expr)
enum tree_code ec;
tree dcast_fn;
- if (type == error_mark_node || expr == error_mark_node)
- return error_mark_node;
-
- if (processing_template_decl)
- {
- tree t = build_min (DYNAMIC_CAST_EXPR, type, expr);
- return t;
- }
-
assert (exprtype != NULL_TREE);
ec = TREE_CODE (exprtype);
@@ -610,8 +615,8 @@ build_dynamic_cast_1 (type, expr)
{
expr1 = throw_bad_cast ();
expr1 = build_compound_expr
- (tree_cons (NULL_TREE, expr1,
- build_tree_list (NULL_TREE, cp_convert (type, integer_zero_node))));
+ (expr_tree_cons (NULL_TREE, expr1,
+ build_expr_list (NULL_TREE, cp_convert (type, integer_zero_node))));
TREE_TYPE (expr1) = type;
result = save_expr (result);
return build (COND_EXPR, type, result, result, expr1);
@@ -633,6 +638,12 @@ tree
build_dynamic_cast (type, expr)
tree type, expr;
{
+ if (type == error_mark_node || expr == error_mark_node)
+ return error_mark_node;
+
+ if (processing_template_decl)
+ return build_min (DYNAMIC_CAST_EXPR, type, expr);
+
return convert_from_reference (build_dynamic_cast_1 (type, expr));
}
@@ -796,7 +807,7 @@ expand_class_desc (tdecl, type)
(NULL_TREE, isvir, tree_cons
(NULL_TREE, access, NULL_TREE)))));
TREE_HAS_CONSTRUCTOR (elt) = TREE_CONSTANT (elt) = TREE_STATIC (elt) = 1;
- elts = tree_cons (NULL_TREE, elt, elts);
+ elts = expr_tree_cons (NULL_TREE, elt, elts);
base_cnt++;
}
#if 0
@@ -823,10 +834,10 @@ expand_class_desc (tdecl, type)
offset = BINFO_OFFSET (vb);
isvir = build_int_2 (1, 0);
- base_list = tree_cons (NULL_TREE, base, base_list);
- isvir_list = tree_cons (NULL_TREE, isvir, isvir_list);
- acc_list = tree_cons (NULL_TREE, access, acc_list);
- off_list = tree_cons (NULL_TREE, offset, off_list);
+ base_list = expr_tree_cons (NULL_TREE, base, base_list);
+ isvir_list = expr_tree_cons (NULL_TREE, isvir, isvir_list);
+ acc_list = expr_tree_cons (NULL_TREE, access, acc_list);
+ off_list = expr_tree_cons (NULL_TREE, offset, off_list);
base_cnt++;
vb = TREE_CHAIN (vb);
@@ -943,7 +954,7 @@ expand_attr_desc (tdecl, type)
elems = tree_cons
(NULL_TREE, decay_conversion (tdecl), tree_cons
(NULL_TREE, decay_conversion (name_string), tree_cons
- (NULL_TREE, attrval, tree_cons (NULL_TREE, t, NULL_TREE))));
+ (NULL_TREE, attrval, expr_tree_cons (NULL_TREE, t, NULL_TREE))));
fn = get_identifier ("__rtti_attr");
if (IDENTIFIER_GLOBAL_VALUE (fn))
@@ -1185,9 +1196,9 @@ build_t_desc (type, definition)
/* Show that we are defining the t_desc for this type. */
DECL_INITIAL (tdecl) = error_mark_node;
- parents = build_tree_list (NULL_TREE, integer_zero_node);
- vbases = build_tree_list (NULL_TREE, integer_zero_node);
- offsets = build_tree_list (NULL_TREE, integer_zero_node);
+ parents = build_expr_list (NULL_TREE, integer_zero_node);
+ vbases = build_expr_list (NULL_TREE, integer_zero_node);
+ offsets = build_expr_list (NULL_TREE, integer_zero_node);
methods = NULL_TREE;
ivars = NULL_TREE;
diff --git a/gcc/cp/search.c b/gcc/cp/search.c
index 40a83c125da..4624ca99518 100644
--- a/gcc/cp/search.c
+++ b/gcc/cp/search.c
@@ -1,6 +1,6 @@
/* Breadth-first and depth-first routines for
searching multiple-inheritance lattice for GNU C++.
- Copyright (C) 1987, 89, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 89, 92-96, 1997 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com)
This file is part of GNU CC.
@@ -75,12 +75,69 @@ pop_stack_level (stack)
#define search_level stack_level
static struct search_level *search_stack;
-static tree lookup_field_1 ();
+static void clear_memoized_cache PROTO((void));
+static tree make_memoized_table_entry PROTO((tree, tree, int));
+static tree get_abstract_virtuals_1 PROTO((tree, int, tree));
+static tree get_vbase_1 PROTO((tree, tree, unsigned int *));
+static tree convert_pointer_to_vbase PROTO((tree, tree));
+static tree lookup_field_1 PROTO((tree, tree));
+static tree convert_pointer_to_single_level PROTO((tree, tree));
static int lookup_fnfields_1 PROTO((tree, tree));
-static void dfs_walk ();
-static int markedp ();
-static void dfs_unmark ();
-static void dfs_init_vbase_pointers ();
+static int lookup_fnfields_here PROTO((tree, tree));
+static int is_subobject_of_p PROTO((tree, tree));
+static int hides PROTO((tree, tree));
+static tree virtual_context PROTO((tree, tree, tree));
+static tree get_template_base_recursive
+ PROTO((tree, tree, tree, int));
+static void dfs_walk PROTO((tree, void (*) (tree), int (*) (tree)));
+static void envelope_add_decl PROTO((tree, tree, tree *));
+static int get_base_distance_recursive
+ PROTO((tree, int, int, int, int *, tree *, tree, tree *,
+ int, int *, int, int));
+static void expand_upcast_fixups
+ PROTO((tree, tree, tree, tree, tree, tree, tree *));
+static void fixup_virtual_upcast_offsets
+ PROTO((tree, tree, int, int, tree, tree, tree, tree,
+ tree *));
+static int markedp PROTO((tree));
+static int unmarkedp PROTO((tree));
+static int numberedp PROTO((tree));
+static int unnumberedp PROTO((tree));
+static int marked_vtable_pathp PROTO((tree));
+static int unmarked_vtable_pathp PROTO((tree));
+static int marked_new_vtablep PROTO((tree));
+static int unmarked_new_vtablep PROTO((tree));
+static int dfs_debug_unmarkedp PROTO((tree));
+static void dfs_number PROTO((tree));
+static void dfs_unnumber PROTO((tree));
+static void dfs_debug_mark PROTO((tree));
+static void dfs_find_vbases PROTO((tree));
+static void dfs_clear_vbase_slots PROTO((tree));
+static void dfs_unmark PROTO((tree));
+static void dfs_init_vbase_pointers PROTO((tree));
+static void dfs_get_vbase_types PROTO((tree));
+static void dfs_record_inheritance PROTO((tree));
+static void dfs_pushdecls PROTO((tree));
+static void dfs_compress_decls PROTO((tree));
+static void dfs_unuse_fields PROTO((tree));
+static void add_conversions PROTO((tree));
+static tree get_virtuals_named_this PROTO((tree));
+static tree get_virtual_destructor PROTO((tree, int));
+static int tree_has_any_destructor_p PROTO((tree, int));
+static struct search_level *push_search_level
+ PROTO((struct stack_level *, struct obstack *));
+static struct search_level *pop_search_level
+ PROTO((struct stack_level *));
+static struct type_level *push_type_level
+ PROTO((struct stack_level *, struct obstack *));
+static struct type_level *pop_type_level
+ PROTO((struct type_level *));
+static tree my_tree_cons PROTO((tree, tree, tree));
+static tree my_build_string PROTO((char *));
+static struct memoized_entry * my_new_memoized_entry
+ PROTO((struct memoized_entry *));
+static HOST_WIDE_INT breadth_first_search
+ PROTO((tree, int (*) (tree, int), int (*) (tree, int)));
static tree vbase_types;
static tree vbase_decl_ptr_intermediate, vbase_decl_ptr;
@@ -136,7 +193,6 @@ static tree _vptr_name;
/* Make things that look like tree nodes, but allocate them
on type_obstack_entries. */
static int my_tree_node_counter;
-static tree my_tree_cons (), my_build_string ();
extern int flag_memoize_lookups, flag_save_memoized_contexts;
@@ -1150,12 +1206,15 @@ lookup_field (xbasetype, name, protect, want_type)
}
else if (IS_AGGR_TYPE_CODE (TREE_CODE (xbasetype)))
{
- type = complete_type (xbasetype);
+ type = xbasetype;
basetype_path = TYPE_BINFO (type);
BINFO_VIA_PUBLIC (basetype_path) = 1;
BINFO_INHERITANCE_CHAIN (basetype_path) = NULL_TREE;
}
- else my_friendly_abort (97);
+ else
+ my_friendly_abort (97);
+
+ complete_type (type);
if (CLASSTYPE_MTABLE_ENTRY (type))
{
@@ -1258,7 +1317,7 @@ lookup_field (xbasetype, name, protect, want_type)
return rval;
}
- basetype_chain = build_tree_list (NULL_TREE, basetype_path);
+ basetype_chain = build_expr_list (NULL_TREE, basetype_path);
TREE_VIA_PUBLIC (basetype_chain) = TREE_VIA_PUBLIC (basetype_path);
TREE_VIA_PROTECTED (basetype_chain) = TREE_VIA_PROTECTED (basetype_path);
TREE_VIA_VIRTUAL (basetype_chain) = TREE_VIA_VIRTUAL (basetype_path);
@@ -1289,11 +1348,11 @@ lookup_field (xbasetype, name, protect, want_type)
TREE_VIA_PROTECTED (btypes) = TREE_VIA_PROTECTED (base_binfo);
TREE_VIA_VIRTUAL (btypes) = TREE_VIA_VIRTUAL (base_binfo);
if (TREE_VIA_VIRTUAL (base_binfo))
- btypes = tree_cons (NULL_TREE,
+ btypes = my_tree_cons (NULL_TREE,
TYPE_BINFO (BINFO_TYPE (TREE_VEC_ELT (BINFO_BASETYPES (binfo_h), i))),
btypes);
else
- btypes = tree_cons (NULL_TREE,
+ btypes = my_tree_cons (NULL_TREE,
TREE_VEC_ELT (BINFO_BASETYPES (binfo_h), i),
btypes);
obstack_ptr_grow (&search_obstack, btypes);
@@ -1581,6 +1640,23 @@ lookup_fnfields_1 (type, name)
if (DECL_NAME (*methods) == name)
break;
}
+
+ /* If we didn't find it, it might have been a template
+ conversion operator. (Note that we don't look for this case
+ above so that we will always find specializations first.) */
+ if (methods == end
+ && IDENTIFIER_TYPENAME_P (name))
+ {
+ methods = &TREE_VEC_ELT (method_vec, 0) + 1;
+
+ while (++methods != end)
+ {
+ if (TREE_CODE (*methods) == TEMPLATE_DECL
+ && IDENTIFIER_TYPENAME_P (DECL_NAME (*methods)))
+ break;
+ }
+ }
+
if (methods != end)
return methods - &TREE_VEC_ELT (method_vec, 0);
}
@@ -1762,7 +1838,7 @@ lookup_fnfields (basetype_path, name, complain)
}
else
{
- basetype_chain = build_tree_list (NULL_TREE, basetype_path);
+ basetype_chain = build_expr_list (NULL_TREE, basetype_path);
TREE_VIA_PUBLIC (basetype_chain) = TREE_VIA_PUBLIC (basetype_path);
TREE_VIA_PROTECTED (basetype_chain) = TREE_VIA_PROTECTED (basetype_path);
TREE_VIA_VIRTUAL (basetype_chain) = TREE_VIA_VIRTUAL (basetype_path);
@@ -1794,11 +1870,11 @@ lookup_fnfields (basetype_path, name, complain)
TREE_VIA_PROTECTED (btypes) = TREE_VIA_PROTECTED (base_binfo);
TREE_VIA_VIRTUAL (btypes) = TREE_VIA_VIRTUAL (base_binfo);
if (TREE_VIA_VIRTUAL (base_binfo))
- btypes = tree_cons (NULL_TREE,
+ btypes = my_tree_cons (NULL_TREE,
TYPE_BINFO (BINFO_TYPE (TREE_VEC_ELT (BINFO_BASETYPES (binfo_h), i))),
btypes);
else
- btypes = tree_cons (NULL_TREE,
+ btypes = my_tree_cons (NULL_TREE,
TREE_VEC_ELT (BINFO_BASETYPES (binfo_h), i),
btypes);
obstack_ptr_grow (&search_obstack, btypes);
@@ -1919,8 +1995,8 @@ lookup_fnfields (basetype_path, name, complain)
static HOST_WIDE_INT
breadth_first_search (binfo, testfn, qfn)
tree binfo;
- int (*testfn)();
- int (*qfn)();
+ int (*testfn) PROTO((tree, int));
+ int (*qfn) PROTO((tree, int));
{
int head = 0, tail = 0;
int rval = 0;
@@ -1978,8 +2054,7 @@ breadth_first_search (binfo, testfn, qfn)
}
/* Functions to use in breadth first searches. */
-typedef tree (*pft)();
-typedef int (*pfi)();
+typedef int (*pfi) PROTO((tree, int));
static tree declarator;
@@ -2122,7 +2197,8 @@ get_matching_virtual (binfo, fndecl, dtorp)
{
tree binfo = get_binfo (b, d, 1);
if (binfo != error_mark_node
- && ! BINFO_OFFSET_ZEROP (binfo))
+ && (! BINFO_OFFSET_ZEROP (binfo)
+ || TREE_VIA_VIRTUAL (binfo)))
sorry ("adjusting pointers for covariant returns");
}
if (TYPE_READONLY (d) > TYPE_READONLY (b))
@@ -2383,8 +2459,8 @@ convert_pointer_to_single_level (to_type, expr)
static void
dfs_walk (binfo, fn, qfn)
tree binfo;
- void (*fn)();
- int (*qfn)();
+ void (*fn) PROTO((tree));
+ int (*qfn) PROTO((tree));
{
tree binfos = BINFO_BASETYPES (binfo);
int i, n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
@@ -2949,7 +3025,7 @@ expand_indirect_vtbls_init (binfo, true_exp, decl_ptr)
/* Do all vtables from this virtual base. */
/* This assumes that virtual bases can never serve as parent
- binfos. (in the CLASSTPE_VFIELD_PARENT sense) */
+ binfos. (in the CLASSTYPE_VFIELD_PARENT sense) */
expand_direct_vtbls_init (vbases, TYPE_BINFO (BINFO_TYPE (vbases)),
1, 0, addr);
@@ -3058,6 +3134,10 @@ dfs_record_inheritance (binfo)
tree baseclass = BINFO_TYPE (base_binfo);
mi_boolean *base_row = BINFO_DERIVES_FROM_STAR (base_binfo);
+ if (TREE_CODE (baseclass) == TEMPLATE_TYPE_PARM)
+ continue;
+ my_friendly_assert (CLASSTYPE_CID (baseclass) != 0, 2365);
+
/* Don't search if there's nothing there! MI_SIZE can be
zero as a result of parse errors. */
if (TYPE_BINFO_BASETYPES (baseclass) && mi_size > 0)
@@ -3596,6 +3676,8 @@ reinit_search_statistics ()
#endif /* GATHER_STATISTICS */
}
+#define scratch_tree_cons expr_tree_cons
+
static tree conversions;
static void
add_conversions (binfo)
@@ -3609,7 +3691,7 @@ add_conversions (binfo)
tree tmp = TREE_VEC_ELT (method_vec, i);
if (! IDENTIFIER_TYPENAME_P (DECL_NAME (tmp)))
break;
- conversions = tree_cons (binfo, tmp, conversions);
+ conversions = scratch_tree_cons (binfo, tmp, conversions);
}
SET_BINFO_MARKED (binfo);
}
diff --git a/gcc/cp/sig.c b/gcc/cp/sig.c
index c52b1d62cd6..ba3af425384 100644
--- a/gcc/cp/sig.c
+++ b/gcc/cp/sig.c
@@ -32,12 +32,22 @@ extern struct obstack *current_obstack;
extern struct obstack permanent_obstack;
extern struct obstack *saveable_obstack;
-extern void error ();
-extern void sorry ();
extern void compiler_error ();
-extern void make_decl_rtl PROTO((tree, char *, int));
-static tree build_sptr_ref PROTO((tree));
+static tree save_this PROTO((tree));
+static tree build_sptr_ref PROTO((tree));
+static tree build_member_function_pointer PROTO((tree));
+static void undo_casts PROTO((tree));
+static tree build_signature_pointer_or_reference_name
+ PROTO((tree, int, int, int));
+static void build_signature_pointer_or_reference_decl
+ PROTO((tree, tree));
+static tree build_signature_pointer_or_reference_type
+ PROTO((tree, int, int, int));
+static tree get_sigtable_name PROTO((tree, tree));
+static tree build_signature_table_constructor PROTO((tree, tree));
+static int match_method_types PROTO((tree, tree));
+static tree build_sigtable PROTO((tree, tree, tree));
/* Used to help generate globally unique names for signature tables. */
diff --git a/gcc/cp/spew.c b/gcc/cp/spew.c
index 15a1aa9f1a7..a6fe404bbe0 100644
--- a/gcc/cp/spew.c
+++ b/gcc/cp/spew.c
@@ -45,7 +45,9 @@ struct token {
YYSTYPE yylval;
};
-static int do_aggr ();
+static int do_aggr PROTO((void));
+static int probe_obstack PROTO((struct obstack *, tree, unsigned int));
+static void scan_tokens PROTO((int));
/* From lex.c: */
/* the declaration found for the last IDENTIFIER token read in.
@@ -187,6 +189,8 @@ scan_tokens (n)
}
}
+/* Like _obstack_allocated_p, but stop after checking NLEVELS chunks. */
+
static int
probe_obstack (h, obj, nlevels)
struct obstack *h;
@@ -228,8 +232,6 @@ peekyylex ()
return nth_token (0)->yychar;
}
-extern tree snarf_defarg ();
-
int
yylex ()
{
@@ -310,12 +312,11 @@ yylex ()
{
case TYPENAME:
case SELFNAME:
- lastiddecl = identifier_typedecl_value (tmp_token.yylval.ttype);
- if (lastiddecl != trrr)
- lastiddecl = trrr;
+ lastiddecl = trrr;
if (got_scope)
tmp_token.yylval.ttype = trrr;
break;
+ case PFUNCNAME:
case IDENTIFIER:
lastiddecl = trrr;
break;
@@ -377,6 +378,10 @@ yylex ()
if (spew_debug)
debug_yychar (yychar);
#endif
+
+ if (yychar == PFUNCNAME)
+ yylval.ttype = do_identifier (yylval.ttype, 1);
+
return yychar;
}
diff --git a/gcc/cp/tinfo2.cc b/gcc/cp/tinfo2.cc
index 72870df9538..128661c1cd2 100644
--- a/gcc/cp/tinfo2.cc
+++ b/gcc/cp/tinfo2.cc
@@ -258,6 +258,18 @@ __throw_type_match_rtti (void *catch_type_r, void *throw_type_r, void *objptr)
return new_objptr;
}
+/* Called from __cp_pop_exception. Is P the type_info node for a pointer
+ of some kind? */
+
+bool
+__is_pointer (void *p)
+{
+ const type_info *t = reinterpret_cast <const type_info *>(p);
+ const __pointer_type_info *pt =
+ dynamic_cast <const __pointer_type_info *> (t);
+ return pt != 0;
+}
+
extern "C" void
__rtti_ptr (void *addr, const char *n, const type_info *ti)
{ new (addr) __pointer_type_info (n, *ti); }
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index d212bb223d4..98b1a6d3b77 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -32,6 +32,25 @@ Boston, MA 02111-1307, USA. */
#include <varargs.h>
#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef NEED_DECLARATION_FREE
+extern void free PROTO((void *));
+#endif
+
+extern void compiler_error ();
+
+static tree get_identifier_list PROTO((tree));
+static tree bot_manip PROTO((tree));
+static tree perm_manip PROTO((tree));
+static tree build_cplus_array_type_1 PROTO((tree, tree));
+static void list_hash_add PROTO((int, tree));
+static int list_hash PROTO((tree, tree, tree));
+static tree list_hash_lookup PROTO((int, int, int, int, tree, tree,
+ tree));
+
#define CEIL(x,y) (((x) + (y) - 1) / (y))
/* Return nonzero if REF is an lvalue valid for this language.
@@ -59,6 +78,9 @@ real_lvalue_p (ref)
case PREDECREMENT_EXPR:
case COMPONENT_REF:
case SAVE_EXPR:
+ case UNSAVE_EXPR:
+ case TRY_CATCH_EXPR:
+ case WITH_CLEANUP_EXPR:
return real_lvalue_p (TREE_OPERAND (ref, 0));
case STRING_CST:
@@ -133,6 +155,9 @@ lvalue_p (ref)
case IMAGPART_EXPR:
case COMPONENT_REF:
case SAVE_EXPR:
+ case UNSAVE_EXPR:
+ case TRY_CATCH_EXPR:
+ case WITH_CLEANUP_EXPR:
return lvalue_p (TREE_OPERAND (ref, 0));
case STRING_CST:
@@ -219,7 +244,7 @@ build_cplus_new (type, init)
tree slot;
tree rval;
- if (TREE_CODE (init) == TARGET_EXPR || init == error_mark_node)
+ if (TREE_CODE (init) != CALL_EXPR && TREE_CODE (init) != NEW_EXPR)
return init;
slot = build (VAR_DECL, type);
@@ -227,10 +252,8 @@ build_cplus_new (type, init)
rval = build (NEW_EXPR, type,
TREE_OPERAND (init, 0), TREE_OPERAND (init, 1), slot);
TREE_SIDE_EFFECTS (rval) = 1;
- TREE_ADDRESSABLE (rval) = 1;
rval = build (TARGET_EXPR, type, slot, rval, NULL_TREE, NULL_TREE);
TREE_SIDE_EFFECTS (rval) = 1;
- TREE_ADDRESSABLE (rval) = 1;
return rval;
}
@@ -1253,6 +1276,9 @@ is_overloaded_fn (x)
if (TREE_CODE (x) == FUNCTION_DECL)
return 1;
+ if (TREE_CODE (x) == TEMPLATE_ID_EXPR)
+ return 1;
+
if (TREE_CODE (x) == TREE_LIST
&& (TREE_CODE (TREE_VALUE (x)) == FUNCTION_DECL
|| TREE_CODE (TREE_VALUE (x)) == TEMPLATE_DECL))
@@ -1265,9 +1291,12 @@ int
really_overloaded_fn (x)
tree x;
{
+ if (TREE_CODE (x) == TEMPLATE_ID_EXPR)
+ return 1;
+
if (TREE_CODE (x) == TREE_LIST
&& (TREE_CODE (TREE_VALUE (x)) == FUNCTION_DECL
- || TREE_CODE (TREE_VALUE (x)) == TEMPLATE_DECL))
+ || DECL_FUNCTION_TEMPLATE_P (TREE_VALUE (x))))
return 1;
return 0;
@@ -1277,7 +1306,9 @@ tree
get_first_fn (from)
tree from;
{
- if (TREE_CODE (from) == FUNCTION_DECL)
+ if (TREE_CODE (from) == FUNCTION_DECL
+ || TREE_CODE (from) == TEMPLATE_ID_EXPR
+ || DECL_FUNCTION_TEMPLATE_P (from))
return from;
my_friendly_assert (TREE_CODE (from) == TREE_LIST, 9);
@@ -1293,25 +1324,6 @@ is_aggr_type_2 (t1, t2)
return 0;
return IS_AGGR_TYPE (t1) && IS_AGGR_TYPE (t2);
}
-
-/* Give message using types TYPE1 and TYPE2 as arguments.
- PFN is the function which will print the message;
- S is the format string for PFN to use. */
-
-void
-message_2_types (pfn, s, type1, type2)
- void (*pfn) ();
- char *s;
- tree type1, type2;
-{
- tree name1 = TYPE_NAME (type1);
- tree name2 = TYPE_NAME (type2);
- if (TREE_CODE (name1) == TYPE_DECL)
- name1 = DECL_NAME (name1);
- if (TREE_CODE (name2) == TYPE_DECL)
- name2 = DECL_NAME (name2);
- (*pfn) (s, IDENTIFIER_POINTER (name1), IDENTIFIER_POINTER (name2));
-}
#define PRINT_RING_SIZE 4
@@ -1408,7 +1420,7 @@ build_exception_variant (type, raises)
tree
mapcar (t, func)
tree t;
- tree (*func)();
+ tree (*func) PROTO((tree));
{
tree tmp;
@@ -1650,11 +1662,9 @@ extern int depth_reached;
void
print_lang_statistics ()
{
- extern struct obstack maybepermanent_obstack, decl_obstack;
+ extern struct obstack decl_obstack;
print_obstack_statistics ("class_obstack", &class_obstack);
print_obstack_statistics ("decl_obstack", &decl_obstack);
- print_obstack_statistics ("permanent_obstack", &permanent_obstack);
- print_obstack_statistics ("maybepermanent_obstack", &maybepermanent_obstack);
print_search_statistics ();
print_class_statistics ();
#ifdef GATHER_STATISTICS
@@ -1757,8 +1767,6 @@ break_out_target_exprs (t)
/* Obstack used for allocating nodes in template function and variable
definitions. */
-extern struct obstack *expression_obstack;
-
/* Similar to `build_nt', except we build
on the permanent_obstack, regardless. */
@@ -1858,8 +1866,6 @@ tree
get_type_decl (t)
tree t;
{
- if (TREE_CODE (t) == IDENTIFIER_NODE)
- return identifier_typedecl_value (t);
if (TREE_CODE (t) == TYPE_DECL)
return t;
if (TREE_CODE_CLASS (TREE_CODE (t)) == 't')
@@ -2015,7 +2021,8 @@ cp_tree_equal (t1, t2)
return 0;
case TEMPLATE_CONST_PARM:
- return TEMPLATE_CONST_IDX (t1) == TEMPLATE_CONST_IDX (t2);
+ return TEMPLATE_CONST_IDX (t1) == TEMPLATE_CONST_IDX (t2)
+ && TEMPLATE_CONST_LEVEL (t1) == TEMPLATE_CONST_LEVEL (t2);
case SIZEOF_EXPR:
if (TREE_CODE (TREE_OPERAND (t1, 0)) != TREE_CODE (TREE_OPERAND (t2, 0)))
@@ -2054,13 +2061,20 @@ make_temp_vec (len)
int len;
{
register tree node;
- push_obstacks_nochange ();
- resume_temporary_allocation ();
+ register struct obstack *ambient_obstack = current_obstack;
+ current_obstack = expression_obstack;
node = make_tree_vec (len);
- pop_obstacks ();
+ current_obstack = ambient_obstack;
return node;
}
+void
+push_expression_obstack ()
+{
+ push_obstacks_nochange ();
+ current_obstack = expression_obstack;
+}
+
/* The type of ARG when used as an lvalue. */
tree
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 0be5b08b9f5..77d785fd76f 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -1,5 +1,5 @@
/* Build expressions with type checking for C++ compiler.
- Copyright (C) 1987, 88, 89, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 89, 92-96, 1997 Free Software Foundation, Inc.
Hacked by Michael Tiemann (tiemann@cygnus.com)
This file is part of GNU CC.
@@ -29,9 +29,6 @@ Boston, MA 02111-1307, USA. */
and to process initializations in declarations (since they work
like a strange sort of assignment). */
-extern void error ();
-extern void warning ();
-
#include "config.h"
#include <stdio.h>
#include "tree.h"
@@ -39,20 +36,31 @@ extern void warning ();
#include "cp-tree.h"
#include "flags.h"
#include "output.h"
+#include "expr.h"
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
-int mark_addressable PROTO((tree));
-static tree convert_for_assignment PROTO((tree, tree, char*, tree, int));
-/* static */ tree convert_for_initialization PROTO((tree, tree, tree, int, char*, tree, int));
-extern tree shorten_compare ();
-static tree pointer_int_sum PROTO((enum tree_code, register tree, register tree));
-static tree pointer_diff PROTO((register tree, register tree));
+extern void compiler_error ();
+
+static tree convert_for_assignment PROTO((tree, tree, char*, tree,
+ int));
+static tree pointer_int_sum PROTO((enum tree_code, tree, tree));
+static tree rationalize_conditional_expr PROTO((enum tree_code, tree));
static int comp_target_parms PROTO((tree, tree, int));
+static int comp_ptr_ttypes_real PROTO((tree, tree, int));
static int comp_ptr_ttypes_const PROTO((tree, tree));
static int comp_ptr_ttypes_reinterpret PROTO((tree, tree));
-#if 0
-static tree convert_sequence ();
-#endif
-/* static */ tree unary_complex_lvalue PROTO((enum tree_code, tree));
+static int comp_array_types PROTO((int (*) (tree, tree, int), tree,
+ tree, int));
+static tree build_ptrmemfunc1 PROTO((tree, tree, tree, tree, tree));
+static tree common_base_type PROTO((tree, tree));
+static tree convert_sequence PROTO((tree, tree));
+static tree lookup_anon_field PROTO((tree, tree));
+static tree pointer_diff PROTO((tree, tree));
+static tree qualify_type PROTO((tree, tree));
+static tree expand_target_expr PROTO((tree));
static tree get_delta_difference PROTO((tree, tree, int));
/* Return the target type of TYPE, which meas return T for:
@@ -443,6 +451,10 @@ common_type (t1, t2)
target = tt1;
else if (tt1 == void_type_node || tt2 == void_type_node)
target = void_type_node;
+ else if (tt1 == unknown_type_node)
+ target = tt2;
+ else if (tt2 == unknown_type_node)
+ target = tt1;
else
target = common_type (tt1, tt2);
@@ -589,7 +601,7 @@ compexcepttypes (t1, t2)
static int
comp_array_types (cmp, t1, t2, strict)
- register int (*cmp)();
+ register int (*cmp) PROTO((tree, tree, int));
tree t1, t2;
int strict;
{
@@ -825,7 +837,8 @@ comptypes (type1, type2, strict)
break;
case TEMPLATE_TYPE_PARM:
- return TEMPLATE_TYPE_IDX (t1) == TEMPLATE_TYPE_IDX (t2);
+ return TEMPLATE_TYPE_IDX (t1) == TEMPLATE_TYPE_IDX (t2)
+ && TEMPLATE_TYPE_LEVEL (t1) == TEMPLATE_TYPE_LEVEL (t2);
case TYPENAME_TYPE:
if (TYPE_IDENTIFIER (t1) != TYPE_IDENTIFIER (t2))
@@ -862,7 +875,10 @@ comp_target_types (ttl, ttr, nptrs)
if (nptrs > 0)
{
- if (TREE_CODE (ttl) == VOID_TYPE
+ if (TREE_CODE (ttl) == UNKNOWN_TYPE
+ || TREE_CODE (ttr) == UNKNOWN_TYPE)
+ return 1;
+ else if (TREE_CODE (ttl) == VOID_TYPE
&& TREE_CODE (ttr) != FUNCTION_TYPE
&& TREE_CODE (ttr) != METHOD_TYPE
&& TREE_CODE (ttr) != OFFSET_TYPE)
@@ -1665,18 +1681,33 @@ build_component_ref_1 (datum, field, protect)
(build_component_ref (datum, field, NULL_TREE, protect));
}
-/* Given a COND_EXPR in T, return it in a form that we can, for
- example, use as an lvalue. This code used to be in unary_complex_lvalue,
- but we needed it to deal with `a = (d == c) ? b : c' expressions, where
- we're dealing with aggregates. So, we now call this in unary_complex_lvalue,
- and in build_modify_expr. The case (in particular) that led to this was
- with CODE == ADDR_EXPR, since it's not an lvalue when we'd get it there. */
+/* Given a COND_EXPR, MIN_EXPR, or MAX_EXPR in T, return it in a form that we
+ can, for example, use as an lvalue. This code used to be in
+ unary_complex_lvalue, but we needed it to deal with `a = (d == c) ? b : c'
+ expressions, where we're dealing with aggregates. But now it's again only
+ called from unary_complex_lvalue. The case (in particular) that led to
+ this was with CODE == ADDR_EXPR, since it's not an lvalue when we'd
+ get it there. */
static tree
rationalize_conditional_expr (code, t)
enum tree_code code;
tree t;
{
+ /* For MIN_EXPR or MAX_EXPR, fold-const.c has arranged things so that
+ the first operand is always the one to be used if both operands
+ are equal, so we know what conditional expression this used to be. */
+ if (TREE_CODE (t) == MIN_EXPR || TREE_CODE (t) == MAX_EXPR)
+ {
+ return
+ build_conditional_expr (build_x_binary_op ((TREE_CODE (t) == MIN_EXPR
+ ? LE_EXPR : GE_EXPR),
+ TREE_OPERAND (t, 0),
+ TREE_OPERAND (t, 1)),
+ build_unary_op (code, TREE_OPERAND (t, 0), 0),
+ build_unary_op (code, TREE_OPERAND (t, 1), 0));
+ }
+
return
build_conditional_expr (TREE_OPERAND (t, 0),
build_unary_op (code, TREE_OPERAND (t, 1), 0),
@@ -2040,6 +2071,7 @@ build_indirect_ref (ptr, errorstring)
if (TREE_CODE (type) == POINTER_TYPE || TREE_CODE (type) == REFERENCE_TYPE)
{
if (TREE_CODE (pointer) == ADDR_EXPR
+ && !flag_volatile
&& (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (pointer, 0)))
== TYPE_MAIN_VARIANT (TREE_TYPE (type)))
&& (TREE_READONLY (TREE_OPERAND (pointer, 0))
@@ -2053,10 +2085,13 @@ build_indirect_ref (ptr, errorstring)
register tree ref = build1 (INDIRECT_REF,
TYPE_MAIN_VARIANT (t), pointer);
+ /* We *must* set TREE_READONLY when dereferencing a pointer to const,
+ so that we get the proper error message if the result is used
+ to assign to. Also, &* is supposed to be a no-op. */
TREE_READONLY (ref) = TYPE_READONLY (t);
- TREE_THIS_VOLATILE (ref) = TYPE_VOLATILE (t);
TREE_SIDE_EFFECTS (ref)
- = TYPE_VOLATILE (t) || TREE_SIDE_EFFECTS (pointer);
+ = TYPE_VOLATILE (t) || TREE_SIDE_EFFECTS (pointer) || flag_volatile;
+ TREE_THIS_VOLATILE (ref) = TYPE_VOLATILE (t);
return ref;
}
}
@@ -2246,6 +2281,7 @@ build_x_function_call (function, params, decl)
tree function, params, decl;
{
tree type;
+ tree template_id = NULL_TREE;
int is_method;
if (function == error_mark_node)
@@ -2254,6 +2290,13 @@ build_x_function_call (function, params, decl)
if (processing_template_decl)
return build_min_nt (CALL_EXPR, function, params, NULL_TREE);
+ /* Save explicit template arguments if found */
+ if (TREE_CODE (function) == TEMPLATE_ID_EXPR)
+ {
+ template_id = function;
+ function = TREE_OPERAND (function, 0);
+ }
+
type = TREE_TYPE (function);
if (TREE_CODE (type) == OFFSET_TYPE
@@ -2289,7 +2332,8 @@ build_x_function_call (function, params, decl)
{
tree basetype = NULL_TREE;
- if (TREE_CODE (function) == FUNCTION_DECL)
+ if (TREE_CODE (function) == FUNCTION_DECL
+ || DECL_FUNCTION_TEMPLATE_P (function))
{
basetype = DECL_CLASS_CONTEXT (function);
@@ -2347,6 +2391,9 @@ build_x_function_call (function, params, decl)
decl = build_indirect_ref (decl, NULL_PTR);
}
+ /* Put back explicit template arguments, if any. */
+ if (template_id)
+ function = template_id;
return build_method_call (decl, function, params,
NULL_TREE, LOOKUP_NORMAL);
}
@@ -2362,7 +2409,7 @@ build_x_function_call (function, params, decl)
return build_method_call (decl, function, params,
NULL_TREE, LOOKUP_NORMAL);
}
- else if (TREE_CODE (function) == TREE_LIST)
+ else if (really_overloaded_fn (function))
{
if (TREE_VALUE (function) == NULL_TREE)
{
@@ -2375,7 +2422,12 @@ build_x_function_call (function, params, decl)
tree val = TREE_VALUE (function);
if (flag_ansi_overloading)
- return build_new_function_call (function, params, NULL_TREE);
+ {
+ /* Put back explicit template arguments, if any. */
+ if (template_id)
+ function = template_id;
+ return build_new_function_call (function, params);
+ }
if (TREE_CODE (val) == TEMPLATE_DECL)
return build_overload_call_real
@@ -2403,7 +2455,7 @@ build_x_function_call (function, params, decl)
decl_addr = build_unary_op (ADDR_EXPR, decl, 0);
function = get_member_function_from_ptrfunc (&decl_addr,
TREE_OPERAND (function, 1));
- params = tree_cons (NULL_TREE, decl_addr, params);
+ params = expr_tree_cons (NULL_TREE, decl_addr, params);
return build_function_call (function, params);
}
@@ -2453,7 +2505,7 @@ build_x_function_call (function, params, decl)
}
else
decl = build_c_cast (ctypeptr, decl);
- params = tree_cons (NULL_TREE, decl, params);
+ params = expr_tree_cons (NULL_TREE, decl, params);
}
return build_function_call (function, params);
@@ -2630,7 +2682,8 @@ build_function_call_real (function, params, require_complete, flags)
if (!((TREE_CODE (fntype) == POINTER_TYPE
&& TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE)
- || is_method))
+ || is_method
+ || TREE_CODE (function) == TEMPLATE_ID_EXPR))
{
cp_error ("`%E' cannot be used as a function", function);
return error_mark_node;
@@ -2793,18 +2846,12 @@ convert_arguments (return_loc, typelist, values, fndecl, flags)
/* Strip the `&' from an overloaded FUNCTION_DECL. */
if (TREE_CODE (val) == ADDR_EXPR)
val = TREE_OPERAND (val, 0);
- if (TREE_CODE (val) == TREE_LIST
- && TREE_CHAIN (val) == NULL_TREE
- && TREE_TYPE (TREE_VALUE (val)) != NULL_TREE
- && (TREE_TYPE (val) == unknown_type_node
- || DECL_CHAIN (TREE_VALUE (val)) == NULL_TREE))
- /* Instantiates automatically. */
- val = TREE_VALUE (val);
+ if (really_overloaded_fn (val))
+ cp_error ("insufficient type information to resolve address of overloaded function `%D'",
+ DECL_NAME (get_first_fn (val)));
else
- {
- error ("insufficient type information in parameter list");
- val = integer_zero_node;
- }
+ error ("insufficient type information in parameter list");
+ val = integer_zero_node;
}
else if (TREE_CODE (val) == OFFSET_REF
&& TREE_CODE (TREE_TYPE (val)) == METHOD_TYPE)
@@ -2861,7 +2908,7 @@ convert_arguments (return_loc, typelist, values, fndecl, flags)
if (parmval == error_mark_node)
return error_mark_node;
- result = tree_cons (NULL_TREE, parmval, result);
+ result = expr_tree_cons (NULL_TREE, parmval, result);
}
else
{
@@ -2872,17 +2919,17 @@ convert_arguments (return_loc, typelist, values, fndecl, flags)
&& (TYPE_PRECISION (TREE_TYPE (val))
< TYPE_PRECISION (double_type_node)))
/* Convert `float' to `double'. */
- result = tree_cons (NULL_TREE, cp_convert (double_type_node, val), result);
+ result = expr_tree_cons (NULL_TREE, cp_convert (double_type_node, val), result);
else if (TYPE_LANG_SPECIFIC (TREE_TYPE (val))
&& ! TYPE_HAS_TRIVIAL_INIT_REF (TREE_TYPE (val)))
{
cp_warning ("cannot pass objects of type `%T' through `...'",
TREE_TYPE (val));
- result = tree_cons (NULL_TREE, val, result);
+ result = expr_tree_cons (NULL_TREE, val, result);
}
else
/* Convert `short' and `char' to full-size `int'. */
- result = tree_cons (NULL_TREE, default_conversion (val), result);
+ result = expr_tree_cons (NULL_TREE, default_conversion (val), result);
}
if (typetail)
@@ -2927,7 +2974,7 @@ convert_arguments (return_loc, typelist, values, fndecl, flags)
if (parmval == error_mark_node)
return error_mark_node;
- result = tree_cons (0, parmval, result);
+ result = expr_tree_cons (0, parmval, result);
typetail = TREE_CHAIN (typetail);
/* ends with `...'. */
if (typetail == NULL_TREE)
@@ -4019,6 +4066,7 @@ build_x_unary_op (code, xarg)
/* & rec, on incomplete RECORD_TYPEs is the simple opr &, not an
error message. */
if (code == ADDR_EXPR
+ && TREE_CODE (xarg) != TEMPLATE_ID_EXPR
&& ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (xarg)))
&& TYPE_SIZE (TREE_TYPE (xarg)) == NULL_TREE)
|| (TREE_CODE (xarg) == OFFSET_REF)))
@@ -4413,6 +4461,27 @@ build_unary_op (code, xarg, noconvert)
0);
return build1 (ADDR_EXPR, unknown_type_node, arg);
}
+ else if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
+ {
+ tree targs;
+ tree fn;
+
+ /* We don't require a match here; it's possible that the
+ context (like a cast to a particular type) will resolve
+ the particular choice of template. */
+ fn = determine_explicit_specialization (arg, NULL_TREE,
+ &targs,
+ 0, 0);
+
+ if (fn)
+ {
+ fn = instantiate_template (fn, targs);
+ mark_addressable (fn);
+ return build_unary_op (ADDR_EXPR, fn, 0);
+ }
+
+ return build1 (ADDR_EXPR, unknown_type_node, arg);
+ }
/* Handle complex lvalues (when permitted)
by reduction to simpler cases. */
@@ -4546,7 +4615,8 @@ unary_complex_lvalue (code, arg)
}
/* Handle (a ? b : c) used as an "lvalue". */
- if (TREE_CODE (arg) == COND_EXPR)
+ if (TREE_CODE (arg) == COND_EXPR
+ || TREE_CODE (arg) == MIN_EXPR || TREE_CODE (arg) == MAX_EXPR)
return rationalize_conditional_expr (code, arg);
if (TREE_CODE (arg) == MODIFY_EXPR
@@ -4629,7 +4699,7 @@ unary_complex_lvalue (code, arg)
DECL_FIELD_BITPOS (t),
size_int (BITS_PER_UNIT)));
- /* We offset all pointer to data memebers by 1 so that we can
+ /* We offset all pointer to data members by 1 so that we can
distinguish between a null pointer to data member and the first
data member of a structure. */
offset = size_binop (PLUS_EXPR, offset, size_int (1));
@@ -4737,18 +4807,14 @@ mark_addressable (exp)
return 1;
case FUNCTION_DECL:
- /* We have to test both conditions here. The first may
- be non-zero in the case of processing a default function.
- The second may be non-zero in the case of a template function. */
- x = DECL_MAIN_VARIANT (x);
- if ((DECL_THIS_INLINE (x) || DECL_PENDING_INLINE_INFO (x))
- && (DECL_CONTEXT (x) == NULL_TREE
- || TREE_CODE_CLASS (TREE_CODE (DECL_CONTEXT (x))) != 't'
- || ! CLASSTYPE_INTERFACE_ONLY (DECL_CONTEXT (x))))
+ if (DECL_LANG_SPECIFIC (x) != 0)
{
- mark_inline_for_output (x);
- if (x == current_function_decl)
- DECL_EXTERNAL (x) = 0;
+ x = DECL_MAIN_VARIANT (x);
+ /* We have to test both conditions here. The first may be
+ non-zero in the case of processing a default function. The
+ second may be non-zero in the case of a template function. */
+ if (DECL_TEMPLATE_INFO (x) && !DECL_TEMPLATE_SPECIALIZATION (x))
+ mark_used (x);
}
TREE_ADDRESSABLE (x) = 1;
TREE_USED (x) = 1;
@@ -5122,7 +5188,7 @@ build_x_compound_expr (list)
result = build_opfncall (COMPOUND_EXPR, LOOKUP_NORMAL,
TREE_VALUE (list), TREE_VALUE (rest), NULL_TREE);
if (result)
- return build_x_compound_expr (tree_cons (NULL_TREE, result, TREE_CHAIN (rest)));
+ return build_x_compound_expr (expr_tree_cons (NULL_TREE, result, TREE_CHAIN (rest)));
if (! TREE_SIDE_EFFECTS (TREE_VALUE (list)))
{
@@ -5139,8 +5205,8 @@ build_x_compound_expr (list)
warn_if_unused_value (TREE_VALUE(list));
#endif
- return build_compound_expr (tree_cons (NULL_TREE, TREE_VALUE (list),
- build_tree_list (NULL_TREE, build_x_compound_expr (rest))));
+ return build_compound_expr (expr_tree_cons (NULL_TREE, TREE_VALUE (list),
+ build_expr_list (NULL_TREE, build_x_compound_expr (rest))));
}
/* Given a list of expressions, return a compound expression
@@ -5224,7 +5290,7 @@ build_static_cast (type, expr)
if (IS_AGGR_TYPE (type))
return build_cplus_new
(type, (build_method_call
- (NULL_TREE, ctor_identifier, build_tree_list (NULL_TREE, expr),
+ (NULL_TREE, ctor_identifier, build_expr_list (NULL_TREE, expr),
TYPE_BINFO (type), LOOKUP_NORMAL)));
expr = decay_conversion (expr);
@@ -5356,6 +5422,14 @@ build_reinterpret_cast (type, expr)
expr = decl_constant_value (expr);
return fold (build1 (NOP_EXPR, type, expr));
}
+ else if ((TYPE_PTRFN_P (type) && TYPE_PTROBV_P (intype))
+ || (TYPE_PTRFN_P (type) && TYPE_PTROBV_P (intype)))
+ {
+ pedwarn ("ANSI C++ forbids casting between pointers to functions and objects");
+ if (TREE_READONLY_DECL_P (expr))
+ expr = decl_constant_value (expr);
+ return fold (build1 (NOP_EXPR, type, expr));
+ }
else
{
cp_error ("reinterpret_cast from `%T' to `%T'", intype, type);
@@ -5593,7 +5667,7 @@ build_c_cast (type, expr)
return value;
}
-tree
+static tree
expand_target_expr (t)
tree t;
{
@@ -5613,7 +5687,7 @@ expand_target_expr (t)
do_pending_stack_adjust ();
start_sequence_for_rtl_expr (xval);
emit_note (0, -1);
- rtxval = expand_expr (t, NULL_RTX, VOIDmode, 0);
+ rtxval = expand_expr (t, NULL_RTX, VOIDmode, EXPAND_NORMAL);
do_pending_stack_adjust ();
TREE_SIDE_EFFECTS (xval) = 1;
RTL_EXPR_SEQUENCE (xval) = get_insns ();
@@ -5763,7 +5837,7 @@ build_modify_expr (lhs, modifycode, rhs)
else
{
result = build_method_call (lhs, ctor_identifier,
- build_tree_list (NULL_TREE, rhs),
+ build_expr_list (NULL_TREE, rhs),
TYPE_BINFO (lhstype), LOOKUP_NORMAL);
if (result == NULL_TREE)
return error_mark_node;
@@ -6061,7 +6135,7 @@ build_modify_expr (lhs, modifycode, rhs)
if (TREE_SIDE_EFFECTS (lhs))
cond = build_compound_expr (tree_cons
(NULL_TREE, lhs,
- build_tree_list (NULL_TREE, cond)));
+ build_expr_list (NULL_TREE, cond)));
/* Cannot have two identical lhs on this one tree (result) as preexpand
calls will rip them out and fill in RTL for them, but when the
@@ -6167,7 +6241,7 @@ get_delta_difference (from, to, force)
binfo = get_binfo (from, to, 1);
if (binfo == error_mark_node)
{
- error (" in pointer to member function conversiona");
+ error (" in pointer to member function conversion");
return delta;
}
if (binfo == 0)
@@ -6225,18 +6299,18 @@ build_ptrmemfunc1 (type, delta, idx, pfn, delta2)
if (pfn)
{
u = build_nt (CONSTRUCTOR, NULL_TREE,
- tree_cons (pfn_identifier, pfn, NULL_TREE));
+ expr_tree_cons (pfn_identifier, pfn, NULL_TREE));
}
else
{
u = build_nt (CONSTRUCTOR, NULL_TREE,
- tree_cons (delta2_identifier, delta2, NULL_TREE));
+ expr_tree_cons (delta2_identifier, delta2, NULL_TREE));
}
u = build_nt (CONSTRUCTOR, NULL_TREE,
- tree_cons (NULL_TREE, delta,
- tree_cons (NULL_TREE, idx,
- tree_cons (NULL_TREE, u, NULL_TREE))));
+ expr_tree_cons (NULL_TREE, delta,
+ expr_tree_cons (NULL_TREE, idx,
+ expr_tree_cons (NULL_TREE, u, NULL_TREE))));
return digest_init (type, u, (tree*)0);
#else
@@ -6254,15 +6328,15 @@ build_ptrmemfunc1 (type, delta, idx, pfn, delta2)
if (pfn)
{
allconstant = TREE_CONSTANT (pfn);
- allsimple = initializer_constant_valid_p (pfn, TREE_TYPE (pfn));
- u = tree_cons (pfn_field, pfn, NULL_TREE);
+ allsimple = !! initializer_constant_valid_p (pfn, TREE_TYPE (pfn));
+ u = expr_tree_cons (pfn_field, pfn, NULL_TREE);
}
else
{
delta2 = convert_and_check (delta_type_node, delta2);
allconstant = TREE_CONSTANT (delta2);
- allsimple = initializer_constant_valid_p (delta2, TREE_TYPE (delta2));
- u = tree_cons (delta2_field, delta2, NULL_TREE);
+ allsimple = !! initializer_constant_valid_p (delta2, TREE_TYPE (delta2));
+ u = expr_tree_cons (delta2_field, delta2, NULL_TREE);
}
delta = convert_and_check (delta_type_node, delta);
@@ -6274,9 +6348,9 @@ build_ptrmemfunc1 (type, delta, idx, pfn, delta2)
&& initializer_constant_valid_p (idx, TREE_TYPE (idx));
u = build (CONSTRUCTOR, subtype, NULL_TREE, u);
- u = tree_cons (delta_field, delta,
- tree_cons (idx_field, idx,
- tree_cons (pfn_or_delta2_field, u, NULL_TREE)));
+ u = expr_tree_cons (delta_field, delta,
+ expr_tree_cons (idx_field, idx,
+ expr_tree_cons (pfn_or_delta2_field, u, NULL_TREE)));
u = build (CONSTRUCTOR, type, NULL_TREE, u);
TREE_CONSTANT (u) = allconstant;
TREE_STATIC (u) = allconstant && allsimple;
@@ -7004,7 +7078,7 @@ convert_for_initialization (exp, type, rhs, flags, errtype, fndecl, parmnum)
if (TYPE_HAS_INIT_REF (type))
{
tree init = build_method_call (exp, ctor_identifier,
- build_tree_list (NULL_TREE, rhs),
+ build_expr_list (NULL_TREE, rhs),
TYPE_BINFO (type), LOOKUP_NORMAL);
if (init == error_mark_node)
@@ -7087,7 +7161,7 @@ c_expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
if (o[i] != TREE_VALUE (tail))
{
expand_expr (build_modify_expr (o[i], NOP_EXPR, TREE_VALUE (tail)),
- const0_rtx, VOIDmode, 0);
+ const0_rtx, VOIDmode, EXPAND_NORMAL);
free_temp_slots ();
}
/* Detect modification of read-only values.
@@ -7203,79 +7277,6 @@ c_expand_return (retval)
expand_return (retval);
return;
}
- /* Add some useful error checking for C++. */
- else if (TREE_CODE (valtype) == REFERENCE_TYPE)
- {
- tree whats_returned;
- tree tmp_result = result;
-
- /* Don't initialize directly into a non-BLKmode retval, since that
- could lose when being inlined by another caller. (GCC can't
- read the function return register in an inline function when
- the return value is being ignored). */
- if (result && TYPE_MODE (TREE_TYPE (tmp_result)) != BLKmode)
- tmp_result = 0;
-
- /* convert to reference now, so we can give error if we
- return an reference to a non-lvalue. */
- retval = convert_for_initialization
- (tmp_result, valtype, retval, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING,
- "return", NULL_TREE, 0);
-
- /* Sort through common things to see what it is
- we are returning. */
- whats_returned = retval;
- if (TREE_CODE (whats_returned) == COMPOUND_EXPR)
- {
- whats_returned = TREE_OPERAND (whats_returned, 1);
- if (TREE_CODE (whats_returned) == ADDR_EXPR)
- whats_returned = TREE_OPERAND (whats_returned, 0);
- }
- while (TREE_CODE (whats_returned) == CONVERT_EXPR
- || TREE_CODE (whats_returned) == NOP_EXPR)
- whats_returned = TREE_OPERAND (whats_returned, 0);
- if (TREE_CODE (whats_returned) == ADDR_EXPR)
- {
- whats_returned = TREE_OPERAND (whats_returned, 0);
- while (TREE_CODE (whats_returned) == NEW_EXPR
- || TREE_CODE (whats_returned) == TARGET_EXPR)
- {
- /* Get the target. */
- whats_returned = TREE_OPERAND (whats_returned, 0);
- warning ("returning reference to temporary");
- }
- }
-
- if (TREE_CODE (whats_returned) == VAR_DECL && DECL_NAME (whats_returned))
- {
- if (TEMP_NAME_P (DECL_NAME (whats_returned)))
- warning ("reference to non-lvalue returned");
- else if (! TREE_STATIC (whats_returned)
- && IDENTIFIER_LOCAL_VALUE (DECL_NAME (whats_returned))
- && !TREE_PUBLIC (whats_returned))
- cp_warning_at ("reference to local variable `%D' returned", whats_returned);
- }
- }
- else if (TREE_CODE (retval) == ADDR_EXPR)
- {
- tree whats_returned = TREE_OPERAND (retval, 0);
-
- if (TREE_CODE (whats_returned) == VAR_DECL
- && DECL_NAME (whats_returned)
- && IDENTIFIER_LOCAL_VALUE (DECL_NAME (whats_returned))
- && !TREE_STATIC (whats_returned)
- && !TREE_PUBLIC (whats_returned))
- cp_warning_at ("address of local variable `%D' returned", whats_returned);
- }
- else if (TREE_CODE (retval) == VAR_DECL)
- {
- if (TREE_CODE (TREE_TYPE (retval)) == ARRAY_TYPE
- && DECL_NAME (retval)
- && IDENTIFIER_LOCAL_VALUE (DECL_NAME (retval))
- && !TREE_STATIC (retval)
- && !TREE_PUBLIC (retval))
- cp_warning_at ("address of local array `%D' returned", retval);
- }
/* Now deal with possible C++ hair:
(1) Compute the return value.
@@ -7296,18 +7297,9 @@ c_expand_return (retval)
}
else
{
- /* We already did this above for refs, don't do it again. */
- if (TREE_CODE (valtype) != REFERENCE_TYPE)
- retval = convert_for_initialization
- (NULL_TREE, valtype, retval, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING,
- "return", NULL_TREE, 0);
-
- /* We can't initialize a register from a NEW_EXPR. */
- if (! current_function_returns_struct
- && TREE_CODE (retval) == TARGET_EXPR
- && TREE_CODE (TREE_OPERAND (retval, 1)) == NEW_EXPR)
- retval = build (COMPOUND_EXPR, TREE_TYPE (retval), retval,
- TREE_OPERAND (retval, 0));
+ retval = convert_for_initialization
+ (NULL_TREE, valtype, retval, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING,
+ "return", NULL_TREE, 0);
if (retval == error_mark_node)
{
@@ -7315,6 +7307,65 @@ c_expand_return (retval)
expand_null_return ();
return;
}
+
+ /* We can't initialize a register from a NEW_EXPR. */
+ else if (! current_function_returns_struct
+ && TREE_CODE (retval) == TARGET_EXPR
+ && TREE_CODE (TREE_OPERAND (retval, 1)) == NEW_EXPR)
+ retval = build (COMPOUND_EXPR, TREE_TYPE (retval), retval,
+ TREE_OPERAND (retval, 0));
+
+ /* Add some useful error checking for C++. */
+ else if (TREE_CODE (valtype) == REFERENCE_TYPE)
+ {
+ tree whats_returned;
+
+ /* Sort through common things to see what it is
+ we are returning. */
+ whats_returned = retval;
+ if (TREE_CODE (whats_returned) == COMPOUND_EXPR)
+ {
+ whats_returned = TREE_OPERAND (whats_returned, 1);
+ if (TREE_CODE (whats_returned) == ADDR_EXPR)
+ whats_returned = TREE_OPERAND (whats_returned, 0);
+ }
+ while (TREE_CODE (whats_returned) == CONVERT_EXPR
+ || TREE_CODE (whats_returned) == NOP_EXPR)
+ whats_returned = TREE_OPERAND (whats_returned, 0);
+ if (TREE_CODE (whats_returned) == ADDR_EXPR)
+ {
+ whats_returned = TREE_OPERAND (whats_returned, 0);
+ while (TREE_CODE (whats_returned) == NEW_EXPR
+ || TREE_CODE (whats_returned) == TARGET_EXPR)
+ {
+ /* Get the target. */
+ whats_returned = TREE_OPERAND (whats_returned, 0);
+ warning ("returning reference to temporary");
+ }
+ }
+
+ if (TREE_CODE (whats_returned) == VAR_DECL && DECL_NAME (whats_returned))
+ {
+ if (TEMP_NAME_P (DECL_NAME (whats_returned)))
+ warning ("reference to non-lvalue returned");
+ else if (TREE_CODE (TREE_TYPE (whats_returned)) != REFERENCE_TYPE
+ && ! TREE_STATIC (whats_returned)
+ && IDENTIFIER_LOCAL_VALUE (DECL_NAME (whats_returned))
+ && !TREE_PUBLIC (whats_returned))
+ cp_warning_at ("reference to local variable `%D' returned", whats_returned);
+ }
+ }
+ else if (TREE_CODE (retval) == ADDR_EXPR)
+ {
+ tree whats_returned = TREE_OPERAND (retval, 0);
+
+ if (TREE_CODE (whats_returned) == VAR_DECL
+ && DECL_NAME (whats_returned)
+ && IDENTIFIER_LOCAL_VALUE (DECL_NAME (whats_returned))
+ && !TREE_STATIC (whats_returned)
+ && !TREE_PUBLIC (whats_returned))
+ cp_warning_at ("address of local variable `%D' returned", whats_returned);
+ }
}
if (retval != NULL_TREE
diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c
index d2a9839db96..fae966874a1 100644
--- a/gcc/cp/typeck2.c
+++ b/gcc/cp/typeck2.c
@@ -36,8 +36,7 @@ Boston, MA 02111-1307, USA. */
#include "cp-tree.h"
#include "flags.h"
-static tree process_init_constructor ();
-extern void pedwarn (), error ();
+static tree process_init_constructor PROTO((tree, tree, tree *));
extern int errorcount;
extern int sorrycount;
@@ -302,7 +301,7 @@ ack (s, v, v2)
silly. So instead, we just do the equivalent of a call to fatal in the
same situation (call exit). */
-/* First used: 0 (reserved), Last used: 367. Free: */
+/* First used: 0 (reserved), Last used: 369. Free: */
static int abortcount = 0;
@@ -744,6 +743,9 @@ digest_init (type, init, tail)
init = DECL_INITIAL (init);
else if (TREE_READONLY_DECL_P (init))
init = decl_constant_value (init);
+ else if (IS_AGGR_TYPE (type) && TYPE_NEEDS_CONSTRUCTING (type))
+ init = ocp_convert (type, init, CONV_IMPLICIT|CONV_FORCE_TEMP,
+ LOOKUP_NORMAL);
return init;
}
@@ -987,7 +989,7 @@ process_init_constructor (type, init, elts)
allconstant = 0;
else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
allsimple = 0;
- members = tree_cons (NULL_TREE, next1, members);
+ members = expr_tree_cons (NULL_TREE, next1, members);
}
}
if (TREE_CODE (type) == RECORD_TYPE)
@@ -1022,7 +1024,7 @@ process_init_constructor (type, init, elts)
if (! DECL_NAME (field))
{
- members = tree_cons (field, integer_zero_node, members);
+ members = expr_tree_cons (field, integer_zero_node, members);
continue;
}
@@ -1051,7 +1053,7 @@ process_init_constructor (type, init, elts)
allconstant = 0;
else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
allsimple = 0;
- members = tree_cons (field, next1, members);
+ members = expr_tree_cons (field, next1, members);
}
for (; field; field = TREE_CHAIN (field))
{
@@ -1068,7 +1070,7 @@ process_init_constructor (type, init, elts)
allconstant = 0;
else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
allsimple = 0;
- members = tree_cons (field, next1, members);
+ members = expr_tree_cons (field, next1, members);
}
else if (TREE_READONLY (field))
error ("uninitialized const member `%s'",
@@ -1150,7 +1152,7 @@ process_init_constructor (type, init, elts)
allconstant = 0;
else if (initializer_constant_valid_p (next1, TREE_TYPE (next1)) == 0)
allsimple = 0;
- members = tree_cons (field, next1, members);
+ members = expr_tree_cons (field, next1, members);
}
/* If arguments were specified as a list, just remove the ones we used. */
diff --git a/gcc/cp/xref.c b/gcc/cp/xref.c
index 260ddd2d003..40cdf42103f 100644
--- a/gcc/cp/xref.c
+++ b/gcc/cp/xref.c
@@ -1,5 +1,5 @@
/* Code for handling XREF output from GNU C++.
- Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1992, 1993, 1994, 1995, 1997 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com)
This file is part of GNU CC.
@@ -28,10 +28,23 @@ Boston, MA 02111-1307, USA. */
#include <ctype.h>
-extern char *getpwd ();
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+extern char *getpwd PROTO((void));
-extern char *index ();
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#ifdef NEED_DECLARATION_RINDEX
extern char *rindex ();
+#endif
/* The character(s) used to join a directory specification (obtained with
getwd or equivalent) with a non-absolute file name. */
@@ -125,30 +138,14 @@ static tree last_fndecl = NULL;
/* Forward definitions */
/* */
/************************************************************************/
-
-extern void GNU_xref_begin();
-extern void GNU_xref_end();
-extern void GNU_xref_file();
-extern void GNU_xref_start_scope();
-extern void GNU_xref_end_scope();
-extern void GNU_xref_ref();
-extern void GNU_xref_decl();
-extern void GNU_xref_call();
-extern void GNU_xref_function();
-extern void GNU_xref_assign();
-extern void GNU_xref_hier();
-extern void GNU_xref_member();
-
-static void gen_assign();
-static XREF_FILE find_file();
-static char * filename();
-static char * fctname();
-static char * declname();
-static void simplify_type();
-static char * fixname();
-static void open_xref_file();
-
-extern char * type_as_string();
+static void gen_assign PROTO((XREF_FILE, tree));
+static XREF_FILE find_file PROTO((char *));
+static char * filename PROTO((XREF_FILE));
+static char * fctname PROTO((tree));
+static char * declname PROTO((tree));
+static void simplify_type PROTO((char *));
+static char * fixname PROTO((char *, char *));
+static void open_xref_file PROTO((char *));
/* Start cross referencing. FILE is the name of the file we xref. */
diff --git a/gcc/cplus-dem.c b/gcc/cplus-dem.c
index c7e3ec63bc5..ad4116bd5c5 100644
--- a/gcc/cplus-dem.c
+++ b/gcc/cplus-dem.c
@@ -102,6 +102,8 @@ struct work_stuff
int destructor;
int static_type; /* A static member function */
int const_type; /* A const member function */
+ char **tmpl_argvec; /* Template function arguments. */
+ int ntmpl_args; /* The number of template function arguments. */
};
#define PRINT_ANSI_QUALIFIERS (work -> options & DMGL_ANSI)
@@ -222,7 +224,7 @@ demangle_method_args PARAMS ((struct work_stuff *work, const char **, string *))
static int
demangle_template PARAMS ((struct work_stuff *work, const char **, string *,
- string *));
+ string *, int));
static int
arm_pt PARAMS ((struct work_stuff *, const char *, int, const char **,
@@ -294,6 +296,9 @@ get_count PARAMS ((const char **, int *));
static int
consume_count PARAMS ((const char **));
+static int
+consume_count_with_underscores PARAMS ((const char**));
+
static int
demangle_args PARAMS ((struct work_stuff *, const char **, string *));
@@ -336,6 +341,42 @@ consume_count (type)
return (count);
}
+
+/* Like consume_count, but for counts that are preceded and followed
+ by '_' if they are greater than 10. Also, -1 is returned for
+ failure, since 0 can be a valid value. */
+
+static int
+consume_count_with_underscores (mangled)
+ const char **mangled;
+{
+ int idx;
+
+ if (**mangled == '_')
+ {
+ (*mangled)++;
+ if (!isdigit (**mangled))
+ return -1;
+
+ idx = consume_count (mangled);
+ if (**mangled != '_')
+ /* The trailing underscore was missing. */
+ return -1;
+
+ (*mangled)++;
+ }
+ else
+ {
+ if (**mangled < '0' || **mangled > '9')
+ return -1;
+
+ idx = **mangled - '0';
+ (*mangled)++;
+ }
+
+ return idx;
+}
+
int
cplus_demangle_opname (opname, result, options)
const char *opname;
@@ -580,7 +621,17 @@ mop_up (work, declp, success)
{
free ((char *) work -> typevec);
}
-
+ if (work->tmpl_argvec)
+ {
+ int i;
+
+ for (i = 0; i < work->ntmpl_args; i++)
+ if (work->tmpl_argvec[i])
+ free ((char*) work->tmpl_argvec[i]);
+
+ free ((char*) work->tmpl_argvec);
+ }
+
/* If demangling was successful, ensure that the demangled string is null
terminated and return it. Otherwise, free the demangling decl. */
@@ -635,6 +686,7 @@ demangle_signature (work, mangled, declp)
int success = 1;
int func_done = 0;
int expect_func = 0;
+ int expect_return_type = 0;
const char *oldmangled = NULL;
string trawname;
string tname;
@@ -726,12 +778,12 @@ demangle_signature (work, mangled, declp)
{
oldmangled = *mangled;
}
- success = demangle_template (work, mangled, &tname, &trawname);
+ success = demangle_template (work, mangled, &tname, &trawname, 1);
if (success)
{
remember_type (work, oldmangled, *mangled - oldmangled);
}
- string_append(&tname, "::");
+ string_append(&tname, (work -> options & DMGL_JAVA) ? "." : "::");
string_prepends(declp, &tname);
if (work -> destructor & 1)
{
@@ -751,14 +803,42 @@ demangle_signature (work, mangled, declp)
break;
case '_':
- /* At the outermost level, we cannot have a return type specified,
- so if we run into another '_' at this point we are dealing with
- a mangled name that is either bogus, or has been mangled by
- some algorithm we don't know how to deal with. So just
- reject the entire demangling. */
- success = 0;
+ if (GNU_DEMANGLING && expect_return_type)
+ {
+ /* Read the return type. */
+ string return_type;
+ string_init (&return_type);
+
+ (*mangled)++;
+ success = do_type (work, mangled, &return_type);
+ APPEND_BLANK (&return_type);
+
+ string_prepends (declp, &return_type);
+ string_delete (&return_type);
+ break;
+ }
+ else
+ /* At the outermost level, we cannot have a return type specified,
+ so if we run into another '_' at this point we are dealing with
+ a mangled name that is either bogus, or has been mangled by
+ some algorithm we don't know how to deal with. So just
+ reject the entire demangling. */
+ success = 0;
break;
+ case 'H':
+ if (GNU_DEMANGLING)
+ {
+ /* A G++ template function. Read the template arguments. */
+ success = demangle_template (work, mangled, declp, 0, 0);
+ expect_return_type = 1;
+ (*mangled)++;
+ break;
+ }
+ else
+ /* fall through */
+ ;
+
default:
if (AUTO_DEMANGLING || GNU_DEMANGLING)
{
@@ -785,6 +865,10 @@ demangle_signature (work, mangled, declp)
{
func_done = 1;
success = demangle_args (work, mangled, declp);
+ /* Since template include the mangling of their return types,
+ we must set expect_func to 0 so that we don't try do
+ demangle more arguments the next time we get here. */
+ expect_func = 0;
}
}
}
@@ -838,11 +922,12 @@ demangle_method_args (work, mangled, declp)
#endif
static int
-demangle_template (work, mangled, tname, trawname)
+demangle_template (work, mangled, tname, trawname, is_type)
struct work_stuff *work;
const char **mangled;
string *tname;
string *trawname;
+ int is_type;
{
int i;
int is_pointer;
@@ -857,25 +942,43 @@ demangle_template (work, mangled, tname, trawname)
const char *old_p;
const char *start;
int symbol_len;
+ int is_java_array = 0;
string temp;
(*mangled)++;
- start = *mangled;
- /* get template name */
- if ((r = consume_count (mangled)) == 0 || strlen (*mangled) < r)
+ if (is_type)
{
- return (0);
+ start = *mangled;
+ /* get template name */
+ if ((r = consume_count (mangled)) == 0 || strlen (*mangled) < r)
+ {
+ return (0);
+ }
+ if (trawname)
+ string_appendn (trawname, *mangled, r);
+ is_java_array = (work -> options & DMGL_JAVA)
+ && strncmp (*mangled, "JArray1Z", 8) == 0;
+ if (! is_java_array)
+ {
+ string_appendn (tname, *mangled, r);
+ }
+ *mangled += r;
}
- if (trawname)
- string_appendn (trawname, *mangled, r);
- string_appendn (tname, *mangled, r);
- *mangled += r;
- string_append (tname, "<");
+ if (!is_java_array)
+ string_append (tname, "<");
/* get size of template parameter list */
if (!get_count (mangled, &r))
{
return (0);
}
+ if (!is_type)
+ {
+ /* Create an array for saving the template argument values. */
+ work->tmpl_argvec = (char**) xmalloc (r * sizeof (char *));
+ work->ntmpl_args = r;
+ for (i = 0; i < r; i++)
+ work->tmpl_argvec[i] = 0;
+ }
for (i = 0; i < r; i++)
{
if (need_comma)
@@ -891,6 +994,15 @@ demangle_template (work, mangled, tname, trawname)
if (success)
{
string_appends (tname, &temp);
+
+ if (!is_type)
+ {
+ /* Save the template argument. */
+ int len = temp.p - temp.b;
+ work->tmpl_argvec[i] = xmalloc (len + 1);
+ memcpy (work->tmpl_argvec[i], temp.b, len);
+ work->tmpl_argvec[i][len] = '\0';
+ }
}
string_delete(&temp);
if (!success)
@@ -900,6 +1012,9 @@ demangle_template (work, mangled, tname, trawname)
}
else
{
+ string param;
+ string* s;
+
/* otherwise, value parameter */
old_p = *mangled;
is_pointer = 0;
@@ -913,7 +1028,7 @@ demangle_template (work, mangled, tname, trawname)
/*
if (success)
{
- string_appends (tname, &temp);
+ string_appends (s, &temp);
}
*/
string_delete(&temp);
@@ -922,8 +1037,17 @@ demangle_template (work, mangled, tname, trawname)
break;
}
/*
- string_append (tname, "=");
+ string_append (s, "=");
*/
+
+ if (!is_type)
+ {
+ s = &param;
+ string_init (s);
+ }
+ else
+ s = tname;
+
while (*old_p && !done)
{
switch (*old_p)
@@ -977,16 +1101,41 @@ demangle_template (work, mangled, tname, trawname)
done = is_integral = 1;
}
}
- if (is_integral)
+ if (**mangled == 'Y')
+ {
+ /* The next argument is a template parameter. */
+ int idx;
+
+ (*mangled)++;
+ idx = consume_count_with_underscores (mangled);
+ if (idx == -1
+ || (work->tmpl_argvec && idx >= work->ntmpl_args)
+ || consume_count_with_underscores (mangled) == -1)
+ {
+ success = 0;
+ if (!is_type)
+ string_delete (s);
+ break;
+ }
+ if (work->tmpl_argvec)
+ string_append (s, work->tmpl_argvec[idx]);
+ else
+ {
+ char buf[10];
+ sprintf(buf, "T%d", idx);
+ string_append (s, buf);
+ }
+ }
+ else if (is_integral)
{
if (**mangled == 'm')
{
- string_appendn (tname, "-", 1);
+ string_appendn (s, "-", 1);
(*mangled)++;
}
while (isdigit (**mangled))
{
- string_appendn (tname, *mangled, 1);
+ string_appendn (s, *mangled, 1);
(*mangled)++;
}
}
@@ -996,28 +1145,30 @@ demangle_template (work, mangled, tname, trawname)
int val;
if (**mangled == 'm')
{
- string_appendn (tname, "-", 1);
+ string_appendn (s, "-", 1);
(*mangled)++;
}
- string_appendn (tname, "'", 1);
+ string_appendn (s, "'", 1);
val = consume_count(mangled);
if (val == 0)
{
success = 0;
+ if (!is_type)
+ string_delete (s);
break;
}
tmp[0] = (char)val;
tmp[1] = '\0';
- string_appendn (tname, &tmp[0], 1);
- string_appendn (tname, "'", 1);
+ string_appendn (s, &tmp[0], 1);
+ string_appendn (s, "'", 1);
}
else if (is_bool)
{
int val = consume_count (mangled);
if (val == 0)
- string_appendn (tname, "false", 5);
+ string_appendn (s, "false", 5);
else if (val == 1)
- string_appendn (tname, "true", 4);
+ string_appendn (s, "true", 4);
else
success = 0;
}
@@ -1025,31 +1176,31 @@ demangle_template (work, mangled, tname, trawname)
{
if (**mangled == 'm')
{
- string_appendn (tname, "-", 1);
+ string_appendn (s, "-", 1);
(*mangled)++;
}
while (isdigit (**mangled))
{
- string_appendn (tname, *mangled, 1);
+ string_appendn (s, *mangled, 1);
(*mangled)++;
}
if (**mangled == '.') /* fraction */
{
- string_appendn (tname, ".", 1);
+ string_appendn (s, ".", 1);
(*mangled)++;
while (isdigit (**mangled))
{
- string_appendn (tname, *mangled, 1);
+ string_appendn (s, *mangled, 1);
(*mangled)++;
}
}
if (**mangled == 'e') /* exponent */
{
- string_appendn (tname, "e", 1);
+ string_appendn (s, "e", 1);
(*mangled)++;
while (isdigit (**mangled))
{
- string_appendn (tname, *mangled, 1);
+ string_appendn (s, *mangled, 1);
(*mangled)++;
}
}
@@ -1060,34 +1211,53 @@ demangle_template (work, mangled, tname, trawname)
if (symbol_len == 0)
{
success = 0;
+ if (!is_type)
+ string_delete (s);
break;
}
if (symbol_len == 0)
- string_appendn (tname, "0", 1);
+ string_appendn (s, "0", 1);
else
{
char *p = xmalloc (symbol_len + 1), *q;
strncpy (p, *mangled, symbol_len);
p [symbol_len] = '\0';
q = cplus_demangle (p, work->options);
- string_appendn (tname, "&", 1);
+ string_appendn (s, "&", 1);
if (q)
{
- string_append (tname, q);
+ string_append (s, q);
free (q);
}
else
- string_append (tname, p);
+ string_append (s, p);
free (p);
}
*mangled += symbol_len;
}
+ if (!is_type)
+ {
+ int len = s->p - s->b;
+ work->tmpl_argvec[i] = xmalloc (len + 1);
+ memcpy (work->tmpl_argvec[i], s->b, len);
+ work->tmpl_argvec[i][len] = '\0';
+
+ string_appends (tname, s);
+ string_delete (s);
+ }
}
need_comma = 1;
}
- if (tname->p[-1] == '>')
- string_append (tname, " ");
- string_append (tname, ">");
+ if (is_java_array)
+ {
+ string_append (tname, "[]");
+ }
+ else
+ {
+ if (tname->p[-1] == '>')
+ string_append (tname, " ");
+ string_append (tname, ">");
+ }
/*
if (work -> static_type)
@@ -1242,7 +1412,7 @@ demangle_class (work, mangled, declp)
work -> constructor -= 1;
}
}
- string_prepend (declp, "::");
+ string_prepend (declp, (work -> options & DMGL_JAVA) ? "." : "::");
string_prepends (declp, &class_name);
success = 1;
}
@@ -1513,7 +1683,7 @@ gnu_special (work, mangled, declp)
success = demangle_qualified (work, mangled, declp, 0, 1);
break;
case 't':
- success = demangle_template (work, mangled, declp, 0);
+ success = demangle_template (work, mangled, declp, 0, 1);
break;
default:
if (isdigit(*mangled[0]))
@@ -1532,7 +1702,8 @@ gnu_special (work, mangled, declp)
{
if (p != NULL)
{
- string_append (declp, "::");
+ string_append (declp,
+ (work -> options & DMGL_JAVA) ? "." : "::");
(*mangled)++;
}
}
@@ -1557,7 +1728,7 @@ gnu_special (work, mangled, declp)
success = demangle_qualified (work, mangled, declp, 0, 1);
break;
case 't':
- success = demangle_template (work, mangled, declp, 0);
+ success = demangle_template (work, mangled, declp, 0, 1);
break;
default:
n = consume_count (mangled);
@@ -1569,7 +1740,7 @@ gnu_special (work, mangled, declp)
/* Consumed everything up to the cplus_marker, append the
variable name. */
(*mangled)++;
- string_append (declp, "::");
+ string_append (declp, (work -> options & DMGL_JAVA) ? "." : "::");
n = strlen (*mangled);
string_appendn (declp, *mangled, n);
(*mangled) += n;
@@ -1609,7 +1780,7 @@ gnu_special (work, mangled, declp)
success = demangle_qualified (work, mangled, declp, 0, 1);
break;
case 't':
- success = demangle_template (work, mangled, declp, 0);
+ success = demangle_template (work, mangled, declp, 0, 1);
break;
default:
success = demangle_fund_type (work, mangled, declp);
@@ -1811,7 +1982,12 @@ demangle_qualified (work, mangled, result, isfuncname, append)
*mangled = *mangled + 1;
if (*mangled[0] == 't')
{
- success = demangle_template(work, mangled, &temp, 0);
+ success = demangle_template(work, mangled, &temp, 0, 1);
+ if (!success) break;
+ }
+ else if (*mangled[0] == 'X')
+ {
+ success = do_type (work, mangled, &temp);
if (!success) break;
}
else
@@ -1828,7 +2004,7 @@ demangle_qualified (work, mangled, result, isfuncname, append)
}
if (qualifiers > 0)
{
- string_appendn (&temp, "::", 2);
+ string_append (&temp, (work -> options & DMGL_JAVA) ? "." : "::");
}
}
@@ -1839,7 +2015,7 @@ demangle_qualified (work, mangled, result, isfuncname, append)
if (isfuncname && (work->constructor & 1 || work->destructor & 1))
{
- string_appendn (&temp, "::", 2);
+ string_append (&temp, (work -> options & DMGL_JAVA) ? "." : "::");
if (work -> destructor & 1)
{
string_append (&temp, "~");
@@ -1858,7 +2034,7 @@ demangle_qualified (work, mangled, result, isfuncname, append)
{
if (!STRING_EMPTY (result))
{
- string_appendn (&temp, "::", 2);
+ string_append (&temp, (work -> options & DMGL_JAVA) ? "." : "::");
}
string_prepends (result, &temp);
}
@@ -1951,7 +2127,8 @@ do_type (work, mangled, result)
case 'P':
case 'p':
(*mangled)++;
- string_prepend (&decl, "*");
+ if (! (work -> options & DMGL_JAVA))
+ string_prepend (&decl, "*");
break;
/* A reference type */
@@ -2033,7 +2210,7 @@ do_type (work, mangled, result)
}
string_append (&decl, ")");
- string_prepend (&decl, "::");
+ string_prepend (&decl, (work -> options & DMGL_JAVA) ? "." : "::");
if (isdigit (**mangled))
{
n = consume_count (mangled);
@@ -2049,7 +2226,7 @@ do_type (work, mangled, result)
{
string temp;
string_init (&temp);
- success = demangle_template (work, mangled, &temp, NULL);
+ success = demangle_template (work, mangled, &temp, NULL, 1);
if (success)
{
string_prependn (&decl, temp.b, temp.p - temp.b);
@@ -2137,6 +2314,37 @@ do_type (work, mangled, result)
success = demangle_qualified (work, mangled, result, 0, 1);
break;
+ case 'X':
+ case 'Y':
+ /* A template parm. We substitute the corresponding argument. */
+ {
+ int idx;
+ int lvl;
+
+ (*mangled)++;
+ idx = consume_count_with_underscores (mangled);
+
+ if (idx == -1
+ || (work->tmpl_argvec && idx >= work->ntmpl_args)
+ || consume_count_with_underscores (mangled) == -1)
+ {
+ success = 0;
+ break;
+ }
+
+ if (work->tmpl_argvec)
+ string_append (result, work->tmpl_argvec[idx]);
+ else
+ {
+ char buf[10];
+ sprintf(buf, "T%d", idx);
+ string_append (result, buf);
+ }
+
+ success = 1;
+ }
+ break;
+
default:
success = demangle_fund_type (work, mangled, result);
break;
@@ -2215,7 +2423,7 @@ demangle_fund_type (work, mangled, result)
case 'J':
(*mangled)++;
APPEND_BLANK (result);
- string_append (result, "complex");
+ string_append (result, "__complex");
break;
default:
done = 1;
@@ -2311,7 +2519,7 @@ demangle_fund_type (work, mangled, result)
}
break;
case 't':
- success = demangle_template(work,mangled, result, 0);
+ success = demangle_template(work,mangled, result, 0, 1);
break;
default:
success = 0;
@@ -2866,13 +3074,23 @@ string_prependn (p, s, n)
#ifdef MAIN
+#include "getopt.h"
+
+static char *program_name;
+static char *program_version = VERSION;
+static int flags = DMGL_PARAMS | DMGL_ANSI;
+
+static void demangle_it PARAMS ((char *));
+static void usage PARAMS ((FILE *, int));
+static void fatal PARAMS ((char *));
+
static void
demangle_it (mangled_name)
char *mangled_name;
{
char *result;
- result = cplus_demangle (mangled_name, DMGL_PARAMS | DMGL_ANSI);
+ result = cplus_demangle (mangled_name, flags);
if (result == NULL)
{
printf ("%s\n", mangled_name);
@@ -2884,11 +3102,6 @@ demangle_it (mangled_name)
}
}
-#include "getopt.h"
-
-static char *program_name;
-static char *program_version = VERSION;
-
static void
usage (stream, status)
FILE *stream;
@@ -2914,11 +3127,21 @@ static struct option long_options[] = {
{"strip-underscores", no_argument, 0, '_'},
{"format", required_argument, 0, 's'},
{"help", no_argument, 0, 'h'},
+ {"java", no_argument, 0, 'j'},
{"no-strip-underscores", no_argument, 0, 'n'},
{"version", no_argument, 0, 'v'},
{0, no_argument, 0, 0}
};
+/* More 'friendly' abort that prints the line and file.
+ config.h can #define abort fancy_abort if you like that sort of thing. */
+
+void
+fancy_abort ()
+{
+ fatal ("Internal gcc abort.");
+}
+
int
main (argc, argv)
int argc;
@@ -2931,7 +3154,7 @@ main (argc, argv)
strip_underscore = prepends_underscore;
- while ((c = getopt_long (argc, argv, "_ns:", long_options, (int *) 0)) != EOF)
+ while ((c = getopt_long (argc, argv, "_ns:j", long_options, (int *) 0)) != EOF)
{
switch (c)
{
@@ -2949,6 +3172,9 @@ main (argc, argv)
case '_':
strip_underscore = 1;
break;
+ case 'j':
+ flags |= DMGL_JAVA;
+ break;
case 's':
if (strcmp (optarg, "gnu") == 0)
{
@@ -3007,8 +3233,7 @@ main (argc, argv)
mbuffer[i] = 0;
- result = cplus_demangle (mbuffer + skip_first,
- DMGL_PARAMS | DMGL_ANSI);
+ result = cplus_demangle (mbuffer + skip_first, flags);
if (result)
{
if (mbuffer[0] == '.')
diff --git a/gcc/cpp.texi b/gcc/cpp.texi
index b8961db8cde..fb730e2ef23 100644
--- a/gcc/cpp.texi
+++ b/gcc/cpp.texi
@@ -881,6 +881,14 @@ This macro expands to the constant 1, to signify that this is ANSI
Standard C@. (Whether that is actually true depends on what C compiler
will operate on the output from the preprocessor.)
+On some hosts, system include files use a different convention, where
+@samp{__STDC__} is normally 0, but is 1 if the user specifies strict
+conformance to the C Standard. The preprocessor follows the host convention
+when processing system include files, but when processing user files it follows
+the usual GNU C convention.
+
+This macro is not defined if the @samp{-traditional} option is used.
+
@item __STDC_VERSION__
@findex __STDC_VERSION__
This macro expands to the C Standard's version number,
@@ -891,6 +899,8 @@ Like @samp{__STDC__}, whether this version number is accurate
for the entire implementation depends on what C compiler
will operate on the output from the preprocessor.
+This macro is not defined if the @samp{-traditional} option is used.
+
@item __GNUC__
@findex __GNUC__
This macro is defined if and only if this is GNU C@. This macro is
@@ -924,7 +934,7 @@ to test whether a header is compiled by a C compiler or a C++ compiler.
@item __STRICT_ANSI__
@findex __STRICT_ANSI__
-This macro is defined if and only if the @samp{-ansi} switch was
+GNU C defines this macro if and only if the @samp{-ansi} switch was
specified when GNU C was invoked. Its definition is the null string.
This macro exists primarily to direct certain GNU header files not to
define certain traditional Unix constructs which are incompatible with
@@ -946,48 +956,46 @@ the nesting level is zero.
@item __VERSION__
@findex __VERSION__
-This macro expands to a string which describes the version number of
+This macro expands to a string constant which describes the version number of
GNU C@. The string is normally a sequence of decimal numbers separated
-by periods, such as @samp{"2.6.0"}. The only reasonable use of this
-macro is to incorporate it into a string constant.
+by periods, such as @samp{"2.6.0"}.
@item __OPTIMIZE__
@findex __OPTIMIZE__
-This macro is defined in optimizing compilations. It causes certain
-GNU header files to define alternative macro definitions for some
-system library functions. It is unwise to refer to or test the
-definition of this macro unless you make very sure that programs will
-execute with the same effect regardless.
+GNU CC defines this macro in optimizing compilations. It causes certain
+GNU header files to define alternative macro definitions for some system
+library functions. You should not refer to or test the definition of
+this macro unless you make very sure that programs will execute with the
+same effect regardless.
@item __CHAR_UNSIGNED__
@findex __CHAR_UNSIGNED__
-This macro is defined if and only if the data type @code{char} is
-unsigned on the target machine. It exists to cause the standard
-header file @file{limits.h} to work correctly. It is bad practice
-to refer to this macro yourself; instead, refer to the standard
-macros defined in @file{limits.h}. The preprocessor uses
-this macro to determine whether or not to sign-extend large character
-constants written in octal; see @ref{#if Directive,,The @samp{#if} Directive}.
+GNU C defines this macro if and only if the data type @code{char} is
+unsigned on the target machine. It exists to cause the standard header
+file @file{limits.h} to work correctly. You should not refer to this
+macro yourself; instead, refer to the standard macros defined in
+@file{limits.h}. The preprocessor uses this macro to determine whether
+or not to sign-extend large character constants written in octal; see
+@ref{#if Directive,,The @samp{#if} Directive}.
@item __REGISTER_PREFIX__
@findex __REGISTER_PREFIX__
-This macro expands to a string describing the prefix applied to cpu
-registers in assembler code. It can be used to write assembler code
-that is usable in multiple environments. For example, in the
-@samp{m68k-aout} environment it expands to the string @samp{""},
-but in the @samp{m68k-coff} environment it expands to the string
-@samp{"%"}.
+This macro expands to a string (not a string constant) describing the
+prefix applied to CPU registers in assembler code. You can use it to
+write assembler code that is usable in multiple environments. For
+example, in the @samp{m68k-aout} environment it expands to the null
+string, but in the @samp{m68k-coff} environment it expands to the string
+@samp{%}.
@item __USER_LABEL_PREFIX__
@findex __USER_LABEL_PREFIX__
-This macro expands to a string describing the prefix applied to user
-generated labels in assembler code. It can be used to write assembler
-code that is usable in multiple environments. For example, in the
-@samp{m68k-aout} environment it expands to the string @samp{"_"}, but in
-the @samp{m68k-coff} environment it expands to the string @samp{""}.
-This does not work with the @samp{-mno-underscores} option that the
-i386 OSF/rose and m88k targets provide nor with the @samp{-mcall*} options
-of the rs6000 System V Release 4 target.
+Similar to @code{__REGISTER_PREFIX__}, but describes the prefix applied
+to user generated labels in assembler code. For example, in the
+@samp{m68k-aout} environment it expands to the string @samp{_}, but in
+the @samp{m68k-coff} environment it expands to the null string. This
+does not work with the @samp{-mno-underscores} option that the i386
+OSF/rose and m88k targets provide nor with the @samp{-mcall*} options of
+the rs6000 System V Release 4 target.
@end table
@node Nonstandard Predefined,, Standard Predefined, Predefined
@@ -2677,7 +2685,16 @@ Only the directories you have specified with @samp{-I} options
@findex -nostdinc++
Do not search for header files in the C++-specific standard directories,
but do still search the other standard directories.
-(This option is used when building libg++.)
+(This option is used when building the C++ library.)
+
+@item -remap
+@findex -remap
+When searching for a header file in a directory, remap file names if a
+file named @file{header.gcc} exists in that directory. This can be used
+to work around limitations of file systems with file name restrictions.
+The @file{header.gcc} file should contain a series of lines with two
+tokens on each line: the first token is the name to map, and the second
+token is the actual name to use.
@item -D @var{name}
@findex -D
@@ -2733,6 +2750,10 @@ predefined macros, and it outputs @emph{both} the @samp{#define}
directives and the result of preprocessing. Both kinds of output go to
the standard output file.
+@item -dI
+@findex -dI
+Output @samp{#include} directives in addition to the result of preprocessing.
+
@item -M [-MG]
@findex -M
Instead of outputting the result of preprocessing, output a rule
diff --git a/gcc/cppexp.c b/gcc/cppexp.c
index e4a0dcd5bff..98ad8787877 100644
--- a/gcc/cppexp.c
+++ b/gcc/cppexp.c
@@ -1,5 +1,5 @@
/* Parse C expressions for CCCP.
- Copyright (C) 1987, 1992, 1994, 1995, 1997 Free Software Foundation.
+ Copyright (C) 1987, 1992, 1994, 1995, 1997, 1998 Free Software Foundation.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -26,15 +26,20 @@ Written by Per Bothner 1994. */
#include "config.h"
#include "cpplib.h"
+#include "gansidecl.h"
extern char *xmalloc PARAMS ((unsigned));
-extern char *xrealloc PARAMS ((char *, unsigned));
+extern char *xrealloc PARAMS ((void *, unsigned));
#ifdef MULTIBYTE_CHARS
#include <stdlib.h>
#include <locale.h>
#endif
+#if HAVE_LIMITS_H
+# include <limits.h>
+#endif
+
#include <stdio.h>
/* This is used for communicating lists of keywords with cccp.c. */
@@ -126,16 +131,34 @@ static long right_shift ();
#define SKIP_OPERAND 8
/*#define UNSIGNEDP 16*/
-#ifndef HOST_BITS_PER_WIDE_INT
+/* Find the largest host integer type and set its size and type.
+ Watch out: on some crazy hosts `long' is shorter than `int'. */
+
+#ifndef HOST_WIDE_INT
+# if HAVE_INTTYPES_H
+# include <inttypes.h>
+# define HOST_WIDE_INT intmax_t
+# else
+# if (HOST_BITS_PER_LONG <= HOST_BITS_PER_INT \
+ && HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_INT)
+# define HOST_WIDE_INT int
+# else
+# if (HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_LONG \
+ || ! (defined LONG_LONG_MAX || defined LLONG_MAX))
+# define HOST_WIDE_INT long
+# else
+# define HOST_WIDE_INT long long
+# endif
+# endif
+# endif
+#endif
-#if HOST_BITS_PER_LONG > HOST_BITS_PER_INT
-#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONG
-#define HOST_WIDE_INT long
-#else
-#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_INT
-#define HOST_WIDE_INT int
+#ifndef CHAR_BIT
+#define CHAR_BIT 8
#endif
+#ifndef HOST_BITS_PER_WIDE_INT
+#define HOST_BITS_PER_WIDE_INT (CHAR_BIT * sizeof (HOST_WIDE_INT))
#endif
struct operation {
@@ -367,7 +390,7 @@ cpp_lex (pfile, skip_evaluation)
{
if (c == '\\')
{
- c = cpp_parse_escape (pfile, &ptr);
+ c = cpp_parse_escape (pfile, (char **) &ptr);
if (width < HOST_BITS_PER_INT
&& (unsigned) c >= (1 << width))
cpp_pedwarn (pfile,
@@ -406,7 +429,7 @@ cpp_lex (pfile, skip_evaluation)
{
int num_bits = num_chars * width;
- if (cpp_lookup (pfile, "__CHAR_UNSIGNED__",
+ if (cpp_lookup (pfile, (U_CHAR *)"__CHAR_UNSIGNED__",
sizeof ("__CHAR_UNSIGNED__")-1, -1)
|| ((result >> (num_bits - 1)) & 1) == 0)
op.value
diff --git a/gcc/cpplib.c b/gcc/cpplib.c
index 50ef8caae34..48756018a7a 100644
--- a/gcc/cpplib.c
+++ b/gcc/cpplib.c
@@ -1,5 +1,5 @@
/* CPP Library.
- Copyright (C) 1986, 87, 89, 92-6, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1986, 87, 89, 92-97, 1998 Free Software Foundation, Inc.
Contributed by Per Bothner, 1994-95.
Based on CCCP program by Paul Rubin, June 1986
Adapted to ANSI C, Richard Stallman, Jan 1987
@@ -16,75 +16,81 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
- In other words, you are welcome to use, share and improve this program.
- You are forbidden to forbid anyone else to use, share and improve
- what you give them. Help stamp out software-hoarding! */
-
-#ifdef EMACS
-#define NO_SHORTNAMES
-#include "../src/config.h"
-#ifdef open
-#undef open
-#undef read
-#undef write
-#endif /* open */
-#endif /* EMACS */
-
-/* The macro EMACS is defined when cpp is distributed as part of Emacs,
- for the sake of machines with limited C compilers. */
-#ifndef EMACS
-#include "config.h"
-#endif /* not EMACS */
-
-#ifndef STANDARD_INCLUDE_DIR
-#define STANDARD_INCLUDE_DIR "/usr/include"
-#endif
-
-#if 0 /* We can't get ptrdiff_t, so I arranged not to need PTR_INT_TYPE. */
-#ifdef __STDC__
-#define PTR_INT_TYPE ptrdiff_t
-#else
-#define PTR_INT_TYPE long
-#endif
-#endif /* 0 */
+Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include "cpplib.h"
-#include "cpphash.h"
+#include "config.h"
#ifndef STDC_VALUE
#define STDC_VALUE 1
#endif
-/* By default, colon separates directories in a path. */
-#ifndef PATH_SEPARATOR
-#define PATH_SEPARATOR ':'
-#endif
-
#include <ctype.h>
#include <stdio.h>
#include <signal.h>
-#ifdef __STDC__
+
+#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
-#ifndef VMS
-#ifndef USG
-#include <sys/time.h> /* for __DATE__ and __TIME__ */
-#include <sys/resource.h>
+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+#endif
+#endif
+
+#ifdef HAVE_SYS_TIMES_H
#include <sys/times.h>
-#include <time.h>
-#include <fcntl.h>
-#endif /* USG */
-#endif /* not VMS */
+#endif
+
+#ifdef HAVE_SYS_RESOURCE_H
+# include <sys/resource.h>
+#endif
+
+#ifdef HAVE_FCNTL_H
+# include <fcntl.h>
+#endif
+
+#if HAVE_LIMITS_H
+# include <limits.h>
+#endif
+
+#ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+
+#ifdef HAVE_STRING_H
+# include <string.h>
+# else
+# ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#endif
/* This defines "errno" properly for VMS, and gives us EACCES. */
#include <errno.h>
+#include "cpplib.h"
+#include "cpphash.h"
+#include "gansidecl.h"
+
+#ifdef NEED_DECLARATION_INDEX
extern char *index ();
+#endif
+
+#ifdef NEED_DECLARATION_RINDEX
extern char *rindex ();
+#endif
+
+#ifdef NEED_DECLARATION_GETENV
+extern char *getenv ();
+#endif
+
+extern char *update_path ();
#ifndef O_RDONLY
#define O_RDONLY 0
@@ -95,18 +101,26 @@ extern char *rindex ();
#define MIN(X,Y) ((X) < (Y) ? (X) : (Y))
#define MAX(X,Y) ((X) > (Y) ? (X) : (Y))
-/* Find the largest host integer type and set its size and type. */
-
-#ifndef HOST_BITS_PER_WIDE_INT
-
-#if HOST_BITS_PER_LONG > HOST_BITS_PER_INT
-#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONG
-#define HOST_WIDE_INT long
-#else
-#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_INT
-#define HOST_WIDE_INT int
-#endif
-
+/* Find the largest host integer type and set its size and type.
+ Watch out: on some crazy hosts `long' is shorter than `int'. */
+
+#ifndef HOST_WIDE_INT
+# if HAVE_INTTYPES_H
+# include <inttypes.h>
+# define HOST_WIDE_INT intmax_t
+# else
+# if (HOST_BITS_PER_LONG <= HOST_BITS_PER_INT \
+ && HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_INT)
+# define HOST_WIDE_INT int
+# else
+# if (HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_LONG \
+ || ! (defined LONG_LONG_MAX || defined LLONG_MAX))
+# define HOST_WIDE_INT long
+# else
+# define HOST_WIDE_INT long long
+# endif
+# endif
+# endif
#endif
#ifndef S_ISREG
@@ -117,24 +131,14 @@ extern char *rindex ();
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
#endif
-/* Define a generic NULL if one hasn't already been defined. */
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-#ifndef GENERIC_PTR
-#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
-#define GENERIC_PTR void *
-#else
-#define GENERIC_PTR char *
-#endif
+/* By default, colon separates directories in a path. */
+#ifndef PATH_SEPARATOR
+#define PATH_SEPARATOR ':'
#endif
-#ifndef NULL_PTR
-#define NULL_PTR ((GENERIC_PTR) 0)
+#ifndef STANDARD_INCLUDE_DIR
+#define STANDARD_INCLUDE_DIR "/usr/include"
#endif
-
#ifndef INCLUDE_LEN_FUDGE
#define INCLUDE_LEN_FUDGE 0
#endif
@@ -242,43 +246,41 @@ struct cpp_pending {
/* Forward declarations. */
-extern char *xmalloc ();
+char *xmalloc ();
+void cpp_fatal ();
+void cpp_file_line_for_message PARAMS ((cpp_reader *, char *, int, int));
+void cpp_hash_cleanup PARAMS ((cpp_reader *));
+void cpp_message ();
+void cpp_print_containing_files PARAMS ((cpp_reader *));
static void add_import ();
static void append_include_chain ();
-static void make_undef ();
static void make_assertion ();
static void path_include ();
static void initialize_builtins ();
static void initialize_char_syntax ();
-static void dump_arg_n ();
-static void dump_defn_1 ();
extern void delete_macro ();
+#if 0
static void trigraph_pcp ();
+#endif
static int finclude ();
static void validate_else ();
static int comp_def_part ();
#ifdef abort
extern void fancy_abort ();
#endif
-static void pipe_closed ();
-static void print_containing_files ();
static int lookup_import ();
static int redundant_include_p ();
static is_system_include ();
static struct file_name_map *read_name_map ();
static char *read_filename_string ();
static int open_include_file ();
-static int check_preconditions ();
-static void pcfinclude ();
-static void pcstring_used ();
static int check_macro_name ();
static int compare_defs ();
static int compare_token_lists ();
static HOST_WIDE_INT eval_if_expression ();
static int change_newlines ();
extern int hashf ();
-static int file_size_and_mode ();
static struct arglist *read_token_list ();
static void free_token_list ();
static int safe_read ();
@@ -299,7 +301,6 @@ enum file_change_code {same_file, enter_file, leave_file};
extern HOST_WIDE_INT cpp_parse_expr PARAMS ((cpp_reader *));
-extern char *getenv ();
extern FILE *fdopen ();
extern char *version_string;
extern struct tm *localtime ();
@@ -352,6 +353,7 @@ struct file_name_list
/* The */
static struct default_include {
char *fname; /* The name of the directory. */
+ char *component; /* The component containing the directory */
int cplusplus; /* Only look here if we're compiling C++. */
int cxx_aware; /* Includes in this directory don't need to
be wrapped in extern "C" when compiling
@@ -362,40 +364,43 @@ static struct default_include {
#else
= {
/* Pick up GNU C++ specific include files. */
- { GPLUSPLUS_INCLUDE_DIR, 1, 1 },
- { OLD_GPLUSPLUS_INCLUDE_DIR, 1, 1 },
+ { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 },
+ { OLD_GPLUSPLUS_INCLUDE_DIR, 0, 1, 1 },
#ifdef CROSS_COMPILE
/* This is the dir for fixincludes. Put it just before
the files that we fix. */
- { GCC_INCLUDE_DIR, 0, 0 },
+ { GCC_INCLUDE_DIR, "GCC", 0, 0 },
/* For cross-compilation, this dir name is generated
automatically in Makefile.in. */
- { CROSS_INCLUDE_DIR, 0, 0 },
+ { CROSS_INCLUDE_DIR, "GCC",0, 0 },
#ifdef TOOL_INCLUDE_DIR
/* This is another place that the target system's headers might be. */
- { TOOL_INCLUDE_DIR, 0, 1 },
+ { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1 },
#endif
#else /* not CROSS_COMPILE */
#ifdef LOCAL_INCLUDE_DIR
/* This should be /usr/local/include and should come before
the fixincludes-fixed header files. */
- { LOCAL_INCLUDE_DIR, 0, 1 },
+ { LOCAL_INCLUDE_DIR, 0, 0, 1 },
#endif
#ifdef TOOL_INCLUDE_DIR
/* This is here ahead of GCC_INCLUDE_DIR because assert.h goes here.
Likewise, behind LOCAL_INCLUDE_DIR, where glibc puts its assert.h. */
- { TOOL_INCLUDE_DIR, 0, 1 },
+ { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1 },
#endif
/* This is the dir for fixincludes. Put it just before
the files that we fix. */
- { GCC_INCLUDE_DIR, 0, 0 },
+ { GCC_INCLUDE_DIR, "GCC", 0, 0 },
/* Some systems have an extra dir of include files. */
#ifdef SYSTEM_INCLUDE_DIR
- { SYSTEM_INCLUDE_DIR, 0, 0 },
+ { SYSTEM_INCLUDE_DIR, 0, 0, 0 },
+#endif
+#ifndef STANDARD_INCLUDE_COMPONENT
+#define STANDARD_INCLUDE_COMPONENT 0
#endif
- { STANDARD_INCLUDE_DIR, 0, 0 },
+ { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0 },
#endif /* not CROSS_COMPILE */
- { 0, 0, 0 }
+ { 0, 0, 0, 0 }
};
#endif /* no INCLUDE_DEFAULTS */
@@ -407,15 +412,16 @@ struct directive {
char *name; /* Name of directive */
enum node_type type; /* Code which describes which directive. */
char command_reads_line; /* One if rest of line is read by func. */
- char traditional_comments; /* Nonzero: keep comments if -traditional. */
- char pass_thru; /* Copy preprocessed directive to output file.*/
};
+#define IS_INCLUDE_DIRECTIVE_TYPE(t) \
+((int) T_INCLUDE <= (int) (t) && (int) (t) <= (int) T_IMPORT)
+
/* Here is the actual list of #-directives, most-often-used first.
The initialize_builtins function assumes #define is the very first. */
static struct directive directive_table[] = {
- { 6, do_define, "define", T_DEFINE, 0, 1},
+ { 6, do_define, "define", T_DEFINE},
{ 5, do_xifdef, "ifdef", T_IFDEF, 1},
{ 6, do_xifdef, "ifndef", T_IFNDEF, 1},
{ 7, do_include, "include", T_INCLUDE, 1},
@@ -428,9 +434,9 @@ static struct directive directive_table[] = {
{ 5, do_undef, "undef", T_UNDEF},
{ 5, do_error, "error", T_ERROR},
{ 7, do_warning, "warning", T_WARNING},
- { 6, do_pragma, "pragma", T_PRAGMA, 0, 0, 1},
+ { 6, do_pragma, "pragma", T_PRAGMA},
{ 4, do_line, "line", T_LINE, 1},
- { 5, do_ident, "ident", T_IDENT, 1, 0, 1},
+ { 5, do_ident, "ident", T_IDENT, 1},
#ifdef SCCS_DIRECTIVE
{ 4, do_sccs, "sccs", T_SCCS},
#endif
@@ -510,7 +516,7 @@ quote_string (pfile, src)
CPP_PUTC_Q (pfile, c);
else
{
- sprintf (CPP_PWRITTEN (pfile), "\\%03o", c);
+ sprintf ((char *)CPP_PWRITTEN (pfile), "\\%03o", c);
CPP_ADJUST_WRITTEN (pfile, 4);
}
break;
@@ -794,6 +800,7 @@ cpp_options_init (opts)
opts->print_include_names = 0;
opts->dump_macros = dump_none;
opts->no_output = 0;
+ opts->remap = 0;
opts->cplusplus = 0;
opts->cplusplus_comments = 0;
@@ -981,7 +988,7 @@ copy_rest_of_line (pfile)
break;
case '/':
nextc = PEEKC();
- if (nextc == '*' || (opts->cplusplus_comments && nextc == '*'))
+ if (nextc == '*' || (opts->cplusplus_comments && nextc == '/'))
goto scan_directive_token;
break;
case '\f':
@@ -1091,7 +1098,7 @@ handle_directive (pfile)
{
/* Nonzero means do not delete comments within the directive.
#define needs this when -traditional. */
- int comments = CPP_TRADITIONAL (pfile) && kt->traditional_comments;
+ int comments = CPP_TRADITIONAL (pfile) && kt->type == T_DEFINE;
int save_put_out_comments = CPP_OPTIONS (pfile)->put_out_comments;
CPP_OPTIONS (pfile)->put_out_comments = comments;
after_ident = CPP_WRITTEN (pfile);
@@ -1099,37 +1106,39 @@ handle_directive (pfile)
CPP_OPTIONS (pfile)->put_out_comments = save_put_out_comments;
}
- /* For #pragma and #define, we may want to pass through the directive.
+ /* We may want to pass through #define, #pragma, and #include.
Other directives may create output, but we don't want the directive
- itself out, so we pop it now. For example #include may write a #line
- command (see comment in do_include), and conditionals may emit
+ itself out, so we pop it now. For example conditionals may emit
#failed ... #endfailed stuff. But note that popping the buffer
means the parameters to kt->func may point after pfile->limit
so these parameters are invalid as soon as something gets appended
to the token_buffer. */
line_end = CPP_PWRITTEN (pfile);
- if (!kt->pass_thru && kt->type != T_DEFINE)
+ if (! (kt->type == T_DEFINE
+ || kt->type == T_PRAGMA
+ || (IS_INCLUDE_DIRECTIVE_TYPE (kt->type)
+ && CPP_OPTIONS (pfile)->dump_includes)))
CPP_SET_WRITTEN (pfile, old_written);
(*kt->func) (pfile, kt, pfile->token_buffer + after_ident, line_end);
- if (kt->pass_thru
- || (kt->type == T_DEFINE
- && CPP_OPTIONS (pfile)->dump_macros == dump_definitions))
- {
- /* Just leave the entire #define in the output stack. */
- }
- else if (kt->type == T_DEFINE
- && CPP_OPTIONS (pfile)->dump_macros == dump_names)
+
+ if (kt->type == T_DEFINE)
{
- U_CHAR *p = pfile->token_buffer + old_written + 7; /* Skip "#define". */
- SKIP_WHITE_SPACE (p);
- while (is_idchar[*p]) p++;
- pfile->limit = p;
- CPP_PUTC (pfile, '\n');
+ if (CPP_OPTIONS (pfile)->dump_macros == dump_names)
+ {
+ /* Skip "#define". */
+ U_CHAR *p = pfile->token_buffer + old_written + 7;
+
+ SKIP_WHITE_SPACE (p);
+ while (is_idchar[*p]) p++;
+ pfile->limit = p;
+ CPP_PUTC (pfile, '\n');
+ }
+ else if (CPP_OPTIONS (pfile)->dump_macros != dump_definitions)
+ CPP_SET_WRITTEN (pfile, old_written);
}
- else if (kt->type == T_DEFINE)
- CPP_SET_WRITTEN (pfile, old_written);
+
done_a_directive:
return 1;
@@ -1688,7 +1697,8 @@ check_macro_name (pfile, symname, usage)
/* Return zero if two DEFINITIONs are isomorphic. */
static int
-compare_defs (d1, d2)
+compare_defs (pfile, d1, d2)
+ cpp_reader *pfile;
DEFINITION *d1, *d2;
{
register struct reflist *a1, *a2;
@@ -1698,7 +1708,8 @@ compare_defs (d1, d2)
if (d1->nargs != d2->nargs)
return 1;
- if (strcmp ((char *)d1->args.argnames, (char *)d2->args.argnames))
+ if (CPP_PEDANTIC (pfile)
+ && strcmp ((char *)d1->args.argnames, (char *)d2->args.argnames))
return 1;
for (a1 = d1->pattern, a2 = d2->pattern; a1 && a2;
a1 = a1->next, a2 = a2->next) {
@@ -1794,7 +1805,7 @@ do_define (pfile, keyword, buf, limit)
ok = 1;
/* Redefining a macro is ok if the definitions are the same. */
else if (hp->type == T_MACRO)
- ok = ! compare_defs (mdef.defn, hp->value.defn);
+ ok = ! compare_defs (pfile, mdef.defn, hp->value.defn);
/* Redefining a constant is ok with -D. */
else if (hp->type == T_CONST)
ok = ! CPP_OPTIONS (pfile)->done_initializing;
@@ -2133,7 +2144,7 @@ output_line_command (pfile, conditional, file_change)
CPP_PUTS_Q (pfile, sharp_line, sizeof(sharp_line)-1);
}
- sprintf (CPP_PWRITTEN (pfile), "%d ", line);
+ sprintf ((char *) CPP_PWRITTEN (pfile), "%ld ", line);
CPP_ADJUST_WRITTEN (pfile, strlen (CPP_PWRITTEN (pfile)));
quote_string (pfile, ip->nominal_fname);
@@ -2377,6 +2388,12 @@ special_symbol (hp, pfile)
case T_CONST:
buf = (char *) alloca (4 * sizeof (int));
sprintf (buf, "%d", hp->value.ival);
+#ifdef STDC_0_IN_SYSTEM_HEADERS
+ if (ip->system_header_p
+ && hp->length == 8 && bcmp (hp->name, "__STDC__", 8) == 0
+ && ! cpp_lookup (pfile, (U_CHAR *) "__STRICT_ANSI__", -1, -1))
+ strcpy (buf, "0");
+#endif
#if 0
if (pcp_inside_if && pcp_outfile)
/* Output a precondition for this macro use */
@@ -2391,7 +2408,7 @@ special_symbol (hp, pfile)
adjust_position (CPP_LINE_BASE (ip), ip->cur, &line, &col);
buf = (char *) alloca (10);
- sprintf (buf, "%d", line);
+ sprintf (buf, "%ld", line);
}
break;
@@ -2498,26 +2515,26 @@ static void
initialize_builtins (pfile)
cpp_reader *pfile;
{
- install ("__LINE__", -1, T_SPECLINE, 0, 0, -1);
- install ("__DATE__", -1, T_DATE, 0, 0, -1);
- install ("__FILE__", -1, T_FILE, 0, 0, -1);
- install ("__BASE_FILE__", -1, T_BASE_FILE, 0, 0, -1);
- install ("__INCLUDE_LEVEL__", -1, T_INCLUDE_LEVEL, 0, 0, -1);
- install ("__VERSION__", -1, T_VERSION, 0, 0, -1);
+ install ((U_CHAR *)"__LINE__", -1, T_SPECLINE, 0, 0, -1);
+ install ((U_CHAR *)"__DATE__", -1, T_DATE, 0, 0, -1);
+ install ((U_CHAR *)"__FILE__", -1, T_FILE, 0, 0, -1);
+ install ((U_CHAR *)"__BASE_FILE__", -1, T_BASE_FILE, 0, 0, -1);
+ install ((U_CHAR *)"__INCLUDE_LEVEL__", -1, T_INCLUDE_LEVEL, 0, 0, -1);
+ install ((U_CHAR *)"__VERSION__", -1, T_VERSION, 0, 0, -1);
#ifndef NO_BUILTIN_SIZE_TYPE
- install ("__SIZE_TYPE__", -1, T_SIZE_TYPE, 0, 0, -1);
+ install ((U_CHAR *)"__SIZE_TYPE__", -1, T_SIZE_TYPE, 0, 0, -1);
#endif
#ifndef NO_BUILTIN_PTRDIFF_TYPE
- install ("__PTRDIFF_TYPE__ ", -1, T_PTRDIFF_TYPE, 0, 0, -1);
+ install ((U_CHAR *)"__PTRDIFF_TYPE__ ", -1, T_PTRDIFF_TYPE, 0, 0, -1);
#endif
- install ("__WCHAR_TYPE__", -1, T_WCHAR_TYPE, 0, 0, -1);
- install ("__USER_LABEL_PREFIX__", -1, T_USER_LABEL_PREFIX_TYPE, 0, 0, -1);
- install ("__REGISTER_PREFIX__", -1, T_REGISTER_PREFIX_TYPE, 0, 0, -1);
- install ("__TIME__", -1, T_TIME, 0, 0, -1);
+ install ((U_CHAR *)"__WCHAR_TYPE__", -1, T_WCHAR_TYPE, 0, 0, -1);
+ install ((U_CHAR *)"__USER_LABEL_PREFIX__", -1, T_USER_LABEL_PREFIX_TYPE, 0, 0, -1);
+ install ((U_CHAR *)"__REGISTER_PREFIX__", -1, T_REGISTER_PREFIX_TYPE, 0, 0, -1);
+ install ((U_CHAR *)"__TIME__", -1, T_TIME, 0, 0, -1);
if (!CPP_TRADITIONAL (pfile))
- install ("__STDC__", -1, T_CONST, STDC_VALUE, 0, -1);
+ install ((U_CHAR *)"__STDC__", -1, T_CONST, STDC_VALUE, 0, -1);
if (CPP_OPTIONS (pfile)->objc)
- install ("__OBJC__", -1, T_CONST, 1, 0, -1);
+ install ((U_CHAR *)"__OBJC__", -1, T_CONST, 1, 0, -1);
/* This is supplied using a -D by the compiler driver
so that it is present only when truly compiling with GNU C. */
/* install ("__GNUC__", -1, T_CONST, 2, 0, -1); */
@@ -2809,7 +2826,7 @@ macroexpand (pfile, hp)
else
{
CPP_RESERVE (pfile, 4);
- sprintf (CPP_PWRITTEN (pfile), "\\%03o",
+ sprintf ((char *)CPP_PWRITTEN (pfile), "\\%03o",
(unsigned int) c);
CPP_ADJUST_WRITTEN (pfile, 4);
}
@@ -3728,7 +3745,7 @@ do_line (pfile, keyword)
/* The Newline at the end of this line remains to be processed.
To put the next line at the specified line number,
we must store a line number now that is one less. */
- new_lineno = atoi (pfile->token_buffer + old_written) - 1;
+ new_lineno = atoi ((char *)(pfile->token_buffer + old_written)) - 1;
CPP_SET_WRITTEN (pfile, old_written);
/* NEW_LINENO is one less than the actual line number here. */
@@ -3948,7 +3965,7 @@ do_once (pfile)
return 0;
}
-/* #ident has already been copied to the output file, so just ignore it. */
+/* Report program identification. */
static int
do_ident (pfile, keyword, buf, limit)
@@ -4136,7 +4153,7 @@ eval_if_expression (pfile, buf, length)
HOST_WIDE_INT value;
long old_written = CPP_WRITTEN (pfile);
- save_defined = install ("defined", -1, T_SPEC_DEFINED, 0, 0, -1);
+ save_defined = install ((U_CHAR *)"defined", -1, T_SPEC_DEFINED, 0, 0, -1);
pfile->pcp_inside_if = 1;
value = cpp_parse_expr (pfile);
@@ -4701,8 +4718,8 @@ cpp_get_token (pfile)
}
/* OK, now bring us back to the state we were in before we entered
- this branch. We need #line b/c the newline for the pragma
- could fuck things up. */
+ this branch. We need #line because the newline for the pragma
+ could mess things up. */
output_line_command (pfile, 0, same_file);
*(obp++) = ' '; /* just in case, if comments are copied thru */
*(obp++) = '/';
@@ -5496,65 +5513,68 @@ open_include_file (pfile, filename, searchptr)
char *filename;
struct file_name_list *searchptr;
{
- register struct file_name_map *map;
- register char *from;
- char *p, *dir;
-
- if (searchptr && ! searchptr->got_name_map)
+ if (CPP_OPTIONS (pfile)->remap)
{
- searchptr->name_map = read_name_map (pfile,
- searchptr->fname
- ? searchptr->fname : ".");
- searchptr->got_name_map = 1;
- }
+ register struct file_name_map *map;
+ register char *from;
+ char *p, *dir;
- /* First check the mapping for the directory we are using. */
- if (searchptr && searchptr->name_map)
- {
- from = filename;
- if (searchptr->fname)
- from += strlen (searchptr->fname) + 1;
- for (map = searchptr->name_map; map; map = map->map_next)
+ if (searchptr && ! searchptr->got_name_map)
{
- if (! strcmp (map->map_from, from))
+ searchptr->name_map = read_name_map (pfile,
+ searchptr->fname
+ ? searchptr->fname : ".");
+ searchptr->got_name_map = 1;
+ }
+
+ /* First check the mapping for the directory we are using. */
+ if (searchptr && searchptr->name_map)
+ {
+ from = filename;
+ if (searchptr->fname)
+ from += strlen (searchptr->fname) + 1;
+ for (map = searchptr->name_map; map; map = map->map_next)
{
- /* Found a match. */
- return open (map->map_to, O_RDONLY, 0666);
+ if (! strcmp (map->map_from, from))
+ {
+ /* Found a match. */
+ return open (map->map_to, O_RDONLY, 0666);
+ }
}
}
- }
- /* Try to find a mapping file for the particular directory we are
- looking in. Thus #include <sys/types.h> will look up sys/types.h
- in /usr/include/header.gcc and look up types.h in
- /usr/include/sys/header.gcc. */
- p = rindex (filename, '/');
- if (! p)
- p = filename;
- if (searchptr
- && searchptr->fname
- && strlen (searchptr->fname) == p - filename
- && ! strncmp (searchptr->fname, filename, p - filename))
- {
- /* FILENAME is in SEARCHPTR, which we've already checked. */
- return open (filename, O_RDONLY, 0666);
- }
+ /* Try to find a mapping file for the particular directory we are
+ looking in. Thus #include <sys/types.h> will look up sys/types.h
+ in /usr/include/header.gcc and look up types.h in
+ /usr/include/sys/header.gcc. */
+ p = rindex (filename, '/');
+ if (! p)
+ p = filename;
+ if (searchptr
+ && searchptr->fname
+ && strlen (searchptr->fname) == p - filename
+ && ! strncmp (searchptr->fname, filename, p - filename))
+ {
+ /* FILENAME is in SEARCHPTR, which we've already checked. */
+ return open (filename, O_RDONLY, 0666);
+ }
- if (p == filename)
- {
- dir = ".";
- from = filename;
- }
- else
- {
- dir = (char *) alloca (p - filename + 1);
- bcopy (filename, dir, p - filename);
- dir[p - filename] = '\0';
- from = p + 1;
+ if (p == filename)
+ {
+ dir = ".";
+ from = filename;
+ }
+ else
+ {
+ dir = (char *) alloca (p - filename + 1);
+ bcopy (filename, dir, p - filename);
+ dir[p - filename] = '\0';
+ from = p + 1;
+ }
+ for (map = read_name_map (pfile, dir); map; map = map->map_next)
+ if (! strcmp (map->map_from, from))
+ return open (map->map_to, O_RDONLY, 0666);
}
- for (map = read_name_map (pfile, dir); map; map = map->map_next)
- if (! strcmp (map->map_from, from))
- return open (map->map_to, O_RDONLY, 0666);
return open (filename, O_RDONLY, 0666);
}
@@ -5578,14 +5598,14 @@ finclude (pfile, f, fname, system_header_p, dirptr)
int system_header_p;
struct file_name_list *dirptr;
{
- int st_mode;
- long st_size;
+ struct stat st;
+ size_t st_size;
long i;
int length;
cpp_buffer *fp; /* For input stack frame */
int missing_newline = 0;
- if (file_size_and_mode (f, &st_mode, &st_size) < 0)
+ if (fstat (f, &st) < 0)
{
cpp_perror_with_name (pfile, fname);
close (f);
@@ -5604,7 +5624,13 @@ finclude (pfile, f, fname, system_header_p, dirptr)
fp->colno = 1;
fp->cleanup = file_cleanup;
- if (S_ISREG (st_mode)) {
+ if (S_ISREG (st.st_mode)) {
+ st_size = (size_t) st.st_size;
+ if (st_size != st.st_size || st_size + 2 < st_size) {
+ cpp_error (pfile, "file `%s' too large", fname);
+ close (f);
+ return 0;
+ }
fp->buf = (U_CHAR *) xmalloc (st_size + 2);
fp->alimit = fp->buf + st_size + 2;
fp->cur = fp->buf;
@@ -5615,7 +5641,7 @@ finclude (pfile, f, fname, system_header_p, dirptr)
fp->rlimit = fp->buf + length;
if (length < 0) goto nope;
}
- else if (S_ISDIR (st_mode)) {
+ else if (S_ISDIR (st.st_mode)) {
cpp_error (pfile, "directory `%s' specified in #include", fname);
close (f);
return 0;
@@ -5693,7 +5719,7 @@ finclude (pfile, f, fname, system_header_p, dirptr)
/* This is called after options have been processed.
* Check options for consistency, and setup for processing input
* from the file named FNAME. (Use standard input if FNAME==NULL.)
- * Return 1 on succes, 0 on failure.
+ * Return 1 on success, 0 on failure.
*/
int
@@ -5887,6 +5913,7 @@ cpp_start_read (pfile, fname)
nstore[endp-startp] = '\0';
include_defaults[num_dirs].fname = savestring (nstore);
+ include_defaults[num_dirs].component = 0;
include_defaults[num_dirs].cplusplus = opts->cplusplus;
include_defaults[num_dirs].cxx_aware = 1;
num_dirs++;
@@ -5953,7 +5980,7 @@ cpp_start_read (pfile, fname)
= (struct file_name_list *) xmalloc (sizeof (struct file_name_list));
new->control_macro = 0;
new->c_system_include_path = !p->cxx_aware;
- new->fname = p->fname;
+ new->fname = update_path (p->fname, p->component);
new->got_name_map = 0;
append_include_chain (pfile, new, new);
if (opts->first_system_include == 0)
@@ -6077,8 +6104,12 @@ cpp_start_read (pfile, fname)
deps_output (pfile, "-", ':');
else
{
- char *p, *q;
- int len;
+ char *p, *q, *r;
+ int len, x;
+ static char *known_suffixes[] = { ".c", ".C", ".s", ".S", ".m",
+ ".cc", ".cxx", ".cpp", ".cp",
+ ".c++", 0
+ };
/* Discard all directory prefixes from filename. */
if ((q = rindex (opts->in_fname, '/')) != NULL
@@ -6097,27 +6128,21 @@ cpp_start_read (pfile, fname)
/* Output P, but remove known suffixes. */
len = strlen (p);
q = p + len;
- if (len >= 2
- && p[len - 2] == '.'
- && index("cCsSm", p[len - 1]))
- q = p + (len - 2);
- else if (len >= 3
- && p[len - 3] == '.'
- && p[len - 2] == 'c'
- && p[len - 1] == 'c')
- q = p + (len - 3);
- else if (len >= 4
- && p[len - 4] == '.'
- && p[len - 3] == 'c'
- && p[len - 2] == 'x'
- && p[len - 1] == 'x')
- q = p + (len - 4);
- else if (len >= 4
- && p[len - 4] == '.'
- && p[len - 3] == 'c'
- && p[len - 2] == 'p'
- && p[len - 1] == 'p')
- q = p + (len - 4);
+ /* Point to the filename suffix. */
+ r = rindex (p, '.');
+ /* Compare against the known suffixes. */
+ x = 0;
+ while (known_suffixes[x] != 0)
+ {
+ if (strncmp (known_suffixes[x], r, q - r) == 0)
+ {
+ /* Make q point to the bit we're going to overwrite
+ with an object suffix. */
+ q = r;
+ break;
+ }
+ x++;
+ }
/* Supply our own suffix. */
#ifndef VMS
@@ -6575,6 +6600,9 @@ cpp_handle_options (pfile, argc, argv)
case 'D':
opts->dump_macros = dump_definitions;
break;
+ case 'I':
+ opts->dump_includes = 1;
+ break;
}
}
}
@@ -6719,6 +6747,11 @@ cpp_handle_options (pfile, argc, argv)
#endif
break;
+ case 'r':
+ if (!strcmp (argv[i], "-remap"))
+ opts->remap = 1;
+ break;
+
case 'u':
/* Sun compiler passes undocumented switch "-undef".
Let's assume it means to inhibit the predefined symbols. */
@@ -7179,23 +7212,6 @@ free_token_list (tokens)
}
}
-/* Get the file-mode and data size of the file open on FD
- and store them in *MODE_POINTER and *SIZE_POINTER. */
-
-static int
-file_size_and_mode (fd, mode_pointer, size_pointer)
- int fd;
- int *mode_pointer;
- long int *size_pointer;
-{
- struct stat sbuf;
-
- if (fstat (fd, &sbuf) < 0) return (-1);
- if (mode_pointer) *mode_pointer = sbuf.st_mode;
- if (size_pointer) *size_pointer = sbuf.st_size;
- return 0;
-}
-
/* Read LEN bytes at PTR from descriptor DESC, for file FILENAME,
retrying if necessary. If MAX_READ_LEN is defined, read at most
that bytes at a time. Return a negative value if an error occurs,
@@ -7483,11 +7499,7 @@ extern int errno;
#ifndef VMS
#ifndef HAVE_STRERROR
extern int sys_nerr;
-#if defined(bsd4_4)
-extern const char *const sys_errlist[];
-#else
extern char *sys_errlist[];
-#endif
#else /* HAVE_STRERROR */
char *strerror ();
#endif
@@ -7534,6 +7546,7 @@ cpp_error_from_errno (pfile, name)
cpp_reader *pfile;
char *name;
{
+ int e = errno;
int i;
cpp_buffer *ip = cpp_file_buffer (pfile);
@@ -7542,7 +7555,7 @@ cpp_error_from_errno (pfile, name)
if (ip != NULL)
cpp_file_line_for_message (pfile, ip->nominal_fname, ip->lineno, -1);
- cpp_message (pfile, 1, "%s: %s", name, my_strerror (errno));
+ cpp_message (pfile, 1, "%s: %s", name, my_strerror (e));
}
void
diff --git a/gcc/cpplib.h b/gcc/cpplib.h
index 7ba0a37b465..346ce44037d 100644
--- a/gcc/cpplib.h
+++ b/gcc/cpplib.h
@@ -69,7 +69,7 @@ enum cpp_token {
};
#ifndef PARAMS
-#ifdef __STDC
+#ifdef __STDC__
#define PARAMS(P) P
#else
#define PARAMS(P) ()
@@ -94,7 +94,7 @@ extern void parse_goto_mark PARAMS((struct parse_marker *, cpp_reader *));
extern void parse_move_mark PARAMS((struct parse_marker *, cpp_reader *));
extern int cpp_handle_options PARAMS ((cpp_reader *, int, char **));
-extern enum cpp_token cpp_get_token PARAMS ((struct parse_marker *));
+extern enum cpp_token cpp_get_token PARAMS ((cpp_reader *));
extern void cpp_skip_hspace PARAMS((cpp_reader *));
extern enum cpp_token cpp_get_non_space_token PARAMS ((cpp_reader *));
@@ -179,7 +179,7 @@ struct cpp_reader {
/* A buffer used for both for cpp_get_token's output, and also internally. */
unsigned char *token_buffer;
- /* Alocated size of token_buffer. CPP_RESERVE allocates space. */
+ /* Allocated size of token_buffer. CPP_RESERVE allocates space. */
int token_buffer_size;
/* End of the written part of token_buffer. */
unsigned char *limit;
@@ -410,6 +410,10 @@ struct cpp_options {
char no_output;
+ /* Nonzero means we should look for header.gcc files that remap file
+ names. */
+ char remap;
+
/* Nonzero means don't output line number information. */
char no_line_commands;
@@ -486,6 +490,10 @@ struct cpp_options {
where they are defined. */
int debug_output;
+ /* Nonzero means pass #include lines through to the output,
+ even if they are ifdefed out. */
+ int dump_includes;
+
/* Pending -D, -U and -A options, in reverse order. */
struct cpp_pending *pending;
diff --git a/gcc/cppmain.c b/gcc/cppmain.c
index 4f8d89ce3e0..83bbe94f7da 100644
--- a/gcc/cppmain.c
+++ b/gcc/cppmain.c
@@ -1,5 +1,5 @@
/* CPP main program, using CPP Library.
- Copyright (C) 1995 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1997 Free Software Foundation, Inc.
Written by Per Bothner, 1994-95.
This program is free software; you can redistribute it and/or modify it
@@ -20,13 +20,13 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
You are forbidden to forbid anyone else to use, share and improve
what you give them. Help stamp out software-hoarding! */
-#include "cpplib.h"
-#include <stdio.h>
-
#ifndef EMACS
#include "config.h"
#endif /* not EMACS */
+#include "cpplib.h"
+#include <stdio.h>
+
extern char *getenv ();
char *progname;
diff --git a/gcc/crtstuff.c b/gcc/crtstuff.c
index 2c682436069..0a5aedddd3d 100644
--- a/gcc/crtstuff.c
+++ b/gcc/crtstuff.c
@@ -1,6 +1,6 @@
/* Specialized bits of code needed to support construction and
destruction of file-scope objects in C++ code.
- Copyright (C) 1991, 1994, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1991, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
Contributed by Ron Guilmette (rfg@monkeys.com).
This file is part of GNU CC.
@@ -52,6 +52,9 @@ Boston, MA 02111-1307, USA. */
do not apply. */
#include "tm.h"
+#include "defaults.h"
+#include <stddef.h>
+#include "frame.h"
/* Provide default definitions for the pseudo-ops used to switch to the
.ctors and .dtors sections.
@@ -75,6 +78,9 @@ Boston, MA 02111-1307, USA. */
#ifndef DTORS_SECTION_ASM_OP
#define DTORS_SECTION_ASM_OP ".section\t.dtors,\"aw\""
#endif
+#if !defined (EH_FRAME_SECTION_ASM_OP) && defined (DWARF2_UNWIND_INFO) && defined(ASM_OUTPUT_SECTION_NAME)
+#define EH_FRAME_SECTION_ASM_OP ".section\t.eh_frame,\"aw\""
+#endif
#ifdef OBJECT_FORMAT_ELF
@@ -118,6 +124,7 @@ typedef void (*func_ptr) (void);
the list we left off processing, and we resume at that point,
should we be re-invoked. */
+static char __EH_FRAME_BEGIN__[];
static func_ptr __DTOR_LIST__[];
static void
__do_global_dtors_aux ()
@@ -128,6 +135,10 @@ __do_global_dtors_aux ()
p++;
(*(p-1)) ();
}
+
+#ifdef EH_FRAME_SECTION_ASM_OP
+ __deregister_frame_info (__EH_FRAME_BEGIN__);
+#endif
}
/* Stick a call to __do_global_dtors_aux into the .fini section. */
@@ -143,6 +154,30 @@ fini_dummy ()
asm (TEXT_SECTION_ASM_OP);
}
+#ifdef EH_FRAME_SECTION_ASM_OP
+/* Stick a call to __register_frame_info into the .init section. For some
+ reason calls with no arguments work more reliably in .init, so stick the
+ call in another function. */
+
+static void
+frame_dummy ()
+{
+ static struct object object;
+ __register_frame_info (__EH_FRAME_BEGIN__, &object);
+}
+
+static void
+init_dummy ()
+{
+ asm (INIT_SECTION_ASM_OP);
+ frame_dummy ();
+#ifdef FORCE_INIT_SECTION_ALIGN
+ FORCE_INIT_SECTION_ALIGN;
+#endif
+ asm (TEXT_SECTION_ASM_OP);
+}
+#endif /* EH_FRAME_SECTION_ASM_OP */
+
#else /* OBJECT_FORMAT_ELF */
/* The function __do_global_ctors_aux is compiled twice (once in crtbegin.o
@@ -200,7 +235,9 @@ __do_global_ctors_aux () /* prologue goes in .init section */
#ifdef HAS_INIT_SECTION
/* This case is used by the Irix 6 port, which supports named sections but
not an SVR4-style .fini section. __do_global_dtors can be non-static
- in this case because the -fini switch to ld binds strongly. */
+ in this case because we protect it with -hidden_symbol. */
+
+static char __EH_FRAME_BEGIN__[];
static func_ptr __DTOR_LIST__[];
void
__do_global_dtors ()
@@ -208,7 +245,23 @@ __do_global_dtors ()
func_ptr *p;
for (p = __DTOR_LIST__ + 1; *p; p++)
(*p) ();
+
+#ifdef EH_FRAME_SECTION_ASM_OP
+ __deregister_frame_info (__EH_FRAME_BEGIN__);
+#endif
}
+
+#ifdef EH_FRAME_SECTION_ASM_OP
+/* Define a function here to call __register_frame. crtend.o is linked in
+ after libgcc.a, and hence can't call libgcc.a functions directly. That
+ can lead to unresolved function references. */
+void
+__frame_dummy ()
+{
+ static struct object object;
+ __register_frame_info (__EH_FRAME_BEGIN__, &object);
+}
+#endif
#endif
#endif /* defined(INIT_SECTION_ASM_OP) */
@@ -244,6 +297,17 @@ asm (DTORS_SECTION_ASM_OP); /* cc1 doesn't know that we are switching! */
STATIC func_ptr __DTOR_LIST__[1] = { (func_ptr) (-1) };
#endif
+#ifdef EH_FRAME_SECTION_ASM_OP
+/* Stick a label at the beginning of the frame unwind info so we can register
+ and deregister it with the exception handling library code. */
+
+asm (EH_FRAME_SECTION_ASM_OP);
+#ifdef INIT_SECTION_ASM_OP
+STATIC
+#endif
+char __EH_FRAME_BEGIN__[] = { };
+#endif /* EH_FRAME_SECTION_ASM_OP */
+
#endif /* defined(CRT_BEGIN) */
#ifdef CRT_END
@@ -273,7 +337,7 @@ init_dummy ()
#endif
asm (TEXT_SECTION_ASM_OP);
-/* This is a kludge. The i386 Linux dynamic linker needs ___brk_addr,
+/* This is a kludge. The i386 GNU/Linux dynamic linker needs ___brk_addr,
__environ and atexit (). We have to make sure they are in the .dynsym
section. We accomplish it by making a dummy call here. This
code is never reached. */
@@ -320,6 +384,12 @@ __do_global_ctors_aux () /* prologue goes in .text section */
ON_EXIT (__do_global_dtors, 0);
} /* epilogue and body go in .init section */
+#ifdef FORCE_INIT_SECTION_ALIGN
+FORCE_INIT_SECTION_ALIGN;
+#endif
+
+asm (TEXT_SECTION_ASM_OP);
+
#endif /* OBJECT_FORMAT_ELF */
#else /* defined(INIT_SECTION_ASM_OP) */
@@ -327,12 +397,15 @@ __do_global_ctors_aux () /* prologue goes in .text section */
#ifdef HAS_INIT_SECTION
/* This case is used by the Irix 6 port, which supports named sections but
not an SVR4-style .init section. __do_global_ctors can be non-static
- in this case because the -init switch to ld binds strongly. */
+ in this case because we protect it with -hidden_symbol. */
static func_ptr __CTOR_END__[];
void
__do_global_ctors ()
{
func_ptr *p;
+#ifdef EH_FRAME_SECTION_ASM_OP
+ __frame_dummy ();
+#endif
for (p = __CTOR_END__ - 1; *p != (func_ptr) -1; p--)
(*p) ();
}
@@ -363,4 +436,13 @@ asm (DTORS_SECTION_ASM_OP); /* cc1 doesn't know that we are switching! */
STATIC func_ptr __DTOR_END__[1] = { (func_ptr) 0 };
#endif
+#ifdef EH_FRAME_SECTION_ASM_OP
+/* Terminate the frame unwind info section with a 4byte 0 as a sentinel;
+ this would be the 'length' field in a real FDE. */
+
+typedef unsigned int ui32 __attribute__ ((mode (SI)));
+asm (EH_FRAME_SECTION_ASM_OP);
+STATIC ui32 __FRAME_END__[] = { 0 };
+#endif /* EH_FRAME_SECTION */
+
#endif /* defined(CRT_END) */
diff --git a/gcc/cse.c b/gcc/cse.c
index 971e5c80c79..aaf3e4c531a 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -1,5 +1,5 @@
/* Common subexpression elimination for GNU compiler.
- Copyright (C) 1987, 88, 89, 92-6, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -30,6 +30,7 @@ Boston, MA 02111-1307, USA. */
#include "real.h"
#include "insn-config.h"
#include "recog.h"
+#include "expr.h"
#include <setjmp.h>
@@ -192,6 +193,11 @@ Related expressions:
static int max_reg;
+/* One plus largest instruction UID used in this function at time of
+ cse_main call. */
+
+static int max_insn_uid;
+
/* Length of vectors indexed by quantity number.
We know in advance we will not need a quantity number this big. */
@@ -582,7 +588,8 @@ struct cse_basic_block_data {
|| XEXP (X, 0) == hard_frame_pointer_rtx \
|| XEXP (X, 0) == arg_pointer_rtx \
|| XEXP (X, 0) == virtual_stack_vars_rtx \
- || XEXP (X, 0) == virtual_incoming_args_rtx)))
+ || XEXP (X, 0) == virtual_incoming_args_rtx)) \
+ || GET_CODE (X) == ADDRESSOF)
/* Similar, but also allows reference to the stack pointer.
@@ -606,7 +613,8 @@ struct cse_basic_block_data {
|| (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 1)) == CONST_INT \
&& (XEXP (X, 0) == stack_pointer_rtx \
|| XEXP (X, 0) == virtual_stack_dynamic_rtx \
- || XEXP (X, 0) == virtual_outgoing_args_rtx)))
+ || XEXP (X, 0) == virtual_outgoing_args_rtx)) \
+ || GET_CODE (X) == ADDRESSOF)
static int notreg_cost PROTO((rtx));
static void new_basic_block PROTO((void));
@@ -1913,15 +1921,12 @@ canon_hash (x, mode)
if (regno < FIRST_PSEUDO_REGISTER
&& (global_regs[regno]
-#ifdef SMALL_REGISTER_CLASSES
|| (SMALL_REGISTER_CLASSES
&& ! fixed_regs[regno]
&& regno != FRAME_POINTER_REGNUM
&& regno != HARD_FRAME_POINTER_REGNUM
&& regno != ARG_POINTER_REGNUM
- && regno != STACK_POINTER_REGNUM)
-#endif
- ))
+ && regno != STACK_POINTER_REGNUM)))
{
do_not_record = 1;
return 0;
@@ -1997,6 +2002,10 @@ canon_hash (x, mode)
do_not_record = 1;
return 0;
}
+ break;
+
+ default:
+ break;
}
i = GET_RTX_LENGTH (code) - 1;
@@ -2033,6 +2042,8 @@ canon_hash (x, mode)
register unsigned tem = XINT (x, i);
hash += tem;
}
+ else if (fmt[i] == '0')
+ /* unused */;
else
abort ();
}
@@ -2171,6 +2182,9 @@ exp_equiv_p (x, y, validate, equal_values)
validate, equal_values)
&& exp_equiv_p (XEXP (x, 1), XEXP (y, 0),
validate, equal_values)));
+
+ default:
+ break;
}
/* Compare the elements. If any pair of corresponding elements
@@ -2297,6 +2311,10 @@ set_nonvarying_address_components (addr, size, pbase, pstart, pend)
start = 0;
end = 0;
+ if (flag_pic && GET_CODE (base) == PLUS
+ && XEXP (base, 0) == pic_offset_table_rtx)
+ base = XEXP (base, 1);
+
/* Registers with nonvarying addresses usually have constant equivalents;
but the frame pointer register is also possible. */
if (GET_CODE (base) == REG
@@ -2399,6 +2417,9 @@ set_nonvarying_address_components (addr, size, pbase, pstart, pend)
base = *pbase;
}
break;
+
+ default:
+ break;
}
break;
@@ -2596,6 +2617,9 @@ canon_reg (x, insn)
: REGNO_REG_CLASS (first) == NO_REGS ? x
: gen_rtx (REG, qty_mode[reg_qty[REGNO (x)]], first));
}
+
+ default:
+ break;
}
fmt = GET_RTX_FORMAT (code);
@@ -2679,6 +2703,7 @@ find_best_addr (insn, loc)
&& (regno = REGNO (addr), regno == FRAME_POINTER_REGNUM
|| regno == HARD_FRAME_POINTER_REGNUM
|| regno == ARG_POINTER_REGNUM))
+ || GET_CODE (addr) == ADDRESSOF
|| CONSTANT_ADDRESS_P (addr))
return;
@@ -3439,6 +3464,9 @@ simplify_unary_operation (code, mode, op, op_mode)
return convert_memory_address (Pmode, op);
break;
#endif
+
+ default:
+ break;
}
return 0;
@@ -3489,6 +3517,10 @@ simplify_binary_operation (code, mode, op0, op1)
f1 = real_value_truncate (mode, f1);
#ifdef REAL_ARITHMETIC
+#ifndef REAL_INFINITY
+ if (code == DIV && REAL_VALUES_EQUAL (f1, dconst0))
+ return 0;
+#endif
REAL_ARITHMETIC (value, rtx_to_tree_code (code), f0, f1);
#else
switch (code)
@@ -4366,6 +4398,9 @@ simplify_plus_minus (code, mode, op0, op1)
if (negs[i])
ops[i] = GEN_INT (- INTVAL (ops[i])), negs[i] = 0, changed = 1;
break;
+
+ default:
+ break;
}
}
@@ -4599,7 +4634,7 @@ simplify_relational_operation (code, mode, op0, op1)
else
{
l0u = l0s = INTVAL (op0);
- h0u = 0, h0s = l0s < 0 ? -1 : 0;
+ h0u = h0s = l0s < 0 ? -1 : 0;
}
if (GET_CODE (op1) == CONST_DOUBLE)
@@ -4610,7 +4645,7 @@ simplify_relational_operation (code, mode, op0, op1)
else
{
l1u = l1s = INTVAL (op1);
- h1u = 0, h1s = l1s < 0 ? -1 : 0;
+ h1u = h1s = l1s < 0 ? -1 : 0;
}
/* If WIDTH is nonzero and smaller than HOST_BITS_PER_WIDE_INT,
@@ -4691,6 +4726,9 @@ simplify_relational_operation (code, mode, op0, op1)
&& INTEGRAL_MODE_P (mode))
return const0_rtx;
break;
+
+ default:
+ break;
}
return 0;
@@ -4720,9 +4758,9 @@ simplify_relational_operation (code, mode, op0, op1)
return equal || op0ltu ? const_true_rtx : const0_rtx;
case GEU:
return equal || op1ltu ? const_true_rtx : const0_rtx;
+ default:
+ abort ();
}
-
- abort ();
}
/* Simplify CODE, an operation with result mode MODE and three operands,
@@ -4786,6 +4824,16 @@ simplify_ternary_operation (code, mode, op0_mode, op0, op1, op2)
case IF_THEN_ELSE:
if (GET_CODE (op0) == CONST_INT)
return op0 != const0_rtx ? op1 : op2;
+
+ /* Convert a == b ? b : a to "a". */
+ if (GET_CODE (op0) == NE && ! side_effects_p (op0)
+ && rtx_equal_p (XEXP (op0, 0), op1)
+ && rtx_equal_p (XEXP (op0, 1), op2))
+ return op1;
+ else if (GET_CODE (op0) == EQ && ! side_effects_p (op0)
+ && rtx_equal_p (XEXP (op0, 1), op1)
+ && rtx_equal_p (XEXP (op0, 0), op2))
+ return op2;
break;
default:
@@ -4852,6 +4900,10 @@ fold_rtx (x, insn)
since they are used only for lists of args
in a function call's REG_EQUAL note. */
case EXPR_LIST:
+ /* Changing anything inside an ADDRESSOF is incorrect; we don't
+ want to (e.g.,) make (addressof (const_int 0)) just because
+ the location is known to be zero. */
+ case ADDRESSOF:
return x;
#ifdef HAVE_cc0
@@ -5101,6 +5153,8 @@ fold_rtx (x, insn)
else if (GET_CODE (addr) == LO_SUM
&& GET_CODE (XEXP (addr, 1)) == SYMBOL_REF)
base = XEXP (addr, 1);
+ else if (GET_CODE (addr) == ADDRESSOF)
+ return change_address (x, VOIDmode, addr);
/* If this is a constant pool reference, we can fold it into its
constant to allow better value tracking. */
@@ -5192,6 +5246,9 @@ fold_rtx (x, insn)
validate_change (insn, &XVECEXP (x, 3, i),
fold_rtx (XVECEXP (x, 3, i), insn), 0);
break;
+
+ default:
+ break;
}
const_arg0 = 0;
@@ -5527,6 +5584,8 @@ fold_rtx (x, insn)
if (has_sign)
return false;
break;
+ default:
+ break;
}
}
}
@@ -5722,6 +5781,10 @@ fold_rtx (x, insn)
return cse_gen_binary (code, mode, y, new_const);
}
+ break;
+
+ default:
+ break;
}
new = simplify_binary_operation (code, mode,
@@ -6160,7 +6223,7 @@ cse_insn (insn, in_libcall_block)
/* Records what this insn does to set CC0. */
rtx this_insn_cc0 = 0;
- enum machine_mode this_insn_cc0_mode;
+ enum machine_mode this_insn_cc0_mode = VOIDmode;
struct write_data writes_memory;
static struct write_data init = {0, 0, 0, 0};
@@ -6492,7 +6555,7 @@ cse_insn (insn, in_libcall_block)
a pseudo that is set more than once, do not record SRC. Using
SRC as a replacement for anything else will be incorrect in that
situation. Note that this usually occurs only for stack slots,
- in which case all the RTL would be refering to SRC, so we don't
+ in which case all the RTL would be referring to SRC, so we don't
lose any optimization opportunities by not having SRC in the
hash table. */
@@ -6773,6 +6836,18 @@ cse_insn (insn, in_libcall_block)
if (code != REG && ! exp_equiv_p (p->exp, p->exp, 1, 0))
continue;
+ /* Also skip paradoxical subregs, unless that's what we're
+ looking for. */
+ if (code == SUBREG
+ && (GET_MODE_SIZE (GET_MODE (p->exp))
+ > GET_MODE_SIZE (GET_MODE (SUBREG_REG (p->exp))))
+ && ! (src != 0
+ && GET_CODE (src) == SUBREG
+ && GET_MODE (src) == GET_MODE (p->exp)
+ && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (src)))
+ < GET_MODE_SIZE (GET_MODE (SUBREG_REG (p->exp))))))
+ continue;
+
if (src && GET_CODE (src) == code && rtx_equal_p (src, p->exp))
src = 0;
else if (src_folded && GET_CODE (src_folded) == code
@@ -6846,6 +6921,25 @@ cse_insn (insn, in_libcall_block)
while (elt && GET_CODE (elt->exp) != REG
&& ! exp_equiv_p (elt->exp, elt->exp, 1, 0))
elt = elt->next_same_value;
+
+ /* A paradoxical subreg would be bad here: it'll be the right
+ size, but later may be adjusted so that the upper bits aren't
+ what we want. So reject it. */
+ if (elt != 0
+ && GET_CODE (elt->exp) == SUBREG
+ && (GET_MODE_SIZE (GET_MODE (elt->exp))
+ > GET_MODE_SIZE (GET_MODE (SUBREG_REG (elt->exp))))
+ /* It is okay, though, if the rtx we're trying to match
+ will ignore any of the bits we can't predict. */
+ && ! (src != 0
+ && GET_CODE (src) == SUBREG
+ && GET_MODE (src) == GET_MODE (elt->exp)
+ && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (src)))
+ < GET_MODE_SIZE (GET_MODE (SUBREG_REG (elt->exp))))))
+ {
+ elt = elt->next_same_value;
+ continue;
+ }
if (elt) src_elt_cost = elt->cost;
@@ -7790,6 +7884,9 @@ cse_process_notes (x, object)
/* Otherwise, canonicalize this register. */
return canon_reg (x, NULL_RTX);
+
+ default:
+ break;
}
for (i = 0; i < GET_RTX_LENGTH (code); i++)
@@ -7854,10 +7951,16 @@ cse_around_loop (loop_start)
The only thing we do with SET_DEST is invalidate entries, so we
can safely process each SET in order. It is slightly less efficient
- to do so, but we only want to handle the most common cases. */
+ to do so, but we only want to handle the most common cases.
+
+ The gen_move_insn call in cse_set_around_loop may create new pseudos.
+ These pseudos won't have valid entries in any of the tables indexed
+ by register number, such as reg_qty. We avoid out-of-range array
+ accesses by not processing any instructions created after cse started. */
for (insn = NEXT_INSN (loop_start);
GET_CODE (insn) != CALL_INSN && GET_CODE (insn) != CODE_LABEL
+ && INSN_UID (insn) < max_insn_uid
&& ! (GET_CODE (insn) == NOTE
&& NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END);
insn = NEXT_INSN (insn))
@@ -8314,6 +8417,8 @@ cse_main (f, nregs, after_loop, file)
max_reg = nregs;
+ max_insn_uid = get_max_uid ();
+
all_minus_one = (int *) alloca (nregs * sizeof (int));
consec_ints = (int *) alloca (nregs * sizeof (int));
@@ -8333,7 +8438,7 @@ cse_main (f, nregs, after_loop, file)
/* Allocate scratch rtl here. cse_insn will fill in the memory reference
and change the code and mode as appropriate. */
- memory_extend_rtx = gen_rtx (ZERO_EXTEND, VOIDmode, 0);
+ memory_extend_rtx = gen_rtx (ZERO_EXTEND, VOIDmode, NULL_RTX);
#endif
/* Discard all the free elements of the previous function
@@ -8482,6 +8587,7 @@ cse_basic_block (from, to, next_branch, around_loop)
register rtx insn;
int to_usage = 0;
int in_libcall_block = 0;
+ int num_insns = 0;
/* Each of these arrays is undefined before max_reg, so only allocate
the space actually needed and adjust the start below. */
@@ -8514,6 +8620,29 @@ cse_basic_block (from, to, next_branch, around_loop)
for (insn = from; insn != to; insn = NEXT_INSN (insn))
{
register enum rtx_code code;
+ int i;
+ struct table_elt *p, *next;
+
+ /* If we have processed 1,000 insns, flush the hash table to avoid
+ extreme quadratic behavior.
+
+ ??? This is a real kludge and needs to be done some other way.
+ Perhaps for 2.9. */
+ if (num_insns++ > 1000)
+ {
+ for (i = 0; i < NBUCKETS; i++)
+ for (p = table[i]; p; p = next)
+ {
+ next = p->next_same_hash;
+
+ if (GET_CODE (p->exp) == REG)
+ invalidate (p->exp, p->mode);
+ else
+ remove_from_table (p, i);
+ }
+
+ num_insns = 0;
+ }
/* See if this is a branch that is part of the path. If so, and it is
to be taken, do so. */
@@ -8737,6 +8866,9 @@ count_reg_usage (x, counts, dest, incr)
count_reg_usage (XEXP (x, 0), counts, NULL_RTX, incr);
count_reg_usage (XEXP (x, 1), counts, NULL_RTX, incr);
return;
+
+ default:
+ break;
}
fmt = GET_RTX_FORMAT (code);
diff --git a/gcc/dbxout.c b/gcc/dbxout.c
index a0a9665acab..92557685b31 100644
--- a/gcc/dbxout.c
+++ b/gcc/dbxout.c
@@ -67,11 +67,11 @@ Boston, MA 02111-1307, USA. */
For more on data type definitions, see `dbxout_type'. */
-/* Include these first, because they may define MIN and MAX. */
+#include "config.h"
+
#include <stdio.h>
#include <errno.h>
-#include "config.h"
#include "tree.h"
#include "rtl.h"
#include "flags.h"
@@ -501,7 +501,9 @@ dbxout_start_new_source_file (filename)
n->file_number = next_file_number++;
n->next_type_number = 1;
current_file = n;
- fprintf (asmfile, "%s \"%s\",%d,0,0,0\n", ASM_STABS_OP, filename, N_BINCL);
+ fprintf (asmfile, "%s ", ASM_STABS_OP);
+ output_quoted_string (asmfile, filename);
+ fprintf (asmfile, ",%d,0,0,0\n", N_BINCL);
#endif
}
@@ -1868,6 +1870,10 @@ dbxout_symbol (decl, local)
#endif
dbxout_symbol_location (decl, type, 0, DECL_RTL (decl));
+ break;
+
+ default:
+ break;
}
}
diff --git a/gcc/defaults.h b/gcc/defaults.h
index 651133898d0..434d761afed 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -136,6 +136,6 @@ do { fprintf (FILE, "\t%s\t", ASM_LONG); \
/* If we have a definition of INCOMING_RETURN_ADDR_RTX, assume that
the rest of the DWARF 2 frame unwind support is also provided. */
-#ifdef INCOMING_RETURN_ADDR_RTX
-#define DWARF2_UNWIND_INFO
+#if !defined (DWARF2_UNWIND_INFO) && defined (INCOMING_RETURN_ADDR_RTX)
+#define DWARF2_UNWIND_INFO 1
#endif
diff --git a/gcc/dwarf2.h b/gcc/dwarf2.h
index 6e394fe4123..db19904802c 100644
--- a/gcc/dwarf2.h
+++ b/gcc/dwarf2.h
@@ -1,6 +1,6 @@
/* Declarations and definitions of codes relating to the DWARF2 symbolic
debugging information format.
- Copyright (C) 1992, 1993, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1992, 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by Gary Funck (gary@intrepid.com). Derived from the
DWARF 1 implementation written by Ron Guilmette (rfg@monkeys.com).
@@ -26,6 +26,9 @@
by UNIX International. Copies of this specification are available from
UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054. */
+/* This file is shared between GCC and GDB, and should not contain
+ prototypes. */
+
/* Tag names and codes. */
enum dwarf_tag
@@ -441,8 +444,8 @@ enum dwarf_inline_attribute
DW_INL_declared_inlined = 3
};
-/* descriminant lists */
-enum dwarf_descrim_list
+/* discriminant lists */
+enum dwarf_discrim_list
{
DW_DSC_label = 0,
DW_DSC_range = 1
@@ -497,6 +500,7 @@ enum dwarf_call_frame_info
/* GNU extensions */
DW_CFA_GNU_window_save = 0x2d,
+ DW_CFA_GNU_args_size = 0x2e
};
#define DW_CIE_ID 0xffffffff
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 9d277395d72..23059631673 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -1,7 +1,7 @@
/* Output Dwarf2 format symbol table information from the GNU C compiler.
- Copyright (C) 1992, 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
- Contributed by Gary Funck (gary@intrepid.com). Derived from the
- DWARF 1 implementation written by Ron Guilmette (rfg@monkeys.com).
+ Copyright (C) 1992, 93, 95, 96, 97, 1998 Free Software Foundation, Inc.
+ Contributed by Gary Funck (gary@intrepid.com).
+ Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com).
Extensively modified by Jason Merrill (jason@cygnus.com).
This file is part of GNU CC.
@@ -20,20 +20,15 @@ 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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-#include "config.h"
-#include "defaults.h"
-
/* The first part of this file deals with the DWARF 2 frame unwind
information, which is also used by the GCC efficient exception handling
mechanism. The second part, controlled only by an #ifdef
DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
information. */
-#if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
-
+#include "config.h"
+#include "defaults.h"
#include <stdio.h>
-#include <setjmp.h>
-#include "dwarf2.h"
#include "tree.h"
#include "flags.h"
#include "rtl.h"
@@ -44,9 +39,31 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "output.h"
#include "expr.h"
#include "except.h"
+#include "dwarf2.h"
+
+/* We cannot use <assert.h> in GCC source, since that would include
+ GCC's assert.h, which may not be compatible with the host compiler. */
+#undef assert
+#ifdef NDEBUG
+# define assert(e)
+#else
+# define assert(e) do { if (! (e)) abort (); } while (0)
+#endif
+
+/* Decide whether we want to emit frame unwind information for the current
+ translation unit. */
+
+int
+dwarf2out_do_frame ()
+{
+ return (write_symbols == DWARF2_DEBUG
+#ifdef DWARF2_UNWIND_INFO
+ || (flag_exceptions && ! exceptions_via_longjmp)
+#endif
+ );
+}
-/* #define NDEBUG 1 */
-#include "assert.h"
+#if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
#ifndef __GNUC__
#define inline
@@ -174,7 +191,6 @@ static unsigned long size_of_uleb128 PROTO((unsigned long));
static unsigned long size_of_sleb128 PROTO((long));
static void output_uleb128 PROTO((unsigned long));
static void output_sleb128 PROTO((long));
-char *dwarf2out_cfi_label PROTO((void));
static void add_fde_cfi PROTO((char *, dw_cfi_ref));
static void lookup_cfa_1 PROTO((dw_cfi_ref, unsigned long *,
long *));
@@ -191,6 +207,7 @@ static unsigned reg_number PROTO((rtx));
Theses may be overridden in the tm.h file (if necessary) for a particular
assembler. */
+#ifdef OBJECT_FORMAT_ELF
#ifndef UNALIGNED_SHORT_ASM_OP
#define UNALIGNED_SHORT_ASM_OP ".2byte"
#endif
@@ -200,20 +217,12 @@ static unsigned reg_number PROTO((rtx));
#ifndef UNALIGNED_DOUBLE_INT_ASM_OP
#define UNALIGNED_DOUBLE_INT_ASM_OP ".8byte"
#endif
+#endif /* OBJECT_FORMAT_ELF */
+
#ifndef ASM_BYTE_OP
#define ASM_BYTE_OP ".byte"
#endif
-#ifndef UNALIGNED_OFFSET_ASM_OP
-#define UNALIGNED_OFFSET_ASM_OP \
- (DWARF_OFFSET_SIZE == 8 ? UNALIGNED_DOUBLE_INT_ASM_OP : UNALIGNED_INT_ASM_OP)
-#endif
-
-#ifndef UNALIGNED_WORD_ASM_OP
-#define UNALIGNED_WORD_ASM_OP \
- (PTR_SIZE == 8 ? UNALIGNED_DOUBLE_INT_ASM_OP : UNALIGNED_INT_ASM_OP)
-#endif
-
/* Data and reference forms for relocatable data. */
#define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
#define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
@@ -238,9 +247,6 @@ static unsigned reg_number PROTO((rtx));
#ifndef FRAME_SECTION
#define FRAME_SECTION ".debug_frame"
#endif
-#if !defined (EH_FRAME_SECTION) && defined (ASM_OUTPUT_SECTION_NAME)
-#define EH_FRAME_SECTION ".eh_frame"
-#endif
#ifndef FUNC_BEGIN_LABEL
#define FUNC_BEGIN_LABEL "LFB"
@@ -250,18 +256,37 @@ static unsigned reg_number PROTO((rtx));
#endif
#define CIE_AFTER_SIZE_LABEL "LSCIE"
#define CIE_END_LABEL "LECIE"
+#define CIE_LENGTH_LABEL "LLCIE"
#define FDE_AFTER_SIZE_LABEL "LSFDE"
#define FDE_END_LABEL "LEFDE"
+#define FDE_LENGTH_LABEL "LLFDE"
/* Definitions of defaults for various types of primitive assembly language
output operations. These may be overridden from within the tm.h file,
- but typically, that is unecessary. */
+ but typically, that is unnecessary. */
#ifndef ASM_OUTPUT_SECTION
#define ASM_OUTPUT_SECTION(FILE, SECTION) \
fprintf ((FILE), SECTION_FORMAT, SECTION_ASM_OP, SECTION)
#endif
+#ifndef ASM_OUTPUT_DWARF_DATA1
+#define ASM_OUTPUT_DWARF_DATA1(FILE,VALUE) \
+ fprintf ((FILE), "\t%s\t0x%x", ASM_BYTE_OP, VALUE)
+#endif
+
+#ifdef UNALIGNED_INT_ASM_OP
+
+#ifndef UNALIGNED_OFFSET_ASM_OP
+#define UNALIGNED_OFFSET_ASM_OP \
+ (DWARF_OFFSET_SIZE == 8 ? UNALIGNED_DOUBLE_INT_ASM_OP : UNALIGNED_INT_ASM_OP)
+#endif
+
+#ifndef UNALIGNED_WORD_ASM_OP
+#define UNALIGNED_WORD_ASM_OP \
+ (PTR_SIZE == 8 ? UNALIGNED_DOUBLE_INT_ASM_OP : UNALIGNED_INT_ASM_OP)
+#endif
+
#ifndef ASM_OUTPUT_DWARF_DELTA2
#define ASM_OUTPUT_DWARF_DELTA2(FILE,LABEL1,LABEL2) \
do { fprintf ((FILE), "\t%s\t", UNALIGNED_SHORT_ASM_OP); \
@@ -317,11 +342,6 @@ static unsigned reg_number PROTO((rtx));
} while (0)
#endif
-#ifndef ASM_OUTPUT_DWARF_DATA1
-#define ASM_OUTPUT_DWARF_DATA1(FILE,VALUE) \
- fprintf ((FILE), "\t%s\t0x%x", ASM_BYTE_OP, VALUE)
-#endif
-
#ifndef ASM_OUTPUT_DWARF_DATA2
#define ASM_OUTPUT_DWARF_DATA2(FILE,VALUE) \
fprintf ((FILE), "\t%s\t0x%x", UNALIGNED_SHORT_ASM_OP, (unsigned) VALUE)
@@ -360,8 +380,69 @@ static unsigned reg_number PROTO((rtx));
} while (0)
#endif
+#ifndef ASM_OUTPUT_DWARF_VALUE4
+#define ASM_OUTPUT_DWARF_VALUE4(FILE,LABEL) \
+ do { fprintf ((FILE), "\t%s\t", UNALIGNED_INT_ASM_OP); \
+ assemble_name (FILE, LABEL); \
+ } while (0)
+#endif
+
+#else /* UNALIGNED_INT_ASM_OP */
+
+/* We don't have unaligned support, let's hope the normal output works for
+ .debug_frame. */
+
+#define ASM_OUTPUT_DWARF_ADDR(FILE,LABEL) \
+ assemble_integer (gen_rtx (SYMBOL_REF, Pmode, LABEL), PTR_SIZE, 1)
+
+#define ASM_OUTPUT_DWARF_OFFSET(FILE,LABEL) \
+ assemble_integer (gen_rtx (SYMBOL_REF, SImode, LABEL), 4, 1)
+
+#define ASM_OUTPUT_DWARF_DELTA2(FILE,LABEL1,LABEL2) \
+ assemble_integer (gen_rtx (MINUS, HImode, \
+ gen_rtx (SYMBOL_REF, Pmode, LABEL1), \
+ gen_rtx (SYMBOL_REF, Pmode, LABEL2)), \
+ 2, 1)
+
+#define ASM_OUTPUT_DWARF_DELTA4(FILE,LABEL1,LABEL2) \
+ assemble_integer (gen_rtx (MINUS, SImode, \
+ gen_rtx (SYMBOL_REF, Pmode, LABEL1), \
+ gen_rtx (SYMBOL_REF, Pmode, LABEL2)), \
+ 4, 1)
+
+#define ASM_OUTPUT_DWARF_ADDR_DELTA(FILE,LABEL1,LABEL2) \
+ assemble_integer (gen_rtx (MINUS, Pmode, \
+ gen_rtx (SYMBOL_REF, Pmode, LABEL1), \
+ gen_rtx (SYMBOL_REF, Pmode, LABEL2)), \
+ PTR_SIZE, 1)
+
+#define ASM_OUTPUT_DWARF_DELTA(FILE,LABEL1,LABEL2) \
+ ASM_OUTPUT_DWARF_DELTA4 (FILE,LABEL1,LABEL2)
+
+#define ASM_OUTPUT_DWARF_DATA4(FILE,VALUE) \
+ assemble_integer (GEN_INT (VALUE), 4, 1)
+
+#define ASM_OUTPUT_DWARF_VALUE4(FILE,LABEL) \
+ assemble_integer (gen_rtx (SYMBOL_REF, Pmode, LABEL), 4, 1)
+
+#endif /* UNALIGNED_INT_ASM_OP */
+
+#ifdef SET_ASM_OP
+#ifndef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL
+#define ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL(FILE, SY, HI, LO) \
+ do { fprintf ((FILE), "\t%s\t", SET_ASM_OP); \
+ assemble_name (FILE, SY); \
+ fprintf ((FILE), ","); \
+ assemble_name (FILE, HI); \
+ fprintf ((FILE), "-"); \
+ assemble_name (FILE, LO); \
+ fprintf ((FILE), "\n"); \
+ } while (0)
+#endif
+#endif /* SET_ASM_OP */
+
/* This is similar to the default ASM_OUTPUT_ASCII, except that no trailing
- newline is produced. When flag_verbose_asm is asserted, we add commnetary
+ newline is produced. When flag_debug_asm is asserted, we add commentary
at the end of the line, so we must avoid output of a newline here. */
#ifndef ASM_OUTPUT_DWARF_STRING
#define ASM_OUTPUT_DWARF_STRING(FILE,P) \
@@ -404,6 +485,14 @@ static unsigned reg_number PROTO((rtx));
#define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
#endif
+/* Hook used by __throw. */
+
+rtx
+expand_builtin_dwarf_fp_regnum ()
+{
+ return GEN_INT (DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM));
+}
+
/* The offset from the incoming value of %sp to the top of the stack frame
for the current function. */
#ifndef INCOMING_FRAME_SP_OFFSET
@@ -445,6 +534,104 @@ reg_number (rtl)
return regno;
}
+struct reg_size_range
+{
+ int beg;
+ int end;
+ int size;
+};
+
+/* Given a register number in REG_TREE, return an rtx for its size in bytes.
+ We do this in kind of a roundabout way, by building up a list of
+ register size ranges and seeing where our register falls in one of those
+ ranges. We need to do it this way because REG_TREE is not a constant,
+ and the target macros were not designed to make this task easy. */
+
+rtx
+expand_builtin_dwarf_reg_size (reg_tree, target)
+ tree reg_tree;
+ rtx target;
+{
+ enum machine_mode mode;
+ int size;
+ struct reg_size_range ranges[5];
+ tree t, t2;
+
+ int i = 0;
+ int n_ranges = 0;
+ int last_size = -1;
+
+ for (; i < FIRST_PSEUDO_REGISTER; ++i)
+ {
+ /* The return address is out of order on the MIPS, and we don't use
+ copy_reg for it anyway, so we don't care here how large it is. */
+ if (DWARF_FRAME_REGNUM (i) == DWARF_FRAME_RETURN_COLUMN)
+ continue;
+
+ mode = reg_raw_mode[i];
+
+ /* CCmode is arbitrarily given a size of 4 bytes. It is more useful
+ to use the same size as word_mode, since that reduces the number
+ of ranges we need. It should not matter, since the result should
+ never be used for a condition code register anyways. */
+ if (GET_MODE_CLASS (mode) == MODE_CC)
+ mode = word_mode;
+
+ size = GET_MODE_SIZE (mode);
+
+ /* If this register is not valid in the specified mode and
+ we have a previous size, use that for the size of this
+ register to avoid making junk tiny ranges. */
+ if (! HARD_REGNO_MODE_OK (i, mode) && last_size != -1)
+ size = last_size;
+
+ if (size != last_size)
+ {
+ ranges[n_ranges].beg = i;
+ ranges[n_ranges].size = last_size = size;
+ ++n_ranges;
+ assert (n_ranges <= 5);
+ }
+ ranges[n_ranges-1].end = i;
+ }
+
+ /* The usual case: fp regs surrounded by general regs. */
+ if (n_ranges == 3 && ranges[0].size == ranges[2].size)
+ {
+ assert ((DWARF_FRAME_REGNUM (ranges[1].end)
+ - DWARF_FRAME_REGNUM (ranges[1].beg))
+ == ranges[1].end - ranges[1].beg);
+ t = fold (build (GE_EXPR, integer_type_node, reg_tree,
+ build_int_2 (DWARF_FRAME_REGNUM (ranges[1].beg), 0)));
+ t2 = fold (build (LE_EXPR, integer_type_node, reg_tree,
+ build_int_2 (DWARF_FRAME_REGNUM (ranges[1].end), 0)));
+ t = fold (build (TRUTH_ANDIF_EXPR, integer_type_node, t, t2));
+ t = fold (build (COND_EXPR, integer_type_node, t,
+ build_int_2 (ranges[1].size, 0),
+ build_int_2 (ranges[0].size, 0)));
+ }
+ else
+ {
+ --n_ranges;
+ t = build_int_2 (ranges[n_ranges].size, 0);
+ size = DWARF_FRAME_REGNUM (ranges[n_ranges].beg);
+ for (; n_ranges--; )
+ {
+ assert ((DWARF_FRAME_REGNUM (ranges[n_ranges].end)
+ - DWARF_FRAME_REGNUM (ranges[n_ranges].beg))
+ == ranges[n_ranges].end - ranges[n_ranges].beg);
+ assert (DWARF_FRAME_REGNUM (ranges[n_ranges].beg) < size);
+ size = DWARF_FRAME_REGNUM (ranges[n_ranges].beg);
+ t2 = fold (build (LE_EXPR, integer_type_node, reg_tree,
+ build_int_2 (DWARF_FRAME_REGNUM
+ (ranges[n_ranges].end), 0)));
+ t = fold (build (COND_EXPR, integer_type_node, t2,
+ build_int_2 (ranges[n_ranges].size, 0), t));
+ }
+ }
+ return expand_expr (t, target, Pmode, 0);
+}
+
/* Convert a DWARF call frame info. operation to its string name */
static char *
@@ -497,6 +684,8 @@ dwarf_cfi_name (cfi_opc)
/* GNU extensions */
case DW_CFA_GNU_window_save:
return "DW_CFA_GNU_window_save";
+ case DW_CFA_GNU_args_size:
+ return "DW_CFA_GNU_args_size";
default:
return "DW_CFA_<unknown>";
@@ -603,6 +792,8 @@ lookup_cfa_1 (cfi, regp, offsetp)
*regp = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
*offsetp = cfi->dw_cfi_oprnd2.dw_cfi_offset;
break;
+ default:
+ break;
}
}
@@ -638,6 +829,9 @@ static long cfa_offset;
static unsigned cfa_store_reg;
static long cfa_store_offset;
+/* The running total of the size of arguments pushed onto the stack. */
+static long args_size;
+
/* Entry point to update the canonical frame address (CFA).
LABEL is passed to add_fde_cfi. The value of CFA is now to be
calculated from REG+OFFSET. */
@@ -743,6 +937,20 @@ dwarf2out_window_save (label)
add_fde_cfi (label, cfi);
}
+/* Add a CFI to update the running total of the size of arguments
+ pushed onto the stack. */
+
+void
+dwarf2out_args_size (label, size)
+ char *label;
+ long size;
+{
+ register dw_cfi_ref cfi = new_cfi ();
+ cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
+ cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
+ add_fde_cfi (label, cfi);
+}
+
/* Entry point for saving a register to the stack. REG is the GCC register
number. LABEL and OFFSET are passed to reg_save. */
@@ -828,6 +1036,87 @@ initial_return_save (rtl)
reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa_offset);
}
+/* Check INSN to see if it looks like a push or a stack adjustment, and
+ make a note of it if it does. EH uses this information to find out how
+ much extra space it needs to pop off the stack. */
+
+static void
+dwarf2out_stack_adjust (insn)
+ rtx insn;
+{
+ long offset;
+ char *label;
+
+ if (GET_CODE (insn) == BARRIER)
+ {
+ /* When we see a BARRIER, we know to reset args_size to 0. Usually
+ the compiler will have already emitted a stack adjustment, but
+ doesn't bother for calls to noreturn functions. */
+#ifdef STACK_GROWS_DOWNWARD
+ offset = -args_size;
+#else
+ offset = args_size;
+#endif
+ }
+ else if (GET_CODE (PATTERN (insn)) == SET)
+ {
+ rtx src, dest;
+ enum rtx_code code;
+
+ insn = PATTERN (insn);
+ src = SET_SRC (insn);
+ dest = SET_DEST (insn);
+
+ if (dest == stack_pointer_rtx)
+ {
+ /* (set (reg sp) (plus (reg sp) (const_int))) */
+ code = GET_CODE (src);
+ if (! (code == PLUS || code == MINUS)
+ || XEXP (src, 0) != stack_pointer_rtx
+ || GET_CODE (XEXP (src, 1)) != CONST_INT)
+ return;
+
+ offset = INTVAL (XEXP (src, 1));
+ }
+ else if (GET_CODE (dest) == MEM)
+ {
+ /* (set (mem (pre_dec (reg sp))) (foo)) */
+ src = XEXP (dest, 0);
+ code = GET_CODE (src);
+
+ if (! (code == PRE_DEC || code == PRE_INC)
+ || XEXP (src, 0) != stack_pointer_rtx)
+ return;
+
+ offset = GET_MODE_SIZE (GET_MODE (dest));
+ }
+ else
+ return;
+
+ if (code == PLUS || code == PRE_INC)
+ offset = -offset;
+ }
+ else
+ return;
+
+ if (offset == 0)
+ return;
+
+ if (cfa_reg == STACK_POINTER_REGNUM)
+ cfa_offset += offset;
+
+#ifndef STACK_GROWS_DOWNWARD
+ offset = -offset;
+#endif
+ args_size += offset;
+ if (args_size < 0)
+ args_size = 0;
+
+ label = dwarf2out_cfi_label ();
+ dwarf2out_def_cfa (label, cfa_reg, cfa_offset);
+ dwarf2out_args_size (label, args_size);
+}
+
/* Record call frame debugging information for INSN, which either
sets SP or FP (adjusting how we calculate the frame address) or saves a
register to the stack. If INSN is NULL_RTX, initialize our state. */
@@ -857,9 +1146,19 @@ dwarf2out_frame_debug (insn)
return;
}
+ if (! RTX_FRAME_RELATED_P (insn))
+ {
+ dwarf2out_stack_adjust (insn);
+ return;
+ }
+
label = dwarf2out_cfi_label ();
insn = PATTERN (insn);
+ /* Assume that in a PARALLEL prologue insn, only the first elt is
+ significant. Currently this is true. */
+ if (GET_CODE (insn) == PARALLEL)
+ insn = XVECEXP (insn, 0, 0);
assert (GET_CODE (insn) == SET);
src = SET_SRC (insn);
@@ -899,13 +1198,21 @@ dwarf2out_frame_debug (insn)
abort ();
}
+ if (XEXP (src, 0) == hard_frame_pointer_rtx)
+ {
+ /* Restoring SP from FP in the epilogue. */
+ assert (cfa_reg == HARD_FRAME_POINTER_REGNUM);
+ cfa_reg = STACK_POINTER_REGNUM;
+ }
+ else
+ assert (XEXP (src, 0) == stack_pointer_rtx);
+
if (GET_CODE (src) == PLUS)
offset = -offset;
if (cfa_reg == STACK_POINTER_REGNUM)
cfa_offset += offset;
if (cfa_store_reg == STACK_POINTER_REGNUM)
cfa_store_offset += offset;
- assert (XEXP (src, 0) == stack_pointer_rtx);
}
else
{
@@ -914,9 +1221,9 @@ dwarf2out_frame_debug (insn)
assert (XEXP (src, 1) == stack_pointer_rtx);
assert (GET_CODE (XEXP (src, 0)) == REG
&& REGNO (XEXP (src, 0)) == cfa_temp_reg);
- assert (cfa_store_reg == STACK_POINTER_REGNUM);
+ assert (cfa_reg == STACK_POINTER_REGNUM);
cfa_store_reg = REGNO (dest);
- cfa_store_offset -= cfa_temp_value;
+ cfa_store_offset = cfa_offset - cfa_temp_value;
}
break;
@@ -949,7 +1256,7 @@ dwarf2out_frame_debug (insn)
case PRE_INC:
case PRE_DEC:
offset = GET_MODE_SIZE (GET_MODE (dest));
- if (GET_CODE (src) == PRE_INC)
+ if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
offset = -offset;
assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM);
@@ -1048,7 +1355,7 @@ output_uleb128 (value)
}
while (value != 0);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s ULEB128 0x%x", ASM_COMMENT_START, save_value);
}
@@ -1079,7 +1386,7 @@ output_sleb128 (value)
}
while (more);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s SLEB128 %d", ASM_COMMENT_START, save_value);
}
@@ -1095,7 +1402,7 @@ output_cfi (cfi, fde)
ASM_OUTPUT_DWARF_DATA1 (asm_out_file,
cfi->dw_cfi_opc
| (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f));
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DW_CFA_advance_loc 0x%x",
ASM_COMMENT_START, cfi->dw_cfi_oprnd1.dw_cfi_offset);
fputc ('\n', asm_out_file);
@@ -1106,7 +1413,7 @@ output_cfi (cfi, fde)
ASM_OUTPUT_DWARF_DATA1 (asm_out_file,
cfi->dw_cfi_opc
| (cfi->dw_cfi_oprnd1.dw_cfi_reg_num & 0x3f));
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DW_CFA_offset, column 0x%x",
ASM_COMMENT_START, cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
@@ -1119,7 +1426,7 @@ output_cfi (cfi, fde)
ASM_OUTPUT_DWARF_DATA1 (asm_out_file,
cfi->dw_cfi_opc
| (cfi->dw_cfi_oprnd1.dw_cfi_reg_num & 0x3f));
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DW_CFA_restore, column 0x%x",
ASM_COMMENT_START, cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
@@ -1128,7 +1435,7 @@ output_cfi (cfi, fde)
else
{
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, cfi->dw_cfi_opc);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START,
dwarf_cfi_name (cfi->dw_cfi_opc));
@@ -1192,12 +1499,29 @@ output_cfi (cfi, fde)
break;
case DW_CFA_GNU_window_save:
break;
+ case DW_CFA_GNU_args_size:
+ output_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset);
+ fputc ('\n', asm_out_file);
+ break;
default:
break;
}
}
}
+#if !defined (EH_FRAME_SECTION)
+#if defined (EH_FRAME_SECTION_ASM_OP)
+#define EH_FRAME_SECTION() eh_frame_section();
+#else
+#if defined (ASM_OUTPUT_SECTION_NAME)
+#define EH_FRAME_SECTION() \
+ do { \
+ named_section (NULL_TREE, ".eh_frame", 0); \
+ } while (0)
+#endif
+#endif
+#endif
+
/* Output the call frame information used to used to record information
that relates to calculating the frame pointer, and records the
location of saved registers. */
@@ -1212,24 +1536,30 @@ output_call_frame_info (for_eh)
register dw_cfi_ref cfi;
unsigned long fde_pad;
char l1[20], l2[20];
+#ifdef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL
+ char ld[20];
+#endif
/* Do we want to include a pointer to the exception table? */
int eh_ptr = for_eh && exception_table_p ();
- /* Only output the info if it will be interesting. */
- for (i = 0; i < fde_table_in_use; ++i)
- if (fde_table[i].dw_fde_cfi != NULL)
- break;
- if (i == fde_table_in_use)
- return;
-
fputc ('\n', asm_out_file);
+
+ /* We're going to be generating comments, so turn on app. */
+ if (flag_debug_asm)
+ app_enable ();
+
if (for_eh)
{
#ifdef EH_FRAME_SECTION
- ASM_OUTPUT_SECTION_NAME (asm_out_file, NULL_TREE, EH_FRAME_SECTION, 0);
+ EH_FRAME_SECTION ();
#else
+ tree label = get_file_function_name ('F');
+
data_section ();
+ ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
+ ASM_GLOBALIZE_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
+ ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
#endif
assemble_label ("__FRAME_BEGIN__");
}
@@ -1239,70 +1569,93 @@ output_call_frame_info (for_eh)
/* Output the CIE. */
ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
- ASM_OUTPUT_DWARF_DELTA (asm_out_file, l2, l1);
- if (flag_verbose_asm)
+#ifdef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL
+ ASM_GENERATE_INTERNAL_LABEL (ld, CIE_LENGTH_LABEL, for_eh);
+ if (for_eh)
+ ASM_OUTPUT_DWARF_VALUE4 (asm_out_file, ld);
+ else
+ ASM_OUTPUT_DWARF_OFFSET (asm_out_file, ld);
+#else
+ if (for_eh)
+ ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, l2, l1);
+ else
+ ASM_OUTPUT_DWARF_DELTA (asm_out_file, l2, l1);
+#endif
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s Length of Common Information Entry",
ASM_COMMENT_START);
fputc ('\n', asm_out_file);
ASM_OUTPUT_LABEL (asm_out_file, l1);
- ASM_OUTPUT_DWARF_DATA4 (asm_out_file, DW_CIE_ID);
- if (flag_verbose_asm)
+ if (for_eh)
+ /* Now that the CIE pointer is PC-relative for EH,
+ use 0 to identify the CIE. */
+ ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
+ else
+ ASM_OUTPUT_DWARF_DATA4 (asm_out_file, DW_CIE_ID);
+
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s CIE Identifier Tag", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
- if (DWARF_OFFSET_SIZE == 8)
+ if (! for_eh && DWARF_OFFSET_SIZE == 8)
{
ASM_OUTPUT_DWARF_DATA4 (asm_out_file, DW_CIE_ID);
fputc ('\n', asm_out_file);
}
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_CIE_VERSION);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s CIE Version", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
if (eh_ptr)
{
- /* The "z" augmentation was defined by SGI; the FDE contains a pointer
- to the exception region info for the frame. */
- ASM_OUTPUT_DWARF_STRING (asm_out_file, "z");
- if (flag_verbose_asm)
- fprintf (asm_out_file, "\t%s CIE Augmentation", ASM_COMMENT_START);
+ /* The CIE contains a pointer to the exception region info for the
+ frame. Make the augmentation string three bytes (including the
+ trailing null) so the pointer is 4-byte aligned. The Solaris ld
+ can't handle unaligned relocs. */
+ if (flag_debug_asm)
+ {
+ ASM_OUTPUT_DWARF_STRING (asm_out_file, "eh");
+ fprintf (asm_out_file, "\t%s CIE Augmentation", ASM_COMMENT_START);
+ }
+ else
+ {
+ ASM_OUTPUT_ASCII (asm_out_file, "eh", 3);
+ }
+ fputc ('\n', asm_out_file);
+
+ ASM_OUTPUT_DWARF_ADDR (asm_out_file, "__EXCEPTION_TABLE__");
+ if (flag_debug_asm)
+ fprintf (asm_out_file, "\t%s pointer to exception region info",
+ ASM_COMMENT_START);
}
else
{
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s CIE Augmentation (none)",
ASM_COMMENT_START);
}
fputc ('\n', asm_out_file);
output_uleb128 (1);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, " (CIE Code Alignment Factor)");
fputc ('\n', asm_out_file);
output_sleb128 (DWARF_CIE_DATA_ALIGNMENT);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, " (CIE Data Alignment Factor)");
fputc ('\n', asm_out_file);
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DWARF_FRAME_RETURN_COLUMN);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s CIE RA Column", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
- if (eh_ptr)
- {
- output_uleb128 (0);
- if (flag_verbose_asm)
- fprintf (asm_out_file, "\t%s CIE augmentation fields length",
- ASM_COMMENT_START);
- fputc ('\n', asm_out_file);
- }
for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
output_cfi (cfi, NULL);
@@ -1310,61 +1663,53 @@ output_call_frame_info (for_eh)
/* Pad the CIE out to an address sized boundary. */
ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
ASM_OUTPUT_LABEL (asm_out_file, l2);
+#ifdef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL
+ ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL (asm_out_file, ld, l2, l1);
+#endif
/* Loop through all of the FDE's. */
for (i = 0; i < fde_table_in_use; ++i)
{
fde = &fde_table[i];
- if (fde->dw_fde_cfi == NULL)
- continue;
ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + i*2);
ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + i*2);
- ASM_OUTPUT_DWARF_DELTA (asm_out_file, l2, l1);
- if (flag_verbose_asm)
+#ifdef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL
+ ASM_GENERATE_INTERNAL_LABEL (ld, FDE_LENGTH_LABEL, for_eh + i*2);
+ if (for_eh)
+ ASM_OUTPUT_DWARF_VALUE4 (asm_out_file, ld);
+ else
+ ASM_OUTPUT_DWARF_OFFSET (asm_out_file, ld);
+#else
+ if (for_eh)
+ ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, l2, l1);
+ else
+ ASM_OUTPUT_DWARF_DELTA (asm_out_file, l2, l1);
+#endif
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s FDE Length", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
ASM_OUTPUT_LABEL (asm_out_file, l1);
if (for_eh)
- ASM_OUTPUT_DWARF_ADDR (asm_out_file, "__FRAME_BEGIN__");
+ ASM_OUTPUT_DWARF_DELTA (asm_out_file, l1, "__FRAME_BEGIN__");
else
ASM_OUTPUT_DWARF_OFFSET (asm_out_file, stripattributes (FRAME_SECTION));
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s FDE CIE offset", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
ASM_OUTPUT_DWARF_ADDR (asm_out_file, fde->dw_fde_begin);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s FDE initial location", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
ASM_OUTPUT_DWARF_ADDR_DELTA (asm_out_file,
fde->dw_fde_end, fde->dw_fde_begin);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s FDE address range", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
- if (eh_ptr)
- {
- output_uleb128 (PTR_SIZE);
- if (flag_verbose_asm)
- fprintf (asm_out_file, "\t%s FDE augmentation fields length",
- ASM_COMMENT_START);
- fputc ('\n', asm_out_file);
-
- /* For now, a pointer to the translation unit's info will do.
- ??? Eventually this should point to the function's info. */
- if (exception_table_p ())
- ASM_OUTPUT_DWARF_ADDR (asm_out_file, "__EXCEPTION_TABLE__");
- else
- ASM_OUTPUT_DWARF_ADDR_DATA (asm_out_file, 0);
-
- if (flag_verbose_asm)
- fprintf (asm_out_file, "\t%s pointer to exception region info",
- ASM_COMMENT_START);
- fputc ('\n', asm_out_file);
- }
/* Loop through the Call Frame Instructions associated with
this FDE. */
@@ -1375,12 +1720,15 @@ output_call_frame_info (for_eh)
/* Pad the FDE out to an address sized boundary. */
ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
ASM_OUTPUT_LABEL (asm_out_file, l2);
+#ifdef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL
+ ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL (asm_out_file, ld, l2, l1);
+#endif
}
#ifndef EH_FRAME_SECTION
if (for_eh)
{
/* Emit terminating zero for table. */
- ASM_OUTPUT_DWARF_DATA (asm_out_file, 0);
+ ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
fputc ('\n', asm_out_file);
}
#endif
@@ -1389,16 +1737,10 @@ output_call_frame_info (for_eh)
get a value of 0. Putting .align 0 after the label fixes it. */
ASM_OUTPUT_ALIGN (asm_out_file, 0);
#endif
-}
-/* Decide whether we want to emit frame unwind information for the current
- translation unit. */
-
-int
-dwarf2out_do_frame ()
-{
- return (write_symbols == DWARF2_DEBUG
- || (flag_exceptions && ! exceptions_via_longjmp));
+ /* Turn off app to make assembly quicker. */
+ if (flag_debug_asm)
+ app_disable ();
}
/* Output a marker (i.e. a label) for the beginning of a function, before
@@ -1435,6 +1777,8 @@ dwarf2out_begin_prologue ()
fde->dw_fde_current_label = NULL;
fde->dw_fde_end = NULL;
fde->dw_fde_cfi = NULL;
+
+ args_size = 0;
}
/* Output a marker (i.e. a label) for the absolute end of the generated code
@@ -1563,7 +1907,7 @@ typedef struct dw_fp_struct
dw_float_const;
/* Each entry in the line_info_table maintains the file and
- line nuber associated with the label generated for that
+ line number associated with the label generated for that
entry. The label gives the PC value associated with
the line number entry. */
@@ -1584,7 +1928,7 @@ typedef struct dw_separate_line_info_struct
}
dw_separate_line_info_entry;
-/* The dw_val_node describes an attibute's value, as it is
+/* The dw_val_node describes an attribute's value, as it is
represented internally. */
typedef struct dw_val_struct
@@ -1777,7 +2121,7 @@ static unsigned next_block_number = 2;
/* A pointer to the base of a table of references to DIE's that describe
declarations. The table is indexed by DECL_UID() which is a unique
- number, indentifying each decl. */
+ number identifying each decl. */
static dw_die_ref *decl_die_table;
/* Number of elements currently allocated for the decl_die_table. */
@@ -1800,7 +2144,7 @@ static tree *decl_scope_table;
/* Number of elements currently allocated for the decl_scope_table. */
static unsigned decl_scope_table_allocated;
-/* Current level of nesting of declataion scopes. */
+/* Current level of nesting of declaration scopes. */
static unsigned decl_scope_depth;
/* Size (in elements) of increments by which we may expand the
@@ -1946,7 +2290,7 @@ static void add_AT_addr PROTO((dw_die_ref,
enum dwarf_attribute, char *));
static void add_AT_lbl_id PROTO((dw_die_ref,
enum dwarf_attribute, char *));
-static void add_AT_setion_offset PROTO((dw_die_ref,
+static void add_AT_section_offset PROTO((dw_die_ref,
enum dwarf_attribute, char *));
static int is_extern_subr_die PROTO((dw_die_ref));
static dw_attr_ref get_AT PROTO((dw_die_ref,
@@ -1977,7 +2321,7 @@ static void add_loc_descr PROTO((dw_loc_descr_ref *,
static void print_spaces PROTO((FILE *));
static void print_die PROTO((dw_die_ref, FILE *));
static void print_dwarf_line_table PROTO((FILE *));
-static void add_sibling_atttributes PROTO((dw_die_ref));
+static void add_sibling_attributes PROTO((dw_die_ref));
static void build_abbrev_table PROTO((dw_die_ref));
static unsigned long size_of_string PROTO((char *));
static unsigned long size_of_loc_descr PROTO((dw_loc_descr_ref));
@@ -2008,10 +2352,11 @@ static tree root_type PROTO((tree));
static int is_base_type PROTO((tree));
static dw_die_ref modified_type_die PROTO((tree, int, int, dw_die_ref));
static int type_is_enum PROTO((tree));
-static dw_loc_descr_ref reg_loc_descr_ref PROTO((rtx));
+static dw_loc_descr_ref reg_loc_descriptor PROTO((rtx));
static dw_loc_descr_ref based_loc_descr PROTO((unsigned, long));
static int is_based_loc PROTO((rtx));
static dw_loc_descr_ref mem_loc_descriptor PROTO((rtx));
+static dw_loc_descr_ref concat_loc_descriptor PROTO((rtx, rtx));
static dw_loc_descr_ref loc_descriptor PROTO((rtx));
static unsigned ceiling PROTO((unsigned, unsigned));
static tree field_type PROTO((tree));
@@ -2103,7 +2448,7 @@ static unsigned lookup_filename PROTO((char *));
#define STR_SECTION ".debug_str"
#endif
-/* Standerd ELF section names for compiled code and data. */
+/* Standard ELF section names for compiled code and data. */
#ifndef TEXT_SECTION
#define TEXT_SECTION ".text"
#endif
@@ -2314,7 +2659,7 @@ addr_to_string (x)
return xstrdup (buf);
}
-/* Test if rtl node points to a psuedo register. */
+/* Test if rtl node points to a pseudo register. */
static inline int
is_pseudo_reg (rtl)
@@ -3752,7 +4097,7 @@ print_spaces (outfile)
fprintf (outfile, "%*s", print_indent, "");
}
-/* Print the information assoaciated with a given DIE, and its children.
+/* Print the information associated with a given DIE, and its children.
This routine is a debugging aid only. */
static void
@@ -3819,6 +4164,8 @@ print_die (die, outfile)
else
fprintf (outfile, "<null>");
break;
+ default:
+ break;
}
fprintf (outfile, "\n");
@@ -3955,8 +4302,8 @@ build_abbrev_table (die)
{
n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
abbrev_die_table
- = (dw_die_ref *) xmalloc (abbrev_die_table,
- sizeof (dw_die_ref) * n_alloc);
+ = (dw_die_ref *) xrealloc (abbrev_die_table,
+ sizeof (dw_die_ref) * n_alloc);
bzero ((char *) &abbrev_die_table[abbrev_die_table_allocated],
(n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
@@ -4199,10 +4546,10 @@ size_of_die (die)
return size;
}
-/* Size the debgging information associted with a given DIE.
+/* Size the debugging information associated with a given DIE.
Visits the DIE's children recursively. Updates the global
variable next_die_offset, on each time through. Uses the
- current value of next_die_offset to updete the die_offset
+ current value of next_die_offset to update the die_offset
field in each DIE. */
static void
@@ -4432,7 +4779,7 @@ size_of_pubnames ()
return size;
}
-/* Return the size of the information in the .debug_aranges seciton. */
+/* Return the size of the information in the .debug_aranges section. */
static unsigned long
size_of_aranges ()
@@ -4516,7 +4863,7 @@ output_value_format (v)
enum dwarf_form form = value_format (v);
output_uleb128 (form);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, " (%s)", dwarf_form_name (form));
fputc ('\n', asm_out_file);
@@ -4536,12 +4883,12 @@ output_abbrev_section ()
register dw_die_ref abbrev = abbrev_die_table[abbrev_id];
output_uleb128 (abbrev_id);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, " (abbrev code)");
fputc ('\n', asm_out_file);
output_uleb128 (abbrev->die_tag);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, " (TAG: %s)",
dwarf_tag_name (abbrev->die_tag));
@@ -4549,7 +4896,7 @@ output_abbrev_section ()
fprintf (asm_out_file, "\t%s\t0x%x", ASM_BYTE_OP,
abbrev->die_child != NULL ? DW_children_yes : DW_children_no);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s %s",
ASM_COMMENT_START,
(abbrev->die_child != NULL
@@ -4561,7 +4908,7 @@ output_abbrev_section ()
a_attr = a_attr->dw_attr_next)
{
output_uleb128 (a_attr->dw_attr);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, " (%s)",
dwarf_attr_name (a_attr->dw_attr));
@@ -4723,7 +5070,7 @@ output_die (die)
register int i;
output_uleb128 (die->die_abbrev);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, " (DIE (0x%x) %s)",
die->die_offset, dwarf_tag_name (die->die_tag));
@@ -4754,7 +5101,7 @@ output_die (die)
abort ();
}
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s %s",
ASM_COMMENT_START, dwarf_attr_name (a->dw_attr));
@@ -4764,7 +5111,7 @@ output_die (die)
{
/* Output the opcode. */
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, loc->dw_loc_opc);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START,
dwarf_stack_op_name (loc->dw_loc_opc));
@@ -4806,7 +5153,7 @@ output_die (die)
case dw_val_class_long_long:
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 8);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s %s",
ASM_COMMENT_START, dwarf_attr_name (a->dw_attr));
@@ -4815,7 +5162,7 @@ output_die (die)
a->dw_attr_val.v.val_long_long.hi,
a->dw_attr_val.v.val_long_long.low);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file,
"\t%s long long constant", ASM_COMMENT_START);
@@ -4825,7 +5172,7 @@ output_die (die)
case dw_val_class_float:
ASM_OUTPUT_DWARF_DATA1 (asm_out_file,
a->dw_attr_val.v.val_float.length * 4);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s %s",
ASM_COMMENT_START, dwarf_attr_name (a->dw_attr));
@@ -4834,7 +5181,7 @@ output_die (die)
{
ASM_OUTPUT_DWARF_DATA4 (asm_out_file,
a->dw_attr_val.v.val_float.array[i]);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s fp constant word %d",
ASM_COMMENT_START, i);
@@ -4878,7 +5225,12 @@ output_die (die)
break;
case dw_val_class_str:
- ASM_OUTPUT_DWARF_STRING (asm_out_file, a->dw_attr_val.v.val_str);
+ if (flag_debug_asm)
+ ASM_OUTPUT_DWARF_STRING (asm_out_file, a->dw_attr_val.v.val_str);
+ else
+ ASM_OUTPUT_ASCII (asm_out_file,
+ a->dw_attr_val.v.val_str,
+ strlen (a->dw_attr_val.v.val_str) + 1);
break;
default:
@@ -4889,7 +5241,7 @@ output_die (die)
&& a->dw_attr_val.val_class != dw_val_class_long_long
&& a->dw_attr_val.val_class != dw_val_class_float)
{
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s %s",
ASM_COMMENT_START, dwarf_attr_name (a->dw_attr));
@@ -4904,7 +5256,7 @@ output_die (die)
{
/* Add null byte to terminate sibling list. */
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s end of children of DIE 0x%x",
ASM_COMMENT_START, die->die_offset);
@@ -4919,24 +5271,24 @@ static void
output_compilation_unit_header ()
{
ASM_OUTPUT_DWARF_DATA (asm_out_file, next_die_offset - DWARF_OFFSET_SIZE);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s Length of Compilation Unit Info.",
ASM_COMMENT_START);
fputc ('\n', asm_out_file);
ASM_OUTPUT_DWARF_DATA2 (asm_out_file, DWARF_VERSION);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DWARF version number", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
ASM_OUTPUT_DWARF_OFFSET (asm_out_file, stripattributes (ABBREV_SECTION));
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s Offset Into Abbrev. Section",
ASM_COMMENT_START);
fputc ('\n', asm_out_file);
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, PTR_SIZE);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s Pointer Size (in bytes)", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
@@ -4991,25 +5343,25 @@ output_pubnames ()
ASM_OUTPUT_DWARF_DATA (asm_out_file, pubnames_length);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s Length of Public Names Info.",
ASM_COMMENT_START);
fputc ('\n', asm_out_file);
ASM_OUTPUT_DWARF_DATA2 (asm_out_file, DWARF_VERSION);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DWARF Version", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
ASM_OUTPUT_DWARF_OFFSET (asm_out_file, stripattributes (DEBUG_INFO_SECTION));
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s Offset of Compilation Unit Info.",
ASM_COMMENT_START);
fputc ('\n', asm_out_file);
ASM_OUTPUT_DWARF_DATA (asm_out_file, next_die_offset);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s Compilation Unit Length", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
@@ -5018,14 +5370,20 @@ output_pubnames ()
register pubname_ref pub = &pubname_table[i];
ASM_OUTPUT_DWARF_DATA (asm_out_file, pub->die->die_offset);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DIE offset", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
- ASM_OUTPUT_DWARF_STRING (asm_out_file, pub->name);
- if (flag_verbose_asm)
- fprintf (asm_out_file, "%s external name", ASM_COMMENT_START);
+ if (flag_debug_asm)
+ {
+ ASM_OUTPUT_DWARF_STRING (asm_out_file, pub->name);
+ fprintf (asm_out_file, "%s external name", ASM_COMMENT_START);
+ }
+ else
+ {
+ ASM_OUTPUT_ASCII (asm_out_file, pub->name, strlen (pub->name) + 1);
+ }
fputc ('\n', asm_out_file);
}
@@ -5066,29 +5424,29 @@ output_aranges ()
register unsigned long aranges_length = size_of_aranges ();
ASM_OUTPUT_DWARF_DATA (asm_out_file, aranges_length);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s Length of Address Ranges Info.",
ASM_COMMENT_START);
fputc ('\n', asm_out_file);
ASM_OUTPUT_DWARF_DATA2 (asm_out_file, DWARF_VERSION);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DWARF Version", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
ASM_OUTPUT_DWARF_OFFSET (asm_out_file, stripattributes (DEBUG_INFO_SECTION));
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s Offset of Compilation Unit Info.",
ASM_COMMENT_START);
fputc ('\n', asm_out_file);
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, PTR_SIZE);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s Size of Address", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s Size of Segment Descriptor",
ASM_COMMENT_START);
@@ -5097,18 +5455,18 @@ output_aranges ()
if (PTR_SIZE == 8)
fprintf (asm_out_file, ",0,0");
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s Pad to %d byte boundary",
ASM_COMMENT_START, 2 * PTR_SIZE);
fputc ('\n', asm_out_file);
ASM_OUTPUT_DWARF_ADDR (asm_out_file, TEXT_SECTION);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s Address", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
ASM_OUTPUT_DWARF_ADDR_DELTA (asm_out_file, text_end_label, TEXT_SECTION);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "%s Length", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
@@ -5127,7 +5485,7 @@ output_aranges ()
ASM_OUTPUT_DWARF_ADDR (asm_out_file, name);
}
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s Address", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
@@ -5138,7 +5496,7 @@ output_aranges ()
ASM_OUTPUT_DWARF_ADDR_DATA (asm_out_file,
get_AT_unsigned (a, DW_AT_byte_size));
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "%s Length", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
@@ -5173,47 +5531,47 @@ output_line_info ()
register unsigned long function;
ASM_OUTPUT_DWARF_DATA (asm_out_file, size_of_line_info ());
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s Length of Source Line Info.",
ASM_COMMENT_START);
fputc ('\n', asm_out_file);
ASM_OUTPUT_DWARF_DATA2 (asm_out_file, DWARF_VERSION);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DWARF Version", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
ASM_OUTPUT_DWARF_DATA (asm_out_file, size_of_line_prolog ());
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s Prolog Length", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DWARF_LINE_MIN_INSTR_LENGTH);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s Minimum Instruction Length",
ASM_COMMENT_START);
fputc ('\n', asm_out_file);
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DWARF_LINE_DEFAULT_IS_STMT_START);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s Default is_stmt_start flag",
ASM_COMMENT_START);
fputc ('\n', asm_out_file);
fprintf (asm_out_file, "\t%s\t%d", ASM_BYTE_OP, DWARF_LINE_BASE);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s Line Base Value (Special Opcodes)",
ASM_COMMENT_START);
fputc ('\n', asm_out_file);
fprintf (asm_out_file, "\t%s\t%u", ASM_BYTE_OP, DWARF_LINE_RANGE);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s Line Range Value (Special Opcodes)",
ASM_COMMENT_START);
fputc ('\n', asm_out_file);
fprintf (asm_out_file, "\t%s\t%u", ASM_BYTE_OP, DWARF_LINE_OPCODE_BASE);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s Special Opcode Base", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
@@ -5233,27 +5591,35 @@ output_line_info ()
break;
}
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, n_op_args);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s opcode: 0x%x has %d args",
ASM_COMMENT_START, opc, n_op_args);
fputc ('\n', asm_out_file);
}
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "%s Include Directory Table\n", ASM_COMMENT_START);
/* Include directory table is empty, at present */
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
fputc ('\n', asm_out_file);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "%s File Name Table\n", ASM_COMMENT_START);
for (ft_index = 1; ft_index < file_table_in_use; ++ft_index)
{
- ASM_OUTPUT_DWARF_STRING (asm_out_file, file_table[ft_index]);
- if (flag_verbose_asm)
- fprintf (asm_out_file, "%s File Entry: 0x%x",
- ASM_COMMENT_START, ft_index);
+ if (flag_debug_asm)
+ {
+ ASM_OUTPUT_DWARF_STRING (asm_out_file, file_table[ft_index]);
+ fprintf (asm_out_file, "%s File Entry: 0x%x",
+ ASM_COMMENT_START, ft_index);
+ }
+ else
+ {
+ ASM_OUTPUT_ASCII (asm_out_file,
+ file_table[ft_index],
+ strlen (file_table[ft_index]) + 1);
+ }
fputc ('\n', asm_out_file);
@@ -5276,7 +5642,7 @@ output_line_info ()
/* Set the address register to the first location in the text section */
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DW_LNE_set_address", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
@@ -5311,7 +5677,7 @@ output_line_info ()
{
/* This can handle deltas up to 0xffff. This takes 3 bytes. */
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_fixed_advance_pc);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DW_LNS_fixed_advance_pc",
ASM_COMMENT_START);
@@ -5323,7 +5689,7 @@ output_line_info ()
{
/* This can handle any delta. This takes 4+PTR_SIZE bytes. */
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DW_LNE_set_address",
ASM_COMMENT_START);
fputc ('\n', asm_out_file);
@@ -5343,12 +5709,12 @@ output_line_info ()
{
current_file = line_info->dw_file_num;
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_set_file);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DW_LNS_set_file", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
output_uleb128 (current_file);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, " (\"%s\")", file_table[current_file]);
fputc ('\n', asm_out_file);
@@ -5366,7 +5732,7 @@ output_line_info ()
takes 1 byte. */
ASM_OUTPUT_DWARF_DATA1 (asm_out_file,
DWARF_LINE_OPCODE_BASE + line_delta);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file,
"\t%s line %d", ASM_COMMENT_START, current_line);
@@ -5377,7 +5743,7 @@ output_line_info ()
/* This can handle any delta. This takes at least 4 bytes, depending
on the value being encoded. */
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_advance_line);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s advance to line %d",
ASM_COMMENT_START, current_line);
@@ -5393,7 +5759,7 @@ output_line_info ()
if (0)
{
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_fixed_advance_pc);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DW_LNS_fixed_advance_pc",
ASM_COMMENT_START);
@@ -5404,7 +5770,7 @@ output_line_info ()
else
{
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DW_LNE_set_address", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
output_uleb128 (1 + PTR_SIZE);
@@ -5417,7 +5783,7 @@ output_line_info ()
/* Output the marker for the end of the line number info. */
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DW_LNE_end_sequence", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
@@ -5445,7 +5811,7 @@ output_line_info ()
/* Set the address register to the first line in the function */
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DW_LNE_set_address",
ASM_COMMENT_START);
@@ -5463,7 +5829,7 @@ output_line_info ()
if (0)
{
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_fixed_advance_pc);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DW_LNS_fixed_advance_pc",
ASM_COMMENT_START);
@@ -5475,7 +5841,7 @@ output_line_info ()
else
{
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DW_LNE_set_address",
ASM_COMMENT_START);
fputc ('\n', asm_out_file);
@@ -5495,12 +5861,12 @@ output_line_info ()
{
current_file = line_info->dw_file_num;
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_set_file);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DW_LNS_set_file", ASM_COMMENT_START);
fputc ('\n', asm_out_file);
output_uleb128 (current_file);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, " (\"%s\")", file_table[current_file]);
fputc ('\n', asm_out_file);
@@ -5517,7 +5883,7 @@ output_line_info ()
{
ASM_OUTPUT_DWARF_DATA1 (asm_out_file,
DWARF_LINE_OPCODE_BASE + line_delta);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file,
"\t%s line %d", ASM_COMMENT_START, current_line);
@@ -5526,7 +5892,7 @@ output_line_info ()
else
{
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_advance_line);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s advance to line %d",
ASM_COMMENT_START, current_line);
@@ -5552,7 +5918,7 @@ output_line_info ()
if (0)
{
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_fixed_advance_pc);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DW_LNS_fixed_advance_pc",
ASM_COMMENT_START);
@@ -5564,7 +5930,7 @@ output_line_info ()
else
{
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DW_LNE_set_address",
ASM_COMMENT_START);
fputc ('\n', asm_out_file);
@@ -5578,7 +5944,7 @@ output_line_info ()
/* Output the marker for the end of this sequence. */
ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
- if (flag_verbose_asm)
+ if (flag_debug_asm)
fprintf (asm_out_file, "\t%s DW_LNE_end_sequence",
ASM_COMMENT_START);
@@ -6033,6 +6399,30 @@ mem_loc_descriptor (rtl)
return mem_loc_result;
}
+/* Return a descriptor that describes the concatenation of two locations.
+ This is typically a complex variable. */
+
+static dw_loc_descr_ref
+concat_loc_descriptor (x0, x1)
+ register rtx x0, x1;
+{
+ dw_loc_descr_ref cc_loc_result = NULL;
+
+ if (!is_pseudo_reg (x0)
+ && (GET_CODE (x0) != MEM || !is_pseudo_reg (XEXP (x0, 0))))
+ add_loc_descr (&cc_loc_result, loc_descriptor (x0));
+ add_loc_descr (&cc_loc_result,
+ new_loc_descr (DW_OP_piece, GET_MODE_SIZE (GET_MODE (x0)), 0));
+
+ if (!is_pseudo_reg (x1)
+ && (GET_CODE (x1) != MEM || !is_pseudo_reg (XEXP (x1, 0))))
+ add_loc_descr (&cc_loc_result, loc_descriptor (x1));
+ add_loc_descr (&cc_loc_result,
+ new_loc_descr (DW_OP_piece, GET_MODE_SIZE (GET_MODE (x1)), 0));
+
+ return cc_loc_result;
+}
+
/* Output a proper Dwarf location descriptor for a variable or parameter
which is either allocated in a register or in a memory location. For a
register, we just generate an OP_REG and the register number. For a
@@ -6064,6 +6454,10 @@ loc_descriptor (rtl)
loc_result = mem_loc_descriptor (XEXP (rtl, 0));
break;
+ case CONCAT:
+ loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1));
+ break;
+
default:
abort ();
}
@@ -6271,7 +6665,10 @@ add_AT_location_description (die, attr_kind, rtl)
if (is_pseudo_reg (rtl)
|| (GET_CODE (rtl) == MEM
- && is_pseudo_reg (XEXP (rtl, 0))))
+ && is_pseudo_reg (XEXP (rtl, 0)))
+ || (GET_CODE (rtl) == CONCAT
+ && is_pseudo_reg (XEXP (rtl, 0))
+ && is_pseudo_reg (XEXP (rtl, 1))))
return;
add_AT_loc (die, attr_kind, loc_descriptor (rtl));
@@ -6519,7 +6916,7 @@ add_location_or_const_value_attribute (die, decl)
get valid non-NULL DECL_INCOMING_RTL values, but integrate.c
doesn't currently generate these values for inlined instances of
inline function parameters, so when we see such cases, we are
- just SOL (shit-out-of-luck) for the time being (until integrate.c
+ just out-of-luck for the time being (until integrate.c
gets fixed). */
/* Use DECL_RTL as the "location" unless we find something better. */
@@ -6555,6 +6952,11 @@ add_location_or_const_value_attribute (die, decl)
switch (GET_CODE (rtl))
{
+ case ADDRESSOF:
+ /* The address of a variable that was optimized away; don't emit
+ anything. */
+ break;
+
case CONST_INT:
case CONST_DOUBLE:
case CONST_STRING:
@@ -6569,6 +6971,7 @@ add_location_or_const_value_attribute (die, decl)
case MEM:
case REG:
case SUBREG:
+ case CONCAT:
add_AT_location_description (die, DW_AT_location, rtl);
break;
@@ -6667,6 +7070,7 @@ add_bound_info (subrange_die, bound_attr, bound)
case MAX_EXPR:
case VAR_DECL:
+ case COMPONENT_REF:
/* ??? These types of bounds can be created by the Ada front end,
and it isn't clear how to emit debug info for them. */
break;
@@ -7133,7 +7537,7 @@ decl_start_label (decl)
return fnname;
}
-/* These routines generate the internnal representation of the DIE's for
+/* These routines generate the internal representation of the DIE's for
the compilation unit. Debugging information is collected by walking
the declaration trees passed in from dwarf2out_decl(). */
@@ -7341,7 +7745,7 @@ gen_enumeration_type_die (type, context_die)
TREE_ASM_WRITTEN (type) = 1;
add_byte_size_attribute (type_die, type);
- if (type_tag (type))
+ if (TYPE_STUB_DECL (type) != NULL_TREE)
add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
/* If the first reference to this type was as the return type of an
@@ -7529,6 +7933,17 @@ gen_subprogram_die (decl, context_die)
subr_die = new_die (DW_TAG_subprogram, context_die);
add_abstract_origin_attribute (subr_die, origin);
}
+ else if (old_die && DECL_ABSTRACT (decl)
+ && get_AT_unsigned (old_die, DW_AT_inline))
+ {
+ /* This must be a redefinition of an extern inline function.
+ We can just reuse the old die here. */
+ subr_die = old_die;
+
+ /* Clear out the inlined attribute and parm types. */
+ remove_AT (subr_die, DW_AT_inline);
+ remove_children (subr_die);
+ }
else if (old_die)
{
register unsigned file_index
@@ -7613,6 +8028,10 @@ gen_subprogram_die (decl, context_die)
}
else if (DECL_ABSTRACT (decl))
{
+ /* ??? Checking DECL_DEFER_OUTPUT is correct for static inline functions,
+ but not for extern inline functions. We can't get this completely
+ correct because information about whether the function was declared
+ inline is not saved anywhere. */
if (DECL_DEFER_OUTPUT (decl))
{
if (DECL_INLINE (decl))
@@ -8054,6 +8473,9 @@ gen_compile_unit_die (main_input_filename)
else if (strcmp (language_string, "GNU F77") == 0)
add_AT_unsigned (comp_unit_die, DW_AT_language, DW_LANG_Fortran77);
+ else if (strcmp (language_string, "GNU Pascal") == 0)
+ add_AT_unsigned (comp_unit_die, DW_AT_language, DW_LANG_Pascal83);
+
else if (flag_traditional)
add_AT_unsigned (comp_unit_die, DW_AT_language, DW_LANG_C);
@@ -8105,7 +8527,7 @@ gen_inheritance_die (binfo, context_die)
add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
}
-/* Genearate a DIE for a class member. */
+/* Generate a DIE for a class member. */
static void
gen_member_die (type, context_die)
@@ -8198,7 +8620,7 @@ gen_struct_or_union_type_die (type, context_die)
this type is expressed in terms of this type itself. */
TREE_ASM_WRITTEN (type) = 1;
add_byte_size_attribute (type_die, type);
- if (type_tag (type))
+ if (TYPE_STUB_DECL (type) != NULL_TREE)
add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
/* If the first reference to this type was as the return type of an
@@ -8311,6 +8733,13 @@ gen_type_die (type, context_die)
case POINTER_TYPE:
case REFERENCE_TYPE:
+ /* We must set TREE_ASM_WRITTEN in case this is a recursive type. This
+ ensures that the gen_type_die recursion will terminate even if the
+ type is recursive. Recursive types are possible in Ada. */
+ /* ??? We could perhaps do this for all types before the switch
+ statement. */
+ TREE_ASM_WRITTEN (type) = 1;
+
/* For these types, all that is required is that we output a DIE (or a
set of DIEs) to represent the "basis" type. */
gen_type_die (TREE_TYPE (type), context_die);
@@ -8784,11 +9213,11 @@ dwarf2out_decl (decl)
/* What we would really like to do here is to filter out all mere
file-scope declarations of file-scope functions which are never
referenced later within this translation unit (and keep all of ones
- that *are* referenced later on) but we aren't clarvoiant, so we have
+ that *are* referenced later on) but we aren't clairvoyant, so we have
no idea which functions will be referenced in the future (i.e. later
on within the current translation unit). So here we just ignore all
file-scope function declarations which are not also definitions. If
- and when the debugger needs to know something about these funcstion,
+ and when the debugger needs to know something about these functions,
it wil have to hunt around and find the DWARF information associated
with the definition of the function. Note that we can't just check
`DECL_EXTERNAL' to find out which FUNCTION_DECL nodes represent
@@ -9131,10 +9560,6 @@ dwarf2out_init (asm_out_file, main_input_filename)
gen_compile_unit_die (main_input_filename);
ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
-
- /* Initialize the frame unwind information. Eventually this should be
- called from compile_file instead. */
- dwarf2out_frame_init ();
}
/* Output stuff that dwarf requires at the end of every file,
@@ -9191,10 +9616,6 @@ dwarf2out_finish ()
ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, BSS_END_LABEL, 0);
#endif
- /* Output the frame unwind information. Eventually this should be called
- from compile_file instead. */
- dwarf2out_frame_finish ();
-
/* Output the source line correspondence table. */
if (line_info_table_in_use > 1 || separate_line_info_table_in_use)
{
diff --git a/gcc/dwarfout.c b/gcc/dwarfout.c
index 8f094512681..7f42d061ab1 100644
--- a/gcc/dwarfout.c
+++ b/gcc/dwarfout.c
@@ -33,9 +33,6 @@ Boston, MA 02111-1307, USA. */
#include "output.h"
#include "defaults.h"
-/* #define NDEBUG 1 */
-#include "assert.h"
-
#if defined(DWARF_TIMESTAMPS)
#if defined(POSIX)
#include <time.h>
@@ -49,10 +46,36 @@ extern time_t time ();
#endif /* !defined(POSIX) */
#endif /* defined(DWARF_TIMESTAMPS) */
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#endif
+
+/* We cannot use <assert.h> in GCC source, since that would include
+ GCC's assert.h, which may not be compatible with the host compiler. */
+#undef assert
+#ifdef NDEBUG
+# define assert(e)
+#else
+# define assert(e) do { if (! (e)) abort (); } while (0)
+#endif
+
extern char *getpwd ();
+#ifdef NEED_DECLARATION_INDEX
extern char *index ();
+#endif
+
+#ifdef NEED_DECLARATION_RINDEX
extern char *rindex ();
+#endif
/* IMPORTANT NOTE: Please see the file README.DWARF for important details
regarding the GNU implementation of Dwarf. */
@@ -357,7 +380,7 @@ static inline void low_pc_attribute PROTO((char *));
static inline void high_pc_attribute PROTO((char *));
static inline void body_begin_attribute PROTO((char *));
static inline void body_end_attribute PROTO((char *));
-static inline void langauge_attribute PROTO((unsigned));
+static inline void language_attribute PROTO((unsigned));
static inline void member_attribute PROTO((tree));
static inline void string_length_attribute PROTO((tree));
static inline void comp_dir_attribute PROTO((char *));
@@ -417,7 +440,7 @@ static void output_block PROTO((tree, int));
static void output_decls_for_scope PROTO((tree, int));
static void output_decl PROTO((tree, tree));
static void shuffle_filename_entry PROTO((filename_entry *));
-static void geneate_new_sfname_entry PROTO((void));
+static void generate_new_sfname_entry PROTO((void));
static unsigned lookup_filename PROTO((char *));
static void generate_srcinfo_entry PROTO((unsigned, unsigned));
static void generate_macinfo_entry PROTO((char *, char *));
@@ -531,153 +554,153 @@ static void generate_macinfo_entry PROTO((char *, char *));
*/
#ifndef TEXT_BEGIN_LABEL
-#define TEXT_BEGIN_LABEL ".L_text_b"
+#define TEXT_BEGIN_LABEL "*.L_text_b"
#endif
#ifndef TEXT_END_LABEL
-#define TEXT_END_LABEL ".L_text_e"
+#define TEXT_END_LABEL "*.L_text_e"
#endif
#ifndef DATA_BEGIN_LABEL
-#define DATA_BEGIN_LABEL ".L_data_b"
+#define DATA_BEGIN_LABEL "*.L_data_b"
#endif
#ifndef DATA_END_LABEL
-#define DATA_END_LABEL ".L_data_e"
+#define DATA_END_LABEL "*.L_data_e"
#endif
#ifndef DATA1_BEGIN_LABEL
-#define DATA1_BEGIN_LABEL ".L_data1_b"
+#define DATA1_BEGIN_LABEL "*.L_data1_b"
#endif
#ifndef DATA1_END_LABEL
-#define DATA1_END_LABEL ".L_data1_e"
+#define DATA1_END_LABEL "*.L_data1_e"
#endif
#ifndef RODATA_BEGIN_LABEL
-#define RODATA_BEGIN_LABEL ".L_rodata_b"
+#define RODATA_BEGIN_LABEL "*.L_rodata_b"
#endif
#ifndef RODATA_END_LABEL
-#define RODATA_END_LABEL ".L_rodata_e"
+#define RODATA_END_LABEL "*.L_rodata_e"
#endif
#ifndef RODATA1_BEGIN_LABEL
-#define RODATA1_BEGIN_LABEL ".L_rodata1_b"
+#define RODATA1_BEGIN_LABEL "*.L_rodata1_b"
#endif
#ifndef RODATA1_END_LABEL
-#define RODATA1_END_LABEL ".L_rodata1_e"
+#define RODATA1_END_LABEL "*.L_rodata1_e"
#endif
#ifndef BSS_BEGIN_LABEL
-#define BSS_BEGIN_LABEL ".L_bss_b"
+#define BSS_BEGIN_LABEL "*.L_bss_b"
#endif
#ifndef BSS_END_LABEL
-#define BSS_END_LABEL ".L_bss_e"
+#define BSS_END_LABEL "*.L_bss_e"
#endif
#ifndef LINE_BEGIN_LABEL
-#define LINE_BEGIN_LABEL ".L_line_b"
+#define LINE_BEGIN_LABEL "*.L_line_b"
#endif
#ifndef LINE_LAST_ENTRY_LABEL
-#define LINE_LAST_ENTRY_LABEL ".L_line_last"
+#define LINE_LAST_ENTRY_LABEL "*.L_line_last"
#endif
#ifndef LINE_END_LABEL
-#define LINE_END_LABEL ".L_line_e"
+#define LINE_END_LABEL "*.L_line_e"
#endif
#ifndef DEBUG_BEGIN_LABEL
-#define DEBUG_BEGIN_LABEL ".L_debug_b"
+#define DEBUG_BEGIN_LABEL "*.L_debug_b"
#endif
#ifndef SFNAMES_BEGIN_LABEL
-#define SFNAMES_BEGIN_LABEL ".L_sfnames_b"
+#define SFNAMES_BEGIN_LABEL "*.L_sfnames_b"
#endif
#ifndef SRCINFO_BEGIN_LABEL
-#define SRCINFO_BEGIN_LABEL ".L_srcinfo_b"
+#define SRCINFO_BEGIN_LABEL "*.L_srcinfo_b"
#endif
#ifndef MACINFO_BEGIN_LABEL
-#define MACINFO_BEGIN_LABEL ".L_macinfo_b"
+#define MACINFO_BEGIN_LABEL "*.L_macinfo_b"
#endif
#ifndef DIE_BEGIN_LABEL_FMT
-#define DIE_BEGIN_LABEL_FMT ".L_D%u"
+#define DIE_BEGIN_LABEL_FMT "*.L_D%u"
#endif
#ifndef DIE_END_LABEL_FMT
-#define DIE_END_LABEL_FMT ".L_D%u_e"
+#define DIE_END_LABEL_FMT "*.L_D%u_e"
#endif
#ifndef PUB_DIE_LABEL_FMT
-#define PUB_DIE_LABEL_FMT ".L_P%u"
+#define PUB_DIE_LABEL_FMT "*.L_P%u"
#endif
#ifndef INSN_LABEL_FMT
-#define INSN_LABEL_FMT ".L_I%u_%u"
+#define INSN_LABEL_FMT "*.L_I%u_%u"
#endif
#ifndef BLOCK_BEGIN_LABEL_FMT
-#define BLOCK_BEGIN_LABEL_FMT ".L_B%u"
+#define BLOCK_BEGIN_LABEL_FMT "*.L_B%u"
#endif
#ifndef BLOCK_END_LABEL_FMT
-#define BLOCK_END_LABEL_FMT ".L_B%u_e"
+#define BLOCK_END_LABEL_FMT "*.L_B%u_e"
#endif
#ifndef SS_BEGIN_LABEL_FMT
-#define SS_BEGIN_LABEL_FMT ".L_s%u"
+#define SS_BEGIN_LABEL_FMT "*.L_s%u"
#endif
#ifndef SS_END_LABEL_FMT
-#define SS_END_LABEL_FMT ".L_s%u_e"
+#define SS_END_LABEL_FMT "*.L_s%u_e"
#endif
#ifndef EE_BEGIN_LABEL_FMT
-#define EE_BEGIN_LABEL_FMT ".L_e%u"
+#define EE_BEGIN_LABEL_FMT "*.L_e%u"
#endif
#ifndef EE_END_LABEL_FMT
-#define EE_END_LABEL_FMT ".L_e%u_e"
+#define EE_END_LABEL_FMT "*.L_e%u_e"
#endif
#ifndef MT_BEGIN_LABEL_FMT
-#define MT_BEGIN_LABEL_FMT ".L_t%u"
+#define MT_BEGIN_LABEL_FMT "*.L_t%u"
#endif
#ifndef MT_END_LABEL_FMT
-#define MT_END_LABEL_FMT ".L_t%u_e"
+#define MT_END_LABEL_FMT "*.L_t%u_e"
#endif
#ifndef LOC_BEGIN_LABEL_FMT
-#define LOC_BEGIN_LABEL_FMT ".L_l%u"
+#define LOC_BEGIN_LABEL_FMT "*.L_l%u"
#endif
#ifndef LOC_END_LABEL_FMT
-#define LOC_END_LABEL_FMT ".L_l%u_e"
+#define LOC_END_LABEL_FMT "*.L_l%u_e"
#endif
#ifndef BOUND_BEGIN_LABEL_FMT
-#define BOUND_BEGIN_LABEL_FMT ".L_b%u_%u_%c"
+#define BOUND_BEGIN_LABEL_FMT "*.L_b%u_%u_%c"
#endif
#ifndef BOUND_END_LABEL_FMT
-#define BOUND_END_LABEL_FMT ".L_b%u_%u_%c_e"
+#define BOUND_END_LABEL_FMT "*.L_b%u_%u_%c_e"
#endif
#ifndef DERIV_BEGIN_LABEL_FMT
-#define DERIV_BEGIN_LABEL_FMT ".L_d%u"
+#define DERIV_BEGIN_LABEL_FMT "*.L_d%u"
#endif
#ifndef DERIV_END_LABEL_FMT
-#define DERIV_END_LABEL_FMT ".L_d%u_e"
+#define DERIV_END_LABEL_FMT "*.L_d%u_e"
#endif
#ifndef SL_BEGIN_LABEL_FMT
-#define SL_BEGIN_LABEL_FMT ".L_sl%u"
+#define SL_BEGIN_LABEL_FMT "*.L_sl%u"
#endif
#ifndef SL_END_LABEL_FMT
-#define SL_END_LABEL_FMT ".L_sl%u_e"
+#define SL_END_LABEL_FMT "*.L_sl%u_e"
#endif
#ifndef BODY_BEGIN_LABEL_FMT
-#define BODY_BEGIN_LABEL_FMT ".L_b%u"
+#define BODY_BEGIN_LABEL_FMT "*.L_b%u"
#endif
#ifndef BODY_END_LABEL_FMT
-#define BODY_END_LABEL_FMT ".L_b%u_e"
+#define BODY_END_LABEL_FMT "*.L_b%u_e"
#endif
#ifndef FUNC_END_LABEL_FMT
-#define FUNC_END_LABEL_FMT ".L_f%u_e"
+#define FUNC_END_LABEL_FMT "*.L_f%u_e"
#endif
#ifndef TYPE_NAME_FMT
-#define TYPE_NAME_FMT ".L_T%u"
+#define TYPE_NAME_FMT "*.L_T%u"
#endif
#ifndef DECL_NAME_FMT
-#define DECL_NAME_FMT ".L_E%u"
+#define DECL_NAME_FMT "*.L_E%u"
#endif
#ifndef LINE_CODE_LABEL_FMT
-#define LINE_CODE_LABEL_FMT ".L_LC%u"
+#define LINE_CODE_LABEL_FMT "*.L_LC%u"
#endif
#ifndef SFNAMES_ENTRY_LABEL_FMT
-#define SFNAMES_ENTRY_LABEL_FMT ".L_F%u"
+#define SFNAMES_ENTRY_LABEL_FMT "*.L_F%u"
#endif
#ifndef LINE_ENTRY_LABEL_FMT
-#define LINE_ENTRY_LABEL_FMT ".L_LE%u"
+#define LINE_ENTRY_LABEL_FMT "*.L_LE%u"
#endif
/* Definitions of defaults for various types of primitive assembly language
@@ -2367,7 +2390,7 @@ location_or_const_value_attribute (decl)
shouldn't be happening. All PARM_DECL nodes should get valid non-NULL
DECL_INCOMING_RTL values, but integrate.c doesn't currently generate
these values for inlined instances of inline function parameters, so
- when we see such cases, we are just SOL (shit-out-of-luck) for the time
+ when we see such cases, we are just out-of-luck for the time
being (until integrate.c gets fixed).
*/
@@ -2403,6 +2426,11 @@ location_or_const_value_attribute (decl)
switch (GET_CODE (rtl))
{
+ case ADDRESSOF:
+ /* The address of a variable that was optimized away; don't emit
+ anything. */
+ break;
+
case CONST_INT:
case CONST_DOUBLE:
case CONST_STRING:
@@ -3661,6 +3689,8 @@ output_compile_unit_die (arg)
language_attribute (LANG_ADA83);
else if (strcmp (language_string, "GNU F77") == 0)
language_attribute (LANG_FORTRAN77);
+ else if (strcmp (language_string, "GNU Pascal") == 0)
+ language_attribute (LANG_PASCAL83);
else if (flag_traditional)
language_attribute (LANG_C);
else
@@ -4172,7 +4202,22 @@ output_type (type, containing_scope)
type = type_main_variant (type);
if (TREE_ASM_WRITTEN (type))
- return;
+ {
+ if (finalizing && AGGREGATE_TYPE_P (type))
+ {
+ register tree member;
+
+ /* Some of our nested types might not have been defined when we
+ were written out before; force them out now. */
+
+ for (member = TYPE_FIELDS (type); member;
+ member = TREE_CHAIN (member))
+ if (TREE_CODE (member) == TYPE_DECL
+ && ! TREE_ASM_WRITTEN (TREE_TYPE (member)))
+ output_type (TREE_TYPE (member), containing_scope);
+ }
+ return;
+ }
/* If this is a nested type whose containing class hasn't been
written out yet, writing it out will cover this one, too. */
@@ -5142,7 +5187,7 @@ dwarfout_file_scope_decl (decl, set_finalizing)
a return type or a formal parameter type of some function. */
if (debug_info_level <= DINFO_LEVEL_TERSE)
- if (DECL_NAME (decl) != NULL
+ if (! TYPE_DECL_IS_STUB (decl)
|| ! TYPE_USED_FOR_FUNCTION (TREE_TYPE (decl)))
return;
@@ -5494,7 +5539,10 @@ dwarfout_start_new_source_file (filename)
sprintf (label, SFNAMES_ENTRY_LABEL_FMT, lookup_filename (filename));
sprintf (type_and_offset, "0x%08x+%s-%s",
- ((unsigned) MACINFO_start << 24), label, SFNAMES_BEGIN_LABEL);
+ ((unsigned) MACINFO_start << 24),
+ /* Hack: skip leading '*' . */
+ (*label == '*') + label,
+ (*SFNAMES_BEGIN_LABEL == '*') + SFNAMES_BEGIN_LABEL);
generate_macinfo_entry (type_and_offset, "");
}
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 650c01c7852..d9a78d7e5a3 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -1,5 +1,5 @@
/* Emit RTL for the GNU C-Compiler expander.
- Copyright (C) 1987, 88, 92-96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 92-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -35,6 +35,7 @@ Boston, MA 02111-1307, USA. */
is the kind of rtx's they make and what arguments they use. */
#include "config.h"
+#include <stdio.h>
#ifdef __STDC__
#include <stdarg.h>
#else
@@ -47,7 +48,9 @@ Boston, MA 02111-1307, USA. */
#include "function.h"
#include "expr.h"
#include "regs.h"
+#include "hard-reg-set.h"
#include "insn-config.h"
+#include "recog.h"
#include "real.h"
#include "obstack.h"
@@ -58,8 +61,6 @@ Boston, MA 02111-1307, USA. */
#include "bc-optab.h"
#include "bc-emit.h"
-#include <stdio.h>
-
/* Opcode names */
#ifdef BCDEBUG_PRINT_CODE
char *opcode_name[] =
@@ -258,6 +259,10 @@ extern int rtx_equal_function_value_matters;
whether we actually emitted it or not. */
extern char *emit_filename;
extern int emit_lineno;
+
+static rtx make_jump_insn_raw PROTO((rtx));
+static rtx make_call_insn_raw PROTO((rtx));
+static rtx find_line_node PROTO((rtx));
/* rtx gen_rtx (code, mode, [element1, ..., elementn])
**
@@ -681,6 +686,14 @@ gen_lowpart_common (mode, x)
/* integrate.c can't handle parts of a return value register. */
&& (! REG_FUNCTION_VALUE_P (x)
|| ! rtx_equal_function_value_matters)
+#ifdef CLASS_CANNOT_CHANGE_SIZE
+ && ! (GET_MODE_SIZE (mode) != GET_MODE_SIZE (GET_MODE (x))
+ && GET_MODE_CLASS (GET_MODE (x)) != MODE_COMPLEX_INT
+ && GET_MODE_CLASS (GET_MODE (x)) != MODE_COMPLEX_FLOAT
+ && (TEST_HARD_REG_BIT
+ (reg_class_contents[(int) CLASS_CANNOT_CHANGE_SIZE],
+ REGNO (x))))
+#endif
/* We want to keep the stack, frame, and arg pointers
special. */
&& x != frame_pointer_rtx
@@ -809,6 +822,26 @@ gen_lowpart_common (mode, x)
return CONST_DOUBLE_FROM_REAL_VALUE (u.d, mode);
}
#endif
+
+ /* We need an extra case for machines where HOST_BITS_PER_WIDE_INT is the
+ same as sizeof (double), such as the alpha. We only handle the
+ REAL_ARITHMETIC case, which is easy. Testing HOST_BITS_PER_WIDE_INT
+ is not strictly necessary, but is done to restrict this code to cases
+ where it is known to work. */
+#ifdef REAL_ARITHMETIC
+ else if (mode == SFmode
+ && GET_CODE (x) == CONST_INT
+ && GET_MODE_BITSIZE (mode) * 2 == HOST_BITS_PER_WIDE_INT)
+ {
+ REAL_VALUE_TYPE r;
+ HOST_WIDE_INT i;
+
+ i = INTVAL (x);
+ r = REAL_VALUE_FROM_TARGET_SINGLE (i);
+ return CONST_DOUBLE_FROM_REAL_VALUE (r, mode);
+ }
+#endif
+
/* Similarly, if this is converting a floating-point value into a
single-word integer. Only do this is the host and target parameters are
compatible. */
@@ -938,6 +971,8 @@ gen_lowpart (mode, x)
return change_address (x, mode, plus_constant (XEXP (x, 0), offset));
}
+ else if (GET_CODE (x) == ADDRESSOF)
+ return gen_lowpart (mode, force_reg (GET_MODE (x), x));
else
abort ();
}
@@ -1424,7 +1459,8 @@ gen_label_rtx ()
label = (output_bytecode
? gen_rtx (CODE_LABEL, VOIDmode, NULL, bc_get_bytecode_label ())
- : gen_rtx (CODE_LABEL, VOIDmode, 0, 0, 0, label_num++, NULL_PTR));
+ : gen_rtx (CODE_LABEL, VOIDmode, 0, NULL_RTX,
+ NULL_RTX, label_num++, NULL_PTR));
LABEL_NUSES (label) = 0;
return label;
@@ -1441,7 +1477,7 @@ gen_inline_header_rtx (first_insn, first_parm_insn, first_labelno,
pops_args, stack_slots, forced_labels, function_flags,
outgoing_args_size, original_arg_vector,
original_decl_initial, regno_rtx, regno_flag,
- regno_align)
+ regno_align, parm_reg_stack_loc)
rtx first_insn, first_parm_insn;
int first_labelno, last_labelno, max_parm_regnum, max_regnum, args_size;
int pops_args;
@@ -1454,6 +1490,7 @@ gen_inline_header_rtx (first_insn, first_parm_insn, first_labelno,
rtvec regno_rtx;
char *regno_flag;
char *regno_align;
+ rtvec parm_reg_stack_loc;
{
rtx header = gen_rtx (INLINE_HEADER, VOIDmode,
cur_insn_uid++, NULL_RTX,
@@ -1463,7 +1500,8 @@ gen_inline_header_rtx (first_insn, first_parm_insn, first_labelno,
stack_slots, forced_labels, function_flags,
outgoing_args_size, original_arg_vector,
original_decl_initial,
- regno_rtx, regno_flag, regno_align);
+ regno_rtx, regno_flag, regno_align,
+ parm_reg_stack_loc);
return header;
}
@@ -1653,6 +1691,10 @@ copy_rtx_if_shared (orig)
x->used = 1;
return x;
}
+ break;
+
+ default:
+ break;
}
/* This rtx may not be shared. If it has already been seen,
@@ -1742,6 +1784,9 @@ reset_used_flags (x)
case BARRIER:
/* The chain of insns is not being copied. */
return;
+
+ default:
+ break;
}
x->used = 0;
@@ -3176,6 +3221,7 @@ gen_sequence ()
(Now that we cache SEQUENCE expressions, it isn't worth special-casing
the case of an empty list.) */
if (len == 1
+ && ! RTX_FRAME_RELATED_P (first_insn)
&& (GET_CODE (first_insn) == INSN
|| GET_CODE (first_insn) == JUMP_INSN
/* Don't discard the call usage field. */
diff --git a/gcc/enquire.c b/gcc/enquire.c
index 5bd34d8860a..b46c7d33066 100644
--- a/gcc/enquire.c
+++ b/gcc/enquire.c
@@ -421,6 +421,13 @@
#ifdef VERIFY
#include "limits.h"
+#endif
+
+#ifndef SYS_FLOAT_H_WRAP
+#define SYS_FLOAT_H_WRAP 0
+#endif
+
+#if SYS_FLOAT_H_WRAP || defined VERIFY
#include "float.h"
#endif
@@ -477,7 +484,8 @@ Procedure endian ARGS((int bits_per_byte));
int exponent ARGS((Long_double x, double *fract, int *exp));
int floor_log ARGS((int base, Long_double x));
Procedure f_define ARGS((char *desc, char *extra, char *sort, char *name,
- int prec, Long_double val, char *mark));
+ int prec, Long_double val, Long_double req,
+ char *mark));
Procedure i_define ARGS((char *desc, char *extra, char *sort, char *name,
long val, long lim, long req, char *mark));
Procedure u_define ARGS((char *desc, char *extra, char *sort, char *name,
@@ -704,6 +712,8 @@ int main(argc, argv) int argc; char *argv[]; {
if (F) {
printf ("#ifndef _FLOAT_H___\n");
printf ("#define _FLOAT_H___\n");
+ if (SYS_FLOAT_H_WRAP)
+ printf ("#include_next <float.h>\n");
}
#ifdef ID
printf("%sProduced on %s by enquire version %s, CWI, Amsterdam%s\n",
@@ -772,7 +782,7 @@ int main(argc, argv) int argc; char *argv[]; {
size/=2;
}
- Vprintf("%sMemory mallocatable ~= %ld Kbytes%s\n",
+ Vprintf("%sMemory allocable ~= %ld Kbytes%s\n",
co, (total+511)/512, oc);
}
#endif
@@ -798,6 +808,8 @@ Procedure describe(description, extra) char *description, *extra; {
Procedure i_define(desc, extra, sort, name, val, lim, req, mark)
char *desc, *extra, *sort, *name; long val, lim, req; char *mark; {
+ if (SYS_FLOAT_H_WRAP && F && val == req)
+ return;
/* Produce a #define for a signed int type */
describe(desc, extra);
printf("#undef %s%s\n", sort, name);
@@ -812,15 +824,13 @@ Procedure i_define(desc, extra, sort, name, val, lim, req, mark)
} else {
printf("#define %s%s (%ld%s)\n", sort, name, val, mark);
}
- /* If VERIFY is not set, val and req are just the same value;
- if it is set, val is the value as calculated, and req is
- the #defined constant
- */
+#ifdef VERIFY
if (val != req) {
printf("%s*** Verify failed for above #define!\n", co);
printf(" Compiler has %ld for value%s\n\n", req, oc);
bugs++;
}
+#endif
Vprintf("\n");
}
@@ -830,17 +840,21 @@ Procedure u_define(desc, extra, sort, name, val, req, mark)
describe(desc, extra);
printf("#undef %s%s\n", sort, name);
printf("#define %s%s %lu%s%s\n", sort, name, val, U, mark);
+#ifdef VERIFY
if (val != req) {
printf("%s*** Verify failed for above #define!\n", co);
printf(" Compiler has %lu for value%s\n\n", req, oc);
bugs++;
}
+#endif
Vprintf("\n");
}
-Procedure f_define(desc, extra, sort, name, precision, val, mark)
+Procedure f_define(desc, extra, sort, name, precision, val, req, mark)
char *desc, *extra, *sort, *name; int precision;
- Long_double val; char *mark; {
+ Long_double val, req; char *mark; {
+ if (SYS_FLOAT_H_WRAP && F && val == req)
+ return;
/* Produce a #define for a float/double/long double */
describe(desc, extra);
printf ("#undef %s%s\n", sort, name);
@@ -1394,21 +1408,42 @@ int cprop() {
c=0; char_max=0;
c++;
- if (setjmp(lab)==0) { /* Yields char_max */
- while (c>char_max) {
- char_max=c;
- c++;
- }
+ if (bits_per_byte <= 16) {
+ if (setjmp(lab)==0) { /* Yields char_max */
+ while (c>char_max) {
+ char_max=c;
+ c++;
+ }
+ } else {
+ Vprintf("%sCharacter overflow generates a trap!%s\n",
+ co, oc);
+ }
+ c=0; char_min=0;
+ c--;
+ if (setjmp(lab)==0) { /* Yields char_min */
+ while (c<char_min) {
+ char_min=c;
+ c--;
+ }
+ }
} else {
- Vprintf("%sCharacter overflow generates a trap!%s\n", co, oc);
- }
- c=0; char_min=0;
- c--;
- if (setjmp(lab)==0) { /* Yields char_min */
- while (c<char_min) {
- char_min=c;
- c--;
- }
+ /* An exhaustive search here is impracticable ;-) */
+ c = (1 << (bits_per_byte - 1)) - 1;
+ char_max = c;
+ c++;
+ if (c > char_max)
+ char_max = ~0;
+ c = 0;
+ char_min = 0;
+ c--;
+ if (c < char_min) {
+ c = (1 << (bits_per_byte - 1)) - 1;
+ c = -c;
+ char_min = c;
+ c--;
+ if (c < char_min)
+ char_min = c;
+ }
}
if (c_signed && char_min == 0) {
Vprintf("%sBEWARE! Chars are pseudo-unsigned:%s\n", co, oc);
@@ -1590,18 +1625,20 @@ if (V) printf ("%s%s %s %s%s\n", co, "Type size_t is",
Vprintf("\n%sPROPERTIES OF POINTERS%s\n", co, oc);
- if ((long) (char *) &variable == (long) (int *) &variable)
+ if ((long) (char *) &variable == (long) (int *) &variable) {
Vprintf("%sChar and int pointer formats seem identical%s\n",
co, oc);
- else
+ } else {
Vprintf("%sChar and int pointer formats are different%s\n",
co, oc);
- if ((long) (char *) &variable == (long) (function *) &variable)
+ }
+ if ((long) (char *) &variable == (long) (function *) &variable) {
Vprintf("%sChar and function pointer formats seem identical%s\n",
co, oc);
- else
+ } else {
Vprintf("%sChar and function pointer formats are different%s\n",
co, oc);
+ }
if (V) {
if ("abcd"=="abcd")
@@ -1745,7 +1782,6 @@ extern char *f_rep();
#define UPROP usprop
#define Uname "USHRT"
-#ifdef VERIFY
#ifdef SHRT_MAX
#define I_MAX SHRT_MAX
#endif
@@ -1789,7 +1825,6 @@ extern char *f_rep();
#ifdef FLT_MAX_10_EXP
#define F_MAX_10_EXP FLT_MAX_10_EXP
#endif
-#endif /* VERIFY */
#endif /* PASS1 */
@@ -1831,7 +1866,6 @@ extern char *f_rep();
#define UPROP uiprop
#define Uname "UINT"
-#ifdef VERIFY
#ifdef INT_MAX
#define I_MAX INT_MAX
#endif
@@ -1869,7 +1903,6 @@ extern char *f_rep();
#ifdef DBL_MAX_10_EXP
#define F_MAX_10_EXP DBL_MAX_10_EXP
#endif
-#endif /* VERIFY */
#endif /* PASS2 */
@@ -1917,7 +1950,6 @@ extern char *f_rep();
#define UPROP ulprop
#define Uname "ULONG"
-#ifdef VERIFY
#ifdef LONG_MAX
#define I_MAX LONG_MAX
#endif
@@ -1955,52 +1987,53 @@ extern char *f_rep();
#ifdef LDBL_MAX_10_EXP
#define F_MAX_10_EXP LDBL_MAX_10_EXP
#endif
-#endif /* VERIFY */
#endif /* PASS3 */
+#define UNDEFINED (-2)
+
#ifndef I_MAX
-#define I_MAX int_max
+#define I_MAX ((unsigned long) UNDEFINED)
#endif
#ifndef I_MIN
-#define I_MIN int_min
+#define I_MIN ((unsigned long) UNDEFINED)
#endif
#ifndef U_MAX
-#define U_MAX u_max
+#define U_MAX ((unsigned long) UNDEFINED)
#endif
#ifndef F_RADIX
-#define F_RADIX f_radix
+#define F_RADIX UNDEFINED
#endif
#ifndef F_MANT_DIG
-#define F_MANT_DIG f_mant_dig
+#define F_MANT_DIG UNDEFINED
#endif
#ifndef F_DIG
-#define F_DIG f_dig
+#define F_DIG UNDEFINED
#endif
#ifndef F_ROUNDS
-#define F_ROUNDS f_rounds
+#define F_ROUNDS UNDEFINED
#endif
#ifndef F_EPSILON
-#define F_EPSILON f_epsilon
+#define F_EPSILON ((Number) UNDEFINED)
#endif
#ifndef F_MIN_EXP
-#define F_MIN_EXP f_min_exp
+#define F_MIN_EXP UNDEFINED
#endif
#ifndef F_MIN
-#define F_MIN f_min
+#define F_MIN ((Number) UNDEFINED)
#endif
#ifndef F_MIN_10_EXP
-#define F_MIN_10_EXP f_min_10_exp
+#define F_MIN_10_EXP UNDEFINED
#endif
#ifndef F_MAX_EXP
-#define F_MAX_EXP f_max_exp
+#define F_MAX_EXP UNDEFINED
#endif
#ifndef F_MAX
-#define F_MAX f_max
+#define F_MAX ((Number) UNDEFINED)
#endif
#ifndef F_MAX_10_EXP
-#define F_MAX_10_EXP f_max_10_exp
+#define F_MAX_10_EXP UNDEFINED
#endif
#ifndef VERIFY
@@ -2405,7 +2438,9 @@ int FPROP(bits_per_byte) int bits_per_byte; {
}
if (PASS == 1) { /* only for FLT */
flt_rounds= f_rounds;
- if (F)
+ /* Prefer system float.h definition of F_ROUNDS,
+ since it's more likely to be right than our "1". */
+ if (F && (!SYS_FLOAT_H_WRAP || F_ROUNDS == UNDEFINED))
i_define(D_FLT_ROUNDS, "", "FLT", "_ROUNDS",
(long) f_rounds, 1L, (long) F_ROUNDS, "");
} else if (f_rounds != flt_rounds) {
@@ -2492,7 +2527,9 @@ int FPROP(bits_per_byte) int bits_per_byte; {
/* Possible loss of precision warnings here from non-stdc compilers */
if (F) f_define(D_EPSILON, thing,
- Fname, "_EPSILON", digs, (Long_double) f_epsilon, MARK);
+ Fname, "_EPSILON", digs,
+ (Long_double) f_epsilon,
+ (Long_double) F_EPSILON, MARK);
if (V || F) F_check(digs, (Long_double) f_epsilon);
Unexpected(21);
if (F) Validate(digs, (Long_double) f_epsilon, (Long_double) F_EPSILON,
@@ -2570,7 +2607,9 @@ int FPROP(bits_per_byte) int bits_per_byte; {
/* Possible loss of precision warnings here from non-stdc compilers */
if (setjmp(lab) == 0) {
if (F) f_define(D_MIN, thing,
- Fname, "_MIN", digs, (Long_double) f_min, MARK);
+ Fname, "_MIN", digs,
+ (Long_double) f_min,
+ (Long_double) F_MIN, MARK);
if (V || F) F_check(digs, (Long_double) f_min);
} else {
eek_a_bug("xxx_MIN caused a trap");
@@ -2664,7 +2703,9 @@ int FPROP(bits_per_byte) int bits_per_byte; {
if (setjmp(lab)==0) {
/* Possible loss of precision warnings here from non-stdc compilers */
if (F) f_define(D_MAX, thing,
- Fname, "_MAX", digs, (Long_double) f_max, MARK);
+ Fname, "_MAX", digs,
+ (Long_double) f_max,
+ (Long_double) F_MAX, MARK);
if (V || F) F_check(digs, (Long_double) f_max);
} else {
eek_a_bug("xxx_MAX caused a trap");
diff --git a/gcc/except.c b/gcc/except.c
index 705e1a8bfb6..6aea0ec09f7 100644
--- a/gcc/except.c
+++ b/gcc/except.c
@@ -1,5 +1,5 @@
/* Implements exception handling.
- Copyright (C) 1989, 92-95, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1989, 92-97, 1998 Free Software Foundation, Inc.
Contributed by Mike Stump <mrs@cygnus.com>.
This file is part of GNU CC.
@@ -23,7 +23,7 @@ Boston, MA 02111-1307, USA. */
/* An exception is an event that can be signaled from within a
function. This event can then be "caught" or "trapped" by the
callers of this function. This potentially allows program flow to
- be transferred to any arbitrary code assocated with a function call
+ be transferred to any arbitrary code associated with a function call
several levels up the stack.
The intended use for this mechanism is for signaling "exceptional
@@ -45,7 +45,7 @@ Boston, MA 02111-1307, USA. */
There are two major codegen options for exception handling. The
flag -fsjlj-exceptions can be used to select the setjmp/longjmp
- approach, which is the default. -fnosjlj-exceptions can be used to
+ approach, which is the default. -fno-sjlj-exceptions can be used to
get the PC range table approach. While this is a compile time
flag, an entire application must be compiled with the same codegen
option. The first is a PC range table approach, the second is a
@@ -71,7 +71,7 @@ Boston, MA 02111-1307, USA. */
perform tasks such as destruction of objects allocated on the
stack.
- In the current implementaion, cleanups are handled by allocating an
+ In the current implementation, cleanups are handled by allocating an
exception region for the area that the cleanup is designated for,
and the handler for the region performs the cleanup and then
rethrows the exception to the outer exception region. From the
@@ -87,34 +87,47 @@ Boston, MA 02111-1307, USA. */
exception region, and the address of the handler designated for
that region.
- At program startup each object file invokes a function named
+ If the target does not use the DWARF 2 frame unwind information, at
+ program startup each object file invokes a function named
__register_exceptions with the address of its local
- __EXCEPTION_TABLE__. __register_exceptions is defined in libgcc2.c,
- and is responsible for recording all of the exception regions into
- one list (which is kept in a static variable named exception_table_list).
+ __EXCEPTION_TABLE__. __register_exceptions is defined in libgcc2.c, and
+ is responsible for recording all of the exception regions into one list
+ (which is kept in a static variable named exception_table_list).
+
+ On targets that support crtstuff.c, the unwind information
+ is stored in a section named .eh_frame and the information for the
+ entire shared object or program is registered with a call to
+ __register_frame_info. On other targets, the information for each
+ translation unit is registered from the file generated by collect2.
+ __register_frame_info is defined in frame.c, and is responsible for
+ recording all of the unwind regions into one list (which is kept in a
+ static variable named unwind_table_list).
The function __throw is actually responsible for doing the
- throw. In the C++ frontend, __throw is generated on a
+ throw. On machines that have unwind info support, __throw is generated
+ by code in libgcc2.c, otherwise __throw is generated on a
per-object-file basis for each source file compiled with
- -fexceptions. Before __throw is invoked, the current context
- of the throw needs to be placed in the global variable __eh_pc.
+ -fexceptions by the the C++ frontend. Before __throw is invoked,
+ the current context of the throw needs to be placed in the global
+ variable __eh_pc.
__throw attempts to find the appropriate exception handler for the
PC value stored in __eh_pc by calling __find_first_exception_table_match
(which is defined in libgcc2.c). If __find_first_exception_table_match
- finds a relevant handler, __throw jumps directly to it.
-
- If a handler for the context being thrown from can't be found,
- __throw is responsible for unwinding the stack, determining the
- address of the caller of the current function (which will be used
- as the new context to throw from), and then restarting the process
- of searching for a handler for the new context. __throw may also
- call abort if it is unable to unwind the stack, and can also
- call an external library function named __terminate if it reaches
- the top of the stack without finding an appropriate handler. (By
- default __terminate invokes abort, but this behavior can be
- changed by the user to perform some sort of cleanup behavior before
- exiting).
+ finds a relevant handler, __throw transfers control directly to it.
+
+ If a handler for the context being thrown from can't be found, __throw
+ walks (see Walking the stack below) the stack up the dynamic call chain to
+ continue searching for an appropriate exception handler based upon the
+ caller of the function it last sought a exception handler for. It stops
+ then either an exception handler is found, or when the top of the
+ call chain is reached.
+
+ If no handler is found, an external library function named
+ __terminate is called. If a handler is found, then we restart
+ our search for a handler at the end of the call chain, and repeat
+ the search process, but instead of just walking up the call chain,
+ we unwind the call chain as we walk up it.
Internal implementation details:
@@ -231,40 +244,79 @@ Boston, MA 02111-1307, USA. */
incorrect results is better than halting the program.
- Unwinding the stack:
+ Walking the stack:
- The details of unwinding the stack to the next frame can be rather
- complex. While in many cases a generic __unwind_function routine
- can be used by the generated exception handling code to do this, it
- is often necessary to generate inline code to do the unwinding.
+ The stack is walked by starting with a pointer to the current
+ frame, and finding the pointer to the callers frame. The unwind info
+ tells __throw how to find it.
- Whether or not these inlined unwinders are necessary is
- target-specific.
+ Unwinding the stack:
- By default, if the target-specific backend doesn't supply a
- definition for __unwind_function, inlined unwinders will be used
- instead. The main tradeoff here is in text space utilization.
- Obviously, if inline unwinders have to be generated repeatedly,
- this uses much more space than if a single routine is used.
+ When we use the term unwinding the stack, we mean undoing the
+ effects of the function prologue in a controlled fashion so that we
+ still have the flow of control. Otherwise, we could just return
+ (jump to the normal end of function epilogue).
+
+ This is done in __throw in libgcc2.c when we know that a handler exists
+ in a frame higher up the call stack than its immediate caller.
+
+ To unwind, we find the unwind data associated with the frame, if any.
+ If we don't find any, we call the library routine __terminate. If we do
+ find it, we use the information to copy the saved register values from
+ that frame into the register save area in the frame for __throw, return
+ into a stub which updates the stack pointer, and jump to the handler.
+ The normal function epilogue for __throw handles restoring the saved
+ values into registers.
+
+ When unwinding, we use this method if we know it will
+ work (if DWARF2_UNWIND_INFO is defined). Otherwise, we know that
+ an inline unwinder will have been emitted for any function that
+ __unwind_function cannot unwind. The inline unwinder appears as a
+ normal exception handler for the entire function, for any function
+ that we know cannot be unwound by __unwind_function. We inform the
+ compiler of whether a function can be unwound with
+ __unwind_function by having DOESNT_NEED_UNWINDER evaluate to true
+ when the unwinder isn't needed. __unwind_function is used as an
+ action of last resort. If no other method can be used for
+ unwinding, __unwind_function is used. If it cannot unwind, it
+ should call __terminate.
+
+ By default, if the target-specific backend doesn't supply a definition
+ for __unwind_function and doesn't support DWARF2_UNWIND_INFO, inlined
+ unwinders will be used instead. The main tradeoff here is in text space
+ utilization. Obviously, if inline unwinders have to be generated
+ repeatedly, this uses much more space than if a single routine is used.
However, it is simply not possible on some platforms to write a
generalized routine for doing stack unwinding without having some
- form of additional data associated with each function. The current
- implementation encodes this data in the form of additional machine
- instructions. This is clearly not desirable, as it is extremely
- inefficient. The next implementation will provide a set of metadata
- for each function that will provide the needed information.
+ form of additional data associated with each function. The current
+ implementation can encode this data in the form of additional
+ machine instructions or as static data in tabular form. The later
+ is called the unwind data.
- The backend macro DOESNT_NEED_UNWINDER is used to conditionalize
- whether or not per-function unwinders are needed. If DOESNT_NEED_UNWINDER
- is defined and has a non-zero value, a per-function unwinder is
- not emitted for the current function.
+ The backend macro DOESNT_NEED_UNWINDER is used to conditionalize whether
+ or not per-function unwinders are needed. If DOESNT_NEED_UNWINDER is
+ defined and has a non-zero value, a per-function unwinder is not emitted
+ for the current function. If the static unwind data is supported, then
+ a per-function unwinder is not emitted.
On some platforms it is possible that neither __unwind_function
nor inlined unwinders are available. For these platforms it is not
possible to throw through a function call, and abort will be
invoked instead of performing the throw.
+ The reason the unwind data may be needed is that on some platforms
+ the order and types of data stored on the stack can vary depending
+ on the type of function, its arguments and returned values, and the
+ compilation options used (optimization versus non-optimization,
+ -fomit-frame-pointer, processor variations, etc).
+
+ Unfortunately, this also means that throwing through functions that
+ aren't compiled with exception handling support will still not be
+ possible on some platforms. This problem is currently being
+ investigated, but no solutions have been found that do not imply
+ some unacceptable performance penalties.
+
Future directions:
Currently __throw makes no differentiation between cleanups and
@@ -309,28 +361,11 @@ Boston, MA 02111-1307, USA. */
query various state variables to determine what actions are to be
performed next.
- Another major problem that is being worked on is the issue with
- stack unwinding on various platforms. Currently the only platform
- that has support for __unwind_function is the Sparc; all other
- ports require per-function unwinders, which causes large amounts of
- code bloat.
-
- Ideally it would be possible to store a small set of metadata with
- each function that would then make it possible to write a
- __unwind_function for every platform. This would eliminate the
- need for per-function unwinders.
-
- The main reason the data is needed is that on some platforms the
- order and types of data stored on the stack can vary depending on
- the type of function, its arguments and returned values, and the
- compilation options used (optimization versus non-optimization,
- -fomit-frame-pointer, processor variations, etc).
-
- Unfortunately, this also means that throwing through functions that
- aren't compiled with exception handling support will still not be
- possible on some platforms. This problem is currently being
- investigated, but no solutions have been found that do not imply
- some unacceptable performance penalties.
+ Another major problem that is being worked on is the issue with stack
+ unwinding on various platforms. Currently the only platforms that have
+ support for the generation of a generic unwinder are the SPARC and MIPS.
+ All other ports require per-function unwinders, which produce large
+ amounts of code bloat.
For setjmp/longjmp based exception handling, some of the details
are as above, but there are some additional details. This section
@@ -342,7 +377,7 @@ Boston, MA 02111-1307, USA. */
for all the machine specific details. There is no variable context
of a throw, just the one implied by the dynamic handler stack
pointed to by the dynamic handler chain. There is no exception
- table, and no calls to __register_excetpions. __sjthrow is used
+ table, and no calls to __register_exceptions. __sjthrow is used
instead of __throw, and it works by using the dynamic handler
chain, and longjmp. -fasynchronous-exceptions has no effect, as
the elimination of trivial exception regions is not yet performed.
@@ -354,6 +389,7 @@ Boston, MA 02111-1307, USA. */
#include "config.h"
+#include "defaults.h"
#include <stdio.h>
#include "rtl.h"
#include "tree.h"
@@ -368,12 +404,11 @@ Boston, MA 02111-1307, USA. */
#include "insn-config.h"
#include "recog.h"
#include "output.h"
-#include "assert.h"
/* One to use setjmp/longjmp method of generating code for exception
handling. */
-int exceptions_via_longjmp = 1;
+int exceptions_via_longjmp = 2;
/* One to enable asynchronous exception support. */
@@ -408,7 +443,7 @@ rtx current_function_dhc;
rtx current_function_dcc;
-/* A stack used for keeping track of the currectly active exception
+/* A stack used for keeping track of the currently active exception
handling region. As each exception region is started, an entry
describing the region is pushed onto this stack. The current
region can be found by looking at the top of the stack, and as we
@@ -448,12 +483,15 @@ static tree protect_list;
/* Keeps track of the label to resume to should one want to resume
normal control flow out of a handler (instead of, say, returning to
- the caller of the current function or exiting the program). Also
- used as the context of a throw to rethrow an exception to the outer
- exception region. */
+ the caller of the current function or exiting the program). */
struct label_node *caught_return_label_stack = NULL;
+/* Keeps track of the label used as the context of a throw to rethrow an
+ exception to the outer exception region. */
+
+struct label_node *outer_context_label_stack = NULL;
+
/* A random data area for the front end's own use. */
struct label_node *false_label_stack = NULL;
@@ -645,17 +683,12 @@ eh_outer_context (addr)
{
/* First mask out any unwanted bits. */
#ifdef MASK_RETURN_ADDR
- emit_insn (gen_rtx (SET, Pmode,
- addr,
- gen_rtx (AND, Pmode,
- addr, MASK_RETURN_ADDR)));
+ expand_and (addr, MASK_RETURN_ADDR, addr);
#endif
- /* Then subtract out enough to get into the appropriate region. If
- this is defined, assume we don't need to subtract anything as it
- is already within the correct region. */
-#if ! defined (RETURN_ADDR_OFFSET)
- addr = plus_constant (addr, -1);
+ /* Then adjust to find the real return address. */
+#if defined (RETURN_ADDR_OFFSET)
+ addr = plus_constant (addr, RETURN_ADDR_OFFSET);
#endif
return addr;
@@ -696,38 +729,53 @@ add_partial_entry (handler)
This routine is here to facilitate the porting of this code to
systems with threads. One can either replace the routine we emit a
call for here in libgcc2.c, or one can modify this routine to work
- with their thread system. */
+ with their thread system.
+
+ Ideally, we really only want one per real function, not one
+ per inlined function. */
rtx
get_dynamic_handler_chain ()
{
-#if 0
- /* Do this once we figure out how to get this to the front of the
- function, and we really only want one per real function, not one
- per inlined function. */
- if (current_function_dhc == 0)
+ static tree fn;
+ tree expr;
+ rtx insns;
+
+ if (current_function_dhc)
+ return current_function_dhc;
+
+ if (fn == NULL_TREE)
{
- rtx dhc, insns;
- start_sequence ();
-
- dhc = emit_library_call_value (get_dynamic_handler_chain_libfunc,
- NULL_RTX, 1,
- Pmode, 0);
- current_function_dhc = copy_to_reg (dhc);
- insns = get_insns ();
- end_sequence ();
- emit_insns_before (insns, get_first_nonparm_insn ());
+ tree fntype;
+ fn = get_identifier ("__get_dynamic_handler_chain");
+ push_obstacks_nochange ();
+ end_temporary_allocation ();
+ fntype = build_pointer_type (build_pointer_type
+ (build_pointer_type (void_type_node)));
+ fntype = build_function_type (fntype, NULL_TREE);
+ fn = build_decl (FUNCTION_DECL, fn, fntype);
+ DECL_EXTERNAL (fn) = 1;
+ TREE_PUBLIC (fn) = 1;
+ DECL_ARTIFICIAL (fn) = 1;
+ TREE_READONLY (fn) = 1;
+ make_decl_rtl (fn, NULL_PTR, 1);
+ assemble_external (fn);
+ pop_obstacks ();
}
-#else
- rtx dhc;
- dhc = emit_library_call_value (get_dynamic_handler_chain_libfunc,
- NULL_RTX, 1,
- Pmode, 0);
- current_function_dhc = copy_to_reg (dhc);
-#endif
- /* We don't want a copy of the dhc, but rather, the single dhc. */
- return gen_rtx (MEM, Pmode, current_function_dhc);
+ expr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fn)), fn);
+ expr = build (CALL_EXPR, TREE_TYPE (TREE_TYPE (fn)),
+ expr, NULL_TREE, NULL_TREE);
+ TREE_SIDE_EFFECTS (expr) = 1;
+ expr = build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (expr)), expr);
+
+ start_sequence ();
+ current_function_dhc = expand_expr (expr, NULL_RTX, VOIDmode, 0);
+ insns = get_insns ();
+ end_sequence ();
+ emit_insns_before (insns, get_first_nonparm_insn ());
+
+ return current_function_dhc;
}
/* Get a reference to the dynamic cleanup chain. It points to the
@@ -960,6 +1008,7 @@ expand_eh_region_start_tree (decl, cleanup)
}
expand_eh_region_start_for_decl (decl);
+ ehstack.top->entry->finalization = cleanup;
return 0;
}
@@ -1085,6 +1134,57 @@ expand_eh_region_end (handler)
}
}
+/* End the EH region for a goto fixup. We only need them in the region-based
+ EH scheme. */
+
+void
+expand_fixup_region_start ()
+{
+ if (! doing_eh (0) || exceptions_via_longjmp)
+ return;
+
+ expand_eh_region_start ();
+}
+
+/* End the EH region for a goto fixup. CLEANUP is the cleanup we just
+ expanded; to avoid running it twice if it throws, we look through the
+ ehqueue for a matching region and rethrow from its outer_context. */
+
+void
+expand_fixup_region_end (cleanup)
+ tree cleanup;
+{
+ tree t;
+ struct eh_node *node;
+ int yes;
+
+ if (! doing_eh (0) || exceptions_via_longjmp)
+ return;
+
+ for (node = ehstack.top; node && node->entry->finalization != cleanup; )
+ node = node->chain;
+ if (node == 0)
+ for (node = ehqueue.head; node && node->entry->finalization != cleanup; )
+ node = node->chain;
+ if (node == 0)
+ abort ();
+
+ yes = suspend_momentary ();
+
+ t = build (RTL_EXPR, void_type_node, NULL_RTX, const0_rtx);
+ TREE_SIDE_EFFECTS (t) = 1;
+ do_pending_stack_adjust ();
+ start_sequence_for_rtl_expr (t);
+ expand_internal_throw (node->entry->outer_context);
+ do_pending_stack_adjust ();
+ RTL_EXPR_SEQUENCE (t) = get_insns ();
+ end_sequence ();
+
+ resume_momentary (yes);
+
+ expand_eh_region_end (t);
+}
+
/* If we are using the setjmp/longjmp EH codegen method, we emit a
call to __sjthrow.
@@ -1109,7 +1209,10 @@ emit_throw ()
#ifdef JUMP_TO_THROW
emit_indirect_jump (throw_libfunc);
#else
+#ifndef DWARF2_UNWIND_INFO
+ /* Prevent assemble_external from doing anything with this symbol. */
SYMBOL_REF_USED (throw_libfunc) = 1;
+#endif
emit_library_call (throw_libfunc, 0, VOIDmode, 0);
#endif
throw_used = 1;
@@ -1190,6 +1293,7 @@ expand_leftover_cleanups ()
}
}
+ do_pending_stack_adjust ();
free (entry);
}
}
@@ -1220,6 +1324,9 @@ expand_start_all_catch ()
if (! doing_eh (1))
return;
+ push_label_entry (&outer_context_label_stack,
+ ehstack.top->entry->outer_context, NULL_TREE);
+
/* End the try block. */
expand_eh_region_end (integer_zero_node);
@@ -1227,7 +1334,7 @@ expand_start_all_catch ()
label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
/* The label for the exception handling block that we will save.
- This is Lresume in the documention. */
+ This is Lresume in the documentation. */
expand_label (label);
if (exceptions_via_longjmp == 0)
@@ -1306,6 +1413,7 @@ expand_start_all_catch ()
expand_internal_throw (entry->outer_context);
}
}
+ do_pending_stack_adjust ();
free (entry);
}
}
@@ -1338,7 +1446,7 @@ expand_end_all_catch ()
thrown from) so that the outer EH region can then try to process
the exception. */
- expand_internal_throw (DECL_RTL (top_label_entry (&caught_return_label_stack)));
+ expand_internal_throw (outer_context_label_stack->u.rlabel);
}
/* Now we have the complete catch sequence. */
@@ -1348,6 +1456,7 @@ expand_end_all_catch ()
/* This level of catch blocks is done, so set up the successful
catch jump label for the next layer of catch blocks. */
pop_label_entry (&caught_return_label_stack);
+ pop_label_entry (&outer_context_label_stack);
/* Add the new sequence of catches to the main one for this function. */
push_to_sequence (catch_clauses);
@@ -1448,10 +1557,8 @@ add_eh_table_entry (n)
if (eh_table_max_size < 0)
abort ();
- if ((eh_table = (int *) realloc (eh_table,
- eh_table_max_size * sizeof (int)))
- == 0)
- fatal ("virtual memory exhausted");
+ eh_table = (int *) xrealloc (eh_table,
+ eh_table_max_size * sizeof (int));
}
else
{
@@ -1477,6 +1584,18 @@ exception_table_p ()
return 0;
}
+/* 1 if we need a static constructor to register EH table info. */
+
+int
+register_exception_table_p ()
+{
+#if defined (DWARF2_UNWIND_INFO)
+ return 0;
+#endif
+
+ return exception_table_p ();
+}
+
/* Output the entry of the exception table corresponding to to the
exception region numbered N to file FILE.
@@ -1514,7 +1633,7 @@ output_exception_table ()
int i;
extern FILE *asm_out_file;
- if (! doing_eh (0))
+ if (! doing_eh (0) || ! eh_table)
return;
exception_section ();
@@ -1523,11 +1642,6 @@ output_exception_table ()
assemble_align (GET_MODE_ALIGNMENT (ptr_mode));
assemble_label ("__EXCEPTION_TABLE__");
- assemble_integer (const0_rtx, POINTER_SIZE / BITS_PER_UNIT, 1);
- assemble_integer (const0_rtx, POINTER_SIZE / BITS_PER_UNIT, 1);
- assemble_integer (const0_rtx, POINTER_SIZE / BITS_PER_UNIT, 1);
- putc ('\n', asm_out_file); /* blank line */
-
for (i = 0; i < eh_table_size; ++i)
output_exception_table_entry (asm_out_file, eh_table[i]);
@@ -1574,6 +1688,10 @@ start_eh_unwinder ()
if (exceptions_via_longjmp)
return;
+#ifdef DWARF2_UNWIND_INFO
+ return;
+#endif
+
expand_eh_region_start ();
}
@@ -1600,6 +1718,10 @@ end_eh_unwinder ()
if (exceptions_via_longjmp)
return;
+#ifdef DWARF2_UNWIND_INFO
+ return;
+#else /* DWARF2_UNWIND_INFO */
+
assemble_external (eh_saved_pc);
expr = make_node (RTL_EXPR);
@@ -1617,6 +1739,8 @@ end_eh_unwinder ()
/* Get the address we need to use to determine what exception
handler should be invoked, and store it in __eh_pc. */
return_val_rtx = eh_outer_context (return_val_rtx);
+ return_val_rtx = expand_binop (Pmode, sub_optab, return_val_rtx, GEN_INT (1),
+ NULL_RTX, 0, OPTAB_LIB_WIDEN);
emit_move_insn (eh_saved_pc_rtx, return_val_rtx);
/* Either set things up so we do a return directly to __throw, or
@@ -1660,6 +1784,7 @@ end_eh_unwinder ()
emit_barrier ();
}
#endif
+#endif /* DWARF2_UNWIND_INFO */
}
/* If necessary, emit insns for the per function unwinder for the
@@ -1750,7 +1875,10 @@ find_exception_handler_labels ()
/* Generate a handy reference to each label. */
- labels = (rtx *) alloca ((max_labelno - min_labelno) * sizeof (rtx));
+ /* We call xmalloc here instead of alloca; we did the latter in the past,
+ but found that it can sometimes end up being asked to allocate space
+ for more than 1 million labels. */
+ labels = (rtx *) xmalloc ((max_labelno - min_labelno) * sizeof (rtx));
bzero ((char *) labels, (max_labelno - min_labelno) * sizeof (rtx));
/* Arrange for labels to be indexed directly by CODE_LABEL_NUMBER. */
@@ -1790,6 +1918,8 @@ find_exception_handler_labels ()
warning ("mismatched EH region %d", NOTE_BLOCK_NUMBER (insn));
}
}
+
+ free (labels + min_labelno);
}
/* Perform sanity checking on the exception_handler_labels list.
@@ -1903,8 +2033,6 @@ void
save_eh_status (p)
struct function *p;
{
- assert (p != NULL);
-
p->ehstack = ehstack;
p->ehqueue = ehqueue;
p->catch_clauses = catch_clauses;
@@ -1925,8 +2053,6 @@ void
restore_eh_status (p)
struct function *p;
{
- assert (p != NULL);
-
protect_list = p->protect_list;
caught_return_label_stack = p->caught_return_label_stack;
false_label_stack = p->false_label_stack;
@@ -1990,11 +2116,11 @@ scan_region (insn, n, delete_outer)
/* Assume we can delete the region. */
int delete = 1;
- assert (insn != NULL_RTX
- && GET_CODE (insn) == NOTE
- && NOTE_LINE_NUMBER (insn) == NOTE_INSN_EH_REGION_BEG
- && NOTE_BLOCK_NUMBER (insn) == n
- && delete_outer != NULL);
+ if (! (GET_CODE (insn) == NOTE
+ && NOTE_LINE_NUMBER (insn) == NOTE_INSN_EH_REGION_BEG
+ && NOTE_BLOCK_NUMBER (insn) == n
+ && delete_outer != NULL))
+ abort ();
insn = NEXT_INSN (insn);
@@ -2100,3 +2226,161 @@ exception_optimize ()
}
}
}
+
+/* Various hooks for the DWARF 2 __throw routine. */
+
+/* Do any necessary initialization to access arbitrary stack frames.
+ On the SPARC, this means flushing the register windows. */
+
+void
+expand_builtin_unwind_init ()
+{
+ /* Set this so all the registers get saved in our frame; we need to be
+ able to copy the saved values for any registers from frames we unwind. */
+ current_function_has_nonlocal_label = 1;
+
+#ifdef SETUP_FRAME_ADDRESSES
+ SETUP_FRAME_ADDRESSES ();
+#endif
+}
+
+/* Given a value extracted from the return address register or stack slot,
+ return the actual address encoded in that value. */
+
+rtx
+expand_builtin_extract_return_addr (addr_tree)
+ tree addr_tree;
+{
+ rtx addr = expand_expr (addr_tree, NULL_RTX, Pmode, 0);
+ return eh_outer_context (addr);
+}
+
+/* Given an actual address in addr_tree, do any necessary encoding
+ and return the value to be stored in the return address register or
+ stack slot so the epilogue will return to that address. */
+
+rtx
+expand_builtin_frob_return_addr (addr_tree)
+ tree addr_tree;
+{
+ rtx addr = expand_expr (addr_tree, NULL_RTX, Pmode, 0);
+#ifdef RETURN_ADDR_OFFSET
+ addr = plus_constant (addr, -RETURN_ADDR_OFFSET);
+#endif
+ return addr;
+}
+
+/* Given an actual address in addr_tree, set the return address register up
+ so the epilogue will return to that address. If the return address is
+ not in a register, do nothing. */
+
+void
+expand_builtin_set_return_addr_reg (addr_tree)
+ tree addr_tree;
+{
+ rtx tmp;
+ rtx ra = expand_builtin_return_addr (BUILT_IN_RETURN_ADDRESS,
+ 0, hard_frame_pointer_rtx);
+
+ if (GET_CODE (ra) != REG || REGNO (ra) >= FIRST_PSEUDO_REGISTER)
+ return;
+
+ tmp = force_operand (expand_builtin_frob_return_addr (addr_tree), ra);
+ if (tmp != ra)
+ emit_move_insn (ra, tmp);
+}
+
+/* Choose two registers for communication between the main body of
+ __throw and the stub for adjusting the stack pointer. The first register
+ is used to pass the address of the exception handler; the second register
+ is used to pass the stack pointer offset.
+
+ For register 1 we use the return value register for a void *.
+ For register 2 we use the static chain register if it exists and is
+ different from register 1, otherwise some arbitrary call-clobbered
+ register. */
+
+static void
+eh_regs (r1, r2, outgoing)
+ rtx *r1, *r2;
+ int outgoing;
+{
+ rtx reg1, reg2;
+
+#ifdef FUNCTION_OUTGOING_VALUE
+ if (outgoing)
+ reg1 = FUNCTION_OUTGOING_VALUE (build_pointer_type (void_type_node),
+ current_function_decl);
+ else
+#endif
+ reg1 = FUNCTION_VALUE (build_pointer_type (void_type_node),
+ current_function_decl);
+
+#ifdef STATIC_CHAIN_REGNUM
+ if (outgoing)
+ reg2 = static_chain_incoming_rtx;
+ else
+ reg2 = static_chain_rtx;
+ if (REGNO (reg2) == REGNO (reg1))
+#endif /* STATIC_CHAIN_REGNUM */
+ reg2 = NULL_RTX;
+
+ if (reg2 == NULL_RTX)
+ {
+ int i;
+ for (i = 0; i < FIRST_PSEUDO_REGISTER; ++i)
+ if (call_used_regs[i] && ! fixed_regs[i] && i != REGNO (reg1))
+ {
+ reg2 = gen_rtx (REG, Pmode, i);
+ break;
+ }
+
+ if (reg2 == NULL_RTX)
+ abort ();
+ }
+
+ *r1 = reg1;
+ *r2 = reg2;
+}
+
+/* Emit inside of __throw a stub which adjusts the stack pointer and jumps
+ to the exception handler. __throw will set up the necessary values
+ and then return to the stub. */
+
+rtx
+expand_builtin_eh_stub ()
+{
+ rtx stub_start = gen_label_rtx ();
+ rtx after_stub = gen_label_rtx ();
+ rtx handler, offset, temp;
+
+ emit_jump (after_stub);
+ emit_label (stub_start);
+
+ eh_regs (&handler, &offset, 0);
+
+ adjust_stack (offset);
+ emit_indirect_jump (handler);
+
+ emit_label (after_stub);
+ return gen_rtx (LABEL_REF, Pmode, stub_start);
+}
+
+/* Set up the registers for passing the handler address and stack offset
+ to the stub above. */
+
+void
+expand_builtin_set_eh_regs (handler, offset)
+ tree handler, offset;
+{
+ rtx reg1, reg2;
+
+ eh_regs (&reg1, &reg2, 1);
+
+ store_expr (offset, reg2, 0);
+ store_expr (handler, reg1, 0);
+
+ /* These will be used by the stub. */
+ emit_insn (gen_rtx (USE, VOIDmode, reg1));
+ emit_insn (gen_rtx (USE, VOIDmode, reg2));
+}
diff --git a/gcc/except.h b/gcc/except.h
index 14bb2349fb0..ac46fa4478f 100644
--- a/gcc/except.h
+++ b/gcc/except.h
@@ -1,5 +1,5 @@
/* Exception Handling interface routines.
- Copyright (C) 1996 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Contributed by Mike Stump <mrs@cygnus.com>.
This file is part of GNU CC.
@@ -139,8 +139,6 @@ extern rtx catch_clauses;
#endif
-struct function;
-
/* Toplevel initialization for EH. */
extern void init_eh PROTO((void));
@@ -149,14 +147,6 @@ extern void init_eh PROTO((void));
extern void init_eh_for_function PROTO((void));
-/* Saves the current per-function EH data into P. */
-
-extern void save_eh_status PROTO((struct function *p));
-
-/* Restores the per-function EH data from P. */
-
-extern void restore_eh_status PROTO((struct function *p));
-
/* Adds an EH table entry for EH entry number N. Called from
final_scan_insn for NOTE_INSN_EH_REGION_BEG. */
@@ -237,6 +227,11 @@ extern void check_exception_handler_labels PROTO((void));
extern struct label_node *caught_return_label_stack;
+/* Keeps track of the label used as the context of a throw to rethrow an
+ exception to the outer exception region. */
+
+extern struct label_node *outer_context_label_stack;
+
/* A random area used for purposes elsewhere. */
extern struct label_node *false_label_stack;
@@ -281,3 +276,16 @@ extern int protect_cleanup_actions_with_terminate;
#ifdef TREE_CODE
extern tree protect_with_terminate PROTO((tree));
#endif
+
+/* Various hooks for the DWARF 2 __throw routine. */
+
+void expand_builtin_unwind_init PROTO((void));
+rtx expand_builtin_dwarf_fp_regnum PROTO((void));
+rtx expand_builtin_eh_stub PROTO((void));
+#ifdef TREE_CODE
+rtx expand_builtin_frob_return_addr PROTO((tree));
+rtx expand_builtin_extract_return_addr PROTO((tree));
+void expand_builtin_set_return_addr_reg PROTO((tree));
+void expand_builtin_set_eh_regs PROTO((tree, tree));
+rtx expand_builtin_dwarf_reg_size PROTO((tree, rtx));
+#endif
diff --git a/gcc/explow.c b/gcc/explow.c
index 7a529aa5b64..a2519f86b79 100644
--- a/gcc/explow.c
+++ b/gcc/explow.c
@@ -1,5 +1,5 @@
/* Subroutines for manipulating rtx's in semantically interesting ways.
- Copyright (C) 1987, 91, 94, 95, 96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 91, 94-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -20,6 +20,7 @@ Boston, MA 02111-1307, USA. */
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "tree.h"
#include "flags.h"
@@ -78,10 +79,15 @@ plus_constant_wide (x, c)
if (GET_CODE (XEXP (x, 0)) == SYMBOL_REF
&& CONSTANT_POOL_ADDRESS_P (XEXP (x, 0)))
{
+ /* Any rtl we create here must go in a saveable obstack, since
+ we might have been called from within combine. */
+ push_obstacks_nochange ();
+ rtl_in_saveable_obstack ();
tem
= force_const_mem (GET_MODE (x),
plus_constant (get_pool_constant (XEXP (x, 0)),
c));
+ pop_obstacks ();
if (memory_address_p (GET_MODE (tem), XEXP (tem, 0)))
return tem;
}
@@ -119,6 +125,10 @@ plus_constant_wide (x, c)
return gen_rtx (PLUS, mode,
XEXP (x, 0),
plus_constant (XEXP (x, 1), c));
+ break;
+
+ default:
+ break;
}
if (c != 0)
@@ -251,7 +261,8 @@ expr_size (exp)
&& contains_placeholder_p (size))
size = build (WITH_RECORD_EXPR, sizetype, size, exp);
- return expand_expr (size, NULL_RTX, TYPE_MODE (sizetype), 0);
+ return expand_expr (size, NULL_RTX, TYPE_MODE (sizetype),
+ EXPAND_MEMORY_USE_BAD);
}
/* Return a copy of X in which all memory references
@@ -316,7 +327,9 @@ convert_memory_address (to_mode, x)
return x;
case LABEL_REF:
- return gen_rtx (LABEL_REF, to_mode, XEXP (x, 0));
+ temp = gen_rtx (LABEL_REF, to_mode, XEXP (x, 0));
+ LABEL_REF_NONLOCAL_P (temp) = LABEL_REF_NONLOCAL_P (x);
+ return temp;
case SYMBOL_REF:
temp = gen_rtx (SYMBOL_REF, to_mode, XSTR (x, 0));
@@ -331,7 +344,7 @@ convert_memory_address (to_mode, x)
case PLUS:
case MULT:
/* For addition the second operand is a small constant, we can safely
- permute the converstion and addition operation. We can always safely
+ permute the conversion and addition operation. We can always safely
permute them if we are making the address narrower. In addition,
always permute the operations if this is a constant. */
if (GET_MODE_SIZE (to_mode) < GET_MODE_SIZE (from_mode)
@@ -341,6 +354,10 @@ convert_memory_address (to_mode, x)
return gen_rtx (GET_CODE (x), to_mode,
convert_memory_address (to_mode, XEXP (x, 0)),
convert_memory_address (to_mode, XEXP (x, 1)));
+ break;
+
+ default:
+ break;
}
return convert_modes (to_mode, from_mode,
@@ -398,6 +415,9 @@ memory_address (mode, x)
{
register rtx oldx = x;
+ if (GET_CODE (x) == ADDRESSOF)
+ return x;
+
#ifdef POINTERS_EXTEND_UNSIGNED
if (GET_MODE (x) == ptr_mode)
x = convert_memory_address (Pmode, x);
@@ -739,6 +759,9 @@ promote_mode (type, mode, punsignedp, for_call)
unsignedp = POINTERS_EXTEND_UNSIGNED;
break;
#endif
+
+ default:
+ break;
}
*punsignedp = unsignedp;
@@ -878,6 +901,8 @@ emit_stack_save (save_level, psave, after)
}
break;
#endif
+ default:
+ break;
}
/* If there is no save area and we have to allocate one, do so. Otherwise
@@ -958,6 +983,8 @@ emit_stack_restore (save_level, sa, after)
fcn = gen_restore_stack_nonlocal;
break;
#endif
+ default:
+ break;
}
if (sa != 0)
@@ -1089,38 +1116,39 @@ allocate_dynamic_stack_space (size, target, known_align)
mark_reg_pointer (target, known_align / BITS_PER_UNIT);
-#ifndef STACK_GROWS_DOWNWARD
- emit_move_insn (target, virtual_stack_dynamic_rtx);
-#endif
-
/* Perform the required allocation from the stack. Some systems do
this differently than simply incrementing/decrementing from the
- stack pointer. */
+ stack pointer, such as acquiring the space by calling malloc(). */
#ifdef HAVE_allocate_stack
if (HAVE_allocate_stack)
{
- enum machine_mode mode
- = insn_operand_mode[(int) CODE_FOR_allocate_stack][0];
-
- size = convert_modes (mode, ptr_mode, size, 1);
+ enum machine_mode mode;
if (insn_operand_predicate[(int) CODE_FOR_allocate_stack][0]
&& ! ((*insn_operand_predicate[(int) CODE_FOR_allocate_stack][0])
+ (target, Pmode)))
+ target = copy_to_mode_reg (Pmode, target);
+ mode = insn_operand_mode[(int) CODE_FOR_allocate_stack][1];
+ size = convert_modes (mode, ptr_mode, size, 1);
+ if (insn_operand_predicate[(int) CODE_FOR_allocate_stack][1]
+ && ! ((*insn_operand_predicate[(int) CODE_FOR_allocate_stack][1])
(size, mode)))
size = copy_to_mode_reg (mode, size);
- emit_insn (gen_allocate_stack (size));
+ emit_insn (gen_allocate_stack (target, size));
}
else
#endif
{
+#ifndef STACK_GROWS_DOWNWARD
+ emit_move_insn (target, virtual_stack_dynamic_rtx);
+#endif
size = convert_modes (Pmode, ptr_mode, size, 1);
anti_adjust_stack (size);
- }
-
#ifdef STACK_GROWS_DOWNWARD
emit_move_insn (target, virtual_stack_dynamic_rtx);
#endif
+ }
if (MUST_ALIGN)
{
@@ -1206,7 +1234,8 @@ probe_stack_range (first, size)
/* If we have to generate explicit probes, see if we have a constant
small number of them to generate. If so, that's the easy case. */
- if (GET_CODE (size) == CONST_INT && INTVAL (size) < 10)
+ if (GET_CODE (size) == CONST_INT
+ && INTVAL (size) < 10 * STACK_CHECK_PROBE_INTERVAL)
{
HOST_WIDE_INT offset;
@@ -1275,6 +1304,10 @@ probe_stack_range (first, size)
emit_note (NULL_PTR, NOTE_INSN_LOOP_END);
emit_label (end_lab);
+ /* If will be doing stupid optimization, show test_addr is still live. */
+ if (obey_regdecls)
+ emit_insn (gen_rtx (USE, VOIDmode, test_addr));
+
emit_stack_probe (last_addr);
}
}
diff --git a/gcc/expmed.c b/gcc/expmed.c
index 291e8d4aeea..f419f24ae41 100644
--- a/gcc/expmed.c
+++ b/gcc/expmed.c
@@ -21,6 +21,7 @@ Boston, MA 02111-1307, USA. */
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "tree.h"
#include "flags.h"
@@ -747,6 +748,8 @@ store_split_bit_field (op0, bitsize, bitpos, value, align)
? GET_MODE (value)
: word_mode, value));
}
+ else if (GET_CODE (value) == ADDRESSOF)
+ value = copy_to_reg (value);
while (bitsdone < bitsize)
{
@@ -1084,9 +1087,8 @@ extract_bit_field (str_rtx, bitsize, bitnum, unsignedp,
volatile_ok = 1;
/* Is the memory operand acceptable? */
- if (flag_force_mem
- || ! ((*insn_operand_predicate[(int) CODE_FOR_extzv][1])
- (xop0, GET_MODE (xop0))))
+ if (! ((*insn_operand_predicate[(int) CODE_FOR_extzv][1])
+ (xop0, GET_MODE (xop0))))
{
/* No, load into a reg and extract from there. */
enum machine_mode bestmode;
@@ -2831,6 +2833,14 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
{
op0 = convert_modes (compute_mode, mode, op0, unsignedp);
op1 = convert_modes (compute_mode, mode, op1, unsignedp);
+
+ /* convert_modes may have placed op1 into a register, so we
+ must recompute the following. */
+ op1_is_constant = GET_CODE (op1) == CONST_INT;
+ op1_is_pow2 = (op1_is_constant
+ && ((EXACT_POWER_OF_2_OR_ZERO_P (INTVAL (op1))
+ || (! unsignedp
+ && EXACT_POWER_OF_2_OR_ZERO_P (-INTVAL (op1)))))) ;
}
/* If one of the operands is a volatile MEM, copy it into a register. */
@@ -3631,6 +3641,9 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
emit_label (label);
}
return gen_lowpart (mode, rem_flag ? remainder : quotient);
+
+ default:
+ abort ();
}
if (quotient == 0)
@@ -3947,6 +3960,8 @@ emit_store_flag (target, code, op0, op1, mode, unsignedp, normalizep)
if (op1 == const1_rtx)
op1 = const0_rtx, code = EQ;
break;
+ default:
+ break;
}
/* From now on, we won't change CODE, so set ICODE now. */
diff --git a/gcc/expr.c b/gcc/expr.c
index 41deddfd2c0..d408c3e2fab 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -1,5 +1,5 @@
/* Convert tree expression to rtl instructions, for GNU compiler.
- Copyright (C) 1988, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1988, 92-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -20,6 +20,7 @@ Boston, MA 02111-1307, USA. */
#include "config.h"
+#include <stdio.h>
#include "machmode.h"
#include "rtl.h"
#include "tree.h"
@@ -36,6 +37,7 @@ Boston, MA 02111-1307, USA. */
#include "recog.h"
#include "output.h"
#include "typeclass.h"
+#include "defaults.h"
#include "bytecode.h"
#include "bc-opcode.h"
@@ -108,9 +110,13 @@ static rtx saveregs_value;
/* Similarly for __builtin_apply_args. */
static rtx apply_args_value;
+/* Don't check memory usage, since code is being emitted to check a memory
+ usage. Used when flag_check_memory_usage is true, to avoid infinite
+ recursion. */
+static int in_check_memory_usage;
+
/* This structure is used by move_by_pieces to describe the move to
be performed. */
-
struct move_by_pieces
{
rtx to;
@@ -147,6 +153,7 @@ struct clear_by_pieces
as well as depth of arithmetic stack. (Notice that variables are
stored on the machine's stack, not the arithmetic stack.) */
+static rtx get_push_address PROTO ((int));
extern int local_vars_size;
extern int stack_depth;
extern int max_stack_depth;
@@ -170,7 +177,7 @@ static rtx store_field PROTO((rtx, int, int, enum machine_mode, tree,
enum machine_mode, int, int, int));
static tree save_noncopied_parts PROTO((tree, tree));
static tree init_noncopied_parts PROTO((tree, tree));
-static int safe_from_p PROTO((rtx, tree));
+static int safe_from_p PROTO((rtx, tree, int));
static int fixed_type_p PROTO((tree));
static rtx var_rtx PROTO((tree));
static int get_pointer_alignment PROTO((tree, unsigned));
@@ -290,7 +297,7 @@ init_expr_once ()
rtx mem1 = gen_rtx (MEM, VOIDmode, frame_pointer_rtx);
start_sequence ();
- insn = emit_insn (gen_rtx (SET, 0, 0));
+ insn = emit_insn (gen_rtx (SET, 0, NULL_RTX, NULL_RTX));
pat = PATTERN (insn);
for (mode = VOIDmode; (int) mode < NUM_MACHINE_MODES;
@@ -526,10 +533,11 @@ queued_subexp_p (x)
case MULT:
case PLUS:
case MINUS:
- return queued_subexp_p (XEXP (x, 0))
- || queued_subexp_p (XEXP (x, 1));
+ return (queued_subexp_p (XEXP (x, 0))
+ || queued_subexp_p (XEXP (x, 1)));
+ default:
+ return 0;
}
- return 0;
}
/* Perform all the pending incrementations. */
@@ -620,6 +628,13 @@ convert_move (to, from, unsignedp)
return;
}
#endif
+#ifdef HAVE_trunctqfqf2
+ if (HAVE_trunctqfqf2 && from_mode == TQFmode && to_mode == QFmode)
+ {
+ emit_unop_insn (CODE_FOR_trunctqfqf2, to, from, UNKNOWN);
+ return;
+ }
+#endif
#ifdef HAVE_truncsfqf2
if (HAVE_truncsfqf2 && from_mode == SFmode && to_mode == QFmode)
{
@@ -767,6 +782,9 @@ convert_move (to, from, unsignedp)
case TFmode:
libcall = extendsftf2_libfunc;
break;
+
+ default:
+ break;
}
break;
@@ -784,6 +802,9 @@ convert_move (to, from, unsignedp)
case TFmode:
libcall = extenddftf2_libfunc;
break;
+
+ default:
+ break;
}
break;
@@ -797,6 +818,9 @@ convert_move (to, from, unsignedp)
case DFmode:
libcall = truncxfdf2_libfunc;
break;
+
+ default:
+ break;
}
break;
@@ -810,8 +834,14 @@ convert_move (to, from, unsignedp)
case DFmode:
libcall = trunctfdf2_libfunc;
break;
+
+ default:
+ break;
}
break;
+
+ default:
+ break;
}
if (libcall == (rtx) 0)
@@ -1558,14 +1588,19 @@ move_by_pieces_1 (genfun, mode, data)
with mode BLKmode.
SIZE is an rtx that says how long they are.
ALIGN is the maximum alignment we can assume they have,
- measured in bytes. */
+ measured in bytes.
-void
+ Return the address of the new block, if memcpy is called and returns it,
+ 0 otherwise. */
+
+rtx
emit_block_move (x, y, size, align)
rtx x, y;
rtx size;
int align;
{
+ rtx retval = 0;
+
if (GET_MODE (x) != BLKmode)
abort ();
@@ -1607,7 +1642,7 @@ emit_block_move (x, y, size, align)
actual mode mask. */
&& ((GET_CODE (size) == CONST_INT
&& ((unsigned HOST_WIDE_INT) INTVAL (size)
- <= GET_MODE_MASK (mode)))
+ <= (GET_MODE_MASK (mode) >> 1)))
|| GET_MODE_BITSIZE (mode) >= BITS_PER_WORD)
&& (insn_operand_predicate[(int) code][0] == 0
|| (*insn_operand_predicate[(int) code][0]) (x, BLKmode))
@@ -1630,7 +1665,7 @@ emit_block_move (x, y, size, align)
if (pat)
{
emit_insn (pat);
- return;
+ return 0;
}
else
delete_insns_since (last);
@@ -1638,12 +1673,13 @@ emit_block_move (x, y, size, align)
}
#ifdef TARGET_MEM_FUNCTIONS
- emit_library_call (memcpy_libfunc, 0,
- VOIDmode, 3, XEXP (x, 0), Pmode,
- XEXP (y, 0), Pmode,
- convert_to_mode (TYPE_MODE (sizetype), size,
- TREE_UNSIGNED (sizetype)),
- TYPE_MODE (sizetype));
+ retval
+ = emit_library_call_value (memcpy_libfunc, NULL_RTX, 0,
+ ptr_mode, 3, XEXP (x, 0), Pmode,
+ XEXP (y, 0), Pmode,
+ convert_to_mode (TYPE_MODE (sizetype), size,
+ TREE_UNSIGNED (sizetype)),
+ TYPE_MODE (sizetype));
#else
emit_library_call (bcopy_libfunc, 0,
VOIDmode, 3, XEXP (y, 0), Pmode,
@@ -1653,6 +1689,8 @@ emit_block_move (x, y, size, align)
TYPE_MODE (integer_type_node));
#endif
}
+
+ return retval;
}
/* Copy all or part of a value X into registers starting at REGNO.
@@ -1913,15 +1951,16 @@ use_group_regs (call_fusage, regs)
{
int i;
- /* Check for a NULL entry, used to indicate that the parameter goes
- both on the stack and in registers. */
- if (XEXP (XVECEXP (regs, 0, 0), 0))
- i = 0;
- else
- i = 1;
+ for (i = 0; i < XVECLEN (regs, 0); i++)
+ {
+ rtx reg = XEXP (XVECEXP (regs, 0, i), 0);
- for (; i < XVECLEN (regs, 0); i++)
- use_reg (call_fusage, XEXP (XVECEXP (regs, 0, i), 0));
+ /* A NULL entry means the parameter goes both on the stack and in
+ registers. This can also be a MEM for targets that pass values
+ partially on the stack and partially in registers. */
+ if (reg != 0 && GET_CODE (reg) == REG)
+ use_reg (call_fusage, reg);
+ }
}
/* Generate several move instructions to clear LEN bytes of block TO.
@@ -2056,14 +2095,18 @@ clear_by_pieces_1 (genfun, mode, data)
/* Write zeros through the storage of OBJECT.
If OBJECT has BLKmode, SIZE is its length in bytes and ALIGN is
- the maximum alignment we can is has, measured in bytes. */
+ the maximum alignment we can is has, measured in bytes.
-void
+ If we call a function that returns the length of the block, return it. */
+
+rtx
clear_storage (object, size, align)
rtx object;
rtx size;
int align;
{
+ rtx retval = 0;
+
if (GET_MODE (object) == BLKmode)
{
object = protect_from_queue (object, 1);
@@ -2094,7 +2137,7 @@ clear_storage (object, size, align)
definitely be less than the actual mode mask. */
&& ((GET_CODE (size) == CONST_INT
&& ((unsigned HOST_WIDE_INT) INTVAL (size)
- <= GET_MODE_MASK (mode)))
+ <= (GET_MODE_MASK (mode) >> 1)))
|| GET_MODE_BITSIZE (mode) >= BITS_PER_WORD)
&& (insn_operand_predicate[(int) code][0] == 0
|| (*insn_operand_predicate[(int) code][0]) (object,
@@ -2117,7 +2160,7 @@ clear_storage (object, size, align)
if (pat)
{
emit_insn (pat);
- return;
+ return 0;
}
else
delete_insns_since (last);
@@ -2126,26 +2169,31 @@ clear_storage (object, size, align)
#ifdef TARGET_MEM_FUNCTIONS
- emit_library_call (memset_libfunc, 0,
- VOIDmode, 3,
- XEXP (object, 0), Pmode,
- const0_rtx, TYPE_MODE (integer_type_node),
- convert_to_mode (TYPE_MODE (sizetype),
- size, TREE_UNSIGNED (sizetype)),
- TYPE_MODE (sizetype));
+ retval
+ = emit_library_call_value (memset_libfunc, NULL_RTX, 0,
+ ptr_mode, 3,
+ XEXP (object, 0), Pmode,
+ const0_rtx,
+ TYPE_MODE (integer_type_node),
+ convert_to_mode
+ (TYPE_MODE (sizetype), size,
+ TREE_UNSIGNED (sizetype)),
+ TYPE_MODE (sizetype));
#else
emit_library_call (bzero_libfunc, 0,
VOIDmode, 2,
XEXP (object, 0), Pmode,
- convert_to_mode (TYPE_MODE (integer_type_node),
- size,
- TREE_UNSIGNED (integer_type_node)),
+ convert_to_mode
+ (TYPE_MODE (integer_type_node), size,
+ TREE_UNSIGNED (integer_type_node)),
TYPE_MODE (integer_type_node));
#endif
}
}
else
- emit_move_insn (object, const0_rtx);
+ emit_move_insn (object, CONST0_RTX (GET_MODE (object)));
+
+ return retval;
}
/* Generate code to copy Y into X.
@@ -2368,6 +2416,25 @@ gen_push_operand ()
return gen_rtx (STACK_PUSH_CODE, Pmode, stack_pointer_rtx);
}
+/* Return an rtx for the address of the beginning of a as-if-it-was-pushed
+ block of SIZE bytes. */
+
+static rtx
+get_push_address (size)
+ int size;
+{
+ register rtx temp;
+
+ if (STACK_PUSH_CODE == POST_DEC)
+ temp = gen_rtx (PLUS, Pmode, stack_pointer_rtx, GEN_INT (size));
+ else if (STACK_PUSH_CODE == POST_INC)
+ temp = gen_rtx (MINUS, Pmode, stack_pointer_rtx, GEN_INT (size));
+ else
+ temp = stack_pointer_rtx;
+
+ return copy_to_reg (temp);
+}
+
/* Generate code to push X onto the stack, assuming it has mode MODE and
type TYPE.
MODE is redundant except when X is a CONST_INT (since they don't
@@ -2487,6 +2554,28 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra,
move_by_pieces (gen_rtx (MEM, BLKmode, gen_push_operand ()), xinner,
INTVAL (size) - used, align);
+
+ if (flag_check_memory_usage && ! in_check_memory_usage)
+ {
+ rtx temp;
+
+ in_check_memory_usage = 1;
+ temp = get_push_address (INTVAL(size) - used);
+ if (GET_CODE (x) == MEM && type && AGGREGATE_TYPE_P (type))
+ emit_library_call (chkr_copy_bitmap_libfunc, 1, VOIDmode, 3,
+ temp, ptr_mode,
+ XEXP (xinner, 0), ptr_mode,
+ GEN_INT (INTVAL(size) - used),
+ TYPE_MODE (sizetype));
+ else
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ temp, ptr_mode,
+ GEN_INT (INTVAL(size) - used),
+ TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_RW),
+ TYPE_MODE (integer_type_node));
+ in_check_memory_usage = 0;
+ }
}
else
#endif /* PUSH_ROUNDING */
@@ -2522,6 +2611,25 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra,
plus_constant (gen_rtx (PLUS, Pmode,
args_addr, args_so_far),
skip));
+ if (flag_check_memory_usage && ! in_check_memory_usage)
+ {
+ rtx target;
+
+ in_check_memory_usage = 1;
+ target = copy_to_reg (temp);
+ if (GET_CODE (x) == MEM && type && AGGREGATE_TYPE_P (type))
+ emit_library_call (chkr_copy_bitmap_libfunc, 1, VOIDmode, 3,
+ target, ptr_mode,
+ XEXP (xinner, 0), ptr_mode,
+ size, TYPE_MODE (sizetype));
+ else
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ target, ptr_mode,
+ size, TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_RW),
+ TYPE_MODE (integer_type_node));
+ in_check_memory_usage = 0;
+ }
/* TEMP is the address of the block. Copy the data there. */
if (GET_CODE (size) == CONST_INT
@@ -2532,6 +2640,7 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra,
INTVAL (size), align);
goto ret;
}
+
/* Try the most limited insn first, because there's no point
including more than one in the machine description unless
the more limited one has some advantage. */
@@ -2687,6 +2796,7 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra,
else
{
rtx addr;
+ rtx target = NULL_RTX;
/* Push padding now if padding above and stack grows down,
or if padding below and stack grows up.
@@ -2700,15 +2810,41 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra,
addr = gen_push_operand ();
else
#endif
- if (GET_CODE (args_so_far) == CONST_INT)
- addr
- = memory_address (mode,
- plus_constant (args_addr, INTVAL (args_so_far)));
- else
- addr = memory_address (mode, gen_rtx (PLUS, Pmode, args_addr,
- args_so_far));
+ {
+ if (GET_CODE (args_so_far) == CONST_INT)
+ addr
+ = memory_address (mode,
+ plus_constant (args_addr,
+ INTVAL (args_so_far)));
+ else
+ addr = memory_address (mode, gen_rtx (PLUS, Pmode, args_addr,
+ args_so_far));
+ target = addr;
+ }
emit_move_insn (gen_rtx (MEM, mode, addr), x);
+
+ if (flag_check_memory_usage && ! in_check_memory_usage)
+ {
+ in_check_memory_usage = 1;
+ if (target == 0)
+ target = get_push_address (GET_MODE_SIZE (mode));
+
+ if (GET_CODE (x) == MEM && type && AGGREGATE_TYPE_P (type))
+ emit_library_call (chkr_copy_bitmap_libfunc, 1, VOIDmode, 3,
+ target, ptr_mode,
+ XEXP (x, 0), ptr_mode,
+ GEN_INT (GET_MODE_SIZE (mode)),
+ TYPE_MODE (sizetype));
+ else
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ target, ptr_mode,
+ GEN_INT (GET_MODE_SIZE (mode)),
+ TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_RW),
+ TYPE_MODE (integer_type_node));
+ in_check_memory_usage = 0;
+ }
}
ret:
@@ -2801,7 +2937,7 @@ expand_assignment (to, from, want_value, suggest_reg)
if (mode1 == VOIDmode && want_value)
tem = stabilize_reference (tem);
- to_rtx = expand_expr (tem, NULL_RTX, VOIDmode, 0);
+ to_rtx = expand_expr (tem, NULL_RTX, VOIDmode, EXPAND_MEMORY_USE_DONT);
if (offset != 0)
{
rtx offset_rtx = expand_expr (offset, NULL_RTX, VOIDmode, 0);
@@ -2832,6 +2968,43 @@ expand_assignment (to, from, want_value, suggest_reg)
#endif
}
+ if (TREE_CODE (to) == COMPONENT_REF
+ && TREE_READONLY (TREE_OPERAND (to, 1)))
+ {
+ if (offset == 0)
+ to_rtx = copy_rtx (to_rtx);
+
+ RTX_UNCHANGING_P (to_rtx) = 1;
+ }
+
+ /* Check the access. */
+ if (flag_check_memory_usage && GET_CODE (to_rtx) == MEM)
+ {
+ rtx to_addr;
+ int size;
+ int best_mode_size;
+ enum machine_mode best_mode;
+
+ best_mode = get_best_mode (bitsize, bitpos,
+ TYPE_ALIGN (TREE_TYPE (tem)),
+ mode1, volatilep);
+ if (best_mode == VOIDmode)
+ best_mode = QImode;
+
+ best_mode_size = GET_MODE_BITSIZE (best_mode);
+ to_addr = plus_constant (XEXP (to_rtx, 0), (bitpos / BITS_PER_UNIT));
+ size = CEIL ((bitpos % best_mode_size) + bitsize, best_mode_size);
+ size *= GET_MODE_SIZE (best_mode);
+
+ /* Check the access right of the pointer. */
+ if (size)
+ emit_library_call (chkr_check_addr_libfunc, 1, VOIDmode, 3,
+ to_addr, ptr_mode,
+ GEN_INT (size), TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_WO),
+ TYPE_MODE (integer_type_node));
+ }
+
result = store_field (to_rtx, bitsize, bitpos, mode1, from,
(want_value
/* Spurious cast makes HPUX compiler happy. */
@@ -2873,7 +3046,7 @@ expand_assignment (to, from, want_value, suggest_reg)
push_temp_slots ();
value = expand_expr (from, NULL_RTX, VOIDmode, 0);
if (to_rtx == 0)
- to_rtx = expand_expr (to, NULL_RTX, VOIDmode, 0);
+ to_rtx = expand_expr (to, NULL_RTX, VOIDmode, EXPAND_MEMORY_USE_WO);
/* Handle calls that return values in multiple non-contiguous locations.
The Irix 6 ABI has examples of this. */
@@ -2894,7 +3067,7 @@ expand_assignment (to, from, want_value, suggest_reg)
Don't re-expand if it was expanded already (in COMPONENT_REF case). */
if (to_rtx == 0)
- to_rtx = expand_expr (to, NULL_RTX, VOIDmode, 0);
+ to_rtx = expand_expr (to, NULL_RTX, VOIDmode, EXPAND_MEMORY_USE_WO);
/* Don't move directly into a return register. */
if (TREE_CODE (to) == RESULT_DECL && GET_CODE (to_rtx) == REG)
@@ -2921,7 +3094,17 @@ expand_assignment (to, from, want_value, suggest_reg)
push_temp_slots ();
size = expr_size (from);
- from_rtx = expand_expr (from, NULL_RTX, VOIDmode, 0);
+ from_rtx = expand_expr (from, NULL_RTX, VOIDmode,
+ EXPAND_MEMORY_USE_DONT);
+
+ /* Copy the rights of the bitmap. */
+ if (flag_check_memory_usage)
+ emit_library_call (chkr_copy_bitmap_libfunc, 1, VOIDmode, 3,
+ XEXP (to_rtx, 0), ptr_mode,
+ XEXP (from_rtx, 0), ptr_mode,
+ convert_to_mode (TYPE_MODE (sizetype),
+ size, TREE_UNSIGNED (sizetype)),
+ TYPE_MODE (sizetype));
#ifdef TARGET_MEM_FUNCTIONS
emit_library_call (memcpy_libfunc, 0,
@@ -3010,16 +3193,16 @@ store_expr (exp, target, want_value)
do_pending_stack_adjust ();
NO_DEFER_POP;
jumpifnot (TREE_OPERAND (exp, 0), lab1);
- start_cleanup_deferal ();
+ start_cleanup_deferral ();
store_expr (TREE_OPERAND (exp, 1), target, 0);
- end_cleanup_deferal ();
+ end_cleanup_deferral ();
emit_queue ();
emit_jump_insn (gen_jump (lab2));
emit_barrier ();
emit_label (lab1);
- start_cleanup_deferal ();
+ start_cleanup_deferral ();
store_expr (TREE_OPERAND (exp, 2), target, 0);
- end_cleanup_deferal ();
+ end_cleanup_deferral ();
emit_queue ();
emit_label (lab2);
OK_DEFER_POP;
@@ -3137,6 +3320,23 @@ store_expr (exp, target, want_value)
temp = convert_modes (GET_MODE (target), TYPE_MODE (TREE_TYPE (exp)),
temp, TREE_UNSIGNED (TREE_TYPE (exp)));
+ if (flag_check_memory_usage
+ && GET_CODE (target) == MEM
+ && AGGREGATE_TYPE_P (TREE_TYPE (exp)))
+ {
+ if (GET_CODE (temp) == MEM)
+ emit_library_call (chkr_copy_bitmap_libfunc, 1, VOIDmode, 3,
+ XEXP (target, 0), ptr_mode,
+ XEXP (temp, 0), ptr_mode,
+ expr_size (exp), TYPE_MODE (sizetype));
+ else
+ emit_library_call (chkr_check_addr_libfunc, 1, VOIDmode, 3,
+ XEXP (target, 0), ptr_mode,
+ expr_size (exp), TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_WO),
+ TYPE_MODE (integer_type_node));
+ }
+
/* If value was not generated in the target, store it there.
Convert the value to TARGET's type first if nec. */
@@ -3220,6 +3420,13 @@ store_expr (exp, target, want_value)
if (size != const0_rtx)
{
+ /* Be sure we can write on ADDR. */
+ if (flag_check_memory_usage)
+ emit_library_call (chkr_check_addr_libfunc, 1, VOIDmode, 3,
+ addr, ptr_mode,
+ size, TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_WO),
+ TYPE_MODE (integer_type_node));
#ifdef TARGET_MEM_FUNCTIONS
emit_library_call (memset_libfunc, 0, VOIDmode, 3,
addr, ptr_mode,
@@ -3295,7 +3502,7 @@ is_zeros_p (exp)
is_zeros_p (TREE_REALPART (exp)) && is_zeros_p (TREE_IMAGPART (exp));
case REAL_CST:
- return REAL_VALUES_EQUAL (TREE_REAL_CST (exp), dconst0);
+ return REAL_VALUES_IDENTICAL (TREE_REAL_CST (exp), dconst0);
case CONSTRUCTOR:
if (TREE_TYPE (exp) && TREE_CODE (TREE_TYPE (exp)) == SET_TYPE)
@@ -3305,9 +3512,10 @@ is_zeros_p (exp)
return 0;
return 1;
+
+ default:
+ return 0;
}
-
- return 0;
}
/* Return 1 if EXP contains mostly (3/4) zeros. */
@@ -3425,7 +3633,7 @@ store_constructor (exp, target, cleared)
&& GET_MODE_SIZE (GET_MODE (target)) <= UNITS_PER_WORD)
{
if (! cleared)
- emit_move_insn (target, const0_rtx);
+ emit_move_insn (target, CONST0_RTX (GET_MODE (target)));
cleared = 1;
}
@@ -3493,7 +3701,7 @@ store_constructor (exp, target, cleared)
if (contains_placeholder_p (offset))
offset = build (WITH_RECORD_EXPR, sizetype,
- offset, exp);
+ offset, make_tree (TREE_TYPE (exp), target));
offset = size_binop (FLOOR_DIV_EXPR, offset,
size_int (BITS_PER_UNIT));
@@ -3935,6 +4143,9 @@ store_field (target, bitsize, bitpos, mode, exp, value_mode,
{
HOST_WIDE_INT width_mask = 0;
+ if (TREE_CODE (exp) == ERROR_MARK)
+ return const0_rtx;
+
if (bitsize < HOST_BITS_PER_WIDE_INT)
width_mask = ((HOST_WIDE_INT) 1 << bitsize) - 1;
@@ -4218,9 +4429,14 @@ get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode,
&& TREE_INT_CST_HIGH (index) == 0)
*pbitpos += TREE_INT_CST_LOW (index);
else
- offset = size_binop (PLUS_EXPR, offset,
- size_binop (FLOOR_DIV_EXPR, index,
- size_int (BITS_PER_UNIT)));
+ {
+ if (contains_placeholder_p (index))
+ index = build (WITH_RECORD_EXPR, sizetype, index, exp);
+
+ offset = size_binop (PLUS_EXPR, offset,
+ size_binop (FLOOR_DIV_EXPR, index,
+ size_int (BITS_PER_UNIT)));
+ }
}
else if (TREE_CODE (exp) != NON_LVALUE_EXPR
&& ! ((TREE_CODE (exp) == NOP_EXPR
@@ -4260,6 +4476,36 @@ get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode,
*palignment = alignment / BITS_PER_UNIT;
return exp;
}
+
+/* Subroutine of expand_exp: compute memory_usage from modifier. */
+static enum memory_use_mode
+get_memory_usage_from_modifier (modifier)
+ enum expand_modifier modifier;
+{
+ switch (modifier)
+ {
+ case EXPAND_NORMAL:
+ case EXPAND_SUM:
+ return MEMORY_USE_RO;
+ break;
+ case EXPAND_MEMORY_USE_WO:
+ return MEMORY_USE_WO;
+ break;
+ case EXPAND_MEMORY_USE_RW:
+ return MEMORY_USE_RW;
+ break;
+ case EXPAND_MEMORY_USE_DONT:
+ /* EXPAND_CONST_ADDRESS and EXPAND_INITIALIZER are converted into
+ MEMORY_USE_DONT, because they are modifiers to a call of
+ expand_expr in the ADDR_EXPR case of expand_expr. */
+ case EXPAND_CONST_ADDRESS:
+ case EXPAND_INITIALIZER:
+ return MEMORY_USE_DONT;
+ case EXPAND_MEMORY_USE_BAD:
+ default:
+ abort ();
+ }
+}
/* Given an rtx VALUE that may contain additions and multiplications,
return an equivalent value that just refers to a register or memory.
@@ -4397,12 +4643,15 @@ init_noncopied_parts (lhs, list)
}
/* Subroutine of expand_expr: return nonzero iff there is no way that
- EXP can reference X, which is being modified. */
+ EXP can reference X, which is being modified. TOP_P is nonzero if this
+ call is going to be used to determine whether we need a temporary
+ for EXP, as opposed to a recursive call to this function. */
static int
-safe_from_p (x, exp)
+safe_from_p (x, exp, top_p)
rtx x;
tree exp;
+ int top_p;
{
rtx exp_rtl = 0;
int i, nops;
@@ -4413,8 +4662,8 @@ safe_from_p (x, exp)
(except for arrays that have TYPE_ARRAY_MAX_SIZE set).
So we assume here that something at a higher level has prevented a
clash. This is somewhat bogus, but the best we can do. Only
- do this when X is BLKmode. */
- || (TREE_TYPE (exp) != 0 && TYPE_SIZE (TREE_TYPE (exp)) != 0
+ do this when X is BLKmode and when we are at the top level. */
+ || (top_p && TREE_TYPE (exp) != 0 && TYPE_SIZE (TREE_TYPE (exp)) != 0
&& TREE_CODE (TYPE_SIZE (TREE_TYPE (exp))) != INTEGER_CST
&& (TREE_CODE (TREE_TYPE (exp)) != ARRAY_TYPE
|| TYPE_ARRAY_MAX_SIZE (TREE_TYPE (exp)) == NULL_TREE
@@ -4451,19 +4700,19 @@ safe_from_p (x, exp)
case 'x':
if (TREE_CODE (exp) == TREE_LIST)
return ((TREE_VALUE (exp) == 0
- || safe_from_p (x, TREE_VALUE (exp)))
+ || safe_from_p (x, TREE_VALUE (exp), 0))
&& (TREE_CHAIN (exp) == 0
- || safe_from_p (x, TREE_CHAIN (exp))));
+ || safe_from_p (x, TREE_CHAIN (exp), 0)));
else
return 0;
case '1':
- return safe_from_p (x, TREE_OPERAND (exp, 0));
+ return safe_from_p (x, TREE_OPERAND (exp, 0), 0);
case '2':
case '<':
- return (safe_from_p (x, TREE_OPERAND (exp, 0))
- && safe_from_p (x, TREE_OPERAND (exp, 1)));
+ return (safe_from_p (x, TREE_OPERAND (exp, 0), 0)
+ && safe_from_p (x, TREE_OPERAND (exp, 1), 0));
case 'e':
case 'r':
@@ -4476,7 +4725,8 @@ safe_from_p (x, exp)
{
case ADDR_EXPR:
return (staticp (TREE_OPERAND (exp, 0))
- || safe_from_p (x, TREE_OPERAND (exp, 0)));
+ || safe_from_p (x, TREE_OPERAND (exp, 0), 0)
+ || TREE_STATIC (exp));
case INDIRECT_REF:
if (GET_CODE (x) == MEM)
@@ -4511,7 +4761,7 @@ safe_from_p (x, exp)
break;
case CLEANUP_POINT_EXPR:
- return safe_from_p (x, TREE_OPERAND (exp, 0));
+ return safe_from_p (x, TREE_OPERAND (exp, 0), 0);
case SAVE_EXPR:
exp_rtl = SAVE_EXPR_RTL (exp);
@@ -4520,11 +4770,14 @@ safe_from_p (x, exp)
case BIND_EXPR:
/* The only operand we look at is operand 1. The rest aren't
part of the expression. */
- return safe_from_p (x, TREE_OPERAND (exp, 1));
+ return safe_from_p (x, TREE_OPERAND (exp, 1), 0);
case METHOD_CALL_EXPR:
/* This takes a rtx argument, but shouldn't appear here. */
abort ();
+
+ default:
+ break;
}
/* If we have an rtx, we do not need to scan our operands. */
@@ -4534,7 +4787,7 @@ safe_from_p (x, exp)
nops = tree_code_length[(int) TREE_CODE (exp)];
for (i = 0; i < nops; i++)
if (TREE_OPERAND (exp, i) != 0
- && ! safe_from_p (x, TREE_OPERAND (exp, i)))
+ && ! safe_from_p (x, TREE_OPERAND (exp, i), 0))
return 0;
}
@@ -4656,7 +4909,15 @@ expand_expr (exp, target, tmode, modifier)
|| code == COND_EXPR)
&& TREE_CODE (type) == VOID_TYPE));
tree context;
+ /* Used by check-memory-usage to make modifier read only. */
+ enum expand_modifier ro_modifier;
+ /* Make a read-only version of the modifier. */
+ if (modifier == EXPAND_NORMAL || modifier == EXPAND_SUM
+ || modifier == EXPAND_CONST_ADDRESS || modifier == EXPAND_INITIALIZER)
+ ro_modifier = modifier;
+ else
+ ro_modifier = EXPAND_NORMAL;
if (output_bytecode && modifier != EXPAND_INITIALIZER)
{
@@ -4689,7 +4950,7 @@ expand_expr (exp, target, tmode, modifier)
&& TREE_CODE (exp) != FUNCTION_DECL
&& mode != VOIDmode && mode != BLKmode)
{
- temp = expand_expr (exp, NULL_RTX, VOIDmode, modifier);
+ temp = expand_expr (exp, NULL_RTX, VOIDmode, ro_modifier);
if (GET_CODE (temp) == MEM)
temp = copy_to_reg (temp);
return const0_rtx;
@@ -4697,12 +4958,12 @@ expand_expr (exp, target, tmode, modifier)
if (TREE_CODE_CLASS (code) == '1')
return expand_expr (TREE_OPERAND (exp, 0), const0_rtx,
- VOIDmode, modifier);
+ VOIDmode, ro_modifier);
else if (TREE_CODE_CLASS (code) == '2'
|| TREE_CODE_CLASS (code) == '<')
{
- expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, modifier);
- expand_expr (TREE_OPERAND (exp, 1), const0_rtx, VOIDmode, modifier);
+ expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, ro_modifier);
+ expand_expr (TREE_OPERAND (exp, 1), const0_rtx, VOIDmode, ro_modifier);
return const0_rtx;
}
else if ((code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR)
@@ -4710,7 +4971,7 @@ expand_expr (exp, target, tmode, modifier)
/* If the second operand has no side effects, just evaluate
the first. */
return expand_expr (TREE_OPERAND (exp, 0), const0_rtx,
- VOIDmode, modifier);
+ VOIDmode, ro_modifier);
target = 0;
}
@@ -4776,6 +5037,27 @@ expand_expr (exp, target, tmode, modifier)
pop_obstacks ();
}
+ /* Only check automatic variables. Currently, function arguments are
+ not checked (this can be done at compile-time with prototypes).
+ Aggregates are not checked. */
+ if (flag_check_memory_usage && code == VAR_DECL
+ && GET_CODE (DECL_RTL (exp)) == MEM
+ && DECL_CONTEXT (exp) != NULL_TREE
+ && ! TREE_STATIC (exp)
+ && ! AGGREGATE_TYPE_P (TREE_TYPE (exp)))
+ {
+ enum memory_use_mode memory_usage;
+ memory_usage = get_memory_usage_from_modifier (modifier);
+
+ if (memory_usage != MEMORY_USE_DONT)
+ emit_library_call (chkr_check_addr_libfunc, 1, VOIDmode, 3,
+ XEXP (DECL_RTL (exp), 0), ptr_mode,
+ GEN_INT (int_size_in_bytes (type)),
+ TYPE_MODE (sizetype),
+ GEN_INT (memory_usage),
+ TYPE_MODE (integer_type_node));
+ }
+
/* ... fall through ... */
case FUNCTION_DECL:
@@ -4889,7 +5171,8 @@ expand_expr (exp, target, tmode, modifier)
mode);
case CONST_DECL:
- return expand_expr (DECL_INITIAL (exp), target, VOIDmode, 0);
+ return expand_expr (DECL_INITIAL (exp), target, VOIDmode,
+ EXPAND_MEMORY_USE_BAD);
case REAL_CST:
/* If optimized, generate immediate CONST_DOUBLE
@@ -4961,7 +5244,7 @@ expand_expr (exp, target, tmode, modifier)
if (mode == VOIDmode)
temp = const0_rtx;
else
- temp = assign_temp (type, 0, 0, 0);
+ temp = assign_temp (type, 3, 0, 0);
SAVE_EXPR_RTL (exp) = temp;
if (!optimize && GET_CODE (temp) == REG)
@@ -4982,9 +5265,12 @@ expand_expr (exp, target, tmode, modifier)
}
if (temp == const0_rtx)
- expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, 0);
+ expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode,
+ EXPAND_MEMORY_USE_BAD);
else
store_expr (TREE_OPERAND (exp, 0), temp, 0);
+
+ TREE_USED (exp) = 1;
}
/* If the mode of SAVE_EXPR_RTL does not match that of the expression, it
@@ -5013,59 +5299,68 @@ expand_expr (exp, target, tmode, modifier)
}
case PLACEHOLDER_EXPR:
- /* If there is an object on the head of the placeholder list,
- see if some object in it's references is of type TYPE. For
- further information, see tree.def. */
- if (placeholder_list)
- {
- tree need_type = TYPE_MAIN_VARIANT (type);
- tree object = 0;
- tree old_list = placeholder_list;
- tree elt;
-
- /* See if the object is the type that we want and does not contain
- this PLACEHOLDER_EXPR itself. Then see if the operand of any
- reference is the type we want. */
- if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_PURPOSE (placeholder_list)))
- == need_type)
- && (! contains_this_placeholder_p
- (TREE_PURPOSE (placeholder_list), exp)))
- object = TREE_PURPOSE (placeholder_list);
-
- else
- /* Find the outermost reference that is of the type we want and
- that does not itself contain this PLACEHOLDER_EXPR. */
- for (elt = TREE_PURPOSE (placeholder_list);
- elt != 0
- && (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r'
- || TREE_CODE_CLASS (TREE_CODE (elt)) == '1'
- || TREE_CODE_CLASS (TREE_CODE (elt)) == '2'
- || TREE_CODE_CLASS (TREE_CODE (elt)) == 'e');
- elt = ((TREE_CODE (elt) == COMPOUND_EXPR
- || TREE_CODE (elt) == COND_EXPR)
- ? TREE_OPERAND (elt, 1) : TREE_OPERAND (elt, 0)))
- if (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r'
- && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (elt, 0)))
- == need_type)
- && ! contains_this_placeholder_p (TREE_OPERAND (elt, 0),
- exp))
- {
- object = TREE_OPERAND (elt, 0);
- break;
- }
-
- if (object != 0)
- {
- /* Expand this object skipping the list entries before
- it was found in case it is also a PLACEHOLDER_EXPR.
- In that case, we want to translate it using subsequent
- entries. */
- placeholder_list = TREE_CHAIN (placeholder_list);
- temp = expand_expr (object, original_target, tmode, modifier);
- placeholder_list = old_list;
- return temp;
- }
- }
+ {
+ tree placeholder_expr;
+
+ /* If there is an object on the head of the placeholder list,
+ see if some object in it of type TYPE or a pointer to it. For
+ further information, see tree.def. */
+ for (placeholder_expr = placeholder_list;
+ placeholder_expr != 0;
+ placeholder_expr = TREE_CHAIN (placeholder_expr))
+ {
+ tree need_type = TYPE_MAIN_VARIANT (type);
+ tree object = 0;
+ tree old_list = placeholder_list;
+ tree elt;
+
+ /* Find the outermost reference that is of the type we want.
+ If none, see if any object has a type that is a pointer to
+ the type we want. */
+ for (elt = TREE_PURPOSE (placeholder_expr);
+ elt != 0 && object == 0;
+ elt
+ = ((TREE_CODE (elt) == COMPOUND_EXPR
+ || TREE_CODE (elt) == COND_EXPR)
+ ? TREE_OPERAND (elt, 1)
+ : (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r'
+ || TREE_CODE_CLASS (TREE_CODE (elt)) == '1'
+ || TREE_CODE_CLASS (TREE_CODE (elt)) == '2'
+ || TREE_CODE_CLASS (TREE_CODE (elt)) == 'e')
+ ? TREE_OPERAND (elt, 0) : 0))
+ if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type)
+ object = elt;
+
+ for (elt = TREE_PURPOSE (placeholder_expr);
+ elt != 0 && object == 0;
+ elt
+ = ((TREE_CODE (elt) == COMPOUND_EXPR
+ || TREE_CODE (elt) == COND_EXPR)
+ ? TREE_OPERAND (elt, 1)
+ : (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r'
+ || TREE_CODE_CLASS (TREE_CODE (elt)) == '1'
+ || TREE_CODE_CLASS (TREE_CODE (elt)) == '2'
+ || TREE_CODE_CLASS (TREE_CODE (elt)) == 'e')
+ ? TREE_OPERAND (elt, 0) : 0))
+ if (POINTER_TYPE_P (TREE_TYPE (elt))
+ && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt)))
+ == need_type))
+ object = build1 (INDIRECT_REF, need_type, elt);
+
+ if (object != 0)
+ {
+ /* Expand this object skipping the list entries before
+ it was found in case it is also a PLACEHOLDER_EXPR.
+ In that case, we want to translate it using subsequent
+ entries. */
+ placeholder_list = TREE_CHAIN (placeholder_expr);
+ temp = expand_expr (object, original_target, tmode,
+ ro_modifier);
+ placeholder_list = old_list;
+ return temp;
+ }
+ }
+ }
/* We can't find the object or there was a missing WITH_RECORD_EXPR. */
abort ();
@@ -5076,7 +5371,7 @@ expand_expr (exp, target, tmode, modifier)
placeholder_list = tree_cons (TREE_OPERAND (exp, 1), NULL_TREE,
placeholder_list);
target = expand_expr (TREE_OPERAND (exp, 0), original_target,
- tmode, modifier);
+ tmode, ro_modifier);
placeholder_list = TREE_CHAIN (placeholder_list);
return target;
@@ -5120,7 +5415,7 @@ expand_expr (exp, target, tmode, modifier)
vars = TREE_CHAIN (vars);
}
- temp = expand_expr (TREE_OPERAND (exp, 1), target, tmode, modifier);
+ temp = expand_expr (TREE_OPERAND (exp, 1), target, tmode, ro_modifier);
expand_end_bindings (TREE_OPERAND (exp, 0), 0, 0);
@@ -5146,7 +5441,8 @@ expand_expr (exp, target, tmode, modifier)
{
tree elt;
for (elt = CONSTRUCTOR_ELTS (exp); elt; elt = TREE_CHAIN (elt))
- expand_expr (TREE_VALUE (elt), const0_rtx, VOIDmode, 0);
+ expand_expr (TREE_VALUE (elt), const0_rtx, VOIDmode,
+ EXPAND_MEMORY_USE_BAD);
return const0_rtx;
}
@@ -5159,7 +5455,7 @@ expand_expr (exp, target, tmode, modifier)
all operands are constant, put it in memory as well. */
else if ((TREE_STATIC (exp)
&& ((mode == BLKmode
- && ! (target != 0 && safe_from_p (target, exp)))
+ && ! (target != 0 && safe_from_p (target, exp, 1)))
|| TREE_ADDRESSABLE (exp)
|| (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
&& (move_by_pieces_ninsns
@@ -5186,7 +5482,7 @@ expand_expr (exp, target, tmode, modifier)
{
/* Handle calls that pass values in multiple non-contiguous
locations. The Irix 6 ABI has examples of this. */
- if (target == 0 || ! safe_from_p (target, exp)
+ if (target == 0 || ! safe_from_p (target, exp, 1)
|| GET_CODE (target) == PARALLEL)
{
if (mode != BLKmode && ! TREE_ADDRESSABLE (exp))
@@ -5215,6 +5511,24 @@ expand_expr (exp, target, tmode, modifier)
op0 = expand_expr (exp1, NULL_RTX, VOIDmode, EXPAND_SUM);
op0 = memory_address (mode, op0);
+ if (flag_check_memory_usage && !AGGREGATE_TYPE_P (TREE_TYPE (exp)))
+ {
+ enum memory_use_mode memory_usage;
+ memory_usage = get_memory_usage_from_modifier (modifier);
+
+ if (memory_usage != MEMORY_USE_DONT)
+ {
+ in_check_memory_usage = 1;
+ emit_library_call (chkr_check_addr_libfunc, 1, VOIDmode, 3,
+ op0, ptr_mode,
+ GEN_INT (int_size_in_bytes (type)),
+ TYPE_MODE (sizetype),
+ GEN_INT (memory_usage),
+ TYPE_MODE (integer_type_node));
+ in_check_memory_usage = 0;
+ }
+ }
+
temp = gen_rtx (MEM, mode, op0);
/* If address was computed by addition,
mark this as an element of an aggregate. */
@@ -5294,7 +5608,7 @@ expand_expr (exp, target, tmode, modifier)
elem = TREE_CHAIN (elem);
if (elem)
return expand_expr (fold (TREE_VALUE (elem)), target,
- tmode, modifier);
+ tmode, ro_modifier);
}
}
@@ -5317,7 +5631,7 @@ expand_expr (exp, target, tmode, modifier)
elem = TREE_CHAIN (elem);
if (elem)
return expand_expr (fold (TREE_VALUE (elem)), target,
- tmode, modifier);
+ tmode, ro_modifier);
}
else if (TREE_CODE (init) == STRING_CST
&& TREE_INT_CST_HIGH (index) == 0
@@ -5364,8 +5678,6 @@ expand_expr (exp, target, tmode, modifier)
if (DECL_BIT_FIELD (TREE_PURPOSE (elt)))
{
int bitsize = DECL_FIELD_SIZE (TREE_PURPOSE (elt));
- enum machine_mode imode
- = TYPE_MODE (TREE_TYPE (TREE_PURPOSE (elt)));
if (TREE_UNSIGNED (TREE_TYPE (TREE_PURPOSE (elt))))
{
@@ -5374,8 +5686,11 @@ expand_expr (exp, target, tmode, modifier)
}
else
{
+ enum machine_mode imode
+ = TYPE_MODE (TREE_TYPE (TREE_PURPOSE (elt)));
tree count
- = build_int_2 (imode - bitsize, 0);
+ = build_int_2 (GET_MODE_BITSIZE (imode) - bitsize,
+ 0);
op0 = expand_shift (LSHIFT_EXPR, imode, op0, count,
target, 0);
@@ -5415,7 +5730,8 @@ expand_expr (exp, target, tmode, modifier)
!= INTEGER_CST)
? target : NULL_RTX),
VOIDmode,
- modifier == EXPAND_INITIALIZER ? modifier : 0);
+ modifier == EXPAND_INITIALIZER
+ ? modifier : EXPAND_NORMAL);
/* If this is a constant, put it into a register if it is a
legitimate constant and memory if it isn't. */
@@ -5446,6 +5762,31 @@ expand_expr (exp, target, tmode, modifier)
MEM_VOLATILE_P (op0) = 1;
}
+ /* Check the access. */
+ if (flag_check_memory_usage && GET_CODE (op0) == MEM)
+ {
+ enum memory_use_mode memory_usage;
+ memory_usage = get_memory_usage_from_modifier (modifier);
+
+ if (memory_usage != MEMORY_USE_DONT)
+ {
+ rtx to;
+ int size;
+
+ to = plus_constant (XEXP (op0, 0), (bitpos / BITS_PER_UNIT));
+ size = (bitpos % BITS_PER_UNIT) + bitsize + BITS_PER_UNIT - 1;
+
+ /* Check the access right of the pointer. */
+ if (size > BITS_PER_UNIT)
+ emit_library_call (chkr_check_addr_libfunc, 1, VOIDmode, 3,
+ to, ptr_mode,
+ GEN_INT (size / BITS_PER_UNIT),
+ TYPE_MODE (sizetype),
+ GEN_INT (memory_usage),
+ TYPE_MODE (integer_type_node));
+ }
+ }
+
/* In cases where an aligned union has an unaligned object
as a field, we might be extracting a BLKmode value from
an integer-mode (e.g., SImode) object. Handle this case
@@ -5679,7 +6020,7 @@ expand_expr (exp, target, tmode, modifier)
if (RTL_EXPR_RTL (exp) == 0)
{
RTL_EXPR_RTL (exp)
- = expand_expr (TREE_OPERAND (exp, 0), target, tmode, modifier);
+ = expand_expr (TREE_OPERAND (exp, 0), target, tmode, ro_modifier);
expand_decl_cleanup (NULL_TREE, TREE_OPERAND (exp, 2));
/* That's it for this cleanup. */
@@ -5696,7 +6037,7 @@ expand_expr (exp, target, tmode, modifier)
target_temp_slot_level = temp_slot_level;
- op0 = expand_expr (TREE_OPERAND (exp, 0), target, tmode, modifier);
+ op0 = expand_expr (TREE_OPERAND (exp, 0), target, tmode, ro_modifier);
/* If we're going to use this value, load it up now. */
if (! ignore)
op0 = force_not_mem (op0);
@@ -5756,7 +6097,7 @@ expand_expr (exp, target, tmode, modifier)
if (mode == TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))))
{
op0 = expand_expr (TREE_OPERAND (exp, 0), target, VOIDmode,
- modifier);
+ ro_modifier);
/* If the signedness of the conversion differs and OP0 is
a promoted SUBREG, clear that indication since we now
@@ -5875,11 +6216,11 @@ expand_expr (exp, target, tmode, modifier)
goto binop;
preexpand_calls (exp);
- if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1)))
+ if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1))
subtarget = 0;
- op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, modifier);
- op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, modifier);
+ op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, ro_modifier);
+ op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, ro_modifier);
both_summands:
/* Make sure any term that's a sum with a constant comes last. */
@@ -5939,9 +6280,9 @@ expand_expr (exp, target, tmode, modifier)
&& really_constant_p (TREE_OPERAND (exp, 1)))
{
rtx op0 = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX,
- VOIDmode, modifier);
+ VOIDmode, ro_modifier);
rtx op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX,
- VOIDmode, modifier);
+ VOIDmode, ro_modifier);
/* If the last operand is a CONST_INT, use plus_constant of
the negated constant. Else make the MINUS. */
@@ -5969,7 +6310,7 @@ expand_expr (exp, target, tmode, modifier)
return expand_expr (convert (type,
build (PLUS_EXPR, newtype,
newop0, newneg)),
- target, tmode, modifier);
+ target, tmode, ro_modifier);
}
else
{
@@ -5999,7 +6340,8 @@ expand_expr (exp, target, tmode, modifier)
&& TREE_CODE (TREE_OPERAND (exp, 1)) == INTEGER_CST
&& GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT)
{
- op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, EXPAND_SUM);
+ op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode,
+ EXPAND_SUM);
/* Apply distributive law if OP0 is x+c. */
if (GET_CODE (op0) == PLUS
@@ -6019,7 +6361,7 @@ expand_expr (exp, target, tmode, modifier)
GEN_INT (TREE_INT_CST_LOW (TREE_OPERAND (exp, 1))));
}
- if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1)))
+ if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1))
subtarget = 0;
/* Check for multiplying things that have been extended
@@ -6102,7 +6444,7 @@ expand_expr (exp, target, tmode, modifier)
case ROUND_DIV_EXPR:
case EXACT_DIV_EXPR:
preexpand_calls (exp);
- if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1)))
+ if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1))
subtarget = 0;
/* Possible optimization: compute the dividend with EXPAND_SUM
then if the divisor is constant can optimize the case
@@ -6120,7 +6462,7 @@ expand_expr (exp, target, tmode, modifier)
case CEIL_MOD_EXPR:
case ROUND_MOD_EXPR:
preexpand_calls (exp);
- if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1)))
+ if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1))
subtarget = 0;
op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, 0);
op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, 0);
@@ -6172,12 +6514,12 @@ expand_expr (exp, target, tmode, modifier)
return op0;
return expand_abs (mode, op0, target, unsignedp,
- safe_from_p (target, TREE_OPERAND (exp, 0)));
+ safe_from_p (target, TREE_OPERAND (exp, 0), 1));
case MAX_EXPR:
case MIN_EXPR:
target = original_target;
- if (target == 0 || ! safe_from_p (target, TREE_OPERAND (exp, 1))
+ if (target == 0 || ! safe_from_p (target, TREE_OPERAND (exp, 1), 1)
|| (GET_CODE (target) == MEM && MEM_VOLATILE_P (target))
|| GET_MODE (target) != mode
|| (GET_CODE (target) == REG
@@ -6292,7 +6634,7 @@ expand_expr (exp, target, tmode, modifier)
case LROTATE_EXPR:
case RROTATE_EXPR:
preexpand_calls (exp);
- if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1)))
+ if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1))
subtarget = 0;
op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, 0);
return expand_shift (code, mode, op0, TREE_OPERAND (exp, 1), target,
@@ -6340,7 +6682,7 @@ expand_expr (exp, target, tmode, modifier)
case TRUTH_ANDIF_EXPR:
case TRUTH_ORIF_EXPR:
if (! ignore
- && (target == 0 || ! safe_from_p (target, exp)
+ && (target == 0 || ! safe_from_p (target, exp, 1)
/* Make sure we don't have a hard reg (such as function's return
value) live across basic blocks, if not optimizing. */
|| (!optimize && GET_CODE (target) == REG
@@ -6423,11 +6765,11 @@ expand_expr (exp, target, tmode, modifier)
if (ignore)
{
expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode,
- modifier);
+ ro_modifier);
return const0_rtx;
}
- op0 = expand_expr (TREE_OPERAND (exp, 0), target, mode, modifier);
+ op0 = expand_expr (TREE_OPERAND (exp, 0), target, mode, ro_modifier);
if (GET_MODE (op0) == mode)
return op0;
@@ -6468,7 +6810,7 @@ expand_expr (exp, target, tmode, modifier)
if (ignore)
temp = 0;
else if (original_target
- && (safe_from_p (original_target, TREE_OPERAND (exp, 0))
+ && (safe_from_p (original_target, TREE_OPERAND (exp, 0), 1)
|| (singleton && GET_CODE (original_target) == REG
&& REGNO (original_target) >= FIRST_PSEUDO_REGISTER
&& original_target == var_rtx (singleton)))
@@ -6512,7 +6854,7 @@ expand_expr (exp, target, tmode, modifier)
= invert_truthvalue (TREE_OPERAND (exp, 0));
result = do_store_flag (TREE_OPERAND (exp, 0),
- (safe_from_p (temp, singleton)
+ (safe_from_p (temp, singleton, 1)
? temp : NULL_RTX),
mode, BRANCH_COST <= 1);
@@ -6522,7 +6864,7 @@ expand_expr (exp, target, tmode, modifier)
(TREE_OPERAND
(binary_op, 1)),
0),
- (safe_from_p (temp, singleton)
+ (safe_from_p (temp, singleton, 1)
? temp : NULL_RTX), 0);
if (result)
@@ -6549,7 +6891,7 @@ expand_expr (exp, target, tmode, modifier)
if it is a hard register, because evaluating the condition
might clobber it. */
if ((binary_op
- && ! safe_from_p (temp, TREE_OPERAND (binary_op, 1)))
+ && ! safe_from_p (temp, TREE_OPERAND (binary_op, 1), 1))
|| (GET_CODE (temp) == REG
&& REGNO (temp) < FIRST_PSEUDO_REGISTER))
temp = gen_reg_rtx (mode);
@@ -6563,7 +6905,7 @@ expand_expr (exp, target, tmode, modifier)
else
jumpifnot (TREE_OPERAND (exp, 0), op0);
- start_cleanup_deferal ();
+ start_cleanup_deferral ();
if (binary_op && temp == 0)
/* Just touch the other operand. */
expand_expr (TREE_OPERAND (binary_op, 1),
@@ -6588,15 +6930,16 @@ expand_expr (exp, target, tmode, modifier)
&& integer_zerop (TREE_OPERAND (TREE_OPERAND (exp, 0), 1))
&& operand_equal_p (TREE_OPERAND (TREE_OPERAND (exp, 0), 0),
TREE_OPERAND (exp, 1), 0)
- && ! TREE_SIDE_EFFECTS (TREE_OPERAND (exp, 0))
- && safe_from_p (temp, TREE_OPERAND (exp, 2)))
+ && (! TREE_SIDE_EFFECTS (TREE_OPERAND (exp, 0))
+ || TREE_CODE (TREE_OPERAND (exp, 1)) == SAVE_EXPR)
+ && safe_from_p (temp, TREE_OPERAND (exp, 2), 1))
{
if (GET_CODE (temp) == REG && REGNO (temp) < FIRST_PSEUDO_REGISTER)
temp = gen_reg_rtx (mode);
store_expr (TREE_OPERAND (exp, 1), temp, 0);
jumpif (TREE_OPERAND (exp, 0), op0);
- start_cleanup_deferal ();
+ start_cleanup_deferral ();
store_expr (TREE_OPERAND (exp, 2), temp, 0);
op1 = op0;
}
@@ -6605,15 +6948,16 @@ expand_expr (exp, target, tmode, modifier)
&& integer_zerop (TREE_OPERAND (TREE_OPERAND (exp, 0), 1))
&& operand_equal_p (TREE_OPERAND (TREE_OPERAND (exp, 0), 0),
TREE_OPERAND (exp, 2), 0)
- && ! TREE_SIDE_EFFECTS (TREE_OPERAND (exp, 0))
- && safe_from_p (temp, TREE_OPERAND (exp, 1)))
+ && (! TREE_SIDE_EFFECTS (TREE_OPERAND (exp, 0))
+ || TREE_CODE (TREE_OPERAND (exp, 2)) == SAVE_EXPR)
+ && safe_from_p (temp, TREE_OPERAND (exp, 1), 1))
{
if (GET_CODE (temp) == REG && REGNO (temp) < FIRST_PSEUDO_REGISTER)
temp = gen_reg_rtx (mode);
store_expr (TREE_OPERAND (exp, 2), temp, 0);
jumpifnot (TREE_OPERAND (exp, 0), op0);
- start_cleanup_deferal ();
+ start_cleanup_deferral ();
store_expr (TREE_OPERAND (exp, 1), temp, 0);
op1 = op0;
}
@@ -6622,18 +6966,18 @@ expand_expr (exp, target, tmode, modifier)
op1 = gen_label_rtx ();
jumpifnot (TREE_OPERAND (exp, 0), op0);
- start_cleanup_deferal ();
+ start_cleanup_deferral ();
if (temp != 0)
store_expr (TREE_OPERAND (exp, 1), temp, 0);
else
expand_expr (TREE_OPERAND (exp, 1),
ignore ? const0_rtx : NULL_RTX, VOIDmode, 0);
- end_cleanup_deferal ();
+ end_cleanup_deferral ();
emit_queue ();
emit_jump_insn (gen_jump (op1));
emit_barrier ();
emit_label (op0);
- start_cleanup_deferal ();
+ start_cleanup_deferral ();
if (temp != 0)
store_expr (TREE_OPERAND (exp, 2), temp, 0);
else
@@ -6641,7 +6985,7 @@ expand_expr (exp, target, tmode, modifier)
ignore ? const0_rtx : NULL_RTX, VOIDmode, 0);
}
- end_cleanup_deferal ();
+ end_cleanup_deferral ();
emit_queue ();
emit_label (op1);
@@ -6684,10 +7028,15 @@ expand_expr (exp, target, tmode, modifier)
}
else
{
- target = assign_temp (type, 2, 1, 1);
+ target = assign_temp (type, 2, 0, 1);
/* All temp slots at this level must not conflict. */
preserve_temp_slots (target);
DECL_RTL (slot) = target;
+ if (TREE_ADDRESSABLE (slot))
+ {
+ TREE_ADDRESSABLE (slot) = 0;
+ mark_addressable (slot);
+ }
/* Since SLOT is not known to the called function
to belong to its stack frame, we must build an explicit
@@ -6719,14 +7068,24 @@ expand_expr (exp, target, tmode, modifier)
if (TREE_OPERAND (exp, 1) == NULL_TREE)
return target;
}
-
- DECL_RTL (slot) = target;
+ else
+ {
+ DECL_RTL (slot) = target;
+ /* If we must have an addressable slot, then make sure that
+ the RTL that we just stored in slot is OK. */
+ if (TREE_ADDRESSABLE (slot))
+ {
+ TREE_ADDRESSABLE (slot) = 0;
+ mark_addressable (slot);
+ }
+ }
}
exp1 = TREE_OPERAND (exp, 3) = TREE_OPERAND (exp, 1);
/* Mark it as expanded. */
TREE_OPERAND (exp, 1) = NULL_TREE;
+ TREE_USED (slot) = 1;
store_expr (exp1, target, 0);
expand_decl_cleanup (NULL_TREE, cleanups);
@@ -6841,7 +7200,8 @@ expand_expr (exp, target, tmode, modifier)
/* Are we taking the address of a nested function? */
if (TREE_CODE (TREE_OPERAND (exp, 0)) == FUNCTION_DECL
&& decl_function_context (TREE_OPERAND (exp, 0)) != 0
- && ! DECL_NO_STATIC_CHAIN (TREE_OPERAND (exp, 0)))
+ && ! DECL_NO_STATIC_CHAIN (TREE_OPERAND (exp, 0))
+ && ! TREE_STATIC (exp))
{
op0 = trampoline_address (TREE_OPERAND (exp, 0));
op0 = force_operand (op0, target);
@@ -7055,7 +7415,7 @@ expand_expr (exp, target, tmode, modifier)
from the optab already placed in `this_optab'. */
binop:
preexpand_calls (exp);
- if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1)))
+ if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1))
subtarget = 0;
op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, 0);
op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, 0);
@@ -7522,6 +7882,9 @@ bc_expand_expr (exp)
return;
}
+
+ default:
+ abort ();
}
abort ();
@@ -7594,7 +7957,7 @@ get_pointer_alignment (exp, max_align)
{
unsigned align, inner;
- if (TREE_CODE (TREE_TYPE (exp)) != POINTER_TYPE)
+ if (! POINTER_TYPE_P (TREE_TYPE (exp)))
return 0;
align = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (exp)));
@@ -7608,8 +7971,9 @@ get_pointer_alignment (exp, max_align)
case CONVERT_EXPR:
case NON_LVALUE_EXPR:
exp = TREE_OPERAND (exp, 0);
- if (TREE_CODE (TREE_TYPE (exp)) != POINTER_TYPE)
+ if (! POINTER_TYPE_P (TREE_TYPE (exp)))
return align;
+
inner = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (exp)));
align = MIN (inner, max_align);
break;
@@ -7767,7 +8131,8 @@ expand_builtin_return_addr (fndecl_code, count, tem)
arbitrary frames. For example, on the sparc, we must first flush
all register windows to the stack. */
#ifdef SETUP_FRAME_ADDRESSES
- SETUP_FRAME_ADDRESSES ();
+ if (count > 0)
+ SETUP_FRAME_ADDRESSES ();
#endif
/* On the sparc, the return address is not in the frame, it is in a
@@ -7969,6 +8334,11 @@ expand_builtin_setjmp (buf_addr, target)
#endif
abort ();
+#ifdef HAVE_builtin_setjmp_receiver
+ if (HAVE_builtin_setjmp_receiver)
+ emit_insn (gen_builtin_setjmp_receiver ());
+#endif
+
emit_move_insn (target, const1_rtx);
emit_label (lab2);
return target;
@@ -8159,9 +8529,9 @@ expand_builtin (exp, target, subtarget, mode, ignore)
case BUILT_IN_APPLY:
if (arglist == 0
/* Arg could be non-pointer if user redeclared this fcn wrong. */
- || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE
+ || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist)))
|| TREE_CHAIN (arglist) == 0
- || TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))) != POINTER_TYPE
+ || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist))))
|| TREE_CHAIN (TREE_CHAIN (arglist)) == 0
|| TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))))) != INTEGER_TYPE)
return const0_rtx;
@@ -8183,7 +8553,7 @@ expand_builtin (exp, target, subtarget, mode, ignore)
case BUILT_IN_RETURN:
if (arglist
/* Arg could be non-pointer if user redeclared this fcn wrong. */
- && TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) == POINTER_TYPE)
+ && POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist))))
expand_builtin_return (expand_expr (TREE_VALUE (arglist),
NULL_RTX, VOIDmode, 0));
return const0_rtx;
@@ -8286,7 +8656,7 @@ expand_builtin (exp, target, subtarget, mode, ignore)
TREE_STATIC (result) = 1;
result = build (INDIRECT_REF, build_pointer_type (type), result);
TREE_CONSTANT (result) = 1;
- return expand_expr (result, NULL_RTX, VOIDmode, 0);
+ return expand_expr (result, NULL_RTX, VOIDmode, EXPAND_MEMORY_USE_BAD);
#endif
}
@@ -8421,6 +8791,16 @@ expand_builtin (exp, target, subtarget, mode, ignore)
TREE_INT_CST_LOW (TREE_VALUE (arglist)),
hard_frame_pointer_rtx);
+ /* Some ports cannot access arbitrary stack frames. */
+ if (tem == NULL)
+ {
+ if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_FRAME_ADDRESS)
+ warning ("unsupported arg to `__builtin_frame_address'");
+ else
+ warning ("unsupported arg to `__builtin_return_address'");
+ return const0_rtx;
+ }
+
/* For __builtin_frame_address, return what we've got. */
if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_FRAME_ADDRESS)
return tem;
@@ -8430,6 +8810,16 @@ expand_builtin (exp, target, subtarget, mode, ignore)
return tem;
}
+ /* Returns the address of the area where the structure is returned.
+ 0 otherwise. */
+ case BUILT_IN_AGGREGATE_INCOMING_ADDRESS:
+ if (arglist != 0
+ || ! AGGREGATE_TYPE_P (TREE_TYPE (TREE_TYPE (current_function_decl)))
+ || GET_CODE (DECL_RTL (DECL_RESULT (current_function_decl))) != MEM)
+ return const0_rtx;
+ else
+ return XEXP (DECL_RTL (DECL_RESULT (current_function_decl)), 0);
+
case BUILT_IN_ALLOCA:
if (arglist == 0
/* Arg could be non-integer if user redeclared this fcn wrong. */
@@ -8469,7 +8859,7 @@ expand_builtin (exp, target, subtarget, mode, ignore)
if (arglist == 0
/* Arg could be non-pointer if user redeclared this fcn wrong. */
- || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE)
+ || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist))))
break;
else
{
@@ -8485,7 +8875,7 @@ expand_builtin (exp, target, subtarget, mode, ignore)
/* If the length is known, just return it. */
if (len != 0)
- return expand_expr (len, target, mode, 0);
+ return expand_expr (len, target, mode, EXPAND_MEMORY_USE_BAD);
/* If SRC is not a pointer type, don't do this operation inline. */
if (align == 0)
@@ -8516,13 +8906,20 @@ expand_builtin (exp, target, subtarget, mode, ignore)
if (! (*insn_operand_predicate[(int)icode][0]) (result, insn_mode))
result = gen_reg_rtx (insn_mode);
-
src_rtx = memory_address (BLKmode,
expand_expr (src, NULL_RTX, ptr_mode,
EXPAND_NORMAL));
+
if (! (*insn_operand_predicate[(int)icode][1]) (src_rtx, Pmode))
src_rtx = copy_to_mode_reg (Pmode, src_rtx);
+ /* Check the string is readable and has an end. */
+ if (flag_check_memory_usage)
+ emit_library_call (chkr_check_str_libfunc, 1, VOIDmode, 2,
+ src_rtx, ptr_mode,
+ GEN_INT (MEMORY_USE_RO),
+ TYPE_MODE (integer_type_node));
+
char_rtx = const0_rtx;
char_mode = insn_operand_mode[(int)icode][2];
if (! (*insn_operand_predicate[(int)icode][2]) (char_rtx, char_mode))
@@ -8551,9 +8948,9 @@ expand_builtin (exp, target, subtarget, mode, ignore)
if (arglist == 0
/* Arg could be non-pointer if user redeclared this fcn wrong. */
- || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE
+ || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist)))
|| TREE_CHAIN (arglist) == 0
- || TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))) != POINTER_TYPE)
+ || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))))
break;
else
{
@@ -8575,11 +8972,13 @@ expand_builtin (exp, target, subtarget, mode, ignore)
if (arglist == 0
/* Arg could be non-pointer if user redeclared this fcn wrong. */
- || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE
+ || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist)))
|| TREE_CHAIN (arglist) == 0
- || TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))) != POINTER_TYPE
+ || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist))))
|| TREE_CHAIN (TREE_CHAIN (arglist)) == 0
- || TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))))) != INTEGER_TYPE)
+ || (TREE_CODE (TREE_TYPE (TREE_VALUE
+ (TREE_CHAIN (TREE_CHAIN (arglist)))))
+ != INTEGER_TYPE))
break;
else
{
@@ -8592,7 +8991,7 @@ expand_builtin (exp, target, subtarget, mode, ignore)
= get_pointer_alignment (src, BIGGEST_ALIGNMENT) / BITS_PER_UNIT;
int dest_align
= get_pointer_alignment (dest, BIGGEST_ALIGNMENT) / BITS_PER_UNIT;
- rtx dest_rtx, dest_mem, src_mem;
+ rtx dest_rtx, dest_mem, src_mem, src_rtx, dest_addr, len_rtx;
/* If either SRC or DEST is not a pointer type, don't do
this operation in-line. */
@@ -8611,11 +9010,18 @@ expand_builtin (exp, target, subtarget, mode, ignore)
dest = TREE_OPERAND (dest, 0);
type = TREE_TYPE (TREE_TYPE (dest));
MEM_IN_STRUCT_P (dest_mem) = AGGREGATE_TYPE_P (type);
+ src_rtx = expand_expr (src, NULL_RTX, ptr_mode, EXPAND_SUM);
src_mem = gen_rtx (MEM, BLKmode,
- memory_address (BLKmode,
- expand_expr (src, NULL_RTX,
- ptr_mode,
- EXPAND_SUM)));
+ memory_address (BLKmode, src_rtx));
+ len_rtx = expand_expr (len, NULL_RTX, VOIDmode, 0);
+
+ /* Just copy the rights of SRC to the rights of DEST. */
+ if (flag_check_memory_usage)
+ emit_library_call (chkr_copy_bitmap_libfunc, 1, VOIDmode, 3,
+ dest_rtx, ptr_mode,
+ src_rtx, ptr_mode,
+ len_rtx, TYPE_MODE (sizetype));
+
/* There could be a void* cast on top of the object. */
while (TREE_CODE (src) == NOP_EXPR)
src = TREE_OPERAND (src, 0);
@@ -8623,10 +9029,14 @@ expand_builtin (exp, target, subtarget, mode, ignore)
MEM_IN_STRUCT_P (src_mem) = AGGREGATE_TYPE_P (type);
/* Copy word part most expediently. */
- emit_block_move (dest_mem, src_mem,
- expand_expr (len, NULL_RTX, VOIDmode, 0),
- MIN (src_align, dest_align));
- return force_operand (dest_rtx, NULL_RTX);
+ dest_addr
+ = emit_block_move (dest_mem, src_mem, len_rtx,
+ MIN (src_align, dest_align));
+
+ if (dest_addr == 0)
+ dest_addr = force_operand (dest_rtx, NULL_RTX);
+
+ return dest_addr;
}
case BUILT_IN_MEMSET:
@@ -8636,7 +9046,7 @@ expand_builtin (exp, target, subtarget, mode, ignore)
if (arglist == 0
/* Arg could be non-pointer if user redeclared this fcn wrong. */
- || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE
+ || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist)))
|| TREE_CHAIN (arglist) == 0
|| (TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist))))
!= INTEGER_TYPE)
@@ -8655,7 +9065,7 @@ expand_builtin (exp, target, subtarget, mode, ignore)
int dest_align
= get_pointer_alignment (dest, BIGGEST_ALIGNMENT) / BITS_PER_UNIT;
- rtx dest_rtx, dest_mem;
+ rtx dest_rtx, dest_mem, dest_addr, len_rtx;
/* If DEST is not a pointer type, don't do this
operation in-line. */
@@ -8669,16 +9079,29 @@ expand_builtin (exp, target, subtarget, mode, ignore)
dest_rtx = expand_expr (dest, NULL_RTX, ptr_mode, EXPAND_SUM);
dest_mem = gen_rtx (MEM, BLKmode,
memory_address (BLKmode, dest_rtx));
+ len_rtx = expand_expr (len, NULL_RTX, VOIDmode, 0);
+
+ /* Just check DST is writable and mark it as readable. */
+ if (flag_check_memory_usage)
+ emit_library_call (chkr_check_addr_libfunc, 1, VOIDmode, 3,
+ dest_rtx, ptr_mode,
+ len_rtx, TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_WO),
+ TYPE_MODE (integer_type_node));
+
+
/* There could be a void* cast on top of the object. */
while (TREE_CODE (dest) == NOP_EXPR)
dest = TREE_OPERAND (dest, 0);
type = TREE_TYPE (TREE_TYPE (dest));
MEM_IN_STRUCT_P (dest_mem) = AGGREGATE_TYPE_P (type);
- clear_storage (dest_mem, expand_expr (len, NULL_RTX, VOIDmode, 0),
- dest_align);
+ dest_addr = clear_storage (dest_mem, len_rtx, dest_align);
- return force_operand (dest_rtx, NULL_RTX);
+ if (dest_addr == 0)
+ dest_addr = force_operand (dest_rtx, NULL_RTX);
+
+ return dest_addr;
}
/* These comparison functions need an instruction that returns an actual
@@ -8690,11 +9113,15 @@ expand_builtin (exp, target, subtarget, mode, ignore)
if (!optimize && ! CALLED_AS_BUILT_IN (fndecl))
break;
+ /* If we need to check memory accesses, call the library function. */
+ if (flag_check_memory_usage)
+ break;
+
if (arglist == 0
/* Arg could be non-pointer if user redeclared this fcn wrong. */
- || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE
+ || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist)))
|| TREE_CHAIN (arglist) == 0
- || TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))) != POINTER_TYPE)
+ || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))))
break;
else if (!HAVE_cmpstrsi)
break;
@@ -8743,11 +9170,15 @@ expand_builtin (exp, target, subtarget, mode, ignore)
if (!optimize && ! CALLED_AS_BUILT_IN (fndecl))
break;
+ /* If we need to check memory accesses, call the library function. */
+ if (flag_check_memory_usage)
+ break;
+
if (arglist == 0
/* Arg could be non-pointer if user redeclared this fcn wrong. */
- || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE
+ || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist)))
|| TREE_CHAIN (arglist) == 0
- || TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))) != POINTER_TYPE
+ || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist))))
|| TREE_CHAIN (TREE_CHAIN (arglist)) == 0
|| TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))))) != INTEGER_TYPE)
break;
@@ -8813,7 +9244,7 @@ expand_builtin (exp, target, subtarget, mode, ignore)
case BUILT_IN_SETJMP:
if (arglist == 0
- || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE)
+ || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist))))
break;
{
@@ -8827,7 +9258,7 @@ expand_builtin (exp, target, subtarget, mode, ignore)
function but works with __builtin_setjmp above. */
case BUILT_IN_LONGJMP:
if (arglist == 0 || TREE_CHAIN (arglist) == 0
- || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE)
+ || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist))))
break;
{
@@ -8871,6 +9302,7 @@ expand_builtin (exp, target, subtarget, mode, ignore)
const0_rtx, VOIDmode, 0);
assemble_external (dummy_decl);
+ TREE_USED (dummy_decl) = 1;
/* Pick up FP, label, and SP from the block and jump. This code is
from expand_goto in stmt.c; see there for detailed comments. */
@@ -8897,6 +9329,34 @@ expand_builtin (exp, target, subtarget, mode, ignore)
return const0_rtx;
}
+ /* Various hooks for the DWARF 2 __throw routine. */
+ case BUILT_IN_UNWIND_INIT:
+ expand_builtin_unwind_init ();
+ return const0_rtx;
+ case BUILT_IN_FP:
+ return frame_pointer_rtx;
+ case BUILT_IN_SP:
+ return stack_pointer_rtx;
+#ifdef DWARF2_UNWIND_INFO
+ case BUILT_IN_DWARF_FP_REGNUM:
+ return expand_builtin_dwarf_fp_regnum ();
+ case BUILT_IN_DWARF_REG_SIZE:
+ return expand_builtin_dwarf_reg_size (TREE_VALUE (arglist), target);
+#endif
+ case BUILT_IN_FROB_RETURN_ADDR:
+ return expand_builtin_frob_return_addr (TREE_VALUE (arglist));
+ case BUILT_IN_EXTRACT_RETURN_ADDR:
+ return expand_builtin_extract_return_addr (TREE_VALUE (arglist));
+ case BUILT_IN_SET_RETURN_ADDR_REG:
+ expand_builtin_set_return_addr_reg (TREE_VALUE (arglist));
+ return const0_rtx;
+ case BUILT_IN_EH_STUB:
+ return expand_builtin_eh_stub ();
+ case BUILT_IN_SET_EH_REGS:
+ expand_builtin_set_eh_regs (TREE_VALUE (arglist),
+ TREE_VALUE (TREE_CHAIN (arglist)));
+ return const0_rtx;
+
default: /* just do library call, if unknown builtin */
error ("built-in function `%s' not currently supported",
IDENTIFIER_POINTER (DECL_NAME (fndecl)));
@@ -9202,14 +9662,21 @@ expand_builtin_apply (function, arguments, argsize)
/* Push a new argument block and copy the arguments. */
do_pending_stack_adjust ();
- emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX);
+
+ /* Save the stack with nonlocal if available */
+#ifdef HAVE_save_stack_nonlocal
+ if (HAVE_save_stack_nonlocal)
+ emit_stack_save (SAVE_NONLOCAL, &old_stack_level, NULL_RTX);
+ else
+#endif
+ emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX);
/* Push a block of memory onto the stack to store the memory arguments.
Save the address in a register, and copy the memory arguments. ??? I
haven't figured out how the calling convention macros effect this,
but it's likely that the source and/or destination addresses in
the block copy will need updating in machine specific ways. */
- dest = copy_addr_to_reg (push_block (argsize, 0, 0));
+ dest = allocate_dynamic_stack_space (argsize, 0, 0);
emit_block_move (gen_rtx (MEM, BLKmode, dest),
gen_rtx (MEM, BLKmode, incoming_args),
argsize,
@@ -9328,7 +9795,12 @@ expand_builtin_apply (function, arguments, argsize)
CALL_INSN_FUNCTION_USAGE (call_insn) = call_fusage;
/* Restore the stack. */
- emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
+#ifdef HAVE_save_stack_nonlocal
+ if (HAVE_save_stack_nonlocal)
+ emit_stack_restore (SAVE_NONLOCAL, old_stack_level, NULL_RTX);
+ else
+#endif
+ emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
/* Return the address of the result block. */
return copy_addr_to_reg (XEXP (result, 0));
@@ -9435,7 +9907,7 @@ expand_increment (exp, post, ignore)
and insns were generated in computing it. */
temp = get_last_insn ();
- op0 = expand_expr (incremented, NULL_RTX, VOIDmode, 0);
+ op0 = expand_expr (incremented, NULL_RTX, VOIDmode, EXPAND_MEMORY_USE_RW);
/* If OP0 is a SUBREG made for a promoted variable, we cannot increment
in place but instead must do sign- or zero-extension during assignment,
@@ -9466,7 +9938,8 @@ expand_increment (exp, post, ignore)
op0_is_copy = ((GET_CODE (op0) == SUBREG || GET_CODE (op0) == REG)
&& temp != get_last_insn ());
- op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, 0);
+ op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode,
+ EXPAND_MEMORY_USE_BAD);
/* Decide whether incrementing or decrementing. */
if (TREE_CODE (exp) == POSTDECREMENT_EXPR
@@ -9554,7 +10027,9 @@ expand_increment (exp, post, ignore)
}
if (icode != (int) CODE_FOR_nothing && GET_CODE (op0) == MEM)
{
- rtx addr = force_reg (Pmode, XEXP (op0, 0));
+ rtx addr = (general_operand (XEXP (op0, 0), mode)
+ ? force_reg (Pmode, XEXP (op0, 0))
+ : copy_to_reg (XEXP (op0, 0)));
rtx temp, result;
op0 = change_address (op0, VOIDmode, addr);
@@ -9582,7 +10057,8 @@ expand_increment (exp, post, ignore)
temp = copy_rtx (value = op0);
/* Increment however we can. */
- op1 = expand_binop (mode, this_optab, value, op1, op0,
+ op1 = expand_binop (mode, this_optab, value, op1,
+ flag_check_memory_usage ? NULL_RTX : op0,
TREE_UNSIGNED (TREE_TYPE (exp)), OPTAB_LIB_WIDEN);
/* Make sure the value is stored into OP0. */
if (op1 != op0)
@@ -9644,11 +10120,15 @@ preexpand_calls (exp)
case RTL_EXPR:
case WITH_CLEANUP_EXPR:
case CLEANUP_POINT_EXPR:
+ case TRY_CATCH_EXPR:
return;
case SAVE_EXPR:
if (SAVE_EXPR_RTL (exp) != 0)
return;
+
+ default:
+ break;
}
nops = tree_code_length[(int) TREE_CODE (exp)];
@@ -9845,18 +10325,18 @@ do_jump (exp, if_false_label, if_true_label)
if (if_false_label == 0)
if_false_label = drop_through_label = gen_label_rtx ();
do_jump (TREE_OPERAND (exp, 0), if_false_label, NULL_RTX);
- start_cleanup_deferal ();
+ start_cleanup_deferral ();
do_jump (TREE_OPERAND (exp, 1), if_false_label, if_true_label);
- end_cleanup_deferal ();
+ end_cleanup_deferral ();
break;
case TRUTH_ORIF_EXPR:
if (if_true_label == 0)
if_true_label = drop_through_label = gen_label_rtx ();
do_jump (TREE_OPERAND (exp, 0), NULL_RTX, if_true_label);
- start_cleanup_deferal ();
+ start_cleanup_deferral ();
do_jump (TREE_OPERAND (exp, 1), if_false_label, if_true_label);
- end_cleanup_deferal ();
+ end_cleanup_deferral ();
break;
case COMPOUND_EXPR:
@@ -9917,7 +10397,7 @@ do_jump (exp, if_false_label, if_true_label)
do_jump (TREE_OPERAND (exp, 0), label1, NULL_RTX);
- start_cleanup_deferal ();
+ start_cleanup_deferral ();
/* Now the THEN-expression. */
do_jump (TREE_OPERAND (exp, 1),
if_false_label ? if_false_label : drop_through_label,
@@ -9930,7 +10410,7 @@ do_jump (exp, if_false_label, if_true_label)
do_jump (TREE_OPERAND (exp, 2),
if_false_label ? if_false_label : drop_through_label,
if_true_label ? if_true_label : drop_through_label);
- end_cleanup_deferal ();
+ end_cleanup_deferral ();
}
break;
@@ -10273,9 +10753,38 @@ do_jump_by_parts_equality_rtx (op0, if_false_label, if_true_label)
rtx if_false_label, if_true_label;
{
int nwords = GET_MODE_SIZE (GET_MODE (op0)) / UNITS_PER_WORD;
+ rtx part;
int i;
rtx drop_through_label = 0;
+ /* The fastest way of doing this comparison on almost any machine is to
+ "or" all the words and compare the result. If all have to be loaded
+ from memory and this is a very wide item, it's possible this may
+ be slower, but that's highly unlikely. */
+
+ part = gen_reg_rtx (word_mode);
+ emit_move_insn (part, operand_subword_force (op0, 0, GET_MODE (op0)));
+ for (i = 1; i < nwords && part != 0; i++)
+ part = expand_binop (word_mode, ior_optab, part,
+ operand_subword_force (op0, i, GET_MODE (op0)),
+ part, 1, OPTAB_WIDEN);
+
+ if (part != 0)
+ {
+ rtx comp = compare_from_rtx (part, const0_rtx, EQ, 1, word_mode,
+ NULL_RTX, 0);
+
+ if (comp == const_true_rtx)
+ emit_jump (if_false_label);
+ else if (comp == const0_rtx)
+ emit_jump (if_true_label);
+ else
+ do_jump_for_compare (comp, if_false_label, if_true_label);
+
+ return;
+ }
+
+ /* If we couldn't do the "or" simply, do this with a series of compares. */
if (! if_false_label)
drop_through_label = if_false_label = gen_label_rtx ();
@@ -10292,6 +10801,7 @@ do_jump_by_parts_equality_rtx (op0, if_false_label, if_true_label)
if (if_true_label)
emit_jump (if_true_label);
+
if (drop_through_label)
emit_label (drop_through_label);
}
@@ -10391,7 +10901,7 @@ compare (exp, signed_code, unsigned_code)
/* If function pointers need to be "canonicalized" before they can
be reliably compared, then canonicalize them. */
if (HAVE_canonicalize_funcptr_for_compare
- && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == POINTER_TYPE
+ && POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (exp, 0)))
&& (TREE_CODE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0))))
== FUNCTION_TYPE))
{
@@ -10402,7 +10912,7 @@ compare (exp, signed_code, unsigned_code)
}
if (HAVE_canonicalize_funcptr_for_compare
- && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 1))) == POINTER_TYPE
+ && POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (exp, 1)))
&& (TREE_CODE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 1))))
== FUNCTION_TYPE))
{
@@ -10551,10 +11061,10 @@ do_store_flag (exp, target, mode, only_cheap)
when function pointers must be canonicalized before comparisons. */
#ifdef HAVE_canonicalize_funcptr_for_compare
if (HAVE_canonicalize_funcptr_for_compare
- && ((TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == POINTER_TYPE
+ && ((POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (exp, 0)))
&& (TREE_CODE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0))))
== FUNCTION_TYPE))
- || (TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 1))) == POINTER_TYPE
+ || (POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (exp, 1)))
&& (TREE_CODE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 1))))
== FUNCTION_TYPE))))
return 0;
@@ -10621,29 +11131,12 @@ do_store_flag (exp, target, mode, only_cheap)
if ((code == NE || code == EQ)
&& TREE_CODE (arg0) == BIT_AND_EXPR && integer_zerop (arg1)
- && integer_pow2p (TREE_OPERAND (arg0, 1))
- && TYPE_PRECISION (type) <= HOST_BITS_PER_WIDE_INT)
+ && integer_pow2p (TREE_OPERAND (arg0, 1)))
{
tree inner = TREE_OPERAND (arg0, 0);
- HOST_WIDE_INT tem;
- int bitnum;
+ int bitnum = tree_log2 (TREE_OPERAND (arg0, 1));
int ops_unsignedp;
- tem = INTVAL (expand_expr (TREE_OPERAND (arg0, 1),
- NULL_RTX, VOIDmode, 0));
- /* In this case, immed_double_const will sign extend the value to make
- it look the same on the host and target. We must remove the
- sign-extension before calling exact_log2, since exact_log2 will
- fail for negative values. */
- if (BITS_PER_WORD < HOST_BITS_PER_WIDE_INT
- && BITS_PER_WORD == GET_MODE_BITSIZE (TYPE_MODE (type)))
- /* We don't use the obvious constant shift to generate the mask,
- because that generates compiler warnings when BITS_PER_WORD is
- greater than or equal to HOST_BITS_PER_WIDE_INT, even though this
- code is unreachable in that case. */
- tem = tem & GET_MODE_MASK (word_mode);
- bitnum = exact_log2 (tem);
-
/* If INNER is a right shift of a constant and it plus BITNUM does
not overflow, adjust BITNUM and INNER. */
@@ -10653,7 +11146,7 @@ do_store_flag (exp, target, mode, only_cheap)
&& (bitnum + TREE_INT_CST_LOW (TREE_OPERAND (inner, 1))
< TYPE_PRECISION (type)))
{
- bitnum +=TREE_INT_CST_LOW (TREE_OPERAND (inner, 1));
+ bitnum += TREE_INT_CST_LOW (TREE_OPERAND (inner, 1));
inner = TREE_OPERAND (inner, 0);
}
@@ -10670,7 +11163,7 @@ do_store_flag (exp, target, mode, only_cheap)
if (subtarget == 0 || GET_CODE (subtarget) != REG
|| GET_MODE (subtarget) != operand_mode
- || ! safe_from_p (subtarget, inner))
+ || ! safe_from_p (subtarget, inner, 1))
subtarget = 0;
op0 = expand_expr (inner, subtarget, VOIDmode, 0);
@@ -10720,7 +11213,7 @@ do_store_flag (exp, target, mode, only_cheap)
preexpand_calls (exp);
if (subtarget == 0 || GET_CODE (subtarget) != REG
|| GET_MODE (subtarget) != operand_mode
- || ! safe_from_p (subtarget, arg1))
+ || ! safe_from_p (subtarget, arg1, 1))
subtarget = 0;
op0 = expand_expr (arg0, subtarget, VOIDmode, 0);
diff --git a/gcc/expr.h b/gcc/expr.h
index 8775bc0d2ce..b7c99111543 100644
--- a/gcc/expr.h
+++ b/gcc/expr.h
@@ -1,5 +1,5 @@
/* Definitions for code generation pass of GNU compiler.
- Copyright (C) 1987, 91-96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 91-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -45,9 +45,27 @@ Boston, MA 02111-1307, USA. */
EXPAND_SUM means it is ok to return a PLUS rtx or MULT rtx.
EXPAND_INITIALIZER is similar but also record any labels on forced_labels.
EXPAND_CONST_ADDRESS means it is ok to return a MEM whose address
- is a constant that is not a legitimate address. */
+ is a constant that is not a legitimate address.
+ EXPAND_MEMORY_USE_* are explained below. */
enum expand_modifier {EXPAND_NORMAL, EXPAND_SUM,
- EXPAND_CONST_ADDRESS, EXPAND_INITIALIZER};
+ EXPAND_CONST_ADDRESS, EXPAND_INITIALIZER,
+ EXPAND_MEMORY_USE_WO, EXPAND_MEMORY_USE_RW,
+ EXPAND_MEMORY_USE_BAD, EXPAND_MEMORY_USE_DONT};
+
+/* Argument for chkr_* functions.
+ MEMORY_USE_RO: the pointer reads memory.
+ MEMORY_USE_WO: the pointer writes to memory.
+ MEMORY_USE_RW: the pointer modifies memory (ie it reads and writes). An
+ example is (*ptr)++
+ MEMORY_USE_BAD: use this if you don't know the behavior of the pointer, or
+ if you know there are no pointers. Using an INDIRECT_REF
+ with MEMORY_USE_BAD will abort.
+ MEMORY_USE_TW: just test for writing, without update. Special.
+ MEMORY_USE_DONT: the memory is neither read nor written. This is used by
+ '->' and '.'. */
+enum memory_use_mode {MEMORY_USE_BAD = 0, MEMORY_USE_RO = 1,
+ MEMORY_USE_WO = 2, MEMORY_USE_RW = 3,
+ MEMORY_USE_TW = 6, MEMORY_USE_DONT = 99};
/* List of labels that must never be deleted. */
extern rtx forced_labels;
@@ -120,7 +138,7 @@ extern int target_temp_slot_level;
struct args_size
{
- int constant;
+ HOST_WIDE_INT constant;
tree var;
};
#endif
@@ -150,7 +168,7 @@ struct args_size
((SIZE).var == 0 ? GEN_INT ((SIZE).constant) \
: expand_expr (size_binop (PLUS_EXPR, (SIZE).var, \
size_int ((SIZE).constant)), \
- NULL_RTX, VOIDmode, 0))
+ NULL_RTX, VOIDmode, EXPAND_MEMORY_USE_BAD))
/* Convert the implicit sum in a `struct args_size' into a tree. */
#define ARGS_SIZE_TREE(SIZE) \
@@ -398,7 +416,6 @@ extern rtx sjpopnthrow_libfunc;
extern rtx terminate_libfunc;
extern rtx setjmp_libfunc;
extern rtx longjmp_libfunc;
-extern rtx get_dynamic_handler_chain_libfunc;
extern rtx eqhf2_libfunc;
extern rtx nehf2_libfunc;
@@ -482,6 +499,13 @@ extern rtx fixunsxfti_libfunc;
extern rtx fixunstfsi_libfunc;
extern rtx fixunstfdi_libfunc;
extern rtx fixunstfti_libfunc;
+
+/* For check-memory-usage. */
+extern rtx chkr_check_addr_libfunc;
+extern rtx chkr_set_right_libfunc;
+extern rtx chkr_copy_bitmap_libfunc;
+extern rtx chkr_check_exec_libfunc;
+extern rtx chkr_check_str_libfunc;
typedef rtx (*rtxfun) ();
@@ -656,7 +680,7 @@ extern rtx convert_to_mode PROTO((enum machine_mode, rtx, int));
extern rtx convert_modes PROTO((enum machine_mode, enum machine_mode, rtx, int));
/* Emit code to move a block Y to a block X. */
-extern void emit_block_move PROTO((rtx, rtx, rtx, int));
+extern rtx emit_block_move PROTO((rtx, rtx, rtx, int));
/* Copy all or part of a value X into registers starting at REGNO.
The number of registers to be filled is NREGS. */
@@ -684,7 +708,7 @@ extern void use_group_regs PROTO((rtx *, rtx));
/* Write zeros through the storage of OBJECT.
If OBJECT has BLKmode, SIZE is its length in bytes and ALIGN is its
alignment. */
-extern void clear_storage PROTO((rtx, rtx, int));
+extern rtx clear_storage PROTO((rtx, rtx, int));
/* Emit insns to set X from Y. */
extern rtx emit_move_insn PROTO((rtx, rtx));
@@ -894,8 +918,6 @@ extern rtx hard_libcall_value PROTO((enum machine_mode));
of STACK_BOUNDARY / BITS_PER_UNIT. */
extern rtx round_push PROTO((rtx));
-extern void emit_block_move PROTO((rtx, rtx, rtx, int));
-
extern rtx store_bit_field PROTO((rtx, int, int, enum machine_mode, rtx, int, int));
extern rtx extract_bit_field PROTO((rtx, int, int, int, rtx, enum machine_mode, enum machine_mode, int, int));
extern rtx expand_mult PROTO((enum machine_mode, rtx, rtx, rtx, int));
diff --git a/gcc/extend.texi b/gcc/extend.texi
index 6a250a94487..b9542a772e6 100644
--- a/gcc/extend.texi
+++ b/gcc/extend.texi
@@ -366,9 +366,7 @@ does not refer to anything that has gone out of scope, you should be
safe.
GNU CC implements taking the address of a nested function using a
-technique called @dfn{trampolines}. A paper describing them is
-available from @samp{maya.idiap.ch} in directory @file{pub/tmb},
-file @file{usenix88-lexic.ps.Z}.
+technique called @dfn{trampolines}.
A nested function can jump to a label inherited from a containing
function, provided the label was explicitly declared in the containing
@@ -1669,7 +1667,7 @@ old-style non-prototype definition. Consider the following example:
@example
/* @r{Use prototypes unless the compiler is old-fashioned.} */
-#if __STDC__
+#ifdef __STDC__
#define P(x) x
#else
#define P(x) ()
@@ -2021,12 +2019,12 @@ This attribute specifies a minimum alignment (in bytes) for variables
of the specified type. For example, the declarations:
@smallexample
-struct S @{ short f[3]; @} __attribute__ ((aligned (8));
-typedef int more_aligned_int __attribute__ ((aligned (8));
+struct S @{ short f[3]; @} __attribute__ ((aligned (8)));
+typedef int more_aligned_int __attribute__ ((aligned (8)));
@end smallexample
@noindent
-force the compiler to insure (as fas as it can) that each variable whose
+force the compiler to insure (as far as it can) that each variable whose
type is @code{struct S} or @code{more_aligned_int} will be allocated and
aligned @emph{at least} on a 8-byte boundary. On a Sparc, having all
variables of type @code{struct S} aligned to 8-byte boundaries allows
@@ -2166,6 +2164,16 @@ pid_t wait (wait_status_ptr_t p)
return waitpid (-1, p.__ip, 0);
@}
@end example
+
+@item unused
+When attached to a type (including a @code{union} or a @code{struct}),
+this attribute means that variables of that type are meant to appear
+possibly unused. GNU CC will not produce a warning for any variables of
+that type, even if the variable appears to do nothing. This is often
+the case with lock or thread classes, which are usually defined and then
+not referenced, but contain constructors and destructors that have
+nontrivial bookkeeping functions.
+
@end table
To specify multiple attributes, separate them by commas within the
@@ -2267,14 +2275,14 @@ did the easy thing, and turned it off.
@cindex assembler instructions
@cindex registers
-In an assembler instruction using @code{asm}, you can now specify the
-operands of the instruction using C expressions. This means no more
-guessing which registers or memory locations will contain the data you want
+In an assembler instruction using @code{asm}, you can specify the
+operands of the instruction using C expressions. This means you need not
+guess which registers or memory locations will contain the data you want
to use.
-You must specify an assembler instruction template much like what appears
-in a machine description, plus an operand constraint string for each
-operand.
+You must specify an assembler instruction template much like what
+appears in a machine description, plus an operand constraint string for
+each operand.
For example, here is how to use the 68881's @code{fsinx} instruction:
@@ -2285,65 +2293,66 @@ asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
@noindent
Here @code{angle} is the C expression for the input operand while
@code{result} is that of the output operand. Each has @samp{"f"} as its
-operand constraint, saying that a floating point register is required. The
-@samp{=} in @samp{=f} indicates that the operand is an output; all output
-operands' constraints must use @samp{=}. The constraints use the same
-language used in the machine description (@pxref{Constraints}).
-
-Each operand is described by an operand-constraint string followed by the C
-expression in parentheses. A colon separates the assembler template from
-the first output operand, and another separates the last output operand
-from the first input, if any. Commas separate output operands and separate
-inputs. The total number of operands is limited to ten or to the maximum
-number of operands in any instruction pattern in the machine description,
-whichever is greater.
-
-If there are no output operands, and there are input operands, then there
-must be two consecutive colons surrounding the place where the output
+operand constraint, saying that a floating point register is required.
+The @samp{=} in @samp{=f} indicates that the operand is an output; all
+output operands' constraints must use @samp{=}. The constraints use the
+same language used in the machine description (@pxref{Constraints}).
+
+Each operand is described by an operand-constraint string followed by
+the C expression in parentheses. A colon separates the assembler
+template from the first output operand and another separates the last
+output operand from the first input, if any. Commas separate the
+operands within each group. The total number of operands is limited to
+ten or to the maximum number of operands in any instruction pattern in
+the machine description, whichever is greater.
+
+If there are no output operands but there are input operands, you must
+place two consecutive colons surrounding the place where the output
operands would go.
Output operand expressions must be lvalues; the compiler can check this.
-The input operands need not be lvalues. The compiler cannot check whether
-the operands have data types that are reasonable for the instruction being
-executed. It does not parse the assembler instruction template and does
-not know what it means, or whether it is valid assembler input. The
-extended @code{asm} feature is most often used for machine instructions
-that the compiler itself does not know exist. If the output expression
-cannot be directly addressed (for example, it is a bit field), your
-constraint must allow a register. In that case, GNU CC will use
-the register as the output of the @code{asm}, and then store that
-register into the output.
-
-The ordinary output operands must be write-only; GNU CC will assume
-that the values in these operands before the instruction are dead and
-need not be generated. Extended asm supports input-output or
-read-write operands. Use the constraint character @samp{+} to indicate
-such an operand and list it with the output operands.
-
-When the constraints for the read-write operand
-(or the operand in which only some of the bits are to be changed)
-allows a register, you may, as an alternative, logically
-split its function into two separate operands, one input operand and one
-write-only output operand. The connection between them is expressed by
-constraints which say they need to be in the same location when the
-instruction executes. You can use the same C expression for both
-operands, or different expressions. For example, here we write the
-(fictitious) @samp{combine} instruction with @code{bar} as its read-only
-source operand and @code{foo} as its read-write destination:
+The input operands need not be lvalues. The compiler cannot check
+whether the operands have data types that are reasonable for the
+instruction being executed. It does not parse the assembler instruction
+template and does not know what it means or even whether it is valid
+assembler input. The extended @code{asm} feature is most often used for
+machine instructions the compiler itself does not know exist. If
+the output expression cannot be directly addressed (for example, it is a
+bit field), your constraint must allow a register. In that case, GNU CC
+will use the register as the output of the @code{asm}, and then store
+that register into the output.
+
+The ordinary output operands must be write-only; GNU CC will assume that
+the values in these operands before the instruction are dead and need
+not be generated. Extended asm supports input-output or read-write
+operands. Use the constraint character @samp{+} to indicate such an
+operand and list it with the output operands.
+
+When the constraints for the read-write operand (or the operand in which
+only some of the bits are to be changed) allows a register, you may, as
+an alternative, logically split its function into two separate operands,
+one input operand and one write-only output operand. The connection
+between them is expressed by constraints which say they need to be in
+the same location when the instruction executes. You can use the same C
+expression for both operands, or different expressions. For example,
+here we write the (fictitious) @samp{combine} instruction with
+@code{bar} as its read-only source operand and @code{foo} as its
+read-write destination:
@example
asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
@end example
@noindent
-The constraint @samp{"0"} for operand 1 says that it must occupy the same
-location as operand 0. A digit in constraint is allowed only in an input
-operand, and it must refer to an output operand.
+The constraint @samp{"0"} for operand 1 says that it must occupy the
+same location as operand 0. A digit in constraint is allowed only in an
+input operand and it must refer to an output operand.
Only a digit in the constraint can guarantee that one operand will be in
-the same place as another. The mere fact that @code{foo} is the value of
-both operands is not enough to guarantee that they will be in the same
-place in the generated assembler code. The following would not work:
+the same place as another. The mere fact that @code{foo} is the value
+of both operands is not enough to guarantee that they will be in the
+same place in the generated assembler code. The following would not
+work reliably:
@example
asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
@@ -2357,10 +2366,10 @@ register (copying it afterward to @code{foo}'s own address). Of course,
since the register for operand 1 is not even mentioned in the assembler
code, the result will not work, but GNU CC can't tell that.
-Some instructions clobber specific hard registers. To describe this, write
-a third colon after the input operands, followed by the names of the
-clobbered hard registers (given as strings). Here is a realistic example
-for the Vax:
+Some instructions clobber specific hard registers. To describe this,
+write a third colon after the input operands, followed by the names of
+the clobbered hard registers (given as strings). Here is a realistic
+example for the VAX:
@example
asm volatile ("movc3 %0,%1,%2"
@@ -2370,32 +2379,32 @@ asm volatile ("movc3 %0,%1,%2"
@end example
If you refer to a particular hardware register from the assembler code,
-then you will probably have to list the register after the third colon
-to tell the compiler that the register's value is modified. In many
-assemblers, the register names begin with @samp{%}; to produce one
-@samp{%} in the assembler code, you must write @samp{%%} in the input.
-
-If your assembler instruction can alter the condition code register,
-add @samp{cc} to the list of clobbered registers. GNU CC on some
-machines represents the condition codes as a specific hardware
-register; @samp{cc} serves to name this register. On other machines,
-the condition code is handled differently, and specifying @samp{cc}
-has no effect. But it is valid no matter what the machine.
+you will probably have to list the register after the third colon to
+tell the compiler the register's value is modified. In some assemblers,
+the register names begin with @samp{%}; to produce one @samp{%} in the
+assembler code, you must write @samp{%%} in the input.
+
+If your assembler instruction can alter the condition code register, add
+@samp{cc} to the list of clobbered registers. GNU CC on some machines
+represents the condition codes as a specific hardware register;
+@samp{cc} serves to name this register. On other machines, the
+condition code is handled differently, and specifying @samp{cc} has no
+effect. But it is valid no matter what the machine.
If your assembler instruction modifies memory in an unpredictable
-fashion, add @samp{memory} to the list of clobbered registers.
-This will cause GNU CC to not keep memory values cached in
-registers across the assembler instruction.
+fashion, add @samp{memory} to the list of clobbered registers. This
+will cause GNU CC to not keep memory values cached in registers across
+the assembler instruction.
-You can put multiple assembler instructions together in a single @code{asm}
-template, separated either with newlines (written as @samp{\n}) or with
-semicolons if the assembler allows such semicolons. The GNU assembler
-allows semicolons and all Unix assemblers seem to do so. The input
-operands are guaranteed not to use any of the clobbered registers, and
-neither will the output operands' addresses, so you can read and write the
-clobbered registers as many times as you like. Here is an example of
-multiple instructions in a template; it assumes that the subroutine
-@code{_foo} accepts arguments in registers 9 and 10:
+You can put multiple assembler instructions together in a single
+@code{asm} template, separated either with newlines (written as
+@samp{\n}) or with semicolons if the assembler allows such semicolons.
+The GNU assembler allows semicolons and most Unix assemblers seem to do
+so. The input operands are guaranteed not to use any of the clobbered
+registers, and neither will the output operands' addresses, so you can
+read and write the clobbered registers as many times as you like. Here
+is an example of multiple instructions in a template; it assumes the
+subroutine @code{_foo} accepts arguments in registers 9 and 10:
@example
asm ("movl %0,r9;movl %1,r10;call _foo"
@@ -2404,16 +2413,16 @@ asm ("movl %0,r9;movl %1,r10;call _foo"
: "r9", "r10");
@end example
-Unless an output operand has the @samp{&} constraint modifier, GNU CC may
-allocate it in the same register as an unrelated input operand, on the
-assumption that the inputs are consumed before the outputs are produced.
+Unless an output operand has the @samp{&} constraint modifier, GNU CC
+may allocate it in the same register as an unrelated input operand, on
+the assumption the inputs are consumed before the outputs are produced.
This assumption may be false if the assembler code actually consists of
more than one instruction. In such a case, use @samp{&} for each output
-operand that may not overlap an input.
-@xref{Modifiers}.
+operand that may not overlap an input. @xref{Modifiers}.
-If you want to test the condition code produced by an assembler instruction,
-you must include a branch and a label in the @code{asm} construct, as follows:
+If you want to test the condition code produced by an assembler
+instruction, you must include a branch and a label in the @code{asm}
+construct, as follows:
@example
asm ("clr %0;frob %1;beq 0f;mov #1,%0;0:"
@@ -2426,8 +2435,8 @@ This assumes your assembler supports local labels, as the GNU assembler
and most Unix assemblers do.
Speaking of labels, jumps from one @code{asm} to another are not
-supported. The compiler's optimizers do not know about these jumps,
-and therefore they cannot take account of them when deciding how to
+supported. The compiler's optimizers do not know about these jumps, and
+therefore they cannot take account of them when deciding how to
optimize.
@cindex macros containing @code{asm}
@@ -2446,8 +2455,8 @@ Here the variable @code{__arg} is used to make sure that the instruction
operates on a proper @code{double} value, and to accept only those
arguments @code{x} which can convert automatically to a @code{double}.
-Another way to make sure the instruction operates on the correct data type
-is to use a cast in the @code{asm}. This is different from using a
+Another way to make sure the instruction operates on the correct data
+type is to use a cast in the @code{asm}. This is different from using a
variable @code{__arg} in that it converts more different types. For
example, if the desired type were @code{int}, casting the argument to
@code{int} would accept a pointer with no complaint, while assigning the
@@ -2455,27 +2464,40 @@ argument to an @code{int} variable named @code{__arg} would warn about
using a pointer unless the caller explicitly casts it.
If an @code{asm} has output operands, GNU CC assumes for optimization
-purposes that the instruction has no side effects except to change the
-output operands. This does not mean that instructions with a side effect
-cannot be used, but you must be careful, because the compiler may eliminate
-them if the output operands aren't used, or move them out of loops, or
-replace two with one if they constitute a common subexpression. Also, if
-your instruction does have a side effect on a variable that otherwise
-appears not to change, the old value of the variable may be reused later if
-it happens to be found in a register.
+purposes the instruction has no side effects except to change the output
+operands. This does not mean instructions with a side effect cannot be
+used, but you must be careful, because the compiler may eliminate them
+if the output operands aren't used, or move them out of loops, or
+replace two with one if they constitute a common subexpression. Also,
+if your instruction does have a side effect on a variable that otherwise
+appears not to change, the old value of the variable may be reused later
+if it happens to be found in a register.
You can prevent an @code{asm} instruction from being deleted, moved
significantly, or combined, by writing the keyword @code{volatile} after
the @code{asm}. For example:
@example
-#define set_priority(x) \
-asm volatile ("set_priority %0": /* no outputs */ : "g" (x))
-@end example
+#define get_and_set_priority(new) \
+(@{ int __old; \
+ asm volatile ("get_and_set_priority %0, %1": "=g" (__old) : "g" (new)); \
+ __old; @})
+b@end example
@noindent
-An instruction without output operands will not be deleted or moved
-significantly, regardless, unless it is unreachable.
+If you write an @code{asm} instruction with no outputs, GNU CC will know
+the instruction has side-effects and will not delete the instruction or
+move it outside of loops. If the side-effects of your instruction are
+not purely external, but will affect variables in your program in ways
+other than reading the inputs and clobbering the specified registers or
+memory, you should write the @code{volatile} keyword to prevent future
+versions of GNU CC from moving the instruction around within a core
+region.
+
+An @code{asm} instruction without any operands or clobbers (and ``old
+style'' @code{asm}) will not be deleted or moved significantly,
+regardless, unless it is unreachable, the same wasy as if you had
+written a @code{volatile} keyword.
Note that even a volatile @code{asm} instruction can be moved in ways
that appear insignificant to the compiler, such as across jump
@@ -2704,16 +2726,17 @@ In addition, operating systems on one type of cpu may differ in how they
name the registers; then you would need additional conditionals. For
example, some 68000 operating systems call this register @code{%a5}.
-Eventually there may be a way of asking the compiler to choose a register
-automatically, but first we need to figure out how it should choose and
-how to enable you to guide the choice. No solution is evident.
-
Defining such a register variable does not reserve the register; it
remains available for other uses in places where flow control determines
the variable's value is not live. However, these registers are made
-unavailable for use in the reload pass. I would not be surprised if
-excessive use of this feature leaves the compiler too few available
-registers to compile certain functions.
+unavailable for use in the reload pass; excessive use of this feature
+leaves the compiler too few available registers to compile certain
+functions.
+
+This option does not guarantee that GNU CC will generate code that has
+this variable in the register you specify at all times. You may not
+code an explicit reference to this register in an @code{asm} statement
+and assume it will always refer to this variable.
@node Alternate Keywords
@section Alternate Keywords
diff --git a/gcc/final.c b/gcc/final.c
index d36e3d617eb..05edac03b7a 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -284,10 +284,14 @@ static void add_bb PROTO((FILE *));
static int add_bb_string PROTO((char *, int));
static void output_source_line PROTO((FILE *, rtx));
static rtx walk_alter_subreg PROTO((rtx));
-static int alter_cond PROTO((rtx));
static void output_asm_name PROTO((void));
static void output_operand PROTO((rtx, int));
+#ifdef LEAF_REGISTERS
static void leaf_renumber_regs PROTO((rtx));
+#endif
+#ifdef HAVE_cc0
+static int alter_cond PROTO((rtx));
+#endif
extern char *getpwd ();
@@ -455,12 +459,17 @@ end_final (filename)
ASM_OUTPUT_SHARED_LOCAL (asm_out_file, name, size, rounded);
else
#endif
+#ifdef ASM_OUTPUT_ALIGNED_DECL_LOCAL
+ ASM_OUTPUT_ALIGNED_DECL_LOCAL (asm_out_file, NULL_TREE, name, size,
+ BIGGEST_ALIGNMENT);
+#else
#ifdef ASM_OUTPUT_ALIGNED_LOCAL
ASM_OUTPUT_ALIGNED_LOCAL (asm_out_file, name, size,
BIGGEST_ALIGNMENT);
#else
ASM_OUTPUT_LOCAL (asm_out_file, name, size, rounded);
#endif
+#endif
}
/* Output any basic block strings */
@@ -672,6 +681,10 @@ get_attr_length (insn)
length += get_attr_length (XVECEXP (body, 0, i));
else
length = insn_default_length (insn);
+ break;
+
+ default:
+ break;
}
#ifdef ADJUST_INSN_LENGTH
@@ -734,6 +747,8 @@ shorten_branches (first)
if (GET_CODE (insn) == NOTE || GET_CODE (insn) == BARRIER
|| GET_CODE (insn) == CODE_LABEL)
continue;
+ if (INSN_DELETED_P (insn))
+ continue;
body = PATTERN (insn);
if (GET_CODE (body) == ADDR_VEC || GET_CODE (body) == ADDR_DIFF_VEC)
@@ -746,9 +761,12 @@ shorten_branches (first)
insn_lengths[uid] = (XVECLEN (body, GET_CODE (body) == ADDR_DIFF_VEC)
* GET_MODE_SIZE (GET_MODE (body)));
- /* Account for possible alignment. */
- insn_lengths[uid]
- += unitsize - (insn_current_address & (unitsize - 1));
+ /* We don't know what address the ADDR_VEC/ADDR_DIFF_VEC will end
+ up at after branch shortening. As a result, it is impossible
+ to determine how much padding we need at this point. Therefore,
+ assume worst possible alignment. */
+ insn_lengths[uid] += unitsize - 1;
+
#else
;
#endif
@@ -951,9 +969,9 @@ final_start_function (first, file, optimize)
last_linenum = high_block_linenum = high_function_linenum
= NOTE_LINE_NUMBER (first);
-#ifdef DWARF2_DEBUGGING_INFO
+#if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO)
/* Output DWARF definition of the function. */
- if (write_symbols == DWARF2_DEBUG)
+ if (dwarf2out_do_frame ())
dwarf2out_begin_prologue ();
#endif
@@ -988,6 +1006,11 @@ final_start_function (first, file, optimize)
profile_function (file);
#endif /* PROFILE_BEFORE_PROLOGUE */
+#if defined (DWARF2_UNWIND_INFO) && defined (HAVE_prologue)
+ if (dwarf2out_do_frame ())
+ dwarf2out_frame_debug (NULL_RTX);
+#endif
+
#ifdef FUNCTION_PROLOGUE
/* First output the function prologue: code to set up the stack frame. */
FUNCTION_PROLOGUE (file, get_frame_size ());
@@ -1138,8 +1161,8 @@ final_end_function (first, file, optimize)
dwarfout_end_epilogue ();
#endif
-#ifdef DWARF2_DEBUGGING_INFO
- if (write_symbols == DWARF2_DEBUG)
+#if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO)
+ if (dwarf2out_do_frame ())
dwarf2out_end_epilogue ();
#endif
@@ -1261,11 +1284,6 @@ final (first, file, optimize, prescan)
last_ignored_compare = 0;
new_block = 1;
-#if defined (DWARF2_DEBUGGING_INFO) && defined (HAVE_prologue)
- if (write_symbols == DWARF2_DEBUG)
- dwarf2out_frame_debug (NULL_RTX);
-#endif
-
check_exception_handler_labels ();
/* Make a map indicating which line numbers appear in this function.
@@ -1586,6 +1604,12 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
if (NEXT_INSN (insn))
ASM_OUTPUT_ALIGN_CODE (file);
#endif
+#if defined (DWARF2_UNWIND_INFO) && !defined (ACCUMULATE_OUTGOING_ARGS)
+ /* If we push arguments, we need to check all insns for stack
+ adjustments. */
+ if (dwarf2out_do_frame ())
+ dwarf2out_frame_debug (insn);
+#endif
break;
case CODE_LABEL:
@@ -2029,9 +2053,12 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
PUT_CODE (insn, NOTE);
NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
NOTE_SOURCE_FILE (insn) = 0;
- break;
}
}
+ break;
+
+ default:
+ break;
}
}
@@ -2167,12 +2194,21 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
output_asm_insn (template, recog_operand);
-#if defined (DWARF2_DEBUGGING_INFO) && defined (HAVE_prologue)
+#if defined (DWARF2_UNWIND_INFO)
+#if !defined (ACCUMULATE_OUTGOING_ARGS)
+ /* If we push arguments, we need to check all insns for stack
+ adjustments. */
+ if (dwarf2out_do_frame ())
+ dwarf2out_frame_debug (insn);
+#else
+#if defined (HAVE_prologue)
/* If this insn is part of the prologue, emit DWARF v2
call frame info. */
- if (write_symbols == DWARF2_DEBUG && RTX_FRAME_RELATED_P (insn))
+ if (RTX_FRAME_RELATED_P (insn) && dwarf2out_do_frame ())
dwarf2out_frame_debug (insn);
#endif
+#endif
+#endif
#if 0
/* It's not at all clear why we did this and doing so interferes
@@ -2306,6 +2342,9 @@ walk_alter_subreg (x)
case SUBREG:
return alter_subreg (x);
+
+ default:
+ break;
}
return x;
@@ -2364,6 +2403,9 @@ alter_cond (cond)
PUT_CODE (cond, NE);
value = 2;
break;
+
+ default:
+ break;
}
if (cc_status.flags & CC_NOT_NEGATIVE)
@@ -2390,6 +2432,9 @@ alter_cond (cond)
PUT_CODE (cond, NE);
value = 2;
break;
+
+ default:
+ break;
}
if (cc_status.flags & CC_NO_OVERFLOW)
@@ -2412,19 +2457,15 @@ alter_cond (cond)
case LTU:
/* Jump becomes no-op. */
return -1;
+
+ default:
+ break;
}
if (cc_status.flags & (CC_Z_IN_NOT_N | CC_Z_IN_N))
switch (GET_CODE (cond))
{
- case LE:
- case LEU:
- case GE:
- case GEU:
- case LT:
- case LTU:
- case GT:
- case GTU:
+ default:
abort ();
case NE:
@@ -2462,6 +2503,9 @@ alter_cond (cond)
PUT_CODE (cond, GEU);
value = 2;
break;
+
+ default:
+ break;
}
return value;
diff --git a/gcc/fix-header.c b/gcc/fix-header.c
index 24006513f64..32ab31c7188 100644
--- a/gcc/fix-header.c
+++ b/gcc/fix-header.c
@@ -16,7 +16,7 @@ along with this program; if not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* This program massages a system include file (such as stdio.h),
- into a form more conforming with ANSI/POSIX, and more suitable for C++:
+ into a form that is compatible with GNU C and GNU C++.
* extern "C" { ... } braces are added (inside #ifndef __cplusplus),
if they seem to be needed. These prevent C++ compilers from name
@@ -145,14 +145,31 @@ typedef int symbol_flags;
/* Used to mark names defined in the ANSI/ISO C standard. */
#define ANSI_SYMBOL 1
+/* We no longer massage include files for POSIX or XOPEN symbols,
+ as there are now several versions of the POSIX and XOPEN standards,
+ and it would be a maintenance nightmare for us to track them all.
+ Better to be compatible with the system include files. */
+/*#define ADD_MISSING_POSIX 1 */
+/*#define ADD_MISSING_XOPEN 1 */
+
+#if ADD_MISSING_POSIX
/* Used to mark names defined in the Posix.1 or Posix.2 standard. */
#define POSIX1_SYMBOL 2
#define POSIX2_SYMBOL 4
+#else
+#define POSIX1_SYMBOL 0
+#define POSIX2_SYMBOL 0
+#endif
+#if ADD_MISSING_XOPEN
/* Used to mark names defined in X/Open Portability Guide. */
#define XOPEN_SYMBOL 8
/* Used to mark names defined in X/Open UNIX Extensions. */
#define XOPEN_EXTENDED_SYMBOL 16
+#else
+#define XOPEN_SYMBOL 0
+#define XOPEN_EXTENDED_SYMBOL 0
+#endif
/* Used to indicate names that are not functions */
#define MACRO_SYMBOL 512
@@ -239,7 +256,7 @@ tan\0tanh\0" },
{ "stdio.h", ANSI_SYMBOL,
"clearerr\0fclose\0feof\0ferror\0fflush\0fgetc\0fgetpos\0\
fgets\0fopen\0fprintf\0fputc\0fputs\0fread\0freopen\0fscanf\0fseek\0\
-fsetpos\0ftell\0fwrite\0getc\0getchar\0gets\00perror\0popen\0\
+fsetpos\0ftell\0fwrite\0getc\0getchar\0gets\0perror\0\
printf\0putc\0putchar\0puts\0remove\0rename\0rewind\0scanf\0setbuf\0\
setvbuf\0sprintf\0sscanf\0vprintf\0vsprintf\0vfprintf\0tmpfile\0\
tmpnam\0ungetc\0" },
@@ -487,7 +504,7 @@ recognized_extern (name, name_length, type, type_length)
switch (special_file_handling)
{
case errno_h:
- if (strcmp (name, "errno") == 0 && !seen_errno)
+ if (name_length == 5 && strncmp (name, "errno", 5) == 0 && !seen_errno)
seen_errno = 1, required_other--;
break;
}
@@ -1122,7 +1139,8 @@ main (argc, argv)
cur_symbol_table_size = 0;
for (entry = include_entry; ;)
{
- add_symbols (entry->flags, entry->names);
+ if (entry->flags)
+ add_symbols (entry->flags, entry->names);
entry++;
if (entry->name != CONTINUED)
break;
diff --git a/gcc/fixinc.ptx b/gcc/fixinc.ptx
index 90e1b86ed42..93a8f2c5d0e 100644
--- a/gcc/fixinc.ptx
+++ b/gcc/fixinc.ptx
@@ -195,7 +195,7 @@ if [ \! -z "$file_to_fix" ]; then
fi
fi
-# /usr/include/sys/mc_param.h has an embedded asm for the cpuid intruction
+# /usr/include/sys/mc_param.h has an embedded asm for the cpuid instruction
# on the P5. This is not used by anything else so we ifdef it out.
file=sys/mc_param.h
if [ -r ${LIB}/$file ]; then
@@ -224,7 +224,7 @@ if [ \! -z "$file_to_fix" ]; then
fi
fi
-# /usr/include/sys/mc_param.h has an embedded asm for the cpuid intruction
+# /usr/include/sys/mc_param.h has an embedded asm for the cpuid instruction
# on the P5. This is not used by anything else so we ifdef it out.
file=sys/mc_param.h
if [ -r ${LIB}/$file ]; then
diff --git a/gcc/fixinc.svr4 b/gcc/fixinc.svr4
index c0418b69d59..46e07ce0ac9 100755
--- a/gcc/fixinc.svr4
+++ b/gcc/fixinc.svr4
@@ -203,6 +203,7 @@ while [ $# != 0 ]; do
s/__STDC__[ ][ ]*!=[ ][ ]*0/defined (__STRICT_ANSI__)/g
s/__STDC__[ ][ ]*!=[ ][ ]*1/!defined (__STRICT_ANSI__)/g
s/__STDC__ - 0 == 0/!defined (__STRICT_ANSI__)/g
+ s/__STDC__ - 0 == 1/defined (__STRICT_ANSI__)/g
/^typedef[ ][ ]*[unsigned ]*long[ ][ ]*[u_]*longlong_t;/s/long/long long/
' $2/$file > $2/$file.sed
mv $2/$file.sed $2/$file
diff --git a/gcc/fixinc.wrap b/gcc/fixinc.wrap
new file mode 100755
index 00000000000..a8a9fe7e4d3
--- /dev/null
+++ b/gcc/fixinc.wrap
@@ -0,0 +1,53 @@
+#! /bin/sh
+# Fix struct exception in /usr/include/math.h.
+#
+# We expect several systems which did not need fixincludes in the past
+# to need to fix just math.h. So we created a separate fixinc.math
+# script to fix just that problem.
+# See README-fixinc for more information.
+
+# Directory containing the original header files.
+# (This was named INCLUDES, but that conflicts with a name in Makefile.in.)
+INPUT=${2-${INPUT-/usr/include}}
+
+# Directory in which to store the results.
+LIB=${1?"fixincludes: output directory not specified"}
+
+# Make sure it exists.
+if [ ! -d $LIB ]; then
+ mkdir $LIB || exit 1
+fi
+
+echo Building fixed headers in ${LIB}
+
+# Some math.h files define struct exception, which conflicts with
+# the class exception defined in the C++ file std/stdexcept.h. We
+# redefine it to __math_exception. This is not a great fix, but I
+# haven't been able to think of anything better.
+file=math.h
+if [ -r $INPUT/$file ]; then
+ echo Checking $INPUT/$file
+ if grep 'struct exception' $INPUT/$file >/dev/null
+ then
+ echo Fixed $file
+ rm -f $LIB/$file
+ cat <<'__EOF__' >$LIB/$file
+#ifndef _MATH_H_WRAPPER
+#ifdef __cplusplus
+# define exception __math_exception
+#endif
+#include_next <math.h>
+#ifdef __cplusplus
+# undef exception
+#endif
+#define _MATH_H_WRAPPER
+#endif /* _MATH_H_WRAPPER */
+__EOF__
+ # Define _MATH_H_WRAPPER at the end of the wrapper, not the start,
+ # so that if #include_next gets another instance of the wrapper,
+ # this will follow the #include_next chain until we arrive at
+ # the real <math.h>.
+ chmod a+r $LIB/$file
+ fi
+fi
+exit 0
diff --git a/gcc/fixincludes b/gcc/fixincludes
index 6f7ab387c64..42aca5e914c 100755
--- a/gcc/fixincludes
+++ b/gcc/fixincludes
@@ -12,6 +12,14 @@ INPUT=${2-${INPUT-/usr/include}}
# Directory in which to store the results.
LIB=${1?"fixincludes: output directory not specified"}
+# Define what target system we're fixing.
+if test -r ./Makefile; then
+ target_canonical="`sed -n -e 's,^target[ ]*=[ ]*\(.*\)$,\1,p' < Makefile`"
+ test -z "${target_canonical}" && target_canonical=unknown
+else
+ target_canonical=unknown
+fi
+
# Define PWDCMD as a command to use to get the working dir
# in the form that we want.
PWDCMD=pwd
@@ -244,9 +252,10 @@ while [ $# != 0 ]; do
# But the argument to egrep must be kept small, or many versions of egrep
# won't be able to handle it.
#
-# We use the pattern [!-.0-~] instead of [^/ ] to match a noncomment
+# We use the pattern [!-.0-z{|}~] instead of [^/ ] to match a noncomment
# following #else or #endif because some buggy egreps think [^/] matches
# newline, and they thus think `#else ' matches `#e[ndiflse]*[ ]+[^/ ]'.
+# [!-.0-~] does not work properly on AIX 4.1.
#
# We use the pattern [^a-zA-Z0-9_][_a-ce-km-z][a-z0-9] to match an identifier
# following #if or #elif that is not surrounded by __. The `a-ce-km-z'
@@ -255,7 +264,7 @@ while [ $# != 0 ]; do
# identifiers below start with `d' or `l'. It also greatly improves
# performance, since many files contain lines of the form `#if ... defined ...'
# or `#if lint'.
- if egrep '//|[ _]_IO|CTRL|^#define.NULL|^#e[nl][ds][ief]*[ ]+[!-.0-~]|^#[el]*if.*[^a-zA-Z0-9_][_a-ce-km-zA-Z][a-zA-Z0-9]' $file >/dev/null; then
+ if egrep '//|[ _]_IO|CTRL|^#define.NULL|^#e[nl][ds][ief]*[ ]+[!-.0-z\{\|\}\~]|^#[el]*if.*[^a-zA-Z0-9_][_a-ce-km-zA-Z][a-zA-Z0-9]' $file >/dev/null; then
if [ -r $file ]; then
cp $file $2/$file >/dev/null 2>&1 \
|| echo "Can't copy $file"
@@ -283,13 +292,14 @@ while [ $# != 0 ]; do
/\/\/[^*]/ s|//\(.*\)$|/*\1*/|
/[ ]_IO[A-Z]*[ ]*(/ s/\(_IO[A-Z]*[ ]*(\)\(.\),/\1'\''\2'\'',/
/[ ]BSD43__IO[A-Z]*[ ]*(/ s/(\(.\),/('\''\1'\'',/
- /#define._IO/ s/'\''\([cgxtf]\)'\''/\1/g
- /#define.BSD43__IO/ s/'\''\([cgx]\)'\''/\1/g
+ /#[ ]*define[ ]*[ ]_IO/ s/'\''\([cgxtf]\)'\''/\1/g
+ /#[ ]*define[ ]*[ ]BSD43__IO/ s/'\''\([cgx]\)'\''/\1/g
+ /#[ ]*define[ ]*[ ]DESIOC/ s/'\''\([cdgx]\)'\''/\1/g
/[^A-Z0-9_]CTRL[ ]*(/ s/\([^'\'']\))/'\''\1'\'')/
/[^A-Z0-9]_CTRL[ ]*(/ s/\([^'\'']\))/'\''\1'\'')/
- /#define[ ]*[ ]CTRL/ s/'\''\([cgx]\)'\''/\1/g
- /#define[ ]*[ ]_CTRL/ s/'\''\([cgx]\)'\''/\1/g
- /#define.BSD43_CTRL/ s/'\''\([cgx]\)'\''/\1/g
+ /#[ ]*define[ ]*[ ]CTRL/ s/'\''\([cgx]\)'\''/\1/g
+ /#[ ]*define[ ]*[ ]_CTRL/ s/'\''\([cgx]\)'\''/\1/g
+ /#[ ]*define.BSD43_CTRL/ s/'\''\([cgx]\)'\''/\1/g
/#[ ]*[el]*if/{
s/[a-zA-Z0-9_][a-zA-Z0-9_]*/ & /g
@@ -357,6 +367,13 @@ for file in sys/types.h stdlib.h sys/stdtypes.h stddef.h memory.h unistd.h; do
if [ -r ${LIB}/$file ]; then
echo Fixing size_t, ptrdiff_t and wchar_t in $file
sed \
+ -e '/^[ ]*\*[ ]*typedef unsigned int size_t;/N' \
+ -e 's/^\([ ]*\*[ ]*typedef unsigned int size_t;\n[ ]*\*\/\)/\1\
+#ifndef __SIZE_TYPE__\
+#define __SIZE_TYPE__ long unsigned int\
+#endif\
+typedef __SIZE_TYPE__ size_t;\
+/' \
-e '/typedef[ ][ ]*[a-z_][ a-z_]*[ ]size_t/i\
#ifndef __SIZE_TYPE__\
#define __SIZE_TYPE__ long unsigned int\
@@ -906,17 +923,21 @@ fi
if [ -r ${LIB}/$file ]; then
echo Fixing $file
+ if grep _GCC_SIZE_T ${LIB}/$file >/dev/null
+ then size_t_pattern='<<< do not double-wrap the size_t typedef >>>'
+ else size_t_pattern='typedef[ a-zA-Z_]*[ ]size_t[ ]*;'
+ fi
sed -e 's/int abort/void abort/g' \
-e 's/int free/void free/g' \
-e 's/char[ ]*\*[ ]*calloc/void \* calloc/g' \
-e 's/char[ ]*\*[ ]*malloc/void \* malloc/g' \
-e 's/char[ ]*\*[ ]*realloc/void \* realloc/g' \
-e 's/int[ ][ ]*exit/void exit/g' \
- -e '/typedef[ a-zA-Z_]*[ ]size_t[ ]*;/i\
+ -e "/$size_t_pattern/"'i\
#ifndef _GCC_SIZE_T\
#define _GCC_SIZE_T
' \
- -e '/typedef[ a-zA-Z_]*[ ]size_t[ ]*;/a\
+ -e "/$size_t_pattern/"'a\
#endif
' \
${LIB}/$file > ${LIB}/${file}.sed
@@ -1113,6 +1134,18 @@ if [ -r ${LIB}/$file ]; then
fi
fi
+# And also with the HP-UX 10 sys/pci.h file
+file=sys/pci.h
+if [ -r ${LIB}/$file ]; then
+ if egrep 'System Private Structures' ${LIB}/$file > /dev/null; then
+ echo Fixing $file, overeager sed script
+ rm ${LIB}/$file
+ sed -e 's|//.*$||g' $file > ${LIB}/$file
+ chmod +w ${LIB}/$file 2>/dev/null
+ chmod a+r ${LIB}/$file 2>/dev/null
+ fi
+fi
+
# Some IRIX header files contains the string "//"
for file in elf_abi.h elf.h; do
if [ -r ${LIB}/$file ]; then
@@ -1827,6 +1860,7 @@ fi
# comment. Fortunately, HP/UX already uses #ifndefs in limits.h; if
# we find a #ifndef FLT_MIN we assume that all the required #ifndefs
# are there, and we do not add them ourselves.
+# Also fix a nested comment problem in sys/limits.h on Motorola sysV68 R3V7.1
for file in limits.h sys/limits.h; do
if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
mkdir ${LIB}/sys 2>/dev/null
@@ -1876,6 +1910,7 @@ for file in limits.h sys/limits.h; do
-e '/[ ]DBL_DIG[ ]/a\
#endif
'\
+ -e '/^\(\/\*#define HUGE_VAL 3\.[0-9e+]* *\)\/\*/s//\1/'\
${LIB}/$file > ${LIB}/${file}.sed
rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
fi
@@ -1969,6 +2004,7 @@ fi
# Correct the return type for strlen in string.h on Lynx.
# Correct the argument type for ffs in string.h on Alpha OSF/1 V2.0.
# Add missing const for strdup on OSF/1 V3.0.
+# On sysV88 layout is slightly different.
file=string.h
if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
@@ -1987,6 +2023,8 @@ if [ -r ${LIB}/$file ]; then
-e 's/^\( strncmp()\),\n\( strlen(),\)$/\1;\
extern unsigned int\
\2/'\
+ -e '/^extern int$/N'\
+ -e 's/^extern int\(\n strlen(),\)/extern size_t\1/' \
${LIB}/$file > ${LIB}/${file}.sed
rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
if cmp $file ${LIB}/$file >/dev/null 2>&1; then
@@ -2272,6 +2310,45 @@ do
fi
done
+# libm.a on m88k-motorola-sysv3 contains a stupid optimization for function
+# hypot(), which returns the second argument without even looking at its value
+# if the other is 0.0
+# Another drawback is that fix-header doesn't fix fabs' prototype, and I have
+# no idea why.
+file=math.h
+if [ $target_canonical = m88k-motorola-sysv3 ]; then
+ if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
+ cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
+ chmod +w ${LIB}/$file 2>/dev/null
+ chmod a+r ${LIB}/$file 2>/dev/null
+ fi
+
+ if [ -r ${LIB}/$file ]; then
+ echo Fixing $file, fabs/hypot definition
+ sed \
+ -e 's/extern double floor(), ceil(), fmod(), fabs();/extern double floor(), ceil(), fmod(), fabs _PARAMS((double));/' \
+ -e '/^extern double hypot();$/a\
+\/* Workaround a stupid Motorola optimization if one\
+ of x or y is 0.0 and the other is negative! *\/\
+#ifdef __STDC__\
+static __inline__ double fake_hypot (double x, double y)\
+#else\
+static __inline__ double fake_hypot (x, y)\
+ double x, y;\
+#endif\
+{\
+ return fabs (hypot (x, y));\
+}\
+#define hypot fake_hypot
+' \
+ ${LIB}/$file > ${LIB}/${file}.sed
+ rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
+ if cmp $file ${LIB}/$file >/dev/null 2>&1; then
+ rm -f ${LIB}/$file
+ fi
+ fi
+fi
+
# math.h on SunOS 4 puts the declaration of matherr before the definition
# of struct exception, so the prototype (added by fixproto) causes havoc.
file=math.h
@@ -2810,7 +2887,7 @@ if [ -r ${LIB}/$file ]; then
fi
# sys/lc_core.h on some versions of OSF1/4.x pollutes the namespace by
-# defining regex.h related types. This causes libg++ build and usage failures.
+# defining regex.h types. This causes C++ library build and usage failures.
# Fixing this correctly requires checking and modifying 3 files.
for file in reg_types.h regex.h sys/lc_core.h; do
if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
@@ -2888,6 +2965,43 @@ for file in curses.h dbm.h locale.h stdio.h stdlib.h string.h time.h unistd.h sy
fi
done
+# HPUX 10.x sys/param.h defines MAXINT which clashes with values.h
+file=sys/param.h
+base=`basename $file`
+if [ -r ${LIB}/$file ]; then
+ file_to_fix=${LIB}/$file
+else
+ if [ -r ${INPUT}/$file ]; then
+ file_to_fix=${INPUT}/$file
+ else
+ file_to_fix=""
+ fi
+fi
+if [ \! -z "$file_to_fix" ]; then
+ echo Checking $file_to_fix
+ sed -e '/[ ]MAXINT[ ]/i\
+#ifndef MAXINT
+'\
+ -e '/[ ]MAXINT[ ]/a\
+#endif
+' $file_to_fix > /tmp/$base
+ if cmp $file_to_fix /tmp/$base >/dev/null 2>&1; then \
+ true
+ else
+ echo Fixed $file_to_fix
+ rm -f ${LIB}/$file
+ cp /tmp/$base ${LIB}/$file
+ chmod a+r ${LIB}/$file
+ # Find any include directives that use "file".
+ for include in `egrep '^[ ]*#[ ]*include[ ]*"[^/]' ${LIB}/$file | sed -e 's/^[ ]*#[ ]*include[ ]*"\([^"]*\)".*$/\1/'`; do
+ dir=`echo $file | sed -e s'|/[^/]*$||'`
+ required="$required ${INPUT} $dir/$include ${LIB}/$dir/$include"
+ done
+ fi
+ rm -f /tmp/$base
+fi
+
+
# This loop does not appear to do anything, because it uses file
# rather than $file when setting target. It also appears to be
# unnecessary, since the main loop processes symbolic links.
@@ -2947,4 +3061,5 @@ for file in $files; do
rmdir $LIB/$file > /dev/null 2>&1
done
+
exit 0
diff --git a/gcc/fixproto b/gcc/fixproto
index b7e85646470..1e4c0fc905a 100755
--- a/gcc/fixproto
+++ b/gcc/fixproto
@@ -120,6 +120,7 @@ required_stdlib_h="abort abs atexit atof atoi atol bsearch calloc exit free gete
required_unistd_h="_exit access alarm chdir chown close ctermid cuserid dup dup2 execl execle execlp execv execve execvp fork fpathconf getcwd getegid geteuid getgid getlogin getopt getpgrp getpid getppid getuid isatty link lseek pathconf pause pipe read rmdir setgid setpgid setsid setuid sleep sysconf tcgetpgrp tcsetpgrp ttyname unlink write"
done_dirs=""
+subdirs_made=""
echo "" >fixproto.list
for code in ALL STD ; do
@@ -174,7 +175,9 @@ for code in ALL STD ; do
abs_target_subdir=${abs_target_dir}/${rel_source_subdir}
if [ \! -d $abs_target_subdir ] ; then
- mkdir $abs_target_subdir
+ if mkdir $abs_target_subdir ; then
+ subdirs_made="$abs_target_subdir $subdirs_made"
+ fi
fi
# Append "/"; remove initial "./". Hence "." -> "" and "sys" -> "sys/".
rel_source_prefix=`echo $rel_source_subdir | sed -e 's|$|/|' -e 's|^./||'`
@@ -199,7 +202,9 @@ for code in ALL STD ; do
# Create the dir where this file will go when fixed.
xxdir=`echo ./$file | sed -e 's|/[^/]*$||'`
if [ \! -d $abs_target_subdir/$xxdir ] ; then
- mkdir $abs_target_subdir/$xxdir
+ if mkdir $abs_target_subdir/$xxdir ; then
+ subdirs_made="$abs_target_subdir/$xxdir $subdirs_made"
+ fi
fi
# Just in case we have edited out a symbolic link
if [ -f $src_dir_std/$file -a -f $src_dir_std/$xxfile ] ; then
@@ -270,4 +275,8 @@ EOF
rm tmp.h
fi
done
+
+# Remove any directories that we made that are still empty.
+rmdir $subdirs_made 2>/dev/null
+
exit 0
diff --git a/gcc/flags.h b/gcc/flags.h
index 21eaed39dff..b7544a97a9f 100644
--- a/gcc/flags.h
+++ b/gcc/flags.h
@@ -349,7 +349,7 @@ extern int flag_function_sections;
the generated assembly code (to make it more readable). This option
is generally only of use to those who actually need to read the
generated assembly code (perhaps while debugging the compiler itself).
- -fverbose-asm is the default. -fno-verbose-asm causes the extra information
+ -fno-verbose-asm, the default, causes the extra information
to not be added and is useful when comparing two assembler files. */
extern int flag_verbose_asm;
@@ -397,6 +397,14 @@ extern int current_function_has_nonlocal_label;
extern int current_function_has_nonlocal_goto;
+/* Nonzero if GCC must add code to check memory access (used by Checker). */
+
+extern int flag_check_memory_usage;
+
+/* Nonzero if GCC must prefix function names (used with
+ flag_check_memory_usage). */
+
+extern int flag_prefix_function_name;
/* Nonzero if the current function is a thunk, so we should try to cut
corners where we can. */
extern int current_function_is_thunk;
diff --git a/gcc/floatlib.c b/gcc/floatlib.c
index bdcdf57ddd0..55e1d4f6512 100644
--- a/gcc/floatlib.c
+++ b/gcc/floatlib.c
@@ -737,7 +737,7 @@ __divdf3 (double a1, double a2)
if (__dcmp(x1m1,x1m2,x2m1,x2m2) < 0) {
/* if x1's mantissa is less than x2's shift it left one and decrement */
- /* the exponent to accomodate the change in the mantissa */
+ /* the exponent to accommodate the change in the mantissa */
x1m1 <<= 1; /* */
bit_bucket = x1m2 >> 31; /* Shift mantissa left one */
diff --git a/gcc/flow.c b/gcc/flow.c
index 44f1748e6e1..b9c52afc965 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -108,8 +108,8 @@ Boston, MA 02111-1307, USA. */
register usage: reg_n_refs, reg_n_deaths, reg_n_sets, reg_live_length,
reg_n_calls_crosses and reg_basic_block. */
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "basic-block.h"
#include "insn-config.h"
@@ -249,7 +249,6 @@ static HARD_REG_SET elim_reg_set;
/* Forward declarations */
static void find_basic_blocks PROTO((rtx, rtx));
-static int jmp_uses_reg_or_mem PROTO((rtx));
static void mark_label_ref PROTO((rtx, rtx, int));
static void life_analysis PROTO((rtx, int));
void allocate_for_life_analysis PROTO((void));
@@ -493,65 +492,33 @@ find_basic_blocks (f, nonlocal_label_list)
/* Find all indirect jump insns and mark them as possibly jumping to all
the labels whose addresses are explicitly used. This is because,
when there are computed gotos, we can't tell which labels they jump
- to, of all the possibilities.
-
- Tablejumps and casesi insns are OK and we can recognize them by
- a (use (label_ref)). */
+ to, of all the possibilities. */
for (insn = f; insn; insn = NEXT_INSN (insn))
- if (GET_CODE (insn) == JUMP_INSN)
+ if (computed_jump_p (insn))
{
- rtx pat = PATTERN (insn);
- int computed_jump = 0;
-
- if (GET_CODE (pat) == PARALLEL)
+ if (label_value_list_marked_live == 0)
{
- int len = XVECLEN (pat, 0);
- int has_use_labelref = 0;
-
- for (i = len - 1; i >= 0; i--)
- if (GET_CODE (XVECEXP (pat, 0, i)) == USE
- && (GET_CODE (XEXP (XVECEXP (pat, 0, i), 0))
- == LABEL_REF))
- has_use_labelref = 1;
-
- if (! has_use_labelref)
- for (i = len - 1; i >= 0; i--)
- if (GET_CODE (XVECEXP (pat, 0, i)) == SET
- && SET_DEST (XVECEXP (pat, 0, i)) == pc_rtx
- && jmp_uses_reg_or_mem (SET_SRC (XVECEXP (pat, 0, i))))
- computed_jump = 1;
- }
- else if (GET_CODE (pat) == SET
- && SET_DEST (pat) == pc_rtx
- && jmp_uses_reg_or_mem (SET_SRC (pat)))
- computed_jump = 1;
-
- if (computed_jump)
- {
- if (label_value_list_marked_live == 0)
- {
- label_value_list_marked_live = 1;
+ label_value_list_marked_live = 1;
- /* This could be made smarter by only considering
- these live, if the computed goto is live. */
+ /* This could be made smarter by only considering
+ these live, if the computed goto is live. */
- /* Don't delete the labels (in this function) that
- are referenced by non-jump instructions. */
-
- for (x = label_value_list; x; x = XEXP (x, 1))
- if (! LABEL_REF_NONLOCAL_P (x))
- block_live[BLOCK_NUM (XEXP (x, 0))] = 1;
- }
+ /* Don't delete the labels (in this function) that
+ are referenced by non-jump instructions. */
for (x = label_value_list; x; x = XEXP (x, 1))
- mark_label_ref (gen_rtx (LABEL_REF, VOIDmode, XEXP (x, 0)),
- insn, 0);
+ if (! LABEL_REF_NONLOCAL_P (x))
+ block_live[BLOCK_NUM (XEXP (x, 0))] = 1;
+ }
- for (x = forced_labels; x; x = XEXP (x, 1))
- mark_label_ref (gen_rtx (LABEL_REF, VOIDmode, XEXP (x, 0)),
+ for (x = label_value_list; x; x = XEXP (x, 1))
+ mark_label_ref (gen_rtx (LABEL_REF, VOIDmode, XEXP (x, 0)),
+ insn, 0);
+
+ for (x = forced_labels; x; x = XEXP (x, 1))
+ mark_label_ref (gen_rtx (LABEL_REF, VOIDmode, XEXP (x, 0)),
insn, 0);
- }
}
/* Find all call insns and mark them as possibly jumping
@@ -770,56 +737,6 @@ find_basic_blocks (f, nonlocal_label_list)
/* Subroutines of find_basic_blocks. */
-/* Return 1 if X, the SRC_SRC of SET of (pc) contain a REG or MEM that is
- not in the constant pool and not in the condition of an IF_THEN_ELSE. */
-
-static int
-jmp_uses_reg_or_mem (x)
- rtx x;
-{
- enum rtx_code code = GET_CODE (x);
- int i, j;
- char *fmt;
-
- switch (code)
- {
- case CONST:
- case LABEL_REF:
- case PC:
- return 0;
-
- case REG:
- return 1;
-
- case MEM:
- return ! (GET_CODE (XEXP (x, 0)) == SYMBOL_REF
- && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0)));
-
- case IF_THEN_ELSE:
- return (jmp_uses_reg_or_mem (XEXP (x, 1))
- || jmp_uses_reg_or_mem (XEXP (x, 2)));
-
- case PLUS: case MINUS: case MULT:
- return (jmp_uses_reg_or_mem (XEXP (x, 0))
- || jmp_uses_reg_or_mem (XEXP (x, 1)));
- }
-
- fmt = GET_RTX_FORMAT (code);
- for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
- {
- if (fmt[i] == 'e'
- && jmp_uses_reg_or_mem (XEXP (x, i)))
- return 1;
-
- if (fmt[i] == 'E')
- for (j = 0; j < XVECLEN (x, i); j++)
- if (jmp_uses_reg_or_mem (XVECEXP (x, i, j)))
- return 1;
- }
-
- return 0;
-}
-
/* Check expression X for label references;
if one is found, add INSN to the label's chain of references.
@@ -1533,9 +1450,10 @@ propagate_block (old, first, last, final, significant, bnum)
merged into a following memory address. */
#ifdef AUTO_INC_DEC
{
- register rtx x = PATTERN (insn);
+ register rtx x = single_set (insn);
+
/* Does this instruction increment or decrement a register? */
- if (final && GET_CODE (x) == SET
+ if (final && x != 0
&& GET_CODE (SET_DEST (x)) == REG
&& (GET_CODE (SET_SRC (x)) == PLUS
|| GET_CODE (SET_SRC (x)) == MINUS)
@@ -2630,6 +2548,9 @@ mark_used_regs (needed, live, x, final, insn)
)
SET_REGNO_REG_SET (live, i);
break;
+
+ default:
+ break;
}
/* Recursively scan the operands of this expression. */
@@ -2668,7 +2589,7 @@ try_pre_increment_1 (insn)
{
/* Find the next use of this reg. If in same basic block,
make it do pre-increment or pre-decrement if appropriate. */
- rtx x = PATTERN (insn);
+ rtx x = single_set (insn);
HOST_WIDE_INT amount = ((GET_CODE (SET_SRC (x)) == PLUS ? 1 : -1)
* INTVAL (XEXP (SET_SRC (x), 1)));
int regno = REGNO (SET_DEST (x));
@@ -2678,8 +2599,7 @@ try_pre_increment_1 (insn)
/* Don't do this if the reg dies, or gets set in y; a standard addressing
mode would be better. */
&& ! dead_or_set_p (y, SET_DEST (x))
- && try_pre_increment (y, SET_DEST (PATTERN (insn)),
- amount))
+ && try_pre_increment (y, SET_DEST (x), amount))
{
/* We have found a suitable auto-increment
and already changed insn Y to do it.
@@ -2934,3 +2854,106 @@ dump_flow_info (file)
}
fprintf (file, "\n");
}
+
+
+/* Like print_rtl, but also print out live information for the start of each
+ basic block. */
+
+void
+print_rtl_with_bb (outf, rtx_first)
+ FILE *outf;
+ rtx rtx_first;
+{
+ register rtx tmp_rtx;
+
+ if (rtx_first == 0)
+ fprintf (outf, "(nil)\n");
+
+ else
+ {
+ int i, bb;
+ enum bb_state { NOT_IN_BB, IN_ONE_BB, IN_MULTIPLE_BB };
+ int max_uid = get_max_uid ();
+ int *start = (int *) alloca (max_uid * sizeof (int));
+ int *end = (int *) alloca (max_uid * sizeof (int));
+ char *in_bb_p = (char *) alloca (max_uid * sizeof (enum bb_state));
+
+ for (i = 0; i < max_uid; i++)
+ {
+ start[i] = end[i] = -1;
+ in_bb_p[i] = NOT_IN_BB;
+ }
+
+ for (i = n_basic_blocks-1; i >= 0; i--)
+ {
+ rtx x;
+ start[INSN_UID (basic_block_head[i])] = i;
+ end[INSN_UID (basic_block_end[i])] = i;
+ for (x = basic_block_head[i]; x != NULL_RTX; x = NEXT_INSN (x))
+ {
+ in_bb_p[ INSN_UID(x)]
+ = (in_bb_p[ INSN_UID(x)] == NOT_IN_BB)
+ ? IN_ONE_BB : IN_MULTIPLE_BB;
+ if (x == basic_block_end[i])
+ break;
+ }
+ }
+
+ for (tmp_rtx = rtx_first; NULL != tmp_rtx; tmp_rtx = NEXT_INSN (tmp_rtx))
+ {
+ if ((bb = start[INSN_UID (tmp_rtx)]) >= 0)
+ {
+ int pos = 18;
+
+ if (PREV_INSN (tmp_rtx) != 0
+ && end[INSN_UID (PREV_INSN (tmp_rtx))] >= 0)
+ fprintf (outf, " start");
+ else
+ fprintf (outf, ";; Start");
+
+ fprintf (outf, " of basic block %d.\n;; Registers live:", bb);
+
+ EXECUTE_IF_SET_IN_REG_SET (basic_block_live_at_start[bb], 0, i,
+ {
+ if (pos > 65)
+ {
+ fprintf (outf, "\n;;\t");
+ pos = 10;
+ }
+
+ fprintf (outf, " %d", i);
+ pos += (i >= 100 ? 4 : 3);
+ if (i < FIRST_PSEUDO_REGISTER)
+ {
+ fprintf (outf, " [%s]",
+ reg_names[i]);
+ pos += (strlen (reg_names[i])
+ + 3);
+ }
+ });
+ putc ('\n', outf);
+ putc ('\n', outf);
+ }
+
+ if (in_bb_p[ INSN_UID(tmp_rtx)] == NOT_IN_BB
+ && GET_CODE (tmp_rtx) != NOTE
+ && GET_CODE (tmp_rtx) != BARRIER)
+ fprintf (outf, ";; Insn is not within a basic block\n");
+ else if (in_bb_p[ INSN_UID(tmp_rtx)] == IN_MULTIPLE_BB)
+ fprintf (outf, ";; Insn is in multiple basic blocks\n");
+
+ print_rtl_single (outf, tmp_rtx);
+ putc ('\n', outf);
+
+ if ((bb = end[INSN_UID (tmp_rtx)]) >= 0)
+ {
+ fprintf (outf, "\n;; End of basic block %d", bb);
+ if (NEXT_INSN (tmp_rtx) != 0
+ && start[INSN_UID (NEXT_INSN (tmp_rtx))] >= 0)
+ fprintf (outf, ";");
+ else
+ fprintf (outf, ".\n");
+ }
+ }
+ }
+}
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index b146e8b1fac..3feee8ad3d2 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -1,5 +1,5 @@
/* Fold a constant sub-tree into a single node for C-compiler
- Copyright (C) 1987, 88, 92-96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 92-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -42,9 +42,9 @@ Boston, MA 02111-1307, USA. */
force_fit_type takes a constant and prior overflow indicator, and
forces the value to fit the type. It returns an overflow indicator. */
+#include "config.h"
#include <stdio.h>
#include <setjmp.h>
-#include "config.h"
#include "flags.h"
#include "tree.h"
@@ -62,6 +62,7 @@ int div_and_round_double PROTO((enum tree_code, int, HOST_WIDE_INT,
HOST_WIDE_INT *));
static int split_tree PROTO((tree, enum tree_code, tree *,
tree *, int *));
+static tree int_const_binop PROTO((enum tree_code, tree, tree, int, int));
static tree const_binop PROTO((enum tree_code, tree, tree, int));
static tree fold_convert PROTO((tree, tree));
static enum tree_code invert_tree_comparison PROTO((enum tree_code));
@@ -174,7 +175,7 @@ force_fit_type (t, overflow)
low = TREE_INT_CST_LOW (t);
high = TREE_INT_CST_HIGH (t);
- if (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE)
+ if (POINTER_TYPE_P (TREE_TYPE (t)))
prec = POINTER_SIZE;
else
prec = TYPE_PRECISION (TREE_TYPE (t));
@@ -479,7 +480,7 @@ div_and_round_double (code, uns,
int overflow = 0;
if ((hden == 0) && (lden == 0))
- abort ();
+ overflow = 1, lden = 1;
/* calculate quotient sign and convert operands to unsigned. */
if (!uns)
@@ -1050,192 +1051,215 @@ split_tree (in, code, varp, conp, varsignp)
return 0;
}
-/* Combine two constants ARG1 and ARG2 under operation CODE
+/* Combine two integer constants ARG1 and ARG2 under operation CODE
to produce a new constant.
- We assume ARG1 and ARG2 have the same data type,
- or at least are the same kind of constant and the same machine mode.
- If NOTRUNC is nonzero, do not truncate the result to fit the data type. */
+ If NOTRUNC is nonzero, do not truncate the result to fit the data type.
+ If FORSIZE is nonzero, compute overflow for unsigned types. */
static tree
-const_binop (code, arg1, arg2, notrunc)
+int_const_binop (code, arg1, arg2, notrunc, forsize)
enum tree_code code;
register tree arg1, arg2;
- int notrunc;
+ int notrunc, forsize;
{
- STRIP_NOPS (arg1); STRIP_NOPS (arg2);
+ HOST_WIDE_INT int1l, int1h, int2l, int2h;
+ HOST_WIDE_INT low, hi;
+ HOST_WIDE_INT garbagel, garbageh;
+ register tree t;
+ int uns = TREE_UNSIGNED (TREE_TYPE (arg1));
+ int overflow = 0;
+ int no_overflow = 0;
- if (TREE_CODE (arg1) == INTEGER_CST)
+ int1l = TREE_INT_CST_LOW (arg1);
+ int1h = TREE_INT_CST_HIGH (arg1);
+ int2l = TREE_INT_CST_LOW (arg2);
+ int2h = TREE_INT_CST_HIGH (arg2);
+
+ switch (code)
{
- register HOST_WIDE_INT int1l = TREE_INT_CST_LOW (arg1);
- register HOST_WIDE_INT int1h = TREE_INT_CST_HIGH (arg1);
- HOST_WIDE_INT int2l = TREE_INT_CST_LOW (arg2);
- HOST_WIDE_INT int2h = TREE_INT_CST_HIGH (arg2);
- HOST_WIDE_INT low, hi;
- HOST_WIDE_INT garbagel, garbageh;
- register tree t;
- int uns = TREE_UNSIGNED (TREE_TYPE (arg1));
- int overflow = 0;
- int no_overflow = 0;
+ case BIT_IOR_EXPR:
+ low = int1l | int2l, hi = int1h | int2h;
+ break;
- switch (code)
- {
- case BIT_IOR_EXPR:
- low = int1l | int2l, hi = int1h | int2h;
- break;
+ case BIT_XOR_EXPR:
+ low = int1l ^ int2l, hi = int1h ^ int2h;
+ break;
- case BIT_XOR_EXPR:
- low = int1l ^ int2l, hi = int1h ^ int2h;
- break;
+ case BIT_AND_EXPR:
+ low = int1l & int2l, hi = int1h & int2h;
+ break;
- case BIT_AND_EXPR:
- low = int1l & int2l, hi = int1h & int2h;
- break;
+ case BIT_ANDTC_EXPR:
+ low = int1l & ~int2l, hi = int1h & ~int2h;
+ break;
- case BIT_ANDTC_EXPR:
- low = int1l & ~int2l, hi = int1h & ~int2h;
- break;
+ case RSHIFT_EXPR:
+ int2l = - int2l;
+ case LSHIFT_EXPR:
+ /* It's unclear from the C standard whether shifts can overflow.
+ The following code ignores overflow; perhaps a C standard
+ interpretation ruling is needed. */
+ lshift_double (int1l, int1h, int2l,
+ TYPE_PRECISION (TREE_TYPE (arg1)),
+ &low, &hi,
+ !uns);
+ no_overflow = 1;
+ break;
- case RSHIFT_EXPR:
- int2l = - int2l;
- case LSHIFT_EXPR:
- /* It's unclear from the C standard whether shifts can overflow.
- The following code ignores overflow; perhaps a C standard
- interpretation ruling is needed. */
- lshift_double (int1l, int1h, int2l,
- TYPE_PRECISION (TREE_TYPE (arg1)),
- &low, &hi,
- !uns);
- no_overflow = 1;
- break;
+ case RROTATE_EXPR:
+ int2l = - int2l;
+ case LROTATE_EXPR:
+ lrotate_double (int1l, int1h, int2l,
+ TYPE_PRECISION (TREE_TYPE (arg1)),
+ &low, &hi);
+ break;
- case RROTATE_EXPR:
- int2l = - int2l;
- case LROTATE_EXPR:
- lrotate_double (int1l, int1h, int2l,
- TYPE_PRECISION (TREE_TYPE (arg1)),
- &low, &hi);
- break;
+ case PLUS_EXPR:
+ overflow = add_double (int1l, int1h, int2l, int2h, &low, &hi);
+ break;
- case PLUS_EXPR:
- overflow = add_double (int1l, int1h, int2l, int2h, &low, &hi);
- break;
+ case MINUS_EXPR:
+ neg_double (int2l, int2h, &low, &hi);
+ add_double (int1l, int1h, low, hi, &low, &hi);
+ overflow = overflow_sum_sign (hi, int2h, int1h);
+ break;
- case MINUS_EXPR:
- neg_double (int2l, int2h, &low, &hi);
- add_double (int1l, int1h, low, hi, &low, &hi);
- overflow = overflow_sum_sign (hi, int2h, int1h);
- break;
+ case MULT_EXPR:
+ overflow = mul_double (int1l, int1h, int2l, int2h, &low, &hi);
+ break;
- case MULT_EXPR:
- overflow = mul_double (int1l, int1h, int2l, int2h, &low, &hi);
+ case TRUNC_DIV_EXPR:
+ case FLOOR_DIV_EXPR: case CEIL_DIV_EXPR:
+ case EXACT_DIV_EXPR:
+ /* This is a shortcut for a common special case. */
+ if (int2h == 0 && int2l > 0
+ && ! TREE_CONSTANT_OVERFLOW (arg1)
+ && ! TREE_CONSTANT_OVERFLOW (arg2)
+ && int1h == 0 && int1l >= 0)
+ {
+ if (code == CEIL_DIV_EXPR)
+ int1l += int2l - 1;
+ low = int1l / int2l, hi = 0;
break;
+ }
- case TRUNC_DIV_EXPR:
- case FLOOR_DIV_EXPR: case CEIL_DIV_EXPR:
- case EXACT_DIV_EXPR:
- /* This is a shortcut for a common special case. */
- if (int2h == 0 && int2l > 0
- && ! TREE_CONSTANT_OVERFLOW (arg1)
- && ! TREE_CONSTANT_OVERFLOW (arg2)
- && int1h == 0 && int1l >= 0)
- {
- if (code == CEIL_DIV_EXPR)
- int1l += int2l - 1;
- low = int1l / int2l, hi = 0;
- break;
- }
-
- /* ... fall through ... */
+ /* ... fall through ... */
- case ROUND_DIV_EXPR:
- if (int2h == 0 && int2l == 1)
- {
- low = int1l, hi = int1h;
- break;
- }
- if (int1l == int2l && int1h == int2h
- && ! (int1l == 0 && int1h == 0))
- {
- low = 1, hi = 0;
- break;
- }
- overflow = div_and_round_double (code, uns,
- int1l, int1h, int2l, int2h,
- &low, &hi, &garbagel, &garbageh);
+ case ROUND_DIV_EXPR:
+ if (int2h == 0 && int2l == 1)
+ {
+ low = int1l, hi = int1h;
break;
-
- case TRUNC_MOD_EXPR:
- case FLOOR_MOD_EXPR: case CEIL_MOD_EXPR:
- /* This is a shortcut for a common special case. */
- if (int2h == 0 && int2l > 0
- && ! TREE_CONSTANT_OVERFLOW (arg1)
- && ! TREE_CONSTANT_OVERFLOW (arg2)
- && int1h == 0 && int1l >= 0)
- {
- if (code == CEIL_MOD_EXPR)
- int1l += int2l - 1;
- low = int1l % int2l, hi = 0;
- break;
- }
-
- /* ... fall through ... */
-
- case ROUND_MOD_EXPR:
- overflow = div_and_round_double (code, uns,
- int1l, int1h, int2l, int2h,
- &garbagel, &garbageh, &low, &hi);
+ }
+ if (int1l == int2l && int1h == int2h
+ && ! (int1l == 0 && int1h == 0))
+ {
+ low = 1, hi = 0;
break;
+ }
+ overflow = div_and_round_double (code, uns,
+ int1l, int1h, int2l, int2h,
+ &low, &hi, &garbagel, &garbageh);
+ break;
- case MIN_EXPR:
- case MAX_EXPR:
- if (uns)
- {
- low = (((unsigned HOST_WIDE_INT) int1h
- < (unsigned HOST_WIDE_INT) int2h)
- || (((unsigned HOST_WIDE_INT) int1h
- == (unsigned HOST_WIDE_INT) int2h)
- && ((unsigned HOST_WIDE_INT) int1l
- < (unsigned HOST_WIDE_INT) int2l)));
- }
- else
- {
- low = ((int1h < int2h)
- || ((int1h == int2h)
- && ((unsigned HOST_WIDE_INT) int1l
- < (unsigned HOST_WIDE_INT) int2l)));
- }
- if (low == (code == MIN_EXPR))
- low = int1l, hi = int1h;
- else
- low = int2l, hi = int2h;
+ case TRUNC_MOD_EXPR:
+ case FLOOR_MOD_EXPR: case CEIL_MOD_EXPR:
+ /* This is a shortcut for a common special case. */
+ if (int2h == 0 && int2l > 0
+ && ! TREE_CONSTANT_OVERFLOW (arg1)
+ && ! TREE_CONSTANT_OVERFLOW (arg2)
+ && int1h == 0 && int1l >= 0)
+ {
+ if (code == CEIL_MOD_EXPR)
+ int1l += int2l - 1;
+ low = int1l % int2l, hi = 0;
break;
+ }
- default:
- abort ();
+ /* ... fall through ... */
+
+ case ROUND_MOD_EXPR:
+ overflow = div_and_round_double (code, uns,
+ int1l, int1h, int2l, int2h,
+ &garbagel, &garbageh, &low, &hi);
+ break;
+
+ case MIN_EXPR:
+ case MAX_EXPR:
+ if (uns)
+ {
+ low = (((unsigned HOST_WIDE_INT) int1h
+ < (unsigned HOST_WIDE_INT) int2h)
+ || (((unsigned HOST_WIDE_INT) int1h
+ == (unsigned HOST_WIDE_INT) int2h)
+ && ((unsigned HOST_WIDE_INT) int1l
+ < (unsigned HOST_WIDE_INT) int2l)));
}
- got_it:
- if (TREE_TYPE (arg1) == sizetype && hi == 0
- && low >= 0 && low <= TREE_INT_CST_LOW (TYPE_MAX_VALUE (sizetype))
- && ! overflow
- && ! TREE_OVERFLOW (arg1) && ! TREE_OVERFLOW (arg2))
- t = size_int (low);
else
{
- t = build_int_2 (low, hi);
- TREE_TYPE (t) = TREE_TYPE (arg1);
+ low = ((int1h < int2h)
+ || ((int1h == int2h)
+ && ((unsigned HOST_WIDE_INT) int1l
+ < (unsigned HOST_WIDE_INT) int2l)));
}
+ if (low == (code == MIN_EXPR))
+ low = int1l, hi = int1h;
+ else
+ low = int2l, hi = int2h;
+ break;
- TREE_OVERFLOW (t)
- = ((notrunc ? !uns && overflow
- : force_fit_type (t, overflow && !uns) && ! no_overflow)
- | TREE_OVERFLOW (arg1)
- | TREE_OVERFLOW (arg2));
- TREE_CONSTANT_OVERFLOW (t) = (TREE_OVERFLOW (t)
- | TREE_CONSTANT_OVERFLOW (arg1)
- | TREE_CONSTANT_OVERFLOW (arg2));
- return t;
+ default:
+ abort ();
+ }
+
+ if (TREE_TYPE (arg1) == sizetype && hi == 0
+ && low >= 0 && low <= TREE_INT_CST_LOW (TYPE_MAX_VALUE (sizetype))
+ && ! overflow
+ && ! TREE_OVERFLOW (arg1) && ! TREE_OVERFLOW (arg2))
+ t = size_int (low);
+ else
+ {
+ t = build_int_2 (low, hi);
+ TREE_TYPE (t) = TREE_TYPE (arg1);
}
+
+ TREE_OVERFLOW (t)
+ = ((notrunc ? (!uns || forsize) && overflow
+ : force_fit_type (t, (!uns || forsize) && overflow) && ! no_overflow)
+ | TREE_OVERFLOW (arg1)
+ | TREE_OVERFLOW (arg2));
+ /* If we're doing a size calculation, unsigned arithmetic does overflow.
+ So check if force_fit_type truncated the value. */
+ if (forsize
+ && ! TREE_OVERFLOW (t)
+ && (TREE_INT_CST_HIGH (t) != hi
+ || TREE_INT_CST_LOW (t) != low))
+ TREE_OVERFLOW (t) = 1;
+ TREE_CONSTANT_OVERFLOW (t) = (TREE_OVERFLOW (t)
+ | TREE_CONSTANT_OVERFLOW (arg1)
+ | TREE_CONSTANT_OVERFLOW (arg2));
+ return t;
+}
+
+/* Combine two constants ARG1 and ARG2 under operation CODE
+ to produce a new constant.
+ We assume ARG1 and ARG2 have the same data type,
+ or at least are the same kind of constant and the same machine mode.
+
+ If NOTRUNC is nonzero, do not truncate the result to fit the data type. */
+
+static tree
+const_binop (code, arg1, arg2, notrunc)
+ enum tree_code code;
+ register tree arg1, arg2;
+ int notrunc;
+{
+ STRIP_NOPS (arg1); STRIP_NOPS (arg2);
+
+ if (TREE_CODE (arg1) == INTEGER_CST)
+ return int_const_binop (code, arg1, arg2, notrunc, 0);
+
#if ! defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC)
if (TREE_CODE (arg1) == REAL_CST)
{
@@ -1449,7 +1473,7 @@ size_binop (code, arg0, arg1)
return arg1;
/* Handle general case of two integer constants. */
- return const_binop (code, arg0, arg1, 0);
+ return int_const_binop (code, arg0, arg1, 0, 1);
}
if (arg0 == error_mark_node || arg1 == error_mark_node)
@@ -1469,7 +1493,7 @@ fold_convert (t, arg1)
register tree type = TREE_TYPE (t);
int overflow = 0;
- if (TREE_CODE (type) == POINTER_TYPE || INTEGRAL_TYPE_P (type))
+ if (POINTER_TYPE_P (type) || INTEGRAL_TYPE_P (type))
{
if (TREE_CODE (arg1) == INTEGER_CST)
{
@@ -1486,13 +1510,15 @@ fold_convert (t, arg1)
/* Indicate an overflow if (1) ARG1 already overflowed,
or (2) force_fit_type indicates an overflow.
Tell force_fit_type that an overflow has already occurred
- if ARG1 is a too-large unsigned value and T is signed. */
+ if ARG1 is a too-large unsigned value and T is signed.
+ But don't indicate an overflow if converting a pointer. */
TREE_OVERFLOW (t)
- = (TREE_OVERFLOW (arg1)
- | force_fit_type (t,
- (TREE_INT_CST_HIGH (arg1) < 0
- & (TREE_UNSIGNED (type)
- < TREE_UNSIGNED (TREE_TYPE (arg1))))));
+ = ((force_fit_type (t,
+ (TREE_INT_CST_HIGH (arg1) < 0
+ & (TREE_UNSIGNED (type)
+ < TREE_UNSIGNED (TREE_TYPE (arg1)))))
+ && ! POINTER_TYPE_P (TREE_TYPE (arg1)))
+ || TREE_OVERFLOW (arg1));
TREE_CONSTANT_OVERFLOW (t)
= TREE_OVERFLOW (t) | TREE_CONSTANT_OVERFLOW (arg1);
}
@@ -1771,8 +1797,8 @@ operand_equal_p (arg0, arg1, only_const)
case REAL_CST:
return (! TREE_CONSTANT_OVERFLOW (arg0)
&& ! TREE_CONSTANT_OVERFLOW (arg1)
- && REAL_VALUES_EQUAL (TREE_REAL_CST (arg0),
- TREE_REAL_CST (arg1)));
+ && REAL_VALUES_IDENTICAL (TREE_REAL_CST (arg0),
+ TREE_REAL_CST (arg1)));
case COMPLEX_CST:
return (operand_equal_p (TREE_REALPART (arg0), TREE_REALPART (arg1),
@@ -1789,6 +1815,8 @@ operand_equal_p (arg0, arg1, only_const)
case ADDR_EXPR:
return operand_equal_p (TREE_OPERAND (arg0, 0), TREE_OPERAND (arg1, 0),
0);
+ default:
+ break;
}
if (only_const)
@@ -1846,11 +1874,13 @@ operand_equal_p (arg0, arg1, only_const)
TREE_OPERAND (arg1, 1), 0)
&& operand_equal_p (TREE_OPERAND (arg0, 2),
TREE_OPERAND (arg1, 2), 0));
+ default:
+ return 0;
}
- break;
+
+ default:
+ return 0;
}
-
- return 0;
}
/* Similar to operand_equal_p, but see if ARG0 might have been made by
@@ -2001,9 +2031,10 @@ twoval_comparison_p (arg, cval1, cval2, save_p)
return 0;
return 1;
- }
- return 0;
+ default:
+ return 0;
+ }
}
/* ARG is a tree that is known to contain just arithmetic operations and
@@ -2058,7 +2089,10 @@ eval_subst (arg, old0, new0, old1, new1)
old0, new0, old1, new1),
eval_subst (TREE_OPERAND (arg, 2),
old0, new0, old1, new1)));
+ default:
+ break;
}
+ /* fall through (???) */
case '<':
{
@@ -2081,9 +2115,10 @@ eval_subst (arg, old0, new0, old1, new1)
return fold (build (code, type, arg0, arg1));
}
- }
- return arg;
+ default:
+ return arg;
+ }
}
/* Return a tree for the case when the result of an expression is RESULT
@@ -2221,6 +2256,9 @@ invert_truthvalue (arg)
case CLEANUP_POINT_EXPR:
return build1 (CLEANUP_POINT_EXPR, type,
invert_truthvalue (TREE_OPERAND (arg, 0)));
+
+ default:
+ break;
}
if (TREE_CODE (TREE_TYPE (arg)) != BOOLEAN_TYPE)
abort ();
@@ -2635,13 +2673,13 @@ simple_operand_p (exp)
are converted to
(unsigned) (X - 2) <= 3
- We decribe each set of comparisons as being either inside or outside
+ We describe each set of comparisons as being either inside or outside
a range, using a variable named like IN_P, and then describe the
range with a lower and upper bound. If one of the bounds is omitted,
it represents either the highest or lowest value of the type.
In the comments below, we represent a range by two numbers in brackets
- preceeded by a "+" to designate being inside that range, or a "-" to
+ preceded by a "+" to designate being inside that range, or a "-" to
designate being outside that range, so the condition can be inverted by
flipping the prefix. An omitted bound is represented by a "-". For
example, "- [-, 10]" means being outside the range starting at the lowest
@@ -2703,6 +2741,8 @@ range_binop (code, type, arg0, upper0_p, arg1, upper1_p)
case GT_EXPR: case GE_EXPR:
result = sgn0 > sgn1;
break;
+ default:
+ abort ();
}
return convert (type, result ? integer_one_node : integer_zero_node);
@@ -2779,6 +2819,8 @@ make_range (exp, pin_p, plow, phigh)
case LE_EXPR: /* + [-, c] */
in_p = ! in_p, low = 0, high = arg1;
break;
+ default:
+ abort ();
}
exp = arg0;
@@ -2862,14 +2904,62 @@ make_range (exp, pin_p, plow, phigh)
|| (high != 0 && ! int_fits_type_p (high, type)))
break;
- if (low != 0)
- low = convert (type, low);
+ n_low = low, n_high = high;
+
+ if (n_low != 0)
+ n_low = convert (type, n_low);
- if (high != 0)
- high = convert (type, high);
+ if (n_high != 0)
+ n_high = convert (type, n_high);
+
+ /* If we're converting from an unsigned to a signed type,
+ we will be doing the comparison as unsigned. The tests above
+ have already verified that LOW and HIGH are both positive.
+
+ So we have to make sure that the original unsigned value will
+ be interpreted as positive. */
+ if (TREE_UNSIGNED (type) && ! TREE_UNSIGNED (TREE_TYPE (exp)))
+ {
+ tree equiv_type = type_for_mode (TYPE_MODE (type), 1);
+ tree high_positive
+ = fold (build (RSHIFT_EXPR, type,
+ convert (type,
+ TYPE_MAX_VALUE (equiv_type)),
+ convert (type, integer_one_node)));
+
+ /* If the low bound is specified, "and" the range with the
+ range for which the original unsigned value will be
+ positive. */
+ if (low != 0)
+ {
+ if (! merge_ranges (&n_in_p, &n_low, &n_high,
+ 1, n_low, n_high,
+ 1, convert (type, integer_zero_node),
+ high_positive))
+ break;
+
+ in_p = (n_in_p == in_p);
+ }
+ else
+ {
+ /* Otherwise, "or" the range with the range of the input
+ that will be interpreted as negative. */
+ if (! merge_ranges (&n_in_p, &n_low, &n_high,
+ 0, n_low, n_high,
+ 1, convert (type, integer_zero_node),
+ high_positive))
+ break;
+
+ in_p = (in_p != n_in_p);
+ }
+ }
exp = arg0;
+ low = n_low, high = n_high;
continue;
+
+ default:
+ break;
}
break;
@@ -2955,15 +3045,20 @@ merge_ranges (pin_p, plow, phigh, in0_p, low0, high0, in1_p, low1, high1)
tree tem;
int in_p;
tree low, high;
-
- /* Make range 0 be the range that starts first. Swap them if it isn't. */
+ int lowequal = ((low0 == 0 && low1 == 0)
+ || integer_onep (range_binop (EQ_EXPR, integer_type_node,
+ low0, 0, low1, 0)));
+ int highequal = ((high0 == 0 && high1 == 0)
+ || integer_onep (range_binop (EQ_EXPR, integer_type_node,
+ high0, 1, high1, 1)));
+
+ /* Make range 0 be the range that starts first, or ends last if they
+ start at the same value. Swap them if it isn't. */
if (integer_onep (range_binop (GT_EXPR, integer_type_node,
low0, 0, low1, 0))
- || (((low0 == 0 && low1 == 0)
- || integer_onep (range_binop (EQ_EXPR, integer_type_node,
- low0, 0, low1, 0)))
+ || (lowequal
&& integer_onep (range_binop (GT_EXPR, integer_type_node,
- high0, 1, high1, 1))))
+ high1, 1, high0, 1))))
{
temp = in0_p, in0_p = in1_p, in1_p = temp;
tem = low0, low0 = low1, low1 = tem;
@@ -2995,27 +3090,32 @@ merge_ranges (pin_p, plow, phigh, in0_p, low0, high0, in1_p, low1, high1)
else if (in0_p && ! in1_p)
{
- /* If they don't overlap, the result is the first range. If the
- second range is a subset of the first, we can't describe this as
- a single range unless both ranges end at the same place. If both
- ranges start in the same place, then the result is false.
- Otherwise, we go from the start of the first range to just before
- the start of the second. */
+ /* If they don't overlap, the result is the first range. If they are
+ equal, the result is false. If the second range is a subset of the
+ first, and the ranges begin at the same place, we go from just after
+ the end of the first range to the end of the second. If the second
+ range is not a subset of the first, or if it is a subset and both
+ ranges end at the same place, the range starts at the start of the
+ first range and ends just before the second range.
+ Otherwise, we can't describe this as a single range. */
if (no_overlap)
in_p = 1, low = low0, high = high0;
- else if (subset
- && integer_zerop (range_binop (EQ_EXPR, integer_type_node,
- high0, 1, high1, 0)))
- return 0;
- else if (integer_onep (range_binop (EQ_EXPR, integer_type_node,
- low0, 0, low1, 0)))
+ else if (lowequal && highequal)
in_p = 0, low = high = 0;
- else
+ else if (subset && lowequal)
+ {
+ in_p = 1, high = high0;
+ low = range_binop (PLUS_EXPR, NULL_TREE, high1, 0,
+ integer_one_node, 0);
+ }
+ else if (! subset || highequal)
{
in_p = 1, low = low0;
high = range_binop (MINUS_EXPR, NULL_TREE, low1, 0,
integer_one_node, 0);
}
+ else
+ return 0;
}
else if (! in0_p && in1_p)
@@ -4928,7 +5028,7 @@ fold (expr)
if CONST+INCR overflows or if foo+incr might overflow.
This optimization is invalid for floating point due to rounding.
For pointer types we assume overflow doesn't happen. */
- if (TREE_CODE (TREE_TYPE (varop)) == POINTER_TYPE
+ if (POINTER_TYPE_P (TREE_TYPE (varop))
|| (! FLOAT_TYPE_P (TREE_TYPE (varop))
&& (code == EQ_EXPR || code == NE_EXPR)))
{
@@ -4963,7 +5063,7 @@ fold (expr)
}
else if (constop && TREE_CODE (varop) == POSTDECREMENT_EXPR)
{
- if (TREE_CODE (TREE_TYPE (varop)) == POINTER_TYPE
+ if (POINTER_TYPE_P (TREE_TYPE (varop))
|| (! FLOAT_TYPE_P (TREE_TYPE (varop))
&& (code == EQ_EXPR || code == NE_EXPR)))
{
@@ -5014,13 +5114,16 @@ fold (expr)
arg1 = const_binop (MINUS_EXPR, arg1, integer_one_node, 0);
t = build (code, type, TREE_OPERAND (t, 0), arg1);
break;
+
+ default:
+ break;
}
}
/* If this is an EQ or NE comparison with zero and ARG0 is
(1 << foo) & bar, convert it to (bar >> foo) & 1. Both require
two operations, but the latter can be done in one less insn
- one machine that have only two-operand insns or on which a
+ on machines that have only two-operand insns or on which a
constant cannot be the first operand. */
if (integer_zerop (arg1) && (code == EQ_EXPR || code == NE_EXPR)
&& TREE_CODE (arg0) == BIT_AND_EXPR)
@@ -5146,13 +5249,15 @@ fold (expr)
t = build_int_2 (0, 0);
TREE_TYPE (t) = type;
return t;
+ default:
+ abort ();
}
}
/* An unsigned comparison against 0 can be simplified. */
if (integer_zerop (arg1)
&& (INTEGRAL_TYPE_P (TREE_TYPE (arg1))
- || TREE_CODE (TREE_TYPE (arg1)) == POINTER_TYPE)
+ || POINTER_TYPE_P (TREE_TYPE (arg1)))
&& TREE_UNSIGNED (TREE_TYPE (arg1)))
{
switch (TREE_CODE (t))
@@ -5173,9 +5278,41 @@ fold (expr)
return omit_one_operand (type,
convert (type, integer_zero_node),
arg0);
+ default:
+ break;
}
}
+ /* An unsigned <= 0x7fffffff can be simplified. */
+ {
+ int width = TYPE_PRECISION (TREE_TYPE (arg1));
+ if (TREE_CODE (arg1) == INTEGER_CST
+ && ! TREE_CONSTANT_OVERFLOW (arg1)
+ && width <= HOST_BITS_PER_WIDE_INT
+ && TREE_INT_CST_LOW (arg1) == ((HOST_WIDE_INT) 1 << (width - 1)) - 1
+ && TREE_INT_CST_HIGH (arg1) == 0
+ && (INTEGRAL_TYPE_P (TREE_TYPE (arg1))
+ || POINTER_TYPE_P (TREE_TYPE (arg1)))
+ && TREE_UNSIGNED (TREE_TYPE (arg1)))
+ {
+ switch (TREE_CODE (t))
+ {
+ case LE_EXPR:
+ return fold (build (GE_EXPR, type,
+ convert (signed_type (TREE_TYPE (arg0)),
+ arg0),
+ convert (signed_type (TREE_TYPE (arg1)),
+ integer_zero_node)));
+ case GT_EXPR:
+ return fold (build (LT_EXPR, type,
+ convert (signed_type (TREE_TYPE (arg0)),
+ arg0),
+ convert (signed_type (TREE_TYPE (arg1)),
+ integer_zero_node)));
+ }
+ }
+ }
+
/* If we are comparing an expression that just has comparisons
of two integer values, arithmetic expressions of those comparisons,
and constants, we can simplify it. There are only three cases
@@ -5477,6 +5614,8 @@ fold (expr)
fold (build1 (ABS_EXPR,
TREE_TYPE (arg1),
arg1))))));
+ default:
+ abort ();
}
/* If this is A != 0 ? A : 0, this is simply A. For ==, it is
@@ -5508,21 +5647,28 @@ fold (expr)
return pedantic_non_lvalue (convert (type, arg1));
case LE_EXPR:
case LT_EXPR:
- /* In C++ a ?: expression can be an lvalue, so we can't
- do this; we would lose the distinction between
- LT and LE. */
- if (pedantic_lvalues)
- return pedantic_non_lvalue
- (convert (type, (fold (build (MIN_EXPR, comp_type,
- comp_op0, comp_op1)))));
+ /* In C++ a ?: expression can be an lvalue, so put the
+ operand which will be used if they are equal first
+ so that we can convert this back to the
+ corresponding COND_EXPR. */
+ return pedantic_non_lvalue
+ (convert (type, (fold (build (MIN_EXPR, comp_type,
+ (comp_code == LE_EXPR
+ ? comp_op0 : comp_op1),
+ (comp_code == LE_EXPR
+ ? comp_op1 : comp_op0))))));
break;
case GE_EXPR:
case GT_EXPR:
- if (pedantic_lvalues)
- return pedantic_non_lvalue
- (convert (type, fold (build (MAX_EXPR, comp_type,
- comp_op0, comp_op1))));
+ return pedantic_non_lvalue
+ (convert (type, fold (build (MAX_EXPR, comp_type,
+ (comp_code == GE_EXPR
+ ? comp_op0 : comp_op1),
+ (comp_code == GE_EXPR
+ ? comp_op1 : comp_op0)))));
break;
+ default:
+ abort ();
}
}
@@ -5583,6 +5729,10 @@ fold (expr)
return pedantic_non_lvalue
(fold (build (MAX_EXPR, type, arg1, arg2)));
break;
+ case NE_EXPR:
+ break;
+ default:
+ abort ();
}
}
diff --git a/gcc/frame.c b/gcc/frame.c
new file mode 100644
index 00000000000..2ab4aac93b4
--- /dev/null
+++ b/gcc/frame.c
@@ -0,0 +1,605 @@
+/* Subroutines needed for unwinding stack frames for exception handling. */
+/* Compile this one with gcc. */
+/* Copyright (C) 1997 Free Software Foundation, Inc.
+ Contributed by Jason Merrill <jason@cygnus.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. */
+
+/* As a special exception, if you link this library with other files,
+ some of which are compiled with GCC, to produce an executable,
+ this library does not by itself cause the resulting executable
+ to be covered by the GNU General Public License.
+ This exception does not however invalidate any other reasons why
+ the executable file might be covered by the GNU General Public License. */
+
+/* It is incorrect to include config.h here, because this file is being
+ compiled for the target, and hence definitions concerning only the host
+ do not apply. */
+
+#include "tconfig.h"
+#include "defaults.h"
+
+#ifdef DWARF2_UNWIND_INFO
+#include "gansidecl.h"
+#include "dwarf2.h"
+#include <stddef.h>
+#include "frame.h"
+
+/* Don't use `fancy_abort' here even if config.h says to use it. */
+#ifdef abort
+#undef abort
+#endif
+
+/* Some types used by the DWARF 2 spec. */
+
+typedef int sword __attribute__ ((mode (SI)));
+typedef unsigned int uword __attribute__ ((mode (SI)));
+typedef unsigned int uaddr __attribute__ ((mode (pointer)));
+typedef int saddr __attribute__ ((mode (pointer)));
+typedef unsigned char ubyte;
+
+/* The first few fields of a CIE. The CIE_id field is 0xffffffff for a CIE,
+ to distinguish it from a valid FDE. FDEs are aligned to an addressing
+ unit boundary, but the fields within are unaligned. */
+
+struct dwarf_cie {
+ uword length;
+ sword CIE_id;
+ ubyte version;
+ char augmentation[0];
+} __attribute__ ((packed, aligned (__alignof__ (void *))));
+
+/* The first few fields of an FDE. */
+
+struct dwarf_fde {
+ uword length;
+ sword CIE_delta;
+ void* pc_begin;
+ uaddr pc_range;
+} __attribute__ ((packed, aligned (__alignof__ (void *))));
+
+typedef struct dwarf_fde fde;
+
+/* Objects to be searched for frame unwind info. */
+
+static struct object *objects;
+
+/* The information we care about from a CIE. */
+
+struct cie_info {
+ char *augmentation;
+ void *eh_ptr;
+ int code_align;
+ int data_align;
+ unsigned ra_regno;
+};
+
+/* The current unwind state, plus a saved copy for DW_CFA_remember_state. */
+
+struct frame_state_internal
+{
+ struct frame_state s;
+ struct frame_state_internal *saved_state;
+};
+
+/* Decode the unsigned LEB128 constant at BUF into the variable pointed to
+ by R, and return the new value of BUF. */
+
+static void *
+decode_uleb128 (unsigned char *buf, unsigned *r)
+{
+ unsigned shift = 0;
+ unsigned result = 0;
+
+ while (1)
+ {
+ unsigned byte = *buf++;
+ result |= (byte & 0x7f) << shift;
+ if ((byte & 0x80) == 0)
+ break;
+ shift += 7;
+ }
+ *r = result;
+ return buf;
+}
+
+/* Decode the signed LEB128 constant at BUF into the variable pointed to
+ by R, and return the new value of BUF. */
+
+static void *
+decode_sleb128 (unsigned char *buf, int *r)
+{
+ unsigned shift = 0;
+ unsigned result = 0;
+ unsigned byte;
+
+ while (1)
+ {
+ byte = *buf++;
+ result |= (byte & 0x7f) << shift;
+ shift += 7;
+ if ((byte & 0x80) == 0)
+ break;
+ }
+ if (shift < (sizeof (*r) * 8) && (byte & 0x40) != 0)
+ result |= - (1 << shift);
+
+ *r = result;
+ return buf;
+}
+
+/* Read unaligned data from the instruction buffer. */
+
+union unaligned {
+ void *p;
+ unsigned b2 __attribute__ ((mode (HI)));
+ unsigned b4 __attribute__ ((mode (SI)));
+ unsigned b8 __attribute__ ((mode (DI)));
+} __attribute__ ((packed));
+static inline void *
+read_pointer (void *p)
+{ union unaligned *up = p; return up->p; }
+static inline unsigned
+read_1byte (void *p)
+{ return *(unsigned char *)p; }
+static inline unsigned
+read_2byte (void *p)
+{ union unaligned *up = p; return up->b2; }
+static inline unsigned
+read_4byte (void *p)
+{ union unaligned *up = p; return up->b4; }
+static inline unsigned long
+read_8byte (void *p)
+{ union unaligned *up = p; return up->b8; }
+
+/* Ordering function for FDEs. Functions can't overlap, so we just compare
+ their starting addresses. */
+
+static inline saddr
+fde_compare (fde *x, fde *y)
+{
+ return (saddr)x->pc_begin - (saddr)y->pc_begin;
+}
+
+/* Return the address of the FDE after P. */
+
+static inline fde *
+next_fde (fde *p)
+{
+ return (fde *)(((char *)p) + p->length + sizeof (p->length));
+}
+
+/* One iteration of an insertion sort, for adding new FDEs to the array.
+ Usually the new FDE will go in at the end, so we can expect close to
+ O(n) performance. If this turns out to be overly optimistic, we can have
+ the linker sort the FDEs so we don't have to do it at run time. */
+
+static void
+fde_insert (fde **array, size_t i, fde *this_fde)
+{
+ array[i] = this_fde;
+
+ for (; i > 0 && fde_compare (array[i], array[i-1]) < 0; --i)
+ {
+ this_fde = array[i];
+ array[i] = array[i-1];
+ array[i-1] = this_fde;
+ }
+}
+
+static size_t
+count_fdes (fde *this_fde)
+{
+ size_t count;
+
+ for (count = 0; this_fde->length != 0; this_fde = next_fde (this_fde))
+ {
+ /* Skip CIEs and linked once FDE entries. */
+ if (this_fde->CIE_delta == 0 || this_fde->pc_begin == 0)
+ continue;
+
+ ++count;
+ }
+
+ return count;
+}
+
+static void
+add_fdes (fde *this_fde, fde **array, size_t *i_ptr,
+ void **beg_ptr, void **end_ptr)
+{
+ size_t i = *i_ptr;
+ void *pc_begin = *beg_ptr;
+ void *pc_end = *end_ptr;
+
+ for (; this_fde->length != 0; this_fde = next_fde (this_fde))
+ {
+ /* Skip CIEs and linked once FDE entries. */
+ if (this_fde->CIE_delta == 0 || this_fde->pc_begin == 0)
+ continue;
+
+ fde_insert (array, i++, this_fde);
+
+ if (this_fde->pc_begin < pc_begin)
+ pc_begin = this_fde->pc_begin;
+ if (this_fde->pc_begin + this_fde->pc_range > pc_end)
+ pc_end = this_fde->pc_begin + this_fde->pc_range;
+ }
+
+ *i_ptr = i;
+ *beg_ptr = pc_begin;
+ *end_ptr = pc_end;
+}
+
+/* Set up a sorted array of pointers to FDEs for a loaded object. We
+ count up the entries before allocating the array because it's likely to
+ be faster. */
+
+static void
+frame_init (struct object* ob)
+{
+ fde *this_fde;
+ size_t count;
+ fde **array;
+ void *pc_begin, *pc_end;
+
+ if (ob->fde_array)
+ {
+ fde **p = ob->fde_array;
+ for (count = 0; *p; ++p)
+ count += count_fdes (*p);
+ }
+ else
+ count = count_fdes (ob->fde_begin);
+
+ ob->count = count;
+ array = (fde **) malloc (sizeof (fde *) * count);
+
+ pc_begin = (void*)(uaddr)-1;
+ pc_end = 0;
+ count = 0;
+
+ if (ob->fde_array)
+ {
+ fde **p = ob->fde_array;
+ for (; *p; ++p)
+ add_fdes (*p, array, &count, &pc_begin, &pc_end);
+ }
+ else
+ add_fdes (ob->fde_begin, array, &count, &pc_begin, &pc_end);
+
+ ob->fde_array = array;
+ ob->pc_begin = pc_begin;
+ ob->pc_end = pc_end;
+}
+
+/* Return a pointer to the FDE for the function containing PC. */
+
+static fde *
+find_fde (void *pc)
+{
+ struct object *ob;
+ size_t lo, hi;
+
+ for (ob = objects; ob; ob = ob->next)
+ {
+ if (ob->pc_begin == 0)
+ frame_init (ob);
+ if (pc >= ob->pc_begin && pc < ob->pc_end)
+ break;
+ }
+
+ if (ob == 0)
+ return 0;
+
+ /* Standard binary search algorithm. */
+ for (lo = 0, hi = ob->count; lo < hi; )
+ {
+ size_t i = (lo + hi) / 2;
+ fde *f = ob->fde_array[i];
+
+ if (pc < f->pc_begin)
+ hi = i;
+ else if (pc > f->pc_begin + f->pc_range)
+ lo = i + 1;
+ else
+ return f;
+ }
+
+ return 0;
+}
+
+static inline struct dwarf_cie *
+get_cie (fde *f)
+{
+ return ((void *)&f->CIE_delta) - f->CIE_delta;
+}
+
+/* Extract any interesting information from the CIE for the translation
+ unit F belongs to. */
+
+static void *
+extract_cie_info (fde *f, struct cie_info *c)
+{
+ void *p;
+ int i;
+
+ c->augmentation = get_cie (f)->augmentation;
+
+ if (strcmp (c->augmentation, "") != 0
+ && strcmp (c->augmentation, "eh") != 0
+ && c->augmentation[0] != 'z')
+ return 0;
+
+ p = c->augmentation + strlen (c->augmentation) + 1;
+
+ if (strcmp (c->augmentation, "eh") == 0)
+ {
+ c->eh_ptr = read_pointer (p);
+ p += sizeof (void *);
+ }
+ else
+ c->eh_ptr = 0;
+
+ p = decode_uleb128 (p, &c->code_align);
+ p = decode_sleb128 (p, &c->data_align);
+ c->ra_regno = *(unsigned char *)p++;
+
+ /* If the augmentation starts with 'z', we now see the length of the
+ augmentation fields. */
+ if (c->augmentation[0] == 'z')
+ {
+ p = decode_uleb128 (p, &i);
+ p += i;
+ }
+
+ return p;
+}
+
+/* Decode one instruction's worth of of DWARF 2 call frame information.
+ Used by __frame_state_for. Takes pointers P to the instruction to
+ decode, STATE to the current register unwind information, INFO to the
+ current CIE information, and PC to the current PC value. Returns a
+ pointer to the next instruction. */
+
+static void *
+execute_cfa_insn (void *p, struct frame_state_internal *state,
+ struct cie_info *info, void **pc)
+{
+ unsigned insn = *(unsigned char *)p++;
+ unsigned reg;
+ int offset;
+
+ if (insn & DW_CFA_advance_loc)
+ *pc += ((insn & 0x3f) * info->code_align);
+ else if (insn & DW_CFA_offset)
+ {
+ reg = (insn & 0x3f);
+ p = decode_uleb128 (p, &offset);
+ offset *= info->data_align;
+ state->s.saved[reg] = REG_SAVED_OFFSET;
+ state->s.reg_or_offset[reg] = offset;
+ }
+ else if (insn & DW_CFA_restore)
+ {
+ reg = (insn & 0x3f);
+ state->s.saved[reg] = REG_UNSAVED;
+ }
+ else switch (insn)
+ {
+ case DW_CFA_set_loc:
+ *pc = read_pointer (p);
+ p += sizeof (void *);
+ break;
+ case DW_CFA_advance_loc1:
+ *pc += read_1byte (p);
+ p += 1;
+ break;
+ case DW_CFA_advance_loc2:
+ *pc += read_2byte (p);
+ p += 2;
+ break;
+ case DW_CFA_advance_loc4:
+ *pc += read_4byte (p);
+ p += 4;
+ break;
+
+ case DW_CFA_offset_extended:
+ p = decode_uleb128 (p, &reg);
+ p = decode_uleb128 (p, &offset);
+ offset *= info->data_align;
+ state->s.saved[reg] = REG_SAVED_OFFSET;
+ state->s.reg_or_offset[reg] = offset;
+ break;
+ case DW_CFA_restore_extended:
+ p = decode_uleb128 (p, &reg);
+ state->s.saved[reg] = REG_UNSAVED;
+ break;
+
+ case DW_CFA_undefined:
+ case DW_CFA_same_value:
+ case DW_CFA_nop:
+ break;
+
+ case DW_CFA_register:
+ {
+ unsigned reg2;
+ p = decode_uleb128 (p, &reg);
+ p = decode_uleb128 (p, &reg2);
+ state->s.saved[reg] = REG_SAVED_REG;
+ state->s.reg_or_offset[reg] = reg2;
+ }
+ break;
+
+ case DW_CFA_def_cfa:
+ p = decode_uleb128 (p, &reg);
+ p = decode_uleb128 (p, &offset);
+ state->s.cfa_reg = reg;
+ state->s.cfa_offset = offset;
+ break;
+ case DW_CFA_def_cfa_register:
+ p = decode_uleb128 (p, &reg);
+ state->s.cfa_reg = reg;
+ break;
+ case DW_CFA_def_cfa_offset:
+ p = decode_uleb128 (p, &offset);
+ state->s.cfa_offset = offset;
+ break;
+
+ case DW_CFA_remember_state:
+ {
+ struct frame_state_internal *save =
+ (struct frame_state_internal *)
+ malloc (sizeof (struct frame_state_internal));
+ memcpy (save, state, sizeof (struct frame_state_internal));
+ state->saved_state = save;
+ }
+ break;
+ case DW_CFA_restore_state:
+ {
+ struct frame_state_internal *save = state->saved_state;
+ memcpy (state, save, sizeof (struct frame_state_internal));
+ free (save);
+ }
+ break;
+
+ /* FIXME: Hardcoded for SPARC register window configuration. */
+ case DW_CFA_GNU_window_save:
+ for (reg = 16; reg < 32; ++reg)
+ {
+ state->s.saved[reg] = REG_SAVED_OFFSET;
+ state->s.reg_or_offset[reg] = (reg - 16) * sizeof (void *);
+ }
+ break;
+
+ case DW_CFA_GNU_args_size:
+ p = decode_uleb128 (p, &offset);
+ state->s.args_size = offset;
+ break;
+
+ default:
+ abort ();
+ }
+ return p;
+}
+
+/* Called from crtbegin.o to register the unwind info for an object. */
+
+void
+__register_frame_info (void *begin, struct object *ob)
+{
+ ob->fde_begin = begin;
+
+ ob->pc_begin = ob->pc_end = 0;
+ ob->fde_array = 0;
+ ob->count = 0;
+
+ ob->next = objects;
+ objects = ob;
+}
+
+/* Similar, but BEGIN is actually a pointer to a table of unwind entries
+ for different translation units. Called from the file generated by
+ collect2. */
+
+void
+__register_frame_info_table (void *begin, struct object *ob)
+{
+ ob->fde_begin = begin;
+ ob->fde_array = begin;
+
+ ob->pc_begin = ob->pc_end = 0;
+ ob->count = 0;
+
+ ob->next = objects;
+ objects = ob;
+}
+
+/* Called from crtend.o to deregister the unwind info for an object. */
+
+void
+__deregister_frame_info (void *begin)
+{
+ struct object **p = &objects;
+
+ while (*p)
+ {
+ if ((*p)->fde_begin == begin)
+ {
+ struct object *ob = *p;
+ *p = (*p)->next;
+
+ /* If we've run init_frame for this object, free the FDE array. */
+ if (ob->pc_begin)
+ free (ob->fde_array);
+
+ return;
+ }
+ p = &((*p)->next);
+ }
+ abort ();
+}
+
+/* Called from __throw to find the registers to restore for a given
+ PC_TARGET. The caller should allocate a local variable of `struct
+ frame_state' (declared in frame.h) and pass its address to STATE_IN. */
+
+struct frame_state *
+__frame_state_for (void *pc_target, struct frame_state *state_in)
+{
+ fde *f;
+ void *insn, *end, *pc;
+ struct cie_info info;
+ struct frame_state_internal state;
+
+ f = find_fde (pc_target);
+ if (f == 0)
+ return 0;
+
+ insn = extract_cie_info (f, &info);
+ if (insn == 0)
+ return 0;
+
+ memset (&state, 0, sizeof (state));
+ state.s.retaddr_column = info.ra_regno;
+ state.s.eh_ptr = info.eh_ptr;
+
+ /* First decode all the insns in the CIE. */
+ end = next_fde ((fde*) get_cie (f));
+ while (insn < end)
+ insn = execute_cfa_insn (insn, &state, &info, 0);
+
+ insn = ((fde *)f) + 1;
+
+ if (info.augmentation[0] == 'z')
+ {
+ int i;
+ insn = decode_uleb128 (insn, &i);
+ insn += i;
+ }
+
+ /* Then the insns in the FDE up to our target PC. */
+ end = next_fde (f);
+ pc = f->pc_begin;
+ while (insn < end && pc <= pc_target)
+ insn = execute_cfa_insn (insn, &state, &info, &pc);
+
+ memcpy (state_in, &state.s, sizeof (state.s));
+ return state_in;
+}
+#endif /* DWARF2_UNWIND_INFO */
diff --git a/gcc/frame.h b/gcc/frame.h
new file mode 100644
index 00000000000..7fa40d7af48
--- /dev/null
+++ b/gcc/frame.h
@@ -0,0 +1,56 @@
+/* Copyright (C) 1997 Free Software Foundation, Inc.
+ This file is part of GNU CC. */
+
+typedef struct frame_state
+{
+ void *cfa;
+ void *eh_ptr;
+ long cfa_offset;
+ long args_size;
+ long reg_or_offset[FIRST_PSEUDO_REGISTER+1];
+ unsigned short cfa_reg;
+ unsigned short retaddr_column;
+ char saved[FIRST_PSEUDO_REGISTER+1];
+} frame_state;
+
+/* Values for 'saved' above. */
+#define REG_UNSAVED 0
+#define REG_SAVED_OFFSET 1
+#define REG_SAVED_REG 2
+
+/* The representation for an "object" to be searched for frame unwind info.
+ For targets with named sections, one object is an executable or shared
+ library; for other targets, one object is one translation unit.
+
+ A copy of this structure declaration is printed by collect2.c;
+ keep the copies synchronized! */
+
+struct object {
+ void *pc_begin;
+ void *pc_end;
+ struct dwarf_fde *fde_begin;
+ struct dwarf_fde **fde_array;
+ size_t count;
+ struct object *next;
+};
+
+/* Called either from crtbegin.o or a static constructor to register the
+ unwind info for an object or translation unit, respectively. */
+
+extern void __register_frame_info (void *, struct object *);
+
+/* Similar, but BEGIN is actually a pointer to a table of unwind entries
+ for different translation units. Called from the file generated by
+ collect2. */
+extern void __register_frame_info_table (void *, struct object *);
+
+/* Called from crtend.o to deregister the unwind info for an object. */
+
+extern void __deregister_frame_info (void *);
+
+/* Called from __throw to find the registers to restore for a given
+ PC_TARGET. The caller should allocate a local variable of `struct
+ frame_state' (declared in frame.h) and pass its address to STATE_IN.
+ Returns NULL on failure, otherwise returns STATE_IN. */
+
+extern struct frame_state *__frame_state_for (void *, struct frame_state *);
diff --git a/gcc/function.c b/gcc/function.c
index db7d3ea5669..17b70e554d4 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -1,5 +1,5 @@
/* Expands front end tree to back end RTL for GNU C-Compiler
- Copyright (C) 1987, 88, 89, 91-96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 89, 91-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -191,10 +191,10 @@ CUMULATIVE_ARGS current_function_args_info;
char *current_function_name;
-/* If non-zero, an RTL expression for that location at which the current
- function returns its result. Always equal to
- DECL_RTL (DECL_RESULT (current_function_decl)), but provided
- independently of the tree structures. */
+/* If non-zero, an RTL expression for the location at which the current
+ function returns its result. If the current function returns its
+ result in a register, current_function_return_rtx will always be
+ the hard register containing the result. */
rtx current_function_return_rtx;
@@ -300,14 +300,15 @@ static int invalid_stack_slot;
/* Last insn of those whose job was to put parms into their nominal homes. */
static rtx last_parm_insn;
-/* 1 + last pseudo register number used for loading a copy
- of a parameter of this function. */
-static int max_parm_reg;
+/* 1 + last pseudo register number possibly used for loading a copy
+ of a parameter of this function. */
+int max_parm_reg;
/* Vector indexed by REGNO, containing location on stack in which
to put the parm which is nominally in pseudo register REGNO,
- if we discover that that parm must go in the stack. */
-static rtx *parm_reg_stack_loc;
+ if we discover that that parm must go in the stack. The highest
+ element in this vector is one less than MAX_PARM_REG, above. */
+rtx *parm_reg_stack_loc;
/* Nonzero once virtual register instantiation has been done.
assign_stack_local uses frame_pointer_rtx when this is nonzero. */
@@ -354,7 +355,7 @@ struct temp_slot
slot above. May be an EXPR_LIST if multiple addresses exist. */
rtx address;
/* The size, in units, of the slot. */
- int size;
+ HOST_WIDE_INT size;
/* The value of `sequence_rtl_expr' when this temporary is allocated. */
tree rtl_expr;
/* Non-zero if this temporary is currently in use. */
@@ -367,10 +368,10 @@ struct temp_slot
int keep;
/* The offset of the slot from the frame_pointer, including extra space
for alignment. This info is for combine_temp_slots. */
- int base_offset;
+ HOST_WIDE_INT base_offset;
/* The size of the slot, including extra space for alignment. This
info is for combine_temp_slots. */
- int full_size;
+ HOST_WIDE_INT full_size;
};
/* List of all temporaries allocated, both available and in use. */
@@ -380,6 +381,10 @@ struct temp_slot *temp_slots;
/* Current nesting level for temporaries. */
int temp_slot_level;
+
+/* Current nesting level for variables in a block. */
+
+int var_temp_slot_level;
/* The FUNCTION_DECL node for the current function. */
static tree this_function_decl;
@@ -423,7 +428,7 @@ struct fixup_replacement
static struct temp_slot *find_temp_slot_from_address PROTO((rtx));
static void put_reg_into_stack PROTO((struct function *, rtx, tree,
enum machine_mode, enum machine_mode,
- int));
+ int, int, int));
static void fixup_var_refs PROTO((rtx, enum machine_mode, int));
static struct fixup_replacement
*find_fixup_replacement PROTO((struct fixup_replacement **, rtx));
@@ -449,6 +454,8 @@ static tree blocks_nreverse PROTO((tree));
static int all_blocks PROTO((tree, tree *));
static int *record_insns PROTO((rtx));
static int contains PROTO((rtx, int *));
+static void put_addressof_into_stack PROTO((rtx));
+static void purge_addressof_1 PROTO((rtx *, rtx, int));
/* Pointer to chain of `struct function' for containing functions. */
struct function *outer_function_chain;
@@ -461,9 +468,11 @@ find_function_data (decl)
tree decl;
{
struct function *p;
+
for (p = outer_function_chain; p; p = p->next)
if (p->decl == decl)
return p;
+
abort ();
}
@@ -526,6 +535,8 @@ push_function_context_to (context)
p->function_call_count = function_call_count;
p->temp_slots = temp_slots;
p->temp_slot_level = temp_slot_level;
+ p->target_temp_slot_level = target_temp_slot_level;
+ p->var_temp_slot_level = var_temp_slot_level;
p->fixup_var_refs_queue = 0;
p->epilogue_delay_list = current_function_epilogue_delay_list;
p->args_info = current_function_args_info;
@@ -533,13 +544,13 @@ push_function_context_to (context)
save_tree_status (p, context);
save_storage_status (p);
save_emit_status (p);
- init_emit ();
save_expr_status (p);
save_stmt_status (p);
- save_varasm_status (p);
-
+ save_varasm_status (p, context);
if (save_machine_status)
(*save_machine_status) (p);
+
+ init_emit ();
}
void
@@ -556,6 +567,7 @@ pop_function_context_from (context)
tree context;
{
struct function *p = outer_function_chain;
+ struct var_refs_queue *queue;
outer_function_chain = p->next;
@@ -606,11 +618,13 @@ pop_function_context_from (context)
function_call_count = p->function_call_count;
temp_slots = p->temp_slots;
temp_slot_level = p->temp_slot_level;
+ target_temp_slot_level = p->target_temp_slot_level;
+ var_temp_slot_level = p->var_temp_slot_level;
current_function_epilogue_delay_list = p->epilogue_delay_list;
reg_renumber = 0;
current_function_args_info = p->args_info;
- restore_tree_status (p);
+ restore_tree_status (p, context);
restore_storage_status (p);
restore_expr_status (p);
restore_emit_status (p);
@@ -622,11 +636,8 @@ pop_function_context_from (context)
/* Finish doing put_var_into_stack for any of our variables
which became addressable during the nested function. */
- {
- struct var_refs_queue *queue = p->fixup_var_refs_queue;
- for (; queue; queue = queue->next)
- fixup_var_refs (queue->modified, queue->promoted_mode, queue->unsignedp);
- }
+ for (queue = p->fixup_var_refs_queue; queue; queue = queue->next)
+ fixup_var_refs (queue->modified, queue->promoted_mode, queue->unsignedp);
free (p);
@@ -669,7 +680,7 @@ get_frame_size ()
rtx
assign_stack_local (mode, size, align)
enum machine_mode mode;
- int size;
+ HOST_WIDE_INT size;
int align;
{
register rtx x, addr;
@@ -738,7 +749,7 @@ assign_stack_local (mode, size, align)
rtx
assign_outer_stack_local (mode, size, align, function)
enum machine_mode mode;
- int size;
+ HOST_WIDE_INT size;
int align;
struct function *function;
{
@@ -806,13 +817,15 @@ assign_outer_stack_local (mode, size, align, function)
KEEP is 1 if this slot is to be retained after a call to
free_temp_slots. Automatic variables for a block are allocated
- with this flag. KEEP is 2, if we allocate a longer term temporary,
- whose lifetime is controlled by CLEANUP_POINT_EXPRs. */
+ with this flag. KEEP is 2 if we allocate a longer term temporary,
+ whose lifetime is controlled by CLEANUP_POINT_EXPRs. KEEP is 3
+ if we are to allocate something at an inner level to be treated as
+ a variable in the block (e.g., a SAVE_EXPR). */
rtx
assign_stack_temp (mode, size, keep)
enum machine_mode mode;
- int size;
+ HOST_WIDE_INT size;
int keep;
{
struct temp_slot *p, *best_p = 0;
@@ -845,7 +858,7 @@ assign_stack_temp (mode, size, keep)
if (GET_MODE (best_p->slot) == BLKmode)
{
int alignment = BIGGEST_ALIGNMENT / BITS_PER_UNIT;
- int rounded_size = CEIL_ROUND (size, alignment);
+ HOST_WIDE_INT rounded_size = CEIL_ROUND (size, alignment);
if (best_p->size - rounded_size >= alignment)
{
@@ -876,11 +889,14 @@ assign_stack_temp (mode, size, keep)
/* If we still didn't find one, make a new temporary. */
if (p == 0)
{
- int frame_offset_old = frame_offset;
+ HOST_WIDE_INT frame_offset_old = frame_offset;
+
p = (struct temp_slot *) oballoc (sizeof (struct temp_slot));
+
/* If the temp slot mode doesn't indicate the alignment,
use the largest possible, so no one will be disappointed. */
p->slot = assign_stack_local (mode, size, mode == BLKmode ? -1 : 0);
+
/* The following slot size computation is necessary because we don't
know the actual size of the temporary slot until assign_stack_local
has performed all the frame alignment and size rounding for the
@@ -893,6 +909,7 @@ assign_stack_temp (mode, size, keep)
#else
p->size = size;
#endif
+
/* Now define the fields used by combine_temp_slots. */
#ifdef FRAME_GROWS_DOWNWARD
p->base_offset = frame_offset;
@@ -915,6 +932,11 @@ assign_stack_temp (mode, size, keep)
p->level = target_temp_slot_level;
p->keep = 0;
}
+ else if (keep == 3)
+ {
+ p->level = var_temp_slot_level;
+ p->keep = 0;
+ }
else
{
p->level = temp_slot_level;
@@ -947,7 +969,7 @@ assign_temp (type, keep, memory_required, dont_promote)
if (mode == BLKmode || memory_required)
{
- int size = int_size_in_bytes (type);
+ HOST_WIDE_INT size = int_size_in_bytes (type);
rtx tmp;
/* Unfortunately, we don't yet know how to allocate variable-sized
@@ -983,12 +1005,19 @@ combine_temp_slots ()
{
struct temp_slot *p, *q;
struct temp_slot *prev_p, *prev_q;
- /* Determine where to free back to after this function. */
- rtx free_pointer = rtx_alloc (CONST_INT);
+ int num_slots;
+
+ /* If there are a lot of temp slots, don't do anything unless
+ high levels of optimizaton. */
+ if (! flag_expensive_optimizations)
+ for (p = temp_slots, num_slots = 0; p; p = p->next, num_slots++)
+ if (num_slots > 100 || (num_slots > 10 && optimize == 0))
+ return;
for (p = temp_slots, prev_p = 0; p; p = prev_p ? prev_p->next : temp_slots)
{
int delete_p = 0;
+
if (! p->in_use && GET_MODE (p->slot) == BLKmode)
for (q = p->next, prev_q = p; q; q = prev_q->next)
{
@@ -1028,9 +1057,6 @@ combine_temp_slots ()
else
prev_p = p;
}
-
- /* Free all the RTL made by plus_constant. */
- rtx_free (free_pointer);
}
/* Find the temp slot corresponding to the object at address X. */
@@ -1046,6 +1072,7 @@ find_temp_slot_from_address (x)
{
if (! p->in_use)
continue;
+
else if (XEXP (p->slot, 0) == x
|| p->address == x
|| (GET_CODE (x) == PLUS
@@ -1065,7 +1092,7 @@ find_temp_slot_from_address (x)
}
/* Indicate that NEW is an alternate way of referring to the temp slot
- that previous was known by OLD. */
+ that previously was known by OLD. */
void
update_temp_slot_address (old, new)
@@ -1245,7 +1272,7 @@ free_temps_for_rtl_expr (t)
combine_temp_slots ();
}
-/* Mark all temporaries ever allocated in this functon as not suitable
+/* Mark all temporaries ever allocated in this function as not suitable
for reuse until the current level is exited. */
void
@@ -1268,6 +1295,17 @@ push_temp_slots ()
temp_slot_level++;
}
+/* Likewise, but save the new level as the place to allocate variables
+ for blocks. */
+
+void
+push_temp_slots_for_block ()
+{
+ push_temp_slots ();
+
+ var_temp_slot_level = temp_slot_level;
+}
+
/* Pop a temporary nesting level. All slots in use in the current level
are freed. */
@@ -1293,6 +1331,7 @@ init_temp_slots ()
/* We have not allocated any temporaries yet. */
temp_slots = 0;
temp_slot_level = 0;
+ var_temp_slot_level = 0;
target_temp_slot_level = 0;
}
@@ -1307,6 +1346,7 @@ put_var_into_stack (decl)
enum machine_mode promoted_mode, decl_mode;
struct function *function = 0;
tree context;
+ int can_use_addressof;
if (output_bytecode)
return;
@@ -1346,11 +1386,38 @@ put_var_into_stack (decl)
decl_mode = promoted_mode = GET_MODE (reg);
}
+ can_use_addressof
+ = (function == 0
+ && optimize > 0
+ /* FIXME make it work for promoted modes too */
+ && decl_mode == promoted_mode
+#ifdef NON_SAVING_SETJMP
+ && ! (NON_SAVING_SETJMP && current_function_calls_setjmp)
+#endif
+ );
+
+ /* If we can't use ADDRESSOF, make sure we see through one we already
+ generated. */
+ if (! can_use_addressof && GET_CODE (reg) == MEM
+ && GET_CODE (XEXP (reg, 0)) == ADDRESSOF)
+ reg = XEXP (XEXP (reg, 0), 0);
+
/* Now we should have a value that resides in one or more pseudo regs. */
if (GET_CODE (reg) == REG)
- put_reg_into_stack (function, reg, TREE_TYPE (decl),
- promoted_mode, decl_mode, TREE_SIDE_EFFECTS (decl));
+ {
+ /* If this variable lives in the current function and we don't need
+ to put things in the stack for the sake of setjmp, try to keep it
+ in a register until we know we actually need the address. */
+ if (can_use_addressof)
+ gen_mem_addressof (reg, decl);
+ else
+ put_reg_into_stack (function, reg, TREE_TYPE (decl),
+ promoted_mode, decl_mode,
+ TREE_SIDE_EFFECTS (decl), 0,
+ TREE_USED (decl)
+ || DECL_INITIAL (decl) != 0);
+ }
else if (GET_CODE (reg) == CONCAT)
{
/* A CONCAT contains two pseudos; put them both in the stack.
@@ -1360,14 +1427,18 @@ put_var_into_stack (decl)
#ifdef FRAME_GROWS_DOWNWARD
/* Since part 0 should have a lower address, do it second. */
put_reg_into_stack (function, XEXP (reg, 1), part_type, part_mode,
- part_mode, TREE_SIDE_EFFECTS (decl));
+ part_mode, TREE_SIDE_EFFECTS (decl), 0,
+ TREE_USED (decl) || DECL_INITIAL (decl) != 0);
put_reg_into_stack (function, XEXP (reg, 0), part_type, part_mode,
- part_mode, TREE_SIDE_EFFECTS (decl));
+ part_mode, TREE_SIDE_EFFECTS (decl), 0,
+ TREE_USED (decl) || DECL_INITIAL (decl) != 0);
#else
put_reg_into_stack (function, XEXP (reg, 0), part_type, part_mode,
- part_mode, TREE_SIDE_EFFECTS (decl));
+ part_mode, TREE_SIDE_EFFECTS (decl), 0,
+ TREE_USED (decl) || DECL_INITIAL (decl) != 0);
put_reg_into_stack (function, XEXP (reg, 1), part_type, part_mode,
- part_mode, TREE_SIDE_EFFECTS (decl));
+ part_mode, TREE_SIDE_EFFECTS (decl), 0,
+ TREE_USED (decl) || DECL_INITIAL (decl) != 0);
#endif
/* Change the CONCAT into a combined MEM for both parts. */
@@ -1381,36 +1452,54 @@ put_var_into_stack (decl)
if (GET_CODE (XEXP (reg, 0)) == PLUS)
XEXP (reg, 0) = copy_rtx (XEXP (reg, 0));
}
+ else
+ return;
+
+ if (flag_check_memory_usage)
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ XEXP (reg, 0), ptr_mode,
+ GEN_INT (GET_MODE_SIZE (GET_MODE (reg))),
+ TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_RW),
+ TYPE_MODE (integer_type_node));
}
/* Subroutine of put_var_into_stack. This puts a single pseudo reg REG
into the stack frame of FUNCTION (0 means the current function).
DECL_MODE is the machine mode of the user-level data type.
PROMOTED_MODE is the machine mode of the register.
- VOLATILE_P is nonzero if this is for a "volatile" decl. */
+ VOLATILE_P is nonzero if this is for a "volatile" decl.
+ USED_P is nonzero if this reg might have already been used in an insn. */
static void
-put_reg_into_stack (function, reg, type, promoted_mode, decl_mode, volatile_p)
+put_reg_into_stack (function, reg, type, promoted_mode, decl_mode, volatile_p,
+ original_regno, used_p)
struct function *function;
rtx reg;
tree type;
enum machine_mode promoted_mode, decl_mode;
int volatile_p;
+ int original_regno;
+ int used_p;
{
rtx new = 0;
+ int regno = original_regno;
+
+ if (regno == 0)
+ regno = REGNO (reg);
if (function)
{
- if (REGNO (reg) < function->max_parm_reg)
- new = function->parm_reg_stack_loc[REGNO (reg)];
+ if (regno < function->max_parm_reg)
+ new = function->parm_reg_stack_loc[regno];
if (new == 0)
new = assign_outer_stack_local (decl_mode, GET_MODE_SIZE (decl_mode),
0, function);
}
else
{
- if (REGNO (reg) < max_parm_reg)
- new = parm_reg_stack_loc[REGNO (reg)];
+ if (regno < max_parm_reg)
+ new = parm_reg_stack_loc[regno];
if (new == 0)
new = assign_stack_local (decl_mode, GET_MODE_SIZE (decl_mode), 0);
}
@@ -1427,7 +1516,8 @@ put_reg_into_stack (function, reg, type, promoted_mode, decl_mode, volatile_p)
/* Now make sure that all refs to the variable, previously made
when it was a register, are fixed up to be valid again. */
- if (function)
+
+ if (used_p && function != 0)
{
struct var_refs_queue *temp;
@@ -1446,7 +1536,7 @@ put_reg_into_stack (function, reg, type, promoted_mode, decl_mode, volatile_p)
function->fixup_var_refs_queue = temp;
pop_obstacks ();
}
- else
+ else if (used_p)
/* Variable is local; fix it up now. */
fixup_var_refs (reg, promoted_mode, TREE_UNSIGNED (type));
}
@@ -1582,22 +1672,21 @@ fixup_var_refs_insns (var, promoted_mode, unsignedp, insn, toplevel)
struct fixup_replacement *replacements = 0;
rtx next_insn = NEXT_INSN (insn);
-#ifdef SMALL_REGISTER_CLASSES
- /* If the insn that copies the results of a CALL_INSN
- into a pseudo now references VAR, we have to use an
- intermediate pseudo since we want the life of the
- return value register to be only a single insn.
+ if (SMALL_REGISTER_CLASSES)
+ {
+ /* If the insn that copies the results of a CALL_INSN
+ into a pseudo now references VAR, we have to use an
+ intermediate pseudo since we want the life of the
+ return value register to be only a single insn.
- If we don't use an intermediate pseudo, such things as
- address computations to make the address of VAR valid
- if it is not can be placed between the CALL_INSN and INSN.
+ If we don't use an intermediate pseudo, such things as
+ address computations to make the address of VAR valid
+ if it is not can be placed between the CALL_INSN and INSN.
- To make sure this doesn't happen, we record the destination
- of the CALL_INSN and see if the next insn uses both that
- and VAR. */
+ To make sure this doesn't happen, we record the destination
+ of the CALL_INSN and see if the next insn uses both that
+ and VAR. */
- if (SMALL_REGISTER_CLASSES)
- {
if (call_dest != 0 && GET_CODE (insn) == INSN
&& reg_mentioned_p (var, PATTERN (insn))
&& reg_mentioned_p (call_dest, PATTERN (insn)))
@@ -1620,7 +1709,6 @@ fixup_var_refs_insns (var, promoted_mode, unsignedp, insn, toplevel)
else
call_dest = 0;
}
-#endif
/* See if we have to do anything to INSN now that VAR is in
memory. If it needs to be loaded into a pseudo, use a single
@@ -1723,6 +1811,27 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
switch (code)
{
+ case ADDRESSOF:
+ if (XEXP (x, 0) == var)
+ {
+ /* Prevent sharing of rtl that might lose. */
+ rtx sub = copy_rtx (XEXP (var, 0));
+
+ start_sequence ();
+
+ if (! validate_change (insn, loc, sub, 0))
+ {
+ rtx y = force_operand (sub, NULL_RTX);
+
+ if (! validate_change (insn, loc, y, 0))
+ *loc = copy_to_reg (y);
+ }
+
+ emit_insn_before (gen_sequence (), insn);
+ end_sequence ();
+ }
+ return;
+
case MEM:
if (var == x)
{
@@ -1816,8 +1925,8 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
{
enum machine_mode wanted_mode = VOIDmode;
enum machine_mode is_mode = GET_MODE (tem);
- int width = INTVAL (XEXP (x, 1));
- int pos = INTVAL (XEXP (x, 2));
+ HOST_WIDE_INT width = INTVAL (XEXP (x, 1));
+ HOST_WIDE_INT pos = INTVAL (XEXP (x, 2));
#ifdef HAVE_extzv
if (GET_CODE (x) == ZERO_EXTRACT)
@@ -1831,7 +1940,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
if (wanted_mode != VOIDmode
&& GET_MODE_SIZE (wanted_mode) < GET_MODE_SIZE (is_mode))
{
- int offset = pos / BITS_PER_UNIT;
+ HOST_WIDE_INT offset = pos / BITS_PER_UNIT;
rtx old_pos = XEXP (x, 2);
rtx newmem;
@@ -2015,13 +2124,13 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
enum machine_mode wanted_mode
= insn_operand_mode[(int) CODE_FOR_insv][0];
enum machine_mode is_mode = GET_MODE (tem);
- int width = INTVAL (XEXP (outerdest, 1));
- int pos = INTVAL (XEXP (outerdest, 2));
+ HOST_WIDE_INT width = INTVAL (XEXP (outerdest, 1));
+ HOST_WIDE_INT pos = INTVAL (XEXP (outerdest, 2));
/* If we have a narrower mode, we can do something. */
if (GET_MODE_SIZE (wanted_mode) < GET_MODE_SIZE (is_mode))
{
- int offset = pos / BITS_PER_UNIT;
+ HOST_WIDE_INT offset = pos / BITS_PER_UNIT;
rtx old_pos = XEXP (outerdest, 2);
rtx newmem;
@@ -2197,6 +2306,9 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
SET_DEST (x) = temp;
}
}
+
+ default:
+ break;
}
/* Nothing special about this RTX; fix its operands. */
@@ -2322,6 +2434,12 @@ fixup_stack_1 (x, insn)
&& GET_CODE (XEXP (ad, 0)) == REG
&& ((REGNO (XEXP (ad, 0)) >= FIRST_VIRTUAL_REGISTER
&& REGNO (XEXP (ad, 0)) <= LAST_VIRTUAL_REGISTER)
+ || REGNO (XEXP (ad, 0)) == FRAME_POINTER_REGNUM
+#if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
+ || REGNO (XEXP (ad, 0)) == HARD_FRAME_POINTER_REGNUM
+#endif
+ || REGNO (XEXP (ad, 0)) == STACK_POINTER_REGNUM
+ || REGNO (XEXP (ad, 0)) == ARG_POINTER_REGNUM
|| XEXP (ad, 0) == current_function_internal_arg_pointer)
&& GET_CODE (XEXP (ad, 1)) == CONST_INT)
{
@@ -2417,7 +2535,7 @@ optimize_bit_field (body, insn, equiv_mem)
that we are now getting rid of,
and then for which byte of the word is wanted. */
- register int offset = INTVAL (XEXP (bitfield, 2));
+ HOST_WIDE_INT offset = INTVAL (XEXP (bitfield, 2));
rtx insns;
/* Adjust OFFSET to count bits from low-address byte. */
@@ -2562,6 +2680,173 @@ static int out_arg_offset;
#endif
#endif
+/* Build up a (MEM (ADDRESSOF (REG))) rtx for a register REG that just had
+ its address taken. DECL is the decl for the object stored in the
+ register, for later use if we do need to force REG into the stack.
+ REG is overwritten by the MEM like in put_reg_into_stack. */
+
+rtx
+gen_mem_addressof (reg, decl)
+ rtx reg;
+ tree decl;
+{
+ tree type = TREE_TYPE (decl);
+
+ rtx r = gen_rtx (ADDRESSOF, Pmode, gen_reg_rtx (GET_MODE (reg)));
+ ADDRESSOF_REGNO (r) = REGNO (reg);
+ SET_ADDRESSOF_DECL (r, decl);
+
+ XEXP (reg, 0) = r;
+ PUT_CODE (reg, MEM);
+ PUT_MODE (reg, DECL_MODE (decl));
+ MEM_VOLATILE_P (reg) = TREE_SIDE_EFFECTS (decl);
+ MEM_IN_STRUCT_P (reg) = AGGREGATE_TYPE_P (type);
+
+ if (TREE_USED (decl) || DECL_INITIAL (decl) != 0)
+ fixup_var_refs (reg, GET_MODE (reg), TREE_UNSIGNED (type));
+
+ return reg;
+}
+
+/* If DECL has an RTL that is an ADDRESSOF rtx, put it into the stack. */
+
+void
+flush_addressof (decl)
+ tree decl;
+{
+ if ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == VAR_DECL)
+ && DECL_RTL (decl) != 0
+ && GET_CODE (DECL_RTL (decl)) == MEM
+ && GET_CODE (XEXP (DECL_RTL (decl), 0)) == ADDRESSOF
+ && GET_CODE (XEXP (XEXP (DECL_RTL (decl), 0), 0)) == REG)
+ put_addressof_into_stack (XEXP (DECL_RTL (decl), 0));
+}
+
+/* Force the register pointed to by R, an ADDRESSOF rtx, into the stack. */
+
+static void
+put_addressof_into_stack (r)
+ rtx r;
+{
+ tree decl = ADDRESSOF_DECL (r);
+ rtx reg = XEXP (r, 0);
+
+ if (GET_CODE (reg) != REG)
+ abort ();
+
+ put_reg_into_stack (0, reg, TREE_TYPE (decl), GET_MODE (reg),
+ DECL_MODE (decl), TREE_SIDE_EFFECTS (decl),
+ ADDRESSOF_REGNO (r),
+ TREE_USED (decl) || DECL_INITIAL (decl) != 0);
+}
+
+/* Helper function for purge_addressof. See if the rtx expression at *LOC
+ in INSN needs to be changed. If FORCE, always put any ADDRESSOFs into
+ the stack. */
+
+static void
+purge_addressof_1 (loc, insn, force)
+ rtx *loc;
+ rtx insn;
+ int force;
+{
+ rtx x;
+ RTX_CODE code;
+ int i, j;
+ char *fmt;
+
+ /* Re-start here to avoid recursion in common cases. */
+ restart:
+
+ x = *loc;
+ if (x == 0)
+ return;
+
+ code = GET_CODE (x);
+
+ if (code == ADDRESSOF && GET_CODE (XEXP (x, 0)) == MEM)
+ {
+ rtx insns;
+ /* We must create a copy of the rtx because it was created by
+ overwriting a REG rtx which is always shared. */
+ rtx sub = copy_rtx (XEXP (XEXP (x, 0), 0));
+
+ if (validate_change (insn, loc, sub, 0))
+ return;
+
+ start_sequence ();
+ if (! validate_change (insn, loc,
+ force_operand (sub, NULL_RTX),
+ 0))
+ abort ();
+
+ insns = get_insns ();
+ end_sequence ();
+ emit_insns_before (insns, insn);
+ return;
+ }
+ else if (code == MEM && GET_CODE (XEXP (x, 0)) == ADDRESSOF && ! force)
+ {
+ rtx sub = XEXP (XEXP (x, 0), 0);
+
+ if (GET_CODE (sub) == MEM)
+ sub = gen_rtx (MEM, GET_MODE (x), copy_rtx (XEXP (sub, 0)));
+
+ if (GET_CODE (sub) == REG && MEM_VOLATILE_P (x))
+ {
+ put_addressof_into_stack (XEXP (x, 0));
+ return;
+ }
+ else if (GET_CODE (sub) == REG && GET_MODE (x) != GET_MODE (sub))
+ {
+ if (! BYTES_BIG_ENDIAN && ! WORDS_BIG_ENDIAN)
+ {
+ rtx sub2 = gen_rtx (SUBREG, GET_MODE (x), sub, 0);
+ if (validate_change (insn, loc, sub2, 0))
+ goto restart;
+ }
+ }
+ else if (validate_change (insn, loc, sub, 0))
+ goto restart;
+ /* else give up and put it into the stack */
+ }
+ else if (code == ADDRESSOF)
+ {
+ put_addressof_into_stack (x);
+ return;
+ }
+
+ /* Scan all subexpressions. */
+ fmt = GET_RTX_FORMAT (code);
+ for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
+ {
+ if (*fmt == 'e')
+ purge_addressof_1 (&XEXP (x, i), insn, force);
+ else if (*fmt == 'E')
+ for (j = 0; j < XVECLEN (x, i); j++)
+ purge_addressof_1 (&XVECEXP (x, i, j), insn, force);
+ }
+}
+
+/* Eliminate all occurrences of ADDRESSOF from INSNS. Elide any remaining
+ (MEM (ADDRESSOF)) patterns, and force any needed registers into the
+ stack. */
+
+void
+purge_addressof (insns)
+ rtx insns;
+{
+ rtx insn;
+ for (insn = insns; insn; insn = NEXT_INSN (insn))
+ if (GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN
+ || GET_CODE (insn) == CALL_INSN)
+ {
+ purge_addressof_1 (&PATTERN (insn), insn,
+ asm_noperands (PATTERN (insn)) > 0);
+ purge_addressof_1 (&REG_NOTES (insn), NULL_RTX, 0);
+ }
+}
+
/* Pass through the INSNS of function FNDECL and convert virtual register
references to hard register references. */
@@ -2571,6 +2856,7 @@ instantiate_virtual_regs (fndecl, insns)
rtx insns;
{
rtx insn;
+ int i;
/* Compute the offsets to use for this function. */
in_arg_offset = FIRST_PARM_OFFSET (fndecl);
@@ -2597,6 +2883,12 @@ instantiate_virtual_regs (fndecl, insns)
instantiate_virtual_regs_1 (&REG_NOTES (insn), NULL_RTX, 0);
}
+ /* Instantiate the stack slots for the parm registers, for later use in
+ addressof elimination. */
+ for (i = 0; i < max_parm_reg; ++i)
+ if (parm_reg_stack_loc[i])
+ instantiate_virtual_regs_1 (&parm_reg_stack_loc[i], NULL_RTX, 0);
+
/* Now instantiate the remaining register equivalences for debugging info.
These will not be valid addresses. */
instantiate_decls (fndecl, 0);
@@ -2629,7 +2921,8 @@ instantiate_decls (fndecl, valid_only)
/* Process all parameters of the function. */
for (decl = DECL_ARGUMENTS (fndecl); decl; decl = TREE_CHAIN (decl))
{
- int size = int_size_in_bytes (TREE_TYPE (decl));
+ HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (decl));
+
instantiate_decl (DECL_RTL (decl), size, valid_only);
/* If the parameter was promoted, then the incoming RTL mode may be
@@ -2694,6 +2987,7 @@ instantiate_decl (x, size, valid_only)
addr = XEXP (x, 0);
if (CONSTANT_P (addr)
+ || (GET_CODE (addr) == ADDRESSOF && GET_CODE (XEXP (addr, 0)) == REG)
|| (GET_CODE (addr) == REG
&& (REGNO (addr) < FIRST_VIRTUAL_REGISTER
|| REGNO (addr) > LAST_VIRTUAL_REGISTER)))
@@ -2758,7 +3052,7 @@ instantiate_virtual_regs_1 (loc, object, extra_insns)
rtx x;
RTX_CODE code;
rtx new = 0;
- int offset;
+ HOST_WIDE_INT offset;
rtx temp;
rtx seq;
int i, j;
@@ -2823,7 +3117,7 @@ instantiate_virtual_regs_1 (loc, object, extra_insns)
emit_insns_before (seq, object);
SET_DEST (x) = new;
- if (!validate_change (object, &SET_SRC (x), temp, 0)
+ if (! validate_change (object, &SET_SRC (x), temp, 0)
|| ! extra_insns)
abort ();
@@ -3101,6 +3395,23 @@ instantiate_virtual_regs_1 (loc, object, extra_insns)
}
return 1;
+
+ case ADDRESSOF:
+ if (GET_CODE (XEXP (x, 0)) == REG)
+ return 1;
+
+ else if (GET_CODE (XEXP (x, 0)) == MEM)
+ {
+ /* If we have a (addressof (mem ..)), do any instantiation inside
+ since we know we'll be making the inside valid when we finally
+ remove the ADDRESSOF. */
+ instantiate_virtual_regs_1 (&XEXP (XEXP (x, 0), 0), NULL_RTX, 0);
+ return 1;
+ }
+ break;
+
+ default:
+ break;
}
/* Scan all subexpressions. */
@@ -3271,7 +3582,7 @@ aggregate_value_p (exp)
if (RETURN_IN_MEMORY (type))
return 1;
- /* Types that are TREE_ADDRESSABLE must be contructed in memory,
+ /* Types that are TREE_ADDRESSABLE must be constructed in memory,
and thus can't be returned in registers. */
if (TREE_ADDRESSABLE (type))
return 1;
@@ -3327,7 +3638,6 @@ assign_parms (fndecl, second_time)
/* This is a dummy PARM_DECL that we used for the function result if
the function returns a structure. */
tree function_result_decl = 0;
- int nparmregs = list_length (fnargs) + LAST_VIRTUAL_REGISTER + 1;
int varargs_setup = 0;
rtx conversion_insns = 0;
@@ -3385,8 +3695,9 @@ assign_parms (fndecl, second_time)
fnargs = function_result_decl;
}
- parm_reg_stack_loc = (rtx *) oballoc (nparmregs * sizeof (rtx));
- bzero ((char *) parm_reg_stack_loc, nparmregs * sizeof (rtx));
+ max_parm_reg = LAST_VIRTUAL_REGISTER + 1;
+ parm_reg_stack_loc = (rtx *) savealloc (max_parm_reg * sizeof (rtx));
+ bzero ((char *) parm_reg_stack_loc, max_parm_reg * sizeof (rtx));
#ifdef INIT_CUMULATIVE_INCOMING_ARGS
INIT_CUMULATIVE_INCOMING_ARGS (args_so_far, fntype, NULL_RTX);
@@ -3409,10 +3720,18 @@ assign_parms (fndecl, second_time)
tree nominal_type = TREE_TYPE (parm);
/* Set LAST_NAMED if this is last named arg before some
- anonymous args. We treat it as if it were anonymous too. */
+ anonymous args. */
int last_named = ((TREE_CHAIN (parm) == 0
|| DECL_NAME (TREE_CHAIN (parm)) == 0)
&& (stdarg || current_function_varargs));
+ /* Set NAMED_ARG if this arg should be treated as a named arg. For
+ most machines, if this is a varargs/stdarg function, then we treat
+ the last named arg as if it were anonymous too. */
+#ifdef STRICT_ARGUMENT_NAMING
+ int named_arg = 1;
+#else
+ int named_arg = ! last_named;
+#endif
if (TREE_TYPE (parm) == error_mark_node
/* This can happen after weird syntax errors
@@ -3461,7 +3780,7 @@ assign_parms (fndecl, second_time)
|| TREE_ADDRESSABLE (passed_type)
#ifdef FUNCTION_ARG_PASS_BY_REFERENCE
|| FUNCTION_ARG_PASS_BY_REFERENCE (args_so_far, passed_mode,
- passed_type, ! last_named)
+ passed_type, named_arg)
#endif
)
{
@@ -3481,10 +3800,10 @@ assign_parms (fndecl, second_time)
0 means it arrives on the stack. */
#ifdef FUNCTION_INCOMING_ARG
entry_parm = FUNCTION_INCOMING_ARG (args_so_far, promoted_mode,
- passed_type, ! last_named);
+ passed_type, named_arg);
#else
entry_parm = FUNCTION_ARG (args_so_far, promoted_mode,
- passed_type, ! last_named);
+ passed_type, named_arg);
#endif
if (entry_parm == 0)
@@ -3530,12 +3849,12 @@ assign_parms (fndecl, second_time)
#ifdef FUNCTION_INCOMING_ARG
FUNCTION_INCOMING_ARG (args_so_far, promoted_mode,
passed_type,
- (! last_named
+ (named_arg
|| varargs_setup)) != 0,
#else
FUNCTION_ARG (args_so_far, promoted_mode,
passed_type,
- ! last_named || varargs_setup) != 0,
+ named_arg || varargs_setup) != 0,
#endif
#endif
fndecl, &stack_args_size, &stack_offset, &arg_size);
@@ -3575,7 +3894,7 @@ assign_parms (fndecl, second_time)
if (entry_parm)
{
int nregs = FUNCTION_ARG_PARTIAL_NREGS (args_so_far, promoted_mode,
- passed_type, ! last_named);
+ passed_type, named_arg);
if (nregs > 0)
{
@@ -3640,7 +3959,7 @@ assign_parms (fndecl, second_time)
/* Update info on where next arg arrives in registers. */
FUNCTION_ARG_ADVANCE (args_so_far, promoted_mode,
- passed_type, ! last_named);
+ passed_type, named_arg);
/* If this is our second time through, we are done with this parm. */
if (second_time)
@@ -3686,6 +4005,19 @@ assign_parms (fndecl, second_time)
else
stack_parm = gen_rtx (MEM, nominal_mode,
gen_rtx (PLUS, Pmode,
+ if (flag_check_memory_usage)
+ {
+ push_to_sequence (conversion_insns);
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ XEXP (stack_parm, 0), ptr_mode,
+ GEN_INT (int_size_in_bytes
+ (TREE_TYPE (parm))),
+ TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_RW),
+ TYPE_MODE (integer_type_node));
+ conversion_insns = get_insns ();
+ end_sequence ();
+ }
internal_arg_pointer, offset_rtx));
/* If this is a memory ref that contains aggregate components,
@@ -3813,7 +4145,7 @@ assign_parms (fndecl, second_time)
/* ENTRY_PARM has been converted to PROMOTED_MODE, its
mode, by the caller. We now have to convert it to
NOMINAL_MODE, if different. However, PARMREG may be in
- a diffent mode than NOMINAL_MODE if it is being stored
+ a different mode than NOMINAL_MODE if it is being stored
promoted.
If ENTRY_PARM is a hard register, it might be in a register
@@ -3881,7 +4213,7 @@ assign_parms (fndecl, second_time)
&& FUNCTION_ARG_CALLEE_COPIES (args_so_far,
TYPE_MODE (DECL_ARG_TYPE (parm)),
DECL_ARG_TYPE (parm),
- ! last_named)
+ named_arg)
&& ! TREE_ADDRESSABLE (DECL_ARG_TYPE (parm)))
{
rtx copy;
@@ -3903,9 +4235,17 @@ assign_parms (fndecl, second_time)
copy = assign_stack_temp (TYPE_MODE (type),
int_size_in_bytes (type), 1);
MEM_IN_STRUCT_P (copy) = AGGREGATE_TYPE_P (type);
+ RTX_UNCHANGING_P (copy) = TREE_READONLY (parm);
store_expr (parm, copy, 0);
emit_move_insn (parmreg, XEXP (copy, 0));
+ if (flag_check_memory_usage)
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ XEXP (copy, 0), ptr_mode,
+ GEN_INT (int_size_in_bytes (type)),
+ TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_RW),
+ TYPE_MODE (integer_type_node));
conversion_insns = get_insns ();
did_conversion = 1;
end_sequence ();
@@ -3923,17 +4263,20 @@ assign_parms (fndecl, second_time)
else
regno = REGNO (parmreg);
- if (regno >= nparmregs)
+ if (regno >= max_parm_reg)
{
rtx *new;
- int old_nparmregs = nparmregs;
+ int old_max_parm_reg = max_parm_reg;
- nparmregs = regno + 5;
- new = (rtx *) oballoc (nparmregs * sizeof (rtx));
+ /* It's slow to expand this one register at a time,
+ but it's also rare and we need max_parm_reg to be
+ precisely correct. */
+ max_parm_reg = regno + 1;
+ new = (rtx *) savealloc (max_parm_reg * sizeof (rtx));
bcopy ((char *) parm_reg_stack_loc, (char *) new,
- old_nparmregs * sizeof (rtx));
- bzero ((char *) (new + old_nparmregs),
- (nparmregs - old_nparmregs) * sizeof (rtx));
+ old_max_parm_reg * sizeof (rtx));
+ bzero ((char *) (new + old_max_parm_reg),
+ (max_parm_reg - old_max_parm_reg) * sizeof (rtx));
parm_reg_stack_loc = new;
}
@@ -4006,7 +4349,7 @@ assign_parms (fndecl, second_time)
}
/* For pointer data type, suggest pointer register. */
- if (TREE_CODE (TREE_TYPE (parm)) == POINTER_TYPE)
+ if (POINTER_TYPE_P (TREE_TYPE (parm)))
mark_reg_pointer (parmreg,
(TYPE_ALIGN (TREE_TYPE (TREE_TYPE (parm)))
/ BITS_PER_UNIT));
@@ -4055,7 +4398,20 @@ assign_parms (fndecl, second_time)
emit_move_insn (validize_mem (stack_parm),
validize_mem (entry_parm));
}
+ if (flag_check_memory_usage)
+ {
+ push_to_sequence (conversion_insns);
+ emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
+ XEXP (stack_parm, 0), ptr_mode,
+ GEN_INT (GET_MODE_SIZE (GET_MODE
+ (entry_parm))),
+ TYPE_MODE (sizetype),
+ GEN_INT (MEMORY_USE_RW),
+ TYPE_MODE (integer_type_node));
+ conversion_insns = get_insns ();
+ end_sequence ();
+ }
DECL_RTL (parm) = stack_parm;
}
@@ -4082,7 +4438,6 @@ assign_parms (fndecl, second_time)
now that all parameters have been copied out of hard registers. */
emit_insns (conversion_insns);
- max_parm_reg = max_reg_num ();
last_parm_insn = get_last_insn ();
current_function_args_size = stack_args_size.constant;
@@ -4110,7 +4465,7 @@ assign_parms (fndecl, second_time)
= (stack_args_size.var == 0 ? GEN_INT (-stack_args_size.constant)
: expand_expr (size_binop (MINUS_EXPR, stack_args_size.var,
size_int (-stack_args_size.constant)),
- NULL_RTX, VOIDmode, 0));
+ NULL_RTX, VOIDmode, EXPAND_MEMORY_USE_BAD));
#else
current_function_arg_offset_rtx = ARGS_SIZE_RTX (stack_args_size);
#endif
@@ -4441,7 +4796,9 @@ setjmp_protect (block)
if ((TREE_CODE (decl) == VAR_DECL
|| TREE_CODE (decl) == PARM_DECL)
&& DECL_RTL (decl) != 0
- && GET_CODE (DECL_RTL (decl)) == REG
+ && (GET_CODE (DECL_RTL (decl)) == REG
+ || (GET_CODE (DECL_RTL (decl)) == MEM
+ && GET_CODE (XEXP (DECL_RTL (decl), 0)) == ADDRESSOF))
/* If this variable came from an inline function, it must be
that it's life doesn't overlap the setjmp. If there was a
setjmp in the function, it would already be in memory. We
@@ -4472,7 +4829,9 @@ setjmp_protect_args ()
if ((TREE_CODE (decl) == VAR_DECL
|| TREE_CODE (decl) == PARM_DECL)
&& DECL_RTL (decl) != 0
- && GET_CODE (DECL_RTL (decl)) == REG
+ && (GET_CODE (DECL_RTL (decl)) == REG
+ || (GET_CODE (DECL_RTL (decl)) == MEM
+ && GET_CODE (XEXP (DECL_RTL (decl), 0)) == ADDRESSOF))
&& (
/* If longjmp doesn't restore the registers,
don't put anything in them. */
@@ -4522,7 +4881,7 @@ fix_lexical_addr (addr, var)
tree var;
{
rtx basereg;
- int displacement;
+ HOST_WIDE_INT displacement;
tree context = decl_function_context (var);
struct function *fp;
rtx base = 0;
@@ -4538,6 +4897,9 @@ fix_lexical_addr (addr, var)
if (fp == 0)
abort ();
+ if (GET_CODE (addr) == ADDRESSOF && GET_CODE (XEXP (addr, 0)) == MEM)
+ addr = XEXP (XEXP (addr, 0), 0);
+
/* Decode given address as base reg plus displacement. */
if (GET_CODE (addr) == REG)
basereg = addr, displacement = 0;
@@ -5202,12 +5564,10 @@ expand_function_start (subr, parms_have_cleanups)
{
last_ptr = assign_stack_local (Pmode, GET_MODE_SIZE (Pmode), 0);
-#ifdef SMALL_REGISTER_CLASSES
/* Delay copying static chain if it is not a register to avoid
conflicts with regs used for parameters. */
if (! SMALL_REGISTER_CLASSES
|| GET_CODE (static_chain_incoming_rtx) == REG)
-#endif
emit_move_insn (last_ptr, static_chain_incoming_rtx);
}
@@ -5316,14 +5676,12 @@ expand_function_start (subr, parms_have_cleanups)
assign_parms (subr, 0);
-#ifdef SMALL_REGISTER_CLASSES
/* Copy the static chain now if it wasn't a register. The delay is to
avoid conflicts with the parameter passing registers. */
if (SMALL_REGISTER_CLASSES && current_function_needs_context)
if (GET_CODE (static_chain_incoming_rtx) != REG)
emit_move_insn (last_ptr, static_chain_incoming_rtx);
-#endif
/* The following was moved from init_function_start.
The move is supposed to make sdb output more accurate. */
@@ -5358,15 +5716,12 @@ expand_function_start (subr, parms_have_cleanups)
generated above. */
if (tem && ! obey_regdecls)
{
-#ifdef SMALL_REGISTER_CLASSES
/* If the static chain originally came in a register, put it back
there, then move it out in the next insn. The reason for
this peculiar code is to satisfy function integration. */
if (SMALL_REGISTER_CLASSES
&& GET_CODE (static_chain_incoming_rtx) == REG)
emit_move_insn (static_chain_incoming_rtx, last_ptr);
-#endif
-
last_ptr = copy_to_reg (static_chain_incoming_rtx);
}
@@ -5403,7 +5758,8 @@ expand_function_start (subr, parms_have_cleanups)
/* Evaluate now the sizes of any types declared among the arguments. */
for (tem = nreverse (get_pending_sizes ()); tem; tem = TREE_CHAIN (tem))
{
- expand_expr (TREE_VALUE (tem), const0_rtx, VOIDmode, 0);
+ expand_expr (TREE_VALUE (tem), const0_rtx, VOIDmode,
+ EXPAND_MEMORY_USE_BAD);
/* Flush the queue in case this parameter declaration has
side-effects. */
emit_queue ();
@@ -5652,6 +6008,11 @@ expand_function_end (filename, line, end_bindings)
emit_move_insn (real_decl_result,
DECL_RTL (DECL_RESULT (current_function_decl)));
emit_insn (gen_rtx (USE, VOIDmode, real_decl_result));
+
+ /* The delay slot scheduler assumes that current_function_return_rtx
+ holds the hard register containing the return value, not a temporary
+ pseudo. */
+ current_function_return_rtx = real_decl_result;
}
/* If returning a structure, arrange to return the address of the value
diff --git a/gcc/function.h b/gcc/function.h
index f54622fa71d..5849e3e25f0 100644
--- a/gcc/function.h
+++ b/gcc/function.h
@@ -1,5 +1,5 @@
/* Structure for saving state for a nested function.
- Copyright (C) 1989, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1989, 92-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -108,6 +108,8 @@ struct function
int function_call_count;
struct temp_slot *temp_slots;
int temp_slot_level;
+ int target_temp_slot_level;
+ int var_temp_slot_level;
/* This slot is initialized as 0 and is added to
during the nested function. */
struct var_refs_queue *fixup_var_refs_queue;
@@ -200,6 +202,7 @@ struct function
struct pool_sym **const_rtx_sym_hash_table;
struct pool_constant *first_pool, *last_pool;
int pool_offset;
+ rtx const_double_chain;
};
/* The FUNCTION_DECL for an inline function currently being expanded. */
@@ -234,12 +237,24 @@ extern HOST_WIDE_INT get_frame_size PROTO((void));
/* These variables hold pointers to functions to
save and restore machine-specific data,
in push_function_context and pop_function_context. */
-extern void (*save_machine_status) ();
-extern void (*restore_machine_status) ();
+extern void (*save_machine_status) PROTO((struct function *));
+extern void (*restore_machine_status) PROTO((struct function *));
-/* Save and restore varasm.c status for a nested function. */
-extern void save_varasm_status PROTO((struct function *));
+/* Save and restore status information for a nested function. */
+extern void save_tree_status PROTO((struct function *, tree));
+extern void restore_tree_status PROTO((struct function *, tree));
+extern void save_varasm_status PROTO((struct function *, tree));
extern void restore_varasm_status PROTO((struct function *));
+extern void save_eh_status PROTO((struct function *));
+extern void restore_eh_status PROTO((struct function *));
+extern void save_stmt_status PROTO((struct function *));
+extern void restore_stmt_status PROTO((struct function *));
+extern void save_expr_status PROTO((struct function *));
+extern void restore_expr_status PROTO((struct function *));
+extern void save_emit_status PROTO((struct function *));
+extern void restore_emit_status PROTO((struct function *));
+extern void save_storage_status PROTO((struct function *));
+extern void restore_storage_status PROTO((struct function *));
#ifdef rtx
#undef rtx
diff --git a/gcc/gansidecl.h b/gcc/gansidecl.h
index 1135db98756..d4a8e38865a 100644
--- a/gcc/gansidecl.h
+++ b/gcc/gansidecl.h
@@ -1,5 +1,5 @@
-/* ANSI and traditional C compatability macros.
- Copyright (C) 1996 Free Software Foundation, Inc.
+/* ANSI and traditional C compatibility macros.
+ Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -46,14 +46,6 @@ Boston, MA 02111-1307, USA. */
#endif
#endif
-#ifndef STDIO_PROTO
-#ifdef BUFSIZ
-#define STDIO_PROTO(ARGS) PROTO(ARGS)
-#else
-#define STDIO_PROTO(ARGS) ()
-#endif
-#endif
-
/* Define a generic NULL if one hasn't already been defined. */
#ifndef NULL
@@ -85,4 +77,31 @@ Boston, MA 02111-1307, USA. */
#endif /* ! __STDC__ */
+/* We don't have autoconf for libgcc2.c since it's a target, so don't
+ define these functions, which aren't used there anyway. */
+
+#ifndef IN_LIBGCC2
+
+#ifndef HAVE_BCOPY
+#define bcopy(src,dst,len) memcpy ((dst),(src),(len))
+#endif
+
+#ifndef HAVE_BZERO
+#define bzero(dst,len) memset ((dst),0,(len))
+#endif
+
+#ifndef HAVE_BCMP
+#define bcmp(left,right,len) memcmp ((left),(right),(len))
+#endif
+
+#ifndef HAVE_RINDEX
+#define rindex strrchr
+#endif
+
+#ifndef HAVE_INDEX
+#define index strchr
+#endif
+
+#endif /* IN_LIBGCC2 */
+
#endif /* ANSIDECL_H */
diff --git a/gcc/gbl-ctors.h b/gcc/gbl-ctors.h
index 6393a9045ab..50e0e567636 100644
--- a/gcc/gbl-ctors.h
+++ b/gcc/gbl-ctors.h
@@ -2,7 +2,7 @@
for getting g++ file-scope static objects constructed. This file
will get included either by libgcc2.c (for systems that don't support
a .init section) or by crtstuff.c (for those that do).
- Copyright (C) 1991, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1991, 1995, 1996, 1998 Free Software Foundation, Inc.
Contributed by Ron Guilmette (rfg@segfault.us.com)
This file is part of GNU CC.
@@ -39,8 +39,6 @@ Boston, MA 02111-1307, USA. */
#ifdef HAVE_ATEXIT
#if defined (WINNT) || defined (NEED_ATEXIT)
extern int atexit (void (*) (void));
-#else
-extern void atexit (void (*) (void));
#endif
#define ON_EXIT(FUNC,ARG) atexit ((FUNC))
#else
diff --git a/gcc/gcc.1 b/gcc/gcc.1
new file mode 100644
index 00000000000..ec8dae670cf
--- /dev/null
+++ b/gcc/gcc.1
@@ -0,0 +1,4175 @@
+.\" Copyright (c) 1991, 1992, 1993, 1994 Free Software Foundation -*-Text-*-
+.\" See section COPYING for conditions for redistribution
+.\"
+.\" Set up \*(lq, \*(rq if -man hasn't already set it up.
+.if @@\*(lq@ \{\
+. ds lq "
+. if t .ds lq ``
+. if !@@\(lq@ .ds lq "\(lq
+.\}
+.if @@\*(rq@ \{\
+. ds rq "
+. if t .ds rq ''
+. if !@@\(rq@ .ds rq "\(rq
+.\}
+.de Id
+.ds Rv \\$3
+.ds Dt \\$4
+..
+.de Sp
+.if n .sp
+.if t .sp 0.4
+..
+.Id $Id: gcc.1,v 1.4 1993/10/13 23:19:12 pesch Exp $
+.TH GCC 1 "\*(Dt" "GNU Tools" "GNU Tools"
+.SH NAME
+gcc, g++ \- GNU project C and C++ Compiler (v2.7)
+.SH SYNOPSIS
+.B gcc
+.RI "[ " option " | " filename " ].\|.\|."
+.br
+.B g++
+.RI "[ " option " | " filename " ].\|.\|."
+.SH WARNING
+The information in this man page is an extract from the full
+documentation of the GNU C compiler, and is limited to the meaning of
+the options.
+.PP
+This man page is not kept up to date except when volunteers want to
+maintain it. If you find a discrepancy between the man page and the
+software, please check the Info file, which is the authoritative
+documentation.
+.PP
+If we find that the things in this man page that are out of date cause
+significant confusion or complaints, we will stop distributing the man
+page. The alternative, updating the man page when we update the Info
+file, is impossible because the rest of the work of maintaining GNU CC
+leaves us no time for that. The GNU project regards man pages as
+obsolete and should not let them take time away from other things.
+.PP
+For complete and current documentation, refer to the Info file `\|\c
+.B gcc\c
+\&\|' or the manual
+.I
+Using and Porting GNU CC (for version 2.0)\c
+\&. Both are made from the Texinfo source file
+.BR gcc.texinfo .
+.SH DESCRIPTION
+The C and C++ compilers are integrated. Both process input files
+through one or more of four stages: preprocessing, compilation,
+assembly, and linking. Source filename suffixes identify the source
+language, but which name you use for the compiler governs default
+assumptions:
+.TP
+.B gcc
+assumes preprocessed (\c
+.B .i\c
+\&) files are C and assumes C style linking.
+.TP
+.B g++
+assumes preprocessed (\c
+.B .i\c
+\&) files are C++ and assumes C++ style linking.
+.PP
+Suffixes of source file names indicate the language and kind of
+processing to be done:
+.Sp
+.nf
+.ta \w'\fB.cxx\fP 'u
+\&\fB.c\fP C source; preprocess, compile, assemble
+\&\fB.C\fP C++ source; preprocess, compile, assemble
+\&\fB.cc\fP C++ source; preprocess, compile, assemble
+\&\fB.cxx\fP C++ source; preprocess, compile, assemble
+\&\fB.m\fP Objective-C source; preprocess, compile, assemble
+\&\fB.i\fP preprocessed C; compile, assemble
+\&\fB.ii\fP preprocessed C++; compile, assemble
+\&\fB.s\fP Assembler source; assemble
+\&\fB.S\fP Assembler source; preprocess, assemble
+\&\fB.h\fP Preprocessor file; not usually named on command line
+.Sp
+.fi
+Files with other suffixes are passed to the linker. Common cases include:
+.Sp
+.nf
+\&\fB.o\fP Object file
+\&\fB.a\fP Archive file
+.br
+.fi
+.Sp
+Linking is always the last stage unless you use one of the
+.BR \-c ,
+.BR \-S ,
+or
+.B \-E
+options to avoid it (or unless compilation errors stop the whole
+process). For the link stage, all
+.B .o
+files corresponding to source files,
+.B \-l
+libraries, unrecognized filenames (including named
+.B .o
+object files and
+.B .a
+archives)
+are passed to the linker in command-line order.
+.SH OPTIONS
+Options must be separate: `\|\c
+.B \-dr\c
+\&\|' is quite different from `\|\c
+.B \-d \-r
+\&\|'.
+.PP
+Most `\|\c
+.B \-f\c
+\&\|' and `\|\c
+.B \-W\c
+\&\|' options have two contrary forms:
+.BI \-f name
+and
+.BI \-fno\- name\c
+\& (or
+.BI \-W name
+and
+.BI \-Wno\- name\c
+\&). Only the non-default forms are shown here.
+.PP
+Here is a summary of all the options, grouped by type. Explanations are
+in the following sections.
+.hy 0
+.na
+.TP
+.B Overall Options
+.br
+\-c
+\-S
+\-E
+.RI "\-o " file
+\-pipe
+\-v
+.RI "\-x " language
+.TP
+.B Language Options
+\-ansi
+\-fall\-virtual
+\-fcond\-mismatch
+\-fdollars\-in\-identifiers
+\-fenum\-int\-equiv
+\-fexternal\-templates
+\-fno\-asm
+\-fno\-builtin
+\-fhosted
+\-fno\-hosted
+\-ffreestanding
+\-fno\-freestanding
+\-fno\-strict\-prototype
+\-fsigned\-bitfields
+\-fsigned\-char
+\-fthis\-is\-variable
+\-funsigned\-bitfields
+\-funsigned\-char
+\-fwritable\-strings
+\-traditional
+\-traditional\-cpp
+\-trigraphs
+.TP
+.B Warning Options
+\-fsyntax\-only
+\-pedantic
+\-pedantic\-errors
+\-w
+\-W
+\-Wall
+\-Waggregate\-return
+\-Wcast\-align
+\-Wcast\-qual
+\-Wchar\-subscript
+\-Wcomment
+\-Wconversion
+\-Wenum\-clash
+\-Werror
+\-Wformat
+.RI \-Wid\-clash\- len
+\-Wimplicit
+\-Wimplicit\-int
+\-Wimplicit\-function\-declaration
+\-Winline
+\-Wmain
+\-Wmissing\-prototypes
+\-Wmissing\-declarations
+\-Wnested\-externs
+\-Wno\-import
+\-Wparentheses
+\-Wpointer\-arith
+\-Wredundant\-decls
+\-Wreturn\-type
+\-Wshadow
+\-Wstrict\-prototypes
+\-Wswitch
+\-Wtemplate\-debugging
+\-Wtraditional
+\-Wtrigraphs
+\-Wuninitialized
+\-Wunused
+\-Wwrite\-strings
+.TP
+.B Debugging Options
+\-a
+.RI \-d letters
+\-fpretend\-float
+\-g
+.RI \-g level
+\-gcoff
+\-gxcoff
+\-gxcoff+
+\-gdwarf
+\-gdwarf+
+\-gstabs
+\-gstabs+
+\-ggdb
+\-p
+\-pg
+\-save\-temps
+.RI \-print\-file\-name= library
+\-print\-libgcc\-file\-name
+.RI \-print\-prog\-name= program
+.TP
+.B Optimization Options
+\-fcaller\-saves
+\-fcse\-follow\-jumps
+\-fcse\-skip\-blocks
+\-fdelayed\-branch
+\-felide\-constructors
+\-fexpensive\-optimizations
+\-ffast\-math
+\-ffloat\-store
+\-fforce\-addr
+\-fforce\-mem
+\-finline\-functions
+\-fkeep\-inline\-functions
+\-fmemoize\-lookups
+\-fno\-default\-inline
+\-fno\-defer\-pop
+\-fno\-function\-cse
+\-fno\-inline
+\-fno\-peephole
+\-fomit\-frame\-pointer
+\-frerun\-cse\-after\-loop
+\-fschedule\-insns
+\-fschedule\-insns2
+\-fstrength\-reduce
+\-fthread\-jumps
+\-funroll\-all\-loops
+\-funroll\-loops
+\-O
+\-O2
+.TP
+.B Preprocessor Options
+.RI \-A assertion
+\-C
+\-dD
+\-dM
+\-dN
+.RI \-D macro [\|= defn \|]
+\-E
+\-H
+.RI "\-idirafter " dir
+.RI "\-include " file
+.RI "\-imacros " file
+.RI "\-iprefix " file
+.RI "\-iwithprefix " dir
+\-M
+\-MD
+\-MM
+\-MMD
+\-nostdinc
+\-P
+.RI \-U macro
+\-undef
+.TP
+.B Assembler Option
+.RI \-Wa, option
+.TP
+.B Linker Options
+.RI \-l library
+\-nostartfiles
+\-nostdlib
+\-static
+\-shared
+\-symbolic
+.RI "\-Xlinker\ " option
+.RI \-Wl, option
+.RI "\-u " symbol
+.TP
+.B Directory Options
+.RI \-B prefix
+.RI \-I dir
+\-I\-
+.RI \-L dir
+.TP
+.B Target Options
+.RI "\-b " machine
+.RI "\-V " version
+.TP
+.B Configuration Dependent Options
+.I M680x0\ Options
+.br
+\-m68000
+\-m68020
+\-m68020\-40
+\-m68030
+\-m68040
+\-m68881
+\-mbitfield
+\-mc68000
+\-mc68020
+\-mfpa
+\-mnobitfield
+\-mrtd
+\-mshort
+\-msoft\-float
+.Sp
+.I VAX Options
+.br
+\-mg
+\-mgnu
+\-munix
+.Sp
+.I SPARC Options
+.br
+\-mepilogue
+\-mfpu
+\-mhard\-float
+\-mno\-fpu
+\-mno\-epilogue
+\-msoft\-float
+\-msparclite
+\-mv8
+\-msupersparc
+\-mcypress
+.Sp
+.I Convex Options
+.br
+\-margcount
+\-mc1
+\-mc2
+\-mnoargcount
+.Sp
+.I AMD29K Options
+.br
+\-m29000
+\-m29050
+\-mbw
+\-mdw
+\-mkernel\-registers
+\-mlarge
+\-mnbw
+\-mnodw
+\-msmall
+\-mstack\-check
+\-muser\-registers
+.Sp
+.I M88K Options
+.br
+\-m88000
+\-m88100
+\-m88110
+\-mbig\-pic
+\-mcheck\-zero\-division
+\-mhandle\-large\-shift
+\-midentify\-revision
+\-mno\-check\-zero\-division
+\-mno\-ocs\-debug\-info
+\-mno\-ocs\-frame\-position
+\-mno\-optimize\-arg\-area
+\-mno\-serialize\-volatile
+\-mno\-underscores
+\-mocs\-debug\-info
+\-mocs\-frame\-position
+\-moptimize\-arg\-area
+\-mserialize\-volatile
+.RI \-mshort\-data\- num
+\-msvr3
+\-msvr4
+\-mtrap\-large\-shift
+\-muse\-div\-instruction
+\-mversion\-03.00
+\-mwarn\-passed\-structs
+.Sp
+.I RS6000 Options
+.br
+\-mfp\-in\-toc
+\-mno\-fop\-in\-toc
+.Sp
+.I RT Options
+.br
+\-mcall\-lib\-mul
+\-mfp\-arg\-in\-fpregs
+\-mfp\-arg\-in\-gregs
+\-mfull\-fp\-blocks
+\-mhc\-struct\-return
+\-min\-line\-mul
+\-mminimum\-fp\-blocks
+\-mnohc\-struct\-return
+.Sp
+.I MIPS Options
+.br
+\-mcpu=\fIcpu type\fP
+\-mips2
+\-mips3
+\-mint64
+\-mlong64
+\-mlonglong128
+\-mmips\-as
+\-mgas
+\-mrnames
+\-mno\-rnames
+\-mgpopt
+\-mno\-gpopt
+\-mstats
+\-mno\-stats
+\-mmemcpy
+\-mno\-memcpy
+\-mno\-mips\-tfile
+\-mmips\-tfile
+\-msoft\-float
+\-mhard\-float
+\-mabicalls
+\-mno\-abicalls
+\-mhalf\-pic
+\-mno\-half\-pic
+\-G \fInum\fP
+\-nocpp
+.Sp
+.I i386 Options
+.br
+\-m486
+\-mno\-486
+\-msoft\-float
+\-mno\-fp\-ret\-in\-387
+.Sp
+.I HPPA Options
+.br
+\-mpa\-risc\-1\-0
+\-mpa\-risc\-1\-1
+\-mkernel
+\-mshared\-libs
+\-mno\-shared\-libs
+\-mlong\-calls
+\-mdisable\-fpregs
+\-mdisable\-indexing
+\-mtrailing\-colon
+.Sp
+.I i960 Options
+.br
+\-m\fIcpu-type\fP
+\-mnumerics
+\-msoft\-float
+\-mleaf\-procedures
+\-mno\-leaf\-procedures
+\-mtail\-call
+\-mno\-tail\-call
+\-mcomplex\-addr
+\-mno\-complex\-addr
+\-mcode\-align
+\-mno\-code\-align
+\-mic\-compat
+\-mic2.0\-compat
+\-mic3.0\-compat
+\-masm\-compat
+\-mintel\-asm
+\-mstrict\-align
+\-mno\-strict\-align
+\-mold\-align
+\-mno\-old\-align
+.Sp
+.I DEC Alpha Options
+.br
+\-mfp\-regs
+\-mno\-fp\-regs
+\-mno\-soft\-float
+\-msoft\-float
+.Sp
+.I System V Options
+.br
+\-G
+\-Qy
+\-Qn
+.RI \-YP, paths
+.RI \-Ym, dir
+.TP
+.B Code Generation Options
+.RI \-fcall\-saved\- reg
+.RI \-fcall\-used\- reg
+.RI \-ffixed\- reg
+\-finhibit\-size\-directive
+\-fnonnull\-objects
+\-fno\-common
+\-fno\-ident
+\-fno\-gnu\-linker
+\-fpcc\-struct\-return
+\-fpic
+\-fPIC
+\-freg\-struct\-return
+\-fshared\-data
+\-fshort\-enums
+\-fshort\-double
+\-fvolatile
+\-fvolatile\-global
+\-fverbose\-asm
+.ad b
+.hy 1
+.SH OVERALL OPTIONS
+.TP
+.BI "\-x " "language"
+Specify explicitly the
+.I language\c
+\& for the following input files (rather than choosing a default based
+on the file name suffix) . This option applies to all following input
+files until the next `\|\c
+.B \-x\c
+\&\|' option. Possible values of \c
+.I language\c
+\& are
+`\|\c
+.B c\c
+\&\|', `\|\c
+.B objective\-c\c
+\&\|', `\|\c
+.B c\-header\c
+\&\|', `\|\c
+.B c++\c
+\&\|',
+`\|\c
+.B cpp\-output\c
+\&\|', `\|\c
+.B assembler\c
+\&\|', and `\|\c
+.B assembler\-with\-cpp\c
+\&\|'.
+.TP
+.B \-x none
+Turn off any specification of a language, so that subsequent files are
+handled according to their file name suffixes (as they are if `\|\c
+.B \-x\c
+\&\|'
+has not been used at all).
+.PP
+If you want only some of the four stages (preprocess, compile,
+assemble, link), you can use
+`\|\c
+.B \-x\c
+\&\|' (or filename suffixes) to tell \c
+.B gcc\c
+\& where to start, and
+one of the options `\|\c
+.B \-c\c
+\&\|', `\|\c
+.B \-S\c
+\&\|', or `\|\c
+.B \-E\c
+\&\|' to say where
+.B gcc\c
+\& is to stop. Note that some combinations (for example,
+`\|\c
+.B \-x cpp\-output \-E\c
+\&\|') instruct \c
+.B gcc\c
+\& to do nothing at all.
+.TP
+.B \-c
+Compile or assemble the source files, but do not link. The compiler
+output is an object file corresponding to each source file.
+.Sp
+By default, GCC makes the object file name for a source file by replacing
+the suffix `\|\c
+.B .c\c
+\&\|', `\|\c
+.B .i\c
+\&\|', `\|\c
+.B .s\c
+\&\|', etc., with `\|\c
+.B .o\c
+\&\|'. Use
+.B \-o\c
+\& to select another name.
+.Sp
+GCC ignores any unrecognized input files (those that do not require
+compilation or assembly) with the
+.B \-c
+option.
+.TP
+.B \-S
+Stop after the stage of compilation proper; do not assemble. The output
+is an assembler code file for each non-assembler input
+file specified.
+.Sp
+By default, GCC makes the assembler file name for a source file by
+replacing the suffix `\|\c
+.B .c\c
+\&\|', `\|\c
+.B .i\c
+\&\|', etc., with `\|\c
+.B .s\c
+\&\|'. Use
+.B \-o\c
+\& to select another name.
+.Sp
+GCC ignores any input files that don't require compilation.
+.TP
+.B \-E
+Stop after the preprocessing stage; do not run the compiler proper. The
+output is preprocessed source code, which is sent to the
+standard output.
+.Sp
+GCC ignores input files which don't require preprocessing.
+.TP
+.BI "\-o " file
+Place output in file \c
+.I file\c
+\&. This applies regardless to whatever
+sort of output GCC is producing, whether it be an executable file,
+an object file, an assembler file or preprocessed C code.
+.Sp
+Since only one output file can be specified, it does not make sense to
+use `\|\c
+.B \-o\c
+\&\|' when compiling more than one input file, unless you are
+producing an executable file as output.
+.Sp
+If you do not specify `\|\c
+.B \-o\c
+\&\|', the default is to put an executable file
+in `\|\c
+.B a.out\c
+\&\|', the object file for `\|\c
+.I source\c
+.B \&.\c
+.I suffix\c
+\&\c
+\&\|' in
+`\|\c
+.I source\c
+.B \&.o\c
+\&\|', its assembler file in `\|\c
+.I source\c
+.B \&.s\c
+\&\|', and
+all preprocessed C source on standard output.
+.TP
+.B \-v
+Print (on standard error output) the commands executed to run the stages
+of compilation. Also print the version number of the compiler driver
+program and of the preprocessor and the compiler proper.
+.TP
+.B \-pipe
+Use pipes rather than temporary files for communication between the
+various stages of compilation. This fails to work on some systems where
+the assembler cannot read from a pipe; but the GNU assembler has
+no trouble.
+.PP
+.SH LANGUAGE OPTIONS
+The following options control the dialect of C that the compiler
+accepts:
+.TP
+.B \-ansi
+Support all ANSI standard C programs.
+.Sp
+This turns off certain features of GNU C that are incompatible with
+ANSI C, such as the \c
+.B asm\c
+\&, \c
+.B inline\c
+\& and \c
+.B typeof
+keywords, and predefined macros such as \c
+.B unix\c
+\& and \c
+.B vax
+that identify the type of system you are using. It also enables the
+undesirable and rarely used ANSI trigraph feature, and disallows `\|\c
+.B $\c
+\&\|' as part of identifiers.
+.Sp
+The alternate keywords \c
+.B _\|_asm_\|_\c
+\&, \c
+.B _\|_extension_\|_\c
+\&,
+.B _\|_inline_\|_\c
+\& and \c
+.B _\|_typeof_\|_\c
+\& continue to work despite
+`\|\c
+.B \-ansi\c
+\&\|'. You would not want to use them in an ANSI C program, of
+course, but it is useful to put them in header files that might be included
+in compilations done with `\|\c
+.B \-ansi\c
+\&\|'. Alternate predefined macros
+such as \c
+.B _\|_unix_\|_\c
+\& and \c
+.B _\|_vax_\|_\c
+\& are also available, with or
+without `\|\c
+.B \-ansi\c
+\&\|'.
+.Sp
+The `\|\c
+.B \-ansi\c
+\&\|' option does not cause non-ANSI programs to be
+rejected gratuitously. For that, `\|\c
+.B \-pedantic\c
+\&\|' is required in
+addition to `\|\c
+.B \-ansi\c
+\&\|'.
+.Sp
+The preprocessor predefines a macro \c
+.B _\|_STRICT_ANSI_\|_\c
+\& when you use the `\|\c
+.B \-ansi\c
+\&\|'
+option. Some header files may notice this macro and refrain
+from declaring certain functions or defining certain macros that the
+ANSI standard doesn't call for; this is to avoid interfering with any
+programs that might use these names for other things.
+.TP
+.B \-fno\-asm
+Do not recognize \c
+.B asm\c
+\&, \c
+.B inline\c
+\& or \c
+.B typeof\c
+\& as a
+keyword. These words may then be used as identifiers. You can
+use \c
+.B _\|_asm_\|_\c
+\&, \c
+.B _\|_inline_\|_\c
+\& and \c
+.B _\|_typeof_\|_\c
+\& instead.
+`\|\c
+.B \-ansi\c
+\&\|' implies `\|\c
+.B \-fno\-asm\c
+\&\|'.
+.TP
+.B \-fno\-builtin
+Don't recognize built-in functions that do not begin with two leading
+underscores. Currently, the functions affected include \c
+.B _exit\c
+\&,
+.B abort\c
+\&, \c
+.B abs\c
+\&, \c
+.B alloca\c
+\&, \c
+.B cos\c
+\&, \c
+.B exit\c
+\&,
+.B fabs\c
+\&, \c
+.B labs\c
+\&, \c
+.B memcmp\c
+\&, \c
+.B memcpy\c
+\&, \c
+.B sin\c
+\&,
+.B sqrt\c
+\&, \c
+.B strcmp\c
+\&, \c
+.B strcpy\c
+\&, and \c
+.B strlen\c
+\&.
+.Sp
+The `\|\c
+.B \-ansi\c
+\&\|' option prevents \c
+.B alloca\c
+\& and \c
+.B _exit\c
+\& from
+being builtin functions.
+.TP
+.B \-fhosted
+Compile for a hosted environment; this implies the `\|\c
+.B \-fbuiltin\c
+\&\|' option, and implies that suspicious declarations of
+.B main\c
+\& should be warned about.
+.TP
+.B \-ffreestanding
+Compile for a freestanding environment; this implies the `\|\c
+.B \-fno-builtin\c
+\&\|' option, and implies that
+.B main\c
+\& has no special requirements.
+.TP
+.B \-fno\-strict\-prototype
+Treat a function declaration with no arguments, such as `\|\c
+.B int foo
+();\c
+\&\|', as C would treat it\(em\&as saying nothing about the number of
+arguments or their types (C++ only). Normally, such a declaration in
+C++ means that the function \c
+.B foo\c
+\& takes no arguments.
+.TP
+.B \-trigraphs
+Support ANSI C trigraphs. The `\|\c
+.B \-ansi\c
+\&\|' option implies `\|\c
+.B \-trigraphs\c
+\&\|'.
+.TP
+.B \-traditional
+Attempt to support some aspects of traditional C compilers.
+For details, see the GNU C Manual; the duplicate list here
+has been deleted so that we won't get complaints when it
+is out of date.
+.Sp
+But one note about C++ programs only (not C). `\|\c
+.B \-traditional\c
+\&\|' has one additional effect for C++: assignment to
+.B this
+is permitted. This is the same as the effect of `\|\c
+.B \-fthis\-is\-variable\c
+\&\|'.
+.TP
+.B \-traditional\-cpp
+Attempt to support some aspects of traditional C preprocessors.
+This includes the items that specifically mention the preprocessor above,
+but none of the other effects of `\|\c
+.B \-traditional\c
+\&\|'.
+.TP
+.B \-fdollars\-in\-identifiers
+Permit the use of `\|\c
+.B $\c
+\&\|' in identifiers (C++ only). You can also use
+`\|\c
+.B \-fno\-dollars\-in\-identifiers\c
+\&\|' to explicitly prohibit use of
+`\|\c
+.B $\c
+\&\|'. (GNU C++ allows `\|\c
+.B $\c
+\&\|' by default on some target systems
+but not others.)
+.TP
+.B \-fenum\-int\-equiv
+Permit implicit conversion of \c
+.B int\c
+\& to enumeration types (C++
+only). Normally GNU C++ allows conversion of \c
+.B enum\c
+\& to \c
+.B int\c
+\&,
+but not the other way around.
+.TP
+.B \-fexternal\-templates
+Produce smaller code for template declarations, by generating only a
+single copy of each template function where it is defined (C++ only).
+To use this option successfully, you must also mark all files that
+use templates with either `\|\c
+.B #pragma implementation\c
+\&\|' (the definition) or
+`\|\c
+.B #pragma interface\c
+\&\|' (declarations).
+
+When your code is compiled with `\|\c
+.B \-fexternal\-templates\c
+\&\|', all
+template instantiations are external. You must arrange for all
+necessary instantiations to appear in the implementation file; you can
+do this with a \c
+.B typedef\c
+\& that references each instantiation needed.
+Conversely, when you compile using the default option
+`\|\c
+.B \-fno\-external\-templates\c
+\&\|', all template instantiations are
+explicitly internal.
+.TP
+.B \-fall\-virtual
+Treat all possible member functions as virtual, implicitly. All
+member functions (except for constructor functions and
+.B new
+or
+.B delete
+member operators) are treated as virtual functions of the class where
+they appear.
+.Sp
+This does not mean that all calls to these member functions will be
+made through the internal table of virtual functions. Under some
+circumstances, the compiler can determine that a call to a given
+virtual function can be made directly; in these cases the calls are
+direct in any case.
+.TP
+.B \-fcond\-mismatch
+Allow conditional expressions with mismatched types in the second and
+third arguments. The value of such an expression is void.
+.TP
+.B \-fthis\-is\-variable
+Permit assignment to \c
+.B this\c
+\& (C++ only). The incorporation of
+user-defined free store management into C++ has made assignment to
+`\|\c
+.B this\c
+\&\|' an anachronism. Therefore, by default it is invalid to
+assign to \c
+.B this\c
+\& within a class member function. However, for
+backwards compatibility, you can make it valid with
+`\|\c
+.B \-fthis-is-variable\c
+\&\|'.
+.TP
+.B \-funsigned\-char
+Let the type \c
+.B char\c
+\& be unsigned, like \c
+.B unsigned char\c
+\&.
+.Sp
+Each kind of machine has a default for what \c
+.B char\c
+\& should
+be. It is either like \c
+.B unsigned char\c
+\& by default or like
+.B signed char\c
+\& by default.
+.Sp
+Ideally, a portable program should always use \c
+.B signed char\c
+\& or
+.B unsigned char\c
+\& when it depends on the signedness of an object.
+But many programs have been written to use plain \c
+.B char\c
+\& and
+expect it to be signed, or expect it to be unsigned, depending on the
+machines they were written for. This option, and its inverse, let you
+make such a program work with the opposite default.
+.Sp
+The type \c
+.B char\c
+\& is always a distinct type from each of
+.B signed char\c
+\& and \c
+.B unsigned char\c
+\&, even though its behavior
+is always just like one of those two.
+.TP
+.B \-fsigned\-char
+Let the type \c
+.B char\c
+\& be signed, like \c
+.B signed char\c
+\&.
+.Sp
+Note that this is equivalent to `\|\c
+.B \-fno\-unsigned\-char\c
+\&\|', which is
+the negative form of `\|\c
+.B \-funsigned\-char\c
+\&\|'. Likewise,
+`\|\c
+.B \-fno\-signed\-char\c
+\&\|' is equivalent to `\|\c
+.B \-funsigned\-char\c
+\&\|'.
+.TP
+.B \-fsigned\-bitfields
+.TP
+.B \-funsigned\-bitfields
+.TP
+.B \-fno\-signed\-bitfields
+.TP
+.B \-fno\-unsigned\-bitfields
+These options control whether a bitfield is
+signed or unsigned, when declared with no explicit `\|\c
+.B signed\c
+\&\|' or `\|\c
+.B unsigned\c
+\&\|' qualifier. By default, such a bitfield is
+signed, because this is consistent: the basic integer types such as
+.B int\c
+\& are signed types.
+.Sp
+However, when you specify `\|\c
+.B \-traditional\c
+\&\|', bitfields are all unsigned
+no matter what.
+.TP
+.B \-fwritable\-strings
+Store string constants in the writable data segment and don't uniquize
+them. This is for compatibility with old programs which assume they
+can write into string constants. `\|\c
+.B \-traditional\c
+\&\|' also has this
+effect.
+.Sp
+Writing into string constants is a very bad idea; \*(lqconstants\*(rq should
+be constant.
+.SH PREPROCESSOR OPTIONS
+These options control the C preprocessor, which is run on each C source
+file before actual compilation.
+.PP
+If you use the `\|\c
+.B \-E\c
+\&\|' option, GCC does nothing except preprocessing.
+Some of these options make sense only together with `\|\c
+.B \-E\c
+\&\|' because
+they cause the preprocessor output to be unsuitable for actual
+compilation.
+.TP
+.BI "\-include " "file"
+Process \c
+.I file\c
+\& as input before processing the regular input file.
+In effect, the contents of \c
+.I file\c
+\& are compiled first. Any `\|\c
+.B \-D\c
+\&\|'
+and `\|\c
+.B \-U\c
+\&\|' options on the command line are always processed before
+`\|\c
+.B \-include \c
+.I file\c
+\&\c
+\&\|', regardless of the order in which they are
+written. All the `\|\c
+.B \-include\c
+\&\|' and `\|\c
+.B \-imacros\c
+\&\|' options are
+processed in the order in which they are written.
+.TP
+.BI "\-imacros " file
+Process \c
+.I file\c
+\& as input, discarding the resulting output, before
+processing the regular input file. Because the output generated from
+.I file\c
+\& is discarded, the only effect of `\|\c
+.B \-imacros \c
+.I file\c
+\&\c
+\&\|' is to
+make the macros defined in \c
+.I file\c
+\& available for use in the main
+input. The preprocessor evaluates any `\|\c
+.B \-D\c
+\&\|' and `\|\c
+.B \-U\c
+\&\|' options
+on the command line before processing `\|\c
+.B \-imacros\c
+.I file\c
+\&\|', regardless of the order in
+which they are written. All the `\|\c
+.B \-include\c
+\&\|' and `\|\c
+.B \-imacros\c
+\&\|'
+options are processed in the order in which they are written.
+.TP
+.BI "\-idirafter " "dir"
+Add the directory \c
+.I dir\c
+\& to the second include path. The directories
+on the second include path are searched when a header file is not found
+in any of the directories in the main include path (the one that
+`\|\c
+.B \-I\c
+\&\|' adds to).
+.TP
+.BI "\-iprefix " "prefix"
+Specify \c
+.I prefix\c
+\& as the prefix for subsequent `\|\c
+.B \-iwithprefix\c
+\&\|'
+options.
+.TP
+.BI "\-iwithprefix " "dir"
+Add a directory to the second include path. The directory's name is
+made by concatenating \c
+.I prefix\c
+\& and \c
+.I dir\c
+\&, where \c
+.I prefix
+was specified previously with `\|\c
+.B \-iprefix\c
+\&\|'.
+.TP
+.B \-nostdinc
+Do not search the standard system directories for header files. Only
+the directories you have specified with `\|\c
+.B \-I\c
+\&\|' options (and the
+current directory, if appropriate) are searched.
+.Sp
+By using both `\|\c
+.B \-nostdinc\c
+\&\|' and `\|\c
+.B \-I\-\c
+\&\|', you can limit the include-file search file to only those
+directories you specify explicitly.
+.TP
+.B \-nostdinc++
+Do not search for header files in the C++\-specific standard directories,
+but do still search the other standard directories.
+(This option is used when building `\|\c
+.B libg++\c
+\&\|'.)
+.TP
+.B \-undef
+Do not predefine any nonstandard macros. (Including architecture flags).
+.TP
+.B \-E
+Run only the C preprocessor. Preprocess all the C source files
+specified and output the results to standard output or to the
+specified output file.
+.TP
+.B \-C
+Tell the preprocessor not to discard comments. Used with the
+`\|\c
+.B \-E\c
+\&\|' option.
+.TP
+.B \-P
+Tell the preprocessor not to generate `\|\c
+.B #line\c
+\&\|' commands.
+Used with the `\|\c
+.B \-E\c
+\&\|' option.
+.TP
+.B \-M\ [ \-MG ]
+Tell the preprocessor to output a rule suitable for \c
+.B make
+describing the dependencies of each object file. For each source file,
+the preprocessor outputs one \c
+.B make\c
+\&-rule whose target is the object
+file name for that source file and whose dependencies are all the files
+`\|\c
+.B #include\c
+\&\|'d in it. This rule may be a single line or may be
+continued with `\|\c
+.B \e\c
+\&\|'-newline if it is long. The list of rules is
+printed on standard output instead of the preprocessed C program.
+.Sp
+`\|\c
+.B \-M\c
+\&\|' implies `\|\c
+.B \-E\c
+\&\|'.
+.Sp
+`\|\c
+.B \-MG\c
+\&\|' says to treat missing header files as generated files and assume \c
+they live in the same directory as the source file. It must be specified \c
+in addition to `\|\c
+.B \-M\c
+\&\|'.
+.TP
+.B \-MM\ [ \-MG ]
+Like `\|\c
+.B \-M\c
+\&\|' but the output mentions only the user header files
+included with `\|\c
+.B #include "\c
+.I file\c
+\&"\c
+\&\|'. System header files
+included with `\|\c
+.B #include <\c
+.I file\c
+\&>\c
+\&\|' are omitted.
+.TP
+.B \-MD
+Like `\|\c
+.B \-M\c
+\&\|' but the dependency information is written to files with
+names made by replacing `\|\c
+.B .o\c
+\&\|' with `\|\c
+.B .d\c
+\&\|' at the end of the
+output file names. This is in addition to compiling the file as
+specified\(em\&`\|\c
+.B \-MD\c
+\&\|' does not inhibit ordinary compilation the way
+`\|\c
+.B \-M\c
+\&\|' does.
+.Sp
+The Mach utility `\|\c
+.B md\c
+\&\|' can be used to merge the `\|\c
+.B .d\c
+\&\|' files
+into a single dependency file suitable for using with the `\|\c
+.B make\c
+\&\|'
+command.
+.TP
+.B \-MMD
+Like `\|\c
+.B \-MD\c
+\&\|' except mention only user header files, not system
+header files.
+.TP
+.B \-H
+Print the name of each header file used, in addition to other normal
+activities.
+.TP
+.BI "\-A" "question" ( answer )
+Assert the answer
+.I answer
+for
+.I question\c
+\&, in case it is tested
+with a preprocessor conditional such as `\|\c
+.BI "#if #" question ( answer )\c
+\&\|'. `\|\c
+.B \-A\-\c
+\&\|' disables the standard
+assertions that normally describe the target machine.
+.TP
+.BI "\-A" "question"\c
+\&(\c
+.I answer\c
+\&)
+Assert the answer \c
+.I answer\c
+\& for \c
+.I question\c
+\&, in case it is tested
+with a preprocessor conditional such as `\|\c
+.B #if
+#\c
+.I question\c
+\&(\c
+.I answer\c
+\&)\c
+\&\|'. `\|\c
+.B \-A-\c
+\&\|' disables the standard
+assertions that normally describe the target machine.
+.TP
+.BI \-D macro
+Define macro \c
+.I macro\c
+\& with the string `\|\c
+.B 1\c
+\&\|' as its definition.
+.TP
+.BI \-D macro = defn
+Define macro \c
+.I macro\c
+\& as \c
+.I defn\c
+\&. All instances of `\|\c
+.B \-D\c
+\&\|' on
+the command line are processed before any `\|\c
+.B \-U\c
+\&\|' options.
+.TP
+.BI \-U macro
+Undefine macro \c
+.I macro\c
+\&. `\|\c
+.B \-U\c
+\&\|' options are evaluated after all `\|\c
+.B \-D\c
+\&\|' options, but before any `\|\c
+.B \-include\c
+\&\|' and `\|\c
+.B \-imacros\c
+\&\|' options.
+.TP
+.B \-dM
+Tell the preprocessor to output only a list of the macro definitions
+that are in effect at the end of preprocessing. Used with the `\|\c
+.B \-E\c
+\&\|'
+option.
+.TP
+.B \-dD
+Tell the preprocessor to pass all macro definitions into the output, in
+their proper sequence in the rest of the output.
+.TP
+.B \-dN
+Like `\|\c
+.B \-dD\c
+\&\|' except that the macro arguments and contents are omitted.
+Only `\|\c
+.B #define \c
+.I name\c
+\&\c
+\&\|' is included in the output.
+.SH ASSEMBLER OPTION
+.TP
+.BI "\-Wa," "option"
+Pass \c
+.I option\c
+\& as an option to the assembler. If \c
+.I option
+contains commas, it is split into multiple options at the commas.
+.SH LINKER OPTIONS
+These options come into play when the compiler links object files into
+an executable output file. They are meaningless if the compiler is
+not doing a link step.
+.TP
+.I object-file-name
+A file name that does not end in a special recognized suffix is
+considered to name an object file or library. (Object files are
+distinguished from libraries by the linker according to the file
+contents.) If GCC does a link step, these object files are used as input
+to the linker.
+.TP
+.BI \-l library
+Use the library named \c
+.I library\c
+\& when linking.
+.Sp
+The linker searches a standard list of directories for the library,
+which is actually a file named `\|\c
+.B lib\c
+.I library\c
+\&.a\c
+\&\|'. The linker
+then uses this file as if it had been specified precisely by name.
+.Sp
+The directories searched include several standard system directories
+plus any that you specify with `\|\c
+.B \-L\c
+\&\|'.
+.Sp
+Normally the files found this way are library files\(em\&archive files
+whose members are object files. The linker handles an archive file by
+scanning through it for members which define symbols that have so far
+been referenced but not defined. However, if the linker finds an
+ordinary object file rather than a library, the object file is linked
+in the usual fashion. The only difference between using an `\|\c
+.B \-l\c
+\&\|' option and specifying a file
+name is that `\|\c
+.B \-l\c
+\&\|' surrounds
+.I library
+with `\|\c
+.B lib\c
+\&\|' and `\|\c
+.B .a\c
+\&\|' and searches several directories.
+.TP
+.B \-lobjc
+You need this special case of the
+.B \-l
+option in order to link an Objective C program.
+.TP
+.B \-nostartfiles
+Do not use the standard system startup files when linking.
+The standard libraries are used normally.
+.TP
+.B \-nostdlib
+Don't use the standard system libraries and startup files when linking.
+Only the files you specify will be passed to the linker.
+.TP
+.B \-static
+On systems that support dynamic linking, this prevents linking with the shared
+libraries. On other systems, this option has no effect.
+.TP
+.B \-shared
+Produce a shared object which can then be linked with other objects to
+form an executable. Only a few systems support this option.
+.TP
+.B \-symbolic
+Bind references to global symbols when building a shared object. Warn
+about any unresolved references (unless overridden by the link editor
+option `\|\c
+.B
+\-Xlinker \-z \-Xlinker defs\c
+\&\|'). Only a few systems support
+this option.
+.TP
+.BI "\-Xlinker " "option"
+Pass \c
+.I option
+as an option to the linker. You can use this to
+supply system-specific linker options which GNU CC does not know how to
+recognize.
+.Sp
+If you want to pass an option that takes an argument, you must use
+`\|\c
+.B \-Xlinker\c
+\&\|' twice, once for the option and once for the argument.
+For example, to pass `\|\c
+.B
+\-assert definitions\c
+\&\|', you must write
+`\|\c
+.B
+\-Xlinker \-assert \-Xlinker definitions\c
+\&\|'. It does not work to write
+`\|\c
+.B
+\-Xlinker "\-assert definitions"\c
+\&\|', because this passes the entire
+string as a single argument, which is not what the linker expects.
+.TP
+.BI "\-Wl," "option"
+Pass \c
+.I option\c
+\& as an option to the linker. If \c
+.I option\c
+\& contains
+commas, it is split into multiple options at the commas.
+.TP
+.BI "\-u " "symbol"
+Pretend the symbol
+.I symbol
+is undefined, to force linking of
+library modules to define it. You can use `\|\c
+.B \-u\c
+\&\|' multiple times with
+different symbols to force loading of additional library modules.
+.SH DIRECTORY OPTIONS
+These options specify directories to search for header files, for
+libraries and for parts of the compiler:
+.TP
+.BI "\-I" "dir"
+Append directory \c
+.I dir\c
+\& to the list of directories searched for include files.
+.TP
+.B \-I\-
+Any directories you specify with `\|\c
+.B \-I\c
+\&\|' options before the `\|\c
+.B \-I\-\c
+\&\|'
+option are searched only for the case of `\|\c
+.B
+#include "\c
+.I file\c
+.B
+\&"\c
+\&\|';
+they are not searched for `\|\c
+.B #include <\c
+.I file\c
+\&>\c
+\&\|'.
+.Sp
+If additional directories are specified with `\|\c
+.B \-I\c
+\&\|' options after
+the `\|\c
+.B \-I\-\c
+\&\|', these directories are searched for all `\|\c
+.B #include\c
+\&\|'
+directives. (Ordinarily \c
+.I all\c
+\& `\|\c
+.B \-I\c
+\&\|' directories are used
+this way.)
+.Sp
+In addition, the `\|\c
+.B \-I\-\c
+\&\|' option inhibits the use of the current
+directory (where the current input file came from) as the first search
+directory for `\|\c
+.B
+#include "\c
+.I file\c
+.B
+\&"\c
+\&\|'. There is no way to
+override this effect of `\|\c
+.B \-I\-\c
+\&\|'. With `\|\c
+.B \-I.\c
+\&\|' you can specify
+searching the directory which was current when the compiler was
+invoked. That is not exactly the same as what the preprocessor does
+by default, but it is often satisfactory.
+.Sp
+`\|\c
+.B \-I\-\c
+\&\|' does not inhibit the use of the standard system directories
+for header files. Thus, `\|\c
+.B \-I\-\c
+\&\|' and `\|\c
+.B \-nostdinc\c
+\&\|' are
+independent.
+.TP
+.BI "\-L" "dir"
+Add directory \c
+.I dir\c
+\& to the list of directories to be searched
+for `\|\c
+.B \-l\c
+\&\|'.
+.TP
+.BI "\-B" "prefix"
+This option specifies where to find the executables, libraries and
+data files of the compiler itself.
+.Sp
+The compiler driver program runs one or more of the subprograms
+`\|\c
+.B cpp\c
+\&\|', `\|\c
+.B cc1\c
+\&\|' (or, for C++, `\|\c
+.B cc1plus\c
+\&\|'), `\|\c
+.B as\c
+\&\|' and `\|\c
+.B ld\c
+\&\|'. It tries
+.I prefix\c
+\& as a prefix for each program it tries to run, both with and
+without `\|\c
+.I machine\c
+.B /\c
+.I version\c
+.B /\c
+\&\|'.
+.Sp
+For each subprogram to be run, the compiler driver first tries the
+`\|\c
+.B \-B\c
+\&\|' prefix, if any. If that name is not found, or if `\|\c
+.B \-B\c
+\&\|'
+was not specified, the driver tries two standard prefixes, which are
+`\|\c
+.B /usr/lib/gcc/\c
+\&\|' and `\|\c
+.B /usr/local/lib/gcc-lib/\c
+\&\|'. If neither of
+those results in a file name that is found, the compiler driver
+searches for the unmodified program
+name, using the directories specified in your
+`\|\c
+.B PATH\c
+\&\|' environment variable.
+.Sp
+The run-time support file `\|\c
+.B libgcc.a\c
+\&\|' is also searched for using the
+`\|\c
+.B \-B\c
+\&\|' prefix, if needed. If it is not found there, the two
+standard prefixes above are tried, and that is all. The file is left
+out of the link if it is not found by those means. Most of the time,
+on most machines, `\|\c
+.B libgcc.a\c
+\&\|' is not actually necessary.
+.Sp
+You can get a similar result from the environment variable
+.B GCC_EXEC_PREFIX\c
+\&; if it is defined, its value is used as a prefix
+in the same way. If both the `\|\c
+.B \-B\c
+\&\|' option and the
+.B GCC_EXEC_PREFIX\c
+\& variable are present, the `\|\c
+.B \-B\c
+\&\|' option is
+used first and the environment variable value second.
+.SH WARNING OPTIONS
+Warnings are diagnostic messages that report constructions which
+are not inherently erroneous but which are risky or suggest there
+may have been an error.
+.Sp
+These options control the amount and kinds of warnings produced by GNU
+CC:
+.TP
+.B \-fsyntax\-only
+Check the code for syntax errors, but don't emit any output.
+.TP
+.B \-w
+Inhibit all warning messages.
+.TP
+.B \-Wno\-import
+Inhibit warning messages about the use of
+.BR #import .
+.TP
+.B \-pedantic
+Issue all the warnings demanded by strict ANSI standard C; reject
+all programs that use forbidden extensions.
+.Sp
+Valid ANSI standard C programs should compile properly with or without
+this option (though a rare few will require `\|\c
+.B \-ansi\c
+\&\|'). However,
+without this option, certain GNU extensions and traditional C features
+are supported as well. With this option, they are rejected. There is
+no reason to \c
+.I use\c
+\& this option; it exists only to satisfy pedants.
+.Sp
+`\|\c
+.B \-pedantic\c
+\&\|' does not cause warning messages for use of the
+alternate keywords whose names begin and end with `\|\c
+.B _\|_\c
+\&\|'. Pedantic
+warnings are also disabled in the expression that follows
+.B _\|_extension_\|_\c
+\&. However, only system header files should use
+these escape routes; application programs should avoid them.
+.TP
+.B \-pedantic\-errors
+Like `\|\c
+.B \-pedantic\c
+\&\|', except that errors are produced rather than
+warnings.
+.TP
+.B \-W
+Print extra warning messages for these events:
+.TP
+\ \ \ \(bu
+A nonvolatile automatic variable might be changed by a call to
+.B longjmp\c
+\&. These warnings are possible only in
+optimizing compilation.
+.Sp
+The compiler sees only the calls to \c
+.B setjmp\c
+\&. It cannot know
+where \c
+.B longjmp\c
+\& will be called; in fact, a signal handler could
+call it at any point in the code. As a result, you may get a warning
+even when there is in fact no problem because \c
+.B longjmp\c
+\& cannot
+in fact be called at the place which would cause a problem.
+.TP
+\ \ \ \(bu
+A function can return either with or without a value. (Falling
+off the end of the function body is considered returning without
+a value.) For example, this function would evoke such a
+warning:
+.Sp
+.nf
+foo (a)
+{
+ if (a > 0)
+ return a;
+}
+.Sp
+.fi
+Spurious warnings can occur because GNU CC does not realize that
+certain functions (including \c
+.B abort\c
+\& and \c
+.B longjmp\c
+\&)
+will never return.
+.TP
+\ \ \ \(bu
+An expression-statement or the left-hand side of a comma expression
+contains no side effects.
+To suppress the warning, cast the unused expression to void.
+For example, an expression such as `\|\c
+.B x[i,j]\c
+\&\|' will cause a warning,
+but `\|\c
+.B x[(void)i,j]\c
+\&\|' will not.
+.TP
+\ \ \ \(bu
+An unsigned value is compared against zero with `\|\c
+.B >\c
+\&\|' or `\|\c
+.B <=\c
+\&\|'.
+.PP
+.TP
+.B \-Wimplicit-int
+Warn whenever a declaration does not specify a type.
+.TP
+.B \-Wimplicit-function-declaration
+Warn whenever a function is used before being declared.
+.TP
+.B \-Wimplicit
+Same as -Wimplicit-int and -Wimplicit-function-declaration.
+.TP
+.B \-Wmain
+Warn if the
+.B main
+function is declared or defined with a suspicious type.
+Typically, it is a function with external linkage, returning
+.B int\c
+\&, and
+taking zero or two arguments.
+
+.TP
+.B \-Wreturn\-type
+Warn whenever a function is defined with a return-type that defaults
+to \c
+.B int\c
+\&. Also warn about any \c
+.B return\c
+\& statement with no
+return-value in a function whose return-type is not \c
+.B void\c
+\&.
+.TP
+.B \-Wunused
+Warn whenever a local variable is unused aside from its declaration,
+whenever a function is declared static but never defined, and whenever
+a statement computes a result that is explicitly not used.
+.TP
+.B \-Wswitch
+Warn whenever a \c
+.B switch\c
+\& statement has an index of enumeral type
+and lacks a \c
+.B case\c
+\& for one or more of the named codes of that
+enumeration. (The presence of a \c
+.B default\c
+\& label prevents this
+warning.) \c
+.B case\c
+\& labels outside the enumeration range also
+provoke warnings when this option is used.
+.TP
+.B \-Wcomment
+Warn whenever a comment-start sequence `\|\c
+.B /\(**\c
+\&\|' appears in a comment.
+.TP
+.B \-Wtrigraphs
+Warn if any trigraphs are encountered (assuming they are enabled).
+.TP
+.B \-Wformat
+Check calls to \c
+.B printf\c
+\& and \c
+.B scanf\c
+\&, etc., to make sure that
+the arguments supplied have types appropriate to the format string
+specified.
+.TP
+.B \-Wchar\-subscripts
+Warn if an array subscript has type
+.BR char .
+This is a common cause of error, as programmers often forget that this
+type is signed on some machines.
+.TP
+.B \-Wuninitialized
+An automatic variable is used without first being initialized.
+.Sp
+These warnings are possible only in optimizing compilation,
+because they require data flow information that is computed only
+when optimizing. If you don't specify `\|\c
+.B \-O\c
+\&\|', you simply won't
+get these warnings.
+.Sp
+These warnings occur only for variables that are candidates for
+register allocation. Therefore, they do not occur for a variable that
+is declared \c
+.B volatile\c
+\&, or whose address is taken, or whose size
+is other than 1, 2, 4 or 8 bytes. Also, they do not occur for
+structures, unions or arrays, even when they are in registers.
+.Sp
+Note that there may be no warning about a variable that is used only
+to compute a value that itself is never used, because such
+computations may be deleted by data flow analysis before the warnings
+are printed.
+.Sp
+These warnings are made optional because GNU CC is not smart
+enough to see all the reasons why the code might be correct
+despite appearing to have an error. Here is one example of how
+this can happen:
+.Sp
+.nf
+{
+ int x;
+ switch (y)
+ {
+ case 1: x = 1;
+ break;
+ case 2: x = 4;
+ break;
+ case 3: x = 5;
+ }
+ foo (x);
+}
+.Sp
+.fi
+If the value of \c
+.B y\c
+\& is always 1, 2 or 3, then \c
+.B x\c
+\& is
+always initialized, but GNU CC doesn't know this. Here is
+another common case:
+.Sp
+.nf
+{
+ int save_y;
+ if (change_y) save_y = y, y = new_y;
+ .\|.\|.
+ if (change_y) y = save_y;
+}
+.Sp
+.fi
+This has no bug because \c
+.B save_y\c
+\& is used only if it is set.
+.Sp
+Some spurious warnings can be avoided if you declare as
+.B volatile\c
+\& all the functions you use that never return.
+.TP
+.B \-Wparentheses
+Warn if parentheses are omitted in certain contexts.
+.TP
+.B \-Wtemplate\-debugging
+When using templates in a C++ program, warn if debugging is not yet
+fully available (C++ only).
+.TP
+.B \-Wall
+All of the above `\|\c
+.B \-W\c
+\&\|' options combined. These are all the
+options which pertain to usage that we recommend avoiding and that we
+believe is easy to avoid, even in conjunction with macros.
+.PP
+The remaining `\|\c
+.B \-W.\|.\|.\c
+\&\|' options are not implied by `\|\c
+.B \-Wall\c
+\&\|'
+because they warn about constructions that we consider reasonable to
+use, on occasion, in clean programs.
+.TP
+.B \-Wtraditional
+Warn about certain constructs that behave differently in traditional and
+ANSI C.
+.TP
+\ \ \ \(bu
+Macro arguments occurring within string constants in the macro body.
+These would substitute the argument in traditional C, but are part of
+the constant in ANSI C.
+.TP
+\ \ \ \(bu
+A function declared external in one block and then used after the end of
+the block.
+.TP
+\ \ \ \(bu
+A \c
+.B switch\c
+\& statement has an operand of type \c
+.B long\c
+\&.
+.PP
+.TP
+.B \-Wshadow
+Warn whenever a local variable shadows another local variable.
+.TP
+.BI "\-Wid\-clash\-" "len"
+Warn whenever two distinct identifiers match in the first \c
+.I len
+characters. This may help you prepare a program that will compile
+with certain obsolete, brain-damaged compilers.
+.TP
+.B \-Wpointer\-arith
+Warn about anything that depends on the \*(lqsize of\*(rq a function type or
+of \c
+.B void\c
+\&. GNU C assigns these types a size of 1, for
+convenience in calculations with \c
+.B void \(**\c
+\& pointers and pointers
+to functions.
+.TP
+.B \-Wcast\-qual
+Warn whenever a pointer is cast so as to remove a type qualifier from
+the target type. For example, warn if a \c
+.B const char \(**\c
+\& is cast
+to an ordinary \c
+.B char \(**\c
+\&.
+.TP
+.B \-Wcast\-align
+Warn whenever a pointer is cast such that the required alignment of the
+target is increased. For example, warn if a \c
+.B char \(**\c
+\& is cast to
+an \c
+.B int \(**\c
+\& on machines where integers can only be accessed at
+two- or four-byte boundaries.
+.TP
+.B \-Wwrite\-strings
+Give string constants the type \c
+.B const char[\c
+.I length\c
+.B ]\c
+\& so that
+copying the address of one into a non-\c
+.B const\c
+\& \c
+.B char \(**
+pointer will get a warning. These warnings will help you find at
+compile time code that can try to write into a string constant, but
+only if you have been very careful about using \c
+.B const\c
+\& in
+declarations and prototypes. Otherwise, it will just be a nuisance;
+this is why we did not make `\|\c
+.B \-Wall\c
+\&\|' request these warnings.
+.TP
+.B \-Wconversion
+Warn if a prototype causes a type conversion that is different from what
+would happen to the same argument in the absence of a prototype. This
+includes conversions of fixed point to floating and vice versa, and
+conversions changing the width or signedness of a fixed point argument
+except when the same as the default promotion.
+.TP
+.B \-Waggregate\-return
+Warn if any functions that return structures or unions are defined or
+called. (In languages where you can return an array, this also elicits
+a warning.)
+.TP
+.B \-Wstrict\-prototypes
+Warn if a function is declared or defined without specifying the
+argument types. (An old-style function definition is permitted without
+a warning if preceded by a declaration which specifies the argument
+types.)
+.TP
+.B \-Wmissing\-prototypes
+Warn if a global function is defined without a previous prototype
+declaration. This warning is issued even if the definition itself
+provides a prototype. The aim is to detect global functions that fail
+to be declared in header files.
+.TP
+.B \-Wmissing\-declarations
+Warn if a global function is defined without a previous declaration.
+Do so even if the definition itself provides a prototype.
+Use this option to detect global functions that are not declared in
+header files.
+.TP
+.B \-Wredundant-decls
+Warn if anything is declared more than once in the same scope, even in
+cases where multiple declaration is valid and changes nothing.
+.TP
+.B \-Wnested-externs
+Warn if an \c
+.B extern\c
+\& declaration is encountered within an function.
+.TP
+.B \-Wenum\-clash
+Warn about conversion between different enumeration types (C++ only).
+.TP
+.B \-Woverloaded\-virtual
+(C++ only.)
+In a derived class, the definitions of virtual functions must match
+the type signature of a virtual function declared in the base class.
+Use this option to request warnings when a derived class declares a
+function that may be an erroneous attempt to define a virtual
+function: that is, warn when a function with the same name as a
+virtual function in the base class, but with a type signature that
+doesn't match any virtual functions from the base class.
+.TP
+.B \-Winline
+Warn if a function can not be inlined, and either it was declared as inline,
+or else the
+.B \-finline\-functions
+option was given.
+.TP
+.B \-Werror
+Treat warnings as errors; abort compilation after any warning.
+.SH DEBUGGING OPTIONS
+GNU CC has various special options that are used for debugging
+either your program or GCC:
+.TP
+.B \-g
+Produce debugging information in the operating system's native format
+(stabs, COFF, XCOFF, or DWARF). GDB can work with this debugging
+information.
+.Sp
+On most systems that use stabs format, `\|\c
+.B \-g\c
+\&\|' enables use of extra
+debugging information that only GDB can use; this extra information
+makes debugging work better in GDB but will probably make other debuggers
+crash or
+refuse to read the program. If you want to control for certain whether
+to generate the extra information, use `\|\c
+.B \-gstabs+\c
+\&\|', `\|\c
+.B \-gstabs\c
+\&\|',
+`\|\c
+.B \-gxcoff+\c
+\&\|', `\|\c
+.B \-gxcoff\c
+\&\|', `\|\c
+.B \-gdwarf+\c
+\&\|', or `\|\c
+.B \-gdwarf\c
+\&\|'
+(see below).
+.Sp
+Unlike most other C compilers, GNU CC allows you to use `\|\c
+.B \-g\c
+\&\|' with
+`\|\c
+.B \-O\c
+\&\|'. The shortcuts taken by optimized code may occasionally
+produce surprising results: some variables you declared may not exist
+at all; flow of control may briefly move where you did not expect it;
+some statements may not be executed because they compute constant
+results or their values were already at hand; some statements may
+execute in different places because they were moved out of loops.
+.Sp
+Nevertheless it proves possible to debug optimized output. This makes
+it reasonable to use the optimizer for programs that might have bugs.
+.PP
+The following options are useful when GNU CC is generated with the
+capability for more than one debugging format.
+.TP
+.B \-ggdb
+Produce debugging information in the native format (if that is supported),
+including GDB extensions if at all possible.
+.TP
+.B \-gstabs
+Produce debugging information in stabs format (if that is supported),
+without GDB extensions. This is the format used by DBX on most BSD
+systems.
+.TP
+.B \-gstabs+
+Produce debugging information in stabs format (if that is supported),
+using GNU extensions understood only by the GNU debugger (GDB). The
+use of these extensions is likely to make other debuggers crash or
+refuse to read the program.
+.TP
+.B \-gcoff
+Produce debugging information in COFF format (if that is supported).
+This is the format used by SDB on most System V systems prior to
+System V Release 4.
+.TP
+.B \-gxcoff
+Produce debugging information in XCOFF format (if that is supported).
+This is the format used by the DBX debugger on IBM RS/6000 systems.
+.TP
+.B \-gxcoff+
+Produce debugging information in XCOFF format (if that is supported),
+using GNU extensions understood only by the GNU debugger (GDB). The
+use of these extensions is likely to make other debuggers crash or
+refuse to read the program.
+.TP
+.B \-gdwarf
+Produce debugging information in DWARF format (if that is supported).
+This is the format used by SDB on most System V Release 4 systems.
+.TP
+.B \-gdwarf+
+Produce debugging information in DWARF format (if that is supported),
+using GNU extensions understood only by the GNU debugger (GDB). The
+use of these extensions is likely to make other debuggers crash or
+refuse to read the program.
+.PP
+.BI "\-g" "level"
+.br
+.BI "\-ggdb" "level"
+.br
+.BI "\-gstabs" "level"
+.br
+.BI "\-gcoff" "level"
+.BI "\-gxcoff" "level"
+.TP
+.BI "\-gdwarf" "level"
+Request debugging information and also use \c
+.I level\c
+\& to specify how
+much information. The default level is 2.
+.Sp
+Level 1 produces minimal information, enough for making backtraces in
+parts of the program that you don't plan to debug. This includes
+descriptions of functions and external variables, but no information
+about local variables and no line numbers.
+.Sp
+Level 3 includes extra information, such as all the macro definitions
+present in the program. Some debuggers support macro expansion when
+you use `\|\c
+.B \-g3\c
+\&\|'.
+.TP
+.B \-p
+Generate extra code to write profile information suitable for the
+analysis program \c
+.B prof\c
+\&.
+.TP
+.B \-pg
+Generate extra code to write profile information suitable for the
+analysis program \c
+.B gprof\c
+\&.
+.TP
+.B \-a
+Generate extra code to write profile information for basic blocks,
+which will record the number of times each basic block is executed.
+This data could be analyzed by a program like \c
+.B tcov\c
+\&. Note,
+however, that the format of the data is not what \c
+.B tcov\c
+\& expects.
+Eventually GNU \c
+.B gprof\c
+\& should be extended to process this data.
+.TP
+.B \-ax
+Generate extra code to read basic block profiling parameters from
+file `bb.in' and write profiling results to file `bb.out'.
+`bb.in' contains a list of functions. Whenever a function on the list
+is entered, profiling is turned on. When the outmost function is left,
+profiling is turned off. If a function name is prefixed with `-'
+the function is excluded from profiling. If a function name is not
+unique it can be disambiguated by writing
+`/path/filename.d:functionname'. `bb.out' will list some available
+filenames.
+Four function names have a special meaning:
+`__bb_jumps__' will cause jump frequencies to be written to `bb.out'.
+`__bb_trace__' will cause the sequence of basic blocks to be piped
+into `gzip' and written to file `bbtrace.gz'.
+`__bb_hidecall__' will cause call instructions to be excluded from
+the trace.
+`__bb_showret__' will cause return instructions to be included in
+the trace.
+.TP
+.BI "\-d" "letters"
+Says to make debugging dumps during compilation at times specified by
+.I letters\c
+\&. This is used for debugging the compiler. The file names
+for most of the dumps are made by appending a word to the source file
+name (e.g. `\|\c
+.B foo.c.rtl\c
+\&\|' or `\|\c
+.B foo.c.jump\c
+\&\|').
+.TP
+.B \-dM
+Dump all macro definitions, at the end of preprocessing, and write no
+output.
+.TP
+.B \-dN
+Dump all macro names, at the end of preprocessing.
+.TP
+.B \-dD
+Dump all macro definitions, at the end of preprocessing, in addition to
+normal output.
+.TP
+.B \-dy
+Dump debugging information during parsing, to standard error.
+.TP
+.B \-dr
+Dump after RTL generation, to `\|\c
+.I file\c
+.B \&.rtl\c
+\&\|'.
+.TP
+.B \-dx
+Just generate RTL for a function instead of compiling it. Usually used
+with `\|\c
+.B r\c
+\&\|'.
+.TP
+.B \-dj
+Dump after first jump optimization, to `\|\c
+.I file\c
+.B \&.jump\c
+\&\|'.
+.TP
+.B \-ds
+Dump after CSE (including the jump optimization that sometimes
+follows CSE), to `\|\c
+.I file\c
+.B \&.cse\c
+\&\|'.
+.TP
+.B \-dL
+Dump after loop optimization, to `\|\c
+.I file\c
+.B \&.loop\c
+\&\|'.
+.TP
+.B \-dt
+Dump after the second CSE pass (including the jump optimization that
+sometimes follows CSE), to `\|\c
+.I file\c
+.B \&.cse2\c
+\&\|'.
+.TP
+.B \-df
+Dump after flow analysis, to `\|\c
+.I file\c
+.B \&.flow\c
+\&\|'.
+.TP
+.B \-dc
+Dump after instruction combination, to `\|\c
+.I file\c
+.B \&.combine\c
+\&\|'.
+.TP
+.B \-dS
+Dump after the first instruction scheduling pass, to
+`\|\c
+.I file\c
+.B \&.sched\c
+\&\|'.
+.TP
+.B \-dl
+Dump after local register allocation, to `\|\c
+.I file\c
+.B \&.lreg\c
+\&\|'.
+.TP
+.B \-dg
+Dump after global register allocation, to `\|\c
+.I file\c
+.B \&.greg\c
+\&\|'.
+.TP
+.B \-dR
+Dump after the second instruction scheduling pass, to
+`\|\c
+.I file\c
+.B \&.sched2\c
+\&\|'.
+.TP
+.B \-dJ
+Dump after last jump optimization, to `\|\c
+.I file\c
+.B \&.jump2\c
+\&\|'.
+.TP
+.B \-dd
+Dump after delayed branch scheduling, to `\|\c
+.I file\c
+.B \&.dbr\c
+\&\|'.
+.TP
+.B \-dk
+Dump after conversion from registers to stack, to `\|\c
+.I file\c
+.B \&.stack\c
+\&\|'.
+.TP
+.B \-da
+Produce all the dumps listed above.
+.TP
+.B \-dm
+Print statistics on memory usage, at the end of the run, to
+standard error.
+.TP
+.B \-dp
+Annotate the assembler output with a comment indicating which
+pattern and alternative was used.
+.TP
+.B \-fpretend\-float
+When running a cross-compiler, pretend that the target machine uses the
+same floating point format as the host machine. This causes incorrect
+output of the actual floating constants, but the actual instruction
+sequence will probably be the same as GNU CC would make when running on
+the target machine.
+.TP
+.B \-save\-temps
+Store the usual \*(lqtemporary\*(rq intermediate files permanently; place them
+in the current directory and name them based on the source file. Thus,
+compiling `\|\c
+.B foo.c\c
+\&\|' with `\|\c
+.B \-c \-save\-temps\c
+\&\|' would produce files
+`\|\c
+.B foo.cpp\c
+\&\|' and `\|\c
+.B foo.s\c
+\&\|', as well as `\|\c
+.B foo.o\c
+\&\|'.
+.TP
+.BI "\-print\-file\-name=" "library"
+Print the full absolute name of the library file \|\c
+.nh
+.I library
+.hy
+\&\| that
+would be used when linking\(em\&and do not do anything else. With this
+option, GNU CC does not compile or link anything; it just prints the
+file name.
+.TP
+.B \-print\-libgcc\-file\-name
+Same as `\|\c
+.B \-print\-file\-name=libgcc.a\c
+\&\|'.
+.TP
+.BI "\-print\-prog\-name=" "program"
+Like `\|\c
+.B \-print\-file\-name\c
+\&\|', but searches for a program such as `\|\c
+cpp\c
+\&\|'.
+.SH OPTIMIZATION OPTIONS
+These options control various sorts of optimizations:
+.TP
+.B \-O
+.TP
+.B \-O1
+Optimize. Optimizing compilation takes somewhat more time, and a lot
+more memory for a large function.
+.Sp
+Without `\|\c
+.B \-O\c
+\&\|', the compiler's goal is to reduce the cost of
+compilation and to make debugging produce the expected results.
+Statements are independent: if you stop the program with a breakpoint
+between statements, you can then assign a new value to any variable or
+change the program counter to any other statement in the function and
+get exactly the results you would expect from the source code.
+.Sp
+Without `\|\c
+.B \-O\c
+\&\|', only variables declared \c
+.B register\c
+\& are
+allocated in registers. The resulting compiled code is a little worse
+than produced by PCC without `\|\c
+.B \-O\c
+\&\|'.
+.Sp
+With `\|\c
+.B \-O\c
+\&\|', the compiler tries to reduce code size and execution
+time.
+.Sp
+When you specify `\|\c
+.B \-O\c
+\&\|', the two options `\|\c
+.B \-fthread\-jumps\c
+\&\|' and `\|\c
+.B \-fdefer\-pop\c
+\&\|' are turned on. On machines that have delay slots, the `\|\c
+.B \-fdelayed\-branch\c
+\&\|' option is turned on. For those machines that can support debugging even
+without a frame pointer, the `\|\c
+.B \-fomit\-frame\-pointer\c
+\&\|' option is turned on. On some machines other flags may also be turned on.
+.TP
+.B \-O2
+Optimize even more. Nearly all supported optimizations that do not
+involve a space-speed tradeoff are performed. Loop unrolling and function
+inlining are not done, for example. As compared to
+.B \-O\c
+\&,
+this option increases both compilation time and the performance of the
+generated code.
+.TP
+.B \-O3
+Optimize yet more. This turns on everything
+.B \-O2
+does, along with also turning on
+.B \-finline\-functions.
+.TP
+.B \-O0
+Do not optimize.
+.Sp
+If you use multiple
+.B \-O
+options, with or without level numbers, the last such option is the
+one that is effective.
+.PP
+Options of the form `\|\c
+.B \-f\c
+.I flag\c
+\&\c
+\&\|' specify machine-independent
+flags. Most flags have both positive and negative forms; the negative
+form of `\|\c
+.B \-ffoo\c
+\&\|' would be `\|\c
+.B \-fno\-foo\c
+\&\|'. The following list shows
+only one form\(em\&the one which is not the default.
+You can figure out the other form by either removing `\|\c
+.B no\-\c
+\&\|' or
+adding it.
+.TP
+.B \-ffloat\-store
+Do not store floating point variables in registers. This
+prevents undesirable excess precision on machines such as the
+68000 where the floating registers (of the 68881) keep more
+precision than a \c
+.B double\c
+\& is supposed to have.
+.Sp
+For most programs, the excess precision does only good, but a few
+programs rely on the precise definition of IEEE floating point.
+Use `\|\c
+.B \-ffloat\-store\c
+\&\|' for such programs.
+.TP
+.B \-fmemoize\-lookups
+.TP
+.B \-fsave\-memoized
+Use heuristics to compile faster (C++ only). These heuristics are not
+enabled by default, since they are only effective for certain input
+files. Other input files compile more slowly.
+.Sp
+The first time the compiler must build a call to a member function (or
+reference to a data member), it must (1) determine whether the class
+implements member functions of that name; (2) resolve which member
+function to call (which involves figuring out what sorts of type
+conversions need to be made); and (3) check the visibility of the member
+function to the caller. All of this adds up to slower compilation.
+Normally, the second time a call is made to that member function (or
+reference to that data member), it must go through the same lengthy
+process again. This means that code like this
+.Sp
+\& cout << "This " << p << " has " << n << " legs.\en";
+.Sp
+makes six passes through all three steps. By using a software cache,
+a \*(lqhit\*(rq significantly reduces this cost. Unfortunately, using the
+cache introduces another layer of mechanisms which must be implemented,
+and so incurs its own overhead. `\|\c
+.B \-fmemoize\-lookups\c
+\&\|' enables
+the software cache.
+.Sp
+Because access privileges (visibility) to members and member functions
+may differ from one function context to the next,
+.B g++
+may need to flush the cache. With the `\|\c
+.B \-fmemoize\-lookups\c
+\&\|' flag, the cache is flushed after every
+function that is compiled. The `\|\c
+\-fsave\-memoized\c
+\&\|' flag enables the same software cache, but when the compiler
+determines that the context of the last function compiled would yield
+the same access privileges of the next function to compile, it
+preserves the cache.
+This is most helpful when defining many member functions for the same
+class: with the exception of member functions which are friends of
+other classes, each member function has exactly the same access
+privileges as every other, and the cache need not be flushed.
+.TP
+.B \-fno\-default\-inline
+Don't make member functions inline by default merely because they are
+defined inside the class scope (C++ only).
+.TP
+.B \-fno\-defer\-pop
+Always pop the arguments to each function call as soon as that
+function returns. For machines which must pop arguments after a
+function call, the compiler normally lets arguments accumulate on the
+stack for several function calls and pops them all at once.
+.TP
+.B \-fforce\-mem
+Force memory operands to be copied into registers before doing
+arithmetic on them. This may produce better code by making all
+memory references potential common subexpressions. When they are
+not common subexpressions, instruction combination should
+eliminate the separate register-load. I am interested in hearing
+about the difference this makes.
+.TP
+.B \-fforce\-addr
+Force memory address constants to be copied into registers before
+doing arithmetic on them. This may produce better code just as
+`\|\c
+.B \-fforce\-mem\c
+\&\|' may. I am interested in hearing about the
+difference this makes.
+.TP
+.B \-fomit\-frame\-pointer
+Don't keep the frame pointer in a register for functions that
+don't need one. This avoids the instructions to save, set up and
+restore frame pointers; it also makes an extra register available
+in many functions. \c
+.I It also makes debugging impossible on most machines\c
+\&.
+.Sp
+On some machines, such as the Vax, this flag has no effect, because
+the standard calling sequence automatically handles the frame pointer
+and nothing is saved by pretending it doesn't exist. The
+machine-description macro \c
+.B FRAME_POINTER_REQUIRED\c
+\& controls
+whether a target machine supports this flag.
+.TP
+.B \-finline\-functions
+Integrate all simple functions into their callers. The compiler
+heuristically decides which functions are simple enough to be worth
+integrating in this way.
+.Sp
+If all calls to a given function are integrated, and the function is
+declared \c
+.B static\c
+\&, then GCC normally does not output the function as
+assembler code in its own right.
+.TP
+.B \-fcaller\-saves
+Enable values to be allocated in registers that will be clobbered by
+function calls, by emitting extra instructions to save and restore the
+registers around such calls. Such allocation is done only when it
+seems to result in better code than would otherwise be produced.
+.Sp
+This option is enabled by default on certain machines, usually those
+which have no call-preserved registers to use instead.
+.TP
+.B \-fkeep\-inline\-functions
+Even if all calls to a given function are integrated, and the function
+is declared \c
+.B static\c
+\&, nevertheless output a separate run-time
+callable version of the function.
+.TP
+.B \-fno\-function\-cse
+Do not put function addresses in registers; make each instruction that
+calls a constant function contain the function's address explicitly.
+.Sp
+This option results in less efficient code, but some strange hacks
+that alter the assembler output may be confused by the optimizations
+performed when this option is not used.
+.TP
+.B \-fno\-peephole
+Disable any machine-specific peephole optimizations.
+.TP
+.B \-ffast-math
+This option allows GCC to violate some ANSI or IEEE rules/specifications
+in the interest of optimizing code for speed. For example, it allows
+the compiler to assume arguments to the \c
+.B sqrt\c
+\& function are
+non-negative numbers.
+.Sp
+This option should never be turned on by any `\|\c
+.B \-O\c
+\&\|' option since
+it can result in incorrect output for programs which depend on
+an exact implementation of IEEE or ANSI rules/specifications for
+math functions.
+.PP
+The following options control specific optimizations. The `\|\c
+.B \-O2\c
+\&\|'
+option turns on all of these optimizations except `\|\c
+.B \-funroll\-loops\c
+\&\|'
+and `\|\c
+.B \-funroll\-all\-loops\c
+\&\|'.
+.PP
+The `\|\c
+.B \-O\c
+\&\|' option usually turns on
+the `\|\c
+.B \-fthread\-jumps\c
+\&\|' and `\|\c
+.B \-fdelayed\-branch\c
+\&\|' options, but
+specific machines may change the default optimizations.
+.PP
+You can use the following flags in the rare cases when \*(lqfine-tuning\*(rq
+of optimizations to be performed is desired.
+.TP
+.B \-fstrength\-reduce
+Perform the optimizations of loop strength reduction and
+elimination of iteration variables.
+.TP
+.B \-fthread\-jumps
+Perform optimizations where we check to see if a jump branches to a
+location where another comparison subsumed by the first is found. If
+so, the first branch is redirected to either the destination of the
+second branch or a point immediately following it, depending on whether
+the condition is known to be true or false.
+.TP
+.B \-funroll\-loops
+Perform the optimization of loop unrolling. This is only done for loops
+whose number of iterations can be determined at compile time or run time.
+.TP
+.B \-funroll\-all\-loops
+Perform the optimization of loop unrolling. This is done for all loops.
+This usually makes programs run more slowly.
+.TP
+.B \-fcse\-follow\-jumps
+In common subexpression elimination, scan through jump instructions
+when the target of the jump is not reached by any other path. For
+example, when CSE encounters an \c
+.B if\c
+\& statement with an
+.B else\c
+\& clause, CSE will follow the jump when the condition
+tested is false.
+.TP
+.B \-fcse\-skip\-blocks
+This is similar to `\|\c
+.B \-fcse\-follow\-jumps\c
+\&\|', but causes CSE to
+follow jumps which conditionally skip over blocks. When CSE
+encounters a simple \c
+.B if\c
+\& statement with no else clause,
+`\|\c
+.B \-fcse\-skip\-blocks\c
+\&\|' causes CSE to follow the jump around the
+body of the \c
+.B if\c
+\&.
+.TP
+.B \-frerun\-cse\-after\-loop
+Re-run common subexpression elimination after loop optimizations has been
+performed.
+.TP
+.B \-felide\-constructors
+Elide constructors when this seems plausible (C++ only). With this
+flag, GNU C++ initializes \c
+.B y\c
+\& directly from the call to \c
+.B foo
+without going through a temporary in the following code:
+.Sp
+A foo ();
+A y = foo ();
+.Sp
+Without this option, GNU C++ first initializes \c
+.B y\c
+\& by calling the
+appropriate constructor for type \c
+.B A\c
+\&; then assigns the result of
+.B foo\c
+\& to a temporary; and, finally, replaces the initial value of
+`\|\c
+.B y\c
+\&\|' with the temporary.
+.Sp
+The default behavior (`\|\c
+.B \-fno\-elide\-constructors\c
+\&\|') is specified by
+the draft ANSI C++ standard. If your program's constructors have side
+effects, using `\|\c
+.B \-felide-constructors\c
+\&\|' can make your program act
+differently, since some constructor calls may be omitted.
+.TP
+.B \-fexpensive\-optimizations
+Perform a number of minor optimizations that are relatively expensive.
+.TP
+.B \-fdelayed\-branch
+If supported for the target machine, attempt to reorder instructions
+to exploit instruction slots available after delayed branch
+instructions.
+.TP
+.B \-fschedule\-insns
+If supported for the target machine, attempt to reorder instructions to
+eliminate execution stalls due to required data being unavailable. This
+helps machines that have slow floating point or memory load instructions
+by allowing other instructions to be issued until the result of the load
+or floating point instruction is required.
+.TP
+.B \-fschedule\-insns2
+Similar to `\|\c
+.B \-fschedule\-insns\c
+\&\|', but requests an additional pass of
+instruction scheduling after register allocation has been done. This is
+especially useful on machines with a relatively small number of
+registers and where memory load instructions take more than one cycle.
+.SH TARGET OPTIONS
+By default, GNU CC compiles code for the same type of machine that you
+are using. However, it can also be installed as a cross-compiler, to
+compile for some other type of machine. In fact, several different
+configurations of GNU CC, for different target machines, can be
+installed side by side. Then you specify which one to use with the
+`\|\c
+.B \-b\c
+\&\|' option.
+.PP
+In addition, older and newer versions of GNU CC can be installed side
+by side. One of them (probably the newest) will be the default, but
+you may sometimes wish to use another.
+.TP
+.BI "\-b " "machine"
+The argument \c
+.I machine\c
+\& specifies the target machine for compilation.
+This is useful when you have installed GNU CC as a cross-compiler.
+.Sp
+The value to use for \c
+.I machine\c
+\& is the same as was specified as the
+machine type when configuring GNU CC as a cross-compiler. For
+example, if a cross-compiler was configured with `\|\c
+.B configure
+i386v\c
+\&\|', meaning to compile for an 80386 running System V, then you
+would specify `\|\c
+.B \-b i386v\c
+\&\|' to run that cross compiler.
+.Sp
+When you do not specify `\|\c
+.B \-b\c
+\&\|', it normally means to compile for
+the same type of machine that you are using.
+.TP
+.BI "\-V " "version"
+The argument \c
+.I version\c
+\& specifies which version of GNU CC to run.
+This is useful when multiple versions are installed. For example,
+.I version\c
+\& might be `\|\c
+.B 2.0\c
+\&\|', meaning to run GNU CC version 2.0.
+.Sp
+The default version, when you do not specify `\|\c
+.B \-V\c
+\&\|', is controlled
+by the way GNU CC is installed. Normally, it will be a version that
+is recommended for general use.
+.SH MACHINE DEPENDENT OPTIONS
+Each of the target machine types can have its own special options,
+starting with `\|\c
+.B \-m\c
+\&\|', to choose among various hardware models or
+configurations\(em\&for example, 68010 vs 68020, floating coprocessor or
+none. A single installed version of the compiler can compile for any
+model or configuration, according to the options specified.
+.PP
+Some configurations of the compiler also support additional special
+options, usually for command-line compatibility with other compilers on
+the same platform.
+.PP
+These are the `\|\c
+.B \-m\c
+\&\|' options defined for the 68000 series:
+.TP
+.B \-m68000
+.TP
+.B \-mc68000
+Generate output for a 68000. This is the default when the compiler is
+configured for 68000-based systems.
+.TP
+.B \-m68020
+.TP
+.B \-mc68020
+Generate output for a 68020 (rather than a 68000). This is the
+default when the compiler is configured for 68020-based systems.
+.TP
+.B \-m68881
+Generate output containing 68881 instructions for floating point.
+This is the default for most 68020-based systems unless
+.B \-nfp
+was specified when the compiler was configured.
+.TP
+.B \-m68030
+Generate output for a 68030. This is the default when the compiler is
+configured for 68030-based systems.
+.TP
+.B \-m68040
+Generate output for a 68040. This is the default when the compiler is
+configured for 68040-based systems.
+.TP
+.B \-m68020\-40
+Generate output for a 68040, without using any of the new instructions.
+This results in code which can run relatively efficiently on either a
+68020/68881 or a 68030 or a 68040.
+.TP
+.B \-mfpa
+Generate output containing Sun FPA instructions for floating point.
+.TP
+.B \-msoft\-float
+Generate output containing library calls for floating point.
+.I
+WARNING:
+the requisite libraries are not part of GNU CC. Normally the
+facilities of the machine's usual C compiler are used, but this can't
+be done directly in cross-compilation. You must make your own
+arrangements to provide suitable library functions for cross-compilation.
+.TP
+.B \-mshort
+Consider type \c
+.B int\c
+\& to be 16 bits wide, like \c
+.B short int\c
+\&.
+.TP
+.B \-mnobitfield
+Do not use the bit-field instructions. `\|\c
+.B \-m68000\c
+\&\|' implies
+`\|\c
+.B \-mnobitfield\c
+\&\|'.
+.TP
+.B \-mbitfield
+Do use the bit-field instructions. `\|\c
+.B \-m68020\c
+\&\|' implies
+`\|\c
+.B \-mbitfield\c
+\&\|'. This is the default if you use the unmodified
+sources.
+.TP
+.B \-mrtd
+Use a different function-calling convention, in which functions
+that take a fixed number of arguments return with the \c
+.B rtd
+instruction, which pops their arguments while returning. This
+saves one instruction in the caller since there is no need to pop
+the arguments there.
+.Sp
+This calling convention is incompatible with the one normally
+used on Unix, so you cannot use it if you need to call libraries
+compiled with the Unix compiler.
+.Sp
+Also, you must provide function prototypes for all functions that
+take variable numbers of arguments (including \c
+.B printf\c
+\&);
+otherwise incorrect code will be generated for calls to those
+functions.
+.Sp
+In addition, seriously incorrect code will result if you call a
+function with too many arguments. (Normally, extra arguments are
+harmlessly ignored.)
+.Sp
+The \c
+.B rtd\c
+\& instruction is supported by the 68010 and 68020
+processors, but not by the 68000.
+.PP
+These `\|\c
+.B \-m\c
+\&\|' options are defined for the Vax:
+.TP
+.B \-munix
+Do not output certain jump instructions (\c
+.B aobleq\c
+\& and so on)
+that the Unix assembler for the Vax cannot handle across long
+ranges.
+.TP
+.B \-mgnu
+Do output those jump instructions, on the assumption that you
+will assemble with the GNU assembler.
+.TP
+.B \-mg
+Output code for g-format floating point numbers instead of d-format.
+.PP
+These `\|\c
+.B \-m\c
+\&\|' switches are supported on the SPARC:
+.PP
+.B \-mfpu
+.TP
+.B \-mhard\-float
+Generate output containing floating point instructions. This is the
+default.
+.PP
+.B \-mno\-fpu
+.TP
+.B \-msoft\-float
+Generate output containing library calls for floating point.
+.I Warning:
+there is no GNU floating-point library for SPARC.
+Normally the facilities of the machine's usual C compiler are used, but
+this cannot be done directly in cross-compilation. You must make your
+own arrangements to provide suitable library functions for
+cross-compilation.
+.Sp
+.B \-msoft\-float
+changes the calling convention in the output file;
+therefore, it is only useful if you compile
+.I all
+of a program with this option.
+.PP
+.B \-mno\-epilogue
+.TP
+.B \-mepilogue
+With
+.B \-mepilogue
+(the default), the compiler always emits code for
+function exit at the end of each function. Any function exit in
+the middle of the function (such as a return statement in C) will
+generate a jump to the exit code at the end of the function.
+.Sp
+With
+.BR \-mno\-epilogue ,
+the compiler tries to emit exit code inline at every function exit.
+.PP
+.B \-mno\-v8
+.TP
+.B \-mv8
+.TP
+.B \-msparclite
+These three options select variations on the SPARC architecture.
+.Sp
+By default (unless specifically configured for the Fujitsu SPARClite),
+GCC generates code for the v7 variant of the SPARC architecture.
+.Sp
+.B \-mv8
+will give you SPARC v8 code. The only difference from v7
+code is that the compiler emits the integer multiply and integer
+divide instructions which exist in SPARC v8 but not in SPARC v7.
+.Sp
+.B \-msparclite
+will give you SPARClite code. This adds the integer
+multiply, integer divide step and scan (ffs) instructions which
+exist in SPARClite but not in SPARC v7.
+.PP
+.B \-mcypress
+.TP
+.B \-msupersparc
+These two options select the processor for which the code is optimised.
+.Sp
+With
+.B \-mcypress
+(the default), the compiler optimises code for the Cypress CY7C602 chip, as
+used in the SparcStation/SparcServer 3xx series. This is also appropriate for
+the older SparcStation 1, 2, IPX etc.
+.Sp
+With
+.B \-msupersparc
+the compiler optimises code for the SuperSparc cpu, as used in the SparcStation
+10, 1000 and 2000 series. This flag also enables use of the full SPARC v8
+instruction set.
+.PP
+These `\|\c
+.B \-m\c
+\&\|' options are defined for the Convex:
+.TP
+.B \-mc1
+Generate output for a C1. This is the default when the compiler is
+configured for a C1.
+.TP
+.B \-mc2
+Generate output for a C2. This is the default when the compiler is
+configured for a C2.
+.TP
+.B \-margcount
+Generate code which puts an argument count in the word preceding each
+argument list. Some nonportable Convex and Vax programs need this word.
+(Debuggers don't, except for functions with variable-length argument
+lists; this info is in the symbol table.)
+.TP
+.B \-mnoargcount
+Omit the argument count word. This is the default if you use the
+unmodified sources.
+.PP
+These `\|\c
+.B \-m\c
+\&\|' options are defined for the AMD Am29000:
+.TP
+.B \-mdw
+Generate code that assumes the DW bit is set, i.e., that byte and
+halfword operations are directly supported by the hardware. This is the
+default.
+.TP
+.B \-mnodw
+Generate code that assumes the DW bit is not set.
+.TP
+.B \-mbw
+Generate code that assumes the system supports byte and halfword write
+operations. This is the default.
+.TP
+.B \-mnbw
+Generate code that assumes the systems does not support byte and
+halfword write operations. This implies `\|\c
+.B \-mnodw\c
+\&\|'.
+.TP
+.B \-msmall
+Use a small memory model that assumes that all function addresses are
+either within a single 256 KB segment or at an absolute address of less
+than 256K. This allows the \c
+.B call\c
+\& instruction to be used instead
+of a \c
+.B const\c
+\&, \c
+.B consth\c
+\&, \c
+.B calli\c
+\& sequence.
+.TP
+.B \-mlarge
+Do not assume that the \c
+.B call\c
+\& instruction can be used; this is the
+default.
+.TP
+.B \-m29050
+Generate code for the Am29050.
+.TP
+.B \-m29000
+Generate code for the Am29000. This is the default.
+.TP
+.B \-mkernel\-registers
+Generate references to registers \c
+.B gr64-gr95\c
+\& instead of
+.B gr96-gr127\c
+\&. This option can be used when compiling kernel code
+that wants a set of global registers disjoint from that used by
+user-mode code.
+.Sp
+Note that when this option is used, register names in `\|\c
+.B \-f\c
+\&\|' flags
+must use the normal, user-mode, names.
+.TP
+.B \-muser\-registers
+Use the normal set of global registers, \c
+.B gr96-gr127\c
+\&. This is the
+default.
+.TP
+.B \-mstack\-check
+Insert a call to \c
+.B _\|_msp_check\c
+\& after each stack adjustment. This
+is often used for kernel code.
+.PP
+These `\|\c
+.B \-m\c
+\&\|' options are defined for Motorola 88K architectures:
+.TP
+.B \-m88000
+Generate code that works well on both the m88100 and the
+m88110.
+.TP
+.B \-m88100
+Generate code that works best for the m88100, but that also
+runs on the m88110.
+.TP
+.B \-m88110
+Generate code that works best for the m88110, and may not run
+on the m88100.
+.TP
+.B \-midentify\-revision
+Include an \c
+.B ident\c
+\& directive in the assembler output recording the
+source file name, compiler name and version, timestamp, and compilation
+flags used.
+.TP
+.B \-mno\-underscores
+In assembler output, emit symbol names without adding an underscore
+character at the beginning of each name. The default is to use an
+underscore as prefix on each name.
+.TP
+.B \-mno\-check\-zero\-division
+.TP
+.B \-mcheck\-zero\-division
+Early models of the 88K architecture had problems with division by zero;
+in particular, many of them didn't trap. Use these options to avoid
+including (or to include explicitly) additional code to detect division
+by zero and signal an exception. All GCC configurations for the 88K use
+`\|\c
+.B \-mcheck\-zero\-division\c
+\&\|' by default.
+.TP
+.B \-mocs\-debug\-info
+.TP
+.B \-mno\-ocs\-debug\-info
+Include (or omit) additional debugging information (about
+registers used in each stack frame) as specified in the 88Open Object
+Compatibility Standard, \*(lqOCS\*(rq. This extra information is not needed
+by GDB. The default for DG/UX, SVr4, and Delta 88 SVr3.2 is to
+include this information; other 88k configurations omit this information
+by default.
+.TP
+.B \-mocs\-frame\-position
+.TP
+.B \-mno\-ocs\-frame\-position
+Force (or do not require) register values to be stored in a particular
+place in stack frames, as specified in OCS. The DG/UX, Delta88 SVr3.2,
+and BCS configurations use `\|\c
+.B \-mocs\-frame\-position\c
+\&\|'; other 88k
+configurations have the default `\|\c
+.B \-mno\-ocs\-frame\-position\c
+\&\|'.
+.TP
+.B \-moptimize\-arg\-area
+.TP
+.B \-mno\-optimize\-arg\-area
+Control how to store function arguments in stack frames.
+`\|\c
+.B \-moptimize\-arg\-area\c
+\&\|' saves space, but may break some
+debuggers (not GDB). `\|\c
+.B \-mno\-optimize\-arg\-area\c
+\&\|' conforms better to
+standards. By default GCC does not optimize the argument area.
+.TP
+.BI "\-mshort\-data\-" "num"
+.I num
+Generate smaller data references by making them relative to \c
+.B r0\c
+\&,
+which allows loading a value using a single instruction (rather than the
+usual two). You control which data references are affected by
+specifying \c
+.I num\c
+\& with this option. For example, if you specify
+`\|\c
+.B \-mshort\-data\-512\c
+\&\|', then the data references affected are those
+involving displacements of less than 512 bytes.
+`\|\c
+.B \-mshort\-data\-\c
+.I num\c
+\&\c
+\&\|' is not effective for \c
+.I num\c
+\& greater
+than 64K.
+.PP
+.B \-mserialize-volatile
+.TP
+.B \-mno-serialize-volatile
+Do, or do not, generate code to guarantee sequential consistency of
+volatile memory references.
+.Sp
+GNU CC always guarantees consistency by default, for the preferred
+processor submodel. How this is done depends on the submodel.
+.Sp
+The m88100 processor does not reorder memory references and so always
+provides sequential consistency. If you use `\|\c
+.B \-m88100\c
+\&\|', GNU CC does
+not generate any special instructions for sequential consistency.
+.Sp
+The order of memory references made by the m88110 processor does not
+always match the order of the instructions requesting those references.
+In particular, a load instruction may execute before a preceding store
+instruction. Such reordering violates sequential consistency of
+volatile memory references, when there are multiple processors. When
+you use `\|\c
+.B \-m88000\c
+\&\|' or `\|\c
+.B \-m88110\c
+\&\|', GNU CC generates special
+instructions when appropriate, to force execution in the proper order.
+.Sp
+The extra code generated to guarantee consistency may affect the
+performance of your application. If you know that you can safely forgo
+this guarantee, you may use the option `\|\c
+.B \-mno-serialize-volatile\c
+\&\|'.
+.Sp
+If you use the `\|\c
+.B \-m88100\c
+\&\|' option but require sequential consistency
+when running on the m88110 processor, you should use
+`\|\c
+.B \-mserialize-volatile\c
+\&\|'.
+.PP
+.B \-msvr4
+.TP
+.B \-msvr3
+Turn on (`\|\c
+.B \-msvr4\c
+\&\|') or off (`\|\c
+.B \-msvr3\c
+\&\|') compiler extensions
+related to System V release 4 (SVr4). This controls the following:
+.TP
+\ \ \ \(bu
+Which variant of the assembler syntax to emit (which you can select
+independently using `\|\c
+.B \-mversion\-03.00\c
+\&\|').
+.TP
+\ \ \ \(bu
+`\|\c
+.B \-msvr4\c
+\&\|' makes the C preprocessor recognize `\|\c
+.B #pragma weak\c
+\&\|'
+.TP
+\ \ \ \(bu
+`\|\c
+.B \-msvr4\c
+\&\|' makes GCC issue additional declaration directives used in
+SVr4.
+.PP
+`\|\c
+.B \-msvr3\c
+\&\|' is the default for all m88K configurations except
+the SVr4 configuration.
+.TP
+.B \-mtrap\-large\-shift
+.TP
+.B \-mhandle\-large\-shift
+Include code to detect bit-shifts of more than 31 bits; respectively,
+trap such shifts or emit code to handle them properly. By default GCC
+makes no special provision for large bit shifts.
+.TP
+.B \-muse\-div\-instruction
+Very early models of the 88K architecture didn't have a divide
+instruction, so GCC avoids that instruction by default. Use this option
+to specify that it's safe to use the divide instruction.
+.TP
+.B \-mversion\-03.00
+In the DG/UX configuration, there are two flavors of SVr4. This option
+modifies
+.B \-msvr4
+to select whether the hybrid-COFF or real-ELF
+flavor is used. All other configurations ignore this option.
+.TP
+.B \-mwarn\-passed\-structs
+Warn when a function passes a struct as an argument or result.
+Structure-passing conventions have changed during the evolution of the C
+language, and are often the source of portability problems. By default,
+GCC issues no such warning.
+.PP
+These options are defined for the IBM RS6000:
+.PP
+.B \-mfp\-in\-toc
+.TP
+.B \-mno\-fp\-in\-toc
+Control whether or not floating-point constants go in the Table of
+Contents (TOC), a table of all global variable and function addresses. By
+default GCC puts floating-point constants there; if the TOC overflows,
+`\|\c
+.B \-mno\-fp\-in\-toc\c
+\&\|' will reduce the size of the TOC, which may avoid
+the overflow.
+.PP
+These `\|\c
+.B \-m\c
+\&\|' options are defined for the IBM RT PC:
+.TP
+.B \-min\-line\-mul
+Use an in-line code sequence for integer multiplies. This is the
+default.
+.TP
+.B \-mcall\-lib\-mul
+Call \c
+.B lmul$$\c
+\& for integer multiples.
+.TP
+.B \-mfull\-fp\-blocks
+Generate full-size floating point data blocks, including the minimum
+amount of scratch space recommended by IBM. This is the default.
+.TP
+.B \-mminimum\-fp\-blocks
+Do not include extra scratch space in floating point data blocks. This
+results in smaller code, but slower execution, since scratch space must
+be allocated dynamically.
+.TP
+.B \-mfp\-arg\-in\-fpregs
+Use a calling sequence incompatible with the IBM calling convention in
+which floating point arguments are passed in floating point registers.
+Note that \c
+.B varargs.h\c
+\& and \c
+.B stdargs.h\c
+\& will not work with
+floating point operands if this option is specified.
+.TP
+.B \-mfp\-arg\-in\-gregs
+Use the normal calling convention for floating point arguments. This is
+the default.
+.TP
+.B \-mhc\-struct\-return
+Return structures of more than one word in memory, rather than in a
+register. This provides compatibility with the MetaWare HighC (hc)
+compiler. Use `\|\c
+.B \-fpcc\-struct\-return\c
+\&\|' for compatibility with the
+Portable C Compiler (pcc).
+.TP
+.B \-mnohc\-struct\-return
+Return some structures of more than one word in registers, when
+convenient. This is the default. For compatibility with the
+IBM-supplied compilers, use either `\|\c
+.B \-fpcc\-struct\-return\c
+\&\|' or
+`\|\c
+.B \-mhc\-struct\-return\c
+\&\|'.
+.PP
+These `\|\c
+.B \-m\c
+\&\|' options are defined for the MIPS family of computers:
+.TP
+.BI "\-mcpu=" "cpu-type"
+Assume the defaults for the machine type
+.I cpu-type
+when
+scheduling instructions. The default
+.I cpu-type
+is
+.BR default ,
+which picks the longest cycles times for any of the machines, in order
+that the code run at reasonable rates on all MIPS cpu's. Other
+choices for
+.I cpu-type
+are
+.BR r2000 ,
+.BR r3000 ,
+.BR r4000 ,
+and
+.BR r6000 .
+While picking a specific
+.I cpu-type
+will schedule things appropriately for that particular chip, the
+compiler will not generate any code that does not meet level 1 of the
+MIPS ISA (instruction set architecture) without the
+.B \-mips2
+or
+.B \-mips3
+switches being used.
+.TP
+.B \-mips2
+Issue instructions from level 2 of the MIPS ISA (branch likely, square
+root instructions). The
+.B \-mcpu=r4000
+or
+.B \-mcpu=r6000
+switch must be used in conjunction with
+.BR \-mips2 .
+.TP
+.B \-mips3
+Issue instructions from level 3 of the MIPS ISA (64 bit instructions).
+The
+.B \-mcpu=r4000
+switch must be used in conjunction with
+.BR \-mips2 .
+.TP
+.B \-mint64
+.TP
+.B \-mlong64
+.TP
+.B \-mlonglong128
+These options don't work at present.
+.TP
+.B \-mmips\-as
+Generate code for the MIPS assembler, and invoke
+.B mips\-tfile
+to add normal debug information. This is the default for all
+platforms except for the OSF/1 reference platform, using the OSF/rose
+object format. If any of the
+.BR \-ggdb ,
+.BR \-gstabs ,
+or
+.B \-gstabs+
+switches are used, the
+.B mips\-tfile
+program will encapsulate the stabs within MIPS ECOFF.
+.TP
+.B \-mgas
+Generate code for the GNU assembler. This is the default on the OSF/1
+reference platform, using the OSF/rose object format.
+.TP
+.B \-mrnames
+.TP
+.B \-mno\-rnames
+The
+.B \-mrnames
+switch says to output code using the MIPS software names for the
+registers, instead of the hardware names (ie,
+.B a0
+instead of
+.BR $4 ).
+The GNU assembler does not support the
+.B \-mrnames
+switch, and the MIPS assembler will be instructed to run the MIPS C
+preprocessor over the source file. The
+.B \-mno\-rnames
+switch is default.
+.TP
+.B \-mgpopt
+.TP
+.B \-mno\-gpopt
+The
+.B \-mgpopt
+switch says to write all of the data declarations before the
+instructions in the text section, to all the MIPS assembler to
+generate one word memory references instead of using two words for
+short global or static data items. This is on by default if
+optimization is selected.
+.TP
+.B \-mstats
+.TP
+.B \-mno\-stats
+For each non-inline function processed, the
+.B \-mstats
+switch causes the compiler to emit one line to the standard error file
+to print statistics about the program (number of registers saved,
+stack size, etc.).
+.TP
+.B \-mmemcpy
+.TP
+.B \-mno\-memcpy
+The
+.B \-mmemcpy
+switch makes all block moves call the appropriate string function
+.RB ( memcpy
+or
+.BR bcopy )
+instead of possibly generating inline code.
+.TP
+.B \-mmips\-tfile
+.TP
+.B \-mno\-mips\-tfile
+The
+.B \-mno\-mips\-tfile
+switch causes the compiler not postprocess the object file with the
+.B mips\-tfile
+program, after the MIPS assembler has generated it to add debug
+support. If
+.B mips\-tfile
+is not run, then no local variables will be available to the debugger.
+In addition,
+.B stage2
+and
+.B stage3
+objects will have the temporary file names passed to the assembler
+embedded in the object file, which means the objects will not compare
+the same.
+.TP
+.B \-msoft\-float
+Generate output containing library calls for floating point.
+.I
+WARNING:
+the requisite libraries are not part of GNU CC. Normally the
+facilities of the machine's usual C compiler are used, but this can't
+be done directly in cross-compilation. You must make your own
+arrangements to provide suitable library functions for cross-compilation.
+.TP
+.B \-mhard\-float
+Generate output containing floating point instructions. This is the
+default if you use the unmodified sources.
+.TP
+.B \-mfp64
+Assume that the
+.B FR
+bit in the status word is on, and that there are 32 64-bit floating
+point registers, instead of 32 32-bit floating point registers. You
+must also specify the
+.B \-mcpu=r4000
+and
+.B \-mips3
+switches.
+.TP
+.B \-mfp32
+Assume that there are 32 32-bit floating point registers. This is the
+default.
+.PP
+.B \-mabicalls
+.TP
+.B \-mno\-abicalls
+Emit (or do not emit) the
+.BR \&.abicalls ,
+.BR \&.cpload ,
+and
+.B \&.cprestore
+pseudo operations that some System V.4 ports use for position
+independent code.
+.TP
+.B \-mhalf\-pic
+.TP
+.B \-mno\-half\-pic
+The
+.B \-mhalf\-pic
+switch says to put pointers to extern references into the data section
+and load them up, rather than put the references in the text section.
+This option does not work at present.
+.B
+.BI \-G num
+Put global and static items less than or equal to
+.I num
+bytes into the small data or bss sections instead of the normal data
+or bss section. This allows the assembler to emit one word memory
+reference instructions based on the global pointer
+.RB ( gp
+or
+.BR $28 ),
+instead of the normal two words used. By default,
+.I num
+is 8 when the MIPS assembler is used, and 0 when the GNU
+assembler is used. The
+.BI \-G num
+switch is also passed to the assembler and linker. All modules should
+be compiled with the same
+.BI \-G num
+value.
+.TP
+.B \-nocpp
+Tell the MIPS assembler to not run it's preprocessor over user
+assembler files (with a `\|\c
+.B .s\c
+\&\|' suffix) when assembling them.
+.PP
+These `\|\c
+.B \-m\c
+\&\|' options are defined for the Intel 80386 family of computers:
+.B \-m486
+.TP
+.B \-mno\-486
+Control whether or not code is optimized for a 486 instead of an
+386. Code generated for a 486 will run on a 386 and vice versa.
+.TP
+.B \-msoft\-float
+Generate output containing library calls for floating point.
+.I Warning:
+the requisite libraries are not part of GNU CC.
+Normally the facilities of the machine's usual C compiler are used, but
+this can't be done directly in cross-compilation. You must make your
+own arrangements to provide suitable library functions for
+cross-compilation.
+.Sp
+On machines where a function returns floating point results in the 80387
+register stack, some floating point opcodes may be emitted even if
+`\|\c
+.B \-msoft-float\c
+\&\|' is used.
+.TP
+.B \-mno-fp-ret-in-387
+Do not use the FPU registers for return values of functions.
+.Sp
+The usual calling convention has functions return values of types
+.B float\c
+\& and \c
+.B double\c
+\& in an FPU register, even if there
+is no FPU. The idea is that the operating system should emulate
+an FPU.
+.Sp
+The option `\|\c
+.B \-mno-fp-ret-in-387\c
+\&\|' causes such values to be returned
+in ordinary CPU registers instead.
+.PP
+These `\|\c
+.B \-m\c
+\&\|' options are defined for the HPPA family of computers:
+.TP
+.B \-mpa-risc-1-0
+Generate code for a PA 1.0 processor.
+.TP
+.B \-mpa-risc-1-1
+Generate code for a PA 1.1 processor.
+.TP
+.B \-mkernel
+Generate code which is suitable for use in kernels. Specifically, avoid
+.B add\c
+\& instructions in which one of the arguments is the DP register;
+generate \c
+.B addil\c
+\& instructions instead. This avoids a rather serious
+bug in the HP-UX linker.
+.TP
+.B \-mshared-libs
+Generate code that can be linked against HP-UX shared libraries. This option
+is not fully function yet, and is not on by default for any PA target. Using
+this option can cause incorrect code to be generated by the compiler.
+.TP
+.B \-mno-shared-libs
+Don't generate code that will be linked against shared libraries. This is
+the default for all PA targets.
+.TP
+.B \-mlong-calls
+Generate code which allows calls to functions greater than 256K away from
+the caller when the caller and callee are in the same source file. Do
+not turn this option on unless code refuses to link with \*(lqbranch out of
+range errors\*('' from the linker.
+.TP
+.B \-mdisable-fpregs
+Prevent floating point registers from being used in any manner. This is
+necessary for compiling kernels which perform lazy context switching of
+floating point registers. If you use this option and attempt to perform
+floating point operations, the compiler will abort.
+.TP
+.B \-mdisable-indexing
+Prevent the compiler from using indexing address modes. This avoids some
+rather obscure problems when compiling MIG generated code under MACH.
+.TP
+.B \-mtrailing-colon
+Add a colon to the end of label definitions (for ELF assemblers).
+.PP
+These `\|\c
+.B \-m\c
+\&\|' options are defined for the Intel 80960 family of computers:
+.TP
+.BI "\-m" "cpu-type"
+Assume the defaults for the machine type
+.I cpu-type
+for instruction and addressing-mode availability and alignment.
+The default
+.I cpu-type
+is
+.BR kb ;
+other choices are
+.BR ka ,
+.BR mc ,
+.BR ca ,
+.BR cf ,
+.BR sa ,
+and
+.BR sb .
+.TP
+.B \-mnumerics
+.TP
+.B \-msoft\-float
+The
+.B \-mnumerics
+option indicates that the processor does support
+floating-point instructions. The
+.B \-msoft\-float
+option indicates
+that floating-point support should not be assumed.
+.TP
+.B \-mleaf\-procedures
+.TP
+.B \-mno\-leaf\-procedures
+Do (or do not) attempt to alter leaf procedures to be callable with the
+.I bal
+instruction as well as
+.IR call .
+This will result in more
+efficient code for explicit calls when the
+.I bal
+instruction can be
+substituted by the assembler or linker, but less efficient code in other
+cases, such as calls via function pointers, or using a linker that doesn't
+support this optimization.
+.TP
+.B \-mtail\-call
+.TP
+.B \-mno\-tail\-call
+Do (or do not) make additional attempts (beyond those of the
+machine-independent portions of the compiler) to optimize tail-recursive
+calls into branches. You may not want to do this because the detection of
+cases where this is not valid is not totally complete. The default is
+.BR \-mno\-tail\-call .
+.TP
+.B \-mcomplex\-addr
+.TP
+.B \-mno\-complex\-addr
+Assume (or do not assume) that the use of a complex addressing mode is a
+win on this implementation of the i960. Complex addressing modes may not
+be worthwhile on the K-series, but they definitely are on the C-series.
+The default is currently
+.B \-mcomplex\-addr
+for all processors except
+the CB and CC.
+.TP
+.B \-mcode\-align
+.TP
+.B \-mno\-code\-align
+Align code to 8-byte boundaries for faster fetching (or don't bother).
+Currently turned on by default for C-series implementations only.
+.TP
+.B \-mic\-compat
+.TP
+.B \-mic2.0\-compat
+.TP
+.B \-mic3.0\-compat
+Enable compatibility with iC960 v2.0 or v3.0.
+.TP
+.B \-masm\-compat
+.TP
+.B \-mintel\-asm
+Enable compatibility with the iC960 assembler.
+.TP
+.B \-mstrict\-align
+.TP
+.B \-mno\-strict\-align
+Do not permit (do permit) unaligned accesses.
+.TP
+.B \-mold\-align
+Enable structure-alignment compatibility with Intel's gcc release version
+1.3 (based on gcc 1.37). Currently this is buggy in that
+.B #pragma align 1
+is always assumed as well, and cannot be turned off.
+.PP
+These `\|\c
+.B \-m\c
+\&\|' options are defined for the DEC Alpha implementations:
+.TP
+.B \-mno-soft-float
+.TP
+.B \-msoft-float
+Use (do not use) the hardware floating-point instructions for
+floating-point operations. When \c
+.B \-msoft-float\c
+\& is specified,
+functions in `\|\c
+.B libgcc1.c\c
+\&\|' will be used to perform floating-point
+operations. Unless they are replaced by routines that emulate the
+floating-point operations, or compiled in such a way as to call such
+emulations routines, these routines will issue floating-point
+operations. If you are compiling for an Alpha without floating-point
+operations, you must ensure that the library is built so as not to call
+them.
+.Sp
+Note that Alpha implementations without floating-point operations are
+required to have floating-point registers.
+.TP
+.B \-mfp-reg
+.TP
+.B \-mno-fp-regs
+Generate code that uses (does not use) the floating-point register set.
+.B \-mno-fp-regs\c
+\& implies \c
+.B \-msoft-float\c
+\&. If the floating-point
+register set is not used, floating point operands are passed in integer
+registers as if they were integers and floating-point results are passed
+in $0 instead of $f0. This is a non-standard calling sequence, so any
+function with a floating-point argument or return value called by code
+compiled with \c
+.B \-mno-fp-regs\c
+\& must also be compiled with that
+option.
+.Sp
+A typical use of this option is building a kernel that does not use,
+and hence need not save and restore, any floating-point registers.
+.PP
+These additional options are available on System V Release 4 for
+compatibility with other compilers on those systems:
+.TP
+.B \-G
+On SVr4 systems, \c
+.B gcc\c
+\& accepts the option `\|\c
+.B \-G\c
+\&\|' (and passes
+it to the system linker), for compatibility with other compilers.
+However, we suggest you use `\|\c
+.B \-symbolic\c
+\&\|' or `\|\c
+.B \-shared\c
+\&\|' as
+appropriate, instead of supplying linker options on the \c
+.B gcc
+command line.
+.TP
+.B \-Qy
+Identify the versions of each tool used by the compiler, in a
+.B .ident\c
+\& assembler directive in the output.
+.TP
+.B \-Qn
+Refrain from adding \c
+.B .ident\c
+\& directives to the output file (this is
+the default).
+.TP
+.BI "\-YP," "dirs"
+Search the directories \c
+.I dirs\c
+\&, and no others, for libraries
+specified with `\|\c
+.B \-l\c
+\&\|'. You can separate directory entries in
+.I dirs\c
+\& from one another with colons.
+.TP
+.BI "\-Ym," "dir"
+Look in the directory \c
+.I dir\c
+\& to find the M4 preprocessor.
+The assembler uses this option.
+.SH CODE GENERATION OPTIONS
+These machine-independent options control the interface conventions
+used in code generation.
+.PP
+Most of them begin with `\|\c
+\-f\c
+\&\|'. These options have both positive and negative forms; the negative form
+of `\|\c
+.B \-ffoo\c
+\&\|' would be `\|\c
+.B \-fno\-foo\c
+\&\|'. In the table below, only
+one of the forms is listed\(em\&the one which is not the default. You
+can figure out the other form by either removing `\|\c
+.B no\-\c
+\&\|' or adding
+it.
+.TP
+.B \-fnonnull\-objects
+Assume that objects reached through references are not null
+(C++ only).
+.Sp
+Normally, GNU C++ makes conservative assumptions about objects reached
+through references. For example, the compiler must check that \c
+.B a
+is not null in code like the following:
+.Sp
+obj &a = g ();
+a.f (2);
+.Sp
+Checking that references of this sort have non-null values requires
+extra code, however, and it is unnecessary for many programs. You can
+use `\|\c
+.B \-fnonnull-objects\c
+\&\|' to omit the checks for null, if your
+program doesn't require checking.
+.TP
+.B \-fpcc\-struct\-return
+Use the same convention for returning \c
+.B struct\c
+\& and \c
+.B union
+values that is used by the usual C compiler on your system. This
+convention is less efficient for small structures, and on many
+machines it fails to be reentrant; but it has the advantage of
+allowing intercallability between GCC-compiled code and PCC-compiled
+code.
+.TP
+.B \-freg\-struct\-return
+Use the convention that
+.B struct
+and
+.B union
+values are returned in registers when possible. This is more
+efficient for small structures than
+.BR \-fpcc\-struct\-return .
+.Sp
+If you specify neither
+.B \-fpcc\-struct\-return
+nor
+.BR \-freg\-struct\-return ,
+GNU CC defaults to whichever convention is standard for the target.
+If there is no standard convention, GNU CC defaults to
+.BR \-fpcc\-struct\-return .
+.TP
+.B \-fshort\-enums
+Allocate to an \c
+.B enum\c
+\& type only as many bytes as it needs for the
+declared range of possible values. Specifically, the \c
+.B enum\c
+\& type
+will be equivalent to the smallest integer type which has enough room.
+.TP
+.B \-fshort\-double
+Use the same size for
+.B double
+as for
+.B float
+\&.
+.TP
+.B \-fshared\-data
+Requests that the data and non-\c
+.B const\c
+\& variables of this
+compilation be shared data rather than private data. The distinction
+makes sense only on certain operating systems, where shared data is
+shared between processes running the same program, while private data
+exists in one copy per process.
+.TP
+.B \-fno\-common
+Allocate even uninitialized global variables in the bss section of the
+object file, rather than generating them as common blocks. This has the
+effect that if the same variable is declared (without \c
+.B extern\c
+\&) in
+two different compilations, you will get an error when you link them.
+The only reason this might be useful is if you wish to verify that the
+program will work on other systems which always work this way.
+.TP
+.B \-fno\-ident
+Ignore the `\|\c
+.B #ident\c
+\&\|' directive.
+.TP
+.B \-fno\-gnu\-linker
+Do not output global initializations (such as C++ constructors and
+destructors) in the form used by the GNU linker (on systems where the GNU
+linker is the standard method of handling them). Use this option when
+you want to use a non-GNU linker, which also requires using the
+.B collect2\c
+\& program to make sure the system linker includes
+constructors and destructors. (\c
+.B collect2\c
+\& is included in the GNU CC
+distribution.) For systems which \c
+.I must\c
+\& use \c
+.B collect2\c
+\&, the
+compiler driver \c
+.B gcc\c
+\& is configured to do this automatically.
+.TP
+.B \-finhibit-size-directive
+Don't output a \c
+.B .size\c
+\& assembler directive, or anything else that
+would cause trouble if the function is split in the middle, and the
+two halves are placed at locations far apart in memory. This option is
+used when compiling `\|\c
+.B crtstuff.c\c
+\&\|'; you should not need to use it
+for anything else.
+.TP
+.B \-fverbose-asm
+Put extra commentary information in the generated assembly code to
+make it more readable. This option is generally only of use to those
+who actually need to read the generated assembly code (perhaps while
+debugging the compiler itself).
+.TP
+.B \-fvolatile
+Consider all memory references through pointers to be volatile.
+.TP
+.B \-fvolatile\-global
+Consider all memory references to extern and global data items to
+be volatile.
+.TP
+.B \-fpic
+If supported for the target machines, generate position-independent code,
+suitable for use in a shared library.
+.TP
+.B \-fPIC
+If supported for the target machine, emit position-independent code,
+suitable for dynamic linking, even if branches need large displacements.
+.TP
+.BI "\-ffixed\-" "reg"
+Treat the register named \c
+.I reg\c
+\& as a fixed register; generated code
+should never refer to it (except perhaps as a stack pointer, frame
+pointer or in some other fixed role).
+.Sp
+.I reg\c
+\& must be the name of a register. The register names accepted
+are machine-specific and are defined in the \c
+.B REGISTER_NAMES
+macro in the machine description macro file.
+.Sp
+This flag does not have a negative form, because it specifies a
+three-way choice.
+.TP
+.BI "\-fcall\-used\-" "reg"
+Treat the register named \c
+.I reg\c
+\& as an allocable register that is
+clobbered by function calls. It may be allocated for temporaries or
+variables that do not live across a call. Functions compiled this way
+will not save and restore the register \c
+.I reg\c
+\&.
+.Sp
+Use of this flag for a register that has a fixed pervasive role in the
+machine's execution model, such as the stack pointer or frame pointer,
+will produce disastrous results.
+.Sp
+This flag does not have a negative form, because it specifies a
+three-way choice.
+.TP
+.BI "\-fcall\-saved\-" "reg"
+Treat the register named \c
+.I reg\c
+\& as an allocable register saved by
+functions. It may be allocated even for temporaries or variables that
+live across a call. Functions compiled this way will save and restore
+the register \c
+.I reg\c
+\& if they use it.
+.Sp
+Use of this flag for a register that has a fixed pervasive role in the
+machine's execution model, such as the stack pointer or frame pointer,
+will produce disastrous results.
+.Sp
+A different sort of disaster will result from the use of this flag for
+a register in which function values may be returned.
+.Sp
+This flag does not have a negative form, because it specifies a
+three-way choice.
+.SH PRAGMAS
+Two `\|\c
+.B #pragma\c
+\&\|' directives are supported for GNU C++, to permit using the same
+header file for two purposes: as a definition of interfaces to a given
+object class, and as the full definition of the contents of that object class.
+.TP
+.B #pragma interface
+(C++ only.)
+Use this directive in header files that define object classes, to save
+space in most of the object files that use those classes. Normally,
+local copies of certain information (backup copies of inline member
+functions, debugging information, and the internal tables that
+implement virtual functions) must be kept in each object file that
+includes class definitions. You can use this pragma to avoid such
+duplication. When a header file containing `\|\c
+.B #pragma interface\c
+\&\|' is included in a compilation, this auxiliary information
+will not be generated (unless the main input source file itself uses
+`\|\c
+.B #pragma implementation\c
+\&\|'). Instead, the object files will contain references to be
+resolved at link time.
+.TP
+.B #pragma implementation
+.TP
+\fB#pragma implementation "\fP\fIobjects\fP\fB.h"\fP
+(C++ only.)
+Use this pragma in a main input file, when you want full output from
+included header files to be generated (and made globally visible).
+The included header file, in turn, should use `\|\c
+.B #pragma interface\c
+\&\|'.
+Backup copies of inline member functions, debugging information, and
+the internal tables used to implement virtual functions are all
+generated in implementation files.
+.Sp
+If you use `\|\c
+.B #pragma implementation\c
+\&\|' with no argument, it applies to an include file with the same
+basename as your source file; for example, in `\|\c
+.B allclass.cc\c
+\&\|', `\|\c
+.B #pragma implementation\c
+\&\|' by itself is equivalent to `\|\c
+.B
+#pragma implementation "allclass.h"\c
+\&\|'. Use the string argument if you want a single implementation
+file to include code from multiple header files.
+.Sp
+There is no way to split up the contents of a single header file into
+multiple implementation files.
+.SH FILES
+.nf
+.ta \w'LIBDIR/g++\-include 'u
+file.c C source file
+file.h C header (preprocessor) file
+file.i preprocessed C source file
+file.C C++ source file
+file.cc C++ source file
+file.cxx C++ source file
+file.m Objective-C source file
+file.s assembly language file
+file.o object file
+a.out link edited output
+\fITMPDIR\fR/cc\(** temporary files
+\fILIBDIR\fR/cpp preprocessor
+\fILIBDIR\fR/cc1 compiler for C
+\fILIBDIR\fR/cc1plus compiler for C++
+\fILIBDIR\fR/collect linker front end needed on some machines
+\fILIBDIR\fR/libgcc.a GCC subroutine library
+/lib/crt[01n].o start-up routine
+\fILIBDIR\fR/ccrt0 additional start-up routine for C++
+/lib/libc.a standard C library, see
+.IR intro (3)
+/usr/include standard directory for \fB#include\fP files
+\fILIBDIR\fR/include standard gcc directory for \fB#include\fP files
+\fILIBDIR\fR/g++\-include additional g++ directory for \fB#include\fP
+.Sp
+.fi
+.I LIBDIR
+is usually
+.B /usr/local/lib/\c
+.IR machine / version .
+.br
+.I TMPDIR
+comes from the environment variable
+.B TMPDIR
+(default
+.B /usr/tmp
+if available, else
+.B /tmp\c
+\&).
+.SH "SEE ALSO"
+cpp(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1).
+.br
+.RB "`\|" gcc "\|', `\|" cpp \|',
+.RB "`\|" as "\|', `\|" ld \|',
+and
+.RB `\| gdb \|'
+entries in
+.B info\c
+\&.
+.br
+.I
+Using and Porting GNU CC (for version 2.0)\c
+, Richard M. Stallman;
+.I
+The C Preprocessor\c
+, Richard M. Stallman;
+.I
+Debugging with GDB: the GNU Source-Level Debugger\c
+, Richard M. Stallman and Roland H. Pesch;
+.I
+Using as: the GNU Assembler\c
+, Dean Elsner, Jay Fenlason & friends;
+.I
+ld: the GNU linker\c
+, Steve Chamberlain and Roland Pesch.
+.SH BUGS
+For instructions on reporting bugs, see the GCC manual.
+.SH COPYING
+Copyright
+.if t \(co
+1991, 1992, 1993 Free Software Foundation, Inc.
+.PP
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+.PP
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the
+entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+.PP
+Permission is granted to copy and distribute translations of this
+manual into another language, under the above conditions for modified
+versions, except that this permission notice may be included in
+translations approved by the Free Software Foundation instead of in
+the original English.
+.SH AUTHORS
+See the GNU CC Manual for the contributors to GNU CC.
diff --git a/gcc/gcc.c b/gcc/gcc.c
index 9680977e50c..c548d7fdb62 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -1,5 +1,5 @@
/* Compiler driver program that can handle many languages.
- Copyright (C) 1987, 89, 92-96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 89, 92-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -31,17 +31,18 @@ CC recognizes how to compile each input file by suffixes in the file names.
Once it knows which kind of compilation to perform, the procedure for
compilation is specified by a string called a "spec". */
+#include "config.h"
+
#include <sys/types.h>
#include <ctype.h>
#include <signal.h>
#include <sys/stat.h>
#include <errno.h>
-#ifndef NO_SYS_FILE_H
+#ifdef HAVE_SYS_FILE_H
#include <sys/file.h> /* May get R_OK, etc. on some systems. */
#endif
-#include "config.h"
#include "obstack.h"
#include "gansidecl.h"
@@ -62,6 +63,7 @@ compilation is specified by a string called a "spec". */
extern int pexecute PROTO ((const char *, char * const *, const char *,
const char *, char **, char **, int));
extern int pwait PROTO ((int, int *, int));
+extern char *update_path PROTO((char *, char *));
/* Flag arguments to pexecute. */
#define PEXECUTE_FIRST 1
#define PEXECUTE_LAST 2
@@ -143,15 +145,15 @@ extern int errno;
#ifndef HAVE_STRERROR
extern int sys_nerr;
-#if defined(bsd4_4)
-extern const char *const sys_errlist[];
-#else
extern char *sys_errlist[];
-#endif
#else
extern char *strerror();
#endif
+#ifndef HAVE_KILL
+#define kill(p,s) raise(s)
+#endif
+
/* If a stage of compilation returns an exit status >= 1,
compilation of that file ceases. */
@@ -238,7 +240,8 @@ static struct compiler *lookup_compiler PROTO((char *, int, char *));
static char *build_search_list PROTO((struct path_prefix *, char *, int));
static void putenv_from_prefixes PROTO((struct path_prefix *, char *));
static char *find_a_file PROTO((struct path_prefix *, char *, int));
-static void add_prefix PROTO((struct path_prefix *, char *, int, int, int *));
+static void add_prefix PROTO((struct path_prefix *, char *, char *,
+ int, int, int *));
static char *skip_whitespace PROTO((char *));
static void record_temp_file PROTO((char *, int, int));
static void delete_if_ordinary PROTO((char *));
@@ -263,6 +266,7 @@ static void print_multilib_info PROTO((void));
static void pfatal_with_name PROTO((char *));
static void perror_with_name PROTO((char *));
static void pfatal_pexecute PROTO((char *, char *));
+static void snapshot_warning PROTO((void));
#ifdef HAVE_VPRINTF
static void fatal PVPROTO((char *, ...));
static void error PVPROTO((char *, ...));
@@ -580,13 +584,14 @@ static int n_compilers;
static struct compiler default_compilers[] =
{
/* Add lists of suffixes of known languages here. If those languages
- were no present when we built the driver, we will hit these copies
- and given a more meaningful error than "file not used since
+ were not present when we built the driver, we will hit these copies
+ and be given a more meaningful error than "file not used since
linking is not done". */
{".cc", "#C++"}, {".cxx", "#C++"}, {".cpp", "#C++"}, {".c++", "#C++"},
{".C", "#C++"}, {".ads", "#Ada"}, {".adb", "#Ada"}, {".ada", "#Ada"},
{".f", "#Fortran"}, {".for", "#Fortran"}, {".F", "#Fortran"},
{".fpp", "#Fortran"},
+ {".p", "#Pascal"}, {".pas", "#Pascal"},
/* Next come the entries for C. */
{".c", "@c"},
{"@c",
@@ -1160,7 +1165,8 @@ set_spec (name, spec)
if (!specs)
{
struct spec_list *next = (struct spec_list *)0;
- for (i = (sizeof (static_specs) / sizeof (static_specs[0])) - 1; i >= 0; i--)
+ for (i = (sizeof (static_specs) / sizeof (static_specs[0])) - 1;
+ i >= 0; i--)
{
sl = &static_specs[i];
sl->next = next;
@@ -1350,9 +1356,8 @@ store_arg (arg, delete_always, delete_failure)
int delete_always, delete_failure;
{
if (argbuf_index + 1 == argbuf_length)
- {
- argbuf = (char **) xrealloc (argbuf, (argbuf_length *= 2) * sizeof (char *));
- }
+ argbuf
+ = (char **) xrealloc (argbuf, (argbuf_length *= 2) * sizeof (char *));
argbuf[argbuf_index++] = arg;
argbuf[argbuf_index] = 0;
@@ -1420,17 +1425,20 @@ read_specs (filename, main_p)
if (*p == '%' && !main_p)
{
p1 = p;
- while (*p && *p != '\n') p++;
- p++; /* skip \n */
+ while (*p && *p != '\n')
+ p++;
+
+ p++; /* Skip '\n' */
if (!strncmp (p1, "%include", sizeof ("%include")-1)
- && (p1[ sizeof ("%include")-1 ] == ' '
- || p1[ sizeof ("%include")-1 ] == '\t'))
+ && (p1[sizeof "%include" - 1] == ' '
+ || p1[sizeof "%include" - 1] == '\t'))
{
char *new_filename;
p1 += sizeof ("%include");
- while (*p1 == ' ' || *p1 == '\t') p1++;
+ while (*p1 == ' ' || *p1 == '\t')
+ p1++;
if (*p1++ != '<' || p[-2] != '>')
fatal ("specs %%include syntax malformed after %d characters",
@@ -1441,13 +1449,13 @@ read_specs (filename, main_p)
read_specs (new_filename ? new_filename : p1, FALSE);
continue;
}
- else if (!strncmp (p1, "%include_noerr", sizeof ("%include_noerr")-1)
- && (p1[ sizeof ("%include_noerr")-1 ] == ' '
- || p1[ sizeof ("%include_noerr")-1 ] == '\t'))
+ else if (!strncmp (p1, "%include_noerr", sizeof "%include_noerr" - 1)
+ && (p1[sizeof "%include_noerr" - 1] == ' '
+ || p1[sizeof "%include_noerr" - 1] == '\t'))
{
char *new_filename;
- p1 += sizeof ("%include_noerr");
+ p1 += sizeof "%include_noerr";
while (*p1 == ' ' || *p1 == '\t') p1++;
if (*p1++ != '<' || p[-2] != '>')
@@ -1462,36 +1470,44 @@ read_specs (filename, main_p)
fprintf (stderr, "Could not find specs file %s\n", p1);
continue;
}
- else if (!strncmp (p1, "%rename", sizeof ("%rename")-1)
- && (p1[ sizeof ("%rename")-1 ] == ' '
- || p1[ sizeof ("%rename")-1 ] == '\t'))
+ else if (!strncmp (p1, "%rename", sizeof "%rename" - 1)
+ && (p1[sizeof "%rename" - 1] == ' '
+ || p1[sizeof "%rename" - 1] == '\t'))
{
int name_len;
struct spec_list *sl;
/* Get original name */
- p1 += sizeof ("%rename");
- while (*p1 == ' ' || *p1 == '\t') p1++;
- if (!isalpha (*p1))
+ p1 += sizeof "%rename";
+ while (*p1 == ' ' || *p1 == '\t')
+ p1++;
+
+ if (! isalpha (*p1))
fatal ("specs %%rename syntax malformed after %d characters",
p1 - buffer);
p2 = p1;
- while (*p2 && !isspace (*p2)) p2++;
+ while (*p2 && !isspace (*p2))
+ p2++;
+
if (*p2 != ' ' && *p2 != '\t')
fatal ("specs %%rename syntax malformed after %d characters",
p2 - buffer);
name_len = p2 - p1;
*p2++ = '\0';
- while (*p2 == ' ' || *p2 == '\t') p2++;
- if (!isalpha (*p2))
+ while (*p2 == ' ' || *p2 == '\t')
+ p2++;
+
+ if (! isalpha (*p2))
fatal ("specs %%rename syntax malformed after %d characters",
p2 - buffer);
/* Get new spec name */
p3 = p2;
- while (*p3 && !isspace (*p3)) p3++;
+ while (*p3 && !isspace (*p3))
+ p3++;
+
if (p3 != p-1)
fatal ("specs %%rename syntax malformed after %d characters",
p3 - buffer);
@@ -1504,7 +1520,7 @@ read_specs (filename, main_p)
if (!sl)
fatal ("specs %s spec was not found to be renamed", p1);
- if (!strcmp (p1, p2))
+ if (strcmp (p1, p2) == 0)
continue;
if (verbose_flag)
@@ -1530,22 +1546,30 @@ read_specs (filename, main_p)
/* Find the colon that should end the suffix. */
p1 = p;
- while (*p1 && *p1 != ':' && *p1 != '\n') p1++;
+ while (*p1 && *p1 != ':' && *p1 != '\n')
+ p1++;
+
/* The colon shouldn't be missing. */
if (*p1 != ':')
fatal ("specs file malformed after %d characters", p1 - buffer);
+
/* Skip back over trailing whitespace. */
p2 = p1;
- while (p2 > buffer && (p2[-1] == ' ' || p2[-1] == '\t')) p2--;
+ while (p2 > buffer && (p2[-1] == ' ' || p2[-1] == '\t'))
+ p2--;
+
/* Copy the suffix to a string. */
suffix = save_string (p, p2 - p);
/* Find the next line. */
p = skip_whitespace (p1 + 1);
if (p[1] == 0)
fatal ("specs file malformed after %d characters", p - buffer);
+
p1 = p;
/* Find next blank line. */
- while (*p1 && !(*p1 == '\n' && p1[1] == '\n')) p1++;
+ while (*p1 && !(*p1 == '\n' && p1[1] == '\n'))
+ p1++;
+
/* Specs end at the blank line and do not include the newline. */
spec = save_string (p, p1 - p);
p = p1;
@@ -1558,9 +1582,9 @@ read_specs (filename, main_p)
if (in[0] == '\\' && in[1] == '\n')
in += 2;
else if (in[0] == '#')
- {
- while (*in && *in != '\n') in++;
- }
+ while (*in && *in != '\n')
+ in++;
+
else
*out++ = *in++;
}
@@ -1578,7 +1602,9 @@ read_specs (filename, main_p)
/* Add this pair to the vector. */
compilers
= ((struct compiler *)
- xrealloc (compilers, (n_compilers + 2) * sizeof (struct compiler)));
+ xrealloc (compilers,
+ (n_compilers + 2) * sizeof (struct compiler)));
+
compilers[n_compilers].suffix = suffix;
bzero ((char *) compilers[n_compilers].spec,
sizeof compilers[n_compilers].spec);
@@ -1651,10 +1677,12 @@ record_temp_file (filename, always_delete, fail_delete)
for (temp = always_delete_queue; temp; temp = temp->next)
if (! strcmp (name, temp->name))
goto already1;
+
temp = (struct temp_file *) xmalloc (sizeof (struct temp_file));
temp->next = always_delete_queue;
temp->name = name;
always_delete_queue = temp;
+
already1:;
}
@@ -1664,10 +1692,12 @@ record_temp_file (filename, always_delete, fail_delete)
for (temp = failure_delete_queue; temp; temp = temp->next)
if (! strcmp (name, temp->name))
goto already2;
+
temp = (struct temp_file *) xmalloc (sizeof (struct temp_file));
temp->next = failure_delete_queue;
temp->name = name;
failure_delete_queue = temp;
+
already2:;
}
}
@@ -1686,7 +1716,9 @@ delete_if_ordinary (name)
fflush (stdout);
i = getchar ();
if (i != '\n')
- while ((c = getchar ()) != '\n' && c != EOF) ;
+ while ((c = getchar ()) != '\n' && c != EOF)
+ ;
+
if (i == 'y' || i == 'Y')
#endif /* DEBUG */
if (stat (name, &st) >= 0 && S_ISREG (st.st_mode))
@@ -1802,7 +1834,7 @@ build_search_list (paths, prefix, check_dir_p)
int len = strlen (pprefix->prefix);
if (machine_suffix
- && (!check_dir_p
+ && (! check_dir_p
|| is_directory (pprefix->prefix, machine_suffix, 0)))
{
if (!first_time)
@@ -1815,10 +1847,10 @@ build_search_list (paths, prefix, check_dir_p)
if (just_machine_suffix
&& pprefix->require_machine_suffix == 2
- && (!check_dir_p
+ && (! check_dir_p
|| is_directory (pprefix->prefix, just_machine_suffix, 0)))
{
- if (!first_time)
+ if (! first_time)
obstack_1grow (&collect_obstack, PATH_SEPARATOR);
first_time = FALSE;
@@ -1827,15 +1859,16 @@ build_search_list (paths, prefix, check_dir_p)
just_suffix_len);
}
- if (!pprefix->require_machine_suffix)
+ if (! pprefix->require_machine_suffix)
{
- if (!first_time)
+ if (! first_time)
obstack_1grow (&collect_obstack, PATH_SEPARATOR);
first_time = FALSE;
obstack_grow (&collect_obstack, pprefix->prefix, len);
}
}
+
obstack_1grow (&collect_obstack, '\0');
return obstack_finish (&collect_obstack);
}
@@ -1873,7 +1906,10 @@ find_a_file (pprefix, name, mode)
/* Determine the filename to execute (special case for absolute paths). */
- if (*name == '/' || *name == DIR_SEPARATOR)
+ if (*name == '/' || *name == DIR_SEPARATOR
+ /* Check for disk name on MS-DOS-based systems. */
+ || (DIR_SEPARATOR == '\\' && name[1] == ':'
+ && (name[2] == DIR_SEPARATOR || name[2] == '/')))
{
if (access (name, mode))
{
@@ -1947,7 +1983,7 @@ find_a_file (pprefix, name, mode)
/* Certain prefixes can't be used without the machine suffix
when the machine or version is explicitly specified. */
- if (!pl->require_machine_suffix)
+ if (! pl->require_machine_suffix)
{
/* Some systems have a suffix for executable files.
So try appending that first. */
@@ -1986,14 +2022,17 @@ find_a_file (pprefix, name, mode)
through this prefix. WARN should point to an int
which will be set to 1 if this entry is used.
+ COMPONENT is the value to be passed to update_path.
+
REQUIRE_MACHINE_SUFFIX is 1 if this prefix can't be used without
the complete value of machine_suffix.
2 means try both machine_suffix and just_machine_suffix. */
static void
-add_prefix (pprefix, prefix, first, require_machine_suffix, warn)
+add_prefix (pprefix, prefix, component, first, require_machine_suffix, warn)
struct path_prefix *pprefix;
char *prefix;
+ char *component;
int first;
int require_machine_suffix;
int *warn;
@@ -2001,7 +2040,7 @@ add_prefix (pprefix, prefix, first, require_machine_suffix, warn)
struct prefix_list *pl, **prev;
int len;
- if (!first && pprefix->plist)
+ if (! first && pprefix->plist)
{
for (pl = pprefix->plist; pl->next; pl = pl->next)
;
@@ -2012,6 +2051,7 @@ add_prefix (pprefix, prefix, first, require_machine_suffix, warn)
/* Keep track of the longest prefix */
+ prefix = update_path (prefix, component);
len = strlen (prefix);
if (len > pprefix->max_len)
pprefix->max_len = len;
@@ -2051,6 +2091,7 @@ unused_prefix_warnings (pprefix)
/* Prevent duplicate warnings. */
*pl->used_flag_ptr = 1;
}
+
pl = pl->next;
}
}
@@ -2071,6 +2112,7 @@ free_path_prefix (pprefix)
free (temp->prefix);
free ((char *) temp);
}
+
pprefix->plist = (struct prefix_list *) 0;
}
@@ -2117,7 +2159,7 @@ execute ()
for (n_commands = 1, i = 0; i < argbuf_index; i++)
if (strcmp (argbuf[i], "|") == 0)
{ /* each command. */
-#if defined (__MSDOS__) || (defined (_WIN32) && ! defined (__CYGWIN32__)) || defined (OS2)
+#if defined (__MSDOS__) || (defined (_WIN32) && ! defined (__CYGWIN32__)) || defined (OS2) || defined (VMS)
fatal ("-pipe not supported");
#endif
argbuf[i] = 0; /* termination of command args. */
@@ -2154,7 +2196,9 @@ execute ()
fflush (stderr);
i = getchar ();
if (i != '\n')
- while (getchar () != '\n') ;
+ while (getchar () != '\n')
+ ;
+
if (i != 'y' && i != 'Y')
return 0;
#endif /* DEBUG */
@@ -2362,8 +2406,8 @@ process_command (argc, argv)
if (gcc_exec_prefix)
{
- add_prefix (&exec_prefixes, gcc_exec_prefix, 0, 0, NULL_PTR);
- add_prefix (&startfile_prefixes, gcc_exec_prefix, 0, 0, NULL_PTR);
+ add_prefix (&exec_prefixes, gcc_exec_prefix, "GCC", 0, 0, NULL_PTR);
+ add_prefix (&startfile_prefixes, gcc_exec_prefix, "GCC", 0, 0, NULL_PTR);
}
/* COMPILER_PATH and LIBRARY_PATH have values
@@ -2390,7 +2434,7 @@ process_command (argc, argv)
}
else
nstore[endp-startp] = 0;
- add_prefix (&exec_prefixes, nstore, 0, 0, NULL_PTR);
+ add_prefix (&exec_prefixes, nstore, 0, 0, 0, NULL_PTR);
if (*endp == 0)
break;
endp = startp = endp + 1;
@@ -2421,7 +2465,8 @@ process_command (argc, argv)
}
else
nstore[endp-startp] = 0;
- add_prefix (&startfile_prefixes, nstore, 0, 0, NULL_PTR);
+ add_prefix (&startfile_prefixes, nstore, NULL_PTR,
+ 0, 0, NULL_PTR);
if (*endp == 0)
break;
endp = startp = endp + 1;
@@ -2453,7 +2498,8 @@ process_command (argc, argv)
}
else
nstore[endp-startp] = 0;
- add_prefix (&startfile_prefixes, nstore, 0, 0, NULL_PTR);
+ add_prefix (&startfile_prefixes, nstore, NULL_PTR,
+ 0, 0, NULL_PTR);
if (*endp == 0)
break;
endp = startp = endp + 1;
@@ -2468,7 +2514,7 @@ process_command (argc, argv)
#ifdef LANG_SPECIFIC_DRIVER
/* Do language-specific adjustment/addition of flags. */
- lang_specific_driver (&fatal, &argc, &argv);
+ lang_specific_driver (fatal, &argc, &argv);
#endif
/* Scan argv twice. Here, the first time, just count how many switches
@@ -2487,7 +2533,7 @@ process_command (argc, argv)
}
else if (! strcmp (argv[i], "-dumpversion"))
{
- printf ("%s\n", version_string);
+ printf ("%s\n", spec_version);
exit (0);
}
else if (! strcmp (argv[i], "-dumpmachine"))
@@ -2650,10 +2696,12 @@ process_command (argc, argv)
value = argv[++i];
else
value = p + 1;
- add_prefix (&exec_prefixes, value, 1, 0, &warn_B);
- add_prefix (&startfile_prefixes, value, 1, 0, &warn_B);
- add_prefix (&include_prefixes, concat (value, "include", NULL_PTR),
- 1, 0, NULL_PTR);
+ add_prefix (&exec_prefixes, value, NULL_PTR, 1, 0, &warn_B);
+ add_prefix (&startfile_prefixes, value, NULL_PTR,
+ 1, 0, &warn_B);
+ add_prefix (&include_prefixes, concat (value, "include",
+ NULL_PTR),
+ NULL_PTR, 1, 0, NULL_PTR);
/* As a kludge, if the arg is "[foo/]stageN/", just add
"[foo/]include" to the include prefix. */
@@ -2669,14 +2717,14 @@ process_command (argc, argv)
|| value[len - 1] == DIR_SEPARATOR))
{
if (len == 7)
- add_prefix (&include_prefixes, "include",
+ add_prefix (&include_prefixes, "include", NULL_PTR,
1, 0, NULL_PTR);
else
{
char *string = xmalloc (len + 1);
strncpy (string, value, len-7);
strcpy (string+len-7, "include");
- add_prefix (&include_prefixes, string,
+ add_prefix (&include_prefixes, string, NULL_PTR,
1, 0, NULL_PTR);
}
}
@@ -2702,6 +2750,36 @@ process_command (argc, argv)
spec_version = p + 1;
compiler_version = spec_version;
warn_std_ptr = &warn_std;
+
+ /* Validate the version number. Use the same checks
+ done when inserting it into a spec.
+
+ The format of the version string is
+ ([^0-9]*-)?[0-9]+[.][0-9]+([.][0-9]+)?([- ].*)? */
+ {
+ char *v = compiler_version;
+
+ /* Ignore leading non-digits. i.e. "foo-" in "foo-2.7.2". */
+ while (! isdigit (*v))
+ v++;
+
+ if (v > compiler_version && v[-1] != '-')
+ fatal ("invalid version number format");
+
+ /* Set V after the first period. */
+ while (isdigit (*v))
+ v++;
+
+ if (*v != '.')
+ fatal ("invalid version number format");
+
+ v++;
+ while (isdigit (*v))
+ v++;
+
+ if (*v != 0 && *v != ' ' && *v != '.' && *v != '-')
+ fatal ("invalid version number format");
+ }
break;
case 'c':
@@ -2749,12 +2827,16 @@ process_command (argc, argv)
/* Use 2 as fourth arg meaning try just the machine as a suffix,
as well as trying the machine and the version. */
#ifndef OS2
- add_prefix (&exec_prefixes, standard_exec_prefix, 0, 2, warn_std_ptr);
- add_prefix (&exec_prefixes, standard_exec_prefix_1, 0, 2, warn_std_ptr);
+ add_prefix (&exec_prefixes, standard_exec_prefix, "BINUTILS",
+ 0, 2, warn_std_ptr);
+ add_prefix (&exec_prefixes, standard_exec_prefix_1, "BINUTILS",
+ 0, 2, warn_std_ptr);
#endif
- add_prefix (&startfile_prefixes, standard_exec_prefix, 0, 1, warn_std_ptr);
- add_prefix (&startfile_prefixes, standard_exec_prefix_1, 0, 1, warn_std_ptr);
+ add_prefix (&startfile_prefixes, standard_exec_prefix, "BINUTILS",
+ 0, 1, warn_std_ptr);
+ add_prefix (&startfile_prefixes, standard_exec_prefix_1, "BINUTILS",
+ 0, 1, warn_std_ptr);
tooldir_prefix = concat (tooldir_base_prefix, spec_machine,
dir_separator_str, NULL_PTR);
@@ -2777,11 +2859,11 @@ process_command (argc, argv)
add_prefix (&exec_prefixes,
concat (gcc_exec_tooldir_prefix, "bin",
dir_separator_str, NULL_PTR),
- 0, 0, NULL_PTR);
+ NULL_PTR, 0, 0, NULL_PTR);
add_prefix (&startfile_prefixes,
concat (gcc_exec_tooldir_prefix, "lib",
dir_separator_str, NULL_PTR),
- 0, 0, NULL_PTR);
+ NULL_PTR, 0, 0, NULL_PTR);
}
tooldir_prefix = concat (standard_exec_prefix, spec_machine,
@@ -2791,10 +2873,10 @@ process_command (argc, argv)
add_prefix (&exec_prefixes,
concat (tooldir_prefix, "bin", dir_separator_str, NULL_PTR),
- 0, 0, NULL_PTR);
+ "BINUTILS", 0, 0, NULL_PTR);
add_prefix (&startfile_prefixes,
concat (tooldir_prefix, "lib", dir_separator_str, NULL_PTR),
- 0, 0, NULL_PTR);
+ "BINUTILS", 0, 0, NULL_PTR);
/* More prefixes are enabled in main, after we read the specs file
and determine whether this is cross-compilation or not. */
@@ -2853,23 +2935,23 @@ process_command (argc, argv)
for (j = 4; argv[i][j]; j++)
if (argv[i][j] == ',')
{
- infiles[n_infiles].language = 0;
+ infiles[n_infiles].language = "*";
infiles[n_infiles++].name
= save_string (argv[i] + prev, j - prev);
prev = j + 1;
}
/* Record the part after the last comma. */
- infiles[n_infiles].language = 0;
+ infiles[n_infiles].language = "*";
infiles[n_infiles++].name = argv[i] + prev;
}
else if (strcmp (argv[i], "-Xlinker") == 0)
{
- infiles[n_infiles].language = 0;
+ infiles[n_infiles].language = "*";
infiles[n_infiles++].name = argv[++i];
}
else if (strncmp (argv[i], "-l", 2) == 0)
{
- infiles[n_infiles].language = 0;
+ infiles[n_infiles].language = "*";
infiles[n_infiles++].name = argv[i];
}
else if (strcmp (argv[i], "-specs") == 0)
@@ -4302,6 +4384,10 @@ main (argc, argv)
signal (SIGPIPE, fatal_error);
#endif
+ /* If this is a test release of GCC, issue a warning. */
+ if (version_string[0] == 't' && version_string[1] == 'e')
+ snapshot_warning ();
+
argbuf_length = 10;
argbuf = (char **) xmalloc (argbuf_length * sizeof (char *));
@@ -4416,16 +4502,18 @@ main (argc, argv)
if (*cross_compile == '0')
{
#ifdef MD_EXEC_PREFIX
- add_prefix (&exec_prefixes, md_exec_prefix, 0, 0, NULL_PTR);
- add_prefix (&startfile_prefixes, md_exec_prefix, 0, 0, NULL_PTR);
+ add_prefix (&exec_prefixes, md_exec_prefix, "GCC", 0, 0, NULL_PTR);
+ add_prefix (&startfile_prefixes, md_exec_prefix, "GCC", 0, 0, NULL_PTR);
#endif
#ifdef MD_STARTFILE_PREFIX
- add_prefix (&startfile_prefixes, md_startfile_prefix, 0, 0, NULL_PTR);
+ add_prefix (&startfile_prefixes, md_startfile_prefix, "GCC",
+ 0, 0, NULL_PTR);
#endif
#ifdef MD_STARTFILE_PREFIX_1
- add_prefix (&startfile_prefixes, md_startfile_prefix_1, 0, 0, NULL_PTR);
+ add_prefix (&startfile_prefixes, md_startfile_prefix_1, "GCC",
+ 0, 0, NULL_PTR);
#endif
/* If standard_startfile_prefix is relative, base it on
@@ -4433,29 +4521,37 @@ main (argc, argv)
as a unit. If GCC_EXEC_PREFIX is defined, base
standard_startfile_prefix on that as well. */
if (*standard_startfile_prefix == '/'
- || *standard_startfile_prefix == DIR_SEPARATOR)
- add_prefix (&startfile_prefixes, standard_startfile_prefix, 0, 0,
- NULL_PTR);
+ || *standard_startfile_prefix == DIR_SEPARATOR
+ || *standard_startfile_prefix == '$'
+#ifdef __MSDOS__
+ /* Check for disk name on MS-DOS-based systems. */
+ || (standard_startfile_prefix[1] == ':'
+ && (standard_startfile_prefix[2] == DIR_SEPARATOR
+ || standard_startfile_prefix[2] == '/'))
+#endif
+ )
+ add_prefix (&startfile_prefixes, standard_startfile_prefix, "BINUTILS",
+ 0, 0, NULL_PTR);
else
{
if (gcc_exec_prefix)
add_prefix (&startfile_prefixes,
concat (gcc_exec_prefix, machine_suffix,
standard_startfile_prefix, NULL_PTR),
- 0, 0, NULL_PTR);
+ NULL_PTR, 0, 0, NULL_PTR);
add_prefix (&startfile_prefixes,
concat (standard_exec_prefix,
machine_suffix,
standard_startfile_prefix, NULL_PTR),
- 0, 0, NULL_PTR);
+ NULL_PTR, 0, 0, NULL_PTR);
}
- add_prefix (&startfile_prefixes, standard_startfile_prefix_1, 0, 0,
- NULL_PTR);
- add_prefix (&startfile_prefixes, standard_startfile_prefix_2, 0, 0,
- NULL_PTR);
+ add_prefix (&startfile_prefixes, standard_startfile_prefix_1,
+ "BINUTILS", 0, 0, NULL_PTR);
+ add_prefix (&startfile_prefixes, standard_startfile_prefix_2,
+ "BINUTILS", 0, 0, NULL_PTR);
#if 0 /* Can cause surprises, and one can use -B./ instead. */
- add_prefix (&startfile_prefixes, "./", 0, 1, NULL_PTR);
+ add_prefix (&startfile_prefixes, "./", NULL_PTR, 0, 1, NULL_PTR);
#endif
}
else
@@ -4464,7 +4560,7 @@ main (argc, argv)
add_prefix (&startfile_prefixes,
concat (gcc_exec_prefix, machine_suffix,
standard_startfile_prefix, NULL_PTR),
- 0, 0, NULL_PTR);
+ "BINUTILS", 0, 0, NULL_PTR);
}
/* If we have a GCC_EXEC_PREFIX envvar, modify it for cpp's sake. */
@@ -4729,7 +4825,7 @@ main (argc, argv)
/* Find the proper compilation spec for the file name NAME,
whose length is LENGTH. LANGUAGE is the specified language,
- or 0 if none specified. */
+ or 0 if this file is to be passed to the linker. */
static struct compiler *
lookup_compiler (name, length, language)
@@ -4739,19 +4835,19 @@ lookup_compiler (name, length, language)
{
struct compiler *cp;
- /* Look for the language, if one is spec'd. */
+ /* If this was specified by the user to be a linker input, indicate that. */
+ if (language != 0 && language[0] == '*')
+ return 0;
+
+ /* Otherwise, look for the language, if one is spec'd. */
if (language != 0)
{
for (cp = compilers + n_compilers - 1; cp >= compilers; cp--)
- {
- if (language != 0)
- {
- if (cp->suffix[0] == '@'
- && !strcmp (cp->suffix + 1, language))
- return cp;
- }
- }
+ if (cp->suffix[0] == '@' && !strcmp (cp->suffix + 1, language))
+ return cp;
+
error ("language %s not recognized", language);
+ return 0;
}
/* Look for a suffix. */
@@ -4759,23 +4855,24 @@ lookup_compiler (name, length, language)
{
if (/* The suffix `-' matches only the file name `-'. */
(!strcmp (cp->suffix, "-") && !strcmp (name, "-"))
- ||
- (strlen (cp->suffix) < length
- /* See if the suffix matches the end of NAME. */
+ || (strlen (cp->suffix) < length
+ /* See if the suffix matches the end of NAME. */
#ifdef OS2
- && (!strcmp (cp->suffix,
- name + length - strlen (cp->suffix))
- || !strpbrk (cp->suffix, "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
- && !strcasecmp (cp->suffix,
- name + length - strlen (cp->suffix)))))
+ && ((!strcmp (cp->suffix,
+ name + length - strlen (cp->suffix))
+ || !strpbrk (cp->suffix, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"))
+ && !strcasecmp (cp->suffix,
+ name + length - strlen (cp->suffix)))
#else
- && !strcmp (cp->suffix,
- name + length - strlen (cp->suffix))))
+ && !strcmp (cp->suffix,
+ name + length - strlen (cp->suffix))
#endif
+ ))
{
if (cp->spec[0][0] == '@')
{
struct compiler *new;
+
/* An alias entry maps a suffix to a language.
Search for the language; pass 0 for NAME and LENGTH
to avoid infinite recursion if language not found.
@@ -4787,6 +4884,7 @@ lookup_compiler (name, length, language)
(char *) new->spec, sizeof new->spec);
return new;
}
+
/* A non-alias entry: return it. */
return cp;
}
@@ -4901,6 +4999,8 @@ pfatal_pexecute (errmsg_fmt, errmsg_arg)
char *errmsg_fmt;
char *errmsg_arg;
{
+ int save_errno = errno;
+
if (errmsg_arg)
{
/* Space for trailing '\0' is in %s. */
@@ -4909,7 +5009,7 @@ pfatal_pexecute (errmsg_fmt, errmsg_arg)
errmsg_fmt = msg;
}
- fatal ("%s: %s", errmsg_fmt, my_strerror (errno));
+ fatal ("%s: %s", errmsg_fmt, my_strerror (save_errno));
}
/* More 'friendly' abort that prints the line and file.
@@ -5076,7 +5176,7 @@ validate_switches (start)
}
/* Check whether a particular argument was used. The first time we
- canonialize the switches to keep only the ones we care about. */
+ canonicalize the switches to keep only the ones we care about. */
static int
used_arg (p, len)
@@ -5441,3 +5541,61 @@ print_multilib_info ()
++p;
}
}
+
+/* If a snapshot, warn the user that this version of gcc is for testing and
+ developing only. If we can find a home directory, we can restrict the
+ warning to once per day. Otherwise always issue it. */
+
+#define TIMESTAMP_FILE ".gcc-test-time"
+#define ONE_DAY (24*60*60)
+
+static void
+snapshot_warning ()
+{
+ char *home;
+ int print_p = 1;
+
+ /* Every function here but `time' is called elsewhere in this file,
+ but we only can be sure we have it for Unix and the Windows systems,
+ so conditionalize this on those.
+
+ ??? This should use autoconf at some point. */
+
+#if defined(unix) || defined(__CYGWIN32__) || defined(_MINGW32__)
+
+ home = getenv ("HOME");
+ if (home != 0)
+ {
+ char *file_name
+ = (char *) alloca (strlen (home) + 1 + sizeof (TIMESTAMP_FILE));
+ struct stat statbuf;
+ time_t now = time (NULL);
+ int s;
+
+ sprintf (file_name, "%s/%s", home, TIMESTAMP_FILE);
+ s = stat (file_name, &statbuf);
+ if (s == 0
+ && (statbuf.st_mtime + ONE_DAY > now))
+ print_p = 0;
+ else
+ {
+ FILE *f = fopen (file_name, "w");
+
+ if (f != 0)
+ {
+ fputc ('\n', f);
+ fclose (f);
+ }
+ }
+ }
+#endif
+
+ if (print_p)
+ {
+ fprintf (stderr, "*** This is a development snapshot of GCC.\n");
+ fprintf (stderr,
+ "*** It is not a reliable release, and the GCC developers\n");
+ fprintf (stderr,
+ "*** warn you not to use it for anything except to test it.\n");
+ }
+}
diff --git a/gcc/gcc.hlp b/gcc/gcc.hlp
new file mode 100644
index 00000000000..26e22faba29
--- /dev/null
+++ b/gcc/gcc.hlp
@@ -0,0 +1,403 @@
+1 GCC
+
+ The GCC command invokes the GNU C compiler.
+
+ GCC file-spec
+
+2 Parameters
+
+ file-spec
+
+ A C source file. If no input file extension is specified, GNU C
+ assumes .C as the default extension unless the /PLUS qualifier is
+ given, in which case .CC is assumed as the default extension.
+
+ If an extension of .CPP is given, then the source file is assumed to
+ be the output of the preprocessor, and thus the preprocessor is not
+ executed.
+
+ If an extension of .S is given, then the source file is assumed to be
+ the assembly code output of the compiler, and only the assembler is
+ called to generate an object file.
+
+2 Qualifiers
+
+ GNU C command qualifiers modify the way the compiler handles the
+ compilation.
+
+ The following is the list of available qualifiers for GNU C:
+
+ /CASE_HACK
+ /CC1_OPTIONS=(option [,option...]])
+ /DEBUG
+ /DEFINE=(identifier[=definition][,...])
+ /G_FLOAT
+ /INCLUDE_DIRECTORY=(path [,path...]])
+ /LIST[=filename]
+ /MACHINE_CODE
+ /OBJECT[=filename]
+ /OPTIMIZE
+ /PLUS
+ /PROFILE[=identifier]
+ /SCAN=(file[,file...])
+ /SHOW[=option]
+ /UNDEFINE=(identifier[,identifier,...])
+ /VERBOSE
+ /VERSION
+ /WARNING
+
+2 Linking
+
+ When linking programs compiled with GNU C, you should include the GNU
+ C library before the VAX C library. For example,
+
+ LINK object-file,GNU_CC:[000000]GCCLIB/LIB,SYS$LIBRARY:VAXCRTL/LIB
+
+ You can also link your program with the shared VAX C library. This
+ can reduce the size of the .EXE file, as well as make it smaller when
+ it's running. For example,
+
+ $ LINK object-file, GNU_CC:[000000]GCCLIB/LIB,SYS$INPUT/OPT
+ SYS$SHARE:VAXCRTL/SHARE
+
+ (If you use the second example and type it in by hand, be sure to
+ type ^Z after the last carriage return). A simpler alternative would
+ be to place the single line:
+
+ SYS$SHARE:VAXCRTL/SHARE
+
+ into a file called VAXCRTL.OPT, and then use the link command:
+
+ $ LINK object-file, GNU_CC:[000000]GCCLIB/LIB,VAXCRTL.OPT/OPT
+
+ If a program has been compiled with /G_FLOAT, then the linking
+ instructions are slightly different. If you are linking with the
+ non-shared library, then the command that you should use would be:
+
+ LINK object-file,GNU_CC:[000000]GCCLIB/LIB,SYS$LIBRARY:VAXCRTLG/LIB -
+ ,SYS$LIBRARY:VAXCRTL/LIB
+
+ Note that both VAXCRTL and VAXCRTLG must be linked to. If you are
+ using the shared VAX C library, then you should use a command like:
+
+ $ LINK object-file, GNU_CC:[000000]GCCLIB/LIB,SYS$INPUT:/OPTIONS
+ SYS$SHARE:VAXCRTLG/SHARE
+
+ In the case of the sharable library, only one library needs to be
+ linked to.
+
+2 /CASE_HACK
+
+ /[NO]CASE_HACK D=/CASE_HACK
+
+ Since the VMS Linker and Librarian are not case sensitive with
+ respect to symbol names, a "case-hack" is appended to a symbol name
+ when the symbol contains upper case characters.
+
+ There are cases where this is undesirable, (mainly when using certain
+ applications where modules have been precompiled, perhaps in another
+ language) and we want to compile without case hacking. In these
+ cases the /NOCASE_HACK switch disables case hacking.
+
+2 /CC1_OPTIONS
+
+ This specifies additional switches to the compiler itself which
+ cannot be set by means of the compiler driver.
+
+2 /DEBUG
+
+ /DEBUG includes additional information in the object file output so
+ that the program can be debugged with the VAX Symbolic Debugger.
+
+ To use the debugger it is also necessary to link the debugger to your
+ program, which is done by specifying the /DEBUG qualifier to the link
+ command. With the debugger it is possible to set breakpoints,
+ examine variables, and set variables to new values. See the VAX
+ Symbolic Debugger manual for more information, or type "HELP" from
+ the debugger prompt.
+
+2 /DEFINE
+
+ /DEFINE=(identifier[=definition][,...])
+
+ /DEFINE defines a string or macro ('definition') to be substituted
+ for every occurrence of a given string ('identifier') in a program.
+ It is equivalent to the #define preprocessor directive.
+
+ All definitions and identifiers are converted to uppercase unless
+ they are in quotation marks.
+
+ The simple form of the /DEFINE qualifier:
+
+ /DEFINE=vms
+
+ results in a definition equivalent to the preprocessor directive:
+
+ #define VMS 1
+
+ You must enclose macro definitions in quotation marks, as in this
+ example:
+
+ /DEFINE="C(x)=((x) & 0xff)"
+
+ This definition is the same as the preprocessor definition:
+
+ #define C(x) ((x) & 0xff)
+
+ If more than one /DEFINE is present on the GCC command line, only the
+ last /DEFINE is used.
+
+ If both /DEFINE and /UNDEFINE are present on a command line, /DEFINE
+ is evaluated before /UNDEFINE.
+
+2 /G_FLOAT
+
+ Instructs the compiler to use "G" floating point arithmetic instead
+ of "D". The difference is that double precision has a range of
+ approximately +/-0.56e-308 to +/-0.9 e+308, with approximately 15
+ decimal digits precision.
+
+ "D" floating point has the same range as single precision floating
+ point, with approximately 17 decimal digits precision.
+
+ If you use the /G_FLOAT qualifier, the linking instructions are
+ different. See "Linking" for further details.
+
+2 /LIST
+
+ /LIST[=list_file_name]
+
+ This does not generate a listing file in the usual sense, however it
+ does direct the compiler to save the preprocessor output. If a file
+ is not specified, then this output is written into a file with the
+ same name as the source file and an extension of .CPP.
+
+2 /INCLUDE_DIRECTORY
+
+ /INCLUDE_DIRECTORY=(path [,path...])
+
+ The /INCLUDE_DIRECTORY qualifier provides additional directories to
+ search for user-defined include files. 'path' can be either a
+ logical name or a directory specification.
+
+ There are two forms for specifying include files - #include
+ "file-spec" and #include <file-spec>. For the #include "file-spec"
+ form, the search order is:
+
+ 1. The directory containing the source file.
+
+ 2. The directories in the /INCLUDE qualifier (if any).
+
+ 3. The directory (or directories) specified in the logical name
+ GNU_CC_INCLUDE.
+
+ 4. The directory (or directories) specified in the logical name
+ SYS$LIBRARY.
+
+ For the #include <file-spec> form, the search order is:
+
+ 1. The directories specified in the /INCLUDE qualifier (if any).
+
+ 2. The directory (or directories) specified in the logical name
+ GNU_CC_INCLUDE.
+
+ 3. The directory (or directories) specified in the logical name
+ SYS$LIBRARY.
+
+2 /MACHINE_CODE
+
+ Tells GNU C to output the machine code generated by the compiler.
+ The machine code is output to a file with the same name as the input
+ file, with the extension .S. An object file is still generated,
+ unless /NOOBJ is also specified.
+
+2 /OBJECT
+
+ /OBJECT[=filename]
+ /NOOBJECT
+
+ Controls whether or not an object file is generated by the
+ compiler.
+
+2 /OPTIMIZE
+
+ /[NO]OPTIMIZE
+
+ Controls whether optimization is performed by the compiler. By
+ default, optimization is on. /NOOPTIMIZE turns optimization off.
+
+2 /PLUS
+
+ Instructs the compiler driver to use the GNU-C++ compiler instead of
+ the GNU-C compiler. Note that the default extension of source files
+ is .CC when this qualifier is in effect.
+
+2 /PROFILE
+
+ /PROFILE[=identifier]
+
+ Instructs the compiler to generate function profiling code. You must
+ link your program to the profiler when you use this options. The
+ profile statistics are automatically printed out on the terminal
+ during image exit. (i.e. no modifications to your source file are
+ required in order to use the profiler).
+
+ There are three identifiers that can be used with the /PROFILE
+ switch. These are ALL, FUNCTION, and BLOCK. If /PROFILE is given
+ without an identifier, then FUNCTION is assumed.
+
+3 Block_Profiler
+
+ The block profiler counts how many times control of the program
+ passes certain points in your program. This is useful in determining
+ which portions of a program would benefit from recoding for
+ optimization.
+
+ The report for the block profiler contains the function name, file
+ name, PC, and the source file line number as well as the count of how
+ many times control has passed through the specified source line.
+
+3 Function_Profiler
+
+ The function profiler counts how many times each function is entered,
+ and keeps track of how much CPU time is used within each function.
+
+ You should be careful about interpreting the results of profiles
+ where there are inline functions. When a function is included as
+ inline, then there is no call to the internal data collection routine
+ used by the profiler, and thus there will be no record of this
+ function being called. The compiler does generate a callable version
+ of each inline function, and if this called version is used, then the
+ profiler's data collection routine will be called.
+
+2 /SCAN
+
+ /SCAN=(file[,file...])
+
+ This qualifier supplies a list of files that will be read as input,
+ and the output will be discarded before processing the regular input
+ file. Because the output generated from the files is discarded, the
+ only effect of this qualifier is to make the macros defined in the
+ files available for use in the main input.
+
+2 /SHOW
+
+ /SHOW[=option]
+
+ This causes the preprocessor to generate information other than the
+ preprocessed input file. When this qualifier is used, no assembly
+ code and no object file is generated.
+
+ The output of the preprocessor is placed in the file specified by the
+ /LIST qualifier, if present. If the /LIST qualifier is not present,
+ then the output is placed in a file with the same name as the input
+ file with an extension that depends upon which option that is
+ selected.
+
+3 DEFINITIONS
+
+ This option causes the preprocessor to dump a list of all of the
+ definitions to the output file. This is useful for debugging
+ purposes, since it lets you determine whether or not everything has
+ been defined properly.
+
+ If the default file name is used for the output, the extension will
+ be .DEF.
+
+3 RULES
+
+ This option causes the preprocessor to output a rule suitable for
+ MAKE, describing the dependencies of the main source file. The
+ preprocessor outputs one MAKE rule containing the object file name
+ for that source file, a colon, and the names of all the concluded
+ files. If there are many included files then the rule is split into
+ several lines using the '\'-newline.
+
+ When using this option, only files included with the "#include "file"
+ directive are mentioned.
+
+ If the default file name is used for the output, a null extension
+ will be used.
+
+3 ALL
+
+ This option is similar to RULES, except that it also mentions files
+ included with the "#include <file.h>" directive.
+
+ If the default file name is used for the output, a null extension
+ will be used.
+
+2 /UNDEFINE
+
+ /UNDEFINE cancels a macro definition. Thus, it is the same as the
+ #undef preprocessor directive.
+
+ If more than one /UNDEFINE is present on the GCC command line, only
+ the last /UNDEFINE is used.
+
+ If both /DEFINE and /UNDEFINE are present on a command line, /DEFINE
+ is evaluated before /UNDEFINE.
+
+2 /VERBOSE
+
+ Controls whether the user sees the invocation command strings for the
+ preprocessor, compiler, and assembler. The compiler also outputs
+ some statistics on time spent in its various phases.
+
+2 /VERSION
+
+ Causes the preprocessor and the compiler to identify themselves by
+ their version numbers, and in the case of the compiler, the version
+ number of the compiler that built it.
+
+2 /WARNING
+
+ When this qualifier is present, warnings about usage that should be
+ avoided are given by the compiler. For more information, see "Using
+ and Porting GNU CC", in the section on command line options, under
+ "-Wall".
+
+ Warnings are also generated by the preprocessor when this qualifier
+ is given.
+
+2 Known_Incompatibilities_with_VAX-C
+
+ There are several known incompatibilities between GNU-C and VAX-C.
+ Some common ones will be briefly described here. A complete
+ description can be found in "Using and Porting GNU CC" in the chapter
+ entitled "Using GNU CC on VMS".
+
+ GNU-C provides case hacking as a means of giving case sensitivity
+ to symbol names. The case hack is a hexadecimal number appended to
+ the symbol name, with a bit being set for each upper case letter.
+ Symbols with all lower case, or symbols that have a dollar sign ("$")
+ are not case hacked. There are times that this is undesirable,
+ namely when you wish to link your program against a precompiled
+ library which was compiled with a non-GNU-C compiler. X-windows (or
+ DECWindows) is an example of this. In these instances, the
+ /NOCASE_HACK switch should be used.
+
+ If you require case hacking in some cases, but not in others (i.e.
+ Libg++ with DECWindows), then it is recommended that you develop a
+ header file which will define all mixed case functions that should
+ not have a case hack as the lower case equivalents.
+
+ GNU-C does not provide the globaldef and globalref mechanism
+ which is used by VAX-C to coerce the VMS linker to include certain
+ object modules from a library. There are assembler hacks, which are
+ available to the user through the macros defined in gnu_hacks.h,
+ which effectively give you the ability to perform these functions.
+ While not syntactically identical, they do provide most of the
+ functionality.
+
+ Note that globaldefs of enums is not supported in the way that it is
+ under VAX-C. This can be easily simulated, however, by globaldefing
+ an integer variable, and then globalvaluing all of the enumerated
+ states.
+
+ Furthermore, the way that globalvalue is currently implemented, the
+ data type of the globalvalue variable is seen to the compiler to be a
+ pointer to the data type that you specify. This is necessary in
+ order to make the compiler correctly address the globalvalue
+ variables.
+
diff --git a/gcc/gcc.texi b/gcc/gcc.texi
new file mode 100644
index 00000000000..d70c803af3a
--- /dev/null
+++ b/gcc/gcc.texi
@@ -0,0 +1,4785 @@
+\input texinfo @c -*-texinfo-*-
+@c %**start of header
+@setfilename gcc.info
+@c @setfilename usegcc.info
+@c @setfilename portgcc.info
+@c To produce the full manual, use the "gcc.info" setfilename, and
+@c make sure the following do NOT begin with '@c' (and the @clear lines DO)
+@set INTERNALS
+@set USING
+@c To produce a user-only manual, use the "usegcc.info" setfilename, and
+@c make sure the following does NOT begin with '@c':
+@c @clear INTERNALS
+@c To produce a porter-only manual, use the "portgcc.info" setfilename,
+@c and make sure the following does NOT begin with '@c':
+@c @clear USING
+
+@c (For FSF printing, turn on smallbook, comment out finalout below;
+@c that is all that is needed.)
+
+@c 6/27/96 FSF DO wants smallbook fmt for 1st bound edition.
+@c @smallbook
+
+@c i also commented out the finalout command, so if there *are* any
+@c overfulls, you'll (hopefully) see the rectangle in the right hand
+@c margin. -mew 15june93
+@c @finalout
+
+@c NOTE: checks/things to do:
+@c
+@c -have bob do a search in all seven files for "mew" (ideally --mew,
+@c but i may have forgotten the occasional "--"..).
+@c Just checked... all have `--'! Bob 22Jul96
+@c Use this to search: grep -n '\-\-mew' *.texi
+@c -item/itemx, text after all (sub/sub)section titles, etc..
+@c -consider putting the lists of options on pp 17--> etc in columns or
+@c some such.
+@c -spellcheck
+@c -continuity of phrasing; ie, bit-field vs bitfield in rtl.texi
+@c -overfulls. do a search for "mew" in the files, and you will see
+@c overfulls that i noted but could not deal with.
+@c -have to add text: beginning of chapter 8
+
+@c
+@c anything else? --mew 10feb93
+
+
+
+@ifset INTERNALS
+@ifset USING
+@settitle Using and Porting GNU CC
+@end ifset
+@end ifset
+@c seems reasonable to assume at least one of INTERNALS or USING is set...
+@ifclear INTERNALS
+@settitle Using GNU CC
+@end ifclear
+@ifclear USING
+@settitle Porting GNU CC
+@end ifclear
+
+@syncodeindex fn cp
+@syncodeindex vr cp
+@c %**end of header
+
+@c Use with @@smallbook.
+
+@c Cause even numbered pages to be printed on the left hand side of
+@c the page and odd numbered pages to be printed on the right hand
+@c side of the page. Using this, you can print on both sides of a
+@c sheet of paper and have the text on the same part of the sheet.
+
+@c The text on right hand pages is pushed towards the right hand
+@c margin and the text on left hand pages is pushed toward the left
+@c hand margin.
+@c (To provide the reverse effect, set bindingoffset to -0.75in.)
+
+@c @tex
+@c \global\bindingoffset=0.75in
+@c \global\normaloffset =0.75in
+@c @end tex
+
+@ifinfo
+@ifset INTERNALS
+@ifset USING
+This file documents the use and the internals of the GNU compiler.
+@end ifset
+@end ifset
+@ifclear USING
+This file documents the internals of the GNU compiler.
+@end ifclear
+@ifclear INTERNALS
+This file documents the use of the GNU compiler.
+@end ifclear
+
+Published by the Free Software Foundation
+59 Temple Place - Suite 330
+Boston, MA 02111-1307 USA
+
+Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+@ignore
+Permission is granted to process this file through Tex and print the
+results, provided the printed document carries copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+
+@end ignore
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that the
+sections entitled ``GNU General Public License,'' ``Funding for Free
+Software,'' and ``Protect Your Freedom---Fight `Look And Feel'@w{}'' are
+included exactly as in the original, and provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that the sections entitled ``GNU General Public License,''
+``Funding for Free Software,'' and ``Protect Your Freedom---Fight `Look
+And Feel'@w{}'', and this permission notice, may be included in
+translations approved by the Free Software Foundation instead of in the
+original English.
+@end ifinfo
+
+@setchapternewpage odd
+
+@titlepage
+@ifset INTERNALS
+@ifset USING
+@center @titlefont{Using and Porting GNU CC}
+
+@end ifset
+@end ifset
+@ifclear INTERNALS
+@title Using GNU CC
+@end ifclear
+@ifclear USING
+@title Porting GNU CC
+@end ifclear
+@sp 2
+@center Richard M. Stallman
+@sp 3
+@center Last updated 28 February 1998
+@sp 1
+@c The version number appears five times more in this file.
+
+@center for version 2.8.1
+@page
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1988, 89, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
+@sp 2
+For GCC Version 2.8.1@*
+@sp 1
+Published by the Free Software Foundation @*
+59 Temple Place - Suite 330@*
+Boston, MA 02111-1307, USA@*
+Last printed November, 1995.@*
+Printed copies are available for $50 each.@*
+ISBN 1-882114-36-1
+@sp 1
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that the
+sections entitled ``GNU General Public License,'' ``Funding for Free
+Software,'' and ``Protect Your Freedom---Fight `Look And Feel'@w{}'' are
+included exactly as in the original, and provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that the sections entitled ``GNU General Public License,''
+``Funding for Free Software,'' and ``Protect Your Freedom---Fight `Look
+And Feel'@w{}'', and this permission notice, may be included in
+translations approved by the Free Software Foundation instead of in the
+original English.
+@end titlepage
+@page
+
+@ifinfo
+
+@node Top, G++ and GCC,, (DIR)
+@top Introduction
+@cindex introduction
+
+@ifset INTERNALS
+@ifset USING
+This manual documents how to run, install and port the GNU
+compiler, as well as its new features and incompatibilities, and how to
+report bugs. It corresponds to GNU CC version 2.8.1.
+@end ifset
+@end ifset
+
+@ifclear INTERNALS
+This manual documents how to run and install the GNU compiler,
+as well as its new features and incompatibilities, and how to report
+bugs. It corresponds to GNU CC version 2.8.1.
+@end ifclear
+@ifclear USING
+This manual documents how to port the GNU compiler,
+as well as its new features and incompatibilities, and how to report
+bugs. It corresponds to GNU CC version 2.8.1.
+@end ifclear
+
+@end ifinfo
+@menu
+@ifset USING
+* G++ and GCC:: You can compile C or C++ programs.
+* Invoking GCC:: Command options supported by @samp{gcc}.
+* Installation:: How to configure, compile and install GNU CC.
+* C Extensions:: GNU extensions to the C language family.
+* C++ Extensions:: GNU extensions to the C++ language.
+* Gcov:: gcov: a GNU CC test coverage program.
+* Trouble:: If you have trouble installing GNU CC.
+* Bugs:: How, why and where to report bugs.
+* Service:: How to find suppliers of support for GNU CC.
+* Contributing:: How to contribute to testing and developing GNU CC.
+* VMS:: Using GNU CC on VMS.
+@end ifset
+@ifset INTERNALS
+* Portability:: Goals of GNU CC's portability features.
+* Interface:: Function-call interface of GNU CC output.
+* Passes:: Order of passes, what they do, and what each file is for.
+* RTL:: The intermediate representation that most passes work on.
+* Machine Desc:: How to write machine description instruction patterns.
+* Target Macros:: How to write the machine description C macros.
+* Config:: Writing the @file{xm-@var{machine}.h} file.
+* Fragments:: Writing the @file{t-@var{target}} and @file{x-@var{host}} files.
+@end ifset
+
+* Funding:: How to help assure funding for free software.
+* Look and Feel:: Protect your freedom---fight ``look and feel''.
+
+* Copying:: GNU General Public License says
+ how you can copy and share GNU CC.
+* Contributors:: People who have contributed to GNU CC.
+
+* Index:: Index of concepts and symbol names.
+@end menu
+
+@ifset USING
+@node G++ and GCC
+@chapter Compile C, C++, or Objective C
+
+@cindex Objective C
+The C, C++, and Objective C versions of the compiler are integrated; the
+GNU C compiler can compile programs written in C, C++, or Objective C.
+
+@cindex GCC
+``GCC'' is a common shorthand term for the GNU C compiler. This is both
+the most general name for the compiler, and the name used when the
+emphasis is on compiling C programs.
+
+@cindex C++
+@cindex G++
+When referring to C++ compilation, it is usual to call the compiler
+``G++''. Since there is only one compiler, it is also accurate to call
+it ``GCC'' no matter what the language context; however, the term
+``G++'' is more useful when the emphasis is on compiling C++ programs.
+
+We use the name ``GNU CC'' to refer to the compilation system as a
+whole, and more specifically to the language-independent part of the
+compiler. For example, we refer to the optimization options as
+affecting the behavior of ``GNU CC'' or sometimes just ``the compiler''.
+
+Front ends for other languages, such as Ada 9X, Fortran, Modula-3, and
+Pascal, are under development. These front-ends, like that for C++, are
+built in subdirectories of GNU CC and link to it. The result is an
+integrated compiler that can compile programs written in C, C++,
+Objective C, or any of the languages for which you have installed front
+ends.
+
+In this manual, we only discuss the options for the C, Objective-C, and
+C++ compilers and those of the GNU CC core. Consult the documentation
+of the other front ends for the options to use when compiling programs
+written in other languages.
+
+@cindex compiler compared to C++ preprocessor
+@cindex intermediate C version, nonexistent
+@cindex C intermediate output, nonexistent
+G++ is a @emph{compiler}, not merely a preprocessor. G++ builds object
+code directly from your C++ program source. There is no intermediate C
+version of the program. (By contrast, for example, some other
+implementations use a program that generates a C program from your C++
+source.) Avoiding an intermediate C representation of the program means
+that you get better object code, and better debugging information. The
+GNU debugger, GDB, works with this information in the object code to
+give you comprehensive C++ source-level editing capabilities
+(@pxref{C,,C and C++,gdb.info, Debugging with GDB}).
+
+@c FIXME! Someone who knows something about Objective C ought to put in
+@c a paragraph or two about it here, and move the index entry down when
+@c there is more to point to than the general mention in the 1st par.
+
+@include invoke.texi
+
+@include install.texi
+
+@include extend.texi
+
+@include gcov.texi
+
+@node Trouble
+@chapter Known Causes of Trouble with GNU CC
+@cindex bugs, known
+@cindex installation trouble
+@cindex known causes of trouble
+
+This section describes known problems that affect users of GNU CC. Most
+of these are not GNU CC bugs per se---if they were, we would fix them.
+But the result for a user may be like the result of a bug.
+
+Some of these problems are due to bugs in other software, some are
+missing features that are too much work to add, and some are places
+where people's opinions differ as to what is best.
+
+@menu
+* Actual Bugs:: Bugs we will fix later.
+* Installation Problems:: Problems that manifest when you install GNU CC.
+* Cross-Compiler Problems:: Common problems of cross compiling with GNU CC.
+* Interoperation:: Problems using GNU CC with other compilers,
+ and with certain linkers, assemblers and debuggers.
+* External Bugs:: Problems compiling certain programs.
+* Incompatibilities:: GNU CC is incompatible with traditional C.
+* Fixed Headers:: GNU C uses corrected versions of system header files.
+ This is necessary, but doesn't always work smoothly.
+* Standard Libraries:: GNU C uses the system C library, which might not be
+ compliant with the ISO/ANSI C standard.
+* Disappointments:: Regrettable things we can't change, but not quite bugs.
+* C++ Misunderstandings:: Common misunderstandings with GNU C++.
+* Protoize Caveats:: Things to watch out for when using @code{protoize}.
+* Non-bugs:: Things we think are right, but some others disagree.
+* Warnings and Errors:: Which problems in your code get warnings,
+ and which get errors.
+@end menu
+
+@node Actual Bugs
+@section Actual Bugs We Haven't Fixed Yet
+
+@itemize @bullet
+@item
+The @code{fixincludes} script interacts badly with automounters; if the
+directory of system header files is automounted, it tends to be
+unmounted while @code{fixincludes} is running. This would seem to be a
+bug in the automounter. We don't know any good way to work around it.
+
+@item
+The @code{fixproto} script will sometimes add prototypes for the
+@code{sigsetjmp} and @code{siglongjmp} functions that reference the
+@code{jmp_buf} type before that type is defined. To work around this,
+edit the offending file and place the typedef in front of the
+prototypes.
+
+@item
+There are several obscure case of mis-using struct, union, and
+enum tags that are not detected as errors by the compiler.
+
+@item
+When @samp{-pedantic-errors} is specified, GNU C will incorrectly give
+an error message when a function name is specified in an expression
+involving the comma operator.
+
+@item
+Loop unrolling doesn't work properly for certain C++ programs. This is
+a bug in the C++ front end. It sometimes emits incorrect debug info, and
+the loop unrolling code is unable to recover from this error.
+@end itemize
+
+@node Installation Problems
+@section Installation Problems
+
+This is a list of problems (and some apparent problems which don't
+really mean anything is wrong) that show up during installation of GNU
+CC.
+
+@itemize @bullet
+@item
+On certain systems, defining certain environment variables such as
+@code{CC} can interfere with the functioning of @code{make}.
+
+@item
+If you encounter seemingly strange errors when trying to build the
+compiler in a directory other than the source directory, it could be
+because you have previously configured the compiler in the source
+directory. Make sure you have done all the necessary preparations.
+@xref{Other Dir}.
+
+@item
+If you build GNU CC on a BSD system using a directory stored in a System
+V file system, problems may occur in running @code{fixincludes} if the
+System V file system doesn't support symbolic links. These problems
+result in a failure to fix the declaration of @code{size_t} in
+@file{sys/types.h}. If you find that @code{size_t} is a signed type and
+that type mismatches occur, this could be the cause.
+
+The solution is not to use such a directory for building GNU CC.
+
+@item
+In previous versions of GNU CC, the @code{gcc} driver program looked for
+@code{as} and @code{ld} in various places; for example, in files
+beginning with @file{/usr/local/lib/gcc-}. GNU CC version 2 looks for
+them in the directory
+@file{/usr/local/lib/gcc-lib/@var{target}/@var{version}}.
+
+Thus, to use a version of @code{as} or @code{ld} that is not the system
+default, for example @code{gas} or GNU @code{ld}, you must put them in
+that directory (or make links to them from that directory).
+
+@item
+Some commands executed when making the compiler may fail (return a
+non-zero status) and be ignored by @code{make}. These failures, which
+are often due to files that were not found, are expected, and can safely
+be ignored.
+
+@item
+It is normal to have warnings in compiling certain files about
+unreachable code and about enumeration type clashes. These files' names
+begin with @samp{insn-}. Also, @file{real.c} may get some warnings that
+you can ignore.
+
+@item
+Sometimes @code{make} recompiles parts of the compiler when installing
+the compiler. In one case, this was traced down to a bug in
+@code{make}. Either ignore the problem or switch to GNU Make.
+
+@item
+If you have installed a program known as purify, you may find that it
+causes errors while linking @code{enquire}, which is part of building
+GNU CC. The fix is to get rid of the file @code{real-ld} which purify
+installs---so that GNU CC won't try to use it.
+
+@item
+On GNU/Linux SLS 1.01, there is a problem with @file{libc.a}: it does not
+contain the obstack functions. However, GNU CC assumes that the obstack
+functions are in @file{libc.a} when it is the GNU C library. To work
+around this problem, change the @code{__GNU_LIBRARY__} conditional
+around line 31 to @samp{#if 1}.
+
+@item
+On some 386 systems, building the compiler never finishes because
+@code{enquire} hangs due to a hardware problem in the motherboard---it
+reports floating point exceptions to the kernel incorrectly. You can
+install GNU CC except for @file{float.h} by patching out the command to
+run @code{enquire}. You may also be able to fix the problem for real by
+getting a replacement motherboard. This problem was observed in
+Revision E of the Micronics motherboard, and is fixed in Revision F.
+It has also been observed in the MYLEX MXA-33 motherboard.
+
+If you encounter this problem, you may also want to consider removing
+the FPU from the socket during the compilation. Alternatively, if you
+are running SCO Unix, you can reboot and force the FPU to be ignored.
+To do this, type @samp{hd(40)unix auto ignorefpu}.
+
+@item
+On some 386 systems, GNU CC crashes trying to compile @file{enquire.c}.
+This happens on machines that don't have a 387 FPU chip. On 386
+machines, the system kernel is supposed to emulate the 387 when you
+don't have one. The crash is due to a bug in the emulator.
+
+One of these systems is the Unix from Interactive Systems: 386/ix.
+On this system, an alternate emulator is provided, and it does work.
+To use it, execute this command as super-user:
+
+@example
+ln /etc/emulator.rel1 /etc/emulator
+@end example
+
+@noindent
+and then reboot the system. (The default emulator file remains present
+under the name @file{emulator.dflt}.)
+
+Try using @file{/etc/emulator.att}, if you have such a problem on the
+SCO system.
+
+Another system which has this problem is Esix. We don't know whether it
+has an alternate emulator that works.
+
+On NetBSD 0.8, a similar problem manifests itself as these error messages:
+
+@example
+enquire.c: In function `fprop':
+enquire.c:2328: floating overflow
+@end example
+
+@item
+On SCO systems, when compiling GNU CC with the system's compiler,
+do not use @samp{-O}. Some versions of the system's compiler miscompile
+GNU CC with @samp{-O}.
+
+@cindex @code{genflags}, crash on Sun 4
+@item
+Sometimes on a Sun 4 you may observe a crash in the program
+@code{genflags} or @code{genoutput} while building GNU CC. This is said to
+be due to a bug in @code{sh}. You can probably get around it by running
+@code{genflags} or @code{genoutput} manually and then retrying the
+@code{make}.
+
+@item
+On Solaris 2, executables of GNU CC version 2.0.2 are commonly
+available, but they have a bug that shows up when compiling current
+versions of GNU CC: undefined symbol errors occur during assembly if you
+use @samp{-g}.
+
+The solution is to compile the current version of GNU CC without
+@samp{-g}. That makes a working compiler which you can use to recompile
+with @samp{-g}.
+
+@item
+Solaris 2 comes with a number of optional OS packages. Some of these
+packages are needed to use GNU CC fully. If you did not install all
+optional packages when installing Solaris, you will need to verify that
+the packages that GNU CC needs are installed.
+
+To check whether an optional package is installed, use
+the @code{pkginfo} command. To add an optional package, use the
+@code{pkgadd} command. For further details, see the Solaris
+documentation.
+
+For Solaris 2.0 and 2.1, GNU CC needs six packages: @samp{SUNWarc},
+@samp{SUNWbtool}, @samp{SUNWesu}, @samp{SUNWhea}, @samp{SUNWlibm}, and
+@samp{SUNWtoo}.
+
+For Solaris 2.2, GNU CC needs an additional seventh package: @samp{SUNWsprot}.
+
+@item
+On Solaris 2, trying to use the linker and other tools in
+@file{/usr/ucb} to install GNU CC has been observed to cause trouble.
+For example, the linker may hang indefinitely. The fix is to remove
+@file{/usr/ucb} from your @code{PATH}.
+
+@item
+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
+when optimizing floating point code. Otherwise, the assembler will
+complain when the GCC compiler fills a branch delay slot with a
+floating point instruction, such as @code{add.d}.
+
+@item
+If on a MIPS system you get an error message saying ``does not have gp
+sections for all it's [sic] sectons [sic]'', don't worry about it. This
+happens whenever you use GAS with the MIPS linker, but there is not
+really anything wrong, and it is okay to use the output file. You can
+stop such warnings by installing the GNU linker.
+
+It would be nice to extend GAS to produce the gp tables, but they are
+optional, and there should not be a warning about their absence.
+
+@item
+In Ultrix 4.0 on the MIPS machine, @file{stdio.h} does not work with GNU
+CC at all unless it has been fixed with @code{fixincludes}. This causes
+problems in building GNU CC. Once GNU CC is installed, the problems go
+away.
+
+To work around this problem, when making the stage 1 compiler, specify
+this option to Make:
+
+@example
+GCC_FOR_TARGET="./xgcc -B./ -I./include"
+@end example
+
+When making stage 2 and stage 3, specify this option:
+
+@example
+CFLAGS="-g -I./include"
+@end example
+
+@item
+Users have reported some problems with version 2.0 of the MIPS
+compiler tools that were shipped with Ultrix 4.1. Version 2.10
+which came with Ultrix 4.2 seems to work fine.
+
+Users have also reported some problems with version 2.20 of the
+MIPS compiler tools that were shipped with RISC/os 4.x. The earlier
+version 2.11 seems to work fine.
+
+@item
+Some versions of the MIPS linker will issue an assertion failure
+when linking code that uses @code{alloca} against shared
+libraries on RISC-OS 5.0, and DEC's OSF/1 systems. This is a bug
+in the linker, that is supposed to be fixed in future revisions.
+To protect against this, GNU CC passes @samp{-non_shared} to the
+linker unless you pass an explicit @samp{-shared} or
+@samp{-call_shared} switch.
+
+@item
+On System V release 3, you may get this error message
+while linking:
+
+@smallexample
+ld fatal: failed to write symbol name @var{something}
+ in strings table for file @var{whatever}
+@end smallexample
+
+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 @code{MAXUMEM}
+is too small. If so, you must regenerate the kernel and make the value
+much larger. The default value is reported to be 1024; a value of 32768
+is said to work. Smaller values may also work.
+
+@item
+On System V, if you get an error like this,
+
+@example
+/usr/local/lib/bison.simple: In function `yyparse':
+/usr/local/lib/bison.simple:625: virtual memory exhausted
+@end example
+
+@noindent
+that too indicates a problem with disk space, ULIMIT, or @code{MAXUMEM}.
+
+@item
+Current GNU CC versions probably do not work on version 2 of the NeXT
+operating system.
+
+@item
+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.
+
+@item
+On the Tower models 4@var{n}0 and 6@var{n}0, by default a process is not
+allowed to have more than one megabyte of memory. GNU CC cannot compile
+itself (or many other programs) with @samp{-O} in that much memory.
+
+To solve this problem, reconfigure the kernel adding the following line
+to the configuration file:
+
+@smallexample
+MAXUMEM = 4096
+@end smallexample
+
+@item
+On HP 9000 series 300 or 400 running HP-UX release 8.0, there is a bug
+in the assembler that must be fixed before GNU CC can be built. This
+bug manifests itself during the first stage of compilation, while
+building @file{libgcc2.a}:
+
+@smallexample
+_floatdisf
+cc1: warning: `-g' option not supported on this version of GCC
+cc1: warning: `-g1' option not supported on this version of GCC
+./xgcc: Internal compiler error: program as got fatal signal 11
+@end smallexample
+
+A patched version of the assembler is available by anonymous ftp from
+@code{altdorf.ai.mit.edu} as the file
+@file{archive/cph/hpux-8.0-assembler}. If you have HP software support,
+the patch can also be obtained directly from HP, as described in the
+following note:
+
+@quotation
+This is the patched assembler, to patch SR#1653-010439, where the
+assembler aborts on floating point constants.
+
+The bug is not really in the assembler, but in the shared library
+version of the function ``cvtnum(3c)''. The bug on ``cvtnum(3c)'' is
+SR#4701-078451. Anyway, the attached assembler uses the archive
+library version of ``cvtnum(3c)'' and thus does not exhibit the bug.
+@end quotation
+
+This patch is also known as PHCO_4484.
+
+@item
+On HP-UX version 8.05, but not on 8.07 or more recent versions,
+the @code{fixproto} shell script triggers a bug in the system shell.
+If you encounter this problem, upgrade your operating system or
+use BASH (the GNU shell) to run @code{fixproto}.
+
+@item
+Some versions of the Pyramid C compiler are reported to be unable to
+compile GNU CC. You must use an older version of GNU CC for
+bootstrapping. One indication of this problem is if you get a crash
+when GNU CC compiles the function @code{muldi3} in file @file{libgcc2.c}.
+
+You may be able to succeed by getting GNU CC version 1, installing it,
+and using it to compile GNU CC version 2. The bug in the Pyramid C
+compiler does not seem to affect GNU CC version 1.
+
+@item
+There may be similar problems on System V Release 3.1 on 386 systems.
+
+@item
+On the Intel Paragon (an i860 machine), if you are using operating
+system version 1.0, you will get warnings or errors about redefinition
+of @code{va_arg} when you build GNU CC.
+
+If this happens, then you need to link most programs with the library
+@file{iclib.a}. You must also modify @file{stdio.h} as follows: before
+the lines
+
+@example
+#if defined(__i860__) && !defined(_VA_LIST)
+#include <va_list.h>
+@end example
+
+@noindent
+insert the line
+
+@example
+#if __PGC__
+@end example
+
+@noindent
+and after the lines
+
+@example
+extern int vprintf(const char *, va_list );
+extern int vsprintf(char *, const char *, va_list );
+#endif
+@end example
+
+@noindent
+insert the line
+
+@example
+#endif /* __PGC__ */
+@end example
+
+These problems don't exist in operating system version 1.1.
+
+@item
+On the Altos 3068, programs compiled with GNU CC won't work unless you
+fix a kernel bug. This happens using system versions V.2.2 1.0gT1 and
+V.2.2 1.0e and perhaps later versions as well. See the file
+@file{README.ALTOS}.
+
+@item
+You will get several sorts of compilation and linking errors on the
+we32k if you don't follow the special instructions. @xref{Configurations}.
+
+@item
+A bug in the HP-UX 8.05 (and earlier) shell will cause the fixproto
+program to report an error of the form:
+
+@example
+./fixproto: sh internal 1K buffer overflow
+@end example
+
+To fix this, change the first line of the fixproto script to look like:
+
+@example
+#!/bin/ksh
+@end example
+@end itemize
+
+@node Cross-Compiler Problems
+@section Cross-Compiler Problems
+
+You may run into problems with cross compilation on certain machines,
+for several reasons.
+
+@itemize @bullet
+@item
+Cross compilation can run into trouble for certain machines because
+some target machines' assemblers require floating point numbers to be
+written as @emph{integer} constants in certain contexts.
+
+The compiler writes these integer constants by examining the floating
+point value as an integer and printing that integer, because this is
+simple to write and independent of the details of the floating point
+representation. But this does not work if the compiler is running on
+a different machine with an incompatible floating point format, or
+even a different byte-ordering.
+
+In addition, correct constant folding of floating point values
+requires representing them in the target machine's format.
+(The C standard does not quite require this, but in practice
+it is the only way to win.)
+
+It is now possible to overcome these problems by defining macros such
+as @code{REAL_VALUE_TYPE}. But doing so is a substantial amount of
+work for each target machine.
+@ifset INTERNALS
+@xref{Cross-compilation}.
+@end ifset
+@ifclear INTERNALS
+@xref{Cross-compilation,,Cross Compilation and Floating Point Format,
+gcc.info, Using and Porting GCC}.
+@end ifclear
+
+@item
+At present, the program @file{mips-tfile} which adds debug
+support to object files on MIPS systems does not work in a cross
+compile environment.
+@end itemize
+
+@node Interoperation
+@section Interoperation
+
+This section lists various difficulties encountered in using GNU C or
+GNU C++ together with other compilers or with the assemblers, linkers,
+libraries and debuggers on certain systems.
+
+@itemize @bullet
+@item
+Objective C does not work on the RS/6000.
+
+@item
+GNU C++ does not do name mangling in the same way as other C++
+compilers. This means that object files compiled with one compiler
+cannot be used with another.
+
+This effect is intentional, to protect you from more subtle problems.
+Compilers differ as to many internal details of C++ implementation,
+including: how class instances are laid out, how multiple inheritance is
+implemented, and how virtual function calls are handled. If the name
+encoding were made the same, your programs would link against libraries
+provided from other compilers---but the programs would then crash when
+run. Incompatible libraries are then detected at link time, rather than
+at run time.
+
+@item
+Older GDB versions sometimes fail to read the output of GNU CC version
+2. If you have trouble, get GDB version 4.4 or later.
+
+@item
+@cindex DBX
+DBX rejects some files produced by GNU CC, though it accepts similar
+constructs in output from PCC. Until someone can supply a coherent
+description of what is valid DBX input and what is not, there is
+nothing I can do about these problems. You are on your own.
+
+@item
+The GNU assembler (GAS) does not support PIC. To generate PIC code, you
+must use some other assembler, such as @file{/bin/as}.
+
+@item
+On some BSD systems, including some versions of Ultrix, use of profiling
+causes static variable destructors (currently used only in C++) not to
+be run.
+
+@item
+Use of @samp{-I/usr/include} may cause trouble.
+
+Many systems come with header files that won't work with GNU CC unless
+corrected by @code{fixincludes}. The corrected header files go in a new
+directory; GNU CC searches this directory before @file{/usr/include}.
+If you use @samp{-I/usr/include}, this tells GNU CC to search
+@file{/usr/include} earlier on, before the corrected headers. The
+result is that you get the uncorrected header files.
+
+Instead, you should use these options (when compiling C programs):
+
+@smallexample
+-I/usr/local/lib/gcc-lib/@var{target}/@var{version}/include -I/usr/include
+@end smallexample
+
+For C++ programs, GNU CC also uses a special directory that defines C++
+interfaces to standard C subroutines. This directory is meant to be
+searched @emph{before} other standard include directories, so that it
+takes precedence. If you are compiling C++ programs and specifying
+include directories explicitly, use this option first, then the two
+options above:
+
+@example
+-I/usr/local/lib/g++-include
+@end example
+
+@ignore
+@cindex @code{vfork}, for the Sun-4
+@item
+There is a bug in @code{vfork} on the Sun-4 which causes the registers
+of the child process to clobber those of the parent. Because of this,
+programs that call @code{vfork} are likely to lose when compiled
+optimized with GNU CC when the child code alters registers which contain
+C variables in the parent. This affects variables which are live in the
+parent across the call to @code{vfork}.
+
+If you encounter this, you can work around the problem by declaring
+variables @code{volatile} in the function that calls @code{vfork}, until
+the problem goes away, or by not declaring them @code{register} and not
+using @samp{-O} for those source files.
+@end ignore
+
+@item
+On some SGI systems, when you use @samp{-lgl_s} as an option,
+it gets translated magically to @samp{-lgl_s -lX11_s -lc_s}.
+Naturally, this does not happen when you use GNU CC.
+You must specify all three options explicitly.
+
+@item
+On a Sparc, GNU CC aligns all values of type @code{double} on an 8-byte
+boundary, and it expects every @code{double} to be so aligned. The Sun
+compiler usually gives @code{double} values 8-byte alignment, with one
+exception: function arguments of type @code{double} may not be aligned.
+
+As a result, if a function compiled with Sun CC takes the address of an
+argument of type @code{double} and passes this pointer of type
+@code{double *} to a function compiled with GNU CC, dereferencing the
+pointer may cause a fatal signal.
+
+One way to solve this problem is to compile your entire program with GNU
+CC. Another solution is to modify the function that is compiled with
+Sun CC to copy the argument into a local variable; local variables
+are always properly aligned. A third solution is to modify the function
+that uses the pointer to dereference it via the following function
+@code{access_double} instead of directly with @samp{*}:
+
+@smallexample
+inline double
+access_double (double *unaligned_ptr)
+@{
+ union d2i @{ double d; int i[2]; @};
+
+ union d2i *p = (union d2i *) unaligned_ptr;
+ union d2i u;
+
+ u.i[0] = p->i[0];
+ u.i[1] = p->i[1];
+
+ return u.d;
+@}
+@end smallexample
+
+@noindent
+Storing into the pointer can be done likewise with the same union.
+
+@item
+On Solaris, the @code{malloc} function in the @file{libmalloc.a} library
+may allocate memory that is only 4 byte aligned. Since GNU CC on the
+Sparc assumes that doubles are 8 byte aligned, this may result in a
+fatal signal if doubles are stored in memory allocated by the
+@file{libmalloc.a} library.
+
+The solution is to not use the @file{libmalloc.a} library. Use instead
+@code{malloc} and related functions from @file{libc.a}; they do not have
+this problem.
+
+@item
+Sun forgot to include a static version of @file{libdl.a} with some
+versions of SunOS (mainly 4.1). This results in undefined symbols when
+linking static binaries (that is, if you use @samp{-static}). If you
+see undefined symbols @code{_dlclose}, @code{_dlsym} or @code{_dlopen}
+when linking, compile and link against the file
+@file{mit/util/misc/dlsym.c} from the MIT version of X windows.
+
+@item
+The 128-bit long double format that the Sparc port supports currently
+works by using the architecturally defined quad-word floating point
+instructions. Since there is no hardware that supports these
+instructions they must be emulated by the operating system. Long
+doubles do not work in Sun OS versions 4.0.3 and earlier, because the
+kernel emulator uses an obsolete and incompatible format. Long doubles
+do not work in Sun OS version 4.1.1 due to a problem in a Sun library.
+Long doubles do work on Sun OS versions 4.1.2 and higher, but GNU CC
+does not enable them by default. Long doubles appear to work in Sun OS
+5.x (Solaris 2.x).
+
+@item
+On HP-UX version 9.01 on the HP PA, the HP compiler @code{cc} does not
+compile GNU CC correctly. We do not yet know why. However, GNU CC
+compiled on earlier HP-UX versions works properly on HP-UX 9.01 and can
+compile itself properly on 9.01.
+
+@item
+On the HP PA machine, ADB sometimes fails to work on functions compiled
+with GNU CC. Specifically, it fails to work on functions that use
+@code{alloca} or variable-size arrays. This is because GNU CC doesn't
+generate HP-UX unwind descriptors for such functions. It may even be
+impossible to generate them.
+
+@item
+Debugging (@samp{-g}) is not supported on the HP PA machine, unless you use
+the preliminary GNU tools (@pxref{Installation}).
+
+@item
+Taking the address of a label may generate errors from the HP-UX
+PA assembler. GAS for the PA does not have this problem.
+
+@item
+Using floating point parameters for indirect calls to static functions
+will not work when using the HP assembler. There simply is no way for GCC
+to specify what registers hold arguments for static functions when using
+the HP assembler. GAS for the PA does not have this problem.
+
+@item
+In extremely rare cases involving some very large functions you may
+receive errors from the HP linker complaining about an out of bounds
+unconditional branch offset. This used to occur more often in previous
+versions of GNU CC, but is now exceptionally rare. If you should run
+into it, you can work around by making your function smaller.
+
+@item
+GNU CC compiled code sometimes emits warnings from the HP-UX assembler of
+the form:
+
+@smallexample
+(warning) Use of GR3 when
+ frame >= 8192 may cause conflict.
+@end smallexample
+
+These warnings are harmless and can be safely ignored.
+
+@item
+The current version of the assembler (@file{/bin/as}) for the RS/6000
+has certain problems that prevent the @samp{-g} option in GCC from
+working. Note that @file{Makefile.in} uses @samp{-g} by default when
+compiling @file{libgcc2.c}.
+
+IBM has produced a fixed version of the assembler. The upgraded
+assembler unfortunately was not included in any of the AIX 3.2 update
+PTF releases (3.2.2, 3.2.3, or 3.2.3e). Users of AIX 3.1 should request
+PTF U403044 from IBM and users of AIX 3.2 should request PTF U416277.
+See the file @file{README.RS6000} for more details on these updates.
+
+You can test for the presense of a fixed assembler by using the
+command
+
+@smallexample
+as -u < /dev/null
+@end smallexample
+
+@noindent
+If the command exits normally, the assembler fix already is installed.
+If the assembler complains that "-u" is an unknown flag, you need to
+order the fix.
+
+@item
+On the IBM RS/6000, compiling code of the form
+
+@smallexample
+extern int foo;
+
+@dots{} foo @dots{}
+
+static int foo;
+@end smallexample
+
+@noindent
+will cause the linker to report an undefined symbol @code{foo}.
+Although this behavior differs from most other systems, it is not a
+bug because redefining an @code{extern} variable as @code{static}
+is undefined in ANSI C.
+
+@item
+AIX on the RS/6000 provides support (NLS) for environments outside of
+the United States. Compilers and assemblers use NLS to support
+locale-specific representations of various objects including
+floating-point numbers ("." vs "," for separating decimal fractions).
+There have been problems reported where the library linked with GCC does
+not produce the same floating-point formats that the assembler accepts.
+If you have this problem, set the LANG environment variable to "C" or
+"En_US".
+
+@item
+Even if you specify @samp{-fdollars-in-identifiers},
+you cannot successfully use @samp{$} in identifiers on the RS/6000 due
+to a restriction in the IBM assembler. GAS supports these
+identifiers.
+
+@item
+On the RS/6000, XLC version 1.3.0.0 will miscompile @file{jump.c}. XLC
+version 1.3.0.1 or later fixes this problem. You can obtain XLC-1.3.0.2
+by requesting PTF 421749 from IBM.
+
+@item
+There is an assembler bug in versions of DG/UX prior to 5.4.2.01 that
+occurs when the @samp{fldcr} instruction is used. GNU CC uses
+@samp{fldcr} on the 88100 to serialize volatile memory references. Use
+the option @samp{-mno-serialize-volatile} if your version of the
+assembler has this bug.
+
+@item
+On VMS, GAS versions 1.38.1 and earlier may cause spurious warning
+messages from the linker. These warning messages complain of mismatched
+psect attributes. You can ignore them. @xref{VMS Install}.
+
+@item
+On NewsOS version 3, if you include both of the files @file{stddef.h}
+and @file{sys/types.h}, you get an error because there are two typedefs
+of @code{size_t}. You should change @file{sys/types.h} by adding these
+lines around the definition of @code{size_t}:
+
+@smallexample
+#ifndef _SIZE_T
+#define _SIZE_T
+@var{actual typedef here}
+#endif
+@end smallexample
+
+@cindex Alliant
+@item
+On the Alliant, the system's own convention for returning structures
+and unions is unusual, and is not compatible with GNU CC no matter
+what options are used.
+
+@cindex RT PC
+@cindex IBM RT PC
+@item
+On the IBM RT PC, the MetaWare HighC compiler (hc) uses a different
+convention for structure and union returning. Use the option
+@samp{-mhc-struct-return} to tell GNU CC to use a convention compatible
+with it.
+
+@cindex Vax calling convention
+@cindex Ultrix calling convention
+@item
+On Ultrix, the Fortran compiler expects registers 2 through 5 to be saved
+by function calls. However, the C compiler uses conventions compatible
+with BSD Unix: registers 2 through 5 may be clobbered by function calls.
+
+GNU CC uses the same convention as the Ultrix C compiler. You can use
+these options to produce code compatible with the Fortran compiler:
+
+@smallexample
+-fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5
+@end smallexample
+
+@item
+On the WE32k, you may find that programs compiled with GNU CC do not
+work with the standard shared C library. You may need to link with
+the ordinary C compiler. If you do so, you must specify the following
+options:
+
+@smallexample
+-L/usr/local/lib/gcc-lib/we32k-att-sysv/2.8.1 -lgcc -lc_s
+@end smallexample
+
+The first specifies where to find the library @file{libgcc.a}
+specified with the @samp{-lgcc} option.
+
+GNU CC does linking by invoking @code{ld}, just as @code{cc} does, and
+there is no reason why it @emph{should} matter which compilation program
+you use to invoke @code{ld}. If someone tracks this problem down,
+it can probably be fixed easily.
+
+@item
+On the Alpha, you may get assembler errors about invalid syntax as a
+result of floating point constants. This is due to a bug in the C
+library functions @code{ecvt}, @code{fcvt} and @code{gcvt}. Given valid
+floating point numbers, they sometimes print @samp{NaN}.
+
+@item
+On Irix 4.0.5F (and perhaps in some other versions), an assembler bug
+sometimes reorders instructions incorrectly when optimization is turned
+on. If you think this may be happening to you, try using the GNU
+assembler; GAS version 2.1 supports ECOFF on Irix.
+
+Or use the @samp{-noasmopt} option when you compile GNU CC with itself,
+and then again when you compile your program. (This is a temporary
+kludge to turn off assembler optimization on Irix.) If this proves to
+be what you need, edit the assembler spec in the file @file{specs} so
+that it unconditionally passes @samp{-O0} to the assembler, and never
+passes @samp{-O2} or @samp{-O3}.
+@end itemize
+
+@node External Bugs
+@section Problems Compiling Certain Programs
+
+@c prevent bad page break with this line
+Certain programs have problems compiling.
+
+@itemize @bullet
+@item
+Parse errors may occur compiling X11 on a Decstation running Ultrix 4.2
+because of problems in DEC's versions of the X11 header files
+@file{X11/Xlib.h} and @file{X11/Xutil.h}. People recommend adding
+@samp{-I/usr/include/mit} to use the MIT versions of the header files,
+using the @samp{-traditional} switch to turn off ANSI C, or fixing the
+header files by adding this:
+
+@example
+#ifdef __STDC__
+#define NeedFunctionPrototypes 0
+#endif
+@end example
+
+@item
+If you have trouble compiling Perl on a SunOS 4 system, it may be
+because Perl specifies @samp{-I/usr/ucbinclude}. This accesses the
+unfixed header files. Perl specifies the options
+
+@example
+-traditional -Dvolatile=__volatile__
+-I/usr/include/sun -I/usr/ucbinclude
+-fpcc-struct-return
+@end example
+
+@noindent
+most of which are unnecessary with GCC 2.4.5 and newer versions. You
+can make a properly working Perl by setting @code{ccflags} to
+@samp{-fwritable-strings} (implied by the @samp{-traditional} in the
+original options) and @code{cppflags} to empty in @file{config.sh}, then
+typing @samp{./doSH; make depend; make}.
+
+@item
+On various 386 Unix systems derived from System V, including SCO, ISC,
+and ESIX, you may get error messages about running out of virtual memory
+while compiling certain programs.
+
+You can prevent this problem by linking GNU CC with the GNU malloc
+(which thus replaces the malloc that comes with the system). GNU malloc
+is available as a separate package, and also in the file
+@file{src/gmalloc.c} in the GNU Emacs 19 distribution.
+
+If you have installed GNU malloc as a separate library package, use this
+option when you relink GNU CC:
+
+@example
+MALLOC=/usr/local/lib/libgmalloc.a
+@end example
+
+Alternatively, if you have compiled @file{gmalloc.c} from Emacs 19, copy
+the object file to @file{gmalloc.o} and use this option when you relink
+GNU CC:
+
+@example
+MALLOC=gmalloc.o
+@end example
+@end itemize
+
+@node Incompatibilities
+@section Incompatibilities of GNU CC
+@cindex incompatibilities of GNU CC
+
+There are several noteworthy incompatibilities between GNU C and most
+existing (non-ANSI) versions of C. The @samp{-traditional} option
+eliminates many of these incompatibilities, @emph{but not all}, by
+telling GNU C to behave like the other C compilers.
+
+@itemize @bullet
+@cindex string constants
+@cindex read-only strings
+@cindex shared strings
+@item
+GNU CC normally makes string constants read-only. If several
+identical-looking string constants are used, GNU CC stores only one
+copy of the string.
+
+@cindex @code{mktemp}, and constant strings
+One consequence is that you cannot call @code{mktemp} with a string
+constant argument. The function @code{mktemp} always alters the
+string its argument points to.
+
+@cindex @code{sscanf}, and constant strings
+@cindex @code{fscanf}, and constant strings
+@cindex @code{scanf}, and constant strings
+Another consequence is that @code{sscanf} does not work on some systems
+when passed a string constant as its format control string or input.
+This is because @code{sscanf} incorrectly tries to write into the string
+constant. Likewise @code{fscanf} and @code{scanf}.
+
+The best solution to these problems is to change the program to use
+@code{char}-array variables with initialization strings for these
+purposes instead of string constants. But if this is not possible,
+you can use the @samp{-fwritable-strings} flag, which directs GNU CC
+to handle string constants the same way most C compilers do.
+@samp{-traditional} also has this effect, among others.
+
+@item
+@code{-2147483648} is positive.
+
+This is because 2147483648 cannot fit in the type @code{int}, so
+(following the ANSI C rules) its data type is @code{unsigned long int}.
+Negating this value yields 2147483648 again.
+
+@item
+GNU CC does not substitute macro arguments when they appear inside of
+string constants. For example, the following macro in GNU CC
+
+@example
+#define foo(a) "a"
+@end example
+
+@noindent
+will produce output @code{"a"} regardless of what the argument @var{a} is.
+
+The @samp{-traditional} option directs GNU CC to handle such cases
+(among others) in the old-fashioned (non-ANSI) fashion.
+
+@cindex @code{setjmp} incompatibilities
+@cindex @code{longjmp} incompatibilities
+@item
+When you use @code{setjmp} and @code{longjmp}, the only automatic
+variables guaranteed to remain valid are those declared
+@code{volatile}. This is a consequence of automatic register
+allocation. Consider this function:
+
+@example
+jmp_buf j;
+
+foo ()
+@{
+ int a, b;
+
+ a = fun1 ();
+ if (setjmp (j))
+ return a;
+
+ a = fun2 ();
+ /* @r{@code{longjmp (j)} may occur in @code{fun3}.} */
+ return a + fun3 ();
+@}
+@end example
+
+Here @code{a} may or may not be restored to its first value when the
+@code{longjmp} occurs. If @code{a} is allocated in a register, then
+its first value is restored; otherwise, it keeps the last value stored
+in it.
+
+If you use the @samp{-W} option with the @samp{-O} option, you will
+get a warning when GNU CC thinks such a problem might be possible.
+
+The @samp{-traditional} option directs GNU C to put variables in
+the stack by default, rather than in registers, in functions that
+call @code{setjmp}. This results in the behavior found in
+traditional C compilers.
+
+@item
+Programs that use preprocessing directives in the middle of macro
+arguments do not work with GNU CC. For example, a program like this
+will not work:
+
+@example
+foobar (
+#define luser
+ hack)
+@end example
+
+ANSI C does not permit such a construct. It would make sense to support
+it when @samp{-traditional} is used, but it is too much work to
+implement.
+
+@cindex external declaration scope
+@cindex scope of external declarations
+@cindex declaration scope
+@item
+Declarations of external variables and functions within a block apply
+only to the block containing the declaration. In other words, they
+have the same scope as any other declaration in the same place.
+
+In some other C compilers, a @code{extern} declaration affects all the
+rest of the file even if it happens within a block.
+
+The @samp{-traditional} option directs GNU C to treat all @code{extern}
+declarations as global, like traditional compilers.
+
+@item
+In traditional C, you can combine @code{long}, etc., with a typedef name,
+as shown here:
+
+@example
+typedef int foo;
+typedef long foo bar;
+@end example
+
+In ANSI C, this is not allowed: @code{long} and other type modifiers
+require an explicit @code{int}. Because this criterion is expressed
+by Bison grammar rules rather than C code, the @samp{-traditional}
+flag cannot alter it.
+
+@cindex typedef names as function parameters
+@item
+PCC allows typedef names to be used as function parameters. The
+difficulty described immediately above applies here too.
+
+@cindex whitespace
+@item
+PCC allows whitespace in the middle of compound assignment operators
+such as @samp{+=}. GNU CC, following the ANSI standard, does not
+allow this. The difficulty described immediately above applies here
+too.
+
+@cindex apostrophes
+@cindex '
+@item
+GNU CC complains about unterminated character constants inside of
+preprocessing conditionals that fail. Some programs have English
+comments enclosed in conditionals that are guaranteed to fail; if these
+comments contain apostrophes, GNU CC will probably report an error. For
+example, this code would produce an error:
+
+@example
+#if 0
+You can't expect this to work.
+#endif
+@end example
+
+The best solution to such a problem is to put the text into an actual
+C comment delimited by @samp{/*@dots{}*/}. However,
+@samp{-traditional} suppresses these error messages.
+
+@item
+Many user programs contain the declaration @samp{long time ();}. In the
+past, the system header files on many systems did not actually declare
+@code{time}, so it did not matter what type your program declared it to
+return. But in systems with ANSI C headers, @code{time} is declared to
+return @code{time_t}, and if that is not the same as @code{long}, then
+@samp{long time ();} is erroneous.
+
+The solution is to change your program to use @code{time_t} as the return
+type of @code{time}.
+
+@cindex @code{float} as function value type
+@item
+When compiling functions that return @code{float}, PCC converts it to
+a double. GNU CC actually returns a @code{float}. If you are concerned
+with PCC compatibility, you should declare your functions to return
+@code{double}; you might as well say what you mean.
+
+@cindex structures
+@cindex unions
+@item
+When compiling functions that return structures or unions, GNU CC
+output code normally uses a method different from that used on most
+versions of Unix. As a result, code compiled with GNU CC cannot call
+a structure-returning function compiled with PCC, and vice versa.
+
+The method used by GNU CC is as follows: a structure or union which is
+1, 2, 4 or 8 bytes long is returned like a scalar. A structure or union
+with any other size is stored into an address supplied by the caller
+(usually in a special, fixed register, but on some machines it is passed
+on the stack). The machine-description macros @code{STRUCT_VALUE} and
+@code{STRUCT_INCOMING_VALUE} tell GNU CC where to pass this address.
+
+By contrast, PCC on most target machines returns structures and unions
+of any size by copying the data into an area of static storage, and then
+returning the address of that storage as if it were a pointer value.
+The caller must copy the data from that memory area to the place where
+the value is wanted. GNU CC does not use this method because it is
+slower and nonreentrant.
+
+On some newer machines, PCC uses a reentrant convention for all
+structure and union returning. GNU CC on most of these machines uses a
+compatible convention when returning structures and unions in memory,
+but still returns small structures and unions in registers.
+
+You can tell GNU CC to use a compatible convention for all structure and
+union returning with the option @samp{-fpcc-struct-return}.
+
+@cindex preprocessing tokens
+@cindex preprocessing numbers
+@item
+GNU C complains about program fragments such as @samp{0x74ae-0x4000}
+which appear to be two hexadecimal constants separated by the minus
+operator. Actually, this string is a single @dfn{preprocessing token}.
+Each such token must correspond to one token in C. Since this does not,
+GNU C prints an error message. Although it may appear obvious that what
+is meant is an operator and two values, the ANSI C standard specifically
+requires that this be treated as erroneous.
+
+A @dfn{preprocessing token} is a @dfn{preprocessing number} if it
+begins with a digit and is followed by letters, underscores, digits,
+periods and @samp{e+}, @samp{e-}, @samp{E+}, or @samp{E-} character
+sequences.
+
+To make the above program fragment valid, place whitespace in front of
+the minus sign. This whitespace will end the preprocessing number.
+@end itemize
+
+@node Fixed Headers
+@section Fixed Header Files
+
+GNU CC needs to install corrected versions of some system header files.
+This is because most target systems have some header files that won't
+work with GNU CC unless they are changed. Some have bugs, some are
+incompatible with ANSI C, and some depend on special features of other
+compilers.
+
+Installing GNU CC automatically creates and installs the fixed header
+files, by running a program called @code{fixincludes} (or for certain
+targets an alternative such as @code{fixinc.svr4}). Normally, you
+don't need to pay attention to this. But there are cases where it
+doesn't do the right thing automatically.
+
+@itemize @bullet
+@item
+If you update the system's header files, such as by installing a new
+system version, the fixed header files of GNU CC are not automatically
+updated. The easiest way to update them is to reinstall GNU CC. (If
+you want to be clever, look in the makefile and you can find a
+shortcut.)
+
+@item
+On some systems, in particular SunOS 4, header file directories contain
+machine-specific symbolic links in certain places. This makes it
+possible to share most of the header files among hosts running the
+same version of SunOS 4 on different machine models.
+
+The programs that fix the header files do not understand this special
+way of using symbolic links; therefore, the directory of fixed header
+files is good only for the machine model used to build it.
+
+In SunOS 4, only programs that look inside the kernel will notice the
+difference between machine models. Therefore, for most purposes, you
+need not be concerned about this.
+
+It is possible to make separate sets of fixed header files for the
+different machine models, and arrange a structure of symbolic links so
+as to use the proper set, but you'll have to do this by hand.
+
+@item
+On Lynxos, GNU CC by default does not fix the header files. This is
+because bugs in the shell cause the @code{fixincludes} script to fail.
+
+This means you will encounter problems due to bugs in the system header
+files. It may be no comfort that they aren't GNU CC's fault, but it
+does mean that there's nothing for us to do about them.
+@end itemize
+
+@node Standard Libraries
+@section Standard Libraries
+
+GNU CC by itself attempts to be what the ISO/ANSI C standard calls a
+@dfn{conforming freestanding implementation}. This means all ANSI
+C language features are available, as well as the contents of
+@file{float.h}, @file{limits.h}, @file{stdarg.h}, and
+@file{stddef.h}. The rest of the C library is supplied by the
+vendor of the operating system. If that C library doesn't conform to
+the C standards, then your programs might get warnings (especially when
+using @samp{-Wall}) that you don't expect.
+
+For example, the @code{sprintf} function on SunOS 4.1.3 returns
+@code{char *} while the C standard says that @code{sprintf} returns an
+@code{int}. The @code{fixincludes} program could make the prototype for
+this function match the Standard, but that would be wrong, since the
+function will still return @code{char *}.
+
+If you need a Standard compliant library, then you need to find one, as
+GNU CC does not provide one. The GNU C library (called @code{glibc})
+has been ported to a number of operating systems, and provides ANSI/ISO,
+POSIX, BSD and SystemV compatibility. You could also ask your operating
+system vendor if newer libraries are available.
+
+@node Disappointments
+@section Disappointments and Misunderstandings
+
+These problems are perhaps regrettable, but we don't know any practical
+way around them.
+
+@itemize @bullet
+@item
+Certain local variables aren't recognized by debuggers when you compile
+with optimization.
+
+This occurs because sometimes GNU CC optimizes the variable out of
+existence. There is no way to tell the debugger how to compute the
+value such a variable ``would have had'', and it is not clear that would
+be desirable anyway. So GNU CC simply does not mention the eliminated
+variable when it writes debugging information.
+
+You have to expect a certain amount of disagreement between the
+executable and your source code, when you use optimization.
+
+@cindex conflicting types
+@cindex scope of declaration
+@item
+Users often think it is a bug when GNU CC reports an error for code
+like this:
+
+@example
+int foo (struct mumble *);
+
+struct mumble @{ @dots{} @};
+
+int foo (struct mumble *x)
+@{ @dots{} @}
+@end example
+
+This code really is erroneous, because the scope of @code{struct
+mumble} in the prototype is limited to the argument list containing it.
+It does not refer to the @code{struct mumble} defined with file scope
+immediately below---they are two unrelated types with similar names in
+different scopes.
+
+But in the definition of @code{foo}, the file-scope type is used
+because that is available to be inherited. Thus, the definition and
+the prototype do not match, and you get an error.
+
+This behavior may seem silly, but it's what the ANSI standard specifies.
+It is easy enough for you to make your code work by moving the
+definition of @code{struct mumble} above the prototype. It's not worth
+being incompatible with ANSI C just to avoid an error for the example
+shown above.
+
+@item
+Accesses to bitfields even in volatile objects works by accessing larger
+objects, such as a byte or a word. You cannot rely on what size of
+object is accessed in order to read or write the bitfield; it may even
+vary for a given bitfield according to the precise usage.
+
+If you care about controlling the amount of memory that is accessed, use
+volatile but do not use bitfields.
+
+@item
+GNU CC comes with shell scripts to fix certain known problems in system
+header files. They install corrected copies of various header files in
+a special directory where only GNU CC will normally look for them. The
+scripts adapt to various systems by searching all the system header
+files for the problem cases that we know about.
+
+If new system header files are installed, nothing automatically arranges
+to update the corrected header files. You will have to reinstall GNU CC
+to fix the new header files. More specifically, go to the build
+directory and delete the files @file{stmp-fixinc} and
+@file{stmp-headers}, and the subdirectory @code{include}; then do
+@samp{make install} again.
+
+@item
+@cindex floating point precision
+On 68000 and x86 systems, for instance, you can get paradoxical results
+if you test the precise values of floating point numbers. For example,
+you can find that a floating point value which is not a NaN is not equal
+to itself. This results from the fact that the floating point registers
+hold a few more bits of precision than fit in a @code{double} in memory.
+Compiled code moves values between memory and floating point registers
+at its convenience, and moving them into memory truncates them.
+
+You can partially avoid this problem by using the @samp{-ffloat-store}
+option (@pxref{Optimize Options}).
+
+@item
+On the MIPS, variable argument functions using @file{varargs.h}
+cannot have a floating point value for the first argument. The
+reason for this is that in the absence of a prototype in scope,
+if the first argument is a floating point, it is passed in a
+floating point register, rather than an integer register.
+
+If the code is rewritten to use the ANSI standard @file{stdarg.h}
+method of variable arguments, and the prototype is in scope at
+the time of the call, everything will work fine.
+
+@item
+On the H8/300 and H8/300H, variable argument functions must be
+implemented using the ANSI standard @file{stdarg.h} method of
+variable arguments. Furthermore, calls to functions using @file{stdarg.h}
+variable arguments must have a prototype for the called function
+in scope at the time of the call.
+@end itemize
+
+@node C++ Misunderstandings
+@section Common Misunderstandings with GNU C++
+
+@cindex misunderstandings in C++
+@cindex surprises in C++
+@cindex C++ misunderstandings
+C++ is a complex language and an evolving one, and its standard definition
+(the ANSI C++ draft standard) is also evolving. As a result,
+your C++ compiler may occasionally surprise you, even when its behavior is
+correct. This section discusses some areas that frequently give rise to
+questions of this sort.
+
+@menu
+* Static Definitions:: Static member declarations are not definitions
+* Temporaries:: Temporaries may vanish before you expect
+@end menu
+
+@node Static Definitions
+@subsection Declare @emph{and} Define Static Members
+
+@cindex C++ static data, declaring and defining
+@cindex static data in C++, declaring and defining
+@cindex declaring static data in C++
+@cindex defining static data in C++
+When a class has static data members, it is not enough to @emph{declare}
+the static member; you must also @emph{define} it. For example:
+
+@example
+class Foo
+@{
+ @dots{}
+ void method();
+ static int bar;
+@};
+@end example
+
+This declaration only establishes that the class @code{Foo} has an
+@code{int} named @code{Foo::bar}, and a member function named
+@code{Foo::method}. But you still need to define @emph{both}
+@code{method} and @code{bar} elsewhere. According to the draft ANSI
+standard, you must supply an initializer in one (and only one) source
+file, such as:
+
+@example
+int Foo::bar = 0;
+@end example
+
+Other C++ compilers may not correctly implement the standard behavior.
+As a result, when you switch to @code{g++} from one of these compilers,
+you may discover that a program that appeared to work correctly in fact
+does not conform to the standard: @code{g++} reports as undefined
+symbols any static data members that lack definitions.
+
+@node Temporaries
+@subsection Temporaries May Vanish Before You Expect
+
+@cindex temporaries, lifetime of
+@cindex portions of temporary objects, pointers to
+It is dangerous to use pointers or references to @emph{portions} of a
+temporary object. The compiler may very well delete the object before
+you expect it to, leaving a pointer to garbage. The most common place
+where this problem crops up is in classes like the libg++
+@code{String} class, that define a conversion function to type
+@code{char *} or @code{const char *}. However, any class that returns
+a pointer to some internal structure is potentially subject to this
+problem.
+
+For example, a program may use a function @code{strfunc} that returns
+@code{String} objects, and another function @code{charfunc} that
+operates on pointers to @code{char}:
+
+@example
+String strfunc ();
+void charfunc (const char *);
+@end example
+
+@noindent
+In this situation, it may seem natural to write @w{@samp{charfunc
+(strfunc ());}} based on the knowledge that class @code{String} has an
+explicit conversion to @code{char} pointers. However, what really
+happens is akin to @samp{charfunc (@w{strfunc ()}.@w{convert ()});},
+where the @code{convert} method is a function to do the same data
+conversion normally performed by a cast. Since the last use of the
+temporary @code{String} object is the call to the conversion function,
+the compiler may delete that object before actually calling
+@code{charfunc}. The compiler has no way of knowing that deleting the
+@code{String} object will invalidate the pointer. The pointer then
+points to garbage, so that by the time @code{charfunc} is called, it
+gets an invalid argument.
+
+Code like this may run successfully under some other compilers,
+especially those that delete temporaries relatively late. However, the
+GNU C++ behavior is also standard-conforming, so if your program depends
+on late destruction of temporaries it is not portable.
+
+If you think this is surprising, you should be aware that the ANSI C++
+committee continues to debate the lifetime-of-temporaries problem.
+
+For now, at least, the safe way to write such code is to give the
+temporary a name, which forces it to remain until the end of the scope of
+the name. For example:
+
+@example
+String& tmp = strfunc ();
+charfunc (tmp);
+@end example
+
+@node Protoize Caveats
+@section Caveats of using @code{protoize}
+
+The conversion programs @code{protoize} and @code{unprotoize} can
+sometimes change a source file in a way that won't work unless you
+rearrange it.
+
+@itemize @bullet
+@item
+@code{protoize} can insert references to a type name or type tag before
+the definition, or in a file where they are not defined.
+
+If this happens, compiler error messages should show you where the new
+references are, so fixing the file by hand is straightforward.
+
+@item
+There are some C constructs which @code{protoize} cannot figure out.
+For example, it can't determine argument types for declaring a
+pointer-to-function variable; this you must do by hand. @code{protoize}
+inserts a comment containing @samp{???} each time it finds such a
+variable; so you can find all such variables by searching for this
+string. ANSI C does not require declaring the argument types of
+pointer-to-function types.
+
+@item
+Using @code{unprotoize} can easily introduce bugs. If the program
+relied on prototypes to bring about conversion of arguments, these
+conversions will not take place in the program without prototypes.
+One case in which you can be sure @code{unprotoize} is safe is when
+you are removing prototypes that were made with @code{protoize}; if
+the program worked before without any prototypes, it will work again
+without them.
+
+You can find all the places where this problem might occur by compiling
+the program with the @samp{-Wconversion} option. It prints a warning
+whenever an argument is converted.
+
+@item
+Both conversion programs can be confused if there are macro calls in and
+around the text to be converted. In other words, the standard syntax
+for a declaration or definition must not result from expanding a macro.
+This problem is inherent in the design of C and cannot be fixed. If
+only a few functions have confusing macro calls, you can easily convert
+them manually.
+
+@item
+@code{protoize} cannot get the argument types for a function whose
+definition was not actually compiled due to preprocessing conditionals.
+When this happens, @code{protoize} changes nothing in regard to such
+a function. @code{protoize} tries to detect such instances and warn
+about them.
+
+You can generally work around this problem by using @code{protoize} step
+by step, each time specifying a different set of @samp{-D} options for
+compilation, until all of the functions have been converted. There is
+no automatic way to verify that you have got them all, however.
+
+@item
+Confusion may result if there is an occasion to convert a function
+declaration or definition in a region of source code where there is more
+than one formal parameter list present. Thus, attempts to convert code
+containing multiple (conditionally compiled) versions of a single
+function header (in the same vicinity) may not produce the desired (or
+expected) results.
+
+If you plan on converting source files which contain such code, it is
+recommended that you first make sure that each conditionally compiled
+region of source code which contains an alternative function header also
+contains at least one additional follower token (past the final right
+parenthesis of the function header). This should circumvent the
+problem.
+
+@item
+@code{unprotoize} can become confused when trying to convert a function
+definition or declaration which contains a declaration for a
+pointer-to-function formal argument which has the same name as the
+function being defined or declared. We recommand you avoid such choices
+of formal parameter names.
+
+@item
+You might also want to correct some of the indentation by hand and break
+long lines. (The conversion programs don't write lines longer than
+eighty characters in any case.)
+@end itemize
+
+@node Non-bugs
+@section Certain Changes We Don't Want to Make
+
+This section lists changes that people frequently request, but which
+we do not make because we think GNU CC is better without them.
+
+@itemize @bullet
+@item
+Checking the number and type of arguments to a function which has an
+old-fashioned definition and no prototype.
+
+Such a feature would work only occasionally---only for calls that appear
+in the same file as the called function, following the definition. The
+only way to check all calls reliably is to add a prototype for the
+function. But adding a prototype eliminates the motivation for this
+feature. So the feature is not worthwhile.
+
+@item
+Warning about using an expression whose type is signed as a shift count.
+
+Shift count operands are probably signed more often than unsigned.
+Warning about this would cause far more annoyance than good.
+
+@item
+Warning about assigning a signed value to an unsigned variable.
+
+Such assignments must be very common; warning about them would cause
+more annoyance than good.
+
+@item
+Warning about unreachable code.
+
+It's very common to have unreachable code in machine-generated
+programs. For example, this happens normally in some files of GNU C
+itself.
+
+@item
+Warning when a non-void function value is ignored.
+
+Coming as I do from a Lisp background, I balk at the idea that there is
+something dangerous about discarding a value. There are functions that
+return values which some callers may find useful; it makes no sense to
+clutter the program with a cast to @code{void} whenever the value isn't
+useful.
+
+@item
+Assuming (for optimization) that the address of an external symbol is
+never zero.
+
+This assumption is false on certain systems when @samp{#pragma weak} is
+used.
+
+@item
+Making @samp{-fshort-enums} the default.
+
+This would cause storage layout to be incompatible with most other C
+compilers. And it doesn't seem very important, given that you can get
+the same result in other ways. The case where it matters most is when
+the enumeration-valued object is inside a structure, and in that case
+you can specify a field width explicitly.
+
+@item
+Making bitfields unsigned by default on particular machines where ``the
+ABI standard'' says to do so.
+
+The ANSI C standard leaves it up to the implementation whether a bitfield
+declared plain @code{int} is signed or not. This in effect creates two
+alternative dialects of C.
+
+The GNU C compiler supports both dialects; you can specify the signed
+dialect with @samp{-fsigned-bitfields} and the unsigned dialect with
+@samp{-funsigned-bitfields}. However, this leaves open the question of
+which dialect to use by default.
+
+Currently, the preferred dialect makes plain bitfields signed, because
+this is simplest. Since @code{int} is the same as @code{signed int} in
+every other context, it is cleanest for them to be the same in bitfields
+as well.
+
+Some computer manufacturers have published Application Binary Interface
+standards which specify that plain bitfields should be unsigned. It is
+a mistake, however, to say anything about this issue in an ABI. This is
+because the handling of plain bitfields distinguishes two dialects of C.
+Both dialects are meaningful on every type of machine. Whether a
+particular object file was compiled using signed bitfields or unsigned
+is of no concern to other object files, even if they access the same
+bitfields in the same data structures.
+
+A given program is written in one or the other of these two dialects.
+The program stands a chance to work on most any machine if it is
+compiled with the proper dialect. It is unlikely to work at all if
+compiled with the wrong dialect.
+
+Many users appreciate the GNU C compiler because it provides an
+environment that is uniform across machines. These users would be
+inconvenienced if the compiler treated plain bitfields differently on
+certain machines.
+
+Occasionally users write programs intended only for a particular machine
+type. On these occasions, the users would benefit if the GNU C compiler
+were to support by default the same dialect as the other compilers on
+that machine. But such applications are rare. And users writing a
+program to run on more than one type of machine cannot possibly benefit
+from this kind of compatibility.
+
+This is why GNU CC does and will treat plain bitfields in the same
+fashion on all types of machines (by default).
+
+There are some arguments for making bitfields unsigned by default on all
+machines. If, for example, this becomes a universal de facto standard,
+it would make sense for GNU CC to go along with it. This is something
+to be considered in the future.
+
+(Of course, users strongly concerned about portability should indicate
+explicitly in each bitfield whether it is signed or not. In this way,
+they write programs which have the same meaning in both C dialects.)
+
+@item
+Undefining @code{__STDC__} when @samp{-ansi} is not used.
+
+Currently, GNU CC defines @code{__STDC__} as long as you don't use
+@samp{-traditional}. This provides good results in practice.
+
+Programmers normally use conditionals on @code{__STDC__} to ask whether
+it is safe to use certain features of ANSI C, such as function
+prototypes or ANSI token concatenation. Since plain @samp{gcc} supports
+all the features of ANSI C, the correct answer to these questions is
+``yes''.
+
+Some users try to use @code{__STDC__} to check for the availability of
+certain library facilities. This is actually incorrect usage in an ANSI
+C program, because the ANSI C standard says that a conforming
+freestanding implementation should define @code{__STDC__} even though it
+does not have the library facilities. @samp{gcc -ansi -pedantic} is a
+conforming freestanding implementation, and it is therefore required to
+define @code{__STDC__}, even though it does not come with an ANSI C
+library.
+
+Sometimes people say that defining @code{__STDC__} in a compiler that
+does not completely conform to the ANSI C standard somehow violates the
+standard. This is illogical. The standard is a standard for compilers
+that claim to support ANSI C, such as @samp{gcc -ansi}---not for other
+compilers such as plain @samp{gcc}. Whatever the ANSI C standard says
+is relevant to the design of plain @samp{gcc} without @samp{-ansi} only
+for pragmatic reasons, not as a requirement.
+
+GNU CC normally defines @code{__STDC__} to be 1, and in addition
+defines @code{__STRICT_ANSI__} if you specify the @samp{-ansi} option.
+On some hosts, system include files use a different convention, where
+@code{__STDC__} is normally 0, but is 1 if the user specifies strict
+conformance to the C Standard. GNU CC follows the host convention when
+processing system include files, but when processing user files it follows
+the usual GNU C convention.
+
+@item
+Undefining @code{__STDC__} in C++.
+
+Programs written to compile with C++-to-C translators get the
+value of @code{__STDC__} that goes with the C compiler that is
+subsequently used. These programs must test @code{__STDC__}
+to determine what kind of C preprocessor that compiler uses:
+whether they should concatenate tokens in the ANSI C fashion
+or in the traditional fashion.
+
+These programs work properly with GNU C++ if @code{__STDC__} is defined.
+They would not work otherwise.
+
+In addition, many header files are written to provide prototypes in ANSI
+C but not in traditional C. Many of these header files can work without
+change in C++ provided @code{__STDC__} is defined. If @code{__STDC__}
+is not defined, they will all fail, and will all need to be changed to
+test explicitly for C++ as well.
+
+@item
+Deleting ``empty'' loops.
+
+GNU CC does not delete ``empty'' loops because the most likely reason
+you would put one in a program is to have a delay. Deleting them will
+not make real programs run any faster, so it would be pointless.
+
+It would be different if optimization of a nonempty loop could produce
+an empty one. But this generally can't happen.
+
+@item
+Making side effects happen in the same order as in some other compiler.
+
+@cindex side effects, order of evaluation
+@cindex order of evaluation, side effects
+It is never safe to depend on the order of evaluation of side effects.
+For example, a function call like this may very well behave differently
+from one compiler to another:
+
+@example
+void func (int, int);
+
+int i = 2;
+func (i++, i++);
+@end example
+
+There is no guarantee (in either the C or the C++ standard language
+definitions) that the increments will be evaluated in any particular
+order. Either increment might happen first. @code{func} might get the
+arguments @samp{2, 3}, or it might get @samp{3, 2}, or even @samp{2, 2}.
+
+@item
+Not allowing structures with volatile fields in registers.
+
+Strictly speaking, there is no prohibition in the ANSI C standard
+against allowing structures with volatile fields in registers, but
+it does not seem to make any sense and is probably not what you wanted
+to do. So the compiler will give an error message in this case.
+@end itemize
+
+@node Warnings and Errors
+@section Warning Messages and Error Messages
+
+@cindex error messages
+@cindex warnings vs errors
+@cindex messages, warning and error
+The GNU compiler can produce two kinds of diagnostics: errors and
+warnings. Each kind has a different purpose:
+
+@itemize @w{}
+@item
+@emph{Errors} report problems that make it impossible to compile your
+program. GNU CC reports errors with the source file name and line
+number where the problem is apparent.
+
+@item
+@emph{Warnings} report other unusual conditions in your code that
+@emph{may} indicate a problem, although compilation can (and does)
+proceed. Warning messages also report the source file name and line
+number, but include the text @samp{warning:} to distinguish them
+from error messages.
+@end itemize
+
+Warnings may indicate danger points where you should check to make sure
+that your program really does what you intend; or the use of obsolete
+features; or the use of nonstandard features of GNU C or C++. Many
+warnings are issued only if you ask for them, with one of the @samp{-W}
+options (for instance, @samp{-Wall} requests a variety of useful
+warnings).
+
+GNU CC always tries to compile your program if possible; it never
+gratuitously rejects a program whose meaning is clear merely because
+(for instance) it fails to conform to a standard. In some cases,
+however, the C and C++ standards specify that certain extensions are
+forbidden, and a diagnostic @emph{must} be issued by a conforming
+compiler. The @samp{-pedantic} option tells GNU CC to issue warnings in
+such cases; @samp{-pedantic-errors} says to make them errors instead.
+This does not mean that @emph{all} non-ANSI constructs get warnings
+or errors.
+
+@xref{Warning Options,,Options to Request or Suppress Warnings}, for
+more detail on these and related command-line options.
+
+@node Bugs
+@chapter Reporting Bugs
+@cindex bugs
+@cindex reporting bugs
+
+Your bug reports play an essential role in making GNU CC reliable.
+
+When you encounter a problem, the first thing to do is to see if it is
+already known. @xref{Trouble}. If it isn't known, then you should
+report the problem.
+
+Reporting a bug may help you by bringing a solution to your problem, or
+it may not. (If it does not, look in the service directory; see
+@ref{Service}.) In any case, the principal function of a bug report is
+to help the entire community by making the next version of GNU CC work
+better. Bug reports are your contribution to the maintenance of GNU CC.
+
+Since the maintainers are very overloaded, we cannot respond to every
+bug report. However, if the bug has not been fixed, we are likely to
+send you a patch and ask you to tell us whether it works.
+
+In order for a bug report to serve its purpose, you must include the
+information that makes for fixing the bug.
+
+@menu
+* Criteria: Bug Criteria. Have you really found a bug?
+* Where: Bug Lists. Where to send your bug report.
+* Reporting: Bug Reporting. How to report a bug effectively.
+* Patches: Sending Patches. How to send a patch for GNU CC.
+* Known: Trouble. Known problems.
+* Help: Service. Where to ask for help.
+@end menu
+
+@node Bug Criteria
+@section Have You Found a Bug?
+@cindex bug criteria
+
+If you are not sure whether you have found a bug, here are some guidelines:
+
+@itemize @bullet
+@cindex fatal signal
+@cindex core dump
+@item
+If the compiler gets a fatal signal, for any input whatever, that is a
+compiler bug. Reliable compilers never crash.
+
+@cindex invalid assembly code
+@cindex assembly code, invalid
+@item
+If the compiler produces invalid assembly code, for any input whatever
+(except an @code{asm} statement), that is a compiler bug, unless the
+compiler reports errors (not just warnings) which would ordinarily
+prevent the assembler from being run.
+
+@cindex undefined behavior
+@cindex undefined function value
+@cindex increment operators
+@item
+If the compiler produces valid assembly code that does not correctly
+execute the input source code, that is a compiler bug.
+
+However, you must double-check to make sure, because you may have run
+into an incompatibility between GNU C and traditional C
+(@pxref{Incompatibilities}). These incompatibilities might be considered
+bugs, but they are inescapable consequences of valuable features.
+
+Or you may have a program whose behavior is undefined, which happened
+by chance to give the desired results with another C or C++ compiler.
+
+For example, in many nonoptimizing compilers, you can write @samp{x;}
+at the end of a function instead of @samp{return x;}, with the same
+results. But the value of the function is undefined if @code{return}
+is omitted; it is not a bug when GNU CC produces different results.
+
+Problems often result from expressions with two increment operators,
+as in @code{f (*p++, *p++)}. Your previous compiler might have
+interpreted that expression the way you intended; GNU CC might
+interpret it another way. Neither compiler is wrong. The bug is
+in your code.
+
+After you have localized the error to a single source line, it should
+be easy to check for these things. If your program is correct and
+well defined, you have found a compiler bug.
+
+@item
+If the compiler produces an error message for valid input, that is a
+compiler bug.
+
+@cindex invalid input
+@item
+If the compiler does not produce an error message for invalid input,
+that is a compiler bug. However, you should note that your idea of
+``invalid input'' might be my idea of ``an extension'' or ``support
+for traditional practice''.
+
+@item
+If you are an experienced user of C or C++ compilers, your suggestions
+for improvement of GNU CC or GNU C++ are welcome in any case.
+@end itemize
+
+@node Bug Lists
+@section Where to Report Bugs
+@cindex bug report mailing lists
+@kindex bug-gcc@@prep.ai.mit.edu
+Send bug reports for GNU C to @samp{bug-gcc@@prep.ai.mit.edu}.
+
+@kindex bug-g++@@prep.ai.mit.edu
+@kindex bug-libg++@@prep.ai.mit.edu
+Send bug reports for GNU C++ to @samp{bug-g++@@prep.ai.mit.edu}. If
+your bug involves the C++ class library libg++, send mail instead to the
+address @samp{bug-lib-g++@@prep.ai.mit.edu}. If you're not sure, you
+can send the bug report to both lists.
+
+@strong{Do not send bug reports to @samp{help-gcc@@prep.ai.mit.edu} or
+to the newsgroup @samp{gnu.gcc.help}.} Most users of GNU CC do not want
+to receive bug reports. Those that do, have asked to be on
+@samp{bug-gcc} and/or @samp{bug-g++}.
+
+The mailing lists @samp{bug-gcc} and @samp{bug-g++} both have newsgroups
+which serve as repeaters: @samp{gnu.gcc.bug} and @samp{gnu.g++.bug}.
+Each mailing list and its newsgroup carry exactly the same messages.
+
+Often people think of posting bug reports to the newsgroup instead of
+mailing them. This appears to work, but it has one problem which can be
+crucial: a newsgroup posting does not contain a mail path back to the
+sender. Thus, if maintainers need more information, they may be unable
+to reach you. For this reason, you should always send bug reports by
+mail to the proper mailing list.
+
+As a last resort, send bug reports on paper to:
+
+@example
+GNU Compiler Bugs
+Free Software Foundation
+59 Temple Place - Suite 330
+Boston, MA 02111-1307, USA
+@end example
+
+@node Bug Reporting
+@section How to Report Bugs
+@cindex compiler bugs, reporting
+
+The fundamental principle of reporting bugs usefully is this:
+@strong{report all the facts}. If you are not sure whether to state a
+fact or leave it out, state it!
+
+Often people omit facts because they think they know what causes the
+problem and they conclude that some details don't matter. Thus, you might
+assume that the name of the variable you use in an example does not matter.
+Well, probably it doesn't, but one cannot be sure. Perhaps the bug is a
+stray memory reference which happens to fetch from the location where that
+name is stored in memory; perhaps, if the name were different, the contents
+of that location would fool the compiler into doing the right thing despite
+the bug. Play it safe and give a specific, complete example. That is the
+easiest thing for you to do, and the most helpful.
+
+Keep in mind that the purpose of a bug report is to enable someone to
+fix the bug if it is not known. It isn't very important what happens if
+the bug is already known. Therefore, always write your bug reports on
+the assumption that the bug is not known.
+
+Sometimes people give a few sketchy facts and ask, ``Does this ring a
+bell?'' This cannot help us fix a bug, so it is basically useless. We
+respond by asking for enough details to enable us to investigate.
+You might as well expedite matters by sending them to begin with.
+
+Try to make your bug report self-contained. If we have to ask you for
+more information, it is best if you include all the previous information
+in your response, as well as the information that was missing.
+
+Please report each bug in a separate message. This makes it easier for
+us to track which bugs have been fixed and to forward your bugs reports
+to the appropriate maintainer.
+
+Do not compress and encode any part of your bug report using programs
+such as @file{uuencode}. If you do so it will slow down the processing
+of your bug. If you must submit multiple large files, use @file{shar},
+which allows us to read your message without having to run any
+decompression programs.
+
+To enable someone to investigate the bug, you should include all these
+things:
+
+@itemize @bullet
+@item
+The version of GNU CC. You can get this by running it with the
+@samp{-v} option.
+
+Without this, we won't know whether there is any point in looking for
+the bug in the current version of GNU CC.
+
+@item
+A complete input file that will reproduce the bug. If the bug is in the
+C preprocessor, send a source file and any header files that it
+requires. If the bug is in the compiler proper (@file{cc1}), run your
+source file through the C preprocessor by doing @samp{gcc -E
+@var{sourcefile} > @var{outfile}}, then include the contents of
+@var{outfile} in the bug report. (When you do this, use the same
+@samp{-I}, @samp{-D} or @samp{-U} options that you used in actual
+compilation.)
+
+A single statement is not enough of an example. In order to compile it,
+it must be embedded in a complete file of compiler input; and the bug
+might depend on the details of how this is done.
+
+Without a real example one can compile, all anyone can do about your bug
+report is wish you luck. It would be futile to try to guess how to
+provoke the bug. For example, bugs in register allocation and reloading
+frequently depend on every little detail of the function they happen in.
+
+Even if the input file that fails comes from a GNU program, you should
+still send the complete test case. Don't ask the GNU CC maintainers to
+do the extra work of obtaining the program in question---they are all
+overworked as it is. Also, the problem may depend on what is in the
+header files on your system; it is unreliable for the GNU CC maintainers
+to try the problem with the header files available to them. By sending
+CPP output, you can eliminate this source of uncertainty and save us
+a certain percentage of wild goose chases.
+
+@item
+The command arguments you gave GNU CC or GNU C++ to compile that example
+and observe the bug. For example, did you use @samp{-O}? To guarantee
+you won't omit something important, list all the options.
+
+If we were to try to guess the arguments, we would probably guess wrong
+and then we would not encounter the bug.
+
+@item
+The type of machine you are using, and the operating system name and
+version number.
+
+@item
+The operands you gave to the @code{configure} command when you installed
+the compiler.
+
+@item
+A complete list of any modifications you have made to the compiler
+source. (We don't promise to investigate the bug unless it happens in
+an unmodified compiler. But if you've made modifications and don't tell
+us, then you are sending us on a wild goose chase.)
+
+Be precise about these changes. A description in English is not
+enough---send a context diff for them.
+
+Adding files of your own (such as a machine description for a machine we
+don't support) is a modification of the compiler source.
+
+@item
+Details of any other deviations from the standard procedure for installing
+GNU CC.
+
+@item
+A description of what behavior you observe that you believe is
+incorrect. For example, ``The compiler gets a fatal signal,'' or,
+``The assembler instruction at line 208 in the output is incorrect.''
+
+Of course, if the bug is that the compiler gets a fatal signal, then one
+can't miss it. But if the bug is incorrect output, the maintainer might
+not notice unless it is glaringly wrong. None of us has time to study
+all the assembler code from a 50-line C program just on the chance that
+one instruction might be wrong. We need @emph{you} to do this part!
+
+Even if the problem you experience is a fatal signal, you should still
+say so explicitly. Suppose something strange is going on, such as, your
+copy of the compiler is out of synch, or you have encountered a bug in
+the C library on your system. (This has happened!) Your copy might
+crash and the copy here would not. If you @i{said} to expect a crash,
+then when the compiler here fails to crash, we would know that the bug
+was not happening. If you don't say to expect a crash, then we would
+not know whether the bug was happening. We would not be able to draw
+any conclusion from our observations.
+
+If the problem is a diagnostic when compiling GNU CC with some other
+compiler, say whether it is a warning or an error.
+
+Often the observed symptom is incorrect output when your program is run.
+Sad to say, this is not enough information unless the program is short
+and simple. None of us has time to study a large program to figure out
+how it would work if compiled correctly, much less which line of it was
+compiled wrong. So you will have to do that. Tell us which source line
+it is, and what incorrect result happens when that line is executed. A
+person who understands the program can find this as easily as finding a
+bug in the program itself.
+
+@item
+If you send examples of assembler code output from GNU CC or GNU C++,
+please use @samp{-g} when you make them. The debugging information
+includes source line numbers which are essential for correlating the
+output with the input.
+
+@item
+If you wish to mention something in the GNU CC source, refer to it by
+context, not by line number.
+
+The line numbers in the development sources don't match those in your
+sources. Your line numbers would convey no useful information to the
+maintainers.
+
+@item
+Additional information from a debugger might enable someone to find a
+problem on a machine which he does not have available. However, you
+need to think when you collect this information if you want it to have
+any chance of being useful.
+
+@cindex backtrace for bug reports
+For example, many people send just a backtrace, but that is never
+useful by itself. A simple backtrace with arguments conveys little
+about GNU CC because the compiler is largely data-driven; the same
+functions are called over and over for different RTL insns, doing
+different things depending on the details of the insn.
+
+Most of the arguments listed in the backtrace are useless because they
+are pointers to RTL list structure. The numeric values of the
+pointers, which the debugger prints in the backtrace, have no
+significance whatever; all that matters is the contents of the objects
+they point to (and most of the contents are other such pointers).
+
+In addition, most compiler passes consist of one or more loops that
+scan the RTL insn sequence. The most vital piece of information about
+such a loop---which insn it has reached---is usually in a local variable,
+not in an argument.
+
+@findex debug_rtx
+What you need to provide in addition to a backtrace are the values of
+the local variables for several stack frames up. When a local
+variable or an argument is an RTX, first print its value and then use
+the GDB command @code{pr} to print the RTL expression that it points
+to. (If GDB doesn't run on your machine, use your debugger to call
+the function @code{debug_rtx} with the RTX as an argument.) In
+general, whenever a variable is a pointer, its value is no use
+without the data it points to.
+@end itemize
+
+Here are some things that are not necessary:
+
+@itemize @bullet
+@item
+A description of the envelope of the bug.
+
+Often people who encounter a bug spend a lot of time investigating
+which changes to the input file will make the bug go away and which
+changes will not affect it.
+
+This is often time consuming and not very useful, because the way we
+will find the bug is by running a single example under the debugger with
+breakpoints, not by pure deduction from a series of examples. You might
+as well save your time for something else.
+
+Of course, if you can find a simpler example to report @emph{instead} of
+the original one, that is a convenience. Errors in the output will be
+easier to spot, running under the debugger will take less time, etc.
+Most GNU CC bugs involve just one function, so the most straightforward
+way to simplify an example is to delete all the function definitions
+except the one where the bug occurs. Those earlier in the file may be
+replaced by external declarations if the crucial function depends on
+them. (Exception: inline functions may affect compilation of functions
+defined later in the file.)
+
+However, simplification is not vital; if you don't want to do this,
+report the bug anyway and send the entire test case you used.
+
+@item
+In particular, some people insert conditionals @samp{#ifdef BUG} around
+a statement which, if removed, makes the bug not happen. These are just
+clutter; we won't pay any attention to them anyway. Besides, you should
+send us cpp output, and that can't have conditionals.
+
+@item
+A patch for the bug.
+
+A patch for the bug is useful if it is a good one. But don't omit the
+necessary information, such as the test case, on the assumption that a
+patch is all we need. We might see problems with your patch and decide
+to fix the problem another way, or we might not understand it at all.
+
+Sometimes with a program as complicated as GNU CC it is very hard to
+construct an example that will make the program follow a certain path
+through the code. If you don't send the example, we won't be able to
+construct one, so we won't be able to verify that the bug is fixed.
+
+And if we can't understand what bug you are trying to fix, or why your
+patch should be an improvement, we won't install it. A test case will
+help us to understand.
+
+@xref{Sending Patches}, for guidelines on how to make it easy for us to
+understand and install your patches.
+
+@item
+A guess about what the bug is or what it depends on.
+
+Such guesses are usually wrong. Even I can't guess right about such
+things without first using the debugger to find the facts.
+
+@item
+A core dump file.
+
+We have no way of examining a core dump for your type of machine
+unless we have an identical system---and if we do have one,
+we should be able to reproduce the crash ourselves.
+@end itemize
+
+@node Sending Patches,, Bug Reporting, Bugs
+@section Sending Patches for GNU CC
+
+If you would like to write bug fixes or improvements for the GNU C
+compiler, that is very helpful. Send suggested fixes to the bug report
+mailing list, @code{bug-gcc@@prep.ai.mit.edu}.
+
+Please follow these guidelines so we can study your patches efficiently.
+If you don't follow these guidelines, your information might still be
+useful, but using it will take extra work. Maintaining GNU C is a lot
+of work in the best of circumstances, and we can't keep up unless you do
+your best to help.
+
+@itemize @bullet
+@item
+Send an explanation with your changes of what problem they fix or what
+improvement they bring about. For a bug fix, just include a copy of the
+bug report, and explain why the change fixes the bug.
+
+(Referring to a bug report is not as good as including it, because then
+we will have to look it up, and we have probably already deleted it if
+we've already fixed the bug.)
+
+@item
+Always include a proper bug report for the problem you think you have
+fixed. We need to convince ourselves that the change is right before
+installing it. Even if it is right, we might have trouble judging it if
+we don't have a way to reproduce the problem.
+
+@item
+Include all the comments that are appropriate to help people reading the
+source in the future understand why this change was needed.
+
+@item
+Don't mix together changes made for different reasons.
+Send them @emph{individually}.
+
+If you make two changes for separate reasons, then we might not want to
+install them both. We might want to install just one. If you send them
+all jumbled together in a single set of diffs, we have to do extra work
+to disentangle them---to figure out which parts of the change serve
+which purpose. If we don't have time for this, we might have to ignore
+your changes entirely.
+
+If you send each change as soon as you have written it, with its own
+explanation, then the two changes never get tangled up, and we can
+consider each one properly without any extra work to disentangle them.
+
+Ideally, each change you send should be impossible to subdivide into
+parts that we might want to consider separately, because each of its
+parts gets its motivation from the other parts.
+
+@item
+Send each change as soon as that change is finished. Sometimes people
+think they are helping us by accumulating many changes to send them all
+together. As explained above, this is absolutely the worst thing you
+could do.
+
+Since you should send each change separately, you might as well send it
+right away. That gives us the option of installing it immediately if it
+is important.
+
+@item
+Use @samp{diff -c} to make your diffs. Diffs without context are hard
+for us to install reliably. More than that, they make it hard for us to
+study the diffs to decide whether we want to install them. Unidiff
+format is better than contextless diffs, but not as easy to read as
+@samp{-c} format.
+
+If you have GNU diff, use @samp{diff -cp}, which shows the name of the
+function that each change occurs in.
+
+@item
+Write the change log entries for your changes. We get lots of changes,
+and we don't have time to do all the change log writing ourselves.
+
+Read the @file{ChangeLog} file to see what sorts of information to put
+in, and to learn the style that we use. The purpose of the change log
+is to show people where to find what was changed. So you need to be
+specific about what functions you changed; in large functions, it's
+often helpful to indicate where within the function the change was.
+
+On the other hand, once you have shown people where to find the change,
+you need not explain its purpose. Thus, if you add a new function, all
+you need to say about it is that it is new. If you feel that the
+purpose needs explaining, it probably does---but the explanation will be
+much more useful if you put it in comments in the code.
+
+If you would like your name to appear in the header line for who made
+the change, send us the header line.
+
+@item
+When you write the fix, keep in mind that we can't install a change that
+would break other systems.
+
+People often suggest fixing a problem by changing machine-independent
+files such as @file{toplev.c} to do something special that a particular
+system needs. Sometimes it is totally obvious that such changes would
+break GNU CC for almost all users. We can't possibly make a change like
+that. At best it might tell us how to write another patch that would
+solve the problem acceptably.
+
+Sometimes people send fixes that @emph{might} be an improvement in
+general---but it is hard to be sure of this. It's hard to install
+such changes because we have to study them very carefully. Of course,
+a good explanation of the reasoning by which you concluded the change
+was correct can help convince us.
+
+The safest changes are changes to the configuration files for a
+particular machine. These are safe because they can't create new bugs
+on other machines.
+
+Please help us keep up with the workload by designing the patch in a
+form that is good to install.
+@end itemize
+
+@node Service
+@chapter How To Get Help with GNU CC
+
+If you need help installing, using or changing GNU CC, there are two
+ways to find it:
+
+@itemize @bullet
+@item
+Send a message to a suitable network mailing list. First try
+@code{bug-gcc@@prep.ai.mit.edu}, and if that brings no response, try
+@code{help-gcc@@prep.ai.mit.edu}.
+
+@item
+Look in the service directory for someone who might help you for a fee.
+The service directory is found in the file named @file{SERVICE} in the
+GNU CC distribution.
+@end itemize
+
+@node Contributing
+@chapter Contributing to GNU CC Development
+
+If you would like to help pretest GNU CC releases to assure they work
+well, or if you would like to work on improving GNU CC, please contact
+the maintainers at @code{bug-gcc@@gnu.ai.mit.edu}. A pretester should
+be willing to try to investigate bugs as well as report them.
+
+If you'd like to work on improvements, please ask for suggested projects
+or suggest your own ideas. If you have already written an improvement,
+please tell us about it. If you have not yet started work, it is useful
+to contact @code{bug-gcc@@prep.ai.mit.edu} before you start; the
+maintainers may be able to suggest ways to make your extension fit in
+better with the rest of GNU CC and with other development plans.
+
+@node VMS
+@chapter Using GNU CC on VMS
+
+@c prevent bad page break with this line
+Here is how to use GNU CC on VMS.
+
+@menu
+* Include Files and VMS:: Where the preprocessor looks for the include files.
+* Global Declarations:: How to do globaldef, globalref and globalvalue with
+ GNU CC.
+* VMS Misc:: Misc information.
+@end menu
+
+@node Include Files and VMS
+@section Include Files and VMS
+
+@cindex include files and VMS
+@cindex VMS and include files
+@cindex header files and VMS
+Due to the differences between the filesystems of Unix and VMS, GNU CC
+attempts to translate file names in @samp{#include} into names that VMS
+will understand. The basic strategy is to prepend a prefix to the
+specification of the include file, convert the whole filename to a VMS
+filename, and then try to open the file. GNU CC tries various prefixes
+one by one until one of them succeeds:
+
+@enumerate
+@item
+The first prefix is the @samp{GNU_CC_INCLUDE:} logical name: this is
+where GNU C header files are traditionally stored. If you wish to store
+header files in non-standard locations, then you can assign the logical
+@samp{GNU_CC_INCLUDE} to be a search list, where each element of the
+list is suitable for use with a rooted logical.
+
+@item
+The next prefix tried is @samp{SYS$SYSROOT:[SYSLIB.]}. This is where
+VAX-C header files are traditionally stored.
+
+@item
+If the include file specification by itself is a valid VMS filename, the
+preprocessor then uses this name with no prefix in an attempt to open
+the include file.
+
+@item
+If the file specification is not a valid VMS filename (i.e. does not
+contain a device or a directory specifier, and contains a @samp{/}
+character), the preprocessor tries to convert it from Unix syntax to
+VMS syntax.
+
+Conversion works like this: the first directory name becomes a device,
+and the rest of the directories are converted into VMS-format directory
+names. For example, the name @file{X11/foobar.h} is
+translated to @file{X11:[000000]foobar.h} or @file{X11:foobar.h},
+whichever one can be opened. This strategy allows you to assign a
+logical name to point to the actual location of the header files.
+
+@item
+If none of these strategies succeeds, the @samp{#include} fails.
+@end enumerate
+
+Include directives of the form:
+
+@example
+#include foobar
+@end example
+
+@noindent
+are a common source of incompatibility between VAX-C and GNU CC. VAX-C
+treats this much like a standard @code{#include <foobar.h>} directive.
+That is incompatible with the ANSI C behavior implemented by GNU CC: to
+expand the name @code{foobar} as a macro. Macro expansion should
+eventually yield one of the two standard formats for @code{#include}:
+
+@example
+#include "@var{file}"
+#include <@var{file}>
+@end example
+
+If you have this problem, the best solution is to modify the source to
+convert the @code{#include} directives to one of the two standard forms.
+That will work with either compiler. If you want a quick and dirty fix,
+define the file names as macros with the proper expansion, like this:
+
+@example
+#define stdio <stdio.h>
+@end example
+
+@noindent
+This will work, as long as the name doesn't conflict with anything else
+in the program.
+
+Another source of incompatibility is that VAX-C assumes that:
+
+@example
+#include "foobar"
+@end example
+
+@noindent
+is actually asking for the file @file{foobar.h}. GNU CC does not
+make this assumption, and instead takes what you ask for literally;
+it tries to read the file @file{foobar}. The best way to avoid this
+problem is to always specify the desired file extension in your include
+directives.
+
+GNU CC for VMS is distributed with a set of include files that is
+sufficient to compile most general purpose programs. Even though the
+GNU CC distribution does not contain header files to define constants
+and structures for some VMS system-specific functions, there is no
+reason why you cannot use GNU CC with any of these functions. You first
+may have to generate or create header files, either by using the public
+domain utility @code{UNSDL} (which can be found on a DECUS tape), or by
+extracting the relevant modules from one of the system macro libraries,
+and using an editor to construct a C header file.
+
+A @code{#include} file name cannot contain a DECNET node name. The
+preprocessor reports an I/O error if you attempt to use a node name,
+whether explicitly, or implicitly via a logical name.
+
+@node Global Declarations
+@section Global Declarations and VMS
+
+@findex GLOBALREF
+@findex GLOBALDEF
+@findex GLOBALVALUEDEF
+@findex GLOBALVALUEREF
+GNU CC does not provide the @code{globalref}, @code{globaldef} and
+@code{globalvalue} keywords of VAX-C. You can get the same effect with
+an obscure feature of GAS, the GNU assembler. (This requires GAS
+version 1.39 or later.) The following macros allow you to use this
+feature in a fairly natural way:
+
+@smallexample
+#ifdef __GNUC__
+#define GLOBALREF(TYPE,NAME) \
+ TYPE NAME \
+ asm ("_$$PsectAttributes_GLOBALSYMBOL$$" #NAME)
+#define GLOBALDEF(TYPE,NAME,VALUE) \
+ TYPE NAME \
+ asm ("_$$PsectAttributes_GLOBALSYMBOL$$" #NAME) \
+ = VALUE
+#define GLOBALVALUEREF(TYPE,NAME) \
+ const TYPE NAME[1] \
+ asm ("_$$PsectAttributes_GLOBALVALUE$$" #NAME)
+#define GLOBALVALUEDEF(TYPE,NAME,VALUE) \
+ const TYPE NAME[1] \
+ asm ("_$$PsectAttributes_GLOBALVALUE$$" #NAME) \
+ = @{VALUE@}
+#else
+#define GLOBALREF(TYPE,NAME) \
+ globalref TYPE NAME
+#define GLOBALDEF(TYPE,NAME,VALUE) \
+ globaldef TYPE NAME = VALUE
+#define GLOBALVALUEDEF(TYPE,NAME,VALUE) \
+ globalvalue TYPE NAME = VALUE
+#define GLOBALVALUEREF(TYPE,NAME) \
+ globalvalue TYPE NAME
+#endif
+@end smallexample
+
+@noindent
+(The @code{_$$PsectAttributes_GLOBALSYMBOL} prefix at the start of the
+name is removed by the assembler, after it has modified the attributes
+of the symbol). These macros are provided in the VMS binaries
+distribution in a header file @file{GNU_HACKS.H}. An example of the
+usage is:
+
+@example
+GLOBALREF (int, ijk);
+GLOBALDEF (int, jkl, 0);
+@end example
+
+The macros @code{GLOBALREF} and @code{GLOBALDEF} cannot be used
+straightforwardly for arrays, since there is no way to insert the array
+dimension into the declaration at the right place. However, you can
+declare an array with these macros if you first define a typedef for the
+array type, like this:
+
+@example
+typedef int intvector[10];
+GLOBALREF (intvector, foo);
+@end example
+
+Array and structure initializers will also break the macros; you can
+define the initializer to be a macro of its own, or you can expand the
+@code{GLOBALDEF} macro by hand. You may find a case where you wish to
+use the @code{GLOBALDEF} macro with a large array, but you are not
+interested in explicitly initializing each element of the array. In
+such cases you can use an initializer like: @code{@{0,@}}, which will
+initialize the entire array to @code{0}.
+
+A shortcoming of this implementation is that a variable declared with
+@code{GLOBALVALUEREF} or @code{GLOBALVALUEDEF} is always an array. For
+example, the declaration:
+
+@example
+GLOBALVALUEREF(int, ijk);
+@end example
+
+@noindent
+declares the variable @code{ijk} as an array of type @code{int [1]}.
+This is done because a globalvalue is actually a constant; its ``value''
+is what the linker would normally consider an address. That is not how
+an integer value works in C, but it is how an array works. So treating
+the symbol as an array name gives consistent results---with the
+exception that the value seems to have the wrong type. @strong{Don't
+try to access an element of the array.} It doesn't have any elements.
+The array ``address'' may not be the address of actual storage.
+
+The fact that the symbol is an array may lead to warnings where the
+variable is used. Insert type casts to avoid the warnings. Here is an
+example; it takes advantage of the ANSI C feature allowing macros that
+expand to use the same name as the macro itself.
+
+@example
+GLOBALVALUEREF (int, ss$_normal);
+GLOBALVALUEDEF (int, xyzzy,123);
+#ifdef __GNUC__
+#define ss$_normal ((int) ss$_normal)
+#define xyzzy ((int) xyzzy)
+#endif
+@end example
+
+Don't use @code{globaldef} or @code{globalref} with a variable whose
+type is an enumeration type; this is not implemented. Instead, make the
+variable an integer, and use a @code{globalvaluedef} for each of the
+enumeration values. An example of this would be:
+
+@example
+#ifdef __GNUC__
+GLOBALDEF (int, color, 0);
+GLOBALVALUEDEF (int, RED, 0);
+GLOBALVALUEDEF (int, BLUE, 1);
+GLOBALVALUEDEF (int, GREEN, 3);
+#else
+enum globaldef color @{RED, BLUE, GREEN = 3@};
+#endif
+@end example
+
+@node VMS Misc
+@section Other VMS Issues
+
+@cindex exit status and VMS
+@cindex return value of @code{main}
+@cindex @code{main} and the exit status
+GNU CC automatically arranges for @code{main} to return 1 by default if
+you fail to specify an explicit return value. This will be interpreted
+by VMS as a status code indicating a normal successful completion.
+Version 1 of GNU CC did not provide this default.
+
+GNU CC on VMS works only with the GNU assembler, GAS. You need version
+1.37 or later of GAS in order to produce value debugging information for
+the VMS debugger. Use the ordinary VMS linker with the object files
+produced by GAS.
+
+@cindex shared VMS run time system
+@cindex @file{VAXCRTL}
+Under previous versions of GNU CC, the generated code would occasionally
+give strange results when linked to the sharable @file{VAXCRTL} library.
+Now this should work.
+
+A caveat for use of @code{const} global variables: the @code{const}
+modifier must be specified in every external declaration of the variable
+in all of the source files that use that variable. Otherwise the linker
+will issue warnings about conflicting attributes for the variable. Your
+program will still work despite the warnings, but the variable will be
+placed in writable storage.
+
+@cindex name augmentation
+@cindex case sensitivity and VMS
+@cindex VMS and case sensitivity
+Although the VMS linker does distinguish between upper and lower case
+letters in global symbols, most VMS compilers convert all such symbols
+into upper case and most run-time library routines also have upper case
+names. To be able to reliably call such routines, GNU CC (by means of
+the assembler GAS) converts global symbols into upper case like other
+VMS compilers. However, since the usual practice in C is to distinguish
+case, GNU CC (via GAS) tries to preserve usual C behavior by augmenting
+each name that is not all lower case. This means truncating the name
+to at most 23 characters and then adding more characters at the end
+which encode the case pattern of those 23. Names which contain at
+least one dollar sign are an exception; they are converted directly into
+upper case without augmentation.
+
+Name augmentation yields bad results for programs that use precompiled
+libraries (such as Xlib) which were generated by another compiler. You
+can use the compiler option @samp{/NOCASE_HACK} to inhibit augmentation;
+it makes external C functions and variables case-independent as is usual
+on VMS. Alternatively, you could write all references to the functions
+and variables in such libraries using lower case; this will work on VMS,
+but is not portable to other systems. The compiler option @samp{/NAMES}
+also provides control over global name handling.
+
+Function and variable names are handled somewhat differently with GNU
+C++. The GNU C++ compiler performs @dfn{name mangling} on function
+names, which means that it adds information to the function name to
+describe the data types of the arguments that the function takes. One
+result of this is that the name of a function can become very long.
+Since the VMS linker only recognizes the first 31 characters in a name,
+special action is taken to ensure that each function and variable has a
+unique name that can be represented in 31 characters.
+
+If the name (plus a name augmentation, if required) is less than 32
+characters in length, then no special action is performed. If the name
+is longer than 31 characters, the assembler (GAS) will generate a
+hash string based upon the function name, truncate the function name to
+23 characters, and append the hash string to the truncated name. If the
+@samp{/VERBOSE} compiler option is used, the assembler will print both
+the full and truncated names of each symbol that is truncated.
+
+The @samp{/NOCASE_HACK} compiler option should not be used when you are
+compiling programs that use libg++. libg++ has several instances of
+objects (i.e. @code{Filebuf} and @code{filebuf}) which become
+indistinguishable in a case-insensitive environment. This leads to
+cases where you need to inhibit augmentation selectively (if you were
+using libg++ and Xlib in the same program, for example). There is no
+special feature for doing this, but you can get the result by defining a
+macro for each mixed case symbol for which you wish to inhibit
+augmentation. The macro should expand into the lower case equivalent of
+itself. For example:
+
+@example
+#define StuDlyCapS studlycaps
+@end example
+
+These macro definitions can be placed in a header file to minimize the
+number of changes to your source code.
+@end ifset
+
+@ifset INTERNALS
+@node Portability
+@chapter GNU CC and Portability
+@cindex portability
+@cindex GNU CC and portability
+
+The main goal of GNU CC was to make a good, fast compiler for machines in
+the class that the GNU system aims to run on: 32-bit machines that address
+8-bit bytes and have several general registers. Elegance, theoretical
+power and simplicity are only secondary.
+
+GNU CC gets most of the information about the target machine from a machine
+description which gives an algebraic formula for each of the machine's
+instructions. This is a very clean way to describe the target. But when
+the compiler needs information that is difficult to express in this
+fashion, I have not hesitated to define an ad-hoc parameter to the machine
+description. The purpose of portability is to reduce the total work needed
+on the compiler; it was not of interest for its own sake.
+
+@cindex endianness
+@cindex autoincrement addressing, availability
+@findex abort
+GNU CC does not contain machine dependent code, but it does contain code
+that depends on machine parameters such as endianness (whether the most
+significant byte has the highest or lowest address of the bytes in a word)
+and the availability of autoincrement addressing. In the RTL-generation
+pass, it is often necessary to have multiple strategies for generating code
+for a particular kind of syntax tree, strategies that are usable for different
+combinations of parameters. Often I have not tried to address all possible
+cases, but only the common ones or only the ones that I have encountered.
+As a result, a new target may require additional strategies. You will know
+if this happens because the compiler will call @code{abort}. Fortunately,
+the new strategies can be added in a machine-independent fashion, and will
+affect only the target machines that need them.
+@end ifset
+
+@ifset INTERNALS
+@node Interface
+@chapter Interfacing to GNU CC Output
+@cindex interfacing to GNU CC output
+@cindex run-time conventions
+@cindex function call conventions
+@cindex conventions, run-time
+
+GNU CC is normally configured to use the same function calling convention
+normally in use on the target system. This is done with the
+machine-description macros described (@pxref{Target Macros}).
+
+@cindex unions, returning
+@cindex structures, returning
+@cindex returning structures and unions
+However, returning of structure and union values is done differently on
+some target machines. As a result, functions compiled with PCC
+returning such types cannot be called from code compiled with GNU CC,
+and vice versa. This does not cause trouble often because few Unix
+library routines return structures or unions.
+
+GNU CC code returns structures and unions that are 1, 2, 4 or 8 bytes
+long in the same registers used for @code{int} or @code{double} return
+values. (GNU CC typically allocates variables of such types in
+registers also.) Structures and unions of other sizes are returned by
+storing them into an address passed by the caller (usually in a
+register). The machine-description macros @code{STRUCT_VALUE} and
+@code{STRUCT_INCOMING_VALUE} tell GNU CC where to pass this address.
+
+By contrast, PCC on most target machines returns structures and unions
+of any size by copying the data into an area of static storage, and then
+returning the address of that storage as if it were a pointer value.
+The caller must copy the data from that memory area to the place where
+the value is wanted. This is slower than the method used by GNU CC, and
+fails to be reentrant.
+
+On some target machines, such as RISC machines and the 80386, the
+standard system convention is to pass to the subroutine the address of
+where to return the value. On these machines, GNU CC has been
+configured to be compatible with the standard compiler, when this method
+is used. It may not be compatible for structures of 1, 2, 4 or 8 bytes.
+
+@cindex argument passing
+@cindex passing arguments
+GNU CC uses the system's standard convention for passing arguments. On
+some machines, the first few arguments are passed in registers; in
+others, all are passed on the stack. It would be possible to use
+registers for argument passing on any machine, and this would probably
+result in a significant speedup. But the result would be complete
+incompatibility with code that follows the standard convention. So this
+change is practical only if you are switching to GNU CC as the sole C
+compiler for the system. We may implement register argument passing on
+certain machines once we have a complete GNU system so that we can
+compile the libraries with GNU CC.
+
+On some machines (particularly the Sparc), certain types of arguments
+are passed ``by invisible reference''. This means that the value is
+stored in memory, and the address of the memory location is passed to
+the subroutine.
+
+@cindex @code{longjmp} and automatic variables
+If you use @code{longjmp}, beware of automatic variables. ANSI C says that
+automatic variables that are not declared @code{volatile} have undefined
+values after a @code{longjmp}. And this is all GNU CC promises to do,
+because it is very difficult to restore register variables correctly, and
+one of GNU CC's features is that it can put variables in registers without
+your asking it to.
+
+If you want a variable to be unaltered by @code{longjmp}, and you don't
+want to write @code{volatile} because old C compilers don't accept it,
+just take the address of the variable. If a variable's address is ever
+taken, even if just to compute it and ignore it, then the variable cannot
+go in a register:
+
+@example
+@{
+ int careful;
+ &careful;
+ @dots{}
+@}
+@end example
+
+@cindex arithmetic libraries
+@cindex math libraries
+Code compiled with GNU CC may call certain library routines. Most of
+them handle arithmetic for which there are no instructions. This
+includes multiply and divide on some machines, and floating point
+operations on any machine for which floating point support is disabled
+with @samp{-msoft-float}. Some standard parts of the C library, such as
+@code{bcopy} or @code{memcpy}, are also called automatically. The usual
+function call interface is used for calling the library routines.
+
+These library routines should be defined in the library @file{libgcc.a},
+which GNU CC automatically searches whenever it links a program. On
+machines that have multiply and divide instructions, if hardware
+floating point is in use, normally @file{libgcc.a} is not needed, but it
+is searched just in case.
+
+Each arithmetic function is defined in @file{libgcc1.c} to use the
+corresponding C arithmetic operator. As long as the file is compiled
+with another C compiler, which supports all the C arithmetic operators,
+this file will work portably. However, @file{libgcc1.c} does not work if
+compiled with GNU CC, because each arithmetic function would compile
+into a call to itself!
+@end ifset
+
+@ifset INTERNALS
+@node Passes
+@chapter Passes and Files of the Compiler
+@cindex passes and files of the compiler
+@cindex files and passes of the compiler
+@cindex compiler passes and files
+
+@cindex top level of compiler
+The overall control structure of the compiler is in @file{toplev.c}. This
+file is responsible for initialization, decoding arguments, opening and
+closing files, and sequencing the passes.
+
+@cindex parsing pass
+The parsing pass is invoked only once, to parse the entire input. The RTL
+intermediate code for a function is generated as the function is parsed, a
+statement at a time. Each statement is read in as a syntax tree and then
+converted to RTL; then the storage for the tree for the statement is
+reclaimed. Storage for types (and the expressions for their sizes),
+declarations, and a representation of the binding contours and how they nest,
+remain until the function is finished being compiled; these are all needed
+to output the debugging information.
+
+@findex rest_of_compilation
+@findex rest_of_decl_compilation
+Each time the parsing pass reads a complete function definition or
+top-level declaration, it calls either the function
+@code{rest_of_compilation}, or the function
+@code{rest_of_decl_compilation} in @file{toplev.c}, which are
+responsible for all further processing necessary, ending with output of
+the assembler language. All other compiler passes run, in sequence,
+within @code{rest_of_compilation}. When that function returns from
+compiling a function definition, the storage used for that function
+definition's compilation is entirely freed, unless it is an inline
+function
+@ifset USING
+(@pxref{Inline,,An Inline Function is As Fast As a Macro}).
+@end ifset
+@ifclear USING
+(@pxref{Inline,,An Inline Function is As Fast As a Macro,gcc.texi,Using GCC}).
+@end ifclear
+
+Here is a list of all the passes of the compiler and their source files.
+Also included is a description of where debugging dumps can be requested
+with @samp{-d} options.
+
+@itemize @bullet
+@item
+Parsing. This pass reads the entire text of a function definition,
+constructing partial syntax trees. This and RTL generation are no longer
+truly separate passes (formerly they were), but it is easier to think
+of them as separate.
+
+The tree representation does not entirely follow C syntax, because it is
+intended to support other languages as well.
+
+Language-specific data type analysis is also done in this pass, and every
+tree node that represents an expression has a data type attached.
+Variables are represented as declaration nodes.
+
+@cindex constant folding
+@cindex arithmetic simplifications
+@cindex simplifications, arithmetic
+Constant folding and some arithmetic simplifications are also done
+during this pass.
+
+The language-independent source files for parsing are
+@file{stor-layout.c}, @file{fold-const.c}, and @file{tree.c}.
+There are also header files @file{tree.h} and @file{tree.def}
+which define the format of the tree representation.@refill
+
+@c Avoiding overfull is tricky here.
+The source files to parse C are
+@file{c-parse.in},
+@file{c-decl.c},
+@file{c-typeck.c},
+@file{c-aux-info.c},
+@file{c-convert.c},
+and @file{c-lang.c}
+along with header files
+@file{c-lex.h}, and
+@file{c-tree.h}.
+
+The source files for parsing C++ are @file{cp-parse.y},
+@file{cp-class.c},@*
+@file{cp-cvt.c}, @file{cp-decl.c}, @file{cp-decl2.c},
+@file{cp-dem.c}, @file{cp-except.c},@*
+@file{cp-expr.c}, @file{cp-init.c}, @file{cp-lex.c},
+@file{cp-method.c}, @file{cp-ptree.c},@*
+@file{cp-search.c}, @file{cp-tree.c}, @file{cp-type2.c}, and
+@file{cp-typeck.c}, along with header files @file{cp-tree.def},
+@file{cp-tree.h}, and @file{cp-decl.h}.
+
+The special source files for parsing Objective C are
+@file{objc-parse.y}, @file{objc-actions.c}, @file{objc-tree.def}, and
+@file{objc-actions.h}. Certain C-specific files are used for this as
+well.
+
+The file @file{c-common.c} is also used for all of the above languages.
+
+@cindex RTL generation
+@item
+RTL generation. This is the conversion of syntax tree into RTL code.
+It is actually done statement-by-statement during parsing, but for
+most purposes it can be thought of as a separate pass.
+
+@cindex target-parameter-dependent code
+This is where the bulk of target-parameter-dependent code is found,
+since often it is necessary for strategies to apply only when certain
+standard kinds of instructions are available. The purpose of named
+instruction patterns is to provide this information to the RTL
+generation pass.
+
+@cindex tail recursion optimization
+Optimization is done in this pass for @code{if}-conditions that are
+comparisons, boolean operations or conditional expressions. Tail
+recursion is detected at this time also. Decisions are made about how
+best to arrange loops and how to output @code{switch} statements.
+
+@c Avoiding overfull is tricky here.
+The source files for RTL generation include
+@file{stmt.c},
+@file{calls.c},
+@file{expr.c},
+@file{explow.c},
+@file{expmed.c},
+@file{function.c},
+@file{optabs.c}
+and @file{emit-rtl.c}.
+Also, the file
+@file{insn-emit.c}, generated from the machine description by the
+program @code{genemit}, is used in this pass. The header file
+@file{expr.h} is used for communication within this pass.@refill
+
+@findex genflags
+@findex gencodes
+The header files @file{insn-flags.h} and @file{insn-codes.h},
+generated from the machine description by the programs @code{genflags}
+and @code{gencodes}, tell this pass which standard names are available
+for use and which patterns correspond to them.@refill
+
+Aside from debugging information output, none of the following passes
+refers to the tree structure representation of the function (only
+part of which is saved).
+
+@cindex inline, automatic
+The decision of whether the function can and should be expanded inline
+in its subsequent callers is made at the end of rtl generation. The
+function must meet certain criteria, currently related to the size of
+the function and the types and number of parameters it has. Note that
+this function may contain loops, recursive calls to itself
+(tail-recursive functions can be inlined!), gotos, in short, all
+constructs supported by GNU CC. The file @file{integrate.c} contains
+the code to save a function's rtl for later inlining and to inline that
+rtl when the function is called. The header file @file{integrate.h}
+is also used for this purpose.
+
+The option @samp{-dr} causes a debugging dump of the RTL code after
+this pass. This dump file's name is made by appending @samp{.rtl} to
+the input file name.
+
+@cindex jump optimization
+@cindex unreachable code
+@cindex dead code
+@item
+Jump optimization. This pass simplifies jumps to the following
+instruction, jumps across jumps, and jumps to jumps. It deletes
+unreferenced labels and unreachable code, except that unreachable code
+that contains a loop is not recognized as unreachable in this pass.
+(Such loops are deleted later in the basic block analysis.) It also
+converts some code originally written with jumps into sequences of
+instructions that directly set values from the results of comparisons,
+if the machine has such instructions.
+
+Jump optimization is performed two or three times. The first time is
+immediately following RTL generation. The second time is after CSE,
+but only if CSE says repeated jump optimization is needed. The
+last time is right before the final pass. That time, cross-jumping
+and deletion of no-op move instructions are done together with the
+optimizations described above.
+
+The source file of this pass is @file{jump.c}.
+
+The option @samp{-dj} causes a debugging dump of the RTL code after
+this pass is run for the first time. This dump file's name is made by
+appending @samp{.jump} to the input file name.
+
+@cindex register use analysis
+@item
+Register scan. This pass finds the first and last use of each
+register, as a guide for common subexpression elimination. Its source
+is in @file{regclass.c}.
+
+@cindex jump threading
+@item
+Jump threading. This pass detects a condition jump that branches to an
+identical or inverse test. Such jumps can be @samp{threaded} through
+the second conditional test. The source code for this pass is in
+@file{jump.c}. This optimization is only performed if
+@samp{-fthread-jumps} is enabled.
+
+@cindex common subexpression elimination
+@cindex constant propagation
+@item
+Common subexpression elimination. This pass also does constant
+propagation. Its source file is @file{cse.c}. If constant
+propagation causes conditional jumps to become unconditional or to
+become no-ops, jump optimization is run again when CSE is finished.
+
+The option @samp{-ds} causes a debugging dump of the RTL code after
+this pass. This dump file's name is made by appending @samp{.cse} to
+the input file name.
+
+@cindex loop optimization
+@cindex code motion
+@cindex strength-reduction
+@item
+Loop optimization. This pass moves constant expressions out of loops,
+and optionally does strength-reduction and loop unrolling as well.
+Its source files are @file{loop.c} and @file{unroll.c}, plus the header
+@file{loop.h} used for communication between them. Loop unrolling uses
+some functions in @file{integrate.c} and the header @file{integrate.h}.
+
+The option @samp{-dL} causes a debugging dump of the RTL code after
+this pass. This dump file's name is made by appending @samp{.loop} to
+the input file name.
+
+@item
+If @samp{-frerun-cse-after-loop} was enabled, a second common
+subexpression elimination pass is performed after the loop optimization
+pass. Jump threading is also done again at this time if it was specified.
+
+The option @samp{-dt} causes a debugging dump of the RTL code after
+this pass. This dump file's name is made by appending @samp{.cse2} to
+the input file name.
+
+@cindex register allocation, stupid
+@cindex stupid register allocation
+@item
+Stupid register allocation is performed at this point in a
+nonoptimizing compilation. It does a little data flow analysis as
+well. When stupid register allocation is in use, the next pass
+executed is the reloading pass; the others in between are skipped.
+The source file is @file{stupid.c}.
+
+@cindex data flow analysis
+@cindex analysis, data flow
+@cindex basic blocks
+@item
+Data flow analysis (@file{flow.c}). This pass divides the program
+into basic blocks (and in the process deletes unreachable loops); then
+it computes which pseudo-registers are live at each point in the
+program, and makes the first instruction that uses a value point at
+the instruction that computed the value.
+
+@cindex autoincrement/decrement analysis
+This pass also deletes computations whose results are never used, and
+combines memory references with add or subtract instructions to make
+autoincrement or autodecrement addressing.
+
+The option @samp{-df} causes a debugging dump of the RTL code after
+this pass. This dump file's name is made by appending @samp{.flow} to
+the input file name. If stupid register allocation is in use, this
+dump file reflects the full results of such allocation.
+
+@cindex instruction combination
+@item
+Instruction combination (@file{combine.c}). This pass attempts to
+combine groups of two or three instructions that are related by data
+flow into single instructions. It combines the RTL expressions for
+the instructions by substitution, simplifies the result using algebra,
+and then attempts to match the result against the machine description.
+
+The option @samp{-dc} causes a debugging dump of the RTL code after
+this pass. This dump file's name is made by appending @samp{.combine}
+to the input file name.
+
+@cindex instruction scheduling
+@cindex scheduling, instruction
+@item
+Instruction scheduling (@file{sched.c}). This pass looks for
+instructions whose output will not be available by the time that it is
+used in subsequent instructions. (Memory loads and floating point
+instructions often have this behavior on RISC machines). It re-orders
+instructions within a basic block to try to separate the definition and
+use of items that otherwise would cause pipeline stalls.
+
+Instruction scheduling is performed twice. The first time is immediately
+after instruction combination and the second is immediately after reload.
+
+The option @samp{-dS} causes a debugging dump of the RTL code after this
+pass is run for the first time. The dump file's name is made by
+appending @samp{.sched} to the input file name.
+
+@cindex register class preference pass
+@item
+Register class preferencing. The RTL code is scanned to find out
+which register class is best for each pseudo register. The source
+file is @file{regclass.c}.
+
+@cindex register allocation
+@cindex local register allocation
+@item
+Local register allocation (@file{local-alloc.c}). This pass allocates
+hard registers to pseudo registers that are used only within one basic
+block. Because the basic block is linear, it can use fast and
+powerful techniques to do a very good job.
+
+The option @samp{-dl} causes a debugging dump of the RTL code after
+this pass. This dump file's name is made by appending @samp{.lreg} to
+the input file name.
+
+@cindex global register allocation
+@item
+Global register allocation (@file{global.c}). This pass
+allocates hard registers for the remaining pseudo registers (those
+whose life spans are not contained in one basic block).
+
+@cindex reloading
+@item
+Reloading. This pass renumbers pseudo registers with the hardware
+registers numbers they were allocated. Pseudo registers that did not
+get hard registers are replaced with stack slots. Then it finds
+instructions that are invalid because a value has failed to end up in
+a register, or has ended up in a register of the wrong kind. It fixes
+up these instructions by reloading the problematical values
+temporarily into registers. Additional instructions are generated to
+do the copying.
+
+The reload pass also optionally eliminates the frame pointer and inserts
+instructions to save and restore call-clobbered registers around calls.
+
+Source files are @file{reload.c} and @file{reload1.c}, plus the header
+@file{reload.h} used for communication between them.
+
+The option @samp{-dg} causes a debugging dump of the RTL code after
+this pass. This dump file's name is made by appending @samp{.greg} to
+the input file name.
+
+@cindex instruction scheduling
+@cindex scheduling, instruction
+@item
+Instruction scheduling is repeated here to try to avoid pipeline stalls
+due to memory loads generated for spilled pseudo registers.
+
+The option @samp{-dR} causes a debugging dump of the RTL code after
+this pass. This dump file's name is made by appending @samp{.sched2}
+to the input file name.
+
+@cindex cross-jumping
+@cindex no-op move instructions
+@item
+Jump optimization is repeated, this time including cross-jumping
+and deletion of no-op move instructions.
+
+The option @samp{-dJ} causes a debugging dump of the RTL code after
+this pass. This dump file's name is made by appending @samp{.jump2}
+to the input file name.
+
+@cindex delayed branch scheduling
+@cindex scheduling, delayed branch
+@item
+Delayed branch scheduling. This optional pass attempts to find
+instructions that can go into the delay slots of other instructions,
+usually jumps and calls. The source file name is @file{reorg.c}.
+
+The option @samp{-dd} causes a debugging dump of the RTL code after
+this pass. This dump file's name is made by appending @samp{.dbr}
+to the input file name.
+
+@cindex register-to-stack conversion
+@item
+Conversion from usage of some hard registers to usage of a register
+stack may be done at this point. Currently, this is supported only
+for the floating-point registers of the Intel 80387 coprocessor. The
+source file name is @file{reg-stack.c}.
+
+The options @samp{-dk} causes a debugging dump of the RTL code after
+this pass. This dump file's name is made by appending @samp{.stack}
+to the input file name.
+
+@cindex final pass
+@cindex peephole optimization
+@item
+Final. This pass outputs the assembler code for the function. It is
+also responsible for identifying spurious test and compare
+instructions. Machine-specific peephole optimizations are performed
+at the same time. The function entry and exit sequences are generated
+directly as assembler code in this pass; they never exist as RTL.
+
+The source files are @file{final.c} plus @file{insn-output.c}; the
+latter is generated automatically from the machine description by the
+tool @file{genoutput}. The header file @file{conditions.h} is used
+for communication between these files.
+
+@cindex debugging information generation
+@item
+Debugging information output. This is run after final because it must
+output the stack slot offsets for pseudo registers that did not get
+hard registers. Source files are @file{dbxout.c} for DBX symbol table
+format, @file{sdbout.c} for SDB symbol table format, and
+@file{dwarfout.c} for DWARF symbol table format.
+@end itemize
+
+Some additional files are used by all or many passes:
+
+@itemize @bullet
+@item
+Every pass uses @file{machmode.def} and @file{machmode.h} which define
+the machine modes.
+
+@item
+Several passes use @file{real.h}, which defines the default
+representation of floating point constants and how to operate on them.
+
+@item
+All the passes that work with RTL use the header files @file{rtl.h}
+and @file{rtl.def}, and subroutines in file @file{rtl.c}. The tools
+@code{gen*} also use these files to read and work with the machine
+description RTL.
+
+@findex genconfig
+@item
+Several passes refer to the header file @file{insn-config.h} which
+contains a few parameters (C macro definitions) generated
+automatically from the machine description RTL by the tool
+@code{genconfig}.
+
+@cindex instruction recognizer
+@item
+Several passes use the instruction recognizer, which consists of
+@file{recog.c} and @file{recog.h}, plus the files @file{insn-recog.c}
+and @file{insn-extract.c} that are generated automatically from the
+machine description by the tools @file{genrecog} and
+@file{genextract}.@refill
+
+@item
+Several passes use the header files @file{regs.h} which defines the
+information recorded about pseudo register usage, and @file{basic-block.h}
+which defines the information recorded about basic blocks.
+
+@item
+@file{hard-reg-set.h} defines the type @code{HARD_REG_SET}, a bit-vector
+with a bit for each hard register, and some macros to manipulate it.
+This type is just @code{int} if the machine has few enough hard registers;
+otherwise it is an array of @code{int} and some of the macros expand
+into loops.
+
+@item
+Several passes use instruction attributes. A definition of the
+attributes defined for a particular machine is in file
+@file{insn-attr.h}, which is generated from the machine description by
+the program @file{genattr}. The file @file{insn-attrtab.c} contains
+subroutines to obtain the attribute values for insns. It is generated
+from the machine description by the program @file{genattrtab}.@refill
+@end itemize
+@end ifset
+
+@ifset INTERNALS
+@include rtl.texi
+@include md.texi
+@include tm.texi
+@end ifset
+
+@ifset INTERNALS
+@node Config
+@chapter The Configuration File
+@cindex configuration file
+@cindex @file{xm-@var{machine}.h}
+
+The configuration file @file{xm-@var{machine}.h} contains macro
+definitions that describe the machine and system on which the compiler
+is running, unlike the definitions in @file{@var{machine}.h}, which
+describe the machine for which the compiler is producing output. Most
+of the values in @file{xm-@var{machine}.h} are actually the same on all
+machines that GNU CC runs on, so large parts of all configuration files
+are identical. But there are some macros that vary:
+
+@table @code
+@findex USG
+@item USG
+Define this macro if the host system is System V.
+
+@findex VMS
+@item VMS
+Define this macro if the host system is VMS.
+
+@findex FATAL_EXIT_CODE
+@item FATAL_EXIT_CODE
+A C expression for the status code to be returned when the compiler
+exits after serious errors.
+
+@findex SUCCESS_EXIT_CODE
+@item SUCCESS_EXIT_CODE
+A C expression for the status code to be returned when the compiler
+exits without serious errors.
+
+@findex HOST_WORDS_BIG_ENDIAN
+@item HOST_WORDS_BIG_ENDIAN
+Defined if the host machine stores words of multi-word values in
+big-endian order. (GNU CC does not depend on the host byte ordering
+within a word.)
+
+@findex HOST_FLOAT_WORDS_BIG_ENDIAN
+@item HOST_FLOAT_WORDS_BIG_ENDIAN
+Define this macro to be 1 if the host machine stores @code{DFmode},
+@code{XFmode} or @code{TFmode} floating point numbers in memory with the
+word containing the sign bit at the lowest address; otherwise, define it
+to be zero.
+
+This macro need not be defined if the ordering is the same as for
+multi-word integers.
+
+@findex HOST_FLOAT_FORMAT
+@item HOST_FLOAT_FORMAT
+A numeric code distinguishing the floating point format for the host
+machine. See @code{TARGET_FLOAT_FORMAT} in @ref{Storage Layout} for the
+alternatives and default.
+
+@findex HOST_BITS_PER_CHAR
+@item HOST_BITS_PER_CHAR
+A C expression for the number of bits in @code{char} on the host
+machine.
+
+@findex HOST_BITS_PER_SHORT
+@item HOST_BITS_PER_SHORT
+A C expression for the number of bits in @code{short} on the host
+machine.
+
+@findex HOST_BITS_PER_INT
+@item HOST_BITS_PER_INT
+A C expression for the number of bits in @code{int} on the host
+machine.
+
+@findex HOST_BITS_PER_LONG
+@item HOST_BITS_PER_LONG
+A C expression for the number of bits in @code{long} on the host
+machine.
+
+@findex ONLY_INT_FIELDS
+@item ONLY_INT_FIELDS
+Define this macro to indicate that the host compiler only supports
+@code{int} bit fields, rather than other integral types, including
+@code{enum}, as do most C compilers.
+
+@findex OBSTACK_CHUNK_SIZE
+@item OBSTACK_CHUNK_SIZE
+A C expression for the size of ordinary obstack chunks.
+If you don't define this, a usually-reasonable default is used.
+
+@findex OBSTACK_CHUNK_ALLOC
+@item OBSTACK_CHUNK_ALLOC
+The function used to allocate obstack chunks.
+If you don't define this, @code{xmalloc} is used.
+
+@findex OBSTACK_CHUNK_FREE
+@item OBSTACK_CHUNK_FREE
+The function used to free obstack chunks.
+If you don't define this, @code{free} is used.
+
+@findex USE_C_ALLOCA
+@item USE_C_ALLOCA
+Define this macro to indicate that the compiler is running with the
+@code{alloca} implemented in C. This version of @code{alloca} can be
+found in the file @file{alloca.c}; to use it, you must also alter the
+@file{Makefile} variable @code{ALLOCA}. (This is done automatically
+for the systems on which we know it is needed.)
+
+If you do define this macro, you should probably do it as follows:
+
+@example
+#ifndef __GNUC__
+#define USE_C_ALLOCA
+#else
+#define alloca __builtin_alloca
+#endif
+@end example
+
+@noindent
+so that when the compiler is compiled with GNU CC it uses the more
+efficient built-in @code{alloca} function.
+
+@item FUNCTION_CONVERSION_BUG
+@findex FUNCTION_CONVERSION_BUG
+Define this macro to indicate that the host compiler does not properly
+handle converting a function value to a pointer-to-function when it is
+used in an expression.
+
+@findex MULTIBYTE_CHARS
+@item MULTIBYTE_CHARS
+Define this macro to enable support for multibyte characters in the
+input to GNU CC. This requires that the host system support the ANSI C
+library functions for converting multibyte characters to wide
+characters.
+
+@findex POSIX
+@item POSIX
+Define this if your system is POSIX.1 compliant.
+
+@findex NO_SYS_SIGLIST
+@item NO_SYS_SIGLIST
+Define this if your system @emph{does not} provide the variable
+@code{sys_siglist}.
+
+@vindex sys_siglist
+Some systems do provide this variable, but with a different name such
+as @code{_sys_siglist}. On these systems, you can define
+@code{sys_siglist} as a macro which expands into the name actually
+provided.
+
+Autoconf normally defines @code{SYS_SIGLIST_DECLARED} when it finds a
+declaration of @code{sys_siglist} in the system header files.
+However, when you define @code{sys_siglist} to a different name
+autoconf will not automatically define @code{SYS_SIGLIST_DECLARED}.
+Therefore, if you define @code{sys_siglist}, you should also define
+@code{SYS_SIGLIST_DECLARED}.
+
+@findex USE_PROTOTYPES
+@item USE_PROTOTYPES
+Define this to be 1 if you know that the host compiler supports
+prototypes, even if it doesn't define __STDC__, or define
+it to be 0 if you do not want any prototypes used in compiling
+GNU CC. If @samp{USE_PROTOTYPES} is not defined, it will be
+determined automatically whether your compiler supports
+prototypes by checking if @samp{__STDC__} is defined.
+
+@findex NO_MD_PROTOTYPES
+@item NO_MD_PROTOTYPES
+Define this if you wish suppression of prototypes generated from
+the machine description file, but to use other prototypes within
+GNU CC. If @samp{USE_PROTOTYPES} is defined to be 0, or the
+host compiler does not support prototypes, this macro has no
+effect.
+
+@findex MD_CALL_PROTOTYPES
+@item MD_CALL_PROTOTYPES
+Define this if you wish to generate prototypes for the
+@code{gen_call} or @code{gen_call_value} functions generated from
+the machine description file. If @samp{USE_PROTOTYPES} is
+defined to be 0, or the host compiler does not support
+prototypes, or @samp{NO_MD_PROTOTYPES} is defined, this macro has
+no effect. As soon as all of the machine descriptions are
+modified to have the appropriate number of arguments, this macro
+will be removed.
+
+@findex NO_STAB_H
+@item NO_STAB_H
+Define this if your system does not have the include file
+@file{stab.h}. If @samp{USG} is defined, @samp{NO_STAB_H} is
+assumed.
+
+@findex PATH_SEPARATOR
+@item PATH_SEPARATOR
+Define this macro to be a C character constant representing the
+character used to separate components in paths. The default value is
+the colon character
+
+@findex DIR_SEPARATOR
+@item DIR_SEPARATOR
+If your system uses some character other than slash to separate
+directory names within a file specification, define this macro to be a C
+character constant specifying that character. When GNU CC displays file
+names, the character you specify will be used. GNU CC will test for
+both slash and the character you specify when parsing filenames.
+
+@findex OBJECT_SUFFIX
+@item OBJECT_SUFFIX
+Define this macro to be a C string representing the suffix for object
+files on your machine. If you do not define this macro, GNU CC will use
+@samp{.o} as the suffix for object files.
+
+@findex EXECUTABLE_SUFFIX
+@item EXECUTABLE_SUFFIX
+Define this macro to be a C string representing the suffix for executable
+files on your machine. If you do not define this macro, GNU CC will use
+the null string as the suffix for object files.
+
+@findex COLLECT_EXPORT_LIST
+@item COLLECT_EXPORT_LIST
+If defined, @code{collect2} will scan the individual object files
+specified on its command line and create an export list for the linker.
+Define this macro for systems like AIX, where the linker discards
+object files that are not referenced from @code{main} and uses export
+lists.
+@end table
+
+@findex bzero
+@findex bcmp
+In addition, configuration files for system V define @code{bcopy},
+@code{bzero} and @code{bcmp} as aliases. Some files define @code{alloca}
+as a macro when compiled with GNU CC, in order to take advantage of the
+benefit of GNU CC's built-in @code{alloca}.
+
+@node Fragments
+@chapter Makefile Fragments
+@cindex makefile fragment
+
+When you configure GNU CC using the @file{configure} script
+(@pxref{Installation}), it will construct the file @file{Makefile} from
+the template file @file{Makefile.in}. When it does this, it will
+incorporate makefile fragment files from the @file{config} directory,
+named @file{t-@var{target}} and @file{x-@var{host}}. If these files do
+not exist, it means nothing needs to be added for a given target or
+host.
+
+@menu
+* Target Fragment:: Writing the @file{t-@var{target}} file.
+* Host Fragment:: Writing the @file{x-@var{host}} file.
+@end menu
+
+@node Target Fragment
+@section The Target Makefile Fragment
+@cindex target makefile fragment
+@cindex @file{t-@var{target}}
+
+The target makefile fragment, @file{t-@var{target}}, defines special
+target dependent variables and targets used in the @file{Makefile}:
+
+@table @code
+@findex LIBGCC1
+@item LIBGCC1
+The rule to use to build @file{libgcc1.a}.
+If your target does not need to use the functions in @file{libgcc1.a},
+set this to empty.
+@xref{Interface}.
+
+@findex CROSS_LIBGCC1
+@item CROSS_LIBGCC1
+The rule to use to build @file{libgcc1.a} when building a cross
+compiler. If your target does not need to use the functions in
+@file{libgcc1.a}, set this to empty. @xref{Cross Runtime}.
+
+@findex LIBGCC2_CFLAGS
+@item LIBGCC2_CFLAGS
+Compiler flags to use when compiling @file{libgcc2.c}.
+
+@findex LIB2FUNCS_EXTRA
+@item LIB2FUNCS_EXTRA
+A list of source file names to be compiled or assembled and inserted
+into @file{libgcc.a}.
+
+@findex CRTSTUFF_T_CFLAGS
+@item CRTSTUFF_T_CFLAGS
+Special flags used when compiling @file{crtstuff.c}.
+@xref{Initialization}.
+
+@findex CRTSTUFF_T_CFLAGS_S
+@item CRTSTUFF_T_CFLAGS_S
+Special flags used when compiling @file{crtstuff.c} for shared
+linking. Used if you use @file{crtbeginS.o} and @file{crtendS.o}
+in @code{EXTRA-PARTS}.
+@xref{Initialization}.
+
+@findex MULTILIB_OPTIONS
+@item MULTILIB_OPTIONS
+For some targets, invoking GNU CC in different ways produces objects
+that can not be linked together. For example, for some targets GNU CC
+produces both big and little endian code. For these targets, you must
+arrange for multiple versions of @file{libgcc.a} to be compiled, one for
+each set of incompatible options. When GNU CC invokes the linker, it
+arranges to link in the right version of @file{libgcc.a}, based on
+the command line options used.
+
+The @code{MULTILIB_OPTIONS} macro lists the set of options for which
+special versions of @file{libgcc.a} must be built. Write options that
+are mutually incompatible side by side, separated by a slash. Write
+options that may be used together separated by a space. The build
+procedure will build all combinations of compatible options.
+
+For example, if you set @code{MULTILIB_OPTIONS} to @samp{m68000/m68020
+msoft-float}, @file{Makefile} will build special versions of
+@file{libgcc.a} using the sets of options @samp{-m68000}, @samp{-m68020},
+@samp{-msoft-float}, @samp{-m68000 -msoft-float}, and @samp{-m68020
+-msoft-float}.
+
+@findex MULTILIB_DIRNAMES
+@item MULTILIB_DIRNAMES
+If @code{MULTILIB_OPTIONS} is used, this variable specifies the
+directory names that should be used to hold the various libraries.
+Write one element in @code{MULTILIB_DIRNAMES} for each element in
+@code{MULTILIB_OPTIONS}. If @code{MULTILIB_DIRNAMES} is not used, the
+default value will be @code{MULTILIB_OPTIONS}, with all slashes treated
+as spaces.
+
+For example, if @code{MULTILIB_OPTIONS} is specified as @samp{m68000/m68020
+msoft-float}, then the default value of @code{MULTILIB_DIRNAMES} is
+@samp{m68000 m68020 msoft-float}. You may specify a different value if
+you desire a different set of directory names.
+
+@findex MULTILIB_MATCHES
+@item MULTILIB_MATCHES
+Sometimes the same option may be written in two different ways. If an
+option is listed in @code{MULTILIB_OPTIONS}, GNU CC needs to know about
+any synonyms. In that case, set @code{MULTILIB_MATCHES} to a list of
+items of the form @samp{option=option} to describe all relevant
+synonyms. For example, @samp{m68000=mc68000 m68020=mc68020}.
+
+@findex MULTILIB_EXCEPTIONS
+@item MULTILIB_EXCEPTIONS
+Sometimes when there are multiple sets of @code{MULTILIB_OPTIONS} being
+specified, there are combinations that should not be built. In that
+case, set @code{MULTILIB_EXCEPTIONS} to be all of the switch exceptions
+in shell case syntax that should not be built.
+
+For example, in the PowerPC embedded ABI support, it was not desirable
+to build libraries that compiled with the @samp{-mcall-aixdesc} option
+and either of the @samp{-mcall-aixdesc} or @samp{-mlittle} options at
+the same time, and therefore @code{MULTILIB_EXCEPTIONS} is set to
+@code{*mrelocatable/*mcall-aixdesc* *mlittle/*mcall-aixdesc*}.
+
+@findex MULTILIB_EXTRA_OPTS
+@item MULTILIB_EXTRA_OPTS
+Sometimes it is desirable that when building multiple versions of
+@file{libgcc.a} certain options should always be passed on to the
+compiler. In that case, set @code{MULTILIB_EXTRA_OPTS} to be the list
+of options to be used for all builds.
+@end table
+
+@node Host Fragment
+@section The Host Makefile Fragment
+@cindex host makefile fragment
+@cindex @file{x-@var{host}}
+
+The host makefile fragment, @file{x-@var{host}}, defines special host
+dependent variables and targets used in the @file{Makefile}:
+
+@table @code
+@findex CC
+@item CC
+The compiler to use when building the first stage.
+
+@findex CLIB
+@item CLIB
+Additional host libraries to link with.
+
+@findex OLDCC
+@item OLDCC
+The compiler to use when building @file{libgcc1.a} for a native
+compilation.
+
+@findex OLDAR
+@item OLDAR
+The version of @code{ar} to use when building @file{libgcc1.a} for a native
+compilation.
+
+@findex INSTALL
+@item INSTALL
+The install program to use.
+@end table
+
+@node Funding
+@unnumbered Funding Free Software
+
+If you want to have more free software a few years from now, it makes
+sense for you to help encourage people to contribute funds for its
+development. The most effective approach known is to encourage
+commercial redistributors to donate.
+
+Users of free software systems can boost the pace of development by
+encouraging for-a-fee distributors to donate part of their selling price
+to free software developers---the Free Software Foundation, and others.
+
+The way to convince distributors to do this is to demand it and expect
+it from them. So when you compare distributors, judge them partly by
+how much they give to free software development. Show distributors
+they must compete to be the one who gives the most.
+
+To make this approach work, you must insist on numbers that you can
+compare, such as, ``We will donate ten dollars to the Frobnitz project
+for each disk sold.'' Don't be satisfied with a vague promise, such as
+``A portion of the profits are donated,'' since it doesn't give a basis
+for comparison.
+
+Even a precise fraction ``of the profits from this disk'' is not very
+meaningful, since creative accounting and unrelated business decisions
+can greatly alter what fraction of the sales price counts as profit.
+If the price you pay is $50, ten percent of the profit is probably
+less than a dollar; it might be a few cents, or nothing at all.
+
+Some redistributors do development work themselves. This is useful too;
+but to keep everyone honest, you need to inquire how much they do, and
+what kind. Some kinds of development make much more long-term
+difference than others. For example, maintaining a separate version of
+a program contributes very little; maintaining the standard version of a
+program for the whole community contributes much. Easy new ports
+contribute little, since someone else would surely do them; difficult
+ports such as adding a new CPU to the GNU C compiler contribute more;
+major new features or packages contribute the most.
+
+By establishing the idea that supporting further development is ``the
+proper thing to do'' when distributing free software for a fee, we can
+assure a steady flow of resources into making more free software.
+
+@display
+Copyright (C) 1994 Free Software Foundation, Inc.
+Verbatim copying and redistribution of this section is permitted
+without royalty; alteration is not permitted.
+@end display
+
+@node Look and Feel
+@unnumbered Protect Your Freedom---Fight ``Look And Feel''
+@c the above chapter heading overflows onto the next line. --mew 1/26/93
+
+@quotation
+@i{This section is a political message from the League for Programming
+Freedom to the users of GNU CC. We have included it here because the
+issue of interface copyright is important to the GNU project.}
+@end quotation
+
+Apple, Lotus, and now CDC have tried to create a new form of legal
+monopoly: a copyright on a user interface.
+
+An interface is a kind of language---a set of conventions for
+communication between two entities, human or machine. Until a few years
+ago, the law seemed clear: interfaces were outside the domain of
+copyright, so programmers could program freely and implement whatever
+interface the users demanded. Imitating de-facto standard interfaces,
+sometimes with improvements, was standard practice in the computer
+field. These improvements, if accepted by the users, caught on and
+became the norm; in this way, much progress took place.
+
+Computer users, and most software developers, were happy with this state
+of affairs. However, large companies such as Apple and Lotus would
+prefer a different system---one in which they can own interfaces and
+thereby rid themselves of all serious competitors. They hope that
+interface copyright will give them, in effect, monopolies on major
+classes of software.
+
+Other large companies such as IBM and Digital also favor interface
+monopolies, for the same reason: if languages become property, they
+expect to own many de-facto standard languages. But Apple and Lotus are
+the ones who have actually sued. Apple's lawsuit was defeated, for
+reasons only partly related to the general issue of interface copyright.
+
+Lotus won lawsuits against two small companies, which were thus put out
+of business. Then Lotus sued Borland; Lotus won in the trial court (no
+surprise, since it was the same court that had ruled for Lotus twice
+before), but the court of appeals ruled in favor of Borland, which was
+assisted by a friend-of-the-court brief from the League for Programming
+Freedom.
+
+Lotus appealed the case to the Supreme Court, which heard the case but
+was unable to reach a decision. This failure means that the appeals
+court decision stands, in one portion of the United States, and may
+influence the other appeals courts, but it does not set a nationwide
+precedent. The battle is not over, and it is not limited to the United
+States.
+
+The battle is extending into other areas of software as well. In 1995 a
+company that produced a simulator for a CDC computer was shut down by a
+copyright lawsuit, in which CDC charged that the simulator infringed the
+copyright on the manuals for the computer.
+
+If the monopolists get their way, they will hobble the software field:
+
+@itemize @bullet
+@item
+Gratuitous incompatibilities will burden users. Imagine if each car
+manufacturer had to design a different way to start, stop, and steer a
+car.
+
+@item
+Users will be ``locked in'' to whichever interface they learn; then they
+will be prisoners of one supplier, who will charge a monopolistic price.
+
+@item
+Large companies have an unfair advantage wherever lawsuits become
+commonplace. Since they can afford to sue, they can intimidate smaller
+developers with threats even when they don't really have a case.
+
+@item
+Interface improvements will come slower, since incremental evolution
+through creative partial imitation will no longer occur.
+@end itemize
+
+If interface monopolies are accepted, other large companies are waiting
+to grab theirs:
+
+@itemize @bullet
+@item
+Adobe is expected to claim a monopoly on the interfaces of various
+popular application programs, if Lotus ultimately wins the case against
+Borland.
+
+@item
+Open Computing magazine reported a Microsoft vice president as threatening
+to sue people who imitate the interface of Windows.
+@end itemize
+
+Users invest a great deal of time and money in learning to use computer
+interfaces. Far more, in fact, than software developers invest in
+developing @emph{and even implementing} the interfaces. Whoever can own
+an interface, has made its users into captives, and misappropriated
+their investment.
+
+To protect our freedom from monopolies like these, a group of
+programmers and users have formed a grass-roots political organization,
+the League for Programming Freedom.
+
+The purpose of the League is to oppose monopolistic practices such as
+interface copyright and software patents. The League calls for a return
+to the legal policies of the recent past, in which programmers could
+program freely. The League is not concerned with free software as an
+issue, and is not affiliated with the Free Software Foundation.
+
+The League's activities include publicizing the issues, as is being done
+here, and filing friend-of-the-court briefs on behalf of defendants sued
+by monopolists.
+
+The League's membership rolls include Donald Knuth, the foremost
+authority on algorithms, John McCarthy, inventor of Lisp, Marvin Minsky,
+founder of the MIT Artificial Intelligence lab, Guy L. Steele, Jr.,
+author of well-known books on Lisp and C, as well as Richard Stallman,
+the developer of GNU CC. Please join and add your name to the list.
+Membership dues in the League are $42 per year for programmers, managers
+and professionals; $10.50 for students; $21 for others.
+
+Activist members are especially important, but members who have no time
+to give are also important. Surveys at major ACM conferences have
+indicated a vast majority of attendees agree with the League on both
+issues (interface copyrights and software patents). If just ten percent
+of the programmers who agree with the League join the League, we will
+probably triumph.
+
+To join, or for more information, send electronic mail to
+the address @code{lpf@@uunet.uu.net} or write to:
+
+@display
+League for Programming Freedom
+1 Kendall Square #143
+P.O. Box 9171
+Cambridge, MA 02139
+@end display
+
+In addition to joining the League, here are some suggestions from the
+League for other things you can do to protect your freedom to write
+programs:
+
+@itemize @bullet
+@item
+Tell your friends and colleagues about this issue and how it threatens
+to ruin the computer industry.
+
+@item
+Mention that you are a League member in your @file{.signature}, and
+mention the League's email address for inquiries.
+
+@item
+Ask the companies you consider working for or working with to make
+statements against software monopolies, and give preference to those
+that do.
+
+@item
+When employers ask you to sign contracts giving them copyright on your
+work, insist on a clause saying they will not claim the copyright covers
+imitating the interface.
+
+@item
+When employers ask you to sign contracts giving them patent rights,
+insist on clauses saying they can use these rights only defensively.
+Don't rely on ``company policy,'' since that can change at any time;
+don't rely on an individual executive's private word, since that person
+may be replaced. Get a commitment just as binding as the commitment
+they get from you.
+
+@item
+Write to Congress to explain the importance of these issues.
+
+@display
+House Subcommittee on Intellectual Property
+2137 Rayburn Bldg
+Washington, DC 20515
+
+Senate Subcommittee on Patents, Trademarks and Copyrights
+United States Senate
+Washington, DC 20510
+@end display
+
+(These committees have received lots of mail already; let's give them
+even more.)
+@end itemize
+
+Democracy means nothing if you don't use it. Stand up and be counted!
+
+
+@node Copying
+@unnumbered GNU GENERAL PUBLIC LICENSE
+@center Version 2, June 1991
+
+@display
+Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
+59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+
+@unnumberedsec Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software---to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+@iftex
+@unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+@end iftex
+@ifinfo
+@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+@end ifinfo
+
+@enumerate 0
+@item
+This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The ``Program'', below,
+refers to any such program or work, and a ``work based on the Program''
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term ``modification''.) Each licensee is addressed as ``you''.
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+@item
+You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+@item
+You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+@enumerate a
+@item
+You must cause the modified files to carry prominent notices
+stating that you changed the files and the date of any change.
+
+@item
+You must cause any work that you distribute or publish, that in
+whole or in part contains or is derived from the Program or any
+part thereof, to be licensed as a whole at no charge to all third
+parties under the terms of this License.
+
+@item
+If the modified program normally reads commands interactively
+when run, you must cause it, when started running for such
+interactive use in the most ordinary way, to print or display an
+announcement including an appropriate copyright notice and a
+notice that there is no warranty (or else, saying that you provide
+a warranty) and that users may redistribute the program under
+these conditions, and telling the user how to view a copy of this
+License. (Exception: if the Program itself is interactive but
+does not normally print such an announcement, your work based on
+the Program is not required to print an announcement.)
+@end enumerate
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+@item
+You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+@enumerate a
+@item
+Accompany it with the complete corresponding machine-readable
+source code, which must be distributed under the terms of Sections
+1 and 2 above on a medium customarily used for software interchange; or,
+
+@item
+Accompany it with a written offer, valid for at least three
+years, to give any third party, for a charge no more than your
+cost of physically performing source distribution, a complete
+machine-readable copy of the corresponding source code, to be
+distributed under the terms of Sections 1 and 2 above on a medium
+customarily used for software interchange; or,
+
+@item
+Accompany it with the information you received as to the offer
+to distribute corresponding source code. (This alternative is
+allowed only for noncommercial distribution and only if you
+received the program in object code or executable form with such
+an offer, in accord with Subsection b above.)
+@end enumerate
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+@item
+You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+@item
+You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+@item
+Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+@item
+If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+@item
+If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+@item
+The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and ``any
+later version'', you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+@item
+If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+@iftex
+@heading NO WARRANTY
+@end iftex
+@ifinfo
+@center NO WARRANTY
+@end ifinfo
+
+@item
+BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+@item
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+@end enumerate
+
+@iftex
+@heading END OF TERMS AND CONDITIONS
+@end iftex
+@ifinfo
+@center END OF TERMS AND CONDITIONS
+@end ifinfo
+
+@page
+@unnumberedsec How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the ``copyright'' line and a pointer to where the full notice is found.
+
+@smallexample
+@var{one line to give the program's name and a brief idea of what it does.}
+Copyright (C) 19@var{yy} @var{name of author}
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+@end smallexample
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+@smallexample
+Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+type `show w'.
+This is free software, and you are welcome to redistribute it
+under certain conditions; type `show c' for details.
+@end smallexample
+
+The hypothetical commands @samp{show w} and @samp{show c} should show
+the appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than @samp{show w} and
+@samp{show c}; they could even be mouse-clicks or menu items---whatever
+suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a ``copyright disclaimer'' for the program, if
+necessary. Here is a sample; alter the names:
+
+@smallexample
+Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+`Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+@var{signature of Ty Coon}, 1 April 1989
+Ty Coon, President of Vice
+@end smallexample
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+@node Contributors
+@unnumbered Contributors to GNU CC
+@cindex contributors
+
+In addition to Richard Stallman, several people have written parts
+of GNU CC.
+
+@itemize @bullet
+@item
+The idea of using RTL and some of the optimization ideas came from the
+program PO written at the University of Arizona by Jack Davidson and
+Christopher Fraser. See ``Register Allocation and Exhaustive Peephole
+Optimization'', Software Practice and Experience 14 (9), Sept. 1984,
+857-866.
+
+@item
+Paul Rubin wrote most of the preprocessor.
+
+@item
+Leonard Tower wrote parts of the parser, RTL generator, and RTL
+definitions, and of the Vax machine description.
+
+@item
+Ted Lemon wrote parts of the RTL reader and printer.
+
+@item
+Jim Wilson implemented loop strength reduction and some other
+loop optimizations.
+
+@item
+Nobuyuki Hikichi of Software Research Associates, Tokyo, contributed
+the support for the Sony NEWS machine.
+
+@item
+Charles LaBrec contributed the support for the Integrated Solutions
+68020 system.
+
+@item
+Michael Tiemann of Cygnus Support wrote the front end for C++, as well
+as the support for inline functions and instruction scheduling. Also
+the descriptions of the National Semiconductor 32000 series cpu, the
+SPARC cpu and part of the Motorola 88000 cpu.
+
+@item
+Gerald Baumgartner added the signature extension to the C++ front-end.
+
+@item
+Jan Stein of the Chalmers Computer Society provided support for
+Genix, as well as part of the 32000 machine description.
+
+@item
+Randy Smith finished the Sun FPA support.
+
+@item
+Robert Brown implemented the support for Encore 32000 systems.
+
+@item
+David Kashtan of SRI adapted GNU CC to VMS.
+
+@item
+Alex Crain provided changes for the 3b1.
+
+@item
+Greg Satz and Chris Hanson assisted in making GNU CC work on HP-UX for
+the 9000 series 300.
+
+@item
+William Schelter did most of the work on the Intel 80386 support.
+
+@item
+Christopher Smith did the port for Convex machines.
+
+@item
+Paul Petersen wrote the machine description for the Alliant FX/8.
+
+@item
+Dario Dariol contributed the four varieties of sample programs
+that print a copy of their source.
+
+@item
+Alain Lichnewsky ported GNU CC to the Mips cpu.
+
+@item
+Devon Bowen, Dale Wiles and Kevin Zachmann ported GNU CC to the Tahoe.
+
+@item
+Jonathan Stone wrote the machine description for the Pyramid computer.
+
+@item
+Gary Miller ported GNU CC to Charles River Data Systems machines.
+
+@item
+Richard Kenner of the New York University Ultracomputer Research
+Laboratory wrote the machine descriptions for the AMD 29000, the DEC
+Alpha, the IBM RT PC, and the IBM RS/6000 as well as the support for
+instruction attributes. He also made changes to better support RISC
+processors including changes to common subexpression elimination,
+strength reduction, function calling sequence handling, and condition
+code support, in addition to generalizing the code for frame pointer
+elimination.
+
+@item
+Richard Kenner and Michael Tiemann jointly developed reorg.c, the delay
+slot scheduler.
+
+@item
+Mike Meissner and Tom Wood of Data General finished the port to the
+Motorola 88000.
+
+@item
+Masanobu Yuhara of Fujitsu Laboratories implemented the machine
+description for the Tron architecture (specifically, the Gmicro).
+
+@item
+NeXT, Inc.@: donated the front end that supports the Objective C
+language.
+@c We need to be careful to make it clear that "Objective C"
+@c is the name of a language, not that of a program or product.
+
+@item
+James van Artsdalen wrote the code that makes efficient use of
+the Intel 80387 register stack.
+
+@item
+Mike Meissner at the Open Software Foundation finished the port to the
+MIPS cpu, including adding ECOFF debug support, and worked on the
+Intel port for the Intel 80386 cpu. Later at Cygnus Support, he worked
+on the rs6000 and PowerPC ports.
+
+@item
+Ron Guilmette implemented the @code{protoize} and @code{unprotoize}
+tools, the support for Dwarf symbolic debugging information, and much of
+the support for System V Release 4. He has also worked heavily on the
+Intel 386 and 860 support.
+
+@item
+Torbjorn Granlund implemented multiply- and divide-by-constant
+optimization, improved long long support, and improved leaf function
+register allocation.
+
+@item
+Mike Stump implemented the support for Elxsi 64 bit CPU.
+
+@item
+John Wehle added the machine description for the Western Electric 32000
+processor used in several 3b series machines (no relation to the
+National Semiconductor 32000 processor).
+
+@ignore @c These features aren't advertised yet, since they don't fully work.
+@item
+Analog Devices helped implement the support for complex data types
+and iterators.
+@end ignore
+
+@item
+Holger Teutsch provided the support for the Clipper cpu.
+
+@item
+Kresten Krab Thorup wrote the run time support for the Objective C
+language.
+
+@item
+Stephen Moshier contributed the floating point emulator that assists in
+cross-compilation and permits support for floating point numbers wider
+than 64 bits.
+
+@item
+David Edelsohn contributed the changes to RS/6000 port to make it
+support the PowerPC and POWER2 architectures.
+
+@item
+Steve Chamberlain wrote the support for the Hitachi SH processor.
+
+@item
+Peter Schauer wrote the code to allow debugging to work on the Alpha.
+
+@item
+Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
+MIL-STD-1750A.
+
+@item
+Michael K. Gschwind contributed the port to the PDP-11.
+
+@item
+David Reese of Sun Microsystems contributed to the Solaris on PowerPC
+port.
+@end itemize
+
+@node Index
+@unnumbered Index
+@end ifset
+
+@ifclear INTERNALS
+@node Index
+@unnumbered Index
+@end ifclear
+
+@printindex cp
+
+@summarycontents
+@contents
+@bye
diff --git a/gcc/gcov.c b/gcc/gcov.c
index b3ad330b42c..2dda0d48ee8 100644
--- a/gcc/gcov.c
+++ b/gcc/gcov.c
@@ -2,7 +2,7 @@
source file.
Copyright (C) 1990, 91, 92, 93, 94, 96, 1997 Free Software Foundation, Inc.
Contributed by James E. Wilson of Cygnus Support.
- Mongled by Bob Manson of Cygnus Support.
+ Mangled by Bob Manson of Cygnus Support.
Gcov is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -41,17 +41,29 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
is no way to get the total execution counts for the included file, can
only get execution counts for one or the other of the including files. */
+#include "config.h"
#include <stdio.h>
+#include "gansidecl.h"
#include <sys/types.h>
#include <sys/stat.h>
-/* The only need for this is so that we get macro definitions for rindex
- if necessary. */
-#include "config.h"
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#endif
#include "gcov-io.h"
-extern char * rindex ();
+#ifdef NEED_DECLARATION_RINDEX
+extern char *rindex ();
+#endif
/* The .bb file format consists of several lists of 4-byte integers
which are the line numbers of each basic block in the file. Each
@@ -734,7 +746,7 @@ read_files ()
stat (bb_file_name, &buf);
bb_data_size = buf.st_size / 4;
- bb_data = (char *) xmalloc (buf.st_size);
+ bb_data = (char *) xmalloc ((unsigned) buf.st_size);
fread (bb_data, sizeof (char), buf.st_size, bb_file);
fclose (bb_file);
@@ -912,7 +924,7 @@ function_summary ()
{
if (function_branches)
{
- fprintf (stdout, "%6.2lf%% of %d branches executed in funcion %s\n",
+ fprintf (stdout, "%6.2lf%% of %d branches executed in function %s\n",
(((double) function_branches_executed / function_branches)
* 100), function_branches, function_name);
fprintf (stdout,
@@ -1208,7 +1220,7 @@ output_data ()
if (output_gcov_file)
{
/* Now the statistics are ready. Read in the source file one line
- at a time, and output that line to the gcov file preceeded by
+ at a time, and output that line to the gcov file preceded by
its execution count if non zero. */
source_file = fopen (source_file_name, "r");
@@ -1285,8 +1297,8 @@ output_data ()
before the source line. For lines which exist but were never
executed, print ###### before the source line. Otherwise,
print the execution count before the source line. */
- /* There are 16 spaces of identation added before the source line
- so that tabs won't be messed up. */
+ /* There are 16 spaces of indentation added before the source
+ line so that tabs won't be messed up. */
if (line_exists[count])
{
if (line_counts[count])
@@ -1299,7 +1311,7 @@ output_data ()
fprintf (gcov_file, "\t\t%s", string);
/* In case the source file line is larger than our buffer, keep
- reading and outputing lines until we get a newline. */
+ reading and outputting lines until we get a newline. */
len = strlen (string);
while ((len == 0 || string[strlen (string) - 1] != '\n')
&& retval != NULL)
@@ -1356,7 +1368,7 @@ output_data ()
fprintf (gcov_file, "\t\t%s", string);
/* In case the source file line is larger than our buffer, keep
- reading and outputing lines until we get a newline. */
+ reading and outputting lines until we get a newline. */
len = strlen (string);
while ((len == 0 || string[strlen (string) - 1] != '\n')
&& retval != NULL)
diff --git a/gcc/genattrtab.c b/gcc/genattrtab.c
index 14ecac1f1e5..c29f3703aba 100644
--- a/gcc/genattrtab.c
+++ b/gcc/genattrtab.c
@@ -1,5 +1,5 @@
/* Generate code from machine description to compute values of attributes.
- Copyright (C) 1991, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1991, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
This file is part of GNU CC.
@@ -102,17 +102,25 @@ Boston, MA 02111-1307, USA. */
#else
#include <varargs.h>
#endif
+#include <stdio.h>
#include "rtl.h"
#include "insn-config.h" /* For REGISTER_CONSTRAINTS */
-#include <stdio.h>
-#ifndef VMS
-#ifndef USG
-#include <sys/time.h>
-#include <sys/resource.h>
+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
#endif
#endif
+#ifdef HAVE_SYS_RESOURCE_H
+# include <sys/resource.h>
+#endif
+
/* We must include obstack.h after <sys/time.h>, to avoid lossage with
/usr/include/sys/stdtypes.h on Sun OS 4.x. */
#include "obstack.h"
@@ -340,6 +348,11 @@ static rtx true_rtx, false_rtx;
static char *alternative_name;
+/* Indicate that REG_DEAD notes are valid if dead_or_set_p is ever
+ called. */
+
+int reload_completed = 0;
+
/* Simplify an expression. Only call the routine if there is something to
simplify. */
#define SIMPLIFY_TEST_EXP(EXP,INSN_CODE,INSN_INDEX) \
@@ -359,7 +372,7 @@ static char *alternative_name;
They won't actually be used. */
rtx frame_pointer_rtx, hard_frame_pointer_rtx, stack_pointer_rtx;
-rtx arg_pointer_rtx;
+rtx arg_pointer_rtx, pic_offset_table_rtx;
static rtx attr_rtx PVPROTO((enum rtx_code, ...));
#ifdef HAVE_VPRINTF
@@ -393,7 +406,9 @@ static rtx zero_fn PROTO((rtx));
static rtx one_fn PROTO((rtx));
static rtx max_fn PROTO((rtx));
static rtx simplify_cond PROTO((rtx, int, int));
+#if 0
static rtx simplify_by_alternatives PROTO((rtx, int, int));
+#endif
static rtx simplify_by_exploding PROTO((rtx));
static int find_and_mark_used_attributes PROTO((rtx, rtx *, int *));
static void unmark_used_attributes PROTO((rtx, struct dimension *, int));
@@ -483,6 +498,8 @@ struct attr_hash *attr_hash_table[RTL_HASH_SIZE];
codes are made. */
#define RTL_HASH(RTL) ((HOST_WIDE_INT) (RTL) & 0777777)
+rtx pc_rtx;
+
/* Add an entry to the hash table for RTL with hash code HASHCODE. */
static void
@@ -862,6 +879,9 @@ attr_copy_rtx (orig)
case PC:
case CC0:
return orig;
+
+ default:
+ break;
}
copy = rtx_alloc (code);
@@ -1382,7 +1402,7 @@ make_canonical (attr, exp)
RTX_UNCHANGING_P (exp) = 1;
exp = check_attr_value (exp, attr);
/* Goto COND case since this is now a COND. Note that while the
- new expression is rescanned, all symbol_ref notes are mared as
+ new expression is rescanned, all symbol_ref notes are marked as
unchanging. */
goto cond;
@@ -1418,8 +1438,11 @@ make_canonical (attr, exp)
}
if (allsame)
return defval;
- break;
}
+ break;
+
+ default:
+ break;
}
return exp;
@@ -2175,6 +2198,9 @@ encode_units_mask (x)
case CC0:
case EQ_ATTR:
return x;
+
+ default:
+ break;
}
/* Compare the elements. If any pair of corresponding elements
@@ -3268,6 +3294,10 @@ simplify_test_exp (exp, insn_code, insn_index)
for (ie = av->first_insn; ie; ie = ie->next)
if (ie->insn_code == insn_code)
return evaluate_eq_attr (exp, av->value, insn_code, insn_index);
+ break;
+
+ default:
+ break;
}
/* We have already simplified this expression. Simplifying it again
@@ -3620,9 +3650,10 @@ find_and_mark_used_attributes (exp, terms, nterms)
if (! find_and_mark_used_attributes (XEXP (exp, 1), terms, nterms))
return 0;
return 1;
- }
- return 0;
+ default:
+ return 0;
+ }
}
/* Clear the MEM_VOLATILE_P flag in all EQ_ATTR expressions on LIST and
@@ -3858,8 +3889,10 @@ simplify_with_current_value_aux (exp)
have been selected. */
}
return simplify_with_current_value_aux (XEXP (exp, 1));
+
+ default:
+ abort ();
}
- abort ();
}
/* Clear the MEM_IN_STRUCT_P flag in EXP and its subexpressions. */
@@ -3892,6 +3925,9 @@ clear_struct_flag (x)
case EQ_ATTR:
case ATTR_FLAG:
return;
+
+ default:
+ break;
}
/* Compare the elements. If any pair of corresponding elements
@@ -3944,6 +3980,9 @@ count_sub_rtxs (x, max)
case EQ_ATTR:
case ATTR_FLAG:
return 1;
+
+ default:
+ break;
}
/* Compare the elements. If any pair of corresponding elements
@@ -4168,6 +4207,9 @@ gen_insn (exp)
id->vec_idx = 0;
got_define_asm_attributes = 1;
break;
+
+ default:
+ abort ();
}
}
@@ -4380,6 +4422,8 @@ write_test_expr (exp, in_comparison)
case ASHIFTRT:
printf (" >> ");
break;
+ default:
+ abort ();
}
write_test_expr (XEXP (exp, 1), in_comparison || comparison_operator);
@@ -4412,6 +4456,8 @@ write_test_expr (exp, in_comparison)
case NEG:
printf ("-");
break;
+ default:
+ abort ();
}
write_test_expr (XEXP (exp, 0), in_comparison);
@@ -4603,6 +4649,9 @@ walk_attr_value (exp)
case ATTR_FLAG:
return;
+
+ default:
+ break;
}
for (i = 0, fmt = GET_RTX_FORMAT (code); i < GET_RTX_LENGTH (code); i++)
@@ -5457,6 +5506,9 @@ copy_rtx_unchanging (orig)
case SYMBOL_REF:
case CODE_LABEL:
return orig;
+
+ default:
+ break;
}
copy = rtx_alloc (code);
@@ -5541,7 +5593,7 @@ main (argc, argv)
rtx tem;
int i;
-#ifdef RLIMIT_STACK
+#if defined (RLIMIT_STACK) && defined (HAVE_GETRLIMIT) && defined (HAVE_SETRLIMIT)
/* Get rid of any avoidable limit on stack size. */
{
struct rlimit rlim;
@@ -5551,7 +5603,7 @@ main (argc, argv)
rlim.rlim_cur = rlim.rlim_max;
setrlimit (RLIMIT_STACK, &rlim);
}
-#endif /* RLIMIT_STACK defined */
+#endif
obstack_init (rtl_obstack);
obstack_init (hash_obstack);
@@ -5569,6 +5621,11 @@ main (argc, argv)
init_rtl ();
+ /* We don't use this, but it is referenced in rtlanal.c.
+ Set it up correctly just in case someone tries to use it someday. */
+ pc_rtx = rtx_alloc (PC);
+ PUT_MODE (pc_rtx, VOIDmode);
+
/* Set up true and false rtx's */
true_rtx = rtx_alloc (CONST_INT);
XWINT (true_rtx, 0) = 1;
@@ -5639,6 +5696,7 @@ from the machine description file `md'. */\n\n");
expand_units ();
printf ("#include \"config.h\"\n");
+ printf ("#include <stdio.h>\n");
printf ("#include \"rtl.h\"\n");
printf ("#include \"insn-config.h\"\n");
printf ("#include \"recog.h\"\n");
diff --git a/gcc/genconfig.c b/gcc/genconfig.c
index 404534e120c..7bcf0f2b9cd 100644
--- a/gcc/genconfig.c
+++ b/gcc/genconfig.c
@@ -1,7 +1,6 @@
/* Generate from machine description:
-
- some #define configuration flags.
- Copyright (C) 1987, 1991 Free Software Foundation, Inc.
+ Copyright (C) 1987, 1991, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -142,6 +141,9 @@ walk_insn_part (part, recog_p, non_pc_set_src)
case REG: case CONST_INT: case SYMBOL_REF:
case PC:
return;
+
+ default:
+ break;
}
format_ptr = GET_RTX_FORMAT (GET_CODE (part));
diff --git a/gcc/genemit.c b/gcc/genemit.c
index e80e4c71668..dce0e1e7df2 100644
--- a/gcc/genemit.c
+++ b/gcc/genemit.c
@@ -1,5 +1,5 @@
/* Generate code from machine description to emit insns as rtl.
- Copyright (C) 1987, 1988, 1991, 1994, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 91, 94, 95, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -743,9 +743,11 @@ main (argc, argv)
from the machine description file `md'. */\n\n");
printf ("#include \"config.h\"\n");
+ printf ("#include <stdio.h>\n");
printf ("#include \"rtl.h\"\n");
printf ("#include \"expr.h\"\n");
printf ("#include \"real.h\"\n");
+ printf ("#include \"flags.h\"\n");
printf ("#include \"output.h\"\n");
printf ("#include \"insn-config.h\"\n\n");
printf ("#include \"insn-flags.h\"\n\n");
diff --git a/gcc/genextract.c b/gcc/genextract.c
index f222de1f335..b0c0b2751b9 100644
--- a/gcc/genextract.c
+++ b/gcc/genextract.c
@@ -1,5 +1,5 @@
/* Generate code from machine description to extract operands from insn as rtl.
- Copyright (C) 1987, 1991, 1992, 1993 Free Software Foundation, Inc.
+ Copyright (C) 1987, 1991, 1992, 1993, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -275,6 +275,9 @@ walk_rtx (x, path)
case ADDRESS:
walk_rtx (XEXP (x, 0), path);
return;
+
+ default:
+ break;
}
newpath = (char *) alloca (depth + 2);
@@ -438,6 +441,7 @@ main (argc, argv)
from the machine description file `md'. */\n\n");
printf ("#include \"config.h\"\n");
+ printf ("#include <stdio.h>\n");
printf ("#include \"rtl.h\"\n\n");
/* This variable exists only so it can be the "location"
diff --git a/gcc/genmultilib b/gcc/genmultilib
index 1ae690b697f..02206960400 100644
--- a/gcc/genmultilib
+++ b/gcc/genmultilib
@@ -1,6 +1,6 @@
#!/bin/sh
# Generates multilib.h.
-# Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
#This file is part of GNU CC.
@@ -243,7 +243,7 @@ echo "NULL"
echo "};"
# Output all of the matches now as option and that is the same as that, with
-# a semicolan trailer. Include all of the normal options as well.
+# a semicolon trailer. Include all of the normal options as well.
# Note, the format of the matches is reversed compared
# to what we want, so switch them around.
echo ""
diff --git a/gcc/genopinit.c b/gcc/genopinit.c
index 3087e381c99..1d4c0a4b76f 100644
--- a/gcc/genopinit.c
+++ b/gcc/genopinit.c
@@ -1,5 +1,5 @@
/* Generate code to initialize optabs from machine description.
- Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -354,6 +354,7 @@ main (argc, argv)
from the machine description file `md'. */\n\n");
printf ("#include \"config.h\"\n");
+ printf ("#include <stdio.h>\n");
printf ("#include \"rtl.h\"\n");
printf ("#include \"flags.h\"\n");
printf ("#include \"insn-flags.h\"\n");
diff --git a/gcc/genoutput.c b/gcc/genoutput.c
index 8fdf4ca2c11..4520267c548 100644
--- a/gcc/genoutput.c
+++ b/gcc/genoutput.c
@@ -180,6 +180,8 @@ output_prologue ()
from the machine description file `md'. */\n\n");
printf ("#include \"config.h\"\n");
+ printf ("#include <stdio.h>\n");
+ printf ("#include \"flags.h\"\n");
printf ("#include \"rtl.h\"\n");
printf ("#include \"regs.h\"\n");
printf ("#include \"hard-reg-set.h\"\n");
@@ -191,7 +193,6 @@ from the machine description file `md'. */\n\n");
printf ("#include \"insn-codes.h\"\n\n");
printf ("#include \"recog.h\"\n\n");
- printf ("#include <stdio.h>\n");
printf ("#include \"output.h\"\n");
}
@@ -514,6 +515,9 @@ scan_operands (part, this_address_p, this_strict_low)
case STRICT_LOW_PART:
scan_operands (XEXP (part, 0), 0, 1);
return;
+
+ default:
+ break;
}
format_ptr = GET_RTX_FORMAT (GET_CODE (part));
@@ -522,6 +526,7 @@ scan_operands (part, this_address_p, this_strict_low)
switch (*format_ptr++)
{
case 'e':
+ case 'u':
scan_operands (XEXP (part, i), 0, 0);
break;
case 'E':
diff --git a/gcc/genpeep.c b/gcc/genpeep.c
index ba2328d1f3e..b20fd0d0220 100644
--- a/gcc/genpeep.c
+++ b/gcc/genpeep.c
@@ -1,5 +1,5 @@
/* Generate code from machine description to perform peephole optimizations.
- Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc.
+ Copyright (C) 1987, 1989, 1992, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -48,7 +48,6 @@ struct link
char *xmalloc ();
static void match_rtx ();
-static void gen_exp ();
static void fatal ();
void fancy_abort ();
@@ -264,6 +263,9 @@ match_rtx (x, path, fail_label)
case ADDRESS:
match_rtx (XEXP (x, 0), path, fail_label);
return;
+
+ default:
+ break;
}
printf (" x = ");
@@ -455,6 +457,7 @@ main (argc, argv)
from the machine description file `md'. */\n\n");
printf ("#include \"config.h\"\n");
+ printf ("#include <stdio.h>\n");
printf ("#include \"rtl.h\"\n");
printf ("#include \"regs.h\"\n");
printf ("#include \"output.h\"\n");
diff --git a/gcc/genrecog.c b/gcc/genrecog.c
index b07c70fc46f..f75f1b4be8f 100644
--- a/gcc/genrecog.c
+++ b/gcc/genrecog.c
@@ -1,5 +1,5 @@
/* Generate code from machine description to recognize rtl as insns.
- Copyright (C) 1987, 88, 92, 93, 94, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 92, 93, 94, 95, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -508,6 +508,9 @@ add_to_sequence (pattern, last, position)
newpos[depth] = '1';
new = add_to_sequence (XEXP (pattern, 1), &new->success, newpos);
return new;
+
+ default:
+ break;
}
fmt = GET_RTX_FORMAT (code);
@@ -1286,6 +1289,8 @@ write_tree_1 (tree, prevpos, afterward, type)
printf ("%sswitch (GET_MODE (x%d))\n", indents[indent], depth);
printf ("%s{\n", indents[indent + 2]);
indent += 4;
+ printf ("%sdefault:\n%sbreak;\n", indents[indent - 2],
+ indents[indent]);
printf ("%scase %smode:\n", indents[indent - 2],
GET_MODE_NAME (mode));
modemap[(int) mode] = 1;
@@ -1301,6 +1306,8 @@ write_tree_1 (tree, prevpos, afterward, type)
printf ("%sswitch (GET_CODE (x%d))\n", indents[indent], depth);
printf ("%s{\n", indents[indent + 2]);
indent += 4;
+ printf ("%sdefault:\n%sbreak;\n", indents[indent - 2],
+ indents[indent]);
printf ("%scase ", indents[indent - 2]);
print_code (p->code);
printf (":\n");
@@ -1736,6 +1743,7 @@ main (argc, argv)
from the machine description file `md'. */\n\n");
printf ("#include \"config.h\"\n");
+ printf ("#include <stdio.h>\n");
printf ("#include \"rtl.h\"\n");
printf ("#include \"insn-config.h\"\n");
printf ("#include \"recog.h\"\n");
diff --git a/gcc/getopt.c b/gcc/getopt.c
index f622fc375ee..fc87ce67d69 100644
--- a/gcc/getopt.c
+++ b/gcc/getopt.c
@@ -79,12 +79,6 @@
#endif
#endif
-#if defined (WIN32) && !defined (__CYGWIN32__)
-/* It's not Unix, really. See? Capital letters. */
-#include <windows.h>
-#define getpid() GetCurrentProcessId()
-#endif
-
#ifndef _
/* This is for other GNU distributions with internationalized messages.
When compiling libc, the _ macro is predefined. */
@@ -262,8 +256,6 @@ static int nonoption_flags_len;
static int original_argc;
static char *const *original_argv;
-extern pid_t __libc_pid;
-
/* Make sure the environment variable bash 2.0 puts in the environment
is valid for the getopt call we must make sure that the ARGV passed
to getopt is that one passed to the process. */
@@ -276,7 +268,9 @@ store_args_and_env (int argc, char *const *argv)
original_argc = argc;
original_argv = argv;
}
+# ifdef text_set_element
text_set_element (__libc_subinit, store_args_and_env);
+# endif /* text_set_element */
# define SWAP_FLAGS(ch1, ch2) \
if (nonoption_flags_len > 0) \
@@ -329,9 +323,9 @@ exchange (argv)
nonoption_flags_len = nonoption_flags_max_len = 0;
else
{
- memcpy (new_str, __getopt_nonoption_flags, nonoption_flags_max_len);
- memset (&new_str[nonoption_flags_max_len], '\0',
- top + 1 - nonoption_flags_max_len);
+ memset (__mempcpy (new_str, __getopt_nonoption_flags,
+ nonoption_flags_max_len),
+ '\0', top + 1 - nonoption_flags_max_len);
nonoption_flags_max_len = top + 1;
__getopt_nonoption_flags = new_str;
}
@@ -440,11 +434,8 @@ _getopt_initialize (argc, argv, optstring)
if (__getopt_nonoption_flags == NULL)
nonoption_flags_max_len = -1;
else
- {
- memcpy (__getopt_nonoption_flags, orig_str, len);
- memset (&__getopt_nonoption_flags[len], '\0',
- nonoption_flags_max_len - len);
- }
+ memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
+ '\0', nonoption_flags_max_len - len);
}
}
nonoption_flags_len = nonoption_flags_max_len;
diff --git a/gcc/getopt.h b/gcc/getopt.h
index fb30719a860..c4adc30bbba 100644
--- a/gcc/getopt.h
+++ b/gcc/getopt.h
@@ -2,7 +2,7 @@
Copyright (C) 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C Library.
- Bugs can be reported to bug-glibc@gnu.org.
+ Bugs can be reported to bug-glibc@prep.ai.mit.edu.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
diff --git a/gcc/getpwd.c b/gcc/getpwd.c
index e48b277b95a..28eb298ebf9 100644
--- a/gcc/getpwd.c
+++ b/gcc/getpwd.c
@@ -32,7 +32,7 @@ extern char *getcwd ();
char *getenv ();
char *xmalloc ();
-#ifndef VMS
+#if !(defined (VMS) || (defined(_WIN32) && !defined(__CYGWIN32__)))
/* Get the working directory. Use the PWD environment variable if it's
set correctly, since this is faster and gives more uniform answers
@@ -80,7 +80,7 @@ getpwd ()
return p;
}
-#else /* VMS */
+#else /* VMS || _WIN32 && !__CYGWIN32__ */
#ifndef MAXPATHLEN
#define MAXPATHLEN 255
@@ -91,8 +91,13 @@ getpwd ()
{
static char *pwd = 0;
- if (!pwd) pwd = getcwd (xmalloc (MAXPATHLEN+1), MAXPATHLEN+1);
+ if (!pwd)
+ pwd = getcwd (xmalloc (MAXPATHLEN + 1), MAXPATHLEN + 1
+#ifdef VMS
+ , 0
+#endif
+ );
return pwd;
}
-#endif /* VMS */
+#endif /* VMS || _WIN32 && !__CYGWIN32__ */
diff --git a/gcc/ginclude/ppc-asm.h b/gcc/ginclude/ppc-asm.h
index 9e830dcc6eb..4512d94352a 100644
--- a/gcc/ginclude/ppc-asm.h
+++ b/gcc/ginclude/ppc-asm.h
@@ -1,5 +1,5 @@
/* PowerPC asm definitions for GNU C. */
-/* Under winnt, 1) gas suppports the following as names and 2) in particular
+/* Under winnt, 1) gas supports the following as names and 2) in particular
defining "toc" breaks the FUNC_START macro as ".toc" becomes ".2" */
#if !defined(__WINNT__)
diff --git a/gcc/ginclude/stdarg.h b/gcc/ginclude/stdarg.h
index 694865a69b8..24f3383198d 100644
--- a/gcc/ginclude/stdarg.h
+++ b/gcc/ginclude/stdarg.h
@@ -41,6 +41,9 @@
#if defined (__PPC__) && (defined (_CALL_SYSV) || defined (_WIN32))
#include "va-ppc.h"
#else
+#ifdef __arc__
+#include "va-arc.h"
+#else
#ifdef __M32R__
#include "va-m32r.h"
#else
@@ -53,6 +56,9 @@
#ifdef __mn10200__
#include "va-mn10200.h"
#else
+#ifdef __v850__
+#include "va-v850.h"
+#else
/* Define __gnuc_va_list. */
@@ -90,7 +96,7 @@ void va_end (__gnuc_va_list); /* Defined in libgcc.a */
/* We cast to void * and then to TYPE * because this avoids
a warning about increasing the alignment requirement. */
-#if defined (__arm__) || defined (__i386__) || defined (__i860__) || defined (__ns32000__) || defined (__vax__)
+#if (defined (__arm__) && ! defined (__ARMEB__)) || defined (__i386__) || defined (__i860__) || defined (__ns32000__) || defined (__vax__)
/* This is for little-endian machines; small args are padded upward. */
#define va_arg(AP, TYPE) \
(AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (TYPE)), \
@@ -109,10 +115,12 @@ void va_end (__gnuc_va_list); /* Defined in libgcc.a */
#endif /* _STDARG_H */
+#endif /* not v850 */
#endif /* not mn10200 */
#endif /* not mn10300 */
#endif /* not sh */
#endif /* not m32r */
+#endif /* not arc */
#endif /* not powerpc with V.4 calling sequence */
#endif /* not h8300 */
#endif /* not alpha */
diff --git a/gcc/ginclude/va-arc.h b/gcc/ginclude/va-arc.h
new file mode 100644
index 00000000000..a718ad6245d
--- /dev/null
+++ b/gcc/ginclude/va-arc.h
@@ -0,0 +1,111 @@
+/* stdarg/varargs support for the ARC */
+
+/* Define __gnuc_va_list. */
+
+#ifndef __GNUC_VA_LIST
+#define __GNUC_VA_LIST
+typedef void * __gnuc_va_list;
+#endif /* not __GNUC_VA_LIST */
+
+/* If this is for internal libc use, don't define anything but
+ __gnuc_va_list. */
+#if defined (_STDARG_H) || defined (_VARARGS_H)
+
+/* In GCC version 2, we want an ellipsis at the end of the declaration
+ of the argument list. GCC version 1 can't parse it. */
+
+#if __GNUC__ > 1
+#define __va_ellipsis ...
+#else
+#define __va_ellipsis
+#endif
+
+/* See arc_setup_incoming_varargs for reasons for the oddity in va_start. */
+#ifdef _STDARG_H
+#define va_start(AP, LASTARG) \
+(AP = (__gnuc_va_list) ((int *) __builtin_next_arg (LASTARG) \
+ + (__builtin_args_info (0) < 8 \
+ ? (__builtin_args_info (0) & 1) \
+ : 0)))
+#else
+#define va_alist __builtin_va_alist
+#define va_dcl int __builtin_va_alist; __va_ellipsis
+#define va_start(AP) \
+(AP = (__gnuc_va_list) ((int *) &__builtin_va_alist \
+ + (__builtin_args_info (0) < 8 \
+ ? (__builtin_args_info (0) & 1) \
+ : 0)))
+#endif
+
+#ifndef va_end
+void va_end (__gnuc_va_list); /* Defined in libgcc.a */
+
+/* Values returned by __builtin_classify_type. */
+
+enum __va_type_classes {
+ __no_type_class = -1,
+ __void_type_class,
+ __integer_type_class,
+ __char_type_class,
+ __enumeral_type_class,
+ __boolean_type_class,
+ __pointer_type_class,
+ __reference_type_class,
+ __offset_type_class,
+ __real_type_class,
+ __complex_type_class,
+ __function_type_class,
+ __method_type_class,
+ __record_type_class,
+ __union_type_class,
+ __array_type_class,
+ __string_type_class,
+ __set_type_class,
+ __file_type_class,
+ __lang_type_class
+};
+
+#endif
+#define va_end(AP) ((void)0)
+
+/* Avoid errors if compiling GCC v2 with GCC v1. */
+#if __GNUC__ == 1
+#define __extension__
+#endif
+
+/* All aggregates are passed by reference. All scalar types larger than 8
+ bytes are passed by reference. */
+/* We cast to void * and then to TYPE * because this avoids
+ a warning about increasing the alignment requirement.
+ The casts to char * avoid warnings about invalid pointer arithmetic. */
+
+#define __va_rounded_size(TYPE) \
+ (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
+
+#ifdef __big_endian__
+#define va_arg(AP,TYPE) \
+__extension__ \
+(*({((__builtin_classify_type (*(TYPE*) 0) >= __record_type_class \
+ || __va_rounded_size (TYPE) > 8) \
+ ? ((AP) = (char *)(AP) + __va_rounded_size (TYPE *), \
+ *(TYPE **) (void *) ((char *)(AP) - __va_rounded_size (TYPE *))) \
+ : ((TYPE *) (void *) \
+ (AP = (void *) ((__alignof__ (TYPE) > 4 \
+ ? ((int) AP + 8 - 1) & -8 \
+ : (int) AP) \
+ + __va_rounded_size (TYPE))) - 1));}))
+#else
+#define va_arg(AP,TYPE) \
+__extension__ \
+(*({((__builtin_classify_type (*(TYPE*) 0) >= __record_type_class \
+ || __va_rounded_size (TYPE) > 8) \
+ ? ((AP) = (char *)(AP) + __va_rounded_size (TYPE *), \
+ *(TYPE **) (void *) ((char *)(AP) - __va_rounded_size (TYPE *))) \
+ : ((AP = (void *) ((__alignof__ (TYPE) > 4 \
+ ? ((int) AP + 8 - 1) & -8 \
+ : (int) AP) \
+ + __va_rounded_size (TYPE))), \
+ (TYPE *) (void *) (AP - __va_rounded_size (TYPE))));}))
+#endif
+
+#endif /* defined (_STDARG_H) || defined (_VARARGS_H) */
diff --git a/gcc/ginclude/va-mips.h b/gcc/ginclude/va-mips.h
index af1e1f461b6..a622199388e 100644
--- a/gcc/ginclude/va-mips.h
+++ b/gcc/ginclude/va-mips.h
@@ -35,6 +35,8 @@ typedef char * __gnuc_va_list;
__gnuc_va_list. */
#if defined (_STDARG_H) || defined (_VARARGS_H)
+#ifndef _VA_MIPS_H_ENUM
+#define _VA_MIPS_H_ENUM
enum {
__no_type_class = -1,
__void_type_class,
@@ -57,6 +59,7 @@ enum {
__file_type_class,
__lang_type_class
};
+#endif
/* In GCC version 2, we want an ellipsis at the end of the declaration
of the argument list. GCC version 1 can't parse it. */
diff --git a/gcc/ginclude/va-sh.h b/gcc/ginclude/va-sh.h
index 4bae1e0dcd2..f1671c7b0b6 100644
--- a/gcc/ginclude/va-sh.h
+++ b/gcc/ginclude/va-sh.h
@@ -23,9 +23,6 @@ typedef struct {
typedef void *__gnuc_va_list;
-#define __va_rounded_size(TYPE) \
- (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
-
#endif /* ! SH3E */
#endif /* __GNUC_VA_LIST */
@@ -116,104 +113,83 @@ enum __va_type_classes {
#endif
#define va_end(pvar) ((void)0)
+#ifdef __LITTLE_ENDIAN__
+#define __LITTLE_ENDIAN_P 1
+#else
+#define __LITTLE_ENDIAN_P 0
+#endif
+
+#define __SCALAR_TYPE(TYPE) \
+ ((TYPE) == __integer_type_class \
+ || (TYPE) == __char_type_class \
+ || (TYPE) == __enumeral_type_class)
+
/* RECORD_TYPE args passed using the C calling convention are
passed by invisible reference. ??? RECORD_TYPE args passed
in the stack are made to be word-aligned; for an aggregate that is
not word-aligned, we advance the pointer to the first non-reg slot. */
+ /* When this is a smaller-than-int integer, using
+ auto-increment in the promoted (SImode) is fastest;
+ however, there is no way to express that is C. Therefore,
+ we use an asm.
+ We want the MEM_IN_STRUCT_P bit set in the emitted RTL, therefore we
+ use unions even when it would otherwise be unnecessary. */
+
+#define __va_arg_sh1(AP, TYPE) __extension__ \
+__extension__ \
+({(sizeof (TYPE) == 1 \
+ ? ({union {TYPE t; char c;} __t; \
+ asm("" \
+ : "=r" (__t.c) \
+ : "0" ((((union { int i, j; } *) (AP))++)->i)); \
+ __t.t;}) \
+ : sizeof (TYPE) == 2 \
+ ? ({union {TYPE t; short s;} __t; \
+ asm("" \
+ : "=r" (__t.s) \
+ : "0" ((((union { int i, j; } *) (AP))++)->i)); \
+ __t.t;}) \
+ : sizeof (TYPE) >= 4 || __LITTLE_ENDIAN_P \
+ ? (((union { TYPE t; int i;} *) (AP))++)->t \
+ : ((union {TYPE t;TYPE u;}*) ((char *)++(int *)(AP) - sizeof (TYPE)))->t);})
+
#ifdef __SH3E__
-#ifdef __LITTLE_ENDIAN__
+#define __PASS_AS_FLOAT(TYPE_CLASS,SIZE) \
+ (TYPE_CLASS == __real_type_class && SIZE == 4)
#define va_arg(pvar,TYPE) \
__extension__ \
-(*({int __type = __builtin_classify_type (* (TYPE *) 0); \
- void * __result; \
- if (__type == __real_type_class && sizeof(TYPE) == 4) \
- /* float? */ \
+({int __type = __builtin_classify_type (* (TYPE *) 0); \
+ void * __result_p; \
+ if (__PASS_AS_FLOAT (__type, sizeof(TYPE))) \
{ \
- __va_freg *__r; \
if (pvar.__va_next_fp < pvar.__va_next_fp_limit) \
- __r = (__va_freg *) pvar.__va_next_fp++; \
- else \
- __r = (__va_freg *) pvar.__va_next_stack++; \
- __result = (char *) __r; \
- } \
- else \
- { \
- __va_greg *_r; \
- if (pvar.__va_next_o + ((sizeof (TYPE) + 3) / 4) \
- <= pvar.__va_next_o_limit) \
{ \
- _r = pvar.__va_next_o; \
- pvar.__va_next_o += (sizeof (TYPE) + 3) / 4; \
+ __result_p = &pvar.__va_next_fp; \
} \
else \
- { \
- _r = pvar.__va_next_stack; \
- pvar.__va_next_stack += (sizeof (TYPE) + 3) / 4; \
- } \
- __result = (char *) _r; \
- } \
- (TYPE *) __result;}))
-
-#else /* ! __LITTLE_ENDIAN__ */
-
-#define va_arg(pvar,TYPE) \
-__extension__ \
-(*({int __type = __builtin_classify_type (* (TYPE *) 0); \
- void * __result; \
- if (__type == __real_type_class && sizeof(TYPE) == 4) \
- /* float? */ \
- { \
- __va_freg *__r; \
- if (pvar.__va_next_fp < pvar.__va_next_fp_limit) \
- __r = (__va_freg *) pvar.__va_next_fp++; \
- else \
- __r = (__va_freg *) pvar.__va_next_stack++; \
- __result = (char *) __r; \
+ __result_p = &pvar.__va_next_stack; \
} \
else \
{ \
- __va_greg *_r; \
if (pvar.__va_next_o + ((sizeof (TYPE) + 3) / 4) \
<= pvar.__va_next_o_limit) \
- { \
- pvar.__va_next_o += (sizeof (TYPE) + 3) / 4; \
- _r = pvar.__va_next_o; \
- } \
+ __result_p = &pvar.__va_next_o; \
else \
{ \
- pvar.__va_next_stack += (sizeof (TYPE) + 3) / 4; \
- _r = pvar.__va_next_stack; \
+ if (sizeof (TYPE) > 4) \
+ pvar.__va_next_o = pvar.__va_next_o_limit; \
+ \
+ __result_p = &pvar.__va_next_stack; \
} \
- __result = ((char *) _r \
- - (sizeof (TYPE) < 4 ? sizeof (TYPE) \
- : ((sizeof (TYPE) + 3) / 4) * 4)); \
} \
- (TYPE *) __result;}))
-
-#endif /* __LITTLE_ENDIAN__ */
+ __va_arg_sh1(*(void **)__result_p, TYPE);})
#else /* ! SH3E */
-#ifdef __LITTLE_ENDIAN__
-
-/* This is for little-endian machines; small args are padded upward. */
-#define va_arg(AP, TYPE) \
- (AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (TYPE)), \
- *((TYPE *) (void *) ((char *) (AP) - __va_rounded_size (TYPE))))
-
-#else /* ! __LITTLE_ENDIAN__ */
-
-/* This is for big-endian machines; small args are padded downward. */
-#define va_arg(AP, TYPE) \
- (AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (TYPE)), \
- *((TYPE *) (void *) ((char *) (AP) \
- - ((sizeof (TYPE) < __va_rounded_size (char) \
- ? sizeof (TYPE) : __va_rounded_size (TYPE))))))
-
-#endif /* __LITTLE_ENDIAN__ */
+#define va_arg(AP, TYPE) __va_arg_sh1((AP), TYPE)
#endif /* SH3E */
diff --git a/gcc/ginclude/va-sparc.h b/gcc/ginclude/va-sparc.h
index d95c38c9e48..73c9de1cd9a 100644
--- a/gcc/ginclude/va-sparc.h
+++ b/gcc/ginclude/va-sparc.h
@@ -5,19 +5,7 @@
#ifndef __GNUC_VA_LIST
#define __GNUC_VA_LIST
-
-#ifdef __arch64__
-typedef long long __va_greg;
-typedef double __va_freg;
-typedef struct {
- __va_greg * __va_next_o; /* next available %o* register */
- __va_greg * __va_next_o_limit; /* past last available %o* register */
- __va_freg * __va_next_fp; /* next available %f* register */
- __va_freg * __va_next_fp_limit; /* last available %f* register */
- __va_greg * __va_next_stack; /* next extended word on stack */
-} __gnuc_va_list;
-#else
-#if ! defined (__svr4__) && ! defined (__linux__)
+#if ! defined (__svr4__) && ! defined (__linux__) && ! defined (__arch64__)
/* This has to be a char * to be compatible with Sun.
i.e., we have to pass a `va_list' to vsprintf. */
typedef char * __gnuc_va_list;
@@ -26,7 +14,6 @@ typedef char * __gnuc_va_list;
i.e., we have to pass a `va_list' to vsprintf. */
typedef void * __gnuc_va_list;
#endif
-#endif /* not __arch64__ */
#endif /* not __GNUC_VA_LIST */
/* If this is for internal libc use, don't define anything but
@@ -35,56 +22,27 @@ typedef void * __gnuc_va_list;
#ifdef _STDARG_H
-#ifdef __arch64__
-#define va_start(AP, LASTARG) \
-__extension__ \
- ({ \
- AP.__va_next_o = (__va_greg *) __builtin_saveregs (); \
- AP.__va_next_o_limit = (AP.__va_next_o + \
- (__builtin_args_info (0) < 6 ? 6 - __builtin_args_info (0) : 0)); \
- AP.__va_next_fp = (__va_freg *) AP.__va_next_o_limit; \
- AP.__va_next_fp_limit = (AP.__va_next_fp + \
- (__builtin_args_info (1) < 16 ? (16 - __builtin_args_info (1) + 1) / 2 : 0)); \
- AP.__va_next_stack = (__va_greg *) __builtin_next_arg (LASTARG); \
- })
-#else
/* Call __builtin_next_arg even though we aren't using its value, so that
we can verify that LASTARG is correct. */
-#ifdef __GCC_NEW_VARARGS__
+#if defined (__GCC_NEW_VARARGS__) || defined (__arch64__)
#define va_start(AP, LASTARG) \
(__builtin_next_arg (LASTARG), AP = (char *) __builtin_saveregs ())
#else
#define va_start(AP, LASTARG) \
(__builtin_saveregs (), AP = ((char *) __builtin_next_arg (LASTARG)))
#endif
-#endif /* not __arch64__ */
#else
#define va_alist __builtin_va_alist
#define va_dcl int __builtin_va_alist;...
-#ifdef __arch64__
-#define va_start(AP) \
-__extension__ \
- ({ \
- AP.__va_next_o = (__va_greg *) __builtin_saveregs (); \
- AP.__va_next_o_limit = (AP.__va_next_o + \
- (__builtin_args_info (0) < 6 ? 6 - __builtin_args_info (0) : 0)); \
- AP.__va_next_fp = (__va_freg *) AP.__va_next_o_limit; \
- AP.__va_next_fp_limit = (AP.__va_next_fp + \
- (__builtin_args_info (1) < 16 ? (16 - __builtin_args_info (1) + 1) / 2 : 0)); \
- AP.__va_next_stack = (__va_greg *) __builtin_next_arg (__builtin_va_alist) \
- - (__builtin_args_info (0) >= 6 || __builtin_args_info (1) >= 16 ? 1 : 0); \
- })
+#if defined (__GCC_NEW_VARARGS__) || defined (__arch64__)
+#define va_start(AP) ((AP) = (char *) __builtin_saveregs ())
#else
-#ifdef __GCC_NEW_VARARGS__
-#define va_start(AP) ((AP) = (char *) __builtin_saveregs ())
-#else
-#define va_start(AP) \
- (__builtin_saveregs (), (AP) = ((char *) &__builtin_va_alist))
+#define va_start(AP) \
+ (__builtin_saveregs (), (AP) = ((char *) &__builtin_va_alist))
#endif
-#endif /* not __arch64__ */
#endif
@@ -131,45 +89,45 @@ enum __va_type_classes {
#ifdef __arch64__
-#define va_arg(pvar,TYPE) \
+typedef unsigned int __ptrint __attribute__ ((__mode__ (__DI__)));
+
+/* ??? TODO: little endian support */
+
+#define va_arg(pvar, TYPE) \
__extension__ \
(*({int __type = __builtin_classify_type (* (TYPE *) 0); \
- void * __result; \
+ char * __result; \
if (__type == __real_type_class) /* float? */ \
{ \
- __va_freg *__r; \
- /* see PASS_IN_REG_P in gcc's sparc.h */ \
- if (pvar.__va_next_fp < pvar.__va_next_fp_limit \
- && ((__r = (__va_freg *) (((__va_greg) pvar.__va_next_fp + sizeof (TYPE) - 1) & ~(__va_greg) (sizeof (TYPE) - 1))) \
- < pvar.__va_next_fp_limit)) \
- { \
- pvar.__va_next_fp = __r + (sizeof (TYPE) + 7) / 8; \
- } \
- else \
- { \
- __r = (__va_freg *) pvar.__va_next_stack; \
- pvar.__va_next_stack += (sizeof (TYPE) + 7) / 8; \
- } \
- __result = __r; \
+ if (__alignof__ (TYPE) == 16) \
+ (pvar) = (void *) (((__ptrint) (pvar) + 15) & -16); \
+ __result = (pvar); \
+ (pvar) = (char *) (pvar) + sizeof (TYPE); \
} \
else if (__type < __record_type_class) /* integer? */ \
{ \
- __va_greg *__r; \
- if (pvar.__va_next_o < pvar.__va_next_o_limit) \
- __r = pvar.__va_next_o++; \
- else \
- __r = pvar.__va_next_stack++; \
- /* adjust for 4 byte ints */ \
- __result = (char *) __r + 8 - sizeof (TYPE); \
+ (pvar) = (char *) (pvar) + 8; \
+ __result = (char *) (pvar) - sizeof (TYPE); \
} \
else /* aggregate object */ \
{ \
- void **__r; \
- if (pvar.__va_next_o < pvar.__va_next_o_limit) \
- __r = (void **) pvar.__va_next_o++; \
+ if (sizeof (TYPE) <= 8) \
+ { \
+ __result = (pvar); \
+ (pvar) = (char *) (pvar) + 8; \
+ } \
+ else if (sizeof (TYPE) <= 16) \
+ { \
+ if (__alignof__ (TYPE) == 16) \
+ (pvar) = (void *) (((__ptrint) (pvar) + 15) & -16); \
+ __result = (pvar); \
+ (pvar) = (char *) (pvar) + 16; \
+ } \
else \
- __r = (void **) pvar.__va_next_stack++; \
- __result = *__r; \
+ { \
+ __result = * (void **) (pvar); \
+ (pvar) = (char *) (pvar) + 8; \
+ } \
} \
(TYPE *) __result;}))
@@ -198,6 +156,7 @@ __extension__ \
(TYPE *) (void *) __u.__d; }) \
: ((pvar) = (char *)(pvar) + __va_rounded_size (TYPE), \
((TYPE *) (void *) ((char *)(pvar) - __va_rounded_size (TYPE)))));}))
+
#endif /* not __arch64__ */
/* Copy __gnuc_va_list into another variable of this type. */
diff --git a/gcc/ginclude/va-v850.h b/gcc/ginclude/va-v850.h
new file mode 100644
index 00000000000..96da6d5a3de
--- /dev/null
+++ b/gcc/ginclude/va-v850.h
@@ -0,0 +1,34 @@
+/* Define __gnuc_va_list. */
+
+#ifndef __GNUC_VA_LIST
+#define __GNUC_VA_LIST
+typedef void *__gnuc_va_list;
+#endif /* not __GNUC_VA_LIST */
+
+/* If this is for internal libc use, don't define anything but
+ __gnuc_va_list. */
+#if defined (_STDARG_H) || defined (_VARARGS_H)
+
+#ifdef _STDARG_H
+#define va_start(AP, LASTARG) \
+ (AP = ((__gnuc_va_list) __builtin_next_arg (LASTARG)))
+#else
+#define __va_ellipsis ...
+#define va_alist __builtin_va_alist
+#define va_dcl int __builtin_va_alist; __va_ellipsis
+#define va_start(AP) AP=(char *) &__builtin_va_alist
+#endif
+
+/* Now stuff common to both varargs & stdarg implementations. */
+#define __va_rounded_size(TYPE) \
+ (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
+#undef va_end
+void va_end (__gnuc_va_list);
+#define va_end(AP) ((void)0)
+#define va_arg(AP, TYPE) \
+ (sizeof (TYPE) > 8 \
+ ? (AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (char *)),\
+ **((TYPE **) (void *) ((char *) (AP) - __va_rounded_size (char *))))\
+ : (AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (TYPE)), \
+ *((TYPE *) (void *) ((char *) (AP) - __va_rounded_size (TYPE)))))
+#endif
diff --git a/gcc/ginclude/varargs.h b/gcc/ginclude/varargs.h
index e0db8cc187b..410d06aac69 100644
--- a/gcc/ginclude/varargs.h
+++ b/gcc/ginclude/varargs.h
@@ -39,6 +39,9 @@
#if defined (__PPC__) && (defined (_CALL_SYSV) || defined (_WIN32))
#include "va-ppc.h"
#else
+#ifdef __arc__
+#include "va-arc.h"
+#else
#ifdef __M32R__
#include "va-m32r.h"
#else
@@ -51,6 +54,9 @@
#ifdef __mn10200__
#include "va-mn10200.h"
#else
+#ifdef __v850__
+#include "va-v850.h"
+#else
#ifdef __NeXT__
@@ -109,7 +115,7 @@ typedef void *__gnuc_va_list;
(((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
#endif
-#if defined (__arm__) || defined (__i386__) || defined (__i860__) || defined (__ns32000__) || defined (__vax__)
+#if (defined (__arm__) && ! defined (__ARMEB__)) || defined (__i386__) || defined (__i860__) || defined (__ns32000__) || defined (__vax__)
/* This is for little-endian machines; small args are padded upward. */
#define va_arg(AP, TYPE) \
(AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (TYPE)), \
@@ -126,10 +132,12 @@ typedef void *__gnuc_va_list;
/* Copy __gnuc_va_list into another variable of this type. */
#define __va_copy(dest, src) (dest) = (src)
+#endif /* not v850 */
#endif /* not mn10200 */
#endif /* not mn10300 */
#endif /* not sh */
#endif /* not m32r */
+#endif /* not arc */
#endif /* not powerpc with V.4 calling sequence */
#endif /* not h8300 */
#endif /* not alpha */
diff --git a/gcc/glimits.h b/gcc/glimits.h
index d413427c7d6..933a3a84055 100644
--- a/gcc/glimits.h
+++ b/gcc/glimits.h
@@ -63,11 +63,11 @@
/* Minimum and maximum values a `signed long int' can hold.
(Same as `int'). */
#ifndef __LONG_MAX__
-#ifndef __alpha__
-#define __LONG_MAX__ 2147483647L
-#else
+#if defined (__alpha__) || (defined (__sparc_v9__) && defined (__arch64__))
#define __LONG_MAX__ 9223372036854775807L
-# endif /* __alpha__ */
+#else
+#define __LONG_MAX__ 2147483647L
+#endif /* __alpha__ || sparc64 */
#endif
#undef LONG_MIN
#define LONG_MIN (-LONG_MAX-1)
diff --git a/gcc/global.c b/gcc/global.c
index 83b09fe431f..3ab4d708af6 100644
--- a/gcc/global.c
+++ b/gcc/global.c
@@ -19,8 +19,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "flags.h"
#include "basic-block.h"
@@ -277,6 +277,7 @@ int
global_alloc (file)
FILE *file;
{
+ int retval;
#ifdef ELIMINABLE_REGS
static struct {int from, to; } eliminables[] = ELIMINABLE_REGS;
#endif
@@ -486,8 +487,11 @@ global_alloc (file)
allocno_row_words = (max_allocno + INT_BITS - 1) / INT_BITS;
- conflicts = (INT_TYPE *) alloca (max_allocno * allocno_row_words
- * sizeof (INT_TYPE));
+ /* We used to use alloca here, but the size of what it would try to
+ allocate would occasionally cause it to exceed the stack limit and
+ cause unpredictable core dumps. Some examples were > 2Mb in size. */
+ conflicts = (INT_TYPE *) xmalloc (max_allocno * allocno_row_words
+ * sizeof (INT_TYPE));
bzero ((char *) conflicts,
max_allocno * allocno_row_words * sizeof (INT_TYPE));
@@ -577,7 +581,10 @@ global_alloc (file)
for the sake of debugging information. */
if (n_basic_blocks > 0)
#endif
- return reload (get_insns (), 1, file);
+ retval = reload (get_insns (), 1, file);
+
+ free (conflicts);
+ return retval;
}
/* Sort predicate for ordering the allocnos.
diff --git a/gcc/gstab.h b/gcc/gstab.h
new file mode 100644
index 00000000000..80bd594a36a
--- /dev/null
+++ b/gcc/gstab.h
@@ -0,0 +1,17 @@
+#ifndef __GNU_STAB__
+
+/* Indicate the GNU stab.h is in use. */
+
+#define __GNU_STAB__
+
+#define __define_stab(NAME, CODE, STRING) NAME=CODE,
+
+enum __stab_debug_code
+{
+#include "stab.def"
+LAST_UNUSED_STAB_CODE
+};
+
+#undef __define_stab
+
+#endif /* __GNU_STAB_ */
diff --git a/gcc/halfpic.c b/gcc/halfpic.c
index 3e0ae2135e0..a853a12fbf4 100644
--- a/gcc/halfpic.c
+++ b/gcc/halfpic.c
@@ -1,5 +1,5 @@
/* OSF/rose half-pic support functions.
- Copyright (C) 1992 Free Software Foundation, Inc.
+ Copyright (C) 1992, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -32,9 +32,9 @@ Boston, MA 02111-1307, USA. */
#ifdef HALF_PIC_INIT
+#include <stdio.h>
#include "tree.h"
#include "rtl.h"
-#include <stdio.h>
#include "obstack.h"
#define obstack_chunk_alloc xmalloc
diff --git a/gcc/halfpic.h b/gcc/halfpic.h
index b02b81ee563..f9c1a695517 100644
--- a/gcc/halfpic.h
+++ b/gcc/halfpic.h
@@ -1,5 +1,5 @@
/* OSF/rose half-pic support definitions.
- Copyright (C) 1992, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1992, 1996, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -20,24 +20,7 @@ Boston, MA 02111-1307, USA. */
#ifndef NO_HALF_PIC
-/* Add prototype support. */
-/* ??? It would be nice to use gansidecl.h here but there's an extra
- complication with NO_STDIO_H that must be dealt with. */
-#ifndef PROTO
-#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
-#define PROTO(ARGS) ARGS
-#else
-#define PROTO(ARGS) ()
-#endif
-#endif
-
-#if !defined(STDIO_PROTO) && !defined(NO_STDIO_H)
-#ifndef BUFSIZ
-#include <stdio.h>
-#endif
-
-#define STDIO_PROTO(ARGS) PROTO(ARGS)
-#endif
+#include "gansidecl.h"
#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
union tree_node; /* forward reference */
@@ -64,9 +47,8 @@ extern void half_pic_external PROTO((char *)); /* declare object external */
extern void half_pic_init PROTO((void)); /* half_pic initialization */
extern int half_pic_address_p PROTO((struct rtx_def *)); /* true if an address is half-pic */
extern struct rtx_def *half_pic_ptr PROTO((struct rtx_def *)); /* return RTX for half-pic pointer */
-#ifdef STDIO_PROTO
-extern void half_pic_finish STDIO_PROTO((FILE *)); /* half_pic termination */
-#endif
+/* Can't use prototype since FILE isn't defined yet. */
+extern void half_pic_finish (/* FILE * */); /* half_pic termination */
/* Macros to provide access to the half-pic stuff (so they can easily
be stubbed out. */
diff --git a/gcc/input.h b/gcc/input.h
index 7c71c24d46b..7bcde83f975 100644
--- a/gcc/input.h
+++ b/gcc/input.h
@@ -1,7 +1,6 @@
/* Declarations for variables relating to reading the source file.
Used by parsers, lexical analyzers, and error message routines.
-
- Copyright (C) 1993 Free Software Foundation, Inc.
+ Copyright (C) 1993, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -37,6 +36,7 @@ struct file_stack
char *name;
struct file_stack *next;
int line;
+ int indent_level;
};
/* Stack of currently pending input files.
diff --git a/gcc/install.texi b/gcc/install.texi
index c6ba6f5d79b..9013d8894e1 100644
--- a/gcc/install.texi
+++ b/gcc/install.texi
@@ -1,4 +1,4 @@
-@c Copyright (C) 1988,89,92,93,94,95,96 Free Software Foundation, Inc.
+@c Copyright (C) 1988,89,92,93,94,95,96,97,1998 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.
@@ -64,8 +64,8 @@ to specify a configuration when building a native compiler unless
wrong.
In those cases, specify the build machine's @dfn{configuration name}
-with the @samp{--build} option; the host and target will default to be
-the same as the build machine. (If you are building a cross-compiler,
+with the @samp{--host} option; the host and target will default to be
+the same as the host machine. (If you are building a cross-compiler,
see @ref{Cross-Compiler}.)
Here is an example:
@@ -178,14 +178,14 @@ make a difference.
@cindex Objective C threads
@cindex threads, Objective C
-@item --enable-objcthreads=@var{type}
-Certain systems, notably Linux, can't be relied on to supply a threads
-facility for the Objective C runtime and so will default to
-single-threaded runtime. They may, however, have a library threads
-implementation available, in which case threads can be enabled with this
-option by supplying a suitable @var{type}, probably @samp{posix}.
-The possibilities for @var{type} are @samp{single}, @samp{posix},
-@samp{win32}, @samp{solaris}, @samp{irix} and @samp{mach}.
+@item --enable-threads=@var{type}
+Certain systems, notably Linux-based GNU systems, can't be relied on to
+supply a threads facility for the Objective C runtime and so will
+default to single-threaded runtime. They may, however, have a library
+threads implementation available, in which case threads can be enabled
+with this option by supplying a suitable @var{type}, probably
+@samp{posix}. The possibilities for @var{type} are @samp{single},
+@samp{posix}, @samp{win32}, @samp{solaris}, @samp{irix} and @samp{mach}.
@end table
The @file{configure} script searches subdirectories of the source
@@ -494,11 +494,11 @@ This copies the files @file{cc1}, @file{cpp} and @file{libgcc.a} to
files @file{cc1}, @file{cpp} and @file{libgcc.a} in the directory
@file{/usr/local/lib/gcc-lib/@var{target}/@var{version}}, which is where
the compiler driver program looks for them. Here @var{target} is the
-target machine type specified when you ran @file{configure}, and
-@var{version} is the version number of GNU CC. This naming scheme
-permits various versions and/or cross-compilers to coexist.
-It also copies the executables for compilers for other languages
-(e.g., @file{cc1plus} for C++) to the same directory.
+canonicalized form of target machine type specified when you ran
+@file{configure}, and @var{version} is the version number of GNU CC.
+This naming scheme permits various versions and/or cross-compilers to
+coexist. It also copies the executables for compilers for other
+languages (e.g., @file{cc1plus} for C++) to the same directory.
This also copies the driver program @file{xgcc} into
@file{/usr/local/bin/gcc}, so that it appears in typical execution
@@ -521,12 +521,57 @@ since they usually run faster than the ones compiled with some other
compiler.)
@item
+@cindex C++ runtime library
+@cindex @code{libstdc++}
If you're going to use C++, it's likely that you need to also install
-the libg++ distribution. It should be available from the same
-place where you got the GNU C distribution. Just as GNU C does not
-distribute a C runtime library, it also does not include a C++ run-time
+a C++ runtime library. Just as GNU C does not
+distribute a C runtime library, it also does not include a C++ runtime
library. All I/O functionality, special class libraries, etc., are
-available in the libg++ distribution.
+provided by the C++ runtime library.
+
+The standard C++ runtime library for GNU CC is called @samp{libstdc++}.
+An obsolescent library @samp{libg++} may also be available, but it's
+necessary only for older software that hasn't been converted yet; if
+you don't know whether you need @samp{libg++} then you probably don't
+need it.
+
+Here's one way to build and install @samp{libstdc++} for GNU CC:
+
+@itemize @bullet
+@item
+Build and install GNU CC, so that invoking @samp{gcc} obtains the GNU CC
+that was just built.
+
+@item
+Obtain a copy of a compatible @samp{libstdc++} distribution. For
+example, the @samp{libstdc++-2.8.0.tar.gz} distribution should be
+compatible with GCC 2.8.0. GCC distributors normally distribute
+@samp{libstdc++} as well.
+
+@item
+Set the @samp{CXX} environment variable to @samp{gcc} while running the
+@samp{libstdc++} distribution's @file{configure} command. Use the same
+@file{configure} options that you used when you invoked GCC's
+@file{configure} command.
+
+@item
+Invoke @samp{make} to build the C++ runtime.
+
+@item
+Invoke @samp{make install} to install the C++ runtime.
+
+@end itemize
+
+To summarize, after building and installing GNU CC, invoke the following
+shell commands in the topmost directory of the C++ library distribution.
+For @var{configure-options}, use the same options that
+you used to configure GNU CC.
+
+@example
+$ CXX=gcc ./configure @var{configure-options}
+$ make
+$ make install
+@end example
@item
GNU CC includes a runtime library for Objective-C because it is an
@@ -609,8 +654,8 @@ just @samp{@var{cpu}-@var{system}}, if it is not needed. For example,
Here is a list of system types:
@quotation
-386bsd, aix, acis, amigados, aos, aout, aux, bosx, bsd, clix, coff, ctix, cxux,
-dgux, dynix, ebmon, ecoff, elf, esix, freebsd, hms, genix, gnu, gnu/linux,
+386bsd, aix, acis, amigaos, aos, aout, aux, bosx, bsd, clix, coff, ctix, cxux,
+dgux, dynix, ebmon, ecoff, elf, esix, freebsd, hms, genix, gnu, linux-gnu,
hiux, hpux, iris, irix, isc, luna, lynxos, mach, minix, msdos, mvs,
netbsd, newsos, nindy, ns, osf, osfrose, ptx, riscix, riscos, rtu, sco, sim,
solaris, sunos, sym, sysv, udi, ultrix, unicos, uniplus, unos, vms, vsta,
@@ -714,8 +759,7 @@ GNU CC.
@item alpha-*-osf1
Systems using processors that implement the DEC Alpha architecture and
are running the DEC Unix (OSF/1) operating system, for example the DEC
-Alpha AXP systems. (VMS on the Alpha is not currently supported by GNU
-CC.)
+Alpha AXP systems.CC.)
GNU CC writes a @samp{.verstamp} directive to the assembler output file
unless it is built as a cross-compiler. It gets the version to use from
@@ -759,22 +803,37 @@ To avoid this behavior, specify @samp{-gstabs+} and use GDB instead of
DBX. DEC is now aware of this problem with the assembler and hopes to
provide a fix shortly.
-@item arm
+@item arc-*-elf
+Argonaut ARC processor.
+This configuration is intended for embedded systems.
+
+@item arm-*-aout
Advanced RISC Machines ARM-family processors. These are often used in
embedded applications. There are no standard Unix configurations.
This configuration corresponds to the basic instruction sequences and will
-produce a.out format object modules.
+produce @file{a.out} format object modules.
You may need to make a variant of the file @file{arm.h} for your particular
configuration.
+@item arm-*-linuxaout
+Any of the ARM family processors running the Linux-based GNU system with
+the @file{a.out} binary format (ELF is not yet supported). You must use
+version 2.8.1.0.7 or later of the GNU/Linux binutils, which you can download
+from @file{sunsite.unc.edu:/pub/Linux/GCC} and other mirror sites for
+Linux-based GNU systems.
+
@item arm-*-riscix
-The ARM2 or ARM3 processor running RISC iX, Acorn's port of BSD Unix. If
-you are running a version of RISC iX prior to 1.2 then you must specify
-the version number during configuration. Note that the assembler
-shipped with RISC iX does not support stabs debugging information; a
-new version of the assembler, with stabs support included, is now
-available from Acorn.
+The ARM2 or ARM3 processor running RISC iX, Acorn's port of BSD Unix.
+If you are running a version of RISC iX prior to 1.2 then you must
+specify the version number during configuration. Note that the
+assembler shipped with RISC iX does not support stabs debugging
+information; a new version of the assembler, with stabs support
+included, is now available from Acorn and via ftp
+@file{ftp.acorn.com:/pub/riscix/as+xterm.tar.Z}. To enable stabs
+debugging, pass @samp{--with-gnu-as} to configure.
+
+You will need to install GNU @file{sed} before you can run configure.
@item a29k
AMD Am29k-family processors. These are normally used in embedded
@@ -790,9 +849,10 @@ particular configuration.
AMD Am29050 used in a system running a variant of BSD Unix.
@item decstation-*
-DECstations can support three different personalities: Ultrix,
-DEC OSF/1, and OSF/rose. To configure GCC for these platforms
-use the following configurations:
+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 @samp{alpha-dec}.) To configure GCC
+for these platforms use the following configurations:
@table @samp
@item decstation-ultrix
@@ -848,6 +908,8 @@ output from GNU CC.
@end ignore
@item h8300-*-*
+Hitachi H8/300 series of processors.
+
The calling convention and structure layout has changed in release 2.6.
All code must be recompiled. The calling convention now passes the
first three arguments in function calls in registers. Structures are no
@@ -880,19 +942,19 @@ option before building.
This port is very preliminary and has many known bugs. We hope to
have a higher-quality port for this machine soon.
-@item i386-*-linuxoldld
-Use this configuration to generate a.out binaries on Linux if you do not
-have gas/binutils version 2.5.2 or later installed. This is an obsolete
-configuration.
+@item i386-*-linux-gnuoldld
+Use this configuration to generate @file{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.
-@item i386-*-linuxaout
-Use this configuration to generate a.out binaries on Linux. This configuration
-is being superseded. You must use gas/binutils version 2.5.2 or
-later.
+@item i386-*-linux-gnuaout
+Use this configuration to generate @file{a.out} binaries on Linux-based
+GNU systems. This configuration is being superseded. You must use
+gas/binutils version 2.5.2 or later.
-@item i386-*-linux
-Use this configuration to generate ELF binaries on Linux. You must
-use gas/binutils version 2.5.2 or later.
+@item i386-*-linux-gnu
+Use this configuration to generate ELF binaries on Linux-based GNU
+systems. You must use gas/binutils version 2.5.2 or later.
@item i386-*-sco
Compilation with RCC is recommended. Also, it may be a good idea to
@@ -902,18 +964,20 @@ link with GNU malloc instead of the malloc that comes with the system.
Use this configuration for SCO release 3.2 version 4.
@item i386-*-sco3.2v5*
-Use this for SCO Open Server Release 5.0. GNU CC can generate ELF
-binaries (if you specify @samp{-melf}) or COFF binaries (the default).
-If you are going to build your compiler in ELF mode (once you have
-bootstrapped the first stage compiler) you @strong{must} specify
-@samp{-melf} as part of CC, @emph{not} CFLAGS. You should
-use some variant of: @samp{CC="stage1/xgcc -melf" CFLAGS="-Bstage1/"} etc.
-If you do not do this, the boostrap will generate completely bogus versions
-of libgcc.a generated.
-
-You must have TLS597 (from ftp.sco.com/TLS) installed for ELF
-binaries to work correctly. Note that Open Server 5.0.2 @emph{does}
-need TLS597 installed.
+Use this for the SCO OpenServer Release family including 5.0.0, 5.0.2,
+5.0.4, Internet FastStart 1.0, and Internet FastStart 1.1.
+
+GNU CC can generate either ELF or COFF binaries. ELF is the default.
+To get COFF output, you must specify @samp{-mcoff} on the command line.
+
+For 5.0.0 and 5.0.2, you must install TLS597 from ftp.sco.com/TLS.
+5.0.4 and later do not require this patch.
+
+@emph{NOTE:} You must follow the instructions about invoking
+@samp{make bootstrap} because the native OpenServer compiler builds
+a @file{cc1plus} that will not correctly parse many valid C++ programs.
+You must do a @samp{make bootstrap} if you are building with the native
+compiler.
@item i386-*-isc
It may be a good idea to link with GNU malloc instead of the malloc that
@@ -931,9 +995,7 @@ You need to use GAS version 2.1 or later, and LD from
GNU binutils version 2.2 or later.
@item i386-sequent-bsd
-Go to the Berkeley universe before compiling. In addition, you probably
-need to create a file named @file{string.h} containing just one line:
-@samp{#include <strings.h>}.
+Go to the Berkeley universe before compiling.
@item i386-sequent-ptx1*
Sequent DYNIX/ptx 1.x.
@@ -952,7 +1014,7 @@ See @ref{Sun Install}, for information on installing GNU CC on Sun
systems.
@item i[345]86-*-winnt3.5
-This version requires a GAS that has not let been released. Until it
+This version requires a GAS that has not yet been released. Until it
is, you can get a prebuilt binary version via anonymous ftp from
@file{cs.washington.edu:pub/gnat} or @file{cs.nyu.edu:pub/gnat}. You
must also use the Microsoft header files from the Windows NT 3.5 SDK.
@@ -1017,14 +1079,15 @@ LynxOS 2.2 and earlier comes with GNU CC 1.x already installed as
You can tell GNU CC to use the GNU assembler and linker, by specifying
@samp{--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.
+installed tools, which produce @file{a.out} format executables.
@item m32r-*-elf
-Embedded M32R system.
+Mitsubishi M32R processor.
+This configuration is intended for embedded systems.
@item m68000-hp-bsd
HP 9000 series 200 running BSD. Note that the C compiler that comes
-with this system cannot compile GNU CC; contact @code{law@@cs.utah.edu}
+with this system cannot compile GNU CC; contact @code{law@@cygnus.com}
to get binaries of GNU CC for bootstrapping.
@item m68k-altos
@@ -1057,7 +1120,7 @@ the following procedure might work. We are unable to test it.
@enumerate
@item
-Comment out the @samp{#include "config.h"} line on line 37 of
+Comment out the @samp{#include "config.h"} line near the start of
@file{cccp.c} and do @samp{make cpp}. This makes a preliminary version
of GNU cpp.
@@ -1308,9 +1371,7 @@ and @code{malloc}; you must get the compiled versions of these from GNU
Emacs.
@item ns32k-sequent
-Go to the Berkeley universe before compiling. In addition, you probably
-need to create a file named @file{string.h} containing just one line:
-@samp{#include <strings.h>}.
+Go to the Berkeley universe before compiling.
@item ns32k-utek
UTEK ns32000 system (``merlin''). The C compiler that comes with this
@@ -1336,12 +1397,14 @@ stage3 object files, and errors when compiling @file{libgcc.a} or
xlc-1.3.0.0 (distributed with AIX 3.2.5), and xlc-1.3.0.19. Both
xlc-1.2.1.28 and xlc-1.3.0.24 (PTF 432238) are known to produce working
versions of GNU CC, but most other recent releases correctly bootstrap
-GNU CC. Also, releases of AIX prior to AIX 3.2.4 include a version of
+GNU CC.
+
+Release 4.3.0 of AIX and ones prior to AIX 3.2.4 include a version of
the IBM assembler which does not accept debugging directives: assembler
updates are available as PTFs. Also, if you are using AIX 3.2.5 or
greater and the GNU assembler, you must have a version modified after
October 16th, 1995 in order for the GNU C compiler to build. See the
-file @file{README.RS6000} for more details on of these problems.
+file @file{README.RS6000} for more details on any of these problems.
GNU CC does not yet support the 64-bit PowerPC instructions.
@@ -1378,8 +1441,8 @@ PowerPC system in big endian mode, running System V.4.
You can specify a default version for the @samp{-mcpu=}@var{cpu_type}
switch by using the configure option @samp{--with-cpu-}@var{cpu_type}.
-@item powerpc-*-linux
-PowerPC system in big endian mode, running Linux.
+@item powerpc-*-linux-gnu
+PowerPC system in big endian mode, running the Linux-based GNU system.
You can specify a default version for the @samp{-mcpu=}@var{cpu_type}
switch by using the configure option @samp{--with-cpu-}@var{cpu_type}.
@@ -1893,9 +1956,13 @@ To install the cross-compiler, use @samp{make install}, as usual.
@cindex Sun installation
@cindex installing GNU CC on the Sun
-On Solaris (version 2.1), do not use the linker or other tools in
+On Solaris, do not use the linker or other tools in
@file{/usr/ucb} to build GNU CC. Use @code{/usr/ccs/bin}.
+If the assembler reports @samp{Error: misaligned data} when bootstrapping,
+you are probably using an obsolete version of the GNU assembler. Upgrade
+to the latest version of GNU @code{binutils}, or use the Solaris assembler.
+
Make sure the environment variable @code{FLOAT_OPTION} is not set when
you compile @file{libgcc.a}. If this option were set to @code{f68881}
when @file{libgcc.a} is compiled, the resulting code would demand to be
@@ -1993,8 +2060,8 @@ $ assign /system /translation=concealed -
@noindent
with the appropriate disk and directory name. If you are going to be
-using libg++, this is where the libg++ install procedure will install
-the libg++ header files.
+using a C++ runtime library, this is where its install procedure will install
+its header files.
@item
Obtain the file @file{gcc-cc1plus.exe}, and place this in the same
@@ -2266,7 +2333,7 @@ are already suitable for ANSI C and GNU CC, nothing special need be
done).
@code{GPLUS_INCLUDE_DIR} means the same thing for native and cross. It
-is where @code{g++} looks first for header files. @code{libg++}
+is where @code{g++} looks first for header files. The C++ library
installs only target independent header files in that directory.
@code{LOCAL_INCLUDE_DIR} is used only for a native compiler. It is
diff --git a/gcc/install1.texi b/gcc/install1.texi
new file mode 100644
index 00000000000..21c08b93401
--- /dev/null
+++ b/gcc/install1.texi
@@ -0,0 +1,15 @@
+@setfilename INSTALL
+@set INSTALLONLY
+
+@c This file itself, install1.texi, does not appear in the GCC distribution.
+@c The immediately following lines apply to the INSTALL file
+@c which is generated using this file.
+This file documents the installation of the GNU compiler.
+Copyright (C) 1988, 1989, 1992, 1994, 1995 Free Software Foundation, Inc.
+You may copy, distribute, and modify it freely as long as you preserve
+this copyright notice and permission notice.
+
+@node Installation,,, (dir)
+@chapter Installing GNU CC
+@include install.texi
+@bye
diff --git a/gcc/integrate.c b/gcc/integrate.c
index 217d24b56b0..026de8979a2 100644
--- a/gcc/integrate.c
+++ b/gcc/integrate.c
@@ -1,5 +1,5 @@
/* Procedure integration for GNU CC.
- Copyright (C) 1988, 91, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1988, 91, 93-97, 1998 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com)
This file is part of GNU CC.
@@ -20,9 +20,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <stdio.h>
-
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "tree.h"
#include "regs.h"
@@ -31,6 +30,7 @@ Boston, MA 02111-1307, USA. */
#include "insn-flags.h"
#include "expr.h"
#include "output.h"
+#include "recog.h"
#include "integrate.h"
#include "real.h"
#include "except.h"
@@ -77,6 +77,24 @@ static void set_block_abstract_flags PROTO((tree, int));
void set_decl_abstract_flags PROTO((tree, int));
+/* Returns the Ith entry in the label_map contained in MAP. If the
+ Ith entry has not yet been set, return a fresh label. This function
+ performs a lazy initialization of label_map, thereby avoiding huge memory
+ explosions when the label_map gets very large. */
+
+rtx
+get_label_from_map (map, i)
+ struct inline_remap *map;
+ int i;
+{
+ rtx x = map->label_map[i];
+
+ if (x == NULL_RTX)
+ x = map->label_map[i] = gen_label_rtx();
+
+ return x;
+}
+
/* Zero if the current function (whose FUNCTION_DECL is FNDECL)
is safe and reasonable to integrate into other functions.
Nonzero means value is a warning message with a single %s
@@ -93,9 +111,7 @@ function_cannot_inline_p (fndecl)
register tree parms;
rtx result;
- /* No inlines with varargs. `grokdeclarator' gives a warning
- message about that if `inline' is specified. This code
- it put in to catch the volunteers. */
+ /* No inlines with varargs. */
if ((last && TREE_VALUE (last) != void_type_node)
|| current_function_varargs)
return "varargs function cannot be inline";
@@ -218,7 +234,8 @@ static rtx *insn_map;
static tree *parmdecl_map;
/* Keep track of first pseudo-register beyond those that are parms. */
-static int max_parm_reg;
+extern int max_parm_reg;
+extern rtx *parm_reg_stack_loc;
/* When an insn is being copied by copy_for_inline,
this is nonzero if we have copied an ASM_OPERANDS.
@@ -274,6 +291,14 @@ initialize_for_inline (fndecl, min_labelno, max_labelno, max_reg, copy)
parms = TREE_CHAIN (parms), i++)
{
rtx p = DECL_RTL (parms);
+ int copied_incoming = 0;
+
+ /* If we have (mem (addressof (mem ...))), use the inner MEM since
+ otherwise the copy_rtx call below will not unshare the MEM since
+ it shares ADDRESSOF. */
+ if (GET_CODE (p) == MEM && GET_CODE (XEXP (p, 0)) == ADDRESSOF
+ && GET_CODE (XEXP (XEXP (p, 0), 0)) == MEM)
+ p = XEXP (XEXP (p, 0), 0);
if (GET_CODE (p) == MEM && copy)
{
@@ -289,7 +314,8 @@ initialize_for_inline (fndecl, min_labelno, max_labelno, max_reg, copy)
&& GET_CODE (DECL_INCOMING_RTL (parms)) == MEM
&& (XEXP (DECL_RTL (parms), 0)
== XEXP (DECL_INCOMING_RTL (parms), 0))))
- DECL_INCOMING_RTL (parms) = new;
+ DECL_INCOMING_RTL (parms) = new, copied_incoming = 1;
+
DECL_RTL (parms) = new;
}
@@ -311,6 +337,23 @@ initialize_for_inline (fndecl, min_labelno, max_labelno, max_reg, copy)
/* This flag is cleared later
if the function ever modifies the value of the parm. */
TREE_READONLY (parms) = 1;
+
+ /* Copy DECL_INCOMING_RTL if not done already. This can
+ happen if DECL_RTL is a reg. */
+ if (copy && ! copied_incoming)
+ {
+ p = DECL_INCOMING_RTL (parms);
+
+ /* If we have (mem (addressof (mem ...))), use the inner MEM since
+ otherwise the copy_rtx call below will not unshare the MEM since
+ it shares ADDRESSOF. */
+ if (GET_CODE (p) == MEM && GET_CODE (XEXP (p, 0)) == ADDRESSOF
+ && GET_CODE (XEXP (XEXP (p, 0), 0)) == MEM)
+ p = XEXP (XEXP (p, 0), 0);
+
+ if (GET_CODE (p) == MEM)
+ DECL_INCOMING_RTL (parms) = copy_rtx (p);
+ }
}
/* Assume we start out in the insns that set up the parameters. */
@@ -334,7 +377,7 @@ initialize_for_inline (fndecl, min_labelno, max_labelno, max_reg, copy)
the value of current_function_outgoing_args_size,
the original argument vector,
the original DECL_INITIAL,
- and pointers to the table of psuedo regs, pointer flags, and alignment. */
+ and pointers to the table of pseudo regs, pointer flags, and alignment. */
return gen_inline_header_rtx (NULL_RTX, NULL_RTX, min_labelno, max_labelno,
max_parm_reg, max_reg,
@@ -344,7 +387,8 @@ initialize_for_inline (fndecl, min_labelno, max_labelno, max_reg, copy)
current_function_outgoing_args_size,
arg_vector, (rtx) DECL_INITIAL (fndecl),
(rtvec) regno_reg_rtx, regno_pointer_flag,
- regno_pointer_align);
+ regno_pointer_align,
+ (rtvec) parm_reg_stack_loc);
}
/* Subroutine for `save_for_inline{copying,nocopy}'. Finishes up the
@@ -413,10 +457,7 @@ save_for_inline_copying (fndecl)
int max_uid;
rtx first_nonparm_insn;
char *new, *new1;
-
- /* The pointer used to track the true location of the memory used
- for LABEL_MAP. */
- rtx *real_label_map = NULL_PTR;
+ rtx *new_parm_reg_stack_loc;
/* Make and emit a return-label if we have not already done so.
Do this before recording the bounds on label numbers. */
@@ -439,7 +480,6 @@ save_for_inline_copying (fndecl)
for the parms, prior to elimination of virtual registers.
These values are needed for substituting parms properly. */
- max_parm_reg = max_parm_reg_num ();
parmdecl_map = (tree *) alloca (max_parm_reg * sizeof (tree));
head = initialize_for_inline (fndecl, min_labelno, max_labelno, max_reg, 1);
@@ -519,13 +559,18 @@ save_for_inline_copying (fndecl)
/* We used to use alloca here, but the size of what it would try to
allocate would occasionally cause it to exceed the stack limit and
cause unpredictable core dumps. Some examples were > 2Mb in size. */
- real_label_map
- = (rtx *) xmalloc ((max_labelno - min_labelno) * sizeof (rtx));
- label_map = real_label_map - min_labelno;
+ label_map = (rtx *) xmalloc ((max_labelno) * sizeof (rtx));
for (i = min_labelno; i < max_labelno; i++)
label_map[i] = gen_label_rtx ();
+ /* Likewise for parm_reg_stack_slot. */
+ new_parm_reg_stack_loc = (rtx *) savealloc (max_parm_reg * sizeof (rtx));
+ for (i = 0; i < max_parm_reg; i++)
+ new_parm_reg_stack_loc[i] = copy_for_inline (parm_reg_stack_loc[i]);
+
+ parm_reg_stack_loc = new_parm_reg_stack_loc;
+
/* Record the mapping of old insns to copied insns. */
insn_map = (rtx *) alloca (max_uid * sizeof (rtx));
@@ -664,8 +709,8 @@ save_for_inline_copying (fndecl)
set_new_first_and_last_insn (first_insn, last_insn);
- if (real_label_map)
- free (real_label_map);
+ if (label_map)
+ free (label_map);
}
/* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
@@ -782,7 +827,6 @@ save_for_inline_nocopy (fndecl)
for the parms, prior to elimination of virtual registers.
These values are needed for substituting parms properly. */
- max_parm_reg = max_parm_reg_num ();
parmdecl_map = (tree *) alloca (max_parm_reg * sizeof (tree));
/* Make and emit a return-label if we have not already done so. */
@@ -1140,6 +1184,8 @@ copy_for_inline (orig)
}
break;
#endif
+ default:
+ break;
}
/* Replace this rtx with a copy of itself. */
@@ -1252,7 +1298,7 @@ expand_inline_function (fndecl, parms, target, ignore, type,
/* The pointer used to track the true location of the memory used
for MAP->LABEL_MAP. */
- rtx *real_label_map = NULL_PTR;
+ rtx *real_label_map = 0;
/* Allow for equivalences of the pseudos we make for virtual fp and ap. */
max_regno = MAX_REGNUM (header) + 3;
@@ -1299,10 +1345,6 @@ expand_inline_function (fndecl, parms, target, ignore, type,
parameter declarations. */
pushlevel (0);
- /* Make a fresh binding contour that we can easily remove. */
- pushlevel (0);
- expand_start_bindings (0);
-
/* Expand the function arguments. Do this first so that any
new registers get created before we allocate the maps. */
@@ -1380,7 +1422,7 @@ expand_inline_function (fndecl, parms, target, ignore, type,
arg_vals[i] = copy_to_mode_reg (GET_MODE (loc), arg_vals[i]);
if (arg_vals[i] != 0 && GET_CODE (arg_vals[i]) == REG
- && TREE_CODE (TREE_TYPE (formal)) == POINTER_TYPE)
+ && POINTER_TYPE_P (TREE_TYPE (formal)))
mark_reg_pointer (arg_vals[i],
(TYPE_ALIGN (TREE_TYPE (TREE_TYPE (formal)))
/ BITS_PER_UNIT));
@@ -1398,8 +1440,8 @@ expand_inline_function (fndecl, parms, target, ignore, type,
allocate would occasionally cause it to exceed the stack limit and
cause unpredictable core dumps. */
real_label_map
- = (rtx *) xmalloc ((max_labelno - min_labelno) * sizeof (rtx));
- map->label_map = real_label_map - min_labelno;
+ = (rtx *) xmalloc ((max_labelno) * sizeof (rtx));
+ map->label_map = real_label_map;
map->insn_map = (rtx *) alloca (INSN_UID (header) * sizeof (rtx));
bzero ((char *) map->insn_map, INSN_UID (header) * sizeof (rtx));
@@ -1435,8 +1477,11 @@ expand_inline_function (fndecl, parms, target, ignore, type,
map->const_age = 0;
/* Record the current insn in case we have to set up pointers to frame
- and argument memory blocks. */
+ and argument memory blocks. If there are no insns yet, add a dummy
+ insn that can be used as an insertion point. */
map->insns_at_start = get_last_insn ();
+ if (map->insns_at_start == 0)
+ map->insns_at_start = emit_note (NULL_PTR, NOTE_INSN_DELETED);
map->regno_pointer_flag = INLINE_REGNO_POINTER_FLAG (header);
map->regno_pointer_align = INLINE_REGNO_POINTER_ALIGN (header);
@@ -1662,6 +1707,7 @@ expand_inline_function (fndecl, parms, target, ignore, type,
force_operand (structure_value_addr, NULL_RTX));
map->reg_map[REGNO (XEXP (loc, 0))] = temp;
if ((CONSTANT_P (structure_value_addr)
+ || GET_CODE (structure_value_addr) == ADDRESSOF
|| (GET_CODE (structure_value_addr) == PLUS
&& XEXP (structure_value_addr, 0) == virtual_stack_vars_rtx
&& GET_CODE (XEXP (structure_value_addr, 1)) == CONST_INT))
@@ -1738,9 +1784,15 @@ expand_inline_function (fndecl, parms, target, ignore, type,
else
abort ();
- /* Make new label equivalences for the labels in the called function. */
- for (i = min_labelno; i < max_labelno; i++)
- map->label_map[i] = gen_label_rtx ();
+ /* Make a fresh binding contour that we can easily remove. Do this after
+ expanding our arguments so cleanups are properly scoped. */
+ pushlevel (0);
+ expand_start_bindings (0);
+
+ /* Initialize label_map. get_label_from_map will actually make
+ the labels. */
+ bzero ((char *) &map->label_map [min_labelno],
+ (max_labelno - min_labelno) * sizeof (rtx));
/* Perform postincrements before actually calling the function. */
emit_queue ();
@@ -1933,7 +1985,8 @@ expand_inline_function (fndecl, parms, target, ignore, type,
break;
case CODE_LABEL:
- copy = emit_label (map->label_map[CODE_LABEL_NUMBER (insn)]);
+ copy = emit_label (get_label_from_map (map,
+ CODE_LABEL_NUMBER (insn)));
LABEL_NAME (copy) = LABEL_NAME (insn);
map->const_age++;
break;
@@ -1952,11 +2005,14 @@ expand_inline_function (fndecl, parms, target, ignore, type,
&& NOTE_LINE_NUMBER (insn) != NOTE_INSN_FUNCTION_BEG
&& NOTE_LINE_NUMBER (insn) != NOTE_INSN_DELETED)
{
- copy = emit_note (NOTE_SOURCE_FILE (insn), NOTE_LINE_NUMBER (insn));
- if (copy && (NOTE_LINE_NUMBER (copy) == NOTE_INSN_EH_REGION_BEG
- || NOTE_LINE_NUMBER (copy) == NOTE_INSN_EH_REGION_END))
+ copy = emit_note (NOTE_SOURCE_FILE (insn),
+ NOTE_LINE_NUMBER (insn));
+ if (copy
+ && (NOTE_LINE_NUMBER (copy) == NOTE_INSN_EH_REGION_BEG
+ || NOTE_LINE_NUMBER (copy) == NOTE_INSN_EH_REGION_END))
{
- rtx label = map->label_map[NOTE_BLOCK_NUMBER (copy)];
+ rtx label
+ = get_label_from_map (map, NOTE_BLOCK_NUMBER (copy));
/* We have to forward these both to match the new exception
region. */
@@ -2335,6 +2391,30 @@ copy_rtx_and_substitute (orig, map)
return gen_rtx (SUBREG, GET_MODE (orig), copy,
SUBREG_WORD (orig));
+ case ADDRESSOF:
+ copy = gen_rtx (ADDRESSOF, mode,
+ copy_rtx_and_substitute (XEXP (orig, 0), map));
+ SET_ADDRESSOF_DECL (copy, ADDRESSOF_DECL (orig));
+ regno = ADDRESSOF_REGNO (orig);
+ if (map->reg_map[regno])
+ regno = REGNO (map->reg_map[regno]);
+ else if (regno > LAST_VIRTUAL_REGISTER)
+ {
+ temp = XEXP (orig, 0);
+ map->reg_map[regno] = gen_reg_rtx (GET_MODE (temp));
+ REG_USERVAR_P (map->reg_map[regno]) = REG_USERVAR_P (temp);
+ REG_LOOP_TEST_P (map->reg_map[regno]) = REG_LOOP_TEST_P (temp);
+ RTX_UNCHANGING_P (map->reg_map[regno]) = RTX_UNCHANGING_P (temp);
+ /* A reg with REG_FUNCTION_VALUE_P true will never reach here. */
+
+ if (map->regno_pointer_flag[regno])
+ mark_reg_pointer (map->reg_map[regno],
+ map->regno_pointer_align[regno]);
+ regno = REGNO (map->reg_map[regno]);
+ }
+ ADDRESSOF_REGNO (copy) = regno;
+ return copy;
+
case USE:
case CLOBBER:
/* USE and CLOBBER are ordinary, but we convert (use (subreg foo))
@@ -2347,14 +2427,15 @@ copy_rtx_and_substitute (orig, map)
return gen_rtx (code, VOIDmode, copy);
case CODE_LABEL:
- LABEL_PRESERVE_P (map->label_map[CODE_LABEL_NUMBER (orig)])
+ LABEL_PRESERVE_P (get_label_from_map (map, CODE_LABEL_NUMBER (orig)))
= LABEL_PRESERVE_P (orig);
- return map->label_map[CODE_LABEL_NUMBER (orig)];
+ return get_label_from_map (map, CODE_LABEL_NUMBER (orig));
case LABEL_REF:
copy = gen_rtx (LABEL_REF, mode,
LABEL_REF_NONLOCAL_P (orig) ? XEXP (orig, 0)
- : map->label_map[CODE_LABEL_NUMBER (XEXP (orig, 0))]);
+ : get_label_from_map (map,
+ CODE_LABEL_NUMBER (XEXP (orig, 0))));
LABEL_OUTSIDE_LOOP_P (copy) = LABEL_OUTSIDE_LOOP_P (orig);
/* The fact that this label was previously nonlocal does not mean
@@ -2512,13 +2593,26 @@ copy_rtx_and_substitute (orig, map)
case SET:
/* If this is setting fp or ap, it means that we have a nonlocal goto.
- Don't alter that.
+ Adjust the setting by the offset of the area we made.
If the nonlocal goto is into the current function,
this will result in unnecessarily bad code, but should work. */
if (SET_DEST (orig) == virtual_stack_vars_rtx
|| SET_DEST (orig) == virtual_incoming_args_rtx)
- return gen_rtx (SET, VOIDmode, SET_DEST (orig),
- copy_rtx_and_substitute (SET_SRC (orig), map));
+ {
+ /* In case a translation hasn't occurred already, make one now. */
+ rtx junk = copy_rtx_and_substitute (SET_DEST (orig), map);
+ rtx equiv_reg = map->reg_map[REGNO (SET_DEST (orig))];
+ rtx equiv_loc = map->const_equiv_map[REGNO (equiv_reg)];
+ HOST_WIDE_INT loc_offset
+ = GET_CODE (equiv_loc) == REG ? 0 : INTVAL (XEXP (equiv_loc, 1));
+
+ return gen_rtx (SET, VOIDmode, SET_DEST (orig),
+ force_operand
+ (plus_constant
+ (copy_rtx_and_substitute (SET_SRC (orig), map),
+ - loc_offset),
+ NULL_RTX));
+ }
break;
case MEM:
@@ -2537,6 +2631,9 @@ copy_rtx_and_substitute (orig, map)
RTX_UNCHANGING_P (copy) = RTX_UNCHANGING_P (orig);
return copy;
+
+ default:
+ break;
}
copy = rtx_alloc (code);
@@ -2552,6 +2649,7 @@ copy_rtx_and_substitute (orig, map)
switch (*format_ptr++)
{
case '0':
+ XEXP (copy, i) = XEXP (orig, i);
break;
case 'e':
@@ -2829,9 +2927,11 @@ subst_constants (loc, insn, map)
map->equiv_sets[map->num_sets].equiv = copy_rtx (src);
map->equiv_sets[map->num_sets++].dest = dest;
}
-
- return;
}
+ return;
+
+ default:
+ break;
}
format_ptr = GET_RTX_FORMAT (code);
@@ -2951,9 +3051,13 @@ mark_stores (dest, x)
: regno + HARD_REGNO_NREGS (regno, mode) - 1);
int i;
- for (i = regno; i <= last_reg; i++)
- if (i < global_const_equiv_map_size)
- global_const_equiv_map[i] = 0;
+ /* Ignore virtual stack var or virtual arg register since those
+ are handled separately. */
+ if (regno != VIRTUAL_INCOMING_ARGS_REGNUM
+ && regno != VIRTUAL_STACK_VARS_REGNUM)
+ for (i = regno; i <= last_reg; i++)
+ if (i < global_const_equiv_map_size)
+ global_const_equiv_map[i] = 0;
}
}
@@ -3199,6 +3303,8 @@ output_inline_function (fndecl)
regno_reg_rtx = (rtx *) INLINE_REGNO_REG_RTX (head);
regno_pointer_flag = INLINE_REGNO_POINTER_FLAG (head);
regno_pointer_align = INLINE_REGNO_POINTER_ALIGN (head);
+ max_parm_reg = MAX_PARMREG (head);
+ parm_reg_stack_loc = (rtx *) PARMREG_STACK_LOC (head);
stack_slot_list = STACK_SLOT_LIST (head);
forced_labels = FORCED_LABELS (head);
diff --git a/gcc/integrate.h b/gcc/integrate.h
index b2acf5e5c1d..23e2e561d94 100644
--- a/gcc/integrate.h
+++ b/gcc/integrate.h
@@ -1,5 +1,5 @@
/* Function integration definitions for GNU C-Compiler
- Copyright (C) 1990, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1990, 1995, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -122,6 +122,12 @@ extern void try_constants PROTO((rtx, struct inline_remap *));
extern void mark_stores PROTO((rtx, rtx));
+/* Return the label indicated. */
+extern rtx get_label_from_map PROTO((struct inline_remap *, int));
+
+/* Set the label indicated. */
+#define set_label_in_map(MAP, I, X) ((MAP)->label_map[I] = (X))
+
/* Unfortunately, we need a global copy of const_equiv map for communication
with a function called from note_stores. Be *very* careful that this
is used properly in the presence of recursion. */
diff --git a/gcc/intl/intl-compat.c b/gcc/intl/intl-compat.c
deleted file mode 100644
index 503efa0fa9c..00000000000
--- a/gcc/intl/intl-compat.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
- Library.
- Copyright (C) 1995 Software Foundation, Inc.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libgettext.h"
-
-/* @@ end of prolog @@ */
-
-
-#undef gettext
-#undef dgettext
-#undef dcgettext
-#undef textdomain
-#undef bindtextdomain
-
-
-char *
-bindtextdomain (domainname, dirname)
- const char *domainname;
- const char *dirname;
-{
- return bindtextdomain__ (domainname, dirname);
-}
-
-
-char *
-dcgettext (domainname, msgid, category)
- const char *domainname;
- const char *msgid;
- int category;
-{
- return dcgettext__ (domainname, msgid, category);
-}
-
-
-char *
-dgettext (domainname, msgid)
- const char *domainname;
- const char *msgid;
-{
- return dgettext__ (domainname, msgid);
-}
-
-
-char *
-gettext (msgid)
- const char *msgid;
-{
- return gettext__ (msgid);
-}
-
-
-char *
-textdomain (domainname)
- const char *domainname;
-{
- return textdomain__ (domainname);
-}
diff --git a/gcc/intl/linux-msg.sed b/gcc/intl/linux-msg.sed
deleted file mode 100755
index 5918e720a9a..00000000000
--- a/gcc/intl/linux-msg.sed
+++ /dev/null
@@ -1,100 +0,0 @@
-# po2msg.sed - Convert Uniforum style .po file to Linux style .msg file
-# Copyright (C) 1995 Free Software Foundation, Inc.
-# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-#
-# The first directive in the .msg should be the definition of the
-# message set number. We use always set number 1.
-#
-1 {
- i\
-$set 1 # Automatically created by po2msg.sed
- h
- s/.*/0/
- x
-}
-#
-# Mitch's old catalog format does not allow comments.
-#
-# We copy the original message as a comment into the .msg file.
-#
-/^msgid/ {
- s/msgid[ ]*"//
-#
-# This does not work now with the new format.
-# /"$/! {
-# s/\\$//
-# s/$/ ... (more lines following)"/
-# }
- x
-# The following nice solution is by
-# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
- td
-# Increment a decimal number in pattern space.
-# First hide trailing `9' digits.
- :d
- s/9\(_*\)$/_\1/
- td
-# Assure at least one digit is available.
- s/^\(_*\)$/0\1/
-# Increment the last digit.
- s/8\(_*\)$/9\1/
- s/7\(_*\)$/8\1/
- s/6\(_*\)$/7\1/
- s/5\(_*\)$/6\1/
- s/4\(_*\)$/5\1/
- s/3\(_*\)$/4\1/
- s/2\(_*\)$/3\1/
- s/1\(_*\)$/2\1/
- s/0\(_*\)$/1\1/
-# Convert the hidden `9' digits to `0's.
- s/_/0/g
- x
- G
- s/\(.*\)"\n\([0-9]*\)/$ #\2 Original Message:(\1)/p
-}
-#
-# The .msg file contains, other then the .po file, only the translations
-# but each given a unique ID. Starting from 1 and incrementing by 1 for
-# each message we assign them to the messages.
-# It is important that the .po file used to generate the cat-id-tbl.c file
-# (with po-to-tbl) is the same as the one used here. (At least the order
-# of declarations must not be changed.)
-#
-/^msgstr/ {
- s/msgstr[ ]*"\(.*\)"/# \1/
-# Clear substitution flag.
- tb
-# Append the next line.
- :b
- N
-# Look whether second part is continuation line.
- s/\(.*\n\)"\(.*\)"/\1\2/
-# Yes, then branch.
- ta
- P
- D
-# Note that D includes a jump to the start!!
-# We found a continuation line. But before printing insert '\'.
- :a
- s/\(.*\)\(\n.*\)/\1\\\2/
- P
-# We cannot use D here.
- s/.*\n\(.*\)/\1/
- tb
-}
-d
diff --git a/gcc/intl/po2tbl.sed.in b/gcc/intl/po2tbl.sed.in
deleted file mode 100755
index b3bcca4d730..00000000000
--- a/gcc/intl/po2tbl.sed.in
+++ /dev/null
@@ -1,102 +0,0 @@
-# po2tbl.sed - Convert Uniforum style .po file to lookup table for catgets
-# Copyright (C) 1995 Free Software Foundation, Inc.
-# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-1 {
- i\
-/* Automatically generated by po2tbl.sed from @PACKAGE NAME@.pot. */\
-\
-#if HAVE_CONFIG_H\
-# include <config.h>\
-#endif\
-\
-#include "libgettext.h"\
-\
-const struct _msg_ent _msg_tbl[] = {
- h
- s/.*/0/
- x
-}
-#
-# Write msgid entries in C array form.
-#
-/^msgid/ {
- s/msgid[ ]*\(".*"\)/ {\1/
- tb
-# Append the next line
- :b
- N
-# Look whether second part is continuation line.
- s/\(.*\)"\(\n\)"\(.*"\)/\1\2\3/
-# Yes, then branch.
- ta
-# Because we assume that the input file correctly formed the line
-# just read cannot be again be a msgid line. So it's safe to ignore
-# it.
- s/\(.*\)\n.*/\1/
- bc
-# We found a continuation line. But before printing insert '\'.
- :a
- s/\(.*\)\(\n.*\)/\1\\\2/
- P
-# We cannot use D here.
- s/.*\n\(.*\)/\1/
-# Some buggy seds do not clear the `successful substitution since last ``t'''
-# flag on `N', so we do a `t' here to clear it.
- tb
-# Not reached
- :c
- x
-# The following nice solution is by
-# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
- td
-# Increment a decimal number in pattern space.
-# First hide trailing `9' digits.
- :d
- s/9\(_*\)$/_\1/
- td
-# Assure at least one digit is available.
- s/^\(_*\)$/0\1/
-# Increment the last digit.
- s/8\(_*\)$/9\1/
- s/7\(_*\)$/8\1/
- s/6\(_*\)$/7\1/
- s/5\(_*\)$/6\1/
- s/4\(_*\)$/5\1/
- s/3\(_*\)$/4\1/
- s/2\(_*\)$/3\1/
- s/1\(_*\)$/2\1/
- s/0\(_*\)$/1\1/
-# Convert the hidden `9' digits to `0's.
- s/_/0/g
- x
- G
- s/\(.*\)\n\([0-9]*\)/\1, \2},/
- s/\(.*\)"$/\1/
- p
-}
-#
-# Last line.
-#
-$ {
- i\
-};\
-
- g
- s/0*\(.*\)/int _msg_tbl_length = \1;/p
-}
-d
diff --git a/gcc/intl/xopen-msg.sed b/gcc/intl/xopen-msg.sed
deleted file mode 100755
index b19c0bbd0ec..00000000000
--- a/gcc/intl/xopen-msg.sed
+++ /dev/null
@@ -1,104 +0,0 @@
-# po2msg.sed - Convert Uniforum style .po file to X/Open style .msg file
-# Copyright (C) 1995 Free Software Foundation, Inc.
-# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-#
-# The first directive in the .msg should be the definition of the
-# message set number. We use always set number 1.
-#
-1 {
- i\
-$set 1 # Automatically created by po2msg.sed
- h
- s/.*/0/
- x
-}
-#
-# We copy all comments into the .msg file. Perhaps they can help.
-#
-/^#/ s/^#[ ]*/$ /p
-#
-# We copy the original message as a comment into the .msg file.
-#
-/^msgid/ {
-# Does not work now
-# /"$/! {
-# s/\\$//
-# s/$/ ... (more lines following)"/
-# }
- s/^msgid[ ]*"\(.*\)"$/$ Original Message: \1/
- p
-}
-#
-# The .msg file contains, other then the .po file, only the translations
-# but each given a unique ID. Starting from 1 and incrementing by 1 for
-# each message we assign them to the messages.
-# It is important that the .po file used to generate the cat-id-tbl.c file
-# (with po-to-tbl) is the same as the one used here. (At least the order
-# of declarations must not be changed.)
-#
-/^msgstr/ {
- s/msgstr[ ]*"\(.*\)"/\1/
- x
-# The following nice solution is by
-# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
- td
-# Increment a decimal number in pattern space.
-# First hide trailing `9' digits.
- :d
- s/9\(_*\)$/_\1/
- td
-# Assure at least one digit is available.
- s/^\(_*\)$/0\1/
-# Increment the last digit.
- s/8\(_*\)$/9\1/
- s/7\(_*\)$/8\1/
- s/6\(_*\)$/7\1/
- s/5\(_*\)$/6\1/
- s/4\(_*\)$/5\1/
- s/3\(_*\)$/4\1/
- s/2\(_*\)$/3\1/
- s/1\(_*\)$/2\1/
- s/0\(_*\)$/1\1/
-# Convert the hidden `9' digits to `0's.
- s/_/0/g
- x
-# Bring the line in the format `<number> <message>'
- G
- s/^[^\n]*$/& /
- s/\(.*\)\n\([0-9]*\)/\2 \1/
-# Clear flag from last substitution.
- tb
-# Append the next line.
- :b
- N
-# Look whether second part is a continuation line.
- s/\(.*\n\)"\(.*\)"/\1\2/
-# Yes, then branch.
- ta
- P
- D
-# Note that `D' includes a jump to the start!!
-# We found a continuation line. But before printing insert '\'.
- :a
- s/\(.*\)\(\n.*\)/\1\\\2/
- P
-# We cannot use the sed command `D' here
- s/.*\n\(.*\)/\1/
- tb
-}
-d
diff --git a/gcc/invoke.texi b/gcc/invoke.texi
index c975c357266..c9ac35c2511 100644
--- a/gcc/invoke.texi
+++ b/gcc/invoke.texi
@@ -1,4 +1,4 @@
-@c Copyright (C) 1988, 89, 92, 93, 94, 1995, 1996 Free Software Foundation, Inc.
+@c Copyright (C) 1988,89,92,93,94,95,96,1997 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.
@@ -93,8 +93,8 @@ in the following sections.
@item C Language Options
@xref{C Dialect Options,,Options Controlling C Dialect}.
@smallexample
--ansi -fallow-single-precision -fcond-mismatch -fno-asm
--fno-builtin -fsigned-bitfields -fsigned-char
+-ansi -fallow-single-precision -fcond-mismatch -fno-asm
+-fno-builtin -ffreestanding -fhosted -fsigned-bitfields -fsigned-char
-funsigned-bitfields -funsigned-char -fwritable-strings
-traditional -traditional-cpp -trigraphs
@end smallexample
@@ -103,10 +103,11 @@ in the following sections.
@xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
@smallexample
-fall-virtual -fdollars-in-identifiers -felide-constructors
--fenum-int-equiv -fexternal-templates -ffor-scope -fno-for-scope
--fhandle-signatures -fmemoize-lookups -fno-default-inline -fno-gnu-keywords
--fnonnull-objects -foperator-names -fstrict-prototype
--fthis-is-variable -nostdinc++ -traditional +e@var{n}
+-fenum-int-equiv -fexternal-templates -ffor-scope -fno-for-scope
+-fhandle-signatures -fmemoize-lookups -fname-mangling-version-@var{n}
+-fno-default-inline -fno-gnu-keywords -fnonnull-objects -fguiding-decls
+-foperator-names -fstrict-prototype -fthis-is-variable
+-ftemplate-depth-@var{n} -nostdinc++ -traditional +e@var{n}
@end smallexample
@item Warning Options
@@ -114,23 +115,25 @@ in the following sections.
@smallexample
-fsyntax-only -pedantic -pedantic-errors
-w -W -Wall -Waggregate-return -Wbad-function-cast
--Wcast-align -Wcast-qual -Wchar-subscript -Wcomment
+-Wcast-align -Wcast-qual -Wchar-subscript -Wcomment
-Wconversion -Werror -Wformat
--Wid-clash-@var{len} -Wimplicit -Wimport -Winline
--Wlarger-than-@var{len} -Wmissing-declarations
+-Wid-clash-@var{len} -Wimplicit -Wimplicit-int
+-Wimplicit-function-declarations -Wimport -Winline
+-Wlarger-than-@var{len} -Wmain -Wmissing-declarations
-Wmissing-prototypes -Wnested-externs
--Wno-import -Woverloaded-virtual -Wparentheses
--Wpointer-arith -Wredundant-decls -Wreorder -Wreturn-type -Wshadow
--Wsign-compare -Wstrict-prototypes -Wswitch -Wsynth
+-Wno-import -Wold-style-cast -Woverloaded-virtual -Wparentheses
+-Wpointer-arith -Wredundant-decls -Wreorder -Wreturn-type -Wshadow
+-Wsign-compare -Wstrict-prototypes -Wswitch -Wsynth
-Wtemplate-debugging -Wtraditional -Wtrigraphs
--Wuninitialized -Wunused -Wwrite-strings
+-Wundef -Wuninitialized -Wunused -Wwrite-strings
@end smallexample
@item Debugging Options
@xref{Debugging Options,,Options for Debugging Your Program or GCC}.
@smallexample
-a -ax -d@var{letters} -fpretend-float
--g -g@var{level} -gcoff -gdwarf -gdwarf+
+-fprofile-arcs -ftest-coverage
+-g -g@var{level} -gcoff -gdwarf -gdwarf-1 -gdwarf-1+ -gdwarf-2
-ggdb -gstabs -gstabs+ -gxcoff -gxcoff+
-p -pg -print-file-name=@var{library} -print-libgcc-file-name
-print-prog-name=@var{program} -print-search-dirs -save-temps
@@ -139,11 +142,12 @@ in the following sections.
@item Optimization Options
@xref{Optimize Options,,Options that Control Optimization}.
@smallexample
+-fbranch-probabilities
-fcaller-saves -fcse-follow-jumps -fcse-skip-blocks
-fdelayed-branch -fexpensive-optimizations
-ffast-math -ffloat-store -fforce-addr -fforce-mem
--ffunction-sections -finline-functions
--fkeep-inline-functions -fno-default-inline
+-ffunction-sections -finline-functions
+-fkeep-inline-functions -fno-default-inline
-fno-defer-pop -fno-function-cse
-fno-inline -fno-peephole -fomit-frame-pointer
-frerun-cse-after-loop -fschedule-insns
@@ -184,7 +188,7 @@ in the following sections.
@item Directory Options
@xref{Directory Options,,Options for Directory Search}.
@smallexample
--B@var{prefix} -I@var{dir} -I- -L@var{dir}
+-B@var{prefix} -I@var{dir} -I- -L@var{dir} -specs=@var{file}
@end smallexample
@item Target Options
@@ -198,21 +202,23 @@ in the following sections.
@xref{Submodel Options,,Hardware Models and Configurations}.
@smallexample
@emph{M680x0 Options}
--m68000 -m68020 -m68020-40 -m68030 -m68040 -m68060
--m5200 -m68881 -mbitfield -mc68000 -mc68020 -mfpa
--mnobitfield -mrtd -mshort -msoft-float
+-m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040
+-m68060 -m5200 -m68881 -mbitfield -mc68000 -mc68020 -mfpa
+-mnobitfield -mrtd -mshort -msoft-float -malign-int
@emph{VAX Options}
-mg -mgnu -munix
@emph{SPARC Options}
--mcpu=@var{cpu type}
--mtune=@var{cpu type}
+-mcpu=@var{cpu type}
+-mtune=@var{cpu type}
+-mcmodel=@var{code model}
+-malign-jumps=@var{num} -malign-loops=@var{num}
+-malign-functions=@var{num}
+-m32 -m64
-mapp-regs -mbroken-saverestore -mcypress -mepilogue
--mflat -mfpu -mfullany -mhard-float -mhard-quad-float
--mimpure-text -mint32 -mint64 -mlive-g0
--mlong32 -mlong64 -mmedlow -mmedany
--mno-app-regs -mno-epilogue
+-mflat -mfpu -mhard-float -mhard-quad-float
+-mimpure-text -mlive-g0 -mno-app-regs -mno-epilogue
-mno-flat -mno-fpu -mno-impure-text
-mno-stack-bias -mno-unaligned-doubles
-msoft-float -msoft-quad-float -msparclite -mstack-bias
@@ -233,11 +239,19 @@ in the following sections.
-mstorem-bug -muser-registers
@emph{ARM Options}
--mapcs-frame -mapcs-26 -mapcs-32
--mlittle-endian -mbig-endian -mwords-little-endian
--mshort-load-bytes -mno-short-load-bytes
--msoft-float -mhard-float
--mbsd -mxopen -mno-symrename
+-mapcs-frame -mapcs-26 -mapcs-32
+-mlittle-endian -mbig-endian -mwords-little-endian
+-mshort-load-bytes -mno-short-load-bytes
+-msoft-float -mhard-float
+-mbsd -mxopen -mno-symrename
+
+@emph{MN10300 Options}
+-mmult-bug
+-mno-mult-bug
+
+@emph{M32R/D Options}
+-mcode-model=@var{model type} -msdata=@var{sdata type}
+-G @var{num}
@emph{M88K Options}
-m88000 -m88100 -m88110 -mbig-pic
@@ -252,23 +266,25 @@ in the following sections.
-mversion-03.00 -mwarn-passed-structs
@emph{RS/6000 and PowerPC Options}
--mcpu=@var{cpu type}
--mtune=@var{cpu type}
+-mcpu=@var{cpu type}
+-mtune=@var{cpu type}
-mpower -mno-power -mpower2 -mno-power2
-mpowerpc -mno-powerpc
-mpowerpc-gpopt -mno-powerpc-gpopt
-mpowerpc-gfxopt -mno-powerpc-gfxopt
-mnew-mnemonics -mno-new-mnemonics
-mfull-toc -mminimal-toc -mno-fop-in-toc -mno-sum-in-toc
--mxl-call -mno-xl-call
+-mxl-call -mno-xl-call -mthreads -mpe
-msoft-float -mhard-float -mmultiple -mno-multiple
--mstring -mno-string -mbit-align -mno-bit-align
+-mstring -mno-string -mupdate -mno-update
+-mfused-madd -mno-fused-madd -mbit-align -mno-bit-align
-mstrict-align -mno-strict-align -mrelocatable
-mno-relocatable -mrelocatable-lib -mno-relocatable-lib
-mtoc -mno-toc -mtraceback -mno-traceback
-mlittle -mlittle-endian -mbig -mbig-endian
-mcall-aix -mcall-sysv -mprototype -mno-prototype
--msim -mmvme -memb -msdata -msdata=@var{opt} -G @var{num}
+-msim -mmvme -mads -myellowknife -memb
+-msdata -msdata=@var{opt} -G @var{num}
@emph{RT Options}
-mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs
@@ -276,35 +292,38 @@ in the following sections.
-mminimum-fp-blocks -mnohc-struct-return
@emph{MIPS Options}
--mabicalls -mcpu=@var{cpu type} -membedded-data
+-mabicalls -mcpu=@var{cpu type} -membedded-data
-membedded-pic -mfp32 -mfp64 -mgas -mgp32 -mgp64
--mgpopt -mhalf-pic -mhard-float -mint64 -mips1
--mips2 -mips3 -mlong64 -mlong-calls -mmemcpy
+-mgpopt -mhalf-pic -mhard-float -mint64 -mips1
+-mips2 -mips3 -mlong64 -mlong-calls -mmemcpy
-mmips-as -mmips-tfile -mno-abicalls
-mno-embedded-data -mno-embedded-pic
-mno-gpopt -mno-long-calls
-mno-memcpy -mno-mips-tfile -mno-rnames -mno-stats
--mrnames -msoft-float
--m4650 -msingle-float -mmad
+-mrnames -msoft-float
+-m4650 -msingle-float -mmad
-mstats -EL -EB -G @var{num} -nocpp
@emph{i386 Options}
--m486 -m386 -mieee-fp -mno-fancy-math-387
+-mcpu=@var{cpu type}
+-march=@var{cpu type}
+-mieee-fp -mno-fancy-math-387
-mno-fp-ret-in-387 -msoft-float -msvr3-shlib
--mno-wide-multiply -mrtd -malign-double
--mreg-alloc=@var{list} -mregparm=@var{num}
--malign-jumps=@var{num} -malign-loops=@var{num}
+-mno-wide-multiply -mrtd -malign-double
+-mreg-alloc=@var{list} -mregparm=@var{num}
+-malign-jumps=@var{num} -malign-loops=@var{num}
-malign-functions=@var{num}
@emph{HPPA Options}
--mdisable-fpregs -mdisable-indexing -mfast-indirect-calls
--mgas -mjump-in-delay -mlong-load-store -mno-disable-fpregs
--mno-disable-indexing -mno-fast-indirect-calls -mno-gas
+-mbig-switch -mdisable-fpregs -mdisable-indexing -mfast-indirect-calls
+-mgas -mjump-in-delay -mlong-load-store -mno-big-switch -mno-disable-fpregs
+-mno-disable-indexing -mno-fast-indirect-calls -mno-gas
-mno-jump-in-delay
-mno-long-load-store
--mno-portable-runtime -mno-soft-float -mno-space -mno-space-regs -msoft-float
+-mno-portable-runtime -mno-soft-float -mno-space -mno-space-regs
+-msoft-float
-mpa-risc-1-0 -mpa-risc-1-1 -mportable-runtime
--mschedule=@var{list} -mspace -mspace-regs
+-mschedule=@var{list} -mspace -mspace-regs
@emph{Intel 960 Options}
-m@var{cpu type} -masm-compat -mclean-linkage
@@ -317,23 +336,31 @@ in the following sections.
-mtail-call
@emph{DEC Alpha Options}
--mfp-regs -mno-fp-regs
--mno-soft-float -msoft-float
--mieee -mieee-with-inexact -mieee-conformant
--mfp-trap-mode -mfp-rounding-mode -mtrap-precision
--mbuild-constants
+-mfp-regs -mno-fp-regs -mno-soft-float -msoft-float
+-malpha-as -mgas
+-mieee -mieee-with-inexact -mieee-conformant
+-mfp-trap-mode=@var{mode} -mfp-rounding-mode=@var{mode}
+-mtrap-precision=@var{mode} -mbuild-constants
+-mcpu=@var{cpu type}
+-mbwx -mno-bwx -mcix -mno-cix -mmax -mno-max
@emph{Clipper Options}
--mc300 -mc400
+-mc300 -mc400
@emph{H8/300 Options}
--mrelax -mh -mint32 -malign-300
+-mrelax -mh -ms -mint32 -malign-300
@emph{SH Options}
-m1 -m2 -m3 -m3e -mb -ml -mrelax
@emph{System V Options}
-Qy -Qn -YP,@var{paths} -Ym,@var{dir}
+
+@emph{V850 Options}
+-mlong-calls -mno-long-calls -mep -mno-ep
+-mprolog-function -mno-prolog-function -mspace
+-mtda=@var{n} -msda=@var{n} -mzda=@var{n}
+-mv850 -mbig-switch
@end smallexample
@item Code Generation Options
@@ -341,11 +368,12 @@ in the following sections.
@smallexample
-fcall-saved-@var{reg} -fcall-used-@var{reg}
-ffixed-@var{reg} -finhibit-size-directive
+-fcheck-memory-usage -fprefix-function-name
-fno-common -fno-ident -fno-gnu-linker
--fpcc-struct-return -fpic -fPIC
--freg-struct-return -fshared-data -fshort-enums
--fshort-double -fvolatile -fvolatile-global
--fverbose-asm -fpack-struct +e0 +e1
+-fpcc-struct-return -freg-struct-return
+-fshared-data -fpic -fPIC -fexceptions
+-fshort-enums -fshort-double -fvolatile -fvolatile-global
+-fverbose-asm -fpack-struct -fstack-check +e0 +e1
@end smallexample
@end table
@@ -516,8 +544,8 @@ compiler that understands the C++ language---and under some
circumstances, you might want to compile programs from standard input,
or otherwise without a suffix that flags them as C++ programs.
@code{g++} is a program that calls GNU CC with the default language
-set to C++, and automatically specifies linking against the GNU class
-library libg++.
+set to C++, and automatically specifies linking against the C++
+library.
@cindex @code{g++ 1.@var{xx}}
@cindex @code{g++}, separate compiler
@cindex @code{g++} older version
@@ -558,8 +586,8 @@ This turns off certain features of GNU C that are incompatible with ANSI
C, such as the @code{asm}, @code{inline} and @code{typeof} keywords, and
predefined macros such as @code{unix} and @code{vax} that identify the
type of system you are using. It also enables the undesirable and
-rarely used ANSI trigraph feature, disallows @samp{$} as part of
-identifiers, and disables recognition of C++ style @samp{//} comments.
+rarely used ANSI trigraph feature, and it disables recognition of C++
+style @samp{//} comments.
The alternate keywords @code{__asm__}, @code{__extension__},
@code{__inline__} and @code{__typeof__} continue to work despite
@@ -628,6 +656,24 @@ The @samp{-ansi} option prevents @code{alloca} and @code{ffs} from being
builtin functions, since these functions do not have an ANSI standard
meaning.
+@item -fhosted
+@cindex hosted environment
+
+Assert that compilation takes place in a hosted environment. This implies
+@samp{-fbuiltin}. A hosted environment is one in which the
+entire standard library is available, and in which @code{main} has a return
+type of @code{int}. Examples are nearly everything except a kernel.
+This is equivalent to @samp{-fno-freestanding}.
+
+@item -ffreestanding
+@cindex hosted environment
+
+Assert that compilation takes place in a freestanding environment. This
+implies @samp{-fno-builtin}. A freestanding environment
+is one in which the standard library may not exist, and program startup may
+not necessarily be at @code{main}. The most obvious example is an OS kernel.
+This is equivalent to @samp{-fno-hosted}.
+
@item -trigraphs
Support ANSI C trigraphs. You don't want to know about this
brain-damage. The @samp{-ansi} option implies @samp{-trigraphs}.
@@ -888,13 +934,17 @@ Cause template instantiations to obey @samp{#pragma interface} and
to the location of the template definition. @xref{Template
Instantiation}, for more information.
+This option is deprecated.
+
@item -falt-external-templates
Similar to -fexternal-templates, but template instances are emitted or
not according to the place where they are first instantiated.
@xref{Template Instantiation}, for more information.
+This option is deprecated.
+
@item -ffor-scope
-@item -fno-for-scope
+@itemx -fno-for-scope
If -ffor-scope is specified, the scope of variables declared in
a @i{for-init-statement} is limited to the @samp{for} loop itself,
as specified by the draft C++ standard.
@@ -915,6 +965,18 @@ words as identifiers. You can use the keywords @code{__classof__},
@code{__typeof__} instead. @samp{-ansi} implies
@samp{-fno-gnu-keywords}.
+@item -fguiding-decls
+Treat a function declaration with the same type as a potential function
+template instantiation as though it declares that instantiation, not a
+normal function. If a definition is given for the function later in the
+translation unit (or another translation unit if the target supports
+weak symbols), that definition will be used; otherwise the template will
+be instantiated. This behavior reflects the C++ language prior to
+September 1996, when guiding declarations were removed.
+
+This option implies @samp{-fname-mangling-version-0}, and will not work
+with other name mangling versions.
+
@item -fno-implicit-templates
Never emit code for templates which are instantiated implicitly (i.e. by
use); only emit code for explicit instantiations. @xref{Template
@@ -931,7 +993,7 @@ Support virtual function calls for objects that exceed the size
representable by a @samp{short int}. Users should not use this flag by
default; if you need to use it, the compiler will tell you so. If you
compile any of your code with this flag, you must compile @emph{all} of
-your code with this flag (including libg++, if you use it).
+your code with this flag (including the C++ library, if you use it).
This flag is not useful when compiling with -fvtable-thunks.
@@ -992,6 +1054,17 @@ overridden with @samp{-fno-strict-prototype}.
This flag no longer affects declarations with C++ linkage.
+@item -fname-mangling-version-@var{n}
+Control the way in which names are mangled. Version 0 is compatible
+with versions of g++ before 2.8. Version 1 is the default. Version 1
+will allow correct mangling of function templates. For example,
+version 0 mangling does not mangle foo<int, double> and foo<int, char>
+given this declaration:
+
+@example
+template <class T, class U> void foo(T t);
+@end example
+
@item -fno-nonnull-objects
Don't assume that a reference is initialized to refer to a valid object.
Although the current C++ Working Paper prohibits null references, some
@@ -1029,10 +1102,16 @@ vtables; if a class has any non-inline virtual functions, the vtable
will be emitted in the translation unit containing the first one of
those.
+@item -ftemplate-depth-@var{n}
+Set the maximum instantiation depth for template classes to @var{n}.
+A limit on the template instantiation depth is needed to detect
+endless recursions during template class instantiation. ANSI/ISO C++
+conforming programs must not rely on a maximum depth greater than 17.
+
@item -nostdinc++
Do not search for header files in the standard directories specific to
C++, but do still search the other standard directories. (This option
-is used when building libg++.)
+is used when building the C++ library.)
@item -traditional
For C++ programs (in addition to the effects that apply to both C and
@@ -1048,11 +1127,15 @@ have meanings only for C++ programs:
Do not assume @samp{inline} for functions defined inside a class scope.
@xref{Optimize Options,,Options That Control Optimization}.
-@item -Woverloaded-virtual
+@item -Wold-style-cast
+@itemx -Woverloaded-virtual
@itemx -Wtemplate-debugging
Warnings that apply only to C++ programs. @xref{Warning
Options,,Options to Request or Suppress Warnings}.
+@item -Weffc++
+Warn about violation of some style rules from Effective C++ by Scott Myers.
+
@item +e@var{n}
Control how virtual function definitions are used, in a fashion
compatible with @code{cfront} 1.x. @xref{Code Gen Options,,Options for
@@ -1142,15 +1225,61 @@ Check calls to @code{printf} and @code{scanf}, etc., to make sure that
the arguments supplied have types appropriate to the format string
specified.
+@item -Wimplicit-int
+Warn when a declaration does not specify a type.
+
+@item -Wimplicit-function-declarations
+Warn whenever a function is used before being declared.
+
@item -Wimplicit
-Warn whenever a function or parameter is implicitly declared.
+Same as @samp{-Wimplicit-int} @samp{-Wimplicit-function-declaration}.
+@item -Wmain
+Warn if the type of @samp{main} is suspicious. @samp{main} should be a
+function with external linkage, returning int, taking either zero
+arguments, two, or three arguments of appropriate types.
+
@item -Wparentheses
Warn if parentheses are omitted in certain contexts, such
as when there is an assignment in a context where a truth value
is expected, or when operators are nested whose precedence people
often get confused about.
+Also warn about constructions where there may be confusion to which
+@code{if} statement an @code{else} branch belongs. Here is an example of
+such a case:
+
+@smallexample
+@{
+ if (a)
+ if (b)
+ foo ();
+ else
+ bar ();
+@}
+@end smallexample
+
+In C, every @code{else} branch belongs to the innermost possible @code{if}
+statement, which in this example is @code{if (b)}. This is often not
+what the programmer expected, as illustrated in the above example by
+indentation the programmer chose. When there is the potential for this
+confusion, GNU C will issue a warning when this flag is specified.
+To eliminate the warning, add explicit braces around the innermost
+@code{if} statement so there is no way the @code{else} could belong to
+the enclosing @code{if}. The resulting code would look like this:
+
+@smallexample
+@{
+ if (a)
+ @{
+ if (b)
+ foo ();
+ else
+ bar ();
+ @}
+@}
+@end smallexample
+
@item -Wreturn-type
Warn whenever a function is defined with a return-type that defaults
to @code{int}. Also warn about any @code{return} statement with no
@@ -1172,6 +1301,9 @@ whenever a function is declared static but never defined, whenever a
label is declared but not used, and whenever a statement computes a
result that is explicitly not used.
+In order to get a warning about an unused function parameter, you must
+specify both @samp{-W} and @samp{-Wunused}.
+
To suppress this warning for an expression, simply cast it to void. For
unused variables and parameters, use the @samp{unused} attribute
(@pxref{Variable Attributes}).
@@ -1254,13 +1386,6 @@ Here the compiler will warn that the member initializers for @samp{i}
and @samp{j} will be rearranged to match the declaration order of the
members.
-@item -Wsign-compare
-@cindex warning for comparison of signed and unsigned values
-@cindex comparison of signed and unsigned values, warning
-@cindex signed and unsigned values, comparison warning
-Warn when a comparison between signed and unsigned values could produce
-an incorrect result when the signed value is converted to unsigned.
-
@item -Wtemplate-debugging
@cindex template debugging
When using templates in a C++ program, warn if debugging is not yet
@@ -1337,6 +1462,11 @@ If @samp{-Wall} or @samp{-Wunused} is also specified, warn about unused
arguments.
@item
+A comparison between signed and unsigned values could produce an
+incorrect result when the signed value is converted to unsigned.
+(But do not warn if @samp{-Wno-sign-compare} is also specified.)
+
+@item
An aggregate has a partly bracketed initializer.
For example, the following code would evoke such a warning,
because braces are missing around the initializer for @code{x.h}:
@@ -1366,6 +1496,9 @@ the block.
A @code{switch} statement has an operand of type @code{long}.
@end itemize
+@item -Wundef
+Warn if an undefined identifier is evaluated in an @samp{#if} directive.
+
@item -Wshadow
Warn whenever a local variable shadows another local variable.
@@ -1419,6 +1552,15 @@ converted to an unsigned type. For example, warn about the assignment
@code{x = -1} if @code{x} is unsigned. But do not warn about explicit
casts like @code{(unsigned) -1}.
+@item -Wsign-compare
+@cindex warning for comparison of signed and unsigned values
+@cindex comparison of signed and unsigned values, warning
+@cindex signed and unsigned values, comparison warning
+Warn when a comparison between signed and unsigned values could produce
+an incorrect result when the signed value is converted to unsigned.
+This warning is also enabled by @samp{-W}; to get the other warnings
+of @samp{-W} without this warning, use @samp{-W -Wno-sign-compare}.
+
@item -Waggregate-return
Warn if any functions that return structures or unions are defined or
called. (In languages where you can return an array, this also elicits
@@ -1453,6 +1595,9 @@ Warn if an @code{extern} declaration is encountered within an function.
Warn if a function can not be inlined, and either it was declared as inline,
or else the @samp{-finline-functions} option was given.
+@item -Wold-style-cast
+Warn if an old-style (C-style) cast is used within a program.
+
@item -Woverloaded-virtual
@cindex overloaded virtual fn, warning
@cindex warning for overloaded virtual fn
@@ -1510,7 +1655,7 @@ makes debugging work better in GDB but will probably make other debuggers
crash or
refuse to read the program. If you want to control for certain whether
to generate the extra information, use @samp{-gstabs+}, @samp{-gstabs},
-@samp{-gxcoff+}, @samp{-gxcoff}, @samp{-gdwarf+}, or @samp{-gdwarf}
+@samp{-gxcoff+}, @samp{-gxcoff}, @samp{-gdwarf-1+}, or @samp{-gdwarf-1}
(see below).
Unlike most other C compilers, GNU CC allows you to use @samp{-g} with
@@ -1528,8 +1673,10 @@ The following options are useful when GNU CC is generated with the
capability for more than one debugging format.
@item -ggdb
-Produce debugging information in the native format (if that is supported),
-including GDB extensions if at all possible.
+Produce debugging information for use by GDB. This means to use the
+most expressive format available (DWARF 2, stabs, or the native format
+if neither of those are supported), including GDB extensions if at all
+possible.
@item -gstabs
Produce debugging information in stabs format (if that is supported),
@@ -1561,14 +1708,19 @@ refuse to read the program, and may cause assemblers other than the GNU
assembler (GAS) to fail with an error.
@item -gdwarf
-Produce debugging information in DWARF format (if that is supported).
-This is the format used by SDB on most System V Release 4 systems.
+Produce debugging information in DWARF version 1 format (if that is
+supported). This is the format used by SDB on most System V Release 4
+systems.
@item -gdwarf+
-Produce debugging information in DWARF format (if that is supported),
-using GNU extensions understood only by the GNU debugger (GDB). The
-use of these extensions is likely to make other debuggers crash or
-refuse to read the program.
+Produce debugging information in DWARF version 1 format (if that is
+supported), using GNU extensions understood only by the GNU debugger
+(GDB). The use of these extensions is likely to make other debuggers
+crash or refuse to read the program.
+
+@item -gdwarf-2
+Produce debugging information in DWARF version 2 format (if that is
+supported). This is the format used by DBX on IRIX 6.
@item -g@var{level}
@itemx -ggdb@var{level}
@@ -1576,6 +1728,7 @@ refuse to read the program.
@itemx -gcoff@var{level}
@itemx -gxcoff@var{level}
@itemx -gdwarf@var{level}
+@itemx -gdwarf-2@var{level}
Request debugging information and also use @var{level} to specify how
much information. The default level is 2.
@@ -1624,7 +1777,7 @@ and (optionally) the complete sequence of basic blocks being executed.
The output is appended to file @file{bb.out}.
You can examine different profiling aspects without recompilation. Your
-execuable will read a list of function names from file @file{bb.in}.
+executable will read a list of function names from file @file{bb.in}.
Profiling starts when a function on the list is entered and stops when
that invocation is exited. To exclude a function from profiling, prefix
its name with `-'. If a function name is not unique, you can
@@ -1688,6 +1841,58 @@ to return instructions is added to the trace. The trace becomes: 0 3 1
written to @file{bbtrace.gz}. It is solely used for counting jump
frequencies.
+@item -fprofile-arcs
+Instrument @dfn{arcs} during compilation. For each function of your
+program, GNU CC creates a program flow graph, then finds a spanning tree
+for the graph. Only arcs that are not on the spanning tree have to be
+instrumented: the compiler adds code to count the number of times that these
+arcs are executed. When an arc is the only exit or only entrance to a
+block, the instrumentation code can be added to the block; otherwise, a
+new basic block must be created to hold the instrumentation code.
+
+Since not every arc in the program must be instrumented, programs
+compiled with this option run faster than programs compiled with
+@samp{-a}, which adds instrumentation code to every basic block in the
+program. The tradeoff: since @code{gcov} does not have
+execution counts for all branches, it must start with the execution
+counts for the instrumented branches, and then iterate over the program
+flow graph until the entire graph has been solved. Hence, @code{gcov}
+runs a little more slowly than a program which uses information from
+@samp{-a}.
+
+@samp{-fprofile-arcs} also makes it possible to estimate branch
+probabilities, and to calculate basic block execution counts. In
+general, basic block execution counts do not give enough information to
+estimate all branch probabilities. When the compiled program exits, it
+saves the arc execution counts to a file called
+@file{@var{sourcename}.da}. Use the compiler option
+@samp{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
+Control Optimization}) when recompiling, to optimize using estimated
+branch probabilities.
+
+@need 2000
+@item -ftest-coverage
+Create data files for the @code{gcov} code-coverage utility
+(@pxref{Gcov,, @code{gcov}: a GNU CC Test Coverage Program}).
+The data file names begin with the name of your source file:
+
+@table @code
+@item @var{sourcename}.bb
+A mapping from basic blocks to line numbers, which @code{gcov} uses to
+associate basic block execution counts with line numbers.
+
+@item @var{sourcename}.bbg
+A list of all arcs in the program flow graph. This allows @code{gcov}
+to reconstruct the program flow graph, so that it can compute all basic
+block and arc execution counts from the information in the
+@code{@var{sourcename}.da} file (this last file is the output from
+@samp{-fprofile-arcs}).
+@end table
+
+@item -Q
+Makes the compiler print out each function name as it is compiled, and
+print some statistics about each pass when it finishes.
+
@item -d@var{letters}
Says to make debugging dumps during compilation at times specified by
@var{letters}. This is used for debugging the compiler. The file names
@@ -1716,11 +1921,15 @@ Dump after first jump optimization, to @file{@var{file}.jump}.
@item s
Dump after CSE (including the jump optimization that sometimes
follows CSE), to @file{@var{file}.cse}.
+@item D
+Dump after purging ADDRESSOF, to @file{@var{file}.addressof}.
@item L
Dump after loop optimization, to @file{@var{file}.loop}.
@item t
Dump after the second CSE pass (including the jump optimization that
sometimes follows CSE), to @file{@var{file}.cse2}.
+@item b
+Dump after computing branch probabilities, to @file{@var{file}.bp}.
@item f
Dump after flow analysis, to @file{@var{file}.flow}.
@item c
@@ -2078,6 +2287,23 @@ implies @samp{-fstrength-reduce} as well as @samp{-frerun-cse-after-loop}.
@item -fno-peephole
Disable any machine-specific peephole optimizations.
+
+@item -fbranch-probabilities
+After running a program compiled with @samp{-fprofile-arcs}
+(@pxref{Debugging Options,, Options for Debugging Your Program or
+@code{gcc}}), you can compile it a second time using
+@samp{-fbranch-probabilities}, to improve optimizations based on
+guessing the path a branch might take.
+
+@ifset INTERNALS
+With @samp{-fbranch-probabilities}, GNU CC puts a @samp{REG_EXEC_COUNT}
+note on the first instruction of each basic block, and a
+@samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
+These can be used to improve optimization. Currently, they are only
+used in one place: in @file{reorg.c}, instead of guessing which path a
+branch is mostly to take, the @samp{REG_BR_PROB} values are used to
+exactly determine which path is taken more often.
+@end ifset
@end table
@node Preprocessor Options
@@ -2412,9 +2638,9 @@ libraries and for parts of the compiler:
@table @code
@item -I@var{dir}
-Add the directory @var{directory} to the head of the list of directories
-to be searched for header files. This can be used to override a system
-header file, substituting your own version, since these directories are
+Add the directory @var{dir} to the head of the list of directories to be
+searched for header files. This can be used to override a system header
+file, substituting your own version, since these directories are
searched before the system header file directories. If you use more
than one @samp{-I} option, the directories are scanned in left-to-right
order; the standard system directories come after.
@@ -2477,6 +2703,14 @@ out of the link if it is not found by those means.
Another way to specify a prefix much like the @samp{-B} prefix is to use
the environment variable @code{GCC_EXEC_PREFIX}. @xref{Environment
Variables}.
+
+@item -specs=@var{file}
+Process @var{file} after the compiler reads in the standard @file{specs}
+file, in order to override the defaults that the @file{gcc} driver
+program uses when determining what switches to pass to @file{cc1},
+@file{cc1plus}, @file{as}, @file{ld}, etc. More than one
+@samp{-specs=}@var{file} can be specified on the command line, and they
+are processed in order, from left to right.
@end table
@node Target Options
@@ -2594,6 +2828,8 @@ that macro, which enables you to change the defaults.
* Convex Options::
* AMD29K Options::
* ARM Options::
+* MN10300 Options::
+* M32R/D Options::
* M88K Options::
* RS/6000 and PowerPC Options::
* RT Options::
@@ -2606,6 +2842,7 @@ that macro, which enables you to change the defaults.
* H8/300 Options::
* SH Options::
* System V Options::
+* V850 Options::
@end menu
@node M680x0 Options
@@ -2664,6 +2901,12 @@ This results in code which can run relatively efficiently on either a
68020/68881 or a 68030 or a 68040. The generated code does use the
68881 instructions that are emulated on the 68040.
+@item -m68020-60
+Generate output for a 68060, without using any of the new instructions.
+This results in code which can run relatively efficiently on either a
+68020/68881 or a 68030 or a 68040. The generated code does use the
+68881 instructions that are emulated on the 68060.
+
@item -mfpa
Generate output containing Sun FPA instructions for floating point.
@@ -2710,6 +2953,19 @@ harmlessly ignored.)
The @code{rtd} instruction is supported by the 68010, 68020, 68030,
68040, and 68060 processors, but not by the 68000 or 5200.
+
+@item -malign-int
+@itemx -mno-align-int
+Control whether GNU CC aligns @code{int}, @code{long}, @code{long long},
+@code{float}, @code{double}, and @code{long double} variables on a 32-bit
+boundary (@samp{-malign-int}) or a 16-bit boundary (@samp{-mno-align-int}).
+Aligning variables on 32-bit boundaries produces code that runs somewhat
+faster on processors with 32-bit busses at the expense of more memory.
+
+@strong{Warning:} if you use the @samp{-malign-int} switch, GNU CC will
+align structures containing the above types differently than
+most published application binary interface specifications for the m68k.
+
@end table
@node VAX Options
@@ -2853,19 +3109,49 @@ These options are deprecated and will be deleted in GNU CC 2.9.
They have been replaced with @samp{-mcpu=xxx}.
@item -mcpu=@var{cpu_type}
-Set architecture type and instruction scheduling parameters for machine
-type @var{cpu_type}. Supported values for @var{cpu_type} are
-@samp{common}, @samp{cypress}, @samp{v8}, @samp{supersparc},
-@samp{sparclite}, @samp{f930}, @samp{f934},
-@samp{sparclet}, @samp{90c701}, @samp{v8plus}, @samp{v9},
-and @samp{ultrasparc}. Specifying @samp{v9} is only supported on true
-64 bit targets.
+Set the instruction set, register set, and instruction scheduling parameters
+for machine type @var{cpu_type}. Supported values for @var{cpu_type} are
+@samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite},
+@samp{f930}, @samp{f934}, @samp{sparclet}, @samp{tsc701}, @samp{v9}, and
+@samp{ultrasparc}.
+
+Default instruction scheduling parameters are used for values that select
+an architecture and not an implementation. These are @samp{v7}, @samp{v8},
+@samp{sparclite}, @samp{sparclet}, @samp{v9}.
+
+Here is a list of each supported architecture and their supported
+implementations.
+
+@smallexample
+ v7: cypress
+ v8: supersparc
+ sparclite: f930, f934
+ sparclet: tsc701
+ v9: ultrasparc
+@end smallexample
@item -mtune=@var{cpu_type}
Set the instruction scheduling parameters for machine type
-@var{cpu_type}, but do not set the architecture type as the option
-@samp{-mcpu=}@var{cpu_type} would. The same values for
-@samp{-mcpu=}@var{cpu_type} are used for @samp{-tune=}@var{cpu_type}.
+@var{cpu_type}, but do not set the instruction set or register set that the
+option @samp{-mcpu=}@var{cpu_type} would.
+
+The same values for @samp{-mcpu=}@var{cpu_type} are used for
+@samp{-mtune=}@var{cpu_type}, though the only useful values are those that
+select a particular cpu implementation: @samp{cypress}, @samp{supersparc},
+@samp{f930}, @samp{f934}, @samp{tsc701}, @samp{ultrasparc}.
+
+@item -malign-loops=@var{num}
+Align loops to a 2 raised to a @var{num} byte boundary. If
+@samp{-malign-loops} is not specified, the default is 2.
+
+@item -malign-jumps=@var{num}
+Align instructions that are only jumped to to a 2 raised to a @var{num}
+byte boundary. If @samp{-malign-jumps} is not specified, the default is 2.
+
+@item -malign-functions=@var{num}
+Align the start of functions to a 2 raised to @var{num} byte boundary.
+If @samp{-malign-functions} is not specified, the default is 2 if compiling
+for 32 bit sparc, and 5 if compiling for 64 bit sparc.
@end table
@@ -2899,36 +3185,36 @@ on SPARC V9 processors in 64 bit environments.
@item -mlittle-endian
Generate code for a processor running in little-endian mode.
-@item -mmedlow
-Generate code for the Medium/Low code model: assume a 32 bit address space.
-Programs are statically linked, PIC is not supported. Pointers are still
-64 bits.
-
-It is very likely that a future version of GCC will rename this option.
-
-@item -mmedany
-Generate code for the Medium/Anywhere code model: assume a 32 bit text
-and a 32 bit data segment, both starting anywhere (determined at link time).
-Programs are statically linked, PIC is not supported. Pointers are still
-64 bits.
-
-It is very likely that a future version of GCC will rename this option.
-
-@item -mfullany
-Generate code for the Full/Anywhere code model: assume a full 64 bit
-address space. PIC is not supported.
-
-It is very likely that a future version of GCC will rename this option.
-
-@item -mint64
-Types long and int are 64 bits.
-
-@item -mlong32
-Types long and int are 32 bits.
-
-@item -mlong64
-@itemx -mint32
-Type long is 64 bits, and type int is 32 bits.
+@item -m32
+@itemx -m64
+Generate code for a 32 bit or 64 bit environment.
+The 32 bit environment sets int, long and pointer to 32 bits.
+The 64 bit environment sets int to 32 bits and long and pointer
+to 64 bits.
+
+@item -mcmodel=medlow
+Generate code for the Medium/Low code model: the program must be linked
+in the low 32 bits of the address space. Pointers are 64 bits.
+Programs can be statically or dynamically linked.
+
+@item -mcmodel=medmid
+Generate code for the Medium/Middle code model: the program must be linked
+in the low 44 bits of the address space, the text segment must be less than
+2G bytes, and data segment must be within 2G of the text segment.
+Pointers are 64 bits.
+
+@item -mcmodel=medany
+Generate code for the Medium/Anywhere code model: the program may be linked
+anywhere in the address space, the text segment must be less than
+2G bytes, and data segment must be within 2G of the text segment.
+Pointers are 64 bits.
+
+@item -mcmodel=embmedany
+Generate code for the Medium/Anywhere code model for embedded systems:
+assume a 32 bit text and a 32 bit data segment, both starting anywhere
+(determined at link time). Register %g4 points to the base of the
+data segment. Pointers still 64 bits.
+Programs are statically linked, PIC is not supported.
@item -mstack-bias
@itemx -mno-stack-bias
@@ -3090,6 +3376,12 @@ to date, but not the 29050).
registers for copying out arguments. This helps detect calling a function
with fewer arguments than it was declared with.
+@item -mno-impure-text
+@itemx -mimpure-text
+@kindex -mimpure-text
+@samp{-mimpure-text}, used in addition to @samp{-shared}, tells the compiler to
+not pass @samp{-assert pure-text} to the linker when linking a shared object.
+
@item -msoft-float
@kindex -msoft-float
Generate output containing library calls for floating point.
@@ -3195,6 +3487,82 @@ suppresses this pass. The post-processor is never run when the
compiler is built for cross-compilation.
@end table
+@node MN10300 Options
+@subsection MN10300 Options
+@cindex MN10300 options
+These @samp{-m} options are defined for Matsushita MN10300 architectures:
+
+@table @code
+@item -mmult-bug
+Generate code to avoid bugs in the multiply instructions for the MN10300
+processors. This is the default.
+
+@item -mno-mult-bug
+Do not generate code to avoid bugs in the multiply instructions for the
+MN10300 processors.
+@end table
+
+@node M32R/D Options
+@subsection M32R/D Options
+@cindex M32R/D options
+
+These @samp{-m} options are defined for Mitsubishi M32R/D architectures:
+
+@table @code
+@item -mcode-model=small
+Assume all objects live in the lower 16MB of memory (so that their addresses
+can be loaded with the @code{ld24} instruction), and assume all subroutines
+are reachable with the @code{bl} instruction.
+This is the default.
+
+The addressability of a particular object can be set with the
+@code{model} attribute.
+
+@item -mcode-model=medium
+Assume objects may be anywhere in the 32 bit address space (the compiler
+will generate @code{seth/add3} instructions to load their addresses), and
+assume all subroutines are reachable with the @code{bl} instruction.
+
+@item -mcode-model=large
+Assume objects may be anywhere in the 32 bit address space (the compiler
+will generate @code{seth/add3} instructions to load their addresses), and
+assume subroutines may not be reachable with the @code{bl} instruction
+(the compiler will generate the much slower @code{seth/add3/jl}
+instruction sequence).
+
+@item -msdata=none
+Disable use of the small data area. Variables will be put into
+one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the
+@code{section} attribute has been specified).
+This is the default.
+
+The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
+Objects may be explicitly put in the small data area with the
+@code{section} attribute using one of these sections.
+
+@item -msdata=sdata
+Put small global and static data in the small data area, but do not
+generate special code to reference them.
+
+@item -msdata=use
+Put small global and static data in the small data area, and generate
+special instructions to reference them.
+
+@item -G @var{num}
+@cindex smaller data references
+Put global and static objects less than or equal to @var{num} bytes
+into the small data or bss sections instead of the normal data or bss
+sections. The default value of @var{num} is 8.
+The @samp{-msdata} option must be set to one of @samp{sdata} or @samp{use}
+for this option to have any effect.
+
+All modules should be compiled with the same @samp{-G @var{num}} value.
+Compiling with different values of @var{num} may or may not work; if it
+doesn't the linker will give an error message - incorrect code will not be
+generated.
+
+@end table
+
@node M88K Options
@subsection M88K Options
@cindex M88k options
@@ -3448,8 +3816,7 @@ RS/6000 and PowerPC. The @dfn{POWER} instruction set are those
instructions supported by the @samp{rios} chip set used in the original
RS/6000 systems and the @dfn{PowerPC} instruction set is the
architecture of the Motorola MPC5xx, MPC6xx, MPC8xx microprocessors, and
-the IBM 40x microprocessors. The PowerPC architecture defines 64-bit
-instructions, but they are not supported by any current processors.
+the IBM 4xx microprocessors.
Neither architecture is a subset of the other. However there is a
large common subset of instructions supported by both. An MQ
@@ -3512,25 +3879,28 @@ Set architecture type, register usage, choice of mnemonics, and
instruction scheduling parameters for machine type @var{cpu_type}.
Supported values for @var{cpu_type} are @samp{rs6000}, @samp{rios1},
@samp{rios2}, @samp{rsc}, @samp{601}, @samp{602}, @samp{603},
-@samp{603e}, @samp{604}, @samp{620}, @samp{power}, @samp{power2},
-@samp{powerpc}, @samp{403}, @samp{505}, @samp{821}, and @samp{860} and
-@samp{common}. @samp{-mcpu=power}, @samp{-mcpu=power2}, and
-@samp{-mcpu=powerpc} specify generic POWER, POWER2 and pure PowerPC
-(i.e., not MPC601) architecture machine types, with an appropriate,
-generic processor model assumed for scheduling purposes.@refill
+@samp{603e}, @samp{604}, @samp{604e}, @samp{620}, @samp{power},
+@samp{power2}, @samp{powerpc}, @samp{403}, @samp{505}, @samp{801},
+@samp{821}, @samp{823}, and @samp{860} and @samp{common}.
+@samp{-mcpu=power}, @samp{-mcpu=power2}, and @samp{-mcpu=powerpc}
+specify generic POWER, POWER2 and pure PowerPC (i.e., not MPC601)
+architecture machine types, with an appropriate, generic processor model
+assumed for scheduling purposes.@refill
@c overfull hbox here --bob 22 jul96
@c original text between ignore ... end ignore
@ignore
-Specifying any of the @samp{-mcpu=rios1}, @samp{-mcpu=rios2}, @samp{-mcpu=rsc},
-@samp{-mcpu=power}, or @samp{-mcpu=power2} options enables the @samp{-mpower}
-option and disables the @samp{-mpowerpc} option; @samp{-mcpu=601}
-enables both the @samp{-mpower} and @samp{-mpowerpc} options;
-all of @samp{-mcpu=602}, @samp{-mcpu=603}, @samp{-mcpu=603e}, @samp{-mcpu=604},
-@samp{-mcpu=620}, @samp{-mcpu=403}, @samp{-mcpu=505}, @samp{-mcpu=821},
-@samp{-mcpu=860} and @samp{-mcpu=powerpc} enable the @samp{-mpowerpc}
-option and disable the @samp{-mpower} option; @samp{-mcpu=common}
-disables both the @samp{-mpower} and @samp{-mpowerpc} options.@refill
+Specifying any of the @samp{-mcpu=rios1}, @samp{-mcpu=rios2},
+@samp{-mcpu=rsc}, @samp{-mcpu=power}, or @samp{-mcpu=power2} options
+enables the @samp{-mpower} option and disables the @samp{-mpowerpc}
+option; @samp{-mcpu=601} enables both the @samp{-mpower} and
+@samp{-mpowerpc} options; all of @samp{-mcpu=602}, @samp{-mcpu=603},
+@samp{-mcpu=603e}, @samp{-mcpu=604}, @samp{-mcpu=604e},
+@samp{-mcpu=620}, @samp{-mcpu=403}, @samp{-mcpu=505}, @samp{-mcpu=801},
+@samp{-mcpu=821}, @samp{-mcpu=823}, @samp{-mcpu=860} and
+@samp{-mcpu=powerpc} enable the @samp{-mpowerpc} option and disable the
+@samp{-mpower} option; @samp{-mcpu=common} disables both the
+@samp{-mpower} and @samp{-mpowerpc} options.@refill
@end ignore
@c changed paragraph
Specifying any of the following options:
@@ -3616,6 +3986,21 @@ stack is inefficient and rarely needed, this option is not enabled by
default and only is necessary when calling subroutines compiled by AIX
XL compilers without optimization.
+@item -mthreads
+Support @dfn{AIX Threads}. Link an application written to use
+@dfn{pthreads} with special libraries and startup code to enable the
+application to run.
+
+@item -mpe
+Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE). Link an
+application written to use message passing with special startup code to
+enable the application to run. The system must have PE installed in the
+standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
+must be overridden with the @samp{-specs=} option to specify the
+appropriate directory location. The Parallel Environment does not
+support threads, so the @samp{-mpe} option and the @samp{-mthreads}
+option are incompatible.
+
@item -msoft-float
@itemx -mhard-float
Generate code that does not use (uses) the floating-point register set.
@@ -3635,11 +4020,27 @@ processor is in little endian mode.
@itemx -mno-string
Generate code that uses (does not use) the load string instructions and the
store string word instructions to save multiple registers and do small block
-moves. These instructions are generated by default on POWER systems, anod not
+moves. These instructions are generated by default on POWER systems, and not
generated on PowerPC systems. Do not use @samp{-mstring} on little endian
PowerPC systems, since those instructions do not work when the processor is in
little endian mode.
+@item -mupdate
+@itemx -mno-update
+Generate code that uses (does not use) the load or store instructions
+that update the base register to the address of the calculated memory
+location. These instructions are generated by default. If you use
+@samp{-mno-update}, there is a small window between the time that the
+stack pointer is updated and the address of the previous frame is
+stored, which means code that walks the stack frame across interrupts or
+signals may get corrupted data.
+
+@item -mfused-madd
+@itemx -mno-fused-madd
+Generate code that uses (does not use) the floating point multiply and
+accumulate instructions. These instructions are generated by default if
+hardware floating is used.
+
@item -mno-bit-align
@itemx -mbit-align
On System V.4 and embedded PowerPC systems do not (do) force structures
@@ -3668,7 +4069,7 @@ be compiled with @samp{-mrelocatable} or @samp{-mrelocatable-lib}.
@itemx -mno-relocatable-lib
On embedded PowerPC systems generate code that allows (does not allow)
the program to be relocated to a different address at runtime. Modules
-compiled with @samp{-mreloctable-lib} can be linked with either modules
+compiled with @samp{-mrelocatable-lib} can be linked with either modules
compiled without @samp{-mrelocatable} and @samp{-mrelocatable-lib} or
with modules compiled with the @samp{-mrelocatable} options.
@@ -3718,11 +4119,11 @@ On System V.4 and embedded PowerPC systems compile code for the Solaris
operating system.
@item -mcall-linux
-On System V.4 and embedded PowerPC systems compile code for the Linux
-operating system.
+On System V.4 and embedded PowerPC systems compile code for the
+Linux-based GNU system.
@item -mprototype
-@item -mno-prototype
+@itemx -mno-prototype
On System V.4 and embedded PowerPC systems assume that all calls to
variable argument functions are properly prototyped. Otherwise, the
compiler must insert an instruction before every non prototyped call to
@@ -3740,7 +4141,17 @@ configurations.
@item -mmvme
On embedded PowerPC systems, assume that the startup module is called
-@file{mvme-crt0.o} and the standard C libraries are @file{libmvme.a} and
+@file{crt0.o} and the standard C libraries are @file{libmvme.a} and
+@file{libc.a}.
+
+@item -mads
+On embedded PowerPC systems, assume that the startup module is called
+@file{crt0.o} and the standard C libraries are @file{libads.a} and
+@file{libc.a}.
+
+@item -myellowknife
+On embedded PowerPC systems, assume that the startup module is called
+@file{crt0.o} and the standard C libraries are @file{libyk.a} and
@file{libc.a}.
@item -memb
@@ -3803,7 +4214,7 @@ in the @samp{.data} section, and all uninitialized data in the
@item -G @var{num}
@cindex smaller data references (PowerPC)
@cindex .sdata/.sdata2 references (PowerPC)
-On embbeded PowerPC systems, put global and static items less than or
+On embedded PowerPC systems, put global and static items less than or
equal to @var{num} bytes into the small data or bss sections instead of
the normal data or bss section. By default, @var{num} is 8. The
@samp{-G @var{num}} switch is also passed to the linker.
@@ -3927,7 +4338,16 @@ stabs within MIPS ECOFF.
@item -mgas
Generate code for the GNU assembler. This is the default on the OSF/1
-reference platform, using the OSF/rose object format.
+reference platform, using the OSF/rose object format. Also, this is
+the default if the configure option @samp{--with-gnu-as} is used.
+
+@item -msplit-addresses
+@itemx -mno-split-addresses
+Generate code to load the high and low parts of address constants separately.
+This allows @code{gcc} to optimize away redundant loads of the high order
+bits of addresses. This optimization requires GNU as and GNU ld.
+This optimization is enabled by default for some embedded targets where
+GNU as and GNU ld are standard.
@item -mrnames
@itemx -mno-rnames
@@ -4070,10 +4490,27 @@ defaults.
These @samp{-m} options are defined for the i386 family of computers:
@table @code
-@item -m486
-@itemx -m386
-Control whether or not code is optimized for a 486 instead of an
-386. Code generated for an 486 will run on a 386 and vice versa.
+@item -mcpu=@var{cpu type}
+Assume the defaults for the machine type @var{cpu type} when scheduling
+instructions. The choices for @var{cpu type} are: @samp{i386},
+@samp{i486}, @samp{i586} (@samp{pentium}), @samp{pentium}, @samp{i686}
+(@samp{pentiumpro}) and @samp{pentiumpro}. While picking a specific
+@var{cpu type} will schedule things appropriately for that particular
+chip, the compiler will not generate any code that does not run on the
+i386 without the @samp{-march=@var{cpu type}} option being used.
+
+@item -march=@var{cpu type}
+Generate instructions for the machine type @var{cpu type}. The choices
+for @var{cpu type} are: @samp{i386}, @samp{i486}, @samp{pentium}, and
+@samp{pentiumpro}. Specifying @samp{-march=@var{cpu type}} implies
+@samp{-mcpu=@var{cpu type}}.
+
+@item -m386
+@itemx -m486
+@itemx -mpentium
+@itemx -mpentiumpro
+Synonyms for -mcpu=i386, -mcpu=i486, -mcpu=pentium, and -mcpu=pentiumpro
+respectively.
@item -mieee-fp
@itemx -mno-ieee-fp
@@ -4189,7 +4626,7 @@ byte boundary. If @samp{-malign-jumps} is not specified, the default is
@item -malign-functions=@var{num}
Align the start of functions to a 2 raised to @var{num} byte boundary.
-If @samp{-malign-jumps} is not specified, the default is 2 if optimizing
+If @samp{-malign-functions} is not specified, the default is 2 if optimizing
for a 386, and 4 if optimizing for a 486.
@end table
@@ -4206,6 +4643,11 @@ Generate code for a PA 1.0 processor.
@item -mpa-risc-1-1
Generate code for a PA 1.1 processor.
+@item -mbig-switch
+Generate code suitable for big switch tables. Use this option only if
+the assembler/linker complain about out of range branches within a switch
+table.
+
@item -mjump-in-delay
Fill delay slots of function calls with unconditional jump instructions
by modifying the return pointer for the function call to be the target
@@ -4237,7 +4679,7 @@ functions.
@item -mspace
Optimize for space rather than execution time. Currently this only
enables out of line function prologues and epilogues. This option is
-incompatable with PIC code generation and profiling.
+incompatible with PIC code generation and profiling.
@item -mlong-load-store
Generate 3-instruction load and store sequences as sometimes required by
@@ -4353,8 +4795,7 @@ Do not permit (do permit) unaligned accesses.
@item -mold-align
Enable structure-alignment compatibility with Intel's gcc release version
-1.3 (based on gcc 1.37). Currently this is buggy in that @samp{#pragma
-align 1} is always assumed as well, and cannot be turned off.
+1.3 (based on gcc 1.37). This option implies @samp{-mstrict-align}.
@end table
@node DEC Alpha Options
@@ -4521,7 +4962,7 @@ IEEE-conformant math library routines will be linked in.
Normally GNU CC examines a 32- or 64-bit integer constant to
see if it can construct it from smaller constants in two or three
instructions. If it cannot, it will output the constant as a literal and
-generate code to load it from the data segement at runtime.
+generate code to load it from the data segment at runtime.
Use this option to require GNU CC to construct @emph{all} integer constants
using code, even if it takes more instructions (the maximum is six).
@@ -4529,6 +4970,56 @@ using code, even if it takes more instructions (the maximum is six).
You would typically use this option to build a shared library dynamic
loader. Itself a shared library, it must relocate itself in memory
before it can find the variables and constants in its own data segment.
+
+@item -malpha-as
+@itemx -mgas
+Select whether to generate code to be assembled by the vendor-supplied
+assembler (@samp{-malpha-as}) or by the GNU assembler @samp{-mgas}.
+
+@item -mbwx
+@itemx -mno-bwx
+@itemx -mcix
+@itemx -mno-cix
+@itemx -mmax
+@itemx -mno-max
+Indicate whether GNU CC should generate code to use the optional BWX,
+CIX, and MAX instruction sets. The default is to use the instruction sets
+supported by the CPU type specified via @samp{-mcpu=} option or that
+of the CPU on which GNU CC was built if none was specified.
+
+@item -mcpu=@var{cpu_type}
+Set the instruction set, register set, and instruction scheduling
+parameters for machine type @var{cpu_type}. You can specify either the
+@samp{EV} style name or the corresponding chip number. GNU CC
+supports scheduling parameters for the EV4 and EV5 family of processors
+and will choose the default values for the instruction set from
+the processor you specify. If you do not specify a processor type,
+GNU CC will default to the processor on which the compiler was built.
+
+Supported values for @var{cpu_type} are
+
+@table @samp
+@item ev4
+@itemx 21064
+Schedules as an EV4 and has no instruction set extensions.
+
+@item ev5
+@itemx 21164
+Schedules as an EV5 and has no instruction set extensions.
+
+@item ev56
+@itemx 21164a
+Schedules as an EV5 and supports the BWX extension.
+
+@item pca56
+@itemx 21164PC
+Schedules as an EV5 and supports the BWX and MAX extensions.
+
+@item ev6
+@itemx 21264
+Schedules as an EV5 (until Digital releases the scheduling parameters
+for the EV6) and supports the BWX, CIX, and MAX extensions.
+@end table
@end table
@node Clipper Options
@@ -4559,6 +5050,9 @@ ld.info, Using ld}, for a fuller description.
@item -mh
Generate code for the H8/300H.
+@item -ms
+Generate code for the H8/S.
+
@item -mint32
Make @code{int} data 32 bits by default.
@@ -4628,6 +5122,61 @@ The assembler uses this option.
@c the generic assembler that comes with Solaris takes just -Ym.
@end table
+@node V850 Options
+@subsection V850 Options
+@cindex V850 Options
+
+These @samp{-m} options are defined for V850 implementations:
+
+@table @code
+@item -mlong-calls
+@itemx -mno-long-calls
+Treat all calls as being far away (near). If calls are assumed to be
+far away, the compiler will always load the functions address up into a
+register, and call indirect through the pointer.
+
+@item -mno-ep
+@item -mep
+Do not optimize (do optimize) basic blocks that use the same index
+pointer 4 or more times to copy pointer into the @code{ep} register, and
+use the shorter @code{sld} and @code{sst} instructions. The @samp{-mep}
+option is on by default if you optimize.
+
+@item -mno-prolog-function
+@itemx -mprolog-function
+Do not use (do use) external functions to save and restore registers at
+the prolog and epilog of a function. The external functions are slower,
+but use less code space if more than one function saves the same number
+of registers. The @samp{-mprolog-function} option is on by default if
+you optimize.
+
+@item -mspace
+Try to make the code as small as possible. At present, this just turns
+on the @samp{-mep} and @samp{-mprolog-function} options.
+
+@item -mtda=@var{n}
+Put static or global variables whose size is @var{n} bytes or less into
+the tiny data area that register @code{ep} points to. The tiny data
+area can hold up to 256 bytes in total (128 bytes for byte references).
+
+@item -msda=@var{n}
+Put static or global variables whose size is @var{n} bytes or less into
+the small data area that register @code{gp} points to. The small data
+area can hold up to 64 kilobytes.
+
+@item -mzda=@var{n}
+Put static or global variables whose size is @var{n} bytes or less into
+the first 32 kilobytes of memory.
+
+@item -mv850
+Specify that the target processor is the V850.
+
+@item -mbig-switch
+Generate code suitable for big switch tables. Use this option only if
+the assembler/linker complain about out of range branches within a switch
+table.
+@end table
+
@node Code Gen Options
@section Options for Code Generation Conventions
@cindex code generation conventions
@@ -4644,6 +5193,16 @@ can figure out the other form by either removing @samp{no-} or adding
it.
@table @code
+@item -fexceptions
+Enable exception handling, and generate extra code needed to propagate
+exceptions. If you do not specify this option, GNU CC enables it by
+default for languages like C++ that normally require exception handling,
+and disabled for languages like C that do not normally require it.
+However, when compiling C code that needs to interoperate properly with
+exception handlers written in C++, you may need to enable this option.
+You may also wish to disable this option is you are compiling older C++
+programs that don't use exception handling.
+
@item -fpcc-struct-return
Return ``short'' @code{struct} and @code{union} values in memory like
longer ones, rather than in registers. This convention is less
@@ -4717,7 +5276,7 @@ make it more readable. This option is generally only of use to those
who actually need to read the generated assembly code (perhaps while
debugging the compiler itself).
-@samp{-fverbose-asm} is the default. @samp{-fno-verbose-asm} causes the
+@samp{-fno-verbose-asm}, the default, causes the
extra information to be omitted and is useful when comparing two assembler
files.
@@ -4733,23 +5292,20 @@ be volatile.
@cindex PIC
Generate position-independent code (PIC) suitable for use in a shared
library, if supported for the target machine. Such code accesses all
-constant addresses through a global offset table (GOT). If the GOT size
-for the linked executable exceeds a machine-specific maximum size, you
-get an error message from the linker indicating that @samp{-fpic} does
-not work; in that case, recompile with @samp{-fPIC} instead. (These
-maximums are 16k on the m88k, 8k on the Sparc, and 32k on the m68k and
-RS/6000. The 386 has no such limit.)
+constant addresses through a global offset table (GOT). The dynamic
+loader resolves the GOT entries when the program starts (the dynamic
+loader is not part of GNU CC; it is part of the operating system). If
+the GOT size for the linked executable exceeds a machine-specific
+maximum size, you get an error message from the linker indicating that
+@samp{-fpic} does not work; in that case, recompile with @samp{-fPIC}
+instead. (These maximums are 16k on the m88k, 8k on the Sparc, and 32k
+on the m68k and RS/6000. The 386 has no such limit.)
Position-independent code requires special support, and therefore works
only on certain machines. For the 386, GNU CC supports PIC for System V
but not for the Sun 386i. Code generated for the IBM RS/6000 is always
position-independent.
-The GNU assembler does not fully support PIC. Currently, you must use
-some other assembler in order for PIC to work. We would welcome
-volunteers to upgrade GAS to handle this; the first part of the job is
-to figure out what the assembler must do differently.
-
@item -fPIC
If supported for the target machine, emit position-independent code,
suitable for dynamic linking and avoiding any limit on the size of the
@@ -4772,7 +5328,7 @@ This flag does not have a negative form, because it specifies a
three-way choice.
@item -fcall-used-@var{reg}
-Treat the register named @var{reg} as an allocatable register that is
+Treat the register named @var{reg} as an allocable register that is
clobbered by function calls. It may be allocated for temporaries or
variables that do not live across a call. Functions compiled this way
will not save and restore the register @var{reg}.
@@ -4785,7 +5341,7 @@ This flag does not have a negative form, because it specifies a
three-way choice.
@item -fcall-saved-@var{reg}
-Treat the register named @var{reg} as an allocatable register saved by
+Treat the register named @var{reg} as an allocable register saved by
functions. It may be allocated even for temporaries or variables that
live across a call. Functions compiled this way will save and restore
the register @var{reg} if they use it.
@@ -4805,6 +5361,61 @@ Pack all structure members together without holes. Usually you would
not want to use this option, since it makes the code suboptimal, and
the offsets of structure members won't agree with system libraries.
+@item -fcheck-memory-usage
+Generate extra code to check each memory access. GNU CC will generate
+code that is suitable for a detector of bad memory accesses such as
+@file{Checker}. If you specify this option, you can not use the
+@code{asm} or @code{__asm__} keywords.
+
+You must also specify this option when you compile functions you call that
+have side effects. If you do not, you may get erroneous messages from
+the detector. Normally, you should compile all your code with this option.
+If you use functions from a library that have side-effects (such as
+@code{read}), you may not be able to recompile the library and
+specify this option. In that case, you can enable the
+@samp{-fprefix-function-name} option, which requests GNU CC to encapsulate
+your code and make other functions look as if they were compiled with
+@samp{-fcheck-memory-usage}. This is done by calling ``stubs'',
+which are provided by the detector. If you cannot find or build
+stubs for every function you call, you may have to specify
+@samp{-fcheck-memory-usage} without @samp{-fprefix-function-name}.
+
+@item -fprefix-function-name
+Request GNU CC to add a prefix to the symbols generated for function names.
+GNU CC adds a prefix to the names of functions defined as well as
+functions called. Code compiled with this option and code compiled
+without the option can't be linked together, unless or stubs are used.
+
+If you compile the following code with @samp{-fprefix-function-name}
+@example
+extern void bar (int);
+void
+foo (int a)
+@{
+ return bar (a + 5);
+
+@}
+@end example
+
+@noindent
+GNU CC will compile the code as if it was written:
+@example
+extern void prefix_bar (int);
+void
+prefix_foo (int a)
+@{
+ return prefix_bar (a + 5);
+@}
+@end example
+This option is designed to be used with @samp{-fcheck-memory-usage}.
+
+@item -fstack-check
+Generate code to verify that you do not go beyond the boundary of the
+stack. You should specify this flag if you are running in an
+environment with multiple threads, but only rarely need to specify it in
+a single-threaded environment since stack overflow is automatically
+detected on nearly all systems if there is only one stack.
+
@item +e0
@itemx +e1
Control whether virtual function definitions in classes are used to
diff --git a/gcc/jump.c b/gcc/jump.c
index b27786380a3..5377eb3e284 100644
--- a/gcc/jump.c
+++ b/gcc/jump.c
@@ -1,5 +1,5 @@
/* Optimize jump instructions, for GNU compiler.
- Copyright (C) 1987, 88, 89, 91-96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 89, 91-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -52,12 +52,14 @@ Boston, MA 02111-1307, USA. */
from other passes as well. */
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "flags.h"
#include "hard-reg-set.h"
#include "regs.h"
#include "insn-config.h"
#include "insn-flags.h"
+#include "recog.h"
#include "expr.h"
#include "real.h"
#include "except.h"
@@ -115,6 +117,7 @@ static void delete_computation PROTO((rtx));
static void delete_from_jump_chain PROTO((rtx));
static int delete_labelref_insn PROTO((rtx, rtx, int));
static void redirect_tablejump PROTO((rtx, rtx));
+static rtx find_insert_position PROTO((rtx, rtx));
/* Delete no-op jumps and optimize jumps to jumps
and jumps around jumps.
@@ -760,10 +763,8 @@ jump_optimize (f, cross_jump, noop_moves, after_regscan)
&& GET_CODE (temp3) == INSN
&& (temp4 = single_set (temp3)) != 0
&& GET_CODE (temp1 = SET_DEST (temp4)) == REG
-#ifdef SMALL_REGISTER_CLASSES
&& (! SMALL_REGISTER_CLASSES
|| REGNO (temp1) >= FIRST_PSEUDO_REGISTER)
-#endif
&& (temp2 = next_active_insn (insn)) != 0
&& GET_CODE (temp2) == INSN
&& (temp4 = single_set (temp2)) != 0
@@ -898,11 +899,8 @@ jump_optimize (f, cross_jump, noop_moves, after_regscan)
&& GET_CODE (temp2) == INSN
&& (temp4 = single_set (temp2)) != 0
&& GET_CODE (temp1 = SET_DEST (temp4)) == REG
-#ifdef SMALL_REGISTER_CLASSES
&& (! SMALL_REGISTER_CLASSES
|| REGNO (temp1) >= FIRST_PSEUDO_REGISTER)
-#endif
-
&& (temp3 = prev_active_insn (insn)) != 0
&& GET_CODE (temp3) == INSN
&& (temp4 = single_set (temp3)) != 0
@@ -988,10 +986,8 @@ jump_optimize (f, cross_jump, noop_moves, after_regscan)
&& (temp1 = single_set (temp)) != 0
&& (temp2 = SET_DEST (temp1), GET_CODE (temp2) == REG)
&& GET_MODE_CLASS (GET_MODE (temp2)) == MODE_INT
-#ifdef SMALL_REGISTER_CLASSES
&& (! SMALL_REGISTER_CLASSES
|| REGNO (temp2) >= FIRST_PSEUDO_REGISTER)
-#endif
&& GET_CODE (SET_SRC (temp1)) != REG
&& GET_CODE (SET_SRC (temp1)) != SUBREG
&& GET_CODE (SET_SRC (temp1)) != CONST_INT
@@ -1001,11 +997,12 @@ jump_optimize (f, cross_jump, noop_moves, after_regscan)
{
rtx new = gen_reg_rtx (GET_MODE (temp2));
- if (validate_change (temp, &SET_DEST (temp1), new, 0))
+ if ((temp3 = find_insert_position (insn, temp))
+ && validate_change (temp, &SET_DEST (temp1), new, 0))
{
next = emit_insn_after (gen_move_insn (temp2, new), insn);
emit_insn_after_with_line_notes (PATTERN (temp),
- PREV_INSN (insn), temp);
+ PREV_INSN (temp3), temp);
delete_insn (temp);
reallabelprev = prev_active_insn (JUMP_LABEL (insn));
}
@@ -1031,10 +1028,8 @@ jump_optimize (f, cross_jump, noop_moves, after_regscan)
&& (temp1 = single_set (temp)) != 0
&& (temp2 = SET_DEST (temp1), GET_CODE (temp2) == REG)
&& GET_MODE_CLASS (GET_MODE (temp2)) == MODE_INT
-#ifdef SMALL_REGISTER_CLASSES
&& (! SMALL_REGISTER_CLASSES
|| REGNO (temp2) >= FIRST_PSEUDO_REGISTER)
-#endif
&& ! side_effects_p (SET_SRC (temp1))
&& ! may_trap_p (SET_SRC (temp1))
&& rtx_cost (SET_SRC (temp1), SET) < 10
@@ -1046,14 +1041,19 @@ jump_optimize (f, cross_jump, noop_moves, after_regscan)
{
rtx new = gen_reg_rtx (GET_MODE (temp2));
- if (validate_change (temp, &SET_DEST (temp1), new, 0))
+ if ((temp5 = find_insert_position (insn, temp))
+ && (temp6 = find_insert_position (insn, temp3))
+ && validate_change (temp, &SET_DEST (temp1), new, 0))
{
+ /* Use the earliest of temp5 and temp6. */
+ if (temp5 != insn)
+ temp6 = temp5;
next = emit_insn_after (gen_move_insn (temp2, new), insn);
emit_insn_after_with_line_notes (PATTERN (temp),
- PREV_INSN (insn), temp);
+ PREV_INSN (temp6), temp);
emit_insn_after_with_line_notes
(replace_rtx (PATTERN (temp3), temp2, new),
- PREV_INSN (insn), temp3);
+ PREV_INSN (temp6), temp3);
delete_insn (temp);
delete_insn (temp3);
reallabelprev = prev_active_insn (JUMP_LABEL (insn));
@@ -1093,10 +1093,8 @@ jump_optimize (f, cross_jump, noop_moves, after_regscan)
&& (temp4 = single_set (temp3)) != 0
&& (temp2 = SET_DEST (temp4), GET_CODE (temp2) == REG)
&& GET_MODE_CLASS (GET_MODE (temp2)) == MODE_INT
-#ifdef SMALL_REGISTER_CLASSES
&& (! SMALL_REGISTER_CLASSES
|| REGNO (temp2) >= FIRST_PSEUDO_REGISTER)
-#endif
&& rtx_equal_p (SET_DEST (temp4), temp2)
&& ! side_effects_p (SET_SRC (temp4))
&& ! may_trap_p (SET_SRC (temp4))
@@ -1104,13 +1102,18 @@ jump_optimize (f, cross_jump, noop_moves, after_regscan)
{
rtx new = gen_reg_rtx (GET_MODE (temp2));
- if (validate_change (temp3, &SET_DEST (temp4), new, 0))
+ if ((temp5 = find_insert_position (insn, temp))
+ && (temp6 = find_insert_position (insn, temp3))
+ && validate_change (temp3, &SET_DEST (temp4), new, 0))
{
+ /* Use the earliest of temp5 and temp6. */
+ if (temp5 != insn)
+ temp6 = temp5;
next = emit_insn_after (gen_move_insn (temp2, new), insn);
emit_insn_after_with_line_notes (PATTERN (temp),
- PREV_INSN (insn), temp);
+ PREV_INSN (temp6), temp);
emit_insn_after_with_line_notes (PATTERN (temp3),
- PREV_INSN (insn), temp3);
+ PREV_INSN (temp6), temp3);
delete_insn (temp);
delete_insn (temp3);
reallabelprev = prev_active_insn (JUMP_LABEL (insn));
@@ -1147,10 +1150,8 @@ jump_optimize (f, cross_jump, noop_moves, after_regscan)
&& GET_CODE (temp) == INSN
&& GET_CODE (PATTERN (temp)) == SET
&& GET_CODE (temp1 = SET_DEST (PATTERN (temp))) == REG
-#ifdef SMALL_REGISTER_CLASSES
&& (! SMALL_REGISTER_CLASSES
|| REGNO (temp1) >= FIRST_PSEUDO_REGISTER)
-#endif
&& (GET_CODE (temp2 = SET_SRC (PATTERN (temp))) == REG
|| GET_CODE (temp2) == SUBREG
/* ??? How about floating point constants? */
@@ -1159,8 +1160,11 @@ jump_optimize (f, cross_jump, noop_moves, after_regscan)
There is no point in using the old value of TEMP1 if
it is a register, since cse will alias them. It can
lose if the old value were a hard register since CSE
- won't replace hard registers. */
- && (((temp3 = reg_set_last (temp1, insn)) != 0)
+ won't replace hard registers. Avoid using TEMP3 if
+ small register classes and it is a hard register. */
+ && (((temp3 = reg_set_last (temp1, insn)) != 0
+ && ! (SMALL_REGISTER_CLASSES && GET_CODE (temp3) == REG
+ && REGNO (temp3) < FIRST_PSEUDO_REGISTER))
/* Make the latter case look like x = x; if (...) x = b; */
|| (temp3 = temp1, 1))
/* INSN must either branch to the insn after TEMP or the insn
@@ -2335,6 +2339,8 @@ duplicate_loop_exit_test (loop_start)
|| find_reg_note (insn, REG_LIBCALL, NULL_RTX))
return 0;
break;
+ default:
+ break;
}
}
@@ -3085,6 +3091,9 @@ comparison_dominates_p (code1, code2)
if (code2 == GEU || code2 == NE)
return 1;
break;
+
+ default:
+ break;
}
return 0;
@@ -3405,8 +3414,11 @@ mark_jump_label (x, insn, cross_jump)
for (i = 0; i < XVECLEN (x, eltnum); i++)
mark_jump_label (XVECEXP (x, eltnum, i), NULL_RTX, cross_jump);
- return;
}
+ return;
+
+ default:
+ break;
}
fmt = GET_RTX_FORMAT (code);
@@ -4174,6 +4186,9 @@ rtx_renumbered_equal_p (x, y)
case SYMBOL_REF:
return XSTR (x, 0) == XSTR (y, 0);
+
+ default:
+ break;
}
/* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent. */
@@ -4463,7 +4478,10 @@ thread_jumps (f, max_reg, flag_before_loop)
if (rtx_equal_for_thread_p (b1op0, b2op0, b2)
&& rtx_equal_for_thread_p (b1op1, b2op1, b2)
&& (comparison_dominates_p (code1, code2)
- || comparison_dominates_p (code1, reverse_condition (code2))))
+ || (comparison_dominates_p (code1, reverse_condition (code2))
+ && can_reverse_comparison_p (XEXP (SET_SRC (PATTERN (b1)),
+ 0),
+ b1))))
{
t1 = prev_nonnote_insn (b1);
t2 = prev_nonnote_insn (b2);
@@ -4641,6 +4659,9 @@ rtx_equal_for_thread_p (x, y, yinsn)
case SYMBOL_REF:
return XSTR (x, 0) == XSTR (y, 0);
+
+ default:
+ break;
}
if (x == y)
@@ -4702,3 +4723,45 @@ rtx_equal_for_thread_p (x, y, yinsn)
}
return 1;
}
+
+
+/* Return the insn that NEW can be safely inserted in front of starting at
+ the jump insn INSN. Return 0 if it is not safe to do this jump
+ optimization. Note that NEW must contain a single set. */
+
+static rtx
+find_insert_position (insn, new)
+ rtx insn;
+ rtx new;
+{
+ int i;
+ rtx prev;
+
+ /* If NEW does not clobber, it is safe to insert NEW before INSN. */
+ if (GET_CODE (PATTERN (new)) != PARALLEL)
+ return insn;
+
+ for (i = XVECLEN (PATTERN (new), 0) - 1; i >= 0; i--)
+ if (GET_CODE (XVECEXP (PATTERN (new), 0, i)) == CLOBBER
+ && reg_overlap_mentioned_p (XEXP (XVECEXP (PATTERN (new), 0, i), 0),
+ insn))
+ break;
+
+ if (i < 0)
+ return insn;
+
+ /* There is a good chance that the previous insn PREV sets the thing
+ being clobbered (often the CC in a hard reg). If PREV does not
+ use what NEW sets, we can insert NEW before PREV. */
+
+ prev = prev_active_insn (insn);
+ for (i = XVECLEN (PATTERN (new), 0) - 1; i >= 0; i--)
+ if (GET_CODE (XVECEXP (PATTERN (new), 0, i)) == CLOBBER
+ && reg_overlap_mentioned_p (XEXP (XVECEXP (PATTERN (new), 0, i), 0),
+ insn)
+ && ! modified_in_p (XEXP (XVECEXP (PATTERN (new), 0, i), 0),
+ prev))
+ return 0;
+
+ return reg_mentioned_p (SET_DEST (single_set (new)), prev) ? 0 : prev;
+}
diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c
index adda3257f7e..dcf4cb98f93 100644
--- a/gcc/libgcc2.c
+++ b/gcc/libgcc2.c
@@ -1,6 +1,6 @@
/* More subroutines needed by GCC output code on some machines. */
/* Compile this one with gcc. */
-/* Copyright (C) 1989, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 92-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -46,6 +46,13 @@ Boston, MA 02111-1307, USA. */
#define WEAK_ALIAS
#endif
+/* In a cross-compilation situation, default to inhibiting compilation
+ of routines that use libc. */
+
+#ifdef CROSS_COMPILE
+#define inhibit_libc
+#endif
+
/* Permit the tm.h file to select the endianness to use just for this
file. This is used when the endianness is determined when the
compiler is run. */
@@ -926,17 +933,13 @@ XFtype
__floatdixf (DItype u)
{
XFtype d;
- SItype negate = 0;
-
- if (u < 0)
- u = -u, negate = 1;
- d = (USItype) (u >> WORD_SIZE);
+ d = (SItype) (u >> WORD_SIZE);
d *= HIGH_HALFWORD_COEFF;
d *= HIGH_HALFWORD_COEFF;
d += (USItype) (u & (HIGH_WORD_COEFF - 1));
- return (negate ? -d : d);
+ return d;
}
#endif
@@ -949,17 +952,13 @@ TFtype
__floatditf (DItype u)
{
TFtype d;
- SItype negate = 0;
- if (u < 0)
- u = -u, negate = 1;
-
- d = (USItype) (u >> WORD_SIZE);
+ d = (SItype) (u >> WORD_SIZE);
d *= HIGH_HALFWORD_COEFF;
d *= HIGH_HALFWORD_COEFF;
d += (USItype) (u & (HIGH_WORD_COEFF - 1));
- return (negate ? -d : d);
+ return d;
}
#endif
@@ -972,17 +971,13 @@ DFtype
__floatdidf (DItype u)
{
DFtype d;
- SItype negate = 0;
-
- if (u < 0)
- u = -u, negate = 1;
- d = (USItype) (u >> WORD_SIZE);
+ d = (SItype) (u >> WORD_SIZE);
d *= HIGH_HALFWORD_COEFF;
d *= HIGH_HALFWORD_COEFF;
d += (USItype) (u & (HIGH_WORD_COEFF - 1));
- return (negate ? -d : d);
+ return d;
}
#endif
@@ -1027,10 +1022,6 @@ __floatdisf (DItype u)
so that we don't lose any of the precision of the high word
while multiplying it. */
DFtype f;
- SItype negate = 0;
-
- if (u < 0)
- u = -u, negate = 1;
/* Protect against double-rounding error.
Represent any low-order bits, that might be truncated in DFmode,
@@ -1042,18 +1033,19 @@ __floatdisf (DItype u)
&& DF_SIZE > (DI_SIZE - DF_SIZE + SF_SIZE))
{
#define REP_BIT ((USItype) 1 << (DI_SIZE - DF_SIZE))
- if (u >= ((UDItype) 1 << DF_SIZE))
+ if (! (- ((UDItype) 1 << DF_SIZE) < u
+ && u < ((UDItype) 1 << DF_SIZE)))
{
if ((USItype) u & (REP_BIT - 1))
u |= REP_BIT;
}
}
- f = (USItype) (u >> WORD_SIZE);
+ f = (SItype) (u >> WORD_SIZE);
f *= HIGH_HALFWORD_COEFF;
f *= HIGH_HALFWORD_COEFF;
f += (USItype) (u & (HIGH_WORD_COEFF - 1));
- return (SFtype) (negate ? -f : f);
+ return (SFtype) f;
}
#endif
@@ -1523,14 +1515,14 @@ __bb_exit_func (void)
fprintf (stderr, "arc profiling: Error closing output file %s.\n",
ptr->filename);
}
- if ((da_file = fopen (ptr->filename, "w")) < 0)
+ if ((da_file = fopen (ptr->filename, "w")) == 0)
{
fprintf (stderr, "arc profiling: Can't open output file %s.\n",
ptr->filename);
continue;
}
- /* ??? Should first write a header to the file. Perferably, a 4 byte
+ /* ??? Should first write a header to the file. Preferably, a 4 byte
magic number, 4 bytes containing the time the program was
compiled, 4 bytes containing the last modification time of the
source file, and 4 bytes indicating the compiler options used.
@@ -2718,7 +2710,7 @@ __clear_cache (char *beg, char *end)
/* Jump to a trampoline, loading the static chain address. */
-#ifdef WINNT
+#if defined(WINNT) && ! defined(__CYGWIN32__)
long getpagesize()
{
@@ -2733,22 +2725,28 @@ long getpagesize()
extern int VirtualProtect (char *, int, int, int *) __attribute__((stdcall));
#endif
-int mprotect(char *addr, int len, int prot)
+int
+mprotect (char *addr, int len, int prot)
{
int np, op;
- if (prot == 7) np = 0x40;
- else if (prot == 5) np = 0x20;
- else if (prot == 4) np = 0x10;
- else if (prot == 3) np = 0x04;
- else if (prot == 1) np = 0x02;
- else if (prot == 0) np = 0x01;
+ if (prot == 7)
+ np = 0x40;
+ else if (prot == 5)
+ np = 0x20;
+ else if (prot == 4)
+ np = 0x10;
+ else if (prot == 3)
+ np = 0x04;
+ else if (prot == 1)
+ np = 0x02;
+ else if (prot == 0)
+ np = 0x01;
if (VirtualProtect (addr, len, np, &op))
return 0;
else
return -1;
-
}
#endif
@@ -2821,7 +2819,7 @@ __enable_execute_stack ()
}
#endif /* __convex__ */
-#ifdef __DOLPHIN__
+#ifdef __sysV88__
/* Modified from the convex -code above. */
@@ -2851,7 +2849,52 @@ __enable_execute_stack ()
errno=save_errno;
}
-#endif /* __DOLPHIN__ */
+#endif /* __sysV88__ */
+
+#ifdef __sysV68__
+
+#include <sys/signal.h>
+#include <errno.h>
+
+/* Motorola forgot to put memctl.o in the libp version of libc881.a,
+ so define it here, because we need it in __clear_insn_cache below */
+/* On older versions of this OS, no memctl or MCT_TEXT are defined;
+ hence we enable this stuff only if MCT_TEXT is #define'd. */
+
+#ifdef MCT_TEXT
+asm("\n\
+ global memctl\n\
+memctl:\n\
+ movq &75,%d0\n\
+ trap &0\n\
+ bcc.b noerror\n\
+ jmp cerror%\n\
+noerror:\n\
+ movq &0,%d0\n\
+ rts");
+#endif
+
+/* Clear instruction cache so we can call trampolines on stack.
+ This is called from FINALIZE_TRAMPOLINE in mot3300.h. */
+
+void
+__clear_insn_cache ()
+{
+#ifdef MCT_TEXT
+ int save_errno;
+
+ /* Preserve errno, because users would be surprised to have
+ errno changing without explicitly calling any system-call. */
+ save_errno = errno;
+
+ /* Keep it simple : memctl (MCT_TEXT) always fully clears the insn cache.
+ No need to use an address derived from _start or %sp, as 0 works also. */
+ memctl(0, 4096, MCT_TEXT);
+ errno = save_errno;
+#endif
+}
+
+#endif /* __sysV68__ */
#ifdef __pyr__
@@ -3101,11 +3144,11 @@ int _exit_dummy_decl = 0; /* prevent compiler & linker warnings */
#ifdef L_eh
-#ifdef EH_TABLE_LOOKUP
+/* Shared exception handling support routines. */
-EH_TABLE_LOOKUP
-
-#else
+/* Language-specific information about the active exception(s). If there
+ are no active exceptions, it is set to 0. */
+void *__eh_info;
void
__default_terminate ()
@@ -3121,14 +3164,31 @@ __terminate ()
(*__terminate_func)();
}
+void *
+__throw_type_match (void *catch_type, void *throw_type, void *obj)
+{
+#if 0
+ printf ("__throw_type_match (): catch_type = %s, throw_type = %s\n",
+ catch_type, throw_type);
+#endif
+ if (strcmp ((const char *)catch_type, (const char *)throw_type) == 0)
+ return obj;
+ return 0;
+}
+
+void
+__empty ()
+{
+}
+
+/* Support routines for setjmp/longjmp exception handling. */
+
/* Calls to __sjthrow are generated by the compiler when an exception
is raised when using the setjmp/longjmp exception handling codegen
method. */
extern void longjmp (void *, int);
-void *__eh_type;
-
static void *top_elt[2];
void **__dynamic_handler_chain = top_elt;
@@ -3203,7 +3263,7 @@ __sjthrow ()
/* We must call terminate if we try and rethrow an exception, when
there is no exception currently active and when there are no
handlers left. */
- if (! __eh_type || (*dhc) == top_elt)
+ if (! __eh_info || (*dhc) == top_elt)
__terminate ();
/* Find the jmpbuf associated with the top element of the dynamic
@@ -3280,120 +3340,104 @@ __sjpopnthrow ()
__sjthrow ();
}
+
+/* Support code for all exception region-based exception handling. */
+
+/* This value identifies the place from which an exception is being
+ thrown. */
+
+void *__eh_pc;
-typedef struct {
+#ifdef EH_TABLE_LOOKUP
+
+EH_TABLE_LOOKUP
+
+#else
+
+typedef struct exception_table {
void *start;
void *end;
void *exception_handler;
} exception_table;
-struct exception_table_node {
+/* This routine takes a PC and a pointer to the exception region TABLE for
+ its translation unit, and returns the address of the exception handler
+ associated with the closest exception table handler entry associated
+ with that PC, or 0 if there are no table entries the PC fits in.
+
+ In the advent of a tie, we have to give the last entry, as it represents
+ an inner block. */
+
+static void *
+find_exception_handler (void *pc, exception_table *table)
+{
+ if (table)
+ {
+ int pos;
+ int best = -1;
+
+ /* We can't do a binary search because the table isn't guaranteed
+ to be sorted from function to function. */
+ for (pos = 0; table[pos].exception_handler != (void *) -1; ++pos)
+ {
+ if (table[pos].start <= pc && table[pos].end > pc)
+ {
+ /* This can apply. Make sure it is at least as small as
+ the previous best. */
+ if (best == -1 || (table[pos].end <= table[best].end
+ && table[pos].start >= table[best].start))
+ best = pos;
+ }
+ /* But it is sorted by starting PC within a function. */
+ else if (best >= 0 && table[pos].start > pc)
+ break;
+ }
+ if (best != -1)
+ return table[best].exception_handler;
+ }
+
+ return (void *) 0;
+}
+#endif /* EH_TABLE_LOOKUP */
+
+#ifndef DWARF2_UNWIND_INFO
+/* Support code for exception handling using inline unwinders or
+ __unwind_function. */
+
+#ifndef EH_TABLE_LOOKUP
+typedef struct exception_table_node {
exception_table *table;
void *start;
void *end;
struct exception_table_node *next;
-};
+} exception_table_node;
static struct exception_table_node *exception_table_list;
-/* this routine takes a pc, and the address of the exception handler associated
- with the closest exception table handler entry associated with that PC,
- or 0 if there are no table entries the PC fits in. The algorithm works
- something like this:
-
- while(current_entry exists) {
- if(current_entry.start < pc )
- current_entry = next_entry;
- else {
- if(prev_entry.start <= pc && prev_entry.end > pc) {
- save pointer to prev_entry;
- return prev_entry.exception_handler;
- }
- else return 0;
- }
- }
- return 0;
-
- Assuming a correctly sorted table (ascending order) this routine should
- return the tightest match...
-
- In the advent of a tie, we have to give the last entry, as it represents
- an inner block. */
-
void *
__find_first_exception_table_match (void *pc)
{
- register struct exception_table_node *tnp;
- register exception_table *table;
- int pos;
- int best;
-
-#if 0
- printf ("find_first_exception_table_match (): pc = %x!\n", pc);
-#endif
+ register exception_table_node *tnp;
for (tnp = exception_table_list; tnp != 0; tnp = tnp->next)
{
- if (tnp->start > pc || tnp->end <= pc)
- continue;
-
- table = tnp->table;
-
- pos = 0;
- best = 0;
-#if 0
- /* We can't do this yet, as we don't know that the table is sorted. */
- do {
- ++pos;
- if (table[pos].start > pc)
- /* found the first table[pos].start > pc, so the previous
- entry better be the one we want! */
- break;
- } while (table[pos].exception_handler != (void *) -1);
-
- --pos;
- if (table[pos].start <= pc && table[pos].end > pc)
- {
-#if 0
- printf ("find_first_eh_table_match (): found match: %x\n", table[pos].exception_handler);
-#endif
- return table[pos].exception_handler;
- }
-#else
- while (table[++pos].exception_handler != (void *) -1) {
- if (table[pos].start <= pc && table[pos].end > pc)
- {
- /* This can apply. Make sure it is better or as good as
- the previous best. */
- /* The best one ends first. */
- if (best == 0 || (table[pos].end <= table[best].end
- /* The best one starts last. */
- && table[pos].start >= table[best].start))
- best = pos;
- }
- }
- if (best != 0)
- return table[best].exception_handler;
-#endif
+ if (tnp->start <= pc && tnp->end >= pc)
+ return find_exception_handler (pc, tnp->table);
}
-#if 0
- printf ("find_first_eh_table_match (): else: returning NULL!\n");
-#endif
return (void *) 0;
}
void
__register_exceptions (exception_table *table)
{
- struct exception_table_node *node;
+ exception_table_node *node;
exception_table *range = table + 1;
if (range->start == (void *) -1)
return;
- node = (struct exception_table_node *)
- malloc (sizeof (struct exception_table_node));
+ node = (exception_table_node *) malloc (sizeof (exception_table_node));
node->table = table;
/* This look can be optimized away either if the table
@@ -3411,19 +3455,7 @@ __register_exceptions (exception_table *table)
node->next = exception_table_list;
exception_table_list = node;
}
-#endif
-
-void *
-__throw_type_match (void *catch_type, void *throw_type, void *obj)
-{
-#if 0
- printf ("__throw_type_match (): catch_type = %s, throw_type = %s\n",
- catch_type, throw_type);
-#endif
- if (strcmp ((const char *)catch_type, (const char *)throw_type) == 0)
- return obj;
- return 0;
-}
+#endif /* !EH_TABLE_LOOKUP */
/* Throw stub routine.
@@ -3435,11 +3467,6 @@ __throw ()
abort ();
}
-/* This value identifies the place from which an exception is being
- thrown. */
-
-void *__eh_pc;
-
/* See expand_builtin_throw for details. */
void **__eh_pcnthrow () {
@@ -3450,11 +3477,6 @@ void **__eh_pcnthrow () {
return buf;
}
-void
-__empty ()
-{
-}
-
#if #machine(i386)
void
__unwind_function(void *ptr)
@@ -3533,7 +3555,323 @@ __unwind_function(void *ptr)
abort ();
}
#endif /* powerpc */
+
+#else /* DWARF2_UNWIND_INFO */
+/* Support code for exception handling using static unwind information. */
+
+#include "frame.h"
+
+/* This type is used in get_reg and put_reg to deal with ABIs where a void*
+ is smaller than a word, such as the Irix 6 n32 ABI. We cast twice to
+ avoid a warning about casting between int and pointer of different
+ sizes. */
+
+typedef int ptr_type __attribute__ ((mode (pointer)));
+
+/* Get the value of register REG as saved in UDATA, where SUB_UDATA is a
+ frame called by UDATA or 0. */
+
+static void*
+get_reg (unsigned reg, frame_state *udata, frame_state *sub_udata)
+{
+ if (udata->saved[reg] == REG_SAVED_OFFSET)
+ return (void *)(ptr_type)
+ *(word_type *)(udata->cfa + udata->reg_or_offset[reg]);
+ else if (udata->saved[reg] == REG_SAVED_REG && sub_udata)
+ return get_reg (udata->reg_or_offset[reg], sub_udata, 0);
+ else
+ abort ();
+}
+
+/* Overwrite the saved value for register REG in frame UDATA with VAL. */
+
+static void
+put_reg (unsigned reg, void *val, frame_state *udata)
+{
+ if (udata->saved[reg] == REG_SAVED_OFFSET)
+ *(word_type *)(udata->cfa + udata->reg_or_offset[reg])
+ = (word_type)(ptr_type) val;
+ else
+ abort ();
+}
+
+/* Copy the saved value for register REG from frame UDATA to frame
+ TARGET_UDATA. Unlike the previous two functions, this can handle
+ registers that are not one word large. */
+
+static void
+copy_reg (unsigned reg, frame_state *udata, frame_state *target_udata)
+{
+ if (udata->saved[reg] == REG_SAVED_OFFSET
+ && target_udata->saved[reg] == REG_SAVED_OFFSET)
+ memcpy (target_udata->cfa + target_udata->reg_or_offset[reg],
+ udata->cfa + udata->reg_or_offset[reg],
+ __builtin_dwarf_reg_size (reg));
+ else
+ abort ();
+}
+
+/* Retrieve the return address for frame UDATA, where SUB_UDATA is a
+ frame called by UDATA or 0. */
+
+static inline void *
+get_return_addr (frame_state *udata, frame_state *sub_udata)
+{
+ return __builtin_extract_return_addr
+ (get_reg (udata->retaddr_column, udata, sub_udata));
+}
+
+/* Overwrite the return address for frame UDATA with VAL. */
+
+static inline void
+put_return_addr (void *val, frame_state *udata)
+{
+ val = __builtin_frob_return_addr (val);
+ put_reg (udata->retaddr_column, val, udata);
+}
+
+/* Given the current frame UDATA and its return address PC, return the
+ information about the calling frame in CALLER_UDATA. */
+
+static void *
+next_stack_level (void *pc, frame_state *udata, frame_state *caller_udata)
+{
+ caller_udata = __frame_state_for (pc, caller_udata);
+ if (! caller_udata)
+ return 0;
+
+ /* Now go back to our caller's stack frame. If our caller's CFA register
+ was saved in our stack frame, restore it; otherwise, assume the CFA
+ register is SP and restore it to our CFA value. */
+ if (udata->saved[caller_udata->cfa_reg])
+ caller_udata->cfa = get_reg (caller_udata->cfa_reg, udata, 0);
+ else
+ caller_udata->cfa = udata->cfa;
+ caller_udata->cfa += caller_udata->cfa_offset;
+
+ return caller_udata;
+}
+
+#ifdef INCOMING_REGNO
+/* Is the saved value for register REG in frame UDATA stored in a register
+ window in the previous frame? */
+
+static int
+in_reg_window (int reg, frame_state *udata)
+{
+ if (udata->saved[reg] != REG_SAVED_OFFSET)
+ return 0;
+
+#ifdef STACK_GROWS_DOWNWARD
+ return udata->reg_or_offset[reg] > 0;
+#else
+ return udata->reg_or_offset[reg] < 0;
+#endif
+}
+#endif /* INCOMING_REGNO */
+
+/* We first search for an exception handler, and if we don't find
+ it, we call __terminate on the current stack frame so that we may
+ use the debugger to walk the stack and understand why no handler
+ was found.
+
+ If we find one, then we unwind the frames down to the one that
+ has the handler and transfer control into the handler. */
+
+void
+__throw ()
+{
+ void *pc, *handler, *retaddr;
+ frame_state ustruct, ustruct2;
+ frame_state *udata = &ustruct;
+ frame_state *sub_udata = &ustruct2;
+ frame_state my_ustruct, *my_udata = &my_ustruct;
+ long args_size;
+
+ /* This is required for C++ semantics. We must call terminate if we
+ try and rethrow an exception, when there is no exception currently
+ active. */
+ if (! __eh_info)
+ __terminate ();
+
+ /* Start at our stack frame. */
+label:
+ udata = __frame_state_for (&&label, udata);
+ if (! udata)
+ __terminate ();
+
+ /* We need to get the value from the CFA register. At this point in
+ compiling __throw we don't know whether or not we will use the frame
+ pointer register for the CFA, so we check our unwind info. */
+ if (udata->cfa_reg == __builtin_dwarf_fp_regnum ())
+ udata->cfa = __builtin_fp ();
+ else
+ udata->cfa = __builtin_sp ();
+ udata->cfa += udata->cfa_offset;
+
+ memcpy (my_udata, udata, sizeof (*udata));
+
+ /* Do any necessary initialization to access arbitrary stack frames.
+ On the SPARC, this means flushing the register windows. */
+ __builtin_unwind_init ();
+
+ /* Now reset pc to the right throw point. */
+ pc = __eh_pc;
+
+ handler = 0;
+ for (;;)
+ {
+ frame_state *p = udata;
+ udata = next_stack_level (pc, udata, sub_udata);
+ sub_udata = p;
+
+ /* If we couldn't find the next frame, we lose. */
+ if (! udata)
+ break;
+
+ handler = find_exception_handler (pc, udata->eh_ptr);
+
+ /* If we found one, we can stop searching. */
+ if (handler)
+ {
+ args_size = udata->args_size;
+ break;
+ }
+
+ /* Otherwise, we continue searching. We subtract 1 from PC to avoid
+ hitting the beginning of the next region. */
+ pc = get_return_addr (udata, sub_udata) - 1;
+ }
+
+ /* If we haven't found a handler by now, this is an unhandled
+ exception. */
+ if (! handler)
+ __terminate ();
+
+ if (pc == __eh_pc)
+ /* We found a handler in the throw context, no need to unwind. */
+ udata = my_udata;
+ else
+ {
+ int i;
+ void *val;
+
+ /* Unwind all the frames between this one and the handler by copying
+ their saved register values into our register save slots. */
+
+ /* Remember the PC where we found the handler. */
+ void *handler_pc = pc;
+
+ /* Start from the throw context again. */
+ pc = __eh_pc;
+ memcpy (udata, my_udata, sizeof (*udata));
+
+ while (pc != handler_pc)
+ {
+ frame_state *p = udata;
+ udata = next_stack_level (pc, udata, sub_udata);
+ sub_udata = p;
+
+ for (i = 0; i < FIRST_PSEUDO_REGISTER; ++i)
+ if (i != udata->retaddr_column && udata->saved[i])
+ {
+#ifdef INCOMING_REGNO
+ /* If you modify the saved value of the return address
+ register on the SPARC, you modify the return address for
+ your caller's frame. Don't do that here, as it will
+ confuse get_return_addr. */
+ if (in_reg_window (i, udata)
+ && udata->saved[udata->retaddr_column] == REG_SAVED_REG
+ && udata->reg_or_offset[udata->retaddr_column] == i)
+ continue;
+#endif
+ copy_reg (i, udata, my_udata);
+ }
+
+ pc = get_return_addr (udata, sub_udata) - 1;
+ }
+
+#ifdef INCOMING_REGNO
+ /* But we do need to update the saved return address register from
+ the last frame we unwind, or the handler frame will have the wrong
+ return address. */
+ if (udata->saved[udata->retaddr_column] == REG_SAVED_REG)
+ {
+ i = udata->reg_or_offset[udata->retaddr_column];
+ if (in_reg_window (i, udata))
+ copy_reg (i, udata, my_udata);
+ }
+#endif
+ }
+ /* udata now refers to the frame called by the handler frame. */
+
+ /* Emit the stub to adjust sp and jump to the handler. */
+ retaddr = __builtin_eh_stub ();
+
+ /* And then set our return address to point to the stub. */
+ if (my_udata->saved[my_udata->retaddr_column] == REG_SAVED_OFFSET)
+ put_return_addr (retaddr, my_udata);
+ else
+ __builtin_set_return_addr_reg (retaddr);
+
+ /* Set up the registers we use to communicate with the stub.
+ We check STACK_GROWS_DOWNWARD so the stub can use adjust_stack. */
+ __builtin_set_eh_regs (handler,
+#ifdef STACK_GROWS_DOWNWARD
+ udata->cfa - my_udata->cfa
+#else
+ my_udata->cfa - udata->cfa
+#endif
+ + args_size
+ );
+
+ /* Epilogue: restore the handler frame's register values and return
+ to the stub. */
+}
+#endif /* !DWARF2_UNWIND_INFO */
+
#endif /* L_eh */
+
+#ifdef L_eh_compat
+
+/* This is needed to provide the old names of the frame info registering
+ code for compatibility. It should be deleted in GCC 2.9.0. */
+
+extern void *malloc ();
+
+struct object {
+ void *pc_begin;
+ void *pc_end;
+ void *fde_begin;
+ void *fde_array;
+ size_t count;
+ struct object *next;
+};
+
+void __register_frame_info (void *, struct object *);
+void __register_frame_info_table (void *, struct object *);
+void __deregister_frame_info (void *);
+
+void
+__register_frame (void *begin)
+{
+ __register_frame_info (begin, malloc (sizeof (struct object)));
+}
+
+void
+__register_frame_table (void *begin)
+{
+ __register_frame_info_table (begin, malloc (sizeof (struct object)));
+}
+
+void
+__deregister_frame (void *begin)
+{
+ /* This leaks the memory malloced above,
+ but that's good enough for backward compatibility purposes. */
+ __deregister_frame_info (begin);
+}
+#endif
#ifdef L_pure
#ifndef inhibit_libc
diff --git a/gcc/listing b/gcc/listing
index 08abb1db4ce..dc989f6eaef 100755
--- a/gcc/listing
+++ b/gcc/listing
@@ -32,7 +32,7 @@
# mc68030 for Motorola 68030 (Sun-3, ..)
# sparc for SPARC (SUN-4, ..)
# i386 for i386 (Sun i386, ...)
-# i386-linux for i386 (Linux, ...)
+# i386-gnu-linux for i386 (GNU/Linux, ...)
# Guess what kind of objects we are creating and thus what type of assembler
# symbols to look for
@@ -62,7 +62,7 @@ cd $WD
# MYSYS=mc68030
# MYSYS=sparc
# MYSYS=i386
-# MYSYS=i386-linux
+# MYSYS=i386-gnu-linux
# MYSYS=`mach` # this will work on Suns with SunOS > 4.0.0
# MYSYS=elf
# MYSYS=coff
@@ -103,7 +103,7 @@ BEGIN {
line_delimiter = ",";
line_offset = 0;
}
- else if (sys == "mc68020" || sys == "mc68030" || sys == "i386-linux") {
+ else if (sys == "mc68020" || sys == "mc68030" || sys == "i386-gnu-linux") {
line_hint = "^[ \t]*\.stabd.*"
line_field = 3;
line_delimiter = ",";
diff --git a/gcc/local-alloc.c b/gcc/local-alloc.c
index 83cb08f4cfb..080afe2f7b1 100644
--- a/gcc/local-alloc.c
+++ b/gcc/local-alloc.c
@@ -59,8 +59,8 @@ Boston, MA 02111-1307, USA. */
register is used as a spill register. So we don't allocate such pseudos
here if their preferred class is likely to be used by spills. */
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "flags.h"
#include "basic-block.h"
@@ -246,6 +246,7 @@ static void alloc_qty PROTO((int, enum machine_mode, int, int));
static void alloc_qty_for_scratch PROTO((rtx, int, rtx, int, int));
static void validate_equiv_mem_from_store PROTO((rtx, rtx));
static int validate_equiv_mem PROTO((rtx, rtx, rtx));
+static int contains_replace_regs PROTO((rtx, char *));
static int memref_referenced_p PROTO((rtx, rtx));
static int memref_used_between_p PROTO((rtx, rtx, rtx));
static void optimize_reg_copy_1 PROTO((rtx, rtx, rtx));
@@ -600,6 +601,52 @@ validate_equiv_mem (start, reg, memref)
return 0;
}
+
+/* TRUE if X uses any registers for which reg_equiv_replace is true. */
+
+static int
+contains_replace_regs (x, reg_equiv_replace)
+ rtx x;
+ char *reg_equiv_replace;
+{
+ int i, j;
+ char *fmt;
+ enum rtx_code code = GET_CODE (x);
+
+ switch (code)
+ {
+ case CONST_INT:
+ case CONST:
+ case LABEL_REF:
+ case SYMBOL_REF:
+ case CONST_DOUBLE:
+ case PC:
+ case CC0:
+ case HIGH:
+ case LO_SUM:
+ return 0;
+
+ case REG:
+ return reg_equiv_replace[REGNO (x)];
+ }
+
+ fmt = GET_RTX_FORMAT (code);
+ for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
+ switch (fmt[i])
+ {
+ case 'e':
+ if (contains_replace_regs (XEXP (x, i), reg_equiv_replace))
+ return 1;
+ break;
+ case 'E':
+ for (j = XVECLEN (x, i) - 1; j >= 0; j--)
+ if (contains_replace_regs (XVECEXP (x, i, j), reg_equiv_replace))
+ return 1;
+ break;
+ }
+
+ return 0;
+}
/* TRUE if X references a memory location that would be affected by a store
to MEMREF. */
@@ -648,6 +695,9 @@ memref_referenced_p (memref, x)
return 1;
return memref_referenced_p (memref, SET_SRC (x));
+
+ default:
+ break;
}
fmt = GET_RTX_FORMAT (code);
@@ -711,13 +761,11 @@ optimize_reg_copy_1 (insn, dest, src)
int sregno = REGNO (src);
int dregno = REGNO (dest);
+ /* We don't want to mess with hard regs if register classes are small. */
if (sregno == dregno
-#ifdef SMALL_REGISTER_CLASSES
- /* We don't want to mess with hard regs if register classes are small. */
|| (SMALL_REGISTER_CLASSES
&& (sregno < FIRST_PSEUDO_REGISTER
|| dregno < FIRST_PSEUDO_REGISTER))
-#endif
/* We don't see all updates to SP if they are in an auto-inc memory
reference, so we must disallow this optimization on them. */
|| sregno == STACK_POINTER_REGNUM || dregno == STACK_POINTER_REGNUM)
@@ -1005,12 +1053,24 @@ update_equiv_regs ()
in a single basic block, see if the register is always equivalent
to that memory location and if moving the store from INSN to the
insn that set REG is safe. If so, put a REG_EQUIV note on the
- initializing insn. */
+ initializing insn.
+
+ Don't add a REG_EQUIV note if the insn already has one. The existing
+ REG_EQUIV is likely more useful than the one we are adding.
+
+ If one of the regs in the address is marked as reg_equiv_replace,
+ then we can't add this REG_EQUIV note. The reg_equiv_replace
+ optimization may move the set of this register immediately before
+ insn, which puts it after reg_equiv_init_insn[regno], and hence
+ the mention in the REG_EQUIV note would be to an uninitialized
+ pseudo. */
if (GET_CODE (dest) == MEM && GET_CODE (SET_SRC (set)) == REG
&& (regno = REGNO (SET_SRC (set))) >= FIRST_PSEUDO_REGISTER
&& REG_BASIC_BLOCK (regno) >= 0
&& reg_equiv_init_insn[regno] != 0
+ && ! find_reg_note (insn, REG_EQUIV, NULL_RTX)
+ && ! contains_replace_regs (XEXP (dest, 0), reg_equiv_replace)
&& validate_equiv_mem (reg_equiv_init_insn[regno], SET_SRC (set),
dest)
&& ! memref_used_between_p (SET_DEST (set),
@@ -1639,17 +1699,11 @@ block_alloc (b)
{
if (GET_CODE (qty_scratch_rtx[q]) == REG)
abort ();
- PUT_CODE (qty_scratch_rtx[q], REG);
- REGNO (qty_scratch_rtx[q]) = qty_phys_reg[q];
-
+ qty_scratch_rtx[q] = gen_rtx (REG, GET_MODE (qty_scratch_rtx[q]),
+ qty_phys_reg[q]);
scratch_block[scratch_index] = b;
scratch_list[scratch_index++] = qty_scratch_rtx[q];
- /* Must clear the USED field, because it will have been set by
- copy_rtx_if_shared, but the leaf_register code expects that
- it is zero in all REG rtx. copy_rtx_if_shared does not set the
- used bit for REGs, but does for SCRATCHes. */
- qty_scratch_rtx[q]->used = 0;
}
}
}
diff --git a/gcc/longlong.h b/gcc/longlong.h
index e6071547ad7..c3160911eb1 100644
--- a/gcc/longlong.h
+++ b/gcc/longlong.h
@@ -131,6 +131,37 @@
: "r" ((USItype) (x)))
#endif /* __a29k__ */
+#if defined (__arc__)
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ __asm__ ("add.f %1, %4, %5
+ adc %0, %2, %3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "%r" ((USItype) (ah)), \
+ "rIJ" ((USItype) (bh)), \
+ "%r" ((USItype) (al)), \
+ "rIJ" ((USItype) (bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ __asm__ ("sub.f %1, %4, %5
+ sbc %0, %2, %3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "r" ((USItype) (ah)), \
+ "rIJ" ((USItype) (bh)), \
+ "r" ((USItype) (al)), \
+ "rIJ" ((USItype) (bl)))
+/* Call libgcc1 routine. */
+#define umul_ppmm(w1, w0, u, v) \
+do { \
+ DIunion __w; \
+ __w.ll = __umulsidi3 (u, v); \
+ w1 = __w.s.high; \
+ w0 = __w.s.low; \
+} while (0)
+#define __umulsidi3 __umulsidi3
+UDItype __umulsidi3 (USItype, USItype);
+#endif
+
#if defined (__arm__)
#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
__asm__ ("adds %1, %4, %5
@@ -1205,9 +1236,9 @@ extern const UQItype __clz_tab[];
\
if (SI_TYPE_SIZE <= 32) \
{ \
- __a = __xr < (1<<2*__BITS4) \
- ? (__xr < (1<<__BITS4) ? 0 : __BITS4) \
- : (__xr < (1<<3*__BITS4) ? 2*__BITS4 : 3*__BITS4); \
+ __a = __xr < ((USItype)1<<2*__BITS4) \
+ ? (__xr < ((USItype)1<<__BITS4) ? 0 : __BITS4) \
+ : (__xr < ((USItype)1<<3*__BITS4) ? 2*__BITS4 : 3*__BITS4); \
} \
else \
{ \
diff --git a/gcc/loop.c b/gcc/loop.c
index 1c67f1c5159..cd0409f62b6 100644
--- a/gcc/loop.c
+++ b/gcc/loop.c
@@ -1,5 +1,5 @@
/* Perform various loop optimizations, including strength reduction.
- Copyright (C) 1987, 88, 89, 91-6, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 89, 91-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -34,8 +34,8 @@ Boston, MA 02111-1307, USA. */
Most of the complexity is in heuristics to decide when it is worth
while to do these things. */
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "obstack.h"
#include "expr.h"
@@ -258,7 +258,9 @@ static void count_loop_regs_set ();
static void note_addr_stored ();
static int loop_reg_used_before_p ();
static void scan_loop ();
+#if 0
static void replace_call_address ();
+#endif
static rtx skip_consec_insns ();
static int libcall_benefit ();
static void ignore_some_movables ();
@@ -741,11 +743,9 @@ scan_loop (loop_start, end, nregs)
&& n_times_set[REGNO (SET_DEST (set))] == 1
&& ! side_effects_p (SET_SRC (set))
&& ! find_reg_note (p, REG_RETVAL, NULL_RTX)
-#ifdef SMALL_REGISTER_CLASSES
- && ! (SMALL_REGISTER_CLASSES
- && GET_CODE (SET_SRC (set)) == REG
- && REGNO (SET_SRC (set)) < FIRST_PSEUDO_REGISTER)
-#endif
+ && (! SMALL_REGISTER_CLASSES
+ || (! (GET_CODE (SET_SRC (set)) == REG
+ && REGNO (SET_SRC (set)) < FIRST_PSEUDO_REGISTER)))
/* This test is not redundant; SET_SRC (set) might be
a call-clobbered register and the life of REGNO
might span a call. */
@@ -1008,6 +1008,9 @@ record_excess_regs (in_this, not_in_this, output)
&& ! reg_mentioned_p (in_this, not_in_this))
*output = gen_rtx (EXPR_LIST, VOIDmode, in_this, *output);
return;
+
+ default:
+ break;
}
fmt = GET_RTX_FORMAT (code);
@@ -1095,6 +1098,9 @@ reg_in_basic_block_p (insn, reg)
case BARRIER:
/* It's the end of the basic block, so we lose. */
return 0;
+
+ default:
+ break;
}
}
@@ -1251,7 +1257,9 @@ combine_movables (movables, nregs)
bzero (matched_regs, nregs);
matched_regs[regno] = 1;
- for (m1 = movables; m1; m1 = m1->next)
+ /* We want later insns to match the first one. Don't make the first
+ one match any later ones. So start this loop at m->next. */
+ for (m1 = m->next; m1; m1 = m1->next)
if (m != m1 && m1->match == 0 && n_times_used[m1->regno] == 1
/* A reg used outside the loop mustn't be eliminated. */
&& !m1->global
@@ -2043,6 +2051,9 @@ replace_call_address (x, reg, addr)
abort ();
XEXP (x, 0) = addr;
return;
+
+ default:
+ break;
}
fmt = GET_RTX_FORMAT (code);
@@ -2091,6 +2102,9 @@ count_nonfixed_reads (x)
case MEM:
return ((invariant_p (XEXP (x, 0)) != 1)
+ count_nonfixed_reads (XEXP (x, 0)));
+
+ default:
+ break;
}
value = 0;
@@ -2272,6 +2286,8 @@ find_and_verify_loops (f)
current_loop = loop_outer_loop[current_loop];
break;
+ default:
+ break;
}
/* Note that this will mark the NOTE_INSN_LOOP_END note as being in the
@@ -2806,6 +2822,10 @@ invariant_p (x)
/* Don't mess with insns declared volatile. */
if (MEM_VOLATILE_P (x))
return 0;
+ break;
+
+ default:
+ break;
}
fmt = GET_RTX_FORMAT (code);
@@ -3527,11 +3547,20 @@ strength_reduce (scan_start, end, loop_top, insn_count,
for (bl = loop_iv_list; bl; bl = bl->next)
{
rtx src;
+ rtx note;
if (! bl->init_insn)
continue;
- src = SET_SRC (bl->init_set);
+ /* IF INIT_INSN has a REG_EQUAL or REG_EQUIV note and the value
+ is a constant, use the value of that. */
+ if (((note = find_reg_note (bl->init_insn, REG_EQUAL, 0)) != NULL
+ && CONSTANT_P (XEXP (note, 0)))
+ || ((note = find_reg_note (bl->init_insn, REG_EQUIV, 0)) != NULL
+ && CONSTANT_P (XEXP (note, 0))))
+ src = XEXP (note, 0);
+ else
+ src = SET_SRC (bl->init_set);
if (loop_dump_stream)
fprintf (loop_dump_stream,
@@ -3961,15 +3990,21 @@ strength_reduce (scan_start, end, loop_top, insn_count,
other_giv = tv;
}
if (! tv && other_giv
- && REGNO (other_giv->dest_reg) <= max_reg_before_loop
+ && REGNO (other_giv->dest_reg) < max_reg_before_loop
&& (REGNO_LAST_UID (REGNO (other_giv->dest_reg))
== INSN_UID (v->insn))
&& INSN_LUID (v->insn) < INSN_LUID (bl->biv->insn))
auto_inc_opt = 1;
}
/* Check for case where increment is before the the address
- giv. */
- else if (INSN_LUID (v->insn) > INSN_LUID (bl->biv->insn))
+ giv. Do this test in "loop order". */
+ else if ((INSN_LUID (v->insn) > INSN_LUID (bl->biv->insn)
+ && (INSN_LUID (v->insn) < INSN_LUID (scan_start)
+ || (INSN_LUID (bl->biv->insn)
+ > INSN_LUID (scan_start))))
+ || (INSN_LUID (v->insn) < INSN_LUID (scan_start)
+ && (INSN_LUID (scan_start)
+ < INSN_LUID (bl->biv->insn))))
auto_inc_opt = -1;
else
auto_inc_opt = 1;
@@ -4278,14 +4313,8 @@ valid_initial_value_p (x, insn, call_seen, loop_start)
/* Don't use call-clobbered registers across a call which clobbers it. On
some machines, don't use any hard registers at all. */
if (REGNO (x) < FIRST_PSEUDO_REGISTER
- && (
-#ifdef SMALL_REGISTER_CLASSES
- SMALL_REGISTER_CLASSES
-#else
- 0
-#endif
- || (call_used_regs[REGNO (x)] && call_seen))
- )
+ && (SMALL_REGISTER_CLASSES
+ || (call_used_regs[REGNO (x)] && call_seen)))
return 0;
/* Don't use registers that have been clobbered before the start of the
@@ -4356,8 +4385,11 @@ find_mem_givs (x, insn, not_every_iteration, loop_start, loop_end)
v->mem_mode = GET_MODE (x);
}
- return;
}
+ return;
+
+ default:
+ break;
}
/* Recursively scan the subexpressions for other mem refs. */
@@ -4777,8 +4809,7 @@ check_final_value (v, loop_start, loop_end)
break;
}
}
- else if (GET_CODE (PATTERN (p)) == SET
- && SET_DEST (PATTERN (p)) == v->src_reg)
+ else if (reg_set_p (v->src_reg, PATTERN (p)))
biv_increment_seen = 1;
else if (reg_mentioned_p (v->dest_reg, PATTERN (p)))
last_giv_use = p;
@@ -5433,6 +5464,9 @@ simplify_giv_expr (x, benefit)
tem = gen_rtx (MINUS, mode, tem, v->derive_adjustment);
return simplify_giv_expr (tem, benefit);
}
+
+ default:
+ break;
}
/* Fall through to general case. */
@@ -6047,21 +6081,48 @@ check_dbra_loop (loop_end, insn_count, loop_start)
fprintf (loop_dump_stream, "Can reverse loop\n");
/* Now check other conditions:
- initial_value must be zero,
- final_value % add_val == 0, so that when reversed, the
- biv will be zero on the last iteration.
+
+ The increment must be a constant, as must the initial value,
+ and the comparison code must be LT.
This test can probably be improved since +/- 1 in the constant
can be obtained by changing LT to LE and vice versa; this is
confusing. */
- if (comparison && bl->initial_value == const0_rtx
+ if (comparison
&& GET_CODE (XEXP (comparison, 1)) == CONST_INT
/* LE gets turned into LT */
&& GET_CODE (comparison) == LT
- && (INTVAL (XEXP (comparison, 1))
- % INTVAL (bl->biv->add_val)) == 0)
+ && GET_CODE (bl->initial_value) == CONST_INT)
{
+ HOST_WIDE_INT add_val, comparison_val;
+ rtx initial_value;
+
+ add_val = INTVAL (bl->biv->add_val);
+ comparison_val = INTVAL (XEXP (comparison, 1));
+ initial_value = bl->initial_value;
+
+ /* Normalize the initial value if it has no other use
+ except as a counter. This will allow a few more loops
+ to be reversed. */
+ if (no_use_except_counting)
+ {
+ comparison_val = comparison_val - INTVAL (bl->initial_value);
+ initial_value = const0_rtx;
+ }
+
+ /* If the initial value is not zero, or if the comparison
+ value is not an exact multiple of the increment, then we
+ can not reverse this loop. */
+ if (initial_value != const0_rtx
+ || (comparison_val % add_val) != 0)
+ return 0;
+
+ /* Reset these in case we normalized the initial value
+ and comparison value above. */
+ bl->initial_value = initial_value;
+ XEXP (comparison, 1) = GEN_INT (comparison_val);
+
/* Register will always be nonnegative, with value
0 on last iteration if loop reversed */
@@ -6574,6 +6635,9 @@ maybe_eliminate_biv_1 (x, insn, bl, eliminate_p, where)
if (v->giv_type == DEST_ADDR && v->location == &XEXP (x, 0))
return 1;
break;
+
+ default:
+ break;
}
/* See if any subexpression fails elimination. */
@@ -6891,6 +6955,9 @@ get_condition (jump, earliest)
if (uconst_val != 0)
code = GTU, op1 = GEN_INT (uconst_val - 1);
break;
+
+ default:
+ break;
}
}
diff --git a/gcc/machmode.def b/gcc/machmode.def
index 625586cd96f..88af09b913e 100644
--- a/gcc/machmode.def
+++ b/gcc/machmode.def
@@ -1,6 +1,6 @@
/* This file contains the definitions and documentation for the
machine modes used in the the GNU compiler.
- Copyright (C) 1987, 1992, 1994 Free Software Foundation, Inc.
+ Copyright (C) 1987, 1992, 1994, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -84,6 +84,8 @@ DEF_MACHMODE (XFmode, "XF", MODE_FLOAT, 12, 12, TFmode) /* IEEE extended */
DEF_MACHMODE (TFmode, "TF", MODE_FLOAT, 16, 16, VOIDmode)
/* Complex modes. */
+DEF_MACHMODE (QCmode, "QC", MODE_COMPLEX_FLOAT, 2, 1, HCmode)
+DEF_MACHMODE (HCmode, "HC", MODE_COMPLEX_FLOAT, 4, 2, SCmode)
DEF_MACHMODE (SCmode, "SC", MODE_COMPLEX_FLOAT, 8, 4, DCmode)
DEF_MACHMODE (DCmode, "DC", MODE_COMPLEX_FLOAT, 16, 8, XCmode)
DEF_MACHMODE (XCmode, "XC", MODE_COMPLEX_FLOAT, 24, 12, TCmode)
diff --git a/gcc/make-cc1.com b/gcc/make-cc1.com
index 9f816b78d74..618fc2a8d33 100644
--- a/gcc/make-cc1.com
+++ b/gcc/make-cc1.com
@@ -24,7 +24,7 @@ $!
$! Compiler-specific setup (assume GNU C, then override as necessary):
$!
$ CC = "gcc"
-$ CFLAGS = "/Debug/noVerbos/CC1=""-mpcc-alignment"""
+$ CFLAGS = "/Opt=2/Debug/noVerbos/CC1=""-mpcc-alignment"""
$ LIBS = "gnu_cc:[000000]gcclib.olb/Libr,sys$library:vaxcrtl.olb/Libr"
$ if p1.eqs."GNUC"
$ then
@@ -295,16 +295,17 @@ $if (f$search("C-PARSE.Y") .eqs. "") then goto yes_yfiles
$if (f$cvtime(f$file_attributes("C-PARSE.IN","RDT")).gts. -
f$cvtime(f$file_attributes("C-PARSE.Y","RDT"))) -
then goto yes_yfiles
-$if (f$search("OBJC-PARSE.Y") .eqs. "") then goto yes_yfiles
+$if f$parse("[.OBJC]").eqs."" then create/Directory [.objc]
+$if (f$search("[.OBJC]OBJC-PARSE.Y") .eqs. "") then goto yes_yfiles
$if (f$cvtime(f$file_attributes("C-PARSE.IN","RDT")).gts. -
- f$cvtime(f$file_attributes("OBJC-PARSE.Y","RDT"))) -
+ f$cvtime(f$file_attributes("[.OBJC]OBJC-PARSE.Y","RDT"))) -
then goto yes_yfiles
$GOTO no_yfiles
$yes_yfiles:
-$echo "Now processing c-parse.in to generate c-parse.y and objc-parse.y."
-$ edit/tpu/nojournal/nosection/nodisplay/command=sys$input
+$echo "Now processing c-parse.in to generate c-parse.y and [.objc]objc-parse.y."
+$ EDIT/Tpu/noJournal/noSection/noDisplay/Command=sys$input:
!
-! Read c-parse.in, write c-parse.y and objc-parse.y, depending on
+! Read c-parse.in, write c-parse.y and objc/objc-parse.y, depending on
! paired lines of "ifc" & "end ifc" and "ifobjc" & "end ifobjc" to
! control what goes into each file. Most lines will be common to
! both (hence not bracketed by either control pair). Mismatched
@@ -344,7 +345,7 @@ $ edit/tpu/nojournal/nosection/nodisplay/command=sys$input
ENDLOOP;
WRITE_FILE(c, "c-parse.y");
- WRITE_FILE(objc, "objc-parse.y");
+ WRITE_FILE(objc, "[.objc]objc-parse.y");
QUIT
$ endif
$no_yfiles:
diff --git a/gcc/make-cccp.com b/gcc/make-cccp.com
index e383f310df2..342c71015a4 100644
--- a/gcc/make-cccp.com
+++ b/gcc/make-cccp.com
@@ -18,7 +18,7 @@ $!
$! Compiler-specific setup (assume GNU C, then override as necessary):
$!
$ CC = "gcc"
-$ CFLAGS = "/Debug/noVerbos"
+$ CFLAGS = "/Opt=2/Debug/noVerbos"
$ LIBS = "gnu_cc:[000000]gcclib.olb/Libr,sys$library:vaxcrtl.olb/Libr"
$ if p1.nes."GNUC"
$ then
@@ -33,6 +33,7 @@ $ else
$ if p1.eqs."DECC"
$ then
$ if f$trnlnm("DECC$CC_DEFAULT").nes."" then CC = "cc/DECC"
+$ CC = CC + "/Prefix=All"
$ LIBS = "alloca.obj" !DECC$SHR will be found implicitly by linker
$ define/noLog SYS DECC$LIBRARY_INCLUDE:
$ else
@@ -93,8 +94,9 @@ $skip_yacc:
$ echo " (Ignore any warning about not finding file ""bison.simple"".)"
$ set verify
$ 'CC''CFLAGS' cexp.c
+$ 'CC''CFLAGS'/Define="PREFIX=""_dummy_""" prefix.c
$!'f$verify(0)
-$
+$
$! In case there's no builtin alloca support, use the C simulation.
$ if f$locate("alloca.obj",f$edit(LIBS,"lowercase")).lt.f$length(LIBS)
$ then
@@ -108,7 +110,7 @@ $Link:
$ echo " Linking the preprocessor."
$ set verify
$ 'LINK''LDFLAGS'/Exe=gcc-cpp.exe -
- cccp.obj,cexp.obj,version.obj,version.opt/Opt,-
+ cccp.obj,cexp.obj,prefix.obj,version.obj,version.opt/Opt,-
'LIBS'
$!'f$verify(0)
$!
diff --git a/gcc/make-gcc.com b/gcc/make-gcc.com
index 03235eecd14..58632eb10c6 100644
--- a/gcc/make-gcc.com
+++ b/gcc/make-gcc.com
@@ -1,32 +1,71 @@
+$! make-gcc.com -- VMS build procedure for GNU CC.
$!
-$! Build GCC
+$! Usage:
+$! $ @make-gcc.com [host-compiler] [component list]
$!
-$! Set the def dir to proper place for use in batch. Works for interactive too.
-$flnm = f$enviroment("PROCEDURE") ! get current procedure name
-$set default 'f$parse(flnm,,,"DEVICE")''f$parse(flnm,,,"DIRECTORY")'
+$! where [host-compiler] is one of "GNUC", "VAXC", "DECC";
+$! default when none specified is "GNUC",
+$! and where [component list] is space separated list beginning
+$! with "CC1" and optionally followed by "CC1PLUS"; default if
+$! nothing is specified is "CC1" (the C compiler); choosing
+$! "CC1PLUS" (the C++ compiler) without also specifying "CC1"
+$! will not work. (See make-cc1.com for other potential component
+$! values; but unless you're developing or debugging the compiler
+$! suite itself, the two above are the only ones of interest.)
$!
+$! For a "stage 2" or subsequent build, always specify GNUC as
+$! the host compiler.
$!
-$! First, build the preprocessor.
+$! Note:
+$! Even though it is possible to build with VAX C or DEC C,
+$! a prior version of the gcc-vms binary distribution is still
+$! required to be able to use the newly built GNU CC compiler(s),
+$! because the gcc source distribution does not supply the driver
+$! program which the DCL command "GCC" implements or the C header
+$! files and gcclib support library.
+$!
+$
+$!
+$! Change working directory to the location of this procedure.
+$!
+$ flnm = f$enviroment("PROCEDURE") !get current procedure name
+$ set default 'f$parse(flnm,,,"DEVICE")''f$parse(flnm,,,"DIRECTORY")'
+$
+$!
+$! First, we build the preprocessor.
$!
$ @make-cccp.com 'p1' 'p2'
$!
-$! To build the GNU C++ compiler in addition to the GNU CC compiler, comment
-$! out the `@make-cc1' line, and uncomment the `@make-cc1 cc1 cc1plus' line.
-$! To also build Objective-C, add "cc1obj" to the list.
+$! To install it, copy the resulting GCC-CPP.EXE to the GNU_CC:[000000]
+$! directory.
+$!
+$
+$!
+$! Now we build the C compiler. To build the C++ compiler too, use
+$! $ @make-gcc GNUC cc1 cc1plus
+$! when invoking this command procedure. Note that you should not
+$! do this for a "stage 1" build.
+$!
+$ @make-cc1.com 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8'
$!
-$! See the file make-cc1.com for a complete list of options.
+$! To install it (them), copy the resulting GCC-CC1.EXE (and GCC-CC1PLUS.EXE)
+$! to the GNU_CC:[000000] directory.
$!
-$ @make-cc1.com 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8'
-$! @make-cc1 cc1 cc1plus
+$
$!
+$! Now we build the `libgcc2' support library. It will need to be merged
+$! with the existing gcclib.olb library.
$!
-$! Now build the library routines that are required. These will be placed in
-$! libgcc2.olb. To install, extract all of the modules from libgcc2.olb and
-$! add them to gnu_cc:[000000]gcclib.olb. You may have to delete the eprintf
-$! and new modules from the gnu_cc:[000000]gcclib.olb, since libgcc2 supplies
-$! these same routines with different module names.
+$ @make-l2.com 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8'
$!
-$! Now build gcclib2.olb
+$! To install, save a backup copy of GNU_CC:[000000]GCCLIB.OLB somewhere,
+$! then update the original using the newly created LIBGCC2.OLB via
+$! $ library/Obj libgcc2.olb /Extract=*/Output=libgcc2.obj
+$! $ library/Obj gnu_cc:[000000]gcclib.olb libgcc2.obj /Replace
$!
-$ @make-l2.com
+$! Depending upon how old your present gcclib library is, you might have
+$! to delete some modules, such as `eprintf' and `new', to avoid conflicting
+$! symbols from obsolete routines. After deleting any such modules, just
+$! repeat the `library/replace' step.
$!
+$ exit
diff --git a/gcc/make-l2.com b/gcc/make-l2.com
index d22ad9b0f85..9f45e64d95d 100644
--- a/gcc/make-l2.com
+++ b/gcc/make-l2.com
@@ -1,36 +1,44 @@
-$! Set the def dir to proper place for use in batch. Works for interactive too.
-$flnm = f$enviroment("PROCEDURE") ! get current procedure name
-$set default 'f$parse(flnm,,,"DEVICE")''f$parse(flnm,,,"DIRECTORY")'
+$! make-l2.com -- VMS build procedure for libgcc2.
+$
+$! Change working directory to the location of this command procedure.
+$ flnm = f$enviroment("PROCEDURE") !get current procedure name
+$ set default 'f$parse(flnm,,,"DEVICE")''f$parse(flnm,,,"DIRECTORY")'
$!
-$! Command file to build libgcc2.olb. You should only run this once you
+$! Command file to build libgcc2.olb. You should only run this once you
$! have the current compiler installed, otherwise some of the builtins will
$! not be recognized. Once you have built libgcc2.olb, you can merge this
$! with gnu_cc:[000000]gcclib.olb
$!
-$! All of the source code is assumed to be in libgcc2.c, and a list of the
+$! All of the C source code is assumed to be in libgcc2.c, and a list of the
$! modules that we need from there is in libgcc2.list (which is generated
-$! when config-gcc.com is run).
+$! when vmsconfig.com is run). The C++ source is found in the [.cp.inc]
+$! directory and managed via libgcc2-cxx.list.
$!
-$if f$search("gcc-cc1.exe").eqs.""
-$ then
+$ if f$search("gcc-cc1.exe").eqs.""
+$ then
$ gcc_cc1:=$gnu_cc:[000000]gcc-cc1
$ if f$extract(0,1,f$trnlnm("GNU_CC_VERSION")).eqs."1" then goto nocompile
-$ else
+$ else
$ gcc_cc1:=$sys$disk:[]gcc-cc1
-$ endif
+$ endif
$!
-$if f$search("gcc-cpp.exe").eqs.""
-$ then
+$ if f$search("gcc-cpp.exe").eqs.""
+$ then
$ gcc_cpp:=$gnu_cc:[000000]gcc-cpp
$ if f$extract(0,1,f$trnlnm("GNU_CC_VERSION")).eqs."1" then goto nocompile
$ Version:='f$trnlnm("GNU_CC_VERSION")'
-$ else
+$ else
$ gcc_cpp:=$sys$disk:[]gcc-cpp
$ open ifile$ version.opt
$ read ifile$ line
$ close ifile$
-$ Version=line-"ident="""-"""
-$ endif
+$ Version=line - "ident=""" - """
+$ endif
+$!
+$ if f$search("gcc-cc1plus.exe").eqs.""
+$ then gcc_cxx = "$gnu_cc:[000000]gcc-cc1plus"
+$ else gcc_cxx = "$sys$disk:[]gcc-cc1plus"
+$ endif
$!
$gcc_as:=$gnu_cc:[000000]gcc-as
$cpp_file:=sys$scratch:gcc_'f$getjpi(0,"pid")'.cpp
@@ -48,9 +56,12 @@ $compile:
$lib/create libgcc2.olb
$on error then goto c_err
$on control_y then goto c_err
+$
+$if f$trnlnm("IFILE$").nes."" then close/noLog ifile$
$open ifile$ libgcc2.list
-$loop: read ifile$ line/end=c_done
+$loop:
$!
+$read ifile$ line/end=c_done
$i=0
$loop1:
$flnm=f$element(i," ",line)
@@ -69,8 +80,8 @@ $! We do this by hand, since the VMS compiler driver does not have a way
$! of specifying an alternate location for the compiler executables.
$!
$ gcc_cpp "-I[]" "-I[.ginclude]" "-D''flnm'" libgcc2.c 'cpp_file'
-$ gcc_cc1 'cpp_file' -dumpbase 'objname' -
- -quiet -mgnu -g "-O1" -mvaxc-alignment -o 's_file'
+$ gcc_cc1 'cpp_file' -dumpbase 'objname' -fexceptions -
+ -quiet -mgnu -g "-O1" -mvaxc-alignment -o 's_file'
$ delete/nolog 'cpp_file';
$ gcc_as "-vGNU CC V''Version'" 's_file' -o 'objname'.OBJ
$! Assemble again, preserving lowercase symbol names this time.
@@ -82,13 +93,51 @@ $ delete/nolog 'objname'.obj;,'objname'-c.obj;
$!
$goto loop1
$!
-$goto loop
-$!
$! In case of error or abort, go here (In order to close file).
$!
-$c_err: !'f$verify(0)
+$c_err: !'f$verify(0)
$close ifile$
$ exit %x2c
$!
$c_done:
$close ifile$
+$
+$
+$ EXIT
+$ !gcc-2.8.0: C++ libgcc2 code disabled since it's not adequately tested
+$
+$!
+$ p1 = p1+" "+p2+" "+p3+" "+p4+" "+p5+" "+p6+" "+p7+" "+p8
+$ p1 = " " + f$edit(p1,"COMPRESS,TRIM,UPCASE") + " "
+$! (note: substring locations can only be equal when neither string is present)
+$ if f$locate(" CC1PLUS ",p1).eq.f$locate(" CXX ",p1) then goto cxx_done
+$ if f$search("libgcc2-cxx.list").eqs."" then goto cxx_done
+$!
+$ open/read ifile$ libgcc2-cxx.list
+$cxx_line_loop:
+$ read ifile$ line/end=cxx_done
+$ i = 0
+$cxx_file_loop:
+$ flnm = f$element(i,",",line)
+$ i = i + 1
+$ if flnm.eqs."" .or. flnm.eqs."," then goto cxx_line_loop
+$ write sys$output "$ gcc/plus/debug ''flnm'.cc"
+$ objname = flnm
+$!
+$ gcc_cpp -+ "-I[]" "-I[.ginclude]" "-I[.cp.inc]" [.cp]'flnm'.cc 'cpp_file'
+$ gcc_cxx 'cpp_file' -dumpbase 'objname' -fexceptions -
+ -quiet -mgnu -g "-O1" -mvaxc-alignment -o 's_file'
+$ delete/nolog 'cpp_file';
+$ gcc_as "-vGNU CC V''Version'" 's_file' -o 'objname'.OBJ
+$! Assemble again, preserving lowercase symbol names this time.
+$ gcc_as "-vGNU CC V''Version'" -h3 's_file' -o 'objname'-c.OBJ
+$ delete/nolog 's_file';
+$
+$ library libgcc2.olb 'objname'.obj,'objname'-c.obj
+$ delete/nolog 'objname'.obj;,'objname'-c.obj;
+$!
+$ goto cxx_file_loop
+$!
+$cxx_done:
+$ close ifile$
+$ exit
diff --git a/gcc/md.texi b/gcc/md.texi
index 4fe759a114a..908c6887a85 100644
--- a/gcc/md.texi
+++ b/gcc/md.texi
@@ -174,7 +174,9 @@ Operand numbers must be chosen consecutively counting from zero in
each instruction pattern. There may be only one @code{match_operand}
expression in the pattern for each operand number. Usually operands
are numbered in the order of appearance in @code{match_operand}
-expressions.
+expressions. In the case of a @code{define_expand}, any operand numbers
+used only in @code{match_dup} expressions have higher values than all
+other operand numbers.
@var{predicate} is a string that is the name of a C function that accepts two
arguments, an expression and a machine mode. During matching, the
@@ -1667,7 +1669,7 @@ now in existence use constraints.
Here is a table of the instruction names that are meaningful in the RTL
generation pass of the compiler. Giving one of these names to an
instruction pattern tells the RTL generation pass that it can use the
-pattern in to accomplish a certain task.
+pattern to accomplish a certain task.
@table @asis
@cindex @code{mov@var{m}} instruction pattern
@@ -1733,23 +1735,23 @@ scratch registers after reload, you must define
patterns @samp{reload_in@var{m}} or @samp{reload_out@var{m}} to handle
them. @xref{Register Classes}.
-The constraints on a @samp{move@var{m}} must permit moving any hard
+The constraints on a @samp{mov@var{m}} must permit moving any hard
register to any other hard register provided that
@code{HARD_REGNO_MODE_OK} permits mode @var{m} in both registers and
@code{REGISTER_MOVE_COST} applied to their classes returns a value of 2.
-It is obligatory to support floating point @samp{move@var{m}}
+It is obligatory to support floating point @samp{mov@var{m}}
instructions into and out of any registers that can hold fixed point
values, because unions and structures (which have modes @code{SImode} or
@code{DImode}) can be in those registers and they may have floating
point members.
-There may also be a need to support fixed point @samp{move@var{m}}
+There may also be a need to support fixed point @samp{mov@var{m}}
instructions in and out of floating point registers. Unfortunately, I
have forgotten why this was so, and I don't know whether it is still
true. If @code{HARD_REGNO_MODE_OK} rejects fixed point values in
floating point registers, then the constraints of the fixed point
-@samp{move@var{m}} instructions must be designed to avoid ever trying to
+@samp{mov@var{m}} instructions must be designed to avoid ever trying to
reload into a floating point register.
@cindex @code{reload_in} instruction pattern
@@ -1947,7 +1949,14 @@ The @samp{cmp@var{m}} patterns should be used instead.
@item @samp{movstr@var{m}}
Block move instruction. The addresses of the destination and source
strings are the first two operands, and both are in mode @code{Pmode}.
+
The number of bytes to move is the third operand, in mode @var{m}.
+Usually, you specify @code{word_mode} for @var{m}. However, if you can
+generate better code knowing the range of valid lengths is smaller than
+those representable in a full word, you should provide a pattern with a
+mode corresponding to the range of values you can handle efficiently
+(e.g., @code{QImode} for values in the range 0--127; note we avoid numbers
+that appear negative) and also a pattern with @code{word_mode}.
The fourth operand is the known shared alignment of the source and
destination, in the form of a @code{const_int} rtx. Thus, if the
@@ -1961,7 +1970,8 @@ that the source and destination strings might overlap.
@item @samp{clrstr@var{m}}
Block clear instruction. The addresses of the destination string is the
first operand, in mode @code{Pmode}. The number of bytes to clear is
-the second operand, in mode @var{m}.
+the second operand, in mode @var{m}. See @samp{movstr@var{m}} for
+a discussion of the choice of mode.
The third operand is the known alignment of the destination, in the form
of a @code{const_int} rtx. Thus, if the compiler knows that the
@@ -2390,9 +2400,17 @@ nonlocal gotos and a @code{reg} in the other two cases.
@cindex @code{allocate_stack} instruction pattern
@item @samp{allocate_stack}
-Subtract (or add if @code{STACK_GROWS_DOWNWARD} is undefined) operand 0 from
+Subtract (or add if @code{STACK_GROWS_DOWNWARD} is undefined) operand 1 from
the stack pointer to create space for dynamically allocated data.
+Store the resultant pointer to this space into operand 0. If you
+are allocating space from the main stack, do this by emitting a
+move insn to copy @code{virtual_stack_dynamic_rtx} to operand 0.
+If you are allocating the space elsewhere, generate code to copy the
+location of the space to operand 0. In the latter case, you must
+ensure this space gets freed when the corresponding space on the main
+stack is free.
+
Do not define this pattern if all that must be done is the subtraction.
Some machines require other operations such as stack probes or
maintaining the back chain. Define this pattern to emit those
@@ -2410,6 +2428,16 @@ this pattern to emit the required instructions.
No operands are provided.
+@cindex @code{check_stack} instruction pattern
+@item @samp{check_stack}
+If stack checking cannot be done on your system by probing the stack with
+a load or store instruction (@pxref{Stack Checking}), define this pattern
+to perform the needed check and signaling an error if the stack
+has overflowed. The single operand is the location in the stack furthest
+from the current stack pointer that you need to validate. Normally,
+on machines where this pattern is needed, you would obtain the stack
+limit from a global or thread-specific variable or register.
+
@cindex @code{nonlocal_goto} instruction pattern
@item @samp{nonlocal_goto}
Emit code to generate a non-local goto, e.g., a jump from one function
@@ -2436,6 +2464,24 @@ normally need to define this pattern. A typical reason why you might
need this pattern is if some value, such as a pointer to a global table,
must be restored when the frame pointer is restored. There are no
arguments.
+
+@cindex @code{exception_receiver} instruction pattern
+@item @samp{exception_receiver}
+This pattern, if defined, contains code needed at the site of an
+exception handler that isn't needed at the site of a nonlocal goto. You
+will not normally need to define this pattern. A typical reason why you
+might need this pattern is if some value, such as a pointer to a global
+table, must be restored after control flow is branched to the handler of
+an exception. There are no arguments.
+
+@cindex @code{builtin_setjmp_receiver} instruction pattern
+@item @samp{builtin_setjmp_receiver}
+This pattern, if defined, contains code needed at the site of an
+builtin setjmp that isn't needed at the site of a nonlocal goto. You
+will not normally need to define this pattern. A typical reason why you
+might need this pattern is if some value, such as a pointer to a global
+table, must be restored. This pattern is called immediate after the
+call to @code{__dummy} has been emitted. There are no arguments.
@end table
@node Pattern Ordering
@@ -2711,6 +2757,7 @@ converted into the appropriate multiplication by a power of two.
@cindex @code{ior}, canonicalization of
@cindex @code{and}, canonicalization of
@cindex De Morgan's law
+@item
De`Morgan's Law is used to move bitwise negation inside a bitwise
logical-and or logical-or operation. If this results in only one
operand being a @code{not} expression, it will be the first one.
diff --git a/gcc/mips-tdump.c b/gcc/mips-tdump.c
index 3eb4ef84db0..edebf022c1e 100644
--- a/gcc/mips-tdump.c
+++ b/gcc/mips-tdump.c
@@ -1,5 +1,5 @@
/* Read and manage MIPS symbol tables from object modules.
- Copyright (C) 1991, 1994, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1991, 1994, 1995, 1997 Free Software Foundation, Inc.
Contributed by hartzell@boulder.colorado.edu,
Rewritten by meissner@osf.org.
@@ -20,13 +20,13 @@ 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 <stdio.h>
#include <sys/types.h>
#include <sys/file.h>
#include <time.h>
#include <fcntl.h>
#include <errno.h>
-#include "config.h"
#ifdef index
#undef index
diff --git a/gcc/mips-tfile.c b/gcc/mips-tfile.c
index 4cd18d0fb46..9f12c388727 100644
--- a/gcc/mips-tfile.c
+++ b/gcc/mips-tfile.c
@@ -2,8 +2,8 @@
contain debugging information specified by the GNU compiler
in the form of comments (the mips assembler does not support
assembly access to debug information).
- Copyright (C) 1991, 1993, 1994. 1995 Free Software Foundation, Inc.
- Contributed by Michael Meissner, meissner@osf.org
+ Copyright (C) 1991, 93, 94, 95, 97, 1998 Free Software Foundation, Inc.
+ Contributed by Michael Meissner (meissner@cygnus.com).
This file is part of GNU CC.
@@ -599,12 +599,12 @@ Boston, MA 02111-1307, USA. */
*/
+#include "config.h"
#ifdef __STDC__
#include <stdarg.h>
#else
#include <varargs.h>
#endif
-#include "config.h"
#include <stdio.h>
#ifndef __SABER__
@@ -1755,10 +1755,14 @@ STATIC void free_thead __proto((thead_t *));
STATIC char *local_index __proto((const char *, int));
STATIC char *local_rindex __proto((const char *, int));
-#ifndef __alpha
+#ifdef NEED_DECLARTION_SBRK
extern char *sbrk __proto((int));
+#endif
+
+#ifdef NEED_DECLARATION_FREE
extern void free __proto((PTR_T));
#endif
+
extern char *mktemp __proto((char *));
extern long strtol __proto((const char *, char **, int));
@@ -1767,7 +1771,7 @@ extern int optind;
extern int opterr;
extern char *version_string;
#ifndef NO_SYS_SIGLIST
-#ifndef DONT_DECLARE_SYS_SIGLIST
+#ifndef SYS_SIGLIST_DECLARED
extern char *sys_siglist[NSIG + 1];
#endif
#endif
@@ -3294,14 +3298,22 @@ parse_def (name_start)
}
- t.extra_sizes = (tag_start != (char *) 0);
+ if (storage_class == sc_Bits)
+ {
+ t.bitfield = 1;
+ t.extra_sizes = 1;
+ }
+ else
+ t.extra_sizes = 0;
+
if (t.num_dims > 0)
{
- int diff = t.num_dims - t.num_sizes;
+ int num_real_sizes = t.num_sizes - t.extra_sizes;
+ int diff = t.num_dims - num_real_sizes;
int i = t.num_dims - 1;
int j;
- if (t.num_sizes != 1 || diff < 0)
+ if (num_real_sizes != 1 || diff < 0)
{
error_line = __LINE__;
saber_stop ();
@@ -3312,7 +3324,6 @@ parse_def (name_start)
and sizes were passed, creating extra sizes for multiply
dimensioned arrays if not passed. */
- t.extra_sizes = 0;
if (diff)
{
for (j = (sizeof (t.sizes) / sizeof (t.sizes[0])) - 1; j >= 0; j--)
@@ -3329,14 +3340,6 @@ parse_def (name_start)
}
}
- else if (symbol_type == st_Member && t.num_sizes - t.extra_sizes == 1)
- { /* Is this a bitfield? This is indicated by a structure member
- having a size field that isn't an array. */
-
- t.bitfield = 1;
- }
-
-
/* Except for enumeration members & begin/ending of scopes, put the
type word in the aux. symbol table. */
diff --git a/gcc/objc/Make-lang.in b/gcc/objc/Make-lang.in
index b19d5166832..4dbb041186f 100644
--- a/gcc/objc/Make-lang.in
+++ b/gcc/objc/Make-lang.in
@@ -1,5 +1,5 @@
# Top level makefile fragment for GNU Objective-C
-# Copyright (C) 1997 Free Software Foundation, Inc.
+# Copyright (C) 1997, 1998 Free Software Foundation, Inc.
#This file is part of GNU CC.
@@ -59,23 +59,19 @@ OBJECTIVE-C objective-c: cc1obj objc-runtime
# The Objective C thread file
OBJC_THREAD_FILE=thr-$(GCC_THREAD_FILE)
-# C common object files required by Objective C.
-OBJC_CCOMMON = c-lex.o c-pragma.o c-decl.o c-typeck.o c-convert.o \
- c-aux-info.o c-common.o c-iterate.o
-
# Language-specific object files for Objective C.
-OBJC_OBJS = objc-parse.o objc-act.o
+OBJC_OBJS = objc-parse.o objc-act.o $(C_AND_OBJC_OBJS)
-cc1obj: $(P) $(OBJC_OBJS) $(OBJC_CCOMMON) $(OBJS) $(BC_OBJS) $(LIBDEPS)
+cc1obj: $(P) $(OBJC_OBJS) $(OBJS) $(BC_OBJS) $(LIBDEPS)
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(OBJC_OBJS) $(OBJS) \
- $(OBJC_CCOMMON) $(BC_OBJS) $(LIBS)
+ $(BC_OBJS) $(LIBS)
# Objective C language specific files.
objc-parse.o : $(srcdir)/objc/objc-parse.c \
$(CONFIG_H) $(TREE_H) \
$(srcdir)/c-lex.h $(srcdir)/c-tree.h $(srcdir)/input.h \
- $(srcdir)/flags.h $(srcdir)/objc/objc-act.h
+ $(srcdir)/flags.h $(srcdir)/output.h $(srcdir)/objc/objc-act.h
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -I$(srcdir)/objc \
-c $(srcdir)/objc/objc-parse.c
@@ -94,7 +90,7 @@ objc-act.o : $(srcdir)/objc/objc-act.c \
$(CONFIG_H) $(TREE_H) $(RTL_H) \
$(srcdir)/c-tree.h $(srcdir)/c-lex.h \
$(srcdir)/flags.h $(srcdir)/objc/objc-act.h $(srcdir)/input.h \
- $(srcdir)/function.h $(srcdir)/c-parse.h
+ $(srcdir)/function.h $(srcdir)/output.h $(srcdir)/c-parse.h
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -I$(srcdir)/objc \
-c $(srcdir)/objc/objc-act.c
@@ -125,64 +121,65 @@ OBJC_O = objc/hash.o objc/sarray.o \
objc/thr.o objc/linking.o \
objc/$(OBJC_THREAD_FILE).o
-objc/hash.o: $(srcdir)/objc/hash.c
+objc/hash.o: $(srcdir)/objc/hash.c $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
-c $(srcdir)/objc/hash.c -o $@
-objc/sarray.o: $(srcdir)/objc/sarray.c
+objc/sarray.o: $(srcdir)/objc/sarray.c $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
-c $(srcdir)/objc/sarray.c -o $@
-objc/class.o: $(srcdir)/objc/class.c
+objc/class.o: $(srcdir)/objc/class.c $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
-c $(srcdir)/objc/class.c -o $@
-objc/sendmsg.o: $(srcdir)/objc/sendmsg.c
- $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
+objc/sendmsg.o: $(srcdir)/objc/sendmsg.c $(GCC_PASSES) objc/runtime-info.h
+ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) -Iobjc \
-c $(srcdir)/objc/sendmsg.c -o $@
-objc/init.o: $(srcdir)/objc/init.c
+objc/init.o: $(srcdir)/objc/init.c $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
-c $(srcdir)/objc/init.c -o $@
-objc/archive.o: $(srcdir)/objc/archive.c
+objc/archive.o: $(srcdir)/objc/archive.c $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
-c $(srcdir)/objc/archive.c -o $@
-objc/encoding.o: $(srcdir)/objc/encoding.c
+objc/encoding.o: $(srcdir)/objc/encoding.c $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
-c $(srcdir)/objc/encoding.c -o $@
-objc/selector.o: $(srcdir)/objc/selector.c
+objc/selector.o: $(srcdir)/objc/selector.c $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
-c $(srcdir)/objc/selector.c -o $@
-objc/objects.o: $(srcdir)/objc/objects.c
+objc/objects.o: $(srcdir)/objc/objects.c $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
-c $(srcdir)/objc/objects.c -o $@
-objc/misc.o: $(srcdir)/objc/misc.c
+objc/misc.o: $(srcdir)/objc/misc.c $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
-c $(srcdir)/objc/misc.c -o $@
-objc/NXConstStr.o: $(srcdir)/objc/NXConstStr.m
+objc/NXConstStr.o: $(srcdir)/objc/NXConstStr.m $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
- -c $(srcdir)/objc/NXConstStr.m -o $@
-objc/Object.o: $(srcdir)/objc/Object.m
+ -fgnu-runtime -c $(srcdir)/objc/NXConstStr.m -o $@
+objc/Object.o: $(srcdir)/objc/Object.m $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
- -c $(srcdir)/objc/Object.m -o $@
-objc/Protocol.o: $(srcdir)/objc/Protocol.m
+ -fgnu-runtime -c $(srcdir)/objc/Object.m -o $@
+objc/Protocol.o: $(srcdir)/objc/Protocol.m $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
- -c $(srcdir)/objc/Protocol.m -o $@
-objc/thr.o: $(srcdir)/objc/thr.h $(srcdir)/objc/thr.c
+ -fgnu-runtime -c $(srcdir)/objc/Protocol.m -o $@
+objc/thr.o: $(srcdir)/objc/thr.h $(srcdir)/objc/thr.c $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
-c $(srcdir)/objc/thr.c -o $@
-objc/$(OBJC_THREAD_FILE).o: $(srcdir)/objc/$(OBJC_THREAD_FILE).c
+objc/$(OBJC_THREAD_FILE).o: $(srcdir)/objc/$(OBJC_THREAD_FILE).c $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
-c $(srcdir)/objc/$(OBJC_THREAD_FILE).c -o $@
-objc/nil_method.o: $(srcdir)/objc/nil_method.c
+objc/nil_method.o: $(srcdir)/objc/nil_method.c $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
-c $(srcdir)/objc/nil_method.c -o $@
-objc/linking.o: $(srcdir)/objc/linking.m
+objc/linking.o: $(srcdir)/objc/linking.m $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
- -c $(srcdir)/objc/linking.m -o $@
-$(srcdir)/objc/libobjc_entry.o: $(srcdir)/objc/libobjc_entry.c
+ -fgnu-runtime -c $(srcdir)/objc/linking.m -o $@
+
+objc/libobjc_entry.o: $(srcdir)/objc/libobjc_entry.c $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \
-c $(srcdir)/objc/libobjc_entry.c -o $@
# Build the Objective C runtime library.
libobjc.a: cc1obj specs stmp-int-hdrs libgcc2.ready \
- $(USE_COLLECT2) $(EXTRA_PARTS) $(OBJC_O)
+ $(USE_COLLECT2) $(EXTRA_PARTS) objc/runtime-info.h $(OBJC_O)
-rm -f libobjc.a
$(AR) $(AR_FLAGS) libobjc.a $(OBJC_O)
-if $(RANLIB_TEST) ; then $(RANLIB) libobjc.a; else true; fi
@@ -191,23 +188,29 @@ libobjc_s.a: libobjc.a
mv libobjc.a libobjc_s.a
# Create a relocatable DLL
-libobjc.dll: libobjc_s.a $(srcdir)/objc/libobjc_entry.o
- $(GCC_FOR_TARGET) -dll -Wl,--base-file -Wl,libobjc.base \
+libobjc.dll: libobjc_s.a objc/libobjc_entry.o
+ $(GCC_FOR_TARGET) -mdll -Wl,--base-file -Wl,libobjc.base \
-o libobjc.dll libobjc_s.a \
- $(srcdir)/objc/libobjc_entry.o -lkernel32
+ objc/libobjc_entry.o -lkernel32
$(DLLTOOL) --dllname libobjc.dll --def $(srcdir)/objc/libobjc.def \
--base-file libobjc.base --output-exp libobjc.exp
- $(GCC_FOR_TARGET) -dll -Wl,--base-file libobjc.base libobjc.exp \
+ $(GCC_FOR_TARGET) -mdll -Wl,--base-file libobjc.base libobjc.exp \
-o libobjc.dll libobjc_s.a \
- $(srcdir)/objc/libobjc_entry.o -lkernel32
+ objc/libobjc_entry.o -lkernel32
$(DLLTOOL) --dllname libobjc.dll --def $(srcdir)/objc/libobjc.def \
--base-file libobjc.base --output-exp libobjc.exp
- $(GCC_FOR_TARGET) libobjc.exp -dll \
+ $(GCC_FOR_TARGET) libobjc.exp -mdll \
-o libobjc.dll libobjc_s.a \
- $(srcdir)/objc/libobjc_entry.o -lkernel32
+ objc/libobjc_entry.o -lkernel32
$(DLLTOOL) --dllname libobjc.dll --def $(srcdir)/objc/libobjc.def \
--output-lib libobjc.a
+# Platform generated information needed by ObjC runtime
+objc/runtime-info.h: cc1obj
+ echo "" > tmp-runtime
+ echo "/* This file is automatically generated */" >$@
+ ./cc1obj -print-objc-runtime-info tmp-runtime >>$@
+ rm -f tmp-runtime
#
# Build hooks:
@@ -257,6 +260,7 @@ objc.uninstall:
objc.mostlyclean:
-rm -f tmp-objc-prs.y
-rm -f objc/*$(objext) objc/xforward objc/fflags
+ -rm -f objc/runtime-info.h
-rm -f libobjc.a libobjc_s.a libobjc.dll
-rm -f libobjc.base libobjc.exp
objc.clean: objc.mostlyclean
@@ -273,19 +277,19 @@ objc.maintainer-clean:
#
# Stage hooks:
-objc.stage1:
+objc.stage1: stage1-start
-mv objc/*$(objext) stage1/objc
-mv cc1obj$(exeext) stage1
-mv libobjc.a stage1
-objc.stage2:
+objc.stage2: stage2-start
-mv objc/*$(objext) stage2/objc
-mv cc1obj$(exeext) stage2
-mv libobjc.a stage2
-objc.stage3:
+objc.stage3: stage3-start
-mv objc/*$(objext) stage3/objc
-mv cc1obj$(exeext) stage3
-mv libobjc.a stage3
-objc.stage4:
+objc.stage4: stage4-start
-mv objc/*$(objext) stage4/objc
-mv cc1obj$(exeext) stage4
-mv libobjc.a stage4
@@ -295,4 +299,12 @@ objc.stage4:
# This target creates the files that can be rebuilt, but go in the
# distribution anyway. It then copies the files to the distdir directory.
-objc.distdir:
+# ??? Note that this should be fixed once the Makefile is fixed to do
+# the build in the inner directory.
+objc.distdir: $(srcdir)/objc/objc-parse.c
+ mkdir tmp/objc
+# cd objc ; $(MAKE) $(FLAGS_TO_PASS) objc-parse.c
+ cd objc; \
+ for file in *[0-9a-zA-Z+]; do \
+ ln $$file ../tmp/objc >/dev/null 2>&1 || cp $$file ../tmp/objc; \
+ done
diff --git a/gcc/objc/Object.m b/gcc/objc/Object.m
index 8573f3645a2..d6a10019773 100644
--- a/gcc/objc/Object.m
+++ b/gcc/objc/Object.m
@@ -213,7 +213,7 @@ extern int errno;
}
}
- if (parent = [self superClass])
+ if ((parent = [self superClass]))
return [parent conformsTo: aProtocol];
else
return NO;
diff --git a/gcc/objc/THREADS b/gcc/objc/THREADS
index 034cb5a6b81..9dfbbed97af 100644
--- a/gcc/objc/THREADS
+++ b/gcc/objc/THREADS
@@ -4,7 +4,7 @@ Objective-C runtime needed to make it thread safe.
First off, kudos to Galen Hunt who is the author of this great work.
If you have an comments or just want to know where to
-send me money to express your undying graditude for threading the
+send me money to express your undying gratitude for threading the
Objective-C runtime you can reach Galen at:
gchunt@cs.rochester.edu
@@ -242,9 +242,9 @@ __objc_thread_get_data(void), void *
******************************************************************************
-* Mutexs:
+* Mutexes:
-Mutexs can be locked recursively. Each locked mutex remembers
+Mutexes can be locked recursively. Each locked mutex remembers
its owner (by thread id) and how many times it has been locked. The
last unlock on a mutex removes the system lock and allows other
threads to access the mutex.
@@ -302,9 +302,9 @@ __objc_mutex_unlock(objc_mutex_t mutex), int
Return -1 if error otherwise return 0.
******************************************************************************
-* Condition Mutexs:
+* Condition Mutexes:
-Mutexs can be locked recursively. Each locked mutex remembers
+Mutexes can be locked recursively. Each locked mutex remembers
its owner (by thread id) and how many times it has been locked. The
last unlock on a mutex removes the system lock and allows other
threads to access the mutex.
diff --git a/gcc/objc/archive.c b/gcc/objc/archive.c
index 2edb056acba..af9591b25ec 100644
--- a/gcc/objc/archive.c
+++ b/gcc/objc/archive.c
@@ -24,10 +24,15 @@ Boston, MA 02111-1307, USA. */
however invalidate any other reasons why the executable file might be
covered by the GNU General Public License. */
+#include "config.h"
#include "runtime.h"
#include "typedstream.h"
#include "encoding.h"
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
extern int fflush(FILE*);
#define ROUND(V, A) \
@@ -357,8 +362,11 @@ __objc_write_extension (struct objc_typed_stream* stream, unsigned char code)
return (*stream->write)(stream->physical, &buf, 1);
}
else
- objc_error(nil, OBJC_ERR_BAD_OPCODE,
- "__objc_write_extension: bad opcode %c\n", code);
+ {
+ objc_error(nil, OBJC_ERR_BAD_OPCODE,
+ "__objc_write_extension: bad opcode %c\n", code);
+ return -1;
+ }
}
__inline__ int
@@ -391,7 +399,7 @@ objc_write_object_reference (struct objc_typed_stream* stream, id object)
int
objc_write_root_object (struct objc_typed_stream* stream, id object)
{
- int len;
+ int len = 0;
if (stream->writing_root_p)
objc_error (nil, OBJC_ERR_RECURSE_ROOT,
"objc_write_root_object called recursively");
@@ -1065,8 +1073,11 @@ objc_write_type(TypedStream* stream, const char* type, const void* data)
}
default:
- objc_error(nil, OBJC_ERR_BAD_TYPE,
- "objc_write_type: cannot parse typespec: %s\n", type);
+ {
+ objc_error(nil, OBJC_ERR_BAD_TYPE,
+ "objc_write_type: cannot parse typespec: %s\n", type);
+ return 0;
+ }
}
}
@@ -1158,8 +1169,11 @@ objc_read_type(TypedStream* stream, const char* type, void* data)
}
default:
- objc_error(nil, OBJC_ERR_BAD_TYPE,
- "objc_read_type: cannot parse typespec: %s\n", type);
+ {
+ objc_error(nil, OBJC_ERR_BAD_TYPE,
+ "objc_read_type: cannot parse typespec: %s\n", type);
+ return 0;
+ }
}
}
@@ -1423,12 +1437,14 @@ static int
__objc_no_write(FILE* file, char* data, int len)
{
objc_error (nil, OBJC_ERR_NO_WRITE, "TypedStream not open for writing");
+ return 0;
}
static int
__objc_no_read(FILE* file, char* data, int len)
{
objc_error (nil, OBJC_ERR_NO_READ, "TypedStream not open for reading");
+ return 0;
}
static int
diff --git a/gcc/objc/class.c b/gcc/objc/class.c
index 23bea154910..44aa1b9f98e 100644
--- a/gcc/objc/class.c
+++ b/gcc/objc/class.c
@@ -145,6 +145,7 @@ objc_get_class (const char *name)
objc_error(nil, OBJC_ERR_BAD_CLASS,
"objc runtime: cannot find class %s\n", name);
+ return 0;
}
MetaClass
diff --git a/gcc/objc/config-lang.in b/gcc/objc/config-lang.in
index 736ba73b4ec..6c9b2032083 100644
--- a/gcc/objc/config-lang.in
+++ b/gcc/objc/config-lang.in
@@ -1,5 +1,5 @@
# Top level configure fragment for the GNU Objective-C Runtime Library.
-# Copyright (C) 1997 Free Software Foundation, Inc.
+# Copyright (C) 1997, 1998 Free Software Foundation, Inc.
#This file is part of GNU CC.
@@ -32,6 +32,6 @@ compilers="cc1obj\$(exeext)"
stagestuff=""
-diff_excludes=""
+diff_excludes="-x objc-parse.c -x objc-parse.y "
echo "Using \`$srcdir/objc/thr-${thread_file}.c' as Objective-C Runtime thread file."
diff --git a/gcc/objc/encoding.c b/gcc/objc/encoding.c
index c90e914f501..acd6b7a7b73 100644
--- a/gcc/objc/encoding.c
+++ b/gcc/objc/encoding.c
@@ -153,7 +153,10 @@ objc_sizeof_type(const char* type)
}
default:
- objc_error(nil, OBJC_ERR_BAD_TYPE, "unknown type %s\n", type);
+ {
+ objc_error(nil, OBJC_ERR_BAD_TYPE, "unknown type %s\n", type);
+ return 0;
+ }
}
}
@@ -251,7 +254,10 @@ objc_alignof_type(const char* type)
}
default:
- objc_error(nil, OBJC_ERR_BAD_TYPE, "unknown type %s\n", type);
+ {
+ objc_error(nil, OBJC_ERR_BAD_TYPE, "unknown type %s\n", type);
+ return 0;
+ }
}
}
@@ -354,7 +360,10 @@ objc_skip_typespec (const char* type)
if (*type == _C_ARY_E)
return ++type;
else
- objc_error(nil, OBJC_ERR_BAD_TYPE, "bad array type %s\n", type);
+ {
+ objc_error(nil, OBJC_ERR_BAD_TYPE, "bad array type %s\n", type);
+ return 0;
+ }
case _C_STRUCT_B:
/* skip name, and elements until closing '}' */
@@ -376,7 +385,10 @@ objc_skip_typespec (const char* type)
return objc_skip_typespec (++type);
default:
- objc_error(nil, OBJC_ERR_BAD_TYPE, "unknown type %s\n", type);
+ {
+ objc_error(nil, OBJC_ERR_BAD_TYPE, "unknown type %s\n", type);
+ return 0;
+ }
}
}
diff --git a/gcc/objc/init.c b/gcc/objc/init.c
index 5e56146c423..c900cac65e8 100644
--- a/gcc/objc/init.c
+++ b/gcc/objc/init.c
@@ -59,7 +59,7 @@ static void __objc_class_add_protocols (Class, struct objc_protocol_list*);
or a category is loaded into the runtime. This may e.g. help a
dynamic loader determine the classes that have been loaded when
an object file is dynamically linked in */
-void (*_objc_load_callback)(Class class, Category* category) = 0; /* !T:SAFE */
+void (*_objc_load_callback)(Class class, Category* category); /* !T:SAFE */
/* Is all categories/classes resolved? */
BOOL __objc_dangling_categories = NO; /* !T:UNUSED */
@@ -381,7 +381,7 @@ __objc_force_linking (void)
/* Run through the statics list, removing modules as soon as all its statics
have been initialized. */
static void
-objc_init_statics ()
+objc_init_statics (void)
{
struct objc_list **cell = &uninitialized_statics;
struct objc_static_instances **statics_in_module;
diff --git a/gcc/objc/misc.c b/gcc/objc/misc.c
index 8fc8a3fa6c8..01f9d3bbafa 100644
--- a/gcc/objc/misc.c
+++ b/gcc/objc/misc.c
@@ -1,6 +1,6 @@
/* GNU Objective C Runtime Miscellaneous
Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
- Contrbuted by Kresten Krab Thorup
+ Contributed by Kresten Krab Thorup
This file is part of GNU CC.
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c
index 4e05b3203a7..6b0de8d3556 100644
--- a/gcc/objc/objc-act.c
+++ b/gcc/objc/objc-act.c
@@ -38,8 +38,8 @@ Boston, MA 02111-1307, USA. */
- OBJC_INT_SELECTORS */
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "tree.h"
#include "c-tree.h"
#include "c-lex.h"
@@ -48,7 +48,8 @@ Boston, MA 02111-1307, USA. */
#include "input.h"
#include "except.h"
#include "function.h"
-
+#include <string.h>
+#include "output.h"
/* This is the default way of generating a method name. */
/* I am not sure it is really correct.
@@ -191,6 +192,15 @@ static tree synth_id_with_class_suffix PROTO((char *, tree));
/* From expr.c */
extern int apply_args_register_offset PROTO((int));
+static void generate_static_references PROTO((void));
+static int check_methods_accessible PROTO((tree, tree,
+ int));
+static void encode_aggregate_within PROTO((tree, int, int,
+ char, char));
+
+/* We handle printing method names ourselves for ObjC */
+extern char *(*decl_printable_name) ();
+
/* Misc. bookkeeping */
typedef struct hashed_entry *hash;
@@ -227,6 +237,8 @@ enum string_section
static tree add_objc_string PROTO((tree,
enum string_section));
+static tree get_objc_string_decl PROTO((tree,
+ enum string_section));
static tree build_objc_string_decl PROTO((tree,
enum string_section));
static tree build_selector_reference_decl PROTO((tree));
@@ -502,13 +514,84 @@ int flag_warn_protocol = 1;
static int generating_instance_variables = 0;
+/* Tells the compiler that this is a special run. Do not perform
+ any compiling, instead we are to test some platform dependent
+ features and output a C header file with appropriate definitions. */
+
+static int print_struct_values = 0;
+
+/* Some platforms pass small structures through registers versus through
+ an invisible pointer. Determine at what size structure is the
+ transition point between the two possibilities. */
+
+void
+generate_struct_by_value_array ()
+{
+ tree type;
+ tree field_decl, field_decl_chain;
+ int i, j;
+ int aggregate_in_mem[32];
+ int found = 0;
+
+ /* Presumbaly no platform passes 32 byte structures in a register. */
+ for (i = 1; i < 32; i++)
+ {
+ char buffer[5];
+
+ /* Create an unnamed struct that has `i' character components */
+ type = start_struct (RECORD_TYPE, NULL_TREE);
+
+ strcpy (buffer, "c1");
+ field_decl = create_builtin_decl (FIELD_DECL,
+ char_type_node,
+ buffer);
+ field_decl_chain = field_decl;
+
+ for (j = 1; j < i; j++)
+ {
+ sprintf (buffer, "c%d", j + 1);
+ field_decl = create_builtin_decl (FIELD_DECL,
+ char_type_node,
+ buffer);
+ chainon (field_decl_chain, field_decl);
+ }
+ finish_struct (type, field_decl_chain, NULL_TREE);
+
+ aggregate_in_mem[i] = aggregate_value_p (type);
+ if (!aggregate_in_mem[i])
+ found = 1;
+ }
+
+ /* We found some structures that are returned in registers instead of memory
+ so output the necessary data. */
+ if (found)
+ {
+ for (i = 31; i >= 0; i--)
+ if (!aggregate_in_mem[i])
+ break;
+ printf ("#define OBJC_MAX_STRUCT_BY_VALUE %d\n\n", i);
+
+ /* The first member of the structure is always 0 because we don't handle
+ structures with 0 members */
+ printf ("static int struct_forward_array[] = {\n 0");
+
+ for (j = 1; j <= i; j++)
+ printf (", %d", aggregate_in_mem[j]);
+ printf ("\n};\n");
+ }
+
+ exit (0);
+}
+
void
lang_init ()
{
+#if !USE_CPPLIB
/* The beginning of the file is a new line; check for #.
With luck, we discover the real source file's name from that
and put it in input_filename. */
ungetc (check_newline (), finput);
+#endif
/* The line number can be -1 if we had -g3 and the input file
had a directive specifying line 0. But we want predefined
@@ -548,6 +631,9 @@ lang_init ()
if (doing_objc_thang)
init_objc ();
+
+ if (print_struct_values)
+ generate_struct_by_value_array ();
}
static void
@@ -601,6 +687,8 @@ lang_decode_option (p)
flag_next_runtime = 1;
else if (!strcmp (p, "-fnext-runtime"))
flag_next_runtime = 1;
+ else if (!strcmp (p, "-print-objc-runtime-info"))
+ print_struct_values = 1;
else
return c_decode_option (p);
@@ -1741,7 +1829,7 @@ get_objc_string_decl (ident, section)
/* Output references to all statically allocated objects. Return the DECL
for the array built. */
-static tree
+static void
generate_static_references ()
{
tree decls = NULL_TREE, ident, decl_spec, expr_decl, expr = NULL_TREE;
@@ -7861,6 +7949,71 @@ dump_interface (fp, chain)
fprintf (fp, "\n@end");
}
+/* Demangle function for Objective-C */
+static const char *
+objc_demangle (mangled)
+ const char *mangled;
+{
+ char *demangled, *cp;
+
+ if (mangled[0] == '_' &&
+ (mangled[1] == 'i' || mangled[1] == 'c') &&
+ mangled[2] == '_')
+ {
+ cp = demangled = xmalloc(strlen(mangled) + 2);
+ if (mangled[1] == 'i')
+ *cp++ = '-'; /* for instance method */
+ else
+ *cp++ = '+'; /* for class method */
+ *cp++ = '['; /* opening left brace */
+ strcpy(cp, mangled+3); /* tack on the rest of the mangled name */
+ while (*cp && *cp == '_')
+ cp++; /* skip any initial underbars in class name */
+ cp = strchr(cp, '_'); /* find first non-initial underbar */
+ if (cp == NULL)
+ {
+ free(demangled); /* not mangled name */
+ return mangled;
+ }
+ if (cp[1] == '_') /* easy case: no category name */
+ {
+ *cp++ = ' '; /* replace two '_' with one ' ' */
+ strcpy(cp, mangled + (cp - demangled) + 2);
+ }
+ else
+ {
+ *cp++ = '('; /* less easy case: category name */
+ cp = strchr(cp, '_');
+ if (cp == 0)
+ {
+ free(demangled); /* not mangled name */
+ return mangled;
+ }
+ *cp++ = ')';
+ *cp++ = ' '; /* overwriting 1st char of method name... */
+ strcpy(cp, mangled + (cp - demangled)); /* get it back */
+ }
+ while (*cp && *cp == '_')
+ cp++; /* skip any initial underbars in method name */
+ for (; *cp; cp++)
+ if (*cp == '_')
+ *cp = ':'; /* replace remaining '_' with ':' */
+ *cp++ = ']'; /* closing right brace */
+ *cp++ = 0; /* string terminator */
+ return demangled;
+ }
+ else
+ return mangled; /* not an objc mangled name */
+}
+
+static const char *
+objc_printable_name (decl, kind)
+ tree decl;
+ char **kind;
+{
+ return objc_demangle (IDENTIFIER_POINTER (DECL_NAME (decl)));
+}
+
static void
init_objc ()
{
@@ -7896,6 +8049,9 @@ init_objc ()
errbuf = (char *)xmalloc (BUFSIZE);
hash_init ();
synth_module_prologue ();
+
+ /* Change the default error function */
+ decl_printable_name = (char* (*)()) objc_printable_name;
}
static void
@@ -7915,7 +8071,7 @@ finish_objc ()
#endif
/* Process the static instances here because initialization of objc_symtab
- dependens on them. */
+ depends on them. */
if (objc_static_instances)
generate_static_references ();
diff --git a/gcc/objc/objc-api.h b/gcc/objc/objc-api.h
index 1f417f8287c..860aee4206a 100644
--- a/gcc/objc/objc-api.h
+++ b/gcc/objc/objc-api.h
@@ -576,7 +576,7 @@ object_is_meta_class(id object)
}
struct sarray*
-objc_get_uninstalled_dtable();
+objc_get_uninstalled_dtable(void);
#endif /* not __objc_api_INCLUDE_GNU */
diff --git a/gcc/objc/runtime.h b/gcc/objc/runtime.h
index 4d88c24b014..b0eae4a222d 100644
--- a/gcc/objc/runtime.h
+++ b/gcc/objc/runtime.h
@@ -43,16 +43,17 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "objc/objc-list.h" /* linear lists */
extern void __objc_add_class_to_hash(Class); /* (objc-class.c) */
-extern void __objc_init_selector_tables(); /* (objc-sel.c) */
-extern void __objc_init_class_tables(); /* (objc-class.c) */
-extern void __objc_init_dispatch_tables(); /* (objc-dispatch.c) */
+extern void __objc_init_selector_tables(void); /* (objc-sel.c) */
+extern void __objc_init_class_tables(void); /* (objc-class.c) */
+extern void __objc_init_dispatch_tables(void); /* (objc-dispatch.c) */
extern void __objc_install_premature_dtable(Class); /* (objc-dispatch.c) */
-extern void __objc_resolve_class_links(); /* (objc-class.c) */
+extern void __objc_resolve_class_links(void); /* (objc-class.c) */
extern void __objc_register_selectors_from_class(Class); /* (objc-sel.c) */
extern void __objc_update_dispatch_table_for_class (Class);/* (objc-msg.c) */
-extern int __objc_init_thread_system(void); /* thread.c */
-extern int __objc_fini_thread_system(void); /* thread.c */
+extern int __objc_init_thread_system(void); /* thread.c */
+extern int __objc_fini_thread_system(void); /* thread.c */
+extern void __objc_print_dtable_stats(void); /* sendmsg.c */
extern void class_add_method_list(Class, MethodList_t);
diff --git a/gcc/objc/selector.c b/gcc/objc/selector.c
index b2fdccb520b..83c70e4ae0f 100644
--- a/gcc/objc/selector.c
+++ b/gcc/objc/selector.c
@@ -196,7 +196,7 @@ sel_get_typed_uid (const char *name, const char *types)
return 0;
}
- for (l = (struct objc_list*)sarray_get (__objc_selector_array, i);
+ for (l = (struct objc_list*)sarray_get_safe (__objc_selector_array, i);
l; l = l->tail)
{
SEL s = (SEL)l->head;
@@ -225,7 +225,7 @@ sel_get_any_typed_uid (const char *name)
{
struct objc_list *l;
sidx i;
- SEL s;
+ SEL s = NULL;
objc_mutex_lock(__objc_runtime_mutex);
@@ -236,7 +236,7 @@ sel_get_any_typed_uid (const char *name)
return 0;
}
- for (l = (struct objc_list*)sarray_get (__objc_selector_array, i);
+ for (l = (struct objc_list*)sarray_get_safe (__objc_selector_array, i);
l; l = l->tail)
{
s = (SEL) l->head;
@@ -267,7 +267,7 @@ sel_get_any_uid (const char *name)
return 0;
}
- l = (struct objc_list*)sarray_get (__objc_selector_array, i);
+ l = (struct objc_list*)sarray_get_safe (__objc_selector_array, i);
objc_mutex_unlock(__objc_runtime_mutex);
if (l == 0)
@@ -293,7 +293,7 @@ sel_get_name (SEL selector)
objc_mutex_lock(__objc_runtime_mutex);
if ((soffset_decode((sidx)selector->sel_id) > 0)
&& (soffset_decode((sidx)selector->sel_id) <= __objc_selector_max_index))
- ret = sarray_get (__objc_selector_names, (sidx) selector->sel_id);
+ ret = sarray_get_safe (__objc_selector_names, (sidx) selector->sel_id);
else
ret = 0;
objc_mutex_unlock(__objc_runtime_mutex);
@@ -338,7 +338,7 @@ __sel_register_typed_name (const char *name, const char *types,
i = (sidx) hash_value_for_key (__objc_selector_hash, name);
if (soffset_decode (i) != 0)
{
- for (l = (struct objc_list*)sarray_get (__objc_selector_array, i);
+ for (l = (struct objc_list*)sarray_get_safe (__objc_selector_array, i);
l; l = l->tail)
{
SEL s = (SEL)l->head;
@@ -379,7 +379,7 @@ __sel_register_typed_name (const char *name, const char *types,
j->sel_types = (char *) objc_malloc(strlen(types)+1);
strcpy((char *)j->sel_types, types);
}
- l = (struct objc_list*)sarray_get (__objc_selector_array, i);
+ l = (struct objc_list*)sarray_get_safe (__objc_selector_array, i);
}
else
{
diff --git a/gcc/objc/sendmsg.c b/gcc/objc/sendmsg.c
index c061d8888c8..6f3487c260e 100644
--- a/gcc/objc/sendmsg.c
+++ b/gcc/objc/sendmsg.c
@@ -28,6 +28,7 @@ Boston, MA 02111-1307, USA. */
#include "runtime.h"
#include "sarray.h"
#include "encoding.h"
+#include "runtime-info.h"
/* this is how we hack STRUCT_VALUE to be 1 or 0 */
#define gen_rtx(args...) 1
@@ -76,7 +77,11 @@ __objc_get_forward_imp (SEL sel)
{
const char *t = sel->sel_types;
- if (t && (*t == '[' || *t == '(' || *t == '{'))
+ if (t && (*t == '[' || *t == '(' || *t == '{')
+#ifdef OBJC_MAX_STRUCT_BY_VALUE
+ && objc_sizeof_type(t) > OBJC_MAX_STRUCT_BY_VALUE
+#endif
+ )
return (IMP)__objc_block_forward;
else if (t && (*t == 'f' || *t == 'd'))
return (IMP)__objc_double_forward;
@@ -89,8 +94,7 @@ __inline__
IMP
get_imp (Class class, SEL sel)
{
- IMP impl;
- void* res = sarray_get (class->dtable, (size_t) sel->sel_id);
+ void* res = sarray_get_safe (class->dtable, (size_t) sel->sel_id);
if (res == 0)
{
/* Not a valid method */
@@ -133,7 +137,7 @@ __objc_responds_to (id object, SEL sel)
}
/* Get the method from the dispatch table */
- res = sarray_get (object->class_pointer->dtable, (size_t) sel->sel_id);
+ res = sarray_get_safe (object->class_pointer->dtable, (size_t) sel->sel_id);
return (res != 0);
}
@@ -147,7 +151,8 @@ objc_msg_lookup(id receiver, SEL op)
IMP result;
if(receiver)
{
- result = sarray_get(receiver->class_pointer->dtable, (sidx)op->sel_id);
+ result = sarray_get_safe (receiver->class_pointer->dtable,
+ (sidx)op->sel_id);
if (result == 0)
{
/* Not a valid method */
@@ -308,8 +313,8 @@ __objc_send_initialize(Class class)
/* Walk on the methods list of class and install the methods in the reverse
order of the lists. Since methods added by categories are before the methods
of class in the methods list, this allows categories to substitute methods
- declared in class. However if more than one category replace the same method
- nothing is guarranteed about what method will be used.
+ declared in class. However if more than one category replaces the same
+ method nothing is guaranteed about what method will be used.
Assumes that __objc_runtime_mutex is locked down. */
static void
__objc_install_methods_in_dtable (Class class, MethodList_t method_list)
@@ -336,7 +341,6 @@ static void
__objc_install_dispatch_table_for_class (Class class)
{
Class super;
- int counter;
/* If the class has not yet had it's class links resolved, we must
re-compute all class links */
@@ -539,6 +543,12 @@ __objc_block_forward (id rcv, SEL op, ...)
res = __objc_forward (rcv, op, args);
if (res)
__builtin_return (res);
+ else
+#if INVISIBLE_STRUCT_RETURN
+ return (__big) {0};
+#else
+ return nil;
+#endif
}
@@ -593,6 +603,8 @@ __objc_forward (id object, SEL sel, arglist_t args)
/* The object doesn't respond to doesNotRecognize: or error:; Therefore,
a default action is taken. */
objc_error (object, OBJC_ERR_UNIMPLEMENTED, "%s\n", msg);
+
+ return 0;
}
}
@@ -612,13 +624,13 @@ __objc_print_dtable_stats()
);
printf("arrays: %d = %ld bytes\n", narrays,
- (int)narrays*sizeof(struct sarray));
+ (long)narrays*sizeof(struct sarray));
total += narrays*sizeof(struct sarray);
printf("buckets: %d = %ld bytes\n", nbuckets,
- (int)nbuckets*sizeof(struct sbucket));
+ (long)nbuckets*sizeof(struct sbucket));
total += nbuckets*sizeof(struct sbucket);
- printf("idxtables: %d = %ld bytes\n", idxsize, (int)idxsize*sizeof(void*));
+ printf("idxtables: %d = %ld bytes\n", idxsize, (long)idxsize*sizeof(void*));
total += idxsize*sizeof(void*);
printf("-----------------------------------\n");
printf("total: %d bytes\n", total);
diff --git a/gcc/objc/thr-decosf1.c b/gcc/objc/thr-decosf1.c
index 0c611b89afb..0f7063b7e83 100644
--- a/gcc/objc/thr-decosf1.c
+++ b/gcc/objc/thr-decosf1.c
@@ -28,7 +28,7 @@ Boston, MA 02111-1307, USA. */
#include <objc/thr.h>
#include "runtime.h"
-/* Key structure for maintiain thread specific storage */
+/* Key structure for maintaining thread specific storage */
static pthread_key_t _objc_thread_storage;
/* Backend initialization functions */
@@ -143,7 +143,7 @@ __objc_thread_id(void)
{
pthread_t self = pthread_self();
- return (objc_thread_t) pthread_getuniqe_np (&self);
+ return (objc_thread_t) pthread_getunique_np (&self);
}
/* Sets the thread's local storage pointer. */
diff --git a/gcc/objc/thr-irix.c b/gcc/objc/thr-irix.c
index 42032542b80..528a3e3a434 100644
--- a/gcc/objc/thr-irix.c
+++ b/gcc/objc/thr-irix.c
@@ -32,7 +32,7 @@ Boston, MA 02111-1307, USA. */
#include <objc/thr.h>
#include "runtime.h"
-/* Key structure for maintiain thread specific storage */
+/* Key structure for maintaining thread specific storage */
static void * __objc_shared_arena_handle = NULL;
/* Backend initialization functions */
diff --git a/gcc/objc/thr-mach.c b/gcc/objc/thr-mach.c
index 6f54ada6108..44af0c1e286 100644
--- a/gcc/objc/thr-mach.c
+++ b/gcc/objc/thr-mach.c
@@ -35,7 +35,7 @@ Boston, MA 02111-1307, USA. */
Obtain the maximum thread priority that can set for t. Under the
mach threading model, it is possible for the developer to adjust the
maximum priority downward only-- cannot be raised without superuser
- priviledges. Once lowered, it cannot be raised.
+ privileges. Once lowered, it cannot be raised.
*/
static int __mach_get_max_thread_priority(cthread_t t, int *base)
{
@@ -148,7 +148,7 @@ __objc_thread_get_priority(void)
int maxPriority;
int sys_priority = 0;
- int interactiveT, backgroundT, lowT; /* threasholds */
+ int interactiveT, backgroundT, lowT; /* thresholds */
maxPriority = __mach_get_max_thread_priority(cT, &basePriority);
diff --git a/gcc/objc/thr-os2.c b/gcc/objc/thr-os2.c
index d54606052d0..a0d7d436613 100644
--- a/gcc/objc/thr-os2.c
+++ b/gcc/objc/thr-os2.c
@@ -82,7 +82,7 @@ __objc_thread_set_priority(int priority)
ULONG sys_priority = 0;
/* OBJC_THREAD_INTERACTIVE_PRIORITY -> PRTYC_FOREGROUNDSERVER
- * OBJC_THREAD_BACKGROUND_PRIORITY -> PRTYC_REGULSR
+ * OBJC_THREAD_BACKGROUND_PRIORITY -> PRTYC_REGULAR
* OBJC_THREAD_LOW_PRIORITY -> PRTYC_IDLETIME */
switch (priority) {
diff --git a/gcc/objc/thr-posix.c b/gcc/objc/thr-posix.c
index d6c97e1dbdd..5b40f711be8 100644
--- a/gcc/objc/thr-posix.c
+++ b/gcc/objc/thr-posix.c
@@ -29,7 +29,7 @@ Boston, MA 02111-1307, USA. */
#include "runtime.h"
#include <pthread.h>
-/* Key structure for maintiain thread specific storage */
+/* Key structure for maintaining thread specific storage */
static pthread_key_t _objc_thread_storage;
/* Backend initialization functions */
@@ -129,41 +129,49 @@ __objc_thread_get_data(void)
int
__objc_mutex_allocate(objc_mutex_t mutex)
{
- if (pthread_mutex_init((pthread_mutex_t *)(&(mutex->backend)), NULL))
- return -1;
- else
- return 0;
+ mutex->backend = objc_malloc(sizeof(pthread_mutex_t));
+
+ if (pthread_mutex_init((pthread_mutex_t *)mutex->backend, NULL))
+ {
+ objc_free(mutex->backend);
+ mutex->backend = NULL;
+ return -1;
+ }
+
+ return 0;
}
/* Deallocate a mutex. */
int
__objc_mutex_deallocate(objc_mutex_t mutex)
{
- if (pthread_mutex_destroy((pthread_mutex_t *)(&(mutex->backend))))
+ if (pthread_mutex_destroy((pthread_mutex_t *)mutex->backend))
return -1;
- else
- return 0;
+
+ objc_free(mutex->backend);
+ mutex->backend = NULL;
+ return 0;
}
/* Grab a lock on a mutex. */
int
__objc_mutex_lock(objc_mutex_t mutex)
{
- return pthread_mutex_lock((pthread_mutex_t *)(&(mutex->backend)));
+ return pthread_mutex_lock((pthread_mutex_t *)mutex->backend);
}
/* Try to grab a lock on a mutex. */
int
__objc_mutex_trylock(objc_mutex_t mutex)
{
- return pthread_mutex_trylock((pthread_mutex_t *)(&(mutex->backend)));
+ return pthread_mutex_trylock((pthread_mutex_t *)mutex->backend);
}
/* Unlock the mutex */
int
__objc_mutex_unlock(objc_mutex_t mutex)
{
- return pthread_mutex_unlock((pthread_mutex_t *)(&(mutex->backend)));
+ return pthread_mutex_unlock((pthread_mutex_t *)mutex->backend);
}
/* Backend condition mutex functions */
@@ -172,39 +180,50 @@ __objc_mutex_unlock(objc_mutex_t mutex)
int
__objc_condition_allocate(objc_condition_t condition)
{
- if (pthread_cond_init((pthread_cond_t *)(&(condition->backend)), NULL))
- return -1;
- else
- return 0;
+ condition->backend = objc_malloc(sizeof(pthread_cond_t));
+
+ if (pthread_cond_init((pthread_cond_t *)condition->backend, NULL))
+ {
+ objc_free(condition->backend);
+ condition->backend = NULL;
+ return -1;
+ }
+
+ return 0;
}
/* Deallocate a condition. */
int
__objc_condition_deallocate(objc_condition_t condition)
{
- return pthread_cond_destroy((pthread_cond_t *)(&(condition->backend)));
+ if (pthread_cond_destroy((pthread_cond_t *)condition->backend))
+ return -1;
+
+ objc_free(condition->backend);
+ condition->backend = NULL;
+ return 0;
}
/* Wait on the condition */
int
__objc_condition_wait(objc_condition_t condition, objc_mutex_t mutex)
{
- return pthread_cond_wait((pthread_cond_t *)(&(condition->backend)),
- (pthread_mutex_t *)(&(mutex->backend)));
+ return pthread_cond_wait((pthread_cond_t *)condition->backend,
+ (pthread_mutex_t *)mutex->backend);
}
/* Wake up all threads waiting on this condition. */
int
__objc_condition_broadcast(objc_condition_t condition)
{
- return pthread_cond_broadcast((pthread_cond_t *)(&(condition->backend)));
+ return pthread_cond_broadcast((pthread_cond_t *)condition->backend);
}
/* Wake up one thread waiting on this condition. */
int
__objc_condition_signal(objc_condition_t condition)
{
- return pthread_cond_signal((pthread_cond_t *)(&(condition->backend)));
+ return pthread_cond_signal((pthread_cond_t *)condition->backend);
}
/* End of File */
diff --git a/gcc/objc/thr-pthreads.c b/gcc/objc/thr-pthreads.c
index 4c4c2450aac..2efdd15bc54 100644
--- a/gcc/objc/thr-pthreads.c
+++ b/gcc/objc/thr-pthreads.c
@@ -1,4 +1,4 @@
-/* GNU Objective C Runtime Thread Implementation for PCThreads under Linux.
+/* GNU Objective C Runtime Thread Implementation for PCThreads under GNU/Linux.
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
Contributed by Scott Christley <scottc@net-community.com>
Condition functions added by: Mircea Oancea <mircea@first.elcom.pub.ro>
@@ -29,7 +29,7 @@ Boston, MA 02111-1307, USA. */
#include <objc/thr.h>
#include "runtime.h"
-/* Key structure for maintiain thread specific storage */
+/* Key structure for maintaining thread specific storage */
static pthread_key_t _objc_thread_storage;
/* Backend initialization functions */
diff --git a/gcc/objc/thr-solaris.c b/gcc/objc/thr-solaris.c
index 0b5227a8e89..90351b43cf6 100644
--- a/gcc/objc/thr-solaris.c
+++ b/gcc/objc/thr-solaris.c
@@ -32,7 +32,7 @@ Boston, MA 02111-1307, USA. */
#include <synch.h>
#include <errno.h>
-/* Key structure for maintiain thread specific storage */
+/* Key structure for maintaining thread specific storage */
static thread_key_t __objc_thread_data_key;
/* Backend initialization functions */
diff --git a/gcc/objc/thr-win32.c b/gcc/objc/thr-win32.c
index 159e3e37665..8570ffd997e 100644
--- a/gcc/objc/thr-win32.c
+++ b/gcc/objc/thr-win32.c
@@ -32,7 +32,7 @@ Boston, MA 02111-1307, USA. */
#endif
#include <windows.h>
-/* Key structure for maintiain thread specific storage */
+/* Key structure for maintaining thread specific storage */
static DWORD __objc_data_tls = (DWORD)-1;
/* Backend initialization functions */
diff --git a/gcc/obstack.c b/gcc/obstack.c
index 4f9a18435e4..fb66d0c95cb 100644
--- a/gcc/obstack.c
+++ b/gcc/obstack.c
@@ -164,7 +164,7 @@ _obstack_begin (h, size, alignment, chunkfun, freefun)
register struct _obstack_chunk *chunk; /* points to new chunk */
if (alignment == 0)
- alignment = DEFAULT_ALIGNMENT;
+ alignment = (int) DEFAULT_ALIGNMENT;
if (size == 0)
/* Default size is what GNU malloc can fit in a 4096-byte block. */
{
@@ -223,7 +223,7 @@ _obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg)
register struct _obstack_chunk *chunk; /* points to new chunk */
if (alignment == 0)
- alignment = DEFAULT_ALIGNMENT;
+ alignment = (int) DEFAULT_ALIGNMENT;
if (size == 0)
/* Default size is what GNU malloc can fit in a 4096-byte block. */
{
@@ -280,9 +280,9 @@ _obstack_newchunk (h, length)
register struct _obstack_chunk *old_chunk = h->chunk;
register struct _obstack_chunk *new_chunk;
register long new_size;
- register int obj_size = h->next_free - h->object_base;
- register int i;
- int already;
+ register long obj_size = h->next_free - h->object_base;
+ register long i;
+ long already;
/* Compute size for new chunk. */
new_size = (obj_size + length) + (obj_size >> 3) + 100;
diff --git a/gcc/obstack.h b/gcc/obstack.h
index a6a2e230e0b..c056f11f806 100644
--- a/gcc/obstack.h
+++ b/gcc/obstack.h
@@ -1,5 +1,5 @@
/* obstack.h - object stack macros
- Copyright (C) 1988,89,90,91,92,93,94,96,97 Free Software Foundation, Inc.
+ Copyright (C) 1988,89,90,91,92,93,94,96,97,98 Free Software Foundation, Inc.
the C library, however. The master source lives in /gd/gnu/lib.
@@ -118,45 +118,39 @@ extern "C" {
may ignore the byte-within-word field of the pointer. */
#ifndef __PTR_TO_INT
-#define __PTR_TO_INT(P) ((P) - (char *) 0)
+# define __PTR_TO_INT(P) ((P) - (char *) 0)
#endif
#ifndef __INT_TO_PTR
-#define __INT_TO_PTR(P) ((P) + (char *) 0)
+# define __INT_TO_PTR(P) ((P) + (char *) 0)
#endif
-/* We need the type of the resulting object. In ANSI C it is ptrdiff_t
- but in traditional C it is usually long. If we are in ANSI C and
- don't already have ptrdiff_t get it. */
-
-#if defined (__STDC__) && __STDC__ && ! defined (offsetof)
-#if defined (__GNUC__) && defined (IN_GCC)
-/* On Next machine, the system's stddef.h screws up if included
- after we have defined just ptrdiff_t, so include all of stddef.h.
- Otherwise, define just ptrdiff_t, which is all we need. */
-#ifndef __NeXT__
-#define __need_ptrdiff_t
-#endif
-#endif
-
-#include <stddef.h>
-#endif
+/* We need the type of the resulting object. If __PTRDIFF_TYPE__ is
+ defined, as with GNU C, use that; that way we don't pollute the
+ namespace with <stddef.h>'s symbols. Otherwise, if <stddef.h> is
+ available, include it and use ptrdiff_t. In traditional C, long is
+ the best that we can do. */
-#if defined (__STDC__) && __STDC__
-#define PTR_INT_TYPE ptrdiff_t
+#ifdef __PTRDIFF_TYPE__
+# define PTR_INT_TYPE __PTRDIFF_TYPE__
#else
-#define PTR_INT_TYPE long
+# ifdef HAVE_STDDEF_H
+# include <stddef.h>
+# define PTR_INT_TYPE ptrdiff_t
+# else
+# define PTR_INT_TYPE long
+# endif
#endif
-#if defined (_LIBC) || defined (HAVE_STRING_H)
-#include <string.h>
-#define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N))
+#if defined _LIBC || defined HAVE_STRING_H
+# include <string.h>
+# define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N))
#else
-#ifdef memcpy
-#define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N))
-#else
-#define _obstack_memcpy(To, From, N) bcopy ((From), (To), (N))
-#endif
+# ifdef memcpy
+# define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N))
+# else
+# define _obstack_memcpy(To, From, N) bcopy ((From), (To), (N))
+# endif
#endif
struct _obstack_chunk /* Lives at front of each chunk. */
@@ -175,7 +169,7 @@ struct obstack /* control current object in current chunk */
char *chunk_limit; /* address of char after current chunk */
PTR_INT_TYPE temp; /* Temporary for some macros. */
int alignment_mask; /* Mask of alignment for each object. */
-#if defined (__STDC__) && __STDC__
+#if defined __STDC__ && __STDC__
/* These prototypes vary based on `use_extra_arg', and we use
casts to the prototypeless function type in all assignments,
but having prototypes here quiets -Wstrict-prototypes. */
@@ -199,7 +193,7 @@ struct obstack /* control current object in current chunk */
/* Declare the external functions we use; they are in obstack.c. */
-#if defined (__STDC__) && __STDC__
+#if defined __STDC__ && __STDC__
extern void _obstack_newchunk (struct obstack *, int);
extern void _obstack_free (struct obstack *, void *);
extern int _obstack_begin (struct obstack *, int, int,
@@ -216,7 +210,7 @@ extern int _obstack_begin_1 ();
extern int _obstack_memory_used ();
#endif
-#if defined (__STDC__) && __STDC__
+#if defined __STDC__ && __STDC__
/* Do the function-declarations after the structs
but before defining the macros. */
@@ -264,7 +258,7 @@ int obstack_memory_used (struct obstack *obstack);
/* Error handler called when `obstack_chunk_alloc' failed to allocate
more memory. This can be set to a user defined function. The
default action is to print a message and abort. */
-#if defined (__STDC__) && __STDC__
+#if defined __STDC__ && __STDC__
extern void (*obstack_alloc_failed_handler) (void);
#else
extern void (*obstack_alloc_failed_handler) ();
@@ -293,53 +287,53 @@ extern int obstack_exit_failure;
/* To prevent prototype warnings provide complete argument list in
standard C version. */
-#if defined (__STDC__) && __STDC__
+#if defined __STDC__ && __STDC__
-#define obstack_init(h) \
+# define obstack_init(h) \
_obstack_begin ((h), 0, 0, \
(void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free)
-#define obstack_begin(h, size) \
+# define obstack_begin(h, size) \
_obstack_begin ((h), (size), 0, \
(void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free)
-#define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \
+# define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \
_obstack_begin ((h), (size), (alignment), \
(void *(*) (long)) (chunkfun), (void (*) (void *)) (freefun))
-#define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
+# define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
_obstack_begin_1 ((h), (size), (alignment), \
(void *(*) (void *, long)) (chunkfun), \
(void (*) (void *, void *)) (freefun), (arg))
-#define obstack_chunkfun(h, newchunkfun) \
+# define obstack_chunkfun(h, newchunkfun) \
((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun))
-#define obstack_freefun(h, newfreefun) \
+# define obstack_freefun(h, newfreefun) \
((h) -> freefun = (void (*)(void *, struct _obstack_chunk *)) (newfreefun))
#else
-#define obstack_init(h) \
+# define obstack_init(h) \
_obstack_begin ((h), 0, 0, \
(void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free)
-#define obstack_begin(h, size) \
+# define obstack_begin(h, size) \
_obstack_begin ((h), (size), 0, \
(void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free)
-#define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \
+# define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \
_obstack_begin ((h), (size), (alignment), \
(void *(*) ()) (chunkfun), (void (*) ()) (freefun))
-#define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
+# define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
_obstack_begin_1 ((h), (size), (alignment), \
(void *(*) ()) (chunkfun), (void (*) ()) (freefun), (arg))
-#define obstack_chunkfun(h, newchunkfun) \
+# define obstack_chunkfun(h, newchunkfun) \
((h) -> chunkfun = (struct _obstack_chunk *(*)()) (newchunkfun))
-#define obstack_freefun(h, newfreefun) \
+# define obstack_freefun(h, newfreefun) \
((h) -> freefun = (void (*)()) (newfreefun))
#endif
@@ -350,30 +344,30 @@ extern int obstack_exit_failure;
#define obstack_memory_used(h) _obstack_memory_used (h)
-#if defined (__GNUC__) && defined (__STDC__) && __STDC__
+#if defined __GNUC__ && defined __STDC__ && __STDC__
/* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and
does not implement __extension__. But that compiler doesn't define
__GNUC_MINOR__. */
-#if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__)
-#define __extension__
-#endif
+# if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__)
+# define __extension__
+# endif
/* For GNU C, if not -traditional,
we can define these macros to compute all args only once
without using a global variable.
Also, we can avoid using the `temp' slot, to make faster code. */
-#define obstack_object_size(OBSTACK) \
+# define obstack_object_size(OBSTACK) \
__extension__ \
({ struct obstack *__o = (OBSTACK); \
(unsigned) (__o->next_free - __o->object_base); })
-#define obstack_room(OBSTACK) \
+# define obstack_room(OBSTACK) \
__extension__ \
({ struct obstack *__o = (OBSTACK); \
(unsigned) (__o->chunk_limit - __o->next_free); })
-#define obstack_make_room(OBSTACK,length) \
+# define obstack_make_room(OBSTACK,length) \
__extension__ \
({ struct obstack *__o = (OBSTACK); \
int __len = (length); \
@@ -381,7 +375,12 @@ __extension__ \
_obstack_newchunk (__o, __len); \
(void) 0; })
-#define obstack_grow(OBSTACK,where,length) \
+# define obstack_empty_p(OBSTACK) \
+ __extension__ \
+ ({ struct obstack *__o = (OBSTACK); \
+ (__o->chunk->prev == 0 && __o->next_free - __o->chunk->contents == 0); })
+
+# define obstack_grow(OBSTACK,where,length) \
__extension__ \
({ struct obstack *__o = (OBSTACK); \
int __len = (length); \
@@ -391,7 +390,7 @@ __extension__ \
__o->next_free += __len; \
(void) 0; })
-#define obstack_grow0(OBSTACK,where,length) \
+# define obstack_grow0(OBSTACK,where,length) \
__extension__ \
({ struct obstack *__o = (OBSTACK); \
int __len = (length); \
@@ -402,7 +401,7 @@ __extension__ \
*(__o->next_free)++ = 0; \
(void) 0; })
-#define obstack_1grow(OBSTACK,datum) \
+# define obstack_1grow(OBSTACK,datum) \
__extension__ \
({ struct obstack *__o = (OBSTACK); \
if (__o->next_free + 1 > __o->chunk_limit) \
@@ -414,7 +413,7 @@ __extension__ \
and that the data added so far to the current object
shares that much alignment. */
-#define obstack_ptr_grow(OBSTACK,datum) \
+# define obstack_ptr_grow(OBSTACK,datum) \
__extension__ \
({ struct obstack *__o = (OBSTACK); \
if (__o->next_free + sizeof (void *) > __o->chunk_limit) \
@@ -422,7 +421,7 @@ __extension__ \
*((void **)__o->next_free)++ = ((void *)datum); \
(void) 0; })
-#define obstack_int_grow(OBSTACK,datum) \
+# define obstack_int_grow(OBSTACK,datum) \
__extension__ \
({ struct obstack *__o = (OBSTACK); \
if (__o->next_free + sizeof (int) > __o->chunk_limit) \
@@ -430,10 +429,10 @@ __extension__ \
*((int *)__o->next_free)++ = ((int)datum); \
(void) 0; })
-#define obstack_ptr_grow_fast(h,aptr) (*((void **) (h)->next_free)++ = (void *)aptr)
-#define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint)
+# define obstack_ptr_grow_fast(h,aptr) (*((void **) (h)->next_free)++ = (void *)aptr)
+# define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint)
-#define obstack_blank(OBSTACK,length) \
+# define obstack_blank(OBSTACK,length) \
__extension__ \
({ struct obstack *__o = (OBSTACK); \
int __len = (length); \
@@ -442,19 +441,19 @@ __extension__ \
__o->next_free += __len; \
(void) 0; })
-#define obstack_alloc(OBSTACK,length) \
+# define obstack_alloc(OBSTACK,length) \
__extension__ \
({ struct obstack *__h = (OBSTACK); \
obstack_blank (__h, (length)); \
obstack_finish (__h); })
-#define obstack_copy(OBSTACK,where,length) \
+# define obstack_copy(OBSTACK,where,length) \
__extension__ \
({ struct obstack *__h = (OBSTACK); \
obstack_grow (__h, (where), (length)); \
obstack_finish (__h); })
-#define obstack_copy0(OBSTACK,where,length) \
+# define obstack_copy0(OBSTACK,where,length) \
__extension__ \
({ struct obstack *__h = (OBSTACK); \
obstack_grow0 (__h, (where), (length)); \
@@ -462,7 +461,7 @@ __extension__ \
/* The local variable is named __o1 to avoid a name conflict
when obstack_blank is called. */
-#define obstack_finish(OBSTACK) \
+# define obstack_finish(OBSTACK) \
__extension__ \
({ struct obstack *__o1 = (OBSTACK); \
void *value; \
@@ -478,7 +477,7 @@ __extension__ \
__o1->object_base = __o1->next_free; \
value; })
-#define obstack_free(OBSTACK, OBJ) \
+# define obstack_free(OBSTACK, OBJ) \
__extension__ \
({ struct obstack *__o = (OBSTACK); \
void *__obj = (OBJ); \
@@ -488,31 +487,34 @@ __extension__ \
#else /* not __GNUC__ or not __STDC__ */
-#define obstack_object_size(h) \
+# define obstack_object_size(h) \
(unsigned) ((h)->next_free - (h)->object_base)
-#define obstack_room(h) \
+# define obstack_room(h) \
(unsigned) ((h)->chunk_limit - (h)->next_free)
+# define obstack_empty_p(h) \
+ ((h)->chunk->prev == 0 && (h)->next_free - (h)->chunk->contents == 0)
+
/* Note that the call to _obstack_newchunk is enclosed in (..., 0)
so that we can avoid having void expressions
in the arms of the conditional expression.
Casting the third operand to void was tried before,
but some compilers won't accept it. */
-#define obstack_make_room(h,length) \
+# define obstack_make_room(h,length) \
( (h)->temp = (length), \
(((h)->next_free + (h)->temp > (h)->chunk_limit) \
? (_obstack_newchunk ((h), (h)->temp), 0) : 0))
-#define obstack_grow(h,where,length) \
+# define obstack_grow(h,where,length) \
( (h)->temp = (length), \
(((h)->next_free + (h)->temp > (h)->chunk_limit) \
? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \
_obstack_memcpy ((h)->next_free, (char *) (where), (h)->temp), \
(h)->next_free += (h)->temp)
-#define obstack_grow0(h,where,length) \
+# define obstack_grow0(h,where,length) \
( (h)->temp = (length), \
(((h)->next_free + (h)->temp + 1 > (h)->chunk_limit) \
? (_obstack_newchunk ((h), (h)->temp + 1), 0) : 0), \
@@ -520,40 +522,40 @@ __extension__ \
(h)->next_free += (h)->temp, \
*((h)->next_free)++ = 0)
-#define obstack_1grow(h,datum) \
+# define obstack_1grow(h,datum) \
( (((h)->next_free + 1 > (h)->chunk_limit) \
? (_obstack_newchunk ((h), 1), 0) : 0), \
(*((h)->next_free)++ = (datum)))
-#define obstack_ptr_grow(h,datum) \
+# define obstack_ptr_grow(h,datum) \
( (((h)->next_free + sizeof (char *) > (h)->chunk_limit) \
? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \
(*((char **) (((h)->next_free+=sizeof(char *))-sizeof(char *))) = ((char *) datum)))
-#define obstack_int_grow(h,datum) \
+# define obstack_int_grow(h,datum) \
( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \
? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \
(*((int *) (((h)->next_free+=sizeof(int))-sizeof(int))) = ((int) datum)))
-#define obstack_ptr_grow_fast(h,aptr) (*((char **) (h)->next_free)++ = (char *) aptr)
-#define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint)
+# define obstack_ptr_grow_fast(h,aptr) (*((char **) (h)->next_free)++ = (char *) aptr)
+# define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint)
-#define obstack_blank(h,length) \
+# define obstack_blank(h,length) \
( (h)->temp = (length), \
(((h)->chunk_limit - (h)->next_free < (h)->temp) \
? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \
((h)->next_free += (h)->temp))
-#define obstack_alloc(h,length) \
+# define obstack_alloc(h,length) \
(obstack_blank ((h), (length)), obstack_finish ((h)))
-#define obstack_copy(h,where,length) \
+# define obstack_copy(h,where,length) \
(obstack_grow ((h), (where), (length)), obstack_finish ((h)))
-#define obstack_copy0(h,where,length) \
+# define obstack_copy0(h,where,length) \
(obstack_grow0 ((h), (where), (length)), obstack_finish ((h)))
-#define obstack_finish(h) \
+# define obstack_finish(h) \
( ((h)->next_free == (h)->object_base \
? (((h)->maybe_empty_object = 1), 0) \
: 0), \
@@ -567,21 +569,21 @@ __extension__ \
(h)->object_base = (h)->next_free, \
__INT_TO_PTR ((h)->temp))
-#if defined (__STDC__) && __STDC__
-#define obstack_free(h,obj) \
+# if defined __STDC__ && __STDC__
+# define obstack_free(h,obj) \
( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \
(((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\
? (int) ((h)->next_free = (h)->object_base \
= (h)->temp + (char *) (h)->chunk) \
: (((obstack_free) ((h), (h)->temp + (char *) (h)->chunk), 0), 0)))
-#else
-#define obstack_free(h,obj) \
+# else
+# define obstack_free(h,obj) \
( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \
(((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\
? (int) ((h)->next_free = (h)->object_base \
= (h)->temp + (char *) (h)->chunk) \
: (_obstack_free ((h), (h)->temp + (char *) (h)->chunk), 0)))
-#endif
+# endif
#endif /* not __GNUC__ or not __STDC__ */
diff --git a/gcc/optabs.c b/gcc/optabs.c
index 992660d0c87..0c9a023cfc4 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -1,5 +1,5 @@
/* Expand the basic unary and binary arithmetic operations, for GNU compiler.
- Copyright (C) 1987, 88, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 92-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -20,6 +20,7 @@ Boston, MA 02111-1307, USA. */
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "tree.h"
#include "flags.h"
@@ -124,7 +125,6 @@ rtx sjpopnthrow_libfunc;
rtx terminate_libfunc;
rtx setjmp_libfunc;
rtx longjmp_libfunc;
-rtx get_dynamic_handler_chain_libfunc;
rtx eqhf2_libfunc;
rtx nehf2_libfunc;
@@ -209,6 +209,12 @@ rtx fixunstfsi_libfunc;
rtx fixunstfdi_libfunc;
rtx fixunstfti_libfunc;
+rtx chkr_check_addr_libfunc;
+rtx chkr_set_right_libfunc;
+rtx chkr_copy_bitmap_libfunc;
+rtx chkr_check_exec_libfunc;
+rtx chkr_check_str_libfunc;
+
/* Indexed by the rtx-code for a conditional (eg. EQ, LT,...)
gives the gen_function to make a branch to test that condition. */
@@ -2954,6 +2960,9 @@ emit_float_lib_cmp (x, y, comparison)
case LE:
libfunc = lehf2_libfunc;
break;
+
+ default:
+ break;
}
else if (mode == SFmode)
switch (comparison)
@@ -2981,6 +2990,9 @@ emit_float_lib_cmp (x, y, comparison)
case LE:
libfunc = lesf2_libfunc;
break;
+
+ default:
+ break;
}
else if (mode == DFmode)
switch (comparison)
@@ -3008,6 +3020,9 @@ emit_float_lib_cmp (x, y, comparison)
case LE:
libfunc = ledf2_libfunc;
break;
+
+ default:
+ break;
}
else if (mode == XFmode)
switch (comparison)
@@ -3035,6 +3050,9 @@ emit_float_lib_cmp (x, y, comparison)
case LE:
libfunc = lexf2_libfunc;
break;
+
+ default:
+ break;
}
else if (mode == TFmode)
switch (comparison)
@@ -3062,6 +3080,9 @@ emit_float_lib_cmp (x, y, comparison)
case LE:
libfunc = letf2_libfunc;
break;
+
+ default:
+ break;
}
else
{
@@ -3160,15 +3181,14 @@ emit_conditional_move (target, code, op0, op1, cmode, op2, op3, mode,
if (cmode == VOIDmode)
cmode = GET_MODE (op0);
- if ((CONSTANT_P (op2) && ! CONSTANT_P (op3))
- || (GET_CODE (op2) == CONST_INT && GET_CODE (op3) != CONST_INT))
+ if (((CONSTANT_P (op2) && ! CONSTANT_P (op3))
+ || (GET_CODE (op2) == CONST_INT && GET_CODE (op3) != CONST_INT))
+ && (GET_MODE_CLASS (GET_MODE (op1)) != MODE_FLOAT
+ || TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT || flag_fast_math))
{
tem = op2;
op2 = op3;
op3 = tem;
- /* ??? This may not be appropriate (consider IEEE). Perhaps we should
- call can_reverse_comparison_p here and bail out if necessary.
- It's not clear whether we need to do this canonicalization though. */
code = reverse_condition (code);
}
@@ -4284,7 +4304,6 @@ init_optabs ()
setjmp_libfunc = gen_rtx (SYMBOL_REF, Pmode, "setjmp");
longjmp_libfunc = gen_rtx (SYMBOL_REF, Pmode, "longjmp");
#endif
- get_dynamic_handler_chain_libfunc = gen_rtx (SYMBOL_REF, Pmode, "__get_dynamic_handler_chain");
eqhf2_libfunc = gen_rtx (SYMBOL_REF, Pmode, "__eqhf2");
nehf2_libfunc = gen_rtx (SYMBOL_REF, Pmode, "__nehf2");
@@ -4369,6 +4388,13 @@ init_optabs ()
fixunstfdi_libfunc = gen_rtx (SYMBOL_REF, Pmode, "__fixunstfdi");
fixunstfti_libfunc = gen_rtx (SYMBOL_REF, Pmode, "__fixunstfti");
+ /* For check-memory-usage. */
+ chkr_check_addr_libfunc = gen_rtx (SYMBOL_REF, VOIDmode, "chkr_check_addr");
+ chkr_set_right_libfunc = gen_rtx (SYMBOL_REF, VOIDmode, "chkr_set_right");
+ chkr_copy_bitmap_libfunc = gen_rtx (SYMBOL_REF, VOIDmode, "chkr_copy_bitmap");
+ chkr_check_exec_libfunc = gen_rtx (SYMBOL_REF, VOIDmode, "chkr_check_exec");
+ chkr_check_str_libfunc = gen_rtx (SYMBOL_REF, VOIDmode, "chkr_check_str");
+
#ifdef INIT_TARGET_OPTABS
/* Allow the target to add more libcalls or rename some, etc. */
INIT_TARGET_OPTABS;
diff --git a/gcc/output.h b/gcc/output.h
index a7c9b1e7876..f1725b027b9 100644
--- a/gcc/output.h
+++ b/gcc/output.h
@@ -56,20 +56,20 @@ extern void shorten_branches PROTO((rtx));
for the new function. The label for the function and associated
assembler pseudo-ops have already been output in
`assemble_start_function'. */
-extern void final_start_function STDIO_PROTO((rtx, FILE *, int));
+extern void final_start_function PROTO((rtx, FILE *, int));
/* Output assembler code for the end of a function.
For clarity, args are same as those of `final_start_function'
even though not all of them are needed. */
-extern void final_end_function STDIO_PROTO((rtx, FILE *, int));
+extern void final_end_function PROTO((rtx, FILE *, int));
/* Output assembler code for some insns: all or part of a function. */
-extern void final STDIO_PROTO((rtx, FILE *, int, int));
+extern void final PROTO((rtx, FILE *, int, int));
/* The final scan for one insn, INSN. Args are same as in `final', except
that INSN is the insn being scanned. Value returned is the next insn to
be scanned. */
-extern rtx final_scan_insn STDIO_PROTO((rtx, FILE *, int, int, int));
+extern rtx final_scan_insn PROTO((rtx, FILE *, int, int, int));
/* Replace a SUBREG with a REG or a MEM, based on the thing it is a
subreg of. */
@@ -93,12 +93,11 @@ extern void output_address PROTO((rtx));
/* Print an integer constant expression in assembler syntax.
Addition and subtraction are the only arithmetic
that may appear in these expressions. */
-extern void output_addr_const STDIO_PROTO((FILE *, rtx));
+extern void output_addr_const PROTO((FILE *, rtx));
/* Output a string of assembler code, substituting numbers, strings
and fixed syntactic prefixes. */
-extern void asm_fprintf STDIO_PROTO(PVPROTO((FILE *file,
- char *p, ...)));
+extern void asm_fprintf PROTO(PVPROTO((FILE *file, char *p, ...)));
/* Split up a CONST_DOUBLE or integer constant rtx into two rtx's for single
words. */
@@ -119,8 +118,8 @@ extern void leaf_renumber_regs_insn PROTO((rtx));
extern void allocate_for_life_analysis PROTO((void));
extern int regno_uninitialized PROTO((int));
extern int regno_clobbered_at_setjmp PROTO((int));
-extern void dump_flow_info STDIO_PROTO((FILE *));
-extern void flow_analysis STDIO_PROTO((rtx, int, FILE *));
+extern void dump_flow_info PROTO((FILE *));
+extern void flow_analysis PROTO((rtx, int, FILE *));
#endif
/* Functions in varasm.c. */
@@ -257,7 +256,7 @@ extern void assemble_label PROTO((char *));
Otherwise NAME is transformed in an implementation-defined way
(usually by the addition of an underscore).
Many macros in the tm file are defined to call this function. */
-extern void assemble_name STDIO_PROTO((FILE *, char *));
+extern void assemble_name PROTO((FILE *, char *));
#ifdef RTX_CODE
/* Assemble the integer constant X into an object of SIZE bytes.
diff --git a/gcc/patch-apollo-includes b/gcc/patch-apollo-includes
new file mode 100755
index 00000000000..8daf88cb54e
--- /dev/null
+++ b/gcc/patch-apollo-includes
@@ -0,0 +1,69 @@
+#!/bin/sh
+# patch-apollo-includes -- fix some (but not all!) Apollo brain damage.
+
+FILES_TO_PATCH='sys/types.h setjmp.h'
+
+mkdir sys
+
+for i in $FILES_TO_PATCH;
+do
+ cp /bsd4.3/usr/include/$i ./$i
+done
+
+patch -b -apollo <<'EOP'
+*** /bsd4.3/usr/include/sys/types.h Fri Apr 8 20:29:06 1988
+--- sys/types.h Wed Feb 26 21:17:57 1992
+***************
+*** 38,44 ****
+--- 38,47 ----
+ typedef char * caddr_t;
+ typedef u_long ino_t;
+ typedef long swblk_t;
++ #ifndef _SIZE_T
++ #define _SIZE_T
+ typedef long size_t;
++ #endif
+ typedef long time_t;
+ typedef long dev_t;
+ typedef long off_t;
+*** /bsd4.3/usr/include/setjmp.h Fri Feb 3 21:40:21 1989
+--- setjmp.h Sun Feb 23 19:06:55 1992
+***************
+*** 24,30 ****
+--- 24,39 ----
+ #endif
+
+
++ #ifdef __GNUC__
+ #ifdef _PROTOTYPES
++ extern int sigsetjmp (sigjmp_buf env, int savemask);
++ extern void siglongjmp (sigjmp_buf env, int val);
++ #else
++ extern int sigsetjmp();
++ extern void siglongjmp();
++ #endif /* _PROTOTYPES */
++ #else /* not __GNUC__ */
++ #ifdef _PROTOTYPES
+ extern int sigsetjmp(
+ sigjmp_buf env,
+ int savemask
+***************
+*** 37,43 ****
+ extern int sigsetjmp() #options(abnormal);
+ extern void siglongjmp() #options(noreturn);
+ #endif /* _PROTOTYPES */
+!
+ #undef _PROTOTYPES
+
+ #ifdef __cplusplus
+--- 46,52 ----
+ extern int sigsetjmp() #options(abnormal);
+ extern void siglongjmp() #options(noreturn);
+ #endif /* _PROTOTYPES */
+! #endif /* not __GNUC__ */
+ #undef _PROTOTYPES
+
+ #ifdef __cplusplus
+EOP
+
+exit 0
diff --git a/gcc/pexecute.c b/gcc/pexecute.c
index db43a2efde4..5c2779fcc22 100644
--- a/gcc/pexecute.c
+++ b/gcc/pexecute.c
@@ -1,6 +1,6 @@
/* Utilities to execute a program in a subprocess (possibly linked by pipes
with other subprocesses), and wait for it.
- Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
This file is part of the libiberty library.
Libiberty is free software; you can redistribute it and/or
@@ -23,11 +23,14 @@ Boston, MA 02111-1307, USA. */
/* This file lives in at least two places: libiberty and gcc.
Don't change one without the other. */
+#ifdef IN_GCC
+#include "config.h"
+#endif
+
#include <stdio.h>
#include <errno.h>
#ifdef IN_GCC
-#include "config.h"
#include "gansidecl.h"
/* ??? Need to find a suitable header file. */
#define PEXECUTE_FIRST 1
@@ -217,16 +220,23 @@ pwait (pid, status, flags)
#endif /* MSDOS */
-#if defined (_WIN32) && !defined (__CYGWIN32__)
+#if defined (_WIN32)
#include <process.h>
+#include <signal.h>
extern int _spawnv ();
extern int _spawnvp ();
+#ifdef __CYGWIN32__
+
+#define fix_argv(argvec) (argvec)
+
+#else
+
/* This is a kludge to get around the Microsoft C spawn functions' propensity
to remove the outermost set of double quotes from all arguments. */
-const char * const *
+char * const *
fix_argv (argvec)
char **argvec;
{
@@ -243,7 +253,7 @@ fix_argv (argvec)
{
if (temp[j] == '"')
{
- newtemp = xmalloc (len + 2);
+ newtemp = (char *) xmalloc (len + 2);
strncpy (newtemp, temp, j);
newtemp [j] = '\\';
strncpy (&newtemp [j+1], &temp [j], len-j);
@@ -257,16 +267,19 @@ fix_argv (argvec)
argvec[i] = temp;
}
- return (const char * const *) argvec;
+ return (char * const *) argvec;
}
+#endif /* ! defined (__CYGWIN32__) */
+
int
pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
const char *program;
char * const *argv;
const char *this_pname;
const char *temp_base;
- char **errmsg_fmt, **errmsg_arg;
+ char **errmsg_fmt;
+ const char **errmsg_arg;
int flags;
{
int pid;
@@ -274,7 +287,7 @@ pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
if ((flags & PEXECUTE_ONE) != PEXECUTE_ONE)
abort ();
pid = (flags & PEXECUTE_SEARCH ? _spawnvp : _spawnv)
- (_P_NOWAIT, program, fix_argv(argv));
+ (_P_NOWAIT, program, fix_argv (argv));
if (pid == -1)
{
*errmsg_fmt = install_error_msg;
@@ -290,9 +303,23 @@ pwait (pid, status, flags)
int *status;
int flags;
{
+ int termstat;
+
+ pid = cwait (&termstat, pid, WAIT_CHILD);
+
/* ??? Here's an opportunity to canonicalize the values in STATUS.
Needed? */
- return _cwait (status, pid, WAIT_CHILD);
+
+ /* cwait returns the child process exit code in termstat.
+ A value of 3 indicates that the child caught a signal, but not
+ which one. Since only SIGABRT, SIGFPE and SIGINT do anything, we
+ report SIGABRT. */
+ if (termstat == 3)
+ *status = SIGABRT;
+ else
+ *status = (((termstat) & 0xff) << 8);
+
+ return pid;
}
#endif /* _WIN32 */
@@ -396,7 +423,7 @@ pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
/* See if we have an argument that needs fixing. */
if (strchr(argv[i], '/'))
{
- tmpname = xmalloc (256);
+ tmpname = (char *) xmalloc (256);
mpwify_filename (argv[i], tmpname);
argv[i] = tmpname;
}
@@ -421,7 +448,7 @@ pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
/* See if we have an argument that needs fixing. */
if (strchr(argv[i], '/'))
{
- tmpname = xmalloc (256);
+ tmpname = (char *) xmalloc (256);
mpwify_filename (argv[i], tmpname);
argv[i] = tmpname;
}
@@ -478,7 +505,7 @@ pfinish ()
/* include for Unix-like environments but not for Dos-like environments */
#if ! defined (__MSDOS__) && ! defined (OS2) && ! defined (MPW) \
- && (defined (__CYGWIN32__) || ! defined (_WIN32))
+ && ! defined (_WIN32)
#ifdef VMS
#define vfork() (decc$$alloc_vfork_blocks() >= 0 ? \
diff --git a/gcc/prefix.c b/gcc/prefix.c
new file mode 100644
index 00000000000..aa6cf51ed18
--- /dev/null
+++ b/gcc/prefix.c
@@ -0,0 +1,310 @@
+/* Utility to update paths from internal to external forms.
+ Copyright (C) 1997, 1998 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 Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with GCC; see the file COPYING. If not, write to the Free
+Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* This file contains routines to update a path, both to canonicalize
+ the directory format and to handle any prefix translation.
+
+ This file must be compiled with -DPREFIX= to specify the "prefix"
+ value used by configure. If a filename does not begin with this
+ prefix, it will not be affected other than by directory canonicalization.
+
+ Each caller of 'update_path' may specify both a filename and
+ a translation prefix and consist of the name of the package that contains
+ the file ("@GCC", "@BINUTIL", "@GNU", etc).
+
+ If the prefix is not specified, the filename will only undergo
+ directory canonicalization.
+
+ If it is specified, the string given by PREFIX will be replaced
+ by the specified prefix (with a '@' in front unless the prefix begins
+ with a '$') and further translation will be done as follows
+ until none of the two conditions below are met:
+
+ 1) If the filename begins with '@', the string between the '@' and
+ the end of the name or the first '/' or directory separator will
+ be considered a "key" and looked up as follows:
+
+ -- If this is a Win32 OS, then the Registry will be examined for
+ an entry of "key" in
+
+ HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\
+
+ if found, that value will be used.
+
+ -- If not found (or not a Win32 OS), the environment variable
+ key_ROOT (the value of "key" concatenated with the constant "_ROOT")
+ is tried. If that fails, then PREFIX (see above) is used.
+
+ 2) If the filename begins with a '$', the rest of the string up
+ to the end or the first '/' or directory separator will be used
+ as an environment variable, whose value will be returned.
+
+ Once all this is done, any '/' will be converted to DIR_SEPARATOR,
+ if they are different.
+
+ NOTE: using resolve_keyed_path under Win32 requires linking with
+ advapi32.dll. */
+
+
+#include "config.h"
+#include "gansidecl.h"
+#ifdef __STDC__
+#include <stdarg.h>
+#else
+#include <varargs.h>
+#endif
+
+#ifdef _WIN32
+#include <windows.h>
+#endif
+
+static char *get_key_value PROTO((char *));
+static char *translate_name PROTO((char *));
+static char *concat PVPROTO((char *, ...));
+static char *save_string PROTO((char *, int));
+
+#ifdef _WIN32
+static char *lookup_key PROTO((char *));
+static HKEY reg_key = (HKEY) INVALID_HANDLE_VALUE;
+#endif
+
+extern char *getenv ();
+
+/* Given KEY, as above, return its value. */
+
+static char *
+get_key_value (key)
+ char *key;
+{
+ char *prefix = 0;
+
+#ifdef _WIN32
+ prefix = lookup_key (key);
+#endif
+
+ if (prefix == 0)
+ prefix = getenv (concat (key, "_ROOT", NULL_PTR));
+
+ return prefix;
+}
+
+/* Concatenate a sequence of strings, returning the result.
+
+ This function is based on the one in libiberty. */
+
+static char *
+concat VPROTO((char *first, ...))
+{
+ register int length;
+ register char *newstr;
+ register char *end;
+ register char *arg;
+ va_list args;
+#ifndef __STDC__
+ char *first;
+#endif
+
+ /* First compute the size of the result and get sufficient memory. */
+
+ VA_START (args, first);
+#ifndef __STDC__
+ first = va_arg (args, char *);
+#endif
+
+ arg = first;
+ length = 0;
+
+ while (arg != 0)
+ {
+ length += strlen (arg);
+ arg = va_arg (args, char *);
+ }
+
+ newstr = (char *) malloc (length + 1);
+ va_end (args);
+
+ /* Now copy the individual pieces to the result string. */
+
+ VA_START (args, first);
+#ifndef __STDC__
+ first = va_arg (args, char *);
+#endif
+
+ end = newstr;
+ arg = first;
+ while (arg != 0)
+ {
+ while (*arg)
+ *end++ = *arg++;
+ arg = va_arg (args, char *);
+ }
+ *end = '\000';
+ va_end (args);
+
+ return (newstr);
+}
+
+/* Return a copy of a string that has been placed in the heap. */
+
+static char *
+save_string (s, len)
+ char *s;
+ int len;
+{
+ register char *result = (char *) malloc (len + 1);
+
+ bcopy (s, result, len);
+ result[len] = 0;
+ return result;
+}
+
+#ifdef _WIN32
+
+/* Look up "key" in the registry, as above. */
+
+static char *
+lookup_key (key)
+ char *key;
+{
+ char *dst;
+ DWORD size;
+ DWORD type;
+ LONG res;
+
+ if (reg_key == (HKEY) INVALID_HANDLE_VALUE)
+ {
+ res = RegOpenKeyExA (HKEY_LOCAL_MACHINE, "SOFTWARE", 0,
+ KEY_READ, &reg_key);
+
+ if (res == ERROR_SUCCESS)
+ res = RegOpenKeyExA (reg_key, "Free Software Foundation", 0,
+ KEY_READ, &reg_key);
+
+ if (res != ERROR_SUCCESS)
+ {
+ reg_key = (HKEY) INVALID_HANDLE_VALUE;
+ return 0;
+ }
+ }
+
+ size = 32;
+ dst = (char *) malloc (size);
+
+ res = RegQueryValueExA (reg_key, key, 0, &type, dst, &size);
+ if (res == ERROR_MORE_DATA && type == REG_SZ)
+ {
+ dst = (char *) realloc (dst, size);
+ res = RegQueryValueExA (reg_key, key, 0, &type, dst, &size);
+ }
+
+ if (type != REG_SZ || res != ERROR_SUCCESS)
+ {
+ free (dst);
+ dst = 0;
+ }
+
+ return dst;
+}
+#endif
+
+/* If NAME starts with a '@' or '$', apply the translation rules above
+ and return a new name. Otherwise, return the given name. */
+
+static char *
+translate_name (name)
+ char *name;
+{
+ char code = name[0];
+ char *key, *prefix = 0;
+ int keylen;
+
+ if (code != '@' && code != '$')
+ return name;
+
+ for (keylen = 0;
+ (name[keylen + 1] != 0 && name[keylen + 1] != '/'
+#ifdef DIR_SEPARATOR
+ && name[keylen + 1] != DIR_SEPARATOR
+#endif
+ );
+ keylen++)
+ ;
+
+ key = alloca (keylen + 1);
+ strncpy (key, &name[1], keylen);
+ key[keylen] = 0;
+
+ name = &name[keylen + 1];
+
+ if (code == '@')
+ prefix = get_key_value (key);
+ else
+ prefix = getenv (key);
+
+ if (prefix == 0)
+ prefix = PREFIX;
+
+ /* Remove any trailing directory separator from what we got. */
+ if (prefix[strlen (prefix) - 1] == '/'
+#ifdef DIR_SEPARATOR
+ || prefix[strlen (prefix) - 1] == DIR_SEPARATOR
+#endif
+ )
+ {
+ prefix = save_string (prefix, strlen (prefix));
+ prefix[strlen (prefix) - 1] = 0;
+ }
+
+ return concat (prefix, name, NULL_PTR);
+}
+
+/* Update PATH using KEY if PATH starts with PREFIX. */
+
+char *
+update_path (path, key)
+ char *path;
+ char *key;
+{
+ if (! strncmp (path, PREFIX, strlen (PREFIX)) && key != 0)
+ {
+ if (key[0] != '$')
+ key = concat ("@", key, NULL_PTR);
+
+ path = concat (key, &path[strlen (PREFIX)], NULL_PTR);
+
+ while (path[0] == '@' || path[0] == '$')
+ path = translate_name (path);
+ }
+
+#ifdef DIR_SEPARATOR
+ if (DIR_SEPARATOR != '/')
+ {
+ int i;
+ int len = strlen (path);
+
+ path = save_string (path, len);
+ for (i = 0; i < len; i++)
+ if (path[i] == '/')
+ path[i] = DIR_SEPARATOR;
+ }
+#endif
+
+ return path;
+}
diff --git a/gcc/print-rtl.c b/gcc/print-rtl.c
index 7c268197a74..60405bd8a81 100644
--- a/gcc/print-rtl.c
+++ b/gcc/print-rtl.c
@@ -1,5 +1,5 @@
/* Print RTL for GNU C Compiler.
- Copyright (C) 1987, 1988, 1992 Free Software Foundation, Inc.
+ Copyright (C) 1987, 1988, 1992, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -47,6 +47,8 @@ char spaces[] = "
static int sawclose = 0;
+static int indent;
+
/* Names for patterns. Non-zero only when linked with insn-output.c. */
extern char **insn_name_ptr;
@@ -57,7 +59,6 @@ static void
print_rtx (in_rtx)
register rtx in_rtx;
{
- static int indent;
register int i, j;
register char *format_ptr;
register int is_insn;
@@ -223,6 +224,25 @@ print_rtx (in_rtx)
sawclose = 1;
}
+/* Print an rtx on the current line of FILE. Initially indent IND
+ characters. */
+
+void
+print_inline_rtx (outf, x, ind)
+ FILE *outf;
+ rtx x;
+{
+ int oldsaw = sawclose;
+ int oldindent = indent;
+
+ sawclose = 0;
+ indent = ind;
+ outfile = outf;
+ print_rtx (x);
+ sawclose = oldsaw;
+ indent = oldindent;
+}
+
/* Call this function from the debugger to see what X looks like. */
void
@@ -274,7 +294,7 @@ debug_rtx_list (x, n)
The found insn is returned to enable further debugging analysis. */
rtx
-debug_rtx_find(x, uid)
+debug_rtx_find (x, uid)
rtx x;
int uid;
{
@@ -330,3 +350,16 @@ print_rtl (outf, rtx_first)
print_rtx (rtx_first);
}
}
+
+/* Like print_rtx, except specify a file. */
+
+void
+print_rtl_single (outf, x)
+ FILE *outf;
+ rtx x;
+{
+ outfile = outf;
+ sawclose = 0;
+ print_rtx (x);
+ putc ('\n', outf);
+}
diff --git a/gcc/print-tree.c b/gcc/print-tree.c
index 4949aec117a..f7468536b55 100644
--- a/gcc/print-tree.c
+++ b/gcc/print-tree.c
@@ -1,5 +1,5 @@
/* Prints out tree in human readable form - GNU C-compiler
- Copyright (C) 1990, 91, 93, 94, 95, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1990, 91, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -541,9 +541,8 @@ print_node (file, prefix, node, indent)
case '2':
case 'r':
case 's':
- switch (TREE_CODE (node))
+ if (TREE_CODE (node) == BIND_EXPR)
{
- case BIND_EXPR:
print_node (file, "vars", TREE_OPERAND (node, 0), indent + 4);
print_node (file, "body", TREE_OPERAND (node, 1), indent + 4);
print_node (file, "block", TREE_OPERAND (node, 2), indent + 4);
@@ -570,6 +569,8 @@ print_node (file, prefix, node, indent)
break;
case RTL_EXPR:
first_rtl = 0;
+ default:
+ break;
}
for (i = 0; i < len; i++)
{
@@ -689,6 +690,10 @@ print_node (file, prefix, node, indent)
case OP_IDENTIFIER:
print_node (file, "op1", TREE_PURPOSE (node), indent + 4);
print_node (file, "op2", TREE_VALUE (node), indent + 4);
+ break;
+
+ default:
+ break;
}
break;
diff --git a/gcc/profile.c b/gcc/profile.c
index 0509562f6f6..e4b52c69380 100644
--- a/gcc/profile.c
+++ b/gcc/profile.c
@@ -1,5 +1,5 @@
/* Calculate branch probabilities, and basic block execution counts.
- Copyright (C) 1990, 1991, 1992, 1993, 1994, 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1990, 91-94, 96, 97, 1998 Free Software Foundation, Inc.
Contributed by James E. Wilson, UC Berkeley/Cygnus Support;
based on some ideas from Dain Samples of UC Berkeley.
Further mangling by Bob Manson, Cygnus Support.
@@ -41,19 +41,19 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
achieve this, see Dain Sample's UC Berkeley thesis. */
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "flags.h"
#include "insn-flags.h"
#include "insn-config.h"
#include "output.h"
-#include <stdio.h>
+#include "regs.h"
#include "tree.h"
#include "output.h"
#include "gcov-io.h"
extern char * xmalloc ();
extern void free ();
-extern tree get_file_function_name ();
/* One of these is dynamically created whenever we identify an arc in the
function. */
@@ -427,7 +427,7 @@ output_gcov_string (string, delimiter)
the flow graph that are needed to reconstruct the dynamic behavior of the
flow graph.
- When FLAG_BRANCH_PROBABILITIES is nonzero, this function reads auxilliary
+ When FLAG_BRANCH_PROBABILITIES is nonzero, this function reads auxiliary
information from a data file containing arc count information from previous
executions of the function being compiled. In this case, the flow graph is
annotated with actual execution counts, which are later propagated into the
@@ -861,7 +861,7 @@ branch_prob (f, dump_file)
Note that the spanning tree is considered undirected, so that as many
must-split arcs as possible can be put on it.
- Fallthough arcs which are crowded should not be chosen on the first
+ Fallthrough arcs which are crowded should not be chosen on the first
pass, since they do not require creating a new basic block. These
arcs will have fall_through set. */
@@ -1515,7 +1515,6 @@ output_arc_profiler (arcno, insert_after)
rtx mem_ref, add_ref;
rtx sequence;
-#ifdef SMALL_REGISTER_CLASSES
/* In this case, reload can use explicitly mentioned hard registers for
reloads. It is not safe to output profiling code between a call
and the instruction that copies the result to a pseudo-reg. This
@@ -1536,23 +1535,30 @@ output_arc_profiler (arcno, insert_after)
rtx return_reg;
rtx next_insert_after = next_nonnote_insn (insert_after);
- if (GET_CODE (next_insert_after) == INSN)
- {
- /* The first insn after the call may be a stack pop, skip it. */
- if (GET_CODE (PATTERN (next_insert_after)) == SET
- && SET_DEST (PATTERN (next_insert_after)) == stack_pointer_rtx)
- next_insert_after = next_nonnote_insn (next_insert_after);
+ /* The first insn after the call may be a stack pop, skip it. */
+ if (next_insert_after
+ && GET_CODE (next_insert_after) == INSN
+ && GET_CODE (PATTERN (next_insert_after)) == SET
+ && SET_DEST (PATTERN (next_insert_after)) == stack_pointer_rtx)
+ next_insert_after = next_nonnote_insn (next_insert_after);
+ if (next_insert_after
+ && GET_CODE (next_insert_after) == INSN)
+ {
if (GET_CODE (PATTERN (insert_after)) == SET)
return_reg = SET_DEST (PATTERN (insert_after));
else
return_reg = SET_DEST (XVECEXP (PATTERN (insert_after), 0, 0));
- if (reg_referenced_p (return_reg, PATTERN (next_insert_after)))
+ /* Now, NEXT_INSERT_AFTER may be an instruction that uses the
+ return value. However, it could also be something else,
+ like a CODE_LABEL, so check that the code is INSN. */
+ if (next_insert_after != 0
+ && GET_RTX_CLASS (GET_CODE (next_insert_after)) == 'i'
+ && reg_referenced_p (return_reg, PATTERN (next_insert_after)))
insert_after = next_insert_after;
}
}
-#endif
start_sequence ();
@@ -1607,7 +1613,7 @@ output_func_start_profiler ()
fndecl = build_decl (FUNCTION_DECL, fnname,
build_function_type (void_type_node, NULL_TREE));
- DECL_EXTERNAL (fndecl) = 1;
+ DECL_EXTERNAL (fndecl) = 0;
TREE_PUBLIC (fndecl) = 1;
DECL_ASSEMBLER_NAME (fndecl) = fnname;
DECL_RESULT (fndecl) = build_decl (RESULT_DECL, NULL_TREE, void_type_node);
@@ -1627,7 +1633,8 @@ output_func_start_profiler ()
expand_function_end (input_filename, lineno, 0);
poplevel (1, 0, 1);
rest_of_compilation (fndecl);
- fflush (asm_out_file);
+ if (! quiet_flag)
+ fflush (asm_out_file);
current_function_decl = NULL_TREE;
assemble_constructor (IDENTIFIER_POINTER (DECL_NAME (fndecl)));
diff --git a/gcc/protoize.c b/gcc/protoize.c
index bf5cfc764d2..34f8fe559af 100644
--- a/gcc/protoize.c
+++ b/gcc/protoize.c
@@ -1,5 +1,5 @@
/* Protoize program - Original version by Ron Guilmette (rfg@segfault.us.com).
- Copyright (C) 1989, 92-96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1989, 92-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -74,6 +74,18 @@ Boston, MA 02111-1307, USA. */
#endif
#include <setjmp.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#endif
+
#include "gansidecl.h"
/* Include getopt.h for the sake of getopt_long.
@@ -89,11 +101,7 @@ extern int errno;
#ifndef HAVE_STRERROR
extern int sys_nerr;
-#if defined(bsd4_4)
-extern const char *const sys_errlist[];
-#else
extern char *sys_errlist[];
-#endif
#else
extern char *strerror();
#endif
@@ -109,7 +117,11 @@ extern char *version_string;
#define my_access(file,flag) access((char *)file, flag)
#define my_stat(file,pkt) stat((char *)file, pkt)
+#ifdef __MINGW32__
+#define my_link(file1, file2) -1
+#else
#define my_link(file1, file2) link((char *)file1, (char *)file2)
+#endif
#define my_unlink(file) unlink((char *)file)
#define my_open(file, mode, flag) open((char *)file, mode, flag)
#define my_chmod(file, mode) chmod((char *)file, mode)
@@ -177,18 +189,12 @@ typedef char * const_pointer_type;
/* Declaring stat or __flsbuf with a prototype
causes conflicts with system headers on some systems. */
-#ifndef abort
-typedef void voidfn ();
-extern VOLATILE voidfn abort;
-#endif
extern int creat ();
#if 0 /* These conflict with stdio.h on some systems. */
extern int fprintf (FILE *, const char *, ...);
extern int printf (const char *, ...);
extern int open (const char *, int, ...);
#endif /* 0 */
-extern void exit ();
-extern void free ();
extern int read ();
extern int write ();
extern int close ();
@@ -197,9 +203,6 @@ extern int atoi ();
extern int puts ();
extern int fputs ();
extern int fputc ();
-#if !defined(_WIN32)
-extern int link ();
-#endif
extern int unlink ();
extern int access ();
@@ -216,7 +219,9 @@ extern size_t strlen ()
#endif /* !defined (POSIX) */
+#ifdef NEED_DECLARATION_RINDEX
extern char *rindex ();
+#endif
/* Look for these where the `const' qualifier is intentionally cast aside. */
@@ -304,39 +309,41 @@ static const int hash_mask = (HASH_TABLE_SIZE - 1);
#define LOCAL_INCLUDE_DIR "/usr/local/include"
#endif
-struct default_include { const char *fname; int x1, x2; } include_defaults[]
+struct default_include { const char *fname;
+ const char *component;
+ int x1, x2; } include_defaults[]
#ifdef INCLUDE_DEFAULTS
= INCLUDE_DEFAULTS;
#else
= {
/* Pick up GNU C++ specific include files. */
- { GPLUSPLUS_INCLUDE_DIR, 1, 1 },
+ { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 },
#ifdef CROSS_COMPILE
/* This is the dir for fixincludes. Put it just before
the files that we fix. */
- { GCC_INCLUDE_DIR, 0, 0 },
+ { GCC_INCLUDE_DIR, "GCC", 0, 0 },
/* For cross-compilation, this dir name is generated
automatically in Makefile.in. */
- { CROSS_INCLUDE_DIR, 0, 0 },
+ { CROSS_INCLUDE_DIR, 0, 0, 0 },
/* This is another place that the target system's headers might be. */
- { TOOL_INCLUDE_DIR, 0, 0 },
+ { TOOL_INCLUDE_DIR, "BINUTILS", 0, 0 },
#else /* not CROSS_COMPILE */
/* This should be /use/local/include and should come before
the fixincludes-fixed header files. */
- { LOCAL_INCLUDE_DIR, 0, 1 },
+ { LOCAL_INCLUDE_DIR, 0, 0, 1 },
/* This is here ahead of GCC_INCLUDE_DIR because assert.h goes here.
Likewise, behind LOCAL_INCLUDE_DIR, where glibc puts its assert.h. */
- { TOOL_INCLUDE_DIR, 0, 0 },
+ { TOOL_INCLUDE_DIR, "BINUTILS", 0, 0 },
/* This is the dir for fixincludes. Put it just before
the files that we fix. */
- { GCC_INCLUDE_DIR, 0, 0 },
+ { GCC_INCLUDE_DIR, "GCC", 0, 0 },
/* Some systems have an extra dir of include files. */
#ifdef SYSTEM_INCLUDE_DIR
- { SYSTEM_INCLUDE_DIR, 0, 0 },
+ { SYSTEM_INCLUDE_DIR, 0, 0, 0 },
#endif
- { STANDARD_INCLUDE_DIR, 0, 0},
+ { STANDARD_INCLUDE_DIR, 0, 0, 0},
#endif /* not CROSS_COMPILE */
- { 0, 0, 0}
+ { 0, 0, 0, 0}
};
#endif /* no INCLUDE_DEFAULTS */
@@ -825,12 +832,13 @@ safe_write (desc, ptr, len, out_fname)
int written = write (desc, ptr, len);
if (written < 0)
{
+ int errno_val = errno;
#ifdef EINTR
- if (errno == EINTR)
+ if (errno_val == EINTR)
continue;
#endif
fprintf (stderr, "%s: error writing file `%s': %s\n",
- pname, shortpath (NULL, out_fname), my_strerror(errno));
+ pname, shortpath (NULL, out_fname), my_strerror (errno_val));
return;
}
ptr += written;
@@ -1521,8 +1529,10 @@ find_file (filename, do_not_stat)
{
if (my_stat (filename, &stat_buf) == -1)
{
+ int errno_val = errno;
fprintf (stderr, "%s: %s: can't get status: %s\n",
- pname, shortpath (NULL, filename), my_strerror(errno));
+ pname, shortpath (NULL, filename),
+ my_strerror (errno_val));
stat_buf.st_mtime = (time_t) -1;
}
}
@@ -2212,9 +2222,10 @@ start_over: ;
}
else
{
+ int errno_val = errno;
fprintf (stderr, "%s: can't read aux info file `%s': %s\n",
pname, shortpath (NULL, aux_info_filename),
- my_strerror(errno));
+ my_strerror (errno_val));
errors++;
return;
}
@@ -2240,9 +2251,10 @@ start_over: ;
}
if (my_access (aux_info_filename, R_OK) == -1)
{
+ int errno_val = errno;
fprintf (stderr, "%s: can't read aux info file `%s': %s\n",
pname, shortpath (NULL, aux_info_filename),
- my_strerror(errno));
+ my_strerror (errno_val));
errors++;
return;
}
@@ -2255,9 +2267,10 @@ start_over: ;
if (my_stat (aux_info_filename, &stat_buf) == -1)
{
+ int errno_val = errno;
fprintf (stderr, "%s: can't get status of aux info file `%s': %s\n",
pname, shortpath (NULL, aux_info_filename),
- my_strerror(errno));
+ my_strerror (errno_val));
errors++;
return;
}
@@ -2282,9 +2295,10 @@ start_over: ;
if (my_stat (base_source_filename, &stat_buf) == -1)
{
+ int errno_val = errno;
fprintf (stderr, "%s: can't get status of aux info file `%s': %s\n",
pname, shortpath (NULL, base_source_filename),
- my_strerror(errno));
+ my_strerror (errno_val));
errors++;
return;
}
@@ -2303,9 +2317,10 @@ start_over: ;
if ((aux_info_file = my_open (aux_info_filename, O_RDONLY, 0444 )) == -1)
{
+ int errno_val = errno;
fprintf (stderr, "%s: can't open aux info file `%s' for reading: %s\n",
pname, shortpath (NULL, aux_info_filename),
- my_strerror(errno));
+ my_strerror (errno_val));
return;
}
@@ -2319,9 +2334,10 @@ start_over: ;
if (safe_read (aux_info_file, aux_info_base, aux_info_size) != aux_info_size)
{
+ int errno_val = errno;
fprintf (stderr, "%s: error reading aux info file `%s': %s\n",
pname, shortpath (NULL, aux_info_filename),
- my_strerror(errno));
+ my_strerror (errno_val));
free (aux_info_base);
close (aux_info_file);
return;
@@ -2331,9 +2347,10 @@ start_over: ;
if (close (aux_info_file))
{
+ int errno_val = errno;
fprintf (stderr, "%s: error closing aux info file `%s': %s\n",
pname, shortpath (NULL, aux_info_filename),
- my_strerror(errno));
+ my_strerror (errno_val));
free (aux_info_base);
close (aux_info_file);
return;
@@ -2345,9 +2362,12 @@ start_over: ;
if (must_create && !keep_it)
if (my_unlink (aux_info_filename) == -1)
- fprintf (stderr, "%s: can't delete aux info file `%s': %s\n",
- pname, shortpath (NULL, aux_info_filename),
- my_strerror(errno));
+ {
+ int errno_val = errno;
+ fprintf (stderr, "%s: can't delete aux info file `%s': %s\n",
+ pname, shortpath (NULL, aux_info_filename),
+ my_strerror (errno_val));
+ }
/* Save a pointer into the first line of the aux_info file which
contains the filename of the directory from which the compiler
@@ -2411,9 +2431,10 @@ start_over: ;
xfree (aux_info_relocated_name);
if (keep_it && my_unlink (aux_info_filename) == -1)
{
+ int errno_val = errno;
fprintf (stderr, "%s: can't delete file `%s': %s\n",
pname, shortpath (NULL, aux_info_filename),
- my_strerror(errno));
+ my_strerror (errno_val));
return;
}
must_create = 1;
@@ -2487,17 +2508,19 @@ rename_c_file (hp)
if (my_link (filename, new_filename) == -1)
{
+ int errno_val = errno;
fprintf (stderr, "%s: warning: can't link file `%s' to `%s': %s\n",
pname, shortpath (NULL, filename),
- shortpath (NULL, new_filename), my_strerror(errno));
+ shortpath (NULL, new_filename), my_strerror (errno_val));
errors++;
return;
}
if (my_unlink (filename) == -1)
{
+ int errno_val = errno;
fprintf (stderr, "%s: warning: can't delete file `%s': %s\n",
- pname, shortpath (NULL, filename), my_strerror(errno));
+ pname, shortpath (NULL, filename), my_strerror (errno_val));
errors++;
return;
}
@@ -4194,8 +4217,10 @@ edit_file (hp)
/* The cast avoids an erroneous warning on AIX. */
if (my_stat ((char *)convert_filename, &stat_buf) == -1)
{
+ int errno_val = errno;
fprintf (stderr, "%s: can't get status for file `%s': %s\n",
- pname, shortpath (NULL, convert_filename), my_strerror(errno));
+ pname, shortpath (NULL, convert_filename),
+ my_strerror (errno_val));
return;
}
orig_size = stat_buf.st_size;
@@ -4228,9 +4253,10 @@ edit_file (hp)
if ((input_file = my_open (convert_filename, O_RDONLY, 0444)) == -1)
{
+ int errno_val = errno;
fprintf (stderr, "%s: can't open file `%s' for reading: %s\n",
pname, shortpath (NULL, convert_filename),
- my_strerror(errno));
+ my_strerror (errno_val));
return;
}
@@ -4240,10 +4266,11 @@ edit_file (hp)
if (safe_read (input_file, new_orig_text_base, orig_size) != orig_size)
{
+ int errno_val = errno;
close (input_file);
fprintf (stderr, "\n%s: error reading input file `%s': %s\n",
pname, shortpath (NULL, convert_filename),
- my_strerror(errno));
+ my_strerror (errno_val));
return;
}
@@ -4274,9 +4301,10 @@ edit_file (hp)
strcat (clean_filename, ".clean");
if ((clean_file = creat (clean_filename, 0666)) == -1)
{
+ int errno_val = errno;
fprintf (stderr, "%s: can't create/open clean file `%s': %s\n",
pname, shortpath (NULL, clean_filename),
- my_strerror(errno));
+ my_strerror (errno_val));
return;
}
@@ -4371,7 +4399,8 @@ edit_file (hp)
strcat (new_filename, save_suffix);
if (my_link (convert_filename, new_filename) == -1)
{
- if (errno == EEXIST)
+ int errno_val = errno;
+ if (errno_val == EEXIST)
{
if (!quiet_flag)
fprintf (stderr, "%s: warning: file `%s' already saved in `%s'\n",
@@ -4385,7 +4414,7 @@ edit_file (hp)
pname,
shortpath (NULL, convert_filename),
shortpath (NULL, new_filename),
- my_strerror(errno));
+ my_strerror (errno_val));
return;
}
}
@@ -4393,8 +4422,10 @@ edit_file (hp)
if (my_unlink (convert_filename) == -1)
{
+ int errno_val = errno;
fprintf (stderr, "%s: can't delete file `%s': %s\n",
- pname, shortpath (NULL, convert_filename), my_strerror(errno));
+ pname, shortpath (NULL, convert_filename),
+ my_strerror (errno_val));
return;
}
@@ -4405,9 +4436,10 @@ edit_file (hp)
if ((output_file = creat (convert_filename, 0666)) == -1)
{
+ int errno_val = errno;
fprintf (stderr, "%s: can't create/open output file `%s': %s\n",
pname, shortpath (NULL, convert_filename),
- my_strerror(errno));
+ my_strerror (errno_val));
return;
}
@@ -4432,8 +4464,12 @@ edit_file (hp)
/* The cast avoids an erroneous warning on AIX. */
if (my_chmod ((char *)convert_filename, stat_buf.st_mode) == -1)
- fprintf (stderr, "%s: can't change mode of file `%s': %s\n",
- pname, shortpath (NULL, convert_filename), my_strerror(errno));
+ {
+ int errno_val = errno;
+ fprintf (stderr, "%s: can't change mode of file `%s': %s\n",
+ pname, shortpath (NULL, convert_filename),
+ my_strerror (errno_val));
+ }
/* Note: We would try to change the owner and group of the output file
to match those of the input file here, except that may not be a good
diff --git a/gcc/pself.c b/gcc/pself.c
new file mode 100644
index 00000000000..d8471daafea
--- /dev/null
+++ b/gcc/pself.c
@@ -0,0 +1 @@
+main(){char*p="main(){char*p=%c%s%c;(void)printf(p,34,p,34,10);}%c";(void)printf(p,34,p,34,10);}
diff --git a/gcc/pself1.c b/gcc/pself1.c
new file mode 100644
index 00000000000..acdfc650583
--- /dev/null
+++ b/gcc/pself1.c
@@ -0,0 +1 @@
+main(a){a="main(a){a=%c%s%c;printf(a,34,a,34);}";printf(a,34,a,34);} \ No newline at end of file
diff --git a/gcc/pself2.c b/gcc/pself2.c
new file mode 100644
index 00000000000..c88a8c1046d
--- /dev/null
+++ b/gcc/pself2.c
@@ -0,0 +1 @@
+main(){char*a="main(){char*a=%c%s%c;int b='%c';printf(a,b,a,b,b);}";int b='"';printf(a,b,a,b,b);}
diff --git a/gcc/pself3.c b/gcc/pself3.c
new file mode 100644
index 00000000000..dbdeac6e410
--- /dev/null
+++ b/gcc/pself3.c
@@ -0,0 +1 @@
+main(a){printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);}",34);}
diff --git a/gcc/real.c b/gcc/real.c
index f7e22eae3bb..e8e801f0036 100644
--- a/gcc/real.c
+++ b/gcc/real.c
@@ -1,6 +1,6 @@
/* real.c - implementation of REAL_ARITHMETIC, REAL_VALUE_ATOF,
and support for XFmode IEEE extended real floating point arithmetic.
- Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by Stephen L. Moshier (moshier@world.std.com).
This file is part of GNU CC.
@@ -20,9 +20,9 @@ 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 <stdio.h>
#include <errno.h>
-#include "config.h"
#include "tree.h"
#ifndef errno
@@ -209,7 +209,7 @@ unknown arithmetic type
#if HOST_BITS_PER_LONG >= EMULONG_SIZE
#define EMULONG long
#else
-#if HOST_BITS_PER_LONG_LONG >= EMULONG_SIZE
+#if HOST_BITS_PER_LONGLONG >= EMULONG_SIZE
#define EMULONG long long int
#else
/* You will have to modify this program to have a smaller unit size. */
@@ -406,15 +406,19 @@ static void eremain PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *,
unsigned EMUSHORT *));
static void eiremain PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *));
static void mtherr PROTO((char *, int));
+#ifdef DEC
static void dectoe PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *));
static void etodec PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *));
static void todec PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *));
+#endif
+#ifdef IBM
static void ibmtoe PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *,
enum machine_mode));
static void etoibm PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *,
enum machine_mode));
static void toibm PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *,
enum machine_mode));
+#endif
static void make_nan PROTO((unsigned EMUSHORT *, int, enum machine_mode));
static void uditoe PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *));
static void ditoe PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *));
diff --git a/gcc/real.h b/gcc/real.h
index c57ccc1cff3..d51c9e1b460 100644
--- a/gcc/real.h
+++ b/gcc/real.h
@@ -1,5 +1,5 @@
-/* Front-end tree definitions for GNU compiler.
- Copyright (C) 1989, 1991, 1994, 1996 Free Software Foundation, Inc.
+/* Definitions of floating-point access for GNU compiler.
+ Copyright (C) 1989, 1991, 1994, 1996, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -285,6 +285,13 @@ do { REAL_VALUE_TYPE in = (IN); /* Make sure it's not in a register. */\
#define REAL_VALUE_TO_TARGET_LONG_DOUBLE(a, b) REAL_VALUE_TO_TARGET_DOUBLE (a, b)
#endif
+/* Compare two floating-point objects for bitwise identity.
+ This is not the same as comparing for equality on IEEE hosts:
+ -0.0 equals 0.0 but they are not identical, and conversely
+ two NaNs might be identical but they cannot be equal. */
+#define REAL_VALUES_IDENTICAL(x, y) \
+ (!bcmp ((char *) &(x), (char *) &(y), sizeof (REAL_VALUE_TYPE)))
+
/* Compare two floating-point values for equality. */
#ifndef REAL_VALUES_EQUAL
#define REAL_VALUES_EQUAL(x, y) ((x) == (y))
@@ -352,7 +359,7 @@ extern double (atof) ();
size and where `float' is SFmode. */
/* Don't use REAL_VALUE_TRUNCATE directly--always call real_value_truncate. */
-extern REAL_VALUE_TYPE real_value_truncate ();
+extern REAL_VALUE_TYPE real_value_truncate PROTO((enum machine_mode, REAL_VALUE_TYPE));
#ifndef REAL_VALUE_TRUNCATE
#define REAL_VALUE_TRUNCATE(mode, x) \
@@ -375,6 +382,10 @@ extern REAL_VALUE_TYPE real_value_truncate ();
#define REAL_VALUE_NEGATIVE(x) (target_negative (x))
#endif
+extern int target_isnan PROTO ((REAL_VALUE_TYPE));
+extern int target_isinf PROTO ((REAL_VALUE_TYPE));
+extern int target_negative PROTO ((REAL_VALUE_TYPE));
+
/* Determine whether a floating-point value X is minus 0. */
#ifndef REAL_VALUE_MINUS_ZERO
#define REAL_VALUE_MINUS_ZERO(x) ((x) == 0 && REAL_VALUE_NEGATIVE (x))
@@ -441,4 +452,9 @@ extern struct rtx_def *immed_real_const_1 PROTO((REAL_VALUE_TYPE,
/* Replace R by 1/R in the given machine mode, if the result is exact. */
extern int exact_real_inverse PROTO((enum machine_mode, REAL_VALUE_TYPE *));
+extern void debug_real PROTO ((REAL_VALUE_TYPE));
+
+/* In varasm.c */
+extern void assemble_real PROTO ((REAL_VALUE_TYPE,
+ enum machine_mode));
#endif /* Not REAL_H_INCLUDED */
diff --git a/gcc/recog.c b/gcc/recog.c
index 5b268571936..1af2dfcd03a 100644
--- a/gcc/recog.c
+++ b/gcc/recog.c
@@ -1,5 +1,5 @@
/* Subroutines used by or related to instruction recognition.
- Copyright (C) 1987, 1988, 1991-6, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 1988, 91-6, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -20,8 +20,8 @@ Boston, MA 02111-1307, USA. */
#include "config.h"
-#include "rtl.h"
#include <stdio.h>
+#include "rtl.h"
#include "insn-config.h"
#include "insn-attr.h"
#include "insn-flags.h"
@@ -43,8 +43,7 @@ Boston, MA 02111-1307, USA. */
/* Import from final.c: */
extern rtx alter_subreg ();
-int strict_memory_address_p ();
-int memory_address_p ();
+static rtx *find_single_use_1 PROTO((rtx, rtx *));
/* Nonzero means allow operands to be volatile.
This should be 0 if you are generating rtl, such as if you are calling
@@ -505,6 +504,9 @@ validate_replace_rtx_1 (loc, from, to, object)
}
break;
+
+ default:
+ break;
}
fmt = GET_RTX_FORMAT (code);
@@ -627,6 +629,9 @@ find_single_use_1 (dest, loc)
case MEM:
case SUBREG:
return find_single_use_1 (dest, &XEXP (x, 0));
+
+ default:
+ break;
}
/* If it wasn't one of the common cases above, check each expression and
@@ -819,10 +824,18 @@ general_operand (op, mode)
register rtx y = XEXP (op, 0);
if (! volatile_ok && MEM_VOLATILE_P (op))
return 0;
+ if (GET_CODE (y) == ADDRESSOF)
+ return 1;
/* Use the mem's mode, since it will be reloaded thus. */
mode = GET_MODE (op);
GO_IF_LEGITIMATE_ADDRESS (mode, y, win);
}
+
+ /* Pretend this is an operand for now; we'll run force_operand
+ on its replacement in fixup_var_refs_1. */
+ if (code == ADDRESSOF)
+ return 1;
+
return 0;
win:
@@ -1058,6 +1071,9 @@ memory_address_p (mode, addr)
enum machine_mode mode;
register rtx addr;
{
+ if (GET_CODE (addr) == ADDRESSOF)
+ return 1;
+
GO_IF_LEGITIMATE_ADDRESS (mode, addr, win);
return 0;
@@ -1666,7 +1682,7 @@ constrain_operands (insn_code_num, strict)
earlyclobber[opno] = 0;
/* A unary operator may be accepted by the predicate, but it
- is irrelevant for matching contraints. */
+ is irrelevant for matching constraints. */
if (GET_RTX_CLASS (GET_CODE (op)) == '1')
op = XEXP (op, 0);
@@ -1975,7 +1991,7 @@ constrain_operands (insn_code_num, strict)
}
/* Return 1 iff OPERAND (assumed to be a REG rtx)
- is a hard reg in class CLASS when its regno is offsetted by OFFSET
+ is a hard reg in class CLASS when its regno is offset by OFFSET
and changed to mode MODE.
If REG occupies multiple hard regs, all of them must be in CLASS. */
diff --git a/gcc/recog.h b/gcc/recog.h
index cd270ed2115..8918c8950b1 100644
--- a/gcc/recog.h
+++ b/gcc/recog.h
@@ -1,5 +1,5 @@
/* Declarations for interface to insn recognizer and insn-output.c.
- Copyright (C) 1987, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1987, 1996, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -20,37 +20,49 @@ Boston, MA 02111-1307, USA. */
#include "gansidecl.h"
-/* Recognize an insn and return its insn-code,
- which is the sequence number of the DEFINE_INSN that it matches.
- If the insn does not match, return -1. */
-
-extern int recog_memoized PROTO((rtx));
-
-/* Determine whether a proposed change to an insn or MEM will make it
- invalid. Make the change if not. */
-
-extern int validate_change PROTO((rtx, rtx *, rtx, int));
-
-/* Apply a group of changes if valid. */
-
-extern int apply_change_group PROTO((void));
-
-/* Return the number of changes so far in the current group. */
-
-extern int num_validated_changes PROTO((void));
-
-/* Retract some changes. */
-
-extern void cancel_changes PROTO((int));
+extern void init_recog PROTO((void));
+extern void init_recog_no_volatile PROTO((void));
+extern int recog_memoized PROTO((rtx));
+extern int check_asm_operands PROTO((rtx));
+extern int validate_change PROTO((rtx, rtx *, rtx, int));
+extern int apply_change_group PROTO((void));
+extern int num_validated_changes PROTO((void));
+extern void cancel_changes PROTO((int));
+extern int constrain_operands PROTO((int, int));
+extern int memory_address_p PROTO((enum machine_mode, rtx));
+extern int strict_memory_address_p PROTO((enum machine_mode, rtx));
+extern int validate_replace_rtx PROTO((rtx, rtx, rtx));
+extern int reg_fits_class_p PROTO((rtx, enum reg_class, int,
+ enum machine_mode));
+extern rtx *find_single_use PROTO((rtx, rtx, rtx *));
+
+extern int general_operand PROTO((rtx, enum machine_mode));
+extern int address_operand PROTO((rtx, enum machine_mode));
+extern int register_operand PROTO((rtx, enum machine_mode));
+extern int scratch_operand PROTO((rtx, enum machine_mode));
+extern int immediate_operand PROTO((rtx, enum machine_mode));
+extern int const_int_operand PROTO((rtx, enum machine_mode));
+extern int cosnt_double_operand PROTO((rtx, enum machine_mode));
+extern int nonimmediate_operand PROTO((rtx, enum machine_mode));
+extern int nonmemory_operand PROTO((rtx, enum machine_mode));
+extern int push_operand PROTO((rtx, enum machine_mode));
+extern int memory_operand PROTO((rtx, enum machine_mode));
+extern int indirect_operand PROTO((rtx, enum machine_mode));
+extern int mode_independent_operand PROTO((rtx, enum machine_mode));
+extern int comparison_operator PROTO((rtx, enum machine_mode));
+
+extern int offsettable_memref_p PROTO((rtx));
+extern int offsettable_nonstrict_memref_p PROTO((rtx));
+extern int offsettable_address_p PROTO((int, enum machine_mode, rtx));
+extern int mode_dependent_address_p PROTO((rtx));
+
+extern int recog PROTO((rtx, rtx, int *));
+extern void add_clobbers PROTO((rtx, int));
+extern void insn_extract PROTO((rtx));
/* Nonzero means volatile operands are recognized. */
-
extern int volatile_ok;
-/* Extract the operands from an insn that has been recognized. */
-
-extern void insn_extract PROTO((rtx));
-
/* The following vectors hold the results from insn_extract. */
/* Indexed by N, gives value of operand N. */
diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c
index 5ef93561eba..bab0e309444 100644
--- a/gcc/reg-stack.c
+++ b/gcc/reg-stack.c
@@ -1,5 +1,5 @@
/* Register to Stack convert for GNU compiler.
- Copyright (C) 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -157,8 +157,8 @@ Boston, MA 02111-1307, USA. */
*/
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "tree.h"
#include "rtl.h"
#include "insn-config.h"
@@ -1352,33 +1352,9 @@ find_blocks (first)
if (GET_CODE (insn) == JUMP_INSN)
{
rtx pat = PATTERN (insn);
- int computed_jump = 0;
rtx x;
- if (GET_CODE (pat) == PARALLEL)
- {
- int len = XVECLEN (pat, 0);
- int has_use_labelref = 0;
- int i;
-
- for (i = len - 1; i >= 0; i--)
- if (GET_CODE (XVECEXP (pat, 0, i)) == USE
- && GET_CODE (XEXP (XVECEXP (pat, 0, i), 0)) == LABEL_REF)
- has_use_labelref = 1;
-
- if (! has_use_labelref)
- for (i = len - 1; i >= 0; i--)
- if (GET_CODE (XVECEXP (pat, 0, i)) == SET
- && SET_DEST (XVECEXP (pat, 0, i)) == pc_rtx
- && uses_reg_or_mem (SET_SRC (XVECEXP (pat, 0, i))))
- computed_jump = 1;
- }
- else if (GET_CODE (pat) == SET
- && SET_DEST (pat) == pc_rtx
- && uses_reg_or_mem (SET_SRC (pat)))
- computed_jump = 1;
-
- if (computed_jump)
+ if (computed_jump_p (insn))
{
for (x = label_value_list; x; x = XEXP (x, 1))
record_label_references (insn,
@@ -2018,25 +1994,33 @@ compare_for_stack_reg (insn, regstack, pat)
rtx *src1, *src2;
rtx src1_note, src2_note;
rtx cc0_user;
+ int have_cmove;
src1 = get_true_reg (&XEXP (SET_SRC (pat), 0));
src2 = get_true_reg (&XEXP (SET_SRC (pat), 1));
cc0_user = next_cc0_user (insn);
- /* If the insn that uses cc0 is a conditional move, then the destination
+ /* If the insn that uses cc0 is an FP-conditional move, then the destination
must be the top of stack */
if (GET_CODE (PATTERN (cc0_user)) == SET
&& SET_DEST (PATTERN (cc0_user)) != pc_rtx
- && GET_CODE (SET_SRC (PATTERN (cc0_user))) == IF_THEN_ELSE)
+ && GET_CODE (SET_SRC (PATTERN (cc0_user))) == IF_THEN_ELSE
+ && (GET_MODE_CLASS (GET_MODE (SET_DEST (PATTERN (cc0_user))))
+ == MODE_FLOAT))
{
rtx *dest, src_note;
dest = get_true_reg (&SET_DEST (PATTERN (cc0_user)));
- if (REGNO (*dest) != regstack->reg[regstack->top])
+
+ have_cmove = 1;
+ if (get_hard_regnum (regstack, *dest) >= FIRST_STACK_REG
+ && REGNO (*dest) != regstack->reg[regstack->top])
{
emit_swap_insn (insn, regstack, *dest);
}
}
+ else
+ have_cmove = 0;
/* ??? If fxch turns out to be cheaper than fstp, give priority to
registers that die in this insn - move those to stack top first. */
@@ -2071,7 +2055,8 @@ compare_for_stack_reg (insn, regstack, pat)
else
src2_note = NULL_RTX;
- emit_swap_insn (insn, regstack, *src1);
+ if (! have_cmove)
+ emit_swap_insn (insn, regstack, *src1);
replace_reg (src1, FIRST_STACK_REG);
@@ -2378,8 +2363,6 @@ subst_stack_regs_pat (insn, regstack, pat)
for (i = 1; i <= 2; i++)
if (src_note [i])
{
- int regno = get_hard_regnum (regstack, XEXP (src_note [i], 0));
-
/* If the register that dies is not at the top of stack, then
move the top of stack to the dead reg */
if (REGNO (XEXP (src_note[i], 0))
@@ -2397,13 +2380,15 @@ subst_stack_regs_pat (insn, regstack, pat)
replace_reg (&XEXP (src_note[i], 0), FIRST_STACK_REG);
regstack->top--;
}
-
}
-
- SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
- replace_reg (dest, FIRST_STACK_REG);
}
+ /* Make dest the top of stack. Add dest to regstack if not present. */
+ if (get_hard_regnum (regstack, *dest) < FIRST_STACK_REG)
+ regstack->reg[++regstack->top] = REGNO (*dest);
+ SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
+ replace_reg (dest, FIRST_STACK_REG);
+
break;
default:
@@ -2719,6 +2704,7 @@ subst_stack_regs (insn, regstack)
{
register rtx *note_link, note;
register int i;
+ rtx head, jump, pat, cipat;
int n_operands;
if (GET_CODE (insn) == CALL_INSN)
@@ -2790,6 +2776,39 @@ subst_stack_regs (insn, regstack)
if (GET_CODE (insn) == NOTE)
return;
+ /* If we are reached by a computed goto which sets this same stack register,
+ then pop this stack register, but maintain regstack. */
+
+ pat = single_set (insn);
+ if (pat != 0
+ && INSN_UID (insn) <= max_uid
+ && GET_CODE (block_begin[BLOCK_NUM(insn)]) == CODE_LABEL
+ && GET_CODE (pat) == SET && STACK_REG_P (SET_DEST (pat)))
+ for (head = block_begin[BLOCK_NUM(insn)], jump = LABEL_REFS (head);
+ jump != head;
+ jump = LABEL_NEXTREF (jump))
+ {
+ cipat = single_set (CONTAINING_INSN (jump));
+ if (cipat != 0
+ && GET_CODE (cipat) == SET
+ && SET_DEST (cipat) == pc_rtx
+ && uses_reg_or_mem (SET_SRC (cipat))
+ && INSN_UID (CONTAINING_INSN (jump)) <= max_uid)
+ {
+ int from_block = BLOCK_NUM (CONTAINING_INSN (jump));
+ if (TEST_HARD_REG_BIT (block_out_reg_set[from_block],
+ REGNO (SET_DEST (pat))))
+ {
+ struct stack_def old;
+ bcopy (regstack->reg, old.reg, sizeof (old.reg));
+ emit_pop_insn (insn, regstack, SET_DEST (pat), emit_insn_before);
+ regstack->top += 1;
+ bcopy (old.reg, regstack->reg, sizeof (old.reg));
+ SET_HARD_REG_BIT (regstack->reg_set, REGNO (SET_DEST (pat)));
+ }
+ }
+ }
+
/* If there is a REG_UNUSED note on a stack register on this insn,
the indicated reg must be popped. The REG_UNUSED note is removed,
since the form of the newly emitted pop insn references the reg,
diff --git a/gcc/regclass.c b/gcc/regclass.c
index f3bdc7ff997..e307e03ff21 100644
--- a/gcc/regclass.c
+++ b/gcc/regclass.c
@@ -24,6 +24,7 @@ Boston, MA 02111-1307, USA. */
and a function init_reg_sets to initialize the tables. */
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "hard-reg-set.h"
#include "flags.h"
@@ -1540,38 +1541,52 @@ record_address_regs (x, class, scale)
else if (code1 == SYMBOL_REF || code1 == CONST || code1 == LABEL_REF)
record_address_regs (arg0, INDEX_REG_CLASS, scale);
- /* If this the sum of two registers where the first is known to be a
- pointer, it must be a base register with the second an index. */
+ /* If both operands are registers but one is already a hard register
+ of index or base class, give the other the class that the hard
+ register is not. */
else if (code0 == REG && code1 == REG
- && REGNO_POINTER_FLAG (REGNO (arg0)))
+ && REGNO (arg0) < FIRST_PSEUDO_REGISTER
+ && (REG_OK_FOR_BASE_P (arg0) || REG_OK_FOR_INDEX_P (arg0)))
+ record_address_regs (arg1,
+ REG_OK_FOR_BASE_P (arg0)
+ ? INDEX_REG_CLASS : BASE_REG_CLASS,
+ scale);
+ else if (code0 == REG && code1 == REG
+ && REGNO (arg1) < FIRST_PSEUDO_REGISTER
+ && (REG_OK_FOR_BASE_P (arg1) || REG_OK_FOR_INDEX_P (arg1)))
+ record_address_regs (arg0,
+ REG_OK_FOR_BASE_P (arg1)
+ ? INDEX_REG_CLASS : BASE_REG_CLASS,
+ scale);
+
+ /* If one operand is known to be a pointer, it must be the base
+ with the other operand the index. Likewise if the other operand
+ is a MULT. */
+
+ else if ((code0 == REG && REGNO_POINTER_FLAG (REGNO (arg0)))
+ || code1 == MULT)
{
record_address_regs (arg0, BASE_REG_CLASS, scale);
record_address_regs (arg1, INDEX_REG_CLASS, scale);
}
+ else if ((code1 == REG && REGNO_POINTER_FLAG (REGNO (arg1)))
+ || code0 == MULT)
+ {
+ record_address_regs (arg0, INDEX_REG_CLASS, scale);
+ record_address_regs (arg1, BASE_REG_CLASS, scale);
+ }
- /* If this is the sum of two registers and neither is known to
- be a pointer, count equal chances that each might be a base
+ /* Otherwise, count equal chances that each might be a base
or index register. This case should be rare. */
- else if (code0 == REG && code1 == REG
- && ! REGNO_POINTER_FLAG (REGNO (arg0))
- && ! REGNO_POINTER_FLAG (REGNO (arg1)))
+ else
{
record_address_regs (arg0, BASE_REG_CLASS, scale / 2);
record_address_regs (arg0, INDEX_REG_CLASS, scale / 2);
record_address_regs (arg1, BASE_REG_CLASS, scale / 2);
record_address_regs (arg1, INDEX_REG_CLASS, scale / 2);
}
-
- /* In all other cases, the first operand is an index and the
- second is the base. */
-
- else
- {
- record_address_regs (arg0, INDEX_REG_CLASS, scale);
- record_address_regs (arg1, BASE_REG_CLASS, scale);
- }
}
break;
diff --git a/gcc/regs.h b/gcc/regs.h
index 5089553d0f4..fe1dbfe6b7a 100644
--- a/gcc/regs.h
+++ b/gcc/regs.h
@@ -29,6 +29,10 @@ Boston, MA 02111-1307, USA. */
#define REG_SIZE(R) \
((mode_size[(int) GET_MODE (R)] + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
+#ifndef SMALL_REGISTER_CLASSES
+#define SMALL_REGISTER_CLASSES 0
+#endif
+
/* Maximum register number used in this function, plus one. */
extern int max_regno;
diff --git a/gcc/reload.c b/gcc/reload.c
index a868931d388..b0e90325949 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -1,5 +1,5 @@
/* Search an insn for pseudo regs that must be in hard regs and are not.
- Copyright (C) 1987, 88, 89, 92-6, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 89, 92-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -87,8 +87,8 @@ a register with any other reload. */
#define REG_OK_STRICT
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "insn-config.h"
#include "insn-codes.h"
@@ -260,7 +260,7 @@ static int this_insn_is_asm;
static int hard_regs_live_known;
/* Indexed by hard reg number,
- element is nonegative if hard reg has been spilled.
+ element is nonnegative if hard reg has been spilled.
This vector is passed to `find_reloads' as an argument
and is not changed here. */
static short *static_reload_reg_p;
@@ -496,11 +496,7 @@ push_secondary_reload (in_p, x, opnum, optional, reload_class, reload_mode,
== CODE_FOR_nothing))
|| (! in_p &&(reload_secondary_out_icode[t_reload]
== CODE_FOR_nothing)))
- && (reg_class_size[(int) t_class] == 1
-#ifdef SMALL_REGISTER_CLASSES
- || SMALL_REGISTER_CLASSES
-#endif
- )
+ && (reg_class_size[(int) t_class] == 1 || SMALL_REGISTER_CLASSES)
&& MERGABLE_RELOADS (secondary_type,
reload_when_needed[t_reload],
opnum, reload_opnum[t_reload]))
@@ -557,11 +553,7 @@ push_secondary_reload (in_p, x, opnum, optional, reload_class, reload_mode,
|| (! in_p && reload_secondary_out_reload[s_reload] == t_reload))
&& ((in_p && reload_secondary_in_icode[s_reload] == t_icode)
|| (! in_p && reload_secondary_out_icode[s_reload] == t_icode))
- && (reg_class_size[(int) class] == 1
-#ifdef SMALL_REGISTER_CLASSES
- || SMALL_REGISTER_CLASSES
-#endif
- )
+ && (reg_class_size[(int) class] == 1 || SMALL_REGISTER_CLASSES)
&& MERGABLE_RELOADS (secondary_type, reload_when_needed[s_reload],
opnum, reload_opnum[s_reload]))
{
@@ -583,6 +575,17 @@ push_secondary_reload (in_p, x, opnum, optional, reload_class, reload_mode,
if (s_reload == n_reloads)
{
+#ifdef SECONDARY_MEMORY_NEEDED
+ /* If we need a memory location to copy between the two reload regs,
+ set it up now. Note that we do the input case before making
+ the reload and the output case after. This is due to the
+ way reloads are output. */
+
+ if (in_p && icode == CODE_FOR_nothing
+ && SECONDARY_MEMORY_NEEDED (class, reload_class, mode))
+ get_secondary_mem (x, reload_mode, opnum, type);
+#endif
+
/* We need to make a new secondary reload for this register class. */
reload_in[s_reload] = reload_out[s_reload] = 0;
reload_reg_class[s_reload] = class;
@@ -607,13 +610,6 @@ push_secondary_reload (in_p, x, opnum, optional, reload_class, reload_mode,
n_reloads++;
#ifdef SECONDARY_MEMORY_NEEDED
- /* If we need a memory location to copy between the two reload regs,
- set it up now. */
-
- if (in_p && icode == CODE_FOR_nothing
- && SECONDARY_MEMORY_NEEDED (class, reload_class, mode))
- get_secondary_mem (x, mode, opnum, type);
-
if (! in_p && icode == CODE_FOR_nothing
&& SECONDARY_MEMORY_NEEDED (reload_class, class, mode))
get_secondary_mem (x, mode, opnum, type);
@@ -1176,11 +1172,7 @@ push_reload (in, out, inloc, outloc, class,
||
(out != 0 && MATCHES (reload_out[i], out)
&& (in == 0 || reload_in[i] == 0 || MATCHES (reload_in[i], in))))
- && (reg_class_size[(int) class] == 1
-#ifdef SMALL_REGISTER_CLASSES
- || SMALL_REGISTER_CLASSES
-#endif
- )
+ && (reg_class_size[(int) class] == 1 || SMALL_REGISTER_CLASSES)
&& MERGABLE_RELOADS (type, reload_when_needed[i],
opnum, reload_opnum[i]))
break;
@@ -1212,11 +1204,7 @@ push_reload (in, out, inloc, outloc, class,
|| GET_CODE (in) == PRE_INC
|| GET_CODE (in) == PRE_DEC)
&& MATCHES (XEXP (in, 0), reload_in[i])))
- && (reg_class_size[(int) class] == 1
-#ifdef SMALL_REGISTER_CLASSES
- || SMALL_REGISTER_CLASSES
-#endif
- )
+ && (reg_class_size[(int) class] == 1 || SMALL_REGISTER_CLASSES)
&& MERGABLE_RELOADS (type, reload_when_needed[i],
opnum, reload_opnum[i]))
{
@@ -1250,6 +1238,15 @@ push_reload (in, out, inloc, outloc, class,
/* We found no existing reload suitable for re-use.
So add an additional reload. */
+#ifdef SECONDARY_MEMORY_NEEDED
+ /* If a memory location is needed for the copy, make one. */
+ if (in != 0 && GET_CODE (in) == REG
+ && REGNO (in) < FIRST_PSEUDO_REGISTER
+ && SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (REGNO (in)),
+ class, inmode))
+ get_secondary_mem (in, inmode, opnum, type);
+#endif
+
i = n_reloads;
reload_in[i] = in;
reload_out[i] = out;
@@ -1272,13 +1269,6 @@ push_reload (in, out, inloc, outloc, class,
n_reloads++;
#ifdef SECONDARY_MEMORY_NEEDED
- /* If a memory location is needed for the copy, make one. */
- if (in != 0 && GET_CODE (in) == REG
- && REGNO (in) < FIRST_PSEUDO_REGISTER
- && SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (REGNO (in)),
- class, inmode))
- get_secondary_mem (in, inmode, opnum, type);
-
if (out != 0 && GET_CODE (out) == REG
&& REGNO (out) < FIRST_PSEUDO_REGISTER
&& SECONDARY_MEMORY_NEEDED (class, REGNO_REG_CLASS (REGNO (out)),
@@ -1557,17 +1547,12 @@ combine_reloads ()
|| rtx_equal_p (secondary_memlocs_elim[(int) reload_outmode[output_reload]][reload_opnum[i]],
secondary_memlocs_elim[(int) reload_outmode[output_reload]][reload_opnum[output_reload]]))
#endif
- && (
-#ifdef SMALL_REGISTER_CLASSES
- SMALL_REGISTER_CLASSES
-#else
- 0
-#endif
- ? reload_reg_class[i] == reload_reg_class[output_reload]
- : (reg_class_subset_p (reload_reg_class[i],
- reload_reg_class[output_reload])
- || reg_class_subset_p (reload_reg_class[output_reload],
- reload_reg_class[i])))
+ && (SMALL_REGISTER_CLASSES
+ ? (reload_reg_class[i] == reload_reg_class[output_reload])
+ : (reg_class_subset_p (reload_reg_class[i],
+ reload_reg_class[output_reload])
+ || reg_class_subset_p (reload_reg_class[output_reload],
+ reload_reg_class[i])))
&& (MATCHES (reload_in[i], reload_out[output_reload])
/* Args reversed because the first arg seems to be
the one that we imagine being modified
@@ -1584,10 +1569,7 @@ combine_reloads ()
&& reg_overlap_mentioned_for_reload_p (reload_in[i],
reload_out[output_reload]))))
&& (reg_class_size[(int) reload_reg_class[i]]
-#ifdef SMALL_REGISTER_CLASSES
- || SMALL_REGISTER_CLASSES
-#endif
- )
+ || SMALL_REGISTER_CLASSES)
/* We will allow making things slightly worse by combining an
input and an output, but no worse than that. */
&& (reload_when_needed[i] == RELOAD_FOR_INPUT
@@ -2865,7 +2847,18 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
[(i == commutative || i == commutative + 1)
? 2*commutative + 1 - i : i])
: operands_match[c][i])
- win = this_alternative_win[c];
+ {
+ /* If we are matching a non-offsettable address where an
+ offsettable address was expected, then we must reject
+ this combination, because we can't reload it. */
+ if (this_alternative_offmemok[c]
+ && GET_CODE (recog_operand[c]) == MEM
+ && this_alternative[c] == (int) NO_REGS
+ && ! this_alternative_win[c])
+ bad = 1;
+
+ win = this_alternative_win[c];
+ }
else
{
/* Operands don't match. */
@@ -3146,16 +3139,6 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
&& this_alternative_matches[i] < 0)
bad = 1;
- /* Alternative loses if it requires a type of reload not
- permitted for this insn. We can always reload SCRATCH
- and objects with a REG_UNUSED note. */
- if (GET_CODE (operand) != SCRATCH
- && modified[i] != RELOAD_READ && no_output_reloads
- && ! find_reg_note (insn, REG_UNUSED, operand))
- bad = 1;
- else if (modified[i] != RELOAD_WRITE && no_input_reloads)
- bad = 1;
-
/* If this is a constant that is reloaded into the desired
class by copying it to memory first, count that as another
reload. This is consistent with other code and is
@@ -3167,9 +3150,10 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
if (CONSTANT_P (operand)
/* force_const_mem does not accept HIGH. */
&& GET_CODE (operand) != HIGH
- && (PREFERRED_RELOAD_CLASS (operand,
+ && ((PREFERRED_RELOAD_CLASS (operand,
(enum reg_class) this_alternative[i])
- == NO_REGS)
+ == NO_REGS)
+ || no_input_reloads)
&& operand_mode[i] != VOIDmode)
{
const_to_mem = 1;
@@ -3189,6 +3173,18 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
== NO_REGS))
bad = 1;
+ /* Alternative loses if it requires a type of reload not
+ permitted for this insn. We can always reload SCRATCH
+ and objects with a REG_UNUSED note. */
+ else if (GET_CODE (operand) != SCRATCH
+ && modified[i] != RELOAD_READ && no_output_reloads
+ && ! find_reg_note (insn, REG_UNUSED, operand))
+ bad = 1;
+ else if (modified[i] != RELOAD_WRITE && no_input_reloads
+ && ! const_to_mem)
+ bad = 1;
+
+
/* We prefer to reload pseudos over reloading other things,
since such reloads may be able to be eliminated later.
If we are reloading a SCRATCH, we won't be generating any
@@ -3509,9 +3505,10 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
&& CONSTANT_P (recog_operand[i])
/* force_const_mem does not accept HIGH. */
&& GET_CODE (recog_operand[i]) != HIGH
- && (PREFERRED_RELOAD_CLASS (recog_operand[i],
+ && ((PREFERRED_RELOAD_CLASS (recog_operand[i],
(enum reg_class) goal_alternative[i])
- == NO_REGS)
+ == NO_REGS)
+ || no_input_reloads)
&& operand_mode[i] != VOIDmode)
{
*recog_operand_loc[i] = recog_operand[i]
@@ -3853,11 +3850,8 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
reload_when_needed[reload_secondary_out_reload[secondary_out_reload]]
= RELOAD_FOR_OPADDR_ADDR;
}
- if (reload_when_needed[i] == RELOAD_FOR_INPADDR_ADDRESS
- || reload_when_needed[i] == RELOAD_FOR_OUTADDR_ADDRESS)
- reload_when_needed[i] = RELOAD_FOR_OPADDR_ADDR;
- else
- reload_when_needed[i] = RELOAD_FOR_OPERAND_ADDRESS;
+
+ reload_when_needed[i] = RELOAD_FOR_OPERAND_ADDRESS;
}
if ((reload_when_needed[i] == RELOAD_FOR_INPUT_ADDRESS
@@ -3871,6 +3865,35 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
reload_opnum[i] = goal_alternative_matches[reload_opnum[i]];
}
+ /* Scan all the reloads, and check for RELOAD_FOR_OPERAND_ADDRESS reloads.
+ If we have more than one, then convert all RELOAD_FOR_OPADDR_ADDR
+ reloads to RELOAD_FOR_OPERAND_ADDRESS reloads.
+
+ choose_reload_regs assumes that RELOAD_FOR_OPADDR_ADDR reloads never
+ conflict with RELOAD_FOR_OPERAND_ADDRESS reloads. This is true for a
+ single pair of RELOAD_FOR_OPADDR_ADDR/RELOAD_FOR_OPERAND_ADDRESS reloads.
+ However, if there is more than one RELOAD_FOR_OPERAND_ADDRESS reload,
+ then a RELOAD_FOR_OPADDR_ADDR reload conflicts with all
+ RELOAD_FOR_OPERAND_ADDRESS reloads other than the one that uses it.
+ This is complicated by the fact that a single operand can have more
+ than one RELOAD_FOR_OPERAND_ADDRESS reload. It is very difficult to fix
+ choose_reload_regs without affecting code quality, and cases that
+ actually fail are extremely rare, so it turns out to be better to fix
+ the problem here by not generating cases that choose_reload_regs will
+ fail for. */
+
+ {
+ int op_addr_reloads = 0;
+ for (i = 0; i < n_reloads; i++)
+ if (reload_when_needed[i] == RELOAD_FOR_OPERAND_ADDRESS)
+ op_addr_reloads++;
+
+ if (op_addr_reloads > 1)
+ for (i = 0; i < n_reloads; i++)
+ if (reload_when_needed[i] == RELOAD_FOR_OPADDR_ADDR)
+ reload_when_needed[i] = RELOAD_FOR_OPERAND_ADDRESS;
+ }
+
/* See if we have any reloads that are now allowed to be merged
because we've changed when the reload is needed to
RELOAD_FOR_OPERAND_ADDRESS or RELOAD_FOR_OTHER_ADDRESS. Only
@@ -4590,6 +4613,10 @@ subst_reg_equivs (ad)
if (XEXP (ad, 0) == frame_pointer_rtx
&& GET_CODE (XEXP (ad, 1)) == CONST_INT)
return ad;
+ break;
+
+ default:
+ break;
}
fmt = GET_RTX_FORMAT (code);
@@ -4909,7 +4936,7 @@ find_reloads_address_1 (mode, x, context, loc, opnum, type, ind_levels, insn)
CALL_INSN - and it does not set CC0.
But don't do this if we cannot directly address the
memory location, since this will make it harder to
- reuse address reloads, and increses register pressure.
+ reuse address reloads, and increases register pressure.
Also don't do this if we can probably update x directly. */
rtx equiv = reg_equiv_mem[regno];
int icode = (int) add_optab->handlers[(int) Pmode].insn_code;
@@ -4928,7 +4955,7 @@ find_reloads_address_1 (mode, x, context, loc, opnum, type, ind_levels, insn)
(context
? reload_address_index_reg_class
: reload_address_base_reg_class),
- GET_MODE (x), GET_MODE (x), VOIDmode, 0,
+ GET_MODE (x), GET_MODE (x), 0, 0,
opnum, RELOAD_OTHER);
}
else
@@ -4938,7 +4965,7 @@ find_reloads_address_1 (mode, x, context, loc, opnum, type, ind_levels, insn)
(context
? reload_address_index_reg_class
: reload_address_base_reg_class),
- GET_MODE (x), GET_MODE (x), VOIDmode, 0,
+ GET_MODE (x), GET_MODE (x), 0, 0,
opnum, type);
reload_inc[reloadnum]
= find_inc_amount (PATTERN (this_insn), XEXP (x_orig, 0));
@@ -5122,6 +5149,9 @@ find_reloads_address_1 (mode, x, context, loc, opnum, type, ind_levels, insn)
}
}
break;
+
+ default:
+ break;
}
{
@@ -5317,6 +5347,18 @@ find_replacement (loc)
}
}
+ /* If *LOC is a PLUS, MINUS, or MULT, see if a replacement is scheduled for
+ what's inside and make a new rtl if so. */
+ if (GET_CODE (*loc) == PLUS || GET_CODE (*loc) == MINUS
+ || GET_CODE (*loc) == MULT)
+ {
+ rtx x = find_replacement (&XEXP (*loc, 0));
+ rtx y = find_replacement (&XEXP (*loc, 1));
+
+ if (x != XEXP (*loc, 0) || y != XEXP (*loc, 1))
+ return gen_rtx (GET_CODE (*loc), GET_MODE (*loc), x, y);
+ }
+
return *loc;
}
@@ -5411,6 +5453,9 @@ refers_to_regno_for_reload_p (regno, endregno, x, loc)
return 0;
x = SET_SRC (x);
goto repeat;
+
+ default:
+ break;
}
/* X does not match, so try its subexpressions. */
@@ -5591,6 +5636,8 @@ find_equiv_reg (goal, insn, class, other, reload_reg_p, goalreg, mode)
case POST_DEC:
case PRE_DEC:
return 0;
+ default:
+ break;
}
goal_mem = 1;
}
@@ -5896,6 +5943,9 @@ find_equiv_reg (goal, insn, class, other, reload_reg_p, goalreg, mode)
else if (goal_mem && GET_CODE (dest) == MEM
&& ! push_operand (dest, GET_MODE (dest)))
return 0;
+ else if (GET_CODE (dest) == MEM && regno >= FIRST_PSEUDO_REGISTER
+ && reg_equiv_memory_loc[regno] != 0)
+ return 0;
else if (need_stable_sp
&& push_operand (dest, GET_MODE (dest)))
return 0;
@@ -6070,41 +6120,42 @@ static char *reg_class_names[] = REG_CLASS_NAMES;
/* This function is used to print the variables set by 'find_reloads' */
void
-debug_reload()
+debug_reload ()
{
int r;
-
- fprintf (stderr, "\nn_reloads = %d\n", n_reloads);
+ char *prefix;
for (r = 0; r < n_reloads; r++)
{
- fprintf (stderr, "\nRELOAD %d\n", r);
+ fprintf (stderr, "Reload %d: ", r);
- if (reload_in[r])
+ if (reload_in[r] != 0)
{
- fprintf (stderr, "\nreload_in (%s) = ",
+ fprintf (stderr, "reload_in (%s) = ",
GET_MODE_NAME (reload_inmode[r]));
- debug_rtx (reload_in[r]);
+ print_inline_rtx (stderr, reload_in[r], 24);
+ fprintf (stderr, "\n\t");
}
- if (reload_out[r])
+ if (reload_out[r] != 0)
{
- fprintf (stderr, "\nreload_out (%s) = ",
+ fprintf (stderr, "reload_out (%s) = ",
GET_MODE_NAME (reload_outmode[r]));
- debug_rtx (reload_out[r]);
+ print_inline_rtx (stderr, reload_out[r], 24);
+ fprintf (stderr, "\n\t");
}
fprintf (stderr, "%s, ", reg_class_names[(int) reload_reg_class[r]]);
fprintf (stderr, "%s (opnum = %d)",
- reload_when_needed_name[(int)reload_when_needed[r]],
+ reload_when_needed_name[(int) reload_when_needed[r]],
reload_opnum[r]);
if (reload_optional[r])
fprintf (stderr, ", optional");
- if (reload_in[r])
- fprintf (stderr, ", inc by %d\n", reload_inc[r]);
+ if (reload_inc[r] != 0)
+ fprintf (stderr, ", inc by %d", reload_inc[r]);
if (reload_nocombine[r])
fprintf (stderr, ", can't combine");
@@ -6112,52 +6163,42 @@ debug_reload()
if (reload_secondary_p[r])
fprintf (stderr, ", secondary_reload_p");
- if (reload_in_reg[r])
+ if (reload_in_reg[r] != 0)
{
- fprintf (stderr, "\nreload_in_reg:\t\t\t");
- debug_rtx (reload_in_reg[r]);
+ fprintf (stderr, "\n\treload_in_reg: ");
+ print_inline_rtx (stderr, reload_in_reg[r], 24);
}
- if (reload_reg_rtx[r])
+ if (reload_reg_rtx[r] != 0)
{
- fprintf (stderr, "\nreload_reg_rtx:\t\t\t");
- debug_rtx (reload_reg_rtx[r]);
+ fprintf (stderr, "\n\treload_reg_rtx: ");
+ print_inline_rtx (stderr, reload_reg_rtx[r], 24);
}
+ prefix = "\n\t";
if (reload_secondary_in_reload[r] != -1)
{
- fprintf (stderr, "\nsecondary_in_reload = ");
- fprintf (stderr, "%d ", reload_secondary_in_reload[r]);
+ fprintf (stderr, "%ssecondary_in_reload = %d",
+ prefix, reload_secondary_in_reload[r]);
+ prefix = ", ";
}
if (reload_secondary_out_reload[r] != -1)
- {
- if (reload_secondary_in_reload[r] != -1)
- fprintf (stderr, ", secondary_out_reload = ");
- else
- fprintf (stderr, "\nsecondary_out_reload = ");
-
- fprintf (stderr, "%d", reload_secondary_out_reload[r]);
- }
-
+ fprintf (stderr, "%ssecondary_out_reload = %d\n",
+ prefix, reload_secondary_out_reload[r]);
+ prefix = "\n\t";
if (reload_secondary_in_icode[r] != CODE_FOR_nothing)
{
- fprintf (stderr, "\nsecondary_in_icode = ");
- fprintf (stderr, "%s", insn_name[r]);
+ fprintf (stderr, "%ssecondary_in_icode = %s", prefix,
+ insn_name[reload_secondary_in_icode[r]]);
+ prefix = ", ";
}
if (reload_secondary_out_icode[r] != CODE_FOR_nothing)
- {
- if (reload_secondary_in_icode[r] != CODE_FOR_nothing)
- fprintf (stderr, ", secondary_out_icode = ");
- else
- fprintf (stderr, "\nsecondary_out_icode = ");
+ fprintf (stderr, "%ssecondary_out_icode = %s", prefix,
+ insn_name[reload_secondary_out_icode[r]]);
- fprintf (stderr, "%s ", insn_name[r]);
- }
fprintf (stderr, "\n");
}
-
- fprintf (stderr, "\n");
}
diff --git a/gcc/reload.h b/gcc/reload.h
index 98c6dd415a4..2475c1f6365 100644
--- a/gcc/reload.h
+++ b/gcc/reload.h
@@ -145,11 +145,6 @@ extern void clear_secondary_mem PROTO((void));
reload TO. */
extern void transfer_replacements PROTO((int, int));
-/* Return 1 if ADDR is a valid memory address for mode MODE,
- and check that each pseudo reg has the proper kind of
- hard reg. */
-extern int strict_memory_address_p PROTO((enum machine_mode, rtx));
-
/* Like rtx_equal_p except that it allows a REG and a SUBREG to match
if they are the same hard reg, and has special hacks for
autoincrement and autodecrement. */
@@ -212,7 +207,7 @@ extern int regno_clobbered_p PROTO((int, rtx));
extern void init_reload PROTO((void));
/* The reload pass itself. */
-extern int reload STDIO_PROTO((rtx, int, FILE *));
+extern int reload PROTO((rtx, int, FILE *));
/* Mark the slots in regs_ever_live for the hard regs
used by pseudo-reg number REGNO. */
diff --git a/gcc/reload1.c b/gcc/reload1.c
index f777c5b7f8c..182bb92abd5 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -19,8 +19,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "obstack.h"
#include "insn-config.h"
@@ -159,7 +159,7 @@ HARD_REG_SET forbidden_regs;
/* This reg set indicates registers that are not good for spill registers.
They will not be used to complete groups of spill registers. This includes
all fixed registers, registers that may be eliminated, and, if
- SMALL_REGISTER_CLASSES is not defined, registers explicitly used in the rtl.
+ SMALL_REGISTER_CLASSES is zero, registers explicitly used in the rtl.
(spill_reg_order prevents these registers from being used to start a
group.) */
@@ -399,9 +399,12 @@ static void reload_cse_invalidate_mem PROTO((rtx));
static void reload_cse_invalidate_rtx PROTO((rtx, rtx));
static int reload_cse_regno_equal_p PROTO((int, rtx, enum machine_mode));
static int reload_cse_noop_set_p PROTO((rtx, rtx));
-static void reload_cse_simplify_set PROTO((rtx, rtx));
+static int reload_cse_simplify_set PROTO((rtx, rtx));
+static int reload_cse_simplify_operands PROTO((rtx));
static void reload_cse_check_clobber PROTO((rtx, rtx));
static void reload_cse_record_set PROTO((rtx, rtx));
+static void reload_cse_delete_death_notes PROTO((rtx));
+static void reload_cse_no_longer_dead PROTO((int, enum machine_mode));
/* Initialize the reload pass once per compilation. */
@@ -465,7 +468,6 @@ init_reload ()
but that is hard to determine. */
reload_address_base_reg_class = BASE_REG_CLASS;
reload_address_index_reg_class = INDEX_REG_CLASS;
-#ifdef SMALL_REGISTER_CLASSES
if (SMALL_REGISTER_CLASSES)
{
int regno;
@@ -511,7 +513,6 @@ init_reload ()
}
indexok:;
}
-#endif /* SMALL_REGISTER_CLASSES */
}
/* Main entry point for the reload pass.
@@ -637,10 +638,8 @@ reload (first, global, dumpfile)
cannot_omit_stores = (char *) alloca (max_regno);
bzero (cannot_omit_stores, max_regno);
-#ifdef SMALL_REGISTER_CLASSES
if (SMALL_REGISTER_CLASSES)
CLEAR_HARD_REG_SET (forbidden_regs);
-#endif
/* Look for REG_EQUIV notes; record what each pseudo is equivalent to.
Also find all paradoxical subregs and find largest such for each pseudo.
@@ -674,7 +673,14 @@ reload (first, global, dumpfile)
if (i > LAST_VIRTUAL_REGISTER)
{
if (GET_CODE (x) == MEM)
- reg_equiv_memory_loc[i] = x;
+ {
+ /* If the operand is a PLUS, the MEM may be shared,
+ so make sure we have an unshared copy here. */
+ if (GET_CODE (XEXP (x, 0)) == PLUS)
+ x = copy_rtx (x);
+
+ reg_equiv_memory_loc[i] = x;
+ }
else if (CONSTANT_P (x))
{
if (LEGITIMATE_CONSTANT_P (x))
@@ -820,9 +826,7 @@ reload (first, global, dumpfile)
rtl as a spill register. But on some, we have to. Those will have
taken care to keep the life of hard regs as short as possible. */
-#ifdef SMALL_REGISTER_CLASSES
if (! SMALL_REGISTER_CLASSES)
-#endif
COPY_HARD_REG_SET (forbidden_regs, bad_spill_regs);
/* Spill any hard regs that we know we can't eliminate. */
@@ -1092,7 +1096,6 @@ reload (first, global, dumpfile)
if (num_eliminable)
did_elimination = eliminate_regs_in_insn (insn, 0);
-#ifdef SMALL_REGISTER_CLASSES
/* Set avoid_return_reg if this is an insn
that might use the value of a function call. */
if (SMALL_REGISTER_CLASSES && GET_CODE (insn) == CALL_INSN)
@@ -1105,8 +1108,7 @@ reload (first, global, dumpfile)
else
after_call = 0;
}
- else if (SMALL_REGISTER_CLASSES
- && after_call != 0
+ else if (SMALL_REGISTER_CLASSES && after_call != 0
&& !(GET_CODE (PATTERN (insn)) == SET
&& SET_DEST (PATTERN (insn)) == stack_pointer_rtx))
{
@@ -1114,7 +1116,6 @@ reload (first, global, dumpfile)
avoid_return_reg = after_call;
after_call = 0;
}
-#endif /* SMALL_REGISTER_CLASSES */
/* Analyze the instruction. */
find_reloads (insn, 0, spill_indirect_levels, global,
@@ -1193,7 +1194,6 @@ reload (first, global, dumpfile)
new_basic_block_needs = 1;
}
-
mode = reload_inmode[i];
if (GET_MODE_SIZE (reload_outmode[i]) > GET_MODE_SIZE (mode))
mode = reload_outmode[i];
@@ -1326,10 +1326,9 @@ reload (first, global, dumpfile)
k < reload_n_operands; k++)
{
in_max
- = MAX (in_max, insn_needs.in_addr[k].regs[j][i]);
- in_max
= MAX (in_max,
- insn_needs.in_addr_addr[k].regs[j][i]);
+ (insn_needs.in_addr[k].regs[j][i]
+ + insn_needs.in_addr_addr[k].regs[j][i]));
out_max
= MAX (out_max, insn_needs.out_addr[k].regs[j][i]);
out_max
@@ -1461,7 +1460,6 @@ reload (first, global, dumpfile)
}
}
-#ifdef SMALL_REGISTER_CLASSES
/* If this insn stores the value of a function call,
and that value is in a register that has been spilled,
and if the insn needs a reload in a class
@@ -1530,7 +1528,6 @@ reload (first, global, dumpfile)
}
}
}
-#endif /* SMALL_REGISTER_CLASSES */
/* For each class, collect maximum need of any insn. */
@@ -1826,7 +1823,6 @@ reload (first, global, dumpfile)
}
}
/* We can't complete a group, so start one. */
-#ifdef SMALL_REGISTER_CLASSES
/* Look for a pair neither of which is explicitly used. */
if (SMALL_REGISTER_CLASSES && i == FIRST_PSEUDO_REGISTER)
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
@@ -1851,7 +1847,6 @@ reload (first, global, dumpfile)
&& ! regs_explicitly_used[j + 1])
break;
}
-#endif
/* Now try any group at all
whose registers are not in bad_spill_regs. */
if (i == FIRST_PSEUDO_REGISTER)
@@ -2763,6 +2758,9 @@ set_label_offsets (x, insn, initial_p)
else if (GET_CODE (tem) != PC && GET_CODE (tem) != RETURN)
break;
return;
+
+ default:
+ break;
}
/* If we reach here, all eliminations must be at their initial
@@ -2770,6 +2768,10 @@ set_label_offsets (x, insn, initial_p)
for (p = reg_eliminate; p < &reg_eliminate[NUM_ELIMINABLE_REGS]; p++)
if (p->offset != p->initial_offset)
p->can_eliminate = 0;
+ break;
+
+ default:
+ break;
}
}
@@ -2836,6 +2838,15 @@ eliminate_regs (x, mem_mode, insn, storing)
case RETURN:
return x;
+ case ADDRESSOF:
+ /* This is only for the benefit of the debugging backends, which call
+ eliminate_regs on DECL_RTL; any ADDRESSOFs in the actual insns are
+ removed after CSE. */
+ new = eliminate_regs (XEXP (x, 0), 0, insn, 0);
+ if (GET_CODE (new) == MEM)
+ return XEXP (new, 0);
+ return x;
+
case REG:
regno = REGNO (x);
@@ -3280,6 +3291,12 @@ eliminate_regs (x, mem_mode, insn, storing)
return x;
case MEM:
+ /* This is only for the benefit of the debugging backends, which call
+ eliminate_regs on DECL_RTL; any ADDRESSOFs in the actual insns are
+ removed after CSE. */
+ if (GET_CODE (XEXP (x, 0)) == ADDRESSOF)
+ return eliminate_regs (XEXP (XEXP (x, 0), 0), 0, insn, 0);
+
/* Our only special processing is to pass the mode of the MEM to our
recursive call and copy the flags. While we are here, handle this
case more efficiently. */
@@ -3294,6 +3311,9 @@ eliminate_regs (x, mem_mode, insn, storing)
}
else
return x;
+
+ default:
+ break;
}
/* Process each of our operands recursively. If any have changed, make a
@@ -3757,12 +3777,9 @@ scan_paradoxical_subregs (x)
switch (code)
{
case REG:
-#ifdef SMALL_REGISTER_CLASSES
- if (SMALL_REGISTER_CLASSES
- && REGNO (x) < FIRST_PSEUDO_REGISTER
+ if (SMALL_REGISTER_CLASSES && REGNO (x) < FIRST_PSEUDO_REGISTER
&& REG_USERVAR_P (x))
SET_HARD_REG_BIT (forbidden_regs, REGNO (x));
-#endif
return;
case CONST_INT:
@@ -3782,6 +3799,9 @@ scan_paradoxical_subregs (x)
reg_max_ref_width[REGNO (SUBREG_REG (x))]
= GET_MODE_SIZE (GET_MODE (x));
return;
+
+ default:
+ break;
}
fmt = GET_RTX_FORMAT (code);
@@ -3874,14 +3894,12 @@ order_regs_for_reload (global)
else if (regs_explicitly_used[i])
{
hard_reg_n_uses[i].uses += large + 1;
- /* ??? We are doing this here because of the potential that
- bad code may be generated if a register explicitly used in
- an insn was used as a spill register for that insn. But
- not using these are spill registers may lose on some machine.
- We'll have to see how this works out. */
-#ifdef SMALL_REGISTER_CLASSES
if (! SMALL_REGISTER_CLASSES)
-#endif
+ /* ??? We are doing this here because of the potential
+ that bad code may be generated if a register explicitly
+ used in an insn was used as a spill register for that
+ insn. But not using these are spill registers may lose
+ on some machine. We'll have to see how this works out. */
SET_HARD_REG_BIT (bad_spill_regs, i);
}
}
@@ -4033,7 +4051,6 @@ reload_as_needed (first, live_known)
rtx avoid_return_reg = 0;
rtx oldpat = PATTERN (insn);
-#ifdef SMALL_REGISTER_CLASSES
/* Set avoid_return_reg if this is an insn
that might use the value of a function call. */
if (SMALL_REGISTER_CLASSES && GET_CODE (insn) == CALL_INSN)
@@ -4046,8 +4063,7 @@ reload_as_needed (first, live_known)
else
after_call = 0;
}
- else if (SMALL_REGISTER_CLASSES
- && after_call != 0
+ else if (SMALL_REGISTER_CLASSES && after_call != 0
&& !(GET_CODE (PATTERN (insn)) == SET
&& SET_DEST (PATTERN (insn)) == stack_pointer_rtx))
{
@@ -4055,7 +4071,6 @@ reload_as_needed (first, live_known)
avoid_return_reg = after_call;
after_call = 0;
}
-#endif /* SMALL_REGISTER_CLASSES */
/* If this is a USE and CLOBBER of a MEM, ensure that any
references to eliminable registers have been removed. */
@@ -4122,13 +4137,11 @@ reload_as_needed (first, live_known)
Record the choices of reload reg in reload_reg_rtx. */
choose_reload_regs (insn, avoid_return_reg);
-#ifdef SMALL_REGISTER_CLASSES
/* Merge any reloads that we didn't combine for fear of
increasing the number of spill registers needed but now
discover can be safely merged. */
if (SMALL_REGISTER_CLASSES)
merge_assigned_reloads (insn);
-#endif
/* Generate the insns to reload operands into or out of
their reload regs. */
@@ -5260,7 +5273,6 @@ choose_reload_regs (insn, avoid_return_reg)
CLEAR_HARD_REG_SET (reload_reg_used_in_outaddr_addr[i]);
}
-#ifdef SMALL_REGISTER_CLASSES
/* Don't bother with avoiding the return reg
if we have no mandatory reload that could use it. */
if (SMALL_REGISTER_CLASSES && avoid_return_reg)
@@ -5283,7 +5295,6 @@ choose_reload_regs (insn, avoid_return_reg)
if (!do_avoid)
avoid_return_reg = 0;
}
-#endif /* SMALL_REGISTER_CLASSES */
#if 0 /* Not needed, now that we can always retry without inheritance. */
/* See if we have more mandatory reloads than spill regs.
@@ -5294,11 +5305,7 @@ choose_reload_regs (insn, avoid_return_reg)
unless it is equal to reload_in or reload_out, count such reloads. */
{
- int tem = 0;
-#ifdef SMALL_REGISTER_CLASSES
- if (SMALL_REGISTER_CLASSES)
- tem = (avoid_return_reg != 0);
-#endif
+ int tem = SMALL_REGISTER_CLASSES? (avoid_return_reg != 0): 0;
for (j = 0; j < n_reloads; j++)
if (! reload_optional[j]
&& (reload_in[j] != 0 || reload_out[j] != 0 || reload_secondary_p[j])
@@ -5311,7 +5318,6 @@ choose_reload_regs (insn, avoid_return_reg)
}
#endif
-#ifdef SMALL_REGISTER_CLASSES
/* Don't use the subroutine call return reg for a reload
if we are supposed to avoid it. */
if (SMALL_REGISTER_CLASSES && avoid_return_reg)
@@ -5325,7 +5331,6 @@ choose_reload_regs (insn, avoid_return_reg)
if (spill_reg_order[r] >= 0)
SET_HARD_REG_BIT (reload_reg_used, r);
}
-#endif /* SMALL_REGISTER_CLASSES */
/* In order to be certain of getting the registers we need,
we must sort the reloads into order of increasing register class.
@@ -5437,12 +5442,14 @@ choose_reload_regs (insn, avoid_return_reg)
register int r = reload_order[j];
/* Ignore reloads that got marked inoperative. */
- if (reload_out[r] == 0 && reload_in[r] == 0 && ! reload_secondary_p[r])
+ if (reload_out[r] == 0 && reload_in[r] == 0
+ && ! reload_secondary_p[r])
continue;
/* If find_reloads chose a to use reload_in or reload_out as a reload
- register, we don't need to chose one. Otherwise, try even if it found
- one since we might save an insn if we find the value lying around. */
+ register, we don't need to chose one. Otherwise, try even if it
+ found one since we might save an insn if we find the value lying
+ around. */
if (reload_in[r] != 0 && reload_reg_rtx[r] != 0
&& (rtx_equal_p (reload_in[r], reload_reg_rtx[r])
|| rtx_equal_p (reload_out[r], reload_reg_rtx[r])))
@@ -5474,9 +5481,9 @@ choose_reload_regs (insn, avoid_return_reg)
an object that is already in a register of the desired class.
This would avoid the need for the secondary reload register.
But this is complex because we can't easily determine what
- objects might want to be loaded via this reload. So let a register
- be allocated here. In `emit_reload_insns' we suppress one of the
- loads in the case described above. */
+ objects might want to be loaded via this reload. So let a
+ register be allocated here. In `emit_reload_insns' we suppress
+ one of the loads in the case described above. */
if (inheritance)
{
@@ -5876,7 +5883,7 @@ choose_reload_regs (insn, avoid_return_reg)
}
}
-/* If SMALL_REGISTER_CLASSES are defined, we may not have merged two
+/* If SMALL_REGISTER_CLASSES is non-zero, we may not have merged two
reloads of the same item for fear that we might not have enough reload
registers. However, normally they will get the same reload register
and hence actually need not be loaded twice.
@@ -5889,8 +5896,6 @@ choose_reload_regs (insn, avoid_return_reg)
This will not increase the number of spill registers needed and will
prevent redundant code. */
-#ifdef SMALL_REGISTER_CLASSES
-
static void
merge_assigned_reloads (insn)
rtx insn;
@@ -5964,7 +5969,7 @@ merge_assigned_reloads (insn)
}
}
}
-#endif /* SMALL_RELOAD_CLASSES */
+
/* Output insns to reload values in and out of the chosen reload regs. */
@@ -7535,6 +7540,9 @@ count_occurrences (x, find)
if (SET_DEST (x) == find)
return count_occurrences (SET_SRC (x), find);
break;
+
+ default:
+ break;
}
format_ptr = GET_RTX_FORMAT (code);
@@ -7582,6 +7590,13 @@ static rtx *reg_values;
static rtx invalidate_regno_rtx;
+/* This is a set of registers for which we must remove REG_DEAD notes in
+ previous insns, because our modifications made them invalid. That can
+ happen if we introduced the register into the current insn, or we deleted
+ the current insn which used to set the register. */
+
+static HARD_REG_SET no_longer_dead_regs;
+
/* Invalidate any entries in reg_values which depend on REGNO,
including those for REGNO itself. This is called if REGNO is
changing. If CLOBBER is true, then always forget anything we
@@ -7699,7 +7714,10 @@ reload_cse_mem_conflict_p (mem_base, val)
if (GET_MODE (mem_base) == BLKmode
|| GET_MODE (val) == BLKmode)
return 1;
- return anti_dependence (val, mem_base);
+ if (anti_dependence (val, mem_base))
+ return 1;
+ /* The address may contain nested MEMs. */
+ break;
default:
break;
@@ -7781,6 +7799,55 @@ reload_cse_invalidate_rtx (dest, ignore)
reload_cse_invalidate_mem (dest);
}
+/* Possibly delete death notes on the insns before INSN if modifying INSN
+ extended the lifespan of the registers. */
+
+static void
+reload_cse_delete_death_notes (insn)
+ rtx insn;
+{
+ int dreg;
+
+ for (dreg = 0; dreg < FIRST_PSEUDO_REGISTER; dreg++)
+ {
+ rtx trial;
+
+ if (! TEST_HARD_REG_BIT (no_longer_dead_regs, dreg))
+ continue;
+
+ for (trial = prev_nonnote_insn (insn);
+ (trial
+ && GET_CODE (trial) != CODE_LABEL
+ && GET_CODE (trial) != BARRIER);
+ trial = prev_nonnote_insn (trial))
+ {
+ if (find_regno_note (trial, REG_DEAD, dreg))
+ {
+ remove_death (dreg, trial);
+ break;
+ }
+ }
+ }
+}
+
+/* Record that the current insn uses hard reg REGNO in mode MODE. This
+ will be used in reload_cse_delete_death_notes to delete prior REG_DEAD
+ notes for this register. */
+
+static void
+reload_cse_no_longer_dead (regno, mode)
+ int regno;
+ enum machine_mode mode;
+{
+ int nregs = HARD_REGNO_NREGS (regno, mode);
+ while (nregs-- > 0)
+ {
+ SET_HARD_REG_BIT (no_longer_dead_regs, regno);
+ regno++;
+ }
+}
+
+
/* Do a very simple CSE pass over the hard registers.
This function detects no-op moves where we happened to assign two
@@ -7791,7 +7858,12 @@ reload_cse_invalidate_rtx (dest, ignore)
This function also detects cases where we load a value from memory
into two different registers, and (if memory is more expensive than
registers) changes it to simply copy the first register into the
- second register. */
+ second register.
+
+ Another optimization is performed that scans the operands of each
+ instruction to see whether the value is already available in a
+ hard register. It then replaces the operand with the hard register
+ if possible, much like an optional reload would. */
void
reload_cse_regs (first)
@@ -7849,6 +7921,8 @@ reload_cse_regs (first)
if (GET_RTX_CLASS (GET_CODE (insn)) != 'i')
continue;
+ CLEAR_HARD_REG_SET (no_longer_dead_regs);
+
/* If this is a call instruction, forget anything stored in a
call clobbered register, or, if this is not a const call, in
memory. */
@@ -7865,22 +7939,32 @@ reload_cse_regs (first)
body = PATTERN (insn);
if (GET_CODE (body) == SET)
{
+ int count = 0;
if (reload_cse_noop_set_p (body, insn))
{
PUT_CODE (insn, NOTE);
NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
NOTE_SOURCE_FILE (insn) = 0;
+ reload_cse_delete_death_notes (insn);
/* We're done with this insn. */
continue;
}
- reload_cse_simplify_set (body, insn);
+ /* It's not a no-op, but we can try to simplify it. */
+ CLEAR_HARD_REG_SET (no_longer_dead_regs);
+ count += reload_cse_simplify_set (body, insn);
+
+ if (count > 0 && apply_change_group ())
+ reload_cse_delete_death_notes (insn);
+ else if (reload_cse_simplify_operands (insn))
+ reload_cse_delete_death_notes (insn);
+
reload_cse_record_set (body, body);
}
else if (GET_CODE (body) == PARALLEL)
{
- int delete;
+ int count = 0;
/* If every action in a PARALLEL is a noop, we can delete
the entire PARALLEL. */
@@ -7894,10 +7978,22 @@ reload_cse_regs (first)
PUT_CODE (insn, NOTE);
NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
NOTE_SOURCE_FILE (insn) = 0;
+ reload_cse_delete_death_notes (insn);
/* We're done with this insn. */
continue;
}
+
+ /* It's not a no-op, but we can try to simplify it. */
+ CLEAR_HARD_REG_SET (no_longer_dead_regs);
+ for (i = XVECLEN (body, 0) - 1; i >= 0; --i)
+ if (GET_CODE (XVECEXP (body, 0, i)) == SET)
+ count += reload_cse_simplify_set (XVECEXP (body, 0, i), insn);
+
+ if (count > 0 && apply_change_group ())
+ reload_cse_delete_death_notes (insn);
+ else if (reload_cse_simplify_operands (insn))
+ reload_cse_delete_death_notes (insn);
/* Look through the PARALLEL and record the values being
set, if possible. Also handle any CLOBBERs. */
@@ -8063,34 +8159,22 @@ reload_cse_noop_set_p (set, insn)
/* If we can delete this SET, then we need to look for an earlier
REG_DEAD note on DREG, and remove it if it exists. */
- if (ret)
+ if (ret && dreg >= 0)
{
if (! find_regno_note (insn, REG_UNUSED, dreg))
- {
- rtx trial;
-
- for (trial = prev_nonnote_insn (insn);
- (trial
- && GET_CODE (trial) != CODE_LABEL
- && GET_CODE (trial) != BARRIER);
- trial = prev_nonnote_insn (trial))
- {
- if (find_regno_note (trial, REG_DEAD, dreg))
- {
- remove_death (dreg, trial);
- break;
- }
- }
- }
+ reload_cse_no_longer_dead (dreg, dest_mode);
}
return ret;
}
/* Try to simplify a single SET instruction. SET is the set pattern.
- INSN is the instruction it came from. */
+ INSN is the instruction it came from.
+ This function only handles one case: if we set a register to a value
+ which is not a register, we try to find that value in some other register
+ and change the set into a register copy. */
-static void
+static int
reload_cse_simplify_set (set, insn)
rtx set;
rtx insn;
@@ -8101,22 +8185,18 @@ reload_cse_simplify_set (set, insn)
enum reg_class dclass;
register int i;
- /* We only handle one case: if we set a register to a value which is
- not a register, we try to find that value in some other register
- and change the set into a register copy. */
-
dreg = true_regnum (SET_DEST (set));
if (dreg < 0)
- return;
+ return 0;
src = SET_SRC (set);
if (side_effects_p (src) || true_regnum (src) >= 0)
- return;
+ return 0;
/* If memory loads are cheaper than register copies, don't change
them. */
if (GET_CODE (src) == MEM && MEMORY_MOVE_COST (GET_MODE (src)) < 2)
- return;
+ return 0;
dest_mode = GET_MODE (SET_DEST (set));
dclass = REGNO_REG_CLASS (dreg);
@@ -8132,38 +8212,252 @@ reload_cse_simplify_set (set, insn)
pop_obstacks ();
validated = validate_change (insn, &SET_SRC (set),
- gen_rtx (REG, dest_mode, i), 0);
+ gen_rtx (REG, dest_mode, i), 1);
/* Go back to the obstack we are using for temporary
storage. */
push_obstacks (&reload_obstack, &reload_obstack);
- if (validated)
+ if (validated && ! find_regno_note (insn, REG_UNUSED, i))
+ {
+ reload_cse_no_longer_dead (i, dest_mode);
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+/* Try to replace operands in INSN with equivalent values that are already
+ in registers. This can be viewed as optional reloading.
+
+ For each non-register operand in the insn, see if any hard regs are
+ known to be equivalent to that operand. Record the alternatives which
+ can accept these hard registers. Among all alternatives, select the
+ ones which are better or equal to the one currently matching, where
+ "better" is in terms of '?' and '!' constraints. Among the remaining
+ alternatives, select the one which replaces most operands with
+ hard registers. */
+
+static int
+reload_cse_simplify_operands (insn)
+ rtx insn;
+{
+#ifdef REGISTER_CONSTRAINTS
+ int insn_code_number, n_operands, n_alternatives;
+ int i,j;
+
+ char *constraints[MAX_RECOG_OPERANDS];
+
+ /* Vector recording how bad an alternative is. */
+ int *alternative_reject;
+ /* Vector recording how many registers can be introduced by choosing
+ this alternative. */
+ int *alternative_nregs;
+ /* Array of vectors recording, for each operand and each alternative,
+ which hard register to substitute, or -1 if the operand should be
+ left as it is. */
+ int *op_alt_regno[MAX_RECOG_OPERANDS];
+ /* Array of alternatives, sorted in order of decreasing desirability. */
+ int *alternative_order;
+
+ /* Find out some information about this insn. */
+ insn_code_number = recog_memoized (insn);
+ /* We don't modify asm instructions. */
+ if (insn_code_number < 0)
+ return 0;
+
+ n_operands = insn_n_operands[insn_code_number];
+ n_alternatives = insn_n_alternatives[insn_code_number];
+
+ if (n_alternatives == 0 || n_operands == 0)
+ return;
+ insn_extract (insn);
+
+ /* Figure out which alternative currently matches. */
+ if (! constrain_operands (insn_code_number, 1))
+ abort ();
+
+ alternative_reject = (int *) alloca (n_alternatives * sizeof (int));
+ alternative_nregs = (int *) alloca (n_alternatives * sizeof (int));
+ alternative_order = (int *) alloca (n_alternatives * sizeof (int));
+ bzero ((char *)alternative_reject, n_alternatives * sizeof (int));
+ bzero ((char *)alternative_nregs, n_alternatives * sizeof (int));
+
+ for (i = 0; i < n_operands; i++)
+ {
+ enum machine_mode mode;
+ int regno;
+ char *p;
+
+ op_alt_regno[i] = (int *) alloca (n_alternatives * sizeof (int));
+ for (j = 0; j < n_alternatives; j++)
+ op_alt_regno[i][j] = -1;
+
+ p = constraints[i] = insn_operand_constraint[insn_code_number][i];
+ mode = insn_operand_mode[insn_code_number][i];
+
+ /* Add the reject values for each alternative given by the constraints
+ for this operand. */
+ j = 0;
+ while (*p != '\0')
+ {
+ char c = *p++;
+ if (c == ',')
+ j++;
+ else if (c == '?')
+ alternative_reject[j] += 3;
+ else if (c == '!')
+ alternative_reject[j] += 300;
+ }
+
+ /* We won't change operands which are already registers. We
+ also don't want to modify output operands. */
+ regno = true_regnum (recog_operand[i]);
+ if (regno >= 0
+ || constraints[i][0] == '='
+ || constraints[i][0] == '+')
+ continue;
+
+ for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
+ {
+ int class = (int) NO_REGS;
+
+ if (! reload_cse_regno_equal_p (regno, recog_operand[i], mode))
+ continue;
+
+ /* We found a register equal to this operand. Now look for all
+ alternatives that can accept this register and have not been
+ assigned a register they can use yet. */
+ j = 0;
+ p = constraints[i];
+ for (;;)
{
- /* We need to look for an earlier REG_DEAD note on I,
- and remove it if it exists. */
- if (! find_regno_note (insn, REG_UNUSED, i))
+ char c = *p++;
+
+ switch (c)
{
- rtx trial;
+ case '=': case '+': case '?':
+ case '#': case '&': case '!':
+ case '*': case '%':
+ case '0': case '1': case '2': case '3': case '4':
+ case 'm': case '<': case '>': case 'V': case 'o':
+ case 'E': case 'F': case 'G': case 'H':
+ case 's': case 'i': case 'n':
+ case 'I': case 'J': case 'K': case 'L':
+ case 'M': case 'N': case 'O': case 'P':
+#ifdef EXTRA_CONSTRAINT
+ case 'Q': case 'R': case 'S': case 'T': case 'U':
+#endif
+ case 'p': case 'X':
+ /* These don't say anything we care about. */
+ break;
+
+ case 'g': case 'r':
+ class = reg_class_subunion[(int) class][(int) GENERAL_REGS];
+ break;
- for (trial = prev_nonnote_insn (insn);
- (trial
- && GET_CODE (trial) != CODE_LABEL
- && GET_CODE (trial) != BARRIER);
- trial = prev_nonnote_insn (trial))
+ default:
+ class
+ = reg_class_subunion[(int) class][(int) REG_CLASS_FROM_LETTER (c)];
+ break;
+
+ case ',': case '\0':
+ /* See if REGNO fits this alternative, and set it up as the
+ replacement register if we don't have one for this
+ alternative yet. */
+ if (op_alt_regno[i][j] == -1
+ && reg_fits_class_p (gen_rtx (REG, mode, regno), class,
+ 0, mode))
{
- if (find_regno_note (trial, REG_DEAD, i))
- {
- remove_death (i, trial);
- break;
- }
+ alternative_nregs[j]++;
+ op_alt_regno[i][j] = regno;
}
+ j++;
+ break;
}
- return;
+ if (c == '\0')
+ break;
}
}
}
+
+ /* Record all alternatives which are better or equal to the currently
+ matching one in the alternative_order array. */
+ for (i = j = 0; i < n_alternatives; i++)
+ if (alternative_reject[i] <= alternative_reject[which_alternative])
+ alternative_order[j++] = i;
+ n_alternatives = j;
+
+ /* Sort it. Given a small number of alternatives, a dumb algorithm
+ won't hurt too much. */
+ for (i = 0; i < n_alternatives - 1; i++)
+ {
+ int best = i;
+ int best_reject = alternative_reject[alternative_order[i]];
+ int best_nregs = alternative_nregs[alternative_order[i]];
+ int tmp;
+
+ for (j = i + 1; j < n_alternatives; j++)
+ {
+ int this_reject = alternative_reject[alternative_order[j]];
+ int this_nregs = alternative_nregs[alternative_order[j]];
+
+ if (this_reject < best_reject
+ || (this_reject == best_reject && this_nregs < best_nregs))
+ {
+ best = j;
+ best_reject = this_reject;
+ best_nregs = this_nregs;
+ }
+ }
+
+ tmp = alternative_order[best];
+ alternative_order[best] = alternative_order[i];
+ alternative_order[i] = tmp;
+ }
+
+ /* Substitute the operands as determined by op_alt_regno for the best
+ alternative. */
+ j = alternative_order[0];
+ CLEAR_HARD_REG_SET (no_longer_dead_regs);
+
+ /* Pop back to the real obstacks while changing the insn. */
+ pop_obstacks ();
+
+ for (i = 0; i < n_operands; i++)
+ {
+ enum machine_mode mode = insn_operand_mode[insn_code_number][i];
+ if (op_alt_regno[i][j] == -1)
+ continue;
+
+ reload_cse_no_longer_dead (op_alt_regno[i][j], mode);
+ validate_change (insn, recog_operand_loc[i],
+ gen_rtx (REG, mode, op_alt_regno[i][j]), 1);
+ }
+
+ for (i = insn_n_dups[insn_code_number] - 1; i >= 0; i--)
+ {
+ int op = recog_dup_num[i];
+ enum machine_mode mode = insn_operand_mode[insn_code_number][op];
+
+ if (op_alt_regno[op][j] == -1)
+ continue;
+
+ reload_cse_no_longer_dead (op_alt_regno[op][j], mode);
+ validate_change (insn, recog_dup_loc[i],
+ gen_rtx (REG, mode, op_alt_regno[op][j]), 1);
+ }
+
+ /* Go back to the obstack we are using for temporary
+ storage. */
+ push_obstacks (&reload_obstack, &reload_obstack);
+
+ return apply_change_group ();
+#else
+ return 0;
+#endif
}
/* These two variables are used to pass information from
diff --git a/gcc/reorg.c b/gcc/reorg.c
index 93ae785008f..ba40f2440df 100644
--- a/gcc/reorg.c
+++ b/gcc/reorg.c
@@ -1,5 +1,5 @@
/* Perform instruction reorganizations for delay slot filling.
- Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu).
Hacked by Michael Tiemann (tiemann@cygnus.com).
@@ -115,8 +115,8 @@ Boston, MA 02111-1307, USA. */
The HP-PA can conditionally nullify insns, providing a similar
effect to the ARM, differing mostly in which insn is "in charge". */
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "insn-config.h"
#include "conditions.h"
@@ -266,7 +266,7 @@ static rtx next_insn_no_annul PROTO((rtx));
static void mark_target_live_regs PROTO((rtx, struct resources *));
static void fill_simple_delay_slots PROTO((rtx, int));
static rtx fill_slots_from_thread PROTO((rtx, rtx, rtx, rtx, int, int,
- int, int, int, int *));
+ int, int, int, int *, rtx));
static void fill_eager_delay_slots PROTO((rtx));
static void relax_delay_slots PROTO((rtx));
static void make_return_insns PROTO((rtx));
@@ -274,7 +274,7 @@ static int redirect_with_delay_slots_safe_p PROTO ((rtx, rtx, rtx));
static int redirect_with_delay_list_safe_p PROTO ((rtx, rtx, rtx));
/* Given X, some rtl, and RES, a pointer to a `struct resource', mark
- which resources are references by the insn. If INCLUDE_CALLED_ROUTINE
+ which resources are references by the insn. If INCLUDE_DELAYED_EFFECTS
is TRUE, resources used by the called routine will be included for
CALL_INSNs. */
@@ -487,9 +487,10 @@ mark_referenced_resources (x, res, include_delayed_effects)
}
}
-/* Given X, a part of an insn, and a pointer to a `struct resource', RES,
- indicate which resources are modified by the insn. If INCLUDE_CALLED_ROUTINE
- is nonzero, also mark resources potentially set by the called routine.
+/* Given X, a part of an insn, and a pointer to a `struct resource',
+ RES, indicate which resources are modified by the insn. If
+ INCLUDE_DELAYED_EFFECTS is nonzero, also mark resources potentially
+ set by the called routine.
If IN_DEST is nonzero, it means we are inside a SET. Otherwise,
objects are being referenced instead of set.
@@ -740,7 +741,7 @@ resource_conflicts_p (res1, res2)
}
/* Return TRUE if any resource marked in RES, a `struct resources', is
- referenced by INSN. If INCLUDE_CALLED_ROUTINE is set, return if the called
+ referenced by INSN. If INCLUDE_DELAYED_EFFECTS is set, return if the called
routine is using those resources.
We compute this by computing all the resources referenced by INSN and
@@ -762,7 +763,7 @@ insn_references_resource_p (insn, res, include_delayed_effects)
}
/* Return TRUE if INSN modifies resources that are marked in RES.
- INCLUDE_CALLED_ROUTINE is set if the actions of that routine should be
+ INCLUDE_DELAYED_EFFECTS is set if the actions of that routine should be
included. CC0 is only modified if it is explicitly set; see comments
in front of mark_set_resources for details. */
@@ -3322,7 +3323,8 @@ fill_simple_delay_slots (first, non_jumps_p)
NULL, 1, 1,
own_thread_p (JUMP_LABEL (insn),
JUMP_LABEL (insn), 0),
- 0, slots_to_fill, &slots_filled);
+ 0, slots_to_fill, &slots_filled,
+ delay_list);
if (delay_list)
unfilled_slots_base[i]
@@ -3452,7 +3454,7 @@ fill_simple_delay_slots (first, non_jumps_p)
static rtx
fill_slots_from_thread (insn, condition, thread, opposite_thread, likely,
thread_if_true, own_thread, own_opposite_thread,
- slots_to_fill, pslots_filled)
+ slots_to_fill, pslots_filled, delay_list)
rtx insn;
rtx condition;
rtx thread, opposite_thread;
@@ -3460,9 +3462,9 @@ fill_slots_from_thread (insn, condition, thread, opposite_thread, likely,
int thread_if_true;
int own_thread, own_opposite_thread;
int slots_to_fill, *pslots_filled;
+ rtx delay_list;
{
rtx new_thread;
- rtx delay_list = 0;
struct resources opposite_needed, set, needed;
rtx trial;
int lose = 0;
@@ -3479,7 +3481,7 @@ fill_slots_from_thread (insn, condition, thread, opposite_thread, likely,
/* If our thread is the end of subroutine, we can't get any delay
insns from that. */
if (thread == 0)
- return 0;
+ return delay_list;
/* If this is an unconditional branch, nothing is needed at the
opposite thread. Otherwise, compute what is needed there. */
@@ -3636,6 +3638,8 @@ fill_slots_from_thread (insn, condition, thread, opposite_thread, likely,
delay_list = add_to_delay_list (temp, delay_list);
+ mark_set_resources (trial, &opposite_needed, 0, 1);
+
if (slots_to_fill == ++(*pslots_filled))
{
/* Even though we have filled all the slots, we
@@ -3705,7 +3709,9 @@ fill_slots_from_thread (insn, condition, thread, opposite_thread, likely,
{
/* If this is the `true' thread, we will want to follow the jump,
so we can only do this if we have taken everything up to here. */
- if (thread_if_true && trial == new_thread)
+ if (thread_if_true && trial == new_thread
+ && ! insn_references_resource_p (XVECEXP (PATTERN (trial), 0, 0),
+ &opposite_needed, 0))
delay_list
= steal_delay_list_from_target (insn, condition, PATTERN (trial),
delay_list, &set, &needed,
@@ -3905,7 +3911,8 @@ fill_eager_delay_slots (first)
= fill_slots_from_thread (insn, condition, insn_at_target,
fallthrough_insn, prediction == 2, 1,
own_target, own_fallthrough,
- slots_to_fill, &slots_filled);
+ slots_to_fill, &slots_filled,
+ delay_list);
if (delay_list == 0 && own_fallthrough)
{
@@ -3920,7 +3927,8 @@ fill_eager_delay_slots (first)
= fill_slots_from_thread (insn, condition, fallthrough_insn,
insn_at_target, 0, 0,
own_fallthrough, own_target,
- slots_to_fill, &slots_filled);
+ slots_to_fill, &slots_filled,
+ delay_list);
}
}
else
@@ -3930,14 +3938,16 @@ fill_eager_delay_slots (first)
= fill_slots_from_thread (insn, condition, fallthrough_insn,
insn_at_target, 0, 0,
own_fallthrough, own_target,
- slots_to_fill, &slots_filled);
+ slots_to_fill, &slots_filled,
+ delay_list);
if (delay_list == 0)
delay_list
= fill_slots_from_thread (insn, condition, insn_at_target,
next_active_insn (insn), 0, 1,
own_target, own_fallthrough,
- slots_to_fill, &slots_filled);
+ slots_to_fill, &slots_filled,
+ delay_list);
}
if (delay_list)
@@ -4492,8 +4502,7 @@ dbr_schedule (first, file)
else
SET_HARD_REG_BIT (end_of_function_needs.regs, STACK_POINTER_REGNUM);
- if (current_function_return_rtx != 0
- && GET_CODE (current_function_return_rtx) == REG)
+ if (current_function_return_rtx != 0)
mark_referenced_resources (current_function_return_rtx,
&end_of_function_needs, 1);
diff --git a/gcc/rtl.c b/gcc/rtl.c
index a391c3857d8..b5602437c8c 100644
--- a/gcc/rtl.c
+++ b/gcc/rtl.c
@@ -183,6 +183,9 @@ char *reg_note_name[] = { "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_WAS_0",
"REG_DEP_ANTI", "REG_DEP_OUTPUT", "REG_BR_PROB",
"REG_EXEC_COUNT" };
+static void dump_and_abort PROTO((int, int, FILE *));
+static void read_name PROTO((char *, FILE *));
+
/* Allocate an rtx vector of N elements.
Store the length, and initialize all elements to zero. */
@@ -283,6 +286,7 @@ copy_rtx (orig)
case CC0:
case SCRATCH:
/* SCRATCH must be shared because they represent distinct values. */
+ case ADDRESSOF:
return orig;
case CONST:
@@ -298,6 +302,9 @@ copy_rtx (orig)
the constant address may need to be reloaded. If the mem is shared,
then reloading one copy of this mem will cause all copies to appear
to have been reloaded. */
+
+ default:
+ break;
}
copy = rtx_alloc (code);
@@ -384,6 +391,8 @@ copy_most_rtx (orig, may_share)
case PC:
case CC0:
return orig;
+ default:
+ break;
}
copy = rtx_alloc (code);
@@ -842,14 +851,3 @@ init_rtl ()
}
}
}
-
-#ifdef memset
-gcc_memset (dest, value, len)
- char *dest;
- int value;
- int len;
-{
- while (len-- > 0)
- *dest++ = value;
-}
-#endif /* memset */
diff --git a/gcc/rtl.def b/gcc/rtl.def
index ac51b6d50f7..12c9c3b9be9 100644
--- a/gcc/rtl.def
+++ b/gcc/rtl.def
@@ -1,7 +1,7 @@
/* This file contains the definitions and documentation for the
Register Transfer Expressions (rtx's) that make up the
Register Transfer Language (rtl) used in the Back End of the GNU compiler.
- Copyright (C) 1987, 1988, 1992, 1994, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 92, 94, 95, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -102,7 +102,7 @@ DEF_RTL_EXPR(INSN_LIST, "insn_list", "ue", 'x')
'=' to indicate the operand is only written to.
'+' to indicate the operand is both read and written to.
- Each character in the string represents an allocatable class for an operand.
+ Each character in the string represents an allocable class for an operand.
'g' indicates the operand can be any valid class.
'i' indicates the operand can be immediate (in the instruction) data.
'r' indicates the operand can be in a register.
@@ -257,7 +257,7 @@ DEF_RTL_EXPR(DEFINE_DELAY, "define_delay", "eE", 'x')
unit with no issue constraints. If only one operation can
be executed a time and the unit is busy for the entire time,
the 3rd operand should be specified as 1, the 6th operand
- sould be specified as 0, and the 7th operand should not
+ should be specified as 0, and the 7th operand should not
be specified.
If this operand is specified, it is a list of attribute
@@ -385,7 +385,7 @@ DEF_RTL_EXPR(NOTE, "note", "iuusn", 'x')
it contains helps to build the mapping function between the rtx's of
the function to be inlined and the current function being expanded. */
-DEF_RTL_EXPR(INLINE_HEADER, "inline_header", "iuuuiiiiiieeiiEeEss", 'x')
+DEF_RTL_EXPR(INLINE_HEADER, "inline_header", "iuuuiiiiiieeiiEeEsse", 'x')
/* ----------------------------------------------------------------------
Top level constituents of INSN, JUMP_INSN and CALL_INSN.
@@ -571,6 +571,15 @@ DEF_RTL_EXPR(SYMBOL_REF, "symbol_ref", "s", 'o')
pretend to be looking at the entire value and comparing it. */
DEF_RTL_EXPR(CC0, "cc0", "", 'o')
+/* Reference to the address of a register. Removed by purge_addressof after
+ CSE has elided as many as possible.
+ 1st operand: the register we may need the address of.
+ 2nd operand: the original pseudo regno we were generated for.
+ 3rd operand: the decl for the object in the register, for
+ put_reg_in_stack. */
+
+DEF_RTL_EXPR(ADDRESSOF, "addressof", "ei0", 'o')
+
/* =====================================================================
A QUEUED expression really points to a member of the queue of instructions
to be output later for postincrement/postdecrement.
diff --git a/gcc/rtl.h b/gcc/rtl.h
index d27b4e5b833..f5078a52f13 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -1,5 +1,5 @@
/* Register Transfer Language (RTL) definitions for GNU C-Compiler
- Copyright (C) 1987, 91-96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 91-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -176,14 +176,14 @@ typedef struct rtx_def
PARALLEL expressions. */
typedef struct rtvec_def{
- unsigned num_elem; /* number of elements */
+ int num_elem; /* number of elements */
rtunion elem[1];
} *rtvec;
#define NULL_RTVEC (rtvec) 0
#define GET_NUM_ELEM(RTVEC) ((RTVEC)->num_elem)
-#define PUT_NUM_ELEM(RTVEC, NUM) ((RTVEC)->num_elem = (unsigned) NUM)
+#define PUT_NUM_ELEM(RTVEC, NUM) ((RTVEC)->num_elem = (NUM))
#define RTVEC_ELT(RTVEC, I) ((RTVEC)->elem[(I)].rtx)
@@ -437,11 +437,18 @@ extern char *note_insn_name[];
to hold these things. That happens to be true. */
/* For static or external objects. */
-#define BYTECODE_LABEL(X) (XEXP ((X), 0))
+#define BYTECODE_LABEL(X) (XSTR ((X), 0))
/* For goto labels inside bytecode functions. */
#define BYTECODE_BC_LABEL(X) (*(struct bc_label **) &XEXP ((X), 1))
+/* The original regno this ADDRESSOF was built for. */
+#define ADDRESSOF_REGNO(RTX) ((RTX)->fld[1].rtint)
+
+/* The variable in the register we took the address of. */
+#define ADDRESSOF_DECL(X) ((tree) XEXP ((X), 2))
+#define SET_ADDRESSOF_DECL(X, T) (XEXP ((X), 2) = (rtx) (T))
+
/* In jump.c, each JUMP_INSN can point to a label that it can jump to,
so that if the JUMP_INSN is deleted, the label's LABEL_NUSES can
be decremented and possibly the label can be deleted. */
@@ -606,6 +613,7 @@ extern char *note_insn_name[];
#define INLINE_REGNO_REG_RTX(RTX) ((RTX)->fld[16].rtvec)
#define INLINE_REGNO_POINTER_FLAG(RTX) ((RTX)->fld[17].rtstr)
#define INLINE_REGNO_POINTER_ALIGN(RTX) ((RTX)->fld[18].rtstr)
+#define PARMREG_STACK_LOC(RTX) ((RTX)->fld[19].rtvec)
/* In FUNCTION_FLAGS we save some variables computed when emitting the code
for the function and which must be `or'ed into the current flag values when
@@ -668,7 +676,7 @@ extern rtx gen_rtx PVPROTO((enum rtx_code,
enum machine_mode, ...));
extern rtvec gen_rtvec PVPROTO((int, ...));
-extern rtx read_rtx STDIO_PROTO((FILE *));
+extern rtx read_rtx PROTO((FILE *));
#if 0
/* At present, don't prototype xrealloc, since all of the callers don't
@@ -683,21 +691,14 @@ extern char *xrealloc ();
extern char *oballoc PROTO((int));
extern char *permalloc PROTO((int));
+#ifdef NEED_DECLARATION_FREE
extern void free PROTO((void *));
+#endif
extern rtx rtx_alloc PROTO((RTX_CODE));
extern rtvec rtvec_alloc PROTO((int));
-extern rtx find_reg_note PROTO((rtx, enum reg_note, rtx));
-extern rtx find_regno_note PROTO((rtx, enum reg_note, int));
-extern int find_reg_fusage PROTO((rtx, enum rtx_code, rtx));
-extern int find_regno_fusage PROTO((rtx, enum rtx_code, int));
-extern HOST_WIDE_INT get_integer_term PROTO((rtx));
-extern rtx get_related_value PROTO((rtx));
-extern rtx single_set PROTO((rtx));
-extern rtx find_last_value PROTO((rtx, rtx *, rtx));
extern rtx copy_rtx PROTO((rtx));
extern rtx copy_rtx_if_shared PROTO((rtx));
extern rtx copy_most_rtx PROTO((rtx, rtx));
-extern rtx replace_rtx PROTO((rtx, rtx, rtx));
extern rtvec gen_rtvec_v PROTO((int, rtx *));
extern rtvec gen_rtvec_vv PROTO((int, rtunion *));
extern rtx gen_reg_rtx PROTO((enum machine_mode));
@@ -705,7 +706,7 @@ extern rtx gen_label_rtx PROTO((void));
extern rtx gen_inline_header_rtx PROTO((rtx, rtx, int, int, int, int,
int, int, rtx, rtx, int, int,
rtvec, rtx,
- rtvec, char *, char *));
+ rtvec, char *, char *, rtvec));
extern rtx gen_lowpart_common PROTO((enum machine_mode, rtx));
extern rtx gen_lowpart PROTO((enum machine_mode, rtx));
extern rtx gen_lowpart_if_possible PROTO((enum machine_mode, rtx));
@@ -732,10 +733,12 @@ extern rtx get_pool_constant PROTO((rtx));
extern enum machine_mode get_pool_mode PROTO((rtx));
extern int get_pool_offset PROTO((rtx));
extern rtx simplify_subtraction PROTO((rtx));
-extern rtx assign_stack_local PROTO((enum machine_mode, int, int));
-extern rtx assign_stack_temp PROTO((enum machine_mode, int, int));
-extern rtx assign_temp PROTO((union tree_node *, int,
- int, int));
+extern rtx assign_stack_local PROTO((enum machine_mode,
+ HOST_WIDE_INT, int));
+extern rtx assign_stack_temp PROTO((enum machine_mode,
+ HOST_WIDE_INT, int));
+extern rtx assign_temp PROTO((union tree_node *,
+ int, int, int));
extern rtx protect_from_queue PROTO((rtx, int));
extern void emit_queue PROTO((void));
extern rtx emit_move_insn PROTO((rtx, rtx));
@@ -774,7 +777,6 @@ extern rtx prev_label PROTO((rtx));
extern rtx next_label PROTO((rtx));
extern rtx next_cc0_user PROTO((rtx));
extern rtx prev_cc0_setter PROTO((rtx));
-extern rtx reg_set_last PROTO((rtx, rtx));
extern rtx next_nondeleted_insn PROTO((rtx));
extern enum rtx_code reverse_condition PROTO((enum rtx_code));
extern enum rtx_code swap_condition PROTO((enum rtx_code));
@@ -800,10 +802,49 @@ extern rtx gen_jump PROTO((rtx));
extern rtx gen_beq PROTO((rtx));
extern rtx gen_bge PROTO((rtx));
extern rtx gen_ble PROTO((rtx));
+extern rtx gen_mem_addressof PROTO((rtx, union tree_node *));
extern rtx eliminate_constant_term PROTO((rtx, rtx *));
extern rtx expand_complex_abs PROTO((enum machine_mode, rtx, rtx, int));
extern enum machine_mode choose_hard_reg_mode PROTO((int, int));
+/* Functions in rtlanal.c */
+
+extern int rtx_unstable_p PROTO((rtx));
+extern int rtx_varies_p PROTO((rtx));
+extern int rtx_addr_varies_p PROTO((rtx));
+extern HOST_WIDE_INT get_integer_term PROTO((rtx));
+extern rtx get_related_value PROTO((rtx));
+extern int reg_mentioned_p PROTO((rtx, rtx));
+extern int reg_referenced_p PROTO((rtx, rtx));
+extern int reg_used_between_p PROTO((rtx, rtx, rtx));
+extern int reg_referenced_between_p PROTO((rtx, rtx, rtx));
+extern int reg_set_between_p PROTO((rtx, rtx, rtx));
+extern int modified_between_p PROTO((rtx, rtx, rtx));
+extern int no_labels_between_p PROTO((rtx, rtx));
+extern int modified_in_p PROTO((rtx, rtx));
+extern int reg_set_p PROTO((rtx, rtx));
+extern rtx single_set PROTO((rtx));
+extern rtx find_last_value PROTO((rtx, rtx *, rtx));
+extern int refers_to_regno_p PROTO((int, int, rtx, rtx *));
+extern int reg_overlap_mentioned_p PROTO((rtx, rtx));
+extern void note_stores PROTO((rtx, void (*)()));
+extern rtx reg_set_last PROTO((rtx, rtx));
+extern int rtx_equal_p PROTO((rtx, rtx));
+extern int dead_or_set_p PROTO((rtx, rtx));
+extern int dead_or_set_regno_p PROTO((rtx, int));
+extern rtx find_reg_note PROTO((rtx, enum reg_note, rtx));
+extern rtx find_regno_note PROTO((rtx, enum reg_note, int));
+extern int find_reg_fusage PROTO((rtx, enum rtx_code, rtx));
+extern int find_regno_fusage PROTO((rtx, enum rtx_code, int));
+extern void remove_note PROTO((rtx, rtx));
+extern int side_effects_p PROTO((rtx));
+extern int volatile_refs_p PROTO((rtx));
+extern int volatile_insn_p PROTO((rtx));
+extern int may_trap_p PROTO((rtx));
+extern int inequality_comparison_p PROTO((rtx));
+extern rtx replace_rtx PROTO((rtx, rtx, rtx));
+extern rtx replace_regs PROTO((rtx, rtx *, int, int));
+
/* Maximum number of parallel sets and clobbers in any insn in this fn.
Always at least 3, since the combiner could put that many togetherm
and we want this to remain correct for all the remaining passes. */
@@ -817,7 +858,6 @@ extern enum reg_class reg_preferred_class PROTO((int));
extern enum reg_class reg_alternate_class PROTO((int));
extern rtx get_first_nonparm_insn PROTO((void));
-extern rtx replace_regs PROTO((rtx, rtx *, int, int));
/* Standard pieces of rtx, to be substituted directly into things. */
extern rtx pc_rtx;
@@ -959,3 +999,6 @@ extern char *regno_pointer_align;
know what `enum tree_code' means. */
extern int rtx_to_tree_code PROTO((enum rtx_code));
+
+extern int computed_jump_p PROTO((rtx));
+
diff --git a/gcc/rtl.texi b/gcc/rtl.texi
new file mode 100644
index 00000000000..f60ec74b5a0
--- /dev/null
+++ b/gcc/rtl.texi
@@ -0,0 +1,2850 @@
+@c Copyright (C) 1988, 89, 92, 94, 97, 1998 Free Software Foundation, Inc.
+@c This is part of the GCC manual.
+@c For copying conditions, see the file gcc.texi.
+
+@node RTL
+@chapter RTL Representation
+@cindex RTL representation
+@cindex representation of RTL
+@cindex Register Transfer Language (RTL)
+
+Most of the work of the compiler is done on an intermediate representation
+called register transfer language. In this language, the instructions to be
+output are described, pretty much one by one, in an algebraic form that
+describes what the instruction does.
+
+RTL is inspired by Lisp lists. It has both an internal form, made up of
+structures that point at other structures, and a textual form that is used
+in the machine description and in printed debugging dumps. The textual
+form uses nested parentheses to indicate the pointers in the internal form.
+
+@menu
+* RTL Objects:: Expressions vs vectors vs strings vs integers.
+* Accessors:: Macros to access expression operands or vector elts.
+* Flags:: Other flags in an RTL expression.
+* Machine Modes:: Describing the size and format of a datum.
+* Constants:: Expressions with constant values.
+* Regs and Memory:: Expressions representing register contents or memory.
+* Arithmetic:: Expressions representing arithmetic on other expressions.
+* Comparisons:: Expressions representing comparison of expressions.
+* Bit Fields:: Expressions representing bitfields in memory or reg.
+* Conversions:: Extending, truncating, floating or fixing.
+* RTL Declarations:: Declaring volatility, constancy, etc.
+* Side Effects:: Expressions for storing in registers, etc.
+* Incdec:: Embedded side-effects for autoincrement addressing.
+* Assembler:: Representing @code{asm} with operands.
+* Insns:: Expression types for entire insns.
+* Calls:: RTL representation of function call insns.
+* Sharing:: Some expressions are unique; others *must* be copied.
+* Reading RTL:: Reading textual RTL from a file.
+@end menu
+
+@node RTL Objects, Accessors, RTL, RTL
+@section RTL Object Types
+@cindex RTL object types
+
+@cindex RTL integers
+@cindex RTL strings
+@cindex RTL vectors
+@cindex RTL expression
+@cindex RTX (See RTL)
+RTL uses five kinds of objects: expressions, integers, wide integers,
+strings and vectors. Expressions are the most important ones. An RTL
+expression (``RTX'', for short) is a C structure, but it is usually
+referred to with a pointer; a type that is given the typedef name
+@code{rtx}.
+
+An integer is simply an @code{int}; their written form uses decimal digits.
+A wide integer is an integral object whose type is @code{HOST_WIDE_INT}
+(@pxref{Config}); their written form uses decimal digits.
+
+A string is a sequence of characters. In core it is represented as a
+@code{char *} in usual C fashion, and it is written in C syntax as well.
+However, strings in RTL may never be null. If you write an empty string in
+a machine description, it is represented in core as a null pointer rather
+than as a pointer to a null character. In certain contexts, these null
+pointers instead of strings are valid. Within RTL code, strings are most
+commonly found inside @code{symbol_ref} expressions, but they appear in
+other contexts in the RTL expressions that make up machine descriptions.
+
+A vector contains an arbitrary number of pointers to expressions. The
+number of elements in the vector is explicitly present in the vector.
+The written form of a vector consists of square brackets
+(@samp{[@dots{}]}) surrounding the elements, in sequence and with
+whitespace separating them. Vectors of length zero are not created;
+null pointers are used instead.
+
+@cindex expression codes
+@cindex codes, RTL expression
+@findex GET_CODE
+@findex PUT_CODE
+Expressions are classified by @dfn{expression codes} (also called RTX
+codes). The expression code is a name defined in @file{rtl.def}, which is
+also (in upper case) a C enumeration constant. The possible expression
+codes and their meanings are machine-independent. The code of an RTX can
+be extracted with the macro @code{GET_CODE (@var{x})} and altered with
+@code{PUT_CODE (@var{x}, @var{newcode})}.
+
+The expression code determines how many operands the expression contains,
+and what kinds of objects they are. In RTL, unlike Lisp, you cannot tell
+by looking at an operand what kind of object it is. Instead, you must know
+from its context---from the expression code of the containing expression.
+For example, in an expression of code @code{subreg}, the first operand is
+to be regarded as an expression and the second operand as an integer. In
+an expression of code @code{plus}, there are two operands, both of which
+are to be regarded as expressions. In a @code{symbol_ref} expression,
+there is one operand, which is to be regarded as a string.
+
+Expressions are written as parentheses containing the name of the
+expression type, its flags and machine mode if any, and then the operands
+of the expression (separated by spaces).
+
+Expression code names in the @samp{md} file are written in lower case,
+but when they appear in C code they are written in upper case. In this
+manual, they are shown as follows: @code{const_int}.
+
+@cindex (nil)
+@cindex nil
+In a few contexts a null pointer is valid where an expression is normally
+wanted. The written form of this is @code{(nil)}.
+
+@node Accessors, Flags, RTL Objects, RTL
+@section Access to Operands
+@cindex accessors
+@cindex access to operands
+@cindex operand access
+
+@cindex RTL format
+For each expression type @file{rtl.def} specifies the number of
+contained objects and their kinds, with four possibilities: @samp{e} for
+expression (actually a pointer to an expression), @samp{i} for integer,
+@samp{w} for wide integer, @samp{s} for string, and @samp{E} for vector
+of expressions. The sequence of letters for an expression code is
+called its @dfn{format}. Thus, the format of @code{subreg} is
+@samp{ei}.@refill
+
+@cindex RTL format characters
+A few other format characters are used occasionally:
+
+@table @code
+@item u
+@samp{u} is equivalent to @samp{e} except that it is printed differently
+in debugging dumps. It is used for pointers to insns.
+
+@item n
+@samp{n} is equivalent to @samp{i} except that it is printed differently
+in debugging dumps. It is used for the line number or code number of a
+@code{note} insn.
+
+@item S
+@samp{S} indicates a string which is optional. In the RTL objects in
+core, @samp{S} is equivalent to @samp{s}, but when the object is read,
+from an @samp{md} file, the string value of this operand may be omitted.
+An omitted string is taken to be the null string.
+
+@item V
+@samp{V} indicates a vector which is optional. In the RTL objects in
+core, @samp{V} is equivalent to @samp{E}, but when the object is read
+from an @samp{md} file, the vector value of this operand may be omitted.
+An omitted vector is effectively the same as a vector of no elements.
+
+@item 0
+@samp{0} means a slot whose contents do not fit any normal category.
+@samp{0} slots are not printed at all in dumps, and are often used in
+special ways by small parts of the compiler.
+@end table
+
+There are macros to get the number of operands, the format, and the
+class of an expression code:
+
+@table @code
+@findex GET_RTX_LENGTH
+@item GET_RTX_LENGTH (@var{code})
+Number of operands of an RTX of code @var{code}.
+
+@findex GET_RTX_FORMAT
+@item GET_RTX_FORMAT (@var{code})
+The format of an RTX of code @var{code}, as a C string.
+
+@findex GET_RTX_CLASS
+@cindex classes of RTX codes
+@item GET_RTX_CLASS (@var{code})
+A single character representing the type of RTX operation that code
+@var{code} performs.
+
+The following classes are defined:
+
+@table @code
+@item o
+An RTX code that represents an actual object, such as @code{reg} or
+@code{mem}. @code{subreg} is not in this class.
+
+@item <
+An RTX code for a comparison. The codes in this class are
+@code{NE}, @code{EQ}, @code{LE}, @code{LT}, @code{GE}, @code{GT},
+@code{LEU}, @code{LTU}, @code{GEU}, @code{GTU}.@refill
+
+@item 1
+An RTX code for a unary arithmetic operation, such as @code{neg}.
+
+@item c
+An RTX code for a commutative binary operation, other than @code{NE}
+and @code{EQ} (which have class @samp{<}).
+
+@item 2
+An RTX code for a noncommutative binary operation, such as @code{MINUS}.
+
+@item b
+An RTX code for a bitfield operation, either @code{ZERO_EXTRACT} or
+@code{SIGN_EXTRACT}.
+
+@item 3
+An RTX code for other three input operations, such as @code{IF_THEN_ELSE}.
+
+@item i
+An RTX code for a machine insn (@code{INSN}, @code{JUMP_INSN}, and
+@code{CALL_INSN}).@refill
+
+@item m
+An RTX code for something that matches in insns, such as @code{MATCH_DUP}.
+
+@item x
+All other RTX codes.
+@end table
+@end table
+
+@findex XEXP
+@findex XINT
+@findex XWINT
+@findex XSTR
+Operands of expressions are accessed using the macros @code{XEXP},
+@code{XINT}, @code{XWINT} and @code{XSTR}. Each of these macros takes
+two arguments: an expression-pointer (RTX) and an operand number
+(counting from zero). Thus,@refill
+
+@example
+XEXP (@var{x}, 2)
+@end example
+
+@noindent
+accesses operand 2 of expression @var{x}, as an expression.
+
+@example
+XINT (@var{x}, 2)
+@end example
+
+@noindent
+accesses the same operand as an integer. @code{XSTR}, used in the same
+fashion, would access it as a string.
+
+Any operand can be accessed as an integer, as an expression or as a string.
+You must choose the correct method of access for the kind of value actually
+stored in the operand. You would do this based on the expression code of
+the containing expression. That is also how you would know how many
+operands there are.
+
+For example, if @var{x} is a @code{subreg} expression, you know that it has
+two operands which can be correctly accessed as @code{XEXP (@var{x}, 0)}
+and @code{XINT (@var{x}, 1)}. If you did @code{XINT (@var{x}, 0)}, you
+would get the address of the expression operand but cast as an integer;
+that might occasionally be useful, but it would be cleaner to write
+@code{(int) XEXP (@var{x}, 0)}. @code{XEXP (@var{x}, 1)} would also
+compile without error, and would return the second, integer operand cast as
+an expression pointer, which would probably result in a crash when
+accessed. Nothing stops you from writing @code{XEXP (@var{x}, 28)} either,
+but this will access memory past the end of the expression with
+unpredictable results.@refill
+
+Access to operands which are vectors is more complicated. You can use the
+macro @code{XVEC} to get the vector-pointer itself, or the macros
+@code{XVECEXP} and @code{XVECLEN} to access the elements and length of a
+vector.
+
+@table @code
+@findex XVEC
+@item XVEC (@var{exp}, @var{idx})
+Access the vector-pointer which is operand number @var{idx} in @var{exp}.
+
+@findex XVECLEN
+@item XVECLEN (@var{exp}, @var{idx})
+Access the length (number of elements) in the vector which is
+in operand number @var{idx} in @var{exp}. This value is an @code{int}.
+
+@findex XVECEXP
+@item XVECEXP (@var{exp}, @var{idx}, @var{eltnum})
+Access element number @var{eltnum} in the vector which is
+in operand number @var{idx} in @var{exp}. This value is an RTX.
+
+It is up to you to make sure that @var{eltnum} is not negative
+and is less than @code{XVECLEN (@var{exp}, @var{idx})}.
+@end table
+
+All the macros defined in this section expand into lvalues and therefore
+can be used to assign the operands, lengths and vector elements as well as
+to access them.
+
+@node Flags, Machine Modes, Accessors, RTL
+@section Flags in an RTL Expression
+@cindex flags in RTL expression
+
+RTL expressions contain several flags (one-bit bitfields) that are used
+in certain types of expression. Most often they are accessed with the
+following macros:
+
+@table @code
+@findex MEM_VOLATILE_P
+@cindex @code{mem} and @samp{/v}
+@cindex @code{volatil}, in @code{mem}
+@cindex @samp{/v} in RTL dump
+@item MEM_VOLATILE_P (@var{x})
+In @code{mem} expressions, nonzero for volatile memory references.
+Stored in the @code{volatil} field and printed as @samp{/v}.
+
+@findex MEM_IN_STRUCT_P
+@cindex @code{mem} and @samp{/s}
+@cindex @code{in_struct}, in @code{mem}
+@cindex @samp{/s} in RTL dump
+@item MEM_IN_STRUCT_P (@var{x})
+In @code{mem} expressions, nonzero for reference to an entire
+structure, union or array, or to a component of one. Zero for
+references to a scalar variable or through a pointer to a scalar.
+Stored in the @code{in_struct} field and printed as @samp{/s}.
+
+@findex REG_LOOP_TEST_P
+@cindex @code{reg} and @samp{/s}
+@cindex @code{in_struct}, in @code{reg}
+@item REG_LOOP_TEST_P
+In @code{reg} expressions, nonzero if this register's entire life is
+contained in the exit test code for some loop. Stored in the
+@code{in_struct} field and printed as @samp{/s}.
+
+@findex REG_USERVAR_P
+@cindex @code{reg} and @samp{/v}
+@cindex @code{volatil}, in @code{reg}
+@item REG_USERVAR_P (@var{x})
+In a @code{reg}, nonzero if it corresponds to a variable present in
+the user's source code. Zero for temporaries generated internally by
+the compiler. Stored in the @code{volatil} field and printed as
+@samp{/v}.
+
+@cindex @samp{/i} in RTL dump
+@findex REG_FUNCTION_VALUE_P
+@cindex @code{reg} and @samp{/i}
+@cindex @code{integrated}, in @code{reg}
+@item REG_FUNCTION_VALUE_P (@var{x})
+Nonzero in a @code{reg} if it is the place in which this function's
+value is going to be returned. (This happens only in a hard
+register.) Stored in the @code{integrated} field and printed as
+@samp{/i}.
+
+The same hard register may be used also for collecting the values of
+functions called by this one, but @code{REG_FUNCTION_VALUE_P} is zero
+in this kind of use.
+
+@findex SUBREG_PROMOTED_VAR_P
+@cindex @code{subreg} and @samp{/s}
+@cindex @code{in_struct}, in @code{subreg}
+@item SUBREG_PROMOTED_VAR_P
+Nonzero in a @code{subreg} if it was made when accessing an object that
+was promoted to a wider mode in accord with the @code{PROMOTED_MODE} machine
+description macro (@pxref{Storage Layout}). In this case, the mode of
+the @code{subreg} is the declared mode of the object and the mode of
+@code{SUBREG_REG} is the mode of the register that holds the object.
+Promoted variables are always either sign- or zero-extended to the wider
+mode on every assignment. Stored in the @code{in_struct} field and
+printed as @samp{/s}.
+
+@findex SUBREG_PROMOTED_UNSIGNED_P
+@cindex @code{subreg} and @samp{/u}
+@cindex @code{unchanging}, in @code{subreg}
+@item SUBREG_PROMOTED_UNSIGNED_P
+Nonzero in a @code{subreg} that has @code{SUBREG_PROMOTED_VAR_P} nonzero
+if the object being referenced is kept zero-extended and zero if it
+is kept sign-extended. Stored in the @code{unchanging} field and
+printed as @samp{/u}.
+
+@findex RTX_UNCHANGING_P
+@cindex @code{reg} and @samp{/u}
+@cindex @code{mem} and @samp{/u}
+@cindex @code{unchanging}, in @code{reg} and @code{mem}
+@cindex @samp{/u} in RTL dump
+@item RTX_UNCHANGING_P (@var{x})
+Nonzero in a @code{reg} or @code{mem} if the value is not changed.
+(This flag is not set for memory references via pointers to constants.
+Such pointers only guarantee that the object will not be changed
+explicitly by the current function. The object might be changed by
+other functions or by aliasing.) Stored in the
+@code{unchanging} field and printed as @samp{/u}.
+
+@findex RTX_INTEGRATED_P
+@cindex @code{integrated}, in @code{insn}
+@item RTX_INTEGRATED_P (@var{insn})
+Nonzero in an insn if it resulted from an in-line function call.
+Stored in the @code{integrated} field and printed as @samp{/i}. This
+may be deleted; nothing currently depends on it.
+
+@findex SYMBOL_REF_USED
+@cindex @code{used}, in @code{symbol_ref}
+@item SYMBOL_REF_USED (@var{x})
+In a @code{symbol_ref}, indicates that @var{x} has been used. This is
+normally only used to ensure that @var{x} is only declared external
+once. Stored in the @code{used} field.
+
+@findex SYMBOL_REF_FLAG
+@cindex @code{symbol_ref} and @samp{/v}
+@cindex @code{volatil}, in @code{symbol_ref}
+@item SYMBOL_REF_FLAG (@var{x})
+In a @code{symbol_ref}, this is used as a flag for machine-specific purposes.
+Stored in the @code{volatil} field and printed as @samp{/v}.
+
+@findex LABEL_OUTSIDE_LOOP_P
+@cindex @code{label_ref} and @samp{/s}
+@cindex @code{in_struct}, in @code{label_ref}
+@item LABEL_OUTSIDE_LOOP_P
+In @code{label_ref} expressions, nonzero if this is a reference to a
+label that is outside the innermost loop containing the reference to the
+label. Stored in the @code{in_struct} field and printed as @samp{/s}.
+
+@findex INSN_DELETED_P
+@cindex @code{volatil}, in @code{insn}
+@item INSN_DELETED_P (@var{insn})
+In an insn, nonzero if the insn has been deleted. Stored in the
+@code{volatil} field and printed as @samp{/v}.
+
+@findex INSN_ANNULLED_BRANCH_P
+@cindex @code{insn} and @samp{/u}
+@cindex @code{unchanging}, in @code{insn}
+@item INSN_ANNULLED_BRANCH_P (@var{insn})
+In an @code{insn} in the delay slot of a branch insn, indicates that an
+annulling branch should be used. See the discussion under
+@code{sequence} below. Stored in the @code{unchanging} field and printed
+as @samp{/u}.
+
+@findex INSN_FROM_TARGET_P
+@cindex @code{insn} and @samp{/s}
+@cindex @code{in_struct}, in @code{insn}
+@cindex @samp{/s} in RTL dump
+@item INSN_FROM_TARGET_P (@var{insn})
+In an @code{insn} in a delay slot of a branch, indicates that the insn
+is from the target of the branch. If the branch insn has
+@code{INSN_ANNULLED_BRANCH_P} set, this insn will only be executed if
+the branch is taken. For annulled branches with
+@code{INSN_FROM_TARGET_P} clear, the insn will be executed only if the
+branch is not taken. When @code{INSN_ANNULLED_BRANCH_P} is not set,
+this insn will always be executed. Stored in the @code{in_struct}
+field and printed as @samp{/s}.
+
+@findex CONSTANT_POOL_ADDRESS_P
+@cindex @code{symbol_ref} and @samp{/u}
+@cindex @code{unchanging}, in @code{symbol_ref}
+@item CONSTANT_POOL_ADDRESS_P (@var{x})
+Nonzero in a @code{symbol_ref} if it refers to part of the current
+function's ``constants pool''. These are addresses close to the
+beginning of the function, and GNU CC assumes they can be addressed
+directly (perhaps with the help of base registers). Stored in the
+@code{unchanging} field and printed as @samp{/u}.
+
+@findex CONST_CALL_P
+@cindex @code{call_insn} and @samp{/u}
+@cindex @code{unchanging}, in @code{call_insn}
+@item CONST_CALL_P (@var{x})
+In a @code{call_insn}, indicates that the insn represents a call to a const
+function. Stored in the @code{unchanging} field and printed as @samp{/u}.
+
+@findex LABEL_PRESERVE_P
+@cindex @code{code_label} and @samp{/i}
+@cindex @code{in_struct}, in @code{code_label}
+@item LABEL_PRESERVE_P (@var{x})
+In a @code{code_label}, indicates that the label can never be deleted.
+Labels referenced by a non-local goto will have this bit set. Stored
+in the @code{in_struct} field and printed as @samp{/s}.
+
+@findex SCHED_GROUP_P
+@cindex @code{insn} and @samp{/i}
+@cindex @code{in_struct}, in @code{insn}
+@item SCHED_GROUP_P (@var{insn})
+During instruction scheduling, in an insn, indicates that the previous insn
+must be scheduled together with this insn. This is used to ensure that
+certain groups of instructions will not be split up by the instruction
+scheduling pass, for example, @code{use} insns before a @code{call_insn} may
+not be separated from the @code{call_insn}. Stored in the @code{in_struct}
+field and printed as @samp{/s}.
+@end table
+
+These are the fields which the above macros refer to:
+
+@table @code
+@findex used
+@item used
+Normally, this flag is used only momentarily, at the end of RTL
+generation for a function, to count the number of times an expression
+appears in insns. Expressions that appear more than once are copied,
+according to the rules for shared structure (@pxref{Sharing}).
+
+In a @code{symbol_ref}, it indicates that an external declaration for
+the symbol has already been written.
+
+In a @code{reg}, it is used by the leaf register renumbering code to ensure
+that each register is only renumbered once.
+
+@findex volatil
+@item volatil
+This flag is used in @code{mem}, @code{symbol_ref} and @code{reg}
+expressions and in insns. In RTL dump files, it is printed as
+@samp{/v}.
+
+@cindex volatile memory references
+In a @code{mem} expression, it is 1 if the memory reference is volatile.
+Volatile memory references may not be deleted, reordered or combined.
+
+In a @code{symbol_ref} expression, it is used for machine-specific
+purposes.
+
+In a @code{reg} expression, it is 1 if the value is a user-level variable.
+0 indicates an internal compiler temporary.
+
+In an insn, 1 means the insn has been deleted.
+
+@findex in_struct
+@item in_struct
+In @code{mem} expressions, it is 1 if the memory datum referred to is
+all or part of a structure or array; 0 if it is (or might be) a scalar
+variable. A reference through a C pointer has 0 because the pointer
+might point to a scalar variable. This information allows the compiler
+to determine something about possible cases of aliasing.
+
+In an insn in the delay slot of a branch, 1 means that this insn is from
+the target of the branch.
+
+During instruction scheduling, in an insn, 1 means that this insn must be
+scheduled as part of a group together with the previous insn.
+
+In @code{reg} expressions, it is 1 if the register has its entire life
+contained within the test expression of some loop.
+
+In @code{subreg} expressions, 1 means that the @code{subreg} is accessing
+an object that has had its mode promoted from a wider mode.
+
+In @code{label_ref} expressions, 1 means that the referenced label is
+outside the innermost loop containing the insn in which the @code{label_ref}
+was found.
+
+In @code{code_label} expressions, it is 1 if the label may never be deleted.
+This is used for labels which are the target of non-local gotos.
+
+In an RTL dump, this flag is represented as @samp{/s}.
+
+@findex unchanging
+@item unchanging
+In @code{reg} and @code{mem} expressions, 1 means
+that the value of the expression never changes.
+
+In @code{subreg} expressions, it is 1 if the @code{subreg} references an
+unsigned object whose mode has been promoted to a wider mode.
+
+In an insn, 1 means that this is an annulling branch.
+
+In a @code{symbol_ref} expression, 1 means that this symbol addresses
+something in the per-function constants pool.
+
+In a @code{call_insn}, 1 means that this instruction is a call to a
+const function.
+
+In an RTL dump, this flag is represented as @samp{/u}.
+
+@findex integrated
+@item integrated
+In some kinds of expressions, including insns, this flag means the
+rtl was produced by procedure integration.
+
+In a @code{reg} expression, this flag indicates the register
+containing the value to be returned by the current function. On
+machines that pass parameters in registers, the same register number
+may be used for parameters as well, but this flag is not set on such
+uses.
+@end table
+
+@node Machine Modes, Constants, Flags, RTL
+@section Machine Modes
+@cindex machine modes
+
+@findex enum machine_mode
+A machine mode describes a size of data object and the representation used
+for it. In the C code, machine modes are represented by an enumeration
+type, @code{enum machine_mode}, defined in @file{machmode.def}. Each RTL
+expression has room for a machine mode and so do certain kinds of tree
+expressions (declarations and types, to be precise).
+
+In debugging dumps and machine descriptions, the machine mode of an RTL
+expression is written after the expression code with a colon to separate
+them. The letters @samp{mode} which appear at the end of each machine mode
+name are omitted. For example, @code{(reg:SI 38)} is a @code{reg}
+expression with machine mode @code{SImode}. If the mode is
+@code{VOIDmode}, it is not written at all.
+
+Here is a table of machine modes. The term ``byte'' below refers to an
+object of @code{BITS_PER_UNIT} bits (@pxref{Storage Layout}).
+
+@table @code
+@findex QImode
+@item QImode
+``Quarter-Integer'' mode represents a single byte treated as an integer.
+
+@findex HImode
+@item HImode
+``Half-Integer'' mode represents a two-byte integer.
+
+@findex PSImode
+@item PSImode
+``Partial Single Integer'' mode represents an integer which occupies
+four bytes but which doesn't really use all four. On some machines,
+this is the right mode to use for pointers.
+
+@findex SImode
+@item SImode
+``Single Integer'' mode represents a four-byte integer.
+
+@findex PDImode
+@item PDImode
+``Partial Double Integer'' mode represents an integer which occupies
+eight bytes but which doesn't really use all eight. On some machines,
+this is the right mode to use for certain pointers.
+
+@findex DImode
+@item DImode
+``Double Integer'' mode represents an eight-byte integer.
+
+@findex TImode
+@item TImode
+``Tetra Integer'' (?) mode represents a sixteen-byte integer.
+
+@findex SFmode
+@item SFmode
+``Single Floating'' mode represents a single-precision (four byte) floating
+point number.
+
+@findex DFmode
+@item DFmode
+``Double Floating'' mode represents a double-precision (eight byte) floating
+point number.
+
+@findex XFmode
+@item XFmode
+``Extended Floating'' mode represents a triple-precision (twelve byte)
+floating point number. This mode is used for IEEE extended floating
+point. On some systems not all bits within these bytes will actually
+be used.
+
+@findex TFmode
+@item TFmode
+``Tetra Floating'' mode represents a quadruple-precision (sixteen byte)
+floating point number.
+
+@findex CCmode
+@item CCmode
+``Condition Code'' mode represents the value of a condition code, which
+is a machine-specific set of bits used to represent the result of a
+comparison operation. Other machine-specific modes may also be used for
+the condition code. These modes are not used on machines that use
+@code{cc0} (see @pxref{Condition Code}).
+
+@findex BLKmode
+@item BLKmode
+``Block'' mode represents values that are aggregates to which none of
+the other modes apply. In RTL, only memory references can have this mode,
+and only if they appear in string-move or vector instructions. On machines
+which have no such instructions, @code{BLKmode} will not appear in RTL.
+
+@findex VOIDmode
+@item VOIDmode
+Void mode means the absence of a mode or an unspecified mode.
+For example, RTL expressions of code @code{const_int} have mode
+@code{VOIDmode} because they can be taken to have whatever mode the context
+requires. In debugging dumps of RTL, @code{VOIDmode} is expressed by
+the absence of any mode.
+
+@findex SCmode
+@findex DCmode
+@findex XCmode
+@findex TCmode
+@item SCmode, DCmode, XCmode, TCmode
+These modes stand for a complex number represented as a pair of floating
+point values. The floating point values are in @code{SFmode},
+@code{DFmode}, @code{XFmode}, and @code{TFmode}, respectively.
+
+@findex CQImode
+@findex CHImode
+@findex CSImode
+@findex CDImode
+@findex CTImode
+@findex COImode
+@item CQImode, CHImode, CSImode, CDImode, CTImode, COImode
+These modes stand for a complex number represented as a pair of integer
+values. The integer values are in @code{QImode}, @code{HImode},
+@code{SImode}, @code{DImode}, @code{TImode}, and @code{OImode},
+respectively.
+@end table
+
+The machine description defines @code{Pmode} as a C macro which expands
+into the machine mode used for addresses. Normally this is the mode
+whose size is @code{BITS_PER_WORD}, @code{SImode} on 32-bit machines.
+
+The only modes which a machine description @i{must} support are
+@code{QImode}, and the modes corresponding to @code{BITS_PER_WORD},
+@code{FLOAT_TYPE_SIZE} and @code{DOUBLE_TYPE_SIZE}.
+The compiler will attempt to use @code{DImode} for 8-byte structures and
+unions, but this can be prevented by overriding the definition of
+@code{MAX_FIXED_MODE_SIZE}. Alternatively, you can have the compiler
+use @code{TImode} for 16-byte structures and unions. Likewise, you can
+arrange for the C type @code{short int} to avoid using @code{HImode}.
+
+@cindex mode classes
+Very few explicit references to machine modes remain in the compiler and
+these few references will soon be removed. Instead, the machine modes
+are divided into mode classes. These are represented by the enumeration
+type @code{enum mode_class} defined in @file{machmode.h}. The possible
+mode classes are:
+
+@table @code
+@findex MODE_INT
+@item MODE_INT
+Integer modes. By default these are @code{QImode}, @code{HImode},
+@code{SImode}, @code{DImode}, and @code{TImode}.
+
+@findex MODE_PARTIAL_INT
+@item MODE_PARTIAL_INT
+The ``partial integer'' modes, @code{PSImode} and @code{PDImode}.
+
+@findex MODE_FLOAT
+@item MODE_FLOAT
+floating point modes. By default these are @code{SFmode}, @code{DFmode},
+@code{XFmode} and @code{TFmode}.
+
+@findex MODE_COMPLEX_INT
+@item MODE_COMPLEX_INT
+Complex integer modes. (These are not currently implemented).
+
+@findex MODE_COMPLEX_FLOAT
+@item MODE_COMPLEX_FLOAT
+Complex floating point modes. By default these are @code{SCmode},
+@code{DCmode}, @code{XCmode}, and @code{TCmode}.
+
+@findex MODE_FUNCTION
+@item MODE_FUNCTION
+Algol or Pascal function variables including a static chain.
+(These are not currently implemented).
+
+@findex MODE_CC
+@item MODE_CC
+Modes representing condition code values. These are @code{CCmode} plus
+any modes listed in the @code{EXTRA_CC_MODES} macro. @xref{Jump Patterns},
+also see @ref{Condition Code}.
+
+@findex MODE_RANDOM
+@item MODE_RANDOM
+This is a catchall mode class for modes which don't fit into the above
+classes. Currently @code{VOIDmode} and @code{BLKmode} are in
+@code{MODE_RANDOM}.
+@end table
+
+Here are some C macros that relate to machine modes:
+
+@table @code
+@findex GET_MODE
+@item GET_MODE (@var{x})
+Returns the machine mode of the RTX @var{x}.
+
+@findex PUT_MODE
+@item PUT_MODE (@var{x}, @var{newmode})
+Alters the machine mode of the RTX @var{x} to be @var{newmode}.
+
+@findex NUM_MACHINE_MODES
+@item NUM_MACHINE_MODES
+Stands for the number of machine modes available on the target
+machine. This is one greater than the largest numeric value of any
+machine mode.
+
+@findex GET_MODE_NAME
+@item GET_MODE_NAME (@var{m})
+Returns the name of mode @var{m} as a string.
+
+@findex GET_MODE_CLASS
+@item GET_MODE_CLASS (@var{m})
+Returns the mode class of mode @var{m}.
+
+@findex GET_MODE_WIDER_MODE
+@item GET_MODE_WIDER_MODE (@var{m})
+Returns the next wider natural mode. For example, the expression
+@code{GET_MODE_WIDER_MODE (QImode)} returns @code{HImode}.
+
+@findex GET_MODE_SIZE
+@item GET_MODE_SIZE (@var{m})
+Returns the size in bytes of a datum of mode @var{m}.
+
+@findex GET_MODE_BITSIZE
+@item GET_MODE_BITSIZE (@var{m})
+Returns the size in bits of a datum of mode @var{m}.
+
+@findex GET_MODE_MASK
+@item GET_MODE_MASK (@var{m})
+Returns a bitmask containing 1 for all bits in a word that fit within
+mode @var{m}. This macro can only be used for modes whose bitsize is
+less than or equal to @code{HOST_BITS_PER_INT}.
+
+@findex GET_MODE_ALIGNMENT
+@item GET_MODE_ALIGNMENT (@var{m)})
+Return the required alignment, in bits, for an object of mode @var{m}.
+
+@findex GET_MODE_UNIT_SIZE
+@item GET_MODE_UNIT_SIZE (@var{m})
+Returns the size in bytes of the subunits of a datum of mode @var{m}.
+This is the same as @code{GET_MODE_SIZE} except in the case of complex
+modes. For them, the unit size is the size of the real or imaginary
+part.
+
+@findex GET_MODE_NUNITS
+@item GET_MODE_NUNITS (@var{m})
+Returns the number of units contained in a mode, i.e.,
+@code{GET_MODE_SIZE} divided by @code{GET_MODE_UNIT_SIZE}.
+
+@findex GET_CLASS_NARROWEST_MODE
+@item GET_CLASS_NARROWEST_MODE (@var{c})
+Returns the narrowest mode in mode class @var{c}.
+@end table
+
+@findex byte_mode
+@findex word_mode
+The global variables @code{byte_mode} and @code{word_mode} contain modes
+whose classes are @code{MODE_INT} and whose bitsizes are either
+@code{BITS_PER_UNIT} or @code{BITS_PER_WORD}, respectively. On 32-bit
+machines, these are @code{QImode} and @code{SImode}, respectively.
+
+@node Constants, Regs and Memory, Machine Modes, RTL
+@section Constant Expression Types
+@cindex RTL constants
+@cindex RTL constant expression types
+
+The simplest RTL expressions are those that represent constant values.
+
+@table @code
+@findex const_int
+@item (const_int @var{i})
+This type of expression represents the integer value @var{i}. @var{i}
+is customarily accessed with the macro @code{INTVAL} as in
+@code{INTVAL (@var{exp})}, which is equivalent to @code{XWINT (@var{exp}, 0)}.
+
+@findex const0_rtx
+@findex const1_rtx
+@findex const2_rtx
+@findex constm1_rtx
+There is only one expression object for the integer value zero; it is
+the value of the variable @code{const0_rtx}. Likewise, the only
+expression for integer value one is found in @code{const1_rtx}, the only
+expression for integer value two is found in @code{const2_rtx}, and the
+only expression for integer value negative one is found in
+@code{constm1_rtx}. Any attempt to create an expression of code
+@code{const_int} and value zero, one, two or negative one will return
+@code{const0_rtx}, @code{const1_rtx}, @code{const2_rtx} or
+@code{constm1_rtx} as appropriate.@refill
+
+@findex const_true_rtx
+Similarly, there is only one object for the integer whose value is
+@code{STORE_FLAG_VALUE}. It is found in @code{const_true_rtx}. If
+@code{STORE_FLAG_VALUE} is one, @code{const_true_rtx} and
+@code{const1_rtx} will point to the same object. If
+@code{STORE_FLAG_VALUE} is -1, @code{const_true_rtx} and
+@code{constm1_rtx} will point to the same object.@refill
+
+@findex const_double
+@item (const_double:@var{m} @var{addr} @var{i0} @var{i1} @dots{})
+Represents either a floating-point constant of mode @var{m} or an
+integer constant too large to fit into @code{HOST_BITS_PER_WIDE_INT}
+bits but small enough to fit within twice that number of bits (GNU CC
+does not provide a mechanism to represent even larger constants). In
+the latter case, @var{m} will be @code{VOIDmode}.
+
+@findex CONST_DOUBLE_MEM
+@findex CONST_DOUBLE_CHAIN
+@var{addr} is used to contain the @code{mem} expression that corresponds
+to the location in memory that at which the constant can be found. If
+it has not been allocated a memory location, but is on the chain of all
+@code{const_double} expressions in this compilation (maintained using an
+undisplayed field), @var{addr} contains @code{const0_rtx}. If it is not
+on the chain, @var{addr} contains @code{cc0_rtx}. @var{addr} is
+customarily accessed with the macro @code{CONST_DOUBLE_MEM} and the
+chain field via @code{CONST_DOUBLE_CHAIN}.@refill
+
+@findex CONST_DOUBLE_LOW
+If @var{m} is @code{VOIDmode}, the bits of the value are stored in
+@var{i0} and @var{i1}. @var{i0} is customarily accessed with the macro
+@code{CONST_DOUBLE_LOW} and @var{i1} with @code{CONST_DOUBLE_HIGH}.
+
+If the constant is floating point (regardless of its precision), then
+the number of integers used to store the value depends on the size of
+@code{REAL_VALUE_TYPE} (@pxref{Cross-compilation}). The integers
+represent a floating point number, but not precisely in the target
+machine's or host machine's floating point format. To convert them to
+the precise bit pattern used by the target machine, use the macro
+@code{REAL_VALUE_TO_TARGET_DOUBLE} and friends (@pxref{Data Output}).
+
+@findex CONST0_RTX
+@findex CONST1_RTX
+@findex CONST2_RTX
+The macro @code{CONST0_RTX (@var{mode})} refers to an expression with
+value 0 in mode @var{mode}. If mode @var{mode} is of mode class
+@code{MODE_INT}, it returns @code{const0_rtx}. Otherwise, it returns a
+@code{CONST_DOUBLE} expression in mode @var{mode}. Similarly, the macro
+@code{CONST1_RTX (@var{mode})} refers to an expression with value 1 in
+mode @var{mode} and similarly for @code{CONST2_RTX}.
+
+@findex const_string
+@item (const_string @var{str})
+Represents a constant string with value @var{str}. Currently this is
+used only for insn attributes (@pxref{Insn Attributes}) since constant
+strings in C are placed in memory.
+
+@findex symbol_ref
+@item (symbol_ref:@var{mode} @var{symbol})
+Represents the value of an assembler label for data. @var{symbol} is
+a string that describes the name of the assembler label. If it starts
+with a @samp{*}, the label is the rest of @var{symbol} not including
+the @samp{*}. Otherwise, the label is @var{symbol}, usually prefixed
+with @samp{_}.
+
+The @code{symbol_ref} contains a mode, which is usually @code{Pmode}.
+Usually that is the only mode for which a symbol is directly valid.
+
+@findex label_ref
+@item (label_ref @var{label})
+Represents the value of an assembler label for code. It contains one
+operand, an expression, which must be a @code{code_label} that appears
+in the instruction sequence to identify the place where the label
+should go.
+
+The reason for using a distinct expression type for code label
+references is so that jump optimization can distinguish them.
+
+@item (const:@var{m} @var{exp})
+Represents a constant that is the result of an assembly-time
+arithmetic computation. The operand, @var{exp}, is an expression that
+contains only constants (@code{const_int}, @code{symbol_ref} and
+@code{label_ref} expressions) combined with @code{plus} and
+@code{minus}. However, not all combinations are valid, since the
+assembler cannot do arbitrary arithmetic on relocatable symbols.
+
+@var{m} should be @code{Pmode}.
+
+@findex high
+@item (high:@var{m} @var{exp})
+Represents the high-order bits of @var{exp}, usually a
+@code{symbol_ref}. The number of bits is machine-dependent and is
+normally the number of bits specified in an instruction that initializes
+the high order bits of a register. It is used with @code{lo_sum} to
+represent the typical two-instruction sequence used in RISC machines to
+reference a global memory location.
+
+@var{m} should be @code{Pmode}.
+@end table
+
+@node Regs and Memory, Arithmetic, Constants, RTL
+@section Registers and Memory
+@cindex RTL register expressions
+@cindex RTL memory expressions
+
+Here are the RTL expression types for describing access to machine
+registers and to main memory.
+
+@table @code
+@findex reg
+@cindex hard registers
+@cindex pseudo registers
+@item (reg:@var{m} @var{n})
+For small values of the integer @var{n} (those that are less than
+@code{FIRST_PSEUDO_REGISTER}), this stands for a reference to machine
+register number @var{n}: a @dfn{hard register}. For larger values of
+@var{n}, it stands for a temporary value or @dfn{pseudo register}.
+The compiler's strategy is to generate code assuming an unlimited
+number of such pseudo registers, and later convert them into hard
+registers or into memory references.
+
+@var{m} is the machine mode of the reference. It is necessary because
+machines can generally refer to each register in more than one mode.
+For example, a register may contain a full word but there may be
+instructions to refer to it as a half word or as a single byte, as
+well as instructions to refer to it as a floating point number of
+various precisions.
+
+Even for a register that the machine can access in only one mode,
+the mode must always be specified.
+
+The symbol @code{FIRST_PSEUDO_REGISTER} is defined by the machine
+description, since the number of hard registers on the machine is an
+invariant characteristic of the machine. Note, however, that not
+all of the machine registers must be general registers. All the
+machine registers that can be used for storage of data are given
+hard register numbers, even those that can be used only in certain
+instructions or can hold only certain types of data.
+
+A hard register may be accessed in various modes throughout one
+function, but each pseudo register is given a natural mode
+and is accessed only in that mode. When it is necessary to describe
+an access to a pseudo register using a nonnatural mode, a @code{subreg}
+expression is used.
+
+A @code{reg} expression with a machine mode that specifies more than
+one word of data may actually stand for several consecutive registers.
+If in addition the register number specifies a hardware register, then
+it actually represents several consecutive hardware registers starting
+with the specified one.
+
+Each pseudo register number used in a function's RTL code is
+represented by a unique @code{reg} expression.
+
+@findex FIRST_VIRTUAL_REGISTER
+@findex LAST_VIRTUAL_REGISTER
+Some pseudo register numbers, those within the range of
+@code{FIRST_VIRTUAL_REGISTER} to @code{LAST_VIRTUAL_REGISTER} only
+appear during the RTL generation phase and are eliminated before the
+optimization phases. These represent locations in the stack frame that
+cannot be determined until RTL generation for the function has been
+completed. The following virtual register numbers are defined:
+
+@table @code
+@findex VIRTUAL_INCOMING_ARGS_REGNUM
+@item VIRTUAL_INCOMING_ARGS_REGNUM
+This points to the first word of the incoming arguments passed on the
+stack. Normally these arguments are placed there by the caller, but the
+callee may have pushed some arguments that were previously passed in
+registers.
+
+@cindex @code{FIRST_PARM_OFFSET} and virtual registers
+@cindex @code{ARG_POINTER_REGNUM} and virtual registers
+When RTL generation is complete, this virtual register is replaced
+by the sum of the register given by @code{ARG_POINTER_REGNUM} and the
+value of @code{FIRST_PARM_OFFSET}.
+
+@findex VIRTUAL_STACK_VARS_REGNUM
+@cindex @code{FRAME_GROWS_DOWNWARD} and virtual registers
+@item VIRTUAL_STACK_VARS_REGNUM
+If @code{FRAME_GROWS_DOWNWARD} is defined, this points to immediately
+above the first variable on the stack. Otherwise, it points to the
+first variable on the stack.
+
+@cindex @code{STARTING_FRAME_OFFSET} and virtual registers
+@cindex @code{FRAME_POINTER_REGNUM} and virtual registers
+@code{VIRTUAL_STACK_VARS_REGNUM} is replaced with the sum of the
+register given by @code{FRAME_POINTER_REGNUM} and the value
+@code{STARTING_FRAME_OFFSET}.
+
+@findex VIRTUAL_STACK_DYNAMIC_REGNUM
+@item VIRTUAL_STACK_DYNAMIC_REGNUM
+This points to the location of dynamically allocated memory on the stack
+immediately after the stack pointer has been adjusted by the amount of
+memory desired.
+
+@cindex @code{STACK_DYNAMIC_OFFSET} and virtual registers
+@cindex @code{STACK_POINTER_REGNUM} and virtual registers
+This virtual register is replaced by the sum of the register given by
+@code{STACK_POINTER_REGNUM} and the value @code{STACK_DYNAMIC_OFFSET}.
+
+@findex VIRTUAL_OUTGOING_ARGS_REGNUM
+@item VIRTUAL_OUTGOING_ARGS_REGNUM
+This points to the location in the stack at which outgoing arguments
+should be written when the stack is pre-pushed (arguments pushed using
+push insns should always use @code{STACK_POINTER_REGNUM}).
+
+@cindex @code{STACK_POINTER_OFFSET} and virtual registers
+This virtual register is replaced by the sum of the register given by
+@code{STACK_POINTER_REGNUM} and the value @code{STACK_POINTER_OFFSET}.
+@end table
+
+@findex subreg
+@item (subreg:@var{m} @var{reg} @var{wordnum})
+@code{subreg} expressions are used to refer to a register in a machine
+mode other than its natural one, or to refer to one register of
+a multi-word @code{reg} that actually refers to several registers.
+
+Each pseudo-register has a natural mode. If it is necessary to
+operate on it in a different mode---for example, to perform a fullword
+move instruction on a pseudo-register that contains a single
+byte---the pseudo-register must be enclosed in a @code{subreg}. In
+such a case, @var{wordnum} is zero.
+
+Usually @var{m} is at least as narrow as the mode of @var{reg}, in which
+case it is restricting consideration to only the bits of @var{reg} that
+are in @var{m}.
+
+Sometimes @var{m} is wider than the mode of @var{reg}. These
+@code{subreg} expressions are often called @dfn{paradoxical}. They are
+used in cases where we want to refer to an object in a wider mode but do
+not care what value the additional bits have. The reload pass ensures
+that paradoxical references are only made to hard registers.
+
+The other use of @code{subreg} is to extract the individual registers of
+a multi-register value. Machine modes such as @code{DImode} and
+@code{TImode} can indicate values longer than a word, values which
+usually require two or more consecutive registers. To access one of the
+registers, use a @code{subreg} with mode @code{SImode} and a
+@var{wordnum} that says which register.
+
+Storing in a non-paradoxical @code{subreg} has undefined results for
+bits belonging to the same word as the @code{subreg}. This laxity makes
+it easier to generate efficient code for such instructions. To
+represent an instruction that preserves all the bits outside of those in
+the @code{subreg}, use @code{strict_low_part} around the @code{subreg}.
+
+@cindex @code{WORDS_BIG_ENDIAN}, effect on @code{subreg}
+The compilation parameter @code{WORDS_BIG_ENDIAN}, if set to 1, says
+that word number zero is the most significant part; otherwise, it is
+the least significant part.
+
+@cindex combiner pass
+@cindex reload pass
+@cindex @code{subreg}, special reload handling
+Between the combiner pass and the reload pass, it is possible to have a
+paradoxical @code{subreg} which contains a @code{mem} instead of a
+@code{reg} as its first operand. After the reload pass, it is also
+possible to have a non-paradoxical @code{subreg} which contains a
+@code{mem}; this usually occurs when the @code{mem} is a stack slot
+which replaced a pseudo register.
+
+Note that it is not valid to access a @code{DFmode} value in @code{SFmode}
+using a @code{subreg}. On some machines the most significant part of a
+@code{DFmode} value does not have the same format as a single-precision
+floating value.
+
+It is also not valid to access a single word of a multi-word value in a
+hard register when less registers can hold the value than would be
+expected from its size. For example, some 32-bit machines have
+floating-point registers that can hold an entire @code{DFmode} value.
+If register 10 were such a register @code{(subreg:SI (reg:DF 10) 1)}
+would be invalid because there is no way to convert that reference to
+a single machine register. The reload pass prevents @code{subreg}
+expressions such as these from being formed.
+
+@findex SUBREG_REG
+@findex SUBREG_WORD
+The first operand of a @code{subreg} expression is customarily accessed
+with the @code{SUBREG_REG} macro and the second operand is customarily
+accessed with the @code{SUBREG_WORD} macro.
+
+@findex scratch
+@cindex scratch operands
+@item (scratch:@var{m})
+This represents a scratch register that will be required for the
+execution of a single instruction and not used subsequently. It is
+converted into a @code{reg} by either the local register allocator or
+the reload pass.
+
+@code{scratch} is usually present inside a @code{clobber} operation
+(@pxref{Side Effects}).
+
+@findex cc0
+@cindex condition code register
+@item (cc0)
+This refers to the machine's condition code register. It has no
+operands and may not have a machine mode. There are two ways to use it:
+
+@itemize @bullet
+@item
+To stand for a complete set of condition code flags. This is best on
+most machines, where each comparison sets the entire series of flags.
+
+With this technique, @code{(cc0)} may be validly used in only two
+contexts: as the destination of an assignment (in test and compare
+instructions) and in comparison operators comparing against zero
+(@code{const_int} with value zero; that is to say, @code{const0_rtx}).
+
+@item
+To stand for a single flag that is the result of a single condition.
+This is useful on machines that have only a single flag bit, and in
+which comparison instructions must specify the condition to test.
+
+With this technique, @code{(cc0)} may be validly used in only two
+contexts: as the destination of an assignment (in test and compare
+instructions) where the source is a comparison operator, and as the
+first operand of @code{if_then_else} (in a conditional branch).
+@end itemize
+
+@findex cc0_rtx
+There is only one expression object of code @code{cc0}; it is the
+value of the variable @code{cc0_rtx}. Any attempt to create an
+expression of code @code{cc0} will return @code{cc0_rtx}.
+
+Instructions can set the condition code implicitly. On many machines,
+nearly all instructions set the condition code based on the value that
+they compute or store. It is not necessary to record these actions
+explicitly in the RTL because the machine description includes a
+prescription for recognizing the instructions that do so (by means of
+the macro @code{NOTICE_UPDATE_CC}). @xref{Condition Code}. Only
+instructions whose sole purpose is to set the condition code, and
+instructions that use the condition code, need mention @code{(cc0)}.
+
+On some machines, the condition code register is given a register number
+and a @code{reg} is used instead of @code{(cc0)}. This is usually the
+preferable approach if only a small subset of instructions modify the
+condition code. Other machines store condition codes in general
+registers; in such cases a pseudo register should be used.
+
+Some machines, such as the Sparc and RS/6000, have two sets of
+arithmetic instructions, one that sets and one that does not set the
+condition code. This is best handled by normally generating the
+instruction that does not set the condition code, and making a pattern
+that both performs the arithmetic and sets the condition code register
+(which would not be @code{(cc0)} in this case). For examples, search
+for @samp{addcc} and @samp{andcc} in @file{sparc.md}.
+
+@findex pc
+@item (pc)
+@cindex program counter
+This represents the machine's program counter. It has no operands and
+may not have a machine mode. @code{(pc)} may be validly used only in
+certain specific contexts in jump instructions.
+
+@findex pc_rtx
+There is only one expression object of code @code{pc}; it is the value
+of the variable @code{pc_rtx}. Any attempt to create an expression of
+code @code{pc} will return @code{pc_rtx}.
+
+All instructions that do not jump alter the program counter implicitly
+by incrementing it, but there is no need to mention this in the RTL.
+
+@findex mem
+@item (mem:@var{m} @var{addr})
+This RTX represents a reference to main memory at an address
+represented by the expression @var{addr}. @var{m} specifies how large
+a unit of memory is accessed.
+
+@findex addressof
+@item (addressof:@var{m} @var{reg})
+This RTX represents a request for the address of register @var{reg}. Its mode
+is always @code{Pmode}. If there are any @code{addressof}
+expressions left in the function after CSE, @var{reg} is forced into the
+stack and the @code{addressof} expression is replaced with a @code{plus}
+expression for the address of its stack slot.
+@end table
+
+@node Arithmetic, Comparisons, Regs and Memory, RTL
+@section RTL Expressions for Arithmetic
+@cindex arithmetic, in RTL
+@cindex math, in RTL
+@cindex RTL expressions for arithmetic
+
+Unless otherwise specified, all the operands of arithmetic expressions
+must be valid for mode @var{m}. An operand is valid for mode @var{m}
+if it has mode @var{m}, or if it is a @code{const_int} or
+@code{const_double} and @var{m} is a mode of class @code{MODE_INT}.
+
+For commutative binary operations, constants should be placed in the
+second operand.
+
+@table @code
+@findex plus
+@cindex RTL addition
+@cindex RTL sum
+@item (plus:@var{m} @var{x} @var{y})
+Represents the sum of the values represented by @var{x} and @var{y}
+carried out in machine mode @var{m}.
+
+@findex lo_sum
+@item (lo_sum:@var{m} @var{x} @var{y})
+Like @code{plus}, except that it represents that sum of @var{x} and the
+low-order bits of @var{y}. The number of low order bits is
+machine-dependent but is normally the number of bits in a @code{Pmode}
+item minus the number of bits set by the @code{high} code
+(@pxref{Constants}).
+
+@var{m} should be @code{Pmode}.
+
+@findex minus
+@cindex RTL subtraction
+@cindex RTL difference
+@item (minus:@var{m} @var{x} @var{y})
+Like @code{plus} but represents subtraction.
+
+@findex compare
+@cindex RTL comparison
+@item (compare:@var{m} @var{x} @var{y})
+Represents the result of subtracting @var{y} from @var{x} for purposes
+of comparison. The result is computed without overflow, as if with
+infinite precision.
+
+Of course, machines can't really subtract with infinite precision.
+However, they can pretend to do so when only the sign of the
+result will be used, which is the case when the result is stored
+in the condition code. And that is the only way this kind of expression
+may validly be used: as a value to be stored in the condition codes.
+
+The mode @var{m} is not related to the modes of @var{x} and @var{y},
+but instead is the mode of the condition code value. If @code{(cc0)}
+is used, it is @code{VOIDmode}. Otherwise it is some mode in class
+@code{MODE_CC}, often @code{CCmode}. @xref{Condition Code}.
+
+Normally, @var{x} and @var{y} must have the same mode. Otherwise,
+@code{compare} is valid only if the mode of @var{x} is in class
+@code{MODE_INT} and @var{y} is a @code{const_int} or
+@code{const_double} with mode @code{VOIDmode}. The mode of @var{x}
+determines what mode the comparison is to be done in; thus it must not
+be @code{VOIDmode}.
+
+If one of the operands is a constant, it should be placed in the
+second operand and the comparison code adjusted as appropriate.
+
+A @code{compare} specifying two @code{VOIDmode} constants is not valid
+since there is no way to know in what mode the comparison is to be
+performed; the comparison must either be folded during the compilation
+or the first operand must be loaded into a register while its mode is
+still known.
+
+@findex neg
+@item (neg:@var{m} @var{x})
+Represents the negation (subtraction from zero) of the value represented
+by @var{x}, carried out in mode @var{m}.
+
+@findex mult
+@cindex multiplication
+@cindex product
+@item (mult:@var{m} @var{x} @var{y})
+Represents the signed product of the values represented by @var{x} and
+@var{y} carried out in machine mode @var{m}.
+
+Some machines support a multiplication that generates a product wider
+than the operands. Write the pattern for this as
+
+@example
+(mult:@var{m} (sign_extend:@var{m} @var{x}) (sign_extend:@var{m} @var{y}))
+@end example
+
+where @var{m} is wider than the modes of @var{x} and @var{y}, which need
+not be the same.
+
+Write patterns for unsigned widening multiplication similarly using
+@code{zero_extend}.
+
+@findex div
+@cindex division
+@cindex signed division
+@cindex quotient
+@item (div:@var{m} @var{x} @var{y})
+Represents the quotient in signed division of @var{x} by @var{y},
+carried out in machine mode @var{m}. If @var{m} is a floating point
+mode, it represents the exact quotient; otherwise, the integerized
+quotient.
+
+Some machines have division instructions in which the operands and
+quotient widths are not all the same; you should represent
+such instructions using @code{truncate} and @code{sign_extend} as in,
+
+@example
+(truncate:@var{m1} (div:@var{m2} @var{x} (sign_extend:@var{m2} @var{y})))
+@end example
+
+@findex udiv
+@cindex unsigned division
+@cindex division
+@item (udiv:@var{m} @var{x} @var{y})
+Like @code{div} but represents unsigned division.
+
+@findex mod
+@findex umod
+@cindex remainder
+@cindex division
+@item (mod:@var{m} @var{x} @var{y})
+@itemx (umod:@var{m} @var{x} @var{y})
+Like @code{div} and @code{udiv} but represent the remainder instead of
+the quotient.
+
+@findex smin
+@findex smax
+@cindex signed minimum
+@cindex signed maximum
+@item (smin:@var{m} @var{x} @var{y})
+@itemx (smax:@var{m} @var{x} @var{y})
+Represents the smaller (for @code{smin}) or larger (for @code{smax}) of
+@var{x} and @var{y}, interpreted as signed integers in mode @var{m}.
+
+@findex umin
+@findex umax
+@cindex unsigned minimum and maximum
+@item (umin:@var{m} @var{x} @var{y})
+@itemx (umax:@var{m} @var{x} @var{y})
+Like @code{smin} and @code{smax}, but the values are interpreted as unsigned
+integers.
+
+@findex not
+@cindex complement, bitwise
+@cindex bitwise complement
+@item (not:@var{m} @var{x})
+Represents the bitwise complement of the value represented by @var{x},
+carried out in mode @var{m}, which must be a fixed-point machine mode.
+
+@findex and
+@cindex logical-and, bitwise
+@cindex bitwise logical-and
+@item (and:@var{m} @var{x} @var{y})
+Represents the bitwise logical-and of the values represented by
+@var{x} and @var{y}, carried out in machine mode @var{m}, which must be
+a fixed-point machine mode.
+
+@findex ior
+@cindex inclusive-or, bitwise
+@cindex bitwise inclusive-or
+@item (ior:@var{m} @var{x} @var{y})
+Represents the bitwise inclusive-or of the values represented by @var{x}
+and @var{y}, carried out in machine mode @var{m}, which must be a
+fixed-point mode.
+
+@findex xor
+@cindex exclusive-or, bitwise
+@cindex bitwise exclusive-or
+@item (xor:@var{m} @var{x} @var{y})
+Represents the bitwise exclusive-or of the values represented by @var{x}
+and @var{y}, carried out in machine mode @var{m}, which must be a
+fixed-point mode.
+
+@findex ashift
+@cindex left shift
+@cindex shift
+@cindex arithmetic shift
+@item (ashift:@var{m} @var{x} @var{c})
+Represents the result of arithmetically shifting @var{x} left by @var{c}
+places. @var{x} have mode @var{m}, a fixed-point machine mode. @var{c}
+be a fixed-point mode or be a constant with mode @code{VOIDmode}; which
+mode is determined by the mode called for in the machine description
+entry for the left-shift instruction. For example, on the Vax, the mode
+of @var{c} is @code{QImode} regardless of @var{m}.
+
+@findex lshiftrt
+@cindex right shift
+@findex ashiftrt
+@item (lshiftrt:@var{m} @var{x} @var{c})
+@itemx (ashiftrt:@var{m} @var{x} @var{c})
+Like @code{ashift} but for right shift. Unlike the case for left shift,
+these two operations are distinct.
+
+@findex rotate
+@cindex rotate
+@cindex left rotate
+@findex rotatert
+@cindex right rotate
+@item (rotate:@var{m} @var{x} @var{c})
+@itemx (rotatert:@var{m} @var{x} @var{c})
+Similar but represent left and right rotate. If @var{c} is a constant,
+use @code{rotate}.
+
+@findex abs
+@cindex absolute value
+@item (abs:@var{m} @var{x})
+Represents the absolute value of @var{x}, computed in mode @var{m}.
+
+@findex sqrt
+@cindex square root
+@item (sqrt:@var{m} @var{x})
+Represents the square root of @var{x}, computed in mode @var{m}.
+Most often @var{m} will be a floating point mode.
+
+@findex ffs
+@item (ffs:@var{m} @var{x})
+Represents one plus the index of the least significant 1-bit in
+@var{x}, represented as an integer of mode @var{m}. (The value is
+zero if @var{x} is zero.) The mode of @var{x} need not be @var{m};
+depending on the target machine, various mode combinations may be
+valid.
+@end table
+
+@node Comparisons, Bit Fields, Arithmetic, RTL
+@section Comparison Operations
+@cindex RTL comparison operations
+
+Comparison operators test a relation on two operands and are considered
+to represent a machine-dependent nonzero value described by, but not
+necessarily equal to, @code{STORE_FLAG_VALUE} (@pxref{Misc})
+if the relation holds, or zero if it does not. The mode of the
+comparison operation is independent of the mode of the data being
+compared. If the comparison operation is being tested (e.g., the first
+operand of an @code{if_then_else}), the mode must be @code{VOIDmode}.
+If the comparison operation is producing data to be stored in some
+variable, the mode must be in class @code{MODE_INT}. All comparison
+operations producing data must use the same mode, which is
+machine-specific.
+
+@cindex condition codes
+There are two ways that comparison operations may be used. The
+comparison operators may be used to compare the condition codes
+@code{(cc0)} against zero, as in @code{(eq (cc0) (const_int 0))}. Such
+a construct actually refers to the result of the preceding instruction
+in which the condition codes were set. The instructing setting the
+condition code must be adjacent to the instruction using the condition
+code; only @code{note} insns may separate them.
+
+Alternatively, a comparison operation may directly compare two data
+objects. The mode of the comparison is determined by the operands; they
+must both be valid for a common machine mode. A comparison with both
+operands constant would be invalid as the machine mode could not be
+deduced from it, but such a comparison should never exist in RTL due to
+constant folding.
+
+In the example above, if @code{(cc0)} were last set to
+@code{(compare @var{x} @var{y})}, the comparison operation is
+identical to @code{(eq @var{x} @var{y})}. Usually only one style
+of comparisons is supported on a particular machine, but the combine
+pass will try to merge the operations to produce the @code{eq} shown
+in case it exists in the context of the particular insn involved.
+
+Inequality comparisons come in two flavors, signed and unsigned. Thus,
+there are distinct expression codes @code{gt} and @code{gtu} for signed and
+unsigned greater-than. These can produce different results for the same
+pair of integer values: for example, 1 is signed greater-than -1 but not
+unsigned greater-than, because -1 when regarded as unsigned is actually
+@code{0xffffffff} which is greater than 1.
+
+The signed comparisons are also used for floating point values. Floating
+point comparisons are distinguished by the machine modes of the operands.
+
+@table @code
+@findex eq
+@cindex equal
+@item (eq:@var{m} @var{x} @var{y})
+1 if the values represented by @var{x} and @var{y} are equal,
+otherwise 0.
+
+@findex ne
+@cindex not equal
+@item (ne:@var{m} @var{x} @var{y})
+1 if the values represented by @var{x} and @var{y} are not equal,
+otherwise 0.
+
+@findex gt
+@cindex greater than
+@item (gt:@var{m} @var{x} @var{y})
+1 if the @var{x} is greater than @var{y}. If they are fixed-point,
+the comparison is done in a signed sense.
+
+@findex gtu
+@cindex greater than
+@cindex unsigned greater than
+@item (gtu:@var{m} @var{x} @var{y})
+Like @code{gt} but does unsigned comparison, on fixed-point numbers only.
+
+@findex lt
+@cindex less than
+@findex ltu
+@cindex unsigned less than
+@item (lt:@var{m} @var{x} @var{y})
+@itemx (ltu:@var{m} @var{x} @var{y})
+Like @code{gt} and @code{gtu} but test for ``less than''.
+
+@findex ge
+@cindex greater than
+@findex geu
+@cindex unsigned greater than
+@item (ge:@var{m} @var{x} @var{y})
+@itemx (geu:@var{m} @var{x} @var{y})
+Like @code{gt} and @code{gtu} but test for ``greater than or equal''.
+
+@findex le
+@cindex less than or equal
+@findex leu
+@cindex unsigned less than
+@item (le:@var{m} @var{x} @var{y})
+@itemx (leu:@var{m} @var{x} @var{y})
+Like @code{gt} and @code{gtu} but test for ``less than or equal''.
+
+@findex if_then_else
+@item (if_then_else @var{cond} @var{then} @var{else})
+This is not a comparison operation but is listed here because it is
+always used in conjunction with a comparison operation. To be
+precise, @var{cond} is a comparison expression. This expression
+represents a choice, according to @var{cond}, between the value
+represented by @var{then} and the one represented by @var{else}.
+
+On most machines, @code{if_then_else} expressions are valid only
+to express conditional jumps.
+
+@findex cond
+@item (cond [@var{test1} @var{value1} @var{test2} @var{value2} @dots{}] @var{default})
+Similar to @code{if_then_else}, but more general. Each of @var{test1},
+@var{test2}, @dots{} is performed in turn. The result of this expression is
+the @var{value} corresponding to the first non-zero test, or @var{default} if
+none of the tests are non-zero expressions.
+
+This is currently not valid for instruction patterns and is supported only
+for insn attributes. @xref{Insn Attributes}.
+@end table
+
+@node Bit Fields, Conversions, Comparisons, RTL
+@section Bit Fields
+@cindex bit fields
+
+Special expression codes exist to represent bitfield instructions.
+These types of expressions are lvalues in RTL; they may appear
+on the left side of an assignment, indicating insertion of a value
+into the specified bit field.
+
+@table @code
+@findex sign_extract
+@cindex @code{BITS_BIG_ENDIAN}, effect on @code{sign_extract}
+@item (sign_extract:@var{m} @var{loc} @var{size} @var{pos})
+This represents a reference to a sign-extended bit field contained or
+starting in @var{loc} (a memory or register reference). The bit field
+is @var{size} bits wide and starts at bit @var{pos}. The compilation
+option @code{BITS_BIG_ENDIAN} says which end of the memory unit
+@var{pos} counts from.
+
+If @var{loc} is in memory, its mode must be a single-byte integer mode.
+If @var{loc} is in a register, the mode to use is specified by the
+operand of the @code{insv} or @code{extv} pattern
+(@pxref{Standard Names}) and is usually a full-word integer mode,
+which is the default if none is specified.
+
+The mode of @var{pos} is machine-specific and is also specified
+in the @code{insv} or @code{extv} pattern.
+
+The mode @var{m} is the same as the mode that would be used for
+@var{loc} if it were a register.
+
+@findex zero_extract
+@item (zero_extract:@var{m} @var{loc} @var{size} @var{pos})
+Like @code{sign_extract} but refers to an unsigned or zero-extended
+bit field. The same sequence of bits are extracted, but they
+are filled to an entire word with zeros instead of by sign-extension.
+@end table
+
+@node Conversions, RTL Declarations, Bit Fields, RTL
+@section Conversions
+@cindex conversions
+@cindex machine mode conversions
+
+All conversions between machine modes must be represented by
+explicit conversion operations. For example, an expression
+which is the sum of a byte and a full word cannot be written as
+@code{(plus:SI (reg:QI 34) (reg:SI 80))} because the @code{plus}
+operation requires two operands of the same machine mode.
+Therefore, the byte-sized operand is enclosed in a conversion
+operation, as in
+
+@example
+(plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
+@end example
+
+The conversion operation is not a mere placeholder, because there
+may be more than one way of converting from a given starting mode
+to the desired final mode. The conversion operation code says how
+to do it.
+
+For all conversion operations, @var{x} must not be @code{VOIDmode}
+because the mode in which to do the conversion would not be known.
+The conversion must either be done at compile-time or @var{x}
+must be placed into a register.
+
+@table @code
+@findex sign_extend
+@item (sign_extend:@var{m} @var{x})
+Represents the result of sign-extending the value @var{x}
+to machine mode @var{m}. @var{m} must be a fixed-point mode
+and @var{x} a fixed-point value of a mode narrower than @var{m}.
+
+@findex zero_extend
+@item (zero_extend:@var{m} @var{x})
+Represents the result of zero-extending the value @var{x}
+to machine mode @var{m}. @var{m} must be a fixed-point mode
+and @var{x} a fixed-point value of a mode narrower than @var{m}.
+
+@findex float_extend
+@item (float_extend:@var{m} @var{x})
+Represents the result of extending the value @var{x}
+to machine mode @var{m}. @var{m} must be a floating point mode
+and @var{x} a floating point value of a mode narrower than @var{m}.
+
+@findex truncate
+@item (truncate:@var{m} @var{x})
+Represents the result of truncating the value @var{x}
+to machine mode @var{m}. @var{m} must be a fixed-point mode
+and @var{x} a fixed-point value of a mode wider than @var{m}.
+
+@findex float_truncate
+@item (float_truncate:@var{m} @var{x})
+Represents the result of truncating the value @var{x}
+to machine mode @var{m}. @var{m} must be a floating point mode
+and @var{x} a floating point value of a mode wider than @var{m}.
+
+@findex float
+@item (float:@var{m} @var{x})
+Represents the result of converting fixed point value @var{x},
+regarded as signed, to floating point mode @var{m}.
+
+@findex unsigned_float
+@item (unsigned_float:@var{m} @var{x})
+Represents the result of converting fixed point value @var{x},
+regarded as unsigned, to floating point mode @var{m}.
+
+@findex fix
+@item (fix:@var{m} @var{x})
+When @var{m} is a fixed point mode, represents the result of
+converting floating point value @var{x} to mode @var{m}, regarded as
+signed. How rounding is done is not specified, so this operation may
+be used validly in compiling C code only for integer-valued operands.
+
+@findex unsigned_fix
+@item (unsigned_fix:@var{m} @var{x})
+Represents the result of converting floating point value @var{x} to
+fixed point mode @var{m}, regarded as unsigned. How rounding is done
+is not specified.
+
+@findex fix
+@item (fix:@var{m} @var{x})
+When @var{m} is a floating point mode, represents the result of
+converting floating point value @var{x} (valid for mode @var{m}) to an
+integer, still represented in floating point mode @var{m}, by rounding
+towards zero.
+@end table
+
+@node RTL Declarations, Side Effects, Conversions, RTL
+@section Declarations
+@cindex RTL declarations
+@cindex declarations, RTL
+
+Declaration expression codes do not represent arithmetic operations
+but rather state assertions about their operands.
+
+@table @code
+@findex strict_low_part
+@cindex @code{subreg}, in @code{strict_low_part}
+@item (strict_low_part (subreg:@var{m} (reg:@var{n} @var{r}) 0))
+This expression code is used in only one context: as the destination operand of a
+@code{set} expression. In addition, the operand of this expression
+must be a non-paradoxical @code{subreg} expression.
+
+The presence of @code{strict_low_part} says that the part of the
+register which is meaningful in mode @var{n}, but is not part of
+mode @var{m}, is not to be altered. Normally, an assignment to such
+a subreg is allowed to have undefined effects on the rest of the
+register when @var{m} is less than a word.
+@end table
+
+@node Side Effects, Incdec, RTL Declarations, RTL
+@section Side Effect Expressions
+@cindex RTL side effect expressions
+
+The expression codes described so far represent values, not actions.
+But machine instructions never produce values; they are meaningful
+only for their side effects on the state of the machine. Special
+expression codes are used to represent side effects.
+
+The body of an instruction is always one of these side effect codes;
+the codes described above, which represent values, appear only as
+the operands of these.
+
+@table @code
+@findex set
+@item (set @var{lval} @var{x})
+Represents the action of storing the value of @var{x} into the place
+represented by @var{lval}. @var{lval} must be an expression
+representing a place that can be stored in: @code{reg} (or
+@code{subreg} or @code{strict_low_part}), @code{mem}, @code{pc} or
+@code{cc0}.@refill
+
+If @var{lval} is a @code{reg}, @code{subreg} or @code{mem}, it has a
+machine mode; then @var{x} must be valid for that mode.@refill
+
+If @var{lval} is a @code{reg} whose machine mode is less than the full
+width of the register, then it means that the part of the register
+specified by the machine mode is given the specified value and the
+rest of the register receives an undefined value. Likewise, if
+@var{lval} is a @code{subreg} whose machine mode is narrower than
+the mode of the register, the rest of the register can be changed in
+an undefined way.
+
+If @var{lval} is a @code{strict_low_part} of a @code{subreg}, then the
+part of the register specified by the machine mode of the
+@code{subreg} is given the value @var{x} and the rest of the register
+is not changed.@refill
+
+If @var{lval} is @code{(cc0)}, it has no machine mode, and @var{x} may
+be either a @code{compare} expression or a value that may have any mode.
+The latter case represents a ``test'' instruction. The expression
+@code{(set (cc0) (reg:@var{m} @var{n}))} is equivalent to
+@code{(set (cc0) (compare (reg:@var{m} @var{n}) (const_int 0)))}.
+Use the former expression to save space during the compilation.
+
+@cindex jump instructions and @code{set}
+@cindex @code{if_then_else} usage
+If @var{lval} is @code{(pc)}, we have a jump instruction, and the
+possibilities for @var{x} are very limited. It may be a
+@code{label_ref} expression (unconditional jump). It may be an
+@code{if_then_else} (conditional jump), in which case either the
+second or the third operand must be @code{(pc)} (for the case which
+does not jump) and the other of the two must be a @code{label_ref}
+(for the case which does jump). @var{x} may also be a @code{mem} or
+@code{(plus:SI (pc) @var{y})}, where @var{y} may be a @code{reg} or a
+@code{mem}; these unusual patterns are used to represent jumps through
+branch tables.@refill
+
+If @var{lval} is neither @code{(cc0)} nor @code{(pc)}, the mode of
+@var{lval} must not be @code{VOIDmode} and the mode of @var{x} must be
+valid for the mode of @var{lval}.
+
+@findex SET_DEST
+@findex SET_SRC
+@var{lval} is customarily accessed with the @code{SET_DEST} macro and
+@var{x} with the @code{SET_SRC} macro.
+
+@findex return
+@item (return)
+As the sole expression in a pattern, represents a return from the
+current function, on machines where this can be done with one
+instruction, such as Vaxes. On machines where a multi-instruction
+``epilogue'' must be executed in order to return from the function,
+returning is done by jumping to a label which precedes the epilogue, and
+the @code{return} expression code is never used.
+
+Inside an @code{if_then_else} expression, represents the value to be
+placed in @code{pc} to return to the caller.
+
+Note that an insn pattern of @code{(return)} is logically equivalent to
+@code{(set (pc) (return))}, but the latter form is never used.
+
+@findex call
+@item (call @var{function} @var{nargs})
+Represents a function call. @var{function} is a @code{mem} expression
+whose address is the address of the function to be called.
+@var{nargs} is an expression which can be used for two purposes: on
+some machines it represents the number of bytes of stack argument; on
+others, it represents the number of argument registers.
+
+Each machine has a standard machine mode which @var{function} must
+have. The machine description defines macro @code{FUNCTION_MODE} to
+expand into the requisite mode name. The purpose of this mode is to
+specify what kind of addressing is allowed, on machines where the
+allowed kinds of addressing depend on the machine mode being
+addressed.
+
+@findex clobber
+@item (clobber @var{x})
+Represents the storing or possible storing of an unpredictable,
+undescribed value into @var{x}, which must be a @code{reg},
+@code{scratch} or @code{mem} expression.
+
+One place this is used is in string instructions that store standard
+values into particular hard registers. It may not be worth the
+trouble to describe the values that are stored, but it is essential to
+inform the compiler that the registers will be altered, lest it
+attempt to keep data in them across the string instruction.
+
+If @var{x} is @code{(mem:BLK (const_int 0))}, it means that all memory
+locations must be presumed clobbered.
+
+Note that the machine description classifies certain hard registers as
+``call-clobbered''. All function call instructions are assumed by
+default to clobber these registers, so there is no need to use
+@code{clobber} expressions to indicate this fact. Also, each function
+call is assumed to have the potential to alter any memory location,
+unless the function is declared @code{const}.
+
+If the last group of expressions in a @code{parallel} are each a
+@code{clobber} expression whose arguments are @code{reg} or
+@code{match_scratch} (@pxref{RTL Template}) expressions, the combiner
+phase can add the appropriate @code{clobber} expressions to an insn it
+has constructed when doing so will cause a pattern to be matched.
+
+This feature can be used, for example, on a machine that whose multiply
+and add instructions don't use an MQ register but which has an
+add-accumulate instruction that does clobber the MQ register. Similarly,
+a combined instruction might require a temporary register while the
+constituent instructions might not.
+
+When a @code{clobber} expression for a register appears inside a
+@code{parallel} with other side effects, the register allocator
+guarantees that the register is unoccupied both before and after that
+insn. However, the reload phase may allocate a register used for one of
+the inputs unless the @samp{&} constraint is specified for the selected
+alternative (@pxref{Modifiers}). You can clobber either a specific hard
+register, a pseudo register, or a @code{scratch} expression; in the
+latter two cases, GNU CC will allocate a hard register that is available
+there for use as a temporary.
+
+For instructions that require a temporary register, you should use
+@code{scratch} instead of a pseudo-register because this will allow the
+combiner phase to add the @code{clobber} when required. You do this by
+coding (@code{clobber} (@code{match_scratch} @dots{})). If you do
+clobber a pseudo register, use one which appears nowhere else---generate
+a new one each time. Otherwise, you may confuse CSE.
+
+There is one other known use for clobbering a pseudo register in a
+@code{parallel}: when one of the input operands of the insn is also
+clobbered by the insn. In this case, using the same pseudo register in
+the clobber and elsewhere in the insn produces the expected results.
+
+@findex use
+@item (use @var{x})
+Represents the use of the value of @var{x}. It indicates that the
+value in @var{x} at this point in the program is needed, even though
+it may not be apparent why this is so. Therefore, the compiler will
+not attempt to delete previous instructions whose only effect is to
+store a value in @var{x}. @var{x} must be a @code{reg} expression.
+
+During the delayed branch scheduling phase, @var{x} may be an insn.
+This indicates that @var{x} previously was located at this place in the
+code and its data dependencies need to be taken into account. These
+@code{use} insns will be deleted before the delayed branch scheduling
+phase exits.
+
+@findex parallel
+@item (parallel [@var{x0} @var{x1} @dots{}])
+Represents several side effects performed in parallel. The square
+brackets stand for a vector; the operand of @code{parallel} is a
+vector of expressions. @var{x0}, @var{x1} and so on are individual
+side effect expressions---expressions of code @code{set}, @code{call},
+@code{return}, @code{clobber} or @code{use}.@refill
+
+``In parallel'' means that first all the values used in the individual
+side-effects are computed, and second all the actual side-effects are
+performed. For example,
+
+@example
+(parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
+ (set (mem:SI (reg:SI 1)) (reg:SI 1))])
+@end example
+
+@noindent
+says unambiguously that the values of hard register 1 and the memory
+location addressed by it are interchanged. In both places where
+@code{(reg:SI 1)} appears as a memory address it refers to the value
+in register 1 @emph{before} the execution of the insn.
+
+It follows that it is @emph{incorrect} to use @code{parallel} and
+expect the result of one @code{set} to be available for the next one.
+For example, people sometimes attempt to represent a jump-if-zero
+instruction this way:
+
+@example
+(parallel [(set (cc0) (reg:SI 34))
+ (set (pc) (if_then_else
+ (eq (cc0) (const_int 0))
+ (label_ref @dots{})
+ (pc)))])
+@end example
+
+@noindent
+But this is incorrect, because it says that the jump condition depends
+on the condition code value @emph{before} this instruction, not on the
+new value that is set by this instruction.
+
+@cindex peephole optimization, RTL representation
+Peephole optimization, which takes place together with final assembly
+code output, can produce insns whose patterns consist of a @code{parallel}
+whose elements are the operands needed to output the resulting
+assembler code---often @code{reg}, @code{mem} or constant expressions.
+This would not be well-formed RTL at any other stage in compilation,
+but it is ok then because no further optimization remains to be done.
+However, the definition of the macro @code{NOTICE_UPDATE_CC}, if
+any, must deal with such insns if you define any peephole optimizations.
+
+@findex sequence
+@item (sequence [@var{insns} @dots{}])
+Represents a sequence of insns. Each of the @var{insns} that appears
+in the vector is suitable for appearing in the chain of insns, so it
+must be an @code{insn}, @code{jump_insn}, @code{call_insn},
+@code{code_label}, @code{barrier} or @code{note}.
+
+A @code{sequence} RTX is never placed in an actual insn during RTL
+generation. It represents the sequence of insns that result from a
+@code{define_expand} @emph{before} those insns are passed to
+@code{emit_insn} to insert them in the chain of insns. When actually
+inserted, the individual sub-insns are separated out and the
+@code{sequence} is forgotten.
+
+After delay-slot scheduling is completed, an insn and all the insns that
+reside in its delay slots are grouped together into a @code{sequence}.
+The insn requiring the delay slot is the first insn in the vector;
+subsequent insns are to be placed in the delay slot.
+
+@code{INSN_ANNULLED_BRANCH_P} is set on an insn in a delay slot to
+indicate that a branch insn should be used that will conditionally annul
+the effect of the insns in the delay slots. In such a case,
+@code{INSN_FROM_TARGET_P} indicates that the insn is from the target of
+the branch and should be executed only if the branch is taken; otherwise
+the insn should be executed only if the branch is not taken.
+@xref{Delay Slots}.
+@end table
+
+These expression codes appear in place of a side effect, as the body of
+an insn, though strictly speaking they do not always describe side
+effects as such:
+
+@table @code
+@findex asm_input
+@item (asm_input @var{s})
+Represents literal assembler code as described by the string @var{s}.
+
+@findex unspec
+@findex unspec_volatile
+@item (unspec [@var{operands} @dots{}] @var{index})
+@itemx (unspec_volatile [@var{operands} @dots{}] @var{index})
+Represents a machine-specific operation on @var{operands}. @var{index}
+selects between multiple machine-specific operations.
+@code{unspec_volatile} is used for volatile operations and operations
+that may trap; @code{unspec} is used for other operations.
+
+These codes may appear inside a @code{pattern} of an
+insn, inside a @code{parallel}, or inside an expression.
+
+@findex addr_vec
+@item (addr_vec:@var{m} [@var{lr0} @var{lr1} @dots{}])
+Represents a table of jump addresses. The vector elements @var{lr0},
+etc., are @code{label_ref} expressions. The mode @var{m} specifies
+how much space is given to each address; normally @var{m} would be
+@code{Pmode}.
+
+@findex addr_diff_vec
+@item (addr_diff_vec:@var{m} @var{base} [@var{lr0} @var{lr1} @dots{}])
+Represents a table of jump addresses expressed as offsets from
+@var{base}. The vector elements @var{lr0}, etc., are @code{label_ref}
+expressions and so is @var{base}. The mode @var{m} specifies how much
+space is given to each address-difference.@refill
+@end table
+
+@node Incdec, Assembler, Side Effects, RTL
+@section Embedded Side-Effects on Addresses
+@cindex RTL preincrement
+@cindex RTL postincrement
+@cindex RTL predecrement
+@cindex RTL postdecrement
+
+Four special side-effect expression codes appear as memory addresses.
+
+@table @code
+@findex pre_dec
+@item (pre_dec:@var{m} @var{x})
+Represents the side effect of decrementing @var{x} by a standard
+amount and represents also the value that @var{x} has after being
+decremented. @var{x} must be a @code{reg} or @code{mem}, but most
+machines allow only a @code{reg}. @var{m} must be the machine mode
+for pointers on the machine in use. The amount @var{x} is decremented
+by is the length in bytes of the machine mode of the containing memory
+reference of which this expression serves as the address. Here is an
+example of its use:@refill
+
+@example
+(mem:DF (pre_dec:SI (reg:SI 39)))
+@end example
+
+@noindent
+This says to decrement pseudo register 39 by the length of a @code{DFmode}
+value and use the result to address a @code{DFmode} value.
+
+@findex pre_inc
+@item (pre_inc:@var{m} @var{x})
+Similar, but specifies incrementing @var{x} instead of decrementing it.
+
+@findex post_dec
+@item (post_dec:@var{m} @var{x})
+Represents the same side effect as @code{pre_dec} but a different
+value. The value represented here is the value @var{x} has @i{before}
+being decremented.
+
+@findex post_inc
+@item (post_inc:@var{m} @var{x})
+Similar, but specifies incrementing @var{x} instead of decrementing it.
+@end table
+
+These embedded side effect expressions must be used with care. Instruction
+patterns may not use them. Until the @samp{flow} pass of the compiler,
+they may occur only to represent pushes onto the stack. The @samp{flow}
+pass finds cases where registers are incremented or decremented in one
+instruction and used as an address shortly before or after; these cases are
+then transformed to use pre- or post-increment or -decrement.
+
+If a register used as the operand of these expressions is used in
+another address in an insn, the original value of the register is used.
+Uses of the register outside of an address are not permitted within the
+same insn as a use in an embedded side effect expression because such
+insns behave differently on different machines and hence must be treated
+as ambiguous and disallowed.
+
+An instruction that can be represented with an embedded side effect
+could also be represented using @code{parallel} containing an additional
+@code{set} to describe how the address register is altered. This is not
+done because machines that allow these operations at all typically
+allow them wherever a memory address is called for. Describing them as
+additional parallel stores would require doubling the number of entries
+in the machine description.
+
+@node Assembler, Insns, Incdec, RTL
+@section Assembler Instructions as Expressions
+@cindex assembler instructions in RTL
+
+@cindex @code{asm_operands}, usage
+The RTX code @code{asm_operands} represents a value produced by a
+user-specified assembler instruction. It is used to represent
+an @code{asm} statement with arguments. An @code{asm} statement with
+a single output operand, like this:
+
+@smallexample
+asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));
+@end smallexample
+
+@noindent
+is represented using a single @code{asm_operands} RTX which represents
+the value that is stored in @code{outputvar}:
+
+@smallexample
+(set @var{rtx-for-outputvar}
+ (asm_operands "foo %1,%2,%0" "a" 0
+ [@var{rtx-for-addition-result} @var{rtx-for-*z}]
+ [(asm_input:@var{m1} "g")
+ (asm_input:@var{m2} "di")]))
+@end smallexample
+
+@noindent
+Here the operands of the @code{asm_operands} RTX are the assembler
+template string, the output-operand's constraint, the index-number of the
+output operand among the output operands specified, a vector of input
+operand RTX's, and a vector of input-operand modes and constraints. The
+mode @var{m1} is the mode of the sum @code{x+y}; @var{m2} is that of
+@code{*z}.
+
+When an @code{asm} statement has multiple output values, its insn has
+several such @code{set} RTX's inside of a @code{parallel}. Each @code{set}
+contains a @code{asm_operands}; all of these share the same assembler
+template and vectors, but each contains the constraint for the respective
+output operand. They are also distinguished by the output-operand index
+number, which is 0, 1, @dots{} for successive output operands.
+
+@node Insns, Calls, Assembler, RTL
+@section Insns
+@cindex insns
+
+The RTL representation of the code for a function is a doubly-linked
+chain of objects called @dfn{insns}. Insns are expressions with
+special codes that are used for no other purpose. Some insns are
+actual instructions; others represent dispatch tables for @code{switch}
+statements; others represent labels to jump to or various sorts of
+declarative information.
+
+In addition to its own specific data, each insn must have a unique
+id-number that distinguishes it from all other insns in the current
+function (after delayed branch scheduling, copies of an insn with the
+same id-number may be present in multiple places in a function, but
+these copies will always be identical and will only appear inside a
+@code{sequence}), and chain pointers to the preceding and following
+insns. These three fields occupy the same position in every insn,
+independent of the expression code of the insn. They could be accessed
+with @code{XEXP} and @code{XINT}, but instead three special macros are
+always used:
+
+@table @code
+@findex INSN_UID
+@item INSN_UID (@var{i})
+Accesses the unique id of insn @var{i}.
+
+@findex PREV_INSN
+@item PREV_INSN (@var{i})
+Accesses the chain pointer to the insn preceding @var{i}.
+If @var{i} is the first insn, this is a null pointer.
+
+@findex NEXT_INSN
+@item NEXT_INSN (@var{i})
+Accesses the chain pointer to the insn following @var{i}.
+If @var{i} is the last insn, this is a null pointer.
+@end table
+
+@findex get_insns
+@findex get_last_insn
+The first insn in the chain is obtained by calling @code{get_insns}; the
+last insn is the result of calling @code{get_last_insn}. Within the
+chain delimited by these insns, the @code{NEXT_INSN} and
+@code{PREV_INSN} pointers must always correspond: if @var{insn} is not
+the first insn,
+
+@example
+NEXT_INSN (PREV_INSN (@var{insn})) == @var{insn}
+@end example
+
+@noindent
+is always true and if @var{insn} is not the last insn,
+
+@example
+PREV_INSN (NEXT_INSN (@var{insn})) == @var{insn}
+@end example
+
+@noindent
+is always true.
+
+After delay slot scheduling, some of the insns in the chain might be
+@code{sequence} expressions, which contain a vector of insns. The value
+of @code{NEXT_INSN} in all but the last of these insns is the next insn
+in the vector; the value of @code{NEXT_INSN} of the last insn in the vector
+is the same as the value of @code{NEXT_INSN} for the @code{sequence} in
+which it is contained. Similar rules apply for @code{PREV_INSN}.
+
+This means that the above invariants are not necessarily true for insns
+inside @code{sequence} expressions. Specifically, if @var{insn} is the
+first insn in a @code{sequence}, @code{NEXT_INSN (PREV_INSN (@var{insn}))}
+is the insn containing the @code{sequence} expression, as is the value
+of @code{PREV_INSN (NEXT_INSN (@var{insn}))} is @var{insn} is the last
+insn in the @code{sequence} expression. You can use these expressions
+to find the containing @code{sequence} expression.@refill
+
+Every insn has one of the following six expression codes:
+
+@table @code
+@findex insn
+@item insn
+The expression code @code{insn} is used for instructions that do not jump
+and do not do function calls. @code{sequence} expressions are always
+contained in insns with code @code{insn} even if one of those insns
+should jump or do function calls.
+
+Insns with code @code{insn} have four additional fields beyond the three
+mandatory ones listed above. These four are described in a table below.
+
+@findex jump_insn
+@item jump_insn
+The expression code @code{jump_insn} is used for instructions that may
+jump (or, more generally, may contain @code{label_ref} expressions). If
+there is an instruction to return from the current function, it is
+recorded as a @code{jump_insn}.
+
+@findex JUMP_LABEL
+@code{jump_insn} insns have the same extra fields as @code{insn} insns,
+accessed in the same way and in addition contain a field
+@code{JUMP_LABEL} which is defined once jump optimization has completed.
+
+For simple conditional and unconditional jumps, this field contains the
+@code{code_label} to which this insn will (possibly conditionally)
+branch. In a more complex jump, @code{JUMP_LABEL} records one of the
+labels that the insn refers to; the only way to find the others
+is to scan the entire body of the insn.
+
+Return insns count as jumps, but since they do not refer to any labels,
+they have zero in the @code{JUMP_LABEL} field.
+
+@findex call_insn
+@item call_insn
+The expression code @code{call_insn} is used for instructions that may do
+function calls. It is important to distinguish these instructions because
+they imply that certain registers and memory locations may be altered
+unpredictably.
+
+@findex CALL_INSN_FUNCTION_USAGE
+@code{call_insn} insns have the same extra fields as @code{insn} insns,
+accessed in the same way and in addition contain a field
+@code{CALL_INSN_FUNCTION_USAGE}, which contains a list (chain of
+@code{expr_list} expressions) containing @code{use} and @code{clobber}
+expressions that denote hard registers used or clobbered by the called
+function. A register specified in a @code{clobber} in this list is
+modified @emph{after} the execution of the @code{call_insn}, while a
+register in a @code{clobber} in the body of the @code{call_insn} is
+clobbered before the insn completes execution. @code{clobber}
+expressions in this list augment registers specified in
+@code{CALL_USED_REGISTERS} (@pxref{Register Basics}).
+
+@findex code_label
+@findex CODE_LABEL_NUMBER
+@item code_label
+A @code{code_label} insn represents a label that a jump insn can jump
+to. It contains two special fields of data in addition to the three
+standard ones. @code{CODE_LABEL_NUMBER} is used to hold the @dfn{label
+number}, a number that identifies this label uniquely among all the
+labels in the compilation (not just in the current function).
+Ultimately, the label is represented in the assembler output as an
+assembler label, usually of the form @samp{L@var{n}} where @var{n} is
+the label number.
+
+When a @code{code_label} appears in an RTL expression, it normally
+appears within a @code{label_ref} which represents the address of
+the label, as a number.
+
+@findex LABEL_NUSES
+The field @code{LABEL_NUSES} is only defined once the jump optimization
+phase is completed and contains the number of times this label is
+referenced in the current function.
+
+@findex barrier
+@item barrier
+Barriers are placed in the instruction stream when control cannot flow
+past them. They are placed after unconditional jump instructions to
+indicate that the jumps are unconditional and after calls to
+@code{volatile} functions, which do not return (e.g., @code{exit}).
+They contain no information beyond the three standard fields.
+
+@findex note
+@findex NOTE_LINE_NUMBER
+@findex NOTE_SOURCE_FILE
+@item note
+@code{note} insns are used to represent additional debugging and
+declarative information. They contain two nonstandard fields, an
+integer which is accessed with the macro @code{NOTE_LINE_NUMBER} and a
+string accessed with @code{NOTE_SOURCE_FILE}.
+
+If @code{NOTE_LINE_NUMBER} is positive, the note represents the
+position of a source line and @code{NOTE_SOURCE_FILE} is the source file name
+that the line came from. These notes control generation of line
+number data in the assembler output.
+
+Otherwise, @code{NOTE_LINE_NUMBER} is not really a line number but a
+code with one of the following values (and @code{NOTE_SOURCE_FILE}
+must contain a null pointer):
+
+@table @code
+@findex NOTE_INSN_DELETED
+@item NOTE_INSN_DELETED
+Such a note is completely ignorable. Some passes of the compiler
+delete insns by altering them into notes of this kind.
+
+@findex NOTE_INSN_BLOCK_BEG
+@findex NOTE_INSN_BLOCK_END
+@item NOTE_INSN_BLOCK_BEG
+@itemx NOTE_INSN_BLOCK_END
+These types of notes indicate the position of the beginning and end
+of a level of scoping of variable names. They control the output
+of debugging information.
+
+@findex NOTE_INSN_EH_REGION_BEG
+@findex NOTE_INSN_EH_REGION_END
+@item NOTE_INSN_EH_REGION_BEG
+@itemx NOTE_INSN_EH_REGION_END
+These types of notes indicate the position of the beginning and end of a
+level of scoping for exception handling. @code{NOTE_BLOCK_NUMBER}
+identifies which @code{CODE_LABEL} is associated with the given region.
+
+@findex NOTE_INSN_LOOP_BEG
+@findex NOTE_INSN_LOOP_END
+@item NOTE_INSN_LOOP_BEG
+@itemx NOTE_INSN_LOOP_END
+These types of notes indicate the position of the beginning and end
+of a @code{while} or @code{for} loop. They enable the loop optimizer
+to find loops quickly.
+
+@findex NOTE_INSN_LOOP_CONT
+@item NOTE_INSN_LOOP_CONT
+Appears at the place in a loop that @code{continue} statements jump to.
+
+@findex NOTE_INSN_LOOP_VTOP
+@item NOTE_INSN_LOOP_VTOP
+This note indicates the place in a loop where the exit test begins for
+those loops in which the exit test has been duplicated. This position
+becomes another virtual start of the loop when considering loop
+invariants.
+
+@findex NOTE_INSN_FUNCTION_END
+@item NOTE_INSN_FUNCTION_END
+Appears near the end of the function body, just before the label that
+@code{return} statements jump to (on machine where a single instruction
+does not suffice for returning). This note may be deleted by jump
+optimization.
+
+@findex NOTE_INSN_SETJMP
+@item NOTE_INSN_SETJMP
+Appears following each call to @code{setjmp} or a related function.
+@end table
+
+These codes are printed symbolically when they appear in debugging dumps.
+@end table
+
+@cindex @code{HImode}, in @code{insn}
+@cindex @code{QImode}, in @code{insn}
+The machine mode of an insn is normally @code{VOIDmode}, but some
+phases use the mode for various purposes; for example, the reload pass
+sets it to @code{HImode} if the insn needs reloading but not register
+elimination and @code{QImode} if both are required. The common
+subexpression elimination pass sets the mode of an insn to @code{QImode}
+when it is the first insn in a block that has already been processed.
+
+Here is a table of the extra fields of @code{insn}, @code{jump_insn}
+and @code{call_insn} insns:
+
+@table @code
+@findex PATTERN
+@item PATTERN (@var{i})
+An expression for the side effect performed by this insn. This must be
+one of the following codes: @code{set}, @code{call}, @code{use},
+@code{clobber}, @code{return}, @code{asm_input}, @code{asm_output},
+@code{addr_vec}, @code{addr_diff_vec}, @code{trap_if}, @code{unspec},
+@code{unspec_volatile}, @code{parallel}, or @code{sequence}. If it is a @code{parallel},
+each element of the @code{parallel} must be one these codes, except that
+@code{parallel} expressions cannot be nested and @code{addr_vec} and
+@code{addr_diff_vec} are not permitted inside a @code{parallel} expression.
+
+@findex INSN_CODE
+@item INSN_CODE (@var{i})
+An integer that says which pattern in the machine description matches
+this insn, or -1 if the matching has not yet been attempted.
+
+Such matching is never attempted and this field remains -1 on an insn
+whose pattern consists of a single @code{use}, @code{clobber},
+@code{asm_input}, @code{addr_vec} or @code{addr_diff_vec} expression.
+
+@findex asm_noperands
+Matching is also never attempted on insns that result from an @code{asm}
+statement. These contain at least one @code{asm_operands} expression.
+The function @code{asm_noperands} returns a non-negative value for
+such insns.
+
+In the debugging output, this field is printed as a number followed by
+a symbolic representation that locates the pattern in the @file{md}
+file as some small positive or negative offset from a named pattern.
+
+@findex LOG_LINKS
+@item LOG_LINKS (@var{i})
+A list (chain of @code{insn_list} expressions) giving information about
+dependencies between instructions within a basic block. Neither a jump
+nor a label may come between the related insns.
+
+@findex REG_NOTES
+@item REG_NOTES (@var{i})
+A list (chain of @code{expr_list} and @code{insn_list} expressions)
+giving miscellaneous information about the insn. It is often
+information pertaining to the registers used in this insn.
+@end table
+
+The @code{LOG_LINKS} field of an insn is a chain of @code{insn_list}
+expressions. Each of these has two operands: the first is an insn,
+and the second is another @code{insn_list} expression (the next one in
+the chain). The last @code{insn_list} in the chain has a null pointer
+as second operand. The significant thing about the chain is which
+insns appear in it (as first operands of @code{insn_list}
+expressions). Their order is not significant.
+
+This list is originally set up by the flow analysis pass; it is a null
+pointer until then. Flow only adds links for those data dependencies
+which can be used for instruction combination. For each insn, the flow
+analysis pass adds a link to insns which store into registers values
+that are used for the first time in this insn. The instruction
+scheduling pass adds extra links so that every dependence will be
+represented. Links represent data dependencies, antidependencies and
+output dependencies; the machine mode of the link distinguishes these
+three types: antidependencies have mode @code{REG_DEP_ANTI}, output
+dependencies have mode @code{REG_DEP_OUTPUT}, and data dependencies have
+mode @code{VOIDmode}.
+
+The @code{REG_NOTES} field of an insn is a chain similar to the
+@code{LOG_LINKS} field but it includes @code{expr_list} expressions in
+addition to @code{insn_list} expressions. There are several kinds of
+register notes, which are distinguished by the machine mode, which in a
+register note is really understood as being an @code{enum reg_note}.
+The first operand @var{op} of the note is data whose meaning depends on
+the kind of note.
+
+@findex REG_NOTE_KIND
+@findex PUT_REG_NOTE_KIND
+The macro @code{REG_NOTE_KIND (@var{x})} returns the kind of
+register note. Its counterpart, the macro @code{PUT_REG_NOTE_KIND
+(@var{x}, @var{newkind})} sets the register note type of @var{x} to be
+@var{newkind}.
+
+Register notes are of three classes: They may say something about an
+input to an insn, they may say something about an output of an insn, or
+they may create a linkage between two insns. There are also a set
+of values that are only used in @code{LOG_LINKS}.
+
+These register notes annotate inputs to an insn:
+
+@table @code
+@findex REG_DEAD
+@item REG_DEAD
+The value in @var{op} dies in this insn; that is to say, altering the
+value immediately after this insn would not affect the future behavior
+of the program.
+
+This does not necessarily mean that the register @var{op} has no useful
+value after this insn since it may also be an output of the insn. In
+such a case, however, a @code{REG_DEAD} note would be redundant and is
+usually not present until after the reload pass, but no code relies on
+this fact.
+
+@findex REG_INC
+@item REG_INC
+The register @var{op} is incremented (or decremented; at this level
+there is no distinction) by an embedded side effect inside this insn.
+This means it appears in a @code{post_inc}, @code{pre_inc},
+@code{post_dec} or @code{pre_dec} expression.
+
+@findex REG_NONNEG
+@item REG_NONNEG
+The register @var{op} is known to have a nonnegative value when this
+insn is reached. This is used so that decrement and branch until zero
+instructions, such as the m68k dbra, can be matched.
+
+The @code{REG_NONNEG} note is added to insns only if the machine
+description has a @samp{decrement_and_branch_until_zero} pattern.
+
+@findex REG_NO_CONFLICT
+@item REG_NO_CONFLICT
+This insn does not cause a conflict between @var{op} and the item
+being set by this insn even though it might appear that it does.
+In other words, if the destination register and @var{op} could
+otherwise be assigned the same register, this insn does not
+prevent that assignment.
+
+Insns with this note are usually part of a block that begins with a
+@code{clobber} insn specifying a multi-word pseudo register (which will
+be the output of the block), a group of insns that each set one word of
+the value and have the @code{REG_NO_CONFLICT} note attached, and a final
+insn that copies the output to itself with an attached @code{REG_EQUAL}
+note giving the expression being computed. This block is encapsulated
+with @code{REG_LIBCALL} and @code{REG_RETVAL} notes on the first and
+last insns, respectively.
+
+@findex REG_LABEL
+@item REG_LABEL
+This insn uses @var{op}, a @code{code_label}, but is not a
+@code{jump_insn}. The presence of this note allows jump optimization to
+be aware that @var{op} is, in fact, being used.
+@end table
+
+The following notes describe attributes of outputs of an insn:
+
+@table @code
+@findex REG_EQUIV
+@findex REG_EQUAL
+@item REG_EQUIV
+@itemx REG_EQUAL
+This note is only valid on an insn that sets only one register and
+indicates that that register will be equal to @var{op} at run time; the
+scope of this equivalence differs between the two types of notes. The
+value which the insn explicitly copies into the register may look
+different from @var{op}, but they will be equal at run time. If the
+output of the single @code{set} is a @code{strict_low_part} expression,
+the note refers to the register that is contained in @code{SUBREG_REG}
+of the @code{subreg} expression.
+
+For @code{REG_EQUIV}, the register is equivalent to @var{op} throughout
+the entire function, and could validly be replaced in all its
+occurrences by @var{op}. (``Validly'' here refers to the data flow of
+the program; simple replacement may make some insns invalid.) For
+example, when a constant is loaded into a register that is never
+assigned any other value, this kind of note is used.
+
+When a parameter is copied into a pseudo-register at entry to a function,
+a note of this kind records that the register is equivalent to the stack
+slot where the parameter was passed. Although in this case the register
+may be set by other insns, it is still valid to replace the register
+by the stack slot throughout the function.
+
+A @code{REG_EQUIV} note is also used on an instruction which copies a
+register parameter into a pseudo-register at entry to a function, if
+there is a stack slot where that parameter could be stored. Although
+other insns may set the pseudo-register, it is valid for the compiler to
+replace the pseudo-register by stack slot throughout the function,
+provided the compiler ensures that the stack slot is properly
+initialized by making the replacement in the initial copy instruction as
+well. This is used on machines for which the calling convention
+allocates stack space for register parameters. See
+@code{REG_PARM_STACK_SPACE} in @ref{Stack Arguments}.
+
+In the case of @code{REG_EQUAL}, the register that is set by this insn
+will be equal to @var{op} at run time at the end of this insn but not
+necessarily elsewhere in the function. In this case, @var{op}
+is typically an arithmetic expression. For example, when a sequence of
+insns such as a library call is used to perform an arithmetic operation,
+this kind of note is attached to the insn that produces or copies the
+final value.
+
+These two notes are used in different ways by the compiler passes.
+@code{REG_EQUAL} is used by passes prior to register allocation (such as
+common subexpression elimination and loop optimization) to tell them how
+to think of that value. @code{REG_EQUIV} notes are used by register
+allocation to indicate that there is an available substitute expression
+(either a constant or a @code{mem} expression for the location of a
+parameter on the stack) that may be used in place of a register if
+insufficient registers are available.
+
+Except for stack homes for parameters, which are indicated by a
+@code{REG_EQUIV} note and are not useful to the early optimization
+passes and pseudo registers that are equivalent to a memory location
+throughout there entire life, which is not detected until later in
+the compilation, all equivalences are initially indicated by an attached
+@code{REG_EQUAL} note. In the early stages of register allocation, a
+@code{REG_EQUAL} note is changed into a @code{REG_EQUIV} note if
+@var{op} is a constant and the insn represents the only set of its
+destination register.
+
+Thus, compiler passes prior to register allocation need only check for
+@code{REG_EQUAL} notes and passes subsequent to register allocation
+need only check for @code{REG_EQUIV} notes.
+
+@findex REG_UNUSED
+@item REG_UNUSED
+The register @var{op} being set by this insn will not be used in a
+subsequent insn. This differs from a @code{REG_DEAD} note, which
+indicates that the value in an input will not be used subsequently.
+These two notes are independent; both may be present for the same
+register.
+
+@findex REG_WAS_0
+@item REG_WAS_0
+The single output of this insn contained zero before this insn.
+@var{op} is the insn that set it to zero. You can rely on this note if
+it is present and @var{op} has not been deleted or turned into a @code{note};
+its absence implies nothing.
+@end table
+
+These notes describe linkages between insns. They occur in pairs: one
+insn has one of a pair of notes that points to a second insn, which has
+the inverse note pointing back to the first insn.
+
+@table @code
+@findex REG_RETVAL
+@item REG_RETVAL
+This insn copies the value of a multi-insn sequence (for example, a
+library call), and @var{op} is the first insn of the sequence (for a
+library call, the first insn that was generated to set up the arguments
+for the library call).
+
+Loop optimization uses this note to treat such a sequence as a single
+operation for code motion purposes and flow analysis uses this note to
+delete such sequences whose results are dead.
+
+A @code{REG_EQUAL} note will also usually be attached to this insn to
+provide the expression being computed by the sequence.
+
+@findex REG_LIBCALL
+@item REG_LIBCALL
+This is the inverse of @code{REG_RETVAL}: it is placed on the first
+insn of a multi-insn sequence, and it points to the last one.
+
+@findex REG_CC_SETTER
+@findex REG_CC_USER
+@item REG_CC_SETTER
+@itemx REG_CC_USER
+On machines that use @code{cc0}, the insns which set and use @code{cc0}
+set and use @code{cc0} are adjacent. However, when branch delay slot
+filling is done, this may no longer be true. In this case a
+@code{REG_CC_USER} note will be placed on the insn setting @code{cc0} to
+point to the insn using @code{cc0} and a @code{REG_CC_SETTER} note will
+be placed on the insn using @code{cc0} to point to the insn setting
+@code{cc0}.@refill
+@end table
+
+These values are only used in the @code{LOG_LINKS} field, and indicate
+the type of dependency that each link represents. Links which indicate
+a data dependence (a read after write dependence) do not use any code,
+they simply have mode @code{VOIDmode}, and are printed without any
+descriptive text.
+
+@table @code
+@findex REG_DEP_ANTI
+@item REG_DEP_ANTI
+This indicates an anti dependence (a write after read dependence).
+
+@findex REG_DEP_OUTPUT
+@item REG_DEP_OUTPUT
+This indicates an output dependence (a write after write dependence).
+@end table
+
+These notes describe information gathered from gcov profile data. They
+are stored in the @code{REG_NOTES} field of an insn as an
+@code{expr_list}.
+
+@table @code
+@findex REG_EXEC_COUNT
+@item REG_EXEC_COUNT
+This is used to indicate the number of times a basic block was executed
+according to the profile data. The note is attached to the first insn in
+the basic block.
+
+@findex REG_BR_PROB
+@item REG_BR_PROB
+This is used to specify the ratio of branches to non-branches of a
+branch insn according to the profile data. The value is stored as a
+value between 0 and REG_BR_PROB_BASE; larger values indicate a higher
+probability that the branch will be taken.
+@end table
+
+For convenience, the machine mode in an @code{insn_list} or
+@code{expr_list} is printed using these symbolic codes in debugging dumps.
+
+@findex insn_list
+@findex expr_list
+The only difference between the expression codes @code{insn_list} and
+@code{expr_list} is that the first operand of an @code{insn_list} is
+assumed to be an insn and is printed in debugging dumps as the insn's
+unique id; the first operand of an @code{expr_list} is printed in the
+ordinary way as an expression.
+
+@node Calls, Sharing, Insns, RTL
+@section RTL Representation of Function-Call Insns
+@cindex calling functions in RTL
+@cindex RTL function-call insns
+@cindex function-call insns
+
+Insns that call subroutines have the RTL expression code @code{call_insn}.
+These insns must satisfy special rules, and their bodies must use a special
+RTL expression code, @code{call}.
+
+@cindex @code{call} usage
+A @code{call} expression has two operands, as follows:
+
+@example
+(call (mem:@var{fm} @var{addr}) @var{nbytes})
+@end example
+
+@noindent
+Here @var{nbytes} is an operand that represents the number of bytes of
+argument data being passed to the subroutine, @var{fm} is a machine mode
+(which must equal as the definition of the @code{FUNCTION_MODE} macro in
+the machine description) and @var{addr} represents the address of the
+subroutine.
+
+For a subroutine that returns no value, the @code{call} expression as
+shown above is the entire body of the insn, except that the insn might
+also contain @code{use} or @code{clobber} expressions.
+
+@cindex @code{BLKmode}, and function return values
+For a subroutine that returns a value whose mode is not @code{BLKmode},
+the value is returned in a hard register. If this register's number is
+@var{r}, then the body of the call insn looks like this:
+
+@example
+(set (reg:@var{m} @var{r})
+ (call (mem:@var{fm} @var{addr}) @var{nbytes}))
+@end example
+
+@noindent
+This RTL expression makes it clear (to the optimizer passes) that the
+appropriate register receives a useful value in this insn.
+
+When a subroutine returns a @code{BLKmode} value, it is handled by
+passing to the subroutine the address of a place to store the value.
+So the call insn itself does not ``return'' any value, and it has the
+same RTL form as a call that returns nothing.
+
+On some machines, the call instruction itself clobbers some register,
+for example to contain the return address. @code{call_insn} insns
+on these machines should have a body which is a @code{parallel}
+that contains both the @code{call} expression and @code{clobber}
+expressions that indicate which registers are destroyed. Similarly,
+if the call instruction requires some register other than the stack
+pointer that is not explicitly mentioned it its RTL, a @code{use}
+subexpression should mention that register.
+
+Functions that are called are assumed to modify all registers listed in
+the configuration macro @code{CALL_USED_REGISTERS} (@pxref{Register
+Basics}) and, with the exception of @code{const} functions and library
+calls, to modify all of memory.
+
+Insns containing just @code{use} expressions directly precede the
+@code{call_insn} insn to indicate which registers contain inputs to the
+function. Similarly, if registers other than those in
+@code{CALL_USED_REGISTERS} are clobbered by the called function, insns
+containing a single @code{clobber} follow immediately after the call to
+indicate which registers.
+
+@node Sharing
+@section Structure Sharing Assumptions
+@cindex sharing of RTL components
+@cindex RTL structure sharing assumptions
+
+The compiler assumes that certain kinds of RTL expressions are unique;
+there do not exist two distinct objects representing the same value.
+In other cases, it makes an opposite assumption: that no RTL expression
+object of a certain kind appears in more than one place in the
+containing structure.
+
+These assumptions refer to a single function; except for the RTL
+objects that describe global variables and external functions,
+and a few standard objects such as small integer constants,
+no RTL objects are common to two functions.
+
+@itemize @bullet
+@cindex @code{reg}, RTL sharing
+@item
+Each pseudo-register has only a single @code{reg} object to represent it,
+and therefore only a single machine mode.
+
+@cindex symbolic label
+@cindex @code{symbol_ref}, RTL sharing
+@item
+For any symbolic label, there is only one @code{symbol_ref} object
+referring to it.
+
+@cindex @code{const_int}, RTL sharing
+@item
+There is only one @code{const_int} expression with value 0, only
+one with value 1, and only one with value @minus{}1.
+Some other integer values are also stored uniquely.
+
+@cindex @code{pc}, RTL sharing
+@item
+There is only one @code{pc} expression.
+
+@cindex @code{cc0}, RTL sharing
+@item
+There is only one @code{cc0} expression.
+
+@cindex @code{const_double}, RTL sharing
+@item
+There is only one @code{const_double} expression with value 0 for
+each floating point mode. Likewise for values 1 and 2.
+
+@cindex @code{label_ref}, RTL sharing
+@cindex @code{scratch}, RTL sharing
+@item
+No @code{label_ref} or @code{scratch} appears in more than one place in
+the RTL structure; in other words, it is safe to do a tree-walk of all
+the insns in the function and assume that each time a @code{label_ref}
+or @code{scratch} is seen it is distinct from all others that are seen.
+
+@cindex @code{mem}, RTL sharing
+@item
+Only one @code{mem} object is normally created for each static
+variable or stack slot, so these objects are frequently shared in all
+the places they appear. However, separate but equal objects for these
+variables are occasionally made.
+
+@cindex @code{asm_operands}, RTL sharing
+@item
+When a single @code{asm} statement has multiple output operands, a
+distinct @code{asm_operands} expression is made for each output operand.
+However, these all share the vector which contains the sequence of input
+operands. This sharing is used later on to test whether two
+@code{asm_operands} expressions come from the same statement, so all
+optimizations must carefully preserve the sharing if they copy the
+vector at all.
+
+@item
+No RTL object appears in more than one place in the RTL structure
+except as described above. Many passes of the compiler rely on this
+by assuming that they can modify RTL objects in place without unwanted
+side-effects on other insns.
+
+@findex unshare_all_rtl
+@item
+During initial RTL generation, shared structure is freely introduced.
+After all the RTL for a function has been generated, all shared
+structure is copied by @code{unshare_all_rtl} in @file{emit-rtl.c},
+after which the above rules are guaranteed to be followed.
+
+@findex copy_rtx_if_shared
+@item
+During the combiner pass, shared structure within an insn can exist
+temporarily. However, the shared structure is copied before the
+combiner is finished with the insn. This is done by calling
+@code{copy_rtx_if_shared}, which is a subroutine of
+@code{unshare_all_rtl}.
+@end itemize
+
+@node Reading RTL
+@section Reading RTL
+
+To read an RTL object from a file, call @code{read_rtx}. It takes one
+argument, a stdio stream, and returns a single RTL object.
+
+Reading RTL from a file is very slow. This is not currently a
+problem since reading RTL occurs only as part of building the
+compiler.
+
+People frequently have the idea of using RTL stored as text in a file as
+an interface between a language front end and the bulk of GNU CC. This
+idea is not feasible.
+
+GNU CC was designed to use RTL internally only. Correct RTL for a given
+program is very dependent on the particular target machine. And the RTL
+does not contain all the information about the program.
+
+The proper way to interface GNU CC to a new language front end is with
+the ``tree'' data structure. There is no manual for this data
+structure, but it is described in the files @file{tree.h} and
+@file{tree.def}.
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index 3e6b4aea45b..4df251bb3b7 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -1,5 +1,5 @@
/* Analyze RTL for C-Compiler
- Copyright (C) 1987, 88, 9-5, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 92-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -20,10 +20,14 @@ Boston, MA 02111-1307, USA. */
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
-void note_stores ();
-int reg_set_p ();
+static int rtx_addr_can_trap_p PROTO((rtx));
+
+
+/* Forward declarations */
+static int jmp_uses_reg_or_mem PROTO((rtx));
/* Bit flags that specify the machine subtype we are compiling for.
Bits are tested using macros TARGET_... defined in the tm.h file
@@ -99,12 +103,15 @@ rtx_varies_p (x)
eliminated the frame and/or arg pointer and are using it
for pseudos. */
return ! (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
- || x == arg_pointer_rtx);
+ || x == arg_pointer_rtx || x == pic_offset_table_rtx);
case LO_SUM:
/* The operand 0 of a LO_SUM is considered constant
(in fact is it related specifically to operand 1). */
return rtx_varies_p (XEXP (x, 1));
+
+ default:
+ break;
}
fmt = GET_RTX_FORMAT (code);
@@ -117,7 +124,7 @@ rtx_varies_p (x)
/* Return 0 if the use of X as an address in a MEM can cause a trap. */
-int
+static int
rtx_addr_can_trap_p (x)
register rtx x;
{
@@ -149,6 +156,9 @@ rtx_addr_can_trap_p (x)
case LO_SUM:
return rtx_addr_can_trap_p (XEXP (x, 1));
+
+ default:
+ break;
}
/* If it isn't one of the case above, it can cause a trap. */
@@ -274,6 +284,9 @@ reg_mentioned_p (reg, in)
case CONST_DOUBLE:
/* These are kept unique for a given value. */
return 0;
+
+ default:
+ break;
}
if (GET_CODE (reg) == code && rtx_equal_p (reg, in))
@@ -364,13 +377,13 @@ reg_referenced_p (x, body)
+ (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)))
&& reg_overlap_mentioned_p (x, SET_DEST (body)))
return 1;
- break;
+ return 0;
case ASM_OPERANDS:
for (i = ASM_OPERANDS_INPUT_LENGTH (body) - 1; i >= 0; i--)
if (reg_overlap_mentioned_p (x, ASM_OPERANDS_INPUT (body, i)))
return 1;
- break;
+ return 0;
case CALL:
case USE:
@@ -385,10 +398,11 @@ reg_referenced_p (x, body)
for (i = XVECLEN (body, 0) - 1; i >= 0; i--)
if (reg_referenced_p (x, XVECEXP (body, 0, i)))
return 1;
- break;
+ return 0;
+
+ default:
+ return 0;
}
-
- return 0;
}
/* Nonzero if register REG is referenced in an insn between
@@ -439,7 +453,7 @@ static int reg_set_flag;
static void
reg_set_p_1 (x, pat)
- rtx x;
+ rtx x, pat;
{
/* We don't want to return 1 if X is a MEM that contains a register
within REG_SET_REG. */
@@ -517,6 +531,9 @@ modified_between_p (x, start, end)
case REG:
return reg_set_between_p (x, start, end);
+
+ default:
+ break;
}
fmt = GET_RTX_FORMAT (code);
@@ -569,6 +586,9 @@ modified_in_p (x, insn)
case REG:
return reg_set_p (x, insn);
+
+ default:
+ break;
}
fmt = GET_RTX_FORMAT (code);
@@ -749,6 +769,9 @@ refers_to_regno_p (regno, endregno, x, loc)
return 0;
x = SET_SRC (x);
goto repeat;
+
+ default:
+ break;
}
/* X does not match, so try its subexpressions. */
@@ -1134,19 +1157,30 @@ dead_or_set_regno_p (insn, test_regno)
int regno, endregno;
rtx link;
- /* See if there is a death note for something that includes TEST_REGNO. */
- for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
+ /* REG_READ notes are not normally maintained after reload, so we
+ ignore them if the are invalid. */
+ if (! reload_completed
+#ifdef PRESERVE_DEATH_INFO_REGNO_P
+ || PRESERVE_DEATH_INFO_REGNO_P (test_regno)
+#endif
+ )
{
- if (REG_NOTE_KIND (link) != REG_DEAD || GET_CODE (XEXP (link, 0)) != REG)
- continue;
+ /* See if there is a death note for something that includes
+ TEST_REGNO. */
+ for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
+ {
+ if (REG_NOTE_KIND (link) != REG_DEAD
+ || GET_CODE (XEXP (link, 0)) != REG)
+ continue;
- regno = REGNO (XEXP (link, 0));
- endregno = (regno >= FIRST_PSEUDO_REGISTER ? regno + 1
- : regno + HARD_REGNO_NREGS (regno,
- GET_MODE (XEXP (link, 0))));
+ regno = REGNO (XEXP (link, 0));
+ endregno = (regno >= FIRST_PSEUDO_REGISTER ? regno + 1
+ : regno + HARD_REGNO_NREGS (regno,
+ GET_MODE (XEXP (link, 0))));
- if (test_regno >= regno && test_regno < endregno)
- return 1;
+ if (test_regno >= regno && test_regno < endregno)
+ return 1;
+ }
}
if (GET_CODE (insn) == CALL_INSN
@@ -1404,6 +1438,9 @@ volatile_insn_p (x)
case ASM_OPERANDS:
if (MEM_VOLATILE_P (x))
return 1;
+
+ default:
+ break;
}
/* Recursively scan the operands of this expression. */
@@ -1467,6 +1504,9 @@ volatile_refs_p (x)
case ASM_OPERANDS:
if (MEM_VOLATILE_P (x))
return 1;
+
+ default:
+ break;
}
/* Recursively scan the operands of this expression. */
@@ -1539,6 +1579,9 @@ side_effects_p (x)
case ASM_OPERANDS:
if (MEM_VOLATILE_P (x))
return 1;
+
+ default:
+ break;
}
/* Recursively scan the operands of this expression. */
@@ -1607,16 +1650,20 @@ may_trap_p (x)
case MOD:
case UDIV:
case UMOD:
- if (! CONSTANT_P (XEXP (x, 1)))
+ if (! CONSTANT_P (XEXP (x, 1))
+ || GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT)
return 1;
/* This was const0_rtx, but by not using that,
we can link this file into other programs. */
if (GET_CODE (XEXP (x, 1)) == CONST_INT && INTVAL (XEXP (x, 1)) == 0)
return 1;
+ break;
+
case EXPR_LIST:
/* An EXPR_LIST is used to represent a function call. This
certainly may trap. */
return 1;
+
default:
/* Any floating arithmetic may trap. */
if (GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT)
@@ -1675,6 +1722,9 @@ inequality_comparisons_p (x)
case GE:
case GEU:
return 1;
+
+ default:
+ break;
}
len = GET_RTX_LENGTH (code);
@@ -1830,6 +1880,9 @@ replace_regs (x, reg_map, nregs, replace_dest)
SET_SRC (x) = replace_regs (SET_SRC (x), reg_map, nregs, 0);
return x;
+
+ default:
+ break;
}
fmt = GET_RTX_FORMAT (code);
@@ -1847,3 +1900,94 @@ replace_regs (x, reg_map, nregs, replace_dest)
}
return x;
}
+
+/* Return 1 if X, the SRC_SRC of SET of (pc) contain a REG or MEM that is
+ not in the constant pool and not in the condition of an IF_THEN_ELSE. */
+
+static int
+jmp_uses_reg_or_mem (x)
+ rtx x;
+{
+ enum rtx_code code = GET_CODE (x);
+ int i, j;
+ char *fmt;
+
+ switch (code)
+ {
+ case CONST:
+ case LABEL_REF:
+ case PC:
+ return 0;
+
+ case REG:
+ return 1;
+
+ case MEM:
+ return ! (GET_CODE (XEXP (x, 0)) == SYMBOL_REF
+ && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0)));
+
+ case IF_THEN_ELSE:
+ return (jmp_uses_reg_or_mem (XEXP (x, 1))
+ || jmp_uses_reg_or_mem (XEXP (x, 2)));
+
+ case PLUS: case MINUS: case MULT:
+ return (jmp_uses_reg_or_mem (XEXP (x, 0))
+ || jmp_uses_reg_or_mem (XEXP (x, 1)));
+ }
+
+ fmt = GET_RTX_FORMAT (code);
+ for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
+ {
+ if (fmt[i] == 'e'
+ && jmp_uses_reg_or_mem (XEXP (x, i)))
+ return 1;
+
+ if (fmt[i] == 'E')
+ for (j = 0; j < XVECLEN (x, i); j++)
+ if (jmp_uses_reg_or_mem (XVECEXP (x, i, j)))
+ return 1;
+ }
+
+ return 0;
+}
+
+/* Return nonzero if INSN is an indirect jump (aka computed jump).
+
+ Tablejumps and casesi insns are not considered indirect jumps;
+ we can recognize them by a (use (lael_ref)). */
+
+int
+computed_jump_p (insn)
+ rtx insn;
+{
+ int i;
+ if (GET_CODE (insn) == JUMP_INSN)
+ {
+ rtx pat = PATTERN (insn);
+ int computed_jump = 0;
+
+ if (GET_CODE (pat) == PARALLEL)
+ {
+ int len = XVECLEN (pat, 0);
+ int has_use_labelref = 0;
+
+ for (i = len - 1; i >= 0; i--)
+ if (GET_CODE (XVECEXP (pat, 0, i)) == USE
+ && (GET_CODE (XEXP (XVECEXP (pat, 0, i), 0))
+ == LABEL_REF))
+ has_use_labelref = 1;
+
+ if (! has_use_labelref)
+ for (i = len - 1; i >= 0; i--)
+ if (GET_CODE (XVECEXP (pat, 0, i)) == SET
+ && SET_DEST (XVECEXP (pat, 0, i)) == pc_rtx
+ && jmp_uses_reg_or_mem (SET_SRC (XVECEXP (pat, 0, i))))
+ return 1;
+ }
+ else if (GET_CODE (pat) == SET
+ && SET_DEST (pat) == pc_rtx
+ && jmp_uses_reg_or_mem (SET_SRC (pat)))
+ return 1;
+ }
+ return 0;
+}
diff --git a/gcc/scan-decls.c b/gcc/scan-decls.c
index 253f3fc22b3..a5fb8741fd6 100644
--- a/gcc/scan-decls.c
+++ b/gcc/scan-decls.c
@@ -1,5 +1,5 @@
/* scan-decls.c - Extracts declarations from cpp output.
- Copyright (C) 1993, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1993, 1995, 1997 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -81,6 +81,7 @@ scan_decls (pfile, argc, argv)
char **argv;
{
int saw_extern, saw_inline;
+ int start_written;
int old_written;
/* If declarator_start is non-zero, it marks the start of the current
declarator. If it is zero, we are either still parsing the
@@ -91,6 +92,7 @@ scan_decls (pfile, argc, argv)
new_statement:
CPP_SET_WRITTEN (pfile, 0);
+ start_written = 0;
token = cpp_get_token (pfile);
handle_statement:
@@ -122,9 +124,6 @@ scan_decls (pfile, argc, argv)
declarator_start = 0;
for (;;)
{
- int start_written = CPP_WRITTEN (pfile);
- token = cpp_get_token (pfile);
- handle_token:
switch (token)
{
case CPP_LPAREN:
@@ -225,7 +224,7 @@ scan_decls (pfile, argc, argv)
}
}
else
- goto handle_token;
+ continue;
break;
}
/* This may be the name of a variable or function. */
@@ -248,5 +247,8 @@ scan_decls (pfile, argc, argv)
default:
prev_id_start = 0;
}
+
+ start_written = CPP_WRITTEN (pfile);
+ token = cpp_get_token (pfile);
}
}
diff --git a/gcc/sched.c b/gcc/sched.c
index 84fe84dceaa..abc98ddd68a 100644
--- a/gcc/sched.c
+++ b/gcc/sched.c
@@ -1,5 +1,5 @@
/* Instruction scheduling pass.
- Copyright (C) 1992, 93-96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1992, 93-97, 1998 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com)
Enhanced by, and currently maintained by, Jim Wilson (wilson@cygnus.com)
@@ -117,8 +117,8 @@ Boston, MA 02111-1307, USA. */
other NOTE insns are grouped in their same relative order at the
beginning of basic blocks that have been scheduled. */
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "basic-block.h"
#include "regs.h"
@@ -324,7 +324,7 @@ static void sched_note_set PROTO((int, rtx, int));
static int rank_for_schedule PROTO((rtx *, rtx *));
static void swap_sort PROTO((rtx *, int));
static void queue_insn PROTO((rtx, int));
-static int birthing_insn PROTO((rtx));
+static int birthing_insn_p PROTO((rtx));
static void adjust_priority PROTO((rtx));
static int schedule_insn PROTO((rtx, rtx *, int, int));
static int schedule_select PROTO((rtx *, int, int, FILE *));
@@ -735,34 +735,30 @@ memrefs_conflict_p (xsize, x, ysize, y, c)
return 1;
}
- if (GET_CODE (x) == GET_CODE (y))
- switch (GET_CODE (x))
- {
- case MULT:
- {
- /* Handle cases where we expect the second operands to be the
- same, and check only whether the first operand would conflict
- or not. */
- rtx x0, y0;
- rtx x1 = canon_rtx (XEXP (x, 1));
- rtx y1 = canon_rtx (XEXP (y, 1));
- if (! rtx_equal_for_memref_p (x1, y1))
- return 1;
- x0 = canon_rtx (XEXP (x, 0));
- y0 = canon_rtx (XEXP (y, 0));
- if (rtx_equal_for_memref_p (x0, y0))
- return (xsize == 0 || ysize == 0
- || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
-
- /* Can't properly adjust our sizes. */
- if (GET_CODE (x1) != CONST_INT)
- return 1;
- xsize /= INTVAL (x1);
- ysize /= INTVAL (x1);
- c /= INTVAL (x1);
- return memrefs_conflict_p (xsize, x0, ysize, y0, c);
- }
- }
+ if (GET_CODE (x) == GET_CODE (y) && GET_CODE (x) == MULT)
+ {
+ /* Handle cases where we expect the second operands to be the
+ same, and check only whether the first operand would conflict
+ or not. */
+ rtx x0, y0;
+ rtx x1 = canon_rtx (XEXP (x, 1));
+ rtx y1 = canon_rtx (XEXP (y, 1));
+ if (! rtx_equal_for_memref_p (x1, y1))
+ return 1;
+ x0 = canon_rtx (XEXP (x, 0));
+ y0 = canon_rtx (XEXP (y, 0));
+ if (rtx_equal_for_memref_p (x0, y0))
+ return (xsize == 0 || ysize == 0
+ || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
+
+ /* Can't properly adjust our sizes. */
+ if (GET_CODE (x1) != CONST_INT)
+ return 1;
+ xsize /= INTVAL (x1);
+ ysize /= INTVAL (x1);
+ c /= INTVAL (x1);
+ return memrefs_conflict_p (xsize, x0, ysize, y0, c);
+ }
if (CONSTANT_P (x))
{
@@ -994,17 +990,19 @@ remove_dependence (insn, elem)
rtx prev, link;
int found = 0;
- for (prev = 0, link = LOG_LINKS (insn); link;
- prev = link, link = XEXP (link, 1))
+ for (prev = 0, link = LOG_LINKS (insn); link; link = XEXP (link, 1))
{
if (XEXP (link, 0) == elem)
{
+ RTX_INTEGRATED_P (link) = 1;
if (prev)
XEXP (prev, 1) = XEXP (link, 1);
else
LOG_LINKS (insn) = XEXP (link, 1);
found = 1;
}
+ else
+ prev = link;
}
if (! found)
@@ -1482,6 +1480,11 @@ priority (insn)
{
rtx x = XEXP (prev, 0);
+ /* If this was a duplicate of a dependence we already deleted,
+ ignore it. */
+ if (RTX_INTEGRATED_P (prev))
+ continue;
+
/* A dependence pointing to a note or deleted insn is always
obsolete, because sched_analyze_insn will have created any
necessary new dependences which replace it. Notes and deleted
@@ -2024,6 +2027,9 @@ sched_analyze_2 (x, insn)
sched_analyze_2 (XEXP (x, 0), insn);
sched_analyze_1 (x, insn);
return;
+
+ default:
+ break;
}
/* Other cases: walk the insn. */
@@ -2886,12 +2892,7 @@ attach_deaths (x, insn, set_p)
#endif
&& regno != STACK_POINTER_REGNUM)
{
- /* ??? It is perhaps a dead_or_set_p bug that it does
- not check for REG_UNUSED notes itself. This is necessary
- for the case where the SET_DEST is a subreg of regno, as
- dead_or_set_p handles subregs specially. */
- if (! all_needed && ! dead_or_set_p (insn, x)
- && ! find_reg_note (insn, REG_UNUSED, x))
+ if (! all_needed && ! dead_or_set_p (insn, x))
{
/* Check for the case where the register dying partially
overlaps the register set by this insn. */
@@ -2950,17 +2951,20 @@ attach_deaths (x, insn, set_p)
return;
case SUBREG:
+ attach_deaths (SUBREG_REG (x), insn,
+ set_p && ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)))
+ <= UNITS_PER_WORD)
+ || (GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)))
+ == GET_MODE_SIZE (GET_MODE ((x))))));
+ return;
+
case STRICT_LOW_PART:
- /* These two cases preserve the value of SET_P, so handle them
- separately. */
- attach_deaths (XEXP (x, 0), insn, set_p);
+ attach_deaths (XEXP (x, 0), insn, 0);
return;
case ZERO_EXTRACT:
case SIGN_EXTRACT:
- /* This case preserves the value of SET_P for the first operand, but
- clears it for the other two. */
- attach_deaths (XEXP (x, 0), insn, set_p);
+ attach_deaths (XEXP (x, 0), insn, 0);
attach_deaths (XEXP (x, 1), insn, 0);
attach_deaths (XEXP (x, 2), insn, 0);
return;
@@ -4363,6 +4367,7 @@ update_flow_info (notes, first, last, orig_insn)
/* ??? This won't handle multiple word registers correctly,
but should be good enough for now. */
if (REG_NOTE_KIND (note) == REG_UNUSED
+ && GET_CODE (XEXP (note, 0)) != SCRATCH
&& ! dead_or_set_p (insn, XEXP (note, 0)))
PUT_REG_NOTE_KIND (note, REG_DEAD);
@@ -4670,21 +4675,29 @@ update_flow_info (notes, first, last, orig_insn)
for (insn = first; ; insn = NEXT_INSN (insn))
{
- set = single_set (insn);
- if (set)
+ rtx pat = PATTERN (insn);
+ int i = GET_CODE (pat) == PARALLEL ? XVECLEN (pat, 0) : 0;
+ set = pat;
+ for (;;)
{
- if (GET_CODE (SET_DEST (set)) == REG
- && REGNO (SET_DEST (set)) == REGNO (orig_dest))
- {
- found_orig_dest = 1;
- break;
- }
- else if (GET_CODE (SET_DEST (set)) == SUBREG
- && SUBREG_REG (SET_DEST (set)) == orig_dest)
+ if (GET_CODE (set) == SET)
{
- found_split_dest = 1;
- break;
+ if (GET_CODE (SET_DEST (set)) == REG
+ && REGNO (SET_DEST (set)) == REGNO (orig_dest))
+ {
+ found_orig_dest = 1;
+ break;
+ }
+ else if (GET_CODE (SET_DEST (set)) == SUBREG
+ && SUBREG_REG (SET_DEST (set)) == orig_dest)
+ {
+ found_split_dest = 1;
+ break;
+ }
}
+ if (--i < 0)
+ break;
+ set = XVECEXP (pat, 0, i);
}
if (insn == last)
@@ -4784,7 +4797,7 @@ schedule_insns (dump_file)
/* Create an insn here so that we can hang dependencies off of it later. */
sched_before_next_call
= gen_rtx (INSN, VOIDmode, 0, NULL_RTX, NULL_RTX,
- NULL_RTX, 0, NULL_RTX, 0);
+ NULL_RTX, 0, NULL_RTX, NULL_RTX);
/* Initialize the unused_*_lists. We can't use the ones left over from
the previous function, because gcc has freed that memory. We can use
diff --git a/gcc/sdbout.c b/gcc/sdbout.c
index 046ec3205af..3a5d7a4ac1b 100644
--- a/gcc/sdbout.c
+++ b/gcc/sdbout.c
@@ -1,5 +1,5 @@
/* Output sdb-format symbol table information from GNU compiler.
- Copyright (C) 1988, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1988, 92-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -44,9 +44,9 @@ AT&T C compiler. From the example below I would conclude the following:
#ifdef SDB_DEBUGGING_INFO
+#include <stdio.h>
#include "tree.h"
#include "rtl.h"
-#include <stdio.h>
#include "regs.h"
#include "defaults.h"
#include "flags.h"
@@ -531,10 +531,14 @@ plain_type_1 (type, level)
{
char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
+ if (!strcmp (name, "char"))
+ return T_CHAR;
if (!strcmp (name, "unsigned char"))
return T_UCHAR;
if (!strcmp (name, "signed char"))
return T_CHAR;
+ if (!strcmp (name, "int"))
+ return T_INT;
if (!strcmp (name, "unsigned int"))
return T_UINT;
if (!strcmp (name, "short int"))
@@ -547,12 +551,12 @@ plain_type_1 (type, level)
return T_ULONG;
}
+ if (size == INT_TYPE_SIZE)
+ return (TREE_UNSIGNED (type) ? T_UINT : T_INT);
if (size == CHAR_TYPE_SIZE)
return (TREE_UNSIGNED (type) ? T_UCHAR : T_CHAR);
if (size == SHORT_TYPE_SIZE)
return (TREE_UNSIGNED (type) ? T_USHORT : T_SHORT);
- if (size == INT_TYPE_SIZE)
- return (TREE_UNSIGNED (type) ? T_UINT : T_INT);
if (size == LONG_TYPE_SIZE)
return (TREE_UNSIGNED (type) ? T_ULONG : T_LONG);
if (size == LONG_LONG_TYPE_SIZE) /* better than nothing */
@@ -570,6 +574,9 @@ plain_type_1 (type, level)
#ifdef EXTENDED_SDB_BASIC_TYPES
if (precision == LONG_DOUBLE_TYPE_SIZE)
return T_LNGDBL;
+#else
+ if (precision == LONG_DOUBLE_TYPE_SIZE)
+ return T_DOUBLE; /* better than nothing */
#endif
return 0;
}
@@ -584,6 +591,8 @@ plain_type_1 (type, level)
if (sdb_n_dims < SDB_MAX_DIM)
sdb_dims[sdb_n_dims++]
= (TYPE_DOMAIN (type)
+ && TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) == INTEGER_CST
+ && TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) == INTEGER_CST
? (TREE_INT_CST_LOW (TYPE_MAX_VALUE (TYPE_DOMAIN (type)))
- TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) + 1)
: 0);
@@ -1056,8 +1065,9 @@ sdbout_field_types (type)
tree type;
{
tree tail;
+
for (tail = TYPE_FIELDS (type); tail; tail = TREE_CHAIN (tail))
- if (TREE_CODE (TREE_TYPE (tail)) == POINTER_TYPE)
+ if (POINTER_TYPE_P (TREE_TYPE (tail)))
sdbout_one_type (TREE_TYPE (TREE_TYPE (tail)));
else
sdbout_one_type (TREE_TYPE (tail));
diff --git a/gcc/stmt.c b/gcc/stmt.c
index 0dcb4cba8cb..02e4bf23b69 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -1,5 +1,5 @@
/* Expands front end tree to back end RTL for GNU C-Compiler
- Copyright (C) 1987, 88, 89, 92-6, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 89, 92-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -445,6 +445,12 @@ struct label_chain
struct label_chain *next;
tree label;
};
+
+
+/* Non-zero if we are using EH to handle cleanus. */
+static int using_eh_for_cleanups_p = 0;
+
+
static void expand_goto_internal PROTO((tree, rtx, rtx));
static void bc_expand_goto_internal PROTO((enum bytecode_opcode,
struct bc_label *, tree));
@@ -489,6 +495,12 @@ extern rtx bc_allocate_local ();
extern rtx bc_allocate_variable_array ();
void
+using_eh_for_cleanups ()
+{
+ using_eh_for_cleanups_p = 1;
+}
+
+void
init_stmt ()
{
gcc_obstack_init (&stmt_obstack);
@@ -627,6 +639,11 @@ expand_computed_goto (exp)
#endif
emit_queue ();
+ /* Be sure the function is executable. */
+ if (flag_check_memory_usage)
+ emit_library_call (chkr_check_exec_libfunc, 1,
+ VOIDmode, 1, x, ptr_mode);
+
do_pending_stack_adjust ();
emit_indirect_jump (x);
}
@@ -1352,6 +1369,12 @@ expand_asm (body)
return;
}
+ if (flag_check_memory_usage)
+ {
+ error ("`asm' cannot be used with `-fcheck-memory-usage'");
+ return;
+ }
+
if (TREE_CODE (body) == ADDR_EXPR)
body = TREE_OPERAND (body, 0);
@@ -1398,12 +1421,22 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
/* The insn we have emitted. */
rtx insn;
+ /* An ASM with no outputs needs to be treated as volatile, for now. */
+ if (noutputs == 0)
+ vol = 1;
+
if (output_bytecode)
{
error ("`asm' is invalid when generating bytecode");
return;
}
+ if (flag_check_memory_usage)
+ {
+ error ("`asm' cannot be used with `-fcheck-memory-usage'");
+ return;
+ }
+
/* Count the number of meaningful clobbered registers, ignoring what
we would ignore later. */
nclobbers = 0;
@@ -1502,7 +1535,8 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
mark_addressable (TREE_VALUE (tail));
output_rtx[i]
- = expand_expr (TREE_VALUE (tail), NULL_RTX, VOIDmode, 0);
+ = expand_expr (TREE_VALUE (tail), NULL_RTX, VOIDmode,
+ EXPAND_MEMORY_USE_WO);
if (! allows_reg && GET_CODE (output_rtx[i]) != MEM)
error ("output number %d not directly addressable", i);
@@ -1535,6 +1569,7 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
body = gen_rtx (ASM_OPERANDS, VOIDmode,
TREE_STRING_POINTER (string), "", 0, argvec, constraints,
filename, line);
+
MEM_VOLATILE_P (body) = vol;
/* Eval the inputs and put them into ARGVEC.
@@ -1588,7 +1623,11 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
case '5': case '6': case '7': case '8': case '9':
if (TREE_STRING_POINTER (TREE_PURPOSE (tail))[j]
>= '0' + noutputs)
- error ("matching constraint references invalid operand number");
+ {
+ error
+ ("matching constraint references invalid operand number");
+ return;
+ }
/* ... fall through ... */
@@ -1721,7 +1760,7 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
continue;
}
- /* Ignore unknown register, error already signalled. */
+ /* Ignore unknown register, error already signaled. */
continue;
}
@@ -2837,6 +2876,10 @@ expand_return (retval)
expand_value_return (const0_rtx);
return;
}
+ break;
+
+ default:
+ break;
}
}
#endif /* HAVE_return */
@@ -3093,10 +3136,8 @@ expand_start_bindings (exit_flag)
nesting_stack = thisblock;
if (!output_bytecode)
- {
- /* Make a new level for allocating stack slots. */
- push_temp_slots ();
- }
+ /* Make a new level for allocating stack slots. */
+ push_temp_slots_for_block ();
}
/* Specify the scope of temporaries created by TARGET_EXPRs. Similar
@@ -3242,7 +3283,8 @@ expand_end_bindings (vars, mark_ends, dont_jump_in)
if (warn_unused)
for (decl = vars; decl; decl = TREE_CHAIN (decl))
if (! TREE_USED (decl) && TREE_CODE (decl) == VAR_DECL
- && ! DECL_IN_SYSTEM_HEADER (decl))
+ && ! DECL_IN_SYSTEM_HEADER (decl)
+ && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
warning_with_decl (decl, "unused variable `%s'");
if (thisblock->exit_label)
@@ -3376,10 +3418,10 @@ expand_end_bindings (vars, mark_ends, dont_jump_in)
emit_label (afterward);
}
- /* Don't allow jumping into a block that has cleanups or a stack level. */
+ /* Don't allow jumping into a block that has a stack level.
+ Cleanups are allowed, though. */
if (dont_jump_in
- || thisblock->data.block.stack_level != 0
- || thisblock->data.block.cleanups != 0)
+ || thisblock->data.block.stack_level != 0)
{
struct label_chain *chain;
@@ -3390,7 +3432,7 @@ expand_end_bindings (vars, mark_ends, dont_jump_in)
DECL_TOO_LATE (chain->label) = 1;
/* If any goto without a fixup came to this label,
that must be an error, because gotos without fixups
- come from outside all saved stack-levels and all cleanups. */
+ come from outside all saved stack-levels. */
if (TREE_ADDRESSABLE (chain->label))
error_with_decl (chain->label,
"label `%s' used before containing binding contour");
@@ -3557,7 +3599,9 @@ expand_decl (decl)
&& TREE_CODE (type) == REAL_TYPE)
&& ! TREE_THIS_VOLATILE (decl)
&& ! TREE_ADDRESSABLE (decl)
- && (DECL_REGISTER (decl) || ! obey_regdecls))
+ && (DECL_REGISTER (decl) || ! obey_regdecls)
+ /* if -fcheck-memory-usage, check all variables. */
+ && ! flag_check_memory_usage)
{
/* Automatic variable that can go in a register. */
int unsignedp = TREE_UNSIGNED (type);
@@ -3567,7 +3611,7 @@ expand_decl (decl)
DECL_RTL (decl) = gen_reg_rtx (reg_mode);
mark_user_reg (DECL_RTL (decl));
- if (TREE_CODE (type) == POINTER_TYPE)
+ if (POINTER_TYPE_P (type))
mark_reg_pointer (DECL_RTL (decl),
(TYPE_ALIGN (TREE_TYPE (TREE_TYPE (decl)))
/ BITS_PER_UNIT));
@@ -3771,8 +3815,9 @@ expand_decl_init (decl)
if (DECL_INITIAL (decl) == error_mark_node)
{
enum tree_code code = TREE_CODE (TREE_TYPE (decl));
+
if (code == INTEGER_TYPE || code == REAL_TYPE || code == ENUMERAL_TYPE
- || code == POINTER_TYPE)
+ || code == POINTER_TYPE || code == REFERENCE_TYPE)
expand_assignment (decl, convert (TREE_TYPE (decl), integer_zero_node),
0, 0);
emit_queue ();
@@ -3854,8 +3899,7 @@ bc_expand_decl_init (decl)
enum tree_code code = TREE_CODE (TREE_TYPE (decl));
if (code == INTEGER_TYPE || code == REAL_TYPE || code == ENUMERAL_TYPE
- || code == POINTER_TYPE)
-
+ || code == POINTER_TYPE || code == REFERENCE_TYPE)
expand_assignment (TREE_TYPE (decl), decl, 0, 0);
}
else if (DECL_INITIAL (decl))
@@ -3954,8 +3998,11 @@ expand_decl_cleanup (decl, cleanup)
/* If this was optimized so that there is no exception region for the
cleanup, then mark the TREE_LIST node, so that we can later tell
if we need to call expand_eh_region_end. */
- if (expand_eh_region_start_tree (decl, cleanup))
+ if (! using_eh_for_cleanups_p
+ || expand_eh_region_start_tree (decl, cleanup))
TREE_ADDRESSABLE (t) = 1;
+ /* If that started a new EH region, we're in a new block. */
+ thisblock = block_stack;
if (cond_context)
{
@@ -3976,6 +4023,23 @@ expand_decl_cleanup (decl, cleanup)
return 1;
}
+/* Like expand_decl_cleanup, but suppress generating an exception handler
+ to perform the cleanup. */
+
+int
+expand_decl_cleanup_no_eh (decl, cleanup)
+ tree decl, cleanup;
+{
+ int save_eh = using_eh_for_cleanups_p;
+ int result;
+
+ using_eh_for_cleanups_p = 0;
+ result = expand_decl_cleanup (decl, cleanup);
+ using_eh_for_cleanups_p = save_eh;
+
+ return result;
+}
+
/* Arrange for the top element of the dynamic cleanup chain to be
popped if we exit the current binding contour. DECL is the
associated declaration, if any, otherwise NULL_TREE. If the
@@ -4019,7 +4083,7 @@ expand_dcc_cleanup (decl)
/* Arrange for the top element of the dynamic handler chain to be
popped if we exit the current binding contour. DECL is the
- assciated declaration, if any, otherwise NULL_TREE. If the current
+ associated declaration, if any, otherwise NULL_TREE. If the current
contour is left via an exception, then __sjthrow will pop the top
element off the dynamic handler chain. The code that avoids doing
the action we push into the handler chain in the exceptional case
@@ -4178,7 +4242,16 @@ expand_cleanups (list, dont_do, in_fixup, reachable)
the target. Though the cleanups are expanded multiple
times, the control paths are non-overlapping so the
cleanups will not be executed twice. */
+
+ /* We may need to protect fixups with rethrow regions. */
+ int protect = (in_fixup && ! TREE_ADDRESSABLE (tail));
+
+ if (protect)
+ expand_fixup_region_start ();
+
expand_expr (TREE_VALUE (tail), const0_rtx, VOIDmode, 0);
+ if (protect)
+ expand_fixup_region_end (TREE_VALUE (tail));
free_temp_slots ();
}
}
@@ -4189,23 +4262,29 @@ expand_cleanups (list, dont_do, in_fixup, reachable)
context, so that any cleanup actions we register with
expand_decl_init will be properly conditionalized when those
cleanup actions are later performed. Must be called before any
- expression (tree) is expanded that is within a contidional context. */
+ expression (tree) is expanded that is within a conditional context. */
void
-start_cleanup_deferal ()
+start_cleanup_deferral ()
{
- ++block_stack->data.block.conditional_code;
+ /* block_stack can be NULL if we are inside the parameter list. It is
+ OK to do nothing, because cleanups aren't possible here. */
+ if (block_stack)
+ ++block_stack->data.block.conditional_code;
}
/* Mark the end of a conditional region of code. Because cleanup
- deferals may be nested, we may still be in a conditional region
+ deferrals may be nested, we may still be in a conditional region
after we end the currently deferred cleanups, only after we end all
deferred cleanups, are we back in unconditional code. */
void
-end_cleanup_deferal ()
+end_cleanup_deferral ()
{
- --block_stack->data.block.conditional_code;
+ /* block_stack can be NULL if we are inside the parameter list. It is
+ OK to do nothing, because cleanups aren't possible here. */
+ if (block_stack)
+ --block_stack->data.block.conditional_code;
}
/* Move all cleanups from the current block_stack
@@ -4313,7 +4392,7 @@ expand_start_case (exit_flag, expr, type, printname)
thiscase->data.case_stmt.start = get_last_insn ();
- start_cleanup_deferal ();
+ start_cleanup_deferral ();
}
@@ -4366,7 +4445,7 @@ expand_start_case_dummy ()
thiscase->data.case_stmt.num_ranges = 0;
case_stack = thiscase;
nesting_stack = thiscase;
- start_cleanup_deferal ();
+ start_cleanup_deferral ();
}
/* End a dummy case statement. */
@@ -4374,7 +4453,7 @@ expand_start_case_dummy ()
void
expand_end_case_dummy ()
{
- end_cleanup_deferal ();
+ end_cleanup_deferral ();
POPSTACK (case_stack);
}
@@ -4481,11 +4560,14 @@ pushcase (value, converter, label, duplicate)
return 0;
}
-/* Like pushcase but this case applies to all values
- between VALUE1 and VALUE2 (inclusive).
- The return value is the same as that of pushcase
- but there is one additional error code:
- 4 means the specified range was empty. */
+/* Like pushcase but this case applies to all values between VALUE1 and
+ VALUE2 (inclusive). If VALUE1 is NULL, the range starts at the lowest
+ value of the index type and ends at VALUE2. If VALUE2 is NULL, the range
+ starts at VALUE1 and ends at the highest value of the index type.
+ If both are NULL, this case applies to all values.
+
+ The return value is the same as that of pushcase but there is one
+ additional error code: 4 means the specified range was empty. */
int
pushcase_range (value1, value2, converter, label, duplicate)
@@ -4503,10 +4585,6 @@ pushcase_range (value1, value2, converter, label, duplicate)
if (! (case_stack && case_stack->data.case_stmt.start))
return 1;
- /* Fail if the range is empty. */
- if (tree_int_cst_lt (value2, value1))
- return 4;
-
if (stack_block_stack
&& stack_block_stack->depth > case_stack->depth)
return 5;
@@ -4539,20 +4617,28 @@ pushcase_range (value1, value2, converter, label, duplicate)
}
case_stack->data.case_stmt.seenlabel = 1;
- /* Convert VALUEs to type in which the comparisons are nominally done. */
- if (value1 == 0) /* Negative infinity. */
+ /* Convert VALUEs to type in which the comparisons are nominally done
+ and replace any unspecified value with the corresponding bound. */
+ if (value1 == 0)
value1 = TYPE_MIN_VALUE (index_type);
- value1 = (*converter) (nominal_type, value1);
-
- if (value2 == 0) /* Positive infinity. */
+ if (value2 == 0)
value2 = TYPE_MAX_VALUE (index_type);
+
+ /* Fail if the range is empty. Do this before any conversion since
+ we want to allow out-of-range empty ranges. */
+ if (tree_int_cst_lt (value2, value1))
+ return 4;
+
+ value1 = (*converter) (nominal_type, value1);
value2 = (*converter) (nominal_type, value2);
/* Fail if these values are out of range. */
- if (! int_fits_type_p (value1, index_type))
+ if (TREE_CONSTANT_OVERFLOW (value1)
+ || ! int_fits_type_p (value1, index_type))
return 3;
- if (! int_fits_type_p (value2, index_type))
+ if (TREE_CONSTANT_OVERFLOW (value2)
+ || ! int_fits_type_p (value2, index_type))
return 3;
return add_case_node (value1, value2, label, duplicate);
@@ -5368,7 +5454,7 @@ expand_end_case (orig_index)
if (count != 0)
range = fold (build (MINUS_EXPR, index_type, maxval, minval));
- end_cleanup_deferal ();
+ end_cleanup_deferral ();
if (count == 0)
{
@@ -5638,7 +5724,7 @@ expand_end_case (orig_index)
thiscase->data.case_stmt.start);
}
else
- end_cleanup_deferal ();
+ end_cleanup_deferral ();
if (thiscase->exit_label)
emit_label (thiscase->exit_label);
diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c
index 7c4b4f69c7c..a4698157cc7 100644
--- a/gcc/stor-layout.c
+++ b/gcc/stor-layout.c
@@ -306,11 +306,7 @@ layout_record (rec)
tree rec;
{
register tree field;
-#ifdef STRUCTURE_SIZE_BOUNDARY
- unsigned record_align = MAX (STRUCTURE_SIZE_BOUNDARY, TYPE_ALIGN (rec));
-#else
unsigned record_align = MAX (BITS_PER_UNIT, TYPE_ALIGN (rec));
-#endif
/* These must be laid out *after* the record is. */
tree pending_statics = NULL_TREE;
/* Record size so far is CONST_SIZE + VAR_SIZE bits,
@@ -324,6 +320,11 @@ layout_record (rec)
that we know VAR_SIZE has. */
register int var_align = BITS_PER_UNIT;
+#ifdef STRUCTURE_SIZE_BOUNDARY
+ /* Packed structures don't need to have minimum size. */
+ if (! TYPE_PACKED (rec))
+ record_align = MAX (record_align, STRUCTURE_SIZE_BOUNDARY);
+#endif
for (field = TYPE_FIELDS (rec); field; field = TREE_CHAIN (field))
{
@@ -389,7 +390,7 @@ layout_record (rec)
int type_align = TYPE_ALIGN (TREE_TYPE (field));
if (maximum_field_alignment != 0)
type_align = MIN (type_align, maximum_field_alignment);
- else if (TYPE_PACKED (rec))
+ else if (DECL_PACKED (field))
type_align = MIN (type_align, BITS_PER_UNIT);
record_align = MAX (record_align, type_align);
@@ -463,11 +464,15 @@ layout_record (rec)
if (maximum_field_alignment != 0)
type_align = MIN (type_align, maximum_field_alignment);
- else if (TYPE_PACKED (rec))
+ /* ??? This test is opposite the test in the containing if
+ statement, so this code is unreachable currently. */
+ else if (DECL_PACKED (field))
type_align = MIN (type_align, BITS_PER_UNIT);
/* A bit field may not span the unit of alignment of its type.
Advance to next boundary if necessary. */
+ /* ??? This code should match the code above for the
+ PCC_BITFIELD_TYPE_MATTERS case. */
if (const_size / type_align
!= (const_size + field_size - 1) / type_align)
const_size = CEIL (const_size, type_align) * type_align;
@@ -563,11 +568,7 @@ layout_union (rec)
tree rec;
{
register tree field;
-#ifdef STRUCTURE_SIZE_BOUNDARY
- unsigned union_align = STRUCTURE_SIZE_BOUNDARY;
-#else
unsigned union_align = BITS_PER_UNIT;
-#endif
/* The size of the union, based on the fields scanned so far,
is max (CONST_SIZE, VAR_SIZE).
@@ -575,6 +576,12 @@ layout_union (rec)
register int const_size = 0;
register tree var_size = 0;
+#ifdef STRUCTURE_SIZE_BOUNDARY
+ /* Packed structures don't need to have minimum size. */
+ if (! TYPE_PACKED (rec))
+ union_align = STRUCTURE_SIZE_BOUNDARY;
+#endif
+
/* If this is a QUAL_UNION_TYPE, we want to process the fields in
the reverse order in building the COND_EXPR that denotes its
size. We reverse them again later. */
@@ -691,6 +698,11 @@ layout_type (type)
of the language-specific code. */
abort ();
+ case BOOLEAN_TYPE: /* Used for Java, Pascal, and Chill. */
+ if (TYPE_PRECISION (type) == 0)
+ TYPE_PRECISION (type) = 1; /* default to one byte/boolean. */
+ /* ... fall through ... */
+
case INTEGER_TYPE:
case ENUMERAL_TYPE:
case CHAR_TYPE:
@@ -941,18 +953,7 @@ layout_type (type)
}
break;
- /* Pascal and Chill types */
- case BOOLEAN_TYPE: /* store one byte/boolean for now. */
- TYPE_MODE (type) = QImode;
- TYPE_SIZE (type) = size_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
- TYPE_PRECISION (type) = 1;
- TYPE_ALIGN (type) = GET_MODE_ALIGNMENT (TYPE_MODE (type));
- if (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
- && tree_int_cst_sgn (TYPE_MIN_VALUE (type)) >= 0)
- TREE_UNSIGNED (type) = 1;
- break;
-
- case SET_TYPE:
+ case SET_TYPE: /* Used by Chill and Pascal. */
if (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST
|| TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST)
abort();
@@ -1189,7 +1190,7 @@ get_best_mode (bitsize, bitpos, align, largest_mode, volatilep)
mode = GET_MODE_WIDER_MODE (mode))
{
unit = GET_MODE_BITSIZE (mode);
- if (bitpos / unit == (bitpos + bitsize - 1) / unit)
+ if ((bitpos % unit) + bitsize <= unit)
break;
}
diff --git a/gcc/stupid.c b/gcc/stupid.c
index b68b196bcaa..77cbab2ed60 100644
--- a/gcc/stupid.c
+++ b/gcc/stupid.c
@@ -42,8 +42,8 @@ Boston, MA 02111-1307, USA. */
pseudo reg is computed. Then the pseudo regs are ordered by priority
and assigned hard regs in priority order. */
-#include <stdio.h>
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "hard-reg-set.h"
#include "regs.h"
@@ -269,8 +269,11 @@ stupid_life_analysis (f, nregs, file)
register int r = reg_order[i];
/* Some regnos disappear from the rtl. Ignore them to avoid crash.
- Also don't allocate registers that cross a setjmp. */
- if (regno_reg_rtx[r] == 0 || regs_crosses_setjmp[r])
+ Also don't allocate registers that cross a setjmp, or live across
+ a call if this function receives a nonlocal goto. */
+ if (regno_reg_rtx[r] == 0 || regs_crosses_setjmp[r]
+ || (REG_N_CALLS_CROSSED (r) > 0
+ && current_function_has_nonlocal_label))
continue;
/* Now find the best hard-register class for this pseudo register */
diff --git a/gcc/texinfo.tex b/gcc/texinfo.tex
deleted file mode 100644
index 1d1e570cb27..00000000000
--- a/gcc/texinfo.tex
+++ /dev/null
@@ -1,4935 +0,0 @@
-%% TeX macros to handle Texinfo files.
-%% $Id: texinfo.tex,v 2.217 1997/07/14 17:43:41 karl Exp karl $
-
-% Copyright (C) 1985, 86, 88, 90, 91, 92, 93,
-% 94, 95, 96, 97 Free Software Foundation, Inc.
-
-%This texinfo.tex file 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.
-
-%This texinfo.tex file is distributed in the hope that it will be
-%useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-%of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%General Public License for more details.
-
-%You should have received a copy of the GNU General Public License
-%along with this texinfo.tex file; see the file COPYING. If not, write
-%to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-%Boston, MA 02111-1307, USA.
-
-
-%In other words, you are welcome to use, share and improve this program.
-%You are forbidden to forbid anyone else to use, share and improve
-%what you give them. Help stamp out software-hoarding!
-
-
-% Send bug reports to bug-texinfo@prep.ai.mit.edu.
-% Please include a *precise* test case in each bug report.
-
-
-% Make it possible to create a .fmt file just by loading this file:
-% if the underlying format is not loaded, start by loading it now.
-% Added by gildea November 1993.
-\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
-
-% This automatically updates the version number based on RCS.
-\def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
-\deftexinfoversion$Revision: 2.217 $
-\message{Loading texinfo package [Version \texinfoversion]:}
-
-% If in a .fmt file, print the version number
-% and turn on active characters that we couldn't do earlier because
-% they might have appeared in the input file name.
-\everyjob{\message{[Texinfo version \texinfoversion]}\message{}
- \catcode`+=\active \catcode`\_=\active}
-
-% Save some parts of plain tex whose names we will redefine.
-
-\let\ptexb=\b
-\let\ptexbullet=\bullet
-\let\ptexc=\c
-\let\ptexcomma=\,
-\let\ptexdot=\.
-\let\ptexdots=\dots
-\let\ptexend=\end
-\let\ptexequiv = \equiv
-\let\ptexi=\i
-\let\ptexlbrace=\{
-\let\ptexrbrace=\}
-\let\ptexstar=\*
-\let\ptext=\t
-
-% Be sure we're in horizontal mode when doing a tie, since we make space
-% equivalent to this in @example-like environments. Otherwise, a space
-% at the beginning of a line will start with \penalty -- and
-% since \penalty is valid in vertical mode, we'd end up putting the
-% penalty on the vertical list instead of in the new paragraph.
-{\catcode`@ = 11
- % Avoid using \@M directly, because that causes trouble
- % if the definition is written into an index file.
- \global\let\tiepenalty = \@M
- \gdef\tie{\leavevmode\penalty\tiepenalty\ }
-}
-
-
-\message{Basics,}
-\chardef\other=12
-
-% If this character appears in an error message or help string, it
-% starts a new line in the output.
-\newlinechar = `^^J
-
-% Set up fixed words for English.
-\ifx\putwordChapter\undefined{\gdef\putwordChapter{Chapter}}\fi%
-\def\putwordInfo{Info}%
-\ifx\putwordSee\undefined{\gdef\putwordSee{See}}\fi%
-\ifx\putwordsee\undefined{\gdef\putwordsee{see}}\fi%
-\ifx\putwordfile\undefined{\gdef\putwordfile{file}}\fi%
-\ifx\putwordpage\undefined{\gdef\putwordpage{page}}\fi%
-\ifx\putwordsection\undefined{\gdef\putwordsection{section}}\fi%
-\ifx\putwordSection\undefined{\gdef\putwordSection{Section}}\fi%
-\ifx\putwordTableofContents\undefined{\gdef\putwordTableofContents{Table of Contents}}\fi%
-\ifx\putwordShortContents\undefined{\gdef\putwordShortContents{Short Contents}}\fi%
-\ifx\putwordAppendix\undefined{\gdef\putwordAppendix{Appendix}}\fi%
-
-% Ignore a token.
-%
-\def\gobble#1{}
-
-\hyphenation{ap-pen-dix}
-\hyphenation{mini-buf-fer mini-buf-fers}
-\hyphenation{eshell}
-\hyphenation{white-space}
-
-% Margin to add to right of even pages, to left of odd pages.
-\newdimen \bindingoffset
-\newdimen \normaloffset
-\newdimen\pagewidth \newdimen\pageheight
-
-% Sometimes it is convenient to have everything in the transcript file
-% and nothing on the terminal. We don't just call \tracingall here,
-% since that produces some useless output on the terminal.
-%
-\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
-\def\loggingall{\tracingcommands2 \tracingstats2
- \tracingpages1 \tracingoutput1 \tracinglostchars1
- \tracingmacros2 \tracingparagraphs1 \tracingrestores1
- \showboxbreadth\maxdimen\showboxdepth\maxdimen
-}%
-
-% For @cropmarks command.
-% Do @cropmarks to get crop marks.
-%
-\newif\ifcropmarks
-\let\cropmarks = \cropmarkstrue
-%
-% Dimensions to add cropmarks at corners.
-% Added by P. A. MacKay, 12 Nov. 1986
-%
-\newdimen\cornerlong \newdimen\cornerthick
-\newdimen\topandbottommargin
-\newdimen\outerhsize \newdimen\outervsize
-\cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks
-\outerhsize=7in
-%\outervsize=9.5in
-% Alternative @smallbook page size is 9.25in
-\outervsize=9.25in
-\topandbottommargin=.75in
-
-% Main output routine.
-\chardef\PAGE = 255
-\output = {\onepageout{\pagecontents\PAGE}}
-
-\newbox\headlinebox
-\newbox\footlinebox
-
-% \onepageout takes a vbox as an argument. Note that \pagecontents
-% does insertions, but you have to call it yourself.
-\def\onepageout#1{%
- \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
- %
- \ifodd\pageno \advance\hoffset by \bindingoffset
- \else \advance\hoffset by -\bindingoffset\fi
- %
- % Do this outside of the \shipout so @code etc. will be expanded in
- % the headline as they should be, not taken literally (outputting ''code).
- \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
- \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
- %
- {%
- % Have to do this stuff outside the \shipout because we want it to
- % take effect in \write's, yet the group defined by the \vbox ends
- % before the \shipout runs.
- %
- \escapechar = `\\ % use backslash in output files.
- \indexdummies % don't expand commands in the output.
- \normalturnoffactive % \ in index entries must not stay \, e.g., if
- % the page break happens to be in the middle of an example.
- \shipout\vbox{%
- \ifcropmarks \vbox to \outervsize\bgroup
- \hsize = \outerhsize
- \line{\ewtop\hfil\ewtop}%
- \nointerlineskip
- \line{%
- \vbox{\moveleft\cornerthick\nstop}%
- \hfill
- \vbox{\moveright\cornerthick\nstop}%
- }%
- \vskip\topandbottommargin
- \line\bgroup
- \hfil % center the page within the outer (page) hsize.
- \ifodd\pageno\hskip\bindingoffset\fi
- \vbox\bgroup
- \fi
- %
- \unvbox\headlinebox
- \pagebody{#1}%
- \ifdim\ht\footlinebox > 0pt
- % Only leave this space if the footline is nonempty.
- % (We lessened \vsize for it in \oddfootingxxx.)
- % The \baselineskip=24pt in plain's \makefootline has no effect.
- \vskip 2\baselineskip
- \unvbox\footlinebox
- \fi
- %
- \ifcropmarks
- \egroup % end of \vbox\bgroup
- \hfil\egroup % end of (centering) \line\bgroup
- \vskip\topandbottommargin plus1fill minus1fill
- \boxmaxdepth = \cornerthick
- \line{%
- \vbox{\moveleft\cornerthick\nsbot}%
- \hfill
- \vbox{\moveright\cornerthick\nsbot}%
- }%
- \nointerlineskip
- \line{\ewbot\hfil\ewbot}%
- \egroup % \vbox from first cropmarks clause
- \fi
- }% end of \shipout\vbox
- }% end of group with \turnoffactive
- \advancepageno
- \ifnum\outputpenalty>-20000 \else\dosupereject\fi
-}
-
-\newinsert\margin \dimen\margin=\maxdimen
-
-\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
-{\catcode`\@ =11
-\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
-% marginal hacks, juha@viisa.uucp (Juha Takala)
-\ifvoid\margin\else % marginal info is present
- \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
-\dimen@=\dp#1 \unvbox#1
-\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
-\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
-}
-
-% Here are the rules for the cropmarks. Note that they are
-% offset so that the space between them is truly \outerhsize or \outervsize
-% (P. A. MacKay, 12 November, 1986)
-%
-\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
-\def\nstop{\vbox
- {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
-\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
-\def\nsbot{\vbox
- {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
-
-% Parse an argument, then pass it to #1. The argument is the rest of
-% the input line (except we remove a trailing comment). #1 should be a
-% macro which expects an ordinary undelimited TeX argument.
-%
-\def\parsearg#1{%
- \let\next = #1%
- \begingroup
- \obeylines
- \futurelet\temp\parseargx
-}
-
-% If the next token is an obeyed space (from an @example environment or
-% the like), remove it and recurse. Otherwise, we're done.
-\def\parseargx{%
- % \obeyedspace is defined far below, after the definition of \sepspaces.
- \ifx\obeyedspace\temp
- \expandafter\parseargdiscardspace
- \else
- \expandafter\parseargline
- \fi
-}
-
-% Remove a single space (as the delimiter token to the macro call).
-{\obeyspaces %
- \gdef\parseargdiscardspace {\futurelet\temp\parseargx}}
-
-{\obeylines %
- \gdef\parseargline#1^^M{%
- \endgroup % End of the group started in \parsearg.
- %
- % First remove any @c comment, then any @comment.
- % Result of each macro is put in \toks0.
- \argremovec #1\c\relax %
- \expandafter\argremovecomment \the\toks0 \comment\relax %
- %
- % Call the caller's macro, saved as \next in \parsearg.
- \expandafter\next\expandafter{\the\toks0}%
- }%
-}
-
-% Since all \c{,omment} does is throw away the argument, we can let TeX
-% do that for us. The \relax here is matched by the \relax in the call
-% in \parseargline; it could be more or less anything, its purpose is
-% just to delimit the argument to the \c.
-\def\argremovec#1\c#2\relax{\toks0 = {#1}}
-\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}}
-
-% \argremovec{,omment} might leave us with trailing spaces, though; e.g.,
-% @end itemize @c foo
-% will have two active spaces as part of the argument with the
-% `itemize'. Here we remove all active spaces from #1, and assign the
-% result to \toks0.
-%
-% This loses if there are any *other* active characters besides spaces
-% in the argument -- _ ^ +, for example -- since they get expanded.
-% Fortunately, Texinfo does not define any such commands. (If it ever
-% does, the catcode of the characters in questionwill have to be changed
-% here.) But this means we cannot call \removeactivespaces as part of
-% \argremovec{,omment}, since @c uses \parsearg, and thus the argument
-% that \parsearg gets might well have any character at all in it.
-%
-\def\removeactivespaces#1{%
- \begingroup
- \ignoreactivespaces
- \edef\temp{#1}%
- \global\toks0 = \expandafter{\temp}%
- \endgroup
-}
-
-% Change the active space to expand to nothing.
-%
-\begingroup
- \obeyspaces
- \gdef\ignoreactivespaces{\obeyspaces\let =\empty}
-\endgroup
-
-
-\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
-
-%% These are used to keep @begin/@end levels from running away
-%% Call \inENV within environments (after a \begingroup)
-\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
-\def\ENVcheck{%
-\ifENV\errmessage{Still within an environment. Type Return to continue.}
-\endgroup\fi} % This is not perfect, but it should reduce lossage
-
-% @begin foo is the same as @foo, for now.
-\newhelp\EMsimple{Type <Return> to continue.}
-
-\outer\def\begin{\parsearg\beginxxx}
-
-\def\beginxxx #1{%
-\expandafter\ifx\csname #1\endcsname\relax
-{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else
-\csname #1\endcsname\fi}
-
-% @end foo executes the definition of \Efoo.
-%
-\def\end{\parsearg\endxxx}
-\def\endxxx #1{%
- \removeactivespaces{#1}%
- \edef\endthing{\the\toks0}%
- %
- \expandafter\ifx\csname E\endthing\endcsname\relax
- \expandafter\ifx\csname \endthing\endcsname\relax
- % There's no \foo, i.e., no ``environment'' foo.
- \errhelp = \EMsimple
- \errmessage{Undefined command `@end \endthing'}%
- \else
- \unmatchedenderror\endthing
- \fi
- \else
- % Everything's ok; the right environment has been started.
- \csname E\endthing\endcsname
- \fi
-}
-
-% There is an environment #1, but it hasn't been started. Give an error.
-%
-\def\unmatchedenderror#1{%
- \errhelp = \EMsimple
- \errmessage{This `@end #1' doesn't have a matching `@#1'}%
-}
-
-% Define the control sequence \E#1 to give an unmatched @end error.
-%
-\def\defineunmatchedend#1{%
- \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}%
-}
-
-
-% Single-spacing is done by various environments (specifically, in
-% \nonfillstart and \quotations).
-\newskip\singlespaceskip \singlespaceskip = 12.5pt
-\def\singlespace{%
- % Why was this kern here? It messes up equalizing space above and below
- % environments. --karl, 6may93
- %{\advance \baselineskip by -\singlespaceskip
- %\kern \baselineskip}%
- \setleading \singlespaceskip
-}
-
-%% Simple single-character @ commands
-
-% @@ prints an @
-% Kludge this until the fonts are right (grr).
-\def\@{{\tt \char '100}}
-
-% This is turned off because it was never documented
-% and you can use @w{...} around a quote to suppress ligatures.
-%% Define @` and @' to be the same as ` and '
-%% but suppressing ligatures.
-%\def\`{{`}}
-%\def\'{{'}}
-
-% Used to generate quoted braces.
-\def\mylbrace {{\tt \char '173}}
-\def\myrbrace {{\tt \char '175}}
-\let\{=\mylbrace
-\let\}=\myrbrace
-\begingroup
- % Definitions to produce actual \{ & \} command in an index.
- \catcode`\{ = 12 \catcode`\} = 12
- \catcode`\[ = 1 \catcode`\] = 2
- \catcode`\@ = 0 \catcode`\\ = 12
- @gdef@lbracecmd[\{]%
- @gdef@rbracecmd[\}]%
-@endgroup
-
-% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
-% Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H.
-\let\, = \c
-\let\dotaccent = \.
-\def\ringaccent#1{{\accent23 #1}}
-\let\tieaccent = \t
-\let\ubaraccent = \b
-\let\udotaccent = \d
-
-% Other special characters: @questiondown @exclamdown
-% Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss.
-\def\questiondown{?`}
-\def\exclamdown{!`}
-
-% Dotless i and dotless j, used for accents.
-\def\imacro{i}
-\def\jmacro{j}
-\def\dotless#1{%
- \def\temp{#1}%
- \ifx\temp\imacro \ptexi
- \else\ifx\temp\jmacro \j
- \else \errmessage{@dotless can be used only with i or j}%
- \fi\fi
-}
-
-% @: forces normal size whitespace following.
-\def\:{\spacefactor=1000 }
-
-% @* forces a line break.
-\def\*{\hfil\break\hbox{}\ignorespaces}
-
-% @. is an end-of-sentence period.
-\def\.{.\spacefactor=3000 }
-
-% @enddots{} is an end-of-sentence ellipsis.
-\gdef\enddots{$\mathinner{\ldotp\ldotp\ldotp\ldotp}$\spacefactor=3000}
-
-% @! is an end-of-sentence bang.
-\gdef\!{!\spacefactor=3000 }
-
-% @? is an end-of-sentence query.
-\gdef\?{?\spacefactor=3000 }
-
-% @w prevents a word break. Without the \leavevmode, @w at the
-% beginning of a paragraph, when TeX is still in vertical mode, would
-% produce a whole line of output instead of starting the paragraph.
-\def\w#1{\leavevmode\hbox{#1}}
-
-% @group ... @end group forces ... to be all on one page, by enclosing
-% it in a TeX vbox. We use \vtop instead of \vbox to construct the box
-% to keep its height that of a normal line. According to the rules for
-% \topskip (p.114 of the TeXbook), the glue inserted is
-% max (\topskip - \ht (first item), 0). If that height is large,
-% therefore, no glue is inserted, and the space between the headline and
-% the text is small, which looks bad.
-%
-\def\group{\begingroup
- \ifnum\catcode13=\active \else
- \errhelp = \groupinvalidhelp
- \errmessage{@group invalid in context where filling is enabled}%
- \fi
- %
- % The \vtop we start below produces a box with normal height and large
- % depth; thus, TeX puts \baselineskip glue before it, and (when the
- % next line of text is done) \lineskip glue after it. (See p.82 of
- % the TeXbook.) Thus, space below is not quite equal to space
- % above. But it's pretty close.
- \def\Egroup{%
- \egroup % End the \vtop.
- \endgroup % End the \group.
- }%
- %
- \vtop\bgroup
- % We have to put a strut on the last line in case the @group is in
- % the midst of an example, rather than completely enclosing it.
- % Otherwise, the interline space between the last line of the group
- % and the first line afterwards is too small. But we can't put the
- % strut in \Egroup, since there it would be on a line by itself.
- % Hence this just inserts a strut at the beginning of each line.
- \everypar = {\strut}%
- %
- % Since we have a strut on every line, we don't need any of TeX's
- % normal interline spacing.
- \offinterlineskip
- %
- % OK, but now we have to do something about blank
- % lines in the input in @example-like environments, which normally
- % just turn into \lisppar, which will insert no space now that we've
- % turned off the interline space. Simplest is to make them be an
- % empty paragraph.
- \ifx\par\lisppar
- \edef\par{\leavevmode \par}%
- %
- % Reset ^^M's definition to new definition of \par.
- \obeylines
- \fi
- %
- % Do @comment since we are called inside an environment such as
- % @example, where each end-of-line in the input causes an
- % end-of-line in the output. We don't want the end-of-line after
- % the `@group' to put extra space in the output. Since @group
- % should appear on a line by itself (according to the Texinfo
- % manual), we don't worry about eating any user text.
- \comment
-}
-%
-% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
-% message, so this ends up printing `@group can only ...'.
-%
-\newhelp\groupinvalidhelp{%
-group can only be used in environments such as @example,^^J%
-where each line of input produces a line of output.}
-
-% @need space-in-mils
-% forces a page break if there is not space-in-mils remaining.
-
-\newdimen\mil \mil=0.001in
-
-\def\need{\parsearg\needx}
-
-% Old definition--didn't work.
-%\def\needx #1{\par %
-%% This method tries to make TeX break the page naturally
-%% if the depth of the box does not fit.
-%{\baselineskip=0pt%
-%\vtop to #1\mil{\vfil}\kern -#1\mil\penalty 10000
-%\prevdepth=-1000pt
-%}}
-
-\def\needx#1{%
- % Go into vertical mode, so we don't make a big box in the middle of a
- % paragraph.
- \par
- %
- % Don't add any leading before our big empty box, but allow a page
- % break, since the best break might be right here.
- \allowbreak
- \nointerlineskip
- \vtop to #1\mil{\vfil}%
- %
- % TeX does not even consider page breaks if a penalty added to the
- % main vertical list is 10000 or more. But in order to see if the
- % empty box we just added fits on the page, we must make it consider
- % page breaks. On the other hand, we don't want to actually break the
- % page after the empty box. So we use a penalty of 9999.
- %
- % There is an extremely small chance that TeX will actually break the
- % page at this \penalty, if there are no other feasible breakpoints in
- % sight. (If the user is using lots of big @group commands, which
- % almost-but-not-quite fill up a page, TeX will have a hard time doing
- % good page breaking, for example.) However, I could not construct an
- % example where a page broke at this \penalty; if it happens in a real
- % document, then we can reconsider our strategy.
- \penalty9999
- %
- % Back up by the size of the box, whether we did a page break or not.
- \kern -#1\mil
- %
- % Do not allow a page break right after this kern.
- \nobreak
-}
-
-% @br forces paragraph break
-
-\let\br = \par
-
-% @dots{} output some dots
-
-\def\dots{$\ldots$}
-
-% @page forces the start of a new page
-
-\def\page{\par\vfill\supereject}
-
-% @exdent text....
-% outputs text on separate line in roman font, starting at standard page margin
-
-% This records the amount of indent in the innermost environment.
-% That's how much \exdent should take out.
-\newskip\exdentamount
-
-% This defn is used inside fill environments such as @defun.
-\def\exdent{\parsearg\exdentyyy}
-\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}}
-
-% This defn is used inside nofill environments such as @example.
-\def\nofillexdent{\parsearg\nofillexdentyyy}
-\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
-\leftline{\hskip\leftskip{\rm#1}}}}
-
-% @inmargin{TEXT} puts TEXT in the margin next to the current paragraph.
-
-\def\inmargin#1{%
-\strut\vadjust{\nobreak\kern-\strutdepth
- \vtop to \strutdepth{\baselineskip\strutdepth\vss
- \llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}}
-\newskip\inmarginspacing \inmarginspacing=1cm
-\def\strutdepth{\dp\strutbox}
-
-%\hbox{{\rm#1}}\hfil\break}}
-
-% @include file insert text of that file as input.
-% Allow normal characters that we make active in the argument (a file name).
-\def\include{\begingroup
- \catcode`\\=12
- \catcode`~=12
- \catcode`^=12
- \catcode`_=12
- \catcode`|=12
- \catcode`<=12
- \catcode`>=12
- \catcode`+=12
- \parsearg\includezzz}
-% Restore active chars for included file.
-\def\includezzz#1{\endgroup\begingroup
- % Read the included file in a group so nested @include's work.
- \def\thisfile{#1}%
- \input\thisfile
-\endgroup}
-
-\def\thisfile{}
-
-% @center line outputs that line, centered
-
-\def\center{\parsearg\centerzzz}
-\def\centerzzz #1{{\advance\hsize by -\leftskip
-\advance\hsize by -\rightskip
-\centerline{#1}}}
-
-% @sp n outputs n lines of vertical space
-
-\def\sp{\parsearg\spxxx}
-\def\spxxx #1{\vskip #1\baselineskip}
-
-% @comment ...line which is ignored...
-% @c is the same as @comment
-% @ignore ... @end ignore is another way to write a comment
-
-\def\comment{\catcode 64=\other \catcode 123=\other \catcode 125=\other%
-\parsearg \commentxxx}
-
-\def\commentxxx #1{\catcode 64=0 \catcode 123=1 \catcode 125=2 }
-
-\let\c=\comment
-
-% @paragraphindent is defined for the Info formatting commands only.
-\let\paragraphindent=\comment
-
-% Prevent errors for section commands.
-% Used in @ignore and in failing conditionals.
-\def\ignoresections{%
-\let\chapter=\relax
-\let\unnumbered=\relax
-\let\top=\relax
-\let\unnumberedsec=\relax
-\let\unnumberedsection=\relax
-\let\unnumberedsubsec=\relax
-\let\unnumberedsubsection=\relax
-\let\unnumberedsubsubsec=\relax
-\let\unnumberedsubsubsection=\relax
-\let\section=\relax
-\let\subsec=\relax
-\let\subsubsec=\relax
-\let\subsection=\relax
-\let\subsubsection=\relax
-\let\appendix=\relax
-\let\appendixsec=\relax
-\let\appendixsection=\relax
-\let\appendixsubsec=\relax
-\let\appendixsubsection=\relax
-\let\appendixsubsubsec=\relax
-\let\appendixsubsubsection=\relax
-\let\contents=\relax
-\let\smallbook=\relax
-\let\titlepage=\relax
-}
-
-% Used in nested conditionals, where we have to parse the Texinfo source
-% and so want to turn off most commands, in case they are used
-% incorrectly.
-%
-\def\ignoremorecommands{%
- \let\defcodeindex = \relax
- \let\defcv = \relax
- \let\deffn = \relax
- \let\deffnx = \relax
- \let\defindex = \relax
- \let\defivar = \relax
- \let\defmac = \relax
- \let\defmethod = \relax
- \let\defop = \relax
- \let\defopt = \relax
- \let\defspec = \relax
- \let\deftp = \relax
- \let\deftypefn = \relax
- \let\deftypefun = \relax
- \let\deftypevar = \relax
- \let\deftypevr = \relax
- \let\defun = \relax
- \let\defvar = \relax
- \let\defvr = \relax
- \let\ref = \relax
- \let\xref = \relax
- \let\printindex = \relax
- \let\pxref = \relax
- \let\settitle = \relax
- \let\setchapternewpage = \relax
- \let\setchapterstyle = \relax
- \let\everyheading = \relax
- \let\evenheading = \relax
- \let\oddheading = \relax
- \let\everyfooting = \relax
- \let\evenfooting = \relax
- \let\oddfooting = \relax
- \let\headings = \relax
- \let\include = \relax
- \let\lowersections = \relax
- \let\down = \relax
- \let\raisesections = \relax
- \let\up = \relax
- \let\set = \relax
- \let\clear = \relax
- \let\item = \relax
-}
-
-% Ignore @ignore ... @end ignore.
-%
-\def\ignore{\doignore{ignore}}
-
-% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text.
-%
-\def\ifinfo{\doignore{ifinfo}}
-\def\ifhtml{\doignore{ifhtml}}
-\def\ifnottex{\doignore{ifnottex}}
-\def\html{\doignore{html}}
-\def\menu{\doignore{menu}}
-\def\direntry{\doignore{direntry}}
-
-% Also ignore @macro ... @end macro. The user must run texi2dvi,
-% which runs makeinfo to do macro expansion. Ignore @unmacro, too.
-\def\macro{\doignore{macro}}
-\let\unmacro = \comment
-
-
-% @dircategory CATEGORY -- specify a category of the dir file
-% which this file should belong to. Ignore this in TeX.
-\let\dircategory = \comment
-
-% Ignore text until a line `@end #1'.
-%
-\def\doignore#1{\begingroup
- % Don't complain about control sequences we have declared \outer.
- \ignoresections
- %
- % Define a command to swallow text until we reach `@end #1'.
- \long\def\doignoretext##1\end #1{\enddoignore}%
- %
- % Make sure that spaces turn into tokens that match what \doignoretext wants.
- \catcode32 = 10
- %
- % Ignore braces, too, so mismatched braces don't cause trouble.
- \catcode`\{ = 9
- \catcode`\} = 9
- %
- % And now expand that command.
- \doignoretext
-}
-
-% What we do to finish off ignored text.
-%
-\def\enddoignore{\endgroup\ignorespaces}%
-
-\newif\ifwarnedobs\warnedobsfalse
-\def\obstexwarn{%
- \ifwarnedobs\relax\else
- % We need to warn folks that they may have trouble with TeX 3.0.
- % This uses \immediate\write16 rather than \message to get newlines.
- \immediate\write16{}
- \immediate\write16{***WARNING*** for users of Unix TeX 3.0!}
- \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
- \immediate\write16{If you are running another version of TeX, relax.}
- \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
- \immediate\write16{ Then upgrade your TeX installation if you can.}
- \immediate\write16{ (See ftp://ftp.gnu.ai.mit.edu/pub/gnu/TeX.README.)}
- \immediate\write16{If you are stuck with version 3.0, run the}
- \immediate\write16{ script ``tex3patch'' from the Texinfo distribution}
- \immediate\write16{ to use a workaround.}
- \immediate\write16{}
- \global\warnedobstrue
- \fi
-}
-
-% **In TeX 3.0, setting text in \nullfont hangs tex. For a
-% workaround (which requires the file ``dummy.tfm'' to be installed),
-% uncomment the following line:
-%%%%%\font\nullfont=dummy\let\obstexwarn=\relax
-
-% Ignore text, except that we keep track of conditional commands for
-% purposes of nesting, up to an `@end #1' command.
-%
-\def\nestedignore#1{%
- \obstexwarn
- % We must actually expand the ignored text to look for the @end
- % command, so that nested ignore constructs work. Thus, we put the
- % text into a \vbox and then do nothing with the result. To minimize
- % the change of memory overflow, we follow the approach outlined on
- % page 401 of the TeXbook: make the current font be a dummy font.
- %
- \setbox0 = \vbox\bgroup
- % Don't complain about control sequences we have declared \outer.
- \ignoresections
- %
- % Define `@end #1' to end the box, which will in turn undefine the
- % @end command again.
- \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
- %
- % We are going to be parsing Texinfo commands. Most cause no
- % trouble when they are used incorrectly, but some commands do
- % complicated argument parsing or otherwise get confused, so we
- % undefine them.
- %
- % We can't do anything about stray @-signs, unfortunately;
- % they'll produce `undefined control sequence' errors.
- \ignoremorecommands
- %
- % Set the current font to be \nullfont, a TeX primitive, and define
- % all the font commands to also use \nullfont. We don't use
- % dummy.tfm, as suggested in the TeXbook, because not all sites
- % might have that installed. Therefore, math mode will still
- % produce output, but that should be an extremely small amount of
- % stuff compared to the main input.
- %
- \nullfont
- \let\tenrm = \nullfont \let\tenit = \nullfont \let\tensl = \nullfont
- \let\tenbf = \nullfont \let\tentt = \nullfont \let\smallcaps = \nullfont
- \let\tensf = \nullfont
- % Similarly for index fonts (mostly for their use in
- % smallexample)
- \let\indrm = \nullfont \let\indit = \nullfont \let\indsl = \nullfont
- \let\indbf = \nullfont \let\indtt = \nullfont \let\indsc = \nullfont
- \let\indsf = \nullfont
- %
- % Don't complain when characters are missing from the fonts.
- \tracinglostchars = 0
- %
- % Don't bother to do space factor calculations.
- \frenchspacing
- %
- % Don't report underfull hboxes.
- \hbadness = 10000
- %
- % Do minimal line-breaking.
- \pretolerance = 10000
- %
- % Do not execute instructions in @tex
- \def\tex{\doignore{tex}}%
-}
-
-% @set VAR sets the variable VAR to an empty value.
-% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
-%
-% Since we want to separate VAR from REST-OF-LINE (which might be
-% empty), we can't just use \parsearg; we have to insert a space of our
-% own to delimit the rest of the line, and then take it out again if we
-% didn't need it. Make sure the catcode of space is correct to avoid
-% losing inside @example, for instance.
-%
-\def\set{\begingroup\catcode` =10
- \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
- \parsearg\setxxx}
-\def\setxxx#1{\setyyy#1 \endsetyyy}
-\def\setyyy#1 #2\endsetyyy{%
- \def\temp{#2}%
- \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
- \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
- \fi
- \endgroup
-}
-% Can't use \xdef to pre-expand #2 and save some time, since \temp or
-% \next or other control sequences that we've defined might get us into
-% an infinite loop. Consider `@set foo @cite{bar}'.
-\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
-
-% @clear VAR clears (i.e., unsets) the variable VAR.
-%
-\def\clear{\parsearg\clearxxx}
-\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
-
-% @value{foo} gets the text saved in variable foo.
-%
-\def\value{\begingroup
- \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
- \valuexxx}
-\def\valuexxx#1{%
- \expandafter\ifx\csname SET#1\endcsname\relax
- {\{No value for ``#1''\}}%
- \else
- \csname SET#1\endcsname
- \fi
-\endgroup}
-
-% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
-% with @set.
-%
-\def\ifset{\parsearg\ifsetxxx}
-\def\ifsetxxx #1{%
- \expandafter\ifx\csname SET#1\endcsname\relax
- \expandafter\ifsetfail
- \else
- \expandafter\ifsetsucceed
- \fi
-}
-\def\ifsetsucceed{\conditionalsucceed{ifset}}
-\def\ifsetfail{\nestedignore{ifset}}
-\defineunmatchedend{ifset}
-
-% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
-% defined with @set, or has been undefined with @clear.
-%
-\def\ifclear{\parsearg\ifclearxxx}
-\def\ifclearxxx #1{%
- \expandafter\ifx\csname SET#1\endcsname\relax
- \expandafter\ifclearsucceed
- \else
- \expandafter\ifclearfail
- \fi
-}
-\def\ifclearsucceed{\conditionalsucceed{ifclear}}
-\def\ifclearfail{\nestedignore{ifclear}}
-\defineunmatchedend{ifclear}
-
-% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text
-% following, through the first @end iftex (etc.). Make `@end iftex'
-% (etc.) valid only after an @iftex.
-%
-\def\iftex{\conditionalsucceed{iftex}}
-\def\ifnothtml{\conditionalsucceed{ifnothtml}}
-\def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
-\defineunmatchedend{iftex}
-\defineunmatchedend{ifnothtml}
-\defineunmatchedend{ifnotinfo}
-
-% We can't just want to start a group at @iftex (for example) and end it
-% at @end iftex, since then @set commands inside the conditional have no
-% effect (they'd get reverted at the end of the group). So we must
-% define \Eiftex to redefine itself to be its previous value. (We can't
-% just define it to fail again with an ``unmatched end'' error, since
-% the @ifset might be nested.)
-%
-\def\conditionalsucceed#1{%
- \edef\temp{%
- % Remember the current value of \E#1.
- \let\nece{prevE#1} = \nece{E#1}%
- %
- % At the `@end #1', redefine \E#1 to be its previous value.
- \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}%
- }%
- \temp
-}
-
-% We need to expand lots of \csname's, but we don't want to expand the
-% control sequences after we've constructed them.
-%
-\def\nece#1{\expandafter\noexpand\csname#1\endcsname}
-
-% @asis just yields its argument. Used with @table, for example.
-%
-\def\asis#1{#1}
-
-% @math means output in math mode.
-% We don't use $'s directly in the definition of \math because control
-% sequences like \math are expanded when the toc file is written. Then,
-% we read the toc file back, the $'s will be normal characters (as they
-% should be, according to the definition of Texinfo). So we must use a
-% control sequence to switch into and out of math mode.
-%
-% This isn't quite enough for @math to work properly in indices, but it
-% seems unlikely it will ever be needed there.
-%
-\let\implicitmath = $
-\def\math#1{\implicitmath #1\implicitmath}
-
-% @bullet and @minus need the same treatment as @math, just above.
-\def\bullet{\implicitmath\ptexbullet\implicitmath}
-\def\minus{\implicitmath-\implicitmath}
-
-\def\node{\ENVcheck\parsearg\nodezzz}
-\def\nodezzz#1{\nodexxx [#1,]}
-\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
-\let\nwnode=\node
-\let\lastnode=\relax
-
-\def\donoderef{\ifx\lastnode\relax\else
-\expandafter\expandafter\expandafter\setref{\lastnode}\fi
-\global\let\lastnode=\relax}
-
-\def\unnumbnoderef{\ifx\lastnode\relax\else
-\expandafter\expandafter\expandafter\unnumbsetref{\lastnode}\fi
-\global\let\lastnode=\relax}
-
-\def\appendixnoderef{\ifx\lastnode\relax\else
-\expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi
-\global\let\lastnode=\relax}
-
-% @refill is a no-op.
-\let\refill=\relax
-
-% @setfilename is done at the beginning of every texinfo file.
-% So open here the files we need to have open while reading the input.
-% This makes it possible to make a .fmt file for texinfo.
-\def\setfilename{%
- \readauxfile
- \opencontents
- \openindices
- \fixbackslash % Turn off hack to swallow `\input texinfo'.
- \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
- %
- % If texinfo.cnf is present on the system, read it.
- % Useful for site-wide @afourpaper, etc.
- % Just to be on the safe side, close the input stream before the \input.
- \openin 1 texinfo.cnf
- \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi
- \closein1
- \temp
- %
- \comment % Ignore the actual filename.
-}
-
-% @bye.
-\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
-
-% \def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx}
-% \def\macroxxx#1#2 \end macro{%
-% \expandafter\gdef\macrotemp#1{#2}%
-% \endgroup}
-
-%\def\linemacro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\linemacroxxx}
-%\def\linemacroxxx#1#2 \end linemacro{%
-%\let\parsearg=\relax
-%\edef\macrotempx{\csname M\butfirst\expandafter\string\macrotemp\endcsname}%
-%\expandafter\xdef\macrotemp{\parsearg\macrotempx}%
-%\expandafter\gdef\macrotempx#1{#2}%
-%\endgroup}
-
-%\def\butfirst#1{}
-
-
-\message{fonts,}
-
-% Font-change commands.
-
-% Texinfo supports the sans serif font style, which plain TeX does not.
-% So we set up a \sf analogous to plain's \rm, etc.
-\newfam\sffam
-\def\sf{\fam=\sffam \tensf}
-\let\li = \sf % Sometimes we call it \li, not \sf.
-
-% We don't need math for this one.
-\def\ttsl{\tenttsl}
-
-% Use Computer Modern fonts at \magstephalf (11pt).
-\newcount\mainmagstep
-\mainmagstep=\magstephalf
-
-% Set the font macro #1 to the font named #2, adding on the
-% specified font prefix (normally `cm').
-% #3 is the font's design size, #4 is a scale factor
-\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
-
-% Use cm as the default font prefix.
-% To specify the font prefix, you must define \fontprefix
-% before you read in texinfo.tex.
-\ifx\fontprefix\undefined
-\def\fontprefix{cm}
-\fi
-% Support font families that don't use the same naming scheme as CM.
-\def\rmshape{r}
-\def\rmbshape{bx} %where the normal face is bold
-\def\bfshape{b}
-\def\bxshape{bx}
-\def\ttshape{tt}
-\def\ttbshape{tt}
-\def\ttslshape{sltt}
-\def\itshape{ti}
-\def\itbshape{bxti}
-\def\slshape{sl}
-\def\slbshape{bxsl}
-\def\sfshape{ss}
-\def\sfbshape{ss}
-\def\scshape{csc}
-\def\scbshape{csc}
-
-\ifx\bigger\relax
-\let\mainmagstep=\magstep1
-\setfont\textrm\rmshape{12}{1000}
-\setfont\texttt\ttshape{12}{1000}
-\else
-\setfont\textrm\rmshape{10}{\mainmagstep}
-\setfont\texttt\ttshape{10}{\mainmagstep}
-\fi
-% Instead of cmb10, you many want to use cmbx10.
-% cmbx10 is a prettier font on its own, but cmb10
-% looks better when embedded in a line with cmr10.
-\setfont\textbf\bfshape{10}{\mainmagstep}
-\setfont\textit\itshape{10}{\mainmagstep}
-\setfont\textsl\slshape{10}{\mainmagstep}
-\setfont\textsf\sfshape{10}{\mainmagstep}
-\setfont\textsc\scshape{10}{\mainmagstep}
-\setfont\textttsl\ttslshape{10}{\mainmagstep}
-\font\texti=cmmi10 scaled \mainmagstep
-\font\textsy=cmsy10 scaled \mainmagstep
-
-% A few fonts for @defun, etc.
-\setfont\defbf\bxshape{10}{\magstep1} %was 1314
-\setfont\deftt\ttshape{10}{\magstep1}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
-
-% Fonts for indices and small examples (9pt).
-% We actually use the slanted font rather than the italic,
-% because texinfo normally uses the slanted fonts for that.
-% Do not make many font distinctions in general in the index, since they
-% aren't very useful.
-\setfont\ninett\ttshape{9}{1000}
-\setfont\indrm\rmshape{9}{1000}
-\setfont\indit\slshape{9}{1000}
-\let\indsl=\indit
-\let\indtt=\ninett
-\let\indttsl=\ninett
-\let\indsf=\indrm
-\let\indbf=\indrm
-\setfont\indsc\scshape{10}{900}
-\font\indi=cmmi9
-\font\indsy=cmsy9
-
-% Fonts for title page:
-\setfont\titlerm\rmbshape{12}{\magstep3}
-\setfont\titleit\itbshape{10}{\magstep4}
-\setfont\titlesl\slbshape{10}{\magstep4}
-\setfont\titlett\ttbshape{12}{\magstep3}
-\setfont\titlettsl\ttslshape{10}{\magstep4}
-\setfont\titlesf\sfbshape{17}{\magstep1}
-\let\titlebf=\titlerm
-\setfont\titlesc\scbshape{10}{\magstep4}
-\font\titlei=cmmi12 scaled \magstep3
-\font\titlesy=cmsy10 scaled \magstep4
-\def\authorrm{\secrm}
-
-% Chapter (and unnumbered) fonts (17.28pt).
-\setfont\chaprm\rmbshape{12}{\magstep2}
-\setfont\chapit\itbshape{10}{\magstep3}
-\setfont\chapsl\slbshape{10}{\magstep3}
-\setfont\chaptt\ttbshape{12}{\magstep2}
-\setfont\chapttsl\ttslshape{10}{\magstep3}
-\setfont\chapsf\sfbshape{17}{1000}
-\let\chapbf=\chaprm
-\setfont\chapsc\scbshape{10}{\magstep3}
-\font\chapi=cmmi12 scaled \magstep2
-\font\chapsy=cmsy10 scaled \magstep3
-
-% Section fonts (14.4pt).
-\setfont\secrm\rmbshape{12}{\magstep1}
-\setfont\secit\itbshape{10}{\magstep2}
-\setfont\secsl\slbshape{10}{\magstep2}
-\setfont\sectt\ttbshape{12}{\magstep1}
-\setfont\secttsl\ttslshape{10}{\magstep2}
-\setfont\secsf\sfbshape{12}{\magstep1}
-\let\secbf\secrm
-\setfont\secsc\scbshape{10}{\magstep2}
-\font\seci=cmmi12 scaled \magstep1
-\font\secsy=cmsy10 scaled \magstep2
-
-% \setfont\ssecrm\bxshape{10}{\magstep1} % This size an font looked bad.
-% \setfont\ssecit\itshape{10}{\magstep1} % The letters were too crowded.
-% \setfont\ssecsl\slshape{10}{\magstep1}
-% \setfont\ssectt\ttshape{10}{\magstep1}
-% \setfont\ssecsf\sfshape{10}{\magstep1}
-
-%\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx.
-%\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than
-%\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1.
-%\setfont\ssectt\ttshape{10}{1315}
-%\setfont\ssecsf\sfshape{10}{1315}
-
-%\let\ssecbf=\ssecrm
-
-% Subsection fonts (13.15pt).
-\setfont\ssecrm\rmbshape{12}{\magstephalf}
-\setfont\ssecit\itbshape{10}{1315}
-\setfont\ssecsl\slbshape{10}{1315}
-\setfont\ssectt\ttbshape{12}{\magstephalf}
-\setfont\ssecttsl\ttslshape{10}{1315}
-\setfont\ssecsf\sfbshape{12}{\magstephalf}
-\let\ssecbf\ssecrm
-\setfont\ssecsc\scbshape{10}{\magstep1}
-\font\sseci=cmmi12 scaled \magstephalf
-\font\ssecsy=cmsy10 scaled 1315
-% The smallcaps and symbol fonts should actually be scaled \magstep1.5,
-% but that is not a standard magnification.
-
-% In order for the font changes to affect most math symbols and letters,
-% we have to define the \textfont of the standard families. Since
-% texinfo doesn't allow for producing subscripts and superscripts, we
-% don't bother to reset \scriptfont and \scriptscriptfont (which would
-% also require loading a lot more fonts).
-%
-\def\resetmathfonts{%
- \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy
- \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf
- \textfont\ttfam = \tentt \textfont\sffam = \tensf
-}
-
-
-% The font-changing commands redefine the meanings of \tenSTYLE, instead
-% of just \STYLE. We do this so that font changes will continue to work
-% in math mode, where it is the current \fam that is relevant in most
-% cases, not the current font. Plain TeX does \def\bf{\fam=\bffam
-% \tenbf}, for example. By redefining \tenbf, we obviate the need to
-% redefine \bf itself.
-\def\textfonts{%
- \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
- \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
- \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl
- \resetmathfonts}
-\def\titlefonts{%
- \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
- \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
- \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
- \let\tenttsl=\titlettsl
- \resetmathfonts \setleading{25pt}}
-\def\titlefont#1{{\titlefonts #1}}
-\def\chapfonts{%
- \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
- \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
- \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl
- \resetmathfonts \setleading{19pt}}
-\def\secfonts{%
- \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
- \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
- \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl
- \resetmathfonts \setleading{16pt}}
-\def\subsecfonts{%
- \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
- \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
- \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
- \resetmathfonts \setleading{15pt}}
-\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
-\def\indexfonts{%
- \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl
- \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc
- \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl
- \resetmathfonts \setleading{12pt}}
-
-% Set up the default fonts, so we can use them for creating boxes.
-%
-\textfonts
-
-% Count depth in font-changes, for error checks
-\newcount\fontdepth \fontdepth=0
-
-% Fonts for short table of contents.
-\setfont\shortcontrm\rmshape{12}{1000}
-\setfont\shortcontbf\bxshape{12}{1000}
-\setfont\shortcontsl\slshape{12}{1000}
-
-%% Add scribe-like font environments, plus @l for inline lisp (usually sans
-%% serif) and @ii for TeX italic
-
-% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
-% unless the following character is such as not to need one.
-\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi}
-\def\smartitalic#1{{\sl #1}\futurelet\next\smartitalicx}
-
-\let\i=\smartitalic
-\let\var=\smartitalic
-\let\dfn=\smartitalic
-\let\emph=\smartitalic
-\let\cite=\smartitalic
-
-\def\b#1{{\bf #1}}
-\let\strong=\b
-
-% We can't just use \exhyphenpenalty, because that only has effect at
-% the end of a paragraph. Restore normal hyphenation at the end of the
-% group within which \nohyphenation is presumably called.
-%
-\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation}
-\def\restorehyphenation{\hyphenchar\font = `- }
-
-\def\t#1{%
- {\tt \rawbackslash \frenchspacing #1}%
- \null
-}
-\let\ttfont=\t
-\def\samp #1{`\tclose{#1}'\null}
-\setfont\smallrm\rmshape{8}{1000}
-\font\smallsy=cmsy9
-\def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{%
- \raise0.4pt\hbox{$\langle$}\kern-.08em\vtop{%
- \vbox{\hrule\kern-0.4pt
- \hbox{\raise0.4pt\hbox{\vphantom{$\langle$}}#1}}%
- \kern-0.4pt\hrule}%
- \kern-.06em\raise0.4pt\hbox{$\rangle$}}}}
-% The old definition, with no lozenge:
-%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
-\def\ctrl #1{{\tt \rawbackslash \hat}#1}
-
-\let\file=\samp
-
-% @code is a modification of @t,
-% which makes spaces the same size as normal in the surrounding text.
-\def\tclose#1{%
- {%
- % Change normal interword space to be same as for the current font.
- \spaceskip = \fontdimen2\font
- %
- % Switch to typewriter.
- \tt
- %
- % But `\ ' produces the large typewriter interword space.
- \def\ {{\spaceskip = 0pt{} }}%
- %
- % Turn off hyphenation.
- \nohyphenation
- %
- \rawbackslash
- \frenchspacing
- #1%
- }%
- \null
-}
-
-% We *must* turn on hyphenation at `-' and `_' in \code.
-% Otherwise, it is too hard to avoid overfull hboxes
-% in the Emacs manual, the Library manual, etc.
-
-% Unfortunately, TeX uses one parameter (\hyphenchar) to control
-% both hyphenation at - and hyphenation within words.
-% We must therefore turn them both off (\tclose does that)
-% and arrange explicitly to hyphenate at a dash.
-% -- rms.
-{
-\catcode`\-=\active
-\catcode`\_=\active
-\catcode`\|=\active
-\global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex}
-% The following is used by \doprintindex to insure that long function names
-% wrap around. It is necessary for - and _ to be active before the index is
-% read from the file, as \entry parses the arguments long before \code is
-% ever called. -- mycroft
-% _ is always active; and it shouldn't be \let = to an _ that is a
-% subscript character anyway. Then, @cindex @samp{_} (for example)
-% fails. --karl
-\global\def\indexbreaks{%
- \catcode`\-=\active \let-\realdash
-}
-}
-
-\def\realdash{-}
-\def\codedash{-\discretionary{}{}{}}
-\def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}}
-\def\codex #1{\tclose{#1}\endgroup}
-
-%\let\exp=\tclose %Was temporary
-
-% @kbd is like @code, except that if the argument is just one @key command,
-% then @kbd has no effect.
-
-% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
-% `example' (@kbd uses ttsl only inside of @example and friends),
-% or `code' (@kbd uses normal tty font always).
-\def\kbdinputstyle{\parsearg\kbdinputstylexxx}
-\def\kbdinputstylexxx#1{%
- \def\arg{#1}%
- \ifx\arg\worddistinct
- \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
- \else\ifx\arg\wordexample
- \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
- \else\ifx\arg\wordcode
- \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
- \fi\fi\fi
-}
-\def\worddistinct{distinct}
-\def\wordexample{example}
-\def\wordcode{code}
-
-% Default is kbdinputdistinct. (Too much of a hassle to call the macro,
-% the catcodes are wrong for parsearg to work.)
-\gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}
-
-\def\xkey{\key}
-\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
-\ifx\one\xkey\ifx\threex\three \key{#2}%
-\else{\tclose{\kbdfont\look}}\fi
-\else{\tclose{\kbdfont\look}}\fi}
-
-% @url. Quotes do not seem necessary, so use \code.
-\let\url=\code
-
-% @uref (abbreviation for `urlref') takes an optional second argument
-% specifying the text to display. First (mandatory) arg is the url.
-% Perhaps eventually put in a hypertex \special here.
-%
-\def\uref#1{\urefxxx #1,,\finish}
-\def\urefxxx#1,#2,#3\finish{%
- \setbox0 = \hbox{\ignorespaces #2}%
- \ifdim\wd0 > 0pt
- \unhbox0\ (\code{#1})%
- \else
- \code{#1}%
- \fi
-}
-
-% rms does not like the angle brackets --karl, 17may97.
-% So now @email is just like @uref.
-%\def\email#1{$\langle${\tt #1}$\rangle$}
-\let\email=\uref
-
-% Check if we are currently using a typewriter font. Since all the
-% Computer Modern typewriter fonts have zero interword stretch (and
-% shrink), and it is reasonable to expect all typewriter fonts to have
-% this property, we can check that font parameter.
-%
-\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
-
-% Typeset a dimension, e.g., `in' or `pt'. The only reason for the
-% argument is to make the input look right: @dmn{pt} instead of
-% @dmn{}pt.
-%
-\def\dmn#1{\thinspace #1}
-
-\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
-
-% @l was never documented to mean ``switch to the Lisp font'',
-% and it is not used as such in any manual I can find. We need it for
-% Polish suppressed-l. --karl, 22sep96.
-%\def\l#1{{\li #1}\null}
-
-\def\r#1{{\rm #1}} % roman font
-% Use of \lowercase was suggested.
-\def\sc#1{{\smallcaps#1}} % smallcaps font
-\def\ii#1{{\it #1}} % italic font
-
-% @pounds{} is a sterling sign.
-\def\pounds{{\it\$}}
-
-
-\message{page headings,}
-
-\newskip\titlepagetopglue \titlepagetopglue = 1.5in
-\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
-
-% First the title page. Must do @settitle before @titlepage.
-\newif\ifseenauthor
-\newif\iffinishedtitlepage
-
-\def\shorttitlepage{\parsearg\shorttitlepagezzz}
-\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
- \endgroup\page\hbox{}\page}
-
-\def\titlepage{\begingroup \parindent=0pt \textfonts
- \let\subtitlerm=\tenrm
-% I deinstalled the following change because \cmr12 is undefined.
-% This change was not in the ChangeLog anyway. --rms.
-% \let\subtitlerm=\cmr12
- \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
- %
- \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}%
- %
- % Leave some space at the very top of the page.
- \vglue\titlepagetopglue
- %
- % Now you can print the title using @title.
- \def\title{\parsearg\titlezzz}%
- \def\titlezzz##1{\leftline{\titlefonts\rm ##1}
- % print a rule at the page bottom also.
- \finishedtitlepagefalse
- \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
- % No rule at page bottom unless we print one at the top with @title.
- \finishedtitlepagetrue
- %
- % Now you can put text using @subtitle.
- \def\subtitle{\parsearg\subtitlezzz}%
- \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}%
- %
- % @author should come last, but may come many times.
- \def\author{\parsearg\authorzzz}%
- \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi
- {\authorfont \leftline{##1}}}%
- %
- % Most title ``pages'' are actually two pages long, with space
- % at the top of the second. We don't want the ragged left on the second.
- \let\oldpage = \page
- \def\page{%
- \iffinishedtitlepage\else
- \finishtitlepage
- \fi
- \oldpage
- \let\page = \oldpage
- \hbox{}}%
-% \def\page{\oldpage \hbox{}}
-}
-
-\def\Etitlepage{%
- \iffinishedtitlepage\else
- \finishtitlepage
- \fi
- % It is important to do the page break before ending the group,
- % because the headline and footline are only empty inside the group.
- % If we use the new definition of \page, we always get a blank page
- % after the title page, which we certainly don't want.
- \oldpage
- \endgroup
- \HEADINGSon
-}
-
-\def\finishtitlepage{%
- \vskip4pt \hrule height 2pt width \hsize
- \vskip\titlepagebottomglue
- \finishedtitlepagetrue
-}
-
-%%% Set up page headings and footings.
-
-\let\thispage=\folio
-
-\newtoks \evenheadline % Token sequence for heading line of even pages
-\newtoks \oddheadline % Token sequence for heading line of odd pages
-\newtoks \evenfootline % Token sequence for footing line of even pages
-\newtoks \oddfootline % Token sequence for footing line of odd pages
-
-% Now make Tex use those variables
-\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
- \else \the\evenheadline \fi}}
-\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
- \else \the\evenfootline \fi}\HEADINGShook}
-\let\HEADINGShook=\relax
-
-% Commands to set those variables.
-% For example, this is what @headings on does
-% @evenheading @thistitle|@thispage|@thischapter
-% @oddheading @thischapter|@thispage|@thistitle
-% @evenfooting @thisfile||
-% @oddfooting ||@thisfile
-
-\def\evenheading{\parsearg\evenheadingxxx}
-\def\oddheading{\parsearg\oddheadingxxx}
-\def\everyheading{\parsearg\everyheadingxxx}
-
-\def\evenfooting{\parsearg\evenfootingxxx}
-\def\oddfooting{\parsearg\oddfootingxxx}
-\def\everyfooting{\parsearg\everyfootingxxx}
-
-{\catcode`\@=0 %
-
-\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish}
-\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish}
-\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
-\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
-
-\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}
-\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
-\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
- \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
- %
- % Leave some space for the footline. Hopefully ok to assume
- % @evenfooting will not be used by itself.
- \global\advance\pageheight by -\baselineskip
- \global\advance\vsize by -\baselineskip
-}
-
-\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}}
-%
-}% unbind the catcode of @.
-
-% @headings double turns headings on for double-sided printing.
-% @headings single turns headings on for single-sided printing.
-% @headings off turns them off.
-% @headings on same as @headings double, retained for compatibility.
-% @headings after turns on double-sided headings after this page.
-% @headings doubleafter turns on double-sided headings after this page.
-% @headings singleafter turns on single-sided headings after this page.
-% By default, they are off at the start of a document,
-% and turned `on' after @end titlepage.
-
-\def\headings #1 {\csname HEADINGS#1\endcsname}
-
-\def\HEADINGSoff{
-\global\evenheadline={\hfil} \global\evenfootline={\hfil}
-\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
-\HEADINGSoff
-% When we turn headings on, set the page number to 1.
-% For double-sided printing, put current file name in lower left corner,
-% chapter name on inside top of right hand pages, document
-% title on inside top of left hand pages, and page numbers on outside top
-% edge of all pages.
-\def\HEADINGSdouble{
-\global\pageno=1
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chapoddpage
-}
-\let\contentsalignmacro = \chappager
-
-% For single-sided printing, chapter title goes across top left of page,
-% page number on top right.
-\def\HEADINGSsingle{
-\global\pageno=1
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chappager
-}
-\def\HEADINGSon{\HEADINGSdouble}
-
-\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
-\let\HEADINGSdoubleafter=\HEADINGSafter
-\def\HEADINGSdoublex{%
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chapoddpage
-}
-
-\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
-\def\HEADINGSsinglex{%
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chappager
-}
-
-% Subroutines used in generating headings
-% Produces Day Month Year style of output.
-\def\today{\number\day\space
-\ifcase\month\or
-January\or February\or March\or April\or May\or June\or
-July\or August\or September\or October\or November\or December\fi
-\space\number\year}
-
-% Use this if you want the Month Day, Year style of output.
-%\def\today{\ifcase\month\or
-%January\or February\or March\or April\or May\or June\or
-%July\or August\or September\or October\or November\or December\fi
-%\space\number\day, \number\year}
-
-% @settitle line... specifies the title of the document, for headings
-% It generates no output of its own
-
-\def\thistitle{No Title}
-\def\settitle{\parsearg\settitlezzz}
-\def\settitlezzz #1{\gdef\thistitle{#1}}
-
-
-\message{tables,}
-
-% @tabs -- simple alignment
-
-% These don't work. For one thing, \+ is defined as outer.
-% So these macros cannot even be defined.
-
-%\def\tabs{\parsearg\tabszzz}
-%\def\tabszzz #1{\settabs\+#1\cr}
-%\def\tabline{\parsearg\tablinezzz}
-%\def\tablinezzz #1{\+#1\cr}
-%\def\&{&}
-
-% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
-
-% default indentation of table text
-\newdimen\tableindent \tableindent=.8in
-% default indentation of @itemize and @enumerate text
-\newdimen\itemindent \itemindent=.3in
-% margin between end of table item and start of table text.
-\newdimen\itemmargin \itemmargin=.1in
-
-% used internally for \itemindent minus \itemmargin
-\newdimen\itemmax
-
-% Note @table, @vtable, and @vtable define @item, @itemx, etc., with
-% these defs.
-% They also define \itemindex
-% to index the item name in whatever manner is desired (perhaps none).
-
-\newif\ifitemxneedsnegativevskip
-
-\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
-
-\def\internalBitem{\smallbreak \parsearg\itemzzz}
-\def\internalBitemx{\itemxpar \parsearg\itemzzz}
-
-\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz}
-\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz}
-
-\def\internalBkitem{\smallbreak \parsearg\kitemzzz}
-\def\internalBkitemx{\itemxpar \parsearg\kitemzzz}
-
-\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}%
- \itemzzz {#1}}
-
-\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}%
- \itemzzz {#1}}
-
-\def\itemzzz #1{\begingroup %
- \advance\hsize by -\rightskip
- \advance\hsize by -\tableindent
- \setbox0=\hbox{\itemfont{#1}}%
- \itemindex{#1}%
- \nobreak % This prevents a break before @itemx.
- %
- % Be sure we are not still in the middle of a paragraph.
- %{\parskip = 0in
- %\par
- %}%
- %
- % If the item text does not fit in the space we have, put it on a line
- % by itself, and do not allow a page break either before or after that
- % line. We do not start a paragraph here because then if the next
- % command is, e.g., @kindex, the whatsit would get put into the
- % horizontal list on a line by itself, resulting in extra blank space.
- \ifdim \wd0>\itemmax
- %
- % Make this a paragraph so we get the \parskip glue and wrapping,
- % but leave it ragged-right.
- \begingroup
- \advance\leftskip by-\tableindent
- \advance\hsize by\tableindent
- \advance\rightskip by0pt plus1fil
- \leavevmode\unhbox0\par
- \endgroup
- %
- % We're going to be starting a paragraph, but we don't want the
- % \parskip glue -- logically it's part of the @item we just started.
- \nobreak \vskip-\parskip
- %
- % Stop a page break at the \parskip glue coming up. Unfortunately
- % we can't prevent a possible page break at the following
- % \baselineskip glue.
- \nobreak
- \endgroup
- \itemxneedsnegativevskipfalse
- \else
- % The item text fits into the space. Start a paragraph, so that the
- % following text (if any) will end up on the same line. Since that
- % text will be indented by \tableindent, we make the item text be in
- % a zero-width box.
- \noindent
- \rlap{\hskip -\tableindent\box0}\ignorespaces%
- \endgroup%
- \itemxneedsnegativevskiptrue%
- \fi
-}
-
-\def\item{\errmessage{@item while not in a table}}
-\def\itemx{\errmessage{@itemx while not in a table}}
-\def\kitem{\errmessage{@kitem while not in a table}}
-\def\kitemx{\errmessage{@kitemx while not in a table}}
-\def\xitem{\errmessage{@xitem while not in a table}}
-\def\xitemx{\errmessage{@xitemx while not in a table}}
-
-%% Contains a kludge to get @end[description] to work
-\def\description{\tablez{\dontindex}{1}{}{}{}{}}
-
-\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
-{\obeylines\obeyspaces%
-\gdef\tablex #1^^M{%
-\tabley\dontindex#1 \endtabley}}
-
-\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex}
-{\obeylines\obeyspaces%
-\gdef\ftablex #1^^M{%
-\tabley\fnitemindex#1 \endtabley
-\def\Eftable{\endgraf\afterenvbreak\endgroup}%
-\let\Etable=\relax}}
-
-\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex}
-{\obeylines\obeyspaces%
-\gdef\vtablex #1^^M{%
-\tabley\vritemindex#1 \endtabley
-\def\Evtable{\endgraf\afterenvbreak\endgroup}%
-\let\Etable=\relax}}
-
-\def\dontindex #1{}
-\def\fnitemindex #1{\doind {fn}{\code{#1}}}%
-\def\vritemindex #1{\doind {vr}{\code{#1}}}%
-
-{\obeyspaces %
-\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup%
-\tablez{#1}{#2}{#3}{#4}{#5}{#6}}}
-
-\def\tablez #1#2#3#4#5#6{%
-\aboveenvbreak %
-\begingroup %
-\def\Edescription{\Etable}% Necessary kludge.
-\let\itemindex=#1%
-\ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
-\ifnum 0#4>0 \tableindent=#4\mil \fi %
-\ifnum 0#5>0 \advance \rightskip by #5\mil \fi %
-\def\itemfont{#2}%
-\itemmax=\tableindent %
-\advance \itemmax by -\itemmargin %
-\advance \leftskip by \tableindent %
-\exdentamount=\tableindent
-\parindent = 0pt
-\parskip = \smallskipamount
-\ifdim \parskip=0pt \parskip=2pt \fi%
-\def\Etable{\endgraf\afterenvbreak\endgroup}%
-\let\item = \internalBitem %
-\let\itemx = \internalBitemx %
-\let\kitem = \internalBkitem %
-\let\kitemx = \internalBkitemx %
-\let\xitem = \internalBxitem %
-\let\xitemx = \internalBxitemx %
-}
-
-% This is the counter used by @enumerate, which is really @itemize
-
-\newcount \itemno
-
-\def\itemize{\parsearg\itemizezzz}
-
-\def\itemizezzz #1{%
- \begingroup % ended by the @end itemsize
- \itemizey {#1}{\Eitemize}
-}
-
-\def\itemizey #1#2{%
-\aboveenvbreak %
-\itemmax=\itemindent %
-\advance \itemmax by -\itemmargin %
-\advance \leftskip by \itemindent %
-\exdentamount=\itemindent
-\parindent = 0pt %
-\parskip = \smallskipamount %
-\ifdim \parskip=0pt \parskip=2pt \fi%
-\def#2{\endgraf\afterenvbreak\endgroup}%
-\def\itemcontents{#1}%
-\let\item=\itemizeitem}
-
-% Set sfcode to normal for the chars that usually have another value.
-% These are `.?!:;,'
-\def\frenchspacing{\sfcode46=1000 \sfcode63=1000 \sfcode33=1000
- \sfcode58=1000 \sfcode59=1000 \sfcode44=1000 }
-
-% \splitoff TOKENS\endmark defines \first to be the first token in
-% TOKENS, and \rest to be the remainder.
-%
-\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
-
-% Allow an optional argument of an uppercase letter, lowercase letter,
-% or number, to specify the first label in the enumerated list. No
-% argument is the same as `1'.
-%
-\def\enumerate{\parsearg\enumeratezzz}
-\def\enumeratezzz #1{\enumeratey #1 \endenumeratey}
-\def\enumeratey #1 #2\endenumeratey{%
- \begingroup % ended by the @end enumerate
- %
- % If we were given no argument, pretend we were given `1'.
- \def\thearg{#1}%
- \ifx\thearg\empty \def\thearg{1}\fi
- %
- % Detect if the argument is a single token. If so, it might be a
- % letter. Otherwise, the only valid thing it can be is a number.
- % (We will always have one token, because of the test we just made.
- % This is a good thing, since \splitoff doesn't work given nothing at
- % all -- the first parameter is undelimited.)
- \expandafter\splitoff\thearg\endmark
- \ifx\rest\empty
- % Only one token in the argument. It could still be anything.
- % A ``lowercase letter'' is one whose \lccode is nonzero.
- % An ``uppercase letter'' is one whose \lccode is both nonzero, and
- % not equal to itself.
- % Otherwise, we assume it's a number.
- %
- % We need the \relax at the end of the \ifnum lines to stop TeX from
- % continuing to look for a <number>.
- %
- \ifnum\lccode\expandafter`\thearg=0\relax
- \numericenumerate % a number (we hope)
- \else
- % It's a letter.
- \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
- \lowercaseenumerate % lowercase letter
- \else
- \uppercaseenumerate % uppercase letter
- \fi
- \fi
- \else
- % Multiple tokens in the argument. We hope it's a number.
- \numericenumerate
- \fi
-}
-
-% An @enumerate whose labels are integers. The starting integer is
-% given in \thearg.
-%
-\def\numericenumerate{%
- \itemno = \thearg
- \startenumeration{\the\itemno}%
-}
-
-% The starting (lowercase) letter is in \thearg.
-\def\lowercaseenumerate{%
- \itemno = \expandafter`\thearg
- \startenumeration{%
- % Be sure we're not beyond the end of the alphabet.
- \ifnum\itemno=0
- \errmessage{No more lowercase letters in @enumerate; get a bigger
- alphabet}%
- \fi
- \char\lccode\itemno
- }%
-}
-
-% The starting (uppercase) letter is in \thearg.
-\def\uppercaseenumerate{%
- \itemno = \expandafter`\thearg
- \startenumeration{%
- % Be sure we're not beyond the end of the alphabet.
- \ifnum\itemno=0
- \errmessage{No more uppercase letters in @enumerate; get a bigger
- alphabet}
- \fi
- \char\uccode\itemno
- }%
-}
-
-% Call itemizey, adding a period to the first argument and supplying the
-% common last two arguments. Also subtract one from the initial value in
-% \itemno, since @item increments \itemno.
-%
-\def\startenumeration#1{%
- \advance\itemno by -1
- \itemizey{#1.}\Eenumerate\flushcr
-}
-
-% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
-% to @enumerate.
-%
-\def\alphaenumerate{\enumerate{a}}
-\def\capsenumerate{\enumerate{A}}
-\def\Ealphaenumerate{\Eenumerate}
-\def\Ecapsenumerate{\Eenumerate}
-
-% Definition of @item while inside @itemize.
-
-\def\itemizeitem{%
-\advance\itemno by 1
-{\let\par=\endgraf \smallbreak}%
-\ifhmode \errmessage{In hmode at itemizeitem}\fi
-{\parskip=0in \hskip 0pt
-\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
-\vadjust{\penalty 1200}}%
-\flushcr}
-
-% @multitable macros
-% Amy Hendrickson, 8/18/94, 3/6/96
-%
-% @multitable ... @end multitable will make as many columns as desired.
-% Contents of each column will wrap at width given in preamble. Width
-% can be specified either with sample text given in a template line,
-% or in percent of \hsize, the current width of text on page.
-
-% Table can continue over pages but will only break between lines.
-
-% To make preamble:
-%
-% Either define widths of columns in terms of percent of \hsize:
-% @multitable @columnfractions .25 .3 .45
-% @item ...
-%
-% Numbers following @columnfractions are the percent of the total
-% current hsize to be used for each column. You may use as many
-% columns as desired.
-
-
-% Or use a template:
-% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
-% @item ...
-% using the widest term desired in each column.
-%
-% For those who want to use more than one line's worth of words in
-% the preamble, break the line within one argument and it
-% will parse correctly, i.e.,
-%
-% @multitable {Column 1 template} {Column 2 template} {Column 3
-% template}
-% Not:
-% @multitable {Column 1 template} {Column 2 template}
-% {Column 3 template}
-
-% Each new table line starts with @item, each subsequent new column
-% starts with @tab. Empty columns may be produced by supplying @tab's
-% with nothing between them for as many times as empty columns are needed,
-% ie, @tab@tab@tab will produce two empty columns.
-
-% @item, @tab, @multitable or @end multitable do not need to be on their
-% own lines, but it will not hurt if they are.
-
-% Sample multitable:
-
-% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
-% @item first col stuff @tab second col stuff @tab third col
-% @item
-% first col stuff
-% @tab
-% second col stuff
-% @tab
-% third col
-% @item first col stuff @tab second col stuff
-% @tab Many paragraphs of text may be used in any column.
-%
-% They will wrap at the width determined by the template.
-% @item@tab@tab This will be in third column.
-% @end multitable
-
-% Default dimensions may be reset by user.
-% @multitableparskip is vertical space between paragraphs in table.
-% @multitableparindent is paragraph indent in table.
-% @multitablecolmargin is horizontal space to be left between columns.
-% @multitablelinespace is space to leave between table items, baseline
-% to baseline.
-% 0pt means it depends on current normal line spacing.
-
-%%%%
-% Dimensions
-
-\newskip\multitableparskip
-\newskip\multitableparindent
-\newdimen\multitablecolspace
-\newskip\multitablelinespace
-\multitableparskip=0pt
-\multitableparindent=6pt
-\multitablecolspace=12pt
-\multitablelinespace=0pt
-
-%%%%
-% Macros used to set up halign preamble:
-\let\endsetuptable\relax
-\def\xendsetuptable{\endsetuptable}
-\let\columnfractions\relax
-\def\xcolumnfractions{\columnfractions}
-\newif\ifsetpercent
-
-%% 2/1/96, to allow fractions to be given with more than one digit.
-\def\pickupwholefraction#1 {\global\advance\colcount by1 %
-\expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}%
-\setuptable}
-
-\newcount\colcount
-\def\setuptable#1{\def\firstarg{#1}%
-\ifx\firstarg\xendsetuptable\let\go\relax%
-\else
- \ifx\firstarg\xcolumnfractions\global\setpercenttrue%
- \else
- \ifsetpercent
- \let\go\pickupwholefraction % In this case arg of setuptable
- % is the decimal point before the
- % number given in percent of hsize.
- % We don't need this so we don't use it.
- \else
- \global\advance\colcount by1
- \setbox0=\hbox{#1 }% Add a normal word space as a separator;
- % typically that is always in the input, anyway.
- \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
- \fi%
- \fi%
-\ifx\go\pickupwholefraction\else\let\go\setuptable\fi%
-\fi\go}
-
-%%%%
-% multitable syntax
-\def\tab{&\hskip1sp\relax} % 2/2/96
- % tiny skip here makes sure this column space is
- % maintained, even if it is never used.
-
-
-%%%%
-% @multitable ... @end multitable definitions:
-
-\def\multitable{\parsearg\dotable}
-
-\def\dotable#1{\bgroup
-\let\item\cr
-\tolerance=9500
-\hbadness=9500
-\setmultitablespacing
-\parskip=\multitableparskip
-\parindent=\multitableparindent
-\overfullrule=0pt
-\global\colcount=0\relax%
-\def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}%
- % To parse everything between @multitable and @item :
-\setuptable#1 \endsetuptable
- % Need to reset this to 0 after \setuptable.
-\global\colcount=0\relax%
- %
- % This preamble sets up a generic column definition, which will
- % be used as many times as user calls for columns.
- % \vtop will set a single line and will also let text wrap and
- % continue for many paragraphs if desired.
-\halign\bgroup&\global\advance\colcount by 1\relax%
-\multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
- % In order to keep entries from bumping into each other
- % we will add a \leftskip of \multitablecolspace to all columns after
- % the first one.
- % If a template has been used, we will add \multitablecolspace
- % to the width of each template entry.
- % If user has set preamble in terms of percent of \hsize
- % we will use that dimension as the width of the column, and
- % the \leftskip will keep entries from bumping into each other.
- % Table will start at left margin and final column will justify at
- % right margin.
-\ifnum\colcount=1
-\else
- \ifsetpercent
- \else
- % If user has <not> set preamble in terms of percent of \hsize
- % we will advance \hsize by \multitablecolspace
- \advance\hsize by \multitablecolspace
- \fi
- % In either case we will make \leftskip=\multitablecolspace:
-\leftskip=\multitablecolspace
-\fi
- % Ignoring space at the beginning and end avoids an occasional spurious
- % blank line, when TeX decides to break the line at the space before the
- % box from the multistrut, so the strut ends up on a line by itself.
- % For example:
- % @multitable @columnfractions .11 .89
- % @item @code{#}
- % @tab Legal holiday which is valid in major parts of the whole country.
- % Is automatically provided with highlighting sequences respectively marking
- % characters.
- \noindent\ignorespaces##\unskip\multistrut}\cr
- % \everycr will reset column counter, \colcount, at the end of
- % each line. Every column entry will cause \colcount to advance by one.
- % The table preamble
- % looks at the current \colcount to find the correct column width.
-\global\everycr{\noalign{%
-% \filbreak%% keeps underfull box messages off when table breaks over pages.
-% Maybe so, but it also creates really weird page breaks when the table
-% breaks over pages Wouldn't \vfil be better? Wait until the problem
-% manifests itself, so it can be fixed for real --karl.
-\global\colcount=0\relax}}
-}
-
-\def\setmultitablespacing{% test to see if user has set \multitablelinespace.
-% If so, do nothing. If not, give it an appropriate dimension based on
-% current baselineskip.
-\ifdim\multitablelinespace=0pt
-%% strut to put in table in case some entry doesn't have descenders,
-%% to keep lines equally spaced
-\let\multistrut = \strut
-%% Test to see if parskip is larger than space between lines of
-%% table. If not, do nothing.
-%% If so, set to same dimension as multitablelinespace.
-\else
-\gdef\multistrut{\vrule height\multitablelinespace depth\dp0
-width0pt\relax} \fi
-\ifdim\multitableparskip>\multitablelinespace
-\global\multitableparskip=\multitablelinespace
-\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
- %% than skip between lines in the table.
-\fi%
-\ifdim\multitableparskip=0pt
-\global\multitableparskip=\multitablelinespace
-\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
- %% than skip between lines in the table.
-\fi}
-
-
-\message{indexing,}
-% Index generation facilities
-
-% Define \newwrite to be identical to plain tex's \newwrite
-% except not \outer, so it can be used within \newindex.
-{\catcode`\@=11
-\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}}
-
-% \newindex {foo} defines an index named foo.
-% It automatically defines \fooindex such that
-% \fooindex ...rest of line... puts an entry in the index foo.
-% It also defines \fooindfile to be the number of the output channel for
-% the file that accumulates this index. The file's extension is foo.
-% The name of an index should be no more than 2 characters long
-% for the sake of vms.
-
-\def\newindex #1{
-\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
-\openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
-\noexpand\doindex {#1}}
-}
-
-% @defindex foo == \newindex{foo}
-
-\def\defindex{\parsearg\newindex}
-
-% Define @defcodeindex, like @defindex except put all entries in @code.
-
-\def\newcodeindex #1{
-\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
-\openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
-\noexpand\docodeindex {#1}}
-}
-
-\def\defcodeindex{\parsearg\newcodeindex}
-
-% @synindex foo bar makes index foo feed into index bar.
-% Do this instead of @defindex foo if you don't want it as a separate index.
-\def\synindex #1 #2 {%
-\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
-\expandafter\let\csname#1indfile\endcsname=\synindexfoo
-\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
-\noexpand\doindex {#2}}%
-}
-
-% @syncodeindex foo bar similar, but put all entries made for index foo
-% inside @code.
-\def\syncodeindex #1 #2 {%
-\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
-\expandafter\let\csname#1indfile\endcsname=\synindexfoo
-\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
-\noexpand\docodeindex {#2}}%
-}
-
-% Define \doindex, the driver for all \fooindex macros.
-% Argument #1 is generated by the calling \fooindex macro,
-% and it is "foo", the name of the index.
-
-% \doindex just uses \parsearg; it calls \doind for the actual work.
-% This is because \doind is more useful to call from other macros.
-
-% There is also \dosubind {index}{topic}{subtopic}
-% which makes an entry in a two-level index such as the operation index.
-
-\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
-\def\singleindexer #1{\doind{\indexname}{#1}}
-
-% like the previous two, but they put @code around the argument.
-\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
-\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
-
-\def\indexdummies{%
-% Take care of the plain tex accent commands.
-\def\"{\realbackslash "}%
-\def\`{\realbackslash `}%
-\def\'{\realbackslash '}%
-\def\^{\realbackslash ^}%
-\def\~{\realbackslash ~}%
-\def\={\realbackslash =}%
-\def\b{\realbackslash b}%
-\def\c{\realbackslash c}%
-\def\d{\realbackslash d}%
-\def\u{\realbackslash u}%
-\def\v{\realbackslash v}%
-\def\H{\realbackslash H}%
-% Take care of the plain tex special European modified letters.
-\def\oe{\realbackslash oe}%
-\def\ae{\realbackslash ae}%
-\def\aa{\realbackslash aa}%
-\def\OE{\realbackslash OE}%
-\def\AE{\realbackslash AE}%
-\def\AA{\realbackslash AA}%
-\def\o{\realbackslash o}%
-\def\O{\realbackslash O}%
-\def\l{\realbackslash l}%
-\def\L{\realbackslash L}%
-\def\ss{\realbackslash ss}%
-% Take care of texinfo commands likely to appear in an index entry.
-% (Must be a way to avoid doing expansion at all, and thus not have to
-% laboriously list every single command here.)
-\def\@{@}% will be @@ when we switch to @ as escape char.
-%\let\{ = \lbracecmd
-%\let\} = \rbracecmd
-\def\_{{\realbackslash _}}%
-\def\w{\realbackslash w }%
-\def\bf{\realbackslash bf }%
-%\def\rm{\realbackslash rm }%
-\def\sl{\realbackslash sl }%
-\def\sf{\realbackslash sf}%
-\def\tt{\realbackslash tt}%
-\def\gtr{\realbackslash gtr}%
-\def\less{\realbackslash less}%
-\def\hat{\realbackslash hat}%
-%\def\char{\realbackslash char}%
-\def\TeX{\realbackslash TeX}%
-\def\dots{\realbackslash dots }%
-\def\result{\realbackslash result}%
-\def\equiv{\realbackslash equiv}%
-\def\expansion{\realbackslash expansion}%
-\def\print{\realbackslash print}%
-\def\error{\realbackslash error}%
-\def\point{\realbackslash point}%
-\def\copyright{\realbackslash copyright}%
-\def\tclose##1{\realbackslash tclose {##1}}%
-\def\code##1{\realbackslash code {##1}}%
-\def\dotless##1{\realbackslash dotless {##1}}%
-\def\samp##1{\realbackslash samp {##1}}%
-\def\,##1{\realbackslash ,{##1}}%
-\def\t##1{\realbackslash t {##1}}%
-\def\r##1{\realbackslash r {##1}}%
-\def\i##1{\realbackslash i {##1}}%
-\def\b##1{\realbackslash b {##1}}%
-\def\sc##1{\realbackslash sc {##1}}%
-\def\cite##1{\realbackslash cite {##1}}%
-\def\key##1{\realbackslash key {##1}}%
-\def\file##1{\realbackslash file {##1}}%
-\def\var##1{\realbackslash var {##1}}%
-\def\kbd##1{\realbackslash kbd {##1}}%
-\def\dfn##1{\realbackslash dfn {##1}}%
-\def\emph##1{\realbackslash emph {##1}}%
-\def\value##1{\realbackslash value {##1}}%
-\unsepspaces
-}
-
-% If an index command is used in an @example environment, any spaces
-% therein should become regular spaces in the raw index file, not the
-% expansion of \tie (\\leavevmode \penalty \@M \ ).
-{\obeyspaces
- \gdef\unsepspaces{\obeyspaces\let =\space}}
-
-% \indexnofonts no-ops all font-change commands.
-% This is used when outputting the strings to sort the index by.
-\def\indexdummyfont#1{#1}
-\def\indexdummytex{TeX}
-\def\indexdummydots{...}
-
-\def\indexnofonts{%
-% Just ignore accents.
-\let\,=\indexdummyfont
-\let\"=\indexdummyfont
-\let\`=\indexdummyfont
-\let\'=\indexdummyfont
-\let\^=\indexdummyfont
-\let\~=\indexdummyfont
-\let\==\indexdummyfont
-\let\b=\indexdummyfont
-\let\c=\indexdummyfont
-\let\d=\indexdummyfont
-\let\u=\indexdummyfont
-\let\v=\indexdummyfont
-\let\H=\indexdummyfont
-\let\dotless=\indexdummyfont
-% Take care of the plain tex special European modified letters.
-\def\oe{oe}%
-\def\ae{ae}%
-\def\aa{aa}%
-\def\OE{OE}%
-\def\AE{AE}%
-\def\AA{AA}%
-\def\o{o}%
-\def\O{O}%
-\def\l{l}%
-\def\L{L}%
-\def\ss{ss}%
-\let\w=\indexdummyfont
-\let\t=\indexdummyfont
-\let\r=\indexdummyfont
-\let\i=\indexdummyfont
-\let\b=\indexdummyfont
-\let\emph=\indexdummyfont
-\let\strong=\indexdummyfont
-\let\cite=\indexdummyfont
-\let\sc=\indexdummyfont
-%Don't no-op \tt, since it isn't a user-level command
-% and is used in the definitions of the active chars like <, >, |...
-%\let\tt=\indexdummyfont
-\let\tclose=\indexdummyfont
-\let\code=\indexdummyfont
-\let\file=\indexdummyfont
-\let\samp=\indexdummyfont
-\let\kbd=\indexdummyfont
-\let\key=\indexdummyfont
-\let\var=\indexdummyfont
-\let\TeX=\indexdummytex
-\let\dots=\indexdummydots
-\def\@{@}%
-}
-
-% To define \realbackslash, we must make \ not be an escape.
-% We must first make another character (@) an escape
-% so we do not become unable to do a definition.
-
-{\catcode`\@=0 \catcode`\\=\other
-@gdef@realbackslash{\}}
-
-\let\indexbackslash=0 %overridden during \printindex.
-
-\let\SETmarginindex=\relax %initialize!
-% workhorse for all \fooindexes
-% #1 is name of index, #2 is stuff to put there
-\def\doind #1#2{%
- % Put the index entry in the margin if desired.
- \ifx\SETmarginindex\relax\else
- \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
- \fi
- {%
- \count255=\lastpenalty
- {%
- \indexdummies % Must do this here, since \bf, etc expand at this stage
- \escapechar=`\\
- {%
- \let\folio=0% We will expand all macros now EXCEPT \folio.
- \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
- % so it will be output as is; and it will print as backslash.
- %
- % First process the index-string with all font commands turned off
- % to get the string to sort by.
- {\indexnofonts \xdef\indexsorttmp{#2}}%
- %
- % Now produce the complete index entry, with both the sort key and the
- % original text, including any font commands.
- \toks0 = {#2}%
- \edef\temp{%
- \write\csname#1indfile\endcsname{%
- \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
- }%
- \temp
- }%
- }%
- \penalty\count255
- }%
-}
-
-\def\dosubind #1#2#3{%
-{\count10=\lastpenalty %
-{\indexdummies % Must do this here, since \bf, etc expand at this stage
-\escapechar=`\\%
-{\let\folio=0%
-\def\rawbackslashxx{\indexbackslash}%
-%
-% Now process the index-string once, with all font commands turned off,
-% to get the string to sort the index by.
-{\indexnofonts
-\xdef\temp1{#2 #3}%
-}%
-% Now produce the complete index entry. We process the index-string again,
-% this time with font commands expanded, to get what to print in the index.
-\edef\temp{%
-\write \csname#1indfile\endcsname{%
-\realbackslash entry {\temp1}{\folio}{#2}{#3}}}%
-\temp }%
-}\penalty\count10}}
-
-% The index entry written in the file actually looks like
-% \entry {sortstring}{page}{topic}
-% or
-% \entry {sortstring}{page}{topic}{subtopic}
-% The texindex program reads in these files and writes files
-% containing these kinds of lines:
-% \initial {c}
-% before the first topic whose initial is c
-% \entry {topic}{pagelist}
-% for a topic that is used without subtopics
-% \primary {topic}
-% for the beginning of a topic that is used with subtopics
-% \secondary {subtopic}{pagelist}
-% for each subtopic.
-
-% Define the user-accessible indexing commands
-% @findex, @vindex, @kindex, @cindex.
-
-\def\findex {\fnindex}
-\def\kindex {\kyindex}
-\def\cindex {\cpindex}
-\def\vindex {\vrindex}
-\def\tindex {\tpindex}
-\def\pindex {\pgindex}
-
-\def\cindexsub {\begingroup\obeylines\cindexsub}
-{\obeylines %
-\gdef\cindexsub "#1" #2^^M{\endgroup %
-\dosubind{cp}{#2}{#1}}}
-
-% Define the macros used in formatting output of the sorted index material.
-
-% @printindex causes a particular index (the ??s file) to get printed.
-% It does not print any chapter heading (usually an @unnumbered).
-%
-\def\printindex{\parsearg\doprintindex}
-\def\doprintindex#1{\begingroup
- \dobreak \chapheadingskip{10000}%
- %
- \indexfonts \rm
- \tolerance = 9500
- \indexbreaks
- %
- % See if the index file exists and is nonempty.
- \openin 1 \jobname.#1s
- \ifeof 1
- % \enddoublecolumns gets confused if there is no text in the index,
- % and it loses the chapter title and the aux file entries for the
- % index. The easiest way to prevent this problem is to make sure
- % there is some text.
- (Index is nonexistent)
- \else
- %
- % If the index file exists but is empty, then \openin leaves \ifeof
- % false. We have to make TeX try to read something from the file, so
- % it can discover if there is anything in it.
- \read 1 to \temp
- \ifeof 1
- (Index is empty)
- \else
- % Index files are almost Texinfo source, but we use \ as the escape
- % character. It would be better to use @, but that's too big a change
- % to make right now.
- \def\indexbackslash{\rawbackslashxx}%
- \catcode`\\ = 0
- \catcode`\@ = 11
- \escapechar = `\\
- \begindoublecolumns
- \input \jobname.#1s
- \enddoublecolumns
- \fi
- \fi
- \closein 1
-\endgroup}
-
-% These macros are used by the sorted index file itself.
-% Change them to control the appearance of the index.
-
-% Same as \bigskipamount except no shrink.
-% \balancecolumns gets confused if there is any shrink.
-\newskip\initialskipamount \initialskipamount 12pt plus4pt
-
-\def\initial #1{%
-{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
-\ifdim\lastskip<\initialskipamount
-\removelastskip \penalty-200 \vskip \initialskipamount\fi
-\line{\secbf#1\hfill}\kern 2pt\penalty10000}}
-
-% This typesets a paragraph consisting of #1, dot leaders, and then #2
-% flush to the right margin. It is used for index and table of contents
-% entries. The paragraph is indented by \leftskip.
-%
-\def\entry #1#2{\begingroup
- %
- % Start a new paragraph if necessary, so our assignments below can't
- % affect previous text.
- \par
- %
- % Do not fill out the last line with white space.
- \parfillskip = 0in
- %
- % No extra space above this paragraph.
- \parskip = 0in
- %
- % Do not prefer a separate line ending with a hyphen to fewer lines.
- \finalhyphendemerits = 0
- %
- % \hangindent is only relevant when the entry text and page number
- % don't both fit on one line. In that case, bob suggests starting the
- % dots pretty far over on the line. Unfortunately, a large
- % indentation looks wrong when the entry text itself is broken across
- % lines. So we use a small indentation and put up with long leaders.
- %
- % \hangafter is reset to 1 (which is the value we want) at the start
- % of each paragraph, so we need not do anything with that.
- \hangindent=2em
- %
- % When the entry text needs to be broken, just fill out the first line
- % with blank space.
- \rightskip = 0pt plus1fil
- %
- % Start a ``paragraph'' for the index entry so the line breaking
- % parameters we've set above will have an effect.
- \noindent
- %
- % Insert the text of the index entry. TeX will do line-breaking on it.
- #1%
- % The following is kludged to not output a line of dots in the index if
- % there are no page numbers. The next person who breaks this will be
- % cursed by a Unix daemon.
- \def\tempa{{\rm }}%
- \def\tempb{#2}%
- \edef\tempc{\tempa}%
- \edef\tempd{\tempb}%
- \ifx\tempc\tempd\ \else%
- %
- % If we must, put the page number on a line of its own, and fill out
- % this line with blank space. (The \hfil is overwhelmed with the
- % fill leaders glue in \indexdotfill if the page number does fit.)
- \hfil\penalty50
- \null\nobreak\indexdotfill % Have leaders before the page number.
- %
- % The `\ ' here is removed by the implicit \unskip that TeX does as
- % part of (the primitive) \par. Without it, a spurious underfull
- % \hbox ensues.
- \ #2% The page number ends the paragraph.
- \fi%
- \par
-\endgroup}
-
-% Like \dotfill except takes at least 1 em.
-\def\indexdotfill{\cleaders
- \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill}
-
-\def\primary #1{\line{#1\hfil}}
-
-\newskip\secondaryindent \secondaryindent=0.5cm
-
-\def\secondary #1#2{
-{\parfillskip=0in \parskip=0in
-\hangindent =1in \hangafter=1
-\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par
-}}
-
-% Define two-column mode, which we use to typeset indexes.
-% Adapted from the TeXbook, page 416, which is to say,
-% the manmac.tex format used to print the TeXbook itself.
-\catcode`\@=11
-
-\newbox\partialpage
-\newdimen\doublecolumnhsize
-
-\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
- % Grab any single-column material above us.
- \output = {\global\setbox\partialpage = \vbox{%
- %
- % Here is a possibility not foreseen in manmac: if we accumulate a
- % whole lot of material, we might end up calling this \output
- % routine twice in a row (see the doublecol-lose test, which is
- % essentially a couple of indexes with @setchapternewpage off). In
- % that case, we must prevent the second \partialpage from
- % simply overwriting the first, causing us to lose the page.
- % This will preserve it until a real output routine can ship it
- % out. Generally, \partialpage will be empty when this runs and
- % this will be a no-op.
- \unvbox\partialpage
- %
- % Unvbox the main output page.
- \unvbox255
- \kern-\topskip \kern\baselineskip
- }}%
- \eject
- %
- % Use the double-column output routine for subsequent pages.
- \output = {\doublecolumnout}%
- %
- % Change the page size parameters. We could do this once outside this
- % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
- % format, but then we repeat the same computation. Repeating a couple
- % of assignments once per index is clearly meaningless for the
- % execution time, so we may as well do it in one place.
- %
- % First we halve the line length, less a little for the gutter between
- % the columns. We compute the gutter based on the line length, so it
- % changes automatically with the paper format. The magic constant
- % below is chosen so that the gutter has the same value (well, +-<1pt)
- % as it did when we hard-coded it.
- %
- % We put the result in a separate register, \doublecolumhsize, so we
- % can restore it in \pagesofar, after \hsize itself has (potentially)
- % been clobbered.
- %
- \doublecolumnhsize = \hsize
- \advance\doublecolumnhsize by -.04154\hsize
- \divide\doublecolumnhsize by 2
- \hsize = \doublecolumnhsize
- %
- % Double the \vsize as well. (We don't need a separate register here,
- % since nobody clobbers \vsize.)
- \vsize = 2\vsize
-}
-\def\doublecolumnout{%
- \splittopskip=\topskip \splitmaxdepth=\maxdepth
- % Get the available space for the double columns -- the normal
- % (undoubled) page height minus any material left over from the
- % previous page.
- \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage
- % box0 will be the left-hand column, box2 the right.
- \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
- \onepageout\pagesofar
- \unvbox255
- \penalty\outputpenalty
-}
-\def\pagesofar{%
- % Re-output the contents of the output page -- any previous material,
- % followed by the two boxes we just split.
- \unvbox\partialpage
- \hsize = \doublecolumnhsize
- \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}%
-}
-\def\enddoublecolumns{%
- \output = {\balancecolumns}\eject % split what we have
- \endgroup % started in \begindoublecolumns
- %
- % Back to normal single-column typesetting, but take account of the
- % fact that we just accumulated some stuff on the output page.
- \pagegoal = \vsize
-}
-\def\balancecolumns{%
- % Called at the end of the double column material.
- \setbox0 = \vbox{\unvbox255}%
- \dimen@ = \ht0
- \advance\dimen@ by \topskip
- \advance\dimen@ by-\baselineskip
- \divide\dimen@ by 2
- \splittopskip = \topskip
- % Loop until we get a decent breakpoint.
- {\vbadness=10000 \loop
- \global\setbox3=\copy0
- \global\setbox1=\vsplit3 to\dimen@
- \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt
- \repeat}%
- \setbox0=\vbox to\dimen@{\unvbox1}%
- \setbox2=\vbox to\dimen@{\unvbox3}%
- \pagesofar
-}
-\catcode`\@ = \other
-
-
-\message{sectioning,}
-% Define chapters, sections, etc.
-
-\newcount\chapno
-\newcount\secno \secno=0
-\newcount\subsecno \subsecno=0
-\newcount\subsubsecno \subsubsecno=0
-
-% This counter is funny since it counts through charcodes of letters A, B, ...
-\newcount\appendixno \appendixno = `\@
-\def\appendixletter{\char\the\appendixno}
-
-\newwrite\contentsfile
-% This is called from \setfilename.
-\def\opencontents{\openout\contentsfile = \jobname.toc }
-
-% Each @chapter defines this as the name of the chapter.
-% page headings and footings can use it. @section does likewise
-
-\def\thischapter{} \def\thissection{}
-\def\seccheck#1{\ifnum \pageno<0
- \errmessage{@#1 not allowed after generating table of contents}%
-\fi}
-
-\def\chapternofonts{%
- \let\rawbackslash=\relax
- \let\frenchspacing=\relax
- \def\result{\realbackslash result}%
- \def\equiv{\realbackslash equiv}%
- \def\expansion{\realbackslash expansion}%
- \def\print{\realbackslash print}%
- \def\TeX{\realbackslash TeX}%
- \def\dots{\realbackslash dots}%
- \def\result{\realbackslash result}%
- \def\equiv{\realbackslash equiv}%
- \def\expansion{\realbackslash expansion}%
- \def\print{\realbackslash print}%
- \def\error{\realbackslash error}%
- \def\point{\realbackslash point}%
- \def\copyright{\realbackslash copyright}%
- \def\tt{\realbackslash tt}%
- \def\bf{\realbackslash bf}%
- \def\w{\realbackslash w}%
- \def\less{\realbackslash less}%
- \def\gtr{\realbackslash gtr}%
- \def\hat{\realbackslash hat}%
- \def\char{\realbackslash char}%
- \def\tclose##1{\realbackslash tclose{##1}}%
- \def\code##1{\realbackslash code{##1}}%
- \def\samp##1{\realbackslash samp{##1}}%
- \def\r##1{\realbackslash r{##1}}%
- \def\b##1{\realbackslash b{##1}}%
- \def\key##1{\realbackslash key{##1}}%
- \def\file##1{\realbackslash file{##1}}%
- \def\kbd##1{\realbackslash kbd{##1}}%
- % These are redefined because @smartitalic wouldn't work inside xdef.
- \def\i##1{\realbackslash i{##1}}%
- \def\cite##1{\realbackslash cite{##1}}%
- \def\var##1{\realbackslash var{##1}}%
- \def\emph##1{\realbackslash emph{##1}}%
- \def\dfn##1{\realbackslash dfn{##1}}%
-}
-
-\newcount\absseclevel % used to calculate proper heading level
-\newcount\secbase\secbase=0 % @raise/lowersections modify this count
-
-% @raisesections: treat @section as chapter, @subsection as section, etc.
-\def\raisesections{\global\advance\secbase by -1}
-\let\up=\raisesections % original BFox name
-
-% @lowersections: treat @chapter as section, @section as subsection, etc.
-\def\lowersections{\global\advance\secbase by 1}
-\let\down=\lowersections % original BFox name
-
-% Choose a numbered-heading macro
-% #1 is heading level if unmodified by @raisesections or @lowersections
-% #2 is text for heading
-\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
- \chapterzzz{#2}
-\or
- \seczzz{#2}
-\or
- \numberedsubseczzz{#2}
-\or
- \numberedsubsubseczzz{#2}
-\else
- \ifnum \absseclevel<0
- \chapterzzz{#2}
- \else
- \numberedsubsubseczzz{#2}
- \fi
-\fi
-}
-
-% like \numhead, but chooses appendix heading levels
-\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
- \appendixzzz{#2}
-\or
- \appendixsectionzzz{#2}
-\or
- \appendixsubseczzz{#2}
-\or
- \appendixsubsubseczzz{#2}
-\else
- \ifnum \absseclevel<0
- \appendixzzz{#2}
- \else
- \appendixsubsubseczzz{#2}
- \fi
-\fi
-}
-
-% like \numhead, but chooses numberless heading levels
-\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
- \unnumberedzzz{#2}
-\or
- \unnumberedseczzz{#2}
-\or
- \unnumberedsubseczzz{#2}
-\or
- \unnumberedsubsubseczzz{#2}
-\else
- \ifnum \absseclevel<0
- \unnumberedzzz{#2}
- \else
- \unnumberedsubsubseczzz{#2}
- \fi
-\fi
-}
-
-
-\def\thischaptername{No Chapter Title}
-\outer\def\chapter{\parsearg\chapteryyy}
-\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
-\def\chapterzzz #1{\seccheck{chapter}%
-\secno=0 \subsecno=0 \subsubsecno=0
-\global\advance \chapno by 1 \message{\putwordChapter \the\chapno}%
-\chapmacro {#1}{\the\chapno}%
-\gdef\thissection{#1}%
-\gdef\thischaptername{#1}%
-% We don't substitute the actual chapter name into \thischapter
-% because we don't want its macros evaluated now.
-\xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
-{\chapternofonts%
-\toks0 = {#1}%
-\edef\temp{{\realbackslash chapentry{\the\toks0}{\the\chapno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\donoderef %
-\global\let\section = \numberedsec
-\global\let\subsection = \numberedsubsec
-\global\let\subsubsection = \numberedsubsubsec
-}}
-
-\outer\def\appendix{\parsearg\appendixyyy}
-\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz
-\def\appendixzzz #1{\seccheck{appendix}%
-\secno=0 \subsecno=0 \subsubsecno=0
-\global\advance \appendixno by 1 \message{Appendix \appendixletter}%
-\chapmacro {#1}{\putwordAppendix{} \appendixletter}%
-\gdef\thissection{#1}%
-\gdef\thischaptername{#1}%
-\xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
-{\chapternofonts%
-\toks0 = {#1}%
-\edef\temp{{\realbackslash chapentry{\the\toks0}%
- {\putwordAppendix{} \appendixletter}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\appendixnoderef %
-\global\let\section = \appendixsec
-\global\let\subsection = \appendixsubsec
-\global\let\subsubsection = \appendixsubsubsec
-}}
-
-% @centerchap is like @unnumbered, but the heading is centered.
-\outer\def\centerchap{\parsearg\centerchapyyy}
-\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}}
-
-\outer\def\top{\parsearg\unnumberedyyy}
-\outer\def\unnumbered{\parsearg\unnumberedyyy}
-\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
-\def\unnumberedzzz #1{\seccheck{unnumbered}%
-\secno=0 \subsecno=0 \subsubsecno=0
-%
-% This used to be simply \message{#1}, but TeX fully expands the
-% argument to \message. Therefore, if #1 contained @-commands, TeX
-% expanded them. For example, in `@unnumbered The @cite{Book}', TeX
-% expanded @cite (which turns out to cause errors because \cite is meant
-% to be executed, not expanded).
-%
-% Anyway, we don't want the fully-expanded definition of @cite to appear
-% as a result of the \message, we just want `@cite' itself. We use
-% \the<toks register> to achieve this: TeX expands \the<toks> only once,
-% simply yielding the contents of the <toks register>.
-\toks0 = {#1}\message{(\the\toks0)}%
-%
-\unnumbchapmacro {#1}%
-\gdef\thischapter{#1}\gdef\thissection{#1}%
-{\chapternofonts%
-\toks0 = {#1}%
-\edef\temp{{\realbackslash unnumbchapentry{\the\toks0}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\global\let\section = \unnumberedsec
-\global\let\subsection = \unnumberedsubsec
-\global\let\subsubsection = \unnumberedsubsubsec
-}}
-
-\outer\def\numberedsec{\parsearg\secyyy}
-\def\secyyy #1{\numhead1{#1}} % normally calls seczzz
-\def\seczzz #1{\seccheck{section}%
-\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
-\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
-{\chapternofonts%
-\toks0 = {#1}%
-\edef\temp{{\realbackslash secentry %
-{\the\toks0}{\the\chapno}{\the\secno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\donoderef %
-\penalty 10000 %
-}}
-
-\outer\def\appendixsection{\parsearg\appendixsecyyy}
-\outer\def\appendixsec{\parsearg\appendixsecyyy}
-\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
-\def\appendixsectionzzz #1{\seccheck{appendixsection}%
-\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
-\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
-{\chapternofonts%
-\toks0 = {#1}%
-\edef\temp{{\realbackslash secentry %
-{\the\toks0}{\appendixletter}{\the\secno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\appendixnoderef %
-\penalty 10000 %
-}}
-
-\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy}
-\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz
-\def\unnumberedseczzz #1{\seccheck{unnumberedsec}%
-\plainsecheading {#1}\gdef\thissection{#1}%
-{\chapternofonts%
-\toks0 = {#1}%
-\edef\temp{{\realbackslash unnumbsecentry{\the\toks0}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\penalty 10000 %
-}}
-
-\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy}
-\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz
-\def\numberedsubseczzz #1{\seccheck{subsection}%
-\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
-\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
-{\chapternofonts%
-\toks0 = {#1}%
-\edef\temp{{\realbackslash subsecentry %
-{\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\donoderef %
-\penalty 10000 %
-}}
-
-\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy}
-\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz
-\def\appendixsubseczzz #1{\seccheck{appendixsubsec}%
-\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
-\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
-{\chapternofonts%
-\toks0 = {#1}%
-\edef\temp{{\realbackslash subsecentry %
-{\the\toks0}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\appendixnoderef %
-\penalty 10000 %
-}}
-
-\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
-\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
-\def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}%
-\plainsubsecheading {#1}\gdef\thissection{#1}%
-{\chapternofonts%
-\toks0 = {#1}%
-\edef\temp{{\realbackslash unnumbsubsecentry{\the\toks0}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\penalty 10000 %
-}}
-
-\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy}
-\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz
-\def\numberedsubsubseczzz #1{\seccheck{subsubsection}%
-\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
-\subsubsecheading {#1}
- {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-{\chapternofonts%
-\toks0 = {#1}%
-\edef\temp{{\realbackslash subsubsecentry{\the\toks0}
- {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}
- {\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\donoderef %
-\penalty 10000 %
-}}
-
-\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy}
-\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz
-\def\appendixsubsubseczzz #1{\seccheck{appendixsubsubsec}%
-\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
-\subsubsecheading {#1}
- {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-{\chapternofonts%
-\toks0 = {#1}%
-\edef\temp{{\realbackslash subsubsecentry{\the\toks0}%
- {\appendixletter}
- {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\appendixnoderef %
-\penalty 10000 %
-}}
-
-\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
-\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
-\def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}%
-\plainsubsubsecheading {#1}\gdef\thissection{#1}%
-{\chapternofonts%
-\toks0 = {#1}%
-\edef\temp{{\realbackslash unnumbsubsubsecentry{\the\toks0}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\penalty 10000 %
-}}
-
-% These are variants which are not "outer", so they can appear in @ifinfo.
-% Actually, they should now be obsolete; ordinary section commands should work.
-\def\infotop{\parsearg\unnumberedzzz}
-\def\infounnumbered{\parsearg\unnumberedzzz}
-\def\infounnumberedsec{\parsearg\unnumberedseczzz}
-\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz}
-\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz}
-
-\def\infoappendix{\parsearg\appendixzzz}
-\def\infoappendixsec{\parsearg\appendixseczzz}
-\def\infoappendixsubsec{\parsearg\appendixsubseczzz}
-\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}
-
-\def\infochapter{\parsearg\chapterzzz}
-\def\infosection{\parsearg\sectionzzz}
-\def\infosubsection{\parsearg\subsectionzzz}
-\def\infosubsubsection{\parsearg\subsubsectionzzz}
-
-% These macros control what the section commands do, according
-% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
-% Define them by default for a numbered chapter.
-\global\let\section = \numberedsec
-\global\let\subsection = \numberedsubsec
-\global\let\subsubsection = \numberedsubsubsec
-
-% Define @majorheading, @heading and @subheading
-
-% NOTE on use of \vbox for chapter headings, section headings, and
-% such:
-% 1) We use \vbox rather than the earlier \line to permit
-% overlong headings to fold.
-% 2) \hyphenpenalty is set to 10000 because hyphenation in a
-% heading is obnoxious; this forbids it.
-% 3) Likewise, headings look best if no \parindent is used, and
-% if justification is not attempted. Hence \raggedright.
-
-
-\def\majorheading{\parsearg\majorheadingzzz}
-\def\majorheadingzzz #1{%
-{\advance\chapheadingskip by 10pt \chapbreak }%
-{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt\raggedright
- \rm #1\hfill}}\bigskip \par\penalty 200}
-
-\def\chapheading{\parsearg\chapheadingzzz}
-\def\chapheadingzzz #1{\chapbreak %
-{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt\raggedright
- \rm #1\hfill}}\bigskip \par\penalty 200}
-
-% @heading, @subheading, @subsubheading.
-\def\heading{\parsearg\plainsecheading}
-\def\subheading{\parsearg\plainsubsecheading}
-\def\subsubheading{\parsearg\plainsubsubsecheading}
-
-% These macros generate a chapter, section, etc. heading only
-% (including whitespace, linebreaking, etc. around it),
-% given all the information in convenient, parsed form.
-
-%%% Args are the skip and penalty (usually negative)
-\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
-
-\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
-
-%%% Define plain chapter starts, and page on/off switching for it
-% Parameter controlling skip before chapter headings (if needed)
-
-\newskip\chapheadingskip
-
-\def\chapbreak{\dobreak \chapheadingskip {-4000}}
-\def\chappager{\par\vfill\supereject}
-\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
-
-\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
-
-\def\CHAPPAGoff{
-\global\let\contentsalignmacro = \chappager
-\global\let\pchapsepmacro=\chapbreak
-\global\let\pagealignmacro=\chappager}
-
-\def\CHAPPAGon{
-\global\let\contentsalignmacro = \chappager
-\global\let\pchapsepmacro=\chappager
-\global\let\pagealignmacro=\chappager
-\global\def\HEADINGSon{\HEADINGSsingle}}
-
-\def\CHAPPAGodd{
-\global\let\contentsalignmacro = \chapoddpage
-\global\let\pchapsepmacro=\chapoddpage
-\global\let\pagealignmacro=\chapoddpage
-\global\def\HEADINGSon{\HEADINGSdouble}}
-
-\CHAPPAGon
-
-\def\CHAPFplain{
-\global\let\chapmacro=\chfplain
-\global\let\unnumbchapmacro=\unnchfplain
-\global\let\centerchapmacro=\centerchfplain}
-
-% Plain chapter opening.
-% #1 is the text, #2 the chapter number or empty if unnumbered.
-\def\chfplain#1#2{%
- \pchapsepmacro
- {%
- \chapfonts \rm
- \def\chapnum{#2}%
- \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}%
- \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
- \hangindent = \wd0 \centerparametersmaybe
- \unhbox0 #1\par}%
- }%
- \nobreak\bigskip % no page break after a chapter title
- \nobreak
-}
-
-% Plain opening for unnumbered.
-\def\unnchfplain#1{\chfplain{#1}{}}
-
-% @centerchap -- centered and unnumbered.
-\let\centerparametersmaybe = \relax
-\def\centerchfplain#1{{%
- \def\centerparametersmaybe{%
- \advance\rightskip by 3\rightskip
- \leftskip = \rightskip
- \parfillskip = 0pt
- }%
- \chfplain{#1}{}%
-}}
-
-\CHAPFplain % The default
-
-\def\unnchfopen #1{%
-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt\raggedright
- \rm #1\hfill}}\bigskip \par\penalty 10000 %
-}
-
-\def\chfopen #1#2{\chapoddpage {\chapfonts
-\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
-\par\penalty 5000 %
-}
-
-\def\centerchfopen #1{%
-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt
- \hfill {\rm #1}\hfill}}\bigskip \par\penalty 10000 %
-}
-
-\def\CHAPFopen{
-\global\let\chapmacro=\chfopen
-\global\let\unnumbchapmacro=\unnchfopen
-\global\let\centerchapmacro=\centerchfopen}
-
-
-% Section titles.
-\newskip\secheadingskip
-\def\secheadingbreak{\dobreak \secheadingskip {-1000}}
-\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}}
-\def\plainsecheading#1{\sectionheading{sec}{}{#1}}
-
-% Subsection titles.
-\newskip \subsecheadingskip
-\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
-\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}}
-\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}}
-
-% Subsubsection titles.
-\let\subsubsecheadingskip = \subsecheadingskip
-\let\subsubsecheadingbreak = \subsecheadingbreak
-\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}}
-\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}}
-
-
-% Print any size section title.
-%
-% #1 is the section type (sec/subsec/subsubsec), #2 is the section
-% number (maybe empty), #3 the text.
-\def\sectionheading#1#2#3{%
- {%
- \expandafter\advance\csname #1headingskip\endcsname by \parskip
- \csname #1headingbreak\endcsname
- }%
- {%
- % Switch to the right set of fonts.
- \csname #1fonts\endcsname \rm
- %
- % Only insert the separating space if we have a section number.
- \def\secnum{#2}%
- \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}%
- %
- \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
- \hangindent = \wd0 % zero if no section number
- \unhbox0 #3}%
- }%
- \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak
-}
-
-
-\message{toc printing,}
-% Finish up the main text and prepare to read what we've written
-% to \contentsfile.
-
-\newskip\contentsrightmargin \contentsrightmargin=1in
-\def\startcontents#1{%
- % If @setchapternewpage on, and @headings double, the contents should
- % start on an odd page, unlike chapters. Thus, we maintain
- % \contentsalignmacro in parallel with \pagealignmacro.
- % From: Torbjorn Granlund <tege@matematik.su.se>
- \contentsalignmacro
- \immediate\closeout \contentsfile
- \ifnum \pageno>0
- \pageno = -1 % Request roman numbered pages.
- \fi
- % Don't need to put `Contents' or `Short Contents' in the headline.
- % It is abundantly clear what they are.
- \unnumbchapmacro{#1}\def\thischapter{}%
- \begingroup % Set up to handle contents files properly.
- \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11
- % We can't do this, because then an actual ^ in a section
- % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97.
- %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
- \raggedbottom % Worry more about breakpoints than the bottom.
- \advance\hsize by -\contentsrightmargin % Don't use the full line length.
-}
-
-
-% Normal (long) toc.
-\outer\def\contents{%
- \startcontents{\putwordTableofContents}%
- \input \jobname.toc
- \endgroup
- \vfill \eject
-}
-
-% And just the chapters.
-\outer\def\summarycontents{%
- \startcontents{\putwordShortContents}%
- %
- \let\chapentry = \shortchapentry
- \let\unnumbchapentry = \shortunnumberedentry
- % We want a true roman here for the page numbers.
- \secfonts
- \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl
- \rm
- \hyphenpenalty = 10000
- \advance\baselineskip by 1pt % Open it up a little.
- \def\secentry ##1##2##3##4{}
- \def\unnumbsecentry ##1##2{}
- \def\subsecentry ##1##2##3##4##5{}
- \def\unnumbsubsecentry ##1##2{}
- \def\subsubsecentry ##1##2##3##4##5##6{}
- \def\unnumbsubsubsecentry ##1##2{}
- \input \jobname.toc
- \endgroup
- \vfill \eject
-}
-\let\shortcontents = \summarycontents
-
-% These macros generate individual entries in the table of contents.
-% The first argument is the chapter or section name.
-% The last argument is the page number.
-% The arguments in between are the chapter number, section number, ...
-
-% Chapter-level things, for both the long and short contents.
-\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
-
-% See comments in \dochapentry re vbox and related settings
-\def\shortchapentry#1#2#3{%
- \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno{#3}}%
-}
-
-% Typeset the label for a chapter or appendix for the short contents.
-% The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter.
-% We could simplify the code here by writing out an \appendixentry
-% command in the toc file for appendices, instead of using \chapentry
-% for both, but it doesn't seem worth it.
-\setbox0 = \hbox{\shortcontrm \putwordAppendix }
-\newdimen\shortappendixwidth \shortappendixwidth = \wd0
-
-\def\shortchaplabel#1{%
- % We typeset #1 in a box of constant width, regardless of the text of
- % #1, so the chapter titles will come out aligned.
- \setbox0 = \hbox{#1}%
- \dimen0 = \ifdim\wd0 > \shortappendixwidth \shortappendixwidth \else 0pt \fi
- %
- % This space should be plenty, since a single number is .5em, and the
- % widest letter (M) is 1em, at least in the Computer Modern fonts.
- % (This space doesn't include the extra space that gets added after
- % the label; that gets put in by \shortchapentry above.)
- \advance\dimen0 by 1.1em
- \hbox to \dimen0{#1\hfil}%
-}
-
-\def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
-\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno{#2}}}
-
-% Sections.
-\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
-\def\unnumbsecentry#1#2{\dosecentry{#1}{#2}}
-
-% Subsections.
-\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
-\def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}}
-
-% And subsubsections.
-\def\subsubsecentry#1#2#3#4#5#6{%
- \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
-\def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}}
-
-% This parameter controls the indentation of the various levels.
-\newdimen\tocindent \tocindent = 3pc
-
-% Now for the actual typesetting. In all these, #1 is the text and #2 is the
-% page number.
-%
-% If the toc has to be broken over pages, we want it to be at chapters
-% if at all possible; hence the \penalty.
-\def\dochapentry#1#2{%
- \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
- \begingroup
- \chapentryfonts
- \tocentry{#1}{\dopageno{#2}}%
- \endgroup
- \nobreak\vskip .25\baselineskip plus.1\baselineskip
-}
-
-\def\dosecentry#1#2{\begingroup
- \secentryfonts \leftskip=\tocindent
- \tocentry{#1}{\dopageno{#2}}%
-\endgroup}
-
-\def\dosubsecentry#1#2{\begingroup
- \subsecentryfonts \leftskip=2\tocindent
- \tocentry{#1}{\dopageno{#2}}%
-\endgroup}
-
-\def\dosubsubsecentry#1#2{\begingroup
- \subsubsecentryfonts \leftskip=3\tocindent
- \tocentry{#1}{\dopageno{#2}}%
-\endgroup}
-
-% Final typesetting of a toc entry; we use the same \entry macro as for
-% the index entries, but we want to suppress hyphenation here. (We
-% can't do that in the \entry macro, since index entries might consist
-% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)
-%
-% \turnoffactive is for the sake of @" used for umlauts.
-\def\tocentry#1#2{\begingroup
- \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
- \entry{\turnoffactive #1}{\turnoffactive #2}%
-\endgroup}
-
-% Space between chapter (or whatever) number and the title.
-\def\labelspace{\hskip1em \relax}
-
-\def\dopageno#1{{\rm #1}}
-\def\doshortpageno#1{{\rm #1}}
-
-\def\chapentryfonts{\secfonts \rm}
-\def\secentryfonts{\textfonts}
-\let\subsecentryfonts = \textfonts
-\let\subsubsecentryfonts = \textfonts
-
-
-\message{environments,}
-
-% Since these characters are used in examples, it should be an even number of
-% \tt widths. Each \tt character is 1en, so two makes it 1em.
-% Furthermore, these definitions must come after we define our fonts.
-\newbox\dblarrowbox \newbox\longdblarrowbox
-\newbox\pushcharbox \newbox\bullbox
-\newbox\equivbox \newbox\errorbox
-
-%{\tentt
-%\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil}
-%\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil}
-%\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil}
-%\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil}
-% Adapted from the manmac format (p.420 of TeXbook)
-%\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width .85ex
-% depth .1ex\hfil}
-%}
-
-% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
-\def\point{$\star$}
-\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
-\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
-\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
-\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
-
-% Adapted from the TeXbook's \boxit.
-{\tentt \global\dimen0 = 3em}% Width of the box.
-\dimen2 = .55pt % Thickness of rules
-% The text. (`r' is open on the right, `e' somewhat less so on the left.)
-\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
-
-\global\setbox\errorbox=\hbox to \dimen0{\hfil
- \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
- \advance\hsize by -2\dimen2 % Rules.
- \vbox{
- \hrule height\dimen2
- \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
- \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
- \kern3pt\vrule width\dimen2}% Space to right.
- \hrule height\dimen2}
- \hfil}
-
-% The @error{} command.
-\def\error{\leavevmode\lower.7ex\copy\errorbox}
-
-% @tex ... @end tex escapes into raw Tex temporarily.
-% One exception: @ is still an escape character, so that @end tex works.
-% But \@ or @@ will get a plain tex @ character.
-
-\def\tex{\begingroup
-\catcode `\\=0 \catcode `\{=1 \catcode `\}=2
-\catcode `\$=3 \catcode `\&=4 \catcode `\#=6
-\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
-\catcode `\%=14
-\catcode 43=12 % plus
-\catcode`\"=12
-\catcode`\==12
-\catcode`\|=12
-\catcode`\<=12
-\catcode`\>=12
-\escapechar=`\\
-%
-\let\,=\ptexcomma
-\let\{=\ptexlbrace
-\let\}=\ptexrbrace
-\let\.=\ptexdot
-\let\*=\ptexstar
-\let\dots=\ptexdots
-\def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
-\def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
-\def\@{@}%
-\let\bullet=\ptexbullet
-\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext
-%
-\let\Etex=\endgroup}
-
-% Define @lisp ... @endlisp.
-% @lisp does a \begingroup so it can rebind things,
-% including the definition of @endlisp (which normally is erroneous).
-
-% Amount to narrow the margins by for @lisp.
-\newskip\lispnarrowing \lispnarrowing=0.4in
-
-% This is the definition that ^^M gets inside @lisp, @example, and other
-% such environments. \null is better than a space, since it doesn't
-% have any width.
-\def\lisppar{\null\endgraf}
-
-% Make each space character in the input produce a normal interword
-% space in the output. Don't allow a line break at this space, as this
-% is used only in environments like @example, where each line of input
-% should produce a line of output anyway.
-%
-{\obeyspaces %
-\gdef\sepspaces{\obeyspaces\let =\tie}}
-
-% Define \obeyedspace to be our active space, whatever it is. This is
-% for use in \parsearg.
-{\sepspaces%
-\global\let\obeyedspace= }
-
-% This space is always present above and below environments.
-\newskip\envskipamount \envskipamount = 0pt
-
-% Make spacing and below environment symmetrical. We use \parskip here
-% to help in doing that, since in @example-like environments \parskip
-% is reset to zero; thus the \afterenvbreak inserts no space -- but the
-% start of the next paragraph will insert \parskip
-%
-\def\aboveenvbreak{{\advance\envskipamount by \parskip
-\endgraf \ifdim\lastskip<\envskipamount
-\removelastskip \penalty-50 \vskip\envskipamount \fi}}
-
-\let\afterenvbreak = \aboveenvbreak
-
-% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins.
-\let\nonarrowing=\relax
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% \cartouche: draw rectangle w/rounded corners around argument
-\font\circle=lcircle10
-\newdimen\circthick
-\newdimen\cartouter\newdimen\cartinner
-\newskip\normbskip\newskip\normpskip\newskip\normlskip
-\circthick=\fontdimen8\circle
-%
-\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
-\def\ctr{{\hskip 6pt\circle\char'010}}
-\def\cbl{{\circle\char'012\hskip -6pt}}
-\def\cbr{{\hskip 6pt\circle\char'011}}
-\def\carttop{\hbox to \cartouter{\hskip\lskip
- \ctl\leaders\hrule height\circthick\hfil\ctr
- \hskip\rskip}}
-\def\cartbot{\hbox to \cartouter{\hskip\lskip
- \cbl\leaders\hrule height\circthick\hfil\cbr
- \hskip\rskip}}
-%
-\newskip\lskip\newskip\rskip
-
-\long\def\cartouche{%
-\begingroup
- \lskip=\leftskip \rskip=\rightskip
- \leftskip=0pt\rightskip=0pt %we want these *outside*.
- \cartinner=\hsize \advance\cartinner by-\lskip
- \advance\cartinner by-\rskip
- \cartouter=\hsize
- \advance\cartouter by 18pt % allow for 3pt kerns on either
-% side, and for 6pt waste from
-% each corner char
- \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
- % Flag to tell @lisp, etc., not to narrow margin.
- \let\nonarrowing=\comment
- \vbox\bgroup
- \baselineskip=0pt\parskip=0pt\lineskip=0pt
- \carttop
- \hbox\bgroup
- \hskip\lskip
- \vrule\kern3pt
- \vbox\bgroup
- \hsize=\cartinner
- \kern3pt
- \begingroup
- \baselineskip=\normbskip
- \lineskip=\normlskip
- \parskip=\normpskip
- \vskip -\parskip
-\def\Ecartouche{%
- \endgroup
- \kern3pt
- \egroup
- \kern3pt\vrule
- \hskip\rskip
- \egroup
- \cartbot
- \egroup
-\endgroup
-}}
-
-
-% This macro is called at the beginning of all the @example variants,
-% inside a group.
-\def\nonfillstart{%
- \aboveenvbreak
- \inENV % This group ends at the end of the body
- \hfuzz = 12pt % Don't be fussy
- \sepspaces % Make spaces be word-separators rather than space tokens.
- \singlespace
- \let\par = \lisppar % don't ignore blank lines
- \obeylines % each line of input is a line of output
- \parskip = 0pt
- \parindent = 0pt
- \emergencystretch = 0pt % don't try to avoid overfull boxes
- % @cartouche defines \nonarrowing to inhibit narrowing
- % at next level down.
- \ifx\nonarrowing\relax
- \advance \leftskip by \lispnarrowing
- \exdentamount=\lispnarrowing
- \let\exdent=\nofillexdent
- \let\nonarrowing=\relax
- \fi
-}
-
-% To ending an @example-like environment, we first end the paragraph
-% (via \afterenvbreak's vertical glue), and then the group. That way we
-% keep the zero \parskip that the environments set -- \parskip glue
-% will be inserted at the beginning of the next paragraph in the
-% document, after the environment.
-%
-\def\nonfillfinish{\afterenvbreak\endgroup}%
-
-\def\lisp{\begingroup
- \nonfillstart
- \let\Elisp = \nonfillfinish
- \tt
- % Make @kbd do something special, if requested.
- \let\kbdfont\kbdexamplefont
- \rawbackslash % have \ input char produce \ char from current font
- \gobble
-}
-
-% Define the \E... control sequence only if we are inside the
-% environment, so the error checking in \end will work.
-%
-% We must call \lisp last in the definition, since it reads the
-% return following the @example (or whatever) command.
-%
-\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp}
-\def\smallexample{\begingroup \def\Esmallexample{\nonfillfinish\endgroup}\lisp}
-\def\smalllisp{\begingroup \def\Esmalllisp{\nonfillfinish\endgroup}\lisp}
-
-% @smallexample and @smalllisp. This is not used unless the @smallbook
-% command is given. Originally contributed by Pavel@xerox.
-%
-\def\smalllispx{\begingroup
- \nonfillstart
- \let\Esmalllisp = \nonfillfinish
- \let\Esmallexample = \nonfillfinish
- %
- % Smaller fonts for small examples.
- \indexfonts \tt
- \rawbackslash % make \ output the \ character from the current font (tt)
- \gobble
-}
-
-% This is @display; same as @lisp except use roman font.
-%
-\def\display{\begingroup
- \nonfillstart
- \let\Edisplay = \nonfillfinish
- \gobble
-}
-
-% This is @format; same as @display except don't narrow margins.
-%
-\def\format{\begingroup
- \let\nonarrowing = t
- \nonfillstart
- \let\Eformat = \nonfillfinish
- \gobble
-}
-
-% @flushleft (same as @format) and @flushright.
-%
-\def\flushleft{\begingroup
- \let\nonarrowing = t
- \nonfillstart
- \let\Eflushleft = \nonfillfinish
- \gobble
-}
-\def\flushright{\begingroup
- \let\nonarrowing = t
- \nonfillstart
- \let\Eflushright = \nonfillfinish
- \advance\leftskip by 0pt plus 1fill
- \gobble}
-
-% @quotation does normal linebreaking (hence we can't use \nonfillstart)
-% and narrows the margins.
-%
-\def\quotation{%
- \begingroup\inENV %This group ends at the end of the @quotation body
- {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
- \singlespace
- \parindent=0pt
- % We have retained a nonzero parskip for the environment, since we're
- % doing normal filling. So to avoid extra space below the environment...
- \def\Equotation{\parskip = 0pt \nonfillfinish}%
- %
- % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
- \ifx\nonarrowing\relax
- \advance\leftskip by \lispnarrowing
- \advance\rightskip by \lispnarrowing
- \exdentamount = \lispnarrowing
- \let\nonarrowing = \relax
- \fi
-}
-
-\message{defuns,}
-% Define formatter for defuns
-% First, allow user to change definition object font (\df) internally
-\def\setdeffont #1 {\csname DEF#1\endcsname}
-
-\newskip\defbodyindent \defbodyindent=.4in
-\newskip\defargsindent \defargsindent=50pt
-\newskip\deftypemargin \deftypemargin=12pt
-\newskip\deflastargmargin \deflastargmargin=18pt
-
-\newcount\parencount
-% define \functionparens, which makes ( and ) and & do special things.
-% \functionparens affects the group it is contained in.
-\def\activeparens{%
-\catcode`\(=\active \catcode`\)=\active \catcode`\&=\active
-\catcode`\[=\active \catcode`\]=\active}
-
-% Make control sequences which act like normal parenthesis chars.
-\let\lparen = ( \let\rparen = )
-
-{\activeparens % Now, smart parens don't turn on until &foo (see \amprm)
-
-% Be sure that we always have a definition for `(', etc. For example,
-% if the fn name has parens in it, \boldbrax will not be in effect yet,
-% so TeX would otherwise complain about undefined control sequence.
-\global\let(=\lparen \global\let)=\rparen
-\global\let[=\lbrack \global\let]=\rbrack
-
-\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
-\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
-% This is used to turn on special parens
-% but make & act ordinary (given that it's active).
-\gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr}
-
-% Definitions of (, ) and & used in args for functions.
-% This is the definition of ( outside of all parentheses.
-\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested
- \global\advance\parencount by 1
-}
-%
-% This is the definition of ( when already inside a level of parens.
-\gdef\opnested{\char`\(\global\advance\parencount by 1 }
-%
-\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
- % also in that case restore the outer-level definition of (.
- \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
- \global\advance \parencount by -1 }
-% If we encounter &foo, then turn on ()-hacking afterwards
-\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }
-%
-\gdef\normalparens{\boldbrax\let&=\ampnr}
-} % End of definition inside \activeparens
-%% These parens (in \boldbrax) actually are a little bolder than the
-%% contained text. This is especially needed for [ and ]
-\def\opnr{{\sf\char`\(}\global\advance\parencount by 1 }
-\def\clnr{{\sf\char`\)}\global\advance\parencount by -1 }
-\def\ampnr{\&}
-\def\lbrb{{\bf\char`\[}}
-\def\rbrb{{\bf\char`\]}}
-
-% First, defname, which formats the header line itself.
-% #1 should be the function name.
-% #2 should be the type of definition, such as "Function".
-
-\def\defname #1#2{%
-% Get the values of \leftskip and \rightskip as they were
-% outside the @def...
-\dimen2=\leftskip
-\advance\dimen2 by -\defbodyindent
-\dimen3=\rightskip
-\advance\dimen3 by -\defbodyindent
-\noindent %
-\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}%
-\dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
-\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations
-\parshape 2 0in \dimen0 \defargsindent \dimen1 %
-% Now output arg 2 ("Function" or some such)
-% ending at \deftypemargin from the right margin,
-% but stuck inside a box of width 0 so it does not interfere with linebreaking
-{% Adjust \hsize to exclude the ambient margins,
-% so that \rightline will obey them.
-\advance \hsize by -\dimen2 \advance \hsize by -\dimen3
-\rlap{\rightline{{\rm #2}\hskip \deftypemargin}}}%
-% Make all lines underfull and no complaints:
-\tolerance=10000 \hbadness=10000
-\advance\leftskip by -\defbodyindent
-\exdentamount=\defbodyindent
-{\df #1}\enskip % Generate function name
-}
-
-% Actually process the body of a definition
-% #1 should be the terminating control sequence, such as \Edefun.
-% #2 should be the "another name" control sequence, such as \defunx.
-% #3 should be the control sequence that actually processes the header,
-% such as \defunheader.
-
-\def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
-\parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup %
-\catcode 61=\active % 61 is `='
-\obeylines\activeparens\spacesplit#3}
-
-\def\defmethparsebody #1#2#3#4 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
-\parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
-
-\def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 ##2 {\def#4{##1}%
-\begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
-\parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup\obeylines\activeparens\spacesplit{#3{#5}}}
-
-% These parsing functions are similar to the preceding ones
-% except that they do not make parens into active characters.
-% These are used for "variables" since they have no arguments.
-
-\def\defvarparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2{\begingroup\obeylines\spacesplit#3}%
-\parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup %
-\catcode 61=\active %
-\obeylines\spacesplit#3}
-
-% This is used for \def{tp,vr}parsebody. It could probably be used for
-% some of the others, too, with some judicious conditionals.
-%
-\def\parsebodycommon#1#2#3{%
- \begingroup\inENV %
- \medbreak %
- % Define the end token that this defining construct specifies
- % so that it will exit this group.
- \def#1{\endgraf\endgroup\medbreak}%
- \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
- \parindent=0in
- \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
- \exdentamount=\defbodyindent
- \begingroup\obeylines
-}
-
-\def\defvrparsebody#1#2#3#4 {%
- \parsebodycommon{#1}{#2}{#3}%
- \spacesplit{#3{#4}}%
-}
-
-% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the
-% type is just `struct', because we lose the braces in `{struct
-% termios}' when \spacesplit reads its undelimited argument. Sigh.
-% \let\deftpparsebody=\defvrparsebody
-%
-% So, to get around this, we put \empty in with the type name. That
-% way, TeX won't find exactly `{...}' as an undelimited argument, and
-% won't strip off the braces.
-%
-\def\deftpparsebody #1#2#3#4 {%
- \parsebodycommon{#1}{#2}{#3}%
- \spacesplit{\parsetpheaderline{#3{#4}}}\empty
-}
-
-% Fine, but then we have to eventually remove the \empty *and* the
-% braces (if any). That's what this does.
-%
-\def\removeemptybraces\empty#1\relax{#1}
-
-% After \spacesplit has done its work, this is called -- #1 is the final
-% thing to call, #2 the type name (which starts with \empty), and #3
-% (which might be empty) the arguments.
-%
-\def\parsetpheaderline#1#2#3{%
- #1{\removeemptybraces#2\relax}{#3}%
-}%
-
-\def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 ##2 {\def#4{##1}%
-\begingroup\obeylines\spacesplit{#3{##2}}}%
-\parindent=0in
-\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-\exdentamount=\defbodyindent
-\begingroup\obeylines\spacesplit{#3{#5}}}
-
-% Split up #2 at the first space token.
-% call #1 with two arguments:
-% the first is all of #2 before the space token,
-% the second is all of #2 after that space token.
-% If #2 contains no space token, all of it is passed as the first arg
-% and the second is passed as empty.
-
-{\obeylines
-\gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}%
-\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{%
-\ifx\relax #3%
-#1{#2}{}\else #1{#2}{#3#4}\fi}}
-
-% So much for the things common to all kinds of definitions.
-
-% Define @defun.
-
-% First, define the processing that is wanted for arguments of \defun
-% Use this to expand the args and terminate the paragraph they make up
-
-\def\defunargs #1{\functionparens \sl
-% Expand, preventing hyphenation at `-' chars.
-% Note that groups don't affect changes in \hyphenchar.
-\hyphenchar\tensl=0
-#1%
-\hyphenchar\tensl=45
-\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
-\interlinepenalty=10000
-\advance\rightskip by 0pt plus 1fil
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000%
-}
-
-\def\deftypefunargs #1{%
-% Expand, preventing hyphenation at `-' chars.
-% Note that groups don't affect changes in \hyphenchar.
-% Use \boldbraxnoamp, not \functionparens, so that & is not special.
-\boldbraxnoamp
-\tclose{#1}% avoid \code because of side effects on active chars
-\interlinepenalty=10000
-\advance\rightskip by 0pt plus 1fil
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000%
-}
-
-% Do complete processing of one @defun or @defunx line already parsed.
-
-% @deffn Command forward-char nchars
-
-\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}
-
-\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}%
-\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @defun == @deffn Function
-
-\def\defun{\defparsebody\Edefun\defunx\defunheader}
-
-\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{Function}%
-\defunargs {#2}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @deftypefun int foobar (int @var{foo}, float @var{bar})
-
-\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}
-
-% #1 is the data type. #2 is the name and args.
-\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax}
-% #1 is the data type, #2 the name, #3 the args.
-\def\deftypefunheaderx #1#2 #3\relax{%
-\doind {fn}{\code{#2}}% Make entry in function index
-\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Function}%
-\deftypefunargs {#3}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar})
-
-\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
-
-% \defheaderxcond#1\relax$$$
-% puts #1 in @code, followed by a space, but does nothing if #1 is null.
-\def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi}
-
-% #1 is the classification. #2 is the data type. #3 is the name and args.
-\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}
-% #1 is the classification, #2 the data type, #3 the name, #4 the args.
-\def\deftypefnheaderx #1#2#3 #4\relax{%
-\doind {fn}{\code{#3}}% Make entry in function index
-\begingroup
-\normalparens % notably, turn off `&' magic, which prevents
-% at least some C++ text from working
-\defname {\defheaderxcond#2\relax$$$#3}{#1}%
-\deftypefunargs {#4}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @defmac == @deffn Macro
-
-\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
-
-\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{Macro}%
-\defunargs {#2}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% @defspec == @deffn Special Form
-
-\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
-
-\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{Special Form}%
-\defunargs {#2}\endgroup %
-\catcode 61=\other % Turn off change made in \defparsebody
-}
-
-% This definition is run if you use @defunx
-% anywhere other than immediately after a @defun or @defunx.
-
-\def\deffnx #1 {\errmessage{@deffnx in invalid context}}
-\def\defunx #1 {\errmessage{@defunx in invalid context}}
-\def\defmacx #1 {\errmessage{@defmacx in invalid context}}
-\def\defspecx #1 {\errmessage{@defspecx in invalid context}}
-\def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}}
-\def\deftypemethodx #1 {\errmessage{@deftypemethodx in invalid context}}
-\def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}}
-
-% @defmethod, and so on
-
-% @defop {Funny Method} foo-class frobnicate argument
-
-\def\defop #1 {\def\defoptype{#1}%
-\defopparsebody\Edefop\defopx\defopheader\defoptype}
-
-\def\defopheader #1#2#3{%
-\dosubind {fn}{\code{#2}}{on #1}% Make entry in function index
-\begingroup\defname {#2}{\defoptype{} on #1}%
-\defunargs {#3}\endgroup %
-}
-
-% @deftypemethod foo-class return-type foo-method args
-%
-\def\deftypemethod{%
- \defmethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
-%
-% #1 is the class name, #2 the data type, #3 the method name, #4 the args.
-\def\deftypemethodheader#1#2#3#4{%
- \deftypefnheaderx{Method on #1}{#2}#3 #4\relax
-}
-
-% @defmethod == @defop Method
-
-\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
-
-\def\defmethodheader #1#2#3{%
-\dosubind {fn}{\code{#2}}{on #1}% entry in function index
-\begingroup\defname {#2}{Method on #1}%
-\defunargs {#3}\endgroup %
-}
-
-% @defcv {Class Option} foo-class foo-flag
-
-\def\defcv #1 {\def\defcvtype{#1}%
-\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}
-
-\def\defcvarheader #1#2#3{%
-\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
-\begingroup\defname {#2}{\defcvtype{} of #1}%
-\defvarargs {#3}\endgroup %
-}
-
-% @defivar == @defcv {Instance Variable}
-
-\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}
-
-\def\defivarheader #1#2#3{%
-\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
-\begingroup\defname {#2}{Instance Variable of #1}%
-\defvarargs {#3}\endgroup %
-}
-
-% These definitions are run if you use @defmethodx, etc.,
-% anywhere other than immediately after a @defmethod, etc.
-
-\def\defopx #1 {\errmessage{@defopx in invalid context}}
-\def\defmethodx #1 {\errmessage{@defmethodx in invalid context}}
-\def\defcvx #1 {\errmessage{@defcvx in invalid context}}
-\def\defivarx #1 {\errmessage{@defivarx in invalid context}}
-
-% Now @defvar
-
-% First, define the processing that is wanted for arguments of @defvar.
-% This is actually simple: just print them in roman.
-% This must expand the args and terminate the paragraph they make up
-\def\defvarargs #1{\normalparens #1%
-\interlinepenalty=10000
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000}
-
-% @defvr Counter foo-count
-
-\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}
-
-\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}%
-\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup}
-
-% @defvar == @defvr Variable
-
-\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
-
-\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{Variable}%
-\defvarargs {#2}\endgroup %
-}
-
-% @defopt == @defvr {User Option}
-
-\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
-
-\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{User Option}%
-\defvarargs {#2}\endgroup %
-}
-
-% @deftypevar int foobar
-
-\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
-
-% #1 is the data type. #2 is the name, perhaps followed by text that
-% is actually part of the data type, which should not be put into the index.
-\def\deftypevarheader #1#2{%
-\dovarind#2 \relax% Make entry in variables index
-\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}%
-\interlinepenalty=10000
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000
-\endgroup}
-\def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}}
-
-% @deftypevr {Global Flag} int enable
-
-\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
-
-\def\deftypevrheader #1#2#3{\dovarind#3 \relax%
-\begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1}
-\interlinepenalty=10000
-\endgraf\penalty 10000\vskip -\parskip\penalty 10000
-\endgroup}
-
-% This definition is run if you use @defvarx
-% anywhere other than immediately after a @defvar or @defvarx.
-
-\def\defvrx #1 {\errmessage{@defvrx in invalid context}}
-\def\defvarx #1 {\errmessage{@defvarx in invalid context}}
-\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
-\def\deftypevarx #1 {\errmessage{@deftypevarx in invalid context}}
-\def\deftypevrx #1 {\errmessage{@deftypevrx in invalid context}}
-
-% Now define @deftp
-% Args are printed in bold, a slight difference from @defvar.
-
-\def\deftpargs #1{\bf \defvarargs{#1}}
-
-% @deftp Class window height width ...
-
-\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader}
-
-\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
-\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
-
-% This definition is run if you use @deftpx, etc
-% anywhere other than immediately after a @deftp, etc.
-
-\def\deftpx #1 {\errmessage{@deftpx in invalid context}}
-
-
-\message{cross reference,}
-% Define cross-reference macros
-\newwrite \auxfile
-
-\newif\ifhavexrefs % True if xref values are known.
-\newif\ifwarnedxrefs % True if we warned once that they aren't known.
-
-% @inforef is simple.
-\def\inforef #1{\inforefzzz #1,,,,**}
-\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
- node \samp{\ignorespaces#1{}}}
-
-% \setref{foo} defines a cross-reference point named foo.
-
-\def\setref#1{%
-\dosetq{#1-title}{Ytitle}%
-\dosetq{#1-pg}{Ypagenumber}%
-\dosetq{#1-snt}{Ysectionnumberandtype}}
-
-\def\unnumbsetref#1{%
-\dosetq{#1-title}{Ytitle}%
-\dosetq{#1-pg}{Ypagenumber}%
-\dosetq{#1-snt}{Ynothing}}
-
-\def\appendixsetref#1{%
-\dosetq{#1-title}{Ytitle}%
-\dosetq{#1-pg}{Ypagenumber}%
-\dosetq{#1-snt}{Yappendixletterandtype}}
-
-% \xref, \pxref, and \ref generate cross-references to specified points.
-% For \xrefX, #1 is the node name, #2 the name of the Info
-% cross-reference, #3 the printed node name, #4 the name of the Info
-% file, #5 the name of the printed manual. All but the node name can be
-% omitted.
-%
-\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
-\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
-\def\ref#1{\xrefX[#1,,,,,,,]}
-\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
- \def\printedmanual{\ignorespaces #5}%
- \def\printednodename{\ignorespaces #3}%
- \setbox1=\hbox{\printedmanual}%
- \setbox0=\hbox{\printednodename}%
- \ifdim \wd0 = 0pt
- % No printed node name was explicitly given.
- \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
- % Use the node name inside the square brackets.
- \def\printednodename{\ignorespaces #1}%
- \else
- % Use the actual chapter/section title appear inside
- % the square brackets. Use the real section title if we have it.
- \ifdim \wd1>0pt%
- % It is in another manual, so we don't have it.
- \def\printednodename{\ignorespaces #1}%
- \else
- \ifhavexrefs
- % We know the real title if we have the xref values.
- \def\printednodename{\refx{#1-title}{}}%
- \else
- % Otherwise just copy the Info node name.
- \def\printednodename{\ignorespaces #1}%
- \fi%
- \fi
- \fi
- \fi
- %
- % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
- % insert empty discretionaries after hyphens, which means that it will
- % not find a line break at a hyphen in a node names. Since some manuals
- % are best written with fairly long node names, containing hyphens, this
- % is a loss. Therefore, we give the text of the node name again, so it
- % is as if TeX is seeing it for the first time.
- \ifdim \wd1 > 0pt
- \putwordsection{} ``\printednodename'' in \cite{\printedmanual}%
- \else
- % _ (for example) has to be the character _ for the purposes of the
- % control sequence corresponding to the node, but it has to expand
- % into the usual \leavevmode...\vrule stuff for purposes of
- % printing. So we \turnoffactive for the \refx-snt, back on for the
- % printing, back off for the \refx-pg.
- {\turnoffactive \refx{#1-snt}{}}%
- \space [\printednodename],\space
- \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
- \fi
-\endgroup}
-
-% \dosetq is the interface for calls from other macros
-
-% Use \turnoffactive so that punctuation chars such as underscore
-% work in node names.
-\def\dosetq #1#2{{\let\folio=0 \turnoffactive
-\edef\next{\write\auxfile{\internalsetq {#1}{#2}}}%
-\next}}
-
-% \internalsetq {foo}{page} expands into
-% CHARACTERS 'xrdef {foo}{...expansion of \Ypage...}
-% When the aux file is read, ' is the escape character
-
-\def\internalsetq #1#2{'xrdef {#1}{\csname #2\endcsname}}
-
-% Things to be expanded by \internalsetq
-
-\def\Ypagenumber{\folio}
-
-\def\Ytitle{\thissection}
-
-\def\Ynothing{}
-
-\def\Ysectionnumberandtype{%
-\ifnum\secno=0 \putwordChapter\xreftie\the\chapno %
-\else \ifnum \subsecno=0 \putwordSection\xreftie\the\chapno.\the\secno %
-\else \ifnum \subsubsecno=0 %
-\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno %
-\else %
-\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno %
-\fi \fi \fi }
-
-\def\Yappendixletterandtype{%
-\ifnum\secno=0 \putwordAppendix\xreftie'char\the\appendixno{}%
-\else \ifnum \subsecno=0 \putwordSection\xreftie'char\the\appendixno.\the\secno %
-\else \ifnum \subsubsecno=0 %
-\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno %
-\else %
-\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %
-\fi \fi \fi }
-
-\gdef\xreftie{'tie}
-
-% Use TeX 3.0's \inputlineno to get the line number, for better error
-% messages, but if we're using an old version of TeX, don't do anything.
-%
-\ifx\inputlineno\thisisundefined
- \let\linenumber = \empty % Non-3.0.
-\else
- \def\linenumber{\the\inputlineno:\space}
-\fi
-
-% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
-% If its value is nonempty, SUFFIX is output afterward.
-
-\def\refx#1#2{%
- \expandafter\ifx\csname X#1\endcsname\relax
- % If not defined, say something at least.
- $\langle$un\-de\-fined$\rangle$%
- \ifhavexrefs
- \message{\linenumber Undefined cross reference `#1'.}%
- \else
- \ifwarnedxrefs\else
- \global\warnedxrefstrue
- \message{Cross reference values unknown; you must run TeX again.}%
- \fi
- \fi
- \else
- % It's defined, so just use it.
- \csname X#1\endcsname
- \fi
- #2% Output the suffix in any case.
-}
-
-% This is the macro invoked by entries in the aux file.
-\def\xrdef #1#2{{%
- \catcode`\'=\other
- \expandafter\gdef\csname X#1\endcsname{#2}%
-}}
-
-% Read the last existing aux file, if any. No error if none exists.
-\def\readauxfile{\begingroup
- \catcode`\^^@=\other
- \catcode`\^^A=\other
- \catcode`\^^B=\other
- \catcode`\^^C=\other
- \catcode`\^^D=\other
- \catcode`\^^E=\other
- \catcode`\^^F=\other
- \catcode`\^^G=\other
- \catcode`\^^H=\other
- \catcode`\^^K=\other
- \catcode`\^^L=\other
- \catcode`\^^N=\other
- \catcode`\^^P=\other
- \catcode`\^^Q=\other
- \catcode`\^^R=\other
- \catcode`\^^S=\other
- \catcode`\^^T=\other
- \catcode`\^^U=\other
- \catcode`\^^V=\other
- \catcode`\^^W=\other
- \catcode`\^^X=\other
- \catcode`\^^Z=\other
- \catcode`\^^[=\other
- \catcode`\^^\=\other
- \catcode`\^^]=\other
- \catcode`\^^^=\other
- \catcode`\^^_=\other
- \catcode`\@=\other
- \catcode`\^=\other
- % It was suggested to define this as 7, which would allow ^^e4 etc.
- % in xref tags, i.e., node names. But since ^^e4 notation isn't
- % supported in the main text, it doesn't seem desirable. Furthermore,
- % that is not enough: for node names that actually contain a ^
- % character, we would end up writing a line like this: 'xrdef {'hat
- % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
- % argument, and \hat is not an expandable control sequence. It could
- % all be worked out, but why? Either we support ^^ or we don't.
- %
- % The other change necessary for this was to define \auxhat:
- % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
- % and then to call \auxhat in \setq.
- %
- \catcode`\~=\other
- \catcode`\[=\other
- \catcode`\]=\other
- \catcode`\"=\other
- \catcode`\_=\other
- \catcode`\|=\other
- \catcode`\<=\other
- \catcode`\>=\other
- \catcode`\$=\other
- \catcode`\#=\other
- \catcode`\&=\other
- % `\+ does not work, so use 43.
- \catcode43=\other
- % Make the characters 128-255 be printing characters
- {%
- \count 1=128
- \def\loop{%
- \catcode\count 1=\other
- \advance\count 1 by 1
- \ifnum \count 1<256 \loop \fi
- }%
- }%
- % The aux file uses ' as the escape (for now).
- % Turn off \ as an escape so we do not lose on
- % entries which were dumped with control sequences in their names.
- % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^
- % Reference to such entries still does not work the way one would wish,
- % but at least they do not bomb out when the aux file is read in.
- \catcode`\{=1
- \catcode`\}=2
- \catcode`\%=\other
- \catcode`\'=0
- \catcode`\\=\other
- %
- \openin 1 \jobname.aux
- \ifeof 1 \else
- \closein 1
- \input \jobname.aux
- \global\havexrefstrue
- \global\warnedobstrue
- \fi
- % Open the new aux file. TeX will close it automatically at exit.
- \openout\auxfile=\jobname.aux
-\endgroup}
-
-
-% Footnotes.
-
-\newcount \footnoteno
-
-% The trailing space in the following definition for supereject is
-% vital for proper filling; pages come out unaligned when you do a
-% pagealignmacro call if that space before the closing brace is
-% removed. (Generally, numeric constants should always be followed by a
-% space to prevent strange expansion errors.)
-\def\supereject{\par\penalty -20000\footnoteno =0 }
-
-% @footnotestyle is meaningful for info output only.
-\let\footnotestyle=\comment
-
-\let\ptexfootnote=\footnote
-
-{\catcode `\@=11
-%
-% Auto-number footnotes. Otherwise like plain.
-\gdef\footnote{%
- \global\advance\footnoteno by \@ne
- \edef\thisfootno{$^{\the\footnoteno}$}%
- %
- % In case the footnote comes at the end of a sentence, preserve the
- % extra spacing after we do the footnote number.
- \let\@sf\empty
- \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
- %
- % Remove inadvertent blank space before typesetting the footnote number.
- \unskip
- \thisfootno\@sf
- \footnotezzz
-}%
-
-% Don't bother with the trickery in plain.tex to not require the
-% footnote text as a parameter. Our footnotes don't need to be so general.
-%
-% Oh yes, they do; otherwise, @ifset and anything else that uses
-% \parseargline fail inside footnotes because the tokens are fixed when
-% the footnote is read. --karl, 16nov96.
-%
-\long\gdef\footnotezzz{\insert\footins\bgroup
- % We want to typeset this text as a normal paragraph, even if the
- % footnote reference occurs in (for example) a display environment.
- % So reset some parameters.
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\ht\strutbox % top baseline for broken footnotes
- \splitmaxdepth\dp\strutbox
- \floatingpenalty\@MM
- \leftskip\z@skip
- \rightskip\z@skip
- \spaceskip\z@skip
- \xspaceskip\z@skip
- \parindent\defaultparindent
- %
- % Hang the footnote text off the number.
- \hang
- \textindent{\thisfootno}%
- %
- % Don't crash into the line above the footnote text. Since this
- % expands into a box, it must come within the paragraph, lest it
- % provide a place where TeX can split the footnote.
- \footstrut
- \futurelet\next\fo@t
-}
-\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t
- \else\let\next\f@t\fi \next}
-\def\f@@t{\bgroup\aftergroup\@foot\let\next}
-\def\f@t#1{#1\@foot}
-\def\@foot{\strut\egroup}
-
-}%end \catcode `\@=11
-
-% Set the baselineskip to #1, and the lineskip and strut size
-% correspondingly. There is no deep meaning behind these magic numbers
-% used as factors; they just match (closely enough) what Knuth defined.
-%
-\def\lineskipfactor{.08333}
-\def\strutheightpercent{.70833}
-\def\strutdepthpercent {.29167}
-%
-\def\setleading#1{%
- \normalbaselineskip = #1\relax
- \normallineskip = \lineskipfactor\normalbaselineskip
- \normalbaselines
- \setbox\strutbox =\hbox{%
- \vrule width0pt height\strutheightpercent\baselineskip
- depth \strutdepthpercent \baselineskip
- }%
-}
-
-% @| inserts a changebar to the left of the current line. It should
-% surround any changed text. This approach does *not* work if the
-% change spans more than two lines of output. To handle that, we would
-% have adopt a much more difficult approach (putting marks into the main
-% vertical list for the beginning and end of each change).
-%
-\def\|{%
- % \vadjust can only be used in horizontal mode.
- \leavevmode
- %
- % Append this vertical mode material after the current line in the output.
- \vadjust{%
- % We want to insert a rule with the height and depth of the current
- % leading; that is exactly what \strutbox is supposed to record.
- \vskip-\baselineskip
- %
- % \vadjust-items are inserted at the left edge of the type. So
- % the \llap here moves out into the left-hand margin.
- \llap{%
- %
- % For a thicker or thinner bar, change the `1pt'.
- \vrule height\baselineskip width1pt
- %
- % This is the space between the bar and the text.
- \hskip 12pt
- }%
- }%
-}
-
-% For a final copy, take out the rectangles
-% that mark overfull boxes (in case you have decided
-% that the text looks ok even though it passes the margin).
-%
-\def\finalout{\overfullrule=0pt}
-
-% @image. We use the macros from epsf.tex to support this.
-% If epsf.tex is not installed and @image is used, we complain.
-%
-% Check for and read epsf.tex up front. If we read it only at @image
-% time, we might be inside a group, and then its definitions would get
-% undone and the next image would fail.
-\openin 1 = xepsf.tex
-\ifeof 1 \else
- \closein 1
- \def\epsfannounce{\toks0 = }% do not bother showing banner
- \input epsf.tex
-\fi
-%
-\newif\ifwarnednoepsf
-\newhelp\noepsfhelp{epsf.tex must be installed for images to
- work. It is also included in the Texinfo distribution, or you can get
- it from ftp://ftp.tug.org/tex/epsf.tex.}
-%
-% Only complain once about lack of epsf.tex.
-\def\image#1{%
- \ifx\epsfbox\undefined
- \ifwarnednoepsf \else
- \errhelp = \noepsfhelp
- \errmessage{epsf.tex not found, images will be ignored}%
- \global\warnednoepsftrue
- \fi
- \else
- \imagexxx #1,,,\finish
- \fi
-}
-%
-% Arguments to @image:
-% #1 is (mandatory) image filename; we tack on .eps extension.
-% #2 is (optional) width, #3 is (optional) height.
-% #4 is just the usual extra ignored arg for parsing this stuff.
-\def\imagexxx#1,#2,#3,#4\finish{%
- % \epsfbox itself resets \epsf?size at each figure.
- \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
- \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
- \epsfbox{#1.eps}%
-}
-
-% End of control word definitions.
-
-
-\message{and turning on texinfo input format.}
-
-\def\openindices{%
- \newindex{cp}%
- \newcodeindex{fn}%
- \newcodeindex{vr}%
- \newcodeindex{tp}%
- \newcodeindex{ky}%
- \newcodeindex{pg}%
-}
-
-% Set some numeric style parameters, for 8.5 x 11 format.
-
-\hsize = 6in
-\hoffset = .25in
-\newdimen\defaultparindent \defaultparindent = 15pt
-\parindent = \defaultparindent
-\parskip 3pt plus 2pt minus 1pt
-\setleading{13.2pt}
-\advance\topskip by 1.2cm
-
-\chapheadingskip = 15pt plus 4pt minus 2pt
-\secheadingskip = 12pt plus 3pt minus 2pt
-\subsecheadingskip = 9pt plus 2pt minus 2pt
-
-% Prevent underfull vbox error messages.
-\vbadness=10000
-
-% Following George Bush, just get rid of widows and orphans.
-\widowpenalty=10000
-\clubpenalty=10000
-
-% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
-% using an old version of TeX, don't do anything. We want the amount of
-% stretch added to depend on the line length, hence the dependence on
-% \hsize. This makes it come to about 9pt for the 8.5x11 format.
-%
-\ifx\emergencystretch\thisisundefined
- % Allow us to assign to \emergencystretch anyway.
- \def\emergencystretch{\dimen0}%
-\else
- \emergencystretch = \hsize
- \divide\emergencystretch by 45
-\fi
-
-% Use @smallbook to reset parameters for 7x9.5 format (or else 7x9.25)
-\def\smallbook{
- \global\chapheadingskip = 15pt plus 4pt minus 2pt
- \global\secheadingskip = 12pt plus 3pt minus 2pt
- \global\subsecheadingskip = 9pt plus 2pt minus 2pt
- %
- \global\lispnarrowing = 0.3in
- \setleading{12pt}
- \advance\topskip by -1cm
- \global\parskip 2pt plus 1pt
- \global\hsize = 5in
- \global\vsize=7.5in
- \global\tolerance=700
- \global\hfuzz=1pt
- \global\contentsrightmargin=0pt
- \global\deftypemargin=0pt
- \global\defbodyindent=.5cm
- %
- \global\pagewidth=\hsize
- \global\pageheight=\vsize
- %
- \global\let\smalllisp=\smalllispx
- \global\let\smallexample=\smalllispx
- \global\def\Esmallexample{\Esmalllisp}
-}
-
-% Use @afourpaper to print on European A4 paper.
-\def\afourpaper{
-\global\tolerance=700
-\global\hfuzz=1pt
-\setleading{12pt}
-\global\parskip 15pt plus 1pt
-
-\global\vsize= 53\baselineskip
-\advance\vsize by \topskip
-%\global\hsize= 5.85in % A4 wide 10pt
-\global\hsize= 6.5in
-\global\outerhsize=\hsize
-\global\advance\outerhsize by 0.5in
-\global\outervsize=\vsize
-\global\advance\outervsize by 0.6in
-
-\global\pagewidth=\hsize
-\global\pageheight=\vsize
-}
-
-\bindingoffset=0pt
-\normaloffset=\hoffset
-\pagewidth=\hsize
-\pageheight=\vsize
-
-% Allow control of the text dimensions. Parameters in order: textheight;
-% textwidth; voffset; hoffset; binding offset; topskip.
-% All require a dimension;
-% header is additional; added length extends the bottom of the page.
-
-\def\changepagesizes#1#2#3#4#5#6{
- \global\vsize= #1
- \global\topskip= #6
- \advance\vsize by \topskip
- \global\voffset= #3
- \global\hsize= #2
- \global\outerhsize=\hsize
- \global\advance\outerhsize by 0.5in
- \global\outervsize=\vsize
- \global\advance\outervsize by 0.6in
- \global\pagewidth=\hsize
- \global\pageheight=\vsize
- \global\normaloffset= #4
- \global\bindingoffset= #5}
-
-% A specific text layout, 24x15cm overall, intended for A4 paper. Top margin
-% 29mm, hence bottom margin 28mm, nominal side margin 3cm.
-\def\afourlatex
- {\global\tolerance=700
- \global\hfuzz=1pt
- \setleading{12pt}
- \global\parskip 15pt plus 1pt
- \advance\baselineskip by 1.6pt
- \changepagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}
- }
-
-% Use @afourwide to print on European A4 paper in wide format.
-\def\afourwide{\afourpaper
-\changepagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}}
-
-% Define macros to output various characters with catcode for normal text.
-\catcode`\"=\other
-\catcode`\~=\other
-\catcode`\^=\other
-\catcode`\_=\other
-\catcode`\|=\other
-\catcode`\<=\other
-\catcode`\>=\other
-\catcode`\+=\other
-\def\normaldoublequote{"}
-\def\normaltilde{~}
-\def\normalcaret{^}
-\def\normalunderscore{_}
-\def\normalverticalbar{|}
-\def\normalless{<}
-\def\normalgreater{>}
-\def\normalplus{+}
-
-% This macro is used to make a character print one way in ttfont
-% where it can probably just be output, and another way in other fonts,
-% where something hairier probably needs to be done.
-%
-% #1 is what to print if we are indeed using \tt; #2 is what to print
-% otherwise. Since all the Computer Modern typewriter fonts have zero
-% interword stretch (and shrink), and it is reasonable to expect all
-% typewriter fonts to have this, we can check that font parameter.
-%
-\def\ifusingtt#1#2{\ifdim \fontdimen3\the\font=0pt #1\else #2\fi}
-
-% Turn off all special characters except @
-% (and those which the user can use as if they were ordinary).
-% Most of these we simply print from the \tt font, but for some, we can
-% use math or other variants that look better in normal text.
-
-\catcode`\"=\active
-\def\activedoublequote{{\tt \char '042}}
-\let"=\activedoublequote
-\catcode`\~=\active
-\def~{{\tt \char '176}}
-\chardef\hat=`\^
-\catcode`\^=\active
-\def^{{\tt \hat}}
-
-\catcode`\_=\active
-\def_{\ifusingtt\normalunderscore\_}
-% Subroutine for the previous macro.
-\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}}
-
-\catcode`\|=\active
-\def|{{\tt \char '174}}
-\chardef \less=`\<
-\catcode`\<=\active
-\def<{{\tt \less}}
-\chardef \gtr=`\>
-\catcode`\>=\active
-\def>{{\tt \gtr}}
-\catcode`\+=\active
-\def+{{\tt \char 43}}
-%\catcode 27=\active
-%\def^^[{$\diamondsuit$}
-
-% Set up an active definition for =, but don't enable it most of the time.
-{\catcode`\==\active
-\global\def={{\tt \char 61}}}
-
-\catcode`+=\active
-\catcode`\_=\active
-
-% If a .fmt file is being used, characters that might appear in a file
-% name cannot be active until we have parsed the command line.
-% So turn them off again, and have \everyjob (or @setfilename) turn them on.
-% \otherifyactive is called near the end of this file.
-\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
-
-\catcode`\@=0
-
-% \rawbackslashxx output one backslash character in current font
-\global\chardef\rawbackslashxx=`\\
-%{\catcode`\\=\other
-%@gdef@rawbackslashxx{\}}
-
-% \rawbackslash redefines \ as input to do \rawbackslashxx.
-{\catcode`\\=\active
-@gdef@rawbackslash{@let\=@rawbackslashxx }}
-
-% \normalbackslash outputs one backslash in fixed width font.
-\def\normalbackslash{{\tt\rawbackslashxx}}
-
-% Say @foo, not \foo, in error messages.
-\escapechar=`\@
-
-% \catcode 17=0 % Define control-q
-\catcode`\\=\active
-
-% Used sometimes to turn off (effectively) the active characters
-% even after parsing them.
-@def@turnoffactive{@let"=@normaldoublequote
-@let\=@realbackslash
-@let~=@normaltilde
-@let^=@normalcaret
-@let_=@normalunderscore
-@let|=@normalverticalbar
-@let<=@normalless
-@let>=@normalgreater
-@let+=@normalplus}
-
-@def@normalturnoffactive{@let"=@normaldoublequote
-@let\=@normalbackslash
-@let~=@normaltilde
-@let^=@normalcaret
-@let_=@normalunderscore
-@let|=@normalverticalbar
-@let<=@normalless
-@let>=@normalgreater
-@let+=@normalplus}
-
-% Make _ and + \other characters, temporarily.
-% This is canceled by @fixbackslash.
-@otherifyactive
-
-% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
-% That is what \eatinput is for; after that, the `\' should revert to printing
-% a backslash.
-%
-@gdef@eatinput input texinfo{@fixbackslash}
-@global@let\ = @eatinput
-
-% On the other hand, perhaps the file did not have a `\input texinfo'. Then
-% the first `\{ in the file would cause an error. This macro tries to fix
-% that, assuming it is called before the first `\' could plausibly occur.
-% Also back turn on active characters that might appear in the input
-% file name, in case not using a pre-dumped format.
-%
-@gdef@fixbackslash{@ifx\@eatinput @let\ = @normalbackslash @fi
- @catcode`+=@active @catcode`@_=@active}
-
-%% These look ok in all fonts, so just make them not special. The @rm below
-%% makes sure that the current font starts out as the newly loaded cmr10
-@catcode`@$=@other @catcode`@%=@other @catcode`@&=@other @catcode`@#=@other
-
-@textfonts
-@rm
-
-@c Local variables:
-@c page-delimiter: "^\\\\message"
-@c End:
diff --git a/gcc/tm.texi b/gcc/tm.texi
index 83d51bb87e8..45d4819c2eb 100644
--- a/gcc/tm.texi
+++ b/gcc/tm.texi
@@ -1,4 +1,4 @@
-@c Copyright (C) 1988,89,92,93,94,96 Free Software Foundation, Inc.
+@c Copyright (C) 1988,89,92,93,94,96,97,1998 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.
@@ -320,7 +320,7 @@ used, or when the compiler is built as a cross compiler.
@findex INIT_ENVIRONMENT
@item INIT_ENVIRONMENT
-Define this macro as a C string constant if you with to set environment
+Define this macro as a C string constant if you wish to set environment
variables for programs called by the driver, such as the assembler and
loader. The driver passes the value of this macro to @code{putenv} to
initialize the necessary environment variables.
@@ -354,11 +354,17 @@ try when searching for header files.
Cross compilers do not use this macro and do not search either
@file{/usr/include} or its replacement.
+@findex STANDARD_INCLUDE_COMPONENT
+@item STANDARD_INCLUDE_COMPONENT
+The ``component'' corresponding to @code{STANDARD_INCLUDE_DIR}.
+See @code{INCLUDE_DEFAULTS}, below, for the description of components.
+If you do not define this macro, no component is used.
+
@findex INCLUDE_DEFAULTS
@item INCLUDE_DEFAULTS
Define this macro if you wish to override the entire default search path
-for include files. The default search path includes
-@code{GCC_INCLUDE_DIR}, @code{LOCAL_INCLUDE_DIR},
+for include files. For a native compiler, the default search path
+usually consists of @code{GCC_INCLUDE_DIR}, @code{LOCAL_INCLUDE_DIR},
@code{SYSTEM_INCLUDE_DIR}, @code{GPLUSPLUS_INCLUDE_DIR}, and
@code{STANDARD_INCLUDE_DIR}. In addition, @code{GPLUSPLUS_INCLUDE_DIR}
and @code{GCC_INCLUDE_DIR} are defined automatically by @file{Makefile},
@@ -366,19 +372,28 @@ and specify private search areas for GCC. The directory
@code{GPLUSPLUS_INCLUDE_DIR} is used only for C++ programs.
The definition should be an initializer for an array of structures.
-Each array element should have two elements: the directory name (a
-string constant) and a flag for C++-only directories. Mark the end of
-the array with a null element. For example, here is the definition used
-for VMS:
+Each array element should have four elements: the directory name (a
+string constant), the component name, and flag for C++-only directories,
+and a flag showing that the includes in the directory don't need to be
+wrapped in @code{extern @samp{C}} when compiling C++. Mark the end of
+the array with a null element.
+
+The component name denotes what GNU package the include file is part of,
+if any, in all upper-case letters. For example, it might be @samp{GCC}
+or @samp{BINUTILS}. If the package is part of the a vendor-supplied
+operating system, code the component name as @samp{0}.
+
+
+For example, here is the definition used for VAX/VMS:
@example
#define INCLUDE_DEFAULTS \
@{ \
- @{ "GNU_GXX_INCLUDE:", 1@}, \
- @{ "GNU_CC_INCLUDE:", 0@}, \
- @{ "SYS$SYSROOT:[SYSLIB.]", 0@}, \
- @{ ".", 0@}, \
- @{ 0, 0@} \
+ @{ "GNU_GXX_INCLUDE:", "G++", 1, 1@}, \
+ @{ "GNU_CC_INCLUDE:", "GCC", 0, 0@}, \
+ @{ "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0@}, \
+ @{ ".", 0, 0, 0@}, \
+ @{ 0, 0, 0, 0@} \
@}
@end example
@end table
@@ -764,6 +779,13 @@ Alignment required for a function entry point, in bits.
@item BIGGEST_ALIGNMENT
Biggest alignment that any data type can require on this machine, in bits.
+@findex MINIMUM_ATOMIC_ALIGNMENT
+@item MINIMUM_ATOMIC_ALIGNMENT
+If defined, the smallest alignment, in bits, that can be given to an
+object that can be referenced in one operation, without disturbing any
+nearby object. Normally, this is @code{BITS_PER_UNIT}, but may be larger
+on machines that don't have byte or half-word store operations.
+
@findex BIGGEST_FIELD_ALIGNMENT
@item BIGGEST_FIELD_ALIGNMENT
Biggest alignment that any structure field can require on this machine,
@@ -975,6 +997,20 @@ supported machines, new codes should be defined for them.
The ordering of the component words of floating point values stored in
memory is controlled by @code{FLOAT_WORDS_BIG_ENDIAN} for the target
machine and @code{HOST_FLOAT_WORDS_BIG_ENDIAN} for the host.
+
+@findex DEFAULT_VTABLE_THUNKS
+@item DEFAULT_VTABLE_THUNKS
+GNU CC supports two ways of implementing C++ vtables: traditional or with
+so-called ``thunks''. The flag @samp{-fvtable-thunk} chooses between them.
+Define this macro to be a C expression for the default value of that flag.
+If @code{DEFAULT_VTABLE_THUNKS} is 0, GNU CC uses the traditional
+implementation by default. The ``thunk'' implementation is more efficient
+(especially if you have provided an implementation of
+@code{ASM_OUTPUT_MI_THUNK}, see @ref{Function Entry}), but is not binary
+compatible with code compiled using the traditional implementation.
+If you are writing a new ports, define @code{DEFAULT_VTABLE_THUNKS} to 1.
+
+If you do not define this macro, the default for @samp{-fvtable-thunk} is 0.
@end table
@node Type Layout
@@ -1057,6 +1093,14 @@ A C expression for the size in bits of the type @code{long double} on
the target machine. If you don't define this, the default is two
words.
+@findex WIDEST_HARDWARE_FP_SIZE
+@item WIDEST_HARDWARE_FP_SIZE
+A C expression for the size in bits of the widest floating-point format
+supported by the hardware. If you define this macro, you must specify a
+value less than or equal to the value of @code{LONG_DOUBLE_TYPE_SIZE}.
+If you do not define this macro, the value of @code{LONG_DOUBLE_TYPE_SIZE}
+is the default.
+
@findex DEFAULT_SIGNED_CHAR
@item DEFAULT_SIGNED_CHAR
An expression whose value is 1 or 0, according to whether the type
@@ -1317,7 +1361,7 @@ One use of this macro is on machines where the highest numbered
registers must always be saved and the save-multiple-registers
instruction supports only sequences of consecutive registers. On such
machines, define @code{REG_ALLOC_ORDER} to be an initializer that lists
-the highest numbered allocatable register first.
+the highest numbered allocable register first.
@findex ORDER_REGS_FOR_LOCAL_ALLOC
@item ORDER_REGS_FOR_LOCAL_ALLOC
@@ -1368,30 +1412,21 @@ are equivalent, a suitable definition is
#define HARD_REGNO_MODE_OK(REGNO, MODE) 1
@end smallexample
-It is not necessary for this macro to check for the numbers of fixed
-registers, because the allocation mechanism considers them to be always
-occupied.
+You need not include code to check for the numbers of fixed registers,
+because the allocation mechanism considers them to be always occupied.
@cindex register pairs
On some machines, double-precision values must be kept in even/odd
-register pairs. The way to implement that is to define this macro
-to reject odd register numbers for such modes.
-
-@ignore
-@c I think this is not true now
-GNU CC assumes that it can always move values between registers and
-(suitably addressed) memory locations. If it is impossible to move a
-value of a certain mode between memory and certain registers, then
-@code{HARD_REGNO_MODE_OK} must not allow this mode in those registers.
-@end ignore
+register pairs. You can implement that by defining this macro to reject
+odd register numbers for such modes.
The minimum requirement for a mode to be OK in a register is that the
@samp{mov@var{mode}} instruction pattern support moves between the
-register and any other hard register for which the mode is OK; and that
-moving a value into the register and back out not alter it.
+register and other hard register in the same class and that moving a
+value into the register and back out not alter it.
-Since the same instruction used to move @code{SImode} will work for all
-narrower integer modes, it is not necessary on any machine for
+Since the same instruction used to move @code{word_mode} will work for
+all narrower integer modes, it is not necessary on any machine for
@code{HARD_REGNO_MODE_OK} to distinguish between these modes, provided
you define patterns @samp{movhi}, etc., to take advantage of this. This
is useful because of the interaction between @code{HARD_REGNO_MODE_OK}
@@ -1429,14 +1464,19 @@ be used unless some pattern's constraint asks for one.
@findex MODES_TIEABLE_P
@item MODES_TIEABLE_P (@var{mode1}, @var{mode2})
-A C expression that is nonzero if it is desirable to choose register
-allocation so as to avoid move instructions between a value of mode
-@var{mode1} and a value of mode @var{mode2}.
+A C expression that is nonzero if a value of mode
+@var{mode1} is accessible in mode @var{mode2} without copying.
If @code{HARD_REGNO_MODE_OK (@var{r}, @var{mode1})} and
-@code{HARD_REGNO_MODE_OK (@var{r}, @var{mode2})} are ever different
-for any @var{r}, then @code{MODES_TIEABLE_P (@var{mode1},
-@var{mode2})} must be zero.
+@code{HARD_REGNO_MODE_OK (@var{r}, @var{mode2})} are always the same for
+any @var{r}, then @code{MODES_TIEABLE_P (@var{mode1}, @var{mode2})}
+should be nonzero. If they differ for any @var{r}, you should define
+this macro to return zero unless some other mechanism ensures the
+accessibility of the value in a narrower mode.
+
+You should define this macro to return nonzero in as many cases as
+possible since doing so will allow GNU CC to perform better register
+allocation.
@end table
@node Leaf Functions
@@ -1720,6 +1760,15 @@ suitable for use as a base register in operand addresses. It may be
either a suitable hard register or a pseudo register that has been
allocated such a hard register.
+@findex REGNO_MODE_OK_FOR_BASE_P
+@item REGNO_MODE_OK_FOR_BASE_P (@var{num}, @var{mode})
+A C expression that is just like @code{REGNO_OK_FOR_BASE_P}, except that
+that expression may examine the mode of the memory reference in
+@var{mode}. You should define this macro if the mode of the memory
+reference affects whether a register may be used as a base register. If
+you define this macro, the compiler will use it instead of
+@code{REGNO_OK_FOR_BASE_P}.
+
@findex REGNO_OK_FOR_INDEX_P
@item REGNO_OK_FOR_INDEX_P (@var{num})
A C expression which is nonzero if register number @var{num} is
@@ -1900,16 +1949,17 @@ some machines have so few registers of certain classes that there
would not be enough registers to use as spill registers if this were
done.
-Define @code{SMALL_REGISTER_CLASSES} on these machines. When it is
-defined, the compiler allows registers explicitly used in the rtl to be
-used as spill registers but avoids extending the lifetime of these
-registers.
+Define @code{SMALL_REGISTER_CLASSES} to be an expression with a non-zero
+value on these machines. When this macro has a non-zero value, the
+compiler allows registers explicitly used in the rtl to be used as spill
+registers but avoids extending the lifetime of these registers.
-It is always safe to define this macro, but if you unnecessarily define
-it, you will reduce the amount of optimizations that can be performed in
-some cases. If you do not define this macro when it is required, the
-compiler will run out of spill registers and print a fatal error
-message. For most machines, you should not define this macro.
+It is always safe to define this macro with a non-zero value, but if you
+unnecessarily define it, you will reduce the amount of optimizations
+that can be performed in some cases. If you do not define this macro
+with a non-zero value when it is required, the compiler will run out of
+spill registers and print a fatal error message. For most machines, you
+should not define this macro at all.
@findex CLASS_LIKELY_SPILLED_P
@item CLASS_LIKELY_SPILLED_P (@var{class})
@@ -1961,16 +2011,19 @@ letters.
@table @code
@findex CONST_OK_FOR_LETTER_P
@item CONST_OK_FOR_LETTER_P (@var{value}, @var{c})
-A C expression that defines the machine-dependent operand constraint letters
-that specify particular ranges of integer values. If @var{c} is one
-of those letters, the expression should check that @var{value}, an integer,
-is in the appropriate range and return 1 if so, 0 otherwise. If @var{c} is
-not one of those letters, the value should be 0 regardless of @var{value}.
+A C expression that defines the machine-dependent operand constraint
+letters (@samp{I}, @samp{J}, @samp{K}, @dots{} @samp{P}) that specify
+particular ranges of integer values. If @var{c} is one of those
+letters, the expression should check that @var{value}, an integer, is in
+the appropriate range and return 1 if so, 0 otherwise. If @var{c} is
+not one of those letters, the value should be 0 regardless of
+@var{value}.
@findex CONST_DOUBLE_OK_FOR_LETTER_P
@item CONST_DOUBLE_OK_FOR_LETTER_P (@var{value}, @var{c})
A C expression that defines the machine-dependent operand constraint
-letters that specify particular ranges of @code{const_double} values.
+letters that specify particular ranges of @code{const_double} values
+(@samp{G} or @samp{H}).
If @var{c} is one of those letters, the expression should check that
@var{value}, an RTX of code @code{const_double}, is in the appropriate
@@ -1985,13 +2038,13 @@ between these kinds.
@findex EXTRA_CONSTRAINT
@item EXTRA_CONSTRAINT (@var{value}, @var{c})
A C expression that defines the optional machine-dependent constraint
-letters that can be used to segregate specific types of operands,
-usually memory references, for the target machine. Normally this macro
-will not be defined. If it is required for a particular target machine,
-it should return 1 if @var{value} corresponds to the operand type
-represented by the constraint letter @var{c}. If @var{c} is not defined
-as an extra constraint, the value returned should be 0 regardless of
-@var{value}.
+letters (@samp{Q}, @samp{R}, @samp{S}, @samp{T}, @samp{U}) that can
+be used to segregate specific types of operands, usually memory
+references, for the target machine. Normally this macro will not be
+defined. If it is required for a particular target machine, it should
+return 1 if @var{value} corresponds to the operand type represented by
+the constraint letter @var{c}. If @var{c} is not defined as an extra
+constraint, the value returned should be 0 regardless of @var{value}.
For example, on the ROMP, load instructions cannot have their output in r0 if
the memory reference contains a symbolic address. Constraint letter
@@ -2011,6 +2064,7 @@ This describes the stack layout and calling conventions.
@menu
* Frame Layout::
+* Stack Checking::
* Frame Registers::
* Elimination::
* Stack Arguments::
@@ -2110,15 +2164,123 @@ This macro will seldom need to be defined.
@findex RETURN_ADDR_RTX
@item RETURN_ADDR_RTX (@var{count}, @var{frameaddr})
A C expression whose value is RTL representing the value of the return
-address for the frame @var{count} steps up from the current frame.
-@var{frameaddr} is the frame pointer of the @var{count} frame, or
-the frame pointer of the @var{count} @minus{} 1 frame if
+address for the frame @var{count} steps up from the current frame, after
+the prologue. @var{frameaddr} is the frame pointer of the @var{count}
+frame, or the frame pointer of the @var{count} @minus{} 1 frame if
@code{RETURN_ADDR_IN_PREVIOUS_FRAME} is defined.
+The value of the expression must always be the correct address when
+@var{count} is zero, but may be @code{NULL_RTX} if there is not way to
+determine the return address of other frames.
+
@findex RETURN_ADDR_IN_PREVIOUS_FRAME
@item RETURN_ADDR_IN_PREVIOUS_FRAME
Define this if the return address of a particular stack frame is accessed
from the frame pointer of the previous stack frame.
+
+@findex INCOMING_RETURN_ADDR_RTX
+@item INCOMING_RETURN_ADDR_RTX
+A C expression whose value is RTL representing the location of the
+incoming return address at the beginning of any function, before the
+prologue. This RTL is either a @code{REG}, indicating that the return
+value is saved in @samp{REG}, or a @code{MEM} representing a location in
+the stack.
+
+You only need to define this macro if you want to support call frame
+debugging information like that provided by DWARF 2.
+
+@findex INCOMING_FRAME_SP_OFFSET
+@item INCOMING_FRAME_SP_OFFSET
+A C expression whose value is an integer giving the offset, in bytes,
+from the value of the stack pointer register to the top of the stack
+frame at the beginning of any function, before the prologue. The top of
+the frame is defined to be the value of the stack pointer in the
+previous frame, just before the call instruction.
+
+You only need to define this macro if you want to support call frame
+debugging information like that provided by DWARF 2.
+@end table
+
+@node Stack Checking
+@subsection Specifying How Stack Checking is Done
+
+GNU CC will check that stack references are within the boundaries of
+the stack, if the @samp{-fstack-check} is specified, in one of three ways:
+
+@enumerate
+@item
+If the value of the @code{STACK_CHECK_BUILTIN} macro is nonzero, GNU CC
+will assume that you have arranged for stack checking to be done at
+appropriate places in the configuration files, e.g., in
+@code{FUNCTION_PROLOGUE}. GNU CC will do not other special processing.
+
+@item
+If @code{STACK_CHECK_BUILTIN} is zero and you defined a named pattern
+called @code{check_stack} in your @file{md} file, GNU CC will call that
+pattern with one argument which is the address to compare the stack
+value against. You must arrange for this pattern to report an error if
+the stack pointer is out of range.
+
+@item
+If neither of the above are true, GNU CC will generate code to periodically
+``probe'' the stack pointer using the values of the macros defined below.
+@end enumerate
+
+Normally, you will use the default values of these macros, so GNU CC
+will use the third approach.
+
+@table @code
+@findex STACK_CHECK_BUILTIN
+@item STACK_CHECK_BUILTIN
+A nonzero value if stack checking is done by the configuration files in a
+machine-dependent manner. You should define this macro if stack checking
+is require by the ABI of your machine or if you would like to have to stack
+checking in some more efficient way than GNU CC's portable approach.
+The default value of this macro is zero.
+
+@findex STACK_CHECK_PROBE_INTERVAL
+@item STACK_CHECK_PROBE_INTERVAL
+An integer representing the interval at which GNU CC must generate stack
+probe instructions. You will normally define this macro to be no larger
+than the size of the ``guard pages'' at the end of a stack area. The
+default value of 4096 is suitable for most systems.
+
+@findex STACK_CHECK_PROBE_LOAD
+@item STACK_CHECK_PROBE_LOAD
+A integer which is nonzero if GNU CC should perform the stack probe
+as a load instruction and zero if GNU CC should use a store instruction.
+The default is zero, which is the most efficient choice on most systems.
+
+@findex STACK_CHECK_PROTECT
+@item STACK_CHECK_PROTECT
+The number of bytes of stack needed to recover from a stack overflow,
+for languages where such a recovery is supported. The default value of
+75 words should be adequate for most machines.
+
+@findex STACK_CHECK_MAX_FRAME_SIZE
+@item STACK_CHECK_MAX_FRAME_SIZE
+The maximum size of a stack frame, in bytes. GNU CC will generate probe
+instructions in non-leaf functions to ensure at least this many bytes of
+stack are available. If a stack frame is larger than this size, stack
+checking will not be reliable and GNU CC will issue a warning. The
+default is chosen so that GNU CC only generates one instruction on most
+systems. You should normally not change the default value of this macro.
+
+@findex STACK_CHECK_FIXED_FRAME_SIZE
+@item STACK_CHECK_FIXED_FRAME_SIZE
+GNU CC uses this value to generate the above warning message. It
+represents the amount of fixed frame used by a function, not including
+space for any callee-saved registers, temporaries and user variables.
+You need only specify an upper bound for this amount and will normally
+use the default of four words.
+
+@findex STACK_CHECK_MAX_VAR_SIZE
+@item STACK_CHECK_MAX_VAR_SIZE
+The maximum size, in bytes, of an object that GNU CC will place in the
+fixed area of the stack frame when the user specifies
+@samp{-fstack-check}.
+GNU CC computed the default from the values of the above macros and you will
+normally not need to override that default.
@end table
@need 2000
@@ -2150,7 +2312,7 @@ allocation has been done (for example, because the saved registers are
between these two locations). On those machines, define
@code{FRAME_POINTER_REGNUM} the number of a special, fixed register to
be used internally until the offset is known, and define
-@code{HARD_FRAME_POINTER_REGNUM} to be actual the hard register number
+@code{HARD_FRAME_POINTER_REGNUM} to be the actual hard register number
used for the frame pointer.
You should define this macro only in the very rare circumstances when it
@@ -2455,7 +2617,7 @@ describes the function in question. Normally it is a node of type
From this it is possible to obtain the data types of the value and
arguments (if known).
-When a call to a library function is being considered, @var{funtype}
+When a call to a library function is being considered, @var{fundecl}
will contain an identifier node for the library function. Thus, if
you need to distinguish among various library functions, you can do so
by their names. Note that ``library function'' in this context means
@@ -3130,12 +3292,10 @@ The @var{thunk_fndecl} is redundant. (@var{delta} and @var{function}
have already been extracted from it.) It might possibly be useful on
some targets, but probably not.
-For many targets, the target-independent code in the C++ frontend will
-be sufficient and you can leave this macro undefined. You need to
-define this macro if the code generated by default would clobber any of
-the incoming arguments; this is only likely if parameters can be passed
-in registers. You should also define this macro if the default code is
-sub-optimal.
+If you do not define this macro, the target-independent code in the C++
+frontend will generate a less efficient heavyweight thunk that calls
+@var{function} instead of jumping to it. The generic approach does
+not support varargs.
@end table
@node Profiling
@@ -3173,7 +3333,7 @@ the function prologue. Normally, the profiling code comes after.
A C statement or compound statement to output to @var{file} some
assembler code to initialize basic-block profiling for the current
object module. The global compile flag @code{profile_block_flag}
-distingishes two profile modes.
+distinguishes two profile modes.
@table @code
@findex __bb_init_func
@@ -3233,7 +3393,7 @@ call __bb_init_trace_func
A C statement or compound statement to output to @var{file} some
assembler code to increment the count associated with the basic
block number @var{blockno}. The global compile flag
-@code{profile_block_flag} distingishes two profile modes.
+@code{profile_block_flag} distinguishes two profile modes.
@table @code
@item profile_block_flag != 2
@@ -3985,6 +4145,15 @@ controlled by @code{REG_OK_STRICT} as described above. This usually
requires two variant definitions, of which @code{REG_OK_STRICT}
controls the one actually used.
+@findex REG_MODE_OK_FOR_BASE_P
+@item REG_MODE_OK_FOR_BASE_P (@var{x}, @var{mode})
+A C expression that is just like @code{REG_OK_FOR_BASE_P}, except that
+that expression may examine the mode of the memory reference in
+@var{mode}. You should define this macro if the mode of the memory
+reference affects whether a register may be used as a base register. If
+you define this macro, the compiler will use it instead of
+@code{REG_OK_FOR_BASE_P}.
+
@findex REG_OK_FOR_INDEX_P
@item REG_OK_FOR_INDEX_P (@var{x})
A C expression that is nonzero if @var{x} (assumed to be a @code{reg}
@@ -4549,13 +4718,21 @@ Decode @var{sym_name} and store the real name part in @var{var}, sans
the characters that encode section info. Define this macro if
@code{ENCODE_SECTION_INFO} alters the symbol's name string.
+@findex UNIQUE_SECTION_P
+@item UNIQUE_SECTION_P (@var{decl})
+A C expression which evaluates to true if @var{decl} should be placed
+into a unique section for some target-specific reason. If you do not
+define this macro, the default is @samp{0}. Note that the flag
+@samp{-ffunction-sections} will also cause functions to be placed into
+unique sections.
+
@findex UNIQUE_SECTION
-@item UNIQUE_SECTION (@var{decl})
-For objects going into their own sections, a C expression of the name of the
-section, expressed as a STRING_CST node, to put @var{decl} into. The
-STRING_CST node must be allocated in the saveable obstack. Function
-@code{build_string} can be used to do this. If you do not define this macro,
-GNU CC will use the symbol name as the section name.
+@item UNIQUE_SECTION (@var{decl}, @var{reloc})
+A C statement to build up a unique section name, expressed as a
+STRING_CST node, and assign it to @samp{DECL_SECTION_NAME (@var{decl})}.
+@var{reloc} indicates whether the initial value of @var{exp} requires
+link-time relocations. If you do not define this macro, GNU CC will use
+the symbol name prefixed by @samp{.} as the section name.
@end table
@node PIC
@@ -4721,6 +4898,14 @@ the stdio stream @var{stream}.
This macro need not be defined if the standard form of output
for the file format in use is appropriate.
+@findex OUTPUT_QUOTED_STRING
+@item OUTPUT_QUOTED_STRING (@var{stream}, @var{name})
+A C statement to output the string @var{string} to the stdio stream
+@var{stream}. If you do not call the function @code{output_quoted_string}
+in your config files, GNU CC will only call it to output filenames to
+the assembler source. So you can use it to canonicalize the format
+of the filename using this macro.
+
@findex ASM_OUTPUT_SOURCE_LINE
@item ASM_OUTPUT_SOURCE_LINE (@var{stream}, @var{line})
A C statement to output DBX or SDB debugging information before code
@@ -4737,10 +4922,12 @@ A C statement to output something to the assembler file to handle a
macro is not defined, nothing is output for a @samp{#ident} directive.
@findex ASM_OUTPUT_SECTION_NAME
-@item ASM_OUTPUT_SECTION_NAME (@var{stream}, @var{decl}, @var{name})
+@item ASM_OUTPUT_SECTION_NAME (@var{stream}, @var{decl}, @var{name}, @var{reloc})
A C statement to output something to the assembler file to switch to section
@var{name} for object @var{decl} which is either a @code{FUNCTION_DECL}, a
-@code{VAR_DECL} or @code{NULL_TREE}. Some target formats do not support
+@code{VAR_DECL} or @code{NULL_TREE}. @var{reloc}
+indicates whether the initial value of @var{exp} requires link-time
+relocations. Some target formats do not support
arbitrary sections. Do not define this macro in such cases.
At present this macro is only used to support section attributes.
@@ -4823,6 +5010,15 @@ If the assembler has a @code{.ascii} pseudo-op as found in the
Berkeley Unix assembler, do not define the macro
@code{ASM_OUTPUT_ASCII}.
+@findex CONSTANT_POOL_BEFORE_FUNCTION
+@item CONSTANT_POOL_BEFORE_FUNCTION
+You may define this macro as a C expression. You should define the
+expression to have a non-zero value if GNU CC should output the constant
+pool for a function before the code for the function, or a zero value if
+GNU CC should output the constant pool after the function. If you do
+not define this macro, the usual case, GNU CC will output the constant
+pool before the function.
+
@findex ASM_OUTPUT_POOL_PROLOGUE
@item ASM_OUTPUT_POOL_PROLOGUE (@var{file} @var{funname} @var{fundecl} @var{size})
A C statement to output assembler commands to define the start of the
@@ -4863,6 +5059,24 @@ entry from being output a second time in the usual manner.
You need not define this macro if it would do nothing.
+@findex CONSTANT_AFTER_FUNCTION_P
+@item CONSTANT_AFTER_FUNCTION_P (@var{exp})
+Define this macro as a C expression which is nonzero if the constant
+@var{exp}, of type @code{tree}, should be output after the code for a
+function. The compiler will normally output all constants before the
+function; you need not define this macro if this is OK.
+
+@findex ASM_OUTPUT_POOL_EPILOGUE
+@item ASM_OUTPUT_POOL_EPILOGUE (@var{file} @var{funname} @var{fundecl} @var{size})
+A C statement to output assembler commands to at the end of the constant
+pool for a function. @var{funname} is a string giving the name of the
+function. Should the return type of the function be required, you can
+obtain it via @var{fundecl}. @var{size} is the size, in bytes, of the
+constant pool that GNU CC wrote immediately before this call.
+
+If no constant-pool epilogue is required, the usual case, you need not
+define this macro.
+
@findex IS_ASM_LOGICAL_LINE_SEPARATOR
@item IS_ASM_LOGICAL_LINE_SEPARATOR (@var{C})
Define this macro as a C expression which is nonzero if @var{C} is
@@ -4948,6 +5162,15 @@ place of @code{ASM_OUTPUT_COMMON}, and gives you more flexibility in
handling the required alignment of the variable. The alignment is specified
as the number of bits.
+@findex ASM_OUTPUT_ALIGNED_DECL_COMMON
+@item ASM_OUTPUT_ALIGNED_DECL_COMMON (@var{stream}, @var{decl}, @var{name}, @var{size}, @var{alignment})
+Like @code{ASM_OUTPUT_ALIGNED_COMMON} except that @var{decl} of the
+variable to be output, if there is one, or @code{NULL_TREE} if there
+is not corresponding variable. If you define this macro, GNU CC wil use it
+in place of both @code{ASM_OUTPUT_COMMON} and
+@code{ASM_OUTPUT_ALIGNED_COMMON}. Define this macro when you need to see
+the variable's decl in order to chose what to output.
+
@findex ASM_OUTPUT_SHARED_COMMON
@item ASM_OUTPUT_SHARED_COMMON (@var{stream}, @var{name}, @var{size}, @var{rounded})
If defined, it is similar to @code{ASM_OUTPUT_COMMON}, except that it
@@ -4972,7 +5195,8 @@ variables are output. This macro exists to properly support languages like
@code{c++} which do not have @code{common} data. However, this macro currently
is not defined for all targets. If this macro and
@code{ASM_OUTPUT_ALIGNED_BSS} are not defined then @code{ASM_OUTPUT_COMMON}
-or @code{ASM_OUTPUT_ALIGNED_COMMON} is used.
+or @code{ASM_OUTPUT_ALIGNED_COMMON} or
+@code{ASM_OUTPUT_ALIGNED_DECL_COMMON} is used.
@findex ASM_OUTPUT_ALIGNED_BSS
@item ASM_OUTPUT_ALIGNED_BSS (@var{stream}, @var{decl}, @var{name}, @var{size}, @var{alignment})
@@ -5013,6 +5237,16 @@ place of @code{ASM_OUTPUT_LOCAL}, and gives you more flexibility in
handling the required alignment of the variable. The alignment is specified
as the number of bits.
+@findex ASM_OUTPUT_ALIGNED_DECL_LOCAL
+@item ASM_OUTPUT_ALIGNED_DECL_LOCAL (@var{stream}, @var{decl}, @var{name}, @var{size}, @var{alignment})
+Like @code{ASM_OUTPUT_ALIGNED_DECL} except that @var{decl} of the
+variable to be output, if there is one, or @code{NULL_TREE} if there
+is not corresponding variable. If you define this macro, GNU CC wil use it
+in place of both @code{ASM_OUTPUT_DECL} and
+@code{ASM_OUTPUT_ALIGNED_DECL}. Define this macro when you need to see
+the variable's decl in order to chose what to output.
+
+
@findex ASM_OUTPUT_SHARED_LOCAL
@item ASM_OUTPUT_SHARED_LOCAL (@var{stream}, @var{name}, @var{size}, @var{rounded})
If defined, it is similar to @code{ASM_OUTPUT_LOCAL}, except that it
@@ -5121,15 +5355,15 @@ format provides support for this concept, such as the @samp{COMDAT}
section flags in the Microsoft Windows PE/COFF format, and this support
requires changes to @var{decl}, such as putting it in a separate section.
-@findex SUPPORTS_WEAK
-@item SUPPORTS_WEAK
+@findex SUPPORTS_ONE_ONLY
+@item SUPPORTS_ONE_ONLY
A C expression which evaluates to true if the target supports one-only
semantics.
If you don't define this macro, @file{varasm.c} provides a default
definition. If @code{MAKE_DECL_ONE_ONLY} is defined, the default
definition is @samp{1}; otherwise, it is @samp{0}. Define this macro if
-you want to control weak symbol support with a compiler flag, or if
+you want to control one-only symbol support with a compiler flag, or if
setting the @code{DECL_ONE_ONLY} flag is enough to mark a declaration to
be emitted as one-only.
@@ -5235,6 +5469,18 @@ which defines (equates) the symbol @var{name} to have the value @var{value}.
If SET_ASM_OP is defined, a default definition is provided which is
correct for most systems.
+@findex ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL
+@item ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL (@var{stream}, @var{symbol}, @var{high}, @var{low})
+A C statement to output to the stdio stream @var{stream} assembler code
+which defines (equates) the symbol @var{symbol} to have a value equal to
+the difference of the two symbols @var{high} and @var{low}, i.e.
+@var{high} minus @var{low}. GNU CC guarantees that the symbols @var{high}
+and @var{low} are already known by the assembler so that the difference
+resolves into a constant.
+
+If SET_ASM_OP is defined, a default definition is provided which is
+correct for most systems.
+
@findex ASM_OUTPUT_WEAK_ALIAS
@item ASM_OUTPUT_WEAK_ALIAS (@var{stream}, @var{name}, @var{value})
A C statement to output to the stdio stream @var{stream} assembler code
@@ -5702,7 +5948,7 @@ operands to @code{asm_fprintf}.
Define the macros @code{REGISTER_PREFIX}, @code{LOCAL_LABEL_PREFIX},
@code{USER_LABEL_PREFIX} and @code{IMMEDIATE_PREFIX} if you can express
-the variations in assemble language syntax with that mechanism. Define
+the variations in assembler language syntax with that mechanism. Define
@code{ASSEMBLER_DIALECT} and use the @samp{@{option0|option1@}} syntax
if the syntax variant are larger and involve such things as different
opcodes or operand order.
@@ -5811,6 +6057,26 @@ A C expression to output text to mark the end of an exception region.
This macro need not be defined on most platforms.
+@findex EXCEPTION_SECTION
+@item EXCEPTION_SECTION ()
+A C expression to switch to the section in which the main
+exception table is to be placed (@pxref{Sections}). The default is a
+section named @code{.gcc_except_table} on machines that support named
+sections via @code{ASM_OUTPUT_SECTION_NAME}, otherwise if @samp{-fpic}
+or @samp{-fPIC} is in effect, the @code{data_section}, otherwise the
+@code{readonly_data_section}.
+
+@findex EH_FRAME_SECTION_ASM_OP
+@item EH_FRAME_SECTION_ASM_OP
+If defined, a C string constant for the assembler operation to switch to
+the section for exception handling frame unwind information. If not
+defined, GNU CC will provide a default definition if the target supports
+named sections. @file{crtstuff.c} uses this macro to switch to the
+appropriate section.
+
+You should define this symbol if your target supports DWARF 2 frame
+unwind information and the default definition does not work.
+
@findex OMIT_EH_TABLE
@item OMIT_EH_TABLE ()
A C expression that is nonzero if the normal exception table output
@@ -5835,6 +6101,23 @@ for details on when to define this, and how.
@item MASK_RETURN_ADDR
An rtx used to mask the return address found via RETURN_ADDR_RTX, so
that it does not contain any extraneous set bits in it.
+
+@findex DWARF2_UNWIND_INFO
+@item DWARF2_UNWIND_INFO
+Define this macro to 0 if your target supports DWARF 2 frame unwind
+information, but it does not yet work with exception handling.
+Otherwise, if your target supports this information (if it defines
+@samp{INCOMING_RETURN_ADDR_RTX} and either @samp{UNALIGNED_INT_ASM_OP}
+or @samp{OBJECT_FORMAT_ELF}), GCC will provide a default definition of
+1.
+
+If this macro is defined to 1, the DWARF 2 unwinder will be the default
+exception handling mechanism; otherwise, setjmp/longjmp will be used by
+default.
+
+If this macro is defined to anything, the DWARF 2 unwinder will be used
+instead of inline unwinders and __unwind_function in the non-setjmp case.
+
@end table
@node Alignment Output
@@ -5944,13 +6227,20 @@ having address @var{x} (an RTL expression). The nominal offset is
@findex PREFERRED_DEBUGGING_TYPE
@item PREFERRED_DEBUGGING_TYPE
-A C expression that returns the type of debugging output GNU CC produces
-when the user specifies @samp{-g} or @samp{-ggdb}. Define this if you
-have arranged for GNU CC to support more than one format of debugging
-output. Currently, the allowable values are @code{DBX_DEBUG},
+A C expression that returns the type of debugging output GNU CC should
+produce when the user specifies just @samp{-g}. Define
+this if you have arranged for GNU CC to support more than one format of
+debugging output. Currently, the allowable values are @code{DBX_DEBUG},
@code{SDB_DEBUG}, @code{DWARF_DEBUG}, @code{DWARF2_DEBUG}, and
@code{XCOFF_DEBUG}.
+When the user specifies @samp{-ggdb}, GNU CC normally also uses the
+value of this macro to select the debugging output format, but with two
+exceptions. If @code{DWARF2_DEBUGGING_INFO} is defined and
+@code{LINKER_DOES_NOT_WORK_WITH_DWARF2} is not defined, GNU CC uses the
+value @code{DWARF2_DEBUG}. Otherwise, if @code{DBX_DEBUGGING_INFO} is
+defined, GNU CC uses @code{DBX_DEBUG}.
+
The value of this macro only affects the default debugging output; the
user can always get a specific type of output by using @samp{-gstabs},
@samp{-gcoff}, @samp{-gdwarf-1}, @samp{-gdwarf-2}, or @samp{-gxcoff}.
@@ -6274,6 +6564,19 @@ in response to the @samp{-g} option.
Define this macro if GNU CC should produce dwarf version 2 format
debugging output in response to the @samp{-g} option.
+To support optional call frame debugging information, you must also
+define @code{INCOMING_RETURN_ADDR_RTX} and either set
+@code{RTX_FRAME_RELATED_P} on the prologue insns if you use RTL for the
+prologue, or call @code{dwarf2out_def_cfa} and @code{dwarf2out_reg_save}
+as appropriate from @code{FUNCTION_PROLOGUE} if you don't.
+
+@findex LINKER_DOES_NOT_WORK_WITH_DWARF2
+@item LINKER_DOES_NOT_WORK_WITH_DWARF2
+Define this macro if the linker does not work with Dwarf version 2.
+Normally, if the user specifies only @samp{-ggdb} GNU CC will use Dwarf
+version 2 if available; this macro disables this. See the description
+of the @code{PREFERRED_DEBUGGING_TYPE} macro for more details.
+
@findex PUT_SDB_@dots{}
@item PUT_SDB_@dots{}
Define these macros to override the assembler syntax for the special
@@ -6513,7 +6816,7 @@ incorrect definitions that omit an rtl code that may be matched by the
predicate can cause the compiler to malfunction). Instead, it allows
the table built by @file{genrecog} to be more compact and efficient,
thus speeding up the compiler. The most important predicates to include
-in the list specified by this macro are thoses used in the most insn
+in the list specified by this macro are those used in the most insn
patterns.
@findex CASE_VECTOR_MODE
@@ -6560,6 +6863,11 @@ value in this case. Do not define this macro if it would always return
@code{NIL}. On machines where this macro is defined, you will normally
define it as the constant @code{SIGN_EXTEND} or @code{ZERO_EXTEND}.
+@findex SHORT_IMMEDIATES_SIGN_EXTEND
+@item SHORT_IMMEDIATES_SIGN_EXTEND
+Define this macro if loading short immediate values into registers sign
+extends.
+
@findex IMPLICIT_FIX_EXPR
@item IMPLICIT_FIX_EXPR
An alias for a tree code that should be used by default for conversion
@@ -6870,7 +7178,7 @@ and @code{INIT_SECTION_ASM_OP} is not defined, a default
Define this if your @code{exit} function needs to do something
besides calling an external function @code{_cleanup} before
terminating with @code{_exit}. The @code{EXIT_BODY} macro is
-only needed if netiher @code{HAVE_ATEXIT} nor
+only needed if neither @code{HAVE_ATEXIT} nor
@code{INIT_SECTION_ASM_OP} are defined.
@findex INSN_SETS_ARE_DELAYED
@@ -6906,6 +7214,13 @@ dependent processing between the second jump optimization pass and
delayed branch scheduling. On those machines, define this macro as a C
statement to act on the code starting at @var{insn}.
+@findex MULTIPLE_SYMBOL_SPACES
+@item MULTIPLE_SYMBOL_SPACES
+Define this macro if in some cases global symbols from one translation
+unit may not be bound to undefined symbols in another translation unit
+without user intervention. For instance, under Microsoft Windows
+symbols must be explicitly imported from shared libraries (DLLs).
+
@findex GIV_SORT_CRITERION
@item GIV_SORT_CRITERION (@var{giv1}, @var{giv2})
In some cases, the strength reduction optimization pass can produce better
diff --git a/gcc/toplev.c b/gcc/toplev.c
index cb11ab46d0d..45831c03b65 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -1,5 +1,5 @@
/* Top level of GNU C compiler
- Copyright (C) 1987, 88, 89, 92-6, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -36,21 +36,35 @@ Boston, MA 02111-1307, USA. */
#include <ctype.h>
#include <sys/stat.h>
-#ifndef _WIN32
-#ifdef USG
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
#undef FLOAT
+#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
-/* This is for hpux. It is a real screw. They should change hpux. */
-#undef FLOAT
-#include <sys/times.h>
-#include <time.h> /* Correct for hpux at least. Is it good on other USG? */
+#endif
+
+#undef FLOAT /* This is for hpux. They should change hpux. */
#undef FFS /* Some systems define this in param.h. */
+
+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
#else
-#ifndef VMS
-#include <sys/time.h>
-#include <sys/resource.h>
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
#endif
#endif
+
+#ifdef HAVE_SYS_RESOURCE_H
+# include <sys/resource.h>
+#endif
+
+#ifdef HAVE_SYS_TIMES_H
+# include <sys/times.h>
#endif
#include "input.h"
@@ -58,6 +72,9 @@ Boston, MA 02111-1307, USA. */
#include "rtl.h"
#include "flags.h"
#include "insn-attr.h"
+#include "insn-codes.h"
+#include "insn-config.h"
+#include "recog.h"
#include "defaults.h"
#include "output.h"
#include "bytecode.h"
@@ -126,11 +143,6 @@ You Lose! You must define PREFERRED_DEBUGGING_TYPE!
#define PREFERRED_DEBUGGING_TYPE NO_DEBUG
#endif
-#ifdef DWARF2_DEBUGGING_INFO
-#undef PREFERRED_DEBUGGING_TYPE
-#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
-#endif
-
extern int rtx_equal_function_value_matters;
#if ! (defined (VMS) || defined (OS2))
@@ -186,7 +198,7 @@ void print_switch_values ();
/* Length of line when printing switch values. */
#define MAX_LINE 75
-#ifdef __alpha
+#ifdef NEED_DECLARATION_SBRK
extern char *sbrk ();
#endif
@@ -546,7 +558,7 @@ int flag_pic;
/* Nonzero means generate extra code for exception handling and enable
exception handling. */
-int flag_exceptions = 1;
+int flag_exceptions = 2;
/* Nonzero means don't place uninitialized global data in common storage
by default. */
@@ -582,10 +594,10 @@ int flag_inhibit_size_directive = 0;
the generated assembly code (to make it more readable). This option
is generally only of use to those who actually need to read the
generated assembly code (perhaps while debugging the compiler itself).
- -fverbose-asm is the default. -fno-verbose-asm causes the extra information
+ -fno-verbose-asm, the default, causes the extra information
to be omitted and is useful when comparing two assembler files. */
-int flag_verbose_asm = 1;
+int flag_verbose_asm = 0;
/* -dA causes debug commentary information to be produced in
the generated assembly code (to make it more readable). This option
@@ -612,6 +624,16 @@ int flag_pack_struct = 0;
to be allocated dynamically. */
int flag_stack_check;
+/* -fcheck-memory-usage causes extra code to be generated in order to check
+ memory accesses. This is used by a detector of bad memory accesses such
+ as Checker. */
+int flag_check_memory_usage = 0;
+
+/* -fprefix-function-name causes function name to be prefixed. This
+ can be used with -fcheck-memory-usage to isolate code compiled with
+ -fcheck-memory-usage. */
+int flag_prefix_function_name = 0;
+
/* Table of language-independent -f options.
STRING is the option name. VARIABLE is the address of the variable.
ON_VALUE is the value to store in VARIABLE
@@ -667,7 +689,9 @@ struct { char *string; int *variable; int on_value;} f_options[] =
{"gnu-linker", &flag_gnu_linker, 1},
{"pack-struct", &flag_pack_struct, 1},
{"stack-check", &flag_stack_check, 1},
- {"bytecode", &output_bytecode, 1}
+ {"bytecode", &output_bytecode, 1},
+ {"check-memory-usage", &flag_check_memory_usage, 1},
+ {"prefix-function-name", &flag_prefix_function_name, 1}
};
/* Table of language-specific options. */
@@ -727,6 +751,11 @@ char *lang_options[] =
"-Wno-format",
"-Wimport",
"-Wno-import",
+ "-Wimplicit-function-declaration",
+ "-Wno-implicit-function-declaration",
+ "-Werror-implicit-function-declaration",
+ "-Wimplicit-int",
+ "-Wno-implicit-int",
"-Wimplicit",
"-Wno-implicit",
"-Wmain",
@@ -769,6 +798,7 @@ char *lang_options[] =
"-Wno-selector",
"-Wprotocol",
"-Wno-protocol",
+ "-print-objc-runtime-info",
#include "options.h"
0
@@ -928,15 +958,24 @@ get_run_time ()
return (clock() * 1000);
#else /* not _WIN32 */
#ifdef USG
+# if HAVE_SYSCONF && defined _SC_CLK_TCK
+# define TICKS_PER_SECOND sysconf (_SC_CLK_TCK) /* POSIX 1003.1-1996 */
+# else
+# ifdef CLK_TCK
+# define TICKS_PER_SECOND CLK_TCK /* POSIX 1003.1-1988; obsolescent */
+# else
+# define TICKS_PER_SECOND HZ /* traditional UNIX */
+# endif
+# endif
times (&tms);
- return (tms.tms_utime + tms.tms_stime) * (1000000 / HZ);
+ return (tms.tms_utime + tms.tms_stime) * (1000000 / TICKS_PER_SECOND);
#else
#ifndef VMS
getrusage (0, &rusage);
return (rusage.ru_utime.tv_sec * 1000000 + rusage.ru_utime.tv_usec
+ rusage.ru_stime.tv_sec * 1000000 + rusage.ru_stime.tv_usec);
#else /* VMS */
- times (&vms_times);
+ times ((void *) &vms_times);
return (vms_times.proc_user_time + vms_times.proc_system_time) * 10000;
#endif
#endif
@@ -1848,14 +1887,17 @@ xmalloc (size)
return value;
}
-/* Same as `realloc' but report error if no memory available. */
+/* Same as `realloc' but report error if no memory available.
+ Also handle null PTR even if the vendor realloc gets it wrong. */
char *
xrealloc (ptr, size)
char *ptr;
int size;
{
- char *result = (char *) realloc (ptr, size);
+ char *result = (ptr
+ ? (char *) realloc (ptr, size)
+ : (char *) malloc (size));
if (!result)
fatal ("virtual memory exhausted");
return result;
@@ -2015,6 +2057,9 @@ output_quoted_string (asm_file, string)
FILE *asm_file;
char *string;
{
+#ifdef OUTPUT_QUOTED_STRING
+ OUTPUT_QUOTED_STRING (asm_file, string);
+#else
char c;
putc ('\"', asm_file);
@@ -2025,6 +2070,7 @@ output_quoted_string (asm_file, string)
putc (c, asm_file);
}
putc ('\"', asm_file);
+#endif
}
/* Output a file name in the form wanted by System V. */
@@ -2284,10 +2330,32 @@ compile_file (name)
input_file_stack->next = 0;
input_file_stack->name = input_filename;
+ /* Gross. Gross. lang_init is (I think) the first callback into
+ the language front end, and is thus the first opportunity to
+ have the selected language override the default value for any
+ -f option.
+
+ So the default value for flag_exceptions is 2 (uninitialized).
+ If we encounter -fno-exceptions or -fexceptions, then flag_exceptions
+ will be set to zero or one respectively.
+
+ flag_exceptions can also be set by lang_init to something other
+ than the default "uninitialized" value of 2.
+
+ After lang_init, if the value is still 2, then we default to
+ -fno-exceptions (value will be reset to zero).
+
+ When our EH mechanism is low enough overhead that we can enable
+ it by default for languages other than C++, then all this braindamage
+ will go away. */
+
/* Perform language-specific initialization.
This may set main_input_filename. */
lang_init ();
+ if (flag_exceptions == 2)
+ flag_exceptions = 0;
+
/* If the input doesn't start with a #line, use the input name
as the official input file name. */
if (main_input_filename == 0)
@@ -2367,7 +2435,14 @@ compile_file (name)
/* Don't let the first function fall at the same address
as gcc_compiled., if profiling. */
if (profile_flag || profile_block_flag)
- assemble_zeros (UNITS_PER_WORD);
+ {
+ /* It's best if we can write a nop here since some
+ assemblers don't tolerate zeros in the text section. */
+ if (insn_template[CODE_FOR_nop] != 0)
+ output_asm_insn (insn_template[CODE_FOR_nop], NULL_PTR);
+ else
+ assemble_zeros (UNITS_PER_WORD);
+ }
}
/* If dbx symbol table desired, initialize writing it
@@ -2386,6 +2461,10 @@ compile_file (name)
if (write_symbols == DWARF_DEBUG)
TIMEVAR (symout_time, dwarfout_init (asm_out_file, main_input_filename));
#endif
+#ifdef DWARF2_UNWIND_INFO
+ if (dwarf2out_do_frame ())
+ dwarf2out_frame_init ();
+#endif
#ifdef DWARF2_DEBUGGING_INFO
if (write_symbols == DWARF2_DEBUG)
TIMEVAR (symout_time, dwarf2out_init (asm_out_file, main_input_filename));
@@ -2520,8 +2599,7 @@ compile_file (name)
/* Now that all possible functions have been output, we can dump
the exception table. */
- if (exception_table_p ())
- output_exception_table ();
+ output_exception_table ();
for (i = 0; i < len; i++)
{
@@ -2636,6 +2714,11 @@ compile_file (name)
});
#endif
+#ifdef DWARF2_UNWIND_INFO
+ if (dwarf2out_do_frame ())
+ dwarf2out_frame_finish ();
+#endif
+
#ifdef DWARF2_DEBUGGING_INFO
if (write_symbols == DWARF2_DEBUG)
TIMEVAR (symout_time,
@@ -2891,7 +2974,7 @@ rest_of_compilation (decl)
if (DECL_SAVED_INSNS (decl) == 0)
{
- int inlineable = 0;
+ int inlinable = 0;
char *lose;
/* If requested, consider whether to make this function inline. */
@@ -2918,7 +3001,7 @@ rest_of_compilation (decl)
like "inline" was specified for a function if we choose
to inline it. This isn't quite right, but it's
probably not worth the trouble to fix. */
- inlineable = DECL_INLINE (decl) = 1;
+ inlinable = DECL_INLINE (decl) = 1;
});
insns = get_insns ();
@@ -2933,7 +3016,8 @@ rest_of_compilation (decl)
if (DECL_SAVED_INSNS (decl))
fprintf (rtl_dump_file, ";; (integrable)\n\n");
print_rtl (rtl_dump_file, insns);
- fflush (rtl_dump_file);
+ if (! quiet_flag)
+ fflush (rtl_dump_file);
});
/* If function is inline, and we don't yet know whether to
@@ -2948,7 +3032,7 @@ rest_of_compilation (decl)
finish compiling ourselves. Otherwise, wait until EOF.
We have to do this because the purge_addressof transformation
changes the DECL_RTL for many variables, which confuses integrate. */
- if (DECL_INLINE (decl))
+ if (inlinable)
{
if (decl_function_context (decl))
purge_addressof (insns);
@@ -2991,14 +3075,14 @@ rest_of_compilation (decl)
}
#endif
TIMEVAR (integration_time, save_for_inline_nocopy (decl));
- RTX_INTEGRATED_P (DECL_SAVED_INSNS (decl)) = inlineable;
+ RTX_INTEGRATED_P (DECL_SAVED_INSNS (decl)) = inlinable;
goto exit_rest_of_compilation;
}
}
/* If we have to compile the function now, save its rtl and subdecls
so that its compilation will not affect what others get. */
- if (inlineable || DECL_DEFER_OUTPUT (decl))
+ if (inlinable || DECL_DEFER_OUTPUT (decl))
{
#ifdef DWARF_DEBUGGING_INFO
/* Generate the DWARF info for the "abstract" instance of
@@ -3027,7 +3111,7 @@ rest_of_compilation (decl)
saved_block_tree = DECL_INITIAL (decl);
saved_arguments = DECL_ARGUMENTS (decl);
TIMEVAR (integration_time, save_for_inline_copying (decl));
- RTX_INTEGRATED_P (DECL_SAVED_INSNS (decl)) = inlineable;
+ RTX_INTEGRATED_P (DECL_SAVED_INSNS (decl)) = inlinable;
}
/* If specified extern inline but we aren't inlining it, we are
@@ -3108,7 +3192,8 @@ rest_of_compilation (decl)
fprintf (jump_opt_dump_file, "\n;; Function %s\n\n",
(*decl_printable_name) (decl, 2));
print_rtl (jump_opt_dump_file, insns);
- fflush (jump_opt_dump_file);
+ if (! quiet_flag)
+ fflush (jump_opt_dump_file);
});
/* Perform common subexpression elimination.
@@ -3145,7 +3230,8 @@ rest_of_compilation (decl)
TIMEVAR (dump_time,
{
print_rtl (cse_dump_file, insns);
- fflush (cse_dump_file);
+ if (! quiet_flag)
+ fflush (cse_dump_file);
});
purge_addressof (insns);
@@ -3157,7 +3243,8 @@ rest_of_compilation (decl)
fprintf (addressof_dump_file, "\n;; Function %s\n\n",
(*decl_printable_name) (decl, 2));
print_rtl (addressof_dump_file, insns);
- fflush (addressof_dump_file);
+ if (! quiet_flag)
+ fflush (addressof_dump_file);
});
if (loop_dump)
@@ -3183,7 +3270,8 @@ rest_of_compilation (decl)
TIMEVAR (dump_time,
{
print_rtl (loop_dump_file, insns);
- fflush (loop_dump_file);
+ if (! quiet_flag)
+ fflush (loop_dump_file);
});
if (cse2_dump)
@@ -3223,7 +3311,8 @@ rest_of_compilation (decl)
TIMEVAR (dump_time,
{
print_rtl (cse2_dump_file, insns);
- fflush (cse2_dump_file);
+ if (! quiet_flag)
+ fflush (cse2_dump_file);
});
if (branch_prob_dump)
@@ -3243,7 +3332,8 @@ rest_of_compilation (decl)
TIMEVAR (dump_time,
{
print_rtl (branch_prob_dump_file, insns);
- fflush (branch_prob_dump_file);
+ if (! quiet_flag)
+ fflush (branch_prob_dump_file);
});
/* We are no longer anticipating cse in this function, at least. */
@@ -3296,8 +3386,9 @@ rest_of_compilation (decl)
if (flow_dump)
TIMEVAR (dump_time,
{
- print_rtl (flow_dump_file, insns);
- fflush (flow_dump_file);
+ print_rtl_with_bb (flow_dump_file, insns);
+ if (! quiet_flag)
+ fflush (flow_dump_file);
});
/* If -opt, try combining insns through substitution. */
@@ -3313,8 +3404,9 @@ rest_of_compilation (decl)
fprintf (combine_dump_file, "\n;; Function %s\n\n",
(*decl_printable_name) (decl, 2));
dump_combine_stats (combine_dump_file);
- print_rtl (combine_dump_file, insns);
- fflush (combine_dump_file);
+ print_rtl_with_bb (combine_dump_file, insns);
+ if (! quiet_flag)
+ fflush (combine_dump_file);
});
/* Print function header into sched dump now
@@ -3340,8 +3432,9 @@ rest_of_compilation (decl)
if (sched_dump)
TIMEVAR (dump_time,
{
- print_rtl (sched_dump_file, insns);
- fflush (sched_dump_file);
+ print_rtl_with_bb (sched_dump_file, insns);
+ if (! quiet_flag)
+ fflush (sched_dump_file);
});
/* Unless we did stupid register allocation,
@@ -3363,8 +3456,9 @@ rest_of_compilation (decl)
(*decl_printable_name) (decl, 2));
dump_flow_info (local_reg_dump_file);
dump_local_alloc (local_reg_dump_file);
- print_rtl (local_reg_dump_file, insns);
- fflush (local_reg_dump_file);
+ print_rtl_with_bb (local_reg_dump_file, insns);
+ if (! quiet_flag)
+ fflush (local_reg_dump_file);
});
if (global_reg_dump)
@@ -3392,8 +3486,9 @@ rest_of_compilation (decl)
TIMEVAR (dump_time,
{
dump_global_regs (global_reg_dump_file);
- print_rtl (global_reg_dump_file, insns);
- fflush (global_reg_dump_file);
+ print_rtl_with_bb (global_reg_dump_file, insns);
+ if (! quiet_flag)
+ fflush (global_reg_dump_file);
});
if (failure)
@@ -3431,8 +3526,9 @@ rest_of_compilation (decl)
if (sched2_dump)
TIMEVAR (dump_time,
{
- print_rtl (sched2_dump_file, insns);
- fflush (sched2_dump_file);
+ print_rtl_with_bb (sched2_dump_file, insns);
+ if (! quiet_flag)
+ fflush (sched2_dump_file);
});
}
@@ -3459,8 +3555,9 @@ rest_of_compilation (decl)
{
fprintf (jump2_opt_dump_file, "\n;; Function %s\n\n",
(*decl_printable_name) (decl, 2));
- print_rtl (jump2_opt_dump_file, insns);
- fflush (jump2_opt_dump_file);
+ print_rtl_with_bb (jump2_opt_dump_file, insns);
+ if (! quiet_flag)
+ fflush (jump2_opt_dump_file);
});
/* If a machine dependent reorganization is needed, call it. */
@@ -3481,8 +3578,9 @@ rest_of_compilation (decl)
{
fprintf (dbr_sched_dump_file, "\n;; Function %s\n\n",
(*decl_printable_name) (decl, 2));
- print_rtl (dbr_sched_dump_file, insns);
- fflush (dbr_sched_dump_file);
+ print_rtl_with_bb (dbr_sched_dump_file, insns);
+ if (! quiet_flag)
+ fflush (dbr_sched_dump_file);
});
}
}
@@ -3502,8 +3600,9 @@ rest_of_compilation (decl)
{
fprintf (stack_reg_dump_file, "\n;; Function %s\n\n",
(*decl_printable_name) (decl, 2));
- print_rtl (stack_reg_dump_file, insns);
- fflush (stack_reg_dump_file);
+ print_rtl_with_bb (stack_reg_dump_file, insns);
+ if (! quiet_flag)
+ fflush (stack_reg_dump_file);
});
}
#endif
@@ -3532,7 +3631,8 @@ rest_of_compilation (decl)
final (insns, asm_out_file, optimize, 0);
final_end_function (insns, asm_out_file, optimize);
assemble_end_function (decl, fnname);
- fflush (asm_out_file);
+ if (! quiet_flag)
+ fflush (asm_out_file);
/* Release all memory held by regsets now */
regset_release_memory ();
@@ -3638,7 +3738,7 @@ main (argc, argv, envp)
--p;
progname = p;
-#ifdef RLIMIT_STACK
+#if defined (RLIMIT_STACK) && defined (HAVE_GETRLIMIT) && defined (HAVE_SETRLIMIT)
/* Get rid of any avoidable limit on stack size. */
{
struct rlimit rlim;
@@ -3648,7 +3748,7 @@ main (argc, argv, envp)
rlim.rlim_cur = rlim.rlim_max;
setrlimit (RLIMIT_STACK, &rlim);
}
-#endif /* RLIMIT_STACK */
+#endif
signal (SIGFPE, float_signal);
@@ -4066,11 +4166,21 @@ main (argc, argv, envp)
p = str + strlen (da->arg);
if (*p && (*p < '0' || *p > '9'))
continue;
+ len = p - str;
q = p;
while (*q && (*q >= '0' && *q <= '9'))
q++;
if (*p)
- level = atoi (p);
+ {
+ level = atoi (p);
+ if (len > 1 && !strncmp (str, "gdwarf", len))
+ {
+ error ("use -gdwarf -g%d for DWARF v1, level %d",
+ level, level);
+ if (level == 2)
+ error ("use -gdwarf-2 for DWARF v2");
+ }
+ }
else
level = 2; /* default debugging info level */
if (*q || level > 3)
@@ -4088,11 +4198,13 @@ main (argc, argv, envp)
type = PREFERRED_DEBUGGING_TYPE;
if (len > 1 && strncmp (str, "ggdb", len) == 0)
{
-#ifdef DWARF2_DEBUGGING_INFO
+#if defined (DWARF2_DEBUGGING_INFO) && !defined (LINKER_DOES_NOT_WORK_WITH_DWARF2)
type = DWARF2_DEBUG;
-#elif defined DBX_DEBUGGING_INFO
+#else
+#ifdef DBX_DEBUGGING_INFO
type = DBX_DEBUG;
#endif
+#endif
}
}
@@ -4155,6 +4267,10 @@ main (argc, argv, envp)
filename = argv[i];
}
+ /* Checker uses the frame pointer. */
+ if (flag_check_memory_usage)
+ flag_omit_frame_pointer = 0;
+
/* Initialize for bytecode output. A good idea to do this as soon as
possible after the "-f" options have been parsed. */
if (output_bytecode)
@@ -4186,6 +4302,15 @@ main (argc, argv, envp)
OVERRIDE_OPTIONS;
#endif
+ if (exceptions_via_longjmp == 2)
+ {
+#ifdef DWARF2_UNWIND_INFO
+ exceptions_via_longjmp = ! DWARF2_UNWIND_INFO;
+#else
+ exceptions_via_longjmp = 1;
+#endif
+ }
+
if (profile_block_flag == 3)
{
warning ("`-ax' and `-a' are conflicting options. `-a' ignored.");
@@ -4236,11 +4361,13 @@ main (argc, argv, envp)
lim - (char *) &environ);
fflush (stderr);
+#ifndef __MSDOS__
#ifdef USG
system ("ps -l 1>&2");
#else /* not USG */
system ("ps v");
#endif /* not USG */
+#endif
}
#endif /* ! OS2 && ! VMS && (! _WIN32 || CYGWIN32) */
diff --git a/gcc/tree.c b/gcc/tree.c
index 0f91d7b1164..b989344a949 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -1,5 +1,5 @@
/* Language-independent node constructors for parse phase of GNU compiler.
- Copyright (C) 1987, 88, 92-96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 92-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -33,8 +33,8 @@ Boston, MA 02111-1307, USA. */
are used also for allocating many other kinds of objects
by all passes of the compiler. */
-#include <setjmp.h>
#include "config.h"
+#include <setjmp.h>
#include "flags.h"
#include "tree.h"
#include "except.h"
@@ -47,6 +47,10 @@ Boston, MA 02111-1307, USA. */
#endif
#include <stdio.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
#define obstack_chunk_alloc xmalloc
#define obstack_chunk_free free
@@ -73,6 +77,10 @@ struct obstack maybepermanent_obstack;
struct simple_obstack_stack *toplev_inline_obstacks;
+/* Former elements of toplev_inline_obstacks that have been recycled. */
+
+struct simple_obstack_stack *extra_inline_obstacks;
+
/* This is a list of function_maybepermanent_obstacks for inline functions
nested in the current function that were compiled in the middle of
compiling other functions. */
@@ -373,12 +381,22 @@ save_tree_status (p, context)
head = &f->inline_obstacks;
}
- current = ((struct simple_obstack_stack *)
- xmalloc (sizeof (struct simple_obstack_stack)));
+ if (context == NULL_TREE && extra_inline_obstacks)
+ {
+ current = extra_inline_obstacks;
+ extra_inline_obstacks = current->next;
+ }
+ else
+ {
+ current = ((struct simple_obstack_stack *)
+ xmalloc (sizeof (struct simple_obstack_stack)));
+
+ current->obstack
+ = (struct obstack *) xmalloc (sizeof (struct obstack));
+ gcc_obstack_init (current->obstack);
+ }
- current->obstack = (struct obstack *) xmalloc (sizeof (struct obstack));
function_maybepermanent_obstack = current->obstack;
- gcc_obstack_init (function_maybepermanent_obstack);
current->next = *head;
*head = current;
@@ -403,8 +421,9 @@ save_tree_status (p, context)
This is used after a nested function. */
void
-restore_tree_status (p)
+restore_tree_status (p, context)
struct function *p;
+ tree context;
{
all_types_permanent = p->all_types_permanent;
momentary_stack = p->momentary_stack;
@@ -420,6 +439,29 @@ restore_tree_status (p)
past the nested function's end. */
obstack_free (function_maybepermanent_obstack, maybepermanent_firstobj);
+ /* If we were compiling a toplevel function, we can free this space now. */
+ if (context == NULL_TREE)
+ {
+ obstack_free (&temporary_obstack, temporary_firstobj);
+ obstack_free (&momentary_obstack, momentary_function_firstobj);
+ }
+
+ /* If we were compiling a toplevel function that we don't actually want
+ to save anything from, return the obstack to the pool. */
+ if (context == NULL_TREE
+ && obstack_empty_p (function_maybepermanent_obstack))
+ {
+ struct simple_obstack_stack *current, **p = &toplev_inline_obstacks;
+
+ while ((*p)->obstack != function_maybepermanent_obstack)
+ p = &((*p)->next);
+ current = *p;
+ *p = current->next;
+
+ current->next = extra_inline_obstacks;
+ extra_inline_obstacks = current;
+ }
+
obstack_free (function_obstack, 0);
free (function_obstack);
@@ -696,6 +738,16 @@ savealloc (size)
{
return (char *) obstack_alloc (saveable_obstack, size);
}
+
+/* Allocate SIZE bytes in the expression obstack
+ and return a pointer to them. */
+
+char *
+expralloc (size)
+ int size;
+{
+ return (char *) obstack_alloc (expression_obstack, size);
+}
/* Print out which obstack an object is in. */
@@ -1639,7 +1691,7 @@ integer_pow2p (expr)
if (TREE_CODE (expr) != INTEGER_CST || TREE_CONSTANT_OVERFLOW (expr))
return 0;
- prec = (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE
+ prec = (POINTER_TYPE_P (TREE_TYPE (expr))
? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
high = TREE_INT_CST_HIGH (expr);
low = TREE_INT_CST_LOW (expr);
@@ -1680,7 +1732,7 @@ tree_log2 (expr)
if (TREE_CODE (expr) == COMPLEX_CST)
return tree_log2 (TREE_REALPART (expr));
- prec = (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE
+ prec = (POINTER_TYPE_P (TREE_TYPE (expr))
? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
high = TREE_INT_CST_HIGH (expr);
@@ -1994,6 +2046,20 @@ build_decl_list (parm, value)
return node;
}
+/* Similar, but build on the expression_obstack. */
+
+tree
+build_expr_list (parm, value)
+ tree parm, value;
+{
+ register tree node;
+ register struct obstack *ambient_obstack = current_obstack;
+ current_obstack = expression_obstack;
+ node = build_tree_list (parm, value);
+ current_obstack = ambient_obstack;
+ return node;
+}
+
/* Return a newly created TREE_LIST node whose
purpose and value fields are PARM and VALUE
and whose TREE_CHAIN is CHAIN. */
@@ -2040,6 +2106,20 @@ decl_tree_cons (purpose, value, chain)
return node;
}
+/* Similar, but build on the expression_obstack. */
+
+tree
+expr_tree_cons (purpose, value, chain)
+ tree purpose, value, chain;
+{
+ register tree node;
+ register struct obstack *ambient_obstack = current_obstack;
+ current_obstack = expression_obstack;
+ node = tree_cons (purpose, value, chain);
+ current_obstack = ambient_obstack;
+ return node;
+}
+
/* Same as `tree_cons' but make a permanent object. */
tree
@@ -2112,29 +2192,32 @@ size_in_bytes (type)
return t;
}
-/* Return the size of TYPE (in bytes) as an integer,
- or return -1 if the size can vary. */
+/* Return the size of TYPE (in bytes) as a wide integer
+ or return -1 if the size can vary or is larger than an integer. */
-int
+HOST_WIDE_INT
int_size_in_bytes (type)
tree type;
{
- unsigned int size;
+ tree t;
+
if (type == error_mark_node)
return 0;
+
type = TYPE_MAIN_VARIANT (type);
- if (TYPE_SIZE (type) == 0)
+ if (TYPE_SIZE (type) == 0
+ || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
return -1;
- if (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
+
+ if (TREE_INT_CST_HIGH (TYPE_SIZE (type)) == 0)
+ return ((TREE_INT_CST_LOW (TYPE_SIZE (type)) + BITS_PER_UNIT - 1)
+ / BITS_PER_UNIT);
+
+ t = size_binop (CEIL_DIV_EXPR, TYPE_SIZE (type), size_int (BITS_PER_UNIT));
+ if (TREE_CODE (t) != INTEGER_CST || TREE_INT_CST_HIGH (t) != 0)
return -1;
- if (TREE_INT_CST_HIGH (TYPE_SIZE (type)) != 0)
- {
- tree t = size_binop (CEIL_DIV_EXPR, TYPE_SIZE (type),
- size_int (BITS_PER_UNIT));
- return TREE_INT_CST_LOW (t);
- }
- size = TREE_INT_CST_LOW (TYPE_SIZE (type));
- return (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
+
+ return TREE_INT_CST_LOW (t);
}
/* Return, as a tree node, the number of elements for TYPE (which is an
@@ -2226,9 +2309,10 @@ staticp (arg)
if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
&& TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
return staticp (TREE_OPERAND (arg, 0));
- }
- return 0;
+ default:
+ return 0;
+ }
}
/* Wrap a SAVE_EXPR around EXPR, if appropriate.
@@ -2372,6 +2456,9 @@ unsave_expr_now (expr)
case METHOD_CALL_EXPR:
first_rtl = 3;
break;
+
+ default:
+ break;
}
switch (TREE_CODE_CLASS (code))
@@ -2405,50 +2492,32 @@ int
contains_placeholder_p (exp)
tree exp;
{
- return contains_this_placeholder_p (exp, NULL_TREE);
-}
-
-/* Similar, but if PL is non-zero it is assumed to be a PLACEHOLDER_EXPR
- and we return 1 if that PLACEHOLDER_EXPR is in EXP. */
-
-int
-contains_this_placeholder_p (exp, pl)
- tree exp;
- tree pl;
-{
register enum tree_code code = TREE_CODE (exp);
+ int result;
/* If we have a WITH_RECORD_EXPR, it "cancels" any PLACEHOLDER_EXPR
in it since it is supplying a value for it. */
if (code == WITH_RECORD_EXPR)
return 0;
else if (code == PLACEHOLDER_EXPR)
- return (pl == 0 || pl == exp);
+ return 1;
switch (TREE_CODE_CLASS (code))
{
case 'r':
- if (TREE_CODE (exp) == ARRAY_REF)
- {
- tree domain = TYPE_DOMAIN (TREE_TYPE (TREE_OPERAND (exp, 0)));
-
- if (domain != 0
- && ((TREE_CODE (TYPE_MIN_VALUE (domain)) != INTEGER_CST
- && contains_this_placeholder_p (TYPE_MIN_VALUE (domain),
- pl))
- || (TREE_CODE (TYPE_MAX_VALUE (domain)) != INTEGER_CST
- && contains_this_placeholder_p (TYPE_MAX_VALUE (domain),
- pl))
- || contains_this_placeholder_p (TREE_OPERAND (exp, 1), pl)))
- return 1;
- }
- else if (TREE_CODE (exp) == BIT_FIELD_REF
- && (contains_this_placeholder_p (TREE_OPERAND (exp, 1), pl)
- || contains_this_placeholder_p (TREE_OPERAND (exp, 2), pl)))
- return 1;
-
- return contains_this_placeholder_p (TREE_OPERAND (exp, 0), pl);
+ /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
+ position computations since they will be converted into a
+ WITH_RECORD_EXPR involving the reference, which will assume
+ here will be valid. */
+ return contains_placeholder_p (TREE_OPERAND (exp, 0));
+ case 'x':
+ if (code == TREE_LIST)
+ return (contains_placeholder_p (TREE_VALUE (exp))
+ || (TREE_CHAIN (exp) != 0
+ && contains_placeholder_p (TREE_CHAIN (exp))));
+ break;
+
case '1':
case '2': case '<':
case 'e':
@@ -2456,39 +2525,59 @@ contains_this_placeholder_p (exp, pl)
{
case COMPOUND_EXPR:
/* Ignoring the first operand isn't quite right, but works best. */
- return contains_this_placeholder_p (TREE_OPERAND (exp, 1), pl);
+ return contains_placeholder_p (TREE_OPERAND (exp, 1));
case RTL_EXPR:
case CONSTRUCTOR:
return 0;
case COND_EXPR:
- return (contains_this_placeholder_p (TREE_OPERAND (exp, 0), pl)
- || contains_this_placeholder_p (TREE_OPERAND (exp, 1), pl)
- || contains_this_placeholder_p (TREE_OPERAND (exp, 2), pl));
+ return (contains_placeholder_p (TREE_OPERAND (exp, 0))
+ || contains_placeholder_p (TREE_OPERAND (exp, 1))
+ || contains_placeholder_p (TREE_OPERAND (exp, 2)));
case SAVE_EXPR:
- return (SAVE_EXPR_RTL (exp) == 0
- && contains_this_placeholder_p (TREE_OPERAND (exp, 0), pl));
+ /* If we already know this doesn't have a placeholder, don't
+ check again. */
+ if (SAVE_EXPR_NOPLACEHOLDER (exp) || SAVE_EXPR_RTL (exp) != 0)
+ return 0;
+
+ SAVE_EXPR_NOPLACEHOLDER (exp) = 1;
+ result = contains_placeholder_p (TREE_OPERAND (exp, 0));
+ if (result)
+ SAVE_EXPR_NOPLACEHOLDER (exp) = 0;
+
+ return result;
+
+ case CALL_EXPR:
+ return (TREE_OPERAND (exp, 1) != 0
+ && contains_placeholder_p (TREE_OPERAND (exp, 1)));
+
+ default:
+ break;
}
switch (tree_code_length[(int) code])
{
case 1:
- return contains_this_placeholder_p (TREE_OPERAND (exp, 0), pl);
+ return contains_placeholder_p (TREE_OPERAND (exp, 0));
case 2:
- return (contains_this_placeholder_p (TREE_OPERAND (exp, 0), pl)
- || contains_this_placeholder_p (TREE_OPERAND (exp, 1), pl));
+ return (contains_placeholder_p (TREE_OPERAND (exp, 0))
+ || contains_placeholder_p (TREE_OPERAND (exp, 1)));
+ default:
+ return 0;
}
- }
- return 0;
+ default:
+ return 0;
+ }
}
/* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
return a tree with all occurrences of references to F in a
PLACEHOLDER_EXPR replaced by R. Note that we assume here that EXP
- contains only arithmetic expressions. */
+ contains only arithmetic expressions or a CALL_EXPR with a
+ PLACEHOLDER_EXPR occurring only in its arglist. */
tree
substitute_in_expr (exp, f, r)
@@ -2498,7 +2587,7 @@ substitute_in_expr (exp, f, r)
{
enum tree_code code = TREE_CODE (exp);
tree op0, op1, op2;
- tree new = 0;
+ tree new;
tree inner;
switch (TREE_CODE_CLASS (code))
@@ -2510,7 +2599,18 @@ substitute_in_expr (exp, f, r)
case 'x':
if (code == PLACEHOLDER_EXPR)
return exp;
- break;
+ else if (code == TREE_LIST)
+ {
+ op0 = (TREE_CHAIN (exp) == 0
+ ? 0 : substitute_in_expr (TREE_CHAIN (exp), f, r));
+ op1 = substitute_in_expr (TREE_VALUE (exp), f, r);
+ if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
+ return exp;
+
+ return tree_cons (TREE_PURPOSE (exp), op1, op0);
+ }
+
+ abort ();
case '1':
case '2':
@@ -2548,7 +2648,17 @@ substitute_in_expr (exp, f, r)
if (code == SAVE_EXPR)
return exp;
- if (code != COND_EXPR)
+ else if (code == CALL_EXPR)
+ {
+ op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
+ if (op1 == TREE_OPERAND (exp, 1))
+ return exp;
+
+ return build (code, TREE_TYPE (exp),
+ TREE_OPERAND (exp, 0), op1, NULL_TREE);
+ }
+
+ else if (code != COND_EXPR)
abort ();
op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
@@ -2559,6 +2669,10 @@ substitute_in_expr (exp, f, r)
return exp;
new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
+ break;
+
+ default:
+ abort ();
}
break;
@@ -2610,13 +2724,16 @@ substitute_in_expr (exp, f, r)
new = fold (build1 (code, TREE_TYPE (exp), op0));
break;
+
+ default:
+ abort ();
}
+ break;
+
+ default:
+ abort ();
}
- /* If it wasn't one of the cases we handle, give up. */
- if (new == 0)
- abort ();
-
TREE_READONLY (new) = TREE_READONLY (exp);
return new;
}
@@ -3095,18 +3212,20 @@ build_type_attribute_variant (ttype, attribute)
switch (TREE_CODE (ntype))
{
- case FUNCTION_TYPE:
- hashcode += TYPE_HASH (TYPE_ARG_TYPES (ntype));
- break;
- case ARRAY_TYPE:
- hashcode += TYPE_HASH (TYPE_DOMAIN (ntype));
- break;
- case INTEGER_TYPE:
- hashcode += TYPE_HASH (TYPE_MAX_VALUE (ntype));
- break;
- case REAL_TYPE:
- hashcode += TYPE_HASH (TYPE_PRECISION (ntype));
- break;
+ case FUNCTION_TYPE:
+ hashcode += TYPE_HASH (TYPE_ARG_TYPES (ntype));
+ break;
+ case ARRAY_TYPE:
+ hashcode += TYPE_HASH (TYPE_DOMAIN (ntype));
+ break;
+ case INTEGER_TYPE:
+ hashcode += TYPE_HASH (TYPE_MAX_VALUE (ntype));
+ break;
+ case REAL_TYPE:
+ hashcode += TYPE_HASH (TYPE_PRECISION (ntype));
+ break;
+ default:
+ break;
}
ntype = type_hash_canon (hashcode, ntype);
@@ -3183,7 +3302,7 @@ valid_machine_attribute (attr_name, attr_args, decl, type)
/* Handle putting a type attribute on pointer-to-function-type by putting
the attribute on the function type. */
- else if (TREE_CODE (type) == POINTER_TYPE
+ else if (POINTER_TYPE_P (type)
&& TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
&& VALID_MACHINE_TYPE_ATTRIBUTE (TREE_TYPE (type), type_attr_list,
attr_name, attr_args))
@@ -3720,7 +3839,7 @@ simple_cst_equal (t1, t2)
&& TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
case REAL_CST:
- return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
+ return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
case STRING_CST:
return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
@@ -3773,6 +3892,9 @@ simple_cst_equal (t1, t2)
case CONST_DECL:
case FUNCTION_DECL:
return 0;
+
+ default:
+ break;
}
/* This general rule works for most tree codes. All exceptions should be
@@ -3800,9 +3922,10 @@ simple_cst_equal (t1, t2)
return cmp;
}
return cmp;
- }
- return -1;
+ default:
+ return -1;
+ }
}
/* Constructors for pointer, array and function types.
@@ -3843,7 +3966,12 @@ build_pointer_type (to_type)
/* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
MAXVAL should be the maximum value in the domain
- (one less than the length of the array). */
+ (one less than the length of the array).
+
+ The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
+ We don't enforce this limit, that is up to caller (e.g. language front end).
+ The limit exists because the result is a signed type and we don't handle
+ sizes that use more than one HOST_WIDE_INT. */
tree
build_index_type (maxval)
@@ -4031,22 +4159,17 @@ build_reference_type (to_type)
tree to_type;
{
register tree t = TYPE_REFERENCE_TO (to_type);
- register struct obstack *ambient_obstack = current_obstack;
- register struct obstack *ambient_saveable_obstack = saveable_obstack;
/* First, if we already have a type for pointers to TO_TYPE, use it. */
if (t)
return t;
- /* We need a new one. If TO_TYPE is permanent, make this permanent too. */
- if (TREE_PERMANENT (to_type))
- {
- current_obstack = &permanent_obstack;
- saveable_obstack = &permanent_obstack;
- }
-
+ /* We need a new one. Put this in the same obstack as TO_TYPE. */
+ push_obstacks (TYPE_OBSTACK (to_type), TYPE_OBSTACK (to_type));
t = make_node (REFERENCE_TYPE);
+ pop_obstacks ();
+
TREE_TYPE (t) = to_type;
/* Record this type as the pointer to TO_TYPE. */
@@ -4054,8 +4177,6 @@ build_reference_type (to_type)
layout_type (t);
- current_obstack = ambient_obstack;
- saveable_obstack = ambient_saveable_obstack;
return t;
}
@@ -4232,7 +4353,7 @@ get_unwidened (op, for_type)
if (TREE_CODE (op) == COMPONENT_REF
/* Since type_for_size always gives an integer type. */
&& TREE_CODE (type) != REAL_TYPE
- /* Don't crash if field not layed out yet. */
+ /* Don't crash if field not laid out yet. */
&& DECL_SIZE (TREE_OPERAND (op, 1)) != 0)
{
unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
@@ -4372,12 +4493,18 @@ int_fits_type_p (c, type)
return (! (TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST
&& INT_CST_LT_UNSIGNED (TYPE_MAX_VALUE (type), c))
&& ! (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
- && INT_CST_LT_UNSIGNED (c, TYPE_MIN_VALUE (type))));
+ && INT_CST_LT_UNSIGNED (c, TYPE_MIN_VALUE (type)))
+ /* Negative ints never fit unsigned types. */
+ && ! (TREE_INT_CST_HIGH (c) < 0
+ && ! TREE_UNSIGNED (TREE_TYPE (c))));
else
return (! (TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST
&& INT_CST_LT (TYPE_MAX_VALUE (type), c))
&& ! (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
- && INT_CST_LT (c, TYPE_MIN_VALUE (type))));
+ && INT_CST_LT (c, TYPE_MIN_VALUE (type)))
+ /* Unsigned ints with top bit set never fit signed types. */
+ && ! (TREE_INT_CST_HIGH (c) < 0
+ && TREE_UNSIGNED (TREE_TYPE (c))));
}
/* Return the innermost context enclosing DECL that is
@@ -4443,15 +4570,45 @@ decl_type_context (decl)
return NULL_TREE;
}
+/* Print debugging information about the size of the
+ toplev_inline_obstacks. */
+
+void
+print_inline_obstack_statistics ()
+{
+ struct simple_obstack_stack *current = toplev_inline_obstacks;
+ int n_obstacks = 0;
+ int n_alloc = 0;
+ int n_chunks = 0;
+
+ for (; current; current = current->next, ++n_obstacks)
+ {
+ struct obstack *o = current->obstack;
+ struct _obstack_chunk *chunk = o->chunk;
+
+ n_alloc += o->next_free - chunk->contents;
+ chunk = chunk->prev;
+ ++n_chunks;
+ for (; chunk; chunk = chunk->prev, ++n_chunks)
+ n_alloc += chunk->limit - &chunk->contents[0];
+ }
+ fprintf (stderr, "inline obstacks: %d obstacks, %d bytes, %d chunks\n",
+ n_obstacks, n_alloc, n_chunks);
+}
+
+/* Print debugging information about the obstack O, named STR. */
+
void
print_obstack_statistics (str, o)
char *str;
struct obstack *o;
{
struct _obstack_chunk *chunk = o->chunk;
- int n_chunks = 0;
+ int n_chunks = 1;
int n_alloc = 0;
+ n_alloc += o->next_free - chunk->contents;
+ chunk = chunk->prev;
while (chunk)
{
n_chunks += 1;
@@ -4461,6 +4618,10 @@ print_obstack_statistics (str, o)
fprintf (stderr, "obstack %s: %d bytes, %d chunks\n",
str, n_alloc, n_chunks);
}
+
+/* Print debugging information about tree nodes generated during the compile,
+ and any language-specific information. */
+
void
dump_tree_statistics ()
{
@@ -4486,6 +4647,12 @@ dump_tree_statistics ()
#else
fprintf (stderr, "(No per-node statistics)\n");
#endif
+ print_obstack_statistics ("permanent_obstack", &permanent_obstack);
+ print_obstack_statistics ("maybepermanent_obstack", &maybepermanent_obstack);
+ print_obstack_statistics ("temporary_obstack", &temporary_obstack);
+ print_obstack_statistics ("momentary_obstack", &momentary_obstack);
+ print_obstack_statistics ("temp_decl_obstack", &temp_decl_obstack);
+ print_inline_obstack_statistics ();
print_lang_statistics ();
}
diff --git a/gcc/tree.def b/gcc/tree.def
index e77adeb5c65..bd4b989e426 100644
--- a/gcc/tree.def
+++ b/gcc/tree.def
@@ -1,6 +1,6 @@
/* This file contains the definitions and documentation for the
tree codes used in the GNU C compiler.
- Copyright (C) 1987, 1988, 1993, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1987, 1988, 1993, 1995, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -461,7 +461,7 @@ DEFTREECODE (METHOD_CALL_EXPR, "method_call_expr", "e", 4)
call expand_start_target_temps/expand_end_target_temps, as needed.
This differs from TRY_CATCH_EXPR in that operand 2 is always
- evaluated when an exception isn't throw when cleanups are run. */
+ evaluated when an exception isn't thrown when cleanups are run. */
DEFTREECODE (WITH_CLEANUP_EXPR, "with_cleanup_expr", "e", 3)
/* Specify a cleanup point.
@@ -693,7 +693,7 @@ DEFTREECODE (PREINCREMENT_EXPR, "preincrement_expr", "e", 2)
DEFTREECODE (POSTDECREMENT_EXPR, "postdecrement_expr", "e", 2)
DEFTREECODE (POSTINCREMENT_EXPR, "postincrement_expr", "e", 2)
-/* Evalute operand 1. If and only if an exception is thrown during
+/* Evaluate operand 1. If and only if an exception is thrown during
the evaluation of operand 1, evaluate operand 2.
This differs from WITH_CLEANUP_EXPR, in that operand 2 is never
diff --git a/gcc/tree.h b/gcc/tree.h
index cacdc147a72..031c096ba7a 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -1,5 +1,5 @@
/* Front-end tree definitions for GNU compiler.
- Copyright (C) 1989, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1989, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -93,6 +93,7 @@ enum built_in_function
BUILT_IN_CONSTANT_P,
BUILT_IN_FRAME_ADDRESS,
BUILT_IN_RETURN_ADDRESS,
+ BUILT_IN_AGGREGATE_INCOMING_ADDRESS,
BUILT_IN_CALLER_RETURN_ADDRESS,
BUILT_IN_APPLY_ARGS,
BUILT_IN_APPLY,
@@ -100,6 +101,17 @@ enum built_in_function
BUILT_IN_SETJMP,
BUILT_IN_LONGJMP,
+ /* Various hooks for the DWARF 2 __throw routine. */
+ BUILT_IN_FP, BUILT_IN_SP,
+ BUILT_IN_UNWIND_INIT,
+ BUILT_IN_DWARF_FP_REGNUM,
+ BUILT_IN_DWARF_REG_SIZE,
+ BUILT_IN_FROB_RETURN_ADDR,
+ BUILT_IN_EXTRACT_RETURN_ADDR,
+ BUILT_IN_SET_RETURN_ADDR_REG,
+ BUILT_IN_EH_STUB,
+ BUILT_IN_SET_EH_REGS,
+
/* C++ extensions */
BUILT_IN_NEW,
BUILT_IN_VEC_NEW,
@@ -184,7 +196,7 @@ struct tree_common
static_flag:
TREE_STATIC in
- VAR_DECL, FUNCTION_DECL, CONSTRUCTOR
+ VAR_DECL, FUNCTION_DECL, CONSTRUCTOR, ADDR_EXPR
TREE_NO_UNUSED_WARNING in
CONVERT_EXPR, NOP_EXPR, COMPOUND_EXPR
TREE_VIA_VIRTUAL in
@@ -233,7 +245,7 @@ struct tree_common
readonly_flag:
TREE_READONLY in
- VAR_DECL, PARM_DECL, FIELD_DECL, ..._REF
+ all expressions
ITERATOR_BOUND_P in
VAR_DECL if iterator (C)
TYPE_READONLY in
@@ -254,6 +266,8 @@ struct tree_common
FUNCTION_DECL
TREE_PARMLIST in
TREE_PARMLIST (C++)
+ SAVE_EXPR_NOPLACEHOLDER in
+ SAVE_EXPR
asm_written_flag:
@@ -605,6 +619,7 @@ struct tree_vec
/* In a SAVE_EXPR node. */
#define SAVE_EXPR_CONTEXT(NODE) TREE_OPERAND(NODE, 1)
#define SAVE_EXPR_RTL(NODE) (*(struct rtx_def **) &(NODE)->exp.operands[2])
+#define SAVE_EXPR_NOPLACEHOLDER(NODE) TREE_UNSIGNED (NODE)
/* In a RTL_EXPR node. */
#define RTL_EXPR_SEQUENCE(NODE) (*(struct rtx_def **) &(NODE)->exp.operands[0])
@@ -737,7 +752,7 @@ struct tree_block
the same way that the first union alternative would be passed. */
#define TYPE_TRANSPARENT_UNION(NODE) ((NODE)->type.transparent_union_flag)
-/* Indicated that objects of this type should be layed out in as
+/* Indicated that objects of this type should be laid out in as
compact a way as possible. */
#define TYPE_PACKED(NODE) ((NODE)->type.packed_flag)
@@ -1156,8 +1171,7 @@ struct tree_decl
struct rtx_def *rtl; /* acts as link to register transfer language
(rtl) info */
/* For FUNCTION_DECLs: points to insn that constitutes its definition
- on the permanent obstack. For any other kind of decl, this is the
- alignment. */
+ on the permanent obstack. For FIELD_DECL, this is DECL_FIELD_SIZE. */
union {
struct rtx_def *r;
HOST_WIDE_INT i;
@@ -1216,7 +1230,10 @@ extern char *xstrdup PROTO((char *));
extern char *oballoc PROTO((int));
extern char *permalloc PROTO((int));
extern char *savealloc PROTO((int));
+extern char *expralloc PROTO((int));
+#ifdef NEED_DECLARATION_FREE
extern void free PROTO((void *));
+#endif
/* Lowest level primitive for allocating a node.
The TREE_CODE is the only argument. Contents are initialized
@@ -1266,6 +1283,7 @@ extern tree build_string PROTO((int, char *));
extern tree build1 PROTO((enum tree_code, tree, tree));
extern tree build_tree_list PROTO((tree, tree));
extern tree build_decl_list PROTO((tree, tree));
+extern tree build_expr_list PROTO((tree, tree));
extern tree build_decl PROTO((enum tree_code, tree, tree));
extern tree build_block PROTO((tree, tree, tree, tree, tree));
@@ -1374,7 +1392,7 @@ extern tree pedantic_non_lvalue PROTO((tree));
extern tree convert PROTO((tree, tree));
extern tree size_in_bytes PROTO((tree));
-extern int int_size_in_bytes PROTO((tree));
+extern HOST_WIDE_INT int_size_in_bytes PROTO((tree));
extern tree size_binop PROTO((enum tree_code, tree, tree));
extern tree size_int PROTO((unsigned HOST_WIDE_INT));
extern tree round_up PROTO((tree, int));
@@ -1404,6 +1422,7 @@ extern tree perm_tree_cons PROTO((tree, tree, tree));
extern tree temp_tree_cons PROTO((tree, tree, tree));
extern tree saveable_tree_cons PROTO((tree, tree, tree));
extern tree decl_tree_cons PROTO((tree, tree, tree));
+extern tree expr_tree_cons PROTO((tree, tree, tree));
/* Return the last tree node in a chain. */
@@ -1658,6 +1677,7 @@ extern void (*incomplete_decl_finalize_hook) ();
/* In tree.c */
extern char *perm_calloc PROTO((int, long));
+extern tree get_file_function_name PROTO((int));
extern tree get_set_constructor_bits PROTO((tree, char *, int));
extern tree get_set_constructor_bytes PROTO((tree,
unsigned char *, int));
@@ -1692,8 +1712,8 @@ extern void expand_null_return PROTO((void));
extern void expand_return PROTO((tree));
extern void expand_start_bindings PROTO((int));
extern void expand_end_bindings PROTO((tree, int, int));
-extern void start_cleanup_deferal PROTO((void));
-extern void end_cleanup_deferal PROTO((void));
+extern void start_cleanup_deferral PROTO((void));
+extern void end_cleanup_deferral PROTO((void));
extern void mark_block_as_eh_region PROTO((void));
extern void mark_block_as_not_eh_region PROTO((void));
extern int is_eh_region PROTO((void));
@@ -1745,6 +1765,52 @@ extern void rrotate_double PROTO((HOST_WIDE_INT, HOST_WIDE_INT,
extern int operand_equal_p PROTO((tree, tree, int));
extern tree invert_truthvalue PROTO((tree));
+/* Interface of the DWARF2 unwind info support. */
+
+/* Decide whether we want to emit frame unwind information for the current
+ translation unit. */
+
+extern int dwarf2out_do_frame PROTO((void));
+
+/* Generate a new label for the CFI info to refer to. */
+
+extern char *dwarf2out_cfi_label PROTO((void));
+
+/* Entry point to update the canonical frame address (CFA). */
+
+extern void dwarf2out_def_cfa PROTO((char *, unsigned, long));
+
+/* Add the CFI for saving a register window. */
+
+extern void dwarf2out_window_save PROTO((char *));
+
+/* Add a CFI to update the running total of the size of arguments pushed
+ onto the stack. */
+
+extern void dwarf2out_args_size PROTO((char *, long));
+
+/* Entry point for saving a register to the stack. */
+
+extern void dwarf2out_reg_save PROTO((char *, unsigned, long));
+
+/* Entry point for saving the return address in the stack. */
+
+extern void dwarf2out_return_save PROTO((char *, long));
+
+/* Entry point for saving the return address in a register. */
+
+extern void dwarf2out_return_reg PROTO((char *, unsigned));
+
+/* Output a marker (i.e. a label) for the beginning of a function, before
+ the prologue. */
+
+extern void dwarf2out_begin_prologue PROTO((void));
+
+/* Output a marker (i.e. a label) for the absolute end of the generated
+ code for a function definition. */
+
+extern void dwarf2out_end_epilogue PROTO((void));
+
/* The language front-end must define these functions. */
/* Function of no arguments for initializing lexical scanning. */
diff --git a/gcc/unroll.c b/gcc/unroll.c
index 23bf6d372c1..cffd0e7aaf3 100644
--- a/gcc/unroll.c
+++ b/gcc/unroll.c
@@ -1,5 +1,5 @@
/* Try to unroll loops, and split induction variables.
- Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1992, 93, 94, 95, 97, 1998 Free Software Foundation, Inc.
Contributed by James E. Wilson, Cygnus Support/UC Berkeley.
This file is part of GNU CC.
@@ -147,13 +147,14 @@ struct _factor { int factor, count; } factors[NUM_FACTORS]
enum unroll_types { UNROLL_COMPLETELY, UNROLL_MODULO, UNROLL_NAIVE };
#include "config.h"
+#include <stdio.h>
#include "rtl.h"
#include "insn-config.h"
#include "integrate.h"
#include "regs.h"
+#include "recog.h"
#include "flags.h"
#include "expr.h"
-#include <stdio.h>
#include "loop.h"
/* This controls which loops are unrolled, and by how much we unroll
@@ -690,8 +691,9 @@ unroll_loop (loop_end, insn_count, loop_start, end_insert_before,
else if (GET_CODE (insn) == JUMP_INSN)
{
if (JUMP_LABEL (insn))
- map->label_map[CODE_LABEL_NUMBER (JUMP_LABEL (insn))]
- = JUMP_LABEL (insn);
+ set_label_in_map (map,
+ CODE_LABEL_NUMBER (JUMP_LABEL (insn)),
+ JUMP_LABEL (insn));
else if (GET_CODE (PATTERN (insn)) == ADDR_VEC
|| GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC)
{
@@ -703,7 +705,9 @@ unroll_loop (loop_end, insn_count, loop_start, end_insert_before,
for (i = 0; i < len; i++)
{
label = XEXP (XVECEXP (pat, diff_vec_p, i), 0);
- map->label_map[CODE_LABEL_NUMBER (label)] = label;
+ set_label_in_map (map,
+ CODE_LABEL_NUMBER (label),
+ label);
}
}
}
@@ -1042,7 +1046,7 @@ unroll_loop (loop_end, insn_count, loop_start, end_insert_before,
for (j = 0; j < max_labelno; j++)
if (local_label[j])
- map->label_map[j] = gen_label_rtx ();
+ set_label_in_map (map, j, gen_label_rtx ());
for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++)
if (local_regno[j])
@@ -1187,7 +1191,7 @@ unroll_loop (loop_end, insn_count, loop_start, end_insert_before,
for (j = 0; j < max_labelno; j++)
if (local_label[j])
- map->label_map[j] = gen_label_rtx ();
+ set_label_in_map (map, j, gen_label_rtx ());
for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++)
if (local_regno[j])
@@ -1200,8 +1204,9 @@ unroll_loop (loop_end, insn_count, loop_start, end_insert_before,
insn = PREV_INSN (copy_start);
pattern = PATTERN (insn);
- tem = map->label_map[CODE_LABEL_NUMBER
- (XEXP (SET_SRC (pattern), 0))];
+ tem = get_label_from_map (map,
+ CODE_LABEL_NUMBER
+ (XEXP (SET_SRC (pattern), 0)));
SET_SRC (pattern) = gen_rtx (LABEL_REF, VOIDmode, tem);
/* Set the jump label so that it can be used by later loop unrolling
@@ -1426,6 +1431,7 @@ init_reg_map (map, maxregnum)
to the iv. This procedure reconstructs the pattern computing the iv;
verifying that all operands are of the proper form.
+ PATTERN must be the result of single_set.
The return value is the amount that the giv is incremented by. */
static rtx
@@ -1469,10 +1475,11 @@ calculate_giv_inc (pattern, src_insn, regno)
if (GET_CODE (increment) == LO_SUM)
increment = XEXP (increment, 1);
else if (GET_CODE (increment) == IOR
- || GET_CODE (increment) == ASHIFT)
+ || GET_CODE (increment) == ASHIFT
+ || GET_CODE (increment) == PLUS)
{
/* The rs6000 port loads some constants with IOR.
- The alpha port loads some constants with ASHIFT. */
+ The alpha port loads some constants with ASHIFT and PLUS. */
rtx second_part = XEXP (increment, 1);
enum rtx_code code = GET_CODE (increment);
@@ -1487,6 +1494,8 @@ calculate_giv_inc (pattern, src_insn, regno)
if (code == IOR)
increment = GEN_INT (INTVAL (increment) | INTVAL (second_part));
+ else if (code == PLUS)
+ increment = GEN_INT (INTVAL (increment) + INTVAL (second_part));
else
increment = GEN_INT (INTVAL (increment) << INTVAL (second_part));
}
@@ -1590,7 +1599,7 @@ copy_loop_body (copy_start, copy_end, map, exit_label, last_iteration,
rtx start_label, loop_end, insert_before, copy_notes_from;
{
rtx insn, pattern;
- rtx tem, copy;
+ rtx set, tem, copy;
int dest_reg_was_split, i;
rtx cc0_insn = 0;
rtx final_label = 0;
@@ -1605,10 +1614,11 @@ copy_loop_body (copy_start, copy_end, map, exit_label, last_iteration,
if (! last_iteration)
{
final_label = gen_label_rtx ();
- map->label_map[CODE_LABEL_NUMBER (start_label)] = final_label;
+ set_label_in_map (map, CODE_LABEL_NUMBER (start_label),
+ final_label);
}
else
- map->label_map[CODE_LABEL_NUMBER (start_label)] = start_label;
+ set_label_in_map (map, CODE_LABEL_NUMBER (start_label), start_label);
start_sequence ();
@@ -1634,15 +1644,15 @@ copy_loop_body (copy_start, copy_end, map, exit_label, last_iteration,
Do this before splitting the giv, since that may map the
SET_DEST to a new register. */
- if (GET_CODE (pattern) == SET
- && GET_CODE (SET_DEST (pattern)) == REG
- && addr_combined_regs[REGNO (SET_DEST (pattern))])
+ if ((set = single_set (insn))
+ && GET_CODE (SET_DEST (set)) == REG
+ && addr_combined_regs[REGNO (SET_DEST (set))])
{
struct iv_class *bl;
struct induction *v, *tv;
- int regno = REGNO (SET_DEST (pattern));
+ int regno = REGNO (SET_DEST (set));
- v = addr_combined_regs[REGNO (SET_DEST (pattern))];
+ v = addr_combined_regs[REGNO (SET_DEST (set))];
bl = reg_biv_class[REGNO (v->src_reg)];
/* Although the giv_inc amount is not needed here, we must call
@@ -1651,7 +1661,7 @@ copy_loop_body (copy_start, copy_end, map, exit_label, last_iteration,
we might accidentally delete insns generated immediately
below by emit_unrolled_add. */
- giv_inc = calculate_giv_inc (pattern, insn, regno);
+ giv_inc = calculate_giv_inc (set, insn, regno);
/* Now find all address giv's that were combined with this
giv 'v'. */
@@ -1725,11 +1735,11 @@ copy_loop_body (copy_start, copy_end, map, exit_label, last_iteration,
dest_reg_was_split = 0;
- if (GET_CODE (pattern) == SET
- && GET_CODE (SET_DEST (pattern)) == REG
- && splittable_regs[REGNO (SET_DEST (pattern))])
+ if ((set = single_set (insn))
+ && GET_CODE (SET_DEST (set)) == REG
+ && splittable_regs[REGNO (SET_DEST (set))])
{
- int regno = REGNO (SET_DEST (pattern));
+ int regno = REGNO (SET_DEST (set));
dest_reg_was_split = 1;
@@ -1737,9 +1747,9 @@ copy_loop_body (copy_start, copy_end, map, exit_label, last_iteration,
already computed above. */
if (giv_inc == 0)
- giv_inc = calculate_giv_inc (pattern, insn, regno);
- giv_dest_reg = SET_DEST (pattern);
- giv_src_reg = SET_DEST (pattern);
+ giv_inc = calculate_giv_inc (set, insn, regno);
+ giv_dest_reg = SET_DEST (set);
+ giv_src_reg = SET_DEST (set);
if (unroll_type == UNROLL_COMPLETELY)
{
@@ -1892,8 +1902,9 @@ copy_loop_body (copy_start, copy_end, map, exit_label, last_iteration,
if (invert_exp (pattern, copy))
{
if (! redirect_exp (&pattern,
- map->label_map[CODE_LABEL_NUMBER
- (JUMP_LABEL (insn))],
+ get_label_from_map (map,
+ CODE_LABEL_NUMBER
+ (JUMP_LABEL (insn))),
exit_label, copy))
abort ();
}
@@ -1910,8 +1921,9 @@ copy_loop_body (copy_start, copy_end, map, exit_label, last_iteration,
emit_label_after (lab, jmp);
LABEL_NUSES (lab) = 0;
if (! redirect_exp (&pattern,
- map->label_map[CODE_LABEL_NUMBER
- (JUMP_LABEL (insn))],
+ get_label_from_map (map,
+ CODE_LABEL_NUMBER
+ (JUMP_LABEL (insn))),
lab, copy))
abort ();
}
@@ -1932,9 +1944,9 @@ copy_loop_body (copy_start, copy_end, map, exit_label, last_iteration,
/* Can't use the label_map for every insn, since this may be
the backward branch, and hence the label was not mapped. */
- if (GET_CODE (pattern) == SET)
+ if ((set = single_set (copy)))
{
- tem = SET_SRC (pattern);
+ tem = SET_SRC (set);
if (GET_CODE (tem) == LABEL_REF)
label = XEXP (tem, 0);
else if (GET_CODE (tem) == IF_THEN_ELSE)
@@ -1954,7 +1966,8 @@ copy_loop_body (copy_start, copy_end, map, exit_label, last_iteration,
for a switch statement. This label must have been mapped,
so just use the label_map to get the new jump label. */
JUMP_LABEL (copy)
- = map->label_map[CODE_LABEL_NUMBER (JUMP_LABEL (insn))];
+ = get_label_from_map (map,
+ CODE_LABEL_NUMBER (JUMP_LABEL (insn)));
}
/* If this is a non-local jump, then must increase the label
@@ -2032,7 +2045,8 @@ copy_loop_body (copy_start, copy_end, map, exit_label, last_iteration,
if (insn != start_label)
{
- copy = emit_label (map->label_map[CODE_LABEL_NUMBER (insn)]);
+ copy = emit_label (get_label_from_map (map,
+ CODE_LABEL_NUMBER (insn)));
map->const_age++;
}
break;
@@ -2134,6 +2148,7 @@ back_branch_in_range_p (insn, loop_start, loop_end)
rtx loop_start, loop_end;
{
rtx p, q, target_insn;
+ rtx orig_loop_end = loop_end;
/* Stop before we get to the backward branch at the end of the loop. */
loop_end = prev_nonnote_insn (loop_end);
@@ -2145,8 +2160,10 @@ back_branch_in_range_p (insn, loop_start, loop_end)
while (INSN_DELETED_P (insn))
insn = NEXT_INSN (insn);
- /* Check for the case where insn is the last insn in the loop. */
- if (insn == loop_end)
+ /* Check for the case where insn is the last insn in the loop. Deal
+ with the case where INSN was a deleted loop test insn, in which case
+ it will now be the NOTE_LOOP_END. */
+ if (insn == loop_end || insn == orig_loop_end)
return 0;
for (p = NEXT_INSN (insn); p != loop_end; p = NEXT_INSN (p))
@@ -2676,13 +2693,17 @@ find_splittable_givs (bl, unroll_type, loop_start, loop_end, increment,
&& (loop_number_exit_count[uid_loop_num[INSN_UID (loop_start)]]
|| unroll_type == UNROLL_NAIVE)
&& v->giv_type != DEST_ADDR
- && ((REGNO_FIRST_UID (REGNO (v->dest_reg)) != INSN_UID (v->insn)
- /* Check for the case where the pseudo is set by a shift/add
- sequence, in which case the first insn setting the pseudo
- is the first insn of the shift/add sequence. */
- && (! (tem = find_reg_note (v->insn, REG_RETVAL, NULL_RTX))
- || (REGNO_FIRST_UID (REGNO (v->dest_reg))
- != INSN_UID (XEXP (tem, 0)))))
+ /* The next part is true if the pseudo is used outside the loop.
+ We assume that this is true for any pseudo created after loop
+ starts, because we don't have a reg_n_info entry for them. */
+ && (REGNO (v->dest_reg) >= max_reg_before_loop
+ || (REGNO_FIRST_UID (REGNO (v->dest_reg)) != INSN_UID (v->insn)
+ /* Check for the case where the pseudo is set by a shift/add
+ sequence, in which case the first insn setting the pseudo
+ is the first insn of the shift/add sequence. */
+ && (! (tem = find_reg_note (v->insn, REG_RETVAL, NULL_RTX))
+ || (REGNO_FIRST_UID (REGNO (v->dest_reg))
+ != INSN_UID (XEXP (tem, 0)))))
/* Line above always fails if INSN was moved by loop opt. */
|| (uid_luid[REGNO_LAST_UID (REGNO (v->dest_reg))]
>= INSN_LUID (loop_end)))
@@ -3561,6 +3582,10 @@ remap_split_bivs (x)
if (REGNO (x) < max_reg_before_loop
&& reg_iv_type[REGNO (x)] == BASIC_INDUCT)
return reg_biv_class[REGNO (x)]->biv->src_reg;
+ break;
+
+ default:
+ break;
}
fmt = GET_RTX_FORMAT (code);
diff --git a/gcc/varasm.c b/gcc/varasm.c
index e730a275f0f..eae0ea4edb7 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -1,5 +1,5 @@
/* Output variables, constants and external declarations, for GNU compiler.
- Copyright (C) 1987, 88, 89, 92-6, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1987, 88, 89, 92-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -26,10 +26,10 @@ Boston, MA 02111-1307, USA. */
We also output the assembler code for constants stored in memory
and are responsible for combining constants with the same value. */
+#include "config.h"
#include <stdio.h>
#include <setjmp.h>
/* #include <stab.h> */
-#include "config.h"
#include "rtl.h"
#include "tree.h"
#include "flags.h"
@@ -60,6 +60,18 @@ Boston, MA 02111-1307, USA. */
#define ASM_STABS_OP ".stabs"
#endif
+/* Define the prefix to use when check_memory_usage_flag is enable. */
+#ifdef NO_DOLLAR_IN_LABEL
+#ifdef NO_DOT_IN_LABEL
+#define CHKR_PREFIX "chkr_prefix_"
+#else /* !NO_DOT_IN_LABEL */
+#define CHKR_PREFIX "chkr."
+#endif
+#else /* !NO_DOLLAR_IN_LABEL */
+#define CHKR_PREFIX "chkr$"
+#endif
+#define CHKR_PREFIX_SIZE (sizeof (CHKR_PREFIX) - 1)
+
/* This macro gets just the user-specified name
out of the string in a SYMBOL_REF. On most machines,
we discard the * if any and that's all. */
@@ -158,6 +170,9 @@ static enum in_section { no_section, in_text, in_data, in_named
#ifdef BSS_SECTION_ASM_OP
, in_bss
#endif
+#ifdef EH_FRAME_SECTION_ASM_OP
+ , in_eh_frame
+#endif
#ifdef EXTRA_SECTIONS
, EXTRA_SECTIONS
#endif
@@ -267,10 +282,6 @@ named_section (decl, name, reloc)
if (in_section != in_named || strcmp (name, in_named_name))
{
- in_named_name = obstack_alloc (&permanent_obstack, strlen (name) + 1);
- strcpy (in_named_name, name);
- in_section = in_named;
-
#ifdef ASM_OUTPUT_SECTION_NAME
ASM_OUTPUT_SECTION_NAME (asm_out_file, decl, name, reloc);
#else
@@ -279,6 +290,10 @@ named_section (decl, name, reloc)
already have flagged this as an error. */
abort ();
#endif
+
+ in_named_name = obstack_alloc (&permanent_obstack, strlen (name) + 1);
+ strcpy (in_named_name, name);
+ in_section = in_named;
}
}
@@ -389,6 +404,18 @@ asm_output_aligned_bss (file, decl, name, size, align)
#endif /* BSS_SECTION_ASM_OP */
+#ifdef EH_FRAME_SECTION_ASM_OP
+void
+eh_frame_section ()
+{
+ if (in_section != in_eh_frame)
+ {
+ fprintf (asm_out_file, "%s\n", EH_FRAME_SECTION_ASM_OP);
+ in_section = in_eh_frame;
+ }
+}
+#endif
+
/* Switch to the section for function DECL.
If DECL is NULL_TREE, switch to the text section.
@@ -449,15 +476,15 @@ variable_section (decl, reloc)
void
exception_section ()
{
+#if defined (EXCEPTION_SECTION)
+ EXCEPTION_SECTION ();
+#else
#ifdef ASM_OUTPUT_SECTION_NAME
named_section (NULL_TREE, ".gcc_except_table", 0);
#else
if (flag_pic)
data_section ();
else
-#if defined (EXCEPTION_SECTION)
- EXCEPTION_SECTION ();
-#else
readonly_data_section ();
#endif
#endif
@@ -472,6 +499,7 @@ make_function_rtl (decl)
tree decl;
{
char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
+ char *new_name = name;
if (output_bytecode)
{
@@ -495,6 +523,20 @@ make_function_rtl (decl)
name = obstack_copy0 (saveable_obstack, label, strlen (label));
var_labelno++;
}
+ else
+ {
+ /* When -fprefix-function-name is used, every function name is
+ prefixed. Even static functions are prefixed because they
+ could be declared latter. Note that a nested function name
+ is not prefixed. */
+ if (flag_prefix_function_name)
+ {
+ new_name = (char *) alloca (strlen (name) + CHKR_PREFIX_SIZE + 1);
+ strcpy (new_name, CHKR_PREFIX);
+ strcpy (new_name + CHKR_PREFIX_SIZE, name);
+ name = obstack_copy0 (saveable_obstack, new_name, strlen (new_name));
+ }
+ }
if (DECL_RTL (decl) == 0)
{
@@ -760,6 +802,20 @@ make_decl_rtl (decl, asmspec, top_level)
if (name == 0)
abort ();
+ /* When -fprefix-function-name is used, the functions
+ names are prefixed. Only nested function names are not
+ prefixed. */
+ if (flag_prefix_function_name && TREE_CODE (decl) == FUNCTION_DECL)
+ {
+ char *new_name;
+ new_name = (char *) alloca (strlen (name) + CHKR_PREFIX_SIZE
+ + 1);
+ strcpy (new_name, CHKR_PREFIX);
+ strcpy (new_name + CHKR_PREFIX_SIZE, name);
+ name = obstack_copy0 (saveable_obstack,
+ new_name, strlen (new_name));
+ }
+
DECL_RTL (decl) = gen_rtx (MEM, DECL_MODE (decl),
gen_rtx (SYMBOL_REF, Pmode, name));
@@ -1372,12 +1428,17 @@ assemble_variable (decl, top_level, at_end, dont_output_data)
}
else
{
+#ifdef ASM_OUTPUT_ALIGNED_DECL_COMMON
+ ASM_OUTPUT_ALIGNED_DECL_COMMON (asm_out_file, decl, name, size,
+ DECL_ALIGN (decl));
+#else
#ifdef ASM_OUTPUT_ALIGNED_COMMON
ASM_OUTPUT_ALIGNED_COMMON (asm_out_file, name, size,
DECL_ALIGN (decl));
#else
ASM_OUTPUT_COMMON (asm_out_file, name, size, rounded);
#endif
+#endif
}
}
#if defined (ASM_OUTPUT_BSS) || defined (ASM_OUTPUT_ALIGNED_BSS)
@@ -1416,12 +1477,17 @@ assemble_variable (decl, top_level, at_end, dont_output_data)
}
else
{
+#ifdef ASM_OUTPUT_ALIGNED_DECL_LOCAL
+ ASM_OUTPUT_ALIGNED_DECL_LOCAL (asm_out_file, decl, name, size,
+ DECL_ALIGN (decl));
+#else
#ifdef ASM_OUTPUT_ALIGNED_LOCAL
ASM_OUTPUT_ALIGNED_LOCAL (asm_out_file, name, size,
DECL_ALIGN (decl));
#else
ASM_OUTPUT_LOCAL (asm_out_file, name, size, rounded);
#endif
+#endif
}
}
goto finish;
@@ -1759,6 +1825,9 @@ assemble_name (file, name)
tree id;
STRIP_NAME_ENCODING (real_name, name);
+ if (flag_prefix_function_name
+ && ! bcmp (real_name, CHKR_PREFIX, CHKR_PREFIX_SIZE))
+ real_name = real_name + CHKR_PREFIX_SIZE;
id = maybe_get_identifier (real_name);
if (id)
@@ -1819,11 +1888,16 @@ assemble_static_space (size)
}
else
{
+#ifdef ASM_OUTPUT_ALIGNED_DECL_LOCAL
+ ASM_OUTPUT_ALIGNED_DECL_LOCAL (asm_out_file, NULL_TREE, name, size,
+ BIGGEST_ALIGNMENT);
+#else
#ifdef ASM_OUTPUT_ALIGNED_LOCAL
ASM_OUTPUT_ALIGNED_LOCAL (asm_out_file, name, size, BIGGEST_ALIGNMENT);
#else
ASM_OUTPUT_LOCAL (asm_out_file, name, size, rounded);
#endif
+#endif
}
return x;
}
@@ -2133,7 +2207,7 @@ immed_double_const (i0, i1, mode)
push_obstacks_nochange ();
rtl_in_saveable_obstack ();
- r = gen_rtx (CONST_DOUBLE, mode, 0, i0, i1);
+ r = gen_rtx (CONST_DOUBLE, mode, NULL_RTX, i0, i1);
pop_obstacks ();
/* Don't touch const_double_chain in nested function; see force_const_mem.
@@ -2171,8 +2245,7 @@ immed_real_const_1 (d, mode)
/* Detect special cases. */
- /* Avoid REAL_VALUES_EQUAL here in order to distinguish minus zero. */
- if (!bcmp ((char *) &dconst0, (char *) &d, sizeof d))
+ if (REAL_VALUES_IDENTICAL (dconst0, d))
return CONST0_RTX (mode);
/* Check for NaN first, because some ports (specifically the i386) do not
emit correct ieee-fp code by default, and thus will generate a core
@@ -2462,6 +2535,9 @@ const_hash (exp)
case CONVERT_EXPR:
case NON_LVALUE_EXPR:
return const_hash (TREE_OPERAND (exp, 0)) * 7 + 2;
+
+ default:
+ abort ();
}
/* Compute hashing function */
@@ -2533,6 +2609,9 @@ compare_constant_1 (exp, p)
if (flag_writable_strings)
return 0;
+ if (*p++ != TYPE_MODE (TREE_TYPE (exp)))
+ return 0;
+
strp = TREE_STRING_POINTER (exp);
len = TREE_STRING_LENGTH (exp);
if (bcmp ((char *) &TREE_STRING_LENGTH (exp), p,
@@ -2567,6 +2646,11 @@ compare_constant_1 (exp, p)
register tree link;
int length = list_length (CONSTRUCTOR_ELTS (exp));
tree type;
+ int have_purpose = 0;
+
+ for (link = CONSTRUCTOR_ELTS (exp); link; link = TREE_CHAIN (link))
+ if (TREE_PURPOSE (link))
+ have_purpose = 1;
if (bcmp ((char *) &length, p, sizeof length))
return 0;
@@ -2574,7 +2658,9 @@ compare_constant_1 (exp, p)
p += sizeof length;
/* For record constructors, insist that the types match.
- For arrays, just verify both constructors are for arrays. */
+ For arrays, just verify both constructors are for arrays.
+ Then insist that either both or none have any TREE_PURPOSE
+ values. */
if (TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE)
type = TREE_TYPE (exp);
else
@@ -2585,10 +2671,16 @@ compare_constant_1 (exp, p)
p += sizeof type;
+ if (bcmp ((char *) &have_purpose, p, sizeof have_purpose))
+ return 0;
+
+ p += sizeof have_purpose;
+
/* For arrays, insist that the size in bytes match. */
if (TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE)
{
- int size = int_size_in_bytes (TREE_TYPE (exp));
+ HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (exp));
+
if (bcmp ((char *) &size, p, sizeof size))
return 0;
@@ -2611,6 +2703,30 @@ compare_constant_1 (exp, p)
p += sizeof zero;
}
+
+ if (TREE_PURPOSE (link)
+ && TREE_CODE (TREE_PURPOSE (link)) == FIELD_DECL)
+ {
+ if (bcmp ((char *) &TREE_PURPOSE (link), p,
+ sizeof TREE_PURPOSE (link)))
+ return 0;
+
+ p += sizeof TREE_PURPOSE (link);
+ }
+ else if (TREE_PURPOSE (link))
+ {
+ if ((p = compare_constant_1 (TREE_PURPOSE (link), p)) == 0)
+ return 0;
+ }
+ else if (have_purpose)
+ {
+ int zero = 0;
+
+ if (bcmp ((char *) &zero, p, sizeof zero))
+ return 0;
+
+ p += sizeof zero;
+ }
}
return p;
@@ -2646,6 +2762,9 @@ compare_constant_1 (exp, p)
case CONVERT_EXPR:
case NON_LVALUE_EXPR:
return compare_constant_1 (TREE_OPERAND (exp, 0), p);
+
+ default:
+ abort ();
}
/* Compare constant contents. */
@@ -2708,6 +2827,7 @@ record_constant_1 (exp)
if (flag_writable_strings)
return;
+ obstack_1grow (&permanent_obstack, TYPE_MODE (TREE_TYPE (exp)));
strp = TREE_STRING_POINTER (exp);
len = TREE_STRING_LENGTH (exp);
obstack_grow (&permanent_obstack, (char *) &TREE_STRING_LENGTH (exp),
@@ -2735,21 +2855,30 @@ record_constant_1 (exp)
register tree link;
int length = list_length (CONSTRUCTOR_ELTS (exp));
tree type;
+ int have_purpose = 0;
+
+ for (link = CONSTRUCTOR_ELTS (exp); link; link = TREE_CHAIN (link))
+ if (TREE_PURPOSE (link))
+ have_purpose = 1;
obstack_grow (&permanent_obstack, (char *) &length, sizeof length);
/* For record constructors, insist that the types match.
- For arrays, just verify both constructors are for arrays. */
+ For arrays, just verify both constructors are for arrays.
+ Then insist that either both or none have any TREE_PURPOSE
+ values. */
if (TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE)
type = TREE_TYPE (exp);
else
type = 0;
obstack_grow (&permanent_obstack, (char *) &type, sizeof type);
+ obstack_grow (&permanent_obstack, (char *) &have_purpose,
+ sizeof have_purpose);
/* For arrays, insist that the size in bytes match. */
if (TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE)
{
- int size = int_size_in_bytes (TREE_TYPE (exp));
+ HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (exp));
obstack_grow (&permanent_obstack, (char *) &size, sizeof size);
}
@@ -2764,6 +2893,21 @@ record_constant_1 (exp)
obstack_grow (&permanent_obstack,
(char *) &zero, sizeof zero);
}
+
+ if (TREE_PURPOSE (link)
+ && TREE_CODE (TREE_PURPOSE (link)) == FIELD_DECL)
+ obstack_grow (&permanent_obstack,
+ (char *) &TREE_PURPOSE (link),
+ sizeof TREE_PURPOSE (link));
+ else if (TREE_PURPOSE (link))
+ record_constant_1 (TREE_PURPOSE (link));
+ else if (have_purpose)
+ {
+ int zero = 0;
+
+ obstack_grow (&permanent_obstack,
+ (char *) &zero, sizeof zero);
+ }
}
}
return;
@@ -3199,14 +3343,20 @@ init_const_rtx_hash_table ()
/* Save and restore status for a nested function. */
void
-save_varasm_status (p)
+save_varasm_status (p, context)
struct function *p;
+ tree context;
{
p->const_rtx_hash_table = const_rtx_hash_table;
p->const_rtx_sym_hash_table = const_rtx_sym_hash_table;
p->first_pool = first_pool;
p->last_pool = last_pool;
p->pool_offset = pool_offset;
+ p->const_double_chain = const_double_chain;
+
+ /* If we are pushing to toplevel, we can't reuse const_double_chain. */
+ if (context == NULL_TREE)
+ const_double_chain = 0;
}
void
@@ -3218,6 +3368,7 @@ restore_varasm_status (p)
first_pool = p->first_pool;
last_pool = p->last_pool;
pool_offset = p->pool_offset;
+ const_double_chain = p->const_double_chain;
}
enum kind { RTX_DOUBLE, RTX_INT };
@@ -3320,6 +3471,9 @@ decode_rtx_const (mode, x, value)
for the sake of addresses of library routines.
For a LABEL_REF, compare labels. */
value->un.addr.base = XEXP (value->un.addr.base, 0);
+
+ default:
+ break;
}
}
@@ -3750,6 +3904,13 @@ mark_constants (x)
find_pool_constant (x)->mark = 1;
return;
}
+ /* Never search inside a CONST_DOUBLE, because CONST_DOUBLE_MEM may be
+ a MEM, but does not constitute a use of that MEM. This is particularly
+ important inside a nested function, because CONST_DOUBLE_MEM may be
+ a reference to a MEM in the parent's constant pool. See the comment
+ in force_const_mem. */
+ else if (GET_CODE (x) == CONST_DOUBLE)
+ return;
/* Insns may appear inside a SEQUENCE. Only check the patterns of
insns, not any notes that may be attached. We don't want to mark
@@ -3846,7 +4007,7 @@ output_addressed_constants (exp)
}
break;
- case ERROR_MARK:
+ default:
break;
}
return reloc;
@@ -3982,6 +4143,9 @@ output_constant (exp, size)
else
error ("unknown set constructor type");
return;
+
+ default:
+ break; /* ??? */
}
if (size > 0)
@@ -4349,7 +4513,7 @@ output_constructor (exp, size)
}
/* Now get the bits from the appropriate constant word. */
- if (shift < HOST_BITS_PER_INT)
+ if (shift < HOST_BITS_PER_WIDE_INT)
value = TREE_INT_CST_LOW (val);
else if (shift < 2 * HOST_BITS_PER_WIDE_INT)
{
diff --git a/gcc/vmsconfig.com b/gcc/vmsconfig.com
index 088a4956887..f4ebf0e2d1f 100644
--- a/gcc/vmsconfig.com
+++ b/gcc/vmsconfig.com
@@ -89,28 +89,17 @@ $open ifile$ t.tmp
$read ifile$ line
$close ifile$
$delete t.tmp;
-$ijk=f$locate("""",line)+1
-$line=f$extract(ijk,f$length(line)-ijk,line)
-$ijk=f$locate("""",line)
-$line=f$extract(0,ijk,line)
-$ijk=f$locate("\n",line)
-$line=f$extract(0,ijk,line)
+$line=f$element(1,"""",line) !extract the portion between 1st & 2nd quotes
+$! Format of 'line' is "name-nn.nn.nn[.nn] [date text]" (without the quotes).
+$! We want "name-nn.nn.nn[.nn][-date]"; "-date" suffix is optional.
+$id = f$element(1,"-",line) !strip "name-" prefix
+$if id.eqs."-" then id = line !no prefix found?
+$id = f$element(0," ",id) + "-" + f$element(1," ",id) !first two tokens
+$id = id - "- " !in case 2nd token was empty
+$if f$length(id).gt.15 then id = f$extract(0,15,id) !length limitation
$!
-$i=0
-$loop:
-$elm=f$element(i," ",line)
-$if elm.eqs."" then goto no_ident
-$if (elm.les."9").and.(elm.ges."0") then goto write_ident
-$i=i+1
-$goto loop
-$!
-$no_ident:
-$elm="?.??"
-$!
-$!
-$write_ident:
$open/write ifile$ version.opt
-$write ifile$ "ident="+""""+elm+""""
+$write ifile$ "ident="+""""+id+""""
$close ifile$
$purge version.opt
$!
@@ -173,10 +162,11 @@ PROCEDURE process_makefile( )
! The contents are assumed to be a list of object files, and from this
! list a VMS linker options file is generated.
!
- generate_option_file ("OBJS", "=", "independent.opt");
- generate_option_file ("LIB2FUNCS", "=", "libgcc2.list");
- generate_option_file ("BC_ALL", "=", "bc_all.list");
- generate_option_file ("BI_OBJ", "=", "bi_all.opt");
+ generate_option_file ("OBJS", "=", "independent.opt");
+ generate_option_file ("LIB2FUNCS", "=", "libgcc2.list");
+ generate_option_file ("CXX_LIB2FUNCS", "=", "libgcc2-cxx.list");
+ generate_option_file ("BC_ALL", "=", "bc_all.list");
+ generate_option_file ("BI_OBJ", "=", "bi_all.opt");
!
! Now change OBJS in the Makefile, so each language specific options file
! does not pick up all of the language independent files.
@@ -212,7 +202,7 @@ PROCEDURE process_objc_lib( )
ERASE (makefile_buf); !discard top Makefile
POSITION (END_OF (makefile_buf));
- READ_FILE ("[.objc]Makefile"); !load objc one
+ READ_FILE ("[.objc]Make-lang.in"); !load objc one
MESSAGE ("objclib");
pat_replace (ASCII(9), " "); !change any <tab> to <space>
generate_option_file ("OBJC_O", "=", "objc-objs.opt");
@@ -239,6 +229,9 @@ PROCEDURE configure_makefile( )
COPY_TEXT ("out_object_file=aux-output.o"); SPLIT_LINE; ! aux-output.obj
COPY_TEXT ("md_file=" + arch + ".md"); SPLIT_LINE; ! 'arch'/'arch'.md
COPY_TEXT ("tm_file=tm.h"); SPLIT_LINE; ! 'arch'/tm-vms.h
+ pat_replace ("@" &
+ SPAN("abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ#~0123456789")
+ & "@", ); ! strip `configure' dummy values
ENDPROCEDURE; !configure_makefile
!!
@@ -288,6 +281,12 @@ PROCEDURE additional_compiler( cname, subdir )
pat_replace ("_OTH_SRCS)", "_OTH_SRCS_dummy_)");
! Convert subdirectory references into VMS syntax.
pat_replace ("$(srcdir)/" + subdir + "/", "[." + subdir + "]");
+
+ ! Temporary? hack for cp/Make-lang.in's mishandling of "input.c".
+ IF (subdir = 'cp') THEN
+ pat_replace ("[.cp]input.c", ); ! Discard this text.
+ ENDIF;
+
! Add this name to compilers.list.
POSITION (END_OF (complist_buf));
COPY_TEXT (cname);
diff --git a/gcc/xcoffout.c b/gcc/xcoffout.c
index 60f6b32758b..323eb069f5a 100644
--- a/gcc/xcoffout.c
+++ b/gcc/xcoffout.c
@@ -1,5 +1,5 @@
/* Output xcoff-format symbol table information from GNU compiler.
- Copyright (C) 1992, 1994, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1992, 1994, 1995, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -24,10 +24,8 @@ Boston, MA 02111-1307, USA. */
interface. Many functions are very similar to their counterparts in
sdbout.c. */
-/* Include this first, because it may define MIN and MAX. */
-#include <stdio.h>
-
#include "config.h"
+#include <stdio.h>
#include "tree.h"
#include "rtl.h"
#include "flags.h"
@@ -113,6 +111,9 @@ char *xcoff_lastfile;
#define ASM_OUTPUT_LBE(FILE,LINENUM,BLOCKNUM) \
fprintf (FILE, "\t.eb\t%d\n", ABS_OR_RELATIVE_LINENO (LINENUM))
+
+static void assign_type_number PROTO((tree, char *, int));
+static void xcoffout_block PROTO((tree, int, tree));
/* Support routines for XCOFF debugging info. */