* Check in merge from gcc2. See ChangeLog.12 for details.
From-SVN: r19553
This commit is contained in:
parent
9d1bcb4667
commit
f5963e6170
@ -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
|
||||
|
240
gcc/ChangeLog.12
240
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'.
|
||||
|
@ -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;
|
||||
|
15
gcc/c-decl.c
15
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,
|
||||
|
740
gcc/c-parse.c
740
gcc/c-parse.c
File diff suppressed because it is too large
Load Diff
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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");
|
||||
}
|
||||
|
||||
|
59
gcc/cccp.c
59
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)
|
||||
|
@ -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
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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]))
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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. */
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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)}, \
|
||||
|
@ -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)
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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);
|
||||
|
@ -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 */
|
||||
|
||||
|
179
gcc/configure
vendored
179
gcc/configure
vendored
@ -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
|
||||
|
@ -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
|
||||
|
280
gcc/convert.c
280
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);
|
||||
|
||||
return
|
||||
convert_to_pointer (type,
|
||||
convert (type_for_size (POINTER_SIZE, 0), expr));
|
||||
|
||||
default:
|
||||
error ("cannot convert to a pointer type");
|
||||
return convert_to_pointer (type, integer_zero_node);
|
||||
}
|
||||
|
||||
error ("cannot convert to a pointer type");
|
||||
|
||||
expr = build_int_2 (0, 0);
|
||||
TREE_TYPE (expr) = type;
|
||||
return expr;
|
||||
}
|
||||
|
||||
/* 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));
|
||||
switch (TREE_CODE (TREE_TYPE (expr)))
|
||||
{
|
||||
case REAL_TYPE:
|
||||
return build1 (flag_float_store ? CONVERT_EXPR : NOP_EXPR,
|
||||
type, expr);
|
||||
|
||||
if (form == 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);
|
||||
|
||||
if (INTEGRAL_TYPE_P (TREE_TYPE (expr)))
|
||||
return build1 (FLOAT_EXPR, type, expr);
|
||||
case COMPLEX_TYPE:
|
||||
return convert (type,
|
||||
fold (build1 (REALPART_EXPR,
|
||||
TREE_TYPE (TREE_TYPE (expr)), expr)));
|
||||
|
||||
if (form == 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);
|
||||
|
||||
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;
|
||||
}
|
||||
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);
|
||||
|
||||
case REAL_TYPE:
|
||||
return build1 (FIX_TRUNC_EXPR, type, expr);
|
||||
|
||||
case COMPLEX_TYPE:
|
||||
return convert (type,
|
||||
fold (build1 (REALPART_EXPR,
|
||||
TREE_TYPE (TREE_TYPE (expr)), expr)));
|
||||
|
||||
default:
|
||||
error ("aggregate value used where an integer was expected");
|
||||
return convert (type, integer_zero_node);
|
||||
}
|
||||
|
||||
if (form == 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)));
|
||||
|
||||
error ("aggregate value used where an integer was expected");
|
||||
|
||||
{
|
||||
register tree tem = build_int_2 (0, 0);
|
||||
TREE_TYPE (tem) = type;
|
||||
return tem;
|
||||
}
|
||||
}
|
||||
|
||||
/* 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);
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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. */
|
||||
|
@ -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.
|
||||
|
@ -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);
|
||||
|
10
gcc/dbxout.c
10
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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
145
gcc/expmed.c
145
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));
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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),
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
79
gcc/getopt.c
79
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')
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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}.
|
||||
|
@ -3682,7 +3682,6 @@ label:
|
||||
#endif /* DWARF2_UNWIND_INFO */
|
||||
|
||||
#endif /* L_eh */
|
||||
|
||||
|
||||
#ifdef L_pure
|
||||
#ifndef inhibit_libc
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
407
gcc/real.c
407
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;
|
||||
@ -2984,6 +3006,11 @@ e53toe (pe, y)
|
||||
|
||||
ibmtoe (pe, y, DFmode);
|
||||
|
||||
#else
|
||||
#ifdef C4X
|
||||
|
||||
c4xtoe (pe, y, HFmode);
|
||||
|
||||
#else
|
||||
register unsigned EMUSHORT r;
|
||||
register unsigned EMUSHORT *e, *p;
|
||||
@ -3060,13 +3087,15 @@ e53toe (pe, y)
|
||||
#endif
|
||||
eshift (yy, -5);
|
||||
if (denorm)
|
||||
{ /* if zero exponent, then normalize the significand */
|
||||
{
|
||||
/* If zero exponent, then normalize the significand. */
|
||||
if ((k = enormlz (yy)) > NBITS)
|
||||
ecleazs (yy);
|
||||
else
|
||||
yy[E] -= (unsigned EMUSHORT) (k - 1);
|
||||
}
|
||||
emovo (yy, y);
|
||||
#endif /* not C4X */
|
||||
#endif /* not IBM */
|
||||
#endif /* not DEC */
|
||||
}
|
||||
@ -3289,6 +3318,13 @@ e24toe (pe, y)
|
||||
ibmtoe (pe, y, SFmode);
|
||||
|
||||
#else
|
||||
|
||||
#ifdef C4X
|
||||
|
||||
c4xtoe (pe, y, QFmode);
|
||||
|
||||
#else
|
||||
|
||||
register unsigned EMUSHORT r;
|
||||
register unsigned EMUSHORT *e, *p;
|
||||
unsigned EMUSHORT yy[NI];
|
||||
@ -3370,6 +3406,7 @@ e24toe (pe, y)
|
||||
yy[E] -= (unsigned EMUSHORT) (k - 1);
|
||||
}
|
||||
emovo (yy, y);
|
||||
#endif /* not C4X */
|
||||
#endif /* not IBM */
|
||||
}
|
||||
|
||||
@ -3654,7 +3691,28 @@ toe53 (x, y)
|
||||
toibm (x, y, DFmode);
|
||||
}
|
||||
|
||||
#else /* it's neither DEC nor IBM */
|
||||
#else /* it's neither DEC nor IBM */
|
||||
#ifdef C4X
|
||||
/* Convert e-type X to C4X-format double E. */
|
||||
|
||||
static void
|
||||
etoe53 (x, e)
|
||||
unsigned EMUSHORT *x, *e;
|
||||
{
|
||||
etoc4x (x, e, HFmode);
|
||||
}
|
||||
|
||||
/* Convert exploded e-type X, that has already been rounded to
|
||||
56-bit precision, to IBM 370 double Y. */
|
||||
|
||||
static void
|
||||
toe53 (x, y)
|
||||
unsigned EMUSHORT *x, *y;
|
||||
{
|
||||
toc4x (x, y, HFmode);
|
||||
}
|
||||
|
||||
#else /* it's neither DEC nor IBM nor C4X */
|
||||
|
||||
/* Convert e-type X to IEEE double E. */
|
||||
|
||||
@ -3778,6 +3836,7 @@ toe53 (x, y)
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* not C4X */
|
||||
#endif /* not IBM */
|
||||
#endif /* not DEC */
|
||||
|
||||
@ -3806,6 +3865,29 @@ toe24 (x, y)
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#ifdef C4X
|
||||
/* Convert e-type X to C4X float E. */
|
||||
|
||||
static void
|
||||
etoe24 (x, e)
|
||||
unsigned EMUSHORT *x, *e;
|
||||
{
|
||||
etoc4x (x, e, QFmode);
|
||||
}
|
||||
|
||||
/* Convert exploded e-type X, that has already been rounded to
|
||||
float precision, to IBM 370 float Y. */
|
||||
|
||||
static void
|
||||
toe24 (x, y)
|
||||
unsigned EMUSHORT *x, *y;
|
||||
{
|
||||
toc4x (x, y, QFmode);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
/* Convert e-type X to IEEE float E. DEC float is the same as IEEE float. */
|
||||
|
||||
static void
|
||||
@ -3931,6 +4013,7 @@ toe24 (x, y)
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif /* not C4X */
|
||||
#endif /* not IBM */
|
||||
|
||||
/* Compare two e type numbers.
|
||||
@ -4878,9 +4961,13 @@ asctoe53 (s, y)
|
||||
{
|
||||
#if defined(DEC) || defined(IBM)
|
||||
asctoeg (s, y, 56);
|
||||
#else
|
||||
#if defined(C4X)
|
||||
asctoeg (s, y, 32);
|
||||
#else
|
||||
asctoeg (s, y, 53);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -5188,13 +5275,18 @@ read_expnt:
|
||||
/* Round and convert directly to the destination type */
|
||||
if (oprec == 53)
|
||||
lexp -= EXONE - 0x3ff;
|
||||
#ifdef C4X
|
||||
else if (oprec == 24 || oprec == 32)
|
||||
lexp -= (EXONE - 0x7f);
|
||||
#else
|
||||
#ifdef IBM
|
||||
else if (oprec == 24 || oprec == 56)
|
||||
lexp -= EXONE - (0x41 << 2);
|
||||
#else
|
||||
else if (oprec == 24)
|
||||
lexp -= EXONE - 0177;
|
||||
#endif
|
||||
#endif /* IBM */
|
||||
#endif /* C4X */
|
||||
#ifdef DEC
|
||||
else if (oprec == 56)
|
||||
lexp -= EXONE - 0201;
|
||||
@ -5218,6 +5310,12 @@ read_expnt:
|
||||
toibm (yy, y, DFmode);
|
||||
break;
|
||||
#endif
|
||||
#ifdef C4X
|
||||
case 32:
|
||||
toc4x (yy, y, HFmode);
|
||||
break;
|
||||
#endif
|
||||
|
||||
case 53:
|
||||
toe53 (yy, y);
|
||||
break;
|
||||
@ -5709,6 +5807,254 @@ toibm (x, y, mode)
|
||||
}
|
||||
#endif /* IBM */
|
||||
|
||||
|
||||
#ifdef C4X
|
||||
/* Convert C4X single/double precision to e type. */
|
||||
|
||||
static void
|
||||
c4xtoe (d, e, mode)
|
||||
unsigned EMUSHORT *d;
|
||||
unsigned EMUSHORT *e;
|
||||
enum machine_mode mode;
|
||||
{
|
||||
unsigned EMUSHORT y[NI];
|
||||
int r;
|
||||
int rndsav;
|
||||
int isnegative;
|
||||
int size;
|
||||
int i;
|
||||
int carry;
|
||||
|
||||
/* Short-circuit the zero case. */
|
||||
if ((d[0] == 0x8000)
|
||||
&& (d[1] == 0x0000)
|
||||
&& ((mode == QFmode) || ((d[2] == 0x0000) && (d[3] == 0x0000))))
|
||||
{
|
||||
e[0] = 0;
|
||||
e[1] = 0;
|
||||
e[2] = 0;
|
||||
e[3] = 0;
|
||||
e[4] = 0;
|
||||
e[5] = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
ecleaz (y); /* start with a zero */
|
||||
r = d[0]; /* get sign/exponent part */
|
||||
if (r & (unsigned int) 0x0080)
|
||||
{
|
||||
y[0] = 0xffff; /* fill in our sign */
|
||||
isnegative = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
isnegative = FALSE;
|
||||
}
|
||||
|
||||
r >>= 8; /* Shift exponent word down 8 bits. */
|
||||
if (r & 0x80) /* Make the exponent negative if it is. */
|
||||
{
|
||||
r = r | (~0 & ~0xff);
|
||||
}
|
||||
|
||||
if (isnegative)
|
||||
{
|
||||
/* Now do the high order mantissa. We don't "or" on the high bit
|
||||
because it is 2 (not 1) and is handled a little differently
|
||||
below. */
|
||||
y[M] = d[0] & 0x7f;
|
||||
|
||||
y[M+1] = d[1];
|
||||
if (mode != QFmode) /* There are only 2 words in QFmode. */
|
||||
{
|
||||
y[M+2] = d[2]; /* Fill in the rest of our mantissa. */
|
||||
y[M+3] = d[3];
|
||||
size = 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
size = 2;
|
||||
}
|
||||
eshift(y, -8);
|
||||
|
||||
/* Now do the two's complement on the data. */
|
||||
|
||||
carry = 1; /* Initially add 1 for the two's complement. */
|
||||
for (i=size + M; i > M; i--)
|
||||
{
|
||||
if (carry && (y[i] == 0x0000))
|
||||
{
|
||||
/* We overflowed into the next word, carry is the same. */
|
||||
y[i] = carry ? 0x0000 : 0xffff;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* No overflow, just invert and add carry. */
|
||||
y[i] = ((~y[i]) + carry) & 0xffff;
|
||||
carry = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (carry)
|
||||
{
|
||||
eshift(y, -1);
|
||||
y[M+1] |= 0x8000;
|
||||
r++;
|
||||
}
|
||||
y[1] = r + EXONE;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Add our e type exponent offset to form our exponent. */
|
||||
r += EXONE;
|
||||
y[1] = r;
|
||||
|
||||
/* Now do the high order mantissa strip off the exponent and sign
|
||||
bits and add the high 1 bit. */
|
||||
y[M] = d[0] & 0x7f | 0x80;
|
||||
|
||||
y[M+1] = d[1];
|
||||
if (mode != QFmode) /* There are only 2 words in QFmode. */
|
||||
{
|
||||
y[M+2] = d[2]; /* Fill in the rest of our mantissa. */
|
||||
y[M+3] = d[3];
|
||||
}
|
||||
eshift(y, -8);
|
||||
}
|
||||
|
||||
emovo (y, e);
|
||||
}
|
||||
|
||||
|
||||
/* Convert e type to C4X single/double precision. */
|
||||
|
||||
static void
|
||||
etoc4x (x, d, mode)
|
||||
unsigned EMUSHORT *x, *d;
|
||||
enum machine_mode mode;
|
||||
{
|
||||
unsigned EMUSHORT xi[NI];
|
||||
EMULONG exp;
|
||||
int rndsav;
|
||||
|
||||
emovi (x, xi);
|
||||
|
||||
/* Adjust exponent for offsets. */
|
||||
exp = (EMULONG) xi[E] - (EXONE - 0x7f);
|
||||
|
||||
/* Round off to nearest or even. */
|
||||
rndsav = rndprc;
|
||||
rndprc = mode == QFmode ? 24 : 32;
|
||||
emdnorm (xi, 0, 0, exp, 64);
|
||||
rndprc = rndsav;
|
||||
toc4x (xi, d, mode);
|
||||
}
|
||||
|
||||
static void
|
||||
toc4x (x, y, mode)
|
||||
unsigned EMUSHORT *x, *y;
|
||||
enum machine_mode mode;
|
||||
{
|
||||
int i;
|
||||
int r;
|
||||
int v;
|
||||
int carry;
|
||||
|
||||
/* Short-circuit the zero case */
|
||||
if ((x[0] == 0) /* Zero exponent and sign */
|
||||
&& (x[1] == 0)
|
||||
&& (x[M] == 0) /* The rest is for zero mantissa */
|
||||
&& (x[M+1] == 0)
|
||||
/* Only check for double if necessary */
|
||||
&& ((mode == QFmode) || ((x[M+2] == 0) && (x[M+3] == 0))))
|
||||
{
|
||||
/* We have a zero. Put it into the output and return. */
|
||||
*y++ = 0x8000;
|
||||
*y++ = 0x0000;
|
||||
if (mode != QFmode)
|
||||
{
|
||||
*y++ = 0x0000;
|
||||
*y++ = 0x0000;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
*y = 0;
|
||||
|
||||
/* Negative number require a two's complement conversion of the
|
||||
mantissa. */
|
||||
if (x[0])
|
||||
{
|
||||
*y = 0x0080;
|
||||
|
||||
i = ((int) x[1]) - 0x7f;
|
||||
|
||||
/* Now add 1 to the inverted data to do the two's complement. */
|
||||
if (mode != QFmode)
|
||||
v = 4 + M;
|
||||
else
|
||||
v = 2 + M;
|
||||
carry = 1;
|
||||
while (v > M)
|
||||
{
|
||||
if (x[v] == 0x0000)
|
||||
{
|
||||
x[v] = carry ? 0x0000 : 0xffff;
|
||||
}
|
||||
else
|
||||
{
|
||||
x[v] = ((~x[v]) + carry) & 0xffff;
|
||||
carry = 0;
|
||||
}
|
||||
v--;
|
||||
}
|
||||
|
||||
/* The following is a special case. The C4X negative float requires
|
||||
a zero in the high bit (because the format is (2 - x) x 2^m), so
|
||||
if a one is in that bit, we have to shift left one to get rid
|
||||
of it. This only occurs if the number is -1 x 2^m. */
|
||||
if (x[M+1] & 0x8000)
|
||||
{
|
||||
/* This is the case of -1 x 2^m, we have to rid ourselves of the
|
||||
high sign bit and shift the exponent. */
|
||||
eshift(x, 1);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
i = ((int) x[1]) - 0x7f;
|
||||
}
|
||||
|
||||
if ((i < -128) || (i > 127))
|
||||
{
|
||||
y[0] |= 0xff7f;
|
||||
y[1] = 0xffff;
|
||||
if (mode != QFmode)
|
||||
{
|
||||
y[2] = 0xffff;
|
||||
y[3] = 0xffff;
|
||||
}
|
||||
#ifdef ERANGE
|
||||
errno = ERANGE;
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
y[0] |= ((i & 0xff) << 8);
|
||||
|
||||
eshift (x, 8);
|
||||
|
||||
y[0] |= x[M] & 0x7f;
|
||||
y[1] = x[M + 1];
|
||||
if (mode != QFmode)
|
||||
{
|
||||
y[2] = x[M + 2];
|
||||
y[3] = x[M + 3];
|
||||
}
|
||||
}
|
||||
#endif /* C4X */
|
||||
|
||||
/* Output a binary NaN bit pattern in the target machine's format. */
|
||||
|
||||
/* If special NaN bit patterns are required, define them in tm.h
|
||||
@ -5766,7 +6112,7 @@ make_nan (nan, sign, mode)
|
||||
{
|
||||
/* Possibly the `reserved operand' patterns on a VAX can be
|
||||
used like NaN's, but probably not in the same way as IEEE. */
|
||||
#if !defined(DEC) && !defined(IBM)
|
||||
#if !defined(DEC) && !defined(IBM) && !defined(C4X)
|
||||
case TFmode:
|
||||
n = 8;
|
||||
if (REAL_WORDS_BIG_ENDIAN)
|
||||
@ -5774,6 +6120,7 @@ make_nan (nan, sign, mode)
|
||||
else
|
||||
p = TFlittlenan;
|
||||
break;
|
||||
|
||||
case XFmode:
|
||||
n = 6;
|
||||
if (REAL_WORDS_BIG_ENDIAN)
|
||||
@ -5781,6 +6128,7 @@ make_nan (nan, sign, mode)
|
||||
else
|
||||
p = XFlittlenan;
|
||||
break;
|
||||
|
||||
case DFmode:
|
||||
n = 4;
|
||||
if (REAL_WORDS_BIG_ENDIAN)
|
||||
@ -5788,8 +6136,9 @@ make_nan (nan, sign, mode)
|
||||
else
|
||||
p = DFlittlenan;
|
||||
break;
|
||||
case HFmode:
|
||||
|
||||
case SFmode:
|
||||
case HFmode:
|
||||
n = 2;
|
||||
if (REAL_WORDS_BIG_ENDIAN)
|
||||
p = SFbignan;
|
||||
@ -5797,6 +6146,7 @@ make_nan (nan, sign, mode)
|
||||
p = SFlittlenan;
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
abort ();
|
||||
}
|
||||
@ -6349,6 +6699,11 @@ significand_size (mode)
|
||||
switch (GET_MODE_BITSIZE (mode))
|
||||
{
|
||||
case 32:
|
||||
|
||||
#if TARGET_FLOAT_FORMAT == C4X_FLOAT_FORMAT
|
||||
return 56;
|
||||
#endif
|
||||
|
||||
return 24;
|
||||
|
||||
case 64:
|
||||
@ -6360,10 +6715,14 @@ switch (GET_MODE_BITSIZE (mode))
|
||||
#else
|
||||
#if TARGET_FLOAT_FORMAT == VAX_FLOAT_FORMAT
|
||||
return 56;
|
||||
#else
|
||||
#if TARGET_FLOAT_FORMAT == C4X_FLOAT_FORMAT
|
||||
return 56;
|
||||
#else
|
||||
abort ();
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
case 96:
|
||||
|
@ -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. */
|
||||
|
||||
|
71
gcc/reload.c
71
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]);
|
||||
|
||||
|
@ -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];
|
||||
|
@ -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;
|
||||
{
|
||||
|
@ -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. */
|
||||
|
||||
|
230
gcc/texinfo.tex
230
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
|
||||
|
@ -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}.
|
||||
|
34
gcc/toplev.c
34
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;
|
||||
|
17
gcc/tree.c
17
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). */
|
||||
|
||||
|
@ -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)";
|
||||
|
Loading…
Reference in New Issue
Block a user