* Check in merge from gcc2. See ChangeLog.12 for details.
authorJeff Law <law@gcc.gnu.org>
Tue, 5 May 1998 23:18:02 +0000 (17:18 -0600)
committerJeff Law <law@gcc.gnu.org>
Tue, 5 May 1998 23:18:02 +0000 (17:18 -0600)
From-SVN: r19553

68 files changed:
gcc/ChangeLog
gcc/ChangeLog.12
gcc/c-common.c
gcc/c-decl.c
gcc/c-parse.c
gcc/c-parse.in
gcc/c-parse.y
gcc/c-typeck.c
gcc/cccp.c
gcc/config.in
gcc/config/1750a/1750a.h
gcc/config/a29k/a29k.h
gcc/config/alpha/xm-vms.h
gcc/config/arc/arc.h
gcc/config/dsp16xx/dsp16xx.h
gcc/config/i386/i386.c
gcc/config/i386/xm-cygwin32.h
gcc/config/i386/xm-mingw32.h
gcc/config/m32r/m32r.h
gcc/config/m68k/m68k.c
gcc/config/m68k/m68k.h
gcc/config/m88k/m88k.h
gcc/config/mips/mips.c
gcc/config/mips/mips.h
gcc/config/mips/xm-mips.h
gcc/config/pa/pa.md
gcc/config/vax/vax.md
gcc/config/vax/xm-vms.h
gcc/configure
gcc/configure.in
gcc/convert.c
gcc/cp/ChangeLog
gcc/cp/cvt.c
gcc/cp/typeck.c
gcc/cpplib.c
gcc/dbxout.c
gcc/dwarf2out.c
gcc/expmed.c
gcc/expr.c
gcc/expr.h
gcc/final.c
gcc/fixincludes
gcc/fold-const.c
gcc/function.c
gcc/gcc.texi
gcc/getopt.c
gcc/getopt.h
gcc/getopt1.c
gcc/install.texi
gcc/invoke.texi
gcc/libgcc2.c
gcc/loop.c
gcc/md.texi
gcc/objc/objc-parse.c
gcc/objc/objc-parse.y
gcc/obstack.c
gcc/obstack.h
gcc/real.c
gcc/real.h
gcc/reload.c
gcc/reload.h
gcc/reload1.c
gcc/stmt.c
gcc/texinfo.tex
gcc/tm.texi
gcc/toplev.c
gcc/tree.c
gcc/version.c

index fb3651c9a03c6bd3b5bd344af48f4c9466feeb6a..8cabe0c44f3d8dc7ede507398f6352a3b3c93d2b 100644 (file)
@@ -1,3 +1,7 @@
+Wed May  6 00:09:36 1998  Jeffrey A Law  (law@cygnus.com)
+
+       * Check in merge from gcc2.  See ChangeLog.12 for details.
+
 Tue May  5 14:33:49 1998  Jim Wilson  <wilson@cygnus.com>
 
        * c-common.c (scan_char_table): Separate 's' and 'c'.  'c' does not
index a87955ef19a61dd9a0b9a35f88ca3cbb9d3af612..ecb291925080d730da799ae5afb01517f2441578 100644 (file)
@@ -1,5 +1,234 @@
+Sat May  2 20:39:22 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * fold-const.c (fold): When commutting COND_EXPR and binary operation,
+       avoid quadratic behavior if have nested COND_EXPRs.
+
+Tue Apr 28 17:30:05 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * mips.h (HOST_WIDE_INT): Define if not already.
+       (compute_frame_size, mips_debugger_offset): Return HOST_WIDE_INT.
+       (DEBUGGER_{AUTO,ARG}_OFFSET): Cast second arg to HOST_WIDE_INT.
+       * /mips.c (mips_debugger_offset): Now returns HOST_WIDE_INT.
+       Likewise for internal variable frame_size.
+
+       * final.c (alter_subreg): Make new SUBREG if reload replacement
+       scheduled inside it.
+
+       * dwarf2out.c (add_bound_info, case SAVE_EXPR): Pass 
+       SAVE_EXPR_RTL address through fix_lexical_addr.
+
+Mon Apr 27 18:57:18 1998  Jim Wilson  <wilson@cygnus.com>
+
+       * mips/sni-svr4.h (CPP_PREDEFINES): Add -Dsinix and -DSNI.
+
+Mon Apr 20 14:48:29 1998  Michael Meissner  <meissner@cygnus.com>
+
+       * rs6000.md (mov{sf,df} define_splits): When splitting move of
+       constant to int reg, don't split  insns that do simple AND and OR
+       operations; just split each word and let normal movsi define split
+       handle it further.
+
+Sun Apr 19 20:21:19 1998  Michael P. Hayes  <michaelh@ongaonga.chch.cri.nz>
+
+       * real.h (C4X_FLOAT_FORMAT): New macro.
+       * real.c (c4xtoe, etoc4x, toc4x): New functions.
+
+Sun Apr 19 20:17:32 1998  Niklas Hallqvist  <niklas@petra.appli.se>
+
+       * m68k.c (notice_update_cc): Use modified_in_p to check for update.
+
+Sun Apr 19 18:48:07 1998  K. Richard Pixley  <rich@kyoto.noir.com>
+
+       * fixincludes: Discard empty C++ comments.
+       Special case more files with C++ comments nested in C comments.
+
+Sun Apr 19 18:30:11 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * m68k.md ({add,sub}di3): Optimize for constant operand.
+
+Sun Apr 19 18:27:11 1998  Alan Modra <alan@spri.levels.unisa.edu.au>
+
+       * i386.c (output_387_binary_op): Swap operands when popping if result
+       is st(0).
+
+Sun Apr 19 17:58:01 1998  Peter Jeremy  <peter.jeremy@alcatel.com.au>
+
+       * expr.c (do_jump_by_parts_equality_rtx): Now public.
+       * expmed.c (do_cmp_and_jump): New function.
+       (expand_divmod): Use do_cmp_and_jmp instead of emit_cmp_insn and
+       emit_jump_insn.
+
+Sun Apr 19 07:48:37 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * c-typeck.c (build_c_cast): Check underlying type when seeing
+       if discarding const or volatile.
+
+       * c-decl.c (pushdecl): Avoid duplicate warning about implicit redecl.
+
+       * configure.in (stab.h): Check for it.
+       (i386-*-vsta): Include xm-i386.h too.
+       * dbxout.c (stab.h): Include based on autoconf results.
+       * vax/xm-vms.h (NO_STAB_H): Deleted.
+       * alpha/xm-vms.h, xm-mips.h, i386/xm-mingw32.h, i386/go32.h: Likewise.
+       * i386/xm-cygwin32.h: Likewise.
+       * i386/xm-vsta.h (NO_STAB_H): Likewise.
+       (i386/xm-i386.h): No longer include.
+
+       * mips.c: Cleanups and reformatting throughout.
+       ({expand,output}_block_move): Use HOST_WIDE_INT for sizes.
+       (mips_debugger_offset, compute_frame_size): Likewise.
+       (save_restore_insns, mips_expand_{pro,epi}logue): Likewise.
+       (siginfo): Deleted.
+       (override_options): Don't set up to call it; don't call setvbuf.
+
+Mon Apr 13 06:40:17 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * configure.in (sparc-*-vxsim*): Include xm-siglist.h and
+       define USG and POSIX.
+
+Sun Apr 12 21:59:27 1998  Jeffrey A. Law  <law@cygnus.com>
+
+       * calls.c (expand_call): Fix typo in STRICT_ARGUMENT_NAMING.
+
+Sun Apr 12 21:42:23 1998  D. Karthikeyan  <karthik@cdotd.ernet.in>
+
+       * m68k.h (TARGET_SWITCHES): Add missing comma.
+
+Sun Apr 12 21:33:33 1998  Eric Valette  <valette@crf.canon.fr>
+
+       * configure.in (i[34567]86-*-rtemself*): New configuration.
+       * i386/rtemself.h: New file.
+
+Sun Apr 12 21:08:28 1998  Jim Wilson  <wilson@cygnus.com>
+
+       * loop.c (loop_optimize): Reset max_uid_for_loop after
+       find_and_verify_loops call.
+       (strength_reduce): In auto_inc_opt code, verify v->insn has valid
+       INSN_LUID.
+
+Sun Apr 12 20:54:59 1998  Richard Earnshaw (rearnsha@arm.com)
+
+       * configure.in (sparc-*-solaris2*): Add xm-siglist.h to xm_file.
+       Add USG and POSIX to xm_defines.
+
+Sun Apr 12 20:47:37 1998  Pat Rankin  <rankin@eql.caltech.edu>
+
+       * cccp.c (eprint_string): New function.
+       (do_elif, do_else, verror): Use it instead of fwrite(,,,stderr).
+       (error_from_errno, vwarning): Likewise.
+       ({verror,vwarning,pedwarn}_with_line): Likewise.
+       (pedwarn_with_file_and_line, print_containing_files): Likewise.
+
+Sun Apr 12 20:40:44 1998  Richard Henderson  <rth@dot.cygnus.com>
+
+       * configure.in (alpha*-*-linux-gnu*): Add alpha/t-crtbe.
+       Add crt{begin,end}.o in extra_parts and delete crt{begin,end}S.o.o
+       * alpha/t-crtbe, alpha/crt{begin,end}.asm: New files.
+       
+       * alpha.h (PRINT_OPERAND_PUNCT_VALID_P): Accept '(' for s/sv/svi.
+       * alpha.c (print_operand): Handle it.
+       * alpha.md (fix_trunc[ds]fdi2): Use it.  Add earlyclobber pattern
+       for ALPHA_TP_INSN.
+
+Sun Apr 12 13:09:46 1998  Scott Christley  <scottc@net-community.com>
+
+       * objc/encoding.c (objc_sizeof_type, _C_VOID): New case.
+
+Sun Apr 12 13:04:55 1998  Nikolay Yatsenko  (nikolay@osf.org)
+
+       * configure.in (i[34567]86-*-osf1*): New entry.
+       * i386/osf1-c[in].asm: New files for OSF/1.
+       * i386/osf1elf{,gdb}.h, i386/[xt]-osf1elf, i386/xm-osf1elf.h: Likewise.
+
+Sun Apr 12 10:03:51 1998  Noel Cragg  <noel@red-bean.com>
+
+       * fixincludes: Remove specification of parameters when renaming
+       functions in Alpha DEC Unix include files.
+
+Sun Apr 12 07:33:46 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * mips.c (large_int): Use HOST_WIDE_INT, not int.
+       (print_operand): Use HOST_WIDE_INT_PRINT_* macros.
+
+       * toplev.c (main): Sort order of handling of -d letters.
+       Use `F' instead of `D' for addressof_dump.
+
+       * libgcc2.c (_eh_compat): Deleted.
+       * Makefile.in (LIB2FUNCS): Delete _eh_compat.
+
+       * configure.in (alpha*-*-linux-gnu*): Don't include alpha/xm-linux.h.
+
+       * c-common.c (check_format_info): Properly test for nested pointers.
+
+       * pa.md (casesi0): Add missing mode for operand 0.
+
+       * function.c (purge_addressof_1, case MEM): If BLKmode, put ADDRESSOF
+       into stack.
+
+       * c-parse.in (label): Give warning if pedantic and label not integral.
+
+       * c-decl.c (grokdeclarator): Don't warn about return type if in
+       system header.
+
+       * reload.c (reload_nongroup): New variable.
+       (push{_secondary,}_reload): Initialize it.
+       (find_reloads): Compute it.
+       (debug_reload): Print it.
+       * reload.h (reload_nongroup): Declare.
+       * reload1.c (reload): Use reload_nongroup instead of local computation.
+       Check caller_save_spill_class against any nongroup reloads.
+       (reloads_conflict): No longer static.
+
+Sun Apr 12 05:52:18 1998  John David Anglin  <dave@hiauly1.hia.nrc.ca>
+
+       * vax.md (call patterns): Operand 1 is always a CONST_INT.
+
+Sat Apr 11 16:01:11 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * convert.c (convert_to_{pointer,integer,real,complex}): Use switch.
+       Add missing integer-like types.
+       Simplify return of zero in error case.
+       (convert_to_pointer): Remove dubious abort.
+       (convert_to_integer, case POINTER_TYPE): Make recursive call.
+       (convert_to_integer, case COND_EXPR): Always convert arms.
+       * tree.c (type_precision): Deleted.
+
+       * cccp.c (do_warning): Give pedantic warning if -pedantic and not
+       in system file.
+       * cpplib.c (do_warning): Likewise.
+
+       * function.c (target_temp_slot_level): Define here.
+       (push_temp_slots_for_target, {get,set}_target_temp_slot_level): New.
+       * stmt.c (target_temp_slot_level): Don't define here.
+       * expr.h (temp_slot_level): New declaration.
+
+Fri Apr 10 16:35:48 1998  Paul Eggert  <eggert@twinsun.com>
+
+       * c-common.c (decl_attributes): Support strftime format checking.
+       (record_function_format, {check,init_function}_format_info): Likewise.
+       (enum format_type): New type.
+       (record_function_format): Now static; takes value of type
+       enum format_type instead of int.
+       (time_char_table): New constant.
+       (struct function_format_info): format_type member renamed from is_scan.
+       (check_format_info): Use `warning' rather than sprintf followed by
+       `warning', to avoid mishandling `%' in warnings.
+       Change a `pedwarn' to `warning'.
+       * c-tree.h (record_function_format): Remove decl.
+
+Thu Apr  2 17:34:27 1998  Manfred Hollstein  <manfred@s-direktnet.de>
+
+       * regclass.c (memory_move_secondary_cost): Protect uses of
+       SECONDARY_{INPUT,OUTPUT}_RELOAD_CLASS with #ifdef tests.
+
+Thu Apr  2 07:06:57 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * m68k.c (standard_68881_constant_p): Don't use fmovecr on 68060.
+
 Thu Apr  2 06:19:25 1998  Ken Raeburn  <raeburn@cygnus.com>
 
+       * Makefile.in (version.c): Put "cvs log" output in build directory.
+
        * reload.h (MEMORY_MOVE_COST): Define here if not already defined.
        (memory_move_secondary_cost): Declare.
        * regclass.c (MEMORY_MOVE_COST): Don't define default here.
@@ -23,13 +252,11 @@ Mon Mar 30 13:56:30 1998  Jim Wilson  <wilson@cygnus.com>
 
 Wed Mar 25 16:09:01 1998  Michael Meissner  <meissner@cygnus.com>
 
-       * rs6000.h (FUNCTION_ARG_PADDING): Cast result to be enum
-       direction.
+       * rs6000.h (FUNCTION_ARG_PADDING): Cast result to be enum direction.
        (function_arg_padding): Declare.
 
        * rs6000.c: Include stdlib.h if we have it.
-       (function_arg_padding): Change return type to int, cast enum's to
-       int.
+       (function_arg_padding): Change return type to int, cast enum's to int.
 
        (From Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>)
        * rs6000.c (rs6000_override_options): Change type of `i', `j' and
@@ -37,13 +264,12 @@ Wed Mar 25 16:09:01 1998  Michael Meissner  <meissner@cygnus.com>
        (rs6000_file_start): Likewise for `i'.
        (rs6000_replace_regno): Add default case in enumeration switch.
        (output_epilog): Remove unused variable `i'.
-       (rs6000_longcall_ref): Remove unused variables `len', `p', `reg1'
-       and `reg2'.
+       (rs6000_longcall_ref): Remove unused variables `len', `p', `reg[12]'.
  
        * rs6000.h (ADDITIONAL_REGISTER_NAMES): Add missing braces around
        initializer.
        (get_issue_rate, non_logical_cint_operand): Add prototype.
-       (rs6000_output_load_toc_table): Ditto.
+       (rs6000_output_load_toc_table): Likewise.
  
        * rs6000.md (udivmodsi4): Add explicit braces to avoid ambiguous
        `else'.
index 8857141b8bdeefcbfd35e3d017a32889da17a2f6..e5ef980123adfae9641ef05b23550f17c0bb73dd 100644 (file)
@@ -670,7 +670,7 @@ decl_attributes (node, attributes, prefix_attributes)
                         "argument format specified for non-function `%s'");
                continue;
              }
-
+       
            if (TREE_CODE (format_type_id) != IDENTIFIER_NODE)
              {
                error ("unrecognized format specifier");
@@ -679,7 +679,7 @@ decl_attributes (node, attributes, prefix_attributes)
            else
              {
                char *p = IDENTIFIER_POINTER (format_type_id);
-
+               
                if (!strcmp (p, "printf") || !strcmp (p, "__printf__"))
                  format_type = printf_format_type;
                else if (!strcmp (p, "scanf") || !strcmp (p, "__scanf__"))
@@ -1529,7 +1529,7 @@ check_format_info (info, params)
          else if (*format_chars == 'q' || *format_chars == 'L')
            {
              length_char = *format_chars++;
-             if (pedantic && length_char == 'q')
+             if (pedantic)
                warning ("ANSI C does not support the `%c' length modifier",
                         length_char);
            }
@@ -1541,13 +1541,6 @@ check_format_info (info, params)
            }
          else
            length_char = 0;
-         if (length_char == 'h' && *format_chars == 'h')
-           {
-             length_char = 'H', format_chars++;
-             /* FIXME: Is allowed in ISO C 9x.  */
-             if (pedantic)
-               warning ("ANSI C does not support the `hh' length modifier");
-           }
          if (length_char == 'l' && *format_chars == 'l')
            {
              length_char = 'q', format_chars++;
@@ -1667,10 +1660,10 @@ check_format_info (info, params)
        }
       if (info->format_type == strftime_format_type)
        continue;
-      integral_format = (format_char == 'd' || format_char == 'i'
-                        || format_char == 'o' || format_char == 'u'
-                        || format_char == 'x' || format_char == 'X');
-      if (precise && index (flag_chars, '0') != 0 && integral_format)
+      if (precise && index (flag_chars, '0') != 0
+         && (format_char == 'd' || format_char == 'i'
+             || format_char == 'o' || format_char == 'u'
+             || format_char == 'x' || format_char == 'x'))
        warning ("`0' flag ignored with precision specifier and `%c' format",
                 format_char);
       switch (length_char)
@@ -1683,8 +1676,7 @@ check_format_info (info, params)
        case 'L': wanted_type = fci->bigllen ? *(fci->bigllen) : 0; break;
        case 'Z': wanted_type = fci->zlen ? *fci->zlen : 0; break;
        }
-      if (wanted_type == 0
-         || (pedantic && length_char == 'L' && integral_format))
+      if (wanted_type == 0)
        warning ("use of `%c' length character with `%c' type character",
                 length_char, format_char);
 
@@ -1723,7 +1715,7 @@ check_format_info (info, params)
            {
              cur_type = TREE_TYPE (cur_type);
 
-             if (TREE_CODE (cur_param) == ADDR_EXPR)
+             if (cur_param != 0 && TREE_CODE (cur_param) == ADDR_EXPR)
                cur_param = TREE_OPERAND (cur_param, 0);
              else
                cur_param = 0;
index 2b4841588548c6e044d4e436433fa3746917b961..125aa01ad708c7efb51ff2b66c8a14cdbea99252 100644 (file)
@@ -2088,6 +2088,7 @@ pushdecl (x)
             DECL_SOURCE_LINE (IDENTIFIER_IMPLICIT_DECL (name)),
             "previous declaration of `%s'",
             IDENTIFIER_POINTER (name));
+         TREE_THIS_VOLATILE (name) = 1;
        }
 
       if (t != 0 && duplicate_decls (x, t, different_binding_level))
@@ -2291,8 +2292,11 @@ pushdecl (x)
              else if (TREE_CODE (x) == TYPE_DECL)
                ;
              else if (IDENTIFIER_IMPLICIT_DECL (name))
-               pedwarn ("`%s' was declared implicitly `extern' and later `static'",
-                        IDENTIFIER_POINTER (name));
+               {
+                 if (! TREE_THIS_VOLATILE (name))
+                   pedwarn ("`%s' was declared implicitly `extern' and later `static'",
+                            IDENTIFIER_POINTER (name));
+               }
              else
                pedwarn ("`%s' was declared `extern' and later `static'",
                         IDENTIFIER_POINTER (name));
@@ -4402,9 +4406,10 @@ grokdeclarator (declarator, declspecs, decl_context, initialized)
 
   if (type == 0)
     {
-      if (! (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
-                        | (1 << (int) RID_SIGNED)
-                        | (1 << (int) RID_UNSIGNED))))
+      if ((! (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
+                         | (1 << (int) RID_SIGNED)
+                         | (1 << (int) RID_UNSIGNED))))
+         && ! (in_system_header && ! allocation_temporary_p ()))
        {
          /* C9x will probably require a diagnostic here.
             For now, issue a warning if -Wreturn-type and this is a function,
index 8777295d248cefd81a57e0419e5865e1ba99cc99..2db1a04598e8fb44dc80fe222c198efbcbe62a00 100644 (file)
@@ -93,10 +93,10 @@ char *language_string = "GNU C";
 /* Cause the `yydebug' variable to be defined.  */
 #define YYDEBUG 1
 
-#line 93 "c-parse.y"
+#line 86 "c-parse.y"
 typedef union {long itype; tree ttype; enum tree_code code;
        char *filename; int lineno; int ends_in_label; } YYSTYPE;
-#line 209 "c-parse.y"
+#line 202 "c-parse.y"
 
 /* Number of statements (loosely speaking) and compound statements 
    seen so far.  */
@@ -352,46 +352,46 @@ static const short yyrhs[] = {    -1,
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   238,   243,   257,   259,   259,   260,   262,   264,   265,   273,
-   277,   288,   293,   298,   300,   302,   303,   304,   309,   316,
-   318,   323,   328,   334,   336,   341,   346,   352,   354,   359,
-   366,   368,   371,   373,   375,   377,   379,   381,   383,   387,
-   391,   394,   397,   400,   404,   406,   409,   412,   416,   444,
-   450,   453,   456,   459,   461,   465,   469,   473,   475,   478,
-   482,   509,   511,   513,   515,   517,   519,   521,   523,   525,
-   527,   529,   531,   533,   535,   539,   541,   545,   547,   550,
-   554,   556,   563,   566,   569,   575,   674,   675,   677,   683,
-   685,   699,   722,   724,   726,   730,   736,   738,   743,   745,
-   750,   752,   753,   763,   768,   770,   771,   772,   779,   785,
-   790,   793,   801,   806,   808,   809,   810,   817,   828,   832,
-   838,   843,   848,   853,   855,   857,   866,   869,   873,   875,
-   877,   882,   886,   889,   893,   896,   898,   910,   913,   915,
-   917,   921,   925,   927,   930,   943,   946,   950,   952,   960,
-   961,   962,   966,   968,   974,   975,   976,   979,   981,   984,
-   986,   989,   992,   998,  1005,  1007,  1014,  1021,  1024,  1031,
-  1034,  1038,  1041,  1045,  1050,  1053,  1057,  1060,  1062,  1064,
-  1066,  1073,  1075,  1076,  1077,  1082,  1084,  1089,  1097,  1102,
-  1106,  1109,  1111,  1116,  1119,  1121,  1123,  1127,  1130,  1130,
-  1133,  1133,  1136,  1136,  1139,  1139,  1142,  1144,  1155,  1163,
-  1167,  1178,  1186,  1193,  1195,  1200,  1203,  1208,  1210,  1212,
-  1219,  1221,  1229,  1235,  1237,  1239,  1246,  1248,  1254,  1260,
-  1262,  1264,  1266,  1273,  1275,  1278,  1283,  1285,  1289,  1291,
-  1293,  1295,  1299,  1301,  1304,  1307,  1310,  1313,  1317,  1319,
-  1322,  1324,  1328,  1331,  1336,  1338,  1340,  1354,  1361,  1366,
-  1372,  1377,  1379,  1384,  1386,  1390,  1394,  1398,  1408,  1410,
-  1415,  1420,  1423,  1427,  1430,  1434,  1437,  1440,  1443,  1447,
-  1450,  1454,  1458,  1460,  1462,  1464,  1466,  1468,  1470,  1472,
-  1482,  1490,  1492,  1494,  1498,  1500,  1503,  1506,  1517,  1519,
-  1524,  1526,  1529,  1543,  1546,  1549,  1551,  1553,  1561,  1569,
-  1580,  1585,  1588,  1602,  1611,  1615,  1619,  1623,  1629,  1633,
-  1638,  1641,  1646,  1649,  1650,  1667,  1672,  1675,  1687,  1689,
-  1699,  1709,  1710,  1718,  1721,  1733,  1737,  1754,  1764,  1773,
-  1778,  1783,  1788,  1792,  1796,  1807,  1814,  1821,  1828,  1839,
-  1845,  1848,  1853,  1876,  1910,  1935,  1966,  1981,  1992,  1996,
-  2000,  2003,  2008,  2010,  2013,  2015,  2019,  2024,  2027,  2033,
-  2038,  2043,  2045,  2054,  2055,  2061,  2063,  2073,  2075,  2079,
-  2082,  2088,  2098,  2107,  2116,  2126,  2140,  2145,  2150,  2152,
-  2161,  2164,  2169,  2172,  2176
+   231,   236,   250,   252,   252,   253,   255,   257,   258,   266,
+   270,   281,   286,   291,   293,   295,   296,   297,   302,   309,
+   311,   316,   321,   327,   329,   334,   339,   345,   347,   352,
+   359,   361,   364,   366,   368,   370,   372,   374,   376,   380,
+   384,   387,   390,   393,   397,   399,   402,   405,   409,   437,
+   443,   446,   449,   452,   454,   458,   462,   466,   468,   471,
+   475,   502,   504,   506,   508,   510,   512,   514,   516,   518,
+   520,   522,   524,   526,   528,   532,   534,   538,   540,   543,
+   547,   549,   556,   559,   562,   568,   667,   668,   670,   676,
+   678,   692,   715,   717,   719,   723,   729,   731,   736,   738,
+   743,   745,   746,   756,   761,   763,   764,   765,   772,   778,
+   783,   786,   794,   799,   801,   802,   803,   810,   821,   825,
+   831,   836,   841,   846,   848,   850,   859,   862,   866,   868,
+   870,   875,   879,   882,   886,   889,   891,   903,   906,   908,
+   910,   914,   918,   920,   923,   936,   939,   943,   945,   953,
+   954,   955,   959,   961,   967,   968,   969,   972,   974,   977,
+   979,   982,   985,   991,   998,  1000,  1007,  1014,  1017,  1024,
+  1027,  1031,  1034,  1038,  1043,  1046,  1050,  1053,  1055,  1057,
+  1059,  1066,  1068,  1069,  1070,  1075,  1077,  1082,  1090,  1095,
+  1099,  1102,  1104,  1109,  1112,  1114,  1116,  1120,  1123,  1123,
+  1126,  1126,  1129,  1129,  1132,  1132,  1135,  1137,  1148,  1156,
+  1160,  1171,  1179,  1186,  1188,  1193,  1196,  1201,  1203,  1205,
+  1212,  1214,  1222,  1228,  1230,  1232,  1239,  1241,  1247,  1253,
+  1255,  1257,  1259,  1266,  1268,  1271,  1276,  1278,  1282,  1284,
+  1286,  1288,  1292,  1294,  1297,  1300,  1303,  1306,  1310,  1312,
+  1315,  1317,  1321,  1324,  1329,  1331,  1333,  1347,  1354,  1359,
+  1365,  1370,  1372,  1377,  1379,  1383,  1387,  1391,  1401,  1403,
+  1408,  1413,  1416,  1420,  1423,  1427,  1430,  1433,  1436,  1440,
+  1443,  1447,  1451,  1453,  1455,  1457,  1459,  1461,  1463,  1465,
+  1475,  1483,  1485,  1487,  1491,  1493,  1496,  1499,  1510,  1512,
+  1517,  1519,  1522,  1536,  1539,  1542,  1544,  1546,  1554,  1562,
+  1573,  1578,  1581,  1595,  1604,  1608,  1612,  1616,  1622,  1626,
+  1631,  1634,  1639,  1642,  1643,  1660,  1665,  1668,  1680,  1682,
+  1692,  1702,  1703,  1711,  1714,  1726,  1730,  1747,  1757,  1766,
+  1771,  1776,  1781,  1785,  1789,  1800,  1807,  1814,  1821,  1832,
+  1838,  1841,  1846,  1869,  1903,  1934,  1965,  1980,  1991,  1995,
+  1999,  2002,  2007,  2009,  2012,  2014,  2018,  2023,  2026,  2032,
+  2037,  2042,  2044,  2053,  2054,  2060,  2062,  2072,  2074,  2078,
+  2081,  2087,  2097,  2106,  2115,  2125,  2139,  2144,  2149,  2151,
+  2160,  2163,  2168,  2171,  2175
 };
 #endif
 
@@ -1162,7 +1162,7 @@ static const short yycheck[] = {    40,
     48,    49,    50,    51,    52
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/cygnus/latest-940103/share/bison.simple"
+#line 3 "/usr/share/bison.simple"
 
 /* Skeleton output parser for bison,
    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
@@ -1355,7 +1355,7 @@ __yy_memcpy (char *to, char *from, int count)
 #endif
 #endif
 \f
-#line 196 "/usr/cygnus/latest-940103/share/bison.simple"
+#line 196 "/usr/share/bison.simple"
 
 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
    into yyparse.  The argument should have type void *.
@@ -1660,14 +1660,14 @@ yyreduce:
   switch (yyn) {
 
 case 1:
-#line 239 "c-parse.y"
+#line 232 "c-parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C forbids an empty source file");
                  finish_file ();
                ;
     break;}
 case 2:
-#line 244 "c-parse.y"
+#line 237 "c-parse.y"
 {
                  /* In case there were missing closebraces,
                     get us back to the global binding level.  */
@@ -1677,15 +1677,15 @@ case 2:
                ;
     break;}
 case 3:
-#line 258 "c-parse.y"
+#line 251 "c-parse.y"
 {yyval.ttype = NULL_TREE; ;
     break;}
 case 5:
-#line 259 "c-parse.y"
+#line 252 "c-parse.y"
 {yyval.ttype = NULL_TREE; ;
     break;}
 case 9:
-#line 266 "c-parse.y"
+#line 259 "c-parse.y"
 { STRIP_NOPS (yyvsp[-2].ttype);
                  if ((TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR
                       && TREE_CODE (TREE_OPERAND (yyvsp[-2].ttype, 0)) == STRING_CST)
@@ -1695,11 +1695,11 @@ case 9:
                    error ("argument of `asm' is not a constant string"); ;
     break;}
 case 10:
-#line 274 "c-parse.y"
+#line 267 "c-parse.y"
 { pedantic = yyvsp[-1].itype; ;
     break;}
 case 11:
-#line 279 "c-parse.y"
+#line 272 "c-parse.y"
 { if (pedantic)
                    error ("ANSI C forbids data definition with no type or storage class");
                  else if (!flag_traditional)
@@ -1711,45 +1711,45 @@ case 11:
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 12:
-#line 289 "c-parse.y"
+#line 282 "c-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 13:
-#line 294 "c-parse.y"
+#line 287 "c-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-2].itype);  ;
     break;}
 case 14:
-#line 299 "c-parse.y"
+#line 292 "c-parse.y"
 { pedwarn ("empty declaration"); ;
     break;}
 case 15:
-#line 301 "c-parse.y"
+#line 294 "c-parse.y"
 { shadow_tag (yyvsp[-1].ttype); ;
     break;}
 case 18:
-#line 305 "c-parse.y"
+#line 298 "c-parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C does not allow extra `;' outside of a function"); ;
     break;}
 case 19:
-#line 311 "c-parse.y"
+#line 304 "c-parse.y"
 { if (! start_function (current_declspecs, yyvsp[0].ttype,
                                        prefix_attributes, NULL_TREE, 0))
                    YYERROR1;
                  reinit_parse_for_function (); ;
     break;}
 case 20:
-#line 316 "c-parse.y"
+#line 309 "c-parse.y"
 { store_parm_decls (); ;
     break;}
 case 21:
-#line 318 "c-parse.y"
+#line 311 "c-parse.y"
 { finish_function (0); 
                  current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
@@ -1757,25 +1757,25 @@ case 21:
                  resume_momentary (yyvsp[-5].itype); ;
     break;}
 case 22:
-#line 324 "c-parse.y"
+#line 317 "c-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 23:
-#line 329 "c-parse.y"
+#line 322 "c-parse.y"
 { if (! start_function (current_declspecs, yyvsp[0].ttype,
                                        prefix_attributes, NULL_TREE, 0))
                    YYERROR1;
                  reinit_parse_for_function (); ;
     break;}
 case 24:
-#line 334 "c-parse.y"
+#line 327 "c-parse.y"
 { store_parm_decls (); ;
     break;}
 case 25:
-#line 336 "c-parse.y"
+#line 329 "c-parse.y"
 { finish_function (0); 
                  current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
@@ -1783,25 +1783,25 @@ case 25:
                  resume_momentary (yyvsp[-5].itype); ;
     break;}
 case 26:
-#line 342 "c-parse.y"
+#line 335 "c-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 27:
-#line 347 "c-parse.y"
+#line 340 "c-parse.y"
 { if (! start_function (NULL_TREE, yyvsp[0].ttype,
                                        prefix_attributes, NULL_TREE, 0))
                    YYERROR1;
                  reinit_parse_for_function (); ;
     break;}
 case 28:
-#line 352 "c-parse.y"
+#line 345 "c-parse.y"
 { store_parm_decls (); ;
     break;}
 case 29:
-#line 354 "c-parse.y"
+#line 347 "c-parse.y"
 { finish_function (0); 
                  current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
@@ -1809,72 +1809,72 @@ case 29:
                  resume_momentary (yyvsp[-5].itype); ;
     break;}
 case 30:
-#line 360 "c-parse.y"
+#line 353 "c-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 33:
-#line 372 "c-parse.y"
+#line 365 "c-parse.y"
 { yyval.code = ADDR_EXPR; ;
     break;}
 case 34:
-#line 374 "c-parse.y"
+#line 367 "c-parse.y"
 { yyval.code = NEGATE_EXPR; ;
     break;}
 case 35:
-#line 376 "c-parse.y"
+#line 369 "c-parse.y"
 { yyval.code = CONVERT_EXPR; ;
     break;}
 case 36:
-#line 378 "c-parse.y"
+#line 371 "c-parse.y"
 { yyval.code = PREINCREMENT_EXPR; ;
     break;}
 case 37:
-#line 380 "c-parse.y"
+#line 373 "c-parse.y"
 { yyval.code = PREDECREMENT_EXPR; ;
     break;}
 case 38:
-#line 382 "c-parse.y"
+#line 375 "c-parse.y"
 { yyval.code = BIT_NOT_EXPR; ;
     break;}
 case 39:
-#line 384 "c-parse.y"
+#line 377 "c-parse.y"
 { yyval.code = TRUTH_NOT_EXPR; ;
     break;}
 case 40:
-#line 388 "c-parse.y"
+#line 381 "c-parse.y"
 { yyval.ttype = build_compound_expr (yyvsp[0].ttype); ;
     break;}
 case 41:
-#line 393 "c-parse.y"
+#line 386 "c-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 43:
-#line 399 "c-parse.y"
+#line 392 "c-parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 44:
-#line 401 "c-parse.y"
+#line 394 "c-parse.y"
 { chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
 case 46:
-#line 407 "c-parse.y"
+#line 400 "c-parse.y"
 { yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); ;
     break;}
 case 47:
-#line 410 "c-parse.y"
+#line 403 "c-parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  pedantic = yyvsp[-1].itype; ;
     break;}
 case 48:
-#line 413 "c-parse.y"
+#line 406 "c-parse.y"
 { yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0);
                  overflow_warning (yyval.ttype); ;
     break;}
 case 49:
-#line 417 "c-parse.y"
+#line 410 "c-parse.y"
 { tree label = lookup_label (yyvsp[0].ttype);
                  if (pedantic)
                    pedwarn ("ANSI C forbids `&&'");
@@ -1889,7 +1889,7 @@ case 49:
                ;
     break;}
 case 50:
-#line 445 "c-parse.y"
+#line 438 "c-parse.y"
 { skip_evaluation--;
                  if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF
                      && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[0].ttype, 1)))
@@ -1897,49 +1897,49 @@ case 50:
                  yyval.ttype = c_sizeof (TREE_TYPE (yyvsp[0].ttype)); ;
     break;}
 case 51:
-#line 451 "c-parse.y"
+#line 444 "c-parse.y"
 { skip_evaluation--;
                  yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ttype)); ;
     break;}
 case 52:
-#line 454 "c-parse.y"
+#line 447 "c-parse.y"
 { skip_evaluation--;
                  yyval.ttype = c_alignof_expr (yyvsp[0].ttype); ;
     break;}
 case 53:
-#line 457 "c-parse.y"
+#line 450 "c-parse.y"
 { skip_evaluation--;
                  yyval.ttype = c_alignof (groktypename (yyvsp[-1].ttype)); ;
     break;}
 case 54:
-#line 460 "c-parse.y"
+#line 453 "c-parse.y"
 { yyval.ttype = build_unary_op (REALPART_EXPR, yyvsp[0].ttype, 0); ;
     break;}
 case 55:
-#line 462 "c-parse.y"
+#line 455 "c-parse.y"
 { yyval.ttype = build_unary_op (IMAGPART_EXPR, yyvsp[0].ttype, 0); ;
     break;}
 case 56:
-#line 466 "c-parse.y"
+#line 459 "c-parse.y"
 { skip_evaluation++; ;
     break;}
 case 57:
-#line 470 "c-parse.y"
+#line 463 "c-parse.y"
 { skip_evaluation++; ;
     break;}
 case 59:
-#line 476 "c-parse.y"
+#line 469 "c-parse.y"
 { tree type = groktypename (yyvsp[-2].ttype);
                  yyval.ttype = build_c_cast (type, yyvsp[0].ttype); ;
     break;}
 case 60:
-#line 479 "c-parse.y"
+#line 472 "c-parse.y"
 { start_init (NULL_TREE, NULL, 0);
                  yyvsp[-2].ttype = groktypename (yyvsp[-2].ttype);
                  really_start_incremental_init (yyvsp[-2].ttype); ;
     break;}
 case 61:
-#line 483 "c-parse.y"
+#line 476 "c-parse.y"
 { char *name;
                  tree result = pop_init_level (0);
                  tree type = yyvsp[-5].ttype;
@@ -1966,90 +1966,90 @@ case 61:
                ;
     break;}
 case 63:
-#line 512 "c-parse.y"
+#line 505 "c-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 64:
-#line 514 "c-parse.y"
+#line 507 "c-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 65:
-#line 516 "c-parse.y"
+#line 509 "c-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 66:
-#line 518 "c-parse.y"
+#line 511 "c-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 67:
-#line 520 "c-parse.y"
+#line 513 "c-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 68:
-#line 522 "c-parse.y"
+#line 515 "c-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 69:
-#line 524 "c-parse.y"
+#line 517 "c-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 70:
-#line 526 "c-parse.y"
+#line 519 "c-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 71:
-#line 528 "c-parse.y"
+#line 521 "c-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 72:
-#line 530 "c-parse.y"
+#line 523 "c-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 73:
-#line 532 "c-parse.y"
+#line 525 "c-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 74:
-#line 534 "c-parse.y"
+#line 527 "c-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 75:
-#line 536 "c-parse.y"
+#line 529 "c-parse.y"
 { yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
                  skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;
     break;}
 case 76:
-#line 539 "c-parse.y"
+#line 532 "c-parse.y"
 { skip_evaluation -= yyvsp[-3].ttype == boolean_false_node;
                  yyval.ttype = parser_build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
     break;}
 case 77:
-#line 542 "c-parse.y"
+#line 535 "c-parse.y"
 { yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
                  skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;
     break;}
 case 78:
-#line 545 "c-parse.y"
+#line 538 "c-parse.y"
 { skip_evaluation -= yyvsp[-3].ttype == boolean_true_node;
                  yyval.ttype = parser_build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
     break;}
 case 79:
-#line 548 "c-parse.y"
+#line 541 "c-parse.y"
 { yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
                  skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;
     break;}
 case 80:
-#line 551 "c-parse.y"
+#line 544 "c-parse.y"
 { skip_evaluation += ((yyvsp[-4].ttype == boolean_true_node)
                                      - (yyvsp[-4].ttype == boolean_false_node)); ;
     break;}
 case 81:
-#line 554 "c-parse.y"
+#line 547 "c-parse.y"
 { skip_evaluation -= yyvsp[-6].ttype == boolean_true_node;
                  yyval.ttype = build_conditional_expr (yyvsp[-6].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
     break;}
 case 82:
-#line 557 "c-parse.y"
+#line 550 "c-parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C forbids omitting the middle term of a ?: expression");
                  /* Make sure first operand is calculated only once.  */
@@ -2058,23 +2058,23 @@ case 82:
                  skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;
     break;}
 case 83:
-#line 564 "c-parse.y"
+#line 557 "c-parse.y"
 { skip_evaluation -= yyvsp[-4].ttype == boolean_true_node;
                  yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
     break;}
 case 84:
-#line 567 "c-parse.y"
+#line 560 "c-parse.y"
 { yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype);
                  C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR); ;
     break;}
 case 85:
-#line 570 "c-parse.y"
+#line 563 "c-parse.y"
 { yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype);
                  /* This inhibits warnings in truthvalue_conversion.  */
                  C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK); ;
     break;}
 case 86:
-#line 577 "c-parse.y"
+#line 570 "c-parse.y"
 {
                  yyval.ttype = lastiddecl;
                  if (!yyval.ttype || yyval.ttype == error_mark_node)
@@ -2174,11 +2174,11 @@ case 86:
                ;
     break;}
 case 88:
-#line 676 "c-parse.y"
+#line 669 "c-parse.y"
 { yyval.ttype = combine_strings (yyvsp[0].ttype); ;
     break;}
 case 89:
-#line 678 "c-parse.y"
+#line 671 "c-parse.y"
 { char class = TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype));
                  if (class == 'e' || class == '1'
                      || class == '2' || class == '<')
@@ -2186,11 +2186,11 @@ case 89:
                  yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 90:
-#line 684 "c-parse.y"
+#line 677 "c-parse.y"
 { yyval.ttype = error_mark_node; ;
     break;}
 case 91:
-#line 686 "c-parse.y"
+#line 679 "c-parse.y"
 { if (current_function_decl == 0)
                    {
                      error ("braced-group within expression allowed only inside a function");
@@ -2206,7 +2206,7 @@ case 91:
                  yyval.ttype = expand_start_stmt_expr (); ;
     break;}
 case 92:
-#line 700 "c-parse.y"
+#line 693 "c-parse.y"
 { tree rtl_exp;
                  if (pedantic)
                    pedwarn ("ANSI C forbids braced-groups within expressions");
@@ -2231,21 +2231,21 @@ case 92:
                ;
     break;}
 case 93:
-#line 723 "c-parse.y"
+#line 716 "c-parse.y"
 { yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 94:
-#line 725 "c-parse.y"
+#line 718 "c-parse.y"
 { yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 95:
-#line 727 "c-parse.y"
+#line 720 "c-parse.y"
 {
                    yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 96:
-#line 731 "c-parse.y"
+#line 724 "c-parse.y"
 {
                   tree expr = build_indirect_ref (yyvsp[-2].ttype, "->");
 
@@ -2253,56 +2253,56 @@ case 96:
                ;
     break;}
 case 97:
-#line 737 "c-parse.y"
+#line 730 "c-parse.y"
 { yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ;
     break;}
 case 98:
-#line 739 "c-parse.y"
+#line 732 "c-parse.y"
 { yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ;
     break;}
 case 100:
-#line 746 "c-parse.y"
+#line 739 "c-parse.y"
 { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 103:
-#line 755 "c-parse.y"
+#line 748 "c-parse.y"
 { c_mark_varargs ();
                  if (pedantic)
                    pedwarn ("ANSI C does not permit use of `varargs.h'"); ;
     break;}
 case 104:
-#line 765 "c-parse.y"
+#line 758 "c-parse.y"
 { ;
     break;}
 case 109:
-#line 781 "c-parse.y"
+#line 774 "c-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 110:
-#line 786 "c-parse.y"
+#line 779 "c-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);     
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 111:
-#line 791 "c-parse.y"
+#line 784 "c-parse.y"
 { shadow_tag_warned (yyvsp[-1].ttype, 1);
                  pedwarn ("empty declaration"); ;
     break;}
 case 112:
-#line 794 "c-parse.y"
+#line 787 "c-parse.y"
 { pedwarn ("empty declaration"); ;
     break;}
 case 113:
-#line 803 "c-parse.y"
+#line 796 "c-parse.y"
 { ;
     break;}
 case 118:
-#line 818 "c-parse.y"
+#line 811 "c-parse.y"
 { yyval.itype = suspend_momentary ();
                  pending_xref_error ();
                  declspec_stack = tree_cons (prefix_attributes,
@@ -2312,131 +2312,131 @@ case 118:
                                     &current_declspecs, &prefix_attributes); ;
     break;}
 case 119:
-#line 829 "c-parse.y"
+#line 822 "c-parse.y"
 { prefix_attributes = chainon (prefix_attributes, yyvsp[0].ttype); ;
     break;}
 case 120:
-#line 834 "c-parse.y"
+#line 827 "c-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 121:
-#line 839 "c-parse.y"
+#line 832 "c-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 122:
-#line 844 "c-parse.y"
+#line 837 "c-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-1].itype); ;
     break;}
 case 123:
-#line 849 "c-parse.y"
+#line 842 "c-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-1].itype); ;
     break;}
 case 124:
-#line 854 "c-parse.y"
+#line 847 "c-parse.y"
 { shadow_tag (yyvsp[-1].ttype); ;
     break;}
 case 125:
-#line 856 "c-parse.y"
+#line 849 "c-parse.y"
 { pedwarn ("empty declaration"); ;
     break;}
 case 126:
-#line 858 "c-parse.y"
+#line 851 "c-parse.y"
 { pedantic = yyvsp[-1].itype; ;
     break;}
 case 127:
-#line 868 "c-parse.y"
+#line 861 "c-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 128:
-#line 870 "c-parse.y"
+#line 863 "c-parse.y"
 { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
     break;}
 case 129:
-#line 874 "c-parse.y"
+#line 867 "c-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 130:
-#line 876 "c-parse.y"
+#line 869 "c-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 131:
-#line 878 "c-parse.y"
+#line 871 "c-parse.y"
 { if (extra_warnings)
                    warning ("`%s' is not at beginning of declaration",
                             IDENTIFIER_POINTER (yyvsp[0].ttype));
                  yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 132:
-#line 883 "c-parse.y"
+#line 876 "c-parse.y"
 { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
 case 133:
-#line 888 "c-parse.y"
+#line 881 "c-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 134:
-#line 890 "c-parse.y"
+#line 883 "c-parse.y"
 { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
     break;}
 case 135:
-#line 895 "c-parse.y"
+#line 888 "c-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 136:
-#line 897 "c-parse.y"
+#line 890 "c-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 137:
-#line 899 "c-parse.y"
+#line 892 "c-parse.y"
 { if (extra_warnings)
                    warning ("`%s' is not at beginning of declaration",
                             IDENTIFIER_POINTER (yyvsp[0].ttype));
                  yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 138:
-#line 912 "c-parse.y"
+#line 905 "c-parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 139:
-#line 914 "c-parse.y"
+#line 907 "c-parse.y"
 { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ;
     break;}
 case 140:
-#line 916 "c-parse.y"
+#line 909 "c-parse.y"
 { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 141:
-#line 918 "c-parse.y"
+#line 911 "c-parse.y"
 { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
 case 142:
-#line 923 "c-parse.y"
+#line 916 "c-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
                  TREE_STATIC (yyval.ttype) = 1; ;
     break;}
 case 143:
-#line 926 "c-parse.y"
+#line 919 "c-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 144:
-#line 928 "c-parse.y"
+#line 921 "c-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
                  TREE_STATIC (yyval.ttype) = 1; ;
     break;}
 case 145:
-#line 931 "c-parse.y"
+#line 924 "c-parse.y"
 { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
                    warning ("`%s' is not at beginning of declaration",
                             IDENTIFIER_POINTER (yyvsp[0].ttype));
@@ -2444,138 +2444,138 @@ case 145:
                  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
     break;}
 case 146:
-#line 945 "c-parse.y"
+#line 938 "c-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 147:
-#line 947 "c-parse.y"
+#line 940 "c-parse.y"
 { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
     break;}
 case 148:
-#line 951 "c-parse.y"
+#line 944 "c-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 149:
-#line 953 "c-parse.y"
+#line 946 "c-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 152:
-#line 963 "c-parse.y"
+#line 956 "c-parse.y"
 { /* For a typedef name, record the meaning, not the name.
                     In case of `foo foo, bar;'.  */
                  yyval.ttype = lookup_name (yyvsp[0].ttype); ;
     break;}
 case 153:
-#line 967 "c-parse.y"
+#line 960 "c-parse.y"
 { yyval.ttype = TREE_TYPE (yyvsp[-1].ttype); ;
     break;}
 case 154:
-#line 969 "c-parse.y"
+#line 962 "c-parse.y"
 { yyval.ttype = groktypename (yyvsp[-1].ttype); ;
     break;}
 case 162:
-#line 991 "c-parse.y"
+#line 984 "c-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 163:
-#line 993 "c-parse.y"
+#line 986 "c-parse.y"
 { if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype);
                  yyval.ttype = yyvsp[-1].ttype;
                ;
     break;}
 case 164:
-#line 1000 "c-parse.y"
+#line 993 "c-parse.y"
 { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
                                          yyvsp[-1].ttype, prefix_attributes);
                  start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
     break;}
 case 165:
-#line 1005 "c-parse.y"
+#line 998 "c-parse.y"
 { finish_init ();
                  finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
     break;}
 case 166:
-#line 1008 "c-parse.y"
+#line 1001 "c-parse.y"
 { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
                                       yyvsp[0].ttype, prefix_attributes);
                  finish_decl (d, NULL_TREE, yyvsp[-1].ttype); 
                 ;
     break;}
 case 167:
-#line 1016 "c-parse.y"
+#line 1009 "c-parse.y"
 { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
                                          yyvsp[-1].ttype, prefix_attributes);
                  start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
     break;}
 case 168:
-#line 1021 "c-parse.y"
+#line 1014 "c-parse.y"
 { finish_init ();
                  decl_attributes (yyvsp[-1].ttype, yyvsp[-3].ttype, prefix_attributes);
                  finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
     break;}
 case 169:
-#line 1025 "c-parse.y"
+#line 1018 "c-parse.y"
 { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
                                       yyvsp[0].ttype, prefix_attributes);
                  finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
 case 170:
-#line 1033 "c-parse.y"
+#line 1026 "c-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 171:
-#line 1035 "c-parse.y"
+#line 1028 "c-parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 172:
-#line 1040 "c-parse.y"
+#line 1033 "c-parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 173:
-#line 1042 "c-parse.y"
+#line 1035 "c-parse.y"
 { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 174:
-#line 1047 "c-parse.y"
+#line 1040 "c-parse.y"
 { yyval.ttype = yyvsp[-2].ttype; ;
     break;}
 case 175:
-#line 1052 "c-parse.y"
+#line 1045 "c-parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 176:
-#line 1054 "c-parse.y"
+#line 1047 "c-parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 177:
-#line 1059 "c-parse.y"
+#line 1052 "c-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 178:
-#line 1061 "c-parse.y"
+#line 1054 "c-parse.y"
 { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 179:
-#line 1063 "c-parse.y"
+#line 1056 "c-parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;
     break;}
 case 180:
-#line 1065 "c-parse.y"
+#line 1058 "c-parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ;
     break;}
 case 181:
-#line 1067 "c-parse.y"
+#line 1060 "c-parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 187:
-#line 1085 "c-parse.y"
+#line 1078 "c-parse.y"
 { really_start_incremental_init (NULL_TREE);
                  /* Note that the call to clear_momentary
                     is in process_init_element.  */
                  push_momentary (); ;
     break;}
 case 188:
-#line 1090 "c-parse.y"
+#line 1083 "c-parse.y"
 { yyval.ttype = pop_init_level (0);
                  if (yyval.ttype == error_mark_node
                      && ! (yychar == STRING || yychar == CONSTANT))
@@ -2584,48 +2584,48 @@ case 188:
                    pop_momentary_nofree (); ;
     break;}
 case 189:
-#line 1098 "c-parse.y"
+#line 1091 "c-parse.y"
 { yyval.ttype = error_mark_node; ;
     break;}
 case 190:
-#line 1104 "c-parse.y"
+#line 1097 "c-parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C forbids empty initializer braces"); ;
     break;}
 case 194:
-#line 1118 "c-parse.y"
+#line 1111 "c-parse.y"
 { process_init_element (yyvsp[0].ttype); ;
     break;}
 case 195:
-#line 1120 "c-parse.y"
+#line 1113 "c-parse.y"
 { push_init_level (0); ;
     break;}
 case 196:
-#line 1122 "c-parse.y"
+#line 1115 "c-parse.y"
 { process_init_element (pop_init_level (0)); ;
     break;}
 case 198:
-#line 1128 "c-parse.y"
+#line 1121 "c-parse.y"
 { set_init_index (yyvsp[-4].ttype, yyvsp[-2].ttype); ;
     break;}
 case 200:
-#line 1131 "c-parse.y"
+#line 1124 "c-parse.y"
 { set_init_index (yyvsp[-2].ttype, NULL_TREE); ;
     break;}
 case 202:
-#line 1134 "c-parse.y"
+#line 1127 "c-parse.y"
 { set_init_index (yyvsp[-1].ttype, NULL_TREE); ;
     break;}
 case 204:
-#line 1137 "c-parse.y"
+#line 1130 "c-parse.y"
 { set_init_label (yyvsp[-1].ttype); ;
     break;}
 case 206:
-#line 1140 "c-parse.y"
+#line 1133 "c-parse.y"
 { set_init_label (yyvsp[-1].ttype); ;
     break;}
 case 208:
-#line 1146 "c-parse.y"
+#line 1139 "c-parse.y"
 { push_c_function_context ();
                  if (! start_function (current_declspecs, yyvsp[0].ttype,
                                        prefix_attributes, NULL_TREE, 1))
@@ -2636,16 +2636,16 @@ case 208:
                  reinit_parse_for_function (); ;
     break;}
 case 209:
-#line 1155 "c-parse.y"
+#line 1148 "c-parse.y"
 { store_parm_decls (); ;
     break;}
 case 210:
-#line 1163 "c-parse.y"
+#line 1156 "c-parse.y"
 { finish_function (1);
                  pop_c_function_context (); ;
     break;}
 case 211:
-#line 1169 "c-parse.y"
+#line 1162 "c-parse.y"
 { push_c_function_context ();
                  if (! start_function (current_declspecs, yyvsp[0].ttype,
                                        prefix_attributes, NULL_TREE, 1))
@@ -2656,172 +2656,172 @@ case 211:
                  reinit_parse_for_function (); ;
     break;}
 case 212:
-#line 1178 "c-parse.y"
+#line 1171 "c-parse.y"
 { store_parm_decls (); ;
     break;}
 case 213:
-#line 1186 "c-parse.y"
+#line 1179 "c-parse.y"
 { finish_function (1);
                  pop_c_function_context (); ;
     break;}
 case 216:
-#line 1202 "c-parse.y"
+#line 1195 "c-parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 217:
-#line 1204 "c-parse.y"
+#line 1197 "c-parse.y"
 { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 218:
-#line 1209 "c-parse.y"
+#line 1202 "c-parse.y"
 { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 219:
-#line 1211 "c-parse.y"
+#line 1204 "c-parse.y"
 { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
     break;}
 case 220:
-#line 1213 "c-parse.y"
+#line 1206 "c-parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 221:
-#line 1220 "c-parse.y"
+#line 1213 "c-parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 223:
-#line 1231 "c-parse.y"
+#line 1224 "c-parse.y"
 { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 224:
-#line 1236 "c-parse.y"
+#line 1229 "c-parse.y"
 { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 225:
-#line 1238 "c-parse.y"
+#line 1231 "c-parse.y"
 { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
     break;}
 case 226:
-#line 1240 "c-parse.y"
+#line 1233 "c-parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 227:
-#line 1247 "c-parse.y"
+#line 1240 "c-parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 229:
-#line 1256 "c-parse.y"
+#line 1249 "c-parse.y"
 { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 230:
-#line 1261 "c-parse.y"
+#line 1254 "c-parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 231:
-#line 1263 "c-parse.y"
+#line 1256 "c-parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 232:
-#line 1265 "c-parse.y"
+#line 1258 "c-parse.y"
 { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 233:
-#line 1267 "c-parse.y"
+#line 1260 "c-parse.y"
 { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
     break;}
 case 234:
-#line 1274 "c-parse.y"
+#line 1267 "c-parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 236:
-#line 1280 "c-parse.y"
+#line 1273 "c-parse.y"
 { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
                  /* Start scope of tag before parsing components.  */
                ;
     break;}
 case 237:
-#line 1284 "c-parse.y"
+#line 1277 "c-parse.y"
 { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 238:
-#line 1286 "c-parse.y"
+#line 1279 "c-parse.y"
 { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
                                      yyvsp[-2].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 239:
-#line 1290 "c-parse.y"
+#line 1283 "c-parse.y"
 { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
     break;}
 case 240:
-#line 1292 "c-parse.y"
+#line 1285 "c-parse.y"
 { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
     break;}
 case 241:
-#line 1294 "c-parse.y"
+#line 1287 "c-parse.y"
 { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 242:
-#line 1296 "c-parse.y"
+#line 1289 "c-parse.y"
 { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
                                      yyvsp[-2].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 243:
-#line 1300 "c-parse.y"
+#line 1293 "c-parse.y"
 { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
     break;}
 case 244:
-#line 1302 "c-parse.y"
+#line 1295 "c-parse.y"
 { yyvsp[0].itype = suspend_momentary ();
                  yyval.ttype = start_enum (yyvsp[-1].ttype); ;
     break;}
 case 245:
-#line 1305 "c-parse.y"
+#line 1298 "c-parse.y"
 { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), yyvsp[0].ttype);
                  resume_momentary (yyvsp[-5].itype); ;
     break;}
 case 246:
-#line 1308 "c-parse.y"
+#line 1301 "c-parse.y"
 { yyvsp[0].itype = suspend_momentary ();
                  yyval.ttype = start_enum (NULL_TREE); ;
     break;}
 case 247:
-#line 1311 "c-parse.y"
+#line 1304 "c-parse.y"
 { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), yyvsp[0].ttype);
                  resume_momentary (yyvsp[-5].itype); ;
     break;}
 case 248:
-#line 1314 "c-parse.y"
+#line 1307 "c-parse.y"
 { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); ;
     break;}
 case 252:
-#line 1325 "c-parse.y"
+#line 1318 "c-parse.y"
 { if (pedantic) pedwarn ("comma at end of enumerator list"); ;
     break;}
 case 253:
-#line 1330 "c-parse.y"
+#line 1323 "c-parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 254:
-#line 1332 "c-parse.y"
+#line 1325 "c-parse.y"
 { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
                  pedwarn ("no semicolon at end of struct or union"); ;
     break;}
 case 255:
-#line 1337 "c-parse.y"
+#line 1330 "c-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 256:
-#line 1339 "c-parse.y"
+#line 1332 "c-parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
     break;}
 case 257:
-#line 1341 "c-parse.y"
+#line 1334 "c-parse.y"
 { if (pedantic)
                    pedwarn ("extra semicolon in struct or union specified"); ;
     break;}
 case 258:
-#line 1356 "c-parse.y"
+#line 1349 "c-parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
@@ -2829,14 +2829,14 @@ case 258:
                  resume_momentary (yyvsp[-1].itype); ;
     break;}
 case 259:
-#line 1362 "c-parse.y"
+#line 1355 "c-parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C forbids member declarations with no members");
                  shadow_tag(yyvsp[0].ttype);
                  yyval.ttype = NULL_TREE; ;
     break;}
 case 260:
-#line 1367 "c-parse.y"
+#line 1360 "c-parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
@@ -2844,140 +2844,140 @@ case 260:
                  resume_momentary (yyvsp[-1].itype); ;
     break;}
 case 261:
-#line 1373 "c-parse.y"
+#line 1366 "c-parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C forbids member declarations with no members");
                  shadow_tag(yyvsp[0].ttype);
                  yyval.ttype = NULL_TREE; ;
     break;}
 case 262:
-#line 1378 "c-parse.y"
+#line 1371 "c-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 263:
-#line 1380 "c-parse.y"
+#line 1373 "c-parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  pedantic = yyvsp[-1].itype; ;
     break;}
 case 265:
-#line 1387 "c-parse.y"
+#line 1380 "c-parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 266:
-#line 1392 "c-parse.y"
+#line 1385 "c-parse.y"
 { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE);
                  decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
 case 267:
-#line 1396 "c-parse.y"
+#line 1389 "c-parse.y"
 { yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
                  decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
 case 268:
-#line 1399 "c-parse.y"
+#line 1392 "c-parse.y"
 { yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype);
                  decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
 case 270:
-#line 1411 "c-parse.y"
+#line 1404 "c-parse.y"
 { if (yyvsp[-2].ttype == error_mark_node)
                    yyval.ttype = yyvsp[-2].ttype;
                  else
                    yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ;
     break;}
 case 271:
-#line 1416 "c-parse.y"
+#line 1409 "c-parse.y"
 { yyval.ttype = error_mark_node; ;
     break;}
 case 272:
-#line 1422 "c-parse.y"
+#line 1415 "c-parse.y"
 { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 273:
-#line 1424 "c-parse.y"
+#line 1417 "c-parse.y"
 { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 274:
-#line 1429 "c-parse.y"
+#line 1422 "c-parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 275:
-#line 1431 "c-parse.y"
+#line 1424 "c-parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 276:
-#line 1436 "c-parse.y"
+#line 1429 "c-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 278:
-#line 1442 "c-parse.y"
+#line 1435 "c-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 279:
-#line 1444 "c-parse.y"
+#line 1437 "c-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 280:
-#line 1449 "c-parse.y"
+#line 1442 "c-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 281:
-#line 1451 "c-parse.y"
+#line 1444 "c-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 282:
-#line 1456 "c-parse.y"
+#line 1449 "c-parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 283:
-#line 1459 "c-parse.y"
+#line 1452 "c-parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 284:
-#line 1461 "c-parse.y"
+#line 1454 "c-parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 285:
-#line 1463 "c-parse.y"
+#line 1456 "c-parse.y"
 { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 286:
-#line 1465 "c-parse.y"
+#line 1458 "c-parse.y"
 { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 287:
-#line 1467 "c-parse.y"
+#line 1460 "c-parse.y"
 { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
     break;}
 case 288:
-#line 1469 "c-parse.y"
+#line 1462 "c-parse.y"
 { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 289:
-#line 1471 "c-parse.y"
+#line 1464 "c-parse.y"
 { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
 case 290:
-#line 1473 "c-parse.y"
+#line 1466 "c-parse.y"
 { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ;
     break;}
 case 291:
-#line 1484 "c-parse.y"
+#line 1477 "c-parse.y"
 {
                  if (pedantic && yyvsp[0].ends_in_label)
                    pedwarn ("ANSI C forbids label at end of compound statement");
                ;
     break;}
 case 293:
-#line 1493 "c-parse.y"
+#line 1486 "c-parse.y"
 { yyval.ends_in_label = yyvsp[0].ends_in_label; ;
     break;}
 case 294:
-#line 1495 "c-parse.y"
+#line 1488 "c-parse.y"
 { yyval.ends_in_label = 0; ;
     break;}
 case 298:
-#line 1507 "c-parse.y"
+#line 1500 "c-parse.y"
 { emit_line_note (input_filename, lineno);
                  pushlevel (0);
                  clear_last_expr ();
@@ -2986,12 +2986,12 @@ case 298:
                ;
     break;}
 case 300:
-#line 1520 "c-parse.y"
+#line 1513 "c-parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C forbids label declarations"); ;
     break;}
 case 303:
-#line 1531 "c-parse.y"
+#line 1524 "c-parse.y"
 { tree link;
                  for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
                    {
@@ -3002,19 +3002,19 @@ case 303:
                ;
     break;}
 case 304:
-#line 1545 "c-parse.y"
+#line 1538 "c-parse.y"
 {;
     break;}
 case 306:
-#line 1549 "c-parse.y"
+#line 1542 "c-parse.y"
 { compstmt_count++; ;
     break;}
 case 307:
-#line 1552 "c-parse.y"
+#line 1545 "c-parse.y"
 { yyval.ttype = convert (void_type_node, integer_zero_node); ;
     break;}
 case 308:
-#line 1554 "c-parse.y"
+#line 1547 "c-parse.y"
 { emit_line_note (input_filename, lineno);
                  expand_end_bindings (getdecls (), 1, 0);
                  yyval.ttype = poplevel (1, 1, 0);
@@ -3024,7 +3024,7 @@ case 308:
                    pop_momentary (); ;
     break;}
 case 309:
-#line 1562 "c-parse.y"
+#line 1555 "c-parse.y"
 { emit_line_note (input_filename, lineno);
                  expand_end_bindings (getdecls (), kept_level_p (), 0);
                  yyval.ttype = poplevel (kept_level_p (), 0, 0);
@@ -3034,7 +3034,7 @@ case 309:
                    pop_momentary (); ;
     break;}
 case 310:
-#line 1570 "c-parse.y"
+#line 1563 "c-parse.y"
 { emit_line_note (input_filename, lineno);
                  expand_end_bindings (getdecls (), kept_level_p (), 0);
                  yyval.ttype = poplevel (kept_level_p (), 0, 0);
@@ -3044,7 +3044,7 @@ case 310:
                    pop_momentary (); ;
     break;}
 case 313:
-#line 1590 "c-parse.y"
+#line 1583 "c-parse.y"
 { emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
                  c_expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), 0, 
                                       compstmt_count);
@@ -3054,7 +3054,7 @@ case 313:
                  position_after_white_space (); ;
     break;}
 case 314:
-#line 1604 "c-parse.y"
+#line 1597 "c-parse.y"
 { stmt_count++;
                  compstmt_count++;
                  emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
@@ -3064,43 +3064,43 @@ case 314:
                  position_after_white_space (); ;
     break;}
 case 315:
-#line 1612 "c-parse.y"
+#line 1605 "c-parse.y"
 { expand_loop_continue_here (); ;
     break;}
 case 316:
-#line 1616 "c-parse.y"
+#line 1609 "c-parse.y"
 { yyval.filename = input_filename; ;
     break;}
 case 317:
-#line 1620 "c-parse.y"
+#line 1613 "c-parse.y"
 { yyval.lineno = lineno; ;
     break;}
 case 318:
-#line 1625 "c-parse.y"
+#line 1618 "c-parse.y"
 { ;
     break;}
 case 319:
-#line 1630 "c-parse.y"
+#line 1623 "c-parse.y"
 { ;
     break;}
 case 320:
-#line 1635 "c-parse.y"
+#line 1628 "c-parse.y"
 { yyval.ends_in_label = yyvsp[0].ends_in_label; ;
     break;}
 case 321:
-#line 1640 "c-parse.y"
+#line 1633 "c-parse.y"
 { yyval.ends_in_label = 0; ;
     break;}
 case 322:
-#line 1642 "c-parse.y"
+#line 1635 "c-parse.y"
 { yyval.ends_in_label = 1; ;
     break;}
 case 323:
-#line 1648 "c-parse.y"
+#line 1641 "c-parse.y"
 { stmt_count++; ;
     break;}
 case 325:
-#line 1651 "c-parse.y"
+#line 1644 "c-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
 /* It appears that this should not be done--that a non-lvalue array
@@ -3119,19 +3119,19 @@ case 325:
                  clear_momentary (); ;
     break;}
 case 326:
-#line 1668 "c-parse.y"
+#line 1661 "c-parse.y"
 { c_expand_start_else ();
                  yyvsp[-1].itype = stmt_count;
                  position_after_white_space (); ;
     break;}
 case 327:
-#line 1672 "c-parse.y"
+#line 1665 "c-parse.y"
 { c_expand_end_cond ();
                  if (extra_warnings && stmt_count == yyvsp[-3].itype)
                    warning ("empty body in an else-statement"); ;
     break;}
 case 328:
-#line 1676 "c-parse.y"
+#line 1669 "c-parse.y"
 { c_expand_end_cond ();
                  /* This warning is here instead of in simple_if, because we
                     do not want a warning if an empty if is followed by an
@@ -3142,11 +3142,11 @@ case 328:
                                                "empty body in an if-statement"); ;
     break;}
 case 329:
-#line 1688 "c-parse.y"
+#line 1681 "c-parse.y"
 { c_expand_end_cond (); ;
     break;}
 case 330:
-#line 1690 "c-parse.y"
+#line 1683 "c-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
                  /* The emit_nop used to come before emit_line_note,
@@ -3158,7 +3158,7 @@ case 330:
                  emit_nop (); ;
     break;}
 case 331:
-#line 1700 "c-parse.y"
+#line 1693 "c-parse.y"
 { /* Don't start the loop till we have succeeded
                     in parsing the end test.  This is to make sure
                     that we end every loop we start.  */
@@ -3169,11 +3169,11 @@ case 331:
                  position_after_white_space (); ;
     break;}
 case 332:
-#line 1709 "c-parse.y"
+#line 1702 "c-parse.y"
 { expand_end_loop (); ;
     break;}
 case 333:
-#line 1712 "c-parse.y"
+#line 1705 "c-parse.y"
 { emit_line_note (input_filename, lineno);
                  expand_exit_loop_if_false (NULL_PTR,
                                             truthvalue_conversion (yyvsp[-2].ttype));
@@ -3181,12 +3181,12 @@ case 333:
                  clear_momentary (); ;
     break;}
 case 334:
-#line 1719 "c-parse.y"
+#line 1712 "c-parse.y"
 { expand_end_loop ();
                  clear_momentary (); ;
     break;}
 case 335:
-#line 1723 "c-parse.y"
+#line 1716 "c-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
                  /* See comment in `while' alternative, above.  */
@@ -3199,12 +3199,12 @@ case 335:
                ;
     break;}
 case 336:
-#line 1735 "c-parse.y"
+#line 1728 "c-parse.y"
 { yyvsp[0].lineno = lineno;
                  yyval.filename = input_filename; ;
     break;}
 case 337:
-#line 1738 "c-parse.y"
+#line 1731 "c-parse.y"
 { 
                  /* Start the loop.  Doing this after parsing
                     all the expressions ensures we will end the loop.  */
@@ -3222,7 +3222,7 @@ case 337:
                  position_after_white_space (); ;
     break;}
 case 338:
-#line 1754 "c-parse.y"
+#line 1747 "c-parse.y"
 { /* Emit the increment expression, with a line number.  */
                  emit_line_note (yyvsp[-4].filename, yyvsp[-5].lineno);
                  expand_loop_continue_here ();
@@ -3235,7 +3235,7 @@ case 338:
                  expand_end_loop (); ;
     break;}
 case 339:
-#line 1765 "c-parse.y"
+#line 1758 "c-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
                  c_expand_start_case (yyvsp[-1].ttype);
@@ -3245,7 +3245,7 @@ case 339:
                  position_after_white_space (); ;
     break;}
 case 340:
-#line 1773 "c-parse.y"
+#line 1766 "c-parse.y"
 { expand_end_case (yyvsp[-3].ttype);
                  if (yychar == CONSTANT || yychar == STRING)
                    pop_momentary_nofree ();
@@ -3253,33 +3253,33 @@ case 340:
                    pop_momentary (); ;
     break;}
 case 341:
-#line 1779 "c-parse.y"
+#line 1772 "c-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
                  if ( ! expand_exit_something ())
                    error ("break statement not within loop or switch"); ;
     break;}
 case 342:
-#line 1784 "c-parse.y"
+#line 1777 "c-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
                  if (! expand_continue_loop (NULL_PTR))
                    error ("continue statement not within a loop"); ;
     break;}
 case 343:
-#line 1789 "c-parse.y"
+#line 1782 "c-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
                  c_expand_return (NULL_TREE); ;
     break;}
 case 344:
-#line 1793 "c-parse.y"
+#line 1786 "c-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
                  c_expand_return (yyvsp[-1].ttype); ;
     break;}
 case 345:
-#line 1797 "c-parse.y"
+#line 1790 "c-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-7].filename, yyvsp[-6].lineno);
                  STRIP_NOPS (yyvsp[-2].ttype);
@@ -3291,7 +3291,7 @@ case 345:
                    error ("argument of `asm' is not a constant string"); ;
     break;}
 case 346:
-#line 1808 "c-parse.y"
+#line 1801 "c-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-9].filename, yyvsp[-8].lineno);
                  c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
@@ -3299,7 +3299,7 @@ case 346:
                                         input_filename, lineno); ;
     break;}
 case 347:
-#line 1815 "c-parse.y"
+#line 1808 "c-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-11].filename, yyvsp[-10].lineno);
                  c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
@@ -3307,7 +3307,7 @@ case 347:
                                         input_filename, lineno); ;
     break;}
 case 348:
-#line 1823 "c-parse.y"
+#line 1816 "c-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-13].filename, yyvsp[-12].lineno);
                  c_expand_asm_operands (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype,
@@ -3315,7 +3315,7 @@ case 348:
                                         input_filename, lineno); ;
     break;}
 case 349:
-#line 1829 "c-parse.y"
+#line 1822 "c-parse.y"
 { tree decl;
                  stmt_count++;
                  emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
@@ -3328,7 +3328,7 @@ case 349:
                ;
     break;}
 case 350:
-#line 1840 "c-parse.y"
+#line 1833 "c-parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C forbids `goto *expr;'");
                  stmt_count++;
@@ -3336,7 +3336,7 @@ case 350:
                  expand_computed_goto (convert (ptr_type_node, yyvsp[-1].ttype)); ;
     break;}
 case 353:
-#line 1855 "c-parse.y"
+#line 1848 "c-parse.y"
 {
            /* The value returned by this action is  */
            /*      1 if everything is OK */ 
@@ -3359,14 +3359,14 @@ case 353:
          ;
     break;}
 case 354:
-#line 1876 "c-parse.y"
+#line 1869 "c-parse.y"
 {
            if (yyvsp[-1].itype)
              iterator_for_loop_end (yyvsp[-3].ttype);
          ;
     break;}
 case 355:
-#line 1911 "c-parse.y"
+#line 1904 "c-parse.y"
 { register tree value = check_case_value (yyvsp[-1].ttype);
                  register tree label
                    = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
@@ -3376,8 +3376,14 @@ case 355:
                  if (value != error_mark_node)
                    {
                      tree duplicate;
-                     int success = pushcase (value, convert_and_check,
-                                             label, &duplicate);
+                     int success;
+
+                     if (pedantic && ! INTEGRAL_TYPE_P (TREE_TYPE (value)))
+                       pedwarn ("label must have integral type in ANSI C");
+
+                     success = pushcase (value, convert_and_check,
+                                         label, &duplicate);
+
                      if (success == 1)
                        error ("case label not within a switch statement");
                      else if (success == 2)
@@ -3393,7 +3399,7 @@ case 355:
                  position_after_white_space (); ;
     break;}
 case 356:
-#line 1936 "c-parse.y"
+#line 1935 "c-parse.y"
 { register tree value1 = check_case_value (yyvsp[-3].ttype);
                  register tree value2 = check_case_value (yyvsp[-1].ttype);
                  register tree label
@@ -3426,7 +3432,7 @@ case 356:
                  position_after_white_space (); ;
     break;}
 case 357:
-#line 1967 "c-parse.y"
+#line 1966 "c-parse.y"
 {
                  tree duplicate;
                  register tree label
@@ -3443,7 +3449,7 @@ case 357:
                  position_after_white_space (); ;
     break;}
 case 358:
-#line 1982 "c-parse.y"
+#line 1981 "c-parse.y"
 { tree label = define_label (input_filename, lineno, yyvsp[-1].ttype);
                  stmt_count++;
                  emit_nop ();
@@ -3452,52 +3458,52 @@ case 358:
                  position_after_white_space (); ;
     break;}
 case 359:
-#line 1994 "c-parse.y"
+#line 1993 "c-parse.y"
 { emit_line_note (input_filename, lineno);
                  yyval.ttype = NULL_TREE; ;
     break;}
 case 360:
-#line 1997 "c-parse.y"
+#line 1996 "c-parse.y"
 { emit_line_note (input_filename, lineno); ;
     break;}
 case 361:
-#line 2002 "c-parse.y"
+#line 2001 "c-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 363:
-#line 2009 "c-parse.y"
+#line 2008 "c-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 366:
-#line 2016 "c-parse.y"
+#line 2015 "c-parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 367:
-#line 2021 "c-parse.y"
+#line 2020 "c-parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 368:
-#line 2026 "c-parse.y"
+#line 2025 "c-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ;
     break;}
 case 369:
-#line 2028 "c-parse.y"
+#line 2027 "c-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ;
     break;}
 case 370:
-#line 2034 "c-parse.y"
+#line 2033 "c-parse.y"
 { pushlevel (0);
                  clear_parm_order ();
                  declare_parm_level (0); ;
     break;}
 case 371:
-#line 2038 "c-parse.y"
+#line 2037 "c-parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  parmlist_tags_warning ();
                  poplevel (0, 0, 0); ;
     break;}
 case 373:
-#line 2046 "c-parse.y"
+#line 2045 "c-parse.y"
 { tree parm;
                  if (pedantic)
                    pedwarn ("ANSI C forbids forward parameter declarations");
@@ -3507,19 +3513,19 @@ case 373:
                  clear_parm_order (); ;
     break;}
 case 374:
-#line 2054 "c-parse.y"
+#line 2053 "c-parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 375:
-#line 2056 "c-parse.y"
+#line 2055 "c-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
     break;}
 case 376:
-#line 2062 "c-parse.y"
+#line 2061 "c-parse.y"
 { yyval.ttype = get_parm_info (0); ;
     break;}
 case 377:
-#line 2064 "c-parse.y"
+#line 2063 "c-parse.y"
 { yyval.ttype = get_parm_info (0);
                  /* Gcc used to allow this as an extension.  However, it does
                     not work for all targets, and thus has been disabled.
@@ -3531,23 +3537,23 @@ case 377:
                ;
     break;}
 case 378:
-#line 2074 "c-parse.y"
+#line 2073 "c-parse.y"
 { yyval.ttype = get_parm_info (1); ;
     break;}
 case 379:
-#line 2076 "c-parse.y"
+#line 2075 "c-parse.y"
 { yyval.ttype = get_parm_info (0); ;
     break;}
 case 380:
-#line 2081 "c-parse.y"
+#line 2080 "c-parse.y"
 { push_parm_decl (yyvsp[0].ttype); ;
     break;}
 case 381:
-#line 2083 "c-parse.y"
+#line 2082 "c-parse.y"
 { push_parm_decl (yyvsp[0].ttype); ;
     break;}
 case 382:
-#line 2090 "c-parse.y"
+#line 2089 "c-parse.y"
 { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
                                                         yyvsp[-1].ttype),
                                        build_tree_list (prefix_attributes,
@@ -3558,7 +3564,7 @@ case 382:
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 383:
-#line 2099 "c-parse.y"
+#line 2098 "c-parse.y"
 { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
                                                         yyvsp[-1].ttype),
                                        build_tree_list (prefix_attributes,
@@ -3569,7 +3575,7 @@ case 383:
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 384:
-#line 2108 "c-parse.y"
+#line 2107 "c-parse.y"
 { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
                                                         yyvsp[-1].ttype),
                                        build_tree_list (prefix_attributes,
@@ -3580,7 +3586,7 @@ case 384:
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 385:
-#line 2117 "c-parse.y"
+#line 2116 "c-parse.y"
 { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
                                                         yyvsp[-1].ttype),
                                        build_tree_list (prefix_attributes,
@@ -3591,7 +3597,7 @@ case 385:
                  resume_momentary (yyvsp[-2].itype);  ;
     break;}
 case 386:
-#line 2127 "c-parse.y"
+#line 2126 "c-parse.y"
 { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
                                                         yyvsp[-1].ttype),
                                        build_tree_list (prefix_attributes,
@@ -3602,19 +3608,19 @@ case 386:
                  resume_momentary (yyvsp[-2].itype);  ;
     break;}
 case 387:
-#line 2141 "c-parse.y"
+#line 2140 "c-parse.y"
 { pushlevel (0);
                  clear_parm_order ();
                  declare_parm_level (1); ;
     break;}
 case 388:
-#line 2145 "c-parse.y"
+#line 2144 "c-parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  parmlist_tags_warning ();
                  poplevel (0, 0, 0); ;
     break;}
 case 390:
-#line 2153 "c-parse.y"
+#line 2152 "c-parse.y"
 { tree t;
                  for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t))
                    if (TREE_VALUE (t) == NULL_TREE)
@@ -3622,29 +3628,29 @@ case 390:
                  yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
 case 391:
-#line 2163 "c-parse.y"
+#line 2162 "c-parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 392:
-#line 2165 "c-parse.y"
+#line 2164 "c-parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
 case 393:
-#line 2171 "c-parse.y"
+#line 2170 "c-parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 394:
-#line 2173 "c-parse.y"
+#line 2172 "c-parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
 case 395:
-#line 2178 "c-parse.y"
+#line 2177 "c-parse.y"
 { yyval.itype = pedantic;
                  pedantic = 0; ;
     break;}
 }
    /* the action file gets copied in in place of this dollarsign */
-#line 498 "/usr/cygnus/latest-940103/share/bison.simple"
+#line 498 "/usr/share/bison.simple"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -3840,5 +3846,5 @@ yyerrhandle:
   yystate = yyn;
   goto yynewstate;
 }
-#line 2182 "c-parse.y"
+#line 2181 "c-parse.y"
 
index fbfa994cd6e7491afb89037e5c5d120f813b6af6..b3b4dc2a97567f27f8a9eda4b2d20d98b519203a 100644 (file)
@@ -2101,8 +2101,14 @@ label:     CASE expr_no_commas ':'
                  if (value != error_mark_node)
                    {
                      tree duplicate;
-                     int success = pushcase (value, convert_and_check,
-                                             label, &duplicate);
+                     int success;
+
+                     if (pedantic && ! INTEGRAL_TYPE_P (TREE_TYPE (value)))
+                       pedwarn ("label must have integral type in ANSI C");
+
+                     success = pushcase (value, convert_and_check,
+                                         label, &duplicate);
+
                      if (success == 1)
                        error ("case label not within a switch statement");
                      else if (success == 2)
index aba326d02b962fcd174585e45d1a253aa18659fd..4f0b1afe97cb76e135638d342204c6ccdba4ec92 100644 (file)
@@ -1910,8 +1910,14 @@ label:     CASE expr_no_commas ':'
                  if (value != error_mark_node)
                    {
                      tree duplicate;
-                     int success = pushcase (value, convert_and_check,
-                                             label, &duplicate);
+                     int success;
+
+                     if (pedantic && ! INTEGRAL_TYPE_P (TREE_TYPE (value)))
+                       pedwarn ("label must have integral type in ANSI C");
+
+                     success = pushcase (value, convert_and_check,
+                                         label, &duplicate);
+
                      if (success == 1)
                        error ("case label not within a switch statement");
                      else if (success == 2)
index 2dc4693d14192cb5ac04584a360e4af4ce981394..69e8e929f72493335fb8fdd9e29b1bf96bdbaf6a 100644 (file)
@@ -3770,11 +3770,18 @@ build_c_cast (type, expr)
          && TREE_CODE (type) == POINTER_TYPE
          && TREE_CODE (otype) == POINTER_TYPE)
        {
-         if (TYPE_VOLATILE (TREE_TYPE (otype))
-             && ! TYPE_VOLATILE (TREE_TYPE (type)))
+         /* Go to the innermost object being pointed to.  */
+         tree in_type = type;
+         tree in_otype = otype;
+
+         while (TREE_CODE (in_type) == POINTER_TYPE)
+           in_type = TREE_TYPE (in_type);
+         while (TREE_CODE (in_otype) == POINTER_TYPE)
+           in_otype = TREE_TYPE (in_otype);
+           
+         if (TYPE_VOLATILE (in_otype) && ! TYPE_VOLATILE (in_type))
            pedwarn ("cast discards `volatile' from pointer target type");
-         if (TYPE_READONLY (TREE_TYPE (otype))
-             && ! TYPE_READONLY (TREE_TYPE (type)))
+         if (TYPE_READONLY (in_otype) && ! TYPE_READONLY (in_type))
            pedwarn ("cast discards `const' from pointer target type");
        }
 
index ebb42fbf0bcf1367b6b486c76680b0293261e6ac..ed4d5c6495acd8dce589baec4206be5c92818f1b 100644 (file)
@@ -933,6 +933,7 @@ static int ignore_srcdir;
 \f
 static int safe_read PROTO((int, char *, int));
 static void safe_write PROTO((int, char *, int));
+static void eprint_string PROTO((char *, size_t));
 
 int main PROTO((int, char **));
 
@@ -1146,6 +1147,34 @@ safe_write (desc, ptr, len)
     len -= written;
   }
 }
+
+/* Print a string to stderr, with extra handling in case it contains
+   embedded NUL characters.  Any present are written as is.
+
+   Using fwrite for this purpose produces undesireable results on VMS
+   when stderr happens to be a record oriented file, such as a batch log
+   file, rather than a stream oriented one.  */
+
+static void
+eprint_string (string, length)
+     char *string;
+     size_t length;
+{
+  size_t segment_length;
+
+  do {
+    fprintf(stderr, "%s", string);
+    length -= (segment_length = strlen(string));
+    if (length > 0)
+      {
+       fputc('\0', stderr);
+       length -= 1;
+       /* Advance past the portion which has already been printed.  */
+       string += segment_length + 1;
+      }
+  } while (length > 0);
+}
+
 \f
 int
 main (argc, argv)
@@ -6804,6 +6833,10 @@ do_warning (buf, limit, op, keyword)
   bcopy ((char *) buf, (char *) copy, length);
   copy[length] = 0;
   SKIP_WHITE_SPACE (copy);
+
+  if (pedantic && !instack[indepth].system_header_p)
+    pedwarn ("ANSI C does not allow `#warning'");
+
   /* Use `pedwarn' not `warning', because #warning isn't in the C Standard;
      if -pedantic-errors is given, #warning should cause an error.  */
   pedwarn ("#warning %s", copy);
@@ -6990,8 +7023,7 @@ do_elif (buf, limit, op, keyword)
             && !bcmp (if_stack->fname, ip->nominal_fname,
                       if_stack->fname_len))) {
        fprintf (stderr, ", file ");
-       fwrite (if_stack->fname, sizeof if_stack->fname[0],
-               if_stack->fname_len, stderr);
+       eprint_string (if_stack->fname, if_stack->fname_len);
       }
       fprintf (stderr, ")\n");
     }
@@ -7533,8 +7565,7 @@ do_else (buf, limit, op, keyword)
             && !bcmp (if_stack->fname, ip->nominal_fname,
                       if_stack->fname_len))) {
        fprintf (stderr, ", file ");
-       fwrite (if_stack->fname, sizeof if_stack->fname[0],
-               if_stack->fname_len, stderr);
+       eprint_string (if_stack->fname, if_stack->fname_len);
       }
       fprintf (stderr, ")\n");
     }
@@ -8879,8 +8910,7 @@ verror (msg, args)
     }
 
   if (ip != NULL) {
-    fwrite (ip->nominal_fname, sizeof ip->nominal_fname[0],
-           ip->nominal_fname_len, stderr);
+    eprint_string (ip->nominal_fname, ip->nominal_fname_len);
     fprintf (stderr, ":%d: ", ip->lineno);
   }
   vfprintf (stderr, msg, args);
@@ -8907,8 +8937,7 @@ error_from_errno (name)
     }
 
   if (ip != NULL) {
-    fwrite (ip->nominal_fname, sizeof ip->nominal_fname[0],
-           ip->nominal_fname_len, stderr);
+    eprint_string (ip->nominal_fname, ip->nominal_fname_len);
     fprintf (stderr, ":%d: ", ip->lineno);
   }
 
@@ -8953,8 +8982,7 @@ vwarning (msg, args)
     }
 
   if (ip != NULL) {
-    fwrite (ip->nominal_fname, sizeof ip->nominal_fname[0],
-           ip->nominal_fname_len, stderr);
+    eprint_string (ip->nominal_fname, ip->nominal_fname_len);
     fprintf (stderr, ":%d: ", ip->lineno);
   }
   fprintf (stderr, "warning: ");
@@ -8996,8 +9024,7 @@ verror_with_line (line, msg, args)
     }
 
   if (ip != NULL) {
-    fwrite (ip->nominal_fname, sizeof ip->nominal_fname[0],
-           ip->nominal_fname_len, stderr);
+    eprint_string (ip->nominal_fname, ip->nominal_fname_len);
     fprintf (stderr, ":%d: ", line);
   }
   vfprintf (stderr, msg, args);
@@ -9045,8 +9072,7 @@ vwarning_with_line (line, msg, args)
     }
 
   if (ip != NULL) {
-    fwrite (ip->nominal_fname, sizeof ip->nominal_fname[0],
-           ip->nominal_fname_len, stderr);
+    eprint_string (ip->nominal_fname, ip->nominal_fname_len);
     fprintf (stderr, line ? ":%d: " : ": ", line);
   }
   fprintf (stderr, "warning: ");
@@ -9109,7 +9135,7 @@ pedwarn_with_file_and_line (file, file_len, line, PRINTF_ALIST (msg))
   if (!pedantic_errors && inhibit_warnings)
     return;
   if (file) {
-    fwrite (file, sizeof file[0], file_len, stderr);
+    eprint_string (file, file_len);
     fprintf (stderr, ":%d: ", line);
   }
   if (pedantic_errors)
@@ -9159,8 +9185,7 @@ print_containing_files ()
       }
 
       fprintf (stderr, " from ");
-      fwrite (ip->nominal_fname, sizeof ip->nominal_fname[0],
-             ip->nominal_fname_len, stderr);
+      eprint_string (ip->nominal_fname, ip->nominal_fname_len);
       fprintf (stderr, ":%d", ip->lineno);
     }
   if (! first)
index bf2d02f0bb68c904f9e6cb1f428bd448fa4c495f..06879ebe492296e01ad226c088982eb8eb502f2e 100644 (file)
 /* Define if you have the rindex function.  */
 #undef HAVE_RINDEX
 
-/* Define if you have the strchr function.  */
-#undef HAVE_STRCHR
-
 /* Define if you have the setrlimit function.  */
 #undef HAVE_SETRLIMIT
 
+/* Define if you have the strchr function.  */
+#undef HAVE_STRCHR
+
 /* Define if you have the strerror function.  */
 #undef HAVE_STRERROR
 
 /* Define if you have the <limits.h> header file.  */
 #undef HAVE_LIMITS_H
 
+/* Define if you have the <stab.h> header file.  */
+#undef HAVE_STAB_H
+
 /* Define if you have the <stddef.h> header file.  */
 #undef HAVE_STDDEF_H
 
index 6c5e9e3dfcabb5b4a97927f4a1eebd0d3bb80139..e49f6943e5d7ed414f736f2cc4a2877d07453cda 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions of target machine for GNU compiler.
-   Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
    Contributed by O.M.Kellogg, DASA (oliver.kellogg@space.otn.dasa.de)
 
 This file is part of GNU CC.
index d65beb4ff2812bf9ee4ac6e20083d12ddf4d7430..c3e61747b42fe3d2073f9e6e49c4ffdfb91c7df5 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions of target machine for GNU compiler, for AMD Am29000 CPU.
-   Copyright (C) 1988, 90-96, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1988, 90-97, 1998 Free Software Foundation, Inc.
    Contributed by Richard Kenner (kenner@nyu.edu)
 
 This file is part of GNU CC.
index 5e5a4422bcdd09c09398c78330147808c08a5194..472a225672be5839d8eb0e34749e87d1a5222258 100644 (file)
@@ -71,7 +71,6 @@ Boston, MA 02111-1307, USA.  */
 #define HAVE_ATOLL
 
 #define NO_SYS_PARAMS_H                /* Don't have <sys/params.h> */
-#define NO_STAB_H              /* Don't have <stab.h> */
 #define USE_C_ALLOCA           /* Using alloca.c */
 
 #define HAVE_FCNTL_H 1
index c4696ea5542b0f4fb21c05d20d77a4ddf131d27f..0ddc91afb8919052e6daea0ef11ff360b040baf1 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions of target machine for GNU compiler, Argonaut ARC cpu.
-   Copyright (C) 1994, 1995, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1994, 1995, 1997, 1998 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
index 61e6bf873efd11c55ccb84c7fef5da7b62bee40d..ee4b140ba2f5e28fe5265bb0e5ac790db16ddb0b 100644 (file)
@@ -1556,7 +1556,7 @@ extern struct dsp16xx_frame_info current_frame_info;
 
 /* A C expression for the cost of moving data of mode MODE between
    a register and memory. A value of 2 is the default. */
-#define MEMORY_MOVE_COST(MODE,CLASS,IN_P)                        \
+#define MEMORY_MOVE_COST(MODE,CLASS,IN)                          \
   (GET_MODE_CLASS(MODE) == MODE_INT && MODE == QImode ? 12       \
    : 16)
 
index 73ca40cc50118058bfbcb27b84da5b05ce375a0d..b1b8ab802d03ca7b662b2dce0bf1c5f40247e8ab 100644 (file)
@@ -1,5 +1,5 @@
 /* Subroutines for insn-output.c for Intel X86.
-   Copyright (C) 1988, 92, 94-97, 1998 Free Software Foundation, Inc.
+   Copyright (C) 1988, 92, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -3876,7 +3876,10 @@ output_387_binary_op (insn, operands)
        }
 
       if (find_regno_note (insn, REG_DEAD, REGNO (operands[2])))
-       return strcat (buf, AS2 (p,%2,%0));
+       if (STACK_TOP_P (operands[0]))
+         return strcat (buf, AS2 (p,%0,%2));
+       else
+         return strcat (buf, AS2 (p,%2,%0));
 
       if (STACK_TOP_P (operands[0]))
        return strcat (buf, AS2C (%y2,%0));
@@ -3907,10 +3910,16 @@ output_387_binary_op (insn, operands)
        abort ();
 
       if (find_regno_note (insn, REG_DEAD, REGNO (operands[2])))
-       return strcat (buf, AS2 (rp,%2,%0));
+       if (STACK_TOP_P (operands[0]))
+         return strcat (buf, AS2 (p,%0,%2));
+       else
+         return strcat (buf, AS2 (rp,%2,%0));
 
       if (find_regno_note (insn, REG_DEAD, REGNO (operands[1])))
-       return strcat (buf, AS2 (p,%1,%0));
+       if (STACK_TOP_P (operands[0]))
+         return strcat (buf, AS2 (rp,%0,%1));
+       else
+         return strcat (buf, AS2 (p,%1,%0));
 
       if (STACK_TOP_P (operands[0]))
        {
index be64ddc88dc0c300f491f0a2636663fd37a2472d..521a65309912189217cc445c18064035b5191121 100644 (file)
@@ -19,7 +19,6 @@ along with GNU CC; see the file COPYING.  If not, write to
 the Free Software Foundation, 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA. */
 
-#define NO_STAB_H
 #define EXECUTABLE_SUFFIX ".exe"
 #define NO_SYS_SIGLIST 1
 #define HAVE_BCOPY 1
index 38c9b6d06b061e26986d6012507c15bd796a321d..d818142d9e52da40c75a1894befe7ac1071bb0d2 100644 (file)
@@ -19,8 +19,6 @@ along with GNU CC; see the file COPYING.  If not, write to
 the Free Software Foundation, 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA. */
 
-#define NO_STAB_H
-
 #ifndef USG
 #define USG 1
 #endif
index 199f386433e392b2a22a510264be470c9b833090..e5dfc20ebe326c848fda5aeb7e9f894fe4f23cfe 100644 (file)
@@ -1286,7 +1286,7 @@ do {                                      \
 /* Compute the cost of moving data between registers and memory.  */
 /* Memory is 3 times as expensive as registers.
    ??? Is that the right way to look at it?  */
-#define MEMORY_MOVE_COST(MODE,CLASS,IN_P) \
+#define MEMORY_MOVE_COST(MODE,CLASS,IN) \
 (GET_MODE_SIZE (MODE) <= UNITS_PER_WORD ? 6 : 12)
 
 /* The cost of a branch insn.  */
index 567ccdf94d6375e7acff2beb73095e0292ffd943..164cf6bc223569573247efca662f390d199426a0 100644 (file)
@@ -1,5 +1,5 @@
 /* Subroutines for insn-output.c for Motorola 68000 family.
-   Copyright (C) 1987, 93-97, 1998 Free Software Foundation, Inc.
+   Copyright (C) 1987, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -2194,11 +2194,9 @@ notice_update_cc (exp, insn)
        }
       else if (ADDRESS_REG_P (SET_DEST (exp)))
        {
-         if (cc_status.value1
-             && reg_overlap_mentioned_p (SET_DEST (exp), cc_status.value1))
+         if (cc_status.value1 && modified_in_p (cc_status.value1, insn))
            cc_status.value1 = 0;
-         if (cc_status.value2
-             && reg_overlap_mentioned_p (SET_DEST (exp), cc_status.value2))
+         if (cc_status.value2 && modified_in_p (cc_status.value2, insn))
            cc_status.value2 = 0; 
        }
       else if (!FP_REG_P (SET_DEST (exp))
@@ -2415,7 +2413,7 @@ standard_68881_constant_p (x)
 #endif
 
   /* fmovecr must be emulated on the 68040 and 68060, so it shouldn't be
-     used at all. */
+     used at all on those chips. */
   if (TARGET_68040 || TARGET_68060)
     return 0;
 
index fb64de6067d27a70a984051982700b29a41493bf..623e3ce197912a6eb2dbda8b69c09233147b344e 100644 (file)
@@ -150,7 +150,7 @@ extern int target_flags;
     { "sky", -(MASK_FPA|MASK_68040_ONLY|MASK_68881)},                  \
     { "sky", MASK_SKY},                                                        \
     { "nosky", - MASK_SKY},                                            \
-    { "68881" - (MASK_FPA|MASK_SKY)},                                  \
+    { "68881", - (MASK_FPA|MASK_SKY)},                                 \
     { "68881", MASK_68881},                                            \
     { "soft-float", - (MASK_FPA|MASK_SKY|MASK_68040_ONLY|MASK_68881)}, \
     { "68020-40", -(MASK_5200|MASK_68060)},                            \
index f0dac24a0dd7398bdbdfed0a0c8cdf4c617da82a..a687641e4b79eca2c6230ba4be5ffff6a382f9a5 100644 (file)
@@ -1,6 +1,6 @@
 /* Definitions of target machine for GNU compiler for
    Motorola m88100 in an 88open OCS/BCS environment.
-   Copyright (C) 1988, 92, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
+   Copyright (C) 1988, 92-97, 1998 Free Software Foundation, Inc.
    Contributed by Michael Tiemann (tiemann@cygnus.com).
    Currently maintained by (gcc@dg-rtp.dg.com)
 
index 2899d6d057d46005652db63af0513ff6ba45d89a..89c214c72021e8a44a7d226197e5aeb0b66eadc1 100644 (file)
@@ -145,7 +145,8 @@ FILE *asm_out_text_file;
    for the global pointer if they haven't been declared by the end of
    the program with an appropriate .comm or initialization.  */
 
-struct extern_list {
+struct extern_list
+{
   struct extern_list *next;    /* next external */
   char *name;                  /* name of the external */
   int size;                    /* size in bytes */
@@ -435,7 +436,7 @@ uns_arith_operand (op, mode)
      enum machine_mode mode;
 {
   if (GET_CODE (op) == CONST_INT && SMALL_INT_UNSIGNED (op))
-    return TRUE;
+    return 1;
 
   return register_operand (op, mode);
 }
@@ -449,7 +450,7 @@ arith_operand (op, mode)
      enum machine_mode mode;
 {
   if (GET_CODE (op) == CONST_INT && SMALL_INT (op))
-    return TRUE;
+    return 1;
 
   /* On the mips16, a GP relative value is a signed 16 bit offset.  */
   if (TARGET_MIPS16 && GET_CODE (op) == CONST && mips16_gp_offset_p (op))
@@ -467,7 +468,7 @@ arith32_operand (op, mode)
      enum machine_mode mode;
 {
   if (GET_CODE (op) == CONST_INT)
-    return TRUE;
+    return 1;
 
   return register_operand (op, mode);
 }
@@ -493,19 +494,23 @@ large_int (op, mode)
   HOST_WIDE_INT value;
 
   if (GET_CODE (op) != CONST_INT)
-    return FALSE;
+    return 0;
 
   value = INTVAL (op);
-  if ((value & ~0x0000ffff) == 0)                      /* ior reg,$r0,value */
-    return FALSE;
 
-  if (((unsigned long)(value + 32768)) <= 32767)       /* subu reg,$r0,value */
-    return FALSE;
+  /* ior reg,$r0,value */
+  if ((value & ~ ((HOST_WIDE_INT) 0x0000ffff)) == 0)
+    return 0;
 
-  if ((value & 0x0000ffff) == 0)                       /* lui reg,value>>16 */
-    return FALSE;
+  /* subu reg,$r0,value */
+  if (((unsigned HOST_WIDE_INT) (value + 32768)) <= 32767)
+    return 0;
 
-  return TRUE;
+  /* lui reg,value>>16 */
+  if ((value & 0x0000ffff) == 0)
+    return 0;
+
+  return 1;
 }
 
 /* Return truth value of whether OP is a register or the constant 0.
@@ -519,26 +524,25 @@ reg_or_0_operand (op, mode)
 {
   switch (GET_CODE (op))
     {
-    default:
-      break;
-
     case CONST_INT:
       if (TARGET_MIPS16)
-       return FALSE;
-      return (INTVAL (op) == 0);
+       return 0;
+      return INTVAL (op) == 0;
 
     case CONST_DOUBLE:
-      if (TARGET_MIPS16 || op != CONST0_RTX (mode))
-       return FALSE;
-
-      return TRUE;
+      if (TARGET_MIPS16)
+       return 0;
+      return op == CONST0_RTX (mode);
 
     case REG:
     case SUBREG:
       return register_operand (op, mode);
+
+    default:
+      break;
     }
 
-  return FALSE;
+  return 0;
 }
 
 /* Return truth value if a CONST_DOUBLE is ok to be a legitimate constant.  */
@@ -551,20 +555,20 @@ mips_const_double_ok (op, mode)
   REAL_VALUE_TYPE d;
 
   if (GET_CODE (op) != CONST_DOUBLE)
-    return FALSE;
+    return 0;
 
   if (mode == VOIDmode)
-    return TRUE;
+    return 1;
 
   if (mode != SFmode && mode != DFmode)
-    return FALSE;
+    return 0;
 
   if (op == CONST0_RTX (mode))
-    return TRUE;
+    return 1;
 
   /* ??? li.s does not work right with SGI's Irix 6 assembler.  */
   if (mips_abi != ABI_32 && mips_abi != ABI_EABI)
-    return FALSE;
+    return 0;
 
   REAL_VALUE_FROM_CONST_DOUBLE (d, op);
 
@@ -578,16 +582,16 @@ mips_const_double_ok (op, mode)
     {
       if (REAL_VALUES_LESS (d, dfhigh)
          && REAL_VALUES_LESS (dflow, d))
-       return TRUE;
+       return 1;
     }
   else
     {
       if (REAL_VALUES_LESS (d, sfhigh)
          && REAL_VALUES_LESS (sflow, d))
-       return TRUE;
+       return 1;
     }
 
-  return FALSE;
+  return 0;
 }
 
 /* Accept the floating point constant 1 in the appropriate mode.  */
@@ -605,7 +609,7 @@ const_float_1_operand (op, mode)
   if (GET_CODE (op) != CONST_DOUBLE
       || mode != GET_MODE (op)
       || (mode != DFmode && mode != SFmode))
-    return FALSE;
+    return 0;
 
   REAL_VALUE_FROM_CONST_DOUBLE (d, op);
 
@@ -615,7 +619,7 @@ const_float_1_operand (op, mode)
     {
       onedf = REAL_VALUE_ATOF ("1.0", DFmode);
       onesf = REAL_VALUE_ATOF ("1.0", SFmode);
-      one_initialized = TRUE;
+      one_initialized = 1;
     }
 
   if (mode == DFmode)
@@ -638,22 +642,22 @@ mips16_simple_memory_operand (reg, offset, mode)
   if (mode == BLKmode)
     {
       /* We can't tell, because we don't know how the value will
-         eventually be accessed.  Returning FALSE here does no great
+         eventually be accessed.  Returning 0 here does no great
          harm; it just prevents some possible instruction scheduling.  */
-      return FALSE;
+      return 0;
     }
 
   size = GET_MODE_SIZE (mode);
 
   if (INTVAL (offset) % size != 0)
-    return FALSE;
+    return 0;
   if (REGNO (reg) == STACK_POINTER_REGNUM && GET_MODE_SIZE (mode) == 4)
     off = 0x100;
   else
     off = 0x20;
   if (INTVAL (offset) >= 0 && INTVAL (offset) < off * size)
-    return TRUE;
-  return FALSE;
+    return 1;
+  return 0;
 }
 
 /* Return truth value if a memory operand fits in a single instruction
@@ -668,50 +672,45 @@ simple_memory_operand (op, mode)
 
   /* Eliminate non-memory operations */
   if (GET_CODE (op) != MEM)
-    return FALSE;
+    return 0;
 
   /* dword operations really put out 2 instructions, so eliminate them.  */
   /* ??? This isn't strictly correct.  It is OK to accept multiword modes
      here, since the length attributes are being set correctly, but only
      if the address is offsettable.  LO_SUM is not offsettable.  */
   if (GET_MODE_SIZE (GET_MODE (op)) > UNITS_PER_WORD)
-    return FALSE;
+    return 0;
 
   /* Decode the address now.  */
   addr = XEXP (op, 0);
   switch (GET_CODE (addr))
     {
-    default:
-      break;
-
     case REG:
     case LO_SUM:
-      return TRUE;
+      return 1;
 
     case CONST_INT:
       if (TARGET_MIPS16)
-       return FALSE;
+       return 0;
       return SMALL_INT (op);
 
     case PLUS:
       plus0 = XEXP (addr, 0);
       plus1 = XEXP (addr, 1);
       if (GET_CODE (plus0) == REG
-         && GET_CODE (plus1) == CONST_INT
-         && SMALL_INT (plus1)
+         && GET_CODE (plus1) == CONST_INT && SMALL_INT (plus1)
          && (! TARGET_MIPS16
              || mips16_simple_memory_operand (plus0, plus1, mode)))
-       return TRUE;
+       return 1;
 
       else if (GET_CODE (plus1) == REG
-              && GET_CODE (plus0) == CONST_INT
-              && SMALL_INT (plus0)
+              && GET_CODE (plus0) == CONST_INT && SMALL_INT (plus0)
               && (! TARGET_MIPS16
                   || mips16_simple_memory_operand (plus1, plus0, mode)))
-       return TRUE;
+       return 1;
 
       else
-       return FALSE;
+       return 0;
 
 #if 0
       /* We used to allow small symbol refs here (ie, stuff in .sdata
@@ -726,18 +725,19 @@ simple_memory_operand (op, mode)
       /* If -G 0, we can never have a GP relative memory operation.
         Also, save some time if not optimizing.  */
       if (!TARGET_GP_OPT)
-       return FALSE;
+       return 0;
 
       {
        rtx offset = const0_rtx;
        addr = eliminate_constant_term (XEXP (addr, 0), &offset);
        if (GET_CODE (op) != SYMBOL_REF)
-         return FALSE;
+         return 0;
 
        /* let's be paranoid.... */
        if (! SMALL_INT (offset))
-         return FALSE;
+         return 0;
       }
+
       /* fall through */
 
     case SYMBOL_REF:
@@ -769,16 +769,19 @@ simple_memory_operand (op, mode)
          else if (GET_MODE_SIZE (mode) == 8)
            return size < 8 * 0x20;
          else
-           return FALSE;
+           return 0;
        }
 
-      return FALSE;
+      return 0;
+
+    default:
+      break;
     }
 
-  return FALSE;
+  return 0;
 }
 
-/* Return true for a memory address that can be used to load or store
+/* Return nonzero for a memory address that can be used to load or store
    a doubleword.  */
 
 int
@@ -802,7 +805,7 @@ double_memory_operand (op, mode)
          && reg_renumber[REGNO (op)] < 0
          && reg_equiv_mem[REGNO (op)] != 0
          && double_memory_operand (reg_equiv_mem[REGNO (op)], mode))
-       return TRUE;
+       return 1;
 
       if (reload_in_progress
          && TARGET_MIPS16
@@ -823,7 +826,7 @@ double_memory_operand (op, mode)
                   && ! SMALL_INT (XEXP (addr, 1)))
                  || (GET_CODE (XEXP (addr, 1)) == SYMBOL_REF
                      && CONSTANT_POOL_ADDRESS_P (XEXP (addr, 1)))))
-           return TRUE;
+           return 1;
 
          /* Similarly, we accept a case where the memory address is
              itself on the stack, and will be reloaded. */
@@ -840,7 +843,7 @@ double_memory_operand (op, mode)
                       && ! SMALL_INT (XEXP (maddr, 1)))
                      || (GET_CODE (XEXP (maddr, 1)) == SYMBOL_REF
                          && CONSTANT_POOL_ADDRESS_P (XEXP (maddr, 1)))))
-               return TRUE;
+               return 1;
            }
 
          /* We also accept the same case when we have a 16 bit signed
@@ -860,17 +863,17 @@ double_memory_operand (op, mode)
                       && ! SMALL_INT (XEXP (addr, 1)))
                      || (GET_CODE (XEXP (addr, 1)) == SYMBOL_REF
                          && CONSTANT_POOL_ADDRESS_P (XEXP (addr, 1)))))
-               return TRUE;
+               return 1;
            }
        }
 
-      return FALSE;
+      return 0;
     }
 
   if (TARGET_64BIT)
     {
       /* In this case we can use an instruction like sd.  */
-      return TRUE;
+      return 1;
     }
 
   /* Make sure that 4 added to the address is a valid memory address.
@@ -879,7 +882,7 @@ double_memory_operand (op, mode)
   addr = XEXP (op, 0);
 
   if (CONSTANT_ADDRESS_P (addr))
-    return TRUE;
+    return 1;
 
   return memory_address_p ((GET_MODE_CLASS (mode) == MODE_INT
                            ? SImode
@@ -887,7 +890,7 @@ double_memory_operand (op, mode)
                           plus_constant_for_output (addr, 4));
 }
 
-/* Return true if the code of this rtx pattern is EQ or NE.  */
+/* Return nonzero if the code of this rtx pattern is EQ or NE.  */
 
 int
 equality_op (op, mode)
@@ -895,12 +898,12 @@ equality_op (op, mode)
      enum machine_mode mode;
 {
   if (mode != GET_MODE (op))
-    return FALSE;
+    return 0;
 
-  return (GET_CODE (op) == EQ || GET_CODE (op) == NE);
+  return GET_CODE (op) == EQ || GET_CODE (op) == NE;
 }
 
-/* Return true if the code is a relational operations (EQ, LE, etc.) */
+/* Return nonzero if the code is a relational operations (EQ, LE, etc.) */
 
 int
 cmp_op (op, mode)
@@ -908,12 +911,12 @@ cmp_op (op, mode)
      enum machine_mode mode;
 {
   if (mode != GET_MODE (op))
-    return FALSE;
+    return 0;
 
-  return (GET_RTX_CLASS (GET_CODE (op)) == '<');
+  return GET_RTX_CLASS (GET_CODE (op)) == '<';
 }
 
-/* Return true if the operand is either the PC or a label_ref.  */
+/* Return nonzero if the operand is either the PC or a label_ref.  */
 
 int
 pc_or_label_operand (op, mode)
@@ -921,12 +924,12 @@ pc_or_label_operand (op, mode)
      enum machine_mode mode;
 {
   if (op == pc_rtx)
-    return TRUE;
+    return 1;
 
   if (GET_CODE (op) == LABEL_REF)
-    return TRUE;
+    return 1;
 
-  return FALSE;
+  return 0;
 }
 
 /* Test for a valid operand for a call instruction.
@@ -939,15 +942,13 @@ call_insn_operand (op, mode)
      rtx op;
      enum machine_mode mode;
 {
-  if (CONSTANT_ADDRESS_P (op)
-      || (GET_CODE (op) == REG && op != arg_pointer_rtx
-         && ! (REGNO (op) >= FIRST_PSEUDO_REGISTER
-               && REGNO (op) <= LAST_VIRTUAL_REGISTER)))
-    return 1;
-  return 0;
+  return (CONSTANT_ADDRESS_P (op)
+         || (GET_CODE (op) == REG && op != arg_pointer_rtx
+             && ! (REGNO (op) >= FIRST_PSEUDO_REGISTER
+                   && REGNO (op) <= LAST_VIRTUAL_REGISTER)));
 }
 
-/* Return true if OPERAND is valid as a source operand for a move
+/* Return nonzero if OPERAND is valid as a source operand for a move
    instruction.  */
 
 int
@@ -960,16 +961,13 @@ move_operand (op, mode)
      with a SYMBOL_REF or CONST.  */
   return (general_operand (op, mode)
          && (! (mips_split_addresses && mips_check_split (op, mode))
-             || reload_in_progress
-             || reload_completed)
+             || reload_in_progress || reload_completed)
          && ! (TARGET_MIPS16
                && GET_CODE (op) == SYMBOL_REF
                && ! mips16_constant (op, mode, 1, 0)));
-               
-       
 }
 
-/* Return true if OPERAND is valid as a source operand for movdi.
+/* Return nonzero if OPERAND is valid as a source operand for movdi.
    This accepts not only general_operand, but also sign extended
    constants and registers.  We need to accept sign extended constants
    in case a sign extended register which is used in an expression,
@@ -1130,7 +1128,7 @@ consttable_operand (op, mode)
   return CONSTANT_P (op);
 }
 
-/* Return true if we split the address into high and low parts.  */
+/* Return nonzero if we split the address into high and low parts.  */
 
 /* ??? We should also handle reg+array somewhere.  We get four
    instructions currently, lui %hi/addui %lo/addui reg/lw.  Better is
@@ -1393,7 +1391,7 @@ mips_fill_delay_slot (ret, type, operands, cur_insn)
 {
   register rtx set_reg;
   register enum machine_mode mode;
-  register rtx next_insn       = (cur_insn) ? NEXT_INSN (cur_insn) : (rtx)0;
+  register rtx next_insn = cur_insn ? NEXT_INSN (cur_insn) : NULL_RTX;
   register int num_nops;
 
   if (type == DELAY_LOAD || type == DELAY_FCMP)
@@ -1407,29 +1405,29 @@ mips_fill_delay_slot (ret, type, operands, cur_insn)
 
   /* Make sure that we don't put nop's after labels.  */
   next_insn = NEXT_INSN (cur_insn);
-  while (next_insn != (rtx)0 && GET_CODE (next_insn) == NOTE)
+  while (next_insn != 0 && GET_CODE (next_insn) == NOTE)
     next_insn = NEXT_INSN (next_insn);
 
   dslots_load_total += num_nops;
   if (TARGET_DEBUG_F_MODE
       || !optimize
       || type == DELAY_NONE
-      || operands == (rtx *)0
-      || cur_insn == (rtx)0
-      || next_insn == (rtx)0
+      || operands == 0
+      || cur_insn == 0
+      || next_insn == 0
       || GET_CODE (next_insn) == CODE_LABEL
-      || (set_reg = operands[0]) == (rtx)0)
+      || (set_reg = operands[0]) == 0)
     {
       dslots_number_nops = 0;
-      mips_load_reg  = (rtx)0;
-      mips_load_reg2 = (rtx)0;
-      mips_load_reg3 = (rtx)0;
-      mips_load_reg4 = (rtx)0;
+      mips_load_reg  = 0;
+      mips_load_reg2 = 0;
+      mips_load_reg3 = 0;
+      mips_load_reg4 = 0;
       return ret;
     }
 
   set_reg = operands[0];
-  if (set_reg == (rtx)0)
+  if (set_reg == 0)
     return ret;
 
   while (GET_CODE (set_reg) == SUBREG)
@@ -1459,9 +1457,9 @@ mips_fill_delay_slot (ret, type, operands, cur_insn)
 }
 
 \f
-/* Determine whether a memory reference takes one (based off of the GP pointer),
-   two (normal), or three (label + reg) instructions, and bump the appropriate
-   counter for -mstats.  */
+/* Determine whether a memory reference takes one (based off of the GP
+   pointer), two (normal), or three (label + reg) instructions, and bump the
+   appropriate counter for -mstats.  */
 
 void
 mips_count_memory_refs (op, num)
@@ -1483,15 +1481,12 @@ mips_count_memory_refs (op, num)
   /* Skip MEM if passed, otherwise handle movsi of address.  */
   addr = (GET_CODE (op) != MEM) ? op : XEXP (op, 0);
 
-  /* Loop, going through the address RTL */
+  /* Loop, going through the address RTL */
   do
     {
       looping = FALSE;
       switch (GET_CODE (addr))
        {
-       default:
-         break;
-
        case REG:
        case CONST_INT:
        case LO_SUM:
@@ -1507,14 +1502,14 @@ mips_count_memory_refs (op, num)
            {
              additional++;
              addr = plus1;
-             looping = TRUE;
+             looping = 1;
              continue;
            }
 
          if (code0 == CONST_INT)
            {
              addr = plus1;
-             looping = TRUE;
+             looping = 1;
              continue;
            }
 
@@ -1522,28 +1517,28 @@ mips_count_memory_refs (op, num)
            {
              additional++;
              addr = plus0;
-             looping = TRUE;
+             looping = 1;
              continue;
            }
 
          if (code1 == CONST_INT)
            {
              addr = plus0;
-             looping = TRUE;
+             looping = 1;
              continue;
            }
 
          if (code0 == SYMBOL_REF || code0 == LABEL_REF || code0 == CONST)
            {
              addr = plus0;
-             looping = TRUE;
+             looping = 1;
              continue;
            }
 
          if (code1 == SYMBOL_REF || code1 == LABEL_REF || code1 == CONST)
            {
              addr = plus1;
-             looping = TRUE;
+             looping = 1;
              continue;
            }
 
@@ -1555,12 +1550,15 @@ mips_count_memory_refs (op, num)
 
        case CONST:
          addr = XEXP (addr, 0);
-         looping = TRUE;
+         looping = 1;
          continue;
 
        case SYMBOL_REF:
          n_words = SYMBOL_REF_FLAG (addr) ? 1 : 2;
          break;
+
+       default:
+         break;
        }
     }
   while (looping);
@@ -1576,8 +1574,9 @@ mips_count_memory_refs (op, num)
 }
 
 \f
-/* Return RTL for the offset from the current function to the
-   argument.  */
+/* Return RTL for the offset from the current function to the argument.
+
+   ??? Which argument is this?  */
 
 rtx
 embedded_pic_offset (x)
@@ -1871,13 +1870,13 @@ mips_move_1word (operands, insn, unsignedp)
                      dslots_load_total++;
                      operands[3] = offset;
                      if (unsignedp && TARGET_64BIT)
-                       ret = (SMALL_INT (offset))
-                                 ? "lwu\t%0,%2%#\n\tadd\t%0,%0,%3"
-                                 : "lwu\t%0,%2%#\n\t%[li\t%@,%3\n\tadd\t%0,%0,%@%]";
+                       ret = (SMALL_INT (offset)
+                              ? "lwu\t%0,%2%#\n\tadd\t%0,%0,%3"
+                              : "lwu\t%0,%2%#\n\t%[li\t%@,%3\n\tadd\t%0,%0,%@%]");
                      else
-                       ret = (SMALL_INT (offset))
-                                 ? "lw\t%0,%2%#\n\tadd\t%0,%0,%3"
-                                 : "lw\t%0,%2%#\n\t%[li\t%@,%3\n\tadd\t%0,%0,%@%]";
+                       ret = (SMALL_INT (offset)
+                              ? "lw\t%0,%2%#\n\tadd\t%0,%0,%3"
+                              : "lw\t%0,%2%#\n\t%[li\t%@,%3\n\tadd\t%0,%0,%@%]");
                    }
                }
            }
@@ -1916,11 +1915,9 @@ mips_move_1word (operands, insn, unsignedp)
          rtx add_op0 = XEXP (op1, 0);
          rtx add_op1 = XEXP (op1, 1);
 
-         if (GET_CODE (XEXP (op1, 1)) == REG && GET_CODE (XEXP (op1, 0)) == CONST_INT)
-           {
-             add_op0 = XEXP (op1, 1);          /* reverse operands */
-             add_op1 = XEXP (op1, 0);
-           }
+         if (GET_CODE (XEXP (op1, 1)) == REG
+             && GET_CODE (XEXP (op1, 0)) == CONST_INT)
+           add_op0 = XEXP (op1, 1), add_op1 = XEXP (op1, 0);
 
          operands[2] = add_op0;
          operands[3] = add_op1;
@@ -1947,11 +1944,11 @@ mips_move_1word (operands, insn, unsignedp)
            {
              switch (mode)
                {
-               default: break;
                case SFmode: ret = "sw\t%1,%0"; break;
                case SImode: ret = "sw\t%1,%0"; break;
                case HImode: ret = "sh\t%1,%0"; break;
                case QImode: ret = "sb\t%1,%0"; break;
+               default: break;
                }
            }
 
@@ -1963,11 +1960,11 @@ mips_move_1word (operands, insn, unsignedp)
        {
          switch (mode)
            {
-           default: break;
            case SFmode: ret = "sw\t%z1,%0"; break;
            case SImode: ret = "sw\t%z1,%0"; break;
            case HImode: ret = "sh\t%z1,%0"; break;
            case QImode: ret = "sb\t%z1,%0"; break;
+           default: break;
            }
        }
 
@@ -1975,17 +1972,18 @@ mips_move_1word (operands, insn, unsignedp)
        {
          switch (mode)
            {
-           default: break;
            case SFmode: ret = "sw\t%.,%0"; break;
            case SImode: ret = "sw\t%.,%0"; break;
            case HImode: ret = "sh\t%.,%0"; break;
            case QImode: ret = "sb\t%.,%0"; break;
+           default: break;
            }
        }
 
-      if (ret != (char *)0 && MEM_VOLATILE_P (op0))
+      if (ret != 0 && MEM_VOLATILE_P (op0))
        {
          int i = strlen (ret);
+
          if (i > sizeof (volatile_buffer) - sizeof ("%{%}"))
            abort ();
          
@@ -1994,7 +1992,7 @@ mips_move_1word (operands, insn, unsignedp)
        }
     }
 
-  if (ret == (char *)0)
+  if (ret == 0)
     {
       abort_with_insn (insn, "Bad move");
       return 0;
@@ -2079,6 +2077,7 @@ mips_move_2words (operands, insn)
                    {
                      if (!TARGET_64BIT)
                        abort_with_insn (insn, "Bad move");
+
 #ifdef TARGET_FP_CALL_32
                      if (FP_CALL_GP_REG_P (regno1))
                        ret = "dsll\t%1,32\n\tor\t%1,%D1\n\tdmtc1\t%1,%0";
@@ -2098,6 +2097,7 @@ mips_move_2words (operands, insn)
                {
                  if (!TARGET_64BIT)
                    abort_with_insn (insn, "Bad move");
+
 #ifdef TARGET_FP_CALL_32
                  if (FP_CALL_GP_REG_P (regno0))
                    ret = "dmfc1\t%0,%1\n\tmfc1\t%D0,%1\n\tdsrl\t%0,32";
@@ -2155,6 +2155,7 @@ mips_move_2words (operands, insn)
              if (GET_MODE (op1) == DFmode)
                {
                  delay = DELAY_LOAD;
+
 #ifdef TARGET_FP_CALL_32
                  if (FP_CALL_GP_REG_P (regno0))
                    {
@@ -2191,16 +2192,15 @@ mips_move_2words (operands, insn)
 #ifdef TARGET_FP_CALL_32
                       && ! FP_CALL_GP_REG_P (regno0)
 #endif
-                      )
-                 ? "move\t%0,%."
-                   : "move\t%0,%.\n\tmove\t%D0,%.";
+                      ? "move\t%0,%."
+                      : "move\t%0,%.\n\tmove\t%D0,%.");
 
              else if (FP_REG_P (regno0))
                {
                  delay = DELAY_LOAD;
-                 ret = (TARGET_64BIT)
-                               ? "dmtc1\t%.,%0"
-                               : "mtc1\t%.,%0\n\tmtc1\t%.,%D0";
+                 ret = (TARGET_64BIT
+                        ? "dmtc1\t%.,%0"
+                        : "mtc1\t%.,%0\n\tmtc1\t%.,%D0");
                }
            }
        }
@@ -2208,30 +2208,30 @@ mips_move_2words (operands, insn)
       else if (code1 == CONST_INT && INTVAL (op1) == 0 && ! TARGET_MIPS16)
        {
          if (GP_REG_P (regno0))
-           ret = (TARGET_64BIT)
-                               ? "move\t%0,%."
-                               : "move\t%0,%.\n\tmove\t%D0,%.";
-         
+           ret = (TARGET_64BIT
+                  ? "move\t%0,%."
+                  : "move\t%0,%.\n\tmove\t%D0,%.");
+
          else if (FP_REG_P (regno0))
            {
              delay = DELAY_LOAD;
-             ret = (TARGET_64BIT)
-                               ? "dmtc1\t%.,%0"
-                               : (TARGET_FLOAT64
-                                  ? "li.d\t%0,%1"
-                                  : "mtc1\t%.,%0\n\tmtc1\t%.,%D0");
+             ret = (TARGET_64BIT
+                    ? "dmtc1\t%.,%0"
+                    : (TARGET_FLOAT64
+                       ? "li.d\t%0,%1"
+                       : "mtc1\t%.,%0\n\tmtc1\t%.,%D0"));
            }
          else if (MD_REG_P (regno0))
            {
              delay = DELAY_HILO;
-             if (regno0 != HILO_REGNUM)
-               ret = "mt%0\t%.\n";
-             else
-               ret = "mtlo\t%.\n\tmthi\t%.";
+             ret =  (regno0 == HILO_REGNUM
+                     ? "mtlo\t%.\n\tmthi\t%."
+                     : "mt%0\t%.\n");
            }
        }
        
-      else if (code1 == CONST_INT && GET_MODE (op0) == DImode && GP_REG_P (regno0))
+      else if (code1 == CONST_INT && GET_MODE (op0) == DImode
+              && GP_REG_P (regno0))
        {
          if (TARGET_64BIT)
            {
@@ -2247,7 +2247,8 @@ mips_move_2words (operands, insn)
              else if (HOST_BITS_PER_WIDE_INT < 64)
                /* We can't use 'X' for negative numbers, because then we won't
                   get the right value for the upper 32 bits.  */
-               ret = ((INTVAL (op1) < 0) ? "dli\t%0,%1\t\t\t# %X1"
+               ret = (INTVAL (op1) < 0
+                      ? "dli\t%0,%1\t\t\t# %X1"
                       : "dli\t%0,%X1\t\t# %1");
              else
                /* We must use 'X', because otherwise LONG_MIN will print as
@@ -2275,7 +2276,8 @@ mips_move_2words (operands, insn)
              /* We use multiple shifts here, to avoid warnings about out
                 of range shifts on 32 bit hosts.  */
              operands[2] = GEN_INT (INTVAL (operands[1]) >> 16 >> 16);
-             operands[1] = GEN_INT (INTVAL (operands[1]) << 16 << 16 >> 16 >> 16);
+             operands[1]
+               = GEN_INT (INTVAL (operands[1]) << 16 << 16 >> 16 >> 16);
              ret = "li\t%M0,%2\n\tli\t%L0,%1";
            }
        }
@@ -2292,14 +2294,12 @@ mips_move_2words (operands, insn)
 
          else if (TARGET_64BIT)
            {
+
 #ifdef TARGET_FP_CALL_32
              if (FP_CALL_GP_REG_P (regno0))
-               {
-                  if (double_memory_operand (op1, GET_MODE (op1)))
-                    ret = "lwu\t%0,%1\n\tlwu\t%D0,4+%1";
-                  else
-                    ret = "ld\t%0,%1\n\tdsll\t%D0,%0,32\n\tdsrl\t%D0,32\n\tdsrl\t%0,32";
-               }
+               ret = (double_memory_operand (op1, GET_MODE (op1))
+                      ? "lwu\t%0,%1\n\tlwu\t%D0,4+%1"
+                      : "ld\t%0,%1\n\tdsll\t%D0,%0,32\n\tdsrl\t%D0,32\n\tdsrl\t%0,32");
              else
 #endif
                ret = "ld\t%0,%1";
@@ -2308,15 +2308,15 @@ mips_move_2words (operands, insn)
          else if (double_memory_operand (op1, GET_MODE (op1)))
            {
              operands[2] = adj_offsettable_operand (op1, 4);
-             if (reg_mentioned_p (op0, op1))
-               ret = "lw\t%D0,%2\n\tlw\t%0,%1";
-             else
-               ret = "lw\t%0,%1\n\tlw\t%D0,%2";
+             ret = (reg_mentioned_p (op0, op1)
+                    ? "lw\t%D0,%2\n\tlw\t%0,%1"
+                    : "lw\t%0,%1\n\tlw\t%D0,%2");
            }
 
-         if (ret != (char *)0 && MEM_VOLATILE_P (op1))
+         if (ret != 0 && MEM_VOLATILE_P (op1))
            {
              int i = strlen (ret);
+
              if (i > sizeof (volatile_buffer) - sizeof ("%{%}"))
                abort ();
 
@@ -2339,8 +2339,7 @@ mips_move_2words (operands, insn)
          else
            ret = "dla\t%0,%a1";
        }
-      else if (code1 == SYMBOL_REF
-              || code1 == CONST)
+      else if (code1 == SYMBOL_REF || code1 == CONST)
        {
          if (TARGET_MIPS16
              && code1 == CONST
@@ -2391,6 +2390,7 @@ mips_move_2words (operands, insn)
 
          else if (TARGET_64BIT)
            {
+
 #ifdef TARGET_FP_CALL_32
              if (FP_CALL_GP_REG_P (regno1))
                ret = "dsll\t%1,32\n\tor\t%1,%D1\n\tsd\t%1,%0";
@@ -2424,9 +2424,10 @@ mips_move_2words (operands, insn)
       if (TARGET_STATS)
        mips_count_memory_refs (op0, 2);
 
-      if (ret != (char *)0 && MEM_VOLATILE_P (op0))
+      if (ret != 0 && MEM_VOLATILE_P (op0))
        {
          int i = strlen (ret);
+
          if (i > sizeof (volatile_buffer) - sizeof ("%{%}"))
            abort ();
          
@@ -2435,7 +2436,7 @@ mips_move_2words (operands, insn)
        }
     }
 
-  if (ret == (char *)0)
+  if (ret == 0)
     {
       abort_with_insn (insn, "Bad move");
       return 0;
@@ -2446,7 +2447,6 @@ mips_move_2words (operands, insn)
 
   return ret;
 }
-
 \f
 /* Provide the costs of an addressing mode that contains ADDR.
    If ADDR is not a valid address, its cost is irrelevant.  */
@@ -2457,9 +2457,6 @@ mips_address_cost (addr)
 {
   switch (GET_CODE (addr))
     {
-    default:
-      break;
-
     case LO_SUM:
       return 1;
 
@@ -2479,7 +2476,8 @@ mips_address_cost (addr)
        if (! SMALL_INT (offset))
          return 2;
       }
-      /* fall through */
+
+      /* ... fall through ... */
 
     case SYMBOL_REF:
       return SYMBOL_REF_FLAG (addr) ? 1 : 2;
@@ -2490,21 +2488,15 @@ mips_address_cost (addr)
        register rtx plus1 = XEXP (addr, 1);
 
        if (GET_CODE (plus0) != REG && GET_CODE (plus1) == REG)
-         {
-           plus0 = XEXP (addr, 1);
-           plus1 = XEXP (addr, 0);
-         }
+         plus0 = XEXP (addr, 1), plus1 = XEXP (addr, 0);
 
        if (GET_CODE (plus0) != REG)
          break;
 
        switch (GET_CODE (plus1))
          {
-         default:
-           break;
-
          case CONST_INT:
-           return (SMALL_INT (plus1) ? 1 : 2);
+           return SMALL_INT (plus1) ? 1 : 2;
 
          case CONST:
          case SYMBOL_REF:
@@ -2512,14 +2504,20 @@ mips_address_cost (addr)
          case HIGH:
          case LO_SUM:
            return mips_address_cost (plus1) + 1;
+
+         default:
+           break;
          }
       }
+
+    default:
+      break;
     }
 
   return 4;
 }
 
-/* Return true if X is an address which needs a temporary register when 
+/* Return nonzero if X is an address which needs a temporary register when 
    reloaded while generating PIC code.  */
 
 int
@@ -2546,7 +2544,6 @@ map_test_to_internal_test (test_code)
 
   switch (test_code)
     {
-    default:                   break;
     case EQ:  test = ITEST_EQ;  break;
     case NE:  test = ITEST_NE;  break;
     case GT:  test = ITEST_GT;  break;
@@ -2557,6 +2554,7 @@ map_test_to_internal_test (test_code)
     case GEU: test = ITEST_GEU; break;
     case LTU: test = ITEST_LTU; break;
     case LEU: test = ITEST_LEU; break;
+    default:                   break;
     }
 
   return test;
@@ -2565,7 +2563,7 @@ map_test_to_internal_test (test_code)
 \f
 /* Generate the code to compare two integer values.  The return value is:
    (reg:SI xx)         The pseudo register the comparison is in
-   (rtx)0              No register, generate a simple branch.
+   0                   No register, generate a simple branch.
 
    ??? This is called with result nonzero by the Scond patterns in
    mips.md.  These patterns are called with a target in the mode of
@@ -2593,7 +2591,8 @@ gen_int_relational (test_code, result, cmp0, cmp1, p_invert)
      int *p_invert;            /* NULL or ptr to hold whether branch needs */
                                /* to reverse its test */
 {
-  struct cmp_info {
+  struct cmp_info
+  {
     enum rtx_code test_code;   /* code to use in instruction (LT vs. LTU) */
     int const_low;             /* low bound of constant we can accept */
     int const_high;            /* high bound of constant we can accept */
@@ -2631,7 +2630,7 @@ gen_int_relational (test_code, result, cmp0, cmp1, p_invert)
   if (test == ITEST_MAX)
     abort ();
 
-  p_info = &info[ (int)test ];
+  p_info = &info[(int) test];
   eqne_p = (p_info->test_code == XOR);
 
   mode = GET_MODE (cmp0);
@@ -2639,7 +2638,7 @@ gen_int_relational (test_code, result, cmp0, cmp1, p_invert)
     mode = GET_MODE (cmp1);
 
   /* Eliminate simple branches */
-  branch_p = (result == (rtx)0);
+  branch_p = (result == 0);
   if (branch_p)
     {
       if (GET_CODE (cmp0) == REG || GET_CODE (cmp0) == SUBREG)
@@ -2647,11 +2646,11 @@ gen_int_relational (test_code, result, cmp0, cmp1, p_invert)
          /* Comparisons against zero are simple branches */
          if (GET_CODE (cmp1) == CONST_INT && INTVAL (cmp1) == 0
              && (! TARGET_MIPS16 || eqne_p))
-           return (rtx)0;
+           return 0;
 
          /* Test for beq/bne.  */
          if (eqne_p && ! TARGET_MIPS16)
-           return (rtx)0;
+           return 0;
        }
 
       /* allocate a pseudo to calculate the value in.  */
@@ -2665,6 +2664,7 @@ gen_int_relational (test_code, result, cmp0, cmp1, p_invert)
   if (GET_CODE (cmp1) == CONST_INT)
     {
       HOST_WIDE_INT value = INTVAL (cmp1);
+
       if (value < p_info->const_low
          || value > p_info->const_high
          /* ??? Why?  And why wasn't the similar code below modified too?  */
@@ -2680,14 +2680,13 @@ gen_int_relational (test_code, result, cmp0, cmp1, p_invert)
     }
 
   /* See if we need to invert the result.  */
-  invert = (GET_CODE (cmp1) == CONST_INT)
-               ? p_info->invert_const
-               : p_info->invert_reg;
+  invert = (GET_CODE (cmp1) == CONST_INT
+           ? p_info->invert_const : p_info->invert_reg);
 
   if (p_invert != (int *)0)
     {
       *p_invert = invert;
-      invert = FALSE;
+      invert = 0;
     }
 
   /* Comparison to constants, may involve adding 1 to change a LT into LE.
@@ -2697,6 +2696,7 @@ gen_int_relational (test_code, result, cmp0, cmp1, p_invert)
       if (p_info->const_add != 0)
        {
          HOST_WIDE_INT new = INTVAL (cmp1) + p_info->const_add;
+
          /* If modification of cmp1 caused overflow,
             we would get the wrong answer if we follow the usual path;
             thus, x > 0xffffffffU would turn into x > 0U.  */
@@ -2715,6 +2715,7 @@ gen_int_relational (test_code, result, cmp0, cmp1, p_invert)
            cmp1 = GEN_INT (new);
        }
     }
+
   else if (p_info->reverse_regs)
     {
       rtx temp = cmp0;
@@ -2735,7 +2736,7 @@ gen_int_relational (test_code, result, cmp0, cmp1, p_invert)
       if (! TARGET_MIPS16)
        {
          convert_move (result, gen_rtx (GTU, mode, reg, const0_rtx), 0);
-         invert = FALSE;
+         invert = 0;
        }
       else
        {
@@ -2747,7 +2748,7 @@ gen_int_relational (test_code, result, cmp0, cmp1, p_invert)
 
   else if (test == ITEST_EQ)
     {
-      reg2 = (invert) ? gen_reg_rtx (mode) : result;
+      reg2 = invert ? gen_reg_rtx (mode) : result;
       convert_move (reg2, gen_rtx (LTU, mode, reg, const1_rtx), 0);
       reg = reg2;
     }
@@ -2773,7 +2774,6 @@ gen_int_relational (test_code, result, cmp0, cmp1, p_invert)
 
   return result;
 }
-
 \f
 /* Emit the common code for doing conditional branches.
    operand[0] is the label to jump to.
@@ -2794,14 +2794,12 @@ gen_conditional_branch (operands, test_code)
 
   switch (type)
     {
-    default:
-      abort_with_insn (gen_rtx (test_code, VOIDmode, cmp0, cmp1), "bad test");
-
     case CMP_SI:
     case CMP_DI:
       mode = type == CMP_SI ? SImode : DImode;
-      invert = FALSE;
+      invert = 0;
       reg = gen_int_relational (test_code, NULL_RTX, cmp0, cmp1, &invert);
+
       if (reg)
        {
          cmp0 = reg;
@@ -2809,11 +2807,10 @@ gen_conditional_branch (operands, test_code)
          test_code = NE;
        }
       else if (GET_CODE (cmp1) == CONST_INT && INTVAL (cmp1) != 0)
-       {
-         /* We don't want to build a comparison against a non-zero
-             constant.  */
-         cmp1 = force_reg (mode, cmp1);
-       }
+       /* We don't want to build a comparison against a non-zero
+          constant.  */
+       cmp1 = force_reg (mode, cmp1);
+
       break;
 
     case CMP_SF:
@@ -2827,8 +2824,7 @@ gen_conditional_branch (operands, test_code)
          0 in the instruction built below.  The MIPS FPU handles
          inequality testing by testing for equality and looking for a
          false result.  */
-      emit_insn (gen_rtx (SET, VOIDmode,
-                         reg,
+      emit_insn (gen_rtx (SET, VOIDmode, reg,
                          gen_rtx (test_code == NE ? EQ : test_code,
                                   CCmode, cmp0, cmp1)));
 
@@ -2836,8 +2832,11 @@ gen_conditional_branch (operands, test_code)
       mode = CCmode;
       cmp0 = reg;
       cmp1 = const0_rtx;
-      invert = FALSE;
+      invert = 0;
       break;
+
+    default:
+      abort_with_insn (gen_rtx (test_code, VOIDmode, cmp0, cmp1), "bad test");
     }
 
   /* Generate the branch.  */
@@ -2851,12 +2850,10 @@ gen_conditional_branch (operands, test_code)
       label1 = pc_rtx;
     }
 
-  emit_jump_insn (gen_rtx (SET, VOIDmode,
-                          pc_rtx,
+  emit_jump_insn (gen_rtx (SET, VOIDmode, pc_rtx,
                           gen_rtx (IF_THEN_ELSE, VOIDmode,
                                    gen_rtx (test_code, mode, cmp0, cmp1),
-                                   label1,
-                                   label2)));
+                                   label1, label2)));
 }
 
 /* Emit the common code for conditional moves.  OPERANDS is the array
@@ -2924,14 +2921,8 @@ gen_conditional_move (operands)
          abort ();
        }
     }
-  else
-    {
-      if (cmp_code == NE)
-       {
-         cmp_code = EQ;
-         move_code = EQ;
-       }
-    }
+  else if (cmp_code == NE)
+    cmp_code = EQ, move_code = EQ;
          
   if (mode == SImode || mode == DImode)
     cmp_mode = mode;
@@ -2941,20 +2932,18 @@ gen_conditional_move (operands)
     abort ();
 
   cmp_reg = gen_reg_rtx (cmp_mode);
-  emit_insn (gen_rtx (SET, cmp_mode,
-                     cmp_reg,
+  emit_insn (gen_rtx (SET, cmp_mode, cmp_reg,
                      gen_rtx (cmp_code, cmp_mode, op0, op1)));
-  emit_insn (gen_rtx (SET, op_mode,
-                     operands[0],
+
+  emit_insn (gen_rtx (SET, op_mode, operands[0],
                      gen_rtx (IF_THEN_ELSE, op_mode,
                               gen_rtx (move_code, VOIDmode,
-                                       cmp_reg,
-                                       CONST0_RTX (SImode)),
-                              operands[2],
-                              operands[3])));
+                                       cmp_reg, CONST0_RTX (SImode)),
+                              operands[2], operands[3])));
 }
 \f
-/* Write a loop to move a constant number of bytes.  Generate load/stores as follows:
+/* Write a loop to move a constant number of bytes.
+   Generate load/stores as follows:
 
    do {
      temp1 = src[0];
@@ -2988,15 +2977,15 @@ block_move_loop (dest_reg, src_reg, bytes, align, orig_dest, orig_src)
      rtx orig_dest;            /* original dest for change_address */
      rtx orig_src;             /* original source for making a reg note */
 {
-  rtx dest_mem         = change_address (orig_dest, BLKmode, dest_reg);
-  rtx src_mem          = change_address (orig_src, BLKmode, src_reg);
-  rtx align_rtx                = GEN_INT (align);
+  rtx dest_mem = change_address (orig_dest, BLKmode, dest_reg);
+  rtx src_mem = change_address (orig_src, BLKmode, src_reg);
+  rtx align_rtx = GEN_INT (align);
   rtx label;
   rtx final_src;
   rtx bytes_rtx;
   int leftover;
 
-  if (bytes < 2*MAX_MOVE_BYTES)
+  if (bytes < 2 * MAX_MOVE_BYTES)
     abort ();
 
   leftover = bytes % MAX_MOVE_BYTES;
@@ -3031,6 +3020,7 @@ block_move_loop (dest_reg, src_reg, bytes, align, orig_dest, orig_src)
 
   bytes_rtx = GEN_INT (MAX_MOVE_BYTES);
   emit_insn (gen_movstrsi_internal (dest_mem, src_mem, bytes_rtx, align_rtx));
+
   if (Pmode == DImode)
     {
       emit_insn (gen_adddi3 (src_reg, src_reg, bytes_rtx));
@@ -3043,11 +3033,11 @@ block_move_loop (dest_reg, src_reg, bytes, align, orig_dest, orig_src)
       emit_insn (gen_addsi3 (dest_reg, dest_reg, bytes_rtx));
       emit_insn (gen_cmpsi (src_reg, final_src));
     }
+
   emit_jump_insn (gen_bne (label));
 
   if (leftover)
-    emit_insn (gen_movstrsi_internal (dest_mem, src_mem,
-                                     GEN_INT (leftover),
+    emit_insn (gen_movstrsi_internal (dest_mem, src_mem, GEN_INT (leftover),
                                      align_rtx));
 }
 \f
@@ -3063,28 +3053,22 @@ block_move_call (dest_reg, src_reg, bytes_rtx)
      but will be DImode if we are using 64 bit longs and pointers.  */
   if (GET_MODE (bytes_rtx) != VOIDmode
       && GET_MODE (bytes_rtx) != Pmode)
-    bytes_rtx = convert_to_mode (Pmode, bytes_rtx, TRUE);
+    bytes_rtx = convert_to_mode (Pmode, bytes_rtx, 1);
 
 #ifdef TARGET_MEM_FUNCTIONS
   emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "memcpy"), 0,
-                    VOIDmode, 3,
-                    dest_reg, Pmode,
-                    src_reg, Pmode,
+                    VOIDmode, 3, dest_reg, Pmode, src_reg, Pmode,
                     convert_to_mode (TYPE_MODE (sizetype), bytes_rtx,
                                      TREE_UNSIGNED (sizetype)),
                     TYPE_MODE (sizetype));
 #else
   emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "bcopy"), 0,
-                    VOIDmode, 3,
-                    src_reg, Pmode,
-                    dest_reg, Pmode,
-                    convert_to_mode (TYPE_MODE (integer_type_node),
-                                      bytes_rtx,
-                                      TREE_UNSIGNED (integer_type_node)),
+                    VOIDmode, 3, src_reg, Pmode, dest_reg, Pmode,
+                    convert_to_mode (TYPE_MODE (integer_type_node), bytes_rtx,
+                                     TREE_UNSIGNED (integer_type_node)),
                     TYPE_MODE (integer_type_node));
 #endif
 }
-
 \f
 /* Expand string/block move operations.
 
@@ -3099,9 +3083,9 @@ expand_block_move (operands)
 {
   rtx bytes_rtx        = operands[2];
   rtx align_rtx = operands[3];
-  int constp   = (GET_CODE (bytes_rtx) == CONST_INT);
-  int bytes    = (constp ? INTVAL (bytes_rtx) : 0);
-  int align    = INTVAL (align_rtx);
+  int constp = GET_CODE (bytes_rtx) == CONST_INT;
+  HOST_WIDE_INT bytes = constp ? INTVAL (bytes_rtx) : 0;
+  int align = INTVAL (align_rtx);
   rtx orig_src = operands[1];
   rtx orig_dest        = operands[0];
   rtx src_reg;
@@ -3120,7 +3104,7 @@ expand_block_move (operands)
   if (TARGET_MEMCPY)
     block_move_call (dest_reg, src_reg, bytes_rtx);
 
-  else if (constp && bytes <= 2*MAX_MOVE_BYTES)
+  else if (constp && bytes <= 2 * MAX_MOVE_BYTES)
     emit_insn (gen_movstrsi_internal (change_address (orig_dest, BLKmode,
                                                      dest_reg),
                                      change_address (orig_src, BLKmode,
@@ -3136,25 +3120,26 @@ expand_block_move (operands)
         runtime, to see whether things wound up aligned, and we
         can use the faster lw/sw instead ulw/usw.  */
 
-      rtx temp         = gen_reg_rtx (Pmode);
+      rtx temp = gen_reg_rtx (Pmode);
       rtx aligned_label = gen_label_rtx ();
-      rtx join_label   = gen_label_rtx ();
-      int leftover     = bytes % MAX_MOVE_BYTES;
+      rtx join_label = gen_label_rtx ();
+      int leftover = bytes % MAX_MOVE_BYTES;
 
       bytes -= leftover;
 
       if (Pmode == DImode)
        {
          emit_insn (gen_iordi3 (temp, src_reg, dest_reg));
-         emit_insn (gen_anddi3 (temp, temp, GEN_INT (UNITS_PER_WORD-1)));
+         emit_insn (gen_anddi3 (temp, temp, GEN_INT (UNITS_PER_WORD - 1)));
          emit_insn (gen_cmpdi (temp, const0_rtx));
        }
       else
        {
          emit_insn (gen_iorsi3 (temp, src_reg, dest_reg));
-         emit_insn (gen_andsi3 (temp, temp, GEN_INT (UNITS_PER_WORD-1)));
+         emit_insn (gen_andsi3 (temp, temp, GEN_INT (UNITS_PER_WORD - 1)));
          emit_insn (gen_cmpsi (temp, const0_rtx));
        }
+
       emit_jump_insn (gen_beq (aligned_label));
 
       /* Unaligned loop.  */
@@ -3181,7 +3166,6 @@ expand_block_move (operands)
   else
     block_move_call (dest_reg, src_reg, bytes_rtx);
 }
-
 \f
 /* Emit load/stores for a small constant block_move. 
 
@@ -3206,15 +3190,15 @@ output_block_move (insn, operands, num_regs, move_type)
      int num_regs;
      enum block_move_type move_type;
 {
-  rtx dest_reg         = XEXP (operands[0], 0);
-  rtx src_reg          = XEXP (operands[1], 0);
-  int bytes            = INTVAL (operands[2]);
-  int align            = INTVAL (operands[3]);
-  int num              = 0;
-  int offset           = 0;
-  int use_lwl_lwr      = FALSE;
-  int last_operand     = num_regs+4;
-  int safe_regs                = 4;
+  rtx dest_reg = XEXP (operands[0], 0);
+  rtx src_reg = XEXP (operands[1], 0);
+  HOST_WIDE_INT bytes = INTVAL (operands[2]);
+  int align = INTVAL (operands[3]);
+  int num = 0;
+  int offset = 0;
+  int use_lwl_lwr = 0;
+  int last_operand = num_regs + 4;
+  int safe_regs = 4;
   int i;
   rtx xoperands[10];
 
@@ -3228,18 +3212,16 @@ output_block_move (insn, operands, num_regs, move_type)
     enum machine_mode mode;    /* mode to use on (MEM) */
   } load_store[4];
 
-  /* Detect a bug in GCC, where it can give us a register
+  /* ??? 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 < 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 (! reg_mentioned_p (operands[i], operands[0])
+       && ! reg_mentioned_p (operands[i], operands[1]))
+      xoperands[safe_regs++] = operands[i];
 
   if (safe_regs < last_operand)
     {
@@ -3247,7 +3229,7 @@ output_block_move (insn, operands, num_regs, move_type)
       xoperands[1] = operands[1];
       xoperands[2] = operands[2];
       xoperands[3] = operands[3];
-      return output_block_move (insn, xoperands, safe_regs-4, move_type);
+      return output_block_move (insn, xoperands, safe_regs - 4, move_type);
     }
 
   /* If we are given global or static addresses, and we would be
@@ -3257,7 +3239,7 @@ output_block_move (insn, operands, num_regs, move_type)
      an ldl/ldr instruction pair.  We play it safe, and always move
      constant addresses into registers when generating N32/N64 code, just
      in case we might emit an unaligned load instruction.  */
-  if (num_regs > 2 && (bytes > 2*align || move_type != BLOCK_MOVE_NORMAL
+  if (num_regs > 2 && (bytes > 2 * align || move_type != BLOCK_MOVE_NORMAL
                       || mips_abi == ABI_N32 || mips_abi == ABI_64))
     {
       if (CONSTANT_P (src_reg))
@@ -3265,7 +3247,7 @@ output_block_move (insn, operands, num_regs, move_type)
          if (TARGET_STATS)
            mips_count_memory_refs (operands[1], 1);
 
-         src_reg = operands[ 3 + num_regs-- ];
+         src_reg = operands[3 + num_regs--];
          if (move_type != BLOCK_MOVE_LAST)
            {
              xoperands[1] = operands[1];
@@ -3282,7 +3264,7 @@ output_block_move (insn, operands, num_regs, move_type)
          if (TARGET_STATS)
            mips_count_memory_refs (operands[0], 1);
 
-         dest_reg = operands[ 3 + num_regs-- ];
+         dest_reg = operands[3 + num_regs--];
          if (move_type != BLOCK_MOVE_LAST)
            {
              xoperands[1] = operands[0];
@@ -3303,7 +3285,7 @@ output_block_move (insn, operands, num_regs, move_type)
 
   if (GET_CODE (src_reg) == LO_SUM)
     {
-      src_reg = operands[ 3 + num_regs-- ];
+      src_reg = operands[3 + num_regs--];
       if (move_type != BLOCK_MOVE_LAST)
        {
          xoperands[2] = XEXP (XEXP (operands[1], 0), 1);
@@ -3318,7 +3300,7 @@ output_block_move (insn, operands, num_regs, move_type)
 
   if (GET_CODE (dest_reg) == LO_SUM)
     {
-      dest_reg = operands[ 3 + num_regs-- ];
+      dest_reg = operands[3 + num_regs--];
       if (move_type != BLOCK_MOVE_LAST)
        {
          xoperands[2] = XEXP (XEXP (operands[0], 0), 1);
@@ -3331,11 +3313,12 @@ output_block_move (insn, operands, num_regs, move_type)
        }
     }
 
-  if (num_regs > (sizeof (load_store) / sizeof (load_store[0])))
-    num_regs = (sizeof (load_store) / sizeof (load_store[0]));
+  if (num_regs > sizeof (load_store) / sizeof (load_store[0]))
+    num_regs = sizeof (load_store) / sizeof (load_store[0]);
 
   else if (num_regs < 1)
-    abort_with_insn (insn, "Cannot do block move, not enough scratch registers");
+    abort_with_insn (insn,
+                    "Cannot do block move, not enough scratch registers");
 
   while (bytes > 0)
     {
@@ -3343,12 +3326,12 @@ output_block_move (insn, operands, num_regs, move_type)
 
       if (TARGET_64BIT && bytes >= 8 && align >= 8)
        {
-         load_store[num].load       = "ld\t%0,%1";
-         load_store[num].load_nop   = "ld\t%0,%1%#";
-         load_store[num].store      = "sd\t%0,%1";
+         load_store[num].load = "ld\t%0,%1";
+         load_store[num].load_nop = "ld\t%0,%1%#";
+         load_store[num].store = "sd\t%0,%1";
          load_store[num].last_store = "sd\t%0,%1";
-         load_store[num].final      = (char *)0;
-         load_store[num].mode       = DImode;
+         load_store[num].final 0;
+         load_store[num].mode = DImode;
          offset += 8;
          bytes -= 8;
        }
@@ -3358,34 +3341,35 @@ output_block_move (insn, operands, num_regs, move_type)
        {
          if (BYTES_BIG_ENDIAN)
            {
-             load_store[num].load       = "ldl\t%0,%1\n\tldr\t%0,%2";
-             load_store[num].load_nop   = "ldl\t%0,%1\n\tldr\t%0,%2%#";
-             load_store[num].store      = "sdl\t%0,%1\n\tsdr\t%0,%2";
+             load_store[num].load = "ldl\t%0,%1\n\tldr\t%0,%2";
+             load_store[num].load_nop = "ldl\t%0,%1\n\tldr\t%0,%2%#";
+             load_store[num].store = "sdl\t%0,%1\n\tsdr\t%0,%2";
              load_store[num].last_store = "sdr\t%0,%2";
-             load_store[num].final      = "sdl\t%0,%1";
+             load_store[num].final = "sdl\t%0,%1";
            }
          else
            {
-             load_store[num].load           = "ldl\t%0,%2\n\tldr\t%0,%1";
-             load_store[num].load_nop   = "ldl\t%0,%2\n\tldr\t%0,%1%#";
-             load_store[num].store          = "sdl\t%0,%2\n\tsdr\t%0,%1";
+             load_store[num].load = "ldl\t%0,%2\n\tldr\t%0,%1";
+             load_store[num].load_nop = "ldl\t%0,%2\n\tldr\t%0,%1%#";
+             load_store[num].store = "sdl\t%0,%2\n\tsdr\t%0,%1";
              load_store[num].last_store = "sdr\t%0,%1";
-             load_store[num].final      = "sdl\t%0,%2";
+             load_store[num].final = "sdl\t%0,%2";
            }
+
          load_store[num].mode = DImode;
          offset += 8;
          bytes -= 8;
-         use_lwl_lwr = TRUE;
+         use_lwl_lwr = 1;
        }
 
       else if (bytes >= 4 && align >= 4)
        {
-         load_store[num].load       = "lw\t%0,%1";
-         load_store[num].load_nop   = "lw\t%0,%1%#";
-         load_store[num].store      = "sw\t%0,%1";
+         load_store[num].load = "lw\t%0,%1";
+         load_store[num].load_nop = "lw\t%0,%1%#";
+         load_store[num].store = "sw\t%0,%1";
          load_store[num].last_store = "sw\t%0,%1";
-         load_store[num].final      = (char *)0;
-         load_store[num].mode       = SImode;
+         load_store[num].final 0;
+         load_store[num].mode = SImode;
          offset += 4;
          bytes -= 4;
        }
@@ -3394,46 +3378,46 @@ output_block_move (insn, operands, num_regs, move_type)
        {
          if (BYTES_BIG_ENDIAN)
            {
-             load_store[num].load       = "lwl\t%0,%1\n\tlwr\t%0,%2";
-             load_store[num].load_nop   = "lwl\t%0,%1\n\tlwr\t%0,%2%#";
-             load_store[num].store      = "swl\t%0,%1\n\tswr\t%0,%2";
+             load_store[num].load = "lwl\t%0,%1\n\tlwr\t%0,%2";
+             load_store[num].load_nop = "lwl\t%0,%1\n\tlwr\t%0,%2%#";
+             load_store[num].store = "swl\t%0,%1\n\tswr\t%0,%2";
              load_store[num].last_store = "swr\t%0,%2";
-             load_store[num].final      = "swl\t%0,%1";
+             load_store[num].final = "swl\t%0,%1";
            }
          else
            {
-             load_store[num].load           = "lwl\t%0,%2\n\tlwr\t%0,%1";
-             load_store[num].load_nop   = "lwl\t%0,%2\n\tlwr\t%0,%1%#";
-             load_store[num].store          = "swl\t%0,%2\n\tswr\t%0,%1";
+             load_store[num].load = "lwl\t%0,%2\n\tlwr\t%0,%1";
+             load_store[num].load_nop = "lwl\t%0,%2\n\tlwr\t%0,%1%#";
+             load_store[num].store = "swl\t%0,%2\n\tswr\t%0,%1";
              load_store[num].last_store = "swr\t%0,%1";
-             load_store[num].final      = "swl\t%0,%2";
+             load_store[num].final = "swl\t%0,%2";
            }
+
          load_store[num].mode = SImode;
          offset += 4;
          bytes -= 4;
-         use_lwl_lwr = TRUE;
+         use_lwl_lwr = 1;
        }
 
       else if (bytes >= 2 && align >= 2)
        {
-         load_store[num].load       = "lh\t%0,%1";
-         load_store[num].load_nop   = "lh\t%0,%1%#";
-         load_store[num].store      = "sh\t%0,%1";
+         load_store[num].load = "lh\t%0,%1";
+         load_store[num].load_nop = "lh\t%0,%1%#";
+         load_store[num].store = "sh\t%0,%1";
          load_store[num].last_store = "sh\t%0,%1";
-         load_store[num].final      = (char *)0;
-         load_store[num].mode       = HImode;
+         load_store[num].final 0;
+         load_store[num].mode = HImode;
          offset += 2;
          bytes -= 2;
        }
-
       else
        {
-         load_store[num].load       = "lb\t%0,%1";
-         load_store[num].load_nop   = "lb\t%0,%1%#";
-         load_store[num].store      = "sb\t%0,%1";
+         load_store[num].load = "lb\t%0,%1";
+         load_store[num].load_nop = "lb\t%0,%1%#";
+         load_store[num].store = "sb\t%0,%1";
          load_store[num].last_store = "sb\t%0,%1";
-         load_store[num].final      = (char *)0;
-         load_store[num].mode       = QImode;
+         load_store[num].final 0;
+         load_store[num].mode = QImode;
          offset++;
          bytes--;
        }
@@ -3469,21 +3453,23 @@ output_block_move (insn, operands, num_regs, move_type)
                {
                  int offset;
 
-                 if (!operands[i+4])
+                 if (!operands[i + 4])
                    abort ();
 
-                 if (GET_MODE (operands[i+4]) != load_store[i].mode)
-                   operands[i+4] = gen_rtx (REG, load_store[i].mode, REGNO (operands[i+4]));
+                 if (GET_MODE (operands[i + 4]) != load_store[i].mode)
+                   operands[i + 4] = gen_rtx (REG, load_store[i].mode,
+                                              REGNO (operands[i + 4]));
 
                  offset = load_store[i].offset;
-                 xoperands[0] = operands[i+4];
+                 xoperands[0] = operands[i + 4];
                  xoperands[1] = gen_rtx (MEM, load_store[i].mode,
                                          plus_constant (src_reg, offset));
 
                  if (use_lwl_lwr)
                    {
-                     int extra_offset;
-                     extra_offset = GET_MODE_SIZE (load_store[i].mode) - 1;
+                     int extra_offset
+                       = GET_MODE_SIZE (load_store[i].mode) - 1;
+
                      xoperands[2] = gen_rtx (MEM, load_store[i].mode,
                                              plus_constant (src_reg,
                                                             extra_offset
@@ -3499,15 +3485,14 @@ output_block_move (insn, operands, num_regs, move_type)
              int last_p = (i == num-1 && bytes == 0);
              int offset = load_store[i].offset;
 
-             xoperands[0] = operands[i+4];
+             xoperands[0] = operands[i + 4];
              xoperands[1] = gen_rtx (MEM, load_store[i].mode,
                                      plus_constant (dest_reg, offset));
 
 
              if (use_lwl_lwr)
                {
-                 int extra_offset;
-                 extra_offset = GET_MODE_SIZE (load_store[i].mode) - 1;
+                 int extra_offset = GET_MODE_SIZE (load_store[i].mode) - 1;
                  xoperands[2] = gen_rtx (MEM, load_store[i].mode,
                                          plus_constant (dest_reg,
                                                         extra_offset
@@ -3522,7 +3507,7 @@ output_block_move (insn, operands, num_regs, move_type)
                  if (!last_p)
                    output_asm_insn (load_store[i].store, xoperands);
 
-                 else if (load_store[i].final != (char *)0)
+                 else if (load_store[i].final != 0)
                    output_asm_insn (load_store[i].final, xoperands);
                }
 
@@ -3531,13 +3516,12 @@ output_block_move (insn, operands, num_regs, move_type)
            }
 
          num = 0;              /* reset load_store */
-         use_lwl_lwr = FALSE;
+         use_lwl_lwr = 0;
        }
     }
 
   return "";
 }
-
 \f
 /* Argument support functions.  */
 
@@ -3554,7 +3538,9 @@ init_cumulative_args (cum, fntype, libname)
 
   if (TARGET_DEBUG_E_MODE)
     {
-      fprintf (stderr, "\ninit_cumulative_args, fntype = 0x%.8lx", (long)fntype);
+      fprintf (stderr,
+              "\ninit_cumulative_args, fntype = 0x%.8lx", (long)fntype);
+
       if (!fntype)
        fputc ('\n', stderr);
 
@@ -3562,8 +3548,8 @@ init_cumulative_args (cum, fntype, libname)
        {
          tree ret_type = TREE_TYPE (fntype);
          fprintf (stderr, ", fntype code = %s, ret code = %s\n",
-                  tree_code_name[ (int)TREE_CODE (fntype) ],
-                  tree_code_name[ (int)TREE_CODE (ret_type) ]);
+                  tree_code_name[(int)TREE_CODE (fntype)],
+                  tree_code_name[(int)TREE_CODE (ret_type)]);
        }
     }
 
@@ -3572,15 +3558,13 @@ init_cumulative_args (cum, fntype, libname)
   /* Determine if this function has variable arguments.  This is
      indicated by the last argument being 'void_type_mode' if there
      are no variable arguments.  The standard MIPS calling sequence
-     passes all arguments in the general purpose registers in this
-     case. */
+     passes all arguments in the general purpose registers in this case. */
 
-  for (param = (fntype) ? TYPE_ARG_TYPES (fntype) : 0;
-       param != (tree)0;
-       param = next_param)
+  for (param = fntype ? TYPE_ARG_TYPES (fntype) : 0;
+       param != 0; param = next_param)
     {
       next_param = TREE_CHAIN (param);
-      if (next_param == (tree)0 && TREE_VALUE (param) != void_type_node)
+      if (next_param == 0 && TREE_VALUE (param) != void_type_node)
        cum->gp_reg_found = 1;
     }
 }
@@ -3596,9 +3580,9 @@ function_arg_advance (cum, mode, type, named)
 {
   if (TARGET_DEBUG_E_MODE)
     fprintf (stderr,
-            "function_adv( {gp reg found = %d, arg # = %2d, words = %2d}, %4s, 0x%.8x, %d )\n\n",
-            cum->gp_reg_found, cum->arg_number, cum->arg_words, GET_MODE_NAME (mode),
-            type, named);
+            "function_adv({gp reg found = %d, arg # = %2d, words = %2d}, %4s, 0x%.8x, %d )\n\n",
+            cum->gp_reg_found, cum->arg_number, cum->arg_words,
+            GET_MODE_NAME (mode), type, named);
 
   cum->arg_number++;
   switch (mode)
@@ -3610,6 +3594,7 @@ function_arg_advance (cum, mode, type, named)
       if (GET_MODE_CLASS (mode) != MODE_COMPLEX_INT
          && GET_MODE_CLASS (mode) != MODE_COMPLEX_FLOAT)
        abort ();
+
       cum->gp_reg_found = 1;
       cum->arg_words += ((GET_MODE_SIZE (mode) + UNITS_PER_WORD - 1)
                         / UNITS_PER_WORD);
@@ -3667,15 +3652,16 @@ function_arg (cum, mode, type, named)
   int regbase = -1;
   int bias = 0;
   int *arg_words = &cum->arg_words;
-  int struct_p = ((type != (tree)0)
+  int struct_p = (type != 0
                  && (TREE_CODE (type) == RECORD_TYPE
-                     || TREE_CODE (type) == UNION_TYPE));
+                     || TREE_CODE (type) == UNION_TYPE
+                     || TREE_CODE (type) == QUAL_UNION_TYPE));
 
   if (TARGET_DEBUG_E_MODE)
     fprintf (stderr,
             "function_arg( {gp reg found = %d, arg # = %2d, words = %2d}, %4s, 0x%.8x, %d ) = ",
-            cum->gp_reg_found, cum->arg_number, cum->arg_words, GET_MODE_NAME (mode),
-            type, named);
+            cum->gp_reg_found, cum->arg_number, cum->arg_words,
+            GET_MODE_NAME (mode), type, named);
 
   cum->last_arg_fp = 0;
   switch (mode)
@@ -3688,6 +3674,7 @@ function_arg (cum, mode, type, named)
          else
            {
              regbase = FP_ARG_FIRST;
+
              /* If the first arg was a float in a floating point register,
                 then set bias to align this float arg properly.  */
              if (cum->arg_words == 1)
@@ -3710,22 +3697,19 @@ function_arg (cum, mode, type, named)
       if (! TARGET_64BIT)
        {
          if (mips_abi == ABI_EABI
-             && ! TARGET_SOFT_FLOAT
-             && ! TARGET_SINGLE_FLOAT)
+             && ! TARGET_SOFT_FLOAT && ! TARGET_SINGLE_FLOAT)
            cum->fp_arg_words += cum->fp_arg_words & 1;
          else
            cum->arg_words += cum->arg_words & 1;
        }
+
       if (mips_abi == ABI_32)
        regbase = ((cum->gp_reg_found
-                   || TARGET_SOFT_FLOAT
-                   || TARGET_SINGLE_FLOAT
+                   || TARGET_SOFT_FLOAT || TARGET_SINGLE_FLOAT
                    || cum->arg_number >= 2)
-                  ? GP_ARG_FIRST
-                  : FP_ARG_FIRST);
+                  ? GP_ARG_FIRST : FP_ARG_FIRST);
       else if (mips_abi == ABI_EABI
-              && ! TARGET_SOFT_FLOAT
-              && ! TARGET_SINGLE_FLOAT)
+              && ! TARGET_SOFT_FLOAT && ! TARGET_SINGLE_FLOAT)
        {
          cum->last_arg_fp = 1;
          arg_words = &cum->fp_arg_words;
@@ -3767,7 +3751,7 @@ function_arg (cum, mode, type, named)
       if (TARGET_DEBUG_E_MODE)
        fprintf (stderr, "<stack>%s\n", struct_p ? ", [struct]" : "");
 
-      ret = (rtx)0;
+      ret = 0;
     }
   else
     {
@@ -3839,8 +3823,9 @@ function_arg (cum, mode, type, named)
                  else
                    reg = gen_rtx (REG, word_mode, regno);
 
-                 XVECEXP (ret, 0, i) = gen_rtx (EXPR_LIST, VOIDmode, reg,
-                                                GEN_INT (bitpos / BITS_PER_UNIT));
+                 XVECEXP (ret, 0, i) 
+                   = gen_rtx (EXPR_LIST, VOIDmode, reg,
+                              GEN_INT (bitpos / BITS_PER_UNIT));
 
                  bitpos += 64;
                  regno++;
@@ -3877,10 +3862,11 @@ function_arg (cum, mode, type, named)
          rtx amount = GEN_INT (BITS_PER_WORD
                                - int_size_in_bytes (type) * BITS_PER_UNIT);
          rtx reg = gen_rtx (REG, word_mode, regbase + *arg_words + bias);
+
          if (TARGET_64BIT)
-           cum->adjust[ cum->num_adjusts++ ] = gen_ashldi3 (reg, reg, amount);
+           cum->adjust[cum->num_adjusts++] = gen_ashldi3 (reg, reg, amount);
          else
-           cum->adjust[ cum->num_adjusts++ ] = gen_ashlsi3 (reg, reg, amount);
+           cum->adjust[cum->num_adjusts++] = gen_ashlsi3 (reg, reg, amount);
        }
     }
 
@@ -3902,7 +3888,6 @@ function_arg (cum, mode, type, named)
   return ret;
 }
 
-
 int
 function_arg_partial_nregs (cum, mode, type, named)
      CUMULATIVE_ARGS *cum;     /* current arg information */
@@ -3934,8 +3919,7 @@ function_arg_partial_nregs (cum, mode, type, named)
     }
 
   else if (mode == DImode && cum->arg_words == MAX_ARGS_IN_REGISTERS-1
-          && ! TARGET_64BIT
-          && mips_abi != ABI_EABI)
+          && ! TARGET_64BIT && mips_abi != ABI_EABI)
     {
       if (TARGET_DEBUG_E_MODE)
        fprintf (stderr, "function_arg_partial_nregs = 1\n");
@@ -3967,7 +3951,6 @@ trace (s, s1, s2)
 {
   fprintf (stderr, s, s1, s2);
 }
-
 \f
 /* Set up the threshold for data to go into the small data area, instead
    of the normal data area, and detect any conflicts in the switches.  */
@@ -3979,7 +3962,7 @@ override_options ()
   register int regno;
   register enum machine_mode mode;
 
-  mips_section_threshold = (g_switch_set) ? g_switch_value : MIPS_DEFAULT_GVALUE;
+  mips_section_threshold = g_switch_set ? g_switch_value : MIPS_DEFAULT_GVALUE;
 
   if (mips_section_threshold <= 0)
     target_flags &= ~MASK_GPOPT;
@@ -4000,7 +3983,7 @@ override_options ()
 #endif
 
   /* Get the architectural level.  */
-  if (mips_isa_string == (char *)0)
+  if (mips_isa_string == 0)
     mips_isa = MIPS_ISA_DEFAULT;
 
   else if (isdigit (*mips_isa_string))
@@ -4060,6 +4043,7 @@ override_options ()
       else
        mips_abi = ABI_64;
     }
+
   /* A specified ABI defaults the ISA if it was not specified.  */
   else if (mips_isa_string == 0 && mips_abi_string && mips_abi != ABI_EABI)
     {
@@ -4070,6 +4054,7 @@ override_options ()
       else
        mips_isa = 4;
     }
+
   /* If both ABI and ISA were specified, check for conflicts.  */
   else if (mips_isa_string && mips_abi_string)
     {
@@ -4091,6 +4076,7 @@ override_options ()
   /* ??? This doesn't work yet, so don't let people try to use it.  */
   if (mips_abi == ABI_32)
     error ("The -mabi=32 support does not work yet.");
+
 #else
   if (mips_abi_string)
     error ("This target does not support the -mabi switch.");
@@ -4101,12 +4087,12 @@ override_options ()
      greater than that supported by the default processor, then the user gets
      an error.  Normally, the compiler will just default to the base level cpu
      for the indicated isa.  */
-  if (mips_cpu_string == (char *)0)
+  if (mips_cpu_string == 0)
     mips_cpu_string = MIPS_CPU_STRING_DEFAULT;
 #endif
 
   /* Identify the processor type */
-  if (mips_cpu_string == (char *)0
+  if (mips_cpu_string == 0
       || !strcmp (mips_cpu_string, "default")
       || !strcmp (mips_cpu_string, "DEFAULT"))
     {
@@ -4134,15 +4120,13 @@ override_options ()
   else
     {
       char *p = mips_cpu_string;
-      int seen_v = FALSE;
+      int seen_v = 0;
 
       /* We need to cope with the various "vr" prefixes for the NEC 4300
         and 4100 processors.  */
       if (*p == 'v' || *p == 'V')
-       {
-         seen_v = TRUE;
-         p++;
-        }
+       seen_v = 1, p++;
+
       if (*p == 'r' || *p == 'R')
        p++;
 
@@ -4176,10 +4160,11 @@ override_options ()
            mips_cpu = PROCESSOR_R4000;
           /* The vr4100 is a non-FP ISA III processor with some extra
              instructions.  */
-         else if (!strcmp (p, "4100")) {
-            mips_cpu = PROCESSOR_R4100;
-            target_flags |= MASK_SOFT_FLOAT ;
-          }
+         else if (!strcmp (p, "4100"))
+           {
+              mips_cpu = PROCESSOR_R4100;
+              target_flags |= MASK_SOFT_FLOAT ;
+           }
          /* The vr4300 is a standard ISA III processor, but with a different
             pipeline.  */
          else if (!strcmp (p, "4300"))
@@ -4287,8 +4272,10 @@ override_options ()
       flag_pic = 1;
       if (TARGET_ABICALLS)
        warning ("-membedded-pic and -mabicalls are incompatible");
+
       if (g_switch_set)
        warning ("-G and -membedded-pic are incompatible");
+
       /* Setting mips_section_threshold is not required, because gas
         will force everything to be GP addressable anyhow, but
         setting it will cause gcc to make better estimates of the
@@ -4298,7 +4285,7 @@ override_options ()
     }
 
   /* This optimization requires a linker that can support a R_MIPS_LO16
-     relocation which is not immediately preceeded by a R_MIPS_HI16 relocation.
+     relocation which is not immediately preceded by a R_MIPS_HI16 relocation.
      GNU ld has this support, but not all other MIPS linkers do, so we enable
      this optimization only if the user requests it, or if GNU ld is the
      standard linker for this configuration.  */
@@ -4316,7 +4303,8 @@ override_options ()
      reg_names points into via the REGISTER_NAMES macro.  */
 
   if (TARGET_NAME_REGS)
-    bcopy ((char *) mips_sw_reg_names, (char *) mips_reg_names, sizeof (mips_reg_names));
+    bcopy ((char *) mips_sw_reg_names, (char *) mips_reg_names,
+          sizeof (mips_reg_names));
 
   /* When compiling for the mips16, we can not use floating point.  We
      record the original hard float value in mips16_hard_float.  */
@@ -4353,14 +4341,6 @@ override_options ()
   else
     mips16 = 0;
 
-#if defined(_IOLBF)
-#if defined(ultrix) || defined(__ultrix) || defined(__OSF1__) || defined(__osf__) || defined(osf)
-  /* If -mstats and -quiet, make stderr line buffered.  */
-  if (quiet_flag && TARGET_STATS)
-    setvbuf (stderr, (char *)0, _IOLBF, BUFSIZ);
-#endif
-#endif
-
   /* Initialize the high and low values for legitimate floating point
      constants.  Rather than trying to get the accuracy down to the
      last bit, just use approximate ranges.  */
@@ -4369,29 +4349,29 @@ override_options ()
   sfhigh = REAL_VALUE_ATOF ("1.0e38", SFmode);
   sflow = REAL_VALUE_ATOF ("1.0e-38", SFmode);
 
-  mips_print_operand_punct['?'] = TRUE;
-  mips_print_operand_punct['#'] = TRUE;
-  mips_print_operand_punct['&'] = TRUE;
-  mips_print_operand_punct['!'] = TRUE;
-  mips_print_operand_punct['*'] = TRUE;
-  mips_print_operand_punct['@'] = TRUE;
-  mips_print_operand_punct['.'] = TRUE;
-  mips_print_operand_punct['('] = TRUE;
-  mips_print_operand_punct[')'] = TRUE;
-  mips_print_operand_punct['['] = TRUE;
-  mips_print_operand_punct[']'] = TRUE;
-  mips_print_operand_punct['<'] = TRUE;
-  mips_print_operand_punct['>'] = TRUE;
-  mips_print_operand_punct['{'] = TRUE;
-  mips_print_operand_punct['}'] = TRUE;
-  mips_print_operand_punct['^'] = TRUE;
-  mips_print_operand_punct['$'] = TRUE;
-  mips_print_operand_punct['+'] = TRUE;
+  mips_print_operand_punct['?'] = 1;
+  mips_print_operand_punct['#'] = 1;
+  mips_print_operand_punct['&'] = 1;
+  mips_print_operand_punct['!'] = 1;
+  mips_print_operand_punct['*'] = 1;
+  mips_print_operand_punct['@'] = 1;
+  mips_print_operand_punct['.'] = 1;
+  mips_print_operand_punct['('] = 1;
+  mips_print_operand_punct[')'] = 1;
+  mips_print_operand_punct['['] = 1;
+  mips_print_operand_punct[']'] = 1;
+  mips_print_operand_punct['<'] = 1;
+  mips_print_operand_punct['>'] = 1;
+  mips_print_operand_punct['{'] = 1;
+  mips_print_operand_punct['}'] = 1;
+  mips_print_operand_punct['^'] = 1;
+  mips_print_operand_punct['$'] = 1;
+  mips_print_operand_punct['+'] = 1;
 
   mips_char_to_class['d'] = TARGET_MIPS16 ? M16_REGS : GR_REGS;
   mips_char_to_class['e'] = M16_NA_REGS;
   mips_char_to_class['t'] = T_REG;
-  mips_char_to_class['f'] = ((TARGET_HARD_FLOAT) ? FP_REGS : NO_REGS);
+  mips_char_to_class['f'] = (TARGET_HARD_FLOAT ? FP_REGS : NO_REGS);
   mips_char_to_class['h'] = HI_REG;
   mips_char_to_class['l'] = LO_REG;
   mips_char_to_class['a'] = HILO_REG;
@@ -4423,7 +4403,7 @@ override_options ()
 
   for (mode = VOIDmode;
        mode != MAX_MACHINE_MODE;
-       mode = (enum machine_mode)((int)mode + 1))
+       mode = (enum machine_mode) ((int)mode + 1))
     {
       register int size                     = GET_MODE_SIZE (mode);
       register enum mode_class class = GET_MODE_CLASS (mode);
@@ -4437,13 +4417,12 @@ override_options ()
              if (mips_isa < 4)
                temp = (regno == FPSW_REGNUM);
              else
-               temp = (ST_REG_P (regno)
-                       || GP_REG_P (regno)
+               temp = (ST_REG_P (regno) || GP_REG_P (regno)
                        || FP_REG_P (regno));
            }
 
          else if (GP_REG_P (regno))
-           temp = ((regno & 1) == 0 || (size <= UNITS_PER_WORD));
+           temp = ((regno & 1) == 0 || size <= UNITS_PER_WORD);
 
          else if (FP_REG_P (regno))
            temp = ((TARGET_FLOAT64 || ((regno & 1) == 0))
@@ -4455,10 +4434,11 @@ override_options ()
          else if (MD_REG_P (regno))
            temp = (class == MODE_INT
                    && (size <= UNITS_PER_WORD
-                       || (regno == MD_REG_FIRST && size == 2 * UNITS_PER_WORD)));
+                       || (regno == MD_REG_FIRST
+                           && size == 2 * UNITS_PER_WORD)));
 
          else
-           temp = FALSE;
+           temp = 0;
 
          mips_hard_regno_mode_ok[(int)mode][regno] = temp;
        }
@@ -4488,37 +4468,36 @@ mips_order_regs_for_local_alloc ()
 }
 
 \f
-/*
- * The MIPS debug format wants all automatic variables and arguments
- * to be in terms of the virtual frame pointer (stack pointer before
- * any adjustment in the function), while the MIPS 3.0 linker wants
- * the frame pointer to be the stack pointer after the initial
- * adjustment.  So, we do the adjustment here.  The arg pointer (which
- * is eliminated) points to the virtual frame pointer, while the frame
- * pointer (which may be eliminated) points to the stack pointer after
- * the initial adjustments.
- */
-
-int
+/* The MIPS debug format wants all automatic variables and arguments
+   to be in terms of the virtual frame pointer (stack pointer before
+   any adjustment in the function), while the MIPS 3.0 linker wants
+   the frame pointer to be the stack pointer after the initial
+   adjustment.  So, we do the adjustment here.  The arg pointer (which
+   is eliminated) points to the virtual frame pointer, while the frame
+   pointer (which may be eliminated) points to the stack pointer after
+   the initial adjustments.  */
+
+HOST_WIDE_INT
 mips_debugger_offset (addr, offset)
      rtx addr;
-     int offset;
+     HOST_WIDE_INT offset;
 {
   rtx offset2 = const0_rtx;
   rtx reg = eliminate_constant_term (addr, &offset2);
 
-  if (!offset)
+  if (offset == 0)
     offset = INTVAL (offset2);
 
   if (reg == stack_pointer_rtx || reg == frame_pointer_rtx
       || reg == hard_frame_pointer_rtx)
     {
-      int frame_size = (!current_frame_info.initialized)
-                               ? compute_frame_size (get_frame_size ())
-                               : current_frame_info.total_size;
+      HOST_WIDE_INT frame_size = (!current_frame_info.initialized)
+                                 ? compute_frame_size (get_frame_size ())
+                                 : current_frame_info.total_size;
 
       offset = offset - frame_size;
     }
+
   /* sdbout_parms does not want this to crash for unrecognized cases.  */
 #if 0
   else if (reg != arg_pointer_rtx)
@@ -4527,7 +4506,6 @@ mips_debugger_offset (addr, offset)
 
   return offset;
 }
-
 \f
 /* A C compound statement to output to stdio stream STREAM the
    assembler syntax for an instruction operand X.  X is an RTL
@@ -4597,10 +4575,6 @@ print_operand (file, op, letter)
     {
       switch (letter)
        {
-       default:
-         error ("PRINT_OPERAND: Unknown punctuation '%c'", letter);
-         break;
-
        case '?':
          if (mips_branch_likely)
            putc ('l', file);
@@ -4650,7 +4624,6 @@ print_operand (file, op, letter)
        case '#':
          if (set_noreorder != 0)
            fputs ("\n\tnop", file);
-
          else if (TARGET_STATS)
            fputs ("\n\t#nop", file);
 
@@ -4678,7 +4651,6 @@ print_operand (file, op, letter)
        case ']': 
          if (set_noat == 0)
            error ("internal error: %%] found without a %%[ in assembler pattern");
-
          else if (--set_noat == 0)
            fputs ("\n\t.set\tat", file);
 
@@ -4692,7 +4664,6 @@ print_operand (file, op, letter)
        case '>':
          if (set_nomacro == 0)
            error ("internal error: %%> found without a %%< in assembler pattern");
-
          else if (--set_nomacro == 0)
            fputs ("\n\t.set\tmacro", file);
 
@@ -4700,18 +4671,22 @@ print_operand (file, op, letter)
 
        case '{':
          if (set_volatile++ == 0)
-           fprintf (file, "%s.set\tvolatile\n\t", (TARGET_MIPS_AS) ? "" : "#");
+           fprintf (file, "%s.set\tvolatile\n\t", TARGET_MIPS_AS ? "" : "#");
          break;
 
        case '}':
          if (set_volatile == 0)
            error ("internal error: %%} found without a %%{ in assembler pattern");
-
          else if (--set_volatile == 0)
            fprintf (file, "\n\t%s.set\tnovolatile", (TARGET_MIPS_AS) ? "" : "#");
 
          break;
+
+       default:
+         error ("PRINT_OPERAND: Unknown punctuation '%c'", letter);
+         break;
        }
+
       return;
     }
 
@@ -4724,10 +4699,7 @@ print_operand (file, op, letter)
   code = GET_CODE (op);
 
   if (code == SIGN_EXTEND)
-    {
-      op = XEXP (op, 0);
-      code = GET_CODE (op);
-    }
+    op = XEXP (op, 0), code = GET_CODE (op);
 
   if (letter == 'C')
     switch (code)
@@ -4742,7 +4714,6 @@ print_operand (file, op, letter)
       case GEU: fputs ("geu", file); break;
       case LTU: fputs ("ltu", file); break;
       case LEU: fputs ("leu", file); break;
-
       default:
        abort_with_insn (op, "PRINT_OPERAND, invalid insn for %%C");
       }
@@ -4760,7 +4731,6 @@ print_operand (file, op, letter)
       case GEU: fputs ("ltu", file); break;
       case LTU: fputs ("geu", file); break;
       case LEU: fputs ("gtu", file); break;
-
       default:
        abort_with_insn (op, "PRINT_OPERAND, invalid insn for %%N");
       }
@@ -4779,9 +4749,11 @@ print_operand (file, op, letter)
 
       if (code != REG)
        abort ();
+
       regnum = REGNO (op);
       if (! ST_REG_P (regnum))
        abort ();
+
       if (regnum != ST_REG_FIRST)
        fprintf (file, "%s,", reg_names[regnum]);
     }
@@ -4817,25 +4789,21 @@ print_operand (file, op, letter)
       fprintf (file, s);
     }
 
-  else if ((letter == 'x') && (GET_CODE(op) == CONST_INT))
-    fprintf (file, "0x%04x", 0xffff & ((int) INTVAL(op)));
-#if HOST_BITS_PER_WIDE_INT <= HOST_BITS_PER_LONG
-  else if ((letter == 'X') && (GET_CODE(op) == CONST_INT))
-    fprintf (file, "0x%08lx", (unsigned long) INTVAL(op));
-#else
-  else if ((letter == 'X') && (GET_CODE(op) == CONST_INT))
-    fprintf (file, HOST_WIDE_INT_PRINT_HEX, INTVAL(op));
-#endif
-  else if ((letter == 'd') && (GET_CODE(op) == CONST_INT))
-    fprintf (file, "%ld", ((long) INTVAL(op)));
+  else if (letter == 'x' && GET_CODE (op) == CONST_INT)
+    fprintf (file, "0x%04x", 0xffff & INTVAL(op));
+
+  else if (letter == 'X' && GET_CODE(op) == CONST_INT)
+    fprintf (file, HOST_WIDE_INT_PRINT_HEX, INTVAL (op));
 
-  else if (letter == 'z'
-          && (GET_CODE (op) == CONST_INT)
-          && INTVAL (op) == 0)
+  else if (letter == 'd' && GET_CODE(op) == CONST_INT)
+    fprintf (file, HOST_WIDE_INT_PRINT_DEC, (INTVAL(op)));
+
+  else if (letter == 'z' && GET_CODE (op) == CONST_INT && INTVAL (op) == 0)
     fputs (reg_names[GP_REG_FIRST], file);
 
   else if (letter == 'd' || letter == 'x' || letter == 'X')
-    fatal ("PRINT_OPERAND: letter %c was found & insn was not CONST_INT", letter);
+    fatal ("PRINT_OPERAND: letter %c was found & insn was not CONST_INT",
+          letter);
 
   else if (letter == 'B')
     fputs (code == EQ ? "z" : "n", file);
@@ -4862,7 +4830,6 @@ print_operand (file, op, letter)
   else
     output_addr_const (file, op);
 }
-
 \f
 /* A C compound statement to output to stdio stream STREAM the
    assembler syntax for an instruction operand that is a memory
@@ -4884,10 +4851,6 @@ print_operand_address (file, addr)
   else
     switch (GET_CODE (addr))
       {
-      default:
-       abort_with_insn (addr, "PRINT_OPERAND_ADDRESS, invalid insn #1");
-       break;
-
       case REG:
        if (! TARGET_MIPS16 && REGNO (addr) == ARG_POINTER_REGNUM)
          abort_with_insn (addr, "Arg pointer not eliminated.");
@@ -4897,14 +4860,15 @@ print_operand_address (file, addr)
 
       case LO_SUM:
        {
-         register rtx arg0   = XEXP (addr, 0);
-         register rtx arg1   = XEXP (addr, 1);
+         register rtx arg0 = XEXP (addr, 0);
+         register rtx arg1 = XEXP (addr, 1);
 
          if (! mips_split_addresses)
            abort_with_insn (addr, "PRINT_OPERAND_ADDRESS, Spurious LO_SUM.");
 
          if (GET_CODE (arg0) != REG)
-           abort_with_insn (addr, "PRINT_OPERAND_ADDRESS, LO_SUM with #1 not REG.");
+           abort_with_insn (addr,
+                            "PRINT_OPERAND_ADDRESS, LO_SUM with #1 not REG.");
 
          fprintf (file, "%%lo(");
          print_operand_address (file, arg1);
@@ -4914,10 +4878,10 @@ print_operand_address (file, addr)
 
       case PLUS:
        {
-         register rtx reg    = (rtx)0;
-         register rtx offset = (rtx)0;
-         register rtx arg0   = XEXP (addr, 0);
-         register rtx arg1   = XEXP (addr, 1);
+         register rtx reg 0;
+         register rtx offset = 0;
+         register rtx arg0 = XEXP (addr, 0);
+         register rtx arg1 = XEXP (addr, 1);
 
          if (GET_CODE (arg0) == REG)
            {
@@ -4926,11 +4890,9 @@ print_operand_address (file, addr)
              if (GET_CODE (offset) == REG)
                abort_with_insn (addr, "PRINT_OPERAND_ADDRESS, 2 regs");
            }
+
          else if (GET_CODE (arg1) == REG)
-           {
-             reg = arg1;
-             offset = arg0;
-           }
+             reg = arg1, offset = arg0;
          else if (CONSTANT_P (arg0) && CONSTANT_P (arg1))
            {
              output_addr_const (file, addr);
@@ -4939,7 +4901,7 @@ print_operand_address (file, addr)
          else
            abort_with_insn (addr, "PRINT_OPERAND_ADDRESS, no regs");
 
-         if (!CONSTANT_P (offset))
+         if (! CONSTANT_P (offset))
            abort_with_insn (addr, "PRINT_OPERAND_ADDRESS, invalid insn #2");
 
          if (REGNO (reg) == ARG_POINTER_REGNUM)
@@ -4965,22 +4927,24 @@ print_operand_address (file, addr)
       case CONST:
        output_addr_const (file, addr);
        break;
+
+      default:
+       abort_with_insn (addr, "PRINT_OPERAND_ADDRESS, invalid insn #1");
+       break;
     }
 }
 
 \f
-/* If optimizing for the global pointer, keep track of all of
-   the externs, so that at the end of the file, we can emit
-   the appropriate .extern declaration for them, before writing
-   out the text section.  We assume that all names passed to
-   us are in the permanent obstack, so that they will be valid
-   at the end of the compilation.
-
-   If we have -G 0, or the extern size is unknown, or the object is in
-   a user specified section that is not .sbss/.sdata, don't bother
-   emitting the .externs.  In the case of user specified sections this
-   behaviour is required as otherwise GAS will think the object lives in
-   .sbss/.sdata.  */
+/* If optimizing for the global pointer, keep track of all of the externs, so
+   that at the end of the file, we can emit the appropriate .extern
+   declaration for them, before writing out the text section.  We assume all
+   names passed to us are in the permanent obstack, so they will be valid at
+   the end of the compilation.
+
+   If we have -G 0, or the extern size is unknown, or the object is in a user
+   specified section that is not .sbss/.sdata, don't bother emitting the
+   .externs.  In the case of user specified sections this behaviour is
+   required as otherwise GAS will think the object lives in .sbss/.sdata.  */
 
 int
 mips_output_external (file, decl, name)
@@ -4993,13 +4957,13 @@ mips_output_external (file, decl, name)
   tree section_name;
 
   if (TARGET_GP_OPT
-      && ((TREE_CODE (decl)) != FUNCTION_DECL)
-      && ((len = int_size_in_bytes (TREE_TYPE (decl))) > 0)
-      && (((section_name = DECL_SECTION_NAME (decl)) == NULL)
+      && TREE_CODE (decl) != FUNCTION_DECL
+      && (len = int_size_in_bytes (TREE_TYPE (decl))) > 0
+      && ((section_name = DECL_SECTION_NAME (decl)) == NULL
          || strcmp (TREE_STRING_POINTER (section_name), ".sbss") == 0
          || strcmp (TREE_STRING_POINTER (section_name), ".sdata") == 0))
     {
-      p = (struct extern_list *)permalloc ((long) sizeof (struct extern_list));
+      p = (struct extern_list *) permalloc (sizeof (struct extern_list));
       p->next = extern_head;
       p->name = name;
       p->size = len;
@@ -5015,7 +4979,7 @@ mips_output_external (file, decl, name)
         bootstrap under Irix 5.1.  */
       && strcmp (name, "__builtin_next_arg"))
     {
-      p = (struct extern_list *)permalloc ((long) sizeof (struct extern_list));
+      p = (struct extern_list *) permalloc (sizeof (struct extern_list));
       p->next = extern_head;
       p->name = name;
       p->size = -1;
@@ -5034,7 +4998,7 @@ mips_output_external_libcall (file, name)
 {
   register struct extern_list *p;
 
-  p = (struct extern_list *)permalloc ((long) sizeof (struct extern_list));
+  p = (struct extern_list *) permalloc (sizeof (struct extern_list));
   p->next = extern_head;
   p->name = name;
   p->size = -1;
@@ -5043,7 +5007,6 @@ mips_output_external_libcall (file, name)
   return 0;
 }
 #endif
-
 \f
 /* Compute a string to use as a temporary file name.  */
 
@@ -5062,7 +5025,7 @@ make_temp_file ()
   char *base = getenv ("TMPDIR");
   int len;
 
-  if (base == (char *)0)
+  if (base == 0)
     {
 #ifdef P_tmpdir
       if (access (P_tmpdir, R_OK | W_OK) == 0)
@@ -5097,7 +5060,6 @@ make_temp_file ()
 #endif
   return stream;
 }
-
 \f
 /* Emit a new filename to a stream.  If this is MIPS ECOFF, watch out
    for .file's that start within a function.  If we are smuggling stabs, try to
@@ -5108,12 +5070,12 @@ mips_output_filename (stream, name)
      FILE *stream;
      char *name;
 {
-  static int first_time = TRUE;
+  static int first_time = 1;
   char ltext_label_name[100];
 
   if (first_time)
     {
-      first_time = FALSE;
+      first_time = 0;
       SET_FILE_NUMBER ();
       current_function_file = name;
       ASM_OUTPUT_FILENAME (stream, num_source_filenames, name);
@@ -5137,8 +5099,8 @@ mips_output_filename (stream, name)
        {
          if (!file_in_function_warning)
            {
-             file_in_function_warning = TRUE;
-             ignore_line_number = TRUE;
+             file_in_function_warning = 1;
+             ignore_line_number = 1;
              warning ("MIPS ECOFF format does not allow changing filenames within functions with #line");
            }
        }
@@ -5150,7 +5112,6 @@ mips_output_filename (stream, name)
        }
     }
 }
-
 \f
 /* Emit a linenumber.  For encapsulated stabs, we need to put out a stab
    as well as a .loc, since it is possible that MIPS ECOFF might not be
@@ -5179,22 +5140,19 @@ mips_output_lineno (stream, line)
       LABEL_AFTER_LOC (stream);
     }
 }
-
 \f
-/* If defined, a C statement to be executed just prior to the
-   output of assembler code for INSN, to modify the extracted
-   operands so they will be output differently.
+/* If defined, a C statement to be executed just prior to the output of
+   assembler code for INSN, to modify the extracted operands so they will be
+   output differently.
 
-   Here the argument OPVEC is the vector containing the operands
-   extracted from INSN, and NOPERANDS is the number of elements of
-   the vector which contain meaningful data for this insn.  The
-   contents of this vector are what will be used to convert the
-   insn template into assembler code, so you can change the
-   assembler output by changing the contents of the vector.
+   Here the argument OPVEC is the vector containing the operands extracted
+   from INSN, and NOPERANDS is the number of elements of the vector which
+   contain meaningful data for this insn.  The contents of this vector are
+   what will be used to convert the insn template into assembler code, so you
+   can change the assembler output by changing the contents of the vector.
 
-   We use it to check if the current insn needs a nop in front of it
-   because of load delays, and also to update the delay slot
-   statistics.  */
+   We use it to check if the current insn needs a nop in front of it because
+   of load delays, and also to update the delay slot statistics.  */
 
 /* ??? There is no real need for this function, because it never actually
    emits a NOP anymore.  */
@@ -5212,10 +5170,11 @@ final_prescan_insn (insn, opvec, noperands)
 
       /* Do we need to emit a NOP? */
       if (length == 0
-         || (mips_load_reg  != (rtx)0 && reg_mentioned_p (mips_load_reg,  pattern))
-         || (mips_load_reg2 != (rtx)0 && reg_mentioned_p (mips_load_reg2, pattern))
-         || (mips_load_reg3 != (rtx)0 && reg_mentioned_p (mips_load_reg3, pattern))
-         || (mips_load_reg4 != (rtx)0 && reg_mentioned_p (mips_load_reg4, pattern)))
+         || (mips_load_reg != 0 && reg_mentioned_p (mips_load_reg,  pattern))
+         || (mips_load_reg2 != 0 && reg_mentioned_p (mips_load_reg2, pattern))
+         || (mips_load_reg3 != 0 && reg_mentioned_p (mips_load_reg3, pattern))
+         || (mips_load_reg4 != 0
+             && reg_mentioned_p (mips_load_reg4, pattern)))
        fputs ("\t#nop\n", asm_out_file);
 
       else
@@ -5224,28 +5183,24 @@ final_prescan_insn (insn, opvec, noperands)
       while (--dslots_number_nops > 0)
        fputs ("\t#nop\n", asm_out_file);
 
-      mips_load_reg  = (rtx)0;
-      mips_load_reg2 = (rtx)0;
-      mips_load_reg3 = (rtx)0;
-      mips_load_reg4 = (rtx)0;
+      mips_load_reg 0;
+      mips_load_reg2 = 0;
+      mips_load_reg3 = 0;
+      mips_load_reg4 = 0;
     }
 
-  if (TARGET_STATS)
-    {
-      enum rtx_code code = GET_CODE (insn);
-      if (code == JUMP_INSN || code == CALL_INSN)
-       dslots_jump_total++;
-    }
+  if (TARGET_STATS
+      && (GET_CODE (insn) == JUMP_INSN || GET_CODE (insn) == CALL_INSN))
+    dslots_jump_total++;
 }
-
 \f
 /* Output at beginning of assembler file.
-   If we are optimizing to use the global pointer, create a temporary
-   file to hold all of the text stuff, and write it out to the end.
-   This is needed because the MIPS assembler is evidently one pass,
-   and if it hasn't seen the relevant .comm/.lcomm/.extern/.sdata
-   declaration when the code is processed, it generates a two
-   instruction sequence.  */
+
+   If we are optimizing to use the global pointer, create a temporary file to
+   hold all of the text stuff, and write it out to the end. This is needed
+   because the MIPS assembler is evidently one pass, and if it hasn't seen the
+   relevant .comm/.lcomm/.extern/.sdata declaration when the code is
+   processed, it generates a two instruction sequence.  */
 
 void
 mips_asm_file_start (stream)
@@ -5253,10 +5208,10 @@ mips_asm_file_start (stream)
 {
   ASM_OUTPUT_SOURCE_FILENAME (stream, main_input_filename);
 
-  /* Versions of the MIPS assembler before 2.20 generate errors
-     if a branch inside of a .set noreorder section jumps to a
-     label outside of the .set noreorder section.  Revision 2.20
-     just set nobopt silently rather than fixing the bug.  */
+  /* Versions of the MIPS assembler before 2.20 generate errors if a branch
+     inside of a .set noreorder section jumps to a label outside of the .set
+     noreorder section.  Revision 2.20 just set nobopt silently rather than
+     fixing the bug.  */
 
   if (TARGET_MIPS_AS && optimize && flag_delayed_branch)
     fprintf (stream, "\t.set\tnobopt\n");
@@ -5285,6 +5240,7 @@ mips_asm_file_start (stream)
       asm_out_data_file = stream;
       asm_out_text_file = make_temp_file ();
     }
+
   else
     asm_out_data_file = asm_out_text_file = stream;
 
@@ -5293,13 +5249,11 @@ mips_asm_file_start (stream)
             ASM_COMMENT_START,
             mips_section_threshold, mips_cpu_string, mips_isa);
 }
-
 \f
-/* If we are optimizing the global pointer, emit the text section now
-   and any small externs which did not have .comm, etc that are
-   needed.  Also, give a warning if the data area is more than 32K and
-   -pic because 3 instructions are needed to reference the data
-   pointers.  */
+/* If we are optimizing the global pointer, emit the text section now and any
+   small externs which did not have .comm, etc that are needed.  Also, give a
+   warning if the data area is more than 32K and -pic because 3 instructions
+   are needed to reference the data pointers.  */
 
 void
 mips_asm_file_end (file)
@@ -5364,10 +5318,8 @@ mips_asm_file_end (file)
     }
 }
 
-\f
-/* Emit either a label, .comm, or .lcomm directive, and mark
-   that the symbol is used, so that we don't emit an .extern
-   for it in mips_asm_file_end.  */
+/* Emit either a label, .comm, or .lcomm directive, and mark that the symbol
+   is used, so that we don't emit an .extern for it in mips_asm_file_end.  */
 
 void
 mips_declare_object (stream, name, init_string, final_string, size)
@@ -5387,7 +5339,6 @@ mips_declare_object (stream, name, init_string, final_string, size)
       TREE_ASM_WRITTEN (name_tree) = 1;
     }
 }
-
 \f
 /* Output a double precision value to the assembler.  If both the
    host and target are IEEE, emit the values in hex.  */
@@ -5408,7 +5359,6 @@ mips_output_double (stream, value)
 #endif
 }
 
-
 /* Output a single precision value to the assembler.  If both the
    host and target are IEEE, emit the values in hex.  */
 
@@ -5426,7 +5376,6 @@ mips_output_float (stream, value)
   fprintf (stream, "\t.float\t%.12g\n", value);
 #endif
 }
-
 \f
 /* Return the bytes needed to compute the frame pointer from the current
    stack pointer.
@@ -5481,30 +5430,30 @@ mips_output_float (stream, value)
 
 */
 
-long
+HOST_WIDE_INT
 compute_frame_size (size)
      HOST_WIDE_INT size;       /* # of var. bytes allocated */
 {
   int regno;
-  long total_size;             /* # bytes that the entire frame takes up */
-  long var_size;               /* # bytes that variables take up */
-  long args_size;              /* # bytes that outgoing arguments take up */
-  long extra_size;             /* # extra bytes */
-  long gp_reg_rounded;         /* # bytes needed to store gp after rounding */
-  long gp_reg_size;            /* # bytes needed to store gp regs */
-  long fp_reg_size;            /* # bytes needed to store fp regs */
+  HOST_WIDE_INT total_size;    /* # bytes that the entire frame takes up */
+  HOST_WIDE_INT var_size;      /* # bytes that variables take up */
+  HOST_WIDE_INT args_size;     /* # bytes that outgoing arguments take up */
+  HOST_WIDE_INT extra_size;    /* # extra bytes */
+  HOST_WIDE_INT gp_reg_rounded;        /* # bytes needed to store gp after rounding */
+  HOST_WIDE_INT gp_reg_size;   /* # bytes needed to store gp regs */
+  HOST_WIDE_INT fp_reg_size;   /* # bytes needed to store fp regs */
   long mask;                   /* mask of saved gp registers */
   long fmask;                  /* mask of saved fp registers */
   int  fp_inc;                 /* 1 or 2 depending on the size of fp regs */
   long fp_bits;                        /* bitmask to use for each fp register */
 
-  gp_reg_size   = 0;
-  fp_reg_size   = 0;
-  mask          = 0;
-  fmask                 = 0;
-  extra_size    = MIPS_STACK_ALIGN (((TARGET_ABICALLS) ? UNITS_PER_WORD : 0));
-  var_size      = MIPS_STACK_ALIGN (size);
-  args_size     = MIPS_STACK_ALIGN (current_function_outgoing_args_size);
+  gp_reg_size = 0;
+  fp_reg_size = 0;
+  mask = 0;
+  fmask        = 0;
+  extra_size = MIPS_STACK_ALIGN (((TARGET_ABICALLS) ? UNITS_PER_WORD : 0));
+  var_size = MIPS_STACK_ALIGN (size);
+  args_size = MIPS_STACK_ALIGN (current_function_outgoing_args_size);
 
   /* The MIPS 3.0 linker does not like functions that dynamically
      allocate the stack and have 0 for STACK_DYNAMIC_OFFSET, since it
@@ -5512,7 +5461,7 @@ compute_frame_size (size)
      function, so allocate some stack space to make it happy.  */
 
   if (args_size == 0 && current_function_calls_alloca)
-    args_size = 4*UNITS_PER_WORD;
+    args_size = 4 * UNITS_PER_WORD;
 
   total_size = var_size + args_size + extra_size;
 
@@ -5607,17 +5556,17 @@ compute_frame_size (size)
     total_size = 32;
 
   /* Save other computed information.  */
-  current_frame_info.total_size  = total_size;
-  current_frame_info.var_size    = var_size;
-  current_frame_info.args_size   = args_size;
-  current_frame_info.extra_size  = extra_size;
+  current_frame_info.total_size = total_size;
+  current_frame_info.var_size = var_size;
+  current_frame_info.args_size = args_size;
+  current_frame_info.extra_size = extra_size;
   current_frame_info.gp_reg_size = gp_reg_size;
   current_frame_info.fp_reg_size = fp_reg_size;
-  current_frame_info.mask       = mask;
-  current_frame_info.fmask      = fmask;
+  current_frame_info.mask = mask;
+  current_frame_info.fmask = fmask;
   current_frame_info.initialized = reload_completed;
-  current_frame_info.num_gp     = gp_reg_size / UNITS_PER_WORD;
-  current_frame_info.num_fp     = fp_reg_size / (fp_inc * UNITS_PER_FPREG);
+  current_frame_info.num_gp = gp_reg_size / UNITS_PER_WORD;
+  current_frame_info.num_fp = fp_reg_size / (fp_inc * UNITS_PER_FPREG);
 
   if (mask)
     {
@@ -5639,7 +5588,6 @@ compute_frame_size (size)
       current_frame_info.gp_save_offset = 0;
     }
 
-
   if (fmask)
     {
       unsigned long offset = (args_size + extra_size + var_size
@@ -5657,7 +5605,6 @@ compute_frame_size (size)
   /* Ok, we're done.  */
   return total_size;
 }
-
 \f
 /* Common code to emit the insns (or to write the instructions to a file)
    to save/restore registers.
@@ -5665,47 +5612,49 @@ compute_frame_size (size)
    Other parts of the code assume that MIPS_TEMP1_REGNUM (aka large_reg)
    is not modified within save_restore_insns.  */
 
-#define BITSET_P(value,bit) (((value) & (1L << (bit))) != 0)
+#define BITSET_P(VALUE,BIT) (((VALUE) & (1L << (BIT))) != 0)
 
 static void
 save_restore_insns (store_p, large_reg, large_offset, file)
-     int store_p;              /* true if this is prologue */
-     rtx large_reg;            /* register holding large offset constant or NULL */
-     long large_offset;                /* large constant offset value */
-     FILE *file;               /* file to write instructions to instead of making RTL */
+     int store_p;      /* true if this is prologue */
+     rtx large_reg;    /* register holding large offset constant or NULL */
+     long large_offset;        /* large constant offset value */
+     FILE *file;       /* file to write instructions instead of making RTL */
 {
-  long mask            = current_frame_info.mask;
-  long fmask           = current_frame_info.fmask;
+  long mask = current_frame_info.mask;
+  long fmask = current_frame_info.fmask;
   int regno;
   rtx base_reg_rtx;
-  long base_offset;
-  long gp_offset;
-  long fp_offset;
-  long end_offset;
+  HOST_WIDE_INT base_offset;
+  HOST_WIDE_INT gp_offset;
+  HOST_WIDE_INT fp_offset;
+  HOST_WIDE_INT end_offset;
   rtx insn;
 
-  if (frame_pointer_needed && !BITSET_P (mask, HARD_FRAME_POINTER_REGNUM - GP_REG_FIRST))
+  if (frame_pointer_needed
+      && ! BITSET_P (mask, FRAME_POINTER_REGNUM - GP_REG_FIRST))
     abort ();
 
   if (mask == 0 && fmask == 0)
     return;
 
-  /* Save registers starting from high to low.  The debuggers prefer
-     at least the return register be stored at func+4, and also it
-     allows us not to need a nop in the epilog if at least one
-     register is reloaded in addition to return address.  */
+  /* Save registers starting from high to low.  The debuggers prefer at least
+     the return register be stored at func+4, and also it allows us not to
+     need a nop in the epilog if at least one register is reloaded in
+     addition to return address.  */
 
   /* Save GP registers if needed.  */
   if (mask)
     {
-      /* Pick which pointer to use as a base register.  For small
-        frames, just use the stack pointer.  Otherwise, use a
-        temporary register.  Save 2 cycles if the save area is near
-        the end of a large frame, by reusing the constant created in
-        the prologue/epilogue to adjust the stack frame.  */
+      /* Pick which pointer to use as a base register.  For small frames, just
+        use the stack pointer.  Otherwise, use a temporary register.  Save 2
+        cycles if the save area is near the end of a large frame, by reusing
+        the constant created in the prologue/epilogue to adjust the stack
+        frame.  */
 
-      gp_offset  = current_frame_info.gp_sp_offset;
-      end_offset = gp_offset - (current_frame_info.gp_reg_size - UNITS_PER_WORD);
+      gp_offset = current_frame_info.gp_sp_offset;
+      end_offset
+       = gp_offset - (current_frame_info.gp_reg_size - UNITS_PER_WORD);
 
       if (gp_offset < 0 || end_offset < 0)
        fatal ("gp_offset (%ld) or end_offset (%ld) is less than zero.",
@@ -5714,29 +5663,25 @@ save_restore_insns (store_p, large_reg, large_offset, file)
       /* If we see a large frame in mips16 mode, we save the registers
          before adjusting the stack pointer, and load them afterward.  */
       else if (TARGET_MIPS16 && large_offset > 32767)
-       {
-         base_reg_rtx = stack_pointer_rtx;
-         base_offset = large_offset;
-       }
+       base_reg_rtx = stack_pointer_rtx, base_offset = large_offset;
 
       else if (gp_offset < 32768)
-       {
-         base_reg_rtx = stack_pointer_rtx;
-         base_offset  = 0;
-       }
+       base_reg_rtx = stack_pointer_rtx, base_offset  = 0;
 
-      else if (large_reg != (rtx)0
-              && (((unsigned long)(large_offset - gp_offset))  < 32768)
-              && (((unsigned long)(large_offset - end_offset)) < 32768))
+      else if (large_reg != 0
+              && (unsigned HOST_WIDE_INT) (large_offset - gp_offset) < 32768
+              && (unsigned HOST_WIDE_INT) (large_offset - end_offset) < 32768)
        {
          base_reg_rtx = gen_rtx (REG, Pmode, MIPS_TEMP2_REGNUM);
-         base_offset  = large_offset;
-         if (file == (FILE *)0)
+         base_offset = large_offset;
+         if (file == 0)
            {
              if (Pmode == DImode)
-               insn = emit_insn (gen_adddi3 (base_reg_rtx, large_reg, stack_pointer_rtx));
+               insn = emit_insn (gen_adddi3 (base_reg_rtx, large_reg,
+                                             stack_pointer_rtx));
              else
-               insn = emit_insn (gen_addsi3 (base_reg_rtx, large_reg, stack_pointer_rtx));
+               insn = emit_insn (gen_addsi3 (base_reg_rtx, large_reg,
+                                             stack_pointer_rtx));
              if (store_p)
                RTX_FRAME_RELATED_P (insn) = 1;
            }
@@ -5751,8 +5696,8 @@ save_restore_insns (store_p, large_reg, large_offset, file)
       else
        {
          base_reg_rtx = gen_rtx (REG, Pmode, MIPS_TEMP2_REGNUM);
-         base_offset  = gp_offset;
-         if (file == (FILE *)0)
+         base_offset = gp_offset;
+         if (file == 0)
            {
              rtx gp_offset_rtx = GEN_INT (gp_offset);
 
@@ -5768,8 +5713,9 @@ save_restore_insns (store_p, large_reg, large_offset, file)
                                         GEN_INT (gp_offset & 0xffff0000));
                  if (store_p)
                    RTX_FRAME_RELATED_P (insn) = 1;
-                 insn = emit_insn (gen_iorsi3 (base_reg_rtx, base_reg_rtx,
-                                               GEN_INT (gp_offset & 0x0000ffff)));
+                 insn
+                   = emit_insn (gen_iorsi3 (base_reg_rtx, base_reg_rtx,
+                                            GEN_INT (gp_offset & 0x0000ffff)));
                  if (store_p)
                    RTX_FRAME_RELATED_P (insn) = 1;
                }
@@ -5781,17 +5727,18 @@ save_restore_insns (store_p, large_reg, large_offset, file)
                }
 
              if (Pmode == DImode)
-               insn = emit_insn (gen_adddi3 (base_reg_rtx, base_reg_rtx, stack_pointer_rtx));
+               insn = emit_insn (gen_adddi3 (base_reg_rtx, base_reg_rtx,
+                                             stack_pointer_rtx));
              else
-               insn = emit_insn (gen_addsi3 (base_reg_rtx, base_reg_rtx, stack_pointer_rtx));
+               insn = emit_insn (gen_addsi3 (base_reg_rtx, base_reg_rtx,
+                                             stack_pointer_rtx));
              if (store_p)
                RTX_FRAME_RELATED_P (insn) = 1;
            }
          else
            fprintf (file, "\tli\t%s,0x%.08lx\t# %ld\n\t%s\t%s,%s,%s\n",
                     reg_names[MIPS_TEMP2_REGNUM],
-                    (long)base_offset,
-                    (long)base_offset,
+                    base_offset, base_offset,
                     Pmode == DImode ? "daddu" : "addu",
                     reg_names[MIPS_TEMP2_REGNUM],
                     reg_names[MIPS_TEMP2_REGNUM],
@@ -5812,105 +5759,103 @@ save_restore_insns (store_p, large_reg, large_offset, file)
        base_offset += current_function_outgoing_args_size;
 
       for (regno = GP_REG_LAST; regno >= GP_REG_FIRST; regno--)
-       {
-         if (BITSET_P (mask, regno - GP_REG_FIRST))
-           {
-             if (file == (FILE *)0)
-               {
-                 rtx reg_rtx;
-                 rtx mem_rtx = gen_rtx (MEM, word_mode,
-                                        gen_rtx (PLUS, Pmode, base_reg_rtx,
-                                                 GEN_INT (gp_offset - base_offset)));
-                 RTX_UNCHANGING_P (mem_rtx) = 1;
-
-                 /* The mips16 does not have an instruction to load
-                     $31, so we load $7 instead, and work things out
-                     in the caller.  */
-                 if (TARGET_MIPS16 && ! store_p && regno == GP_REG_FIRST + 31)
-                   reg_rtx = gen_rtx (REG, word_mode, GP_REG_FIRST + 7);
-                 /* The mips16 sometimes needs to save $18.  */
-                 else if (TARGET_MIPS16
-                          && regno != GP_REG_FIRST + 31
-                          && ! M16_REG_P (regno))
-                   {
-                     if (! store_p)
-                       reg_rtx = gen_rtx (REG, word_mode, 6);
-                     else
-                       {
-                         reg_rtx = gen_rtx (REG, word_mode, 3);
-                         emit_move_insn (reg_rtx,
-                                         gen_rtx (REG, word_mode, regno));
-                       }
-                   }
-                 else
-                   reg_rtx = gen_rtx (REG, word_mode, regno);
-                 if (store_p)
-                   {
-                     insn = emit_move_insn (mem_rtx, reg_rtx);
-                     RTX_FRAME_RELATED_P (insn) = 1;
-                   }
-                 else if (!TARGET_ABICALLS || mips_abi != ABI_32
-                          || regno != (PIC_OFFSET_TABLE_REGNUM - GP_REG_FIRST))
-                   {
-                     emit_move_insn (reg_rtx, mem_rtx);
-                     if (TARGET_MIPS16
-                         && regno != GP_REG_FIRST + 31
-                         && ! M16_REG_P (regno))
-                       emit_move_insn (gen_rtx (REG, word_mode, regno),
-                                       reg_rtx);
-                   }
-               }
-             else
-               {
-                 if (store_p || !TARGET_ABICALLS || mips_abi != ABI_32
-                     || regno != (PIC_OFFSET_TABLE_REGNUM - GP_REG_FIRST))
-                   {
-                     int r = regno;
-
-                     /* The mips16 does not have an instruction to
-                         load $31, so we load $7 instead, and work
-                         things out in the caller.  */
-                     if (TARGET_MIPS16 && ! store_p && r == GP_REG_FIRST + 31)
-                       r = GP_REG_FIRST + 7;
+       if (BITSET_P (mask, regno - GP_REG_FIRST))
+         {
+           if (file == 0)
+             {
+               rtx reg_rtx;
+               rtx mem_rtx
+                 = gen_rtx (MEM, word_mode,
+                            gen_rtx (PLUS, Pmode, base_reg_rtx,
+                                     GEN_INT (gp_offset - base_offset)));
+
+               RTX_UNCHANGING_P (mem_rtx) = 1;
+
+               /* The mips16 does not have an instruction to load
+                   $31, so we load $7 instead, and work things out
+                   in the caller.  */
+               if (TARGET_MIPS16 && ! store_p && regno == GP_REG_FIRST + 31)
+                 reg_rtx = gen_rtx (REG, word_mode, GP_REG_FIRST + 7);
+               /* The mips16 sometimes needs to save $18.  */
+               else if (TARGET_MIPS16
+                        && regno != GP_REG_FIRST + 31
+                        && ! M16_REG_P (regno))
+                 {
+                   if (! store_p)
+                     reg_rtx = gen_rtx (REG, word_mode, 6);
+                   else
+                     {
+                       reg_rtx = gen_rtx (REG, word_mode, 3);
+                       emit_move_insn (reg_rtx,
+                                       gen_rtx (REG, word_mode, regno));
+                     }
+                 }
+               else
+                 reg_rtx = gen_rtx (REG, word_mode, regno);
+
+               if (store_p)
+                 {
+                   insn = emit_move_insn (mem_rtx, reg_rtx);
+                   RTX_FRAME_RELATED_P (insn) = 1;
+                 }
+               else if (!TARGET_ABICALLS || mips_abi != ABI_32
+                        || regno != (PIC_OFFSET_TABLE_REGNUM - GP_REG_FIRST))
+                 {
+                   emit_move_insn (reg_rtx, mem_rtx);
+                   if (TARGET_MIPS16
+                       && regno != GP_REG_FIRST + 31
+                       && ! M16_REG_P (regno))
+                     emit_move_insn (gen_rtx (REG, word_mode, regno),
+                                     reg_rtx);
+                 }
+             }
+           else
+             {
+               if (store_p || !TARGET_ABICALLS || mips_abi != ABI_32
+                   || regno != (PIC_OFFSET_TABLE_REGNUM - GP_REG_FIRST))
+                 {
+                   int r = regno;
+
+                   /* The mips16 does not have an instruction to
+                       load $31, so we load $7 instead, and work
+                       things out in the caller.  */
+                   if (TARGET_MIPS16 && ! store_p && r == GP_REG_FIRST + 31)
+                     r = GP_REG_FIRST + 7;
                      /* The mips16 sometimes needs to save $18.  */
-                     if (TARGET_MIPS16
-                         && regno != GP_REG_FIRST + 31
-                         && ! M16_REG_P (regno))
-                       {
-                         if (! store_p)
-                           r = GP_REG_FIRST + 6;
-                         else
-                           {
-                             r = GP_REG_FIRST + 3;
-                             fprintf (file, "\tmove\t%s,%s\n",
-                                      reg_names[r], reg_names[regno]);
-                           }
-                       }
-                     fprintf (file, "\t%s\t%s,%ld(%s)\n",
-                              (TARGET_64BIT
-                               ? (store_p) ? "sd" : "ld"
-                               : (store_p) ? "sw" : "lw"),
-                              reg_names[r],
-                              gp_offset - base_offset,
-                              reg_names[REGNO(base_reg_rtx)]);
-                     if (! store_p
-                         && TARGET_MIPS16
-                         && regno != GP_REG_FIRST + 31
-                         && ! M16_REG_P (regno))
-                       fprintf (file, "\tmove\t%s,%s\n",
-                                reg_names[regno], reg_names[r]);
-                   }
-
-               }
-             gp_offset -= UNITS_PER_WORD;
-           }
-       }
+                   if (TARGET_MIPS16
+                       && regno != GP_REG_FIRST + 31
+                       && ! M16_REG_P (regno))
+                     {
+                       if (! store_p)
+                         r = GP_REG_FIRST + 6;
+                       else
+                         {
+                           r = GP_REG_FIRST + 3;
+                           fprintf (file, "\tmove\t%s,%s\n",
+                                    reg_names[r], reg_names[regno]);
+                         }
+                     }
+                   fprintf (file, "\t%s\t%s,%ld(%s)\n",
+                            (TARGET_64BIT
+                             ? (store_p) ? "sd" : "ld"
+                             : (store_p) ? "sw" : "lw"),
+                            reg_names[r],
+                            gp_offset - base_offset,
+                            reg_names[REGNO(base_reg_rtx)]);
+                   if (! store_p
+                       && TARGET_MIPS16
+                       && regno != GP_REG_FIRST + 31
+                       && ! M16_REG_P (regno))
+                     fprintf (file, "\tmove\t%s,%s\n",
+                              reg_names[regno], reg_names[r]);
+                 }
+
+             }
+           gp_offset -= UNITS_PER_WORD;
+         }
     }
   else
-    {
-      base_reg_rtx = (rtx)0;           /* Make sure these are initialized */
-      base_offset  = 0;
-    }
+    base_reg_rtx = 0, base_offset  = 0;
 
   /* Save floating point registers if needed.  */
   if (fmask)
@@ -5919,7 +5864,7 @@ save_restore_insns (store_p, large_reg, large_offset, file)
       int fp_size = fp_inc * UNITS_PER_FPREG;
 
       /* Pick which pointer to use as a base register.  */
-      fp_offset  = current_frame_info.fp_sp_offset;
+      fp_offset = current_frame_info.fp_sp_offset;
       end_offset = fp_offset - (current_frame_info.fp_reg_size - fp_size);
 
       if (fp_offset < 0 || end_offset < 0)
@@ -5927,33 +5872,31 @@ save_restore_insns (store_p, large_reg, large_offset, file)
               fp_offset, end_offset);
 
       else if (fp_offset < 32768)
-       {
-         base_reg_rtx = stack_pointer_rtx;
-         base_offset  = 0;
-       }
+       base_reg_rtx = stack_pointer_rtx, base_offset  = 0;
 
-      else if (base_reg_rtx != (rtx)0
-              && (((unsigned long)(base_offset - fp_offset))  < 32768)
-              && (((unsigned long)(base_offset - end_offset)) < 32768))
-       {
-         ;                     /* already set up for gp registers above */
-       }
+      else if (base_reg_rtx != 0
+              && (unsigned HOST_WIDE_INT) (base_offset - fp_offset) < 32768
+              && (unsigned HOST_WIDE_INT) (base_offset - end_offset) < 32768)
+       ;                       /* already set up for gp registers above */
 
-      else if (large_reg != (rtx)0
-              && (((unsigned long)(large_offset - fp_offset))  < 32768)
-              && (((unsigned long)(large_offset - end_offset)) < 32768))
+      else if (large_reg != 0
+              && (unsigned HOST_WIDE_INT) (large_offset - fp_offset) < 32768
+              && (unsigned HOST_WIDE_INT) (large_offset - end_offset) < 32768)
        {
          base_reg_rtx = gen_rtx (REG, Pmode, MIPS_TEMP2_REGNUM);
-         base_offset  = large_offset;
-         if (file == (FILE *)0)
+         base_offset = large_offset;
+         if (file == 0)
            {
              if (Pmode == DImode)
-               insn = emit_insn (gen_adddi3 (base_reg_rtx, large_reg, stack_pointer_rtx));
+               insn = emit_insn (gen_adddi3 (base_reg_rtx, large_reg,
+                                             stack_pointer_rtx));
              else
-               insn = emit_insn (gen_addsi3 (base_reg_rtx, large_reg, stack_pointer_rtx));
+               insn = emit_insn (gen_addsi3 (base_reg_rtx, large_reg,
+                                             stack_pointer_rtx));
              if (store_p)
                RTX_FRAME_RELATED_P (insn) = 1;
            }
+
          else
            fprintf (file, "\t%s\t%s,%s,%s\n",
                     Pmode == DImode ? "daddu" : "addu",
@@ -5965,8 +5908,8 @@ save_restore_insns (store_p, large_reg, large_offset, file)
       else
        {
          base_reg_rtx = gen_rtx (REG, Pmode, MIPS_TEMP2_REGNUM);
-         base_offset  = fp_offset;
-         if (file == (FILE *)0)
+         base_offset = fp_offset;
+         if (file == 0)
            {
              rtx fp_offset_rtx = GEN_INT (fp_offset);
 
@@ -5997,61 +5940,59 @@ save_restore_insns (store_p, large_reg, large_offset, file)
              if (store_p)
                RTX_FRAME_RELATED_P (insn) = 1;
              if (Pmode == DImode)
-               insn = emit_insn (gen_adddi3 (base_reg_rtx, base_reg_rtx, stack_pointer_rtx));
+               insn = emit_insn (gen_adddi3 (base_reg_rtx, base_reg_rtx,
+                                             stack_pointer_rtx));
              else
-               insn = emit_insn (gen_addsi3 (base_reg_rtx, base_reg_rtx, stack_pointer_rtx));
+               insn = emit_insn (gen_addsi3 (base_reg_rtx, base_reg_rtx,
+                                             stack_pointer_rtx));
              if (store_p)
                RTX_FRAME_RELATED_P (insn) = 1;
            }
          else
            fprintf (file, "\tli\t%s,0x%.08lx\t# %ld\n\t%s\t%s,%s,%s\n",
                     reg_names[MIPS_TEMP2_REGNUM],
-                    (long)base_offset,
-                    (long)base_offset,
+                    base_offset, base_offset,
                     Pmode == DImode ? "daddu" : "addu",
                     reg_names[MIPS_TEMP2_REGNUM],
                     reg_names[MIPS_TEMP2_REGNUM],
                     reg_names[STACK_POINTER_REGNUM]);
        }
 
-      for  (regno = FP_REG_LAST-1; regno >= FP_REG_FIRST; regno -= fp_inc)
-       {
-         if (BITSET_P (fmask, regno - FP_REG_FIRST))
-           {
-             if (file == (FILE *)0)
-               {
-                 enum machine_mode sz =
-                   TARGET_SINGLE_FLOAT ? SFmode : DFmode;
-                 rtx reg_rtx = gen_rtx (REG, sz, regno);
-                 rtx mem_rtx = gen_rtx (MEM, sz,
-                                        gen_rtx (PLUS, Pmode, base_reg_rtx,
-                                                 GEN_INT (fp_offset - base_offset)));
-                 RTX_UNCHANGING_P (mem_rtx) = 1;
-
-                 if (store_p)
-                   {
-                     insn = emit_move_insn (mem_rtx, reg_rtx);
-                     RTX_FRAME_RELATED_P (insn) = 1;
-                   }
-                 else
-                   emit_move_insn (reg_rtx, mem_rtx);
-               }
-             else
-               fprintf (file, "\t%s\t%s,%ld(%s)\n",
-                        (TARGET_SINGLE_FLOAT
-                         ? ((store_p) ? "s.s" : "l.s")
-                         : ((store_p) ? "s.d" : "l.d")),
-                        reg_names[regno],
-                        fp_offset - base_offset,
-                        reg_names[REGNO(base_reg_rtx)]);
-
-
-             fp_offset -= fp_size;
-           }
-       }
+      for (regno = FP_REG_LAST-1; regno >= FP_REG_FIRST; regno -= fp_inc)
+       if (BITSET_P (fmask, regno - FP_REG_FIRST))
+         {
+           if (file == 0)
+             {
+               enum machine_mode sz
+                 = TARGET_SINGLE_FLOAT ? SFmode : DFmode;
+               rtx reg_rtx = gen_rtx (REG, sz, regno);
+               rtx mem_rtx = gen_rtx (MEM, sz,
+                                      gen_rtx (PLUS, Pmode, base_reg_rtx,
+                                               GEN_INT (fp_offset
+                                                        - base_offset)));
+               RTX_UNCHANGING_P (mem_rtx) = 1;
+
+               if (store_p)
+                 {
+                   insn = emit_move_insn (mem_rtx, reg_rtx);
+                   RTX_FRAME_RELATED_P (insn) = 1;
+                 }
+               else
+                 emit_move_insn (reg_rtx, mem_rtx);
+             }
+           else
+             fprintf (file, "\t%s\t%s,%ld(%s)\n",
+                      (TARGET_SINGLE_FLOAT
+                       ? (store_p ? "s.s" : "l.s")
+                       : (store_p ? "s.d" : "l.d")),
+                      reg_names[regno],
+                      fp_offset - base_offset,
+                      reg_names[REGNO(base_reg_rtx)]);
+
+           fp_offset -= fp_size;
+         }
     }
 }
-
 \f
 /* Set up the stack and frame (if desired) for the function.  */
 
@@ -6101,15 +6042,16 @@ function_prologue (file, size)
 
   if (!flag_inhibit_size_directive)
     {
-      fprintf (file, "\t.frame\t%s,%ld,%s\t\t# vars= %ld, regs= %d/%d, args= %d, extra= %ld\n",
-             reg_names[ (frame_pointer_needed) ? HARD_FRAME_POINTER_REGNUM : STACK_POINTER_REGNUM ],
-             tsize,
-             reg_names[31 + GP_REG_FIRST],
-             current_frame_info.var_size,
-             current_frame_info.num_gp,
-             current_frame_info.num_fp,
-             current_function_outgoing_args_size,
-             current_frame_info.extra_size);
+      fprintf (file,
+              "\t.frame\t%s,%ld,%s\t\t# vars= %ld, regs= %d/%d, args= %d, extra= %ld\n",
+              (reg_names[(frame_pointer_needed)
+                         ? HARD_FRAME_POINTER_REGNUM : STACK_POINTER_REGNUM]),
+              tsize, reg_names[31 + GP_REG_FIRST],
+              current_frame_info.var_size,
+              current_frame_info.num_gp,
+              current_frame_info.num_fp,
+              current_function_outgoing_args_size,
+              current_frame_info.extra_size);
 
       fprintf (file, "\t.mask\t0x%08lx,%ld\n\t.fmask\t0x%08lx,%ld\n",
               current_frame_info.mask,
@@ -6251,7 +6193,6 @@ function_prologue (file, size)
        dwarf2out_def_cfa ("", STACK_POINTER_REGNUM, tsize);
     }
 }
-
 \f
 /* Expand the prologue into a bunch of separate insns.  */
 
@@ -6259,12 +6200,12 @@ void
 mips_expand_prologue ()
 {
   int regno;
-  long tsize;
-  rtx tmp_rtx   = (rtx)0;
-  char *arg_name = (char *)0;
-  tree fndecl   = current_function_decl;
-  tree fntype   = TREE_TYPE (fndecl);
-  tree fnargs   = DECL_ARGUMENTS (fndecl);
+  HOST_WIDE_INT tsize;
+  rtx tmp_rtx 0;
+  char *arg_name = 0;
+  tree fndecl = current_function_decl;
+  tree fntype = TREE_TYPE (fndecl);
+  tree fnargs = DECL_ARGUMENTS (fndecl);
   rtx next_arg_reg;
   int i;
   tree next_arg;
@@ -6279,6 +6220,7 @@ mips_expand_prologue ()
     {
       tree type = build_pointer_type (fntype);
       tree function_result_decl = build_decl (PARM_DECL, NULL_TREE, type);
+
       DECL_ARG_TYPE (function_result_decl) = type;
       TREE_CHAIN (function_result_decl) = fnargs;
       fnargs = function_result_decl;
@@ -6286,10 +6228,10 @@ mips_expand_prologue ()
 
   /* Determine the last argument, and get its name.  */
 
-  INIT_CUMULATIVE_ARGS (args_so_far, fntype, (rtx)0, 0);
+  INIT_CUMULATIVE_ARGS (args_so_far, fntype, NULL_RTX, 0);
   regno = GP_ARG_FIRST;
 
-  for (cur_arg = fnargs; cur_arg != (tree)0; cur_arg = next_arg)
+  for (cur_arg = fnargs; cur_arg != 0; cur_arg = next_arg)
     {
       tree passed_type = DECL_ARG_TYPE (cur_arg);
       enum machine_mode passed_mode = TYPE_MODE (passed_type);
@@ -6324,7 +6266,7 @@ mips_expand_prologue ()
       FUNCTION_ARG_ADVANCE (args_so_far, passed_mode, passed_type, 1);
 
       next_arg = TREE_CHAIN (cur_arg);
-      if (next_arg == (tree)0)
+      if (next_arg == 0)
        {
          if (DECL_NAME (cur_arg))
            arg_name = IDENTIFIER_POINTER (DECL_NAME (cur_arg));
@@ -6333,15 +6275,14 @@ mips_expand_prologue ()
        }
     }
 
-  /* In order to pass small structures by value in registers
-     compatibly with the MIPS compiler, we need to shift the value
-     into the high part of the register.  Function_arg has encoded a
-     PARALLEL rtx, holding a vector of adjustments to be made as the
-     next_arg_reg variable, so we split up the insns, and emit them
-     separately.  */
+  /* In order to pass small structures by value in registers compatibly with
+     the MIPS compiler, we need to shift the value into the high part of the
+     register.  Function_arg has encoded a PARALLEL rtx, holding a vector of
+     adjustments to be made as the next_arg_reg variable, so we split up the
+     insns, and emit them separately.  */
 
   next_arg_reg = FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1);
-  if (next_arg_reg != (rtx)0 && GET_CODE (next_arg_reg) == PARALLEL)
+  if (next_arg_reg != 0 && GET_CODE (next_arg_reg) == PARALLEL)
     {
       rtvec adjust = XVEC (next_arg_reg, 0);
       int num = GET_NUM_ELEM (adjust);
@@ -6365,10 +6306,13 @@ mips_expand_prologue ()
   if (mips_abi == ABI_32
       && (! mips_entry || mips_can_use_return_insn ())
       && ((TYPE_ARG_TYPES (fntype) != 0
-          && (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype))) != void_type_node))
-         || (arg_name != (char *)0
-             && ((arg_name[0] == '_' && strcmp (arg_name, "__builtin_va_alist") == 0)
-                 || (arg_name[0] == 'v' && strcmp (arg_name, "va_alist") == 0)))))
+          && (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype)))
+              != void_type_node))
+         || (arg_name != 0
+             && ((arg_name[0] == '_'
+                  && strcmp (arg_name, "__builtin_va_alist") == 0)
+                 || (arg_name[0] == 'v'
+                     && strcmp (arg_name, "va_alist") == 0)))))
     {
       int offset = (regno - GP_ARG_FIRST) * UNITS_PER_WORD;
       rtx ptr = stack_pointer_rtx;
@@ -6413,9 +6357,11 @@ mips_expand_prologue ()
                                               incr));
            }
          else if (Pmode == DImode)
-           insn = emit_insn (gen_movdi (hard_frame_pointer_rtx, stack_pointer_rtx));
+           insn = emit_insn (gen_movdi (hard_frame_pointer_rtx,
+                                        stack_pointer_rtx));
          else
-           insn = emit_insn (gen_movsi (hard_frame_pointer_rtx, stack_pointer_rtx));
+           insn = emit_insn (gen_movsi (hard_frame_pointer_rtx,
+                                        stack_pointer_rtx));
 
           RTX_FRAME_RELATED_P (insn) = 1;
        }
@@ -6512,7 +6458,7 @@ mips_expand_prologue ()
        }
 
       if (! mips_entry)
-       save_restore_insns (TRUE, tmp_rtx, tsize, (FILE *)0);
+       save_restore_insns (1, tmp_rtx, tsize, (FILE *)0);
       else if (reg_18_save != NULL_RTX)
        emit_insn (reg_18_save);
 
@@ -6580,9 +6526,11 @@ mips_expand_prologue ()
                                               incr));
            }
          else if (Pmode == DImode)
-           insn = emit_insn (gen_movdi (hard_frame_pointer_rtx, stack_pointer_rtx));
+           insn = emit_insn (gen_movdi (hard_frame_pointer_rtx,
+                                        stack_pointer_rtx));
          else
-           insn = emit_insn (gen_movsi (hard_frame_pointer_rtx, stack_pointer_rtx));
+           insn = emit_insn (gen_movsi (hard_frame_pointer_rtx,
+                                        stack_pointer_rtx));
 
          if (insn)
            RTX_FRAME_RELATED_P (insn) = 1;
@@ -6599,9 +6547,9 @@ mips_expand_prologue ()
   if (profile_flag || profile_block_flag)
     emit_insn (gen_blockage ());
 }
-
 \f
-/* Do any necessary cleanup after a function to restore stack, frame, and regs. */
+/* Do any necessary cleanup after a function to restore stack, frame,
+   and regs. */
 
 #define RA_MASK ((long) 0x80000000)    /* 1 << 31 */
 #define PIC_OFFSET_TABLE_MASK (1 << (PIC_OFFSET_TABLE_REGNUM - GP_REG_FIRST))
@@ -6609,7 +6557,7 @@ mips_expand_prologue ()
 void
 function_epilogue (file, size)
      FILE *file;
-     int size;
+     HOST_WIDE_INT size;
 {
   char *fnname;
 
@@ -6631,8 +6579,8 @@ function_epilogue (file, size)
     {
       int num_gp_regs = current_frame_info.gp_reg_size / 4;
       int num_fp_regs = current_frame_info.fp_reg_size / 8;
-      int num_regs    = num_gp_regs + num_fp_regs;
-      char *name      = fnname;
+      int num_regs = num_gp_regs + num_fp_regs;
+      char *name = fnname;
 
       if (name[0] == '*')
        name++;
@@ -6641,27 +6589,27 @@ function_epilogue (file, size)
 
       fprintf (stderr,
               "%-20s fp=%c leaf=%c alloca=%c setjmp=%c stack=%4ld arg=%3ld reg=%2d/%d delay=%3d/%3dL %3d/%3dJ refs=%3d/%3d/%3d",
-              name,
-              (frame_pointer_needed) ? 'y' : 'n',
-              ((current_frame_info.mask & RA_MASK) != 0) ? 'n' : 'y',
-              (current_function_calls_alloca) ? 'y' : 'n',
-              (current_function_calls_setjmp) ? 'y' : 'n',
-              (long)current_frame_info.total_size,
-              (long)current_function_outgoing_args_size,
-              num_gp_regs, num_fp_regs,
+              name, frame_pointer_needed ? 'y' : 'n',
+              (current_frame_info.mask & RA_MASK) != 0 ? 'n' : 'y',
+              current_function_calls_alloca ? 'y' : 'n',
+              current_function_calls_setjmp ? 'y' : 'n',
+              current_frame_info.total_size,
+              current_function_outgoing_args_size, num_gp_regs, num_fp_regs,
               dslots_load_total, dslots_load_filled,
               dslots_jump_total, dslots_jump_filled,
               num_refs[0], num_refs[1], num_refs[2]);
 
       if (HALF_PIC_NUMBER_PTRS > prev_half_pic_ptrs)
        {
-         fprintf (stderr, " half-pic=%3d", HALF_PIC_NUMBER_PTRS - prev_half_pic_ptrs);
+         fprintf (stderr,
+                  " half-pic=%3d", HALF_PIC_NUMBER_PTRS - prev_half_pic_ptrs);
          prev_half_pic_ptrs = HALF_PIC_NUMBER_PTRS;
        }
 
       if (HALF_PIC_NUMBER_REFS > prev_half_pic_refs)
        {
-         fprintf (stderr, " pic-ref=%3d", HALF_PIC_NUMBER_REFS - prev_half_pic_refs);
+         fprintf (stderr,
+                  " pic-ref=%3d", HALF_PIC_NUMBER_REFS - prev_half_pic_refs);
          prev_half_pic_refs = HALF_PIC_NUMBER_REFS;
        }
 
@@ -6669,17 +6617,17 @@ function_epilogue (file, size)
     }
 
   /* Reset state info for each function.  */
-  inside_function    = FALSE;
-  ignore_line_number = FALSE;
-  dslots_load_total  = 0;
-  dslots_jump_total  = 0;
+  inside_function = 0;
+  ignore_line_number = 0;
+  dslots_load_total = 0;
+  dslots_jump_total = 0;
   dslots_load_filled = 0;
   dslots_jump_filled = 0;
-  num_refs[0]       = 0;
-  num_refs[1]       = 0;
-  num_refs[2]       = 0;
-  mips_load_reg      = (rtx)0;
-  mips_load_reg2     = (rtx)0;
+  num_refs[0] = 0;
+  num_refs[1] = 0;
+  num_refs[2] = 0;
+  mips_load_reg 0;
+  mips_load_reg2 0;
   current_frame_info = zero_frame_info;
 
   while (string_constants != NULL)
@@ -6698,14 +6646,13 @@ function_epilogue (file, size)
   if (TARGET_GP_OPT && ! TARGET_MIPS16 && ! TARGET_GAS)
     asm_out_file = asm_out_data_file;
 }
-
 \f
 /* Expand the epilogue into a bunch of separate insns.  */
 
 void
 mips_expand_epilogue ()
 {
-  long tsize = current_frame_info.total_size;
+  HOST_WIDE_INT tsize = current_frame_info.total_size;
   rtx tsize_rtx = GEN_INT (tsize);
   rtx tmp_rtx = (rtx)0;
 
@@ -6769,6 +6716,7 @@ mips_expand_epilogue ()
          else
            emit_insn (gen_movsi (stack_pointer_rtx, hard_frame_pointer_rtx));
        }
+
       /* The GP/PIC register is implicitly used by all SYMBOL_REFs, so if we
         are going to restore it, then we must emit a blockage insn to
         prevent the scheduler from moving the restore out of the epilogue.  */
@@ -6777,7 +6725,7 @@ mips_expand_epilogue ()
                   & (1L << (PIC_OFFSET_TABLE_REGNUM - GP_REG_FIRST))))
        emit_insn (gen_blockage ());
 
-      save_restore_insns (FALSE, tmp_rtx, orig_tsize, (FILE *)0);
+      save_restore_insns (0, tmp_rtx, orig_tsize, (FILE *)0);
 
       /* In mips16 mode with a large frame, we adjust the stack
          pointer before restoring the registers.  In this case, we
@@ -6803,16 +6751,15 @@ mips_expand_epilogue ()
     emit_jump_insn (gen_return_internal (gen_rtx (REG, Pmode,
                                                  GP_REG_FIRST + 31)));
 }
-
 \f
-/* Return true if this function is known to have a null epilogue.
+/* Return nonzero if this function is known to have a null epilogue.
    This allows the optimizer to omit jumps to jumps if no stack
    was created.  */
 
 int
 mips_can_use_return_insn ()
 {
-  if (!reload_completed)
+  if (! reload_completed)
     return 0;
 
   if (regs_ever_live[31] || profile_flag)
@@ -6834,7 +6781,7 @@ mips_can_use_return_insn ()
   if (current_frame_info.initialized)
     return current_frame_info.total_size == 0;
 
-  return (compute_frame_size (get_frame_size ())) == 0;
+  return compute_frame_size (get_frame_size ()) == 0;
 }
 \f
 /* Choose the section to use for the constant rtx expression X that has
@@ -6884,15 +6831,11 @@ mips_select_section (decl, reloc)
   if ((TARGET_EMBEDDED_PIC || TARGET_MIPS16)
       && TREE_CODE (decl) == STRING_CST
       && !flag_writable_strings)
-    {
-      /* For embedded position independent code, put constant strings
-        in the text section, because the data section is limited to
-        64K in size.  For mips16 code, put strings in the text
-        section so that a PC relative load instruction can be used to
-        get their address.  */
-
-      text_section ();
-    }
+    /* For embedded position independent code, put constant strings in the
+       text section, because the data section is limited to 64K in size.
+       For mips16 code, put strings in the text section so that a PC
+       relative load instruction can be used to get their address.  */
+    text_section ();
   else if (TARGET_EMBEDDED_DATA)
     {
       /* For embedded applications, always put an object in read-only data
@@ -6938,6 +6881,7 @@ mips_select_section (decl, reloc)
 }
 \f
 #ifdef MIPS_ABI_DEFAULT
+
 /* Support functions for the 64 bit ABI.  */
 
 /* Return register to use for a function return value with VALTYPE for function
@@ -6962,12 +6906,12 @@ mips_function_value (valtype, func)
     {
       if (TARGET_SINGLE_FLOAT
          && (mclass == MODE_FLOAT
-             ? GET_MODE_SIZE (mode) > 4
-             : GET_MODE_SIZE (mode) / 2 > 4))
+             ? GET_MODE_SIZE (mode) > 4 : GET_MODE_SIZE (mode) / 2 > 4))
        reg = GP_RETURN;
       else
        reg = FP_RETURN;
     }
+
   else if (TREE_CODE (valtype) == RECORD_TYPE
           && mips_abi != ABI_32 && mips_abi != ABI_EABI)
     {
@@ -6981,6 +6925,7 @@ mips_function_value (valtype, func)
        {
          if (TREE_CODE (field) != FIELD_DECL)
            continue;
+
          if (TREE_CODE (TREE_TYPE (field)) != REAL_TYPE || i >= 2)
            break;
 
@@ -7000,9 +6945,11 @@ mips_function_value (valtype, func)
              return gen_rtx (PARALLEL, mode,
                              gen_rtvec (1,
                                         gen_rtx (EXPR_LIST, VOIDmode,
-                                                 gen_rtx (REG, field_mode, FP_RETURN),
+                                                 gen_rtx (REG, field_mode,
+                                                          FP_RETURN),
                                                  const0_rtx)));
            }
+
          else if (i == 2)
            {
              enum machine_mode first_mode
@@ -7017,11 +6964,15 @@ mips_function_value (valtype, func)
              return gen_rtx (PARALLEL, mode,
                              gen_rtvec (2,
                                         gen_rtx (EXPR_LIST, VOIDmode,
-                                                 gen_rtx (REG, first_mode, FP_RETURN),
-                                                 GEN_INT (first_offset / BITS_PER_UNIT)),
+                                                 gen_rtx (REG, first_mode,
+                                                          FP_RETURN),
+                                                 GEN_INT (first_offset
+                                                          / BITS_PER_UNIT)),
                                         gen_rtx (EXPR_LIST, VOIDmode,
-                                                 gen_rtx (REG, second_mode, FP_RETURN + 2),
-                                                 GEN_INT (second_offset / BITS_PER_UNIT))));
+                                                 gen_rtx (REG, second_mode,
+                                                          FP_RETURN + 2),
+                                                 GEN_INT (second_offset
+                                                          / BITS_PER_UNIT))));
            }
        }
     }
@@ -7051,7 +7002,6 @@ function_arg_pass_by_reference (cum, mode, type, named)
   size = int_size_in_bytes (type);
   return size == -1 || size > UNITS_PER_WORD;
 }
-
 #endif
 
 /* This function returns the register class required for a secondary
@@ -7088,10 +7038,12 @@ mips_secondary_reload_class (class, mode, x, in_p)
              off += SUBREG_WORD (x);
              x = SUBREG_REG (x);
            }
+
          if (GET_CODE (x) == REG)
            regno = REGNO (x) + off;
        }
     }
+
   else if (GET_CODE (x) == REG || GET_CODE (x) == SUBREG)
     regno = true_regnum (x);
 
@@ -7101,21 +7053,15 @@ mips_secondary_reload_class (class, mode, x, in_p)
      HILO_REGNUM, except when copying an SImode value from HILO_REGNUM
      to a general register, or when copying from register 0.  */
   if (class == HILO_REG && regno != GP_REG_FIRST + 0)
-    {
-      if (! in_p
-         && gp_reg_p
-         && GET_MODE_SIZE (mode) <= GET_MODE_SIZE (SImode))
-       return NO_REGS;
-      return gr_regs;
-    }
-  if (regno == HILO_REGNUM)
-    {
-      if (in_p
-         && class == gr_regs
-         && GET_MODE_SIZE (mode) <= GET_MODE_SIZE (SImode))
-       return NO_REGS;
-      return gr_regs;
-    }
+    return ((! in_p
+            && GP_REG_P (regno)
+            && GET_MODE_SIZE (mode) <= GET_MODE_SIZE (SImode))
+           ? NO_REGS : GR_REGS);
+  else if (regno == HILO_REGNUM)
+    return ((in_p
+            && class == GR_REGS
+            && GET_MODE_SIZE (mode) <= GET_MODE_SIZE (SImode))
+           ? NO_REGS : GR_REGS);
 
   /* Copying from HI or LO to anywhere other than a general register
      requires a general register.  */
@@ -7126,9 +7072,7 @@ mips_secondary_reload_class (class, mode, x, in_p)
          /* We can't really copy to HI or LO at all in mips16 mode.  */
          return M16_REGS;
        }
-      if (gp_reg_p)
-       return NO_REGS;
-      return gr_regs;
+      return gp_reg_p ? NO_REGS : GR_REGS;
     }
   if (MD_REG_P (regno))
     {
@@ -7137,9 +7081,7 @@ mips_secondary_reload_class (class, mode, x, in_p)
          /* We can't really copy to HI or LO at all in mips16 mode.  */
          return M16_REGS;
        }
-      if (class == gr_regs)
-       return NO_REGS;
-      return gr_regs;
+      return class == gr_regs ? NO_REGS : GR_REGS;
     }
 
   /* We can only copy a value to a condition code register from a
@@ -7150,17 +7092,13 @@ mips_secondary_reload_class (class, mode, x, in_p)
     {
       if (in_p)
        return FP_REGS;
-      if (GP_REG_P (regno))
-       return NO_REGS;
-      return GR_REGS;
+      return GP_REG_P (regno) ? NO_REGS : GR_REGS;
     }
   if (ST_REG_P (regno))
     {
       if (! in_p)
        return FP_REGS;
-      if (class == GR_REGS)
-       return NO_REGS;
-      return GR_REGS;
+      return class == GR_REGS ? NO_REGS : GR_REGS;
     }
 
   /* In mips16 mode, going between memory and anything but M16_REGS
index 57e6f4890d63d9864c21a2c25ad172488cac9426..29f7c78bc9dc70327c4e9f43cca89243df35d681 100644 (file)
@@ -157,13 +157,28 @@ extern struct rtx_def *embedded_pic_fnaddr_rtx;   /* function address */
 extern int mips_string_length;         /* length of strings for mips16 */
 extern struct rtx_def *mips16_gp_pseudo_rtx; /* psuedo reg holding $gp */
 
-/* Functions within mips.c that we reference.  */
+/* Functions within mips.c that we reference.  Some of these return  type
+   HOST_WIDE_INT, so define that here.  This is a copy of code in machmode.h.
+
+   ??? It would be good to try to put this as common code someplace.  */
+
+#ifndef HOST_BITS_PER_WIDE_INT
+
+#if HOST_BITS_PER_LONG > HOST_BITS_PER_INT
+#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONG
+#define HOST_WIDE_INT long
+#else
+#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_INT
+#define HOST_WIDE_INT int
+#endif
+
+#endif
 
 extern void            abort_with_insn ();
 extern int             arith32_operand ();
 extern int             arith_operand ();
 extern int             cmp_op ();
-extern long            compute_frame_size ();
+extern HOST_WIDE_INT   compute_frame_size ();
 extern int             const_float_1_operand ();
 extern void            expand_block_move ();
 extern int             equality_op ();
@@ -186,7 +201,7 @@ extern void         mips_asm_file_start ();
 extern int             mips_can_use_return_insn ();
 extern int             mips_const_double_ok ();
 extern void            mips_count_memory_refs ();
-extern int             mips_debugger_offset ();
+extern HOST_WIDE_INT   mips_debugger_offset ();
 extern void            mips_declare_object ();
 extern int             mips_epilogue_delay_slots ();
 extern void            mips_expand_epilogue ();
@@ -211,7 +226,7 @@ extern int          simple_epilogue_p ();
 extern int             simple_memory_operand ();
 extern int             double_memory_operand ();
 extern int             small_int ();
-extern void            trace();
+extern void            trace ();
 extern int             uns_arith_operand ();
 extern struct rtx_def *        embedded_pic_offset ();
 extern void            mips_order_regs_for_local_alloc ();
@@ -1196,9 +1211,10 @@ do {                                                     \
    the frame pointer to be the stack pointer after the initial
    adjustment.  */
 
-#define DEBUGGER_AUTO_OFFSET(X)                mips_debugger_offset (X, 0)
-#define DEBUGGER_ARG_OFFSET(OFFSET, X) mips_debugger_offset (X, OFFSET)
-
+#define DEBUGGER_AUTO_OFFSET(X)  \
+  mips_debugger_offset (X, (HOST_WIDE_INT) 0)
+#define DEBUGGER_ARG_OFFSET(OFFSET, X)  \
+  mips_debugger_offset (X, (HOST_WIDE_INT) OFFSET)
 
 /* Tell collect that the object format is ECOFF */
 #ifndef OBJECT_FORMAT_ROSE
index e10f78e5fcad72d294253d5ced18f9f8951f4263..ad49d7f4837855934c997ed94a56134e3a21394c 100644 (file)
@@ -74,10 +74,3 @@ extern char * alloca ();
 #define STACK_DIRECTION        -1
 #endif
 #endif /* not MIPS_OVERRIDE_ALLOCA */
-
-/* Say if we have vprintf.  BSD Mips targets probably don't have vfprintf.  */
-#if defined(__OSF1__) || defined(__OSF__) || defined(__osf__) || defined(bsd4_4)
-
-#else
-#define NO_STAB_H              /* mips doesn't typically have stab.h */
-#endif
index ddaf34bd045fd0e76590da5659584de0eafc92b0..f1fb4bce19f077cb6d6a6a933edabcafec2ec95d 100644 (file)
@@ -1,5 +1,5 @@
 ;;- Machine description for HP PA-RISC architecture for GNU C compiler
-;;   Copyright (C) 1992, 93 - 97, 1998 Free Software Foundation, Inc.
+;;   Copyright (C) 1992, 93-97, 1998 Free Software Foundation, Inc.
 ;;   Contributed by the Center for Software Science at the University
 ;;   of Utah.
 
 
 (define_insn "casesi0"
   [(set (pc) (plus:SI
-              (mem:SI (plus:SI (pc) (match_operand 0 "register_operand" "r")))
+              (mem:SI (plus:SI (pc)
+                               (match_operand:SI 0 "register_operand" "r")))
               (label_ref (match_operand 1 "" ""))))]
   ""
   "blr %0,0\;nop"
index 25ca7bcce5dfc23d94559c7bb2e55f88904e975b..4ca4668929d05251d53c6e4f4996ab25c2e3a54b 100644 (file)
 ;; is when it is a constant, SImode (for addl2) is the proper mode.
 (define_insn "call_pop"
   [(call (match_operand:QI 0 "memory_operand" "m")
-        (match_operand:SI 1 "general_operand" "g"))
+        (match_operand:SI 1 "const_int_operand" "n"))
    (set (reg:SI 14) (plus:SI (reg:SI 14)
                             (match_operand:SI 3 "immediate_operand" "i")))]
   ""
   "*
-  if (GET_CODE (operands[1]) != CONST_INT || INTVAL (operands[1]) > 255 * 4)
+  if (INTVAL (operands[1]) > 255 * 4)
     /* Vax `calls' really uses only one byte of #args, so pop explicitly.  */
     return \"calls $0,%0\;addl2 %1,sp\";
   operands[1] = GEN_INT ((INTVAL (operands[1]) + 3)/ 4);
 (define_insn "call_value_pop"
   [(set (match_operand 0 "" "=g")
        (call (match_operand:QI 1 "memory_operand" "m")
-             (match_operand:SI 2 "general_operand" "g")))
+             (match_operand:SI 2 "const_int_operand" "n")))
    (set (reg:SI 14) (plus:SI (reg:SI 14)
                             (match_operand:SI 4 "immediate_operand" "i")))]
   ""
   "*
-  if (GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) > 255 * 4)
+  if (INTVAL (operands[2]) > 255 * 4)
     /* Vax `calls' really uses only one byte of #args, so pop explicitly.  */
     return \"calls $0,%1\;addl2 %2,sp\";
   operands[2] = GEN_INT ((INTVAL (operands[2]) + 3)/ 4);
 ;; operands.  In that case, combine may simplify the adjustment of sp.
 (define_insn ""
   [(call (match_operand:QI 0 "memory_operand" "m")
-        (match_operand:SI 1 "general_operand" "g"))
+        (match_operand:SI 1 "const_int_operand" "n"))
    (set (reg:SI 14) (reg:SI 14))]
   ""
   "*
-  if (GET_CODE (operands[1]) != CONST_INT || INTVAL (operands[1]) > 255 * 4)
+  if (INTVAL (operands[1]) > 255 * 4)
     /* Vax `calls' really uses only one byte of #args, so pop explicitly.  */
     return \"calls $0,%0\;addl2 %1,sp\";
   operands[1] = GEN_INT ((INTVAL (operands[1]) + 3)/ 4);
 (define_insn ""
   [(set (match_operand 0 "" "=g")
        (call (match_operand:QI 1 "memory_operand" "m")
-             (match_operand:SI 2 "general_operand" "g")))
+             (match_operand:SI 2 "const_int_operand" "n")))
    (set (reg:SI 14) (reg:SI 14))]
   ""
   "*
-  if (GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) > 255 * 4)
+  if (INTVAL (operands[2]) > 255 * 4)
     /* Vax `calls' really uses only one byte of #args, so pop explicitly.  */
     return \"calls $0,%1\;addl2 %2,sp\";
   operands[2] = GEN_INT ((INTVAL (operands[2]) + 3)/ 4);
index 104f5fe74d5b088a8881384b90c61c97aab5886c..5d01aeb23ee46a837d05b40f4423d8b95d8fee71 100644 (file)
@@ -134,10 +134,11 @@ Boston, MA 02111-1307, USA.  */
 #define HAVE_VPRINTF
 \f
 #if defined(VAXC) || defined(__DECC)
+
 /* Customizations/kludges for building with DEC's VAX C compiler
    rather than GCC.  */
+
 #define NO_SYS_PARAMS_H                /* don't have <sys/params.h> */
-#define NO_STAB_H              /* don't have <stab.h> */
 #define USE_C_ALLOCA           /* using alloca.c */
 #define QSORT_WORKAROUND       /* do not use VAXCRTL's qsort */
 
index b0c48f6c44c1ac5f396bb2ceb06754ebe6311cf3..bbf2f230b908174ea234cfbc30d51ee145e0b326 100755 (executable)
@@ -1,7 +1,7 @@
 #! /bin/sh
 
 # Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.12 
+# Generated automatically using autoconf version 2.12.1 
 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
 #
 # This configure script is free software; the Free Software Foundation
@@ -73,6 +73,7 @@ mandir='${prefix}/man'
 # Initialize some other variables.
 subdirs=
 MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
 # Maximum number of lines to put in a shell here document.
 ac_max_here_lines=12
 
@@ -356,7 +357,7 @@ EOF
     verbose=yes ;;
 
   -version | --version | --versio | --versi | --vers)
-    echo "configure generated by autoconf version 2.12"
+    echo "configure generated by autoconf version 2.12.1"
     exit 0 ;;
 
   -with-* | --with-*)
@@ -728,33 +729,33 @@ esac
 
 
 # Make sure we can run config.sub.
-if $ac_config_sub sun4 >/dev/null 2>&1; then :
+if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
 else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
 fi
 
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:737: checking host system type" >&5
+echo "configure:738: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
 NONE)
   case $nonopt in
   NONE)
-    if host_alias=`$ac_config_guess`; then :
+    if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
     else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
     fi ;;
   *) host_alias=$nonopt ;;
   esac ;;
 esac
 
-host=`$ac_config_sub $host_alias`
+host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
 host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
 host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
 host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
 echo "$ac_t""$host" 1>&6
 
 echo $ac_n "checking target system type""... $ac_c" 1>&6
-echo "configure:758: checking target system type" >&5
+echo "configure:759: checking target system type" >&5
 
 target_alias=$target
 case "$target_alias" in
@@ -765,14 +766,14 @@ NONE)
   esac ;;
 esac
 
-target=`$ac_config_sub $target_alias`
+target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias`
 target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
 target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
 target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
 echo "$ac_t""$target" 1>&6
 
 echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:776: checking build system type" >&5
+echo "configure:777: checking build system type" >&5
 
 build_alias=$build
 case "$build_alias" in
@@ -783,7 +784,7 @@ NONE)
   esac ;;
 esac
 
-build=`$ac_config_sub $build_alias`
+build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
 build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
 build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
 build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
@@ -799,7 +800,7 @@ test "$host_alias" != "$target_alias" &&
 # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:803: checking for $ac_word" >&5
+echo "configure:804: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -828,7 +829,7 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:832: checking for $ac_word" >&5
+echo "configure:833: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -876,7 +877,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:880: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:881: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -886,11 +887,11 @@ ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS
 cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext <<EOF
-#line 890 "configure"
+#line 891 "configure"
 #include "confdefs.h"
 main(){return(0);}
 EOF
-if { (eval echo configure:894: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:895: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -910,12 +911,12 @@ if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:914: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:915: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:919: checking whether we are using GNU C" >&5
+echo "configure:920: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -924,7 +925,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:928: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:929: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -939,7 +940,7 @@ if test $ac_cv_prog_gcc = yes; then
   ac_save_CFLAGS="$CFLAGS"
   CFLAGS=
   echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:943: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:944: checking whether ${CC-cc} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -967,7 +968,7 @@ else
 fi
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:971: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:972: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1000,7 +1001,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1004: checking for $ac_word" >&5
+echo "configure:1005: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1031,7 +1032,7 @@ done
 # Extract the first word of "flex", so it can be a program name with args.
 set dummy flex; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1035: checking for $ac_word" >&5
+echo "configure:1036: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1064,7 +1065,7 @@ then
   *) ac_lib=l ;;
   esac
   echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6
-echo "configure:1068: checking for yywrap in -l$ac_lib" >&5
+echo "configure:1069: checking for yywrap in -l$ac_lib" >&5
 ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1072,7 +1073,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$ac_lib  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 1076 "configure"
+#line 1077 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -1083,7 +1084,7 @@ int main() {
 yywrap()
 ; return 0; }
 EOF
-if { (eval echo configure:1087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1088: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -1106,7 +1107,7 @@ fi
 fi
 
 echo $ac_n "checking whether ln works""... $ac_c" 1>&6
-echo "configure:1110: checking whether ln works" >&5
+echo "configure:1111: checking whether ln works" >&5
 if eval "test \"`echo '$''{'gcc_cv_prog_LN'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1138,7 +1139,7 @@ else
 fi
 
 echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1142: checking whether ln -s works" >&5
+echo "configure:1143: checking whether ln -s works" >&5
 if eval "test \"`echo '$''{'gcc_cv_prog_LN_S'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1172,7 +1173,7 @@ fi
 # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1176: checking for $ac_word" >&5
+echo "configure:1177: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1203,7 +1204,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1207: checking for $ac_word" >&5
+echo "configure:1208: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1243,7 +1244,7 @@ test -n "$YACC" || YACC="yacc"
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:1247: checking for a BSD compatible install" >&5
+echo "configure:1248: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1294,7 +1295,7 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1298: checking how to run the C preprocessor" >&5
+echo "configure:1299: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -1309,13 +1310,13 @@ else
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 1313 "configure"
+#line 1314 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1319: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1320: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -1326,13 +1327,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 1330 "configure"
+#line 1331 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1336: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1337: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -1355,12 +1356,12 @@ fi
 echo "$ac_t""$CPP" 1>&6
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:1359: checking for ANSI C header files" >&5
+echo "configure:1360: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1364 "configure"
+#line 1365 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -1368,7 +1369,7 @@ else
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1372: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1373: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1385,7 +1386,7 @@ rm -f conftest*
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 1389 "configure"
+#line 1390 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -1403,7 +1404,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 1407 "configure"
+#line 1408 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -1424,7 +1425,7 @@ if test "$cross_compiling" = yes; then
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 1428 "configure"
+#line 1429 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -1435,7 +1436,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:1439: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1440: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -1459,12 +1460,12 @@ EOF
 fi
 
 echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:1463: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:1464: checking whether time.h and sys/time.h may both be included" >&5
 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1468 "configure"
+#line 1469 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
@@ -1473,7 +1474,7 @@ int main() {
 struct tm *tp;
 ; return 0; }
 EOF
-if { (eval echo configure:1477: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1478: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_time=yes
 else
@@ -1493,21 +1494,21 @@ EOF
 
 fi
 
-for ac_hdr in limits.h stddef.h string.h strings.h stdlib.h time.h fcntl.h unistd.h sys/file.h sys/time.h sys/resource.h sys/param.h sys/times.h varargs.h sys/varargs.h wait.h sys/wait.h
+for ac_hdr in limits.h stddef.h string.h strings.h stdlib.h time.h fcntl.h unistd.h stab.h sys/file.h sys/time.h sys/resource.h sys/param.h sys/times.h varargs.h sys/varargs.h wait.h sys/wait.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1501: checking for $ac_hdr" >&5
+echo "configure:1502: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1506 "configure"
+#line 1507 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1511: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1512: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1537,17 +1538,17 @@ done
 # Check for thread headers.
 ac_safe=`echo "thread.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for thread.h""... $ac_c" 1>&6
-echo "configure:1541: checking for thread.h" >&5
+echo "configure:1542: checking for thread.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1546 "configure"
+#line 1547 "configure"
 #include "confdefs.h"
 #include <thread.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1551: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1552: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1571,17 +1572,17 @@ fi
 
 ac_safe=`echo "pthread.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for pthread.h""... $ac_c" 1>&6
-echo "configure:1575: checking for pthread.h" >&5
+echo "configure:1576: checking for pthread.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1580 "configure"
+#line 1581 "configure"
 #include "confdefs.h"
 #include <pthread.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1585: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1586: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1607,12 +1608,12 @@ fi
 # See if the system preprocessor understands the ANSI C preprocessor
 # stringification operator.
 echo $ac_n "checking whether cpp understands the stringify operator""... $ac_c" 1>&6
-echo "configure:1611: checking whether cpp understands the stringify operator" >&5
+echo "configure:1612: checking whether cpp understands the stringify operator" >&5
 if eval "test \"`echo '$''{'gcc_cv_c_have_stringify'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1616 "configure"
+#line 1617 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -1620,7 +1621,7 @@ int main() {
 char *test = S(foo);
 ; return 0; }
 EOF
-if { (eval echo configure:1624: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1625: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   gcc_cv_c_have_stringify=yes
 else
@@ -1643,12 +1644,12 @@ fi
 # Use <inttypes.h> only if it exists,
 # doesn't clash with <sys/types.h>, and declares intmax_t.
 echo $ac_n "checking for inttypes.h""... $ac_c" 1>&6
-echo "configure:1647: checking for inttypes.h" >&5
+echo "configure:1648: checking for inttypes.h" >&5
 if eval "test \"`echo '$''{'gcc_cv_header_inttypes_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1652 "configure"
+#line 1653 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <inttypes.h>
@@ -1656,7 +1657,7 @@ int main() {
 intmax_t i = -1;
 ; return 0; }
 EOF
-if { (eval echo configure:1660: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1661: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cat >> confdefs.h <<EOF
 #define HAVE_INTTYPES_H 1
@@ -1678,12 +1679,12 @@ for ac_func in strtoul bsearch strerror putenv popen vprintf bcopy bzero bcmp \
        index rindex strchr strrchr kill getrlimit setrlimit atoll atoq sysconf
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:1682: checking for $ac_func" >&5
+echo "configure:1683: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1687 "configure"
+#line 1688 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -1706,7 +1707,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:1710: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -1732,7 +1733,7 @@ done
 
 
 echo $ac_n "checking whether the printf functions support %p""... $ac_c" 1>&6
-echo "configure:1736: checking whether the printf functions support %p" >&5
+echo "configure:1737: checking whether the printf functions support %p" >&5
 if eval "test \"`echo '$''{'gcc_cv_func_printf_ptr'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1740,7 +1741,7 @@ else
   gcc_cv_func_printf_ptr=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 1744 "configure"
+#line 1745 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 
@@ -1753,7 +1754,7 @@ main()
   exit (p != q);
 }
 EOF
-if { (eval echo configure:1757: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1758: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   gcc_cv_func_printf_ptr=yes
 else
@@ -1781,12 +1782,12 @@ for ac_func in malloc realloc calloc free bcopy bzero bcmp \
        index rindex getenv atol sbrk abort
 do
 echo $ac_n "checking whether $ac_func must be declared""... $ac_c" 1>&6
-echo "configure:1785: checking whether $ac_func must be declared" >&5
+echo "configure:1786: checking whether $ac_func must be declared" >&5
 if eval "test \"`echo '$''{'gcc_cv_decl_needed_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1790 "configure"
+#line 1791 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -1813,7 +1814,7 @@ int main() {
 char *(*pfn) = (char *(*)) $ac_func
 ; return 0; }
 EOF
-if { (eval echo configure:1817: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1818: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval "gcc_cv_decl_needed_$ac_func=no"
 else
@@ -1840,12 +1841,12 @@ done
 
 
 echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6
-echo "configure:1844: checking for sys_siglist declaration in signal.h or unistd.h" >&5
+echo "configure:1845: checking for sys_siglist declaration in signal.h or unistd.h" >&5
 if eval "test \"`echo '$''{'ac_cv_decl_sys_siglist'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1849 "configure"
+#line 1850 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -1857,7 +1858,7 @@ int main() {
 char *msg = *(sys_siglist + 1);
 ; return 0; }
 EOF
-if { (eval echo configure:1861: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1862: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_decl_sys_siglist=yes
 else
@@ -2043,7 +2044,7 @@ for machine in $build $host $target; do
                fi
                ;;
        alpha*-*-linux-gnu*)
-               tm_file="${tm_file} alpha/elf.h alpha/linux-elf.h alpha/linux.h"
+               tm_file="${tm_file} alpha/linux.h alpha/elf.h"
                xm_defines=USE_BFD
                target_cpu_default="MASK_GAS"
                tmake_file="t-linux alpha/t-linux alpha/t-crtbe"
@@ -2629,6 +2630,11 @@ for machine in $build $host $target; do
                tm_file=i386/go32-rtems.h
                tmake_file="i386/t-go32 t-rtems"
                ;;
+       i[34567]86-*-rtemself*)
+               cpu_type=i386
+               tm_file=i386/rtemself.h
+               tmake_file="i386/t-i386bare t-rtems"
+               ;;
        i[34567]86-*-rtems*)
                cpu_type=i386
                tm_file=i386/rtems.h
@@ -2725,6 +2731,21 @@ for machine in $build $host $target; do
                xmake_file=x-svr4
                extra_parts="crtbegin.o crtend.o"
                ;;
+       i[34567]86-*-osf1*)             # Intel 80386's running OSF/1 1.3+
+               cpu_type=i386
+               xm_file="${xm_file} xm-svr4.h i386/xm-sysv4.h i386/xm-osf1elf.h"
+               xm_defines="USE_C_ALLOCA SMALL_ARG_MAX"
+               fixincludes=Makefile.in #Don't do it on OSF/1
+               if [ x$stabs = xyes ]
+               then
+                       tm_file=i386/osf1elfgdb.h
+               else
+                       tm_file=i386/osf1elf.h
+               fi
+               tmake_file=i386/t-osf1elf
+               xmake_file=i386/x-osf1elf
+               extra_parts="crti.o crtn.o crtbegin.o crtend.o"
+               ;;
        i[34567]86-*-sysv*)             # Intel 80386's running system V
                xm_defines="USG SVR3"
                xmake_file=i386/x-sysv3
@@ -2747,7 +2768,7 @@ for machine in $build $host $target; do
                fi
                ;;
        i386-*-vsta)                    # Intel 80386's running VSTa kernel
-               xm_file=i386/xm-vsta.h
+               xm_file="${xm_file} i386/xm-vsta.h"
                tm_file=i386/vsta.h
                tmake_file=i386/t-vsta
                xmake_file=i386/x-vsta
@@ -4236,7 +4257,8 @@ for machine in $build $host $target; do
                extra_parts="crtbegin.o crtend.o"
                ;;
        sparc-*-vxsim*)
-               xm_file="sparc/xm-sysv4.h sparc/xm-sol2.h"
+               xm_file="xm-siglist.h sparc/xm-sysv4.h sparc/xm-sol2.h"
+               xm_defines="USG POSIX"
                tm_file=sparc/vxsim.h
                tmake_file=sparc/t-vxsparc
                xmake_file=sparc/x-sysv4
@@ -5160,7 +5182,7 @@ EOF
 # Ultrix sh set writes to stderr and can't be redirected directly,
 # and sets the high bit in the cache file unless we assign to the vars.
 (set) 2>&1 |
-  case `(ac_space=' '; set) 2>&1` in
+  case `(ac_space=' '; set) 2>&1 | grep ac_space` in
   *ac_space=\ *)
     # `set' does not quote correctly, so add quotes (double-quote substitution
     # turns \\\\ into \\, and sed turns \\ into \).
@@ -5227,7 +5249,7 @@ do
     echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
     exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
   -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
-    echo "$CONFIG_STATUS generated by autoconf version 2.12"
+    echo "$CONFIG_STATUS generated by autoconf version 2.12.1"
     exit 0 ;;
   -help | --help | --hel | --he | --h)
     echo "\$ac_cs_usage"; exit 0 ;;
@@ -5246,6 +5268,7 @@ sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
  s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
 $ac_vpsub
 $extrasub
+s%@SHELL@%$SHELL%g
 s%@CFLAGS@%$CFLAGS%g
 s%@CPPFLAGS@%$CPPFLAGS%g
 s%@CXXFLAGS@%$CXXFLAGS%g
index 8bae46848ca41ab2da3da5b1afd41eaff100bc2f..a0befb68b0139592410bdec8635cb2f728cfdb06 100644 (file)
@@ -148,7 +148,7 @@ EGCS_PROG_INSTALL
 
 AC_HEADER_STDC
 AC_HEADER_TIME
-AC_CHECK_HEADERS(limits.h stddef.h string.h strings.h stdlib.h time.h fcntl.h unistd.h sys/file.h sys/time.h sys/resource.h sys/param.h sys/times.h varargs.h sys/varargs.h wait.h sys/wait.h)
+AC_CHECK_HEADERS(limits.h stddef.h string.h strings.h stdlib.h time.h fcntl.h unistd.h stab.h sys/file.h sys/time.h sys/resource.h sys/param.h sys/times.h varargs.h sys/varargs.h wait.h sys/wait.h)
 
 # Check for thread headers.
 AC_CHECK_HEADER(thread.h, [have_thread_h=yes], [have_thread_h=])
@@ -355,7 +355,7 @@ for machine in $build $host $target; do
                fi
                ;;
        alpha*-*-linux-gnu*)
-               tm_file="${tm_file} alpha/elf.h alpha/linux-elf.h alpha/linux.h"
+               tm_file="${tm_file} alpha/linux.h alpha/elf.h"
                xm_defines=USE_BFD
                target_cpu_default="MASK_GAS"
                tmake_file="t-linux alpha/t-linux alpha/t-crtbe"
@@ -941,6 +941,11 @@ for machine in $build $host $target; do
                tm_file=i386/go32-rtems.h
                tmake_file="i386/t-go32 t-rtems"
                ;;
+       i[[34567]]86-*-rtemself*)
+               cpu_type=i386
+               tm_file=i386/rtemself.h
+               tmake_file="i386/t-i386bare t-rtems"
+               ;;
        i[[34567]]86-*-rtems*)
                cpu_type=i386
                tm_file=i386/rtems.h
@@ -1037,6 +1042,21 @@ for machine in $build $host $target; do
                xmake_file=x-svr4
                extra_parts="crtbegin.o crtend.o"
                ;;
+       i[[34567]]86-*-osf1*)           # Intel 80386's running OSF/1 1.3+
+               cpu_type=i386
+               xm_file="${xm_file} xm-svr4.h i386/xm-sysv4.h i386/xm-osf1elf.h"
+               xm_defines="USE_C_ALLOCA SMALL_ARG_MAX"
+               fixincludes=Makefile.in #Don't do it on OSF/1
+               if [[ x$stabs = xyes ]]
+               then
+                       tm_file=i386/osf1elfgdb.h
+               else
+                       tm_file=i386/osf1elf.h
+               fi
+               tmake_file=i386/t-osf1elf
+               xmake_file=i386/x-osf1elf
+               extra_parts="crti.o crtn.o crtbegin.o crtend.o"
+               ;;
        i[[34567]]86-*-sysv*)           # Intel 80386's running system V
                xm_defines="USG SVR3"
                xmake_file=i386/x-sysv3
@@ -1059,7 +1079,7 @@ for machine in $build $host $target; do
                fi
                ;;
        i386-*-vsta)                    # Intel 80386's running VSTa kernel
-               xm_file=i386/xm-vsta.h
+               xm_file="${xm_file} i386/xm-vsta.h"
                tm_file=i386/vsta.h
                tmake_file=i386/t-vsta
                xmake_file=i386/x-vsta
@@ -2548,7 +2568,8 @@ for machine in $build $host $target; do
                extra_parts="crtbegin.o crtend.o"
                ;;
        sparc-*-vxsim*)
-               xm_file="sparc/xm-sysv4.h sparc/xm-sol2.h"
+               xm_file="xm-siglist.h sparc/xm-sysv4.h sparc/xm-sol2.h"
+               xm_defines="USG POSIX"
                tm_file=sparc/vxsim.h
                tmake_file=sparc/t-vxsparc
                xmake_file=sparc/x-sysv4
index 744490f9256e9236f52b44033a77d1ec688dfb7d..8bfe4627c652012d5059ea4fb956af3f2c2a7707 100644 (file)
@@ -1,5 +1,5 @@
 /* Utility routines for data type conversion for GNU C.
-   Copyright (C) 1987, 88, 91, 92, 94, 95, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1987, 88, 91-95, 97, 1998 Free Software Foundation, Inc.
 
 This file is part of GNU C.
 
@@ -36,9 +36,6 @@ tree
 convert_to_pointer (type, expr)
      tree type, expr;
 {
-  register tree intype = TREE_TYPE (expr);
-  register enum tree_code form = TREE_CODE (intype);
-  
   if (integer_zerop (expr))
     {
       expr = build_int_2 (0, 0);
@@ -46,29 +43,27 @@ convert_to_pointer (type, expr)
       return expr;
     }
 
-  if (form == POINTER_TYPE || form == REFERENCE_TYPE)
-    return build1 (NOP_EXPR, type, expr);
-
-
-  if (form == INTEGER_TYPE || form == ENUMERAL_TYPE)
+  switch (TREE_CODE (TREE_TYPE (expr)))
     {
-      if (type_precision (intype) == POINTER_SIZE)
+    case POINTER_TYPE:
+    case REFERENCE_TYPE:
+      return build1 (NOP_EXPR, type, expr);
+
+    case INTEGER_TYPE:
+    case ENUMERAL_TYPE:
+    case BOOLEAN_TYPE:
+    case CHAR_TYPE:
+      if (TYPE_PRECISION (TREE_TYPE (expr)) == POINTER_SIZE)
        return build1 (CONVERT_EXPR, type, expr);
-      expr = convert (type_for_size (POINTER_SIZE, 0), expr);
-      /* Modes may be different but sizes should be the same.  */
-      if (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (expr)))
-         != GET_MODE_SIZE (TYPE_MODE (type)))
-       /* There is supposed to be some integral type
-          that is the same width as a pointer.  */
-       abort ();
-      return convert_to_pointer (type, expr);
-    }
 
-  error ("cannot convert to a pointer type");
+      return
+       convert_to_pointer (type,
+                           convert (type_for_size (POINTER_SIZE, 0), expr));
 
-  expr = build_int_2 (0, 0);
-  TREE_TYPE (expr) = type;
-  return expr;
+    default:
+      error ("cannot convert to a pointer type");
+      return convert_to_pointer (type, integer_zero_node);
+    }
 }
 
 /* Convert EXPR to some floating-point type TYPE.
@@ -80,30 +75,32 @@ tree
 convert_to_real (type, expr)
      tree type, expr;
 {
-  register enum tree_code form = TREE_CODE (TREE_TYPE (expr));
-
-  if (form == REAL_TYPE)
-    return build1 (flag_float_store ? CONVERT_EXPR : NOP_EXPR,
-                  type, expr);
-
-  if (INTEGRAL_TYPE_P (TREE_TYPE (expr)))
-    return build1 (FLOAT_EXPR, type, expr);
-
-  if (form == COMPLEX_TYPE)
-    return convert (type, fold (build1 (REALPART_EXPR,
-                                       TREE_TYPE (TREE_TYPE (expr)), expr)));
-
-  if (form == POINTER_TYPE || form == REFERENCE_TYPE)
-    error ("pointer value used where a floating point value was expected");
-  else
-    error ("aggregate value used where a float was expected");
-
-  {
-    register tree tem = make_node (REAL_CST);
-    TREE_TYPE (tem) = type;
-    TREE_REAL_CST (tem) = REAL_VALUE_ATOF ("0.0", TYPE_MODE (type));
-    return tem;
-  }
+  switch (TREE_CODE (TREE_TYPE (expr)))
+    {
+    case REAL_TYPE:
+      return build1 (flag_float_store ? CONVERT_EXPR : NOP_EXPR,
+                    type, expr);
+
+    case INTEGER_TYPE:
+    case ENUMERAL_TYPE:
+    case BOOLEAN_TYPE:
+    case CHAR_TYPE:
+      return build1 (FLOAT_EXPR, type, expr);
+
+    case COMPLEX_TYPE:
+      return convert (type,
+                     fold (build1 (REALPART_EXPR,
+                                   TREE_TYPE (TREE_TYPE (expr)), expr)));
+
+    case POINTER_TYPE:
+    case REFERENCE_TYPE:
+      error ("pointer value used where a floating point value was expected");
+      return convert_to_real (type, integer_zero_node);
+
+    default:
+      error ("aggregate value used where a float was expected");
+      return convert_to_real (type, integer_zero_node);
+    }
 }
 
 /* Convert EXPR to some integer (or enum) type TYPE.
@@ -118,34 +115,30 @@ tree
 convert_to_integer (type, expr)
      tree type, expr;
 {
-  register tree intype = TREE_TYPE (expr);
-  register enum tree_code form = TREE_CODE (intype);
+  enum tree_code ex_form = TREE_CODE (expr);
+  tree intype = TREE_TYPE (expr);
+  int inprec = TYPE_PRECISION (intype);
+  int outprec = TYPE_PRECISION (type);
 
-  if (form == POINTER_TYPE || form == REFERENCE_TYPE)
+  switch (TREE_CODE (intype))
     {
+    case POINTER_TYPE:
+    case REFERENCE_TYPE:
       if (integer_zerop (expr))
        expr = integer_zero_node;
       else
        expr = fold (build1 (CONVERT_EXPR,
                             type_for_size (POINTER_SIZE, 0), expr));
-      intype = TREE_TYPE (expr);
-      form = TREE_CODE (intype);
-      if (intype == type)
-       return expr;
-    }
 
-  if (form == INTEGER_TYPE || form == ENUMERAL_TYPE
-      || form == BOOLEAN_TYPE || form == CHAR_TYPE)
-    {
-      register unsigned outprec = TYPE_PRECISION (type);
-      register unsigned inprec = TYPE_PRECISION (intype);
-      register enum tree_code ex_form = TREE_CODE (expr);
+      return convert_to_integer (type, expr);
 
-      /* If we are widening the type, put in an explicit conversion.
-        Similarly if we are not changing the width.  However, if this is
-        a logical operation that just returns 0 or 1, we can change the
-        type of the expression.  For logical operations, we must
-        also change the types of the operands to maintain type
+    case INTEGER_TYPE:
+    case ENUMERAL_TYPE:
+    case BOOLEAN_TYPE:
+    case CHAR_TYPE:
+      /* If this is a logical operation, which just returns 0 or 1, we can
+        change the type of the expression.  For some logical operations,
+        we must also change the types of the operands to maintain type
         correctness.  */
 
       if (TREE_CODE_CLASS (ex_form) == '<')
@@ -153,6 +146,7 @@ convert_to_integer (type, expr)
          TREE_TYPE (expr) = type;
          return expr;
        }
+
       else if (ex_form == TRUTH_AND_EXPR || ex_form == TRUTH_ANDIF_EXPR
               || ex_form == TRUTH_OR_EXPR || ex_form == TRUTH_ORIF_EXPR
               || ex_form == TRUTH_XOR_EXPR)
@@ -162,12 +156,18 @@ convert_to_integer (type, expr)
          TREE_TYPE (expr) = type;
          return expr;
        }
+
       else if (ex_form == TRUTH_NOT_EXPR)
        {
          TREE_OPERAND (expr, 0) = convert (type, TREE_OPERAND (expr, 0));
          TREE_TYPE (expr) = type;
          return expr;
        }
+
+      /* If we are widening the type, put in an explicit conversion.
+        Similarly if we are not changing the width.  After this, we know
+        we are truncating EXPR.  */
+
       else if (outprec >= inprec)
        return build1 (NOP_EXPR, type, expr);
 
@@ -352,74 +352,30 @@ convert_to_integer (type, expr)
          return convert (type, get_unwidened (TREE_OPERAND (expr, 0), type));
 
        case COND_EXPR:
-         /* Can treat the two alternative values like the operands
-            of an arithmetic expression.  */
-         {
-           tree arg1 = get_unwidened (TREE_OPERAND (expr, 1), type);
-           tree arg2 = get_unwidened (TREE_OPERAND (expr, 2), type);
-
-           if (outprec >= BITS_PER_WORD
-               || TRULY_NOOP_TRUNCATION (outprec, inprec)
-               || inprec > TYPE_PRECISION (TREE_TYPE (arg1))
-               || inprec > TYPE_PRECISION (TREE_TYPE (arg2)))
-             {
-               /* Do the arithmetic in type TYPEX,
-                  then convert result to TYPE.  */
-               register tree typex = type;
-
-               /* Can't do arithmetic in enumeral types
-                  so use an integer type that will hold the values.  */
-               if (TREE_CODE (typex) == ENUMERAL_TYPE)
-                 typex = type_for_size (TYPE_PRECISION (typex),
-                                        TREE_UNSIGNED (typex));
-
-               /* But now perhaps TYPEX is as wide as INPREC.
-                  In that case, do nothing special here.
-                  (Otherwise would recurse infinitely in convert.  */
-               if (TYPE_PRECISION (typex) != inprec)
-                 {
-                   /* Don't do unsigned arithmetic where signed was wanted,
-                      or vice versa.  */
-                   typex = (TREE_UNSIGNED (TREE_TYPE (expr))
-                            ? unsigned_type (typex) : signed_type (typex));
-                   return convert (type,
-                                   fold (build (COND_EXPR, typex,
-                                                TREE_OPERAND (expr, 0),
-                                                convert (typex, arg1),
-                                                convert (typex, arg2))));
-                 }
-               else
-                 /* It is sometimes worthwhile
-                    to push the narrowing down through the conditional.  */
-                 return fold (build (COND_EXPR, type,
-                                     TREE_OPERAND (expr, 0),
-                                     convert (type, TREE_OPERAND (expr, 1)), 
-                                     convert (type, TREE_OPERAND (expr, 2))));
-             }
-         }
-         break;
+         /* It is sometimes worthwhile to push the narrowing down through
+            the conditional and never loses.  */
+         return fold (build (COND_EXPR, type, TREE_OPERAND (expr, 0),
+                             convert (type, TREE_OPERAND (expr, 1)), 
+                             convert (type, TREE_OPERAND (expr, 2))));
 
        default:
          break;
        }
 
       return build1 (NOP_EXPR, type, expr);
-    }
 
-  if (form == REAL_TYPE)
-    return build1 (FIX_TRUNC_EXPR, type, expr);
+    case REAL_TYPE:
+      return build1 (FIX_TRUNC_EXPR, type, expr);
 
-  if (form == COMPLEX_TYPE)
-    return convert (type, fold (build1 (REALPART_EXPR,
-                                       TREE_TYPE (TREE_TYPE (expr)), expr)));
+    case COMPLEX_TYPE:
+      return convert (type,
+                     fold (build1 (REALPART_EXPR,
+                                   TREE_TYPE (TREE_TYPE (expr)), expr)));
 
-  error ("aggregate value used where an integer was expected");
-
-  {
-    register tree tem = build_int_2 (0, 0);
-    TREE_TYPE (tem) = type;
-    return tem;
-  }
+    default:
+      error ("aggregate value used where an integer was expected");
+      return convert (type, integer_zero_node);
+    }
 }
 
 /* Convert EXPR to the complex type TYPE in the usual ways.  */
@@ -428,48 +384,52 @@ tree
 convert_to_complex (type, expr)
      tree type, expr;
 {
-  register enum tree_code form = TREE_CODE (TREE_TYPE (expr));
   tree subtype = TREE_TYPE (type);
   
-  if (form == REAL_TYPE || form == INTEGER_TYPE || form == ENUMERAL_TYPE)
+  switch (TREE_CODE (TREE_TYPE (expr)))
     {
-      expr = convert (subtype, expr);
-      return build (COMPLEX_EXPR, type, expr,
+    case REAL_TYPE:
+    case INTEGER_TYPE:
+    case ENUMERAL_TYPE:
+    case BOOLEAN_TYPE:
+    case CHAR_TYPE:
+      return build (COMPLEX_EXPR, type, convert (subtype, expr),
                    convert (subtype, integer_zero_node));
-    }
 
-  if (form == COMPLEX_TYPE)
-    {
-      tree elt_type = TREE_TYPE (TREE_TYPE (expr));
-      if (TYPE_MAIN_VARIANT (elt_type) == TYPE_MAIN_VARIANT (subtype))
-       return expr;
-      else if (TREE_CODE (expr) == COMPLEX_EXPR)
-       return fold (build (COMPLEX_EXPR,
-                           type,
-                           convert (subtype, TREE_OPERAND (expr, 0)),
-                           convert (subtype, TREE_OPERAND (expr, 1))));
-      else
-       {
-         expr = save_expr (expr);
+    case COMPLEX_TYPE:
+      {
+       tree elt_type = TREE_TYPE (TREE_TYPE (expr));
+
+       if (TYPE_MAIN_VARIANT (elt_type) == TYPE_MAIN_VARIANT (subtype))
+         return expr;
+       else if (TREE_CODE (expr) == COMPLEX_EXPR)
          return fold (build (COMPLEX_EXPR,
                              type,
-                             convert (subtype,
-                                      fold (build1 (REALPART_EXPR,
-                                                    TREE_TYPE (TREE_TYPE (expr)),
-                                                    expr))),
-                             convert (subtype,
-                                      fold (build1 (IMAGPART_EXPR,
-                                                    TREE_TYPE (TREE_TYPE (expr)),
-                                                    expr)))));
-       }
-    }
+                             convert (subtype, TREE_OPERAND (expr, 0)),
+                             convert (subtype, TREE_OPERAND (expr, 1))));
+       else
+         {
+           expr = save_expr (expr);
+           return
+             fold (build (COMPLEX_EXPR,
+                          type, convert (subtype,
+                                         fold (build1 (REALPART_EXPR,
+                                                       TREE_TYPE (TREE_TYPE (expr)),
+                                                       expr))),
+                          convert (subtype,
+                                   fold (build1 (IMAGPART_EXPR,
+                                                 TREE_TYPE (TREE_TYPE (expr)),
+                                                 expr)))));
+         }
+      }
 
-  if (form == POINTER_TYPE || form == REFERENCE_TYPE)
-    error ("pointer value used where a complex was expected");
-  else
-    error ("aggregate value used where a complex was expected");
-  
-  return build (COMPLEX_EXPR, type,
-               convert (subtype, integer_zero_node),
-               convert (subtype, integer_zero_node));
+    case POINTER_TYPE:
+    case REFERENCE_TYPE:
+      error ("pointer value used where a complex was expected");
+      return convert_to_complex (type, integer_zero_node);
+
+    default:
+      error ("aggregate value used where a complex was expected");
+      return convert_to_complex (type, integer_zero_node);
+    }
 }
index 7e6d42006e1e01ff4d8a429e3ca6051db57e7755..eb5c2619da90097a64a59c2f8839ee2aaa7d732b 100644 (file)
@@ -255,6 +255,10 @@ Wed Apr 15 13:20:06 1998  John Carr  <jfc@mit.edu>
        * errfn.c: Rework to avoid problems when HOST_WIDE_INT is longer
        than a pointer.
 
+Sun Apr 12 22:31:19 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * cvt.c (cp_convert_to_pointer): Use TYPE_PRECISION.
+
 Fri Apr 10 12:16:49 1998  Benjamin Kosnik  <bkoz@loony.cygnus.com>
 
        * decl.c (duplicate_decls): Don't warn for redundant decls if
index 92dce8beb7079fede67f98237247e21df2d377c3..836b8ad72580112da72249b3c7330d93cafd2cc4 100644 (file)
@@ -1,5 +1,5 @@
 /* Language-level data type conversion for GNU C++.
-   Copyright (C) 1987, 88, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1987, 88, 92-96, 1998 Free Software Foundation, Inc.
    Hacked by Michael Tiemann (tiemann@cygnus.com)
 
 This file is part of GNU CC.
@@ -242,7 +242,7 @@ cp_convert_to_pointer (type, expr)
 
   if (INTEGRAL_CODE_P (form))
     {
-      if (type_precision (intype) == POINTER_SIZE)
+      if (TYPE_PRECISION (intype) == POINTER_SIZE)
        return build1 (CONVERT_EXPR, type, expr);
       expr = cp_convert (type_for_size (POINTER_SIZE, 0), expr);
       /* Modes may be different but sizes should be the same.  */
index 361a559d88474e8a3b5fbd2278adc874699a40c4..183837c36654fc04c6e3f0fea75c97c8ea0cc967 100644 (file)
@@ -1,5 +1,5 @@
 /* Build expressions with type checking for C++ compiler.
-   Copyright (C) 1987, 88, 89, 92-96, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1987, 88, 89, 92-97, 1998 Free Software Foundation, Inc.
    Hacked by Michael Tiemann (tiemann@cygnus.com)
 
 This file is part of GNU CC.
index bd689112333a14f65cd43a3bf020e91f7ab87ca3..3d1fd92c2c512f6e21331345de673c5dcdef4cf4 100644 (file)
@@ -3880,6 +3880,10 @@ do_warning (pfile, keyword, buf, limit)
   bcopy (buf, copy, length);
   copy[length] = 0;
   SKIP_WHITE_SPACE (copy);
+
+  if (CPP_PEDANTIC (pfile) && !CPP_BUFFER (pfile)->system_header_p)
+    cpp_pedwarn ("ANSI C does not allow `#warning'");
+
   /* Use `pedwarn' not `warning', because #warning isn't in the C Standard;
      if -pedantic-errors is given, #warning should cause an error.  */
   cpp_pedwarn (pfile, "#warning %s", copy);
index cb0220cd1126289d15e4a4bb854aa3f5e4752497..eed81f59e2a31cfe92e3d77bfa447515c2827dfb 100644 (file)
@@ -161,16 +161,18 @@ char *getpwd ();
 #define FORCE_TEXT
 #endif
 
-#if defined (USG) || defined (NO_STAB_H) || defined (CROSS_COMPILE)
-#include "gstab.h"  /* If doing DBX on sysV, use our own stab.h.  */
+/* If there is a system stabs.h, use it.  Otherwise, use our own.  */
+
+#ifndef HAVE_STABS_H
+#include "gstab.h"
 #else
-#include <stab.h>  /* On BSD, use the system's stab.h.  */
+#include <stab.h>
 
 /* This is a GNU extension we need to reference in this file.  */
 #ifndef N_CATCH
 #define N_CATCH 0x54
 #endif
-#endif /* not USG */
+#endif
 
 #ifdef __GNU_STAB__
 #define STAB_CODE_TYPE enum __stab_debug_code
index e8ba8e3995bef663b49d958124d8c90f113c1273..ab2fab79d48137f48389cb005471e249ca4c1c17 100644 (file)
@@ -7174,10 +7174,22 @@ add_bound_info (subrange_die, bound_attr, bound)
        {
          register dw_die_ref ctx = lookup_decl_die (current_function_decl);
          register dw_die_ref decl_die = new_die (DW_TAG_variable, ctx);
+         register rtx loc = SAVE_EXPR_RTL (bound);
+
+         /* If the RTL for the SAVE_EXPR is memory, handle the case where
+            it references an outer function's frame.  */
+
+         if (GET_CODE (loc) == MEM)
+           {
+             rtx new_addr = fix_lexical_addr (XEXP (loc, 0), bound);
+
+             if (XEXP (loc, 0) != new_addr)
+               loc = gen_rtx (MEM, GET_MODE (loc), new_addr);
+           }
+
          add_AT_flag (decl_die, DW_AT_artificial, 1);
          add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
-         add_AT_location_description (decl_die, DW_AT_location,
-                                      SAVE_EXPR_RTL (bound));
+         add_AT_location_description (decl_die, DW_AT_location, loc);
          add_AT_die_ref (subrange_die, bound_attr, decl_die);
        }
 
index 6e01c929a3e92b2f31d9612ab96b91708eb72c36..70c00441fe975022c19875253fc3026484889bbf 100644 (file)
@@ -41,6 +41,8 @@ static rtx mask_rtx                   PROTO((enum machine_mode, int,
 static rtx lshift_value                        PROTO((enum machine_mode, rtx,
                                               int, int));
 static rtx extract_split_bit_field     PROTO((rtx, int, int, int, int));
+static void do_cmp_and_jump            PROTO((rtx, rtx, enum rtx_code,
+                                              enum machine_mode, rtx));
 
 #define CEIL(x,y) (((x) + (y) - 1) / (y))
 
@@ -3057,9 +3059,8 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
                        rtx t1;
 
                        t1 = copy_to_mode_reg (compute_mode, op0);
-                       emit_cmp_insn (t1, const0_rtx, GE, 
-                                      NULL_RTX, compute_mode, 0, 0);
-                       emit_jump_insn (gen_bge (label));
+                       do_cmp_and_jump (t1, const0_rtx, GE,
+                                        compute_mode, label);
                        expand_inc (t1, GEN_INT (abs_d - 1));
                        emit_label (label);
                        quotient = expand_shift (RSHIFT_EXPR, compute_mode, t1,
@@ -3286,13 +3287,10 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
               Save that for later.  */
            rtx tem;
            rtx label = gen_label_rtx ();
-           emit_cmp_insn (remainder, const0_rtx, EQ, NULL_RTX,
-                          compute_mode, 0, 0);
-           emit_jump_insn (gen_beq (label));
+           do_cmp_and_jump (remainder, const0_rtx, EQ, compute_mode, label);
            tem = expand_binop (compute_mode, xor_optab, op0, op1,
                                NULL_RTX, 0, OPTAB_WIDEN);
-           emit_cmp_insn (tem, const0_rtx, GE, NULL_RTX, compute_mode, 0, 0);
-           emit_jump_insn (gen_bge (label));
+           do_cmp_and_jump (tem, const0_rtx, GE, compute_mode, label);
            expand_dec (quotient, const1_rtx);
            expand_inc (remainder, op1);
            emit_label (label);
@@ -3313,11 +3311,8 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
          label3 = gen_label_rtx ();
          label4 = gen_label_rtx ();
          label5 = gen_label_rtx ();
-         emit_cmp_insn (op1, const0_rtx, LT, NULL_RTX, compute_mode, 0, 0);
-         emit_jump_insn (gen_blt (label2));
-         emit_cmp_insn (adjusted_op0, const0_rtx, LT, NULL_RTX,
-                        compute_mode, 0, 0);
-         emit_jump_insn (gen_blt (label1));
+         do_cmp_and_jump (op1, const0_rtx, LT, compute_mode, label2);
+         do_cmp_and_jump (adjusted_op0, const0_rtx, LT, compute_mode, label1);
          tem = expand_binop (compute_mode, sdiv_optab, adjusted_op0, op1,
                              quotient, 0, OPTAB_LIB_WIDEN);
          if (tem != quotient)
@@ -3329,9 +3324,7 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
          emit_jump_insn (gen_jump (label4));
          emit_barrier ();
          emit_label (label2);
-         emit_cmp_insn (adjusted_op0, const0_rtx, GT, NULL_RTX,
-                        compute_mode, 0, 0);
-         emit_jump_insn (gen_bgt (label3));
+         do_cmp_and_jump (adjusted_op0, const0_rtx, GT, compute_mode, label3);
          tem = expand_binop (compute_mode, sdiv_optab, adjusted_op0, op1,
                              quotient, 0, OPTAB_LIB_WIDEN);
          if (tem != quotient)
@@ -3371,9 +3364,7 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
                  {
                    rtx lab;
                    lab = gen_label_rtx ();
-                   emit_cmp_insn (t2, const0_rtx, EQ, NULL_RTX,
-                                  compute_mode, 0, 0);
-                   emit_jump_insn (gen_beq (lab));
+                   do_cmp_and_jump (t2, const0_rtx, EQ, compute_mode, lab);
                    expand_inc (t1, const1_rtx);
                    emit_label (lab);
                    quotient = t1;
@@ -3412,9 +3403,8 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
                /* This could be computed with a branch-less sequence.
                   Save that for later.  */
                rtx label = gen_label_rtx ();
-               emit_cmp_insn (remainder, const0_rtx, EQ, NULL_RTX,
-                              compute_mode, 0, 0);
-               emit_jump_insn (gen_beq (label));
+               do_cmp_and_jump (remainder, const0_rtx, EQ,
+                                compute_mode, label);
                expand_inc (quotient, const1_rtx);
                expand_dec (remainder, op1);
                emit_label (label);
@@ -3431,9 +3421,8 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
              adjusted_op0 = copy_to_mode_reg (compute_mode, op0);
              label1 = gen_label_rtx ();
              label2 = gen_label_rtx ();
-             emit_cmp_insn (adjusted_op0, const0_rtx, NE, NULL_RTX,
-                            compute_mode, 0, 0);
-             emit_jump_insn (gen_bne (label1));
+             do_cmp_and_jump (adjusted_op0, const0_rtx, NE,
+                              compute_mode, label1);
              emit_move_insn  (quotient, const0_rtx);
              emit_jump_insn (gen_jump (label2));
              emit_barrier ();
@@ -3473,9 +3462,7 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
                  {
                    rtx lab;
                    lab = gen_label_rtx ();
-                   emit_cmp_insn (t2, const0_rtx, EQ, NULL_RTX,
-                                  compute_mode, 0, 0);
-                   emit_jump_insn (gen_beq (lab));
+                   do_cmp_and_jump (t2, const0_rtx, EQ, compute_mode, lab);
                    expand_inc (t1, const1_rtx);
                    emit_label (lab);
                    quotient = t1;
@@ -3514,14 +3501,11 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
                   Save that for later.  */
                rtx tem;
                rtx label = gen_label_rtx ();
-               emit_cmp_insn (remainder, const0_rtx, EQ, NULL_RTX,
-                              compute_mode, 0, 0);
-               emit_jump_insn (gen_beq (label));
+               do_cmp_and_jump (remainder, const0_rtx, EQ,
+                                compute_mode, label);
                tem = expand_binop (compute_mode, xor_optab, op0, op1,
                                    NULL_RTX, 0, OPTAB_WIDEN);
-               emit_cmp_insn (tem, const0_rtx, LT, NULL_RTX,
-                              compute_mode, 0, 0);
-               emit_jump_insn (gen_blt (label));
+               do_cmp_and_jump (tem, const0_rtx, LT, compute_mode, label);
                expand_inc (quotient, const1_rtx);
                expand_dec (remainder, op1);
                emit_label (label);
@@ -3542,12 +3526,9 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
              label3 = gen_label_rtx ();
              label4 = gen_label_rtx ();
              label5 = gen_label_rtx ();
-             emit_cmp_insn (op1, const0_rtx, LT, NULL_RTX,
-                            compute_mode, 0, 0);
-             emit_jump_insn (gen_blt (label2));
-             emit_cmp_insn (adjusted_op0, const0_rtx, GT, NULL_RTX,
-                            compute_mode, 0, 0);
-             emit_jump_insn (gen_bgt (label1));
+             do_cmp_and_jump (op1, const0_rtx, LT, compute_mode, label2);
+             do_cmp_and_jump (adjusted_op0, const0_rtx, GT,
+                              compute_mode, label1);
              tem = expand_binop (compute_mode, sdiv_optab, adjusted_op0, op1,
                                  quotient, 0, OPTAB_LIB_WIDEN);
              if (tem != quotient)
@@ -3559,9 +3540,8 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
              emit_jump_insn (gen_jump (label4));
              emit_barrier ();
              emit_label (label2);
-             emit_cmp_insn (adjusted_op0, const0_rtx, LT, NULL_RTX,
-                            compute_mode, 0, 0);
-             emit_jump_insn (gen_blt (label3));
+             do_cmp_and_jump (adjusted_op0, const0_rtx, LT,
+                              compute_mode, label3);
              tem = expand_binop (compute_mode, sdiv_optab, adjusted_op0, op1,
                                  quotient, 0, OPTAB_LIB_WIDEN);
              if (tem != quotient)
@@ -3628,8 +3608,7 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
            tem = plus_constant (op1, -1);
            tem = expand_shift (RSHIFT_EXPR, compute_mode, tem,
                                build_int_2 (1, 0), NULL_RTX, 1);
-           emit_cmp_insn (remainder, tem, LEU, NULL_RTX, compute_mode, 0, 0);
-           emit_jump_insn (gen_bleu (label));
+           do_cmp_and_jump (remainder, tem, LEU, compute_mode, label);
            expand_inc (quotient, const1_rtx);
            expand_dec (remainder, op1);
            emit_label (label);
@@ -3654,8 +3633,7 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
            abs_op1 = expand_abs (compute_mode, op1, NULL_RTX, 0, 0);
            tem = expand_shift (LSHIFT_EXPR, compute_mode, abs_rem,
                                build_int_2 (1, 0), NULL_RTX, 1);
-           emit_cmp_insn (tem, abs_op1, LTU, NULL_RTX, compute_mode, 0, 0);
-           emit_jump_insn (gen_bltu (label));
+           do_cmp_and_jump (tem, abs_op1, LTU, compute_mode, label);
            tem = expand_binop (compute_mode, xor_optab, op0, op1,
                                NULL_RTX, 0, OPTAB_WIDEN);
            mask = expand_shift (RSHIFT_EXPR, compute_mode, tem,
@@ -4360,3 +4338,76 @@ emit_store_flag_force (target, code, op0, op1, mode, unsignedp, normalizep)
 
   return target;
 }
+\f
+/* Perform possibly multi-word comparison and conditional jump to LABEL
+   if ARG1 OP ARG2 true where ARG1 and ARG2 are of mode MODE
+
+   The algorithm is based on the code in expr.c:do_jump.
+
+   Note that this does not perform a general comparison.  Only variants
+   generated within expmed.c are correctly handled, others abort (but could
+   be handled if needed).  */
+
+static void
+do_cmp_and_jump (arg1, arg2, op, mode, label)
+     rtx arg1, arg2, label;
+    enum rtx_code op;
+    enum machine_mode mode;
+{
+  /* If this mode is an integer too wide to compare properly,
+     compare word by word.  Rely on cse to optimize constant cases.  */
+
+  if (GET_MODE_CLASS (mode) == MODE_INT && !can_compare_p (mode))
+    {
+      rtx label2 = gen_label_rtx ();
+
+      switch (op)
+       {
+       case LTU:
+         do_jump_by_parts_greater_rtx (mode, 1, arg2, arg1, label2, label);
+         break;
+
+       case LEU:
+         do_jump_by_parts_greater_rtx (mode, 1, arg1, arg2, label, label2);
+         break;
+
+       case LT:
+         do_jump_by_parts_greater_rtx (mode, 0, arg2, arg1, label2, label);
+         break;
+
+       case GT:
+         do_jump_by_parts_greater_rtx (mode, 0, arg1, arg2, label2, label);
+         break;
+
+       case GE:
+         do_jump_by_parts_greater_rtx (mode, 0, arg2, arg1, label, label2);
+         break;
+
+         /* do_jump_by_parts_equality_rtx compares with zero.  Luckily
+            that's the only equality operations we do */
+       case EQ:
+         if (arg2 != const0_rtx || mode != GET_MODE(arg1))
+           abort();
+         do_jump_by_parts_equality_rtx (arg1, label2, label);
+         break;
+
+       case NE:
+         if (arg2 != const0_rtx || mode != GET_MODE(arg1))
+           abort();
+         do_jump_by_parts_equality_rtx (arg1, label, label2);
+         break;
+
+       default:
+         abort();
+       }
+
+      emit_label (label2);
+    }
+  else
+    {
+      emit_cmp_insn(arg1, arg2, op, NULL_RTX, mode, 0, 0);
+      if (bcc_gen_fctn[(int) op] == 0)
+       abort ();
+      emit_jump_insn ((*bcc_gen_fctn[(int) op]) (label));
+    }
+}
index 8b8e5133b6a52e0983480d92578091c99aaafd1d..16310e6ba78d5d6273da9c40b474cf9327f2d0b3 100644 (file)
@@ -192,7 +192,7 @@ static void preexpand_calls PROTO((tree));
 static void do_jump_by_parts_greater PROTO((tree, int, rtx, rtx));
 void do_jump_by_parts_greater_rtx PROTO((enum machine_mode, int, rtx, rtx, rtx, rtx));
 static void do_jump_by_parts_equality PROTO((tree, rtx, rtx));
-static void do_jump_by_parts_equality_rtx PROTO((rtx, rtx, rtx));
+void do_jump_by_parts_equality_rtx PROTO((rtx, rtx, rtx));
 static void do_jump_for_compare        PROTO((rtx, rtx, rtx));
 static rtx compare             PROTO((tree, enum rtx_code, enum rtx_code));
 static rtx do_store_flag       PROTO((tree, rtx, enum machine_mode, int));
@@ -10246,7 +10246,7 @@ do_jump_by_parts_equality (exp, if_false_label, if_true_label)
    We assume that OP0 has an integer mode that is too wide
    for the available compare insns.  */
 
-static void
+void
 do_jump_by_parts_equality_rtx (op0, if_false_label, if_true_label)
      rtx op0;
      rtx if_false_label, if_true_label;
index b19c170cc8bce840383f3c69e6eb43ad40acf56d..963a014c81ea5fb2c320f65253ac91c3dca94c19 100644 (file)
@@ -131,6 +131,10 @@ extern int pending_stack_adjust;
    until no longer needed.  CLEANUP_POINT_EXPRs define the lifetime
    of TARGET_EXPRs.  */
 extern int target_temp_slot_level;
+
+/* Current level for normal temporaries.  */
+
+extern int temp_slot_level;
 \f
 #ifdef TREE_CODE /* Don't lose if tree.h not included.  */
 /* Structure to record the size of a sequence of arguments
index 37dc89dc6a48803391199d8098ab9697aede6ee4..2647bbe08f5f39704914ac2f133a6801cfe30ff5 100644 (file)
@@ -2902,9 +2902,15 @@ alter_subreg (x)
      register rtx x;
 {
   register rtx y = SUBREG_REG (x);
+
   if (GET_CODE (y) == SUBREG)
     y = alter_subreg (y);
 
+  /* If reload is operating, we may be replacing inside this SUBREG.
+     Check for that and make a new one if so.  */
+  if (reload_in_progress && find_replacement (&SUBREG_REG (x)) != 0)
+    x = copy_rtx (x);
+
   if (GET_CODE (y) == REG)
     {
       /* If the word size is larger than the size of this register,
index 8400c6f805585517a8986cf70b91a5e7b8a8d9b4..b795a940aaf5fa19aebc5344acde156c7fa0019e 100755 (executable)
@@ -411,6 +411,37 @@ typedef __SIZE_TYPE__ size_t;\
   fi
 done
 
+# Fix #defines under Alpha OSF/1:
+# The following files contain '#pragma extern_prefix "_FOO"' followed by
+# a '#define something(x,y,z) _FOOsomething(x,y,z)'.  The intent of these
+# statements is to reduce namespace pollution.  While these macros work
+# properly in most cases, they don't allow you to take a pointer to the
+# "something" being modified.  To get around this limitation, change these
+# statements to be of the form '#define something _FOOsomething'.
+for file in libgen.h dirent.h ftw.h grp.h ndbm.h pthread.h pwd.h signal.h standards.h stdlib.h string.h stropts.h time.h unistd.h
+do
+  if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
+    cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
+    chmod +w ${LIB}/$file 2>/dev/null
+    chmod a+r ${LIB}/$file 2>/dev/null
+  fi
+
+  if [ -r ${LIB}/$file ]; then
+    echo Fixing $file extern_prefix
+    sed -e 's/^[       ]*#[    ]*define[       ]*\([^(]*\)\(([^)]*)\)[         ]*\(_.\)\1\2[   ]*$/#define \1 \3\1/' ${LIB}/$file > ${LIB}/${file}.sed
+    rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
+    if cmp $file ${LIB}/$file >/dev/null 2>&1; then
+      rm ${LIB}/$file
+    else
+      # Find any include directives that use "file".
+      for include in `egrep '^[       ]*#[    ]*include[      ]*"[^/]' ${LIB}/$file | sed -e 's/^[    ]*#[    ]*include[      ]*"\([^"]*\)".*$/\1/'`; do
+       dir=`echo $file | sed -e s'|/[^/]*$||'`
+       required="$required ${INPUT} $dir/$include ${LIB}/$dir/$include"
+      done
+    fi
+  fi
+done
 # Fix one other error in this file: a mismatched quote not inside a C comment.
 file=sundev/vuid_event.h
 if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
@@ -1135,7 +1166,7 @@ if [ -r ${LIB}/$file ]; then
   fi
 fi
 
-# And also with the HP-UX 10 sys/pci.h file
+# And also with the HP-UX 10 and HP-UX 11 sys/pci.h file
 file=sys/pci.h
 if [ -r ${LIB}/$file ]; then
   if egrep 'System Private Structures' ${LIB}/$file > /dev/null; then
@@ -1147,6 +1178,48 @@ if [ -r ${LIB}/$file ]; then
   fi
 fi
 
+# And also with a few more HP-UX 11 headers which are only broken
+# after they are "fixed".
+file=sys/ki_iface.h
+if [ -r ${LIB}/$file ]; then
+  if egrep 'These definitions are for HP Internal developers' ${LIB}/$file > /dev/null; then
+    echo Fixing $file, overeager sed script
+    rm ${LIB}/$file
+  fi
+fi
+
+file=sys/ki.h
+if [ -r ${LIB}/$file ]; then
+  if egrep '11.00 HP-UX LP64' ${LIB}/$file > /dev/null; then
+    echo Fixing $file, overeager sed script
+    rm ${LIB}/$file
+  fi
+fi
+
+file=sys/ki_calls.h
+if [ -r ${LIB}/$file ]; then
+  if egrep 'KI_MAX_PROCS is an arbitrary number' ${LIB}/$file > /dev/null; then
+    echo Fixing $file, overeager sed script
+    rm ${LIB}/$file
+  fi
+fi
+
+file=sys/ki_defs.h
+if [ -r ${LIB}/$file ] ; then
+  if egrep 'Kernel Instrumentation Definitions' ${LIB}/$file > /dev/null; then
+    echo Fixing $file, overeager sed script
+    rm ${LIB}/$file
+  fi
+fi
+
+file=sys/time.h
+if [ -r ${LIB}/$file ] ; then
+  if egrep 'For CASPEC, look in' ${LIB}/$file > /dev/null; then
+    echo Fixing $file, overeager sed script
+    rm ${LIB}/$file
+  fi
+fi
+
 # Some IRIX header files contains the string "//"
 for file in elf_abi.h elf.h; do
   if [ -r ${LIB}/$file ]; then
index 05fa7fead4e770e4e205569e6a007c59d5a6e092..c36f37834affc2492472ae53ec231b021c85c762 100644 (file)
@@ -3923,6 +3923,7 @@ fold (expr)
               && (! TREE_SIDE_EFFECTS (arg0) || current_function_decl != 0))
        {
          tree test, true_value, false_value;
+         tree lhs = 0, rhs = 0;
 
          if (TREE_CODE (arg1) == COND_EXPR)
            {
@@ -3945,26 +3946,37 @@ fold (expr)
             to make this SAVE_EXPR.  Since we do this optimization
             primarily to see if we do end up with constant and this
             SAVE_EXPR interferes with later optimizations, suppressing
-            it when we can is important.  */
+            it when we can is important.
 
-         if (TREE_CODE (arg0) != SAVE_EXPR
+            If we are not in a function, we can't make a SAVE_EXPR, so don't
+            try to do so.  Don't try to see if the result is a constant
+            if an arm is a COND_EXPR since we get exponential behavior
+            in that case.  */
+
+         if (TREE_CODE (arg0) != SAVE_EXPR && ! TREE_CONSTANT (arg0)
+             && current_function_decl != 0
              && ((TREE_CODE (arg0) != VAR_DECL
                   && TREE_CODE (arg0) != PARM_DECL)
                  || TREE_SIDE_EFFECTS (arg0)))
            {
-             tree lhs = fold (build (code, type, arg0, true_value));
-             tree rhs = fold (build (code, type, arg0, false_value));
+             if (TREE_CODE (true_value) != COND_EXPR)
+               lhs = fold (build (code, type, arg0, true_value));
 
-             if (TREE_CONSTANT (lhs) || TREE_CONSTANT (rhs))
-               return fold (build (COND_EXPR, type, test, lhs, rhs));
+             if (TREE_CODE (false_value) != COND_EXPR)
+               rhs = fold (build (code, type, arg0, false_value));
 
-             if (current_function_decl != 0)
-               arg0 = save_expr (arg0);
+             if ((lhs == 0 || ! TREE_CONSTANT (lhs))
+                 && (rhs == 0 || !TREE_CONSTANT (rhs)))
+               arg0 = save_expr (arg0), lhs = rhs = 0;
            }
 
-         test = fold (build (COND_EXPR, type, test,
-                             fold (build (code, type, arg0, true_value)),
-                             fold (build (code, type, arg0, false_value))));
+         if (lhs == 0)
+           lhs = fold (build (code, type, arg0, true_value));
+         if (rhs == 0)
+           rhs = fold (build (code, type, arg0, false_value));
+
+         test = fold (build (COND_EXPR, type, test, lhs, rhs));
+
          if (TREE_CODE (arg0) == SAVE_EXPR)
            return build (COMPOUND_EXPR, type,
                          convert (void_type_node, arg0),
@@ -3982,6 +3994,7 @@ fold (expr)
               && (! TREE_SIDE_EFFECTS (arg1) || current_function_decl != 0))
        {
          tree test, true_value, false_value;
+         tree lhs = 0, rhs = 0;
 
          if (TREE_CODE (arg0) == COND_EXPR)
            {
@@ -3997,25 +4010,30 @@ fold (expr)
              false_value = convert (testtype, integer_zero_node);
            }
 
-         if (TREE_CODE (arg1) != SAVE_EXPR
+         if (TREE_CODE (arg1) != SAVE_EXPR && ! TREE_CONSTANT (arg0)
+             && current_function_decl != 0
              && ((TREE_CODE (arg1) != VAR_DECL
                   && TREE_CODE (arg1) != PARM_DECL)
                  || TREE_SIDE_EFFECTS (arg1)))
            {
-             tree lhs = fold (build (code, type, true_value, arg1));
-             tree rhs = fold (build (code, type, false_value, arg1));
+             if (TREE_CODE (true_value) != COND_EXPR)
+               lhs = fold (build (code, type, true_value, arg1));
 
-             if (TREE_CONSTANT (lhs) || TREE_CONSTANT (rhs)
-                 || TREE_CONSTANT (arg1))
-               return fold (build (COND_EXPR, type, test, lhs, rhs));
+             if (TREE_CODE (false_value) != COND_EXPR)
+               rhs = fold (build (code, type, false_value, arg1));
 
-             if (current_function_decl != 0)
-               arg1 = save_expr (arg1);
+             if ((lhs == 0 || ! TREE_CONSTANT (lhs))
+                 && (rhs == 0 || !TREE_CONSTANT (rhs)))
+               arg1 = save_expr (arg1), lhs = rhs = 0;
            }
 
-         test = fold (build (COND_EXPR, type, test,
-                             fold (build (code, type, true_value, arg1)),
-                             fold (build (code, type, false_value, arg1))));
+         if (lhs == 0)
+           lhs = fold (build (code, type, true_value, arg1));
+
+         if (rhs == 0)
+           rhs = fold (build (code, type, false_value, arg1));
+
+         test = fold (build (COND_EXPR, type, test, lhs, rhs));
          if (TREE_CODE (arg1) == SAVE_EXPR)
            return build (COMPOUND_EXPR, type,
                          convert (void_type_node, arg1),
index d747ce67bf390aae4bb6a8ee5548956a30de60af..44cee08aa683817b6b5778b10a3e1251ad18ae97 100644 (file)
@@ -390,6 +390,12 @@ int temp_slot_level;
 /* Current nesting level for variables in a block.  */
 
 int var_temp_slot_level;
+
+/* When temporaries are created by TARGET_EXPRs, they are created at
+   this level of temp_slot_level, so that they can remain allocated
+   until no longer needed.  CLEANUP_POINT_EXPRs define the lifetime
+   of TARGET_EXPRs.  */
+int target_temp_slot_level;
 \f
 /* This structure is used to record MEMs or pseudos used to replace VAR, any
    SUBREGs of VAR, and any MEMs containing VAR as an address.  We need to
@@ -1290,6 +1296,33 @@ push_temp_slots_for_block ()
   var_temp_slot_level = temp_slot_level;
 }
 
+/* Likewise, but save the new level as the place to allocate temporaries
+   for TARGET_EXPRs.  */
+
+void
+push_temp_slots_for_target ()
+{
+  push_temp_slots ();
+
+  target_temp_slot_level = temp_slot_level;
+}
+
+/* Set and get the value of target_temp_slot_level.  The only
+   permitted use of these functions is to save and restore this value.  */
+
+int
+get_target_temp_slot_level ()
+{
+  return target_temp_slot_level;
+}
+
+void
+set_target_temp_slot_level (level)
+     int level;
+{
+  target_temp_slot_level = level;
+}
+
 /* Pop a temporary nesting level.  All slots in use in the current level
    are freed.  */
 
@@ -2785,7 +2818,8 @@ purge_addressof_1 (loc, insn, force)
       if (GET_CODE (sub) == MEM)
        sub = gen_rtx_MEM (GET_MODE (x), copy_rtx (XEXP (sub, 0)));
 
-      if (GET_CODE (sub) == REG && MEM_VOLATILE_P (x))
+      if (GET_CODE (sub) == REG
+         && (MEM_VOLATILE_P (x) || GET_MODE (x) == BLKmode))
        {
          put_addressof_into_stack (XEXP (x, 0));
          return;
index da2804ddc87b908fbd37772c87d7134483c9740a..e0584aafc6ed065fddedb275e2be8ce80324f410 100644 (file)
@@ -3734,12 +3734,6 @@ no effect.  As soon as all of the machine descriptions are
 modified to have the appropriate number of arguments, this macro
 will be removed.
 
-@findex NO_STAB_H
-@item NO_STAB_H
-Define this if your system does not have the include file
-@file{stab.h}.  If @samp{USG} is defined, @samp{NO_STAB_H} is
-assumed.
-
 @findex PATH_SEPARATOR
 @item PATH_SEPARATOR
 Define this macro to be a C character constant representing the
index f6f505caae249e0b42a446c9f4f8acf740692d09..a9a101f3c1bcc85e2054e75634031a924c46e2e9 100644 (file)
@@ -1,13 +1,13 @@
 /* Getopt for GNU.
    NOTE: getopt is now part of the C library, so if you don't know what
-   "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
+   "Keep this file name-space clean" means, talk to drepper@gnu.org
    before changing it!
 
-   Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97
+   Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98
        Free Software Foundation, Inc.
 
    NOTE: The canonical source of this file is maintained with the GNU C Library.
-   Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+   Bugs can be reported to bug-glibc@gnu.org.
 
    This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by the
 /* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
    Ditto for AIX 3.2 and <stdlib.h>.  */
 #ifndef _NO_PROTO
-#define _NO_PROTO
+# define _NO_PROTO
 #endif
 
 #ifdef HAVE_CONFIG_H
-#include <config.h>
+# include <config.h>
 #endif
 
-#if !defined (__STDC__) || !__STDC__
+#if !defined __STDC__ || !__STDC__
 /* This is a separate conditional since some stdc systems
    reject `defined (const)'.  */
-#ifndef const
-#define const
-#endif
+# ifndef const
+#  define const
+# endif
 #endif
 
 #include <stdio.h>
    it is simpler to just do this in the source for each such file.  */
 
 #define GETOPT_INTERFACE_VERSION 2
-#if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2
-#include <gnu-versions.h>
-#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
-#define ELIDE_CODE
-#endif
+#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
+# include <gnu-versions.h>
+# if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
+#  define ELIDE_CODE
+# endif
 #endif
 
 #ifndef ELIDE_CODE
 #ifdef __GNU_LIBRARY__
 /* Don't include stdlib.h for non-GNU C libraries because some of them
    contain conflicting prototypes for getopt.  */
-#include <stdlib.h>
-#include <unistd.h>
+# include <stdlib.h>
+# include <unistd.h>
 #endif /* GNU C library.  */
 
 #ifdef VMS
-#include <unixlib.h>
-#if HAVE_STRING_H - 0
-#include <string.h>
-#endif
+# include <unixlib.h>
+# if HAVE_STRING_H - 0
+#  include <string.h>
+# endif
 #endif
 
 #ifndef _
 /* This is for other GNU distributions with internationalized messages.
    When compiling libc, the _ macro is predefined.  */
-#ifdef HAVE_LIBINTL_H
-# include <libintl.h>
-# define _(msgid)      gettext (msgid)
-#else
-# define _(msgid)      (msgid)
-#endif
+# ifdef HAVE_LIBINTL_H
+#  include <libintl.h>
+#  define _(msgid)     gettext (msgid)
+# else
+#  define _(msgid)     (msgid)
+# endif
 #endif
 
 /* This version of `getopt' appears to the caller like standard Unix `getopt'
@@ -197,14 +197,19 @@ static char *posixly_correct;
    because there are many ways it can cause trouble.
    On some systems, it contains special magic macros that don't work
    in GCC.  */
-#include <string.h>
-#define        my_index        strchr
+# include <string.h>
+# define my_index      strchr
 #else
 
 /* Avoid depending on library functions or files
    whose names are inconsistent.  */
 
-char *getenv ();
+#ifndef getenv
+extern char *getenv ();
+#endif
+#ifndef strncmp
+extern int strncmp ();
+#endif
 
 static char *
 my_index (str, chr)
@@ -225,11 +230,11 @@ my_index (str, chr)
 #ifdef __GNUC__
 /* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h.
    That was relevant to code that was here before.  */
-#if !defined (__STDC__) || !__STDC__
+# if (!defined __STDC__ || !__STDC__) && !defined strlen
 /* gcc with -traditional declares the built-in strlen to return int,
    and has done so at least since version 2.4.5. -- rms.  */
 extern int strlen (const char *);
-#endif /* not __STDC__ */
+# endif /* not __STDC__ */
 #endif /* __GNUC__ */
 
 #endif /* not __GNU_LIBRARY__ */
@@ -292,7 +297,7 @@ text_set_element (__libc_subinit, store_args_and_env);
    `first_nonopt' and `last_nonopt' are relocated so that they describe
    the new indices of the non-options in ARGV after they are moved.  */
 
-#if defined (__STDC__) && __STDC__
+#if defined __STDC__ && __STDC__
 static void exchange (char **);
 #endif
 
@@ -378,7 +383,7 @@ exchange (argv)
 
 /* Initialize the internal data when the first call is made.  */
 
-#if defined (__STDC__) && __STDC__
+#if defined __STDC__ && __STDC__
 static const char *_getopt_initialize (int, char *const *, const char *);
 #endif
 static const char *
@@ -527,11 +532,11 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
      from the shell indicating it is not an option.  The later information
      is only used when the used in the GNU libc.  */
 #ifdef _LIBC
-#define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0'       \
-                    || (optind < nonoption_flags_len                         \
-                        && __getopt_nonoption_flags[optind] == '1'))
+# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0'              \
+                     || (optind < nonoption_flags_len                        \
+                         && __getopt_nonoption_flags[optind] == '1'))
 #else
-#define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0')
+# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0')
 #endif
 
   if (nextchar == NULL || *nextchar == '\0')
index c4adc30bbbac02416757dfc51f8d94b59ba9f847..fb30719a8602a3b800bc55af73c39ab64ce4c6f6 100644 (file)
@@ -2,7 +2,7 @@
    Copyright (C) 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc.
 
    NOTE: The canonical source of this file is maintained with the GNU C Library.
-   Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+   Bugs can be reported to bug-glibc@gnu.org.
 
    This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by the
index af8e681965740e72dbfd83c6238e705c94ffc964..ff257374c335af5847a1a611e1e2cda2ff3caaca 100644 (file)
@@ -1,8 +1,9 @@
 /* getopt_long and getopt_long_only entry points for GNU getopt.
-   Copyright (C) 1987,88,89,90,91,92,93,94,96,97 Free Software Foundation, Inc.
+   Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98
+     Free Software Foundation, Inc.
 
    NOTE: The canonical source of this file is maintained with the GNU C Library.
-   Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+   Bugs can be reported to bug-glibc@gnu.org.
 
    This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by the
@@ -25,7 +26,7 @@
 
 #include "getopt.h"
 
-#if !defined (__STDC__) || !__STDC__
+#if !defined __STDC__ || !__STDC__
 /* This is a separate conditional since some stdc systems
    reject `defined (const)'.  */
 #ifndef const
@@ -44,7 +45,7 @@
    it is simpler to just do this in the source for each such file.  */
 
 #define GETOPT_INTERFACE_VERSION 2
-#if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2
+#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
 #include <gnu-versions.h>
 #if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
 #define ELIDE_CODE
index ed9669eb159d7b8d11ef847780eea502cb1ddf83..dc48c4205074eceb3c47117a882f0572b287d21b 100644 (file)
@@ -74,7 +74,7 @@ see @ref{Cross-Compiler}.)
 Here is an example:
 
 @smallexample
-./configure --build=sparc-sun-sunos4.1
+./configure --host=sparc-sun-sunos4.1
 @end smallexample
 
 A configuration name may be canonical or it may be more or less
index dc293d7f93eb283f38297b64ecebae3aef961e50..894ffe7c3fc50ab1c93801199f539514fd361ad0 100644 (file)
@@ -119,7 +119,8 @@ in the following sections.
 -Wcast-align  -Wcast-qual  -Wchar-subscript  -Wcomment
 -Wconversion  -Werror  -Wformat
 -Wid-clash-@var{len}  -Wimplicit -Wimplicit-int 
--Wimplicit-function-declarations -Wimport  -Winline
+-Wimplicit-function-declaration  -Wimport
+-Werror-implicit-function-declaration  -Winline
 -Wlarger-than-@var{len}  -Wmain  -Wmissing-declarations
 -Wmissing-prototypes  -Wnested-externs  -Wno-import  
 -Wold-style-cast  -Woverloaded-virtual  -Wparentheses
@@ -1269,8 +1270,10 @@ specified.
 @item -Wimplicit-int
 Warn when a declaration does not specify a type.
 
-@item -Wimplicit-function-declarations
-Warn whenever a function is used before being declared.
+@item -Wimplicit-function-declaration
+@itemx -Werror-implicit-function-declaration
+Give a warning (or error) whenever a function is used before being
+declared.
 
 @item -Wimplicit
 Same as @samp{-Wimplicit-int} and @samp{-Wimplicit-function-}@*
@@ -1963,6 +1966,21 @@ Dump after instruction combination, to the file @file{@var{file}.combine}.
 @item d
 Dump after delayed branch scheduling, to @file{@var{file}.dbr}.
 @item D
+Dump all macro definitions, at the end of preprocessing, in addition to
+normal output.
+@item y
+Dump debugging information during parsing, to standard error.
+@item r
+Dump after RTL generation, to @file{@var{file}.rtl}.
+@item x
+Just generate RTL for a function instead of compiling it.  Usually used
+with @samp{r}.
+@item j
+Dump after first jump optimization, to @file{@var{file}.jump}.
+@item s
+Dump after CSE (including the jump optimization that sometimes
+follows CSE), to @file{@var{file}.cse}.
+@item F
 Dump after purging ADDRESSOF, to @file{@var{file}.addressof}.
 @item f
 Dump after flow analysis, to @file{@var{file}.flow}.
index a1525baf26bb47e9949cabf070cdefb763f01605..8a913deb85192348e7be1a2e947240e3990562a8 100644 (file)
@@ -3682,7 +3682,6 @@ label:
 #endif /* DWARF2_UNWIND_INFO */
 
 #endif /* L_eh */
-
 \f
 #ifdef L_pure
 #ifndef inhibit_libc
index 70ecfa8bf329775a5b4ddf393c4a8da35d35baf7..51e554d2965e2bd23e826648e15f12b0d85a8ba8 100644 (file)
@@ -480,6 +480,8 @@ loop_optimize (f, dumpfile, unroll_p)
   /* See if we went too far.  */
   if (get_max_uid () > max_uid_for_loop)
     abort ();
+  /* Now reset it to the actual size we need.  See above.  */
+  max_uid_for_loop = get_max_uid () + 1;
 
   /* Compute the mapping from uids to luids.
      LUIDs are numbers assigned to insns, like uids,
@@ -4115,7 +4117,8 @@ strength_reduce (scan_start, end, loop_top, insn_count,
                  /* We don't handle reversed biv's because bl->biv->insn
                     does not have a valid INSN_LUID.  */
                  && ! bl->reversed
-                 && v->always_executed && ! v->maybe_multiple)
+                 && v->always_executed && ! v->maybe_multiple
+                 && INSN_UID (v->insn) < max_uid_for_loop)
                {
                  /* If other giv's have been combined with this one, then
                     this will work only if all uses of the other giv's occur
index 22c3507b9fb0f35632d501588d9e617965e49988..2fcff2f0a188ee858e1a5207d0da8395bfc3c7f8 100644 (file)
@@ -1,4 +1,4 @@
-@c Copyright (C) 1988,89,92,93,94,96 Free Software Foundation, Inc.
+@c Copyright (C) 1988, 89, 92, 93, 94, 96, 1998 Free Software Foundation, Inc.
 @c This is part of the GCC manual.
 @c For copying conditions, see the file gcc.texi.
 
@@ -2184,8 +2184,8 @@ The above discussion also applies to the @samp{mov@var{mode}cc} and
 @item @samp{call}
 Subroutine call instruction returning no value.  Operand 0 is the
 function to call; operand 1 is the number of bytes of arguments pushed
-(in mode @code{SImode}, except it is normally a @code{const_int});
-operand 2 is the number of registers used as operands.
+as a @code{const_int}; operand 2 is the number of registers used as
+operands.
 
 On most machines, operand 2 is not actually stored into the RTL
 pattern.  It is supplied for the sake of some RISC machines which need
index abb9099469ac84b5fae0627e481bf311347ba6be..6d76eefafcfb523c58eabb6257188883036af550 100644 (file)
@@ -94,10 +94,10 @@ char *language_string = "GNU Obj-C";
 /* Cause the `yydebug' variable to be defined.  */
 #define YYDEBUG 1
 
-#line 71 "objc-parse.y"
+#line 64 "objc-parse.y"
 typedef union {long itype; tree ttype; enum tree_code code;
        char *filename; int lineno; int ends_in_label; } YYSTYPE;
-#line 198 "objc-parse.y"
+#line 191 "objc-parse.y"
 
 /* Number of statements (loosely speaking) and compound statements 
    seen so far.  */
@@ -426,62 +426,62 @@ static const short yyrhs[] = {    -1,
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   238,   243,   257,   259,   259,   260,   262,   264,   265,   266,
-   274,   278,   289,   294,   299,   301,   303,   304,   305,   310,
-   317,   319,   324,   329,   335,   337,   342,   347,   353,   355,
-   360,   367,   369,   370,   371,   374,   376,   378,   380,   382,
-   384,   386,   390,   394,   397,   400,   403,   407,   409,   412,
-   415,   419,   447,   453,   456,   459,   462,   464,   468,   472,
-   476,   478,   481,   485,   512,   514,   516,   518,   520,   522,
-   524,   526,   528,   530,   532,   534,   536,   538,   542,   544,
-   548,   550,   553,   557,   559,   566,   569,   572,   578,   738,
-   739,   741,   747,   749,   763,   786,   788,   790,   802,   816,
-   818,   820,   822,   824,   826,   828,   833,   835,   841,   843,
-   847,   849,   850,   860,   865,   867,   868,   869,   876,   882,
-   887,   890,   898,   903,   905,   906,   907,   914,   925,   929,
-   935,   940,   945,   950,   952,   954,   963,   966,   970,   972,
-   974,   979,   983,   986,   990,   993,   995,  1007,  1010,  1012,
-  1014,  1018,  1022,  1024,  1027,  1040,  1043,  1047,  1049,  1057,
-  1058,  1059,  1063,  1065,  1070,  1072,  1074,  1080,  1081,  1082,
-  1085,  1087,  1090,  1092,  1095,  1098,  1104,  1111,  1113,  1120,
-  1127,  1130,  1137,  1140,  1144,  1147,  1151,  1156,  1159,  1163,
-  1166,  1168,  1170,  1172,  1179,  1181,  1182,  1183,  1188,  1190,
-  1195,  1203,  1208,  1212,  1215,  1217,  1222,  1225,  1227,  1229,
-  1233,  1236,  1236,  1239,  1241,  1252,  1260,  1264,  1275,  1283,
-  1290,  1292,  1297,  1300,  1305,  1307,  1309,  1316,  1318,  1319,
-  1327,  1333,  1335,  1337,  1344,  1346,  1352,  1358,  1360,  1362,
-  1364,  1371,  1373,  1376,  1381,  1383,  1387,  1389,  1391,  1393,
-  1397,  1399,  1402,  1405,  1408,  1411,  1415,  1417,  1420,  1422,
-  1426,  1429,  1434,  1436,  1438,  1442,  1466,  1473,  1478,  1484,
-  1489,  1491,  1496,  1498,  1502,  1506,  1510,  1520,  1522,  1527,
-  1532,  1535,  1539,  1542,  1546,  1549,  1552,  1555,  1559,  1562,
-  1566,  1570,  1572,  1574,  1576,  1578,  1580,  1582,  1584,  1594,
-  1602,  1604,  1606,  1610,  1612,  1615,  1618,  1631,  1633,  1638,
-  1640,  1643,  1657,  1660,  1663,  1665,  1667,  1675,  1683,  1694,
-  1699,  1702,  1716,  1725,  1729,  1733,  1737,  1743,  1747,  1752,
-  1755,  1760,  1763,  1764,  1781,  1786,  1789,  1801,  1803,  1813,
-  1823,  1824,  1832,  1835,  1847,  1851,  1868,  1878,  1887,  1892,
-  1897,  1902,  1906,  1910,  1921,  1928,  1935,  1942,  1953,  1959,
-  1962,  1967,  1990,  2024,  2049,  2080,  2095,  2106,  2110,  2114,
-  2117,  2122,  2124,  2127,  2129,  2133,  2138,  2141,  2147,  2152,
-  2157,  2159,  2168,  2169,  2175,  2177,  2187,  2189,  2193,  2196,
-  2202,  2212,  2221,  2230,  2240,  2254,  2259,  2264,  2266,  2275,
-  2278,  2283,  2286,  2290,  2298,  2300,  2301,  2302,  2303,  2304,
-  2318,  2321,  2325,  2331,  2337,  2344,  2349,  2355,  2362,  2368,
-  2374,  2379,  2385,  2392,  2398,  2404,  2410,  2418,  2424,  2430,
-  2438,  2445,  2451,  2460,  2467,  2475,  2480,  2483,  2493,  2495,
-  2498,  2500,  2501,  2504,  2509,  2510,  2527,  2534,  2540,  2544,
-  2547,  2548,  2551,  2559,  2565,  2574,  2584,  2591,  2595,  2600,
-  2609,  2616,  2620,  2630,  2632,  2633,  2635,  2637,  2638,  2639,
-  2640,  2642,  2644,  2647,  2655,  2662,  2662,  2669,  2675,  2677,
-  2683,  2688,  2693,  2702,  2704,  2710,  2712,  2715,  2717,  2718,
-  2719,  2722,  2728,  2730,  2734,  2737,  2744,  2750,  2755,  2762,
-  2767,  2772,  2777,  2784,  2788,  2791,  2797,  2799,  2800,  2801,
-  2804,  2806,  2807,  2808,  2809,  2810,  2811,  2812,  2813,  2814,
-  2815,  2816,  2817,  2818,  2819,  2820,  2821,  2822,  2823,  2824,
-  2824,  2827,  2833,  2838,  2843,  2849,  2851,  2854,  2856,  2863,
-  2875,  2880,  2886,  2888,  2894,  2898,  2899,  2905,  2907,  2910,
-  2912,  2918,  2923,  2929,  2936,  2945
+   231,   236,   250,   252,   252,   253,   255,   257,   258,   259,
+   267,   271,   282,   287,   292,   294,   296,   297,   298,   303,
+   310,   312,   317,   322,   328,   330,   335,   340,   346,   348,
+   353,   360,   362,   363,   364,   367,   369,   371,   373,   375,
+   377,   379,   383,   387,   390,   393,   396,   400,   402,   405,
+   408,   412,   440,   446,   449,   452,   455,   457,   461,   465,
+   469,   471,   474,   478,   505,   507,   509,   511,   513,   515,
+   517,   519,   521,   523,   525,   527,   529,   531,   535,   537,
+   541,   543,   546,   550,   552,   559,   562,   565,   571,   731,
+   732,   734,   740,   742,   756,   779,   781,   783,   795,   809,
+   811,   813,   815,   817,   819,   821,   826,   828,   834,   836,
+   840,   842,   843,   853,   858,   860,   861,   862,   869,   875,
+   880,   883,   891,   896,   898,   899,   900,   907,   918,   922,
+   928,   933,   938,   943,   945,   947,   956,   959,   963,   965,
+   967,   972,   976,   979,   983,   986,   988,  1000,  1003,  1005,
+  1007,  1011,  1015,  1017,  1020,  1033,  1036,  1040,  1042,  1050,
+  1051,  1052,  1056,  1058,  1063,  1065,  1067,  1073,  1074,  1075,
+  1078,  1080,  1083,  1085,  1088,  1091,  1097,  1104,  1106,  1113,
+  1120,  1123,  1130,  1133,  1137,  1140,  1144,  1149,  1152,  1156,
+  1159,  1161,  1163,  1165,  1172,  1174,  1175,  1176,  1181,  1183,
+  1188,  1196,  1201,  1205,  1208,  1210,  1215,  1218,  1220,  1222,
+  1226,  1229,  1229,  1232,  1234,  1245,  1253,  1257,  1268,  1276,
+  1283,  1285,  1290,  1293,  1298,  1300,  1302,  1309,  1311,  1312,
+  1320,  1326,  1328,  1330,  1337,  1339,  1345,  1351,  1353,  1355,
+  1357,  1364,  1366,  1369,  1374,  1376,  1380,  1382,  1384,  1386,
+  1390,  1392,  1395,  1398,  1401,  1404,  1408,  1410,  1413,  1415,
+  1419,  1422,  1427,  1429,  1431,  1435,  1459,  1466,  1471,  1477,
+  1482,  1484,  1489,  1491,  1495,  1499,  1503,  1513,  1515,  1520,
+  1525,  1528,  1532,  1535,  1539,  1542,  1545,  1548,  1552,  1555,
+  1559,  1563,  1565,  1567,  1569,  1571,  1573,  1575,  1577,  1587,
+  1595,  1597,  1599,  1603,  1605,  1608,  1611,  1624,  1626,  1631,
+  1633,  1636,  1650,  1653,  1656,  1658,  1660,  1668,  1676,  1687,
+  1692,  1695,  1709,  1718,  1722,  1726,  1730,  1736,  1740,  1745,
+  1748,  1753,  1756,  1757,  1774,  1779,  1782,  1794,  1796,  1806,
+  1816,  1817,  1825,  1828,  1840,  1844,  1861,  1871,  1880,  1885,
+  1890,  1895,  1899,  1903,  1914,  1921,  1928,  1935,  1946,  1952,
+  1955,  1960,  1983,  2017,  2048,  2079,  2094,  2105,  2109,  2113,
+  2116,  2121,  2123,  2126,  2128,  2132,  2137,  2140,  2146,  2151,
+  2156,  2158,  2167,  2168,  2174,  2176,  2186,  2188,  2192,  2195,
+  2201,  2211,  2220,  2229,  2239,  2253,  2258,  2263,  2265,  2274,
+  2277,  2282,  2285,  2289,  2297,  2299,  2300,  2301,  2302,  2303,
+  2317,  2320,  2324,  2330,  2336,  2343,  2348,  2354,  2361,  2367,
+  2373,  2378,  2384,  2391,  2397,  2403,  2409,  2417,  2423,  2429,
+  2437,  2444,  2450,  2459,  2466,  2474,  2479,  2482,  2492,  2494,
+  2497,  2499,  2500,  2503,  2508,  2509,  2526,  2533,  2539,  2543,
+  2546,  2547,  2550,  2558,  2564,  2573,  2583,  2590,  2594,  2599,
+  2608,  2615,  2619,  2629,  2631,  2632,  2634,  2636,  2637,  2638,
+  2639,  2641,  2643,  2646,  2654,  2661,  2661,  2668,  2674,  2676,
+  2682,  2687,  2692,  2701,  2703,  2709,  2711,  2714,  2716,  2717,
+  2718,  2721,  2727,  2729,  2733,  2736,  2743,  2749,  2754,  2761,
+  2766,  2771,  2776,  2783,  2787,  2790,  2796,  2798,  2799,  2800,
+  2803,  2805,  2806,  2807,  2808,  2809,  2810,  2811,  2812,  2813,
+  2814,  2815,  2816,  2817,  2818,  2819,  2820,  2821,  2822,  2823,
+  2823,  2826,  2832,  2837,  2842,  2848,  2850,  2853,  2855,  2862,
+  2874,  2879,  2885,  2887,  2893,  2897,  2898,  2904,  2906,  2909,
+  2911,  2917,  2922,  2928,  2935,  2944
 };
 #endif
 
@@ -1631,7 +1631,7 @@ static const short yycheck[] = {     9,
     48,    49,    50,    51,    52
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/cygnus/progressive-97r2/share/bison.simple"
+#line 3 "/usr/share/bison.simple"
 
 /* Skeleton output parser for bison,
    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
@@ -1824,7 +1824,7 @@ __yy_memcpy (char *to, char *from, int count)
 #endif
 #endif
 \f
-#line 196 "/usr/cygnus/progressive-97r2/share/bison.simple"
+#line 196 "/usr/share/bison.simple"
 
 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
    into yyparse.  The argument should have type void *.
@@ -2129,14 +2129,14 @@ yyreduce:
   switch (yyn) {
 
 case 1:
-#line 239 "objc-parse.y"
+#line 232 "objc-parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C forbids an empty source file");
                  finish_file ();
                ;
     break;}
 case 2:
-#line 244 "objc-parse.y"
+#line 237 "objc-parse.y"
 {
                  /* In case there were missing closebraces,
                     get us back to the global binding level.  */
@@ -2146,15 +2146,15 @@ case 2:
                ;
     break;}
 case 3:
-#line 258 "objc-parse.y"
+#line 251 "objc-parse.y"
 {yyval.ttype = NULL_TREE; ;
     break;}
 case 5:
-#line 259 "objc-parse.y"
+#line 252 "objc-parse.y"
 {yyval.ttype = NULL_TREE; ;
     break;}
 case 10:
-#line 267 "objc-parse.y"
+#line 260 "objc-parse.y"
 { STRIP_NOPS (yyvsp[-2].ttype);
                  if ((TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR
                       && TREE_CODE (TREE_OPERAND (yyvsp[-2].ttype, 0)) == STRING_CST)
@@ -2164,11 +2164,11 @@ case 10:
                    error ("argument of `asm' is not a constant string"); ;
     break;}
 case 11:
-#line 275 "objc-parse.y"
+#line 268 "objc-parse.y"
 { pedantic = yyvsp[-1].itype; ;
     break;}
 case 12:
-#line 280 "objc-parse.y"
+#line 273 "objc-parse.y"
 { if (pedantic)
                    error ("ANSI C forbids data definition with no type or storage class");
                  else if (!flag_traditional)
@@ -2180,45 +2180,45 @@ case 12:
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 13:
-#line 290 "objc-parse.y"
+#line 283 "objc-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 14:
-#line 295 "objc-parse.y"
+#line 288 "objc-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-2].itype);  ;
     break;}
 case 15:
-#line 300 "objc-parse.y"
+#line 293 "objc-parse.y"
 { pedwarn ("empty declaration"); ;
     break;}
 case 16:
-#line 302 "objc-parse.y"
+#line 295 "objc-parse.y"
 { shadow_tag (yyvsp[-1].ttype); ;
     break;}
 case 19:
-#line 306 "objc-parse.y"
+#line 299 "objc-parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C does not allow extra `;' outside of a function"); ;
     break;}
 case 20:
-#line 312 "objc-parse.y"
+#line 305 "objc-parse.y"
 { if (! start_function (current_declspecs, yyvsp[0].ttype,
                                        prefix_attributes, NULL_TREE, 0))
                    YYERROR1;
                  reinit_parse_for_function (); ;
     break;}
 case 21:
-#line 317 "objc-parse.y"
+#line 310 "objc-parse.y"
 { store_parm_decls (); ;
     break;}
 case 22:
-#line 319 "objc-parse.y"
+#line 312 "objc-parse.y"
 { finish_function (0); 
                  current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
@@ -2226,25 +2226,25 @@ case 22:
                  resume_momentary (yyvsp[-5].itype); ;
     break;}
 case 23:
-#line 325 "objc-parse.y"
+#line 318 "objc-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 24:
-#line 330 "objc-parse.y"
+#line 323 "objc-parse.y"
 { if (! start_function (current_declspecs, yyvsp[0].ttype,
                                        prefix_attributes, NULL_TREE, 0))
                    YYERROR1;
                  reinit_parse_for_function (); ;
     break;}
 case 25:
-#line 335 "objc-parse.y"
+#line 328 "objc-parse.y"
 { store_parm_decls (); ;
     break;}
 case 26:
-#line 337 "objc-parse.y"
+#line 330 "objc-parse.y"
 { finish_function (0); 
                  current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
@@ -2252,25 +2252,25 @@ case 26:
                  resume_momentary (yyvsp[-5].itype); ;
     break;}
 case 27:
-#line 343 "objc-parse.y"
+#line 336 "objc-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 28:
-#line 348 "objc-parse.y"
+#line 341 "objc-parse.y"
 { if (! start_function (NULL_TREE, yyvsp[0].ttype,
                                        prefix_attributes, NULL_TREE, 0))
                    YYERROR1;
                  reinit_parse_for_function (); ;
     break;}
 case 29:
-#line 353 "objc-parse.y"
+#line 346 "objc-parse.y"
 { store_parm_decls (); ;
     break;}
 case 30:
-#line 355 "objc-parse.y"
+#line 348 "objc-parse.y"
 { finish_function (0); 
                  current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
@@ -2278,72 +2278,72 @@ case 30:
                  resume_momentary (yyvsp[-5].itype); ;
     break;}
 case 31:
-#line 361 "objc-parse.y"
+#line 354 "objc-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 36:
-#line 375 "objc-parse.y"
+#line 368 "objc-parse.y"
 { yyval.code = ADDR_EXPR; ;
     break;}
 case 37:
-#line 377 "objc-parse.y"
+#line 370 "objc-parse.y"
 { yyval.code = NEGATE_EXPR; ;
     break;}
 case 38:
-#line 379 "objc-parse.y"
+#line 372 "objc-parse.y"
 { yyval.code = CONVERT_EXPR; ;
     break;}
 case 39:
-#line 381 "objc-parse.y"
+#line 374 "objc-parse.y"
 { yyval.code = PREINCREMENT_EXPR; ;
     break;}
 case 40:
-#line 383 "objc-parse.y"
+#line 376 "objc-parse.y"
 { yyval.code = PREDECREMENT_EXPR; ;
     break;}
 case 41:
-#line 385 "objc-parse.y"
+#line 378 "objc-parse.y"
 { yyval.code = BIT_NOT_EXPR; ;
     break;}
 case 42:
-#line 387 "objc-parse.y"
+#line 380 "objc-parse.y"
 { yyval.code = TRUTH_NOT_EXPR; ;
     break;}
 case 43:
-#line 391 "objc-parse.y"
+#line 384 "objc-parse.y"
 { yyval.ttype = build_compound_expr (yyvsp[0].ttype); ;
     break;}
 case 44:
-#line 396 "objc-parse.y"
+#line 389 "objc-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 46:
-#line 402 "objc-parse.y"
+#line 395 "objc-parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 47:
-#line 404 "objc-parse.y"
+#line 397 "objc-parse.y"
 { chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
 case 49:
-#line 410 "objc-parse.y"
+#line 403 "objc-parse.y"
 { yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); ;
     break;}
 case 50:
-#line 413 "objc-parse.y"
+#line 406 "objc-parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  pedantic = yyvsp[-1].itype; ;
     break;}
 case 51:
-#line 416 "objc-parse.y"
+#line 409 "objc-parse.y"
 { yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0);
                  overflow_warning (yyval.ttype); ;
     break;}
 case 52:
-#line 420 "objc-parse.y"
+#line 413 "objc-parse.y"
 { tree label = lookup_label (yyvsp[0].ttype);
                  if (pedantic)
                    pedwarn ("ANSI C forbids `&&'");
@@ -2358,7 +2358,7 @@ case 52:
                ;
     break;}
 case 53:
-#line 448 "objc-parse.y"
+#line 441 "objc-parse.y"
 { skip_evaluation--;
                  if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF
                      && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[0].ttype, 1)))
@@ -2366,49 +2366,49 @@ case 53:
                  yyval.ttype = c_sizeof (TREE_TYPE (yyvsp[0].ttype)); ;
     break;}
 case 54:
-#line 454 "objc-parse.y"
+#line 447 "objc-parse.y"
 { skip_evaluation--;
                  yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ttype)); ;
     break;}
 case 55:
-#line 457 "objc-parse.y"
+#line 450 "objc-parse.y"
 { skip_evaluation--;
                  yyval.ttype = c_alignof_expr (yyvsp[0].ttype); ;
     break;}
 case 56:
-#line 460 "objc-parse.y"
+#line 453 "objc-parse.y"
 { skip_evaluation--;
                  yyval.ttype = c_alignof (groktypename (yyvsp[-1].ttype)); ;
     break;}
 case 57:
-#line 463 "objc-parse.y"
+#line 456 "objc-parse.y"
 { yyval.ttype = build_unary_op (REALPART_EXPR, yyvsp[0].ttype, 0); ;
     break;}
 case 58:
-#line 465 "objc-parse.y"
+#line 458 "objc-parse.y"
 { yyval.ttype = build_unary_op (IMAGPART_EXPR, yyvsp[0].ttype, 0); ;
     break;}
 case 59:
-#line 469 "objc-parse.y"
+#line 462 "objc-parse.y"
 { skip_evaluation++; ;
     break;}
 case 60:
-#line 473 "objc-parse.y"
+#line 466 "objc-parse.y"
 { skip_evaluation++; ;
     break;}
 case 62:
-#line 479 "objc-parse.y"
+#line 472 "objc-parse.y"
 { tree type = groktypename (yyvsp[-2].ttype);
                  yyval.ttype = build_c_cast (type, yyvsp[0].ttype); ;
     break;}
 case 63:
-#line 482 "objc-parse.y"
+#line 475 "objc-parse.y"
 { start_init (NULL_TREE, NULL, 0);
                  yyvsp[-2].ttype = groktypename (yyvsp[-2].ttype);
                  really_start_incremental_init (yyvsp[-2].ttype); ;
     break;}
 case 64:
-#line 486 "objc-parse.y"
+#line 479 "objc-parse.y"
 { char *name;
                  tree result = pop_init_level (0);
                  tree type = yyvsp[-5].ttype;
@@ -2435,90 +2435,90 @@ case 64:
                ;
     break;}
 case 66:
-#line 515 "objc-parse.y"
+#line 508 "objc-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 67:
-#line 517 "objc-parse.y"
+#line 510 "objc-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 68:
-#line 519 "objc-parse.y"
+#line 512 "objc-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 69:
-#line 521 "objc-parse.y"
+#line 514 "objc-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 70:
-#line 523 "objc-parse.y"
+#line 516 "objc-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 71:
-#line 525 "objc-parse.y"
+#line 518 "objc-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 72:
-#line 527 "objc-parse.y"
+#line 520 "objc-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 73:
-#line 529 "objc-parse.y"
+#line 522 "objc-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 74:
-#line 531 "objc-parse.y"
+#line 524 "objc-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 75:
-#line 533 "objc-parse.y"
+#line 526 "objc-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 76:
-#line 535 "objc-parse.y"
+#line 528 "objc-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 77:
-#line 537 "objc-parse.y"
+#line 530 "objc-parse.y"
 { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 78:
-#line 539 "objc-parse.y"
+#line 532 "objc-parse.y"
 { yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
                  skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;
     break;}
 case 79:
-#line 542 "objc-parse.y"
+#line 535 "objc-parse.y"
 { skip_evaluation -= yyvsp[-3].ttype == boolean_false_node;
                  yyval.ttype = parser_build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
     break;}
 case 80:
-#line 545 "objc-parse.y"
+#line 538 "objc-parse.y"
 { yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
                  skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;
     break;}
 case 81:
-#line 548 "objc-parse.y"
+#line 541 "objc-parse.y"
 { skip_evaluation -= yyvsp[-3].ttype == boolean_true_node;
                  yyval.ttype = parser_build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
     break;}
 case 82:
-#line 551 "objc-parse.y"
+#line 544 "objc-parse.y"
 { yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
                  skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;
     break;}
 case 83:
-#line 554 "objc-parse.y"
+#line 547 "objc-parse.y"
 { skip_evaluation += ((yyvsp[-4].ttype == boolean_true_node)
                                      - (yyvsp[-4].ttype == boolean_false_node)); ;
     break;}
 case 84:
-#line 557 "objc-parse.y"
+#line 550 "objc-parse.y"
 { skip_evaluation -= yyvsp[-6].ttype == boolean_true_node;
                  yyval.ttype = build_conditional_expr (yyvsp[-6].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
     break;}
 case 85:
-#line 560 "objc-parse.y"
+#line 553 "objc-parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C forbids omitting the middle term of a ?: expression");
                  /* Make sure first operand is calculated only once.  */
@@ -2527,23 +2527,23 @@ case 85:
                  skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;
     break;}
 case 86:
-#line 567 "objc-parse.y"
+#line 560 "objc-parse.y"
 { skip_evaluation -= yyvsp[-4].ttype == boolean_true_node;
                  yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
     break;}
 case 87:
-#line 570 "objc-parse.y"
+#line 563 "objc-parse.y"
 { yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype);
                  C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR); ;
     break;}
 case 88:
-#line 573 "objc-parse.y"
+#line 566 "objc-parse.y"
 { yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype);
                  /* This inhibits warnings in truthvalue_conversion.  */
                  C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK); ;
     break;}
 case 89:
-#line 580 "objc-parse.y"
+#line 573 "objc-parse.y"
 {
                  yyval.ttype = lastiddecl;
                  if (!yyval.ttype || yyval.ttype == error_mark_node)
@@ -2704,11 +2704,11 @@ case 89:
                ;
     break;}
 case 91:
-#line 740 "objc-parse.y"
+#line 733 "objc-parse.y"
 { yyval.ttype = combine_strings (yyvsp[0].ttype); ;
     break;}
 case 92:
-#line 742 "objc-parse.y"
+#line 735 "objc-parse.y"
 { char class = TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype));
                  if (class == 'e' || class == '1'
                      || class == '2' || class == '<')
@@ -2716,11 +2716,11 @@ case 92:
                  yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 93:
-#line 748 "objc-parse.y"
+#line 741 "objc-parse.y"
 { yyval.ttype = error_mark_node; ;
     break;}
 case 94:
-#line 750 "objc-parse.y"
+#line 743 "objc-parse.y"
 { if (current_function_decl == 0)
                    {
                      error ("braced-group within expression allowed only inside a function");
@@ -2736,7 +2736,7 @@ case 94:
                  yyval.ttype = expand_start_stmt_expr (); ;
     break;}
 case 95:
-#line 764 "objc-parse.y"
+#line 757 "objc-parse.y"
 { tree rtl_exp;
                  if (pedantic)
                    pedwarn ("ANSI C forbids braced-groups within expressions");
@@ -2761,15 +2761,15 @@ case 95:
                ;
     break;}
 case 96:
-#line 787 "objc-parse.y"
+#line 780 "objc-parse.y"
 { yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 97:
-#line 789 "objc-parse.y"
+#line 782 "objc-parse.y"
 { yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 98:
-#line 791 "objc-parse.y"
+#line 784 "objc-parse.y"
 {
                   if (doing_objc_thang)
                     {
@@ -2783,7 +2783,7 @@ case 98:
                ;
     break;}
 case 99:
-#line 803 "objc-parse.y"
+#line 796 "objc-parse.y"
 {
                   tree expr = build_indirect_ref (yyvsp[-2].ttype, "->");
 
@@ -2799,80 +2799,80 @@ case 99:
                ;
     break;}
 case 100:
-#line 817 "objc-parse.y"
+#line 810 "objc-parse.y"
 { yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ;
     break;}
 case 101:
-#line 819 "objc-parse.y"
+#line 812 "objc-parse.y"
 { yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ;
     break;}
 case 102:
-#line 821 "objc-parse.y"
+#line 814 "objc-parse.y"
 { yyval.ttype = build_message_expr (yyvsp[0].ttype); ;
     break;}
 case 103:
-#line 823 "objc-parse.y"
+#line 816 "objc-parse.y"
 { yyval.ttype = build_selector_expr (yyvsp[0].ttype); ;
     break;}
 case 104:
-#line 825 "objc-parse.y"
+#line 818 "objc-parse.y"
 { yyval.ttype = build_protocol_expr (yyvsp[0].ttype); ;
     break;}
 case 105:
-#line 827 "objc-parse.y"
+#line 820 "objc-parse.y"
 { yyval.ttype = build_encode_expr (yyvsp[0].ttype); ;
     break;}
 case 106:
-#line 829 "objc-parse.y"
+#line 822 "objc-parse.y"
 { yyval.ttype = build_objc_string_object (yyvsp[0].ttype); ;
     break;}
 case 108:
-#line 836 "objc-parse.y"
+#line 829 "objc-parse.y"
 { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 110:
-#line 844 "objc-parse.y"
+#line 837 "objc-parse.y"
 { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 113:
-#line 852 "objc-parse.y"
+#line 845 "objc-parse.y"
 { c_mark_varargs ();
                  if (pedantic)
                    pedwarn ("ANSI C does not permit use of `varargs.h'"); ;
     break;}
 case 114:
-#line 862 "objc-parse.y"
+#line 855 "objc-parse.y"
 { ;
     break;}
 case 119:
-#line 878 "objc-parse.y"
+#line 871 "objc-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 120:
-#line 883 "objc-parse.y"
+#line 876 "objc-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);     
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 121:
-#line 888 "objc-parse.y"
+#line 881 "objc-parse.y"
 { shadow_tag_warned (yyvsp[-1].ttype, 1);
                  pedwarn ("empty declaration"); ;
     break;}
 case 122:
-#line 891 "objc-parse.y"
+#line 884 "objc-parse.y"
 { pedwarn ("empty declaration"); ;
     break;}
 case 123:
-#line 900 "objc-parse.y"
+#line 893 "objc-parse.y"
 { ;
     break;}
 case 128:
-#line 915 "objc-parse.y"
+#line 908 "objc-parse.y"
 { yyval.itype = suspend_momentary ();
                  pending_xref_error ();
                  declspec_stack = tree_cons (prefix_attributes,
@@ -2882,131 +2882,131 @@ case 128:
                                     &current_declspecs, &prefix_attributes); ;
     break;}
 case 129:
-#line 926 "objc-parse.y"
+#line 919 "objc-parse.y"
 { prefix_attributes = chainon (prefix_attributes, yyvsp[0].ttype); ;
     break;}
 case 130:
-#line 931 "objc-parse.y"
+#line 924 "objc-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 131:
-#line 936 "objc-parse.y"
+#line 929 "objc-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 132:
-#line 941 "objc-parse.y"
+#line 934 "objc-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-1].itype); ;
     break;}
 case 133:
-#line 946 "objc-parse.y"
+#line 939 "objc-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-1].itype); ;
     break;}
 case 134:
-#line 951 "objc-parse.y"
+#line 944 "objc-parse.y"
 { shadow_tag (yyvsp[-1].ttype); ;
     break;}
 case 135:
-#line 953 "objc-parse.y"
+#line 946 "objc-parse.y"
 { pedwarn ("empty declaration"); ;
     break;}
 case 136:
-#line 955 "objc-parse.y"
+#line 948 "objc-parse.y"
 { pedantic = yyvsp[-1].itype; ;
     break;}
 case 137:
-#line 965 "objc-parse.y"
+#line 958 "objc-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 138:
-#line 967 "objc-parse.y"
+#line 960 "objc-parse.y"
 { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
     break;}
 case 139:
-#line 971 "objc-parse.y"
+#line 964 "objc-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 140:
-#line 973 "objc-parse.y"
+#line 966 "objc-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 141:
-#line 975 "objc-parse.y"
+#line 968 "objc-parse.y"
 { if (extra_warnings)
                    warning ("`%s' is not at beginning of declaration",
                             IDENTIFIER_POINTER (yyvsp[0].ttype));
                  yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 142:
-#line 980 "objc-parse.y"
+#line 973 "objc-parse.y"
 { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
 case 143:
-#line 985 "objc-parse.y"
+#line 978 "objc-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 144:
-#line 987 "objc-parse.y"
+#line 980 "objc-parse.y"
 { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
     break;}
 case 145:
-#line 992 "objc-parse.y"
+#line 985 "objc-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 146:
-#line 994 "objc-parse.y"
+#line 987 "objc-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 147:
-#line 996 "objc-parse.y"
+#line 989 "objc-parse.y"
 { if (extra_warnings)
                    warning ("`%s' is not at beginning of declaration",
                             IDENTIFIER_POINTER (yyvsp[0].ttype));
                  yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 148:
-#line 1009 "objc-parse.y"
+#line 1002 "objc-parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 149:
-#line 1011 "objc-parse.y"
+#line 1004 "objc-parse.y"
 { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ;
     break;}
 case 150:
-#line 1013 "objc-parse.y"
+#line 1006 "objc-parse.y"
 { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 151:
-#line 1015 "objc-parse.y"
+#line 1008 "objc-parse.y"
 { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
 case 152:
-#line 1020 "objc-parse.y"
+#line 1013 "objc-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
                  TREE_STATIC (yyval.ttype) = 1; ;
     break;}
 case 153:
-#line 1023 "objc-parse.y"
+#line 1016 "objc-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 154:
-#line 1025 "objc-parse.y"
+#line 1018 "objc-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
                  TREE_STATIC (yyval.ttype) = 1; ;
     break;}
 case 155:
-#line 1028 "objc-parse.y"
+#line 1021 "objc-parse.y"
 { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
                    warning ("`%s' is not at beginning of declaration",
                             IDENTIFIER_POINTER (yyvsp[0].ttype));
@@ -3014,150 +3014,150 @@ case 155:
                  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
     break;}
 case 156:
-#line 1042 "objc-parse.y"
+#line 1035 "objc-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 157:
-#line 1044 "objc-parse.y"
+#line 1037 "objc-parse.y"
 { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
     break;}
 case 158:
-#line 1048 "objc-parse.y"
+#line 1041 "objc-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 159:
-#line 1050 "objc-parse.y"
+#line 1043 "objc-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 162:
-#line 1060 "objc-parse.y"
+#line 1053 "objc-parse.y"
 { /* For a typedef name, record the meaning, not the name.
                     In case of `foo foo, bar;'.  */
                  yyval.ttype = lookup_name (yyvsp[0].ttype); ;
     break;}
 case 163:
-#line 1064 "objc-parse.y"
+#line 1057 "objc-parse.y"
 { yyval.ttype = get_static_reference (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 164:
-#line 1066 "objc-parse.y"
+#line 1059 "objc-parse.y"
 { yyval.ttype = get_object_reference (yyvsp[0].ttype); ;
     break;}
 case 165:
-#line 1071 "objc-parse.y"
+#line 1064 "objc-parse.y"
 { yyval.ttype = get_object_reference (yyvsp[0].ttype); ;
     break;}
 case 166:
-#line 1073 "objc-parse.y"
+#line 1066 "objc-parse.y"
 { yyval.ttype = TREE_TYPE (yyvsp[-1].ttype); ;
     break;}
 case 167:
-#line 1075 "objc-parse.y"
+#line 1068 "objc-parse.y"
 { yyval.ttype = groktypename (yyvsp[-1].ttype); ;
     break;}
 case 175:
-#line 1097 "objc-parse.y"
+#line 1090 "objc-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 176:
-#line 1099 "objc-parse.y"
+#line 1092 "objc-parse.y"
 { if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype);
                  yyval.ttype = yyvsp[-1].ttype;
                ;
     break;}
 case 177:
-#line 1106 "objc-parse.y"
+#line 1099 "objc-parse.y"
 { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
                                          yyvsp[-1].ttype, prefix_attributes);
                  start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
     break;}
 case 178:
-#line 1111 "objc-parse.y"
+#line 1104 "objc-parse.y"
 { finish_init ();
                  finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
     break;}
 case 179:
-#line 1114 "objc-parse.y"
+#line 1107 "objc-parse.y"
 { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
                                       yyvsp[0].ttype, prefix_attributes);
                  finish_decl (d, NULL_TREE, yyvsp[-1].ttype); 
                 ;
     break;}
 case 180:
-#line 1122 "objc-parse.y"
+#line 1115 "objc-parse.y"
 { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
                                          yyvsp[-1].ttype, prefix_attributes);
                  start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
     break;}
 case 181:
-#line 1127 "objc-parse.y"
+#line 1120 "objc-parse.y"
 { finish_init ();
                  decl_attributes (yyvsp[-1].ttype, yyvsp[-3].ttype, prefix_attributes);
                  finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
     break;}
 case 182:
-#line 1131 "objc-parse.y"
+#line 1124 "objc-parse.y"
 { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
                                       yyvsp[0].ttype, prefix_attributes);
                  finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
 case 183:
-#line 1139 "objc-parse.y"
+#line 1132 "objc-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 184:
-#line 1141 "objc-parse.y"
+#line 1134 "objc-parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 185:
-#line 1146 "objc-parse.y"
+#line 1139 "objc-parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 186:
-#line 1148 "objc-parse.y"
+#line 1141 "objc-parse.y"
 { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 187:
-#line 1153 "objc-parse.y"
+#line 1146 "objc-parse.y"
 { yyval.ttype = yyvsp[-2].ttype; ;
     break;}
 case 188:
-#line 1158 "objc-parse.y"
+#line 1151 "objc-parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 189:
-#line 1160 "objc-parse.y"
+#line 1153 "objc-parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 190:
-#line 1165 "objc-parse.y"
+#line 1158 "objc-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 191:
-#line 1167 "objc-parse.y"
+#line 1160 "objc-parse.y"
 { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 192:
-#line 1169 "objc-parse.y"
+#line 1162 "objc-parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;
     break;}
 case 193:
-#line 1171 "objc-parse.y"
+#line 1164 "objc-parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ;
     break;}
 case 194:
-#line 1173 "objc-parse.y"
+#line 1166 "objc-parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 200:
-#line 1191 "objc-parse.y"
+#line 1184 "objc-parse.y"
 { really_start_incremental_init (NULL_TREE);
                  /* Note that the call to clear_momentary
                     is in process_init_element.  */
                  push_momentary (); ;
     break;}
 case 201:
-#line 1196 "objc-parse.y"
+#line 1189 "objc-parse.y"
 { yyval.ttype = pop_init_level (0);
                  if (yyval.ttype == error_mark_node
                      && ! (yychar == STRING || yychar == CONSTANT))
@@ -3166,36 +3166,36 @@ case 201:
                    pop_momentary_nofree (); ;
     break;}
 case 202:
-#line 1204 "objc-parse.y"
+#line 1197 "objc-parse.y"
 { yyval.ttype = error_mark_node; ;
     break;}
 case 203:
-#line 1210 "objc-parse.y"
+#line 1203 "objc-parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C forbids empty initializer braces"); ;
     break;}
 case 207:
-#line 1224 "objc-parse.y"
+#line 1217 "objc-parse.y"
 { process_init_element (yyvsp[0].ttype); ;
     break;}
 case 208:
-#line 1226 "objc-parse.y"
+#line 1219 "objc-parse.y"
 { push_init_level (0); ;
     break;}
 case 209:
-#line 1228 "objc-parse.y"
+#line 1221 "objc-parse.y"
 { process_init_element (pop_init_level (0)); ;
     break;}
 case 211:
-#line 1234 "objc-parse.y"
+#line 1227 "objc-parse.y"
 { set_init_label (yyvsp[-1].ttype); ;
     break;}
 case 213:
-#line 1237 "objc-parse.y"
+#line 1230 "objc-parse.y"
 { set_init_label (yyvsp[-1].ttype); ;
     break;}
 case 215:
-#line 1243 "objc-parse.y"
+#line 1236 "objc-parse.y"
 { push_c_function_context ();
                  if (! start_function (current_declspecs, yyvsp[0].ttype,
                                        prefix_attributes, NULL_TREE, 1))
@@ -3206,16 +3206,16 @@ case 215:
                  reinit_parse_for_function (); ;
     break;}
 case 216:
-#line 1252 "objc-parse.y"
+#line 1245 "objc-parse.y"
 { store_parm_decls (); ;
     break;}
 case 217:
-#line 1260 "objc-parse.y"
+#line 1253 "objc-parse.y"
 { finish_function (1);
                  pop_c_function_context (); ;
     break;}
 case 218:
-#line 1266 "objc-parse.y"
+#line 1259 "objc-parse.y"
 { push_c_function_context ();
                  if (! start_function (current_declspecs, yyvsp[0].ttype,
                                        prefix_attributes, NULL_TREE, 1))
@@ -3226,172 +3226,172 @@ case 218:
                  reinit_parse_for_function (); ;
     break;}
 case 219:
-#line 1275 "objc-parse.y"
+#line 1268 "objc-parse.y"
 { store_parm_decls (); ;
     break;}
 case 220:
-#line 1283 "objc-parse.y"
+#line 1276 "objc-parse.y"
 { finish_function (1);
                  pop_c_function_context (); ;
     break;}
 case 223:
-#line 1299 "objc-parse.y"
+#line 1292 "objc-parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 224:
-#line 1301 "objc-parse.y"
+#line 1294 "objc-parse.y"
 { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 225:
-#line 1306 "objc-parse.y"
+#line 1299 "objc-parse.y"
 { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 226:
-#line 1308 "objc-parse.y"
+#line 1301 "objc-parse.y"
 { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
     break;}
 case 227:
-#line 1310 "objc-parse.y"
+#line 1303 "objc-parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 228:
-#line 1317 "objc-parse.y"
+#line 1310 "objc-parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 231:
-#line 1329 "objc-parse.y"
+#line 1322 "objc-parse.y"
 { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 232:
-#line 1334 "objc-parse.y"
+#line 1327 "objc-parse.y"
 { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 233:
-#line 1336 "objc-parse.y"
+#line 1329 "objc-parse.y"
 { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
     break;}
 case 234:
-#line 1338 "objc-parse.y"
+#line 1331 "objc-parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 235:
-#line 1345 "objc-parse.y"
+#line 1338 "objc-parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 237:
-#line 1354 "objc-parse.y"
+#line 1347 "objc-parse.y"
 { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 238:
-#line 1359 "objc-parse.y"
+#line 1352 "objc-parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 239:
-#line 1361 "objc-parse.y"
+#line 1354 "objc-parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 240:
-#line 1363 "objc-parse.y"
+#line 1356 "objc-parse.y"
 { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 241:
-#line 1365 "objc-parse.y"
+#line 1358 "objc-parse.y"
 { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
     break;}
 case 242:
-#line 1372 "objc-parse.y"
+#line 1365 "objc-parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 244:
-#line 1378 "objc-parse.y"
+#line 1371 "objc-parse.y"
 { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
                  /* Start scope of tag before parsing components.  */
                ;
     break;}
 case 245:
-#line 1382 "objc-parse.y"
+#line 1375 "objc-parse.y"
 { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 246:
-#line 1384 "objc-parse.y"
+#line 1377 "objc-parse.y"
 { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
                                      yyvsp[-2].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 247:
-#line 1388 "objc-parse.y"
+#line 1381 "objc-parse.y"
 { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
     break;}
 case 248:
-#line 1390 "objc-parse.y"
+#line 1383 "objc-parse.y"
 { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
     break;}
 case 249:
-#line 1392 "objc-parse.y"
+#line 1385 "objc-parse.y"
 { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 250:
-#line 1394 "objc-parse.y"
+#line 1387 "objc-parse.y"
 { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
                                      yyvsp[-2].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 251:
-#line 1398 "objc-parse.y"
+#line 1391 "objc-parse.y"
 { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
     break;}
 case 252:
-#line 1400 "objc-parse.y"
+#line 1393 "objc-parse.y"
 { yyvsp[0].itype = suspend_momentary ();
                  yyval.ttype = start_enum (yyvsp[-1].ttype); ;
     break;}
 case 253:
-#line 1403 "objc-parse.y"
+#line 1396 "objc-parse.y"
 { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), yyvsp[0].ttype);
                  resume_momentary (yyvsp[-5].itype); ;
     break;}
 case 254:
-#line 1406 "objc-parse.y"
+#line 1399 "objc-parse.y"
 { yyvsp[0].itype = suspend_momentary ();
                  yyval.ttype = start_enum (NULL_TREE); ;
     break;}
 case 255:
-#line 1409 "objc-parse.y"
+#line 1402 "objc-parse.y"
 { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), yyvsp[0].ttype);
                  resume_momentary (yyvsp[-5].itype); ;
     break;}
 case 256:
-#line 1412 "objc-parse.y"
+#line 1405 "objc-parse.y"
 { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); ;
     break;}
 case 260:
-#line 1423 "objc-parse.y"
+#line 1416 "objc-parse.y"
 { if (pedantic) pedwarn ("comma at end of enumerator list"); ;
     break;}
 case 261:
-#line 1428 "objc-parse.y"
+#line 1421 "objc-parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 262:
-#line 1430 "objc-parse.y"
+#line 1423 "objc-parse.y"
 { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
                  pedwarn ("no semicolon at end of struct or union"); ;
     break;}
 case 263:
-#line 1435 "objc-parse.y"
+#line 1428 "objc-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 264:
-#line 1437 "objc-parse.y"
+#line 1430 "objc-parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
     break;}
 case 265:
-#line 1439 "objc-parse.y"
+#line 1432 "objc-parse.y"
 { if (pedantic)
                    pedwarn ("extra semicolon in struct or union specified"); ;
     break;}
 case 266:
-#line 1443 "objc-parse.y"
+#line 1436 "objc-parse.y"
 {
                  tree interface = lookup_interface (yyvsp[-1].ttype);
 
@@ -3406,7 +3406,7 @@ case 266:
                ;
     break;}
 case 267:
-#line 1468 "objc-parse.y"
+#line 1461 "objc-parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
@@ -3414,14 +3414,14 @@ case 267:
                  resume_momentary (yyvsp[-1].itype); ;
     break;}
 case 268:
-#line 1474 "objc-parse.y"
+#line 1467 "objc-parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C forbids member declarations with no members");
                  shadow_tag(yyvsp[0].ttype);
                  yyval.ttype = NULL_TREE; ;
     break;}
 case 269:
-#line 1479 "objc-parse.y"
+#line 1472 "objc-parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
@@ -3429,140 +3429,140 @@ case 269:
                  resume_momentary (yyvsp[-1].itype); ;
     break;}
 case 270:
-#line 1485 "objc-parse.y"
+#line 1478 "objc-parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C forbids member declarations with no members");
                  shadow_tag(yyvsp[0].ttype);
                  yyval.ttype = NULL_TREE; ;
     break;}
 case 271:
-#line 1490 "objc-parse.y"
+#line 1483 "objc-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 272:
-#line 1492 "objc-parse.y"
+#line 1485 "objc-parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  pedantic = yyvsp[-1].itype; ;
     break;}
 case 274:
-#line 1499 "objc-parse.y"
+#line 1492 "objc-parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 275:
-#line 1504 "objc-parse.y"
+#line 1497 "objc-parse.y"
 { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE);
                  decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
 case 276:
-#line 1508 "objc-parse.y"
+#line 1501 "objc-parse.y"
 { yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
                  decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
 case 277:
-#line 1511 "objc-parse.y"
+#line 1504 "objc-parse.y"
 { yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype);
                  decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
 case 279:
-#line 1523 "objc-parse.y"
+#line 1516 "objc-parse.y"
 { if (yyvsp[-2].ttype == error_mark_node)
                    yyval.ttype = yyvsp[-2].ttype;
                  else
                    yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ;
     break;}
 case 280:
-#line 1528 "objc-parse.y"
+#line 1521 "objc-parse.y"
 { yyval.ttype = error_mark_node; ;
     break;}
 case 281:
-#line 1534 "objc-parse.y"
+#line 1527 "objc-parse.y"
 { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 282:
-#line 1536 "objc-parse.y"
+#line 1529 "objc-parse.y"
 { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 283:
-#line 1541 "objc-parse.y"
+#line 1534 "objc-parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 284:
-#line 1543 "objc-parse.y"
+#line 1536 "objc-parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 285:
-#line 1548 "objc-parse.y"
+#line 1541 "objc-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 287:
-#line 1554 "objc-parse.y"
+#line 1547 "objc-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 288:
-#line 1556 "objc-parse.y"
+#line 1549 "objc-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 289:
-#line 1561 "objc-parse.y"
+#line 1554 "objc-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 290:
-#line 1563 "objc-parse.y"
+#line 1556 "objc-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 291:
-#line 1568 "objc-parse.y"
+#line 1561 "objc-parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 292:
-#line 1571 "objc-parse.y"
+#line 1564 "objc-parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 293:
-#line 1573 "objc-parse.y"
+#line 1566 "objc-parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 294:
-#line 1575 "objc-parse.y"
+#line 1568 "objc-parse.y"
 { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 295:
-#line 1577 "objc-parse.y"
+#line 1570 "objc-parse.y"
 { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 296:
-#line 1579 "objc-parse.y"
+#line 1572 "objc-parse.y"
 { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
     break;}
 case 297:
-#line 1581 "objc-parse.y"
+#line 1574 "objc-parse.y"
 { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 298:
-#line 1583 "objc-parse.y"
+#line 1576 "objc-parse.y"
 { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
 case 299:
-#line 1585 "objc-parse.y"
+#line 1578 "objc-parse.y"
 { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ;
     break;}
 case 300:
-#line 1596 "objc-parse.y"
+#line 1589 "objc-parse.y"
 {
                  if (pedantic && yyvsp[0].ends_in_label)
                    pedwarn ("ANSI C forbids label at end of compound statement");
                ;
     break;}
 case 302:
-#line 1605 "objc-parse.y"
+#line 1598 "objc-parse.y"
 { yyval.ends_in_label = yyvsp[0].ends_in_label; ;
     break;}
 case 303:
-#line 1607 "objc-parse.y"
+#line 1600 "objc-parse.y"
 { yyval.ends_in_label = 0; ;
     break;}
 case 307:
-#line 1619 "objc-parse.y"
+#line 1612 "objc-parse.y"
 { emit_line_note (input_filename, lineno);
                  pushlevel (0);
                  clear_last_expr ();
@@ -3573,12 +3573,12 @@ case 307:
                ;
     break;}
 case 309:
-#line 1634 "objc-parse.y"
+#line 1627 "objc-parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C forbids label declarations"); ;
     break;}
 case 312:
-#line 1645 "objc-parse.y"
+#line 1638 "objc-parse.y"
 { tree link;
                  for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
                    {
@@ -3589,19 +3589,19 @@ case 312:
                ;
     break;}
 case 313:
-#line 1659 "objc-parse.y"
+#line 1652 "objc-parse.y"
 {;
     break;}
 case 315:
-#line 1663 "objc-parse.y"
+#line 1656 "objc-parse.y"
 { compstmt_count++; ;
     break;}
 case 316:
-#line 1666 "objc-parse.y"
+#line 1659 "objc-parse.y"
 { yyval.ttype = convert (void_type_node, integer_zero_node); ;
     break;}
 case 317:
-#line 1668 "objc-parse.y"
+#line 1661 "objc-parse.y"
 { emit_line_note (input_filename, lineno);
                  expand_end_bindings (getdecls (), 1, 0);
                  yyval.ttype = poplevel (1, 1, 0);
@@ -3611,7 +3611,7 @@ case 317:
                    pop_momentary (); ;
     break;}
 case 318:
-#line 1676 "objc-parse.y"
+#line 1669 "objc-parse.y"
 { emit_line_note (input_filename, lineno);
                  expand_end_bindings (getdecls (), kept_level_p (), 0);
                  yyval.ttype = poplevel (kept_level_p (), 0, 0);
@@ -3621,7 +3621,7 @@ case 318:
                    pop_momentary (); ;
     break;}
 case 319:
-#line 1684 "objc-parse.y"
+#line 1677 "objc-parse.y"
 { emit_line_note (input_filename, lineno);
                  expand_end_bindings (getdecls (), kept_level_p (), 0);
                  yyval.ttype = poplevel (kept_level_p (), 0, 0);
@@ -3631,7 +3631,7 @@ case 319:
                    pop_momentary (); ;
     break;}
 case 322:
-#line 1704 "objc-parse.y"
+#line 1697 "objc-parse.y"
 { emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
                  c_expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), 0, 
                                       compstmt_count);
@@ -3641,7 +3641,7 @@ case 322:
                  position_after_white_space (); ;
     break;}
 case 323:
-#line 1718 "objc-parse.y"
+#line 1711 "objc-parse.y"
 { stmt_count++;
                  compstmt_count++;
                  emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
@@ -3651,43 +3651,43 @@ case 323:
                  position_after_white_space (); ;
     break;}
 case 324:
-#line 1726 "objc-parse.y"
+#line 1719 "objc-parse.y"
 { expand_loop_continue_here (); ;
     break;}
 case 325:
-#line 1730 "objc-parse.y"
+#line 1723 "objc-parse.y"
 { yyval.filename = input_filename; ;
     break;}
 case 326:
-#line 1734 "objc-parse.y"
+#line 1727 "objc-parse.y"
 { yyval.lineno = lineno; ;
     break;}
 case 327:
-#line 1739 "objc-parse.y"
+#line 1732 "objc-parse.y"
 { ;
     break;}
 case 328:
-#line 1744 "objc-parse.y"
+#line 1737 "objc-parse.y"
 { ;
     break;}
 case 329:
-#line 1749 "objc-parse.y"
+#line 1742 "objc-parse.y"
 { yyval.ends_in_label = yyvsp[0].ends_in_label; ;
     break;}
 case 330:
-#line 1754 "objc-parse.y"
+#line 1747 "objc-parse.y"
 { yyval.ends_in_label = 0; ;
     break;}
 case 331:
-#line 1756 "objc-parse.y"
+#line 1749 "objc-parse.y"
 { yyval.ends_in_label = 1; ;
     break;}
 case 332:
-#line 1762 "objc-parse.y"
+#line 1755 "objc-parse.y"
 { stmt_count++; ;
     break;}
 case 334:
-#line 1765 "objc-parse.y"
+#line 1758 "objc-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
 /* It appears that this should not be done--that a non-lvalue array
@@ -3706,19 +3706,19 @@ case 334:
                  clear_momentary (); ;
     break;}
 case 335:
-#line 1782 "objc-parse.y"
+#line 1775 "objc-parse.y"
 { c_expand_start_else ();
                  yyvsp[-1].itype = stmt_count;
                  position_after_white_space (); ;
     break;}
 case 336:
-#line 1786 "objc-parse.y"
+#line 1779 "objc-parse.y"
 { c_expand_end_cond ();
                  if (extra_warnings && stmt_count == yyvsp[-3].itype)
                    warning ("empty body in an else-statement"); ;
     break;}
 case 337:
-#line 1790 "objc-parse.y"
+#line 1783 "objc-parse.y"
 { c_expand_end_cond ();
                  /* This warning is here instead of in simple_if, because we
                     do not want a warning if an empty if is followed by an
@@ -3729,11 +3729,11 @@ case 337:
                                                "empty body in an if-statement"); ;
     break;}
 case 338:
-#line 1802 "objc-parse.y"
+#line 1795 "objc-parse.y"
 { c_expand_end_cond (); ;
     break;}
 case 339:
-#line 1804 "objc-parse.y"
+#line 1797 "objc-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
                  /* The emit_nop used to come before emit_line_note,
@@ -3745,7 +3745,7 @@ case 339:
                  emit_nop (); ;
     break;}
 case 340:
-#line 1814 "objc-parse.y"
+#line 1807 "objc-parse.y"
 { /* Don't start the loop till we have succeeded
                     in parsing the end test.  This is to make sure
                     that we end every loop we start.  */
@@ -3756,11 +3756,11 @@ case 340:
                  position_after_white_space (); ;
     break;}
 case 341:
-#line 1823 "objc-parse.y"
+#line 1816 "objc-parse.y"
 { expand_end_loop (); ;
     break;}
 case 342:
-#line 1826 "objc-parse.y"
+#line 1819 "objc-parse.y"
 { emit_line_note (input_filename, lineno);
                  expand_exit_loop_if_false (NULL_PTR,
                                             truthvalue_conversion (yyvsp[-2].ttype));
@@ -3768,12 +3768,12 @@ case 342:
                  clear_momentary (); ;
     break;}
 case 343:
-#line 1833 "objc-parse.y"
+#line 1826 "objc-parse.y"
 { expand_end_loop ();
                  clear_momentary (); ;
     break;}
 case 344:
-#line 1837 "objc-parse.y"
+#line 1830 "objc-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
                  /* See comment in `while' alternative, above.  */
@@ -3786,12 +3786,12 @@ case 344:
                ;
     break;}
 case 345:
-#line 1849 "objc-parse.y"
+#line 1842 "objc-parse.y"
 { yyvsp[0].lineno = lineno;
                  yyval.filename = input_filename; ;
     break;}
 case 346:
-#line 1852 "objc-parse.y"
+#line 1845 "objc-parse.y"
 { 
                  /* Start the loop.  Doing this after parsing
                     all the expressions ensures we will end the loop.  */
@@ -3809,7 +3809,7 @@ case 346:
                  position_after_white_space (); ;
     break;}
 case 347:
-#line 1868 "objc-parse.y"
+#line 1861 "objc-parse.y"
 { /* Emit the increment expression, with a line number.  */
                  emit_line_note (yyvsp[-4].filename, yyvsp[-5].lineno);
                  expand_loop_continue_here ();
@@ -3822,7 +3822,7 @@ case 347:
                  expand_end_loop (); ;
     break;}
 case 348:
-#line 1879 "objc-parse.y"
+#line 1872 "objc-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
                  c_expand_start_case (yyvsp[-1].ttype);
@@ -3832,7 +3832,7 @@ case 348:
                  position_after_white_space (); ;
     break;}
 case 349:
-#line 1887 "objc-parse.y"
+#line 1880 "objc-parse.y"
 { expand_end_case (yyvsp[-3].ttype);
                  if (yychar == CONSTANT || yychar == STRING)
                    pop_momentary_nofree ();
@@ -3840,33 +3840,33 @@ case 349:
                    pop_momentary (); ;
     break;}
 case 350:
-#line 1893 "objc-parse.y"
+#line 1886 "objc-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
                  if ( ! expand_exit_something ())
                    error ("break statement not within loop or switch"); ;
     break;}
 case 351:
-#line 1898 "objc-parse.y"
+#line 1891 "objc-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
                  if (! expand_continue_loop (NULL_PTR))
                    error ("continue statement not within a loop"); ;
     break;}
 case 352:
-#line 1903 "objc-parse.y"
+#line 1896 "objc-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
                  c_expand_return (NULL_TREE); ;
     break;}
 case 353:
-#line 1907 "objc-parse.y"
+#line 1900 "objc-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
                  c_expand_return (yyvsp[-1].ttype); ;
     break;}
 case 354:
-#line 1911 "objc-parse.y"
+#line 1904 "objc-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-7].filename, yyvsp[-6].lineno);
                  STRIP_NOPS (yyvsp[-2].ttype);
@@ -3878,7 +3878,7 @@ case 354:
                    error ("argument of `asm' is not a constant string"); ;
     break;}
 case 355:
-#line 1922 "objc-parse.y"
+#line 1915 "objc-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-9].filename, yyvsp[-8].lineno);
                  c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
@@ -3886,7 +3886,7 @@ case 355:
                                         input_filename, lineno); ;
     break;}
 case 356:
-#line 1929 "objc-parse.y"
+#line 1922 "objc-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-11].filename, yyvsp[-10].lineno);
                  c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
@@ -3894,7 +3894,7 @@ case 356:
                                         input_filename, lineno); ;
     break;}
 case 357:
-#line 1937 "objc-parse.y"
+#line 1930 "objc-parse.y"
 { stmt_count++;
                  emit_line_note (yyvsp[-13].filename, yyvsp[-12].lineno);
                  c_expand_asm_operands (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype,
@@ -3902,7 +3902,7 @@ case 357:
                                         input_filename, lineno); ;
     break;}
 case 358:
-#line 1943 "objc-parse.y"
+#line 1936 "objc-parse.y"
 { tree decl;
                  stmt_count++;
                  emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
@@ -3915,7 +3915,7 @@ case 358:
                ;
     break;}
 case 359:
-#line 1954 "objc-parse.y"
+#line 1947 "objc-parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C forbids `goto *expr;'");
                  stmt_count++;
@@ -3923,7 +3923,7 @@ case 359:
                  expand_computed_goto (convert (ptr_type_node, yyvsp[-1].ttype)); ;
     break;}
 case 362:
-#line 1969 "objc-parse.y"
+#line 1962 "objc-parse.y"
 {
            /* The value returned by this action is  */
            /*      1 if everything is OK */ 
@@ -3946,14 +3946,14 @@ case 362:
          ;
     break;}
 case 363:
-#line 1990 "objc-parse.y"
+#line 1983 "objc-parse.y"
 {
            if (yyvsp[-1].itype)
              iterator_for_loop_end (yyvsp[-3].ttype);
          ;
     break;}
 case 364:
-#line 2025 "objc-parse.y"
+#line 2018 "objc-parse.y"
 { register tree value = check_case_value (yyvsp[-1].ttype);
                  register tree label
                    = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
@@ -3963,8 +3963,14 @@ case 364:
                  if (value != error_mark_node)
                    {
                      tree duplicate;
-                     int success = pushcase (value, convert_and_check,
-                                             label, &duplicate);
+                     int success;
+
+                     if (pedantic && ! INTEGRAL_TYPE_P (TREE_TYPE (value)))
+                       pedwarn ("label must have integral type in ANSI C");
+
+                     success = pushcase (value, convert_and_check,
+                                         label, &duplicate);
+
                      if (success == 1)
                        error ("case label not within a switch statement");
                      else if (success == 2)
@@ -3980,7 +3986,7 @@ case 364:
                  position_after_white_space (); ;
     break;}
 case 365:
-#line 2050 "objc-parse.y"
+#line 2049 "objc-parse.y"
 { register tree value1 = check_case_value (yyvsp[-3].ttype);
                  register tree value2 = check_case_value (yyvsp[-1].ttype);
                  register tree label
@@ -4013,7 +4019,7 @@ case 365:
                  position_after_white_space (); ;
     break;}
 case 366:
-#line 2081 "objc-parse.y"
+#line 2080 "objc-parse.y"
 {
                  tree duplicate;
                  register tree label
@@ -4030,7 +4036,7 @@ case 366:
                  position_after_white_space (); ;
     break;}
 case 367:
-#line 2096 "objc-parse.y"
+#line 2095 "objc-parse.y"
 { tree label = define_label (input_filename, lineno, yyvsp[-1].ttype);
                  stmt_count++;
                  emit_nop ();
@@ -4039,52 +4045,52 @@ case 367:
                  position_after_white_space (); ;
     break;}
 case 368:
-#line 2108 "objc-parse.y"
+#line 2107 "objc-parse.y"
 { emit_line_note (input_filename, lineno);
                  yyval.ttype = NULL_TREE; ;
     break;}
 case 369:
-#line 2111 "objc-parse.y"
+#line 2110 "objc-parse.y"
 { emit_line_note (input_filename, lineno); ;
     break;}
 case 370:
-#line 2116 "objc-parse.y"
+#line 2115 "objc-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 372:
-#line 2123 "objc-parse.y"
+#line 2122 "objc-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 375:
-#line 2130 "objc-parse.y"
+#line 2129 "objc-parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 376:
-#line 2135 "objc-parse.y"
+#line 2134 "objc-parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 377:
-#line 2140 "objc-parse.y"
+#line 2139 "objc-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ;
     break;}
 case 378:
-#line 2142 "objc-parse.y"
+#line 2141 "objc-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ;
     break;}
 case 379:
-#line 2148 "objc-parse.y"
+#line 2147 "objc-parse.y"
 { pushlevel (0);
                  clear_parm_order ();
                  declare_parm_level (0); ;
     break;}
 case 380:
-#line 2152 "objc-parse.y"
+#line 2151 "objc-parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  parmlist_tags_warning ();
                  poplevel (0, 0, 0); ;
     break;}
 case 382:
-#line 2160 "objc-parse.y"
+#line 2159 "objc-parse.y"
 { tree parm;
                  if (pedantic)
                    pedwarn ("ANSI C forbids forward parameter declarations");
@@ -4094,19 +4100,19 @@ case 382:
                  clear_parm_order (); ;
     break;}
 case 383:
-#line 2168 "objc-parse.y"
+#line 2167 "objc-parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 384:
-#line 2170 "objc-parse.y"
+#line 2169 "objc-parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
     break;}
 case 385:
-#line 2176 "objc-parse.y"
+#line 2175 "objc-parse.y"
 { yyval.ttype = get_parm_info (0); ;
     break;}
 case 386:
-#line 2178 "objc-parse.y"
+#line 2177 "objc-parse.y"
 { yyval.ttype = get_parm_info (0);
                  /* Gcc used to allow this as an extension.  However, it does
                     not work for all targets, and thus has been disabled.
@@ -4118,23 +4124,23 @@ case 386:
                ;
     break;}
 case 387:
-#line 2188 "objc-parse.y"
+#line 2187 "objc-parse.y"
 { yyval.ttype = get_parm_info (1); ;
     break;}
 case 388:
-#line 2190 "objc-parse.y"
+#line 2189 "objc-parse.y"
 { yyval.ttype = get_parm_info (0); ;
     break;}
 case 389:
-#line 2195 "objc-parse.y"
+#line 2194 "objc-parse.y"
 { push_parm_decl (yyvsp[0].ttype); ;
     break;}
 case 390:
-#line 2197 "objc-parse.y"
+#line 2196 "objc-parse.y"
 { push_parm_decl (yyvsp[0].ttype); ;
     break;}
 case 391:
-#line 2204 "objc-parse.y"
+#line 2203 "objc-parse.y"
 { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
                                                         yyvsp[-1].ttype),
                                        build_tree_list (prefix_attributes,
@@ -4145,7 +4151,7 @@ case 391:
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 392:
-#line 2213 "objc-parse.y"
+#line 2212 "objc-parse.y"
 { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
                                                         yyvsp[-1].ttype),
                                        build_tree_list (prefix_attributes,
@@ -4156,7 +4162,7 @@ case 392:
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 393:
-#line 2222 "objc-parse.y"
+#line 2221 "objc-parse.y"
 { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
                                                         yyvsp[-1].ttype),
                                        build_tree_list (prefix_attributes,
@@ -4167,7 +4173,7 @@ case 393:
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 394:
-#line 2231 "objc-parse.y"
+#line 2230 "objc-parse.y"
 { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
                                                         yyvsp[-1].ttype),
                                        build_tree_list (prefix_attributes,
@@ -4178,7 +4184,7 @@ case 394:
                  resume_momentary (yyvsp[-2].itype);  ;
     break;}
 case 395:
-#line 2241 "objc-parse.y"
+#line 2240 "objc-parse.y"
 { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
                                                         yyvsp[-1].ttype),
                                        build_tree_list (prefix_attributes,
@@ -4189,19 +4195,19 @@ case 395:
                  resume_momentary (yyvsp[-2].itype);  ;
     break;}
 case 396:
-#line 2255 "objc-parse.y"
+#line 2254 "objc-parse.y"
 { pushlevel (0);
                  clear_parm_order ();
                  declare_parm_level (1); ;
     break;}
 case 397:
-#line 2259 "objc-parse.y"
+#line 2258 "objc-parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  parmlist_tags_warning ();
                  poplevel (0, 0, 0); ;
     break;}
 case 399:
-#line 2267 "objc-parse.y"
+#line 2266 "objc-parse.y"
 { tree t;
                  for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t))
                    if (TREE_VALUE (t) == NULL_TREE)
@@ -4209,28 +4215,28 @@ case 399:
                  yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
 case 400:
-#line 2277 "objc-parse.y"
+#line 2276 "objc-parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 401:
-#line 2279 "objc-parse.y"
+#line 2278 "objc-parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
 case 402:
-#line 2285 "objc-parse.y"
+#line 2284 "objc-parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 403:
-#line 2287 "objc-parse.y"
+#line 2286 "objc-parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
 case 404:
-#line 2292 "objc-parse.y"
+#line 2291 "objc-parse.y"
 { yyval.itype = pedantic;
                  pedantic = 0; ;
     break;}
 case 410:
-#line 2305 "objc-parse.y"
+#line 2304 "objc-parse.y"
 {
                  if (objc_implementation_context)
                     {
@@ -4243,27 +4249,27 @@ case 410:
                ;
     break;}
 case 411:
-#line 2320 "objc-parse.y"
+#line 2319 "objc-parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 412:
-#line 2322 "objc-parse.y"
+#line 2321 "objc-parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
 case 413:
-#line 2327 "objc-parse.y"
+#line 2326 "objc-parse.y"
 {
                  objc_declare_class (yyvsp[-1].ttype);
                ;
     break;}
 case 414:
-#line 2333 "objc-parse.y"
+#line 2332 "objc-parse.y"
 {
                  objc_declare_alias (yyvsp[-2].ttype, yyvsp[-1].ttype);
                ;
     break;}
 case 415:
-#line 2339 "objc-parse.y"
+#line 2338 "objc-parse.y"
 {
                  objc_interface_context = objc_ivar_context
                    = start_class (CLASS_INTERFACE_TYPE, yyvsp[-2].ttype, NULL_TREE, yyvsp[-1].ttype);
@@ -4271,20 +4277,20 @@ case 415:
                ;
     break;}
 case 416:
-#line 2345 "objc-parse.y"
+#line 2344 "objc-parse.y"
 {
                   continue_class (objc_interface_context);
                ;
     break;}
 case 417:
-#line 2350 "objc-parse.y"
+#line 2349 "objc-parse.y"
 {
                  finish_class (objc_interface_context);
                  objc_interface_context = NULL_TREE;
                ;
     break;}
 case 418:
-#line 2356 "objc-parse.y"
+#line 2355 "objc-parse.y"
 {
                  objc_interface_context
                    = start_class (CLASS_INTERFACE_TYPE, yyvsp[-1].ttype, NULL_TREE, yyvsp[0].ttype);
@@ -4292,14 +4298,14 @@ case 418:
                ;
     break;}
 case 419:
-#line 2363 "objc-parse.y"
+#line 2362 "objc-parse.y"
 {
                  finish_class (objc_interface_context);
                  objc_interface_context = NULL_TREE;
                ;
     break;}
 case 420:
-#line 2369 "objc-parse.y"
+#line 2368 "objc-parse.y"
 {
                  objc_interface_context = objc_ivar_context
                    = start_class (CLASS_INTERFACE_TYPE, yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[-1].ttype);
@@ -4307,20 +4313,20 @@ case 420:
                ;
     break;}
 case 421:
-#line 2375 "objc-parse.y"
+#line 2374 "objc-parse.y"
 {
                   continue_class (objc_interface_context);
                ;
     break;}
 case 422:
-#line 2380 "objc-parse.y"
+#line 2379 "objc-parse.y"
 {
                  finish_class (objc_interface_context);
                  objc_interface_context = NULL_TREE;
                ;
     break;}
 case 423:
-#line 2386 "objc-parse.y"
+#line 2385 "objc-parse.y"
 {
                  objc_interface_context
                    = start_class (CLASS_INTERFACE_TYPE, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
@@ -4328,14 +4334,14 @@ case 423:
                ;
     break;}
 case 424:
-#line 2393 "objc-parse.y"
+#line 2392 "objc-parse.y"
 {
                  finish_class (objc_interface_context);
                  objc_interface_context = NULL_TREE;
                ;
     break;}
 case 425:
-#line 2399 "objc-parse.y"
+#line 2398 "objc-parse.y"
 {
                  objc_implementation_context = objc_ivar_context
                    = start_class (CLASS_IMPLEMENTATION_TYPE, yyvsp[-1].ttype, NULL_TREE, NULL_TREE);
@@ -4343,14 +4349,14 @@ case 425:
                ;
     break;}
 case 426:
-#line 2405 "objc-parse.y"
+#line 2404 "objc-parse.y"
 {
                   objc_ivar_chain
                    = continue_class (objc_implementation_context);
                ;
     break;}
 case 427:
-#line 2411 "objc-parse.y"
+#line 2410 "objc-parse.y"
 {
                  objc_implementation_context
                    = start_class (CLASS_IMPLEMENTATION_TYPE, yyvsp[0].ttype, NULL_TREE, NULL_TREE);
@@ -4359,7 +4365,7 @@ case 427:
                ;
     break;}
 case 428:
-#line 2419 "objc-parse.y"
+#line 2418 "objc-parse.y"
 {
                  objc_implementation_context = objc_ivar_context
                    = start_class (CLASS_IMPLEMENTATION_TYPE, yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE);
@@ -4367,14 +4373,14 @@ case 428:
                ;
     break;}
 case 429:
-#line 2425 "objc-parse.y"
+#line 2424 "objc-parse.y"
 {
                   objc_ivar_chain
                    = continue_class (objc_implementation_context);
                ;
     break;}
 case 430:
-#line 2431 "objc-parse.y"
+#line 2430 "objc-parse.y"
 {
                  objc_implementation_context
                    = start_class (CLASS_IMPLEMENTATION_TYPE, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE);
@@ -4383,7 +4389,7 @@ case 430:
                ;
     break;}
 case 431:
-#line 2439 "objc-parse.y"
+#line 2438 "objc-parse.y"
 {
                  objc_interface_context
                    = start_class (CATEGORY_INTERFACE_TYPE, yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype);
@@ -4391,14 +4397,14 @@ case 431:
                ;
     break;}
 case 432:
-#line 2446 "objc-parse.y"
+#line 2445 "objc-parse.y"
 {
                  finish_class (objc_interface_context);
                  objc_interface_context = NULL_TREE;
                ;
     break;}
 case 433:
-#line 2452 "objc-parse.y"
+#line 2451 "objc-parse.y"
 {
                  objc_implementation_context
                    = start_class (CATEGORY_IMPLEMENTATION_TYPE, yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE);
@@ -4407,7 +4413,7 @@ case 433:
                ;
     break;}
 case 434:
-#line 2462 "objc-parse.y"
+#line 2461 "objc-parse.y"
 {
                  remember_protocol_qualifiers ();
                  objc_interface_context
@@ -4415,7 +4421,7 @@ case 434:
                ;
     break;}
 case 435:
-#line 2468 "objc-parse.y"
+#line 2467 "objc-parse.y"
 {
                  forget_protocol_qualifiers();
                  finish_protocol(objc_interface_context);
@@ -4423,13 +4429,13 @@ case 435:
                ;
     break;}
 case 436:
-#line 2477 "objc-parse.y"
+#line 2476 "objc-parse.y"
 {
                  yyval.ttype = NULL_TREE;
                ;
     break;}
 case 438:
-#line 2485 "objc-parse.y"
+#line 2484 "objc-parse.y"
 {
                  if (yyvsp[-2].code == LT_EXPR && yyvsp[0].code == GT_EXPR)
                    yyval.ttype = yyvsp[-1].ttype;
@@ -4438,32 +4444,32 @@ case 438:
                ;
     break;}
 case 441:
-#line 2499 "objc-parse.y"
+#line 2498 "objc-parse.y"
 { objc_public_flag = 2; ;
     break;}
 case 442:
-#line 2500 "objc-parse.y"
+#line 2499 "objc-parse.y"
 { objc_public_flag = 0; ;
     break;}
 case 443:
-#line 2501 "objc-parse.y"
+#line 2500 "objc-parse.y"
 { objc_public_flag = 1; ;
     break;}
 case 444:
-#line 2506 "objc-parse.y"
+#line 2505 "objc-parse.y"
 {
                   yyval.ttype = NULL_TREE;
                 ;
     break;}
 case 446:
-#line 2511 "objc-parse.y"
+#line 2510 "objc-parse.y"
 {
                   if (pedantic)
                    pedwarn ("extra semicolon in struct or union specified");
                 ;
     break;}
 case 447:
-#line 2529 "objc-parse.y"
+#line 2528 "objc-parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
@@ -4471,7 +4477,7 @@ case 447:
                  resume_momentary (yyvsp[-1].itype); ;
     break;}
 case 448:
-#line 2535 "objc-parse.y"
+#line 2534 "objc-parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
@@ -4479,15 +4485,15 @@ case 448:
                  resume_momentary (yyvsp[-1].itype); ;
     break;}
 case 449:
-#line 2541 "objc-parse.y"
+#line 2540 "objc-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 450:
-#line 2546 "objc-parse.y"
+#line 2545 "objc-parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 453:
-#line 2553 "objc-parse.y"
+#line 2552 "objc-parse.y"
 {
                  yyval.ttype = add_instance_variable (objc_ivar_context,
                                              objc_public_flag,
@@ -4496,7 +4502,7 @@ case 453:
                 ;
     break;}
 case 454:
-#line 2560 "objc-parse.y"
+#line 2559 "objc-parse.y"
 {
                  yyval.ttype = add_instance_variable (objc_ivar_context,
                                              objc_public_flag,
@@ -4504,7 +4510,7 @@ case 454:
                 ;
     break;}
 case 455:
-#line 2566 "objc-parse.y"
+#line 2565 "objc-parse.y"
 {
                  yyval.ttype = add_instance_variable (objc_ivar_context,
                                              objc_public_flag,
@@ -4513,7 +4519,7 @@ case 455:
                 ;
     break;}
 case 456:
-#line 2576 "objc-parse.y"
+#line 2575 "objc-parse.y"
 {
                  remember_protocol_qualifiers ();
                  if (objc_implementation_context)
@@ -4523,7 +4529,7 @@ case 456:
                ;
     break;}
 case 457:
-#line 2584 "objc-parse.y"
+#line 2583 "objc-parse.y"
 {
                  forget_protocol_qualifiers ();
                  add_class_method (objc_implementation_context, yyvsp[0].ttype);
@@ -4532,20 +4538,20 @@ case 457:
                ;
     break;}
 case 458:
-#line 2591 "objc-parse.y"
+#line 2590 "objc-parse.y"
 {
                  continue_method_def ();
                ;
     break;}
 case 459:
-#line 2595 "objc-parse.y"
+#line 2594 "objc-parse.y"
 {
                  finish_method_def ();
                  objc_method_context = NULL_TREE;
                ;
     break;}
 case 460:
-#line 2601 "objc-parse.y"
+#line 2600 "objc-parse.y"
 {
                  remember_protocol_qualifiers ();
                  if (objc_implementation_context)
@@ -4555,7 +4561,7 @@ case 460:
                ;
     break;}
 case 461:
-#line 2609 "objc-parse.y"
+#line 2608 "objc-parse.y"
 {
                  forget_protocol_qualifiers ();
                  add_instance_method (objc_implementation_context, yyvsp[0].ttype);
@@ -4564,28 +4570,28 @@ case 461:
                ;
     break;}
 case 462:
-#line 2616 "objc-parse.y"
+#line 2615 "objc-parse.y"
 {
                  continue_method_def ();
                ;
     break;}
 case 463:
-#line 2620 "objc-parse.y"
+#line 2619 "objc-parse.y"
 {
                  finish_method_def ();
                  objc_method_context = NULL_TREE;
                ;
     break;}
 case 465:
-#line 2632 "objc-parse.y"
+#line 2631 "objc-parse.y"
 {yyval.ttype = NULL_TREE; ;
     break;}
 case 470:
-#line 2639 "objc-parse.y"
+#line 2638 "objc-parse.y"
 {yyval.ttype = NULL_TREE; ;
     break;}
 case 474:
-#line 2649 "objc-parse.y"
+#line 2648 "objc-parse.y"
 {
                  /* Remember protocol qualifiers in prototypes.  */
                  remember_protocol_qualifiers ();
@@ -4593,7 +4599,7 @@ case 474:
                ;
     break;}
 case 475:
-#line 2655 "objc-parse.y"
+#line 2654 "objc-parse.y"
 {
                  /* Forget protocol qualifiers here.  */
                  forget_protocol_qualifiers ();
@@ -4601,7 +4607,7 @@ case 475:
                ;
     break;}
 case 477:
-#line 2663 "objc-parse.y"
+#line 2662 "objc-parse.y"
 {
                  /* Remember protocol qualifiers in prototypes.  */
                  remember_protocol_qualifiers ();
@@ -4609,7 +4615,7 @@ case 477:
                ;
     break;}
 case 478:
-#line 2669 "objc-parse.y"
+#line 2668 "objc-parse.y"
 {
                  /* Forget protocol qualifiers here.  */
                  forget_protocol_qualifiers ();
@@ -4617,94 +4623,94 @@ case 478:
                ;
     break;}
 case 480:
-#line 2679 "objc-parse.y"
+#line 2678 "objc-parse.y"
 {
                  yyval.ttype = build_method_decl (objc_inherit_code, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE);
                ;
     break;}
 case 481:
-#line 2684 "objc-parse.y"
+#line 2683 "objc-parse.y"
 {
                  yyval.ttype = build_method_decl (objc_inherit_code, NULL_TREE, yyvsp[0].ttype, NULL_TREE);
                ;
     break;}
 case 482:
-#line 2689 "objc-parse.y"
+#line 2688 "objc-parse.y"
 {
                  yyval.ttype = build_method_decl (objc_inherit_code, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 483:
-#line 2694 "objc-parse.y"
+#line 2693 "objc-parse.y"
 {
                  yyval.ttype = build_method_decl (objc_inherit_code, NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 492:
-#line 2724 "objc-parse.y"
+#line 2723 "objc-parse.y"
 { current_declspecs = TREE_VALUE (declspec_stack);
                  prefix_attributes = TREE_PURPOSE (declspec_stack);
                  declspec_stack = TREE_CHAIN (declspec_stack);
                  resume_momentary (yyvsp[-2].itype); ;
     break;}
 case 493:
-#line 2729 "objc-parse.y"
+#line 2728 "objc-parse.y"
 { shadow_tag (yyvsp[-1].ttype); ;
     break;}
 case 494:
-#line 2731 "objc-parse.y"
+#line 2730 "objc-parse.y"
 { pedwarn ("empty declaration"); ;
     break;}
 case 495:
-#line 2736 "objc-parse.y"
+#line 2735 "objc-parse.y"
 { push_parm_decl (yyvsp[0].ttype); ;
     break;}
 case 496:
-#line 2738 "objc-parse.y"
+#line 2737 "objc-parse.y"
 { push_parm_decl (yyvsp[0].ttype); ;
     break;}
 case 497:
-#line 2746 "objc-parse.y"
+#line 2745 "objc-parse.y"
 { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
                                                         yyvsp[-1].ttype),
                                        build_tree_list (prefix_attributes,
                                                         yyvsp[0].ttype)); ;
     break;}
 case 498:
-#line 2751 "objc-parse.y"
+#line 2750 "objc-parse.y"
 { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
                                                         yyvsp[-1].ttype),
                                        build_tree_list (prefix_attributes,
                                                         yyvsp[0].ttype)); ;
     break;}
 case 499:
-#line 2756 "objc-parse.y"
+#line 2755 "objc-parse.y"
 { yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
                                                         yyvsp[-1].ttype),
                                        build_tree_list (prefix_attributes,
                                                         yyvsp[0].ttype)); ;
     break;}
 case 500:
-#line 2764 "objc-parse.y"
+#line 2763 "objc-parse.y"
 {
                  yyval.ttype = NULL_TREE;
                ;
     break;}
 case 501:
-#line 2768 "objc-parse.y"
+#line 2767 "objc-parse.y"
 {
                  /* oh what a kludge! */
                  yyval.ttype = (tree)1;
                ;
     break;}
 case 502:
-#line 2773 "objc-parse.y"
+#line 2772 "objc-parse.y"
 {
                  pushlevel (0);
                ;
     break;}
 case 503:
-#line 2777 "objc-parse.y"
+#line 2776 "objc-parse.y"
 {
                  /* returns a tree list node generated by get_parm_info */
                  yyval.ttype = yyvsp[0].ttype;
@@ -4712,119 +4718,119 @@ case 503:
                ;
     break;}
 case 506:
-#line 2792 "objc-parse.y"
+#line 2791 "objc-parse.y"
 {
                  yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 511:
-#line 2805 "objc-parse.y"
+#line 2804 "objc-parse.y"
 { yyval.ttype = get_identifier (token_buffer); ;
     break;}
 case 512:
-#line 2806 "objc-parse.y"
+#line 2805 "objc-parse.y"
 { yyval.ttype = get_identifier (token_buffer); ;
     break;}
 case 513:
-#line 2807 "objc-parse.y"
+#line 2806 "objc-parse.y"
 { yyval.ttype = get_identifier (token_buffer); ;
     break;}
 case 514:
-#line 2808 "objc-parse.y"
+#line 2807 "objc-parse.y"
 { yyval.ttype = get_identifier (token_buffer); ;
     break;}
 case 515:
-#line 2809 "objc-parse.y"
+#line 2808 "objc-parse.y"
 { yyval.ttype = get_identifier (token_buffer); ;
     break;}
 case 516:
-#line 2810 "objc-parse.y"
+#line 2809 "objc-parse.y"
 { yyval.ttype = get_identifier (token_buffer); ;
     break;}
 case 517:
-#line 2811 "objc-parse.y"
+#line 2810 "objc-parse.y"
 { yyval.ttype = get_identifier (token_buffer); ;
     break;}
 case 518:
-#line 2812 "objc-parse.y"
+#line 2811 "objc-parse.y"
 { yyval.ttype = get_identifier (token_buffer); ;
     break;}
 case 519:
-#line 2813 "objc-parse.y"
+#line 2812 "objc-parse.y"
 { yyval.ttype = get_identifier (token_buffer); ;
     break;}
 case 520:
-#line 2814 "objc-parse.y"
+#line 2813 "objc-parse.y"
 { yyval.ttype = get_identifier (token_buffer); ;
     break;}
 case 521:
-#line 2815 "objc-parse.y"
+#line 2814 "objc-parse.y"
 { yyval.ttype = get_identifier (token_buffer); ;
     break;}
 case 522:
-#line 2816 "objc-parse.y"
+#line 2815 "objc-parse.y"
 { yyval.ttype = get_identifier (token_buffer); ;
     break;}
 case 523:
-#line 2817 "objc-parse.y"
+#line 2816 "objc-parse.y"
 { yyval.ttype = get_identifier (token_buffer); ;
     break;}
 case 524:
-#line 2818 "objc-parse.y"
+#line 2817 "objc-parse.y"
 { yyval.ttype = get_identifier (token_buffer); ;
     break;}
 case 525:
-#line 2819 "objc-parse.y"
+#line 2818 "objc-parse.y"
 { yyval.ttype = get_identifier (token_buffer); ;
     break;}
 case 526:
-#line 2820 "objc-parse.y"
+#line 2819 "objc-parse.y"
 { yyval.ttype = get_identifier (token_buffer); ;
     break;}
 case 527:
-#line 2821 "objc-parse.y"
+#line 2820 "objc-parse.y"
 { yyval.ttype = get_identifier (token_buffer); ;
     break;}
 case 528:
-#line 2822 "objc-parse.y"
+#line 2821 "objc-parse.y"
 { yyval.ttype = get_identifier (token_buffer); ;
     break;}
 case 529:
-#line 2823 "objc-parse.y"
+#line 2822 "objc-parse.y"
 { yyval.ttype = get_identifier (token_buffer); ;
     break;}
 case 532:
-#line 2829 "objc-parse.y"
+#line 2828 "objc-parse.y"
 {
                  yyval.ttype = build_keyword_decl (yyvsp[-5].ttype, yyvsp[-2].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 533:
-#line 2834 "objc-parse.y"
+#line 2833 "objc-parse.y"
 {
                  yyval.ttype = build_keyword_decl (yyvsp[-2].ttype, NULL_TREE, yyvsp[0].ttype);
                ;
     break;}
 case 534:
-#line 2839 "objc-parse.y"
+#line 2838 "objc-parse.y"
 {
                  yyval.ttype = build_keyword_decl (NULL_TREE, yyvsp[-2].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 535:
-#line 2844 "objc-parse.y"
+#line 2843 "objc-parse.y"
 {
                  yyval.ttype = build_keyword_decl (NULL_TREE, NULL_TREE, yyvsp[0].ttype);
                ;
     break;}
 case 539:
-#line 2857 "objc-parse.y"
+#line 2856 "objc-parse.y"
 {
                  yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 540:
-#line 2865 "objc-parse.y"
+#line 2864 "objc-parse.y"
 {
                  if (TREE_CHAIN (yyvsp[0].ttype) == NULL_TREE)
                    /* just return the expr., remove a level of indirection */
@@ -4835,76 +4841,76 @@ case 540:
                ;
     break;}
 case 541:
-#line 2877 "objc-parse.y"
+#line 2876 "objc-parse.y"
 {
                  yyval.ttype = build_tree_list (yyvsp[-2].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 542:
-#line 2881 "objc-parse.y"
+#line 2880 "objc-parse.y"
 {
                  yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype);
                ;
     break;}
 case 544:
-#line 2889 "objc-parse.y"
+#line 2888 "objc-parse.y"
 {
                  yyval.ttype = get_class_reference (yyvsp[0].ttype);
                ;
     break;}
 case 545:
-#line 2896 "objc-parse.y"
+#line 2895 "objc-parse.y"
 { objc_receiver_context = 1; ;
     break;}
 case 546:
-#line 2898 "objc-parse.y"
+#line 2897 "objc-parse.y"
 { objc_receiver_context = 0; ;
     break;}
 case 547:
-#line 2900 "objc-parse.y"
+#line 2899 "objc-parse.y"
 {
                  yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype);
                ;
     break;}
 case 551:
-#line 2913 "objc-parse.y"
+#line 2912 "objc-parse.y"
 {
                  yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 552:
-#line 2920 "objc-parse.y"
+#line 2919 "objc-parse.y"
 {
                  yyval.ttype = build_tree_list (yyvsp[-1].ttype, NULL_TREE);
                ;
     break;}
 case 553:
-#line 2924 "objc-parse.y"
+#line 2923 "objc-parse.y"
 {
                  yyval.ttype = build_tree_list (NULL_TREE, NULL_TREE);
                ;
     break;}
 case 554:
-#line 2931 "objc-parse.y"
+#line 2930 "objc-parse.y"
 {
                  yyval.ttype = yyvsp[-1].ttype;
                ;
     break;}
 case 555:
-#line 2938 "objc-parse.y"
+#line 2937 "objc-parse.y"
 {
                  yyval.ttype = yyvsp[-1].ttype;
                ;
     break;}
 case 556:
-#line 2947 "objc-parse.y"
+#line 2946 "objc-parse.y"
 {
                  yyval.ttype = groktypename (yyvsp[-1].ttype);
                ;
     break;}
 }
    /* the action file gets copied in in place of this dollarsign */
-#line 498 "/usr/cygnus/progressive-97r2/share/bison.simple"
+#line 498 "/usr/share/bison.simple"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -5100,5 +5106,5 @@ yyerrhandle:
   yystate = yyn;
   goto yynewstate;
 }
-#line 2952 "objc-parse.y"
+#line 2951 "objc-parse.y"
 
index c216d438ae1782bbb40adb7ac716ec260bb61292..0d93c465086c6e3971ee944acf3c6e246098c07f 100644 (file)
@@ -2024,8 +2024,14 @@ label:     CASE expr_no_commas ':'
                  if (value != error_mark_node)
                    {
                      tree duplicate;
-                     int success = pushcase (value, convert_and_check,
-                                             label, &duplicate);
+                     int success;
+
+                     if (pedantic && ! INTEGRAL_TYPE_P (TREE_TYPE (value)))
+                       pedwarn ("label must have integral type in ANSI C");
+
+                     success = pushcase (value, convert_and_check,
+                                         label, &duplicate);
+
                      if (success == 1)
                        error ("case label not within a switch statement");
                      else if (success == 2)
index e5b5d4fd6c9f89044af3b3728036447d684ddc52..bc318b37790eeb1cde7bdcde56fe383c60a9a310 100644 (file)
@@ -3,7 +3,7 @@
 
 
    NOTE: The canonical source of this file is maintained with the GNU C Library.
-   Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+   Bugs can be reported to bug-glibc@gnu.org.
 
    This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by the
index 144998cbcc1426bedc7e713a1905a0065941670d..38e96777660d5bbdafa108ae60def43e5221b750 100644 (file)
@@ -3,7 +3,7 @@
 
 
    NOTE: The canonical source of this file is maintained with the GNU C Library.
-   Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+   Bugs can be reported to bug-glibc@gnu.org.
 
    This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by the
index 29dcfcd4fa8ac43d549f74c3a528b29baac22de7..713c0bef5b8a0b2c21b43509d8a66df30d1c80af 100644 (file)
@@ -1,6 +1,6 @@
 /* real.c - implementation of REAL_ARITHMETIC, REAL_VALUE_ATOF,
    and support for XFmode IEEE extended real floating point arithmetic.
-   Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1993, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
    Contributed by Stephen L. Moshier (moshier@world.std.com).
 
 This file is part of GNU CC.
@@ -112,6 +112,10 @@ netlib.att.com: netlib/cephes.   */
 /* IBM System/370 style */
 #define IBM 1
 #else /* it's also not an IBM */
+#if TARGET_FLOAT_FORMAT == C4X_FLOAT_FORMAT
+/* TMS320C3x/C4x style */
+#define C4X 1
+#else /* it's also not a C4X */
 #if TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT
 #define IEEE
 #else /* it's not IEEE either */
@@ -119,6 +123,7 @@ netlib.att.com: netlib/cephes.   */
 unknown arithmetic type
 #define UNK 1
 #endif /* not IEEE */
+#endif /* not C4X */
 #endif /* not IBM */
 #endif /* not VAX */
 
@@ -153,7 +158,7 @@ unknown arithmetic type
 
 /* Define INFINITY for support of infinity.
    Define NANS for support of Not-a-Number's (NaN's).  */
-#if !defined(DEC) && !defined(IBM)
+#if !defined(DEC) && !defined(IBM) && !defined(C4X)
 #define INFINITY
 #define NANS
 #endif
@@ -288,7 +293,7 @@ do {                                                                \
 
 #endif /* not REAL_ARITHMETIC */
 #endif /* not TFmode */
-#endif /* no XFmode */
+#endif /* not XFmode */
 
 
 /* Number of 16 bit words in internal format */
@@ -418,6 +423,14 @@ static void etoibm PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *,
 static void toibm      PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *,
                               enum machine_mode));
 #endif
+#ifdef C4X
+static void c4xtoe     PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *,
+                              enum machine_mode));
+static void etoc4x     PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *,
+                              enum machine_mode));
+static void toc4x      PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *,
+                              enum machine_mode));
+#endif
 static void make_nan   PROTO((unsigned EMUSHORT *, int, enum machine_mode));
 #if 0
 static void uditoe     PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *));
@@ -443,7 +456,6 @@ endian (e, x, mode)
     {
       switch (mode)
        {
-
        case TFmode:
          /* Swap halfwords in the fourth long.  */
          th = (unsigned long) e[6] & 0xffff;
@@ -452,7 +464,6 @@ endian (e, x, mode)
          x[3] = (long) t;
 
        case XFmode:
-
          /* Swap halfwords in the third long.  */
          th = (unsigned long) e[4] & 0xffff;
          t = (unsigned long) e[5] & 0xffff;
@@ -461,18 +472,16 @@ endian (e, x, mode)
          /* fall into the double case */
 
        case DFmode:
-
-         /* swap halfwords in the second word */
+         /* Swap halfwords in the second word.  */
          th = (unsigned long) e[2] & 0xffff;
          t = (unsigned long) e[3] & 0xffff;
          t |= th << 16;
          x[1] = (long) t;
          /* fall into the float case */
 
-       case HFmode:
        case SFmode:
-
-         /* swap halfwords in the first word */
+       case HFmode:
+         /* Swap halfwords in the first word.  */
          th = (unsigned long) e[0] & 0xffff;
          t = (unsigned long) e[1] & 0xffff;
          t |= th << 16;
@@ -489,9 +498,7 @@ endian (e, x, mode)
 
       switch (mode)
        {
-
        case TFmode:
-
          /* Pack the fourth long.  */
          th = (unsigned long) e[7] & 0xffff;
          t = (unsigned long) e[6] & 0xffff;
@@ -499,7 +506,6 @@ endian (e, x, mode)
          x[3] = (long) t;
 
        case XFmode:
-
          /* Pack the third long.
             Each element of the input REAL_VALUE_TYPE array has 16 useful bits
             in it.  */
@@ -510,18 +516,16 @@ endian (e, x, mode)
          /* fall into the double case */
 
        case DFmode:
-
-         /* pack the second long */
+         /* Pack the second long */
          th = (unsigned long) e[3] & 0xffff;
          t = (unsigned long) e[2] & 0xffff;
          t |= th << 16;
          x[1] = (long) t;
          /* fall into the float case */
 
-       case HFmode:
        case SFmode:
-
-         /* pack the first long */
+       case HFmode:
+         /* Pack the first long */
          th = (unsigned long) e[1] & 0xffff;
          t = (unsigned long) e[0] & 0xffff;
          t |= th << 16;
@@ -678,18 +682,22 @@ ereal_atof (s, t)
       asctoe24 (s, tem);
       e24toe (tem, e);
       break;
+
     case DFmode:
       asctoe53 (s, tem);
       e53toe (tem, e);
       break;
+
     case XFmode:
       asctoe64 (s, tem);
       e64toe (tem, e);
       break;
+
     case TFmode:
       asctoe113 (s, tem);
       e113toe (tem, e);
       break;
+
     default:
       asctoe (s, e);
     }
@@ -1027,8 +1035,8 @@ real_value_truncate (mode, arg)
       e53toe (t, t);
       break;
 
-    case HFmode:
     case SFmode:
+    case HFmode:
       etoe24 (e, t);
       e24toe (t, t);
       break;
@@ -2460,6 +2468,7 @@ emdnorm (s, lost, subflg, exp, rcntrl)
          re = rw - 1;
          rebit = 1;
          break;
+
        case 113:
          rw = 10;
          rmsk = 0x7fff;
@@ -2467,6 +2476,7 @@ emdnorm (s, lost, subflg, exp, rcntrl)
          rebit = 0x8000;
          re = rw;
          break;
+
        case 64:
          rw = 7;
          rmsk = 0xffff;
@@ -2474,6 +2484,7 @@ emdnorm (s, lost, subflg, exp, rcntrl)
          re = rw - 1;
          rebit = 1;
          break;
+
          /* For DEC or IBM arithmetic */
        case 56:
          rw = 6;
@@ -2482,6 +2493,7 @@ emdnorm (s, lost, subflg, exp, rcntrl)
          rebit = 0x100;
          re = rw;
          break;
+
        case 53:
          rw = 6;
          rmsk = 0x7ff;
@@ -2489,6 +2501,16 @@ emdnorm (s, lost, subflg, exp, rcntrl)
          rebit = 0x800;
          re = rw;
          break;
+
+         /* For C4x arithmetic */
+       case 32:
+         rw = 5;
+         rmsk = 0xffff;
+         rmbit = 0x8000;
+         rebit = 1;
+         re = rw - 1;
+         break;
+
        case 24:
          rw = 4;
          rmsk = 0xff;
@@ -2984,6 +3006,11 @@ e53toe (pe, y)
 
   ibmtoe (pe, y, DFmode);
 
+#else
+#ifdef C4X
+
+  c4xtoe (pe, y, HFmode);
+
 #else
   register unsigned EMUSHORT r;
   register unsigned EMUSHORT *e, *p;
@@ -3060,13 +3087,15 @@ e53toe (pe, y)
 #endif
   eshift (yy, -5);
   if (denorm)
-    {                          /* if zero exponent, then normalize the significand */
+    {                  
+       /* If zero exponent, then normalize the significand.  */
       if ((k = enormlz (yy)) > NBITS)
        ecleazs (yy);
       else
        yy[E] -= (unsigned EMUSHORT) (k - 1);
     }
   emovo (yy, y);
+#endif /* not C4X */
 #endif /* not IBM */
 #endif /* not DEC */
 }
@@ -3289,6 +3318,13 @@ e24toe (pe, y)
   ibmtoe (pe, y, SFmode);
 
 #else
+
+#ifdef C4X
+
+  c4xtoe (pe, y, QFmode);
+
+#else
+
   register unsigned EMUSHORT r;
   register unsigned EMUSHORT *e, *p;
   unsigned EMUSHORT yy[NI];
@@ -3370,6 +3406,7 @@ e24toe (pe, y)
        yy[E] -= (unsigned EMUSHORT) (k - 1);
     }
   emovo (yy, y);
+#endif /* not C4X */
 #endif /* not IBM */
 }
 
@@ -3654,7 +3691,28 @@ toe53 (x, y)
   toibm (x, y, DFmode);
 }
 
-#else  /* it's neither DEC nor IBM */
+#else /* it's neither DEC nor IBM */
+#ifdef C4X
+/* Convert e-type X to C4X-format double E.  */
+
+static void 
+etoe53 (x, e)
+     unsigned EMUSHORT *x, *e;
+{
+  etoc4x (x, e, HFmode);
+}
+
+/* Convert exploded e-type X, that has already been rounded to
+   56-bit precision, to IBM 370 double Y.  */
+
+static void 
+toe53 (x, y)
+     unsigned EMUSHORT *x, *y;
+{
+  toc4x (x, y, HFmode);
+}
+
+#else  /* it's neither DEC nor IBM nor C4X */
 
 /* Convert e-type X to IEEE double E.  */
 
@@ -3778,6 +3836,7 @@ toe53 (x, y)
     }
 }
 
+#endif /* not C4X */
 #endif /* not IBM */
 #endif /* not DEC */
 
@@ -3806,6 +3865,29 @@ toe24 (x, y)
 }
 
 #else
+
+#ifdef C4X
+/* Convert e-type X to C4X float E.  */
+
+static void 
+etoe24 (x, e)
+     unsigned EMUSHORT *x, *e;
+{
+  etoc4x (x, e, QFmode);
+}
+
+/* Convert exploded e-type X, that has already been rounded to
+   float precision, to IBM 370 float Y.  */
+
+static void 
+toe24 (x, y)
+     unsigned EMUSHORT *x, *y;
+{
+  toc4x (x, y, QFmode);
+}
+
+#else
+
 /* Convert e-type X to IEEE float E.  DEC float is the same as IEEE float.  */
 
 static void 
@@ -3931,6 +4013,7 @@ toe24 (x, y)
     }
 #endif
 }
+#endif  /* not C4X */
 #endif  /* not IBM */
 
 /* Compare two e type numbers. 
@@ -4878,9 +4961,13 @@ asctoe53 (s, y)
 {
 #if defined(DEC) || defined(IBM)
   asctoeg (s, y, 56);
+#else
+#if defined(C4X)
+  asctoeg (s, y, 32);
 #else
   asctoeg (s, y, 53);
 #endif
+#endif
 }
 
 
@@ -5188,13 +5275,18 @@ read_expnt:
   /* Round and convert directly to the destination type */
   if (oprec == 53)
     lexp -= EXONE - 0x3ff;
+#ifdef C4X
+  else if (oprec == 24 || oprec == 32)
+    lexp -= (EXONE - 0x7f);
+#else
 #ifdef IBM
   else if (oprec == 24 || oprec == 56)
     lexp -= EXONE - (0x41 << 2);
 #else
   else if (oprec == 24)
     lexp -= EXONE - 0177;
-#endif
+#endif /* IBM */
+#endif /* C4X */
 #ifdef DEC
   else if (oprec == 56)
     lexp -= EXONE - 0201;
@@ -5218,6 +5310,12 @@ read_expnt:
       toibm (yy, y, DFmode);
       break;
 #endif
+#ifdef C4X
+    case 32:
+      toc4x (yy, y, HFmode);
+      break;
+#endif
+
     case 53:
       toe53 (yy, y);
       break;
@@ -5709,6 +5807,254 @@ toibm (x, y, mode)
 }
 #endif /* IBM */
 
+
+#ifdef C4X
+/* Convert C4X single/double precision to e type.  */
+
+static void 
+c4xtoe (d, e, mode)
+     unsigned EMUSHORT *d;
+     unsigned EMUSHORT *e;
+     enum machine_mode mode;
+{
+  unsigned EMUSHORT y[NI];
+  int r;
+  int rndsav;
+  int isnegative;
+  int size;
+  int i;
+  int carry;
+
+  /* Short-circuit the zero case. */
+  if ((d[0] == 0x8000)
+      && (d[1] == 0x0000)
+      && ((mode == QFmode) || ((d[2] == 0x0000) && (d[3] == 0x0000))))
+    {
+      e[0] = 0;
+      e[1] = 0;
+      e[2] = 0;
+      e[3] = 0;
+      e[4] = 0;
+      e[5] = 0;
+      return;
+    }
+
+  ecleaz (y);                  /* start with a zero */
+  r = d[0];                    /* get sign/exponent part */
+  if (r & (unsigned int) 0x0080)
+  {
+     y[0] = 0xffff;            /* fill in our sign */
+     isnegative = TRUE;
+  }
+  else
+  {
+     isnegative = FALSE;
+  }
+     
+  r >>= 8;                     /* Shift exponent word down 8 bits.  */
+  if (r & 0x80)                        /* Make the exponent negative if it is. */
+  {
+     r = r | (~0 & ~0xff);
+  }
+
+  if (isnegative)
+  {
+     /* Now do the high order mantissa.  We don't "or" on the high bit
+       because it is 2 (not 1) and is handled a little differently
+       below.  */
+     y[M] = d[0] & 0x7f;       
+
+     y[M+1] = d[1];
+     if (mode != QFmode)       /* There are only 2 words in QFmode.  */
+     {
+       y[M+2] = d[2];          /* Fill in the rest of our mantissa.  */
+       y[M+3] = d[3];
+       size = 4;
+     }
+     else
+     {
+       size = 2;
+     }
+     eshift(y, -8);
+
+     /* Now do the two's complement on the data.  */
+
+     carry = 1;        /* Initially add 1 for the two's complement. */
+     for (i=size + M; i > M; i--)
+     {
+       if (carry && (y[i] == 0x0000))
+       {
+          /* We overflowed into the next word, carry is the same.  */
+          y[i] = carry ? 0x0000 : 0xffff;
+       }
+       else
+       {
+          /* No overflow, just invert and add carry.  */
+          y[i] = ((~y[i]) + carry) & 0xffff;
+          carry = 0;
+       }
+     }
+
+     if (carry)
+     {
+       eshift(y, -1);
+       y[M+1] |= 0x8000;
+       r++;
+     }
+     y[1] = r + EXONE;
+  }
+  else
+  {
+    /* Add our e type exponent offset to form our exponent.  */
+     r += EXONE;
+     y[1] = r;                 
+
+     /* Now do the high order mantissa strip off the exponent and sign
+       bits and add the high 1 bit.  */
+     y[M] = d[0] & 0x7f | 0x80;        
+
+     y[M+1] = d[1];
+     if (mode != QFmode)       /* There are only 2 words in QFmode.  */
+     {
+       y[M+2] = d[2];          /* Fill in the rest of our mantissa.  */
+       y[M+3] = d[3];
+     }
+     eshift(y, -8);
+  }
+
+  emovo (y, e);
+}
+
+
+/* Convert e type to C4X single/double precision.  */
+
+static void 
+etoc4x (x, d, mode)
+     unsigned EMUSHORT *x, *d;
+     enum machine_mode mode;
+{
+  unsigned EMUSHORT xi[NI];
+  EMULONG exp;
+  int rndsav;
+
+  emovi (x, xi);
+
+  /* Adjust exponent for offsets. */
+  exp = (EMULONG) xi[E] - (EXONE - 0x7f);
+
+  /* Round off to nearest or even. */
+  rndsav = rndprc;
+  rndprc = mode == QFmode ? 24 : 32;
+  emdnorm (xi, 0, 0, exp, 64);
+  rndprc = rndsav;
+  toc4x (xi, d, mode);
+}
+
+static void 
+toc4x (x, y, mode)
+     unsigned EMUSHORT *x, *y;
+     enum machine_mode mode;
+{
+  int i;
+  int r;
+  int v;
+  int carry;
+  
+  /* Short-circuit the zero case */
+  if ((x[0] == 0)      /* Zero exponent and sign */
+      && (x[1] == 0)
+      && (x[M] == 0)   /* The rest is for zero mantissa */
+      && (x[M+1] == 0)
+      /* Only check for double if necessary */
+      && ((mode == QFmode) || ((x[M+2] == 0) && (x[M+3] == 0))))
+    {
+      /* We have a zero.  Put it into the output and return. */
+      *y++ = 0x8000;
+      *y++ = 0x0000;
+      if (mode != QFmode)
+        {
+          *y++ = 0x0000;
+          *y++ = 0x0000;
+        }
+      return;
+    }
+  
+  *y = 0;
+  
+  /* Negative number require a two's complement conversion of the
+     mantissa. */
+  if (x[0])
+    {
+      *y = 0x0080;
+      
+      i = ((int) x[1]) - 0x7f;
+      
+      /* Now add 1 to the inverted data to do the two's complement. */
+      if (mode != QFmode)
+       v = 4 + M;
+      else
+       v = 2 + M;
+      carry = 1;
+      while (v > M)
+       {
+         if (x[v] == 0x0000)
+           {
+             x[v] = carry ? 0x0000 : 0xffff;
+           }
+         else
+           {
+             x[v] = ((~x[v]) + carry) & 0xffff;
+             carry = 0;
+           }
+         v--;
+       }
+      
+      /* The following is a special case.  The C4X negative float requires
+        a zero in the high bit (because the format is (2 - x) x 2^m), so
+        if a one is in that bit, we have to shift left one to get rid
+        of it.  This only occurs if the number is -1 x 2^m. */
+      if (x[M+1] & 0x8000)
+       {
+         /* This is the case of -1 x 2^m, we have to rid ourselves of the
+            high sign bit and shift the exponent. */
+         eshift(x, 1);
+         i--;
+       }
+    }
+  else
+    {
+      i = ((int) x[1]) - 0x7f;
+    }
+
+  if ((i < -128) || (i > 127))
+    {
+      y[0] |= 0xff7f;
+      y[1] = 0xffff;
+      if (mode != QFmode)
+       {
+         y[2] = 0xffff;
+         y[3] = 0xffff;
+       }
+#ifdef ERANGE
+      errno = ERANGE;
+#endif
+      return;
+    }
+  
+  y[0] |= ((i & 0xff) << 8);
+  
+  eshift (x, 8);
+  
+  y[0] |= x[M] & 0x7f;
+  y[1] = x[M + 1];
+  if (mode != QFmode)
+    {
+      y[2] = x[M + 2];
+      y[3] = x[M + 3];
+    }
+}
+#endif /* C4X */
+
 /* Output a binary NaN bit pattern in the target machine's format.  */
 
 /* If special NaN bit patterns are required, define them in tm.h
@@ -5766,7 +6112,7 @@ make_nan (nan, sign, mode)
     {
 /* Possibly the `reserved operand' patterns on a VAX can be
    used like NaN's, but probably not in the same way as IEEE.  */
-#if !defined(DEC) && !defined(IBM)
+#if !defined(DEC) && !defined(IBM) && !defined(C4X)
     case TFmode:
       n = 8;
       if (REAL_WORDS_BIG_ENDIAN)
@@ -5774,6 +6120,7 @@ make_nan (nan, sign, mode)
       else
        p = TFlittlenan;
       break;
+
     case XFmode:
       n = 6;
       if (REAL_WORDS_BIG_ENDIAN)
@@ -5781,6 +6128,7 @@ make_nan (nan, sign, mode)
       else
        p = XFlittlenan;
       break;
+
     case DFmode:
       n = 4;
       if (REAL_WORDS_BIG_ENDIAN)
@@ -5788,8 +6136,9 @@ make_nan (nan, sign, mode)
       else
        p = DFlittlenan;
       break;
-    case HFmode:
+
     case SFmode:
+    case HFmode:
       n = 2;
       if (REAL_WORDS_BIG_ENDIAN)
        p = SFbignan;
@@ -5797,6 +6146,7 @@ make_nan (nan, sign, mode)
        p = SFlittlenan;
       break;
 #endif
+
     default:
       abort ();
     }
@@ -6349,6 +6699,11 @@ significand_size (mode)
 switch (GET_MODE_BITSIZE (mode))
   {
   case 32:
+#if TARGET_FLOAT_FORMAT == C4X_FLOAT_FORMAT
+    return 56;
+#endif
+
     return 24;
 
   case 64:
@@ -6360,10 +6715,14 @@ switch (GET_MODE_BITSIZE (mode))
 #else
 #if TARGET_FLOAT_FORMAT == VAX_FLOAT_FORMAT
     return 56;
+#else
+#if TARGET_FLOAT_FORMAT == C4X_FLOAT_FORMAT
+    return 56;
 #else
     abort ();
 #endif
 #endif
+#endif
 #endif
 
   case 96:
index a91061ef54d610e1f1a13a33cd1662cd5d9df3ad..848ef184f2f72fc53dc1b66a1d307761da7f8241 100644 (file)
@@ -26,6 +26,7 @@ Boston, MA 02111-1307, USA.  */
 #define IEEE_FLOAT_FORMAT 1
 #define VAX_FLOAT_FORMAT 2
 #define IBM_FLOAT_FORMAT 3
+#define C4X_FLOAT_FORMAT 4
 
 /* Default to IEEE float if not specified.  Nearly all machines use it.  */
 
index 5f02f2cd3e6137dfced6fee1c1ded93969992e19..80936971b6945a3883805ce60ab209abb76d4900 100644 (file)
@@ -128,6 +128,8 @@ a register with any other reload.  */
    reload_optional       char, nonzero for an optional reload.
                           Optional reloads are ignored unless the
                           value is already sitting in a register.
+   reload_nongroup       char, nonzero when a reload must use a register
+                          not already allocated to a group.
    reload_inc            int, positive amount to increment or decrement by if
                           reload_in is a PRE_DEC, PRE_INC, POST_DEC, POST_INC.
                           Ignored otherwise (don't assume it is zero).
@@ -175,6 +177,7 @@ enum machine_mode reload_inmode[MAX_RELOADS];
 enum machine_mode reload_outmode[MAX_RELOADS];
 rtx reload_reg_rtx[MAX_RELOADS];
 char reload_optional[MAX_RELOADS];
+char reload_nongroup[MAX_RELOADS];
 int reload_inc[MAX_RELOADS];
 rtx reload_in_reg[MAX_RELOADS];
 char reload_nocombine[MAX_RELOADS];
@@ -527,6 +530,7 @@ push_secondary_reload (in_p, x, opnum, optional, reload_class, reload_mode,
          reload_outmode[t_reload] = ! in_p ? t_mode : VOIDmode;
          reload_reg_rtx[t_reload] = 0;
          reload_optional[t_reload] = optional;
+         reload_nongroup[t_reload] = 0;
          reload_inc[t_reload] = 0;
          /* Maybe we could combine these, but it seems too tricky.  */
          reload_nocombine[t_reload] = 1;
@@ -595,6 +599,7 @@ push_secondary_reload (in_p, x, opnum, optional, reload_class, reload_mode,
       reload_outmode[s_reload] = ! in_p ? mode : VOIDmode;
       reload_reg_rtx[s_reload] = 0;
       reload_optional[s_reload] = optional;
+      reload_nongroup[s_reload] = 0;
       reload_inc[s_reload] = 0;
       /* Maybe we could combine these, but it seems too tricky.  */
       reload_nocombine[s_reload] = 1;
@@ -1271,6 +1276,7 @@ push_reload (in, out, inloc, outloc, class,
       reload_outmode[i] = outmode;
       reload_reg_rtx[i] = 0;
       reload_optional[i] = optional;
+      reload_nongroup[i] = 0;
       reload_inc[i] = 0;
       reload_nocombine[i] = 0;
       reload_in_reg[i] = inloc ? *inloc : 0;
@@ -2315,6 +2321,7 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
   int goal_alternative_swapped;
   int best;
   int commutative;
+  int changed;
   char operands_match[MAX_RECOG_OPERANDS][MAX_RECOG_OPERANDS];
   rtx substed_operand[MAX_RECOG_OPERANDS];
   rtx body = PATTERN (insn);
@@ -3970,6 +3977,67 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
            reload_in[j] = 0;
          }
 
+  /* Set which reloads must use registers not used in any group.  Start
+     with those that conflict with a group and then include ones that
+     conflict with ones that are already known to conflict with a group.  */
+
+  changed = 0;
+  for (i = 0; i < n_reloads; i++)
+    {
+      enum machine_mode mode = reload_inmode[i];
+      enum reg_class class = reload_reg_class[i];
+      int size;
+
+      if (GET_MODE_SIZE (reload_outmode[i]) > GET_MODE_SIZE (mode))
+       mode = reload_outmode[i];
+      size = CLASS_MAX_NREGS (class, mode);
+
+      if (size == 1)
+       for (j = 0; j < n_reloads; j++)
+         if ((CLASS_MAX_NREGS (reload_reg_class[j],
+                               (GET_MODE_SIZE (reload_outmode[j])
+                                > GET_MODE_SIZE (reload_inmode[j]))
+                               ? reload_outmode[j] : reload_inmode[j])
+              > 1)
+             && !reload_optional[j]
+             && (reload_in[j] != 0 || reload_out[j] != 0
+                 || reload_secondary_p[j])
+             && reloads_conflict (i, j)
+             && reg_classes_intersect_p (class, reload_reg_class[j]))
+           {
+             reload_nongroup[i] = 1;
+             changed = 1;
+             break;
+           }
+    }
+
+  while (changed)
+    {
+      changed = 0;
+
+      for (i = 0; i < n_reloads; i++)
+       {
+         enum machine_mode mode = reload_inmode[i];
+         enum reg_class class = reload_reg_class[i];
+         int size;
+
+         if (GET_MODE_SIZE (reload_outmode[i]) > GET_MODE_SIZE (mode))
+           mode = reload_outmode[i];
+         size = CLASS_MAX_NREGS (class, mode);
+
+         if (! reload_nongroup[i] && size == 1)
+           for (j = 0; j < n_reloads; j++)
+             if (reload_nongroup[j]
+                 && reloads_conflict (i, j)
+                 && reg_classes_intersect_p (class, reload_reg_class[j]))
+               {
+                 reload_nongroup[i] = 1;
+                 changed = 1;
+                 break;
+               }
+       }
+    }
+
 #else /* no REGISTER_CONSTRAINTS */
   int noperands;
   int insn_code_number;
@@ -6277,6 +6345,9 @@ debug_reload_to_stream (f)
       if (reload_optional[r])
        fprintf (f, ", optional");
 
+      if (reload_nongroup[r])
+       fprintf (stderr, ", nongroup");
+
       if (reload_inc[r] != 0)
        fprintf (f, ", inc by %d", reload_inc[r]);
 
index 79f5882e98edbfd2d3e07d8dbe395ecc3ecf08d2..3ca2e98b61a66b8aa5e1aa9474f26afea0e59197 100644 (file)
@@ -1,5 +1,5 @@
 /* Communication between reload.c and reload1.c.
-   Copyright (C) 1987, 91-95, 1997, 1998 Free Software Foundation, Inc.
+   Copyright (C) 1987, 91-95, 97, 1998 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -59,6 +59,7 @@ extern enum reg_class reload_reg_class[MAX_RELOADS];
 extern enum machine_mode reload_inmode[MAX_RELOADS];
 extern enum machine_mode reload_outmode[MAX_RELOADS];
 extern char reload_optional[MAX_RELOADS];
+extern char reload_nongroup[MAX_RELOADS];
 extern int reload_inc[MAX_RELOADS];
 extern int reload_opnum[MAX_RELOADS];
 extern int reload_secondary_p[MAX_RELOADS];
index c8fb2efbd0f3d25e855ceef22010e6e6057c016d..c9ebee9f89df7ea667ad41902a83a6cc457672f8 100644 (file)
@@ -1,5 +1,5 @@
 /* Reload pseudo regs into hard regs for insns that require hard regs.
-   Copyright (C) 1987, 88, 89, 92-7 1998 Free Software Foundation, Inc.
+   Copyright (C) 1987, 88, 89, 92-97, 1998 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -378,7 +378,6 @@ static void clear_reload_reg_in_use PROTO((int, int, enum reload_type,
 static int reload_reg_free_p           PROTO((int, int, enum reload_type));
 static int reload_reg_free_before_p    PROTO((int, int, enum reload_type));
 static int reload_reg_reaches_end_p    PROTO((int, int, enum reload_type));
-static int reloads_conflict            PROTO((int, int));
 static int allocate_reload_reg         PROTO((int, rtx, int, int));
 static void choose_reload_regs         PROTO((rtx, rtx));
 static void merge_assigned_reloads     PROTO((rtx));
@@ -1165,7 +1164,6 @@ reload (first, global, dumpfile)
                  enum reg_class class = reload_reg_class[i];
                  int size;
                  enum machine_mode mode;
-                 int nongroup_need;
                  struct needs *this_needs;
 
                  /* Don't count the dummy reloads, for which one of the
@@ -1193,31 +1191,6 @@ reload (first, global, dumpfile)
                    mode = reload_outmode[i];
                  size = CLASS_MAX_NREGS (class, mode);
 
-                 /* If this class doesn't want a group, determine if we have
-                    a nongroup need or a regular need.  We have a nongroup
-                    need if this reload conflicts with a group reload whose
-                    class intersects with this reload's class.  */
-
-                 nongroup_need = 0;
-                 if (size == 1)
-                   for (j = 0; j < n_reloads; j++)
-                     if ((CLASS_MAX_NREGS (reload_reg_class[j],
-                                           (GET_MODE_SIZE (reload_outmode[j])
-                                            > GET_MODE_SIZE (reload_inmode[j]))
-                                           ? reload_outmode[j]
-                                           : reload_inmode[j])
-                          > 1)
-                         && (!reload_optional[j])
-                         && (reload_in[j] != 0 || reload_out[j] != 0
-                             || reload_secondary_p[j])
-                         && reloads_conflict (i, j)
-                         && reg_classes_intersect_p (class,
-                                                     reload_reg_class[j]))
-                       {
-                         nongroup_need = 1;
-                         break;
-                       }
-
                  /* Decide which time-of-use to count this reload for.  */
                  switch (reload_when_needed[i])
                    {
@@ -1295,10 +1268,10 @@ reload (first, global, dumpfile)
                    }
                  else if (size == 1)
                    {
-                     this_needs->regs[nongroup_need][(int) class] += 1;
+                     this_needs->regs[reload_nongroup[i]][(int) class] += 1;
                      p = reg_class_superclasses[(int) class];
                      while (*p != LIM_REG_CLASSES)
-                       this_needs->regs[nongroup_need][(int) *p++] += 1;
+                       this_needs->regs[reload_nongroup[i]][(int) *p++] += 1;
                    }
                  else
                    abort ();
@@ -1406,20 +1379,21 @@ reload (first, global, dumpfile)
              if (GET_CODE (insn) == CALL_INSN
                  && caller_save_spill_class != NO_REGS)
                {
-                 /* See if this register would conflict with any reload
-                    that needs a group.  */
+                 /* See if this register would conflict with any reload that
+                    needs a group or any reload that needs a nongroup.  */
                  int nongroup_need = 0;
                  int *caller_save_needs;
 
                  for (j = 0; j < n_reloads; j++)
-                   if ((CLASS_MAX_NREGS (reload_reg_class[j],
-                                         (GET_MODE_SIZE (reload_outmode[j])
-                                          > GET_MODE_SIZE (reload_inmode[j]))
-                                         ? reload_outmode[j]
-                                         : reload_inmode[j])
-                        > 1)
-                       && reg_classes_intersect_p (caller_save_spill_class,
-                                                   reload_reg_class[j]))
+                   if (reg_classes_intersect_p (caller_save_spill_class,
+                                                reload_reg_class[j])
+                       && ((CLASS_MAX_NREGS
+                            (reload_reg_class[j],
+                             (GET_MODE_SIZE (reload_outmode[j])
+                              > GET_MODE_SIZE (reload_inmode[j]))
+                             ? reload_outmode[j] : reload_inmode[j])
+                            > 1)
+                           || reload_nongroup[j]))
                      {
                        nongroup_need = 1;
                        break;
@@ -4910,7 +4884,7 @@ reload_reg_reaches_end_p (regno, opnum, type)
 
    This function uses the same algorithm as reload_reg_free_p above.  */
 
-static int
+int
 reloads_conflict (r1, r2)
      int r1, r2;
 {
index 19f3e37b08aba66cb732eb6748eb895b5b31e287..58c292e6ce7650cb5770d224e19ba2078a8da1bc 100644 (file)
@@ -125,11 +125,6 @@ extern rtx arg_pointer_save_area;
 
 /* Chain of all RTL_EXPRs that have insns in them.  */
 extern tree rtl_expr_chain;
-
-/* Stack allocation level in which temporaries for TARGET_EXPRs live.  */
-extern int target_temp_slot_level;
-
-extern int temp_slot_level;
 \f
 /* Functions and data structures for expanding case statements.  */
 
index 7aef13ad20af3dde7efe5e3d2e0035db1b688c5a..44ea22c38aeb60fb0106252ec05d17eaec00485c 100644 (file)
 %
 % Please try the latest version of texinfo.tex before submitting bug
 % reports; you can get the latest version from:
-% ftp://ftp.cs.umb.edu/pub/tex/texinfo.tex
 % /home/gd/gnu/doc/texinfo.tex on the GNU machines.
+% ftp://ftp.gnu.org/pub/gnu/texinfo.tex
+% (and all GNU mirrors)
+% ftp://tug.org/tex/texinfo.tex
+% ftp://ctan.org/macros/texinfo/texinfo.tex
+% (and all CTAN mirrors, finger ctan@tug.org for a list).
 % 
 % Send bug reports to bug-texinfo@gnu.org.
 % Please include a precise test case in each bug report,
 % Texinfo macros (with @macro) are *not* supported by texinfo.tex.  You
 % have to run makeinfo -E to expand macros first; the texi2dvi script
 % does this.
+% 
+% To process a Texinfo manual with TeX, it's most reliable to use the
+% texi2dvi shell script that comes with the distribution.  For simple
+% manuals, you can get away with:
+%   tex foo.texi
+%   texindex foo.??
+%   tex foo.texi
+%   tex foo.texi
+%   dvips foo.dvi -o # or whatever, to process the dvi file.
+% The extra runs of TeX get the cross-reference information correct.
+% Sometimes one run after texindex suffices, and sometimes you need more
+% than two; texi2dvi does it as many times as necessary.
 
 
 % Make it possible to create a .fmt file just by loading this file:
 \let\ptexstar=\*
 \let\ptext=\t
 
-% Be sure we're in horizontal mode when doing a tie, since we make space
-% equivalent to this in @example-like environments. Otherwise, a space
-% at the beginning of a line will start with \penalty -- and
-% since \penalty is valid in vertical mode, we'd end up putting the
-% penalty on the vertical list instead of in the new paragraph.
-{\catcode`@ = 11
- % Avoid using \@M directly, because that causes trouble
- % if the definition is written into an index file.
- \global\let\tiepenalty = \@M
- \gdef\tie{\leavevmode\penalty\tiepenalty\ }
-}
+% We never want plain's outer \+ definition in Texinfo.
+% For @tex, we can use \tabalign.
+\let\+ = \relax
 
 
 \message{Basics,}
 % starts a new line in the output.
 \newlinechar = `^^J
 
-% Set up fixed words for English.
-\ifx\putwordChapter\undefined{\gdef\putwordChapter{Chapter}}\fi%
-\def\putwordInfo{Info}%
-\ifx\putwordSee\undefined{\gdef\putwordSee{See}}\fi%
-\ifx\putwordsee\undefined{\gdef\putwordsee{see}}\fi%
-\ifx\putwordfile\undefined{\gdef\putwordfile{file}}\fi%
-\ifx\putwordpage\undefined{\gdef\putwordpage{page}}\fi%
-\ifx\putwordsection\undefined{\gdef\putwordsection{section}}\fi%
-\ifx\putwordSection\undefined{\gdef\putwordSection{Section}}\fi%
-\ifx\putwordTableofContents\undefined{\gdef\putwordTableofContents{Table of Contents}}\fi%
-\ifx\putwordShortContents\undefined{\gdef\putwordShortContents{Short Contents}}\fi%
-\ifx\putwordAppendix\undefined{\gdef\putwordAppendix{Appendix}}\fi%
+% Set up fixed words for English if not already set.
+\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
+\ifx\putwordChapter\undefined  \gdef\putwordChapter{Chapter}\fi
+\ifx\putwordfile\undefined     \gdef\putwordfile{file}\fi
+\ifx\putwordInfo\undefined     \gdef\putwordfile{Info}\fi
+\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
+\ifx\putwordon\undefined       \gdef\putwordon{on}\fi
+\ifx\putwordpage\undefined     \gdef\putwordpage{page}\fi
+\ifx\putwordsection\undefined  \gdef\putwordsection{section}\fi
+\ifx\putwordSection\undefined  \gdef\putwordSection{Section}\fi
+\ifx\putwordsee\undefined      \gdef\putwordsee{see}\fi
+\ifx\putwordSee\undefined      \gdef\putwordSee{See}\fi
+\ifx\putwordShortContents\undefined  \gdef\putwordShortContents{Short Contents}\fi
+\ifx\putwordTableofContents\undefined\gdef\putwordTableofContents{Table of Contents}\fi
 
 % Ignore a token.
 %
 
 % @@ prints an @
 % Kludge this until the fonts are right (grr).
-\def\@{{\tt \char '100}}
+\def\@{{\tt\char64}}
 
 % This is turned off because it was never documented
 % and you can use @w{...} around a quote to suppress ligatures.
 %\def\'{{'}}
 
 % Used to generate quoted braces.
-\def\mylbrace {{\tt \char '173}}
-\def\myrbrace {{\tt \char '175}}
+\def\mylbrace {{\tt\char123}}
+\def\myrbrace {{\tt\char125}}
 \let\{=\mylbrace
 \let\}=\myrbrace
 \begingroup
   \fi\fi
 }
 
+% Be sure we're in horizontal mode when doing a tie, since we make space
+% equivalent to this in @example-like environments. Otherwise, a space
+% at the beginning of a line will start with \penalty -- and
+% since \penalty is valid in vertical mode, we'd end up putting the
+% penalty on the vertical list instead of in the new paragraph.
+{\catcode`@ = 11
+ % Avoid using \@M directly, because that causes trouble
+ % if the definition is written into an index file.
+ \global\let\tiepenalty = \@M
+ \gdef\tie{\leavevmode\penalty\tiepenalty\ }
+}
+
 % @: forces normal size whitespace following.
 \def\:{\spacefactor=1000 }
 
@@ -772,6 +794,7 @@ where each line of input produces a line of output.}
 % Also ignore @macro ... @end macro.  The user must run texi2dvi,
 % which runs makeinfo to do macro expansion.  Ignore @unmacro, too.
 \def\macro{\doignore{macro}}
+\def\macrocsname{macro}
 \let\unmacro = \comment
 
 
@@ -786,7 +809,9 @@ where each line of input produces a line of output.}
   \ignoresections
   %
   % Define a command to swallow text until we reach `@end #1'.
-  \long\def\doignoretext##1\end #1{\enddoignore}%
+  % This @ is a catcode 12 token (that is the normal catcode of @ in
+  % this texinfo.tex file).  We change the catcode of @ below to match.
+  \long\def\doignoretext##1@end #1{\enddoignore}%
   %
   % Make sure that spaces turn into tokens that match what \doignoretext wants.
   \catcode32 = 10
@@ -795,6 +820,22 @@ where each line of input produces a line of output.}
   \catcode`\{ = 9
   \catcode`\} = 9
   %
+  % We must not have @c interpreted as a control sequence.
+  \catcode`\@ = 12
+  %
+  % Make the letter c a comment character so that the rest of the line
+  % will be ignored. This way, the document can have (for example)
+  %   @c @end ifinfo
+  % and the @end ifinfo will be properly ignored.
+  % (We've just changed @ to catcode 12.)
+  % 
+  % But we can't do this if #1 is `macro', since that actually contains a c.
+  % Happily, none of the other conditionals have the letter `c' in their names!
+  \def\temp{#1}%
+  \ifx\temp\macrocsname \else
+    \catcode`\c = 14
+  \fi
+  %
   % And now expand that command.
   \doignoretext
 }
@@ -1702,18 +1743,6 @@ July\or August\or September\or October\or November\or December\fi
 
 
 \message{tables,}
-
-% @tabs -- simple alignment
-
-% These don't work.  For one thing, \+ is defined as outer.
-% So these macros cannot even be defined.
-
-%\def\tabs{\parsearg\tabszzz}
-%\def\tabszzz #1{\settabs\+#1\cr}
-%\def\tabline{\parsearg\tablinezzz}
-%\def\tablinezzz #1{\+#1\cr}
-%\def\&{&}
-
 % Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
 
 % default indentation of table text
@@ -2260,20 +2289,24 @@ width0pt\relax} \fi
 
 % @synindex foo bar    makes index foo feed into index bar.
 % Do this instead of @defindex foo if you don't want it as a separate index.
-\def\synindex #1 #2 {%
-\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
-\expandafter\let\csname#1indfile\endcsname=\synindexfoo
-\expandafter\xdef\csname#1index\endcsname{%     % Define \xxxindex
-\noexpand\doindex {#2}}%
+% The \closeout helps reduce unnecessary open files; the limit on the
+% Acorn RISC OS is a mere 16 files.
+\def\synindex#1 #2 {%
+  \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+  \expandafter\closeout\csname#1indfile\endcsname
+  \expandafter\let\csname#1indfile\endcsname=\synindexfoo
+  \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
+    \noexpand\doindex{#2}}%
 }
 
 % @syncodeindex foo bar   similar, but put all entries made for index foo
 % inside @code.
-\def\syncodeindex #1 #2 {%
-\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
-\expandafter\let\csname#1indfile\endcsname=\synindexfoo
-\expandafter\xdef\csname#1index\endcsname{%     % Define \xxxindex
-\noexpand\docodeindex {#2}}%
+\def\syncodeindex#1 #2 {%
+  \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+  \expandafter\closeout\csname#1indfile\endcsname
+  \expandafter\let\csname#1indfile\endcsname=\synindexfoo
+  \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
+    \noexpand\docodeindex{#2}}%
 }
 
 % Define \doindex, the driver for all \fooindex macros.
@@ -2294,6 +2327,7 @@ width0pt\relax} \fi
 \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
 
 \def\indexdummies{%
+\def\ { }%
 % Take care of the plain tex accent commands.
 \def\"{\realbackslash "}%
 \def\`{\realbackslash `}%
@@ -3553,6 +3587,7 @@ width0pt\relax} \fi
   \let\!=\ptexexclam
   \let\i=\ptexi
   \let\{=\ptexlbrace
+  \let\+=\tabalign
   \let\}=\ptexrbrace
   \let\*=\ptexstar
   \let\t=\ptext
@@ -3604,8 +3639,8 @@ width0pt\relax} \fi
 % \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins.
 \let\nonarrowing=\relax
 
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% \cartouche: draw rectangle w/rounded corners around argument
+% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
+% environment contents.
 \font\circle=lcircle10
 \newdimen\circthick
 \newdimen\cartouter\newdimen\cartinner
@@ -3632,9 +3667,9 @@ width0pt\relax} \fi
         \cartinner=\hsize \advance\cartinner by-\lskip
                           \advance\cartinner by-\rskip
         \cartouter=\hsize
-        \advance\cartouter by 18pt % allow for 3pt kerns on either
+        \advance\cartouter by 18.4pt % allow for 3pt kerns on either
 %                                    side, and for 6pt waste from
-%                                    each corner char
+%                                    each corner char, and rule thickness
         \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
         % Flag to tell @lisp, etc., not to narrow margin.
         \let\nonarrowing=\comment
@@ -3892,7 +3927,12 @@ width0pt\relax} \fi
 \catcode 61=\active % 61 is `='
 \obeylines\activeparens\spacesplit#3}
 
-\def\defmethparsebody #1#2#3#4 {\begingroup\inENV %
+% #1 is the \E... control sequence to end the definition (which we define).
+% #2 is the \...x control sequence for consecutive fns (which we define).
+% #3 is the control sequence to call to resume processing.
+% #4, delimited by the space, is the class name.
+% 
+\def\defmethparsebody#1#2#3#4 {\begingroup\inENV %
 \medbreak %
 % Define the end token that this defining construct specifies
 % so that it will exit this group.
@@ -3903,6 +3943,19 @@ width0pt\relax} \fi
 \exdentamount=\defbodyindent
 \begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
 
+% @deftypemethod has an extra argument that nothing else does.  Sigh.
+% 
+\def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV %
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
+\parindent=0in
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\exdentamount=\defbodyindent
+\begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}}
+
 \def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %
 \medbreak %
 % Define the end token that this defining construct specifies
@@ -4124,35 +4177,42 @@ width0pt\relax} \fi
 
 % @defmethod, and so on
 
-% @defop {Funny Method} foo-class frobnicate argument
+% @defop CATEGORY CLASS OPERATION ARG...
 
 \def\defop #1 {\def\defoptype{#1}%
 \defopparsebody\Edefop\defopx\defopheader\defoptype}
 
 \def\defopheader #1#2#3{%
-\dosubind {fn}{\code{#2}}{on #1}% Make entry in function index
+\dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index
 \begingroup\defname {#2}{\defoptype{} on #1}%
 \defunargs {#3}\endgroup %
 }
 
-% @deftypemethod foo-class return-type foo-method args
+% @deftypemethod CLASS RETURN-TYPE METHOD ARG...
 %
 \def\deftypemethod{%
-  \defmethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
+  \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
 %
 % #1 is the class name, #2 the data type, #3 the method name, #4 the args.
 \def\deftypemethodheader#1#2#3#4{%
-  \deftypefnheaderx{Method on #1}{#2}#3 #4\relax
+  \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
+  \begingroup
+    \defname{\defheaderxcond#2\relax$$$#3}{\putwordMethodon\ \code{#1}}%
+    \deftypefunargs{#4}%
+  \endgroup
 }
 
 % @defmethod == @defop Method
-
+%
 \def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
-
-\def\defmethodheader #1#2#3{%
-\dosubind {fn}{\code{#2}}{on #1}% entry in function index
-\begingroup\defname {#2}{Method on #1}%
-\defunargs {#3}\endgroup %
+%
+% #1 is the class name, #2 the method name, #3 the args.
+\def\defmethodheader#1#2#3{%
+  \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index
+  \begingroup
+    \defname{#2}{\putwordMethodon\ \code{#1}}%
+    \defunargs{#3}%
+  \endgroup
 }
 
 % @defcv {Class Option} foo-class foo-flag
@@ -4270,18 +4330,17 @@ width0pt\relax} \fi
 
 
 \message{cross reference,}
-% Define cross-reference macros
-\newwrite \auxfile
+\newwrite\auxfile
 
-\newif\ifhavexrefs  % True if xref values are known.
+\newif\ifhavexrefs    % True if xref values are known.
 \newif\ifwarnedxrefs  % True if we warned once that they aren't known.
 
-% @inforef is simple.
+% @inforef is relatively simple.
 \def\inforef #1{\inforefzzz #1,,,,**}
 \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
   node \samp{\ignorespaces#1{}}}
 
-% \setref{foo} defines a cross-reference point named foo.
+% @setref{foo} defines a cross-reference point named foo.
 
 \def\setref#1{%
 \dosetq{#1-title}{Ytitle}%
@@ -4349,7 +4408,7 @@ width0pt\relax} \fi
     % into the usual \leavevmode...\vrule stuff for purposes of
     % printing. So we \turnoffactive for the \refx-snt, back on for the
     % printing, back off for the \refx-pg.
-    {\turnoffactive \refx{#1-snt}{}}%
+    {\normalturnoffactive \refx{#1-snt}{}}%
     \space [\printednodename],\space
     \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
   \fi
@@ -4357,11 +4416,15 @@ width0pt\relax} \fi
 
 % \dosetq is the interface for calls from other macros
 
-% Use \turnoffactive so that punctuation chars such as underscore
-% work in node names.
-\def\dosetq #1#2{{\let\folio=0 \turnoffactive
-\edef\next{\write\auxfile{\internalsetq {#1}{#2}}}%
-\next}}
+% Use \normalturnoffactive so that punctuation chars such as underscore
+% and backslash work in node names.  (\turnoffactive doesn't do \.)
+\def\dosetq#1#2{%
+  {\let\folio=0
+   \normalturnoffactive
+   \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}%
+   \next
+  }%
+}
 
 % \internalsetq {foo}{page} expands into
 % CHARACTERS 'xrdef {foo}{...expansion of \Ypage...}
@@ -4492,8 +4555,7 @@ width0pt\relax} \fi
   \catcode`\$=\other
   \catcode`\#=\other
   \catcode`\&=\other
-  % `\+ does not work, so use 43.
-  \catcode43=\other
+  \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
   % Make the characters 128-255 be printing characters
   {%
     \count 1=128
@@ -4864,10 +4926,10 @@ width0pt\relax} \fi
 % use math or other variants that look better in normal text.
 
 \catcode`\"=\active
-\def\activedoublequote{{\tt \char '042}}
+\def\activedoublequote{{\tt\char34}}
 \let"=\activedoublequote
 \catcode`\~=\active
-\def~{{\tt \char '176}}
+\def~{{\tt\char126}}
 \chardef\hat=`\^
 \catcode`\^=\active
 \def^{{\tt \hat}}
@@ -4878,7 +4940,7 @@ width0pt\relax} \fi
 \def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}}
 
 \catcode`\|=\active
-\def|{{\tt \char '174}}
+\def|{{\tt\char124}}
 \chardef \less=`\<
 \catcode`\<=\active
 \def<{{\tt \less}}
@@ -4965,8 +5027,8 @@ width0pt\relax} \fi
 @gdef@fixbackslash{@ifx\@eatinput @let\ = @normalbackslash @fi
   @catcode`+=@active @catcode`@_=@active}
 
-%% These look ok in all fonts, so just make them not special.  The @rm below
-%% makes sure that the current font starts out as the newly loaded cmr10
+% These look ok in all fonts, so just make them not special.  The @rm below
+% makes sure that the current font starts out as the newly loaded cmr10
 @catcode`@$=@other @catcode`@%=@other @catcode`@&=@other @catcode`@#=@other
 
 @textfonts
index 9b447126f81d58db929b7da3109b4a32feb2e40b..6130cada84835e7a56f3b78a7134a1e3e0d34319 100644 (file)
@@ -705,8 +705,8 @@ you must define @code{POINTERS_EXTEND_UNSIGNED}.
 @findex POINTERS_EXTEND_UNSIGNED
 @item POINTERS_EXTEND_UNSIGNED
 A C expression whose value is nonzero if pointers that need to be
-extended from being @code{POINTER_SIZE} bits wide to @code{Pmode}
-are sign-extended and zero if they are zero-extended.
+extended from being @code{POINTER_SIZE} bits wide to @code{Pmode} are to
+be zero-extended and zero if they are to be sign-extended.
 
 You need not define this macro if the @code{POINTER_SIZE} is equal
 to the width of @code{Pmode}.
index 5494db36dce75d817bfcf1af9c790edb5b8bf75d..ef1bbad58544af5e39d04e9c652da7d58b706390 100644 (file)
@@ -3888,14 +3888,12 @@ main (argc, argv, envp)
                    mach_dep_reorg_dump = 1;
 #endif
                    break;
+                 case 'A':
+                   flag_debug_asm = 1;
+                   break;
                  case 'b':
                    branch_prob_dump = 1;
                    break;
-#ifdef STACK_REGS                  
-                 case 'k':
-                   stack_reg_dump = 1;
-                   break;
-#endif
                  case 'c':
                    combine_dump = 1;
                    break;
@@ -3907,18 +3905,23 @@ main (argc, argv, envp)
                  case 'f':
                    flow_dump = 1;
                    break;
+                 case 'F':
+                   addressof_dump = 1;
+                   break;
                  case 'g':
                    global_reg_dump = 1;
                    break;
                  case 'j':
                    jump_opt_dump = 1;
                    break;
-                 case 'D':
-                   addressof_dump = 1;
-                   break;
                  case 'J':
                    jump2_opt_dump = 1;
                    break;
+#ifdef STACK_REGS                  
+                 case 'k':
+                   stack_reg_dump = 1;
+                   break;
+#endif
                  case 'l':
                    local_reg_dump = 1;
                    break;
@@ -3939,30 +3942,27 @@ main (argc, argv, envp)
                  case 'r':
                    rtl_dump = 1;
                    break;
+                 case 'R':
+                   sched2_dump = 1;
+                   break;
                  case 's':
                    cse_dump = 1;
                    break;
+                 case 'S':
+                   sched_dump = 1;
+                   break;
                  case 't':
                    cse2_dump = 1;
                    break;
                  case 'N':
                    regmove_dump = 1;
                    break;
-                 case 'S':
-                   sched_dump = 1;
-                   break;
-                 case 'R':
-                   sched2_dump = 1;
-                   break;
                  case 'y':
                    set_yydebug (1);
                    break;
                  case 'x':
                    rtl_dump_and_exit = 1;
                    break;
-                 case 'A':
-                   flag_debug_asm = 1;
-                   break;
                  default:
                    warning ("unrecognised gcc debugging option: %c", p[-1]);
                    break;
index ff608db5360a84a1323f4cb30908d206c144b8e2..cc68d600b7154588547f446cebbde1ce2a3b8672 100644 (file)
@@ -4428,8 +4428,6 @@ get_unwidened (op, for_type)
      tree for_type;
 {
   /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension.  */
-  /* TYPE_PRECISION is safe in place of type_precision since
-     pointer types are not allowed.  */
   register tree type = TREE_TYPE (op);
   register unsigned final_prec
     = TYPE_PRECISION (for_type != 0 ? for_type : type);
@@ -4595,21 +4593,6 @@ get_narrower (op, unsignedp_ptr)
   return win;
 }
 \f
-/* Return the precision of a type, for arithmetic purposes.
-   Supports all types on which arithmetic is possible
-   (including pointer types).
-   It's not clear yet what will be right for complex types.  */
-
-int
-type_precision (type)
-     register tree type;
-{
-  return ((TREE_CODE (type) == INTEGER_TYPE
-          || TREE_CODE (type) == ENUMERAL_TYPE
-          || TREE_CODE (type) == REAL_TYPE)
-         ? TYPE_PRECISION (type) : POINTER_SIZE);
-}
-
 /* Nonzero if integer constant C has a value that is permissible
    for type TYPE (an INTEGER_TYPE).  */
 
index 3d8d83eaed4118f26d6e0f50f5a941616c5dd9a2..d20bbafcf48fc9927d679dc3c822b7a28a009941 100644 (file)
@@ -1 +1 @@
-char *version_string = "egcs-2.91.26 19980502 (gcc2 ss-980401 experimental)";
+char *version_string = "egcs-2.91.27 19980502 (gcc2 ss-980502 experimental)";