* Check in merge from gcc2. See ChangeLog.12 for details.

From-SVN: r19553
This commit is contained in:
Jeff Law 1998-05-05 17:18:02 -06:00
parent 9d1bcb4667
commit f5963e6170
68 changed files with 3354 additions and 2432 deletions

View File

@ -1,3 +1,7 @@
Wed May 6 00:09:36 1998 Jeffrey A Law (law@cygnus.com)
* Check in merge from gcc2. See ChangeLog.12 for details.
Tue May 5 14:33:49 1998 Jim Wilson <wilson@cygnus.com>
* c-common.c (scan_char_table): Separate 's' and 'c'. 'c' does not

View File

@ -1,5 +1,234 @@
Sat May 2 20:39:22 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* fold-const.c (fold): When commutting COND_EXPR and binary operation,
avoid quadratic behavior if have nested COND_EXPRs.
Tue Apr 28 17:30:05 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* mips.h (HOST_WIDE_INT): Define if not already.
(compute_frame_size, mips_debugger_offset): Return HOST_WIDE_INT.
(DEBUGGER_{AUTO,ARG}_OFFSET): Cast second arg to HOST_WIDE_INT.
* /mips.c (mips_debugger_offset): Now returns HOST_WIDE_INT.
Likewise for internal variable frame_size.
* final.c (alter_subreg): Make new SUBREG if reload replacement
scheduled inside it.
* dwarf2out.c (add_bound_info, case SAVE_EXPR): Pass
SAVE_EXPR_RTL address through fix_lexical_addr.
Mon Apr 27 18:57:18 1998 Jim Wilson <wilson@cygnus.com>
* mips/sni-svr4.h (CPP_PREDEFINES): Add -Dsinix and -DSNI.
Mon Apr 20 14:48:29 1998 Michael Meissner <meissner@cygnus.com>
* rs6000.md (mov{sf,df} define_splits): When splitting move of
constant to int reg, don't split insns that do simple AND and OR
operations; just split each word and let normal movsi define split
handle it further.
Sun Apr 19 20:21:19 1998 Michael P. Hayes <michaelh@ongaonga.chch.cri.nz>
* real.h (C4X_FLOAT_FORMAT): New macro.
* real.c (c4xtoe, etoc4x, toc4x): New functions.
Sun Apr 19 20:17:32 1998 Niklas Hallqvist <niklas@petra.appli.se>
* m68k.c (notice_update_cc): Use modified_in_p to check for update.
Sun Apr 19 18:48:07 1998 K. Richard Pixley <rich@kyoto.noir.com>
* fixincludes: Discard empty C++ comments.
Special case more files with C++ comments nested in C comments.
Sun Apr 19 18:30:11 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* m68k.md ({add,sub}di3): Optimize for constant operand.
Sun Apr 19 18:27:11 1998 Alan Modra <alan@spri.levels.unisa.edu.au>
* i386.c (output_387_binary_op): Swap operands when popping if result
is st(0).
Sun Apr 19 17:58:01 1998 Peter Jeremy <peter.jeremy@alcatel.com.au>
* expr.c (do_jump_by_parts_equality_rtx): Now public.
* expmed.c (do_cmp_and_jump): New function.
(expand_divmod): Use do_cmp_and_jmp instead of emit_cmp_insn and
emit_jump_insn.
Sun Apr 19 07:48:37 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* c-typeck.c (build_c_cast): Check underlying type when seeing
if discarding const or volatile.
* c-decl.c (pushdecl): Avoid duplicate warning about implicit redecl.
* configure.in (stab.h): Check for it.
(i386-*-vsta): Include xm-i386.h too.
* dbxout.c (stab.h): Include based on autoconf results.
* vax/xm-vms.h (NO_STAB_H): Deleted.
* alpha/xm-vms.h, xm-mips.h, i386/xm-mingw32.h, i386/go32.h: Likewise.
* i386/xm-cygwin32.h: Likewise.
* i386/xm-vsta.h (NO_STAB_H): Likewise.
(i386/xm-i386.h): No longer include.
* mips.c: Cleanups and reformatting throughout.
({expand,output}_block_move): Use HOST_WIDE_INT for sizes.
(mips_debugger_offset, compute_frame_size): Likewise.
(save_restore_insns, mips_expand_{pro,epi}logue): Likewise.
(siginfo): Deleted.
(override_options): Don't set up to call it; don't call setvbuf.
Mon Apr 13 06:40:17 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* configure.in (sparc-*-vxsim*): Include xm-siglist.h and
define USG and POSIX.
Sun Apr 12 21:59:27 1998 Jeffrey A. Law <law@cygnus.com>
* calls.c (expand_call): Fix typo in STRICT_ARGUMENT_NAMING.
Sun Apr 12 21:42:23 1998 D. Karthikeyan <karthik@cdotd.ernet.in>
* m68k.h (TARGET_SWITCHES): Add missing comma.
Sun Apr 12 21:33:33 1998 Eric Valette <valette@crf.canon.fr>
* configure.in (i[34567]86-*-rtemself*): New configuration.
* i386/rtemself.h: New file.
Sun Apr 12 21:08:28 1998 Jim Wilson <wilson@cygnus.com>
* loop.c (loop_optimize): Reset max_uid_for_loop after
find_and_verify_loops call.
(strength_reduce): In auto_inc_opt code, verify v->insn has valid
INSN_LUID.
Sun Apr 12 20:54:59 1998 Richard Earnshaw (rearnsha@arm.com)
* configure.in (sparc-*-solaris2*): Add xm-siglist.h to xm_file.
Add USG and POSIX to xm_defines.
Sun Apr 12 20:47:37 1998 Pat Rankin <rankin@eql.caltech.edu>
* cccp.c (eprint_string): New function.
(do_elif, do_else, verror): Use it instead of fwrite(,,,stderr).
(error_from_errno, vwarning): Likewise.
({verror,vwarning,pedwarn}_with_line): Likewise.
(pedwarn_with_file_and_line, print_containing_files): Likewise.
Sun Apr 12 20:40:44 1998 Richard Henderson <rth@dot.cygnus.com>
* configure.in (alpha*-*-linux-gnu*): Add alpha/t-crtbe.
Add crt{begin,end}.o in extra_parts and delete crt{begin,end}S.o.o
* alpha/t-crtbe, alpha/crt{begin,end}.asm: New files.
* alpha.h (PRINT_OPERAND_PUNCT_VALID_P): Accept '(' for s/sv/svi.
* alpha.c (print_operand): Handle it.
* alpha.md (fix_trunc[ds]fdi2): Use it. Add earlyclobber pattern
for ALPHA_TP_INSN.
Sun Apr 12 13:09:46 1998 Scott Christley <scottc@net-community.com>
* objc/encoding.c (objc_sizeof_type, _C_VOID): New case.
Sun Apr 12 13:04:55 1998 Nikolay Yatsenko (nikolay@osf.org)
* configure.in (i[34567]86-*-osf1*): New entry.
* i386/osf1-c[in].asm: New files for OSF/1.
* i386/osf1elf{,gdb}.h, i386/[xt]-osf1elf, i386/xm-osf1elf.h: Likewise.
Sun Apr 12 10:03:51 1998 Noel Cragg <noel@red-bean.com>
* fixincludes: Remove specification of parameters when renaming
functions in Alpha DEC Unix include files.
Sun Apr 12 07:33:46 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* mips.c (large_int): Use HOST_WIDE_INT, not int.
(print_operand): Use HOST_WIDE_INT_PRINT_* macros.
* toplev.c (main): Sort order of handling of -d letters.
Use `F' instead of `D' for addressof_dump.
* libgcc2.c (_eh_compat): Deleted.
* Makefile.in (LIB2FUNCS): Delete _eh_compat.
* configure.in (alpha*-*-linux-gnu*): Don't include alpha/xm-linux.h.
* c-common.c (check_format_info): Properly test for nested pointers.
* pa.md (casesi0): Add missing mode for operand 0.
* function.c (purge_addressof_1, case MEM): If BLKmode, put ADDRESSOF
into stack.
* c-parse.in (label): Give warning if pedantic and label not integral.
* c-decl.c (grokdeclarator): Don't warn about return type if in
system header.
* reload.c (reload_nongroup): New variable.
(push{_secondary,}_reload): Initialize it.
(find_reloads): Compute it.
(debug_reload): Print it.
* reload.h (reload_nongroup): Declare.
* reload1.c (reload): Use reload_nongroup instead of local computation.
Check caller_save_spill_class against any nongroup reloads.
(reloads_conflict): No longer static.
Sun Apr 12 05:52:18 1998 John David Anglin <dave@hiauly1.hia.nrc.ca>
* vax.md (call patterns): Operand 1 is always a CONST_INT.
Sat Apr 11 16:01:11 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* convert.c (convert_to_{pointer,integer,real,complex}): Use switch.
Add missing integer-like types.
Simplify return of zero in error case.
(convert_to_pointer): Remove dubious abort.
(convert_to_integer, case POINTER_TYPE): Make recursive call.
(convert_to_integer, case COND_EXPR): Always convert arms.
* tree.c (type_precision): Deleted.
* cccp.c (do_warning): Give pedantic warning if -pedantic and not
in system file.
* cpplib.c (do_warning): Likewise.
* function.c (target_temp_slot_level): Define here.
(push_temp_slots_for_target, {get,set}_target_temp_slot_level): New.
* stmt.c (target_temp_slot_level): Don't define here.
* expr.h (temp_slot_level): New declaration.
Fri Apr 10 16:35:48 1998 Paul Eggert <eggert@twinsun.com>
* c-common.c (decl_attributes): Support strftime format checking.
(record_function_format, {check,init_function}_format_info): Likewise.
(enum format_type): New type.
(record_function_format): Now static; takes value of type
enum format_type instead of int.
(time_char_table): New constant.
(struct function_format_info): format_type member renamed from is_scan.
(check_format_info): Use `warning' rather than sprintf followed by
`warning', to avoid mishandling `%' in warnings.
Change a `pedwarn' to `warning'.
* c-tree.h (record_function_format): Remove decl.
Thu Apr 2 17:34:27 1998 Manfred Hollstein <manfred@s-direktnet.de>
* regclass.c (memory_move_secondary_cost): Protect uses of
SECONDARY_{INPUT,OUTPUT}_RELOAD_CLASS with #ifdef tests.
Thu Apr 2 07:06:57 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* m68k.c (standard_68881_constant_p): Don't use fmovecr on 68060.
Thu Apr 2 06:19:25 1998 Ken Raeburn <raeburn@cygnus.com>
* Makefile.in (version.c): Put "cvs log" output in build directory.
* reload.h (MEMORY_MOVE_COST): Define here if not already defined.
(memory_move_secondary_cost): Declare.
* regclass.c (MEMORY_MOVE_COST): Don't define default here.
@ -23,13 +252,11 @@ Mon Mar 30 13:56:30 1998 Jim Wilson <wilson@cygnus.com>
Wed Mar 25 16:09:01 1998 Michael Meissner <meissner@cygnus.com>
* rs6000.h (FUNCTION_ARG_PADDING): Cast result to be enum
direction.
* rs6000.h (FUNCTION_ARG_PADDING): Cast result to be enum direction.
(function_arg_padding): Declare.
* rs6000.c: Include stdlib.h if we have it.
(function_arg_padding): Change return type to int, cast enum's to
int.
(function_arg_padding): Change return type to int, cast enum's to int.
(From Kaveh R. Ghazi <ghazi@caip.rutgers.edu>)
* rs6000.c (rs6000_override_options): Change type of `i', `j' and
@ -37,13 +264,12 @@ Wed Mar 25 16:09:01 1998 Michael Meissner <meissner@cygnus.com>
(rs6000_file_start): Likewise for `i'.
(rs6000_replace_regno): Add default case in enumeration switch.
(output_epilog): Remove unused variable `i'.
(rs6000_longcall_ref): Remove unused variables `len', `p', `reg1'
and `reg2'.
(rs6000_longcall_ref): Remove unused variables `len', `p', `reg[12]'.
* rs6000.h (ADDITIONAL_REGISTER_NAMES): Add missing braces around
initializer.
(get_issue_rate, non_logical_cint_operand): Add prototype.
(rs6000_output_load_toc_table): Ditto.
(rs6000_output_load_toc_table): Likewise.
* rs6000.md (udivmodsi4): Add explicit braces to avoid ambiguous
`else'.

View File

@ -670,7 +670,7 @@ decl_attributes (node, attributes, prefix_attributes)
"argument format specified for non-function `%s'");
continue;
}
if (TREE_CODE (format_type_id) != IDENTIFIER_NODE)
{
error ("unrecognized format specifier");
@ -679,7 +679,7 @@ decl_attributes (node, attributes, prefix_attributes)
else
{
char *p = IDENTIFIER_POINTER (format_type_id);
if (!strcmp (p, "printf") || !strcmp (p, "__printf__"))
format_type = printf_format_type;
else if (!strcmp (p, "scanf") || !strcmp (p, "__scanf__"))
@ -1529,7 +1529,7 @@ check_format_info (info, params)
else if (*format_chars == 'q' || *format_chars == 'L')
{
length_char = *format_chars++;
if (pedantic && length_char == 'q')
if (pedantic)
warning ("ANSI C does not support the `%c' length modifier",
length_char);
}
@ -1541,13 +1541,6 @@ check_format_info (info, params)
}
else
length_char = 0;
if (length_char == 'h' && *format_chars == 'h')
{
length_char = 'H', format_chars++;
/* FIXME: Is allowed in ISO C 9x. */
if (pedantic)
warning ("ANSI C does not support the `hh' length modifier");
}
if (length_char == 'l' && *format_chars == 'l')
{
length_char = 'q', format_chars++;
@ -1667,10 +1660,10 @@ check_format_info (info, params)
}
if (info->format_type == strftime_format_type)
continue;
integral_format = (format_char == 'd' || format_char == 'i'
|| format_char == 'o' || format_char == 'u'
|| format_char == 'x' || format_char == 'X');
if (precise && index (flag_chars, '0') != 0 && integral_format)
if (precise && index (flag_chars, '0') != 0
&& (format_char == 'd' || format_char == 'i'
|| format_char == 'o' || format_char == 'u'
|| format_char == 'x' || format_char == 'x'))
warning ("`0' flag ignored with precision specifier and `%c' format",
format_char);
switch (length_char)
@ -1683,8 +1676,7 @@ check_format_info (info, params)
case 'L': wanted_type = fci->bigllen ? *(fci->bigllen) : 0; break;
case 'Z': wanted_type = fci->zlen ? *fci->zlen : 0; break;
}
if (wanted_type == 0
|| (pedantic && length_char == 'L' && integral_format))
if (wanted_type == 0)
warning ("use of `%c' length character with `%c' type character",
length_char, format_char);
@ -1723,7 +1715,7 @@ check_format_info (info, params)
{
cur_type = TREE_TYPE (cur_type);
if (TREE_CODE (cur_param) == ADDR_EXPR)
if (cur_param != 0 && TREE_CODE (cur_param) == ADDR_EXPR)
cur_param = TREE_OPERAND (cur_param, 0);
else
cur_param = 0;

View File

@ -2088,6 +2088,7 @@ pushdecl (x)
DECL_SOURCE_LINE (IDENTIFIER_IMPLICIT_DECL (name)),
"previous declaration of `%s'",
IDENTIFIER_POINTER (name));
TREE_THIS_VOLATILE (name) = 1;
}
if (t != 0 && duplicate_decls (x, t, different_binding_level))
@ -2291,8 +2292,11 @@ pushdecl (x)
else if (TREE_CODE (x) == TYPE_DECL)
;
else if (IDENTIFIER_IMPLICIT_DECL (name))
pedwarn ("`%s' was declared implicitly `extern' and later `static'",
IDENTIFIER_POINTER (name));
{
if (! TREE_THIS_VOLATILE (name))
pedwarn ("`%s' was declared implicitly `extern' and later `static'",
IDENTIFIER_POINTER (name));
}
else
pedwarn ("`%s' was declared `extern' and later `static'",
IDENTIFIER_POINTER (name));
@ -4402,9 +4406,10 @@ grokdeclarator (declarator, declspecs, decl_context, initialized)
if (type == 0)
{
if (! (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
| (1 << (int) RID_SIGNED)
| (1 << (int) RID_UNSIGNED))))
if ((! (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
| (1 << (int) RID_SIGNED)
| (1 << (int) RID_UNSIGNED))))
&& ! (in_system_header && ! allocation_temporary_p ()))
{
/* C9x will probably require a diagnostic here.
For now, issue a warning if -Wreturn-type and this is a function,

File diff suppressed because it is too large Load Diff

View File

@ -2101,8 +2101,14 @@ label: CASE expr_no_commas ':'
if (value != error_mark_node)
{
tree duplicate;
int success = pushcase (value, convert_and_check,
label, &duplicate);
int success;
if (pedantic && ! INTEGRAL_TYPE_P (TREE_TYPE (value)))
pedwarn ("label must have integral type in ANSI C");
success = pushcase (value, convert_and_check,
label, &duplicate);
if (success == 1)
error ("case label not within a switch statement");
else if (success == 2)

View File

@ -1910,8 +1910,14 @@ label: CASE expr_no_commas ':'
if (value != error_mark_node)
{
tree duplicate;
int success = pushcase (value, convert_and_check,
label, &duplicate);
int success;
if (pedantic && ! INTEGRAL_TYPE_P (TREE_TYPE (value)))
pedwarn ("label must have integral type in ANSI C");
success = pushcase (value, convert_and_check,
label, &duplicate);
if (success == 1)
error ("case label not within a switch statement");
else if (success == 2)

View File

@ -3770,11 +3770,18 @@ build_c_cast (type, expr)
&& TREE_CODE (type) == POINTER_TYPE
&& TREE_CODE (otype) == POINTER_TYPE)
{
if (TYPE_VOLATILE (TREE_TYPE (otype))
&& ! TYPE_VOLATILE (TREE_TYPE (type)))
/* Go to the innermost object being pointed to. */
tree in_type = type;
tree in_otype = otype;
while (TREE_CODE (in_type) == POINTER_TYPE)
in_type = TREE_TYPE (in_type);
while (TREE_CODE (in_otype) == POINTER_TYPE)
in_otype = TREE_TYPE (in_otype);
if (TYPE_VOLATILE (in_otype) && ! TYPE_VOLATILE (in_type))
pedwarn ("cast discards `volatile' from pointer target type");
if (TYPE_READONLY (TREE_TYPE (otype))
&& ! TYPE_READONLY (TREE_TYPE (type)))
if (TYPE_READONLY (in_otype) && ! TYPE_READONLY (in_type))
pedwarn ("cast discards `const' from pointer target type");
}

View File

@ -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)

View File

@ -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

View File

@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler.
Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
Contributed by O.M.Kellogg, DASA (oliver.kellogg@space.otn.dasa.de)
This file is part of GNU CC.

View File

@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler, for AMD Am29000 CPU.
Copyright (C) 1988, 90-96, 1997 Free Software Foundation, Inc.
Copyright (C) 1988, 90-97, 1998 Free Software Foundation, Inc.
Contributed by Richard Kenner (kenner@nyu.edu)
This file is part of GNU CC.

View File

@ -71,7 +71,6 @@ Boston, MA 02111-1307, USA. */
#define HAVE_ATOLL
#define NO_SYS_PARAMS_H /* Don't have <sys/params.h> */
#define NO_STAB_H /* Don't have <stab.h> */
#define USE_C_ALLOCA /* Using alloca.c */
#define HAVE_FCNTL_H 1

View File

@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler, Argonaut ARC cpu.
Copyright (C) 1994, 1995, 1997 Free Software Foundation, Inc.
Copyright (C) 1994, 1995, 1997, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.

View File

@ -1556,7 +1556,7 @@ extern struct dsp16xx_frame_info current_frame_info;
/* A C expression for the cost of moving data of mode MODE between
a register and memory. A value of 2 is the default. */
#define MEMORY_MOVE_COST(MODE,CLASS,IN_P) \
#define MEMORY_MOVE_COST(MODE,CLASS,IN) \
(GET_MODE_CLASS(MODE) == MODE_INT && MODE == QImode ? 12 \
: 16)

View File

@ -1,5 +1,5 @@
/* Subroutines for insn-output.c for Intel X86.
Copyright (C) 1988, 92, 94-97, 1998 Free Software Foundation, Inc.
Copyright (C) 1988, 92, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@ -3876,7 +3876,10 @@ output_387_binary_op (insn, operands)
}
if (find_regno_note (insn, REG_DEAD, REGNO (operands[2])))
return strcat (buf, AS2 (p,%2,%0));
if (STACK_TOP_P (operands[0]))
return strcat (buf, AS2 (p,%0,%2));
else
return strcat (buf, AS2 (p,%2,%0));
if (STACK_TOP_P (operands[0]))
return strcat (buf, AS2C (%y2,%0));
@ -3907,10 +3910,16 @@ output_387_binary_op (insn, operands)
abort ();
if (find_regno_note (insn, REG_DEAD, REGNO (operands[2])))
return strcat (buf, AS2 (rp,%2,%0));
if (STACK_TOP_P (operands[0]))
return strcat (buf, AS2 (p,%0,%2));
else
return strcat (buf, AS2 (rp,%2,%0));
if (find_regno_note (insn, REG_DEAD, REGNO (operands[1])))
return strcat (buf, AS2 (p,%1,%0));
if (STACK_TOP_P (operands[0]))
return strcat (buf, AS2 (rp,%0,%1));
else
return strcat (buf, AS2 (p,%1,%0));
if (STACK_TOP_P (operands[0]))
{

View File

@ -19,7 +19,6 @@ along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#define NO_STAB_H
#define EXECUTABLE_SUFFIX ".exe"
#define NO_SYS_SIGLIST 1
#define HAVE_BCOPY 1

View File

@ -19,8 +19,6 @@ along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#define NO_STAB_H
#ifndef USG
#define USG 1
#endif

View File

@ -1286,7 +1286,7 @@ do { \
/* Compute the cost of moving data between registers and memory. */
/* Memory is 3 times as expensive as registers.
??? Is that the right way to look at it? */
#define MEMORY_MOVE_COST(MODE,CLASS,IN_P) \
#define MEMORY_MOVE_COST(MODE,CLASS,IN) \
(GET_MODE_SIZE (MODE) <= UNITS_PER_WORD ? 6 : 12)
/* The cost of a branch insn. */

View File

@ -1,5 +1,5 @@
/* Subroutines for insn-output.c for Motorola 68000 family.
Copyright (C) 1987, 93-97, 1998 Free Software Foundation, Inc.
Copyright (C) 1987, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@ -2194,11 +2194,9 @@ notice_update_cc (exp, insn)
}
else if (ADDRESS_REG_P (SET_DEST (exp)))
{
if (cc_status.value1
&& reg_overlap_mentioned_p (SET_DEST (exp), cc_status.value1))
if (cc_status.value1 && modified_in_p (cc_status.value1, insn))
cc_status.value1 = 0;
if (cc_status.value2
&& reg_overlap_mentioned_p (SET_DEST (exp), cc_status.value2))
if (cc_status.value2 && modified_in_p (cc_status.value2, insn))
cc_status.value2 = 0;
}
else if (!FP_REG_P (SET_DEST (exp))
@ -2415,7 +2413,7 @@ standard_68881_constant_p (x)
#endif
/* fmovecr must be emulated on the 68040 and 68060, so it shouldn't be
used at all. */
used at all on those chips. */
if (TARGET_68040 || TARGET_68060)
return 0;

View File

@ -150,7 +150,7 @@ extern int target_flags;
{ "sky", -(MASK_FPA|MASK_68040_ONLY|MASK_68881)}, \
{ "sky", MASK_SKY}, \
{ "nosky", - MASK_SKY}, \
{ "68881" - (MASK_FPA|MASK_SKY)}, \
{ "68881", - (MASK_FPA|MASK_SKY)}, \
{ "68881", MASK_68881}, \
{ "soft-float", - (MASK_FPA|MASK_SKY|MASK_68040_ONLY|MASK_68881)}, \
{ "68020-40", -(MASK_5200|MASK_68060)}, \

View File

@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler for
Motorola m88100 in an 88open OCS/BCS environment.
Copyright (C) 1988, 92, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
Copyright (C) 1988, 92-97, 1998 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com).
Currently maintained by (gcc@dg-rtp.dg.com)

File diff suppressed because it is too large Load Diff

View File

@ -157,13 +157,28 @@ extern struct rtx_def *embedded_pic_fnaddr_rtx; /* function address */
extern int mips_string_length; /* length of strings for mips16 */
extern struct rtx_def *mips16_gp_pseudo_rtx; /* psuedo reg holding $gp */
/* Functions within mips.c that we reference. */
/* Functions within mips.c that we reference. Some of these return type
HOST_WIDE_INT, so define that here. This is a copy of code in machmode.h.
??? It would be good to try to put this as common code someplace. */
#ifndef HOST_BITS_PER_WIDE_INT
#if HOST_BITS_PER_LONG > HOST_BITS_PER_INT
#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONG
#define HOST_WIDE_INT long
#else
#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_INT
#define HOST_WIDE_INT int
#endif
#endif
extern void abort_with_insn ();
extern int arith32_operand ();
extern int arith_operand ();
extern int cmp_op ();
extern long compute_frame_size ();
extern HOST_WIDE_INT compute_frame_size ();
extern int const_float_1_operand ();
extern void expand_block_move ();
extern int equality_op ();
@ -186,7 +201,7 @@ extern void mips_asm_file_start ();
extern int mips_can_use_return_insn ();
extern int mips_const_double_ok ();
extern void mips_count_memory_refs ();
extern int mips_debugger_offset ();
extern HOST_WIDE_INT mips_debugger_offset ();
extern void mips_declare_object ();
extern int mips_epilogue_delay_slots ();
extern void mips_expand_epilogue ();
@ -211,7 +226,7 @@ extern int simple_epilogue_p ();
extern int simple_memory_operand ();
extern int double_memory_operand ();
extern int small_int ();
extern void trace();
extern void trace ();
extern int uns_arith_operand ();
extern struct rtx_def * embedded_pic_offset ();
extern void mips_order_regs_for_local_alloc ();
@ -1196,9 +1211,10 @@ do { \
the frame pointer to be the stack pointer after the initial
adjustment. */
#define DEBUGGER_AUTO_OFFSET(X) mips_debugger_offset (X, 0)
#define DEBUGGER_ARG_OFFSET(OFFSET, X) mips_debugger_offset (X, OFFSET)
#define DEBUGGER_AUTO_OFFSET(X) \
mips_debugger_offset (X, (HOST_WIDE_INT) 0)
#define DEBUGGER_ARG_OFFSET(OFFSET, X) \
mips_debugger_offset (X, (HOST_WIDE_INT) OFFSET)
/* Tell collect that the object format is ECOFF */
#ifndef OBJECT_FORMAT_ROSE

View File

@ -74,10 +74,3 @@ extern char * alloca ();
#define STACK_DIRECTION -1
#endif
#endif /* not MIPS_OVERRIDE_ALLOCA */
/* Say if we have vprintf. BSD Mips targets probably don't have vfprintf. */
#if defined(__OSF1__) || defined(__OSF__) || defined(__osf__) || defined(bsd4_4)
#else
#define NO_STAB_H /* mips doesn't typically have stab.h */
#endif

View File

@ -1,5 +1,5 @@
;;- Machine description for HP PA-RISC architecture for GNU C compiler
;; Copyright (C) 1992, 93 - 97, 1998 Free Software Foundation, Inc.
;; Copyright (C) 1992, 93-97, 1998 Free Software Foundation, Inc.
;; Contributed by the Center for Software Science at the University
;; of Utah.
@ -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"

View File

@ -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);

View File

@ -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
View File

@ -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

View File

@ -148,7 +148,7 @@ EGCS_PROG_INSTALL
AC_HEADER_STDC
AC_HEADER_TIME
AC_CHECK_HEADERS(limits.h stddef.h string.h strings.h stdlib.h time.h fcntl.h unistd.h sys/file.h sys/time.h sys/resource.h sys/param.h sys/times.h varargs.h sys/varargs.h wait.h sys/wait.h)
AC_CHECK_HEADERS(limits.h stddef.h string.h strings.h stdlib.h time.h fcntl.h unistd.h stab.h sys/file.h sys/time.h sys/resource.h sys/param.h sys/times.h varargs.h sys/varargs.h wait.h sys/wait.h)
# Check for thread headers.
AC_CHECK_HEADER(thread.h, [have_thread_h=yes], [have_thread_h=])
@ -355,7 +355,7 @@ for machine in $build $host $target; do
fi
;;
alpha*-*-linux-gnu*)
tm_file="${tm_file} alpha/elf.h alpha/linux-elf.h alpha/linux.h"
tm_file="${tm_file} alpha/linux.h alpha/elf.h"
xm_defines=USE_BFD
target_cpu_default="MASK_GAS"
tmake_file="t-linux alpha/t-linux alpha/t-crtbe"
@ -941,6 +941,11 @@ for machine in $build $host $target; do
tm_file=i386/go32-rtems.h
tmake_file="i386/t-go32 t-rtems"
;;
i[[34567]]86-*-rtemself*)
cpu_type=i386
tm_file=i386/rtemself.h
tmake_file="i386/t-i386bare t-rtems"
;;
i[[34567]]86-*-rtems*)
cpu_type=i386
tm_file=i386/rtems.h
@ -1037,6 +1042,21 @@ for machine in $build $host $target; do
xmake_file=x-svr4
extra_parts="crtbegin.o crtend.o"
;;
i[[34567]]86-*-osf1*) # Intel 80386's running OSF/1 1.3+
cpu_type=i386
xm_file="${xm_file} xm-svr4.h i386/xm-sysv4.h i386/xm-osf1elf.h"
xm_defines="USE_C_ALLOCA SMALL_ARG_MAX"
fixincludes=Makefile.in #Don't do it on OSF/1
if [[ x$stabs = xyes ]]
then
tm_file=i386/osf1elfgdb.h
else
tm_file=i386/osf1elf.h
fi
tmake_file=i386/t-osf1elf
xmake_file=i386/x-osf1elf
extra_parts="crti.o crtn.o crtbegin.o crtend.o"
;;
i[[34567]]86-*-sysv*) # Intel 80386's running system V
xm_defines="USG SVR3"
xmake_file=i386/x-sysv3
@ -1059,7 +1079,7 @@ for machine in $build $host $target; do
fi
;;
i386-*-vsta) # Intel 80386's running VSTa kernel
xm_file=i386/xm-vsta.h
xm_file="${xm_file} i386/xm-vsta.h"
tm_file=i386/vsta.h
tmake_file=i386/t-vsta
xmake_file=i386/x-vsta
@ -2548,7 +2568,8 @@ for machine in $build $host $target; do
extra_parts="crtbegin.o crtend.o"
;;
sparc-*-vxsim*)
xm_file="sparc/xm-sysv4.h sparc/xm-sol2.h"
xm_file="xm-siglist.h sparc/xm-sysv4.h sparc/xm-sol2.h"
xm_defines="USG POSIX"
tm_file=sparc/vxsim.h
tmake_file=sparc/t-vxsparc
xmake_file=sparc/x-sysv4

View File

@ -1,5 +1,5 @@
/* Utility routines for data type conversion for GNU C.
Copyright (C) 1987, 88, 91, 92, 94, 95, 1997 Free Software Foundation, Inc.
Copyright (C) 1987, 88, 91-95, 97, 1998 Free Software Foundation, Inc.
This file is part of GNU C.
@ -36,9 +36,6 @@ tree
convert_to_pointer (type, expr)
tree type, expr;
{
register tree intype = TREE_TYPE (expr);
register enum tree_code form = TREE_CODE (intype);
if (integer_zerop (expr))
{
expr = build_int_2 (0, 0);
@ -46,29 +43,27 @@ convert_to_pointer (type, expr)
return expr;
}
if (form == POINTER_TYPE || form == REFERENCE_TYPE)
return build1 (NOP_EXPR, type, expr);
if (form == INTEGER_TYPE || form == ENUMERAL_TYPE)
switch (TREE_CODE (TREE_TYPE (expr)))
{
if (type_precision (intype) == POINTER_SIZE)
case POINTER_TYPE:
case REFERENCE_TYPE:
return build1 (NOP_EXPR, type, expr);
case INTEGER_TYPE:
case ENUMERAL_TYPE:
case BOOLEAN_TYPE:
case CHAR_TYPE:
if (TYPE_PRECISION (TREE_TYPE (expr)) == POINTER_SIZE)
return build1 (CONVERT_EXPR, type, expr);
expr = convert (type_for_size (POINTER_SIZE, 0), expr);
/* Modes may be different but sizes should be the same. */
if (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (expr)))
!= GET_MODE_SIZE (TYPE_MODE (type)))
/* There is supposed to be some integral type
that is the same width as a pointer. */
abort ();
return convert_to_pointer (type, expr);
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);
}
}

View File

@ -255,6 +255,10 @@ Wed Apr 15 13:20:06 1998 John Carr <jfc@mit.edu>
* errfn.c: Rework to avoid problems when HOST_WIDE_INT is longer
than a pointer.
Sun Apr 12 22:31:19 1998 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* cvt.c (cp_convert_to_pointer): Use TYPE_PRECISION.
Fri Apr 10 12:16:49 1998 Benjamin Kosnik <bkoz@loony.cygnus.com>
* decl.c (duplicate_decls): Don't warn for redundant decls if

View File

@ -1,5 +1,5 @@
/* Language-level data type conversion for GNU C++.
Copyright (C) 1987, 88, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
Copyright (C) 1987, 88, 92-96, 1998 Free Software Foundation, Inc.
Hacked by Michael Tiemann (tiemann@cygnus.com)
This file is part of GNU CC.
@ -242,7 +242,7 @@ cp_convert_to_pointer (type, expr)
if (INTEGRAL_CODE_P (form))
{
if (type_precision (intype) == POINTER_SIZE)
if (TYPE_PRECISION (intype) == POINTER_SIZE)
return build1 (CONVERT_EXPR, type, expr);
expr = cp_convert (type_for_size (POINTER_SIZE, 0), expr);
/* Modes may be different but sizes should be the same. */

View File

@ -1,5 +1,5 @@
/* Build expressions with type checking for C++ compiler.
Copyright (C) 1987, 88, 89, 92-96, 1997 Free Software Foundation, Inc.
Copyright (C) 1987, 88, 89, 92-97, 1998 Free Software Foundation, Inc.
Hacked by Michael Tiemann (tiemann@cygnus.com)
This file is part of GNU CC.

View File

@ -3880,6 +3880,10 @@ do_warning (pfile, keyword, buf, limit)
bcopy (buf, copy, length);
copy[length] = 0;
SKIP_WHITE_SPACE (copy);
if (CPP_PEDANTIC (pfile) && !CPP_BUFFER (pfile)->system_header_p)
cpp_pedwarn ("ANSI C does not allow `#warning'");
/* Use `pedwarn' not `warning', because #warning isn't in the C Standard;
if -pedantic-errors is given, #warning should cause an error. */
cpp_pedwarn (pfile, "#warning %s", copy);

View File

@ -161,16 +161,18 @@ char *getpwd ();
#define FORCE_TEXT
#endif
#if defined (USG) || defined (NO_STAB_H) || defined (CROSS_COMPILE)
#include "gstab.h" /* If doing DBX on sysV, use our own stab.h. */
/* If there is a system stabs.h, use it. Otherwise, use our own. */
#ifndef HAVE_STABS_H
#include "gstab.h"
#else
#include <stab.h> /* On BSD, use the system's stab.h. */
#include <stab.h>
/* This is a GNU extension we need to reference in this file. */
#ifndef N_CATCH
#define N_CATCH 0x54
#endif
#endif /* not USG */
#endif
#ifdef __GNU_STAB__
#define STAB_CODE_TYPE enum __stab_debug_code

View File

@ -7174,10 +7174,22 @@ add_bound_info (subrange_die, bound_attr, bound)
{
register dw_die_ref ctx = lookup_decl_die (current_function_decl);
register dw_die_ref decl_die = new_die (DW_TAG_variable, ctx);
register rtx loc = SAVE_EXPR_RTL (bound);
/* If the RTL for the SAVE_EXPR is memory, handle the case where
it references an outer function's frame. */
if (GET_CODE (loc) == MEM)
{
rtx new_addr = fix_lexical_addr (XEXP (loc, 0), bound);
if (XEXP (loc, 0) != new_addr)
loc = gen_rtx (MEM, GET_MODE (loc), new_addr);
}
add_AT_flag (decl_die, DW_AT_artificial, 1);
add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
add_AT_location_description (decl_die, DW_AT_location,
SAVE_EXPR_RTL (bound));
add_AT_location_description (decl_die, DW_AT_location, loc);
add_AT_die_ref (subrange_die, bound_attr, decl_die);
}

View File

@ -41,6 +41,8 @@ static rtx mask_rtx PROTO((enum machine_mode, int,
static rtx lshift_value PROTO((enum machine_mode, rtx,
int, int));
static rtx extract_split_bit_field PROTO((rtx, int, int, int, int));
static void do_cmp_and_jump PROTO((rtx, rtx, enum rtx_code,
enum machine_mode, rtx));
#define CEIL(x,y) (((x) + (y) - 1) / (y))
@ -3057,9 +3059,8 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
rtx t1;
t1 = copy_to_mode_reg (compute_mode, op0);
emit_cmp_insn (t1, const0_rtx, GE,
NULL_RTX, compute_mode, 0, 0);
emit_jump_insn (gen_bge (label));
do_cmp_and_jump (t1, const0_rtx, GE,
compute_mode, label);
expand_inc (t1, GEN_INT (abs_d - 1));
emit_label (label);
quotient = expand_shift (RSHIFT_EXPR, compute_mode, t1,
@ -3286,13 +3287,10 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
Save that for later. */
rtx tem;
rtx label = gen_label_rtx ();
emit_cmp_insn (remainder, const0_rtx, EQ, NULL_RTX,
compute_mode, 0, 0);
emit_jump_insn (gen_beq (label));
do_cmp_and_jump (remainder, const0_rtx, EQ, compute_mode, label);
tem = expand_binop (compute_mode, xor_optab, op0, op1,
NULL_RTX, 0, OPTAB_WIDEN);
emit_cmp_insn (tem, const0_rtx, GE, NULL_RTX, compute_mode, 0, 0);
emit_jump_insn (gen_bge (label));
do_cmp_and_jump (tem, const0_rtx, GE, compute_mode, label);
expand_dec (quotient, const1_rtx);
expand_inc (remainder, op1);
emit_label (label);
@ -3313,11 +3311,8 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
label3 = gen_label_rtx ();
label4 = gen_label_rtx ();
label5 = gen_label_rtx ();
emit_cmp_insn (op1, const0_rtx, LT, NULL_RTX, compute_mode, 0, 0);
emit_jump_insn (gen_blt (label2));
emit_cmp_insn (adjusted_op0, const0_rtx, LT, NULL_RTX,
compute_mode, 0, 0);
emit_jump_insn (gen_blt (label1));
do_cmp_and_jump (op1, const0_rtx, LT, compute_mode, label2);
do_cmp_and_jump (adjusted_op0, const0_rtx, LT, compute_mode, label1);
tem = expand_binop (compute_mode, sdiv_optab, adjusted_op0, op1,
quotient, 0, OPTAB_LIB_WIDEN);
if (tem != quotient)
@ -3329,9 +3324,7 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
emit_jump_insn (gen_jump (label4));
emit_barrier ();
emit_label (label2);
emit_cmp_insn (adjusted_op0, const0_rtx, GT, NULL_RTX,
compute_mode, 0, 0);
emit_jump_insn (gen_bgt (label3));
do_cmp_and_jump (adjusted_op0, const0_rtx, GT, compute_mode, label3);
tem = expand_binop (compute_mode, sdiv_optab, adjusted_op0, op1,
quotient, 0, OPTAB_LIB_WIDEN);
if (tem != quotient)
@ -3371,9 +3364,7 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
{
rtx lab;
lab = gen_label_rtx ();
emit_cmp_insn (t2, const0_rtx, EQ, NULL_RTX,
compute_mode, 0, 0);
emit_jump_insn (gen_beq (lab));
do_cmp_and_jump (t2, const0_rtx, EQ, compute_mode, lab);
expand_inc (t1, const1_rtx);
emit_label (lab);
quotient = t1;
@ -3412,9 +3403,8 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
/* This could be computed with a branch-less sequence.
Save that for later. */
rtx label = gen_label_rtx ();
emit_cmp_insn (remainder, const0_rtx, EQ, NULL_RTX,
compute_mode, 0, 0);
emit_jump_insn (gen_beq (label));
do_cmp_and_jump (remainder, const0_rtx, EQ,
compute_mode, label);
expand_inc (quotient, const1_rtx);
expand_dec (remainder, op1);
emit_label (label);
@ -3431,9 +3421,8 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
adjusted_op0 = copy_to_mode_reg (compute_mode, op0);
label1 = gen_label_rtx ();
label2 = gen_label_rtx ();
emit_cmp_insn (adjusted_op0, const0_rtx, NE, NULL_RTX,
compute_mode, 0, 0);
emit_jump_insn (gen_bne (label1));
do_cmp_and_jump (adjusted_op0, const0_rtx, NE,
compute_mode, label1);
emit_move_insn (quotient, const0_rtx);
emit_jump_insn (gen_jump (label2));
emit_barrier ();
@ -3473,9 +3462,7 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
{
rtx lab;
lab = gen_label_rtx ();
emit_cmp_insn (t2, const0_rtx, EQ, NULL_RTX,
compute_mode, 0, 0);
emit_jump_insn (gen_beq (lab));
do_cmp_and_jump (t2, const0_rtx, EQ, compute_mode, lab);
expand_inc (t1, const1_rtx);
emit_label (lab);
quotient = t1;
@ -3514,14 +3501,11 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
Save that for later. */
rtx tem;
rtx label = gen_label_rtx ();
emit_cmp_insn (remainder, const0_rtx, EQ, NULL_RTX,
compute_mode, 0, 0);
emit_jump_insn (gen_beq (label));
do_cmp_and_jump (remainder, const0_rtx, EQ,
compute_mode, label);
tem = expand_binop (compute_mode, xor_optab, op0, op1,
NULL_RTX, 0, OPTAB_WIDEN);
emit_cmp_insn (tem, const0_rtx, LT, NULL_RTX,
compute_mode, 0, 0);
emit_jump_insn (gen_blt (label));
do_cmp_and_jump (tem, const0_rtx, LT, compute_mode, label);
expand_inc (quotient, const1_rtx);
expand_dec (remainder, op1);
emit_label (label);
@ -3542,12 +3526,9 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
label3 = gen_label_rtx ();
label4 = gen_label_rtx ();
label5 = gen_label_rtx ();
emit_cmp_insn (op1, const0_rtx, LT, NULL_RTX,
compute_mode, 0, 0);
emit_jump_insn (gen_blt (label2));
emit_cmp_insn (adjusted_op0, const0_rtx, GT, NULL_RTX,
compute_mode, 0, 0);
emit_jump_insn (gen_bgt (label1));
do_cmp_and_jump (op1, const0_rtx, LT, compute_mode, label2);
do_cmp_and_jump (adjusted_op0, const0_rtx, GT,
compute_mode, label1);
tem = expand_binop (compute_mode, sdiv_optab, adjusted_op0, op1,
quotient, 0, OPTAB_LIB_WIDEN);
if (tem != quotient)
@ -3559,9 +3540,8 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
emit_jump_insn (gen_jump (label4));
emit_barrier ();
emit_label (label2);
emit_cmp_insn (adjusted_op0, const0_rtx, LT, NULL_RTX,
compute_mode, 0, 0);
emit_jump_insn (gen_blt (label3));
do_cmp_and_jump (adjusted_op0, const0_rtx, LT,
compute_mode, label3);
tem = expand_binop (compute_mode, sdiv_optab, adjusted_op0, op1,
quotient, 0, OPTAB_LIB_WIDEN);
if (tem != quotient)
@ -3628,8 +3608,7 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
tem = plus_constant (op1, -1);
tem = expand_shift (RSHIFT_EXPR, compute_mode, tem,
build_int_2 (1, 0), NULL_RTX, 1);
emit_cmp_insn (remainder, tem, LEU, NULL_RTX, compute_mode, 0, 0);
emit_jump_insn (gen_bleu (label));
do_cmp_and_jump (remainder, tem, LEU, compute_mode, label);
expand_inc (quotient, const1_rtx);
expand_dec (remainder, op1);
emit_label (label);
@ -3654,8 +3633,7 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
abs_op1 = expand_abs (compute_mode, op1, NULL_RTX, 0, 0);
tem = expand_shift (LSHIFT_EXPR, compute_mode, abs_rem,
build_int_2 (1, 0), NULL_RTX, 1);
emit_cmp_insn (tem, abs_op1, LTU, NULL_RTX, compute_mode, 0, 0);
emit_jump_insn (gen_bltu (label));
do_cmp_and_jump (tem, abs_op1, LTU, compute_mode, label);
tem = expand_binop (compute_mode, xor_optab, op0, op1,
NULL_RTX, 0, OPTAB_WIDEN);
mask = expand_shift (RSHIFT_EXPR, compute_mode, tem,
@ -4360,3 +4338,76 @@ emit_store_flag_force (target, code, op0, op1, mode, unsignedp, normalizep)
return target;
}
/* 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));
}
}

View File

@ -192,7 +192,7 @@ static void preexpand_calls PROTO((tree));
static void do_jump_by_parts_greater PROTO((tree, int, rtx, rtx));
void do_jump_by_parts_greater_rtx PROTO((enum machine_mode, int, rtx, rtx, rtx, rtx));
static void do_jump_by_parts_equality PROTO((tree, rtx, rtx));
static void do_jump_by_parts_equality_rtx PROTO((rtx, rtx, rtx));
void do_jump_by_parts_equality_rtx PROTO((rtx, rtx, rtx));
static void do_jump_for_compare PROTO((rtx, rtx, rtx));
static rtx compare PROTO((tree, enum rtx_code, enum rtx_code));
static rtx do_store_flag PROTO((tree, rtx, enum machine_mode, int));
@ -10246,7 +10246,7 @@ do_jump_by_parts_equality (exp, if_false_label, if_true_label)
We assume that OP0 has an integer mode that is too wide
for the available compare insns. */
static void
void
do_jump_by_parts_equality_rtx (op0, if_false_label, if_true_label)
rtx op0;
rtx if_false_label, if_true_label;

View File

@ -131,6 +131,10 @@ extern int pending_stack_adjust;
until no longer needed. CLEANUP_POINT_EXPRs define the lifetime
of TARGET_EXPRs. */
extern int target_temp_slot_level;
/* Current level for normal temporaries. */
extern int temp_slot_level;
#ifdef TREE_CODE /* Don't lose if tree.h not included. */
/* Structure to record the size of a sequence of arguments

View File

@ -2902,9 +2902,15 @@ alter_subreg (x)
register rtx x;
{
register rtx y = SUBREG_REG (x);
if (GET_CODE (y) == SUBREG)
y = alter_subreg (y);
/* If reload is operating, we may be replacing inside this SUBREG.
Check for that and make a new one if so. */
if (reload_in_progress && find_replacement (&SUBREG_REG (x)) != 0)
x = copy_rtx (x);
if (GET_CODE (y) == REG)
{
/* If the word size is larger than the size of this register,

View File

@ -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

View File

@ -3923,6 +3923,7 @@ fold (expr)
&& (! TREE_SIDE_EFFECTS (arg0) || current_function_decl != 0))
{
tree test, true_value, false_value;
tree lhs = 0, rhs = 0;
if (TREE_CODE (arg1) == COND_EXPR)
{
@ -3945,26 +3946,37 @@ fold (expr)
to make this SAVE_EXPR. Since we do this optimization
primarily to see if we do end up with constant and this
SAVE_EXPR interferes with later optimizations, suppressing
it when we can is important. */
it when we can is important.
if (TREE_CODE (arg0) != SAVE_EXPR
If we are not in a function, we can't make a SAVE_EXPR, so don't
try to do so. Don't try to see if the result is a constant
if an arm is a COND_EXPR since we get exponential behavior
in that case. */
if (TREE_CODE (arg0) != SAVE_EXPR && ! TREE_CONSTANT (arg0)
&& current_function_decl != 0
&& ((TREE_CODE (arg0) != VAR_DECL
&& TREE_CODE (arg0) != PARM_DECL)
|| TREE_SIDE_EFFECTS (arg0)))
{
tree lhs = fold (build (code, type, arg0, true_value));
tree rhs = fold (build (code, type, arg0, false_value));
if (TREE_CODE (true_value) != COND_EXPR)
lhs = fold (build (code, type, arg0, true_value));
if (TREE_CONSTANT (lhs) || TREE_CONSTANT (rhs))
return fold (build (COND_EXPR, type, test, lhs, rhs));
if (TREE_CODE (false_value) != COND_EXPR)
rhs = fold (build (code, type, arg0, false_value));
if (current_function_decl != 0)
arg0 = save_expr (arg0);
if ((lhs == 0 || ! TREE_CONSTANT (lhs))
&& (rhs == 0 || !TREE_CONSTANT (rhs)))
arg0 = save_expr (arg0), lhs = rhs = 0;
}
test = fold (build (COND_EXPR, type, test,
fold (build (code, type, arg0, true_value)),
fold (build (code, type, arg0, false_value))));
if (lhs == 0)
lhs = fold (build (code, type, arg0, true_value));
if (rhs == 0)
rhs = fold (build (code, type, arg0, false_value));
test = fold (build (COND_EXPR, type, test, lhs, rhs));
if (TREE_CODE (arg0) == SAVE_EXPR)
return build (COMPOUND_EXPR, type,
convert (void_type_node, arg0),
@ -3982,6 +3994,7 @@ fold (expr)
&& (! TREE_SIDE_EFFECTS (arg1) || current_function_decl != 0))
{
tree test, true_value, false_value;
tree lhs = 0, rhs = 0;
if (TREE_CODE (arg0) == COND_EXPR)
{
@ -3997,25 +4010,30 @@ fold (expr)
false_value = convert (testtype, integer_zero_node);
}
if (TREE_CODE (arg1) != SAVE_EXPR
if (TREE_CODE (arg1) != SAVE_EXPR && ! TREE_CONSTANT (arg0)
&& current_function_decl != 0
&& ((TREE_CODE (arg1) != VAR_DECL
&& TREE_CODE (arg1) != PARM_DECL)
|| TREE_SIDE_EFFECTS (arg1)))
{
tree lhs = fold (build (code, type, true_value, arg1));
tree rhs = fold (build (code, type, false_value, arg1));
if (TREE_CODE (true_value) != COND_EXPR)
lhs = fold (build (code, type, true_value, arg1));
if (TREE_CONSTANT (lhs) || TREE_CONSTANT (rhs)
|| TREE_CONSTANT (arg1))
return fold (build (COND_EXPR, type, test, lhs, rhs));
if (TREE_CODE (false_value) != COND_EXPR)
rhs = fold (build (code, type, false_value, arg1));
if (current_function_decl != 0)
arg1 = save_expr (arg1);
if ((lhs == 0 || ! TREE_CONSTANT (lhs))
&& (rhs == 0 || !TREE_CONSTANT (rhs)))
arg1 = save_expr (arg1), lhs = rhs = 0;
}
test = fold (build (COND_EXPR, type, test,
fold (build (code, type, true_value, arg1)),
fold (build (code, type, false_value, arg1))));
if (lhs == 0)
lhs = fold (build (code, type, true_value, arg1));
if (rhs == 0)
rhs = fold (build (code, type, false_value, arg1));
test = fold (build (COND_EXPR, type, test, lhs, rhs));
if (TREE_CODE (arg1) == SAVE_EXPR)
return build (COMPOUND_EXPR, type,
convert (void_type_node, arg1),

View File

@ -390,6 +390,12 @@ int temp_slot_level;
/* Current nesting level for variables in a block. */
int var_temp_slot_level;
/* When temporaries are created by TARGET_EXPRs, they are created at
this level of temp_slot_level, so that they can remain allocated
until no longer needed. CLEANUP_POINT_EXPRs define the lifetime
of TARGET_EXPRs. */
int target_temp_slot_level;
/* 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;

View File

@ -3734,12 +3734,6 @@ no effect. As soon as all of the machine descriptions are
modified to have the appropriate number of arguments, this macro
will be removed.
@findex NO_STAB_H
@item NO_STAB_H
Define this if your system does not have the include file
@file{stab.h}. If @samp{USG} is defined, @samp{NO_STAB_H} is
assumed.
@findex PATH_SEPARATOR
@item PATH_SEPARATOR
Define this macro to be a C character constant representing the

View File

@ -1,13 +1,13 @@
/* Getopt for GNU.
NOTE: getopt is now part of the C library, so if you don't know what
"Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
"Keep this file name-space clean" means, talk to drepper@gnu.org
before changing it!
Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97
Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98
Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
Bugs can be reported to bug-glibc@gnu.org.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@ -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')

View File

@ -2,7 +2,7 @@
Copyright (C) 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
Bugs can be reported to bug-glibc@gnu.org.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the

View File

@ -1,8 +1,9 @@
/* getopt_long and getopt_long_only entry points for GNU getopt.
Copyright (C) 1987,88,89,90,91,92,93,94,96,97 Free Software Foundation, Inc.
Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98
Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
Bugs can be reported to bug-glibc@gnu.org.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@ -25,7 +26,7 @@
#include "getopt.h"
#if !defined (__STDC__) || !__STDC__
#if !defined __STDC__ || !__STDC__
/* This is a separate conditional since some stdc systems
reject `defined (const)'. */
#ifndef const
@ -44,7 +45,7 @@
it is simpler to just do this in the source for each such file. */
#define GETOPT_INTERFACE_VERSION 2
#if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2
#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
#include <gnu-versions.h>
#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
#define ELIDE_CODE

View File

@ -74,7 +74,7 @@ see @ref{Cross-Compiler}.)
Here is an example:
@smallexample
./configure --build=sparc-sun-sunos4.1
./configure --host=sparc-sun-sunos4.1
@end smallexample
A configuration name may be canonical or it may be more or less

View File

@ -119,7 +119,8 @@ in the following sections.
-Wcast-align -Wcast-qual -Wchar-subscript -Wcomment
-Wconversion -Werror -Wformat
-Wid-clash-@var{len} -Wimplicit -Wimplicit-int
-Wimplicit-function-declarations -Wimport -Winline
-Wimplicit-function-declaration -Wimport
-Werror-implicit-function-declaration -Winline
-Wlarger-than-@var{len} -Wmain -Wmissing-declarations
-Wmissing-prototypes -Wnested-externs -Wno-import
-Wold-style-cast -Woverloaded-virtual -Wparentheses
@ -1269,8 +1270,10 @@ specified.
@item -Wimplicit-int
Warn when a declaration does not specify a type.
@item -Wimplicit-function-declarations
Warn whenever a function is used before being declared.
@item -Wimplicit-function-declaration
@itemx -Werror-implicit-function-declaration
Give a warning (or error) whenever a function is used before being
declared.
@item -Wimplicit
Same as @samp{-Wimplicit-int} and @samp{-Wimplicit-function-}@*
@ -1963,6 +1966,21 @@ Dump after instruction combination, to the file @file{@var{file}.combine}.
@item d
Dump after delayed branch scheduling, to @file{@var{file}.dbr}.
@item D
Dump all macro definitions, at the end of preprocessing, in addition to
normal output.
@item y
Dump debugging information during parsing, to standard error.
@item r
Dump after RTL generation, to @file{@var{file}.rtl}.
@item x
Just generate RTL for a function instead of compiling it. Usually used
with @samp{r}.
@item j
Dump after first jump optimization, to @file{@var{file}.jump}.
@item s
Dump after CSE (including the jump optimization that sometimes
follows CSE), to @file{@var{file}.cse}.
@item F
Dump after purging ADDRESSOF, to @file{@var{file}.addressof}.
@item f
Dump after flow analysis, to @file{@var{file}.flow}.

View File

@ -3682,7 +3682,6 @@ label:
#endif /* DWARF2_UNWIND_INFO */
#endif /* L_eh */
#ifdef L_pure
#ifndef inhibit_libc

View File

@ -480,6 +480,8 @@ loop_optimize (f, dumpfile, unroll_p)
/* See if we went too far. */
if (get_max_uid () > max_uid_for_loop)
abort ();
/* Now reset it to the actual size we need. See above. */
max_uid_for_loop = get_max_uid () + 1;
/* Compute the mapping from uids to luids.
LUIDs are numbers assigned to insns, like uids,
@ -4115,7 +4117,8 @@ strength_reduce (scan_start, end, loop_top, insn_count,
/* We don't handle reversed biv's because bl->biv->insn
does not have a valid INSN_LUID. */
&& ! bl->reversed
&& v->always_executed && ! v->maybe_multiple)
&& v->always_executed && ! v->maybe_multiple
&& INSN_UID (v->insn) < max_uid_for_loop)
{
/* If other giv's have been combined with this one, then
this will work only if all uses of the other giv's occur

View File

@ -1,4 +1,4 @@
@c Copyright (C) 1988,89,92,93,94,96 Free Software Foundation, Inc.
@c Copyright (C) 1988, 89, 92, 93, 94, 96, 1998 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.
@ -2184,8 +2184,8 @@ The above discussion also applies to the @samp{mov@var{mode}cc} and
@item @samp{call}
Subroutine call instruction returning no value. Operand 0 is the
function to call; operand 1 is the number of bytes of arguments pushed
(in mode @code{SImode}, except it is normally a @code{const_int});
operand 2 is the number of registers used as operands.
as a @code{const_int}; operand 2 is the number of registers used as
operands.
On most machines, operand 2 is not actually stored into the RTL
pattern. It is supplied for the sake of some RISC machines which need

File diff suppressed because it is too large Load Diff

View File

@ -2024,8 +2024,14 @@ label: CASE expr_no_commas ':'
if (value != error_mark_node)
{
tree duplicate;
int success = pushcase (value, convert_and_check,
label, &duplicate);
int success;
if (pedantic && ! INTEGRAL_TYPE_P (TREE_TYPE (value)))
pedwarn ("label must have integral type in ANSI C");
success = pushcase (value, convert_and_check,
label, &duplicate);
if (success == 1)
error ("case label not within a switch statement");
else if (success == 2)

View File

@ -3,7 +3,7 @@
NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
Bugs can be reported to bug-glibc@gnu.org.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the

View File

@ -3,7 +3,7 @@
NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
Bugs can be reported to bug-glibc@gnu.org.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the

View File

@ -1,6 +1,6 @@
/* real.c - implementation of REAL_ARITHMETIC, REAL_VALUE_ATOF,
and support for XFmode IEEE extended real floating point arithmetic.
Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
Copyright (C) 1993, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
Contributed by Stephen L. Moshier (moshier@world.std.com).
This file is part of GNU CC.
@ -112,6 +112,10 @@ netlib.att.com: netlib/cephes. */
/* IBM System/370 style */
#define IBM 1
#else /* it's also not an IBM */
#if TARGET_FLOAT_FORMAT == C4X_FLOAT_FORMAT
/* TMS320C3x/C4x style */
#define C4X 1
#else /* it's also not a C4X */
#if TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT
#define IEEE
#else /* it's not IEEE either */
@ -119,6 +123,7 @@ netlib.att.com: netlib/cephes. */
unknown arithmetic type
#define UNK 1
#endif /* not IEEE */
#endif /* not C4X */
#endif /* not IBM */
#endif /* not VAX */
@ -153,7 +158,7 @@ unknown arithmetic type
/* Define INFINITY for support of infinity.
Define NANS for support of Not-a-Number's (NaN's). */
#if !defined(DEC) && !defined(IBM)
#if !defined(DEC) && !defined(IBM) && !defined(C4X)
#define INFINITY
#define NANS
#endif
@ -288,7 +293,7 @@ do { \
#endif /* not REAL_ARITHMETIC */
#endif /* not TFmode */
#endif /* no XFmode */
#endif /* not XFmode */
/* Number of 16 bit words in internal format */
@ -418,6 +423,14 @@ static void etoibm PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *,
static void toibm PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *,
enum machine_mode));
#endif
#ifdef C4X
static void c4xtoe PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *,
enum machine_mode));
static void etoc4x PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *,
enum machine_mode));
static void toc4x PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *,
enum machine_mode));
#endif
static void make_nan PROTO((unsigned EMUSHORT *, int, enum machine_mode));
#if 0
static void uditoe PROTO((unsigned EMUSHORT *, unsigned EMUSHORT *));
@ -443,7 +456,6 @@ endian (e, x, mode)
{
switch (mode)
{
case TFmode:
/* Swap halfwords in the fourth long. */
th = (unsigned long) e[6] & 0xffff;
@ -452,7 +464,6 @@ endian (e, x, mode)
x[3] = (long) t;
case XFmode:
/* Swap halfwords in the third long. */
th = (unsigned long) e[4] & 0xffff;
t = (unsigned long) e[5] & 0xffff;
@ -461,18 +472,16 @@ endian (e, x, mode)
/* fall into the double case */
case DFmode:
/* swap halfwords in the second word */
/* Swap halfwords in the second word. */
th = (unsigned long) e[2] & 0xffff;
t = (unsigned long) e[3] & 0xffff;
t |= th << 16;
x[1] = (long) t;
/* fall into the float case */
case HFmode:
case SFmode:
/* swap halfwords in the first word */
case HFmode:
/* Swap halfwords in the first word. */
th = (unsigned long) e[0] & 0xffff;
t = (unsigned long) e[1] & 0xffff;
t |= th << 16;
@ -489,9 +498,7 @@ endian (e, x, mode)
switch (mode)
{
case TFmode:
/* Pack the fourth long. */
th = (unsigned long) e[7] & 0xffff;
t = (unsigned long) e[6] & 0xffff;
@ -499,7 +506,6 @@ endian (e, x, mode)
x[3] = (long) t;
case XFmode:
/* Pack the third long.
Each element of the input REAL_VALUE_TYPE array has 16 useful bits
in it. */
@ -510,18 +516,16 @@ endian (e, x, mode)
/* fall into the double case */
case DFmode:
/* pack the second long */
/* Pack the second long */
th = (unsigned long) e[3] & 0xffff;
t = (unsigned long) e[2] & 0xffff;
t |= th << 16;
x[1] = (long) t;
/* fall into the float case */
case HFmode:
case SFmode:
/* pack the first long */
case HFmode:
/* Pack the first long */
th = (unsigned long) e[1] & 0xffff;
t = (unsigned long) e[0] & 0xffff;
t |= th << 16;
@ -678,18 +682,22 @@ ereal_atof (s, t)
asctoe24 (s, tem);
e24toe (tem, e);
break;
case DFmode:
asctoe53 (s, tem);
e53toe (tem, e);
break;
case XFmode:
asctoe64 (s, tem);
e64toe (tem, e);
break;
case TFmode:
asctoe113 (s, tem);
e113toe (tem, e);
break;
default:
asctoe (s, e);
}
@ -1027,8 +1035,8 @@ real_value_truncate (mode, arg)
e53toe (t, t);
break;
case HFmode:
case SFmode:
case HFmode:
etoe24 (e, t);
e24toe (t, t);
break;
@ -2460,6 +2468,7 @@ emdnorm (s, lost, subflg, exp, rcntrl)
re = rw - 1;
rebit = 1;
break;
case 113:
rw = 10;
rmsk = 0x7fff;
@ -2467,6 +2476,7 @@ emdnorm (s, lost, subflg, exp, rcntrl)
rebit = 0x8000;
re = rw;
break;
case 64:
rw = 7;
rmsk = 0xffff;
@ -2474,6 +2484,7 @@ emdnorm (s, lost, subflg, exp, rcntrl)
re = rw - 1;
rebit = 1;
break;
/* For DEC or IBM arithmetic */
case 56:
rw = 6;
@ -2482,6 +2493,7 @@ emdnorm (s, lost, subflg, exp, rcntrl)
rebit = 0x100;
re = rw;
break;
case 53:
rw = 6;
rmsk = 0x7ff;
@ -2489,6 +2501,16 @@ emdnorm (s, lost, subflg, exp, rcntrl)
rebit = 0x800;
re = rw;
break;
/* For C4x arithmetic */
case 32:
rw = 5;
rmsk = 0xffff;
rmbit = 0x8000;
rebit = 1;
re = rw - 1;
break;
case 24:
rw = 4;
rmsk = 0xff;
@ -2984,6 +3006,11 @@ e53toe (pe, y)
ibmtoe (pe, y, DFmode);
#else
#ifdef C4X
c4xtoe (pe, y, HFmode);
#else
register unsigned EMUSHORT r;
register unsigned EMUSHORT *e, *p;
@ -3060,13 +3087,15 @@ e53toe (pe, y)
#endif
eshift (yy, -5);
if (denorm)
{ /* if zero exponent, then normalize the significand */
{
/* If zero exponent, then normalize the significand. */
if ((k = enormlz (yy)) > NBITS)
ecleazs (yy);
else
yy[E] -= (unsigned EMUSHORT) (k - 1);
}
emovo (yy, y);
#endif /* not C4X */
#endif /* not IBM */
#endif /* not DEC */
}
@ -3289,6 +3318,13 @@ e24toe (pe, y)
ibmtoe (pe, y, SFmode);
#else
#ifdef C4X
c4xtoe (pe, y, QFmode);
#else
register unsigned EMUSHORT r;
register unsigned EMUSHORT *e, *p;
unsigned EMUSHORT yy[NI];
@ -3370,6 +3406,7 @@ e24toe (pe, y)
yy[E] -= (unsigned EMUSHORT) (k - 1);
}
emovo (yy, y);
#endif /* not C4X */
#endif /* not IBM */
}
@ -3654,7 +3691,28 @@ toe53 (x, y)
toibm (x, y, DFmode);
}
#else /* it's neither DEC nor IBM */
#else /* it's neither DEC nor IBM */
#ifdef C4X
/* Convert e-type X to C4X-format double E. */
static void
etoe53 (x, e)
unsigned EMUSHORT *x, *e;
{
etoc4x (x, e, HFmode);
}
/* Convert exploded e-type X, that has already been rounded to
56-bit precision, to IBM 370 double Y. */
static void
toe53 (x, y)
unsigned EMUSHORT *x, *y;
{
toc4x (x, y, HFmode);
}
#else /* it's neither DEC nor IBM nor C4X */
/* Convert e-type X to IEEE double E. */
@ -3778,6 +3836,7 @@ toe53 (x, y)
}
}
#endif /* not C4X */
#endif /* not IBM */
#endif /* not DEC */
@ -3806,6 +3865,29 @@ toe24 (x, y)
}
#else
#ifdef C4X
/* Convert e-type X to C4X float E. */
static void
etoe24 (x, e)
unsigned EMUSHORT *x, *e;
{
etoc4x (x, e, QFmode);
}
/* Convert exploded e-type X, that has already been rounded to
float precision, to IBM 370 float Y. */
static void
toe24 (x, y)
unsigned EMUSHORT *x, *y;
{
toc4x (x, y, QFmode);
}
#else
/* Convert e-type X to IEEE float E. DEC float is the same as IEEE float. */
static void
@ -3931,6 +4013,7 @@ toe24 (x, y)
}
#endif
}
#endif /* not C4X */
#endif /* not IBM */
/* Compare two e type numbers.
@ -4878,9 +4961,13 @@ asctoe53 (s, y)
{
#if defined(DEC) || defined(IBM)
asctoeg (s, y, 56);
#else
#if defined(C4X)
asctoeg (s, y, 32);
#else
asctoeg (s, y, 53);
#endif
#endif
}
@ -5188,13 +5275,18 @@ read_expnt:
/* Round and convert directly to the destination type */
if (oprec == 53)
lexp -= EXONE - 0x3ff;
#ifdef C4X
else if (oprec == 24 || oprec == 32)
lexp -= (EXONE - 0x7f);
#else
#ifdef IBM
else if (oprec == 24 || oprec == 56)
lexp -= EXONE - (0x41 << 2);
#else
else if (oprec == 24)
lexp -= EXONE - 0177;
#endif
#endif /* IBM */
#endif /* C4X */
#ifdef DEC
else if (oprec == 56)
lexp -= EXONE - 0201;
@ -5218,6 +5310,12 @@ read_expnt:
toibm (yy, y, DFmode);
break;
#endif
#ifdef C4X
case 32:
toc4x (yy, y, HFmode);
break;
#endif
case 53:
toe53 (yy, y);
break;
@ -5709,6 +5807,254 @@ toibm (x, y, mode)
}
#endif /* IBM */
#ifdef C4X
/* Convert C4X single/double precision to e type. */
static void
c4xtoe (d, e, mode)
unsigned EMUSHORT *d;
unsigned EMUSHORT *e;
enum machine_mode mode;
{
unsigned EMUSHORT y[NI];
int r;
int rndsav;
int isnegative;
int size;
int i;
int carry;
/* Short-circuit the zero case. */
if ((d[0] == 0x8000)
&& (d[1] == 0x0000)
&& ((mode == QFmode) || ((d[2] == 0x0000) && (d[3] == 0x0000))))
{
e[0] = 0;
e[1] = 0;
e[2] = 0;
e[3] = 0;
e[4] = 0;
e[5] = 0;
return;
}
ecleaz (y); /* start with a zero */
r = d[0]; /* get sign/exponent part */
if (r & (unsigned int) 0x0080)
{
y[0] = 0xffff; /* fill in our sign */
isnegative = TRUE;
}
else
{
isnegative = FALSE;
}
r >>= 8; /* Shift exponent word down 8 bits. */
if (r & 0x80) /* Make the exponent negative if it is. */
{
r = r | (~0 & ~0xff);
}
if (isnegative)
{
/* Now do the high order mantissa. We don't "or" on the high bit
because it is 2 (not 1) and is handled a little differently
below. */
y[M] = d[0] & 0x7f;
y[M+1] = d[1];
if (mode != QFmode) /* There are only 2 words in QFmode. */
{
y[M+2] = d[2]; /* Fill in the rest of our mantissa. */
y[M+3] = d[3];
size = 4;
}
else
{
size = 2;
}
eshift(y, -8);
/* Now do the two's complement on the data. */
carry = 1; /* Initially add 1 for the two's complement. */
for (i=size + M; i > M; i--)
{
if (carry && (y[i] == 0x0000))
{
/* We overflowed into the next word, carry is the same. */
y[i] = carry ? 0x0000 : 0xffff;
}
else
{
/* No overflow, just invert and add carry. */
y[i] = ((~y[i]) + carry) & 0xffff;
carry = 0;
}
}
if (carry)
{
eshift(y, -1);
y[M+1] |= 0x8000;
r++;
}
y[1] = r + EXONE;
}
else
{
/* Add our e type exponent offset to form our exponent. */
r += EXONE;
y[1] = r;
/* Now do the high order mantissa strip off the exponent and sign
bits and add the high 1 bit. */
y[M] = d[0] & 0x7f | 0x80;
y[M+1] = d[1];
if (mode != QFmode) /* There are only 2 words in QFmode. */
{
y[M+2] = d[2]; /* Fill in the rest of our mantissa. */
y[M+3] = d[3];
}
eshift(y, -8);
}
emovo (y, e);
}
/* Convert e type to C4X single/double precision. */
static void
etoc4x (x, d, mode)
unsigned EMUSHORT *x, *d;
enum machine_mode mode;
{
unsigned EMUSHORT xi[NI];
EMULONG exp;
int rndsav;
emovi (x, xi);
/* Adjust exponent for offsets. */
exp = (EMULONG) xi[E] - (EXONE - 0x7f);
/* Round off to nearest or even. */
rndsav = rndprc;
rndprc = mode == QFmode ? 24 : 32;
emdnorm (xi, 0, 0, exp, 64);
rndprc = rndsav;
toc4x (xi, d, mode);
}
static void
toc4x (x, y, mode)
unsigned EMUSHORT *x, *y;
enum machine_mode mode;
{
int i;
int r;
int v;
int carry;
/* Short-circuit the zero case */
if ((x[0] == 0) /* Zero exponent and sign */
&& (x[1] == 0)
&& (x[M] == 0) /* The rest is for zero mantissa */
&& (x[M+1] == 0)
/* Only check for double if necessary */
&& ((mode == QFmode) || ((x[M+2] == 0) && (x[M+3] == 0))))
{
/* We have a zero. Put it into the output and return. */
*y++ = 0x8000;
*y++ = 0x0000;
if (mode != QFmode)
{
*y++ = 0x0000;
*y++ = 0x0000;
}
return;
}
*y = 0;
/* Negative number require a two's complement conversion of the
mantissa. */
if (x[0])
{
*y = 0x0080;
i = ((int) x[1]) - 0x7f;
/* Now add 1 to the inverted data to do the two's complement. */
if (mode != QFmode)
v = 4 + M;
else
v = 2 + M;
carry = 1;
while (v > M)
{
if (x[v] == 0x0000)
{
x[v] = carry ? 0x0000 : 0xffff;
}
else
{
x[v] = ((~x[v]) + carry) & 0xffff;
carry = 0;
}
v--;
}
/* The following is a special case. The C4X negative float requires
a zero in the high bit (because the format is (2 - x) x 2^m), so
if a one is in that bit, we have to shift left one to get rid
of it. This only occurs if the number is -1 x 2^m. */
if (x[M+1] & 0x8000)
{
/* This is the case of -1 x 2^m, we have to rid ourselves of the
high sign bit and shift the exponent. */
eshift(x, 1);
i--;
}
}
else
{
i = ((int) x[1]) - 0x7f;
}
if ((i < -128) || (i > 127))
{
y[0] |= 0xff7f;
y[1] = 0xffff;
if (mode != QFmode)
{
y[2] = 0xffff;
y[3] = 0xffff;
}
#ifdef ERANGE
errno = ERANGE;
#endif
return;
}
y[0] |= ((i & 0xff) << 8);
eshift (x, 8);
y[0] |= x[M] & 0x7f;
y[1] = x[M + 1];
if (mode != QFmode)
{
y[2] = x[M + 2];
y[3] = x[M + 3];
}
}
#endif /* C4X */
/* Output a binary NaN bit pattern in the target machine's format. */
/* If special NaN bit patterns are required, define them in tm.h
@ -5766,7 +6112,7 @@ make_nan (nan, sign, mode)
{
/* Possibly the `reserved operand' patterns on a VAX can be
used like NaN's, but probably not in the same way as IEEE. */
#if !defined(DEC) && !defined(IBM)
#if !defined(DEC) && !defined(IBM) && !defined(C4X)
case TFmode:
n = 8;
if (REAL_WORDS_BIG_ENDIAN)
@ -5774,6 +6120,7 @@ make_nan (nan, sign, mode)
else
p = TFlittlenan;
break;
case XFmode:
n = 6;
if (REAL_WORDS_BIG_ENDIAN)
@ -5781,6 +6128,7 @@ make_nan (nan, sign, mode)
else
p = XFlittlenan;
break;
case DFmode:
n = 4;
if (REAL_WORDS_BIG_ENDIAN)
@ -5788,8 +6136,9 @@ make_nan (nan, sign, mode)
else
p = DFlittlenan;
break;
case HFmode:
case SFmode:
case HFmode:
n = 2;
if (REAL_WORDS_BIG_ENDIAN)
p = SFbignan;
@ -5797,6 +6146,7 @@ make_nan (nan, sign, mode)
p = SFlittlenan;
break;
#endif
default:
abort ();
}
@ -6349,6 +6699,11 @@ significand_size (mode)
switch (GET_MODE_BITSIZE (mode))
{
case 32:
#if TARGET_FLOAT_FORMAT == C4X_FLOAT_FORMAT
return 56;
#endif
return 24;
case 64:
@ -6360,10 +6715,14 @@ switch (GET_MODE_BITSIZE (mode))
#else
#if TARGET_FLOAT_FORMAT == VAX_FLOAT_FORMAT
return 56;
#else
#if TARGET_FLOAT_FORMAT == C4X_FLOAT_FORMAT
return 56;
#else
abort ();
#endif
#endif
#endif
#endif
case 96:

View File

@ -26,6 +26,7 @@ Boston, MA 02111-1307, USA. */
#define IEEE_FLOAT_FORMAT 1
#define VAX_FLOAT_FORMAT 2
#define IBM_FLOAT_FORMAT 3
#define C4X_FLOAT_FORMAT 4
/* Default to IEEE float if not specified. Nearly all machines use it. */

View File

@ -128,6 +128,8 @@ a register with any other reload. */
reload_optional char, nonzero for an optional reload.
Optional reloads are ignored unless the
value is already sitting in a register.
reload_nongroup char, nonzero when a reload must use a register
not already allocated to a group.
reload_inc int, positive amount to increment or decrement by if
reload_in is a PRE_DEC, PRE_INC, POST_DEC, POST_INC.
Ignored otherwise (don't assume it is zero).
@ -175,6 +177,7 @@ enum machine_mode reload_inmode[MAX_RELOADS];
enum machine_mode reload_outmode[MAX_RELOADS];
rtx reload_reg_rtx[MAX_RELOADS];
char reload_optional[MAX_RELOADS];
char reload_nongroup[MAX_RELOADS];
int reload_inc[MAX_RELOADS];
rtx reload_in_reg[MAX_RELOADS];
char reload_nocombine[MAX_RELOADS];
@ -527,6 +530,7 @@ push_secondary_reload (in_p, x, opnum, optional, reload_class, reload_mode,
reload_outmode[t_reload] = ! in_p ? t_mode : VOIDmode;
reload_reg_rtx[t_reload] = 0;
reload_optional[t_reload] = optional;
reload_nongroup[t_reload] = 0;
reload_inc[t_reload] = 0;
/* Maybe we could combine these, but it seems too tricky. */
reload_nocombine[t_reload] = 1;
@ -595,6 +599,7 @@ push_secondary_reload (in_p, x, opnum, optional, reload_class, reload_mode,
reload_outmode[s_reload] = ! in_p ? mode : VOIDmode;
reload_reg_rtx[s_reload] = 0;
reload_optional[s_reload] = optional;
reload_nongroup[s_reload] = 0;
reload_inc[s_reload] = 0;
/* Maybe we could combine these, but it seems too tricky. */
reload_nocombine[s_reload] = 1;
@ -1271,6 +1276,7 @@ push_reload (in, out, inloc, outloc, class,
reload_outmode[i] = outmode;
reload_reg_rtx[i] = 0;
reload_optional[i] = optional;
reload_nongroup[i] = 0;
reload_inc[i] = 0;
reload_nocombine[i] = 0;
reload_in_reg[i] = inloc ? *inloc : 0;
@ -2315,6 +2321,7 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
int goal_alternative_swapped;
int best;
int commutative;
int changed;
char operands_match[MAX_RECOG_OPERANDS][MAX_RECOG_OPERANDS];
rtx substed_operand[MAX_RECOG_OPERANDS];
rtx body = PATTERN (insn);
@ -3970,6 +3977,67 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
reload_in[j] = 0;
}
/* Set which reloads must use registers not used in any group. Start
with those that conflict with a group and then include ones that
conflict with ones that are already known to conflict with a group. */
changed = 0;
for (i = 0; i < n_reloads; i++)
{
enum machine_mode mode = reload_inmode[i];
enum reg_class class = reload_reg_class[i];
int size;
if (GET_MODE_SIZE (reload_outmode[i]) > GET_MODE_SIZE (mode))
mode = reload_outmode[i];
size = CLASS_MAX_NREGS (class, mode);
if (size == 1)
for (j = 0; j < n_reloads; j++)
if ((CLASS_MAX_NREGS (reload_reg_class[j],
(GET_MODE_SIZE (reload_outmode[j])
> GET_MODE_SIZE (reload_inmode[j]))
? reload_outmode[j] : reload_inmode[j])
> 1)
&& !reload_optional[j]
&& (reload_in[j] != 0 || reload_out[j] != 0
|| reload_secondary_p[j])
&& reloads_conflict (i, j)
&& reg_classes_intersect_p (class, reload_reg_class[j]))
{
reload_nongroup[i] = 1;
changed = 1;
break;
}
}
while (changed)
{
changed = 0;
for (i = 0; i < n_reloads; i++)
{
enum machine_mode mode = reload_inmode[i];
enum reg_class class = reload_reg_class[i];
int size;
if (GET_MODE_SIZE (reload_outmode[i]) > GET_MODE_SIZE (mode))
mode = reload_outmode[i];
size = CLASS_MAX_NREGS (class, mode);
if (! reload_nongroup[i] && size == 1)
for (j = 0; j < n_reloads; j++)
if (reload_nongroup[j]
&& reloads_conflict (i, j)
&& reg_classes_intersect_p (class, reload_reg_class[j]))
{
reload_nongroup[i] = 1;
changed = 1;
break;
}
}
}
#else /* no REGISTER_CONSTRAINTS */
int noperands;
int insn_code_number;
@ -6277,6 +6345,9 @@ debug_reload_to_stream (f)
if (reload_optional[r])
fprintf (f, ", optional");
if (reload_nongroup[r])
fprintf (stderr, ", nongroup");
if (reload_inc[r] != 0)
fprintf (f, ", inc by %d", reload_inc[r]);

View File

@ -1,5 +1,5 @@
/* Communication between reload.c and reload1.c.
Copyright (C) 1987, 91-95, 1997, 1998 Free Software Foundation, Inc.
Copyright (C) 1987, 91-95, 97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@ -59,6 +59,7 @@ extern enum reg_class reload_reg_class[MAX_RELOADS];
extern enum machine_mode reload_inmode[MAX_RELOADS];
extern enum machine_mode reload_outmode[MAX_RELOADS];
extern char reload_optional[MAX_RELOADS];
extern char reload_nongroup[MAX_RELOADS];
extern int reload_inc[MAX_RELOADS];
extern int reload_opnum[MAX_RELOADS];
extern int reload_secondary_p[MAX_RELOADS];

View File

@ -1,5 +1,5 @@
/* Reload pseudo regs into hard regs for insns that require hard regs.
Copyright (C) 1987, 88, 89, 92-7 1998 Free Software Foundation, Inc.
Copyright (C) 1987, 88, 89, 92-97, 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
@ -378,7 +378,6 @@ static void clear_reload_reg_in_use PROTO((int, int, enum reload_type,
static int reload_reg_free_p PROTO((int, int, enum reload_type));
static int reload_reg_free_before_p PROTO((int, int, enum reload_type));
static int reload_reg_reaches_end_p PROTO((int, int, enum reload_type));
static int reloads_conflict PROTO((int, int));
static int allocate_reload_reg PROTO((int, rtx, int, int));
static void choose_reload_regs PROTO((rtx, rtx));
static void merge_assigned_reloads PROTO((rtx));
@ -1165,7 +1164,6 @@ reload (first, global, dumpfile)
enum reg_class class = reload_reg_class[i];
int size;
enum machine_mode mode;
int nongroup_need;
struct needs *this_needs;
/* Don't count the dummy reloads, for which one of the
@ -1193,31 +1191,6 @@ reload (first, global, dumpfile)
mode = reload_outmode[i];
size = CLASS_MAX_NREGS (class, mode);
/* If this class doesn't want a group, determine if we have
a nongroup need or a regular need. We have a nongroup
need if this reload conflicts with a group reload whose
class intersects with this reload's class. */
nongroup_need = 0;
if (size == 1)
for (j = 0; j < n_reloads; j++)
if ((CLASS_MAX_NREGS (reload_reg_class[j],
(GET_MODE_SIZE (reload_outmode[j])
> GET_MODE_SIZE (reload_inmode[j]))
? reload_outmode[j]
: reload_inmode[j])
> 1)
&& (!reload_optional[j])
&& (reload_in[j] != 0 || reload_out[j] != 0
|| reload_secondary_p[j])
&& reloads_conflict (i, j)
&& reg_classes_intersect_p (class,
reload_reg_class[j]))
{
nongroup_need = 1;
break;
}
/* Decide which time-of-use to count this reload for. */
switch (reload_when_needed[i])
{
@ -1295,10 +1268,10 @@ reload (first, global, dumpfile)
}
else if (size == 1)
{
this_needs->regs[nongroup_need][(int) class] += 1;
this_needs->regs[reload_nongroup[i]][(int) class] += 1;
p = reg_class_superclasses[(int) class];
while (*p != LIM_REG_CLASSES)
this_needs->regs[nongroup_need][(int) *p++] += 1;
this_needs->regs[reload_nongroup[i]][(int) *p++] += 1;
}
else
abort ();
@ -1406,20 +1379,21 @@ reload (first, global, dumpfile)
if (GET_CODE (insn) == CALL_INSN
&& caller_save_spill_class != NO_REGS)
{
/* See if this register would conflict with any reload
that needs a group. */
/* See if this register would conflict with any reload that
needs a group or any reload that needs a nongroup. */
int nongroup_need = 0;
int *caller_save_needs;
for (j = 0; j < n_reloads; j++)
if ((CLASS_MAX_NREGS (reload_reg_class[j],
(GET_MODE_SIZE (reload_outmode[j])
> GET_MODE_SIZE (reload_inmode[j]))
? reload_outmode[j]
: reload_inmode[j])
> 1)
&& reg_classes_intersect_p (caller_save_spill_class,
reload_reg_class[j]))
if (reg_classes_intersect_p (caller_save_spill_class,
reload_reg_class[j])
&& ((CLASS_MAX_NREGS
(reload_reg_class[j],
(GET_MODE_SIZE (reload_outmode[j])
> GET_MODE_SIZE (reload_inmode[j]))
? reload_outmode[j] : reload_inmode[j])
> 1)
|| reload_nongroup[j]))
{
nongroup_need = 1;
break;
@ -4910,7 +4884,7 @@ reload_reg_reaches_end_p (regno, opnum, type)
This function uses the same algorithm as reload_reg_free_p above. */
static int
int
reloads_conflict (r1, r2)
int r1, r2;
{

View File

@ -125,11 +125,6 @@ extern rtx arg_pointer_save_area;
/* Chain of all RTL_EXPRs that have insns in them. */
extern tree rtl_expr_chain;
/* Stack allocation level in which temporaries for TARGET_EXPRs live. */
extern int target_temp_slot_level;
extern int temp_slot_level;
/* Functions and data structures for expanding case statements. */

View File

@ -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

View File

@ -705,8 +705,8 @@ you must define @code{POINTERS_EXTEND_UNSIGNED}.
@findex POINTERS_EXTEND_UNSIGNED
@item POINTERS_EXTEND_UNSIGNED
A C expression whose value is nonzero if pointers that need to be
extended from being @code{POINTER_SIZE} bits wide to @code{Pmode}
are sign-extended and zero if they are zero-extended.
extended from being @code{POINTER_SIZE} bits wide to @code{Pmode} are to
be zero-extended and zero if they are to be sign-extended.
You need not define this macro if the @code{POINTER_SIZE} is equal
to the width of @code{Pmode}.

View File

@ -3888,14 +3888,12 @@ main (argc, argv, envp)
mach_dep_reorg_dump = 1;
#endif
break;
case 'A':
flag_debug_asm = 1;
break;
case 'b':
branch_prob_dump = 1;
break;
#ifdef STACK_REGS
case 'k':
stack_reg_dump = 1;
break;
#endif
case 'c':
combine_dump = 1;
break;
@ -3907,18 +3905,23 @@ main (argc, argv, envp)
case 'f':
flow_dump = 1;
break;
case 'F':
addressof_dump = 1;
break;
case 'g':
global_reg_dump = 1;
break;
case 'j':
jump_opt_dump = 1;
break;
case 'D':
addressof_dump = 1;
break;
case 'J':
jump2_opt_dump = 1;
break;
#ifdef STACK_REGS
case 'k':
stack_reg_dump = 1;
break;
#endif
case 'l':
local_reg_dump = 1;
break;
@ -3939,30 +3942,27 @@ main (argc, argv, envp)
case 'r':
rtl_dump = 1;
break;
case 'R':
sched2_dump = 1;
break;
case 's':
cse_dump = 1;
break;
case 'S':
sched_dump = 1;
break;
case 't':
cse2_dump = 1;
break;
case 'N':
regmove_dump = 1;
break;
case 'S':
sched_dump = 1;
break;
case 'R':
sched2_dump = 1;
break;
case 'y':
set_yydebug (1);
break;
case 'x':
rtl_dump_and_exit = 1;
break;
case 'A':
flag_debug_asm = 1;
break;
default:
warning ("unrecognised gcc debugging option: %c", p[-1]);
break;

View File

@ -4428,8 +4428,6 @@ get_unwidened (op, for_type)
tree for_type;
{
/* Set UNS initially if converting OP to FOR_TYPE is a zero-extension. */
/* TYPE_PRECISION is safe in place of type_precision since
pointer types are not allowed. */
register tree type = TREE_TYPE (op);
register unsigned final_prec
= TYPE_PRECISION (for_type != 0 ? for_type : type);
@ -4595,21 +4593,6 @@ get_narrower (op, unsignedp_ptr)
return win;
}
/* 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). */

View File

@ -1 +1 @@
char *version_string = "egcs-2.91.26 19980502 (gcc2 ss-980401 experimental)";
char *version_string = "egcs-2.91.27 19980502 (gcc2 ss-980502 experimental)";