Changes for GCC version 2.4.4, from 2.4.3.1. Changes in files you can reconstruct with etags, makeinfo, TeX and Bison have been omitted. diff -rc2P gcc-2.4.3.1/ChangeLog gcc-2.4.4/ChangeLog *** gcc-2.4.3.1/ChangeLog Tue Jun 1 18:45:52 1993 --- gcc-2.4.4/ChangeLog Sat Jun 19 05:56:54 1993 *************** *** 1,2 **** --- 1,376 ---- + Sat Jun 19 03:57:57 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Version 2.4.4 released. + + * toplev.c (compile_file): For static decl never defined, + use just warning, not pedwarn. + + * dbxout.c (dbxout_type): Reinstall #if 0 around code for + outputting structure types, that confused GDB. + + Fri Jun 18 20:06:35 1993 Pat Rankin (rankin@eql.caltech.edu) + + * vms.h (MAYBE_VMS_FUNCTION_PROLOGUE): adjust stack pointer by 4 prior + to calling C$MAIN_ARGS, otherwise POSIX edition of that routine dies. + + Fri Jun 18 14:21:14 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Makefile.in (clean): Delete objc-headers subdir. + + * config/m68k/m68k.h (TARGET_SWITCHES): For -m68020, -m68000 and + -msoft-float, turn off 01400 bits. + + * Makefile.in (gcc.xtar.gz): Renamed from gcc.tar.z. + (dist): Change the dependency. + (mostlyclean): Delete tmp-gcc.xtar.gz. + + * c-iterate.c (save_exprs): New variable. + (collect_iterators): Don't process a SAVE_EXPR twice. + (iterator_expand): Clear save_exprs. + + * Makefile.in (gcc.info, cpp.info): Actually cd to srcdir. + + * configure (clipper-intergraph-clix*): Use install-headers-cpio. + + Fri Jun 18 13:37:16 1993 Michael Meissner (meissner@osf.org) + + * mips.c (output_block_move): Don't abort if one of the input + registers is allocated as a scratch register, just use fewer + scratch registers. + + Fri Jun 18 00:25:16 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * config/i386/i386.c (call_insn_operand): Require constant address + be a general_operand. + (expander_call_insn_operand): New fn (what call_insn_operand was). + * config/i386/i386.md (call_pop, call, call_value_pop, call_value) + (untyped_call): Use expander_call_insn_operand. + + Thu Jun 17 17:58:11 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * config/pa/pa.md (decrement_and_branch_until_zero): + Pattern disabled. + + Thu Jun 17 13:34:20 1993 Jim Wilson (wilson@sphagnum.cygnus.com) + + * unroll.c (calculate_giv_inc): Add new variables increment_total + and tries, and new label retry, to handle case where increment is + two add instructions. + + Thu Jun 17 12:13:53 1993 Minh Tran-Le (mtranle@paris) + + * config/i386/aix386ng.h: Changes for non-GAS gcc. + (ASM_FILE_START_1): Always output .noopt because /bin/as is buggy. + Added #undef to {INIT,FINI,CTORS,DTORS}_SECTION_ASM_OP, ... when + not using GAS. + (CONST_SECTION_FUNCTION): Override svr3 default. + (EXTRA_SECTION_FUNCTIONS): Override svr3 default. + (OBJECT_FORMAT_COFF): Added define for collect2. + (MY_ISCOFF): For collect2 to handle aix and svr3 object file. + + * config/i386/aix386.h (USE_GAS): New define. + + Thu Jun 17 00:26:38 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * reg-stack.c (stack_result_p): New function. + (stack_reg_life_analysis): Use that. + + * final.c (output_addr_const): Don't insert a leading space + in the CONST_DOUBLE_HIGH != 0 case. + + Thu Jun 17 00:09:19 1993 Jeff Law (law@snake.cs.utah.edu) + + * pa.h (LEGITIMATE_CONSTANT_P): Reject function addresses for now. + + Wed Jun 16 20:14:10 1993 Brendan Kehoe (brendan@lisa.cygnus.com) + + * cp-typeck.c (build_unary_op): Make sure it's the global fn `main' + before complaining about taking the address of it. + + Wed Jun 16 16:24:31 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * config/i386/xm-sysv4.h (SMALL_ARG_MAX): Defined. + + * c-typeck.c (check_format): Don't crash if cur_type is an error_mark. + Handle identifier_node as the TYPE_NAME. + + Mon Jun 14 16:09:24 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) + + * calls.c (expand_call): If PCC_STATIC_STRUCT_RETURN and TARGET + is zero, copy result from static location. + + * cse.c (invalidate_skipped_set): Promote "nonscalar" to "all". + + Mon Jun 14 16:01:34 1993 Karl Berry (karl@cs.umb.edu) + + * fixincludes (stdio.h math.h ctype.h sys/{limits.h,fcntl.h,dirent.h}): + Fix STDC/POSIX and other things for Interactive Unix 2.2 or later. + + Mon Jun 14 04:41:38 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * reload.c (make_memloc): Don't reuse a memloc. + + Sun Jun 13 16:01:37 1993 Jeff Law (law@snake.cs.utah.edu) + + * pa.md (iorsi3): Explicitly set length to 1. + (andsi3, lshrsi3, rotrsi3, rotlsi3): Likewise. + (ashift and ashiftrt by const_int_operand): Likewise. + ((and (ashift)) optimizer): Likewise. + + Sun Jun 13 20:23:04 1993 Stephen Moshier (moshier@world.std.com) + + * real.c (ltoe, ultoe, eifrac, euifrac): Handle 64-bit longs. + (SFMODE_NAN, DFMODE_NAN, XFMODE_NAN, TFMODE_NAN): New macros + permit definitions of NaN patterns to be overridden in tm.h. + + Sun Jun 13 12:55:22 1993 Brendan Kehoe (brendan@lisa.cygnus.com) + + * cp-decl.c (start_function): Avoid a null-reference on CTYPE. + + Sun Jun 13 08:22:30 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) + + * expr.c (expand_expr, case COND_EXPR): Fix typo; const1_rtx should + be const0_rtx when ignoring expression. + + Sun Jun 13 00:15:00 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * genopinit.c (optabs): For strlen_optab, don't look for `2' in name. + + Sat Jun 12 20:23:04 1993 Stephen Moshier (moshier@world.std.com) + + * real.c (ereal_from_float, ereal_from_double): New functions. + * real.h (REAL_VALUE_FROM_TARGET_SINGLE): New macro. + (REAL_VALUE_FROM_TARGET_DOUBLE): Likewise. + * emit-rtl.c (gen_lowpart_common): Use those macros if REAL_ARITHMETIC. + + Sat Jun 12 13:44:00 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu) + + * sched.c (add_dependence): Reject CODE_LABELs when searching for + last insn of a sched group. + + Sat Jun 12 08:06:25 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) + + * m68k.md (movqi): Handle copying an address register to or + from memory when the address uses the address register. + + Sat Jun 12 00:17:06 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * cse.c (record_jump_cond): Look up op1 again after inserting op0. + + Fri Jun 11 21:50:16 1993 John F Carr (jfc@Athena.mit.edu) + + * rs6000.md (movsf, movdf): Handle a move from an integer register + before reload. This can happen if the user uses asm to put a floating + point variable in an integer register. + + Fri Jun 11 20:04:43 1993 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) + + * rs6000.c (rs6000_gen_section_name): Only replace last period + in filename with section name and correct calculation of + string length. + + * recog.c (constrain_operands): Correctly ignore MATCH_OPERATOR + operands. + + * reload1.c (eliminate_regs_in_insn): Don't use a later elimination + than eliminate_regs would use. + + * c-decl.c (finish_decl): Don't modify DECL_INITIAL of a PARM_DECL. + + Thu Jun 10 23:48:01 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * genextract.c (main): Use __volatile__, not volatile. + + Thu Jun 10 16:21:08 1993 Michael Meissner (meissner@osf.org) + + * i386/osfrose.h (SUBTARGET_SWITCHES): Add -m{,no-}ident. + (ASM_SPEC): Pass -v to assembler if used. + (OVERRIDE_OPTIONS): Don't allow -fpic if using the OSF/rose object + format. + (ASM_DECLARE_OBJECT_NAME, ASM_DECLARE_FUNCTION_NAME): If using ELF, + emit a .type pseudo op that says the label is either an object or + a function. + (ASM_DECLARE_FUNCTION_SIZE): Copy from svr4.h. + (SCCS_DIRECTIVE): Define. + (ASM_FILE_END): Unless -mno-ident, emit a .ident directive that + identifies GCC and whether several switches are used. + + * i386/osfelf.h (ASM_SPEC): Pass -v to assembler if used. + (OBJECT_FORMAT_ROSE): Undefine. + + Thu Jun 10 16:20:24 1993 Doug Evans (dje@canuck.cygnus.com) + + * expmed.c (MAX_BITS_PER_WORD): Define earlier. + (shift_cost, shiftadd_cost, shiftsub_cost): Use MAX_BITS_PER_WORD. + + Thu Jun 10 12:56:18 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu) + + * sched.c (sched_analyze_2): Don't ignore USE insns when creating + dependencies. + (sched_analyze): Likewise. + + Wed Jun 9 12:58:51 1993 Michael Meissner (meissner@osf.org) + + * configure (i386-*-osfelf): Add new configuration for OSF/1 using + the ELF object file format. + + * i386/osfelf.h (new file): New config file for OSF/1 with ELF. + Include osfrose.h and redefine things as needed. + + * i386/osfrose.h (SUBTARGET_SWITCHES): Add -melf, -mrose, and + -mno-rose switches. + (HANDLE_SYSV_PRAGMA): Define. + (IDENTIFIER_PREFIX, IDENTIFIER_SUFFIX): Remove unused macros. + (CPP_PREDEFINES): Add -Acpu(i386) -Amachine(i386) -Asystem(unix). + (CPP_SPEC): Define __ROSE__ if compiling for OSF/rose and __ELF__ + if compiling for the ELF object format. + (CC1_SPEC): Pass -mrose if no object format switch. + (DWARF_DBX_REGISTER_NUMBER): Map registers according to the + debugging format. + + Wed Jun 9 13:21:03 1993 Brendan Kehoe (brendan@lisa.cygnus.com) + + Mon Jun 7 18:01:31 1993 Mike Stump (mrs@cygnus.com) + + * cp-search.c (is_subobject_of_p, lookup_field, lookup_fnfields): + Because virtual bases don't necessarily share the same binfo, use + the binfo hierarchy of TYPE_BINFO of any virtual bases, when + performing hiding checks. Fixes problem introduced on Thu Mar 25 + 23:09:27 1993. The symptom is the compiler reports non ambiguous + members as being ambiguous. + + Wed Jun 2 11:53:24 1993 Mike Stump (mrs@cygnus.com) + + * cp-search.c (lookup_fnfields_here): Use TYPE_MAIN_VARIANT on + context types before comparing. Fixes const member functions not + being found in templates. + + Tue Jun 8 19:44:23 1993 Brendan Kehoe (brendan@lisa.cygnus.com) + + * cp-decl.c (finish_function): Move setting of the DECL_RESULT's + context and calling setjmp_protect after poplevel, so we have a + valid DECL_INITIAL for the fndecl (not an error_mark_node). + + Tue Jun 8 13:14:27 1993 John Hassey (hassey@dg-rtp.dg.com) + + * configure: Added gas support for m88k-* targets. + + * t-luna-gas t-dgux-gas t-m88k-gas: New files in config/m88k. + + Tue Jun 8 14:51:44 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu) + + * loop.c (move_movables): Delete REG_EQUAL notes that describe a + non loop invariant value. + + * sparc.c (call_operand, call_operand_address): Accept any address + not just REG rtx. + + Tue Jun 8 18:47:39 1993 Torbjorn Granlund (tege@nada.kth.se) + + * sparc.h: (RTX_COSTS): Make cost of MULT depend on TARGET_V8. + + * pa.h (CPP_SPEC): Fix typo: define __hp9000s700. + + Tue Jun 8 06:16:30 1993 John Hassey (hassey@dg-rtp.dg.com) + + * m88k.h (HARD_REGNO_REGS, HARD_RENO_MODE_OK, MODES_TIEABLE_P): + Restrict use of 88110 extended registers to floating point. + + Mon Jun 7 15:42:10 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * math-68881.h (atan2): For x <= 0, lump y == 0 with y > 0 + to get the right result in 0, -1 case. + + Mon Jun 7 17:50:25 1993 Jeff Law (law@snake.cs.utah.edu) + + * pa.h (RTX_COSTS): Cost of MULT also depends on + TARGET_DISABLE_FPREGS. + + * pa.h (ASM_OUTPUT_INT): Always emit special "plabel" relocation for + function labels. + + Sun Jun 6 16:31:59 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * gcc.c (translate_options): Don't assume option_map[j].arg_info != 0. + + * config/vax/vax.h (PRINT_OPERAND): Prefix constant by `$'. + + Sun Jun 6 00:44:48 1993 Torbjorn Granlund (tege@nada.kth.se) + + * m88k.md (fix_truncdfsi2): Destination is general register, source + general or extended register. + (fix_truncsfsi2): Likewise. + + Sun Jun 6 00:20:25 1993 Kresten Krab Thorup (krab@iesd.auc.dk) + + * objc-act.c (encode_type): Add cases for DImode, encoded + as 'q' and 'Q' respectively. + + Sat Jun 5 14:02:36 1993 James Van Artsdalen (james@bigtex.cactus.org) + + * c-decl.c (pushdecl): Copy DECL_FRAME_SIZE for inline function decls. + + * stmt.c (check_for_full_enumeration_handling): Don't create a + default label if all enumeration literals are covered by cases. + + Sat Jun 5 04:49:19 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * function.c (uninitialized_vars_warning): Change warning text. + (setjmp_args_warning): Likewise. + + * c-typeck.c (convert_for_assignment): Allow conversion to union type + for pointer if the pointer could convert to the union member. + + Fri Jun 4 18:09:47 1993 Jim Wilson (wilson@sphagnum.cygnus.com) + + * integrate.c (expand_inline_function): Always copy a SUBREG as an + argument into a REG. + + Fri Jun 4 05:52:28 1993 Torbjorn Granlund (tege@nada.kth.se) + + * pa.h (RTX_COSTS): Make cost of MULT depend on TARGET_SNAKE. + + * expmed.c (synth_mult): Move code to add or subtract at + leftmost 1-bit to before factoring code to decrease the allowed cost + quickly. Restrict it to handle only odd numbers. + (init_expmed): Limit mult_cost to make synth_mult run faster. + + Fri Jun 4 23:18:35 1993 Kresten Krab Thorup (krab@iesd.auc.dk) + + * objc/sendmsg.c (objc_msg_sendv): Pass a dummy va_list, not 0, + to objc_error. + + Fri Jun 4 16:12:43 1993 Jim Wilson (wilson@wookumz.gnu.ai.mit.edu) + + * byteorder.h: Use new-style function definitions, so that this + file is both valid C and C++. + + Fri Jun 4 00:59:31 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * config/mips/svr4-5.h (CPP_PREDEFINES): + Add _MIPS_SZINT _MIPS_SZLONG _MIPS_SZPTR. + + Thu Jun 3 23:48:39 1993 Jeff Law (law@snake.cs.utah.edu) + + * pa.c (output_function_epilogue): If the last insn in the + current function is a (volatile) call, then emit an extra + nop after the call so that RP will point to a valid instruction. + + Thu Jun 3 18:52:24 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * config/nextstep.h (INCLUDE_DEFAULTS): Use same order as cccp.c. + Add CCC_INCLUDE_DIR with /ansi and /bsd concatenated. + + * varasm.c (immed_real_const_1): Check explicitly for NaNs. + + Thu Jun 3 14:37:25 1993 Jim Wilson (wilson@sphagnum.cygnus.com) + + * combine.c (num_sign_bit_copies): At end, return 1 is nonzero has + the high bit set. + + Wed Jun 2 17:27:31 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * loop.c (record_initial): Reject insns that store into subregs. + Tue Jun 1 12:46:48 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) diff -rc2P gcc-2.4.3.1/INSTALL gcc-2.4.4/INSTALL *** gcc-2.4.3.1/INSTALL Fri Jun 4 20:12:19 1993 --- gcc-2.4.4/INSTALL Fri Jun 18 17:21:55 1993 *************** *** 115,135 **** `--with-gnu-as' ! On certain systems, you must specify whether you want GNU CC ! to work with the usual compilation tools or with the GNU ! compilation tools (including GAS). Use the `--with-gnu-as' ! argument when you run `configure', if you want to use the GNU ! tools. (Specify `--with-gnu-ld' as well, since on these ! systems GAS works only with the GNU linker.) The systems ! where this makes a difference are `i386-ANYTHING-sysv', ! `i860-ANYTHING-bsd', `m68k-hp-hpux', `m68k-sony-bsd', ! `m68k-altos-sysv', `m68000-hp-hpux', `m68000-att-sysv', and ! `mips-ANY'). On any other system, `--with-gnu-as' has no ! effect. `--with-gnu-ld' Specify the option `--with-gnu-ld' if you plan to use the GNU ! linker. This inhibits the installation of `collect2', a ! program which otherwise serves as a front-end for the ! system's linker on most configurations. `--with-stabs' --- 115,144 ---- `--with-gnu-as' ! If you will use GNU CC with the GNU assembler (GAS), you ! should declare this by using the `--with-gnu-as' option when ! you run `configure'. ! ! Using this option does not install GAS. It only modifies the ! output of GNU CC to work with GAS. Building and installing ! GAS is up to you. ! ! The systems where it makes a difference whether you use GAS ! are `i386-ANYTHING-sysv', `i860-ANYTHING-bsd', ! `m68k-hp-hpux', `m68k-sony-bsd', `m68k-altos-sysv', ! `m68000-hp-hpux', `m68000-att-sysv', and `mips-ANY'). On any ! other system, `--with-gnu-as' has no effect. + On the systems listed above, if you use GAS, you should also + use the GNU linker (and specify `--with-gnu-ld'). + `--with-gnu-ld' Specify the option `--with-gnu-ld' if you plan to use the GNU ! linker with GNU CC. ! ! This option does not cause the GNU linker to be installed; it ! just modifies the behavior of GNU CC to work with the GNU ! linker. Specifically, it inhibits the installation of ! `collect2', a program which otherwise serves as a front-end ! for the system's linker on most configurations. `--with-stabs' *************** *** 152,159 **** `--nfp' On certain systems, you must specify whether the machine has ! a floating point unit. These systems are `m68k-sun-sunosN' ! and `m68k-isi-bsd'. On any other system, `--nfp' currently ! has no effect, though perhaps there are other systems where ! it could usefully make a difference. If you want to install your own homemade configuration files, you --- 161,168 ---- `--nfp' On certain systems, you must specify whether the machine has ! a floating point unit. These systems include ! `m68k-sun-sunosN' and `m68k-isi-bsd'. On any other system, ! `--nfp' currently has no effect, though perhaps there are ! other systems where it could usefully make a difference. If you want to install your own homemade configuration files, you *************** *** 162,168 **** prefix is used to form the configuration file names. ! Thus, if you specify `m68k-local', then the files `m68k/local.md', ! `m68k/local.h', `m68k/local.c', `m68k/xm-local.h', `m68k/t-local', ! and `m68k/x-local' will be used. Here is a list of configurations that have special treatment or --- 171,177 ---- prefix is used to form the configuration file names. ! Thus, if you specify `m68k-local', configuration uses files ! `local.md', `local.h', `local.c', `xm-local.h', `t-local', and ! `x-local', all in the directory `config/m68k'. Here is a list of configurations that have special treatment or *************** *** 177,183 **** GNU CC writes a `.verstamp' directive to the assembler output file unless it is built as a cross-compiler. It gets the ! version to use from the file `/usr/include/stamp.h'. If you ! install a new version of OSF/1, you should rebuild GCC to ! pick up the new version stamp. Note that since the Alpha is a 64-bit architecture, --- 186,193 ---- GNU CC writes a `.verstamp' directive to the assembler output file unless it is built as a cross-compiler. It gets the ! version to use from the system header file ! `/usr/include/stamp.h'. If you install a new version of ! OSF/1, you should rebuild GCC to pick up the new version ! stamp. Note that since the Alpha is a 64-bit architecture, *************** *** 191,199 **** `a29k' ! AMD Am29K-family processors. These are normally used in embedded applications. There are no standard Unix configurations. This configuration corresponds to AMD's standard calling sequence and binary interface and is ! compatible with other 29K tools. You may need to make a variant of the file `a29k.h' for your --- 201,209 ---- `a29k' ! AMD Am29k-family processors. These are normally used in embedded applications. There are no standard Unix configurations. This configuration corresponds to AMD's standard calling sequence and binary interface and is ! compatible with other 29k tools. You may need to make a variant of the file `a29k.h' for your *************** *** 259,263 **** the FPA. ! `m88k-svr3' Motorola m88k running the AT&T/Unisoft/Motorola V.3 reference port. These systems tend to use the Green Hills C, revision --- 269,273 ---- the FPA. ! `m88k-*-svr3' Motorola m88k running the AT&T/Unisoft/Motorola V.3 reference port. These systems tend to use the Green Hills C, revision *************** *** 267,274 **** 4 compiler and compare it to the stage 3 compiler. If the stage 3 and stage 4 object files are identical, this suggests ! a problem with the standard C compiler. It is best, however, ! to use an older version of GNU CC for bootstrapping. ! `m88k-dgux' Motorola m88k running DG/UX. To build native or cross compilers on DG/UX, you must first change to the 88open BCS --- 277,287 ---- 4 compiler and compare it to the stage 3 compiler. If the stage 3 and stage 4 object files are identical, this suggests ! you encountered a problem with the standard C compiler; the ! stage 3 and 4 compilers may be usable. ! It is best, however, to use an older version of GNU CC for ! bootstrapping if you have one. ! ! `m88k-*-dgux' Motorola m88k running DG/UX. To build native or cross compilers on DG/UX, you must first change to the 88open BCS *************** *** 399,409 **** given target or host. ! 4. The standard directory for installing the compiler's passes and ! run-time support in `/usr/local/lib'. If you want to install it ! somewhere else, specify the option `--prefix=DIR' when you run ! `configure'. DIR is a directory name to use instead of ! `/usr/local' for all purposes with one exception: the directory ! `/usr/local/include' is searched for header files no matter where ! you install the compiler. 5. Specify `--local-prefix=DIR' if you want the compiler to search --- 412,421 ---- given target or host. ! 4. The standard directory for installing GNU CC is `/usr/local/lib'. ! If you want to install its files somewhere else, specify ! `--prefix=DIR' when you run `configure'. Here DIR is a directory ! name to use instead of `/usr/local' for all purposes with one ! exception: the directory `/usr/local/include' is searched for ! header files no matter where you install the compiler. 5. Specify `--local-prefix=DIR' if you want the compiler to search *************** *** 541,547 **** If you have built the compiler with the `-mno-mips-tfile' option on ! MIPS machines, you will not be able to compare the files. The ! Alpha uses timestamps that `make compare' does not know how to ! ignore, so you will not be able to compare on the Alpha. 13. Install the compiler driver, the compiler's passes and run-time --- 553,563 ---- If you have built the compiler with the `-mno-mips-tfile' option on ! MIPS machines, you will not be able to compare the files. ! ! The Alpha stores file names in the object files and `make compare' ! does not know how to ignore them, so normally you cannot compare ! on the Alpha. However, if you use the `-save-temps' option when ! compiling *both* stage 2 and stage 3, this causes the same file ! names to be used in both stages; then you can do the comparison. 13. Install the compiler driver, the compiler's passes and run-time *************** *** 566,576 **** versions and/or cross-compilers to coexist. ! This program will also copy the driver program `gcc' into the ! directory `/usr/local/bin', so that it appears in typical execution search paths. ! On some systems, this command will cause recompilation of some ! files. This is usually due to bugs in `make'. You should either ! ignore this problem, or use GNU Make. *Warning: there is a bug in `alloca' in the Sun library. To avoid --- 582,592 ---- versions and/or cross-compilers to coexist. ! This also copies the driver program `xgcc' into ! `/usr/local/bin/gcc', so that it appears in typical execution search paths. ! On some systems, this command causes recompilation of some files. ! This is usually due to bugs in `make'. You should either ignore ! this problem, or use GNU Make. *Warning: there is a bug in `alloca' in the Sun library. To avoid *************** *** 646,652 **** all. ! * Cross-compilers for the Mips as target do not work because the ! auxiliary programs `mips-tdump.c' and `mips-tfile.c' can't be ! compiled on anything but a Mips. * Cross-compilers to or from the Vax probably don't work completely --- 662,668 ---- all. ! * Cross-compilers for the Mips as target currently do not work ! because the auxiliary programs `mips-tdump.c' and `mips-tfile.c' ! can't be compiled on anything but a Mips. * Cross-compilers to or from the Vax probably don't work completely *************** *** 725,730 **** must specify a 68030 as the host when you configure it. ! GNU CC on the HP Precision Architecture ! ======================================= There are two variants of this CPU, called 1.0 and 1.1, which have --- 741,746 ---- must specify a 68030 as the host when you configure it. ! Installing on the HP Precision Architecture ! =========================================== There are two variants of this CPU, called 1.0 and 1.1, which have *************** *** 933,942 **** to recompile the sources. If you must recompile, here is how: ! 1. Execute the command procedure `vmsconfig.com' to copy files ! `vax-vms.h', `xm-vax-vms.h', `vax.c' and `vax.md' to files `tm.h', ! `config.h', `aux-output.c', and `md.' respectively, and to create ! files `tconfig.h' and `hconfig.h'. This procedure also creates ! several linker option files used by `make-cc1.com' and a data file ! used by `make-l2.com'. $ @vmsconfig.com --- 949,957 ---- to recompile the sources. If you must recompile, here is how: ! 1. Execute the command procedure `vmsconfig.com' to set up the files ! `tm.h', `config.h', `aux-output.c', and `md.', and to create files ! `tconfig.h' and `hconfig.h'. This procedure also creates several ! linker option files used by `make-cc1.com' and a data file used by ! `make-l2.com'. $ @vmsconfig.com *************** *** 960,966 **** $ install replace sys$common:[syslib]dcltables ! 4. Type `@make-gcc' to recompile everything (alternatively, you may ! submit the file `make-gcc.com' to a batch queue). If you wish to ! build the GNU C++ compiler as well as the GNU CC compiler, you must first edit `make-gcc.com' and follow the instructions that appear in the comments. --- 975,981 ---- $ install replace sys$common:[syslib]dcltables ! 4. Type `@make-gcc' to recompile everything (alternatively, submit ! the file `make-gcc.com' to a batch queue). If you wish to build ! the GNU C++ compiler as well as the GNU CC compiler, you must first edit `make-gcc.com' and follow the instructions that appear in the comments. *************** *** 1003,1013 **** $ set default gcc_build:[000000] ! where `dua1:[gcc.source_dir]' contains the source code, and ! `dua0:[gcc.build_dir]' is meant to contain all of the generated ! object files and executables. Once you have done this, you can ! proceed building GCC as described above. (Keep in mind that ! `gcc_build' is a rooted logical name, and thus the device names in ! each element of the search list must be an actual physical device ! name rather than another rooted logical name). 7. *If you are building GNU CC with a previous version of GNU CC, you --- 1018,1028 ---- $ set default gcc_build:[000000] ! where the directory `dua1:[gcc.source_dir]' contains the source ! code, and the directory `dua0:[gcc.build_dir]' is meant to contain ! all of the generated object files and executables. Once you have ! done this, you can proceed building GCC as described above. (Keep ! in mind that `gcc_build' is a rooted logical name, and thus the ! device names in each element of the search list must be an actual ! physical device name rather than another rooted logical name). 7. *If you are building GNU CC with a previous version of GNU CC, you diff -rc2P gcc-2.4.3.1/Makefile.in gcc-2.4.4/Makefile.in *** gcc-2.4.3.1/Makefile.in Mon May 31 02:11:08 1993 --- gcc-2.4.4/Makefile.in Fri Jun 18 21:19:06 1993 *************** *** 152,156 **** # Directory in which the compiler finds executables, libraries, etc. libsubdir = $(libdir)/gcc-lib/$(target)/$(version) ! # Directory for header file assert.h. includedir = $(local_prefix)/include # assertdir is overridden in cross-make. --- 152,156 ---- # Directory in which the compiler finds executables, libraries, etc. libsubdir = $(libdir)/gcc-lib/$(target)/$(version) ! # Directory to search for site-specific includes. includedir = $(local_prefix)/include # assertdir is overridden in cross-make. *************** *** 248,251 **** --- 248,255 ---- # Additional directories of header files to run fixincludes on. + # These should be directories searched automatically by default + # just as /usr/include is. + # *Do not* use this for directories that happen to contain + # header files, but are not searched automatically by default. # On most systems, this is empty. OTHER_FIXINCLUDES_DIRS= *************** *** 1395,1399 **** $(srcdir)/cpp.info: cpp.texi ! $(MAKEINFO) `echo $(srcdir)/cpp.texi | sed 's,^\./,,'` #$(srcdir)/gplus.info: gplus.texi --- 1399,1403 ---- $(srcdir)/cpp.info: cpp.texi ! cd $(srcdir); $(MAKEINFO) cpp.texi #$(srcdir)/gplus.info: gplus.texi *************** *** 1402,1406 **** $(srcdir)/gcc.info: gcc.texi extend.texi install.texi invoke.texi \ md.texi rtl.texi tm.texi ! $(MAKEINFO) `echo $(srcdir)/gcc.texi | sed 's,^\./,,'` dvi: $(srcdir)/gcc.dvi $(srcdir)/cpp.dvi --- 1406,1410 ---- $(srcdir)/gcc.info: gcc.texi extend.texi install.texi invoke.texi \ md.texi rtl.texi tm.texi ! cd $(srcdir); $(MAKEINFO) gcc.texi dvi: $(srcdir)/gcc.dvi $(srcdir)/cpp.dvi *************** *** 1445,1449 **** for name in $(LIB1FUNCS); do rm -f $${name}.c; done # Delete other temporary files. ! -rm -f tmp-float.h tmp-gcc.xtar.z -rm -f tmp-foo1 tmp-foo2 tmp-proto.* tmp-unproto.1 tmp-SYSCALLS.s # Delete the stamp files. --- 1449,1453 ---- for name in $(LIB1FUNCS); do rm -f $${name}.c; done # Delete other temporary files. ! -rm -f tmp-float.h tmp-gcc.xtar.gz -rm -f tmp-foo1 tmp-foo2 tmp-proto.* tmp-unproto.1 tmp-SYSCALLS.s # Delete the stamp files. *************** *** 1472,1476 **** -rm -f *.dvi # Delete the include directory. ! -rm -rf stmp-* include # Delete all files that users would normally create --- 1476,1480 ---- -rm -f *.dvi # Delete the include directory. ! -rm -rf stmp-* include objc-headers # Delete all files that users would normally create *************** *** 1689,1696 **** cd include; find . -print | cpio -pdum $(libsubdir)/include ! # Put assert.h in /usr/local/include, so it won't override GNU libc's assert.h. ! # Don't replace the assert.h already there if it is not from GCC. ! # This code would be simpler if it tested for -f ... && ! grep ... ! # but supposedly the ! operator is missing in sh on some systems. install-assert-h: assert.h install-dir if [ -f $(assertdir)/assert.h ]; \ --- 1693,1703 ---- cd include; find . -print | cpio -pdum $(libsubdir)/include ! # Put assert.h where it won't override GNU libc's assert.h. ! # It goes in a dir that is searched after GNU libc's headers; ! # thus, the following conditionals are no longer needed. ! # But it's not worth deleting them now. ! ## Don't replace the assert.h already there if it is not from GCC. ! ## This code would be simpler if it tested for -f ... && ! grep ... ! ## but supposedly the ! operator is missing in sh on some systems. install-assert-h: assert.h install-dir if [ -f $(assertdir)/assert.h ]; \ *************** *** 1739,1751 **** # Create the distribution tar file. ! #dist: gcc-$(version).tar.z ! dist: gcc.xtar.z ! gcc.xtar.z: gcc.xtar ! gzip < gcc.xtar > tmp-gcc.xtar.z ! mv tmp-gcc.xtar.z gcc.xtar.z ! #gcc-$(version).tar.z: gcc-$(version).tar ! # gzip < gcc-$(version).tar > gcc-$(version).tar.z #gcc-$(version).tar: --- 1746,1758 ---- # Create the distribution tar file. ! #dist: gcc-$(version).tar.gz ! dist: gcc.xtar.gz ! gcc.xtar.gz: gcc.xtar ! gzip < gcc.xtar > tmp-gcc.xtar.gz ! mv tmp-gcc.xtar.gz gcc.xtar.gz ! #gcc-$(version).tar.gz: gcc-$(version).tar ! # gzip < gcc-$(version).tar > gcc-$(version).tar.gz #gcc-$(version).tar: diff -rc2P gcc-2.4.3.1/NEWS gcc-2.4.4/NEWS *** gcc-2.4.3.1/NEWS Mon May 24 19:20:52 1993 --- gcc-2.4.4/NEWS Sat Jun 12 21:19:34 1993 *************** *** 1,2 **** --- 1,9 ---- + Noteworthy GCC changes in version 2.4.4: + + A crash building g++ on various hosts (including m68k) has been + fixed. Also the g++ compiler no longer reports incorrect + ambiguities in some situations where they do not exist, and + const template member functions are now being found properly. + Noteworthy GCC changes in version 2.4: Only in gcc-2.4.3.1: README.GDB diff -rc2P gcc-2.4.3.1/README.X11 gcc-2.4.4/README.X11 *** gcc-2.4.3.1/README.X11 Mon May 24 21:09:22 1993 --- gcc-2.4.4/README.X11 Mon Jun 7 16:09:31 1993 *************** *** 254,262 **** to NOT build the shared libraries with gcc. ! It is possible that changes in GCC 2.4 have eliminated the problem, ! and that such a shared library would now work with all executables. ! If you want the gcc-compiled shared libraries turn on "Gcc2BuildLibs" ! in site.def. If you try this, please tell bug-gcc@prep.ai.mit.edu ! whether it works. Sun forgot to include a static version of libdl.a with some versions --- 254,261 ---- to NOT build the shared libraries with gcc. ! Changes in GCC 2.4 seem to have eliminated the problem, and such a ! shared library now seems work with all executables. If you want the ! gcc-compiled shared libraries turn on "Gcc2BuildLibs" in site.def. If ! you try this, please tell bug-gcc@prep.ai.mit.edu whether it works. Sun forgot to include a static version of libdl.a with some versions diff -rc2P gcc-2.4.3.1/SERVICE gcc-2.4.4/SERVICE *** gcc-2.4.3.1/SERVICE Tue Jun 1 18:54:11 1993 --- gcc-2.4.4/SERVICE Sat Jun 19 05:17:20 1993 *************** *** 293,327 **** Updated: 4/29/91  - Equivalent Software HB - Repslagaregatan 34 or - 582 22 Linkoping - SWEDEN - +46 (0)13 13 54 21 - - Equivalent Software HB is the worlds second(?) company dedicated to - supporting free UNIX software. The owners have more than 5 years of - UNIX experience, both as system adminstrators and programmers. We - also have extensive experience in maintaining the GNU programs, both - administrating it and fixing bugs. - - Services offered: - - - Installation and custumizing GNU and other free software. We will - make free software as easy to install and use as shrink wrapped - programs. - - Customization and porting. - - Subscriptions to new versions which we will send monthly or with - any other interval. - - Finding, Recommending and Investigation of free software in any - area of the customers choise. - - Regular consulting. We prefer smaller jobs, but are willing to - consider larger ones. We can work through the Internet, but prefer - jobs in Sweden. - - Rates: For software items, request our price list. - For consulting, 450 SEK/hour. - - Entered: 2/14/92 -  Free Software Association of Germany Michaela Merz --- 293,296 ---- *************** *** 497,501 **** troubleshooting and user support experience. ! Updated:10/10/91  Scott J. Kramer --- 466,470 ---- troubleshooting and user support experience. ! Updated: 10/10/91  Scott J. Kramer *************** *** 634,638 **** in Distributed computing and programming languages. ! Updated: 1 Dec 1991  Mojave Systems --- 603,607 ---- in Distributed computing and programming languages. ! Updated: 1 Dec 91  Mojave Systems *************** *** 678,682 **** Rates: $150/hour ! Updated: Dec 1991  Adam J. Richter ...!ucbvax!soda!adam --- 647,651 ---- Rates: $150/hour ! Updated: Dec 91  Adam J. Richter ...!ucbvax!soda!adam *************** *** 720,724 **** Sequent's, Next's and a few other misc. machines. ! Updated: 28 Oct 1991  Steve Simmons --- 689,724 ---- Sequent's, Next's and a few other misc. machines. ! Updated: 28 Oct 91 !  ! Signum Support AB ! Box 2044 _ ...!seunet!signum!info ! S-580 02 Linkoping, Sweden ! +46 13 21 46 00 voice ! +46 13 21 47 00 fax ! ! Signum Support AB is a company dedicated to supporting, developing ! and distributing free software for, including but not limited to, ! UNIX systems. The people behind Signum Support AB have many years ! of general UNIX experience, both as system administrators and as ! programmers, and also extensive experience in maintaining the GNU ! programs, both administrating it and finding and fixing bugs. ! ! Services offered: ! ! - Installation and customizing GNU and other free software. We will ! make free software as easy to install and use as shrink wrapped ! programs. ! - Warranty protection. ! - Customization and porting. ! - Subscriptions to new versions which we will send monthly or with ! any other interval. ! - Finding, Recommending and Investigation of free software in any ! area of the customers choise. ! - Regular consulting. ! ! Rates: For software items, request our price list. ! For consulting, 400-800 SEK/hour. ! ! Entered: 11 Jun 93  Steve Simmons diff -rc2P gcc-2.4.3.1/byteorder.h gcc-2.4.4/byteorder.h *** gcc-2.4.3.1/byteorder.h Sat Feb 6 21:24:37 1993 --- gcc-2.4.4/byteorder.h Fri Jun 4 16:11:29 1993 *************** *** 35,41 **** /* Convert a host long to a network long. */ __STATIC __inline__ unsigned long ! htonl (__arg) ! unsigned long __arg; { register unsigned long __result; --- 35,42 ---- /* Convert a host long to a network long. */ + /* We must use a new-style function definition, so that this will also + be valid for C++. */ __STATIC __inline__ unsigned long ! htonl (unsigned long __arg) { register unsigned long __result; *************** *** 50,55 **** __STATIC __inline__ unsigned short ! htons (__arg) ! unsigned int __arg; { register unsigned short __result; --- 51,55 ---- __STATIC __inline__ unsigned short ! htons (unsigned int __arg) { register unsigned short __result; *************** *** 69,74 **** __STATIC __inline__ unsigned long ! htonl (__arg) ! unsigned long __arg; { register unsigned long __result; --- 69,73 ---- __STATIC __inline__ unsigned long ! htonl (unsigned long __arg) { register unsigned long __result; *************** *** 84,89 **** __STATIC __inline__ unsigned short ! htons (__arg) ! unsigned int __arg; { register unsigned short __result; --- 83,87 ---- __STATIC __inline__ unsigned short ! htons (unsigned int __arg) { register unsigned short __result; *************** *** 99,104 **** __STATIC __inline__ unsigned long ! htonl (__arg) ! unsigned long __arg; { return __arg; --- 97,101 ---- __STATIC __inline__ unsigned long ! htonl (unsigned long __arg) { return __arg; *************** *** 108,113 **** __STATIC __inline__ unsigned short ! htons (__arg) ! unsigned int __arg; { return __arg; --- 105,109 ---- __STATIC __inline__ unsigned short ! htons (unsigned int __arg) { return __arg; *************** *** 119,124 **** __STATIC __inline__ unsigned long ! ntohl (__arg) ! unsigned long __arg; { return htonl (__arg); --- 115,119 ---- __STATIC __inline__ unsigned long ! ntohl (unsigned long __arg) { return htonl (__arg); *************** *** 128,133 **** __STATIC __inline__ unsigned short ! ntohs (__arg) ! unsigned int __arg; { return htons (__arg); --- 123,127 ---- __STATIC __inline__ unsigned short ! ntohs (unsigned int __arg) { return htons (__arg); diff -rc2P gcc-2.4.3.1/c-decl.c gcc-2.4.4/c-decl.c *** gcc-2.4.3.1/c-decl.c Tue May 25 12:25:40 1993 --- gcc-2.4.4/c-decl.c Fri Jun 11 13:31:23 1993 *************** *** 2029,2032 **** --- 2029,2033 ---- ? 0 : DECL_INITIAL (oldglobal)); DECL_SAVED_INSNS (x) = DECL_SAVED_INSNS (oldglobal); + DECL_FRAME_SIZE (x) = DECL_FRAME_SIZE (oldglobal); DECL_ARGUMENTS (x) = DECL_ARGUMENTS (oldglobal); DECL_RESULT (x) = DECL_RESULT (oldglobal); *************** *** 3519,3523 **** /* ??? After 2.3, test (init != 0) instead of TREE_CODE. */ if (!(TREE_CODE (decl) == FUNCTION_DECL && DECL_INLINE (decl)) ! && temporary && TREE_PERMANENT (decl)) { /* We need to remember that this array HAD an initialization, --- 3520,3527 ---- /* ??? After 2.3, test (init != 0) instead of TREE_CODE. */ if (!(TREE_CODE (decl) == FUNCTION_DECL && DECL_INLINE (decl)) ! && temporary && TREE_PERMANENT (decl) ! /* DECL_INITIAL is not defined in PARM_DECLs, since it shares ! space with DECL_ARG_TYPE. */ ! && TREE_CODE (decl) != PARM_DECL) { /* We need to remember that this array HAD an initialization, diff -rc2P gcc-2.4.3.1/c-iterate.c gcc-2.4.4/c-iterate.c *** gcc-2.4.3.1/c-iterate.c Mon Mar 29 13:57:21 1993 --- gcc-2.4.4/c-iterate.c Fri Jun 18 16:03:49 1993 *************** *** 32,36 **** static void expand_stmt_with_iterators_1 (); ! static tree collect_iterators(); static void iterator_loop_prologue (); static void iterator_loop_epilogue (); --- 32,36 ---- static void expand_stmt_with_iterators_1 (); ! static tree collect_iterators (); static void iterator_loop_prologue (); static void iterator_loop_epilogue (); *************** *** 98,101 **** --- 98,104 ---- struct iter_stack_node sublevel_ixpansions; + + /* During collect_iterators, a list of SAVE_EXPRs already scanned. */ + static tree save_exprs; /* Initialize our obstack once per compilation. */ *************** *** 145,149 **** tree stmt; { ! tree iter_list = collect_iterators (stmt, NULL_TREE); expand_stmt_with_iterators_1 (stmt, iter_list); istack_sublevel_to_current (); --- 148,154 ---- tree stmt; { ! tree iter_list; ! save_exprs = NULL_TREE; ! iter_list = collect_iterators (stmt, NULL_TREE); expand_stmt_with_iterators_1 (stmt, iter_list); istack_sublevel_to_current (); *************** *** 203,206 **** --- 208,222 ---- } + case SAVE_EXPR: + /* In each scan, scan a given save_expr only once. */ + { + tree tail; + for (tail = save_exprs; tail; tail = TREE_CHAIN (tail)) + if (TREE_VALUE (tail) == exp) + return list; + } + save_exprs = tree_cons (NULL_TREE, exp, save_exprs); + return collect_iterators (TREE_OPERAND (exp, 0), list); + /* we do not automatically iterate blocks -- one must */ /* use the FOR construct to do that */ *************** *** 230,234 **** switch (TREE_CODE (exp)) { - case SAVE_EXPR: case CALL_EXPR: num_args = 2; --- 246,249 ---- diff -rc2P gcc-2.4.3.1/c-typeck.c gcc-2.4.4/c-typeck.c *** gcc-2.4.3.1/c-typeck.c Fri May 28 20:03:39 1993 --- gcc-2.4.4/c-typeck.c Wed Jun 16 16:24:25 1993 *************** *** 1795,1804 **** this = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (wanted_type))); that = 0; ! if (TYPE_NAME (cur_type) != 0 && TREE_CODE (cur_type) != INTEGER_TYPE && !(TREE_CODE (cur_type) == POINTER_TYPE ! && TREE_CODE (TREE_TYPE (cur_type)) == INTEGER_TYPE) ! && DECL_NAME (TYPE_NAME (cur_type)) != 0) ! that = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (cur_type))); /* A nameless type can't possibly match what the format wants. --- 1795,1810 ---- this = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (wanted_type))); that = 0; ! if (TREE_CODE (cur_type) != ERROR_MARK ! && TYPE_NAME (cur_type) != 0 && TREE_CODE (cur_type) != INTEGER_TYPE && !(TREE_CODE (cur_type) == POINTER_TYPE ! && TREE_CODE (TREE_TYPE (cur_type)) == INTEGER_TYPE)) ! { ! if (TREE_CODE (TYPE_NAME (cur_type)) == TYPE_DECL ! && DECL_NAME (TYPE_NAME (cur_type)) != 0) ! that = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (cur_type))); ! else ! that = IDENTIFIER_POINTER (TYPE_NAME (cur_type)); ! } /* A nameless type can't possibly match what the format wants. *************** *** 4173,4176 **** --- 4179,4227 ---- pedwarn ("ANSI C prohibits argument conversion to union type"); return build1 (NOP_EXPR, type, rhs); + } + else if (coder == POINTER_TYPE + && TREE_CODE (TREE_TYPE (memb_types)) == POINTER_TYPE) + { + tree memb_type = TREE_TYPE (memb_types); + register tree ttl = TREE_TYPE (memb_type); + register tree ttr = TREE_TYPE (rhstype); + + /* Any non-function converts to a [const][volatile] void * + and vice versa; otherwise, targets must be the same. + Meanwhile, the lhs target must have all the qualifiers of the rhs. */ + if (TYPE_MAIN_VARIANT (ttl) == void_type_node + || TYPE_MAIN_VARIANT (ttr) == void_type_node + || comp_target_types (memb_type, rhstype)) + { + /* Const and volatile mean something different for function types, + so the usual warnings are not appropriate. */ + if (TREE_CODE (ttr) != FUNCTION_TYPE + || TREE_CODE (ttl) != FUNCTION_TYPE) + { + if (! TYPE_READONLY (ttl) && TYPE_READONLY (ttr)) + warn_for_assignment ("%s discards `const' from pointer target type", + get_spelling (errtype), funname, parmnum); + if (! TYPE_VOLATILE (ttl) && TYPE_VOLATILE (ttr)) + warn_for_assignment ("%s discards `volatile' from pointer target type", + get_spelling (errtype), funname, parmnum); + } + else + { + /* Because const and volatile on functions are restrictions + that say the function will not do certain things, + it is okay to use a const or volatile function + where an ordinary one is wanted, but not vice-versa. */ + if (TYPE_READONLY (ttl) && ! TYPE_READONLY (ttr)) + warn_for_assignment ("%s makes `const *' function pointer from non-const", + get_spelling (errtype), funname, parmnum); + if (TYPE_VOLATILE (ttl) && ! TYPE_VOLATILE (ttr)) + warn_for_assignment ("%s makes `volatile *' function pointer from non-volatile", + get_spelling (errtype), funname, parmnum); + } + if (pedantic + && !(fundecl != 0 && DECL_IN_SYSTEM_HEADER (fundecl))) + pedwarn ("ANSI C prohibits argument conversion to union type"); + return build1 (NOP_EXPR, type, rhs); + } } } diff -rc2P gcc-2.4.3.1/calls.c gcc-2.4.4/calls.c *** gcc-2.4.3.1/calls.c Thu May 20 01:05:12 1993 --- gcc-2.4.4/calls.c Mon Jun 14 17:39:54 1993 *************** *** 1839,1851 **** if (target == 0) { ! target = gen_rtx (MEM, TYPE_MODE (TREE_TYPE (exp)), ! copy_to_reg (valreg)); ! MEM_IN_STRUCT_P (target) ! = (TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE ! || TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE ! || TREE_CODE (TREE_TYPE (exp)) == UNION_TYPE ! || TREE_CODE (TREE_TYPE (exp)) == QUAL_UNION_TYPE); } ! else if (TYPE_MODE (TREE_TYPE (exp)) != BLKmode) emit_move_insn (target, gen_rtx (MEM, TYPE_MODE (TREE_TYPE (exp)), copy_to_reg (valreg))); --- 1839,1857 ---- if (target == 0) { ! /* We used leave the value in the location that it is ! returned in, but that causes problems if it is used more ! than once in one expression. Rather than trying to track ! when a copy is required, we always copy when TARGET is ! not specified. This calling sequence is only used on ! a few machines and TARGET is usually nonzero. */ ! if (TYPE_MODE (TREE_TYPE (exp)) == BLKmode) ! target = assign_stack_temp (BLKmode, ! int_size_in_bytes (TREE_TYPE (exp)), ! 1); ! else ! target = gen_reg_rtx (TYPE_MODE (TREE_TYPE (exp))); } ! ! if (TYPE_MODE (TREE_TYPE (exp)) != BLKmode) emit_move_insn (target, gen_rtx (MEM, TYPE_MODE (TREE_TYPE (exp)), copy_to_reg (valreg))); diff -rc2P gcc-2.4.3.1/combine.c gcc-2.4.4/combine.c *** gcc-2.4.3.1/combine.c Fri May 28 18:47:14 1993 --- gcc-2.4.4/combine.c Fri Jun 4 01:57:52 1993 *************** *** 6802,6806 **** nonzero = nonzero_bits (x, mode); ! return (nonzero == GET_MODE_MASK (mode) ? 1 : bitwidth - floor_log2 (nonzero) - 1); } --- 6802,6806 ---- nonzero = nonzero_bits (x, mode); ! return (nonzero & ((HOST_WIDE_INT) 1 << (bitwidth - 1)) ? 1 : bitwidth - floor_log2 (nonzero) - 1); } diff -rc2P gcc-2.4.3.1/config/i386/aix386.h gcc-2.4.4/config/i386/aix386.h *** gcc-2.4.3.1/config/i386/aix386.h Mon May 24 02:42:40 1993 --- gcc-2.4.4/config/i386/aix386.h Thu Jun 17 16:18:55 1993 *************** *** 24,27 **** --- 24,36 ---- */ + /* Define USE_GAS if you have the new version of gas that can handle + * multiple segments and .section pseudo op. This will allow gcc to + * use the .init section for g++ ctor/dtor. + * + * If you don't have gas then undefined USE_GAS. You will also have + * to use collect if you want to use g++ + */ + #define USE_GAS + #include "i386/aix386ng.h" diff -rc2P gcc-2.4.3.1/config/i386/aix386ng.h gcc-2.4.4/config/i386/aix386ng.h *** gcc-2.4.3.1/config/i386/aix386ng.h Mon May 24 02:42:34 1993 --- gcc-2.4.4/config/i386/aix386ng.h Thu Jun 17 16:19:00 1993 *************** *** 72,76 **** #define PCC_BITFIELD_TYPE_MATTERS 1 ! #if 0 /* Don't write a `.optim' pseudo; this assembler is said to have a bug when .optim is used. */ --- 72,76 ---- #define PCC_BITFIELD_TYPE_MATTERS 1 ! #ifndef USE_GAS /* Don't write a `.optim' pseudo; this assembler is said to have a bug when .optim is used. */ *************** *** 77,81 **** #undef ASM_FILE_START_1 ! #define ASM_FILE_START_1(FILE) fprintf (FILE, "\t.noopt\n"); #endif --- 77,81 ---- #undef ASM_FILE_START_1 ! #define ASM_FILE_START_1(FILE) fprintf (FILE, "\t.noopt\n") #endif *************** *** 95,96 **** --- 95,140 ---- ASM_OUTPUT_LABEL ((FILE), (NAME)), \ fprintf ((FILE), "\t.set .,.+%u\n", (ROUNDED))) + + + /* Undef all the .init and .fini section stuff if we are not using gas and + * gnu ld so that we can use collect because the standard /bin/as and /bin/ld + * cannot handle those. + */ + #ifndef USE_GAS + # undef INIT_SECTION_ASM_OP + # undef FINI_SECTION_ASM_OP + # undef CTORS_SECTION_ASM_OP + # undef DTORS_SECTION_ASM_OP + # undef ASM_OUTPUT_CONSTRUCTOR + # undef ASM_OUTPUT_DESTRUCTOR + # undef DO_GLOBAL_CTORS_BODY + + # undef CTOR_LIST_BEGIN + # define CTOR_LIST_BEGIN + # undef CTOR_LIST_END + # define CTOR_LIST_END + # undef DTOR_LIST_BEGIN + # define DTOR_LIST_BEGIN + # undef DTOR_LIST_END + # define DTOR_LIST_END + + # undef CONST_SECTION_FUNCTION + # define CONST_SECTION_FUNCTION \ + void \ + const_section () \ + { \ + extern void text_section(); \ + text_section(); \ + } + + # undef EXTRA_SECTION_FUNCTIONS + # define EXTRA_SECTION_FUNCTIONS \ + CONST_SECTION_FUNCTION \ + BSS_SECTION_FUNCTION + + /* for collect2 */ + # define OBJECT_FORMAT_COFF + # define MY_ISCOFF(magic) \ + ((magic) == I386MAGIC || (magic) == I386SVMAGIC) + + #endif /* !USE_GAS */ diff -rc2P gcc-2.4.3.1/config/i386/i386.c gcc-2.4.4/config/i386/i386.c *** gcc-2.4.3.1/config/i386/i386.c Sun May 9 00:56:09 1993 --- gcc-2.4.4/config/i386/i386.c Fri Jun 18 00:24:20 1993 *************** *** 527,530 **** --- 527,550 ---- { if (GET_CODE (op) == MEM + && ((CONSTANT_ADDRESS_P (XEXP (op, 0)) + /* This makes a difference for PIC. */ + && general_operand (XEXP (op, 0), Pmode)) + || (GET_CODE (XEXP (op, 0)) == REG + && XEXP (op, 0) != arg_pointer_rtx + && !(REGNO (XEXP (op, 0)) >= FIRST_PSEUDO_REGISTER + && REGNO (XEXP (op, 0)) <= LAST_VIRTUAL_REGISTER)))) + return 1; + return 0; + } + + /* Like call_insn_operand but allow (mem (symbol_ref ...)) + even if pic. */ + + int + expander_call_insn_operand (op, mode) + rtx op; + enum machine_mode mode; + { + if (GET_CODE (op) == MEM && (CONSTANT_ADDRESS_P (XEXP (op, 0)) || (GET_CODE (XEXP (op, 0)) == REG diff -rc2P gcc-2.4.3.1/config/i386/i386.md gcc-2.4.4/config/i386/i386.md *** gcc-2.4.3.1/config/i386/i386.md Sun May 9 00:34:27 1993 --- gcc-2.4.4/config/i386/i386.md Fri Jun 18 00:24:58 1993 *************** *** 3951,3955 **** XEXP (operands[0], 0) = force_reg (Pmode, addr); ! if (! call_insn_operand (operands[0], QImode)) operands[0] = change_address (operands[0], VOIDmode, --- 3951,3955 ---- XEXP (operands[0], 0) = force_reg (Pmode, addr); ! if (! expander_call_insn_operand (operands[0], QImode)) operands[0] = change_address (operands[0], VOIDmode, *************** *** 4000,4004 **** XEXP (operands[0], 0) = force_reg (Pmode, addr); ! if (! call_insn_operand (operands[0], QImode)) operands[0] = change_address (operands[0], VOIDmode, --- 4000,4004 ---- XEXP (operands[0], 0) = force_reg (Pmode, addr); ! if (! expander_call_insn_operand (operands[0], QImode)) operands[0] = change_address (operands[0], VOIDmode, *************** *** 4053,4057 **** XEXP (operands[1], 0) = force_reg (Pmode, addr); ! if (! call_insn_operand (operands[1], QImode)) operands[1] = change_address (operands[1], VOIDmode, --- 4053,4057 ---- XEXP (operands[1], 0) = force_reg (Pmode, addr); ! if (! expander_call_insn_operand (operands[1], QImode)) operands[1] = change_address (operands[1], VOIDmode, *************** *** 4107,4111 **** XEXP (operands[1], 0) = force_reg (Pmode, addr); ! if (! call_insn_operand (operands[1], QImode)) operands[1] = change_address (operands[1], VOIDmode, --- 4107,4111 ---- XEXP (operands[1], 0) = force_reg (Pmode, addr); ! if (! expander_call_insn_operand (operands[1], QImode)) operands[1] = change_address (operands[1], VOIDmode, *************** *** 4160,4164 **** operands[1] = change_address (operands[1], DImode, XEXP (operands[1], 0)); ! if (! call_insn_operand (operands[1], QImode)) operands[1] = change_address (operands[1], VOIDmode, --- 4160,4164 ---- operands[1] = change_address (operands[1], DImode, XEXP (operands[1], 0)); ! if (! expander_call_insn_operand (operands[1], QImode)) operands[1] = change_address (operands[1], VOIDmode, diff -rc2P gcc-2.4.3.1/config/i386/osfelf.h gcc-2.4.4/config/i386/osfelf.h *** gcc-2.4.3.1/config/i386/osfelf.h --- gcc-2.4.4/config/i386/osfelf.h Thu Jun 10 16:30:52 1993 *************** *** 0 **** --- 1,66 ---- + /* Definitions of target machine for GNU compiler. + Intel 386 (OSF/1 with ELF) version. + Copyright (C) 1993 Free Software Foundation, Inc. + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + + #include "config/i386/osfrose.h" + + #undef CPP_PREDEFINES + #define CPP_PREDEFINES "-DOSF -DOSF1 -Dunix -Di386 -Asystem(unix) -Acpu(i386) -Amachine(i386)" + + #undef CPP_SPEC + #define CPP_SPEC "\ + %{!mrose: %{!mno-elf: -D__ELF__}} %{mrose: -D__ROSE__} %{mno-elf: -D__ROSE__} \ + %{.S: %{!ansi:%{!traditional:%{!traditional-cpp:%{!ftraditional: -traditional}}}}} \ + %{.S: -D__LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \ + %{.cc: -D__LANGUAGE_C_PLUS_PLUS} \ + %{.cxx: -D__LANGUAGE_C_PLUS_PLUS} \ + %{.C: -D__LANGUAGE_C_PLUS_PLUS} \ + %{.m: -D__LANGUAGE_OBJECTIVE_C} \ + %{!.S: -D__LANGUAGE_C %{!ansi:-DLANGUAGE_C}}" + + /* Turn on -mpic-extern by default (change to later use -fpic. */ + #undef CC1_SPEC + #define CC1_SPEC "\ + %{!melf: %{!mrose: %{!mno-elf: -melf }}} \ + %{gline:%{!g:%{!g0:%{!g1:%{!g2: -g1}}}}} \ + %{pic-none: -mno-half-pic} \ + %{fpic: -mno-half-pic} \ + %{fPIC: -mno-half-pic} \ + %{pic-lib: -mhalf-pic} \ + %{pic-extern: -mhalf-pic} \ + %{pic-calls: -mhalf-pic} \ + %{pic-names*: -mhalf-pic} \ + %{!pic-*: %{!fpic: %{!fPIC: -mhalf-pic}}}" + + #undef ASM_SPEC + #define ASM_SPEC "%{v*: -v}" + + #undef LINK_SPEC + #define LINK_SPEC "%{noshrlib: } %{glue: }" + + #undef TARGET_VERSION_INTERNAL + #undef TARGET_VERSION + + #undef I386_VERSION + #define I386_VERSION " 80386, ELF objects" + + #define TARGET_VERSION_INTERNAL(STREAM) fputs (I386_VERSION, STREAM) + #define TARGET_VERSION TARGET_VERSION_INTERNAL (stderr) + + #undef OBJECT_FORMAT_ROSE diff -rc2P gcc-2.4.3.1/config/i386/osfrose.h gcc-2.4.4/config/i386/osfrose.h *** gcc-2.4.3.1/config/i386/osfrose.h Wed Apr 28 15:18:16 1993 --- gcc-2.4.4/config/i386/osfrose.h Thu Jun 10 16:30:51 1993 *************** *** 36,39 **** --- 36,41 ---- #define MASK_HALF_PIC 0x40000000 /* Mask for half-pic code */ #define MASK_HALF_PIC_DEBUG 0x20000000 /* Debug flag */ + #define MASK_ELF 0x10000000 /* ELF not rose */ + #define MASK_NO_IDENT 0x08000000 /* suppress .ident */ #define TARGET_HALF_PIC (target_flags & MASK_HALF_PIC) *************** *** 40,43 **** --- 42,48 ---- #define TARGET_DEBUG (target_flags & MASK_HALF_PIC_DEBUG) #define HALF_PIC_DEBUG TARGET_DEBUG + #define TARGET_ELF (target_flags & MASK_ELF) + #define TARGET_ROSE ((target_flags & MASK_ELF) == 0) + #define TARGET_IDENT ((target_flags & MASK_NO_IDENT) == 0) #undef SUBTARGET_SWITCHES *************** *** 45,49 **** { "half-pic", MASK_HALF_PIC}, \ { "no-half-pic", -MASK_HALF_PIC}, \ ! { "debugb", MASK_HALF_PIC_DEBUG}, /* OSF/rose uses stabs, not dwarf. */ --- 50,59 ---- { "half-pic", MASK_HALF_PIC}, \ { "no-half-pic", -MASK_HALF_PIC}, \ ! { "debugb", MASK_HALF_PIC_DEBUG}, \ ! { "elf", MASK_ELF}, \ ! { "no-elf", -MASK_ELF}, \ ! { "rose", -MASK_ELF}, \ ! { "ident", -MASK_NO_IDENT}, \ ! { "no-ident", MASK_NO_IDENT}, /* OSF/rose uses stabs, not dwarf. */ *************** *** 54,73 **** #endif ! /* Prefix that appears before all global/static identifiers, except for ! temporary labels. */ ! #define IDENTIFIER_PREFIX "_" - /* Suffix that appears after all global/static identifiers, except for - temporary labels. */ - - #define IDENTIFIER_SUFFIX "" - /* Change default predefines. */ #undef CPP_PREDEFINES ! #define CPP_PREDEFINES "-DOSF -DOSF1 -Dunix -Di386" #undef CPP_SPEC #define CPP_SPEC "\ %{.S: %{!ansi:%{!traditional:%{!traditional-cpp:%{!ftraditional: -traditional}}}}} \ %{.S: -D__LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \ --- 64,78 ---- #endif ! /* Handle #pragma weak and #pragma pack. */ ! #define HANDLE_SYSV_PRAGMA /* Change default predefines. */ #undef CPP_PREDEFINES ! #define CPP_PREDEFINES "-DOSF -DOSF1 -Dunix -Di386 -Asystem(unix) -Acpu(i386) -Amachine(i386)" #undef CPP_SPEC #define CPP_SPEC "\ + %{!melf: -D__ROSE__} %{melf: -D__ELF__} \ %{.S: %{!ansi:%{!traditional:%{!traditional-cpp:%{!ftraditional: -traditional}}}}} \ %{.S: -D__LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \ *************** *** 81,84 **** --- 86,90 ---- #undef CC1_SPEC #define CC1_SPEC "\ + %{!melf: %{!mrose: %{!mno-elf: -mrose }}} \ %{gline:%{!g:%{!g0:%{!g1:%{!g2: -g1}}}}} \ %{pic-none: -mno-half-pic} \ *************** *** 92,96 **** #undef ASM_SPEC ! #define ASM_SPEC "" #undef LINK_SPEC --- 98,102 ---- #undef ASM_SPEC ! #define ASM_SPEC "%{v*: -v}" #undef LINK_SPEC *************** *** 233,236 **** --- 239,256 ---- #define OVERRIDE_OPTIONS \ { \ + /* \ + if (TARGET_ELF && TARGET_HALF_PIC) \ + { \ + target_flags &= ~MASK_HALF_PIC; \ + flag_pic = 1; \ + } \ + */ \ + \ + if (TARGET_ROSE && flag_pic) \ + { \ + target_flags |= MASK_HALF_PIC; \ + flag_pic = 0; \ + } \ + \ if (TARGET_HALF_PIC) \ half_pic_init (); \ *************** *** 310,313 **** --- 330,351 ---- + /* Define the strings used for the special svr4 .type and .size directives. + These strings generally do not vary from one system running svr4 to + another, but if a given system (e.g. m88k running svr) needs to use + different pseudo-op names for these, they may be overridden in the + file which includes this one. */ + + #define TYPE_ASM_OP ".type" + #define SIZE_ASM_OP ".size" + #define WEAK_ASM_OP ".weak" + + /* The following macro defines the format used to output the second + operand of the .type assembler directive. Different svr4 assemblers + expect various different forms for this operand. The one given here + is just a default. You may need to override it in your machine- + specific tm.h file (depending upon the particulars of your assembler). */ + + #define TYPE_OPERAND_FMT "@%s" + /* A C statement (sans semicolon) to output to the stdio stream STREAM any text necessary for declaring the name NAME of an *************** *** 326,329 **** --- 364,381 ---- ASM_OUTPUT_LABEL(STREAM,NAME); \ HALF_PIC_DECLARE (NAME); \ + if (TARGET_ELF) \ + { \ + fprintf (STREAM, "\t%s\t ", TYPE_ASM_OP); \ + assemble_name (STREAM, NAME); \ + putc (',', STREAM); \ + fprintf (STREAM, TYPE_OPERAND_FMT, "object"); \ + putc ('\n', STREAM); \ + if (!flag_inhibit_size_directive) \ + { \ + fprintf (STREAM, "\t%s\t ", SIZE_ASM_OP); \ + assemble_name (STREAM, NAME); \ + fprintf (STREAM, ",%d\n", int_size_in_bytes (TREE_TYPE (decl))); \ + } \ + } \ } \ while (0) *************** *** 331,342 **** /* This is how to declare a function name. */ #define ASM_DECLARE_FUNCTION_NAME(STREAM,NAME,DECL) \ do \ { \ ! ASM_OUTPUT_LABEL(STREAM,NAME); \ HALF_PIC_DECLARE (NAME); \ } \ while (0) /* This says what to print at the end of the assembly file */ #define ASM_FILE_END(STREAM) \ --- 383,446 ---- /* This is how to declare a function name. */ + #undef ASM_DECLARE_FUNCTION_NAME #define ASM_DECLARE_FUNCTION_NAME(STREAM,NAME,DECL) \ do \ { \ ! ASM_OUTPUT_LABEL(STREAM,NAME); \ HALF_PIC_DECLARE (NAME); \ + if (TARGET_ELF) \ + { \ + fprintf (STREAM, "\t%s\t ", TYPE_ASM_OP); \ + assemble_name (STREAM, NAME); \ + putc (',', STREAM); \ + fprintf (STREAM, TYPE_OPERAND_FMT, "function"); \ + putc ('\n', STREAM); \ + ASM_DECLARE_RESULT (STREAM, DECL_RESULT (DECL)); \ + } \ } \ while (0) + /* Write the extra assembler code needed to declare a function's result. + Most svr4 assemblers don't require any special declaration of the + result value, but there are exceptions. */ + + #ifndef ASM_DECLARE_RESULT + #define ASM_DECLARE_RESULT(FILE, RESULT) + #endif + + /* This is how to declare the size of a function. */ + + #define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \ + do \ + { \ + if (TARGET_ELF && !flag_inhibit_size_directive) \ + { \ + char label[256]; \ + static int labelno; \ + labelno++; \ + ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno); \ + ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno); \ + fprintf (FILE, "/\t%s\t ", SIZE_ASM_OP); \ + assemble_name (FILE, (FNAME)); \ + fprintf (FILE, ","); \ + assemble_name (FILE, label); \ + fprintf (FILE, "-"); \ + assemble_name (FILE, (FNAME)); \ + putc ('\n', FILE); \ + } \ + } \ + while (0) + + /* Attach a special .ident directive to the end of the file to identify + the version of GCC which compiled this code. The format of the + .ident string is patterned after the ones produced by native svr4 + C compilers. */ + + #define IDENT_ASM_OP ".ident" + + /* Allow #sccs in preprocessor. */ + + #define SCCS_DIRECTIVE + /* This says what to print at the end of the assembly file */ #define ASM_FILE_END(STREAM) \ *************** *** 345,348 **** --- 449,515 ---- if (HALF_PIC_P ()) \ HALF_PIC_FINISH (STREAM); \ + \ + if (TARGET_IDENT) \ + { \ + fprintf ((STREAM), "\t%s\t\"GCC: (GNU) %s -O%d", \ + IDENT_ASM_OP, version_string, optimize); \ + \ + if (write_symbols == PREFERRED_DEBUGGING_TYPE) \ + fprintf ((STREAM), " -g%d", (int)debug_info_level); \ + \ + else if (write_symbols == DBX_DEBUG) \ + fprintf ((STREAM), " -gstabs%d", (int)debug_info_level); \ + \ + else if (write_symbols == DWARF_DEBUG) \ + fprintf ((STREAM), " -gdwarf%d", (int)debug_info_level); \ + \ + else if (write_symbols != NO_DEBUG) \ + fprintf ((STREAM), " -g??%d", (int)debug_info_level); \ + \ + if (flag_omit_frame_pointer) \ + fprintf ((STREAM), " -fomit-frame-pointer"); \ + \ + if (flag_strength_reduce) \ + fprintf ((STREAM), " -fstrength-reduce"); \ + \ + if (flag_unroll_loops) \ + fprintf ((STREAM), " -funroll-loops"); \ + \ + if (flag_force_mem) \ + fprintf ((STREAM), " -fforce-mem"); \ + \ + if (flag_force_addr) \ + fprintf ((STREAM), " -fforce-addr"); \ + \ + if (flag_inline_functions) \ + fprintf ((STREAM), " -finline-functions"); \ + \ + if (flag_caller_saves) \ + fprintf ((STREAM), " -fcaller-saves"); \ + \ + if (flag_pic) \ + fprintf ((STREAM), (flag_pic > 1) ? " -fPIC" : " -fpic"); \ + \ + if (flag_inhibit_size_directive) \ + fprintf ((STREAM), " -finhibit-size-directive"); \ + \ + if (flag_gnu_linker) \ + fprintf ((STREAM), " -fgnu-linker"); \ + \ + if (profile_flag) \ + fprintf ((STREAM), " -p"); \ + \ + if (profile_block_flag) \ + fprintf ((STREAM), " -a"); \ + \ + if (TARGET_IEEE_FP) \ + fprintf ((STREAM), " -mieee-fp"); \ + \ + if (TARGET_HALF_PIC) \ + fprintf ((STREAM), " -mhalf-pic"); \ + \ + fprintf ((STREAM), (TARGET_486) ? " -m486" : " -m386"); \ + fprintf ((STREAM), (TARGET_ELF) ? " -melf\"\n" : " -mrose\"\n"); \ + } \ } \ while (0) *************** *** 432,433 **** --- 599,632 ---- we want to retain compatibility with older gcc versions. */ #define DEFAULT_PCC_STRUCT_RETURN 0 + + /* Map i386 registers to the numbers dwarf expects. Of course this is different + from what stabs expects. */ + + #define DWARF_DBX_REGISTER_NUMBER(n) \ + ((n) == 0 ? 0 \ + : (n) == 1 ? 2 \ + : (n) == 2 ? 1 \ + : (n) == 3 ? 3 \ + : (n) == 4 ? 6 \ + : (n) == 5 ? 7 \ + : (n) == 6 ? 5 \ + : (n) == 7 ? 4 \ + : ((n) >= FIRST_STACK_REG && (n) <= LAST_STACK_REG) ? (n)+3 \ + : (-1)) + + /* Now what stabs expects in the register. */ + #define STABS_DBX_REGISTER_NUMBER(n) \ + ((n) == 0 ? 0 : \ + (n) == 1 ? 2 : \ + (n) == 2 ? 1 : \ + (n) == 3 ? 3 : \ + (n) == 4 ? 6 : \ + (n) == 5 ? 7 : \ + (n) == 6 ? 4 : \ + (n) == 7 ? 5 : \ + (n) + 4) + + #undef DBX_REGISTER_NUMBER + #define DBX_REGISTER_NUMBER(n) ((write_symbols == DWARF_DEBUG) \ + ? DWARF_DBX_REGISTER_NUMBER(n) \ + : STABS_DBX_REGISTER_NUMBER(n)) diff -rc2P gcc-2.4.3.1/config/i386/xm-sysv4.h gcc-2.4.4/config/i386/xm-sysv4.h *** gcc-2.4.3.1/config/i386/xm-sysv4.h Sun Jan 10 21:39:09 1993 --- gcc-2.4.4/config/i386/xm-sysv4.h Wed Jun 16 17:09:08 1993 *************** *** 8,9 **** --- 8,13 ---- #define USE_C_ALLOCA #endif + + /* Univel, at least, has a small ARG_MAX. Defining this is harmless + except for causing extra stat calls in the driver program. */ + #define SMALL_ARG_MAX diff -rc2P gcc-2.4.3.1/config/m68k/m68k.h gcc-2.4.4/config/m68k/m68k.h *** gcc-2.4.3.1/config/m68k/m68k.h Wed Mar 31 16:12:54 1993 --- gcc-2.4.4/config/m68k/m68k.h Fri Jun 18 17:58:01 1993 *************** *** 100,110 **** #define TARGET_SWITCHES \ ! { { "68020", 5}, \ { "c68020", 5}, \ { "68881", 2}, \ { "bitfield", 4}, \ ! { "68000", -5}, \ ! { "c68000", -5}, \ ! { "soft-float", -0102}, \ { "nobitfield", -4}, \ { "rtd", 8}, \ --- 100,112 ---- #define TARGET_SWITCHES \ ! { { "68020", -01400}, \ ! { "c68020", -01400}, \ ! { "68020", 5}, \ { "c68020", 5}, \ { "68881", 2}, \ { "bitfield", 4}, \ ! { "68000", -01405}, \ ! { "c68000", -01405}, \ ! { "soft-float", -01102}, \ { "nobitfield", -4}, \ { "rtd", 8}, \ *************** *** 116,123 **** { "sky", 0200}, \ { "nosky", -0200}, \ ! { "68020-40", 0407}, \ { "68030", -01400}, \ { "68030", 5}, \ ! { "68040", 01007}, \ { "", TARGET_DEFAULT}} /* TARGET_DEFAULT is defined in sun*.h and isi.h, etc. */ --- 118,125 ---- { "sky", 0200}, \ { "nosky", -0200}, \ ! { "68020-40", 0407}, \ { "68030", -01400}, \ { "68030", 5}, \ ! { "68040", 01007}, \ { "", TARGET_DEFAULT}} /* TARGET_DEFAULT is defined in sun*.h and isi.h, etc. */ diff -rc2P gcc-2.4.3.1/config/m68k/m68k.md gcc-2.4.4/config/m68k/m68k.md *** gcc-2.4.3.1/config/m68k/m68k.md Fri May 21 16:02:26 1993 --- gcc-2.4.4/config/m68k/m68k.md Sat Jun 12 16:22:57 1993 *************** *** 933,936 **** --- 933,974 ---- if (ADDRESS_REG_P (operands[0]) && GET_CODE (operands[1]) == MEM) { + /* ??? For 2.5, don't allow this choice and use secondary reloads + instead. + + See if the address register is used in the address. If it + is, we have to generate a more complex sequence than those below. */ + if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1, + operands[1], NULL_RTX)) + { + /* See if the stack pointer is used in the address. If it isn't, + we can push d0 or d1 (the insn can't use both of them) on + the stack, perform our move into d0/d1, copy the byte from d0/1, + and pop d0/1. */ + 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 + return \"move%.l %/d1,%-\;move%.b %1,%/d1\;move%.l %/d1,%0\;move%.l %+,%/d1\"; + } + else + { + /* Otherwise, we know that d0 cannot be used in the address + (since sp and one address register is). Assume that sp is + being used as a base register and replace the address + register that is our operand[0] with d0. */ + rtx reg_map[FIRST_PSEUDO_REGISTER]; + int i; + + for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) + reg_map[i] = 0; + + reg_map[REGNO (operands[0])] = gen_rtx (REG, Pmode, 0); + operands[1] = copy_rtx (operands[1]); + replace_regs (operands[1], reg_map, FIRST_PSEUDO_REGISTER, 0); + return \"exg %/d0,%0\;move%.b %1,%/d0\;exg %/d0,%0\"; + } + } + /* If the address of operand 1 uses d0, choose d1 as intermediate. */ if (refers_to_regno_p (0, 1, operands[1], NULL_RTX)) *************** *** 945,948 **** --- 983,1024 ---- if (ADDRESS_REG_P (operands[1]) && GET_CODE (operands[0]) == MEM) { + /* ??? For 2.5, don't allow this choice and use secondary reloads + instead. + + See if the address register is used in the address. If it + is, we have to generate a more complex sequence than those below. */ + if (refers_to_regno_p (REGNO (operands[1]), REGNO (operands[1]) + 1, + operands[0], NULL_RTX)) + { + /* See if the stack pointer is used in the address. If it isn't, + we can push d0 or d1 (the insn can't use both of them) on + the stack, copy the byte to d0/1, perform our move from d0/d1, + and pop d0/1. */ + 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 + return \"move%.l %/d1,%-\;move%.l %1,%/d1\;move%.b %/d1,%0\;move%.l %+,%/d1\"; + } + else + { + /* Otherwise, we know that d0 cannot be used in the address + (since sp and one address register is). Assume that sp is + being used as a base register and replace the address + register that is our operand[1] with d0. */ + rtx reg_map[FIRST_PSEUDO_REGISTER]; + int i; + + for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) + reg_map[i] = 0; + + reg_map[REGNO (operands[1])] = gen_rtx (REG, Pmode, 0); + operands[0] = copy_rtx (operands[0]); + replace_regs (operands[0], reg_map, FIRST_PSEUDO_REGISTER, 0); + return \"exg %/d0,%1\;move%.b %/d0,%0\;exg %/d0,%1\"; + } + } + if (refers_to_regno_p (0, 1, operands[0], NULL_RTX)) return \"exg %/d1,%1\;move%.b %/d1,%0\;exg %/d1,%1\"; diff -rc2P gcc-2.4.3.1/config/m88k/m88k.h gcc-2.4.4/config/m88k/m88k.h *** gcc-2.4.3.1/config/m88k/m88k.h Wed May 12 17:16:52 1993 --- gcc-2.4.4/config/m88k/m88k.h Tue Jun 8 09:13:11 1993 *************** *** 667,671 **** for larger modes. */ #define HARD_REGNO_NREGS(REGNO, MODE) \ ! ((REGNO < FIRST_PSEUDO_REGISTER && REGNO >= FIRST_EXTENDED_REGISTER) \ ? 1 : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)) --- 667,671 ---- for larger modes. */ #define HARD_REGNO_NREGS(REGNO, MODE) \ ! (XRF_REGNO_P (REGNO) \ ? 1 : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)) *************** *** 680,685 **** area. */ #define HARD_REGNO_MODE_OK(REGNO, MODE) \ ! ((REGNO < FIRST_PSEUDO_REGISTER && REGNO >= FIRST_EXTENDED_REGISTER) \ ! ? TARGET_88110 \ : (((MODE) != DImode && (MODE) != DFmode && (MODE) != DCmode) \ || ((REGNO) & 1) == 0)) --- 680,685 ---- area. */ #define HARD_REGNO_MODE_OK(REGNO, MODE) \ ! (XRF_REGNO_P(REGNO) \ ! ? (TARGET_88110 && GET_MODE_CLASS (MODE) == MODE_FLOAT) \ : (((MODE) != DImode && (MODE) != DFmode && (MODE) != DCmode) \ || ((REGNO) & 1) == 0)) *************** *** 690,695 **** for any hard reg, then this must be 0 for correct output. */ #define MODES_TIEABLE_P(MODE1, MODE2) \ ! (((MODE1) == DFmode || (MODE1) == DCmode || (MODE1) == DImode) \ ! == ((MODE2) == DFmode || (MODE2) == DCmode || (MODE2) == DImode)) /* Specify the registers used for certain standard purposes. --- 690,697 ---- for any hard reg, then this must be 0 for correct output. */ #define MODES_TIEABLE_P(MODE1, MODE2) \ ! (((MODE1) == DFmode || (MODE1) == DCmode || (MODE1) == DImode \ ! || (TARGET_88110 && GET_MODE_CLASS (MODE1) == MODE_FLOAT)) \ ! == ((MODE2) == DFmode || (MODE2) == DCmode || (MODE2) == DImode \ ! || (TARGET_88110 && GET_MODE_CLASS (MODE2) == MODE_FLOAT))) /* Specify the registers used for certain standard purposes. diff -rc2P gcc-2.4.3.1/config/m88k/m88k.md gcc-2.4.4/config/m88k/m88k.md *** gcc-2.4.3.1/config/m88k/m88k.md Wed Feb 17 09:53:17 1993 --- gcc-2.4.4/config/m88k/m88k.md Sun Jun 6 03:56:22 1993 *************** *** 2055,2060 **** (define_insn "fix_truncdfsi2" ! [(set (match_operand:SI 0 "register_operand" "=r,x") ! (fix:SI (match_operand:DF 1 "register_operand" "r,r")))] "" "trnc.sd %0,%1" --- 2055,2060 ---- (define_insn "fix_truncdfsi2" ! [(set (match_operand:SI 0 "register_operand" "=r,r") ! (fix:SI (match_operand:DF 1 "register_operand" "r,x")))] "" "trnc.sd %0,%1" *************** *** 2062,2067 **** (define_insn "fix_truncsfsi2" ! [(set (match_operand:SI 0 "register_operand" "=r,x") ! (fix:SI (match_operand:SF 1 "register_operand" "r,r")))] "" "trnc.ss %0,%1" --- 2062,2067 ---- (define_insn "fix_truncsfsi2" ! [(set (match_operand:SI 0 "register_operand" "=r,r") ! (fix:SI (match_operand:SF 1 "register_operand" "r,x")))] "" "trnc.ss %0,%1" diff -rc2P gcc-2.4.3.1/config/m88k/t-dgux-gas gcc-2.4.4/config/m88k/t-dgux-gas *** gcc-2.4.3.1/config/m88k/t-dgux-gas --- gcc-2.4.4/config/m88k/t-dgux-gas Tue Jun 8 16:20:46 1993 *************** *** 0 **** --- 1,21 ---- + # Specify how to create the *.asm files + + MOVE_ASM = moveHI15x.asm moveQI16x.asm moveSI46x.asm moveSI64n.asm \ + moveHI48x.asm moveSI45x.asm moveSI47x.asm moveSI96x.asm \ + moveDI96x.asm + + $(MOVE_ASM): $(srcdir)/config/m88k/m88k-move.sh + $(srcdir)/config/m88k/m88k-move.sh + + LIB2FUNCS_EXTRA = $(MOVE_ASM) + LIBGCC1 = libgcc1.null + T_CPPFLAGS = -DUSE_GAS + + # For DG/UX we build crtbegin.o and crtend.o which serve to add begin and + # end labels to the .ctors and .dtors section when we link using gcc. + # In a coff environment, a link script is required. + + EXTRA_PARTS=crtbegin.o crtend.o m88kdgux.ld + + m88kdgux.ld: $(srcdir)/config/m88k/dgux.ld + rm -f m88kdgux.ld; cp $(srcdir)/config/m88k/dgux.ld ./m88kdgux.ld diff -rc2P gcc-2.4.3.1/config/m88k/t-luna-gas gcc-2.4.4/config/m88k/t-luna-gas *** gcc-2.4.3.1/config/m88k/t-luna-gas --- gcc-2.4.4/config/m88k/t-luna-gas Tue Jun 8 16:20:47 1993 *************** *** 0 **** --- 1,12 ---- + # Specify how to create the *.asm files + + MOVE_ASM = moveHI15x.asm moveQI16x.asm moveSI46x.asm moveSI64n.asm \ + moveHI48x.asm moveSI45x.asm moveSI47x.asm moveSI96x.asm \ + moveDI96x.asm + + $(MOVE_ASM): $(srcdir)/config/m88k/m88k-move.sh + bash $(srcdir)/config/m88k/m88k-move.sh -no-tdesc + + LIB2FUNCS_EXTRA = $(MOVE_ASM) + LIBGCC1 = libgcc1.null + T_CPPFLAGS = -DUSE_GAS diff -rc2P gcc-2.4.3.1/config/m88k/t-m88k-gas gcc-2.4.4/config/m88k/t-m88k-gas *** gcc-2.4.3.1/config/m88k/t-m88k-gas --- gcc-2.4.4/config/m88k/t-m88k-gas Tue Jun 8 16:20:47 1993 *************** *** 0 **** --- 1,17 ---- + # Specify how to create the *.asm files + + MOVE_ASM = moveHI15x.asm moveQI16x.asm moveSI46x.asm moveSI64n.asm \ + moveHI48x.asm moveSI45x.asm moveSI47x.asm moveSI96x.asm \ + moveDI96x.asm + + $(MOVE_ASM): $(srcdir)/config/m88k/m88k-move.sh + $(srcdir)/config/m88k/m88k-move.sh + + LIB2FUNCS_EXTRA = $(MOVE_ASM) + LIBGCC1 = libgcc1.null + T_CPPFLAGS = -DUSE_GAS + + # For svr4 we build crtbegin.o and crtend.o which serve to add begin and + # end labels to the .ctors and .dtors section when we link using gcc. + + EXTRA_PARTS=crtbegin.o crtend.o diff -rc2P gcc-2.4.3.1/config/mips/mips.c gcc-2.4.4/config/mips/mips.c *** gcc-2.4.3.1/config/mips/mips.c Sun May 30 23:03:16 1993 --- gcc-2.4.4/config/mips/mips.c Fri Jun 18 13:36:53 1993 *************** *** 2202,2205 **** --- 2202,2206 ---- int use_lwl_lwr = FALSE; int last_operand = num_regs+4; + int safe_regs = 4; int i; rtx xoperands[10]; *************** *** 2216,2227 **** /* Detect a bug in GCC, where it can give us a register ! the same as one of the addressing registers. */ ! for (i = 4; i < last_operand; i++) { ! if (reg_mentioned_p (operands[i], operands[0]) ! || reg_mentioned_p (operands[i], operands[1])) ! { ! abort_with_insn (insn, "register passed as address and temp register to block move"); ! } } --- 2217,2239 ---- /* Detect a bug in GCC, where it can give us a register ! the same as one of the addressing registers and reduce ! the number of registers available. */ ! for (i = 4; ! i < last_operand && safe_regs < (sizeof(xoperands) / sizeof(xoperands[0])); ! i++) { ! if (!reg_mentioned_p (operands[i], operands[0]) ! && !reg_mentioned_p (operands[i], operands[1])) ! ! xoperands[safe_regs++] = operands[i]; ! } ! ! if (safe_regs < last_operand) ! { ! xoperands[0] = operands[0]; ! xoperands[1] = operands[1]; ! xoperands[2] = operands[2]; ! xoperands[3] = operands[3]; ! return output_block_move (insn, xoperands, safe_regs-4, move_type); } *************** *** 2229,2233 **** emitting a few instructions, try to save time by using a temporary register for the pointer. */ ! if (bytes > 2*align || move_type != BLOCK_MOVE_NORMAL) { if (CONSTANT_P (src_reg)) --- 2241,2245 ---- emitting a few instructions, try to save time by using a temporary register for the pointer. */ ! if (num_regs > 2 && (bytes > 2*align || move_type != BLOCK_MOVE_NORMAL)) { if (CONSTANT_P (src_reg)) *************** *** 2264,2268 **** else if (num_regs < 1) ! abort (); if (TARGET_GAS && move_type != BLOCK_MOVE_LAST && set_noreorder++ == 0) --- 2276,2280 ---- else if (num_regs < 1) ! abort_with_insn (insn, "Cannot do block move, not enough scratch registers"); if (TARGET_GAS && move_type != BLOCK_MOVE_LAST && set_noreorder++ == 0) diff -rc2P gcc-2.4.3.1/config/mips/svr4-5.h gcc-2.4.4/config/mips/svr4-5.h *** gcc-2.4.3.1/config/mips/svr4-5.h Mon May 31 18:13:59 1993 --- gcc-2.4.4/config/mips/svr4-5.h Fri Jun 4 00:59:21 1993 *************** *** 20,25 **** #define MIPS_SVR4 ! #define CPP_PREDEFINES "-Dmips -Dunix -Dhost_mips -DMIPSEB -DR3000 -DSYSTYPE_SVR4 \ ! -D_mips -D_unix -D_host_mips -D_MIPSEB -D_R3000 -D_SYSTYPE_SVR4" #define STANDARD_INCLUDE_DIR "/svr4/usr/include" --- 20,27 ---- #define MIPS_SVR4 ! #define CPP_PREDEFINES \ ! "-Dmips -Dunix -Dhost_mips -DMIPSEB -DR3000 -DSYSTYPE_SVR4 \ ! -D_mips -D_unix -D_host_mips -D_MIPSEB -D_R3000 -D_SYSTYPE_SVR4 \ ! -D_MIPS_SZINT=32 -D_MIPS_SZLONG=32 -D_MIPS_SZPTR=32" #define STANDARD_INCLUDE_DIR "/svr4/usr/include" diff -rc2P gcc-2.4.3.1/config/nextstep.h gcc-2.4.4/config/nextstep.h *** gcc-2.4.3.1/config/nextstep.h Wed May 26 19:52:08 1993 --- gcc-2.4.4/config/nextstep.h Thu Jun 3 22:26:45 1993 *************** *** 28,33 **** { \ { GPLUSPLUS_INCLUDE_DIR, 1}, \ - { GCC_INCLUDE_DIR, 0}, \ { LOCAL_INCLUDE_DIR, 0}, \ { "/NextDeveloper/Headers", 0}, \ { "/NextDeveloper/Headers/ansi", 0}, \ --- 28,40 ---- { \ { GPLUSPLUS_INCLUDE_DIR, 1}, \ { LOCAL_INCLUDE_DIR, 0}, \ + { TOOL_INCLUDE_DIR, 0 }, \ + { GCC_INCLUDE_DIR, 0}, \ + /* These are for fixincludes-fixed ansi/bsd headers \ + which wouldn't be found otherwise. \ + (The use of string catenation here is OK since \ + NeXT's native compiler is derived from GCC.) */ \ + { GCC_INCLUDE_DIR "/ansi", 0 }, \ + { GCC_INCLUDE_DIR "/bsd", 0 }, \ { "/NextDeveloper/Headers", 0}, \ { "/NextDeveloper/Headers/ansi", 0}, \ diff -rc2P gcc-2.4.3.1/config/pa/pa.c gcc-2.4.4/config/pa/pa.c *** gcc-2.4.3.1/config/pa/pa.c Mon May 31 02:20:11 1993 --- gcc-2.4.4/config/pa/pa.c Fri Jun 4 02:52:07 1993 *************** *** 2156,2162 **** int size; { /* hppa_expand_epilogue does the dirty work now. We just need to output the assembler directives which denote the end ! of a function. */ fprintf (file, "\t.EXIT\n\t.PROCEND\n"); } --- 2156,2184 ---- int size; { + + rtx insn = get_last_insn (); + /* hppa_expand_epilogue does the dirty work now. We just need to output the assembler directives which denote the end ! of a function. ! ! To make debuggers happy, emit a nop if the epilogue was completely ! eliminated due to a volatile call as the last insn in the ! current function. That way the return address (in %r2) will ! always point to a valid instruction in the current function. */ ! ! /* Get the last real insn. */ ! if (GET_CODE (insn) == NOTE) ! insn = prev_real_insn (insn); ! ! /* If it is a sequence, then look inside. */ ! if (insn && GET_CODE (insn) == INSN && GET_CODE (PATTERN (insn)) == SEQUENCE) ! insn = XVECEXP (PATTERN (insn), 0, 0); ! ! /* If insn is a CALL_INSN, then it must be a call to a volatile ! function (otherwise there would be epilogue insns). */ ! if (insn && GET_CODE (insn) == CALL_INSN) ! fprintf (file, "\tnop\n"); ! fprintf (file, "\t.EXIT\n\t.PROCEND\n"); } *************** *** 2163,2167 **** void ! hppa_expand_epilogue() { rtx tmpreg; --- 2185,2189 ---- void ! hppa_expand_epilogue () { rtx tmpreg; diff -rc2P gcc-2.4.3.1/config/pa/pa.h gcc-2.4.4/config/pa/pa.h *** gcc-2.4.3.1/config/pa/pa.h Mon May 31 00:39:48 1993 --- gcc-2.4.4/config/pa/pa.h Thu Jun 17 03:14:46 1993 *************** *** 111,115 **** %{mpa-risc-1-1:-D__hp9000s700 -D_PA_RISC1_1}" #else ! #define CPP_SPEC "%{!mpa-risc-1-0:%{!mnosnake:-D__hp700s700 -D_PA_RISC1_1}}" #endif --- 111,115 ---- %{mpa-risc-1-1:-D__hp9000s700 -D_PA_RISC1_1}" #else ! #define CPP_SPEC "%{!mpa-risc-1-0:%{!mnosnake:-D__hp9000s700 -D_PA_RISC1_1}}" #endif *************** *** 1079,1087 **** /* Include all constant integers and constant doubles, but not ! floating-point, except for floating-point zero. */ #define LEGITIMATE_CONSTANT_P(X) \ ! (GET_MODE_CLASS (GET_MODE (X)) != MODE_FLOAT \ ! || (X) == CONST0_RTX (GET_MODE (X))) /* Subroutine for EXTRA_CONSTRAINT. --- 1079,1090 ---- /* Include all constant integers and constant doubles, but not ! floating-point, except for floating-point zero. + Also reject function labels as reload can not handle them correctly + right now. (Fix this for 2.5). */ #define LEGITIMATE_CONSTANT_P(X) \ ! ((GET_MODE_CLASS (GET_MODE (X)) != MODE_FLOAT \ ! || (X) == CONST0_RTX (GET_MODE (X))) \ ! && ! function_label_operand (X, VOIDmode)) /* Subroutine for EXTRA_CONSTRAINT. *************** *** 1460,1464 **** #define RTX_COSTS(X,CODE,OUTER_CODE) \ case MULT: \ ! return COSTS_N_INSNS (20); \ case DIV: \ case UDIV: \ --- 1463,1468 ---- #define RTX_COSTS(X,CODE,OUTER_CODE) \ case MULT: \ ! return TARGET_SNAKE && ! TARGET_DISABLE_FPREGS \ ! ? COSTS_N_INSNS (8) : COSTS_N_INSNS (20); \ case DIV: \ case UDIV: \ *************** *** 1694,1699 **** { fprintf (FILE, "\t.word "); \ if (TARGET_SHARED_LIBS \ ! && function_label_operand (VALUE, VOIDmode)\ ! && in_section != in_text) \ fprintf (FILE, "P%%"); \ output_addr_const (FILE, (VALUE)); \ --- 1698,1702 ---- { fprintf (FILE, "\t.word "); \ if (TARGET_SHARED_LIBS \ ! && function_label_operand (VALUE, VOIDmode))\ fprintf (FILE, "P%%"); \ output_addr_const (FILE, (VALUE)); \ diff -rc2P gcc-2.4.3.1/config/pa/pa.md gcc-2.4.4/config/pa/pa.md *** gcc-2.4.3.1/config/pa/pa.md Mon May 31 17:35:48 1993 --- gcc-2.4.4/config/pa/pa.md Thu Jun 17 17:56:47 1993 *************** *** 2150,2154 **** (match_operand:SI 2 "and_operand" "rO,P")))] "" ! "* return output_and (operands); ") (define_insn "" --- 2150,2156 ---- (match_operand:SI 2 "and_operand" "rO,P")))] "" ! "* return output_and (operands); " ! [(set_attr "type" "binary") ! (set_attr "length" "1")]) (define_insn "" *************** *** 2205,2209 **** (match_operand:SI 2 "ior_operand" "")))] "" ! "* return output_ior (operands); ") (define_insn "" --- 2207,2213 ---- (match_operand:SI 2 "ior_operand" "")))] "" ! "* return output_ior (operands); " ! [(set_attr "type" "binary") ! (set_attr "length" "1")]) (define_insn "" *************** *** 2462,2466 **** (match_operand:SI 2 "const_int_operand" "n")))] "" ! "zdep %1,%P2,%L2,%0") ; Match cases of op1 a CONST_INT here that zvdep_imm doesn't handle. --- 2466,2472 ---- (match_operand:SI 2 "const_int_operand" "n")))] "" ! "zdep %1,%P2,%L2,%0" ! [(set_attr "type" "binary") ! (set_attr "length" "1")]) ; Match cases of op1 a CONST_INT here that zvdep_imm doesn't handle. *************** *** 2515,2519 **** (match_operand:SI 2 "const_int_operand" "n")))] "" ! "extrs %1,%P2,%L2,%0") (define_insn "vextrs32" --- 2521,2527 ---- (match_operand:SI 2 "const_int_operand" "n")))] "" ! "extrs %1,%P2,%L2,%0" ! [(set_attr "type" "binary") ! (set_attr "length" "1")]) (define_insn "vextrs32" *************** *** 2532,2536 **** "@ vshd 0,%1,%0 ! extru %1,%P2,%L2,%0") (define_insn "rotrsi3" --- 2540,2546 ---- "@ vshd 0,%1,%0 ! extru %1,%P2,%L2,%0" ! [(set_attr "type" "binary") ! (set_attr "length" "1")]) (define_insn "rotrsi3" *************** *** 2548,2552 **** else return \"vshd %1,%1,%0\"; ! }") (define_insn "rotlsi3" --- 2558,2564 ---- else return \"vshd %1,%1,%0\"; ! }" ! [(set_attr "type" "binary") ! (set_attr "length" "1")]) (define_insn "rotlsi3" *************** *** 2559,2563 **** operands[2] = GEN_INT ((32 - INTVAL (operands[2])) & 31); return \"shd %1,%1,%2,%0\"; ! }") (define_insn "" --- 2571,2577 ---- operands[2] = GEN_INT ((32 - INTVAL (operands[2])) & 31); return \"shd %1,%1,%2,%0\"; ! }" ! [(set_attr "type" "binary") ! (set_attr "length" "1")]) (define_insn "" *************** *** 2597,2601 **** operands[2] = GEN_INT (31 - cnt); return \"zdep %1,%2,%3,%0\"; ! }") ;; Unconditional and other jump instructions. --- 2611,2617 ---- operands[2] = GEN_INT (31 - cnt); return \"zdep %1,%2,%3,%0\"; ! }" ! [(set_attr "type" "binary") ! (set_attr "length" "1")]) ;; Unconditional and other jump instructions. *************** *** 2885,2889 **** (plus:SI (match_dup 0) (match_dup 1))) (clobber (match_scratch:SI 4 "=X,r"))] ! "" "* { --- 2901,2905 ---- (plus:SI (match_dup 0) (match_dup 1))) (clobber (match_scratch:SI 4 "=X,r"))] ! "0" "* { diff -rc2P gcc-2.4.3.1/config/rs6000/rs6000.c gcc-2.4.4/config/rs6000/rs6000.c *** gcc-2.4.3.1/config/rs6000/rs6000.c Sat May 15 09:10:29 1993 --- gcc-2.4.4/config/rs6000/rs6000.c Fri Jun 11 21:44:40 1993 *************** *** 1,4 **** /* Subroutines used for code generation on IBM RS/6000. ! Copyright (C) 1991 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@nyu.edu) --- 1,4 ---- /* Subroutines used for code generation on IBM RS/6000. ! Copyright (C) 1991, 1993 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@nyu.edu) *************** *** 1745,1751 **** We name the section in the same manner as xlc. The name begins with an underscore followed by the filename (after stripping any leading directory ! names) with the period replaced by the string SECTION_DESC. If FILENAME ! does not contain a period, SECTION_DESC is appended at the end of the ! name. */ void --- 1745,1751 ---- We name the section in the same manner as xlc. The name begins with an underscore followed by the filename (after stripping any leading directory ! names) with the last period replaced by the string SECTION_DESC. If ! FILENAME does not contain a period, SECTION_DESC is appended to the end of ! the name. */ void *************** *** 1755,1769 **** char *section_desc; { ! char *q, *after_last_slash; char *p; int len; - int used_desc = 0; after_last_slash = filename; for (q = filename; *q; q++) ! if (*q == '/') ! after_last_slash = q + 1; ! len = strlen (filename) + strlen (section_desc) + 2; *buf = (char *) permalloc (len); --- 1755,1772 ---- char *section_desc; { ! char *q, *after_last_slash, *last_period; char *p; int len; after_last_slash = filename; for (q = filename; *q; q++) ! { ! if (*q == '/') ! after_last_slash = q + 1; ! else if (*q == '.') ! last_period = q; ! } ! len = strlen (after_last_slash) + strlen (section_desc) + 2; *buf = (char *) permalloc (len); *************** *** 1773,1781 **** for (q = after_last_slash; *q; q++) { ! if (*q == '.') { strcpy (p, section_desc); p += strlen (section_desc); - used_desc = 1; } --- 1776,1783 ---- for (q = after_last_slash; *q; q++) { ! if (q == last_period) { strcpy (p, section_desc); p += strlen (section_desc); } *************** *** 1784,1788 **** } ! if (! used_desc) strcpy (p, section_desc); else --- 1786,1790 ---- } ! if (last_period == 0) strcpy (p, section_desc); else diff -rc2P gcc-2.4.3.1/config/rs6000/rs6000.md gcc-2.4.4/config/rs6000/rs6000.md *** gcc-2.4.3.1/config/rs6000/rs6000.md Tue Jun 1 07:40:15 1993 --- gcc-2.4.4/config/rs6000/rs6000.md Fri Jun 11 21:46:27 1993 *************** *** 2260,2277 **** operands[1] = alter_subreg (operands[1]); ! /* If we are being called from reload, it is possible that operands[1] ! is a hard non-fp register. So handle those cases. */ ! if (reload_in_progress && GET_CODE (operands[1]) == REG ! && REGNO (operands[1]) < 32) { rtx stack_slot; ! /* Remember that we only see a pseudo here if it didn't get a hard ! register, so it is memory. */ if (GET_CODE (operands[0]) == MEM || (GET_CODE (operands[0]) == REG && (REGNO (operands[0]) < 32 ! || REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER)) ! || (GET_CODE (operands[0]) == REG && REGNO (operands[0]) < 32)) { emit_move_insn (operand_subword (operands[0], 0, 0, SFmode), --- 2260,2276 ---- operands[1] = alter_subreg (operands[1]); ! if (GET_CODE (operands[1]) == REG && REGNO (operands[1]) < 32) { rtx stack_slot; ! /* If this is a store to memory or another integer register do the ! move directly. Otherwise store to a temporary stack slot and ! load from there into a floating point register. */ ! if (GET_CODE (operands[0]) == MEM || (GET_CODE (operands[0]) == REG && (REGNO (operands[0]) < 32 ! || (reload_in_progress ! && REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER)))) { emit_move_insn (operand_subword (operands[0], 0, 0, SFmode), *************** *** 2372,2388 **** operands[1] = alter_subreg (operands[1]); ! /* If we are being called from reload, it is possible that operands[1] ! is a hard non-fp register. So handle those cases. */ ! if (reload_in_progress && GET_CODE (operands[1]) == REG ! && REGNO (operands[1]) < 32) { rtx stack_slot; ! /* Remember that we only see a pseudo here if it didn't get a hard ! register, so it is memory. */ if (GET_CODE (operands[0]) == MEM || (GET_CODE (operands[0]) == REG && (REGNO (operands[0]) < 32 ! || REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER))) { emit_move_insn (operand_subword (operands[0], 0, 0, DFmode), --- 2371,2387 ---- operands[1] = alter_subreg (operands[1]); ! if (GET_CODE (operands[1]) == REG && REGNO (operands[1]) < 32) { rtx stack_slot; ! /* If this is a store to memory or another integer register do the ! move directly. Otherwise store to a temporary stack slot and ! load from there into a floating point register. */ ! if (GET_CODE (operands[0]) == MEM || (GET_CODE (operands[0]) == REG && (REGNO (operands[0]) < 32 ! || (reload_in_progress ! && REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER)))) { emit_move_insn (operand_subword (operands[0], 0, 0, DFmode), diff -rc2P gcc-2.4.3.1/config/sparc/sparc.c gcc-2.4.4/config/sparc/sparc.c *** gcc-2.4.3.1/config/sparc/sparc.c Mon May 31 00:09:58 1993 --- gcc-2.4.4/config/sparc/sparc.c Tue Jun 8 14:50:09 1993 *************** *** 114,118 **** } ! /* PC-relative call insn on SPARC is independent of `memory_operand'. */ int --- 114,119 ---- } ! /* Call insn on SPARC can take a PC-relative constant address, or any regular ! memory address. */ int *************** *** 124,128 **** abort (); op = XEXP (op, 0); ! return (REG_P (op) || CONSTANT_P (op)); } --- 125,129 ---- abort (); op = XEXP (op, 0); ! return (CONSTANT_P (op) || memory_address_p (Pmode, op)); } *************** *** 132,136 **** enum machine_mode mode; { ! return (REG_P (op) || CONSTANT_P (op)); } --- 133,137 ---- enum machine_mode mode; { ! return (CONSTANT_P (op) || memory_address_p (Pmode, op)); } diff -rc2P gcc-2.4.3.1/config/sparc/sparc.h gcc-2.4.4/config/sparc/sparc.h *** gcc-2.4.3.1/config/sparc/sparc.h Sun May 9 23:39:12 1993 --- gcc-2.4.4/config/sparc/sparc.h Tue Jun 8 14:47:11 1993 *************** *** 1472,1476 **** #define RTX_COSTS(X,CODE,OUTER_CODE) \ case MULT: \ ! return COSTS_N_INSNS (25); \ case DIV: \ case UDIV: \ --- 1472,1476 ---- #define RTX_COSTS(X,CODE,OUTER_CODE) \ case MULT: \ ! return TARGET_V8 ? COSTS_N_INSNS (5) : COSTS_N_INSNS (25); \ case DIV: \ case UDIV: \ diff -rc2P gcc-2.4.3.1/config/vax/vax.h gcc-2.4.4/config/vax/vax.h *** gcc-2.4.3.1/config/vax/vax.h Wed Mar 31 15:37:19 1993 --- gcc-2.4.4/config/vax/vax.h Sun Jun 6 16:31:31 1993 *************** *** 1211,1215 **** fputs (rev_cond_name (X), FILE); \ else if (CODE == 'D' && GET_CODE (X) == CONST_INT && INTVAL (X) < 0) \ ! fprintf (FILE, "0xffffffff%08x", INTVAL (X)); \ else if (CODE == 'P' && GET_CODE (X) == CONST_INT) \ fprintf (FILE, "$%d", INTVAL (X) + 1); \ --- 1211,1215 ---- fputs (rev_cond_name (X), FILE); \ else if (CODE == 'D' && GET_CODE (X) == CONST_INT && INTVAL (X) < 0) \ ! fprintf (FILE, "$0xffffffff%08x", INTVAL (X)); \ else if (CODE == 'P' && GET_CODE (X) == CONST_INT) \ fprintf (FILE, "$%d", INTVAL (X) + 1); \ diff -rc2P gcc-2.4.3.1/config/vax/vms.h gcc-2.4.4/config/vax/vms.h *** gcc-2.4.3.1/config/vax/vms.h Thu Mar 18 00:08:34 1993 --- gcc-2.4.4/config/vax/vms.h Sat Jun 19 04:15:20 1993 *************** *** 96,116 **** * be a space in the function name, and in g++ there is always a "(" in the * function name, thus there should never be any confusion. */ #define MAYBE_VMS_FUNCTION_PROLOGUE(FILE) \ { extern char *current_function_name; \ ! if (!strcmp ("main", current_function_name)) \ ! fprintf(FILE, "\tjsb _C$MAIN_ARGS\n"); \ ! else { \ ! char *p = current_function_name; \ ! while (*p != '\0') \ ! if (*p == *__MAIN_NAME) \ ! if (strncmp(p, __MAIN_NAME, (sizeof __MAIN_NAME)-1) == 0) {\ ! fprintf(FILE, "\tjsb _C$MAIN_ARGS\n");\ ! break; \ ! } else \ ! p++; \ else \ ! p++; \ ! }; \ } --- 96,120 ---- * be a space in the function name, and in g++ there is always a "(" in the * function name, thus there should never be any confusion. + * + * Adjusting the stack pointer by 4 before calling C$MAIN_ARGS is required + * when linking with the VMS POSIX version of the C run-time library; using + * `subl2 $4,r0' is adequate but we use `clrl -(sp)' instead. The extra 4 + * bytes could be removed after the call because STARTING_FRAME_OFFSET's + * setting of -4 will end up adding them right back again, but don't bother. */ #define MAYBE_VMS_FUNCTION_PROLOGUE(FILE) \ { extern char *current_function_name; \ ! char *p = current_function_name; \ ! int is_main = strcmp ("main", p) == 0; \ ! while (!is_main && *p != '\0') \ ! { \ ! if (*p == *__MAIN_NAME \ ! && strncmp (p, __MAIN_NAME, sizeof __MAIN_NAME - sizeof "") == 0) \ ! is_main = 1; \ else \ ! p++; \ ! } \ ! if (is_main) \ ! fprintf (FILE, "\t%s\n\t%s\n", "clrl -(sp)", "jsb _C$MAIN_ARGS"); \ } diff -rc2P gcc-2.4.3.1/configure gcc-2.4.4/configure *** gcc-2.4.3.1/configure Tue Jun 1 01:11:39 1993 --- gcc-2.4.4/configure Fri Jun 18 14:21:08 1993 *************** *** 335,338 **** --- 335,345 ---- use_collect2=yes ;; + i[34]86-*-osfelf*) # 386 using OSF/1 with Elf objects + cpu_type=i386 + tm_file=i386/osfelf.h + xmake_file=i386/x-osfrose + tmake_file=i386/t-osfrose + use_collect2=no + ;; i[34]86-sequent-bsd*) # 80386 from Sequent cpu_type=i386 *************** *** 831,835 **** m88k-*-luna*) tm_file=m88k/luna.h ! tmake_file=m88k/t-luna ;; m88k-dg-dgux*) --- 838,847 ---- m88k-*-luna*) tm_file=m88k/luna.h ! if [ x$gas = xyes ] ! then ! tmake_file=m88k/t-luna-gas ! else ! tmake_file=m88k/t-luna ! fi ;; m88k-dg-dgux*) *************** *** 836,841 **** tm_file=m88k/dgux.h xmake_file=m88k/x-dgux - tmake_file=m88k/t-dgux broken_install=yes ;; m88k-*-sysv4*) --- 848,858 ---- tm_file=m88k/dgux.h xmake_file=m88k/x-dgux broken_install=yes + if [ x$gas = xyes ] + then + tmake_file=m88k/t-dgux-gas + else + tmake_file=m88k/t-dgux + fi ;; m88k-*-sysv4*) *************** *** 848,851 **** --- 865,872 ---- xm_file=m88k/xm-sysv3.h xmake_file=m88k/x-dolph + if [ x$gas = xyes ] + then + tmake_file=m88k/t-m88k-gas + fi ;; *************** *** 854,857 **** --- 875,882 ---- xm_file=m88k/xm-sysv3.h xmake_file=m88k/x-tekXD88 + if [ x$gas = xyes ] + then + tmake_file=m88k/t-m88k-gas + fi ;; *************** *** 859,862 **** --- 884,891 ---- tm_file=m88k/sysv3.h xm_file=m88k/xm-sysv3.h + if [ x$gas = xyes ] + then + tmake_file=m88k/t-m88k-gas + fi ;; # This hasn't been upgraded to GCC 2. *************** *** 1297,1300 **** --- 1326,1330 ---- tmake_file=clipper/t-clix xmake_file=clipper/x-clix + install_headers_dir=install-headers-cpio ;; *) diff -rc2P gcc-2.4.3.1/cp-decl.c gcc-2.4.4/cp-decl.c *** gcc-2.4.3.1/cp-decl.c Mon May 10 05:54:59 1993 --- gcc-2.4.4/cp-decl.c Sun Jun 13 16:59:26 1993 *************** *** 9795,9799 **** { ctype = TREE_TYPE (TREE_CHAIN (decl1)); ! if (TREE_CODE (ctype) != RECORD_TYPE) ctype = NULL_TREE; else --- 9795,9803 ---- { ctype = TREE_TYPE (TREE_CHAIN (decl1)); ! ! /* CTYPE could be null here if we're dealing with a template; ! for example, `inline friend float foo()' inside a template ! will have no CTYPE set. */ ! if (ctype && TREE_CODE (ctype) != RECORD_TYPE) ctype = NULL_TREE; else *************** *** 10855,10865 **** } - /* Must mark the RESULT_DECL as being in this function. */ - DECL_CONTEXT (DECL_RESULT (fndecl)) = DECL_INITIAL (fndecl); - - /* Obey `register' declarations if `setjmp' is called in this fn. */ - if (flag_traditional && current_function_calls_setjmp) - setjmp_protect (DECL_INITIAL (fndecl)); - if (cleanup_label) /* Emit label at beginning of cleanup code for parameters. */ --- 10859,10862 ---- *************** *** 10927,10930 **** --- 10924,10934 ---- my_friendly_abort (122); poplevel (1, 0, 1); + + /* Must mark the RESULT_DECL as being in this function. */ + DECL_CONTEXT (DECL_RESULT (fndecl)) = DECL_INITIAL (fndecl); + + /* Obey `register' declarations if `setjmp' is called in this fn. */ + if (flag_traditional && current_function_calls_setjmp) + setjmp_protect (DECL_INITIAL (fndecl)); /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point diff -rc2P gcc-2.4.3.1/cp-search.c gcc-2.4.4/cp-search.c *** gcc-2.4.3.1/cp-search.c Fri May 7 18:05:24 1993 --- gcc-2.4.4/cp-search.c Mon Jun 14 03:32:27 1993 *************** *** 1643,1646 **** --- 1643,1648 ---- { tree base_binfo = TREE_VEC_ELT (binfos, i); + if (TREE_VIA_VIRTUAL (base_binfo)) + base_binfo = TYPE_BINFO (BINFO_TYPE (base_binfo)); if (is_subobject_of_p (parent, base_binfo)) return 1; *************** *** 1682,1686 **** while (fndecls) { ! if (DECL_CLASS_CONTEXT (fndecls) == type) return index; fndecls = TREE_CHAIN (fndecls); --- 1684,1689 ---- while (fndecls) { ! if (TYPE_MAIN_VARIANT (DECL_CLASS_CONTEXT (fndecls)) ! == TYPE_MAIN_VARIANT (type)) return index; fndecls = TREE_CHAIN (fndecls); *************** *** 1703,1710 **** { int head = 0, tail = 0; ! tree rval, rval_binfo = NULL_TREE; tree type, basetype_chain, basetype_path; enum visibility_type this_v = visibility_default; ! tree entry, binfo; enum visibility_type own_visibility = visibility_default; int vbase_name_p = VBASE_NAME_P (name); --- 1706,1713 ---- { int head = 0, tail = 0; ! tree rval, rval_binfo = NULL_TREE, rval_binfo_h; tree type, basetype_chain, basetype_path; enum visibility_type this_v = visibility_default; ! tree entry, binfo, binfo_h; enum visibility_type own_visibility = visibility_default; int vbase_name_p = VBASE_NAME_P (name); *************** *** 1717,1720 **** --- 1720,1730 ---- non-function member is found. */ + /* rval_binfo_h and binfo_h are binfo values used when we perform the + hiding checks, as virtual base classes may not be shared. The strategy + is we always go into the the binfo hierarchy owned by TYPE_BINFO of + virtual base classes, as we cross virtual base class lines. This way + we know that binfo of a virtual base class will always == itself when + found along any line. (mrs) */ + /* Things for memoization. */ char *errstr = 0; *************** *** 1766,1770 **** rval = lookup_field_1 (type, name); if (rval || lookup_fnfields_here (type, name)>=0) ! rval_binfo = basetype_path; if (rval && TREE_CODE (rval) != TYPE_DECL && want_type) --- 1776,1783 ---- rval = lookup_field_1 (type, name); if (rval || lookup_fnfields_here (type, name)>=0) ! { ! rval_binfo = basetype_path; ! rval_binfo_h = rval_binfo; ! } if (rval && TREE_CODE (rval) != TYPE_DECL && want_type) *************** *** 1826,1829 **** --- 1839,1843 ---- BINFO_INHERITANCE_CHAIN (basetype_path) = NULL_TREE; binfo = basetype_path; + binfo_h = binfo; while (1) *************** *** 1846,1849 **** --- 1860,1871 ---- TREE_VIA_PROTECTED (btypes) = TREE_VIA_PROTECTED (base_binfo); TREE_VIA_VIRTUAL (btypes) = TREE_VIA_VIRTUAL (base_binfo); + if (TREE_VIA_VIRTUAL (base_binfo)) + btypes = tree_cons (NULL_TREE, + TYPE_BINFO (BINFO_TYPE (TREE_VEC_ELT (BINFO_BASETYPES (binfo_h), i))), + btypes); + else + btypes = tree_cons (NULL_TREE, + TREE_VEC_ELT (BINFO_BASETYPES (binfo_h), i), + btypes); obstack_ptr_grow (&search_obstack, btypes); tail += 1; *************** *** 1858,1861 **** --- 1880,1885 ---- basetype_chain = search_stack->first[head++]; + binfo_h = TREE_VALUE (basetype_chain); + basetype_chain = TREE_CHAIN (basetype_chain); basetype_path = TREE_VALUE (basetype_chain); if (TREE_CHAIN (basetype_chain)) *************** *** 1875,1879 **** if (nval || lookup_fnfields_here (type, name)>=0) { ! if (rval_binfo && hides (rval_binfo, binfo)) { /* This is ok, the member found is in rval_binfo, not --- 1899,1903 ---- if (nval || lookup_fnfields_here (type, name)>=0) { ! if (rval_binfo && hides (rval_binfo_h, binfo_h)) { /* This is ok, the member found is in rval_binfo, not *************** *** 1880,1884 **** here (binfo). */ } ! else if (rval_binfo==NULL_TREE || hides (binfo, rval_binfo)) { /* This is ok, the member found is here (binfo), not in --- 1904,1908 ---- here (binfo). */ } ! else if (rval_binfo==NULL_TREE || hides (binfo_h, rval_binfo_h)) { /* This is ok, the member found is here (binfo), not in *************** *** 1899,1902 **** --- 1923,1927 ---- } rval_binfo = binfo; + rval_binfo_h = binfo_h; } else *************** *** 1937,1941 **** if (this_v != visibility_default) ! new_v = compute_visibility (TREE_VALUE (*tp), rval); if (this_v != visibility_default && new_v != this_v) { --- 1962,1966 ---- if (this_v != visibility_default) ! new_v = compute_visibility (TREE_VALUE (TREE_CHAIN (*tp)), rval); if (this_v != visibility_default && new_v != this_v) { *************** *** 1944,1948 **** } own_visibility = new_v; ! CLEAR_BINFO_FIELDS_MARKED (TREE_VALUE (*tp)); tp += 1; } --- 1969,1973 ---- } own_visibility = new_v; ! CLEAR_BINFO_FIELDS_MARKED (TREE_VALUE (TREE_CHAIN (*tp))); tp += 1; } *************** *** 1952,1956 **** while (tp < search_tail) { ! CLEAR_BINFO_FIELDS_MARKED (TREE_VALUE (*tp)); tp += 1; } --- 1977,1981 ---- while (tp < search_tail) { ! CLEAR_BINFO_FIELDS_MARKED (TREE_VALUE (TREE_CHAIN (*tp))); tp += 1; } *************** *** 2121,2126 **** { int head = 0, tail = 0; ! tree type, rval, rval_binfo = NULL_TREE, rvals = NULL_TREE; ! tree entry, binfo, basetype_chain; int find_all = 0; --- 2146,2151 ---- { int head = 0, tail = 0; ! tree type, rval, rval_binfo = NULL_TREE, rvals = NULL_TREE, rval_binfo_h; ! tree entry, binfo, basetype_chain, binfo_h; int find_all = 0; *************** *** 2132,2135 **** --- 2157,2167 ---- function member is found. */ + /* rval_binfo_h and binfo_h are binfo values used when we perform the + hiding checks, as virtual base classes may not be shared. The strategy + is we always go into the the binfo hierarchy owned by TYPE_BINFO of + virtual base classes, as we cross virtual base class lines. This way + we know that binfo of a virtual base class will always == itself when + found along any line. (mrs) */ + /* For now, don't try this. */ int protect = complain; *************** *** 2149,2152 **** --- 2181,2185 ---- binfo = basetype_path; + binfo_h = binfo; type = BINFO_TYPE (basetype_path); *************** *** 2213,2217 **** index = lookup_fnfields_here (type, name); if (index >= 0 || lookup_field_1 (type, name)) ! rval_binfo = basetype_path; if (index >= 0) --- 2246,2253 ---- index = lookup_fnfields_here (type, name); if (index >= 0 || lookup_field_1 (type, name)) ! { ! rval_binfo = basetype_path; ! rval_binfo_h = rval_binfo; ! } if (index >= 0) *************** *** 2246,2249 **** --- 2282,2286 ---- BINFO_INHERITANCE_CHAIN (basetype_path) = NULL_TREE; binfo = basetype_path; + binfo_h = binfo; while (1) *************** *** 2266,2269 **** --- 2303,2314 ---- TREE_VIA_PROTECTED (btypes) = TREE_VIA_PROTECTED (base_binfo); TREE_VIA_VIRTUAL (btypes) = TREE_VIA_VIRTUAL (base_binfo); + if (TREE_VIA_VIRTUAL (base_binfo)) + btypes = tree_cons (NULL_TREE, + TYPE_BINFO (BINFO_TYPE (TREE_VEC_ELT (BINFO_BASETYPES (binfo_h), i))), + btypes); + else + btypes = tree_cons (NULL_TREE, + TREE_VEC_ELT (BINFO_BASETYPES (binfo_h), i), + btypes); obstack_ptr_grow (&search_obstack, btypes); tail += 1; *************** *** 2278,2281 **** --- 2323,2328 ---- basetype_chain = search_stack->first[head++]; + binfo_h = TREE_VALUE (basetype_chain); + basetype_chain = TREE_CHAIN (basetype_chain); basetype_path = TREE_VALUE (basetype_chain); if (TREE_CHAIN (basetype_chain)) *************** *** 2295,2299 **** if (index >= 0 || (lookup_field_1 (type, name)!=NULL_TREE && !find_all)) { ! if (rval_binfo && !find_all && hides (rval_binfo, binfo)) { /* This is ok, the member found is in rval_binfo, not --- 2342,2346 ---- if (index >= 0 || (lookup_field_1 (type, name)!=NULL_TREE && !find_all)) { ! if (rval_binfo && !find_all && hides (rval_binfo_h, binfo_h)) { /* This is ok, the member found is in rval_binfo, not *************** *** 2300,2304 **** here (binfo). */ } ! else if (rval_binfo==NULL_TREE || find_all || hides (binfo, rval_binfo)) { /* This is ok, the member found is here (binfo), not in --- 2347,2351 ---- here (binfo). */ } ! else if (rval_binfo==NULL_TREE || find_all || hides (binfo_h, rval_binfo_h)) { /* This is ok, the member found is here (binfo), not in *************** *** 2321,2324 **** --- 2368,2372 ---- } rval_binfo = binfo; + rval_binfo_h = binfo_h; } else *************** *** 2337,2341 **** while (tp < search_tail) { ! CLEAR_BINFO_FIELDS_MARKED (TREE_VALUE (*tp)); tp += 1; } --- 2385,2389 ---- while (tp < search_tail) { ! CLEAR_BINFO_FIELDS_MARKED (TREE_VALUE (TREE_CHAIN (*tp))); tp += 1; } diff -rc2P gcc-2.4.3.1/cp-typeck.c gcc-2.4.4/cp-typeck.c *** gcc-2.4.3.1/cp-typeck.c Wed May 12 14:07:23 1993 --- gcc-2.4.4/cp-typeck.c Wed Jun 16 19:44:22 1993 *************** *** 3555,3558 **** --- 3555,3559 ---- else if (TREE_CODE (arg) == FUNCTION_DECL && DECL_NAME (arg) + && DECL_CONTEXT (arg) == NULL_TREE && IDENTIFIER_LENGTH (DECL_NAME (arg)) == 4 && IDENTIFIER_POINTER (DECL_NAME (arg))[0] == 'm' diff -rc2P gcc-2.4.3.1/cse.c gcc-2.4.4/cse.c *** gcc-2.4.3.1/cse.c Fri May 28 18:40:22 1993 --- gcc-2.4.4/cse.c Thu Jun 17 15:16:34 1993 *************** *** 1,4 **** /* Common subexpression elimination for GNU compiler. ! Copyright (C) 1987, 1988, 1989, 1992. 1993 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Common subexpression elimination for GNU compiler. ! Copyright (C) 1987, 1988, 1989, 1992, 1993 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 5620,5623 **** --- 5620,5626 ---- if (GET_CODE (op1) == REG) { + /* Look it up again--in case op0 and op1 are the same. */ + op1_elt = lookup (op1, op1_hash_code, mode); + /* Put OP1 in the hash table so it gets a new quantity number. */ if (op1_elt == 0) *************** *** 7320,7323 **** --- 7323,7332 ---- if (GET_CODE (dest) == MEM) note_mem_written (dest, &skipped_writes_memory); + + /* There are times when an address can appear varying and be a PLUS + during this scan when it would be a fixed address were we to know + the proper equivalences. So promote "nonscalar" to be "all". */ + if (skipped_writes_memory.nonscalar) + skipped_writes_memory.all = 1; if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG diff -rc2P gcc-2.4.3.1/dbxout.c gcc-2.4.4/dbxout.c *** gcc-2.4.3.1/dbxout.c Tue Jun 1 01:57:49 1993 --- gcc-2.4.4/dbxout.c Sat Jun 19 05:55:49 1993 *************** *** 1109,1114 **** --- 1109,1116 ---- The type decls made automatically by struct specifiers are marked with DECL_IGNORED_P in C++. */ + #if 0 /* This creates output for anonymous classes which confuses GDB. */ && ! (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL && DECL_IGNORED_P (TYPE_NAME (type))) + #endif && !full) || TYPE_SIZE (type) == 0 diff -rc2P gcc-2.4.3.1/emit-rtl.c gcc-2.4.4/emit-rtl.c *** gcc-2.4.3.1/emit-rtl.c Sun May 30 20:17:27 1993 --- gcc-2.4.4/emit-rtl.c Sat Jun 12 20:22:13 1993 *************** *** 595,599 **** --- 595,609 ---- && GET_CODE (x) == CONST_INT && sizeof (float) * HOST_BITS_PER_CHAR == HOST_BITS_PER_WIDE_INT) + #ifdef REAL_ARITHMETIC { + REAL_VALUE_TYPE r; + HOST_WIDE_INT i; + + i = INTVAL (x); + r = REAL_VALUE_FROM_TARGET_SINGLE (i); + return immed_real_const_1 (r, mode); + } + #else + { union {HOST_WIDE_INT i; float d; } u; *************** *** 601,605 **** return immed_real_const_1 (u.d, mode); } ! else if (((HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT && HOST_BITS_PER_WIDE_INT == BITS_PER_WORD) --- 611,615 ---- return immed_real_const_1 (u.d, mode); } ! #endif else if (((HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT && HOST_BITS_PER_WIDE_INT == BITS_PER_WORD) *************** *** 611,614 **** --- 621,646 ---- && (sizeof (double) * HOST_BITS_PER_CHAR == 2 * HOST_BITS_PER_WIDE_INT)) + #ifdef REAL_ARITHMETIC + { + REAL_VALUE_TYPE r; + HOST_WIDE_INT i[2]; + HOST_WIDE_INT low, high; + + if (GET_CODE (x) == CONST_INT) + low = INTVAL (x), high = low >> (HOST_BITS_PER_WIDE_INT -1); + else + low = CONST_DOUBLE_LOW (x), high = CONST_DOUBLE_HIGH (x); + + /* TARGET_DOUBLE takes the addressing order of the target machine. */ + #ifdef WORDS_BIG_ENDIAN + i[0] = high, i[1] = low; + #else + i[0] = low, i[1] = high; + #endif + + r = REAL_VALUE_FROM_TARGET_DOUBLE (i); + return immed_real_const_1 (r, mode); + } + #else { union {HOST_WIDE_INT i[2]; double d; } u; *************** *** 628,632 **** return immed_real_const_1 (u.d, mode); } ! /* Similarly, if this is converting a floating-point value into a single-word integer. Only do this is the host and target parameters are --- 660,664 ---- return immed_real_const_1 (u.d, mode); } ! #endif /* Similarly, if this is converting a floating-point value into a single-word integer. Only do this is the host and target parameters are diff -rc2P gcc-2.4.3.1/expmed.c gcc-2.4.4/expmed.c *** gcc-2.4.3.1/expmed.c Sat May 8 15:17:57 1993 --- gcc-2.4.4/expmed.c Thu Jun 10 12:59:25 1993 *************** *** 50,58 **** static int sdiv_pow2_cheap, smod_pow2_cheap; /* Cost of various pieces of RTL. */ static int add_cost, mult_cost, negate_cost, zero_cost; ! static int shift_cost[BITS_PER_WORD]; ! static int shiftadd_cost[BITS_PER_WORD]; ! static int shiftsub_cost[BITS_PER_WORD]; void --- 50,66 ---- static int sdiv_pow2_cheap, smod_pow2_cheap; + /* For compilers that support multiple targets with different word sizes, + MAX_BITS_PER_WORD contains the biggest value of BITS_PER_WORD. An example + is the H8/300(H) compiler. */ + + #ifndef MAX_BITS_PER_WORD + #define MAX_BITS_PER_WORD BITS_PER_WORD + #endif + /* Cost of various pieces of RTL. */ static int add_cost, mult_cost, negate_cost, zero_cost; ! static int shift_cost[MAX_BITS_PER_WORD]; ! static int shiftadd_cost[MAX_BITS_PER_WORD]; ! static int shiftsub_cost[MAX_BITS_PER_WORD]; void *************** *** 119,122 **** --- 127,133 ---- mult_cost = rtx_cost (gen_rtx (MULT, word_mode, reg, reg), SET); + /* For gcc 2.4 keep MULT_COST small to avoid really slow searches + in synth_mult. */ + mult_cost = MIN (12 * add_cost, mult_cost); negate_cost = rtx_cost (gen_rtx (NEG, word_mode, reg), SET); *************** *** 1789,1796 **** The first operand must be either alg_zero or alg_m. */ - #ifndef MAX_BITS_PER_WORD - #define MAX_BITS_PER_WORD BITS_PER_WORD - #endif - struct algorithm { --- 1800,1803 ---- *************** *** 1880,1883 **** --- 1887,1936 ---- } + /* If we have an odd number, add or subtract one. */ + if ((t & 1) != 0) + { + unsigned HOST_WIDE_INT w; + + for (w = 1; (w & t) != 0; w <<= 1) + ; + if (w > 2 + /* Reject the case where t is 3. + Thus we prefer addition in that case. */ + && t != 3) + { + /* T ends with ...111. Multiply by (T + 1) and subtract 1. */ + + cost = add_cost; + *alg_in = synth_mult (t + 1, cost_limit - cost); + + cost += alg_in->cost; + if (cost < best_alg->cost) + { + struct algorithm *x; + x = alg_in, alg_in = best_alg, best_alg = x; + best_alg->log[best_alg->ops] = 0; + best_alg->op[best_alg->ops++] = alg_sub_t_m2; + best_alg->cost = cost_limit = cost; + } + } + else + { + /* T ends with ...01 or ...011. Multiply by (T - 1) and add 1. */ + + cost = add_cost; + *alg_in = synth_mult (t - 1, cost_limit - cost); + + cost += alg_in->cost; + if (cost < best_alg->cost) + { + struct algorithm *x; + x = alg_in, alg_in = best_alg, best_alg = x; + best_alg->log[best_alg->ops] = 0; + best_alg->op[best_alg->ops++] = alg_add_t_m2; + best_alg->cost = cost_limit = cost; + } + } + } + /* Look for factors of t of the form t = q(2**m +- 1), 2 <= m <= floor(log2(t - 1)). *************** *** 1971,2026 **** } } - - /* Now, use the simple method of adding or subtracting at the leftmost - 1-bit. */ - { - unsigned HOST_WIDE_INT w; - - q = t & -t; /* get out lsb */ - for (w = q; (w & t) != 0; w <<= 1) - ; - if ((w > q << 1) - /* Reject the case where t has only two bits. - Thus we prefer addition in that case. */ - && !(t < w && w == q << 2)) - { - /* There are many bits in a row. Make 'em by subtraction. */ - - m = exact_log2 (q); - - /* Don't use shiftsub_cost here, this operation - scales wrong operand. */ - cost = add_cost + shift_cost[m]; - *alg_in = synth_mult (t + q, cost_limit - cost); - - cost += alg_in->cost; - if (cost < best_alg->cost) - { - struct algorithm *x; - x = alg_in, alg_in = best_alg, best_alg = x; - best_alg->log[best_alg->ops] = m; - best_alg->op[best_alg->ops++] = alg_sub_t_m2; - best_alg->cost = cost_limit = cost; - } - } - else - { - /* There's only one or two bit at the left. Make it by addition. */ - - m = exact_log2 (q); - cost = MIN (shiftadd_cost[m], add_cost + shift_cost[m]); - *alg_in = synth_mult (t - q, cost_limit - cost); - - cost += alg_in->cost; - if (cost < best_alg->cost) - { - struct algorithm *x; - x = alg_in, alg_in = best_alg, best_alg = x; - best_alg->log[best_alg->ops] = m; - best_alg->op[best_alg->ops++] = alg_add_t_m2; - best_alg->cost = cost_limit = cost; - } - } - } /* If we are getting a too long sequence for `struct algorithm' --- 2024,2027 ---- diff -rc2P gcc-2.4.3.1/expr.c gcc-2.4.4/expr.c *** gcc-2.4.3.1/expr.c Mon May 31 23:52:21 1993 --- gcc-2.4.4/expr.c Sun Jun 13 14:15:28 1993 *************** *** 4904,4908 **** else expand_expr (singleton, ! ignore ? const1_rtx : NULL_RTX, VOIDmode, 0); if (cleanups_this_call) { --- 4904,4908 ---- else expand_expr (singleton, ! ignore ? const0_rtx : NULL_RTX, VOIDmode, 0); if (cleanups_this_call) { diff -rc2P gcc-2.4.3.1/extend.texi gcc-2.4.4/extend.texi *** gcc-2.4.3.1/extend.texi Fri Apr 9 18:10:33 1993 --- gcc-2.4.4/extend.texi Sun Jun 13 23:49:07 1993 *************** *** 298,303 **** name is local to the block where it is defined. For example, here we define a nested function named @code{square}, and call it twice: - @c this example broke at the newline; not sure this is good, so i - @c grouped it. --mew 18feb93 @example --- 298,301 ---- *************** *** 356,361 **** GNU CC implements taking the address of a nested function using a technique called @dfn{trampolines}. A paper describing them is ! available from @samp{maya.idiap.ch} in the file ! @file{pub/tmb/usenix88-lexic.ps.Z}. A nested function can jump to a label inherited from a containing --- 354,359 ---- GNU CC implements taking the address of a nested function using a technique called @dfn{trampolines}. A paper describing them is ! available from @samp{maya.idiap.ch} in directory @file{pub/tmb}, ! file @file{usenix88-lexic.ps.Z}. A nested function can jump to a label inherited from a containing *************** *** 669,676 **** @code{f}, you can simply write @code{(int *)&f}. - @c this makes an underfull hbox; any ideas? --mew 27jan93 - @c Now fixed --bob 5feb93 - @c Old text, page 98, was: - @c Conditional Expressions with Omitted Operands @node Conditionals @section Conditionals with Omitted Operands --- 667,670 ---- *************** *** 916,919 **** --- 910,914 ---- @example + @group struct foo @{int a[4];@}; *************** *** 924,927 **** --- 919,923 ---- return f().a[index]; @} + @end group @end example diff -rc2P gcc-2.4.3.1/final.c gcc-2.4.4/final.c *** gcc-2.4.3.1/final.c Sun May 30 23:49:55 1993 --- gcc-2.4.4/final.c Thu Jun 17 00:43:27 1993 *************** *** 2316,2328 **** #if HOST_BITS_PER_WIDE_INT == 64 #if HOST_BITS_PER_WIDE_INT != HOST_BITS_PER_INT ! " 0x%lx%016lx", #else ! " 0x%x%016x", #endif #else #if HOST_BITS_PER_WIDE_INT != HOST_BITS_PER_INT ! " 0x%lx%08lx", #else ! " 0x%x%08x", #endif #endif --- 2316,2328 ---- #if HOST_BITS_PER_WIDE_INT == 64 #if HOST_BITS_PER_WIDE_INT != HOST_BITS_PER_INT ! "0x%lx%016lx", #else ! "0x%x%016x", #endif #else #if HOST_BITS_PER_WIDE_INT != HOST_BITS_PER_INT ! "0x%lx%08lx", #else ! "0x%x%08x", #endif #endif diff -rc2P gcc-2.4.3.1/fixincludes gcc-2.4.4/fixincludes *** gcc-2.4.3.1/fixincludes Tue Jun 1 04:14:25 1993 --- gcc-2.4.4/fixincludes Mon Jun 14 17:46:50 1993 *************** *** 1063,1066 **** --- 1063,1101 ---- fi + # Determine if we're on Interactive Unix 2.2 or later, in which case we + # need to fix some additional files. This is the same test for ISC that + # Autoconf uses. + if test -d /etc/conf/kconfig.d \ + && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1; then + echo "Fixing ISC __STDC__ goof in several files..." + for name in stdio.h math.h ctype.h sys/limits.h sys/fcntl.h sys/dirent.h; do + echo $name + if test -r ${LIB}/$name; then + file=${LIB}/$name + else + file=${INPUT}/$name + fi + # On Interactive 2.2, certain traditional Unix definitions + # (notably getc and putc in stdio.h) are omitted if __STDC__ is + # defined, not just if _POSIX_SOURCE is defined. This makes it + # impossible to compile any nontrivial program except with -posix. + sed \ + 's/!defined(__STDC__) && !defined(_POSIX_SOURCE)/!defined(_POSIX_SOURCE)/' \ + < $file > ${LIB}/$name. + mv ${LIB}/$name. ${LIB}/$name + done + + echo "Fixing ISC fmod declaration" + # This one's already been fixed for other things. + file=${LIB}/math.h + sed 's/fmod(double)/fmod(double, double)/' <$file >$file. + mv $file. $file + + echo "Fixing nested comments in ISC " + file=sys/limits.h + sed '/CHILD_MAX/s,/\* Max, Max,' < ${INPUT}/$file >${LIB}/$file. + sed '/OPEN_MAX/s,/\* Max, Max,' < ${LIB}/$file. >${LIB}/$file + fi + # These files on Ultrix 4.2 put comments around instances of #endif # __mips. When the sed expression turns that into #endif /* __mips */ diff -rc2P gcc-2.4.3.1/function.c gcc-2.4.4/function.c *** gcc-2.4.3.1/function.c Thu May 20 00:55:47 1993 --- gcc-2.4.4/function.c Sat Jun 5 05:09:57 1993 *************** *** 3663,3667 **** && regno_clobbered_at_setjmp (REGNO (DECL_RTL (decl)))) warning_with_decl (decl, ! "variable `%s' may be clobbered by `longjmp'"); } for (sub = BLOCK_SUBBLOCKS (block); sub; sub = TREE_CHAIN (sub)) --- 3663,3667 ---- && regno_clobbered_at_setjmp (REGNO (DECL_RTL (decl)))) warning_with_decl (decl, ! "variable `%s' may be clobbered by `longjmp' or `vfork'"); } for (sub = BLOCK_SUBBLOCKS (block); sub; sub = TREE_CHAIN (sub)) *************** *** 3682,3686 **** && GET_CODE (DECL_RTL (decl)) == REG && regno_clobbered_at_setjmp (REGNO (DECL_RTL (decl)))) ! warning_with_decl (decl, "argument `%s' may be clobbered by `longjmp'"); } --- 3682,3686 ---- && GET_CODE (DECL_RTL (decl)) == REG && regno_clobbered_at_setjmp (REGNO (DECL_RTL (decl)))) ! warning_with_decl (decl, "argument `%s' may be clobbered by `longjmp' or `vfork'"); } diff -rc2P gcc-2.4.3.1/gcc.c gcc-2.4.4/gcc.c *** gcc-2.4.3.1/gcc.c Fri May 28 18:54:31 1993 --- gcc-2.4.4/gcc.c Sun Jun 6 23:45:56 1993 *************** *** 732,735 **** --- 732,739 ---- int optlen = strlen (option_map[j].name); int complen = strlen (argv[i]); + char *arginfo = option_map[j].arg_info; + + if (arginfo == 0) + arginfo = ""; if (complen > optlen) complen = optlen; *************** *** 746,750 **** /* If this mapping allows extra text at end of name, accept that as "argument". */ ! else if (index (option_map[j].arg_info, '*') != 0) arg = argv[i] + optlen; /* Otherwise, extra text at end means mismatch. --- 750,754 ---- /* If this mapping allows extra text at end of name, accept that as "argument". */ ! else if (index (arginfo, '*') != 0) arg = argv[i] + optlen; /* Otherwise, extra text at end means mismatch. *************** *** 753,761 **** continue; } ! else if (index (option_map[j].arg_info, '*') != 0) error ("Incomplete `%s' option", option_map[j].name); /* Handle arguments. */ ! if (index (option_map[j].arg_info, 'o') != 0) { if (arg == 0) --- 757,765 ---- continue; } ! else if (index (arginfo, '*') != 0) error ("Incomplete `%s' option", option_map[j].name); /* Handle arguments. */ ! if (index (arginfo, 'o') != 0) { if (arg == 0) *************** *** 767,771 **** } } ! else if (index (option_map[j].arg_info, 'a') == 0) { if (arg != 0) --- 771,775 ---- } } ! else if (index (arginfo, 'a') == 0) { if (arg != 0) *************** *** 776,780 **** /* Store the translation as one argv elt or as two. */ ! if (arg != 0 && index (option_map[j].arg_info, 'j') != 0) newv[newindex++] = concat (option_map[j].equivalent, arg, ""); --- 780,784 ---- /* Store the translation as one argv elt or as two. */ ! if (arg != 0 && index (arginfo, 'j') != 0) newv[newindex++] = concat (option_map[j].equivalent, arg, ""); diff -rc2P gcc-2.4.3.1/gcc.texi gcc-2.4.4/gcc.texi *** gcc-2.4.3.1/gcc.texi Tue Jun 1 01:01:28 1993 --- gcc-2.4.4/gcc.texi Sat Jun 19 05:15:18 1993 *************** *** 15,23 **** @c @clear USING ! @smallbook @c NOTE: checks/things to do: @c - @c -have richard or someone deal with the code in examples problems. @c -have bob do a search in all seven files for "mew" (ideally --mew, @c but i may have forgotten the occasional "--"..). --- 15,32 ---- @c @clear USING ! @c i have commented out the smallbook command below, and reformatted ! @c this manual in the regular book size for distribution. in addition, ! @c i commented out the commands that shift the text to one or the other ! @c side of the page for smallbook printing (which makes it easier for ! @c the photocopying people to handle...). -mew, 15june93 ! @c @smallbook ! ! @c i also commented out the finalout command, so if there *are* any ! @c overfulls, you'll (hopefully) see the rectangle in the right hand ! @c margin. -mew 15june93 ! @c @finalout @c NOTE: checks/things to do: @c @c -have bob do a search in all seven files for "mew" (ideally --mew, @c but i may have forgotten the occasional "--"..). *************** *** 29,33 **** @c -overfulls. do a search for "mew" in the files, and you will see @c overfulls that i noted but could not deal with. - @c -tm.texi has a paragraph that is repeated... it could be a problem. @c -have to add text: beginning of chapter 8 --- 38,41 ---- *************** *** 66,73 **** @c (To provide the reverse effect, set bindingoffset to -0.75in.) ! @tex ! \global\bindingoffset=0.75in ! \global\normaloffset =0.75in ! @end tex @ifinfo --- 74,81 ---- @c (To provide the reverse effect, set bindingoffset to -0.75in.) ! @c @tex ! @c \global\bindingoffset=0.75in ! @c \global\normaloffset =0.75in ! @c @end tex @ifinfo *************** *** 84,87 **** --- 92,98 ---- @end ifclear + Published by the Free Software Foundation + 675 Massachusetts Avenue + Cambridge, MA 02139 USA Copyright (C) 1988, 1989, 1992, 1993 Free Software Foundation, Inc. *************** *** 120,124 **** @ifset USING @center @titlefont{Using and Porting GNU CC} ! @c maybe a subtitle: "The GNU C Compiler" ? --mew @end ifset @end ifset --- 131,135 ---- @ifset USING @center @titlefont{Using and Porting GNU CC} ! @end ifset @end ifset *************** *** 132,136 **** @center Richard M. Stallman @sp 3 ! @center last updated 18 May 1993 @sp 1 @c The version number appears twice more in this file. --- 143,147 ---- @center Richard M. Stallman @sp 3 ! @center last updated 19 June 1993 @sp 1 @c The version number appears twice more in this file. *************** *** 141,145 **** --- 152,165 ---- @vskip 0pt plus 1filll Copyright @copyright{} 1988, 1989, 1992, 1993 Free Software Foundation, Inc. + @sp 2 + For GCC Version 2.4,@* + Printed June, 1993.@* + ISBN 1-882114-35-3 + @sp 1 + Published by the Free Software Foundation @* + 675 Massachusetts Avenue @* + Cambridge, MA 02139 USA + @sp 1 Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice *************** *** 287,291 **** @end ifinfo ! @enumerate @item This License applies to any program or other work which contains --- 307,311 ---- @end ifinfo ! @enumerate 0 @item This License applies to any program or other work which contains *************** *** 1029,1035 **** @item In previous versions of GNU CC, the @code{gcc} driver program looked for ! @code{as} and @code{ld} in various places such as files beginning with ! @file{/usr/local/lib/gcc-}. GNU CC version 2 looks for them in the ! directory @file{/usr/local/lib/gcc-lib/@var{target}/@var{version}}. Thus, to use a version of @code{as} or @code{ld} that is not the system --- 1049,1056 ---- @item In previous versions of GNU CC, the @code{gcc} driver program looked for ! @code{as} and @code{ld} in various places; for example, in files ! beginning with @file{/usr/local/lib/gcc-}. GNU CC version 2 looks for ! them in the directory ! @file{/usr/local/lib/gcc-lib/@var{target}/@var{version}}. Thus, to use a version of @code{as} or @code{ld} that is not the system *************** *** 1094,1102 **** under the name @file{emulator.dflt}.) - @c following produces an overfull hbox.. any thoughts? --mew 27jan93 - @c Now fixed --bob 5feb93 - @c Old text was: - @c If you have such a problem on the SCO system, try using - @c @file{/etc/emulator.att}. Try using @file{/etc/emulator.att}, if you have such a problem on the SCO system. --- 1115,1118 ---- *************** *** 1105,1108 **** --- 1121,1131 ---- has an alternate emulator that works. + On NetBSD 0.8, a similar problem manifests itself as these error messages: + + @example + enquire.c: In function `fprop': + enquire.c:2328: floating overflow + @end example + @cindex @code{genflags}, crash on Sun 4 @item *************** *** 1150,1153 **** --- 1173,1186 ---- @item + If on a MIPS system you get an error message saying ``does not have gp + sections for all it's [sic] sectons [sic]'', don't worry about it. This + happens whenever you use GAS with the MIPS linker, but there is not + really anything wrong, and it is okay to use the output file. You can + stop such warnings by installing the GNU linker. + + It would be nice to extend GAS to produce the gp tables, but they are + optional, and there should not be a warning about their absence. + + @item Users have reported some problems with version 2.0 of the MIPS compiler tools that were shipped with Ultrix 4.1. Version 2.10 *************** *** 1522,1528 **** will avoid the linker bug. ! Another option one might use to work around this problem is ! @samp{-mkernel}. @samp{-mkernel} changes how the address of variables ! is computed to a sequence less likely to tickle the HP-UX linker bug. We hope to work around this problem in a later version, if HP does not --- 1555,1561 ---- will avoid the linker bug. ! Another option you can use to work around this problem is ! @samp{-mkernel}. This changes how the address of variables is computed ! to a sequence less likely to tickle the HP-UX linker bug. We hope to work around this problem in a later version, if HP does not *************** *** 1633,1638 **** @cindex IBM RT PC @item ! On the IBM RT PC, the MetaWare HighC compiler (hc) uses yet another ! convention for structure and union returning. Use @samp{-mhc-struct-return} to tell GNU CC to use a convention compatible with it. --- 1666,1671 ---- @cindex IBM RT PC @item ! On the IBM RT PC, the MetaWare HighC compiler (hc) uses a different ! convention for structure and union returning. Use the option @samp{-mhc-struct-return} to tell GNU CC to use a convention compatible with it. *************** *** 2288,2295 **** alternative dialects of C. ! The GNU C compiler supports both dialects; you can specify the dialect ! you want with the option @samp{-fsigned-bitfields} or ! @samp{-funsigned-bitfields}. However, this leaves open the question ! of which dialect to use by default. Currently, the preferred dialect makes plain bitfields signed, because --- 2321,2328 ---- alternative dialects of C. ! The GNU C compiler supports both dialects; you can specify the signed ! dialect with @samp{-fsigned-bitfields} and the unsigned dialect with ! @samp{-funsigned-bitfields}. However, this leaves open the question of ! which dialect to use by default. Currently, the preferred dialect makes plain bitfields signed, because *************** *** 2589,2595 **** @kindex bug-libg++@@prep.ai.mit.edu ! If your bug involves the GNU class library libg++ rather ! than the compiler, mail to @samp{bug-lib-g++@@prep.ai.mit.edu}. If ! you're not sure, you can send your bug report to both lists. @strong{Do not send bug reports to the mailing list @samp{help-gcc}, or --- 2622,2628 ---- @kindex bug-libg++@@prep.ai.mit.edu ! If your bug involves the C++ class library libg++, send mail to ! @samp{bug-lib-g++@@prep.ai.mit.edu}. If you're not sure, you can send ! the bug report to both lists. @strong{Do not send bug reports to the mailing list @samp{help-gcc}, or *************** *** 3542,3553 **** which define the format of the tree representation.@refill ! @c following produces a *tiny* overfill hbox.. how to fix? --mew ! @c First wording was like this, with problem, page 161: --bob ! @c The source files for parsing C are @file{c-parse.y}, @file{c-decl.c}, ! @c @file{c-typeck.c}, @file{c-convert.c}, @file{c-lang.c}, and ! @c @file{c-aux-info.c} along with header files @file{c-lex.h}, and ! @c @file{c-tree.h}. The source files to parse C are ! @file{c-parse.y}, @file{c-decl.c}, @file{c-typeck.c}, --- 3575,3581 ---- which define the format of the tree representation.@refill ! @c Avoiding overfull is tricky here. The source files to parse C are ! @file{c-parse.in}, @file{c-decl.c}, @file{c-typeck.c}, *************** *** 3595,3607 **** best to arrange loops and how to output @code{switch} statements. ! @c this makes an overfull hbox; any ideas? --mew 27jan93 ! @c Now fixed --bob 5feb93 ! @c Old text was: ! @c The source files for RTL generation include @file{stmt.c}, ! @c @file{function.c}, @file{expr.c}, @file{calls.c}, @file{explow.c}, ! @c @file{expmed.c}, @file{optabs.c} and @file{emit-rtl.c}. Also, the file ! @c @file{insn-emit.c}, generated from the machine description by the ! @c program @code{genemit}, is used in this pass. The header file ! @c @file{expr.h} is used for communication within this pass.@refill The source files for RTL generation include @file{stmt.c}, --- 3623,3627 ---- best to arrange loops and how to output @code{switch} statements. ! @c Avoiding overfull is tricky here. The source files for RTL generation include @file{stmt.c}, *************** *** 4152,4155 **** --- 4172,4176 ---- @printindex cp + @summarycontents @contents @bye diff -rc2P gcc-2.4.3.1/genextract.c gcc-2.4.4/genextract.c *** gcc-2.4.3.1/genextract.c Tue Apr 13 16:38:55 1993 --- gcc-2.4.4/genextract.c Thu Jun 10 23:47:52 1993 *************** *** 430,434 **** printf ("extern rtx *recog_dup_loc[];\n"); printf ("extern char recog_dup_num[];\n"); ! printf ("extern\n#ifdef __GNUC__\nvolatile\n#endif\n"); printf ("void fatal_insn_not_found ();\n\n"); --- 430,434 ---- printf ("extern rtx *recog_dup_loc[];\n"); printf ("extern char recog_dup_num[];\n"); ! printf ("extern\n#ifdef __GNUC__\n__volatile__\n#endif\n"); printf ("void fatal_insn_not_found ();\n\n"); diff -rc2P gcc-2.4.3.1/genopinit.c gcc-2.4.4/genopinit.c *** gcc-2.4.3.1/genopinit.c Fri May 28 00:50:52 1993 --- gcc-2.4.4/genopinit.c Sun Jun 13 00:14:58 1993 *************** *** 109,113 **** "sin_optab->handlers[(int) %A].insn_code = CODE_FOR_%(sin%a2%)", "cos_optab->handlers[(int) %A].insn_code = CODE_FOR_%(cos%a2%)", ! "strlen_optab->handlers[(int) %A].insn_code = CODE_FOR_%(strlen%a2%)", "one_cmpl_optab->handlers[(int) %A].insn_code = CODE_FOR_%(one_cmpl%a2%)", "ffs_optab->handlers[(int) %A].insn_code = CODE_FOR_%(ffs%a2%)", --- 109,113 ---- "sin_optab->handlers[(int) %A].insn_code = CODE_FOR_%(sin%a2%)", "cos_optab->handlers[(int) %A].insn_code = CODE_FOR_%(cos%a2%)", ! "strlen_optab->handlers[(int) %A].insn_code = CODE_FOR_%(strlen%a%)", "one_cmpl_optab->handlers[(int) %A].insn_code = CODE_FOR_%(one_cmpl%a2%)", "ffs_optab->handlers[(int) %A].insn_code = CODE_FOR_%(ffs%a2%)", diff -rc2P gcc-2.4.3.1/getopt.c gcc-2.4.4/getopt.c *** gcc-2.4.3.1/getopt.c Tue Jun 1 18:55:35 1993 --- gcc-2.4.4/getopt.c Sat Jun 19 05:18:23 1993 *************** *** 34,38 **** #define alloca __builtin_alloca #else /* not __GNUC__ */ ! #if defined (HAVE_ALLOCA_H) || (defined(sparc) && (defined(sun) || (!defined(USG) && !defined(SVR4) && !defined(__svr4__)))) || defined(__sgi) #include #else --- 34,38 ---- #define alloca __builtin_alloca #else /* not __GNUC__ */ ! #if defined (HAVE_ALLOCA_H) || (defined(sparc) && (defined(sun) || (!defined(USG) && !defined(SVR4) && !defined(__svr4__)))) #include #else diff -rc2P gcc-2.4.3.1/install.texi gcc-2.4.4/install.texi *** gcc-2.4.3.1/install.texi Tue Jun 1 00:59:54 1993 --- gcc-2.4.4/install.texi Fri Jun 18 17:16:31 1993 *************** *** 165,174 **** @table @samp @item --with-gnu-as ! On certain systems, you must specify whether you want GNU CC to work ! with the usual compilation tools or with the GNU compilation tools ! (including GAS). Use the @samp{--with-gnu-as} argument when you run ! @file{configure}, if you want to use the GNU tools. (Specify ! @samp{--with-gnu-ld} as well, since on these systems GAS works only with ! the GNU linker.) The systems where this makes a difference are @samp{i386-@var{anything}-sysv}, @samp{i860-@var{anything}-bsd}, @samp{m68k-hp-hpux}, @samp{m68k-sony-bsd}, @samp{m68k-altos-sysv}, --- 165,176 ---- @table @samp @item --with-gnu-as ! If you will use GNU CC with the GNU assembler (GAS), you should declare ! this by using the @samp{--with-gnu-as} option when you run ! @file{configure}. ! ! Using this option does not install GAS. It only modifies the output of ! GNU CC to work with GAS. Building and installing GAS is up to you. ! ! The systems where it makes a difference whether you use GAS are @samp{i386-@var{anything}-sysv}, @samp{i860-@var{anything}-bsd}, @samp{m68k-hp-hpux}, @samp{m68k-sony-bsd}, @samp{m68k-altos-sysv}, *************** *** 177,186 **** no effect. ! @c the above needs some serious help.. rearrange the systems names, or ! @c something.. :-( --mew @item --with-gnu-ld Specify the option @samp{--with-gnu-ld} if you plan to use the GNU ! linker. This inhibits the installation of @code{collect2}, a program which otherwise serves as a front-end for the system's linker on most configurations. --- 179,192 ---- no effect. ! On the systems listed above, if you use GAS, you should also use the GNU ! linker (and specify @samp{--with-gnu-ld}). @item --with-gnu-ld Specify the option @samp{--with-gnu-ld} if you plan to use the GNU ! linker with GNU CC. ! ! This option does not cause the GNU linker to be installed; it just ! modifies the behavior of GNU CC to work with the GNU linker. ! Specifically, it inhibits the installation of @code{collect2}, a program which otherwise serves as a front-end for the system's linker on most configurations. *************** *** 203,207 **** @item --nfp On certain systems, you must specify whether the machine has a floating ! point unit. These systems are @samp{m68k-sun-sunos@var{n}} and @samp{m68k-isi-bsd}. On any other system, @samp{--nfp} currently has no effect, though perhaps there are other systems where it could usefully --- 209,213 ---- @item --nfp On certain systems, you must specify whether the machine has a floating ! point unit. These systems include @samp{m68k-sun-sunos@var{n}} and @samp{m68k-isi-bsd}. On any other system, @samp{--nfp} currently has no effect, though perhaps there are other systems where it could usefully *************** *** 215,222 **** is used to form the configuration file names. ! Thus, if you specify @samp{m68k-local}, then the files ! @file{m68k/local.md}, @file{m68k/local.h}, @file{m68k/local.c}, ! @file{m68k/xm-local.h}, @file{m68k/t-local}, and @file{m68k/x-local} ! will be used. Here is a list of configurations that have special treatment or special --- 221,228 ---- is used to form the configuration file names. ! Thus, if you specify @samp{m68k-local}, configuration uses ! files @file{local.md}, @file{local.h}, @file{local.c}, ! @file{xm-local.h}, @file{t-local}, and @file{x-local}, all in the ! directory @file{config/m68k}. Here is a list of configurations that have special treatment or special *************** *** 231,236 **** GNU CC writes a @samp{.verstamp} directive to the assembler output file unless it is built as a cross-compiler. It gets the version to use from ! the file @file{/usr/include/stamp.h}. If you install a new version of ! OSF/1, you should rebuild GCC to pick up the new version stamp. Note that since the Alpha is a 64-bit architecture, cross-compilers --- 237,243 ---- GNU CC writes a @samp{.verstamp} directive to the assembler output file unless it is built as a cross-compiler. It gets the version to use from ! the system header file @file{/usr/include/stamp.h}. If you install a ! new version of OSF/1, you should rebuild GCC to pick up the new version ! stamp. Note that since the Alpha is a 64-bit architecture, cross-compilers *************** *** 243,251 **** @item a29k ! AMD Am29K-family processors. These are normally used in embedded applications. There are no standard Unix configurations. This configuration corresponds to AMD's standard calling sequence and binary interface ! and is compatible with other 29K tools. You may need to make a variant of the file @file{a29k.h} for your --- 250,258 ---- @item a29k ! AMD Am29k-family processors. These are normally used in embedded applications. There are no standard Unix configurations. This configuration corresponds to AMD's standard calling sequence and binary interface ! and is compatible with other 29k tools. You may need to make a variant of the file @file{a29k.h} for your *************** *** 331,335 **** point traps inherently cannot work with the FPA. ! @item m88k-svr3 Motorola m88k running the AT&T/Unisoft/Motorola V.3 reference port. These systems tend to use the Green Hills C, revision 1.8.5, as the --- 338,342 ---- point traps inherently cannot work with the FPA. ! @item m88k-*-svr3 Motorola m88k running the AT&T/Unisoft/Motorola V.3 reference port. These systems tend to use the Green Hills C, revision 1.8.5, as the *************** *** 338,345 **** happens, make the stage 4 compiler and compare it to the stage 3 compiler. If the stage 3 and stage 4 object files are identical, this ! suggests a problem with the standard C compiler. It is best, however, ! to use an older version of GNU CC for bootstrapping. ! @item m88k-dgux Motorola m88k running DG/UX. To build native or cross compilers on DG/UX, you must first change to the 88open BCS software development --- 345,355 ---- happens, make the stage 4 compiler and compare it to the stage 3 compiler. If the stage 3 and stage 4 object files are identical, this ! suggests you encountered a problem with the standard C compiler; the ! stage 3 and 4 compilers may be usable. ! It is best, however, to use an older version of GNU CC for bootstrapping ! if you have one. ! ! @item m88k-*-dgux Motorola m88k running DG/UX. To build native or cross compilers on DG/UX, you must first change to the 88open BCS software development *************** *** 483,493 **** @item ! The standard directory for installing the compiler's passes and run-time ! support in @file{/usr/local/lib}. If you want to install it somewhere ! else, specify the option @samp{--prefix=@var{dir}} when you run ! @file{configure}. @var{dir} is a directory name to use instead of ! @file{/usr/local} for all purposes with one exception: the directory ! @file{/usr/local/include} is searched for header files no matter where ! you install the compiler. @item --- 493,502 ---- @item ! The standard directory for installing GNU CC is @file{/usr/local/lib}. ! If you want to install its files somewhere else, specify ! @samp{--prefix=@var{dir}} when you run @file{configure}. Here @var{dir} ! is a directory name to use instead of @file{/usr/local} for all purposes ! with one exception: the directory @file{/usr/local/include} is searched ! for header files no matter where you install the compiler. @item *************** *** 656,662 **** If you have built the compiler with the @samp{-mno-mips-tfile} option on ! MIPS machines, you will not be able to compare the files. The Alpha ! uses timestamps that @samp{make compare} does not know how to ignore, ! so you will not be able to compare on the Alpha. @item --- 665,675 ---- If you have built the compiler with the @samp{-mno-mips-tfile} option on ! MIPS machines, you will not be able to compare the files. ! ! The Alpha stores file names in the object files and @samp{make compare} ! does not know how to ignore them, so normally you cannot compare on the ! Alpha. However, if you use the @samp{-save-temps} option when compiling ! @emph{both} stage 2 and stage 3, this causes the same file names to be used ! in both stages; then you can do the comparison. @item *************** *** 685,697 **** permits various versions and/or cross-compilers to coexist. ! @c if the following doesn't work, i don't know what will; i've tried a ! @c few ideas already. --mew ! This program will also copy the driver program @file{gcc} into the ! directory @file{/usr/local/bin}, so that it appears in typical execution ! search paths.@refill ! ! On some systems, this command will cause recompilation of some files. ! This is usually due to bugs in @code{make}. You should either ignore ! this problem, or use GNU Make. @cindex @code{alloca} and SunOs --- 698,708 ---- permits various versions and/or cross-compilers to coexist. ! This also copies the driver program @file{xgcc} into ! @file{/usr/local/bin/gcc}, so that it appears in typical execution ! search paths. ! ! On some systems, this command causes recompilation of some files. This ! is usually due to bugs in @code{make}. You should either ignore this ! problem, or use GNU Make. @cindex @code{alloca} and SunOs *************** *** 792,798 **** @itemize @bullet @item ! Cross-compilers for the Mips as target do not work because the auxiliary ! programs @file{mips-tdump.c} and @file{mips-tfile.c} can't be compiled ! on anything but a Mips. @item --- 803,809 ---- @itemize @bullet @item ! Cross-compilers for the Mips as target currently do not work because the ! auxiliary programs @file{mips-tdump.c} and @file{mips-tfile.c} can't be ! compiled on anything but a Mips. @item *************** *** 878,887 **** must specify a 68030 as the host when you configure it. - @c this makes an underfull hbox; any ideas? --mew 27jan93 - @c Now fixed --bob 5feb93 - @c Old text, page 83, was: - @c Installing GNU CC on the HP Precision Architecture @node PA Install ! @section GNU CC on the HP Precision Architecture There are two variants of this CPU, called 1.0 and 1.1, which have --- 889,894 ---- must specify a 68030 as the host when you configure it. @node PA Install ! @section Installing on the HP Precision Architecture There are two variants of this CPU, called 1.0 and 1.1, which have *************** *** 1147,1156 **** @enumerate @item ! Execute the command procedure @file{vmsconfig.com} to copy files ! @file{vax-vms.h}, @file{xm-vax-vms.h}, @file{vax.c} and @file{vax.md} to ! files @file{tm.h}, @file{config.h}, @file{aux-output.c}, and @file{md.} ! respectively, and to create files @file{tconfig.h} and @file{hconfig.h}. ! This procedure also creates several linker option files used by ! @file{make-cc1.com} and a data file used by @file{make-l2.com}.@refill @smallexample --- 1154,1162 ---- @enumerate @item ! Execute the command procedure @file{vmsconfig.com} to set up the files ! @file{tm.h}, @file{config.h}, @file{aux-output.c}, and @file{md.}, and ! to create files @file{tconfig.h} and @file{hconfig.h}. This procedure ! also creates several linker option files used by @file{make-cc1.com} and ! a data file used by @file{make-l2.com}.@refill @smallexample *************** *** 1183,1191 **** @item ! Type @samp{@@make-gcc} to recompile everything (alternatively, you may ! submit the file @file{make-gcc.com} to a batch queue). If you wish to ! build the GNU C++ compiler as well as the GNU CC compiler, you must ! first edit @file{make-gcc.com} and follow the instructions that appear ! in the comments.@refill @item --- 1189,1197 ---- @item ! Type @samp{@@make-gcc} to recompile everything (alternatively, submit ! the file @file{make-gcc.com} to a batch queue). If you wish to build ! the GNU C++ compiler as well as the GNU CC compiler, you must first edit ! @file{make-gcc.com} and follow the instructions that appear in the ! comments.@refill @item *************** *** 1230,1240 **** @end smallexample ! where @file{dua1:[gcc.source_dir]} ! contains the source code, and ! @file{dua0:[gcc.build_dir]} is meant to contain all of the generated object ! files and executables. Once you have done this, you can proceed building GCC ! as described above. (Keep in mind that @file{gcc_build} is a rooted logical ! name, and thus the device names in each element of the search list must be an ! actual physical device name rather than another rooted logical name). @item --- 1236,1247 ---- @end smallexample ! @noindent ! where the directory @file{dua1:[gcc.source_dir]} contains the source ! code, and the directory @file{dua0:[gcc.build_dir]} is meant to contain ! all of the generated object files and executables. Once you have done ! this, you can proceed building GCC as described above. (Keep in mind ! that @file{gcc_build} is a rooted logical name, and thus the device ! names in each element of the search list must be an actual physical ! device name rather than another rooted logical name). @item diff -rc2P gcc-2.4.3.1/integrate.c gcc-2.4.4/integrate.c *** gcc-2.4.3.1/integrate.c Mon May 31 00:32:45 1993 --- gcc-2.4.4/integrate.c Sat Jun 5 13:17:52 1993 *************** *** 1270,1274 **** || GET_CODE (arg_vals[i]) == SUBREG || GET_CODE (arg_vals[i]) == MEM) ! && reg_overlap_mentioned_p (arg_vals[i], target)))) arg_vals[i] = copy_to_mode_reg (GET_MODE (loc), arg_vals[i]); } --- 1270,1278 ---- || GET_CODE (arg_vals[i]) == SUBREG || GET_CODE (arg_vals[i]) == MEM) ! && reg_overlap_mentioned_p (arg_vals[i], target)) ! /* ??? We must always copy a SUBREG into a REG, because it might ! get substituted into an address, and not all ports correctly ! handle SUBREGs in addresses. */ ! || (GET_CODE (arg_vals[i]) == SUBREG))) arg_vals[i] = copy_to_mode_reg (GET_MODE (loc), arg_vals[i]); } diff -rc2P gcc-2.4.3.1/invoke.texi gcc-2.4.4/invoke.texi *** gcc-2.4.3.1/invoke.texi Sat May 29 01:33:03 1993 --- gcc-2.4.4/invoke.texi Sun Jun 13 22:04:15 1993 *************** *** 557,561 **** @item ! The keywords @code{typeof}, @code{inline}, @code{signed}, @code{const} and @code{volatile} are not recognized. (You can still use the alternative keywords such as @code{__typeof__}, @code{__inline__}, and --- 557,561 ---- @item ! The newer keywords @code{typeof}, @code{inline}, @code{signed}, @code{const} and @code{volatile} are not recognized. (You can still use the alternative keywords such as @code{__typeof__}, @code{__inline__}, and *************** *** 630,635 **** @item In C++ programs, assignment to @code{this} is permitted with ! @samp{-traditional}. This is the same as the effect of ! @samp{-fthis-is-variable}. @end itemize --- 630,635 ---- @item In C++ programs, assignment to @code{this} is permitted with ! @samp{-traditional}. (The option @samp{-fthis-is-variable} also has ! this effect.) @end itemize *************** *** 731,738 **** @item -fdollars-in-identifiers Accept @samp{$} in identifiers. You can also explicitly prohibit use of ! @samp{$} with @samp{-fno-dollars-in-identifiers}. (GNU C++ allows ! @samp{$} by default on some target systems but not others.) Traditional ! C allowed the character @samp{$} to form part of identifiers. However, ! ANSI C and C++ forbid @samp{$} in identifiers. @item -felide-constructors --- 731,738 ---- @item -fdollars-in-identifiers Accept @samp{$} in identifiers. You can also explicitly prohibit use of ! @samp{$} with the option @samp{-fno-dollars-in-identifiers}. (GNU C++ ! allows @samp{$} by default on some target systems but not others.) ! Traditional C allowed the character @samp{$} to form part of ! identifiers. However, ANSI C and C++ forbid @samp{$} in identifiers. @item -felide-constructors *************** *** 801,806 **** @item -fno-strict-prototype ! Treat a function declaration with no arguments, such as @w{@samp{int foo ! ();}}, as C would treat it---as saying nothing about the number of arguments or their types. Normally, such a declaration in C++ means that the function @code{foo} takes no arguments. --- 801,806 ---- @item -fno-strict-prototype ! Treat a function declaration with no arguments, such as @samp{int foo ! ();}, as C would treat it---as saying nothing about the number of arguments or their types. Normally, such a declaration in C++ means that the function @code{foo} takes no arguments. *************** *** 1384,1391 **** @item f Dump after flow analysis, to @file{@var{file}.flow}. - @c the following produces an overfull hbox, and i'm not sure what to do - @c about it.. --mew @item c ! Dump after instruction combination, to@* @file{@var{file}.combine}. @item S --- 1384,1389 ---- @item f Dump after flow analysis, to @file{@var{file}.flow}. @item c ! Dump after instruction combination, to the file @file{@var{file}.combine}. @item S *************** *** 1393,1400 **** @file{@var{file}.sched}. @item l ! Dump after local register allocation, to@* @file{@var{file}.lreg}. @item g ! Dump after global register allocation, to@* @file{@var{file}.greg}. @item R --- 1391,1398 ---- @file{@var{file}.sched}. @item l ! Dump after local register allocation, to @file{@var{file}.lreg}. @item g ! Dump after global register allocation, to @file{@var{file}.greg}. @item R *************** *** 1481,1487 **** generated code. ! @samp{-O2} turns on all @samp{-f@var{flag}} options that enable more ! optimization, except for @samp{-funroll-loops}, ! @samp{-funroll-all-loops} and @samp{-fomit-frame-pointer}. @item -O0 --- 1479,1484 ---- generated code. ! @samp{-O2} turns on all optional optimizations except for loop unrolling ! and frame pointer elimination. @item -O0 *************** *** 1675,1679 **** Perform the optimization of loop unrolling. This is only done for loops whose number of iterations can be determined at compile time or run time. ! @samp{-funroll-loop} implies @samp{-fstrength-reduce} and @samp{-frerun-cse-after-loop}. --- 1672,1676 ---- Perform the optimization of loop unrolling. This is only done for loops whose number of iterations can be determined at compile time or run time. ! @samp{-funroll-loop} implies both @samp{-fstrength-reduce} and @samp{-frerun-cse-after-loop}. *************** *** 1681,1685 **** Perform the optimization of loop unrolling. This is done for all loops and usually makes programs run more slowly. @samp{-funroll-all-loops} ! implies @samp{-fstrength-reduce} and @samp{-frerun-cse-after-loop}. @item -fno-peephole --- 1678,1682 ---- Perform the optimization of loop unrolling. This is done for all loops and usually makes programs run more slowly. @samp{-funroll-all-loops} ! implies @samp{-fstrength-reduce} as well as @samp{-frerun-cse-after-loop}. @item -fno-peephole *************** *** 2068,2077 **** normally kept in the directory @file{/usr/local/lib/gcc-lib/@var{machine}/@var{version}}.@refill ! It follows that sites can customize the effect of @samp{-b} or @samp{-V} ! either by changing the names of these directories or adding ! alternate names (or symbolic links). Thus, if ! @file{/usr/local/lib/gcc-lib/80386} is a link to ! @file{/usr/local/lib/gcc-lib/i386v}, then @samp{-b 80386} becomes an alias ! for @samp{-b i386v}.@refill In one respect, the @samp{-b} or @samp{-V} do not completely change --- 2065,2073 ---- normally kept in the directory @file{/usr/local/lib/gcc-lib/@var{machine}/@var{version}}.@refill ! Thus, sites can customize the effect of @samp{-b} or @samp{-V} either by ! changing the names of these directories or adding alternate names (or ! symbolic links). If in directory @file{/usr/local/lib/gcc-lib/} the ! file @file{80386} is a link to the file @file{i386v}, then @samp{-b ! 80386} becomes an alias for @samp{-b i386v}. In one respect, the @samp{-b} or @samp{-V} do not completely change *************** *** 2101,2107 **** command with the @samp{-V} option. - @c this makes an underfull hbox; any ideas? --mew 27jan93 - @c Now fixed --bob 5feb93 - @c Old text, page 46, was: @node Submodel Options @section Hardware Models and Configurations --- 2097,2100 ---- *************** *** 2110,2114 **** @cindex hardware models and configurations, specifying @cindex machine dependent options - @c the section title listing causes an overful hbox. any ideas? --mew Earlier we discussed the standard option @samp{-b} which chooses among --- 2103,2106 ---- *************** *** 2205,2215 **** Do not use the bit-field instructions. The @samp{-m68000} option implies @w{@samp{-mnobitfield}}. - @c is the above still correct? --mew @item -mbitfield Do use the bit-field instructions. The @samp{-m68020} option implies ! @samp{-mbitfield}. This is the default if you use the unmodified ! sources configured for a 68020. ! @c is the above still correct? --mew @item -mrtd --- 2197,2205 ---- Do not use the bit-field instructions. The @samp{-m68000} option implies @w{@samp{-mnobitfield}}. @item -mbitfield Do use the bit-field instructions. The @samp{-m68020} option implies ! @samp{-mbitfield}. This is the default if you use a configuration ! designed for a 68020. @item -mrtd *************** *** 2400,2404 **** Use a small memory model that assumes that all function addresses are either within a single 256 KB segment or at an absolute address of less ! than 256K. This allows the @code{call} instruction to be used instead of a @code{const}, @code{consth}, @code{calli} sequence. --- 2390,2394 ---- Use a small memory model that assumes that all function addresses are either within a single 256 KB segment or at an absolute address of less ! than 256k. This allows the @code{call} instruction to be used instead of a @code{const}, @code{consth}, @code{calli} sequence. *************** *** 2435,2439 **** @cindex M88k options ! These @samp{-m} options are defined for Motorola 88K architectures: @table @code --- 2425,2429 ---- @cindex M88k options ! These @samp{-m} options are defined for Motorola 88k architectures: @table @code *************** *** 2453,2456 **** --- 2443,2451 ---- on the m88100. + @item -mbig-pic + @kindex -mbig-pic + Obsolete option to be removed from the next revision. + Use @samp{-fPIC}. + @item -midentify-revision @kindex -midentify-revision *************** *** 2505,2513 **** @kindex -mno-optimize-arg-area @cindex arguments in frame (88k) ! Control how to store function arguments in stack frames. ! @samp{-moptimize-arg-area} saves space, but conflicts with the 88open ! specifications. However, @samp{-mno-optimize-arg-area} conforms to the ! 88open standards. By default GNU CC does not optimize the argument ! area. @item -mshort-data-@var{num} --- 2500,2508 ---- @kindex -mno-optimize-arg-area @cindex arguments in frame (88k) ! Control how function arguments are stored in stack frames. ! @samp{-moptimize-arg-area} saves space by optimizing them, but this ! conflicts with the 88open specifications. The opposite alternative, ! @samp{-mno-optimize-arg-area}, agrees with 88open standards. By default ! GNU CC does not optimize the argument area. @item -mshort-data-@var{num} *************** *** 2522,2526 **** involving displacements of less than 512 bytes. @samp{-mshort-data-@var{num}} is not effective for @var{num} greater ! than 64K. @item -mserialize-volatile --- 2517,2521 ---- involving displacements of less than 512 bytes. @samp{-mshort-data-@var{num}} is not effective for @var{num} greater ! than 64k. @item -mserialize-volatile *************** *** 2576,2580 **** @end enumerate ! @samp{-msvr3} is the default for all m88K configurations except the SVr4 configuration. --- 2571,2575 ---- @end enumerate ! @samp{-msvr3} is the default for all m88k configurations except the SVr4 configuration. *************** *** 2591,2598 **** @kindex -mcheck-zero-division @cindex zero division on 88k ! Early models of the 88K architecture had problems with division by zero; in particular, many of them didn't trap. Use these options to avoid including (or to include explicitly) additional code to detect division ! by zero and signal an exception. All GNU CC configurations for the 88K use @samp{-mcheck-zero-division} by default. --- 2586,2593 ---- @kindex -mcheck-zero-division @cindex zero division on 88k ! Early models of the 88k architecture had problems with division by zero; in particular, many of them didn't trap. Use these options to avoid including (or to include explicitly) additional code to detect division ! by zero and signal an exception. All GNU CC configurations for the 88k use @samp{-mcheck-zero-division} by default. *************** *** 2683,2688 **** Return structures of more than one word in memory, rather than in a register. This provides compatibility with the MetaWare HighC (hc) ! compiler. Use @samp{-fpcc-struct-return} for compatibility with the ! Portable C Compiler (pcc). @item -mnohc-struct-return --- 2678,2683 ---- Return structures of more than one word in memory, rather than in a register. This provides compatibility with the MetaWare HighC (hc) ! compiler. Use the option @samp{-fpcc-struct-return} for compatibility ! with the Portable C Compiler (pcc). @item -mnohc-struct-return *************** *** 2689,2694 **** Return some structures of more than one word in registers, when convenient. This is the default. For compatibility with the ! IBM-supplied compilers, use either @samp{-fpcc-struct-return} or ! @samp{-mhc-struct-return}. @end table --- 2684,2689 ---- Return some structures of more than one word in registers, when convenient. This is the default. For compatibility with the ! IBM-supplied compilers, use the option @samp{-fpcc-struct-return} or the ! option @samp{-mhc-struct-return}. @end table *************** *** 2722,2727 **** @item -mint64 ! @item -mlong64 ! @item -mlonglong128 These options don't work at present. --- 2717,2722 ---- @item -mint64 ! @itemx -mlong64 ! @itemx -mlonglong128 These options don't work at present. *************** *** 2805,2810 **** @item -mabicalls @itemx -mno-abicalls ! Emit (or do not emit) the @samp{.abicalls}, @samp{.cpload}, and ! @samp{.cprestore} pseudo operations that some System V.4 ports use for position independent code. --- 2800,2805 ---- @item -mabicalls @itemx -mno-abicalls ! Emit (or do not emit) the pseudo operations @samp{.abicalls}, ! @samp{.cpload}, and @samp{.cprestore} that some System V.4 ports use for position independent code. *************** *** 2914,2918 **** @item -mlong-calls ! Generate code which allows calls to functions greater than 256K away from the caller when the caller and callee are in the same source file. Do not turn this option on unless code refuses to link with "branch out of --- 2909,2913 ---- @item -mlong-calls ! Generate code which allows calls to functions greater than 256k away from the caller when the caller and callee are in the same source file. Do not turn this option on unless code refuses to link with "branch out of *************** *** 3115,3125 **** structures than @samp{-fpcc-struct-return}. ! If you specify neither the option @samp{-fpcc-struct-return} nor the ! option @samp{-freg-struct-return}, GNU CC defaults to whichever ! convention is standard for the target. If there is no standard ! convention, GNU CC defaults to @samp{-fpcc-struct-return}, except on ! targets where GNU CC is the principal compile. In those cases, we can ! choose the standard, and we chose the more efficient register return ! alternative. @item -fshort-enums --- 3110,3119 ---- structures than @samp{-fpcc-struct-return}. ! If you specify neither @samp{-fpcc-struct-return} nor its contrary ! @samp{-freg-struct-return}, GNU CC defaults to whichever convention is ! standard for the target. If there is no standard convention, GNU CC ! defaults to @samp{-fpcc-struct-return}, except on targets where GNU CC ! is the principal compiler. In those cases, we can choose the standard, ! and we chose the more efficient register return alternative. @item -fshort-enums *************** *** 3182,3193 **** @cindex global offset table @cindex PIC ! If supported for the target machine, generate position-independent code ! (PIC) suitable for use in a shared library. All addresses will be ! accessed through a global offset table (GOT). If the GOT size for the ! linked executable exceeds a machine-specific maximum size, you will get ! an error message from the linker indicating that @samp{-fpic} does not ! work; recompile with @samp{-fPIC} instead. (These maximums are 16k on ! the m88k, 8k on the Sparc, and 32k on the m68k and RS/6000. The 386 has ! no such limit.) Position-independent code requires special support, and therefore works --- 3176,3187 ---- @cindex global offset table @cindex PIC ! Generate position-independent code (PIC) suitable for use in a shared ! library, if supported for the target machine. Such code accesses all ! constant addresses through a global offset table (GOT). If the GOT size ! for the linked executable exceeds a machine-specific maximum size, you ! get an error message from the linker indicating that @samp{-fpic} does ! not work; in that case, recompile with @samp{-fPIC} instead. (These ! maximums are 16k on the m88k, 8k on the Sparc, and 32k on the m68k and ! RS/6000. The 386 has no such limit.) Position-independent code requires special support, and therefore works diff -rc2P gcc-2.4.3.1/loop.c gcc-2.4.4/loop.c *** gcc-2.4.3.1/loop.c Thu May 20 00:33:24 1993 --- gcc-2.4.4/loop.c Tue Jun 8 17:56:15 1993 *************** *** 1825,1828 **** --- 1825,1838 ---- REG_NOTES (i1) = REG_NOTES (p); + /* If there is a REG_EQUAL note present whose value is + not loop invariant, then delete it, since it may + cause problems with later optimization passes. + It is possible for cse to create such notes + like this as a result of record_jump_cond. */ + + if ((temp = find_reg_note (i1, REG_EQUAL, NULL_RTX)) + && ! invariant_p (XEXP (temp, 0))) + remove_note (i1, temp); + if (new_start == 0) new_start = i1; *************** *** 6201,6205 **** if (GET_CODE (dest) != REG || REGNO (dest) >= max_reg_before_loop ! || reg_iv_type[REGNO (dest)] != BASIC_INDUCT) return; --- 6211,6217 ---- if (GET_CODE (dest) != REG || REGNO (dest) >= max_reg_before_loop ! || reg_iv_type[REGNO (dest)] != BASIC_INDUCT ! /* Reject this insn if the source isn't valid for the mode of DEST. */ ! || GET_MODE (dest) != GET_MODE (SET_DEST (set))) return; diff -rc2P gcc-2.4.3.1/math-68881.h gcc-2.4.4/math-68881.h *** gcc-2.4.3.1/math-68881.h Sat May 15 23:46:27 1993 --- gcc-2.4.4/math-68881.h Mon Jun 7 15:42:06 1993 *************** *** 156,172 **** else { ! if (y > 0) { ! if (-x > y) ! return pi + atan (y / x); else ! return pi_over_2 - atan (x / y); } else { ! if (-x > -y) ! return - pi + atan (y / x); ! else if (y < 0) ! return - pi_over_2 - atan (x / y); else { --- 156,172 ---- else { ! if (y < 0) { ! if (-x > -y) ! return - pi + atan (y / x); else ! return - pi_over_2 - atan (x / y); } else { ! if (-x > y) ! return pi + atan (y / x); ! else if (y > 0) ! return pi_over_2 - atan (x / y); else { diff -rc2P gcc-2.4.3.1/md.texi gcc-2.4.4/md.texi *** gcc-2.4.3.1/md.texi Wed Jun 9 09:52:09 1993 --- gcc-2.4.4/md.texi Sun Jun 13 00:14:36 1993 *************** *** 144,149 **** @node RTL Template ! @section RTL Template for Generating and Recognizing Insns ! @c this section title is WAY too long... --mew 1feb93 @cindex RTL insn template @cindex generating insns --- 144,148 ---- @node RTL Template ! @section RTL Template @cindex RTL insn template @cindex generating insns *************** *** 202,208 **** @findex general_operand ! On CISC machines, @var{predicate} is most often @code{"general_operand"}. ! This function checks that the putative operand is either a constant, a ! register or a memory reference, and that it is valid for mode @var{m}. @findex register_operand --- 201,208 ---- @findex general_operand ! On CISC machines, the most common @var{predicate} is ! @code{"general_operand"}. This function checks that the putative ! operand is either a constant, a register or a memory reference, and that ! it is valid for mode @var{m}. @findex register_operand *************** *** 250,259 **** insn. ! In construction, @code{match_dup} behaves exactly like ! @code{match_operand}: the operand is substituted into the insn being ! constructed. But in matching, @code{match_dup} behaves differently. ! It assumes that operand number @var{n} has already been determined by ! a @code{match_operand} appearing earlier in the recognition template, ! and it matches only an identical-looking expression. @findex match_operator --- 250,259 ---- insn. ! In construction, @code{match_dup} acts just like @code{match_operand}: ! the operand is substituted into the insn being constructed. But in ! matching, @code{match_dup} behaves differently. It assumes that operand ! number @var{n} has already been determined by a @code{match_operand} ! appearing earlier in the recognition template, and it matches only an ! identical-looking expression. @findex match_operator *************** *** 509,517 **** @node Output Statement ! @section C Statements for Generating Assembler Output @cindex output statements @cindex C statements for assembler output @cindex generating assembler output - @c section title is underfull, looks bad. --mew 2feb93 Often a single fixed template string cannot produce correct and efficient --- 509,516 ---- @node Output Statement ! @section C Statements for Assembler Output @cindex output statements @cindex C statements for assembler output @cindex generating assembler output Often a single fixed template string cannot produce correct and efficient *************** *** 1570,1574 **** @ifset INTERNALS @node Standard Names ! @section Standard Names for Patterns Used in Generation @cindex standard pattern names @cindex pattern names --- 1569,1573 ---- @ifset INTERNALS @node Standard Names ! @section Standard Pattern Names For Generation @cindex standard pattern names @cindex pattern names *************** *** 1639,1643 **** is impossible during and after reload. If there are cases needing scratch registers after reload, you must define ! @code{SECONDARY_INPUT_RELOAD_CLASS} and/or @code{SECONDARY_OUTPUT_RELOAD_CLASS} to detect them, and provide patterns @samp{reload_in@var{m}} or @samp{reload_out@var{m}} to handle --- 1638,1642 ---- is impossible during and after reload. If there are cases needing scratch registers after reload, you must define ! @code{SECONDARY_INPUT_RELOAD_CLASS} and perhaps also @code{SECONDARY_OUTPUT_RELOAD_CLASS} to detect them, and provide patterns @samp{reload_in@var{m}} or @samp{reload_out@var{m}} to handle *************** *** 1873,1876 **** --- 1872,1883 ---- comparison. + @cindex @code{strlen@var{m}} instruction pattern + Compute the length of a string, with three operands. + Operand 0 is the result (of mode @var{m}), operand 1 is + a @code{mem} referring to the first character of the string, + operand 2 is the character to search for (normally zero), + and operand 3 is a constant describing the known alignment + of the beginning of the string. + @cindex @code{float@var{mn}2} instruction pattern @item @samp{float@var{m}@var{n}2} *************** *** 2208,2217 **** @item @samp{save_stack_block} saves the stack pointer at the start of a block ! that allocates a variable-sized object and @samp{restore_stack_block} restores the stack pointer when the block is exited. @item ! @samp{save_stack_function} and @samp{restore_stack_function} operate ! similarly for the outermost block of a function and are used when the function allocates variable-sized objects or calls @code{alloca}. Only the epilogue uses the restored stack pointer, allowing a simpler save or --- 2215,2224 ---- @item @samp{save_stack_block} saves the stack pointer at the start of a block ! that allocates a variable-sized object, and @samp{restore_stack_block} restores the stack pointer when the block is exited. @item ! @samp{save_stack_function} and @samp{restore_stack_function} do a ! similar job for the outermost block of a function and are used when the function allocates variable-sized objects or calls @code{alloca}. Only the epilogue uses the restored stack pointer, allowing a simpler save or *************** *** 2592,2600 **** @node Peephole Definitions ! @section Defining Machine-Specific Peephole Optimizers @cindex peephole optimizer definitions @cindex defining peephole optimizers - @c the above section title is too long, but i think it looks fine - @c wrapped around as it is. causes underfull hbox. --mew 2feb93 In addition to instruction patterns the @file{md} file may contain --- 2599,2605 ---- @node Peephole Definitions ! @section Machine-Specific Peephole Optimizers @cindex peephole optimizer definitions @cindex defining peephole optimizers In addition to instruction patterns the @file{md} file may contain *************** *** 2897,2902 **** Here is an example, the definition of left-shift for the SPUR chip: - @c i'm not sure if the grouping i did is correct, but it *has* to be - @c better than what had happened there... --mew 2feb93 @smallexample @group --- 2902,2905 ---- *************** *** 2904,2907 **** --- 2907,2912 ---- [(set (match_operand:SI 0 "register_operand" "") (ashift:SI + @end group + @group (match_operand:SI 1 "register_operand" "") (match_operand:SI 2 "nonmemory_operand" "")))] *************** *** 2986,2990 **** @node Insn Splitting ! @section Splitting Instructions into Multiple Instructions @cindex insn splitting @cindex instruction splitting --- 2991,2995 ---- @node Insn Splitting ! @section Defining How to Split Instructions @cindex insn splitting @cindex instruction splitting *************** *** 3044,3050 **** generate any new pseudo-registers. Once reload has completed, they also must not allocate any space in the stack frame. - @c above is overfull; make it "... for *the XXX* @code{define_expand}". - @c but what is XXX? --mew 2feb93 --changed it a bit, see if it works - @c now. --mew 9feb93 Patterns are matched against @var{insn-pattern} in two different --- 3049,3052 ---- *************** *** 3539,3552 **** example, they might indicate that the condition code will be clobbered. ! A specification for a @code{length} attribute is handled specially. To ! compute the length of an @code{asm} insn, multiply the length specified ! in the expression @code{define_asm_attributes} by the number of machine ! instructions specified in the @code{asm} statement, determined by ! counting the number of semicolons and newlines in the string. ! Therefore, the value of the @code{length} attribute specified in a ! @code{define_asm_attributes} should be the maximum possible length of a ! single machine instruction. ! @c i redid the above because of overfull hbox, it's not as good; any ! @c ideas would be welcomed. --mew 4feb93 @node Attr Example --- 3541,3552 ---- example, they might indicate that the condition code will be clobbered. ! A specification for a @code{length} attribute is handled specially. The ! way to compute the length of an @code{asm} insn is to multiply the ! length specified in the expression @code{define_asm_attributes} by the ! number of machine instructions specified in the @code{asm} statement, ! determined by counting the number of semicolons and newlines in the ! string. Therefore, the value of the @code{length} attribute specified ! in a @code{define_asm_attributes} should be the maximum possible length ! of a single machine instruction. @node Attr Example diff -rc2P gcc-2.4.3.1/objc/sendmsg.c gcc-2.4.4/objc/sendmsg.c *** gcc-2.4.3.1/objc/sendmsg.c Wed May 5 22:41:51 1993 --- gcc-2.4.4/objc/sendmsg.c Fri Jun 4 22:59:58 1993 *************** *** 98,102 **** #else #warning performv:: will not work ! (*_objc_error)(object, "objc_msg_sendv (performv::) not supported\n", 0); return 0; #endif --- 98,103 ---- #else #warning performv:: will not work ! va_list nothing; ! (*_objc_error)(object, "objc_msg_sendv (performv::) not supported\n", nothing); return 0; #endif diff -rc2P gcc-2.4.3.1/objc-act.c gcc-2.4.4/objc-act.c *** gcc-2.4.3.1/objc-act.c Wed May 19 23:12:57 1993 --- gcc-2.4.4/objc-act.c Sun Jun 6 18:54:18 1993 *************** *** 6074,6078 **** if (code == INTEGER_TYPE) { ! if (TREE_INT_CST_LOW (TYPE_MIN_VALUE (type)) == 0) { /* unsigned integer types */ --- 6074,6079 ---- if (code == INTEGER_TYPE) { ! if (TREE_INT_CST_LOW (TYPE_MIN_VALUE (type)) == 0 ! && TREE_INT_CST_HIGH (TYPE_MIN_VALUE (type)) == 0) { /* unsigned integer types */ *************** *** 6089,6092 **** --- 6090,6095 ---- obstack_1grow (&util_obstack, 'I'); /* 'I' */ } + else if (TYPE_MODE (type) == DImode) /* 'Q' */ + obstack_1grow (&util_obstack, 'Q'); } else /* signed integer types */ *************** *** 6103,6106 **** --- 6106,6111 ---- obstack_1grow (&util_obstack, 'i'); /* 'i' */ } + else if (TYPE_MODE (type) == DImode) /* 'q' */ + obstack_1grow (&util_obstack, 'q'); } } diff -rc2P gcc-2.4.3.1/real.c gcc-2.4.4/real.c *** gcc-2.4.3.1/real.c Sat May 22 15:32:29 1993 --- gcc-2.4.4/real.c Sun Jun 13 18:09:11 1993 *************** *** 3298,3305 **** } /* move the long integer to yi significand area */ yi[M] = (unsigned EMUSHORT) (ll >> 16); yi[M + 1] = (unsigned EMUSHORT) ll; - yi[E] = EXONE + 15; /* exponent if normalize shift count were 0 */ if ((k = enormlz (yi)) > NBITS)/* normalize the significand */ ecleaz (yi); /* it was zero */ --- 3298,3313 ---- } /* move the long integer to yi significand area */ + #if HOST_BITS_PER_LONG == 64 + yi[M] = (unsigned EMUSHORT) (ll >> 48); + yi[M + 1] = (unsigned EMUSHORT) (ll >> 32); + yi[M + 2] = (unsigned EMUSHORT) (ll >> 16); + yi[M + 3] = (unsigned EMUSHORT) ll; + yi[E] = EXONE + 47; /* exponent if normalize shift count were 0 */ + #else yi[M] = (unsigned EMUSHORT) (ll >> 16); yi[M + 1] = (unsigned EMUSHORT) ll; yi[E] = EXONE + 15; /* exponent if normalize shift count were 0 */ + #endif + if ((k = enormlz (yi)) > NBITS)/* normalize the significand */ ecleaz (yi); /* it was zero */ *************** *** 3330,3337 **** /* move the long integer to ayi significand area */ yi[M] = (unsigned EMUSHORT) (ll >> 16); yi[M + 1] = (unsigned EMUSHORT) ll; - yi[E] = EXONE + 15; /* exponent if normalize shift count were 0 */ if ((k = enormlz (yi)) > NBITS)/* normalize the significand */ ecleaz (yi); /* it was zero */ --- 3338,3353 ---- /* move the long integer to ayi significand area */ + #if HOST_BITS_PER_LONG == 64 + yi[M] = (unsigned EMUSHORT) (ll >> 48); + yi[M + 1] = (unsigned EMUSHORT) (ll >> 32); + yi[M + 2] = (unsigned EMUSHORT) (ll >> 16); + yi[M + 3] = (unsigned EMUSHORT) ll; + yi[E] = EXONE + 47; /* exponent if normalize shift count were 0 */ + #else yi[M] = (unsigned EMUSHORT) (ll >> 16); yi[M + 1] = (unsigned EMUSHORT) ll; yi[E] = EXONE + 15; /* exponent if normalize shift count were 0 */ + #endif + if ((k = enormlz (yi)) > NBITS)/* normalize the significand */ ecleaz (yi); /* it was zero */ *************** *** 3359,3363 **** { unsigned EMUSHORT xi[NI]; ! int k; emovi (x, xi); --- 3375,3380 ---- { unsigned EMUSHORT xi[NI]; ! int j, k; ! unsigned long ll; emovi (x, xi); *************** *** 3372,3379 **** if (k > (HOST_BITS_PER_LONG - 1)) { ! /* ! ; long integer overflow: output large integer ! ; and correct fraction ! */ if (xi[0]) *i = ((unsigned long) 1) << (HOST_BITS_PER_LONG - 1); --- 3389,3394 ---- if (k > (HOST_BITS_PER_LONG - 1)) { ! /* long integer overflow: output large integer ! and correct fraction */ if (xi[0]) *i = ((unsigned long) 1) << (HOST_BITS_PER_LONG - 1); *************** *** 3383,3413 **** if (extra_warnings) warning ("overflow on truncation to integer"); - goto lab11; } ! ! if (k > 16) { ! /* ! ; shift more than 16 bits: shift up k-16, output the integer, ! ; then complete the shift to get the fraction. ! */ ! k -= 16; eshift (xi, k); ! ! *i = (long) (((unsigned long) xi[M] << 16) | xi[M + 1]); ! eshup6 (xi); ! goto lab10; } - - /* shift not more than 16 bits */ - eshift (xi, k); - *i = (long) xi[M] & 0xffff; - - lab10: - - if (xi[0]) - *i = -(*i); - lab11: - xi[0] = 0; xi[E] = EXONE - 1; --- 3398,3428 ---- if (extra_warnings) warning ("overflow on truncation to integer"); } ! else if (k > 16) ! { ! /* Shift more than 16 bits: first shift up k-16 mod 16, ! then shift up by 16's. */ ! j = k - ((k >> 4) << 4); ! eshift (xi, j); ! ll = xi[M]; ! k -= j; ! do ! { ! eshup6 (xi); ! ll = (ll << 16) | xi[M]; ! } ! while ((k -= 16) > 0); ! *i = ll; ! if (xi[0]) ! *i = -(*i); ! } ! else { ! /* shift not more than 16 bits */ eshift (xi, k); ! *i = (long) xi[M] & 0xffff; ! if (xi[0]) ! *i = -(*i); } xi[0] = 0; xi[E] = EXONE - 1; *************** *** 3422,3443 **** ! /* ! ; Find unsigned long integer and fractional parts ! ! ; unsigned long i; ! ; unsigned EMUSHORT x[NE], frac[NE]; ! ; xifrac (x, &i, frac); - A negative e type input yields integer output = 0 - but correct fraction. - */ void euifrac (x, i, frac) unsigned EMUSHORT *x; ! long *i; unsigned EMUSHORT *frac; { unsigned EMUSHORT xi[NI]; ! int k; emovi (x, xi); --- 3437,3453 ---- ! /* Find unsigned long integer and fractional parts. ! A negative e type input yields integer output = 0 ! but correct fraction. */ void euifrac (x, i, frac) unsigned EMUSHORT *x; ! unsigned long *i; unsigned EMUSHORT *frac; { + unsigned long ll; unsigned EMUSHORT xi[NI]; ! int j, k; emovi (x, xi); *************** *** 3450,3459 **** return; } ! if (k > 32) { ! /* ! ; long integer overflow: output large integer ! ; and correct fraction ! */ *i = ~(0L); eshift (xi, k); --- 3460,3469 ---- return; } ! if (k > HOST_BITS_PER_LONG) { ! /* Long integer overflow: output large integer ! and correct fraction. ! Note, the BSD microvax compiler says that ~(0UL) ! is a syntax error. */ *i = ~(0L); eshift (xi, k); *************** *** 3460,3489 **** if (extra_warnings) warning ("overflow on truncation to unsigned integer"); - goto lab10; } ! ! if (k > 16) { ! /* ! ; shift more than 16 bits: shift up k-16, output the integer, ! ; then complete the shift to get the fraction. ! */ ! k -= 16; eshift (xi, k); ! ! *i = (long) (((unsigned long) xi[M] << 16) | xi[M + 1]); ! eshup6 (xi); ! goto lab10; } ! /* shift not more than 16 bits */ ! eshift (xi, k); ! *i = (long) xi[M] & 0xffff; ! ! lab10: ! ! if (xi[0]) *i = 0L; - xi[0] = 0; xi[E] = EXONE - 1; --- 3470,3499 ---- if (extra_warnings) warning ("overflow on truncation to unsigned integer"); } ! else if (k > 16) ! { ! /* Shift more than 16 bits: first shift up k-16 mod 16, ! then shift up by 16's. */ ! j = k - ((k >> 4) << 4); ! eshift (xi, j); ! ll = xi[M]; ! k -= j; ! do ! { ! eshup6 (xi); ! ll = (ll << 16) | xi[M]; ! } ! while ((k -= 16) > 0); ! *i = ll; ! } ! else { ! /* shift not more than 16 bits */ eshift (xi, k); ! *i = (long) xi[M] & 0xffff; } ! if (xi[0]) /* A negative value yields unsigned integer 0. */ *i = 0L; xi[0] = 0; xi[E] = EXONE - 1; *************** *** 4901,4905 **** as arrays of unsigned 16-bit shorts. Otherwise, use the default patterns here. */ ! #ifndef TFMODE_NAN #ifdef MIEEE unsigned EMUSHORT TFnan[8] = --- 4911,4917 ---- as arrays of unsigned 16-bit shorts. Otherwise, use the default patterns here. */ ! #ifdef TFMODE_NAN ! TFMODE_NAN; ! #else #ifdef MIEEE unsigned EMUSHORT TFnan[8] = *************** *** 4911,4915 **** #endif ! #ifndef XFMODE_NAN #ifdef MIEEE unsigned EMUSHORT XFnan[6] = {0x7fff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff}; --- 4923,4929 ---- #endif ! #ifdef XFMODE_NAN ! XFMODE_NAN; ! #else #ifdef MIEEE unsigned EMUSHORT XFnan[6] = {0x7fff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff}; *************** *** 4920,4924 **** #endif ! #ifndef DFMODE_NAN #ifdef MIEEE unsigned EMUSHORT DFnan[4] = {0x7fff, 0xffff, 0xffff, 0xffff}; --- 4934,4940 ---- #endif ! #ifdef DFMODE_NAN ! DFMODE_NAN; ! #else #ifdef MIEEE unsigned EMUSHORT DFnan[4] = {0x7fff, 0xffff, 0xffff, 0xffff}; *************** *** 4929,4933 **** #endif ! #ifndef SFMODE_NAN #ifdef MIEEE unsigned EMUSHORT SFnan[2] = {0x7fff, 0xffff}; --- 4945,4951 ---- #endif ! #ifdef SFMODE_NAN ! SFMODE_NAN; ! #else #ifdef MIEEE unsigned EMUSHORT SFnan[2] = {0x7fff, 0xffff}; *************** *** 4976,4978 **** --- 4994,5060 ---- } + /* Convert an SFmode target `float' value to a REAL_VALUE_TYPE. + This is the inverse of the function `etarsingle' invoked by + REAL_VALUE_TO_TARGET_SINGLE. */ + + REAL_VALUE_TYPE + ereal_from_float (f) + unsigned long f; + { + REAL_VALUE_TYPE r; + unsigned EMUSHORT s[2]; + unsigned EMUSHORT e[NE]; + + /* Convert 32 bit integer to array of 16 bit pieces in target machine order. + This is the inverse operation to what the function `endian' does. */ + #if WORDS_BIG_ENDIAN + s[0] = (unsigned EMUSHORT) (f >> 16); + s[1] = (unsigned EMUSHORT) f; + #else + s[0] = (unsigned EMUSHORT) f; + s[1] = (unsigned EMUSHORT) (f >> 16); + #endif + /* Convert and promote the target float to E-type. */ + e24toe (s, e); + /* Output E-type to REAL_VALUE_TYPE. */ + PUT_REAL (e, &r); + return r; + } + + /* Convert a DFmode target `double' value to a REAL_VALUE_TYPE. + This is the inverse of the function `etardouble' invoked by + REAL_VALUE_TO_TARGET_DOUBLE. + + The DFmode is stored as an array of longs (i.e., HOST_WIDE_INTs) + with 32 bits of the value per each long. The first element + of the input array holds the bits that would come first in the + target computer's memory. */ + + REAL_VALUE_TYPE + ereal_from_double (d) + unsigned long d[]; + { + REAL_VALUE_TYPE r; + unsigned EMUSHORT s[4]; + unsigned EMUSHORT e[NE]; + + /* Convert array of 32 bit pieces to equivalent array of 16 bit pieces. + This is the inverse of `endian'. */ + #if WORDS_BIG_ENDIAN + s[0] = (unsigned EMUSHORT) (d[0] >> 16); + s[1] = (unsigned EMUSHORT) d[0]; + s[2] = (unsigned EMUSHORT) (d[1] >> 16); + s[3] = (unsigned EMUSHORT) d[1]; + #else + s[0] = (unsigned EMUSHORT) d[0]; + s[1] = (unsigned EMUSHORT) (d[0] >> 16); + s[2] = (unsigned EMUSHORT) d[1]; + s[3] = (unsigned EMUSHORT) (d[1] >> 16); + #endif + /* Convert target double to E-type. */ + e53toe (s, e); + /* Output E-type to REAL_VALUE_TYPE. */ + PUT_REAL (e, &r); + return r; + } #endif /* EMU_NON_COMPILE not defined */ diff -rc2P gcc-2.4.3.1/real.h gcc-2.4.4/real.h *** gcc-2.4.3.1/real.h Sun May 9 11:50:26 1993 --- gcc-2.4.4/real.h Sat Jun 12 20:22:18 1993 *************** *** 96,99 **** --- 96,100 ---- REAL_VALUE_TYPE etrunci (), etruncui (), ereal_ldexp (), ereal_atof (); REAL_VALUE_TYPE ereal_negate (), ereal_truncate (); + REAL_VALUE_TYPE ereal_from_float (), ereal_from_double (); #define REAL_VALUES_EQUAL(x, y) (ereal_cmp ((x), (y)) == 0) *************** *** 125,131 **** #define REAL_VALUE_TO_TARGET_LONG_DOUBLE(IN, OUT) (etarldouble ((IN), (OUT))) #define REAL_VALUE_TO_TARGET_DOUBLE(IN, OUT) (etardouble ((IN), (OUT))) ! /* IN is a REAL_VALUE_TYPE. OUT is a long. */ #define REAL_VALUE_TO_TARGET_SINGLE(IN, OUT) ((OUT) = etarsingle ((IN))) /* Conversions to decimal ASCII string. */ --- 126,135 ---- #define REAL_VALUE_TO_TARGET_LONG_DOUBLE(IN, OUT) (etarldouble ((IN), (OUT))) #define REAL_VALUE_TO_TARGET_DOUBLE(IN, OUT) (etardouble ((IN), (OUT))) ! /* d is an array of longs. */ ! #define REAL_VALUE_FROM_TARGET_DOUBLE(d) (ereal_from_double (d)) /* IN is a REAL_VALUE_TYPE. OUT is a long. */ #define REAL_VALUE_TO_TARGET_SINGLE(IN, OUT) ((OUT) = etarsingle ((IN))) + /* f is a long. */ + #define REAL_VALUE_FROM_TARGET_SINGLE(f) (ereal_from_float (f)) /* Conversions to decimal ASCII string. */ diff -rc2P gcc-2.4.3.1/recog.c gcc-2.4.4/recog.c *** gcc-2.4.3.1/recog.c Fri Feb 26 15:07:41 1993 --- gcc-2.4.4/recog.c Fri Jun 11 21:42:49 1993 *************** *** 1,4 **** /* Subroutines used by or related to instruction recognition. ! Copyright (C) 1987, 1988, 1991, 1992 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Subroutines used by or related to instruction recognition. ! Copyright (C) 1987, 1988, 1991, 1992, 1993 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 1897,1901 **** || op_types[opno] != OP_OUT) && opno != eopno ! && constraints[opno] != 0 && ! (matching_operands[opno] == eopno && rtx_equal_p (recog_operand[opno], --- 1897,1902 ---- || op_types[opno] != OP_OUT) && opno != eopno ! /* Ignore things like match_operator operands. */ ! && *constraints[opno] != 0 && ! (matching_operands[opno] == eopno && rtx_equal_p (recog_operand[opno], diff -rc2P gcc-2.4.3.1/reg-stack.c gcc-2.4.4/reg-stack.c *** gcc-2.4.3.1/reg-stack.c Wed May 5 17:41:26 1993 --- gcc-2.4.4/reg-stack.c Fri Jun 18 02:48:39 1993 *************** *** 1218,1221 **** --- 1218,1245 ---- } } + + /* If current function returns its result in an fp stack register, + return the register number. Otherwise return -1. */ + + static int + stack_result_p (decl) + tree decl; + { + rtx result = DECL_RTL (DECL_RESULT (decl)); + + if (result != 0 + && !(GET_CODE (result) == REG + && REGNO (result) < FIRST_PSEUDO_REGISTER)) + { + #ifdef FUNCTION_OUTGOING_VALUE + result + = FUNCTION_OUTGOING_VALUE (TREE_TYPE (DECL_RESULT (decl)), decl); + #else + result = FUNCTION_VALUE (TREE_TYPE (DECL_RESULT (decl)), decl); + #endif + } + + return STACK_REG_P (result) ? REGNO (result) : -1; + } /* Determine the which registers are live at the start of each basic *************** *** 1257,1265 **** if (current_function_returns_real ! && STACK_REG_P (DECL_RTL (DECL_RESULT (current_function_decl)))) { /* Find all RETURN insns and mark them. */ ! int value_regno = REGNO (DECL_RTL (DECL_RESULT (current_function_decl))); for (block = blocks - 1; block >= 0; block--) --- 1281,1289 ---- if (current_function_returns_real ! && stack_result_p (current_function_decl) >= 0) { /* Find all RETURN insns and mark them. */ ! int value_regno = stack_result_p (current_function_decl); for (block = blocks - 1; block >= 0; block--) diff -rc2P gcc-2.4.3.1/reload.c gcc-2.4.4/reload.c *** gcc-2.4.3.1/reload.c Sun May 23 01:09:51 1993 --- gcc-2.4.4/reload.c Mon Jun 14 04:41:36 1993 *************** *** 3795,3798 **** --- 3795,3801 ---- } + /* Return a mem ref for the memory equivalent of reg REGNO. + This mem ref is not shared with anything. */ + static rtx make_memloc (ad, regno) *************** *** 3802,3808 **** --- 3805,3818 ---- register int i; rtx tem = reg_equiv_address[regno]; + + #if 0 /* We cannot safely reuse a memloc made here; + if the pseudo appears twice, and its mem needs a reload, + it gets two separate reloads assigned, but it only + gets substituted with the second of them; + then it can get used before that reload reg gets loaded up. */ for (i = 0; i < n_memlocs; i++) if (rtx_equal_p (tem, XEXP (memlocs[i], 0))) return memlocs[i]; + #endif /* If TEM might contain a pseudo, we must copy it to avoid diff -rc2P gcc-2.4.3.1/reload1.c gcc-2.4.4/reload1.c *** gcc-2.4.3.1/reload1.c Sun May 30 19:28:46 1993 --- gcc-2.4.4/reload1.c Fri Jun 11 21:39:13 1993 *************** *** 3108,3119 **** ep++) if (ep->from_rtx == XEXP (SET_SRC (old_body), 0) ! && ep->can_eliminate ! && ep->offset == - INTVAL (XEXP (SET_SRC (old_body), 1))) { ! PATTERN (insn) = gen_rtx (SET, VOIDmode, ! SET_DEST (old_body), ep->to_rtx); ! INSN_CODE (insn) = -1; ! val = 1; ! goto done; } } --- 3108,3127 ---- ep++) if (ep->from_rtx == XEXP (SET_SRC (old_body), 0) ! && ep->can_eliminate) { ! /* We must stop at the first elimination that will be used. ! If this one would replace the PLUS with a REG, do it ! now. Otherwise, quit the loop and let eliminate_regs ! do its normal replacement. */ ! if (ep->offset == - INTVAL (XEXP (SET_SRC (old_body), 1))) ! { ! PATTERN (insn) = gen_rtx (SET, VOIDmode, ! SET_DEST (old_body), ep->to_rtx); ! INSN_CODE (insn) = -1; ! val = 1; ! goto done; ! } ! ! break; } } diff -rc2P gcc-2.4.3.1/rtl.texi gcc-2.4.4/rtl.texi *** gcc-2.4.3.1/rtl.texi Mon May 24 17:33:06 1993 --- gcc-2.4.4/rtl.texi Mon Jun 14 17:26:52 1993 *************** *** 28,32 **** * Arithmetic:: Expressions representing arithmetic on other expressions. * Comparisons:: Expressions representing comparison of expressions. ! * Bit Fields:: Expressions representing bit-fields in memory or reg. * Conversions:: Extending, truncating, floating or fixing. * RTL Declarations:: Declaring volatility, constancy, etc. --- 28,32 ---- * Arithmetic:: Expressions representing arithmetic on other expressions. * Comparisons:: Expressions representing comparison of expressions. ! * Bit Fields:: Expressions representing bitfields in memory or reg. * Conversions:: Extending, truncating, floating or fixing. * RTL Declarations:: Declaring volatility, constancy, etc. *************** *** 195,204 **** An RTX code for a noncommutative binary operation, such as @code{MINUS}. - @c the following produces a very tiny overfull hbox.. one possible - @c rewrite would be "...operation, such as either bish or baz." --mew - @c 27jan93 @item b ! An RTX code for a bitfield operation (@code{ZERO_EXTRACT} and ! @code{SIGN_EXTRACT}). @item 3 --- 195,201 ---- An RTX code for a noncommutative binary operation, such as @code{MINUS}. @item b ! An RTX code for a bitfield operation, either @code{ZERO_EXTRACT} or ! @code{SIGN_EXTRACT}. @item 3 *************** *** 291,295 **** @cindex flags in RTL expression ! RTL expressions contain several flags (one-bit bit-fields) that are used in certain types of expression. Most often they are accessed with the following macros: --- 288,292 ---- @cindex flags in RTL expression ! RTL expressions contain several flags (one-bit bitfields) that are used in certain types of expression. Most often they are accessed with the following macros: *************** *** 522,526 **** In @code{reg} expressions, it is 1 if the register has its entire life ! contained within the test expression of some loopl. In @code{subreg} expressions, 1 means that the @code{subreg} is accessing --- 519,523 ---- In @code{reg} expressions, it is 1 if the register has its entire life ! contained within the test expression of some loop. In @code{subreg} expressions, 1 means that the @code{subreg} is accessing *************** *** 765,770 **** @findex GET_MODE_WIDER_MODE @item GET_MODE_WIDER_MODE (@var{m}) ! Returns the next wider natural mode. For example, the macro ! @code{GET_WIDER_MODE(QImode)} returns @code{HImode}. @findex GET_MODE_SIZE --- 762,767 ---- @findex GET_MODE_WIDER_MODE @item GET_MODE_WIDER_MODE (@var{m}) ! Returns the next wider natural mode. For example, the expression ! @code{GET_MODE_WIDER_MODE (QImode)} returns @code{HImode}. @findex GET_MODE_SIZE *************** *** 805,809 **** @findex byte_mode @findex word_mode - @c following produces an overfull.. any ideas.. --mew 27jan93 The global variables @code{byte_mode} and @code{word_mode} contain modes whose classes are @code{MODE_INT} and whose bitsizes are either --- 802,805 ---- *************** *** 1561,1565 **** @cindex bit fields ! Special expression codes exist to represent bit-field instructions. These types of expressions are lvalues in RTL; they may appear on the left side of an assignment, indicating insertion of a value --- 1557,1561 ---- @cindex bit fields ! Special expression codes exist to represent bitfield instructions. These types of expressions are lvalues in RTL; they may appear on the left side of an assignment, indicating insertion of a value *************** *** 2442,2448 **** instructions, such as the m68k dbra, can be matched. ! The @code{REG_NONNEG} note is added to insns only if the pattern named ! @samp{decrement_and_branch_until_zero} is contained in the machine ! description. @findex REG_NO_CONFLICT --- 2438,2443 ---- instructions, such as the m68k dbra, can be matched. ! The @code{REG_NONNEG} note is added to insns only if the machine ! description has a @samp{decrement_and_branch_until_zero} pattern. @findex REG_NO_CONFLICT diff -rc2P gcc-2.4.3.1/sched.c gcc-2.4.4/sched.c *** gcc-2.4.3.1/sched.c Fri May 14 17:20:02 1993 --- gcc-2.4.4/sched.c Sat Jun 12 13:42:21 1993 *************** *** 845,849 **** /* Notes will never intervene here though, so don't bother checking for them. */ ! while (NEXT_INSN (next) && SCHED_GROUP_P (NEXT_INSN (next))) next = NEXT_INSN (next); --- 845,854 ---- /* Notes will never intervene here though, so don't bother checking for them. */ ! /* We must reject CODE_LABELs, so that we don't get confused by one ! that has LABEL_PRESERVE_P set, which is represented by the same ! bit in the rtl as SCHED_GROUP_P. A CODE_LABEL can never be ! SCHED_GROUP_P. */ ! while (NEXT_INSN (next) && SCHED_GROUP_P (NEXT_INSN (next)) ! && GET_CODE (NEXT_INSN (next)) != CODE_LABEL) next = NEXT_INSN (next); *************** *** 1882,1890 **** { for (u = reg_last_uses[i]; u; u = XEXP (u, 1)) ! if (GET_CODE (PATTERN (XEXP (u, 0))) != USE) ! add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI); reg_last_uses[i] = 0; ! if (reg_last_sets[i] ! && GET_CODE (PATTERN (reg_last_sets[i])) != USE) add_dependence (insn, reg_last_sets[i], 0); reg_last_sets[i] = insn; --- 1887,1893 ---- { for (u = reg_last_uses[i]; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI); reg_last_uses[i] = 0; ! if (reg_last_sets[i]) add_dependence (insn, reg_last_sets[i], 0); reg_last_sets[i] = insn; *************** *** 2027,2035 **** { for (u = reg_last_uses[i]; u; u = XEXP (u, 1)) ! if (GET_CODE (PATTERN (XEXP (u, 0))) != USE) ! add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI); reg_last_uses[i] = 0; ! if (reg_last_sets[i] ! && GET_CODE (PATTERN (reg_last_sets[i])) != USE) add_dependence (insn, reg_last_sets[i], REG_DEP_ANTI); reg_last_sets[i] = insn; --- 2030,2036 ---- { for (u = reg_last_uses[i]; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI); reg_last_uses[i] = 0; ! if (reg_last_sets[i]) add_dependence (insn, reg_last_sets[i], REG_DEP_ANTI); reg_last_sets[i] = insn; diff -rc2P gcc-2.4.3.1/stmt.c gcc-2.4.4/stmt.c *** gcc-2.4.3.1/stmt.c Tue May 25 00:08:27 1993 --- gcc-2.4.4/stmt.c Sat Jun 5 23:58:20 1993 *************** *** 3655,3658 **** --- 3655,3663 ---- } + #if 0 + /* ??? This optimization is disabled because it causes valid programs to + fail. ANSI C does not guarantee that an expression with enum type + will have a value that is the same as one of the enumation literals. */ + /* If all values were found as case labels, make one of them the default label. Thus, this switch will never fall through. We arbitrarily pick *************** *** 3670,3673 **** --- 3675,3679 ---- *l = 0; } + #endif /* 0 */ } diff -rc2P gcc-2.4.3.1/texinfo.tex gcc-2.4.4/texinfo.tex *** gcc-2.4.3.1/texinfo.tex Tue Jun 1 18:56:26 1993 --- gcc-2.4.4/texinfo.tex Mon Jun 14 13:24:45 1993 *************** *** 23,27 **** %what you give them. Help stamp out software-hoarding! ! \def\texinfoversion{2.108} \message{Loading texinfo package [Version \texinfoversion]:} --- 23,27 ---- %what you give them. Help stamp out software-hoarding! ! \def\texinfoversion{2.109} \message{Loading texinfo package [Version \texinfoversion]:} *************** *** 1371,1376 **** \def\itemzzz #1{\begingroup % ! \advance\hsize by -\rightskip ! \advance\hsize by -\tableindent \setbox0=\hbox{\itemfont{#1}}% \itemindex{#1}% --- 1371,1376 ---- \def\itemzzz #1{\begingroup % ! \advance\hsize by -\rightskip% ! \advance\hsize by -\tableindent% \setbox0=\hbox{\itemfont{#1}}% \itemindex{#1}% *************** *** 1378,1384 **** % % Be sure we are not still in the middle of a paragraph. ! {\parskip = 0in ! \par ! }% % % If the item text does not fit in the space we have, put it on a line --- 1378,1383 ---- % % Be sure we are not still in the middle of a paragraph. ! \parskip = 0in ! \par% % % If the item text does not fit in the space we have, put it on a line *************** *** 1387,1402 **** % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. ! \ifdim \wd0>\itemmax ! \setbox0=\hbox{\hskip \leftskip \hskip -\tableindent \unhbox0}\box0 ! % ! % We're going to be starting a paragraph, but we don't want the ! % \parskip glue -- logically it's part of the @item we just started. ! \nobreak \vskip-\parskip ! % ! % Stop a page break at the \parskip glue coming up. Unfortunately ! % we can't prevent a possible page break at the following ! % \baselineskip glue. ! \nobreak ! \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. Since that --- 1386,1393 ---- % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. ! \ifdim \wd0>\itemmax% ! \hbox{\hskip \leftskip \hskip -\tableindent \unhbox0}% ! \nobreak% ! \else% % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. Since that *************** *** 1403,1410 **** % text will be indented by \tableindent, we make the item text be in % a zero-width box. ! \noindent \rlap{\hskip -\tableindent\box0}% ! \fi ! \endgroup } --- 1394,1401 ---- % text will be indented by \tableindent, we make the item text be in % a zero-width box. ! \noindent% \rlap{\hskip -\tableindent\box0}% ! \fi% ! \endgroup% } *************** *** 3148,3200 **** \obeylines\spacesplit#3} ! \def\defvrparsebody #1#2#3#4 {\begingroup\inENV % ! \medbreak % ! % Define the end token that this defining construct specifies ! % so that it will exit this group. ! \def#1{\endgraf\endgroup\medbreak}% ! \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}% ! \parindent=0in ! \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent ! \exdentamount=\defbodyindent ! \begingroup\obeylines\spacesplit{#3{#4}}} ! ! % This seems to work right in all cases. ! \let\deftpparsebody=\defvrparsebody ! % This fails to work. When given `@deftp {Data Type} foo_t', ! % it thinks the type name is just `f'. ! %%% This is the same as all the others except for the last line. We need ! %%% to parse the arguments differently for @deftp, since the ``attributes'' ! %%% there are optional. ! %%% ! %%\def\deftpparsebody #1#2#3#4 {\begingroup\inENV % ! %%\medbreak % ! %%% Define the end token that this defining construct specifies ! %%% so that it will exit this group. ! %%\def#1{\endgraf\endgroup\medbreak}% ! %%\def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}% ! %%\parindent=0in ! %%\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent ! %%\exdentamount=\defbodyindent ! %%\begingroup\obeylines\parsetpheaderline{#3{#4}}} ! ! %%{\obeylines % ! %% % Parse the type name and any attributes (field names, etc.). ! %% % #1 is the beginning of the macro call that will produce the output, ! %% % i.e., \deftpheader{CLASS}; this is passed from \deftpparsebody. ! %% % #2 is the type name, e.g., `struct termios'. ! %% % #3 is the (possibly empty) attribute list. ! %% % ! %% \gdef\parsetpheaderline#1#2#3^^M{% ! %% \endgroup % Started in \deftpparsebody. ! %% % ! %% % If the attribute list is in fact empty, there will be no space after ! %% % #2; so we can't put a space in our TeX parameter list. But if it ! %% % isn't empty, then #3 will begin with an unwanted space. ! %% \def\theargs{\ignorespaces #3}% ! %% % ! %% % Call the macro to produce the output. ! %% #1{#2}\theargs % ! %% }% ! %%} \def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV % --- 3139,3190 ---- \obeylines\spacesplit#3} ! % This is used for \def{tp,vr}parsebody. It could probably be used for ! % some of the others, too, with some judicious conditionals. ! % ! \def\parsebodycommon#1#2#3{% ! \begingroup\inENV % ! \medbreak % ! % Define the end token that this defining construct specifies ! % so that it will exit this group. ! \def#1{\endgraf\endgroup\medbreak}% ! \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}% ! \parindent=0in ! \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent ! \exdentamount=\defbodyindent ! \begingroup\obeylines ! } ! ! \def\defvrparsebody#1#2#3#4 {% ! \parsebodycommon{#1}{#2}{#3}% ! \spacesplit{#3{#4}}% ! } ! ! % This loses on `@deftp {Data Type} {struct termios}' -- it thinks the ! % type is just `struct', because we lose the braces in `{struct ! % termios}' when \spacesplit reads its undelimited argument. Sigh. ! % \let\deftpparsebody=\defvrparsebody ! % ! % So, to get around this, we put \empty in with the type name. That ! % way, TeX won't find exactly `{...}' as an undelimited argument, and ! % won't strip off the braces. ! % ! \def\deftpparsebody #1#2#3#4 {% ! \parsebodycommon{#1}{#2}{#3}% ! \spacesplit{\parsetpheaderline{#3{#4}}}\empty ! } ! ! % Fine, but then we have to eventually remove the \empty *and* the ! % braces (if any). That's what this does, putting the result in \tptemp. ! % ! \def\removeemptybraces\empty#1\relax{\def\tptemp{#1}}% ! ! % After \spacesplit has done its work, this is called -- #1 is the final ! % thing to call, #2 the type name (which starts with \empty), and #3 ! % (which might be empty) the arguments. ! % ! \def\parsetpheaderline#1#2#3{% ! \removeemptybraces#2\relax ! #1{\tptemp}{#3}% ! }% \def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV % diff -rc2P gcc-2.4.3.1/tm.texi gcc-2.4.4/tm.texi *** gcc-2.4.3.1/tm.texi Sun May 23 01:31:35 1993 --- gcc-2.4.4/tm.texi Mon Jun 14 12:31:53 1993 *************** *** 274,281 **** and specify private search areas for GCC. The directory @code{GPLUSPLUS_INCLUDE_DIR} is used only for C++ programs. - @c these overfulls are gonna be *lots* of fun. --mew 2feb93 - @c wheeee! i got them! :-) but i had to frob the ordering quite a - @c bit, i hope this is not a problem. didn't seem like it should be. - @c --mew 11feb93 The definition should be an initializer for an array of structures. --- 274,277 ---- *************** *** 457,465 **** will be set to the string @code{"512"}. - @c this is an unreported overfull hbox. should be easy to fix, but i - @c don't know what indenting etc is allowed. --mew 10feb93 @smallexample extern char *m88k_short_data; ! #define TARGET_OPTIONS @{ @{ "short-data-", &m88k_short_data @} @} @end smallexample --- 453,460 ---- will be set to the string @code{"512"}. @smallexample extern char *m88k_short_data; ! #define TARGET_OPTIONS \ ! @{ @{ "short-data-", &m88k_short_data @} @} @end smallexample *************** *** 2138,2142 **** @findex FINAL_REG_PARM_STACK_SPACE @item MAYBE_REG_PARM_STACK_SPACE ! @item FINAL_REG_PARM_STACK_SPACE (@var{const_size}, @var{var_size}) Define these macros in addition to the one above if functions might allocate stack space for arguments even when their values are passed --- 2133,2137 ---- @findex FINAL_REG_PARM_STACK_SPACE @item MAYBE_REG_PARM_STACK_SPACE ! @itemx FINAL_REG_PARM_STACK_SPACE (@var{const_size}, @var{var_size}) Define these macros in addition to the one above if functions might allocate stack space for arguments even when their values are passed *************** *** 2863,2868 **** can take a short cut in the definition of this macro and use the name that you know will result. - @c do a search for "of course...". this paragraph is repeated just two - @c paragraphs below. something is *wrong*. --mew 5feb93 The first word of this block is a flag which will be nonzero if the --- 2858,2861 ---- *************** *** 2883,2886 **** --- 2876,2881 ---- @end example + @c This paragraph is the same as one a few paragraphs up. + @c That is not an error. Of course, since you are writing the definition of @code{ASM_GENERATE_INTERNAL_LABEL} as well as that of this macro, you *************** *** 2887,2892 **** can take a short cut in the definition of this macro and use the name that you know will result. - @c do a reverse search for "of course...". this paragraph is repeated - @c just two paragraphs above. something is *wrong*. --mew 5feb93 @end table --- 2882,2885 ---- *************** *** 4179,4184 **** @findex ASM_OUTPUT_FLOAT @item ASM_OUTPUT_LONG_DOUBLE (@var{stream}, @var{value}) ! @item ASM_OUTPUT_DOUBLE (@var{stream}, @var{value}) ! @item ASM_OUTPUT_FLOAT (@var{stream}, @var{value}) A C statement to output to the stdio stream @var{stream} an assembler instruction to assemble a floating-point constant of @code{TFmode}, --- 4172,4177 ---- @findex ASM_OUTPUT_FLOAT @item ASM_OUTPUT_LONG_DOUBLE (@var{stream}, @var{value}) ! @itemx ASM_OUTPUT_DOUBLE (@var{stream}, @var{value}) ! @itemx ASM_OUTPUT_FLOAT (@var{stream}, @var{value}) A C statement to output to the stdio stream @var{stream} an assembler instruction to assemble a floating-point constant of @code{TFmode}, *************** *** 4196,4201 **** @findex output_addr_const @item ASM_OUTPUT_QUADRUPLE_INT (@var{stream}, @var{exp}) ! @item ASM_OUTPUT_DOUBLE_INT (@var{stream}, @var{exp}) ! @item ASM_OUTPUT_INT (@var{stream}, @var{exp}) @itemx ASM_OUTPUT_SHORT (@var{stream}, @var{exp}) @itemx ASM_OUTPUT_CHAR (@var{stream}, @var{exp}) --- 4189,4194 ---- @findex output_addr_const @item ASM_OUTPUT_QUADRUPLE_INT (@var{stream}, @var{exp}) ! @itemx ASM_OUTPUT_DOUBLE_INT (@var{stream}, @var{exp}) ! @itemx ASM_OUTPUT_INT (@var{stream}, @var{exp}) @itemx ASM_OUTPUT_SHORT (@var{stream}, @var{exp}) @itemx ASM_OUTPUT_CHAR (@var{stream}, @var{exp}) *************** *** 5402,5408 **** @node Cross-compilation ! @section Cross Compilation and Floating Point Format @cindex cross compilation and floating point ! @cindex floating point format and cross compilation While all modern machines use 2's complement representation for integers, --- 5395,5401 ---- @node Cross-compilation ! @section Cross Compilation and Floating Point @cindex cross compilation and floating point ! @cindex floating point and cross compilation While all modern machines use 2's complement representation for integers, *************** *** 5581,5585 **** @item PREDICATE_CODES @findex PREDICATE_CODES ! Optionally define this if you have added predicates to @file{@var{machine}.c}. This macro is called within an initializer of an array of structures. The first field in the structure is the name of a --- 5574,5578 ---- @item PREDICATE_CODES @findex PREDICATE_CODES ! Define this if you have defined special-purpose predicates in the file @file{@var{machine}.c}. This macro is called within an initializer of an array of structures. The first field in the structure is the name of a diff -rc2P gcc-2.4.3.1/toplev.c gcc-2.4.4/toplev.c *** gcc-2.4.3.1/toplev.c Mon May 24 00:30:48 1993 --- gcc-2.4.4/toplev.c Sat Jun 19 03:57:45 1993 *************** *** 1940,1944 **** && ! TREE_PUBLIC (decl)) { ! pedwarn_with_decl (decl, "`%s' declared `static' but never defined"); /* This symbol is effectively an "extern" declaration now. */ --- 1940,1948 ---- && ! TREE_PUBLIC (decl)) { ! /* This should be a pedwarn, except that there is ! no easy way to prevent it from happening when the ! name is used only inside a sizeof. ! This at least avoids being incorrect. */ ! warning_with_decl (decl, "`%s' declared `static' but never defined"); /* This symbol is effectively an "extern" declaration now. */ diff -rc2P gcc-2.4.3.1/unroll.c gcc-2.4.4/unroll.c *** gcc-2.4.3.1/unroll.c Sun May 16 19:13:23 1993 --- gcc-2.4.4/unroll.c Thu Jun 17 17:31:26 1993 *************** *** 1,4 **** /* Try to unroll loops, and split induction variables. ! Copyright (C) 1992 Free Software Foundation, Inc. Contributed by James E. Wilson, Cygnus Support/UC Berkeley. --- 1,4 ---- /* Try to unroll loops, and split induction variables. ! Copyright (C) 1992, 1993 Free Software Foundation, Inc. Contributed by James E. Wilson, Cygnus Support/UC Berkeley. *************** *** 1319,1323 **** --- 1319,1326 ---- { rtx increment; + rtx increment_total = 0; + int tries = 0; + retry: /* Verify that we have an increment insn here. First check for a plus as the set source. */ *************** *** 1342,1346 **** /* SR sometimes puts the constant in a register, especially if it is too big to be an add immed operand. */ ! increment = SET_SRC (PATTERN (PREV_INSN (src_insn))); /* SR may have used LO_SUM to compute the constant if it is too large --- 1345,1350 ---- /* SR sometimes puts the constant in a register, especially if it is too big to be an add immed operand. */ ! src_insn = PREV_INSN (src_insn); ! increment = SET_SRC (PATTERN (src_insn)); /* SR may have used LO_SUM to compute the constant if it is too large *************** *** 1358,1367 **** } ! /* Check that the source register is the same as the dest register. */ if (GET_CODE (XEXP (SET_SRC (pattern), 0)) != REG || REGNO (XEXP (SET_SRC (pattern), 0)) != regno) ! abort (); ! return increment; } --- 1362,1395 ---- } ! if (increment_total) ! increment_total = GEN_INT (INTVAL (increment_total) + INTVAL (increment)); ! else ! increment_total = increment; ! ! /* Check that the source register is the same as the register we expected ! to see as the source. If not, something is seriously wrong. */ if (GET_CODE (XEXP (SET_SRC (pattern), 0)) != REG || REGNO (XEXP (SET_SRC (pattern), 0)) != regno) ! { ! /* Some machines (e.g. the romp), may emit two add instructions for ! certain constants, so lets try looking for another add immediately ! before this one if we have only seen one add insn so far. */ ! ! if (tries == 0) ! { ! tries++; ! ! src_insn = PREV_INSN (src_insn); ! pattern = PATTERN (src_insn); ! ! delete_insn (get_last_insn ()); ! ! goto retry; ! } ! ! abort (); ! } ! return increment_total; } diff -rc2P gcc-2.4.3.1/varasm.c gcc-2.4.4/varasm.c *** gcc-2.4.3.1/varasm.c Wed May 19 23:09:47 1993 --- gcc-2.4.4/varasm.c Thu Jun 3 18:52:21 1993 *************** *** 1419,1423 **** if (!bcmp (&dconst0, &d, sizeof d)) return CONST0_RTX (mode); ! else if (REAL_VALUES_EQUAL (dconst1, d)) return CONST1_RTX (mode); --- 1419,1427 ---- if (!bcmp (&dconst0, &d, sizeof d)) return CONST0_RTX (mode); ! /* Check for NaN first, because some ports (specifically the i386) do not ! emit correct ieee-fp code by default, and thus will generate a core ! dump here if we pass a NaN to REAL_VALUES_EQUAL and if REAL_VALUES_EQUAL ! does a floating point comparison. */ ! else if (! REAL_VALUE_ISNAN (d) && REAL_VALUES_EQUAL (dconst1, d)) return CONST1_RTX (mode); diff -rc2P gcc-2.4.3.1/version.c gcc-2.4.4/version.c *** gcc-2.4.3.1/version.c Tue Jun 1 18:50:09 1993 --- gcc-2.4.4/version.c Sat Jun 19 05:25:21 1993 *************** *** 1 **** ! char *version_string = "2.4.3"; --- 1 ---- ! char *version_string = "2.4.4";