Alexandre Oliva [Tue, 28 Jan 2003 15:48:17 +0000 (15:48 +0000)]
mips.h (UNITS_PER_HWFPVALUE): Renamed from...
* config/mips/mips.h (UNITS_PER_HWFPVALUE): Renamed from...
(UNITS_PER_FPVALUE): Defined as the width of a long double, or
zero if no hardware floating point.
(LONG_DUBLE_TYPE_SIZE): Set to 128 on N32 and N64.
(MAX_FIXED_MODE_SIZE): Define to LONG_DOUBLE_TYPE_SIZE.
(LIBGCC2_LONG_DOUBLE_TYPE_SIZE): Define.
(BIGGEST_ALIGNMENT): Same as LONG_DOUBLE_TYPE_SIZE.
(FUNCTION_VALUE_REGNO_P): Set for FP_RETURN+2 on N32 and N64.
* config/mips/mips.c (mips_arg_info): Pass TFmode values in
even FP registers on N32 and N64.
(mips_setup_incoming_varargs): Use UNITS_PER_HWFPVALUE.
(mips_va_start): Adjust alignment of ARG_POINTER_REGNUM.
(mips_va_arg): Use UNITS_PER_HWFPVALUE. Impose additional
even-register-like alignment to 128-bit arguments.
(save_restore_insns): Use UNITS_PER_HWFPVALUE.
(mips_function_value): Likewise. Return TFmode in $f0 and $f2
on N32 or N64.
* config/mips/_tilib.c (__negti2, __ashlti3, __lshrti3): New.
* config/mips/t-iris6 (LIB2FUNCS_EXTRA): Add _tilib.c.
(TPBIT): Set to tp-bit.c.
(tp-bit.c): Create out of fp-bit.c.
Nathan Sidwell [Tue, 28 Jan 2003 15:26:53 +0000 (15:26 +0000)]
re PR c++/9433 (SegFault in dynamic_cast)
libstdc++-v3:
PR c++/9433
* libsupc++/tinfo.cc (__vmi_class_type_info::__do_dyncast): Cope
with bases which are very ambiguous.
gcc/testsuite:
* g++.dg/abi/dcast1.C: New test.
* config/sh/sh.h (CLASS_MAX_NREGS): If TARGET_SHMEDIA, and the given
class contains a floating-point register, return the size of the
mode in half words.
Gerald Pfeifer [Tue, 28 Jan 2003 12:41:24 +0000 (12:41 +0000)]
Add a missing change to:
* gcc/doc/invoke.texi (Optimization Options): Group together
optional and experimental flags. Move trapv and bounds-check
out of this section. Group floating point flags together.
(Code Gen Options): Move trapv and bounds-check to here.
Alexandre Oliva [Tue, 28 Jan 2003 02:18:43 +0000 (02:18 +0000)]
mips.h (UNITS_PER_HWFPVALUE): Renamed from...
* config/mips/mips.h (UNITS_PER_HWFPVALUE): Renamed from...
(UNITS_PER_FPVALUE): Defined as the width of a long double, or
zero if no hardware floating point.
(LONG_DUBLE_TYPE_SIZE): Set to 128 on N32 and N64.
(MAX_FIXED_MODE_SIZE): Define to LONG_DOUBLE_TYPE_SIZE.
(LIBGCC2_LONG_DOUBLE_TYPE_SIZE): Define.
(BIGGEST_ALIGNMENT): Same as LONG_DOUBLE_TYPE_SIZE.
(FUNCTION_VALUE_REGNO_P): Set for FP_RETURN+2 on N32 and N64.
* config/mips/mips.c (mips_arg_info): Pass TFmode values in
even FP registers on N32 and N64.
(mips_setup_incoming_varargs): Use UNITS_PER_HWFPVALUE.
(mips_va_start): Adjust alignment of ARG_POINTER_REGNUM.
(mips_va_arg): Use UNITS_PER_HWFPVALUE. Impose additional
even-register-like alignment to 128-bit arguments.
(save_restore_insns): Use UNITS_PER_HWFPVALUE.
(mips_function_value): Likewise. Return TFmode in $f0 and $f2
on N32 or N64.
* config/mips/_tilib.c (__negti2, __ashlti3, __lshrti3): New.
* config/mips/t-iris6 (LIB2FUNCS_EXTRA): Add _tilib.c.
(TPBIT): Set to tp-bit.c.
(tp-bit.c): Create out of fp-bit.c.
Nathan Sidwell [Mon, 27 Jan 2003 23:29:50 +0000 (23:29 +0000)]
class.c (update_vtable_entry_for_fn): Add index parameter.
cp:
* class.c (update_vtable_entry_for_fn): Add index parameter.
Generate vcall thunk for covariant overriding from a virtual
primary base.
(dfs_modify_vtables): Adjust.
testsuite:
* g++.dg/abi/covariant1.C: New test.
Jerry Quinn [Mon, 27 Jan 2003 18:06:39 +0000 (18:06 +0000)]
invoke.texi (Optimization Options): Group together optional and experimental flags.
* gcc/doc/invoke.texi (Optimization Options): Group together
optional and experimental flags. Move trapv and bounds-check
out of this section.
(Code Gen Options): Move trapv and bounds-check to here.
Steven Bosscher [Sun, 26 Jan 2003 14:40:22 +0000 (15:40 +0100)]
avr.h, [...]: Undefine ASM_FINISH_DECLARE_OBJECT before defining it.
2003-01-26 Steven Bosscher <s.bosscher@student.tudelft.nl>
* config/avr/avr.h, config/cris/aout.h, config/elfos.h,
config/i386/freebsd-aout.h, config/mips/iris6.h: Undefine
ASM_FINISH_DECLARE_OBJECT before defining it.
* toplev.c (rest_of_decl_compilation): Don't define
ASM_FINISH_DECLARE_OBJECT. Only use it if it is defined.
(rest_of_type_compilation): Don't ATTRIBUTE_UNUSED function
parameters for DWARF2 targets because they _are_ used.
Alexandre Oliva [Sun, 26 Jan 2003 10:06:57 +0000 (10:06 +0000)]
fp-bit.h: Define macros for TFmode floating-point constants in IBM-extended TFmode types.
* fp-bit.h: Define macros for TFmode floating-point constants
in IBM-extended TFmode types.
(TMODES): Define if __LDBL_MANT_DIG__ has the newly-supported
widths.
* config/fp-bit.c (pack_d, unpack_d): Support IBM-extended
TFmode type.
Alexandre Oliva [Sun, 26 Jan 2003 09:33:46 +0000 (09:33 +0000)]
fp-bit.h: Define macros for TFmode floating-point constants in IEEE quad TFmode type.
* config/fp-bit.h: Define macros for TFmode floating-point
constants in IEEE quad TFmode type. Declare functions according
to L_ macros.
(TMODES): Define if __LDBL_MANT_DIG__ is 113.
(TFtype, TItype, UTItype): Define if TMODES is defined.
(MAX_UDI_INT, MAX_DI_INT, BITS_PER_DI): Likewise.
(F_T_BITOFF, D_T_BITOFF): Define.
(IMPLICIT_1, IMPLICIT_2): Cast constants to types that are
guaranteed to be wide enough.
* config/fp-bit.c: Check for L_ macros for tf functions.
(__thenan_tf): New.
(nan): Adjust.
(pack_d, unpack_d): Support IEEE 854 quad type.
(_fpmul_parts): Support TFmode. Compute exponent adjustment
from FRAC_NBITS, FRAC_BITS and NGARDS.
(usi_to_float): Cast constants to be shifted to fractype
instead of assuming long long is wide enough.
(sf_to_tf, df_to_tf, __make_tp, tf_to_df, tf_to_sf): New.
hashtab.h (htab_alloc_with_arg, [...]): Add new types.
include/
* hashtab.h (htab_alloc_with_arg, htab_free_with_arg): Add new types.
(struct htab): Add alloc_arg, alloc_with_arg_f, free_with_arg_f.
(htab_create_alloc_ex): New prototype.
(htab_set_functions_ex): New prototype.
libiberty/
* hashtab.c (htab_create_alloc_ex): New function.
(hatab_set_functions_ex): New function.
(htab_delete, htab_expand): Support alternate allocation functions.
Roger Sayle [Sat, 25 Jan 2003 21:49:52 +0000 (21:49 +0000)]
gcse.c (bypass_last_basic_block): New global variable.
* gcse.c (bypass_last_basic_block): New global variable.
(bypass_block): Use redirect_edge_and_branch_force to redirect
fall-through edges. Use bypass_last_basic_block to determine
which blocks have valid PRE information.
(bypass_conditional_jumps): Initialize bypass_last_basic_block.
bitmap.h (BITMAP_WORD): New typedef: fundamental storage type for bitmaps.
* bitmap.h (BITMAP_WORD): New typedef: fundamental storage
type for bitmaps. Use unsigned long.
(nBITMAP_WORD_BITS): New macro.
(BITMAP_WORD_BITS): New macro.
(rest of file): Use it.
* bitmap.c: Use it.
Roger Sayle [Sat, 25 Jan 2003 17:47:26 +0000 (17:47 +0000)]
builtins.c (purge_builtin_constant_p): Scan insn stream sequentially rather than by basic block.
* builtins.c (purge_builtin_constant_p): Scan insn stream
sequentially rather than by basic block.
* function.c (purge_addressof): Simplify test with INSN_P.
Roger Sayle [Sat, 25 Jan 2003 17:42:39 +0000 (17:42 +0000)]
function.h (struct function): New field calls_constant_p.
* function.h (struct function): New field calls_constant_p.
(current_function_calls_constant_p): New macro for above.
* function.c (prepare_function_start): Initialize calls_eh_return
and calls_constant_p.
* builtins.c (expand_builtin_constant_p): Set calls_constant_p.
* toplev.c (rest_of_compilation): Only call purge_builtin_constant_p
when the current_function_calls_constant_p.
* integrate.c (expand_inline_function): Set calls_constant_p if
the function being inlined has calls_constant_p set.
Roger Sayle [Sat, 25 Jan 2003 17:37:42 +0000 (17:37 +0000)]
cse.c (fold_rtx): Instantiate CONSTANT_P_RTX to 0 when not optimizing, even if flag_gcse is true.
* cse.c (fold_rtx): Instantiate CONSTANT_P_RTX to 0 when not
optimizing, even if flag_gcse is true.
* toplev.c (rest_of_compilation): purge_builtin_constant_p
only needs to be called when "optimize > 0 && flag_gcse".
Roger Sayle [Sat, 25 Jan 2003 17:30:29 +0000 (17:30 +0000)]
stmt.c (emit_case_bit_tests): New routine to implement suitable switch statements using the equivalent of "if...
* stmt.c (emit_case_bit_tests): New routine to implement suitable
switch statements using the equivalent of "if ((1<<x) & cst) ... ".
(case_bit_test_cmp): New comparison function for "qsort" to order
case_bit_tests by decreasing number of destination nodes.
(lshift_cheap_p): New function to determine if "1 << x" is cheap.
(expand_end_case_type): Use emit_case_bit_tests to implement
suitable switch statments.
(CASE_USE_BIT_TESTS): New target macro to disable the above.
* Makefile.in (stmt.o): Add dependency on optab.h.
* doc/tm.texi (CASE_USE_BIT_TESTS): Document new target macro.
* gcc.c-torture/execute/switch-1.c: New test case.
Andreas Schwab [Sat, 25 Jan 2003 17:26:55 +0000 (17:26 +0000)]
crtend.asm [...]: Make __do_global_ctors_aux hidden global and don't put it in .init_array.
* config/ia64/crtend.asm [HAVE_INITFINI_ARRAY]: Make
__do_global_ctors_aux hidden global and don't put it in
.init_array.
* config/ia64/crtbegin.asm [HAVE_INITFINI_ARRAY]: Put it here
instead so that it comes first.
Jan Hubicka [Sat, 25 Jan 2003 15:00:51 +0000 (16:00 +0100)]
i386.c (ix86_expand_movstr, [...]): Consistently do libcall for large blocks.
* i386.c (ix86_expand_movstr, ix86_expand_clrstr): Consistently
do libcall for large blocks.
* i386.md (comi patterns): Set type to ssecomi.
(sse2_unpck?pd): Fix mode of vec_select.
* cse.c: Include except.h
(cse_set_around_loop): Do not create new basic blocks.
* Makefile.in (cse.o): Add dependnecy on except.h
Jan Hubicka [Sat, 25 Jan 2003 11:08:38 +0000 (12:08 +0100)]
builtins.c (fold_trunc_transparent_mathfn): New function.
* builtins.c (fold_trunc_transparent_mathfn): New function.
(fold_builtin): Use it.
* convert.c (convert_to_real): Re-enable code to convert
math functions; add support for floor familly functions.