Changes for GCC version 2.7.2.1 from version 2.7.2. 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 -f Makefile.in in the directory of GCC sources, provided the necessary tools (etags, makeinfo, TeX and texi2dvi) are installed. Before applying these diffs, go to the directory gcc-2.7.2 and use the command patch -p1 feeding it the following diffs as input. Then rename the directory to gcc-2.7.2.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* gcc-2.7.2/ChangeLog gcc-2.7.2.1/ChangeLog *** gcc-2.7.2/ChangeLog Sun Nov 26 14:51:28 1995 --- gcc-2.7.2.1/ChangeLog Sat Jun 29 12:34:03 1996 *************** *** 1,2 **** --- 1,117 ---- + Sat Jun 29 12:33:39 1996 Richard Kenner + + * Version 2.7.2.1 released. + + Tue Jun 11 20:18:03 1996 Per Bothner + + * fix-header.c (read_scna_file): Invoke FIXPROTO_INIT if defined. + * alpha.h (FIXPROTO_INIT): Define new macro. + + Fri May 10 18:35:00 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) + + * loop.c (maybe_eliminate_biv_1): Disable all but two cases + of biv elimination with givs and restrict those two cases to + an ADD_VAL that is an address. + + Mon Apr 22 16:50:19 1996 Jeremy Bettis + + * objc/hash.c (hash_value_for_key): Prevent endless loop when 0 was + stored in a hashtable. + + Wed Apr 17 17:53:23 1996 Michael Meissner + + * rs6000.c (expand_block_move_mem): Copy RTX_UNCHANGING_P. + (expand_block_move): Copy dest/src to registers using + copy_addr_to_reg, call expand_block_move_mem to copy all of the + bits. + + Mon Apr 8 13:46:28 1996 Michael Meissner + + * rs6000.c (output_{prolog,epilog}): For V.4/eabi systems, change + prologue and epilogue so that accesses beyond the current stack + pointer are not done like they are for AIX. + + Fri Mar 26 05:43:06 1996 Torbjorn Granlund + + * vax.md (insv matcher): Call CC_STATUS_INIT. + * vax.h (NOTICE_UPDATE_CC): Handle ZERO_EXTRACT destination. + + Sat Mar 23 18:25:39 1996 J"orn Rennecke (amylaar@meolyon.hanse.de) + + * c-typeck.c (set_init_index): Check for use outside an array + initializer. + + Sat Mar 23 09:21:40 1996 Doug Evans + + * sparc/sparc.h (CONDITIONAL_REGISTER_USAGE): Don't unfix %g[234] + if fixed with -ffixed-. + + Wed Mar 13 20:36:10 1996 Jim Wilson + + * mips.c (mips_expand_prologue): Change TYPE_NEEDS_CONSTRUCTING to + TREE_ADDRESSABLE; + * pa.h (ASM_DECLARE_FUNCTION_NAME): Likewise. + + Tue Mar 12 14:36:02 1996 Jason Merrill + + * lex.c (real_yylex): Warn about using the `namespace' keyword. + + Tue Feb 27 08:18:12 1996 Richard Earnshaw (rearnsha@armltd.co.uk) + + * arm.md (mov{si,sf,df}cc and matchers): All conditional move + patterns must have a mode. + + Mon Feb 19 07:35:07 1996 Torbjorn Granlund + + * rs6000.md (not:SI with assign and compare): Fix typo. + + Wed Jan 24 18:00:12 1996 Brendan Kehoe + + * alpha.c (alpha_write_verstamp): Only emit MS_STAMP and LS_STAMP, + not the extra numbers. + + Wed Jan 17 21:22:40 1996 Brendan Kehoe + + * cp/decl2.c (grokfield): Call cplus_decl_attributes with the attrlist. + Pass a null tree to grokdeclarator for its ATTRLIST arg, since it's + only ever used for functions in it. + + Tue Jan 16 06:01:28 1996 Thomas Graichen + + * i386/freebsd.h (ASM_WEAKEN_LABEL): Deleted; not supported. + + Sun Jan 7 17:11:11 1996 David Edelsohn + + * collect2.c (scan_libraries): Correct Import File ID interpretation. + + Thu Dec 28 22:24:53 1995 Michael Meissner + + * rs6000.md (common mode functions): Add condition reg clobbers. + + Tue Dec 19 15:08:31 1995 Jason Merrill + + * collect2.c: Remove auto_export functionality. + + Mon Dec 18 18:40:34 1995 Jim Wilson + + * svr4.h (ASM_IDENTIFY_GCC): Don't output stab here. + (ASM_IDENTIFY_GCC_AFTER_SOURCE): Output stab here instead of + above. + + Sat Dec 16 07:03:33 1995 Philippe De Muyter (phdm@info.ucl.ac.be) + + * stor-layout.c (layout_record): When PCC_BITFIELD_TYPE_MATTERS, + compute bitpos using field_size % type_align instead of field_size. + + Fri Dec 15 18:41:50 1995 Philippe De Muyter (phdm@info.ucl.ac.be) + + * fixincludes (sys/wait.h): Add forward declaration of struct rusage + on AIX 3.2.5. + + Sat Dec 9 18:05:03 1995 Jim Wilson + + * expr.c (expand_expr, case INDIRECT_REF): Correct typo in May 8 + change. + Sun Nov 26 14:47:42 1995 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* gcc-2.7.2/INSTALL gcc-2.7.2.1/INSTALL *** gcc-2.7.2/INSTALL Mon Nov 6 10:21:10 1995 --- gcc-2.7.2.1/INSTALL Tue Jul 2 07:19:38 1996 *************** *** 658,671 **** `hppa*-*-*' ! There are two variants of this CPU, called 1.0 and 1.1, which have ! different machine descriptions. You must use the right one for ! your machine. All 7NN machines and 8N7 machines use 1.1, while ! all other 8NN machines use 1.0. ! ! The easiest way to handle this problem is to use `configure hpNNN' ! or `configure hpNNN-hpux', where NNN is the model number of the ! machine. Then `configure' will figure out if the machine is a 1.0 ! or 1.1. Use `uname -a' to find out the model number of your ! machine. `-g' does not work on HP-UX, since that system uses a peculiar --- 658,668 ---- `hppa*-*-*' ! There are several variants of the HP-PA processor which run a ! variety of operating systems. GNU CC must be configured to use ! the correct processor type and operating system, or GNU CC will ! not function correctly. The easiest way to handle this problem is ! to *not* specify a target when configuring GNU CC, the `configure' ! script will try to automatically determine the right processor ! type and operating system. `-g' does not work on HP-UX, since that system uses a peculiar *************** *** 674,713 **** highly recommend using GAS for all HP-PA configurations. ! You should be using GAS-2.3 (or later) along with GDB-4.12 (or later). These can be retrieved from all the traditional GNU ftp archive sites. ! Build GAS and install the resulting binary as: ! /usr/local/lib/gcc-lib/CONFIGURATION/GCCVERSION/as ! ! where CONFIGURATION is the configuration name (perhaps ! `hpNNN-hpux') and GCCVERSION is the GNU CC version number. Do ! this *before* starting the build process, otherwise you will get ! errors from the HPUX assembler while building `libgcc2.a'. The ! command ! ! make install-dir ! ! will create the necessary directory hierarchy so you can install ! GAS before building GCC. ! ! To enable debugging, configure GNU CC with the `--with-gnu-as' ! option before building. ! ! It has been reported that GNU CC produces invalid assembly code for ! 1.1 machines running HP-UX 8.02 when using the HP assembler. ! Typically the errors look like this: ! as: bug.s @line#15 [err#1060] ! Argument 0 or 2 in FARG upper ! - lookahead = ARGW1=FR,RTNVAL=GR ! as: foo.s @line#28 [err#1060] ! Argument 0 or 2 in FARG upper ! - lookahead = ARGW1=FR ! ! You can check the version of HP-UX you are running by executing ! the command `uname -r'. If you are indeed running HP-UX 8.02 on ! a PA and using the HP assembler then configure GCC with ! "hpNNN-hpux8.02". `i370-*-*' --- 671,684 ---- highly recommend using GAS for all HP-PA configurations. ! You should be using GAS-2.6 (or later) along with GDB-4.16 (or later). These can be retrieved from all the traditional GNU ftp archive sites. ! GAS will need to be installed into a directory before `/bin', ! `/usr/bin', and `/usr/ccs/bin' in your search path. You should ! install GAS before you build GNU CC. ! To enable debugging, you must configure GNU CC with the ! `--with-gnu-as' option before building. `i370-*-*' *************** *** 716,731 **** `i386-*-linuxoldld' ! Use this configuration to generate a.out binaries on Linux if you ! do not have gas/binutils version 2.5.2 or later installed. This is ! an obsolete configuration. `i386-*-linuxaout' ! Use this configuration to generate a.out binaries on Linux. This ! configuration is being superseded. You must use gas/binutils ! version 2.5.2 or later. `i386-*-linux' ! Use this configuration to generate ELF binaries on Linux. You must ! use gas/binutils version 2.5.2 or later. `i386-*-sco' --- 687,702 ---- `i386-*-linuxoldld' ! Use this configuration to generate a.out binaries on Linux-based ! GNU systems, if you do not have gas/binutils version 2.5.2 or later ! installed. This is an obsolete configuration. `i386-*-linuxaout' ! Use this configuration to generate a.out binaries on Linux-based ! GNU systems. This configuration is being superseded. You must use ! gas/binutils version 2.5.2 or later. `i386-*-linux' ! Use this configuration to generate ELF binaries on Linux-based GNU ! systems. You must use gas/binutils version 2.5.2 or later. `i386-*-sco' 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* gcc-2.7.2/NEWS gcc-2.7.2.1/NEWS *** gcc-2.7.2/NEWS Sun Nov 26 15:16:24 1995 --- gcc-2.7.2.1/NEWS Wed Jul 24 14:56:03 1996 *************** *** 1,2 **** --- 1,6 ---- + Noteworthy changes in GCC version 2.7.2.1: + + This release fixes some serious bugs discovered since the 2.7.2 release. + Noteworthy changes in GCC version 2.7.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* gcc-2.7.2/c-typeck.c gcc-2.7.2.1/c-typeck.c *** gcc-2.7.2/c-typeck.c Wed Oct 18 17:54:55 1995 --- gcc-2.7.2.1/c-typeck.c Sat Jun 29 12:27:15 1996 *************** *** 5724,5727 **** --- 5724,5729 ---- else if (last != 0 && TREE_CODE (last) != INTEGER_CST) error_init ("nonconstant array index in initializer%s", " for `%s'", NULL); + else if (! constructor_unfilled_index) + error_init ("array index in non-array initializer%s", " for `%s'", NULL); else if (tree_int_cst_lt (first, constructor_unfilled_index)) error_init ("duplicate array index in initializer%s", " for `%s'", NULL); 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* gcc-2.7.2/collect2.c gcc-2.7.2.1/collect2.c *** gcc-2.7.2/collect2.c Tue Sep 12 13:08:27 1995 --- gcc-2.7.2.1/collect2.c Sat Jun 29 12:26:23 1996 *************** *** 256,260 **** static char *o_file; /* .o for constructor/destructor list. */ static char *export_file; /* .x for AIX export list. */ - static int auto_export = 1; /* true if exporting everything. */ char *ldout; /* File for ld errors. */ static char *output_file; /* Output file for ld. */ --- 256,259 ---- *************** *** 1244,1256 **** break; - #ifdef COLLECT_EXPORT_LIST - case 'b': - if ((!strncmp (arg, "-bE:", 4) - || !strncmp (arg, "-bexport:", 9)) - && strcmp (arg, "-bexport:/usr/lib/libg.exp")) - auto_export = 0; - break; - #endif - case 'l': if (first_file) --- 1243,1246 ---- *************** *** 2555,2560 **** default: /* not a constructor or destructor */ - if (which_pass == PASS_OBJ && auto_export) - add_to_list (&exports, name); continue; } --- 2545,2548 ---- *************** *** 2607,2666 **** LDHDR ldh; char *impbuf; ! int idx; FSEEK (ldptr, ldsh.s_scnptr, BEGINNING); ! FREAD (&ldh, sizeof ldh, 1, ldptr); /* read import library list */ impbuf = alloca (ldh.l_istlen); FSEEK (ldptr, ldh.l_impoff + ldsh.s_scnptr, BEGINNING); FREAD (impbuf, ldh.l_istlen, 1, ldptr); ! idx = strlen (impbuf) + 1; ! idx += strlen (impbuf+idx) + 1; if (debug) fprintf (stderr, "LIBPATH=%s\n", impbuf); prefix_from_string (impbuf, &libpath); ! while (idx < ldh.l_istlen) { ! char *implib = impbuf + idx; char *impmem = implib + strlen (implib) + 1; ! char *soname = 0; LDFILE *libptr = NULL; struct prefix_list *pl; ARCHDR ah; ! idx += strlen (implib) + 1; ! if (!implib[0]) continue; ! idx += strlen (impmem) + 1; ! if (*implib == '/') { ! if (access (soname, R_OK) == 0) ! soname = implib; } else ! { ! char *temp = alloca (libpath.max_len + strlen (implib) + 1); ! for (pl = libpath.plist; pl; pl = pl->next) ! { ! strcpy (temp, pl->prefix); ! strcat (temp, implib); ! if (access (temp, R_OK) == 0) ! { ! soname = temp; ! break; ! } ! } ! } ! if (!soname) ! { ! fatal ("%s: library not found", implib); ! continue; ! } if (debug) ! { ! if (impmem[0]) ! fprintf (stderr, "%s (%s)\n", soname, impmem); ! else ! fprintf (stderr, "%s\n", soname); ! } ! ah.ar_name[0] = 0; do { --- 2595,2664 ---- LDHDR ldh; char *impbuf; ! int entry; ! FSEEK (ldptr, ldsh.s_scnptr, BEGINNING); ! FREAD (&ldh, sizeof (ldh), 1, ldptr); /* read import library list */ impbuf = alloca (ldh.l_istlen); FSEEK (ldptr, ldh.l_impoff + ldsh.s_scnptr, BEGINNING); FREAD (impbuf, ldh.l_istlen, 1, ldptr); ! if (debug) fprintf (stderr, "LIBPATH=%s\n", impbuf); prefix_from_string (impbuf, &libpath); ! ! /* skip LIBPATH and empty base and member fields */ ! impbuf += strlen (impbuf) + 3; ! for (entry = 1; entry < ldh.l_nimpid; ++entry) { ! char *impath = impbuf; ! char *implib = impath + strlen (impath) + 1; char *impmem = implib + strlen (implib) + 1; ! char *soname = NULL; ! char *trial; ! int pathlen; LDFILE *libptr = NULL; struct prefix_list *pl; ARCHDR ah; ! ! impbuf = impmem + strlen (impmem) + 1; ! if (debug) ! fprintf (stderr, "PATH+BASE=%s%s\n", impath, implib); ! /* Skip AIX kernel exports */ ! if (*impath == '/' && *(impath+1) == '\0' ! && strcmp (implib, "unix") == 0) continue; ! pathlen = strlen (impath); ! trial = alloca (MAX (pathlen + 1, libpath.max_len) ! + strlen (implib) + 1); ! if (*impath) { ! strcpy (trial, impath); ! if (impath[pathlen - 1] != '/') ! trial[pathlen++] = '/'; ! strcpy (trial + pathlen, implib); ! if (access (trial, R_OK) == 0) ! soname = trial; } else ! for (pl = libpath.plist; pl; pl = pl->next) ! { ! strcpy (trial, pl->prefix); ! strcat (trial, implib); ! if (access (trial, R_OK) == 0) ! { ! soname = trial; ! break; ! } ! } ! ! if (! soname) ! fatal ("%s: library not found", implib); if (debug) ! if (*impmem) ! fprintf (stderr, "%s (%s)\n", soname, impmem); ! else ! fprintf (stderr, "%s\n", soname); ! do { *************** *** 2672,2676 **** { LDFILE *memptr; ! if (!impmem[0]) fatal ("%s: no archive member specified", soname); ldahread (libptr, &ah); --- 2670,2674 ---- { LDFILE *memptr; ! if (! *impmem) fatal ("%s: no archive member specified", soname); ldahread (libptr, &ah); *************** *** 2689,2698 **** fatal ("%s: not an import library", soname); FSEEK (libptr, soldsh.s_scnptr, BEGINNING); ! if (FREAD (&soldh, sizeof soldh, 1, libptr) != 1) fatal ("%s: can't read loader section", soname); /*fprintf (stderr, "\tscanning %s\n", soname);*/ symcnt = soldh.l_nsyms; ! lsyms = (LDSYM*) alloca (symcnt * sizeof *lsyms); ! symcnt = FREAD (lsyms, sizeof *lsyms, symcnt, libptr); ldstrings = alloca (soldh.l_stlen); FSEEK (libptr, soldsh.s_scnptr+soldh.l_stoff, BEGINNING); --- 2687,2696 ---- fatal ("%s: not an import library", soname); FSEEK (libptr, soldsh.s_scnptr, BEGINNING); ! if (FREAD (&soldh, sizeof (soldh), 1, libptr) != 1) fatal ("%s: can't read loader section", soname); /*fprintf (stderr, "\tscanning %s\n", soname);*/ symcnt = soldh.l_nsyms; ! lsyms = (LDSYM*) alloca (symcnt * sizeof (*lsyms)); ! symcnt = FREAD (lsyms, sizeof (*lsyms), symcnt, libptr); ldstrings = alloca (soldh.l_stlen); FSEEK (libptr, soldsh.s_scnptr+soldh.l_stoff, BEGINNING); 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* gcc-2.7.2/config/alpha/alpha.c gcc-2.7.2.1/config/alpha/alpha.c *** gcc-2.7.2/config/alpha/alpha.c Sun Nov 26 12:05:44 1995 --- gcc-2.7.2.1/config/alpha/alpha.c Sat Jun 29 12:26:53 1996 *************** *** 1248,1257 **** { #ifdef MS_STAMP ! char *p; ! ! fprintf (file, "\t.verstamp %d %d ", MS_STAMP, LS_STAMP); ! for (p = version_string; *p != ' ' && *p != 0; p++) ! fprintf (file, "%c", *p == '.' ? ' ' : *p); ! fprintf (file, "\n"); #endif } --- 1248,1252 ---- { #ifdef MS_STAMP ! fprintf (file, "\t.verstamp %d %d\n", MS_STAMP, LS_STAMP); #endif } 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* gcc-2.7.2/config/alpha/alpha.h gcc-2.7.2.1/config/alpha/alpha.h *** gcc-2.7.2/config/alpha/alpha.h Sun Oct 22 07:36:59 1995 --- gcc-2.7.2.1/config/alpha/alpha.h Sat Jun 29 12:27:31 1996 *************** *** 2077,2080 **** --- 2077,2083 ---- #define NO_IMPLICIT_EXTERN_C + /* Also define __LANGUAGE_C__ when running fix-header. */ + #define FIXPROTO_INIT(CPPFILE) cpp_define (CPPFILE, "__LANGUAGE_C__") + /* The linker will stick __main into the .init section. */ #define HAS_INIT_SECTION 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* gcc-2.7.2/config/arm/arm.md gcc-2.7.2.1/config/arm/arm.md *** gcc-2.7.2/config/arm/arm.md Wed Nov 8 08:59:00 1995 --- gcc-2.7.2.1/config/arm/arm.md Sat Jun 29 12:26:02 1996 *************** *** 3317,3323 **** (define_expand "movsicc" [(set (match_operand:SI 0 "register_operand" "") ! (if_then_else (match_operand 1 "comparison_operator" "") ! (match_operand:SI 2 "arm_not_operand" "") ! (match_operand:SI 3 "register_operand" "")))] "" " --- 3317,3323 ---- (define_expand "movsicc" [(set (match_operand:SI 0 "register_operand" "") ! (if_then_else:SI (match_operand 1 "comparison_operator" "") ! (match_operand:SI 2 "arm_not_operand" "") ! (match_operand:SI 3 "register_operand" "")))] "" " *************** *** 3332,3338 **** (define_expand "movsfcc" [(set (match_operand:SF 0 "register_operand" "") ! (if_then_else (match_operand 1 "comparison_operator" "") ! (match_operand:SF 2 "nonmemory_operand" "") ! (match_operand:SF 3 "register_operand" "")))] "" " --- 3332,3338 ---- (define_expand "movsfcc" [(set (match_operand:SF 0 "register_operand" "") ! (if_then_else:SF (match_operand 1 "comparison_operator" "") ! (match_operand:SF 2 "nonmemory_operand" "") ! (match_operand:SF 3 "register_operand" "")))] "" " *************** *** 3347,3353 **** (define_expand "movdfcc" [(set (match_operand:DF 0 "register_operand" "") ! (if_then_else (match_operand 1 "comparison_operator" "") ! (match_operand:DF 2 "nonmemory_operand" "") ! (match_operand:DF 3 "register_operand" "")))] "TARGET_HARD_FLOAT" " --- 3347,3353 ---- (define_expand "movdfcc" [(set (match_operand:DF 0 "register_operand" "") ! (if_then_else:DF (match_operand 1 "comparison_operator" "") ! (match_operand:DF 2 "nonmemory_operand" "") ! (match_operand:DF 3 "register_operand" "")))] "TARGET_HARD_FLOAT" " *************** *** 3362,3369 **** (define_insn "*movsicc_insn" [(set (match_operand:SI 0 "register_operand" "=r,r") ! (if_then_else (match_operator 1 "comparison_operator" ! [(reg 24) (const_int 0)]) ! (match_operand:SI 2 "arm_not_operand" "rI,K") ! (match_operand:SI 3 "register_operand" "0,0")))] "" "@ --- 3362,3369 ---- (define_insn "*movsicc_insn" [(set (match_operand:SI 0 "register_operand" "=r,r") ! (if_then_else:SI (match_operator 1 "comparison_operator" ! [(reg 24) (const_int 0)]) ! (match_operand:SI 2 "arm_not_operand" "rI,K") ! (match_operand:SI 3 "register_operand" "0,0")))] "" "@ *************** *** 3375,3382 **** (define_insn "*movsfcc_hard_insn" [(set (match_operand:SF 0 "register_operand" "=f") ! (if_then_else (match_operator 1 "comparison_operator" ! [(reg 24) (const_int 0)]) ! (match_operand:SF 2 "register_operand" "f") ! (match_operand:SF 3 "register_operand" "0")))] "TARGET_HARD_FLOAT" "mvf%d1s\\t%0, %2" --- 3375,3382 ---- (define_insn "*movsfcc_hard_insn" [(set (match_operand:SF 0 "register_operand" "=f") ! (if_then_else:SF (match_operator 1 "comparison_operator" ! [(reg 24) (const_int 0)]) ! (match_operand:SF 2 "register_operand" "f") ! (match_operand:SF 3 "register_operand" "0")))] "TARGET_HARD_FLOAT" "mvf%d1s\\t%0, %2" *************** *** 3386,3393 **** (define_insn "*movsfcc_soft_insn" [(set (match_operand:SF 0 "register_operand" "=r") ! (if_then_else (match_operator 1 "comparison_operator" ! [(reg 24) (const_int 0)]) ! (match_operand:SF 2 "register_operand" "r") ! (match_operand:SF 3 "register_operand" "0")))] "TARGET_SOFT_FLOAT" "mov%d1\\t%0, %2" --- 3386,3393 ---- (define_insn "*movsfcc_soft_insn" [(set (match_operand:SF 0 "register_operand" "=r") ! (if_then_else:SF (match_operator 1 "comparison_operator" ! [(reg 24) (const_int 0)]) ! (match_operand:SF 2 "register_operand" "r") ! (match_operand:SF 3 "register_operand" "0")))] "TARGET_SOFT_FLOAT" "mov%d1\\t%0, %2" *************** *** 3397,3404 **** (define_insn "*movdfcc_insn" [(set (match_operand:DF 0 "register_operand" "=f") ! (if_then_else (match_operator 1 "comparison_operator" ! [(reg 24) (const_int 0)]) ! (match_operand:DF 2 "register_operand" "f") ! (match_operand:DF 3 "register_operand" "0")))] "TARGET_HARD_FLOAT" "mvf%d1d\\t%0, %2" --- 3397,3404 ---- (define_insn "*movdfcc_insn" [(set (match_operand:DF 0 "register_operand" "=f") ! (if_then_else:DF (match_operator 1 "comparison_operator" ! [(reg 24) (const_int 0)]) ! (match_operand:DF 2 "register_operand" "f") ! (match_operand:DF 3 "register_operand" "0")))] "TARGET_HARD_FLOAT" "mvf%d1d\\t%0, %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* gcc-2.7.2/config/i386/freebsd.h gcc-2.7.2.1/config/i386/freebsd.h *** gcc-2.7.2/config/i386/freebsd.h Thu Jun 15 09:44:56 1995 --- gcc-2.7.2.1/config/i386/freebsd.h Sat Jun 29 12:27:16 1996 *************** *** 121,130 **** #define SIZE_ASM_OP ".size" - /* This is how we tell the assembler that a symbol is weak. */ - - #define ASM_WEAKEN_LABEL(FILE,NAME) \ - do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \ - fputc ('\n', FILE); } while (0) - /* The following macro defines the format used to output the second operand of the .type assembler directive. Different svr4 assemblers --- 121,124 ---- 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* gcc-2.7.2/config/mips/mips.c gcc-2.7.2.1/config/mips/mips.c *** gcc-2.7.2/config/mips/mips.c Sun Oct 22 07:37:20 1995 --- gcc-2.7.2.1/config/mips/mips.c Sat Jun 29 12:26:44 1996 *************** *** 4929,4933 **** rtx entry_parm; ! if (TYPE_NEEDS_CONSTRUCTING (passed_type)) { passed_type = build_pointer_type (passed_type); --- 4929,4933 ---- rtx entry_parm; ! if (TREE_ADDRESSABLE (passed_type)) { passed_type = build_pointer_type (passed_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* gcc-2.7.2/config/msdos/top.sed gcc-2.7.2.1/config/msdos/top.sed *** gcc-2.7.2/config/msdos/top.sed Sun Nov 26 13:42:37 1995 --- gcc-2.7.2.1/config/msdos/top.sed Wed Jul 24 15:01:37 1996 *************** *** 20,26 **** /^tmake_file=/ d /^version=/ c\ ! version=2.7.2 /^mainversion=/ c\ ! mainversion=2.7.2 s/CC = cc/CC = gcc/ s/:\$/: \$/g --- 20,26 ---- /^tmake_file=/ d /^version=/ c\ ! version=2.7.2.1 /^mainversion=/ c\ ! mainversion=2.7.2.1 s/CC = cc/CC = gcc/ s/:\$/: \$/g 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* gcc-2.7.2/config/pa/pa.h gcc-2.7.2.1/config/pa/pa.h *** gcc-2.7.2/config/pa/pa.h Sun Nov 5 10:52:50 1995 --- gcc-2.7.2.1/config/pa/pa.h Sat Jun 29 12:26:47 1996 *************** *** 1068,1072 **** one general register. */ \ if (arg_size > 2 \ ! || TYPE_NEEDS_CONSTRUCTING (DECL_ARG_TYPE (parm)))\ arg_size = 1; \ if (arg_size == 2 && i <= 2) \ --- 1068,1072 ---- one general register. */ \ if (arg_size > 2 \ ! || TREE_ADDRESSABLE (DECL_ARG_TYPE (parm)))\ arg_size = 1; \ if (arg_size == 2 && i <= 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* gcc-2.7.2/config/rs6000/rs6000.c gcc-2.7.2.1/config/rs6000/rs6000.c *** gcc-2.7.2/config/rs6000/rs6000.c Fri Oct 27 06:45:25 1995 --- gcc-2.7.2.1/config/rs6000/rs6000.c Sat Jun 29 12:26:26 1996 *************** *** 1165,1168 **** --- 1165,1169 ---- { rtx mem = gen_rtx (MEM, mode, addr); + RTX_UNCHANGING_P (mem) = RTX_UNCHANGING_P (orig_mem); MEM_VOLATILE_P (mem) = MEM_VOLATILE_P (orig_mem); MEM_IN_STRUCT_P (mem) = MEM_IN_STRUCT_P (orig_mem); *************** *** 1184,1187 **** --- 1185,1190 ---- rtx operands[]; { + rtx orig_dest = operands[0]; + rtx orig_src = operands[1]; rtx bytes_rtx = operands[2]; rtx align_rtx = operands[3]; *************** *** 1225,1230 **** /* Move the address into scratch registers. */ ! dest_reg = copy_addr_to_reg (XEXP (operands[0], 0)); ! src_reg = copy_addr_to_reg (XEXP (operands[1], 0)); if (TARGET_STRING) /* string instructions are available */ --- 1228,1233 ---- /* Move the address into scratch registers. */ ! dest_reg = copy_addr_to_reg (XEXP (orig_dest, 0)); ! src_reg = copy_addr_to_reg (XEXP (orig_src, 0)); if (TARGET_STRING) /* string instructions are available */ *************** *** 1243,1248 **** { move_bytes = (bytes > 32) ? 32 : bytes; ! emit_insn (gen_movstrsi_8reg (dest_reg, ! src_reg, GEN_INT ((move_bytes == 32) ? 0 : move_bytes), align_rtx)); --- 1246,1251 ---- { move_bytes = (bytes > 32) ? 32 : bytes; ! emit_insn (gen_movstrsi_8reg (expand_block_move_mem (BLKmode, dest_reg, orig_dest), ! expand_block_move_mem (BLKmode, src_reg, orig_src), GEN_INT ((move_bytes == 32) ? 0 : move_bytes), align_rtx)); *************** *** 1257,1262 **** { move_bytes = (bytes > 24) ? 24 : bytes; ! emit_insn (gen_movstrsi_6reg (dest_reg, ! src_reg, GEN_INT (move_bytes), align_rtx)); --- 1260,1265 ---- { move_bytes = (bytes > 24) ? 24 : bytes; ! emit_insn (gen_movstrsi_6reg (expand_block_move_mem (BLKmode, dest_reg, orig_dest), ! expand_block_move_mem (BLKmode, src_reg, orig_src), GEN_INT (move_bytes), align_rtx)); *************** *** 1269,1274 **** { move_bytes = (bytes > 16) ? 16 : bytes; ! emit_insn (gen_movstrsi_4reg (dest_reg, ! src_reg, GEN_INT (move_bytes), align_rtx)); --- 1272,1277 ---- { move_bytes = (bytes > 16) ? 16 : bytes; ! emit_insn (gen_movstrsi_4reg (expand_block_move_mem (BLKmode, dest_reg, orig_dest), ! expand_block_move_mem (BLKmode, src_reg, orig_src), GEN_INT (move_bytes), align_rtx)); *************** *** 1277,1282 **** { /* move up to 8 bytes at a time */ move_bytes = (bytes > 8) ? 8 : bytes; ! emit_insn (gen_movstrsi_2reg (dest_reg, ! src_reg, GEN_INT (move_bytes), align_rtx)); --- 1280,1285 ---- { /* move up to 8 bytes at a time */ move_bytes = (bytes > 8) ? 8 : bytes; ! emit_insn (gen_movstrsi_2reg (expand_block_move_mem (BLKmode, dest_reg, orig_dest), ! expand_block_move_mem (BLKmode, src_reg, orig_src), GEN_INT (move_bytes), align_rtx)); *************** *** 1286,1291 **** move_bytes = 4; tmp_reg = gen_reg_rtx (SImode); ! emit_move_insn (tmp_reg, gen_rtx (MEM, SImode, src_reg)); ! emit_move_insn (gen_rtx (MEM, SImode, dest_reg), tmp_reg); } else if (bytes == 2 && (align >= 2 || !STRICT_ALIGNMENT)) --- 1289,1294 ---- move_bytes = 4; tmp_reg = gen_reg_rtx (SImode); ! emit_move_insn (tmp_reg, expand_block_move_mem (SImode, src_reg, orig_src)); ! emit_move_insn (expand_block_move_mem (SImode, dest_reg, orig_dest), tmp_reg); } else if (bytes == 2 && (align >= 2 || !STRICT_ALIGNMENT)) *************** *** 1293,1298 **** move_bytes = 2; tmp_reg = gen_reg_rtx (HImode); ! emit_move_insn (tmp_reg, gen_rtx (MEM, HImode, src_reg)); ! emit_move_insn (gen_rtx (MEM, HImode, dest_reg), tmp_reg); } else if (bytes == 1) /* move 1 byte */ --- 1296,1301 ---- move_bytes = 2; tmp_reg = gen_reg_rtx (HImode); ! emit_move_insn (tmp_reg, expand_block_move_mem (HImode, src_reg, orig_src)); ! emit_move_insn (expand_block_move_mem (HImode, dest_reg, orig_dest), tmp_reg); } else if (bytes == 1) /* move 1 byte */ *************** *** 1300,1311 **** move_bytes = 1; tmp_reg = gen_reg_rtx (QImode); ! emit_move_insn (tmp_reg, gen_rtx (MEM, QImode, src_reg)); ! emit_move_insn (gen_rtx (MEM, QImode, dest_reg), tmp_reg); } else { /* move up to 4 bytes at a time */ move_bytes = (bytes > 4) ? 4 : bytes; ! emit_insn (gen_movstrsi_1reg (dest_reg, ! src_reg, GEN_INT (move_bytes), align_rtx)); --- 1303,1314 ---- move_bytes = 1; tmp_reg = gen_reg_rtx (QImode); ! emit_move_insn (tmp_reg, expand_block_move_mem (QImode, src_reg, orig_src)); ! emit_move_insn (expand_block_move_mem (QImode, dest_reg, orig_dest), tmp_reg); } else { /* move up to 4 bytes at a time */ move_bytes = (bytes > 4) ? 4 : bytes; ! emit_insn (gen_movstrsi_1reg (expand_block_move_mem (BLKmode, dest_reg, orig_dest), ! expand_block_move_mem (BLKmode, src_reg, orig_src), GEN_INT (move_bytes), align_rtx)); *************** *** 1338,1347 **** /* Generate the appropriate load and store, saving the stores for later */ ! if (bytes >= 4 && (align >= 4 || !STRICT_ALIGNMENT)) { move_bytes = 4; tmp_reg = gen_reg_rtx (SImode); ! emit_insn (gen_movsi (tmp_reg, gen_rtx (MEM, SImode, src_addr))); ! stores[ num_reg++ ] = gen_movsi (gen_rtx (MEM, SImode, dest_addr), tmp_reg); } else if (bytes >= 2 && (align >= 2 || !STRICT_ALIGNMENT)) --- 1341,1357 ---- /* Generate the appropriate load and store, saving the stores for later */ ! if (bytes >= 8 && TARGET_64BIT && (align >= 8 || !STRICT_ALIGNMENT)) ! { ! move_bytes = 8; ! tmp_reg = gen_reg_rtx (DImode); ! emit_insn (gen_movdi (tmp_reg, expand_block_move_mem (DImode, src_addr, orig_src))); ! stores[ num_reg++ ] = gen_movdi (expand_block_move_mem (DImode, dest_addr, orig_dest), tmp_reg); ! } ! else if (bytes >= 4 && (align >= 4 || !STRICT_ALIGNMENT)) { move_bytes = 4; tmp_reg = gen_reg_rtx (SImode); ! emit_insn (gen_movsi (tmp_reg, expand_block_move_mem (SImode, src_addr, orig_src))); ! stores[ num_reg++ ] = gen_movsi (expand_block_move_mem (SImode, dest_addr, orig_dest), tmp_reg); } else if (bytes >= 2 && (align >= 2 || !STRICT_ALIGNMENT)) *************** *** 1349,1354 **** move_bytes = 2; tmp_reg = gen_reg_rtx (HImode); ! emit_insn (gen_movhi (tmp_reg, gen_rtx (MEM, HImode, src_addr))); ! stores[ num_reg++ ] = gen_movhi (gen_rtx (MEM, HImode, dest_addr), tmp_reg); } else --- 1359,1364 ---- move_bytes = 2; tmp_reg = gen_reg_rtx (HImode); ! emit_insn (gen_movsi (tmp_reg, expand_block_move_mem (HImode, src_addr, orig_src))); ! stores[ num_reg++ ] = gen_movhi (expand_block_move_mem (HImode, dest_addr, orig_dest), tmp_reg); } else *************** *** 1356,1361 **** move_bytes = 1; tmp_reg = gen_reg_rtx (QImode); ! emit_insn (gen_movqi (tmp_reg, gen_rtx (MEM, QImode, src_addr))); ! stores[ num_reg++ ] = gen_movqi (gen_rtx (MEM, QImode, dest_addr), tmp_reg); } --- 1366,1371 ---- move_bytes = 1; tmp_reg = gen_reg_rtx (QImode); ! emit_insn (gen_movsi (tmp_reg, expand_block_move_mem (QImode, src_addr, orig_src))); ! stores[ num_reg++ ] = gen_movqi (expand_block_move_mem (QImode, dest_addr, orig_dest), tmp_reg); } *************** *** 1368,1376 **** } ! if (num_reg > 0) ! { ! for (i = 0; i < num_reg; i++) ! emit_insn (stores[i]); ! } } --- 1378,1383 ---- } ! for (i = 0; i < num_reg; i++) ! emit_insn (stores[i]); } *************** *** 2612,2615 **** --- 2619,2625 ---- rs6000_stack_t *info = rs6000_stack_info (); char *store_reg = (TARGET_64BIT) ? "\tstd %s,%d(%s)" : "\t{st|stw} %s,%d(%s)\n"; + int reg_size = info->reg_size; + int sp_reg = 1; + int sp_offset = 0; if (TARGET_DEBUG_STACK) *************** *** 2645,2648 **** --- 2655,2684 ---- } + /* For V.4, update stack before we do any saving and set back pointer. */ + #ifdef USING_SVR4_H + if (info->push_p && TARGET_V4_CALLS) + { + if (info->total_size < 32767) + { + asm_fprintf (file, + (!TARGET_64BIT) ? "\t{stu|stwu} %s,%d(%s)\n" : "\tstdu %s,%d(%s)\n", + reg_names[1], - info->total_size, reg_names[1]); + sp_offset = info->total_size; + } + else + { + int neg_size = - info->total_size; + sp_reg = 12; + asm_fprintf (file, "\tmr %s,%s\n", reg_names[12], reg_names[1]); + asm_fprintf (file, "\t{liu|lis} %s,%d\n\t{oril|ori} %s,%s,%d\n", + reg_names[0], (neg_size >> 16) & 0xffff, + reg_names[0], reg_names[0], neg_size & 0xffff); + asm_fprintf (file, + (!TARGET_64BIT) ? "\t{stux|stwux} %s,%s,%s\n" : "\tstdux %s,%s,%s\n", + reg_names[1], reg_names[1], reg_names[0]); + } + } + #endif + /* If we use the link register, get it into r0. */ if (info->lr_save_p) *************** *** 2650,2654 **** /* If we need to save CR, put it into r12. */ ! if (info->cr_save_p) asm_fprintf (file, "\tmfcr %s\n", reg_names[12]); --- 2686,2690 ---- /* If we need to save CR, put it into r12. */ ! if (info->cr_save_p && sp_reg != 12) asm_fprintf (file, "\tmfcr %s\n", reg_names[12]); *************** *** 2659,2666 **** { int regno = info->first_fp_reg_save; ! int loc = info->fp_save_offset; for ( ; regno < 64; regno++, loc += 8) ! asm_fprintf (file, "\tstfd %s,%d(%s)\n", reg_names[regno], loc, reg_names[1]); } else if (info->first_fp_reg_save != 64) --- 2695,2702 ---- { int regno = info->first_fp_reg_save; ! int loc = info->fp_save_offset + sp_offset; for ( ; regno < 64; regno++, loc += 8) ! asm_fprintf (file, "\tstfd %s,%d(%s)\n", reg_names[regno], loc, reg_names[sp_reg]); } else if (info->first_fp_reg_save != 64) *************** *** 2672,2680 **** { int regno = info->first_gp_reg_save; ! int loc = info->gp_save_offset; ! int reg_size = (TARGET_64BIT) ? 8 : 4; for ( ; regno < 32; regno++, loc += reg_size) ! asm_fprintf (file, store_reg, reg_names[regno], loc, reg_names[1]); } --- 2708,2715 ---- { int regno = info->first_gp_reg_save; ! int loc = info->gp_save_offset + sp_offset; for ( ; regno < 32; regno++, loc += reg_size) ! asm_fprintf (file, store_reg, reg_names[regno], loc, reg_names[sp_reg]); } *************** *** 2682,2698 **** asm_fprintf (file, "\t{stm|stmw} %s,%d(%s)\n", reg_names[info->first_gp_reg_save], ! info->gp_save_offset, ! reg_names[1]); /* Save lr if we used it. */ if (info->lr_save_p) ! asm_fprintf (file, store_reg, reg_names[0], info->lr_save_offset, reg_names[1]); /* Save CR if we use any that must be preserved. */ if (info->cr_save_p) ! asm_fprintf (file, store_reg, reg_names[12], info->cr_save_offset, reg_names[1]); ! /* Update stack and set back pointer. */ ! if (info->push_p) { if (info->total_size < 32767) --- 2717,2749 ---- asm_fprintf (file, "\t{stm|stmw} %s,%d(%s)\n", reg_names[info->first_gp_reg_save], ! info->gp_save_offset + sp_offset, ! reg_names[sp_reg]); /* Save lr if we used it. */ if (info->lr_save_p) ! asm_fprintf (file, store_reg, reg_names[0], info->lr_save_offset + sp_offset, ! reg_names[sp_reg]); /* Save CR if we use any that must be preserved. */ if (info->cr_save_p) ! { ! if (sp_reg == 12) /* If r12 is used to hold the original sp, copy cr now */ ! { ! asm_fprintf (file, "\tmfcr %s\n", reg_names[0]); ! asm_fprintf (file, store_reg, reg_names[0], ! info->cr_save_offset + sp_offset, ! reg_names[sp_reg]); ! } ! else ! asm_fprintf (file, store_reg, reg_names[12], info->cr_save_offset + sp_offset, ! reg_names[sp_reg]); ! } ! /* Update stack and set back pointer and we have already done so for V.4. */ ! if (info->push_p ! #ifdef USING_SVR4_H ! && TARGET_AIX_CALLS ! #endif ! ) { if (info->total_size < 32767) *************** *** 2792,2795 **** --- 2843,2848 ---- char *load_reg = (TARGET_64BIT) ? "\tld %s,%d(%s)" : "\t{l|lwz} %s,%d(%s)\n"; rtx insn = get_last_insn (); + int sp_reg = 1; + int sp_offset = 0; int i; *************** *** 2809,2815 **** if (frame_pointer_needed || current_function_calls_alloca || info->total_size > 32767) ! asm_fprintf (file, load_reg, reg_names[1], 0, reg_names[1]); else if (info->push_p) { if (TARGET_NEW_MNEMONICS) asm_fprintf (file, "\taddi %s,%s,%d\n", reg_names[1], reg_names[1], info->total_size); --- 2862,2882 ---- if (frame_pointer_needed || current_function_calls_alloca || info->total_size > 32767) ! { ! /* Under V.4, don't reset the stack pointer until after we're done ! loading the saved registers. */ ! #ifdef USING_SVR4_H ! if (TARGET_V4_CALLS) ! sp_reg = 11; ! #endif ! ! asm_fprintf (file, load_reg, reg_names[sp_reg], 0, reg_names[1]); ! } else if (info->push_p) { + #ifdef USING_SVR4_H + if (TARGET_V4_CALLS) + sp_offset = info->total_size; + else + #endif if (TARGET_NEW_MNEMONICS) asm_fprintf (file, "\taddi %s,%s,%d\n", reg_names[1], reg_names[1], info->total_size); *************** *** 2820,2828 **** /* Get the old lr if we saved it. */ if (info->lr_save_p) ! asm_fprintf (file, load_reg, reg_names[0], info->lr_save_offset, reg_names[1]); /* Get the old cr if we saved it. */ if (info->cr_save_p) ! asm_fprintf (file, load_reg, reg_names[12], info->cr_save_offset, reg_names[1]); /* Set LR here to try to overlap restores below. */ --- 2887,2895 ---- /* Get the old lr if we saved it. */ if (info->lr_save_p) ! asm_fprintf (file, load_reg, reg_names[0], info->lr_save_offset + sp_offset, reg_names[sp_reg]); /* Get the old cr if we saved it. */ if (info->cr_save_p) ! asm_fprintf (file, load_reg, reg_names[12], info->cr_save_offset + sp_offset, reg_names[sp_reg]); /* Set LR here to try to overlap restores below. */ *************** *** 2834,2842 **** { int regno = info->first_gp_reg_save; ! int loc = info->gp_save_offset; int reg_size = (TARGET_64BIT) ? 8 : 4; for ( ; regno < 32; regno++, loc += reg_size) ! asm_fprintf (file, load_reg, reg_names[regno], loc, reg_names[1]); } --- 2901,2909 ---- { int regno = info->first_gp_reg_save; ! int loc = info->gp_save_offset + sp_offset; int reg_size = (TARGET_64BIT) ? 8 : 4; for ( ; regno < 32; regno++, loc += reg_size) ! asm_fprintf (file, load_reg, reg_names[regno], loc, reg_names[sp_reg]); } *************** *** 2844,2849 **** asm_fprintf (file, "\t{lm|lmw} %s,%d(%s)\n", reg_names[info->first_gp_reg_save], ! info->gp_save_offset, ! reg_names[1]); /* Restore fpr's if we can do it without calling a function. */ --- 2911,2916 ---- asm_fprintf (file, "\t{lm|lmw} %s,%d(%s)\n", reg_names[info->first_gp_reg_save], ! info->gp_save_offset + sp_offset, ! reg_names[sp_reg]); /* Restore fpr's if we can do it without calling a function. */ *************** *** 2851,2858 **** { int regno = info->first_fp_reg_save; ! int loc = info->fp_save_offset; for ( ; regno < 64; regno++, loc += 8) ! asm_fprintf (file, "\tlfd %s,%d(%s)\n", reg_names[regno], loc, reg_names[1]); } --- 2918,2925 ---- { int regno = info->first_fp_reg_save; ! int loc = info->fp_save_offset + sp_offset; for ( ; regno < 64; regno++, loc += 8) ! asm_fprintf (file, "\tlfd %s,%d(%s)\n", reg_names[regno], loc, reg_names[sp_reg]); } *************** *** 2864,2867 **** --- 2931,2947 ---- + (regs_ever_live[71] != 0) * 0x10 + (regs_ever_live[72] != 0) * 0x8, reg_names[12]); + + /* If this is V.4, unwind the stack pointer after all of the loads have been done */ + #ifdef USING_SVR4_H + if (sp_offset) + { + if (TARGET_NEW_MNEMONICS) + asm_fprintf (file, "\taddi %s,%s,%d\n", reg_names[1], reg_names[1], sp_offset); + else + asm_fprintf (file, "\tcal %s,%d(%s)\n", reg_names[1], sp_offset, reg_names[1]); + } + else if (sp_reg != 1) + asm_fprintf (file, "\tmr %s,%s\n", reg_names[1], reg_names[sp_reg]); + #endif /* If we have to restore more than two FP registers, branch to 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* gcc-2.7.2/config/rs6000/rs6000.md gcc-2.7.2.1/config/rs6000/rs6000.md *** gcc-2.7.2/config/rs6000/rs6000.md Sun Nov 26 13:53:45 1995 --- gcc-2.7.2.1/config/rs6000/rs6000.md Sat Jun 29 12:27:24 1996 *************** *** 815,819 **** (not:SI (match_dup 1)))] "" ! "nor. %0,%2,%1" [(set_attr "type" "compare")]) --- 815,819 ---- (not:SI (match_dup 1)))] "" ! "nor. %0,%1,%1" [(set_attr "type" "compare")]) *************** *** 1493,1497 **** (umod:SI (reg:SI 3) (reg:SI 4))) (clobber (match_scratch:SI 0 "=l")) ! (clobber (reg:SI 0))] "! TARGET_POWER && ! TARGET_POWERPC" "bla __divus") --- 1493,1499 ---- (umod:SI (reg:SI 3) (reg:SI 4))) (clobber (match_scratch:SI 0 "=l")) ! (clobber (reg:SI 0)) ! (clobber (match_scratch:CC 1 "=x")) ! (clobber (reg:CC 69))] "! TARGET_POWER && ! TARGET_POWERPC" "bla __divus") *************** *** 1508,1512 **** (udiv:SI (reg:SI 3) (reg:SI 4))) (clobber (match_scratch:SI 0 "=l")) ! (clobber (reg:SI 0))] "! TARGET_POWER && ! TARGET_POWERPC" "bla __quous") --- 1510,1516 ---- (udiv:SI (reg:SI 3) (reg:SI 4))) (clobber (match_scratch:SI 0 "=l")) ! (clobber (reg:SI 0)) ! (clobber (match_scratch:CC 1 "=x")) ! (clobber (reg:CC 69))] "! TARGET_POWER && ! TARGET_POWERPC" "bla __quous") *************** *** 4824,4831 **** (define_expand "movstrsi" ! [(parallel [(set (match_operand:BLK 0 "memory_operand" "") ! (match_operand:BLK 1 "memory_operand" "")) ! (use (match_operand:SI 2 "general_operand" "")) ! (use (match_operand:SI 3 "immediate_operand" ""))])] "" " --- 4828,4835 ---- (define_expand "movstrsi" ! [(parallel [(set (match_operand:BLK 0 "" "") ! (match_operand:BLK 1 "" "")) ! (use (match_operand:SI 2 "" "")) ! (use (match_operand:SI 3 "" ""))])] "" " *************** *** 4840,4847 **** ;; register allocator doesn't have a clue about allocating 8 word registers (define_expand "movstrsi_8reg" ! [(parallel [(set (mem:BLK (match_operand:SI 0 "register_operand" "")) ! (mem:BLK (match_operand:SI 1 "register_operand" ""))) ! (use (match_operand:SI 2 "immediate_operand" "")) ! (use (match_operand:SI 3 "immediate_operand" "")) (clobber (reg:SI 5)) (clobber (reg:SI 6)) --- 4844,4851 ---- ;; register allocator doesn't have a clue about allocating 8 word registers (define_expand "movstrsi_8reg" ! [(parallel [(set (match_operand 0 "" "") ! (match_operand 1 "" "")) ! (use (match_operand 2 "" "")) ! (use (match_operand 3 "" "")) (clobber (reg:SI 5)) (clobber (reg:SI 6)) *************** *** 4876,4880 **** && REGNO (operands[4]) == 5" "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2" ! [(set_attr "length" "8")]) (define_insn "" --- 4880,4885 ---- && REGNO (operands[4]) == 5" "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2" ! [(set_attr "type" "load") ! (set_attr "length" "8")]) (define_insn "" *************** *** 4898,4910 **** && REGNO (operands[4]) == 5" "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2" ! [(set_attr "length" "8")]) ;; Move up to 24 bytes at a time. The fixed registers are needed because the ;; register allocator doesn't have a clue about allocating 6 word registers (define_expand "movstrsi_6reg" ! [(parallel [(set (mem:BLK (match_operand:SI 0 "register_operand" "")) ! (mem:BLK (match_operand:SI 1 "register_operand" ""))) ! (use (match_operand:SI 2 "immediate_operand" "")) ! (use (match_operand:SI 3 "immediate_operand" "")) (clobber (reg:SI 7)) (clobber (reg:SI 8)) --- 4903,4916 ---- && REGNO (operands[4]) == 5" "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2" ! [(set_attr "type" "load") ! (set_attr "length" "8")]) ;; Move up to 24 bytes at a time. The fixed registers are needed because the ;; register allocator doesn't have a clue about allocating 6 word registers (define_expand "movstrsi_6reg" ! [(parallel [(set (match_operand 0 "" "") ! (match_operand 1 "" "")) ! (use (match_operand 2 "" "")) ! (use (match_operand 3 "" "")) (clobber (reg:SI 7)) (clobber (reg:SI 8)) *************** *** 4935,4939 **** && REGNO (operands[4]) == 7" "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2" ! [(set_attr "length" "8")]) (define_insn "" --- 4941,4946 ---- && REGNO (operands[4]) == 7" "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2" ! [(set_attr "type" "load") ! (set_attr "length" "8")]) (define_insn "" *************** *** 4955,4967 **** && REGNO (operands[4]) == 7" "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2" ! [(set_attr "length" "8")]) ;; Move up to 16 bytes at a time, using 4 fixed registers to avoid spill problems ;; with TImode (define_expand "movstrsi_4reg" ! [(parallel [(set (mem:BLK (match_operand:SI 0 "register_operand" "")) ! (mem:BLK (match_operand:SI 1 "register_operand" ""))) ! (use (match_operand:SI 2 "immediate_operand" "")) ! (use (match_operand:SI 3 "immediate_operand" "")) (clobber (reg:SI 9)) (clobber (reg:SI 10)) --- 4962,4975 ---- && REGNO (operands[4]) == 7" "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2" ! [(set_attr "type" "load") ! (set_attr "length" "8")]) ;; Move up to 16 bytes at a time, using 4 fixed registers to avoid spill problems ;; with TImode (define_expand "movstrsi_4reg" ! [(parallel [(set (match_operand 0 "" "") ! (match_operand 1 "" "")) ! (use (match_operand 2 "" "")) ! (use (match_operand 3 "" "")) (clobber (reg:SI 9)) (clobber (reg:SI 10)) *************** *** 4988,4992 **** && REGNO (operands[4]) == 9" "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2" ! [(set_attr "length" "8")]) (define_insn "" --- 4996,5001 ---- && REGNO (operands[4]) == 9" "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2" ! [(set_attr "type" "load") ! (set_attr "length" "8")]) (define_insn "" *************** *** 5006,5017 **** && REGNO (operands[4]) == 9" "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2" ! [(set_attr "length" "8")]) ;; Move up to 8 bytes at a time. (define_expand "movstrsi_2reg" ! [(parallel [(set (mem:BLK (match_operand:SI 0 "register_operand" "")) ! (mem:BLK (match_operand:SI 1 "register_operand" ""))) ! (use (match_operand:SI 2 "immediate_operand" "")) ! (use (match_operand:SI 3 "immediate_operand" "")) (clobber (match_scratch:DI 4 "")) (clobber (match_scratch:SI 5 ""))])] --- 5015,5027 ---- && REGNO (operands[4]) == 9" "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2" ! [(set_attr "type" "load") ! (set_attr "length" "8")]) ;; Move up to 8 bytes at a time. (define_expand "movstrsi_2reg" ! [(parallel [(set (match_operand 0 "" "") ! (match_operand 1 "" "")) ! (use (match_operand 2 "" "")) ! (use (match_operand 3 "" "")) (clobber (match_scratch:DI 4 "")) (clobber (match_scratch:SI 5 ""))])] *************** *** 5029,5033 **** && INTVAL (operands[2]) > 4 && INTVAL (operands[2]) <= 8" "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2" ! [(set_attr "length" "8")]) (define_insn "" --- 5039,5044 ---- && INTVAL (operands[2]) > 4 && INTVAL (operands[2]) <= 8" "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2" ! [(set_attr "type" "load") ! (set_attr "length" "8")]) (define_insn "" *************** *** 5041,5052 **** && INTVAL (operands[2]) > 4 && INTVAL (operands[2]) <= 8" "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2" ! [(set_attr "length" "8")]) ;; Move up to 4 bytes at a time. (define_expand "movstrsi_1reg" ! [(parallel [(set (mem:BLK (match_operand:SI 0 "register_operand" "")) ! (mem:BLK (match_operand:SI 1 "register_operand" ""))) ! (use (match_operand:SI 2 "immediate_operand" "")) ! (use (match_operand:SI 3 "immediate_operand" "")) (clobber (match_scratch:SI 4 "")) (clobber (match_scratch:SI 5 ""))])] --- 5052,5064 ---- && INTVAL (operands[2]) > 4 && INTVAL (operands[2]) <= 8" "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2" ! [(set_attr "type" "load") ! (set_attr "length" "8")]) ;; Move up to 4 bytes at a time. (define_expand "movstrsi_1reg" ! [(parallel [(set (match_operand 0 "" "") ! (match_operand 1 "" "")) ! (use (match_operand 2 "" "")) ! (use (match_operand 3 "" "")) (clobber (match_scratch:SI 4 "")) (clobber (match_scratch:SI 5 ""))])] *************** *** 5064,5068 **** && INTVAL (operands[2]) > 0 && INTVAL (operands[2]) <= 4" "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2" ! [(set_attr "length" "8")]) (define_insn "" --- 5076,5081 ---- && INTVAL (operands[2]) > 0 && INTVAL (operands[2]) <= 4" "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2" ! [(set_attr "type" "load") ! (set_attr "length" "8")]) (define_insn "" *************** *** 5076,5080 **** && INTVAL (operands[2]) > 0 && INTVAL (operands[2]) <= 4" "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2" ! [(set_attr "length" "8")]) --- 5089,5094 ---- && INTVAL (operands[2]) > 0 && INTVAL (operands[2]) <= 4" "{lsi|lswi} %4,%1,%2\;{stsi|stswi} %4,%0,%2" ! [(set_attr "type" "load") ! (set_attr "length" "8")]) 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* gcc-2.7.2/config/sparc/sparc.h gcc-2.7.2.1/config/sparc/sparc.h *** gcc-2.7.2/config/sparc/sparc.h Sun Nov 26 14:29:39 1995 --- gcc-2.7.2.1/config/sparc/sparc.h Sat Jun 29 12:25:54 1996 *************** *** 622,637 **** fixed_regs[regno] = 1; \ } \ ! if (! TARGET_APP_REGS) \ ! { \ ! fixed_regs[2] = 1; \ ! fixed_regs[3] = 1; \ ! fixed_regs[4] = 1; \ ! } \ ! else \ ! { \ ! fixed_regs[2] = 0; \ ! fixed_regs[3] = 0; \ ! fixed_regs[4] = TARGET_MEDANY != 0; \ ! } \ if (TARGET_FLAT) \ { \ --- 622,629 ---- fixed_regs[regno] = 1; \ } \ ! /* Don't unfix g2-g4 if they were fixed with -ffixed-. */ \ ! fixed_regs[2] |= ! TARGET_APP_REGS; \ ! fixed_regs[3] |= ! TARGET_APP_REGS; \ ! fixed_regs[4] |= ! TARGET_APP_REGS || TARGET_MEDANY; \ if (TARGET_FLAT) \ { \ 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* gcc-2.7.2/config/svr4.h gcc-2.7.2.1/config/svr4.h *** gcc-2.7.2/config/svr4.h Sat Nov 4 10:35:33 1995 --- gcc-2.7.2.1/config/svr4.h Sat Jun 29 12:26:17 1996 *************** *** 274,279 **** /* When using stabs, gcc2_compiled must be a stabs entry, not an ! ordinary symbol, or gdb won't see it. The stabs entry must be ! before the N_SO in order for gdb to find it. */ #define ASM_IDENTIFY_GCC(FILE) \ --- 274,281 ---- /* When using stabs, gcc2_compiled must be a stabs entry, not an ! ordinary symbol, or gdb won't see it. Furthermore, since gdb reads ! the input piecemeal, starting with each N_SO, it's a lot easier if ! the gcc2 flag symbol is *after* the N_SO rather than before it. So ! we emit an N_OPT stab there. */ #define ASM_IDENTIFY_GCC(FILE) \ *************** *** 282,286 **** if (write_symbols != DBX_DEBUG) \ fputs ("gcc2_compiled.:\n", FILE); \ ! else \ fputs ("\t.stabs\t\"gcc2_compiled.\", 0x3c, 0, 0, 0\n", FILE); \ } \ --- 284,294 ---- if (write_symbols != DBX_DEBUG) \ fputs ("gcc2_compiled.:\n", FILE); \ ! } \ ! while (0) ! ! #define ASM_IDENTIFY_GCC_AFTER_SOURCE(FILE) \ ! do \ ! { \ ! if (write_symbols == DBX_DEBUG) \ fputs ("\t.stabs\t\"gcc2_compiled.\", 0x3c, 0, 0, 0\n", FILE); \ } \ 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* gcc-2.7.2/config/vax/vax.h gcc-2.7.2.1/config/vax/vax.h *** gcc-2.7.2/config/vax/vax.h Sun Oct 29 07:42:25 1995 --- gcc-2.7.2.1/config/vax/vax.h Sat Jun 29 12:26:21 1996 *************** *** 964,968 **** { if (GET_CODE (SET_SRC (EXP)) == CALL) \ CC_STATUS_INIT; \ ! else if (GET_CODE (SET_DEST (EXP)) != PC) \ { cc_status.flags = 0; \ cc_status.value1 = SET_DEST (EXP); \ --- 964,969 ---- { if (GET_CODE (SET_SRC (EXP)) == CALL) \ CC_STATUS_INIT; \ ! else if (GET_CODE (SET_DEST (EXP)) != ZERO_EXTRACT \ ! && GET_CODE (SET_DEST (EXP)) != PC) \ { cc_status.flags = 0; \ cc_status.value1 = SET_DEST (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* gcc-2.7.2/config/vax/vax.md gcc-2.7.2.1/config/vax/vax.md *** gcc-2.7.2/config/vax/vax.md Thu Jun 15 16:58:54 1995 --- gcc-2.7.2.1/config/vax/vax.md Sat Jun 29 12:26:19 1996 *************** *** 1342,1345 **** --- 1342,1346 ---- = adj_offsettable_operand (operands[0], INTVAL (operands[2]) / 8); + CC_STATUS_INIT; if (INTVAL (operands[1]) == 8) return \"movb %3,%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* gcc-2.7.2/config/winnt/config-nt.sed gcc-2.7.2.1/config/winnt/config-nt.sed *** gcc-2.7.2/config/winnt/config-nt.sed Sun Nov 26 11:21:27 1995 --- gcc-2.7.2.1/config/winnt/config-nt.sed Wed Jul 24 15:08:11 1996 *************** *** 14,18 **** /^lang_options_files=/ d /^version=/ c\ ! version=2.7.2 s/CC = cc/CC = cl/ s/^SHELL =.*/SHELL =/ --- 14,18 ---- /^lang_options_files=/ d /^version=/ c\ ! version=2.7.2.1 s/CC = cc/CC = cl/ s/^SHELL =.*/SHELL =/ 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* gcc-2.7.2/cp/decl2.c gcc-2.7.2.1/cp/decl2.c *** gcc-2.7.2/cp/decl2.c Wed Oct 11 22:28:51 1995 --- gcc-2.7.2.1/cp/decl2.c Sat Jun 29 12:26:05 1996 *************** *** 1364,1368 **** value = grokdeclarator (declarator, declspecs, FIELD, init != 0, ! raises, attrlist); if (! value) return value; /* friend or constructor went bad. */ --- 1364,1368 ---- value = grokdeclarator (declarator, declspecs, FIELD, init != 0, ! raises, NULL_TREE); if (! value) return value; /* friend or constructor went bad. */ *************** *** 1477,1480 **** --- 1477,1484 ---- /* The corresponding pop_obstacks is in cp_finish_decl. */ push_obstacks_nochange (); + + if (attrlist) + cplus_decl_attributes (value, TREE_PURPOSE (attrlist), + TREE_VALUE (attrlist)); if (TREE_CODE (value) == VAR_DECL) 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* gcc-2.7.2/cp/lex.c gcc-2.7.2.1/cp/lex.c *** gcc-2.7.2/cp/lex.c Wed Oct 11 22:30:15 1995 --- gcc-2.7.2.1/cp/lex.c Sat Jun 29 12:27:28 1996 *************** *** 3314,3317 **** --- 3314,3325 ---- token_buffer[1] = 0; } + else if (ptr->token == NAMESPACE) + { + static int warned; + if (! warned) + warning ("namespaces are mostly broken in this version of g++"); + + warned = 1; + } value = (int) ptr->token; 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* gcc-2.7.2/expr.c gcc-2.7.2.1/expr.c *** gcc-2.7.2/expr.c Sun Nov 26 11:18:07 1995 --- gcc-2.7.2.1/expr.c Sat Jun 29 12:26:15 1996 *************** *** 4583,4587 **** never change. Languages where it can never change should also set TREE_STATIC. */ ! RTX_UNCHANGING_P (temp) = TREE_READONLY (exp) | TREE_STATIC (exp); return temp; } --- 4583,4587 ---- never change. Languages where it can never change should also set TREE_STATIC. */ ! RTX_UNCHANGING_P (temp) = TREE_READONLY (exp) & TREE_STATIC (exp); return temp; } 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* gcc-2.7.2/fix-header.c gcc-2.7.2.1/fix-header.c *** gcc-2.7.2/fix-header.c Mon Aug 28 06:23:21 1995 --- gcc-2.7.2.1/fix-header.c Sat Jun 29 12:27:29 1996 *************** *** 532,536 **** --- 532,547 ---- CPP_OPTIONS (&scan_in)->no_line_commands = 1; + #ifdef FIXPROTO_INIT + /* Some targets may assume special definitions (for example + OSF header files assume __LANGUAGE_C__). These macros + are normally passed to cpplib by gcc - but we here invoke + cpplib directly, without going through gcc. + Handle these and other target-dependent initializations here. */ + FIXPROTO_INIT (&scan_in); + #endif + + /* Actually (pre-)process the header file. */ scan_decls (&scan_in, argc, argv); + check_macro_names (&scan_in, include_entry->required); check_macro_names (&scan_in, include_entry->extra); 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* gcc-2.7.2/fixincludes gcc-2.7.2.1/fixincludes *** gcc-2.7.2/fixincludes Sun Nov 26 14:22:28 1995 --- gcc-2.7.2.1/fixincludes Sat Jun 29 12:26:49 1996 *************** *** 1521,1524 **** --- 1521,1551 ---- fi + # sys/wait.h on AIX 3.2.5 puts the declaration of wait3 before the definition + # of struct rusage, so the prototype (added by fixproto) causes havoc. + file=sys/wait.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 ] \ + && grep 'bos325,' ${LIB}/$file >/dev/null; then + echo Fixing $file, wait3 declaration + sed -e '/^extern pid_t wait3();$/i\ + struct rusage; + '\ + ${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. # Note that version 3 of the NeXT system has wait.h in a different directory, 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* gcc-2.7.2/gcc.texi gcc-2.7.2.1/gcc.texi *** gcc-2.7.2/gcc.texi Sun Nov 26 11:25:18 1995 --- gcc-2.7.2.1/gcc.texi Wed Jul 24 14:57:41 1996 *************** *** 148,156 **** @center Richard M. Stallman @sp 3 ! @center Last updated 26 November 1995 @sp 1 @c The version number appears twice more in this file. ! @center for version 2.7.2 @page @vskip 0pt plus 1filll --- 148,156 ---- @center Richard M. Stallman @sp 3 ! @center Last updated 29 June 1996 @sp 1 @c The version number appears twice more in this file. ! @center for version 2.7.2.1 @page @vskip 0pt plus 1filll *************** *** 905,920 **** Lotus won lawsuits against two small companies, which were thus put out ! of business. Then they sued Borland; they won in the trial court (no surprise, since it was the same court that had ruled for Lotus twice ! before), but the decision was reversed by the court of appeals, with ! help from the League for Programming Freedom in the form of a ! friend-of-the-court brief. We are now waiting to see if the Supreme ! Court will hear the case. If it does, the League for Programming ! Freedom will again submit a brief. ! ! The battle is not over. Just this summer a company that produced a ! simulator for a CDC computer was shut down by a copyright lawsuit by ! CDC, which charged that the simulator infringed the copyright on the ! manuals for the computer. If the monopolists get their way, they will hobble the software field: --- 905,925 ---- Lotus won lawsuits against two small companies, which were thus put out ! of business. Then Lotus sued Borland; Lotus won in the trial court (no surprise, since it was the same court that had ruled for Lotus twice ! before), but the court of appeals ruled in favor of Borland, which was ! assisted by a friend-of-the-court brief from the League for Programming ! Freedom. ! ! Lotus appealed the case to the Supreme Court, which heard the case but ! was unable to reach a decision. This failure means that the appeals ! court decision stands, in one portion of the United States, and may ! influence the other appeals courts, but it does not set a nationwide ! precedent. The battle is not over, and it is not limited to the United ! States. ! ! The battle is extending into other areas of software as well. In 1995 a ! company that produced a simulator for a CDC computer was shut down by a ! copyright lawsuit, in which CDC charged that the simulator infringed the ! copyright on the manuals for the computer. If the monopolists get their way, they will hobble the software field: *************** *** 1239,1247 **** @item ! On Linux SLS 1.01, there is a problem with @file{libc.a}: it does not ! contain the obstack functions. However, GNU CC assumes that the obstack ! functions are in @file{libc.a} when it is the GNU C library. To work ! around this problem, change the @code{__GNU_LIBRARY__} conditional ! around line 31 to @samp{#if 1}. @item --- 1244,1252 ---- @item ! On SLS 1.01, a Linux-based GNU system, there is a problem with ! @file{libc.a}: it does not contain the obstack functions. However, GNU ! CC assumes that the obstack functions are in @file{libc.a} when it is ! the GNU C library. To work around this problem, change the ! @code{__GNU_LIBRARY__} conditional around line 31 to @samp{#if 1}. @item 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* gcc-2.7.2/install.texi gcc-2.7.2.1/install.texi *** gcc-2.7.2/install.texi Sat Nov 4 10:28:11 1995 --- gcc-2.7.2.1/install.texi Sat Jun 29 12:27:34 1996 *************** *** 779,792 **** @item hppa*-*-* ! There are two variants of this CPU, called 1.0 and 1.1, which have ! different machine descriptions. You must use the right one for your ! machine. All 7@var{nn} machines and 8@var{n}7 machines use 1.1, while ! all other 8@var{nn} machines use 1.0. ! ! The easiest way to handle this problem is to use @samp{configure ! hp@var{nnn}} or @samp{configure hp@var{nnn}-hpux}, where @var{nnn} is ! the model number of the machine. Then @file{configure} will figure out ! if the machine is a 1.0 or 1.1. Use @samp{uname -a} to find out the ! model number of your machine. @samp{-g} does not work on HP-UX, since that system uses a peculiar --- 779,788 ---- @item hppa*-*-* ! There are several variants of the HP-PA processor which run a variety ! of operating systems. GNU CC must be configured to use the correct ! processor type and operating system, or GNU CC will not function correctly. ! The easiest way to handle this problem is to @emph{not} specify a target ! when configuring GNU CC, the @file{configure} script will try to automatically ! determine the right processor type and operating system. @samp{-g} does not work on HP-UX, since that system uses a peculiar *************** *** 795,840 **** highly recommend using GAS for all HP-PA configurations. ! You should be using GAS-2.3 (or later) along with GDB-4.12 (or later). These can be retrieved from all the traditional GNU ftp archive sites. ! Build GAS and install the resulting binary as: ! @example ! /usr/local/lib/gcc-lib/@var{configuration}/@var{gccversion}/as ! @end example ! ! @noindent ! where @var{configuration} is the configuration name (perhaps ! @samp{hp@var{nnn}-hpux}) and @var{gccversion} is the GNU CC version ! number. Do this @emph{before} starting the build process, otherwise you will ! get errors from the HPUX assembler while building @file{libgcc2.a}. The ! command ! ! @example ! make install-dir ! @end example ! ! @noindent ! will create the necessary directory hierarchy so you can install GAS before ! building GCC. ! ! To enable debugging, configure GNU CC with the @samp{--with-gnu-as} option ! before building. ! ! It has been reported that GNU CC produces invalid assembly code for ! 1.1 machines running HP-UX 8.02 when using the HP assembler. Typically ! the errors look like this: ! @example ! as: bug.s @@line#15 [err#1060] ! Argument 0 or 2 in FARG upper ! - lookahead = ARGW1=FR,RTNVAL=GR ! as: foo.s @@line#28 [err#1060] ! Argument 0 or 2 in FARG upper ! - lookahead = ARGW1=FR ! @end example ! ! You can check the version of HP-UX you are running by executing the command ! @samp{uname -r}. If you are indeed running HP-UX 8.02 on a PA and ! using the HP assembler then configure GCC with "hp@var{nnn}-hpux8.02". @item i370-*-* --- 791,803 ---- highly recommend using GAS for all HP-PA configurations. ! You should be using GAS-2.6 (or later) along with GDB-4.16 (or later). These can be retrieved from all the traditional GNU ftp archive sites. ! GAS will need to be installed into a directory before @code{/bin}, ! @code{/usr/bin}, and @code{/usr/ccs/bin} in your search path. You ! should install GAS before you build GNU CC. ! To enable debugging, you must configure GNU CC with the @samp{--with-gnu-as} ! option before building. @item i370-*-* *************** *** 843,858 **** @item i386-*-linuxoldld ! Use this configuration to generate a.out binaries on Linux if you do not ! have gas/binutils version 2.5.2 or later installed. This is an obsolete ! configuration. @item i386-*-linuxaout ! Use this configuration to generate a.out binaries on Linux. This configuration ! is being superseded. You must use gas/binutils version 2.5.2 or ! later. @item i386-*-linux ! Use this configuration to generate ELF binaries on Linux. You must ! use gas/binutils version 2.5.2 or later. @item i386-*-sco --- 806,821 ---- @item i386-*-linuxoldld ! Use this configuration to generate a.out binaries on Linux-based GNU ! systems, if you do not have gas/binutils version 2.5.2 or later ! installed. This is an obsolete configuration. @item i386-*-linuxaout ! Use this configuration to generate a.out binaries on Linux-based GNU ! systems. This configuration is being superseded. You must use ! gas/binutils version 2.5.2 or later. @item i386-*-linux ! Use this configuration to generate ELF binaries on Linux-based GNU ! systems. You must use gas/binutils version 2.5.2 or later. @item i386-*-sco 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* gcc-2.7.2/loop.c gcc-2.7.2.1/loop.c *** gcc-2.7.2/loop.c Tue Oct 3 12:17:16 1995 --- gcc-2.7.2.1/loop.c Sat Jun 29 12:26:59 1996 *************** *** 6042,6046 **** /* Can replace with any giv that was reduced and that has (MULT_VAL != 0) and (ADD_VAL == 0). ! Require a constant for MULT_VAL, so we know it's nonzero. */ for (v = bl->giv; v; v = v->next_iv) --- 6042,6048 ---- /* Can replace with any giv that was reduced and that has (MULT_VAL != 0) and (ADD_VAL == 0). ! Require a constant for MULT_VAL, so we know it's nonzero. ! ??? We disable this optimization to avoid potential ! overflows. */ for (v = bl->giv; v; v = v->next_iv) *************** *** 6048,6052 **** && v->add_val == const0_rtx && ! v->ignore && ! v->maybe_dead && v->always_computable ! && v->mode == mode) { if (! eliminate_p) --- 6050,6055 ---- && v->add_val == const0_rtx && ! v->ignore && ! v->maybe_dead && v->always_computable ! && v->mode == mode ! && 0) { if (! eliminate_p) *************** *** 6068,6077 **** /* Look for a giv with (MULT_VAL != 0) and (ADD_VAL != 0); replace test insn with a compare insn (cmp REDUCED_GIV ADD_VAL). ! Require a constant for MULT_VAL, so we know it's nonzero. */ for (v = bl->giv; v; v = v->next_iv) if (CONSTANT_P (v->mult_val) && v->mult_val != const0_rtx && ! v->ignore && ! v->maybe_dead && v->always_computable ! && v->mode == mode) { if (! eliminate_p) --- 6071,6087 ---- /* Look for a giv with (MULT_VAL != 0) and (ADD_VAL != 0); replace test insn with a compare insn (cmp REDUCED_GIV ADD_VAL). ! Require a constant for MULT_VAL, so we know it's nonzero. ! ??? Do this only if ADD_VAL is a pointer to avoid a potential ! overflow problem. */ for (v = bl->giv; v; v = v->next_iv) if (CONSTANT_P (v->mult_val) && v->mult_val != const0_rtx && ! v->ignore && ! v->maybe_dead && v->always_computable ! && v->mode == mode ! && (GET_CODE (v->add_val) == SYMBOL_REF ! || GET_CODE (v->add_val) == LABEL_REF ! || GET_CODE (v->add_val) == CONST ! || (GET_CODE (v->add_val) == REG ! && REGNO_POINTER_FLAG (REGNO (v->add_val))))) { if (! eliminate_p) *************** *** 6128,6132 **** for (v = bl->giv; v; v = v->next_iv) if (CONSTANT_P (v->mult_val) && INTVAL (v->mult_val) > 0 ! && CONSTANT_P (v->add_val) && ! v->ignore && ! v->maybe_dead && v->always_computable && v->mode == mode) --- 6138,6146 ---- for (v = bl->giv; v; v = v->next_iv) if (CONSTANT_P (v->mult_val) && INTVAL (v->mult_val) > 0 ! && (GET_CODE (v->add_val) == SYMBOL_REF ! || GET_CODE (v->add_val) == LABEL_REF ! || GET_CODE (v->add_val) == CONST ! || (GET_CODE (v->add_val) == REG ! && REGNO_POINTER_FLAG (REGNO (v->add_val)))) && ! v->ignore && ! v->maybe_dead && v->always_computable && v->mode == mode) *************** *** 6161,6170 **** /* Look for giv with positive constant mult_val and nonconst add_val. ! Insert insns to calculate new compare value. */ for (v = bl->giv; v; v = v->next_iv) if (CONSTANT_P (v->mult_val) && INTVAL (v->mult_val) > 0 && ! v->ignore && ! v->maybe_dead && v->always_computable ! && v->mode == mode) { rtx tem; --- 6175,6186 ---- /* Look for giv with positive constant mult_val and nonconst add_val. ! Insert insns to calculate new compare value. ! ??? Turn this off due to possible overflow. */ for (v = bl->giv; v; v = v->next_iv) if (CONSTANT_P (v->mult_val) && INTVAL (v->mult_val) > 0 && ! v->ignore && ! v->maybe_dead && v->always_computable ! && v->mode == mode ! && 0) { rtx tem; *************** *** 6192,6201 **** { /* Look for giv with constant positive mult_val and nonconst ! add_val. Insert insns to compute new compare value. */ for (v = bl->giv; v; v = v->next_iv) if (CONSTANT_P (v->mult_val) && INTVAL (v->mult_val) > 0 && ! v->ignore && ! v->maybe_dead && v->always_computable ! && v->mode == mode) { rtx tem; --- 6208,6219 ---- { /* Look for giv with constant positive mult_val and nonconst ! add_val. Insert insns to compute new compare value. ! ??? Turn this off due to possible overflow. */ for (v = bl->giv; v; v = v->next_iv) if (CONSTANT_P (v->mult_val) && INTVAL (v->mult_val) > 0 && ! v->ignore && ! v->maybe_dead && v->always_computable ! && v->mode == mode ! && 0) { rtx tem; 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* gcc-2.7.2/objc/hash.c gcc-2.7.2.1/objc/hash.c *** gcc-2.7.2/objc/hash.c Thu Jun 15 08:39:14 1995 --- gcc-2.7.2.1/objc/hash.c Sat Jun 29 12:26:52 1996 *************** *** 244,250 **** if (node) do { ! if ((*cache->compare_func)(node->key, key)) retval = node->value; ! else node = node->next; } while (!retval && node); --- 244,251 ---- if (node) do { ! if ((*cache->compare_func)(node->key, key)) { retval = node->value; ! break; ! } else node = node->next; } while (!retval && node); 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* gcc-2.7.2/stor-layout.c gcc-2.7.2.1/stor-layout.c *** gcc-2.7.2/stor-layout.c Tue Oct 3 19:15:07 1995 --- gcc-2.7.2.1/stor-layout.c Sat Jun 29 12:26:51 1996 *************** *** 438,442 **** or because it exceeds maximum_field_alignment. */ if (const_size / type_align ! != (const_size + field_size - 1) / type_align) const_size = CEIL (const_size, type_align) * type_align; } --- 438,442 ---- or because it exceeds maximum_field_alignment. */ if (const_size / type_align ! != (const_size + (field_size % type_align) - 1) / type_align) const_size = CEIL (const_size, type_align) * type_align; } 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* gcc-2.7.2/version.c gcc-2.7.2.1/version.c *** gcc-2.7.2/version.c Sun Nov 26 11:20:43 1995 --- gcc-2.7.2.1/version.c Wed Jul 24 14:55:50 1996 *************** *** 1 **** ! char *version_string = "2.7.2"; --- 1 ---- ! char *version_string = "2.7.2.1";