Changes for GCC version 2.6.3 from version 2.6.2: Before applying these diffs, go to the directory gcc-2.6.2. Remove all files that are not part of the distribution with the command make distclean Then use the command patch -p1 feeding it the following diffs as input. Then rename the directory to gcc-2.6.3, re-run the configure script, and rebuild the compiler. Changes in files you can reconstruct with Bison, etags, makeinfo, and TeX have been omitted. Some of these files are updated just by building the compiler. You can update rest of these files by executing this command make TAGS info dvi in the gcc-2.6.3 directory, provided the necessary tools (etags, makeinfo, TeX and texi2dvi) are installed and you have run configure. 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/ChangeLog gcc-2.6.3/ChangeLog *** gcc-2.6.2/ChangeLog Sat Nov 12 06:36:04 1994 --- gcc-2.6.3/ChangeLog Wed Nov 30 19:14:11 1994 *************** *** 1,2 **** --- 1,185 ---- + Wed Nov 30 19:13:50 1994 Richard Kenner + + * Version 2.6.3 released. + + Wed Nov 30 19:02:49 1994 Jim Wilson + + * 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:40:32 1994 Jason Merrill (jason@cygnus.com) + + * alpha.h (ENCODE_SECTION_INFO): Don't do anything in g++. + + 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. + + 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. + + 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. + + 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. + + 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 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. + + 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 17:59:07 1994 David Edelsohn + + * aix41.h (LINK_SPEC): New overriding defintion. + + 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 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 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 17:26:02 1994 Mark P. Gooderum (mark@good.com) + + * stddef.h: Include 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'. + + 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. + + Tue Nov 15 19:29:04 1994 Per Bothner + + * tree.c (staticp): A non-nested function is always static. + + Tue Nov 15 19:07:00 1994 Warner Losh (imp@village.org) + + * i386/freebsd.h (NO_IMPLICIT_EXTERN_C): Define. + + 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. + + Mon Nov 14 19:16:00 1994 Dennis Glatting + + * 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 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/INSTALL gcc-2.6.3/INSTALL *** gcc-2.6.2/INSTALL Fri Nov 11 19:03:49 1994 --- gcc-2.6.3/INSTALL Thu Dec 1 15:24:17 1994 *************** *** 454,459 **** 1750a, a29k, alpha, arm, cN, clipper, dsp16xx, elxsi, h8300, hppa1.0, hppa1.1, i370, i386, i486, i860, i960, m68000, m68k, m88k, ! mips, ns32k, pyramid, romp, rs6000, sh, sparc, sparclite, sparc64, ! vax, we32k. Here are the recognized company names. As you can see, customary --- 454,459 ---- 1750a, a29k, alpha, arm, cN, clipper, dsp16xx, elxsi, h8300, hppa1.0, hppa1.1, i370, i386, i486, i860, i960, m68000, m68k, m88k, ! mips, ns32k, powerpc, pyramid, romp, rs6000, sh, sparc, sparclite, ! sparc64, vax, we32k. Here are the recognized company names. As you can see, customary *************** *** 1074,1090 **** `rs6000-*-aix' ! If you are running AIX version 3.2.5 and have XLC version 1.3.0.0, ! you must obtain XLC 1.3.0.1 by requesting PTF 421749 from IBM. ! Likewise, XLC-1.3.0.19 cannot correctly compile GNU CC; you must ! obtain XLC-1.3.0.24 by requesting PTF 432238 from IBM. If you are ! using an older version of AIX you may have an old version of the ! IBM assembler, which cannot correctly handle debugging directives. ! See the file `README.RS6000' for more details on both of these ! problems. ! ! The PowerPC and POWER2 architectures are now supported, but have ! not been very extensively tested due to lack of appropriate ! systems. Only AIX is supported on the PowerPC. GNU CC does not ! yet support the 64-bit PowerPC instructions. Objective C does not work on this architecture. --- 1074,1093 ---- `rs6000-*-aix' ! `powerpc-*-aix' ! Various early versions of each release of the IBM XLC compiler ! will not bootstrap GNU CC. Symptoms include differences between ! the stage2 and stage3 object files, and errors when compiling ! `libgcc.a' or `enquire'. Known problematic releases include: ! xlc-1.2.1.8, 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 the IBM assembler which does not ! accept debugging directives: assembler updates are available as ! PTFs. See the file `README.RS6000' for more details on both of ! these problems. ! ! Only AIX is supported on the PowerPC. GNU CC does not yet support ! the 64-bit PowerPC instructions. Objective C does not work on this architecture. 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/Makefile.in gcc-2.6.3/Makefile.in *** gcc-2.6.2/Makefile.in Thu Nov 3 18:54:52 1994 --- gcc-2.6.3/Makefile.in Mon Nov 28 18:54:06 1994 *************** *** 425,429 **** "CC=set-by-configure" \ "CFLAGS=$(CFLAGS)" \ ! "GCC_FOR_TARGET=$(CC_FOR_TARGET)" \ "LDFLAGS=$(LDFLAGS)" \ "LEX=$(LEX)" \ --- 425,429 ---- "CC=set-by-configure" \ "CFLAGS=$(CFLAGS)" \ ! "GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \ "LDFLAGS=$(LDFLAGS)" \ "LEX=$(LEX)" \ *************** *** 998,1003 **** sed -e "/^ifc$$/,/^end ifc$$/d" \ -e "/^ifobjc$$/d" -e "/^end ifobjc$$/d" \ ! $(srcdir)/c-parse.in >tmp-objc-parse.y ! $(srcdir)/move-if-change tmp-objc-parse.y $(srcdir)/objc-parse.y objc-act.o : objc-act.c $(CONFIG_H) $(TREE_H) $(RTL_H) c-tree.h c-lex.h \ --- 998,1003 ---- sed -e "/^ifc$$/,/^end ifc$$/d" \ -e "/^ifobjc$$/d" -e "/^end ifobjc$$/d" \ ! $(srcdir)/c-parse.in >tmp-objc-prs.y ! $(srcdir)/move-if-change tmp-objc-prs.y $(srcdir)/objc-parse.y objc-act.o : objc-act.c $(CONFIG_H) $(TREE_H) $(RTL_H) c-tree.h c-lex.h \ *************** *** 1775,1779 **** -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-objc-parse.y tmp-gperf.h # Delete the stamp files. -rm -f stamp-* tmp-* --- 1775,1779 ---- -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-objc-prs.y tmp-gperf.h # Delete the stamp files. -rm -f stamp-* tmp-* 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/NEWS gcc-2.6.3/NEWS *** gcc-2.6.2/NEWS Sat Nov 12 06:37:00 1994 --- gcc-2.6.3/NEWS Wed Nov 23 17:52:59 1994 *************** *** 1,2 **** --- 1,6 ---- + Noteworthy changes in GCC version 2.6.3: + + A few more bugs have been fixed. + Noteworthy changes in GCC version 2.6.2: *************** *** 3,7 **** A few bugs have been fixed. ! Names of attributes can now be preceeded and followed by double underscores. Noteworthy changes in GCC version 2.6.1: --- 7,11 ---- A few bugs have been fixed. ! Names of attributes can now be preceded and followed by double underscores. Noteworthy changes in GCC version 2.6.1: 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/README gcc-2.6.3/README *** gcc-2.6.2/README Sat Nov 12 06:37:18 1994 --- gcc-2.6.3/README Mon Nov 14 18:15:48 1994 *************** *** 1,3 **** ! This directory contains the version 2.6.2 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. --- 1,3 ---- ! This directory contains the version 2.6.3 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. 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/README.DWARF gcc-2.6.3/README.DWARF *** gcc-2.6.2/README.DWARF Mon Jul 18 00:35:10 1994 --- gcc-2.6.3/README.DWARF Mon Nov 21 09:12:58 1994 *************** *** 1,5 **** Notes on the GNU Implementation of DWARF Debugging Information -------------------------------------------------------------- ! Last Updated: Sun Jul 17 08:17:42 PDT 1994 by rfg@netcom.com ------------------------------------------------------------ --- 1,5 ---- Notes on the GNU Implementation of DWARF Debugging Information -------------------------------------------------------------- ! Last Updated: Sun Jul 17 08:17:42 PDT 1994 by rfg@segfault.us.com ------------------------------------------------------------ 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/README.RS6000 gcc-2.6.3/README.RS6000 *** gcc-2.6.2/README.RS6000 Fri Nov 11 18:24:47 1994 --- gcc-2.6.3/README.RS6000 Tue Nov 22 16:07:42 1994 *************** *** 62,65 **** --- 62,69 ---- release of XLC-1.3. + There also have been reports of problems bootstrapping GCC with some older + 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 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/c-common.c gcc-2.6.3/c-common.c *** gcc-2.6.2/c-common.c Fri Nov 11 16:42:48 1994 --- gcc-2.6.3/c-common.c Thu Nov 17 11:07:14 1994 *************** *** 533,537 **** { "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, NULL, "-wp0" }, /* Two GNU extensions. */ { "Z", 0, T_ST, NULL, NULL, NULL, NULL, "-wp0" }, --- 533,537 ---- { "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" }, 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/calls.c gcc-2.6.3/calls.c *** gcc-2.6.2/calls.c Sat Nov 5 14:21:20 1994 --- gcc-2.6.3/calls.c Mon Nov 14 19:18:34 1994 *************** *** 1625,1632 **** && rtx_cost (args[i].value, SET) > 2 #ifdef SMALL_REGISTER_CLASSES ! && (reg_parm_seen || preserve_subexpressions_p ())) #else ! && preserve_subexpressions_p ()) #endif args[i].value = copy_to_mode_reg (args[i].mode, args[i].value); } --- 1625,1633 ---- && rtx_cost (args[i].value, SET) > 2 #ifdef SMALL_REGISTER_CLASSES ! && (reg_parm_seen || preserve_subexpressions_p ()) #else ! && preserve_subexpressions_p () #endif + ) args[i].value = copy_to_mode_reg (args[i].mode, args[i].value); } *************** *** 1909,1912 **** --- 1910,1921 ---- valreg = temp; + } + else if (is_const) + { + /* Otherwise, just write out the sequence without a note. */ + rtx insns = get_insns (); + + end_sequence (); + emit_insns (insns); } 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/cccp.c gcc-2.6.3/cccp.c *** gcc-2.6.2/cccp.c Tue Nov 8 07:13:32 1994 --- gcc-2.6.3/cccp.c Fri Nov 18 18:54:36 1994 *************** *** 5430,5436 **** switch (*bp) { ! case '\t': case ' ': /* Skip spaces and tabs. */ ! while (++bp < limit && (*bp == ' ' || *bp == '\t')) continue; break; --- 5430,5436 ---- switch (*bp) { ! case '\t': case ' ': case '\r': /* Skip spaces and tabs. */ ! while (++bp < limit && (*bp == ' ' || *bp == '\t' || *bp == '\r')) continue; break; 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/combine.c gcc-2.6.3/combine.c *** gcc-2.6.2/combine.c Mon Nov 7 19:30:35 1994 --- gcc-2.6.3/combine.c Wed Nov 30 19:13:30 1994 *************** *** 9666,9669 **** --- 9666,9672 ---- rtx dest, setter; { + if (GET_CODE (dest) == SUBREG) + dest = SUBREG_REG (dest); + if (GET_CODE (dest) == REG) { 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/config/alpha/alpha.c gcc-2.6.3/config/alpha/alpha.c *** gcc-2.6.2/config/alpha/alpha.c Wed Sep 21 15:55:24 1994 --- gcc-2.6.3/config/alpha/alpha.c Thu Nov 17 14:45:49 1994 *************** *** 281,284 **** --- 281,308 ---- } + /* Return 1 if OP is something that can be reloaded into a register; + if it is a MEM, it need not be valid. */ + + int + some_operand (op, mode) + register rtx op; + enum machine_mode mode; + { + if (mode != VOIDmode && GET_MODE (op) != VOIDmode && mode != GET_MODE (op)) + return 0; + + switch (GET_CODE (op)) + { + case REG: case MEM: case CONST_DOUBLE: + case CONST_INT: case LABEL_REF: case SYMBOL_REF: case CONST: + return 1; + + case SUBREG: + return some_operand (SUBREG_REG (op), VOIDmode); + } + + return 0; + } + /* Return 1 if OP is a valid operand for the source of a move insn. */ 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/config/alpha/alpha.h gcc-2.6.3/config/alpha/alpha.h *** gcc-2.6.2/config/alpha/alpha.h Wed Oct 26 18:25:58 1994 --- gcc-2.6.3/config/alpha/alpha.h Wed Nov 30 18:40:14 1994 *************** *** 1524,1530 **** special. We use this to see indicate we can branch to this function without setting PV or restoring GP. */ #define ENCODE_SECTION_INFO(DECL) \ ! if (TREE_CODE (DECL) == FUNCTION_DECL && ! TREE_PUBLIC (DECL)) \ SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1; --- 1524,1532 ---- special. We use this to see indicate we can branch to this function without setting PV or restoring GP. */ + /* For 2.6, don't do this if we're compiling C++. */ #define ENCODE_SECTION_INFO(DECL) \ ! if (TREE_CODE (DECL) == FUNCTION_DECL && ! TREE_PUBLIC (DECL) \ ! && strcmp (lang_identify (), "cplusplus") != 0) \ SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1; *************** *** 1845,1848 **** --- 1847,1852 ---- {"input_operand", {SUBREG, REG, MEM, CONST_INT, CONST_DOUBLE, \ SYMBOL_REF, CONST, LABEL_REF}}, \ + {"some_operand", {SUBREG, REG, MEM, CONST_INT, CONST_DOUBLE, \ + SYMBOL_REF, CONST, LABEL_REF}}, \ {"aligned_memory_operand", {MEM}}, \ {"unaligned_memory_operand", {MEM}}, \ 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/config/alpha/alpha.md gcc-2.6.3/config/alpha/alpha.md *** gcc-2.6.2/config/alpha/alpha.md Fri Oct 28 17:10:07 1994 --- gcc-2.6.3/config/alpha/alpha.md Thu Nov 17 14:45:56 1994 *************** *** 296,300 **** (define_insn "" [(set (match_operand:SI 0 "register_operand" "=&r") ! (plus:SI (plus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "rJ") (match_operand:SI 2 "const48_operand" "I")) (match_operand:SI 3 "register_operand" "r")) --- 296,300 ---- (define_insn "" [(set (match_operand:SI 0 "register_operand" "=&r") ! (plus:SI (plus:SI (mult:SI (match_operand:SI 1 "some_operand" "rJ") (match_operand:SI 2 "const48_operand" "I")) (match_operand:SI 3 "register_operand" "r")) *************** *** 320,324 **** (sign_extend:DI (plus:SI (plus:SI ! (mult:SI (match_operand:SI 1 "reg_or_0_operand" "rJ") (match_operand:SI 2 "const48_operand" "I")) (match_operand:SI 3 "register_operand" "r")) --- 320,324 ---- (sign_extend:DI (plus:SI (plus:SI ! (mult:SI (match_operand:SI 1 "some_operand" "rJ") (match_operand:SI 2 "const48_operand" "I")) (match_operand:SI 3 "register_operand" "r")) *************** *** 346,350 **** (define_insn "" [(set (match_operand:DI 0 "register_operand" "=&r") ! (plus:DI (plus:DI (mult:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") (match_operand:DI 2 "const48_operand" "I")) (match_operand:DI 3 "register_operand" "r")) --- 346,350 ---- (define_insn "" [(set (match_operand:DI 0 "register_operand" "=&r") ! (plus:DI (plus:DI (mult:DI (match_operand:DI 1 "some_operand" "rJ") (match_operand:DI 2 "const48_operand" "I")) (match_operand:DI 3 "register_operand" "r")) 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/config/dsp16xx/dsp16xx.c gcc-2.6.3/config/dsp16xx/dsp16xx.c *** gcc-2.6.2/config/dsp16xx/dsp16xx.c Fri Sep 9 13:27:39 1994 --- gcc-2.6.3/config/dsp16xx/dsp16xx.c Thu Nov 17 11:12:26 1994 *************** *** 1051,1055 **** case LSHIFTRT: case ASHIFT: - case LSHIFT: case AND: case IOR: --- 1051,1054 ---- 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/config/dsp16xx/dsp16xx.h gcc-2.6.3/config/dsp16xx/dsp16xx.h *** gcc-2.6.2/config/dsp16xx/dsp16xx.h Fri Sep 9 13:27:47 1994 --- gcc-2.6.3/config/dsp16xx/dsp16xx.h Thu Nov 17 11:12:28 1994 *************** *** 1529,1533 **** case ASHIFT: \ case ASHIFTRT: \ - case LSHIFT: \ case LSHIFTRT: \ if (GET_CODE (XEXP (X,1)) == CONST_INT) \ --- 1529,1532 ---- 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/config/i386/freebsd.h gcc-2.6.3/config/i386/freebsd.h *** gcc-2.6.2/config/i386/freebsd.h Tue Oct 18 20:59:52 1994 --- gcc-2.6.3/config/i386/freebsd.h Tue Nov 15 19:07:01 1994 *************** *** 26,29 **** --- 26,32 ---- #define YES_UNDERSCORES + /* Don't assume anything about the header files. */ + #define NO_IMPLICIT_EXTERN_C + #include "i386/gstabs.h" *************** *** 34,43 **** #define CPP_PREDEFINES "-Dunix -Di386 -D__FreeBSD__ -D__386BSD__ -Asystem(unix) -Asystem(FreeBSD) -Acpu(i386) -Amachine(i386)" - #define INCLUDE_DEFAULTS { \ - { "/usr/include", 0 }, \ - { "/usr/include/g++", 1 }, \ - { 0, 0} \ - } - /* Like the default, except no -lg. */ #define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}" --- 37,40 ---- *************** *** 59,79 **** #define HAVE_ATEXIT - /* Redefine this to use %eax instead of %edx. */ - #undef FUNCTION_PROFILER - #define FUNCTION_PROFILER(FILE, LABELNO) \ - { \ - if (flag_pic) \ - { \ - fprintf (FILE, "\tleal %sP%d@GOTOFF(%%ebx),%%eax\n", \ - LPREFIX, (LABELNO)); \ - fprintf (FILE, "\tcall *mcount@GOT(%%ebx)\n"); \ - } \ - else \ - { \ - fprintf (FILE, "\tmovl $%sP%d,%%eax\n", LPREFIX, (LABELNO)); \ - fprintf (FILE, "\tcall mcount\n"); \ - } \ - } - /* There are conflicting reports about whether this system uses a different assembler syntax. wilson@cygnus.com says # is right. */ --- 56,59 ---- *************** *** 106,110 **** --- 86,109 ---- we want to retain compatibility with older gcc versions. */ #define DEFAULT_PCC_STRUCT_RETURN 0 + + /* Profiling routines, partially copied from i386/osfrose.h. */ + /* Redefine this to use %eax instead of %edx. */ + #undef FUNCTION_PROFILER + #define FUNCTION_PROFILER(FILE, LABELNO) \ + { \ + if (flag_pic) \ + { \ + fprintf (FILE, "\tleal %sP%d@GOTOFF(%%ebx),%%eax\n", \ + LPREFIX, (LABELNO)); \ + fprintf (FILE, "\tcall *mcount@GOT(%%ebx)\n"); \ + } \ + else \ + { \ + fprintf (FILE, "\tmovl $%sP%d,%%eax\n", LPREFIX, (LABELNO)); \ + fprintf (FILE, "\tcall mcount\n"); \ + } \ + } + /* * Some imports from svr4.h in support of shared libraries. *************** *** 230,233 **** --- 229,238 ---- #ifdef FREEBSD_NATIVE + #define INCLUDE_DEFAULTS { \ + { "/usr/include", 0 }, \ + { "/usr/include/g++", 1 }, \ + { 0, 0} \ + } + #undef MD_EXEC_PREFIX #define MD_EXEC_PREFIX "/usr/libexec/" *************** *** 236,239 **** --- 241,245 ---- #define STANDARD_STARTFILE_PREFIX "/usr/lib" + #if 0 /* This is very wrong!!! */ #define DEFAULT_TARGET_MACHINE "i386-unknown-freebsd_1.0" #define GPLUSPLUS_INCLUDE_DIR "/usr/local/lib/gcc-lib/i386-unknown-freebsd_1.0/2.5.8/include" *************** *** 240,243 **** --- 246,250 ---- #define TOOL_INCLUDE_DIR "/usr/local/i386-unknown-freebsd_1.0/include" #define GCC_INCLUDE_DIR "/usr/local/lib/gcc-lib/i386-unknown-freebsd_1.0/2.5.8/include" + #endif #endif /* FREEBSD_NATIVE */ 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/config/i386/x-winnt gcc-2.6.3/config/i386/x-winnt *** gcc-2.6.2/config/i386/x-winnt Thu Oct 27 13:09:17 1994 --- gcc-2.6.3/config/i386/x-winnt Mon Nov 14 19:18:50 1994 *************** *** 6,10 **** -stack:1000000,1000000 ! EXTRA_PROGRAMS="ld" ld.o: $(srcdir)/config/winnt/ld.c --- 6,10 ---- -stack:1000000,1000000 ! EXTRA_PROGRAMS=ld-winnt ld.o: $(srcdir)/config/winnt/ld.c 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/config/m68k/m68k.md gcc-2.6.3/config/m68k/m68k.md *** gcc-2.6.2/config/m68k/m68k.md Thu Sep 8 02:35:41 1994 --- gcc-2.6.3/config/m68k/m68k.md Mon Nov 21 18:42:46 1994 *************** *** 925,929 **** if (! reg_mentioned_p (stack_pointer_rtx, operands[1])) { ! if (refers_to_regno_p (0, 1, operands[1], NULL_RTX)) return \"move%.l %/d0,%-\;move%.b %1,%/d0\;move%.l %/d0,%0\;move%.l %+,%/d0\"; else --- 925,929 ---- if (! reg_mentioned_p (stack_pointer_rtx, operands[1])) { ! if (! refers_to_regno_p (0, 1, operands[1], NULL_RTX)) return \"move%.l %/d0,%-\;move%.b %1,%/d0\;move%.l %/d0,%0\;move%.l %+,%/d0\"; else *************** *** 975,979 **** if (! reg_mentioned_p (stack_pointer_rtx, operands[0])) { ! if (refers_to_regno_p (0, 1, operands[0], NULL_RTX)) return \"move%.l %/d0,%-\;move%.l %1,%/d0\;move%.b %/d0,%0\;move%.l %+,%/d0\"; else --- 975,979 ---- if (! reg_mentioned_p (stack_pointer_rtx, operands[0])) { ! if (! refers_to_regno_p (0, 1, operands[0], NULL_RTX)) return \"move%.l %/d0,%-\;move%.l %1,%/d0\;move%.b %/d0,%0\;move%.l %+,%/d0\"; else 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/config/mips/mips.c gcc-2.6.3/config/mips/mips.c *** gcc-2.6.2/config/mips/mips.c Thu Nov 3 17:21:55 1994 --- gcc-2.6.3/config/mips/mips.c Wed Nov 23 17:51:05 1994 *************** *** 3784,3788 **** /* ??? Don't include alloca, since gcc will always expand it inline. If we don't do this, libg++ fails to build. */ ! && strcmp (name, "alloca")) { p = (struct extern_list *)permalloc ((long) sizeof (struct extern_list)); --- 3784,3791 ---- /* ??? Don't include alloca, since gcc will always expand it inline. If we don't do this, libg++ fails to build. */ ! && strcmp (name, "alloca") ! /* ??? Don't include __builtin_next_arg, because then gcc will not ! bootstrap under Irix 5.1. */ ! && strcmp (name, "__builtin_next_arg")) { p = (struct extern_list *)permalloc ((long) sizeof (struct extern_list)); 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/config/ns32k/netbsd.h gcc-2.6.3/config/ns32k/netbsd.h *** gcc-2.6.2/config/ns32k/netbsd.h Mon Aug 8 19:57:01 1994 --- gcc-2.6.3/config/ns32k/netbsd.h Wed Nov 23 17:26:18 1994 *************** *** 64,71 **** #define MOVD_FLOAT_OK - /* Every address needs to use a base reg. */ - - #define BASE_REG_NEEDED - /* Names to predefine in the preprocessor for this target machine. */ --- 64,67 ---- 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/config/ns32k/ns32k.c gcc-2.6.3/config/ns32k/ns32k.c *** gcc-2.6.2/config/ns32k/ns32k.c Mon Aug 8 19:54:23 1994 --- gcc-2.6.3/config/ns32k/ns32k.c Wed Nov 23 17:26:20 1994 *************** *** 452,470 **** { rtx tmp = XEXP (x, 0); ! #if ! (defined (PC_RELATIVE) || defined (NO_ABSOLUTE_PREFIX_IF_SYMBOLIC)) ! if (GET_CODE (tmp) != CONST_INT) ! { ! char *out = XSTR (tmp, 0); ! if (out[0] == '*') ! { ! PUT_ABSOLUTE_PREFIX (file); ! fprintf (file, "%s", &out[1]); ! } ! else ! ASM_OUTPUT_LABELREF (file, out); ! } ! else ! #endif ! output_address (XEXP (x, 0)); } else if (GET_CODE (x) == CONST_DOUBLE && GET_MODE (x) != VOIDmode) --- 452,456 ---- { rtx tmp = XEXP (x, 0); ! output_address (XEXP (x, 0)); } else if (GET_CODE (x) == CONST_DOUBLE && GET_MODE (x) != VOIDmode) *************** *** 616,620 **** tmp1 = XEXP (tmp,0); if (GET_CODE (tmp1) != PLUS) ! abort (); sym = XEXP (tmp1,0); --- 602,606 ---- tmp1 = XEXP (tmp,0); if (GET_CODE (tmp1) != PLUS) ! abort (); sym = XEXP (tmp1,0); *************** *** 671,675 **** if (base #ifndef INDEX_RATHER_THAN_BASE ! && flag_pic && GET_CODE (base) != SYMBOL_REF && GET_CODE (offset) != CONST_INT --- 657,661 ---- if (base #ifndef INDEX_RATHER_THAN_BASE ! && (flag_pic || TARGET_HIMEM) && GET_CODE (base) != SYMBOL_REF && GET_CODE (offset) != CONST_INT *************** *** 685,688 **** --- 671,675 ---- /* now, offset, base and indexexp are set */ + #ifndef BASE_REG_NEEDED if (! base) { *************** *** 689,697 **** #if defined (PC_RELATIVE) || defined (NO_ABSOLUTE_PREFIX_IF_SYMBOLIC) if (GET_CODE (offset) == CONST_INT) - /* if (! (GET_CODE (offset) == LABEL_REF - || GET_CODE (offset) == SYMBOL_REF)) */ #endif PUT_ABSOLUTE_PREFIX (file); } output_addr_const (file, offset); --- 676,683 ---- #if defined (PC_RELATIVE) || defined (NO_ABSOLUTE_PREFIX_IF_SYMBOLIC) if (GET_CODE (offset) == CONST_INT) #endif PUT_ABSOLUTE_PREFIX (file); } + #endif output_addr_const (file, offset); *************** *** 712,717 **** break; case SYMBOL_REF: ! if (! flag_pic) ! abort (); fprintf (file, "("); --- 698,703 ---- break; case SYMBOL_REF: ! if (! flag_pic) ! abort (); fprintf (file, "("); *************** *** 767,771 **** if (base) fprintf (file, "(%s)", reg_names[REGNO (base)]); - #ifdef BASE_REG_NEEDED else if (TARGET_SB) fprintf (file, "(sb)"); --- 753,756 ---- *************** *** 772,779 **** else abort (); - #endif fprintf (file, ")"); break; - default: abort (); --- 757,762 ---- *************** *** 780,809 **** } #ifdef PC_RELATIVE ! else if (GET_CODE (offset) == LABEL_REF ! || GET_CODE (offset) == SYMBOL_REF ! || GET_CODE (offset) == CONST ! || GET_CODE (offset) == PLUS) fprintf (file, "(pc)"); - #endif #ifdef BASE_REG_NEEDED ! else ! { ! /* Abs. addresses don't need a base (I think). */ ! if (GET_CODE (offset) != CONST_INT ! #ifndef PC_RELATIVE ! && GET_CODE (offset) != LABEL_REF ! && GET_CODE (offset) != SYMBOL_REF ! && GET_CODE (offset) != CONST ! && GET_CODE (offset) != PLUS ! #endif ! ) ! { ! if (TARGET_SB) ! fprintf (file, "(sb)"); ! else ! abort (); ! } ! } #endif /* now print index if we have one */ if (indexexp) --- 763,776 ---- } #ifdef PC_RELATIVE ! else if (GET_CODE (offset) != CONST_INT) fprintf (file, "(pc)"); #ifdef BASE_REG_NEEDED ! else if (TARGET_SB) ! fprintf (file, "(sb)"); ! else ! abort (); #endif + #endif /* PC_RELATIVE */ + /* now print index if we have one */ if (indexexp) 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/config/ns32k/ns32k.h gcc-2.6.3/config/ns32k/ns32k.h *** gcc-2.6.2/config/ns32k/ns32k.h Tue Sep 27 19:27:14 1994 --- gcc-2.6.3/config/ns32k/ns32k.h Wed Nov 23 17:26:22 1994 *************** *** 82,85 **** --- 82,86 ---- /* Ok to use the static base register (and presume it's 0) */ #define TARGET_SB ((target_flags & 32) == 0) + #define TARGET_HIMEM (target_flags & 128) /* Compile using bitfield insns. */ *************** *** 107,110 **** --- 108,113 ---- { "bitfield", -64}, \ { "nobitfield", 64}, \ + { "himem", 128}, \ + { "nohimem", -128}, \ { "", TARGET_DEFAULT}} /* TARGET_DEFAULT is defined in encore.h, pc532.h, etc. */ *************** *** 115,119 **** #define OVERRIDE_OPTIONS \ { \ ! if (flag_pic) target_flags |= 32; \ } --- 118,122 ---- #define OVERRIDE_OPTIONS \ { \ ! if (flag_pic || TARGET_HIMEM) target_flags |= 32; \ } *************** *** 911,915 **** && GET_CODE (XEXP (X, 0)) == REG \ && REG_OK_FOR_BASE_P (XEXP (X, 0)) \ ! && (flag_pic ? \ CONSTANT_ADDRESS_NO_LABEL_P (XEXP (X, 1)) \ : \ --- 914,918 ---- && GET_CODE (XEXP (X, 0)) == REG \ && REG_OK_FOR_BASE_P (XEXP (X, 0)) \ ! && ((flag_pic || TARGET_HIMEM) ? \ CONSTANT_ADDRESS_NO_LABEL_P (XEXP (X, 1)) \ : \ *************** *** 1143,1147 **** case CONST_INT: \ if (INTVAL (RTX) <= 7 && INTVAL (RTX) >= -8) return 0; \ ! if (INTVAL (RTX) < 0x4000 && INTVAL (RTX) >= -0x4000) \ return 1; \ case CONST: \ --- 1146,1150 ---- case CONST_INT: \ if (INTVAL (RTX) <= 7 && INTVAL (RTX) >= -8) return 0; \ ! if (INTVAL (RTX) < 0x2000 && INTVAL (RTX) >= -0x2000) \ return 1; \ case CONST: \ 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/config/ns32k/ns32k.md gcc-2.6.3/config/ns32k/ns32k.md *** gcc-2.6.2/config/ns32k/ns32k.md Tue Sep 6 18:24:02 1994 --- gcc-2.6.3/config/ns32k/ns32k.md Wed Nov 23 17:26:24 1994 *************** *** 319,322 **** --- 319,324 ---- "* { + extern int flag_pic; \ + if (FP_REG_P (operands[0])) { *************** *** 345,349 **** if (i <= 7 && i >= -8) return \"movqd %1,%0\"; ! if (i < 0x4000 && i >= -0x4000) #if defined (GNX_V3) || defined (UTEK_ASM) return \"addr %c1,%0\"; --- 347,351 ---- if (i <= 7 && i >= -8) return \"movqd %1,%0\"; ! if (i <= 0x1fffffff && i >= -0x20000000) #if defined (GNX_V3) || defined (UTEK_ASM) return \"addr %c1,%0\"; *************** *** 351,354 **** --- 353,357 ---- return \"addr @%c1,%0\"; #endif + return \"movd %$%1,%0\"; } else *************** *** 355,358 **** --- 358,369 ---- return output_move_dconst(i, \"%$%1,%0\"); } + else if (GET_CODE (operands[1]) == CONST && ! flag_pic) + { + /* Must contain symbols so we don`t know how big it is. In + * that case addr might lead to overflow. For PIC symbolic + * address loads always have to be done with addr. + */ + return \"movd %$%1,%0\"; + } else if (GET_CODE (operands[1]) == REG) { *************** *** 868,873 **** if (i <= 7 && i >= -8) return \"addqd %2,%0\"; ! else if (GET_CODE (operands[0]) == REG ! && i < 0x4000 && i >= -0x4000 && ! TARGET_32532) return \"addr %c2(%0),%0\"; } --- 879,884 ---- if (i <= 7 && i >= -8) return \"addqd %2,%0\"; ! else if (! TARGET_32532 && GET_CODE (operands[0]) == REG ! && i <= 0x1fffffff && i >= -0x20000000) return \"addr %c2(%0),%0\"; } *************** *** 954,959 **** "* { ! if (GET_CODE(operands[0]) == CONST_INT && INTVAL(operands[0]) < 64 ! && INTVAL(operands[0]) > -64 && ! TARGET_32532) return \"adjspb %$%0\"; return \"adjspd %$%0\"; --- 965,970 ---- "* { ! if (! TARGET_32532 && GET_CODE(operands[0]) == CONST_INT ! && INTVAL(operands[0]) < 64 && INTVAL(operands[0]) > -64) return \"adjspb %$%0\"; return \"adjspd %$%0\"; *************** *** 1444,1448 **** if (INTVAL (operands[2]) == 1) return \"addw %0,%0\"; ! else if (INTVAL (operands[2]) == 2 && !TARGET_32532) return \"addw %0,%0\;addw %0,%0\"; } --- 1455,1459 ---- if (INTVAL (operands[2]) == 1) return \"addw %0,%0\"; ! else if (! TARGET_32532 && INTVAL (operands[2]) == 2) return \"addw %0,%0\;addw %0,%0\"; } *************** *** 1463,1467 **** if (INTVAL (operands[2]) == 1) return \"addb %0,%0\"; ! else if (INTVAL (operands[2]) == 2 && !TARGET_32532) return \"addb %0,%0\;addb %0,%0\"; } --- 1474,1478 ---- if (INTVAL (operands[2]) == 1) return \"addb %0,%0\"; ! else if (! TARGET_32532 && INTVAL (operands[2]) == 2) return \"addb %0,%0\;addb %0,%0\"; } 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/config/ns32k/pc532.h gcc-2.6.3/config/ns32k/pc532.h *** gcc-2.6.2/config/ns32k/pc532.h Tue Feb 22 08:10:23 1994 --- gcc-2.6.3/config/ns32k/pc532.h Wed Nov 23 17:26:25 1994 *************** *** 24,30 **** /* Compile for the floating point unit & 32532 by default; ! also presume SB is zero */ ! #define TARGET_DEFAULT 25 /* Write DBX debugging info for gdb to read */ --- 24,30 ---- /* Compile for the floating point unit & 32532 by default; ! also presume SB is zero and no bitfield instructions */ ! #define TARGET_DEFAULT (1 + 24 + 64) /* Write DBX debugging info for gdb to read */ *************** *** 71,76 **** #define MOVD_FLOAT_OK - - /* Every address needs to use a base reg. */ - - #define BASE_REG_NEEDED --- 71,72 ---- 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/config/rs6000/aix41.h gcc-2.6.3/config/rs6000/aix41.h *** gcc-2.6.2/config/rs6000/aix41.h Mon Oct 17 19:18:26 1994 --- gcc-2.6.3/config/rs6000/aix41.h Mon Nov 21 18:00:04 1994 *************** *** 25,26 **** --- 25,30 ---- #undef ASM_SPEC #define ASM_SPEC "-u -mpwr" + + #undef LINK_SPEC + #define LINK_SPEC "-bpT:0x10000000 -bpD:0x20000000 %{!r:-btextro} -bnodelcsect\ + %{static:-bnso -bI:/lib/syscalls.exp} %{g*:-bexport:/usr/lib/libg.exp}" 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/config/rs6000/rs6000.c gcc-2.6.3/config/rs6000/rs6000.c *** gcc-2.6.2/config/rs6000/rs6000.c Thu Nov 3 18:07:40 1994 --- gcc-2.6.3/config/rs6000/rs6000.c Mon Nov 21 17:45:21 1994 *************** *** 534,537 **** --- 534,541 ---- return 1; + /* A SYMBOL_REF referring to the TOC is valid. */ + if (GET_CODE (op) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (op)) + return 1; + /* Otherwise, we will be doing this SET with an add, so anything valid for an add will be valid. */ 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/config/winnt/ld.c gcc-2.6.3/config/winnt/ld.c *** gcc-2.6.2/config/winnt/ld.c Wed Oct 26 18:05:16 1994 --- gcc-2.6.3/config/winnt/ld.c Fri Nov 18 18:31:10 1994 *************** *** 220,224 **** if (nbuff[j] == '/') nbuff[j] = DIR_SEPARATOR; ! sdbuff = malloc (search_dirs_len + new_len + 1); strcpy (sdbuff, search_dirs); sdbuff[search_dirs_len] = PATH_SEPARATOR; --- 220,224 ---- if (nbuff[j] == '/') nbuff[j] = DIR_SEPARATOR; ! sdbuff = malloc (search_dirs_len + new_len + 2); strcpy (sdbuff, search_dirs); sdbuff[search_dirs_len] = PATH_SEPARATOR; 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/configure gcc-2.6.3/configure *** gcc-2.6.2/configure Fri Nov 11 14:19:32 1994 --- gcc-2.6.3/configure Wed Nov 23 17:26:27 1994 *************** *** 1729,1732 **** --- 1729,1736 ---- tm_file=ns32k/netbsd.h xm_file=ns32k/xm-netbsd.h + tmake_file=t-libc-ok + # On NetBSD, the headers are already okay. + fixincludes=Makefile.in + xmake_file=x-netbsd ;; pyramid-*-*) 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/cp/ChangeLog gcc-2.6.3/cp/ChangeLog *** gcc-2.6.2/cp/ChangeLog Thu Nov 3 18:49:43 1994 --- gcc-2.6.3/cp/ChangeLog Fri Nov 18 16:45:19 1994 *************** *** 1,2 **** --- 1,39 ---- + Thu Nov 17 10:56:50 1994 Jason Merrill + + * 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 + + * 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 + + * 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(). + Thu Nov 3 18:48:19 1994 Paul Eggert *************** *** 8,11 **** --- 45,53 ---- * g++.c (main): Cast arg to bzero to avoid warning. + 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. + Sun Oct 23 13:19:55 1994 Jason Merrill (jason@phydeaux.cygnus.com) *************** *** 123,132 **** * decl.c (shadow_tag): Remove obsolete code for pushing tags and dealing with exceptions. - - Sun Oct 2 00:21:56 1994 Jason Merrill (jason@phydeaux.cygnus.com) - - * parse.y (expr_or_declarator): Add '(' expr_or_declarator ')' rule. - (direct_notype_declarator): Ditto. - (complex_direct_notype_declarator): Remove it here. Sat Oct 1 21:42:18 1994 Jason Merrill (jason@deneb.cygnus.com) --- 165,168 ---- 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/cp/call.c gcc-2.6.3/cp/call.c *** gcc-2.6.2/cp/call.c Fri Oct 14 20:30:55 1994 --- gcc-2.6.3/cp/call.c Mon Nov 14 23:40:00 1994 *************** *** 526,536 **** penalty = 2; - if (TREE_UNSIGNED (ttl) ^ TREE_UNSIGNED (intype)) - { - ttl = unsigned_type (ttl); - intype = unsigned_type (intype); - penalty += 2; - } - ttr = intype; --- 526,529 ---- *************** *** 550,553 **** --- 543,553 ---- h.distance = 0; return h; + } + + if (TREE_UNSIGNED (ttl) ^ TREE_UNSIGNED (intype)) + { + ttl = unsigned_type (ttl); + ttr = intype = unsigned_type (intype); + penalty += 2; } 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/cp/cvt.c gcc-2.6.3/cp/cvt.c *** gcc-2.6.2/cp/cvt.c Fri Oct 14 20:31:20 1994 --- gcc-2.6.3/cp/cvt.c Mon Nov 14 23:33:28 1994 *************** *** 664,671 **** if (form == REFERENCE_TYPE) { ! rval = copy_node (expr); ! TREE_TYPE (rval) = build_pointer_type (TREE_TYPE (TREE_TYPE (expr))); ! rval = cp_convert (build_pointer_type (TREE_TYPE (reftype)), rval, convtype, flags); TREE_TYPE (rval) = reftype; return rval; --- 664,673 ---- if (form == REFERENCE_TYPE) { ! tree type = TREE_TYPE (expr); ! tree tmp = copy_node (expr); ! TREE_TYPE (tmp) = build_pointer_type (TREE_TYPE (TREE_TYPE (expr))); ! rval = cp_convert (build_pointer_type (TREE_TYPE (reftype)), tmp, convtype, flags); + TREE_TYPE (tmp) = type; TREE_TYPE (rval) = reftype; return rval; *************** *** 1284,1293 **** { tree dtype = TREE_TYPE (e); - if (TREE_CODE (dtype) == REFERENCE_TYPE) - { - e = convert_from_reference (e); - dtype = TREE_TYPE (e); - } dtype = TYPE_MAIN_VARIANT (dtype); --- 1286,1292 ---- { tree dtype = TREE_TYPE (e); + tree ctor = NULL_TREE; + tree conversion = NULL_TREE; dtype = TYPE_MAIN_VARIANT (dtype); *************** *** 1322,1406 **** vs. using a type conversion operator when both apply. */ ! else if (IS_AGGR_TYPE (dtype)) ! { ! tree binfo; ! ! tree conversion; ! ! if (! DERIVED_FROM_P (type, dtype) && TYPE_HAS_CONVERSION (dtype)) ! conversion = build_type_conversion (CONVERT_EXPR, type, e, 1); ! else ! conversion = NULL_TREE; ! ! if (TYPE_HAS_CONSTRUCTOR (type)) ! { ! tree rval = build_method_call (NULL_TREE, constructor_name_full (type), ! build_tree_list (NULL_TREE, e), ! TYPE_BINFO (type), ! conversion ? LOOKUP_NO_CONVERSION : 0); ! ! if (rval != error_mark_node) ! { ! if (conversion) ! { ! error ("both constructor and type conversion operator apply"); ! return error_mark_node; ! } ! /* call to constructor successful. */ ! rval = build_cplus_new (type, rval, 1); ! return rval; ! } ! } ! /* Type conversion successful/applies. */ ! if (conversion) ! { ! if (conversion == error_mark_node) ! error ("ambiguous pointer conversion"); ! return conversion; ! } ! /* now try normal C++ assignment semantics. */ ! binfo = TYPE_BINFO (dtype); ! if (BINFO_TYPE (binfo) == type ! || (binfo = get_binfo (type, dtype, 1))) ! { ! if (binfo == error_mark_node) ! return error_mark_node; ! } ! if (binfo != NULL_TREE) ! { ! if (lvalue_p (e)) ! { ! e = build_unary_op (ADDR_EXPR, e, 0); ! if (! BINFO_OFFSET_ZEROP (binfo)) ! e = build (PLUS_EXPR, TYPE_POINTER_TO (type), ! e, BINFO_OFFSET (binfo)); ! return build1 (INDIRECT_REF, type, e); ! } ! sorry ("addressable aggregates"); ! return error_mark_node; ! } ! error ("conversion between incompatible aggregate types requested"); return error_mark_node; } ! /* conversion from non-aggregate to aggregate type requires ! constructor. */ ! else if (TYPE_HAS_CONSTRUCTOR (type)) { ! tree rval; ! tree init = build_method_call (NULL_TREE, constructor_name_full (type), ! build_tree_list (NULL_TREE, e), ! TYPE_BINFO (type), LOOKUP_NORMAL); ! if (init == error_mark_node) { ! cp_error ("in conversion to type `%T'", type); ! return error_mark_node; } ! /* We can't pass 1 to the with_cleanup_p arg here, because that ! screws up passing classes by value. */ ! rval = build_cplus_new (type, init, 0); ! return rval; } } --- 1321,1395 ---- vs. using a type conversion operator when both apply. */ ! if (IS_AGGR_TYPE (dtype) && ! DERIVED_FROM_P (type, dtype) ! && TYPE_HAS_CONVERSION (dtype)) ! conversion = build_type_conversion (CONVERT_EXPR, type, e, 1); ! if (conversion == error_mark_node) ! { ! error ("ambiguous pointer conversion"); ! return conversion; ! } ! if (TYPE_HAS_CONSTRUCTOR (type)) ! ctor = build_method_call (NULL_TREE, constructor_name_full (type), ! build_tree_list (NULL_TREE, e), ! TYPE_BINFO (type), ! LOOKUP_NORMAL | LOOKUP_SPECULATIVELY ! | (conversion ? LOOKUP_NO_CONVERSION : 0)); ! if (ctor == error_mark_node) ! { ! cp_error ("in conversion to type `%T'", type); return error_mark_node; } ! ! if (conversion && ctor) { ! error ("both constructor and type conversion operator apply"); ! return error_mark_node; ! } ! else if (conversion) ! return conversion; ! else if (ctor) ! { ! if (current_function_decl) ! /* We can't pass 1 to the with_cleanup_p arg here, because that ! screws up passing classes by value. */ ! ctor = build_cplus_new (type, ctor, 0); ! else { ! register tree parm = TREE_OPERAND (ctor, 1); ! ! /* Initializers for static variables and parameters ! have to handle doing the initialization and ! cleanup themselves. */ ! my_friendly_assert (TREE_CODE (ctor) == CALL_EXPR, 322); ! #if 0 ! /* The following assertion fails in cases where we ! are initializing a static member variable of a ! particular instance of a template class with a ! call to a constructor of the given instance, as ! in: ! ! TMPL object = TMPL(); ! ! Curiously, the assertion does not fail if we do ! the same thing for a static member of a ! non-template class, as in: ! ! T object = T(); ! ! I can't see why we should care here whether or not ! the initializer expression involves a call to ! `new', so for the time being, it seems best to ! just avoid doing this assertion. */ ! my_friendly_assert (TREE_CALLS_NEW (TREE_VALUE (parm)), ! 323); ! #endif ! TREE_VALUE (parm) = NULL_TREE; ! ctor = build_indirect_ref (ctor, NULL_PTR); ! TREE_HAS_CONSTRUCTOR (ctor) = 1; } ! return ctor; } } 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/cp/decl.c gcc-2.6.3/cp/decl.c *** gcc-2.6.2/cp/decl.c Wed Oct 26 21:17:47 1994 --- gcc-2.6.3/cp/decl.c Mon Nov 14 23:38:49 1994 *************** *** 11073,11077 **** } ! if (write_symbols != NO_DEBUG && TREE_CODE (fntype) != METHOD_TYPE) { tree ttype = target_type (fntype); --- 11073,11077 ---- } ! if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/) { tree ttype = target_type (fntype); 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/cp/method.c gcc-2.6.3/cp/method.c *** gcc-2.6.2/cp/method.c Fri Oct 14 20:31:13 1994 --- gcc-2.6.3/cp/method.c Mon Nov 14 23:30:57 1994 *************** *** 515,518 **** --- 515,519 ---- if (begin) OB_INIT (); + numeric_outputed_need_bar = 0; if ((just_one = (TREE_CODE (parmtypes) != TREE_LIST))) *************** *** 921,925 **** ALLOCATE_TYPEVEC (parms); nofold = 0; - numeric_outputed_need_bar = 0; if (for_method) { --- 922,925 ---- 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/cp/parse.y gcc-2.6.3/cp/parse.y *** gcc-2.6.2/cp/parse.y Tue Oct 11 14:30:48 1994 --- gcc-2.6.3/cp/parse.y Fri Nov 18 16:43:39 1994 *************** *** 1252,1257 **** | '&' expr_or_declarator %prec UNARY { $$ = build_parse_node (ADDR_EXPR, $2); } - | '(' expr_or_declarator ')' - { $$ = $2; } ; --- 1252,1255 ---- *************** *** 1262,1267 **** { push_nested_class (TREE_TYPE (OP0 ($$)), 3); TREE_COMPLEXITY ($$) = current_class_depth; } - | '(' expr_or_declarator ')' - { $$ = finish_decl_parsing ($2); } ; --- 1260,1263 ---- *************** *** 2836,2839 **** --- 2832,2837 ---- | direct_notype_declarator '(' error ')' type_quals %prec '.' { $$ = build_parse_node (CALL_EXPR, $$, NULL_TREE, NULL_TREE); } + | '(' expr_or_declarator ')' + { $$ = finish_decl_parsing ($2); } | '(' complex_notype_declarator ')' { $$ = $2; } 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/cp/pt.c gcc-2.6.3/cp/pt.c *** gcc-2.6.2/cp/pt.c Wed Oct 12 12:43:34 1994 --- gcc-2.6.3/cp/pt.c Mon Nov 14 23:34:44 1994 *************** *** 1117,1129 **** tree t; ! t = TREE_VALUE(CLASSTYPE_TAGS(ctype)); ! while (t) ! { ! if (strcmp(IDENTIFIER_POINTER(name), IDENTIFIER_POINTER(TYPE_IDENTIFIER(t))) ! == 0) ! return t; ! else ! t = TREE_CHAIN(t); ! } return NULL_TREE; } --- 1117,1125 ---- tree t; ! for (t = CLASSTYPE_TAGS (ctype); t; t = TREE_CHAIN (t)) ! { ! if (name == TREE_PURPOSE (t)) ! return TREE_VALUE (t); ! } return NULL_TREE; } *************** *** 1199,1205 **** case TEMPLATE_TYPE_PARM: ! return cp_build_type_variant (args[TEMPLATE_TYPE_IDX (t)], ! TYPE_READONLY (t), ! TYPE_VOLATILE (t)); case TEMPLATE_CONST_PARM: --- 1195,1204 ---- case TEMPLATE_TYPE_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)); ! } case TEMPLATE_CONST_PARM: *************** *** 2009,2012 **** --- 2008,2014 ---- } #endif + if (TREE_CODE (arg) == REFERENCE_TYPE) + arg = TREE_TYPE (arg); + if (TREE_CODE (parm) != REFERENCE_TYPE) { *************** *** 2069,2075 **** return 0; - if (TREE_CODE (arg) == REFERENCE_TYPE) - arg = TREE_TYPE (arg); - switch (TREE_CODE (parm)) { --- 2071,2074 ---- *************** *** 2083,2086 **** --- 2082,2086 ---- } idx = TEMPLATE_TYPE_IDX (parm); + #if 0 /* Template type parameters cannot contain cv-quals; i.e. template void f (T& a, T& b) will not generate *************** *** 2090,2093 **** --- 2090,2100 ---- return 1; arg = TYPE_MAIN_VARIANT (arg); + #else + { + int constp = TYPE_READONLY (arg) > TYPE_READONLY (parm); + int volatilep = TYPE_VOLATILE (arg) > TYPE_VOLATILE (parm); + arg = cp_build_type_variant (arg, constp, volatilep); + } + #endif /* Simple cases: Value already set, does match or doesn't. */ if (targs[idx] == arg) *************** *** 2496,2505 **** } } ! ! instantiate_member_templates (TYPE_IDENTIFIER (t)); ! ! /* this should really be done by instantiate_member_templates */ { ! tree tmp = TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (t), 0); for (; tmp; tmp = TREE_CHAIN (tmp)) { --- 2503,2519 ---- } } ! { ! tree tmp; ! /* Classes nested in template classes currently don't have an ! IDENTIFIER_TEMPLATE--their out-of-line members are handled ! by the enclosing template class. Note that there are name ! conflict bugs with this approach. */ ! tmp = TYPE_IDENTIFIER (t); ! if (IDENTIFIER_TEMPLATE (tmp)) ! instantiate_member_templates (tmp); ! ! /* this should really be done by instantiate_member_templates */ ! tmp = TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (t), 0); for (; tmp; tmp = TREE_CHAIN (tmp)) { 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/cp/typeck.c gcc-2.6.3/cp/typeck.c *** gcc-2.6.2/cp/typeck.c Fri Oct 14 20:31:32 1994 --- gcc-2.6.3/cp/typeck.c Mon Nov 14 23:33:59 1994 *************** *** 6743,6746 **** --- 6743,6748 ---- /* Handle the case of default parameter initialization and initialization of static variables. */ + else if (TREE_CODE (rhs) == TARGET_EXPR) + return rhs; else if (TREE_CODE (rhs) == INDIRECT_REF && TREE_HAS_CONSTRUCTOR (rhs)) { 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/cp/typeck2.c gcc-2.6.3/cp/typeck2.c *** gcc-2.6.2/cp/typeck2.c Thu Sep 29 20:49:58 1994 --- gcc-2.6.3/cp/typeck2.c Thu Nov 17 14:01:54 1994 *************** *** 1343,1346 **** --- 1343,1347 ---- if (TREE_CODE (objtype) == REFERENCE_TYPE) objtype = TREE_TYPE (objtype); + objtype = TYPE_MAIN_VARIANT (objtype); if (! IS_AGGR_TYPE (objtype)) 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/emit-rtl.c gcc-2.6.3/emit-rtl.c *** gcc-2.6.2/emit-rtl.c Sat Oct 29 21:15:29 1994 --- gcc-2.6.3/emit-rtl.c Tue Nov 22 17:43:29 1994 *************** *** 651,655 **** for this mode. */ ! if (GET_MODE_BITSIZE (mode) == 2 * HOST_BITS_PER_WIDE_INT) return x; else if (GET_MODE_BITSIZE (mode) > HOST_BITS_PER_WIDE_INT) --- 651,655 ---- for this mode. */ ! if (GET_MODE_BITSIZE (mode) >= 2 * HOST_BITS_PER_WIDE_INT) return x; else if (GET_MODE_BITSIZE (mode) > HOST_BITS_PER_WIDE_INT) 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/expmed.c gcc-2.6.3/expmed.c *** gcc-2.6.2/expmed.c Sat Nov 12 06:34:34 1994 --- gcc-2.6.3/expmed.c Tue Nov 29 16:51:15 1994 *************** *** 1685,1690 **** else if (methods == OPTAB_LIB_WIDEN) { ! /* If we are rotating by a constant that is valid and ! we have been unable to open-code this by a rotation, do it as the IOR of two shifts. I.e., to rotate A by N bits, compute (A << N) | ((unsigned) A >> (C - N)) --- 1685,1689 ---- else if (methods == OPTAB_LIB_WIDEN) { ! /* If we have been unable to open-code this by a rotation, do it as the IOR of two shifts. I.e., to rotate A by N bits, compute (A << N) | ((unsigned) A >> (C - N)) *************** *** 1698,1720 **** code below. */ ! if (GET_CODE (op1) == CONST_INT && INTVAL (op1) > 0 ! && INTVAL (op1) < GET_MODE_BITSIZE (mode)) ! { ! rtx subtarget = target == shifted ? 0 : target; ! rtx temp1; ! tree other_amount ! = build_int_2 (GET_MODE_BITSIZE (mode) - INTVAL (op1), 0); ! ! shifted = force_reg (mode, shifted); ! ! temp = expand_shift (left ? LSHIFT_EXPR : RSHIFT_EXPR, ! mode, shifted, amount, subtarget, 1); ! temp1 = expand_shift (left ? RSHIFT_EXPR : LSHIFT_EXPR, ! mode, shifted, other_amount, 0, 1); ! return expand_binop (mode, ior_optab, temp, temp1, target, ! unsignedp, methods); ! } ! else ! methods = OPTAB_LIB; } --- 1697,1719 ---- code below. */ ! rtx subtarget = target == shifted ? 0 : target; ! rtx temp1; ! tree type = TREE_TYPE (amount); ! tree new_amount = make_tree (type, op1); ! tree other_amount ! = fold (build (MINUS_EXPR, type, ! convert (type, ! build_int_2 (GET_MODE_BITSIZE (mode), ! 0)), ! amount)); ! ! shifted = force_reg (mode, shifted); ! ! temp = expand_shift (left ? LSHIFT_EXPR : RSHIFT_EXPR, ! mode, shifted, new_amount, subtarget, 1); ! temp1 = expand_shift (left ? RSHIFT_EXPR : LSHIFT_EXPR, ! mode, shifted, other_amount, 0, 1); ! return expand_binop (mode, ior_optab, temp, temp1, target, ! unsignedp, methods); } *************** *** 2609,2619 **** Second comes a switch statement with code specific for each rounding mode. For some special operands this code emits all RTL for the desired ! operation, for other cases, it generates a quotient and stores it in QUOTIENT. The case for trunc division/remainder might leave quotient = 0, to indicate that it has not done anything. ! Last comes code that finishes the operation. If QUOTIENT is set an ! REM_FLAG, the remainder is computed as OP0 - QUOTIENT * OP1. If QUOTIENT ! is not set, it is computed using trunc rounding. We try to generate special code for division and remainder when OP1 is a --- 2608,2618 ---- Second comes a switch statement with code specific for each rounding mode. For some special operands this code emits all RTL for the desired ! operation, for other cases, it generates only a quotient and stores it in QUOTIENT. The case for trunc division/remainder might leave quotient = 0, to indicate that it has not done anything. ! Last comes code that finishes the operation. If QUOTIENT is set and ! REM_FLAG is set, the remainder is computed as OP0 - QUOTIENT * OP1. If ! QUOTIENT is not set, it is computed using trunc rounding. We try to generate special code for division and remainder when OP1 is a *************** *** 3409,3416 **** case ROUND_DIV_EXPR: case ROUND_MOD_EXPR: ! /* The code that used to be here was wrong, and nothing really ! depends on it. */ ! abort (); ! break; } --- 3408,3475 ---- case ROUND_DIV_EXPR: case ROUND_MOD_EXPR: ! if (unsignedp) ! { ! rtx tem; ! rtx label; ! label = gen_label_rtx (); ! quotient = gen_reg_rtx (compute_mode); ! remainder = gen_reg_rtx (compute_mode); ! if (expand_twoval_binop (udivmod_optab, op0, op1, quotient, remainder, 1) == 0) ! { ! rtx tem; ! quotient = expand_binop (compute_mode, udiv_optab, op0, op1, ! quotient, 1, OPTAB_LIB_WIDEN); ! tem = expand_mult (compute_mode, quotient, op1, NULL_RTX, 1); ! remainder = expand_binop (compute_mode, sub_optab, op0, tem, ! remainder, 1, OPTAB_LIB_WIDEN); ! } ! tem = plus_constant (op1, -1); ! tem = expand_shift (RSHIFT_EXPR, compute_mode, tem, ! build_int_2 (1, 0), NULL_RTX, 1); ! emit_cmp_insn (remainder, tem, LEU, NULL_RTX, compute_mode, 0, 0); ! emit_jump_insn (gen_bleu (label)); ! expand_inc (quotient, const1_rtx); ! expand_dec (remainder, op1); ! emit_label (label); ! } ! else ! { ! rtx abs_rem, abs_op1, tem, mask; ! rtx label; ! label = gen_label_rtx (); ! quotient = gen_reg_rtx (compute_mode); ! remainder = gen_reg_rtx (compute_mode); ! if (expand_twoval_binop (sdivmod_optab, op0, op1, quotient, remainder, 0) == 0) ! { ! rtx tem; ! quotient = expand_binop (compute_mode, sdiv_optab, op0, op1, ! quotient, 0, OPTAB_LIB_WIDEN); ! tem = expand_mult (compute_mode, quotient, op1, NULL_RTX, 0); ! remainder = expand_binop (compute_mode, sub_optab, op0, tem, ! remainder, 0, OPTAB_LIB_WIDEN); ! } ! abs_rem = expand_abs (compute_mode, remainder, NULL_RTX, 0, 0); ! abs_op1 = expand_abs (compute_mode, op1, NULL_RTX, 0, 0); ! tem = expand_shift (LSHIFT_EXPR, compute_mode, abs_rem, ! build_int_2 (1, 0), NULL_RTX, 1); ! emit_cmp_insn (tem, abs_op1, LTU, NULL_RTX, compute_mode, 0, 0); ! emit_jump_insn (gen_bltu (label)); ! tem = expand_binop (compute_mode, xor_optab, op0, op1, ! NULL_RTX, 0, OPTAB_WIDEN); ! mask = expand_shift (RSHIFT_EXPR, compute_mode, tem, ! build_int_2 (size - 1, 0), NULL_RTX, 0); ! tem = expand_binop (compute_mode, xor_optab, mask, const1_rtx, ! NULL_RTX, 0, OPTAB_WIDEN); ! tem = expand_binop (compute_mode, sub_optab, tem, mask, ! NULL_RTX, 0, OPTAB_WIDEN); ! expand_inc (quotient, tem); ! tem = expand_binop (compute_mode, xor_optab, mask, op1, ! NULL_RTX, 0, OPTAB_WIDEN); ! tem = expand_binop (compute_mode, sub_optab, tem, mask, ! NULL_RTX, 0, OPTAB_WIDEN); ! expand_dec (remainder, tem); ! emit_label (label); ! } ! return gen_lowpart (mode, rem_flag ? remainder : quotient); } 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/expr.c gcc-2.6.3/expr.c *** gcc-2.6.2/expr.c Mon Oct 31 08:10:30 1994 --- gcc-2.6.3/expr.c Wed Nov 30 19:08:49 1994 *************** *** 181,185 **** static void preexpand_calls PROTO((tree)); static void do_jump_by_parts_greater PROTO((tree, int, rtx, rtx)); ! static void do_jump_by_parts_greater_rtx PROTO((enum machine_mode, int, rtx, rtx, rtx, rtx)); static void do_jump_by_parts_equality PROTO((tree, rtx, rtx)); static void do_jump_by_parts_equality_rtx PROTO((rtx, rtx, rtx)); --- 181,185 ---- static void preexpand_calls PROTO((tree)); static void do_jump_by_parts_greater PROTO((tree, int, rtx, rtx)); ! void do_jump_by_parts_greater_rtx PROTO((enum machine_mode, int, rtx, rtx, rtx, rtx)); static void do_jump_by_parts_equality PROTO((tree, rtx, rtx)); static void do_jump_by_parts_equality_rtx PROTO((rtx, rtx, rtx)); *************** *** 917,920 **** --- 917,926 ---- start_sequence (); + /* Since we will turn this into a no conflict block, we must ensure + that the source does not overlap the target. */ + + if (reg_overlap_mentioned_p (to, from)) + from = force_reg (from_mode, from); + /* Get a copy of FROM widened to a word, if necessary. */ if (GET_MODE_BITSIZE (from_mode) < BITS_PER_WORD) *************** *** 1631,1635 **** returned by the macro, it will definitely be less than the actual mode mask. */ ! && (unsigned HOST_WIDE_INT) INTVAL (size) <= GET_MODE_MASK (mode) && (insn_operand_predicate[(int) code][0] == 0 || (*insn_operand_predicate[(int) code][0]) (x, BLKmode)) --- 1637,1644 ---- returned by the macro, it will 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_BITSIZE (mode) >= BITS_PER_WORD) && (insn_operand_predicate[(int) code][0] == 0 || (*insn_operand_predicate[(int) code][0]) (x, BLKmode)) *************** *** 1958,1961 **** --- 1967,1981 ---- rtx insns; + #ifdef PUSH_ROUNDING + + /* If X is a push on the stack, do the push now and replace + X with a reference to the stack pointer. */ + if (push_operand (x, GET_MODE (x))) + { + anti_adjust_stack (GEN_INT (GET_MODE_SIZE (GET_MODE (x)))); + x = change_address (x, VOIDmode, stack_pointer_rtx); + } + #endif + for (i = 0; i < (GET_MODE_SIZE (mode) + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD; *************** *** 5217,5284 **** return op0; ! /* First try to do it with a special abs instruction. */ ! temp = expand_unop (mode, abs_optab, op0, target, 0); ! if (temp != 0) ! return temp; ! ! /* If this machine has expensive jumps, we can do integer absolute ! value of X as (((signed) x >> (W-1)) ^ x) - ((signed) x >> (W-1)), ! where W is the width of MODE. */ ! ! if (GET_MODE_CLASS (mode) == MODE_INT && BRANCH_COST >= 2) ! { ! rtx extended = expand_shift (RSHIFT_EXPR, mode, op0, ! size_int (GET_MODE_BITSIZE (mode) - 1), ! NULL_RTX, 0); ! ! temp = expand_binop (mode, xor_optab, extended, op0, target, 0, ! OPTAB_LIB_WIDEN); ! if (temp != 0) ! temp = expand_binop (mode, sub_optab, temp, extended, target, 0, ! OPTAB_LIB_WIDEN); ! ! if (temp != 0) ! return temp; ! } ! ! /* If that does not win, use conditional jump and negate. */ ! target = original_target; ! op1 = gen_label_rtx (); ! if (target == 0 || ! safe_from_p (target, TREE_OPERAND (exp, 0)) ! || GET_MODE (target) != mode ! || (GET_CODE (target) == MEM && MEM_VOLATILE_P (target)) ! || (GET_CODE (target) == REG ! && REGNO (target) < FIRST_PSEUDO_REGISTER)) ! target = gen_reg_rtx (mode); ! ! emit_move_insn (target, op0); ! NO_DEFER_POP; ! ! /* If this mode is an integer too wide to compare properly, ! compare word by word. Rely on CSE to optimize constant cases. */ ! if (GET_MODE_CLASS (mode) == MODE_INT && ! can_compare_p (mode)) ! do_jump_by_parts_greater_rtx (mode, 0, target, const0_rtx, ! NULL_RTX, op1); ! else ! { ! temp = compare_from_rtx (target, CONST0_RTX (mode), GE, 0, mode, ! NULL_RTX, 0); ! if (temp == const1_rtx) ! return target; ! else if (temp != const0_rtx) ! { ! if (bcc_gen_fctn[(int) GET_CODE (temp)] != 0) ! emit_jump_insn ((*bcc_gen_fctn[(int) GET_CODE (temp)]) (op1)); ! else ! abort (); ! } ! } ! ! op0 = expand_unop (mode, neg_optab, target, target, 0); ! if (op0 != target) ! emit_move_insn (target, op0); ! emit_label (op1); ! OK_DEFER_POP; ! return target; case MAX_EXPR: --- 5237,5242 ---- return op0; ! return expand_abs (mode, op0, target, unsignedp, ! safe_from_p (target, TREE_OPERAND (exp, 0))); case MAX_EXPR: *************** *** 9027,9031 **** Jump to IF_TRUE_LABEL if OP0 is greater, IF_FALSE_LABEL otherwise. */ ! static void do_jump_by_parts_greater_rtx (mode, unsignedp, op0, op1, if_false_label, if_true_label) enum machine_mode mode; --- 8985,8989 ---- Jump to IF_TRUE_LABEL if OP0 is greater, IF_FALSE_LABEL otherwise. */ ! void do_jump_by_parts_greater_rtx (mode, unsignedp, op0, op1, if_false_label, if_true_label) enum machine_mode mode; 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/expr.h gcc-2.6.3/expr.h *** gcc-2.6.2/expr.h Wed Oct 12 09:15:54 1994 --- gcc-2.6.3/expr.h Tue Nov 15 18:39:54 1994 *************** *** 488,491 **** --- 488,494 ---- extern rtx expand_unop PROTO((enum machine_mode, optab, rtx, rtx, int)); + /* Expand the absolute value operation. */ + extern rtx expand_abs PROTO((enum machine_mode, rtx, rtx, int, int)); + /* Expand the complex absolute value operation. */ extern rtx expand_complex_abs PROTO((enum machine_mode, rtx, rtx, int)); 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/fixincludes gcc-2.6.3/fixincludes *** gcc-2.6.2/fixincludes Thu Nov 10 18:36:52 1994 --- gcc-2.6.3/fixincludes Mon Nov 14 19:19:12 1994 *************** *** 1402,1405 **** --- 1402,1477 ---- fi + # NeXT 3.2 adds const prefix to some math functions. These conflict + # with the built-in functions. + file=ansi/math.h + 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 + fi + if [ -r ${LIB}/$file ]; then + echo Fixing $file + sed -e '/^extern.*double.*__const__.*cos(/s/__const__//' \ + -e '/^extern.*double.*__const__.*sin(/s/__const__//' ${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 + else + # 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 + fi + + # NeXT 3.2 uses the word "template" as a parameter for some + # functions. GCC reports an invalid use of a reserved key word + # with the built-in functions. NeXT 3.2 includes the keyword + # volatile in the prototype for abort(). This conflicts with + # the built-in definition. + file=bsd/libc.h + 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 + fi + if [ -r ${LIB}/$file ]; then + echo Fixing $file + sed -e '/\(.*template\)/s/template//' \ + -e '/extern.*volatile.*void.*abort/s/volatile//' ${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 + else + # 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 + fi + + # NeXT 3.2 includes the keyword volatile in the abort() and + # exit() function prototypes. That conflicts with the + # built-in functions. + file=ansi/stdlib.h + 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 + fi + if [ -r ${LIB}/$file ]; then + echo Fixing $file + sed -e '/extern.*volatile.*void.*exit/s/volatile//' \ + -e '/extern.*volatile.*void.*abort/s/volatile//' ${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 + else + # 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 + fi # NeXT 2.0 defines 'int wait(union wait*)', which conflicts with Posix.1. 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/flow.c gcc-2.6.3/flow.c *** gcc-2.6.2/flow.c Wed Oct 26 07:32:48 1994 --- gcc-2.6.3/flow.c Thu Nov 17 12:46:04 1994 *************** *** 2193,2196 **** --- 2193,2198 ---- reg_n_calls_crossed[regno]++; } + else + return; /* If we haven't returned, it means we were able to make the 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/fold-const.c gcc-2.6.3/fold-const.c *** gcc-2.6.2/fold-const.c Wed Oct 5 19:07:23 1994 --- gcc-2.6.3/fold-const.c Wed Nov 30 19:03:17 1994 *************** *** 1405,1408 **** --- 1405,1413 ---- if (TREE_CODE (arg1) == INTEGER_CST) { + /* If we would build a constant wider than GCC supports, + leave the conversion unfolded. */ + if (TYPE_PRECISION (type) > 2 * HOST_BITS_PER_WIDE_INT) + return t; + /* Given an integer constant, make new constant with new type, appropriately sign-extended or truncated. */ *************** *** 2837,2841 **** l_const = const_binop (LSHIFT_EXPR, convert (type, l_const), size_int (xll_bitpos), 0); - l_const = const_binop (BIT_AND_EXPR, l_const, ll_mask, 0); } if (r_const) --- 2842,2845 ---- *************** *** 2844,2848 **** r_const = const_binop (LSHIFT_EXPR, convert (type, r_const), size_int (xrl_bitpos), 0); - r_const = const_binop (BIT_AND_EXPR, r_const, rl_mask, 0); } --- 2848,2851 ---- 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/ginclude/stddef.h gcc-2.6.3/ginclude/stddef.h *** gcc-2.6.2/ginclude/stddef.h Fri Oct 7 19:22:35 1994 --- gcc-2.6.3/ginclude/stddef.h Thu Nov 17 17:26:41 1994 *************** *** 23,27 **** /* On 4.3bsd-net2, make sure ansi.h is included, so we have one less case to deal with in the following. */ ! #if defined (__BSD_NET2__) || defined (____386BSD____) || defined (__FreeBSD__) #include #endif --- 23,27 ---- /* On 4.3bsd-net2, make sure ansi.h is included, so we have one less case to deal with in the following. */ ! #if defined (__BSD_NET2__) || defined (____386BSD____) || defined (__FreeBSD__) || defined(__NetBSD__) #include #endif *************** *** 30,37 **** defined if the corresponding type is *not* defined. */ #ifdef _ANSI_H_ ! #ifndef _SIZE_T_ #define _SIZE_T #endif ! #ifndef _PTRDIFF_T_ #define _PTRDIFF_T #endif --- 30,37 ---- defined if the corresponding type is *not* defined. */ #ifdef _ANSI_H_ ! #if !defined(_SIZE_T_) && !defined(_BSD_SIZE_T_) #define _SIZE_T #endif ! #if !defined(_PTRDIFF_T_) && !defined(_BSD_PTRDIFF_T_) #define _PTRDIFF_T #endif *************** *** 38,42 **** /* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_ instead of _WCHAR_T_. */ ! #ifndef _WCHAR_T_ #ifndef _BSD_WCHAR_T_ #define _WCHAR_T --- 38,42 ---- /* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_ instead of _WCHAR_T_. */ ! #if !defined(_WCHAR_T_) && !defined(_BSD_WCHAR_T_) #ifndef _BSD_WCHAR_T_ #define _WCHAR_T *************** *** 46,55 **** --- 46,58 ---- #if defined (__need_ptrdiff_t) || defined (_STDDEF_H_) #undef _PTRDIFF_T_ + #undef _BSD_PTRDIFF_T_ #endif #if defined (__need_size_t) || defined (_STDDEF_H_) #undef _SIZE_T_ + #undef _BSD_SIZE_T_ #endif #if defined (__need_wchar_t) || defined (_STDDEF_H_) #undef _WCHAR_T_ + #undef _BSD_WCHAR_T_ #endif #endif /* _ANSI_H_ */ *************** *** 77,80 **** --- 80,84 ---- #ifndef __PTRDIFF_T #ifndef _PTRDIFF_T_ + #ifndef _BSD_PTRDIFF_T_ #ifndef ___int_ptrdiff_t_h #ifndef _GCC_PTRDIFF_T *************** *** 84,87 **** --- 88,92 ---- #define __PTRDIFF_T #define _PTRDIFF_T_ + #define _BSD_PTRDIFF_T_ #define ___int_ptrdiff_t_h #define _GCC_PTRDIFF_T *************** *** 92,95 **** --- 97,101 ---- #endif /* _GCC_PTRDIFF_T */ #endif /* ___int_ptrdiff_t_h */ + #endif /* _BSD_PTRDIFF_T_ */ #endif /* _PTRDIFF_T_ */ #endif /* __PTRDIFF_T */ *************** *** 114,117 **** --- 120,124 ---- #ifndef __SIZE_T #ifndef _SIZE_T_ + #ifndef _BSD_SIZE_T_ #ifndef _SIZE_T_DEFINED_ #ifndef ___int_size_t_h *************** *** 125,128 **** --- 132,136 ---- #define __SIZE_T #define _SIZE_T_ + #define _BSD_SIZE_T_ #define _SIZE_T_DEFINED_ #define ___int_size_t_h *************** *** 141,144 **** --- 149,153 ---- #endif /* ___int_size_t_h */ #endif /* _SIZE_T_DEFINED_ */ + #endif /* _BSD_SIZE_T_ */ #endif /* _SIZE_T_ */ #endif /* __SIZE_T */ *************** *** 164,167 **** --- 173,177 ---- #ifndef __WCHAR_T #ifndef _WCHAR_T_ + #ifndef _BSD_WCHAR_T_ #ifndef _WCHAR_T_DEFINED_ #ifndef _WCHAR_T_H *************** *** 174,177 **** --- 184,188 ---- #define __WCHAR_T #define _WCHAR_T_ + #define _BSD_WCHAR_T_ #define _WCHAR_T_DEFINED_ #define _WCHAR_T_H *************** *** 213,216 **** --- 224,228 ---- #endif #endif + #endif #undef __need_wchar_t #endif /* _STDDEF_H or __need_wchar_t. */ *************** *** 223,232 **** --- 235,247 ---- #ifdef _GCC_PTRDIFF_T_ #undef _PTRDIFF_T_ + #undef _BSD_PTRDIFF_T_ #endif #ifdef _GCC_SIZE_T_ #undef _SIZE_T_ + #undef _BSD_SIZE_T_ #endif #ifdef _GCC_WCHAR_T_ #undef _WCHAR_T_ + #undef _BSD_WCHAR_T_ #endif /* The following ones are the real ones. */ 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/install.texi gcc-2.6.3/install.texi *** gcc-2.6.2/install.texi Fri Nov 11 18:27:16 1994 --- gcc-2.6.3/install.texi Mon Nov 28 18:32:22 1994 *************** *** 537,542 **** 1750a, a29k, alpha, arm, c@var{n}, clipper, dsp16xx, elxsi, h8300, hppa1.0, hppa1.1, i370, i386, i486, i860, i960, m68000, m68k, m88k, ! mips, ns32k, pyramid, romp, rs6000, sh, sparc, sparclite, sparc64, vax, ! we32k. @end quotation --- 537,542 ---- 1750a, a29k, alpha, arm, c@var{n}, clipper, dsp16xx, elxsi, h8300, hppa1.0, hppa1.1, i370, i386, i486, i860, i960, m68000, m68k, m88k, ! mips, ns32k, powerpc, pyramid, romp, rs6000, sh, sparc, sparclite, ! sparc64, vax, we32k. @end quotation *************** *** 1229,1244 **** @item rs6000-*-aix ! If you are running AIX version 3.2.5 and have XLC version 1.3.0.0, you ! must obtain XLC 1.3.0.1 by requesting PTF 421749 from IBM. Likewise, ! XLC-1.3.0.19 cannot correctly compile GNU CC; you must obtain ! XLC-1.3.0.24 by requesting PTF 432238 from IBM. If you are using an ! older version of AIX you may have an old version of the IBM assembler, ! which cannot correctly handle debugging directives. See the file ! @file{README.RS6000} for more details on both of these problems. ! ! The PowerPC and POWER2 architectures are now supported, but have not ! been very extensively tested due to lack of appropriate systems. Only ! AIX is supported on the PowerPC. GNU CC does not yet support the 64-bit ! PowerPC instructions. Objective C does not work on this architecture. --- 1229,1247 ---- @item rs6000-*-aix ! @itemx powerpc-*-aix ! Various early versions of each release of the IBM XLC compiler will not ! bootstrap GNU CC. Symptoms include differences between the stage2 and ! stage3 object files, and errors when compiling @file{libgcc.a} or ! @file{enquire}. Known problematic releases include: xlc-1.2.1.8, ! 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 ! the IBM assembler which does not accept debugging directives: assembler ! updates are available as PTFs. See the file @file{README.RS6000} for ! more details on both of these problems. ! ! Only AIX is supported on the PowerPC. GNU CC does not yet support the ! 64-bit PowerPC instructions. Objective C does not work on this architecture. 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/loop.c gcc-2.6.3/loop.c *** gcc-2.6.2/loop.c Mon Jul 18 21:39:27 1994 --- gcc-2.6.3/loop.c Wed Nov 16 19:29:26 1994 *************** *** 1686,1689 **** --- 1686,1691 ---- p = delete_insn (p); + while (p && GET_CODE (p) == NOTE) + p = NEXT_INSN (p); } 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/objc/objects.c gcc-2.6.3/objc/objects.c *** gcc-2.6.2/objc/objects.c Mon Jul 11 14:02:15 1994 --- gcc-2.6.3/objc/objects.c Fri Nov 18 19:10:56 1994 *************** *** 44,48 **** if (new!=nil) { ! memchr (new, 0, class->instance_size); new->class_pointer = class; } --- 44,48 ---- if (new!=nil) { ! memset (new, 0, class->instance_size); new->class_pointer = class; } 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/optabs.c gcc-2.6.3/optabs.c *** gcc-2.6.2/optabs.c Thu Oct 13 17:10:17 1994 --- gcc-2.6.3/optabs.c Tue Nov 29 16:51:18 1994 *************** *** 2052,2055 **** --- 2052,2139 ---- different but can be deduced from MODE. + UNSIGNEDP is relevant if extension is needed. */ + + rtx + expand_abs (mode, op0, target, unsignedp, safe) + enum machine_mode mode; + rtx op0; + rtx target; + int unsignedp; + int safe; + { + rtx temp, op1; + + /* First try to do it with a special abs instruction. */ + temp = expand_unop (mode, abs_optab, op0, target, 0); + if (temp != 0) + return temp; + + /* If this machine has expensive jumps, we can do integer absolute + value of X as (((signed) x >> (W-1)) ^ x) - ((signed) x >> (W-1)), + where W is the width of MODE. */ + + if (GET_MODE_CLASS (mode) == MODE_INT && BRANCH_COST >= 2) + { + rtx extended = expand_shift (RSHIFT_EXPR, mode, op0, + size_int (GET_MODE_BITSIZE (mode) - 1), + NULL_RTX, 0); + + temp = expand_binop (mode, xor_optab, extended, op0, target, 0, + OPTAB_LIB_WIDEN); + if (temp != 0) + temp = expand_binop (mode, sub_optab, temp, extended, target, 0, + OPTAB_LIB_WIDEN); + + if (temp != 0) + return temp; + } + + /* If that does not win, use conditional jump and negate. */ + op1 = gen_label_rtx (); + if (target == 0 || ! safe + || GET_MODE (target) != mode + || (GET_CODE (target) == MEM && MEM_VOLATILE_P (target)) + || (GET_CODE (target) == REG + && REGNO (target) < FIRST_PSEUDO_REGISTER)) + target = gen_reg_rtx (mode); + + emit_move_insn (target, op0); + NO_DEFER_POP; + + /* If this mode is an integer too wide to compare properly, + compare word by word. Rely on CSE to optimize constant cases. */ + if (GET_MODE_CLASS (mode) == MODE_INT && ! can_compare_p (mode)) + do_jump_by_parts_greater_rtx (mode, 0, target, const0_rtx, + NULL_RTX, op1); + else + { + temp = compare_from_rtx (target, CONST0_RTX (mode), GE, 0, mode, + NULL_RTX, 0); + if (temp == const1_rtx) + return target; + else if (temp != const0_rtx) + { + if (bcc_gen_fctn[(int) GET_CODE (temp)] != 0) + emit_jump_insn ((*bcc_gen_fctn[(int) GET_CODE (temp)]) (op1)); + else + abort (); + } + } + + op0 = expand_unop (mode, neg_optab, target, target, 0); + if (op0 != target) + emit_move_insn (target, op0); + emit_label (op1); + OK_DEFER_POP; + return target; + } + + /* Emit code to compute the absolute value of OP0, with result to + TARGET if convenient. (TARGET may be 0.) The return value says + where the result actually is to be found. + + MODE is the mode of the operand; the mode of the result is + different but can be deduced from MODE. + UNSIGNEDP is relevant for complex integer modes. */ *************** *** 2301,2307 **** INSNS is a block of code generated to perform the operation, not including the CLOBBER and final copy. All insns that compute intermediate values ! are first emitted, followed by the block as described above. Only ! INSNs are allowed in the block; no library calls or jumps may be ! present. TARGET, OP0, and OP1 are the output and inputs of the operations, --- 2385,2389 ---- INSNS is a block of code generated to perform the operation, not including the CLOBBER and final copy. All insns that compute intermediate values ! are first emitted, followed by the block as described above. TARGET, OP0, and OP1 are the output and inputs of the operations, *************** *** 2312,2316 **** If TARGET is not a register, INSNS is simply emitted with no special ! processing. The final insn emitted is returned. */ --- 2394,2399 ---- If TARGET is not a register, INSNS is simply emitted with no special ! processing. Likewise if anything in INSNS is not an INSN or if ! there is a libcall block inside INSNS. The final insn emitted is returned. */ *************** *** 2327,2330 **** --- 2410,2418 ---- if (GET_CODE (target) != REG || reload_in_progress) return emit_insns (insns); + else + for (insn = insns; insn; insn = NEXT_INSN (insn)) + if (GET_CODE (insn) != INSN + || find_reg_note (insn, REG_LIBCALL, NULL_RTX)) + return emit_insns (insns); /* First emit all insns that do not store into words of the output and remove *************** *** 2337,2343 **** next = NEXT_INSN (insn); - if (GET_CODE (insn) != INSN) - abort (); - if (GET_CODE (PATTERN (insn)) == SET) set = PATTERN (insn); --- 2425,2428 ---- *************** *** 3862,3867 **** init_integral_libfuncs (ashr_optab, "ashr", '3'); init_integral_libfuncs (lshr_optab, "lshr", '3'); - init_integral_libfuncs (rotl_optab, "rotl", '3'); - init_integral_libfuncs (rotr_optab, "rotr", '3'); init_integral_libfuncs (smin_optab, "min", '3'); init_floating_libfuncs (smin_optab, "min", '3'); --- 3947,3950 ---- 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/reorg.c gcc-2.6.3/reorg.c *** gcc-2.6.2/reorg.c Mon Oct 31 07:48:33 1994 --- gcc-2.6.3/reorg.c Tue Nov 15 19:34:05 1994 *************** *** 245,249 **** int, int *, int *)); static void try_merge_delay_insns PROTO((rtx, rtx)); ! static int redundant_insn_p PROTO((rtx, rtx, rtx)); static int own_thread_p PROTO((rtx, rtx, int)); static int find_basic_block PROTO((rtx)); --- 245,249 ---- int, int *, int *)); static void try_merge_delay_insns PROTO((rtx, rtx)); ! static rtx redundant_insn_p PROTO((rtx, rtx, rtx)); static int own_thread_p PROTO((rtx, rtx, int)); static int find_basic_block PROTO((rtx)); *************** *** 251,254 **** --- 251,255 ---- static int reorg_redirect_jump PROTO((rtx, rtx)); static void update_reg_dead_notes PROTO((rtx, rtx)); + static void update_reg_unused_notes PROTO((rtx, rtx)); static void update_live_status PROTO((rtx, rtx)); static rtx next_insn_no_annul PROTO((rtx)); *************** *** 1923,1927 **** gain in rare cases. */ ! static int redundant_insn_p (insn, target, delay_list) rtx insn; --- 1924,1928 ---- gain in rare cases. */ ! static rtx redundant_insn_p (insn, target, delay_list) rtx insn; *************** *** 2080,2084 **** /* Show that this insn will be used in the sequel. */ INSN_FROM_TARGET_P (candidate) = 0; ! return 1; } --- 2081,2085 ---- /* Show that this insn will be used in the sequel. */ INSN_FROM_TARGET_P (candidate) = 0; ! return candidate; } *************** *** 2102,2106 **** pat = PATTERN (trial); if (rtx_equal_p (pat, ipat)) ! return 1; /* Can't go any further if TRIAL conflicts with INSN. */ --- 2103,2107 ---- pat = PATTERN (trial); if (rtx_equal_p (pat, ipat)) ! return trial; /* Can't go any further if TRIAL conflicts with INSN. */ *************** *** 2277,2280 **** --- 2278,2308 ---- } } + + /* Delete any REG_UNUSED notes that exist on INSN but not on REDUNDANT_INSN. + + This handles the case of udivmodXi4 instructions which optimize their + output depending on whether any REG_UNUSED notes are present. + we must make sure that INSN calculates as many results as REDUNDANT_INSN + does. */ + + static void + update_reg_unused_notes (insn, redundant_insn) + rtx insn, redundant_insn; + { + rtx p, link, next; + + for (link = REG_NOTES (insn); link; link = next) + { + next = XEXP (link, 1); + + if (REG_NOTE_KIND (link) != REG_UNUSED + || GET_CODE (XEXP (link, 0)) != REG) + continue; + + if (! find_regno_note (redundant_insn, REG_UNUSED, + REGNO (XEXP (link, 0)))) + remove_note (insn, link); + } + } /* Marks registers possibly live at the current place being scanned by *************** *** 3280,3287 **** ) { /* If TRIAL is redundant with some insn before INSN, we don't actually need to add it to the delay list; we can merely pretend we did. */ ! if (redundant_insn_p (trial, insn, delay_list)) { if (own_thread) --- 3308,3317 ---- ) { + rtx prior_insn; + /* If TRIAL is redundant with some insn before INSN, we don't actually need to add it to the delay list; we can merely pretend we did. */ ! if (prior_insn = redundant_insn_p (trial, insn, delay_list)) { if (own_thread) *************** *** 3298,3302 **** } else ! new_thread = next_active_insn (trial); continue; --- 3328,3335 ---- } else ! { ! update_reg_unused_notes (prior_insn, trial); ! new_thread = next_active_insn (trial); ! } continue; *************** *** 3941,3944 **** --- 3974,3988 ---- if (invert_jump (delay_insn, label)) { + int i; + + /* Must update the INSN_FROM_TARGET_P bits now that + the branch is reversed, so that mark_target_live_regs + will handle the delay slot insn correctly. */ + for (i = 1; i < XVECLEN (PATTERN (insn), 0); i++) + { + rtx slot = XVECEXP (PATTERN (insn), 0, i); + INSN_FROM_TARGET_P (slot) = ! INSN_FROM_TARGET_P (slot); + } + delete_insn (next); next = insn; 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/texinfo.tex gcc-2.6.3/texinfo.tex *** gcc-2.6.2/texinfo.tex Sat Nov 12 06:40:23 1994 --- gcc-2.6.3/texinfo.tex Mon Nov 14 18:17:54 1994 *************** *** 25,29 **** % This automatically updates the version number based on RCS. \def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}} ! \deftexinfoversion$Revision: 2.136 $ \message{Loading texinfo package [Version \texinfoversion]:} --- 25,29 ---- % This automatically updates the version number based on RCS. \def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}} ! \deftexinfoversion$Revision: 2.137 $ \message{Loading texinfo package [Version \texinfoversion]:} 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/tree.c gcc-2.6.3/tree.c *** gcc-2.6.2/tree.c Sun Oct 2 19:14:00 1994 --- gcc-2.6.3/tree.c Tue Nov 15 19:28:59 1994 *************** *** 1916,1924 **** { case FUNCTION_DECL: ! /* Nested functions aren't static. Since taking their address involves a trampoline. */ ! if (decl_function_context (arg) != 0) ! return 0; ! /* ... fall through ... */ case VAR_DECL: return TREE_STATIC (arg) || DECL_EXTERNAL (arg); --- 1916,1922 ---- { case FUNCTION_DECL: ! /* Nested functions aren't static, since taking their address involves a trampoline. */ ! return decl_function_context (arg) == 0; case VAR_DECL: return TREE_STATIC (arg) || DECL_EXTERNAL (arg); 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/varasm.c gcc-2.6.3/varasm.c *** gcc-2.6.2/varasm.c Fri Jul 29 19:03:40 1994 --- gcc-2.6.3/varasm.c Mon Nov 21 22:22:11 1994 *************** *** 3382,3389 **** /* Eliminate the NON_LVALUE_EXPR_EXPR that makes a cast not be an lvalue. ! That way we get the constant (we hope) inside it. Also, strip ! off any NOP_EXPR that converts between two record or union types. */ while ((TREE_CODE (exp) == NOP_EXPR && (TREE_TYPE (exp) == TREE_TYPE (TREE_OPERAND (exp, 0)) || TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE || TREE_CODE (TREE_TYPE (exp)) == UNION_TYPE --- 3382,3390 ---- /* Eliminate the NON_LVALUE_EXPR_EXPR that makes a cast not be an lvalue. ! That way we get the constant (we hope) inside it. Also, strip off any ! NOP_EXPR that converts between two record, union, or array types. */ while ((TREE_CODE (exp) == NOP_EXPR && (TREE_TYPE (exp) == TREE_TYPE (TREE_OPERAND (exp, 0)) + || TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE || TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE || TREE_CODE (TREE_TYPE (exp)) == UNION_TYPE 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 TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x cp/parse.c -x cp/parse.h gcc-2.6.2/version.c gcc-2.6.3/version.c *** gcc-2.6.2/version.c Wed Nov 2 18:25:19 1994 --- gcc-2.6.3/version.c Mon Nov 14 18:12:47 1994 *************** *** 1 **** ! char *version_string = "2.6.2"; --- 1 ---- ! char *version_string = "2.6.3";