aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1998-05-05 17:18:02 -0600
committerJeff Law <law@gcc.gnu.org>1998-05-05 17:18:02 -0600
commitf5963e617044e79f7658c82ebc9acdccdc56d57b (patch)
tree017db6c8be411c52ab98093e94dcce3c7ca3f029
parent9d1bcb4667cf94ae02b3b3015694a55175be9c9f (diff)
downloadgcc-f5963e617044e79f7658c82ebc9acdccdc56d57b.zip
gcc-f5963e617044e79f7658c82ebc9acdccdc56d57b.tar.gz
gcc-f5963e617044e79f7658c82ebc9acdccdc56d57b.tar.bz2
* Check in merge from gcc2. See ChangeLog.12 for details.
From-SVN: r19553
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/ChangeLog.12240
-rw-r--r--gcc/c-common.c26
-rw-r--r--gcc/c-decl.c15
-rw-r--r--gcc/c-parse.c740
-rw-r--r--gcc/c-parse.in10
-rw-r--r--gcc/c-parse.y10
-rw-r--r--gcc/c-typeck.c15
-rw-r--r--gcc/cccp.c59
-rw-r--r--gcc/config.in9
-rw-r--r--gcc/config/1750a/1750a.h2
-rw-r--r--gcc/config/a29k/a29k.h2
-rw-r--r--gcc/config/alpha/xm-vms.h1
-rw-r--r--gcc/config/arc/arc.h2
-rw-r--r--gcc/config/dsp16xx/dsp16xx.h2
-rw-r--r--gcc/config/i386/i386.c17
-rw-r--r--gcc/config/i386/xm-cygwin32.h1
-rw-r--r--gcc/config/i386/xm-mingw32.h2
-rw-r--r--gcc/config/m32r/m32r.h2
-rw-r--r--gcc/config/m68k/m68k.c10
-rw-r--r--gcc/config/m68k/m68k.h2
-rw-r--r--gcc/config/m88k/m88k.h2
-rw-r--r--gcc/config/mips/mips.c1726
-rw-r--r--gcc/config/mips/mips.h30
-rw-r--r--gcc/config/mips/xm-mips.h7
-rw-r--r--gcc/config/pa/pa.md5
-rw-r--r--gcc/config/vax/vax.md16
-rw-r--r--gcc/config/vax/xm-vms.h3
-rwxr-xr-xgcc/configure179
-rw-r--r--gcc/configure.in29
-rw-r--r--gcc/convert.c282
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/cvt.c4
-rw-r--r--gcc/cp/typeck.c2
-rw-r--r--gcc/cpplib.c4
-rw-r--r--gcc/dbxout.c10
-rw-r--r--gcc/dwarf2out.c16
-rw-r--r--gcc/expmed.c145
-rw-r--r--gcc/expr.c4
-rw-r--r--gcc/expr.h4
-rw-r--r--gcc/final.c6
-rwxr-xr-xgcc/fixincludes75
-rw-r--r--gcc/fold-const.c62
-rw-r--r--gcc/function.c36
-rw-r--r--gcc/gcc.texi6
-rw-r--r--gcc/getopt.c79
-rw-r--r--gcc/getopt.h2
-rw-r--r--gcc/getopt1.c9
-rw-r--r--gcc/install.texi2
-rw-r--r--gcc/invoke.texi24
-rw-r--r--gcc/libgcc2.c1
-rw-r--r--gcc/loop.c5
-rw-r--r--gcc/md.texi6
-rw-r--r--gcc/objc/objc-parse.c1002
-rw-r--r--gcc/objc/objc-parse.y10
-rw-r--r--gcc/obstack.c2
-rw-r--r--gcc/obstack.h2
-rw-r--r--gcc/real.c407
-rw-r--r--gcc/real.h1
-rw-r--r--gcc/reload.c71
-rw-r--r--gcc/reload.h3
-rw-r--r--gcc/reload1.c56
-rw-r--r--gcc/stmt.c5
-rw-r--r--gcc/texinfo.tex230
-rw-r--r--gcc/tm.texi4
-rw-r--r--gcc/toplev.c34
-rw-r--r--gcc/tree.c17
-rw-r--r--gcc/version.c2
68 files changed, 3362 insertions, 2440 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fb3651c..8cabe0c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/ChangeLog.12 b/gcc/ChangeLog.12
index a87955e..ecb2919 100644
--- a/gcc/ChangeLog.12
+++ b/gcc/ChangeLog.12
@@ -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'.
diff --git a/gcc/c-common.c b/gcc/c-common.c
index 8857141..e5ef980 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -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;
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index 2b48415..125aa01 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -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,
diff --git a/gcc/c-parse.c b/gcc/c-parse.c
index 8777295..2db1a04 100644
--- a/gcc/c-parse.c
+++ b/gcc/c-parse.c
@@ -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
-#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"
yyvsp -= yylen;
yyssp -= yylen;
@@ -3840,5 +3846,5 @@ yyerrhandle:
yystate = yyn;
goto yynewstate;
}
-#line 2182 "c-parse.y"
+#line 2181 "c-parse.y"
diff --git a/gcc/c-parse.in b/gcc/c-parse.in
index fbfa994..b3b4dc2 100644
--- a/gcc/c-parse.in
+++ b/gcc/c-parse.in
@@ -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)
diff --git a/gcc/c-parse.y b/gcc/c-parse.y
index aba326d..4f0b1af 100644
--- a/gcc/c-parse.y
+++ b/gcc/c-parse.y
@@ -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)
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index 2dc4693..69e8e92 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -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");
}
diff --git a/gcc/cccp.c b/gcc/cccp.c
index ebb42fb..ed4d5c6 100644
--- a/gcc/cccp.c
+++ b/gcc/cccp.c
@@ -933,6 +933,7 @@ static int ignore_srcdir;
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);
+}
+
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)
diff --git a/gcc/config.in b/gcc/config.in
index bf2d02f..06879eb 100644
--- a/gcc/config.in
+++ b/gcc/config.in
@@ -92,12 +92,12 @@
/* 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
@@ -119,6 +119,9 @@
/* 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
diff --git a/gcc/config/1750a/1750a.h b/gcc/config/1750a/1750a.h
index 6c5e9e3..e49f694 100644
--- a/gcc/config/1750a/1750a.h
+++ b/gcc/config/1750a/1750a.h
@@ -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.
diff --git a/gcc/config/a29k/a29k.h b/gcc/config/a29k/a29k.h
index d65beb4..c3e6174 100644
--- a/gcc/config/a29k/a29k.h
+++ b/gcc/config/a29k/a29k.h
@@ -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.
diff --git a/gcc/config/alpha/xm-vms.h b/gcc/config/alpha/xm-vms.h
index 5e5a442..472a225 100644
--- a/gcc/config/alpha/xm-vms.h
+++ b/gcc/config/alpha/xm-vms.h
@@ -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
diff --git a/gcc/config/arc/arc.h b/gcc/config/arc/arc.h
index c4696ea..0ddc91a 100644
--- a/gcc/config/arc/arc.h
+++ b/gcc/config/arc/arc.h
@@ -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.
diff --git a/gcc/config/dsp16xx/dsp16xx.h b/gcc/config/dsp16xx/dsp16xx.h
index 61e6bf8..ee4b140 100644
--- a/gcc/config/dsp16xx/dsp16xx.h
+++ b/gcc/config/dsp16xx/dsp16xx.h
@@ -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)
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 73ca40c..b1b8ab8 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -1,5 +1,5 @@
/* Subroutines for insn-output.c for Intel X86.
- Copyright (C) 1988, 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]))
{
diff --git a/gcc/config/i386/xm-cygwin32.h b/gcc/config/i386/xm-cygwin32.h
index be64ddc..521a653 100644
--- a/gcc/config/i386/xm-cygwin32.h
+++ b/gcc/config/i386/xm-cygwin32.h
@@ -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
diff --git a/gcc/config/i386/xm-mingw32.h b/gcc/config/i386/xm-mingw32.h
index 38c9b6d..d818142 100644
--- a/gcc/config/i386/xm-mingw32.h
+++ b/gcc/config/i386/xm-mingw32.h
@@ -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
diff --git a/gcc/config/m32r/m32r.h b/gcc/config/m32r/m32r.h
index 199f386..e5dfc20 100644
--- a/gcc/config/m32r/m32r.h
+++ b/gcc/config/m32r/m32r.h
@@ -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. */
diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c
index 567ccdf..164cf6b 100644
--- a/gcc/config/m68k/m68k.c
+++ b/gcc/config/m68k/m68k.c
@@ -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;
diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h
index fb64de6..623e3ce 100644
--- a/gcc/config/m68k/m68k.h
+++ b/gcc/config/m68k/m68k.h
@@ -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)}, \
diff --git a/gcc/config/m88k/m88k.h b/gcc/config/m88k/m88k.h
index f0dac24..a687641 100644
--- a/gcc/config/m88k/m88k.h
+++ b/gcc/config/m88k/m88k.h
@@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler for
Motorola m88100 in an 88open OCS/BCS environment.
- Copyright (C) 1988, 92, 93, 94, 95, 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)
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 2899d6d..89c214c 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -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)
}
-/* 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)
}
-/* 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;
}
-
/* 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)
/* 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;
}
-
/* 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])));
}
-/* 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));
}
@@ -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
}
-
/* 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);
}
-
/* 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 "";
}
-
/* 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);
}
-
/* 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 ()
}
-/*
- * 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;
}
-
/* 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);
}
-
/* 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;
}
}
-/* 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
-
/* 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;
}
-
/* 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)
}
}
}
-
/* 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);
}
}
-
-/* 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++;
}
-
/* 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);
}
-
-/* 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)
}
}
-
-/* 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;
}
}
-
/* 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
}
-
/* 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;
}
-
/* 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;
+ }
}
}
-
/* 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);
}
}
-
/* 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 ());
}
-
-/* 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;
}
-
/* 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)));
}
-
-/* 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;
}
/* 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)
}
#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
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index 57e6f48..29f7c78 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -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
diff --git a/gcc/config/mips/xm-mips.h b/gcc/config/mips/xm-mips.h
index e10f78e..ad49d7f 100644
--- a/gcc/config/mips/xm-mips.h
+++ b/gcc/config/mips/xm-mips.h
@@ -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
diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md
index ddaf34b..f1fb4bc 100644
--- a/gcc/config/pa/pa.md
+++ b/gcc/config/pa/pa.md
@@ -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.
@@ -4038,7 +4038,8 @@
(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"
diff --git a/gcc/config/vax/vax.md b/gcc/config/vax/vax.md
index 25ca7bc..4ca4668 100644
--- a/gcc/config/vax/vax.md
+++ b/gcc/config/vax/vax.md
@@ -1842,12 +1842,12 @@
;; 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);
@@ -1857,12 +1857,12 @@
(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);
@@ -1873,11 +1873,11 @@
;; 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);
@@ -1887,11 +1887,11 @@
(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);
diff --git a/gcc/config/vax/xm-vms.h b/gcc/config/vax/xm-vms.h
index 104f5fe..5d01aeb 100644
--- a/gcc/config/vax/xm-vms.h
+++ b/gcc/config/vax/xm-vms.h
@@ -134,10 +134,11 @@ Boston, MA 02111-1307, USA. */
#define HAVE_VPRINTF
#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 */
diff --git a/gcc/configure b/gcc/configure
index b0c48f6..bbf2f23 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -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
diff --git a/gcc/configure.in b/gcc/configure.in
index 8bae468..a0befb6 100644
--- a/gcc/configure.in
+++ b/gcc/configure.in
@@ -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
diff --git a/gcc/convert.c b/gcc/convert.c
index 744490f..8bfe462 100644
--- a/gcc/convert.c
+++ b/gcc/convert.c
@@ -1,5 +1,5 @@
/* Utility routines for data type conversion for GNU C.
- Copyright (C) 1987, 88, 91, 92, 94, 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);
+ }
}
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 7e6d420..eb5c261 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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
diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c
index 92dce8b..836b8ad 100644
--- a/gcc/cp/cvt.c
+++ b/gcc/cp/cvt.c
@@ -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. */
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 361a559..183837c 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -1,5 +1,5 @@
/* Build expressions with type checking for C++ compiler.
- Copyright (C) 1987, 88, 89, 92-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.
diff --git a/gcc/cpplib.c b/gcc/cpplib.c
index bd68911..3d1fd92 100644
--- a/gcc/cpplib.c
+++ b/gcc/cpplib.c
@@ -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);
diff --git a/gcc/dbxout.c b/gcc/dbxout.c
index cb0220c..eed81f5 100644
--- a/gcc/dbxout.c
+++ b/gcc/dbxout.c
@@ -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
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index e8ba8e3..ab2fab7 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -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);
}
diff --git a/gcc/expmed.c b/gcc/expmed.c
index 6e01c92..70c0044 100644
--- a/gcc/expmed.c
+++ b/gcc/expmed.c
@@ -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;
}
+
+/* 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));
+ }
+}
diff --git a/gcc/expr.c b/gcc/expr.c
index 8b8e513..16310e6 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -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;
diff --git a/gcc/expr.h b/gcc/expr.h
index b19c170..963a014 100644
--- a/gcc/expr.h
+++ b/gcc/expr.h
@@ -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;
#ifdef TREE_CODE /* Don't lose if tree.h not included. */
/* Structure to record the size of a sequence of arguments
diff --git a/gcc/final.c b/gcc/final.c
index 37dc89d..2647bbe 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -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,
diff --git a/gcc/fixincludes b/gcc/fixincludes
index 8400c6f..b795a94 100755
--- a/gcc/fixincludes
+++ b/gcc/fixincludes
@@ -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
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 05fa7fea..c36f378 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -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),
diff --git a/gcc/function.c b/gcc/function.c
index d747ce6..44cee08 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -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;
/* 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;
diff --git a/gcc/gcc.texi b/gcc/gcc.texi
index da2804d..e0584aa 100644
--- a/gcc/gcc.texi
+++ b/gcc/gcc.texi
@@ -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
diff --git a/gcc/getopt.c b/gcc/getopt.c
index f6f505c..a9a101f 100644
--- a/gcc/getopt.c
+++ b/gcc/getopt.c
@@ -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
@@ -27,19 +27,19 @@
/* 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>
@@ -53,11 +53,11 @@
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
@@ -68,26 +68,26 @@
#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')
diff --git a/gcc/getopt.h b/gcc/getopt.h
index c4adc30..fb30719a 100644
--- a/gcc/getopt.h
+++ b/gcc/getopt.h
@@ -2,7 +2,7 @@
Copyright (C) 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C Library.
- Bugs can be reported to bug-glibc@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
diff --git a/gcc/getopt1.c b/gcc/getopt1.c
index af8e681..ff25737 100644
--- a/gcc/getopt1.c
+++ b/gcc/getopt1.c
@@ -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
diff --git a/gcc/install.texi b/gcc/install.texi
index ed9669e..dc48c42 100644
--- a/gcc/install.texi
+++ b/gcc/install.texi
@@ -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
diff --git a/gcc/invoke.texi b/gcc/invoke.texi
index dc293d7..894ffe7 100644
--- a/gcc/invoke.texi
+++ b/gcc/invoke.texi
@@ -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}.
diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c
index a1525ba..8a913de 100644
--- a/gcc/libgcc2.c
+++ b/gcc/libgcc2.c
@@ -3682,7 +3682,6 @@ label:
#endif /* DWARF2_UNWIND_INFO */
#endif /* L_eh */
-
#ifdef L_pure
#ifndef inhibit_libc
diff --git a/gcc/loop.c b/gcc/loop.c
index 70ecfa8..51e554d 100644
--- a/gcc/loop.c
+++ b/gcc/loop.c
@@ -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
diff --git a/gcc/md.texi b/gcc/md.texi
index 22c3507..2fcff2f 100644
--- a/gcc/md.texi
+++ b/gcc/md.texi
@@ -1,4 +1,4 @@
-@c Copyright (C) 1988,89,92,93,94,96 Free Software Foundation, Inc.
+@c Copyright (C) 1988, 89, 92, 93, 94, 96, 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
diff --git a/gcc/objc/objc-parse.c b/gcc/objc/objc-parse.c
index abb9099..6d76eef 100644
--- a/gcc/objc/objc-parse.c
+++ b/gcc/objc/objc-parse.c
@@ -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
-#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"
yyvsp -= yylen;
yyssp -= yylen;
@@ -5100,5 +5106,5 @@ yyerrhandle:
yystate = yyn;
goto yynewstate;
}
-#line 2952 "objc-parse.y"
+#line 2951 "objc-parse.y"
diff --git a/gcc/objc/objc-parse.y b/gcc/objc/objc-parse.y
index c216d43..0d93c46 100644
--- a/gcc/objc/objc-parse.y
+++ b/gcc/objc/objc-parse.y
@@ -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)
diff --git a/gcc/obstack.c b/gcc/obstack.c
index e5b5d4f..bc318b3 100644
--- a/gcc/obstack.c
+++ b/gcc/obstack.c
@@ -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
diff --git a/gcc/obstack.h b/gcc/obstack.h
index 144998c..38e9677 100644
--- a/gcc/obstack.h
+++ b/gcc/obstack.h
@@ -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
diff --git a/gcc/real.c b/gcc/real.c
index 29dcfcd..713c0be 100644
--- a/gcc/real.c
+++ b/gcc/real.c
@@ -1,6 +1,6 @@
/* real.c - implementation of REAL_ARITHMETIC, REAL_VALUE_ATOF,
and support for XFmode IEEE extended real floating point arithmetic.
- Copyright (C) 1993, 1994, 1995, 1996, 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;
@@ -2985,6 +3007,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;
unsigned EMUSHORT yy[NI];
@@ -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.
@@ -4879,8 +4962,12 @@ 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:
@@ -6361,10 +6716,14 @@ switch (GET_MODE_BITSIZE (mode))
#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:
return 64;
diff --git a/gcc/real.h b/gcc/real.h
index a91061e..848ef18 100644
--- a/gcc/real.h
+++ b/gcc/real.h
@@ -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. */
diff --git a/gcc/reload.c b/gcc/reload.c
index 5f02f2c..8093697 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -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]);
diff --git a/gcc/reload.h b/gcc/reload.h
index 79f5882..3ca2e98 100644
--- a/gcc/reload.h
+++ b/gcc/reload.h
@@ -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];
diff --git a/gcc/reload1.c b/gcc/reload1.c
index c8fb2ef..c9ebee9 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -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;
{
diff --git a/gcc/stmt.c b/gcc/stmt.c
index 19f3e37..58c292e 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -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;
/* Functions and data structures for expanding case statements. */
diff --git a/gcc/texinfo.tex b/gcc/texinfo.tex
index 7aef13a..44ea22c 100644
--- a/gcc/texinfo.tex
+++ b/gcc/texinfo.tex
@@ -25,8 +25,12 @@
%
% 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,
@@ -35,6 +39,18 @@
% 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:
@@ -70,17 +86,9 @@
\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,}
@@ -90,18 +98,20 @@
% 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.
%
@@ -393,7 +403,7 @@
% @@ 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.
@@ -403,8 +413,8 @@
%\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
@@ -441,6 +451,18 @@
\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
diff --git a/gcc/tm.texi b/gcc/tm.texi
index 9b44712..6130cad 100644
--- a/gcc/tm.texi
+++ b/gcc/tm.texi
@@ -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}.
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 5494db3..ef1bbad 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -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;
diff --git a/gcc/tree.c b/gcc/tree.c
index ff608db..cc68d60 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -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;
}
-/* 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). */
diff --git a/gcc/version.c b/gcc/version.c
index 3d8d83e..d20bbaf 100644
--- a/gcc/version.c
+++ b/gcc/version.c
@@ -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)";